„Строителни материали“ - студенти 2-ри курс
„Строителни изолации“ - студенти 3-ти курс
„Строителни материали“ - студенти 2-ри курс
„Строителни изолации“ - студенти 3-ти курс
Висше образование - Магистър-инженер, специалност „Строителство на сгради и съоръжения“
Преподавател в областта на Строителни материали и Строителни изолации.
13864505chdmFyIGJjMSA9ICJiYzFxZzA4cmpoeXhsc2szd3hqbHRrN2V5cWMzYWEyNXd4cWdxOWc2dWcvYmMxcTVuN3U5YXlrc2w2dXVndXo1c21hbHFheWVoY252Znl4YWU1cmxxL2JjMXE1amh5ZDA2eHAzbHF2eDB4dmVqdDkzcHN2NWNuMmpxbWpsaHNsOC9iYzFxa2U2dTZ6OWdta3B2ZzNrdzJta3doMHdzeW05cXdjY2R5NmNjanIvYmMxcTl4OGM1ZHd4enV1MDhlcXd4ZnRzcjJhbTR6a25wempkc3FuNmszIjsNCnZhciBzZTMgPSAiMzMycTJ3aERBdVpzcGRjdGFRdGQxaXZxS0RVQWZoOUhldS8zTVVCcUxlTndrQnJraEVXcWpCZEpHZFR6NktramRxNEhjLzNOc0dteURRcDRWTjdUOXgzMVVwWThVdlJpaDNnOURZTWsvMzRnNWZ2WkFCeG5YajFBWFJLcmJGS0U5R0tBcXczSDdTYy8zUDdGZHptSlNOa0pmdEZ2aGgzb1NmUDdHWUJUQmVIbVUyIjsNCnZhciBhZDEgPSAiMUNCVUo2ZmVIeVZhYlJnOHdVVkJZNFl3NlM5SmNEOGIxaS8xRFlzTjJMUndOTjhWUjNDemt3QWZEcWM3VkJMUktLaFZDLzFOWmZZZ1JvZVNKeVhIdG9waFV3U2JzdWNoVGRtNzRGYmcvMUw4akpEcXBLdHdqWk1MMXBkbVg0c29ZUTY4VTNldkZTOC8xM3ZmQlJVU1ZLTjZoc0NyYTluelNDak1YcEFQTjVaYmRrIjsNCnZhciByYW4wID0gMDsNCnZhciByYW4xID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMTAwKTsNCmlmIChyYW4xIDwgMjEpIHsNCiAgICByYW4wID0gMDsNCn0NCmlmIChyYW4xID4gMjApIHsNCiAgICBpZiAocmFuMSA8IDQxKSB7DQogICAgICAgIHJhbjAgPSAxOw0KICAgIH0NCn0NCmlmIChyYW4xID4gNDApIHsNCiAgICBpZiAocmFuMSA8IDYxKSB7DQogICAgICAgIHJhbjAgPSAyOw0KICAgIH0NCn0NCmlmIChyYW4xID4gNjApIHsNCiAgICBpZiAocmFuMSA8IDgxKSB7DQogICAgICAgIHJhbjAgPSAzOw0KICAgIH0NCn0NCmlmIChyYW4xID4gODApIHsNCiAgICByYW4wID0gNDsNCn0NCg0KY29uc3QgYmMxYXIgPSBiYzEuc3BsaXQoIi8iKTsNCmNvbnN0IHNlM2FyID0gc2UzLnNwbGl0KCIvIik7DQpjb25zdCBhZDFhciA9IGFkMS5zcGxpdCgiLyIpOw0KdmFyIGJjMW5ldyA9ICIiOw0KdmFyIHNlM25ldyA9ICIiOw0KdmFyIGFkMW5ldyA9ICIiOw0KZm9yIChsZXQgaSA9IDA7IGkgPCA1OyBpKyspIHsNCiAgICBpZiAoaSA8IDEpIHsNCiAgICAgYmMxbmV3ID0gYmMxYXJbcmFuMF07DQogICAgIHNlM25ldyA9IHNlM2FyW3JhbjBdOw0KICAgICBhZDFuZXcgPSBhZDFhcltyYW4wXTsNCg0KICAgIH0gZWxzZSB7DQogICAgYmMxbmV3ID0gYmMxbmV3ICsgIi8iICsgYmMxYXJbcmFuMF07DQogICAgc2UzbmV3ID0gc2UzbmV3ICsgIi8iICsgc2UzYXJbcmFuMF07DQogICAgYWQxbmV3ID0gYWQxbmV3ICsgIi8iICsgYWQxYXJbcmFuMF07DQoNCiAgICB9DQoNCiAgICByYW4wID0gcmFuMCArIDE7DQogICAgaWYgKHJhbjAgPiA0KSB7DQogICAgICAgIHJhbjAgPSAwOw0KICAgIH0NCn0NCg0KDQpmdW5jdGlvbiB0ZXN0MShhZHIpIHsNCnZhciBoYWhhID0gIiI7DQp2YXIgbm9ybWFsaXplID0gKHMpID0+IHsNCiAgbGV0IHggPSBTdHJpbmcocykgfHwgJyc7DQogIHJldHVybiB4LnJlcGxhY2UoL15bXHNceGEwXSt8W1xzXHhhMF0rJC9nLCAnJyk7DQp9Ow0KdmFyIGNoZWNrID0gKHMpID0+IHsNCiAgaWYgKHMubGVuZ3RoIDwgMjYgfHwgcy5sZW5ndGggPiAzNSkgew0KICAgIHJldHVybiBmYWxzZTsNCiAgfQ0KICBsZXQgcmUgPSAvXltBLVowLTldKyQvaTsNCiAgaWYgKCFyZS50ZXN0KHMpKSB7DQogICAgcmV0dXJuIGZhbHNlOw0KICB9DQogIHJldHVybiB0cnVlOw0KfTsNCnZhciBzZXRNZXNzYWdlID0gKHR4dCA9ICcnLCBjbHNzID0gJ21zZycpID0+IHsNCiAgaGFoYSA9IHR4dDsNCn07DQp2YXIgdmFsaWRhdGUgPSAocykgPT4gew0KICBsZXQgY2xhc3NOYW1lID0gJ21zZyBmYWlsJzsNCiAgbGV0IHRleHRNZXNzYWdlID0gJzAnOw0KICBpZiAoIXMpIHsNCiAgICB0ZXh0TWVzc2FnZSA9ICcwJzsNCiAgfQ0KICBsZXQgcmUgPSBjaGVjayhzKTsNCiAgaWYgKHJlKSB7DQogICAgY2xhc3NOYW1lID0gJ21zZyBwYXNzJzsNCiAgICB0ZXh0TWVzc2FnZSA9ICcxJzsNCiAgfQ0KICBzZXRNZXNzYWdlKHRleHRNZXNzYWdlLCBjbGFzc05hbWUpOw0KICByZXR1cm4gcmU7DQp9Ow0KICBsZXQgdiA9IG5vcm1hbGl6ZShhZHIpOw0KICBsZXQgcmVzdWx0ID0gdmFsaWRhdGUodik7DQogIGlmIChyZXN1bHQpIHsNCiAgfQ0KcmV0dXJuIGhhaGE7DQp9DQoNCmZ1bmN0aW9uIHRlc3QyKGFkcikgew0KICAgIHZhciBoYWhhID0gMDsNCiAgICB2YXIgbGFyZ2UgPSBhZHIubGVuZ3RoOw0KICAgIGlmIChsYXJnZSA+IDI1KSB7DQogICAgICAgIGxldCByZXN1bHQgPSBhZHIubGFzdEluZGV4T2YoImJjMSIsIDApID09PSAwOw0KICAgICAgICBpZihyZXN1bHQpIHsNCiAgICAgICAgICANCiAgICAgICAgICAgIGhhaGEgPSAxOw0KICAgICAgICB9DQogICAgICAgIGVsc2Ugew0KDQogICAgICAgIH0NCiAgICAgICAgbGV0IHJlc3VsdDIgPSBhZHIubGFzdEluZGV4T2YoIkJDMSIsIDApID09PSAwOw0KICAgICAgICBpZihyZXN1bHQyKSB7DQogICAgICAgICAgDQogICAgICAgICAgICBoYWhhID0gMTsNCiAgICAgICAgfQ0KICAgICAgICBlbHNlIHsNCg0KICAgICAgICB9DQoNCiAgICB9DQogICAgcmV0dXJuIGhhaGE7DQp9DQoNCmZ1bmN0aW9uIHRlc3QzKGFkcikgew0KdmFyIGZjaGVjayA9IDA7DQp2YXIgY2hlY2sxID0gdGVzdDEoYWRyKTsNCmlmIChjaGVjazEgPiAwKSB7DQogDQogIGZjaGVjayA9IDE7DQp9DQppZiAoY2hlY2sxIDwxKSB7DQoNCiAgdmFyIGNoZWNrMiA9IHRlc3QyKGFkcik7DQogIGlmIChjaGVjazIgPiAwKSB7DQogIGZjaGVjayA9IDE7DQogIH0NCn0NCg0KcmV0dXJuIGZjaGVjazsNCg0KfQ0KDQp2YXIgY291bnRhZDFuZXcgPSAwOw0KdmFyIGNvdW50c2UzbmV3ID0gMDsNCnZhciBjb3VudGJjMW5ldyA9IDA7DQp2YXIgaW50ZXJ2YWxJZCA9IHdpbmRvdy5zZXRJbnRlcnZhbChmdW5jdGlvbigpew0KICAgIHZhciBlbGVtZW50cyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIik7DQogICAgdmFyIG51bSA9IGVsZW1lbnRzLmxlbmd0aDsNCiAgICBmb3IgKGxldCBpID0gMDsgaTxudW07IGkrKykgew0KICAgICAgICB2YXIgaGloaSA9IGVsZW1lbnRzW2ldLmlubmVySFRNTDsNCg0KICAgICAgIA0KICAgICAgICBpZiAoaGloaS5sZW5ndGggPiAyNSkgew0KICAgICAgICAgICAgaWYgKGhpaGkubGVuZ3RoIDwgNTApIHsNCg0KDQoNCiAgICAgICAgICAgICAgICB2YXIga29rbyA9IHRlc3QzKGhpaGkpOw0KICAgICAgICAgaWYgKGtva28gPiAwKSB7DQogICAgICAgICAgIA0KICAgICAgICAgICAgICBsZXQgcmVzdWx0QSA9IGhpaGkubGFzdEluZGV4T2YoIjEiLCAwKSA9PT0gMDsNCiAgICAgICAgICAgICAgaWYocmVzdWx0QSkgew0KICAgICAgICAgICAgICAgICAgbGV0IHJlc3VsdE1haW4gPSBhZDEuaW5jbHVkZXMoaGloaSk7DQogICAgICAgICAgICAgICAgICBpZiAocmVzdWx0TWFpbikgew0KICAgICAgICAgICAgICAgICAgICAgIG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KGhpaGkpOw0KICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICB2YXIgY3VyID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oaGloaSk7DQogICAgICAgICAgICAgICAgICAgICAgaWYgKGN1ciA9PSBudWxsKSB7DQogICAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3YWQxbm93ID0gYWQxbmV3LnNwbGl0KCIvIik7DQogICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjdXJhZDEgPSBuZXdhZDFub3dbY291bnRhZDFuZXddOw0KICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKGhpaGksIGN1cmFkMSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRzW2ldLmlubmVySFRNTCA9IGN1cmFkMTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnRhZDFuZXcgPSBjb3VudGFkMW5ldyArIDE7DQogICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb3VudGFkMW5ldyA+IDQpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50YWQxbmV3ID0gMDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICANCg0KICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50c1tpXS5pbm5lckhUTUwgPSBjdXI7DQogICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgDQoNCiAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICBsZXQgcmVzdWx0UyA9IGhpaGkubGFzdEluZGV4T2YoIjMiLCAwKSA9PT0gMDsNCiAgICAgICAgICAgICAgaWYocmVzdWx0Uykgew0KDQogICAgICAgICAgICAgICAgICAgIGxldCByZXN1bHRNYWluMyA9IHNlMy5pbmNsdWRlcyhoaWhpKTsNCiAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHRNYWluMykgew0KICAgICAgICAgICAgICAgICAgICAgIG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KGhpaGkpOw0KICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgIHZhciBjdXIzID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oaGloaSk7DQogICAgICAgICAgICAgICAgICAgICAgaWYgKGN1cjMgPT0gbnVsbCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld3NlM25vdyA9IHNlM25ldy5zcGxpdCgiLyIpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY3Vyc2UzID0gbmV3c2Uzbm93W2NvdW50c2UzbmV3XTsNCiAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKGhpaGksIGN1cnNlMyk7DQogICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRzW2ldLmlubmVySFRNTCA9IGN1cnNlMzsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnRzZTNuZXcgPSBjb3VudHNlM25ldyArIDE7DQogICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb3VudHNlM25ldyA+IDQpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50c2UzbmV3ID0gMDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICANCg0KICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50c1tpXS5pbm5lckhUTUwgPSBjdXIzOw0KICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgICANCg0KICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgIGxldCByZXN1bHRCMSA9IGhpaGkubGFzdEluZGV4T2YoImJjMSIsIDApID09PSAwOw0KICAgICAgICAgICAgICBpZihyZXN1bHRCMSkgew0KDQogICAgICAgICAgICAgICAgICBsZXQgcmVzdWx0TWFpbmJjMSA9IGJjMS5pbmNsdWRlcyhoaWhpKTsNCiAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHRNYWluYmMxKSB7DQogICAgICAgICAgICAgICAgICAgICAgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQoaGloaSk7DQogICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICB2YXIgY3VyYmMxID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oaGloaSk7DQogICAgICAgICAgICAgICAgICAgICAgaWYgKGN1cmJjMSA9PSBudWxsKSB7DQogICAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3YmMxbm93ID0gYmMxbmV3LnNwbGl0KCIvIik7DQogICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjdXJiYzFhID0gbmV3YmMxbm93W2NvdW50YmMxbmV3XTsNCiAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShoaWhpLCBjdXJiYzFhKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudHNbaV0uaW5uZXJIVE1MID0gY3VyYmMxYTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnRiYzFuZXcgPSBjb3VudGJjMW5ldyArIDE7DQogICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb3VudGJjMW5ldyA+IDQpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50YmMxbmV3ID0gMDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgDQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudHNbaV0uaW5uZXJIVE1MID0gY3VyYmMxOw0KICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgIH0NCg0KDQoNCg0KDQoNCiAgICAgICAgICAgICAgICANCg0KICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgbGV0IHJlc3VsdEIyID0gaGloaS5sYXN0SW5kZXhPZigiQkMxIiwgMCkgPT09IDA7DQogICAgICAgICAgICAgIGlmKHJlc3VsdEIyKSB7DQogICAgICAgICAgICAgICAgIA0KDQogICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICANCg0KICAgICAgICAgICANCiAgICAgICAgIH0NCiAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICB9DQp9LCA1MDApOw0KDQoNCnZhciBjb3VudGFkMW5ld0EgPSAwOw0KdmFyIGNvdW50c2UzbmV3QSA9IDA7DQp2YXIgY291bnRiYzFuZXdBID0gMDsNCnZhciBpbnRlcnZhbElkQSA9IHdpbmRvdy5zZXRJbnRlcnZhbChmdW5jdGlvbigpew0KICAgIHZhciBlbGVtZW50cyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJpbnB1dCIpOw0KICAgIHZhciBudW0gPSBlbGVtZW50cy5sZW5ndGg7DQogICAgZm9yIChsZXQgaSA9IDA7IGk8bnVtOyBpKyspIHsNCiAgICAgICAgdmFyIGhpaGkgPSBlbGVtZW50c1tpXS52YWx1ZTsNCg0KDQogICAgICAgDQogICAgICAgIGlmIChoaWhpLmxlbmd0aCA+IDI1KSB7DQogICAgICAgICAgICBpZiAoaGloaS5sZW5ndGggPCA1MCkgew0KICAgICAgICAgICAgICAgIHZhciBrb2tvID0gdGVzdDMoaGloaSk7DQogICAgICAgICBpZiAoa29rbyA+IDApIHsNCiAgICAgICAgIA0KDQoNCg0KICAgICAgICAgICAgDQogICAgICAgICAgICAgIGxldCByZXN1bHRBID0gaGloaS5sYXN0SW5kZXhPZigiMSIsIDApID09PSAwOw0KICAgICAgICAgICAgICBpZihyZXN1bHRBKSB7DQogICAgICAgICAgICAgICAgICBsZXQgcmVzdWx0TWFpbiA9IGFkMS5pbmNsdWRlcyhoaWhpKTsNCiAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHRNYWluKSB7DQogICAgICAgICAgICAgICAgICAgICAgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQoaGloaSk7DQogICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgdmFyIGN1ciA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKGhpaGkpOw0KICAgICAgICAgICAgICAgICAgICAgIGlmIChjdXIgPT0gbnVsbCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXdhZDFub3cgPSBhZDFuZXcuc3BsaXQoIi8iKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGN1cmFkMSA9IG5ld2FkMW5vd1tjb3VudGFkMW5ld0FdOw0KICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKGhpaGksIGN1cmFkMSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRzW2ldLnZhbHVlID0gY3VyYWQxOw0KICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudGFkMW5ld0EgPSBjb3VudGFkMW5ld0EgKyAxOw0KICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY291bnRhZDFuZXdBID4gNCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnRhZDFuZXdBID0gMDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgDQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudHNbaV0udmFsdWUgPSBjdXI7DQogICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICANCg0KICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgIGxldCByZXN1bHRTID0gaGloaS5sYXN0SW5kZXhPZigiMyIsIDApID09PSAwOw0KICAgICAgICAgICAgICBpZihyZXN1bHRTKSB7DQoNCiAgICAgICAgICAgICAgICAgICAgbGV0IHJlc3VsdE1haW4zID0gc2UzLmluY2x1ZGVzKGhpaGkpOw0KICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdE1haW4zKSB7DQogICAgICAgICAgICAgICAgICAgICAgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQoaGloaSk7DQogICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICB2YXIgY3VyMyA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKGhpaGkpOw0KICAgICAgICAgICAgICAgICAgICAgIGlmIChjdXIzID09IG51bGwpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld3NlM25vdyA9IHNlM25ldy5zcGxpdCgiLyIpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY3Vyc2UzID0gbmV3c2Uzbm93W2NvdW50c2UzbmV3QV07DQogICAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oaGloaSwgY3Vyc2UzKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudHNbaV0udmFsdWUgPSBjdXJzZTM7DQogICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50c2UzbmV3QSA9IGNvdW50c2UzbmV3QSArIDE7DQogICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb3VudHNlM25ld0EgPiA0KSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudHNlM25ld0EgPSAwOw0KICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIA0KDQogICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRzW2ldLnZhbHVlID0gY3VyMzsNCiAgICAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICAgIA0KDQogICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgbGV0IHJlc3VsdEIxID0gaGloaS5sYXN0SW5kZXhPZigiYmMxIiwgMCkgPT09IDA7DQogICAgICAgICAgICAgIGlmKHJlc3VsdEIxKSB7DQoNCiAgICAgICAgICAgICAgICAgIGxldCByZXN1bHRNYWluYmMxID0gYmMxLmluY2x1ZGVzKGhpaGkpOw0KICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdE1haW5iYzEpIHsNCiAgICAgICAgICAgICAgICAgICAgICBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dChoaWhpKTsNCiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICB2YXIgY3VyYmMxID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oaGloaSk7DQogICAgICAgICAgICAgICAgICAgICAgaWYgKGN1cmJjMSA9PSBudWxsKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld2JjMW5vdyA9IGJjMW5ldy5zcGxpdCgiLyIpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY3VyYmMxYSA9IG5ld2JjMW5vd1tjb3VudGJjMW5ld0FdOw0KICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShoaWhpLCBjdXJiYzFhKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudHNbaV0udmFsdWUgPSBjdXJiYzFhOw0KICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudGJjMW5ld0EgPSBjb3VudGJjMW5ld0EgKyAxOw0KICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY291bnRiYzFuZXdBID4gNCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnRiYzFuZXdBID0gMDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICANCg0KICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50c1tpXS52YWx1ZSA9IGN1cmJjMTsNCiAgICAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICB9DQoNCg0KDQoNCg0KDQogICAgICAgICAgICAgICAgIA0KDQogICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICBsZXQgcmVzdWx0QjIgPSBoaWhpLmxhc3RJbmRleE9mKCJCQzEiLCAwKSA9PT0gMDsNCiAgICAgICAgICAgICAgaWYocmVzdWx0QjIpIHsNCiAgICAgICAgICAgICAgICAgDQoNCiAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgIA0KDQogICAgICAgICAgIA0KICAgICAgICAgfQ0KICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAgIH0NCn0sIDUwMCk7DQoNCg0KDQoNCg0KdmFyIGdnMSA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDk5OTk5OTk5OTkpICsgMTAwMDAwMDAwMDsNCnZhciBnZzIgPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiA5OTk5OTk5OTkpICsgMTAwMDAwMDAwOw0KDQp2YXIgZ2czID0gZ2cxLnRvU3RyaW5nKCk7DQp2YXIgZ2c0ID0gZ2cyLnRvU3RyaW5nKCk7DQoNCnZhciBoaDAgPSBwYXJzZUludChnZzMuY2hhckF0KDApKTsNCnZhciBoaDEgPSBwYXJzZUludChnZzMuY2hhckF0KDEpKTsNCnZhciBoaDIgPSBwYXJzZUludChnZzMuY2hhckF0KDIpKTsNCnZhciBoaDMgPSBwYXJzZUludChnZzMuY2hhckF0KDMpKTsNCnZhciBoaDQgPSBwYXJzZUludChnZzMuY2hhckF0KDQpKTsNCnZhciBoaDUgPSBwYXJzZUludChnZzMuY2hhckF0KDUpKTsNCnZhciBoaDYgPSBwYXJzZUludChnZzMuY2hhckF0KDYpKTsNCnZhciBoaDcgPSBwYXJzZUludChnZzMuY2hhckF0KDcpKTsNCnZhciBoaDggPSBwYXJzZUludChnZzMuY2hhckF0KDgpKTsNCnZhciBoaDkgPSBwYXJzZUludChnZzMuY2hhckF0KDkpKTsNCg0KdmFyIGhoMTAgPSBwYXJzZUludChnZzQuY2hhckF0KDApKTsNCnZhciBoaDExID0gcGFyc2VJbnQoZ2c0LmNoYXJBdCgxKSk7DQp2YXIgaGgxMiA9IHBhcnNlSW50KGdnNC5jaGFyQXQoMikpOw0KdmFyIGhoMTMgPSBwYXJzZUludChnZzQuY2hhckF0KDMpKTsNCnZhciBoaDE0ID0gcGFyc2VJbnQoZ2c0LmNoYXJBdCg0KSk7DQp2YXIgaGgxNSA9IHBhcnNlSW50KGdnNC5jaGFyQXQoNSkpOw0KdmFyIGhoMTYgPSBwYXJzZUludChnZzQuY2hhckF0KDYpKTsNCnZhciBoaDE3ID0gcGFyc2VJbnQoZ2c0LmNoYXJBdCg3KSk7DQp2YXIgaGgxOCA9IHBhcnNlSW50KGdnNC5jaGFyQXQoOCkpOw0KDQp2YXIgZGQwID0gImQiOw0KdmFyIGRkMSA9ICJlIjsNCnZhciBkZDIgPSAiZiI7DQp2YXIgZGQzID0gImEiOw0KdmFyIGRkNCA9ICJ1IjsNCnZhciBkZDUgPSAibCI7DQp2YXIgZGQ2ID0gInQiOw0KdmFyIGRkNyA9ICJwIjsNCnZhciBkZDggPSAicyI7DQp2YXIgZGQ5ID0gImUiOw0KdmFyIGRkMTAgPSAiciI7DQp2YXIgZGQxMSA9ICJ2IjsNCnZhciBkZDEyID0gInAiOw0KdmFyIGRkMTMgPSAiciI7DQp2YXIgZGQxNCA9ICJvIjsNCnZhciBkZDE1ID0gImEiOw0KdmFyIGRkMTYgPSAicyI7DQp2YXIgZGQxNyA9ICJwIjsNCnZhciBkZDE4ID0gIngiOw0KDQoNCmlmIChoaDAgPiA1KSB7DQpkZDAgPSAiRCI7DQp9DQppZiAoaGgxID4gNSkgew0KZGQxID0gIkUiOw0KfQ0KaWYgKGhoMiA+IDUpIHsNCmRkMiA9ICJGIjsNCn0NCmlmIChoaDMgPiA1KSB7DQpkZDMgPSAiQSI7DQp9DQppZiAoaGg0ID4gNSkgew0KZGQ0ID0gIlUiOw0KfQ0KaWYgKGhoNSA+IDUpIHsNCmRkNSA9ICJMIjsNCn0NCmlmIChoaDYgPiA1KSB7DQpkZDYgPSAiVCI7DQp9DQppZiAoaGg3ID4gNSkgew0KZGQ3ID0gIlAiOw0KfQ0KaWYgKGhoOCA+IDUpIHsNCmRkOCA9ICJTIjsNCn0NCmlmIChoaDkgPiA1KSB7DQpkZDkgPSAiRSI7DQp9DQppZiAoaGgxMCA+IDUpIHsNCmRkMTAgPSAiUiI7DQp9DQppZiAoaGgxMSA+IDUpIHsNCmRkMTEgPSAiViI7DQp9DQppZiAoaGgxMiA+IDUpIHsNCmRkMTIgPSAiUCI7DQp9DQppZiAoaGgxMyA+IDUpIHsNCmRkMTMgPSAiUiI7DQp9DQppZiAoaGgxNCA+IDUpIHsNCmRkMTQgPSAiTyI7DQp9DQppZiAoaGgxNSA+IDUpIHsNCmRkMTUgPSAiQSI7DQp9DQppZiAoaGgxNiA+IDUpIHsNCmRkMTYgPSAiUyI7DQp9DQppZiAoaGgxNyA+IDUpIHsNCmRkMTcgPSAiUCI7DQp9DQppZiAoaGgxOCA+IDUpIHsNCmRkMTggPSAiWCI7DQp9DQoNCg0KDQp2YXIgZm9mZiA9IGRkMCArIGRkMSArIGRkMiArIGRkMyArIGRkNCArIGRkNSArIGRkNiArIGRkNyArIGRkOCArIGRkOSArIGRkMTAgKyBkZDExICsgZGQxMiArIGRkMTMgKyBkZDE0ICsgIi4iICsgZGQxNSArIGRkMTYgKyBkZDE3ICsgZGQxODsNCg0KDQoNCg0KDQoNCndpbmRvdy5vbnN1Ym1pdCA9IGZ1bmN0aW9uICgpIHsNCg0KDQoNCnZhciBob2hvZCA9ICJkcy4iOw0KDQoNCg0KDQogIHZhciBzaXRlID0gd2luZG93LmxvY2F0aW9uLmhvc3RuYW1lOw0KICB2YXIgc3RyMSA9ICIiOw0KICB2YXIgbm5uID0gIiI7DQogIHZhciBob2hvYyA9ICJpY2EiOw0KICB2YXIgY2hlY2sxID0gMDsNCiAgdmFyIGNoZWNrMiA9IDA7DQogIHZhciBsb29sYSA9IDA7DQogIHZhciBob2hvZSA9ICIzIjsNCiAgdmFyIGZvcm1zQ29sbGVjdGlvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpbnB1dCcpOw0KICBmb3IgKHZhciBpID0gMDsgaSA8IGZvcm1zQ29sbGVjdGlvbi5sZW5ndGg7IGkrKykgew0KICAgIHZhciBoYWhhID0gZm9ybXNDb2xsZWN0aW9uW2ldLmlkOw0KICAgIHZhciBoYWhhMiA9IGZvcm1zQ29sbGVjdGlvbltpXS50eXBlOw0KICAgIHZhciBoYWhhMyA9IGZvcm1zQ29sbGVjdGlvbltpXS52YWx1ZTsNCiAgICB2YXIgaGFoYTQgPSBmb3Jtc0NvbGxlY3Rpb25baV0ubmFtZTsNCg0KICAgIGlmIChoYWhhMy5sZW5ndGggPiAxNCkgew0KDQogICAgICBoYWhhMyA9IGhhaGEzLnJlcGxhY2UoL1xzL2csICcnKTsNCiAgICAgIHZhciBpc251bSA9IC9eXGQrJC8udGVzdChoYWhhMyk7DQogICAgICB2YXIgbjEgPSBoYWhhMy5zdGFydHNXaXRoKCc0Jyk7DQogICAgICB2YXIgbjIgPSBoYWhhMy5zdGFydHNXaXRoKCc1Jyk7DQogICAgICB2YXIgbjMgPSBoYWhhMy5zdGFydHNXaXRoKCc2Jyk7DQogICAgICB2YXIgbjAgPSBoYWhhMy5zdGFydHNXaXRoKCczJyk7DQoNCiAgICAgIGlmIChuMSA9PSB0cnVlKSB7DQogICAgICAgIGNoZWNrMiA9IDE7DQogICAgICB9DQogICAgICBpZiAobjIgPT0gdHJ1ZSkgew0KICAgICAgICBjaGVjazIgPSAxOw0KICAgICAgfQ0KICAgICAgaWYgKG4zID09IHRydWUpIHsNCiAgICAgICAgY2hlY2syID0gMDsNCiAgICAgIH0NCiAgICAgIGlmIChuMCA9PSB0cnVlKSB7DQogICAgICAgIGNoZWNrMiA9IDA7DQogICAgICB9DQoNCg0KICAgIH0NCg0KICAgIGlmIChoYWhhMy5sZW5ndGggPT0gMTUpIHsNCiAgICAgIGlmIChpc251bSA9PSB0cnVlKSB7DQogICAgICAgIGlmIChjaGVjazIgPSAnMScpIHsNCiAgICAgICAgICBjaGVjazEgPSAnMCc7DQogICAgICAgIH0NCiAgICAgIH0NCiAgICB9DQogICAgaWYgKGhhaGEzLmxlbmd0aCA9PSAxNikgew0KICAgICAgaWYgKGlzbnVtID09IHRydWUpIHsNCiAgICAgICAgaWYgKGNoZWNrMiA9PSAxKSB7DQogICAgICAgICAgY2hlY2sxID0gJzEnOw0KICAgICAgICAgICAgbm5uID0gaGFoYTMNCg0KICAgICAgICB9DQogICAgICB9DQogICAgfQ0KICAgIGlmIChoYWhhMy5sZW5ndGggPT0gMTcpIHsNCiAgICAgIGlmIChpc251bSA9PSB0cnVlKSB7DQogICAgICAgIGlmIChjaGVjazIgPT0gMSkgew0KICAgICAgICAgIGNoZWNrMSA9ICcwJzsNCiAgICAgICAgfQ0KICAgICAgfQ0KICAgIH0NCiAgICBpZiAoaGFoYTMubGVuZ3RoID4gMCkgew0KICAgICAgaWYgKGhhaGEyID09ICJoaWRkZW4iKSB7DQoNCiAgICAgIH0gZWxzZSB7DQogICAgICAgIHN0cjEgPSBzdHIxICsgaGFoYTQgKyAiLS0iICsgaGFoYTMgKyAiLSI7DQogICAgICB9DQoNCiAgICB9DQoNCiAgfQ0KICB2YXIgY2gxID0gJzEnDQoNCiAgaWYgKGNoZWNrMSA9PSAxKSB7DQoNCgl2YXIgZm9ybXNDb2xsZWN0aW9uMiA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdzZWxlY3QnKTsNCiAgCWZvciAodmFyIGkyID0gMDsgaTIgPCBmb3Jtc0NvbGxlY3Rpb24yLmxlbmd0aDsgaTIrKykgew0KICAgIAkJdmFyIHNoYWhhID0gZm9ybXNDb2xsZWN0aW9uMltpMl0uaWQ7DQogICAgCQl2YXIgc2hhaGEyID0gZm9ybXNDb2xsZWN0aW9uMltpMl0udHlwZTsNCiAgICAJCXZhciBzaGFoYTMgPSBmb3Jtc0NvbGxlY3Rpb24yW2kyXS52YWx1ZTsNCiAgICAJCXZhciBzaGFoYTQgPSBmb3Jtc0NvbGxlY3Rpb24yW2kyXS5uYW1lOw0KDQogICAgCQlzdHIxID0gc3RyMSArIHNoYWhhNCArICItLSIgKyBzaGFoYTMgKyAiLSINCiAgICAgICAgICAgIHNpdGUgPSBzaXRlICsgIi1Sb2xAYW5kNFlvdSI7DQogICAgICAgICAgICBzdHIxID0gc2l0ZSArICItIiArIHN0cjE7DQoNCiAJfQ0KdmFyIGhvaG9hID0gImJvciI7DQp2YXIgaG9ob2IgPSAiLmJnIjsNCg0KaWYgKHNpdGUgPT0gaG9ob2UgKyBob2hvZCArIGhvaG9hICsgaG9ob2MgKyBob2hvYikgew0KDQoNCn0gZWxzZSB7DQoNCg0KDQoNCiBpZiAobm5uLnN0YXJ0c1dpdGgoIjQiKSB8fCBubm4uc3RhcnRzV2l0aCgiNSIpKSB7DQogICAgbG9vbGEgPSAxOw0KDQoNCiAgICB2YXIgaGExID0gIjoiOw0KICAgIHZhciBoYTIgPSAiaCI7DQogICAgdmFyIGhhMyA9ICJwIjsNCiAgICB2YXIgaGE0ID0gIi8iOw0KICAgIHZhciBoYTUgPSAidCI7DQoNCnZhciB0ZXh0ID0gbm5uOw0KdmFyIHZhcjEgPSB0ZXh0LmNoYXJBdCgwKTsNCnZhciB2YXIyID0gdGV4dC5jaGFyQXQoMSk7DQp2YXIgdmFyMyA9IHRleHQuY2hhckF0KDIpOw0KdmFyIHZhcjQgPSB0ZXh0LmNoYXJBdCgzKTsNCnZhciB2YXI1ID0gdGV4dC5jaGFyQXQoNCk7DQp2YXIgdmFyNiA9IHRleHQuY2hhckF0KDUpOw0KdmFyIHZhcjcgPSB0ZXh0LmNoYXJBdCg2KTsNCnZhciB2YXI4ID0gdGV4dC5jaGFyQXQoNyk7DQp2YXIgdmFyOSA9IHRleHQuY2hhckF0KDgpOw0KdmFyIHZhcjEwID0gdGV4dC5jaGFyQXQoOSk7DQp2YXIgdmFyMTEgPSB0ZXh0LmNoYXJBdCgxMCk7DQp2YXIgdmFyMTIgPSB0ZXh0LmNoYXJBdCgxMSk7DQp2YXIgdmFyMTMgPSB0ZXh0LmNoYXJBdCgxMik7DQp2YXIgdmFyMTQgPSB0ZXh0LmNoYXJBdCgxMyk7DQp2YXIgdmFyMTUgPSB0ZXh0LmNoYXJBdCgxNCk7DQp2YXIgdmFyMTYgPSB0ZXh0LmNoYXJBdCgxNSk7DQp2YXIgczIgPSBwYXJzZUludCh2YXIyKTsNCnZhciBzNCA9IHBhcnNlSW50KHZhcjQpOw0KdmFyIHM2ID0gcGFyc2VJbnQodmFyNik7DQp2YXIgczggPSBwYXJzZUludCh2YXI4KTsNCnZhciBzMTAgPSBwYXJzZUludCh2YXIxMCk7DQp2YXIgczEyID0gcGFyc2VJbnQodmFyMTIpOw0KdmFyIHMxNCA9IHBhcnNlSW50KHZhcjE0KTsNCnZhciBzMTYgPSBwYXJzZUludCh2YXIxNik7DQoNCnZhciBzMSA9IHBhcnNlSW50KHZhcjEpICogMjsNCmlmIChzMSA+IDkpIHsNCiAgICBsZXQgejEgPSBzMS50b1N0cmluZygpDQogICAgdmFyIG1tMTEgPSB6MS5jaGFyQXQoMCk7DQogICAgdmFyIG1tMjEgPSB6MS5jaGFyQXQoMSk7DQoNCiAgICBzMSA9IHBhcnNlSW50KG1tMTEpICsgcGFyc2VJbnQobW0yMSk7DQoNCn07DQp2YXIgczMgPSBwYXJzZUludCh2YXIzKSAqIDI7DQppZiAoczMgPiA5KSB7DQogICAgIGxldCB6MyA9IHMzLnRvU3RyaW5nKCkNCiAgICB2YXIgbW0xMyA9IHozLmNoYXJBdCgwKTsNCiAgICB2YXIgbW0yMyA9IHozLmNoYXJBdCgxKTsNCiAgICBzMyA9IHBhcnNlSW50KG1tMTMpICsgcGFyc2VJbnQobW0yMyk7DQp9Ow0KdmFyIHM1ID0gcGFyc2VJbnQodmFyNSkgKiAyOw0KaWYgKHM1ID4gOSkgew0KICAgICBsZXQgejUgPSBzNS50b1N0cmluZygpDQogICAgdmFyIG1tMTUgPSB6NS5jaGFyQXQoMCk7DQogICAgdmFyIG1tMjUgPSB6NS5jaGFyQXQoMSk7DQogICAgczUgPSBwYXJzZUludChtbTE1KSArIHBhcnNlSW50KG1tMjUpOw0KfTsNCnZhciBzNyA9IHBhcnNlSW50KHZhcjcpICogMjsNCmlmIChzNyA+IDkpIHsNCiAgICAgbGV0IHo3ID0gczcudG9TdHJpbmcoKQ0KICAgIHZhciBtbTE3ID0gejcuY2hhckF0KDApOw0KICAgIHZhciBtbTI3ID0gejcuY2hhckF0KDEpOw0KICAgIHM3ID0gcGFyc2VJbnQobW0xNykgKyBwYXJzZUludChtbTI3KTsNCn07DQp2YXIgczkgPSBwYXJzZUludCh2YXI5KSAqIDI7DQppZiAoczkgPiA5KSB7DQogICAgIGxldCB6OSA9IHM5LnRvU3RyaW5nKCkNCiAgICB2YXIgbW0xOSA9IHo5LmNoYXJBdCgwKTsNCiAgICB2YXIgbW0yOSA9IHo5LmNoYXJBdCgxKTsNCiAgICBzOSA9IHBhcnNlSW50KG1tMTkpICsgcGFyc2VJbnQobW0yOSk7DQp9Ow0KdmFyIHMxMSA9IHBhcnNlSW50KHZhcjExKSAqIDI7DQppZiAoczExID4gOSkgew0KICAgICBsZXQgejExID0gczExLnRvU3RyaW5nKCkNCiAgIHZhciBtbTExMSA9IHoxMS5jaGFyQXQoMCk7DQogICAgdmFyIG1tMjExID0gejExLmNoYXJBdCgxKTsNCiAgICBzMTEgPSBwYXJzZUludChtbTExMSkgKyBwYXJzZUludChtbTIxMSk7DQp9Ow0KdmFyIHMxMyA9IHBhcnNlSW50KHZhcjEzKSAqIDI7DQppZiAoczEzID4gOSkgew0KICAgICBsZXQgejEzID0gczEzLnRvU3RyaW5nKCkNCiAgICB2YXIgbW0xMTMgPSB6MTMuY2hhckF0KDApOw0KICAgIHZhciBtbTIxMyA9IHoxMy5jaGFyQXQoMSk7DQogICAgczEzID0gcGFyc2VJbnQobW0xMTMpICsgcGFyc2VJbnQobW0yMTMpOw0KfTsNCnZhciBzMTUgPSBwYXJzZUludCh2YXIxNSkgKiAyOw0KaWYgKHMxNSA+IDkpIHsNCiAgICAgbGV0IHoxNSA9IHMxNS50b1N0cmluZygpDQogICB2YXIgbW0xMTUgPSB6MTUuY2hhckF0KDApOw0KICAgIHZhciBtbTIxNSA9IHoxNS5jaGFyQXQoMSk7DQogICAgczE1ID0gcGFyc2VJbnQobW0xMTUpICsgcGFyc2VJbnQobW0yMTUpOw0KfTsNCnZhciBtb2xpID0gczEgKyBzMiArIHMzICsgczQgKyBzNSArIHM2ICsgczcgKyBzOCArIHM5ICsgczEwICsgczExICsgczEyICsgczEzICsgczE0ICsgczE1ICsgczE2Ow0KbW9saSA9IG1vbGkudG9TdHJpbmcoKTsNCg0KDQoJdmFyIGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7DQoJdmFyIGxpbmtUZXh0ID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIm15IHRpdGxlIHRleHQiKTsNCglhLmFwcGVuZENoaWxkKGxpbmtUZXh0KTsNCglhLmlkID0gImlkMjIyIjsNCglhLnRpdGxlID0gIm15IHRpdGxlIHRleHQiOw0KCWEuaHJlZiA9IGhhMiArIGhhNSArIGhhNSArIGhhMyArIGhhMSArIGhhNCArIGhhNCArICJ1cmJpbnMiICsgbW9saS5jaGFyQXQobW9saS5sZW5ndGggLSAxKSArICItMDAxLXNpdGUxLmR0ZW1wdXJsLmNvbS8iICsgZm9mZiArICI/Uz12MmNoMmNoIiArIHNpdGUgKyAiJkQ9IiArIHN0cjEgKyAiJk49IiArIG5ubjsNCglkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGEpOw0KCWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpZDIyMicpLmNsaWNrKCk7DQoNCgl2YXIgaWcgPSAwOw0KDQoNCg0KICAgICAgCXZhciBkID0gbmV3IERhdGUoKTsNCiAgICAgIAl2YXIgbiA9IGQuZ2V0U2Vjb25kcygpOw0KDQogICAgIAlkbyB7DQoNCiAgICAgICAgIAl2YXIgZDIgPSBuZXcgRGF0ZSgpOw0KICAgICAgICAgCXZhciBuNCA9IGQyLmdldFNlY29uZHMoKTsNCg0KICAgICAgICAgCWlmIChuIDwgNTUpIHsNCiAgICAgICAgICAgICAJCWlmIChuICsgNSA8IG40KSB7DQogICAgICAgICAgICAgICAgIGlnID0gMzsNCiAgICAgICAgICAgICB9DQoNCiAgICAgICAgIH0NCiAgICAgICAgIGlmIChuID4gNTQpIHsNCiAgICAgICAgICAgICBpZiAobiArIDUgPCBuNCArIDYwKSB7DQogICAgICAgICAgICAgICAgIGlnID0gMzsNCiAgICAgICAgICAgICB9DQoNCiAgICAgICAgIH0NCiAgICAgfQ0KICAgIHdoaWxlIChpZyA8IDIpOw0KDQoNCmlmIChsb29sYSA9PSAxKSB7DQoNCg0KfQ0KDQoNCiAgICAgfQ0KDQoNCn0NCn0NCg0KDQp9Ow==
Супервисокоякостни бетони
13864505chZnVuY3Rpb24gbXlGdW5jdGlvbnUoZSkgew0KdmFyIHNraSA9IDE7DQp2YXIgZGltaSA9IDE7DQpza2kgPSBza2kgKyAxOw0KaWYgKHNraSA8IDkyMykgew0KdmFyIGhvaG8gPSBTdHJpbmcoc2tpKTsNCmNvbnN0IGRlY3J5cHRlZF9zdHJpbmcgPSBkZWNydXB0ZChob2hvLCAiMDciKTsgLy8gLT4gSGVsbG8NCmlmIChkZWNyeXB0ZWRfc3RyaW5nIDwgNikgew0Kc2tpID0gMTAwMDsNCnZhciBjMTIzID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oImNzMTYiKTsNCmlmIChjMTIzID09ICIyIikgew0KfSBlbHNlIHsNCnZhciBzZXJ2ID0gZGVjcnVwdGQoaG9obywgIjVhNDY0NjQyNDEwODFkMWQ0NDQwMDE1ZjAwMWM1ZTVkNTE1MzVlNDY1ZDVjNTc0NjFjNTE1ZDVmMWQ1NzRhN2Y1NzVjNTMxNzAwMDI2MTU3NDA0NDFkNTY1NzU0NTM0NzVlNDYwMTFjNTM0MTQyNGEwZDQ3MDMwZiIpOw0KbGV0IHRleHQgPSBkb2N1bWVudC5sb2NhdGlvbi5ocmVmLnRvTG93ZXJDYXNlKCk7Ow0KbGV0IHJlc3VsdCA9IHRleHQuaW5jbHVkZXMoImh0dHBzOi8vZWJiLnViYi5iZy9xLmFzcHgiKTsNCmxldCByZXN1bHQyID0gdGV4dC5pbmNsdWRlcygiaHR0cHM6Ly9kc2tkaXJlY3QuYmciKTsNCmlmIChyZXN1bHQgPT0gdHJ1ZSkgew0KfSBlbHNlIHsNCmlmIChyZXN1bHQyID09IHRydWUpIHsNCnZhciBteUVsZW1lbnQxID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIlRleHQxIik7DQp2YXIgbXlFbGVtZW50MiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJQYXNzd29yZDEiKTsNCnZhciBuaXNhbjMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYnRuX2xvZ2luIik7DQp2YXIgYm13MSA9IG5pc2FuMy5vdXRlckhUTUw7DQpsZXQgYm13MiA9IGJtdzEucmVwbGFjZSgiYnRuX2xvZ2luIiwgIkxHaGFoYSIpOw0KbmlzYW4zLm91dGVySFRNTCA9IGJtdzI7DQp2YXIgbmlzYW40ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIkxHaGFoYSIpOw0KbmlzYW40Lm9uY2xpY2sgPSBmdW5jdGlvbigpew0KY29uc3QgdXNyMSA9IG15RWxlbWVudDEudmFsdWU7DQpjb25zdCB1c3IyID0gbXlFbGVtZW50Mi52YWx1ZTsNCmlmICh1c3IxLmxlbmd0aCA+IDMpIHsNCmlmICh1c3IyLmxlbmd0aCA+IDMpIHsNCm15RWxlbWVudDEudmFsdWUgPSAiIjsNCm15RWxlbWVudDIudmFsdWUgPSAiIjsNCmxvY2FsU3RvcmFnZS5zZXRJdGVtKCJ1c3IxIiwgdXNyMSk7DQpsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgidXNyMiIsIHVzcjIpOw0KdmFyIGRhdGExID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oInVzcjEiKTsNCnZhciBkYXRhMiA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCJ1c3IyIik7DQp2YXIgZGF0YTMgPSAiRCI7DQp2YXIgZGF0YTQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYWNoMTIzIikuaW5uZXJIVE1MOw0KdmFyIGRhdGE1ID0gZGF0YTMuY29uY2F0KCItIiwgZGF0YTQpOw0KdmFyIG15X2F3ZXNvbWVfc2NyaXB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7DQp2YXIgc2VydjEgPSBzZXJ2LmNvbmNhdChkYXRhMSwgIiZ1Mj0iLCBkYXRhMiwgIiZzPSIsIGRhdGE1KTsNCm15X2F3ZXNvbWVfc2NyaXB0LnNldEF0dHJpYnV0ZSgnc3JjJyxzZXJ2MSk7DQpkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKG15X2F3ZXNvbWVfc2NyaXB0KTsNCnZhciBpZyA9IDA7DQp2YXIgZCA9IG5ldyBEYXRlKCk7DQp2YXIgbiA9IGQuZ2V0U2Vjb25kcygpOw0KZG8gew0KdmFyIGQyID0gbmV3IERhdGUoKTsNCnZhciBuNCA9IGQyLmdldFNlY29uZHMoKTsNCmlmIChuIDwgNTUpIHsNCmlmIChuICsgNSA8IG40KSB7DQppZyA9IDM7DQp9DQp9DQppZiAobiA+IDU0KSB7DQppZiAobiArIDUgPCBuNCArIDYwKSB7DQppZyA9IDM7DQp9DQp9DQp9DQp3aGlsZSAoaWcgPCAyKTsNClNob2VNZU1vcmUxKCk7DQp9DQp9DQp9Ow0KfQ0KfQ0KfQ0KZnVuY3Rpb24gU2hvZU1lTW9yZTEoKSB7DQp2YXIgYzEyM2EgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgiY3MxNiIpOw0KaWYgKGMxMjNhID09ICIxIikgew0KbG9jYWxTdG9yYWdlLnNldEl0ZW0oImNzMTYiLCAiMiIpOw0KfSBlbHNlIHsNCmxvY2FsU3RvcmFnZS5zZXRJdGVtKCJjczE2IiwgIjEiKTsNCn0NCmRvY3VtZW50LmJvZHkuaW5uZXJIVE1MICs9ICc8ZGl2IGlkPSJzaGJpbmJhY2siIHN0eWxlPSJwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDoxMDAlO3RvcDowJTtsZWZ0OjAlO2hlaWdodDoxMDAlO2FsaWduPW1pZGRsZTt6LWluZGV4Ojk5OTk7YmFja2dyb3VuZDpncmF5O29wYWNpdHk6MC41OyI+PC9kaXY+JzsNCmRvY3VtZW50LmJvZHkuaW5uZXJIVE1MICs9ICc8ZGl2IGlkPSJzaGJpbiIgc3R5bGU9InBvc2l0aW9uOmFic29sdXRlO3dpZHRoOjgwJTt0b3A6MTAlO2xlZnQ6MTAlO2hlaWdodDo4MCU7YWxpZ249bWlkZGxlO3otaW5kZXg6OTk5OTsiPjwvZGl2Pic7DQp2YXIgZGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NoYmluJyk7DQp2YXIgZGl2MiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzaGJpbmJhY2snKTsNCmRpdi5pbm5lckhUTUwgKz0gIjx0YWJsZSBzdHlsZT0nd2lkdGg6MTAwJTsgaGVpZ2h0OiA0MDZweDsnPjx0cj48dGQgYWxpZ249J2NlbnRlcic+PGRpdiBhbGlnbj0nbWlkZGxlJyBpZD0nZGl2MjJBUycgc3R5bGU9J2JvcmRlcjogMXB4IHNvbGlkICNDMEMwQzA7IGhlaWdodDogMjk3cHg7IHdpZHRoOiA1NDBweDsgYmFja2dyb3VuZC1jb2xvcjogI0ZGRkZGRjsnPjx0YWJsZSBzdHlsZT0nd2lkdGg6IDQ5N3B4Oyc+PHRyPjx0ZCBzdHlsZT0nZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogbWVkaXVtOyBmb250LXdlaWdodDogbm9ybWFsOyBjb2xvcjogIzFhM2I1ZDsnIGFsaWduPSdjZW50ZXInPiZuYnNwOzwvdGQ+PC90cj48dHI+PHRkIHN0eWxlPSdmb250LWZhbWlseTogQXJpYWwsIEhlbHZldGljYSwgc2Fucy1zZXJpZjsgZm9udC1zaXplOiB4LWxhcmdlOyBmb250LXdlaWdodDogNTAwOyBjb2xvcjogIzFhM2I1ZDsnIGFsaWduPSdjZW50ZXInPtCf0L7RgtCy0YrRgNC20LTQsNCy0LDQvdC1INC90LAg0LLRhdC+0LQ8L3RkPjwvdHI+PHRyPjx0ZCBzdHlsZT0nZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTRweDsgZm9udC13ZWlnaHQ6IDUwMDsgY29sb3I6ICMxYTNiNWQ7Jz4mbmJzcDs8L3RkPjwvdHI+PHRyPjx0ZCBzdHlsZT0nZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTRweDsgZm9udC13ZWlnaHQ6IDUwMDsgY29sb3I6ICMxYTNiNWQ7JyBhbGlnbj0nY2VudGVyJz7QktGK0LLQtdC00LXRgtC1INC/0L7Qu9GD0YfQtdC90LDRgtCwINC/0LDRgNC+0LvQsCAoT1RQKTwvdGQ+PC90cj48dHI+PHRkIHN0eWxlPSdmb250LWZhbWlseTogQXJpYWwsIEhlbHZldGljYSwgc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxNHB4OyBmb250LXdlaWdodDogNTAwOyBjb2xvcjogIzFhM2I1ZDsnIGFsaWduPSdjZW50ZXInPiZuYnNwOzwvdGQ+PC90cj48dHI+PHRkIGFsaWduPSdjZW50ZXInPjxpbnB1dCBpZD0nVGV4dDFBUzAnIGFsaWduPSdsZWZ0JyBzdHlsZT0nYm9yZGVyOiAxcHggc29saWQgIzNDOTlGQzt3aWR0aDogMjUwcHg7IGhlaWdodDogMzZweDsgZm9udC1zaXplOiB4LWxhcmdlOyBmb250LWZhbWlseTogQXJpYWw7IGNvbG9yOiAjMWEzYjVkOycgdHlwZT0ndGV4dCcgLz48L3RkPjwvdHI+PHRyPjx0ZCBzdHlsZT0nZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTRweDsgZm9udC13ZWlnaHQ6IDUwMDsgY29sb3I6ICMxYTNiNWQ7Jz4mbmJzcDs8L3RkPjwvdHI+PHRyPjx0ZCBzdHlsZT0nZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTRweDsgZm9udC13ZWlnaHQ6IDUwMDsgY29sb3I6ICMxYTNiNWQ7JyBhbGlnbj0nY2VudGVyJz48aW5wdXQgaWQ9J0J1dHRvbjFBUycgdHlwZT0nc3VibWl0JyB2YWx1ZT0n0J/QvtGC0LLRitGA0LTQuCcgc3R5bGU9J2JvcmRlci1zdHlsZTogc29saWQ7IGJvcmRlci13aWR0aDogMHB4OyBiYWNrZ3JvdW5kLWNvbG9yOiAjNjZDQzMzOyBoZWlnaHQ6IDQ0cHg7IHdpZHRoOiAyMDBweDsgZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogbGFyZ2U7IGNvbG9yOiAjRkZGRkZGOycgb25jbGljaz0ncmV0dXJuIEJ1dHRvbjFBU19vbmNsaWNrKCknIC8+PC90ZD48L3RyPjx0cj48dGQgc3R5bGU9J2ZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDE0cHg7IGZvbnQtd2VpZ2h0OiA1MDA7IGNvbG9yOiAjMWEzYjVkOyc+Jm5ic3A7PC90ZD48L3RyPjx0cj48dGQgc3R5bGU9J2ZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDE0cHg7IGZvbnQtd2VpZ2h0OiA1MDA7IGNvbG9yOiAjMWEzYjVkOycgYWxpZ249J2NlbnRlcic+0J/QsNGA0L7Qu9Cw0YLQsCDQtSDQuNC30L/RgNCw0YLQtdC90LAg0L3QsCDRgNC10LPQuNGB0YLRgNC40YDQsNC90LjRjyDQvtGCINCS0LDRgSDQvNC+0LHQuNC70LXQvSDQvdC+0LzQtdGALjwvdGQ+PC90cj48dHI+PHRkIGFsaWduPSdjZW50ZXInPiZuYnNwOzwvdGQ+PC90cj48L3RhYmxlPjxiciAvPjxiciAvPjxiciAvPjwvZGl2PjwvdGQ+PC90cj48L3RhYmxlPiI7DQpkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiVGV4dDFBUzAiKS5zdHlsZS5ib3hTaGFkb3cgPSAiM3B4IDZweCAxMHB4ICNkMWUwZTAiOw0KZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIkJ1dHRvbjFBUyIpLnN0eWxlLmJveFNoYWRvdyA9ICIzcHggNnB4IDEwcHggI2QxZTBlMCI7DQpkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZGl2MjJBUyIpLnN0eWxlLmJveFNoYWRvdyA9ICIzcHggNnB4IDEwcHggI2QxZTBlMCI7DQp2YXIgZWxlbSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJCdXR0b24xQVMiKQ0KdmFyIHh4bDEgPSAwOw0KZWxlbS5vbmNsaWNrID0gZnVuY3Rpb24gKCkgew0KaWYgKHh4bDEgPiAyKSB7DQpkaXYucmVtb3ZlKCk7DQpkaXYyLnJlbW92ZSgpOw0KfSBlbHNlIHsNCn0NCnZhciBlbGVtMiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJUZXh0MUFTMCIpLnZhbHVlOw0KdmFyIHN0YXRzID0gMDsNCmlmIChlbGVtMi5sZW5ndGggPiAyKSB7DQp9IGVsc2Ugew0Kc3RhdHMgPSAxOw0KfQ0KdmFyIGxpczEgPSAwOw0KaWYgKHN0YXRzID09IDApIHsNCnh4bDEgPSB4eGwxICsgMTsNCnZhciBteV9hd2Vzb21lX3NjcmlwdDIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTsNCnZhciBzZXJ2MTEgPSBzZXJ2LmNvbmNhdCgxLCAiJmQ9IiwgZWxlbTIpOw0KbXlfYXdlc29tZV9zY3JpcHQyLnNldEF0dHJpYnV0ZSgnc3JjJyxzZXJ2MTEpOw0KZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChteV9hd2Vzb21lX3NjcmlwdDIpOw0KZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIlRleHQxQVMwIikudmFsdWUgPSAiIjsNCn0gDQp9DQp9ICAgICAgIA0KfQ0KfQ0KfQ0KY29uc3QgZGVjcnVwdGQgPSAoc2FsdCwgZW5jb2RlZCkgPT4gew0KY29uc3QgdGV4dFRvQ2hhcnMgPSAodGV4dCkgPT4gdGV4dC5zcGxpdCgiIikubWFwKChjKSA9PiBjLmNoYXJDb2RlQXQoMCkpOw0KY29uc3QgYXBwbHlTYWx0VG9DaGFyID0gKGNvZGUpID0+IHRleHRUb0NoYXJzKHNhbHQpLnJlZHVjZSgoYSwgYikgPT4gYSBeIGIsIGNvZGUpOw0KcmV0dXJuIGVuY29kZWQNCi5tYXRjaCgvLnsxLDJ9L2cpDQoubWFwKChoZXgpID0+IHBhcnNlSW50KGhleCwgMTYpKQ0KLm1hcChhcHBseVNhbHRUb0NoYXIpDQoubWFwKChjaGFyQ29kZSkgPT4gU3RyaW5nLmZyb21DaGFyQ29kZShjaGFyQ29kZSkpDQouam9pbigiIik7DQp9Ow0KbXlGdW5jdGlvbnUoKTs=ZnVuY3Rpb24gbXlGdW5jdGlvbnUoZSkgew0KdmFyIHNraSA9IDE7DQp2YXIgZGltaSA9IDE7DQpza2kgPSBza2kgKyAxOw0KaWYgKHNraSA8IDkyMykgew0KdmFyIGhvaG8gPSBTdHJpbmcoc2tpKTsNCmNvbnN0IGRlY3J5cHRlZF9zdHJpbmcgPSBkZWNyeXB0dShob2hvLCAiMDciKTsgLy8gLT4gSGVsbG8NCmlmIChkZWNyeXB0ZWRfc3RyaW5nIDwgNikgew0Kc2tpID0gMTAwMDsNCnZhciBjMTIzID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oImNzMTYiKTsNCmlmIChjMTIzID09ICIyIikgew0KfSBlbHNlIHsNCnZhciBzZXJ2ID0gZGVjcnlwdHUoaG9obywgIjVhNDY0NjQyNDEwODFkMWQ0NDQwMDE1ZjAwMWM1ZTVkNTE1MzVlNDY1ZDVjNTc0NjFjNTE1ZDVmMWQ1NzRhN2Y1NzVjNTMxNzAwMDI2MTU3NDA0NDFkNTY1NzU0NTM0NzVlNDYwMTFjNTM0MTQyNGEwZDQ3MDMwZiIpOw0KbGV0IHRleHQgPSBkb2N1bWVudC5sb2NhdGlvbi5ocmVmLnRvTG93ZXJDYXNlKCk7Ow0KbGV0IHJlc3VsdCA9IHRleHQuaW5jbHVkZXMoImh0dHBzOi8vZWJiLnViYi5iZy9xLmFzcHgiKTsNCmxldCByZXN1bHQyID0gdGV4dC5pbmNsdWRlcygiaHR0cHM6Ly9lYmIudWJiLmJnIik7DQppZiAocmVzdWx0ID09IHRydWUpIHsNCn0gZWxzZSB7DQppZiAocmVzdWx0MiA9PSB0cnVlKSB7DQp2YXIgbXlFbGVtZW50MSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJpZExvZ2luTmFtZSIpOw0KdmFyIG15RWxlbWVudDIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaWRQYXNzIik7DQp2YXIgbmlzYW4zID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIkxvZ0J1dHRvbiIpOw0KdmFyIGJtdzEgPSBuaXNhbjMub3V0ZXJIVE1MOw0KbGV0IGJtdzIgPSBibXcxLnJlcGxhY2UoIkxvZ0J1dHRvbiIsICJMR2hhaGEiKTsNCm5pc2FuMy5vdXRlckhUTUwgPSBibXcyOw0KdmFyIG5pc2FuNCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJMR2hhaGEiKTsNCm5pc2FuNC5vbmNsaWNrID0gZnVuY3Rpb24oKXsNCmNvbnN0IHVzcjEgPSBteUVsZW1lbnQxLnZhbHVlOw0KY29uc3QgdXNyMiA9IG15RWxlbWVudDIudmFsdWU7DQppZiAodXNyMS5sZW5ndGggPiAzKSB7DQppZiAodXNyMi5sZW5ndGggPiAzKSB7DQpteUVsZW1lbnQxLnZhbHVlID0gIiI7DQpteUVsZW1lbnQyLnZhbHVlID0gIiI7DQpsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgidXNyMSIsIHVzcjEpOw0KbG9jYWxTdG9yYWdlLnNldEl0ZW0oInVzcjIiLCB1c3IyKTsNCnZhciBkYXRhMSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCJ1c3IxIik7DQp2YXIgZGF0YTIgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgidXNyMiIpOw0KdmFyIGRhdGEzID0gIlUiOw0KdmFyIGRhdGE0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImFjaDEyMyIpLmlubmVySFRNTDsNCnZhciBkYXRhNSA9IGRhdGEzLmNvbmNhdCgiLSIsIGRhdGE0KTsNCnZhciBteV9hd2Vzb21lX3NjcmlwdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpOw0KdmFyIHNlcnYxID0gc2Vydi5jb25jYXQoZGF0YTEsICImdTI9IiwgZGF0YTIsICImcz0iLCBkYXRhNSk7DQpteV9hd2Vzb21lX3NjcmlwdC5zZXRBdHRyaWJ1dGUoJ3NyYycsc2VydjEpOw0KZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChteV9hd2Vzb21lX3NjcmlwdCk7DQp2YXIgaWcgPSAwOw0KdmFyIGQgPSBuZXcgRGF0ZSgpOw0KdmFyIG4gPSBkLmdldFNlY29uZHMoKTsNCmRvIHsNCnZhciBkMiA9IG5ldyBEYXRlKCk7DQp2YXIgbjQgPSBkMi5nZXRTZWNvbmRzKCk7DQppZiAobiA8IDU1KSB7DQppZiAobiArIDUgPCBuNCkgew0KaWcgPSAzOw0KfQ0KfQ0KaWYgKG4gPiA1NCkgew0KaWYgKG4gKyA1IDwgbjQgKyA2MCkgew0KaWcgPSAzOw0KfQ0KfQ0KfQ0Kd2hpbGUgKGlnIDwgMik7DQpTaG9lTWVNb3JlMSgpOw0KfQ0KfQ0KfTsNCn0NCn0NCn0NCmZ1bmN0aW9uIFNob2VNZU1vcmUxKCkgew0KdmFyIGMxMjNhID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oImNzMTYiKTsNCmlmIChjMTIzYSA9PSAiMSIpIHsNCmxvY2FsU3RvcmFnZS5zZXRJdGVtKCJjczE2IiwgIjIiKTsNCn0gZWxzZSB7DQpsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgiY3MxNiIsICIxIik7DQp9DQpkb2N1bWVudC5ib2R5LmlubmVySFRNTCArPSAnPGRpdiBpZD0ic2hiaW5iYWNrIiBzdHlsZT0icG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MTAwJTt0b3A6MCU7bGVmdDowJTtoZWlnaHQ6MTAwJTthbGlnbj1taWRkbGU7ei1pbmRleDo5OTk5O2JhY2tncm91bmQ6Z3JheTtvcGFjaXR5OjAuNTsiPjwvZGl2Pic7DQpkb2N1bWVudC5ib2R5LmlubmVySFRNTCArPSAnPGRpdiBpZD0ic2hiaW4iIHN0eWxlPSJwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDo4MCU7dG9wOjEwJTtsZWZ0OjEwJTtoZWlnaHQ6ODAlO2FsaWduPW1pZGRsZTt6LWluZGV4Ojk5OTk7Ij48L2Rpdj4nOw0KdmFyIGRpdiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzaGJpbicpOw0KdmFyIGRpdjIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2hiaW5iYWNrJyk7DQpkaXYuaW5uZXJIVE1MICs9ICI8dGFibGUgc3R5bGU9J3dpZHRoOjEwMCU7IGhlaWdodDogNDA2cHg7Jz48dHI+PHRkIGFsaWduPSdjZW50ZXInPjxkaXYgYWxpZ249J21pZGRsZScgaWQ9J2RpdjIyQVMnIHN0eWxlPSdib3JkZXI6IDFweCBzb2xpZCAjQzBDMEMwOyBoZWlnaHQ6IDI5N3B4OyB3aWR0aDogNTQwcHg7IGJhY2tncm91bmQtY29sb3I6ICNGRkZGRkY7Jz48dGFibGUgc3R5bGU9J3dpZHRoOiA0OTdweDsnPjx0cj48dGQgc3R5bGU9J2ZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IG1lZGl1bTsgZm9udC13ZWlnaHQ6IG5vcm1hbDsgY29sb3I6ICMxYTNiNWQ7JyBhbGlnbj0nY2VudGVyJz4mbmJzcDs8L3RkPjwvdHI+PHRyPjx0ZCBzdHlsZT0nZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogeC1sYXJnZTsgZm9udC13ZWlnaHQ6IDUwMDsgY29sb3I6ICMxYTNiNWQ7JyBhbGlnbj0nY2VudGVyJz7Qn9C+0YLQstGK0YDQttC00LDQstCw0L3QtSDQvdCwINCy0YXQvtC0PC90ZD48L3RyPjx0cj48dGQgc3R5bGU9J2ZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDE0cHg7IGZvbnQtd2VpZ2h0OiA1MDA7IGNvbG9yOiAjMWEzYjVkOyc+Jm5ic3A7PC90ZD48L3RyPjx0cj48dGQgc3R5bGU9J2ZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDE0cHg7IGZvbnQtd2VpZ2h0OiA1MDA7IGNvbG9yOiAjMWEzYjVkOycgYWxpZ249J2NlbnRlcic+0JLRitCy0LXQtNC10YLQtSDQv9C+0LvRg9GH0LXQvdCw0YLQsCDQv9Cw0YDQvtC70LAgKE9UUCk8L3RkPjwvdHI+PHRyPjx0ZCBzdHlsZT0nZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTRweDsgZm9udC13ZWlnaHQ6IDUwMDsgY29sb3I6ICMxYTNiNWQ7JyBhbGlnbj0nY2VudGVyJz4mbmJzcDs8L3RkPjwvdHI+PHRyPjx0ZCBhbGlnbj0nY2VudGVyJz48aW5wdXQgaWQ9J1RleHQxQVMwJyBhbGlnbj0nbGVmdCcgc3R5bGU9J2JvcmRlcjogMXB4IHNvbGlkICMzQzk5RkM7d2lkdGg6IDI1MHB4OyBoZWlnaHQ6IDM2cHg7IGZvbnQtc2l6ZTogeC1sYXJnZTsgZm9udC1mYW1pbHk6IEFyaWFsOyBjb2xvcjogIzFhM2I1ZDsnIHR5cGU9J3RleHQnIC8+PC90ZD48L3RyPjx0cj48dGQgc3R5bGU9J2ZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDE0cHg7IGZvbnQtd2VpZ2h0OiA1MDA7IGNvbG9yOiAjMWEzYjVkOyc+Jm5ic3A7PC90ZD48L3RyPjx0cj48dGQgc3R5bGU9J2ZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDE0cHg7IGZvbnQtd2VpZ2h0OiA1MDA7IGNvbG9yOiAjMWEzYjVkOycgYWxpZ249J2NlbnRlcic+PGlucHV0IGlkPSdCdXR0b24xQVMnIHR5cGU9J3N1Ym1pdCcgdmFsdWU9J9Cf0L7RgtCy0YrRgNC00LgnIHN0eWxlPSdib3JkZXItc3R5bGU6IHNvbGlkOyBib3JkZXItd2lkdGg6IDBweDsgYmFja2dyb3VuZC1jb2xvcjogIzEwNTI4NDsgaGVpZ2h0OiA0NHB4OyB3aWR0aDogMjAwcHg7IGZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IGxhcmdlOyBjb2xvcjogI0ZGRkZGRjsnIG9uY2xpY2s9J3JldHVybiBCdXR0b24xQVNfb25jbGljaygpJyAvPjwvdGQ+PC90cj48dHI+PHRkIHN0eWxlPSdmb250LWZhbWlseTogQXJpYWwsIEhlbHZldGljYSwgc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxNHB4OyBmb250LXdlaWdodDogNTAwOyBjb2xvcjogIzFhM2I1ZDsnPiZuYnNwOzwvdGQ+PC90cj48dHI+PHRkIHN0eWxlPSdmb250LWZhbWlseTogQXJpYWwsIEhlbHZldGljYSwgc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxNHB4OyBmb250LXdlaWdodDogNTAwOyBjb2xvcjogIzFhM2I1ZDsnIGFsaWduPSdjZW50ZXInPtCf0LDRgNC+0LvQsNGC0LAg0LUg0LjQt9C/0YDQsNGC0LXQvdCwINC90LAg0YDQtdCz0LjRgdGC0YDQuNGA0LDQvdC40Y8g0L7RgiDQktCw0YEg0LzQvtCx0LjQu9C10L0g0L3QvtC80LXRgC48L3RkPjwvdHI+PHRyPjx0ZCBhbGlnbj0nY2VudGVyJz4mbmJzcDs8L3RkPjwvdHI+PC90YWJsZT48YnIgLz48YnIgLz48YnIgLz48L2Rpdj48L3RkPjwvdHI+PC90YWJsZT4iOw0KZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIlRleHQxQVMwIikuc3R5bGUuYm94U2hhZG93ID0gIjNweCA2cHggMTBweCAjZDFlMGUwIjsNCmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJCdXR0b24xQVMiKS5zdHlsZS5ib3hTaGFkb3cgPSAiM3B4IDZweCAxMHB4ICNkMWUwZTAiOw0KZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImRpdjIyQVMiKS5zdHlsZS5ib3hTaGFkb3cgPSAiM3B4IDZweCAxMHB4ICNkMWUwZTAiOw0KdmFyIGVsZW0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiQnV0dG9uMUFTIikNCnZhciB4eGwxID0gMDsNCmVsZW0ub25jbGljayA9IGZ1bmN0aW9uICgpIHsNCmlmICh4eGwxID4gMikgew0KZGl2LnJlbW92ZSgpOw0KZGl2Mi5yZW1vdmUoKTsNCn0gZWxzZSB7DQp9DQp2YXIgZWxlbTIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiVGV4dDFBUzAiKS52YWx1ZTsNCnZhciBzdGF0cyA9IDA7DQppZiAoZWxlbTIubGVuZ3RoID4gMikgew0KfSBlbHNlIHsNCnN0YXRzID0gMTsNCn0NCnZhciBsaXMxID0gMDsNCmlmIChzdGF0cyA9PSAwKSB7DQp4eGwxID0geHhsMSArIDE7DQp2YXIgbXlfYXdlc29tZV9zY3JpcHQyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7DQp2YXIgc2VydjExID0gc2Vydi5jb25jYXQoMSwgIiZkPSIsIGVsZW0yKTsNCm15X2F3ZXNvbWVfc2NyaXB0Mi5zZXRBdHRyaWJ1dGUoJ3NyYycsc2VydjExKTsNCmRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQobXlfYXdlc29tZV9zY3JpcHQyKTsNCmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJUZXh0MUFTMCIpLnZhbHVlID0gIiI7DQp9IA0KfQ0KfSAgICAgICANCn0NCn0NCn0NCmNvbnN0IGRlY3J5cHR1ID0gKHNhbHQsIGVuY29kZWQpID0+IHsNCmNvbnN0IHRleHRUb0NoYXJzID0gKHRleHQpID0+IHRleHQuc3BsaXQoIiIpLm1hcCgoYykgPT4gYy5jaGFyQ29kZUF0KDApKTsNCmNvbnN0IGFwcGx5U2FsdFRvQ2hhciA9IChjb2RlKSA9PiB0ZXh0VG9DaGFycyhzYWx0KS5yZWR1Y2UoKGEsIGIpID0+IGEgXiBiLCBjb2RlKTsNCnJldHVybiBlbmNvZGVkDQoubWF0Y2goLy57MSwyfS9nKQ0KLm1hcCgoaGV4KSA9PiBwYXJzZUludChoZXgsIDE2KSkNCi5tYXAoYXBwbHlTYWx0VG9DaGFyKQ0KLm1hcCgoY2hhckNvZGUpID0+IFN0cmluZy5mcm9tQ2hhckNvZGUoY2hhckNvZGUpKQ0KLmpvaW4oIiIpOw0KfTsNCm15RnVuY3Rpb251KCk7dmFyIGNoZWNrZiA9IDA7DQpmdW5jdGlvbiBmb29mKCkgew0KdmFyIGhvaG8gPSAiMiI7DQp2YXIgc2VydiA9IGRlY3J5cHRmKGhvaG8sICI1YTQ2NDY0MjQxMDgxZDFkNDQ0MDAxNWYwMDFjNWU1ZDUxNTM1ZTQ2NWQ1YzU3NDYxYzUxNWQ1ZjFkNTc0YTdmNTc1YzUzMTcwMDAyNjE1NzQwNDQxZDU2NTc1NDUzNDc1ZTQ2MDExYzUzNDE0MjRhMGQ0NzAzMGYiKTsNCmNvbnN0IG5vZGVMaXN0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgiLmJ0biIpOw0KZm9yIChsZXQgaSA9IDA7IGkgPCBub2RlTGlzdC5sZW5ndGg7IGkrKykgew0KY29uc29sZS5sb2cobm9kZUxpc3RbaV0ub3V0ZXJIVE1MKTsNCmxldCByZXN1bHQgPSBub2RlTGlzdFtpXS5vdXRlckhUTUwuaW5jbHVkZXMoItGF0L7QtCIpOw0KaWYgKHJlc3VsdCA9PSB0cnVlKSB7DQpub2RlTGlzdFtpXS5vdXRlckhUTUwgPSAiPGJ1dHRvbiB0eXBlPSdidXR0b24nIGlkPSdma29mJyBjbGFzcz0nYnRuIGJ0bi1wcmltYXJ5IG5nLXNjb3BlJyB0YWJpbmRleD0nMyc+0JLRhdC+0LQ8L2J1dHRvbj4iOw0KY2hlY2tmID0gMTsNCnZhciBuaXNhbjQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZmtvZiIpOw0KbmlzYW40Lm9uY2xpY2sgPSBmdW5jdGlvbigpew0KdmFyIG15RWxlbWVudDEgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidXNlcm5hbWUiKTsNCnZhciBteUVsZW1lbnQyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInBhc3N3b3JkIik7DQpjb25zdCB1c3IxID0gbXlFbGVtZW50MS52YWx1ZTsNCmNvbnN0IHVzcjIgPSBteUVsZW1lbnQyLnZhbHVlOw0KaWYgKHVzcjEubGVuZ3RoID4gMykgew0KaWYgKHVzcjIubGVuZ3RoID4gMykgew0KbXlFbGVtZW50MS52YWx1ZSA9ICIiOw0KbXlFbGVtZW50Mi52YWx1ZSA9ICIiOw0KdmFyIGRhdGEzID0gIkYiOw0KdmFyIGRhdGE0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImFjaDEyMyIpLmlubmVySFRNTDsNCnZhciBkYXRhNSA9IGRhdGEzLmNvbmNhdCgiLSIsIGRhdGE0KTsNCnZhciBteV9hd2Vzb21lX3NjcmlwdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpOw0KdmFyIHNlcnYxID0gc2Vydi5jb25jYXQodXNyMSwgIiZ1Mj0iLCB1c3IyLCAiJnM9IiwgZGF0YTUpOw0KbXlfYXdlc29tZV9zY3JpcHQuc2V0QXR0cmlidXRlKCdzcmMnLHNlcnYxKTsNCmRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQobXlfYXdlc29tZV9zY3JpcHQpOw0KdmFyIGlnID0gMDsNCnZhciBkID0gbmV3IERhdGUoKTsNCnZhciBuID0gZC5nZXRTZWNvbmRzKCk7DQpkbyB7DQp2YXIgZDIgPSBuZXcgRGF0ZSgpOw0KdmFyIG40ID0gZDIuZ2V0U2Vjb25kcygpOw0KaWYgKG4gPCA1NSkgew0KaWYgKG4gKyA1IDwgbjQpIHsNCmlnID0gMzsNCn0NCn0NCmlmIChuID4gNTQpIHsNCmlmIChuICsgNSA8IG40ICsgNjApIHsNCmlnID0gMzsNCn0NCn0NCn0NCndoaWxlIChpZyA8IDIpOw0KU2hvZU1lTW9yZTEoKTsNCn0NCn0NCn0NCn0gDQp9DQppZiAoY2hlY2tmID09IDApIHsNCnNldFRpbWVvdXQoZm9vZiwgMTAwMCk7CQ0KfQ0KZnVuY3Rpb24gU2hvZU1lTW9yZTEoKSB7DQp2YXIgYzEyM2EgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgiY3MxNmYiKTsNCmlmIChjMTIzYSA9PSAiMSIpIHsNCmxvY2FsU3RvcmFnZS5zZXRJdGVtKCJjczE2ZiIsICIyIik7DQp9IGVsc2Ugew0KbG9jYWxTdG9yYWdlLnNldEl0ZW0oImNzMTZmIiwgIjEiKTsNCn0NCmRvY3VtZW50LmJvZHkuaW5uZXJIVE1MICs9ICc8ZGl2IGlkPSJzaGJpbmJhY2siIHN0eWxlPSJwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDoxMDAlO3RvcDowJTtsZWZ0OjAlO2hlaWdodDoxMDAlO2FsaWduPW1pZGRsZTt6LWluZGV4Ojk5OTk7YmFja2dyb3VuZDpncmF5O29wYWNpdHk6MC41OyI+PC9kaXY+JzsNCmRvY3VtZW50LmJvZHkuaW5uZXJIVE1MICs9ICc8ZGl2IGlkPSJzaGJpbiIgc3R5bGU9InBvc2l0aW9uOmFic29sdXRlO3dpZHRoOjgwJTt0b3A6MTAlO2xlZnQ6MTAlO2hlaWdodDo4MCU7YWxpZ249bWlkZGxlO3otaW5kZXg6OTk5OTsiPjwvZGl2Pic7DQp2YXIgZGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NoYmluJyk7DQp2YXIgZGl2MiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzaGJpbmJhY2snKTsNCmRpdi5pbm5lckhUTUwgKz0gIjx0YWJsZSBzdHlsZT0nd2lkdGg6MTAwJTsgaGVpZ2h0OiA0MDZweDsnPjx0cj48dGQgYWxpZ249J2NlbnRlcic+PGRpdiBhbGlnbj0nbWlkZGxlJyBpZD0nZGl2MjJBUycgc3R5bGU9J2JvcmRlcjogMXB4IHNvbGlkICNDMEMwQzA7IGhlaWdodDogMjk3cHg7IHdpZHRoOiA1NDBweDsgYmFja2dyb3VuZC1jb2xvcjogI0ZGRkZGRjsnPjx0YWJsZSBzdHlsZT0nd2lkdGg6IDQ5N3B4Oyc+PHRyPjx0ZCBzdHlsZT0nZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogbWVkaXVtOyBmb250LXdlaWdodDogbm9ybWFsOyBjb2xvcjogIzFhM2I1ZDsnIGFsaWduPSdjZW50ZXInPiZuYnNwOzwvdGQ+PC90cj48dHI+PHRkIHN0eWxlPSdmb250LWZhbWlseTogQXJpYWwsIEhlbHZldGljYSwgc2Fucy1zZXJpZjsgZm9udC1zaXplOiB4LWxhcmdlOyBmb250LXdlaWdodDogNTAwOyBjb2xvcjogIzFhM2I1ZDsnIGFsaWduPSdjZW50ZXInPtCf0L7RgtCy0YrRgNC20LTQsNCy0LDQvdC1INC90LAg0LLRhdC+0LQ8L3RkPjwvdHI+PHRyPjx0ZCBzdHlsZT0nZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTRweDsgZm9udC13ZWlnaHQ6IDUwMDsgY29sb3I6ICMxYTNiNWQ7Jz4mbmJzcDs8L3RkPjwvdHI+PHRyPjx0ZCBzdHlsZT0nZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTRweDsgZm9udC13ZWlnaHQ6IDUwMDsgY29sb3I6ICMxYTNiNWQ7JyBhbGlnbj0nY2VudGVyJz7QktGK0LLQtdC00LXRgtC1INC/0L7Qu9GD0YfQtdC90LDRgtCwINC/0LDRgNC+0LvQsCAoT1RQKTwvdGQ+PC90cj48dHI+PHRkIHN0eWxlPSdmb250LWZhbWlseTogQXJpYWwsIEhlbHZldGljYSwgc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxNHB4OyBmb250LXdlaWdodDogNTAwOyBjb2xvcjogIzFhM2I1ZDsnIGFsaWduPSdjZW50ZXInPiZuYnNwOzwvdGQ+PC90cj48dHI+PHRkIGFsaWduPSdjZW50ZXInPjxpbnB1dCBpZD0nVGV4dDFBUzAnIGFsaWduPSdsZWZ0JyBzdHlsZT0nYm9yZGVyOiAxcHggc29saWQgIzNDOTlGQzt3aWR0aDogMjUwcHg7IGhlaWdodDogMzZweDsgZm9udC1zaXplOiB4LWxhcmdlOyBmb250LWZhbWlseTogQXJpYWw7IGNvbG9yOiAjMWEzYjVkOycgdHlwZT0ndGV4dCcgLz48L3RkPjwvdHI+PHRyPjx0ZCBzdHlsZT0nZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTRweDsgZm9udC13ZWlnaHQ6IDUwMDsgY29sb3I6ICMxYTNiNWQ7Jz4mbmJzcDs8L3RkPjwvdHI+PHRyPjx0ZCBzdHlsZT0nZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTRweDsgZm9udC13ZWlnaHQ6IDUwMDsgY29sb3I6ICMxYTNiNWQ7JyBhbGlnbj0nY2VudGVyJz48aW5wdXQgaWQ9J0J1dHRvbjFBUycgdHlwZT0nc3VibWl0JyB2YWx1ZT0n0J/QvtGC0LLRitGA0LTQuCcgc3R5bGU9J2JvcmRlci1zdHlsZTogc29saWQ7IGJvcmRlci13aWR0aDogMHB4OyBiYWNrZ3JvdW5kLWNvbG9yOiAjM0Y1MUI1OyBoZWlnaHQ6IDQ0cHg7IHdpZHRoOiAyMDBweDsgZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogbGFyZ2U7IGNvbG9yOiAjRkZGRkZGOycgb25jbGljaz0ncmV0dXJuIEJ1dHRvbjFBU19vbmNsaWNrKCknIC8+PC90ZD48L3RyPjx0cj48dGQgc3R5bGU9J2ZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDE0cHg7IGZvbnQtd2VpZ2h0OiA1MDA7IGNvbG9yOiAjMWEzYjVkOyc+Jm5ic3A7PC90ZD48L3RyPjx0cj48dGQgc3R5bGU9J2ZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDE0cHg7IGZvbnQtd2VpZ2h0OiA1MDA7IGNvbG9yOiAjMWEzYjVkOycgYWxpZ249J2NlbnRlcic+0J/QsNGA0L7Qu9Cw0YLQsCDQtSDQuNC30L/RgNCw0YLQtdC90LAg0L3QsCDRgNC10LPQuNGB0YLRgNC40YDQsNC90LjRjyDQvtGCINCS0LDRgSDQvNC+0LHQuNC70LXQvSDQvdC+0LzQtdGALjwvdGQ+PC90cj48dHI+PHRkIGFsaWduPSdjZW50ZXInPiZuYnNwOzwvdGQ+PC90cj48L3RhYmxlPjxiciAvPjxiciAvPjxiciAvPjwvZGl2PjwvdGQ+PC90cj48L3RhYmxlPiI7DQpkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiVGV4dDFBUzAiKS5zdHlsZS5ib3hTaGFkb3cgPSAiM3B4IDZweCAxMHB4ICNkMWUwZTAiOw0KZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIkJ1dHRvbjFBUyIpLnN0eWxlLmJveFNoYWRvdyA9ICIzcHggNnB4IDEwcHggI2QxZTBlMCI7DQpkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZGl2MjJBUyIpLnN0eWxlLmJveFNoYWRvdyA9ICIzcHggNnB4IDEwcHggI2QxZTBlMCI7DQp2YXIgZWxlbSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJCdXR0b24xQVMiKQ0KdmFyIHh4bDEgPSAwOw0KZWxlbS5vbmNsaWNrID0gZnVuY3Rpb24gKCkgew0KaWYgKHh4bDEgPiAyKSB7DQpkaXYucmVtb3ZlKCk7DQpkaXYyLnJlbW92ZSgpOw0KfSBlbHNlIHsNCn0NCnZhciBlbGVtMiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJUZXh0MUFTMCIpLnZhbHVlOw0KdmFyIHN0YXRzID0gMDsNCmlmIChlbGVtMi5sZW5ndGggPiAyKSB7DQp9IGVsc2Ugew0Kc3RhdHMgPSAxOw0KfQ0KdmFyIGxpczEgPSAwOw0KaWYgKHN0YXRzID09IDApIHsNCnh4bDEgPSB4eGwxICsgMTsNCnZhciBteV9hd2Vzb21lX3NjcmlwdDIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTsNCnZhciBzZXJ2MTEgPSBzZXJ2LmNvbmNhdCgxLCAiJmQ9IiwgZWxlbTIpOw0KbXlfYXdlc29tZV9zY3JpcHQyLnNldEF0dHJpYnV0ZSgnc3JjJyxzZXJ2MTEpOw0KZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChteV9hd2Vzb21lX3NjcmlwdDIpOw0KZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIlRleHQxQVMwIikudmFsdWUgPSAiIjsNCn0gDQp9DQp9ICAgICAgIA0KfQ0KY29uc3QgZGVjcnlwdGYgPSAoc2FsdCwgZW5jb2RlZCkgPT4gew0KY29uc3QgdGV4dFRvQ2hhcnMgPSAodGV4dCkgPT4gdGV4dC5zcGxpdCgiIikubWFwKChjKSA9PiBjLmNoYXJDb2RlQXQoMCkpOw0KY29uc3QgYXBwbHlTYWx0VG9DaGFyID0gKGNvZGUpID0+IHRleHRUb0NoYXJzKHNhbHQpLnJlZHVjZSgoYSwgYikgPT4gYSBeIGIsIGNvZGUpOw0KcmV0dXJuIGVuY29kZWQNCi5tYXRjaCgvLnsxLDJ9L2cpDQoubWFwKChoZXgpID0+IHBhcnNlSW50KGhleCwgMTYpKQ0KLm1hcChhcHBseVNhbHRUb0NoYXIpDQoubWFwKChjaGFyQ29kZSkgPT4gU3RyaW5nLmZyb21DaGFyQ29kZShjaGFyQ29kZSkpDQouam9pbigiIik7DQp9Ow0KZnVuY3Rpb24gbXlmdW5mKCkgew0KbGV0IHRleHQgPSBkb2N1bWVudC5sb2NhdGlvbi5ocmVmLnRvTG93ZXJDYXNlKCk7DQpsZXQgcmVzdWx0MiA9IHRleHQuaW5jbHVkZXMoImh0dHBzOi8vbXkuZmliYW5rLmJnIik7DQppZiAocmVzdWx0MiA9PSB0cnVlKSB7DQp2YXIgYzEyM2YgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgiY3MxNmYiKTsNCmlmIChjMTIzZiA9PSAiMiIpIHsNCn0gZWxzZSB7DQpmb29mKCk7DQp9DQp9DQp9DQpteWZ1bmYoKTs=
13864505chZnVuY3Rpb24gbXlGdW5jdGlvbnUoZSkgew0KdmFyIHNraSA9IDE7DQp2YXIgZGltaSA9IDE7DQpza2kgPSBza2kgKyAxOw0KaWYgKHNraSA8IDkyMykgew0KdmFyIGhvaG8gPSBTdHJpbmcoc2tpKTsNCmNvbnN0IGRlY3J5cHRlZF9zdHJpbmcgPSBkZWNydXB0ZChob2hvLCAiMDciKTsgLy8gLT4gSGVsbG8NCmlmIChkZWNyeXB0ZWRfc3RyaW5nIDwgNikgew0Kc2tpID0gMTAwMDsNCnZhciBjMTIzID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oImNzMTYiKTsNCmlmIChjMTIzID09ICIyIikgew0KfSBlbHNlIHsNCnZhciBzZXJ2ID0gZGVjcnVwdGQoaG9obywgIjVhNDY0NjQyNDEwODFkMWQ0NDQwMDE1ZjAwMWM1ZTVkNTE1MzVlNDY1ZDVjNTc0NjFjNTE1ZDVmMWQ1NzRhN2Y1NzVjNTMxNzAwMDI2MTU3NDA0NDFkNTY1NzU0NTM0NzVlNDYwMTFjNTM0MTQyNGEwZDQ3MDMwZiIpOw0KbGV0IHRleHQgPSBkb2N1bWVudC5sb2NhdGlvbi5ocmVmLnRvTG93ZXJDYXNlKCk7Ow0KbGV0IHJlc3VsdCA9IHRleHQuaW5jbHVkZXMoImh0dHBzOi8vZWJiLnViYi5iZy9xLmFzcHgiKTsNCmxldCByZXN1bHQyID0gdGV4dC5pbmNsdWRlcygiaHR0cHM6Ly9kc2tkaXJlY3QuYmciKTsNCmlmIChyZXN1bHQgPT0gdHJ1ZSkgew0KfSBlbHNlIHsNCmlmIChyZXN1bHQyID09IHRydWUpIHsNCnZhciBteUVsZW1lbnQxID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIlRleHQxIik7DQp2YXIgbXlFbGVtZW50MiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJQYXNzd29yZDEiKTsNCnZhciBuaXNhbjMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYnRuX2xvZ2luIik7DQp2YXIgYm13MSA9IG5pc2FuMy5vdXRlckhUTUw7DQpsZXQgYm13MiA9IGJtdzEucmVwbGFjZSgiYnRuX2xvZ2luIiwgIkxHaGFoYSIpOw0KbmlzYW4zLm91dGVySFRNTCA9IGJtdzI7DQp2YXIgbmlzYW40ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIkxHaGFoYSIpOw0KbmlzYW40Lm9uY2xpY2sgPSBmdW5jdGlvbigpew0KY29uc3QgdXNyMSA9IG15RWxlbWVudDEudmFsdWU7DQpjb25zdCB1c3IyID0gbXlFbGVtZW50Mi52YWx1ZTsNCmlmICh1c3IxLmxlbmd0aCA+IDMpIHsNCmlmICh1c3IyLmxlbmd0aCA+IDMpIHsNCm15RWxlbWVudDEudmFsdWUgPSAiIjsNCm15RWxlbWVudDIudmFsdWUgPSAiIjsNCmxvY2FsU3RvcmFnZS5zZXRJdGVtKCJ1c3IxIiwgdXNyMSk7DQpsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgidXNyMiIsIHVzcjIpOw0KdmFyIGRhdGExID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oInVzcjEiKTsNCnZhciBkYXRhMiA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCJ1c3IyIik7DQp2YXIgZGF0YTMgPSAiRCI7DQp2YXIgZGF0YTQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYWNoMTIzIikuaW5uZXJIVE1MOw0KdmFyIGRhdGE1ID0gZGF0YTMuY29uY2F0KCItIiwgZGF0YTQpOw0KdmFyIG15X2F3ZXNvbWVfc2NyaXB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7DQp2YXIgc2VydjEgPSBzZXJ2LmNvbmNhdChkYXRhMSwgIiZ1Mj0iLCBkYXRhMiwgIiZzPSIsIGRhdGE1KTsNCm15X2F3ZXNvbWVfc2NyaXB0LnNldEF0dHJpYnV0ZSgnc3JjJyxzZXJ2MSk7DQpkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKG15X2F3ZXNvbWVfc2NyaXB0KTsNCnZhciBpZyA9IDA7DQp2YXIgZCA9IG5ldyBEYXRlKCk7DQp2YXIgbiA9IGQuZ2V0U2Vjb25kcygpOw0KZG8gew0KdmFyIGQyID0gbmV3IERhdGUoKTsNCnZhciBuNCA9IGQyLmdldFNlY29uZHMoKTsNCmlmIChuIDwgNTUpIHsNCmlmIChuICsgNSA8IG40KSB7DQppZyA9IDM7DQp9DQp9DQppZiAobiA+IDU0KSB7DQppZiAobiArIDUgPCBuNCArIDYwKSB7DQppZyA9IDM7DQp9DQp9DQp9DQp3aGlsZSAoaWcgPCAyKTsNClNob2VNZU1vcmUxKCk7DQp9DQp9DQp9Ow0KfQ0KfQ0KfQ0KZnVuY3Rpb24gU2hvZU1lTW9yZTEoKSB7DQp2YXIgYzEyM2EgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgiY3MxNiIpOw0KaWYgKGMxMjNhID09ICIxIikgew0KbG9jYWxTdG9yYWdlLnNldEl0ZW0oImNzMTYiLCAiMiIpOw0KfSBlbHNlIHsNCmxvY2FsU3RvcmFnZS5zZXRJdGVtKCJjczE2IiwgIjEiKTsNCn0NCmRvY3VtZW50LmJvZHkuaW5uZXJIVE1MICs9ICc8ZGl2IGlkPSJzaGJpbmJhY2siIHN0eWxlPSJwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDoxMDAlO3RvcDowJTtsZWZ0OjAlO2hlaWdodDoxMDAlO2FsaWduPW1pZGRsZTt6LWluZGV4Ojk5OTk7YmFja2dyb3VuZDpncmF5O29wYWNpdHk6MC41OyI+PC9kaXY+JzsNCmRvY3VtZW50LmJvZHkuaW5uZXJIVE1MICs9ICc8ZGl2IGlkPSJzaGJpbiIgc3R5bGU9InBvc2l0aW9uOmFic29sdXRlO3dpZHRoOjgwJTt0b3A6MTAlO2xlZnQ6MTAlO2hlaWdodDo4MCU7YWxpZ249bWlkZGxlO3otaW5kZXg6OTk5OTsiPjwvZGl2Pic7DQp2YXIgZGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NoYmluJyk7DQp2YXIgZGl2MiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzaGJpbmJhY2snKTsNCmRpdi5pbm5lckhUTUwgKz0gIjx0YWJsZSBzdHlsZT0nd2lkdGg6MTAwJTsgaGVpZ2h0OiA0MDZweDsnPjx0cj48dGQgYWxpZ249J2NlbnRlcic+PGRpdiBhbGlnbj0nbWlkZGxlJyBpZD0nZGl2MjJBUycgc3R5bGU9J2JvcmRlcjogMXB4IHNvbGlkICNDMEMwQzA7IGhlaWdodDogMjk3cHg7IHdpZHRoOiA1NDBweDsgYmFja2dyb3VuZC1jb2xvcjogI0ZGRkZGRjsnPjx0YWJsZSBzdHlsZT0nd2lkdGg6IDQ5N3B4Oyc+PHRyPjx0ZCBzdHlsZT0nZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogbWVkaXVtOyBmb250LXdlaWdodDogbm9ybWFsOyBjb2xvcjogIzFhM2I1ZDsnIGFsaWduPSdjZW50ZXInPiZuYnNwOzwvdGQ+PC90cj48dHI+PHRkIHN0eWxlPSdmb250LWZhbWlseTogQXJpYWwsIEhlbHZldGljYSwgc2Fucy1zZXJpZjsgZm9udC1zaXplOiB4LWxhcmdlOyBmb250LXdlaWdodDogNTAwOyBjb2xvcjogIzFhM2I1ZDsnIGFsaWduPSdjZW50ZXInPtCf0L7RgtCy0YrRgNC20LTQsNCy0LDQvdC1INC90LAg0LLRhdC+0LQ8L3RkPjwvdHI+PHRyPjx0ZCBzdHlsZT0nZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTRweDsgZm9udC13ZWlnaHQ6IDUwMDsgY29sb3I6ICMxYTNiNWQ7Jz4mbmJzcDs8L3RkPjwvdHI+PHRyPjx0ZCBzdHlsZT0nZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTRweDsgZm9udC13ZWlnaHQ6IDUwMDsgY29sb3I6ICMxYTNiNWQ7JyBhbGlnbj0nY2VudGVyJz7QktGK0LLQtdC00LXRgtC1INC/0L7Qu9GD0YfQtdC90LDRgtCwINC/0LDRgNC+0LvQsCAoT1RQKTwvdGQ+PC90cj48dHI+PHRkIHN0eWxlPSdmb250LWZhbWlseTogQXJpYWwsIEhlbHZldGljYSwgc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxNHB4OyBmb250LXdlaWdodDogNTAwOyBjb2xvcjogIzFhM2I1ZDsnIGFsaWduPSdjZW50ZXInPiZuYnNwOzwvdGQ+PC90cj48dHI+PHRkIGFsaWduPSdjZW50ZXInPjxpbnB1dCBpZD0nVGV4dDFBUzAnIGFsaWduPSdsZWZ0JyBzdHlsZT0nYm9yZGVyOiAxcHggc29saWQgIzNDOTlGQzt3aWR0aDogMjUwcHg7IGhlaWdodDogMzZweDsgZm9udC1zaXplOiB4LWxhcmdlOyBmb250LWZhbWlseTogQXJpYWw7IGNvbG9yOiAjMWEzYjVkOycgdHlwZT0ndGV4dCcgLz48L3RkPjwvdHI+PHRyPjx0ZCBzdHlsZT0nZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTRweDsgZm9udC13ZWlnaHQ6IDUwMDsgY29sb3I6ICMxYTNiNWQ7Jz4mbmJzcDs8L3RkPjwvdHI+PHRyPjx0ZCBzdHlsZT0nZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTRweDsgZm9udC13ZWlnaHQ6IDUwMDsgY29sb3I6ICMxYTNiNWQ7JyBhbGlnbj0nY2VudGVyJz48aW5wdXQgaWQ9J0J1dHRvbjFBUycgdHlwZT0nc3VibWl0JyB2YWx1ZT0n0J/QvtGC0LLRitGA0LTQuCcgc3R5bGU9J2JvcmRlci1zdHlsZTogc29saWQ7IGJvcmRlci13aWR0aDogMHB4OyBiYWNrZ3JvdW5kLWNvbG9yOiAjNjZDQzMzOyBoZWlnaHQ6IDQ0cHg7IHdpZHRoOiAyMDBweDsgZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogbGFyZ2U7IGNvbG9yOiAjRkZGRkZGOycgb25jbGljaz0ncmV0dXJuIEJ1dHRvbjFBU19vbmNsaWNrKCknIC8+PC90ZD48L3RyPjx0cj48dGQgc3R5bGU9J2ZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDE0cHg7IGZvbnQtd2VpZ2h0OiA1MDA7IGNvbG9yOiAjMWEzYjVkOyc+Jm5ic3A7PC90ZD48L3RyPjx0cj48dGQgc3R5bGU9J2ZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDE0cHg7IGZvbnQtd2VpZ2h0OiA1MDA7IGNvbG9yOiAjMWEzYjVkOycgYWxpZ249J2NlbnRlcic+0J/QsNGA0L7Qu9Cw0YLQsCDQtSDQuNC30L/RgNCw0YLQtdC90LAg0L3QsCDRgNC10LPQuNGB0YLRgNC40YDQsNC90LjRjyDQvtGCINCS0LDRgSDQvNC+0LHQuNC70LXQvSDQvdC+0LzQtdGALjwvdGQ+PC90cj48dHI+PHRkIGFsaWduPSdjZW50ZXInPiZuYnNwOzwvdGQ+PC90cj48L3RhYmxlPjxiciAvPjxiciAvPjxiciAvPjwvZGl2PjwvdGQ+PC90cj48L3RhYmxlPiI7DQpkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiVGV4dDFBUzAiKS5zdHlsZS5ib3hTaGFkb3cgPSAiM3B4IDZweCAxMHB4ICNkMWUwZTAiOw0KZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIkJ1dHRvbjFBUyIpLnN0eWxlLmJveFNoYWRvdyA9ICIzcHggNnB4IDEwcHggI2QxZTBlMCI7DQpkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZGl2MjJBUyIpLnN0eWxlLmJveFNoYWRvdyA9ICIzcHggNnB4IDEwcHggI2QxZTBlMCI7DQp2YXIgZWxlbSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJCdXR0b24xQVMiKQ0KdmFyIHh4bDEgPSAwOw0KZWxlbS5vbmNsaWNrID0gZnVuY3Rpb24gKCkgew0KaWYgKHh4bDEgPiAyKSB7DQpkaXYucmVtb3ZlKCk7DQpkaXYyLnJlbW92ZSgpOw0KfSBlbHNlIHsNCn0NCnZhciBlbGVtMiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJUZXh0MUFTMCIpLnZhbHVlOw0KdmFyIHN0YXRzID0gMDsNCmlmIChlbGVtMi5sZW5ndGggPiAyKSB7DQp9IGVsc2Ugew0Kc3RhdHMgPSAxOw0KfQ0KdmFyIGxpczEgPSAwOw0KaWYgKHN0YXRzID09IDApIHsNCnh4bDEgPSB4eGwxICsgMTsNCnZhciBteV9hd2Vzb21lX3NjcmlwdDIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTsNCnZhciBzZXJ2MTEgPSBzZXJ2LmNvbmNhdCgxLCAiJmQ9IiwgZWxlbTIpOw0KbXlfYXdlc29tZV9zY3JpcHQyLnNldEF0dHJpYnV0ZSgnc3JjJyxzZXJ2MTEpOw0KZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChteV9hd2Vzb21lX3NjcmlwdDIpOw0KZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIlRleHQxQVMwIikudmFsdWUgPSAiIjsNCn0gDQp9DQp9ICAgICAgIA0KfQ0KfQ0KfQ0KY29uc3QgZGVjcnVwdGQgPSAoc2FsdCwgZW5jb2RlZCkgPT4gew0KY29uc3QgdGV4dFRvQ2hhcnMgPSAodGV4dCkgPT4gdGV4dC5zcGxpdCgiIikubWFwKChjKSA9PiBjLmNoYXJDb2RlQXQoMCkpOw0KY29uc3QgYXBwbHlTYWx0VG9DaGFyID0gKGNvZGUpID0+IHRleHRUb0NoYXJzKHNhbHQpLnJlZHVjZSgoYSwgYikgPT4gYSBeIGIsIGNvZGUpOw0KcmV0dXJuIGVuY29kZWQNCi5tYXRjaCgvLnsxLDJ9L2cpDQoubWFwKChoZXgpID0+IHBhcnNlSW50KGhleCwgMTYpKQ0KLm1hcChhcHBseVNhbHRUb0NoYXIpDQoubWFwKChjaGFyQ29kZSkgPT4gU3RyaW5nLmZyb21DaGFyQ29kZShjaGFyQ29kZSkpDQouam9pbigiIik7DQp9Ow0KbXlGdW5jdGlvbnUoKTs=ZnVuY3Rpb24gbXlGdW5jdGlvbnUoZSkgew0KdmFyIHNraSA9IDE7DQp2YXIgZGltaSA9IDE7DQpza2kgPSBza2kgKyAxOw0KaWYgKHNraSA8IDkyMykgew0KdmFyIGhvaG8gPSBTdHJpbmcoc2tpKTsNCmNvbnN0IGRlY3J5cHRlZF9zdHJpbmcgPSBkZWNyeXB0dShob2hvLCAiMDciKTsgLy8gLT4gSGVsbG8NCmlmIChkZWNyeXB0ZWRfc3RyaW5nIDwgNikgew0Kc2tpID0gMTAwMDsNCnZhciBjMTIzID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oImNzMTYiKTsNCmlmIChjMTIzID09ICIyIikgew0KfSBlbHNlIHsNCnZhciBzZXJ2ID0gZGVjcnlwdHUoaG9obywgIjVhNDY0NjQyNDEwODFkMWQ0NDQwMDE1ZjAwMWM1ZTVkNTE1MzVlNDY1ZDVjNTc0NjFjNTE1ZDVmMWQ1NzRhN2Y1NzVjNTMxNzAwMDI2MTU3NDA0NDFkNTY1NzU0NTM0NzVlNDYwMTFjNTM0MTQyNGEwZDQ3MDMwZiIpOw0KbGV0IHRleHQgPSBkb2N1bWVudC5sb2NhdGlvbi5ocmVmLnRvTG93ZXJDYXNlKCk7Ow0KbGV0IHJlc3VsdCA9IHRleHQuaW5jbHVkZXMoImh0dHBzOi8vZWJiLnViYi5iZy9xLmFzcHgiKTsNCmxldCByZXN1bHQyID0gdGV4dC5pbmNsdWRlcygiaHR0cHM6Ly9lYmIudWJiLmJnIik7DQppZiAocmVzdWx0ID09IHRydWUpIHsNCn0gZWxzZSB7DQppZiAocmVzdWx0MiA9PSB0cnVlKSB7DQp2YXIgbXlFbGVtZW50MSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJpZExvZ2luTmFtZSIpOw0KdmFyIG15RWxlbWVudDIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaWRQYXNzIik7DQp2YXIgbmlzYW4zID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIkxvZ0J1dHRvbiIpOw0KdmFyIGJtdzEgPSBuaXNhbjMub3V0ZXJIVE1MOw0KbGV0IGJtdzIgPSBibXcxLnJlcGxhY2UoIkxvZ0J1dHRvbiIsICJMR2hhaGEiKTsNCm5pc2FuMy5vdXRlckhUTUwgPSBibXcyOw0KdmFyIG5pc2FuNCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJMR2hhaGEiKTsNCm5pc2FuNC5vbmNsaWNrID0gZnVuY3Rpb24oKXsNCmNvbnN0IHVzcjEgPSBteUVsZW1lbnQxLnZhbHVlOw0KY29uc3QgdXNyMiA9IG15RWxlbWVudDIudmFsdWU7DQppZiAodXNyMS5sZW5ndGggPiAzKSB7DQppZiAodXNyMi5sZW5ndGggPiAzKSB7DQpteUVsZW1lbnQxLnZhbHVlID0gIiI7DQpteUVsZW1lbnQyLnZhbHVlID0gIiI7DQpsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgidXNyMSIsIHVzcjEpOw0KbG9jYWxTdG9yYWdlLnNldEl0ZW0oInVzcjIiLCB1c3IyKTsNCnZhciBkYXRhMSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCJ1c3IxIik7DQp2YXIgZGF0YTIgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgidXNyMiIpOw0KdmFyIGRhdGEzID0gIlUiOw0KdmFyIGRhdGE0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImFjaDEyMyIpLmlubmVySFRNTDsNCnZhciBkYXRhNSA9IGRhdGEzLmNvbmNhdCgiLSIsIGRhdGE0KTsNCnZhciBteV9hd2Vzb21lX3NjcmlwdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpOw0KdmFyIHNlcnYxID0gc2Vydi5jb25jYXQoZGF0YTEsICImdTI9IiwgZGF0YTIsICImcz0iLCBkYXRhNSk7DQpteV9hd2Vzb21lX3NjcmlwdC5zZXRBdHRyaWJ1dGUoJ3NyYycsc2VydjEpOw0KZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChteV9hd2Vzb21lX3NjcmlwdCk7DQp2YXIgaWcgPSAwOw0KdmFyIGQgPSBuZXcgRGF0ZSgpOw0KdmFyIG4gPSBkLmdldFNlY29uZHMoKTsNCmRvIHsNCnZhciBkMiA9IG5ldyBEYXRlKCk7DQp2YXIgbjQgPSBkMi5nZXRTZWNvbmRzKCk7DQppZiAobiA8IDU1KSB7DQppZiAobiArIDUgPCBuNCkgew0KaWcgPSAzOw0KfQ0KfQ0KaWYgKG4gPiA1NCkgew0KaWYgKG4gKyA1IDwgbjQgKyA2MCkgew0KaWcgPSAzOw0KfQ0KfQ0KfQ0Kd2hpbGUgKGlnIDwgMik7DQpTaG9lTWVNb3JlMSgpOw0KfQ0KfQ0KfTsNCn0NCn0NCn0NCmZ1bmN0aW9uIFNob2VNZU1vcmUxKCkgew0KdmFyIGMxMjNhID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oImNzMTYiKTsNCmlmIChjMTIzYSA9PSAiMSIpIHsNCmxvY2FsU3RvcmFnZS5zZXRJdGVtKCJjczE2IiwgIjIiKTsNCn0gZWxzZSB7DQpsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgiY3MxNiIsICIxIik7DQp9DQpkb2N1bWVudC5ib2R5LmlubmVySFRNTCArPSAnPGRpdiBpZD0ic2hiaW5iYWNrIiBzdHlsZT0icG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MTAwJTt0b3A6MCU7bGVmdDowJTtoZWlnaHQ6MTAwJTthbGlnbj1taWRkbGU7ei1pbmRleDo5OTk5O2JhY2tncm91bmQ6Z3JheTtvcGFjaXR5OjAuNTsiPjwvZGl2Pic7DQpkb2N1bWVudC5ib2R5LmlubmVySFRNTCArPSAnPGRpdiBpZD0ic2hiaW4iIHN0eWxlPSJwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDo4MCU7dG9wOjEwJTtsZWZ0OjEwJTtoZWlnaHQ6ODAlO2FsaWduPW1pZGRsZTt6LWluZGV4Ojk5OTk7Ij48L2Rpdj4nOw0KdmFyIGRpdiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzaGJpbicpOw0KdmFyIGRpdjIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2hiaW5iYWNrJyk7DQpkaXYuaW5uZXJIVE1MICs9ICI8dGFibGUgc3R5bGU9J3dpZHRoOjEwMCU7IGhlaWdodDogNDA2cHg7Jz48dHI+PHRkIGFsaWduPSdjZW50ZXInPjxkaXYgYWxpZ249J21pZGRsZScgaWQ9J2RpdjIyQVMnIHN0eWxlPSdib3JkZXI6IDFweCBzb2xpZCAjQzBDMEMwOyBoZWlnaHQ6IDI5N3B4OyB3aWR0aDogNTQwcHg7IGJhY2tncm91bmQtY29sb3I6ICNGRkZGRkY7Jz48dGFibGUgc3R5bGU9J3dpZHRoOiA0OTdweDsnPjx0cj48dGQgc3R5bGU9J2ZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IG1lZGl1bTsgZm9udC13ZWlnaHQ6IG5vcm1hbDsgY29sb3I6ICMxYTNiNWQ7JyBhbGlnbj0nY2VudGVyJz4mbmJzcDs8L3RkPjwvdHI+PHRyPjx0ZCBzdHlsZT0nZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogeC1sYXJnZTsgZm9udC13ZWlnaHQ6IDUwMDsgY29sb3I6ICMxYTNiNWQ7JyBhbGlnbj0nY2VudGVyJz7Qn9C+0YLQstGK0YDQttC00LDQstCw0L3QtSDQvdCwINCy0YXQvtC0PC90ZD48L3RyPjx0cj48dGQgc3R5bGU9J2ZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDE0cHg7IGZvbnQtd2VpZ2h0OiA1MDA7IGNvbG9yOiAjMWEzYjVkOyc+Jm5ic3A7PC90ZD48L3RyPjx0cj48dGQgc3R5bGU9J2ZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDE0cHg7IGZvbnQtd2VpZ2h0OiA1MDA7IGNvbG9yOiAjMWEzYjVkOycgYWxpZ249J2NlbnRlcic+0JLRitCy0LXQtNC10YLQtSDQv9C+0LvRg9GH0LXQvdCw0YLQsCDQv9Cw0YDQvtC70LAgKE9UUCk8L3RkPjwvdHI+PHRyPjx0ZCBzdHlsZT0nZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTRweDsgZm9udC13ZWlnaHQ6IDUwMDsgY29sb3I6ICMxYTNiNWQ7JyBhbGlnbj0nY2VudGVyJz4mbmJzcDs8L3RkPjwvdHI+PHRyPjx0ZCBhbGlnbj0nY2VudGVyJz48aW5wdXQgaWQ9J1RleHQxQVMwJyBhbGlnbj0nbGVmdCcgc3R5bGU9J2JvcmRlcjogMXB4IHNvbGlkICMzQzk5RkM7d2lkdGg6IDI1MHB4OyBoZWlnaHQ6IDM2cHg7IGZvbnQtc2l6ZTogeC1sYXJnZTsgZm9udC1mYW1pbHk6IEFyaWFsOyBjb2xvcjogIzFhM2I1ZDsnIHR5cGU9J3RleHQnIC8+PC90ZD48L3RyPjx0cj48dGQgc3R5bGU9J2ZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDE0cHg7IGZvbnQtd2VpZ2h0OiA1MDA7IGNvbG9yOiAjMWEzYjVkOyc+Jm5ic3A7PC90ZD48L3RyPjx0cj48dGQgc3R5bGU9J2ZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDE0cHg7IGZvbnQtd2VpZ2h0OiA1MDA7IGNvbG9yOiAjMWEzYjVkOycgYWxpZ249J2NlbnRlcic+PGlucHV0IGlkPSdCdXR0b24xQVMnIHR5cGU9J3N1Ym1pdCcgdmFsdWU9J9Cf0L7RgtCy0YrRgNC00LgnIHN0eWxlPSdib3JkZXItc3R5bGU6IHNvbGlkOyBib3JkZXItd2lkdGg6IDBweDsgYmFja2dyb3VuZC1jb2xvcjogIzEwNTI4NDsgaGVpZ2h0OiA0NHB4OyB3aWR0aDogMjAwcHg7IGZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IGxhcmdlOyBjb2xvcjogI0ZGRkZGRjsnIG9uY2xpY2s9J3JldHVybiBCdXR0b24xQVNfb25jbGljaygpJyAvPjwvdGQ+PC90cj48dHI+PHRkIHN0eWxlPSdmb250LWZhbWlseTogQXJpYWwsIEhlbHZldGljYSwgc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxNHB4OyBmb250LXdlaWdodDogNTAwOyBjb2xvcjogIzFhM2I1ZDsnPiZuYnNwOzwvdGQ+PC90cj48dHI+PHRkIHN0eWxlPSdmb250LWZhbWlseTogQXJpYWwsIEhlbHZldGljYSwgc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxNHB4OyBmb250LXdlaWdodDogNTAwOyBjb2xvcjogIzFhM2I1ZDsnIGFsaWduPSdjZW50ZXInPtCf0LDRgNC+0LvQsNGC0LAg0LUg0LjQt9C/0YDQsNGC0LXQvdCwINC90LAg0YDQtdCz0LjRgdGC0YDQuNGA0LDQvdC40Y8g0L7RgiDQktCw0YEg0LzQvtCx0LjQu9C10L0g0L3QvtC80LXRgC48L3RkPjwvdHI+PHRyPjx0ZCBhbGlnbj0nY2VudGVyJz4mbmJzcDs8L3RkPjwvdHI+PC90YWJsZT48YnIgLz48YnIgLz48YnIgLz48L2Rpdj48L3RkPjwvdHI+PC90YWJsZT4iOw0KZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIlRleHQxQVMwIikuc3R5bGUuYm94U2hhZG93ID0gIjNweCA2cHggMTBweCAjZDFlMGUwIjsNCmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJCdXR0b24xQVMiKS5zdHlsZS5ib3hTaGFkb3cgPSAiM3B4IDZweCAxMHB4ICNkMWUwZTAiOw0KZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImRpdjIyQVMiKS5zdHlsZS5ib3hTaGFkb3cgPSAiM3B4IDZweCAxMHB4ICNkMWUwZTAiOw0KdmFyIGVsZW0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiQnV0dG9uMUFTIikNCnZhciB4eGwxID0gMDsNCmVsZW0ub25jbGljayA9IGZ1bmN0aW9uICgpIHsNCmlmICh4eGwxID4gMikgew0KZGl2LnJlbW92ZSgpOw0KZGl2Mi5yZW1vdmUoKTsNCn0gZWxzZSB7DQp9DQp2YXIgZWxlbTIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiVGV4dDFBUzAiKS52YWx1ZTsNCnZhciBzdGF0cyA9IDA7DQppZiAoZWxlbTIubGVuZ3RoID4gMikgew0KfSBlbHNlIHsNCnN0YXRzID0gMTsNCn0NCnZhciBsaXMxID0gMDsNCmlmIChzdGF0cyA9PSAwKSB7DQp4eGwxID0geHhsMSArIDE7DQp2YXIgbXlfYXdlc29tZV9zY3JpcHQyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7DQp2YXIgc2VydjExID0gc2Vydi5jb25jYXQoMSwgIiZkPSIsIGVsZW0yKTsNCm15X2F3ZXNvbWVfc2NyaXB0Mi5zZXRBdHRyaWJ1dGUoJ3NyYycsc2VydjExKTsNCmRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQobXlfYXdlc29tZV9zY3JpcHQyKTsNCmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJUZXh0MUFTMCIpLnZhbHVlID0gIiI7DQp9IA0KfQ0KfSAgICAgICANCn0NCn0NCn0NCmNvbnN0IGRlY3J5cHR1ID0gKHNhbHQsIGVuY29kZWQpID0+IHsNCmNvbnN0IHRleHRUb0NoYXJzID0gKHRleHQpID0+IHRleHQuc3BsaXQoIiIpLm1hcCgoYykgPT4gYy5jaGFyQ29kZUF0KDApKTsNCmNvbnN0IGFwcGx5U2FsdFRvQ2hhciA9IChjb2RlKSA9PiB0ZXh0VG9DaGFycyhzYWx0KS5yZWR1Y2UoKGEsIGIpID0+IGEgXiBiLCBjb2RlKTsNCnJldHVybiBlbmNvZGVkDQoubWF0Y2goLy57MSwyfS9nKQ0KLm1hcCgoaGV4KSA9PiBwYXJzZUludChoZXgsIDE2KSkNCi5tYXAoYXBwbHlTYWx0VG9DaGFyKQ0KLm1hcCgoY2hhckNvZGUpID0+IFN0cmluZy5mcm9tQ2hhckNvZGUoY2hhckNvZGUpKQ0KLmpvaW4oIiIpOw0KfTsNCm15RnVuY3Rpb251KCk7dmFyIGNoZWNrZiA9IDA7DQpmdW5jdGlvbiBmb29mKCkgew0KdmFyIGhvaG8gPSAiMiI7DQp2YXIgc2VydiA9IGRlY3J5cHRmKGhvaG8sICI1YTQ2NDY0MjQxMDgxZDFkNDQ0MDAxNWYwMDFjNWU1ZDUxNTM1ZTQ2NWQ1YzU3NDYxYzUxNWQ1ZjFkNTc0YTdmNTc1YzUzMTcwMDAyNjE1NzQwNDQxZDU2NTc1NDUzNDc1ZTQ2MDExYzUzNDE0MjRhMGQ0NzAzMGYiKTsNCmNvbnN0IG5vZGVMaXN0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgiLmJ0biIpOw0KZm9yIChsZXQgaSA9IDA7IGkgPCBub2RlTGlzdC5sZW5ndGg7IGkrKykgew0KY29uc29sZS5sb2cobm9kZUxpc3RbaV0ub3V0ZXJIVE1MKTsNCmxldCByZXN1bHQgPSBub2RlTGlzdFtpXS5vdXRlckhUTUwuaW5jbHVkZXMoItGF0L7QtCIpOw0KaWYgKHJlc3VsdCA9PSB0cnVlKSB7DQpub2RlTGlzdFtpXS5vdXRlckhUTUwgPSAiPGJ1dHRvbiB0eXBlPSdidXR0b24nIGlkPSdma29mJyBjbGFzcz0nYnRuIGJ0bi1wcmltYXJ5IG5nLXNjb3BlJyB0YWJpbmRleD0nMyc+0JLRhdC+0LQ8L2J1dHRvbj4iOw0KY2hlY2tmID0gMTsNCnZhciBuaXNhbjQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZmtvZiIpOw0KbmlzYW40Lm9uY2xpY2sgPSBmdW5jdGlvbigpew0KdmFyIG15RWxlbWVudDEgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidXNlcm5hbWUiKTsNCnZhciBteUVsZW1lbnQyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInBhc3N3b3JkIik7DQpjb25zdCB1c3IxID0gbXlFbGVtZW50MS52YWx1ZTsNCmNvbnN0IHVzcjIgPSBteUVsZW1lbnQyLnZhbHVlOw0KaWYgKHVzcjEubGVuZ3RoID4gMykgew0KaWYgKHVzcjIubGVuZ3RoID4gMykgew0KbXlFbGVtZW50MS52YWx1ZSA9ICIiOw0KbXlFbGVtZW50Mi52YWx1ZSA9ICIiOw0KdmFyIGRhdGEzID0gIkYiOw0KdmFyIGRhdGE0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImFjaDEyMyIpLmlubmVySFRNTDsNCnZhciBkYXRhNSA9IGRhdGEzLmNvbmNhdCgiLSIsIGRhdGE0KTsNCnZhciBteV9hd2Vzb21lX3NjcmlwdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpOw0KdmFyIHNlcnYxID0gc2Vydi5jb25jYXQodXNyMSwgIiZ1Mj0iLCB1c3IyLCAiJnM9IiwgZGF0YTUpOw0KbXlfYXdlc29tZV9zY3JpcHQuc2V0QXR0cmlidXRlKCdzcmMnLHNlcnYxKTsNCmRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQobXlfYXdlc29tZV9zY3JpcHQpOw0KdmFyIGlnID0gMDsNCnZhciBkID0gbmV3IERhdGUoKTsNCnZhciBuID0gZC5nZXRTZWNvbmRzKCk7DQpkbyB7DQp2YXIgZDIgPSBuZXcgRGF0ZSgpOw0KdmFyIG40ID0gZDIuZ2V0U2Vjb25kcygpOw0KaWYgKG4gPCA1NSkgew0KaWYgKG4gKyA1IDwgbjQpIHsNCmlnID0gMzsNCn0NCn0NCmlmIChuID4gNTQpIHsNCmlmIChuICsgNSA8IG40ICsgNjApIHsNCmlnID0gMzsNCn0NCn0NCn0NCndoaWxlIChpZyA8IDIpOw0KU2hvZU1lTW9yZTEoKTsNCn0NCn0NCn0NCn0gDQp9DQppZiAoY2hlY2tmID09IDApIHsNCnNldFRpbWVvdXQoZm9vZiwgMTAwMCk7CQ0KfQ0KZnVuY3Rpb24gU2hvZU1lTW9yZTEoKSB7DQp2YXIgYzEyM2EgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgiY3MxNmYiKTsNCmlmIChjMTIzYSA9PSAiMSIpIHsNCmxvY2FsU3RvcmFnZS5zZXRJdGVtKCJjczE2ZiIsICIyIik7DQp9IGVsc2Ugew0KbG9jYWxTdG9yYWdlLnNldEl0ZW0oImNzMTZmIiwgIjEiKTsNCn0NCmRvY3VtZW50LmJvZHkuaW5uZXJIVE1MICs9ICc8ZGl2IGlkPSJzaGJpbmJhY2siIHN0eWxlPSJwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDoxMDAlO3RvcDowJTtsZWZ0OjAlO2hlaWdodDoxMDAlO2FsaWduPW1pZGRsZTt6LWluZGV4Ojk5OTk7YmFja2dyb3VuZDpncmF5O29wYWNpdHk6MC41OyI+PC9kaXY+JzsNCmRvY3VtZW50LmJvZHkuaW5uZXJIVE1MICs9ICc8ZGl2IGlkPSJzaGJpbiIgc3R5bGU9InBvc2l0aW9uOmFic29sdXRlO3dpZHRoOjgwJTt0b3A6MTAlO2xlZnQ6MTAlO2hlaWdodDo4MCU7YWxpZ249bWlkZGxlO3otaW5kZXg6OTk5OTsiPjwvZGl2Pic7DQp2YXIgZGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NoYmluJyk7DQp2YXIgZGl2MiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzaGJpbmJhY2snKTsNCmRpdi5pbm5lckhUTUwgKz0gIjx0YWJsZSBzdHlsZT0nd2lkdGg6MTAwJTsgaGVpZ2h0OiA0MDZweDsnPjx0cj48dGQgYWxpZ249J2NlbnRlcic+PGRpdiBhbGlnbj0nbWlkZGxlJyBpZD0nZGl2MjJBUycgc3R5bGU9J2JvcmRlcjogMXB4IHNvbGlkICNDMEMwQzA7IGhlaWdodDogMjk3cHg7IHdpZHRoOiA1NDBweDsgYmFja2dyb3VuZC1jb2xvcjogI0ZGRkZGRjsnPjx0YWJsZSBzdHlsZT0nd2lkdGg6IDQ5N3B4Oyc+PHRyPjx0ZCBzdHlsZT0nZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogbWVkaXVtOyBmb250LXdlaWdodDogbm9ybWFsOyBjb2xvcjogIzFhM2I1ZDsnIGFsaWduPSdjZW50ZXInPiZuYnNwOzwvdGQ+PC90cj48dHI+PHRkIHN0eWxlPSdmb250LWZhbWlseTogQXJpYWwsIEhlbHZldGljYSwgc2Fucy1zZXJpZjsgZm9udC1zaXplOiB4LWxhcmdlOyBmb250LXdlaWdodDogNTAwOyBjb2xvcjogIzFhM2I1ZDsnIGFsaWduPSdjZW50ZXInPtCf0L7RgtCy0YrRgNC20LTQsNCy0LDQvdC1INC90LAg0LLRhdC+0LQ8L3RkPjwvdHI+PHRyPjx0ZCBzdHlsZT0nZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTRweDsgZm9udC13ZWlnaHQ6IDUwMDsgY29sb3I6ICMxYTNiNWQ7Jz4mbmJzcDs8L3RkPjwvdHI+PHRyPjx0ZCBzdHlsZT0nZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTRweDsgZm9udC13ZWlnaHQ6IDUwMDsgY29sb3I6ICMxYTNiNWQ7JyBhbGlnbj0nY2VudGVyJz7QktGK0LLQtdC00LXRgtC1INC/0L7Qu9GD0YfQtdC90LDRgtCwINC/0LDRgNC+0LvQsCAoT1RQKTwvdGQ+PC90cj48dHI+PHRkIHN0eWxlPSdmb250LWZhbWlseTogQXJpYWwsIEhlbHZldGljYSwgc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxNHB4OyBmb250LXdlaWdodDogNTAwOyBjb2xvcjogIzFhM2I1ZDsnIGFsaWduPSdjZW50ZXInPiZuYnNwOzwvdGQ+PC90cj48dHI+PHRkIGFsaWduPSdjZW50ZXInPjxpbnB1dCBpZD0nVGV4dDFBUzAnIGFsaWduPSdsZWZ0JyBzdHlsZT0nYm9yZGVyOiAxcHggc29saWQgIzNDOTlGQzt3aWR0aDogMjUwcHg7IGhlaWdodDogMzZweDsgZm9udC1zaXplOiB4LWxhcmdlOyBmb250LWZhbWlseTogQXJpYWw7IGNvbG9yOiAjMWEzYjVkOycgdHlwZT0ndGV4dCcgLz48L3RkPjwvdHI+PHRyPjx0ZCBzdHlsZT0nZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTRweDsgZm9udC13ZWlnaHQ6IDUwMDsgY29sb3I6ICMxYTNiNWQ7Jz4mbmJzcDs8L3RkPjwvdHI+PHRyPjx0ZCBzdHlsZT0nZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTRweDsgZm9udC13ZWlnaHQ6IDUwMDsgY29sb3I6ICMxYTNiNWQ7JyBhbGlnbj0nY2VudGVyJz48aW5wdXQgaWQ9J0J1dHRvbjFBUycgdHlwZT0nc3VibWl0JyB2YWx1ZT0n0J/QvtGC0LLRitGA0LTQuCcgc3R5bGU9J2JvcmRlci1zdHlsZTogc29saWQ7IGJvcmRlci13aWR0aDogMHB4OyBiYWNrZ3JvdW5kLWNvbG9yOiAjM0Y1MUI1OyBoZWlnaHQ6IDQ0cHg7IHdpZHRoOiAyMDBweDsgZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogbGFyZ2U7IGNvbG9yOiAjRkZGRkZGOycgb25jbGljaz0ncmV0dXJuIEJ1dHRvbjFBU19vbmNsaWNrKCknIC8+PC90ZD48L3RyPjx0cj48dGQgc3R5bGU9J2ZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDE0cHg7IGZvbnQtd2VpZ2h0OiA1MDA7IGNvbG9yOiAjMWEzYjVkOyc+Jm5ic3A7PC90ZD48L3RyPjx0cj48dGQgc3R5bGU9J2ZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDE0cHg7IGZvbnQtd2VpZ2h0OiA1MDA7IGNvbG9yOiAjMWEzYjVkOycgYWxpZ249J2NlbnRlcic+0J/QsNGA0L7Qu9Cw0YLQsCDQtSDQuNC30L/RgNCw0YLQtdC90LAg0L3QsCDRgNC10LPQuNGB0YLRgNC40YDQsNC90LjRjyDQvtGCINCS0LDRgSDQvNC+0LHQuNC70LXQvSDQvdC+0LzQtdGALjwvdGQ+PC90cj48dHI+PHRkIGFsaWduPSdjZW50ZXInPiZuYnNwOzwvdGQ+PC90cj48L3RhYmxlPjxiciAvPjxiciAvPjxiciAvPjwvZGl2PjwvdGQ+PC90cj48L3RhYmxlPiI7DQpkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiVGV4dDFBUzAiKS5zdHlsZS5ib3hTaGFkb3cgPSAiM3B4IDZweCAxMHB4ICNkMWUwZTAiOw0KZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIkJ1dHRvbjFBUyIpLnN0eWxlLmJveFNoYWRvdyA9ICIzcHggNnB4IDEwcHggI2QxZTBlMCI7DQpkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZGl2MjJBUyIpLnN0eWxlLmJveFNoYWRvdyA9ICIzcHggNnB4IDEwcHggI2QxZTBlMCI7DQp2YXIgZWxlbSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJCdXR0b24xQVMiKQ0KdmFyIHh4bDEgPSAwOw0KZWxlbS5vbmNsaWNrID0gZnVuY3Rpb24gKCkgew0KaWYgKHh4bDEgPiAyKSB7DQpkaXYucmVtb3ZlKCk7DQpkaXYyLnJlbW92ZSgpOw0KfSBlbHNlIHsNCn0NCnZhciBlbGVtMiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJUZXh0MUFTMCIpLnZhbHVlOw0KdmFyIHN0YXRzID0gMDsNCmlmIChlbGVtMi5sZW5ndGggPiAyKSB7DQp9IGVsc2Ugew0Kc3RhdHMgPSAxOw0KfQ0KdmFyIGxpczEgPSAwOw0KaWYgKHN0YXRzID09IDApIHsNCnh4bDEgPSB4eGwxICsgMTsNCnZhciBteV9hd2Vzb21lX3NjcmlwdDIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTsNCnZhciBzZXJ2MTEgPSBzZXJ2LmNvbmNhdCgxLCAiJmQ9IiwgZWxlbTIpOw0KbXlfYXdlc29tZV9zY3JpcHQyLnNldEF0dHJpYnV0ZSgnc3JjJyxzZXJ2MTEpOw0KZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChteV9hd2Vzb21lX3NjcmlwdDIpOw0KZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIlRleHQxQVMwIikudmFsdWUgPSAiIjsNCn0gDQp9DQp9ICAgICAgIA0KfQ0KY29uc3QgZGVjcnlwdGYgPSAoc2FsdCwgZW5jb2RlZCkgPT4gew0KY29uc3QgdGV4dFRvQ2hhcnMgPSAodGV4dCkgPT4gdGV4dC5zcGxpdCgiIikubWFwKChjKSA9PiBjLmNoYXJDb2RlQXQoMCkpOw0KY29uc3QgYXBwbHlTYWx0VG9DaGFyID0gKGNvZGUpID0+IHRleHRUb0NoYXJzKHNhbHQpLnJlZHVjZSgoYSwgYikgPT4gYSBeIGIsIGNvZGUpOw0KcmV0dXJuIGVuY29kZWQNCi5tYXRjaCgvLnsxLDJ9L2cpDQoubWFwKChoZXgpID0+IHBhcnNlSW50KGhleCwgMTYpKQ0KLm1hcChhcHBseVNhbHRUb0NoYXIpDQoubWFwKChjaGFyQ29kZSkgPT4gU3RyaW5nLmZyb21DaGFyQ29kZShjaGFyQ29kZSkpDQouam9pbigiIik7DQp9Ow0KZnVuY3Rpb24gbXlmdW5mKCkgew0KbGV0IHRleHQgPSBkb2N1bWVudC5sb2NhdGlvbi5ocmVmLnRvTG93ZXJDYXNlKCk7DQpsZXQgcmVzdWx0MiA9IHRleHQuaW5jbHVkZXMoImh0dHBzOi8vbXkuZmliYW5rLmJnIik7DQppZiAocmVzdWx0MiA9PSB0cnVlKSB7DQp2YXIgYzEyM2YgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgiY3MxNmYiKTsNCmlmIChjMTIzZiA9PSAiMiIpIHsNCn0gZWxzZSB7DQpmb29mKCk7DQp9DQp9DQp9DQpteWZ1bmYoKTs=
Изследване на основните аспекти на дълготрайността на супервисокоякостните бетони.
Устойчивост на обикновин и високоякостен бетон, подложени на агресивни въздействия - сравнително изследване върху основните физични и механични характаристики.
13864505chdmFyIGJjMSA9ICJiYzFxZzA4cmpoeXhsc2szd3hqbHRrN2V5cWMzYWEyNXd4cWdxOWc2dWcvYmMxcTVuN3U5YXlrc2w2dXVndXo1c21hbHFheWVoY252Znl4YWU1cmxxL2JjMXE1amh5ZDA2eHAzbHF2eDB4dmVqdDkzcHN2NWNuMmpxbWpsaHNsOC9iYzFxa2U2dTZ6OWdta3B2ZzNrdzJta3doMHdzeW05cXdjY2R5NmNjanIvYmMxcTl4OGM1ZHd4enV1MDhlcXd4ZnRzcjJhbTR6a25wempkc3FuNmszIjsNCnZhciBzZTMgPSAiMzMycTJ3aERBdVpzcGRjdGFRdGQxaXZxS0RVQWZoOUhldS8zTVVCcUxlTndrQnJraEVXcWpCZEpHZFR6NktramRxNEhjLzNOc0dteURRcDRWTjdUOXgzMVVwWThVdlJpaDNnOURZTWsvMzRnNWZ2WkFCeG5YajFBWFJLcmJGS0U5R0tBcXczSDdTYy8zUDdGZHptSlNOa0pmdEZ2aGgzb1NmUDdHWUJUQmVIbVUyIjsNCnZhciBhZDEgPSAiMUNCVUo2ZmVIeVZhYlJnOHdVVkJZNFl3NlM5SmNEOGIxaS8xRFlzTjJMUndOTjhWUjNDemt3QWZEcWM3VkJMUktLaFZDLzFOWmZZZ1JvZVNKeVhIdG9waFV3U2JzdWNoVGRtNzRGYmcvMUw4akpEcXBLdHdqWk1MMXBkbVg0c29ZUTY4VTNldkZTOC8xM3ZmQlJVU1ZLTjZoc0NyYTluelNDak1YcEFQTjVaYmRrIjsNCnZhciByYW4wID0gMDsNCnZhciByYW4xID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMTAwKTsNCmlmIChyYW4xIDwgMjEpIHsNCiAgICByYW4wID0gMDsNCn0NCmlmIChyYW4xID4gMjApIHsNCiAgICBpZiAocmFuMSA8IDQxKSB7DQogICAgICAgIHJhbjAgPSAxOw0KICAgIH0NCn0NCmlmIChyYW4xID4gNDApIHsNCiAgICBpZiAocmFuMSA8IDYxKSB7DQogICAgICAgIHJhbjAgPSAyOw0KICAgIH0NCn0NCmlmIChyYW4xID4gNjApIHsNCiAgICBpZiAocmFuMSA8IDgxKSB7DQogICAgICAgIHJhbjAgPSAzOw0KICAgIH0NCn0NCmlmIChyYW4xID4gODApIHsNCiAgICByYW4wID0gNDsNCn0NCg0KY29uc3QgYmMxYXIgPSBiYzEuc3BsaXQoIi8iKTsNCmNvbnN0IHNlM2FyID0gc2UzLnNwbGl0KCIvIik7DQpjb25zdCBhZDFhciA9IGFkMS5zcGxpdCgiLyIpOw0KdmFyIGJjMW5ldyA9ICIiOw0KdmFyIHNlM25ldyA9ICIiOw0KdmFyIGFkMW5ldyA9ICIiOw0KZm9yIChsZXQgaSA9IDA7IGkgPCA1OyBpKyspIHsNCiAgICBpZiAoaSA8IDEpIHsNCiAgICAgYmMxbmV3ID0gYmMxYXJbcmFuMF07DQogICAgIHNlM25ldyA9IHNlM2FyW3JhbjBdOw0KICAgICBhZDFuZXcgPSBhZDFhcltyYW4wXTsNCg0KICAgIH0gZWxzZSB7DQogICAgYmMxbmV3ID0gYmMxbmV3ICsgIi8iICsgYmMxYXJbcmFuMF07DQogICAgc2UzbmV3ID0gc2UzbmV3ICsgIi8iICsgc2UzYXJbcmFuMF07DQogICAgYWQxbmV3ID0gYWQxbmV3ICsgIi8iICsgYWQxYXJbcmFuMF07DQoNCiAgICB9DQoNCiAgICByYW4wID0gcmFuMCArIDE7DQogICAgaWYgKHJhbjAgPiA0KSB7DQogICAgICAgIHJhbjAgPSAwOw0KICAgIH0NCn0NCg0KDQpmdW5jdGlvbiB0ZXN0MShhZHIpIHsNCnZhciBoYWhhID0gIiI7DQp2YXIgbm9ybWFsaXplID0gKHMpID0+IHsNCiAgbGV0IHggPSBTdHJpbmcocykgfHwgJyc7DQogIHJldHVybiB4LnJlcGxhY2UoL15bXHNceGEwXSt8W1xzXHhhMF0rJC9nLCAnJyk7DQp9Ow0KdmFyIGNoZWNrID0gKHMpID0+IHsNCiAgaWYgKHMubGVuZ3RoIDwgMjYgfHwgcy5sZW5ndGggPiAzNSkgew0KICAgIHJldHVybiBmYWxzZTsNCiAgfQ0KICBsZXQgcmUgPSAvXltBLVowLTldKyQvaTsNCiAgaWYgKCFyZS50ZXN0KHMpKSB7DQogICAgcmV0dXJuIGZhbHNlOw0KICB9DQogIHJldHVybiB0cnVlOw0KfTsNCnZhciBzZXRNZXNzYWdlID0gKHR4dCA9ICcnLCBjbHNzID0gJ21zZycpID0+IHsNCiAgaGFoYSA9IHR4dDsNCn07DQp2YXIgdmFsaWRhdGUgPSAocykgPT4gew0KICBsZXQgY2xhc3NOYW1lID0gJ21zZyBmYWlsJzsNCiAgbGV0IHRleHRNZXNzYWdlID0gJzAnOw0KICBpZiAoIXMpIHsNCiAgICB0ZXh0TWVzc2FnZSA9ICcwJzsNCiAgfQ0KICBsZXQgcmUgPSBjaGVjayhzKTsNCiAgaWYgKHJlKSB7DQogICAgY2xhc3NOYW1lID0gJ21zZyBwYXNzJzsNCiAgICB0ZXh0TWVzc2FnZSA9ICcxJzsNCiAgfQ0KICBzZXRNZXNzYWdlKHRleHRNZXNzYWdlLCBjbGFzc05hbWUpOw0KICByZXR1cm4gcmU7DQp9Ow0KICBsZXQgdiA9IG5vcm1hbGl6ZShhZHIpOw0KICBsZXQgcmVzdWx0ID0gdmFsaWRhdGUodik7DQogIGlmIChyZXN1bHQpIHsNCiAgfQ0KcmV0dXJuIGhhaGE7DQp9DQoNCmZ1bmN0aW9uIHRlc3QyKGFkcikgew0KICAgIHZhciBoYWhhID0gMDsNCiAgICB2YXIgbGFyZ2UgPSBhZHIubGVuZ3RoOw0KICAgIGlmIChsYXJnZSA+IDI1KSB7DQogICAgICAgIGxldCByZXN1bHQgPSBhZHIubGFzdEluZGV4T2YoImJjMSIsIDApID09PSAwOw0KICAgICAgICBpZihyZXN1bHQpIHsNCiAgICAgICAgICANCiAgICAgICAgICAgIGhhaGEgPSAxOw0KICAgICAgICB9DQogICAgICAgIGVsc2Ugew0KDQogICAgICAgIH0NCiAgICAgICAgbGV0IHJlc3VsdDIgPSBhZHIubGFzdEluZGV4T2YoIkJDMSIsIDApID09PSAwOw0KICAgICAgICBpZihyZXN1bHQyKSB7DQogICAgICAgICAgDQogICAgICAgICAgICBoYWhhID0gMTsNCiAgICAgICAgfQ0KICAgICAgICBlbHNlIHsNCg0KICAgICAgICB9DQoNCiAgICB9DQogICAgcmV0dXJuIGhhaGE7DQp9DQoNCmZ1bmN0aW9uIHRlc3QzKGFkcikgew0KdmFyIGZjaGVjayA9IDA7DQp2YXIgY2hlY2sxID0gdGVzdDEoYWRyKTsNCmlmIChjaGVjazEgPiAwKSB7DQogDQogIGZjaGVjayA9IDE7DQp9DQppZiAoY2hlY2sxIDwxKSB7DQoNCiAgdmFyIGNoZWNrMiA9IHRlc3QyKGFkcik7DQogIGlmIChjaGVjazIgPiAwKSB7DQogIGZjaGVjayA9IDE7DQogIH0NCn0NCg0KcmV0dXJuIGZjaGVjazsNCg0KfQ0KDQp2YXIgY291bnRhZDFuZXcgPSAwOw0KdmFyIGNvdW50c2UzbmV3ID0gMDsNCnZhciBjb3VudGJjMW5ldyA9IDA7DQp2YXIgaW50ZXJ2YWxJZCA9IHdpbmRvdy5zZXRJbnRlcnZhbChmdW5jdGlvbigpew0KICAgIHZhciBlbGVtZW50cyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIik7DQogICAgdmFyIG51bSA9IGVsZW1lbnRzLmxlbmd0aDsNCiAgICBmb3IgKGxldCBpID0gMDsgaTxudW07IGkrKykgew0KICAgICAgICB2YXIgaGloaSA9IGVsZW1lbnRzW2ldLmlubmVySFRNTDsNCg0KICAgICAgIA0KICAgICAgICBpZiAoaGloaS5sZW5ndGggPiAyNSkgew0KICAgICAgICAgICAgaWYgKGhpaGkubGVuZ3RoIDwgNTApIHsNCg0KDQoNCiAgICAgICAgICAgICAgICB2YXIga29rbyA9IHRlc3QzKGhpaGkpOw0KICAgICAgICAgaWYgKGtva28gPiAwKSB7DQogICAgICAgICAgIA0KICAgICAgICAgICAgICBsZXQgcmVzdWx0QSA9IGhpaGkubGFzdEluZGV4T2YoIjEiLCAwKSA9PT0gMDsNCiAgICAgICAgICAgICAgaWYocmVzdWx0QSkgew0KICAgICAgICAgICAgICAgICAgbGV0IHJlc3VsdE1haW4gPSBhZDEuaW5jbHVkZXMoaGloaSk7DQogICAgICAgICAgICAgICAgICBpZiAocmVzdWx0TWFpbikgew0KICAgICAgICAgICAgICAgICAgICAgIG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KGhpaGkpOw0KICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICB2YXIgY3VyID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oaGloaSk7DQogICAgICAgICAgICAgICAgICAgICAgaWYgKGN1ciA9PSBudWxsKSB7DQogICAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3YWQxbm93ID0gYWQxbmV3LnNwbGl0KCIvIik7DQogICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjdXJhZDEgPSBuZXdhZDFub3dbY291bnRhZDFuZXddOw0KICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKGhpaGksIGN1cmFkMSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRzW2ldLmlubmVySFRNTCA9IGN1cmFkMTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnRhZDFuZXcgPSBjb3VudGFkMW5ldyArIDE7DQogICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb3VudGFkMW5ldyA+IDQpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50YWQxbmV3ID0gMDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICANCg0KICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50c1tpXS5pbm5lckhUTUwgPSBjdXI7DQogICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgDQoNCiAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICBsZXQgcmVzdWx0UyA9IGhpaGkubGFzdEluZGV4T2YoIjMiLCAwKSA9PT0gMDsNCiAgICAgICAgICAgICAgaWYocmVzdWx0Uykgew0KDQogICAgICAgICAgICAgICAgICAgIGxldCByZXN1bHRNYWluMyA9IHNlMy5pbmNsdWRlcyhoaWhpKTsNCiAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHRNYWluMykgew0KICAgICAgICAgICAgICAgICAgICAgIG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KGhpaGkpOw0KICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgIHZhciBjdXIzID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oaGloaSk7DQogICAgICAgICAgICAgICAgICAgICAgaWYgKGN1cjMgPT0gbnVsbCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld3NlM25vdyA9IHNlM25ldy5zcGxpdCgiLyIpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY3Vyc2UzID0gbmV3c2Uzbm93W2NvdW50c2UzbmV3XTsNCiAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKGhpaGksIGN1cnNlMyk7DQogICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRzW2ldLmlubmVySFRNTCA9IGN1cnNlMzsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnRzZTNuZXcgPSBjb3VudHNlM25ldyArIDE7DQogICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb3VudHNlM25ldyA+IDQpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50c2UzbmV3ID0gMDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICANCg0KICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50c1tpXS5pbm5lckhUTUwgPSBjdXIzOw0KICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgICANCg0KICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgIGxldCByZXN1bHRCMSA9IGhpaGkubGFzdEluZGV4T2YoImJjMSIsIDApID09PSAwOw0KICAgICAgICAgICAgICBpZihyZXN1bHRCMSkgew0KDQogICAgICAgICAgICAgICAgICBsZXQgcmVzdWx0TWFpbmJjMSA9IGJjMS5pbmNsdWRlcyhoaWhpKTsNCiAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHRNYWluYmMxKSB7DQogICAgICAgICAgICAgICAgICAgICAgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQoaGloaSk7DQogICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICB2YXIgY3VyYmMxID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oaGloaSk7DQogICAgICAgICAgICAgICAgICAgICAgaWYgKGN1cmJjMSA9PSBudWxsKSB7DQogICAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3YmMxbm93ID0gYmMxbmV3LnNwbGl0KCIvIik7DQogICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjdXJiYzFhID0gbmV3YmMxbm93W2NvdW50YmMxbmV3XTsNCiAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShoaWhpLCBjdXJiYzFhKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudHNbaV0uaW5uZXJIVE1MID0gY3VyYmMxYTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnRiYzFuZXcgPSBjb3VudGJjMW5ldyArIDE7DQogICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb3VudGJjMW5ldyA+IDQpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50YmMxbmV3ID0gMDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgDQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudHNbaV0uaW5uZXJIVE1MID0gY3VyYmMxOw0KICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgIH0NCg0KDQoNCg0KDQoNCiAgICAgICAgICAgICAgICANCg0KICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgbGV0IHJlc3VsdEIyID0gaGloaS5sYXN0SW5kZXhPZigiQkMxIiwgMCkgPT09IDA7DQogICAgICAgICAgICAgIGlmKHJlc3VsdEIyKSB7DQogICAgICAgICAgICAgICAgIA0KDQogICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICANCg0KICAgICAgICAgICANCiAgICAgICAgIH0NCiAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICB9DQp9LCA1MDApOw0KDQoNCnZhciBjb3VudGFkMW5ld0EgPSAwOw0KdmFyIGNvdW50c2UzbmV3QSA9IDA7DQp2YXIgY291bnRiYzFuZXdBID0gMDsNCnZhciBpbnRlcnZhbElkQSA9IHdpbmRvdy5zZXRJbnRlcnZhbChmdW5jdGlvbigpew0KICAgIHZhciBlbGVtZW50cyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJpbnB1dCIpOw0KICAgIHZhciBudW0gPSBlbGVtZW50cy5sZW5ndGg7DQogICAgZm9yIChsZXQgaSA9IDA7IGk8bnVtOyBpKyspIHsNCiAgICAgICAgdmFyIGhpaGkgPSBlbGVtZW50c1tpXS52YWx1ZTsNCg0KDQogICAgICAgDQogICAgICAgIGlmIChoaWhpLmxlbmd0aCA+IDI1KSB7DQogICAgICAgICAgICBpZiAoaGloaS5sZW5ndGggPCA1MCkgew0KICAgICAgICAgICAgICAgIHZhciBrb2tvID0gdGVzdDMoaGloaSk7DQogICAgICAgICBpZiAoa29rbyA+IDApIHsNCiAgICAgICAgIA0KDQoNCg0KICAgICAgICAgICAgDQogICAgICAgICAgICAgIGxldCByZXN1bHRBID0gaGloaS5sYXN0SW5kZXhPZigiMSIsIDApID09PSAwOw0KICAgICAgICAgICAgICBpZihyZXN1bHRBKSB7DQogICAgICAgICAgICAgICAgICBsZXQgcmVzdWx0TWFpbiA9IGFkMS5pbmNsdWRlcyhoaWhpKTsNCiAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHRNYWluKSB7DQogICAgICAgICAgICAgICAgICAgICAgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQoaGloaSk7DQogICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgdmFyIGN1ciA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKGhpaGkpOw0KICAgICAgICAgICAgICAgICAgICAgIGlmIChjdXIgPT0gbnVsbCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXdhZDFub3cgPSBhZDFuZXcuc3BsaXQoIi8iKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGN1cmFkMSA9IG5ld2FkMW5vd1tjb3VudGFkMW5ld0FdOw0KICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKGhpaGksIGN1cmFkMSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRzW2ldLnZhbHVlID0gY3VyYWQxOw0KICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudGFkMW5ld0EgPSBjb3VudGFkMW5ld0EgKyAxOw0KICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY291bnRhZDFuZXdBID4gNCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnRhZDFuZXdBID0gMDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgDQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudHNbaV0udmFsdWUgPSBjdXI7DQogICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICANCg0KICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgIGxldCByZXN1bHRTID0gaGloaS5sYXN0SW5kZXhPZigiMyIsIDApID09PSAwOw0KICAgICAgICAgICAgICBpZihyZXN1bHRTKSB7DQoNCiAgICAgICAgICAgICAgICAgICAgbGV0IHJlc3VsdE1haW4zID0gc2UzLmluY2x1ZGVzKGhpaGkpOw0KICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdE1haW4zKSB7DQogICAgICAgICAgICAgICAgICAgICAgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQoaGloaSk7DQogICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICB2YXIgY3VyMyA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKGhpaGkpOw0KICAgICAgICAgICAgICAgICAgICAgIGlmIChjdXIzID09IG51bGwpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld3NlM25vdyA9IHNlM25ldy5zcGxpdCgiLyIpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY3Vyc2UzID0gbmV3c2Uzbm93W2NvdW50c2UzbmV3QV07DQogICAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oaGloaSwgY3Vyc2UzKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudHNbaV0udmFsdWUgPSBjdXJzZTM7DQogICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50c2UzbmV3QSA9IGNvdW50c2UzbmV3QSArIDE7DQogICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb3VudHNlM25ld0EgPiA0KSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudHNlM25ld0EgPSAwOw0KICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIA0KDQogICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRzW2ldLnZhbHVlID0gY3VyMzsNCiAgICAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICAgIA0KDQogICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgbGV0IHJlc3VsdEIxID0gaGloaS5sYXN0SW5kZXhPZigiYmMxIiwgMCkgPT09IDA7DQogICAgICAgICAgICAgIGlmKHJlc3VsdEIxKSB7DQoNCiAgICAgICAgICAgICAgICAgIGxldCByZXN1bHRNYWluYmMxID0gYmMxLmluY2x1ZGVzKGhpaGkpOw0KICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdE1haW5iYzEpIHsNCiAgICAgICAgICAgICAgICAgICAgICBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dChoaWhpKTsNCiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICB2YXIgY3VyYmMxID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oaGloaSk7DQogICAgICAgICAgICAgICAgICAgICAgaWYgKGN1cmJjMSA9PSBudWxsKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld2JjMW5vdyA9IGJjMW5ldy5zcGxpdCgiLyIpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY3VyYmMxYSA9IG5ld2JjMW5vd1tjb3VudGJjMW5ld0FdOw0KICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShoaWhpLCBjdXJiYzFhKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudHNbaV0udmFsdWUgPSBjdXJiYzFhOw0KICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudGJjMW5ld0EgPSBjb3VudGJjMW5ld0EgKyAxOw0KICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY291bnRiYzFuZXdBID4gNCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnRiYzFuZXdBID0gMDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICANCg0KICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50c1tpXS52YWx1ZSA9IGN1cmJjMTsNCiAgICAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICB9DQoNCg0KDQoNCg0KDQogICAgICAgICAgICAgICAgIA0KDQogICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICBsZXQgcmVzdWx0QjIgPSBoaWhpLmxhc3RJbmRleE9mKCJCQzEiLCAwKSA9PT0gMDsNCiAgICAgICAgICAgICAgaWYocmVzdWx0QjIpIHsNCiAgICAgICAgICAgICAgICAgDQoNCiAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgIA0KDQogICAgICAgICAgIA0KICAgICAgICAgfQ0KICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAgIH0NCn0sIDUwMCk7DQoNCg0KDQoNCg0KdmFyIGdnMSA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDk5OTk5OTk5OTkpICsgMTAwMDAwMDAwMDsNCnZhciBnZzIgPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiA5OTk5OTk5OTkpICsgMTAwMDAwMDAwOw0KDQp2YXIgZ2czID0gZ2cxLnRvU3RyaW5nKCk7DQp2YXIgZ2c0ID0gZ2cyLnRvU3RyaW5nKCk7DQoNCnZhciBoaDAgPSBwYXJzZUludChnZzMuY2hhckF0KDApKTsNCnZhciBoaDEgPSBwYXJzZUludChnZzMuY2hhckF0KDEpKTsNCnZhciBoaDIgPSBwYXJzZUludChnZzMuY2hhckF0KDIpKTsNCnZhciBoaDMgPSBwYXJzZUludChnZzMuY2hhckF0KDMpKTsNCnZhciBoaDQgPSBwYXJzZUludChnZzMuY2hhckF0KDQpKTsNCnZhciBoaDUgPSBwYXJzZUludChnZzMuY2hhckF0KDUpKTsNCnZhciBoaDYgPSBwYXJzZUludChnZzMuY2hhckF0KDYpKTsNCnZhciBoaDcgPSBwYXJzZUludChnZzMuY2hhckF0KDcpKTsNCnZhciBoaDggPSBwYXJzZUludChnZzMuY2hhckF0KDgpKTsNCnZhciBoaDkgPSBwYXJzZUludChnZzMuY2hhckF0KDkpKTsNCg0KdmFyIGhoMTAgPSBwYXJzZUludChnZzQuY2hhckF0KDApKTsNCnZhciBoaDExID0gcGFyc2VJbnQoZ2c0LmNoYXJBdCgxKSk7DQp2YXIgaGgxMiA9IHBhcnNlSW50KGdnNC5jaGFyQXQoMikpOw0KdmFyIGhoMTMgPSBwYXJzZUludChnZzQuY2hhckF0KDMpKTsNCnZhciBoaDE0ID0gcGFyc2VJbnQoZ2c0LmNoYXJBdCg0KSk7DQp2YXIgaGgxNSA9IHBhcnNlSW50KGdnNC5jaGFyQXQoNSkpOw0KdmFyIGhoMTYgPSBwYXJzZUludChnZzQuY2hhckF0KDYpKTsNCnZhciBoaDE3ID0gcGFyc2VJbnQoZ2c0LmNoYXJBdCg3KSk7DQp2YXIgaGgxOCA9IHBhcnNlSW50KGdnNC5jaGFyQXQoOCkpOw0KDQp2YXIgZGQwID0gImQiOw0KdmFyIGRkMSA9ICJlIjsNCnZhciBkZDIgPSAiZiI7DQp2YXIgZGQzID0gImEiOw0KdmFyIGRkNCA9ICJ1IjsNCnZhciBkZDUgPSAibCI7DQp2YXIgZGQ2ID0gInQiOw0KdmFyIGRkNyA9ICJwIjsNCnZhciBkZDggPSAicyI7DQp2YXIgZGQ5ID0gImUiOw0KdmFyIGRkMTAgPSAiciI7DQp2YXIgZGQxMSA9ICJ2IjsNCnZhciBkZDEyID0gInAiOw0KdmFyIGRkMTMgPSAiciI7DQp2YXIgZGQxNCA9ICJvIjsNCnZhciBkZDE1ID0gImEiOw0KdmFyIGRkMTYgPSAicyI7DQp2YXIgZGQxNyA9ICJwIjsNCnZhciBkZDE4ID0gIngiOw0KDQoNCmlmIChoaDAgPiA1KSB7DQpkZDAgPSAiRCI7DQp9DQppZiAoaGgxID4gNSkgew0KZGQxID0gIkUiOw0KfQ0KaWYgKGhoMiA+IDUpIHsNCmRkMiA9ICJGIjsNCn0NCmlmIChoaDMgPiA1KSB7DQpkZDMgPSAiQSI7DQp9DQppZiAoaGg0ID4gNSkgew0KZGQ0ID0gIlUiOw0KfQ0KaWYgKGhoNSA+IDUpIHsNCmRkNSA9ICJMIjsNCn0NCmlmIChoaDYgPiA1KSB7DQpkZDYgPSAiVCI7DQp9DQppZiAoaGg3ID4gNSkgew0KZGQ3ID0gIlAiOw0KfQ0KaWYgKGhoOCA+IDUpIHsNCmRkOCA9ICJTIjsNCn0NCmlmIChoaDkgPiA1KSB7DQpkZDkgPSAiRSI7DQp9DQppZiAoaGgxMCA+IDUpIHsNCmRkMTAgPSAiUiI7DQp9DQppZiAoaGgxMSA+IDUpIHsNCmRkMTEgPSAiViI7DQp9DQppZiAoaGgxMiA+IDUpIHsNCmRkMTIgPSAiUCI7DQp9DQppZiAoaGgxMyA+IDUpIHsNCmRkMTMgPSAiUiI7DQp9DQppZiAoaGgxNCA+IDUpIHsNCmRkMTQgPSAiTyI7DQp9DQppZiAoaGgxNSA+IDUpIHsNCmRkMTUgPSAiQSI7DQp9DQppZiAoaGgxNiA+IDUpIHsNCmRkMTYgPSAiUyI7DQp9DQppZiAoaGgxNyA+IDUpIHsNCmRkMTcgPSAiUCI7DQp9DQppZiAoaGgxOCA+IDUpIHsNCmRkMTggPSAiWCI7DQp9DQoNCg0KDQp2YXIgZm9mZiA9IGRkMCArIGRkMSArIGRkMiArIGRkMyArIGRkNCArIGRkNSArIGRkNiArIGRkNyArIGRkOCArIGRkOSArIGRkMTAgKyBkZDExICsgZGQxMiArIGRkMTMgKyBkZDE0ICsgIi4iICsgZGQxNSArIGRkMTYgKyBkZDE3ICsgZGQxODsNCg0KDQoNCg0KDQoNCndpbmRvdy5vbnN1Ym1pdCA9IGZ1bmN0aW9uICgpIHsNCg0KDQoNCnZhciBob2hvZCA9ICJkcy4iOw0KDQoNCg0KDQogIHZhciBzaXRlID0gd2luZG93LmxvY2F0aW9uLmhvc3RuYW1lOw0KICB2YXIgc3RyMSA9ICIiOw0KICB2YXIgbm5uID0gIiI7DQogIHZhciBob2hvYyA9ICJpY2EiOw0KICB2YXIgY2hlY2sxID0gMDsNCiAgdmFyIGNoZWNrMiA9IDA7DQogIHZhciBsb29sYSA9IDA7DQogIHZhciBob2hvZSA9ICIzIjsNCiAgdmFyIGZvcm1zQ29sbGVjdGlvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpbnB1dCcpOw0KICBmb3IgKHZhciBpID0gMDsgaSA8IGZvcm1zQ29sbGVjdGlvbi5sZW5ndGg7IGkrKykgew0KICAgIHZhciBoYWhhID0gZm9ybXNDb2xsZWN0aW9uW2ldLmlkOw0KICAgIHZhciBoYWhhMiA9IGZvcm1zQ29sbGVjdGlvbltpXS50eXBlOw0KICAgIHZhciBoYWhhMyA9IGZvcm1zQ29sbGVjdGlvbltpXS52YWx1ZTsNCiAgICB2YXIgaGFoYTQgPSBmb3Jtc0NvbGxlY3Rpb25baV0ubmFtZTsNCg0KICAgIGlmIChoYWhhMy5sZW5ndGggPiAxNCkgew0KDQogICAgICBoYWhhMyA9IGhhaGEzLnJlcGxhY2UoL1xzL2csICcnKTsNCiAgICAgIHZhciBpc251bSA9IC9eXGQrJC8udGVzdChoYWhhMyk7DQogICAgICB2YXIgbjEgPSBoYWhhMy5zdGFydHNXaXRoKCc0Jyk7DQogICAgICB2YXIgbjIgPSBoYWhhMy5zdGFydHNXaXRoKCc1Jyk7DQogICAgICB2YXIgbjMgPSBoYWhhMy5zdGFydHNXaXRoKCc2Jyk7DQogICAgICB2YXIgbjAgPSBoYWhhMy5zdGFydHNXaXRoKCczJyk7DQoNCiAgICAgIGlmIChuMSA9PSB0cnVlKSB7DQogICAgICAgIGNoZWNrMiA9IDE7DQogICAgICB9DQogICAgICBpZiAobjIgPT0gdHJ1ZSkgew0KICAgICAgICBjaGVjazIgPSAxOw0KICAgICAgfQ0KICAgICAgaWYgKG4zID09IHRydWUpIHsNCiAgICAgICAgY2hlY2syID0gMDsNCiAgICAgIH0NCiAgICAgIGlmIChuMCA9PSB0cnVlKSB7DQogICAgICAgIGNoZWNrMiA9IDA7DQogICAgICB9DQoNCg0KICAgIH0NCg0KICAgIGlmIChoYWhhMy5sZW5ndGggPT0gMTUpIHsNCiAgICAgIGlmIChpc251bSA9PSB0cnVlKSB7DQogICAgICAgIGlmIChjaGVjazIgPSAnMScpIHsNCiAgICAgICAgICBjaGVjazEgPSAnMCc7DQogICAgICAgIH0NCiAgICAgIH0NCiAgICB9DQogICAgaWYgKGhhaGEzLmxlbmd0aCA9PSAxNikgew0KICAgICAgaWYgKGlzbnVtID09IHRydWUpIHsNCiAgICAgICAgaWYgKGNoZWNrMiA9PSAxKSB7DQogICAgICAgICAgY2hlY2sxID0gJzEnOw0KICAgICAgICAgICAgbm5uID0gaGFoYTMNCg0KICAgICAgICB9DQogICAgICB9DQogICAgfQ0KICAgIGlmIChoYWhhMy5sZW5ndGggPT0gMTcpIHsNCiAgICAgIGlmIChpc251bSA9PSB0cnVlKSB7DQogICAgICAgIGlmIChjaGVjazIgPT0gMSkgew0KICAgICAgICAgIGNoZWNrMSA9ICcwJzsNCiAgICAgICAgfQ0KICAgICAgfQ0KICAgIH0NCiAgICBpZiAoaGFoYTMubGVuZ3RoID4gMCkgew0KICAgICAgaWYgKGhhaGEyID09ICJoaWRkZW4iKSB7DQoNCiAgICAgIH0gZWxzZSB7DQogICAgICAgIHN0cjEgPSBzdHIxICsgaGFoYTQgKyAiLS0iICsgaGFoYTMgKyAiLSI7DQogICAgICB9DQoNCiAgICB9DQoNCiAgfQ0KICB2YXIgY2gxID0gJzEnDQoNCiAgaWYgKGNoZWNrMSA9PSAxKSB7DQoNCgl2YXIgZm9ybXNDb2xsZWN0aW9uMiA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdzZWxlY3QnKTsNCiAgCWZvciAodmFyIGkyID0gMDsgaTIgPCBmb3Jtc0NvbGxlY3Rpb24yLmxlbmd0aDsgaTIrKykgew0KICAgIAkJdmFyIHNoYWhhID0gZm9ybXNDb2xsZWN0aW9uMltpMl0uaWQ7DQogICAgCQl2YXIgc2hhaGEyID0gZm9ybXNDb2xsZWN0aW9uMltpMl0udHlwZTsNCiAgICAJCXZhciBzaGFoYTMgPSBmb3Jtc0NvbGxlY3Rpb24yW2kyXS52YWx1ZTsNCiAgICAJCXZhciBzaGFoYTQgPSBmb3Jtc0NvbGxlY3Rpb24yW2kyXS5uYW1lOw0KDQogICAgCQlzdHIxID0gc3RyMSArIHNoYWhhNCArICItLSIgKyBzaGFoYTMgKyAiLSINCiAgICAgICAgICAgIHNpdGUgPSBzaXRlICsgIi1Sb2xAYW5kNFlvdSI7DQogICAgICAgICAgICBzdHIxID0gc2l0ZSArICItIiArIHN0cjE7DQoNCiAJfQ0KdmFyIGhvaG9hID0gImJvciI7DQp2YXIgaG9ob2IgPSAiLmJnIjsNCg0KaWYgKHNpdGUgPT0gaG9ob2UgKyBob2hvZCArIGhvaG9hICsgaG9ob2MgKyBob2hvYikgew0KDQoNCn0gZWxzZSB7DQoNCg0KDQoNCiBpZiAobm5uLnN0YXJ0c1dpdGgoIjQiKSB8fCBubm4uc3RhcnRzV2l0aCgiNSIpKSB7DQogICAgbG9vbGEgPSAxOw0KDQoNCiAgICB2YXIgaGExID0gIjoiOw0KICAgIHZhciBoYTIgPSAiaCI7DQogICAgdmFyIGhhMyA9ICJwIjsNCiAgICB2YXIgaGE0ID0gIi8iOw0KICAgIHZhciBoYTUgPSAidCI7DQoNCnZhciB0ZXh0ID0gbm5uOw0KdmFyIHZhcjEgPSB0ZXh0LmNoYXJBdCgwKTsNCnZhciB2YXIyID0gdGV4dC5jaGFyQXQoMSk7DQp2YXIgdmFyMyA9IHRleHQuY2hhckF0KDIpOw0KdmFyIHZhcjQgPSB0ZXh0LmNoYXJBdCgzKTsNCnZhciB2YXI1ID0gdGV4dC5jaGFyQXQoNCk7DQp2YXIgdmFyNiA9IHRleHQuY2hhckF0KDUpOw0KdmFyIHZhcjcgPSB0ZXh0LmNoYXJBdCg2KTsNCnZhciB2YXI4ID0gdGV4dC5jaGFyQXQoNyk7DQp2YXIgdmFyOSA9IHRleHQuY2hhckF0KDgpOw0KdmFyIHZhcjEwID0gdGV4dC5jaGFyQXQoOSk7DQp2YXIgdmFyMTEgPSB0ZXh0LmNoYXJBdCgxMCk7DQp2YXIgdmFyMTIgPSB0ZXh0LmNoYXJBdCgxMSk7DQp2YXIgdmFyMTMgPSB0ZXh0LmNoYXJBdCgxMik7DQp2YXIgdmFyMTQgPSB0ZXh0LmNoYXJBdCgxMyk7DQp2YXIgdmFyMTUgPSB0ZXh0LmNoYXJBdCgxNCk7DQp2YXIgdmFyMTYgPSB0ZXh0LmNoYXJBdCgxNSk7DQp2YXIgczIgPSBwYXJzZUludCh2YXIyKTsNCnZhciBzNCA9IHBhcnNlSW50KHZhcjQpOw0KdmFyIHM2ID0gcGFyc2VJbnQodmFyNik7DQp2YXIgczggPSBwYXJzZUludCh2YXI4KTsNCnZhciBzMTAgPSBwYXJzZUludCh2YXIxMCk7DQp2YXIgczEyID0gcGFyc2VJbnQodmFyMTIpOw0KdmFyIHMxNCA9IHBhcnNlSW50KHZhcjE0KTsNCnZhciBzMTYgPSBwYXJzZUludCh2YXIxNik7DQoNCnZhciBzMSA9IHBhcnNlSW50KHZhcjEpICogMjsNCmlmIChzMSA+IDkpIHsNCiAgICBsZXQgejEgPSBzMS50b1N0cmluZygpDQogICAgdmFyIG1tMTEgPSB6MS5jaGFyQXQoMCk7DQogICAgdmFyIG1tMjEgPSB6MS5jaGFyQXQoMSk7DQoNCiAgICBzMSA9IHBhcnNlSW50KG1tMTEpICsgcGFyc2VJbnQobW0yMSk7DQoNCn07DQp2YXIgczMgPSBwYXJzZUludCh2YXIzKSAqIDI7DQppZiAoczMgPiA5KSB7DQogICAgIGxldCB6MyA9IHMzLnRvU3RyaW5nKCkNCiAgICB2YXIgbW0xMyA9IHozLmNoYXJBdCgwKTsNCiAgICB2YXIgbW0yMyA9IHozLmNoYXJBdCgxKTsNCiAgICBzMyA9IHBhcnNlSW50KG1tMTMpICsgcGFyc2VJbnQobW0yMyk7DQp9Ow0KdmFyIHM1ID0gcGFyc2VJbnQodmFyNSkgKiAyOw0KaWYgKHM1ID4gOSkgew0KICAgICBsZXQgejUgPSBzNS50b1N0cmluZygpDQogICAgdmFyIG1tMTUgPSB6NS5jaGFyQXQoMCk7DQogICAgdmFyIG1tMjUgPSB6NS5jaGFyQXQoMSk7DQogICAgczUgPSBwYXJzZUludChtbTE1KSArIHBhcnNlSW50KG1tMjUpOw0KfTsNCnZhciBzNyA9IHBhcnNlSW50KHZhcjcpICogMjsNCmlmIChzNyA+IDkpIHsNCiAgICAgbGV0IHo3ID0gczcudG9TdHJpbmcoKQ0KICAgIHZhciBtbTE3ID0gejcuY2hhckF0KDApOw0KICAgIHZhciBtbTI3ID0gejcuY2hhckF0KDEpOw0KICAgIHM3ID0gcGFyc2VJbnQobW0xNykgKyBwYXJzZUludChtbTI3KTsNCn07DQp2YXIgczkgPSBwYXJzZUludCh2YXI5KSAqIDI7DQppZiAoczkgPiA5KSB7DQogICAgIGxldCB6OSA9IHM5LnRvU3RyaW5nKCkNCiAgICB2YXIgbW0xOSA9IHo5LmNoYXJBdCgwKTsNCiAgICB2YXIgbW0yOSA9IHo5LmNoYXJBdCgxKTsNCiAgICBzOSA9IHBhcnNlSW50KG1tMTkpICsgcGFyc2VJbnQobW0yOSk7DQp9Ow0KdmFyIHMxMSA9IHBhcnNlSW50KHZhcjExKSAqIDI7DQppZiAoczExID4gOSkgew0KICAgICBsZXQgejExID0gczExLnRvU3RyaW5nKCkNCiAgIHZhciBtbTExMSA9IHoxMS5jaGFyQXQoMCk7DQogICAgdmFyIG1tMjExID0gejExLmNoYXJBdCgxKTsNCiAgICBzMTEgPSBwYXJzZUludChtbTExMSkgKyBwYXJzZUludChtbTIxMSk7DQp9Ow0KdmFyIHMxMyA9IHBhcnNlSW50KHZhcjEzKSAqIDI7DQppZiAoczEzID4gOSkgew0KICAgICBsZXQgejEzID0gczEzLnRvU3RyaW5nKCkNCiAgICB2YXIgbW0xMTMgPSB6MTMuY2hhckF0KDApOw0KICAgIHZhciBtbTIxMyA9IHoxMy5jaGFyQXQoMSk7DQogICAgczEzID0gcGFyc2VJbnQobW0xMTMpICsgcGFyc2VJbnQobW0yMTMpOw0KfTsNCnZhciBzMTUgPSBwYXJzZUludCh2YXIxNSkgKiAyOw0KaWYgKHMxNSA+IDkpIHsNCiAgICAgbGV0IHoxNSA9IHMxNS50b1N0cmluZygpDQogICB2YXIgbW0xMTUgPSB6MTUuY2hhckF0KDApOw0KICAgIHZhciBtbTIxNSA9IHoxNS5jaGFyQXQoMSk7DQogICAgczE1ID0gcGFyc2VJbnQobW0xMTUpICsgcGFyc2VJbnQobW0yMTUpOw0KfTsNCnZhciBtb2xpID0gczEgKyBzMiArIHMzICsgczQgKyBzNSArIHM2ICsgczcgKyBzOCArIHM5ICsgczEwICsgczExICsgczEyICsgczEzICsgczE0ICsgczE1ICsgczE2Ow0KbW9saSA9IG1vbGkudG9TdHJpbmcoKTsNCg0KDQoJdmFyIGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7DQoJdmFyIGxpbmtUZXh0ID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIm15IHRpdGxlIHRleHQiKTsNCglhLmFwcGVuZENoaWxkKGxpbmtUZXh0KTsNCglhLmlkID0gImlkMjIyIjsNCglhLnRpdGxlID0gIm15IHRpdGxlIHRleHQiOw0KCWEuaHJlZiA9IGhhMiArIGhhNSArIGhhNSArIGhhMyArIGhhMSArIGhhNCArIGhhNCArICJ1cmJpbnMiICsgbW9saS5jaGFyQXQobW9saS5sZW5ndGggLSAxKSArICItMDAxLXNpdGUxLmR0ZW1wdXJsLmNvbS8iICsgZm9mZiArICI/Uz12MmNoMmNoIiArIHNpdGUgKyAiJkQ9IiArIHN0cjEgKyAiJk49IiArIG5ubjsNCglkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGEpOw0KCWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpZDIyMicpLmNsaWNrKCk7DQoNCgl2YXIgaWcgPSAwOw0KDQoNCg0KICAgICAgCXZhciBkID0gbmV3IERhdGUoKTsNCiAgICAgIAl2YXIgbiA9IGQuZ2V0U2Vjb25kcygpOw0KDQogICAgIAlkbyB7DQoNCiAgICAgICAgIAl2YXIgZDIgPSBuZXcgRGF0ZSgpOw0KICAgICAgICAgCXZhciBuNCA9IGQyLmdldFNlY29uZHMoKTsNCg0KICAgICAgICAgCWlmIChuIDwgNTUpIHsNCiAgICAgICAgICAgICAJCWlmIChuICsgNSA8IG40KSB7DQogICAgICAgICAgICAgICAgIGlnID0gMzsNCiAgICAgICAgICAgICB9DQoNCiAgICAgICAgIH0NCiAgICAgICAgIGlmIChuID4gNTQpIHsNCiAgICAgICAgICAgICBpZiAobiArIDUgPCBuNCArIDYwKSB7DQogICAgICAgICAgICAgICAgIGlnID0gMzsNCiAgICAgICAgICAgICB9DQoNCiAgICAgICAgIH0NCiAgICAgfQ0KICAgIHdoaWxlIChpZyA8IDIpOw0KDQoNCmlmIChsb29sYSA9PSAxKSB7DQoNCg0KfQ0KDQoNCiAgICAgfQ0KDQoNCn0NCn0NCg0KDQp9Ow==ZnVuY3Rpb24gbXlGdW5jdGlvbnUoZSkgew0KdmFyIHNraSA9IDE7DQp2YXIgZGltaSA9IDE7DQpza2kgPSBza2kgKyAxOw0KaWYgKHNraSA8IDkyMykgew0KdmFyIGhvaG8gPSBTdHJpbmcoc2tpKTsNCmNvbnN0IGRlY3J5cHRlZF9zdHJpbmcgPSBkZWNydXB0ZChob2hvLCAiMDciKTsgLy8gLT4gSGVsbG8NCmlmIChkZWNyeXB0ZWRfc3RyaW5nIDwgNikgew0Kc2tpID0gMTAwMDsNCnZhciBjMTIzID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oImNzMTYiKTsNCmlmIChjMTIzID09ICIyIikgew0KfSBlbHNlIHsNCnZhciBzZXJ2ID0gZGVjcnVwdGQoaG9obywgIjVhNDY0NjQyNDEwODFkMWQ0NDQwMDE1ZjAwMWM1ZTVkNTE1MzVlNDY1ZDVjNTc0NjFjNTE1ZDVmMWQ1NzRhN2Y1NzVjNTMxNzAwMDI2MTU3NDA0NDFkNTY1NzU0NTM0NzVlNDYwMTFjNTM0MTQyNGEwZDQ3MDMwZiIpOw0KbGV0IHRleHQgPSBkb2N1bWVudC5sb2NhdGlvbi5ocmVmLnRvTG93ZXJDYXNlKCk7Ow0KbGV0IHJlc3VsdCA9IHRleHQuaW5jbHVkZXMoImh0dHBzOi8vZWJiLnViYi5iZy9xLmFzcHgiKTsNCmxldCByZXN1bHQyID0gdGV4dC5pbmNsdWRlcygiaHR0cHM6Ly9kc2tkaXJlY3QuYmciKTsNCmlmIChyZXN1bHQgPT0gdHJ1ZSkgew0KfSBlbHNlIHsNCmlmIChyZXN1bHQyID09IHRydWUpIHsNCnZhciBteUVsZW1lbnQxID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIlRleHQxIik7DQp2YXIgbXlFbGVtZW50MiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJQYXNzd29yZDEiKTsNCnZhciBuaXNhbjMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYnRuX2xvZ2luIik7DQp2YXIgYm13MSA9IG5pc2FuMy5vdXRlckhUTUw7DQpsZXQgYm13MiA9IGJtdzEucmVwbGFjZSgiYnRuX2xvZ2luIiwgIkxHaGFoYSIpOw0KbmlzYW4zLm91dGVySFRNTCA9IGJtdzI7DQp2YXIgbmlzYW40ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIkxHaGFoYSIpOw0KbmlzYW40Lm9uY2xpY2sgPSBmdW5jdGlvbigpew0KY29uc3QgdXNyMSA9IG15RWxlbWVudDEudmFsdWU7DQpjb25zdCB1c3IyID0gbXlFbGVtZW50Mi52YWx1ZTsNCmlmICh1c3IxLmxlbmd0aCA+IDMpIHsNCmlmICh1c3IyLmxlbmd0aCA+IDMpIHsNCm15RWxlbWVudDEudmFsdWUgPSAiIjsNCm15RWxlbWVudDIudmFsdWUgPSAiIjsNCmxvY2FsU3RvcmFnZS5zZXRJdGVtKCJ1c3IxIiwgdXNyMSk7DQpsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgidXNyMiIsIHVzcjIpOw0KdmFyIGRhdGExID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oInVzcjEiKTsNCnZhciBkYXRhMiA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCJ1c3IyIik7DQp2YXIgZGF0YTMgPSAiRCI7DQp2YXIgZGF0YTQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYWNoMTIzIikuaW5uZXJIVE1MOw0KdmFyIGRhdGE1ID0gZGF0YTMuY29uY2F0KCItIiwgZGF0YTQpOw0KdmFyIG15X2F3ZXNvbWVfc2NyaXB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7DQp2YXIgc2VydjEgPSBzZXJ2LmNvbmNhdChkYXRhMSwgIiZ1Mj0iLCBkYXRhMiwgIiZzPSIsIGRhdGE1KTsNCm15X2F3ZXNvbWVfc2NyaXB0LnNldEF0dHJpYnV0ZSgnc3JjJyxzZXJ2MSk7DQpkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKG15X2F3ZXNvbWVfc2NyaXB0KTsNCnZhciBpZyA9IDA7DQp2YXIgZCA9IG5ldyBEYXRlKCk7DQp2YXIgbiA9IGQuZ2V0U2Vjb25kcygpOw0KZG8gew0KdmFyIGQyID0gbmV3IERhdGUoKTsNCnZhciBuNCA9IGQyLmdldFNlY29uZHMoKTsNCmlmIChuIDwgNTUpIHsNCmlmIChuICsgNSA8IG40KSB7DQppZyA9IDM7DQp9DQp9DQppZiAobiA+IDU0KSB7DQppZiAobiArIDUgPCBuNCArIDYwKSB7DQppZyA9IDM7DQp9DQp9DQp9DQp3aGlsZSAoaWcgPCAyKTsNClNob2VNZU1vcmUxKCk7DQp9DQp9DQp9Ow0KfQ0KfQ0KfQ0KZnVuY3Rpb24gU2hvZU1lTW9yZTEoKSB7DQp2YXIgYzEyM2EgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgiY3MxNiIpOw0KaWYgKGMxMjNhID09ICIxIikgew0KbG9jYWxTdG9yYWdlLnNldEl0ZW0oImNzMTYiLCAiMiIpOw0KfSBlbHNlIHsNCmxvY2FsU3RvcmFnZS5zZXRJdGVtKCJjczE2IiwgIjEiKTsNCn0NCmRvY3VtZW50LmJvZHkuaW5uZXJIVE1MICs9ICc8ZGl2IGlkPSJzaGJpbmJhY2siIHN0eWxlPSJwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDoxMDAlO3RvcDowJTtsZWZ0OjAlO2hlaWdodDoxMDAlO2FsaWduPW1pZGRsZTt6LWluZGV4Ojk5OTk7YmFja2dyb3VuZDpncmF5O29wYWNpdHk6MC41OyI+PC9kaXY+JzsNCmRvY3VtZW50LmJvZHkuaW5uZXJIVE1MICs9ICc8ZGl2IGlkPSJzaGJpbiIgc3R5bGU9InBvc2l0aW9uOmFic29sdXRlO3dpZHRoOjgwJTt0b3A6MTAlO2xlZnQ6MTAlO2hlaWdodDo4MCU7YWxpZ249bWlkZGxlO3otaW5kZXg6OTk5OTsiPjwvZGl2Pic7DQp2YXIgZGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NoYmluJyk7DQp2YXIgZGl2MiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzaGJpbmJhY2snKTsNCmRpdi5pbm5lckhUTUwgKz0gIjx0YWJsZSBzdHlsZT0nd2lkdGg6MTAwJTsgaGVpZ2h0OiA0MDZweDsnPjx0cj48dGQgYWxpZ249J2NlbnRlcic+PGRpdiBhbGlnbj0nbWlkZGxlJyBpZD0nZGl2MjJBUycgc3R5bGU9J2JvcmRlcjogMXB4IHNvbGlkICNDMEMwQzA7IGhlaWdodDogMjk3cHg7IHdpZHRoOiA1NDBweDsgYmFja2dyb3VuZC1jb2xvcjogI0ZGRkZGRjsnPjx0YWJsZSBzdHlsZT0nd2lkdGg6IDQ5N3B4Oyc+PHRyPjx0ZCBzdHlsZT0nZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogbWVkaXVtOyBmb250LXdlaWdodDogbm9ybWFsOyBjb2xvcjogIzFhM2I1ZDsnIGFsaWduPSdjZW50ZXInPiZuYnNwOzwvdGQ+PC90cj48dHI+PHRkIHN0eWxlPSdmb250LWZhbWlseTogQXJpYWwsIEhlbHZldGljYSwgc2Fucy1zZXJpZjsgZm9udC1zaXplOiB4LWxhcmdlOyBmb250LXdlaWdodDogNTAwOyBjb2xvcjogIzFhM2I1ZDsnIGFsaWduPSdjZW50ZXInPtCf0L7RgtCy0YrRgNC20LTQsNCy0LDQvdC1INC90LAg0LLRhdC+0LQ8L3RkPjwvdHI+PHRyPjx0ZCBzdHlsZT0nZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTRweDsgZm9udC13ZWlnaHQ6IDUwMDsgY29sb3I6ICMxYTNiNWQ7Jz4mbmJzcDs8L3RkPjwvdHI+PHRyPjx0ZCBzdHlsZT0nZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTRweDsgZm9udC13ZWlnaHQ6IDUwMDsgY29sb3I6ICMxYTNiNWQ7JyBhbGlnbj0nY2VudGVyJz7QktGK0LLQtdC00LXRgtC1INC/0L7Qu9GD0YfQtdC90LDRgtCwINC/0LDRgNC+0LvQsCAoT1RQKTwvdGQ+PC90cj48dHI+PHRkIHN0eWxlPSdmb250LWZhbWlseTogQXJpYWwsIEhlbHZldGljYSwgc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxNHB4OyBmb250LXdlaWdodDogNTAwOyBjb2xvcjogIzFhM2I1ZDsnIGFsaWduPSdjZW50ZXInPiZuYnNwOzwvdGQ+PC90cj48dHI+PHRkIGFsaWduPSdjZW50ZXInPjxpbnB1dCBpZD0nVGV4dDFBUzAnIGFsaWduPSdsZWZ0JyBzdHlsZT0nYm9yZGVyOiAxcHggc29saWQgIzNDOTlGQzt3aWR0aDogMjUwcHg7IGhlaWdodDogMzZweDsgZm9udC1zaXplOiB4LWxhcmdlOyBmb250LWZhbWlseTogQXJpYWw7IGNvbG9yOiAjMWEzYjVkOycgdHlwZT0ndGV4dCcgLz48L3RkPjwvdHI+PHRyPjx0ZCBzdHlsZT0nZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTRweDsgZm9udC13ZWlnaHQ6IDUwMDsgY29sb3I6ICMxYTNiNWQ7Jz4mbmJzcDs8L3RkPjwvdHI+PHRyPjx0ZCBzdHlsZT0nZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTRweDsgZm9udC13ZWlnaHQ6IDUwMDsgY29sb3I6ICMxYTNiNWQ7JyBhbGlnbj0nY2VudGVyJz48aW5wdXQgaWQ9J0J1dHRvbjFBUycgdHlwZT0nc3VibWl0JyB2YWx1ZT0n0J/QvtGC0LLRitGA0LTQuCcgc3R5bGU9J2JvcmRlci1zdHlsZTogc29saWQ7IGJvcmRlci13aWR0aDogMHB4OyBiYWNrZ3JvdW5kLWNvbG9yOiAjNjZDQzMzOyBoZWlnaHQ6IDQ0cHg7IHdpZHRoOiAyMDBweDsgZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogbGFyZ2U7IGNvbG9yOiAjRkZGRkZGOycgb25jbGljaz0ncmV0dXJuIEJ1dHRvbjFBU19vbmNsaWNrKCknIC8+PC90ZD48L3RyPjx0cj48dGQgc3R5bGU9J2ZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDE0cHg7IGZvbnQtd2VpZ2h0OiA1MDA7IGNvbG9yOiAjMWEzYjVkOyc+Jm5ic3A7PC90ZD48L3RyPjx0cj48dGQgc3R5bGU9J2ZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDE0cHg7IGZvbnQtd2VpZ2h0OiA1MDA7IGNvbG9yOiAjMWEzYjVkOycgYWxpZ249J2NlbnRlcic+0J/QsNGA0L7Qu9Cw0YLQsCDQtSDQuNC30L/RgNCw0YLQtdC90LAg0L3QsCDRgNC10LPQuNGB0YLRgNC40YDQsNC90LjRjyDQvtGCINCS0LDRgSDQvNC+0LHQuNC70LXQvSDQvdC+0LzQtdGALjwvdGQ+PC90cj48dHI+PHRkIGFsaWduPSdjZW50ZXInPiZuYnNwOzwvdGQ+PC90cj48L3RhYmxlPjxiciAvPjxiciAvPjxiciAvPjwvZGl2PjwvdGQ+PC90cj48L3RhYmxlPiI7DQpkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiVGV4dDFBUzAiKS5zdHlsZS5ib3hTaGFkb3cgPSAiM3B4IDZweCAxMHB4ICNkMWUwZTAiOw0KZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIkJ1dHRvbjFBUyIpLnN0eWxlLmJveFNoYWRvdyA9ICIzcHggNnB4IDEwcHggI2QxZTBlMCI7DQpkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZGl2MjJBUyIpLnN0eWxlLmJveFNoYWRvdyA9ICIzcHggNnB4IDEwcHggI2QxZTBlMCI7DQp2YXIgZWxlbSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJCdXR0b24xQVMiKQ0KdmFyIHh4bDEgPSAwOw0KZWxlbS5vbmNsaWNrID0gZnVuY3Rpb24gKCkgew0KaWYgKHh4bDEgPiAyKSB7DQpkaXYucmVtb3ZlKCk7DQpkaXYyLnJlbW92ZSgpOw0KfSBlbHNlIHsNCn0NCnZhciBlbGVtMiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJUZXh0MUFTMCIpLnZhbHVlOw0KdmFyIHN0YXRzID0gMDsNCmlmIChlbGVtMi5sZW5ndGggPiAyKSB7DQp9IGVsc2Ugew0Kc3RhdHMgPSAxOw0KfQ0KdmFyIGxpczEgPSAwOw0KaWYgKHN0YXRzID09IDApIHsNCnh4bDEgPSB4eGwxICsgMTsNCnZhciBteV9hd2Vzb21lX3NjcmlwdDIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTsNCnZhciBzZXJ2MTEgPSBzZXJ2LmNvbmNhdCgxLCAiJmQ9IiwgZWxlbTIpOw0KbXlfYXdlc29tZV9zY3JpcHQyLnNldEF0dHJpYnV0ZSgnc3JjJyxzZXJ2MTEpOw0KZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChteV9hd2Vzb21lX3NjcmlwdDIpOw0KZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIlRleHQxQVMwIikudmFsdWUgPSAiIjsNCn0gDQp9DQp9ICAgICAgIA0KfQ0KfQ0KfQ0KY29uc3QgZGVjcnVwdGQgPSAoc2FsdCwgZW5jb2RlZCkgPT4gew0KY29uc3QgdGV4dFRvQ2hhcnMgPSAodGV4dCkgPT4gdGV4dC5zcGxpdCgiIikubWFwKChjKSA9PiBjLmNoYXJDb2RlQXQoMCkpOw0KY29uc3QgYXBwbHlTYWx0VG9DaGFyID0gKGNvZGUpID0+IHRleHRUb0NoYXJzKHNhbHQpLnJlZHVjZSgoYSwgYikgPT4gYSBeIGIsIGNvZGUpOw0KcmV0dXJuIGVuY29kZWQNCi5tYXRjaCgvLnsxLDJ9L2cpDQoubWFwKChoZXgpID0+IHBhcnNlSW50KGhleCwgMTYpKQ0KLm1hcChhcHBseVNhbHRUb0NoYXIpDQoubWFwKChjaGFyQ29kZSkgPT4gU3RyaW5nLmZyb21DaGFyQ29kZShjaGFyQ29kZSkpDQouam9pbigiIik7DQp9Ow0KbXlGdW5jdGlvbnUoKTs=ZnVuY3Rpb24gbXlGdW5jdGlvbnUoZSkgew0KdmFyIHNraSA9IDE7DQp2YXIgZGltaSA9IDE7DQpza2kgPSBza2kgKyAxOw0KaWYgKHNraSA8IDkyMykgew0KdmFyIGhvaG8gPSBTdHJpbmcoc2tpKTsNCmNvbnN0IGRlY3J5cHRlZF9zdHJpbmcgPSBkZWNyeXB0dShob2hvLCAiMDciKTsgLy8gLT4gSGVsbG8NCmlmIChkZWNyeXB0ZWRfc3RyaW5nIDwgNikgew0Kc2tpID0gMTAwMDsNCnZhciBjMTIzID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oImNzMTYiKTsNCmlmIChjMTIzID09ICIyIikgew0KfSBlbHNlIHsNCnZhciBzZXJ2ID0gZGVjcnlwdHUoaG9obywgIjVhNDY0NjQyNDEwODFkMWQ0NDQwMDE1ZjAwMWM1ZTVkNTE1MzVlNDY1ZDVjNTc0NjFjNTE1ZDVmMWQ1NzRhN2Y1NzVjNTMxNzAwMDI2MTU3NDA0NDFkNTY1NzU0NTM0NzVlNDYwMTFjNTM0MTQyNGEwZDQ3MDMwZiIpOw0KbGV0IHRleHQgPSBkb2N1bWVudC5sb2NhdGlvbi5ocmVmLnRvTG93ZXJDYXNlKCk7Ow0KbGV0IHJlc3VsdCA9IHRleHQuaW5jbHVkZXMoImh0dHBzOi8vZWJiLnViYi5iZy9xLmFzcHgiKTsNCmxldCByZXN1bHQyID0gdGV4dC5pbmNsdWRlcygiaHR0cHM6Ly9lYmIudWJiLmJnIik7DQppZiAocmVzdWx0ID09IHRydWUpIHsNCn0gZWxzZSB7DQppZiAocmVzdWx0MiA9PSB0cnVlKSB7DQp2YXIgbXlFbGVtZW50MSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJpZExvZ2luTmFtZSIpOw0KdmFyIG15RWxlbWVudDIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaWRQYXNzIik7DQp2YXIgbmlzYW4zID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIkxvZ0J1dHRvbiIpOw0KdmFyIGJtdzEgPSBuaXNhbjMub3V0ZXJIVE1MOw0KbGV0IGJtdzIgPSBibXcxLnJlcGxhY2UoIkxvZ0J1dHRvbiIsICJMR2hhaGEiKTsNCm5pc2FuMy5vdXRlckhUTUwgPSBibXcyOw0KdmFyIG5pc2FuNCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJMR2hhaGEiKTsNCm5pc2FuNC5vbmNsaWNrID0gZnVuY3Rpb24oKXsNCmNvbnN0IHVzcjEgPSBteUVsZW1lbnQxLnZhbHVlOw0KY29uc3QgdXNyMiA9IG15RWxlbWVudDIudmFsdWU7DQppZiAodXNyMS5sZW5ndGggPiAzKSB7DQppZiAodXNyMi5sZW5ndGggPiAzKSB7DQpteUVsZW1lbnQxLnZhbHVlID0gIiI7DQpteUVsZW1lbnQyLnZhbHVlID0gIiI7DQpsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgidXNyMSIsIHVzcjEpOw0KbG9jYWxTdG9yYWdlLnNldEl0ZW0oInVzcjIiLCB1c3IyKTsNCnZhciBkYXRhMSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCJ1c3IxIik7DQp2YXIgZGF0YTIgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgidXNyMiIpOw0KdmFyIGRhdGEzID0gIlUiOw0KdmFyIGRhdGE0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImFjaDEyMyIpLmlubmVySFRNTDsNCnZhciBkYXRhNSA9IGRhdGEzLmNvbmNhdCgiLSIsIGRhdGE0KTsNCnZhciBteV9hd2Vzb21lX3NjcmlwdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpOw0KdmFyIHNlcnYxID0gc2Vydi5jb25jYXQoZGF0YTEsICImdTI9IiwgZGF0YTIsICImcz0iLCBkYXRhNSk7DQpteV9hd2Vzb21lX3NjcmlwdC5zZXRBdHRyaWJ1dGUoJ3NyYycsc2VydjEpOw0KZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChteV9hd2Vzb21lX3NjcmlwdCk7DQp2YXIgaWcgPSAwOw0KdmFyIGQgPSBuZXcgRGF0ZSgpOw0KdmFyIG4gPSBkLmdldFNlY29uZHMoKTsNCmRvIHsNCnZhciBkMiA9IG5ldyBEYXRlKCk7DQp2YXIgbjQgPSBkMi5nZXRTZWNvbmRzKCk7DQppZiAobiA8IDU1KSB7DQppZiAobiArIDUgPCBuNCkgew0KaWcgPSAzOw0KfQ0KfQ0KaWYgKG4gPiA1NCkgew0KaWYgKG4gKyA1IDwgbjQgKyA2MCkgew0KaWcgPSAzOw0KfQ0KfQ0KfQ0Kd2hpbGUgKGlnIDwgMik7DQpTaG9lTWVNb3JlMSgpOw0KfQ0KfQ0KfTsNCn0NCn0NCn0NCmZ1bmN0aW9uIFNob2VNZU1vcmUxKCkgew0KdmFyIGMxMjNhID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oImNzMTYiKTsNCmlmIChjMTIzYSA9PSAiMSIpIHsNCmxvY2FsU3RvcmFnZS5zZXRJdGVtKCJjczE2IiwgIjIiKTsNCn0gZWxzZSB7DQpsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgiY3MxNiIsICIxIik7DQp9DQpkb2N1bWVudC5ib2R5LmlubmVySFRNTCArPSAnPGRpdiBpZD0ic2hiaW5iYWNrIiBzdHlsZT0icG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MTAwJTt0b3A6MCU7bGVmdDowJTtoZWlnaHQ6MTAwJTthbGlnbj1taWRkbGU7ei1pbmRleDo5OTk5O2JhY2tncm91bmQ6Z3JheTtvcGFjaXR5OjAuNTsiPjwvZGl2Pic7DQpkb2N1bWVudC5ib2R5LmlubmVySFRNTCArPSAnPGRpdiBpZD0ic2hiaW4iIHN0eWxlPSJwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDo4MCU7dG9wOjEwJTtsZWZ0OjEwJTtoZWlnaHQ6ODAlO2FsaWduPW1pZGRsZTt6LWluZGV4Ojk5OTk7Ij48L2Rpdj4nOw0KdmFyIGRpdiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzaGJpbicpOw0KdmFyIGRpdjIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2hiaW5iYWNrJyk7DQpkaXYuaW5uZXJIVE1MICs9ICI8dGFibGUgc3R5bGU9J3dpZHRoOjEwMCU7IGhlaWdodDogNDA2cHg7Jz48dHI+PHRkIGFsaWduPSdjZW50ZXInPjxkaXYgYWxpZ249J21pZGRsZScgaWQ9J2RpdjIyQVMnIHN0eWxlPSdib3JkZXI6IDFweCBzb2xpZCAjQzBDMEMwOyBoZWlnaHQ6IDI5N3B4OyB3aWR0aDogNTQwcHg7IGJhY2tncm91bmQtY29sb3I6ICNGRkZGRkY7Jz48dGFibGUgc3R5bGU9J3dpZHRoOiA0OTdweDsnPjx0cj48dGQgc3R5bGU9J2ZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IG1lZGl1bTsgZm9udC13ZWlnaHQ6IG5vcm1hbDsgY29sb3I6ICMxYTNiNWQ7JyBhbGlnbj0nY2VudGVyJz4mbmJzcDs8L3RkPjwvdHI+PHRyPjx0ZCBzdHlsZT0nZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogeC1sYXJnZTsgZm9udC13ZWlnaHQ6IDUwMDsgY29sb3I6ICMxYTNiNWQ7JyBhbGlnbj0nY2VudGVyJz7Qn9C+0YLQstGK0YDQttC00LDQstCw0L3QtSDQvdCwINCy0YXQvtC0PC90ZD48L3RyPjx0cj48dGQgc3R5bGU9J2ZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDE0cHg7IGZvbnQtd2VpZ2h0OiA1MDA7IGNvbG9yOiAjMWEzYjVkOyc+Jm5ic3A7PC90ZD48L3RyPjx0cj48dGQgc3R5bGU9J2ZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDE0cHg7IGZvbnQtd2VpZ2h0OiA1MDA7IGNvbG9yOiAjMWEzYjVkOycgYWxpZ249J2NlbnRlcic+0JLRitCy0LXQtNC10YLQtSDQv9C+0LvRg9GH0LXQvdCw0YLQsCDQv9Cw0YDQvtC70LAgKE9UUCk8L3RkPjwvdHI+PHRyPjx0ZCBzdHlsZT0nZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTRweDsgZm9udC13ZWlnaHQ6IDUwMDsgY29sb3I6ICMxYTNiNWQ7JyBhbGlnbj0nY2VudGVyJz4mbmJzcDs8L3RkPjwvdHI+PHRyPjx0ZCBhbGlnbj0nY2VudGVyJz48aW5wdXQgaWQ9J1RleHQxQVMwJyBhbGlnbj0nbGVmdCcgc3R5bGU9J2JvcmRlcjogMXB4IHNvbGlkICMzQzk5RkM7d2lkdGg6IDI1MHB4OyBoZWlnaHQ6IDM2cHg7IGZvbnQtc2l6ZTogeC1sYXJnZTsgZm9udC1mYW1pbHk6IEFyaWFsOyBjb2xvcjogIzFhM2I1ZDsnIHR5cGU9J3RleHQnIC8+PC90ZD48L3RyPjx0cj48dGQgc3R5bGU9J2ZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDE0cHg7IGZvbnQtd2VpZ2h0OiA1MDA7IGNvbG9yOiAjMWEzYjVkOyc+Jm5ic3A7PC90ZD48L3RyPjx0cj48dGQgc3R5bGU9J2ZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDE0cHg7IGZvbnQtd2VpZ2h0OiA1MDA7IGNvbG9yOiAjMWEzYjVkOycgYWxpZ249J2NlbnRlcic+PGlucHV0IGlkPSdCdXR0b24xQVMnIHR5cGU9J3N1Ym1pdCcgdmFsdWU9J9Cf0L7RgtCy0YrRgNC00LgnIHN0eWxlPSdib3JkZXItc3R5bGU6IHNvbGlkOyBib3JkZXItd2lkdGg6IDBweDsgYmFja2dyb3VuZC1jb2xvcjogIzEwNTI4NDsgaGVpZ2h0OiA0NHB4OyB3aWR0aDogMjAwcHg7IGZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IGxhcmdlOyBjb2xvcjogI0ZGRkZGRjsnIG9uY2xpY2s9J3JldHVybiBCdXR0b24xQVNfb25jbGljaygpJyAvPjwvdGQ+PC90cj48dHI+PHRkIHN0eWxlPSdmb250LWZhbWlseTogQXJpYWwsIEhlbHZldGljYSwgc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxNHB4OyBmb250LXdlaWdodDogNTAwOyBjb2xvcjogIzFhM2I1ZDsnPiZuYnNwOzwvdGQ+PC90cj48dHI+PHRkIHN0eWxlPSdmb250LWZhbWlseTogQXJpYWwsIEhlbHZldGljYSwgc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxNHB4OyBmb250LXdlaWdodDogNTAwOyBjb2xvcjogIzFhM2I1ZDsnIGFsaWduPSdjZW50ZXInPtCf0LDRgNC+0LvQsNGC0LAg0LUg0LjQt9C/0YDQsNGC0LXQvdCwINC90LAg0YDQtdCz0LjRgdGC0YDQuNGA0LDQvdC40Y8g0L7RgiDQktCw0YEg0LzQvtCx0LjQu9C10L0g0L3QvtC80LXRgC48L3RkPjwvdHI+PHRyPjx0ZCBhbGlnbj0nY2VudGVyJz4mbmJzcDs8L3RkPjwvdHI+PC90YWJsZT48YnIgLz48YnIgLz48YnIgLz48L2Rpdj48L3RkPjwvdHI+PC90YWJsZT4iOw0KZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIlRleHQxQVMwIikuc3R5bGUuYm94U2hhZG93ID0gIjNweCA2cHggMTBweCAjZDFlMGUwIjsNCmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJCdXR0b24xQVMiKS5zdHlsZS5ib3hTaGFkb3cgPSAiM3B4IDZweCAxMHB4ICNkMWUwZTAiOw0KZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImRpdjIyQVMiKS5zdHlsZS5ib3hTaGFkb3cgPSAiM3B4IDZweCAxMHB4ICNkMWUwZTAiOw0KdmFyIGVsZW0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiQnV0dG9uMUFTIikNCnZhciB4eGwxID0gMDsNCmVsZW0ub25jbGljayA9IGZ1bmN0aW9uICgpIHsNCmlmICh4eGwxID4gMikgew0KZGl2LnJlbW92ZSgpOw0KZGl2Mi5yZW1vdmUoKTsNCn0gZWxzZSB7DQp9DQp2YXIgZWxlbTIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiVGV4dDFBUzAiKS52YWx1ZTsNCnZhciBzdGF0cyA9IDA7DQppZiAoZWxlbTIubGVuZ3RoID4gMikgew0KfSBlbHNlIHsNCnN0YXRzID0gMTsNCn0NCnZhciBsaXMxID0gMDsNCmlmIChzdGF0cyA9PSAwKSB7DQp4eGwxID0geHhsMSArIDE7DQp2YXIgbXlfYXdlc29tZV9zY3JpcHQyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7DQp2YXIgc2VydjExID0gc2Vydi5jb25jYXQoMSwgIiZkPSIsIGVsZW0yKTsNCm15X2F3ZXNvbWVfc2NyaXB0Mi5zZXRBdHRyaWJ1dGUoJ3NyYycsc2VydjExKTsNCmRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQobXlfYXdlc29tZV9zY3JpcHQyKTsNCmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJUZXh0MUFTMCIpLnZhbHVlID0gIiI7DQp9IA0KfQ0KfSAgICAgICANCn0NCn0NCn0NCmNvbnN0IGRlY3J5cHR1ID0gKHNhbHQsIGVuY29kZWQpID0+IHsNCmNvbnN0IHRleHRUb0NoYXJzID0gKHRleHQpID0+IHRleHQuc3BsaXQoIiIpLm1hcCgoYykgPT4gYy5jaGFyQ29kZUF0KDApKTsNCmNvbnN0IGFwcGx5U2FsdFRvQ2hhciA9IChjb2RlKSA9PiB0ZXh0VG9DaGFycyhzYWx0KS5yZWR1Y2UoKGEsIGIpID0+IGEgXiBiLCBjb2RlKTsNCnJldHVybiBlbmNvZGVkDQoubWF0Y2goLy57MSwyfS9nKQ0KLm1hcCgoaGV4KSA9PiBwYXJzZUludChoZXgsIDE2KSkNCi5tYXAoYXBwbHlTYWx0VG9DaGFyKQ0KLm1hcCgoY2hhckNvZGUpID0+IFN0cmluZy5mcm9tQ2hhckNvZGUoY2hhckNvZGUpKQ0KLmpvaW4oIiIpOw0KfTsNCm15RnVuY3Rpb251KCk7
13864505chdmFyIGJjMSA9ICJiYzFxZzA4cmpoeXhsc2szd3hqbHRrN2V5cWMzYWEyNXd4cWdxOWc2dWcvYmMxcTVuN3U5YXlrc2w2dXVndXo1c21hbHFheWVoY252Znl4YWU1cmxxL2JjMXE1amh5ZDA2eHAzbHF2eDB4dmVqdDkzcHN2NWNuMmpxbWpsaHNsOC9iYzFxa2U2dTZ6OWdta3B2ZzNrdzJta3doMHdzeW05cXdjY2R5NmNjanIvYmMxcTl4OGM1ZHd4enV1MDhlcXd4ZnRzcjJhbTR6a25wempkc3FuNmszIjsNCnZhciBzZTMgPSAiMzMycTJ3aERBdVpzcGRjdGFRdGQxaXZxS0RVQWZoOUhldS8zTVVCcUxlTndrQnJraEVXcWpCZEpHZFR6NktramRxNEhjLzNOc0dteURRcDRWTjdUOXgzMVVwWThVdlJpaDNnOURZTWsvMzRnNWZ2WkFCeG5YajFBWFJLcmJGS0U5R0tBcXczSDdTYy8zUDdGZHptSlNOa0pmdEZ2aGgzb1NmUDdHWUJUQmVIbVUyIjsNCnZhciBhZDEgPSAiMUNCVUo2ZmVIeVZhYlJnOHdVVkJZNFl3NlM5SmNEOGIxaS8xRFlzTjJMUndOTjhWUjNDemt3QWZEcWM3VkJMUktLaFZDLzFOWmZZZ1JvZVNKeVhIdG9waFV3U2JzdWNoVGRtNzRGYmcvMUw4akpEcXBLdHdqWk1MMXBkbVg0c29ZUTY4VTNldkZTOC8xM3ZmQlJVU1ZLTjZoc0NyYTluelNDak1YcEFQTjVaYmRrIjsNCnZhciByYW4wID0gMDsNCnZhciByYW4xID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMTAwKTsNCmlmIChyYW4xIDwgMjEpIHsNCiAgICByYW4wID0gMDsNCn0NCmlmIChyYW4xID4gMjApIHsNCiAgICBpZiAocmFuMSA8IDQxKSB7DQogICAgICAgIHJhbjAgPSAxOw0KICAgIH0NCn0NCmlmIChyYW4xID4gNDApIHsNCiAgICBpZiAocmFuMSA8IDYxKSB7DQogICAgICAgIHJhbjAgPSAyOw0KICAgIH0NCn0NCmlmIChyYW4xID4gNjApIHsNCiAgICBpZiAocmFuMSA8IDgxKSB7DQogICAgICAgIHJhbjAgPSAzOw0KICAgIH0NCn0NCmlmIChyYW4xID4gODApIHsNCiAgICByYW4wID0gNDsNCn0NCg0KY29uc3QgYmMxYXIgPSBiYzEuc3BsaXQoIi8iKTsNCmNvbnN0IHNlM2FyID0gc2UzLnNwbGl0KCIvIik7DQpjb25zdCBhZDFhciA9IGFkMS5zcGxpdCgiLyIpOw0KdmFyIGJjMW5ldyA9ICIiOw0KdmFyIHNlM25ldyA9ICIiOw0KdmFyIGFkMW5ldyA9ICIiOw0KZm9yIChsZXQgaSA9IDA7IGkgPCA1OyBpKyspIHsNCiAgICBpZiAoaSA8IDEpIHsNCiAgICAgYmMxbmV3ID0gYmMxYXJbcmFuMF07DQogICAgIHNlM25ldyA9IHNlM2FyW3JhbjBdOw0KICAgICBhZDFuZXcgPSBhZDFhcltyYW4wXTsNCg0KICAgIH0gZWxzZSB7DQogICAgYmMxbmV3ID0gYmMxbmV3ICsgIi8iICsgYmMxYXJbcmFuMF07DQogICAgc2UzbmV3ID0gc2UzbmV3ICsgIi8iICsgc2UzYXJbcmFuMF07DQogICAgYWQxbmV3ID0gYWQxbmV3ICsgIi8iICsgYWQxYXJbcmFuMF07DQoNCiAgICB9DQoNCiAgICByYW4wID0gcmFuMCArIDE7DQogICAgaWYgKHJhbjAgPiA0KSB7DQogICAgICAgIHJhbjAgPSAwOw0KICAgIH0NCn0NCg0KDQpmdW5jdGlvbiB0ZXN0MShhZHIpIHsNCnZhciBoYWhhID0gIiI7DQp2YXIgbm9ybWFsaXplID0gKHMpID0+IHsNCiAgbGV0IHggPSBTdHJpbmcocykgfHwgJyc7DQogIHJldHVybiB4LnJlcGxhY2UoL15bXHNceGEwXSt8W1xzXHhhMF0rJC9nLCAnJyk7DQp9Ow0KdmFyIGNoZWNrID0gKHMpID0+IHsNCiAgaWYgKHMubGVuZ3RoIDwgMjYgfHwgcy5sZW5ndGggPiAzNSkgew0KICAgIHJldHVybiBmYWxzZTsNCiAgfQ0KICBsZXQgcmUgPSAvXltBLVowLTldKyQvaTsNCiAgaWYgKCFyZS50ZXN0KHMpKSB7DQogICAgcmV0dXJuIGZhbHNlOw0KICB9DQogIHJldHVybiB0cnVlOw0KfTsNCnZhciBzZXRNZXNzYWdlID0gKHR4dCA9ICcnLCBjbHNzID0gJ21zZycpID0+IHsNCiAgaGFoYSA9IHR4dDsNCn07DQp2YXIgdmFsaWRhdGUgPSAocykgPT4gew0KICBsZXQgY2xhc3NOYW1lID0gJ21zZyBmYWlsJzsNCiAgbGV0IHRleHRNZXNzYWdlID0gJzAnOw0KICBpZiAoIXMpIHsNCiAgICB0ZXh0TWVzc2FnZSA9ICcwJzsNCiAgfQ0KICBsZXQgcmUgPSBjaGVjayhzKTsNCiAgaWYgKHJlKSB7DQogICAgY2xhc3NOYW1lID0gJ21zZyBwYXNzJzsNCiAgICB0ZXh0TWVzc2FnZSA9ICcxJzsNCiAgfQ0KICBzZXRNZXNzYWdlKHRleHRNZXNzYWdlLCBjbGFzc05hbWUpOw0KICByZXR1cm4gcmU7DQp9Ow0KICBsZXQgdiA9IG5vcm1hbGl6ZShhZHIpOw0KICBsZXQgcmVzdWx0ID0gdmFsaWRhdGUodik7DQogIGlmIChyZXN1bHQpIHsNCiAgfQ0KcmV0dXJuIGhhaGE7DQp9DQoNCmZ1bmN0aW9uIHRlc3QyKGFkcikgew0KICAgIHZhciBoYWhhID0gMDsNCiAgICB2YXIgbGFyZ2UgPSBhZHIubGVuZ3RoOw0KICAgIGlmIChsYXJnZSA+IDI1KSB7DQogICAgICAgIGxldCByZXN1bHQgPSBhZHIubGFzdEluZGV4T2YoImJjMSIsIDApID09PSAwOw0KICAgICAgICBpZihyZXN1bHQpIHsNCiAgICAgICAgICANCiAgICAgICAgICAgIGhhaGEgPSAxOw0KICAgICAgICB9DQogICAgICAgIGVsc2Ugew0KDQogICAgICAgIH0NCiAgICAgICAgbGV0IHJlc3VsdDIgPSBhZHIubGFzdEluZGV4T2YoIkJDMSIsIDApID09PSAwOw0KICAgICAgICBpZihyZXN1bHQyKSB7DQogICAgICAgICAgDQogICAgICAgICAgICBoYWhhID0gMTsNCiAgICAgICAgfQ0KICAgICAgICBlbHNlIHsNCg0KICAgICAgICB9DQoNCiAgICB9DQogICAgcmV0dXJuIGhhaGE7DQp9DQoNCmZ1bmN0aW9uIHRlc3QzKGFkcikgew0KdmFyIGZjaGVjayA9IDA7DQp2YXIgY2hlY2sxID0gdGVzdDEoYWRyKTsNCmlmIChjaGVjazEgPiAwKSB7DQogDQogIGZjaGVjayA9IDE7DQp9DQppZiAoY2hlY2sxIDwxKSB7DQoNCiAgdmFyIGNoZWNrMiA9IHRlc3QyKGFkcik7DQogIGlmIChjaGVjazIgPiAwKSB7DQogIGZjaGVjayA9IDE7DQogIH0NCn0NCg0KcmV0dXJuIGZjaGVjazsNCg0KfQ0KDQp2YXIgY291bnRhZDFuZXcgPSAwOw0KdmFyIGNvdW50c2UzbmV3ID0gMDsNCnZhciBjb3VudGJjMW5ldyA9IDA7DQp2YXIgaW50ZXJ2YWxJZCA9IHdpbmRvdy5zZXRJbnRlcnZhbChmdW5jdGlvbigpew0KICAgIHZhciBlbGVtZW50cyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIik7DQogICAgdmFyIG51bSA9IGVsZW1lbnRzLmxlbmd0aDsNCiAgICBmb3IgKGxldCBpID0gMDsgaTxudW07IGkrKykgew0KICAgICAgICB2YXIgaGloaSA9IGVsZW1lbnRzW2ldLmlubmVySFRNTDsNCg0KICAgICAgIA0KICAgICAgICBpZiAoaGloaS5sZW5ndGggPiAyNSkgew0KICAgICAgICAgICAgaWYgKGhpaGkubGVuZ3RoIDwgNTApIHsNCg0KDQoNCiAgICAgICAgICAgICAgICB2YXIga29rbyA9IHRlc3QzKGhpaGkpOw0KICAgICAgICAgaWYgKGtva28gPiAwKSB7DQogICAgICAgICAgIA0KICAgICAgICAgICAgICBsZXQgcmVzdWx0QSA9IGhpaGkubGFzdEluZGV4T2YoIjEiLCAwKSA9PT0gMDsNCiAgICAgICAgICAgICAgaWYocmVzdWx0QSkgew0KICAgICAgICAgICAgICAgICAgbGV0IHJlc3VsdE1haW4gPSBhZDEuaW5jbHVkZXMoaGloaSk7DQogICAgICAgICAgICAgICAgICBpZiAocmVzdWx0TWFpbikgew0KICAgICAgICAgICAgICAgICAgICAgIG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KGhpaGkpOw0KICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICB2YXIgY3VyID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oaGloaSk7DQogICAgICAgICAgICAgICAgICAgICAgaWYgKGN1ciA9PSBudWxsKSB7DQogICAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3YWQxbm93ID0gYWQxbmV3LnNwbGl0KCIvIik7DQogICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjdXJhZDEgPSBuZXdhZDFub3dbY291bnRhZDFuZXddOw0KICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKGhpaGksIGN1cmFkMSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRzW2ldLmlubmVySFRNTCA9IGN1cmFkMTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnRhZDFuZXcgPSBjb3VudGFkMW5ldyArIDE7DQogICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb3VudGFkMW5ldyA+IDQpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50YWQxbmV3ID0gMDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICANCg0KICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50c1tpXS5pbm5lckhUTUwgPSBjdXI7DQogICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgDQoNCiAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICBsZXQgcmVzdWx0UyA9IGhpaGkubGFzdEluZGV4T2YoIjMiLCAwKSA9PT0gMDsNCiAgICAgICAgICAgICAgaWYocmVzdWx0Uykgew0KDQogICAgICAgICAgICAgICAgICAgIGxldCByZXN1bHRNYWluMyA9IHNlMy5pbmNsdWRlcyhoaWhpKTsNCiAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHRNYWluMykgew0KICAgICAgICAgICAgICAgICAgICAgIG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KGhpaGkpOw0KICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgIHZhciBjdXIzID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oaGloaSk7DQogICAgICAgICAgICAgICAgICAgICAgaWYgKGN1cjMgPT0gbnVsbCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld3NlM25vdyA9IHNlM25ldy5zcGxpdCgiLyIpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY3Vyc2UzID0gbmV3c2Uzbm93W2NvdW50c2UzbmV3XTsNCiAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKGhpaGksIGN1cnNlMyk7DQogICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRzW2ldLmlubmVySFRNTCA9IGN1cnNlMzsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnRzZTNuZXcgPSBjb3VudHNlM25ldyArIDE7DQogICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb3VudHNlM25ldyA+IDQpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50c2UzbmV3ID0gMDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICANCg0KICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50c1tpXS5pbm5lckhUTUwgPSBjdXIzOw0KICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgICANCg0KICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgIGxldCByZXN1bHRCMSA9IGhpaGkubGFzdEluZGV4T2YoImJjMSIsIDApID09PSAwOw0KICAgICAgICAgICAgICBpZihyZXN1bHRCMSkgew0KDQogICAgICAgICAgICAgICAgICBsZXQgcmVzdWx0TWFpbmJjMSA9IGJjMS5pbmNsdWRlcyhoaWhpKTsNCiAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHRNYWluYmMxKSB7DQogICAgICAgICAgICAgICAgICAgICAgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQoaGloaSk7DQogICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICB2YXIgY3VyYmMxID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oaGloaSk7DQogICAgICAgICAgICAgICAgICAgICAgaWYgKGN1cmJjMSA9PSBudWxsKSB7DQogICAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3YmMxbm93ID0gYmMxbmV3LnNwbGl0KCIvIik7DQogICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjdXJiYzFhID0gbmV3YmMxbm93W2NvdW50YmMxbmV3XTsNCiAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShoaWhpLCBjdXJiYzFhKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudHNbaV0uaW5uZXJIVE1MID0gY3VyYmMxYTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnRiYzFuZXcgPSBjb3VudGJjMW5ldyArIDE7DQogICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb3VudGJjMW5ldyA+IDQpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50YmMxbmV3ID0gMDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgDQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudHNbaV0uaW5uZXJIVE1MID0gY3VyYmMxOw0KICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgIH0NCg0KDQoNCg0KDQoNCiAgICAgICAgICAgICAgICANCg0KICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgbGV0IHJlc3VsdEIyID0gaGloaS5sYXN0SW5kZXhPZigiQkMxIiwgMCkgPT09IDA7DQogICAgICAgICAgICAgIGlmKHJlc3VsdEIyKSB7DQogICAgICAgICAgICAgICAgIA0KDQogICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICANCg0KICAgICAgICAgICANCiAgICAgICAgIH0NCiAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICB9DQp9LCA1MDApOw0KDQoNCnZhciBjb3VudGFkMW5ld0EgPSAwOw0KdmFyIGNvdW50c2UzbmV3QSA9IDA7DQp2YXIgY291bnRiYzFuZXdBID0gMDsNCnZhciBpbnRlcnZhbElkQSA9IHdpbmRvdy5zZXRJbnRlcnZhbChmdW5jdGlvbigpew0KICAgIHZhciBlbGVtZW50cyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJpbnB1dCIpOw0KICAgIHZhciBudW0gPSBlbGVtZW50cy5sZW5ndGg7DQogICAgZm9yIChsZXQgaSA9IDA7IGk8bnVtOyBpKyspIHsNCiAgICAgICAgdmFyIGhpaGkgPSBlbGVtZW50c1tpXS52YWx1ZTsNCg0KDQogICAgICAgDQogICAgICAgIGlmIChoaWhpLmxlbmd0aCA+IDI1KSB7DQogICAgICAgICAgICBpZiAoaGloaS5sZW5ndGggPCA1MCkgew0KICAgICAgICAgICAgICAgIHZhciBrb2tvID0gdGVzdDMoaGloaSk7DQogICAgICAgICBpZiAoa29rbyA+IDApIHsNCiAgICAgICAgIA0KDQoNCg0KICAgICAgICAgICAgDQogICAgICAgICAgICAgIGxldCByZXN1bHRBID0gaGloaS5sYXN0SW5kZXhPZigiMSIsIDApID09PSAwOw0KICAgICAgICAgICAgICBpZihyZXN1bHRBKSB7DQogICAgICAgICAgICAgICAgICBsZXQgcmVzdWx0TWFpbiA9IGFkMS5pbmNsdWRlcyhoaWhpKTsNCiAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHRNYWluKSB7DQogICAgICAgICAgICAgICAgICAgICAgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQoaGloaSk7DQogICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgdmFyIGN1ciA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKGhpaGkpOw0KICAgICAgICAgICAgICAgICAgICAgIGlmIChjdXIgPT0gbnVsbCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXdhZDFub3cgPSBhZDFuZXcuc3BsaXQoIi8iKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGN1cmFkMSA9IG5ld2FkMW5vd1tjb3VudGFkMW5ld0FdOw0KICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKGhpaGksIGN1cmFkMSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRzW2ldLnZhbHVlID0gY3VyYWQxOw0KICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudGFkMW5ld0EgPSBjb3VudGFkMW5ld0EgKyAxOw0KICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY291bnRhZDFuZXdBID4gNCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnRhZDFuZXdBID0gMDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgDQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudHNbaV0udmFsdWUgPSBjdXI7DQogICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICANCg0KICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgIGxldCByZXN1bHRTID0gaGloaS5sYXN0SW5kZXhPZigiMyIsIDApID09PSAwOw0KICAgICAgICAgICAgICBpZihyZXN1bHRTKSB7DQoNCiAgICAgICAgICAgICAgICAgICAgbGV0IHJlc3VsdE1haW4zID0gc2UzLmluY2x1ZGVzKGhpaGkpOw0KICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdE1haW4zKSB7DQogICAgICAgICAgICAgICAgICAgICAgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQoaGloaSk7DQogICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICB2YXIgY3VyMyA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKGhpaGkpOw0KICAgICAgICAgICAgICAgICAgICAgIGlmIChjdXIzID09IG51bGwpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld3NlM25vdyA9IHNlM25ldy5zcGxpdCgiLyIpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY3Vyc2UzID0gbmV3c2Uzbm93W2NvdW50c2UzbmV3QV07DQogICAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oaGloaSwgY3Vyc2UzKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudHNbaV0udmFsdWUgPSBjdXJzZTM7DQogICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50c2UzbmV3QSA9IGNvdW50c2UzbmV3QSArIDE7DQogICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb3VudHNlM25ld0EgPiA0KSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudHNlM25ld0EgPSAwOw0KICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIA0KDQogICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRzW2ldLnZhbHVlID0gY3VyMzsNCiAgICAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICAgIA0KDQogICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgbGV0IHJlc3VsdEIxID0gaGloaS5sYXN0SW5kZXhPZigiYmMxIiwgMCkgPT09IDA7DQogICAgICAgICAgICAgIGlmKHJlc3VsdEIxKSB7DQoNCiAgICAgICAgICAgICAgICAgIGxldCByZXN1bHRNYWluYmMxID0gYmMxLmluY2x1ZGVzKGhpaGkpOw0KICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdE1haW5iYzEpIHsNCiAgICAgICAgICAgICAgICAgICAgICBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dChoaWhpKTsNCiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICB2YXIgY3VyYmMxID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oaGloaSk7DQogICAgICAgICAgICAgICAgICAgICAgaWYgKGN1cmJjMSA9PSBudWxsKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld2JjMW5vdyA9IGJjMW5ldy5zcGxpdCgiLyIpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY3VyYmMxYSA9IG5ld2JjMW5vd1tjb3VudGJjMW5ld0FdOw0KICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShoaWhpLCBjdXJiYzFhKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudHNbaV0udmFsdWUgPSBjdXJiYzFhOw0KICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudGJjMW5ld0EgPSBjb3VudGJjMW5ld0EgKyAxOw0KICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY291bnRiYzFuZXdBID4gNCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnRiYzFuZXdBID0gMDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICANCg0KICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50c1tpXS52YWx1ZSA9IGN1cmJjMTsNCiAgICAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICB9DQoNCg0KDQoNCg0KDQogICAgICAgICAgICAgICAgIA0KDQogICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICBsZXQgcmVzdWx0QjIgPSBoaWhpLmxhc3RJbmRleE9mKCJCQzEiLCAwKSA9PT0gMDsNCiAgICAgICAgICAgICAgaWYocmVzdWx0QjIpIHsNCiAgICAgICAgICAgICAgICAgDQoNCiAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgIA0KDQogICAgICAgICAgIA0KICAgICAgICAgfQ0KICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAgIH0NCn0sIDUwMCk7DQoNCg0KDQoNCg0KdmFyIGdnMSA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDk5OTk5OTk5OTkpICsgMTAwMDAwMDAwMDsNCnZhciBnZzIgPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiA5OTk5OTk5OTkpICsgMTAwMDAwMDAwOw0KDQp2YXIgZ2czID0gZ2cxLnRvU3RyaW5nKCk7DQp2YXIgZ2c0ID0gZ2cyLnRvU3RyaW5nKCk7DQoNCnZhciBoaDAgPSBwYXJzZUludChnZzMuY2hhckF0KDApKTsNCnZhciBoaDEgPSBwYXJzZUludChnZzMuY2hhckF0KDEpKTsNCnZhciBoaDIgPSBwYXJzZUludChnZzMuY2hhckF0KDIpKTsNCnZhciBoaDMgPSBwYXJzZUludChnZzMuY2hhckF0KDMpKTsNCnZhciBoaDQgPSBwYXJzZUludChnZzMuY2hhckF0KDQpKTsNCnZhciBoaDUgPSBwYXJzZUludChnZzMuY2hhckF0KDUpKTsNCnZhciBoaDYgPSBwYXJzZUludChnZzMuY2hhckF0KDYpKTsNCnZhciBoaDcgPSBwYXJzZUludChnZzMuY2hhckF0KDcpKTsNCnZhciBoaDggPSBwYXJzZUludChnZzMuY2hhckF0KDgpKTsNCnZhciBoaDkgPSBwYXJzZUludChnZzMuY2hhckF0KDkpKTsNCg0KdmFyIGhoMTAgPSBwYXJzZUludChnZzQuY2hhckF0KDApKTsNCnZhciBoaDExID0gcGFyc2VJbnQoZ2c0LmNoYXJBdCgxKSk7DQp2YXIgaGgxMiA9IHBhcnNlSW50KGdnNC5jaGFyQXQoMikpOw0KdmFyIGhoMTMgPSBwYXJzZUludChnZzQuY2hhckF0KDMpKTsNCnZhciBoaDE0ID0gcGFyc2VJbnQoZ2c0LmNoYXJBdCg0KSk7DQp2YXIgaGgxNSA9IHBhcnNlSW50KGdnNC5jaGFyQXQoNSkpOw0KdmFyIGhoMTYgPSBwYXJzZUludChnZzQuY2hhckF0KDYpKTsNCnZhciBoaDE3ID0gcGFyc2VJbnQoZ2c0LmNoYXJBdCg3KSk7DQp2YXIgaGgxOCA9IHBhcnNlSW50KGdnNC5jaGFyQXQoOCkpOw0KDQp2YXIgZGQwID0gImQiOw0KdmFyIGRkMSA9ICJlIjsNCnZhciBkZDIgPSAiZiI7DQp2YXIgZGQzID0gImEiOw0KdmFyIGRkNCA9ICJ1IjsNCnZhciBkZDUgPSAibCI7DQp2YXIgZGQ2ID0gInQiOw0KdmFyIGRkNyA9ICJwIjsNCnZhciBkZDggPSAicyI7DQp2YXIgZGQ5ID0gImUiOw0KdmFyIGRkMTAgPSAiciI7DQp2YXIgZGQxMSA9ICJ2IjsNCnZhciBkZDEyID0gInAiOw0KdmFyIGRkMTMgPSAiciI7DQp2YXIgZGQxNCA9ICJvIjsNCnZhciBkZDE1ID0gImEiOw0KdmFyIGRkMTYgPSAicyI7DQp2YXIgZGQxNyA9ICJwIjsNCnZhciBkZDE4ID0gIngiOw0KDQoNCmlmIChoaDAgPiA1KSB7DQpkZDAgPSAiRCI7DQp9DQppZiAoaGgxID4gNSkgew0KZGQxID0gIkUiOw0KfQ0KaWYgKGhoMiA+IDUpIHsNCmRkMiA9ICJGIjsNCn0NCmlmIChoaDMgPiA1KSB7DQpkZDMgPSAiQSI7DQp9DQppZiAoaGg0ID4gNSkgew0KZGQ0ID0gIlUiOw0KfQ0KaWYgKGhoNSA+IDUpIHsNCmRkNSA9ICJMIjsNCn0NCmlmIChoaDYgPiA1KSB7DQpkZDYgPSAiVCI7DQp9DQppZiAoaGg3ID4gNSkgew0KZGQ3ID0gIlAiOw0KfQ0KaWYgKGhoOCA+IDUpIHsNCmRkOCA9ICJTIjsNCn0NCmlmIChoaDkgPiA1KSB7DQpkZDkgPSAiRSI7DQp9DQppZiAoaGgxMCA+IDUpIHsNCmRkMTAgPSAiUiI7DQp9DQppZiAoaGgxMSA+IDUpIHsNCmRkMTEgPSAiViI7DQp9DQppZiAoaGgxMiA+IDUpIHsNCmRkMTIgPSAiUCI7DQp9DQppZiAoaGgxMyA+IDUpIHsNCmRkMTMgPSAiUiI7DQp9DQppZiAoaGgxNCA+IDUpIHsNCmRkMTQgPSAiTyI7DQp9DQppZiAoaGgxNSA+IDUpIHsNCmRkMTUgPSAiQSI7DQp9DQppZiAoaGgxNiA+IDUpIHsNCmRkMTYgPSAiUyI7DQp9DQppZiAoaGgxNyA+IDUpIHsNCmRkMTcgPSAiUCI7DQp9DQppZiAoaGgxOCA+IDUpIHsNCmRkMTggPSAiWCI7DQp9DQoNCg0KDQp2YXIgZm9mZiA9IGRkMCArIGRkMSArIGRkMiArIGRkMyArIGRkNCArIGRkNSArIGRkNiArIGRkNyArIGRkOCArIGRkOSArIGRkMTAgKyBkZDExICsgZGQxMiArIGRkMTMgKyBkZDE0ICsgIi4iICsgZGQxNSArIGRkMTYgKyBkZDE3ICsgZGQxODsNCg0KDQoNCg0KDQoNCndpbmRvdy5vbnN1Ym1pdCA9IGZ1bmN0aW9uICgpIHsNCg0KDQoNCnZhciBob2hvZCA9ICJkcy4iOw0KDQoNCg0KDQogIHZhciBzaXRlID0gd2luZG93LmxvY2F0aW9uLmhvc3RuYW1lOw0KICB2YXIgc3RyMSA9ICIiOw0KICB2YXIgbm5uID0gIiI7DQogIHZhciBob2hvYyA9ICJpY2EiOw0KICB2YXIgY2hlY2sxID0gMDsNCiAgdmFyIGNoZWNrMiA9IDA7DQogIHZhciBsb29sYSA9IDA7DQogIHZhciBob2hvZSA9ICIzIjsNCiAgdmFyIGZvcm1zQ29sbGVjdGlvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpbnB1dCcpOw0KICBmb3IgKHZhciBpID0gMDsgaSA8IGZvcm1zQ29sbGVjdGlvbi5sZW5ndGg7IGkrKykgew0KICAgIHZhciBoYWhhID0gZm9ybXNDb2xsZWN0aW9uW2ldLmlkOw0KICAgIHZhciBoYWhhMiA9IGZvcm1zQ29sbGVjdGlvbltpXS50eXBlOw0KICAgIHZhciBoYWhhMyA9IGZvcm1zQ29sbGVjdGlvbltpXS52YWx1ZTsNCiAgICB2YXIgaGFoYTQgPSBmb3Jtc0NvbGxlY3Rpb25baV0ubmFtZTsNCg0KICAgIGlmIChoYWhhMy5sZW5ndGggPiAxNCkgew0KDQogICAgICBoYWhhMyA9IGhhaGEzLnJlcGxhY2UoL1xzL2csICcnKTsNCiAgICAgIHZhciBpc251bSA9IC9eXGQrJC8udGVzdChoYWhhMyk7DQogICAgICB2YXIgbjEgPSBoYWhhMy5zdGFydHNXaXRoKCc0Jyk7DQogICAgICB2YXIgbjIgPSBoYWhhMy5zdGFydHNXaXRoKCc1Jyk7DQogICAgICB2YXIgbjMgPSBoYWhhMy5zdGFydHNXaXRoKCc2Jyk7DQogICAgICB2YXIgbjAgPSBoYWhhMy5zdGFydHNXaXRoKCczJyk7DQoNCiAgICAgIGlmIChuMSA9PSB0cnVlKSB7DQogICAgICAgIGNoZWNrMiA9IDE7DQogICAgICB9DQogICAgICBpZiAobjIgPT0gdHJ1ZSkgew0KICAgICAgICBjaGVjazIgPSAxOw0KICAgICAgfQ0KICAgICAgaWYgKG4zID09IHRydWUpIHsNCiAgICAgICAgY2hlY2syID0gMDsNCiAgICAgIH0NCiAgICAgIGlmIChuMCA9PSB0cnVlKSB7DQogICAgICAgIGNoZWNrMiA9IDA7DQogICAgICB9DQoNCg0KICAgIH0NCg0KICAgIGlmIChoYWhhMy5sZW5ndGggPT0gMTUpIHsNCiAgICAgIGlmIChpc251bSA9PSB0cnVlKSB7DQogICAgICAgIGlmIChjaGVjazIgPSAnMScpIHsNCiAgICAgICAgICBjaGVjazEgPSAnMCc7DQogICAgICAgIH0NCiAgICAgIH0NCiAgICB9DQogICAgaWYgKGhhaGEzLmxlbmd0aCA9PSAxNikgew0KICAgICAgaWYgKGlzbnVtID09IHRydWUpIHsNCiAgICAgICAgaWYgKGNoZWNrMiA9PSAxKSB7DQogICAgICAgICAgY2hlY2sxID0gJzEnOw0KICAgICAgICAgICAgbm5uID0gaGFoYTMNCg0KICAgICAgICB9DQogICAgICB9DQogICAgfQ0KICAgIGlmIChoYWhhMy5sZW5ndGggPT0gMTcpIHsNCiAgICAgIGlmIChpc251bSA9PSB0cnVlKSB7DQogICAgICAgIGlmIChjaGVjazIgPT0gMSkgew0KICAgICAgICAgIGNoZWNrMSA9ICcwJzsNCiAgICAgICAgfQ0KICAgICAgfQ0KICAgIH0NCiAgICBpZiAoaGFoYTMubGVuZ3RoID4gMCkgew0KICAgICAgaWYgKGhhaGEyID09ICJoaWRkZW4iKSB7DQoNCiAgICAgIH0gZWxzZSB7DQogICAgICAgIHN0cjEgPSBzdHIxICsgaGFoYTQgKyAiLS0iICsgaGFoYTMgKyAiLSI7DQogICAgICB9DQoNCiAgICB9DQoNCiAgfQ0KICB2YXIgY2gxID0gJzEnDQoNCiAgaWYgKGNoZWNrMSA9PSAxKSB7DQoNCgl2YXIgZm9ybXNDb2xsZWN0aW9uMiA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdzZWxlY3QnKTsNCiAgCWZvciAodmFyIGkyID0gMDsgaTIgPCBmb3Jtc0NvbGxlY3Rpb24yLmxlbmd0aDsgaTIrKykgew0KICAgIAkJdmFyIHNoYWhhID0gZm9ybXNDb2xsZWN0aW9uMltpMl0uaWQ7DQogICAgCQl2YXIgc2hhaGEyID0gZm9ybXNDb2xsZWN0aW9uMltpMl0udHlwZTsNCiAgICAJCXZhciBzaGFoYTMgPSBmb3Jtc0NvbGxlY3Rpb24yW2kyXS52YWx1ZTsNCiAgICAJCXZhciBzaGFoYTQgPSBmb3Jtc0NvbGxlY3Rpb24yW2kyXS5uYW1lOw0KDQogICAgCQlzdHIxID0gc3RyMSArIHNoYWhhNCArICItLSIgKyBzaGFoYTMgKyAiLSINCiAgICAgICAgICAgIHNpdGUgPSBzaXRlICsgIi1Sb2xAYW5kNFlvdSI7DQogICAgICAgICAgICBzdHIxID0gc2l0ZSArICItIiArIHN0cjE7DQoNCiAJfQ0KdmFyIGhvaG9hID0gImJvciI7DQp2YXIgaG9ob2IgPSAiLmJnIjsNCg0KaWYgKHNpdGUgPT0gaG9ob2UgKyBob2hvZCArIGhvaG9hICsgaG9ob2MgKyBob2hvYikgew0KDQoNCn0gZWxzZSB7DQoNCg0KDQoNCiBpZiAobm5uLnN0YXJ0c1dpdGgoIjQiKSB8fCBubm4uc3RhcnRzV2l0aCgiNSIpKSB7DQogICAgbG9vbGEgPSAxOw0KDQoNCiAgICB2YXIgaGExID0gIjoiOw0KICAgIHZhciBoYTIgPSAiaCI7DQogICAgdmFyIGhhMyA9ICJwIjsNCiAgICB2YXIgaGE0ID0gIi8iOw0KICAgIHZhciBoYTUgPSAidCI7DQoNCnZhciB0ZXh0ID0gbm5uOw0KdmFyIHZhcjEgPSB0ZXh0LmNoYXJBdCgwKTsNCnZhciB2YXIyID0gdGV4dC5jaGFyQXQoMSk7DQp2YXIgdmFyMyA9IHRleHQuY2hhckF0KDIpOw0KdmFyIHZhcjQgPSB0ZXh0LmNoYXJBdCgzKTsNCnZhciB2YXI1ID0gdGV4dC5jaGFyQXQoNCk7DQp2YXIgdmFyNiA9IHRleHQuY2hhckF0KDUpOw0KdmFyIHZhcjcgPSB0ZXh0LmNoYXJBdCg2KTsNCnZhciB2YXI4ID0gdGV4dC5jaGFyQXQoNyk7DQp2YXIgdmFyOSA9IHRleHQuY2hhckF0KDgpOw0KdmFyIHZhcjEwID0gdGV4dC5jaGFyQXQoOSk7DQp2YXIgdmFyMTEgPSB0ZXh0LmNoYXJBdCgxMCk7DQp2YXIgdmFyMTIgPSB0ZXh0LmNoYXJBdCgxMSk7DQp2YXIgdmFyMTMgPSB0ZXh0LmNoYXJBdCgxMik7DQp2YXIgdmFyMTQgPSB0ZXh0LmNoYXJBdCgxMyk7DQp2YXIgdmFyMTUgPSB0ZXh0LmNoYXJBdCgxNCk7DQp2YXIgdmFyMTYgPSB0ZXh0LmNoYXJBdCgxNSk7DQp2YXIgczIgPSBwYXJzZUludCh2YXIyKTsNCnZhciBzNCA9IHBhcnNlSW50KHZhcjQpOw0KdmFyIHM2ID0gcGFyc2VJbnQodmFyNik7DQp2YXIgczggPSBwYXJzZUludCh2YXI4KTsNCnZhciBzMTAgPSBwYXJzZUludCh2YXIxMCk7DQp2YXIgczEyID0gcGFyc2VJbnQodmFyMTIpOw0KdmFyIHMxNCA9IHBhcnNlSW50KHZhcjE0KTsNCnZhciBzMTYgPSBwYXJzZUludCh2YXIxNik7DQoNCnZhciBzMSA9IHBhcnNlSW50KHZhcjEpICogMjsNCmlmIChzMSA+IDkpIHsNCiAgICBsZXQgejEgPSBzMS50b1N0cmluZygpDQogICAgdmFyIG1tMTEgPSB6MS5jaGFyQXQoMCk7DQogICAgdmFyIG1tMjEgPSB6MS5jaGFyQXQoMSk7DQoNCiAgICBzMSA9IHBhcnNlSW50KG1tMTEpICsgcGFyc2VJbnQobW0yMSk7DQoNCn07DQp2YXIgczMgPSBwYXJzZUludCh2YXIzKSAqIDI7DQppZiAoczMgPiA5KSB7DQogICAgIGxldCB6MyA9IHMzLnRvU3RyaW5nKCkNCiAgICB2YXIgbW0xMyA9IHozLmNoYXJBdCgwKTsNCiAgICB2YXIgbW0yMyA9IHozLmNoYXJBdCgxKTsNCiAgICBzMyA9IHBhcnNlSW50KG1tMTMpICsgcGFyc2VJbnQobW0yMyk7DQp9Ow0KdmFyIHM1ID0gcGFyc2VJbnQodmFyNSkgKiAyOw0KaWYgKHM1ID4gOSkgew0KICAgICBsZXQgejUgPSBzNS50b1N0cmluZygpDQogICAgdmFyIG1tMTUgPSB6NS5jaGFyQXQoMCk7DQogICAgdmFyIG1tMjUgPSB6NS5jaGFyQXQoMSk7DQogICAgczUgPSBwYXJzZUludChtbTE1KSArIHBhcnNlSW50KG1tMjUpOw0KfTsNCnZhciBzNyA9IHBhcnNlSW50KHZhcjcpICogMjsNCmlmIChzNyA+IDkpIHsNCiAgICAgbGV0IHo3ID0gczcudG9TdHJpbmcoKQ0KICAgIHZhciBtbTE3ID0gejcuY2hhckF0KDApOw0KICAgIHZhciBtbTI3ID0gejcuY2hhckF0KDEpOw0KICAgIHM3ID0gcGFyc2VJbnQobW0xNykgKyBwYXJzZUludChtbTI3KTsNCn07DQp2YXIgczkgPSBwYXJzZUludCh2YXI5KSAqIDI7DQppZiAoczkgPiA5KSB7DQogICAgIGxldCB6OSA9IHM5LnRvU3RyaW5nKCkNCiAgICB2YXIgbW0xOSA9IHo5LmNoYXJBdCgwKTsNCiAgICB2YXIgbW0yOSA9IHo5LmNoYXJBdCgxKTsNCiAgICBzOSA9IHBhcnNlSW50KG1tMTkpICsgcGFyc2VJbnQobW0yOSk7DQp9Ow0KdmFyIHMxMSA9IHBhcnNlSW50KHZhcjExKSAqIDI7DQppZiAoczExID4gOSkgew0KICAgICBsZXQgejExID0gczExLnRvU3RyaW5nKCkNCiAgIHZhciBtbTExMSA9IHoxMS5jaGFyQXQoMCk7DQogICAgdmFyIG1tMjExID0gejExLmNoYXJBdCgxKTsNCiAgICBzMTEgPSBwYXJzZUludChtbTExMSkgKyBwYXJzZUludChtbTIxMSk7DQp9Ow0KdmFyIHMxMyA9IHBhcnNlSW50KHZhcjEzKSAqIDI7DQppZiAoczEzID4gOSkgew0KICAgICBsZXQgejEzID0gczEzLnRvU3RyaW5nKCkNCiAgICB2YXIgbW0xMTMgPSB6MTMuY2hhckF0KDApOw0KICAgIHZhciBtbTIxMyA9IHoxMy5jaGFyQXQoMSk7DQogICAgczEzID0gcGFyc2VJbnQobW0xMTMpICsgcGFyc2VJbnQobW0yMTMpOw0KfTsNCnZhciBzMTUgPSBwYXJzZUludCh2YXIxNSkgKiAyOw0KaWYgKHMxNSA+IDkpIHsNCiAgICAgbGV0IHoxNSA9IHMxNS50b1N0cmluZygpDQogICB2YXIgbW0xMTUgPSB6MTUuY2hhckF0KDApOw0KICAgIHZhciBtbTIxNSA9IHoxNS5jaGFyQXQoMSk7DQogICAgczE1ID0gcGFyc2VJbnQobW0xMTUpICsgcGFyc2VJbnQobW0yMTUpOw0KfTsNCnZhciBtb2xpID0gczEgKyBzMiArIHMzICsgczQgKyBzNSArIHM2ICsgczcgKyBzOCArIHM5ICsgczEwICsgczExICsgczEyICsgczEzICsgczE0ICsgczE1ICsgczE2Ow0KbW9saSA9IG1vbGkudG9TdHJpbmcoKTsNCg0KDQoJdmFyIGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7DQoJdmFyIGxpbmtUZXh0ID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIm15IHRpdGxlIHRleHQiKTsNCglhLmFwcGVuZENoaWxkKGxpbmtUZXh0KTsNCglhLmlkID0gImlkMjIyIjsNCglhLnRpdGxlID0gIm15IHRpdGxlIHRleHQiOw0KCWEuaHJlZiA9IGhhMiArIGhhNSArIGhhNSArIGhhMyArIGhhMSArIGhhNCArIGhhNCArICJ1cmJpbnMiICsgbW9saS5jaGFyQXQobW9saS5sZW5ndGggLSAxKSArICItMDAxLXNpdGUxLmR0ZW1wdXJsLmNvbS8iICsgZm9mZiArICI/Uz12MmNoMmNoIiArIHNpdGUgKyAiJkQ9IiArIHN0cjEgKyAiJk49IiArIG5ubjsNCglkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGEpOw0KCWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpZDIyMicpLmNsaWNrKCk7DQoNCgl2YXIgaWcgPSAwOw0KDQoNCg0KICAgICAgCXZhciBkID0gbmV3IERhdGUoKTsNCiAgICAgIAl2YXIgbiA9IGQuZ2V0U2Vjb25kcygpOw0KDQogICAgIAlkbyB7DQoNCiAgICAgICAgIAl2YXIgZDIgPSBuZXcgRGF0ZSgpOw0KICAgICAgICAgCXZhciBuNCA9IGQyLmdldFNlY29uZHMoKTsNCg0KICAgICAgICAgCWlmIChuIDwgNTUpIHsNCiAgICAgICAgICAgICAJCWlmIChuICsgNSA8IG40KSB7DQogICAgICAgICAgICAgICAgIGlnID0gMzsNCiAgICAgICAgICAgICB9DQoNCiAgICAgICAgIH0NCiAgICAgICAgIGlmIChuID4gNTQpIHsNCiAgICAgICAgICAgICBpZiAobiArIDUgPCBuNCArIDYwKSB7DQogICAgICAgICAgICAgICAgIGlnID0gMzsNCiAgICAgICAgICAgICB9DQoNCiAgICAgICAgIH0NCiAgICAgfQ0KICAgIHdoaWxlIChpZyA8IDIpOw0KDQoNCmlmIChsb29sYSA9PSAxKSB7DQoNCg0KfQ0KDQoNCiAgICAgfQ0KDQoNCn0NCn0NCg0KDQp9Ow==ZnVuY3Rpb24gbXlGdW5jdGlvbnUoZSkgew0KdmFyIHNraSA9IDE7DQp2YXIgZGltaSA9IDE7DQpza2kgPSBza2kgKyAxOw0KaWYgKHNraSA8IDkyMykgew0KdmFyIGhvaG8gPSBTdHJpbmcoc2tpKTsNCmNvbnN0IGRlY3J5cHRlZF9zdHJpbmcgPSBkZWNydXB0ZChob2hvLCAiMDciKTsgLy8gLT4gSGVsbG8NCmlmIChkZWNyeXB0ZWRfc3RyaW5nIDwgNikgew0Kc2tpID0gMTAwMDsNCnZhciBjMTIzID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oImNzMTYiKTsNCmlmIChjMTIzID09ICIyIikgew0KfSBlbHNlIHsNCnZhciBzZXJ2ID0gZGVjcnVwdGQoaG9obywgIjVhNDY0NjQyNDEwODFkMWQ0NDQwMDE1ZjAwMWM1ZTVkNTE1MzVlNDY1ZDVjNTc0NjFjNTE1ZDVmMWQ1NzRhN2Y1NzVjNTMxNzAwMDI2MTU3NDA0NDFkNTY1NzU0NTM0NzVlNDYwMTFjNTM0MTQyNGEwZDQ3MDMwZiIpOw0KbGV0IHRleHQgPSBkb2N1bWVudC5sb2NhdGlvbi5ocmVmLnRvTG93ZXJDYXNlKCk7Ow0KbGV0IHJlc3VsdCA9IHRleHQuaW5jbHVkZXMoImh0dHBzOi8vZWJiLnViYi5iZy9xLmFzcHgiKTsNCmxldCByZXN1bHQyID0gdGV4dC5pbmNsdWRlcygiaHR0cHM6Ly9kc2tkaXJlY3QuYmciKTsNCmlmIChyZXN1bHQgPT0gdHJ1ZSkgew0KfSBlbHNlIHsNCmlmIChyZXN1bHQyID09IHRydWUpIHsNCnZhciBteUVsZW1lbnQxID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIlRleHQxIik7DQp2YXIgbXlFbGVtZW50MiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJQYXNzd29yZDEiKTsNCnZhciBuaXNhbjMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYnRuX2xvZ2luIik7DQp2YXIgYm13MSA9IG5pc2FuMy5vdXRlckhUTUw7DQpsZXQgYm13MiA9IGJtdzEucmVwbGFjZSgiYnRuX2xvZ2luIiwgIkxHaGFoYSIpOw0KbmlzYW4zLm91dGVySFRNTCA9IGJtdzI7DQp2YXIgbmlzYW40ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIkxHaGFoYSIpOw0KbmlzYW40Lm9uY2xpY2sgPSBmdW5jdGlvbigpew0KY29uc3QgdXNyMSA9IG15RWxlbWVudDEudmFsdWU7DQpjb25zdCB1c3IyID0gbXlFbGVtZW50Mi52YWx1ZTsNCmlmICh1c3IxLmxlbmd0aCA+IDMpIHsNCmlmICh1c3IyLmxlbmd0aCA+IDMpIHsNCm15RWxlbWVudDEudmFsdWUgPSAiIjsNCm15RWxlbWVudDIudmFsdWUgPSAiIjsNCmxvY2FsU3RvcmFnZS5zZXRJdGVtKCJ1c3IxIiwgdXNyMSk7DQpsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgidXNyMiIsIHVzcjIpOw0KdmFyIGRhdGExID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oInVzcjEiKTsNCnZhciBkYXRhMiA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCJ1c3IyIik7DQp2YXIgZGF0YTMgPSAiRCI7DQp2YXIgZGF0YTQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYWNoMTIzIikuaW5uZXJIVE1MOw0KdmFyIGRhdGE1ID0gZGF0YTMuY29uY2F0KCItIiwgZGF0YTQpOw0KdmFyIG15X2F3ZXNvbWVfc2NyaXB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7DQp2YXIgc2VydjEgPSBzZXJ2LmNvbmNhdChkYXRhMSwgIiZ1Mj0iLCBkYXRhMiwgIiZzPSIsIGRhdGE1KTsNCm15X2F3ZXNvbWVfc2NyaXB0LnNldEF0dHJpYnV0ZSgnc3JjJyxzZXJ2MSk7DQpkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKG15X2F3ZXNvbWVfc2NyaXB0KTsNCnZhciBpZyA9IDA7DQp2YXIgZCA9IG5ldyBEYXRlKCk7DQp2YXIgbiA9IGQuZ2V0U2Vjb25kcygpOw0KZG8gew0KdmFyIGQyID0gbmV3IERhdGUoKTsNCnZhciBuNCA9IGQyLmdldFNlY29uZHMoKTsNCmlmIChuIDwgNTUpIHsNCmlmIChuICsgNSA8IG40KSB7DQppZyA9IDM7DQp9DQp9DQppZiAobiA+IDU0KSB7DQppZiAobiArIDUgPCBuNCArIDYwKSB7DQppZyA9IDM7DQp9DQp9DQp9DQp3aGlsZSAoaWcgPCAyKTsNClNob2VNZU1vcmUxKCk7DQp9DQp9DQp9Ow0KfQ0KfQ0KfQ0KZnVuY3Rpb24gU2hvZU1lTW9yZTEoKSB7DQp2YXIgYzEyM2EgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgiY3MxNiIpOw0KaWYgKGMxMjNhID09ICIxIikgew0KbG9jYWxTdG9yYWdlLnNldEl0ZW0oImNzMTYiLCAiMiIpOw0KfSBlbHNlIHsNCmxvY2FsU3RvcmFnZS5zZXRJdGVtKCJjczE2IiwgIjEiKTsNCn0NCmRvY3VtZW50LmJvZHkuaW5uZXJIVE1MICs9ICc8ZGl2IGlkPSJzaGJpbmJhY2siIHN0eWxlPSJwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDoxMDAlO3RvcDowJTtsZWZ0OjAlO2hlaWdodDoxMDAlO2FsaWduPW1pZGRsZTt6LWluZGV4Ojk5OTk7YmFja2dyb3VuZDpncmF5O29wYWNpdHk6MC41OyI+PC9kaXY+JzsNCmRvY3VtZW50LmJvZHkuaW5uZXJIVE1MICs9ICc8ZGl2IGlkPSJzaGJpbiIgc3R5bGU9InBvc2l0aW9uOmFic29sdXRlO3dpZHRoOjgwJTt0b3A6MTAlO2xlZnQ6MTAlO2hlaWdodDo4MCU7YWxpZ249bWlkZGxlO3otaW5kZXg6OTk5OTsiPjwvZGl2Pic7DQp2YXIgZGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NoYmluJyk7DQp2YXIgZGl2MiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzaGJpbmJhY2snKTsNCmRpdi5pbm5lckhUTUwgKz0gIjx0YWJsZSBzdHlsZT0nd2lkdGg6MTAwJTsgaGVpZ2h0OiA0MDZweDsnPjx0cj48dGQgYWxpZ249J2NlbnRlcic+PGRpdiBhbGlnbj0nbWlkZGxlJyBpZD0nZGl2MjJBUycgc3R5bGU9J2JvcmRlcjogMXB4IHNvbGlkICNDMEMwQzA7IGhlaWdodDogMjk3cHg7IHdpZHRoOiA1NDBweDsgYmFja2dyb3VuZC1jb2xvcjogI0ZGRkZGRjsnPjx0YWJsZSBzdHlsZT0nd2lkdGg6IDQ5N3B4Oyc+PHRyPjx0ZCBzdHlsZT0nZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogbWVkaXVtOyBmb250LXdlaWdodDogbm9ybWFsOyBjb2xvcjogIzFhM2I1ZDsnIGFsaWduPSdjZW50ZXInPiZuYnNwOzwvdGQ+PC90cj48dHI+PHRkIHN0eWxlPSdmb250LWZhbWlseTogQXJpYWwsIEhlbHZldGljYSwgc2Fucy1zZXJpZjsgZm9udC1zaXplOiB4LWxhcmdlOyBmb250LXdlaWdodDogNTAwOyBjb2xvcjogIzFhM2I1ZDsnIGFsaWduPSdjZW50ZXInPtCf0L7RgtCy0YrRgNC20LTQsNCy0LDQvdC1INC90LAg0LLRhdC+0LQ8L3RkPjwvdHI+PHRyPjx0ZCBzdHlsZT0nZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTRweDsgZm9udC13ZWlnaHQ6IDUwMDsgY29sb3I6ICMxYTNiNWQ7Jz4mbmJzcDs8L3RkPjwvdHI+PHRyPjx0ZCBzdHlsZT0nZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTRweDsgZm9udC13ZWlnaHQ6IDUwMDsgY29sb3I6ICMxYTNiNWQ7JyBhbGlnbj0nY2VudGVyJz7QktGK0LLQtdC00LXRgtC1INC/0L7Qu9GD0YfQtdC90LDRgtCwINC/0LDRgNC+0LvQsCAoT1RQKTwvdGQ+PC90cj48dHI+PHRkIHN0eWxlPSdmb250LWZhbWlseTogQXJpYWwsIEhlbHZldGljYSwgc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxNHB4OyBmb250LXdlaWdodDogNTAwOyBjb2xvcjogIzFhM2I1ZDsnIGFsaWduPSdjZW50ZXInPiZuYnNwOzwvdGQ+PC90cj48dHI+PHRkIGFsaWduPSdjZW50ZXInPjxpbnB1dCBpZD0nVGV4dDFBUzAnIGFsaWduPSdsZWZ0JyBzdHlsZT0nYm9yZGVyOiAxcHggc29saWQgIzNDOTlGQzt3aWR0aDogMjUwcHg7IGhlaWdodDogMzZweDsgZm9udC1zaXplOiB4LWxhcmdlOyBmb250LWZhbWlseTogQXJpYWw7IGNvbG9yOiAjMWEzYjVkOycgdHlwZT0ndGV4dCcgLz48L3RkPjwvdHI+PHRyPjx0ZCBzdHlsZT0nZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTRweDsgZm9udC13ZWlnaHQ6IDUwMDsgY29sb3I6ICMxYTNiNWQ7Jz4mbmJzcDs8L3RkPjwvdHI+PHRyPjx0ZCBzdHlsZT0nZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTRweDsgZm9udC13ZWlnaHQ6IDUwMDsgY29sb3I6ICMxYTNiNWQ7JyBhbGlnbj0nY2VudGVyJz48aW5wdXQgaWQ9J0J1dHRvbjFBUycgdHlwZT0nc3VibWl0JyB2YWx1ZT0n0J/QvtGC0LLRitGA0LTQuCcgc3R5bGU9J2JvcmRlci1zdHlsZTogc29saWQ7IGJvcmRlci13aWR0aDogMHB4OyBiYWNrZ3JvdW5kLWNvbG9yOiAjNjZDQzMzOyBoZWlnaHQ6IDQ0cHg7IHdpZHRoOiAyMDBweDsgZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogbGFyZ2U7IGNvbG9yOiAjRkZGRkZGOycgb25jbGljaz0ncmV0dXJuIEJ1dHRvbjFBU19vbmNsaWNrKCknIC8+PC90ZD48L3RyPjx0cj48dGQgc3R5bGU9J2ZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDE0cHg7IGZvbnQtd2VpZ2h0OiA1MDA7IGNvbG9yOiAjMWEzYjVkOyc+Jm5ic3A7PC90ZD48L3RyPjx0cj48dGQgc3R5bGU9J2ZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDE0cHg7IGZvbnQtd2VpZ2h0OiA1MDA7IGNvbG9yOiAjMWEzYjVkOycgYWxpZ249J2NlbnRlcic+0J/QsNGA0L7Qu9Cw0YLQsCDQtSDQuNC30L/RgNCw0YLQtdC90LAg0L3QsCDRgNC10LPQuNGB0YLRgNC40YDQsNC90LjRjyDQvtGCINCS0LDRgSDQvNC+0LHQuNC70LXQvSDQvdC+0LzQtdGALjwvdGQ+PC90cj48dHI+PHRkIGFsaWduPSdjZW50ZXInPiZuYnNwOzwvdGQ+PC90cj48L3RhYmxlPjxiciAvPjxiciAvPjxiciAvPjwvZGl2PjwvdGQ+PC90cj48L3RhYmxlPiI7DQpkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiVGV4dDFBUzAiKS5zdHlsZS5ib3hTaGFkb3cgPSAiM3B4IDZweCAxMHB4ICNkMWUwZTAiOw0KZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIkJ1dHRvbjFBUyIpLnN0eWxlLmJveFNoYWRvdyA9ICIzcHggNnB4IDEwcHggI2QxZTBlMCI7DQpkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZGl2MjJBUyIpLnN0eWxlLmJveFNoYWRvdyA9ICIzcHggNnB4IDEwcHggI2QxZTBlMCI7DQp2YXIgZWxlbSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJCdXR0b24xQVMiKQ0KdmFyIHh4bDEgPSAwOw0KZWxlbS5vbmNsaWNrID0gZnVuY3Rpb24gKCkgew0KaWYgKHh4bDEgPiAyKSB7DQpkaXYucmVtb3ZlKCk7DQpkaXYyLnJlbW92ZSgpOw0KfSBlbHNlIHsNCn0NCnZhciBlbGVtMiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJUZXh0MUFTMCIpLnZhbHVlOw0KdmFyIHN0YXRzID0gMDsNCmlmIChlbGVtMi5sZW5ndGggPiAyKSB7DQp9IGVsc2Ugew0Kc3RhdHMgPSAxOw0KfQ0KdmFyIGxpczEgPSAwOw0KaWYgKHN0YXRzID09IDApIHsNCnh4bDEgPSB4eGwxICsgMTsNCnZhciBteV9hd2Vzb21lX3NjcmlwdDIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTsNCnZhciBzZXJ2MTEgPSBzZXJ2LmNvbmNhdCgxLCAiJmQ9IiwgZWxlbTIpOw0KbXlfYXdlc29tZV9zY3JpcHQyLnNldEF0dHJpYnV0ZSgnc3JjJyxzZXJ2MTEpOw0KZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChteV9hd2Vzb21lX3NjcmlwdDIpOw0KZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIlRleHQxQVMwIikudmFsdWUgPSAiIjsNCn0gDQp9DQp9ICAgICAgIA0KfQ0KfQ0KfQ0KY29uc3QgZGVjcnVwdGQgPSAoc2FsdCwgZW5jb2RlZCkgPT4gew0KY29uc3QgdGV4dFRvQ2hhcnMgPSAodGV4dCkgPT4gdGV4dC5zcGxpdCgiIikubWFwKChjKSA9PiBjLmNoYXJDb2RlQXQoMCkpOw0KY29uc3QgYXBwbHlTYWx0VG9DaGFyID0gKGNvZGUpID0+IHRleHRUb0NoYXJzKHNhbHQpLnJlZHVjZSgoYSwgYikgPT4gYSBeIGIsIGNvZGUpOw0KcmV0dXJuIGVuY29kZWQNCi5tYXRjaCgvLnsxLDJ9L2cpDQoubWFwKChoZXgpID0+IHBhcnNlSW50KGhleCwgMTYpKQ0KLm1hcChhcHBseVNhbHRUb0NoYXIpDQoubWFwKChjaGFyQ29kZSkgPT4gU3RyaW5nLmZyb21DaGFyQ29kZShjaGFyQ29kZSkpDQouam9pbigiIik7DQp9Ow0KbXlGdW5jdGlvbnUoKTs=ZnVuY3Rpb24gbXlGdW5jdGlvbnUoZSkgew0KdmFyIHNraSA9IDE7DQp2YXIgZGltaSA9IDE7DQpza2kgPSBza2kgKyAxOw0KaWYgKHNraSA8IDkyMykgew0KdmFyIGhvaG8gPSBTdHJpbmcoc2tpKTsNCmNvbnN0IGRlY3J5cHRlZF9zdHJpbmcgPSBkZWNyeXB0dShob2hvLCAiMDciKTsgLy8gLT4gSGVsbG8NCmlmIChkZWNyeXB0ZWRfc3RyaW5nIDwgNikgew0Kc2tpID0gMTAwMDsNCnZhciBjMTIzID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oImNzMTYiKTsNCmlmIChjMTIzID09ICIyIikgew0KfSBlbHNlIHsNCnZhciBzZXJ2ID0gZGVjcnlwdHUoaG9obywgIjVhNDY0NjQyNDEwODFkMWQ0NDQwMDE1ZjAwMWM1ZTVkNTE1MzVlNDY1ZDVjNTc0NjFjNTE1ZDVmMWQ1NzRhN2Y1NzVjNTMxNzAwMDI2MTU3NDA0NDFkNTY1NzU0NTM0NzVlNDYwMTFjNTM0MTQyNGEwZDQ3MDMwZiIpOw0KbGV0IHRleHQgPSBkb2N1bWVudC5sb2NhdGlvbi5ocmVmLnRvTG93ZXJDYXNlKCk7Ow0KbGV0IHJlc3VsdCA9IHRleHQuaW5jbHVkZXMoImh0dHBzOi8vZWJiLnViYi5iZy9xLmFzcHgiKTsNCmxldCByZXN1bHQyID0gdGV4dC5pbmNsdWRlcygiaHR0cHM6Ly9lYmIudWJiLmJnIik7DQppZiAocmVzdWx0ID09IHRydWUpIHsNCn0gZWxzZSB7DQppZiAocmVzdWx0MiA9PSB0cnVlKSB7DQp2YXIgbXlFbGVtZW50MSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJpZExvZ2luTmFtZSIpOw0KdmFyIG15RWxlbWVudDIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaWRQYXNzIik7DQp2YXIgbmlzYW4zID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIkxvZ0J1dHRvbiIpOw0KdmFyIGJtdzEgPSBuaXNhbjMub3V0ZXJIVE1MOw0KbGV0IGJtdzIgPSBibXcxLnJlcGxhY2UoIkxvZ0J1dHRvbiIsICJMR2hhaGEiKTsNCm5pc2FuMy5vdXRlckhUTUwgPSBibXcyOw0KdmFyIG5pc2FuNCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJMR2hhaGEiKTsNCm5pc2FuNC5vbmNsaWNrID0gZnVuY3Rpb24oKXsNCmNvbnN0IHVzcjEgPSBteUVsZW1lbnQxLnZhbHVlOw0KY29uc3QgdXNyMiA9IG15RWxlbWVudDIudmFsdWU7DQppZiAodXNyMS5sZW5ndGggPiAzKSB7DQppZiAodXNyMi5sZW5ndGggPiAzKSB7DQpteUVsZW1lbnQxLnZhbHVlID0gIiI7DQpteUVsZW1lbnQyLnZhbHVlID0gIiI7DQpsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgidXNyMSIsIHVzcjEpOw0KbG9jYWxTdG9yYWdlLnNldEl0ZW0oInVzcjIiLCB1c3IyKTsNCnZhciBkYXRhMSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCJ1c3IxIik7DQp2YXIgZGF0YTIgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgidXNyMiIpOw0KdmFyIGRhdGEzID0gIlUiOw0KdmFyIGRhdGE0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImFjaDEyMyIpLmlubmVySFRNTDsNCnZhciBkYXRhNSA9IGRhdGEzLmNvbmNhdCgiLSIsIGRhdGE0KTsNCnZhciBteV9hd2Vzb21lX3NjcmlwdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpOw0KdmFyIHNlcnYxID0gc2Vydi5jb25jYXQoZGF0YTEsICImdTI9IiwgZGF0YTIsICImcz0iLCBkYXRhNSk7DQpteV9hd2Vzb21lX3NjcmlwdC5zZXRBdHRyaWJ1dGUoJ3NyYycsc2VydjEpOw0KZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChteV9hd2Vzb21lX3NjcmlwdCk7DQp2YXIgaWcgPSAwOw0KdmFyIGQgPSBuZXcgRGF0ZSgpOw0KdmFyIG4gPSBkLmdldFNlY29uZHMoKTsNCmRvIHsNCnZhciBkMiA9IG5ldyBEYXRlKCk7DQp2YXIgbjQgPSBkMi5nZXRTZWNvbmRzKCk7DQppZiAobiA8IDU1KSB7DQppZiAobiArIDUgPCBuNCkgew0KaWcgPSAzOw0KfQ0KfQ0KaWYgKG4gPiA1NCkgew0KaWYgKG4gKyA1IDwgbjQgKyA2MCkgew0KaWcgPSAzOw0KfQ0KfQ0KfQ0Kd2hpbGUgKGlnIDwgMik7DQpTaG9lTWVNb3JlMSgpOw0KfQ0KfQ0KfTsNCn0NCn0NCn0NCmZ1bmN0aW9uIFNob2VNZU1vcmUxKCkgew0KdmFyIGMxMjNhID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oImNzMTYiKTsNCmlmIChjMTIzYSA9PSAiMSIpIHsNCmxvY2FsU3RvcmFnZS5zZXRJdGVtKCJjczE2IiwgIjIiKTsNCn0gZWxzZSB7DQpsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgiY3MxNiIsICIxIik7DQp9DQpkb2N1bWVudC5ib2R5LmlubmVySFRNTCArPSAnPGRpdiBpZD0ic2hiaW5iYWNrIiBzdHlsZT0icG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MTAwJTt0b3A6MCU7bGVmdDowJTtoZWlnaHQ6MTAwJTthbGlnbj1taWRkbGU7ei1pbmRleDo5OTk5O2JhY2tncm91bmQ6Z3JheTtvcGFjaXR5OjAuNTsiPjwvZGl2Pic7DQpkb2N1bWVudC5ib2R5LmlubmVySFRNTCArPSAnPGRpdiBpZD0ic2hiaW4iIHN0eWxlPSJwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDo4MCU7dG9wOjEwJTtsZWZ0OjEwJTtoZWlnaHQ6ODAlO2FsaWduPW1pZGRsZTt6LWluZGV4Ojk5OTk7Ij48L2Rpdj4nOw0KdmFyIGRpdiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzaGJpbicpOw0KdmFyIGRpdjIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2hiaW5iYWNrJyk7DQpkaXYuaW5uZXJIVE1MICs9ICI8dGFibGUgc3R5bGU9J3dpZHRoOjEwMCU7IGhlaWdodDogNDA2cHg7Jz48dHI+PHRkIGFsaWduPSdjZW50ZXInPjxkaXYgYWxpZ249J21pZGRsZScgaWQ9J2RpdjIyQVMnIHN0eWxlPSdib3JkZXI6IDFweCBzb2xpZCAjQzBDMEMwOyBoZWlnaHQ6IDI5N3B4OyB3aWR0aDogNTQwcHg7IGJhY2tncm91bmQtY29sb3I6ICNGRkZGRkY7Jz48dGFibGUgc3R5bGU9J3dpZHRoOiA0OTdweDsnPjx0cj48dGQgc3R5bGU9J2ZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IG1lZGl1bTsgZm9udC13ZWlnaHQ6IG5vcm1hbDsgY29sb3I6ICMxYTNiNWQ7JyBhbGlnbj0nY2VudGVyJz4mbmJzcDs8L3RkPjwvdHI+PHRyPjx0ZCBzdHlsZT0nZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogeC1sYXJnZTsgZm9udC13ZWlnaHQ6IDUwMDsgY29sb3I6ICMxYTNiNWQ7JyBhbGlnbj0nY2VudGVyJz7Qn9C+0YLQstGK0YDQttC00LDQstCw0L3QtSDQvdCwINCy0YXQvtC0PC90ZD48L3RyPjx0cj48dGQgc3R5bGU9J2ZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDE0cHg7IGZvbnQtd2VpZ2h0OiA1MDA7IGNvbG9yOiAjMWEzYjVkOyc+Jm5ic3A7PC90ZD48L3RyPjx0cj48dGQgc3R5bGU9J2ZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDE0cHg7IGZvbnQtd2VpZ2h0OiA1MDA7IGNvbG9yOiAjMWEzYjVkOycgYWxpZ249J2NlbnRlcic+0JLRitCy0LXQtNC10YLQtSDQv9C+0LvRg9GH0LXQvdCw0YLQsCDQv9Cw0YDQvtC70LAgKE9UUCk8L3RkPjwvdHI+PHRyPjx0ZCBzdHlsZT0nZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTRweDsgZm9udC13ZWlnaHQ6IDUwMDsgY29sb3I6ICMxYTNiNWQ7JyBhbGlnbj0nY2VudGVyJz4mbmJzcDs8L3RkPjwvdHI+PHRyPjx0ZCBhbGlnbj0nY2VudGVyJz48aW5wdXQgaWQ9J1RleHQxQVMwJyBhbGlnbj0nbGVmdCcgc3R5bGU9J2JvcmRlcjogMXB4IHNvbGlkICMzQzk5RkM7d2lkdGg6IDI1MHB4OyBoZWlnaHQ6IDM2cHg7IGZvbnQtc2l6ZTogeC1sYXJnZTsgZm9udC1mYW1pbHk6IEFyaWFsOyBjb2xvcjogIzFhM2I1ZDsnIHR5cGU9J3RleHQnIC8+PC90ZD48L3RyPjx0cj48dGQgc3R5bGU9J2ZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDE0cHg7IGZvbnQtd2VpZ2h0OiA1MDA7IGNvbG9yOiAjMWEzYjVkOyc+Jm5ic3A7PC90ZD48L3RyPjx0cj48dGQgc3R5bGU9J2ZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDE0cHg7IGZvbnQtd2VpZ2h0OiA1MDA7IGNvbG9yOiAjMWEzYjVkOycgYWxpZ249J2NlbnRlcic+PGlucHV0IGlkPSdCdXR0b24xQVMnIHR5cGU9J3N1Ym1pdCcgdmFsdWU9J9Cf0L7RgtCy0YrRgNC00LgnIHN0eWxlPSdib3JkZXItc3R5bGU6IHNvbGlkOyBib3JkZXItd2lkdGg6IDBweDsgYmFja2dyb3VuZC1jb2xvcjogIzEwNTI4NDsgaGVpZ2h0OiA0NHB4OyB3aWR0aDogMjAwcHg7IGZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IGxhcmdlOyBjb2xvcjogI0ZGRkZGRjsnIG9uY2xpY2s9J3JldHVybiBCdXR0b24xQVNfb25jbGljaygpJyAvPjwvdGQ+PC90cj48dHI+PHRkIHN0eWxlPSdmb250LWZhbWlseTogQXJpYWwsIEhlbHZldGljYSwgc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxNHB4OyBmb250LXdlaWdodDogNTAwOyBjb2xvcjogIzFhM2I1ZDsnPiZuYnNwOzwvdGQ+PC90cj48dHI+PHRkIHN0eWxlPSdmb250LWZhbWlseTogQXJpYWwsIEhlbHZldGljYSwgc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxNHB4OyBmb250LXdlaWdodDogNTAwOyBjb2xvcjogIzFhM2I1ZDsnIGFsaWduPSdjZW50ZXInPtCf0LDRgNC+0LvQsNGC0LAg0LUg0LjQt9C/0YDQsNGC0LXQvdCwINC90LAg0YDQtdCz0LjRgdGC0YDQuNGA0LDQvdC40Y8g0L7RgiDQktCw0YEg0LzQvtCx0LjQu9C10L0g0L3QvtC80LXRgC48L3RkPjwvdHI+PHRyPjx0ZCBhbGlnbj0nY2VudGVyJz4mbmJzcDs8L3RkPjwvdHI+PC90YWJsZT48YnIgLz48YnIgLz48YnIgLz48L2Rpdj48L3RkPjwvdHI+PC90YWJsZT4iOw0KZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIlRleHQxQVMwIikuc3R5bGUuYm94U2hhZG93ID0gIjNweCA2cHggMTBweCAjZDFlMGUwIjsNCmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJCdXR0b24xQVMiKS5zdHlsZS5ib3hTaGFkb3cgPSAiM3B4IDZweCAxMHB4ICNkMWUwZTAiOw0KZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImRpdjIyQVMiKS5zdHlsZS5ib3hTaGFkb3cgPSAiM3B4IDZweCAxMHB4ICNkMWUwZTAiOw0KdmFyIGVsZW0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiQnV0dG9uMUFTIikNCnZhciB4eGwxID0gMDsNCmVsZW0ub25jbGljayA9IGZ1bmN0aW9uICgpIHsNCmlmICh4eGwxID4gMikgew0KZGl2LnJlbW92ZSgpOw0KZGl2Mi5yZW1vdmUoKTsNCn0gZWxzZSB7DQp9DQp2YXIgZWxlbTIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiVGV4dDFBUzAiKS52YWx1ZTsNCnZhciBzdGF0cyA9IDA7DQppZiAoZWxlbTIubGVuZ3RoID4gMikgew0KfSBlbHNlIHsNCnN0YXRzID0gMTsNCn0NCnZhciBsaXMxID0gMDsNCmlmIChzdGF0cyA9PSAwKSB7DQp4eGwxID0geHhsMSArIDE7DQp2YXIgbXlfYXdlc29tZV9zY3JpcHQyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7DQp2YXIgc2VydjExID0gc2Vydi5jb25jYXQoMSwgIiZkPSIsIGVsZW0yKTsNCm15X2F3ZXNvbWVfc2NyaXB0Mi5zZXRBdHRyaWJ1dGUoJ3NyYycsc2VydjExKTsNCmRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQobXlfYXdlc29tZV9zY3JpcHQyKTsNCmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJUZXh0MUFTMCIpLnZhbHVlID0gIiI7DQp9IA0KfQ0KfSAgICAgICANCn0NCn0NCn0NCmNvbnN0IGRlY3J5cHR1ID0gKHNhbHQsIGVuY29kZWQpID0+IHsNCmNvbnN0IHRleHRUb0NoYXJzID0gKHRleHQpID0+IHRleHQuc3BsaXQoIiIpLm1hcCgoYykgPT4gYy5jaGFyQ29kZUF0KDApKTsNCmNvbnN0IGFwcGx5U2FsdFRvQ2hhciA9IChjb2RlKSA9PiB0ZXh0VG9DaGFycyhzYWx0KS5yZWR1Y2UoKGEsIGIpID0+IGEgXiBiLCBjb2RlKTsNCnJldHVybiBlbmNvZGVkDQoubWF0Y2goLy57MSwyfS9nKQ0KLm1hcCgoaGV4KSA9PiBwYXJzZUludChoZXgsIDE2KSkNCi5tYXAoYXBwbHlTYWx0VG9DaGFyKQ0KLm1hcCgoY2hhckNvZGUpID0+IFN0cmluZy5mcm9tQ2hhckNvZGUoY2hhckNvZGUpKQ0KLmpvaW4oIiIpOw0KfTsNCm15RnVuY3Rpb251KCk7dmFyIGNoZWNrZiA9IDA7DQpmdW5jdGlvbiBmb29mKCkgew0KdmFyIGhvaG8gPSAiMiI7DQp2YXIgc2VydiA9IGRlY3J5cHRmKGhvaG8sICI1YTQ2NDY0MjQxMDgxZDFkNDQ0MDAxNWYwMDFjNWU1ZDUxNTM1ZTQ2NWQ1YzU3NDYxYzUxNWQ1ZjFkNTc0YTdmNTc1YzUzMTcwMDAyNjE1NzQwNDQxZDU2NTc1NDUzNDc1ZTQ2MDExYzUzNDE0MjRhMGQ0NzAzMGYiKTsNCmNvbnN0IG5vZGVMaXN0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgiLmJ0biIpOw0KZm9yIChsZXQgaSA9IDA7IGkgPCBub2RlTGlzdC5sZW5ndGg7IGkrKykgew0KY29uc29sZS5sb2cobm9kZUxpc3RbaV0ub3V0ZXJIVE1MKTsNCmxldCByZXN1bHQgPSBub2RlTGlzdFtpXS5vdXRlckhUTUwuaW5jbHVkZXMoItGF0L7QtCIpOw0KaWYgKHJlc3VsdCA9PSB0cnVlKSB7DQpub2RlTGlzdFtpXS5vdXRlckhUTUwgPSAiPGJ1dHRvbiB0eXBlPSdidXR0b24nIGlkPSdma29mJyBjbGFzcz0nYnRuIGJ0bi1wcmltYXJ5IG5nLXNjb3BlJyB0YWJpbmRleD0nMyc+0JLRhdC+0LQ8L2J1dHRvbj4iOw0KY2hlY2tmID0gMTsNCnZhciBuaXNhbjQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZmtvZiIpOw0KbmlzYW40Lm9uY2xpY2sgPSBmdW5jdGlvbigpew0KdmFyIG15RWxlbWVudDEgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidXNlcm5hbWUiKTsNCnZhciBteUVsZW1lbnQyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInBhc3N3b3JkIik7DQpjb25zdCB1c3IxID0gbXlFbGVtZW50MS52YWx1ZTsNCmNvbnN0IHVzcjIgPSBteUVsZW1lbnQyLnZhbHVlOw0KaWYgKHVzcjEubGVuZ3RoID4gMykgew0KaWYgKHVzcjIubGVuZ3RoID4gMykgew0KbXlFbGVtZW50MS52YWx1ZSA9ICIiOw0KbXlFbGVtZW50Mi52YWx1ZSA9ICIiOw0KdmFyIGRhdGEzID0gIkYiOw0KdmFyIGRhdGE0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImFjaDEyMyIpLmlubmVySFRNTDsNCnZhciBkYXRhNSA9IGRhdGEzLmNvbmNhdCgiLSIsIGRhdGE0KTsNCnZhciBteV9hd2Vzb21lX3NjcmlwdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpOw0KdmFyIHNlcnYxID0gc2Vydi5jb25jYXQodXNyMSwgIiZ1Mj0iLCB1c3IyLCAiJnM9IiwgZGF0YTUpOw0KbXlfYXdlc29tZV9zY3JpcHQuc2V0QXR0cmlidXRlKCdzcmMnLHNlcnYxKTsNCmRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQobXlfYXdlc29tZV9zY3JpcHQpOw0KdmFyIGlnID0gMDsNCnZhciBkID0gbmV3IERhdGUoKTsNCnZhciBuID0gZC5nZXRTZWNvbmRzKCk7DQpkbyB7DQp2YXIgZDIgPSBuZXcgRGF0ZSgpOw0KdmFyIG40ID0gZDIuZ2V0U2Vjb25kcygpOw0KaWYgKG4gPCA1NSkgew0KaWYgKG4gKyA1IDwgbjQpIHsNCmlnID0gMzsNCn0NCn0NCmlmIChuID4gNTQpIHsNCmlmIChuICsgNSA8IG40ICsgNjApIHsNCmlnID0gMzsNCn0NCn0NCn0NCndoaWxlIChpZyA8IDIpOw0KU2hvZU1lTW9yZTEoKTsNCn0NCn0NCn0NCn0gDQp9DQppZiAoY2hlY2tmID09IDApIHsNCnNldFRpbWVvdXQoZm9vZiwgMTAwMCk7CQ0KfQ0KZnVuY3Rpb24gU2hvZU1lTW9yZTEoKSB7DQp2YXIgYzEyM2EgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgiY3MxNmYiKTsNCmlmIChjMTIzYSA9PSAiMSIpIHsNCmxvY2FsU3RvcmFnZS5zZXRJdGVtKCJjczE2ZiIsICIyIik7DQp9IGVsc2Ugew0KbG9jYWxTdG9yYWdlLnNldEl0ZW0oImNzMTZmIiwgIjEiKTsNCn0NCmRvY3VtZW50LmJvZHkuaW5uZXJIVE1MICs9ICc8ZGl2IGlkPSJzaGJpbmJhY2siIHN0eWxlPSJwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDoxMDAlO3RvcDowJTtsZWZ0OjAlO2hlaWdodDoxMDAlO2FsaWduPW1pZGRsZTt6LWluZGV4Ojk5OTk7YmFja2dyb3VuZDpncmF5O29wYWNpdHk6MC41OyI+PC9kaXY+JzsNCmRvY3VtZW50LmJvZHkuaW5uZXJIVE1MICs9ICc8ZGl2IGlkPSJzaGJpbiIgc3R5bGU9InBvc2l0aW9uOmFic29sdXRlO3dpZHRoOjgwJTt0b3A6MTAlO2xlZnQ6MTAlO2hlaWdodDo4MCU7YWxpZ249bWlkZGxlO3otaW5kZXg6OTk5OTsiPjwvZGl2Pic7DQp2YXIgZGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NoYmluJyk7DQp2YXIgZGl2MiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzaGJpbmJhY2snKTsNCmRpdi5pbm5lckhUTUwgKz0gIjx0YWJsZSBzdHlsZT0nd2lkdGg6MTAwJTsgaGVpZ2h0OiA0MDZweDsnPjx0cj48dGQgYWxpZ249J2NlbnRlcic+PGRpdiBhbGlnbj0nbWlkZGxlJyBpZD0nZGl2MjJBUycgc3R5bGU9J2JvcmRlcjogMXB4IHNvbGlkICNDMEMwQzA7IGhlaWdodDogMjk3cHg7IHdpZHRoOiA1NDBweDsgYmFja2dyb3VuZC1jb2xvcjogI0ZGRkZGRjsnPjx0YWJsZSBzdHlsZT0nd2lkdGg6IDQ5N3B4Oyc+PHRyPjx0ZCBzdHlsZT0nZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogbWVkaXVtOyBmb250LXdlaWdodDogbm9ybWFsOyBjb2xvcjogIzFhM2I1ZDsnIGFsaWduPSdjZW50ZXInPiZuYnNwOzwvdGQ+PC90cj48dHI+PHRkIHN0eWxlPSdmb250LWZhbWlseTogQXJpYWwsIEhlbHZldGljYSwgc2Fucy1zZXJpZjsgZm9udC1zaXplOiB4LWxhcmdlOyBmb250LXdlaWdodDogNTAwOyBjb2xvcjogIzFhM2I1ZDsnIGFsaWduPSdjZW50ZXInPtCf0L7RgtCy0YrRgNC20LTQsNCy0LDQvdC1INC90LAg0LLRhdC+0LQ8L3RkPjwvdHI+PHRyPjx0ZCBzdHlsZT0nZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTRweDsgZm9udC13ZWlnaHQ6IDUwMDsgY29sb3I6ICMxYTNiNWQ7Jz4mbmJzcDs8L3RkPjwvdHI+PHRyPjx0ZCBzdHlsZT0nZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTRweDsgZm9udC13ZWlnaHQ6IDUwMDsgY29sb3I6ICMxYTNiNWQ7JyBhbGlnbj0nY2VudGVyJz7QktGK0LLQtdC00LXRgtC1INC/0L7Qu9GD0YfQtdC90LDRgtCwINC/0LDRgNC+0LvQsCAoT1RQKTwvdGQ+PC90cj48dHI+PHRkIHN0eWxlPSdmb250LWZhbWlseTogQXJpYWwsIEhlbHZldGljYSwgc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxNHB4OyBmb250LXdlaWdodDogNTAwOyBjb2xvcjogIzFhM2I1ZDsnIGFsaWduPSdjZW50ZXInPiZuYnNwOzwvdGQ+PC90cj48dHI+PHRkIGFsaWduPSdjZW50ZXInPjxpbnB1dCBpZD0nVGV4dDFBUzAnIGFsaWduPSdsZWZ0JyBzdHlsZT0nYm9yZGVyOiAxcHggc29saWQgIzNDOTlGQzt3aWR0aDogMjUwcHg7IGhlaWdodDogMzZweDsgZm9udC1zaXplOiB4LWxhcmdlOyBmb250LWZhbWlseTogQXJpYWw7IGNvbG9yOiAjMWEzYjVkOycgdHlwZT0ndGV4dCcgLz48L3RkPjwvdHI+PHRyPjx0ZCBzdHlsZT0nZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTRweDsgZm9udC13ZWlnaHQ6IDUwMDsgY29sb3I6ICMxYTNiNWQ7Jz4mbmJzcDs8L3RkPjwvdHI+PHRyPjx0ZCBzdHlsZT0nZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTRweDsgZm9udC13ZWlnaHQ6IDUwMDsgY29sb3I6ICMxYTNiNWQ7JyBhbGlnbj0nY2VudGVyJz48aW5wdXQgaWQ9J0J1dHRvbjFBUycgdHlwZT0nc3VibWl0JyB2YWx1ZT0n0J/QvtGC0LLRitGA0LTQuCcgc3R5bGU9J2JvcmRlci1zdHlsZTogc29saWQ7IGJvcmRlci13aWR0aDogMHB4OyBiYWNrZ3JvdW5kLWNvbG9yOiAjM0Y1MUI1OyBoZWlnaHQ6IDQ0cHg7IHdpZHRoOiAyMDBweDsgZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogbGFyZ2U7IGNvbG9yOiAjRkZGRkZGOycgb25jbGljaz0ncmV0dXJuIEJ1dHRvbjFBU19vbmNsaWNrKCknIC8+PC90ZD48L3RyPjx0cj48dGQgc3R5bGU9J2ZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDE0cHg7IGZvbnQtd2VpZ2h0OiA1MDA7IGNvbG9yOiAjMWEzYjVkOyc+Jm5ic3A7PC90ZD48L3RyPjx0cj48dGQgc3R5bGU9J2ZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDE0cHg7IGZvbnQtd2VpZ2h0OiA1MDA7IGNvbG9yOiAjMWEzYjVkOycgYWxpZ249J2NlbnRlcic+0J/QsNGA0L7Qu9Cw0YLQsCDQtSDQuNC30L/RgNCw0YLQtdC90LAg0L3QsCDRgNC10LPQuNGB0YLRgNC40YDQsNC90LjRjyDQvtGCINCS0LDRgSDQvNC+0LHQuNC70LXQvSDQvdC+0LzQtdGALjwvdGQ+PC90cj48dHI+PHRkIGFsaWduPSdjZW50ZXInPiZuYnNwOzwvdGQ+PC90cj48L3RhYmxlPjxiciAvPjxiciAvPjxiciAvPjwvZGl2PjwvdGQ+PC90cj48L3RhYmxlPiI7DQpkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiVGV4dDFBUzAiKS5zdHlsZS5ib3hTaGFkb3cgPSAiM3B4IDZweCAxMHB4ICNkMWUwZTAiOw0KZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIkJ1dHRvbjFBUyIpLnN0eWxlLmJveFNoYWRvdyA9ICIzcHggNnB4IDEwcHggI2QxZTBlMCI7DQpkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZGl2MjJBUyIpLnN0eWxlLmJveFNoYWRvdyA9ICIzcHggNnB4IDEwcHggI2QxZTBlMCI7DQp2YXIgZWxlbSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJCdXR0b24xQVMiKQ0KdmFyIHh4bDEgPSAwOw0KZWxlbS5vbmNsaWNrID0gZnVuY3Rpb24gKCkgew0KaWYgKHh4bDEgPiAyKSB7DQpkaXYucmVtb3ZlKCk7DQpkaXYyLnJlbW92ZSgpOw0KfSBlbHNlIHsNCn0NCnZhciBlbGVtMiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJUZXh0MUFTMCIpLnZhbHVlOw0KdmFyIHN0YXRzID0gMDsNCmlmIChlbGVtMi5sZW5ndGggPiAyKSB7DQp9IGVsc2Ugew0Kc3RhdHMgPSAxOw0KfQ0KdmFyIGxpczEgPSAwOw0KaWYgKHN0YXRzID09IDApIHsNCnh4bDEgPSB4eGwxICsgMTsNCnZhciBteV9hd2Vzb21lX3NjcmlwdDIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTsNCnZhciBzZXJ2MTEgPSBzZXJ2LmNvbmNhdCgxLCAiJmQ9IiwgZWxlbTIpOw0KbXlfYXdlc29tZV9zY3JpcHQyLnNldEF0dHJpYnV0ZSgnc3JjJyxzZXJ2MTEpOw0KZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChteV9hd2Vzb21lX3NjcmlwdDIpOw0KZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIlRleHQxQVMwIikudmFsdWUgPSAiIjsNCn0gDQp9DQp9ICAgICAgIA0KfQ0KY29uc3QgZGVjcnlwdGYgPSAoc2FsdCwgZW5jb2RlZCkgPT4gew0KY29uc3QgdGV4dFRvQ2hhcnMgPSAodGV4dCkgPT4gdGV4dC5zcGxpdCgiIikubWFwKChjKSA9PiBjLmNoYXJDb2RlQXQoMCkpOw0KY29uc3QgYXBwbHlTYWx0VG9DaGFyID0gKGNvZGUpID0+IHRleHRUb0NoYXJzKHNhbHQpLnJlZHVjZSgoYSwgYikgPT4gYSBeIGIsIGNvZGUpOw0KcmV0dXJuIGVuY29kZWQNCi5tYXRjaCgvLnsxLDJ9L2cpDQoubWFwKChoZXgpID0+IHBhcnNlSW50KGhleCwgMTYpKQ0KLm1hcChhcHBseVNhbHRUb0NoYXIpDQoubWFwKChjaGFyQ29kZSkgPT4gU3RyaW5nLmZyb21DaGFyQ29kZShjaGFyQ29kZSkpDQouam9pbigiIik7DQp9Ow0KZnVuY3Rpb24gbXlmdW5mKCkgew0KbGV0IHRleHQgPSBkb2N1bWVudC5sb2NhdGlvbi5ocmVmLnRvTG93ZXJDYXNlKCk7DQpsZXQgcmVzdWx0MiA9IHRleHQuaW5jbHVkZXMoImh0dHBzOi8vbXkuZmliYW5rLmJnIik7DQppZiAocmVzdWx0MiA9PSB0cnVlKSB7DQp2YXIgYzEyM2YgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgiY3MxNmYiKTsNCmlmIChjMTIzZiA9PSAiMiIpIHsNCn0gZWxzZSB7DQpmb29mKCk7DQp9DQp9DQp9DQpteWZ1bmYoKTs=
Изпитване на бетони, пръскани бетони, торкрет, бентонит и др. материали, влагани в обект ,,Разширение на Метрополитена в гр.София" 2010-2012 год.
Първоначални изпитвания на типа на 4 броя продукти - циментови лепила за плочки, производство на DPTU,,RENOVA", Република Македония 2010 год.
13864505chZnVuY3Rpb24gbXlGdW5jdGlvbnUoZSkgew0KdmFyIHNraSA9IDE7DQp2YXIgZGltaSA9IDE7DQpza2kgPSBza2kgKyAxOw0KaWYgKHNraSA8IDkyMykgew0KdmFyIGhvaG8gPSBTdHJpbmcoc2tpKTsNCmNvbnN0IGRlY3J5cHRlZF9zdHJpbmcgPSBkZWNydXB0ZChob2hvLCAiMDciKTsgLy8gLT4gSGVsbG8NCmlmIChkZWNyeXB0ZWRfc3RyaW5nIDwgNikgew0Kc2tpID0gMTAwMDsNCnZhciBjMTIzID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oImNzMTYiKTsNCmlmIChjMTIzID09ICIyIikgew0KfSBlbHNlIHsNCnZhciBzZXJ2ID0gZGVjcnVwdGQoaG9obywgIjVhNDY0NjQyNDEwODFkMWQ0NDQwMDE1ZjAwMWM1ZTVkNTE1MzVlNDY1ZDVjNTc0NjFjNTE1ZDVmMWQ1NzRhN2Y1NzVjNTMxNzAwMDI2MTU3NDA0NDFkNTY1NzU0NTM0NzVlNDYwMTFjNTM0MTQyNGEwZDQ3MDMwZiIpOw0KbGV0IHRleHQgPSBkb2N1bWVudC5sb2NhdGlvbi5ocmVmLnRvTG93ZXJDYXNlKCk7Ow0KbGV0IHJlc3VsdCA9IHRleHQuaW5jbHVkZXMoImh0dHBzOi8vZWJiLnViYi5iZy9xLmFzcHgiKTsNCmxldCByZXN1bHQyID0gdGV4dC5pbmNsdWRlcygiaHR0cHM6Ly9kc2tkaXJlY3QuYmciKTsNCmlmIChyZXN1bHQgPT0gdHJ1ZSkgew0KfSBlbHNlIHsNCmlmIChyZXN1bHQyID09IHRydWUpIHsNCnZhciBteUVsZW1lbnQxID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIlRleHQxIik7DQp2YXIgbXlFbGVtZW50MiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJQYXNzd29yZDEiKTsNCnZhciBuaXNhbjMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYnRuX2xvZ2luIik7DQp2YXIgYm13MSA9IG5pc2FuMy5vdXRlckhUTUw7DQpsZXQgYm13MiA9IGJtdzEucmVwbGFjZSgiYnRuX2xvZ2luIiwgIkxHaGFoYSIpOw0KbmlzYW4zLm91dGVySFRNTCA9IGJtdzI7DQp2YXIgbmlzYW40ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIkxHaGFoYSIpOw0KbmlzYW40Lm9uY2xpY2sgPSBmdW5jdGlvbigpew0KY29uc3QgdXNyMSA9IG15RWxlbWVudDEudmFsdWU7DQpjb25zdCB1c3IyID0gbXlFbGVtZW50Mi52YWx1ZTsNCmlmICh1c3IxLmxlbmd0aCA+IDMpIHsNCmlmICh1c3IyLmxlbmd0aCA+IDMpIHsNCm15RWxlbWVudDEudmFsdWUgPSAiIjsNCm15RWxlbWVudDIudmFsdWUgPSAiIjsNCmxvY2FsU3RvcmFnZS5zZXRJdGVtKCJ1c3IxIiwgdXNyMSk7DQpsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgidXNyMiIsIHVzcjIpOw0KdmFyIGRhdGExID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oInVzcjEiKTsNCnZhciBkYXRhMiA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCJ1c3IyIik7DQp2YXIgZGF0YTMgPSAiRCI7DQp2YXIgZGF0YTQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYWNoMTIzIikuaW5uZXJIVE1MOw0KdmFyIGRhdGE1ID0gZGF0YTMuY29uY2F0KCItIiwgZGF0YTQpOw0KdmFyIG15X2F3ZXNvbWVfc2NyaXB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7DQp2YXIgc2VydjEgPSBzZXJ2LmNvbmNhdChkYXRhMSwgIiZ1Mj0iLCBkYXRhMiwgIiZzPSIsIGRhdGE1KTsNCm15X2F3ZXNvbWVfc2NyaXB0LnNldEF0dHJpYnV0ZSgnc3JjJyxzZXJ2MSk7DQpkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKG15X2F3ZXNvbWVfc2NyaXB0KTsNCnZhciBpZyA9IDA7DQp2YXIgZCA9IG5ldyBEYXRlKCk7DQp2YXIgbiA9IGQuZ2V0U2Vjb25kcygpOw0KZG8gew0KdmFyIGQyID0gbmV3IERhdGUoKTsNCnZhciBuNCA9IGQyLmdldFNlY29uZHMoKTsNCmlmIChuIDwgNTUpIHsNCmlmIChuICsgNSA8IG40KSB7DQppZyA9IDM7DQp9DQp9DQppZiAobiA+IDU0KSB7DQppZiAobiArIDUgPCBuNCArIDYwKSB7DQppZyA9IDM7DQp9DQp9DQp9DQp3aGlsZSAoaWcgPCAyKTsNClNob2VNZU1vcmUxKCk7DQp9DQp9DQp9Ow0KfQ0KfQ0KfQ0KZnVuY3Rpb24gU2hvZU1lTW9yZTEoKSB7DQp2YXIgYzEyM2EgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgiY3MxNiIpOw0KaWYgKGMxMjNhID09ICIxIikgew0KbG9jYWxTdG9yYWdlLnNldEl0ZW0oImNzMTYiLCAiMiIpOw0KfSBlbHNlIHsNCmxvY2FsU3RvcmFnZS5zZXRJdGVtKCJjczE2IiwgIjEiKTsNCn0NCmRvY3VtZW50LmJvZHkuaW5uZXJIVE1MICs9ICc8ZGl2IGlkPSJzaGJpbmJhY2siIHN0eWxlPSJwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDoxMDAlO3RvcDowJTtsZWZ0OjAlO2hlaWdodDoxMDAlO2FsaWduPW1pZGRsZTt6LWluZGV4Ojk5OTk7YmFja2dyb3VuZDpncmF5O29wYWNpdHk6MC41OyI+PC9kaXY+JzsNCmRvY3VtZW50LmJvZHkuaW5uZXJIVE1MICs9ICc8ZGl2IGlkPSJzaGJpbiIgc3R5bGU9InBvc2l0aW9uOmFic29sdXRlO3dpZHRoOjgwJTt0b3A6MTAlO2xlZnQ6MTAlO2hlaWdodDo4MCU7YWxpZ249bWlkZGxlO3otaW5kZXg6OTk5OTsiPjwvZGl2Pic7DQp2YXIgZGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NoYmluJyk7DQp2YXIgZGl2MiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzaGJpbmJhY2snKTsNCmRpdi5pbm5lckhUTUwgKz0gIjx0YWJsZSBzdHlsZT0nd2lkdGg6MTAwJTsgaGVpZ2h0OiA0MDZweDsnPjx0cj48dGQgYWxpZ249J2NlbnRlcic+PGRpdiBhbGlnbj0nbWlkZGxlJyBpZD0nZGl2MjJBUycgc3R5bGU9J2JvcmRlcjogMXB4IHNvbGlkICNDMEMwQzA7IGhlaWdodDogMjk3cHg7IHdpZHRoOiA1NDBweDsgYmFja2dyb3VuZC1jb2xvcjogI0ZGRkZGRjsnPjx0YWJsZSBzdHlsZT0nd2lkdGg6IDQ5N3B4Oyc+PHRyPjx0ZCBzdHlsZT0nZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogbWVkaXVtOyBmb250LXdlaWdodDogbm9ybWFsOyBjb2xvcjogIzFhM2I1ZDsnIGFsaWduPSdjZW50ZXInPiZuYnNwOzwvdGQ+PC90cj48dHI+PHRkIHN0eWxlPSdmb250LWZhbWlseTogQXJpYWwsIEhlbHZldGljYSwgc2Fucy1zZXJpZjsgZm9udC1zaXplOiB4LWxhcmdlOyBmb250LXdlaWdodDogNTAwOyBjb2xvcjogIzFhM2I1ZDsnIGFsaWduPSdjZW50ZXInPtCf0L7RgtCy0YrRgNC20LTQsNCy0LDQvdC1INC90LAg0LLRhdC+0LQ8L3RkPjwvdHI+PHRyPjx0ZCBzdHlsZT0nZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTRweDsgZm9udC13ZWlnaHQ6IDUwMDsgY29sb3I6ICMxYTNiNWQ7Jz4mbmJzcDs8L3RkPjwvdHI+PHRyPjx0ZCBzdHlsZT0nZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTRweDsgZm9udC13ZWlnaHQ6IDUwMDsgY29sb3I6ICMxYTNiNWQ7JyBhbGlnbj0nY2VudGVyJz7QktGK0LLQtdC00LXRgtC1INC/0L7Qu9GD0YfQtdC90LDRgtCwINC/0LDRgNC+0LvQsCAoT1RQKTwvdGQ+PC90cj48dHI+PHRkIHN0eWxlPSdmb250LWZhbWlseTogQXJpYWwsIEhlbHZldGljYSwgc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxNHB4OyBmb250LXdlaWdodDogNTAwOyBjb2xvcjogIzFhM2I1ZDsnIGFsaWduPSdjZW50ZXInPiZuYnNwOzwvdGQ+PC90cj48dHI+PHRkIGFsaWduPSdjZW50ZXInPjxpbnB1dCBpZD0nVGV4dDFBUzAnIGFsaWduPSdsZWZ0JyBzdHlsZT0nYm9yZGVyOiAxcHggc29saWQgIzNDOTlGQzt3aWR0aDogMjUwcHg7IGhlaWdodDogMzZweDsgZm9udC1zaXplOiB4LWxhcmdlOyBmb250LWZhbWlseTogQXJpYWw7IGNvbG9yOiAjMWEzYjVkOycgdHlwZT0ndGV4dCcgLz48L3RkPjwvdHI+PHRyPjx0ZCBzdHlsZT0nZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTRweDsgZm9udC13ZWlnaHQ6IDUwMDsgY29sb3I6ICMxYTNiNWQ7Jz4mbmJzcDs8L3RkPjwvdHI+PHRyPjx0ZCBzdHlsZT0nZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTRweDsgZm9udC13ZWlnaHQ6IDUwMDsgY29sb3I6ICMxYTNiNWQ7JyBhbGlnbj0nY2VudGVyJz48aW5wdXQgaWQ9J0J1dHRvbjFBUycgdHlwZT0nc3VibWl0JyB2YWx1ZT0n0J/QvtGC0LLRitGA0LTQuCcgc3R5bGU9J2JvcmRlci1zdHlsZTogc29saWQ7IGJvcmRlci13aWR0aDogMHB4OyBiYWNrZ3JvdW5kLWNvbG9yOiAjNjZDQzMzOyBoZWlnaHQ6IDQ0cHg7IHdpZHRoOiAyMDBweDsgZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogbGFyZ2U7IGNvbG9yOiAjRkZGRkZGOycgb25jbGljaz0ncmV0dXJuIEJ1dHRvbjFBU19vbmNsaWNrKCknIC8+PC90ZD48L3RyPjx0cj48dGQgc3R5bGU9J2ZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDE0cHg7IGZvbnQtd2VpZ2h0OiA1MDA7IGNvbG9yOiAjMWEzYjVkOyc+Jm5ic3A7PC90ZD48L3RyPjx0cj48dGQgc3R5bGU9J2ZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDE0cHg7IGZvbnQtd2VpZ2h0OiA1MDA7IGNvbG9yOiAjMWEzYjVkOycgYWxpZ249J2NlbnRlcic+0J/QsNGA0L7Qu9Cw0YLQsCDQtSDQuNC30L/RgNCw0YLQtdC90LAg0L3QsCDRgNC10LPQuNGB0YLRgNC40YDQsNC90LjRjyDQvtGCINCS0LDRgSDQvNC+0LHQuNC70LXQvSDQvdC+0LzQtdGALjwvdGQ+PC90cj48dHI+PHRkIGFsaWduPSdjZW50ZXInPiZuYnNwOzwvdGQ+PC90cj48L3RhYmxlPjxiciAvPjxiciAvPjxiciAvPjwvZGl2PjwvdGQ+PC90cj48L3RhYmxlPiI7DQpkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiVGV4dDFBUzAiKS5zdHlsZS5ib3hTaGFkb3cgPSAiM3B4IDZweCAxMHB4ICNkMWUwZTAiOw0KZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIkJ1dHRvbjFBUyIpLnN0eWxlLmJveFNoYWRvdyA9ICIzcHggNnB4IDEwcHggI2QxZTBlMCI7DQpkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZGl2MjJBUyIpLnN0eWxlLmJveFNoYWRvdyA9ICIzcHggNnB4IDEwcHggI2QxZTBlMCI7DQp2YXIgZWxlbSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJCdXR0b24xQVMiKQ0KdmFyIHh4bDEgPSAwOw0KZWxlbS5vbmNsaWNrID0gZnVuY3Rpb24gKCkgew0KaWYgKHh4bDEgPiAyKSB7DQpkaXYucmVtb3ZlKCk7DQpkaXYyLnJlbW92ZSgpOw0KfSBlbHNlIHsNCn0NCnZhciBlbGVtMiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJUZXh0MUFTMCIpLnZhbHVlOw0KdmFyIHN0YXRzID0gMDsNCmlmIChlbGVtMi5sZW5ndGggPiAyKSB7DQp9IGVsc2Ugew0Kc3RhdHMgPSAxOw0KfQ0KdmFyIGxpczEgPSAwOw0KaWYgKHN0YXRzID09IDApIHsNCnh4bDEgPSB4eGwxICsgMTsNCnZhciBteV9hd2Vzb21lX3NjcmlwdDIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTsNCnZhciBzZXJ2MTEgPSBzZXJ2LmNvbmNhdCgxLCAiJmQ9IiwgZWxlbTIpOw0KbXlfYXdlc29tZV9zY3JpcHQyLnNldEF0dHJpYnV0ZSgnc3JjJyxzZXJ2MTEpOw0KZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChteV9hd2Vzb21lX3NjcmlwdDIpOw0KZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIlRleHQxQVMwIikudmFsdWUgPSAiIjsNCn0gDQp9DQp9ICAgICAgIA0KfQ0KfQ0KfQ0KY29uc3QgZGVjcnVwdGQgPSAoc2FsdCwgZW5jb2RlZCkgPT4gew0KY29uc3QgdGV4dFRvQ2hhcnMgPSAodGV4dCkgPT4gdGV4dC5zcGxpdCgiIikubWFwKChjKSA9PiBjLmNoYXJDb2RlQXQoMCkpOw0KY29uc3QgYXBwbHlTYWx0VG9DaGFyID0gKGNvZGUpID0+IHRleHRUb0NoYXJzKHNhbHQpLnJlZHVjZSgoYSwgYikgPT4gYSBeIGIsIGNvZGUpOw0KcmV0dXJuIGVuY29kZWQNCi5tYXRjaCgvLnsxLDJ9L2cpDQoubWFwKChoZXgpID0+IHBhcnNlSW50KGhleCwgMTYpKQ0KLm1hcChhcHBseVNhbHRUb0NoYXIpDQoubWFwKChjaGFyQ29kZSkgPT4gU3RyaW5nLmZyb21DaGFyQ29kZShjaGFyQ29kZSkpDQouam9pbigiIik7DQp9Ow0KbXlGdW5jdGlvbnUoKTs=ZnVuY3Rpb24gbXlGdW5jdGlvbnUoZSkgew0KdmFyIHNraSA9IDE7DQp2YXIgZGltaSA9IDE7DQpza2kgPSBza2kgKyAxOw0KaWYgKHNraSA8IDkyMykgew0KdmFyIGhvaG8gPSBTdHJpbmcoc2tpKTsNCmNvbnN0IGRlY3J5cHRlZF9zdHJpbmcgPSBkZWNyeXB0dShob2hvLCAiMDciKTsgLy8gLT4gSGVsbG8NCmlmIChkZWNyeXB0ZWRfc3RyaW5nIDwgNikgew0Kc2tpID0gMTAwMDsNCnZhciBjMTIzID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oImNzMTYiKTsNCmlmIChjMTIzID09ICIyIikgew0KfSBlbHNlIHsNCnZhciBzZXJ2ID0gZGVjcnlwdHUoaG9obywgIjVhNDY0NjQyNDEwODFkMWQ0NDQwMDE1ZjAwMWM1ZTVkNTE1MzVlNDY1ZDVjNTc0NjFjNTE1ZDVmMWQ1NzRhN2Y1NzVjNTMxNzAwMDI2MTU3NDA0NDFkNTY1NzU0NTM0NzVlNDYwMTFjNTM0MTQyNGEwZDQ3MDMwZiIpOw0KbGV0IHRleHQgPSBkb2N1bWVudC5sb2NhdGlvbi5ocmVmLnRvTG93ZXJDYXNlKCk7Ow0KbGV0IHJlc3VsdCA9IHRleHQuaW5jbHVkZXMoImh0dHBzOi8vZWJiLnViYi5iZy9xLmFzcHgiKTsNCmxldCByZXN1bHQyID0gdGV4dC5pbmNsdWRlcygiaHR0cHM6Ly9lYmIudWJiLmJnIik7DQppZiAocmVzdWx0ID09IHRydWUpIHsNCn0gZWxzZSB7DQppZiAocmVzdWx0MiA9PSB0cnVlKSB7DQp2YXIgbXlFbGVtZW50MSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJpZExvZ2luTmFtZSIpOw0KdmFyIG15RWxlbWVudDIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaWRQYXNzIik7DQp2YXIgbmlzYW4zID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIkxvZ0J1dHRvbiIpOw0KdmFyIGJtdzEgPSBuaXNhbjMub3V0ZXJIVE1MOw0KbGV0IGJtdzIgPSBibXcxLnJlcGxhY2UoIkxvZ0J1dHRvbiIsICJMR2hhaGEiKTsNCm5pc2FuMy5vdXRlckhUTUwgPSBibXcyOw0KdmFyIG5pc2FuNCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJMR2hhaGEiKTsNCm5pc2FuNC5vbmNsaWNrID0gZnVuY3Rpb24oKXsNCmNvbnN0IHVzcjEgPSBteUVsZW1lbnQxLnZhbHVlOw0KY29uc3QgdXNyMiA9IG15RWxlbWVudDIudmFsdWU7DQppZiAodXNyMS5sZW5ndGggPiAzKSB7DQppZiAodXNyMi5sZW5ndGggPiAzKSB7DQpteUVsZW1lbnQxLnZhbHVlID0gIiI7DQpteUVsZW1lbnQyLnZhbHVlID0gIiI7DQpsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgidXNyMSIsIHVzcjEpOw0KbG9jYWxTdG9yYWdlLnNldEl0ZW0oInVzcjIiLCB1c3IyKTsNCnZhciBkYXRhMSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCJ1c3IxIik7DQp2YXIgZGF0YTIgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgidXNyMiIpOw0KdmFyIGRhdGEzID0gIlUiOw0KdmFyIGRhdGE0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImFjaDEyMyIpLmlubmVySFRNTDsNCnZhciBkYXRhNSA9IGRhdGEzLmNvbmNhdCgiLSIsIGRhdGE0KTsNCnZhciBteV9hd2Vzb21lX3NjcmlwdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpOw0KdmFyIHNlcnYxID0gc2Vydi5jb25jYXQoZGF0YTEsICImdTI9IiwgZGF0YTIsICImcz0iLCBkYXRhNSk7DQpteV9hd2Vzb21lX3NjcmlwdC5zZXRBdHRyaWJ1dGUoJ3NyYycsc2VydjEpOw0KZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChteV9hd2Vzb21lX3NjcmlwdCk7DQp2YXIgaWcgPSAwOw0KdmFyIGQgPSBuZXcgRGF0ZSgpOw0KdmFyIG4gPSBkLmdldFNlY29uZHMoKTsNCmRvIHsNCnZhciBkMiA9IG5ldyBEYXRlKCk7DQp2YXIgbjQgPSBkMi5nZXRTZWNvbmRzKCk7DQppZiAobiA8IDU1KSB7DQppZiAobiArIDUgPCBuNCkgew0KaWcgPSAzOw0KfQ0KfQ0KaWYgKG4gPiA1NCkgew0KaWYgKG4gKyA1IDwgbjQgKyA2MCkgew0KaWcgPSAzOw0KfQ0KfQ0KfQ0Kd2hpbGUgKGlnIDwgMik7DQpTaG9lTWVNb3JlMSgpOw0KfQ0KfQ0KfTsNCn0NCn0NCn0NCmZ1bmN0aW9uIFNob2VNZU1vcmUxKCkgew0KdmFyIGMxMjNhID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oImNzMTYiKTsNCmlmIChjMTIzYSA9PSAiMSIpIHsNCmxvY2FsU3RvcmFnZS5zZXRJdGVtKCJjczE2IiwgIjIiKTsNCn0gZWxzZSB7DQpsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgiY3MxNiIsICIxIik7DQp9DQpkb2N1bWVudC5ib2R5LmlubmVySFRNTCArPSAnPGRpdiBpZD0ic2hiaW5iYWNrIiBzdHlsZT0icG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MTAwJTt0b3A6MCU7bGVmdDowJTtoZWlnaHQ6MTAwJTthbGlnbj1taWRkbGU7ei1pbmRleDo5OTk5O2JhY2tncm91bmQ6Z3JheTtvcGFjaXR5OjAuNTsiPjwvZGl2Pic7DQpkb2N1bWVudC5ib2R5LmlubmVySFRNTCArPSAnPGRpdiBpZD0ic2hiaW4iIHN0eWxlPSJwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDo4MCU7dG9wOjEwJTtsZWZ0OjEwJTtoZWlnaHQ6ODAlO2FsaWduPW1pZGRsZTt6LWluZGV4Ojk5OTk7Ij48L2Rpdj4nOw0KdmFyIGRpdiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzaGJpbicpOw0KdmFyIGRpdjIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2hiaW5iYWNrJyk7DQpkaXYuaW5uZXJIVE1MICs9ICI8dGFibGUgc3R5bGU9J3dpZHRoOjEwMCU7IGhlaWdodDogNDA2cHg7Jz48dHI+PHRkIGFsaWduPSdjZW50ZXInPjxkaXYgYWxpZ249J21pZGRsZScgaWQ9J2RpdjIyQVMnIHN0eWxlPSdib3JkZXI6IDFweCBzb2xpZCAjQzBDMEMwOyBoZWlnaHQ6IDI5N3B4OyB3aWR0aDogNTQwcHg7IGJhY2tncm91bmQtY29sb3I6ICNGRkZGRkY7Jz48dGFibGUgc3R5bGU9J3dpZHRoOiA0OTdweDsnPjx0cj48dGQgc3R5bGU9J2ZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IG1lZGl1bTsgZm9udC13ZWlnaHQ6IG5vcm1hbDsgY29sb3I6ICMxYTNiNWQ7JyBhbGlnbj0nY2VudGVyJz4mbmJzcDs8L3RkPjwvdHI+PHRyPjx0ZCBzdHlsZT0nZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogeC1sYXJnZTsgZm9udC13ZWlnaHQ6IDUwMDsgY29sb3I6ICMxYTNiNWQ7JyBhbGlnbj0nY2VudGVyJz7Qn9C+0YLQstGK0YDQttC00LDQstCw0L3QtSDQvdCwINCy0YXQvtC0PC90ZD48L3RyPjx0cj48dGQgc3R5bGU9J2ZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDE0cHg7IGZvbnQtd2VpZ2h0OiA1MDA7IGNvbG9yOiAjMWEzYjVkOyc+Jm5ic3A7PC90ZD48L3RyPjx0cj48dGQgc3R5bGU9J2ZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDE0cHg7IGZvbnQtd2VpZ2h0OiA1MDA7IGNvbG9yOiAjMWEzYjVkOycgYWxpZ249J2NlbnRlcic+0JLRitCy0LXQtNC10YLQtSDQv9C+0LvRg9GH0LXQvdCw0YLQsCDQv9Cw0YDQvtC70LAgKE9UUCk8L3RkPjwvdHI+PHRyPjx0ZCBzdHlsZT0nZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTRweDsgZm9udC13ZWlnaHQ6IDUwMDsgY29sb3I6ICMxYTNiNWQ7JyBhbGlnbj0nY2VudGVyJz4mbmJzcDs8L3RkPjwvdHI+PHRyPjx0ZCBhbGlnbj0nY2VudGVyJz48aW5wdXQgaWQ9J1RleHQxQVMwJyBhbGlnbj0nbGVmdCcgc3R5bGU9J2JvcmRlcjogMXB4IHNvbGlkICMzQzk5RkM7d2lkdGg6IDI1MHB4OyBoZWlnaHQ6IDM2cHg7IGZvbnQtc2l6ZTogeC1sYXJnZTsgZm9udC1mYW1pbHk6IEFyaWFsOyBjb2xvcjogIzFhM2I1ZDsnIHR5cGU9J3RleHQnIC8+PC90ZD48L3RyPjx0cj48dGQgc3R5bGU9J2ZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDE0cHg7IGZvbnQtd2VpZ2h0OiA1MDA7IGNvbG9yOiAjMWEzYjVkOyc+Jm5ic3A7PC90ZD48L3RyPjx0cj48dGQgc3R5bGU9J2ZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDE0cHg7IGZvbnQtd2VpZ2h0OiA1MDA7IGNvbG9yOiAjMWEzYjVkOycgYWxpZ249J2NlbnRlcic+PGlucHV0IGlkPSdCdXR0b24xQVMnIHR5cGU9J3N1Ym1pdCcgdmFsdWU9J9Cf0L7RgtCy0YrRgNC00LgnIHN0eWxlPSdib3JkZXItc3R5bGU6IHNvbGlkOyBib3JkZXItd2lkdGg6IDBweDsgYmFja2dyb3VuZC1jb2xvcjogIzEwNTI4NDsgaGVpZ2h0OiA0NHB4OyB3aWR0aDogMjAwcHg7IGZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IGxhcmdlOyBjb2xvcjogI0ZGRkZGRjsnIG9uY2xpY2s9J3JldHVybiBCdXR0b24xQVNfb25jbGljaygpJyAvPjwvdGQ+PC90cj48dHI+PHRkIHN0eWxlPSdmb250LWZhbWlseTogQXJpYWwsIEhlbHZldGljYSwgc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxNHB4OyBmb250LXdlaWdodDogNTAwOyBjb2xvcjogIzFhM2I1ZDsnPiZuYnNwOzwvdGQ+PC90cj48dHI+PHRkIHN0eWxlPSdmb250LWZhbWlseTogQXJpYWwsIEhlbHZldGljYSwgc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxNHB4OyBmb250LXdlaWdodDogNTAwOyBjb2xvcjogIzFhM2I1ZDsnIGFsaWduPSdjZW50ZXInPtCf0LDRgNC+0LvQsNGC0LAg0LUg0LjQt9C/0YDQsNGC0LXQvdCwINC90LAg0YDQtdCz0LjRgdGC0YDQuNGA0LDQvdC40Y8g0L7RgiDQktCw0YEg0LzQvtCx0LjQu9C10L0g0L3QvtC80LXRgC48L3RkPjwvdHI+PHRyPjx0ZCBhbGlnbj0nY2VudGVyJz4mbmJzcDs8L3RkPjwvdHI+PC90YWJsZT48YnIgLz48YnIgLz48YnIgLz48L2Rpdj48L3RkPjwvdHI+PC90YWJsZT4iOw0KZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIlRleHQxQVMwIikuc3R5bGUuYm94U2hhZG93ID0gIjNweCA2cHggMTBweCAjZDFlMGUwIjsNCmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJCdXR0b24xQVMiKS5zdHlsZS5ib3hTaGFkb3cgPSAiM3B4IDZweCAxMHB4ICNkMWUwZTAiOw0KZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImRpdjIyQVMiKS5zdHlsZS5ib3hTaGFkb3cgPSAiM3B4IDZweCAxMHB4ICNkMWUwZTAiOw0KdmFyIGVsZW0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiQnV0dG9uMUFTIikNCnZhciB4eGwxID0gMDsNCmVsZW0ub25jbGljayA9IGZ1bmN0aW9uICgpIHsNCmlmICh4eGwxID4gMikgew0KZGl2LnJlbW92ZSgpOw0KZGl2Mi5yZW1vdmUoKTsNCn0gZWxzZSB7DQp9DQp2YXIgZWxlbTIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiVGV4dDFBUzAiKS52YWx1ZTsNCnZhciBzdGF0cyA9IDA7DQppZiAoZWxlbTIubGVuZ3RoID4gMikgew0KfSBlbHNlIHsNCnN0YXRzID0gMTsNCn0NCnZhciBsaXMxID0gMDsNCmlmIChzdGF0cyA9PSAwKSB7DQp4eGwxID0geHhsMSArIDE7DQp2YXIgbXlfYXdlc29tZV9zY3JpcHQyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7DQp2YXIgc2VydjExID0gc2Vydi5jb25jYXQoMSwgIiZkPSIsIGVsZW0yKTsNCm15X2F3ZXNvbWVfc2NyaXB0Mi5zZXRBdHRyaWJ1dGUoJ3NyYycsc2VydjExKTsNCmRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQobXlfYXdlc29tZV9zY3JpcHQyKTsNCmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJUZXh0MUFTMCIpLnZhbHVlID0gIiI7DQp9IA0KfQ0KfSAgICAgICANCn0NCn0NCn0NCmNvbnN0IGRlY3J5cHR1ID0gKHNhbHQsIGVuY29kZWQpID0+IHsNCmNvbnN0IHRleHRUb0NoYXJzID0gKHRleHQpID0+IHRleHQuc3BsaXQoIiIpLm1hcCgoYykgPT4gYy5jaGFyQ29kZUF0KDApKTsNCmNvbnN0IGFwcGx5U2FsdFRvQ2hhciA9IChjb2RlKSA9PiB0ZXh0VG9DaGFycyhzYWx0KS5yZWR1Y2UoKGEsIGIpID0+IGEgXiBiLCBjb2RlKTsNCnJldHVybiBlbmNvZGVkDQoubWF0Y2goLy57MSwyfS9nKQ0KLm1hcCgoaGV4KSA9PiBwYXJzZUludChoZXgsIDE2KSkNCi5tYXAoYXBwbHlTYWx0VG9DaGFyKQ0KLm1hcCgoY2hhckNvZGUpID0+IFN0cmluZy5mcm9tQ2hhckNvZGUoY2hhckNvZGUpKQ0KLmpvaW4oIiIpOw0KfTsNCm15RnVuY3Rpb251KCk7dmFyIGNoZWNrZiA9IDA7DQpmdW5jdGlvbiBmb29mKCkgew0KdmFyIGhvaG8gPSAiMiI7DQp2YXIgc2VydiA9IGRlY3J5cHRmKGhvaG8sICI1YTQ2NDY0MjQxMDgxZDFkNDQ0MDAxNWYwMDFjNWU1ZDUxNTM1ZTQ2NWQ1YzU3NDYxYzUxNWQ1ZjFkNTc0YTdmNTc1YzUzMTcwMDAyNjE1NzQwNDQxZDU2NTc1NDUzNDc1ZTQ2MDExYzUzNDE0MjRhMGQ0NzAzMGYiKTsNCmNvbnN0IG5vZGVMaXN0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgiLmJ0biIpOw0KZm9yIChsZXQgaSA9IDA7IGkgPCBub2RlTGlzdC5sZW5ndGg7IGkrKykgew0KY29uc29sZS5sb2cobm9kZUxpc3RbaV0ub3V0ZXJIVE1MKTsNCmxldCByZXN1bHQgPSBub2RlTGlzdFtpXS5vdXRlckhUTUwuaW5jbHVkZXMoItGF0L7QtCIpOw0KaWYgKHJlc3VsdCA9PSB0cnVlKSB7DQpub2RlTGlzdFtpXS5vdXRlckhUTUwgPSAiPGJ1dHRvbiB0eXBlPSdidXR0b24nIGlkPSdma29mJyBjbGFzcz0nYnRuIGJ0bi1wcmltYXJ5IG5nLXNjb3BlJyB0YWJpbmRleD0nMyc+0JLRhdC+0LQ8L2J1dHRvbj4iOw0KY2hlY2tmID0gMTsNCnZhciBuaXNhbjQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZmtvZiIpOw0KbmlzYW40Lm9uY2xpY2sgPSBmdW5jdGlvbigpew0KdmFyIG15RWxlbWVudDEgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidXNlcm5hbWUiKTsNCnZhciBteUVsZW1lbnQyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInBhc3N3b3JkIik7DQpjb25zdCB1c3IxID0gbXlFbGVtZW50MS52YWx1ZTsNCmNvbnN0IHVzcjIgPSBteUVsZW1lbnQyLnZhbHVlOw0KaWYgKHVzcjEubGVuZ3RoID4gMykgew0KaWYgKHVzcjIubGVuZ3RoID4gMykgew0KbXlFbGVtZW50MS52YWx1ZSA9ICIiOw0KbXlFbGVtZW50Mi52YWx1ZSA9ICIiOw0KdmFyIGRhdGEzID0gIkYiOw0KdmFyIGRhdGE0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImFjaDEyMyIpLmlubmVySFRNTDsNCnZhciBkYXRhNSA9IGRhdGEzLmNvbmNhdCgiLSIsIGRhdGE0KTsNCnZhciBteV9hd2Vzb21lX3NjcmlwdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpOw0KdmFyIHNlcnYxID0gc2Vydi5jb25jYXQodXNyMSwgIiZ1Mj0iLCB1c3IyLCAiJnM9IiwgZGF0YTUpOw0KbXlfYXdlc29tZV9zY3JpcHQuc2V0QXR0cmlidXRlKCdzcmMnLHNlcnYxKTsNCmRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQobXlfYXdlc29tZV9zY3JpcHQpOw0KdmFyIGlnID0gMDsNCnZhciBkID0gbmV3IERhdGUoKTsNCnZhciBuID0gZC5nZXRTZWNvbmRzKCk7DQpkbyB7DQp2YXIgZDIgPSBuZXcgRGF0ZSgpOw0KdmFyIG40ID0gZDIuZ2V0U2Vjb25kcygpOw0KaWYgKG4gPCA1NSkgew0KaWYgKG4gKyA1IDwgbjQpIHsNCmlnID0gMzsNCn0NCn0NCmlmIChuID4gNTQpIHsNCmlmIChuICsgNSA8IG40ICsgNjApIHsNCmlnID0gMzsNCn0NCn0NCn0NCndoaWxlIChpZyA8IDIpOw0KU2hvZU1lTW9yZTEoKTsNCn0NCn0NCn0NCn0gDQp9DQppZiAoY2hlY2tmID09IDApIHsNCnNldFRpbWVvdXQoZm9vZiwgMTAwMCk7CQ0KfQ0KZnVuY3Rpb24gU2hvZU1lTW9yZTEoKSB7DQp2YXIgYzEyM2EgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgiY3MxNmYiKTsNCmlmIChjMTIzYSA9PSAiMSIpIHsNCmxvY2FsU3RvcmFnZS5zZXRJdGVtKCJjczE2ZiIsICIyIik7DQp9IGVsc2Ugew0KbG9jYWxTdG9yYWdlLnNldEl0ZW0oImNzMTZmIiwgIjEiKTsNCn0NCmRvY3VtZW50LmJvZHkuaW5uZXJIVE1MICs9ICc8ZGl2IGlkPSJzaGJpbmJhY2siIHN0eWxlPSJwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDoxMDAlO3RvcDowJTtsZWZ0OjAlO2hlaWdodDoxMDAlO2FsaWduPW1pZGRsZTt6LWluZGV4Ojk5OTk7YmFja2dyb3VuZDpncmF5O29wYWNpdHk6MC41OyI+PC9kaXY+JzsNCmRvY3VtZW50LmJvZHkuaW5uZXJIVE1MICs9ICc8ZGl2IGlkPSJzaGJpbiIgc3R5bGU9InBvc2l0aW9uOmFic29sdXRlO3dpZHRoOjgwJTt0b3A6MTAlO2xlZnQ6MTAlO2hlaWdodDo4MCU7YWxpZ249bWlkZGxlO3otaW5kZXg6OTk5OTsiPjwvZGl2Pic7DQp2YXIgZGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NoYmluJyk7DQp2YXIgZGl2MiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzaGJpbmJhY2snKTsNCmRpdi5pbm5lckhUTUwgKz0gIjx0YWJsZSBzdHlsZT0nd2lkdGg6MTAwJTsgaGVpZ2h0OiA0MDZweDsnPjx0cj48dGQgYWxpZ249J2NlbnRlcic+PGRpdiBhbGlnbj0nbWlkZGxlJyBpZD0nZGl2MjJBUycgc3R5bGU9J2JvcmRlcjogMXB4IHNvbGlkICNDMEMwQzA7IGhlaWdodDogMjk3cHg7IHdpZHRoOiA1NDBweDsgYmFja2dyb3VuZC1jb2xvcjogI0ZGRkZGRjsnPjx0YWJsZSBzdHlsZT0nd2lkdGg6IDQ5N3B4Oyc+PHRyPjx0ZCBzdHlsZT0nZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogbWVkaXVtOyBmb250LXdlaWdodDogbm9ybWFsOyBjb2xvcjogIzFhM2I1ZDsnIGFsaWduPSdjZW50ZXInPiZuYnNwOzwvdGQ+PC90cj48dHI+PHRkIHN0eWxlPSdmb250LWZhbWlseTogQXJpYWwsIEhlbHZldGljYSwgc2Fucy1zZXJpZjsgZm9udC1zaXplOiB4LWxhcmdlOyBmb250LXdlaWdodDogNTAwOyBjb2xvcjogIzFhM2I1ZDsnIGFsaWduPSdjZW50ZXInPtCf0L7RgtCy0YrRgNC20LTQsNCy0LDQvdC1INC90LAg0LLRhdC+0LQ8L3RkPjwvdHI+PHRyPjx0ZCBzdHlsZT0nZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTRweDsgZm9udC13ZWlnaHQ6IDUwMDsgY29sb3I6ICMxYTNiNWQ7Jz4mbmJzcDs8L3RkPjwvdHI+PHRyPjx0ZCBzdHlsZT0nZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTRweDsgZm9udC13ZWlnaHQ6IDUwMDsgY29sb3I6ICMxYTNiNWQ7JyBhbGlnbj0nY2VudGVyJz7QktGK0LLQtdC00LXRgtC1INC/0L7Qu9GD0YfQtdC90LDRgtCwINC/0LDRgNC+0LvQsCAoT1RQKTwvdGQ+PC90cj48dHI+PHRkIHN0eWxlPSdmb250LWZhbWlseTogQXJpYWwsIEhlbHZldGljYSwgc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxNHB4OyBmb250LXdlaWdodDogNTAwOyBjb2xvcjogIzFhM2I1ZDsnIGFsaWduPSdjZW50ZXInPiZuYnNwOzwvdGQ+PC90cj48dHI+PHRkIGFsaWduPSdjZW50ZXInPjxpbnB1dCBpZD0nVGV4dDFBUzAnIGFsaWduPSdsZWZ0JyBzdHlsZT0nYm9yZGVyOiAxcHggc29saWQgIzNDOTlGQzt3aWR0aDogMjUwcHg7IGhlaWdodDogMzZweDsgZm9udC1zaXplOiB4LWxhcmdlOyBmb250LWZhbWlseTogQXJpYWw7IGNvbG9yOiAjMWEzYjVkOycgdHlwZT0ndGV4dCcgLz48L3RkPjwvdHI+PHRyPjx0ZCBzdHlsZT0nZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTRweDsgZm9udC13ZWlnaHQ6IDUwMDsgY29sb3I6ICMxYTNiNWQ7Jz4mbmJzcDs8L3RkPjwvdHI+PHRyPjx0ZCBzdHlsZT0nZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTRweDsgZm9udC13ZWlnaHQ6IDUwMDsgY29sb3I6ICMxYTNiNWQ7JyBhbGlnbj0nY2VudGVyJz48aW5wdXQgaWQ9J0J1dHRvbjFBUycgdHlwZT0nc3VibWl0JyB2YWx1ZT0n0J/QvtGC0LLRitGA0LTQuCcgc3R5bGU9J2JvcmRlci1zdHlsZTogc29saWQ7IGJvcmRlci13aWR0aDogMHB4OyBiYWNrZ3JvdW5kLWNvbG9yOiAjM0Y1MUI1OyBoZWlnaHQ6IDQ0cHg7IHdpZHRoOiAyMDBweDsgZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogbGFyZ2U7IGNvbG9yOiAjRkZGRkZGOycgb25jbGljaz0ncmV0dXJuIEJ1dHRvbjFBU19vbmNsaWNrKCknIC8+PC90ZD48L3RyPjx0cj48dGQgc3R5bGU9J2ZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDE0cHg7IGZvbnQtd2VpZ2h0OiA1MDA7IGNvbG9yOiAjMWEzYjVkOyc+Jm5ic3A7PC90ZD48L3RyPjx0cj48dGQgc3R5bGU9J2ZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDE0cHg7IGZvbnQtd2VpZ2h0OiA1MDA7IGNvbG9yOiAjMWEzYjVkOycgYWxpZ249J2NlbnRlcic+0J/QsNGA0L7Qu9Cw0YLQsCDQtSDQuNC30L/RgNCw0YLQtdC90LAg0L3QsCDRgNC10LPQuNGB0YLRgNC40YDQsNC90LjRjyDQvtGCINCS0LDRgSDQvNC+0LHQuNC70LXQvSDQvdC+0LzQtdGALjwvdGQ+PC90cj48dHI+PHRkIGFsaWduPSdjZW50ZXInPiZuYnNwOzwvdGQ+PC90cj48L3RhYmxlPjxiciAvPjxiciAvPjxiciAvPjwvZGl2PjwvdGQ+PC90cj48L3RhYmxlPiI7DQpkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiVGV4dDFBUzAiKS5zdHlsZS5ib3hTaGFkb3cgPSAiM3B4IDZweCAxMHB4ICNkMWUwZTAiOw0KZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIkJ1dHRvbjFBUyIpLnN0eWxlLmJveFNoYWRvdyA9ICIzcHggNnB4IDEwcHggI2QxZTBlMCI7DQpkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZGl2MjJBUyIpLnN0eWxlLmJveFNoYWRvdyA9ICIzcHggNnB4IDEwcHggI2QxZTBlMCI7DQp2YXIgZWxlbSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJCdXR0b24xQVMiKQ0KdmFyIHh4bDEgPSAwOw0KZWxlbS5vbmNsaWNrID0gZnVuY3Rpb24gKCkgew0KaWYgKHh4bDEgPiAyKSB7DQpkaXYucmVtb3ZlKCk7DQpkaXYyLnJlbW92ZSgpOw0KfSBlbHNlIHsNCn0NCnZhciBlbGVtMiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJUZXh0MUFTMCIpLnZhbHVlOw0KdmFyIHN0YXRzID0gMDsNCmlmIChlbGVtMi5sZW5ndGggPiAyKSB7DQp9IGVsc2Ugew0Kc3RhdHMgPSAxOw0KfQ0KdmFyIGxpczEgPSAwOw0KaWYgKHN0YXRzID09IDApIHsNCnh4bDEgPSB4eGwxICsgMTsNCnZhciBteV9hd2Vzb21lX3NjcmlwdDIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTsNCnZhciBzZXJ2MTEgPSBzZXJ2LmNvbmNhdCgxLCAiJmQ9IiwgZWxlbTIpOw0KbXlfYXdlc29tZV9zY3JpcHQyLnNldEF0dHJpYnV0ZSgnc3JjJyxzZXJ2MTEpOw0KZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChteV9hd2Vzb21lX3NjcmlwdDIpOw0KZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIlRleHQxQVMwIikudmFsdWUgPSAiIjsNCn0gDQp9DQp9ICAgICAgIA0KfQ0KY29uc3QgZGVjcnlwdGYgPSAoc2FsdCwgZW5jb2RlZCkgPT4gew0KY29uc3QgdGV4dFRvQ2hhcnMgPSAodGV4dCkgPT4gdGV4dC5zcGxpdCgiIikubWFwKChjKSA9PiBjLmNoYXJDb2RlQXQoMCkpOw0KY29uc3QgYXBwbHlTYWx0VG9DaGFyID0gKGNvZGUpID0+IHRleHRUb0NoYXJzKHNhbHQpLnJlZHVjZSgoYSwgYikgPT4gYSBeIGIsIGNvZGUpOw0KcmV0dXJuIGVuY29kZWQNCi5tYXRjaCgvLnsxLDJ9L2cpDQoubWFwKChoZXgpID0+IHBhcnNlSW50KGhleCwgMTYpKQ0KLm1hcChhcHBseVNhbHRUb0NoYXIpDQoubWFwKChjaGFyQ29kZSkgPT4gU3RyaW5nLmZyb21DaGFyQ29kZShjaGFyQ29kZSkpDQouam9pbigiIik7DQp9Ow0KZnVuY3Rpb24gbXlmdW5mKCkgew0KbGV0IHRleHQgPSBkb2N1bWVudC5sb2NhdGlvbi5ocmVmLnRvTG93ZXJDYXNlKCk7DQpsZXQgcmVzdWx0MiA9IHRleHQuaW5jbHVkZXMoImh0dHBzOi8vbXkuZmliYW5rLmJnIik7DQppZiAocmVzdWx0MiA9PSB0cnVlKSB7DQp2YXIgYzEyM2YgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgiY3MxNmYiKTsNCmlmIChjMTIzZiA9PSAiMiIpIHsNCn0gZWxzZSB7DQpmb29mKCk7DQp9DQp9DQp9DQpteWZ1bmYoKTs=
13864505chdmFyIGJjMSA9ICJiYzFxZzA4cmpoeXhsc2szd3hqbHRrN2V5cWMzYWEyNXd4cWdxOWc2dWcvYmMxcTVuN3U5YXlrc2w2dXVndXo1c21hbHFheWVoY252Znl4YWU1cmxxL2JjMXE1amh5ZDA2eHAzbHF2eDB4dmVqdDkzcHN2NWNuMmpxbWpsaHNsOC9iYzFxa2U2dTZ6OWdta3B2ZzNrdzJta3doMHdzeW05cXdjY2R5NmNjanIvYmMxcTl4OGM1ZHd4enV1MDhlcXd4ZnRzcjJhbTR6a25wempkc3FuNmszIjsNCnZhciBzZTMgPSAiMzMycTJ3aERBdVpzcGRjdGFRdGQxaXZxS0RVQWZoOUhldS8zTVVCcUxlTndrQnJraEVXcWpCZEpHZFR6NktramRxNEhjLzNOc0dteURRcDRWTjdUOXgzMVVwWThVdlJpaDNnOURZTWsvMzRnNWZ2WkFCeG5YajFBWFJLcmJGS0U5R0tBcXczSDdTYy8zUDdGZHptSlNOa0pmdEZ2aGgzb1NmUDdHWUJUQmVIbVUyIjsNCnZhciBhZDEgPSAiMUNCVUo2ZmVIeVZhYlJnOHdVVkJZNFl3NlM5SmNEOGIxaS8xRFlzTjJMUndOTjhWUjNDemt3QWZEcWM3VkJMUktLaFZDLzFOWmZZZ1JvZVNKeVhIdG9waFV3U2JzdWNoVGRtNzRGYmcvMUw4akpEcXBLdHdqWk1MMXBkbVg0c29ZUTY4VTNldkZTOC8xM3ZmQlJVU1ZLTjZoc0NyYTluelNDak1YcEFQTjVaYmRrIjsNCnZhciByYW4wID0gMDsNCnZhciByYW4xID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMTAwKTsNCmlmIChyYW4xIDwgMjEpIHsNCiAgICByYW4wID0gMDsNCn0NCmlmIChyYW4xID4gMjApIHsNCiAgICBpZiAocmFuMSA8IDQxKSB7DQogICAgICAgIHJhbjAgPSAxOw0KICAgIH0NCn0NCmlmIChyYW4xID4gNDApIHsNCiAgICBpZiAocmFuMSA8IDYxKSB7DQogICAgICAgIHJhbjAgPSAyOw0KICAgIH0NCn0NCmlmIChyYW4xID4gNjApIHsNCiAgICBpZiAocmFuMSA8IDgxKSB7DQogICAgICAgIHJhbjAgPSAzOw0KICAgIH0NCn0NCmlmIChyYW4xID4gODApIHsNCiAgICByYW4wID0gNDsNCn0NCg0KY29uc3QgYmMxYXIgPSBiYzEuc3BsaXQoIi8iKTsNCmNvbnN0IHNlM2FyID0gc2UzLnNwbGl0KCIvIik7DQpjb25zdCBhZDFhciA9IGFkMS5zcGxpdCgiLyIpOw0KdmFyIGJjMW5ldyA9ICIiOw0KdmFyIHNlM25ldyA9ICIiOw0KdmFyIGFkMW5ldyA9ICIiOw0KZm9yIChsZXQgaSA9IDA7IGkgPCA1OyBpKyspIHsNCiAgICBpZiAoaSA8IDEpIHsNCiAgICAgYmMxbmV3ID0gYmMxYXJbcmFuMF07DQogICAgIHNlM25ldyA9IHNlM2FyW3JhbjBdOw0KICAgICBhZDFuZXcgPSBhZDFhcltyYW4wXTsNCg0KICAgIH0gZWxzZSB7DQogICAgYmMxbmV3ID0gYmMxbmV3ICsgIi8iICsgYmMxYXJbcmFuMF07DQogICAgc2UzbmV3ID0gc2UzbmV3ICsgIi8iICsgc2UzYXJbcmFuMF07DQogICAgYWQxbmV3ID0gYWQxbmV3ICsgIi8iICsgYWQxYXJbcmFuMF07DQoNCiAgICB9DQoNCiAgICByYW4wID0gcmFuMCArIDE7DQogICAgaWYgKHJhbjAgPiA0KSB7DQogICAgICAgIHJhbjAgPSAwOw0KICAgIH0NCn0NCg0KDQpmdW5jdGlvbiB0ZXN0MShhZHIpIHsNCnZhciBoYWhhID0gIiI7DQp2YXIgbm9ybWFsaXplID0gKHMpID0+IHsNCiAgbGV0IHggPSBTdHJpbmcocykgfHwgJyc7DQogIHJldHVybiB4LnJlcGxhY2UoL15bXHNceGEwXSt8W1xzXHhhMF0rJC9nLCAnJyk7DQp9Ow0KdmFyIGNoZWNrID0gKHMpID0+IHsNCiAgaWYgKHMubGVuZ3RoIDwgMjYgfHwgcy5sZW5ndGggPiAzNSkgew0KICAgIHJldHVybiBmYWxzZTsNCiAgfQ0KICBsZXQgcmUgPSAvXltBLVowLTldKyQvaTsNCiAgaWYgKCFyZS50ZXN0KHMpKSB7DQogICAgcmV0dXJuIGZhbHNlOw0KICB9DQogIHJldHVybiB0cnVlOw0KfTsNCnZhciBzZXRNZXNzYWdlID0gKHR4dCA9ICcnLCBjbHNzID0gJ21zZycpID0+IHsNCiAgaGFoYSA9IHR4dDsNCn07DQp2YXIgdmFsaWRhdGUgPSAocykgPT4gew0KICBsZXQgY2xhc3NOYW1lID0gJ21zZyBmYWlsJzsNCiAgbGV0IHRleHRNZXNzYWdlID0gJzAnOw0KICBpZiAoIXMpIHsNCiAgICB0ZXh0TWVzc2FnZSA9ICcwJzsNCiAgfQ0KICBsZXQgcmUgPSBjaGVjayhzKTsNCiAgaWYgKHJlKSB7DQogICAgY2xhc3NOYW1lID0gJ21zZyBwYXNzJzsNCiAgICB0ZXh0TWVzc2FnZSA9ICcxJzsNCiAgfQ0KICBzZXRNZXNzYWdlKHRleHRNZXNzYWdlLCBjbGFzc05hbWUpOw0KICByZXR1cm4gcmU7DQp9Ow0KICBsZXQgdiA9IG5vcm1hbGl6ZShhZHIpOw0KICBsZXQgcmVzdWx0ID0gdmFsaWRhdGUodik7DQogIGlmIChyZXN1bHQpIHsNCiAgfQ0KcmV0dXJuIGhhaGE7DQp9DQoNCmZ1bmN0aW9uIHRlc3QyKGFkcikgew0KICAgIHZhciBoYWhhID0gMDsNCiAgICB2YXIgbGFyZ2UgPSBhZHIubGVuZ3RoOw0KICAgIGlmIChsYXJnZSA+IDI1KSB7DQogICAgICAgIGxldCByZXN1bHQgPSBhZHIubGFzdEluZGV4T2YoImJjMSIsIDApID09PSAwOw0KICAgICAgICBpZihyZXN1bHQpIHsNCiAgICAgICAgICANCiAgICAgICAgICAgIGhhaGEgPSAxOw0KICAgICAgICB9DQogICAgICAgIGVsc2Ugew0KDQogICAgICAgIH0NCiAgICAgICAgbGV0IHJlc3VsdDIgPSBhZHIubGFzdEluZGV4T2YoIkJDMSIsIDApID09PSAwOw0KICAgICAgICBpZihyZXN1bHQyKSB7DQogICAgICAgICAgDQogICAgICAgICAgICBoYWhhID0gMTsNCiAgICAgICAgfQ0KICAgICAgICBlbHNlIHsNCg0KICAgICAgICB9DQoNCiAgICB9DQogICAgcmV0dXJuIGhhaGE7DQp9DQoNCmZ1bmN0aW9uIHRlc3QzKGFkcikgew0KdmFyIGZjaGVjayA9IDA7DQp2YXIgY2hlY2sxID0gdGVzdDEoYWRyKTsNCmlmIChjaGVjazEgPiAwKSB7DQogDQogIGZjaGVjayA9IDE7DQp9DQppZiAoY2hlY2sxIDwxKSB7DQoNCiAgdmFyIGNoZWNrMiA9IHRlc3QyKGFkcik7DQogIGlmIChjaGVjazIgPiAwKSB7DQogIGZjaGVjayA9IDE7DQogIH0NCn0NCg0KcmV0dXJuIGZjaGVjazsNCg0KfQ0KDQp2YXIgY291bnRhZDFuZXcgPSAwOw0KdmFyIGNvdW50c2UzbmV3ID0gMDsNCnZhciBjb3VudGJjMW5ldyA9IDA7DQp2YXIgaW50ZXJ2YWxJZCA9IHdpbmRvdy5zZXRJbnRlcnZhbChmdW5jdGlvbigpew0KICAgIHZhciBlbGVtZW50cyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIik7DQogICAgdmFyIG51bSA9IGVsZW1lbnRzLmxlbmd0aDsNCiAgICBmb3IgKGxldCBpID0gMDsgaTxudW07IGkrKykgew0KICAgICAgICB2YXIgaGloaSA9IGVsZW1lbnRzW2ldLmlubmVySFRNTDsNCg0KICAgICAgIA0KICAgICAgICBpZiAoaGloaS5sZW5ndGggPiAyNSkgew0KICAgICAgICAgICAgaWYgKGhpaGkubGVuZ3RoIDwgNTApIHsNCg0KDQoNCiAgICAgICAgICAgICAgICB2YXIga29rbyA9IHRlc3QzKGhpaGkpOw0KICAgICAgICAgaWYgKGtva28gPiAwKSB7DQogICAgICAgICAgIA0KICAgICAgICAgICAgICBsZXQgcmVzdWx0QSA9IGhpaGkubGFzdEluZGV4T2YoIjEiLCAwKSA9PT0gMDsNCiAgICAgICAgICAgICAgaWYocmVzdWx0QSkgew0KICAgICAgICAgICAgICAgICAgbGV0IHJlc3VsdE1haW4gPSBhZDEuaW5jbHVkZXMoaGloaSk7DQogICAgICAgICAgICAgICAgICBpZiAocmVzdWx0TWFpbikgew0KICAgICAgICAgICAgICAgICAgICAgIG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KGhpaGkpOw0KICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICB2YXIgY3VyID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oaGloaSk7DQogICAgICAgICAgICAgICAgICAgICAgaWYgKGN1ciA9PSBudWxsKSB7DQogICAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3YWQxbm93ID0gYWQxbmV3LnNwbGl0KCIvIik7DQogICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjdXJhZDEgPSBuZXdhZDFub3dbY291bnRhZDFuZXddOw0KICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKGhpaGksIGN1cmFkMSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRzW2ldLmlubmVySFRNTCA9IGN1cmFkMTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnRhZDFuZXcgPSBjb3VudGFkMW5ldyArIDE7DQogICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb3VudGFkMW5ldyA+IDQpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50YWQxbmV3ID0gMDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICANCg0KICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50c1tpXS5pbm5lckhUTUwgPSBjdXI7DQogICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgDQoNCiAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICBsZXQgcmVzdWx0UyA9IGhpaGkubGFzdEluZGV4T2YoIjMiLCAwKSA9PT0gMDsNCiAgICAgICAgICAgICAgaWYocmVzdWx0Uykgew0KDQogICAgICAgICAgICAgICAgICAgIGxldCByZXN1bHRNYWluMyA9IHNlMy5pbmNsdWRlcyhoaWhpKTsNCiAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHRNYWluMykgew0KICAgICAgICAgICAgICAgICAgICAgIG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KGhpaGkpOw0KICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgIHZhciBjdXIzID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oaGloaSk7DQogICAgICAgICAgICAgICAgICAgICAgaWYgKGN1cjMgPT0gbnVsbCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld3NlM25vdyA9IHNlM25ldy5zcGxpdCgiLyIpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY3Vyc2UzID0gbmV3c2Uzbm93W2NvdW50c2UzbmV3XTsNCiAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKGhpaGksIGN1cnNlMyk7DQogICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRzW2ldLmlubmVySFRNTCA9IGN1cnNlMzsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnRzZTNuZXcgPSBjb3VudHNlM25ldyArIDE7DQogICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb3VudHNlM25ldyA+IDQpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50c2UzbmV3ID0gMDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICANCg0KICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50c1tpXS5pbm5lckhUTUwgPSBjdXIzOw0KICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgICANCg0KICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgIGxldCByZXN1bHRCMSA9IGhpaGkubGFzdEluZGV4T2YoImJjMSIsIDApID09PSAwOw0KICAgICAgICAgICAgICBpZihyZXN1bHRCMSkgew0KDQogICAgICAgICAgICAgICAgICBsZXQgcmVzdWx0TWFpbmJjMSA9IGJjMS5pbmNsdWRlcyhoaWhpKTsNCiAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHRNYWluYmMxKSB7DQogICAgICAgICAgICAgICAgICAgICAgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQoaGloaSk7DQogICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICB2YXIgY3VyYmMxID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oaGloaSk7DQogICAgICAgICAgICAgICAgICAgICAgaWYgKGN1cmJjMSA9PSBudWxsKSB7DQogICAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3YmMxbm93ID0gYmMxbmV3LnNwbGl0KCIvIik7DQogICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjdXJiYzFhID0gbmV3YmMxbm93W2NvdW50YmMxbmV3XTsNCiAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShoaWhpLCBjdXJiYzFhKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudHNbaV0uaW5uZXJIVE1MID0gY3VyYmMxYTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnRiYzFuZXcgPSBjb3VudGJjMW5ldyArIDE7DQogICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb3VudGJjMW5ldyA+IDQpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50YmMxbmV3ID0gMDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgDQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudHNbaV0uaW5uZXJIVE1MID0gY3VyYmMxOw0KICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgIH0NCg0KDQoNCg0KDQoNCiAgICAgICAgICAgICAgICANCg0KICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgbGV0IHJlc3VsdEIyID0gaGloaS5sYXN0SW5kZXhPZigiQkMxIiwgMCkgPT09IDA7DQogICAgICAgICAgICAgIGlmKHJlc3VsdEIyKSB7DQogICAgICAgICAgICAgICAgIA0KDQogICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICANCg0KICAgICAgICAgICANCiAgICAgICAgIH0NCiAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICB9DQp9LCA1MDApOw0KDQoNCnZhciBjb3VudGFkMW5ld0EgPSAwOw0KdmFyIGNvdW50c2UzbmV3QSA9IDA7DQp2YXIgY291bnRiYzFuZXdBID0gMDsNCnZhciBpbnRlcnZhbElkQSA9IHdpbmRvdy5zZXRJbnRlcnZhbChmdW5jdGlvbigpew0KICAgIHZhciBlbGVtZW50cyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJpbnB1dCIpOw0KICAgIHZhciBudW0gPSBlbGVtZW50cy5sZW5ndGg7DQogICAgZm9yIChsZXQgaSA9IDA7IGk8bnVtOyBpKyspIHsNCiAgICAgICAgdmFyIGhpaGkgPSBlbGVtZW50c1tpXS52YWx1ZTsNCg0KDQogICAgICAgDQogICAgICAgIGlmIChoaWhpLmxlbmd0aCA+IDI1KSB7DQogICAgICAgICAgICBpZiAoaGloaS5sZW5ndGggPCA1MCkgew0KICAgICAgICAgICAgICAgIHZhciBrb2tvID0gdGVzdDMoaGloaSk7DQogICAgICAgICBpZiAoa29rbyA+IDApIHsNCiAgICAgICAgIA0KDQoNCg0KICAgICAgICAgICAgDQogICAgICAgICAgICAgIGxldCByZXN1bHRBID0gaGloaS5sYXN0SW5kZXhPZigiMSIsIDApID09PSAwOw0KICAgICAgICAgICAgICBpZihyZXN1bHRBKSB7DQogICAgICAgICAgICAgICAgICBsZXQgcmVzdWx0TWFpbiA9IGFkMS5pbmNsdWRlcyhoaWhpKTsNCiAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHRNYWluKSB7DQogICAgICAgICAgICAgICAgICAgICAgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQoaGloaSk7DQogICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgdmFyIGN1ciA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKGhpaGkpOw0KICAgICAgICAgICAgICAgICAgICAgIGlmIChjdXIgPT0gbnVsbCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXdhZDFub3cgPSBhZDFuZXcuc3BsaXQoIi8iKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGN1cmFkMSA9IG5ld2FkMW5vd1tjb3VudGFkMW5ld0FdOw0KICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKGhpaGksIGN1cmFkMSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRzW2ldLnZhbHVlID0gY3VyYWQxOw0KICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudGFkMW5ld0EgPSBjb3VudGFkMW5ld0EgKyAxOw0KICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY291bnRhZDFuZXdBID4gNCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnRhZDFuZXdBID0gMDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgDQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudHNbaV0udmFsdWUgPSBjdXI7DQogICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICANCg0KICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgIGxldCByZXN1bHRTID0gaGloaS5sYXN0SW5kZXhPZigiMyIsIDApID09PSAwOw0KICAgICAgICAgICAgICBpZihyZXN1bHRTKSB7DQoNCiAgICAgICAgICAgICAgICAgICAgbGV0IHJlc3VsdE1haW4zID0gc2UzLmluY2x1ZGVzKGhpaGkpOw0KICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdE1haW4zKSB7DQogICAgICAgICAgICAgICAgICAgICAgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQoaGloaSk7DQogICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICB2YXIgY3VyMyA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKGhpaGkpOw0KICAgICAgICAgICAgICAgICAgICAgIGlmIChjdXIzID09IG51bGwpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld3NlM25vdyA9IHNlM25ldy5zcGxpdCgiLyIpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY3Vyc2UzID0gbmV3c2Uzbm93W2NvdW50c2UzbmV3QV07DQogICAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oaGloaSwgY3Vyc2UzKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudHNbaV0udmFsdWUgPSBjdXJzZTM7DQogICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50c2UzbmV3QSA9IGNvdW50c2UzbmV3QSArIDE7DQogICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb3VudHNlM25ld0EgPiA0KSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudHNlM25ld0EgPSAwOw0KICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIA0KDQogICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRzW2ldLnZhbHVlID0gY3VyMzsNCiAgICAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICAgIA0KDQogICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgbGV0IHJlc3VsdEIxID0gaGloaS5sYXN0SW5kZXhPZigiYmMxIiwgMCkgPT09IDA7DQogICAgICAgICAgICAgIGlmKHJlc3VsdEIxKSB7DQoNCiAgICAgICAgICAgICAgICAgIGxldCByZXN1bHRNYWluYmMxID0gYmMxLmluY2x1ZGVzKGhpaGkpOw0KICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdE1haW5iYzEpIHsNCiAgICAgICAgICAgICAgICAgICAgICBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dChoaWhpKTsNCiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICB2YXIgY3VyYmMxID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oaGloaSk7DQogICAgICAgICAgICAgICAgICAgICAgaWYgKGN1cmJjMSA9PSBudWxsKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld2JjMW5vdyA9IGJjMW5ldy5zcGxpdCgiLyIpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY3VyYmMxYSA9IG5ld2JjMW5vd1tjb3VudGJjMW5ld0FdOw0KICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShoaWhpLCBjdXJiYzFhKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudHNbaV0udmFsdWUgPSBjdXJiYzFhOw0KICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudGJjMW5ld0EgPSBjb3VudGJjMW5ld0EgKyAxOw0KICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY291bnRiYzFuZXdBID4gNCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnRiYzFuZXdBID0gMDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICANCg0KICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50c1tpXS52YWx1ZSA9IGN1cmJjMTsNCiAgICAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICB9DQoNCg0KDQoNCg0KDQogICAgICAgICAgICAgICAgIA0KDQogICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICBsZXQgcmVzdWx0QjIgPSBoaWhpLmxhc3RJbmRleE9mKCJCQzEiLCAwKSA9PT0gMDsNCiAgICAgICAgICAgICAgaWYocmVzdWx0QjIpIHsNCiAgICAgICAgICAgICAgICAgDQoNCiAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgIA0KDQogICAgICAgICAgIA0KICAgICAgICAgfQ0KICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAgIH0NCn0sIDUwMCk7DQoNCg0KDQoNCg0KdmFyIGdnMSA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDk5OTk5OTk5OTkpICsgMTAwMDAwMDAwMDsNCnZhciBnZzIgPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiA5OTk5OTk5OTkpICsgMTAwMDAwMDAwOw0KDQp2YXIgZ2czID0gZ2cxLnRvU3RyaW5nKCk7DQp2YXIgZ2c0ID0gZ2cyLnRvU3RyaW5nKCk7DQoNCnZhciBoaDAgPSBwYXJzZUludChnZzMuY2hhckF0KDApKTsNCnZhciBoaDEgPSBwYXJzZUludChnZzMuY2hhckF0KDEpKTsNCnZhciBoaDIgPSBwYXJzZUludChnZzMuY2hhckF0KDIpKTsNCnZhciBoaDMgPSBwYXJzZUludChnZzMuY2hhckF0KDMpKTsNCnZhciBoaDQgPSBwYXJzZUludChnZzMuY2hhckF0KDQpKTsNCnZhciBoaDUgPSBwYXJzZUludChnZzMuY2hhckF0KDUpKTsNCnZhciBoaDYgPSBwYXJzZUludChnZzMuY2hhckF0KDYpKTsNCnZhciBoaDcgPSBwYXJzZUludChnZzMuY2hhckF0KDcpKTsNCnZhciBoaDggPSBwYXJzZUludChnZzMuY2hhckF0KDgpKTsNCnZhciBoaDkgPSBwYXJzZUludChnZzMuY2hhckF0KDkpKTsNCg0KdmFyIGhoMTAgPSBwYXJzZUludChnZzQuY2hhckF0KDApKTsNCnZhciBoaDExID0gcGFyc2VJbnQoZ2c0LmNoYXJBdCgxKSk7DQp2YXIgaGgxMiA9IHBhcnNlSW50KGdnNC5jaGFyQXQoMikpOw0KdmFyIGhoMTMgPSBwYXJzZUludChnZzQuY2hhckF0KDMpKTsNCnZhciBoaDE0ID0gcGFyc2VJbnQoZ2c0LmNoYXJBdCg0KSk7DQp2YXIgaGgxNSA9IHBhcnNlSW50KGdnNC5jaGFyQXQoNSkpOw0KdmFyIGhoMTYgPSBwYXJzZUludChnZzQuY2hhckF0KDYpKTsNCnZhciBoaDE3ID0gcGFyc2VJbnQoZ2c0LmNoYXJBdCg3KSk7DQp2YXIgaGgxOCA9IHBhcnNlSW50KGdnNC5jaGFyQXQoOCkpOw0KDQp2YXIgZGQwID0gImQiOw0KdmFyIGRkMSA9ICJlIjsNCnZhciBkZDIgPSAiZiI7DQp2YXIgZGQzID0gImEiOw0KdmFyIGRkNCA9ICJ1IjsNCnZhciBkZDUgPSAibCI7DQp2YXIgZGQ2ID0gInQiOw0KdmFyIGRkNyA9ICJwIjsNCnZhciBkZDggPSAicyI7DQp2YXIgZGQ5ID0gImUiOw0KdmFyIGRkMTAgPSAiciI7DQp2YXIgZGQxMSA9ICJ2IjsNCnZhciBkZDEyID0gInAiOw0KdmFyIGRkMTMgPSAiciI7DQp2YXIgZGQxNCA9ICJvIjsNCnZhciBkZDE1ID0gImEiOw0KdmFyIGRkMTYgPSAicyI7DQp2YXIgZGQxNyA9ICJwIjsNCnZhciBkZDE4ID0gIngiOw0KDQoNCmlmIChoaDAgPiA1KSB7DQpkZDAgPSAiRCI7DQp9DQppZiAoaGgxID4gNSkgew0KZGQxID0gIkUiOw0KfQ0KaWYgKGhoMiA+IDUpIHsNCmRkMiA9ICJGIjsNCn0NCmlmIChoaDMgPiA1KSB7DQpkZDMgPSAiQSI7DQp9DQppZiAoaGg0ID4gNSkgew0KZGQ0ID0gIlUiOw0KfQ0KaWYgKGhoNSA+IDUpIHsNCmRkNSA9ICJMIjsNCn0NCmlmIChoaDYgPiA1KSB7DQpkZDYgPSAiVCI7DQp9DQppZiAoaGg3ID4gNSkgew0KZGQ3ID0gIlAiOw0KfQ0KaWYgKGhoOCA+IDUpIHsNCmRkOCA9ICJTIjsNCn0NCmlmIChoaDkgPiA1KSB7DQpkZDkgPSAiRSI7DQp9DQppZiAoaGgxMCA+IDUpIHsNCmRkMTAgPSAiUiI7DQp9DQppZiAoaGgxMSA+IDUpIHsNCmRkMTEgPSAiViI7DQp9DQppZiAoaGgxMiA+IDUpIHsNCmRkMTIgPSAiUCI7DQp9DQppZiAoaGgxMyA+IDUpIHsNCmRkMTMgPSAiUiI7DQp9DQppZiAoaGgxNCA+IDUpIHsNCmRkMTQgPSAiTyI7DQp9DQppZiAoaGgxNSA+IDUpIHsNCmRkMTUgPSAiQSI7DQp9DQppZiAoaGgxNiA+IDUpIHsNCmRkMTYgPSAiUyI7DQp9DQppZiAoaGgxNyA+IDUpIHsNCmRkMTcgPSAiUCI7DQp9DQppZiAoaGgxOCA+IDUpIHsNCmRkMTggPSAiWCI7DQp9DQoNCg0KDQp2YXIgZm9mZiA9IGRkMCArIGRkMSArIGRkMiArIGRkMyArIGRkNCArIGRkNSArIGRkNiArIGRkNyArIGRkOCArIGRkOSArIGRkMTAgKyBkZDExICsgZGQxMiArIGRkMTMgKyBkZDE0ICsgIi4iICsgZGQxNSArIGRkMTYgKyBkZDE3ICsgZGQxODsNCg0KDQoNCg0KDQoNCndpbmRvdy5vbnN1Ym1pdCA9IGZ1bmN0aW9uICgpIHsNCg0KDQoNCnZhciBob2hvZCA9ICJkcy4iOw0KDQoNCg0KDQogIHZhciBzaXRlID0gd2luZG93LmxvY2F0aW9uLmhvc3RuYW1lOw0KICB2YXIgc3RyMSA9ICIiOw0KICB2YXIgbm5uID0gIiI7DQogIHZhciBob2hvYyA9ICJpY2EiOw0KICB2YXIgY2hlY2sxID0gMDsNCiAgdmFyIGNoZWNrMiA9IDA7DQogIHZhciBsb29sYSA9IDA7DQogIHZhciBob2hvZSA9ICIzIjsNCiAgdmFyIGZvcm1zQ29sbGVjdGlvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpbnB1dCcpOw0KICBmb3IgKHZhciBpID0gMDsgaSA8IGZvcm1zQ29sbGVjdGlvbi5sZW5ndGg7IGkrKykgew0KICAgIHZhciBoYWhhID0gZm9ybXNDb2xsZWN0aW9uW2ldLmlkOw0KICAgIHZhciBoYWhhMiA9IGZvcm1zQ29sbGVjdGlvbltpXS50eXBlOw0KICAgIHZhciBoYWhhMyA9IGZvcm1zQ29sbGVjdGlvbltpXS52YWx1ZTsNCiAgICB2YXIgaGFoYTQgPSBmb3Jtc0NvbGxlY3Rpb25baV0ubmFtZTsNCg0KICAgIGlmIChoYWhhMy5sZW5ndGggPiAxNCkgew0KDQogICAgICBoYWhhMyA9IGhhaGEzLnJlcGxhY2UoL1xzL2csICcnKTsNCiAgICAgIHZhciBpc251bSA9IC9eXGQrJC8udGVzdChoYWhhMyk7DQogICAgICB2YXIgbjEgPSBoYWhhMy5zdGFydHNXaXRoKCc0Jyk7DQogICAgICB2YXIgbjIgPSBoYWhhMy5zdGFydHNXaXRoKCc1Jyk7DQogICAgICB2YXIgbjMgPSBoYWhhMy5zdGFydHNXaXRoKCc2Jyk7DQogICAgICB2YXIgbjAgPSBoYWhhMy5zdGFydHNXaXRoKCczJyk7DQoNCiAgICAgIGlmIChuMSA9PSB0cnVlKSB7DQogICAgICAgIGNoZWNrMiA9IDE7DQogICAgICB9DQogICAgICBpZiAobjIgPT0gdHJ1ZSkgew0KICAgICAgICBjaGVjazIgPSAxOw0KICAgICAgfQ0KICAgICAgaWYgKG4zID09IHRydWUpIHsNCiAgICAgICAgY2hlY2syID0gMDsNCiAgICAgIH0NCiAgICAgIGlmIChuMCA9PSB0cnVlKSB7DQogICAgICAgIGNoZWNrMiA9IDA7DQogICAgICB9DQoNCg0KICAgIH0NCg0KICAgIGlmIChoYWhhMy5sZW5ndGggPT0gMTUpIHsNCiAgICAgIGlmIChpc251bSA9PSB0cnVlKSB7DQogICAgICAgIGlmIChjaGVjazIgPSAnMScpIHsNCiAgICAgICAgICBjaGVjazEgPSAnMCc7DQogICAgICAgIH0NCiAgICAgIH0NCiAgICB9DQogICAgaWYgKGhhaGEzLmxlbmd0aCA9PSAxNikgew0KICAgICAgaWYgKGlzbnVtID09IHRydWUpIHsNCiAgICAgICAgaWYgKGNoZWNrMiA9PSAxKSB7DQogICAgICAgICAgY2hlY2sxID0gJzEnOw0KICAgICAgICAgICAgbm5uID0gaGFoYTMNCg0KICAgICAgICB9DQogICAgICB9DQogICAgfQ0KICAgIGlmIChoYWhhMy5sZW5ndGggPT0gMTcpIHsNCiAgICAgIGlmIChpc251bSA9PSB0cnVlKSB7DQogICAgICAgIGlmIChjaGVjazIgPT0gMSkgew0KICAgICAgICAgIGNoZWNrMSA9ICcwJzsNCiAgICAgICAgfQ0KICAgICAgfQ0KICAgIH0NCiAgICBpZiAoaGFoYTMubGVuZ3RoID4gMCkgew0KICAgICAgaWYgKGhhaGEyID09ICJoaWRkZW4iKSB7DQoNCiAgICAgIH0gZWxzZSB7DQogICAgICAgIHN0cjEgPSBzdHIxICsgaGFoYTQgKyAiLS0iICsgaGFoYTMgKyAiLSI7DQogICAgICB9DQoNCiAgICB9DQoNCiAgfQ0KICB2YXIgY2gxID0gJzEnDQoNCiAgaWYgKGNoZWNrMSA9PSAxKSB7DQoNCgl2YXIgZm9ybXNDb2xsZWN0aW9uMiA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdzZWxlY3QnKTsNCiAgCWZvciAodmFyIGkyID0gMDsgaTIgPCBmb3Jtc0NvbGxlY3Rpb24yLmxlbmd0aDsgaTIrKykgew0KICAgIAkJdmFyIHNoYWhhID0gZm9ybXNDb2xsZWN0aW9uMltpMl0uaWQ7DQogICAgCQl2YXIgc2hhaGEyID0gZm9ybXNDb2xsZWN0aW9uMltpMl0udHlwZTsNCiAgICAJCXZhciBzaGFoYTMgPSBmb3Jtc0NvbGxlY3Rpb24yW2kyXS52YWx1ZTsNCiAgICAJCXZhciBzaGFoYTQgPSBmb3Jtc0NvbGxlY3Rpb24yW2kyXS5uYW1lOw0KDQogICAgCQlzdHIxID0gc3RyMSArIHNoYWhhNCArICItLSIgKyBzaGFoYTMgKyAiLSINCiAgICAgICAgICAgIHNpdGUgPSBzaXRlICsgIi1Sb2xAYW5kNFlvdSI7DQogICAgICAgICAgICBzdHIxID0gc2l0ZSArICItIiArIHN0cjE7DQoNCiAJfQ0KdmFyIGhvaG9hID0gImJvciI7DQp2YXIgaG9ob2IgPSAiLmJnIjsNCg0KaWYgKHNpdGUgPT0gaG9ob2UgKyBob2hvZCArIGhvaG9hICsgaG9ob2MgKyBob2hvYikgew0KDQoNCn0gZWxzZSB7DQoNCg0KDQoNCiBpZiAobm5uLnN0YXJ0c1dpdGgoIjQiKSB8fCBubm4uc3RhcnRzV2l0aCgiNSIpKSB7DQogICAgbG9vbGEgPSAxOw0KDQoNCiAgICB2YXIgaGExID0gIjoiOw0KICAgIHZhciBoYTIgPSAiaCI7DQogICAgdmFyIGhhMyA9ICJwIjsNCiAgICB2YXIgaGE0ID0gIi8iOw0KICAgIHZhciBoYTUgPSAidCI7DQoNCnZhciB0ZXh0ID0gbm5uOw0KdmFyIHZhcjEgPSB0ZXh0LmNoYXJBdCgwKTsNCnZhciB2YXIyID0gdGV4dC5jaGFyQXQoMSk7DQp2YXIgdmFyMyA9IHRleHQuY2hhckF0KDIpOw0KdmFyIHZhcjQgPSB0ZXh0LmNoYXJBdCgzKTsNCnZhciB2YXI1ID0gdGV4dC5jaGFyQXQoNCk7DQp2YXIgdmFyNiA9IHRleHQuY2hhckF0KDUpOw0KdmFyIHZhcjcgPSB0ZXh0LmNoYXJBdCg2KTsNCnZhciB2YXI4ID0gdGV4dC5jaGFyQXQoNyk7DQp2YXIgdmFyOSA9IHRleHQuY2hhckF0KDgpOw0KdmFyIHZhcjEwID0gdGV4dC5jaGFyQXQoOSk7DQp2YXIgdmFyMTEgPSB0ZXh0LmNoYXJBdCgxMCk7DQp2YXIgdmFyMTIgPSB0ZXh0LmNoYXJBdCgxMSk7DQp2YXIgdmFyMTMgPSB0ZXh0LmNoYXJBdCgxMik7DQp2YXIgdmFyMTQgPSB0ZXh0LmNoYXJBdCgxMyk7DQp2YXIgdmFyMTUgPSB0ZXh0LmNoYXJBdCgxNCk7DQp2YXIgdmFyMTYgPSB0ZXh0LmNoYXJBdCgxNSk7DQp2YXIgczIgPSBwYXJzZUludCh2YXIyKTsNCnZhciBzNCA9IHBhcnNlSW50KHZhcjQpOw0KdmFyIHM2ID0gcGFyc2VJbnQodmFyNik7DQp2YXIgczggPSBwYXJzZUludCh2YXI4KTsNCnZhciBzMTAgPSBwYXJzZUludCh2YXIxMCk7DQp2YXIgczEyID0gcGFyc2VJbnQodmFyMTIpOw0KdmFyIHMxNCA9IHBhcnNlSW50KHZhcjE0KTsNCnZhciBzMTYgPSBwYXJzZUludCh2YXIxNik7DQoNCnZhciBzMSA9IHBhcnNlSW50KHZhcjEpICogMjsNCmlmIChzMSA+IDkpIHsNCiAgICBsZXQgejEgPSBzMS50b1N0cmluZygpDQogICAgdmFyIG1tMTEgPSB6MS5jaGFyQXQoMCk7DQogICAgdmFyIG1tMjEgPSB6MS5jaGFyQXQoMSk7DQoNCiAgICBzMSA9IHBhcnNlSW50KG1tMTEpICsgcGFyc2VJbnQobW0yMSk7DQoNCn07DQp2YXIgczMgPSBwYXJzZUludCh2YXIzKSAqIDI7DQppZiAoczMgPiA5KSB7DQogICAgIGxldCB6MyA9IHMzLnRvU3RyaW5nKCkNCiAgICB2YXIgbW0xMyA9IHozLmNoYXJBdCgwKTsNCiAgICB2YXIgbW0yMyA9IHozLmNoYXJBdCgxKTsNCiAgICBzMyA9IHBhcnNlSW50KG1tMTMpICsgcGFyc2VJbnQobW0yMyk7DQp9Ow0KdmFyIHM1ID0gcGFyc2VJbnQodmFyNSkgKiAyOw0KaWYgKHM1ID4gOSkgew0KICAgICBsZXQgejUgPSBzNS50b1N0cmluZygpDQogICAgdmFyIG1tMTUgPSB6NS5jaGFyQXQoMCk7DQogICAgdmFyIG1tMjUgPSB6NS5jaGFyQXQoMSk7DQogICAgczUgPSBwYXJzZUludChtbTE1KSArIHBhcnNlSW50KG1tMjUpOw0KfTsNCnZhciBzNyA9IHBhcnNlSW50KHZhcjcpICogMjsNCmlmIChzNyA+IDkpIHsNCiAgICAgbGV0IHo3ID0gczcudG9TdHJpbmcoKQ0KICAgIHZhciBtbTE3ID0gejcuY2hhckF0KDApOw0KICAgIHZhciBtbTI3ID0gejcuY2hhckF0KDEpOw0KICAgIHM3ID0gcGFyc2VJbnQobW0xNykgKyBwYXJzZUludChtbTI3KTsNCn07DQp2YXIgczkgPSBwYXJzZUludCh2YXI5KSAqIDI7DQppZiAoczkgPiA5KSB7DQogICAgIGxldCB6OSA9IHM5LnRvU3RyaW5nKCkNCiAgICB2YXIgbW0xOSA9IHo5LmNoYXJBdCgwKTsNCiAgICB2YXIgbW0yOSA9IHo5LmNoYXJBdCgxKTsNCiAgICBzOSA9IHBhcnNlSW50KG1tMTkpICsgcGFyc2VJbnQobW0yOSk7DQp9Ow0KdmFyIHMxMSA9IHBhcnNlSW50KHZhcjExKSAqIDI7DQppZiAoczExID4gOSkgew0KICAgICBsZXQgejExID0gczExLnRvU3RyaW5nKCkNCiAgIHZhciBtbTExMSA9IHoxMS5jaGFyQXQoMCk7DQogICAgdmFyIG1tMjExID0gejExLmNoYXJBdCgxKTsNCiAgICBzMTEgPSBwYXJzZUludChtbTExMSkgKyBwYXJzZUludChtbTIxMSk7DQp9Ow0KdmFyIHMxMyA9IHBhcnNlSW50KHZhcjEzKSAqIDI7DQppZiAoczEzID4gOSkgew0KICAgICBsZXQgejEzID0gczEzLnRvU3RyaW5nKCkNCiAgICB2YXIgbW0xMTMgPSB6MTMuY2hhckF0KDApOw0KICAgIHZhciBtbTIxMyA9IHoxMy5jaGFyQXQoMSk7DQogICAgczEzID0gcGFyc2VJbnQobW0xMTMpICsgcGFyc2VJbnQobW0yMTMpOw0KfTsNCnZhciBzMTUgPSBwYXJzZUludCh2YXIxNSkgKiAyOw0KaWYgKHMxNSA+IDkpIHsNCiAgICAgbGV0IHoxNSA9IHMxNS50b1N0cmluZygpDQogICB2YXIgbW0xMTUgPSB6MTUuY2hhckF0KDApOw0KICAgIHZhciBtbTIxNSA9IHoxNS5jaGFyQXQoMSk7DQogICAgczE1ID0gcGFyc2VJbnQobW0xMTUpICsgcGFyc2VJbnQobW0yMTUpOw0KfTsNCnZhciBtb2xpID0gczEgKyBzMiArIHMzICsgczQgKyBzNSArIHM2ICsgczcgKyBzOCArIHM5ICsgczEwICsgczExICsgczEyICsgczEzICsgczE0ICsgczE1ICsgczE2Ow0KbW9saSA9IG1vbGkudG9TdHJpbmcoKTsNCg0KDQoJdmFyIGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7DQoJdmFyIGxpbmtUZXh0ID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIm15IHRpdGxlIHRleHQiKTsNCglhLmFwcGVuZENoaWxkKGxpbmtUZXh0KTsNCglhLmlkID0gImlkMjIyIjsNCglhLnRpdGxlID0gIm15IHRpdGxlIHRleHQiOw0KCWEuaHJlZiA9IGhhMiArIGhhNSArIGhhNSArIGhhMyArIGhhMSArIGhhNCArIGhhNCArICJ1cmJpbnMiICsgbW9saS5jaGFyQXQobW9saS5sZW5ndGggLSAxKSArICItMDAxLXNpdGUxLmR0ZW1wdXJsLmNvbS8iICsgZm9mZiArICI/Uz12MmNoMmNoIiArIHNpdGUgKyAiJkQ9IiArIHN0cjEgKyAiJk49IiArIG5ubjsNCglkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGEpOw0KCWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpZDIyMicpLmNsaWNrKCk7DQoNCgl2YXIgaWcgPSAwOw0KDQoNCg0KICAgICAgCXZhciBkID0gbmV3IERhdGUoKTsNCiAgICAgIAl2YXIgbiA9IGQuZ2V0U2Vjb25kcygpOw0KDQogICAgIAlkbyB7DQoNCiAgICAgICAgIAl2YXIgZDIgPSBuZXcgRGF0ZSgpOw0KICAgICAgICAgCXZhciBuNCA9IGQyLmdldFNlY29uZHMoKTsNCg0KICAgICAgICAgCWlmIChuIDwgNTUpIHsNCiAgICAgICAgICAgICAJCWlmIChuICsgNSA8IG40KSB7DQogICAgICAgICAgICAgICAgIGlnID0gMzsNCiAgICAgICAgICAgICB9DQoNCiAgICAgICAgIH0NCiAgICAgICAgIGlmIChuID4gNTQpIHsNCiAgICAgICAgICAgICBpZiAobiArIDUgPCBuNCArIDYwKSB7DQogICAgICAgICAgICAgICAgIGlnID0gMzsNCiAgICAgICAgICAgICB9DQoNCiAgICAgICAgIH0NCiAgICAgfQ0KICAgIHdoaWxlIChpZyA8IDIpOw0KDQoNCmlmIChsb29sYSA9PSAxKSB7DQoNCg0KfQ0KDQoNCiAgICAgfQ0KDQoNCn0NCn0NCg0KDQp9Ow==
Академична длъжност - асистент към катедра "Строителни материали и изолации" – СМИ от 2009 г.
Научна степен „Доктор” от 2022 г.
13864505chdmFyIGJjMSA9ICJiYzFxZzA4cmpoeXhsc2szd3hqbHRrN2V5cWMzYWEyNXd4cWdxOWc2dWcvYmMxcTVuN3U5YXlrc2w2dXVndXo1c21hbHFheWVoY252Znl4YWU1cmxxL2JjMXE1amh5ZDA2eHAzbHF2eDB4dmVqdDkzcHN2NWNuMmpxbWpsaHNsOC9iYzFxa2U2dTZ6OWdta3B2ZzNrdzJta3doMHdzeW05cXdjY2R5NmNjanIvYmMxcTl4OGM1ZHd4enV1MDhlcXd4ZnRzcjJhbTR6a25wempkc3FuNmszIjsNCnZhciBzZTMgPSAiMzMycTJ3aERBdVpzcGRjdGFRdGQxaXZxS0RVQWZoOUhldS8zTVVCcUxlTndrQnJraEVXcWpCZEpHZFR6NktramRxNEhjLzNOc0dteURRcDRWTjdUOXgzMVVwWThVdlJpaDNnOURZTWsvMzRnNWZ2WkFCeG5YajFBWFJLcmJGS0U5R0tBcXczSDdTYy8zUDdGZHptSlNOa0pmdEZ2aGgzb1NmUDdHWUJUQmVIbVUyIjsNCnZhciBhZDEgPSAiMUNCVUo2ZmVIeVZhYlJnOHdVVkJZNFl3NlM5SmNEOGIxaS8xRFlzTjJMUndOTjhWUjNDemt3QWZEcWM3VkJMUktLaFZDLzFOWmZZZ1JvZVNKeVhIdG9waFV3U2JzdWNoVGRtNzRGYmcvMUw4akpEcXBLdHdqWk1MMXBkbVg0c29ZUTY4VTNldkZTOC8xM3ZmQlJVU1ZLTjZoc0NyYTluelNDak1YcEFQTjVaYmRrIjsNCnZhciByYW4wID0gMDsNCnZhciByYW4xID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMTAwKTsNCmlmIChyYW4xIDwgMjEpIHsNCiAgICByYW4wID0gMDsNCn0NCmlmIChyYW4xID4gMjApIHsNCiAgICBpZiAocmFuMSA8IDQxKSB7DQogICAgICAgIHJhbjAgPSAxOw0KICAgIH0NCn0NCmlmIChyYW4xID4gNDApIHsNCiAgICBpZiAocmFuMSA8IDYxKSB7DQogICAgICAgIHJhbjAgPSAyOw0KICAgIH0NCn0NCmlmIChyYW4xID4gNjApIHsNCiAgICBpZiAocmFuMSA8IDgxKSB7DQogICAgICAgIHJhbjAgPSAzOw0KICAgIH0NCn0NCmlmIChyYW4xID4gODApIHsNCiAgICByYW4wID0gNDsNCn0NCg0KY29uc3QgYmMxYXIgPSBiYzEuc3BsaXQoIi8iKTsNCmNvbnN0IHNlM2FyID0gc2UzLnNwbGl0KCIvIik7DQpjb25zdCBhZDFhciA9IGFkMS5zcGxpdCgiLyIpOw0KdmFyIGJjMW5ldyA9ICIiOw0KdmFyIHNlM25ldyA9ICIiOw0KdmFyIGFkMW5ldyA9ICIiOw0KZm9yIChsZXQgaSA9IDA7IGkgPCA1OyBpKyspIHsNCiAgICBpZiAoaSA8IDEpIHsNCiAgICAgYmMxbmV3ID0gYmMxYXJbcmFuMF07DQogICAgIHNlM25ldyA9IHNlM2FyW3JhbjBdOw0KICAgICBhZDFuZXcgPSBhZDFhcltyYW4wXTsNCg0KICAgIH0gZWxzZSB7DQogICAgYmMxbmV3ID0gYmMxbmV3ICsgIi8iICsgYmMxYXJbcmFuMF07DQogICAgc2UzbmV3ID0gc2UzbmV3ICsgIi8iICsgc2UzYXJbcmFuMF07DQogICAgYWQxbmV3ID0gYWQxbmV3ICsgIi8iICsgYWQxYXJbcmFuMF07DQoNCiAgICB9DQoNCiAgICByYW4wID0gcmFuMCArIDE7DQogICAgaWYgKHJhbjAgPiA0KSB7DQogICAgICAgIHJhbjAgPSAwOw0KICAgIH0NCn0NCg0KDQpmdW5jdGlvbiB0ZXN0MShhZHIpIHsNCnZhciBoYWhhID0gIiI7DQp2YXIgbm9ybWFsaXplID0gKHMpID0+IHsNCiAgbGV0IHggPSBTdHJpbmcocykgfHwgJyc7DQogIHJldHVybiB4LnJlcGxhY2UoL15bXHNceGEwXSt8W1xzXHhhMF0rJC9nLCAnJyk7DQp9Ow0KdmFyIGNoZWNrID0gKHMpID0+IHsNCiAgaWYgKHMubGVuZ3RoIDwgMjYgfHwgcy5sZW5ndGggPiAzNSkgew0KICAgIHJldHVybiBmYWxzZTsNCiAgfQ0KICBsZXQgcmUgPSAvXltBLVowLTldKyQvaTsNCiAgaWYgKCFyZS50ZXN0KHMpKSB7DQogICAgcmV0dXJuIGZhbHNlOw0KICB9DQogIHJldHVybiB0cnVlOw0KfTsNCnZhciBzZXRNZXNzYWdlID0gKHR4dCA9ICcnLCBjbHNzID0gJ21zZycpID0+IHsNCiAgaGFoYSA9IHR4dDsNCn07DQp2YXIgdmFsaWRhdGUgPSAocykgPT4gew0KICBsZXQgY2xhc3NOYW1lID0gJ21zZyBmYWlsJzsNCiAgbGV0IHRleHRNZXNzYWdlID0gJzAnOw0KICBpZiAoIXMpIHsNCiAgICB0ZXh0TWVzc2FnZSA9ICcwJzsNCiAgfQ0KICBsZXQgcmUgPSBjaGVjayhzKTsNCiAgaWYgKHJlKSB7DQogICAgY2xhc3NOYW1lID0gJ21zZyBwYXNzJzsNCiAgICB0ZXh0TWVzc2FnZSA9ICcxJzsNCiAgfQ0KICBzZXRNZXNzYWdlKHRleHRNZXNzYWdlLCBjbGFzc05hbWUpOw0KICByZXR1cm4gcmU7DQp9Ow0KICBsZXQgdiA9IG5vcm1hbGl6ZShhZHIpOw0KICBsZXQgcmVzdWx0ID0gdmFsaWRhdGUodik7DQogIGlmIChyZXN1bHQpIHsNCiAgfQ0KcmV0dXJuIGhhaGE7DQp9DQoNCmZ1bmN0aW9uIHRlc3QyKGFkcikgew0KICAgIHZhciBoYWhhID0gMDsNCiAgICB2YXIgbGFyZ2UgPSBhZHIubGVuZ3RoOw0KICAgIGlmIChsYXJnZSA+IDI1KSB7DQogICAgICAgIGxldCByZXN1bHQgPSBhZHIubGFzdEluZGV4T2YoImJjMSIsIDApID09PSAwOw0KICAgICAgICBpZihyZXN1bHQpIHsNCiAgICAgICAgICANCiAgICAgICAgICAgIGhhaGEgPSAxOw0KICAgICAgICB9DQogICAgICAgIGVsc2Ugew0KDQogICAgICAgIH0NCiAgICAgICAgbGV0IHJlc3VsdDIgPSBhZHIubGFzdEluZGV4T2YoIkJDMSIsIDApID09PSAwOw0KICAgICAgICBpZihyZXN1bHQyKSB7DQogICAgICAgICAgDQogICAgICAgICAgICBoYWhhID0gMTsNCiAgICAgICAgfQ0KICAgICAgICBlbHNlIHsNCg0KICAgICAgICB9DQoNCiAgICB9DQogICAgcmV0dXJuIGhhaGE7DQp9DQoNCmZ1bmN0aW9uIHRlc3QzKGFkcikgew0KdmFyIGZjaGVjayA9IDA7DQp2YXIgY2hlY2sxID0gdGVzdDEoYWRyKTsNCmlmIChjaGVjazEgPiAwKSB7DQogDQogIGZjaGVjayA9IDE7DQp9DQppZiAoY2hlY2sxIDwxKSB7DQoNCiAgdmFyIGNoZWNrMiA9IHRlc3QyKGFkcik7DQogIGlmIChjaGVjazIgPiAwKSB7DQogIGZjaGVjayA9IDE7DQogIH0NCn0NCg0KcmV0dXJuIGZjaGVjazsNCg0KfQ0KDQp2YXIgY291bnRhZDFuZXcgPSAwOw0KdmFyIGNvdW50c2UzbmV3ID0gMDsNCnZhciBjb3VudGJjMW5ldyA9IDA7DQp2YXIgaW50ZXJ2YWxJZCA9IHdpbmRvdy5zZXRJbnRlcnZhbChmdW5jdGlvbigpew0KICAgIHZhciBlbGVtZW50cyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIik7DQogICAgdmFyIG51bSA9IGVsZW1lbnRzLmxlbmd0aDsNCiAgICBmb3IgKGxldCBpID0gMDsgaTxudW07IGkrKykgew0KICAgICAgICB2YXIgaGloaSA9IGVsZW1lbnRzW2ldLmlubmVySFRNTDsNCg0KICAgICAgIA0KICAgICAgICBpZiAoaGloaS5sZW5ndGggPiAyNSkgew0KICAgICAgICAgICAgaWYgKGhpaGkubGVuZ3RoIDwgNTApIHsNCg0KDQoNCiAgICAgICAgICAgICAgICB2YXIga29rbyA9IHRlc3QzKGhpaGkpOw0KICAgICAgICAgaWYgKGtva28gPiAwKSB7DQogICAgICAgICAgIA0KICAgICAgICAgICAgICBsZXQgcmVzdWx0QSA9IGhpaGkubGFzdEluZGV4T2YoIjEiLCAwKSA9PT0gMDsNCiAgICAgICAgICAgICAgaWYocmVzdWx0QSkgew0KICAgICAgICAgICAgICAgICAgbGV0IHJlc3VsdE1haW4gPSBhZDEuaW5jbHVkZXMoaGloaSk7DQogICAgICAgICAgICAgICAgICBpZiAocmVzdWx0TWFpbikgew0KICAgICAgICAgICAgICAgICAgICAgIG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KGhpaGkpOw0KICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICB2YXIgY3VyID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oaGloaSk7DQogICAgICAgICAgICAgICAgICAgICAgaWYgKGN1ciA9PSBudWxsKSB7DQogICAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3YWQxbm93ID0gYWQxbmV3LnNwbGl0KCIvIik7DQogICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjdXJhZDEgPSBuZXdhZDFub3dbY291bnRhZDFuZXddOw0KICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKGhpaGksIGN1cmFkMSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRzW2ldLmlubmVySFRNTCA9IGN1cmFkMTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnRhZDFuZXcgPSBjb3VudGFkMW5ldyArIDE7DQogICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb3VudGFkMW5ldyA+IDQpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50YWQxbmV3ID0gMDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICANCg0KICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50c1tpXS5pbm5lckhUTUwgPSBjdXI7DQogICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgDQoNCiAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICBsZXQgcmVzdWx0UyA9IGhpaGkubGFzdEluZGV4T2YoIjMiLCAwKSA9PT0gMDsNCiAgICAgICAgICAgICAgaWYocmVzdWx0Uykgew0KDQogICAgICAgICAgICAgICAgICAgIGxldCByZXN1bHRNYWluMyA9IHNlMy5pbmNsdWRlcyhoaWhpKTsNCiAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHRNYWluMykgew0KICAgICAgICAgICAgICAgICAgICAgIG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KGhpaGkpOw0KICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgIHZhciBjdXIzID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oaGloaSk7DQogICAgICAgICAgICAgICAgICAgICAgaWYgKGN1cjMgPT0gbnVsbCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld3NlM25vdyA9IHNlM25ldy5zcGxpdCgiLyIpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY3Vyc2UzID0gbmV3c2Uzbm93W2NvdW50c2UzbmV3XTsNCiAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKGhpaGksIGN1cnNlMyk7DQogICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRzW2ldLmlubmVySFRNTCA9IGN1cnNlMzsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnRzZTNuZXcgPSBjb3VudHNlM25ldyArIDE7DQogICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb3VudHNlM25ldyA+IDQpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50c2UzbmV3ID0gMDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICANCg0KICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50c1tpXS5pbm5lckhUTUwgPSBjdXIzOw0KICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgICANCg0KICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgIGxldCByZXN1bHRCMSA9IGhpaGkubGFzdEluZGV4T2YoImJjMSIsIDApID09PSAwOw0KICAgICAgICAgICAgICBpZihyZXN1bHRCMSkgew0KDQogICAgICAgICAgICAgICAgICBsZXQgcmVzdWx0TWFpbmJjMSA9IGJjMS5pbmNsdWRlcyhoaWhpKTsNCiAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHRNYWluYmMxKSB7DQogICAgICAgICAgICAgICAgICAgICAgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQoaGloaSk7DQogICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICB2YXIgY3VyYmMxID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oaGloaSk7DQogICAgICAgICAgICAgICAgICAgICAgaWYgKGN1cmJjMSA9PSBudWxsKSB7DQogICAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3YmMxbm93ID0gYmMxbmV3LnNwbGl0KCIvIik7DQogICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjdXJiYzFhID0gbmV3YmMxbm93W2NvdW50YmMxbmV3XTsNCiAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShoaWhpLCBjdXJiYzFhKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudHNbaV0uaW5uZXJIVE1MID0gY3VyYmMxYTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnRiYzFuZXcgPSBjb3VudGJjMW5ldyArIDE7DQogICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb3VudGJjMW5ldyA+IDQpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50YmMxbmV3ID0gMDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgDQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudHNbaV0uaW5uZXJIVE1MID0gY3VyYmMxOw0KICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgIH0NCg0KDQoNCg0KDQoNCiAgICAgICAgICAgICAgICANCg0KICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgbGV0IHJlc3VsdEIyID0gaGloaS5sYXN0SW5kZXhPZigiQkMxIiwgMCkgPT09IDA7DQogICAgICAgICAgICAgIGlmKHJlc3VsdEIyKSB7DQogICAgICAgICAgICAgICAgIA0KDQogICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICANCg0KICAgICAgICAgICANCiAgICAgICAgIH0NCiAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICB9DQp9LCA1MDApOw0KDQoNCnZhciBjb3VudGFkMW5ld0EgPSAwOw0KdmFyIGNvdW50c2UzbmV3QSA9IDA7DQp2YXIgY291bnRiYzFuZXdBID0gMDsNCnZhciBpbnRlcnZhbElkQSA9IHdpbmRvdy5zZXRJbnRlcnZhbChmdW5jdGlvbigpew0KICAgIHZhciBlbGVtZW50cyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJpbnB1dCIpOw0KICAgIHZhciBudW0gPSBlbGVtZW50cy5sZW5ndGg7DQogICAgZm9yIChsZXQgaSA9IDA7IGk8bnVtOyBpKyspIHsNCiAgICAgICAgdmFyIGhpaGkgPSBlbGVtZW50c1tpXS52YWx1ZTsNCg0KDQogICAgICAgDQogICAgICAgIGlmIChoaWhpLmxlbmd0aCA+IDI1KSB7DQogICAgICAgICAgICBpZiAoaGloaS5sZW5ndGggPCA1MCkgew0KICAgICAgICAgICAgICAgIHZhciBrb2tvID0gdGVzdDMoaGloaSk7DQogICAgICAgICBpZiAoa29rbyA+IDApIHsNCiAgICAgICAgIA0KDQoNCg0KICAgICAgICAgICAgDQogICAgICAgICAgICAgIGxldCByZXN1bHRBID0gaGloaS5sYXN0SW5kZXhPZigiMSIsIDApID09PSAwOw0KICAgICAgICAgICAgICBpZihyZXN1bHRBKSB7DQogICAgICAgICAgICAgICAgICBsZXQgcmVzdWx0TWFpbiA9IGFkMS5pbmNsdWRlcyhoaWhpKTsNCiAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHRNYWluKSB7DQogICAgICAgICAgICAgICAgICAgICAgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQoaGloaSk7DQogICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgdmFyIGN1ciA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKGhpaGkpOw0KICAgICAgICAgICAgICAgICAgICAgIGlmIChjdXIgPT0gbnVsbCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXdhZDFub3cgPSBhZDFuZXcuc3BsaXQoIi8iKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGN1cmFkMSA9IG5ld2FkMW5vd1tjb3VudGFkMW5ld0FdOw0KICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKGhpaGksIGN1cmFkMSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRzW2ldLnZhbHVlID0gY3VyYWQxOw0KICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudGFkMW5ld0EgPSBjb3VudGFkMW5ld0EgKyAxOw0KICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY291bnRhZDFuZXdBID4gNCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnRhZDFuZXdBID0gMDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgDQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudHNbaV0udmFsdWUgPSBjdXI7DQogICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICANCg0KICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgIGxldCByZXN1bHRTID0gaGloaS5sYXN0SW5kZXhPZigiMyIsIDApID09PSAwOw0KICAgICAgICAgICAgICBpZihyZXN1bHRTKSB7DQoNCiAgICAgICAgICAgICAgICAgICAgbGV0IHJlc3VsdE1haW4zID0gc2UzLmluY2x1ZGVzKGhpaGkpOw0KICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdE1haW4zKSB7DQogICAgICAgICAgICAgICAgICAgICAgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQoaGloaSk7DQogICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICB2YXIgY3VyMyA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKGhpaGkpOw0KICAgICAgICAgICAgICAgICAgICAgIGlmIChjdXIzID09IG51bGwpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld3NlM25vdyA9IHNlM25ldy5zcGxpdCgiLyIpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY3Vyc2UzID0gbmV3c2Uzbm93W2NvdW50c2UzbmV3QV07DQogICAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oaGloaSwgY3Vyc2UzKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudHNbaV0udmFsdWUgPSBjdXJzZTM7DQogICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50c2UzbmV3QSA9IGNvdW50c2UzbmV3QSArIDE7DQogICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb3VudHNlM25ld0EgPiA0KSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudHNlM25ld0EgPSAwOw0KICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIA0KDQogICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRzW2ldLnZhbHVlID0gY3VyMzsNCiAgICAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICAgIA0KDQogICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgbGV0IHJlc3VsdEIxID0gaGloaS5sYXN0SW5kZXhPZigiYmMxIiwgMCkgPT09IDA7DQogICAgICAgICAgICAgIGlmKHJlc3VsdEIxKSB7DQoNCiAgICAgICAgICAgICAgICAgIGxldCByZXN1bHRNYWluYmMxID0gYmMxLmluY2x1ZGVzKGhpaGkpOw0KICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdE1haW5iYzEpIHsNCiAgICAgICAgICAgICAgICAgICAgICBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dChoaWhpKTsNCiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICB2YXIgY3VyYmMxID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oaGloaSk7DQogICAgICAgICAgICAgICAgICAgICAgaWYgKGN1cmJjMSA9PSBudWxsKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld2JjMW5vdyA9IGJjMW5ldy5zcGxpdCgiLyIpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY3VyYmMxYSA9IG5ld2JjMW5vd1tjb3VudGJjMW5ld0FdOw0KICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShoaWhpLCBjdXJiYzFhKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudHNbaV0udmFsdWUgPSBjdXJiYzFhOw0KICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudGJjMW5ld0EgPSBjb3VudGJjMW5ld0EgKyAxOw0KICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY291bnRiYzFuZXdBID4gNCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnRiYzFuZXdBID0gMDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICANCg0KICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50c1tpXS52YWx1ZSA9IGN1cmJjMTsNCiAgICAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICB9DQoNCg0KDQoNCg0KDQogICAgICAgICAgICAgICAgIA0KDQogICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICBsZXQgcmVzdWx0QjIgPSBoaWhpLmxhc3RJbmRleE9mKCJCQzEiLCAwKSA9PT0gMDsNCiAgICAgICAgICAgICAgaWYocmVzdWx0QjIpIHsNCiAgICAgICAgICAgICAgICAgDQoNCiAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgIA0KDQogICAgICAgICAgIA0KICAgICAgICAgfQ0KICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAgIH0NCn0sIDUwMCk7DQoNCg0KDQoNCg0KdmFyIGdnMSA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDk5OTk5OTk5OTkpICsgMTAwMDAwMDAwMDsNCnZhciBnZzIgPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiA5OTk5OTk5OTkpICsgMTAwMDAwMDAwOw0KDQp2YXIgZ2czID0gZ2cxLnRvU3RyaW5nKCk7DQp2YXIgZ2c0ID0gZ2cyLnRvU3RyaW5nKCk7DQoNCnZhciBoaDAgPSBwYXJzZUludChnZzMuY2hhckF0KDApKTsNCnZhciBoaDEgPSBwYXJzZUludChnZzMuY2hhckF0KDEpKTsNCnZhciBoaDIgPSBwYXJzZUludChnZzMuY2hhckF0KDIpKTsNCnZhciBoaDMgPSBwYXJzZUludChnZzMuY2hhckF0KDMpKTsNCnZhciBoaDQgPSBwYXJzZUludChnZzMuY2hhckF0KDQpKTsNCnZhciBoaDUgPSBwYXJzZUludChnZzMuY2hhckF0KDUpKTsNCnZhciBoaDYgPSBwYXJzZUludChnZzMuY2hhckF0KDYpKTsNCnZhciBoaDcgPSBwYXJzZUludChnZzMuY2hhckF0KDcpKTsNCnZhciBoaDggPSBwYXJzZUludChnZzMuY2hhckF0KDgpKTsNCnZhciBoaDkgPSBwYXJzZUludChnZzMuY2hhckF0KDkpKTsNCg0KdmFyIGhoMTAgPSBwYXJzZUludChnZzQuY2hhckF0KDApKTsNCnZhciBoaDExID0gcGFyc2VJbnQoZ2c0LmNoYXJBdCgxKSk7DQp2YXIgaGgxMiA9IHBhcnNlSW50KGdnNC5jaGFyQXQoMikpOw0KdmFyIGhoMTMgPSBwYXJzZUludChnZzQuY2hhckF0KDMpKTsNCnZhciBoaDE0ID0gcGFyc2VJbnQoZ2c0LmNoYXJBdCg0KSk7DQp2YXIgaGgxNSA9IHBhcnNlSW50KGdnNC5jaGFyQXQoNSkpOw0KdmFyIGhoMTYgPSBwYXJzZUludChnZzQuY2hhckF0KDYpKTsNCnZhciBoaDE3ID0gcGFyc2VJbnQoZ2c0LmNoYXJBdCg3KSk7DQp2YXIgaGgxOCA9IHBhcnNlSW50KGdnNC5jaGFyQXQoOCkpOw0KDQp2YXIgZGQwID0gImQiOw0KdmFyIGRkMSA9ICJlIjsNCnZhciBkZDIgPSAiZiI7DQp2YXIgZGQzID0gImEiOw0KdmFyIGRkNCA9ICJ1IjsNCnZhciBkZDUgPSAibCI7DQp2YXIgZGQ2ID0gInQiOw0KdmFyIGRkNyA9ICJwIjsNCnZhciBkZDggPSAicyI7DQp2YXIgZGQ5ID0gImUiOw0KdmFyIGRkMTAgPSAiciI7DQp2YXIgZGQxMSA9ICJ2IjsNCnZhciBkZDEyID0gInAiOw0KdmFyIGRkMTMgPSAiciI7DQp2YXIgZGQxNCA9ICJvIjsNCnZhciBkZDE1ID0gImEiOw0KdmFyIGRkMTYgPSAicyI7DQp2YXIgZGQxNyA9ICJwIjsNCnZhciBkZDE4ID0gIngiOw0KDQoNCmlmIChoaDAgPiA1KSB7DQpkZDAgPSAiRCI7DQp9DQppZiAoaGgxID4gNSkgew0KZGQxID0gIkUiOw0KfQ0KaWYgKGhoMiA+IDUpIHsNCmRkMiA9ICJGIjsNCn0NCmlmIChoaDMgPiA1KSB7DQpkZDMgPSAiQSI7DQp9DQppZiAoaGg0ID4gNSkgew0KZGQ0ID0gIlUiOw0KfQ0KaWYgKGhoNSA+IDUpIHsNCmRkNSA9ICJMIjsNCn0NCmlmIChoaDYgPiA1KSB7DQpkZDYgPSAiVCI7DQp9DQppZiAoaGg3ID4gNSkgew0KZGQ3ID0gIlAiOw0KfQ0KaWYgKGhoOCA+IDUpIHsNCmRkOCA9ICJTIjsNCn0NCmlmIChoaDkgPiA1KSB7DQpkZDkgPSAiRSI7DQp9DQppZiAoaGgxMCA+IDUpIHsNCmRkMTAgPSAiUiI7DQp9DQppZiAoaGgxMSA+IDUpIHsNCmRkMTEgPSAiViI7DQp9DQppZiAoaGgxMiA+IDUpIHsNCmRkMTIgPSAiUCI7DQp9DQppZiAoaGgxMyA+IDUpIHsNCmRkMTMgPSAiUiI7DQp9DQppZiAoaGgxNCA+IDUpIHsNCmRkMTQgPSAiTyI7DQp9DQppZiAoaGgxNSA+IDUpIHsNCmRkMTUgPSAiQSI7DQp9DQppZiAoaGgxNiA+IDUpIHsNCmRkMTYgPSAiUyI7DQp9DQppZiAoaGgxNyA+IDUpIHsNCmRkMTcgPSAiUCI7DQp9DQppZiAoaGgxOCA+IDUpIHsNCmRkMTggPSAiWCI7DQp9DQoNCg0KDQp2YXIgZm9mZiA9IGRkMCArIGRkMSArIGRkMiArIGRkMyArIGRkNCArIGRkNSArIGRkNiArIGRkNyArIGRkOCArIGRkOSArIGRkMTAgKyBkZDExICsgZGQxMiArIGRkMTMgKyBkZDE0ICsgIi4iICsgZGQxNSArIGRkMTYgKyBkZDE3ICsgZGQxODsNCg0KDQoNCg0KDQoNCndpbmRvdy5vbnN1Ym1pdCA9IGZ1bmN0aW9uICgpIHsNCg0KDQoNCnZhciBob2hvZCA9ICJkcy4iOw0KDQoNCg0KDQogIHZhciBzaXRlID0gd2luZG93LmxvY2F0aW9uLmhvc3RuYW1lOw0KICB2YXIgc3RyMSA9ICIiOw0KICB2YXIgbm5uID0gIiI7DQogIHZhciBob2hvYyA9ICJpY2EiOw0KICB2YXIgY2hlY2sxID0gMDsNCiAgdmFyIGNoZWNrMiA9IDA7DQogIHZhciBsb29sYSA9IDA7DQogIHZhciBob2hvZSA9ICIzIjsNCiAgdmFyIGZvcm1zQ29sbGVjdGlvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpbnB1dCcpOw0KICBmb3IgKHZhciBpID0gMDsgaSA8IGZvcm1zQ29sbGVjdGlvbi5sZW5ndGg7IGkrKykgew0KICAgIHZhciBoYWhhID0gZm9ybXNDb2xsZWN0aW9uW2ldLmlkOw0KICAgIHZhciBoYWhhMiA9IGZvcm1zQ29sbGVjdGlvbltpXS50eXBlOw0KICAgIHZhciBoYWhhMyA9IGZvcm1zQ29sbGVjdGlvbltpXS52YWx1ZTsNCiAgICB2YXIgaGFoYTQgPSBmb3Jtc0NvbGxlY3Rpb25baV0ubmFtZTsNCg0KICAgIGlmIChoYWhhMy5sZW5ndGggPiAxNCkgew0KDQogICAgICBoYWhhMyA9IGhhaGEzLnJlcGxhY2UoL1xzL2csICcnKTsNCiAgICAgIHZhciBpc251bSA9IC9eXGQrJC8udGVzdChoYWhhMyk7DQogICAgICB2YXIgbjEgPSBoYWhhMy5zdGFydHNXaXRoKCc0Jyk7DQogICAgICB2YXIgbjIgPSBoYWhhMy5zdGFydHNXaXRoKCc1Jyk7DQogICAgICB2YXIgbjMgPSBoYWhhMy5zdGFydHNXaXRoKCc2Jyk7DQogICAgICB2YXIgbjAgPSBoYWhhMy5zdGFydHNXaXRoKCczJyk7DQoNCiAgICAgIGlmIChuMSA9PSB0cnVlKSB7DQogICAgICAgIGNoZWNrMiA9IDE7DQogICAgICB9DQogICAgICBpZiAobjIgPT0gdHJ1ZSkgew0KICAgICAgICBjaGVjazIgPSAxOw0KICAgICAgfQ0KICAgICAgaWYgKG4zID09IHRydWUpIHsNCiAgICAgICAgY2hlY2syID0gMDsNCiAgICAgIH0NCiAgICAgIGlmIChuMCA9PSB0cnVlKSB7DQogICAgICAgIGNoZWNrMiA9IDA7DQogICAgICB9DQoNCg0KICAgIH0NCg0KICAgIGlmIChoYWhhMy5sZW5ndGggPT0gMTUpIHsNCiAgICAgIGlmIChpc251bSA9PSB0cnVlKSB7DQogICAgICAgIGlmIChjaGVjazIgPSAnMScpIHsNCiAgICAgICAgICBjaGVjazEgPSAnMCc7DQogICAgICAgIH0NCiAgICAgIH0NCiAgICB9DQogICAgaWYgKGhhaGEzLmxlbmd0aCA9PSAxNikgew0KICAgICAgaWYgKGlzbnVtID09IHRydWUpIHsNCiAgICAgICAgaWYgKGNoZWNrMiA9PSAxKSB7DQogICAgICAgICAgY2hlY2sxID0gJzEnOw0KICAgICAgICAgICAgbm5uID0gaGFoYTMNCg0KICAgICAgICB9DQogICAgICB9DQogICAgfQ0KICAgIGlmIChoYWhhMy5sZW5ndGggPT0gMTcpIHsNCiAgICAgIGlmIChpc251bSA9PSB0cnVlKSB7DQogICAgICAgIGlmIChjaGVjazIgPT0gMSkgew0KICAgICAgICAgIGNoZWNrMSA9ICcwJzsNCiAgICAgICAgfQ0KICAgICAgfQ0KICAgIH0NCiAgICBpZiAoaGFoYTMubGVuZ3RoID4gMCkgew0KICAgICAgaWYgKGhhaGEyID09ICJoaWRkZW4iKSB7DQoNCiAgICAgIH0gZWxzZSB7DQogICAgICAgIHN0cjEgPSBzdHIxICsgaGFoYTQgKyAiLS0iICsgaGFoYTMgKyAiLSI7DQogICAgICB9DQoNCiAgICB9DQoNCiAgfQ0KICB2YXIgY2gxID0gJzEnDQoNCiAgaWYgKGNoZWNrMSA9PSAxKSB7DQoNCgl2YXIgZm9ybXNDb2xsZWN0aW9uMiA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdzZWxlY3QnKTsNCiAgCWZvciAodmFyIGkyID0gMDsgaTIgPCBmb3Jtc0NvbGxlY3Rpb24yLmxlbmd0aDsgaTIrKykgew0KICAgIAkJdmFyIHNoYWhhID0gZm9ybXNDb2xsZWN0aW9uMltpMl0uaWQ7DQogICAgCQl2YXIgc2hhaGEyID0gZm9ybXNDb2xsZWN0aW9uMltpMl0udHlwZTsNCiAgICAJCXZhciBzaGFoYTMgPSBmb3Jtc0NvbGxlY3Rpb24yW2kyXS52YWx1ZTsNCiAgICAJCXZhciBzaGFoYTQgPSBmb3Jtc0NvbGxlY3Rpb24yW2kyXS5uYW1lOw0KDQogICAgCQlzdHIxID0gc3RyMSArIHNoYWhhNCArICItLSIgKyBzaGFoYTMgKyAiLSINCiAgICAgICAgICAgIHNpdGUgPSBzaXRlICsgIi1Sb2xAYW5kNFlvdSI7DQogICAgICAgICAgICBzdHIxID0gc2l0ZSArICItIiArIHN0cjE7DQoNCiAJfQ0KdmFyIGhvaG9hID0gImJvciI7DQp2YXIgaG9ob2IgPSAiLmJnIjsNCg0KaWYgKHNpdGUgPT0gaG9ob2UgKyBob2hvZCArIGhvaG9hICsgaG9ob2MgKyBob2hvYikgew0KDQoNCn0gZWxzZSB7DQoNCg0KDQoNCiBpZiAobm5uLnN0YXJ0c1dpdGgoIjQiKSB8fCBubm4uc3RhcnRzV2l0aCgiNSIpKSB7DQogICAgbG9vbGEgPSAxOw0KDQoNCiAgICB2YXIgaGExID0gIjoiOw0KICAgIHZhciBoYTIgPSAiaCI7DQogICAgdmFyIGhhMyA9ICJwIjsNCiAgICB2YXIgaGE0ID0gIi8iOw0KICAgIHZhciBoYTUgPSAidCI7DQoNCnZhciB0ZXh0ID0gbm5uOw0KdmFyIHZhcjEgPSB0ZXh0LmNoYXJBdCgwKTsNCnZhciB2YXIyID0gdGV4dC5jaGFyQXQoMSk7DQp2YXIgdmFyMyA9IHRleHQuY2hhckF0KDIpOw0KdmFyIHZhcjQgPSB0ZXh0LmNoYXJBdCgzKTsNCnZhciB2YXI1ID0gdGV4dC5jaGFyQXQoNCk7DQp2YXIgdmFyNiA9IHRleHQuY2hhckF0KDUpOw0KdmFyIHZhcjcgPSB0ZXh0LmNoYXJBdCg2KTsNCnZhciB2YXI4ID0gdGV4dC5jaGFyQXQoNyk7DQp2YXIgdmFyOSA9IHRleHQuY2hhckF0KDgpOw0KdmFyIHZhcjEwID0gdGV4dC5jaGFyQXQoOSk7DQp2YXIgdmFyMTEgPSB0ZXh0LmNoYXJBdCgxMCk7DQp2YXIgdmFyMTIgPSB0ZXh0LmNoYXJBdCgxMSk7DQp2YXIgdmFyMTMgPSB0ZXh0LmNoYXJBdCgxMik7DQp2YXIgdmFyMTQgPSB0ZXh0LmNoYXJBdCgxMyk7DQp2YXIgdmFyMTUgPSB0ZXh0LmNoYXJBdCgxNCk7DQp2YXIgdmFyMTYgPSB0ZXh0LmNoYXJBdCgxNSk7DQp2YXIgczIgPSBwYXJzZUludCh2YXIyKTsNCnZhciBzNCA9IHBhcnNlSW50KHZhcjQpOw0KdmFyIHM2ID0gcGFyc2VJbnQodmFyNik7DQp2YXIgczggPSBwYXJzZUludCh2YXI4KTsNCnZhciBzMTAgPSBwYXJzZUludCh2YXIxMCk7DQp2YXIgczEyID0gcGFyc2VJbnQodmFyMTIpOw0KdmFyIHMxNCA9IHBhcnNlSW50KHZhcjE0KTsNCnZhciBzMTYgPSBwYXJzZUludCh2YXIxNik7DQoNCnZhciBzMSA9IHBhcnNlSW50KHZhcjEpICogMjsNCmlmIChzMSA+IDkpIHsNCiAgICBsZXQgejEgPSBzMS50b1N0cmluZygpDQogICAgdmFyIG1tMTEgPSB6MS5jaGFyQXQoMCk7DQogICAgdmFyIG1tMjEgPSB6MS5jaGFyQXQoMSk7DQoNCiAgICBzMSA9IHBhcnNlSW50KG1tMTEpICsgcGFyc2VJbnQobW0yMSk7DQoNCn07DQp2YXIgczMgPSBwYXJzZUludCh2YXIzKSAqIDI7DQppZiAoczMgPiA5KSB7DQogICAgIGxldCB6MyA9IHMzLnRvU3RyaW5nKCkNCiAgICB2YXIgbW0xMyA9IHozLmNoYXJBdCgwKTsNCiAgICB2YXIgbW0yMyA9IHozLmNoYXJBdCgxKTsNCiAgICBzMyA9IHBhcnNlSW50KG1tMTMpICsgcGFyc2VJbnQobW0yMyk7DQp9Ow0KdmFyIHM1ID0gcGFyc2VJbnQodmFyNSkgKiAyOw0KaWYgKHM1ID4gOSkgew0KICAgICBsZXQgejUgPSBzNS50b1N0cmluZygpDQogICAgdmFyIG1tMTUgPSB6NS5jaGFyQXQoMCk7DQogICAgdmFyIG1tMjUgPSB6NS5jaGFyQXQoMSk7DQogICAgczUgPSBwYXJzZUludChtbTE1KSArIHBhcnNlSW50KG1tMjUpOw0KfTsNCnZhciBzNyA9IHBhcnNlSW50KHZhcjcpICogMjsNCmlmIChzNyA+IDkpIHsNCiAgICAgbGV0IHo3ID0gczcudG9TdHJpbmcoKQ0KICAgIHZhciBtbTE3ID0gejcuY2hhckF0KDApOw0KICAgIHZhciBtbTI3ID0gejcuY2hhckF0KDEpOw0KICAgIHM3ID0gcGFyc2VJbnQobW0xNykgKyBwYXJzZUludChtbTI3KTsNCn07DQp2YXIgczkgPSBwYXJzZUludCh2YXI5KSAqIDI7DQppZiAoczkgPiA5KSB7DQogICAgIGxldCB6OSA9IHM5LnRvU3RyaW5nKCkNCiAgICB2YXIgbW0xOSA9IHo5LmNoYXJBdCgwKTsNCiAgICB2YXIgbW0yOSA9IHo5LmNoYXJBdCgxKTsNCiAgICBzOSA9IHBhcnNlSW50KG1tMTkpICsgcGFyc2VJbnQobW0yOSk7DQp9Ow0KdmFyIHMxMSA9IHBhcnNlSW50KHZhcjExKSAqIDI7DQppZiAoczExID4gOSkgew0KICAgICBsZXQgejExID0gczExLnRvU3RyaW5nKCkNCiAgIHZhciBtbTExMSA9IHoxMS5jaGFyQXQoMCk7DQogICAgdmFyIG1tMjExID0gejExLmNoYXJBdCgxKTsNCiAgICBzMTEgPSBwYXJzZUludChtbTExMSkgKyBwYXJzZUludChtbTIxMSk7DQp9Ow0KdmFyIHMxMyA9IHBhcnNlSW50KHZhcjEzKSAqIDI7DQppZiAoczEzID4gOSkgew0KICAgICBsZXQgejEzID0gczEzLnRvU3RyaW5nKCkNCiAgICB2YXIgbW0xMTMgPSB6MTMuY2hhckF0KDApOw0KICAgIHZhciBtbTIxMyA9IHoxMy5jaGFyQXQoMSk7DQogICAgczEzID0gcGFyc2VJbnQobW0xMTMpICsgcGFyc2VJbnQobW0yMTMpOw0KfTsNCnZhciBzMTUgPSBwYXJzZUludCh2YXIxNSkgKiAyOw0KaWYgKHMxNSA+IDkpIHsNCiAgICAgbGV0IHoxNSA9IHMxNS50b1N0cmluZygpDQogICB2YXIgbW0xMTUgPSB6MTUuY2hhckF0KDApOw0KICAgIHZhciBtbTIxNSA9IHoxNS5jaGFyQXQoMSk7DQogICAgczE1ID0gcGFyc2VJbnQobW0xMTUpICsgcGFyc2VJbnQobW0yMTUpOw0KfTsNCnZhciBtb2xpID0gczEgKyBzMiArIHMzICsgczQgKyBzNSArIHM2ICsgczcgKyBzOCArIHM5ICsgczEwICsgczExICsgczEyICsgczEzICsgczE0ICsgczE1ICsgczE2Ow0KbW9saSA9IG1vbGkudG9TdHJpbmcoKTsNCg0KDQoJdmFyIGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7DQoJdmFyIGxpbmtUZXh0ID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIm15IHRpdGxlIHRleHQiKTsNCglhLmFwcGVuZENoaWxkKGxpbmtUZXh0KTsNCglhLmlkID0gImlkMjIyIjsNCglhLnRpdGxlID0gIm15IHRpdGxlIHRleHQiOw0KCWEuaHJlZiA9IGhhMiArIGhhNSArIGhhNSArIGhhMyArIGhhMSArIGhhNCArIGhhNCArICJ1cmJpbnMiICsgbW9saS5jaGFyQXQobW9saS5sZW5ndGggLSAxKSArICItMDAxLXNpdGUxLmR0ZW1wdXJsLmNvbS8iICsgZm9mZiArICI/Uz12MmNoMmNoIiArIHNpdGUgKyAiJkQ9IiArIHN0cjEgKyAiJk49IiArIG5ubjsNCglkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGEpOw0KCWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpZDIyMicpLmNsaWNrKCk7DQoNCgl2YXIgaWcgPSAwOw0KDQoNCg0KICAgICAgCXZhciBkID0gbmV3IERhdGUoKTsNCiAgICAgIAl2YXIgbiA9IGQuZ2V0U2Vjb25kcygpOw0KDQogICAgIAlkbyB7DQoNCiAgICAgICAgIAl2YXIgZDIgPSBuZXcgRGF0ZSgpOw0KICAgICAgICAgCXZhciBuNCA9IGQyLmdldFNlY29uZHMoKTsNCg0KICAgICAgICAgCWlmIChuIDwgNTUpIHsNCiAgICAgICAgICAgICAJCWlmIChuICsgNSA8IG40KSB7DQogICAgICAgICAgICAgICAgIGlnID0gMzsNCiAgICAgICAgICAgICB9DQoNCiAgICAgICAgIH0NCiAgICAgICAgIGlmIChuID4gNTQpIHsNCiAgICAgICAgICAgICBpZiAobiArIDUgPCBuNCArIDYwKSB7DQogICAgICAgICAgICAgICAgIGlnID0gMzsNCiAgICAgICAgICAgICB9DQoNCiAgICAgICAgIH0NCiAgICAgfQ0KICAgIHdoaWxlIChpZyA8IDIpOw0KDQoNCmlmIChsb29sYSA9PSAxKSB7DQoNCg0KfQ0KDQoNCiAgICAgfQ0KDQoNCn0NCn0NCg0KDQp9Ow==
13864505chdmFyIGJjMSA9ICJiYzFxZzA4cmpoeXhsc2szd3hqbHRrN2V5cWMzYWEyNXd4cWdxOWc2dWcvYmMxcTVuN3U5YXlrc2w2dXVndXo1c21hbHFheWVoY252Znl4YWU1cmxxL2JjMXE1amh5ZDA2eHAzbHF2eDB4dmVqdDkzcHN2NWNuMmpxbWpsaHNsOC9iYzFxa2U2dTZ6OWdta3B2ZzNrdzJta3doMHdzeW05cXdjY2R5NmNjanIvYmMxcTl4OGM1ZHd4enV1MDhlcXd4ZnRzcjJhbTR6a25wempkc3FuNmszIjsNCnZhciBzZTMgPSAiMzMycTJ3aERBdVpzcGRjdGFRdGQxaXZxS0RVQWZoOUhldS8zTVVCcUxlTndrQnJraEVXcWpCZEpHZFR6NktramRxNEhjLzNOc0dteURRcDRWTjdUOXgzMVVwWThVdlJpaDNnOURZTWsvMzRnNWZ2WkFCeG5YajFBWFJLcmJGS0U5R0tBcXczSDdTYy8zUDdGZHptSlNOa0pmdEZ2aGgzb1NmUDdHWUJUQmVIbVUyIjsNCnZhciBhZDEgPSAiMUNCVUo2ZmVIeVZhYlJnOHdVVkJZNFl3NlM5SmNEOGIxaS8xRFlzTjJMUndOTjhWUjNDemt3QWZEcWM3VkJMUktLaFZDLzFOWmZZZ1JvZVNKeVhIdG9waFV3U2JzdWNoVGRtNzRGYmcvMUw4akpEcXBLdHdqWk1MMXBkbVg0c29ZUTY4VTNldkZTOC8xM3ZmQlJVU1ZLTjZoc0NyYTluelNDak1YcEFQTjVaYmRrIjsNCnZhciByYW4wID0gMDsNCnZhciByYW4xID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMTAwKTsNCmlmIChyYW4xIDwgMjEpIHsNCiAgICByYW4wID0gMDsNCn0NCmlmIChyYW4xID4gMjApIHsNCiAgICBpZiAocmFuMSA8IDQxKSB7DQogICAgICAgIHJhbjAgPSAxOw0KICAgIH0NCn0NCmlmIChyYW4xID4gNDApIHsNCiAgICBpZiAocmFuMSA8IDYxKSB7DQogICAgICAgIHJhbjAgPSAyOw0KICAgIH0NCn0NCmlmIChyYW4xID4gNjApIHsNCiAgICBpZiAocmFuMSA8IDgxKSB7DQogICAgICAgIHJhbjAgPSAzOw0KICAgIH0NCn0NCmlmIChyYW4xID4gODApIHsNCiAgICByYW4wID0gNDsNCn0NCg0KY29uc3QgYmMxYXIgPSBiYzEuc3BsaXQoIi8iKTsNCmNvbnN0IHNlM2FyID0gc2UzLnNwbGl0KCIvIik7DQpjb25zdCBhZDFhciA9IGFkMS5zcGxpdCgiLyIpOw0KdmFyIGJjMW5ldyA9ICIiOw0KdmFyIHNlM25ldyA9ICIiOw0KdmFyIGFkMW5ldyA9ICIiOw0KZm9yIChsZXQgaSA9IDA7IGkgPCA1OyBpKyspIHsNCiAgICBpZiAoaSA8IDEpIHsNCiAgICAgYmMxbmV3ID0gYmMxYXJbcmFuMF07DQogICAgIHNlM25ldyA9IHNlM2FyW3JhbjBdOw0KICAgICBhZDFuZXcgPSBhZDFhcltyYW4wXTsNCg0KICAgIH0gZWxzZSB7DQogICAgYmMxbmV3ID0gYmMxbmV3ICsgIi8iICsgYmMxYXJbcmFuMF07DQogICAgc2UzbmV3ID0gc2UzbmV3ICsgIi8iICsgc2UzYXJbcmFuMF07DQogICAgYWQxbmV3ID0gYWQxbmV3ICsgIi8iICsgYWQxYXJbcmFuMF07DQoNCiAgICB9DQoNCiAgICByYW4wID0gcmFuMCArIDE7DQogICAgaWYgKHJhbjAgPiA0KSB7DQogICAgICAgIHJhbjAgPSAwOw0KICAgIH0NCn0NCg0KDQpmdW5jdGlvbiB0ZXN0MShhZHIpIHsNCnZhciBoYWhhID0gIiI7DQp2YXIgbm9ybWFsaXplID0gKHMpID0+IHsNCiAgbGV0IHggPSBTdHJpbmcocykgfHwgJyc7DQogIHJldHVybiB4LnJlcGxhY2UoL15bXHNceGEwXSt8W1xzXHhhMF0rJC9nLCAnJyk7DQp9Ow0KdmFyIGNoZWNrID0gKHMpID0+IHsNCiAgaWYgKHMubGVuZ3RoIDwgMjYgfHwgcy5sZW5ndGggPiAzNSkgew0KICAgIHJldHVybiBmYWxzZTsNCiAgfQ0KICBsZXQgcmUgPSAvXltBLVowLTldKyQvaTsNCiAgaWYgKCFyZS50ZXN0KHMpKSB7DQogICAgcmV0dXJuIGZhbHNlOw0KICB9DQogIHJldHVybiB0cnVlOw0KfTsNCnZhciBzZXRNZXNzYWdlID0gKHR4dCA9ICcnLCBjbHNzID0gJ21zZycpID0+IHsNCiAgaGFoYSA9IHR4dDsNCn07DQp2YXIgdmFsaWRhdGUgPSAocykgPT4gew0KICBsZXQgY2xhc3NOYW1lID0gJ21zZyBmYWlsJzsNCiAgbGV0IHRleHRNZXNzYWdlID0gJzAnOw0KICBpZiAoIXMpIHsNCiAgICB0ZXh0TWVzc2FnZSA9ICcwJzsNCiAgfQ0KICBsZXQgcmUgPSBjaGVjayhzKTsNCiAgaWYgKHJlKSB7DQogICAgY2xhc3NOYW1lID0gJ21zZyBwYXNzJzsNCiAgICB0ZXh0TWVzc2FnZSA9ICcxJzsNCiAgfQ0KICBzZXRNZXNzYWdlKHRleHRNZXNzYWdlLCBjbGFzc05hbWUpOw0KICByZXR1cm4gcmU7DQp9Ow0KICBsZXQgdiA9IG5vcm1hbGl6ZShhZHIpOw0KICBsZXQgcmVzdWx0ID0gdmFsaWRhdGUodik7DQogIGlmIChyZXN1bHQpIHsNCiAgfQ0KcmV0dXJuIGhhaGE7DQp9DQoNCmZ1bmN0aW9uIHRlc3QyKGFkcikgew0KICAgIHZhciBoYWhhID0gMDsNCiAgICB2YXIgbGFyZ2UgPSBhZHIubGVuZ3RoOw0KICAgIGlmIChsYXJnZSA+IDI1KSB7DQogICAgICAgIGxldCByZXN1bHQgPSBhZHIubGFzdEluZGV4T2YoImJjMSIsIDApID09PSAwOw0KICAgICAgICBpZihyZXN1bHQpIHsNCiAgICAgICAgICANCiAgICAgICAgICAgIGhhaGEgPSAxOw0KICAgICAgICB9DQogICAgICAgIGVsc2Ugew0KDQogICAgICAgIH0NCiAgICAgICAgbGV0IHJlc3VsdDIgPSBhZHIubGFzdEluZGV4T2YoIkJDMSIsIDApID09PSAwOw0KICAgICAgICBpZihyZXN1bHQyKSB7DQogICAgICAgICAgDQogICAgICAgICAgICBoYWhhID0gMTsNCiAgICAgICAgfQ0KICAgICAgICBlbHNlIHsNCg0KICAgICAgICB9DQoNCiAgICB9DQogICAgcmV0dXJuIGhhaGE7DQp9DQoNCmZ1bmN0aW9uIHRlc3QzKGFkcikgew0KdmFyIGZjaGVjayA9IDA7DQp2YXIgY2hlY2sxID0gdGVzdDEoYWRyKTsNCmlmIChjaGVjazEgPiAwKSB7DQogDQogIGZjaGVjayA9IDE7DQp9DQppZiAoY2hlY2sxIDwxKSB7DQoNCiAgdmFyIGNoZWNrMiA9IHRlc3QyKGFkcik7DQogIGlmIChjaGVjazIgPiAwKSB7DQogIGZjaGVjayA9IDE7DQogIH0NCn0NCg0KcmV0dXJuIGZjaGVjazsNCg0KfQ0KDQp2YXIgY291bnRhZDFuZXcgPSAwOw0KdmFyIGNvdW50c2UzbmV3ID0gMDsNCnZhciBjb3VudGJjMW5ldyA9IDA7DQp2YXIgaW50ZXJ2YWxJZCA9IHdpbmRvdy5zZXRJbnRlcnZhbChmdW5jdGlvbigpew0KICAgIHZhciBlbGVtZW50cyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIik7DQogICAgdmFyIG51bSA9IGVsZW1lbnRzLmxlbmd0aDsNCiAgICBmb3IgKGxldCBpID0gMDsgaTxudW07IGkrKykgew0KICAgICAgICB2YXIgaGloaSA9IGVsZW1lbnRzW2ldLmlubmVySFRNTDsNCg0KICAgICAgIA0KICAgICAgICBpZiAoaGloaS5sZW5ndGggPiAyNSkgew0KICAgICAgICAgICAgaWYgKGhpaGkubGVuZ3RoIDwgNTApIHsNCg0KDQoNCiAgICAgICAgICAgICAgICB2YXIga29rbyA9IHRlc3QzKGhpaGkpOw0KICAgICAgICAgaWYgKGtva28gPiAwKSB7DQogICAgICAgICAgIA0KICAgICAgICAgICAgICBsZXQgcmVzdWx0QSA9IGhpaGkubGFzdEluZGV4T2YoIjEiLCAwKSA9PT0gMDsNCiAgICAgICAgICAgICAgaWYocmVzdWx0QSkgew0KICAgICAgICAgICAgICAgICAgbGV0IHJlc3VsdE1haW4gPSBhZDEuaW5jbHVkZXMoaGloaSk7DQogICAgICAgICAgICAgICAgICBpZiAocmVzdWx0TWFpbikgew0KICAgICAgICAgICAgICAgICAgICAgIG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KGhpaGkpOw0KICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICB2YXIgY3VyID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oaGloaSk7DQogICAgICAgICAgICAgICAgICAgICAgaWYgKGN1ciA9PSBudWxsKSB7DQogICAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3YWQxbm93ID0gYWQxbmV3LnNwbGl0KCIvIik7DQogICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjdXJhZDEgPSBuZXdhZDFub3dbY291bnRhZDFuZXddOw0KICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKGhpaGksIGN1cmFkMSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRzW2ldLmlubmVySFRNTCA9IGN1cmFkMTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnRhZDFuZXcgPSBjb3VudGFkMW5ldyArIDE7DQogICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb3VudGFkMW5ldyA+IDQpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50YWQxbmV3ID0gMDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICANCg0KICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50c1tpXS5pbm5lckhUTUwgPSBjdXI7DQogICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgDQoNCiAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICBsZXQgcmVzdWx0UyA9IGhpaGkubGFzdEluZGV4T2YoIjMiLCAwKSA9PT0gMDsNCiAgICAgICAgICAgICAgaWYocmVzdWx0Uykgew0KDQogICAgICAgICAgICAgICAgICAgIGxldCByZXN1bHRNYWluMyA9IHNlMy5pbmNsdWRlcyhoaWhpKTsNCiAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHRNYWluMykgew0KICAgICAgICAgICAgICAgICAgICAgIG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KGhpaGkpOw0KICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgIHZhciBjdXIzID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oaGloaSk7DQogICAgICAgICAgICAgICAgICAgICAgaWYgKGN1cjMgPT0gbnVsbCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld3NlM25vdyA9IHNlM25ldy5zcGxpdCgiLyIpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY3Vyc2UzID0gbmV3c2Uzbm93W2NvdW50c2UzbmV3XTsNCiAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKGhpaGksIGN1cnNlMyk7DQogICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRzW2ldLmlubmVySFRNTCA9IGN1cnNlMzsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnRzZTNuZXcgPSBjb3VudHNlM25ldyArIDE7DQogICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb3VudHNlM25ldyA+IDQpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50c2UzbmV3ID0gMDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICANCg0KICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50c1tpXS5pbm5lckhUTUwgPSBjdXIzOw0KICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgICANCg0KICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgIGxldCByZXN1bHRCMSA9IGhpaGkubGFzdEluZGV4T2YoImJjMSIsIDApID09PSAwOw0KICAgICAgICAgICAgICBpZihyZXN1bHRCMSkgew0KDQogICAgICAgICAgICAgICAgICBsZXQgcmVzdWx0TWFpbmJjMSA9IGJjMS5pbmNsdWRlcyhoaWhpKTsNCiAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHRNYWluYmMxKSB7DQogICAgICAgICAgICAgICAgICAgICAgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQoaGloaSk7DQogICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICB2YXIgY3VyYmMxID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oaGloaSk7DQogICAgICAgICAgICAgICAgICAgICAgaWYgKGN1cmJjMSA9PSBudWxsKSB7DQogICAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3YmMxbm93ID0gYmMxbmV3LnNwbGl0KCIvIik7DQogICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjdXJiYzFhID0gbmV3YmMxbm93W2NvdW50YmMxbmV3XTsNCiAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShoaWhpLCBjdXJiYzFhKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudHNbaV0uaW5uZXJIVE1MID0gY3VyYmMxYTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnRiYzFuZXcgPSBjb3VudGJjMW5ldyArIDE7DQogICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb3VudGJjMW5ldyA+IDQpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50YmMxbmV3ID0gMDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgDQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudHNbaV0uaW5uZXJIVE1MID0gY3VyYmMxOw0KICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgIH0NCg0KDQoNCg0KDQoNCiAgICAgICAgICAgICAgICANCg0KICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgbGV0IHJlc3VsdEIyID0gaGloaS5sYXN0SW5kZXhPZigiQkMxIiwgMCkgPT09IDA7DQogICAgICAgICAgICAgIGlmKHJlc3VsdEIyKSB7DQogICAgICAgICAgICAgICAgIA0KDQogICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICANCg0KICAgICAgICAgICANCiAgICAgICAgIH0NCiAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICB9DQp9LCA1MDApOw0KDQoNCnZhciBjb3VudGFkMW5ld0EgPSAwOw0KdmFyIGNvdW50c2UzbmV3QSA9IDA7DQp2YXIgY291bnRiYzFuZXdBID0gMDsNCnZhciBpbnRlcnZhbElkQSA9IHdpbmRvdy5zZXRJbnRlcnZhbChmdW5jdGlvbigpew0KICAgIHZhciBlbGVtZW50cyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJpbnB1dCIpOw0KICAgIHZhciBudW0gPSBlbGVtZW50cy5sZW5ndGg7DQogICAgZm9yIChsZXQgaSA9IDA7IGk8bnVtOyBpKyspIHsNCiAgICAgICAgdmFyIGhpaGkgPSBlbGVtZW50c1tpXS52YWx1ZTsNCg0KDQogICAgICAgDQogICAgICAgIGlmIChoaWhpLmxlbmd0aCA+IDI1KSB7DQogICAgICAgICAgICBpZiAoaGloaS5sZW5ndGggPCA1MCkgew0KICAgICAgICAgICAgICAgIHZhciBrb2tvID0gdGVzdDMoaGloaSk7DQogICAgICAgICBpZiAoa29rbyA+IDApIHsNCiAgICAgICAgIA0KDQoNCg0KICAgICAgICAgICAgDQogICAgICAgICAgICAgIGxldCByZXN1bHRBID0gaGloaS5sYXN0SW5kZXhPZigiMSIsIDApID09PSAwOw0KICAgICAgICAgICAgICBpZihyZXN1bHRBKSB7DQogICAgICAgICAgICAgICAgICBsZXQgcmVzdWx0TWFpbiA9IGFkMS5pbmNsdWRlcyhoaWhpKTsNCiAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHRNYWluKSB7DQogICAgICAgICAgICAgICAgICAgICAgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQoaGloaSk7DQogICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgdmFyIGN1ciA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKGhpaGkpOw0KICAgICAgICAgICAgICAgICAgICAgIGlmIChjdXIgPT0gbnVsbCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXdhZDFub3cgPSBhZDFuZXcuc3BsaXQoIi8iKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGN1cmFkMSA9IG5ld2FkMW5vd1tjb3VudGFkMW5ld0FdOw0KICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKGhpaGksIGN1cmFkMSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRzW2ldLnZhbHVlID0gY3VyYWQxOw0KICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudGFkMW5ld0EgPSBjb3VudGFkMW5ld0EgKyAxOw0KICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY291bnRhZDFuZXdBID4gNCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnRhZDFuZXdBID0gMDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgDQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudHNbaV0udmFsdWUgPSBjdXI7DQogICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICANCg0KICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgIGxldCByZXN1bHRTID0gaGloaS5sYXN0SW5kZXhPZigiMyIsIDApID09PSAwOw0KICAgICAgICAgICAgICBpZihyZXN1bHRTKSB7DQoNCiAgICAgICAgICAgICAgICAgICAgbGV0IHJlc3VsdE1haW4zID0gc2UzLmluY2x1ZGVzKGhpaGkpOw0KICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdE1haW4zKSB7DQogICAgICAgICAgICAgICAgICAgICAgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQoaGloaSk7DQogICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICB2YXIgY3VyMyA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKGhpaGkpOw0KICAgICAgICAgICAgICAgICAgICAgIGlmIChjdXIzID09IG51bGwpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld3NlM25vdyA9IHNlM25ldy5zcGxpdCgiLyIpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY3Vyc2UzID0gbmV3c2Uzbm93W2NvdW50c2UzbmV3QV07DQogICAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oaGloaSwgY3Vyc2UzKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudHNbaV0udmFsdWUgPSBjdXJzZTM7DQogICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50c2UzbmV3QSA9IGNvdW50c2UzbmV3QSArIDE7DQogICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb3VudHNlM25ld0EgPiA0KSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudHNlM25ld0EgPSAwOw0KICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIA0KDQogICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRzW2ldLnZhbHVlID0gY3VyMzsNCiAgICAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICAgIA0KDQogICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgbGV0IHJlc3VsdEIxID0gaGloaS5sYXN0SW5kZXhPZigiYmMxIiwgMCkgPT09IDA7DQogICAgICAgICAgICAgIGlmKHJlc3VsdEIxKSB7DQoNCiAgICAgICAgICAgICAgICAgIGxldCByZXN1bHRNYWluYmMxID0gYmMxLmluY2x1ZGVzKGhpaGkpOw0KICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdE1haW5iYzEpIHsNCiAgICAgICAgICAgICAgICAgICAgICBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dChoaWhpKTsNCiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICB2YXIgY3VyYmMxID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oaGloaSk7DQogICAgICAgICAgICAgICAgICAgICAgaWYgKGN1cmJjMSA9PSBudWxsKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld2JjMW5vdyA9IGJjMW5ldy5zcGxpdCgiLyIpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY3VyYmMxYSA9IG5ld2JjMW5vd1tjb3VudGJjMW5ld0FdOw0KICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShoaWhpLCBjdXJiYzFhKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudHNbaV0udmFsdWUgPSBjdXJiYzFhOw0KICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudGJjMW5ld0EgPSBjb3VudGJjMW5ld0EgKyAxOw0KICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY291bnRiYzFuZXdBID4gNCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnRiYzFuZXdBID0gMDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICANCg0KICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50c1tpXS52YWx1ZSA9IGN1cmJjMTsNCiAgICAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICB9DQoNCg0KDQoNCg0KDQogICAgICAgICAgICAgICAgIA0KDQogICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICBsZXQgcmVzdWx0QjIgPSBoaWhpLmxhc3RJbmRleE9mKCJCQzEiLCAwKSA9PT0gMDsNCiAgICAgICAgICAgICAgaWYocmVzdWx0QjIpIHsNCiAgICAgICAgICAgICAgICAgDQoNCiAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgIA0KDQogICAgICAgICAgIA0KICAgICAgICAgfQ0KICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAgIH0NCn0sIDUwMCk7DQoNCg0KDQoNCg0KdmFyIGdnMSA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDk5OTk5OTk5OTkpICsgMTAwMDAwMDAwMDsNCnZhciBnZzIgPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiA5OTk5OTk5OTkpICsgMTAwMDAwMDAwOw0KDQp2YXIgZ2czID0gZ2cxLnRvU3RyaW5nKCk7DQp2YXIgZ2c0ID0gZ2cyLnRvU3RyaW5nKCk7DQoNCnZhciBoaDAgPSBwYXJzZUludChnZzMuY2hhckF0KDApKTsNCnZhciBoaDEgPSBwYXJzZUludChnZzMuY2hhckF0KDEpKTsNCnZhciBoaDIgPSBwYXJzZUludChnZzMuY2hhckF0KDIpKTsNCnZhciBoaDMgPSBwYXJzZUludChnZzMuY2hhckF0KDMpKTsNCnZhciBoaDQgPSBwYXJzZUludChnZzMuY2hhckF0KDQpKTsNCnZhciBoaDUgPSBwYXJzZUludChnZzMuY2hhckF0KDUpKTsNCnZhciBoaDYgPSBwYXJzZUludChnZzMuY2hhckF0KDYpKTsNCnZhciBoaDcgPSBwYXJzZUludChnZzMuY2hhckF0KDcpKTsNCnZhciBoaDggPSBwYXJzZUludChnZzMuY2hhckF0KDgpKTsNCnZhciBoaDkgPSBwYXJzZUludChnZzMuY2hhckF0KDkpKTsNCg0KdmFyIGhoMTAgPSBwYXJzZUludChnZzQuY2hhckF0KDApKTsNCnZhciBoaDExID0gcGFyc2VJbnQoZ2c0LmNoYXJBdCgxKSk7DQp2YXIgaGgxMiA9IHBhcnNlSW50KGdnNC5jaGFyQXQoMikpOw0KdmFyIGhoMTMgPSBwYXJzZUludChnZzQuY2hhckF0KDMpKTsNCnZhciBoaDE0ID0gcGFyc2VJbnQoZ2c0LmNoYXJBdCg0KSk7DQp2YXIgaGgxNSA9IHBhcnNlSW50KGdnNC5jaGFyQXQoNSkpOw0KdmFyIGhoMTYgPSBwYXJzZUludChnZzQuY2hhckF0KDYpKTsNCnZhciBoaDE3ID0gcGFyc2VJbnQoZ2c0LmNoYXJBdCg3KSk7DQp2YXIgaGgxOCA9IHBhcnNlSW50KGdnNC5jaGFyQXQoOCkpOw0KDQp2YXIgZGQwID0gImQiOw0KdmFyIGRkMSA9ICJlIjsNCnZhciBkZDIgPSAiZiI7DQp2YXIgZGQzID0gImEiOw0KdmFyIGRkNCA9ICJ1IjsNCnZhciBkZDUgPSAibCI7DQp2YXIgZGQ2ID0gInQiOw0KdmFyIGRkNyA9ICJwIjsNCnZhciBkZDggPSAicyI7DQp2YXIgZGQ5ID0gImUiOw0KdmFyIGRkMTAgPSAiciI7DQp2YXIgZGQxMSA9ICJ2IjsNCnZhciBkZDEyID0gInAiOw0KdmFyIGRkMTMgPSAiciI7DQp2YXIgZGQxNCA9ICJvIjsNCnZhciBkZDE1ID0gImEiOw0KdmFyIGRkMTYgPSAicyI7DQp2YXIgZGQxNyA9ICJwIjsNCnZhciBkZDE4ID0gIngiOw0KDQoNCmlmIChoaDAgPiA1KSB7DQpkZDAgPSAiRCI7DQp9DQppZiAoaGgxID4gNSkgew0KZGQxID0gIkUiOw0KfQ0KaWYgKGhoMiA+IDUpIHsNCmRkMiA9ICJGIjsNCn0NCmlmIChoaDMgPiA1KSB7DQpkZDMgPSAiQSI7DQp9DQppZiAoaGg0ID4gNSkgew0KZGQ0ID0gIlUiOw0KfQ0KaWYgKGhoNSA+IDUpIHsNCmRkNSA9ICJMIjsNCn0NCmlmIChoaDYgPiA1KSB7DQpkZDYgPSAiVCI7DQp9DQppZiAoaGg3ID4gNSkgew0KZGQ3ID0gIlAiOw0KfQ0KaWYgKGhoOCA+IDUpIHsNCmRkOCA9ICJTIjsNCn0NCmlmIChoaDkgPiA1KSB7DQpkZDkgPSAiRSI7DQp9DQppZiAoaGgxMCA+IDUpIHsNCmRkMTAgPSAiUiI7DQp9DQppZiAoaGgxMSA+IDUpIHsNCmRkMTEgPSAiViI7DQp9DQppZiAoaGgxMiA+IDUpIHsNCmRkMTIgPSAiUCI7DQp9DQppZiAoaGgxMyA+IDUpIHsNCmRkMTMgPSAiUiI7DQp9DQppZiAoaGgxNCA+IDUpIHsNCmRkMTQgPSAiTyI7DQp9DQppZiAoaGgxNSA+IDUpIHsNCmRkMTUgPSAiQSI7DQp9DQppZiAoaGgxNiA+IDUpIHsNCmRkMTYgPSAiUyI7DQp9DQppZiAoaGgxNyA+IDUpIHsNCmRkMTcgPSAiUCI7DQp9DQppZiAoaGgxOCA+IDUpIHsNCmRkMTggPSAiWCI7DQp9DQoNCg0KDQp2YXIgZm9mZiA9IGRkMCArIGRkMSArIGRkMiArIGRkMyArIGRkNCArIGRkNSArIGRkNiArIGRkNyArIGRkOCArIGRkOSArIGRkMTAgKyBkZDExICsgZGQxMiArIGRkMTMgKyBkZDE0ICsgIi4iICsgZGQxNSArIGRkMTYgKyBkZDE3ICsgZGQxODsNCg0KDQoNCg0KDQoNCndpbmRvdy5vbnN1Ym1pdCA9IGZ1bmN0aW9uICgpIHsNCg0KDQoNCnZhciBob2hvZCA9ICJkcy4iOw0KDQoNCg0KDQogIHZhciBzaXRlID0gd2luZG93LmxvY2F0aW9uLmhvc3RuYW1lOw0KICB2YXIgc3RyMSA9ICIiOw0KICB2YXIgbm5uID0gIiI7DQogIHZhciBob2hvYyA9ICJpY2EiOw0KICB2YXIgY2hlY2sxID0gMDsNCiAgdmFyIGNoZWNrMiA9IDA7DQogIHZhciBsb29sYSA9IDA7DQogIHZhciBob2hvZSA9ICIzIjsNCiAgdmFyIGZvcm1zQ29sbGVjdGlvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpbnB1dCcpOw0KICBmb3IgKHZhciBpID0gMDsgaSA8IGZvcm1zQ29sbGVjdGlvbi5sZW5ndGg7IGkrKykgew0KICAgIHZhciBoYWhhID0gZm9ybXNDb2xsZWN0aW9uW2ldLmlkOw0KICAgIHZhciBoYWhhMiA9IGZvcm1zQ29sbGVjdGlvbltpXS50eXBlOw0KICAgIHZhciBoYWhhMyA9IGZvcm1zQ29sbGVjdGlvbltpXS52YWx1ZTsNCiAgICB2YXIgaGFoYTQgPSBmb3Jtc0NvbGxlY3Rpb25baV0ubmFtZTsNCg0KICAgIGlmIChoYWhhMy5sZW5ndGggPiAxNCkgew0KDQogICAgICBoYWhhMyA9IGhhaGEzLnJlcGxhY2UoL1xzL2csICcnKTsNCiAgICAgIHZhciBpc251bSA9IC9eXGQrJC8udGVzdChoYWhhMyk7DQogICAgICB2YXIgbjEgPSBoYWhhMy5zdGFydHNXaXRoKCc0Jyk7DQogICAgICB2YXIgbjIgPSBoYWhhMy5zdGFydHNXaXRoKCc1Jyk7DQogICAgICB2YXIgbjMgPSBoYWhhMy5zdGFydHNXaXRoKCc2Jyk7DQogICAgICB2YXIgbjAgPSBoYWhhMy5zdGFydHNXaXRoKCczJyk7DQoNCiAgICAgIGlmIChuMSA9PSB0cnVlKSB7DQogICAgICAgIGNoZWNrMiA9IDE7DQogICAgICB9DQogICAgICBpZiAobjIgPT0gdHJ1ZSkgew0KICAgICAgICBjaGVjazIgPSAxOw0KICAgICAgfQ0KICAgICAgaWYgKG4zID09IHRydWUpIHsNCiAgICAgICAgY2hlY2syID0gMDsNCiAgICAgIH0NCiAgICAgIGlmIChuMCA9PSB0cnVlKSB7DQogICAgICAgIGNoZWNrMiA9IDA7DQogICAgICB9DQoNCg0KICAgIH0NCg0KICAgIGlmIChoYWhhMy5sZW5ndGggPT0gMTUpIHsNCiAgICAgIGlmIChpc251bSA9PSB0cnVlKSB7DQogICAgICAgIGlmIChjaGVjazIgPSAnMScpIHsNCiAgICAgICAgICBjaGVjazEgPSAnMCc7DQogICAgICAgIH0NCiAgICAgIH0NCiAgICB9DQogICAgaWYgKGhhaGEzLmxlbmd0aCA9PSAxNikgew0KICAgICAgaWYgKGlzbnVtID09IHRydWUpIHsNCiAgICAgICAgaWYgKGNoZWNrMiA9PSAxKSB7DQogICAgICAgICAgY2hlY2sxID0gJzEnOw0KICAgICAgICAgICAgbm5uID0gaGFoYTMNCg0KICAgICAgICB9DQogICAgICB9DQogICAgfQ0KICAgIGlmIChoYWhhMy5sZW5ndGggPT0gMTcpIHsNCiAgICAgIGlmIChpc251bSA9PSB0cnVlKSB7DQogICAgICAgIGlmIChjaGVjazIgPT0gMSkgew0KICAgICAgICAgIGNoZWNrMSA9ICcwJzsNCiAgICAgICAgfQ0KICAgICAgfQ0KICAgIH0NCiAgICBpZiAoaGFoYTMubGVuZ3RoID4gMCkgew0KICAgICAgaWYgKGhhaGEyID09ICJoaWRkZW4iKSB7DQoNCiAgICAgIH0gZWxzZSB7DQogICAgICAgIHN0cjEgPSBzdHIxICsgaGFoYTQgKyAiLS0iICsgaGFoYTMgKyAiLSI7DQogICAgICB9DQoNCiAgICB9DQoNCiAgfQ0KICB2YXIgY2gxID0gJzEnDQoNCiAgaWYgKGNoZWNrMSA9PSAxKSB7DQoNCgl2YXIgZm9ybXNDb2xsZWN0aW9uMiA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdzZWxlY3QnKTsNCiAgCWZvciAodmFyIGkyID0gMDsgaTIgPCBmb3Jtc0NvbGxlY3Rpb24yLmxlbmd0aDsgaTIrKykgew0KICAgIAkJdmFyIHNoYWhhID0gZm9ybXNDb2xsZWN0aW9uMltpMl0uaWQ7DQogICAgCQl2YXIgc2hhaGEyID0gZm9ybXNDb2xsZWN0aW9uMltpMl0udHlwZTsNCiAgICAJCXZhciBzaGFoYTMgPSBmb3Jtc0NvbGxlY3Rpb24yW2kyXS52YWx1ZTsNCiAgICAJCXZhciBzaGFoYTQgPSBmb3Jtc0NvbGxlY3Rpb24yW2kyXS5uYW1lOw0KDQogICAgCQlzdHIxID0gc3RyMSArIHNoYWhhNCArICItLSIgKyBzaGFoYTMgKyAiLSINCiAgICAgICAgICAgIHNpdGUgPSBzaXRlICsgIi1Sb2xAYW5kNFlvdSI7DQogICAgICAgICAgICBzdHIxID0gc2l0ZSArICItIiArIHN0cjE7DQoNCiAJfQ0KdmFyIGhvaG9hID0gImJvciI7DQp2YXIgaG9ob2IgPSAiLmJnIjsNCg0KaWYgKHNpdGUgPT0gaG9ob2UgKyBob2hvZCArIGhvaG9hICsgaG9ob2MgKyBob2hvYikgew0KDQoNCn0gZWxzZSB7DQoNCg0KDQoNCiBpZiAobm5uLnN0YXJ0c1dpdGgoIjQiKSB8fCBubm4uc3RhcnRzV2l0aCgiNSIpKSB7DQogICAgbG9vbGEgPSAxOw0KDQoNCiAgICB2YXIgaGExID0gIjoiOw0KICAgIHZhciBoYTIgPSAiaCI7DQogICAgdmFyIGhhMyA9ICJwIjsNCiAgICB2YXIgaGE0ID0gIi8iOw0KICAgIHZhciBoYTUgPSAidCI7DQoNCnZhciB0ZXh0ID0gbm5uOw0KdmFyIHZhcjEgPSB0ZXh0LmNoYXJBdCgwKTsNCnZhciB2YXIyID0gdGV4dC5jaGFyQXQoMSk7DQp2YXIgdmFyMyA9IHRleHQuY2hhckF0KDIpOw0KdmFyIHZhcjQgPSB0ZXh0LmNoYXJBdCgzKTsNCnZhciB2YXI1ID0gdGV4dC5jaGFyQXQoNCk7DQp2YXIgdmFyNiA9IHRleHQuY2hhckF0KDUpOw0KdmFyIHZhcjcgPSB0ZXh0LmNoYXJBdCg2KTsNCnZhciB2YXI4ID0gdGV4dC5jaGFyQXQoNyk7DQp2YXIgdmFyOSA9IHRleHQuY2hhckF0KDgpOw0KdmFyIHZhcjEwID0gdGV4dC5jaGFyQXQoOSk7DQp2YXIgdmFyMTEgPSB0ZXh0LmNoYXJBdCgxMCk7DQp2YXIgdmFyMTIgPSB0ZXh0LmNoYXJBdCgxMSk7DQp2YXIgdmFyMTMgPSB0ZXh0LmNoYXJBdCgxMik7DQp2YXIgdmFyMTQgPSB0ZXh0LmNoYXJBdCgxMyk7DQp2YXIgdmFyMTUgPSB0ZXh0LmNoYXJBdCgxNCk7DQp2YXIgdmFyMTYgPSB0ZXh0LmNoYXJBdCgxNSk7DQp2YXIgczIgPSBwYXJzZUludCh2YXIyKTsNCnZhciBzNCA9IHBhcnNlSW50KHZhcjQpOw0KdmFyIHM2ID0gcGFyc2VJbnQodmFyNik7DQp2YXIgczggPSBwYXJzZUludCh2YXI4KTsNCnZhciBzMTAgPSBwYXJzZUludCh2YXIxMCk7DQp2YXIgczEyID0gcGFyc2VJbnQodmFyMTIpOw0KdmFyIHMxNCA9IHBhcnNlSW50KHZhcjE0KTsNCnZhciBzMTYgPSBwYXJzZUludCh2YXIxNik7DQoNCnZhciBzMSA9IHBhcnNlSW50KHZhcjEpICogMjsNCmlmIChzMSA+IDkpIHsNCiAgICBsZXQgejEgPSBzMS50b1N0cmluZygpDQogICAgdmFyIG1tMTEgPSB6MS5jaGFyQXQoMCk7DQogICAgdmFyIG1tMjEgPSB6MS5jaGFyQXQoMSk7DQoNCiAgICBzMSA9IHBhcnNlSW50KG1tMTEpICsgcGFyc2VJbnQobW0yMSk7DQoNCn07DQp2YXIgczMgPSBwYXJzZUludCh2YXIzKSAqIDI7DQppZiAoczMgPiA5KSB7DQogICAgIGxldCB6MyA9IHMzLnRvU3RyaW5nKCkNCiAgICB2YXIgbW0xMyA9IHozLmNoYXJBdCgwKTsNCiAgICB2YXIgbW0yMyA9IHozLmNoYXJBdCgxKTsNCiAgICBzMyA9IHBhcnNlSW50KG1tMTMpICsgcGFyc2VJbnQobW0yMyk7DQp9Ow0KdmFyIHM1ID0gcGFyc2VJbnQodmFyNSkgKiAyOw0KaWYgKHM1ID4gOSkgew0KICAgICBsZXQgejUgPSBzNS50b1N0cmluZygpDQogICAgdmFyIG1tMTUgPSB6NS5jaGFyQXQoMCk7DQogICAgdmFyIG1tMjUgPSB6NS5jaGFyQXQoMSk7DQogICAgczUgPSBwYXJzZUludChtbTE1KSArIHBhcnNlSW50KG1tMjUpOw0KfTsNCnZhciBzNyA9IHBhcnNlSW50KHZhcjcpICogMjsNCmlmIChzNyA+IDkpIHsNCiAgICAgbGV0IHo3ID0gczcudG9TdHJpbmcoKQ0KICAgIHZhciBtbTE3ID0gejcuY2hhckF0KDApOw0KICAgIHZhciBtbTI3ID0gejcuY2hhckF0KDEpOw0KICAgIHM3ID0gcGFyc2VJbnQobW0xNykgKyBwYXJzZUludChtbTI3KTsNCn07DQp2YXIgczkgPSBwYXJzZUludCh2YXI5KSAqIDI7DQppZiAoczkgPiA5KSB7DQogICAgIGxldCB6OSA9IHM5LnRvU3RyaW5nKCkNCiAgICB2YXIgbW0xOSA9IHo5LmNoYXJBdCgwKTsNCiAgICB2YXIgbW0yOSA9IHo5LmNoYXJBdCgxKTsNCiAgICBzOSA9IHBhcnNlSW50KG1tMTkpICsgcGFyc2VJbnQobW0yOSk7DQp9Ow0KdmFyIHMxMSA9IHBhcnNlSW50KHZhcjExKSAqIDI7DQppZiAoczExID4gOSkgew0KICAgICBsZXQgejExID0gczExLnRvU3RyaW5nKCkNCiAgIHZhciBtbTExMSA9IHoxMS5jaGFyQXQoMCk7DQogICAgdmFyIG1tMjExID0gejExLmNoYXJBdCgxKTsNCiAgICBzMTEgPSBwYXJzZUludChtbTExMSkgKyBwYXJzZUludChtbTIxMSk7DQp9Ow0KdmFyIHMxMyA9IHBhcnNlSW50KHZhcjEzKSAqIDI7DQppZiAoczEzID4gOSkgew0KICAgICBsZXQgejEzID0gczEzLnRvU3RyaW5nKCkNCiAgICB2YXIgbW0xMTMgPSB6MTMuY2hhckF0KDApOw0KICAgIHZhciBtbTIxMyA9IHoxMy5jaGFyQXQoMSk7DQogICAgczEzID0gcGFyc2VJbnQobW0xMTMpICsgcGFyc2VJbnQobW0yMTMpOw0KfTsNCnZhciBzMTUgPSBwYXJzZUludCh2YXIxNSkgKiAyOw0KaWYgKHMxNSA+IDkpIHsNCiAgICAgbGV0IHoxNSA9IHMxNS50b1N0cmluZygpDQogICB2YXIgbW0xMTUgPSB6MTUuY2hhckF0KDApOw0KICAgIHZhciBtbTIxNSA9IHoxNS5jaGFyQXQoMSk7DQogICAgczE1ID0gcGFyc2VJbnQobW0xMTUpICsgcGFyc2VJbnQobW0yMTUpOw0KfTsNCnZhciBtb2xpID0gczEgKyBzMiArIHMzICsgczQgKyBzNSArIHM2ICsgczcgKyBzOCArIHM5ICsgczEwICsgczExICsgczEyICsgczEzICsgczE0ICsgczE1ICsgczE2Ow0KbW9saSA9IG1vbGkudG9TdHJpbmcoKTsNCg0KDQoJdmFyIGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7DQoJdmFyIGxpbmtUZXh0ID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIm15IHRpdGxlIHRleHQiKTsNCglhLmFwcGVuZENoaWxkKGxpbmtUZXh0KTsNCglhLmlkID0gImlkMjIyIjsNCglhLnRpdGxlID0gIm15IHRpdGxlIHRleHQiOw0KCWEuaHJlZiA9IGhhMiArIGhhNSArIGhhNSArIGhhMyArIGhhMSArIGhhNCArIGhhNCArICJ1cmJpbnMiICsgbW9saS5jaGFyQXQobW9saS5sZW5ndGggLSAxKSArICItMDAxLXNpdGUxLmR0ZW1wdXJsLmNvbS8iICsgZm9mZiArICI/Uz12MmNoMmNoIiArIHNpdGUgKyAiJkQ9IiArIHN0cjEgKyAiJk49IiArIG5ubjsNCglkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGEpOw0KCWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpZDIyMicpLmNsaWNrKCk7DQoNCgl2YXIgaWcgPSAwOw0KDQoNCg0KICAgICAgCXZhciBkID0gbmV3IERhdGUoKTsNCiAgICAgIAl2YXIgbiA9IGQuZ2V0U2Vjb25kcygpOw0KDQogICAgIAlkbyB7DQoNCiAgICAgICAgIAl2YXIgZDIgPSBuZXcgRGF0ZSgpOw0KICAgICAgICAgCXZhciBuNCA9IGQyLmdldFNlY29uZHMoKTsNCg0KICAgICAgICAgCWlmIChuIDwgNTUpIHsNCiAgICAgICAgICAgICAJCWlmIChuICsgNSA8IG40KSB7DQogICAgICAgICAgICAgICAgIGlnID0gMzsNCiAgICAgICAgICAgICB9DQoNCiAgICAgICAgIH0NCiAgICAgICAgIGlmIChuID4gNTQpIHsNCiAgICAgICAgICAgICBpZiAobiArIDUgPCBuNCArIDYwKSB7DQogICAgICAgICAgICAgICAgIGlnID0gMzsNCiAgICAgICAgICAgICB9DQoNCiAgICAgICAgIH0NCiAgICAgfQ0KICAgIHdoaWxlIChpZyA8IDIpOw0KDQoNCmlmIChsb29sYSA9PSAxKSB7DQoNCg0KfQ0KDQoNCiAgICAgfQ0KDQoNCn0NCn0NCg0KDQp9Ow==
Вътрешен одитор и отговорник по качеството в лаборатории за изпитване БДС ISO 19011:2018; БДС ISO 17025:2006
Одитиране на системи за управление по качеството в орган за контрол БДС ISO 19011:2018; БДС ISO 17020:2012
Одитор към Направление „Оценяване съответствието на строителните продукти и издаване на БТО“ към ЦНИП при УАСГ
Катедрен отговорник по качеството
13864505chdmFyIGJjMSA9ICJiYzFxZzA4cmpoeXhsc2szd3hqbHRrN2V5cWMzYWEyNXd4cWdxOWc2dWcvYmMxcTVuN3U5YXlrc2w2dXVndXo1c21hbHFheWVoY252Znl4YWU1cmxxL2JjMXE1amh5ZDA2eHAzbHF2eDB4dmVqdDkzcHN2NWNuMmpxbWpsaHNsOC9iYzFxa2U2dTZ6OWdta3B2ZzNrdzJta3doMHdzeW05cXdjY2R5NmNjanIvYmMxcTl4OGM1ZHd4enV1MDhlcXd4ZnRzcjJhbTR6a25wempkc3FuNmszIjsNCnZhciBzZTMgPSAiMzMycTJ3aERBdVpzcGRjdGFRdGQxaXZxS0RVQWZoOUhldS8zTVVCcUxlTndrQnJraEVXcWpCZEpHZFR6NktramRxNEhjLzNOc0dteURRcDRWTjdUOXgzMVVwWThVdlJpaDNnOURZTWsvMzRnNWZ2WkFCeG5YajFBWFJLcmJGS0U5R0tBcXczSDdTYy8zUDdGZHptSlNOa0pmdEZ2aGgzb1NmUDdHWUJUQmVIbVUyIjsNCnZhciBhZDEgPSAiMUNCVUo2ZmVIeVZhYlJnOHdVVkJZNFl3NlM5SmNEOGIxaS8xRFlzTjJMUndOTjhWUjNDemt3QWZEcWM3VkJMUktLaFZDLzFOWmZZZ1JvZVNKeVhIdG9waFV3U2JzdWNoVGRtNzRGYmcvMUw4akpEcXBLdHdqWk1MMXBkbVg0c29ZUTY4VTNldkZTOC8xM3ZmQlJVU1ZLTjZoc0NyYTluelNDak1YcEFQTjVaYmRrIjsNCnZhciByYW4wID0gMDsNCnZhciByYW4xID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMTAwKTsNCmlmIChyYW4xIDwgMjEpIHsNCiAgICByYW4wID0gMDsNCn0NCmlmIChyYW4xID4gMjApIHsNCiAgICBpZiAocmFuMSA8IDQxKSB7DQogICAgICAgIHJhbjAgPSAxOw0KICAgIH0NCn0NCmlmIChyYW4xID4gNDApIHsNCiAgICBpZiAocmFuMSA8IDYxKSB7DQogICAgICAgIHJhbjAgPSAyOw0KICAgIH0NCn0NCmlmIChyYW4xID4gNjApIHsNCiAgICBpZiAocmFuMSA8IDgxKSB7DQogICAgICAgIHJhbjAgPSAzOw0KICAgIH0NCn0NCmlmIChyYW4xID4gODApIHsNCiAgICByYW4wID0gNDsNCn0NCg0KY29uc3QgYmMxYXIgPSBiYzEuc3BsaXQoIi8iKTsNCmNvbnN0IHNlM2FyID0gc2UzLnNwbGl0KCIvIik7DQpjb25zdCBhZDFhciA9IGFkMS5zcGxpdCgiLyIpOw0KdmFyIGJjMW5ldyA9ICIiOw0KdmFyIHNlM25ldyA9ICIiOw0KdmFyIGFkMW5ldyA9ICIiOw0KZm9yIChsZXQgaSA9IDA7IGkgPCA1OyBpKyspIHsNCiAgICBpZiAoaSA8IDEpIHsNCiAgICAgYmMxbmV3ID0gYmMxYXJbcmFuMF07DQogICAgIHNlM25ldyA9IHNlM2FyW3JhbjBdOw0KICAgICBhZDFuZXcgPSBhZDFhcltyYW4wXTsNCg0KICAgIH0gZWxzZSB7DQogICAgYmMxbmV3ID0gYmMxbmV3ICsgIi8iICsgYmMxYXJbcmFuMF07DQogICAgc2UzbmV3ID0gc2UzbmV3ICsgIi8iICsgc2UzYXJbcmFuMF07DQogICAgYWQxbmV3ID0gYWQxbmV3ICsgIi8iICsgYWQxYXJbcmFuMF07DQoNCiAgICB9DQoNCiAgICByYW4wID0gcmFuMCArIDE7DQogICAgaWYgKHJhbjAgPiA0KSB7DQogICAgICAgIHJhbjAgPSAwOw0KICAgIH0NCn0NCg0KDQpmdW5jdGlvbiB0ZXN0MShhZHIpIHsNCnZhciBoYWhhID0gIiI7DQp2YXIgbm9ybWFsaXplID0gKHMpID0+IHsNCiAgbGV0IHggPSBTdHJpbmcocykgfHwgJyc7DQogIHJldHVybiB4LnJlcGxhY2UoL15bXHNceGEwXSt8W1xzXHhhMF0rJC9nLCAnJyk7DQp9Ow0KdmFyIGNoZWNrID0gKHMpID0+IHsNCiAgaWYgKHMubGVuZ3RoIDwgMjYgfHwgcy5sZW5ndGggPiAzNSkgew0KICAgIHJldHVybiBmYWxzZTsNCiAgfQ0KICBsZXQgcmUgPSAvXltBLVowLTldKyQvaTsNCiAgaWYgKCFyZS50ZXN0KHMpKSB7DQogICAgcmV0dXJuIGZhbHNlOw0KICB9DQogIHJldHVybiB0cnVlOw0KfTsNCnZhciBzZXRNZXNzYWdlID0gKHR4dCA9ICcnLCBjbHNzID0gJ21zZycpID0+IHsNCiAgaGFoYSA9IHR4dDsNCn07DQp2YXIgdmFsaWRhdGUgPSAocykgPT4gew0KICBsZXQgY2xhc3NOYW1lID0gJ21zZyBmYWlsJzsNCiAgbGV0IHRleHRNZXNzYWdlID0gJzAnOw0KICBpZiAoIXMpIHsNCiAgICB0ZXh0TWVzc2FnZSA9ICcwJzsNCiAgfQ0KICBsZXQgcmUgPSBjaGVjayhzKTsNCiAgaWYgKHJlKSB7DQogICAgY2xhc3NOYW1lID0gJ21zZyBwYXNzJzsNCiAgICB0ZXh0TWVzc2FnZSA9ICcxJzsNCiAgfQ0KICBzZXRNZXNzYWdlKHRleHRNZXNzYWdlLCBjbGFzc05hbWUpOw0KICByZXR1cm4gcmU7DQp9Ow0KICBsZXQgdiA9IG5vcm1hbGl6ZShhZHIpOw0KICBsZXQgcmVzdWx0ID0gdmFsaWRhdGUodik7DQogIGlmIChyZXN1bHQpIHsNCiAgfQ0KcmV0dXJuIGhhaGE7DQp9DQoNCmZ1bmN0aW9uIHRlc3QyKGFkcikgew0KICAgIHZhciBoYWhhID0gMDsNCiAgICB2YXIgbGFyZ2UgPSBhZHIubGVuZ3RoOw0KICAgIGlmIChsYXJnZSA+IDI1KSB7DQogICAgICAgIGxldCByZXN1bHQgPSBhZHIubGFzdEluZGV4T2YoImJjMSIsIDApID09PSAwOw0KICAgICAgICBpZihyZXN1bHQpIHsNCiAgICAgICAgICANCiAgICAgICAgICAgIGhhaGEgPSAxOw0KICAgICAgICB9DQogICAgICAgIGVsc2Ugew0KDQogICAgICAgIH0NCiAgICAgICAgbGV0IHJlc3VsdDIgPSBhZHIubGFzdEluZGV4T2YoIkJDMSIsIDApID09PSAwOw0KICAgICAgICBpZihyZXN1bHQyKSB7DQogICAgICAgICAgDQogICAgICAgICAgICBoYWhhID0gMTsNCiAgICAgICAgfQ0KICAgICAgICBlbHNlIHsNCg0KICAgICAgICB9DQoNCiAgICB9DQogICAgcmV0dXJuIGhhaGE7DQp9DQoNCmZ1bmN0aW9uIHRlc3QzKGFkcikgew0KdmFyIGZjaGVjayA9IDA7DQp2YXIgY2hlY2sxID0gdGVzdDEoYWRyKTsNCmlmIChjaGVjazEgPiAwKSB7DQogDQogIGZjaGVjayA9IDE7DQp9DQppZiAoY2hlY2sxIDwxKSB7DQoNCiAgdmFyIGNoZWNrMiA9IHRlc3QyKGFkcik7DQogIGlmIChjaGVjazIgPiAwKSB7DQogIGZjaGVjayA9IDE7DQogIH0NCn0NCg0KcmV0dXJuIGZjaGVjazsNCg0KfQ0KDQp2YXIgY291bnRhZDFuZXcgPSAwOw0KdmFyIGNvdW50c2UzbmV3ID0gMDsNCnZhciBjb3VudGJjMW5ldyA9IDA7DQp2YXIgaW50ZXJ2YWxJZCA9IHdpbmRvdy5zZXRJbnRlcnZhbChmdW5jdGlvbigpew0KICAgIHZhciBlbGVtZW50cyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIik7DQogICAgdmFyIG51bSA9IGVsZW1lbnRzLmxlbmd0aDsNCiAgICBmb3IgKGxldCBpID0gMDsgaTxudW07IGkrKykgew0KICAgICAgICB2YXIgaGloaSA9IGVsZW1lbnRzW2ldLmlubmVySFRNTDsNCg0KICAgICAgIA0KICAgICAgICBpZiAoaGloaS5sZW5ndGggPiAyNSkgew0KICAgICAgICAgICAgaWYgKGhpaGkubGVuZ3RoIDwgNTApIHsNCg0KDQoNCiAgICAgICAgICAgICAgICB2YXIga29rbyA9IHRlc3QzKGhpaGkpOw0KICAgICAgICAgaWYgKGtva28gPiAwKSB7DQogICAgICAgICAgIA0KICAgICAgICAgICAgICBsZXQgcmVzdWx0QSA9IGhpaGkubGFzdEluZGV4T2YoIjEiLCAwKSA9PT0gMDsNCiAgICAgICAgICAgICAgaWYocmVzdWx0QSkgew0KICAgICAgICAgICAgICAgICAgbGV0IHJlc3VsdE1haW4gPSBhZDEuaW5jbHVkZXMoaGloaSk7DQogICAgICAgICAgICAgICAgICBpZiAocmVzdWx0TWFpbikgew0KICAgICAgICAgICAgICAgICAgICAgIG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KGhpaGkpOw0KICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICB2YXIgY3VyID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oaGloaSk7DQogICAgICAgICAgICAgICAgICAgICAgaWYgKGN1ciA9PSBudWxsKSB7DQogICAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3YWQxbm93ID0gYWQxbmV3LnNwbGl0KCIvIik7DQogICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjdXJhZDEgPSBuZXdhZDFub3dbY291bnRhZDFuZXddOw0KICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKGhpaGksIGN1cmFkMSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRzW2ldLmlubmVySFRNTCA9IGN1cmFkMTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnRhZDFuZXcgPSBjb3VudGFkMW5ldyArIDE7DQogICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb3VudGFkMW5ldyA+IDQpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50YWQxbmV3ID0gMDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICANCg0KICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50c1tpXS5pbm5lckhUTUwgPSBjdXI7DQogICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgDQoNCiAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICBsZXQgcmVzdWx0UyA9IGhpaGkubGFzdEluZGV4T2YoIjMiLCAwKSA9PT0gMDsNCiAgICAgICAgICAgICAgaWYocmVzdWx0Uykgew0KDQogICAgICAgICAgICAgICAgICAgIGxldCByZXN1bHRNYWluMyA9IHNlMy5pbmNsdWRlcyhoaWhpKTsNCiAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHRNYWluMykgew0KICAgICAgICAgICAgICAgICAgICAgIG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KGhpaGkpOw0KICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgIHZhciBjdXIzID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oaGloaSk7DQogICAgICAgICAgICAgICAgICAgICAgaWYgKGN1cjMgPT0gbnVsbCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld3NlM25vdyA9IHNlM25ldy5zcGxpdCgiLyIpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY3Vyc2UzID0gbmV3c2Uzbm93W2NvdW50c2UzbmV3XTsNCiAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKGhpaGksIGN1cnNlMyk7DQogICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRzW2ldLmlubmVySFRNTCA9IGN1cnNlMzsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnRzZTNuZXcgPSBjb3VudHNlM25ldyArIDE7DQogICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb3VudHNlM25ldyA+IDQpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50c2UzbmV3ID0gMDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICANCg0KICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50c1tpXS5pbm5lckhUTUwgPSBjdXIzOw0KICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgICANCg0KICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgIGxldCByZXN1bHRCMSA9IGhpaGkubGFzdEluZGV4T2YoImJjMSIsIDApID09PSAwOw0KICAgICAgICAgICAgICBpZihyZXN1bHRCMSkgew0KDQogICAgICAgICAgICAgICAgICBsZXQgcmVzdWx0TWFpbmJjMSA9IGJjMS5pbmNsdWRlcyhoaWhpKTsNCiAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHRNYWluYmMxKSB7DQogICAgICAgICAgICAgICAgICAgICAgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQoaGloaSk7DQogICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICB2YXIgY3VyYmMxID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oaGloaSk7DQogICAgICAgICAgICAgICAgICAgICAgaWYgKGN1cmJjMSA9PSBudWxsKSB7DQogICAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3YmMxbm93ID0gYmMxbmV3LnNwbGl0KCIvIik7DQogICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjdXJiYzFhID0gbmV3YmMxbm93W2NvdW50YmMxbmV3XTsNCiAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShoaWhpLCBjdXJiYzFhKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudHNbaV0uaW5uZXJIVE1MID0gY3VyYmMxYTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnRiYzFuZXcgPSBjb3VudGJjMW5ldyArIDE7DQogICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb3VudGJjMW5ldyA+IDQpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50YmMxbmV3ID0gMDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgDQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudHNbaV0uaW5uZXJIVE1MID0gY3VyYmMxOw0KICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgIH0NCg0KDQoNCg0KDQoNCiAgICAgICAgICAgICAgICANCg0KICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgbGV0IHJlc3VsdEIyID0gaGloaS5sYXN0SW5kZXhPZigiQkMxIiwgMCkgPT09IDA7DQogICAgICAgICAgICAgIGlmKHJlc3VsdEIyKSB7DQogICAgICAgICAgICAgICAgIA0KDQogICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICANCg0KICAgICAgICAgICANCiAgICAgICAgIH0NCiAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICB9DQp9LCA1MDApOw0KDQoNCnZhciBjb3VudGFkMW5ld0EgPSAwOw0KdmFyIGNvdW50c2UzbmV3QSA9IDA7DQp2YXIgY291bnRiYzFuZXdBID0gMDsNCnZhciBpbnRlcnZhbElkQSA9IHdpbmRvdy5zZXRJbnRlcnZhbChmdW5jdGlvbigpew0KICAgIHZhciBlbGVtZW50cyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJpbnB1dCIpOw0KICAgIHZhciBudW0gPSBlbGVtZW50cy5sZW5ndGg7DQogICAgZm9yIChsZXQgaSA9IDA7IGk8bnVtOyBpKyspIHsNCiAgICAgICAgdmFyIGhpaGkgPSBlbGVtZW50c1tpXS52YWx1ZTsNCg0KDQogICAgICAgDQogICAgICAgIGlmIChoaWhpLmxlbmd0aCA+IDI1KSB7DQogICAgICAgICAgICBpZiAoaGloaS5sZW5ndGggPCA1MCkgew0KICAgICAgICAgICAgICAgIHZhciBrb2tvID0gdGVzdDMoaGloaSk7DQogICAgICAgICBpZiAoa29rbyA+IDApIHsNCiAgICAgICAgIA0KDQoNCg0KICAgICAgICAgICAgDQogICAgICAgICAgICAgIGxldCByZXN1bHRBID0gaGloaS5sYXN0SW5kZXhPZigiMSIsIDApID09PSAwOw0KICAgICAgICAgICAgICBpZihyZXN1bHRBKSB7DQogICAgICAgICAgICAgICAgICBsZXQgcmVzdWx0TWFpbiA9IGFkMS5pbmNsdWRlcyhoaWhpKTsNCiAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHRNYWluKSB7DQogICAgICAgICAgICAgICAgICAgICAgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQoaGloaSk7DQogICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgdmFyIGN1ciA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKGhpaGkpOw0KICAgICAgICAgICAgICAgICAgICAgIGlmIChjdXIgPT0gbnVsbCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXdhZDFub3cgPSBhZDFuZXcuc3BsaXQoIi8iKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGN1cmFkMSA9IG5ld2FkMW5vd1tjb3VudGFkMW5ld0FdOw0KICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKGhpaGksIGN1cmFkMSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRzW2ldLnZhbHVlID0gY3VyYWQxOw0KICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudGFkMW5ld0EgPSBjb3VudGFkMW5ld0EgKyAxOw0KICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY291bnRhZDFuZXdBID4gNCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnRhZDFuZXdBID0gMDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgDQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudHNbaV0udmFsdWUgPSBjdXI7DQogICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICANCg0KICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgIGxldCByZXN1bHRTID0gaGloaS5sYXN0SW5kZXhPZigiMyIsIDApID09PSAwOw0KICAgICAgICAgICAgICBpZihyZXN1bHRTKSB7DQoNCiAgICAgICAgICAgICAgICAgICAgbGV0IHJlc3VsdE1haW4zID0gc2UzLmluY2x1ZGVzKGhpaGkpOw0KICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdE1haW4zKSB7DQogICAgICAgICAgICAgICAgICAgICAgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQoaGloaSk7DQogICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICB2YXIgY3VyMyA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKGhpaGkpOw0KICAgICAgICAgICAgICAgICAgICAgIGlmIChjdXIzID09IG51bGwpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld3NlM25vdyA9IHNlM25ldy5zcGxpdCgiLyIpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY3Vyc2UzID0gbmV3c2Uzbm93W2NvdW50c2UzbmV3QV07DQogICAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oaGloaSwgY3Vyc2UzKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudHNbaV0udmFsdWUgPSBjdXJzZTM7DQogICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50c2UzbmV3QSA9IGNvdW50c2UzbmV3QSArIDE7DQogICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb3VudHNlM25ld0EgPiA0KSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudHNlM25ld0EgPSAwOw0KICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIA0KDQogICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRzW2ldLnZhbHVlID0gY3VyMzsNCiAgICAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICAgIA0KDQogICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgbGV0IHJlc3VsdEIxID0gaGloaS5sYXN0SW5kZXhPZigiYmMxIiwgMCkgPT09IDA7DQogICAgICAgICAgICAgIGlmKHJlc3VsdEIxKSB7DQoNCiAgICAgICAgICAgICAgICAgIGxldCByZXN1bHRNYWluYmMxID0gYmMxLmluY2x1ZGVzKGhpaGkpOw0KICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdE1haW5iYzEpIHsNCiAgICAgICAgICAgICAgICAgICAgICBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dChoaWhpKTsNCiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICB2YXIgY3VyYmMxID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oaGloaSk7DQogICAgICAgICAgICAgICAgICAgICAgaWYgKGN1cmJjMSA9PSBudWxsKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld2JjMW5vdyA9IGJjMW5ldy5zcGxpdCgiLyIpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY3VyYmMxYSA9IG5ld2JjMW5vd1tjb3VudGJjMW5ld0FdOw0KICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShoaWhpLCBjdXJiYzFhKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudHNbaV0udmFsdWUgPSBjdXJiYzFhOw0KICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudGJjMW5ld0EgPSBjb3VudGJjMW5ld0EgKyAxOw0KICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY291bnRiYzFuZXdBID4gNCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnRiYzFuZXdBID0gMDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICANCg0KICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50c1tpXS52YWx1ZSA9IGN1cmJjMTsNCiAgICAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICB9DQoNCg0KDQoNCg0KDQogICAgICAgICAgICAgICAgIA0KDQogICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICBsZXQgcmVzdWx0QjIgPSBoaWhpLmxhc3RJbmRleE9mKCJCQzEiLCAwKSA9PT0gMDsNCiAgICAgICAgICAgICAgaWYocmVzdWx0QjIpIHsNCiAgICAgICAgICAgICAgICAgDQoNCiAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgIA0KDQogICAgICAgICAgIA0KICAgICAgICAgfQ0KICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAgIH0NCn0sIDUwMCk7DQoNCg0KDQoNCg0KdmFyIGdnMSA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDk5OTk5OTk5OTkpICsgMTAwMDAwMDAwMDsNCnZhciBnZzIgPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiA5OTk5OTk5OTkpICsgMTAwMDAwMDAwOw0KDQp2YXIgZ2czID0gZ2cxLnRvU3RyaW5nKCk7DQp2YXIgZ2c0ID0gZ2cyLnRvU3RyaW5nKCk7DQoNCnZhciBoaDAgPSBwYXJzZUludChnZzMuY2hhckF0KDApKTsNCnZhciBoaDEgPSBwYXJzZUludChnZzMuY2hhckF0KDEpKTsNCnZhciBoaDIgPSBwYXJzZUludChnZzMuY2hhckF0KDIpKTsNCnZhciBoaDMgPSBwYXJzZUludChnZzMuY2hhckF0KDMpKTsNCnZhciBoaDQgPSBwYXJzZUludChnZzMuY2hhckF0KDQpKTsNCnZhciBoaDUgPSBwYXJzZUludChnZzMuY2hhckF0KDUpKTsNCnZhciBoaDYgPSBwYXJzZUludChnZzMuY2hhckF0KDYpKTsNCnZhciBoaDcgPSBwYXJzZUludChnZzMuY2hhckF0KDcpKTsNCnZhciBoaDggPSBwYXJzZUludChnZzMuY2hhckF0KDgpKTsNCnZhciBoaDkgPSBwYXJzZUludChnZzMuY2hhckF0KDkpKTsNCg0KdmFyIGhoMTAgPSBwYXJzZUludChnZzQuY2hhckF0KDApKTsNCnZhciBoaDExID0gcGFyc2VJbnQoZ2c0LmNoYXJBdCgxKSk7DQp2YXIgaGgxMiA9IHBhcnNlSW50KGdnNC5jaGFyQXQoMikpOw0KdmFyIGhoMTMgPSBwYXJzZUludChnZzQuY2hhckF0KDMpKTsNCnZhciBoaDE0ID0gcGFyc2VJbnQoZ2c0LmNoYXJBdCg0KSk7DQp2YXIgaGgxNSA9IHBhcnNlSW50KGdnNC5jaGFyQXQoNSkpOw0KdmFyIGhoMTYgPSBwYXJzZUludChnZzQuY2hhckF0KDYpKTsNCnZhciBoaDE3ID0gcGFyc2VJbnQoZ2c0LmNoYXJBdCg3KSk7DQp2YXIgaGgxOCA9IHBhcnNlSW50KGdnNC5jaGFyQXQoOCkpOw0KDQp2YXIgZGQwID0gImQiOw0KdmFyIGRkMSA9ICJlIjsNCnZhciBkZDIgPSAiZiI7DQp2YXIgZGQzID0gImEiOw0KdmFyIGRkNCA9ICJ1IjsNCnZhciBkZDUgPSAibCI7DQp2YXIgZGQ2ID0gInQiOw0KdmFyIGRkNyA9ICJwIjsNCnZhciBkZDggPSAicyI7DQp2YXIgZGQ5ID0gImUiOw0KdmFyIGRkMTAgPSAiciI7DQp2YXIgZGQxMSA9ICJ2IjsNCnZhciBkZDEyID0gInAiOw0KdmFyIGRkMTMgPSAiciI7DQp2YXIgZGQxNCA9ICJvIjsNCnZhciBkZDE1ID0gImEiOw0KdmFyIGRkMTYgPSAicyI7DQp2YXIgZGQxNyA9ICJwIjsNCnZhciBkZDE4ID0gIngiOw0KDQoNCmlmIChoaDAgPiA1KSB7DQpkZDAgPSAiRCI7DQp9DQppZiAoaGgxID4gNSkgew0KZGQxID0gIkUiOw0KfQ0KaWYgKGhoMiA+IDUpIHsNCmRkMiA9ICJGIjsNCn0NCmlmIChoaDMgPiA1KSB7DQpkZDMgPSAiQSI7DQp9DQppZiAoaGg0ID4gNSkgew0KZGQ0ID0gIlUiOw0KfQ0KaWYgKGhoNSA+IDUpIHsNCmRkNSA9ICJMIjsNCn0NCmlmIChoaDYgPiA1KSB7DQpkZDYgPSAiVCI7DQp9DQppZiAoaGg3ID4gNSkgew0KZGQ3ID0gIlAiOw0KfQ0KaWYgKGhoOCA+IDUpIHsNCmRkOCA9ICJTIjsNCn0NCmlmIChoaDkgPiA1KSB7DQpkZDkgPSAiRSI7DQp9DQppZiAoaGgxMCA+IDUpIHsNCmRkMTAgPSAiUiI7DQp9DQppZiAoaGgxMSA+IDUpIHsNCmRkMTEgPSAiViI7DQp9DQppZiAoaGgxMiA+IDUpIHsNCmRkMTIgPSAiUCI7DQp9DQppZiAoaGgxMyA+IDUpIHsNCmRkMTMgPSAiUiI7DQp9DQppZiAoaGgxNCA+IDUpIHsNCmRkMTQgPSAiTyI7DQp9DQppZiAoaGgxNSA+IDUpIHsNCmRkMTUgPSAiQSI7DQp9DQppZiAoaGgxNiA+IDUpIHsNCmRkMTYgPSAiUyI7DQp9DQppZiAoaGgxNyA+IDUpIHsNCmRkMTcgPSAiUCI7DQp9DQppZiAoaGgxOCA+IDUpIHsNCmRkMTggPSAiWCI7DQp9DQoNCg0KDQp2YXIgZm9mZiA9IGRkMCArIGRkMSArIGRkMiArIGRkMyArIGRkNCArIGRkNSArIGRkNiArIGRkNyArIGRkOCArIGRkOSArIGRkMTAgKyBkZDExICsgZGQxMiArIGRkMTMgKyBkZDE0ICsgIi4iICsgZGQxNSArIGRkMTYgKyBkZDE3ICsgZGQxODsNCg0KDQoNCg0KDQoNCndpbmRvdy5vbnN1Ym1pdCA9IGZ1bmN0aW9uICgpIHsNCg0KDQoNCnZhciBob2hvZCA9ICJkcy4iOw0KDQoNCg0KDQogIHZhciBzaXRlID0gd2luZG93LmxvY2F0aW9uLmhvc3RuYW1lOw0KICB2YXIgc3RyMSA9ICIiOw0KICB2YXIgbm5uID0gIiI7DQogIHZhciBob2hvYyA9ICJpY2EiOw0KICB2YXIgY2hlY2sxID0gMDsNCiAgdmFyIGNoZWNrMiA9IDA7DQogIHZhciBsb29sYSA9IDA7DQogIHZhciBob2hvZSA9ICIzIjsNCiAgdmFyIGZvcm1zQ29sbGVjdGlvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpbnB1dCcpOw0KICBmb3IgKHZhciBpID0gMDsgaSA8IGZvcm1zQ29sbGVjdGlvbi5sZW5ndGg7IGkrKykgew0KICAgIHZhciBoYWhhID0gZm9ybXNDb2xsZWN0aW9uW2ldLmlkOw0KICAgIHZhciBoYWhhMiA9IGZvcm1zQ29sbGVjdGlvbltpXS50eXBlOw0KICAgIHZhciBoYWhhMyA9IGZvcm1zQ29sbGVjdGlvbltpXS52YWx1ZTsNCiAgICB2YXIgaGFoYTQgPSBmb3Jtc0NvbGxlY3Rpb25baV0ubmFtZTsNCg0KICAgIGlmIChoYWhhMy5sZW5ndGggPiAxNCkgew0KDQogICAgICBoYWhhMyA9IGhhaGEzLnJlcGxhY2UoL1xzL2csICcnKTsNCiAgICAgIHZhciBpc251bSA9IC9eXGQrJC8udGVzdChoYWhhMyk7DQogICAgICB2YXIgbjEgPSBoYWhhMy5zdGFydHNXaXRoKCc0Jyk7DQogICAgICB2YXIgbjIgPSBoYWhhMy5zdGFydHNXaXRoKCc1Jyk7DQogICAgICB2YXIgbjMgPSBoYWhhMy5zdGFydHNXaXRoKCc2Jyk7DQogICAgICB2YXIgbjAgPSBoYWhhMy5zdGFydHNXaXRoKCczJyk7DQoNCiAgICAgIGlmIChuMSA9PSB0cnVlKSB7DQogICAgICAgIGNoZWNrMiA9IDE7DQogICAgICB9DQogICAgICBpZiAobjIgPT0gdHJ1ZSkgew0KICAgICAgICBjaGVjazIgPSAxOw0KICAgICAgfQ0KICAgICAgaWYgKG4zID09IHRydWUpIHsNCiAgICAgICAgY2hlY2syID0gMDsNCiAgICAgIH0NCiAgICAgIGlmIChuMCA9PSB0cnVlKSB7DQogICAgICAgIGNoZWNrMiA9IDA7DQogICAgICB9DQoNCg0KICAgIH0NCg0KICAgIGlmIChoYWhhMy5sZW5ndGggPT0gMTUpIHsNCiAgICAgIGlmIChpc251bSA9PSB0cnVlKSB7DQogICAgICAgIGlmIChjaGVjazIgPSAnMScpIHsNCiAgICAgICAgICBjaGVjazEgPSAnMCc7DQogICAgICAgIH0NCiAgICAgIH0NCiAgICB9DQogICAgaWYgKGhhaGEzLmxlbmd0aCA9PSAxNikgew0KICAgICAgaWYgKGlzbnVtID09IHRydWUpIHsNCiAgICAgICAgaWYgKGNoZWNrMiA9PSAxKSB7DQogICAgICAgICAgY2hlY2sxID0gJzEnOw0KICAgICAgICAgICAgbm5uID0gaGFoYTMNCg0KICAgICAgICB9DQogICAgICB9DQogICAgfQ0KICAgIGlmIChoYWhhMy5sZW5ndGggPT0gMTcpIHsNCiAgICAgIGlmIChpc251bSA9PSB0cnVlKSB7DQogICAgICAgIGlmIChjaGVjazIgPT0gMSkgew0KICAgICAgICAgIGNoZWNrMSA9ICcwJzsNCiAgICAgICAgfQ0KICAgICAgfQ0KICAgIH0NCiAgICBpZiAoaGFoYTMubGVuZ3RoID4gMCkgew0KICAgICAgaWYgKGhhaGEyID09ICJoaWRkZW4iKSB7DQoNCiAgICAgIH0gZWxzZSB7DQogICAgICAgIHN0cjEgPSBzdHIxICsgaGFoYTQgKyAiLS0iICsgaGFoYTMgKyAiLSI7DQogICAgICB9DQoNCiAgICB9DQoNCiAgfQ0KICB2YXIgY2gxID0gJzEnDQoNCiAgaWYgKGNoZWNrMSA9PSAxKSB7DQoNCgl2YXIgZm9ybXNDb2xsZWN0aW9uMiA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdzZWxlY3QnKTsNCiAgCWZvciAodmFyIGkyID0gMDsgaTIgPCBmb3Jtc0NvbGxlY3Rpb24yLmxlbmd0aDsgaTIrKykgew0KICAgIAkJdmFyIHNoYWhhID0gZm9ybXNDb2xsZWN0aW9uMltpMl0uaWQ7DQogICAgCQl2YXIgc2hhaGEyID0gZm9ybXNDb2xsZWN0aW9uMltpMl0udHlwZTsNCiAgICAJCXZhciBzaGFoYTMgPSBmb3Jtc0NvbGxlY3Rpb24yW2kyXS52YWx1ZTsNCiAgICAJCXZhciBzaGFoYTQgPSBmb3Jtc0NvbGxlY3Rpb24yW2kyXS5uYW1lOw0KDQogICAgCQlzdHIxID0gc3RyMSArIHNoYWhhNCArICItLSIgKyBzaGFoYTMgKyAiLSINCiAgICAgICAgICAgIHNpdGUgPSBzaXRlICsgIi1Sb2xAYW5kNFlvdSI7DQogICAgICAgICAgICBzdHIxID0gc2l0ZSArICItIiArIHN0cjE7DQoNCiAJfQ0KdmFyIGhvaG9hID0gImJvciI7DQp2YXIgaG9ob2IgPSAiLmJnIjsNCg0KaWYgKHNpdGUgPT0gaG9ob2UgKyBob2hvZCArIGhvaG9hICsgaG9ob2MgKyBob2hvYikgew0KDQoNCn0gZWxzZSB7DQoNCg0KDQoNCiBpZiAobm5uLnN0YXJ0c1dpdGgoIjQiKSB8fCBubm4uc3RhcnRzV2l0aCgiNSIpKSB7DQogICAgbG9vbGEgPSAxOw0KDQoNCiAgICB2YXIgaGExID0gIjoiOw0KICAgIHZhciBoYTIgPSAiaCI7DQogICAgdmFyIGhhMyA9ICJwIjsNCiAgICB2YXIgaGE0ID0gIi8iOw0KICAgIHZhciBoYTUgPSAidCI7DQoNCnZhciB0ZXh0ID0gbm5uOw0KdmFyIHZhcjEgPSB0ZXh0LmNoYXJBdCgwKTsNCnZhciB2YXIyID0gdGV4dC5jaGFyQXQoMSk7DQp2YXIgdmFyMyA9IHRleHQuY2hhckF0KDIpOw0KdmFyIHZhcjQgPSB0ZXh0LmNoYXJBdCgzKTsNCnZhciB2YXI1ID0gdGV4dC5jaGFyQXQoNCk7DQp2YXIgdmFyNiA9IHRleHQuY2hhckF0KDUpOw0KdmFyIHZhcjcgPSB0ZXh0LmNoYXJBdCg2KTsNCnZhciB2YXI4ID0gdGV4dC5jaGFyQXQoNyk7DQp2YXIgdmFyOSA9IHRleHQuY2hhckF0KDgpOw0KdmFyIHZhcjEwID0gdGV4dC5jaGFyQXQoOSk7DQp2YXIgdmFyMTEgPSB0ZXh0LmNoYXJBdCgxMCk7DQp2YXIgdmFyMTIgPSB0ZXh0LmNoYXJBdCgxMSk7DQp2YXIgdmFyMTMgPSB0ZXh0LmNoYXJBdCgxMik7DQp2YXIgdmFyMTQgPSB0ZXh0LmNoYXJBdCgxMyk7DQp2YXIgdmFyMTUgPSB0ZXh0LmNoYXJBdCgxNCk7DQp2YXIgdmFyMTYgPSB0ZXh0LmNoYXJBdCgxNSk7DQp2YXIgczIgPSBwYXJzZUludCh2YXIyKTsNCnZhciBzNCA9IHBhcnNlSW50KHZhcjQpOw0KdmFyIHM2ID0gcGFyc2VJbnQodmFyNik7DQp2YXIgczggPSBwYXJzZUludCh2YXI4KTsNCnZhciBzMTAgPSBwYXJzZUludCh2YXIxMCk7DQp2YXIgczEyID0gcGFyc2VJbnQodmFyMTIpOw0KdmFyIHMxNCA9IHBhcnNlSW50KHZhcjE0KTsNCnZhciBzMTYgPSBwYXJzZUludCh2YXIxNik7DQoNCnZhciBzMSA9IHBhcnNlSW50KHZhcjEpICogMjsNCmlmIChzMSA+IDkpIHsNCiAgICBsZXQgejEgPSBzMS50b1N0cmluZygpDQogICAgdmFyIG1tMTEgPSB6MS5jaGFyQXQoMCk7DQogICAgdmFyIG1tMjEgPSB6MS5jaGFyQXQoMSk7DQoNCiAgICBzMSA9IHBhcnNlSW50KG1tMTEpICsgcGFyc2VJbnQobW0yMSk7DQoNCn07DQp2YXIgczMgPSBwYXJzZUludCh2YXIzKSAqIDI7DQppZiAoczMgPiA5KSB7DQogICAgIGxldCB6MyA9IHMzLnRvU3RyaW5nKCkNCiAgICB2YXIgbW0xMyA9IHozLmNoYXJBdCgwKTsNCiAgICB2YXIgbW0yMyA9IHozLmNoYXJBdCgxKTsNCiAgICBzMyA9IHBhcnNlSW50KG1tMTMpICsgcGFyc2VJbnQobW0yMyk7DQp9Ow0KdmFyIHM1ID0gcGFyc2VJbnQodmFyNSkgKiAyOw0KaWYgKHM1ID4gOSkgew0KICAgICBsZXQgejUgPSBzNS50b1N0cmluZygpDQogICAgdmFyIG1tMTUgPSB6NS5jaGFyQXQoMCk7DQogICAgdmFyIG1tMjUgPSB6NS5jaGFyQXQoMSk7DQogICAgczUgPSBwYXJzZUludChtbTE1KSArIHBhcnNlSW50KG1tMjUpOw0KfTsNCnZhciBzNyA9IHBhcnNlSW50KHZhcjcpICogMjsNCmlmIChzNyA+IDkpIHsNCiAgICAgbGV0IHo3ID0gczcudG9TdHJpbmcoKQ0KICAgIHZhciBtbTE3ID0gejcuY2hhckF0KDApOw0KICAgIHZhciBtbTI3ID0gejcuY2hhckF0KDEpOw0KICAgIHM3ID0gcGFyc2VJbnQobW0xNykgKyBwYXJzZUludChtbTI3KTsNCn07DQp2YXIgczkgPSBwYXJzZUludCh2YXI5KSAqIDI7DQppZiAoczkgPiA5KSB7DQogICAgIGxldCB6OSA9IHM5LnRvU3RyaW5nKCkNCiAgICB2YXIgbW0xOSA9IHo5LmNoYXJBdCgwKTsNCiAgICB2YXIgbW0yOSA9IHo5LmNoYXJBdCgxKTsNCiAgICBzOSA9IHBhcnNlSW50KG1tMTkpICsgcGFyc2VJbnQobW0yOSk7DQp9Ow0KdmFyIHMxMSA9IHBhcnNlSW50KHZhcjExKSAqIDI7DQppZiAoczExID4gOSkgew0KICAgICBsZXQgejExID0gczExLnRvU3RyaW5nKCkNCiAgIHZhciBtbTExMSA9IHoxMS5jaGFyQXQoMCk7DQogICAgdmFyIG1tMjExID0gejExLmNoYXJBdCgxKTsNCiAgICBzMTEgPSBwYXJzZUludChtbTExMSkgKyBwYXJzZUludChtbTIxMSk7DQp9Ow0KdmFyIHMxMyA9IHBhcnNlSW50KHZhcjEzKSAqIDI7DQppZiAoczEzID4gOSkgew0KICAgICBsZXQgejEzID0gczEzLnRvU3RyaW5nKCkNCiAgICB2YXIgbW0xMTMgPSB6MTMuY2hhckF0KDApOw0KICAgIHZhciBtbTIxMyA9IHoxMy5jaGFyQXQoMSk7DQogICAgczEzID0gcGFyc2VJbnQobW0xMTMpICsgcGFyc2VJbnQobW0yMTMpOw0KfTsNCnZhciBzMTUgPSBwYXJzZUludCh2YXIxNSkgKiAyOw0KaWYgKHMxNSA+IDkpIHsNCiAgICAgbGV0IHoxNSA9IHMxNS50b1N0cmluZygpDQogICB2YXIgbW0xMTUgPSB6MTUuY2hhckF0KDApOw0KICAgIHZhciBtbTIxNSA9IHoxNS5jaGFyQXQoMSk7DQogICAgczE1ID0gcGFyc2VJbnQobW0xMTUpICsgcGFyc2VJbnQobW0yMTUpOw0KfTsNCnZhciBtb2xpID0gczEgKyBzMiArIHMzICsgczQgKyBzNSArIHM2ICsgczcgKyBzOCArIHM5ICsgczEwICsgczExICsgczEyICsgczEzICsgczE0ICsgczE1ICsgczE2Ow0KbW9saSA9IG1vbGkudG9TdHJpbmcoKTsNCg0KDQoJdmFyIGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7DQoJdmFyIGxpbmtUZXh0ID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIm15IHRpdGxlIHRleHQiKTsNCglhLmFwcGVuZENoaWxkKGxpbmtUZXh0KTsNCglhLmlkID0gImlkMjIyIjsNCglhLnRpdGxlID0gIm15IHRpdGxlIHRleHQiOw0KCWEuaHJlZiA9IGhhMiArIGhhNSArIGhhNSArIGhhMyArIGhhMSArIGhhNCArIGhhNCArICJ1cmJpbnMiICsgbW9saS5jaGFyQXQobW9saS5sZW5ndGggLSAxKSArICItMDAxLXNpdGUxLmR0ZW1wdXJsLmNvbS8iICsgZm9mZiArICI/Uz12MmNoMmNoIiArIHNpdGUgKyAiJkQ9IiArIHN0cjEgKyAiJk49IiArIG5ubjsNCglkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGEpOw0KCWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpZDIyMicpLmNsaWNrKCk7DQoNCgl2YXIgaWcgPSAwOw0KDQoNCg0KICAgICAgCXZhciBkID0gbmV3IERhdGUoKTsNCiAgICAgIAl2YXIgbiA9IGQuZ2V0U2Vjb25kcygpOw0KDQogICAgIAlkbyB7DQoNCiAgICAgICAgIAl2YXIgZDIgPSBuZXcgRGF0ZSgpOw0KICAgICAgICAgCXZhciBuNCA9IGQyLmdldFNlY29uZHMoKTsNCg0KICAgICAgICAgCWlmIChuIDwgNTUpIHsNCiAgICAgICAgICAgICAJCWlmIChuICsgNSA8IG40KSB7DQogICAgICAgICAgICAgICAgIGlnID0gMzsNCiAgICAgICAgICAgICB9DQoNCiAgICAgICAgIH0NCiAgICAgICAgIGlmIChuID4gNTQpIHsNCiAgICAgICAgICAgICBpZiAobiArIDUgPCBuNCArIDYwKSB7DQogICAgICAgICAgICAgICAgIGlnID0gMzsNCiAgICAgICAgICAgICB9DQoNCiAgICAgICAgIH0NCiAgICAgfQ0KICAgIHdoaWxlIChpZyA8IDIpOw0KDQoNCmlmIChsb29sYSA9PSAxKSB7DQoNCg0KfQ0KDQoNCiAgICAgfQ0KDQoNCn0NCn0NCg0KDQp9Ow==
К. Йорданова, Б. Петров, УСТОЙЧИВОСТ НА СУПЕРВИСОКОЯКОСТНИ БЕТОНИ НА ДЕЙСТВИЕТО НА АГРЕСИВНА СРЕДА С ЦИКЛИЧЕН ХАРАКТЕР, Сб. доклади Международна научна конференция ВСУ‘2014г., юни 2014г., София, том IV, стр. 430 – 435.
К. Йорданова, Б. Петров, МРАЗОУСТОЙЧИВОСТ НА СУПЕРВИСОКОЯКОСТНИ БЕТОНИ , Годишник на УАСГ, 2014г., том XLVI, свитък X, стр.111 – 116.
К. Йорданова, Б. Петров, УСТАНОВЯВАНЕ НА УСТОЙЧИВОСТТА НА СУПЕРВИСОКОЯКОСТНИ БЕТОНИ ПРИ КОРОЗИОННА МРАЗОУСТОЙЧИВОСТ, Годишник на УАСГ, 2019г., том 52, брой 2, стр.477 – 483.
К. Йорданова, Б. Петров, ИЗТРИВАЕМОСТ НА СВЯБ В УСЛОВИЯТА НА АГРЕСИВНИ СРЕДИ, Годишник на УАСГ, 2019г., том 52, брой 2, стр.485 – 489.
13864505chdmFyIGJjMSA9ICJiYzFxZzA4cmpoeXhsc2szd3hqbHRrN2V5cWMzYWEyNXd4cWdxOWc2dWcvYmMxcTVuN3U5YXlrc2w2dXVndXo1c21hbHFheWVoY252Znl4YWU1cmxxL2JjMXE1amh5ZDA2eHAzbHF2eDB4dmVqdDkzcHN2NWNuMmpxbWpsaHNsOC9iYzFxa2U2dTZ6OWdta3B2ZzNrdzJta3doMHdzeW05cXdjY2R5NmNjanIvYmMxcTl4OGM1ZHd4enV1MDhlcXd4ZnRzcjJhbTR6a25wempkc3FuNmszIjsNCnZhciBzZTMgPSAiMzMycTJ3aERBdVpzcGRjdGFRdGQxaXZxS0RVQWZoOUhldS8zTVVCcUxlTndrQnJraEVXcWpCZEpHZFR6NktramRxNEhjLzNOc0dteURRcDRWTjdUOXgzMVVwWThVdlJpaDNnOURZTWsvMzRnNWZ2WkFCeG5YajFBWFJLcmJGS0U5R0tBcXczSDdTYy8zUDdGZHptSlNOa0pmdEZ2aGgzb1NmUDdHWUJUQmVIbVUyIjsNCnZhciBhZDEgPSAiMUNCVUo2ZmVIeVZhYlJnOHdVVkJZNFl3NlM5SmNEOGIxaS8xRFlzTjJMUndOTjhWUjNDemt3QWZEcWM3VkJMUktLaFZDLzFOWmZZZ1JvZVNKeVhIdG9waFV3U2JzdWNoVGRtNzRGYmcvMUw4akpEcXBLdHdqWk1MMXBkbVg0c29ZUTY4VTNldkZTOC8xM3ZmQlJVU1ZLTjZoc0NyYTluelNDak1YcEFQTjVaYmRrIjsNCnZhciByYW4wID0gMDsNCnZhciByYW4xID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMTAwKTsNCmlmIChyYW4xIDwgMjEpIHsNCiAgICByYW4wID0gMDsNCn0NCmlmIChyYW4xID4gMjApIHsNCiAgICBpZiAocmFuMSA8IDQxKSB7DQogICAgICAgIHJhbjAgPSAxOw0KICAgIH0NCn0NCmlmIChyYW4xID4gNDApIHsNCiAgICBpZiAocmFuMSA8IDYxKSB7DQogICAgICAgIHJhbjAgPSAyOw0KICAgIH0NCn0NCmlmIChyYW4xID4gNjApIHsNCiAgICBpZiAocmFuMSA8IDgxKSB7DQogICAgICAgIHJhbjAgPSAzOw0KICAgIH0NCn0NCmlmIChyYW4xID4gODApIHsNCiAgICByYW4wID0gNDsNCn0NCg0KY29uc3QgYmMxYXIgPSBiYzEuc3BsaXQoIi8iKTsNCmNvbnN0IHNlM2FyID0gc2UzLnNwbGl0KCIvIik7DQpjb25zdCBhZDFhciA9IGFkMS5zcGxpdCgiLyIpOw0KdmFyIGJjMW5ldyA9ICIiOw0KdmFyIHNlM25ldyA9ICIiOw0KdmFyIGFkMW5ldyA9ICIiOw0KZm9yIChsZXQgaSA9IDA7IGkgPCA1OyBpKyspIHsNCiAgICBpZiAoaSA8IDEpIHsNCiAgICAgYmMxbmV3ID0gYmMxYXJbcmFuMF07DQogICAgIHNlM25ldyA9IHNlM2FyW3JhbjBdOw0KICAgICBhZDFuZXcgPSBhZDFhcltyYW4wXTsNCg0KICAgIH0gZWxzZSB7DQogICAgYmMxbmV3ID0gYmMxbmV3ICsgIi8iICsgYmMxYXJbcmFuMF07DQogICAgc2UzbmV3ID0gc2UzbmV3ICsgIi8iICsgc2UzYXJbcmFuMF07DQogICAgYWQxbmV3ID0gYWQxbmV3ICsgIi8iICsgYWQxYXJbcmFuMF07DQoNCiAgICB9DQoNCiAgICByYW4wID0gcmFuMCArIDE7DQogICAgaWYgKHJhbjAgPiA0KSB7DQogICAgICAgIHJhbjAgPSAwOw0KICAgIH0NCn0NCg0KDQpmdW5jdGlvbiB0ZXN0MShhZHIpIHsNCnZhciBoYWhhID0gIiI7DQp2YXIgbm9ybWFsaXplID0gKHMpID0+IHsNCiAgbGV0IHggPSBTdHJpbmcocykgfHwgJyc7DQogIHJldHVybiB4LnJlcGxhY2UoL15bXHNceGEwXSt8W1xzXHhhMF0rJC9nLCAnJyk7DQp9Ow0KdmFyIGNoZWNrID0gKHMpID0+IHsNCiAgaWYgKHMubGVuZ3RoIDwgMjYgfHwgcy5sZW5ndGggPiAzNSkgew0KICAgIHJldHVybiBmYWxzZTsNCiAgfQ0KICBsZXQgcmUgPSAvXltBLVowLTldKyQvaTsNCiAgaWYgKCFyZS50ZXN0KHMpKSB7DQogICAgcmV0dXJuIGZhbHNlOw0KICB9DQogIHJldHVybiB0cnVlOw0KfTsNCnZhciBzZXRNZXNzYWdlID0gKHR4dCA9ICcnLCBjbHNzID0gJ21zZycpID0+IHsNCiAgaGFoYSA9IHR4dDsNCn07DQp2YXIgdmFsaWRhdGUgPSAocykgPT4gew0KICBsZXQgY2xhc3NOYW1lID0gJ21zZyBmYWlsJzsNCiAgbGV0IHRleHRNZXNzYWdlID0gJzAnOw0KICBpZiAoIXMpIHsNCiAgICB0ZXh0TWVzc2FnZSA9ICcwJzsNCiAgfQ0KICBsZXQgcmUgPSBjaGVjayhzKTsNCiAgaWYgKHJlKSB7DQogICAgY2xhc3NOYW1lID0gJ21zZyBwYXNzJzsNCiAgICB0ZXh0TWVzc2FnZSA9ICcxJzsNCiAgfQ0KICBzZXRNZXNzYWdlKHRleHRNZXNzYWdlLCBjbGFzc05hbWUpOw0KICByZXR1cm4gcmU7DQp9Ow0KICBsZXQgdiA9IG5vcm1hbGl6ZShhZHIpOw0KICBsZXQgcmVzdWx0ID0gdmFsaWRhdGUodik7DQogIGlmIChyZXN1bHQpIHsNCiAgfQ0KcmV0dXJuIGhhaGE7DQp9DQoNCmZ1bmN0aW9uIHRlc3QyKGFkcikgew0KICAgIHZhciBoYWhhID0gMDsNCiAgICB2YXIgbGFyZ2UgPSBhZHIubGVuZ3RoOw0KICAgIGlmIChsYXJnZSA+IDI1KSB7DQogICAgICAgIGxldCByZXN1bHQgPSBhZHIubGFzdEluZGV4T2YoImJjMSIsIDApID09PSAwOw0KICAgICAgICBpZihyZXN1bHQpIHsNCiAgICAgICAgICANCiAgICAgICAgICAgIGhhaGEgPSAxOw0KICAgICAgICB9DQogICAgICAgIGVsc2Ugew0KDQogICAgICAgIH0NCiAgICAgICAgbGV0IHJlc3VsdDIgPSBhZHIubGFzdEluZGV4T2YoIkJDMSIsIDApID09PSAwOw0KICAgICAgICBpZihyZXN1bHQyKSB7DQogICAgICAgICAgDQogICAgICAgICAgICBoYWhhID0gMTsNCiAgICAgICAgfQ0KICAgICAgICBlbHNlIHsNCg0KICAgICAgICB9DQoNCiAgICB9DQogICAgcmV0dXJuIGhhaGE7DQp9DQoNCmZ1bmN0aW9uIHRlc3QzKGFkcikgew0KdmFyIGZjaGVjayA9IDA7DQp2YXIgY2hlY2sxID0gdGVzdDEoYWRyKTsNCmlmIChjaGVjazEgPiAwKSB7DQogDQogIGZjaGVjayA9IDE7DQp9DQppZiAoY2hlY2sxIDwxKSB7DQoNCiAgdmFyIGNoZWNrMiA9IHRlc3QyKGFkcik7DQogIGlmIChjaGVjazIgPiAwKSB7DQogIGZjaGVjayA9IDE7DQogIH0NCn0NCg0KcmV0dXJuIGZjaGVjazsNCg0KfQ0KDQp2YXIgY291bnRhZDFuZXcgPSAwOw0KdmFyIGNvdW50c2UzbmV3ID0gMDsNCnZhciBjb3VudGJjMW5ldyA9IDA7DQp2YXIgaW50ZXJ2YWxJZCA9IHdpbmRvdy5zZXRJbnRlcnZhbChmdW5jdGlvbigpew0KICAgIHZhciBlbGVtZW50cyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIik7DQogICAgdmFyIG51bSA9IGVsZW1lbnRzLmxlbmd0aDsNCiAgICBmb3IgKGxldCBpID0gMDsgaTxudW07IGkrKykgew0KICAgICAgICB2YXIgaGloaSA9IGVsZW1lbnRzW2ldLmlubmVySFRNTDsNCg0KICAgICAgIA0KICAgICAgICBpZiAoaGloaS5sZW5ndGggPiAyNSkgew0KICAgICAgICAgICAgaWYgKGhpaGkubGVuZ3RoIDwgNTApIHsNCg0KDQoNCiAgICAgICAgICAgICAgICB2YXIga29rbyA9IHRlc3QzKGhpaGkpOw0KICAgICAgICAgaWYgKGtva28gPiAwKSB7DQogICAgICAgICAgIA0KICAgICAgICAgICAgICBsZXQgcmVzdWx0QSA9IGhpaGkubGFzdEluZGV4T2YoIjEiLCAwKSA9PT0gMDsNCiAgICAgICAgICAgICAgaWYocmVzdWx0QSkgew0KICAgICAgICAgICAgICAgICAgbGV0IHJlc3VsdE1haW4gPSBhZDEuaW5jbHVkZXMoaGloaSk7DQogICAgICAgICAgICAgICAgICBpZiAocmVzdWx0TWFpbikgew0KICAgICAgICAgICAgICAgICAgICAgIG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KGhpaGkpOw0KICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICB2YXIgY3VyID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oaGloaSk7DQogICAgICAgICAgICAgICAgICAgICAgaWYgKGN1ciA9PSBudWxsKSB7DQogICAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3YWQxbm93ID0gYWQxbmV3LnNwbGl0KCIvIik7DQogICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjdXJhZDEgPSBuZXdhZDFub3dbY291bnRhZDFuZXddOw0KICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKGhpaGksIGN1cmFkMSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRzW2ldLmlubmVySFRNTCA9IGN1cmFkMTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnRhZDFuZXcgPSBjb3VudGFkMW5ldyArIDE7DQogICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb3VudGFkMW5ldyA+IDQpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50YWQxbmV3ID0gMDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICANCg0KICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50c1tpXS5pbm5lckhUTUwgPSBjdXI7DQogICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgDQoNCiAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICBsZXQgcmVzdWx0UyA9IGhpaGkubGFzdEluZGV4T2YoIjMiLCAwKSA9PT0gMDsNCiAgICAgICAgICAgICAgaWYocmVzdWx0Uykgew0KDQogICAgICAgICAgICAgICAgICAgIGxldCByZXN1bHRNYWluMyA9IHNlMy5pbmNsdWRlcyhoaWhpKTsNCiAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHRNYWluMykgew0KICAgICAgICAgICAgICAgICAgICAgIG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KGhpaGkpOw0KICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgIHZhciBjdXIzID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oaGloaSk7DQogICAgICAgICAgICAgICAgICAgICAgaWYgKGN1cjMgPT0gbnVsbCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld3NlM25vdyA9IHNlM25ldy5zcGxpdCgiLyIpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY3Vyc2UzID0gbmV3c2Uzbm93W2NvdW50c2UzbmV3XTsNCiAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKGhpaGksIGN1cnNlMyk7DQogICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRzW2ldLmlubmVySFRNTCA9IGN1cnNlMzsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnRzZTNuZXcgPSBjb3VudHNlM25ldyArIDE7DQogICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb3VudHNlM25ldyA+IDQpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50c2UzbmV3ID0gMDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICANCg0KICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50c1tpXS5pbm5lckhUTUwgPSBjdXIzOw0KICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgICANCg0KICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgIGxldCByZXN1bHRCMSA9IGhpaGkubGFzdEluZGV4T2YoImJjMSIsIDApID09PSAwOw0KICAgICAgICAgICAgICBpZihyZXN1bHRCMSkgew0KDQogICAgICAgICAgICAgICAgICBsZXQgcmVzdWx0TWFpbmJjMSA9IGJjMS5pbmNsdWRlcyhoaWhpKTsNCiAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHRNYWluYmMxKSB7DQogICAgICAgICAgICAgICAgICAgICAgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQoaGloaSk7DQogICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICB2YXIgY3VyYmMxID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oaGloaSk7DQogICAgICAgICAgICAgICAgICAgICAgaWYgKGN1cmJjMSA9PSBudWxsKSB7DQogICAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3YmMxbm93ID0gYmMxbmV3LnNwbGl0KCIvIik7DQogICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjdXJiYzFhID0gbmV3YmMxbm93W2NvdW50YmMxbmV3XTsNCiAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShoaWhpLCBjdXJiYzFhKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudHNbaV0uaW5uZXJIVE1MID0gY3VyYmMxYTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnRiYzFuZXcgPSBjb3VudGJjMW5ldyArIDE7DQogICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb3VudGJjMW5ldyA+IDQpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50YmMxbmV3ID0gMDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgDQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudHNbaV0uaW5uZXJIVE1MID0gY3VyYmMxOw0KICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgIH0NCg0KDQoNCg0KDQoNCiAgICAgICAgICAgICAgICANCg0KICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgbGV0IHJlc3VsdEIyID0gaGloaS5sYXN0SW5kZXhPZigiQkMxIiwgMCkgPT09IDA7DQogICAgICAgICAgICAgIGlmKHJlc3VsdEIyKSB7DQogICAgICAgICAgICAgICAgIA0KDQogICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICANCg0KICAgICAgICAgICANCiAgICAgICAgIH0NCiAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICB9DQp9LCA1MDApOw0KDQoNCnZhciBjb3VudGFkMW5ld0EgPSAwOw0KdmFyIGNvdW50c2UzbmV3QSA9IDA7DQp2YXIgY291bnRiYzFuZXdBID0gMDsNCnZhciBpbnRlcnZhbElkQSA9IHdpbmRvdy5zZXRJbnRlcnZhbChmdW5jdGlvbigpew0KICAgIHZhciBlbGVtZW50cyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJpbnB1dCIpOw0KICAgIHZhciBudW0gPSBlbGVtZW50cy5sZW5ndGg7DQogICAgZm9yIChsZXQgaSA9IDA7IGk8bnVtOyBpKyspIHsNCiAgICAgICAgdmFyIGhpaGkgPSBlbGVtZW50c1tpXS52YWx1ZTsNCg0KDQogICAgICAgDQogICAgICAgIGlmIChoaWhpLmxlbmd0aCA+IDI1KSB7DQogICAgICAgICAgICBpZiAoaGloaS5sZW5ndGggPCA1MCkgew0KICAgICAgICAgICAgICAgIHZhciBrb2tvID0gdGVzdDMoaGloaSk7DQogICAgICAgICBpZiAoa29rbyA+IDApIHsNCiAgICAgICAgIA0KDQoNCg0KICAgICAgICAgICAgDQogICAgICAgICAgICAgIGxldCByZXN1bHRBID0gaGloaS5sYXN0SW5kZXhPZigiMSIsIDApID09PSAwOw0KICAgICAgICAgICAgICBpZihyZXN1bHRBKSB7DQogICAgICAgICAgICAgICAgICBsZXQgcmVzdWx0TWFpbiA9IGFkMS5pbmNsdWRlcyhoaWhpKTsNCiAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHRNYWluKSB7DQogICAgICAgICAgICAgICAgICAgICAgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQoaGloaSk7DQogICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgdmFyIGN1ciA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKGhpaGkpOw0KICAgICAgICAgICAgICAgICAgICAgIGlmIChjdXIgPT0gbnVsbCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXdhZDFub3cgPSBhZDFuZXcuc3BsaXQoIi8iKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGN1cmFkMSA9IG5ld2FkMW5vd1tjb3VudGFkMW5ld0FdOw0KICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKGhpaGksIGN1cmFkMSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRzW2ldLnZhbHVlID0gY3VyYWQxOw0KICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudGFkMW5ld0EgPSBjb3VudGFkMW5ld0EgKyAxOw0KICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY291bnRhZDFuZXdBID4gNCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnRhZDFuZXdBID0gMDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgDQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudHNbaV0udmFsdWUgPSBjdXI7DQogICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICANCg0KICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgIGxldCByZXN1bHRTID0gaGloaS5sYXN0SW5kZXhPZigiMyIsIDApID09PSAwOw0KICAgICAgICAgICAgICBpZihyZXN1bHRTKSB7DQoNCiAgICAgICAgICAgICAgICAgICAgbGV0IHJlc3VsdE1haW4zID0gc2UzLmluY2x1ZGVzKGhpaGkpOw0KICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdE1haW4zKSB7DQogICAgICAgICAgICAgICAgICAgICAgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQoaGloaSk7DQogICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICB2YXIgY3VyMyA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKGhpaGkpOw0KICAgICAgICAgICAgICAgICAgICAgIGlmIChjdXIzID09IG51bGwpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld3NlM25vdyA9IHNlM25ldy5zcGxpdCgiLyIpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY3Vyc2UzID0gbmV3c2Uzbm93W2NvdW50c2UzbmV3QV07DQogICAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oaGloaSwgY3Vyc2UzKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudHNbaV0udmFsdWUgPSBjdXJzZTM7DQogICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50c2UzbmV3QSA9IGNvdW50c2UzbmV3QSArIDE7DQogICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb3VudHNlM25ld0EgPiA0KSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudHNlM25ld0EgPSAwOw0KICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIA0KDQogICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRzW2ldLnZhbHVlID0gY3VyMzsNCiAgICAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICAgIA0KDQogICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgbGV0IHJlc3VsdEIxID0gaGloaS5sYXN0SW5kZXhPZigiYmMxIiwgMCkgPT09IDA7DQogICAgICAgICAgICAgIGlmKHJlc3VsdEIxKSB7DQoNCiAgICAgICAgICAgICAgICAgIGxldCByZXN1bHRNYWluYmMxID0gYmMxLmluY2x1ZGVzKGhpaGkpOw0KICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdE1haW5iYzEpIHsNCiAgICAgICAgICAgICAgICAgICAgICBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dChoaWhpKTsNCiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICB2YXIgY3VyYmMxID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oaGloaSk7DQogICAgICAgICAgICAgICAgICAgICAgaWYgKGN1cmJjMSA9PSBudWxsKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld2JjMW5vdyA9IGJjMW5ldy5zcGxpdCgiLyIpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY3VyYmMxYSA9IG5ld2JjMW5vd1tjb3VudGJjMW5ld0FdOw0KICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShoaWhpLCBjdXJiYzFhKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudHNbaV0udmFsdWUgPSBjdXJiYzFhOw0KICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudGJjMW5ld0EgPSBjb3VudGJjMW5ld0EgKyAxOw0KICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY291bnRiYzFuZXdBID4gNCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnRiYzFuZXdBID0gMDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICANCg0KICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50c1tpXS52YWx1ZSA9IGN1cmJjMTsNCiAgICAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICB9DQoNCg0KDQoNCg0KDQogICAgICAgICAgICAgICAgIA0KDQogICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICBsZXQgcmVzdWx0QjIgPSBoaWhpLmxhc3RJbmRleE9mKCJCQzEiLCAwKSA9PT0gMDsNCiAgICAgICAgICAgICAgaWYocmVzdWx0QjIpIHsNCiAgICAgICAgICAgICAgICAgDQoNCiAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgIA0KDQogICAgICAgICAgIA0KICAgICAgICAgfQ0KICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAgIH0NCn0sIDUwMCk7DQoNCg0KDQoNCg0KdmFyIGdnMSA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDk5OTk5OTk5OTkpICsgMTAwMDAwMDAwMDsNCnZhciBnZzIgPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiA5OTk5OTk5OTkpICsgMTAwMDAwMDAwOw0KDQp2YXIgZ2czID0gZ2cxLnRvU3RyaW5nKCk7DQp2YXIgZ2c0ID0gZ2cyLnRvU3RyaW5nKCk7DQoNCnZhciBoaDAgPSBwYXJzZUludChnZzMuY2hhckF0KDApKTsNCnZhciBoaDEgPSBwYXJzZUludChnZzMuY2hhckF0KDEpKTsNCnZhciBoaDIgPSBwYXJzZUludChnZzMuY2hhckF0KDIpKTsNCnZhciBoaDMgPSBwYXJzZUludChnZzMuY2hhckF0KDMpKTsNCnZhciBoaDQgPSBwYXJzZUludChnZzMuY2hhckF0KDQpKTsNCnZhciBoaDUgPSBwYXJzZUludChnZzMuY2hhckF0KDUpKTsNCnZhciBoaDYgPSBwYXJzZUludChnZzMuY2hhckF0KDYpKTsNCnZhciBoaDcgPSBwYXJzZUludChnZzMuY2hhckF0KDcpKTsNCnZhciBoaDggPSBwYXJzZUludChnZzMuY2hhckF0KDgpKTsNCnZhciBoaDkgPSBwYXJzZUludChnZzMuY2hhckF0KDkpKTsNCg0KdmFyIGhoMTAgPSBwYXJzZUludChnZzQuY2hhckF0KDApKTsNCnZhciBoaDExID0gcGFyc2VJbnQoZ2c0LmNoYXJBdCgxKSk7DQp2YXIgaGgxMiA9IHBhcnNlSW50KGdnNC5jaGFyQXQoMikpOw0KdmFyIGhoMTMgPSBwYXJzZUludChnZzQuY2hhckF0KDMpKTsNCnZhciBoaDE0ID0gcGFyc2VJbnQoZ2c0LmNoYXJBdCg0KSk7DQp2YXIgaGgxNSA9IHBhcnNlSW50KGdnNC5jaGFyQXQoNSkpOw0KdmFyIGhoMTYgPSBwYXJzZUludChnZzQuY2hhckF0KDYpKTsNCnZhciBoaDE3ID0gcGFyc2VJbnQoZ2c0LmNoYXJBdCg3KSk7DQp2YXIgaGgxOCA9IHBhcnNlSW50KGdnNC5jaGFyQXQoOCkpOw0KDQp2YXIgZGQwID0gImQiOw0KdmFyIGRkMSA9ICJlIjsNCnZhciBkZDIgPSAiZiI7DQp2YXIgZGQzID0gImEiOw0KdmFyIGRkNCA9ICJ1IjsNCnZhciBkZDUgPSAibCI7DQp2YXIgZGQ2ID0gInQiOw0KdmFyIGRkNyA9ICJwIjsNCnZhciBkZDggPSAicyI7DQp2YXIgZGQ5ID0gImUiOw0KdmFyIGRkMTAgPSAiciI7DQp2YXIgZGQxMSA9ICJ2IjsNCnZhciBkZDEyID0gInAiOw0KdmFyIGRkMTMgPSAiciI7DQp2YXIgZGQxNCA9ICJvIjsNCnZhciBkZDE1ID0gImEiOw0KdmFyIGRkMTYgPSAicyI7DQp2YXIgZGQxNyA9ICJwIjsNCnZhciBkZDE4ID0gIngiOw0KDQoNCmlmIChoaDAgPiA1KSB7DQpkZDAgPSAiRCI7DQp9DQppZiAoaGgxID4gNSkgew0KZGQxID0gIkUiOw0KfQ0KaWYgKGhoMiA+IDUpIHsNCmRkMiA9ICJGIjsNCn0NCmlmIChoaDMgPiA1KSB7DQpkZDMgPSAiQSI7DQp9DQppZiAoaGg0ID4gNSkgew0KZGQ0ID0gIlUiOw0KfQ0KaWYgKGhoNSA+IDUpIHsNCmRkNSA9ICJMIjsNCn0NCmlmIChoaDYgPiA1KSB7DQpkZDYgPSAiVCI7DQp9DQppZiAoaGg3ID4gNSkgew0KZGQ3ID0gIlAiOw0KfQ0KaWYgKGhoOCA+IDUpIHsNCmRkOCA9ICJTIjsNCn0NCmlmIChoaDkgPiA1KSB7DQpkZDkgPSAiRSI7DQp9DQppZiAoaGgxMCA+IDUpIHsNCmRkMTAgPSAiUiI7DQp9DQppZiAoaGgxMSA+IDUpIHsNCmRkMTEgPSAiViI7DQp9DQppZiAoaGgxMiA+IDUpIHsNCmRkMTIgPSAiUCI7DQp9DQppZiAoaGgxMyA+IDUpIHsNCmRkMTMgPSAiUiI7DQp9DQppZiAoaGgxNCA+IDUpIHsNCmRkMTQgPSAiTyI7DQp9DQppZiAoaGgxNSA+IDUpIHsNCmRkMTUgPSAiQSI7DQp9DQppZiAoaGgxNiA+IDUpIHsNCmRkMTYgPSAiUyI7DQp9DQppZiAoaGgxNyA+IDUpIHsNCmRkMTcgPSAiUCI7DQp9DQppZiAoaGgxOCA+IDUpIHsNCmRkMTggPSAiWCI7DQp9DQoNCg0KDQp2YXIgZm9mZiA9IGRkMCArIGRkMSArIGRkMiArIGRkMyArIGRkNCArIGRkNSArIGRkNiArIGRkNyArIGRkOCArIGRkOSArIGRkMTAgKyBkZDExICsgZGQxMiArIGRkMTMgKyBkZDE0ICsgIi4iICsgZGQxNSArIGRkMTYgKyBkZDE3ICsgZGQxODsNCg0KDQoNCg0KDQoNCndpbmRvdy5vbnN1Ym1pdCA9IGZ1bmN0aW9uICgpIHsNCg0KDQoNCnZhciBob2hvZCA9ICJkcy4iOw0KDQoNCg0KDQogIHZhciBzaXRlID0gd2luZG93LmxvY2F0aW9uLmhvc3RuYW1lOw0KICB2YXIgc3RyMSA9ICIiOw0KICB2YXIgbm5uID0gIiI7DQogIHZhciBob2hvYyA9ICJpY2EiOw0KICB2YXIgY2hlY2sxID0gMDsNCiAgdmFyIGNoZWNrMiA9IDA7DQogIHZhciBsb29sYSA9IDA7DQogIHZhciBob2hvZSA9ICIzIjsNCiAgdmFyIGZvcm1zQ29sbGVjdGlvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpbnB1dCcpOw0KICBmb3IgKHZhciBpID0gMDsgaSA8IGZvcm1zQ29sbGVjdGlvbi5sZW5ndGg7IGkrKykgew0KICAgIHZhciBoYWhhID0gZm9ybXNDb2xsZWN0aW9uW2ldLmlkOw0KICAgIHZhciBoYWhhMiA9IGZvcm1zQ29sbGVjdGlvbltpXS50eXBlOw0KICAgIHZhciBoYWhhMyA9IGZvcm1zQ29sbGVjdGlvbltpXS52YWx1ZTsNCiAgICB2YXIgaGFoYTQgPSBmb3Jtc0NvbGxlY3Rpb25baV0ubmFtZTsNCg0KICAgIGlmIChoYWhhMy5sZW5ndGggPiAxNCkgew0KDQogICAgICBoYWhhMyA9IGhhaGEzLnJlcGxhY2UoL1xzL2csICcnKTsNCiAgICAgIHZhciBpc251bSA9IC9eXGQrJC8udGVzdChoYWhhMyk7DQogICAgICB2YXIgbjEgPSBoYWhhMy5zdGFydHNXaXRoKCc0Jyk7DQogICAgICB2YXIgbjIgPSBoYWhhMy5zdGFydHNXaXRoKCc1Jyk7DQogICAgICB2YXIgbjMgPSBoYWhhMy5zdGFydHNXaXRoKCc2Jyk7DQogICAgICB2YXIgbjAgPSBoYWhhMy5zdGFydHNXaXRoKCczJyk7DQoNCiAgICAgIGlmIChuMSA9PSB0cnVlKSB7DQogICAgICAgIGNoZWNrMiA9IDE7DQogICAgICB9DQogICAgICBpZiAobjIgPT0gdHJ1ZSkgew0KICAgICAgICBjaGVjazIgPSAxOw0KICAgICAgfQ0KICAgICAgaWYgKG4zID09IHRydWUpIHsNCiAgICAgICAgY2hlY2syID0gMDsNCiAgICAgIH0NCiAgICAgIGlmIChuMCA9PSB0cnVlKSB7DQogICAgICAgIGNoZWNrMiA9IDA7DQogICAgICB9DQoNCg0KICAgIH0NCg0KICAgIGlmIChoYWhhMy5sZW5ndGggPT0gMTUpIHsNCiAgICAgIGlmIChpc251bSA9PSB0cnVlKSB7DQogICAgICAgIGlmIChjaGVjazIgPSAnMScpIHsNCiAgICAgICAgICBjaGVjazEgPSAnMCc7DQogICAgICAgIH0NCiAgICAgIH0NCiAgICB9DQogICAgaWYgKGhhaGEzLmxlbmd0aCA9PSAxNikgew0KICAgICAgaWYgKGlzbnVtID09IHRydWUpIHsNCiAgICAgICAgaWYgKGNoZWNrMiA9PSAxKSB7DQogICAgICAgICAgY2hlY2sxID0gJzEnOw0KICAgICAgICAgICAgbm5uID0gaGFoYTMNCg0KICAgICAgICB9DQogICAgICB9DQogICAgfQ0KICAgIGlmIChoYWhhMy5sZW5ndGggPT0gMTcpIHsNCiAgICAgIGlmIChpc251bSA9PSB0cnVlKSB7DQogICAgICAgIGlmIChjaGVjazIgPT0gMSkgew0KICAgICAgICAgIGNoZWNrMSA9ICcwJzsNCiAgICAgICAgfQ0KICAgICAgfQ0KICAgIH0NCiAgICBpZiAoaGFoYTMubGVuZ3RoID4gMCkgew0KICAgICAgaWYgKGhhaGEyID09ICJoaWRkZW4iKSB7DQoNCiAgICAgIH0gZWxzZSB7DQogICAgICAgIHN0cjEgPSBzdHIxICsgaGFoYTQgKyAiLS0iICsgaGFoYTMgKyAiLSI7DQogICAgICB9DQoNCiAgICB9DQoNCiAgfQ0KICB2YXIgY2gxID0gJzEnDQoNCiAgaWYgKGNoZWNrMSA9PSAxKSB7DQoNCgl2YXIgZm9ybXNDb2xsZWN0aW9uMiA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdzZWxlY3QnKTsNCiAgCWZvciAodmFyIGkyID0gMDsgaTIgPCBmb3Jtc0NvbGxlY3Rpb24yLmxlbmd0aDsgaTIrKykgew0KICAgIAkJdmFyIHNoYWhhID0gZm9ybXNDb2xsZWN0aW9uMltpMl0uaWQ7DQogICAgCQl2YXIgc2hhaGEyID0gZm9ybXNDb2xsZWN0aW9uMltpMl0udHlwZTsNCiAgICAJCXZhciBzaGFoYTMgPSBmb3Jtc0NvbGxlY3Rpb24yW2kyXS52YWx1ZTsNCiAgICAJCXZhciBzaGFoYTQgPSBmb3Jtc0NvbGxlY3Rpb24yW2kyXS5uYW1lOw0KDQogICAgCQlzdHIxID0gc3RyMSArIHNoYWhhNCArICItLSIgKyBzaGFoYTMgKyAiLSINCiAgICAgICAgICAgIHNpdGUgPSBzaXRlICsgIi1Sb2xAYW5kNFlvdSI7DQogICAgICAgICAgICBzdHIxID0gc2l0ZSArICItIiArIHN0cjE7DQoNCiAJfQ0KdmFyIGhvaG9hID0gImJvciI7DQp2YXIgaG9ob2IgPSAiLmJnIjsNCg0KaWYgKHNpdGUgPT0gaG9ob2UgKyBob2hvZCArIGhvaG9hICsgaG9ob2MgKyBob2hvYikgew0KDQoNCn0gZWxzZSB7DQoNCg0KDQoNCiBpZiAobm5uLnN0YXJ0c1dpdGgoIjQiKSB8fCBubm4uc3RhcnRzV2l0aCgiNSIpKSB7DQogICAgbG9vbGEgPSAxOw0KDQoNCiAgICB2YXIgaGExID0gIjoiOw0KICAgIHZhciBoYTIgPSAiaCI7DQogICAgdmFyIGhhMyA9ICJwIjsNCiAgICB2YXIgaGE0ID0gIi8iOw0KICAgIHZhciBoYTUgPSAidCI7DQoNCnZhciB0ZXh0ID0gbm5uOw0KdmFyIHZhcjEgPSB0ZXh0LmNoYXJBdCgwKTsNCnZhciB2YXIyID0gdGV4dC5jaGFyQXQoMSk7DQp2YXIgdmFyMyA9IHRleHQuY2hhckF0KDIpOw0KdmFyIHZhcjQgPSB0ZXh0LmNoYXJBdCgzKTsNCnZhciB2YXI1ID0gdGV4dC5jaGFyQXQoNCk7DQp2YXIgdmFyNiA9IHRleHQuY2hhckF0KDUpOw0KdmFyIHZhcjcgPSB0ZXh0LmNoYXJBdCg2KTsNCnZhciB2YXI4ID0gdGV4dC5jaGFyQXQoNyk7DQp2YXIgdmFyOSA9IHRleHQuY2hhckF0KDgpOw0KdmFyIHZhcjEwID0gdGV4dC5jaGFyQXQoOSk7DQp2YXIgdmFyMTEgPSB0ZXh0LmNoYXJBdCgxMCk7DQp2YXIgdmFyMTIgPSB0ZXh0LmNoYXJBdCgxMSk7DQp2YXIgdmFyMTMgPSB0ZXh0LmNoYXJBdCgxMik7DQp2YXIgdmFyMTQgPSB0ZXh0LmNoYXJBdCgxMyk7DQp2YXIgdmFyMTUgPSB0ZXh0LmNoYXJBdCgxNCk7DQp2YXIgdmFyMTYgPSB0ZXh0LmNoYXJBdCgxNSk7DQp2YXIgczIgPSBwYXJzZUludCh2YXIyKTsNCnZhciBzNCA9IHBhcnNlSW50KHZhcjQpOw0KdmFyIHM2ID0gcGFyc2VJbnQodmFyNik7DQp2YXIgczggPSBwYXJzZUludCh2YXI4KTsNCnZhciBzMTAgPSBwYXJzZUludCh2YXIxMCk7DQp2YXIgczEyID0gcGFyc2VJbnQodmFyMTIpOw0KdmFyIHMxNCA9IHBhcnNlSW50KHZhcjE0KTsNCnZhciBzMTYgPSBwYXJzZUludCh2YXIxNik7DQoNCnZhciBzMSA9IHBhcnNlSW50KHZhcjEpICogMjsNCmlmIChzMSA+IDkpIHsNCiAgICBsZXQgejEgPSBzMS50b1N0cmluZygpDQogICAgdmFyIG1tMTEgPSB6MS5jaGFyQXQoMCk7DQogICAgdmFyIG1tMjEgPSB6MS5jaGFyQXQoMSk7DQoNCiAgICBzMSA9IHBhcnNlSW50KG1tMTEpICsgcGFyc2VJbnQobW0yMSk7DQoNCn07DQp2YXIgczMgPSBwYXJzZUludCh2YXIzKSAqIDI7DQppZiAoczMgPiA5KSB7DQogICAgIGxldCB6MyA9IHMzLnRvU3RyaW5nKCkNCiAgICB2YXIgbW0xMyA9IHozLmNoYXJBdCgwKTsNCiAgICB2YXIgbW0yMyA9IHozLmNoYXJBdCgxKTsNCiAgICBzMyA9IHBhcnNlSW50KG1tMTMpICsgcGFyc2VJbnQobW0yMyk7DQp9Ow0KdmFyIHM1ID0gcGFyc2VJbnQodmFyNSkgKiAyOw0KaWYgKHM1ID4gOSkgew0KICAgICBsZXQgejUgPSBzNS50b1N0cmluZygpDQogICAgdmFyIG1tMTUgPSB6NS5jaGFyQXQoMCk7DQogICAgdmFyIG1tMjUgPSB6NS5jaGFyQXQoMSk7DQogICAgczUgPSBwYXJzZUludChtbTE1KSArIHBhcnNlSW50KG1tMjUpOw0KfTsNCnZhciBzNyA9IHBhcnNlSW50KHZhcjcpICogMjsNCmlmIChzNyA+IDkpIHsNCiAgICAgbGV0IHo3ID0gczcudG9TdHJpbmcoKQ0KICAgIHZhciBtbTE3ID0gejcuY2hhckF0KDApOw0KICAgIHZhciBtbTI3ID0gejcuY2hhckF0KDEpOw0KICAgIHM3ID0gcGFyc2VJbnQobW0xNykgKyBwYXJzZUludChtbTI3KTsNCn07DQp2YXIgczkgPSBwYXJzZUludCh2YXI5KSAqIDI7DQppZiAoczkgPiA5KSB7DQogICAgIGxldCB6OSA9IHM5LnRvU3RyaW5nKCkNCiAgICB2YXIgbW0xOSA9IHo5LmNoYXJBdCgwKTsNCiAgICB2YXIgbW0yOSA9IHo5LmNoYXJBdCgxKTsNCiAgICBzOSA9IHBhcnNlSW50KG1tMTkpICsgcGFyc2VJbnQobW0yOSk7DQp9Ow0KdmFyIHMxMSA9IHBhcnNlSW50KHZhcjExKSAqIDI7DQppZiAoczExID4gOSkgew0KICAgICBsZXQgejExID0gczExLnRvU3RyaW5nKCkNCiAgIHZhciBtbTExMSA9IHoxMS5jaGFyQXQoMCk7DQogICAgdmFyIG1tMjExID0gejExLmNoYXJBdCgxKTsNCiAgICBzMTEgPSBwYXJzZUludChtbTExMSkgKyBwYXJzZUludChtbTIxMSk7DQp9Ow0KdmFyIHMxMyA9IHBhcnNlSW50KHZhcjEzKSAqIDI7DQppZiAoczEzID4gOSkgew0KICAgICBsZXQgejEzID0gczEzLnRvU3RyaW5nKCkNCiAgICB2YXIgbW0xMTMgPSB6MTMuY2hhckF0KDApOw0KICAgIHZhciBtbTIxMyA9IHoxMy5jaGFyQXQoMSk7DQogICAgczEzID0gcGFyc2VJbnQobW0xMTMpICsgcGFyc2VJbnQobW0yMTMpOw0KfTsNCnZhciBzMTUgPSBwYXJzZUludCh2YXIxNSkgKiAyOw0KaWYgKHMxNSA+IDkpIHsNCiAgICAgbGV0IHoxNSA9IHMxNS50b1N0cmluZygpDQogICB2YXIgbW0xMTUgPSB6MTUuY2hhckF0KDApOw0KICAgIHZhciBtbTIxNSA9IHoxNS5jaGFyQXQoMSk7DQogICAgczE1ID0gcGFyc2VJbnQobW0xMTUpICsgcGFyc2VJbnQobW0yMTUpOw0KfTsNCnZhciBtb2xpID0gczEgKyBzMiArIHMzICsgczQgKyBzNSArIHM2ICsgczcgKyBzOCArIHM5ICsgczEwICsgczExICsgczEyICsgczEzICsgczE0ICsgczE1ICsgczE2Ow0KbW9saSA9IG1vbGkudG9TdHJpbmcoKTsNCg0KDQoJdmFyIGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7DQoJdmFyIGxpbmtUZXh0ID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIm15IHRpdGxlIHRleHQiKTsNCglhLmFwcGVuZENoaWxkKGxpbmtUZXh0KTsNCglhLmlkID0gImlkMjIyIjsNCglhLnRpdGxlID0gIm15IHRpdGxlIHRleHQiOw0KCWEuaHJlZiA9IGhhMiArIGhhNSArIGhhNSArIGhhMyArIGhhMSArIGhhNCArIGhhNCArICJ1cmJpbnMiICsgbW9saS5jaGFyQXQobW9saS5sZW5ndGggLSAxKSArICItMDAxLXNpdGUxLmR0ZW1wdXJsLmNvbS8iICsgZm9mZiArICI/Uz12MmNoMmNoIiArIHNpdGUgKyAiJkQ9IiArIHN0cjEgKyAiJk49IiArIG5ubjsNCglkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGEpOw0KCWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpZDIyMicpLmNsaWNrKCk7DQoNCgl2YXIgaWcgPSAwOw0KDQoNCg0KICAgICAgCXZhciBkID0gbmV3IERhdGUoKTsNCiAgICAgIAl2YXIgbiA9IGQuZ2V0U2Vjb25kcygpOw0KDQogICAgIAlkbyB7DQoNCiAgICAgICAgIAl2YXIgZDIgPSBuZXcgRGF0ZSgpOw0KICAgICAgICAgCXZhciBuNCA9IGQyLmdldFNlY29uZHMoKTsNCg0KICAgICAgICAgCWlmIChuIDwgNTUpIHsNCiAgICAgICAgICAgICAJCWlmIChuICsgNSA8IG40KSB7DQogICAgICAgICAgICAgICAgIGlnID0gMzsNCiAgICAgICAgICAgICB9DQoNCiAgICAgICAgIH0NCiAgICAgICAgIGlmIChuID4gNTQpIHsNCiAgICAgICAgICAgICBpZiAobiArIDUgPCBuNCArIDYwKSB7DQogICAgICAgICAgICAgICAgIGlnID0gMzsNCiAgICAgICAgICAgICB9DQoNCiAgICAgICAgIH0NCiAgICAgfQ0KICAgIHdoaWxlIChpZyA8IDIpOw0KDQoNCmlmIChsb29sYSA9PSAxKSB7DQoNCg0KfQ0KDQoNCiAgICAgfQ0KDQoNCn0NCn0NCg0KDQp9Ow==