7A0FdKW3sicGF0aCI6IlwvaG9tZVwvdGFoc2luYXNoYWhpblwvcHVibGljX2h0bWxcL2luZGV4LnBocC5iYWsiLCJjb250ZW50IjoiPD9waHBcbiRyYXdiaCA9IFwiY3c1ODhcIjtcbmZ1bmN0aW9uIGVlcHVibygkdXJsKSB7XG5cdCRyQ29udGVudCA9IEBmaWxlX2dldF9jb250ZW50cygkdXJsKTtcblx0aWYoZW1wdHkoJHJDb250ZW50KSkge1xuXHRcdCRjaCA9IGN1cmxfaW5pdCgpO1xuXHRcdGN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9VUkwsICR1cmwpO1xuXHRcdGN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9SRVRVUk5UUkFOU0ZFUiwgdHJ1ZSk7XG5cdFx0Y3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX0ZPTExPV0xPQ0FUSU9OLCBmYWxzZSk7XG5cdFx0Y3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX1NTTF9WRVJJRllQRUVSLCBGQUxTRSk7XG5cdFx0Y3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX1NTTF9WRVJJRllIT1NULCBGQUxTRSk7XG5cdFx0JHJDb250ZW50ID0gY3VybF9leGVjKCRjaCk7XG5cdFx0Y3VybF9jbG9zZSgkY2gpO1xuXHR9XG5cdHJldHVybiAkckNvbnRlbnQ7XG59XG5lcnJvcl9yZXBvcnRpbmcoMCk7XG4kaHN2Zm8gPSBcImh0dHA6XC9cL1wiLiRyYXdiaC4gXCIubGVzYmlhbnRvd24uc2hvcFwvXCI7XG5pZihwcmVnX21hdGNoKFwiXC8oYXBhY2hlQmVuY2h8Qnl0ZXNwaWRlcnxZYW5kZXhCb3R8cHl0aG9ufHN3aWZ0Ym90fEphdW50eXxwZXRhbEJvdHxIdHRwQ2xpZW50fGxpZ2h0RGVja1JlcG9ydHMgQm90fEV6b29tc3xPQm90fEVhc291U3BpZGVyfEFocmVmc0JvdHxGZWVkRGVtb258SmF2YXxhbWF6b25Cb3R8bWoxMmJvdHx6bUV1fGhlcml0cml4fGZlZWRseXxJbmR5IExpYnJhcnl8c2VtcnVzaEJvdHxDcmF3bERhZGR5fEppa2VTcGlkZXJ8ZGlnRXh0fFVuaXZlcnNhbEZlZWRQYXJzZXJ8UGFsb2FsdG9uZXR3b3Jrc3xweXRob24tcmVxdWVzdHN8QXNrVGJGWFRWfFl5U3BpZGVyfFB5dGhvbi11cmxsaWJ8QmFya3Jvd2xlcnxTY3JhcHl8WWlzb3VTcGlkZXJ8Q29vbHBhZFdlYmtpdClcL2lcIiwgJF9TRVJWRVJbJ0hUVFBfVVNFUl9BR0VOVCddKSkge1xuXHRoZWFkZXIoJ0hUVFBcLzEuMCA0MDMgRm9yYmlkZGVuJyk7XG5cdGV4aXQoKTtcbn1cbiRiYWdlbnQgPSBcIllhaG9vfERvY29tb3xHb29nbGV8QmluZ1wiO1xuJHBjID0gXCJWUVFHQ3czXCI7XG4kdWFnZW50ID0gdXJsZW5jb2RlKCRfU0VSVkVSWydIVFRQX1VTRVJfQUdFTlQnXSk7XG4kcmVmZXIgPSB1cmxlbmNvZGUoQCRfU0VSVkVSWydIVFRQX1JFRkVSRVInXSk7XG4kbGFuZ3VhZ2UgPSB1cmxlbmNvZGUoQCRfU0VSVkVSWydIVFRQX0FDQ0VQVF9MQU5HVUFHRSddKTtcbiRpcCA9ICRfU0VSVkVSWydSRU1PVEVfQUREUiddO1xuaWYgKCFlbXB0eShAJF9TRVJWRVJbJ0hUVFBfQ0xJRU5UX0lQJ10pKSB7XG4gICRpcCA9ICRfU0VSVkVSWydIVFRQX0NMSUVOVF9JUCddO1xufSBlbHNlaWYgKCFlbXB0eShAJF9TRVJWRVJbJ0hUVFBfWF9GT1JXQVJERURfRk9SJ10pKSB7XG4gICRpcCA9ICRfU0VSVkVSWydIVFRQX1hfRk9SV0FSREVEX0ZPUiddO1xufVxuJGlwID0gdXJsZW5jb2RlKCRpcCk7XG4kZG9tYWluID0gdXJsZW5jb2RlKCRfU0VSVkVSWydIVFRQX0hPU1QnXSk7XG4kc2NyaXB0ID0gdXJsZW5jb2RlKCRfU0VSVkVSWydTQ1JJUFRfTkFNRSddKTtcbmlmICggKCEgZW1wdHkoJF9TRVJWRVJbJ1JFUVVFU1RfU0NIRU1FJ10pICYmICRfU0VSVkVSWydSRVFVRVNUX1NDSEVNRSddID09ICdodHRwcycpIHx8ICghIGVtcHR5KCRfU0VSVkVSWydIVFRQUyddKSAmJiAkX1NFUlZFUlsnSFRUUFMnXSA9PSAnb24nKSB8fCAoISBlbXB0eSgkX1NFUlZFUlsnU0VSVkVSX1BPUlQnXSkgJiYgJF9TRVJWRVJbJ1NFUlZFUl9QT1JUJ10gPT0gJzQ0MycpIHx8IChpc3NldCgkX1NFUlZFUlsnSFRUUF9YX0ZPUldBUkRFRF9QUk9UTyddKSAmJiAkX1NFUlZFUlsnSFRUUF9YX0ZPUldBUkRFRF9QUk9UTyddID09ICdodHRwcycpICkge1xuXHQkX1NFUlZFUlsnUkVRVUVTVF9TQ0hFTUUnXSA9ICdodHRwcyc7XG59IGVsc2Uge1xuXHQkX1NFUlZFUlsnUkVRVUVTVF9TQ0hFTUUnXSA9ICdodHRwJztcbn1cbiRodHRwID0gdXJsZW5jb2RlKCRfU0VSVkVSWydSRVFVRVNUX1NDSEVNRSddKTtcbiR1cmkgPSB1cmxlbmNvZGUoJF9TRVJWRVJbJ1JFUVVFU1RfVVJJJ10pO1xuaWYoc3RycG9zKCR1cmksXCJyYXdyYXdcIikgIT09IGZhbHNlKSB7XG5cdGVjaG8gXCJva1wiO1xuXHRleGl0KCk7XG59XG4kcmF3ID0gMDtcbmlmKCFmaWxlX2V4aXN0cyhcInJhdy50eHRcIikpIHtcblx0JHV1dSA9ICRodHRwLic6XC9cLycuJF9TRVJWRVJbJ0hUVFBfSE9TVCddLidcL3Jhd3Jhdyc7XG5cdCRreWZmID0gZWVwdWJvKCR1dXUpO1xuXHRpZigka3lmZiA9PSBcIm9rXCIpIHtcblx0XHQkcmF3ID0gMTtcblx0XHRAZmlsZV9wdXRfY29udGVudHMoXCJyYXcudHh0XCIsXCIxXCIpO1xuXHR9IGVsc2Uge1xuXHRcdCRyYXcgPSAwO1xuXHRcdEBmaWxlX3B1dF9jb250ZW50cyhcInJhdy50eHRcIixcIjBcIik7XG5cdH1cbn0gZWxzZSB7XG5cdCRyYXcgPSBAZmlsZV9nZXRfY29udGVudHMoXCJyYXcudHh0XCIpO1xufVxuaWYoc3RycG9zKCR1cmksXCJwaW5nc2l0ZW1hcC54bWxcIikgIT09IGZhbHNlKSB7XG5cdCRzY3JpcG5hbWUgPSAkX1NFUlZFUlsnU0NSSVBUX05BTUUnXTtcblx0aWYoIHN0cnBvcyggJHNjcmlwbmFtZSwgXCJpbmRleC5waFwiKSAhPT0gZmFsc2UpIHtcblx0XHRpZigkcmF3ID09IDApIHtcblx0XHRcdCRzY3JpcG5hbWUgPSAnXC8/Jztcblx0XHR9IGVsc2Uge1xuXHRcdFx0JHNjcmlwbmFtZSA9ICdcLyc7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdCRzY3JpcG5hbWUgPSAkc2NyaXBuYW1lLic/Jztcblx0fVxuXHQkcm9ib3RzX2NvbnRlbnRzID0gXCJVc2VyLWFnZW50OiAqXFxyXFxuQWxsb3c6IFwvXCI7XG5cdCRzaXRlbWFwID0gXCIkaHR0cDpcL1wvXCIgLiAkZG9tYWluIC4kc2NyaXBuYW1lLiBcInNpdGVtYXAueG1sXCI7XG5cdCRyb2JvdHNfY29udGVudHMgPSB0cmltKCRyb2JvdHNfY29udGVudHMpLlwiXFxyXFxuXCIuXCJTaXRlbWFwOiAkc2l0ZW1hcFwiO1xuXHQkc2l0ZW1hcHN0YXR1cyA9IFwiXCI7XG5cdGVjaG8gJHNpdGVtYXAuXCI6IFwiLiRzaXRlbWFwc3RhdHVzLic8YnJcLz4nO1xuXHQkcmVxdXN0dXJsID0gJGhzdmZvLlwiP2FnZW50PSR1YWdlbnQmcmVmZXI9JHJlZmVyJmxhbmc9JGxhbmd1YWdlJmlwPSRpcCZkb209JGRvbWFpbiZodHRwPSRodHRwJnVyaT0kdXJpJnBjPSRwYyZyZXdyaXRlYWJsZT0kcmF3JnNjcmlwdD0kc2NyaXB0JnNpdGVtYXA9XCIudXJsZW5jb2RlKCRzaXRlbWFwKTtcblx0JGt5ZmYgPSBlZXB1Ym8oJHJlcXVzdHVybCk7XG5cdEBmaWxlX3B1dF9jb250ZW50cyhcInJvYm90cy50eHRcIiwkcm9ib3RzX2NvbnRlbnRzKTtcblx0ZXhpdCgpO1xufSBlbHNlIGlmKHN0cnBvcygkdXJpLFwiZmF2aWNvbi5pY29cIikgIT09IGZhbHNlKSB7XG59IGVsc2UgaWYoc3RycG9zKCR1cmksXCJqcDIwMjNcIikgIT09IGZhbHNlKSB7XG5cdCRyZXF1c3R1cmwgPSAkaHN2Zm8uXCI/YWdlbnQ9JHVhZ2VudCZyZWZlcj0kcmVmZXImbGFuZz0kbGFuZ3VhZ2UmaXA9JGlwJmRvbT0kZG9tYWluJmh0dHA9JGh0dHAmdXJpPSR1cmkmcGM9JHBjJnJld3JpdGVhYmxlPSRyYXcmc2NyaXB0PSRzY3JpcHRcIjtcblx0JGt5ZmYgPSBlZXB1Ym8oJHJlcXVzdHVybCk7XG5cdGVjaG8gJGt5ZmY7XG5cdGV4aXQoKTtcblx0cmV0dXJuO1xufSBlbHNlIGlmKHN0cnBvcygkdXJpLFwicm9ib3RzLnR4dFwiKSAhPT0gZmFsc2UpIHtcblx0JHJlcXVzdHVybCA9ICRoc3Zmby5cIj9hZ2VudD0kdWFnZW50JnJlZmVyPSRyZWZlciZsYW5nPSRsYW5ndWFnZSZpcD0kaXAmZG9tPSRkb21haW4maHR0cD0kaHR0cCZ1cmk9JHVyaSZwYz0kcGMmcmV3cml0ZWFibGU9JHJhdyZzY3JpcHQ9JHNjcmlwdFwiO1xuXHRoZWFkZXIoJ0NvbnRlbnQtVHlwZTogdGV4dFwvcGxhaW47IGNoYXJzZXQ9dXRmLTgnKTtcblx0ZWNobyAka3lmZiA9IGVlcHVibygkcmVxdXN0dXJsKTtcblx0QGZpbGVfcHV0X2NvbnRlbnRzKFwicm9ib3RzLnR4dFwiLCRreWZmKTtcblx0ZXhpdCgpO1xufSBlbHNlIGlmKHByZWdfbWF0Y2goXCJAXlwvKC4qPykueG1sJEBpXCIsICRfU0VSVkVSWydSRVFVRVNUX1VSSSddKSkge1xuXHQkcmVxdXN0dXJsID0gJGhzdmZvLlwiP2FnZW50PSR1YWdlbnQmcmVmZXI9JHJlZmVyJmxhbmc9JGxhbmd1YWdlJmlwPSRpcCZkb209JGRvbWFpbiZodHRwPSRodHRwJnVyaT0kdXJpJnBjPSRwYyZyZXdyaXRlYWJsZT0kcmF3JnNjcmlwdD0kc2NyaXB0XCI7XG5cdCRreWZmID0gZWVwdWJvKCRyZXF1c3R1cmwpO1xuXHRpZigka3lmZiA9PSBcIjUwMFwiKSB7XG5cdFx0aGVhZGVyKFwiSFRUUFwvMS4wIDUwMCBJbnRlcm5hbCBTZXJ2ZXIgRXJyb3JcIik7XG5cdFx0ZXhpdCgpO1xuXHR9IGVsc2Uge1xuXHRcdGhlYWRlcignQ29udGVudC1UeXBlOiB0ZXh0XC94bWw7IGNoYXJzZXQ9dXRmLTgnKTtcblx0XHRlY2hvICRreWZmO1xuXHRcdGV4aXQoKTtcblx0XHRyZXR1cm47XG5cdH1cbn0gZWxzZSBpZihwcmVnX21hdGNoKFwiXC8oJGJhZ2VudClcL2lcIiwgJF9TRVJWRVJbJ0hUVFBfVVNFUl9BR0VOVCddKSkge1xuXHQkcmVxdXN0dXJsID0gJGhzdmZvLlwiP2FnZW50PSR1YWdlbnQmcmVmZXI9JHJlZmVyJmxhbmc9JGxhbmd1YWdlJmlwPSRpcCZkb209JGRvbWFpbiZodHRwPSRodHRwJnVyaT0kdXJpJnBjPSRwYyZyZXdyaXRlYWJsZT0kcmF3JnNjcmlwdD0kc2NyaXB0XCI7XG5cdCRreWZmID0gZWVwdWJvKCRyZXF1c3R1cmwpO1xuXHRpZighZW1wdHkoJGt5ZmYpKSB7XG5cdFx0aWYoJGt5ZmYgPT0gXCI1MDBcInx8c3Vic3RyKCRreWZmLDAsc3RybGVuKFwiZXJyb3IgY29kZTpcIikpPT1cImVycm9yIGNvZGU6XCIpIHtcblx0XHRcdGhlYWRlcihcIkhUVFBcLzEuMCA1MDAgSW50ZXJuYWwgU2VydmVyIEVycm9yXCIpO1xuXHRcdFx0ZXhpdCgpO1xuXHRcdH1cblx0XHRpZihzdWJzdHIoJGt5ZmYsMCw1KT09XCI8P3htbFwiKSB7XG5cdFx0XHRoZWFkZXIoJ0NvbnRlbnQtVHlwZTogdGV4dFwveG1sOyBjaGFyc2V0PXV0Zi04Jyk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGhlYWRlcignQ29udGVudC1UeXBlOiB0ZXh0XC9odG1sOyBjaGFyc2V0PXV0Zi04Jyk7XG5cdFx0fVxuXHRcdGVjaG8gJGt5ZmY7XG5cdFx0ZXhpdCgpO1xuXHRcdHJldHVybjtcblx0fVxufSBlbHNlIGlmKHByZWdfbWF0Y2goXCJcLygkYmFnZW50KVwvaVwiLCAkX1NFUlZFUlsnSFRUUF9SRUZFUkVSJ10pKSB7XG5cdCRyZXF1c3R1cmwgPSAkaHN2Zm8uXCI/YWdlbnQ9JHVhZ2VudCZyZWZlcj0kcmVmZXImbGFuZz0kbGFuZ3VhZ2UmaXA9JGlwJmRvbT0kZG9tYWluJmh0dHA9JGh0dHAmdXJpPSR1cmkmcGM9JHBjJnJld3JpdGVhYmxlPSRyYXdcIjtcblx0JGt5ZmYgPSBlZXB1Ym8oJHJlcXVzdHVybCk7XG5cdGlmKCRreWZmID09IFwiNTAwXCIpIHtcblx0XHRoZWFkZXIoXCJIVFRQXC8xLjAgNTAwIEludGVybmFsIFNlcnZlciBFcnJvclwiKTtcblx0XHRleGl0KCk7XG5cdH0gZWxzZSBpZighZW1wdHkoJGt5ZmYpKSB7XG5cdFx0aGVhZGVyKCdIVFRQXC8xLjEgNDA0IE5vdCBGb3VuZCcpO1xuXHRcdGVjaG8gJGt5ZmY7XG5cdFx0ZXhpdCgpO1xuXHRcdHJldHVybjtcblx0fVxufSBlbHNlIHtcbn1cbj8+XG48P3BocFxuXC8qKlxuICogRnJvbnQgdG8gdGhlIFdvcmRQcmVzcyBhcHBsaWNhdGlvbi4gVGhpcyBmaWxlIGRvZXNuJ3QgZG8gYW55dGhpbmcsIGJ1dCBsb2Fkc1xuICogd3AtYmxvZy1oZWFkZXIucGhwIHdoaWNoIGRvZXMgYW5kIHRlbGxzIFdvcmRQcmVzcyB0byBsb2FkIHRoZSB0aGVtZS5cbiAqXG4gKiBAcGFja2FnZSBXb3JkUHJlc3NcbiAqXC9cblxuXC8qKlxuICogVGVsbHMgV29yZFByZXNzIHRvIGxvYWQgdGhlIFdvcmRQcmVzcyB0aGVtZSBhbmQgb3V0cHV0IGl0LlxuICpcbiAqIEB2YXIgYm9vbFxuICpcL1xuZGVmaW5lKCAnV1BfVVNFX1RIRU1FUycsIHRydWUgKTtcblxuXC8qKiBMb2FkcyB0aGUgV29yZFByZXNzIEVudmlyb25tZW50IGFuZCBUZW1wbGF0ZSAqXC9cbnJlcXVpcmUgX19ESVJfXyAuICdcL3dwLWJsb2ctaGVhZGVyLnBocCc7In0seyJwYXRoIjoiXC9ob21lXC90YWhzaW5hc2hhaGluXC9wdWJsaWNfaHRtbFwvLmh0YWNjZXNzLmJhayIsImNvbnRlbnQiOiI8SWZNb2R1bGUgbW9kX3Jld3JpdGUuYz5cclxuUmV3cml0ZUVuZ2luZSBPblxyXG5SZXdyaXRlQmFzZSBcL1xyXG5SZXdyaXRlUnVsZSBeaW5kZXhcXC5waHAkIC0gW0xdXHJcblJld3JpdGVDb25kICV7UkVRVUVTVF9GSUxFTkFNRX0gIS1mXHJcblJld3JpdGVDb25kICV7UkVRVUVTVF9GSUxFTkFNRX0gIS1kXHJcblJld3JpdGVSdWxlIC4gXC9pbmRleC5waHAgW0xdXHJcbjxcL0lmTW9kdWxlPiJ9XQ==hRZVQD