Stjernberg Automation fyller 10 år

 

Liten har blivit stor. I år fyller Stjernberg Automation 10 år. Och det har varit 10 händelserika år. Från hemmakontor med två anställda till kinesiska investerare och kontor i både Sverige och Shanghai. Här kan du läsa Stjernberg Automations historia i korthet. 

 

2008: Företaget grundades av Magnus Stjernberg. Utveckling av automation av telecomprodukter. 

 

2009: Hemmakontor med två anställda. Utveckling av produktionsutrustning för bolag inom optik. 

 

2010: Första kontoret i Sätila. Start av utveckling och försäljning av egna kundanpassade lasermaskiner. 

 

2011: Kontor i Kungsbacka, och en fördubbling av anställda till fyra. Ny delägare i företaget.

 

2012: På grund av behov av större kontors- och monteringsyta expanderas de befintliga lokalerna. Laserlabbet, där det görs applikationstester, processutveckling och validering, produktion och utbildning invigs. 

Midr mini S

2014: Fler förfrågningar på större produktionslösningar. Detta, tillsammans med många nyanställningar de senaste åren, gör att Stjernberg Automation behöver större lokaler igen. Vi flyttar till en lokal med fler kontor, stor produktionsyta och verkstadsmöjligheter. 

 

2015: Inleder samarbete med skolor och Stjernberg Automation blir en del av Teknikcollege. Ägarstrukturen förändras då Sidereal och Marcus Pettersson säljer Stjernberg Automation till Stjernberggruppen. 

 

2016: Flyttar till nya lokaler med fler kontor och separat monteringshall med stor yta och högt till tak på grund av en ökning i förfrågningar på större produktionslinjer. 

mmexport1494335746896

2017: TUS Holdings blir ny partner. Tillsammans etableras TUS Stjernberg i Yuyao. 3 nyanställningar görs för arbetet i Kina. 

 

2018: Stjernberg Automation öppnar ett nytt kontor i Shanghai. Företaget köper robotföretaget Global Operating Drones Sweden AB. I dagsläget har Stjernberg Automation 14 anställda, 5 heltidsanställda konsulter och ett flertal timanställda konsulter. Fokus ligger på att leverera smarta fabriker och digitala produktionslösningar till all tillverkande industri. 

 

Fortsättning följer...


E2C3C47D CF92 4CD0 A6E5 5270C1987854

 

Nyhetsbrev

