1data:text/javascript;base64,Ly/mianlsZXorr7nva4KbGF5dWkuY29uZmlnKHsKICAgIGJhc2U6Jy8vY2RuLm1haXJ1YW4uY29tL2Nkbi9sYXl1aV9leHRlbmQvJyAvL+aJqeWxleebruW9lQp9KTsKCi8q5Yqg6L29bGF5dWnmqKHlnZcqLwpsYXl1aS51c2UoWydsYXllcicsICdmb3JtJywgJ2N5Y2xlJ10sIGZ1bmN0aW9uKCkgewogICAgdmFyIGxheV9mb3JtID0gbGF5dWkuZm9ybTsKICAgIC8qLS0tLS0tLS0tLeihqOWNlemqjOivgSBiZWdpbiAtLS0tLS0tLS0tKi8KICAgIGxheV9mb3JtLnZlcmlmeSh7CiAgICAgICAgcmVxdWlyZWQ6IGZ1bmN0aW9uKHZhbHVlLCBpdGVtKSB7IC8vW+mHjeWGmea6kOeUn3JlcXVpcmVkXQogICAgICAgICAgICB2YWx1ZSA9ICQudHJpbSh2YWx1ZSk7CiAgICAgICAgICAgIGlmICghbmV3IFJlZ0V4cCgiW1xcU10rIikudGVzdCh2YWx1ZSkpIHsKICAgICAgICAgICAgICAgIHJldHVybiAkKGl0ZW0pLmF0dHIoJ3ZlcmlmeS10aXRsZScpICsgJ+S4jeiDveS4uuepuu+8gSc7CiAgICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIGNoZWNrZWQ6IGZ1bmN0aW9uKHZhbHVlLCBpdGVtKSB7IC8v5b+F6YCJCiAgICAgICAgICAgIGlmICghJChpdGVtKS5wcm9wKCdjaGVja2VkJykpIHsKICAgICAgICAgICAgICAgIHJldHVybiAn5b+F6YCJ6aG55LiN6IO95Li656m67
17yBJzsKICAgICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgcGhvbmU6IGZ1bmN0aW9uKHZhbHVlLCBpdGVtKSB7IC8vW+mHjeWGmea6kOeUn3Bob25lXQogICAgICAgICAgICB2YWx1ZSA9ICQudHJpbSh2YWx1ZSk7CiAgICAgICAgICAgIGlmIChuZXcgUmVnRXhwKCJbXFxTXSsiKS50ZXN0KHZhbHVlKSAmJiAhbmV3IFJlZ0V4cCgnXjFcXGR7MTB9JCcpLnRlc3QodmFsdWUpKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gJChpdGVtKS5hdHRyKCd2ZXJpZnktdGl0bGUnKSArICfmoLzlvI/plJnor6/vvIEnOwogICAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICBlbWFpbDogZnVuY3Rpb24odmFsdWUsIGl0ZW0pIHsgLy9b6YeN5YaZ5rqQ55SfZW1haWxdCiAgICAgICAgICAgIHZhbHVlID0gJC50cmltKHZhbHVlKTsKICAgICAgICAgICAgaWYgKG5ldyBSZWdFeHAoIltcXFNdKyIpLnRlc3QodmFsdWUpICYmICFuZXcgUmVnRXhwKCdeW2EtekEtWjAtOV9cXC1cXC5dK0AoW2EtekEtWjAtOVxcLV0rXFwuKStbYS16QS1aXXsyLDV9JCcpLnRlc3QodmFsdWUpKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gJChpdGVtKS5hdHRyKCd2ZXJpZnktdGl0bGUnKSArICfmoLzlvI/plJnor6/vvIEnOwogICAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICBudW1iZXJfbGVuOiBmdW5jdGlvbih2YWx1ZSwgaXRlbSkgeyAvL3ZhbHVl7
17ya6KGo5Y2V55qE5YC844CBaXRlbe+8muihqOWNleeahERPTeWvueixoQogICAgICAgICAgICB2YWx1ZSA9ICQudHJpbSh2YWx1ZSk7CiAgICAgICAgICAgIHZhciBsZW4gPSAkKGl0ZW0pLmF0dHIoJ3ZlcmlmeS1sZW4nKTsKICAgICAgICAgICAgdmFyIGxlbk1zZyA9ICcnOwogICAgICAgICAgICB2YXIgZGVmYXVsdF9tYXggPSAnJzsKICAgICAgICAgICAgaWYgKCFsZW4pIHsKICAgICAgICAgICAgICAgIGxlbiA9ICcyJzsKICAgICAgICAgICAgICAgIGRlZmF1bHRfbWF4ID0gJywnLCBsZW5Nc2cgPSAn5Lul5LiKJzsKICAgICAgICAgICAgfSBlbHNlIGlmIChsZW4uaW5kZXhPZigiLCIpID4gLTEgJiYgIW5ldyBSZWdFeHAoIixbXFxkXSsiKS50ZXN0KGxlbikpIHsKICAgICAgICAgICAgICAgIGxlbiA9IGxlbi5yZXBsYWNlKCcsJywgJycpOwogICAgICAgICAgICAgICAgZGVmYXVsdF9tYXggPSAnLCc7CiAgICAgICAgICAgICAgICBsZW5Nc2cgPSAn5Lul5LiKJzsKICAgICAgICAgICAgfQogICAgICAgICAgICB2YXIgcmVnU3RyID0gJ15bMC05XXsnICsgbGVuICsgZGVmYXVsdF9tYXggKyAnfSQnOwogICAgICAgICAgICBpZiAobmV3IFJlZ0V4cCgiW1xcU10rIikudGVzdCh2YWx1ZSkgJiYgIW5ldyBSZWdFeHAocmVnU3RyKS50ZXN0KHZhbHVlKSkgewogICAgICAgICAgICAgICAgcmV0dXJuICQoaXRlbSkuYXR0cigndmVyaWZ5LXRpdGxlJykgKyAn5b+F6aG7JyArIGxlbi5yZXBsYWNlKCcsJywgJ+WIsCcpICsgJ+S9jScgKyBsZW5Nc2cgKyAn5pWw5a2X7
17yBJzsKICAgICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgd29yZF9sZW46IGZ1bmN0aW9uKHZhbHVlLCBpdGVtKSB7CiAgICAgICAgICAgIHZhbHVlID0gJC50cmltKHZhbHVlKTsKICAgICAgICAgICAgdmFyIGxlbiA9ICQoaXRlbSkuYXR0cigndmVyaWZ5LWxlbicpOwogICAgICAgICAgICB2YXIgbGVuTXNnID0gJyc7CiAgICAgICAgICAgIHZhciBkZWZhdWx0X21heCA9ICcnOwogICAgICAgICAgICBpZiAoIWxlbikgewogICAgICAgICAgICAgICAgbGVuID0gJzInOwogICAgICAgICAgICAgICAgZGVmYXVsdF9tYXggPSAnLCcsIGxlbk1zZyA9ICfku6XkuIonOwogICAgICAgICAgICB9IGVsc2UgaWYgKGxlbi5pbmRleE9mKCIsIikgPiAtMSAmJiAhbmV3IFJlZ0V4cCgiLFtcXGRdKyIpLnRlc3QobGVuKSkgewogICAgICAgICAgICAgICAgbGVuID0gbGVuLnJlcGxhY2UoJywnLCAnJyk7CiAgICAgICAgICAgICAgICBkZWZhdWx0X21heCA9ICcsJzsKICAgICAgICAgICAgICAgIGxlbk1zZyA9ICfku6XkuIonOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHZhciByZWdTdHIgPSAnXltcXHddeycgKyBsZW4gKyBkZWZhdWx0X21heCArICd9JzsKICAgICAgICAgICAgaWYgKG5ldyBSZWdFeHAoIltcXFNdKyIpLnRlc3QodmFsdWUpICYmICFuZXcgUmVnRXhwKHJlZ1N0cikudGVzdCh2YWx1ZSkpIHsKICAgICAgICAgICAgICAgIHJldHVybiAkKGl0ZW0pLmF0dHIoJ3ZlcmlmeS10aXRsZScpICsgJ+W/hemhuycgKyBsZW4ucmVwbGFjZSgnLCcsICfliLAnKSArICfkvY0nICsgbGVuTXNnICsgJ+Wtl+avjeWSjOaVsOWtl++8gSc7CiAgICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIHN0cl9sZW46IGZ1bmN0aW9uKHZhbHVlLCBpdGVtKSB7CiAgICAgICAgICAgIHZhbHVlID0gJC50cmltKHZhbHVlKTsKICAgICAgICAgICAgdmFyIGxlbiA9ICQoaXRlbSkuYXR0cigndmVyaWZ5LWxlbicpOwogICAgICAgICAgICB2YXIgbGVuTXNnID0gJyc7CiAgICAgICAgICAgIHZhciBkZWZhdWx0X21heCA9ICcnOwogICAgICAgICAgICBpZiAoIWxlbikgewogICAgICAgICAgICAgICAgbGVuID0gJzInOwogICAgICAgICAgICAgICAgZGVmYXVsdF9tYXggPSAnLCcsIGxlbk1zZyA9ICfku6XkuIonOwogICAgICAgICAgICB9IGVsc2UgaWYgKGxlbi5pbmRleE9mKCIsIikgPiAtMSAmJiAhbmV3IFJlZ0V4cCgiLFtcXGRdKyIpLnRlc3QobGVuKSkgewogICAgICAgICAgICAgICAgbGVuID0gbGVuLnJlcGxhY2UoJywnLCAnJyk7CiAgICAgICAgICAgICAgICBkZWZhdWx0X21heCA9ICcsJzsKICAgICAgICAgICAgICAgIGxlbk1zZyA9ICfku6XkuIonOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHZhciByZWdTdHIgPSAnXltcXFNdeycgKyBsZW4gKyBkZWZhdWx0X21heCArICd9JzsKICAgICAgICAgICAgaWYgKG5ldyBSZWdFeHAoIltcXFNdKyIpLnRlc3QodmFsdWUpICYmICFuZXcgUmVnRXhwKHJlZ1N0cikudGVzdCh2YWx1ZSkpIHsKICAgICAgICAgICAgICAgIHJldHVybiAkKGl0ZW0pLmF0dHIoJ3ZlcmlmeS10aXRsZScpICsgJ+W/hemhuycgKyBsZW4ucmVwbGFjZSgnLCcsICfliLAnKSArICfkvY0nICsgbGVuTXNnICsgJ+Wtl+espu+8gSc7CiAgICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIG5vdE51bWJlcjogZnVuY3Rpb24odmFsdWUsIGl0ZW0pIHsKICAgICAgICAgICAgdmFsdWUgPSAkLnRyaW0odmFsdWUpOwogICAgICAgICAgICBpZiAobmV3IFJlZ0V4cCgiW1xcU10rIikudGVzdCh2YWx1ZSkgJiYgIW5ldyBSZWdFeHAoJ1tcXERdKycpLnRlc3QodmFsdWUpKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gJChpdGVtKS5hdHRyKCd2ZXJpZnktdGl0bGUnKSArICfkuI3og73mmK/mlbDlrZcnOwogICAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICBub3RFbWFpbDogZnVuY3Rpb24odmFsdWUsIGl0ZW0pIHsKICAgICAgICAgICAgdmFsdWUgPSAkLnRyaW0odmFsdWUpOwogICAgICAgICAgICBpZiAobmV3IFJlZ0V4cCgiW1xcU10rIikudGVzdCh2YWx1ZSkgJiYgbmV3IFJlZ0V4cCgnXlthLXpBLVowLTlfXFwtXFwuXStAKFthLXpBLVowLTlcXC1dK1xcLikrW2EtekEtWl17Miw1fSQnKS50ZXN0KHZhbHVlKSkgewogICAgICAgICAgICAgICAgcmV0dXJuICQoaXRlbSkuYXR0cigndmVyaWZ5LXRpdGxlJykgKyAn5LiN6IO95piv6YKu566xJzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0pOwogICAgLyotLS0tLS0tLS0t6KGo5Y2V6aqM6K+BIGVuZCAtLS0tLS0tLS0tKi8KCiAgICAkKGZ1bmN0aW9uKCkgewog&#
173;CAgICAgIHZhciB3ZCA9ICQod2luZG93KS53aWR0aCgpOwoKICAgICAgICAvKioqKioqKioqKioqKioqY3ljbGUyIGJlZ2luKioqKioqKioqKioqKioqLwogICAgICAgICQoJy5jeWNsZTInKS5jeWNsZSh7CiAgICAgICAgICAgIGxvZzogZmFsc2UsCiAgICAgICAgfSk7CgogICAgICAgIGlmICh3ZCA+IDc2NykgewogICAgICAgICAgICAkKCcuY3ljbGUyUEMnKS5jeWNsZSh7CiAgICAgICAgICAgICAgICBsb2c6IGZhbHNlLAogICAgICAgICAgICB9KTsKICAgICAgICB9CgogICAgICAgIC8qKioqKioqKioqKiroh6rlrprkuYkgIHBhZ2Vy6IGU5YqoIGN5Y2xlMioqKioqKioqKioqKi8KICAgICAgICAkKCdbYmluZEN5Y2xlMl0gPiAqJykuY2xpY2soZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIHZhciBjeWNsZTJCb3ggPSAkKHRoaXMpLnBhcmVudCgpLmF0dHIoJ2JpbmRDeWNsZTInKTsKICAgICAgICAgICAgJCgnLmN5Y2xlMltiaW5kQ3ljbGUyRmlsdGVyPSInICsgY3ljbGUyQm94ICsgJyJdJykuY3ljbGUoJ2dvdG8nLCAkKHRoaXMpLmluZGV4KCkpOwogICAgICAgIH0pOwogICAgICAgICQoJ1tiaW5kQ3ljbGUyUENdID4gKicpLmNsaWNrKGZ1bmN0aW9uKCkgewogICAgICAgICAgICB2YXIgY3ljbGUyUENCb3ggPSAkKHRoaXMpLnBhcmVudCgpLmF0dHIoJ2JpbmRDeWNsZTJQQycpOwogICAgICAgICAgICAkKCcuY3ljbGUyUENbYmluZEN5Y2xlMlBDRmlsdGVyPSInICsgY3ljbGUyUENCb3ggKyAnIl0nKS5jeWNsZSgnZ290bycsICQodGhpcykuaW5kZXgoKSk7CiAgICAgICAgfSk7CiAgICAgICAgLyoqKioqKioqKioqKuiHquWumuS5iSAgY3ljbGUy6IGU5YqoIHBhZ2VyKioqKioqKioqKioqLwogICAgICAgICQoJy5jeWNsZTInKS5vbignY3ljbGUtYmVmb3JlJywgZnVuY3Rpb24oZXZlbnQsIG9wdGlvbkhhc2gsIG91dGdvaW5nU2xpZGVFbCwgaW5jb21pbmdTbGlkZUVsLCBmb3J3YXJkRmxhZykgewogICAgICAgICAgICB2YXIgcGFnZXJCb3ggPSAkKHRoaXMpLmF0dHIoJ2N5Y2xlMkJpbmQnKTsKICAgICAgICAgICAgaWYgKHBhZ2VyQm94KSB7CiAgICAgICAgICAgICAgICB2YXIgaW5kZXggPSBvcHRpb25IYXNoLm5leHRTbGlkZTsKICAgICAgICAgICAgICAgIHZhciBwYWdlckJveGVzID0gcGFnZXJCb3guc3BsaXQoJywnKTsKICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGFnZXJCb3hlcy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgICAgICQoJ1tjeWNsZTJCaW5kRmlsdGVyPSInICsgcGFnZXJCb3hlc1tpXSArICciXSA+IConKS5lcShpbmRleCkuYWRkQ2xhc3MoJ2FjdGl2ZScpLnNpYmxpbmdzKCkucmVtb3ZlQ2xhc3MoJ2FjdGl2ZScpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgICAgJCgnLmN5Y2xlMlBDJykub24oJ2N5Y2xlLWJlZm9yZScsIGZ1bmN0aW9uKGV2ZW50LCBvcHRpb25IYXNoLCBvdXRnb2luZ1NsaWRlRWwsIGluY29taW5nU2xpZGVFbCwgZm9yd2FyZEZsYWcpIHsKICAgICAgICAgICAgdmFyIHBhZ2VyUENCb3ggPSAkKHRoaXMpLmF0dHIoJ2N5Y2xlMlBDQmluZCcpOwogICAgICAgICAgICBpZiAocGFnZXJQQ0JveCkgewogICAgICAgICAgICAgICAgdmFyIGluZGV4ID0gb3B0aW9uSGFzaC5uZXh0U2xpZGU7CiAgICAgICAgICAgICAgICB2YXIgcGFnZXJQQ0JveGVzID0gcGFnZXJQQ0JveC5zcGxpdCgnLCcpOwogICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYWdlclBDQm94ZXMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICAgICAgICAkKCdbY3ljbGUyUENCaW5kRmlsdGVyPSInICsgcGFnZXJQQ0JveGVzW2ldICsgJyJdID4gKicpLmVxKGluZGV4KS5hZGRDbGFzcygnYWN0aXZlJykuc2libGluZ3MoKS5yZW1vdmVDbGFzcygnYWN0aXZlJyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgICAvKioqKioqKioqKioqKioqY3ljbGUyIGVuZCoqKioqKioqKioqKioqKi8KICAgIH0pOwp9KTsKCgokKGZ1bmN0aW9uKCkgewoKICAgIHZhciBjalByb3RvY29sID0gd2luZG93LmxvY2F0aW9uLnByb3RvY29sLnNwbGl0KCc6JylbMF07CiAgICBpZiAoY2pQcm90b2NvbCA9PT0gJ2h0dHBzJykgewogICAgICAgIHZhciBBUEkgPSAnaHR0cHM6Ly9hcGkzLm1haXJ1YW4uY29tL2FwaS5waHAnOwogICAgfWVsc2V7CiAgICAgICAgdmFyIEFQSSA9ICdodHRwOi8vYXBpMy5tYWlydWFuLmNvbS9hcGkucGhwJzsKICAgIH0KCiAgICB2YXIgd2QgPSAkKHdpbmRvdykud2lkdGgoKTs
15;ICAgIHZhciB1c2VyX2FnZW50ID0gbmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpOyAvLyBkZXRlY3QgdGhlIHVzZXIgYWdlbnQKICAgIHZhciBpb3NfZGV2aWNlcyA9IHVzZXJfYWdlbnQubWF0Y2goLyhpcGhvbmV8aXBvZHxpcGFkKS8pICA/ICJ0b3VjaHN0YXJ0IiA6ICJjbGljayI7IC8vY2hlY2sgaWYgdGhlIGRldmljZXMgYXJlIGlvcyBkZXZpY2VzCgogICAgaWYoaW9zX2RldmljZXMgPT0gJ3RvdWNoc3RhcnQnKXsKICAgICAgICBGYXN0Q2xpY2suYXR0YWNoKGRvY3VtZW50LmJvZHkpOwogICAgfQoKICAgIC8qKioqKioqKirliLfmlrDpqozor4HnoIEgYmVnaW4qKioqKioqKiovCiAgICAkKCdib2R5Jykub24oJ2NsaWNrJywgJy55em0sICN5em0nLCBmdW5jdGlvbigpIHsKICAgICAgICAkKHRoaXMpLmF0dHIoJ3NyYycsICd5em0ucGhwP3Q9JyArIE1hdGgucmFuZG9tKCkpOwogICAgfSk7CiAgICAvKioqKioqKioq5Yi35paw6aqM6K+B56CBIGVuZCoqKioqKioqKi8KCiAgICAvKioqKioqKioq56uZ54K55Zyw5Zu+IGJlZ2luKioqKioqKioqLwogICAgJCgnLm9wZW5TaXRlbWFwJykuY2xpY2soZnVuY3Rpb24oKSB7CiAgICAgICAgdmFyIGlkID0gJCh0aGlzKS5hdHRyKCd0aXRsZScpOwogICAgICAgICQoJyMnICsgaWQpLmZhZGVUb2dnbGUoKTsKICAgICAgICBpZiAoJCh0aGlzKS5odG1sKCkgPT0gJ+eCueWHu+WFs+mXrScpIHsKICAgICAgICAgICAgJCh0aGlzKS5odG1sKCfngrnlh7vlsZXlvIAnKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkKHRoaXMpLmh0bWwoJ+eCueWHu+WFs+mXrScpOwogICAgICAgIH0KICAgIH0pOwogICAgLyoqKioqKioqKuermeeCueWcsOWbviBlbmQqKioqKioqKiovCgogICAgLy8gLyoqKioqKioqKuWuouacjSBiZWdpbioqKioqKioqKi8KICAgIC8vICQoJy5vcGVuS2VmdScpLmNsaWNrKGZ1bmN0aW9uKCkgewogICAgLy8gICAgIGVhc2Vtb2JpbS5iaW5kKHtjb25maWdJZDogJ2MzNzMyZDZiLWVkY2YtNGMzMi05ODMyLTIyYTAxY2RiN2M2MCd9KTsKICAgIC8vIH0pOwogICAgLy8gLyoqKioqKioqKuWuouacjSBlbmQqKioqKioqKiovCgogICAgLyoqKioqKioqKumUgOmHj+iuoeaVsCBiZWdpbioqKioqKioqKi8KICAgICQoIi5zYWxlTnVt
1QzIiKS5lYWNoKGZ1bmN0aW9uKCkgewogICAgICAgIHZhciBlbGUgPSAkKHRoaXMpOwogICAgICAgIHZhciBiYXNlTnVtID0gZWxlLmF0dHIoJ2Jhc2VOdW0nKTsKICAgICAgICB2YXIgdG9wTnVtID0gZWxlLmF0dHIoJ3RvcE51bScpOwogICAgICAgIHZhciBiYXNlR29vZHMgPSBlbGUuYXR0cignYmFzZUdvb2RzJyk7CiAgICAgICAgdmFyIHR5cGUgPSBlbGUuYXR0cigndHlwZScpOwogICAgICAgIGlmICghYmFzZUdvb2RzKSB7IGJhc2VHb29kcyA9ICcnOyB9CiAgICAgICAgaWYgKCFiYXNlTnVtKSB7IGJhc2VOdW0gPSAwOyB9CiAgICAgICAgJC5wb3N0KEFQSSsiL3dlYi9nZXRzYWxlc251bSIsIHsgaWQ6IGJhc2VHb29kcyB9LCBmdW5jdGlvbihkKSB7CiAgICAgICAgICAgIGlmICh0eXBlID09ICdqaWFuJykgewogICAgICAgICAgICAgICAgdmFyIHN5ID0gcGFyc2VJbnQoYmFzZU51bSkgLSBwYXJzZUludChkLmRhdGEuc2FsZXNudW0pOwogICAgICAgICAgICAgICAgc3kgPSBzeSA8IDEgPyAxIDogc3k7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICB2YXIgc3kgPSBwYXJzZUludChkLmRhdGEuc2FsZXNudW0pOwogICAgICAgICAgICAgICAgc3kgPSBzeSA8IDAgPyAwIDogc3k7CiAgICAgICAgICAgICAgICBpZiAodG9wTnVtKSB7CiAgICAgICAgICAgICAgICAgICAgdG9wTnVtID0gcGFyc2VJbnQodG9wTnVtKTsKICAgICAgICAgICAgICAgICAgICBzeSA9IHN5ID4gdG9wTnVtID8gdG9wTnVtIC0gMSA6IHN5OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsZS5odG1sKHN5KTsKICAgICAgICB9KTsKICAgIH0pOwogICAgLyoqKioqKioqKumUgOmHj+iuoeaVsCBlbmQqKioqKioqKiovCgogICAgLyoqKioqKioqKumUgOmHj+iuoeaVsCBiZWdpbioqKioqKioqKi8KICAgICQoIi5zYWxlTnVt
1QzMiKS5lYWNoKGZ1bmN0aW9uKCkgewogICAgICAgIHZhciBlbGUgPSAkKHRoaXMpOwogICAgICAgIHZhciBiYXNlTnVtID0gZWxlLmF0dHIoJ2Jhc2VOdW0nKTsKICAgICAgICB2YXIgdG9wTnVtID0gZWxlLmF0dHIoJ3RvcE51bScpOwogICAgICAgIHZhciBiYXNlR29vZHMgPSBlbGUuYXR0cignYmFzZUdvb2RzJyk7CiAgICAgICAgdmFyIHR5cGUgPSBlbGUuYXR0cigndHlwZScpOwogICAgICAgIGlmICghYmFzZUdvb2RzKSB7IGJhc2VHb29kcyA9ICcnOyB9CiAgICAgICAgaWYgKCFiYXNlTnVtKSB7IGJhc2VOdW0gPSAwOyB9CiAgICAgICAgJC5wb3N0KEFQSSsiL3N1Y2FpL2dldHNhbGVzbnVtIiwgeyBpZDogYmFzZUdvb2RzIH0sIGZ1bmN0aW9uKGQpIHsKICAgICAgICAgICAgaWYgKHR5cGUgPT0gJ2ppYW4nKSB7CiAgICAgICAgICAgICAgICB2YXIgc3kgPSBwYXJzZUludChiYXNlTnVtKSAtIHBhcnNlSW50KGQuZGF0YS5zYWxlc251bSk7Ly8gCiAgICAgICAgICAgICAgICBzeSA9IHN5IDwgMSA/IDEgOiBzeTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHZhciBzeSA9IHBhcnNlSW50KGQuZGF0YS5zYWxlc251bSkgLSBwYXJzZUludChiYXNlTnVtKTsgLy8gc2EgMTg4IAogICAgICAgICAgICAgICAgc3kgPSBzeSA8IDAgPyAwIDogc3k7CiAgICAgICAgICAgICAgICBpZiAodG9wTnVtKSB7CiAgICAgICAgICAgICAgICAgICAgdG9wTnVtID0gcGFyc2VJbnQodG9wTnVtKTsKICAgICAgICAgICAgICAgICAgICBzeSA9IHN5ID4gdG9wTnVtID8gdG9wTnVtIC0gMSA6IHN5OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsZS5odG1sKHN5KTsKICAgICAgICB9KTsKICAgIH0pOwogICAgLyoqKioqKioqKumUgOmHj+iuoeaVsCBlbmQqKioqKioqKiovCgogICAgLyoqKioqKioqKuWAkuiuoeaXtiBiZWdpbioqKioqKioqKi8KICAgIGxheXVpLnVzZShbJ3V0aWwnXSwgZnVuY3Rpb24oKSB7CiAgICAgICAgJCgiLmNvdW50ZG93biIpLmVhY2goZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIHZhciBlbGUgPSAkKHRoaXMpOwogICAgICAgICAgICB2YXIgdHlwZSA9IGVsZS5hdHRyKCd0eXBlJyk7CiAgICAgICAgICAgIHZhciB3ZWJGcm9tID0gZWxlLmF0dHIoJ2Zyb20nKTsKICAgICAgICAgICAgdmFyIGVuZFRpbWUgPSBuZXcgRGF0ZShlbGUuYXR0cignZW5kVGltZScpLnJlcGxhY2UoLy0vZywgJy8nKSkuZ2V0VGltZSgpOwogICAgICAgICAgICAkLmFqYXgoewogICAgICAgICAgICAgICAgY29tcGxldGU6IGZ1bmN0aW9uIChYTUxIdHRwUmVxdWVzdCwgdGV4dFN0YXR1cykgewogICAgICAgICAgICAgICAgICAgIHZhciBzZXJ2ZXJUaW1lID0gbmV3IERhdGUoWE1MSHR0cFJlcXVlc3QuZ2V0UmVzcG9uc2VIZWFkZXIoIkRhdGUiKSkuZ2V0VGltZSgpOwogICAgICAgICAgICAgICAgICAgIGxheXVpLnV0aWwuY291bnRkb3duKGVuZFRpbWUsIHNlcnZlclRpbWUsIGZ1bmN0aW9uKGRhdGUsIHNlcnZlclRpbWUsIHRpbWVyKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmKHdlYkZyb20gJiYgd2ViRnJvbSA9PSAibWFpcnVhbiIpewogICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkYXRlLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0ZVtpXSA9IGxheXVpLnV0aWwuZGlnaXQoZGF0ZVtpXSwgMik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyDpuqbova8KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHR5cGUgPT0gJ2Nsb2NrJyl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoZGF0ZVsxXSA9PSBkYXRlWzJdICYmIGRhdGVbMl0gPT0gZGF0ZVszXSAmJiBkYXRlWzNdID09IDApewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24ucmVsb2FkKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2V7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdHIgPSAnPHNwYW4+JytkYXRlWzFdLnNsaWNlKDAsMSkrJzwvc3Bhbj48c3Bhbj4nKyBkYXRlWzFdLnNsaWNlKDEpICsnPC9zcGFuPjo8c3Bhbj4nK2RhdGVbMl0uc2xpY2UoMCwxKSsnPC9zcGFuPjxzcGFuPicrIGRhdGVbMl0uc2xpY2UoMSkgKyc8L3NwYW4+OjxzcGFuPicrZGF0ZVszXS5zbGljZSgwLDEpKyc8L3NwYW4+PHNwYW4+JytkYXRlWzNdLnNsaWNlKDEpKyc8L3NwYW4+JzsKICAgICAgICAgICAg
13;CAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZSBpZih0eXBlID09ICdjb2xvcicpewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGRhdGVbMV0gPT0gZGF0ZVsyXSAmJiBkYXRlWzJdID09IGRhdGVbM10gJiYgZGF0ZVszXSA9PSAwKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNlewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RyID0gJzxzcGFuPicrZGF0ZVswXSsnPC9zcGFuPuWkqTxzcGFuPicrZGF0ZVsxXSsnPC9zcGFuPuaXtjxzcGFuPicrZGF0ZVsyXSsnPC9zcGFuPuWIhjxzcGFuPicrZGF0ZVszXSsnPC9zcGFuPuenkic7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2UgaWYodHlwZSA9PSAnaG91cicpewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGRhdGVbMV0gPT0gZGF0ZVsyXSAmJiBkYXRlWzJdID09IGRhdGVbM10gJiYgZGF0ZVszXSA9PSAwKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNlewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RyID0gJzxzcGFuPicrZGF0ZVswXS5zbGljZSgwLDEpKyc8L3NwYW4+PHNwYW4+JysgZGF0ZVswXS5zbGljZSgxKSArJzwvc3Bhbj7lpKk8c3Bhbj4nK2RhdGVbMV0uc2xpY2UoMCwxKSsnPC9zcGFuPjxzcGFuPicrIGRhdGVbMV0uc2xpY2UoMSkgKyc8L3NwYW4+5pe2PHNwYW4+JytkYXRlWzJdLnNsaWNlKDAsMSkrJzwvc3Bhbj48c3Bhbj4nKyBkYXRlWzJdLnNsaWNlKDEpICsnPC9zcGFuPuWIhjxzcGFuPicrZGF0ZVszXS5zbGljZSgwLDEpKyc8L3NwYW4+PHNwYW4+JytkYXRlWzNdLnNsaWNlKDEpKyc8L3NwYW4+56eSJzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZSBpZih0eXBlID09ICdob3VyMicpewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGRhdGVbMV0gPT0gZGF0ZVsyXSAmJiBkYXRlWzJdID09IGRhdGVbM10gJiYgZGF0ZVszXSA9PSAwKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNlewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RyID0gJzxsYWJlbD48c3Bhbj4nK2RhdGVbMF0uc2xpY2UoMCwxKSsnPC9zcGFuPjxzcGFuPicrIGRhdGVbMF0uc2xpY2UoMSkgKyc8L3NwYW4+5aSpPC9sYWJlbD48bGFiZWw+PHNwYW4+JytkYXRlWzFdLnNsaWNlKDAsMSkrJzwvc3Bhbj48c3Bhbj4nKyBkYXRlWzFdLnNsaWNlKDEpICsnPC9zcGFuPuaXtjwvbGFiZWw+PGxhYmVsPjxzcGFuPicrZGF0ZVsyXS5zbGljZSgwLDEpKyc8L3NwYW4+PHNwYW4+JysgZGF0ZVsyXS5zbGljZSgxKSArJzwvc3Bhbj7liIY8L2xhYmVsPjxsYWJlbD48c3Bhbj4nK2RhdGVbM10uc2xpY2UoMCwxKSsnPC9zcGFuPjxzcGFuPicrZGF0ZVszXS5zbGljZSgxKSsnPC9zcGFuPuenkjwvbGFiZWw+JzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNlewogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g5YCS6K6h5pe25Li6MCA9PiDpmpDol4/lgJLorqHml7blhYPntKAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCBkYXRlWzBdID09IGRhdGVbMV0gJiYgZGF0ZVsxXSA9PSBkYXRlWzJdICYmIGRhdGVbMl0gPT0gZGF0ZVszXSAmJiBkYXRlWzNdID09IDAgKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCIuY291bnRkb3duIikucGFyZW50cygiW3RpbWVfb3Zlcl9oaWRkZW5dIikuYWRkQ2xhc3MoImxheXVpLWhpZGUiKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIOS6p+WTgeermQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGUgPT0gJ2RheScpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RyID0gZGF0ZVswXSArIDE7CiAgICAgICAgICAgICAgICAgICAg&
1#73;CAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGF0ZS5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRlW2ldID0gbGF5dWkudXRpbC5kaWdpdChkYXRlW2ldLCAyKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYodHlwZSA9PSAnaG91cicgJiYgZGF0ZVswXSA9PSAnMDAnKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0ciA9IGRhdGVbMV0gKyAn5pe2JyArIGRhdGVbMl0gKyAn5YiGJyArIGRhdGVbM10gKyAn56eSJzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZSBpZih0eXBlID09ICdhYl9ob3VyJyl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdHIgPSBkYXRlWzFdICsgJ+aXticgKyBkYXRlWzJdICsgJ+WIhicgKyBkYXRlWzNdICsgJ+enkic7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2UgaWYodHlwZSA9PSAnY29sb3InKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0ciA9ICc8c3Bhbj4nK2RhdGVbMF0rJzwvc3Bhbj7lpKk8c3Bhbj4nK2RhdGVbMV0rJzwvc3Bhbj7ml7Y8c3Bhbj4nK2RhdGVbMl0rJzwvc3Bhbj7liIY8c3Bhbj4nK2RhdGVbM10rJzwvc3Bhbj7np5InOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNlIGlmKHR5cGUgPT0gJ2Nsb2NrJyl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdHIgPSAnPHNwYW4+JytkYXRlWzFdLnNsaWNlKDAsMSkrJzwvc3Bhbj48c3Bhbj4nKyBkYXRlWzFdLnNsaWNlKDEpICsnPC9zcGFuPjo8c3Bhbj4nK2RhdGVbMl0uc2xpY2UoMCwxKSsnPC9zcGFuPjxzcGFuPicrIGRhdGVbMl0uc2xpY2UoMSkgKyc8L3NwYW4+OjxzcGFuPicrZGF0ZVszXS5zbGljZSgwLDEpKyc8L3NwYW4+PHNwYW4+JytkYXRlWzNdLnNsaWNlKDEpKyc8L3NwYW4+JzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZSBpZih0eXBlID09ICdob3VyMicpewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RyID0gJzxzcGFuPicrZGF0ZVsxXSsnPC9zcGFuPuaXtjxzcGFuPicrZGF0ZVsyXSsnPC9zcGFuPuWIhjxzcGFuPicrZGF0ZVszXSsnPC9zcGFuPuenkic7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2UgaWYodHlwZSA9PSAndGltZU91dFVwZGF0ZScpewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihkYXRlWzBdID09IDAgJiYgZGF0ZVsxXSA9PSAwICYmIGRhdGVbMl0gPT0gMCAmJiBkYXRlWzNdID09IDApewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdHIgPSAnPGxhYmVsPjxzcGFuPicrZGF0ZVswXSsnPC9zcGFuPuWkqTwvbGFiZWw+PGxhYmVsPjxzcGFuPicrZGF0ZVsxXSsnPC9zcGFuPuaXtjwvbGFiZWw+PGxhYmVsPjxzcGFuPicrZGF0ZVsyXSsnPC9zcGFuPuWIhjwvbGFiZWw+PGxhYmVsPjxzcGFuPicrZGF0ZVszXSsnPC9zcGFuPuenkjwvbGFiZWw+JzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNlewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RyID0gZGF0ZVswXSArICflpKknICsgZGF0ZVsxXSArICfml7YnICsgZGF0ZVsyXSArICfliIYnICsgZGF0ZVszXSArICfnp5InOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBlbGUuaHRtbChzdHIpOwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9KTsKICAgICAgICB9KTsKICAgIH0pOwogICAgLyoqKioqKioqKuWAkuiuoeaXtiBlbmQqKioqKioqKiovCgogICAgLyoqKioqKioqKnBsYWNlaG9sZGVyIElFOeWPiuS7peS4i+aPkOekuiBiZWdpbioqKioqKioqKi8KICAgIGlmIChuYXZpZ2F0b3IuYXBwTmFtZSA9PSAnTWljcm9zb2Z0IEludGVybmV&
1#48;IEV4cGxvcmVyJykgewogICAgICAgIHZhciB2ZXJzaW9uID0gKG5hdmlnYXRvci5hcHBWZXJzaW9uKS5zcGxpdCgiOyIpOwogICAgICAgIHZhciB0cmltX1ZlcnNpb24gPSB2ZXJzaW9uWzFdLnJlcGxhY2UoL1sgXS9nLCAiIik7CiAgICAgICAgaWYgKHRyaW1fVmVyc2lvbiA9PSAiTVNJRTguMCIgfHwgdHJpbV9WZXJzaW9uID09ICJNU0lFOS4wIikgewogICAgICAgICAgICAkKCdbcGxhY2Vob2xkZXJdJykuZWFjaChmdW5jdGlvbihpKSB7CiAgICAgICAgICAgICAgICAkKHRoaXMpLnZhbCgkKHRoaXMpLmF0dHIoJ3BsYWNlaG9sZGVyJykpLmFkZENsYXNzKCdjNycpOwogICAgICAgICAgICB9KTsKICAgICAgICAgICAgJCgnW3BsYWNlaG9sZGVyXScpLmZvY3VzKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgaWYgKCQodGhpcykudmFsKCkgPT0gJCh0aGlzKS5hdHRyKCdwbGFjZWhvbGRlcicpKSB7CiAgICAgICAgICAgICAgICAgICAgJCh0aGlzKS52YWwoJycpLnJlbW92ZUNsYXNzKCdjNycpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9KTsKICAgICAgICAgICAgJCgnW3BsYWNlaG9sZGVyXScpLmJsdXIoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICBpZiAoJCh0aGlzKS52YWwoKSA9PSAkKHRoaXMpLmF0dHIoJ3BsYWNlaG9sZGVyJykpIHsKICAgICAgICAgICAgICAgICAgICAkKHRoaXMpLnZhbCgkKHRoaXMpLmF0dHIoJ3BsYWNlaG9sZGVyJykpLmFkZENsYXNzKCdjNycpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAkKHRoaXMpLnJlbW92ZUNsYXNzKCdjNycpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9KTsKICAgICAgICB9CiAgICB9CiAgICAvKioqKioqKioqcGxhY2Vob2xkZXIgSUU55Y+K5Lul5LiL5o+Q56S6IGVuZCoqKioqKioqKi8KCiAgICAvKioqKioqKioqKmhvdmVyU2hvdyAvIG5vSG92ZXJIaWRlIGJlZ2luKioqKioqKioqKi8KICAgIGlmICh3ZCA+IDc2NykgewogICAgICAgICQoJ1tob3ZlclNob3dQQ10nKS5ob3ZlcihmdW5jdGlvbigpIHsKICAgICAgICAgICAgdmFyIGVsZW1lbnQgPSAkKHRoaXMpLmF0dHIoJ2hvdmVyU2hvd0JpbmQnKTsKICAgICAgICAgICAgaWYgKCFlbGVtZW50KSB7CiAgICAgICAgICAgICAgICAkKHRoaXMpLmFkZENsYXNzKCdob3ZlckFjdGl2ZScpLmZpbmQoJy5sYXl1aS1oaWRlJykuZWFjaChmdW5jdGlvbihpLCBkb20pIHsKICAgICAgICAgICAgICAgICAgICAkKGRvbSkuYWRkQ2xhc3MoJChkb20pLmF0dHIoJ2FuaW1hdGVkJykpOwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAkKCdbaG92ZXJTaG93QmluZEZpbHRlcj0iJyArIGVsZW1lbnQgKyAnIl0nKS5yZW1vdmVDbGFzcygnbGF5dWktaGlkZScpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHZhciB0b2dnbGUgPSAkKHRoaXMpLmF0dHIoJ2hvdmVyU2hvd1RvZ2dsZUJpbmQnKTsKICAgICAgICAgICAgaWYgKHRvZ2dsZSkgewogICAgICAgICAgICAgICAgJCgnW2hvdmVyU2hvd1RvZ2dsZUZpbHRlcj0iJyArIHRvZ2dsZSArICciXScpLmFkZENsYXNzKCdsYXl1aS1oaWRlJyk7CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgICAkKCdbbm9Ib3ZlckhpZGVQQ10nKS5ob3ZlcihmdW5jdGlvbigpIHt9LCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgdmFyIGVsZW1lbnQgPSAkKHRoaXMpLmF0dHIoJ25vSG92ZXJIaWRlQmluZCcpOwogICAgICAgICAgICBpZiAoIWVsZW1lbnQpIHsKICAgICAgICAgICAgICAgICQodGhpcykucmVtb3ZlQ2xhc3MoJ2hvdmVyQWN0aXZlJyk7CiAgICAgICAgICAgICAgICAkKHRoaXMpLm5vdCgnW2hvdmVyU2hvd1BDXScpLmFkZENsYXNzKCdsYXl1aS1oaWRlJyk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAkKCdbbm9Ib3ZlckhpZGVCaW5kRmlsdGVyPSInICsgZWxlbWVudCArICciXScpLmFkZENsYXNzKCdsYXl1aS1oaWRlJyk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdmFyIHRvZ2dsZSA9ICQodGhpcykuYXR0cignaG92ZXJTaG93VG9nZ2xlQmluZCcpOwogICAgICAgICAgICBpZiAodG9nZ2xlKSB7CiAgICAgICAgICAgICAgICAkKCdbaG92ZXJTaG93VG9nZ2xlRmlsdGVyPSInICsgdG9nZ2xlICsgJyJdJykucmVtb3ZlQ2xhc3MoJ2xheXVpLWhpZGUnKTsKICAgICAgICAgICAgfQogICAgICAgIH0pOwogICAgfQoKICAgICQoJ1tob3ZlclNob3ddJykuaG92ZXIoZnVuY3Rpb24oKSB7CiAgICAgICAgdmFyIGVsZW1lbnQgPSAkKHRoaX&
1#77;pLmF0dHIoJ2hvdmVyU2hvd0JpbmQnKTsKICAgICAgICBpZiAoIWVsZW1lbnQpIHsKICAgICAgICAgICAgJCh0aGlzKS5hZGRDbGFzcygnaG92ZXJBY3RpdmUnKS5maW5kKCcubGF5dWktaGlkZScpLmVhY2goZnVuY3Rpb24oaSwgZG9tKSB7CiAgICAgICAgICAgICAgICAkKGRvbSkuYWRkQ2xhc3MoJChkb20pLmF0dHIoJ2FuaW1hdGVkJykpOwogICAgICAgICAgICB9KTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkKCdbaG92ZXJTaG93QmluZEZpbHRlcj0iJyArIGVsZW1lbnQgKyAnIl0nKS5yZW1vdmVDbGFzcygnbGF5dWktaGlkZScpOwogICAgICAgIH0KICAgICAgICB2YXIgdG9nZ2xlID0gJCh0aGlzKS5hdHRyKCdob3ZlclNob3dUb2dnbGVCaW5kJyk7CiAgICAgICAgaWYgKHRvZ2dsZSkgewogICAgICAgICAgICAkKCdbaG92ZXJTaG93VG9nZ2xlRmlsdGVyPSInICsgdG9nZ2xlICsgJyJdJykuYWRkQ2xhc3MoJ2xheXVpLWhpZGUnKTsKICAgICAgICB9CiAgICB9KTsKICAgICQoJ1tub0hvdmVySGlkZV0nKS5ob3ZlcihmdW5jdGlvbigpIHt9LCBmdW5jdGlvbigpIHsKICAgICAgICB2YXIgZWxlbWVudCA9ICQodGhpcykuYXR0cignbm9Ib3ZlckhpZGVCaW5kJyk7CiAgICAgICAgaWYgKCFlbGVtZW50KSB7CiAgICAgICAgICAgICQodGhpcykucmVtb3ZlQ2xhc3MoJ2hvdmVyQWN0aXZlJyk7CiAgICAgICAgICAgICQodGhpcykubm90KCdbaG92ZXJTaG93XScpLmFkZENsYXNzKCdsYXl1aS1oaWRlJyk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJCgnW25vSG92ZXJIaWRlQmluZEZpbHRlcj0iJyArIGVsZW1lbnQgKyAnIl0nKS5hZGRDbGFzcygnbGF5dWktaGlkZScpOwogICAgICAgIH0KICAgICAgICB2YXIgdG9nZ2xlID0gJCh0aGlzKS5hdHRyKCdob3ZlclNob3dUb2dnbGVCaW5kJyk7CiAgICAgICAgaWYgKHRvZ2dsZSkgewogICAgICAgICAgICAkKCdbaG92ZXJTaG93VG9nZ2xlRmlsdGVyPSInICsgdG9nZ2xlICsgJyJdJykucmVtb3ZlQ2xhc3MoJ2xheXVpLWhpZGUnKTsKICAgICAgICB9CiAgICB9KTsKICAgIC8qKioqKioqKioqaG92ZXJTaG93IC8gbm9Ib3ZlckhpZGUgZW5kKioqKioqKioqKi8KCiAgICAvKioqKioqKioqKmhvdmVySGlkZSAvIG5vSG92ZXJTaG93IGJlZ2luKioqKioqKioqKi8KICAgICQoJ1tob3ZlckhpZGVdJykuaG92ZXIoZnVuY3Rpb24oKSB7CiAgICAgICAgJCh0aGlzKS5yZW1vdmVDbGFzcygnaG92ZXJBY3RpdmUnKQogICAgfSk7CiAgICAkKCdbbm9Ib3ZlclNob3ddJykuaG92ZXIoZnVuY3Rpb24oKSB7fSwgZnVuY3Rpb24oKSB7CiAgICAgICAgJCh0aGlzKS5hZGRDbGFzcygnaG92ZXJBY3RpdmUnKTsKICAgIH0pOwogICAgLyoqKioqKioqKipob3ZlclNob3cgLyBub0hvdmVySGlkZSBlbmQqKioqKioqKioqLwoKICAgIC8qKioqKioqKioqaW1nVG9nZ2xlIGJlZ2luKioqKioqKioqKi8KICAgICQoJ1tpbWdTcmNUb2dnbGVdJykuaG92ZXIoZnVuY3Rpb24oKSB7CiAgICAgICAgdmFyIGhvdmVySW1nID0gJCh0aGlzKS5hdHRyKCdob3ZlckltZycpOwogICAgICAgICQodGhpcykuYXR0cignc3JjJywgaG92ZXJJbWcpOwogICAgfSxmdW5jdGlvbigpewogICAgICAgIHZhciBub0hvdmVySW1nID0gJCh0aGlzKS5hdHRyKCdub0hvdmVySW1nJyk7CiAgICAgICAgJCh0aGlzKS5hdHRyKCdzcmMnLCBub0hvdmVySW1nKTsKICAgIH0pOwogICAgLyoqKioqKioqKippbWdUb2dnbGUgZW5kKioqKioqKioqKi8KCiAgICAvKioqKioqKioqKmNsaWNrU2hvdyBiZWdpbioqKioqKioqKiovCiAgICAkKCdbY2xpY2tTaG93XScpLmNsaWNrKGZ1bmN0aW9uKCkgewogICAgICAgIHZhciBlbGVtZW50ID0gJCh0aGlzKS5hdHRyKCdjbGlja1Nob3dCaW5kJyk7CiAgICAgICAgdmFyIGFuaW1hdGVkID0gJCh0aGlzKS5hdHRyKCdhbmltYXRlZCcpOwogICAgICAgICQodGhpcykuYWRkQ2xhc3MoJ2FjdGl2ZScpOwogICAgICAgIGlmIChlbGVtZW50KSB7CiAgICAgICAgICAgICQoJ1tjbGlja1Nob3dCaW5kRmlsdGVyPSInICsgZWxlbWVudCArICciXScpLnJlbW92ZUNsYXNzKCdsYXl1aS1oaWRlJykuYWRkQ2xhc3MoYW5pbWF0ZWQpOwogICAgICAgIH0KICAgIH0pOwogICAgLyoqKioqKioqKipjbGlja1Nob3cgZW5kKioqKioqKioqKi8KCiAgICAvKioqKioqKioqKmNsaWNrVG9nZ2xlIGJlZ2luKioqKioqKioqKi8KICAgICQoJ1tjbGlja1RvZ2dsZV0nKS5jbGljayhmdW5jdGlvbigpIHsKICAgICAgICB2YXIgZWxlbWVudCA9ICQodGhpcykuYXR0cignY2xpY2tUb2dnbGVCaW5kJy&#
1107;7CiAgICAgICAgdmFyIGFuaW1hdGVkID0gJCh0aGlzKS5hdHRyKCdhbmltYXRlZCcpOwogICAgICAgICQodGhpcykudG9nZ2xlQ2xhc3MoJ2FjdGl2ZScpOwogICAgICAgIGlmIChlbGVtZW50KSB7CiAgICAgICAgICAgICQoJ1tjbGlja1RvZ2dsZUJpbmRGaWx0ZXI9IicgKyBlbGVtZW50ICsgJyJdJykudG9nZ2xlQ2xhc3MoJ2xheXVpLWhpZGUnKS5hZGRDbGFzcyhhbmltYXRlZCk7CiAgICAgICAgfQogICAgfSk7CiAgICAvKioqKioqKioqKmNsaWNrVG9nZ2xlIGVuZCoqKioqKioqKiovCgogICAgLyoqKioqKioqKipjbGlja0hpZGUgYmVnaW4qKioqKioqKioqLwogICAgJCgnW2NsaWNrSGlkZV0nKS5jbGljayhmdW5jdGlvbigpIHsKICAgICAgICB2YXIgZWxlbWVudCA9ICQodGhpcykuYXR0cignY2xpY2tIaWRlQmluZCcpOwogICAgICAgIGlmIChlbGVtZW50KSB7CiAgICAgICAgICAgICQoJ1tjbGlja0hpZGVCaW5kRmlsdGVyPSInICsgZWxlbWVudCArICciXScpLmFkZENsYXNzKCdsYXl1aS1oaWRlJyk7CiAgICAgICAgfQogICAgfSk7CiAgICAvKioqKioqKioqKmNsaWNrSGlkZSBlbmQqKioqKioqKioqLwoKICAgIC8qKioqKioqKioqdGFiU2hvdyBiZWdpbioqKioqKioqKiovCiAgICAkKCdbdGFiU2hvd10gPiAqJykubm90KCQoJ1tub1RhYl0nKSkuYmluZChpb3NfZGV2aWNlcywgZnVuY3Rpb24oKSB7CiAgICAgICAgdmFyIGVsZW1lbnQgPSAkKHRoaXMpLnBhcmVudCgpLmF0dHIoJ3RhYlNob3dCaW5kJyk7CiAgICAgICAgdmFyIGFuaW1hdGVkID0gJCh0aGlzKS5wYXJlbnQoKS5hdHRyKCdhbmltYXRlZCcpOwogICAgICAgICQodGhpcykuYWRkQ2xhc3MoJ2FjdGl2ZScpLnNpYmxpbmdzKCkucmVtb3ZlQ2xhc3MoJ2FjdGl2ZScpOwogICAgICAgIHZhciBpbmRleCA9ICQodGhpcykuaW5kZXgoKTsKICAgICAgICBpZiAoZWxlbWVudCkgewogICAgICAgICAgICAkKCdbdGFiU2hvd0JpbmRGaWx0ZXI9IicgKyBlbGVtZW50ICsgJyJdJykuZWFjaChmdW5jdGlvbigpewogICAgICAgICAgICAgICAgJCh0aGlzKS5jaGlsZHJlbigpLmVxKGluZGV4KS5yZW1vdmVDbGFzcygnbGF5dWktaGlkZScpLmFkZENsYXNzKGFuaW1hdGVkKS5zaWJsaW5ncygpLmFkZENsYXNzKCdsYXl1aS1oaWRlJyk7CiAgICAgICAgICAgIH0pOwogICAgICAgIH0KICAgIH0pOwogICAgLyoqKioqKioqKip0YWJTaG93IGVuZCoqKioqKioqKiovCgogICAgLyoqKioqKioqKip0YWJTaG93SG92ZXIgaG92ZXIgYmVnaW4qKioqKioqKioqLwogICAgJCgnW3RhYlNob3dIb3Zlcl0gPiAqJykubm90KCQoJ1tub1RhYl0nKSkuaG92ZXIoZnVuY3Rpb24oKSB7CiAgICAgICAgdmFyIGVsZW1lbnQgPSAkKHRoaXMpLnBhcmVudCgpLmF0dHIoJ3RhYlNob3dIb3ZlckJpbmQnKTsKICAgICAgICB2YXIgYW5pbWF0ZWQgPSAkKHRoaXMpLnBhcmVudCgpLmF0dHIoJ2FuaW1hdGVkJyk7CiAgICAgICAgJCh0aGlzKS5hZGRDbGFzcygnaG92ZXJBY3RpdmUnKS5zaWJsaW5ncygpLnJlbW92ZUNsYXNzKCdob3ZlckFjdGl2ZScpOwogICAgICAgIHZhciBpbmRleCA9ICQodGhpcykuaW5kZXgoKTsKICAgICAgICBpZiAoZWxlbWVudCkgewogICAgICAgICAgICAkKCdbdGFiU2hvd0hvdmVyQmluZEZpbHRlcj0iJyArIGVsZW1lbnQgKyAnIl0nKS5lYWNoKGZ1bmN0aW9uKCl7CiAgICAgICAgICAgICAgICAkKHRoaXMpLmNoaWxkcmVuKCkuZXEoaW5kZXgpLnJlbW92ZUNsYXNzKCdsYXl1aS1oaWRlJykuYWRkQ2xhc3MoYW5pbWF0ZWQpLnNpYmxpbmdzKCkuYWRkQ2xhc3MoJ2xheXVpLWhpZGUnKTsKICAgICAgICAgICAgfSk7CiAgICAgICAgfQogICAgfSk7CiAgICAvKioqKioqKioqKnRhYlNob3cgaG92ZXIgZW5kKioqKioqKioqKi8KCiAgICAvKioqKioqKioqKiB0YWLliIfmjaIgc3RhcnQgKioqKioqKioqKioqKi8KICAgICQoIipbdGFibmFtZV49J3Byb19tZW51X3MnXSIpLmNsaWNrKGZ1bmN0aW9uKCl7CgogICAgICAgICQodGhpcykuYWRkQ2xhc3MoImFjdGl2ZSIpLnNpYmxpbmdzKCkucmVtb3ZlQ2xhc3MoJ2FjdGl2ZScpOwoKICAgICAgICB2YXIgaW5kZXggPSAkKHRoaXMpLmluZGV4KCkgKyAxOwoKICAgICAgICAkKCIqW3RhYmJveF49J3Byb19zaG93X2JveCddIikuaGlkZSgpLmFkZENsYXNzKCdsYXl1aS1oaWRlJyk7CgogICAgICAgICQoIipbdGFiYm94PSdwcm9fc2hvd19ib3giK2luZGV4KyInXSIpLnNob3coKS5yZW1vdmVDbGFzcygnbGF5dWktaGlkZScpOwoKICAgIH0pOwogICAgLyoqKioqKioqKiogdGFiIGVuZCAqKioqKioqKioqKi
1oqLwp9KTsKCgoKZnVuY3Rpb24gYWRkQ29va2llKG9iak5hbWUsIG9ialZhbHVlLCBvYmpIb3VycykgeyAvL+a3u+WKoGNvb2tpZQogICAgdmFyIHN0ciA9IG9iak5hbWUgKyAiPSIgKyBlc2NhcGUob2JqVmFsdWUpOwogICAgaWYgKG9iakhvdXJzID4gMCkgeyAvL+S4uuaXtuS4jeiuvuWumui/h+acn+aXtumXtO+8jOa1j+iniOWZqOWFs+mXreaXtmNvb2tpZeiHquWKqOa2iOWksQogICAgICAgIHZhciBkYXRlID0gbmV3IERhdGUoKTsKICAgICAgICB2YXIgbXMgPSBvYmpIb3VycyAqIDM2MDAgKiAxMDAwOwogICAgICAgIGRhdGUuc2V0VGltZShkYXRlLmdldFRpbWUoKSArIG1zKTsKICAgICAgICBzdHIgKz0gIjsgZXhwaXJlcz0iICsgZGF0ZS50b0dNVFN0cmluZygpOwogICAgfQogICAgZG9jdW1lbnQuY29va2llID0gc3RyICsgIjtwYXRoPS8iOwp9CgpmdW5jdGlvbiBkZWxDb29raWUobmFtZSkgeyAvL+WIoOmZpGNvb2tpZQogICAgZG9jdW1lbnQuY29va2llID0gbmFtZSArICI9O2V4cGlyZXM9IiArIChuZXcgRGF0ZSgwKSkudG9HTVRTdHJpbmcoKSArICI7cGF0aD0vIjsKfQoKZnVuY3Rpb24gZ2V0Q29va2llKG9iak5hbWUpIHsgLy/ojrflj5bmjIflrprlkI3np7DnmoRjb29raWXnmoTlgLwKICAgIHZhciBhcnJTdHIgPSBkb2N1bWVudC5jb29raWUuc3BsaXQoIjsgIik7CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyclN0ci5sZW5ndGg7IGkrKykgewogICAgICAgIHZhciB0ZW1wID0gYXJyU3RyW2ldLnNwbGl0KCI9Iik7CiAgICAgICAgaWYgKHRlbXBbMF0gPT0gb2JqTmFtZSkKICAgICAgICAgICAgcmV0dXJuIHVuZXNjYXBlKHRlbXBbMV0pOwogICAgfQp9CgoKZnVuY3Rpb24gY291bnRTZWNvbmQoZWxlLCB0aW1lLCB0eHQpIHsKICAgIGVsZS5wcm9wKCdkaXNhYmxlZCcsIHRydWUpLmFkZENsYXNzKCdsYXl1aS1idG4tZGlzYWJsZWQnKTsKICAgIHQgPSBzZXRJbnRlcnZhbChmdW5jdGlvbigpIHsKICAgICAgICBpZiAodGltZSA8PSAwKSB7CiAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwodCk7CiAgICAgICAgICAgIGVsZS5yZW1vdmVQcm9wKCdkaXNhYmxlZCcpLmh0bWwodHh0KS5yZW1vdmVDbGFzcygnbGF5dWktYnRuLWRpc2FibGVkJyk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgZWxlLmh0bWwodHh0ICsgJygnICsgdGltZSArICdzKScpOwogICAgICAgIC0tdGltZTsKICAgIH0sIDEwMDApOwp9CgoKZnVuY3Rpb24gQ2hlY2tEYXRhKGRvbSwgc3RyVGl0bGUsIHN0cklucHV0LCBzdHJUeXBlLCBibE5lZWQpIHsgLy9qc+ato+WImeWIpOaWrQogICAgc3dpdGNoIChzdHJUeXBlKSB7CiAgICAgICAgY2FzZSAicG5hbWUiOgogICAgICAgICAgICB2YXIgcGF0dGVybiA9IC9eLnsyLDIwMH0kLzsKICAgICAgICAgICAgdmFyIG1zZyA9IHN0clRpdGxlICsgIuW/hemhuzLkvY3ku6XkuIrlrZfnrKbvvIEiOwogICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJlbWFpbCI6CiAgICAgICAgICAgIHZhciBwYXR0ZXJuID0gL15bYS16QS1aMC05X1wtXC5dK0AoW2EtekEtWjAtOVwtXStcLikrW2EtekEtWl17Miw1fSQvOwogICAgICAgICAgICB2YXIgbXNnID0gc3RyVGl0bGUgKyAi5qC85byP6ZSZ6K+v7
17yBIjsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAicGhvbmUiOgogICAgICAgICAgICB2YXIgcGF0dGVybiA9IC9eMVxkezEwfSQvOwogICAgICAgICAgICB2YXIgbXNnID0gc3RyVGl0bGUgKyAi5qC85byP6ZSZ6K+v77yBIjsKICAgICAgICAgICAgYnJlYWs7CiAgICB9CgogICAgc3RySW5wdXQgPSBzdHJJbnB1dC5yZXBsYWNlKC8oXlxzKil8KFxzKiQpL2csICIiKTsKICAgIGlmICgoc3RySW5wdXQgPT0gIiIpICYmIGJsTmVlZCkgewogICAgICAgIGxheXVpLmxheWVyLnRpcHMoc3RyVGl0bGUgKyAi5LiN6IO95Li656m677yBIiwgZG9tLCB7IHRpcHM6IDEgfSk7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAgIGlmIChzdHJJbnB1dCAhPSAiIikgewogICAgICAgIHZhciByZXN1bHQgPSBzdHJJbnB1dC5tYXRjaChwYXR0ZXJuKTsKICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpIHsKICAgICAgICAgICAgbGF5dWkubGF5ZXIudGlwcyhtc2csIGRvbSwgeyB0aXBzOiAxIH0pOwogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuIHRydWU7Cn0KCmZ1bmN0aW9uIGNoZWNrVHlwZShzdHJJbnB1dCwgc3RyVHlwZSkgeyAvL+i+k+WFpeWGheWuueexu+WeiwogICAgdmFyIGZsYWcgPSBmYWxzZTsKCiAgICBzd2l0Y2ggKHN0clR5cGUpIHsKICAgICAgICBjYXNlICJjb21wYW55IjoKICAgICAgICAgICAgdmFyIHBhdHRlcm4gPSAvW+WOgnzlhazlj7h86ZuG5ZuiXSsvOwogICAgICAgICAgICBicmVhazsKICAgIH0KCiAgICBpZiAoc3RySW5wdXQgIT0gIiIpIHsKICAgICAgICB2YXIgcmVzdWx0ID0gc3RySW5wdXQubWF0Y2gocGF0dGVybik7CiAgICAgICAgaWYgKHJlc3VsdCAhPSBudWxsKSB7CiAgICAgICAgICAgIGZsYWcgPSB0cnVlOwogICAgICAgIH0KICAgIH0KICAgIHJldHVybiBmbGFnOwp9CgoKZnVuY3Rpb24gc2VhcmNoVXJsKGlkKSB7CiAgICB2YXIgcmVnID0gL14oXHMqKSQvZzsKICAgIGlmIChyZWcudGVzdChkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkudmFsdWUpKXsKICAgICAgICB2YXIgcmVzID0gJ1wnXCcnOwogICAgICAgIGxheWVyLnRpcHMoJ+aQnOe0ouWGheWuueS4jeiDveS4uuepuicsICcjJysgaWQsIHt0aW1lOjEwMDB9KTsKICAgIH0KICAgIGVsc2V7CiAgICAgICAgcmVzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpLnZhbHVlOwogICAgICAgIHdpbmRvdy5sb2NhdGlvbi5maXhfaHJlZiA9ICcvLycgKyBsb2NhdGlvbi5ob3N0bmFtZSArICcvYmlhb3FpYW4vJyArIHJlczsKICAgIH0KICAgIGNvbnNvbGUubG9nKCcvLycgKyBsb2NhdGlvbi5ob3N0bmFtZSArICcvYmlhb3FpYW4vJyArIHJlcyk7Cn0KCi8qMjAyMDA4MTkqLwovL2tleWRvd24KLy9rZXlwcmVzcwokKCcjc2VhcmNoVmFsdWVJZCcpLmtleXByZXNzKGZ1bmN0aW9uIChldmVudCkgewogICAgaWYgKGV2ZW50LmtleUNvZGUgPT0gMTMpIHsKICAgICAgICAkKHRoaXMpLmNsb3Nlc3QoJ2RpdicpLmZpbmQoJy5zZWFyY2hCdXR0b20nKS50cmlnZ2VySGFuZGxlcignY2xpY2snKTsKICAgIH0KfSk7CiQoJyNzZWFyY2hWYWx1ZU1lbnUnKS5rZXlwcmVzcyhmdW5jdGlvbiAoZXZlbnQpIHsKICAgIGlmIChldmVudC5rZXlDb2RlID09IDEzKSB7CiAgICAgICAgJCh0aGlzKS5jbG9zZXN0KCdkaXYnKS5maW5kKCcuc2VhcmNoQnV0dG9tJykudHJpZ2dlckhhbmRsZXIoJ2NsaWNrJyk7CiAgICB9Cn0pOwokKCcjc2VhcmNoU3VwcG9ydCcpLmtleXByZXNzKGZ1bmN0aW9uIChldmVudCkgewogICAgaWYgKGV2ZW50LmtleUNvZGUgPT0gMTMpIHsKICAgICAgICAkKHRoaXMpLmNsb3Nlc3QoJ2RpdicpLmZpbmQoJyNzZWFyY2hTdXBwb3J0QnRuJykudHJpZ2dlckhhbmRsZXIoJ2NsaWNrJyk7CiAgICB9Cn0pOwoKLyrmkq3mlL7op4bpopHlvLnnqpcqLwpmdW5jdGlvbiBtb2RhbFZpZGVvKHZpZGVvVXJsLCB3aWR0aCwgaGVpZ2h0KSB7CgogICAgLy9jb25zb2xlLmxvZygndmlkZW9Vcmw6Jyt2aWRlb1VybCk7CgogICAgLy93aW5kb3cub3BlbiAodmlkZW9VcmwpOwogICAgCiAgICBpZiAoIXdpZHRoKSB7IHdpZHRoID0gJzgwMHB4JzsgfQogICAgaWYgKCFoZWlnaHQpIHsgaGVpZ2h0ID0gJzYwMHB4JzsgfQogICAgdmFyIHcgPSAkKHdpbmRvdykud2lkdGgoKTsKICAgIGlmKHcgPD03NjcpewogICAgICAgIHdpZHRoID0gJzkwJSc7CiAgICAgICAgaGVpZ2h0ID0gKCQod2luZG93KS5oZWlnaHQoKSAtIDQwKSArICdweCc7CiAgICB9CiAgICBsYXl1aS5sYXllci5vcGVuKHsKICAgIC
1AgICB0eXBlOiAyLAogICAgICAgIHRpdGxlOiBmYWxzZSwKICAgICAgICBhcmVhOiBbd2lkdGgsIGhlaWdodF0sCiAgICAgICAgc2hhZGU6IDAuOCwKICAgICAgICBjbG9zZUJ0bjogMSwKICAgICAgICBzaGFkZUNsb3NlOiBmYWxzZSwKICAgICAgICBjb250ZW50OiB2aWRlb1VybCwKICAgIH0pOwp9CgovKuiHquWumuW8ueeqlyovCmZ1bmN0aW9uIG1vZGFsQWpheCh1cmwsIGdvb2RzaWQsIHdpZHRoLCBoZWlnaHQpIHsKICAgIGlmICghd2lkdGgpIHsgd2lkdGggPSAnODAwcHgnOyB9CiAgICBpZiAoIWhlaWdodCkgeyBoZWlnaHQgPSAnNTMwcHgnOyB9CiAgICB2YXIgdyA9ICQod2luZG93KS53aWR0aCgpOwogICAgaWYgKHcgPD0gNzY3KSB7CiAgICAgICAgd2lkdGggPSAnOTAlJzsKICAgICAgICBoZWlnaHQgPSAoJCh3aW5kb3cpLmhlaWdodCgpIC0gNDApICsgJ3B4JzsKICAgIH0KICAgIGxheXVpLmxheWVyLm9wZW4oewogICAgICAgIHR5cGU6IDIsCiAgICAgICAgY29udGVudDogdXJsICsgJz9nb29kc2lkPScgKyBnb29kc2lkLAogICAgICAgIGFyZWE6IFt3aWR0aCwgaGVpZ2h0XSwKICAgICAgICB0aXRsZTogZmFsc2UsCiAgICB9KTsKfQoKLyog5Zu+54mH5by556qXICovCmZ1bmN0aW9uIG1vZGVsUGljKHVybCAsIHdpZHRoICwgaGVpZ2h0KXsKICAgIGlmICghd2lkdGgpIHsgd2lkdGggPSAnODAwcHgnOyB9CiAgICBpZiAoIWhlaWdodCkgeyBoZWlnaHQgPSAnNTMwcHgnOyB9CiAgICB2YXIgdyA9ICQod2luZG93KS53aWR0aCgpOwogICAgaWYgKHcgPD0gNzY3KSB7CiAgICAgICAgd2lkdGggPSAnOTAlJzsKICAgICAgICBoZWlnaHQgPSAoJCh3aW5kb3cpLmhlaWdodCgpIC0gNDApICsgJ3B4JzsKICAgIH0KICAgIGxheWVyLm9wZW4oewogICAgICAgIHR5cGU6IDEsCiAgICAgICAgdGl0bGU6IGZhbHNlLAogICAgICAgIGNsb3NlQnRuOiAxLAogICAgICAgIHNoYWRlQ2xvc2U6IHRydWUsCiAgICAgICAgYXJlYTogW3dpZHRoICsgJ3B4JywgaGVpZ2h0ICsgJ3B4J10sIC8v5a696auYCiAgICAgICAgY29udGVudDogIjxpbWcgc3JjPSIgKyB1cmwgKyAiIC8+IgogICAgIH0pOwp9CgovLyDliKTmlq3mmK/kuI3mmK/np7vliqjnq68KZnVuY3Rpb24gaXNQaG9uZSgpIHsKICAgIGlmKC8ocGhvbmV8cGFkfHBvZHxpUGhvbmV8aVBvZHxpb3N8aVBhZHxhbmRyb2lkfE1vYmlsZXxCbGFja0JlcnJ5fElFTW9iaWxlfE1RUUJyb3dzZXJ8SlVDfEZlbm5lY3x3T1NCcm93c2VyfEJyb3dzZXJOR3xXZWJPU3xTeW1iaWFufFdpbmRvd3MgUGhvbmUpL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSl7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9ZWxzZXsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9Cn0KCi8vIOWIpOaWreaYr+S4jeaYr0lFCmZ1bmN0aW9uIGlzSUUoKSB7CiAgICBpZiAoISF3aW5kb3cuQWN0aXZlWE9iamVjdCB8fCAiQWN0aXZlWE9iamVjdCIgaW4gd2luZG93KSB7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9IGVsc2UgewogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KfQoKLy8gYWpheApmdW5jdGlvbiBmdW5BamF4KHVybCxwYXJhbSl7CiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSxyZWplY3QpewogICAgICAgICQuYWpheCh7CiAgICAgICAgICAgIHVybDogdXJsLAogICAgICAgICAgICB0eXBlOiAnUE9TVCcsCiAgICAgICAgICAgIGRhdGE6IHBhcmFtLAogICAgICAgICAgICB4aHJGaWVsZHM6IHsKICAgICAgICAgICAgICAgIHdpdGhDcmVkZW50aWFsczp0cnVlCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uKHJlcyl7CiAgICAgICAgICAgICAgICBpZihyZXMuY29kZSA9PSAyMDAgfHwgcmVzID09IDEpewogICAgICAgICAgICAgICAgICAgIHJlc29sdmUocmVzKTsKICAgICAgICAgICAgICAgIH1lbHNlewogICAgICAgICAgICAgICAgICAgIHJlamVjdChyZXMpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICBlcnJvcjogZnVuY3Rpb24oZXJyKXsKICAgICAgICAgICAgICAgIHJlamVjdChlcnIpOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICB9KTsKfQoKLy8g5pe26Ze05qC85byP5YyWCkRhdGUucHJvdG90eXBlLkZvcm1hdCA9IGZ1bmN0aW9uKGZtdCl7ICAgCiAgICB2YXIgbyA9IHsKICAgICAgICAiTSsiOiB0aGlzLmdldE1vbnRoKCkgKyAxLCAvL+aciOS7vQogICAgICAgICJkKyI6IHRoaXMuZ2V0RGF0ZSgpLCAvL+aXpQogICAgICAgICJoKyI6IHRoaXMuZ2V0SG91cnMoKSwgLy/lsI/ml7YKICAgICAgICA&
1#105;bSsiOiB0aGlzLmdldE1pbnV0ZXMoKSwgLy/liIYKICAgICAgICAicysiOiB0aGlzLmdldFNlY29uZHMoKSwgLy/np5IKICAgICAgICAicSsiOiBNYXRoLmZsb29yKCh0aGlzLmdldE1vbnRoKCkgKyAzKSAvIDMpLCAvL+Wto+W6pgogICAgICAgICJTIjogdGhpcy5nZXRNaWxsaXNlY29uZHMoKSAvL+avq+enkgogICAgfTsKICAgIGlmICgvKHkrKS8udGVzdChmbXQpKSBmbXQgPSBmbXQucmVwbGFjZShSZWdFeHAuJDEsICh0aGlzLmdldEZ1bGxZZWFyKCkgKyAiIikuc3Vic3RyKDQgLSBSZWdFeHAuJDEubGVuZ3RoKSk7CiAgICBmb3IgKHZhciBrIGluIG8pCiAgICAgICAgaWYgKG5ldyBSZWdFeHAoIigiICsgayArICIpIikudGVzdChmbXQpKSBmbXQgPSBmbXQucmVwbGFjZShSZWdFeHAuJDEsIChSZWdFeHAuJDEubGVuZ3RoID09IDEpID8gKG9ba10pIDogKCgiMDAiICsgb1trXSkuc3Vic3RyKCgiIiArIG9ba10pLmxlbmd0aCkpKTsKICAgIHJldHVybiBmbXQ7IAp9ICAgCgokKGZ1bmN0aW9uKCkgewogICAgdmFyIGZsYWcgPSBmYWxzZTsKCiAgICBpZigkKCcjZG93bmxvYWRfMV8wIC5jb250ZW50X2Zvcm0gI2Zvcm0nKS5sZW5ndGg+MCl7CiAgICAgICAgJCgnI2Rvd25sb2FkXzFfMCAuY29udGVudF9mb3JtICNmb3JtJykuYXBwZW5kKCc8ZGl2IGlkPSJjYXB0Y2hhIj48L2Rpdj4nKTsgCiAgICAgICAgZmxhZyA9IHRydWU7ICAgICAgCiAgICB9CiAgICBpZigkKCcjYXBwbHlidXlfMV8wIC5jb250ZW50X2Zvcm0gI2Zvcm0nKS5sZW5ndGg+MCl7CiAgICAgICAgJCgnI2FwcGx5YnV5XzFfMCAuY29udGVudF9mb3JtICNmb3JtJykuYXBwZW5kKCc8ZGl2IGlkPSJjYXB0Y2hhIj48L2Rpdj4nKTsgIAogICAgICAgIGZsYWcgPSB0cnVlOwogICAgfQogICAgaWYoJCgnI2Rvd25sb2FkYm94YmQgI2luZm9Gb3JtJykubGVuZ3RoPjApewogICAgICAgICQoJyNkb3dubG9hZGJveGJkICNpbmZvRm9ybScpLmFwcGVuZCgnPGRpdiBpZD0iY2FwdGNoYSI+PC9kaXY+Jyk7ICAKICAgICAgICBmbGFnID0gdHJ1ZTsKICAgIH0KICAgIGlmKCQoJyNyZXNlcnZlXzFfMCAuY29udGVudF9mb3JtICNmb3JtJykubGVuZ3RoPjApewogICAgICAgICQoJyNyZXNlcnZlXzFfMCAuY29udGVudF9mb3JtICNmb3JtJykuYXBwZW5kKCc8ZGl2IGlkPSJjYXB0Y2hhIj48L2Rpdj4nKTsgIAogICAgICAgIGZsYWcgPSB0cnVlOwogICAgfQoKICAgIGlmKCQoJy5jaGVtb2ZmaWNlX2dldGNvZGUnKS5sZW5ndGg+MCB8fCAkKCcuY2hlbW9mZmljZV9nZXRjb2RlX21vYmlsZScpLmxlbmd0aD4wIHx8ICQoJy5nb25neWlfZ2V0Y29kZScpLmxlbmd0aD4wIHx8ICQoJy5nb25neWlfZ2V0Y29kZV9tb2JpbGUnKS5sZW5ndGg+MCl7CiAgICAgICAgZmxhZyA9IHRydWU7CiAgICB9CiAgICAKICAgIGlmKGZsYWcpewogICAgICAgIHZhciBjYXB0Y2hhSW5zOwogICAgICAgIHZhciBjYXB0Y2hhSWQgPSAnNTM2ZWE5YmVhM2FhNDVjYzkwYjIzMGMwYWE1OTRmOTAnOwogICAgICAgIGluaXRORUNhcHRjaGEoewogICAgICAgICAgICBlbGVtZW50OiAnI2NhcHRjaGEnLAogICAgICAgICAgICBjYXB0Y2hhSWQ6IGNhcHRjaGFJZCwKICAgICAgICAgICAgbW9kZTogJ2JpbmQnLAogICAgICAgICAgICBvblZlcmlmeTogZnVuY3Rpb24oZXJyKXsKICAgICAgICAgICAgICAgIC8vIHRvZG8KICAgICAgICAgICAgICAgIGlmKCFlcnIpewogICAgICAgICAgICAgICAgICAgIHl6bW1vYmlsZXNlbmRzKGNhcHRjaGFJbnMucGhvbmVOdW1iZXIpOwogICAgICAgICAgICAgICAgICAgIGNhcHRjaGFJbnMgJiYgY2FwdGNoYUlucy5yZWZyZXNoKCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9LCBmdW5jdGlvbihpbnN0YW5jZSl7CiAgICAgICAgICAgIGNhcHRjaGFJbnMgPSBpbnN0YW5jZQogICAgICAgIH0sIGZ1bmN0aW9uKGVycil7CiAgICAgICAgICAgIC8vZXJyCiAgICAgICAgICAgIGNvbnNvbGUubG9nKGVycik7CiAgICAgICAgfSk7CgogICAgICAgIC8v5Y+R6YCB6aqM6K+B56CBCiAgICAgICAgJCgiI3l6bUJ0biwueXpt
1QnRuX3dlYiIpLmNsaWNrKGZ1bmN0aW9uKCkgewogICAgICAgICAgICBpZigkKHRoaXMpLmhhc0NsYXNzKCJnY19jaGVtb2ZmaWNlX3l6bUJ0biIpKXsKICAgICAgICAgICAgICAgIHZhciBtb2JpbGUgPSAkKCcjZ2NfbW9iaWxlJykudmFsKCk7CiAgICAgICAgICAgIH1lbHNlewogICAgICAgICAgICAgICAgdmFyIG1vYmlsZSA9ICQoJ1tuYW1lPSJ1c2VyX21vYmlsZSJdJykudmFsKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYoISgvKDFbMS05XVxkezl9JCkvLnRlc3QobW9iaWxlKSkpewogICAgICAgICAgICAgICAgbGF5ZXIubXNnKCfor7fovpPlhaXmraPnoa7nmoTogZTns7vnlLXor53vvIEnKTsKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQogICAgICAgICAgICBjYXB0Y2hhSW5zICYmIGNhcHRjaGFJbnMudmVyaWZ5KCk7Ly8g5omL5Yqo6LCD55SodmVyaWZ55pa55rOVCiAgICAgICAgICAgIGNhcHRjaGFJbnMucGhvbmVOdW1iZXIgPSBtb2JpbGU7CiAgICAgICAgfSk7CgogICAgfQoKICAgIGZ1bmN0aW9uIHl6bW1vYmlsZXNlbmRzKHBob25lTnVtYmVyKXsKICAgICAgICB2YXIgbG9hZGluZyA9IGxheWVyLmxvYWQoKTsKICAgICAgICAvL3ZhciBwaG9uZU51bWJlciA9ICQoJ1tuYW1lPSJ1c2VyX21vYmlsZSJdJykudmFsKCk7CiAgICAgICAgdmFyIHJlZyA9IC8oMVsxLTldXGR7OX0kKS87CiAgICAgICAgLy8gaWYoISgvKDFbMS05XVxkezl9JCkvLnRlc3QocGhvbmVOdW1iZXIpKSl7CiAgICAgICAgLy8gICAgIGxheWVyLm1zZygn6K+36L6T5YWl5q2j56Gu55qE6IGU57O755S16K+d7
17yBJyk7CiAgICAgICAgLy8gICAgIHJldHVybjsKICAgICAgICAvLyB9CgogICAgICAgIC8vIGNhcHRjaGFJbnMgJiYgY2FwdGNoYUlucy52ZXJpZnkoKTsgLy8g5omL5Yqo6LCD55SodmVyaWZ55pa55rOVCiAgICAgICAgdmFyIE5FQ2FwdGNoYVZhbGlkYXRlID0gJCgiI2NhcHRjaGEiKS5maW5kKCJpbnB1dFtuYW1lPSdORUNhcHRjaGFWYWxpZGF0ZSddIikudmFsKCk7CiAgICAgICAgdmFyIGRhdGFzID0ge21vYmlsZTpwaG9uZU51bWJlcixjYXB0Y2hhSWQ6Y2FwdGNoYUlkLE5FQ2FwdGNoYVZhbGlkYXRlOk5FQ2FwdGNoYVZhbGlkYXRlfTsKICAgICAgICAkLmFqYXgoewogICAgICAgICAgICB1cmw6IGFwaWhvc3QrJy9Zem0vbW9iaWxlc2VuZHMnLAogICAgICAgICAgICBtZXRob2Q6ICdwb3N0JywKICAgICAgICAgICAgZGF0YTogZGF0YXMsCiAgICAgICAgICAgIHhockZpZWxkczoge3dpdGhDcmVkZW50aWFsczogdHJ1ZX0sCiAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uKGRhdGEpewogICAgICAgICAgICAgICAgbGF5ZXIuY2xvc2UobG9hZGluZyk7CiAgICAgICAgICAgICAgICBpZihkYXRhLmNvZGU9PTIwMCl7CiAgICAgICAgICAgICAgICAgICAgJCgiI3l6bUJ0biwueXpt
1QnRuX3dlYiIpLmhpZGUoKTsKCiAgICAgICAgICAgICAgICAgICAgaWYoaXNQaG9uZSgpKXsKICAgICAgICAgICAgICAgICAgICAgICAgJCgiI3l6bV9kYW9qaXNoaSIpLmh0bWwoIjU5cyIpOwogICAgICAgICAgICAgICAgICAgIH1lbHNlewogICAgICAgICAgICAgICAgICAgICAgICAkKCIjeXptX2Rhb2ppc2hpIikuaHRtbCgiNTlz6YeN5paw6I635Y+WIik7CiAgICAgICAgICAgICAgICAgICAgICAgICQoIi5nY19jaGVtb2ZmaWNlX3l6bV9kYW9qaXNoaSIpLmh0bWwoIjU5c+mHjeaWsOiOt+WPliIpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAkKCIjeXptX2Rhb2ppc2hpIikuc2hvdygpOwogICAgICAgICAgICAgICAgICAgICQoIi5nY19jaGVtb2ZmaWNlX3l6bV9kYW9qaXNoaSIpLnNob3coKTsKICAgICAgICAgICAgICAgICAgICB2YXIgY291bnQgPSA1ODsKICAgICAgICAgICAgICAgICAgICB2YXIgbXlDb3VudERvd24gPSBzZWxmLnNldEludGVydmFsKGZ1bmN0aW9uKCl7CgogICAgICAgICAgICAgICAgICAgICAgICBpZihpc1Bob25lKCkpewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJCgiI3l6bV9kYW9qaXNoaSIpLmh0bWwoY291bnQgKyJzIik7CiAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNlewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJCgiI3l6bV9kYW9qaXNoaSIpLmh0bWwoY291bnQgKyJz6YeN5paw6I635Y+WIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCIuZ2NfY2hlbW9mZmljZV95em1fZGFvamlzaGkiKS5odG1sKGNvdW50ICsic+mHjeaWsOiOt+WPliIpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICBpZihjb3VudD09MCl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGVhckludGVydmFsKG15Q291bnREb3duKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50ID0gNTg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCIjeXptX2Rhb2ppc2hpIikuaGlkZSgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJCgiLmdjX2NoZW1vZmZpY2VfeXptX2Rhb2ppc2hpIikuaGlkZSgpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGlzUGhvbmUoKSl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCgiI3l6bUJ0biwueXpt
1QnRuX3dlYiIpLmh0bWwoIuiOt+WPliIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2V7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCgiI3l6bUJ0biwueXptQnRuX3dlYiIpLmh0bWwoIumHjeaWsOiOt+WPliIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoIiN5em1CdG4sLnl6bUJ0bl93ZWIiKS5zaG93KCk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgY291bnQtLTsKICAgICAgICAgICAgICAgICAgICB9LDEwMDApOwogICAgICAgICAgICAgICAgfWVsc2V7CiAgICAgICAgICAgICAgICAgICAgbGF5ZXIubXNnKGRhdGEubWVzc2FnZSx7dGltZToxMDAwLHNoaWZ0Oi0xfSk7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICBlcnJvcjogZnVuY3Rpb24oZXJyKXsgCiAgICAgICAgICAgICAgICBsYXllci5jbG9zZShsb2FkaW5nKTsKICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGVycik7CiAgICAgICAgICAgIH0gCiAgICAgICAgfSkKICAgIH0KCn0pOw==
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.