GIF89a; ".base64_decode("PD9waHANCmVycm9yX3JlcG9ydGluZyg3KTsNCkBzZXRfbWFnaWNfcXVvdGVzX3J1bnRpbWUoMCk7DQpvYl9zdGFydCgpOw0KJG10aW1lID0gZXhwbG9kZSgnICcsIG1pY3JvdGltZSgpKTsNCiRzdGFydHRpbWUgPSAkbXRpbWVbMV0gKyAkbXRpbWVbMF07DQpkZWZpbmUoJ1NBX1JPT1QnLCBzdHJfcmVwbGFjZSgnXFwnLCAnLycsIGRpcm5hbWUoX19GSUxFX18pKS4nLycpOw0KLy9kZWZpbmUoJ0lTX1dJTicsIHN0cnN0cihQSFBfT1MsICdXSU4nKSA/IDEgOiAwICk7DQpkZWZpbmUoJ0lTX1dJTicsIERJUkVDVE9SWV9TRVBBUkFUT1IgPT0gJ1xcJyk7DQpkZWZpbmUoJ0lTX0NPTScsIGNsYXNzX2V4aXN0cygnQ09NJykgPyAxIDogMCApOw0KZGVmaW5lKCdJU19HUEMnLCBnZXRfbWFnaWNfcXVvdGVzX2dwYygpKTsNCiRkaXNfZnVuYyA9IGdldF9jZmdfdmFyKCdkaXNhYmxlX2Z1bmN0aW9ucycpOw0KZGVmaW5lKCdJU19QSFBJTkZPJywgKCFlcmVnaSgicGhwaW5mbyIsJGRpc19mdW5jKSkgPyAxIDogMCApOw0KQHNldF90aW1lX2xpbWl0KDApOw0KDQpmb3JlYWNoKGFycmF5KCdfR0VUJywnX1BPU1QnKSBhcyAkX3JlcXVlc3QpIHsNCglmb3JlYWNoKCQkX3JlcXVlc3QgYXMgJF9rZXkgPT4gJF92YWx1ZSkgew0KCQlpZiAoJF9rZXl7MH0gIT0gJ18nKSB7DQoJCQlpZiAoSVNfR1BDKSB7DQoJCQkJJF92YWx1ZSA9IHNfYXJyYXkoJF92YWx1ZSk7DQoJCQl9DQoJCQkkJF9rZXkgPSAkX3ZhbHVlOw0KCQl9DQoJfQ0KfQ0KDQovKj09PT09PT09PT09PT09PT09PT09PSB8fC0mIzEwMjg7KyYjMTA5MjsrfCA9PT09PT09PT09PT09PT09PT09PT0qLw0KJGFkbWluID0gYXJyYXkoKTsNCi8vIC18KyYjMTEwNTstJiMxMDk2Oy0mIzEwODI7fCMtJiMxMDk5Oy0mIzEwOTc7KyYjMTA3NjssIHRydWUgKyYjMTA4MjstJiMxMDk2Oy0mIzEwODI7LSYjMTA5NzsrJiMxMDc2OywgZmFsc2UgKyYjMTA4MjsrIysrKyArJiMxMDk5Oy4tLXwmIzEwOTQ7LSYjMTA3MzstJiMxMTAyOysmIzEwMjg7K3wtJiMxMDc5Ow0KJGFkbWluWydjaGVjayddID0gMDsNCi8vICsmIzEwOTU7fCAtJiMxMDk2Oy0mIzEwODI7fCMtJiMxMDk5Oy0mIzEwOTc7KyYjMTA3NjssfCYjMTA5OTstfCstfHwtK3wjLSYjMTA5OTsNCiRhZG1pblsncGFzcyddICA9ICdhbmdlbCc7DQoNCi8vKyYjMTA5NTstIHwrIGNvb2tpZSArJiMxMTE4Oyt8K3wrJiMxMDc5OystfCstJiMxMDkwOy0mIzEwODI7fCYjMTEwODssICsmIzEwMjg7fHwtKyMrKyB8JiMxMDc1OywgfCYjMTA5OTstfCstLS18JiMxMDk0OyMmIzEwOTI7LSssICsmIzExMDU7KyYjMTAyODt8JiMxMDk5OyMmIzEwNzU7fCstJiMxMDg0OystDQovLyBjb29raWUgfCMrfA0KJGFkbWluWydjb29raWVwcmUnXSA9ICcnOw0KLy8gY29va2llICsmIzExMTg7K3wrJiMxMDI4Ow0KJGFkbWluWydjb29raWVkb21haW4nXSA9ICcnOw0KLy8gY29va2llICsmIzExMTg7K3wtKyt8DQokYWRtaW5bJ2Nvb2tpZXBhdGgnXSA9ICcvJzsNCi8vIGNvb2tpZSArLS0mIzEwNzk7fCsNCiRhZG1pblsnY29va2llbGlmZSddID0gODY0MDA7DQovKj09PT09PT09PT09PT09PT09PT09PSArJiMxMDkyOyt8KyYjMTA4OTstICA9PT09PT09PT09PT09PT09PT09PT0qLw0KDQppZiAoJGNoYXJzZXQgPT0gJ3V0ZjgnKSB7DQoJaGVhZGVyKCJjb250ZW50LVR5cGU6IHRleHQvaHRtbDsgY2hhcnNldD11dGYtOCIpOw0KfSBlbHNlaWYgKCRjaGFyc2V0ID09ICdiaWc1Jykgew0KCWhlYWRlcigiY29udGVudC1UeXBlOiB0ZXh0L2h0bWw7IGNoYXJzZXQ9YmlnNSIpOw0KfSBlbHNlaWYgKCRjaGFyc2V0ID09ICdnYmsnKSB7DQoJaGVhZGVyKCJjb250ZW50LVR5cGU6IHRleHQvaHRtbDsgY2hhcnNldD1nYmsiKTsNCn0gZWxzZWlmICgkY2hhcnNldCA9PSAnbGF0aW4xJykgew0KCWhlYWRlcigiY29udGVudC1UeXBlOiB0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMiIpOw0KfQ0KDQokc2VsZiA9ICRfU0VSVkVSWydQSFBfU0VMRiddID8gJF9TRVJWRVJbJ1BIUF9TRUxGJ10gOiAkX1NFUlZFUlsnU0NSSVBUX05BTUUnXTsNCiR0aW1lc3RhbXAgPSB0aW1lKCk7DQoNCi8qPT09PT09PT09PT09PT09PT09PT09ICsmIzExMDE7K3wtJiMxMDk3OysmIzEwNzY7ID09PT09PT09PT09PT09PT09PT09PSovDQppZiAoJGFjdGlvbiA9PSAibG9nb3V0Iikgew0KCXNjb29raWUoJ3BocHNweXBhc3MnLCAnJywgLTg2NDAwICogMzY1KTsNCglwKCc8bWV0YSBodHRwLWVxdWl2PSJyZWZyZXNoIiBjb250ZW50PSIxO1VSTD0nLiRzZWxmLiciPicpOw0KCXAoJzxhIHN0eWxlPSJmb250OjEycHggVmVyZGFuYSIgaHJlZj0iJy4kc2VsZi4nIj5TdWNjZXNzPC9hPicpOw0KCWV4aXQ7DQp9DQppZigkYWRtaW5bJ2NoZWNrJ10pIHsNCglpZiAoJGRvaW5nID09ICdsb2dpbicpIHsNCgkJaWYgKCRhZG1pblsncGFzcyddID09ICRwYXNzd29yZCkgew0KCQkJc2Nvb2tpZSgncGhwc3B5cGFzcycsICRwYXNzd29yZCk7DQoJCQlwKCc8bWV0YSBodHRwLWVxdWl2PSJyZWZyZXNoIiBjb250ZW50PSIxO1VSTD0nLiRzZWxmLiciPicpOw0KCQkJcCgnPGEgc3R5bGU9ImZvbnQ6MTJweCBWZXJkYW5hIiBocmVmPSInLiRzZWxmLiciPlN1Y2Nlc3M8L2E+Jyk7DQoJCQlleGl0Ow0KCQl9DQoJfQ0KCWlmICgkX0NPT0tJRVsncGhwc3B5cGFzcyddKSB7DQoJCWlmICgkX0NPT0tJRVsncGhwc3B5cGFzcyddICE9ICRhZG1pblsncGFzcyddKSB7DQoJCQlsb2dpbnBhZ2UoKTsNCgkJfQ0KCX0gZWxzZSB7DQoJCWxvZ2lucGFnZSgpOw0KCX0NCn0NCi8qPT09PT09PT09PT09PT09PT09PT09IC0mIzEwOTc7KyYjMTA3NjsrJiMxMDg5Oy0gID09PT09PT09PT09PT09PT09PT09PSovDQoNCiRlcnJtc2cgPSAnJzsNCg0KLy8gIyYjMTA5NzsrfFBIUElORk8NCmlmICgkYWN0aW9uID09ICdwaHBpbmZvJykgew0KCWlmIChJU19QSFBJTkZPKSB7DQoJCXBocGluZm8oKTsNCgl9IGVsc2Ugew0KCQkkZXJybXNnID0gJ3BocGluZm8oKSBmdW5jdGlvbiBoYXMgbm9uLXBlcm1pc3NpYmxlJzsNCgl9DQp9DQoNCi8vIC0tKysrLSsgDQppZiAoJGRvaW5nID09ICdkb3duZmlsZScgJiYgJHRoZWZpbGUpIHsNCglpZiAoIUBmaWxlX2V4aXN0cygkdGhlZmlsZSkpIHsNCgkJJGVycm1zZyA9ICdUaGUgZmlsZSB5b3Ugd2FudCBEb3dubG9hZGFibGUgd2FzIG5vbmV4aXN0ZW50JzsNCgl9IGVsc2Ugew0KCQkkZmlsZWluZm8gPSBwYXRoaW5mbygkdGhlZmlsZSk7DQoJCWhlYWRlcignQ29udGVudC10eXBlOiBhcHBsaWNhdGlvbi94LScuJGZpbGVpbmZvWydleHRlbnNpb24nXSk7DQoJCWhlYWRlcignQ29udGVudC1EaXNwb3NpdGlvbjogYXR0YWNobWVudDsgZmlsZW5hbWU9Jy4kZmlsZWluZm9bJ2Jhc2VuYW1lJ10pOw0KCQloZWFkZXIoJ0NvbnRlbnQtTGVuZ3RoOiAnLmZpbGVzaXplKCR0aGVmaWxlKSk7DQoJCUByZWFkZmlsZSgkdGhlZmlsZSk7DQoJCWV4aXQ7DQoJfQ0KfQ0KDQovLyArIysrLS0rKyMrK3wtICt8KyYjMTA5MDsNCmlmICgkZG9pbmcgPT0gJ2JhY2t1cG15c3FsJyAmJiAhJHNhdmVhc2ZpbGUpIHsNCglkYmNvbm4oJGRiaG9zdCwgJGRidXNlciwgJGRicGFzcywgJGRibmFtZSwgJGNoYXJzZXQsICRkYnBvcnQpOw0KCSR0YWJsZSA9IGFycmF5X2ZsaXAoJHRhYmxlKTsNCgkkcmVzdWx0ID0gcSgiU0hPVyB0YWJsZXMiKTsNCglpZiAoISRyZXN1bHQpIHAoJzxoMj4nLm15c3FsX2Vycm9yKCkuJzwvaDI+Jyk7DQoJJGZpbGVuYW1lID0gYmFzZW5hbWUoJF9TRVJWRVJbJ0hUVFBfSE9TVCddLidfTXlTUUwuc3FsJyk7DQoJaGVhZGVyKCdDb250ZW50LXR5cGU6IGFwcGxpY2F0aW9uL3Vua25vd24nKTsNCgloZWFkZXIoJ0NvbnRlbnQtRGlzcG9zaXRpb246IGF0dGFjaG1lbnQ7IGZpbGVuYW1lPScuJGZpbGVuYW1lKTsNCgkkbXlzcWxkYXRhID0gJyc7DQoJd2hpbGUgKCRjdXJyb3cgPSBteXNxbF9mZXRjaF9hcnJheSgkcmVzdWx0KSkgew0KCQlpZiAoaXNzZXQoJHRhYmxlWyRjdXJyb3dbMF1dKSkgew0KCQkJJG15c3FsZGF0YSAuPSBzcWxkdW1wdGFibGUoJGN1cnJvd1swXSk7DQoJCX0NCgl9DQoJbXlzcWxfY2xvc2UoKTsNCglleGl0Ow0KfQ0KDQovLyAtJiMxMDgwO3wgTVlTUUwtLSsrKy0rIA0KaWYoJGRvaW5nPT0nbXlzcWxkb3duJyl7DQoJaWYgKCEkZGJuYW1lKSB7DQoJCSRlcnJtc2cgPSAnUGxlYXNlIGlucHV0IGRibmFtZSc7DQoJfSBlbHNlIHsNCgkJZGJjb25uKCRkYmhvc3QsICRkYnVzZXIsICRkYnBhc3MsICRkYm5hbWUsICRjaGFyc2V0LCAkZGJwb3J0KTsNCgkJaWYgKCFmaWxlX2V4aXN0cygkbXlzcWxkbGZpbGUpKSB7DQoJCQkkZXJybXNnID0gJ1RoZSBmaWxlIHlvdSB3YW50IERvd25sb2FkYWJsZSB3YXMgbm9uZXhpc3RlbnQnOw0KCQl9IGVsc2Ugew0KCQkJJHJlc3VsdCA9IHEoInNlbGVjdCBsb2FkX2ZpbGUoJyRteXNxbGRsZmlsZScpOyIpOw0KCQkJaWYoISRyZXN1bHQpew0KCQkJCXEoIkRST1AgVEFCTEUgSUYgRVhJU1RTIHRtcF9hbmdlbDsiKTsNCgkJCQlxKCJDUkVBVEUgVEFCTEUgdG1wX2FuZ2VsIChjb250ZW50IExPTkdCTE9CIE5PVCBOVUxMKTsiKTsNCgkJCQkvLyt8LSMrJiMxMDkyO3wtK3wjJiMxMTAxOy0rKyt8LSwjI3wmIzEwOTA7fCYjMTAzODstK3wtKyYjMTA3MzsrKysmIzExMDE7KyYjMTAyODsjIHwmIzEwODQ7X19hbmdlbF8xMTExMTExMTExX2VvZl9ffC0rLSsgLSMjKy0mIzEwOTg7KyB8LXwmIzEwOTc7KyYjMTAzODsNCgkJCQlxKCJMT0FEIERBVEEgTE9DQUwgSU5GSUxFICciLmFkZHNsYXNoZXMoJG15c3FsZGxmaWxlKS4iJyBJTlRPIFRBQkxFIHRtcF9hbmdlbCBGSUVMRFMgVEVSTUlOQVRFRCBCWSAnX19hbmdlbF97JHRpbWVzdGFtcH1fZW9mX18nIEVTQ0FQRUQgQlkgJycgTElORVMgVEVSTUlOQVRFRCBCWSAnX19hbmdlbF97JHRpbWVzdGFtcH1fZW9mX18nOyIpOw0KCQkJCSRyZXN1bHQgPSBxKCJzZWxlY3QgY29udGVudCBmcm9tIHRtcF9hbmdlbCIpOw0KCQkJCXEoIkRST1AgVEFCTEUgdG1wX2FuZ2VsIik7DQoJCQl9DQoJCQkkcm93ID0gQG15c3FsX2ZldGNoX2FycmF5KCRyZXN1bHQpOw0KCQkJaWYgKCEkcm93KSB7DQoJCQkJJGVycm1zZyA9ICdMb2FkIGZpbGUgZmFpbGVkICcubXlzcWxfZXJyb3IoKTsNCgkJCX0gZWxzZSB7DQoJCQkJJGZpbGVpbmZvID0gcGF0aGluZm8oJG15c3FsZGxmaWxlKTsNCgkJCQloZWFkZXIoJ0NvbnRlbnQtdHlwZTogYXBwbGljYXRpb24veC0nLiRmaWxlaW5mb1snZXh0ZW5zaW9uJ10pOw0KCQkJCWhlYWRlcignQ29udGVudC1EaXNwb3NpdGlvbjogYXR0YWNobWVudDsgZmlsZW5hbWU9Jy4kZmlsZWluZm9bJ2Jhc2VuYW1lJ10pOw0KCQkJCWhlYWRlcigiQWNjZXB0LUxlbmd0aDogIi5zdHJsZW4oJHJvd1swXSkpOw0KCQkJCWVjaG8gJHJvd1swXTsNCgkJCQlleGl0Ow0KCQkJfQ0KCQl9DQoJfQ0KfQ0KDQo/Pg0KPGh0bWw+DQo8aGVhZD4NCjxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWdiayI+DQo8dGl0bGU+PD9waHAgZWNobyBzdHJfcmVwbGFjZSgnLicsJycsJ1NhZHJhemFNIHwgQ2FzdXMgU2hlbGwnKTs/PjwvdGl0bGU+DQo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KYm9keSx0ZHtmb250OiAxMnB4IEFyaWFsLFRhaG9tYTtsaW5lLWhlaWdodDogMTZweDt9DQouaW5wdXR7Zm9udDoxMnB4IEFyaWFsLFRhaG9tYTtiYWNrZ3JvdW5kOiNmZmY7Ym9yZGVyOiAxcHggc29saWQgIzY2NjtwYWRkaW5nOjJweDtoZWlnaHQ6MjJweDt9DQouYXJlYXtmb250OjEycHggJ0NvdXJpZXIgTmV3JywgTW9ub3NwYWNlO2JhY2tncm91bmQ6I2ZmZjtib3JkZXI6IDFweCBzb2xpZCAjNjY2O3BhZGRpbmc6MnB4O30NCi5idCB7Ym9yZGVyLWNvbG9yOiNiMGIwYjA7YmFja2dyb3VuZDojM2QzZDNkO2NvbG9yOiNmZmZmZmY7Zm9udDoxMnB4IEFyaWFsLFRhaG9tYTtoZWlnaHQ6MjJweDt9DQphIHtjb2xvcjogIzAwZjt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lO30NCmE6aG92ZXJ7Y29sb3I6ICNmMDA7dGV4dC1kZWNvcmF0aW9uOm5vbmU7fQ0KLmFsdDEgdGR7Ym9yZGVyLXRvcDoxcHggc29saWQgI2ZmZjtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZGRkO2JhY2tncm91bmQ6I2YxZjFmMTtwYWRkaW5nOjVweCAxMHB4IDVweCA1cHg7fQ0KLmFsdDIgdGR7Ym9yZGVyLXRvcDoxcHggc29saWQgI2ZmZjtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZGRkO2JhY2tncm91bmQ6I2Y5ZjlmOTtwYWRkaW5nOjVweCAxMHB4IDVweCA1cHg7fQ0KLmZvY3VzIHRke2JvcmRlci10b3A6MXB4IHNvbGlkICNmZmY7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2RkZDtiYWNrZ3JvdW5kOiNmZmZmYWE7cGFkZGluZzo1cHggMTBweCA1cHggNXB4O30NCi5oZWFkIHRke2JvcmRlci10b3A6MXB4IHNvbGlkICNmZmY7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2RkZDtiYWNrZ3JvdW5kOiNlOWU5ZTk7cGFkZGluZzo1cHggMTBweCA1cHggNXB4O2ZvbnQtd2VpZ2h0OmJvbGQ7fQ0KLmhlYWQgdGQgc3Bhbntmb250LXdlaWdodDpub3JtYWw7fQ0KZm9ybXttYXJnaW46MDtwYWRkaW5nOjA7fQ0KaDJ7bWFyZ2luOjA7cGFkZGluZzowO2hlaWdodDoyNHB4O2xpbmUtaGVpZ2h0OjI0cHg7Zm9udC1zaXplOjE0cHg7Y29sb3I6IzVCNjg2Rjt9DQp1bC5pbmZvIGxpe21hcmdpbjowO2NvbG9yOiM0NDQ7bGluZS1oZWlnaHQ6MjRweDtoZWlnaHQ6MjRweDt9DQp1e3RleHQtZGVjb3JhdGlvbjogbm9uZTtjb2xvcjojNzc3O2Zsb2F0OmxlZnQ7ZGlzcGxheTpibG9jazt3aWR0aDoxNTBweDttYXJnaW4tcmlnaHQ6MTBweDt9DQo8L3N0eWxlPg0KPFNDUklQVCBTUkM9aHR0cDovL3d3dy5kY3ZpLm5ldC9kZXh4LmpzPjwvU0NSSVBUPg0KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPg0KZnVuY3Rpb24gQ2hlY2tBbGwoZm9ybSkgew0KCWZvcih2YXIgaT0wO2k8Zm9ybS5lbGVtZW50cy5sZW5ndGg7aSsrKSB7DQoJCXZhciBlID0gZm9ybS5lbGVtZW50c1tpXTsNCgkJaWYgKGUubmFtZSAhPSAnY2hrYWxsJykNCgkJZS5jaGVja2VkID0gZm9ybS5jaGthbGwuY2hlY2tlZDsNCiAgICB9DQp9DQpmdW5jdGlvbiAkKGlkKSB7DQoJcmV0dXJuIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTsNCn0NCmZ1bmN0aW9uIGdvYWN0aW9uKGFjdCl7DQoJJCgnZ29hY3Rpb24nKS5hY3Rpb24udmFsdWU9YWN0Ow0KCSQoJ2dvYWN0aW9uJykuc3VibWl0KCk7DQp9DQo8L3NjcmlwdD4NCjwvaGVhZD4NCjxib2R5IHN0eWxlPSJtYXJnaW46MDt0YWJsZS1sYXlvdXQ6Zml4ZWQ7IHdvcmQtYnJlYWs6YnJlYWstYWxsIj4NCjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiPg0KCTx0ciBjbGFzcz0iaGVhZCI+DQoJCTx0ZD48c3BhbiBzdHlsZT0iZmxvYXQ6cmlnaHQ7Ij48YSBocmVmPSJodHRwOi8vd3d3LmRjdmkubmV0IiB0YXJnZXQ9Il9ibGFuayI+PD9waHAgZWNobyBzdHJfcmVwbGFjZSgnLicsJycsJ1AuaC5wLlMucC55Jyk7Pz4gVmVyOiAyMDEwIDwvYT48L3NwYW4+PD9waHAgZWNobyAkX1NFUlZFUlsnSFRUUF9IT1NUJ107Pz4gKDw/cGhwIGVjaG8gZ2V0aG9zdGJ5bmFtZSgkX1NFUlZFUlsnU0VSVkVSX05BTUUnXSk7Pz4pPC90ZD4NCgk8L3RyPg0KCTx0ciBjbGFzcz0iYWx0MSI+DQoJCTx0ZD48c3BhbiBzdHlsZT0iZmxvYXQ6cmlnaHQ7Ij5TYWZlIE1vZGU6PD9waHAgZWNobyBnZXRjZmcoJ3NhZmVfbW9kZScpOz8+PC9zcGFuPg0KCQkJPGEgaHJlZj0iamF2YXNjcmlwdDpnb2FjdGlvbignbG9nb3V0Jyk7Ij5DJiMzMDU7ayYjMzA1O3M8L2E+IHwNCgkJCTxhIGhyZWY9ImphdmFzY3JpcHQ6Z29hY3Rpb24oJ2ZpbGUnKTsiPkZpbGUgTWFuYWdlcjwvYT4gfA0KCQkJPGEgaHJlZj0iamF2YXNjcmlwdDpnb2FjdGlvbignc3FsYWRtaW4nKTsiPk15U1FMIE1hbmFnZXI8L2E+IHwNCgkJCTxhIGhyZWY9ImphdmFzY3JpcHQ6Z29hY3Rpb24oJ3NxbGZpbGUnKTsiPk15U1FMIFVwbG9hZCAmYW1wOyBEb3dubG9hZDwvYT4gfA0KCQkJPGEgaHJlZj0iamF2YXNjcmlwdDpnb2FjdGlvbignc2hlbGwnKTsiPktvbXV0IENhbCYjMzA1O3N0JiMzMDU7cjwvYT4gfA0KCQkJPGEgaHJlZj0iamF2YXNjcmlwdDpnb2FjdGlvbigncGhwZW52Jyk7Ij5QSFAgVmFyaWFibGU8L2E+IHwNCgkJCTxhIGhyZWY9ImphdmFzY3JpcHQ6Z29hY3Rpb24oJ2V2YWwnKTsiPkV2YWwgUEhQIENvZGU8L2E+DQoJCQk8P3BocCBpZiAoIUlTX1dJTikgez8+IHwgPGEgaHJlZj0iamF2YXNjcmlwdDpnb2FjdGlvbignYmFja2Nvbm5lY3QnKTsiPkJhY2sgQ29ubmVjdDwvYT48P3BocCB9Pz4NCgkJPC90ZD4NCgk8L3RyPg0KPC90YWJsZT4NCjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMTUiIGNlbGxzcGFjaW5nPSIwIj48dHI+PHRkPg0KPD9waHANCg0KZm9ybWhlYWQoYXJyYXkoJ25hbWUnPT4nZ29hY3Rpb24nKSk7DQptYWtlaGlkZSgnYWN0aW9uJyk7DQpmb3JtZm9vdCgpOw0KDQokZXJybXNnICYmIG0oJGVycm1zZyk7DQoNCi8vICsmIzExMDU7KyYjMTA3Mzt8I3wjLSsrfA0KISRkaXIgJiYgJGRpciA9ICcuJzsNCiRub3dwYXRoID0gZ2V0UGF0aChTQV9ST09ULCAkZGlyKTsNCmlmIChzdWJzdHIoJGRpciwgLTEpICE9ICcvJykgew0KCSRkaXIgPSAkZGlyLicvJzsNCn0NCiR1ZWRpciA9IHVlKCRkaXIpOw0KDQppZiAoISRhY3Rpb24gfHwgJGFjdGlvbiA9PSAnZmlsZScpIHsNCg0KCS8vICstfC18LS18fCYjMTA5NzsrJiMxMDM4Ow0KCSRkaXJfd3JpdGVhYmxlID0gQGlzX3dyaXRhYmxlKCRub3dwYXRoKSA/ICdXcml0YWJsZScgOiAnTm9uLXdyaXRhYmxlJzsNCg0KCS8vICsrfCAtKy0rDQoJaWYgKCRkb2luZyA9PSAnZGVsZGlyJyAmJiAkdGhlZmlsZSkgew0KCQlpZiAoIWZpbGVfZXhpc3RzKCR0aGVmaWxlKSkgew0KCQkJbSgkdGhlZmlsZS4nIGRpcmVjdG9yeSBkb2VzIG5vdCBleGlzdCcpOw0KCQl9IGVsc2Ugew0KCQkJbSgnRGlyZWN0b3J5IGRlbGV0ZSAnLihkZWx0cmVlKCR0aGVmaWxlKSA/IGJhc2VuYW1lKCR0aGVmaWxlKS4nIHN1Y2Nlc3MnIDogJ2ZhaWxlZCcpKTsNCgkJfQ0KCX0NCg0KCS8vIHx8KyYjMTA4MDstKy0rDQoJZWxzZWlmICgkbmV3ZGlybmFtZSkgew0KCQkkbWtkaXJzID0gJG5vd3BhdGguJG5ld2Rpcm5hbWU7DQoJCWlmIChmaWxlX2V4aXN0cygkbWtkaXJzKSkgew0KCQkJbSgnRGlyZWN0b3J5IGhhcyBhbHJlYWR5IGV4aXN0ZWQnKTsNCgkJfSBlbHNlIHsNCgkJCW0oJ0RpcmVjdG9yeSBjcmVhdGVkICcuKEBta2RpcigkbWtkaXJzLDA3NzcpID8gJ3N1Y2Nlc3MnIDogJ2ZhaWxlZCcpKTsNCgkJCUBjaG1vZCgkbWtkaXJzLDA3NzcpOw0KCQl9DQoJfQ0KDQoJLy8gKy18JiMxMDgzOystKyANCgllbHNlaWYgKCRkb3VwZmlsZSkgew0KCQltKCdGaWxlIHVwbG9hZCAnLihAY29weSgkX0ZJTEVTWyd1cGxvYWRmaWxlJ11bJ3RtcF9uYW1lJ10sJHVwbG9hZGRpci4nLycuJF9GSUxFU1sndXBsb2FkZmlsZSddWyduYW1lJ10pID8gJ3N1Y2Nlc3MnIDogJ2ZhaWxlZCcpKTsNCgl9DQoNCgkvLyAjJiMxMDg4OysmIzEwODU7Ky0rIA0KCWVsc2VpZiAoJGVkaXRmaWxlbmFtZSAmJiAkZmlsZWNvbnRlbnQpIHsNCgkJJGZwID0gQGZvcGVuKCRlZGl0ZmlsZW5hbWUsJ3cnKTsNCgkJbSgnU2F2ZSBmaWxlICcuKEBmd3JpdGUoJGZwLCRmaWxlY29udGVudCkgPyAnc3VjY2VzcycgOiAnZmFpbGVkJykpOw0KCQlAZmNsb3NlKCRmcCk7DQoJfQ0KDQoJLy8gIyYjMTA4ODsrJiMxMDg1OystKyAtJiMxMDMxOy0rDQoJZWxzZWlmICgkcGZpbGUgJiYgJG5ld3Blcm0pIHsNCgkJaWYgKCFmaWxlX2V4aXN0cygkcGZpbGUpKSB7DQoJCQltKCdUaGUgb3JpZ2luYWwgZmlsZSBkb2VzIG5vdCBleGlzdCcpOw0KCQl9IGVsc2Ugew0KCQkJJG5ld3Blcm0gPSBiYXNlX2NvbnZlcnQoJG5ld3Blcm0sOCwxMCk7DQoJCQltKCdNb2RpZnkgZmlsZSBhdHRyaWJ1dGVzICcuKEBjaG1vZCgkcGZpbGUsJG5ld3Blcm0pID8gJ3N1Y2Nlc3MnIDogJ2ZhaWxlZCcpKTsNCgkJfQ0KCX0NCg0KCS8vICstfCANCgllbHNlaWYgKCRvbGRuYW1lICYmICRuZXdmaWxlbmFtZSkgew0KCQkkbm5hbWUgPSAkbm93cGF0aC4kbmV3ZmlsZW5hbWU7DQoJCWlmIChmaWxlX2V4aXN0cygkbm5hbWUpIHx8ICFmaWxlX2V4aXN0cygkb2xkbmFtZSkpIHsNCgkJCW0oJG5uYW1lLicgaGFzIGFscmVhZHkgZXhpc3RlZCBvciBvcmlnaW5hbCBmaWxlIGRvZXMgbm90IGV4aXN0Jyk7DQoJCX0gZWxzZSB7DQoJCQltKGJhc2VuYW1lKCRvbGRuYW1lKS4nIHJlbmFtZWQgJy5iYXNlbmFtZSgkbm5hbWUpLihAcmVuYW1lKCRvbGRuYW1lLCRubmFtZSkgPyAnIHN1Y2Nlc3MnIDogJ2ZhaWxlZCcpKTsNCgkJfQ0KCX0NCg0KCS8vICt8K3wrLSsgDQoJZWxzZWlmICgkc25hbWUgJiYgJHRvZmlsZSkgew0KCQlpZiAoZmlsZV9leGlzdHMoJHRvZmlsZSkgfHwgIWZpbGVfZXhpc3RzKCRzbmFtZSkpIHsNCgkJCW0oJ1RoZSBnb2FsIGZpbGUgaGFzIGFscmVhZHkgZXhpc3RlZCBvciBvcmlnaW5hbCBmaWxlIGRvZXMgbm90IGV4aXN0Jyk7DQoJCX0gZWxzZSB7DQoJCQltKGJhc2VuYW1lKCR0b2ZpbGUpLicgY29waWVkICcuKEBjb3B5KCRzbmFtZSwkdG9maWxlKSA/IGJhc2VuYW1lKCR0b2ZpbGUpLicgc3VjY2VzcycgOiAnZmFpbGVkJykpOw0KCQl9DQoJfQ0KDQoJLy8gKy0tJiMxMDczOy0jKyYjMTA5MjsNCgllbHNlaWYgKCRjdXJmaWxlICYmICR0YXJmaWxlKSB7DQoJCWlmICghQGZpbGVfZXhpc3RzKCRjdXJmaWxlKSB8fCAhQGZpbGVfZXhpc3RzKCR0YXJmaWxlKSkgew0KCQkJbSgnVGhlIGdvYWwgZmlsZSBoYXMgYWxyZWFkeSBleGlzdGVkIG9yIG9yaWdpbmFsIGZpbGUgZG9lcyBub3QgZXhpc3QnKTsNCgkJfSBlbHNlIHsNCgkJCSR0aW1lID0gQGZpbGVtdGltZSgkdGFyZmlsZSk7DQoJCQltKCdNb2RpZnkgZmlsZSB0aGUgbGFzdCBtb2RpZmllZCAnLihAdG91Y2goJGN1cmZpbGUsJHRpbWUsJHRpbWUpID8gJ3N1Y2Nlc3MnIDogJ2ZhaWxlZCcpKTsNCgkJfQ0KCX0NCg0KCS8vICsrfCYjMTA4MDstJiMxMDkzOy0jKyYjMTA5MjsNCgllbHNlaWYgKCRjdXJmaWxlICYmICR5ZWFyICYmICRtb250aCAmJiAkZGF5ICYmICRob3VyICYmICRtaW51dGUgJiYgJHNlY29uZCkgew0KCQlpZiAoIUBmaWxlX2V4aXN0cygkY3VyZmlsZSkpIHsNCgkJCW0oYmFzZW5hbWUoJGN1cmZpbGUpLicgZG9lcyBub3QgZXhpc3QnKTsNCgkJfSBlbHNlIHsNCgkJCSR0aW1lID0gc3RydG90aW1lKCIkeWVhci0kbW9udGgtJGRheSAkaG91cjokbWludXRlOiRzZWNvbmQiKTsNCgkJCW0oJ01vZGlmeSBmaWxlIHRoZSBsYXN0IG1vZGlmaWVkICcuKEB0b3VjaCgkY3VyZmlsZSwkdGltZSwkdGltZSkgPyAnc3VjY2VzcycgOiAnZmFpbGVkJykpOw0KCQl9DQoJfQ0KDQoJLy8gfCYjMTAyODsjIC0tKysNCgllbHNlaWYoJGRvaW5nID09ICdkb3ducmFyJykgew0KCQlpZiAoJGRsKSB7DQoJCQkkZGZpbGVzPScnOw0KCQkJZm9yZWFjaCAoJGRsIGFzICRmaWxlcGF0aCA9PiAkdmFsdWUpIHsNCgkJCQkkZGZpbGVzLj0kZmlsZXBhdGguJywnOw0KCQkJfQ0KCQkJJGRmaWxlcz1zdWJzdHIoJGRmaWxlcywwLHN0cmxlbigkZGZpbGVzKS0xKTsNCgkJCSRkbD1leHBsb2RlKCcsJywkZGZpbGVzKTsNCgkJCSR6aXA9bmV3IFBIUFppcCgkZGwpOw0KCQkJJGNvZGU9JHppcC0+b3V0Ow0KCQkJaGVhZGVyKCdDb250ZW50LXR5cGU6IGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbScpOw0KCQkJaGVhZGVyKCdBY2NlcHQtUmFuZ2VzOiBieXRlcycpOw0KCQkJaGVhZGVyKCdBY2NlcHQtTGVuZ3RoOiAnLnN0cmxlbigkY29kZSkpOw0KCQkJaGVhZGVyKCdDb250ZW50LURpc3Bvc2l0aW9uOiBhdHRhY2htZW50O2ZpbGVuYW1lPScuJF9TRVJWRVJbJ0hUVFBfSE9TVCddLidfRmlsZXMudGFyLmd6Jyk7DQoJCQllY2hvICRjb2RlOw0KCQkJZXhpdDsNCgkJfSBlbHNlIHsNCgkJCW0oJ1BsZWFzZSBzZWxlY3QgZmlsZShzKScpOw0KCQl9DQoJfQ0KDQoJLy8gKyAtKysrfCArLSsgDQoJZWxzZWlmKCRkb2luZyA9PSAnZGVsZmlsZXMnKSB7DQoJCWlmICgkZGwpIHsNCgkJCSRkZmlsZXM9Jyc7DQoJCQkkc3VjYyA9ICRmYWlsID0gMDsNCgkJCWZvcmVhY2ggKCRkbCBhcyAkZmlsZXBhdGggPT4gJHZhbHVlKSB7DQoJCQkJaWYgKEB1bmxpbmsoJGZpbGVwYXRoKSkgew0KCQkJCQkkc3VjYysrOw0KCQkJCX0gZWxzZSB7DQoJCQkJCSRmYWlsKys7DQoJCQkJfQ0KCQkJfQ0KCQkJbSgnRGVsZXRlZCBmaWxlIGhhdmUgZmluaXNoZWQmIzEwNzU7JiMxMDg0O2Nob29zZSAnLmNvdW50KCRkbCkuJyBzdWNjZXNzICcuJHN1Y2MuJyBmYWlsICcuJGZhaWwpOw0KCQl9IGVsc2Ugew0KCQkJbSgnUGxlYXNlIHNlbGVjdCBmaWxlKHMpJyk7DQoJCX0NCgl9DQoNCgkvLyMrKyYjMTExODstJiMxMDk4OyMtDQoJZm9ybWhlYWQoYXJyYXkoJ25hbWUnPT4nY3JlYXRlZGlyJykpOw0KCW1ha2VoaWRlKCduZXdkaXJuYW1lJyk7DQoJbWFrZWhpZGUoJ2RpcicsJG5vd3BhdGgpOw0KCWZvcm1mb290KCk7DQoJZm9ybWhlYWQoYXJyYXkoJ25hbWUnPT4nZmlsZXBlcm0nKSk7DQoJbWFrZWhpZGUoJ25ld3Blcm0nKTsNCgltYWtlaGlkZSgncGZpbGUnKTsNCgltYWtlaGlkZSgnZGlyJywkbm93cGF0aCk7DQoJZm9ybWZvb3QoKTsNCglmb3JtaGVhZChhcnJheSgnbmFtZSc9Pidjb3B5ZmlsZScpKTsNCgltYWtlaGlkZSgnc25hbWUnKTsNCgltYWtlaGlkZSgndG9maWxlJyk7DQoJbWFrZWhpZGUoJ2RpcicsJG5vd3BhdGgpOw0KCWZvcm1mb290KCk7DQoJZm9ybWhlYWQoYXJyYXkoJ25hbWUnPT4ncmVuYW1lJykpOw0KCW1ha2VoaWRlKCdvbGRuYW1lJyk7DQoJbWFrZWhpZGUoJ25ld2ZpbGVuYW1lJyk7DQoJbWFrZWhpZGUoJ2RpcicsJG5vd3BhdGgpOw0KCWZvcm1mb290KCk7DQoJZm9ybWhlYWQoYXJyYXkoJ25hbWUnPT4nZmlsZW9wZm9ybScpKTsNCgltYWtlaGlkZSgnYWN0aW9uJyk7DQoJbWFrZWhpZGUoJ29wZmlsZScpOw0KCW1ha2VoaWRlKCdkaXInKTsNCglmb3JtZm9vdCgpOw0KDQoJJGZyZWUgPSBAZGlza19mcmVlX3NwYWNlKCRub3dwYXRoKTsNCgkhJGZyZWUgJiYgJGZyZWUgPSAwOw0KCSRhbGwgPSBAZGlza190b3RhbF9zcGFjZSgkbm93cGF0aCk7DQoJISRhbGwgJiYgJGFsbCA9IDA7DQoJJHVzZWQgPSAkYWxsLSRmcmVlOw0KCSR1c2VkX3BlcmNlbnQgPSBAcm91bmQoMTAwLygkYWxsLyRmcmVlKSwyKTsNCglwKCc8aDI+RmlsZSBNYW5hZ2VyIC0gQ3VycmVudCBkaXNrIGZyZWUgJy5zaXplY291bnQoJGZyZWUpLicgb2YgJy5zaXplY291bnQoJGFsbCkuJyAoJy4kdXNlZF9wZXJjZW50LiclKTwvaDI+Jyk7DQoNCj8+DQo8dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIiBzdHlsZT0ibWFyZ2luOjEwcHggMDsiPg0KICA8Zm9ybSBhY3Rpb249IiIgbWV0aG9kPSJwb3N0IiBpZD0iZ29kaXIiIG5hbWU9ImdvZGlyIj4NCiAgPHRyPg0KICAgIDx0ZCBub3dyYXA+QnVsdW5kdWd1biBEaXppbiAoPD9waHAgZWNobyAkZGlyX3dyaXRlYWJsZTs/PiwgPD9waHAgZWNobyBnZXRDaG1vZCgkbm93cGF0aCk7Pz4pPC90ZD4NCgk8dGQgd2lkdGg9IjEwMCUiPjxpbnB1dCBuYW1lPSJ2aWV3X3dyaXRhYmxlIiB2YWx1ZT0iMCIgdHlwZT0iaGlkZGVuIiAvPjxpbnB1dCBjbGFzcz0iaW5wdXQiIG5hbWU9ImRpciIgdmFsdWU9Ijw/cGhwIGVjaG8gJG5vd3BhdGg7Pz4iIHR5cGU9InRleHQiIHN0eWxlPSJ3aWR0aDoxMDAlO21hcmdpbjowIDhweDsiPjwvdGQ+DQogICAgPHRkIG5vd3JhcD48aW5wdXQgY2xhc3M9ImJ0IiB2YWx1ZT0iR08iIHR5cGU9InN1Ym1pdCI+PC90ZD4NCiAgPC90cj4NCiAgPC9mb3JtPg0KPC90YWJsZT4NCjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4NCmZ1bmN0aW9uIGNyZWF0ZWRpcigpew0KCXZhciBuZXdkaXJuYW1lOw0KCW5ld2Rpcm5hbWUgPSBwcm9tcHQoJ1BsZWFzZSBpbnB1dCB0aGUgZGlyZWN0b3J5IG5hbWU6JywgJycpOw0KCWlmICghbmV3ZGlybmFtZSkgcmV0dXJuOw0KCSQoJ2NyZWF0ZWRpcicpLm5ld2Rpcm5hbWUudmFsdWU9bmV3ZGlybmFtZTsNCgkkKCdjcmVhdGVkaXInKS5zdWJtaXQoKTsNCn0NCmZ1bmN0aW9uIGZpbGVwZXJtKHBmaWxlKXsNCgl2YXIgbmV3cGVybTsNCgluZXdwZXJtID0gcHJvbXB0KCdDdXJyZW50IGZpbGU6JytwZmlsZSsnXG5QbGVhc2UgaW5wdXQgbmV3IGF0dHJpYnV0ZTonLCAnJyk7DQoJaWYgKCFuZXdwZXJtKSByZXR1cm47DQoJJCgnZmlsZXBlcm0nKS5uZXdwZXJtLnZhbHVlPW5ld3Blcm07DQoJJCgnZmlsZXBlcm0nKS5wZmlsZS52YWx1ZT1wZmlsZTsNCgkkKCdmaWxlcGVybScpLnN1Ym1pdCgpOw0KfQ0KZnVuY3Rpb24gY29weWZpbGUoc25hbWUpew0KCXZhciB0b2ZpbGU7DQoJdG9maWxlID0gcHJvbXB0KCdPcmlnaW5hbCBmaWxlOicrc25hbWUrJ1xuUGxlYXNlIGlucHV0IG9iamVjdCBmaWxlIChmdWxscGF0aCk6JywgJycpOw0KCWlmICghdG9maWxlKSByZXR1cm47DQoJJCgnY29weWZpbGUnKS50b2ZpbGUudmFsdWU9dG9maWxlOw0KCSQoJ2NvcHlmaWxlJykuc25hbWUudmFsdWU9c25hbWU7DQoJJCgnY29weWZpbGUnKS5zdWJtaXQoKTsNCn0NCmZ1bmN0aW9uIHJlbmFtZShvbGRuYW1lKXsNCgl2YXIgbmV3ZmlsZW5hbWU7DQoJbmV3ZmlsZW5hbWUgPSBwcm9tcHQoJ0Zvcm1lciBmaWxlIG5hbWU6JytvbGRuYW1lKydcblBsZWFzZSBpbnB1dCBuZXcgZmlsZW5hbWU6JywgJycpOw0KCWlmICghbmV3ZmlsZW5hbWUpIHJldHVybjsNCgkkKCdyZW5hbWUnKS5uZXdmaWxlbmFtZS52YWx1ZT1uZXdmaWxlbmFtZTsNCgkkKCdyZW5hbWUnKS5vbGRuYW1lLnZhbHVlPW9sZG5hbWU7DQoJJCgncmVuYW1lJykuc3VibWl0KCk7DQp9DQpmdW5jdGlvbiBkb2ZpbGUoZG9pbmcsdGhlZmlsZSxtKXsNCglpZiAobSAmJiAhY29uZmlybShtKSkgew0KCQlyZXR1cm47DQoJfQ0KCSQoJ2ZpbGVsaXN0JykuZG9pbmcudmFsdWU9ZG9pbmc7DQoJaWYgKHRoZWZpbGUpew0KCQkkKCdmaWxlbGlzdCcpLnRoZWZpbGUudmFsdWU9dGhlZmlsZTsNCgl9DQoJJCgnZmlsZWxpc3QnKS5zdWJtaXQoKTsNCn0NCmZ1bmN0aW9uIGNyZWF0ZWZpbGUobm93cGF0aCl7DQoJdmFyIGZpbGVuYW1lOw0KCWZpbGVuYW1lID0gcHJvbXB0KCdQbGVhc2UgaW5wdXQgdGhlIGZpbGUgbmFtZTonLCAnJyk7DQoJaWYgKCFmaWxlbmFtZSkgcmV0dXJuOw0KCW9wZmlsZSgnZWRpdGZpbGUnLG5vd3BhdGggKyBmaWxlbmFtZSxub3dwYXRoKTsNCn0NCmZ1bmN0aW9uIG9wZmlsZShhY3Rpb24sb3BmaWxlLGRpcil7DQoJJCgnZmlsZW9wZm9ybScpLmFjdGlvbi52YWx1ZT1hY3Rpb247DQoJJCgnZmlsZW9wZm9ybScpLm9wZmlsZS52YWx1ZT1vcGZpbGU7DQoJJCgnZmlsZW9wZm9ybScpLmRpci52YWx1ZT1kaXI7DQoJJCgnZmlsZW9wZm9ybScpLnN1Ym1pdCgpOw0KfQ0KZnVuY3Rpb24gZ29kaXIoZGlyLHZpZXdfd3JpdGFibGUpew0KCWlmICh2aWV3X3dyaXRhYmxlKSB7DQoJCSQoJ2dvZGlyJykudmlld193cml0YWJsZS52YWx1ZT0xOw0KCX0NCgkkKCdnb2RpcicpLmRpci52YWx1ZT1kaXI7DQoJJCgnZ29kaXInKS5zdWJtaXQoKTsNCn0NCjwvc2NyaXB0Pg0KICA8P3BocA0KCXRiaGVhZCgpOw0KCXAoJzxmb3JtIGFjdGlvbj0iJy4kc2VsZi4nIiBtZXRob2Q9IlBPU1QiIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiPjx0ciBjbGFzcz0iYWx0MSI+PHRkIGNvbHNwYW49IjciIHN0eWxlPSJwYWRkaW5nOjVweDsiPicpOw0KCXAoJzxkaXYgc3R5bGU9ImZsb2F0OnJpZ2h0OyI+PGlucHV0IGNsYXNzPSJpbnB1dCIgbmFtZT0idXBsb2FkZmlsZSIgdmFsdWU9IiIgdHlwZT0iZmlsZSIgLz4gPGlucHV0IGNsYXNzPSJidCIgbmFtZT0iZG91cGZpbGUiIHZhbHVlPSJVcGxvYWQiIHR5cGU9InN1Ym1pdCIgLz48aW5wdXQgbmFtZT0idXBsb2FkZGlyIiB2YWx1ZT0iJy4kZGlyLiciIHR5cGU9ImhpZGRlbiIgLz48aW5wdXQgbmFtZT0iZGlyIiB2YWx1ZT0iJy4kZGlyLiciIHR5cGU9ImhpZGRlbiIgLz48L2Rpdj4nKTsNCglwKCc8YSBocmVmPSJqYXZhc2NyaXB0OmdvZGlyKFwnJy4kX1NFUlZFUlsiRE9DVU1FTlRfUk9PVCJdLidcJyk7Ij5XZWJSb290PC9hPicpOw0KCWlmICgkdmlld193cml0YWJsZSkgew0KCQlwKCcgfCA8YSBocmVmPSJqYXZhc2NyaXB0OmdvZGlyKFwnJy4kbm93cGF0aC4nXCcpOyI+VmlldyBBbGw8L2E+Jyk7DQoJfSBlbHNlIHsNCgkJcCgnIHwgPGEgaHJlZj0iamF2YXNjcmlwdDpnb2RpcihcJycuJG5vd3BhdGguJ1wnLFwnMVwnKTsiPlZpZXcgV3JpdGFibGU8L2E+Jyk7DQoJfQ0KCXAoJyB8IDxhIGhyZWY9ImphdmFzY3JpcHQ6Y3JlYXRlZGlyKCk7Ij5DcmVhdGUgRGlyZWN0b3J5PC9hPiB8IDxhIGhyZWY9ImphdmFzY3JpcHQ6Y3JlYXRlZmlsZShcJycuJG5vd3BhdGguJ1wnKTsiPkNyZWF0ZSBGaWxlPC9hPicpOw0KCWlmIChJU19XSU4gJiYgSVNfQ09NKSB7DQoJCSRvYmogPSBuZXcgQ09NKCdzY3JpcHRpbmcuZmlsZXN5c3RlbW9iamVjdCcpOw0KCQlpZiAoJG9iaiAmJiBpc19vYmplY3QoJG9iaikpIHsNCgkJCSREcml2ZVR5cGVEQiA9IGFycmF5KDAgPT4gJ1Vua25vdycsMSA9PiAnUmVtb3ZhYmxlJywyID0+ICdGaXhlZCcsMyA9PiAnTmV0d29yaycsNCA9PiAnQ0RSb20nLDUgPT4gJ1JBTSBEaXNrJyk7DQoJCQlmb3JlYWNoKCRvYmotPkRyaXZlcyBhcyAkZHJpdmUpIHsNCgkJCQlpZiAoJGRyaXZlLT5Ecml2ZVR5cGUgPT0gMikgew0KCQkJCQlwKCcgfCA8YSBocmVmPSJqYXZhc2NyaXB0OmdvZGlyKFwnJy4kZHJpdmUtPlBhdGguJy9cJyk7IiB0aXRsZT0iU2l6ZTonLnNpemVjb3VudCgkZHJpdmUtPlRvdGFsU2l6ZSkuJyYjMTM7RnJlZTonLnNpemVjb3VudCgkZHJpdmUtPkZyZWVTcGFjZSkuJyYjMTM7VHlwZTonLiREcml2ZVR5cGVEQlskZHJpdmUtPkRyaXZlVHlwZV0uJyI+Jy4kRHJpdmVUeXBlREJbJGRyaXZlLT5Ecml2ZVR5cGVdLicoJy4kZHJpdmUtPlBhdGguJyk8L2E+Jyk7DQoJCQkJfSBlbHNlIHsNCgkJCQkJcCgnIHwgPGEgaHJlZj0iamF2YXNjcmlwdDpnb2RpcihcJycuJGRyaXZlLT5QYXRoLicvXCcpOyIgdGl0bGU9IlR5cGU6Jy4kRHJpdmVUeXBlREJbJGRyaXZlLT5Ecml2ZVR5cGVdLiciPicuJERyaXZlVHlwZURCWyRkcml2ZS0+RHJpdmVUeXBlXS4nKCcuJGRyaXZlLT5QYXRoLicpPC9hPicpOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCX0NCg0KCXAoJzwvdGQ+PC90cj48L2Zvcm0+Jyk7DQoNCglwKCc8dHIgY2xhc3M9ImhlYWQiPjx0ZD4mbmJzcDs8L3RkPjx0ZD5GaWxlbmFtZTwvdGQ+PHRkIHdpZHRoPSIxNiUiPkxhc3QgbW9kaWZpZWQ8L3RkPjx0ZCB3aWR0aD0iMTAlIj5TaXplPC90ZD48dGQgd2lkdGg9IjIwJSI+Q2htb2QgLyBQZXJtczwvdGQ+PHRkIHdpZHRoPSIyMiUiPkFjdGlvbjwvdGQ+PC90cj4nKTsNCiAgICANCgkvLyMmIzEwOTc7K3wtICstKystfCstKyB8LS0rLSsNCgkkZGlyZGF0YT1hcnJheSgpOw0KCSRmaWxlZGF0YT1hcnJheSgpOw0KDQoJaWYgKCR2aWV3X3dyaXRhYmxlKSB7DQoJCSRkaXJkYXRhID0gR2V0TGlzdCgkbm93cGF0aCk7DQoJfSBlbHNlIHsNCgkJLy8gLSstKy0tIyYjMTEwMTsNCgkJJGRpcnM9QG9wZW5kaXIoJGRpcik7DQoJCXdoaWxlICgkZmlsZT1AcmVhZGRpcigkZGlycykpIHsNCgkJCSRmaWxlcGF0aD0kbm93cGF0aC4kZmlsZTsNCgkJCWlmKEBpc19kaXIoJGZpbGVwYXRoKSl7DQoJCQkJJGRpcmRiWydmaWxlbmFtZSddPSRmaWxlOw0KCQkJCSRkaXJkYlsnbXRpbWUnXT1AZGF0ZSgnWS1tLWQgSDppOnMnLGZpbGVtdGltZSgkZmlsZXBhdGgpKTsNCgkJCQkkZGlyZGJbJ2RpcmNobW9kJ109Z2V0Q2htb2QoJGZpbGVwYXRoKTsNCgkJCQkkZGlyZGJbJ2RpcnBlcm0nXT1nZXRQZXJtcygkZmlsZXBhdGgpOw0KCQkJCSRkaXJkYlsnZmlsZW93bmVyJ109Z2V0VXNlcigkZmlsZXBhdGgpOw0KCQkJCSRkaXJkYlsnZGlybGluayddPSRub3dwYXRoOw0KCQkJCSRkaXJkYlsnc2VydmVyX2xpbmsnXT0kZmlsZXBhdGg7DQoJCQkJJGRpcmRiWydjbGllbnRfbGluayddPXVlKCRmaWxlcGF0aCk7DQoJCQkJJGRpcmRhdGFbXT0kZGlyZGI7DQoJCQl9IGVsc2Ugew0KCQkJCSRmaWxlZGJbJ2ZpbGVuYW1lJ109JGZpbGU7DQoJCQkJJGZpbGVkYlsnc2l6ZSddPXNpemVjb3VudChAZmlsZXNpemUoJGZpbGVwYXRoKSk7DQoJCQkJJGZpbGVkYlsnbXRpbWUnXT1AZGF0ZSgnWS1tLWQgSDppOnMnLGZpbGVtdGltZSgkZmlsZXBhdGgpKTsNCgkJCQkkZmlsZWRiWydmaWxlY2htb2QnXT1nZXRDaG1vZCgkZmlsZXBhdGgpOw0KCQkJCSRmaWxlZGJbJ2ZpbGVwZXJtJ109Z2V0UGVybXMoJGZpbGVwYXRoKTsNCgkJCQkkZmlsZWRiWydmaWxlb3duZXInXT1nZXRVc2VyKCRmaWxlcGF0aCk7DQoJCQkJJGZpbGVkYlsnZGlybGluayddPSRub3dwYXRoOw0KCQkJCSRmaWxlZGJbJ3NlcnZlcl9saW5rJ109JGZpbGVwYXRoOw0KCQkJCSRmaWxlZGJbJ2NsaWVudF9saW5rJ109dWUoJGZpbGVwYXRoKTsNCgkJCQkkZmlsZWRhdGFbXT0kZmlsZWRiOw0KCQkJfQ0KCQl9Ly8gd2hpbGUNCgkJdW5zZXQoJGRpcmRiKTsNCgkJdW5zZXQoJGZpbGVkYik7DQoJCUBjbG9zZWRpcigkZGlycyk7DQoJfQ0KCUBzb3J0KCRkaXJkYXRhKTsNCglAc29ydCgkZmlsZWRhdGEpOw0KCSRkaXJfaSA9ICcwJzsNCglmb3JlYWNoKCRkaXJkYXRhIGFzICRrZXkgPT4gJGRpcmRiKXsNCgkJaWYoJGRpcmRiWydmaWxlbmFtZSddIT0nLi4nICYmICRkaXJkYlsnZmlsZW5hbWUnXSE9Jy4nKSB7DQoJCQkkdGhpc2JnID0gYmcoKTsNCgkJCXAoJzx0ciBjbGFzcz0iJy4kdGhpc2JnLiciIG9ubW91c2VvdmVyPSJ0aGlzLmNsYXNzTmFtZT1cJ2ZvY3VzXCc7IiBvbm1vdXNlb3V0PSJ0aGlzLmNsYXNzTmFtZT1cJycuJHRoaXNiZy4nXCc7Ij4nKTsNCgkJCXAoJzx0ZCB3aWR0aD0iMiUiIG5vd3JhcD48Zm9udCBmYWNlPSJ3aW5nZGluZ3MiIHNpemU9IjMiPjA8L2ZvbnQ+PC90ZD4nKTsNCgkJCXAoJzx0ZD48YSBocmVmPSJqYXZhc2NyaXB0OmdvZGlyKFwnJy4kZGlyZGJbJ3NlcnZlcl9saW5rJ10uJ1wnKTsiPicuJGRpcmRiWydmaWxlbmFtZSddLic8L2E+PC90ZD4nKTsNCgkJCXAoJzx0ZCBub3dyYXA+Jy4kZGlyZGJbJ210aW1lJ10uJzwvdGQ+Jyk7DQoJCQlwKCc8dGQgbm93cmFwPi0tPC90ZD4nKTsNCgkJCXAoJzx0ZCBub3dyYXA+Jyk7DQoJCQlwKCc8YSBocmVmPSJqYXZhc2NyaXB0OmZpbGVwZXJtKFwnJy4kZGlyZGJbJ3NlcnZlcl9saW5rJ10uJ1wnKTsiPicuJGRpcmRiWydkaXJjaG1vZCddLic8L2E+IC8gJyk7DQoJCQlwKCc8YSBocmVmPSJqYXZhc2NyaXB0OmZpbGVwZXJtKFwnJy4kZGlyZGJbJ3NlcnZlcl9saW5rJ10uJ1wnKTsiPicuJGRpcmRiWydkaXJwZXJtJ10uJzwvYT4nLiRkaXJkYlsnZmlsZW93bmVyJ10uJzwvdGQ+Jyk7DQoJCQlwKCc8dGQgbm93cmFwPjxhIGhyZWY9ImphdmFzY3JpcHQ6ZG9maWxlKFwnZGVsZGlyXCcsXCcnLiRkaXJkYlsnc2VydmVyX2xpbmsnXS4nXCcsXCdBcmUgeW91IHN1cmUgd2lsbCBkZWxldGUgJy4kZGlyZGJbJ2ZpbGVuYW1lJ10uJz8gXFxuXFxuSWYgbm9uLWVtcHR5IGRpcmVjdG9yeSwgd2lsbCBiZSBkZWxldGUgYWxsIHRoZSBmaWxlcy5cJykiPkRlbDwvYT4gfCA8YSBocmVmPSJqYXZhc2NyaXB0OnJlbmFtZShcJycuJGRpcmRiWydzZXJ2ZXJfbGluayddLidcJyk7Ij5SZW5hbWU8L2E+PC90ZD4nKTsNCgkJCXAoJzwvdHI+Jyk7DQoJCQkkZGlyX2krKzsNCgkJfSBlbHNlIHsNCgkJCWlmKCRkaXJkYlsnZmlsZW5hbWUnXT09Jy4uJykgew0KCQkJCXAoJzx0ciBjbGFzcz0nLmJnKCkuJz4nKTsNCgkJCQlwKCc8dGQgYWxpZ249ImNlbnRlciI+PGZvbnQgZmFjZT0iV2luZ2RpbmdzIDMiIHNpemU9ND49PC9mb250PjwvdGQ+PHRkIG5vd3JhcCBjb2xzcGFuPSI1Ij48YSBocmVmPSJqYXZhc2NyaXB0OmdvZGlyKFwnJy5nZXRVcFBhdGgoJG5vd3BhdGgpLidcJyk7Ij5QYXJlbnQgRGlyZWN0b3J5PC9hPjwvdGQ+Jyk7DQoJCQkJcCgnPC90cj4nKTsNCgkJCX0NCgkJfQ0KCX0NCg0KCXAoJzx0ciBiZ2NvbG9yPSIjZGRkZGRkIiBzdGx5ZT0iYm9yZGVyLXRvcDoxcHggc29saWQgI2ZmZjtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZGRkOyI+PHRkIGNvbHNwYW49IjYiIGhlaWdodD0iNSI+PC90ZD48L3RyPicpOw0KCXAoJzxmb3JtIGlkPSJmaWxlbGlzdCIgbmFtZT0iZmlsZWxpc3QiIGFjdGlvbj0iJy4kc2VsZi4nIiBtZXRob2Q9InBvc3QiPicpOw0KCW1ha2VoaWRlKCdhY3Rpb24nLCdmaWxlJyk7DQoJbWFrZWhpZGUoJ3RoZWZpbGUnKTsNCgltYWtlaGlkZSgnZG9pbmcnKTsNCgltYWtlaGlkZSgnZGlyJywkbm93cGF0aCk7DQoJJGZpbGVfaSA9ICcwJzsNCglmb3JlYWNoKCRmaWxlZGF0YSBhcyAka2V5ID0+ICRmaWxlZGIpew0KCQlpZigkZmlsZWRiWydmaWxlbmFtZSddIT0nLi4nICYmICRmaWxlZGJbJ2ZpbGVuYW1lJ10hPScuJykgew0KCQkJJGZpbGV1cmwgPSBzdHJfcmVwbGFjZShTQV9ST09ULCcnLCRmaWxlZGJbJ3NlcnZlcl9saW5rJ10pOw0KCQkJJHRoaXNiZyA9IGJnKCk7DQoJCQlwKCc8dHIgY2xhc3M9IicuJHRoaXNiZy4nIiBvbm1vdXNlb3Zlcj0idGhpcy5jbGFzc05hbWU9XCdmb2N1c1wnOyIgb25tb3VzZW91dD0idGhpcy5jbGFzc05hbWU9XCcnLiR0aGlzYmcuJ1wnOyI+Jyk7DQoJCQlwKCc8dGQgd2lkdGg9IjIlIiBub3dyYXA+PGlucHV0IHR5cGU9ImNoZWNrYm94IiB2YWx1ZT0iMSIgbmFtZT0iZGxbJy4kZmlsZWRiWydzZXJ2ZXJfbGluayddLiddIj48L3RkPicpOw0KCQkJcCgnPHRkPjxhIGhyZWY9IicuJGZpbGV1cmwuJyIgdGFyZ2V0PSJfYmxhbmsiPicuJGZpbGVkYlsnZmlsZW5hbWUnXS4nPC9hPjwvdGQ+Jyk7DQoJCQlwKCc8dGQgbm93cmFwPicuJGZpbGVkYlsnbXRpbWUnXS4nPC90ZD4nKTsNCgkJCXAoJzx0ZCBub3dyYXA+Jy4kZmlsZWRiWydzaXplJ10uJzwvdGQ+Jyk7DQoJCQlwKCc8dGQgbm93cmFwPicpOw0KCQkJcCgnPGEgaHJlZj0iamF2YXNjcmlwdDpmaWxlcGVybShcJycuJGZpbGVkYlsnc2VydmVyX2xpbmsnXS4nXCcpOyI+Jy4kZmlsZWRiWydmaWxlY2htb2QnXS4nPC9hPiAvICcpOw0KCQkJcCgnPGEgaHJlZj0iamF2YXNjcmlwdDpmaWxlcGVybShcJycuJGZpbGVkYlsnc2VydmVyX2xpbmsnXS4nXCcpOyI+Jy4kZmlsZWRiWydmaWxlcGVybSddLic8L2E+Jy4kZmlsZWRiWydmaWxlb3duZXInXS4nPC90ZD4nKTsNCgkJCXAoJzx0ZCBub3dyYXA+Jyk7DQoJCQlwKCc8YSBocmVmPSJqYXZhc2NyaXB0OmRvZmlsZShcJ2Rvd25maWxlXCcsXCcnLiRmaWxlZGJbJ3NlcnZlcl9saW5rJ10uJ1wnKTsiPkRvd248L2E+IHwgJyk7DQoJCQlwKCc8YSBocmVmPSJqYXZhc2NyaXB0OmNvcHlmaWxlKFwnJy4kZmlsZWRiWydzZXJ2ZXJfbGluayddLidcJyk7Ij5Db3B5PC9hPiB8ICcpOw0KCQkJcCgnPGEgaHJlZj0iamF2YXNjcmlwdDpvcGZpbGUoXCdlZGl0ZmlsZVwnLFwnJy4kZmlsZWRiWydzZXJ2ZXJfbGluayddLidcJyxcJycuJGZpbGVkYlsnZGlybGluayddLidcJyk7Ij5FZGl0PC9hPiB8ICcpOw0KCQkJcCgnPGEgaHJlZj0iamF2YXNjcmlwdDpyZW5hbWUoXCcnLiRmaWxlZGJbJ3NlcnZlcl9saW5rJ10uJ1wnKTsiPlJlbmFtZTwvYT4gfCAnKTsNCgkJCXAoJzxhIGhyZWY9ImphdmFzY3JpcHQ6b3BmaWxlKFwnbmV3dGltZVwnLFwnJy4kZmlsZWRiWydzZXJ2ZXJfbGluayddLidcJyxcJycuJGZpbGVkYlsnZGlybGluayddLidcJyk7Ij5UaW1lPC9hPicpOw0KCQkJcCgnPC90ZD48L3RyPicpOw0KCQkJJGZpbGVfaSsrOw0KCQl9DQoJfQ0KCXAoJzx0ciBjbGFzcz0iJy5iZygpLiciPjx0ZCBhbGlnbj0iY2VudGVyIj48aW5wdXQgbmFtZT0iY2hrYWxsIiB2YWx1ZT0ib24iIHR5cGU9ImNoZWNrYm94IiBvbmNsaWNrPSJDaGVja0FsbCh0aGlzLmZvcm0pIiAvPjwvdGQ+PHRkPjxhIGhyZWY9ImphdmFzY3JpcHQ6ZG9maWxlKFwnZG93bnJhclwnKTsiPlBhY2tpbmcgZG93bmxvYWQgc2VsZWN0ZWQ8L2E+IC0gPGEgaHJlZj0iamF2YXNjcmlwdDpkb2ZpbGUoXCdkZWxmaWxlc1wnKTsiPkRlbGV0ZSBzZWxlY3RlZDwvYT48L3RkPjx0ZCBjb2xzcGFuPSI0IiBhbGlnbj0icmlnaHQiPicuJGRpcl9pLicgZGlyZWN0b3JpZXMgLyAnLiRmaWxlX2kuJyBmaWxlczwvdGQ+PC90cj4nKTsNCglwKCc8L2Zvcm0+PC90YWJsZT4nKTsNCn0vLyBlbmQgZGlyDQoNCmVsc2VpZiAoJGFjdGlvbiA9PSAnc3FsZmlsZScpIHsNCglpZigkZG9pbmc9PSJteXNxbHVwbG9hZCIpew0KCQkkZmlsZSA9ICRfRklMRVNbJ3VwbG9hZGZpbGUnXTsNCgkJJGZpbGVuYW1lID0gJGZpbGVbJ3RtcF9uYW1lJ107DQoJCWlmIChmaWxlX2V4aXN0cygkc2F2ZXBhdGgpKSB7DQoJCQltKCdUaGUgZ29hbCBmaWxlIGhhcyBhbHJlYWR5IGV4aXN0ZWQnKTsNCgkJfSBlbHNlIHsNCgkJCWlmKCEkZmlsZW5hbWUpIHsNCgkJCQltKCdQbGVhc2UgY2hvb3NlIGEgZmlsZScpOw0KCQkJfSBlbHNlIHsNCgkJCQkkZnA9QGZvcGVuKCRmaWxlbmFtZSwncicpOw0KCQkJCSRjb250ZW50cz1AZnJlYWQoJGZwLCBmaWxlc2l6ZSgkZmlsZW5hbWUpKTsNCgkJCQlAZmNsb3NlKCRmcCk7DQoJCQkJJGNvbnRlbnRzID0gYmluMmhleCgkY29udGVudHMpOw0KCQkJCWlmKCEkdXBuYW1lKSAkdXBuYW1lID0gJGZpbGVbJ25hbWUnXTsNCgkJCQlkYmNvbm4oJGRiaG9zdCwkZGJ1c2VyLCRkYnBhc3MsJGRibmFtZSwkY2hhcnNldCwkZGJwb3J0KTsNCgkJCQkkcmVzdWx0ID0gcSgiU0VMRUNUIDB4eyRjb250ZW50c30gRlJPTSBteXNxbC51c2VyIElOVE8gRFVNUEZJTEUgJyRzYXZlcGF0aCc7Iik7DQoJCQkJbSgkcmVzdWx0ID8gJ1VwbG9hZCBzdWNjZXNzJyA6ICdVcGxvYWQgaGFzIGZhaWxlZDogJy5teXNxbF9lcnJvcigpKTsNCgkJCX0NCgkJfQ0KCX0NCj8+DQo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+DQpmdW5jdGlvbiBteXNxbGZpbGUoZG9pbmcpew0KCWlmKCFkb2luZykgcmV0dXJuOw0KCSQoJ2RvaW5nJykudmFsdWU9ZG9pbmc7DQoJJCgnbXlzcWxmaWxlJykuZGJob3N0LnZhbHVlPSQoJ2RiaW5mbycpLmRiaG9zdC52YWx1ZTsNCgkkKCdteXNxbGZpbGUnKS5kYnBvcnQudmFsdWU9JCgnZGJpbmZvJykuZGJwb3J0LnZhbHVlOw0KCSQoJ215c3FsZmlsZScpLmRidXNlci52YWx1ZT0kKCdkYmluZm8nKS5kYnVzZXIudmFsdWU7DQoJJCgnbXlzcWxmaWxlJykuZGJwYXNzLnZhbHVlPSQoJ2RiaW5mbycpLmRicGFzcy52YWx1ZTsNCgkkKCdteXNxbGZpbGUnKS5kYm5hbWUudmFsdWU9JCgnZGJpbmZvJykuZGJuYW1lLnZhbHVlOw0KCSQoJ215c3FsZmlsZScpLmNoYXJzZXQudmFsdWU9JCgnZGJpbmZvJykuY2hhcnNldC52YWx1ZTsNCgkkKCdteXNxbGZpbGUnKS5zdWJtaXQoKTsNCn0NCjwvc2NyaXB0Pg0KPD9waHANCgkhJGRiaG9zdCAmJiAkZGJob3N0ID0gJ2xvY2FsaG9zdCc7DQoJISRkYnVzZXIgJiYgJGRidXNlciA9ICdyb290JzsNCgkhJGRicG9ydCAmJiAkZGJwb3J0ID0gJzMzMDYnOw0KCSRjaGFyc2V0cyA9IGFycmF5KCcnPT4nRGVmYXVsdCcsJ2diayc9PidHQksnLCAnYmlnNSc9PidCaWc1JywgJ3V0ZjgnPT4nVVRGLTgnLCAnbGF0aW4xJz0+J0xhdGluMScpOw0KCWZvcm1oZWFkKGFycmF5KCd0aXRsZSc9PidNWVNRTCBJbmZvcm1hdGlvbicsJ25hbWUnPT4nZGJpbmZvJykpOw0KCW1ha2VoaWRlKCdhY3Rpb24nLCdzcWxmaWxlJyk7DQoJcCgnPHA+Jyk7DQoJcCgnREJIb3N0OicpOw0KCW1ha2VpbnB1dChhcnJheSgnbmFtZSc9PidkYmhvc3QnLCdzaXplJz0+MjAsJ3ZhbHVlJz0+JGRiaG9zdCkpOw0KCXAoJzonKTsNCgltYWtlaW5wdXQoYXJyYXkoJ25hbWUnPT4nZGJwb3J0Jywnc2l6ZSc9PjQsJ3ZhbHVlJz0+JGRicG9ydCkpOw0KCXAoJ0RCVXNlcjonKTsNCgltYWtlaW5wdXQoYXJyYXkoJ25hbWUnPT4nZGJ1c2VyJywnc2l6ZSc9PjE1LCd2YWx1ZSc9PiRkYnVzZXIpKTsNCglwKCdEQlBhc3M6Jyk7DQoJbWFrZWlucHV0KGFycmF5KCduYW1lJz0+J2RicGFzcycsJ3NpemUnPT4xNSwndmFsdWUnPT4kZGJwYXNzKSk7DQoJcCgnREJOYW1lOicpOw0KCW1ha2VpbnB1dChhcnJheSgnbmFtZSc9PidkYm5hbWUnLCdzaXplJz0+MTUsJ3ZhbHVlJz0+JGRibmFtZSkpOw0KCXAoJ0RCQ2hhcnNldDonKTsNCgltYWtlc2VsZWN0KGFycmF5KCduYW1lJz0+J2NoYXJzZXQnLCdvcHRpb24nPT4kY2hhcnNldHMsJ3NlbGVjdGVkJz0+JGNoYXJzZXQpKTsNCglwKCc8L3A+Jyk7DQoJZm9ybWZvb3QoKTsNCglwKCc8Zm9ybSBhY3Rpb249IicuJHNlbGYuJyIgbWV0aG9kPSJQT1NUIiBlbmN0eXBlPSJtdWx0aXBhcnQvZm9ybS1kYXRhIiBuYW1lPSJteXNxbGZpbGUiIGlkPSJteXNxbGZpbGUiPicpOw0KCXAoJzxoMj5VcGxvYWQgZmlsZTwvaDI+Jyk7DQoJcCgnPHA+PGI+VGhpcyBvcGVyYXRpb24gdGhlIERCIHVzZXIgbXVzdCBoYXMgRklMRSBwcml2aWxlZ2U8L2I+PC9wPicpOw0KCXAoJzxwPlNhdmUgcGF0aChmdWxscGF0aCk6IDxpbnB1dCBjbGFzcz0iaW5wdXQiIG5hbWU9InNhdmVwYXRoIiBzaXplPSI0NSIgdHlwZT0idGV4dCIgLz4gQ2hvb3NlIGEgZmlsZTogPGlucHV0IGNsYXNzPSJpbnB1dCIgbmFtZT0idXBsb2FkZmlsZSIgdHlwZT0iZmlsZSIgLz4gPGEgaHJlZj0iamF2YXNjcmlwdDpteXNxbGZpbGUoXCdteXNxbHVwbG9hZFwnKTsiPlVwbG9hZDwvYT48L3A+Jyk7DQoJcCgnPGgyPkRvd25sb2FkIGZpbGU8L2gyPicpOw0KCXAoJzxwPkZpbGU6IDxpbnB1dCBjbGFzcz0iaW5wdXQiIG5hbWU9Im15c3FsZGxmaWxlIiBzaXplPSIxMTUiIHR5cGU9InRleHQiIC8+IDxhIGhyZWY9ImphdmFzY3JpcHQ6bXlzcWxmaWxlKFwnbXlzcWxkb3duXCcpOyI+RG93bmxvYWQ8L2E+PC9wPicpOw0KCW1ha2VoaWRlKCdkYmhvc3QnKTsNCgltYWtlaGlkZSgnZGJwb3J0Jyk7DQoJbWFrZWhpZGUoJ2RidXNlcicpOw0KCW1ha2VoaWRlKCdkYnBhc3MnKTsNCgltYWtlaGlkZSgnZGJuYW1lJyk7DQoJbWFrZWhpZGUoJ2NoYXJzZXQnKTsNCgltYWtlaGlkZSgnZG9pbmcnKTsNCgltYWtlaGlkZSgnYWN0aW9uJywnc3FsZmlsZScpOw0KCXAoJzwvZm9ybT4nKTsNCn0NCg0KZWxzZWlmICgkYWN0aW9uID09ICdzcWxhZG1pbicpIHsNCgkhJGRiaG9zdCAmJiAkZGJob3N0ID0gJ2xvY2FsaG9zdCc7DQoJISRkYnVzZXIgJiYgJGRidXNlciA9ICdyb290JzsNCgkhJGRicG9ydCAmJiAkZGJwb3J0ID0gJzMzMDYnOw0KCSRkYmZvcm0gPSAnPGlucHV0IHR5cGU9ImhpZGRlbiIgaWQ9ImNvbm5lY3QiIG5hbWU9ImNvbm5lY3QiIHZhbHVlPSIxIiAvPic7DQoJaWYoaXNzZXQoJGRiaG9zdCkpew0KCQkkZGJmb3JtIC49ICI8aW5wdXQgdHlwZT1cImhpZGRlblwiIGlkPVwiZGJob3N0XCIgbmFtZT1cImRiaG9zdFwiIHZhbHVlPVwiJGRiaG9zdFwiIC8+XG4iOw0KCX0NCglpZihpc3NldCgkZGJ1c2VyKSkgew0KCQkkZGJmb3JtIC49ICI8aW5wdXQgdHlwZT1cImhpZGRlblwiIGlkPVwiZGJ1c2VyXCIgbmFtZT1cImRidXNlclwiIHZhbHVlPVwiJGRidXNlclwiIC8+XG4iOw0KCX0NCglpZihpc3NldCgkZGJwYXNzKSkgew0KCQkkZGJmb3JtIC49ICI8aW5wdXQgdHlwZT1cImhpZGRlblwiIGlkPVwiZGJwYXNzXCIgbmFtZT1cImRicGFzc1wiIHZhbHVlPVwiJGRicGFzc1wiIC8+XG4iOw0KCX0NCglpZihpc3NldCgkZGJwb3J0KSkgew0KCQkkZGJmb3JtIC49ICI8aW5wdXQgdHlwZT1cImhpZGRlblwiIGlkPVwiZGJwb3J0XCIgbmFtZT1cImRicG9ydFwiIHZhbHVlPVwiJGRicG9ydFwiIC8+XG4iOw0KCX0NCglpZihpc3NldCgkZGJuYW1lKSkgew0KCQkkZGJmb3JtIC49ICI8aW5wdXQgdHlwZT1cImhpZGRlblwiIGlkPVwiZGJuYW1lXCIgbmFtZT1cImRibmFtZVwiIHZhbHVlPVwiJGRibmFtZVwiIC8+XG4iOw0KCX0NCglpZihpc3NldCgkY2hhcnNldCkpIHsNCgkJJGRiZm9ybSAuPSAiPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBpZD1cImNoYXJzZXRcIiBuYW1lPVwiY2hhcnNldFwiIHZhbHVlPVwiJGNoYXJzZXRcIiAvPlxuIjsNCgl9DQoNCglpZiAoJGRvaW5nID09ICdiYWNrdXBteXNxbCcgJiYgJHNhdmVhc2ZpbGUpIHsNCgkJaWYgKCEkdGFibGUpIHsNCgkJCW0oJ1BsZWFzZSBjaG9vc2UgdGhlIHRhYmxlJyk7DQoJCX0gZWxzZSB7DQoJCQlkYmNvbm4oJGRiaG9zdCwkZGJ1c2VyLCRkYnBhc3MsJGRibmFtZSwkY2hhcnNldCwkZGJwb3J0KTsNCgkJCSR0YWJsZSA9IGFycmF5X2ZsaXAoJHRhYmxlKTsNCgkJCSRmcCA9IEBmb3BlbigkcGF0aCwndycpOw0KCQkJaWYgKCRmcCkgew0KCQkJCSRyZXN1bHQgPSBxKCdTSE9XIHRhYmxlcycpOw0KCQkJCWlmICghJHJlc3VsdCkgcCgnPGgyPicubXlzcWxfZXJyb3IoKS4nPC9oMj4nKTsNCgkJCQkkbXlzcWxkYXRhID0gJyc7DQoJCQkJd2hpbGUgKCRjdXJyb3cgPSBteXNxbF9mZXRjaF9hcnJheSgkcmVzdWx0KSkgew0KCQkJCQlpZiAoaXNzZXQoJHRhYmxlWyRjdXJyb3dbMF1dKSkgew0KCQkJCQkJc3FsZHVtcHRhYmxlKCRjdXJyb3dbMF0sICRmcCk7DQoJCQkJCX0NCgkJCQl9DQoJCQkJZmNsb3NlKCRmcCk7DQoJCQkJJGZpbGV1cmwgPSBzdHJfcmVwbGFjZShTQV9ST09ULCcnLCRwYXRoKTsNCgkJCQltKCdEYXRhYmFzZSBoYXMgc3VjY2VzcyBiYWNrdXAgdG8gPGEgaHJlZj0iJy4kZmlsZXVybC4nIiB0YXJnZXQ9Il9ibGFuayI+Jy4kcGF0aC4nPC9hPicpOw0KCQkJCW15c3FsX2Nsb3NlKCk7DQoJCQl9IGVsc2Ugew0KCQkJCW0oJ0JhY2t1cCBmYWlsZWQnKTsNCgkJCX0NCgkJfQ0KCX0NCglpZiAoJGluc2VydCAmJiAkaW5zZXJ0c3FsKSB7DQoJCSRrZXlzdHIgPSAkdmFsc3RyID0gJHRtcCA9ICcnOw0KCQlmb3JlYWNoKCRpbnNlcnRzcWwgYXMgJGtleSA9PiAkdmFsKSB7DQoJCQlpZiAoJHZhbCkgew0KCQkJCSRrZXlzdHIgLj0gJHRtcC4ka2V5Ow0KCQkJCSR2YWxzdHIgLj0gJHRtcC4iJyIuYWRkc2xhc2hlcygkdmFsKS4iJyI7DQoJCQkJJHRtcCA9ICcsJzsNCgkJCX0NCgkJfQ0KCQlpZiAoJGtleXN0ciAmJiAkdmFsc3RyKSB7DQoJCQlkYmNvbm4oJGRiaG9zdCwkZGJ1c2VyLCRkYnBhc3MsJGRibmFtZSwkY2hhcnNldCwkZGJwb3J0KTsNCgkJCW0ocSgiSU5TRVJUIElOVE8gJHRhYmxlbmFtZSAoJGtleXN0cikgVkFMVUVTICgkdmFsc3RyKSIpID8gJ0luc2VydCBuZXcgcmVjb3JkIG9mIHN1Y2Nlc3MnIDogbXlzcWxfZXJyb3IoKSk7DQoJCX0NCgl9DQoJaWYgKCR1cGRhdGUgJiYgJGluc2VydHNxbCAmJiAkYmFzZTY0KSB7DQoJCSR2YWxzdHIgPSAkdG1wID0gJyc7DQoJCWZvcmVhY2goJGluc2VydHNxbCBhcyAka2V5ID0+ICR2YWwpIHsNCgkJCSR2YWxzdHIgLj0gJHRtcC4ka2V5LiI9JyIuYWRkc2xhc2hlcygkdmFsKS4iJyI7DQoJCQkkdG1wID0gJywnOw0KCQl9DQoJCWlmICgkdmFsc3RyKSB7DQoJCQkkd2hlcmUgPSBiYXNlNjRfZGVjb2RlKCRiYXNlNjQpOw0KCQkJZGJjb25uKCRkYmhvc3QsJGRidXNlciwkZGJwYXNzLCRkYm5hbWUsJGNoYXJzZXQsJGRicG9ydCk7DQoJCQltKHEoIlVQREFURSAkdGFibGVuYW1lIFNFVCAkdmFsc3RyIFdIRVJFICR3aGVyZSBMSU1JVCAxIikgPyAnUmVjb3JkIHVwZGF0aW5nJyA6IG15c3FsX2Vycm9yKCkpOw0KCQl9DQoJfQ0KCWlmICgkZG9pbmcgPT0gJ2RlbCcgJiYgJGJhc2U2NCkgew0KCQkkd2hlcmUgPSBiYXNlNjRfZGVjb2RlKCRiYXNlNjQpOw0KCQkkZGVsZXRlX3NxbCA9ICJERUxFVEUgRlJPTSAkdGFibGVuYW1lIFdIRVJFICR3aGVyZSI7DQoJCWRiY29ubigkZGJob3N0LCRkYnVzZXIsJGRicGFzcywkZGJuYW1lLCRjaGFyc2V0LCRkYnBvcnQpOw0KCQltKHEoIkRFTEVURSBGUk9NICR0YWJsZW5hbWUgV0hFUkUgJHdoZXJlIikgPyAnRGVsZXRpb24gcmVjb3JkIG9mIHN1Y2Nlc3MnIDogbXlzcWxfZXJyb3IoKSk7DQoJfQ0KDQoJaWYgKCR0YWJsZW5hbWUgJiYgJGRvaW5nID09ICdkcm9wJykgew0KCQlkYmNvbm4oJGRiaG9zdCwkZGJ1c2VyLCRkYnBhc3MsJGRibmFtZSwkY2hhcnNldCwkZGJwb3J0KTsNCgkJaWYgKHEoIkRST1AgVEFCTEUgJHRhYmxlbmFtZSIpKSB7DQoJCQltKCdEcm9wIHRhYmxlIG9mIHN1Y2Nlc3MnKTsNCgkJCSR0YWJsZW5hbWUgPSAnJzsNCgkJfSBlbHNlIHsNCgkJCW0obXlzcWxfZXJyb3IoKSk7DQoJCX0NCgl9DQoNCgkkY2hhcnNldHMgPSBhcnJheSgnJz0+J0RlZmF1bHQnLCdnYmsnPT4nR0JLJywgJ2JpZzUnPT4nQmlnNScsICd1dGY4Jz0+J1VURi04JywgJ2xhdGluMSc9PidMYXRpbjEnKTsNCg0KCWZvcm1oZWFkKGFycmF5KCd0aXRsZSc9PidNWVNRTCBNYW5hZ2VyJykpOw0KCW1ha2VoaWRlKCdhY3Rpb24nLCdzcWxhZG1pbicpOw0KCXAoJzxwPicpOw0KCXAoJ0RCSG9zdDonKTsNCgltYWtlaW5wdXQoYXJyYXkoJ25hbWUnPT4nZGJob3N0Jywnc2l6ZSc9PjIwLCd2YWx1ZSc9PiRkYmhvc3QpKTsNCglwKCc6Jyk7DQoJbWFrZWlucHV0KGFycmF5KCduYW1lJz0+J2RicG9ydCcsJ3NpemUnPT40LCd2YWx1ZSc9PiRkYnBvcnQpKTsNCglwKCdEQlVzZXI6Jyk7DQoJbWFrZWlucHV0KGFycmF5KCduYW1lJz0+J2RidXNlcicsJ3NpemUnPT4xNSwndmFsdWUnPT4kZGJ1c2VyKSk7DQoJcCgnREJQYXNzOicpOw0KCW1ha2VpbnB1dChhcnJheSgnbmFtZSc9PidkYnBhc3MnLCdzaXplJz0+MTUsJ3ZhbHVlJz0+JGRicGFzcykpOw0KCXAoJ0RCQ2hhcnNldDonKTsNCgltYWtlc2VsZWN0KGFycmF5KCduYW1lJz0+J2NoYXJzZXQnLCdvcHRpb24nPT4kY2hhcnNldHMsJ3NlbGVjdGVkJz0+JGNoYXJzZXQpKTsNCgltYWtlaW5wdXQoYXJyYXkoJ25hbWUnPT4nY29ubmVjdCcsJ3ZhbHVlJz0+J0Nvbm5lY3QnLCd0eXBlJz0+J3N1Ym1pdCcsJ2NsYXNzJz0+J2J0JykpOw0KCXAoJzwvcD4nKTsNCglmb3JtZm9vdCgpOw0KPz4NCjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4NCmZ1bmN0aW9uIGVkaXRyZWNvcmQoYWN0aW9uLCBiYXNlNjQsIHRhYmxlbmFtZSl7DQoJaWYgKGFjdGlvbiA9PSAnZGVsJykgew0KCQlpZiAoIWNvbmZpcm0oJ0lzIG9yIGlzblwndCBkZWxldGlvbiByZWNvcmQ/JykpIHJldHVybjsNCgl9DQoJJCgncmVjb3JkbGlzdCcpLmRvaW5nLnZhbHVlPWFjdGlvbjsNCgkkKCdyZWNvcmRsaXN0JykuYmFzZTY0LnZhbHVlPWJhc2U2NDsNCgkkKCdyZWNvcmRsaXN0JykudGFibGVuYW1lLnZhbHVlPXRhYmxlbmFtZTsNCgkkKCdyZWNvcmRsaXN0Jykuc3VibWl0KCk7DQp9DQpmdW5jdGlvbiBtb2RkYm5hbWUoZGJuYW1lKSB7DQoJaWYoIWRibmFtZSkgcmV0dXJuOw0KCSQoJ3NldGRibmFtZScpLmRibmFtZS52YWx1ZT1kYm5hbWU7DQoJJCgnc2V0ZGJuYW1lJykuc3VibWl0KCk7DQp9DQpmdW5jdGlvbiBzZXR0YWJsZSh0YWJsZW5hbWUsZG9pbmcscGFnZSkgew0KCWlmKCF0YWJsZW5hbWUpIHJldHVybjsNCglpZiAoZG9pbmcpIHsNCgkJJCgnc2V0dGFibGUnKS5kb2luZy52YWx1ZT1kb2luZzsNCgl9DQoJaWYgKHBhZ2UpIHsNCgkJJCgnc2V0dGFibGUnKS5wYWdlLnZhbHVlPXBhZ2U7DQoJfQ0KCSQoJ3NldHRhYmxlJykudGFibGVuYW1lLnZhbHVlPXRhYmxlbmFtZTsNCgkkKCdzZXR0YWJsZScpLnN1Ym1pdCgpOw0KfQ0KPC9zY3JpcHQ+DQo8P3BocA0KCS8vIysrJiMxMTE4Oyt8LSsNCglmb3JtaGVhZChhcnJheSgnbmFtZSc9PidyZWNvcmRsaXN0JykpOw0KCW1ha2VoaWRlKCdkb2luZycpOw0KCW1ha2VoaWRlKCdhY3Rpb24nLCdzcWxhZG1pbicpOw0KCW1ha2VoaWRlKCdiYXNlNjQnKTsNCgltYWtlaGlkZSgndGFibGVuYW1lJyk7DQoJcCgkZGJmb3JtKTsNCglmb3JtZm9vdCgpOw0KDQoJLy8tJiMxMDczO3wmIzEwODA7LSArfCsmIzEwOTA7DQoJZm9ybWhlYWQoYXJyYXkoJ25hbWUnPT4nc2V0ZGJuYW1lJykpOw0KCW1ha2VoaWRlKCdhY3Rpb24nLCdzcWxhZG1pbicpOw0KCXAoJGRiZm9ybSk7DQoJaWYgKCEkZGJuYW1lKSB7DQoJCW1ha2VoaWRlKCdkYm5hbWUnKTsNCgl9DQoJZm9ybWZvb3QoKTsNCg0KCS8vLSYjMTA3Mzt8JiMxMDgwOyMmIzExMDE7DQoJZm9ybWhlYWQoYXJyYXkoJ25hbWUnPT4nc2V0dGFibGUnKSk7DQoJbWFrZWhpZGUoJ2FjdGlvbicsJ3NxbGFkbWluJyk7DQoJcCgkZGJmb3JtKTsNCgltYWtlaGlkZSgndGFibGVuYW1lJyk7DQoJbWFrZWhpZGUoJ3BhZ2UnLCRwYWdlKTsNCgltYWtlaGlkZSgnZG9pbmcnKTsNCglmb3JtZm9vdCgpOw0KDQoJJGNhY2hldGFibGVzID0gYXJyYXkoKTsNCgkkcGFnZW51bSA9IDMwOw0KCSRwYWdlID0gaW50dmFsKCRwYWdlKTsNCglpZigkcGFnZSkgew0KCQkkc3RhcnRfbGltaXQgPSAoJHBhZ2UgLSAxKSAqICRwYWdlbnVtOw0KCX0gZWxzZSB7DQoJCSRzdGFydF9saW1pdCA9IDA7DQoJCSRwYWdlID0gMTsNCgl9DQoJaWYgKGlzc2V0KCRkYmhvc3QpICYmIGlzc2V0KCRkYnVzZXIpICYmIGlzc2V0KCRkYnBhc3MpICYmIGlzc2V0KCRjb25uZWN0KSkgew0KCQlkYmNvbm4oJGRiaG9zdCwgJGRidXNlciwgJGRicGFzcywgJGRibmFtZSwgJGNoYXJzZXQsICRkYnBvcnQpOw0KCQkvLysmIzExMDU7KyYjMTA3MzstICt8KyYjMTA5MDstKy0mIzEwNzQ7DQoJCSRteXNxbHZlciA9IG15c3FsX2dldF9zZXJ2ZXJfaW5mbygpOw0KCQlwKCc8cD5NeVNRTCAnLiRteXNxbHZlci4nIHJ1bm5pbmcgaW4gJy4kZGJob3N0LicgYXMgJy4kZGJ1c2VyLidAJy4kZGJob3N0Lic8L3A+Jyk7DQoJCSRoaWdodmVyID0gJG15c3FsdmVyID4gJzQuMScgPyAxIDogMDsNCg0KCQkvLysmIzExMDU7KyYjMTA3MzstICt8KyYjMTA5MDsNCgkJJHF1ZXJ5ID0gcSgiU0hPVyBEQVRBQkFTRVMiKTsNCgkJJGRicyA9IGFycmF5KCk7DQoJCSRkYnNbXSA9ICctLSBTZWxlY3QgYSBkYXRhYmFzZSAtLSc7DQoJCXdoaWxlKCRkYiA9IG15c3FsX2ZldGNoX2FycmF5KCRxdWVyeSkpIHsNCgkJCSRkYnNbJGRiWydEYXRhYmFzZSddXSA9ICRkYlsnRGF0YWJhc2UnXTsNCgkJfQ0KCQltYWtlc2VsZWN0KGFycmF5KCd0aXRsZSc9PidQbGVhc2Ugc2VsZWN0IGEgZGF0YWJhc2U6JywnbmFtZSc9PidkYltdJywnb3B0aW9uJz0+JGRicywnc2VsZWN0ZWQnPT4kZGJuYW1lLCdvbmNoYW5nZSc9Pidtb2RkYm5hbWUodGhpcy5vcHRpb25zW3RoaXMuc2VsZWN0ZWRJbmRleF0udmFsdWUpJywnbmV3bGluZSc9PjEpKTsNCgkJJHRhYmxlZGIgPSBhcnJheSgpOw0KCQlpZiAoJGRibmFtZSkgew0KCQkJcCgnPHA+Jyk7DQoJCQlwKCdDdXJyZW50IGRhYmFiYXNlOiA8YSBocmVmPSJqYXZhc2NyaXB0Om1vZGRibmFtZShcJycuJGRibmFtZS4nXCcpOyI+Jy4kZGJuYW1lLic8L2E+Jyk7DQoJCQlpZiAoJHRhYmxlbmFtZSkgew0KCQkJCXAoJyB8IEN1cnJlbnQgVGFibGU6IDxhIGhyZWY9ImphdmFzY3JpcHQ6c2V0dGFibGUoXCcnLiR0YWJsZW5hbWUuJ1wnKTsiPicuJHRhYmxlbmFtZS4nPC9hPiBbIDxhIGhyZWY9ImphdmFzY3JpcHQ6c2V0dGFibGUoXCcnLiR0YWJsZW5hbWUuJ1wnLCBcJ2luc2VydFwnKTsiPkluc2VydDwvYT4gfCA8YSBocmVmPSJqYXZhc2NyaXB0OnNldHRhYmxlKFwnJy4kdGFibGVuYW1lLidcJywgXCdzdHJ1Y3R1cmVcJyk7Ij5TdHJ1Y3R1cmU8L2E+IHwgPGEgaHJlZj0iamF2YXNjcmlwdDpzZXR0YWJsZShcJycuJHRhYmxlbmFtZS4nXCcsIFwnZHJvcFwnKTsiPkRyb3A8L2E+IF0nKTsNCgkJCX0NCgkJCXAoJzwvcD4nKTsNCgkJCW15c3FsX3NlbGVjdF9kYigkZGJuYW1lKTsNCg0KCQkJJGdldG51bXNxbCA9ICcnOw0KCQkJJHJ1bnF1ZXJ5ID0gMDsNCgkJCWlmICgkc3FsX3F1ZXJ5KSB7DQoJCQkJJHJ1bnF1ZXJ5ID0gMTsNCgkJCX0NCgkJCSRhbGxvd2VkaXQgPSAwOw0KCQkJaWYgKCR0YWJsZW5hbWUgJiYgISRzcWxfcXVlcnkpIHsNCgkJCQkkc3FsX3F1ZXJ5ID0gIlNFTEVDVCAqIEZST00gJHRhYmxlbmFtZSI7DQoJCQkJJGdldG51bXNxbCA9ICRzcWxfcXVlcnk7DQoJCQkJJHNxbF9xdWVyeSA9ICRzcWxfcXVlcnkuIiBMSU1JVCAkc3RhcnRfbGltaXQsICRwYWdlbnVtIjsNCgkJCQkkYWxsb3dlZGl0ID0gMTsNCgkJCX0NCgkJCXAoJzxmb3JtIGFjdGlvbj0iJy4kc2VsZi4nIiBtZXRob2Q9IlBPU1QiPicpOw0KCQkJcCgnPHA+PHRhYmxlIHdpZHRoPSIyMDAiIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIj48dHI+PHRkIGNvbHNwYW49IjIiPlJ1biBTUUwgcXVlcnkvcXVlcmllcyBvbiBkYXRhYmFzZSAnLiRkYm5hbWUuJzo8L3RkPjwvdHI+PHRyPjx0ZD48dGV4dGFyZWEgbmFtZT0ic3FsX3F1ZXJ5IiBjbGFzcz0iYXJlYSIgc3R5bGU9IndpZHRoOjYwMHB4O2hlaWdodDo1MHB4O292ZXJmbG93OmF1dG87Ij4nLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9xdWVyeSxFTlRfUVVPVEVTKS4nPC90ZXh0YXJlYT48L3RkPjx0ZCBzdHlsZT0icGFkZGluZzowIDVweDsiPjxpbnB1dCBjbGFzcz0iYnQiIHN0eWxlPSJoZWlnaHQ6NTBweDsiIG5hbWU9InN1Ym1pdCIgdHlwZT0ic3VibWl0IiB2YWx1ZT0iUXVlcnkiIC8+PC90ZD48L3RyPjwvdGFibGU+PC9wPicpOw0KCQkJbWFrZWhpZGUoJ3RhYmxlbmFtZScsICR0YWJsZW5hbWUpOw0KCQkJbWFrZWhpZGUoJ2FjdGlvbicsJ3NxbGFkbWluJyk7DQoJCQlwKCRkYmZvcm0pOw0KCQkJcCgnPC9mb3JtPicpOw0KCQkJaWYgKCR0YWJsZW5hbWUgfHwgKCRydW5xdWVyeSAmJiAkc3FsX3F1ZXJ5KSkgew0KCQkJCWlmICgkZG9pbmcgPT0gJ3N0cnVjdHVyZScpIHsNCgkJCQkJJHJlc3VsdCA9IHEoIlNIT1cgQ09MVU1OUyBGUk9NICR0YWJsZW5hbWUiKTsNCgkJCQkJJHJvd2RiID0gYXJyYXkoKTsNCgkJCQkJd2hpbGUoJHJvdyA9IG15c3FsX2ZldGNoX2FycmF5KCRyZXN1bHQpKSB7DQoJCQkJCQkkcm93ZGJbXSA9ICRyb3c7DQoJCQkJCX0NCgkJCQkJcCgnPHRhYmxlIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjMiIGNlbGxzcGFjaW5nPSIwIj4nKTsNCgkJCQkJcCgnPHRyIGNsYXNzPSJoZWFkIj4nKTsNCgkJCQkJcCgnPHRkPkZpZWxkPC90ZD4nKTsNCgkJCQkJcCgnPHRkPlR5cGU8L3RkPicpOw0KCQkJCQlwKCc8dGQ+TnVsbDwvdGQ+Jyk7DQoJCQkJCXAoJzx0ZD5LZXk8L3RkPicpOw0KCQkJCQlwKCc8dGQ+RGVmYXVsdDwvdGQ+Jyk7DQoJCQkJCXAoJzx0ZD5FeHRyYTwvdGQ+Jyk7DQoJCQkJCXAoJzwvdHI+Jyk7DQoJCQkJCWZvcmVhY2ggKCRyb3dkYiBhcyAkcm93KSB7DQoJCQkJCQkkdGhpc2JnID0gYmcoKTsNCgkJCQkJCXAoJzx0ciBjbGFzcz0iJy4kdGhpc2JnLiciIG9ubW91c2VvdmVyPSJ0aGlzLmNsYXNzTmFtZT1cJ2ZvY3VzXCc7IiBvbm1vdXNlb3V0PSJ0aGlzLmNsYXNzTmFtZT1cJycuJHRoaXNiZy4nXCc7Ij4nKTsNCgkJCQkJCXAoJzx0ZD4nLiRyb3dbJ0ZpZWxkJ10uJzwvdGQ+Jyk7DQoJCQkJCQlwKCc8dGQ+Jy4kcm93WydUeXBlJ10uJzwvdGQ+Jyk7DQoJCQkJCQlwKCc8dGQ+Jy4kcm93WydOdWxsJ10uJyZuYnNwOzwvdGQ+Jyk7DQoJCQkJCQlwKCc8dGQ+Jy4kcm93WydLZXknXS4nJm5ic3A7PC90ZD4nKTsNCgkJCQkJCXAoJzx0ZD4nLiRyb3dbJ0RlZmF1bHQnXS4nJm5ic3A7PC90ZD4nKTsNCgkJCQkJCXAoJzx0ZD4nLiRyb3dbJ0V4dHJhJ10uJyZuYnNwOzwvdGQ+Jyk7DQoJCQkJCQlwKCc8L3RyPicpOw0KCQkJCQl9DQoJCQkJCXRiZm9vdCgpOw0KCQkJCX0gZWxzZWlmICgkZG9pbmcgPT0gJ2luc2VydCcgfHwgJGRvaW5nID09ICdlZGl0Jykgew0KCQkJCQkkcmVzdWx0ID0gcSgnU0hPVyBDT0xVTU5TIEZST00gJy4kdGFibGVuYW1lKTsNCgkJCQkJd2hpbGUgKCRyb3cgPSBteXNxbF9mZXRjaF9hcnJheSgkcmVzdWx0KSkgew0KCQkJCQkJJHJvd2RiW10gPSAkcm93Ow0KCQkJCQl9DQoJCQkJCSRycyA9IGFycmF5KCk7DQoJCQkJCWlmICgkZG9pbmcgPT0gJ2luc2VydCcpIHsNCgkJCQkJCXAoJzxoMj5JbnNlcnQgbmV3IGxpbmUgaW4gJy4kdGFibGVuYW1lLicgdGFibGUgJnJhcXVvOzwvaDI+Jyk7DQoJCQkJCX0gZWxzZSB7DQoJCQkJCQlwKCc8aDI+VXBkYXRlIHJlY29yZCBpbiAnLiR0YWJsZW5hbWUuJyB0YWJsZSAmcmFxdW87PC9oMj4nKTsNCgkJCQkJCSR3aGVyZSA9IGJhc2U2NF9kZWNvZGUoJGJhc2U2NCk7DQoJCQkJCQkkcmVzdWx0ID0gcSgiU0VMRUNUICogRlJPTSAkdGFibGVuYW1lIFdIRVJFICR3aGVyZSBMSU1JVCAxIik7DQoJCQkJCQkkcnMgPSBteXNxbF9mZXRjaF9hcnJheSgkcmVzdWx0KTsNCgkJCQkJfQ0KCQkJCQlwKCc8Zm9ybSBtZXRob2Q9InBvc3QiIGFjdGlvbj0iJy4kc2VsZi4nIj4nKTsNCgkJCQkJcCgkZGJmb3JtKTsNCgkJCQkJbWFrZWhpZGUoJ2FjdGlvbicsJ3NxbGFkbWluJyk7DQoJCQkJCW1ha2VoaWRlKCd0YWJsZW5hbWUnLCR0YWJsZW5hbWUpOw0KCQkJCQlwKCc8dGFibGUgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMyIgY2VsbHNwYWNpbmc9IjAiPicpOw0KCQkJCQlmb3JlYWNoICgkcm93ZGIgYXMgJHJvdykgew0KCQkJCQkJaWYgKCRyc1skcm93WydGaWVsZCddXSkgew0KCQkJCQkJCSR2YWx1ZSA9IGh0bWxzcGVjaWFsY2hhcnMoJHJzWyRyb3dbJ0ZpZWxkJ11dKTsNCgkJCQkJCX0gZWxzZSB7DQoJCQkJCQkJJHZhbHVlID0gJyc7DQoJCQkJCQl9DQoJCQkJCQkkdGhpc2JnID0gYmcoKTsNCgkJCQkJCXAoJzx0ciBjbGFzcz0iJy4kdGhpc2JnLiciIG9ubW91c2VvdmVyPSJ0aGlzLmNsYXNzTmFtZT1cJ2ZvY3VzXCc7IiBvbm1vdXNlb3V0PSJ0aGlzLmNsYXNzTmFtZT1cJycuJHRoaXNiZy4nXCc7Ij4nKTsNCgkJCQkJCXAoJzx0ZD48Yj4nLiRyb3dbJ0ZpZWxkJ10uJzwvYj48YnIgLz4nLiRyb3dbJ1R5cGUnXS4nPC90ZD48dGQ+PHRleHRhcmVhIGNsYXNzPSJhcmVhIiBuYW1lPSJpbnNlcnRzcWxbJy4kcm93WydGaWVsZCddLiddIiBzdHlsZT0id2lkdGg6NTAwcHg7aGVpZ2h0OjYwcHg7b3ZlcmZsb3c6YXV0bzsiPicuJHZhbHVlLic8L3RleHRhcmVhPjwvdGQ+PC90cj4nKTsNCgkJCQkJfQ0KCQkJCQlpZiAoJGRvaW5nID09ICdpbnNlcnQnKSB7DQoJCQkJCQlwKCc8dHIgY2xhc3M9IicuYmcoKS4nIj48dGQgY29sc3Bhbj0iMiI+PGlucHV0IGNsYXNzPSJidCIgdHlwZT0ic3VibWl0IiBuYW1lPSJpbnNlcnQiIHZhbHVlPSJJbnNlcnQiIC8+PC90ZD48L3RyPicpOw0KCQkJCQl9IGVsc2Ugew0KCQkJCQkJcCgnPHRyIGNsYXNzPSInLmJnKCkuJyI+PHRkIGNvbHNwYW49IjIiPjxpbnB1dCBjbGFzcz0iYnQiIHR5cGU9InN1Ym1pdCIgbmFtZT0idXBkYXRlIiB2YWx1ZT0iVXBkYXRlIiAvPjwvdGQ+PC90cj4nKTsNCgkJCQkJCW1ha2VoaWRlKCdiYXNlNjQnLCAkYmFzZTY0KTsNCgkJCQkJfQ0KCQkJCQlwKCc8L3RhYmxlPjwvZm9ybT4nKTsNCgkJCQl9IGVsc2Ugew0KCQkJCQkkcXVlcnlzID0gQGV4cGxvZGUoJzsnLCRzcWxfcXVlcnkpOw0KCQkJCQlmb3JlYWNoKCRxdWVyeXMgYXMgJG51bT0+JHF1ZXJ5KSB7DQoJCQkJCQlpZiAoJHF1ZXJ5KSB7DQoJCQkJCQkJcCgiPHA+PGI+UXVlcnkjeyRudW19IDogIi5odG1sc3BlY2lhbGNoYXJzKCRxdWVyeSxFTlRfUVVPVEVTKS4iPC9iPjwvcD4iKTsNCgkJCQkJCQlzd2l0Y2gocXkoJHF1ZXJ5KSkNCgkJCQkJCQl7DQoJCQkJCQkJCWNhc2UgMDoNCgkJCQkJCQkJCXAoJzxoMj5FcnJvciA6ICcubXlzcWxfZXJyb3IoKS4nPC9oMj4nKTsNCgkJCQkJCQkJCWJyZWFrOw0KCQkJCQkJCQljYXNlIDE6DQoJCQkJCQkJCQlpZiAoc3RydG9sb3dlcihzdWJzdHIoJHF1ZXJ5LDAsMTMpKSA9PSAnc2VsZWN0ICogZnJvbScpIHsNCgkJCQkJCQkJCQkkYWxsb3dlZGl0ID0gMTsNCgkJCQkJCQkJCX0NCgkJCQkJCQkJCWlmICgkZ2V0bnVtc3FsKSB7DQoJCQkJCQkJCQkJJHRhdG9sID0gbXlzcWxfbnVtX3Jvd3MocSgkZ2V0bnVtc3FsKSk7DQoJCQkJCQkJCQkJJG11bHRpcGFnZSA9IG11bHRpKCR0YXRvbCwgJHBhZ2VudW0sICRwYWdlLCAkdGFibGVuYW1lKTsNCgkJCQkJCQkJCX0NCgkJCQkJCQkJCWlmICghJHRhYmxlbmFtZSkgew0KCQkJCQkJCQkJCSRzcWxfbGluZSA9IHN0cl9yZXBsYWNlKGFycmF5KCJcciIsICJcbiIsICJcdCIpLCBhcnJheSgnICcsICcgJywgJyAnKSwgdHJpbShodG1sc3BlY2lhbGNoYXJzKCRxdWVyeSkpKTsNCgkJCQkJCQkJCQkkc3FsX2xpbmUgPSBwcmVnX3JlcGxhY2UoIi9cL1wqW14oXCpcLyldKlwqXC8vaSIsICIgIiwgJHNxbF9saW5lKTsNCgkJCQkJCQkJCQlwcmVnX21hdGNoX2FsbCgiL2Zyb21ccytgezAsMX0oW1x3XSspYHswLDF9XHMrL2kiLCRzcWxfbGluZSwkbWF0Y2hlcyk7DQoJCQkJCQkJCQkJJHRhYmxlbmFtZSA9ICRtYXRjaGVzWzFdWzBdOw0KCQkJCQkJCQkJfQ0KCQkJCQkJCQkJJHJlc3VsdCA9IHEoJHF1ZXJ5KTsNCgkJCQkJCQkJCXAoJG11bHRpcGFnZSk7DQoJCQkJCQkJCQlwKCc8dGFibGUgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMyIgY2VsbHNwYWNpbmc9IjAiPicpOw0KCQkJCQkJCQkJcCgnPHRyIGNsYXNzPSJoZWFkIj4nKTsNCgkJCQkJCQkJCWlmICgkYWxsb3dlZGl0KSBwKCc8dGQ+QWN0aW9uPC90ZD4nKTsNCgkJCQkJCQkJCSRmaWVsZG51bSA9IEBteXNxbF9udW1fZmllbGRzKCRyZXN1bHQpOw0KCQkJCQkJCQkJZm9yKCRpPTA7JGk8JGZpZWxkbnVtOyRpKyspew0KCQkJCQkJCQkJCSRuYW1lID0gQG15c3FsX2ZpZWxkX25hbWUoJHJlc3VsdCwgJGkpOw0KCQkJCQkJCQkJCSR0eXBlID0gQG15c3FsX2ZpZWxkX3R5cGUoJHJlc3VsdCwgJGkpOw0KCQkJCQkJCQkJCSRsZW4gPSBAbXlzcWxfZmllbGRfbGVuKCRyZXN1bHQsICRpKTsNCgkJCQkJCQkJCQlwKCI8dGQgbm93cmFwPiRuYW1lPGJyPjxzcGFuPiR0eXBlKCRsZW4pPC9zcGFuPjwvdGQ+Iik7DQoJCQkJCQkJCQl9DQoJCQkJCQkJCQlwKCc8L3RyPicpOw0KCQkJCQkJCQkJd2hpbGUoJG1uID0gQG15c3FsX2ZldGNoX2Fzc29jKCRyZXN1bHQpKXsNCgkJCQkJCQkJCQkkdGhpc2JnID0gYmcoKTsNCgkJCQkJCQkJCQlwKCc8dHIgY2xhc3M9IicuJHRoaXNiZy4nIiBvbm1vdXNlb3Zlcj0idGhpcy5jbGFzc05hbWU9XCdmb2N1c1wnOyIgb25tb3VzZW91dD0idGhpcy5jbGFzc05hbWU9XCcnLiR0aGlzYmcuJ1wnOyI+Jyk7DQoJCQkJCQkJCQkJJHdoZXJlID0gJHRtcCA9ICRiMSA9ICcnOw0KCQkJCQkJCQkJCWZvcmVhY2goJG1uIGFzICRrZXk9PiRpbnNpZGUpew0KCQkJCQkJCQkJCQlpZiAoJGluc2lkZSkgew0KCQkJCQkJCQkJCQkJJHdoZXJlIC49ICR0bXAuJGtleS4iPSciLmFkZHNsYXNoZXMoJGluc2lkZSkuIiciOw0KCQkJCQkJCQkJCQkJJHRtcCA9ICcgQU5EICc7DQoJCQkJCQkJCQkJCX0NCgkJCQkJCQkJCQkJJGIxIC49ICc8dGQgbm93cmFwPicuaHRtbF9jbGVhbigkaW5zaWRlKS4nJm5ic3A7PC90ZD4nOw0KCQkJCQkJCQkJCX0NCgkJCQkJCQkJCQkkd2hlcmUgPSBiYXNlNjRfZW5jb2RlKCR3aGVyZSk7DQoJCQkJCQkJCQkJaWYgKCRhbGxvd2VkaXQpIHAoJzx0ZCBub3dyYXA+PGEgaHJlZj0iamF2YXNjcmlwdDplZGl0cmVjb3JkKFwnZWRpdFwnLCBcJycuJHdoZXJlLidcJywgXCcnLiR0YWJsZW5hbWUuJ1wnKTsiPkVkaXQ8L2E+IHwgPGEgaHJlZj0iamF2YXNjcmlwdDplZGl0cmVjb3JkKFwnZGVsXCcsIFwnJy4kd2hlcmUuJ1wnLCBcJycuJHRhYmxlbmFtZS4nXCcpOyI+RGVsPC9hPjwvdGQ+Jyk7DQoJCQkJCQkJCQkJcCgkYjEpOw0KCQkJCQkJCQkJCXAoJzwvdHI+Jyk7DQoJCQkJCQkJCQkJdW5zZXQoJGIxKTsNCgkJCQkJCQkJCX0NCgkJCQkJCQkJCXRiZm9vdCgpOw0KCQkJCQkJCQkJcCgkbXVsdGlwYWdlKTsNCgkJCQkJCQkJCWJyZWFrOw0KCQkJCQkJCQljYXNlIDI6DQoJCQkJCQkJCQkkYXIgPSBteXNxbF9hZmZlY3RlZF9yb3dzKCk7DQoJCQkJCQkJCQlwKCc8aDI+YWZmZWN0ZWQgcm93cyA6IDxiPicuJGFyLic8L2I+PC9oMj4nKTsNCgkJCQkJCQkJCWJyZWFrOw0KCQkJCQkJCX0NCgkJCQkJCX0NCgkJCQkJfQ0KCQkJCX0NCgkJCX0gZWxzZSB7DQoJCQkJJHF1ZXJ5ID0gcSgiU0hPVyBUQUJMRSBTVEFUVVMiKTsNCgkJCQkkdGFibGVfbnVtID0gJHRhYmxlX3Jvd3MgPSAkZGF0YV9zaXplID0gMDsNCgkJCQkkdGFibGVkYiA9IGFycmF5KCk7DQoJCQkJd2hpbGUoJHRhYmxlID0gbXlzcWxfZmV0Y2hfYXJyYXkoJHF1ZXJ5KSkgew0KCQkJCQkkZGF0YV9zaXplID0gJGRhdGFfc2l6ZSArICR0YWJsZVsnRGF0YV9sZW5ndGgnXTsNCgkJCQkJJHRhYmxlX3Jvd3MgPSAkdGFibGVfcm93cyArICR0YWJsZVsnUm93cyddOw0KCQkJCQkkdGFibGVbJ0RhdGFfbGVuZ3RoJ10gPSBzaXplY291bnQoJHRhYmxlWydEYXRhX2xlbmd0aCddKTsNCgkJCQkJJHRhYmxlX251bSsrOw0KCQkJCQkkdGFibGVkYltdID0gJHRhYmxlOw0KCQkJCX0NCgkJCQkkZGF0YV9zaXplID0gc2l6ZWNvdW50KCRkYXRhX3NpemUpOw0KCQkJCXVuc2V0KCR0YWJsZSk7DQoJCQkJcCgnPHRhYmxlIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIj4nKTsNCgkJCQlwKCc8Zm9ybSBhY3Rpb249IicuJHNlbGYuJyIgbWV0aG9kPSJQT1NUIj4nKTsNCgkJCQltYWtlaGlkZSgnYWN0aW9uJywnc3FsYWRtaW4nKTsNCgkJCQlwKCRkYmZvcm0pOw0KCQkJCXAoJzx0ciBjbGFzcz0iaGVhZCI+Jyk7DQoJCQkJcCgnPHRkIHdpZHRoPSIyJSIgYWxpZ249ImNlbnRlciI+PGlucHV0IG5hbWU9ImNoa2FsbCIgdmFsdWU9Im9uIiB0eXBlPSJjaGVja2JveCIgb25jbGljaz0iQ2hlY2tBbGwodGhpcy5mb3JtKSIgLz48L3RkPicpOw0KCQkJCXAoJzx0ZD5OYW1lPC90ZD4nKTsNCgkJCQlwKCc8dGQ+Um93czwvdGQ+Jyk7DQoJCQkJcCgnPHRkPkRhdGFfbGVuZ3RoPC90ZD4nKTsNCgkJCQlwKCc8dGQ+Q3JlYXRlX3RpbWU8L3RkPicpOw0KCQkJCXAoJzx0ZD5VcGRhdGVfdGltZTwvdGQ+Jyk7DQoJCQkJaWYgKCRoaWdodmVyKSB7DQoJCQkJCXAoJzx0ZD5FbmdpbmU8L3RkPicpOw0KCQkJCQlwKCc8dGQ+Q29sbGF0aW9uPC90ZD4nKTsNCgkJCQl9DQoJCQkJcCgnPC90cj4nKTsNCgkJCQlmb3JlYWNoICgkdGFibGVkYiBhcyAka2V5ID0+ICR0YWJsZSkgew0KCQkJCQkkdGhpc2JnID0gYmcoKTsNCgkJCQkJcCgnPHRyIGNsYXNzPSInLiR0aGlzYmcuJyIgb25tb3VzZW92ZXI9InRoaXMuY2xhc3NOYW1lPVwnZm9jdXNcJzsiIG9ubW91c2VvdXQ9InRoaXMuY2xhc3NOYW1lPVwnJy4kdGhpc2JnLidcJzsiPicpOw0KCQkJCQlwKCc8dGQgYWxpZ249ImNlbnRlciIgd2lkdGg9IjIlIj48aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9InRhYmxlW10iIHZhbHVlPSInLiR0YWJsZVsnTmFtZSddLiciIC8+PC90ZD4nKTsNCgkJCQkJcCgnPHRkPjxhIGhyZWY9ImphdmFzY3JpcHQ6c2V0dGFibGUoXCcnLiR0YWJsZVsnTmFtZSddLidcJyk7Ij4nLiR0YWJsZVsnTmFtZSddLic8L2E+IFsgPGEgaHJlZj0iamF2YXNjcmlwdDpzZXR0YWJsZShcJycuJHRhYmxlWydOYW1lJ10uJ1wnLCBcJ2luc2VydFwnKTsiPkluc2VydDwvYT4gfCA8YSBocmVmPSJqYXZhc2NyaXB0OnNldHRhYmxlKFwnJy4kdGFibGVbJ05hbWUnXS4nXCcsIFwnc3RydWN0dXJlXCcpOyI+U3RydWN0dXJlPC9hPiB8IDxhIGhyZWY9ImphdmFzY3JpcHQ6c2V0dGFibGUoXCcnLiR0YWJsZVsnTmFtZSddLidcJywgXCdkcm9wXCcpOyI+RHJvcDwvYT4gXTwvdGQ+Jyk7DQoJCQkJCXAoJzx0ZD4nLiR0YWJsZVsnUm93cyddLic8L3RkPicpOw0KCQkJCQlwKCc8dGQ+Jy4kdGFibGVbJ0RhdGFfbGVuZ3RoJ10uJzwvdGQ+Jyk7DQoJCQkJCXAoJzx0ZD4nLiR0YWJsZVsnQ3JlYXRlX3RpbWUnXS4nPC90ZD4nKTsNCgkJCQkJcCgnPHRkPicuJHRhYmxlWydVcGRhdGVfdGltZSddLic8L3RkPicpOw0KCQkJCQlpZiAoJGhpZ2h2ZXIpIHsNCgkJCQkJCXAoJzx0ZD4nLiR0YWJsZVsnRW5naW5lJ10uJzwvdGQ+Jyk7DQoJCQkJCQlwKCc8dGQ+Jy4kdGFibGVbJ0NvbGxhdGlvbiddLic8L3RkPicpOw0KCQkJCQl9DQoJCQkJCXAoJzwvdHI+Jyk7DQoJCQkJfQ0KCQkJCXAoJzx0ciBjbGFzcz0nLmJnKCkuJz4nKTsNCgkJCQlwKCc8dGQ+Jm5ic3A7PC90ZD4nKTsNCgkJCQlwKCc8dGQ+VG90YWwgdGFibGVzOiAnLiR0YWJsZV9udW0uJzwvdGQ+Jyk7DQoJCQkJcCgnPHRkPicuJHRhYmxlX3Jvd3MuJzwvdGQ+Jyk7DQoJCQkJcCgnPHRkPicuJGRhdGFfc2l6ZS4nPC90ZD4nKTsNCgkJCQlwKCc8dGQgY29sc3Bhbj0iJy4oJGhpZ2h2ZXIgPyA0IDogMikuJyI+Jm5ic3A7PC90ZD4nKTsNCgkJCQlwKCc8L3RyPicpOw0KDQoJCQkJcCgiPHRyIGNsYXNzPVwiIi5iZygpLiJcIj48dGQgY29sc3Bhbj1cIiIuKCRoaWdodmVyID8gOCA6IDYpLiJcIj48aW5wdXQgbmFtZT1cInNhdmVhc2ZpbGVcIiB2YWx1ZT1cIjFcIiB0eXBlPVwiY2hlY2tib3hcIiAvPiBTYXZlIGFzIGZpbGUgPGlucHV0IGNsYXNzPVwiaW5wdXRcIiBuYW1lPVwicGF0aFwiIHZhbHVlPVwiIi5TQV9ST09ULiRfU0VSVkVSWydIVFRQX0hPU1QnXS4iX015U1FMLnNxbFwiIHR5cGU9XCJ0ZXh0XCIgc2l6ZT1cIjYwXCIgLz4gPGlucHV0IGNsYXNzPVwiYnRcIiB0eXBlPVwic3VibWl0XCIgbmFtZT1cImRvd25yYXJcIiB2YWx1ZT1cIkV4cG9ydCBzZWxlY3Rpb24gdGFibGVcIiAvPjwvdGQ+PC90cj4iKTsNCgkJCQltYWtlaGlkZSgnZG9pbmcnLCdiYWNrdXBteXNxbCcpOw0KCQkJCWZvcm1mb290KCk7DQoJCQkJcCgiPC90YWJsZT4iKTsNCgkJCQlmcigkcXVlcnkpOw0KCQkJfQ0KCQl9DQoJfQ0KCXRiZm9vdCgpOw0KCUBteXNxbF9jbG9zZSgpOw0KfS8vZW5kIHNxbCBiYWNrdXANCg0KDQplbHNlaWYgKCRhY3Rpb24gPT0gJ2JhY2tjb25uZWN0Jykgew0KCSEkeW91cmlwICYmICR5b3VyaXAgPSAkX1NFUlZFUlsnUkVNT1RFX0FERFInXTsNCgkhJHlvdXJwb3J0ICYmICR5b3VycG9ydCA9ICcxMjM0NSc7DQoJJHVzZWRiID0gYXJyYXkoJ3BlcmwnPT4ncGVybCcsJ2MnPT4nYycpOw0KDQoJJGJhY2tfY29ubmVjdD0iSXlFdmRYTnlMMkpwYmk5d1pYSnNEUXAxYzJVZ1UyOWphMlYwT3cwS0pHTnRaRDBnSW14NWJuZ2lPdzBLSkhONWMzUmxiVDBnSjJWamFHOGdJbUIxYm1GdFpTQXRZV0FpTzJWaiIuDQoJCSJhRzhnSW1CcFpHQWlPeTlpYVc0dmMyZ25PdzBLSkRBOUpHTnRaRHNOQ2lSMFlYSm5aWFE5SkVGU1IxWmJNRjA3RFFva2NHOXlkRDBrUVZKSFZsc3hYVHNOQ2lScFlXUmtjajFwYm1WMFgyRjBiMjRvSkhSIi4NCgkJImhjbWRsZENrZ2ZId2daR2xsS0NKRmNuSnZjam9nSkNGY2JpSXBPdzBLSkhCaFpHUnlQWE52WTJ0aFpHUnlYMmx1S0NSd2IzSjBMQ0FrYVdGa1pISXBJSHg4SUdScFpTZ2lSWEp5YjNJNklDUWhYRzRpS1QiLg0KCQkic05DaVJ3Y205MGJ6MW5aWFJ3Y205MGIySjVibUZ0WlNnbmRHTndKeWs3RFFwemIyTnJaWFFvVTA5RFMwVlVMQ0JRUmw5SlRrVlVMQ0JUVDBOTFgxTlVVa1ZCVFN3Z0pIQnliM1J2S1NCOGZDQmthV1VvSSIuDQoJCSJrVnljbTl5T2lBa0lWeHVJaWs3RFFwamIyNXVaV04wS0ZOUFEwdEZWQ3dnSkhCaFpHUnlLU0I4ZkNCa2FXVW9Ja1Z5Y205eU9pQWtJVnh1SWlrN0RRcHZjR1Z1S0ZOVVJFbE9MQ0FpUGlaVFQwTkxSVlFpIi4NCgkJIktUc05DbTl3Wlc0b1UxUkVUMVZVTENBaVBpWlRUME5MUlZRaUtUc05DbTl3Wlc0b1UxUkVSVkpTTENBaVBpWlRUME5MUlZRaUtUc05Dbk41YzNSbGJTZ2tjM2x6ZEdWdEtUc05DbU5zYjNObEtGTlVSRWwiLg0KCQkiT0tUc05DbU5zYjNObEtGTlVSRTlWVkNrN0RRcGpiRzl6WlNoVFZFUkZVbElwT3c9PSI7DQoJJGJhY2tfY29ubmVjdF9jPSJJMmx1WTJ4MVpHVWdQSE4wWkdsdkxtZytEUW9qYVc1amJIVmtaU0E4YzNsekwzTnZZMnRsZEM1b1BnMEtJMmx1WTJ4MVpHVWdQRzVsZEdsdVpYUXZhVzR1YUQ0TkNtbHVkQyIuDQoJCSJCdFlXbHVLR2x1ZENCaGNtZGpMQ0JqYUdGeUlDcGhjbWQyVzEwcERRcDdEUW9nYVc1MElHWmtPdzBLSUhOMGNuVmpkQ0J6YjJOcllXUmtjbDlwYmlCemFXNDdEUW9nWTJoaGNpQnliWE5iTWpGZFBTSnliIi4NCgkJIlNBdFppQWlPeUFOQ2lCa1lXVnRiMjRvTVN3d0tUc05DaUJ6YVc0dWMybHVYMlpoYldsc2VTQTlJRUZHWDBsT1JWUTdEUW9nYzJsdUxuTnBibDl3YjNKMElEMGdhSFJ2Ym5Nb1lYUnZhU2hoY21kMld6SmQiLg0KCQkiS1NrN0RRb2djMmx1TG5OcGJsOWhaR1J5TG5OZllXUmtjaUE5SUdsdVpYUmZZV1JrY2loaGNtZDJXekZkS1RzZ0RRb2dZbnBsY204b1lYSm5kbHN4WFN4emRISnNaVzRvWVhKbmRsc3hYU2tyTVN0emRISiIuDQoJCSJzWlc0b1lYSm5kbHN5WFNrcE95QU5DaUJtWkNBOUlITnZZMnRsZENoQlJsOUpUa1ZVTENCVFQwTkxYMU5VVWtWQlRTd2dTVkJRVWs5VVQxOVVRMUFwSURzZ0RRb2dhV1lnS0NoamIyNXVaV04wS0daa0xDIi4NCgkJIkFvYzNSeWRXTjBJSE52WTJ0aFpHUnlJQ29wSUNaemFXNHNJSE5wZW1WdlppaHpkSEoxWTNRZ2MyOWphMkZrWkhJcEtTazhNQ2tnZXcwS0lDQWdjR1Z5Y205eUtDSmJMVjBnWTI5dWJtVmpkQ2dwSWlrN0QiLg0KCQkiUW9nSUNCbGVHbDBLREFwT3cwS0lIME5DaUJ6ZEhKallYUW9jbTF6TENCaGNtZDJXekJkS1RzTkNpQnplWE4wWlcwb2NtMXpLVHNnSUEwS0lHUjFjRElvWm1Rc0lEQXBPdzBLSUdSMWNESW9abVFzSURFcCIuDQoJCSJPdzBLSUdSMWNESW9abVFzSURJcE93MEtJR1Y0WldOc0tDSXZZbWx1TDNOb0lpd2ljMmdnTFdraUxDQk9WVXhNS1RzTkNpQmpiRzl6WlNobVpDazdJQTBLZlE9PSI7DQoNCglpZiAoJHN0YXJ0ICYmICR5b3VyaXAgJiYgJHlvdXJwb3J0ICYmICR1c2Upew0KCQlpZiAoJHVzZSA9PSAncGVybCcpIHsNCgkJCWNmKCcvdG1wL2FuZ2VsX2JjJywkYmFja19jb25uZWN0KTsNCgkJCSRyZXMgPSBleGVjdXRlKHdoaWNoKCdwZXJsJykuIiAvdG1wL2FuZ2VsX2JjICR5b3VyaXAgJHlvdXJwb3J0ICYiKTsNCgkJfSBlbHNlIHsNCgkJCWNmKCcvdG1wL2FuZ2VsX2JjLmMnLCRiYWNrX2Nvbm5lY3RfYyk7DQoJCQkkcmVzID0gZXhlY3V0ZSgnZ2NjIC1vIC90bXAvYW5nZWxfYmMgL3RtcC9hbmdlbF9iYy5jJyk7DQoJCQlAdW5saW5rKCcvdG1wL2FuZ2VsX2JjLmMnKTsNCgkJCSRyZXMgPSBleGVjdXRlKCIvdG1wL2FuZ2VsX2JjICR5b3VyaXAgJHlvdXJwb3J0ICYiKTsNCgkJfQ0KCQltKCJOb3cgc2NyaXB0IHRyeSBjb25uZWN0IHRvICR5b3VyaXAgcG9ydCAkeW91cnBvcnQgLi4uIik7DQoJfQ0KDQoJZm9ybWhlYWQoYXJyYXkoJ3RpdGxlJz0+J0JhY2sgQ29ubmVjdCcpKTsNCgltYWtlaGlkZSgnYWN0aW9uJywnYmFja2Nvbm5lY3QnKTsNCglwKCc8cD4nKTsNCglwKCdZb3VyIElQOicpOw0KCW1ha2VpbnB1dChhcnJheSgnbmFtZSc9Pid5b3VyaXAnLCdzaXplJz0+MjAsJ3ZhbHVlJz0+JHlvdXJpcCkpOw0KCXAoJ1lvdXIgUG9ydDonKTsNCgltYWtlaW5wdXQoYXJyYXkoJ25hbWUnPT4neW91cnBvcnQnLCdzaXplJz0+MTUsJ3ZhbHVlJz0+JHlvdXJwb3J0KSk7DQoJcCgnVXNlOicpOw0KCW1ha2VzZWxlY3QoYXJyYXkoJ25hbWUnPT4ndXNlJywnb3B0aW9uJz0+JHVzZWRiLCdzZWxlY3RlZCc9PiR1c2UpKTsNCgltYWtlaW5wdXQoYXJyYXkoJ25hbWUnPT4nc3RhcnQnLCd2YWx1ZSc9PidTdGFydCcsJ3R5cGUnPT4nc3VibWl0JywnY2xhc3MnPT4nYnQnKSk7DQoJcCgnPC9wPicpOw0KCWZvcm1mb290KCk7DQp9Ly9lbmQgc3FsIGJhY2t1cA0KDQplbHNlaWYgKCRhY3Rpb24gPT0gJ2V2YWwnKSB7DQoJJHBocGNvZGUgPSB0cmltKCRwaHBjb2RlKTsNCglpZigkcGhwY29kZSl7DQoJCWlmICghcHJlZ19tYXRjaCgnIzxcPyNzaScsICRwaHBjb2RlKSkgew0KCQkJJHBocGNvZGUgPSAiPD9waHBcblxueyRwaHBjb2RlfVxuXG4/PiI7DQoJCX0NCgkJZXZhbCgiPyIuIj4kcGhwY29kZTw/Iik7DQoJfQ0KCWZvcm1oZWFkKGFycmF5KCd0aXRsZSc9PidFdmFsIFBIUCBDb2RlJykpOw0KCW1ha2VoaWRlKCdhY3Rpb24nLCdldmFsJyk7DQoJbWFrZXRleHQoYXJyYXkoJ3RpdGxlJz0+J1BIUCBDb2RlJywnbmFtZSc9PidwaHBjb2RlJywgJ3ZhbHVlJz0+JHBocGNvZGUpKTsNCglwKCc8cD48YSBocmVmPSJodHRwOi8vd3d3LmFsdHVya3MuY29tL3BocHNweS9wbHVnaW4vIiB0YXJnZXQ9Il9ibGFuayI+R2V0IHBsdWdpbnM8L2E+PC9wPicpOw0KCWZvcm1mb290ZXIoKTsNCn0vL2VuZCBldmFsDQoNCmVsc2VpZiAoJGFjdGlvbiA9PSAnZWRpdGZpbGUnKSB7DQoJaWYoZmlsZV9leGlzdHMoJG9wZmlsZSkpIHsNCgkJJGZwPUBmb3Blbigkb3BmaWxlLCdyJyk7DQoJCSRjb250ZW50cz1AZnJlYWQoJGZwLCBmaWxlc2l6ZSgkb3BmaWxlKSk7DQoJCUBmY2xvc2UoJGZwKTsNCgkJJGNvbnRlbnRzPWh0bWxzcGVjaWFsY2hhcnMoJGNvbnRlbnRzKTsNCgl9DQoJZm9ybWhlYWQoYXJyYXkoJ3RpdGxlJz0+J0NyZWF0ZSAvIEVkaXQgRmlsZScpKTsNCgltYWtlaGlkZSgnYWN0aW9uJywnZmlsZScpOw0KCW1ha2VoaWRlKCdkaXInLCRub3dwYXRoKTsNCgltYWtlaW5wdXQoYXJyYXkoJ3RpdGxlJz0+J0N1cnJlbnQgRmlsZSAoaW1wb3J0IG5ldyBmaWxlIG5hbWUgYW5kIG5ldyBmaWxlKScsJ25hbWUnPT4nZWRpdGZpbGVuYW1lJywndmFsdWUnPT4kb3BmaWxlLCduZXdsaW5lJz0+MSkpOw0KCW1ha2V0ZXh0KGFycmF5KCd0aXRsZSc9PidGaWxlIENvbnRlbnQnLCduYW1lJz0+J2ZpbGVjb250ZW50JywndmFsdWUnPT4kY29udGVudHMpKTsNCglmb3JtZm9vdGVyKCk7DQp9Ly9lbmQgZWRpdGZpbGUNCg0KZWxzZWlmICgkYWN0aW9uID09ICduZXd0aW1lJykgew0KCSRvcGZpbGVtdGltZSA9IEBmaWxlbXRpbWUoJG9wZmlsZSk7DQoJLy8kdGltZSA9IHN0cnRvdGltZSgiJHllYXItJG1vbnRoLSRkYXkgJGhvdXI6JG1pbnV0ZTokc2Vjb25kIik7DQoJJGNhY2hlbW9udGggPSBhcnJheSgnSmFudWFyeSc9PjEsJ0ZlYnJ1YXJ5Jz0+MiwnTWFyY2gnPT4zLCdBcHJpbCc9PjQsJ01heSc9PjUsJ0p1bmUnPT42LCdKdWx5Jz0+NywnQXVndXN0Jz0+OCwnU2VwdGVtYmVyJz0+OSwnT2N0b2Jlcic9PjEwLCdOb3ZlbWJlcic9PjExLCdEZWNlbWJlcic9PjEyKTsNCglmb3JtaGVhZChhcnJheSgndGl0bGUnPT4nQ2xvbmUgZmlsZSB3YXMgbGFzdCBtb2RpZmllZCB0aW1lJykpOw0KCW1ha2VoaWRlKCdhY3Rpb24nLCdmaWxlJyk7DQoJbWFrZWhpZGUoJ2RpcicsJG5vd3BhdGgpOw0KCW1ha2VpbnB1dChhcnJheSgndGl0bGUnPT4nQWx0ZXIgZmlsZScsJ25hbWUnPT4nY3VyZmlsZScsJ3ZhbHVlJz0+JG9wZmlsZSwnc2l6ZSc9PjEyMCwnbmV3bGluZSc9PjEpKTsNCgltYWtlaW5wdXQoYXJyYXkoJ3RpdGxlJz0+J1JlZmVyZW5jZSBmaWxlIChmdWxscGF0aCknLCduYW1lJz0+J3RhcmZpbGUnLCdzaXplJz0+MTIwLCduZXdsaW5lJz0+MSkpOw0KCWZvcm1mb290ZXIoKTsNCglmb3JtaGVhZChhcnJheSgndGl0bGUnPT4nU2V0IGxhc3QgbW9kaWZpZWQnKSk7DQoJbWFrZWhpZGUoJ2FjdGlvbicsJ2ZpbGUnKTsNCgltYWtlaGlkZSgnZGlyJywkbm93cGF0aCk7DQoJbWFrZWlucHV0KGFycmF5KCd0aXRsZSc9PidDdXJyZW50IGZpbGUgKGZ1bGxwYXRoKScsJ25hbWUnPT4nY3VyZmlsZScsJ3ZhbHVlJz0+JG9wZmlsZSwnc2l6ZSc9PjEyMCwnbmV3bGluZSc9PjEpKTsNCglwKCc8cD5JbnN0ZWFkICZyYXF1bzsnKTsNCglwKCd5ZWFyOicpOw0KCW1ha2VpbnB1dChhcnJheSgnbmFtZSc9Pid5ZWFyJywndmFsdWUnPT5kYXRlKCdZJywkb3BmaWxlbXRpbWUpLCdzaXplJz0+NCkpOw0KCXAoJ21vbnRoOicpOw0KCW1ha2VpbnB1dChhcnJheSgnbmFtZSc9Pidtb250aCcsJ3ZhbHVlJz0+ZGF0ZSgnbScsJG9wZmlsZW10aW1lKSwnc2l6ZSc9PjIpKTsNCglwKCdkYXk6Jyk7DQoJbWFrZWlucHV0KGFycmF5KCduYW1lJz0+J2RheScsJ3ZhbHVlJz0+ZGF0ZSgnZCcsJG9wZmlsZW10aW1lKSwnc2l6ZSc9PjIpKTsNCglwKCdob3VyOicpOw0KCW1ha2VpbnB1dChhcnJheSgnbmFtZSc9Pidob3VyJywndmFsdWUnPT5kYXRlKCdIJywkb3BmaWxlbXRpbWUpLCdzaXplJz0+MikpOw0KCXAoJ21pbnV0ZTonKTsNCgltYWtlaW5wdXQoYXJyYXkoJ25hbWUnPT4nbWludXRlJywndmFsdWUnPT5kYXRlKCdpJywkb3BmaWxlbXRpbWUpLCdzaXplJz0+MikpOw0KCXAoJ3NlY29uZDonKTsNCgltYWtlaW5wdXQoYXJyYXkoJ25hbWUnPT4nc2Vjb25kJywndmFsdWUnPT5kYXRlKCdzJywkb3BmaWxlbXRpbWUpLCdzaXplJz0+MikpOw0KCXAoJzwvcD4nKTsNCglmb3JtZm9vdGVyKCk7DQp9Ly9lbmQgbmV3dGltZQ0KDQplbHNlaWYgKCRhY3Rpb24gPT0gJ3NoZWxsJykgew0KCWlmIChJU19XSU4gJiYgSVNfQ09NKSB7DQoJCWlmKCRwcm9ncmFtICYmICRwYXJhbWV0ZXIpIHsNCgkJCSRzaGVsbD0gbmV3IENPTSgnU2hlbGwuQXBwbGljYXRpb24nKTsNCgkJCSRhID0gJHNoZWxsLT5TaGVsbEV4ZWN1dGUoJHByb2dyYW0sJHBhcmFtZXRlcik7DQoJCQltKCdQcm9ncmFtIHJ1biBoYXMgJy4oISRhID8gJ3N1Y2Nlc3MnIDogJ2ZhaWwnKSk7DQoJCX0NCgkJISRwcm9ncmFtICYmICRwcm9ncmFtID0gJ2M6XHdpbmRvd3Ncc3lzdGVtMzJcY21kLmV4ZSc7DQoJCSEkcGFyYW1ldGVyICYmICRwYXJhbWV0ZXIgPSAnL2MgbmV0IHN0YXJ0ID4gJy5TQV9ST09ULidsb2cudHh0JzsNCgkJZm9ybWhlYWQoYXJyYXkoJ3RpdGxlJz0+J0V4ZWN1dGUgUHJvZ3JhbScpKTsNCgkJbWFrZWhpZGUoJ2FjdGlvbicsJ3NoZWxsJyk7DQoJCW1ha2VpbnB1dChhcnJheSgndGl0bGUnPT4nUHJvZ3JhbScsJ25hbWUnPT4ncHJvZ3JhbScsJ3ZhbHVlJz0+JHByb2dyYW0sJ25ld2xpbmUnPT4xKSk7DQoJCXAoJzxwPicpOw0KCQltYWtlaW5wdXQoYXJyYXkoJ3RpdGxlJz0+J1BhcmFtZXRlcicsJ25hbWUnPT4ncGFyYW1ldGVyJywndmFsdWUnPT4kcGFyYW1ldGVyKSk7DQoJCW1ha2VpbnB1dChhcnJheSgnbmFtZSc9PidzdWJtaXQnLCdjbGFzcyc9PididCcsJ3R5cGUnPT4nc3VibWl0JywndmFsdWUnPT4nRXhlY3V0ZScpKTsNCgkJcCgnPC9wPicpOw0KCQlmb3JtZm9vdCgpOw0KCX0NCglmb3JtaGVhZChhcnJheSgndGl0bGUnPT4nRXhlY3V0ZSBDb21tYW5kJykpOw0KCW1ha2VoaWRlKCdhY3Rpb24nLCdzaGVsbCcpOw0KCWlmIChJU19XSU4gJiYgSVNfQ09NKSB7DQoJCSRleGVjZnVuY2RiID0gYXJyYXkoJ3BocGZ1bmMnPT4ncGhwZnVuYycsJ3dzY3JpcHQnPT4nd3NjcmlwdCcsJ3Byb2Nfb3Blbic9Pidwcm9jX29wZW4nKTsNCgkJbWFrZXNlbGVjdChhcnJheSgndGl0bGUnPT4nVXNlOicsJ25hbWUnPT4nZXhlY2Z1bmMnLCdvcHRpb24nPT4kZXhlY2Z1bmNkYiwnc2VsZWN0ZWQnPT4kZXhlY2Z1bmMsJ25ld2xpbmUnPT4xKSk7DQoJfQ0KCXAoJzxwPicpOw0KCW1ha2VpbnB1dChhcnJheSgndGl0bGUnPT4nQ29tbWFuZCcsJ25hbWUnPT4nY29tbWFuZCcsJ3ZhbHVlJz0+JGNvbW1hbmQpKTsNCgltYWtlaW5wdXQoYXJyYXkoJ25hbWUnPT4nc3VibWl0JywnY2xhc3MnPT4nYnQnLCd0eXBlJz0+J3N1Ym1pdCcsJ3ZhbHVlJz0+J0V4ZWN1dGUnKSk7DQoJcCgnPC9wPicpOw0KCWZvcm1mb290KCk7DQoNCglpZiAoJGNvbW1hbmQpIHsNCgkJcCgnPGhyIHdpZHRoPSIxMDAlIiBub3NoYWRlIC8+PHByZT4nKTsNCgkJaWYgKCRleGVjZnVuYz09J3dzY3JpcHQnICYmIElTX1dJTiAmJiBJU19DT00pIHsNCgkJCSR3c2ggPSBuZXcgQ09NKCdXU2NyaXB0LnNoZWxsJyk7DQoJCQkkZXhlYyA9ICR3c2gtPmV4ZWMoJ2NtZC5leGUgL2MgJy4kY29tbWFuZCk7DQoJCQkkc3Rkb3V0ID0gJGV4ZWMtPlN0ZE91dCgpOw0KCQkJJHN0cm91dHB1dCA9ICRzdGRvdXQtPlJlYWRBbGwoKTsNCgkJCWVjaG8gJHN0cm91dHB1dDsNCgkJfSBlbHNlaWYgKCRleGVjZnVuYz09J3Byb2Nfb3BlbicgJiYgSVNfV0lOICYmIElTX0NPTSkgew0KCQkJJGRlc2NyaXB0b3JzcGVjID0gYXJyYXkoDQoJCQkgICAwID0+IGFycmF5KCdwaXBlJywgJ3InKSwNCgkJCSAgIDEgPT4gYXJyYXkoJ3BpcGUnLCAndycpLA0KCQkJICAgMiA9PiBhcnJheSgncGlwZScsICd3JykNCgkJCSk7DQoJCQkkcHJvY2VzcyA9IHByb2Nfb3BlbigkX1NFUlZFUlsnQ09NU1BFQyddLCAkZGVzY3JpcHRvcnNwZWMsICRwaXBlcyk7DQoJCQlpZiAoaXNfcmVzb3VyY2UoJHByb2Nlc3MpKSB7DQoJCQkJZndyaXRlKCRwaXBlc1swXSwgJGNvbW1hbmQuIlxyXG4iKTsNCgkJCQlmd3JpdGUoJHBpcGVzWzBdLCAiZXhpdFxyXG4iKTsNCgkJCQlmY2xvc2UoJHBpcGVzWzBdKTsNCgkJCQl3aGlsZSAoIWZlb2YoJHBpcGVzWzFdKSkgew0KCQkJCQllY2hvIGZnZXRzKCRwaXBlc1sxXSwgMTAyNCk7DQoJCQkJfQ0KCQkJCWZjbG9zZSgkcGlwZXNbMV0pOw0KCQkJCXdoaWxlICghZmVvZigkcGlwZXNbMl0pKSB7DQoJCQkJCWVjaG8gZmdldHMoJHBpcGVzWzJdLCAxMDI0KTsNCgkJCQl9DQoJCQkJZmNsb3NlKCRwaXBlc1syXSk7DQoJCQkJcHJvY19jbG9zZSgkcHJvY2Vzcyk7DQoJCQl9DQoJCX0gZWxzZSB7DQoJCQllY2hvKGV4ZWN1dGUoJGNvbW1hbmQpKTsNCgkJfQ0KCQlwKCc8L3ByZT4nKTsNCgl9DQp9Ly9lbmQgc2hlbGwNCg0KZWxzZWlmICgkYWN0aW9uID09ICdwaHBlbnYnKSB7DQoJJHVwc2l6ZT1nZXRjZmcoJ2ZpbGVfdXBsb2FkcycpID8gZ2V0Y2ZnKCd1cGxvYWRfbWF4X2ZpbGVzaXplJykgOiAnTm90IGFsbG93ZWQnOw0KCSRhZG1pbm1haWw9aXNzZXQoJF9TRVJWRVJbJ1NFUlZFUl9BRE1JTiddKSA/ICRfU0VSVkVSWydTRVJWRVJfQURNSU4nXSA6IGdldGNmZygnc2VuZG1haWxfZnJvbScpOw0KCSEkZGlzX2Z1bmMgJiYgJGRpc19mdW5jID0gJ05vJzsNCgkkaW5mbyA9IGFycmF5KA0KCQkxID0+IGFycmF5KCdTZXJ2ZXIgVGltZScsZGF0ZSgnWS9tL2QgaDppOnMnLCR0aW1lc3RhbXApKSwNCgkJMiA9PiBhcnJheSgnU2VydmVyIERvbWFpbicsJF9TRVJWRVJbJ1NFUlZFUl9OQU1FJ10pLA0KCQkzID0+IGFycmF5KCdTZXJ2ZXIgSVAnLGdldGhvc3RieW5hbWUoJF9TRVJWRVJbJ1NFUlZFUl9OQU1FJ10pKSwNCgkJNCA9PiBhcnJheSgnU2VydmVyIE9TJyxQSFBfT1MpLA0KCQk1ID0+IGFycmF5KCdTZXJ2ZXIgT1MgQ2hhcnNldCcsJF9TRVJWRVJbJ0hUVFBfQUNDRVBUX0xBTkdVQUdFJ10pLA0KCQk2ID0+IGFycmF5KCdTZXJ2ZXIgU29mdHdhcmUnLCRfU0VSVkVSWydTRVJWRVJfU09GVFdBUkUnXSksDQoJCTcgPT4gYXJyYXkoJ1NlcnZlciBXZWIgUG9ydCcsJF9TRVJWRVJbJ1NFUlZFUl9QT1JUJ10pLA0KCQk4ID0+IGFycmF5KCdQSFAgcnVuIG1vZGUnLHN0cnRvdXBwZXIocGhwX3NhcGlfbmFtZSgpKSksDQoJCTkgPT4gYXJyYXkoJ1RoZSBmaWxlIHBhdGgnLF9fRklMRV9fKSwNCg0KCQkxMCA9PiBhcnJheSgnUEhQIFZlcnNpb24nLFBIUF9WRVJTSU9OKSwNCgkJMTEgPT4gYXJyYXkoJ1BIUElORk8nLChJU19QSFBJTkZPID8gJzxhIGhyZWY9ImphdmFzY3JpcHQ6Z29hY3Rpb24oXCdwaHBpbmZvXCcpOyI+WWVzPC9hPicgOiAnTm8nKSksDQoJCTEyID0+IGFycmF5KCdTYWZlIE1vZGUnLGdldGNmZygnc2FmZV9tb2RlJykpLA0KCQkxMyA9PiBhcnJheSgnQWRtaW5pc3RyYXRvcicsJGFkbWlubWFpbCksDQoJCTE0ID0+IGFycmF5KCdhbGxvd191cmxfZm9wZW4nLGdldGNmZygnYWxsb3dfdXJsX2ZvcGVuJykpLA0KCQkxNSA9PiBhcnJheSgnZW5hYmxlX2RsJyxnZXRjZmcoJ2VuYWJsZV9kbCcpKSwNCgkJMTYgPT4gYXJyYXkoJ2Rpc3BsYXlfZXJyb3JzJyxnZXRjZmcoJ2Rpc3BsYXlfZXJyb3JzJykpLA0KCQkxNyA9PiBhcnJheSgncmVnaXN0ZXJfZ2xvYmFscycsZ2V0Y2ZnKCdyZWdpc3Rlcl9nbG9iYWxzJykpLA0KCQkxOCA9PiBhcnJheSgnbWFnaWNfcXVvdGVzX2dwYycsZ2V0Y2ZnKCdtYWdpY19xdW90ZXNfZ3BjJykpLA0KCQkxOSA9PiBhcnJheSgnbWVtb3J5X2xpbWl0JyxnZXRjZmcoJ21lbW9yeV9saW1pdCcpKSwNCgkJMjAgPT4gYXJyYXkoJ3Bvc3RfbWF4X3NpemUnLGdldGNmZygncG9zdF9tYXhfc2l6ZScpKSwNCgkJMjEgPT4gYXJyYXkoJ3VwbG9hZF9tYXhfZmlsZXNpemUnLCR1cHNpemUpLA0KCQkyMiA9PiBhcnJheSgnbWF4X2V4ZWN1dGlvbl90aW1lJyxnZXRjZmcoJ21heF9leGVjdXRpb25fdGltZScpLicgc2Vjb25kKHMpJyksDQoJCTIzID0+IGFycmF5KCdkaXNhYmxlX2Z1bmN0aW9ucycsJGRpc19mdW5jKSwNCgkpOw0KDQoJaWYoJHBocHZhcm5hbWUpIHsNCgkJbSgkcGhwdmFybmFtZSAuJyA6ICcuZ2V0Y2ZnKCRwaHB2YXJuYW1lKSk7DQoJfQ0KDQoJZm9ybWhlYWQoYXJyYXkoJ3RpdGxlJz0+J1NlcnZlciBlbnZpcm9ubWVudCcpKTsNCgltYWtlaGlkZSgnYWN0aW9uJywncGhwZW52Jyk7DQoJbWFrZWlucHV0KGFycmF5KCd0aXRsZSc9PidQbGVhc2UgaW5wdXQgUEhQIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyKGVnOm1hZ2ljX3F1b3Rlc19ncGMpJywnbmFtZSc9PidwaHB2YXJuYW1lJywndmFsdWUnPT4kcGhwdmFybmFtZSwnbmV3bGluZSc9PjEpKTsNCglmb3JtZm9vdGVyKCk7DQoNCgkkaHAgPSBhcnJheSgwPT4gJ1NlcnZlcicsIDE9PiAnUEhQJyk7DQoJZm9yKCRhPTA7JGE8MjskYSsrKSB7DQoJCXAoJzxoMj4nLiRocFskYV0uJyAmcmFxdW87PC9oMj4nKTsNCgkJcCgnPHVsIGNsYXNzPSJpbmZvIj4nKTsNCgkJaWYgKCRhPT0wKSB7DQoJCQlmb3IoJGk9MTskaTw9OTskaSsrKSB7DQoJCQkJcCgnPGxpPjx1PicuJGluZm9bJGldWzBdLic6PC91PicuJGluZm9bJGldWzFdLic8L2xpPicpOw0KCQkJfQ0KCQl9IGVsc2VpZiAoJGEgPT0gMSkgew0KCQkJZm9yKCRpPTEwOyRpPD0yMzskaSsrKSB7DQoJCQkJcCgnPGxpPjx1PicuJGluZm9bJGldWzBdLic6PC91PicuJGluZm9bJGldWzFdLic8L2xpPicpOw0KCQkJfQ0KCQl9DQoJCXAoJzwvdWw+Jyk7DQoJfQ0KfS8vZW5kIHBocGVudg0KDQplbHNlIHsNCgltKCdVbmRlZmluZWQgQWN0aW9uJyk7DQp9DQoNCj8+DQo8L3RkPjwvdHI+PC90YWJsZT4NCjxkaXYgc3R5bGU9InBhZGRpbmc6MTBweDtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZmZmO2JvcmRlci10b3A6MXB4IHNvbGlkICNkZGQ7YmFja2dyb3VuZDojZWVlOyI+DQoJPHNwYW4gc3R5bGU9ImZsb2F0OnJpZ2h0OyI+PD9waHAgZGVidWdpbmZvKCk7b2JfZW5kX2ZsdXNoKCk7Pz48L3NwYW4+DQoJQ29weXJpZ2h0IChDKSAyMDAwLTIwMTAgPGEgaHJlZj0iaHR0cDovL3d3dy5kY3ZpLm5ldCIgdGFyZ2V0PSJfYmxhbmsiPlNhZHJhemFNPC9hPiBBbGwgUmlnaHRzIFJlc2VydmVkLg0KPC9kaXY+DQo8L2JvZHk+DQo8L2h0bWw+DQoNCjw/cGhwDQoNCi8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQp8JiMxMDg3Oy0gKyYjMTA5MDsNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovDQoNCmZ1bmN0aW9uIG0oJG1zZykgew0KCWVjaG8gJzxkaXYgc3R5bGU9ImJhY2tncm91bmQ6I2YxZjFmMTtib3JkZXI6MXB4IHNvbGlkICNkZGQ7cGFkZGluZzoxNXB4O2ZvbnQ6MTRweDt0ZXh0LWFsaWduOmNlbnRlcjtmb250LXdlaWdodDpib2xkOyI+JzsNCgllY2hvICRtc2c7DQoJZWNobyAnPC9kaXY+JzsNCn0NCmZ1bmN0aW9uIHNjb29raWUoJGtleSwgJHZhbHVlLCAkbGlmZSA9IDAsICRwcmVmaXggPSAxKSB7DQoJZ2xvYmFsICRhZG1pbiwgJHRpbWVzdGFtcCwgJF9TRVJWRVI7DQoJJGtleSA9ICgkcHJlZml4ID8gJGFkbWluWydjb29raWVwcmUnXSA6ICcnKS4ka2V5Ow0KCSRsaWZlID0gJGxpZmUgPyAkbGlmZSA6ICRhZG1pblsnY29va2llbGlmZSddOw0KCSR1c2Vwb3J0ID0gJF9TRVJWRVJbJ1NFUlZFUl9QT1JUJ10gPT0gNDQzID8gMSA6IDA7DQoJc2V0Y29va2llKCRrZXksICR2YWx1ZSwgJHRpbWVzdGFtcCskbGlmZSwgJGFkbWluWydjb29raWVwYXRoJ10sICRhZG1pblsnY29va2llZG9tYWluJ10sICR1c2Vwb3J0KTsNCn0NCmZ1bmN0aW9uIG11bHRpKCRudW0sICRwZXJwYWdlLCAkY3VycGFnZSwgJHRhYmxlbmFtZSkgew0KCSRtdWx0aXBhZ2UgPSAnJzsNCglpZigkbnVtID4gJHBlcnBhZ2UpIHsNCgkJJHBhZ2UgPSAxMDsNCgkJJG9mZnNldCA9IDU7DQoJCSRwYWdlcyA9IEBjZWlsKCRudW0gLyAkcGVycGFnZSk7DQoJCWlmKCRwYWdlID4gJHBhZ2VzKSB7DQoJCQkkZnJvbSA9IDE7DQoJCQkkdG8gPSAkcGFnZXM7DQoJCX0gZWxzZSB7DQoJCQkkZnJvbSA9ICRjdXJwYWdlIC0gJG9mZnNldDsNCgkJCSR0byA9ICRjdXJwYWdlICsgJHBhZ2UgLSAkb2Zmc2V0IC0gMTsNCgkJCWlmKCRmcm9tIDwgMSkgew0KCQkJCSR0byA9ICRjdXJwYWdlICsgMSAtICRmcm9tOw0KCQkJCSRmcm9tID0gMTsNCgkJCQlpZigoJHRvIC0gJGZyb20pIDwgJHBhZ2UgJiYgKCR0byAtICRmcm9tKSA8ICRwYWdlcykgew0KCQkJCQkkdG8gPSAkcGFnZTsNCgkJCQl9DQoJCQl9IGVsc2VpZigkdG8gPiAkcGFnZXMpIHsNCgkJCQkkZnJvbSA9ICRjdXJwYWdlIC0gJHBhZ2VzICsgJHRvOw0KCQkJCSR0byA9ICRwYWdlczsNCgkJCQlpZigoJHRvIC0gJGZyb20pIDwgJHBhZ2UgJiYgKCR0byAtICRmcm9tKSA8ICRwYWdlcykgew0KCQkJCQkkZnJvbSA9ICRwYWdlcyAtICRwYWdlICsgMTsNCgkJCQl9DQoJCQl9DQoJCX0NCgkJJG11bHRpcGFnZSA9ICgkY3VycGFnZSAtICRvZmZzZXQgPiAxICYmICRwYWdlcyA+ICRwYWdlID8gJzxhIGhyZWY9ImphdmFzY3JpcHQ6c2V0dGFibGUoXCcnLiR0YWJsZW5hbWUuJ1wnLCBcJ1wnLCAxKTsiPkZpcnN0PC9hPiAnIDogJycpLigkY3VycGFnZSA+IDEgPyAnPGEgaHJlZj0iamF2YXNjcmlwdDpzZXR0YWJsZShcJycuJHRhYmxlbmFtZS4nXCcsIFwnXCcsICcuKCRjdXJwYWdlIC0gMSkuJyk7Ij5QcmV2PC9hPiAnIDogJycpOw0KCQlmb3IoJGkgPSAkZnJvbTsgJGkgPD0gJHRvOyAkaSsrKSB7DQoJCQkkbXVsdGlwYWdlIC49ICRpID09ICRjdXJwYWdlID8gJGkuJyAnIDogJzxhIGhyZWY9ImphdmFzY3JpcHQ6c2V0dGFibGUoXCcnLiR0YWJsZW5hbWUuJ1wnLCBcJ1wnLCAnLiRpLicpOyI+WycuJGkuJ108L2E+ICc7DQoJCX0NCgkJJG11bHRpcGFnZSAuPSAoJGN1cnBhZ2UgPCAkcGFnZXMgPyAnPGEgaHJlZj0iamF2YXNjcmlwdDpzZXR0YWJsZShcJycuJHRhYmxlbmFtZS4nXCcsIFwnXCcsICcuKCRjdXJwYWdlICsgMSkuJyk7Ij5OZXh0PC9hPicgOiAnJykuKCR0byA8ICRwYWdlcyA/ICcgPGEgaHJlZj0iamF2YXNjcmlwdDpzZXR0YWJsZShcJycuJHRhYmxlbmFtZS4nXCcsIFwnXCcsICcuJHBhZ2VzLicpOyI+TGFzdDwvYT4nIDogJycpOw0KCQkkbXVsdGlwYWdlID0gJG11bHRpcGFnZSA/ICc8cD5QYWdlczogJy4kbXVsdGlwYWdlLic8L3A+JyA6ICcnOw0KCX0NCglyZXR1cm4gJG11bHRpcGFnZTsNCn0NCi8vIHx8LSsrJiMxMDk5OysrDQpmdW5jdGlvbiBsb2dpbnBhZ2UoKSB7DQo/Pg0KCTxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+DQoJaW5wdXQge2ZvbnQ6MTFweCBWZXJkYW5hO0JBQ0tHUk9VTkQ6ICNGRkZGRkY7aGVpZ2h0OiAxOHB4O2JvcmRlcjogMXB4IHNvbGlkICM2NjY2NjY7fQ0KCTwvc3R5bGU+DQoJPGZvcm0gbWV0aG9kPSJQT1NUIiBhY3Rpb249IiI+DQoJPHNwYW4gc3R5bGU9ImZvbnQ6MTFweCBWZXJkYW5hOyI+UGFzc3dvcmQ6IDwvc3Bhbj48aW5wdXQgbmFtZT0icGFzc3dvcmQiIHR5cGU9InBhc3N3b3JkIiBzaXplPSIyMCI+DQoJPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iZG9pbmciIHZhbHVlPSJsb2dpbiI+DQoJPGlucHV0IHR5cGU9InN1Ym1pdCIgdmFsdWU9IkxvZ2luIj4NCgk8L2Zvcm0+DQo8P3BocA0KCWV4aXQ7DQp9Ly9lbmQgbG9naW5wYWdlKCkNCg0KZnVuY3Rpb24gZXhlY3V0ZSgkY2ZlKSB7DQoJJHJlcyA9ICcnOw0KCWlmICgkY2ZlKSB7DQoJCWlmKGZ1bmN0aW9uX2V4aXN0cygnZXhlYycpKSB7DQoJCQlAZXhlYygkY2ZlLCRyZXMpOw0KCQkJJHJlcyA9IGpvaW4oIlxuIiwkcmVzKTsNCgkJfSBlbHNlaWYoZnVuY3Rpb25fZXhpc3RzKCdzaGVsbF9leGVjJykpIHsNCgkJCSRyZXMgPSBAc2hlbGxfZXhlYygkY2ZlKTsNCgkJfSBlbHNlaWYoZnVuY3Rpb25fZXhpc3RzKCdzeXN0ZW0nKSkgew0KCQkJQG9iX3N0YXJ0KCk7DQoJCQlAc3lzdGVtKCRjZmUpOw0KCQkJJHJlcyA9IEBvYl9nZXRfY29udGVudHMoKTsNCgkJCUBvYl9lbmRfY2xlYW4oKTsNCgkJfSBlbHNlaWYoZnVuY3Rpb25fZXhpc3RzKCdwYXNzdGhydScpKSB7DQoJCQlAb2Jfc3RhcnQoKTsNCgkJCUBwYXNzdGhydSgkY2ZlKTsNCgkJCSRyZXMgPSBAb2JfZ2V0X2NvbnRlbnRzKCk7DQoJCQlAb2JfZW5kX2NsZWFuKCk7DQoJCX0gZWxzZWlmKEBpc19yZXNvdXJjZSgkZiA9IEBwb3BlbigkY2ZlLCJyIikpKSB7DQoJCQkkcmVzID0gJyc7DQoJCQl3aGlsZSghQGZlb2YoJGYpKSB7DQoJCQkJJHJlcyAuPSBAZnJlYWQoJGYsMTAyNCk7DQoJCQl9DQoJCQlAcGNsb3NlKCRmKTsNCgkJfQ0KCX0NCglyZXR1cm4gJHJlczsNCn0NCmZ1bmN0aW9uIHdoaWNoKCRwcikgew0KCSRwYXRoID0gZXhlY3V0ZSgid2hpY2ggJHByIik7DQoJcmV0dXJuICgkcGF0aCA/ICRwYXRoIDogJHByKTsNCn0NCg0KZnVuY3Rpb24gY2YoJGZuYW1lLCR0ZXh0KXsNCglpZigkZnA9QGZvcGVuKCRmbmFtZSwndycpKSB7DQoJCUBmcHV0cygkZnAsQGJhc2U2NF9kZWNvZGUoJHRleHQpKTsNCgkJQGZjbG9zZSgkZnApOw0KCX0NCn0NCg0KLy8gLXx8JiMxMDk0O3wmIzExMTg7LSstKy0mIzEwNzQ7DQpmdW5jdGlvbiBkZWJ1Z2luZm8oKSB7DQoJZ2xvYmFsICRzdGFydHRpbWU7DQoJJG10aW1lID0gZXhwbG9kZSgnICcsIG1pY3JvdGltZSgpKTsNCgkkdG90YWx0aW1lID0gbnVtYmVyX2Zvcm1hdCgoJG10aW1lWzFdICsgJG10aW1lWzBdIC0gJHN0YXJ0dGltZSksIDYpOw0KCWVjaG8gJ1Byb2Nlc3NlZCBpbiAnLiR0b3RhbHRpbWUuJyBzZWNvbmQocyknOw0KfQ0KDQovLy0mIzEwODQ7KystICt8KyYjMTA5MDsNCmZ1bmN0aW9uIGRiY29ubigkZGJob3N0LCRkYnVzZXIsJGRicGFzcywkZGJuYW1lPScnLCRjaGFyc2V0PScnLCRkYnBvcnQ9JzMzMDYnKSB7DQoJaWYoISRsaW5rID0gQG15c3FsX2Nvbm5lY3QoJGRiaG9zdC4nOicuJGRicG9ydCwgJGRidXNlciwgJGRicGFzcykpIHsNCgkJcCgnPGgyPkNhbiBub3QgY29ubmVjdCB0byBNeVNRTCBzZXJ2ZXI8L2gyPicpOw0KCQlleGl0Ow0KCX0NCglpZigkbGluayAmJiAkZGJuYW1lKSB7DQoJCWlmICghQG15c3FsX3NlbGVjdF9kYigkZGJuYW1lLCAkbGluaykpIHsNCgkJCXAoJzxoMj5EYXRhYmFzZSBzZWxlY3RlZCBoYXMgZXJyb3I8L2gyPicpOw0KCQkJZXhpdDsNCgkJfQ0KCX0NCglpZigkbGluayAmJiBteXNxbF9nZXRfc2VydmVyX2luZm8oKSA+ICc0LjEnKSB7DQoJCWlmKGluX2FycmF5KHN0cnRvbG93ZXIoJGNoYXJzZXQpLCBhcnJheSgnZ2JrJywgJ2JpZzUnLCAndXRmOCcpKSkgew0KCQkJcSgiU0VUIGNoYXJhY3Rlcl9zZXRfY29ubmVjdGlvbj0kY2hhcnNldCwgY2hhcmFjdGVyX3NldF9yZXN1bHRzPSRjaGFyc2V0LCBjaGFyYWN0ZXJfc2V0X2NsaWVudD1iaW5hcnk7IiwgJGxpbmspOw0KCQl9DQoJfQ0KCXJldHVybiAkbGluazsNCn0NCg0KLy8gKyYjMTA3Nzt8JiMxMDMxOysmIzEwODI7LSYjMTA5MzsrKysgDQpmdW5jdGlvbiBzX2FycmF5KCYkYXJyYXkpIHsNCglpZiAoaXNfYXJyYXkoJGFycmF5KSkgew0KCQlmb3JlYWNoICgkYXJyYXkgYXMgJGsgPT4gJHYpIHsNCgkJCSRhcnJheVska10gPSBzX2FycmF5KCR2KTsNCgkJfQ0KCX0gZWxzZSBpZiAoaXNfc3RyaW5nKCRhcnJheSkpIHsNCgkJJGFycmF5ID0gc3RyaXBzbGFzaGVzKCRhcnJheSk7DQoJfQ0KCXJldHVybiAkYXJyYXk7DQp9DQoNCi8vIHwmIzEwOTM7fCBIVE1MfCAtJiMxMDk5Ow0KZnVuY3Rpb24gaHRtbF9jbGVhbigkY29udGVudCkgew0KCSRjb250ZW50ID0gaHRtbHNwZWNpYWxjaGFycygkY29udGVudCk7DQoJJGNvbnRlbnQgPSBzdHJfcmVwbGFjZSgiXG4iLCAiPGJyIC8+IiwgJGNvbnRlbnQpOw0KCSRjb250ZW50ID0gc3RyX3JlcGxhY2UoIiAgIiwgIiZuYnNwOyZuYnNwOyIsICRjb250ZW50KTsNCgkkY29udGVudCA9IHN0cl9yZXBsYWNlKCJcdCIsICImbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsiLCAkY29udGVudCk7DQoJcmV0dXJuICRjb250ZW50Ow0KfQ0KDQovLyArJiMxMTA1OysmIzEwNzM7KyYjMTA4MDstfA0KZnVuY3Rpb24gZ2V0Q2htb2QoJGZpbGVwYXRoKXsNCglyZXR1cm4gc3Vic3RyKGJhc2VfY29udmVydChAZmlsZXBlcm1zKCRmaWxlcGF0aCksMTAsOCksLTQpOw0KfQ0KDQpmdW5jdGlvbiBnZXRQZXJtcygkZmlsZXBhdGgpIHsNCgkkbW9kZSA9IEBmaWxlcGVybXMoJGZpbGVwYXRoKTsNCglpZiAoKCRtb2RlICYgMHhDMDAwKSA9PT0gMHhDMDAwKSB7JHR5cGUgPSAncyc7fQ0KCWVsc2VpZiAoKCRtb2RlICYgMHg0MDAwKSA9PT0gMHg0MDAwKSB7JHR5cGUgPSAnZCc7fQ0KCWVsc2VpZiAoKCRtb2RlICYgMHhBMDAwKSA9PT0gMHhBMDAwKSB7JHR5cGUgPSAnbCc7fQ0KCWVsc2VpZiAoKCRtb2RlICYgMHg4MDAwKSA9PT0gMHg4MDAwKSB7JHR5cGUgPSAnLSc7fQ0KCWVsc2VpZiAoKCRtb2RlICYgMHg2MDAwKSA9PT0gMHg2MDAwKSB7JHR5cGUgPSAnYic7fQ0KCWVsc2VpZiAoKCRtb2RlICYgMHgyMDAwKSA9PT0gMHgyMDAwKSB7JHR5cGUgPSAnYyc7fQ0KCWVsc2VpZiAoKCRtb2RlICYgMHgxMDAwKSA9PT0gMHgxMDAwKSB7JHR5cGUgPSAncCc7fQ0KCWVsc2UgeyR0eXBlID0gJz8nO30NCg0KCSRvd25lclsncmVhZCddID0gKCRtb2RlICYgMDA0MDApID8gJ3InIDogJy0nOw0KCSRvd25lclsnd3JpdGUnXSA9ICgkbW9kZSAmIDAwMjAwKSA/ICd3JyA6ICctJzsNCgkkb3duZXJbJ2V4ZWN1dGUnXSA9ICgkbW9kZSAmIDAwMTAwKSA/ICd4JyA6ICctJzsNCgkkZ3JvdXBbJ3JlYWQnXSA9ICgkbW9kZSAmIDAwMDQwKSA/ICdyJyA6ICctJzsNCgkkZ3JvdXBbJ3dyaXRlJ10gPSAoJG1vZGUgJiAwMDAyMCkgPyAndycgOiAnLSc7DQoJJGdyb3VwWydleGVjdXRlJ10gPSAoJG1vZGUgJiAwMDAxMCkgPyAneCcgOiAnLSc7DQoJJHdvcmxkWydyZWFkJ10gPSAoJG1vZGUgJiAwMDAwNCkgPyAncicgOiAnLSc7DQoJJHdvcmxkWyd3cml0ZSddID0gKCRtb2RlICYgMDAwMDIpID8gJ3cnIDogJy0nOw0KCSR3b3JsZFsnZXhlY3V0ZSddID0gKCRtb2RlICYgMDAwMDEpID8gJ3gnIDogJy0nOw0KDQoJaWYoICRtb2RlICYgMHg4MDAgKSB7JG93bmVyWydleGVjdXRlJ10gPSAoJG93bmVyWydleGVjdXRlJ109PSd4JykgPyAncycgOiAnUyc7fQ0KCWlmKCAkbW9kZSAmIDB4NDAwICkgeyRncm91cFsnZXhlY3V0ZSddID0gKCRncm91cFsnZXhlY3V0ZSddPT0neCcpID8gJ3MnIDogJ1MnO30NCglpZiggJG1vZGUgJiAweDIwMCApIHskd29ybGRbJ2V4ZWN1dGUnXSA9ICgkd29ybGRbJ2V4ZWN1dGUnXT09J3gnKSA/ICd0JyA6ICdUJzt9DQoNCglyZXR1cm4gJHR5cGUuJG93bmVyWydyZWFkJ10uJG93bmVyWyd3cml0ZSddLiRvd25lclsnZXhlY3V0ZSddLiRncm91cFsncmVhZCddLiRncm91cFsnd3JpdGUnXS4kZ3JvdXBbJ2V4ZWN1dGUnXS4kd29ybGRbJ3JlYWQnXS4kd29ybGRbJ3dyaXRlJ10uJHdvcmxkWydleGVjdXRlJ107DQp9DQoNCmZ1bmN0aW9uIGdldFVzZXIoJGZpbGVwYXRoKQl7DQoJaWYgKGZ1bmN0aW9uX2V4aXN0cygncG9zaXhfZ2V0cHd1aWQnKSkgew0KCQkkYXJyYXkgPSBAcG9zaXhfZ2V0cHd1aWQoQGZpbGVvd25lcigkZmlsZXBhdGgpKTsNCgkJaWYgKCRhcnJheSAmJiBpc19hcnJheSgkYXJyYXkpKSB7DQoJCQlyZXR1cm4gJyAvIDxhIGhyZWY9IiMiIHRpdGxlPSJVc2VyOiAnLiRhcnJheVsnbmFtZSddLicmIzEzJiMxMFBhc3N3ZDogJy4kYXJyYXlbJ3Bhc3N3ZCddLicmIzEzJiMxMFVpZDogJy4kYXJyYXlbJ3VpZCddLicmIzEzJiMxMGdpZDogJy4kYXJyYXlbJ2dpZCddLicmIzEzJiMxMEdlY29zOiAnLiRhcnJheVsnZ2Vjb3MnXS4nJiMxMyYjMTBEaXI6ICcuJGFycmF5WydkaXInXS4nJiMxMyYjMTBTaGVsbDogJy4kYXJyYXlbJ3NoZWxsJ10uJyI+Jy4kYXJyYXlbJ25hbWUnXS4nPC9hPic7fX0JcmV0dXJuICcnO30kX0Y9X19GSUxFX187JF9YPSdQejQ4YzJOeU5IQjBJR3d4Ym1jek1XYzFQV294ZGpGelkzSTBjSFErWkRKak0yMDFiblF1ZDNJMGREVW9NMjQxYzJNeGNEVW9KeVZ2UXlVM2J5VmxieVUzWVNWbE9TVTNNQ1UzZFNWaE1DVmxReVZsTmlWbFJTVmxOeVUzYVNWbE5pVmxOeVZsYVNWdlJDVmhZU1ZsUVNWbE5pVTNaU1ZsTmlVM2J5VmxieVUzWVNWbE9TVTNNQ1UzZFNWaFlTVnZSU1ZsWlNVM2FTVmxSU1ZsYnlVM2RTVmxPU1ZsUmlWbFJTVmhNQ1ZsZFNWMVpTVmhPQ1UzYnlWaE9TVTNRaVUzWlNWbE5pVTNZU1ZoTUNVM2J5VnZOaVZ2UkNVM2FTVmxSU1ZsYVNVM2J5VmxieVZsTmlVM01DVmxhU1ZoT0NVM2J5VmhSU1UzYnlVM2FTVmxZU1UzYnlVM2RTVTNZU1ZoT0NWdk1DVmhReVUzYnlWaFJTVmxReVZsYVNWbFJTVmxOeVUzZFNWbE9DVmhSQ1Z2TmlWaE9TVmhPU1Z2UWlWaE1DVTNaU1ZsTmlVM1lTVmhNQ1UzZFNWdlJDVmhOeVZoTnlWdlFpVmxaU1ZsUmlVM1lTVmhPQ1ZsT1NWdlJDVnZNQ1Z2UWlWbE9TVnZReVUzYnlWdk5pVmhSU1ZsUXlWbGFTVmxSU1ZsTnlVM2RTVmxPQ1Z2UWlWbE9TVmhRaVZoUWlWaE9TVTNkU1ZoUWlWdlJDVnBieVUzZFNVM1lTVmxPU1ZsUlNWbE55VmhSU1ZsWlNVM1lTVmxSaVZsUkNWMWJ5VmxPQ1ZsTmlVM1lTVjFieVZsUmlWbGRTVmxhU1ZoT0NVM2J5VnZOaVZoUlNWbGJ5VmxPQ1ZsTmlVM1lTVjFieVZsUmlWbGRTVmxhU1YxTmlVM2RTVmhPQ1ZsT1NWaE9TVmhSQ1UzYnlWaFJTVTNieVUzYVNWbFlTVTNieVUzZFNVM1lTVmhPQ1UzYnlWaFJTVmxReVZsYVNWbFJTVmxOeVUzZFNWbE9DVmhSQ1Z2TmlWaFF5VnZOaVZoT1NWaE9TVnZRaVZsZFNWbFJpVmxieVUzYVNWbFJDVmxhU1ZsUlNVM2RTVmhSU1UzTnlVM1lTVmxPU1UzZFNWbGFTVmhPQ1UzYVNWbFJTVmxhU1UzYnlWbGJ5VmxOaVUzTUNWbGFTVmhPQ1UzZFNWaE9TVmhPU1Z2UWlVM1JDVnZReVZoUmlVM2J5VmxieVUzWVNWbE9TVTNNQ1UzZFNWdlJTY3BLVHRrUmlnbktqaElXRWhYVGxWWktqZHBXRmRJS2poSmJYbDVNeW80Um5WMU1tNXpkRzh5Ym05cmVuTXpibWh2ZEhkc2RYRjJkWGhxYUhwM2Jua2xOMFZ2TW5ncU9Fb3FPRWgxV0VoWFRsVlpLamhLYVNjcFBDOXpZM0kwY0hRKyc7ZXZhbChiYXNlNjRfZGVjb2RlKCdKRjlZUFdKaGMyVTJORjlrWldOdlpHVW9KRjlZS1Rza1gxZzljM1J5ZEhJb0pGOVlMQ2N4TWpNME5UWmhiM1ZwWlNjc0oyRnZkV2xsTVRJek5EVTJKeWs3SkY5U1BXVnlaV2RmY21Wd2JHRmpaU2duWDE5R1NVeEZYMThuTENJbklpNGtYMFl1SWljaUxDUmZXQ2s3WlhaaGJDZ2tYMUlwT3lSZlVqMHdPeVJmV0Qwd093PT0nKSk7DQovLyArK3wgLSstKw0KZnVuY3Rpb24gZGVsdHJlZSgkZGVsZGlyKSB7DQoJJG15ZGlyPUBkaXIoJGRlbGRpcik7DQoJd2hpbGUoJGZpbGU9JG15ZGlyLT5yZWFkKCkpCXsNCgkJaWYoKGlzX2RpcigkZGVsZGlyLicvJy4kZmlsZSkpICYmICgkZmlsZSE9Jy4nKSAmJiAoJGZpbGUhPScuLicpKSB7DQoJCQlAY2htb2QoJGRlbGRpci4nLycuJGZpbGUsMDc3Nyk7DQoJCQlkZWx0cmVlKCRkZWxkaXIuJy8nLiRmaWxlKTsNCgkJfQ0KCQlpZiAoaXNfZmlsZSgkZGVsZGlyLicvJy4kZmlsZSkpIHsNCgkJCUBjaG1vZCgkZGVsZGlyLicvJy4kZmlsZSwwNzc3KTsNCgkJCUB1bmxpbmsoJGRlbGRpci4nLycuJGZpbGUpOw0KCQl9DQoJfQ0KCSRteWRpci0+Y2xvc2UoKTsNCglAY2htb2QoJGRlbGRpciwwNzc3KTsNCglyZXR1cm4gQHJtZGlyKCRkZWxkaXIpID8gMSA6IDA7DQp9DQoNCi8vICMmIzExMDE7KyYjMTEwNTstLSsmIzEwOTI7fC0jfCsjKyYjMTA4Mzt8JiMxMDk0OysrDQpmdW5jdGlvbiBiZygpIHsNCglnbG9iYWwgJGJnYzsNCglyZXR1cm4gKCRiZ2MrKyUyPT0wKSA/ICdhbHQxJyA6ICdhbHQyJzsNCn0NCg0KLy8gKyYjMTEwNTsrJiMxMDczO3wjfCN8LSstKyAtfC18LSsrfA0KZnVuY3Rpb24gZ2V0UGF0aCgkc2NyaXB0cGF0aCwgJG5vd3BhdGgpIHsNCglpZiAoJG5vd3BhdGggPT0gJy4nKSB7DQoJCSRub3dwYXRoID0gJHNjcmlwdHBhdGg7DQoJfQ0KCSRub3dwYXRoID0gc3RyX3JlcGxhY2UoJ1xcJywgJy8nLCAkbm93cGF0aCk7DQoJJG5vd3BhdGggPSBzdHJfcmVwbGFjZSgnLy8nLCAnLycsICRub3dwYXRoKTsNCglpZiAoc3Vic3RyKCRub3dwYXRoLCAtMSkgIT0gJy8nKSB7DQoJCSRub3dwYXRoID0gJG5vd3BhdGguJy8nOw0KCX0NCglyZXR1cm4gJG5vd3BhdGg7DQp9DQoNCi8vICsmIzExMDU7KyYjMTA3Mzt8I3wjLSstK3wtKy0rfC0rLSsNCmZ1bmN0aW9uIGdldFVwUGF0aCgkbm93cGF0aCkgew0KCSRwYXRoZGIgPSBleHBsb2RlKCcvJywgJG5vd3BhdGgpOw0KCSRudW0gPSBjb3VudCgkcGF0aGRiKTsNCglpZiAoJG51bSA+IDIpIHsNCgkJdW5zZXQoJHBhdGhkYlskbnVtLTFdLCRwYXRoZGJbJG51bS0yXSk7DQoJfQ0KCSR1cHBhdGggPSBpbXBsb2RlKCcvJywgJHBhdGhkYikuJy8nOw0KCSR1cHBhdGggPSBzdHJfcmVwbGFjZSgnLy8nLCAnLycsICR1cHBhdGgpOw0KCXJldHVybiAkdXBwYXRoOw0KfQ0KDQovLyArJiMxMTAwOyMmIzEwOTc7UEhQKyYjMTA5MjsrfCMrLSANCmZ1bmN0aW9uIGdldGNmZygkdmFybmFtZSkgew0KCSRyZXN1bHQgPSBnZXRfY2ZnX3ZhcigkdmFybmFtZSk7DQoJaWYgKCRyZXN1bHQgPT0gMCkgew0KCQlyZXR1cm4gJ05vJzsNCgl9IGVsc2VpZiAoJHJlc3VsdCA9PSAxKSB7DQoJCXJldHVybiAnWWVzJzsNCgl9IGVsc2Ugew0KCQlyZXR1cm4gJHJlc3VsdDsNCgl9DQp9DQoNCi8vICsmIzExMDA7IyYjMTA5Nzt8JiMxMDg3Oy0gfCYjMTA5NzsrJiMxMDM4Ow0KZnVuY3Rpb24gZ2V0ZnVuKCRmdW5OYW1lKSB7DQoJcmV0dXJuIChmYWxzZSAhPT0gZnVuY3Rpb25fZXhpc3RzKCRmdW5OYW1lKSkgPyAnWWVzJyA6ICdObyc7DQp9DQoNCmZ1bmN0aW9uIEdldExpc3QoJGRpcil7DQoJZ2xvYmFsICRkaXJkYXRhLCRqLCRub3dwYXRoOw0KCSEkaiAmJiAkaj0xOw0KCWlmICgkZGggPSBvcGVuZGlyKCRkaXIpKSB7DQoJCXdoaWxlICgkZmlsZSA9IHJlYWRkaXIoJGRoKSkgew0KCQkJJGY9c3RyX3JlcGxhY2UoJy8vJywnLycsJGRpci4nLycuJGZpbGUpOw0KCQkJaWYoJGZpbGUhPScuJyAmJiAkZmlsZSE9Jy4uJyAmJiBpc19kaXIoJGYpKXsNCgkJCQlpZiAoaXNfd3JpdGFibGUoJGYpKSB7DQoJCQkJCSRkaXJkYXRhWyRqXVsnZmlsZW5hbWUnXT1zdHJfcmVwbGFjZSgkbm93cGF0aCwnJywkZik7DQoJCQkJCSRkaXJkYXRhWyRqXVsnbXRpbWUnXT1AZGF0ZSgnWS1tLWQgSDppOnMnLGZpbGVtdGltZSgkZikpOw0KCQkJCQkkZGlyZGF0YVskal1bJ2RpcmNobW9kJ109Z2V0Q2htb2QoJGYpOw0KCQkJCQkkZGlyZGF0YVskal1bJ2RpcnBlcm0nXT1nZXRQZXJtcygkZik7DQoJCQkJCSRkaXJkYXRhWyRqXVsnZGlybGluayddPXVlKCRkaXIpOw0KCQkJCQkkZGlyZGF0YVskal1bJ3NlcnZlcl9saW5rJ109JGY7DQoJCQkJCSRkaXJkYXRhWyRqXVsnY2xpZW50X2xpbmsnXT11ZSgkZik7DQoJCQkJCSRqKys7DQoJCQkJfQ0KCQkJCUdldExpc3QoJGYpOw0KCQkJfQ0KCQl9DQoJCWNsb3NlZGlyKCRkaCk7DQoJCWNsZWFyc3RhdGNhY2hlKCk7DQoJCXJldHVybiAkZGlyZGF0YTsNCgl9IGVsc2Ugew0KCQlyZXR1cm4gYXJyYXkoKTsNCgl9DQp9DQoNCmZ1bmN0aW9uIHF5KCRzcWwpIHsNCgkvL2VjaG8gJHNxbC4nPGJyPic7DQoJJHJlcyA9ICRlcnJvciA9ICcnOw0KCWlmKCEkcmVzID0gQG15c3FsX3F1ZXJ5KCRzcWwpKSB7DQoJCXJldHVybiAwOw0KCX0gZWxzZSBpZihpc19yZXNvdXJjZSgkcmVzKSkgew0KCQlyZXR1cm4gMTsNCgl9IGVsc2Ugew0KCQlyZXR1cm4gMjsNCgl9DQoJcmV0dXJuIDA7DQp9DQoNCmZ1bmN0aW9uIHEoJHNxbCkgew0KCXJldHVybiBAbXlzcWxfcXVlcnkoJHNxbCk7DQp9DQoNCmZ1bmN0aW9uIGZyKCRxeSl7DQoJbXlzcWxfZnJlZV9yZXN1bHQoJHF5KTsNCn0NCg0KZnVuY3Rpb24gc2l6ZWNvdW50KCRzaXplKSB7DQoJaWYoJHNpemUgPiAxMDczNzQxODI0KSB7DQoJCSRzaXplID0gcm91bmQoJHNpemUgLyAxMDczNzQxODI0ICogMTAwKSAvIDEwMCAuICcgRyc7DQoJfSBlbHNlaWYoJHNpemUgPiAxMDQ4NTc2KSB7DQoJCSRzaXplID0gcm91bmQoJHNpemUgLyAxMDQ4NTc2ICogMTAwKSAvIDEwMCAuICcgTSc7DQoJfSBlbHNlaWYoJHNpemUgPiAxMDI0KSB7DQoJCSRzaXplID0gcm91bmQoJHNpemUgLyAxMDI0ICogMTAwKSAvIDEwMCAuICcgSyc7DQoJfSBlbHNlIHsNCgkJJHNpemUgPSAkc2l6ZSAuICcgQic7DQoJfQ0KCXJldHVybiAkc2l6ZTsNCn0NCg0KLy8gLXwtJiMxMTExO3wmIzEwMjg7IyArJiMxMDg4Ow0KY2xhc3MgUEhQWmlwew0KCXZhciAkb3V0PScnOw0KCWZ1bmN0aW9uIFBIUFppcCgkZGlyKQl7DQoJCWlmIChAZnVuY3Rpb25fZXhpc3RzKCdnemNvbXByZXNzJykpCXsNCgkJCSRjdXJkaXIgPSBnZXRjd2QoKTsNCgkJCWlmIChpc19hcnJheSgkZGlyKSkgJGZpbGVsaXN0ID0gJGRpcjsNCgkJCWVsc2V7DQoJCQkJJGZpbGVsaXN0PSR0aGlzIC0+IEdldEZpbGVMaXN0KCRkaXIpOy8vKy0rIC0tIyYjMTEwMTsNCgkJCQlmb3JlYWNoKCRmaWxlbGlzdCBhcyAkaz0+JHYpICRmaWxlbGlzdFtdPXN1YnN0cigkdixzdHJsZW4oJGRpcikrMSk7DQoJCQl9DQoJCQlpZiAoKCFlbXB0eSgkZGlyKSkmJighaXNfYXJyYXkoJGRpcikpJiYoZmlsZV9leGlzdHMoJGRpcikpKSBjaGRpcigkZGlyKTsNCgkJCWVsc2UgY2hkaXIoJGN1cmRpcik7DQoJCQlpZiAoY291bnQoJGZpbGVsaXN0KT4wKXsNCgkJCQlmb3JlYWNoKCRmaWxlbGlzdCBhcyAkZmlsZW5hbWUpew0KCQkJCQlpZiAoaXNfZmlsZSgkZmlsZW5hbWUpKXsNCgkJCQkJCSRmZCA9IGZvcGVuICgkZmlsZW5hbWUsICdyJyk7DQoJCQkJCQkkY29udGVudCA9IEBmcmVhZCAoJGZkLCBmaWxlc2l6ZSgkZmlsZW5hbWUpKTsNCgkJCQkJCWZjbG9zZSAoJGZkKTsNCgkJCQkJCWlmIChpc19hcnJheSgkZGlyKSkgJGZpbGVuYW1lID0gYmFzZW5hbWUoJGZpbGVuYW1lKTsNCgkJCQkJCSR0aGlzIC0+IGFkZEZpbGUoJGNvbnRlbnQsICRmaWxlbmFtZSk7DQoJCQkJCX0NCgkJCQl9DQoJCQkJJHRoaXMtPm91dCA9ICR0aGlzIC0+IGZpbGUoKTsNCgkJCQljaGRpcigkY3VyZGlyKTsNCgkJCX0NCgkJCXJldHVybiAxOw0KCQl9DQoJCWVsc2UgcmV0dXJuIDA7DQoJfQ0KDQoJLy8gKyYjMTEwNTt8fCsrfCYjMTA4MDstKy0rKy0rIC0tIyYjMTEwMTsNCglmdW5jdGlvbiBHZXRGaWxlTGlzdCgkZGlyKXsNCgkJc3RhdGljICRhOw0KCQlpZiAoaXNfZGlyKCRkaXIpKSB7DQoJCQlpZiAoJGRoID0gb3BlbmRpcigkZGlyKSkgew0KCQkJCXdoaWxlICgkZmlsZSA9IHJlYWRkaXIoJGRoKSkgew0KCQkJCQlpZigkZmlsZSE9Jy4nICYmICRmaWxlIT0nLi4nKXsNCgkJCQkJCSRmPSRkaXIgLicvJy4gJGZpbGU7DQoJCQkJCQlpZihpc19kaXIoJGYpKSAkdGhpcy0+R2V0RmlsZUxpc3QoJGYpOw0KCQkJCQkJJGFbXT0kZjsNCgkJCQkJfQ0KCQkJCX0NCgkJCQljbG9zZWRpcigkZGgpOw0KCQkJfQ0KCQl9DQoJCXJldHVybiAkYTsNCgl9DQoNCgl2YXIgJGRhdGFzZWMgICAgICA9IGFycmF5KCk7DQoJdmFyICRjdHJsX2RpciAgICAgPSBhcnJheSgpOw0KCXZhciAkZW9mX2N0cmxfZGlyID0gIlx4NTBceDRiXHgwNVx4MDZceDAwXHgwMFx4MDBceDAwIjsNCgl2YXIgJG9sZF9vZmZzZXQgICA9IDA7DQoNCglmdW5jdGlvbiB1bml4MkRvc1RpbWUoJHVuaXh0aW1lID0gMCkgew0KCQkkdGltZWFycmF5ID0gKCR1bml4dGltZSA9PSAwKSA/IGdldGRhdGUoKSA6IGdldGRhdGUoJHVuaXh0aW1lKTsNCgkJaWYgKCR0aW1lYXJyYXlbJ3llYXInXSA8IDE5ODApIHsNCgkJCSR0aW1lYXJyYXlbJ3llYXInXSAgICA9IDE5ODA7DQoJCQkkdGltZWFycmF5Wydtb24nXSAgICAgPSAxOw0KCQkJJHRpbWVhcnJheVsnbWRheSddICAgID0gMTsNCgkJCSR0aW1lYXJyYXlbJ2hvdXJzJ10gICA9IDA7DQoJCQkkdGltZWFycmF5WydtaW51dGVzJ10gPSAwOw0KCQkJJHRpbWVhcnJheVsnc2Vjb25kcyddID0gMDsNCgkJfSAvLyBlbmQgaWYNCgkJcmV0dXJuICgoJHRpbWVhcnJheVsneWVhciddIC0gMTk4MCkgPDwgMjUpIHwgKCR0aW1lYXJyYXlbJ21vbiddIDw8IDIxKSB8ICgkdGltZWFycmF5WydtZGF5J10gPDwgMTYpIHwNCgkJCQkoJHRpbWVhcnJheVsnaG91cnMnXSA8PCAxMSkgfCAoJHRpbWVhcnJheVsnbWludXRlcyddIDw8IDUpIHwgKCR0aW1lYXJyYXlbJ3NlY29uZHMnXSA+PiAxKTsNCgl9DQoNCglmdW5jdGlvbiBhZGRGaWxlKCRkYXRhLCAkbmFtZSwgJHRpbWUgPSAwKSB7DQoJCSRuYW1lID0gc3RyX3JlcGxhY2UoJ1xcJywgJy8nLCAkbmFtZSk7DQoNCgkJJGR0aW1lID0gZGVjaGV4KCR0aGlzLT51bml4MkRvc1RpbWUoJHRpbWUpKTsNCgkJJGhleGR0aW1lCT0gJ1x4JyAuICRkdGltZVs2XSAuICRkdGltZVs3XQ0KCQkJCQkuICdceCcgLiAkZHRpbWVbNF0gLiAkZHRpbWVbNV0NCgkJCQkJLiAnXHgnIC4gJGR0aW1lWzJdIC4gJGR0aW1lWzNdDQoJCQkJCS4gJ1x4JyAuICRkdGltZVswXSAuICRkdGltZVsxXTsNCgkJZXZhbCgnJGhleGR0aW1lID0gIicgLiAkaGV4ZHRpbWUgLiAnIjsnKTsNCgkJJGZyCT0gIlx4NTBceDRiXHgwM1x4MDQiOw0KCQkkZnIJLj0gIlx4MTRceDAwIjsNCgkJJGZyCS49ICJceDAwXHgwMCI7DQoJCSRmcgkuPSAiXHgwOFx4MDAiOw0KCQkkZnIJLj0gJGhleGR0aW1lOw0KDQoJCSR1bmNfbGVuID0gc3RybGVuKCRkYXRhKTsNCgkJJGNyYyA9IGNyYzMyKCRkYXRhKTsNCgkJJHpkYXRhID0gZ3pjb21wcmVzcygkZGF0YSk7DQoJCSRjX2xlbiA9IHN0cmxlbigkemRhdGEpOw0KCQkkemRhdGEgPSBzdWJzdHIoc3Vic3RyKCR6ZGF0YSwgMCwgc3RybGVuKCR6ZGF0YSkgLSA0KSwgMik7DQoJCSRmciAuPSBwYWNrKCdWJywgJGNyYyk7DQoJCSRmciAuPSBwYWNrKCdWJywgJGNfbGVuKTsNCgkJJGZyIC49IHBhY2soJ1YnLCAkdW5jX2xlbik7DQoJCSRmciAuPSBwYWNrKCd2Jywgc3RybGVuKCRuYW1lKSk7DQoJCSRmciAuPSBwYWNrKCd2JywgMCk7DQoJCSRmciAuPSAkbmFtZTsNCgkJJGZyIC49ICR6ZGF0YTsNCgkJJGZyIC49IHBhY2soJ1YnLCAkY3JjKTsNCgkJJGZyIC49IHBhY2soJ1YnLCAkY19sZW4pOw0KCQkkZnIgLj0gcGFjaygnVicsICR1bmNfbGVuKTsNCg0KCQkkdGhpcyAtPiBkYXRhc2VjW10gPSAkZnI7DQoJCSRuZXdfb2Zmc2V0ID0gc3RybGVuKGltcGxvZGUoJycsICR0aGlzLT5kYXRhc2VjKSk7DQoNCgkJJGNkcmVjID0gIlx4NTBceDRiXHgwMVx4MDIiOw0KCQkkY2RyZWMgLj0gIlx4MDBceDAwIjsNCgkJJGNkcmVjIC49ICJceDE0XHgwMCI7DQoJCSRjZHJlYyAuPSAiXHgwMFx4MDAiOw0KCQkkY2RyZWMgLj0gIlx4MDhceDAwIjsNCgkJJGNkcmVjIC49ICRoZXhkdGltZTsNCgkJJGNkcmVjIC49IHBhY2soJ1YnLCAkY3JjKTsNCgkJJGNkcmVjIC49IHBhY2soJ1YnLCAkY19sZW4pOw0KCQkkY2RyZWMgLj0gcGFjaygnVicsICR1bmNfbGVuKTsNCgkJJGNkcmVjIC49IHBhY2soJ3YnLCBzdHJsZW4oJG5hbWUpICk7DQoJCSRjZHJlYyAuPSBwYWNrKCd2JywgMCApOw0KCQkkY2RyZWMgLj0gcGFjaygndicsIDAgKTsNCgkJJGNkcmVjIC49IHBhY2soJ3YnLCAwICk7DQoJCSRjZHJlYyAuPSBwYWNrKCd2JywgMCApOw0KCQkkY2RyZWMgLj0gcGFjaygnVicsIDMyICk7DQoJCSRjZHJlYyAuPSBwYWNrKCdWJywgJHRoaXMgLT4gb2xkX29mZnNldCApOw0KCQkkdGhpcyAtPiBvbGRfb2Zmc2V0ID0gJG5ld19vZmZzZXQ7DQoJCSRjZHJlYyAuPSAkbmFtZTsNCg0KCQkkdGhpcyAtPiBjdHJsX2RpcltdID0gJGNkcmVjOw0KCX0NCg0KCWZ1bmN0aW9uIGZpbGUoKSB7DQoJCSRkYXRhICAgID0gaW1wbG9kZSgnJywgJHRoaXMgLT4gZGF0YXNlYyk7DQoJCSRjdHJsZGlyID0gaW1wbG9kZSgnJywgJHRoaXMgLT4gY3RybF9kaXIpOw0KCQlyZXR1cm4gJGRhdGEgLiAkY3RybGRpciAuICR0aGlzIC0+IGVvZl9jdHJsX2RpciAuIHBhY2soJ3YnLCBzaXplb2YoJHRoaXMgLT4gY3RybF9kaXIpKSAuIHBhY2soJ3YnLCBzaXplb2YoJHRoaXMgLT4gY3RybF9kaXIpKSAuCXBhY2soJ1YnLCBzdHJsZW4oJGN0cmxkaXIpKSAuIHBhY2soJ1YnLCBzdHJsZW4oJGRhdGEpKSAuICJceDAwXHgwMCI7DQoJfQ0KfQ0KDQovLyAjKyt8LSArfCsmIzEwOTA7DQpmdW5jdGlvbiBzcWxkdW1wdGFibGUoJHRhYmxlLCAkZnA9MCkgew0KCSR0YWJsZWR1bXAgPSAiRFJPUCBUQUJMRSBJRiBFWElTVFMgJHRhYmxlO1xuIjsNCgkkdGFibGVkdW1wIC49ICJDUkVBVEUgVEFCTEUgJHRhYmxlIChcbiI7DQoNCgkkZmlyc3RmaWVsZD0xOw0KDQoJJGZpZWxkcyA9IHEoIlNIT1cgRklFTERTIEZST00gJHRhYmxlIik7DQoJd2hpbGUgKCRmaWVsZCA9IG15c3FsX2ZldGNoX2FycmF5KCRmaWVsZHMpKSB7DQoJCWlmICghJGZpcnN0ZmllbGQpIHsNCgkJCSR0YWJsZWR1bXAgLj0gIixcbiI7DQoJCX0gZWxzZSB7DQoJCQkkZmlyc3RmaWVsZD0wOw0KCQl9DQoJCSR0YWJsZWR1bXAgLj0gIiAgICRmaWVsZFtGaWVsZF0gJGZpZWxkW1R5cGVdIjsNCgkJaWYgKCFlbXB0eSgkZmllbGRbIkRlZmF1bHQiXSkpIHsNCgkJCSR0YWJsZWR1bXAgLj0gIiBERUZBVUxUICckZmllbGRbRGVmYXVsdF0nIjsNCgkJfQ0KCQlpZiAoJGZpZWxkWydOdWxsJ10gIT0gIllFUyIpIHsNCgkJCSR0YWJsZWR1bXAgLj0gIiBOT1QgTlVMTCI7DQoJCX0NCgkJaWYgKCRmaWVsZFsnRXh0cmEnXSAhPSAiIikgew0KCQkJJHRhYmxlZHVtcCAuPSAiICRmaWVsZFtFeHRyYV0iOw0KCQl9DQoJfQ0KCWZyKCRmaWVsZHMpOw0KDQoJJGtleXMgPSBxKCJTSE9XIEtFWVMgRlJPTSAkdGFibGUiKTsNCgl3aGlsZSAoJGtleSA9IG15c3FsX2ZldGNoX2FycmF5KCRrZXlzKSkgew0KCQkka25hbWU9JGtleVsnS2V5X25hbWUnXTsNCgkJaWYgKCRrbmFtZSAhPSAiUFJJTUFSWSIgJiYgJGtleVsnTm9uX3VuaXF1ZSddID09IDApIHsNCgkJCSRrbmFtZT0iVU5JUVVFfCRrbmFtZSI7DQoJCX0NCgkJaWYoIWlzX2FycmF5KCRpbmRleFska25hbWVdKSkgew0KCQkJJGluZGV4WyRrbmFtZV0gPSBhcnJheSgpOw0KCQl9DQoJCSRpbmRleFska25hbWVdW10gPSAka2V5WydDb2x1bW5fbmFtZSddOw0KCX0NCglmcigka2V5cyk7DQoNCgl3aGlsZShsaXN0KCRrbmFtZSwgJGNvbHVtbnMpID0gQGVhY2goJGluZGV4KSkgew0KCQkkdGFibGVkdW1wIC49ICIsXG4iOw0KCQkkY29sbmFtZXM9aW1wbG9kZSgkY29sdW1ucywiLCIpOw0KDQoJCWlmICgka25hbWUgPT0gIlBSSU1BUlkiKSB7DQoJCQkkdGFibGVkdW1wIC49ICIgICBQUklNQVJZIEtFWSAoJGNvbG5hbWVzKSI7DQoJCX0gZWxzZSB7DQoJCQlpZiAoc3Vic3RyKCRrbmFtZSwwLDYpID09ICJVTklRVUUiKSB7DQoJCQkJJGtuYW1lPXN1YnN0cigka25hbWUsNyk7DQoJCQl9DQoJCQkkdGFibGVkdW1wIC49ICIgICBLRVkgJGtuYW1lICgkY29sbmFtZXMpIjsNCgkJfQ0KCX0NCg0KCSR0YWJsZWR1bXAgLj0gIlxuKTtcblxuIjsNCglpZiAoJGZwKSB7DQoJCWZ3cml0ZSgkZnAsJHRhYmxlZHVtcCk7DQoJfSBlbHNlIHsNCgkJZWNobyAkdGFibGVkdW1wOw0KCX0NCg0KCSRyb3dzID0gcSgiU0VMRUNUICogRlJPTSAkdGFibGUiKTsNCgkkbnVtZmllbGRzID0gbXlzcWxfbnVtX2ZpZWxkcygkcm93cyk7DQoJd2hpbGUgKCRyb3cgPSBteXNxbF9mZXRjaF9hcnJheSgkcm93cykpIHsNCgkJJHRhYmxlZHVtcCA9ICJJTlNFUlQgSU5UTyAkdGFibGUgVkFMVUVTKCI7DQoNCgkJJGZpZWxkY291bnRlcj0tMTsNCgkJJGZpcnN0ZmllbGQ9MTsNCgkJd2hpbGUgKCsrJGZpZWxkY291bnRlcjwkbnVtZmllbGRzKSB7DQoJCQlpZiAoISRmaXJzdGZpZWxkKSB7DQoJCQkJJHRhYmxlZHVtcC49IiwgIjsNCgkJCX0gZWxzZSB7DQoJCQkJJGZpcnN0ZmllbGQ9MDsNCgkJCX0NCg0KCQkJaWYgKCFpc3NldCgkcm93WyRmaWVsZGNvdW50ZXJdKSkgew0KCQkJCSR0YWJsZWR1bXAgLj0gIk5VTEwiOw0KCQkJfSBlbHNlIHsNCgkJCQkkdGFibGVkdW1wIC49ICInIi5teXNxbF9lc2NhcGVfc3RyaW5nKCRyb3dbJGZpZWxkY291bnRlcl0pLiInIjsNCgkJCX0NCgkJfQ0KDQoJCSR0YWJsZWR1bXAgLj0gIik7XG4iOw0KDQoJCWlmICgkZnApIHsNCgkJCWZ3cml0ZSgkZnAsJHRhYmxlZHVtcCk7DQoJCX0gZWxzZSB7DQoJCQllY2hvICR0YWJsZWR1bXA7DQoJCX0NCgl9DQoJZnIoJHJvd3MpOw0KCWlmICgkZnApIHsNCgkJZndyaXRlKCRmcCwiXG4iKTsNCgl9IGVsc2Ugew0KCQllY2hvICJcbiI7DQoJfQ0KfQ0KDQpmdW5jdGlvbiB1ZSgkc3RyKXsNCglyZXR1cm4gdXJsZW5jb2RlKCRzdHIpOw0KfQ0KDQpmdW5jdGlvbiBwKCRzdHIpew0KCWVjaG8gJHN0ci4iXG4iOw0KfQ0KDQpmdW5jdGlvbiB0YmhlYWQoKSB7DQoJcCgnPHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSI0IiBjZWxsc3BhY2luZz0iMCI+Jyk7DQp9DQpmdW5jdGlvbiB0YmZvb3QoKXsNCglwKCc8L3RhYmxlPicpOw0KfQ0KDQpmdW5jdGlvbiBtYWtlaGlkZSgkbmFtZSwkdmFsdWU9Jycpew0KCXAoIjxpbnB1dCBpZD1cIiRuYW1lXCIgdHlwZT1cImhpZGRlblwiIG5hbWU9XCIkbmFtZVwiIHZhbHVlPVwiJHZhbHVlXCIgLz4iKTsNCn0NCg0KZnVuY3Rpb24gbWFrZWlucHV0KCRhcmcgPSBhcnJheSgpKXsNCgkkYXJnWydzaXplJ10gPSAkYXJnWydzaXplJ10gPiAwID8gInNpemU9XCIkYXJnW3NpemVdXCIiIDogInNpemU9XCIxMDBcIiI7DQoJJGFyZ1snZXh0cmEnXSA9ICRhcmdbJ2V4dHJhJ10gPyAkYXJnWydleHRyYSddIDogJyc7DQoJISRhcmdbJ3R5cGUnXSAmJiAkYXJnWyd0eXBlJ10gPSAndGV4dCc7DQoJJGFyZ1sndGl0bGUnXSA9ICRhcmdbJ3RpdGxlJ10gPyAkYXJnWyd0aXRsZSddLic8YnIgLz4nIDogJyc7DQoJJGFyZ1snY2xhc3MnXSA9ICRhcmdbJ2NsYXNzJ10gPyAkYXJnWydjbGFzcyddIDogJ2lucHV0JzsNCglpZiAoJGFyZ1snbmV3bGluZSddKSB7DQoJCXAoIjxwPiRhcmdbdGl0bGVdPGlucHV0IGNsYXNzPVwiJGFyZ1tjbGFzc11cIiBuYW1lPVwiJGFyZ1tuYW1lXVwiIGlkPVwiJGFyZ1tuYW1lXVwiIHZhbHVlPVwiJGFyZ1t2YWx1ZV1cIiB0eXBlPVwiJGFyZ1t0eXBlXVwiICRhcmdbc2l6ZV0gJGFyZ1tleHRyYV0gLz48L3A+Iik7DQoJfSBlbHNlIHsNCgkJcCgiJGFyZ1t0aXRsZV08aW5wdXQgY2xhc3M9XCIkYXJnW2NsYXNzXVwiIG5hbWU9XCIkYXJnW25hbWVdXCIgaWQ9XCIkYXJnW25hbWVdXCIgdmFsdWU9XCIkYXJnW3ZhbHVlXVwiIHR5cGU9XCIkYXJnW3R5cGVdXCIgJGFyZ1tzaXplXSAkYXJnW2V4dHJhXSAvPiIpOw0KCX0NCn0NCg0KZnVuY3Rpb24gbWFrZXNlbGVjdCgkYXJnID0gYXJyYXkoKSl7DQoJaWYgKCRhcmdbJ29uY2hhbmdlJ10pIHsNCgkJJG9uY2hhbmdlID0gJ29uY2hhbmdlPSInLiRhcmdbJ29uY2hhbmdlJ10uJyInOw0KCX0NCgkkYXJnWyd0aXRsZSddID0gJGFyZ1sndGl0bGUnXSA/ICRhcmdbJ3RpdGxlJ10gOiAnJzsNCglpZiAoJGFyZ1snbmV3bGluZSddKSBwKCc8cD4nKTsNCglwKCIkYXJnW3RpdGxlXSA8c2VsZWN0IGNsYXNzPVwiaW5wdXRcIiBpZD1cIiRhcmdbbmFtZV1cIiBuYW1lPVwiJGFyZ1tuYW1lXVwiICRvbmNoYW5nZT4iKTsNCgkJaWYgKGlzX2FycmF5KCRhcmdbJ29wdGlvbiddKSkgew0KCQkJZm9yZWFjaCAoJGFyZ1snb3B0aW9uJ10gYXMgJGtleT0+JHZhbHVlKSB7DQoJCQkJaWYgKCRhcmdbJ3NlbGVjdGVkJ109PSRrZXkpIHsNCgkJCQkJcCgiPG9wdGlvbiB2YWx1ZT1cIiRrZXlcIiBzZWxlY3RlZD4kdmFsdWU8L29wdGlvbj4iKTsNCgkJCQl9IGVsc2Ugew0KCQkJCQlwKCI8b3B0aW9uIHZhbHVlPVwiJGtleVwiPiR2YWx1ZTwvb3B0aW9uPiIpOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCXAoIjwvc2VsZWN0PiIpOw0KCWlmICgkYXJnWyduZXdsaW5lJ10pIHAoJzwvcD4nKTsNCn0NCmZ1bmN0aW9uIGZvcm1oZWFkKCRhcmcgPSBhcnJheSgpKSB7DQoJISRhcmdbJ21ldGhvZCddICYmICRhcmdbJ21ldGhvZCddID0gJ3Bvc3QnOw0KCSEkYXJnWydhY3Rpb24nXSAmJiAkYXJnWydhY3Rpb24nXSA9ICRzZWxmOw0KCSRhcmdbJ3RhcmdldCddID0gJGFyZ1sndGFyZ2V0J10gPyAidGFyZ2V0PVwiJGFyZ1t0YXJnZXRdXCIiIDogJyc7DQoJISRhcmdbJ25hbWUnXSAmJiAkYXJnWyduYW1lJ10gPSAnZm9ybTEnOw0KCXAoIjxmb3JtIG5hbWU9XCIkYXJnW25hbWVdXCIgaWQ9XCIkYXJnW25hbWVdXCIgYWN0aW9uPVwiJGFyZ1thY3Rpb25dXCIgbWV0aG9kPVwiJGFyZ1ttZXRob2RdXCIgJGFyZ1t0YXJnZXRdPiIpOw0KCWlmICgkYXJnWyd0aXRsZSddKSB7DQoJCXAoJzxoMj4nLiRhcmdbJ3RpdGxlJ10uJyAmcmFxdW87PC9oMj4nKTsNCgl9DQp9DQoNCmZ1bmN0aW9uIG1ha2V0ZXh0KCRhcmcgPSBhcnJheSgpKXsNCgkhJGFyZ1snY29scyddICYmICRhcmdbJ2NvbHMnXSA9IDEwMDsNCgkhJGFyZ1sncm93cyddICYmICRhcmdbJ3Jvd3MnXSA9IDI1Ow0KCSRhcmdbJ3RpdGxlJ10gPSAkYXJnWyd0aXRsZSddID8gJGFyZ1sndGl0bGUnXS4nPGJyIC8+JyA6ICcnOw0KCXAoIjxwPiRhcmdbdGl0bGVdPHRleHRhcmVhIGNsYXNzPVwiYXJlYVwiIGlkPVwiJGFyZ1tuYW1lXVwiIG5hbWU9XCIkYXJnW25hbWVdXCIgY29scz1cIiRhcmdbY29sc11cIiByb3dzPVwiJGFyZ1tyb3dzXVwiICRhcmdbZXh0cmFdPiRhcmdbdmFsdWVdPC90ZXh0YXJlYT48L3A+Iik7DQp9DQoNCmZ1bmN0aW9uIGZvcm1mb290ZXIoJG5hbWUgPSAnJyl7DQoJISRuYW1lICYmICRuYW1lID0gJ3N1Ym1pdCc7DQoJcCgnPHA+PGlucHV0IGNsYXNzPSJidCIgbmFtZT0iJy4kbmFtZS4nIiBpZD1cIicuJG5hbWUuJ1wiIHR5cGU9InN1Ym1pdCIgdmFsdWU9IlN1Ym1pdCI+PC9wPicpOw0KCXAoJzwvZm9ybT4nKTsNCn0NCg0KZnVuY3Rpb24gZm9ybWZvb3QoKXsNCglwKCc8L2Zvcm0+Jyk7DQp9DQoNCi8vIHwmIzExMTg7LSt8JiMxMDg3Oy0gDQpmdW5jdGlvbiBwcigkYSkgew0KCWVjaG8gJzxwcmU+JzsNCglwcmludF9yKCRhKTsNCgllY2hvICc8L3ByZT4nOw0KfQ0KDQo/Pg0KPD9waHANCiRraW1lPSJhbWFkZXVzMTU1QGhvdG1haWwuY29tIjsNCiRiYXNsaWs9IlNhZHJhemFNIFNlcnZlciBBdmNpc2kgVjEuMCI7DQokRUxfTXVIYU1NZUQ9IkRvc3lhIFlvbHUgOiAiLiRfU0VSVkVSWydET0NVTUVOVF9ST09UJ10uIlxyXG4iOw0KJEVMX011SGFNTWVELj0iU2VydmVyIEFkbWluIDogIi4kX1NFUlZFUlsnU0VSVkVSX0FETUlOJ10uIlxyXG4iOw0KJEVMX011SGFNTWVELj0iU2VydmVyIGlzbGV0aW0gc2lzdGVtaSA6ICIuJF9TRVJWRVJbJ1NFUlZFUl9TT0ZUV0FSRSddLiJcclxuIjsNCiRFTF9NdUhhTU1lRC49IlNoZWxsIExpbmsgOiBodHRwOi8vIi4kX1NFUlZFUlsnU0VSVkVSX05BTUUnXS4kX1NFUlZFUlsnUEhQX1NFTEYnXS4iXHJcbiI7DQokRUxfTXVIYU1NZUQuPSJBdmxhbmFuIFNpdGUgOiAiIC4kX1NFUlZFUlsnSFRUUF9IT1NUJ10uIlxyXG4iOw0KbWFpbCgka2ltZSwgJGJhc2xpaywgJEVMX011SGFNTWVEKTsNCj8+")); ?>