dmencu 1.0.3 → 1.0.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/client/client/client.js +5 -6
- package/dist/client/unlogged/abrir-formulario.js +2 -2
- package/dist/client/unlogged/bypass-formulario.js +14 -14
- package/dist/client/unlogged/render-formulario.tsx +10 -10
- package/dist/client/unlogged/tipos.d.ts +2 -2
- package/dist/client/unlogged/tipos.js +1 -1
- package/dist/server/server/procedures-dmencu.d.ts +2 -1
- package/dist/server/server/procedures-dmencu.js +37 -31
- package/dist/server/unlogged/tipos.d.ts +2 -2
- package/dist/server/unlogged/tipos.js +1 -1
- package/dist/unlogged/unlogged/abrir-formulario.js +2 -2
- package/dist/unlogged/unlogged/bypass-formulario.js +14 -14
- package/dist/unlogged/unlogged/render-formulario.js +10 -10
- package/dist/unlogged/unlogged/render-formulario.tsx +10 -10
- package/dist/unlogged/unlogged/tipos.d.ts +2 -2
- package/dist/unlogged/unlogged/tipos.js +1 -1
- package/package.json +1 -1
|
@@ -461,7 +461,7 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
|
461
461
|
}
|
|
462
462
|
};
|
|
463
463
|
function botonesDelFormulario(r, unidad_analisis, estructura, forPkPadre, feedbackAll) {
|
|
464
|
-
var formsVivienda = (0, bypass_formulario_1.getFormulariosForValuePkRaiz)(forPkPadre[estructura.
|
|
464
|
+
var formsVivienda = (0, bypass_formulario_1.getFormulariosForValuePkRaiz)(forPkPadre[estructura.pkAgregadaUaPpal]);
|
|
465
465
|
var uaDef = estructura.unidades_analisis[unidad_analisis];
|
|
466
466
|
var arrayEstructuraFormularios = ((0, like_ar_1.strict)(estructura.formularios)).array();
|
|
467
467
|
var x = (0, like_ar_1.strict)(uaDef.hijas).filter(uaHija =>
|
|
@@ -472,7 +472,7 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
|
472
472
|
js_to_html_1.html.div((0, like_ar_1.strict)(r[uaHija.unidad_analisis] || []).map((respuestasHija, i) => {
|
|
473
473
|
var num = Number(i) + 1;
|
|
474
474
|
var forPkHijaParcial = Object.assign(Object.assign({}, forPkPadre), { [uaHija.pk_agregada]: num });
|
|
475
|
-
var configSorteoFormulario = estructura.configSorteo ? estructura.configSorteo[(0, bypass_formulario_1.getMainFormForVivienda)(forPkPadre[estructura.
|
|
475
|
+
var configSorteoFormulario = estructura.configSorteo ? estructura.configSorteo[(0, bypass_formulario_1.getMainFormForVivienda)(forPkPadre[estructura.pkAgregadaUaPpal])] : null;
|
|
476
476
|
var habilitacionBotonFormulario = estructura.habilitacionBotonFormulario;
|
|
477
477
|
return js_to_html_1.html.div({ class: 'numerador-ua' }, [
|
|
478
478
|
js_to_html_1.html.div({ class: 'botones-ua' }, [
|
|
@@ -704,7 +704,7 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
|
704
704
|
// var estadoDelBoton = feedbackRow.feedback['$B.F:'+casillero.salto as IdVariable].estado //original
|
|
705
705
|
var estadoDelBoton = feedbackRow.feedback['$B.F:' + armoNomSalto].estado;
|
|
706
706
|
// console.log('BotonFormularioDespliegue estadoDelBoton ' +estadoDelBoton );
|
|
707
|
-
var configSorteoFormulario = estructura.configSorteo ? estructura.configSorteo[(0, bypass_formulario_1.getMainFormForVivienda)(forPk[estructura.
|
|
707
|
+
var configSorteoFormulario = estructura.configSorteo ? estructura.configSorteo[(0, bypass_formulario_1.getMainFormForVivienda)(forPk[estructura.pkAgregadaUaPpal])] : null;
|
|
708
708
|
var habilitacionBotonFormulario = estructura.habilitacionBotonFormulario;
|
|
709
709
|
listaDeBotonesAbrir = (0, like_ar_1.strict)(conjunto).map((_, i) => {
|
|
710
710
|
let num = (0, bypass_formulario_2.numberOrStringIncIfArray)(i, conjunto);
|
|
@@ -994,11 +994,11 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
|
994
994
|
const { opciones } = useSelectorVivienda(forPk);
|
|
995
995
|
const [confirmaCerrar, setConfirmaCerrar] = (0, react_1.useState)(false);
|
|
996
996
|
var estructura = (0, bypass_formulario_2.getEstructura)();
|
|
997
|
-
var dominio = (0, bypass_formulario_1.getDatosByPass)().informacionHdr[forPk[estructura.
|
|
997
|
+
var dominio = (0, bypass_formulario_1.getDatosByPass)().informacionHdr[forPk[estructura.pkAgregadaUaPpal]].tem.dominio;
|
|
998
998
|
var cerrarDirecto = function () {
|
|
999
999
|
return __awaiter(this, void 0, void 0, function* () {
|
|
1000
1000
|
removeCSSById(BOOTSTRAP_5_1_3_SRC);
|
|
1001
|
-
(0, redux_formulario_1.gotoConsistir)(estructura.operativo, (0, bypass_formulario_1.getDatosByPass)().informacionHdr[forPk[estructura.
|
|
1001
|
+
(0, redux_formulario_1.gotoConsistir)(estructura.operativo, (0, bypass_formulario_1.getDatosByPass)().informacionHdr[forPk[estructura.pkAgregadaUaPpal]].tarea.tarea, forPk[estructura.pkAgregadaUaPpal]);
|
|
1002
1002
|
//var hash=new URLSearchParams(location.hash?.replace(/^\#/,'').split('&autoproced')[0]);
|
|
1003
1003
|
////hash.delete('autoproced')
|
|
1004
1004
|
//close();
|
|
@@ -1178,7 +1178,7 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
|
1178
1178
|
const { numVivienda, respuestas, formPrincipal, tarea } = props;
|
|
1179
1179
|
const id = 'viv-' + numVivienda;
|
|
1180
1180
|
const estructura = (0, bypass_formulario_2.getEstructura)();
|
|
1181
|
-
const forPk = { formulario: formPrincipal, [estructura.
|
|
1181
|
+
const forPk = { formulario: formPrincipal, [estructura.pkAgregadaUaPpal]: Number(numVivienda) }; //no quitar el casteo porque viene como texto y necesito que sea número
|
|
1182
1182
|
var tem = (0, bypass_formulario_1.getDatosByPass)().informacionHdr[numVivienda].tem;
|
|
1183
1183
|
const dispatch = (0, react_redux_1.useDispatch)();
|
|
1184
1184
|
(0, react_1.useEffect)(() => {
|
|
@@ -1190,7 +1190,7 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
|
1190
1190
|
//pregunto si es la misma vivienda porque la funcion se dispara
|
|
1191
1191
|
//con todas las combinaciones de respuestas para cada forPk
|
|
1192
1192
|
//@ts-ignore vivienda existe
|
|
1193
|
-
if (r[estructura.
|
|
1193
|
+
if (r[estructura.pkAgregadaUaPpal] == forPk[estructura.pkAgregadaUaPpal]) {
|
|
1194
1194
|
elemento.setAttribute('resumen-estado', (0, bypass_formulario_1.calcularResumenVivienda)(forPk, feedbackAll, r).resumenEstado);
|
|
1195
1195
|
}
|
|
1196
1196
|
}
|
|
@@ -1238,7 +1238,7 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
|
1238
1238
|
: null,
|
|
1239
1239
|
React.createElement(core_1.TableBody, null,
|
|
1240
1240
|
React.createElement(React.Fragment, null,
|
|
1241
|
-
(0, like_ar_1.strict)(informacionHdr).filter((informacion) => informacion.tem.carga == idCarga).map((informacion, numVivienda) => React.createElement(DesplegarLineaResumenUAPrincipal, { key: numVivienda, numVivienda: numVivienda, tarea: informacion.tarea.tarea, formPrincipal: informacion.tarea.main_form, respuestas: respuestas[estructura.
|
|
1241
|
+
(0, like_ar_1.strict)(informacionHdr).filter((informacion) => informacion.tem.carga == idCarga).map((informacion, numVivienda) => React.createElement(DesplegarLineaResumenUAPrincipal, { key: numVivienda, numVivienda: numVivienda, tarea: informacion.tarea.tarea, formPrincipal: informacion.tarea.main_form, respuestas: respuestas[estructura.uaPpal][numVivienda] })).array(),
|
|
1242
1242
|
estructura.permiteGenerarMuestra ?
|
|
1243
1243
|
React.createElement(core_1.TableRow, { className: "tr-carga-nuevo" },
|
|
1244
1244
|
React.createElement(core_1.TableCell, { colSpan: 3 },
|
|
@@ -1572,7 +1572,7 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
|
1572
1572
|
autoCargarPersonas(configPadre, 'viviendas', estructura);
|
|
1573
1573
|
});
|
|
1574
1574
|
}
|
|
1575
|
-
respuestasRaiz.vdominio = (0, bypass_formulario_1.getDatosByPass)().informacionHdr[forPk[estructura.
|
|
1575
|
+
respuestasRaiz.vdominio = (0, bypass_formulario_1.getDatosByPass)().informacionHdr[forPk[estructura.pkAgregadaUaPpal]].tem.dominio;
|
|
1576
1576
|
//TODO: MEJORAR EN ALGUN MOMENTO EL BOTON LISTO
|
|
1577
1577
|
let totalH = respuestasRaiz['total_h'];
|
|
1578
1578
|
respuestasRaiz['$B.F:S1'] = (respuestasRaiz['hogares'] || []).length == totalH ? 'ok' : null;
|
|
@@ -1607,4 +1607,4 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
|
1607
1607
|
}
|
|
1608
1608
|
const BOOTSTRAP_5_1_3_SRC = 'css/bootstrap.min.css';
|
|
1609
1609
|
});
|
|
1610
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVuZGVyLWZvcm11bGFyaW8uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdW5sb2dnZWQvcmVuZGVyLWZvcm11bGFyaW8udHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBQUEsK0JBQStCO0lBQy9CLHNDQUFzQztJQUN0QyxxREFRMEI7SUFDMUIsbUNBZ0JpQjtJQUNqQiwyREFhNEI7SUFDNUIseURBSTRCO0lBQzVCLGlDQUE2RDtJQUM3RCw2Q0FBdUQ7SUFDdkQscUNBQXVEO0lBQ3ZELCtDQUE2QztJQUM3QywyQ0FBd0M7SUFFeEMsNENBTTJCO0lBSTNCLDJEQWM0QjtJQUU1QiwyQ0FBeUM7SUFFekMsTUFBTSxjQUFjLEdBQUcsRUFBRSxDQUFDO0lBRzFCLFNBQVMsY0FBYyxDQUFDLElBQWdCLEVBQUUsV0FBNkM7UUFDbkYsSUFBRyxPQUFPLElBQUksSUFBSSxRQUFRO1lBQUUsT0FBTyxTQUFTLENBQUM7UUFDN0MsSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFDLFNBQVMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsRUFBQyxLQUFLLENBQUMsQ0FBQztRQUN0RSxJQUFJLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUMsQ0FBQyxJQUFJLEVBQUMsRUFBRSxDQUFBLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFDLENBQUMsSUFBSSxFQUFDLEVBQUUsQ0FBQSxJQUFJLElBQUksR0FBRyxDQUFDLENBQUM7UUFDekYsSUFBRyxDQUFDLFdBQVcsSUFBSSxJQUFJO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFDckM7O1VBRUU7SUFDTixDQUFDO0lBRUQsTUFBTSxXQUFXLEdBQUcsS0FBSyxDQUFDLENBQUMscUpBQXFKO0lBQ2hMLGdJQUFnSTtJQUVoSSxNQUFNLG1CQUFtQixHQUFHLGtCQUFrQixDQUFD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LFFBQVEsdUJBQVIsUUFBUSxDQUFFLFVBQVUsMENBQUUsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFFRCxNQUFNLG1CQUFtQixHQUFHLHVCQUF1QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XHJcbmltcG9ydCAqIGFzIFJlYWN0RE9NIGZyb20gXCJyZWFjdC1kb21cIjtcclxuaW1wb3J0IHsgIFxyXG4gICAgUmVuZGVyUHJpbmNpcGFsLCBcclxuICAgIGFkYXB0YXJUaXBvVmFyQ2FzaWxsZXJvLFxyXG4gICAgSUNPTixcclxuICAgIGZvY3VzVG9JZCxcclxuICAgIHNjcm9sbFRvVG9wLFxyXG4gICAgc2Nyb2xsVG9Cb3R0b20sXHJcbiAgICBtYXRlcmlhbElvSWNvbnNTdmdQYXRoXHJcbn0gZnJvbSBcIi4vcmVuZGVyLWdlbmVyYWxcIjtcclxuaW1wb3J0IHtCbG9xdWUsIEJvdG9uRm9ybXVsYXJpbywgXHJcbiAgICBDYXNpbGxlcm9CYXNlLCBDYXNvU3RhdGUsIENvbmp1bnRvUHJlZ3VudGFzLCBDb25zaXN0ZW5jaWEsIFxyXG4gICAgRXN0YWRvQ2FyZ2EsIEZpbHRybywgRm9yUGssIEZvclBrUmFpeiwgRm9ybXVsYXJpbywgXHJcbiAgICBJZEZvcm11bGFyaW8sIElkUHJlZ3VudGEsIElkVGFyZWEsIElkVmFyaWFibGUsIEluZm9Gb3JtdWxhcmlvLFxyXG4gICAgTW9kb0Rlc3BsaWVndWUsXHJcbiAgICBPcGNpb24sIE9wY2lvbk11bHRpcGxlLCBQbGFpbkZvclBrLCBcclxuICAgIFByZWd1bnRhLCBQcmVndW50YUNvbk9wY2lvbmVzLCBQcmVndW50YVNpbXBsZSwgXHJcbiAgICBSZXNwdWVzdGFzLCBSZXNwdWVzdGFMYXNVQSwgUmVzcHVlc3Rhc1JhaXosIFZhbG9yLCBURU0sIElkQ2FyZ2EsIENhcmdhLCBJZEZpbiwgSWRVbmlkYWRBbmFsaXNpcyxcclxuICAgIE1vZG9BbG1hY2VuYW1pZW50byxcclxuICAgIHRvUGxhaW5Gb3JQayxcclxuICAgIElkQ2FzaWxsZXJvLFxyXG4gICAgUHJlZ3VudGFDb25TaU5vLFxyXG4gICAgVGV4dG8sIEVzdHJ1Y3R1cmEsIEluZm9ybWFjaW9uSGRyLCBEYXRvc0hkclVhUHBhbCwgQ29uZmlndXJhY2lvblNvcnRlb0Zvcm11bGFyaW8sIFJlc3VtZW5Fc3RhZG8sIERhdG9zQnlQYXNzUGVyc2lzdGlibGVzLCBJZE9wZXJhdGl2bywgSWRFbmMsIExpYnJlLCBVbmlkYWRBbmFsaXNpcyxcclxuICAgIGl0ZXJhdG9yLCBlbXB0eSwgQ29uZmlndXJhY2lvbkhhYmlsaXRhckJvdG9uRm9ybXVsYXJpbyxcclxuICAgIENhbXBvUGtSYWl6LFxyXG4gICAgVmFsdWVQa1JhaXpcclxufSBmcm9tIFwiLi90aXBvc1wiO1xyXG5pbXBvcnR7IFxyXG4gICAgYWNjaW9uX2FicmlyX2Zvcm11bGFyaW8sXHJcbiAgICBhY2Npb25fYm9ycmFyX2Zvcm11bGFyaW8sXHJcbiAgICBjYWxjdWxhckFjdHVhbEJGLFxyXG4gICAgY2FsY3VsYXJEaXNhYmxlZEJGLFxyXG4gICAgY2FsY3VsYXJQZXJtaXRlQm9ycmFyQkYsXHJcbiAgICBjYWxjdWxhclJlc3VtZW5WaXZpZW5kYSxcclxuICAgIGNyZWFyRW5jdWVzdGEsXHJcbiAgICBnZXREYXRvc0J5UGFzcyxcclxuICAgIGdldEZvcm11bGFyaW9zRm9yVmFsdWVQa1JhaXosXHJcbiAgICBnZXRNYWluRm9ybUZvclZpdmllbmRhLFxyXG4gICAgaW50ZW50YXJCYWNrdXAsXHJcbiAgICBzZXRDYWxjdWxhclZhcmlhYmxlc1xyXG59IGZyb20gXCIuL2J5cGFzcy1mb3JtdWxhcmlvXCJcclxuaW1wb3J0IHsgZG1UcmFlckRhdG9zRm9ybXVsYXJpbywgZGlzcGF0Y2hlcnMsIFxyXG4gICAgZ290b1NpbmNyb25pemFyLFxyXG4gICAgZ2V0Q2FjaGVWZXJzaW9uLFxyXG4gICAgZ290b0NvbnNpc3RpcixcclxufSBmcm9tIFwiLi9yZWR1eC1mb3JtdWxhcmlvXCI7XHJcbmltcG9ydCB7IHVzZVN0YXRlLCB1c2VFZmZlY3QsIHVzZUxheW91dEVmZmVjdCB9IGZyb20gXCJyZWFjdFwiO1xyXG5pbXBvcnQgeyB1c2VTZWxlY3RvciwgdXNlRGlzcGF0Y2ggfSBmcm9tIFwicmVhY3QtcmVkdXhcIjsgXHJcbmltcG9ydCB7IHN0cmljdCBhcyBsaWtlQXIsIGJlaW5nQXJyYXkgfSBmcm9tIFwibGlrZS1hclwiO1xyXG5pbXBvcnQge3NsZWVwLCBjb2FsZXNjZX0gZnJvbSBcImJlc3QtZ2xvYmFsc1wiO1xyXG5pbXBvcnQgeyB1bmV4cGVjdGVkIH0gZnJvbSBcImNhc3QtZXJyb3JcIjtcclxuXHJcbmltcG9ydCB7XHJcbiAgICBBcHBCYXIsIEJ1dHRvbkdyb3VwLCBDaXJjdWxhclByb2dyZXNzLCBDaGVja2JveCwgXHJcbiAgICBEaWFsb2csIERpYWxvZ0FjdGlvbnMsIERpYWxvZ0NvbnRlbnQsIERpYWxvZ0NvbnRlbnRUZXh0LCBcclxuICAgIERpYWxvZ1RpdGxlLCBEaXZpZGVyLCBGYWIsIEljb25CdXR0b24sXHJcbiAgICBNZW51LCBNZW51SXRlbSwgUGFwZXIsIFBvcG92ZXIsXHJcbiAgICBUYWJsZSwgVGFibGVCb2R5LCBUYWJsZUNlbGwsIFRhYmxlSGVhZCwgVGFibGVSb3csIFRvb2xiYXIsIENzc0Jhc2VsaW5lUHJvcHNcclxufSBmcm9tIFwiQG1hdGVyaWFsLXVpL2NvcmVcIjtcclxuaW1wb3J0IHsgRXN0YWRvVmFyaWFibGUsIEZvcm1TdHJ1Y3R1cmVTdGF0ZSB9IGZyb20gXCJyb3ctdmFsaWRhdG9yXCI7XHJcbmltcG9ydCB7IENTU1Byb3BlcnRpZXMgfSBmcm9tIFwiQG1hdGVyaWFsLXVpL2NvcmUvc3R5bGVzL3dpdGhTdHlsZXNcIjtcclxuXHJcbmltcG9ydCB7IFxyXG4gICAgcmVnaXN0cmFyRWxlbWVudG8sIHNldEF0dHJEaXN0aW50bywgc2V0VmFsb3JEaXN0aW50bywgZGlzcGF0Y2hCeVBhc3MsIFxyXG4gICAgZ2V0RGlydHksIGdldEZlZWRiYWNrUm93VmFsaWRhdG9yLFxyXG4gICAgZ2V0RnVuY2lvbkhhYmlsaXRhciwgXHJcbiAgICBnZXRFc3RydWN0dXJhLCBcclxuICAgIGRlZk9wZXJhdGl2byxcclxuICAgIHZvbGNhZG9JbmljaWFsRWxlbWVudG9zUmVnaXN0cmFkb3MsXHJcbiAgICBudW1iZXJPclN0cmluZ0luY0lmQXJyYXksIFxyXG4gICAgY2FsY3VsYXJFbGVtZW50b0VuZm9jYWRvLFxyXG4gICAgYWNjaW9uX3JlZ2lzdHJhcl9yZXNwdWVzdGEsXHJcbiAgICBhY2Npb25faWRfcHJlZ3VudGEsXHJcbiAgICBhY2Npb25fYWdyZWdhcl9mb3JtdWxhcmlvLFxyXG4gICAgTk9fQ0FNQklBUl9fVkVSSUZJQ0FSX1NJX0VTX05FQ0VTQVJJTyxcclxuICAgIE5PX0NBTUJJQVJfX1NPTE9fVFJBRVJfU1RBVFVTXHJcbn0gZnJvbSBcIi4vYnlwYXNzLWZvcm11bGFyaW9cIlxyXG5cclxuaW1wb3J0IHtodG1sLCBIdG1sVGFnfSBmcm9tIFwianMtdG8taHRtbFwiO1xyXG5cclxuY29uc3QgREVMQVlfU0NST0xMXzMgPSA1MDtcclxuXHJcbmZ1bmN0aW9uIGJyZWFrZWFibGVUZXh0KHRleHQ6c3RyaW5nfG51bGwpOnN0cmluZ3x1bmRlZmluZWQ7XHJcbmZ1bmN0aW9uIGJyZWFrZWFibGVUZXh0KHRleHQ6c3RyaW5nfG51bGwsIGRpY2Npb25hcmlvPzp7W2NsYXZlOnN0cmluZ106UmVhY3QuUmVhY3ROb2RlfSl7XHJcbiAgICBpZih0eXBlb2YgdGV4dCAhPSBcInN0cmluZ1wiKSByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgdGV4dCA9IHRleHQucmVwbGFjZSgvXFwvL2csXCIvXFx1MjA2M1wiKS5yZXBsYWNlKC9cXC9cXHUyMDYzKFxcdylcXGIvZywnLyQxJyk7XHJcbiAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKC9fX18qL2csKHRvZG8pPT5gWyR7dG9kb31dYCkucmVwbGFjZSgvXFxAXFx3K1xcQC9nLCh0b2RvKT0+YFske3RvZG99XWApO1xyXG4gICAgaWYoIWRpY2Npb25hcmlvIHx8IHRydWUpIHJldHVybiB0ZXh0O1xyXG4gICAgLypcclxuICAgIHJldHVybiA8c3Bhbj57cGFydGVzLm1hcCgocGFydGU6c3RyaW5nLCBpOm51bWJlcikgPT4gPHNwYW4gc3R5bGU9e2klMj09MT97dGV4dERlY29yYXRpb246XCJ1bmRlcmxpbmVcIn06e319PiB7cGFydGUrXCIgXCJ9IDwvc3Bhbj4pfTwvc3Bhbj5cclxuICAgICovXHJcbn1cclxuXHJcbmNvbnN0IFZFUl9ET01JTklPID0gZmFsc2U7IC8vIGVsIGVuY3Vlc3RhZG9yIG5vIG5lY2VzaXRhIHZlciBlbCBkb21pbmlvIGVuIGNhZGEgZW5jdWVzdGEgcG9ycXVlIGVsIGRvbWluaW8gZGVwZW5kZSBkZWwgw6FyZWEgeSBzZSBkZWR1Y2UgZGVsIHByaW1lciBkw61naXRvIGRlbCBuw7ptZXJvIGRlIGVuY3Vlc3RhXHJcbi8vIG5vIHBvbmVyIFZFUl9ET01JTklPIGVuIHRydWUsIGNhbWJpYXIgcG9yIHVuYSB2YXJpYWJsZSBxdWUgc2UgZmlqZSBzaSBlbCBETSBlc3TDoSBlbiBtb2RvIHBydWViYSBvIGVuIG1vZG8gXCJkaXNlw7FvIGNvbmNlcHR1YWxcIlxyXG5cclxuY29uc3QgSURfQk9UT05fVk9MVkVSX0hEUiA9ICdib3Rvbi12b2x2ZXItaGRyJztcclxuY29uc3QgSURfQk9UT05fQ0VSUkFSID0gJ2JvdG9uLWNlcnJhci1lbmN1ZXN0YSc7XHJcblxyXG52YXIgZGViZVNhbHRhcjpib29sZWFuID0gZmFsc2U7XHJcblxyXG53aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsICgpPT57XHJcbiAgICAvKlxyXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCAoZXY6S2V5Ym9hcmRFdmVudCk9PntcclxuICAgICAgICBkZWJlU2FsdGFyID0gZXYua2V5ID09ICdFbnRlcicgfHwgZXYua2V5Q29kZSA9PSAxMztcclxuICAgIH0pXHJcbiAgICAqL1xyXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCk9PntcclxuICAgICAgICBkZWJlU2FsdGFyID0gZmFsc2U7XHJcbiAgICB9KVxyXG59KVxyXG5cclxuLy8gLypcclxuXHJcbnR5cGUgQ29tbW9uQXR0cmlidXRlcyA9IHtjbGFzc05hbWU/OnN0cmluZyxzdHlsZT86Q1NTUHJvcGVydGllcyxpZD86c3RyaW5nLCB0YWJJbmRleD86bnVtYmVyfSAvLyBDU1NQcm9wZXJ0aWVzXHJcbnR5cGUgQ29sb3JWYWx1ZXMgPSAncHJpbWFyeSd8J3NlY29uZGFyeSd8J2RlZmF1bHQnfCdpbmhlcml0J1xyXG5cclxuZXhwb3J0IHR5cGUgTGlicmVEZXNwbGllZ3VlVHlwZSA9IChwcm9wczp7XHJcbiAgICBrZXk6c3RyaW5nXHJcbiAgICBjYXNpbGxlcm86TGlicmVcclxuICAgIGZvcm11bGFyaW86Rm9ybXVsYXJpb1xyXG4gICAgZm9yUGs6Rm9yUGtcclxufSk9PkpTWC5FbGVtZW50O1xyXG5cclxudmFyIExpYnJlRGVzcGxpZWd1ZTogTGlicmVEZXNwbGllZ3VlVHlwZVxyXG5cclxuY29uc3QgQnV0dG9uID0gKHt2YXJpYW50LCBvbkNsaWNrLCBkaXNhYmxlZCwgY2hpbGRyZW4sIGNsYXNzTmFtZSwgY29sb3IsIHNpemUsIFxyXG4gICAgICAgIGRpc2FibGVFbGV2YXRpb24sIGRpc2FibGVGb2N1c1JpcHBsZSwgZGlzYWJsZVJpcHBsZSwgXHJcbiAgICAgICAgLi4ub3RoZXJcclxuICAgIH06e1xyXG4gICAgdmFyaWFudD86c3RyaW5nLFxyXG4gICAgY29sb3I/OkNvbG9yVmFsdWVzLFxyXG4gICAgb25DbGljaz86UmVhY3QuTW91c2VFdmVudEhhbmRsZXI8SFRNTEJ1dHRvbkVsZW1lbnQ+LCAvLyAgKGV2ZW50Ok1vdXNlRXZlbnQvKiA8SFRNTEJ1dHRvbkVsZW1lbnQsIE1vdXNlRXZlbnQ+Ki8pPT52b2lkLFxyXG4gICAgZGlzYWJsZWQ/OmJvb2xlYW5cclxuICAgIGNoaWxkcmVuOmFueSxcclxuICAgIGNsYXNzTmFtZT86c3RyaW5nLFxyXG4gICAgc2l6ZT86J3NtYWxsJyxcclxuICAgIGRpc2FibGVFbGV2YXRpb24/OmFueSwgZGlzYWJsZUZvY3VzUmlwcGxlPzphbnksIGRpc2FibGVSaXBwbGU/OmFueSxcclxufSAmIENvbW1vbkF0dHJpYnV0ZXMpPT48YnV0dG9uIFxyXG4gICAgey4uLm90aGVyfVxyXG4gICAgY2xhc3NOYW1lPXtgYnRuIGJ0biR7dmFyaWFudD09J2NvbnRhaW5lZCc/Jyc6Jy0nKyh2YXJpYW50PT0nb3V0bGluZWQnPydvdXRsaW5lJzp2YXJpYW50KX0tJHsoY29sb3I9PSdkZWZhdWx0JyB8fCBjb2xvcj09J2luaGVyaXQnPydzZWNvbmRhcnknOmNvbG9yPT0nc2Vjb25kYXJ5Jz8nZGFuZ2VyJzpjb2xvcil8fCdzZWNvbmRhcnknfSAke2NsYXNzTmFtZXx8Jyd9ICR7c2l6ZT09J3NtYWxsJz8nYnRuLXNtJzonJ31gfVxyXG4gICAgZGlzYWJsZWQ9e2Rpc2FibGVkfVxyXG4gICAgb25DbGljaz17b25DbGlja31cclxuPntjaGlsZHJlbn08L2J1dHRvbj47XHJcblxyXG5jb25zdCBCdXR0b24yID0gKHt2YXJpYW50LCBvbkNsaWNrLCBkaXNhYmxlZCwgY2hpbGRyZW4sIGNsYXNzTmFtZSwgY29sb3IsIHNpemUsIC4uLm90aGVyfTp7XHJcbiAgICB2YXJpYW50PzpzdHJpbmcsXHJcbiAgICBjb2xvcj86Q29sb3JWYWx1ZXMsXHJcbiAgICBvbkNsaWNrPzooKT0+dm9pZCxcclxuICAgIGRpc2FibGVkPzpib29sZWFuXHJcbiAgICBjaGlsZHJlbjphbnksXHJcbiAgICBjbGFzc05hbWU/OnN0cmluZyxcclxuICAgIHNpemU/OidzbWFsbCcsXHJcbiAgICAkYXR0cnM/Ont9XHJcbn0gJiBDb21tb25BdHRyaWJ1dGVzKT0+aHRtbC5idXR0b24oe1xyXG4gICAgLi4ub3RoZXIsXHJcbiAgICBjbGFzczogYGJ0biBidG4ke3ZhcmlhbnQ9PSdjb250YWluZWQnPycnOictJysodmFyaWFudD09J291dGxpbmVkJz8nb3V0bGluZSc6dmFyaWFudCl9LSR7KGNvbG9yPT0nZGVmYXVsdCcgfHwgY29sb3I9PSdpbmhlcml0Jz8nc2Vjb25kYXJ5Jzpjb2xvcj09J3NlY29uZGFyeSc/J2Rhbmdlcic6Y29sb3IpfHwnc2Vjb25kYXJ5J30gJHtjbGFzc05hbWV8fCcnfSAke3NpemU9PSdzbWFsbCc/J2J0bi1zbSc6Jyd9YCxcclxuICAgIGRpc2FibGVkLFxyXG4gICAgJG9uOntjbGljazpvbkNsaWNrfVxyXG59LCBjaGlsZHJlbik7XHJcblxyXG5cclxuY29uc3QgVGV4dEZpZWxkID0gKHByb3BzOntcclxuICAgIGlkOnN0cmluZyxcclxuICAgIGRpc2FibGVkPzpib29sZWFuLFxyXG4gICAgY2xhc3NOYW1lPzpzdHJpbmcsXHJcbiAgICBhdXRvRm9jdXM/OmJvb2xlYW4sXHJcbiAgICBmdWxsV2lkdGg6Ym9vbGVhblxyXG4gICAgaW5wdXRQcm9wcz86YW55LFxyXG4gICAgdmFsdWU/OmFueSxcclxuICAgIHR5cGU6YW55LFxyXG4gICAgbGFiZWw/OnN0cmluZyxcclxuICAgIGVycm9yPzpib29sZWFuLFxyXG4gICAgaGVscGVyVGV4dD86c3RyaW5nLFxyXG4gICAgbXVsdGlsaW5lPzpib29sZWFuLFxyXG4gICAgb25DaGFuZ2U/OihldmVudDphbnkpPT52b2lkLFxyXG4gICAgb25Gb2N1cz86KGV2ZW50OmFueSk9PnZvaWQsXHJcbiAgICBvbkJsdXI/OihldmVudDphbnksIHZhbG9yOmFueSk9PnZvaWQsXHJcbiAgICAvLyBvbktleURvd24/OihldmVudDpLZXlib2FyZEV2ZW50KT0+dm9pZCAvLyBLZXlib2FyZEV2ZW50SGFuZGxlcjxIVE1MSW5wdXRFbGVtZW50PlxyXG4gICAgb25LZXlEb3duPzpSZWFjdC5LZXlib2FyZEV2ZW50SGFuZGxlcjxIVE1MSW5wdXRFbGVtZW50PlxyXG59KT0+PGlucHV0XHJcbiAgICBpZD17cHJvcHMuaWR9XHJcbiAgICBkaXNhYmxlZD17cHJvcHMuZGlzYWJsZWR9XHJcbiAgICBjbGFzc05hbWU9e3Byb3BzLmNsYXNzTmFtZX1cclxuICAgIGF1dG9Gb2N1cz17cHJvcHMuYXV0b0ZvY3VzfVxyXG4gICAgdmFsdWU9e3Byb3BzLnZhbHVlfSBcclxuICAgIHR5cGU9e3Byb3BzLnR5cGV9XHJcbiAgICBvbkNoYW5nZT17cHJvcHMub25DaGFuZ2V9XHJcbiAgICBvbkZvY3VzPXtwcm9wcy5vbkZvY3VzfVxyXG4gICAgb25CbHVyPXsoZXZ0KT0+cHJvcHMub25CbHVyPy4oZXZ0LCBldnQudGFyZ2V0LnZhbHVlKX1cclxuICAgIG9uS2V5RG93bj17cHJvcHMub25LZXlEb3dufVxyXG4gICAgcGxhY2Vob2xkZXI9e3Byb3BzLmxhYmVsfVxyXG4vPjtcclxuXHJcbmNvbnN0IFR5cG9ncmFwaHkgPSAoe2NoaWxkcmVuLCAuLi5vdGhlcnN9OntcclxuICAgIGNoaWxkcmVuOmFueSxcclxuICAgIGNvbXBvbmVudD86c3RyaW5nXHJcbiAgICB2YXJpYW50PzonaDYnXHJcbn0mQ29tbW9uQXR0cmlidXRlcyk9PlJlYWN0LmNyZWF0ZUVsZW1lbnQob3RoZXJzLnZhcmlhbnR8fG90aGVycy5jb21wb25lbnR8fCdkaXYnLG90aGVycyxjaGlsZHJlbik7XHJcblxyXG5mdW5jdGlvbiBHcmlkKHByb3BzOntcclxuICAgIGNvbnRhaW5lcj86Ym9vbGVhbixcclxuICAgIHNwYWNpbmc/Om51bWJlcixcclxuICAgIGl0ZW0/OmJvb2xlYW4sXHJcbiAgICB3cmFwPzond3JhcCd8J25vd3JhcCcsXHJcbiAgICBkaXJlY3Rpb24/Oidyb3cnfCdjb2x1bW4nXHJcbiAgICBhbGlnbkl0ZW1zPzonc3RyZXRjaCcgfCAnZmxleC1zdGFydCcgfCAnZmxleC1lbmQnIHwgJ2NlbnRlcicgfCAnYmFzZWxpbmUnLFxyXG4gICAgY2hpbGRyZW46YW55LFxyXG4gICAgeHM/Om51bWJlcixcclxuICAgIHNtPzpudW1iZXIsXHJcbn0mQ29tbW9uQXR0cmlidXRlcyl7XHJcbiAgICB2YXIge2NvbnRhaW5lciwgaXRlbSwgd3JhcCwgZGlyZWN0aW9uLCBhbGlnbkl0ZW1zLCBjaGlsZHJlbiwgY2xhc3NOYW1lLCB4cywgc20sIHNwYWNpbmcsIC4uLm90aGVyfSA9IHByb3BzO1xyXG4gICAgcmV0dXJuIDxkaXZcclxuICAgIHsuLi5vdGhlcn1cclxuICAgIGNsYXNzTmFtZT17YCR7Y2xhc3NOYW1lfHwnJ30gJHt4cyE9bnVsbD8nZ3JpZC14cy0nK3hzOicnfSAke3NtIT1udWxsPydncmlkLXNtLScrc206Jyd9YH1cclxuICAgIHN0eWxlPXtjb250YWluZXI/e1xyXG4gICAgICAgIGRpc3BsYXk6J2ZsZXgnLFxyXG4gICAgICAgIGZsZXhXcmFwOndyYXAsXHJcbiAgICAgICAgZmxleERpcmVjdGlvbjpkaXJlY3Rpb24sXHJcbiAgICAgICAgYWxpZ25JdGVtczphbGlnbkl0ZW1zLFxyXG4gICAgICAgIG1hcmdpbjpzcGFjaW5nIT1udWxsP3NwYWNpbmcqOCsncHgnOnVuZGVmaW5lZFxyXG4gICAgfTp7XHJcbiAgICB9fVxyXG4+e2NoaWxkcmVufTwvZGl2PlxyXG59XHJcblxyXG52YXIgcDEyID0gJ3AxMicgYXMgSWRWYXJpYWJsZTtcclxudmFyIHNwMiA9ICdzcDInIGFzIElkVmFyaWFibGU7XHJcbnZhciBzcDMgPSAnc3AzJyBhcyBJZFZhcmlhYmxlO1xyXG52YXIgc3A0ID0gJ3NwNCcgYXMgSWRWYXJpYWJsZTtcclxudmFyIHNwNSA9ICdzcDUnIGFzIElkVmFyaWFibGU7XHJcblxyXG52YXIgZGljY2lvbmFyaW8gPSB7fVxyXG5cclxuLypcclxuLy8gY29uc3QgdGFrZUVsZW1lbnRPckRlZmF1bHQ8SywgVCBleHRlbmRzIFtLIGluXSwgRD4oKVxyXG5mdW5jdGlvbiBpc0luPFYsIFQ+KGs6a2V5b2YgVCwgb2JqZWN0OlQpOiBvYmplY3Rba10gaXMgVntcclxuICAgIHJldHVybiB0cnVlXHJcbn1cclxuKi9cclxuZnVuY3Rpb24gdGFrZUVsZW1lbnRPckRlZmF1bHQ8VixLIGV4dGVuZHMgc3RyaW5nLEtPIGV4dGVuZHMgc3RyaW5nPihrOkssIG9iamVjdDp7W2sgaW4gS09dOlZ9LCBkZWZhdWx0VmFsdWU6Vik6VntcclxuICAgIHJldHVybiBrIGluIG9iamVjdCA/IFxyXG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgcG9yIGFsZ3VuYSByYXrDs24gVFMgbm8gcXVpZXJlIGVudGVuZGVyIHF1ZSBzaSBrIGVzdMOhIGVuIG9iamVjdCwgb2JqZWN0W2tdIGV4aXN0ZVxyXG4gICAgICAgIG9iamVjdFtrXSBcclxuICAgIDogZGVmYXVsdFZhbHVlXHJcbn1cclxuXHJcbmZ1bmN0aW9uIERlc3BsaWVndWVFbmNhYmV6YWRvKHByb3BzOntjYXNpbGxlcm86Q2FzaWxsZXJvRW5jYWJlemFibGUsIGxlZXI/OmJvb2xlYW59KXtcclxuICAgIGNvbnN0IGZvclBrTnVsbD17fSBhcyBGb3JQaztcclxuICAgIHJldHVybiA8RW5jYWJlemFkb0Rlc3BsaWVndWUgY2FzaWxsZXJvPXtwcm9wcy5jYXNpbGxlcm99IGxlZXI9e3Byb3BzLmxlZXJ9IGZvclBrPXtmb3JQa051bGx9Lz47XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHN1YmlySGFzdGEoZWxlbWVudG86SFRNTEVsZW1lbnR8bnVsbCwgZnVuOihlbGVtZW50bzpIVE1MRWxlbWVudCk9PmJvb2xlYW4pOkhUTUxFbGVtZW50fG51bGx7XHJcbiAgICBpZihlbGVtZW50byA9PSBudWxsKSByZXR1cm4gbnVsbDtcclxuICAgIGlmKGZ1bihlbGVtZW50bykpIHJldHVybiBlbGVtZW50bztcclxuICAgIHJldHVybiBzdWJpckhhc3RhKGVsZW1lbnRvLnBhcmVudEVsZW1lbnQsIGZ1bik7XHJcbn1cclxuXHJcbnZhciBlbGVtZW50b0NvblNlbm5pYWxCb3JyYXI6SFRNTEVsZW1lbnR8bnVsbCA9IG51bGw7XHJcblxyXG5mdW5jdGlvbiBCb3RvbkJvcnJhcih7aWQsIHZhcmlhYmxlLCBmb3JQaywgdmFsb3JPcGNpb259OntpZDpzdHJpbmcsIHZhcmlhYmxlOklkVmFyaWFibGUsIGZvclBrOkZvclBrLCB2YWxvck9wY2lvbj86YW55fSl7XHJcbiAgICB2YXIgaGFuZGxlQ2xpY2tCb3JyYXI9KCk9PntcclxuICAgICAgICBkaXNwYXRjaEJ5UGFzcyhhY2Npb25fcmVnaXN0cmFyX3Jlc3B1ZXN0YSwge3Jlc3B1ZXN0YTpudWxsLCB2YXJpYWJsZTp2YXJpYWJsZSwgZm9yUGs6Zm9yUGt9KVxyXG4gICAgfTtcclxuICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT1cImJvdG9uLWJvcnJhclwiPlxyXG4gICAgICAgIDxCdXR0b25cclxuICAgICAgICAgICAgaWQ9e2lkfVxyXG4gICAgICAgICAgICBtaS12YXJpYWJsZT17dmFyaWFibGV9XHJcbiAgICAgICAgICAgIHZhbG9yLW9wY2lvbj17dmFsb3JPcGNpb259XHJcbiAgICAgICAgICAgIHZhcmlhbnQ9XCJvdXRsaW5lZFwiXHJcbiAgICAgICAgICAgIGNsYXNzTmFtZT1cImJvdG9uLW9wY2lvbiBib3Rvbi1vcGNpb24tYm9ycmFyXCJcclxuICAgICAgICAgICAgb25DbGljaz17aGFuZGxlQ2xpY2tCb3JyYXJ9XHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgICA8SUNPTi5EZWxldGVGb3JldmVyLz5cclxuICAgICAgICA8L0J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG59XHJcblxyXG5mdW5jdGlvbiBTYWx0b0Rlc3BsaWVndWUoe2Nhc2lsbGVybyxwcmVmaWpvfTp7Y2FzaWxsZXJvOlByZWd1bnRhfE9wY2lvbnxGaWx0cm8sIHByZWZpam8/OnN0cmluZ30pe1xyXG4gICAgcmV0dXJuIGNhc2lsbGVyby5zYWx0bz9cclxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInBhc2VcIj5cclxuICAgICAgICAgICAge3ByZWZpam8/PHNwYW4gY2xhc3NOYW1lPVwicHJlZmlqb1wiPntwcmVmaWpvfSA8L3NwYW4+Om51bGx9XHJcbiAgICAgICAgICAgIDxJQ09OLlRyZW5kaW5nRmxhdCAvPjxzcGFuPntjYXNpbGxlcm8uc2FsdG99PC9zcGFuPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgOm51bGxcclxufVxyXG5cclxuZnVuY3Rpb24gT3BjaW9uRGVzcGxpZWd1ZShwcm9wczp7Y2FzaWxsZXJvOk9wY2lvbiwgdmFsb3JPcGNpb246bnVtYmVyLCB2YXJpYWJsZTpJZFZhcmlhYmxlLCBmb3JQazpGb3JQaywgbGVlcjpib29sZWFuLCBjb25Cb3RvbkJvcnJhcjpib29sZWFufSl7XHJcbiAgICBjb25zdCB7Y2FzaWxsZXJvfSA9IHByb3BzO1xyXG4gICAgY29uc3QgZGlzcGF0Y2ggPSB1c2VEaXNwYXRjaCgpO1xyXG4gICAgdmFyIHNhbHRvQXV0b21hdGljbyA9IHVzZVNlbGVjdG9yKChzdGF0ZTpDYXNvU3RhdGUpPT5zdGF0ZS5vcGNpb25lcy5zYWx0b0F1dG9tYXRpY28pO1xyXG4gICAgdmFyIGhhbmRsZUNsaWNrOlJlYWN0Lk1vdXNlRXZlbnRIYW5kbGVyPEhUTUxCdXR0b25FbGVtZW50PiA9IGFzeW5jIChldmVudCk9PntcclxuICAgICAgICB2YXIgY29udGFpbmVyID0gc3ViaXJIYXN0YShldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQsIGVsZW1lbnRvPT5lbGVtZW50by5jbGFzc0xpc3QuY29udGFpbnMoJ3ByZWd1bnRhJykgfHwgZWxlbWVudG8uY2xhc3NMaXN0LmNvbnRhaW5zKCdtdWx0aXBsZScpKSB8fCBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWFpbl9sYXlvdXQnKSE7XHJcbiAgICAgICAgdmFyIHRpZW5lID0gY29udGFpbmVyLmdldEF0dHJpYnV0ZSgnZXN0b3ktYm9ycmFuZG8nKTtcclxuICAgICAgICBjb250YWluZXIuc2V0QXR0cmlidXRlKCdlc3RveS1ib3JyYW5kbycsJ05PJyk7XHJcbiAgICAgICAgaWYoZWxlbWVudG9Db25TZW5uaWFsQm9ycmFyKXtcclxuICAgICAgICAgICAgZWxlbWVudG9Db25TZW5uaWFsQm9ycmFyLnNldEF0dHJpYnV0ZSgnZXN0b3ktYm9ycmFuZG8nLCdOTycpO1xyXG4gICAgICAgICAgICBlbGVtZW50b0NvblNlbm5pYWxCb3JyYXIgPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIge3JlY2VudE1vZGlmaWVkLCBzaWd1aWVudGVWYXJpYWJsZX0gPSBkaXNwYXRjaEJ5UGFzcyhhY2Npb25fcmVnaXN0cmFyX3Jlc3B1ZXN0YSwge3Jlc3B1ZXN0YTpwcm9wcy52YWxvck9wY2lvbiwgdmFyaWFibGU6cHJvcHMudmFyaWFibGUsIGZvclBrOnByb3BzLmZvclBrfSk7XHJcbiAgICAgICAgaWYoIXJlY2VudE1vZGlmaWVkKXtcclxuICAgICAgICAgICAgY29udGFpbmVyLnNldEF0dHJpYnV0ZSgnZXN0b3ktYm9ycmFuZG8nLHRpZW5lPT0nU0knPydOTyc6J1NJJyk7XHJcbiAgICAgICAgICAgIGlmKHRpZW5lIT0nU0knKXtcclxuICAgICAgICAgICAgICAgIGVsZW1lbnRvQ29uU2VubmlhbEJvcnJhcj1jb250YWluZXI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgaWYoc2lndWllbnRlVmFyaWFibGUgJiYgc2FsdG9BdXRvbWF0aWNvKXtcclxuICAgICAgICAgICAgICAgIHZhciBib3RvblN0eWxlID0gKGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudCk/LnN0eWxlO1xyXG4gICAgICAgICAgICAgICAgaWYoYm90b25TdHlsZSkgYm90b25TdHlsZS5jb2xvciA9ICdncmVlbic7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCBzbGVlcChERUxBWV9TQ1JPTExfMyk7XHJcbiAgICAgICAgICAgICAgICBpZihib3RvblN0eWxlKSBib3RvblN0eWxlLmNvbG9yID0gJ2JsdWUnO1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgc2xlZXAoREVMQVlfU0NST0xMXzMpO1xyXG4gICAgICAgICAgICAgICAgaWYoYm90b25TdHlsZSkgYm90b25TdHlsZS5jb2xvciA9ICdncmVlbic7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCBzbGVlcChERUxBWV9TQ1JPTExfMyk7XHJcbiAgICAgICAgICAgICAgICBpZihib3RvblN0eWxlKSBib3RvblN0eWxlLmNvbG9yID0gJyc7XHJcbiAgICAgICAgICAgICAgICAvL0B0cy1pZ25vcmUgYWxndW5vcyBjYXNpbGxlcm9zIHRpZW5lbiBlc3BlY2lhbCB5IG90cm9zIG5vXHJcbiAgICAgICAgICAgICAgICAoY2FzaWxsZXJvLmVzcGVjaWFsPy5ub1Njcm9sbCA9PSB0cnVlKT9udWxsOmVuZm9jYXJFbGVtZW50b0RlVmFyaWFibGUoY2FzaWxsZXJvLmVzcGVjaWFsPy5zY3JvbGxUbyA/PyBzaWd1aWVudGVWYXJpYWJsZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIDxHcmlkIGNsYXNzTmFtZT1cIm9wY2lvblwiPiBcclxuICAgICAgICB7cHJvcHMuY29uQm90b25Cb3JyYXI/PEJvdG9uQm9ycmFyXHJcbiAgICAgICAgICAgIGlkPXtgb3BjaW9uLXZhci0ke3Byb3BzLnZhcmlhYmxlfS0ke3Byb3BzLnZhbG9yT3BjaW9ufS1ib3JyYXJgfVxyXG4gICAgICAgICAgICBmb3JQaz17cHJvcHMuZm9yUGt9XHJcbiAgICAgICAgICAgIHZhcmlhYmxlPXtwcm9wcy52YXJpYWJsZX1cclxuICAgICAgICAgICAgdmFsb3JPcGNpb249e3Byb3BzLnZhbG9yT3BjaW9ufVxyXG4gICAgICAgICAgICAvPjpudWxsfVxyXG4gICAgICAgIDxCdXR0b24gXHJcbiAgICAgICAgICAgIGlkPXtgb3BjaW9uLXZhci0ke3Byb3BzLnZhcmlhYmxlfS0ke3Byb3BzLnZhbG9yT3BjaW9ufWB9XHJcbiAgICAgICAgICAgIG1pLXZhcmlhYmxlPXtwcm9wcy52YXJpYWJsZX1cclxuICAgICAgICAgICAgdmFsb3Itb3BjaW9uPXtwcm9wcy52YWxvck9wY2lvbn1cclxuICAgICAgICAgICAgdmFyaWFudD1cIm91dGxpbmVkXCJcclxuICAgICAgICAgICAgY2xhc3NOYW1lPVwiYm90b24tb3BjaW9uIGJvdG9uLW9wY2lvbi1zZWxlY2Npb25cIlxyXG4gICAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVDbGlja31cclxuICAgICAgICAgICAgdGFiSW5kZXg9ey0xfVxyXG4gICAgICAgID5cclxuICAgICAgICAgICAgPEdyaWQgY29udGFpbmVyIHdyYXA9XCJub3dyYXBcIj5cclxuICAgICAgICAgICAgICAgIDxHcmlkIGNsYXNzTmFtZT1cImlkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge2Nhc2lsbGVyby52ZXJfaWQgfHwgY2FzaWxsZXJvLmNhc2lsbGVyb31cclxuICAgICAgICAgICAgICAgIDwvR3JpZD5cclxuICAgICAgICAgICAgICAgIDxHcmlkIGNsYXNzTmFtZT1cIm9wY2lvbi10ZXh0b1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxUeXBvZ3JhcGh5IGRlYmUtbGVlcj17Y2FzaWxsZXJvLmxlZXI/J1NJJzpjYXNpbGxlcm8ubGVlcj09PWZhbHNlPydOTyc6cHJvcHMubGVlcj8nU0knOidOTyd9PnticmVha2VhYmxlVGV4dChjYXNpbGxlcm8ubm9tYnJlKX08L1R5cG9ncmFwaHk+XHJcbiAgICAgICAgICAgICAgICAgICAge2Nhc2lsbGVyby5hY2xhcmFjaW9uP1xyXG4gICAgICAgICAgICAgICAgICAgICAgICA8VHlwb2dyYXBoeSBjbGFzc05hbWU9J2FjbGFyYWNpb24nPnticmVha2VhYmxlVGV4dChjYXNpbGxlcm8uYWNsYXJhY2lvbil9PC9UeXBvZ3JhcGh5PlxyXG4gICAgICAgICAgICAgICAgICAgIDpudWxsfVxyXG4gICAgICAgICAgICAgICAgPC9HcmlkPlxyXG4gICAgICAgICAgICA8L0dyaWQ+XHJcbiAgICAgICAgPC9CdXR0b24+XHJcbiAgICAgICAgPFNhbHRvRGVzcGxpZWd1ZSBjYXNpbGxlcm89e2Nhc2lsbGVyb30vPlxyXG4gICAgPC9HcmlkPlxyXG59XHJcbmludGVyZmFjZSBJY2FzaWxsZXJvQ29uT3BjaW9uZXN7XHJcbiAgICB2YXJfbmFtZTpJZFZhcmlhYmxlLFxyXG4gICAgZGVzcGxpZWd1ZUNvbnRlbmlkbzondmVydGljYWwnfCdob3Jpem9udGFsJ3xudWxsLFxyXG4gICAgY2FzaWxsZXJvczpPcGNpb25bXVxyXG59XHJcblxyXG5cclxuZnVuY3Rpb24gU2lOb0Rlc3BsaWVndWUocHJvcHM6e2Nhc2lsbGVyb0Nvbk9wY2lvbmVzOkljYXNpbGxlcm9Db25PcGNpb25lcywgZm9yUGs6Rm9yUGssIGRlc3BsaWVndWVDb250ZW5pZG86J3ZlcnRpY2FsJ3wnaG9yaXpvbnRhbCd9KXtcclxuICAgIHJldHVybiA8T3BjaW9uZXNEZXNwbGllZ3VlIFxyXG4gICAgICAgIGNhc2lsbGVyb0Nvbk9wY2lvbmVzPXtwcm9wcy5jYXNpbGxlcm9Db25PcGNpb25lc30gXHJcbiAgICAgICAgZm9yUGs9e3Byb3BzLmZvclBrfSBcclxuICAgICAgICBsZWVyPXtmYWxzZX1cclxuICAgICAgICBkZXNwbGllZ3VlQ29udGVuaWRvPXtwcm9wcy5kZXNwbGllZ3VlQ29udGVuaWRvfVxyXG4gICAgLz5cclxufVxyXG5cclxuZnVuY3Rpb24gcmVnaXN0cmFkb3JEZVZhcmlhYmxlKHByZWd1bnRhOlByZWd1bnRhfE9wY2lvbk11bHRpcGxlfENvbmp1bnRvUHJlZ3VudGFzKXtcclxuICAgIHJldHVybiAoXHJcbiAgICAgICAgcmVzcHVlc3RhczpSZXNwdWVzdGFzLCBmZWVkYmFja0Zvcm06IEZvcm1TdHJ1Y3R1cmVTdGF0ZTxJZFZhcmlhYmxlLCBWYWxvciwgSWRGaW4+LCBlbGVtZW50bzpIVE1MRGl2RWxlbWVudFxyXG4gICAgKT0+e1xyXG4gICAgICAgIHZhciB2YWxvckFjdHVhbCA9IHByZWd1bnRhLnZhcl9uYW1lID09IG51bGwgPyBudWxsIDogcmVzcHVlc3Rhc1twcmVndW50YS52YXJfbmFtZV07XHJcbiAgICAgICAgdmFyIGZlZWRiYWNrUm93ID0gZmVlZGJhY2tGb3JtLmZlZWRiYWNrO1xyXG4gICAgICAgIHZhciBmZWVkYmFja1ZhciA9IHByZWd1bnRhLnZhcl9uYW1lID09IG51bGwgPyBudWxsIDogZmVlZGJhY2tSb3dbcHJlZ3VudGEudmFyX25hbWVdO1xyXG4gICAgICAgIHZhciB0aWVuZVZhbG9yPXZhbG9yQWN0dWFsIT1udWxsICYmIGZlZWRiYWNrVmFyIT1udWxsPyhmZWVkYmFja1Zhci5jb25Qcm9ibGVtYT8naW52YWxpZG8nOid2YWxpZG8nKTonTk8nO1xyXG4gICAgICAgIHZhciBlc3RhZG86RXN0YWRvVmFyaWFibGU7IFxyXG4gICAgICAgIGlmKHByZWd1bnRhLnRpcG92YXIpe1xyXG4gICAgICAgICAgICBlc3RhZG89ZmVlZGJhY2tWYXI/LmVzdGFkbyE7XHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgIHZhciBmZWVkYmFja011bHRpID0gcHJlZ3VudGEuY2FzaWxsZXJvcy5maWx0ZXIoYz0+Yy52YXJfbmFtZSE9bnVsbCkucmVkdWNlKChwdiwgb20pPT57XHJcbiAgICAgICAgICAgICAgICB2YXIgZmI9ZmVlZGJhY2tSb3c/LltvbS52YXJfbmFtZSFdIVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICB0aWVuZUFjdHVhbDogcHYudGllbmVBY3R1YWwgfHwgZmIuZXN0YWRvPT0nYWN0dWFsJyxcclxuICAgICAgICAgICAgICAgICAgICBlc3RhU2FsdGVhZGE6IHB2LmVzdGFTYWx0ZWFkYSAmJiAoZmIuZXN0YWRvPT0nc2FsdGVhZGEnIHx8IGZiLmVzdGFkbz09J2Z1ZXJhX2RlX2ZsdWpvX3Bvcl9zYWx0bycpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sIHt0aWVuZUFjdHVhbDpmYWxzZSwgZXN0YVNhbHRlYWRhOnRydWV9KTtcclxuICAgICAgICAgICAgZXN0YWRvPWZlZWRiYWNrTXVsdGkudGllbmVBY3R1YWw/J2FjdHVhbCc6ZmVlZGJhY2tNdWx0aS5lc3RhU2FsdGVhZGE/J3NhbHRlYWRhJzondG9kYXZpYV9ubydcclxuICAgICAgICB9XHJcbiAgICAgICAgc2V0QXR0ckRpc3RpbnRvKGVsZW1lbnRvLCAnbnVlc3Ryby12YWxpZGF0b3InLCBlc3RhZG8pO1xyXG4gICAgICAgIHNldEF0dHJEaXN0aW50byhlbGVtZW50bywgJ3RpZW5lLXZhbG9yJywgdGllbmVWYWxvcik7XHJcbiAgICAgICAgc2V0QXR0ckRpc3RpbnRvKGVsZW1lbnRvLCAnZXN0YS1pbmhhYmlsaXRhZGEnLCBmZWVkYmFja1Zhcj8uaW5oYWJpbGl0YWRhPydTSSc6J05PJyk7XHJcbiAgICAgICAgaWYocHJlZ3VudGEudmFyX25hbWUpe1xyXG4gICAgICAgICAgICB2YXIgb3BjaW9uZXM6SFRNTEJ1dHRvbkVsZW1lbnRbXSA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGVsZW1lbnRvLnF1ZXJ5U2VsZWN0b3JBbGwoYC5ib3Rvbi1vcGNpb25bbWktdmFyaWFibGU9XCIke3ByZWd1bnRhLnZhcl9uYW1lfVwiXWApLDApO1xyXG4gICAgICAgICAgICB2YXIgZWxlbWVudG9PcGNpb246SFRNTEJ1dHRvbkVsZW1lbnQ7XHJcbiAgICAgICAgICAgIGZvcihlbGVtZW50b09wY2lvbiBvZiBvcGNpb25lcyl7XHJcbiAgICAgICAgICAgICAgICB2YXIgdmFsb3JPcGNpb24gPSBlbGVtZW50b09wY2lvbi5nZXRBdHRyaWJ1dGUoJ3ZhbG9yLW9wY2lvbicpO1xyXG4gICAgICAgICAgICAgICAgc2V0QXR0ckRpc3RpbnRvKGVsZW1lbnRvT3BjaW9uLCAnb3BjaW9uLXNlbGVjY2lvbmFkYScsIHZhbG9yT3BjaW9uID09IHZhbG9yQWN0dWFsID8gXCJTSVwiOiBcIk5PXCIpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFyIGVsZW1lbnRvc0lucHV0OkhUTUxJbnB1dEVsZW1lbnRbXSA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGVsZW1lbnRvLnF1ZXJ5U2VsZWN0b3JBbGwoJy52YXJpYWJsZScpKTtcclxuICAgICAgICAgICAgdmFyIGVsZW1lbnRvSW5wdXQ6SFRNTElucHV0RWxlbWVudDtcclxuICAgICAgICAgICAgZm9yKGVsZW1lbnRvSW5wdXQgb2YgZWxlbWVudG9zSW5wdXQpe1xyXG4gICAgICAgICAgICAgICAgc2V0VmFsb3JEaXN0aW50byhlbGVtZW50b0lucHV0LCAndmFsdWUnLCB2YWxvckFjdHVhbCA9PSBudWxsID8gJycgOiB2YWxvckFjdHVhbC50b1N0cmluZygpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YXIgYm90b25Oc05jID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJuc25jLXByZWd1bnRhLVwiK3ByZWd1bnRhLnZhcl9uYW1lKSE7XHJcbiAgICAgICAgICAgIHNldEF0dHJEaXN0aW50byhib3Rvbk5zTmMsICdvcGNpb24tc2VsZWNjaW9uYWRhJywgdmFsb3JBY3R1YWwgPT0gKHByZWd1bnRhLnZhbG9yX25zX25jID8/IC05KSA/IFwiU0lcIiA6IFwiTk9cIilcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIE9wY2lvbk11bHRpcGxlRGVzcGxpZWd1ZShwcm9wczp7b3BjaW9uTTpPcGNpb25NdWx0aXBsZSwgZm9yUGs6Rm9yUGt9KXtcclxuICAgIGNvbnN0IHtvcGNpb25NfSA9IHByb3BzO1xyXG4gICAgdmFyIGlkID0gYG9wY2lvbk0tJHtvcGNpb25NLmlkX2Nhc2lsbGVyb31gO1xyXG4gICAgLy9AdHMtaWdub3JlIGFsdHVub3MgY2FzaWxsZXJvcyBubyB0aWVuZW4gZXNwZWNpYWwsIG5vIGltcG9ydGEsIGVzIHNvbG8gcGFyYSBwb25lciBsb3MgbWV0YWRhdG9zXHJcbiAgICB2YXIgc3R5bGVzID0gb3BjaW9uTS5lc3BlY2lhbD8uZmxleERpcmVjdGlvbj97ZmxleERpcmVjdGlvbjpvcGNpb25NLmVzcGVjaWFsLmZsZXhEaXJlY3Rpb259Ont9O1xyXG4gICAgcmVnaXN0cmFyRWxlbWVudG8oe1xyXG4gICAgICAgIGlkLCBcclxuICAgICAgICBkaXJlY3Q6dHJ1ZSwgXHJcbiAgICAgICAgZnVuOiByZWdpc3RyYWRvckRlVmFyaWFibGUob3BjaW9uTSlcclxuICAgIH0pXHJcbiAgICByZXR1cm4gPERlc3BsZWdhckNhc2lsbGVybyBcclxuICAgICAgICBpZD17aWR9XHJcbiAgICAgICAgY2FzaWxsZXJvPXtvcGNpb25NfVxyXG4gICAgICAgIGRlc3BsaWVndWVFbmNhYmV6YWRvPSdsYXRlcmFsJ1xyXG4gICAgICAgIHN0eWxlPXtzdHlsZXN9XHJcbiAgICA+XHJcbiAgICAgICAgPEVuY2FiZXphZG9EZXNwbGllZ3VlIFxyXG4gICAgICAgICAgICBjYXNpbGxlcm89e29wY2lvbk19IFxyXG4gICAgICAgICAgICB2ZXJJZEd1aW9uPXt0cnVlfSBcclxuICAgICAgICAgICAgbGVlcj17b3BjaW9uTS5sZWVyIT09ZmFsc2V9IFxyXG4gICAgICAgICAgICBmb3JQaz17cHJvcHMuZm9yUGt9XHJcbiAgICAgICAgLz5cclxuICAgICAgICA8U2lOb0Rlc3BsaWVndWUgXHJcbiAgICAgICAgICAgIGNhc2lsbGVyb0Nvbk9wY2lvbmVzPXtvcGNpb25NfSBcclxuICAgICAgICAgICAgZm9yUGs9e3Byb3BzLmZvclBrfVxyXG4gICAgICAgICAgICBkZXNwbGllZ3VlQ29udGVuaWRvPXtwcm9wcy5vcGNpb25NLmRlc3BsaWVndWVDb250ZW5pZG8/Pydob3Jpem9udGFsJ31cclxuICAgICAgICAvPlxyXG4gICAgPC9EZXNwbGVnYXJDYXNpbGxlcm8+XHJcbn1cclxuXHJcbnR5cGUgQ2FzaWxsZXJvRW5jYWJlemFibGUgPSBGb3JtdWxhcmlvfEJsb3F1ZXxGaWx0cm98Q29uanVudG9QcmVndW50YXN8UHJlZ3VudGF8T3BjaW9uTXVsdGlwbGV8UHJlZ3VudGFTaW1wbGV8Q29uc2lzdGVuY2lhfFRleHRvXHJcblxyXG5mdW5jdGlvbiBFbmNhYmV6YWRvRGVzcGxpZWd1ZShwcm9wczp7Y2FzaWxsZXJvOkNhc2lsbGVyb0VuY2FiZXphYmxlLCB2ZXJJZEd1aW9uPzpib29sZWFuLCBsZWVyPzpib29sZWFuLCBmb3JQazpGb3JQa30pe1xyXG4gICAgdmFyIHtjYXNpbGxlcm8sIGZvclBrfSA9IHByb3BzO1xyXG4gICAgdmFyIGNvbkNhbXBvT3BjaW9uZXMgPSB1c2VTZWxlY3Rvcigoc3RhdGU6Q2Fzb1N0YXRlKT0+c3RhdGUub3BjaW9uZXMuY29uQ2FtcG9PcGNpb25lcylcclxuICAgIHZhciBoYW5kbGVDbGlja0JvcnJhcj0oKT0+e1xyXG4gICAgICAgIGRpc3BhdGNoQnlQYXNzKGFjY2lvbl9yZWdpc3RyYXJfcmVzcHVlc3RhLCB7cmVzcHVlc3RhOm51bGwsIHZhcmlhYmxlOmNhc2lsbGVyby52YXJfbmFtZSBhcyBJZFZhcmlhYmxlLCBmb3JQazpmb3JQa30pXHJcbiAgICB9O1xyXG4gICAgdmFyIHZlcl9pZCA9IGNhc2lsbGVyby52ZXJfaWQgPz8gY2FzaWxsZXJvLmNhc2lsbGVybztcclxuICAgIC8vIEB0cy1pZ25vcmUgbm8gZXN0w6EgZW4gdG9kb3MgbG9zIGNhc2lsbGVyb3MgcGVybyBhY8OhIHBhcmEgZWwgZGVzcGxpZWd1ZSBkZSBtZXRhZGF0b3Mgbm8gaW1wb3J0YVxyXG4gICAgdmFyIGNhbGN1bGFkYSA9IGNhc2lsbGVyby5jYWxjdWxhZGE7XHJcbiAgICB2YXIgaWQgPSBgaWQtZGl2LSR7Y2FzaWxsZXJvLnZhcl9uYW1lfHxjYXNpbGxlcm8uY2FzaWxsZXJvfWA7XHJcbiAgICB2YXIgaWRBY2Npb25lcyA9IFwiYWNjaW9uZXMtXCIraWQ7XHJcbiAgICByZXR1cm4gPGRpdiBcclxuICAgICAgICBjbGFzc05hbWU9XCJlbmNhYmV6YWRvXCIgXHJcbiAgICAgICAgZGViZS1sZWVyPXtwcm9wcy5sZWVyPydTSSc6J05PJ30gXHJcbiAgICA+XHJcbiAgICAgICAgPGRpdiBpZD17aWR9IGNsYXNzTmFtZT1cImlkLWRpdlwiIHRpdGxlPXtgJHtjYXNpbGxlcm8uY2FzaWxsZXJvfSAtICR7Y2FzaWxsZXJvLnZhcl9uYW1lfWB9XHJcbiAgICAgICAgICAgIG9uQ2xpY2s9eygpPT57XHJcbiAgICAgICAgICAgICAgICB2YXIgZGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWRBY2Npb25lcyk7XHJcbiAgICAgICAgICAgICAgICBkaXYhLnNldEF0dHJpYnV0ZShcImFjY2lvbi12aXNpYmxlXCIsICgxLU51bWJlcihkaXYhLmdldEF0dHJpYnV0ZShcImFjY2lvbi12aXNpYmxlXCIpKSkudG9TdHJpbmcoKSk7XHJcbiAgICAgICAgICAgICAgICAvLyBUT0RPLiBWZXIgcXXDqSBoYWNlbW9zIGN1YW5kbyBzZSB0b2NhIGVsIElEIGRlIGxhIHByZWd1dG5hXHJcbiAgICAgICAgICAgICAgICBkaXNwYXRjaEJ5UGFzcyhhY2Npb25faWRfcHJlZ3VudGEsIHtwcmVndW50YTogY2FzaWxsZXJvLmNhc2lsbGVybyBhcyBJZFByZWd1bnRhLCBmb3JQa30pO1xyXG4gICAgICAgICAgICB9fVxyXG4gICAgICAgID5cclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJpZFwiPlxyXG4gICAgICAgICAgICAgICAge3Zlcl9pZH1cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIHsoY2FzaWxsZXJvLnRpcG92YXI9PVwic2lfbm9cInx8Y2FzaWxsZXJvLnRpcG92YXI9PVwib3BjaW9uZXNcIik/PENhbXBvIGRpc2FibGVkPXtmYWxzZX0gcHJlZ3VudGE9e2Nhc2lsbGVyb30gZm9yUGs9e2ZvclBrfSBtaW5pPXt0cnVlfSBoaWRkZW49eyFjb25DYW1wb09wY2lvbmVzICYmICdxdWl0YXInfS8+Om51bGx9XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYWNjaW9uZXMtcHJlZ3VudGFcIiBpZD17aWRBY2Npb25lc30gYWNjaW9uLXZpc2libGU9XCIwXCI+XHJcbiAgICAgICAgICAgICAgICB7Y2FzaWxsZXJvLnZhcl9uYW1lPzxkaXY+PEJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgIGlkPXtcImJvcnJhci1wcmVndW50YS1cIitjYXNpbGxlcm8udmFyX25hbWV9XHJcbiAgICAgICAgICAgICAgICAgICAgbWktdmFyaWFibGU9e2Nhc2lsbGVyby52YXJfbmFtZX1cclxuICAgICAgICAgICAgICAgICAgICB2YXJpYW50PVwib3V0bGluZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImJvdG9uLXByZWd1bnRhLWJvcnJhclwiXHJcbiAgICAgICAgICAgICAgICAgICAgb25DbGljaz17aGFuZGxlQ2xpY2tCb3JyYXJ9XHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgPElDT04uRGVsZXRlRm9yZXZlci8+XHJcbiAgICAgICAgICAgICAgICA8L0J1dHRvbj48L2Rpdj46bnVsbH1cclxuICAgICAgICAgICAgICAgIHtjYXNpbGxlcm8udmFyX25hbWU/KG5zX25jPT48ZGl2PjxCdXR0b25cclxuICAgICAgICAgICAgICAgICAgICBpZD17XCJuc25jLXByZWd1bnRhLVwiK2Nhc2lsbGVyby52YXJfbmFtZX1cclxuICAgICAgICAgICAgICAgICAgICBtaS12YXJpYWJsZT17Y2FzaWxsZXJvLnZhcl9uYW1lfVxyXG4gICAgICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJvdXRsaW5lZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiYm90b24tcHJlZ3VudGEtbnNuY1wiXHJcbiAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCk9PntcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2hCeVBhc3MoYWNjaW9uX3JlZ2lzdHJhcl9yZXNwdWVzdGEsIHtyZXNwdWVzdGE6bnNfbmMsIHZhcmlhYmxlOmNhc2lsbGVyby52YXJfbmFtZSBhcyBJZFZhcmlhYmxlLCBmb3JQazpmb3JQa30pXHJcbiAgICAgICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICBOUy9OQ1xyXG4gICAgICAgICAgICAgICAgPC9CdXR0b24+PC9kaXY+KShjYXNpbGxlcm8udmFsb3JfbnNfbmM/Py05KTpudWxsfVxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm5vbWJyZS1kaXZcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJub21icmVcIj57YnJlYWtlYWJsZVRleHQoY2FzaWxsZXJvLm5vbWJyZSl9PC9kaXY+XHJcbiAgICAgICAgICAgIHtjYXNpbGxlcm8uYWNsYXJhY2lvbj9cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYWNsYXJhY2lvblwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHtjYXNpbGxlcm8uc2FsdG8gJiYgY2FzaWxsZXJvLnRpcG9jPT0nRklMVFJPJz9cclxuICAgICAgICAgICAgICAgICAgICAgICAgPFNhbHRvRGVzcGxpZWd1ZSBjYXNpbGxlcm89e2Nhc2lsbGVyb30gcHJlZmlqbz17YnJlYWtlYWJsZVRleHQoY2FzaWxsZXJvLmFjbGFyYWNpb24pfS8+XHJcbiAgICAgICAgICAgICAgICAgICAgOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVha2VhYmxlVGV4dChjYXNpbGxlcm8uYWNsYXJhY2lvbilcclxuICAgICAgICAgICAgICAgICAgICB9ICAgICAgICBcclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA6bnVsbH1cclxuICAgICAgICAgICAgPGRpdiBsb3MtbWV0YWRhdG9zPVwic2lcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGVsLW1ldGFkYXRvPVwidmFyaWFibGVcIj57Y2FzaWxsZXJvLnZhcl9uYW1lfTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIHtjYXNpbGxlcm8udGlwb3ZhciAmJiBjYXNpbGxlcm8udGlwb3ZhciE9J29wY2lvbmVzJyAmJiBjYXNpbGxlcm8udGlwb3ZhciE9J3NpX25vJz9cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBlbC1tZXRhZGF0bz1cInRpcG92YXJcIj57Y2FzaWxsZXJvLnRpcG92YXJ9PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgOm51bGx9XHJcbiAgICAgICAgICAgICAgICB7ICAgLy9AdHMtaWdub3JlIHVuYSBvcGNpw7NuIG3Dumx0aXBsZSBudW5jYSBsbyBhIGEgc2VyLCBubyB0aWVuZSBlbCBjYW1wbywgbm8gaW1wb3J0YVxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2lsbGVyby5vcHRhdGl2bz88c3BhbiBlbC1tZXRhZGF0bz1cIm9wdGF0aXZhXCI+b3B0YXRpdmE8L3NwYW4+Om51bGxcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHtjYWxjdWxhZGE/PHNwYW4gZWwtbWV0YWRhdG89XCJjYWxjdWxhZGFcIj5jYWxjdWxhZGE8L3NwYW4+Om51bGx9XHJcbiAgICAgICAgICAgICAgICB7Y2FzaWxsZXJvLmRlc3BsaWVndWVPY3VsdGE/PHNwYW4gZWwtbWV0YWRhdG89XCJvY3VsdGFcIj5vY3VsdGE8L3NwYW4+Om51bGx9XHJcbiAgICAgICAgICAgICAgICB7Y2FzaWxsZXJvLmV4cHJlc2lvbl9oYWJpbGl0YXI/PHNwYW4gZWwtbWV0YWRhdG89XCJleHByZXNpb25faGFiaWxpdGFyXCI+aGFiaWxpdGE6IHtjYXNpbGxlcm8uZXhwcmVzaW9uX2hhYmlsaXRhcn08L3NwYW4+Om51bGx9XHJcbiAgICAgICAgICAgICAgICB7ICAgLy9AdHMtaWdub3JlIGFsdHVub3MgY2FzaWxsZXJvcyBubyB0aWVuZW4gZXNwZWNpYWwsIG5vIGltcG9ydGEsIGVzIHNvbG8gcGFyYSBwb25lciBsb3MgbWV0YWRhdG9zXHJcbiAgICAgICAgICAgICAgICAgICAgY2FzaWxsZXJvLmVzcGVjaWFsPy5hdXRvaW5nPzxzcGFuIGVsLW1ldGFkYXRvPVwiZXhwcmVzaW9uX2F1dG9pbmdcIj5hdXRvaW5nOiB7Y2FzaWxsZXJvLmVzcGVjaWFsPy5hdXRvaW5nfTwvc3Bhbj46bnVsbFxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG59XHJcblxyXG5mdW5jdGlvbiBEZXNwbGVnYXJDb25maXJtYXJCb3JyYXJSZXNwdWVzdGEocHJvcHM6e2ZvclBrOkZvclBrLCB2YXJpYWJsZUJvcnJhcjpJZFZhcmlhYmxlfSl7XHJcbiAgICB2YXIgW29wZW4sIHNldE9wZW5dID0gdXNlU3RhdGUoISFwcm9wcy52YXJpYWJsZUJvcnJhcilcclxuICAgIGNvbnN0IGRpc3BhdGNoID0gdXNlRGlzcGF0Y2goKTtcclxuICAgIGNvbnN0IGhhbmRsZUNsb3NlID0gKCkgPT4ge1xyXG4gICAgICAgIGRpc3BhdGNoKGRpc3BhdGNoZXJzLkNPTkZJUk1BUl9CT1JSQVJfUkVTUFVFU1RBKHtmb3JQazpwcm9wcy5mb3JQaywgdmFyaWFibGU6bnVsbH0pKTtcclxuICAgICAgICBzZXRPcGVuKGZhbHNlKTtcclxuICAgIH1cclxuICAgIHJldHVybiA8UG9wb3ZlclxyXG4gICAgICAgICAgICBpZD17XCJwb3BvdmVyLWNvbmZpcm1hclwifVxyXG4gICAgICAgICAgICBvcGVuPXtvcGVufVxyXG4gICAgICAgICAgICBvbkNsb3NlPXtoYW5kbGVDbG9zZX1cclxuICAgICAgICAgICAgYW5jaG9yT3JpZ2luPXt7XHJcbiAgICAgICAgICAgICAgICB2ZXJ0aWNhbDogJ2JvdHRvbScsXHJcbiAgICAgICAgICAgICAgICBob3Jpem9udGFsOiAnY2VudGVyJyxcclxuICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgdHJhbnNmb3JtT3JpZ2luPXt7XHJcbiAgICAgICAgICAgICAgICB2ZXJ0aWNhbDogJ3RvcCcsXHJcbiAgICAgICAgICAgICAgICBob3Jpem9udGFsOiAnbGVmdCcsXHJcbiAgICAgICAgICAgIH19XHJcbiAgICAgICAgPiAgIFxyXG4gICAgICAgICAgICA8VHlwb2dyYXBoeT5MYSBwcmVndW50YSB0aWVuZSByZWdpc3RyYWRhIHVuYSByZXNwdWVzdGEgcXVlIG5vIGZ1ZSBkZXRlY3RhZGEgY29tbyBlcnLDs25lYTwvVHlwb2dyYXBoeT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJjb25maXJtYS1ib3RvbmVzXCI+XHJcbiAgICAgICAgICAgICAgICA8QnV0dG9uIGNvbG9yPVwic2Vjb25kYXJ5XCIgdmFyaWFudD1cIm91dGxpbmVkXCIgb25DbGljaz17KCk9PntcclxuICAgICAgICAgICAgICAgICAgICBpZihwcm9wcy52YXJpYWJsZUJvcnJhcil7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoQnlQYXNzKGFjY2lvbl9yZWdpc3RyYXJfcmVzcHVlc3RhLCB7Zm9yUGs6cHJvcHMuZm9yUGssIHZhcmlhYmxlOnByb3BzLnZhcmlhYmxlQm9ycmFyLCByZXNwdWVzdGE6bnVsbH0pXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGhhbmRsZUNsb3NlKCk7XHJcbiAgICAgICAgICAgICAgICB9fT5ib3JyYXIgcmVzcHVlc3RhPC9CdXR0b24+XHJcbiAgICAgICAgICAgICAgICA8QnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIHZhcmlhbnQ9XCJvdXRsaW5lZFwiIG9uQ2xpY2s9e2hhbmRsZUNsb3NlfT52b2x2ZXIgc2luIGJvcnJhcjwvQnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L1BvcG92ZXI+O1xyXG59XHJcblxyXG5mdW5jdGlvbiBjYWxjdWxhck51ZXN0cmFMb25naXR1ZChsb25naXR1ZDpzdHJpbmcgfG51bGwpe1xyXG4gICAgcmV0dXJuIGxvbmdpdHVkO1xyXG59XHJcblxyXG5mdW5jdGlvbiBlbmZvY2FyRWxlbWVudG9EZVZhcmlhYmxlKHNpZ3VpZW50ZVZhcmlhYmxlOklkVmFyaWFibGV8SWRGaW4pe1xyXG4gICAgZGViZVNhbHRhciA9IGZhbHNlO1xyXG4gICAgdmFyIHt0b3AsIGVuZm9jYWRvLCBlbGVtZW50b0lucHV0VmFyaWFibGV9ID0gY2FsY3VsYXJFbGVtZW50b0VuZm9jYWRvKHNpZ3VpZW50ZVZhcmlhYmxlKTtcclxuICAgIGlmKHRvcCAhPSBudWxsICYmIHRvcD4wICYmICghZW5mb2NhZG8gfHwgXCJzYWx0YSBzaWVtcHJlXCIpKXtcclxuICAgICAgICB3aW5kb3cuc2Nyb2xsVG8oe3RvcCwgbGVmdDowLCBiZWhhdmlvcjonc21vb3RoJ30pO1xyXG4gICAgfVxyXG4gICAgZWxlbWVudG9JbnB1dFZhcmlhYmxlPy5mb2N1cygpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBDYW1wbyhwcm9wczp7ZGlzYWJsZWQ6Ym9vbGVhbiwgcHJlZ3VudGE6UHJlZ3VudGFTaW1wbGV8UHJlZ3VudGFDb25PcGNpb25lc3xQcmVndW50YUNvblNpTm98T3BjaW9uTXVsdGlwbGUsIGZvclBrOkZvclBrLCBtaW5pPzpib29sZWFuLCBoaWRkZW4/OmJvb2xlYW58J3F1aXRhcid9KXtcclxuICAgIHZhciB7cHJlZ3VudGEsIGRpc2FibGVkLCBtaW5pIH0gPSBwcm9wcztcclxuICAgIHZhciB7c2FsdG9BdXRvbWF0aWNvLCBjb25DYW1wb09wY2lvbmVzfSA9IHVzZVNlbGVjdG9yKChzdGF0ZTpDYXNvU3RhdGUpPT5zdGF0ZS5vcGNpb25lcyk7XHJcbiAgICBjb25zdCBsb25naXR1ZCA9IG1pbmkgPyBwcmVndW50YS5jYXNpbGxlcm9zLnJlZHVjZSgoYWN1bSwgbyk9Pk1hdGgubWF4KG8uY2FzaWxsZXJvLnRvU3RyaW5nKCkubGVuZ3RoLCBhY3VtKSwgMCkgOiBcclxuICAgICAgICAvLyBAdHMtaWdub3JlIG1pbmkgZXMgcGFyYSBsb3Mgb3Ryb3NcclxuICAgICAgICBwcmVndW50YS5sb25naXR1ZDtcclxuICAgIC8vIHZhciBbdmFsb3IsIHNldFZhbG9yXSA9IHVzZVN0YXRlKHByb3BzLnZhbG9yKTtcclxuICAgIHZhciBbZWRpdGFuZG8sIHNldEVkaXRhbmRvXSA9IHVzZVN0YXRlKGZhbHNlKTtcclxuICAgIC8vIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAvLyAgICAgc2V0VmFsb3IocHJvcHMudmFsb3IpXHJcbiAgICAvLyB9LCBbcHJvcHMudmFsb3JdKTtcclxuICAgIGNvbnN0IGlucHV0UHJvcHMgPSB7XHJcbiAgICAgICAgbWF4TGVuZ3RoOiBsb25naXR1ZCxcclxuICAgIH07XHJcbiAgICBjb25zdCBvbkNoYW5nZT0obnVldm9WYWxvcjpWYWxvcnx0eXBlb2YgTk9fQ0FNQklBUl9fVkVSSUZJQ0FSX1NJX0VTX05FQ0VTQVJJTyk9PntcclxuICAgICAgICB2YXIge3NpZ3VpZW50ZVZhcmlhYmxlfSA9IGRpc3BhdGNoQnlQYXNzKGFjY2lvbl9yZWdpc3RyYXJfcmVzcHVlc3RhLCB7Zm9yUGs6cHJvcHMuZm9yUGssIHZhcmlhYmxlOnByZWd1bnRhLnZhcl9uYW1lLCByZXNwdWVzdGE6bnVldm9WYWxvcn0pO1xyXG4gICAgICAgIGlmKHNpZ3VpZW50ZVZhcmlhYmxlICYmIGRlYmVTYWx0YXIpe1xyXG4gICAgICAgICAgICAvL0B0cy1pZ25vcmUgYWxndW5vcyBjYXNpbGxlcm9zIHRpZW5lbiBlc3BlY2lhbCB5IG90cm9zIG5vXHJcbiAgICAgICAgICAgIChwcmVndW50YS5lc3BlY2lhbD8ubm9TY3JvbGwgPT0gdHJ1ZSk/bnVsbDplbmZvY2FyRWxlbWVudG9EZVZhcmlhYmxlKHByZWd1bnRhLmVzcGVjaWFsPy5zY3JvbGxUbyA/PyBzaWd1aWVudGVWYXJpYWJsZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIHZhciBudWVzdHJhTG9uZ2l0dWQgPSBjYWxjdWxhck51ZXN0cmFMb25naXR1ZChsb25naXR1ZClcclxuICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT1cImNhbXBvXCIgbnVlc3RyYS1sb25naXR1ZD17bnVlc3RyYUxvbmdpdHVkfSBzdHlsZT17cHJvcHMuaGlkZGVuPT0ncXVpdGFyJz97ZGlzcGxheTonbm9uZSd9OnByb3BzLmhpZGRlbj97dmlzaWJpbGl0eTonaGlkZGVuJ306dW5kZWZpbmVkfT5cclxuICAgICAgICB7bWluaT9udWxsOjxCb3RvbkJvcnJhclxyXG4gICAgICAgICAgICBpZD17YGJvcnJhci1hYmllcnRhLSR7cHJlZ3VudGEudmFyX25hbWV9YH1cclxuICAgICAgICAgICAgdmFyaWFibGU9e3ByZWd1bnRhLnZhcl9uYW1lfVxyXG4gICAgICAgICAgICBmb3JQaz17cHJvcHMuZm9yUGt9XHJcbiAgICAgICAgLz59XHJcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJpbnB1dC1jYW1wb1wiPlxyXG4gICAgICAgICAgICA8VGV4dEZpZWxkIFxyXG4gICAgICAgICAgICAgICAgaWQ9e2B2YXItJHtwcmVndW50YS52YXJfbmFtZX1gfVxyXG4gICAgICAgICAgICAgICAgZGlzYWJsZWQ9e2Rpc2FibGVkfVxyXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidmFyaWFibGVcIiBcclxuICAgICAgICAgICAgICAgIC8vdmFyLWxlbmd0aD17cHJlZ3VudGEubG9uZ2l0dWR9IFxyXG4gICAgICAgICAgICAgICAgZnVsbFdpZHRoPXt0cnVlfVxyXG4gICAgICAgICAgICAgICAgaW5wdXRQcm9wcz17aW5wdXRQcm9wc31cclxuICAgICAgICAgICAgICAgIHR5cGU9e3ByZWd1bnRhLmRlc3BsaWVndWVUaXBvSW5wdXQ/P2FkYXB0YXJUaXBvVmFyQ2FzaWxsZXJvKHByZWd1bnRhLnRpcG92YXIpfVxyXG4gICAgICAgICAgICAgICAgb25LZXlEb3duPXsoZXZlbnQ6UmVhY3QuS2V5Ym9hcmRFdmVudCk9PntcclxuICAgICAgICAgICAgICAgICAgICB2YXIgZXNFbnRlciA9IChldmVudC5rZXkgPT0gJ0VudGVyJyB8fCBldmVudC5rZXlDb2RlID09IDEzKVxyXG4gICAgICAgICAgICAgICAgICAgIGRlYmVTYWx0YXIgPSBlc0VudGVyICYmIChzYWx0b0F1dG9tYXRpY28gfHwgY29uQ2FtcG9PcGNpb25lcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYoZXNFbnRlcil7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKGV2ZW50LnRhcmdldCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LnRhcmdldC5ibHVyKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgICAgb25Gb2N1cz17KF9ldmVudCk9PnNldEVkaXRhbmRvKHRydWUpfVxyXG4gICAgICAgICAgICAgICAgb25CbHVyPXsoZXZlbnQsIHZhbG9yKT0+e1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKGV2ZW50Py5yZWxhdGVkVGFyZ2V0Py5nZXRBdHRyaWJ1dGUoJ2JvdG9uLWNvbmZpcm1hcicpKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGViZVNhbHRhciA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlKHZhbG9yKTtcclxuICAgICAgICAgICAgICAgICAgICBzZXRFZGl0YW5kbyhmYWxzZSlcclxuICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgIC8+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAge2Rpc2FibGVkIHx8IG1pbmk/bnVsbDpcclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJib3Rvbi1jb25maXJtYXItY2FtcG9cIj5cclxuICAgICAgICAgICAgICAgIDxCdXR0b24gdmFyaWFudD17ZWRpdGFuZG8/XCJjb250YWluZWRcIjonb3V0bGluZWQnfSBzaXplPVwic21hbGxcIiBjb2xvcj17ZWRpdGFuZG8/J3ByaW1hcnknOidkZWZhdWx0J31cclxuICAgICAgICAgICAgICAgICAgICBib3Rvbi1jb25maXJtYXI9e3ByZWd1bnRhLnZhcl9uYW1lfVxyXG4gICAgICAgICAgICAgICAgICAgIHRhYkluZGV4PXstMX1cclxuICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKT0+e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZShOT19DQU1CSUFSX19WRVJJRklDQVJfU0lfRVNfTkVDRVNBUklPKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0RWRpdGFuZG8oZmFsc2UpXHJcbiAgICAgICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgICAgID48SUNPTi5DaGVjay8+PC9CdXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIH1cclxuICAgIDwvZGl2PlxyXG59XHJcblxyXG5pbnRlcmZhY2UgSWNhc2lsbGVyb0Nvbk9wY2lvbmVze1xyXG4gICAgdmFyX25hbWU6SWRWYXJpYWJsZSxcclxuICAgIGNhc2lsbGVyb3M6T3BjaW9uW11cclxufVxyXG5cclxuZnVuY3Rpb24gT3BjaW9uZXNEZXNwbGllZ3VlKFxyXG4gICAge2Nhc2lsbGVyb0Nvbk9wY2lvbmVzLCBmb3JQaywgIGxlZXIsIGRlc3BsaWVndWVDb250ZW5pZG99OlxyXG4gICAge2Nhc2lsbGVyb0Nvbk9wY2lvbmVzOkljYXNpbGxlcm9Db25PcGNpb25lcywgZm9yUGs6Rm9yUGssIGxlZXI6Ym9vbGVhbiwgZGVzcGxpZWd1ZUNvbnRlbmlkbzondmVydGljYWwnfCdob3Jpem9udGFsJ31cclxuKXtcclxuICAgIGNvbnN0IGRlc3BsZWdhck90cm9zID0gKG9wY2lvbjpPcGNpb24sIHNvbG9QYXJhRGVzcGxpZWd1ZTondmVydGljYWwnfCdob3Jpem9udGFsJ3xudWxsKSA9PiBvcGNpb24uY2FzaWxsZXJvcy5tYXAoKHN1YlByZWd1bnRhOlByZWd1bnRhKT0+KFxyXG4gICAgICAgIHNvbG9QYXJhRGVzcGxpZWd1ZSA9PSBudWxsIHx8IHNvbG9QYXJhRGVzcGxpZWd1ZSA9PSBzdWJQcmVndW50YS5kZXNwbGllZ3VlQ29udGVuaWRvID9cclxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm90cm9zLWVzcGVjaWZpY2FyXCIga2V5PXtzdWJQcmVndW50YS5pZF9jYXNpbGxlcm99PlxyXG4gICAgICAgICAgICA8UHJlZ3VudGFEZXNwbGllZ3VlIFxyXG4gICAgICAgICAgICAgICAgcHJlZ3VudGE9e3N1YlByZWd1bnRhfSBcclxuICAgICAgICAgICAgICAgIGZvclBrPXtmb3JQa30gXHJcbiAgICAgICAgICAgICAgICBkZXNwbGllZ3VlRW5jYWJlemFkbz0nc3VwZXJpb3InXHJcbiAgICAgICAgICAgIC8+XHJcbiAgICAgICAgPC9kaXY+Om51bGxcclxuICAgICkpXHJcbiAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9XCJjb250ZW5pZG9cIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJvcGNpb25lc1wiIGRlc3BsaWVndWUtY29udGVuaWRvPXtkZXNwbGllZ3VlQ29udGVuaWRvPz8ndmVydGljYWwnfT5cclxuICAgICAgICAgICAge2Nhc2lsbGVyb0Nvbk9wY2lvbmVzLmNhc2lsbGVyb3MubWFwKChvcGNpb246T3BjaW9uLCBpOm51bWJlcik9PlxyXG4gICAgICAgICAgICAgICAgPEdyaWQga2V5PXtvcGNpb24uaWRfY2FzaWxsZXJvfSBpdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgb2N1bHRhci1zYWx0ZWFkYT17b3BjaW9uLmRlc3BsaWVndWVPY3VsdGE/KG9wY2lvbi5leHByZXNpb25faGFiaWxpdGFyX2pzPydJTkhBQklMSVRBUic6J1NJJyk6J05PJ31cclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICA8T3BjaW9uRGVzcGxpZWd1ZSBcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzaWxsZXJvPXtvcGNpb259IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZT17Y2FzaWxsZXJvQ29uT3BjaW9uZXMudmFyX25hbWV9IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWxvck9wY2lvbj17b3BjaW9uLmNhc2lsbGVyb31cclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yUGs9e2ZvclBrfSBcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGVlcj17bGVlcn1cclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uQm90b25Cb3JyYXI9e2k9PTAgfHwgZGVzcGxpZWd1ZUNvbnRlbmlkbyE9J2hvcml6b250YWwnfVxyXG4gICAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICAgICAge2Rlc3BsaWVndWVDb250ZW5pZG89PSdob3Jpem9udGFsJz9udWxsOmRlc3BsZWdhck90cm9zKG9wY2lvbixudWxsKX1cclxuICAgICAgICAgICAgICAgIDwvR3JpZD5cclxuICAgICAgICAgICAgKX1cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICB7ZGVzcGxpZWd1ZUNvbnRlbmlkbz09J2hvcml6b250YWwnP2Nhc2lsbGVyb0Nvbk9wY2lvbmVzLmNhc2lsbGVyb3MubWFwKChvcGNpb246T3BjaW9uKT0+XHJcbiAgICAgICAgICAgIGRlc3BsZWdhck90cm9zKG9wY2lvbixudWxsKVxyXG4gICAgICAgICk6bnVsbH1cclxuICAgIDwvZGl2PlxyXG59XHJcblxyXG5jb25zdCBub21icmVDYXNpbGxlcm89e1xyXG4gICAgRjogJ2Zvcm11bGFyaW8nLFxyXG4gICAgQjogJ2Jsb3F1ZScsXHJcbiAgICBQOiAncHJlZ3VudGEnLFxyXG4gICAgQ1A6ICdjb25qdW50b3ByZWd1bnRhcycsXHJcbiAgICBPOiAnb3BjaW9uJyxcclxuICAgIE9NOiAnbXVsdGlwbGUnLFxyXG4gICAgRklMVFJPOiAnZmlsdHJvJyxcclxuICAgIENPTlM6ICdjb25zaXN0ZW5jaWEnLFxyXG4gICAgQkY6ICdib3RvbmZvcm11bGFyaW8nLFxyXG4gICAgVEVYVE86ICdhY2xhcmFjaW9uc3VwZXJpb3InLFxyXG59XHJcblxyXG5mdW5jdGlvbiBEZXNwbGVnYXJDYXNpbGxlcm8ocHJvcHM6e1xyXG4gICAgY2FzaWxsZXJvOlByZWd1bnRhfEJsb3F1ZXxGaWx0cm98Q29uanVudG9QcmVndW50YXN8Qm90b25Gb3JtdWxhcmlvfENvbnNpc3RlbmNpYXxPcGNpb25NdWx0aXBsZXxUZXh0byxcclxuICAgIGlkPzpzdHJpbmcsXHJcbiAgICBzdHlsZT86UmVhY3QuQ1NTUHJvcGVydGllcyxcclxuICAgIGRlc3BsaWVndWVFbmNhYmV6YWRvPzonbGF0ZXJhbCd8J3N1cGVyaW9yJ1xyXG4gICAgY2hpbGRyZW46UmVhY3QuUmVhY3ROb2RlfFJlYWN0LlJlYWN0Tm9kZVtdLFxyXG4gICAgXCJvY3VsdGFyLXNhbHRlYWRhXCI/OidTSSd8J05PJ3wnSU5IQUJJTElUQVInfHVuZGVmaW5lZFxyXG59KXtcclxuICAgIHJldHVybiA8ZGl2IFxyXG4gICAgICAgIGtleT17YCR7cHJvcHMuY2FzaWxsZXJvLnRpcG9jfS0ke3Byb3BzLmlkfHxwcm9wcy5jYXNpbGxlcm8uaWRfY2FzaWxsZXJvfWB9XHJcbiAgICAgICAgY2xhc3NOYW1lPXtgY2FzaWxsZXJvICR7bm9tYnJlQ2FzaWxsZXJvW3Byb3BzLmNhc2lsbGVyby50aXBvY119YH1cclxuICAgICAgICBpZD17cHJvcHMuaWR9XHJcbiAgICAgICAgc3R5bGU9e3Byb3BzLnN0eWxlfVxyXG4gICAgICAgIGRlc3BsaWVndWUtZW5jYWJlemFkbz17cHJvcHMuY2FzaWxsZXJvLmRlc3BsaWVndWVFbmNhYmV6YWRvPz9wcm9wcy5kZXNwbGllZ3VlRW5jYWJlemFkbz8/J3N1cGVyaW9yJ31cclxuICAgICAgICBvY3VsdGFyLXNhbHRlYWRhPXtwcm9wc1tcIm9jdWx0YXItc2FsdGVhZGFcIl19XHJcbiAgICA+e3Byb3BzLmNoaWxkcmVufTwvZGl2PlxyXG59XHJcblxyXG5mdW5jdGlvbiBQcmVndW50YURlc3BsaWVndWUocHJvcHM6e1xyXG4gICAgcHJlZ3VudGE6UHJlZ3VudGEsIFxyXG4gICAgZm9yUGs6Rm9yUGssIFxyXG4gICAgZGVzcGxpZWd1ZUVuY2FiZXphZG86J2xhdGVyYWwnfCdzdXBlcmlvcidcclxufSl7XHJcbiAgICB2YXIge3ByZWd1bnRhfSA9IHByb3BzO1xyXG4gICAgY29uc3QgZGlzcGF0Y2g9dXNlRGlzcGF0Y2goKTtcclxuICAgIHZhciBlc3RhZG86RXN0YWRvVmFyaWFibGU7XHJcbiAgICB2YXIgaWQgPSBgcHJlZ3VudGEtJHtwcmVndW50YS5pZF9jYXNpbGxlcm99YFxyXG4gICAgcmVnaXN0cmFyRWxlbWVudG8oe1xyXG4gICAgICAgIGlkLCBcclxuICAgICAgICBkaXJlY3Q6dHJ1ZSwgXHJcbiAgICAgICAgZnVuOiByZWdpc3RyYWRvckRlVmFyaWFibGUocHJlZ3VudGEpXHJcbiAgICB9KVxyXG4gICAgdmFyIHN0eWxlOiBDU1NQcm9wZXJ0aWVzID0ge31cclxuICAgIGlmKHByZWd1bnRhLmRlc3BsaWVndWUgPT0gJ2dyaWQnKXtcclxuICAgICAgICBzdHlsZS5kaXNwbGF5ID0gJ2dyaWQnO1xyXG4gICAgICAgIHN0eWxlLmdyaWRUZW1wbGF0ZUNvbHVtbnMgPSAncmVwZWF0KDMsMWZyKSc7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gPERlc3BsZWdhckNhc2lsbGVyb1xyXG4gICAgICAgIGlkPXtpZH1cclxuICAgICAgICBjYXNpbGxlcm89e3ByZWd1bnRhfVxyXG4gICAgICAgIHN0eWxlPXtzdHlsZX1cclxuICAgICAgICBudWVzdHJvLXRpcG92YXI9e3ByZWd1bnRhLnRpcG92YXJ8fFwibXVsdGlwbGVcIn0gXHJcbiAgICAgICAgb2N1bHRhci1zYWx0ZWFkYT17cHJlZ3VudGEuZGVzcGxpZWd1ZU9jdWx0YT8ocHJlZ3VudGEuZXhwcmVzaW9uX2hhYmlsaXRhcl9qcz8nSU5IQUJJTElUQVInOidTSScpOidOTyd9XHJcbiAgICAgICAgZGVzcGxpZWd1ZUVuY2FiZXphZG89e3Byb3BzLmRlc3BsaWVndWVFbmNhYmV6YWRvfVxyXG5cclxuICAgID5cclxuICAgICAgICA8RW5jYWJlemFkb0Rlc3BsaWVndWUgXHJcbiAgICAgICAgICAgIGNhc2lsbGVybz17cHJlZ3VudGF9IFxyXG4gICAgICAgICAgICBsZWVyPXtwcmVndW50YS5sZWVyIT09ZmFsc2V9ICBcclxuICAgICAgICAgICAgZm9yUGs9e3Byb3BzLmZvclBrfVxyXG4gICAgICAgIC8+XHJcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJjb250ZW5pZG9cIj57XHJcbiAgICAgICAgICAgIHByZWd1bnRhLnRpcG92YXI9PVwic2lfbm9cIj88R3JpZCBjb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8U2lOb0Rlc3BsaWVndWUgXHJcbiAgICAgICAgICAgICAgICAgICAgY2FzaWxsZXJvQ29uT3BjaW9uZXM9e3ByZWd1bnRhfSBcclxuICAgICAgICAgICAgICAgICAgICBmb3JQaz17cHJvcHMuZm9yUGt9IFxyXG4gICAgICAgICAgICAgICAgICAgIGRlc3BsaWVndWVDb250ZW5pZG89e3Byb3BzLnByZWd1bnRhLmRlc3BsaWVndWVDb250ZW5pZG8/Pyd2ZXJ0aWNhbCd9XHJcbiAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICA8L0dyaWQ+OlxyXG4gICAgICAgICAgICBwcmVndW50YS50aXBvdmFyPT1cIm9wY2lvbmVzXCIgP1xyXG4gICAgICAgICAgICAgICAgPE9wY2lvbmVzRGVzcGxpZWd1ZSBcclxuICAgICAgICAgICAgICAgICAgICBjYXNpbGxlcm9Db25PcGNpb25lcz17cHJlZ3VudGF9IFxyXG4gICAgICAgICAgICAgICAgICAgIGZvclBrPXtwcm9wcy5mb3JQa30gXHJcbiAgICAgICAgICAgICAgICAgICAgbGVlcj17ISFwcmVndW50YS5sZWVyfVxyXG4gICAgICAgICAgICAgICAgICAgIGRlc3BsaWVndWVDb250ZW5pZG89e3ByZWd1bnRhLmRlc3BsaWVndWVDb250ZW5pZG8/Pyd2ZXJ0aWNhbCd9XHJcbiAgICAgICAgICAgICAgICAvPjpcclxuICAgICAgICAgICAgcHJlZ3VudGEudGlwb3Zhcj09bnVsbD9cclxuICAgICAgICAgICAgICAgIChwcmVndW50YS5jYXNpbGxlcm9zIGFzIChPcGNpb25NdWx0aXBsZXxDb25zaXN0ZW5jaWEpW10pLm1hcCgob3BjaW9uTXVsdGlwbGUpPT5cclxuICAgICAgICAgICAgICAgICAgICBvcGNpb25NdWx0aXBsZS50aXBvYz09J09NJz8gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxPcGNpb25NdWx0aXBsZURlc3BsaWVndWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleT17b3BjaW9uTXVsdGlwbGUuaWRfY2FzaWxsZXJvfSBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wY2lvbk09e29wY2lvbk11bHRpcGxlfSBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvclBrPXtwcm9wcy5mb3JQa30gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgOiAvL2xhcyBjb25zaXN0ZW5jaWFzIHB1ZWRlbiBzZXIgaGVybWFuYXMgZGUgT01cclxuICAgICAgICAgICAgICAgICAgICAgICAgPENvbnNpc3RlbmNpYURlc3BsaWVndWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleT17b3BjaW9uTXVsdGlwbGUuaWRfY2FzaWxsZXJvfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzaWxsZXJvPXtvcGNpb25NdWx0aXBsZX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvclBrPXtwcm9wcy5mb3JQa31cclxuICAgICAgICAgICAgICAgICAgICAgICAgLz4gICAgXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgIDpcclxuICAgICAgICAgICAgKChwcmVndW50YVNpbXBsZTpQcmVndW50YVNpbXBsZSk9PlxyXG4gICAgICAgICAgICAgICAgPENhbXBvXHJcbiAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e3ByZWd1bnRhU2ltcGxlLmNhbGN1bGFkYT90cnVlOmZhbHNlfVxyXG4gICAgICAgICAgICAgICAgICAgIHByZWd1bnRhPXtwcmVndW50YVNpbXBsZX1cclxuICAgICAgICAgICAgICAgICAgICBmb3JQaz17cHJvcHMuZm9yUGt9XHJcbiAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICApKHByZWd1bnRhKVxyXG4gICAgICAgIH08L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInBpZS1wcmVndW50YVwiPlxyXG4gICAgICAgICAgICA8U2FsdG9EZXNwbGllZ3VlIFxyXG4gICAgICAgICAgICAgICAgY2FzaWxsZXJvPXtwcmVndW50YX1cclxuICAgICAgICAgICAgICAgIHByZWZpam89e3ByZWd1bnRhLnRpcG92YXI9PVwib3BjaW9uZXNcIj8oXHJcbiAgICAgICAgICAgICAgICAgICAgcHJlZ3VudGEuY2FzaWxsZXJvcy5zb21lKG9wY2lvbj0+b3BjaW9uLnNhbHRvKT9cInJlc3RvIGRlIGxhcyBvcGNpb25lc1wiOlwidG9kYXMgbGFzIG9wY2lvbmVzXCJcclxuICAgICAgICAgICAgICAgICk6XCJcIn1cclxuICAgICAgICAgICAgLz5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvRGVzcGxlZ2FyQ2FzaWxsZXJvPlxyXG59XHJcblxyXG52YXIgY2FsY3VsYXJEaXNhYmxlZEJGQWdyZWdhckxpc3RvID0gKFxyXG4gICAgY29uZmlnU29ydGVvRm9ybXVsYXJpbzpDb25maWd1cmFjaW9uU29ydGVvRm9ybXVsYXJpb3xudWxsLCBcclxuICAgIGhhYmlsaXRhY2lvbkJvdG9uRm9ybXVsYXJpbzogQ29uZmlndXJhY2lvbkhhYmlsaXRhckJvdG9uRm9ybXVsYXJpb3xudWxsLFxyXG4gICAgZm9ybXVsYXJpbzpJZEZvcm11bGFyaW9cclxuKT0+e1xyXG4gICAgaWYoaGFiaWxpdGFjaW9uQm90b25Gb3JtdWxhcmlvICYmIGhhYmlsaXRhY2lvbkJvdG9uRm9ybXVsYXJpb1tmb3JtdWxhcmlvXSl7XHJcbiAgICAgICAgcmV0dXJuICFoYWJpbGl0YWNpb25Cb3RvbkZvcm11bGFyaW9bZm9ybXVsYXJpb10uaGFiaWxpdGFyX2FncmVnYXJfbGlzdG9cclxuICAgIH1lbHNle1xyXG4gICAgICAgIHJldHVybiAhIShjb25maWdTb3J0ZW9Gb3JtdWxhcmlvICYmIGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW8uaWRfZm9ybXVsYXJpb19pbmRpdmlkdWFsID09IGZvcm11bGFyaW8pXHJcbiAgICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGJvdG9uZXNEZWxGb3JtdWxhcmlvKHI6UmVzcHVlc3RhcywgdW5pZGFkX2FuYWxpc2lzOklkVW5pZGFkQW5hbGlzaXMsIGVzdHJ1Y3R1cmE6RXN0cnVjdHVyYSwgZm9yUGtQYWRyZTpGb3JQaywgZmVlZGJhY2tBbGw6e1tmb3JtdWxhcmlvIGluIFBsYWluRm9yUGtdOkZvcm1TdHJ1Y3R1cmVTdGF0ZTxJZFZhcmlhYmxlLCBWYWxvciwgSWRGaW4+fSk6SHRtbFRhZzxIVE1MRGl2RWxlbWVudD57XHJcbiAgICB2YXIgZm9ybXNWaXZpZW5kYSA9IGdldEZvcm11bGFyaW9zRm9yVmFsdWVQa1JhaXooZm9yUGtQYWRyZVtlc3RydWN0dXJhLm1haW5URFBLXSk7XHJcbiAgICB2YXIgdWFEZWYgPSBlc3RydWN0dXJhLnVuaWRhZGVzX2FuYWxpc2lzW3VuaWRhZF9hbmFsaXNpc107XHJcbiAgICB2YXIgYXJyYXlFc3RydWN0dXJhRm9ybXVsYXJpb3MgPSAobGlrZUFyKGVzdHJ1Y3R1cmEuZm9ybXVsYXJpb3MpKS5hcnJheSgpO1xyXG4gICAgdmFyIHggPSBsaWtlQXIodWFEZWYuaGlqYXMpLmZpbHRlcih1YUhpamE9PlxyXG4gICAgICAgICAgICAvL2Rlc2NhcnRvIHVhcyBxdWUgbm8gZXN0w6luIGVuIG5pbmd1biBmb3JtXHJcbiAgICAgICAgICAgIGFycmF5RXN0cnVjdHVyYUZvcm11bGFyaW9zLmZpbHRlcigoaW5mb0Zvcm11bGFyaW8pPT5cclxuICAgICAgICAgICAgICAgIGluZm9Gb3JtdWxhcmlvLmNhc2lsbGVyb3MudW5pZGFkX2FuYWxpc2lzID09IHVhSGlqYT8udW5pZGFkX2FuYWxpc2lzICYmIGZvcm1zVml2aWVuZGEuaW5jbHVkZXMoaW5mb0Zvcm11bGFyaW8uY2FzaWxsZXJvcy5pZF9jYXNpbGxlcm8gYXMgSWRGb3JtdWxhcmlvKVxyXG4gICAgICAgICAgICApLmxlbmd0aCA+IDBcclxuICAgICAgICApLm1hcCh1YUhpamE9PihcclxuICAgICAgICB1YUhpamEgPT0gbnVsbCA/IG51bGwgOlxyXG4gICAgICAgIGh0bWwuZGl2KHtjbGFzczondWEtaGlqYXMnfSxbXHJcbiAgICAgICAgICAgIGh0bWwuZGl2KHVhSGlqYS51bmlkYWRfYW5hbGlzaXMpLFxyXG4gICAgICAgICAgICBodG1sLmRpdihcclxuICAgICAgICAgICAgICAgIGxpa2VBcihyW3VhSGlqYS51bmlkYWRfYW5hbGlzaXNdfHxbXSkubWFwKChyZXNwdWVzdGFzSGlqYSwgaSk9PntcclxuICAgICAgICAgICAgICAgICAgICB2YXIgbnVtID0gTnVtYmVyKGkpKzFcclxuICAgICAgICAgICAgICAgICAgICB2YXIgZm9yUGtIaWphUGFyY2lhbCA9IHsuLi5mb3JQa1BhZHJlLCBbdWFIaWphLnBrX2FncmVnYWRhXTogbnVtfTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgY29uZmlnU29ydGVvRm9ybXVsYXJpbyA9IGVzdHJ1Y3R1cmEuY29uZmlnU29ydGVvP2VzdHJ1Y3R1cmEuY29uZmlnU29ydGVvW2dldE1haW5Gb3JtRm9yVml2aWVuZGEoZm9yUGtQYWRyZVtlc3RydWN0dXJhLm1haW5URFBLXSldOm51bGxcclxuICAgICAgICAgICAgICAgICAgICB2YXIgaGFiaWxpdGFjaW9uQm90b25Gb3JtdWxhcmlvID0gZXN0cnVjdHVyYS5oYWJpbGl0YWNpb25Cb3RvbkZvcm11bGFyaW87XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGh0bWwuZGl2KHtjbGFzczonbnVtZXJhZG9yLXVhJ30sIFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaHRtbC5kaXYoe2NsYXNzOidib3RvbmVzLXVhJ30sW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaHRtbC5kaXYoe2NsYXNzOidudW1lcm8tdWEnfSxudW0udG9TdHJpbmcoKSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5saWtlQXIoZXN0cnVjdHVyYS5mb3JtdWxhcmlvcylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoZm9ybURlZj0+Zm9ybURlZi5jYXNpbGxlcm9zLnVuaWRhZF9hbmFsaXNpcyA9PSB1YUhpamEudW5pZGFkX2FuYWxpc2lzICYmIGZvcm1zVml2aWVuZGEuaW5jbHVkZXMoZm9ybURlZi5jYXNpbGxlcm9zLmlkX2Nhc2lsbGVybyBhcyBJZEZvcm11bGFyaW8pKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLm1hcCgoX2Zvcm1EZWYsIGZvcm11bGFyaW8pPT57XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZvclBrID0gey4uLmZvclBrSGlqYVBhcmNpYWwsIGZvcm11bGFyaW99O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmZWVkYmFja0Zvcm0gPSBmZWVkYmFja0FsbFt0b1BsYWluRm9yUGsoZm9yUGspXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmVlZGJhY2tGb3JtID8gaHRtbC5kaXYoe30sW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBodG1sLmJ1dHRvbigodWFIaWphISkucGtfYWdyZWdhZGErXCIgb2s6IFwiKyhOdW1iZXIoaSkrMSkpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3RvbkZvcm11bGFyaW9Db25SZXN1bWVuKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvclBrLCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW0sIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdHVhbDogdHJ1ZSB8fCBjYWxjdWxhckFjdHVhbEJGKGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW8sIG51bSwgbnVsbCwgZm9ybXVsYXJpbywgciksIC8vUkVWSVNBUiB0cnVlIHBhcmEgcXVlIG5vIHNlIGdyaXNlblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZpbzpmYWxzZSwgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ6IGNhbGN1bGFyRGlzYWJsZWRCRihjb25maWdTb3J0ZW9Gb3JtdWxhcmlvLCBoYWJpbGl0YWNpb25Cb3RvbkZvcm11bGFyaW8sIG51bSwgZm9ybXVsYXJpbywgcilcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZWVkYmFja0Zvcm0sIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtkZXNwbGllZ3VlT2N1bHRhOmZhbHNlLCBleHByZXNpb25faGFiaWxpdGFyX2pzOicnLCBub21icmU6Zm9ybXVsYXJpbywgYWNsYXJhY2lvbjpudWxsLCBzYWx0bzpmb3JtdWxhcmlvfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvclBrUGFkcmUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImJvdG9uLWlyLXJlc3VtZW4tZm9ybXVsYXJpb1wiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXN0cnVjdHVyYS5mb3JtdWxhcmlvc1tmb3JtdWxhcmlvXS5jYXNpbGxlcm9zXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKSA6IG51bGxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLmFycmF5KCkubWFwKHg9PnggPT0gbnVsbCA/IG51bGwgOiB4KS5yZXZlcnNlKCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICxib3RvbmVzRGVsRm9ybXVsYXJpbyhyZXNwdWVzdGFzSGlqYSwgdWFIaWphLnVuaWRhZF9hbmFsaXNpcywgZXN0cnVjdHVyYSwgZm9yUGtIaWphUGFyY2lhbCwgZmVlZGJhY2tBbGwpXHJcbiAgICAgICAgICAgICAgICAgICAgXSlcclxuICAgICAgICAgICAgICAgIH0pLmFycmF5KCkubWFwKHg9PnggPT0gbnVsbCA/IG51bGwgOiB4KVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgXSlcclxuICAgICkpLmFycmF5KCkubWFwKHg9PnggPT0gbnVsbCA/IG51bGwgOiB4KTtcclxuICAgIHJldHVybiBodG1sLmRpdigvKntzdHlsZTonZGlzcGxheTpmbGV4OyBmbGV4LWRpcmVjdGlvbjpyb3cnfSwqL3gpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBUZXh0b0Rlc3BsaWVndWUocHJvcHM6e2Nhc2lsbGVybzpUZXh0bywgZm9yUGs6Rm9yUGt9KXtcclxuICAgIHZhciB7Y2FzaWxsZXJvLCBmb3JQa30gPSBwcm9wcztcclxuICAgIGNvbnN0IGRpc3BhdGNoID0gdXNlRGlzcGF0Y2goKTtcclxuICAgIHZhciBoYWJpbGl0YWRvciA9IGNhc2lsbGVyby5leHByZXNpb25faGFiaWxpdGFyX2pzP2dldEZ1bmNpb25IYWJpbGl0YXIoY2FzaWxsZXJvLmV4cHJlc2lvbl9oYWJpbGl0YXJfanMpOigpPT50cnVlO1xyXG4gICAgdmFyIHttb2RvRGVzcGxpZWd1ZX0gPSB1c2VTZWxlY3RvclZpdmllbmRhKGZvclBrKTtcclxuICAgIHZhciBpZCA9IGB0ZXh0by0ke2Nhc2lsbGVyby5pZF9jYXNpbGxlcm99YDtcclxuICAgIHJlZ2lzdHJhckVsZW1lbnRvKHtpZCwgc3R5bGU6J2Rpc3BsYXknLCBmdW46KHI6UmVzcHVlc3Rhcyk9PmhhYmlsaXRhZG9yKHIpIHx8IG1vZG9EZXNwbGllZ3VlPT0nbWV0YWRhdG9zJz8nYmxvY2snOidub25lJ30pXHJcbiAgICB2YXIgZXNSZXN1bWVuRm9ybXVsYXJpbyA9IGNhc2lsbGVyby5jYXNpbGxlcm89PSdSZXNGb3InIGFzIElkQ2FzaWxsZXJvOyAvLyBUT0RPOiBDYW1iaWEgZXN0byBxdWUgZXN0w6EgamFyY29kZWFkby5cclxuICAgIGlmKGVzUmVzdW1lbkZvcm11bGFyaW8pe1xyXG4gICAgICAgIHJlZ2lzdHJhckVsZW1lbnRvKHtpZCwgZGlyZWN0OnRydWUsIFxyXG4gICAgICAgICAgICBmdW46KFxyXG4gICAgICAgICAgICAgICAgcjpSZXNwdWVzdGFzLCBcclxuICAgICAgICAgICAgICAgIF9mZWVkYmFja0Zvcm06IEZvcm1TdHJ1Y3R1cmVTdGF0ZTxJZFZhcmlhYmxlLCBWYWxvciwgSWRGaW4+LCBcclxuICAgICAgICAgICAgICAgIGVsZW1lbnRvOkhUTUxEaXZFbGVtZW50LCBcclxuICAgICAgICAgICAgICAgIGZlZWRiYWNrQWxsOntbZm9ybXVsYXJpbyBpbiBQbGFpbkZvclBrXTpGb3JtU3RydWN0dXJlU3RhdGU8SWRWYXJpYWJsZSxWYWxvciwgSWRGaW4+fSwgXHJcbiAgICAgICAgICAgICAgICBlc3RydWN0dXJhOkVzdHJ1Y3R1cmFcclxuICAgICAgICAgICAgKT0+e1xyXG4gICAgICAgICAgICAgICAgZWxlbWVudG8uc3R5bGUuZGlzcGxheT0nJztcclxuICAgICAgICAgICAgICAgIC8vQHRzLWlnbm9yZSBsYXMgcmVzcHVlc3RhcyBzb24gcmVzcHVlc3Rhc1JhaXogcG9ycXVlIFJlc0ZvciBlc3TDoSBlbiBlbCBmb3JtIHBwYWxcclxuICAgICAgICAgICAgICAgIGlmKHJbJ3Jlc3VtZW5Fc3RhZG8nXSBhcyBSZXN1bWVuRXN0YWRvID09ICd2YWNpbycpe1xyXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnRvLnRleHRDb250ZW50ID0gXCJyZWxldmFtaWVudG8gc2luIGVtcGV6YXJcIjtcclxuICAgICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnRvLnRleHRDb250ZW50ID0gXCJyZWxldmFtaWVudG8gZW1wZXphZG9cIjtcclxuICAgICAgICAgICAgICAgICAgICB2YXIge3VuaWRhZF9hbmFsaXNpc30gPSBlc3RydWN0dXJhLmZvcm11bGFyaW9zW2ZvclBrLmZvcm11bGFyaW9dLmNhc2lsbGVyb3M7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudG8uaW5uZXJIVE1MPVwiXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudG8uYXBwZW5kQ2hpbGQoYm90b25lc0RlbEZvcm11bGFyaW8ociwgdW5pZGFkX2FuYWxpc2lzLCBlc3RydWN0dXJhLCBmb3JQaywgZmVlZGJhY2tBbGwpLmNyZWF0ZSgpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcbiAgICB2YXIgaXIgPSAoZGVmQm90b246RGVmaW5pY2lvbkZvcm11bGFyaW9BYnJpcik9PntcclxuICAgICAgICAvLyB2YXIgbnVldmFGb3JQaz17Li4uZm9yUGssIGZvcm11bGFyaW86aWRGb3JtdWxhcmlvRGVzdGlub307XHJcbiAgICAgICAgLy8gbnVldmFGb3JQa1tudWV2b0NhbXBvUGtdID0gZGVmQm90b24ubnVtXHJcbiAgICAgICAgZGlzcGF0Y2hCeVBhc3MoYWNjaW9uX2FicmlyX2Zvcm11bGFyaW8se2ZvclBrOmRlZkJvdG9uLmZvclBrfSk7XHJcbiAgICAgICAgZGlzcGF0Y2goZGlzcGF0Y2hlcnMuQ0FNQklBUl9GT1JNVUxBUklPKHtmb3JQazpkZWZCb3Rvbi5mb3JQaywgYXBpbGFyVnVlbHRhOnRydWV9KSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gPERlc3BsZWdhckNhc2lsbGVybyBcclxuICAgICAgICBpZD17YCR7aWR9LWV4dGVybm9gfVxyXG4gICAgICAgIGNhc2lsbGVybz17Y2FzaWxsZXJvfVxyXG4gICAgPlxyXG4gICAgICAgIDxFbmNhYmV6YWRvRGVzcGxpZWd1ZSBjYXNpbGxlcm89e2Nhc2lsbGVyb30gbGVlcj17ZmFsc2V9IGZvclBrPXtmb3JQa30vPlxyXG4gICAgICAgIDxkaXYgaWQ9e2lkfSBzdHlsZT17e2Rpc3BsYXk6J25vbmUnfX0+PC9kaXY+XHJcbiAgICAgICAge2VzUmVzdW1lbkZvcm11bGFyaW8/XHJcbiAgICAgICAgPEJ1dHRvbiBjbGFzc05hbWU9XCJzcGVjaWFsLWJ1dHRvblwiIGlkPVwiYm90b24taXItcmVzdW1lbi1mb3JtdWxhcmlvXCIgc3R5bGU9e3tkaXNwbGF5Oidub25lJ319XHJcbiAgICAgICAgICAgIG9uQ2xpY2s9eyhldmVudCk9PntcclxuICAgICAgICAgICAgICAgIGlyKEpTT04ucGFyc2UoKGV2ZW50LnRhcmdldCEgYXMgdW5rbm93biBhcyBIVE1MQnV0dG9uRWxlbWVudCkuZ2V0QXR0cmlidXRlKCdkZWYtYnV0dG9uJykhKSlcclxuICAgICAgICAgICAgfX1cclxuICAgICAgICA+aXIgKGludGVybm8pPC9CdXR0b24+XHJcbiAgICAgICAgOm51bGx9XHJcblxyXG4gICAgPC9EZXNwbGVnYXJDYXNpbGxlcm8+XHJcbn1cclxuXHJcbmZ1bmN0aW9uIEZpbHRyb0Rlc3BsaWVndWUocHJvcHM6e2ZpbHRybzpGaWx0cm8sIGZvclBrOkZvclBrfSl7XHJcbiAgICB2YXIge2ZpbHRyb30gPSBwcm9wcztcclxuICAgIHJldHVybiA8RGVzcGxlZ2FyQ2FzaWxsZXJvIGNhc2lsbGVybz17ZmlsdHJvfT5cclxuICAgICAgICA8RGVzcGxpZWd1ZUVuY2FiZXphZG8gY2FzaWxsZXJvPXtmaWx0cm99Lz5cclxuICAgIDwvRGVzcGxlZ2FyQ2FzaWxsZXJvPlxyXG59XHJcblxyXG5mdW5jdGlvbiBDb25zaXN0ZW5jaWFEZXNwbGllZ3VlKHByb3BzOntjYXNpbGxlcm86Q29uc2lzdGVuY2lhLCBmb3JQazpGb3JQa30pe1xyXG4gICAgdmFyIHtjYXNpbGxlcm8sIGZvclBrfSA9IHByb3BzO1xyXG4gICAgdmFyIGhhYmlsaXRhZG9yID0gY2FzaWxsZXJvLmV4cHJlc2lvbl9oYWJpbGl0YXJfanM/Z2V0RnVuY2lvbkhhYmlsaXRhcihjYXNpbGxlcm8uZXhwcmVzaW9uX2hhYmlsaXRhcl9qcyk6KCk9PnRydWU7XHJcbiAgICB2YXIge21vZG9EZXNwbGllZ3VlfSA9IHVzZVNlbGVjdG9yVml2aWVuZGEoZm9yUGspO1xyXG4gICAgdmFyIGlkID0gYGNvbnNpc3RlbmNpYS0ke2Nhc2lsbGVyby5pZF9jYXNpbGxlcm99YDtcclxuICAgIHJlZ2lzdHJhckVsZW1lbnRvKHtpZCwgc3R5bGU6J2Rpc3BsYXknLCBmdW46KHI6UmVzcHVlc3Rhcyk9PmhhYmlsaXRhZG9yKHIpIHx8IG1vZG9EZXNwbGllZ3VlPT0nbWV0YWRhdG9zJz8nYmxvY2snOidub25lJ30pXHJcbiAgICByZXR1cm4gPERlc3BsZWdhckNhc2lsbGVybyBcclxuICAgICAgICBpZD17aWR9XHJcbiAgICAgICAgY2FzaWxsZXJvPXtjYXNpbGxlcm99XHJcbiAgICAgICAgc3R5bGU9e3tkaXNwbGF5Oidub25lJ319XHJcbiAgICA+XHJcbiAgICAgICAgPEVuY2FiZXphZG9EZXNwbGllZ3VlIGNhc2lsbGVybz17Y2FzaWxsZXJvfSBsZWVyPXtmYWxzZX0gZm9yUGs9e2ZvclBrfS8+XHJcbiAgICA8L0Rlc3BsZWdhckNhc2lsbGVybz5cclxufVxyXG5cclxudHlwZSBEZWZpbmljaW9uRm9ybXVsYXJpb0FicmlyPVxyXG4oe2ZvclBrOkZvclBrLCBudW06bnVtYmVyLCBhY3R1YWw6Ym9vbGVhbiwgcHJldmlvOmJvb2xlYW59IHwgXHJcbntmb3JQazpGb3JQaywgbnVtOm51bWJlciwgYWN0dWFsOmJvb2xlYW4sIHByZXZpbzpmYWxzZSwgZXNBZ3JlZ2FyOnRydWV9IHwgXHJcbntmb3JQazpGb3JQaywgbnVtOm51bWJlciwgYWN0dWFsOmJvb2xlYW4sIHByZXZpbzpmYWxzZSwgZXNDb25maXJtYXI6dHJ1ZX0gfFxyXG57Zm9yUGs6Rm9yUGssIG51bTpudW1iZXIsIGFjdHVhbDpib29sZWFuLCBwcmV2aW86ZmFsc2UsIHBlcm1pdGVCb3JyYXI6Ym9vbGVhbn0gfFxyXG57Zm9yUGs6Rm9yUGssIG51bTpmYWxzZSwgYWN0dWFsOmJvb2xlYW4sIHByZXZpbzp0cnVlLCB1bmljbzp0cnVlfSlcclxuJiB7ZXNDb25maXJtYXI/OnRydWUsIGVzQWdyZWdhcj86dHJ1ZSwgcGVybWl0ZUJvcnJhcj86Ym9vbGVhbiwgZGlzYWJsZWQ/OmJvb2xlYW58dW5kZWZpbmVkfTtcclxuXHJcblxyXG52YXIgYm90b25Gb3JtdWxhcmlvQ29uUmVzdW1lbiA9IChcclxuICAgIGRlZkJvdG9uOkRlZmluaWNpb25Gb3JtdWxhcmlvQWJyaXIsIFxyXG4gICAgZmVlZGJhY2tGb3JtOkZvcm1TdHJ1Y3R1cmVTdGF0ZTxJZFZhcmlhYmxlLCBWYWxvciwgSWRGaW4+LCBcclxuICAgIHJlc3B1ZXN0YXNBdW1lbnRhZGFzOlJlc3B1ZXN0YXMsXHJcbiAgICBjYXNpbGxlcm86e2Rlc3BsaWVndWVPY3VsdGE/OmJvb2xlYW58bnVsbCwgZXhwcmVzaW9uX2hhYmlsaXRhcl9qcz86c3RyaW5nLCBhY2xhcmFjaW9uOnN0cmluZ3xudWxsLCBleHByZXNpb25faGFiaWxpdGFyPzpzdHJpbmcsIG5vbWJyZT86c3RyaW5nLCBzYWx0bzpzdHJpbmd8bnVsbCwgZXNwZWNpYWw/OmFueX0sXHJcbiAgICBmb3JQa1BhZHJlOiBGb3JQayxcclxuICAgIGlkQnV0dG9uOnN0cmluZyxcclxuICAgIGZvcm11bGFyaW9BQWJyaXI6Rm9ybXVsYXJpb1xyXG4pPT57XHJcbiAgICB2YXIgZm9yUGs6Rm9yUGsgPSBkZWZCb3Rvbi5mb3JQaztcclxuICAgIHZhciBzdWZpam9JZEVsZW1lbnRvID0gdG9QbGFpbkZvclBrKGZvclBrKSsoZGVmQm90b24uZXNDb25maXJtYXI/Jy1saXN0byc6JycpO1xyXG4gICAgdmFyIGlkID0gYGRpdi1ib3Rvbi1mb3JtdWxhcmlvLSR7c3VmaWpvSWRFbGVtZW50b31gO1xyXG4gICAgdmFyIGVzdGFkbyA9IGZlZWRiYWNrRm9ybS5yZXN1bWVuO1xyXG4gICAgcmV0dXJuIGh0bWwudHIoe1xyXG4gICAgICAgIGlkLCBcclxuICAgICAgICBjbGFzczpcInNlY2Npb24tYm90b24tZm9ybXVsYXJpb1wiICwgXHJcbiAgICAgICAgJGF0dHJzOntcclxuICAgICAgICAgICAgXCJudWVzdHJvLXZhbGlkYXRvclwiOmRlZkJvdG9uLmFjdHVhbD8nYWN0dWFsJzpkZWZCb3Rvbi5wcmV2aW8/J3ZhbGlkYSc6J3RvZGF2aWFfbm8nLFxyXG4gICAgICAgICAgICBcIm9jdWx0YXItc2FsdGVhZGFcIjpjYXNpbGxlcm8uZGVzcGxpZWd1ZU9jdWx0YT8oY2FzaWxsZXJvLmV4cHJlc2lvbl9oYWJpbGl0YXJfanM/J0lOSEFCSUxJVEFSJzonU0knKTonTk8nLFxyXG4gICAgICAgICAgICBcInRpZW5lLXZhbG9yXCI6XCJOT1wiLFxyXG4gICAgICAgICAgICBcImRlZi1idXR0b25cIjpKU09OLnN0cmluZ2lmeShkZWZCb3RvbilcclxuICAgICAgICB9XHJcbiAgICB9LCBbXHJcbiAgICAgICAgY2FzaWxsZXJvLmFjbGFyYWNpb24/XHJcbiAgICAgICAgICAgIGh0bWwudGQoe2NsYXNzOlwiYWNsYXJhY2lvblwifSwgW2JyZWFrZWFibGVUZXh0KGNhc2lsbGVyby5hY2xhcmFjaW9uKV0pXHJcbiAgICAgICAgOm51bGwsXHJcbiAgICAgICAgaHRtbC50ZCh7Y29sc3BhbjooZGVmQm90b24uZXNBZ3JlZ2FyIHx8IGRlZkJvdG9uLmVzQ29uZmlybWFyKT9cclxuICAgICAgICAgICAgICAgIChjYXNpbGxlcm8uZXNwZWNpYWw/LmNhbXBvc1Jlc3VtZW4ubGVuZ3RoPz8xKSsoY2FzaWxsZXJvLmFjbGFyYWNpb24/MDoxKVxyXG4gICAgICAgICAgICA6bnVsbH0sW1xyXG4gICAgICAgICAgICBCdXR0b24yKHtcclxuICAgICAgICAgICAgICAgIC8vIGlkOmB2YXItJHtpZFZhcmlhYmxlfWAsXHJcbiAgICAgICAgICAgICAgICBpZDpgYm90b24tZm9ybXVsYXJpby0ke3N1Zmlqb0lkRWxlbWVudG99YCwgXHJcbiAgICAgICAgICAgICAgICB2YXJpYW50Olwib3V0bGluZWRcIixcclxuICAgICAgICAgICAgICAgIGRpc2FibGVkOiBkZWZCb3Rvbi5kaXNhYmxlZCxcclxuICAgICAgICAgICAgICAgIGNvbG9yOlwiaW5oZXJpdFwiLFxyXG4gICAgICAgICAgICAgICAgb25DbGljazooKT0+e1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKGRlZkJvdG9uLmVzQ29uZmlybWFyKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoZGVmQm90b24ubnVtICE9IG51bGwpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoY2FzaWxsZXJvLnNhbHRvKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgQkZfdmFybmFtZSA9ICckQi5GOicrIGNhc2lsbGVyby5zYWx0byBhcyBJZFZhcmlhYmxlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2hCeVBhc3MoYWNjaW9uX3JlZ2lzdHJhcl9yZXNwdWVzdGEse2ZvclBrOmZvclBrUGFkcmUsIHZhcmlhYmxlOkJGX3Zhcm5hbWUsIHJlc3B1ZXN0YTpkZWZCb3Rvbi5udW09PTA/bnVsbDpkZWZCb3Rvbi5udW0gYXMgVmFsb3J9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoQnlQYXNzKGFjY2lvbl9yZWdpc3RyYXJfcmVzcHVlc3RhLHtmb3JQazpmb3JQa1BhZHJlLCB2YXJpYWJsZTpjYXNpbGxlcm8uZXhwcmVzaW9uX2hhYmlsaXRhciBhcyBJZFZhcmlhYmxlLCByZXNwdWVzdGE6ZGVmQm90b24ubnVtIGFzIFZhbG9yfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJ1dHRvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkQnV0dG9uKSEgYXMgSFRNTEJ1dHRvbkVsZW1lbnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1dHRvbi5zZXRBdHRyaWJ1dGUoJ2RlZi1idXR0b24nLCBKU09OLnN0cmluZ2lmeShkZWZCb3RvbikpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBidXR0b24uY2xpY2soKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgJGF0dHJzOntcclxuICAgICAgICAgICAgICAgICAgICBcInJlc3VtZW4tZXN0YWRvXCI6ZXN0YWRvIT0ndmFjaW8nP2VzdGFkbzogZGVmQm90b24uYWN0dWFsPydhY3R1YWwnOmRlZkJvdG9uLnByZXZpbz9lc3RhZG86J3RvZGF2aWFfbm8nLFxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgLCBjaGlsZHJlbjpbXHJcbiAgICAgICAgICAgICAgICAgICAgKGRlZkJvdG9uLmVzQWdyZWdhcj8nYWdyZWdhcic6ZGVmQm90b24uZXNDb25maXJtYXI/J0xpc3RvJzpjYXNpbGxlcm8ubm9tYnJlICsgJyAnICsgKGRlZkJvdG9uLm51bXx8JycpKSxcclxuICAgICAgICAgICAgICAgICAgICBodG1sLnN2Zyh7Y2xhc3M6XCJNdWlTdmdJY29uLXJvb3RcIiwgZm9jdXNhYmxlOmZhbHNlLCB2aWV3Ym94OlwiMCAwIDI0IDI0XCIsIFwiYXJpYS1oaWRkZW5cIjpcInRydWVcIn0sW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBodG1sLnBhdGgoe2Q6KGRlZkJvdG9uLmVzQWdyZWdhcj9tYXRlcmlhbElvSWNvbnNTdmdQYXRoLkFkZDpkZWZCb3Rvbi5lc0NvbmZpcm1hcj9tYXRlcmlhbElvSWNvbnNTdmdQYXRoLkNoZWNrOmNhc2lsbGVyby5zYWx0bz9tYXRlcmlhbElvSWNvbnNTdmdQYXRoLkZvcndhcmQ6bWF0ZXJpYWxJb0ljb25zU3ZnUGF0aC5FeGl0VG9BcHApfSlcclxuICAgICAgICAgICAgICAgICAgICBdKVxyXG4gICAgICAgICAgICAgICAgXVxyXG4gICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgKGRlZkJvdG9uLnBlcm1pdGVCb3JyYXI/XHJcbiAgICAgICAgICAgICAgICBCdXR0b24yKHtcclxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6XCJib3Rvbi1ib3JyYXItdWEtdmFjaWFcIixcclxuICAgICAgICAgICAgICAgICAgICBjb2xvcjpcImRlZmF1bHRcIixcclxuICAgICAgICAgICAgICAgICAgICB2YXJpYW50Olwib3V0bGluZWRcIixcclxuICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjpcclxuICAgICAgICAgICAgICAgICAgICAgICAgaHRtbC5zdmcoe2NsYXNzOlwiTXVpU3ZnSWNvbi1yb290XCIsIGZvY3VzYWJsZTpmYWxzZSwgdmlld2JveDpcIjAgMCAyNCAyNFwiLCBcImFyaWEtaGlkZGVuXCI6XCJ0cnVlXCJ9LFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh0bWwucGF0aCh7ZDptYXRlcmlhbElvSWNvbnNTdmdQYXRoLkRlbGV0ZUZvcmV2ZXJ9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBdKSwgXHJcbiAgICAgICAgICAgICAgICAgICAgb25DbGljazooKT0+YWNjaW9uX2JvcnJhcl9mb3JtdWxhcmlvKHtmb3JQaywgZm9yUGtQYWRyZX0pfSlcclxuICAgICAgICAgICAgOm51bGwpIFxyXG4gICAgICAgIF0pLFxyXG4gICAgICAgIChkZWZCb3Rvbi5udW0gIT09IGZhbHNlICYmICFkZWZCb3Rvbi5lc0FncmVnYXIgJiYgIWRlZkJvdG9uLmVzQ29uZmlybWFyP1xyXG4gICAgICAgICAgICAoY2FzaWxsZXJvLmVzcGVjaWFsPy5jYW1wb3NSZXN1bWVuPz9bLypkZWZCb3Rvbi5udW0udG9TdHJpbmcoKSovXSkubWFwKFxyXG4gICAgICAgICAgICAgICAgKGNhbXBvOnN0cmluZyk9Pmh0bWwudGQocmVzcHVlc3Rhc0F1bWVudGFkYXNbZm9ybXVsYXJpb0FBYnJpci51bmlkYWRfYW5hbGlzaXNdW2RlZkJvdG9uLm51bS0xXVtjYW1wbyBhcyBJZFZhcmlhYmxlXSlcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgIDpudWxsKVxyXG4gICAgICAgIC8vIGh0bWwuZGl2KHtjbGFzczonaW5saW5lLWRpYWxvZycsICRhdHRyczp7XCJpbmxpbmUtZGlhbG9nLW9wZW5cIjogY29uZmlybWFyRm9yemFySXIgPT0gZGVmQm90b24ubnVtPyd2aXNpYmxlJzonaGlkZGVuJ319LFsgICAgICAgICAgICAgICAgXSlcclxuICAgICAgICBcclxuICAgICAgICAvKlxyXG4gICAgICAgICAgICB7ZGVmQm90b24uZXNBZ3JlZ2FyPzw+IDxzcGFuPiAgPC9zcGFuPiA8QnV0dG9uXHJcbiAgICAgICAgICAgICAgICB2YXJpYW50PVwib3V0bGluZWRcIlxyXG4gICAgICAgICAgICAgICAgY29sb3I9XCJpbmhlcml0XCJcclxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpPT57XHJcbiAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICA+PElDT04uQ2hlY2svPjwvQnV0dG9uPjwvPjpudWxsfVxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgICovXHJcbiAgICBdKS5jcmVhdGUoKVxyXG59XHJcblxyXG52YXIgYnVzY2FySG5vc0Zvcm11bGFyaW8gPSAoaWRGb3JtdWxhcmlvRGVzdGlubzpJZEZvcm11bGFyaW8pPT57XHJcbiAgICB2YXIgZXN0cnVjdHVyYSA9IGdldEVzdHJ1Y3R1cmEoKTtcclxuICAgIHZhciB1YSA9IGVzdHJ1Y3R1cmEuZm9ybXVsYXJpb3NbaWRGb3JtdWxhcmlvRGVzdGlub10uY2FzaWxsZXJvcy51bmlkYWRfYW5hbGlzaXM7XHJcbiAgICByZXR1cm4gbGlrZUFyKGVzdHJ1Y3R1cmEuZm9ybXVsYXJpb3MpXHJcbiAgICAgICAgLmZpbHRlcigoaW5mb0Zvcm11bGFyaW86SW5mb0Zvcm11bGFyaW8sIGlkRm9ybTpJZEZvcm11bGFyaW8pPT5cclxuICAgICAgICAgICAgaW5mb0Zvcm11bGFyaW8uY2FzaWxsZXJvcy51bmlkYWRfYW5hbGlzaXMgPT0gdWFcclxuICAgICAgICApLm1hcCgoX2luZm9Gb3JtdWxhcmlvOkluZm9Gb3JtdWxhcmlvLCBpZEZvcm06SWRGb3JtdWxhcmlvKT0+XHJcbiAgICAgICAgICAgIGlkRm9ybVxyXG4gICAgICAgICkuYXJyYXkoKVxyXG59XHJcblxyXG52YXIgY2hlY2tGb3Jtc1ZhY2lvcyA9IChmb3JtczpJZEZvcm11bGFyaW9bXSwgZmVlZGJhY2tBbGw6e1xyXG4gICAgW2Zvcm11bGFyaW8gaW4gUGxhaW5Gb3JQa106Rm9ybVN0cnVjdHVyZVN0YXRlPElkVmFyaWFibGUsIFZhbG9yLCBJZEZpbj4gLy8gcmVzdWx0YWRvIGRlbCByb3dWYWxpZGF0b3IgcGFyYSBlc3RhZG8uZm9yUGtcclxufSwgZm9yUGs6Rm9yUGspPT57XHJcbiAgICByZXR1cm4gZm9ybXMuZmlsdGVyKChmb3JtOklkRm9ybXVsYXJpbyk9PntcclxuICAgICAgICBsZXQgbXlmb3JQaz17Li4uZm9yUGssIGZvcm11bGFyaW86Zm9ybX07XHJcbiAgICAgICAgdmFyIGZlZWRiYWNrID0gZmVlZGJhY2tBbGxbdG9QbGFpbkZvclBrKG15Zm9yUGspXTtcclxuICAgICAgICByZXR1cm4gZmVlZGJhY2sucmVzdW1lbiAhPSAndmFjaW8nXHJcbiAgICB9KS5sZW5ndGggPT0gMFxyXG59XHJcblxyXG5mdW5jdGlvbiBCb3RvbkZvcm11bGFyaW9EZXNwbGllZ3VlKHByb3BzOntjYXNpbGxlcm86Qm90b25Gb3JtdWxhcmlvLCBmb3JtdWxhcmlvOkZvcm11bGFyaW8sIGZvclBrOkZvclBrfSl7XHJcbiAgICB2YXIge2Nhc2lsbGVybywgZm9yUGt9ID0gcHJvcHM7XHJcbiAgICB2YXIgaGFiaWxpdGFkb3IgPSBjYXNpbGxlcm8uZXhwcmVzaW9uX2hhYmlsaXRhcl9qcz9nZXRGdW5jaW9uSGFiaWxpdGFyKGNhc2lsbGVyby5leHByZXNpb25faGFiaWxpdGFyX2pzKTooKT0+dHJ1ZTtcclxuICAgIHZhciB7b3BjaW9uZXN9ID0gdXNlU2VsZWN0b3JWaXZpZW5kYShmb3JQayk7XHJcbiAgICAvL3ZhciBpZEZvcm11bGFyaW9EZXN0aW5vID0gJ0Y6JytjYXNpbGxlcm8uc2FsdG8hIGFzIElkRm9ybXVsYXJpbzsgICAvL29yaWdpbmFsXHJcbiAgICB2YXIgYXJtb05vbVNhbHRvPWNhc2lsbGVyby5zYWx0bz8uc3Vic3RyaW5nKDAsMik9PSdGOic/Y2FzaWxsZXJvLnNhbHRvLnNsaWNlKDIpOmNhc2lsbGVyby5zYWx0bztcclxuICAgIC8vY29uc29sZS5sb2coJ0JvdG9uRm9ybXVsYXJpb0Rlc3BsaWVndWUgYXJtb05vbVNhbHRvICcgK2FybW9Ob21TYWx0byk7XHJcbiAgICB2YXIgaWRGb3JtdWxhcmlvRGVzdGlubyA9ICdGOicrYXJtb05vbVNhbHRvISBhcyBJZEZvcm11bGFyaW87XHJcbiAgICB2YXIgZXN0cnVjdHVyYSA9IGdldEVzdHJ1Y3R1cmEoKTtcclxuICAgIHZhciB7Zm9ybXVsYXJpb0FBYnJpcn0gPSB1c2VTZWxlY3RvcigoX3N0YXRlOkNhc29TdGF0ZSk9Pih7XHJcbiAgICAgICAgZm9ybXVsYXJpb0FBYnJpcjplc3RydWN0dXJhLmZvcm11bGFyaW9zW2lkRm9ybXVsYXJpb0Rlc3Rpbm9dLmNhc2lsbGVyb3MsXHJcbiAgICB9KSk7XHJcbiAgICB2YXIgc3VmaWpvSWRFbGVtZW50byA9IHRvUGxhaW5Gb3JQayhmb3JQayk7XHJcbiAgICAvKlxyXG4gICAgcmVnaXN0cmFyRWxlbWVudG8oe1xyXG4gICAgICAgIGlkOmBkaXYtYm90b24tZm9ybXVsYXJpby0ke3N1Zmlqb0lkRWxlbWVudG99YCwgXHJcbiAgICAgICAgYXR0cjonZXN0YS1pbmhhYmlsaXRhZGEnLCBcclxuICAgICAgICAvLyBmdW46IChyOlJlc3B1ZXN0YXMpPT5oYWJpbGl0YWRvcihyKT8nU0knOidOTydcclxuICAgICAgICBmdW46IChfcjpSZXNwdWVzdGFzKT0+J05PJ1xyXG4gICAgfSk7XHJcbiAgICByZWdpc3RyYXJFbGVtZW50bzxIVE1MQnV0dG9uRWxlbWVudD4oe1xyXG4gICAgICAgIGlkOmBib3Rvbi1mb3JtdWxhcmlvLSR7c3VmaWpvSWRFbGVtZW50b31gLCBcclxuICAgICAgICBwcm9wOidkaXNhYmxlZCcsIFxyXG4gICAgICAgIC8vIGZ1bjogKHI6UmVzcHVlc3Rhcyk9PiFoYWJpbGl0YWRvcihyKVxyXG4gICAgICAgIGZ1bjogKF9yOlJlc3B1ZXN0YXMpPT5mYWxzZVxyXG4gICAgfSk7XHJcbiAgICAqL1xyXG4gICAgY29uc3QgZGlzcGF0Y2ggPSB1c2VEaXNwYXRjaCgpO1xyXG4gICAgdmFyIFtjb25maXJtYXJGb3J6YXJJciwgc2V0Q29uZmlybWFyRm9yemFySXJdID0gdXNlU3RhdGU8RGVmaW5pY2lvbkZvcm11bGFyaW9BYnJpcnxmYWxzZXxudWxsPihudWxsKTtcclxuICAgIHZhciBtdWx0aXBsZUZvcm11bGFyaW9zPWZvcm11bGFyaW9BQWJyaXIudW5pZGFkX2FuYWxpc2lzICE9IHByb3BzLmZvcm11bGFyaW8udW5pZGFkX2FuYWxpc2lzO1xyXG4gICAgdmFyIG51ZXZvQ2FtcG9QayA9IGRlZk9wZXJhdGl2by5kZWZVQVtmb3JtdWxhcmlvQUFicmlyLnVuaWRhZF9hbmFsaXNpc10ucGs7XHJcbiAgIC8vIHZhciB2YXJfbmFtZT0nJEIuJytjYXNpbGxlcm8uc2FsdG87IC8vb3JpZ2luYWxcclxuICAgIHZhciB2YXJfbmFtZT0nJEIuRjonK2FybW9Ob21TYWx0bztcclxuICAgIHZhciBpZFNlY2Npb249YHNlY2Npb24tYm90b24tZm9ybXVsYXJpby0ke3Zhcl9uYW1lfWA7XHJcbiAgICB2YXIgaWRCdXR0b249YHNwZWNpYWwtYnV0dG9uLSR7aWRTZWNjaW9ufWA7XHJcbiAgICByZWdpc3RyYXJFbGVtZW50bzxIVE1MRGl2RWxlbWVudD4oe1xyXG4gICAgICAgIGlkOmlkU2VjY2lvbiwgXHJcbiAgICAgICAgZGlyZWN0OnRydWUsXHJcbiAgICAgICAgZnVuOiAocmVzcHVlc3Rhc0F1bWVudGFkYXM6UmVzcHVlc3RhcywgZmVlZGJhY2tSb3c6IEZvcm1TdHJ1Y3R1cmVTdGF0ZTxJZFZhcmlhYmxlLCBWYWxvciwgSWRGaW4+LCBkaXY6SFRNTERpdkVsZW1lbnQsXHJcbiAgICAgICAgICAgICAgICBmZWVkYmFja0FsbDp7XHJcbiAgICAgICAgICAgICAgICAgICAgW2Zvcm11bGFyaW8gaW4gUGxhaW5Gb3JQa106Rm9ybVN0cnVjdHVyZVN0YXRlPElkVmFyaWFibGUsIFZhbG9yLCBJZEZpbj4gLy8gcmVzdWx0YWRvIGRlbCByb3dWYWxpZGF0b3IgcGFyYSBlc3RhZG8uZm9yUGtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgKT0+e1xyXG4gICAgICAgICAgICB0cnl7XHJcbiAgICAgICAgICAgICAgICB2YXIgbGlzdGFEZUJvdG9uZXNBYnJpcjpEZWZpbmljaW9uRm9ybXVsYXJpb0FicmlyW10gPSBbXTtcclxuICAgICAgICAgICAgICAgLy8gdmFyIGVzVmFyQWN0dWFsID0gZmVlZGJhY2tSb3cuYWN0dWFsID09ICckQi5GOicrY2FzaWxsZXJvLnNhbHRvOyAgLy9vcmlnaW5hbFxyXG4gICAgICAgICAgICAgICAgdmFyIGVzVmFyQWN0dWFsID0gZmVlZGJhY2tSb3cuYWN0dWFsICA9PSAnJEIuRjonK2FybW9Ob21TYWx0bztcclxuICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coJ0JvdG9uRm9ybXVsYXJpb0Rlc3BsaWVndWUgZXNWYXJBY3R1YWwgJyArZXNWYXJBY3R1YWwgICk7XHJcbiAgICAgICAgICAgICAgICBpZihtdWx0aXBsZUZvcm11bGFyaW9zICYmIGNhc2lsbGVyby5zYWx0byE9bnVsbCl7XHJcbiAgICAgICAgICAgICAgICAgIC8vICBsZXQgZGVmRm9ybXVsYXJpbzpJbmZvRm9ybXVsYXJpbyA9IGVzdHJ1Y3R1cmEuZm9ybXVsYXJpb3NbJ0Y6JytjYXNpbGxlcm8uc2FsdG8gYXMgSWRGb3JtdWxhcmlvXTsgICAgICAvL29yaWdpbmFsXHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGRlZkZvcm11bGFyaW86SW5mb0Zvcm11bGFyaW8gPSBlc3RydWN0dXJhLmZvcm11bGFyaW9zWydGOicrYXJtb05vbVNhbHRvIGFzIElkRm9ybXVsYXJpb107XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGRlZlVBID0gZXN0cnVjdHVyYS51bmlkYWRlc19hbmFsaXNpc1tkZWZGb3JtdWxhcmlvLmNhc2lsbGVyb3MudW5pZGFkX2FuYWxpc2lzIV07XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNvbmp1bnRvID0gcmVzcHVlc3Rhc0F1bWVudGFkYXNbZGVmRm9ybXVsYXJpby5jYXNpbGxlcm9zLnVuaWRhZF9hbmFsaXNpcyFdO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBjYW50aWRhZEVzcGVyYWRhID0gcmVzcHVlc3Rhc0F1bWVudGFkYXNbY2FzaWxsZXJvLmV4cHJlc2lvbl9oYWJpbGl0YXIgYXMgSWRWYXJpYWJsZV07XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIG51bUFjdHVhbDpudW1iZXJ8bnVsbCA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgIC8vICB2YXIgZXN0YWRvRGVsQm90b24gPSBmZWVkYmFja1Jvdy5mZWVkYmFja1snJEIuRjonK2Nhc2lsbGVyby5zYWx0byBhcyBJZFZhcmlhYmxlXS5lc3RhZG8gICAvL29yaWdpbmFsXHJcbiAgICAgICAgICAgICAgICAgICAgICB2YXIgZXN0YWRvRGVsQm90b24gPSBmZWVkYmFja1Jvdy5mZWVkYmFja1snJEIuRjonK2FybW9Ob21TYWx0byBhcyBJZFZhcmlhYmxlXS5lc3RhZG9cclxuICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdCb3RvbkZvcm11bGFyaW9EZXNwbGllZ3VlIGVzdGFkb0RlbEJvdG9uICcgK2VzdGFkb0RlbEJvdG9uICApO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBjb25maWdTb3J0ZW9Gb3JtdWxhcmlvID0gZXN0cnVjdHVyYS5jb25maWdTb3J0ZW8/ZXN0cnVjdHVyYS5jb25maWdTb3J0ZW9bZ2V0TWFpbkZvcm1Gb3JWaXZpZW5kYShmb3JQa1tlc3RydWN0dXJhLm1haW5URFBLXSldOm51bGxcclxuICAgICAgICAgICAgICAgICAgICB2YXIgaGFiaWxpdGFjaW9uQm90b25Gb3JtdWxhcmlvID0gZXN0cnVjdHVyYS5oYWJpbGl0YWNpb25Cb3RvbkZvcm11bGFyaW87XHJcbiAgICAgICAgICAgICAgICAgICAgbGlzdGFEZUJvdG9uZXNBYnJpciA9IGxpa2VBcihjb25qdW50bykubWFwKChfLCBpKT0+e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgbnVtOm51bWJlciA9IG51bWJlck9yU3RyaW5nSW5jSWZBcnJheShpLCBjb25qdW50bykgYXMgbnVtYmVyO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgZm9yUGs9ey4uLnByb3BzLmZvclBrLCBmb3JtdWxhcmlvOmlkRm9ybXVsYXJpb0Rlc3Rpbm8sIFtudWV2b0NhbXBvUGtdOm51bX07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmb3JtSG5vcyA9IGJ1c2Nhckhub3NGb3JtdWxhcmlvKGlkRm9ybXVsYXJpb0Rlc3Rpbm8pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmZWVkYmFjayA9IGZlZWRiYWNrQWxsW3RvUGxhaW5Gb3JQayhmb3JQayldO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZihudW1BY3R1YWwgPT0gbnVsbCAmJiBmZWVkYmFjay5yZXN1bWVuID09IFwidmFjaW9cIiAmJiBlc3RhZG9EZWxCb3RvbiA9PSd2YWxpZGEnKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bUFjdHVhbCA9IG51bTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yUGssIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdW1lbjpudWxsLCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bSwgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3R1YWw6IGNhbGN1bGFyQWN0dWFsQkYoY29uZmlnU29ydGVvRm9ybXVsYXJpbywgbnVtLCBudW1BY3R1YWwsIGlkRm9ybXVsYXJpb0Rlc3Rpbm8sIHJlc3B1ZXN0YXNBdW1lbnRhZGFzKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZpbzogbnVtQWN0dWFsID09IG51bGwsIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVybWl0ZUJvcnJhcjogbGlrZUFyKGNvbmp1bnRvKS5hcnJheSgpLmxlbmd0aCA9PSBOdW1iZXIoaSkgKyAxICYmIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrRm9ybXNWYWNpb3MoZm9ybUhub3MsIGZlZWRiYWNrQWxsLCBmb3JQaykgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxjdWxhclBlcm1pdGVCb3JyYXJCRihjb25maWdTb3J0ZW9Gb3JtdWxhcmlvLGlkRm9ybXVsYXJpb0Rlc3Rpbm8pLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ6IGNhbGN1bGFyRGlzYWJsZWRCRihjb25maWdTb3J0ZW9Gb3JtdWxhcmlvLCBoYWJpbGl0YWNpb25Cb3RvbkZvcm11bGFyaW8sIG51bSwgaWRGb3JtdWxhcmlvRGVzdGlubywgcmVzcHVlc3Rhc0F1bWVudGFkYXMpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9KS5hcnJheSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKFwicHVlZGUgYWdyZWdhciAvL1RPRE8gVkVSIEVTVE9cIiAmJiAoY29uanVudG8gaW5zdGFuY2VvZiBBcnJheSB8fCBjb25qdW50byA9PSBudWxsKSl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBudWV2b1ZhbG9yUGs9KGNvbmp1bnRvPT1udWxsID8gMCA6IGNvbmp1bnRvLmxlbmd0aCkgKyAxO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgZm9yUGs9ey4uLnByb3BzLmZvclBrLCBmb3JtdWxhcmlvOmlkRm9ybXVsYXJpb0Rlc3Rpbm8sIFtudWV2b0NhbXBvUGtdOm51ZXZvVmFsb3JQa307XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBkZWJlQWdyZWdhck9saXN0byA9IG51bUFjdHVhbCA9PSBudWxsICYmIChjYW50aWRhZEVzcGVyYWRhID09IG51bGwgfHwgY2FudGlkYWRFc3BlcmFkYSAhPSAoY29uanVudG8gIT1udWxsICYmIGNvbmp1bnRvLmxlbmd0aCkpIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgKGVzdGFkb0RlbEJvdG9uID09J3ZhbGlkYScgfHwgZXNWYXJBY3R1YWwpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsaXN0YURlQm90b25lc0FicmlyLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yUGssIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtOm51ZXZvVmFsb3JQaywgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlc0FncmVnYXI6dHJ1ZSwgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3R1YWw6ZGViZUFncmVnYXJPbGlzdG8sIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldmlvOiBmYWxzZSwgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZDogY2FsY3VsYXJEaXNhYmxlZEJGQWdyZWdhckxpc3RvKGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW8sIGhhYmlsaXRhY2lvbkJvdG9uRm9ybXVsYXJpbywgaWRGb3JtdWxhcmlvRGVzdGlubylcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RhRGVCb3RvbmVzQWJyaXIucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JQaywgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW06bnVldm9WYWxvclBrIC0gMSwgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlc0NvbmZpcm1hcjp0cnVlLCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdHVhbDpkZWJlQWdyZWdhck9saXN0byAmJiAoIWNhc2lsbGVyby5sb25naXR1ZCB8fCBudWV2b1ZhbG9yUGsgPiBOdW1iZXIoY2FzaWxsZXJvLmxvbmdpdHVkKSksIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldmlvOiBmYWxzZSwgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZDogY2FsY3VsYXJEaXNhYmxlZEJGQWdyZWdhckxpc3RvKGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW8sIGhhYmlsaXRhY2lvbkJvdG9uRm9ybXVsYXJpbywgaWRGb3JtdWxhcmlvRGVzdGlubylcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGZvclBrPXsuLi5wcm9wcy5mb3JQaywgZm9ybXVsYXJpbzppZEZvcm11bGFyaW9EZXN0aW5vfTtcclxuICAgICAgICAgICAgICAgICAgICBsaXN0YURlQm90b25lc0FicmlyID0gW3tmb3JQaywgbnVtOmZhbHNlLCB1bmljbzp0cnVlLCBhY3R1YWw6ZXNWYXJBY3R1YWwsIHByZXZpbzp0cnVlfV1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHZhciB0b2Rvc0xvc0JvdG9uZXMgPSBsaXN0YURlQm90b25lc0FicmlyLm1hcChkZWZCb3Rvbj0+XHJcbiAgICAgICAgICAgICAgICAgICAgYm90b25Gb3JtdWxhcmlvQ29uUmVzdW1lbihkZWZCb3RvbiwgZmVlZGJhY2tBbGxbdG9QbGFpbkZvclBrKGRlZkJvdG9uLmZvclBrKV0/P3tyZXN1bWVuOid2YWNpbyd9LCByZXNwdWVzdGFzQXVtZW50YWRhcyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzaWxsZXJvLCBwcm9wcy5mb3JQaywgaWRCdXR0b24sIGZvcm11bGFyaW9BQWJyaXJcclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICBsZXQgbm9tYnJlc0NhbXBvc1Jlc3VtZW4gPSBsaWtlQXIoKGNhc2lsbGVyby5lc3BlY2lhbD8uY2FtcG9zUmVzdW1lbnx8W10pKS5hcnJheSgpLm1hcChjPT5jKTtcclxuICAgICAgICAgICAgICAgIHZhciBodG1sU2VjY2lvbj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZFNlY2Npb24pITtcclxuICAgICAgICAgICAgICAgIGh0bWxTZWNjaW9uLmlubmVySFRNTD1cIlwiO1xyXG4gICAgICAgICAgICAgICAgaHRtbFNlY2Npb24uYXBwZW5kQ2hpbGQoaHRtbC50YWJsZSh7Y2xhc3M6YHRhYmxlIHRhYmxlLXN0cmlwZWQgJHtub21icmVzQ2FtcG9zUmVzdW1lbi5sZW5ndGg/J3ctYXV0byc6Jyd9YH0sW1xyXG4gICAgICAgICAgICAgICAgICAgIGh0bWwudGhlYWQoW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBodG1sLnRyKFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2lsbGVyby5hY2xhcmFjaW9uP2h0bWwudGgoKTpudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaHRtbC50aChjYXNpbGxlcm8ubm9tYnJlKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vbWJyZXNDYW1wb3NSZXN1bWVuLm1hcCgobm9tYnJlQ2FtcG8pPT5odG1sLnRoKG5vbWJyZUNhbXBvKSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF0pXHJcbiAgICAgICAgICAgICAgICAgICAgXSksXHJcbiAgICAgICAgICAgICAgICAgICAgaHRtbC50Ym9keShbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvZG9zTG9zQm90b25lc1xyXG4gICAgICAgICAgICAgICAgICAgIF0pXHJcbiAgICAgICAgICAgICAgICBdKS5jcmVhdGUoKSk7XHJcbiAgICAgICAgICAgIH1jYXRjaChlcnIpe1xyXG4gICAgICAgICAgICAgICAgdmFyIGVycm9yID0gdW5leHBlY3RlZChlcnIpO1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJlbnRyYSBhbCBjYXRjaFwiKVxyXG4gICAgICAgICAgICAgICAgZGl2LnRleHRDb250ZW50PSdlc3RvLCBGQUxMw4kgJytlcnJvci5tZXNzYWdlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICBjb25zdCBpciA9IChkZWZCb3RvbjpEZWZpbmljaW9uRm9ybXVsYXJpb0FicmlyKT0+e1xyXG4gICAgICAgIGlmKCFjYXNpbGxlcm8uc2FsdG8pe1xyXG4gICAgICAgICAgICBvcGNpb25lcy5tb2RvRGlyZWN0bz9cclxuICAgICAgICAgICAgICAgIG51bGxcclxuICAgICAgICAgICAgOlxyXG4gICAgICAgICAgICAgICAgZGlzcGF0Y2goZGlzcGF0Y2hlcnMuVk9MVkVSX0hEUih7fSkpO1xyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICB2YXIgbnVldmFGb3JQaz17Li4uZm9yUGssIGZvcm11bGFyaW86aWRGb3JtdWxhcmlvRGVzdGlub307XHJcbiAgICAgICAgICAgIGlmKG11bHRpcGxlRm9ybXVsYXJpb3Mpe1xyXG4gICAgICAgICAgICAgICAgLy8gQHRzLWlnbm9yZSBmb3JQayB5IHN1cyBjb21wb25lbnRlc1xyXG4gICAgICAgICAgICAgICAgbnVldmFGb3JQa1tudWV2b0NhbXBvUGtdID0gZGVmQm90b24ubnVtXHJcbiAgICAgICAgICAgICAgICBpZihkZWZCb3Rvbi5lc0FncmVnYXIpe1xyXG4gICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoQnlQYXNzKGFjY2lvbl9hZ3JlZ2FyX2Zvcm11bGFyaW8se2ZvclBrOm51ZXZhRm9yUGt9KTtcclxuICAgICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoQnlQYXNzKGFjY2lvbl9hYnJpcl9mb3JtdWxhcmlvLHtmb3JQazpudWV2YUZvclBrfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZGlzcGF0Y2goZGlzcGF0Y2hlcnMuQ0FNQklBUl9GT1JNVUxBUklPKHtmb3JQazpudWV2YUZvclBrLCBhcGlsYXJWdWVsdGE6dHJ1ZX0pKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYoY29uZmlybWFyRm9yemFySXIpe3NldENvbmZpcm1hckZvcnphcklyKGZhbHNlKX1cclxuICAgIH07XHJcbiAgICByZXR1cm4gPERlc3BsZWdhckNhc2lsbGVybyBjYXNpbGxlcm89e2Nhc2lsbGVyb30+XHJcbiAgICAgICAgPGRpdiBpZD17aWRTZWNjaW9ufT5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8QnV0dG9uIGNsYXNzTmFtZT1cInNwZWNpYWwtYnV0dG9uXCIgaWQ9e2lkQnV0dG9ufVxyXG4gICAgICAgICAgICBvbkNsaWNrPXsoZXZlbnQpPT57XHJcbiAgICAgICAgICAgICAgICBpcihKU09OLnBhcnNlKChldmVudC50YXJnZXQhIGFzIHVua25vd24gYXMgSFRNTEJ1dHRvbkVsZW1lbnQpLmdldEF0dHJpYnV0ZSgnZGVmLWJ1dHRvbicpISkpXHJcbiAgICAgICAgICAgIH19XHJcbiAgICAgICAgPmlyIChpbnRlcm5vKTwvQnV0dG9uPlxyXG4gICAgICAgIDxEaWFsb2cgXHJcbiAgICAgICAgICAgIGNsYXNzTmFtZT1cIm51ZXN0cm8tZGlhbG9nb1wiXHJcbiAgICAgICAgICAgIG9wZW49eyEhY29uZmlybWFyRm9yemFySXJ9XHJcbiAgICAgICAgICAgIG9uQ2xvc2U9eygpPT5zZXRDb25maXJtYXJGb3J6YXJJcihudWxsKX1cclxuICAgICAgICA+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibnVlc3Ryby1kaWFsb2dvXCI+XHJcbiAgICAgICAgICAgICAgICA8VHlwb2dyYXBoeT5ObyBzZSBwdWVkZSBhdmFuemFyIGFsIHNpZ3VpZW50ZSBmb3JtdWxhcmlvLjwvVHlwb2dyYXBoeT5cclxuICAgICAgICAgICAgICAgIDxUeXBvZ3JhcGh5PlF1aXrDoXMgbm8gdGVybWluw7MgZGUgY29udGVzdGFyIGxhcyBwcmVndW50YXMgY29ycmVzcG9uZGllbnRlczwvVHlwb2dyYXBoeT5cclxuICAgICAgICAgICAgICAgIDxUeXBvZ3JhcGh5PlF1aXrDoXMgbm8gY29ycmVzcG9uZGUgZW4gYmFzZSBhIGxhcyByZXNwdWVzdGFzIG9idGVuaWRhczwvVHlwb2dyYXBoeT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxCdXR0b24gY29sb3I9XCJzZWNvbmRhcnlcIiBvbkNsaWNrPXsoKT0+Y29uZmlybWFyRm9yemFySXIgJiYgaXIoY29uZmlybWFyRm9yemFySXIpfT5mb3J6YXI8L0J1dHRvbj5cclxuICAgICAgICAgICAgPEJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiB2YXJpYW50PVwiY29udGFpbmVkXCIgb25DbGljaz17KCk9PnNldENvbmZpcm1hckZvcnphcklyKG51bGwpfT5FbnRlbmRpZG88L0J1dHRvbj5cclxuICAgICAgICA8L0RpYWxvZz5cclxuICAgIDwvRGVzcGxlZ2FyQ2FzaWxsZXJvPlxyXG59XHJcblxyXG5mdW5jdGlvbiBDYXNpbGxlcm9EZXNjb25vY2lkbyhwcm9wczp7Y2FzaWxsZXJvOkNhc2lsbGVyb0Jhc2UsIGZvclBrOkZvclBrfSl7XHJcbiAgICByZXR1cm4gPERlc3BsZWdhckNhc2lsbGVybyBcclxuICAgICAgICBpZD17YGNhc2lsbGVyb2Rlc2Nvbm9jaWRvLSR7cHJvcHMuY2FzaWxsZXJvLmlkX2Nhc2lsbGVyb31gfVxyXG4gICAgICAgIGNhc2lsbGVybz17cHJvcHMuY2FzaWxsZXJvIGFzIEJsb3F1ZX1cclxuICAgICAgICBzdHlsZT17e2Rpc3BsYXk6J25vbmUnfX1cclxuICAgID5cclxuICAgICAgICA8VHlwb2dyYXBoeT5UaXBvIGRlIGNhc2lsbGVybyBubyBpbXBsZW1lbnRhZG86IFwie3Byb3BzLmNhc2lsbGVyby50aXBvY31cIiBwYXJhIFwie3Byb3BzLmNhc2lsbGVyby5jYXNpbGxlcm99XCI8L1R5cG9ncmFwaHk+XHJcbiAgICAgICAgPEVuY2FiZXphZG9EZXNwbGllZ3VlIGNhc2lsbGVybz17cHJvcHMuY2FzaWxsZXJvIGFzIENhc2lsbGVyb0VuY2FiZXphYmxlfSBsZWVyPXtmYWxzZX0gZm9yUGs9e3Byb3BzLmZvclBrfS8+XHJcbiAgICA8L0Rlc3BsZWdhckNhc2lsbGVybz5cclxufVxyXG5cclxuZnVuY3Rpb24gdXNlU2VsZWN0b3JWaXZpZW5kYShmb3JQazpGb3JQayl7XHJcbiAgICByZXR1cm4gdXNlU2VsZWN0b3IoKHN0YXRlOkNhc29TdGF0ZSk9PntcclxuICAgICAgICB2YXIgZXN0cnVjdHVyYSA9IGdldEVzdHJ1Y3R1cmEoKTtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBmb3JtdWxhcmlvOiBlc3RydWN0dXJhLmZvcm11bGFyaW9zW2ZvclBrLmZvcm11bGFyaW9dLmNhc2lsbGVyb3MsXHJcbiAgICAgICAgICAgIG1vZG9EZXNwbGllZ3VlOiB0cnVlIHx8IHN0YXRlLm1vZG8uZGVtbz9zdGF0ZS5vcGNpb25lcy5tb2RvRGVzcGxpZWd1ZToncmVsZXZhbWllbnRvJyxcclxuICAgICAgICAgICAgbW9kbzogc3RhdGUubW9kbyxcclxuICAgICAgICAgICAgb3BjaW9uZXM6IHN0YXRlLm9wY2lvbmVzLFxyXG4gICAgICAgIH1cclxuICAgIH0pXHJcbn1cclxuXHJcbmZ1bmN0aW9uIENvbmp1bnRvUHJlZ3VudGFzRGVzcGxpZWd1ZShwcm9wczp7Y2FzaWxsZXJvOkNvbmp1bnRvUHJlZ3VudGFzLCBmb3JtdWxhcmlvOkZvcm11bGFyaW8sIGZvclBrOkZvclBrfSl7XHJcbiAgICBsZXQge2Nhc2lsbGVybywgZm9yUGt9ID0gcHJvcHM7XHJcbiAgICB2YXIgaWQgPSBgY29uanVudG8tcHJlZ3VudGFzLSR7Y2FzaWxsZXJvLmlkX2Nhc2lsbGVyb31gO1xyXG4gICAgcmVnaXN0cmFyRWxlbWVudG8oe1xyXG4gICAgICAgIGlkLCBcclxuICAgICAgICBkaXJlY3Q6dHJ1ZSwgXHJcbiAgICAgICAgZnVuOiByZWdpc3RyYWRvckRlVmFyaWFibGUoY2FzaWxsZXJvKVxyXG4gICAgfSlcclxuICAgIGxldCBtb2RvRGVzcGxpZWd1ZSA9IFwibm9ybWFsXCI7XHJcbiAgICBsZXQgaGFiaWxpdGFkbyA9IHRydWU7XHJcbiAgICByZXR1cm4gaGFiaWxpdGFkbyB8fCBtb2RvRGVzcGxpZWd1ZT09J21ldGFkYXRvcyc/PERlc3BsZWdhckNhc2lsbGVybyBpZD17aWR9IGNhc2lsbGVybz17Y2FzaWxsZXJvfT5cclxuICAgICAgICA8RW5jYWJlemFkb0Rlc3BsaWVndWUgY2FzaWxsZXJvPXtjYXNpbGxlcm99IGZvclBrPXtmb3JQa30gbGVlcj17Y2FzaWxsZXJvLmxlZXIhPT1mYWxzZX0vPlxyXG4gICAgICAgIDxEZXNwbGVnYXJDb250ZW5pZG9JbnRlcm5vQmxvcXVlT0Zvcm11bGFyaW8gYmxvcXVlT0Zvcm11bGFyaW89e2Nhc2lsbGVyb30gZm9ybXVsYXJpbz17cHJvcHMuZm9ybXVsYXJpb30gZm9yUGs9e2ZvclBrfSBtdWx0aXBsZT17ZmFsc2V9Lz5cclxuICAgIDwvRGVzcGxlZ2FyQ2FzaWxsZXJvPjpudWxsO1xyXG59XHJcblxyXG5mdW5jdGlvbiBEZXNwbGVnYXJDb250ZW5pZG9JbnRlcm5vQmxvcXVlT0Zvcm11bGFyaW8ocHJvcHM6e2Jsb3F1ZU9Gb3JtdWxhcmlvOkJsb3F1ZXxGb3JtdWxhcmlvfENvbmp1bnRvUHJlZ3VudGFzLCBmb3JtdWxhcmlvOkZvcm11bGFyaW8sIGZvclBrOkZvclBrLCBtdWx0aXBsZTpib29sZWFufSl7XHJcbiAgICB2YXIgcGFyY2lhbGl6YWJsZSA9IHByb3BzLmJsb3F1ZU9Gb3JtdWxhcmlvLnRpcG9jPT0nRic7XHJcbiAgICBjb25zdCBbdmVyVG9kbywgc2V0VmVyVG9kb10gPSB1c2VTdGF0ZSghcGFyY2lhbGl6YWJsZSk7XHJcbiAgICBjb25zdCBbZm9yUGtBY3R1YWwsIHNldEZvclBrQWN0dWFsXSA9IHVzZVN0YXRlPElkQ2FzaWxsZXJvfG51bGw+KG51bGwpO1xyXG4gICAgaWYocGFyY2lhbGl6YWJsZSl7XHJcbiAgICAgICAgaWYoZm9yUGtBY3R1YWwgIT0gcHJvcHMuYmxvcXVlT0Zvcm11bGFyaW8uY2FzaWxsZXJvKXtcclxuICAgICAgICAgICAgc2V0VmVyVG9kbyhmYWxzZSlcclxuICAgICAgICAgICAgc2V0Rm9yUGtBY3R1YWwocHJvcHMuYmxvcXVlT0Zvcm11bGFyaW8uY2FzaWxsZXJvKVxyXG4gICAgICAgIH1cclxuICAgICAgICB1c2VFZmZlY3QoKCk9PntcclxuICAgICAgICAgICAgdmFyIHRpbWVyID0gc2V0VGltZW91dCgoKT0+e1xyXG4gICAgICAgICAgICAgICAgc2V0VmVyVG9kbyh0cnVlKTtcclxuICAgICAgICAgICAgfSwyNTApXHJcbiAgICAgICAgICAgIHJldHVybiAoKT0+e1xyXG4gICAgICAgICAgICAgICAgaWYodGltZXIpe1xyXG4gICAgICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lcik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgfVxyXG4gICAgY29uc3QgbGltaXRlTm9WZXJUb2RvID0gMztcclxuICAgIHVzZUVmZmVjdCgoKT0+e1xyXG4gICAgICAgIGlmKHByb3BzLmJsb3F1ZU9Gb3JtdWxhcmlvLnRpcG9jPT0nRicpe1xyXG4gICAgICAgICAgICB2b2xjYWRvSW5pY2lhbEVsZW1lbnRvc1JlZ2lzdHJhZG9zKHByb3BzLmZvclBrKTtcclxuICAgICAgICB9XHJcbiAgICB9LFt0b1BsYWluRm9yUGsocHJvcHMuZm9yUGspLHZlclRvZG9dKVxyXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICBpZihwcm9wcy5ibG9xdWVPRm9ybXVsYXJpby50aXBvYz09J0YnICYmIHZlclRvZG8pe1xyXG4gICAgICAgICAgICB2YXIge3NpZ3VpZW50ZVZhcmlhYmxlLCB2YXJpYWJsZUFjdHVhbH0gPSBkaXNwYXRjaEJ5UGFzcyhhY2Npb25fcmVnaXN0cmFyX3Jlc3B1ZXN0YSwge3Jlc3B1ZXN0YTpudWxsLCB2YXJpYWJsZTpOT19DQU1CSUFSX19TT0xPX1RSQUVSX1NUQVRVUywgZm9yUGs6cHJvcHMuZm9yUGt9KTtcclxuICAgICAgICAgICAgaWYodmFyaWFibGVBY3R1YWwgfHwgc2lndWllbnRlVmFyaWFibGUpe1xyXG4gICAgICAgICAgICAgICAgZW5mb2NhckVsZW1lbnRvRGVWYXJpYWJsZShjb2FsZXNjZSh2YXJpYWJsZUFjdHVhbCBhcyBzdHJpbmd8bnVsbCxzaWd1aWVudGVWYXJpYWJsZSBhcyBzdHJpbmd8bnVsbCkgYXMgSWRWYXJpYWJsZSlcclxuICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICB2YXIgZmVlZGJhY2tSb3dWYWxpZGF0b3IgPSBnZXRGZWVkYmFja1Jvd1ZhbGlkYXRvcigpXHJcbiAgICAgICAgICAgICAgICBpZihmZWVkYmFja1Jvd1ZhbGlkYXRvclt0b1BsYWluRm9yUGsocHJvcHMuZm9yUGspXS5yZXN1bWVuPT0nb2snKXtcclxuICAgICAgICAgICAgICAgICAgICBzY3JvbGxUb1RvcCgpXHJcbiAgICAgICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgICAgICBzY3JvbGxUb1RvcCgpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9KTtcclxuICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT1cImNvbnRlbmlkb1wiPlxyXG4gICAgICAgIHt2ZXJUb2RvP251bGw6PGRpdiBzdHlsZT17e2hlaWdodDpcIjUwMHB4XCIsIHRleHRBbGlnbjonY2VudGVyJywgdmVydGljYWxBbGlnbjonbWlkZGxlJywgd2lkdGg6JzEwMCUnLCBwb3NpdGlvbjpcImZpeGVkXCIsIGJhY2tncm91bmRDb2xvcjogJ3JnYmEoMTAwLDEwMCwxMDAsMC4zKScsIGZvbnRTaXplOicyMDAlJ319ID5jYXJnYW5kby4uLjwvZGl2Pn1cclxuICAgICAgICB7cHJvcHMuYmxvcXVlT0Zvcm11bGFyaW8uY2FzaWxsZXJvcy5tYXAoKGNhc2lsbGVybywgaSk9PntcclxuICAgICAgICAgICAgdmFyIGtleSA9IGNhc2lsbGVyby50aXBvYysnLScrY2FzaWxsZXJvLmlkX2Nhc2lsbGVybysnLScraTtcclxuICAgICAgICAgICAgcmV0dXJuICh2ZXJUb2RvIHx8IGkgPCBsaW1pdGVOb1ZlclRvZG8/XHJcbiAgICAgICAgICAgICAgICAoXHJcbiAgICAgICAgICAgICAgICAgICAgY2FzaWxsZXJvLnRpcG9jID09IFwiUFwiPzxQcmVndW50YURlc3BsaWVndWUga2V5PXtrZXl9IHByZWd1bnRhPXtjYXNpbGxlcm99IGZvclBrPXtwcm9wcy5mb3JQa30gZGVzcGxpZWd1ZUVuY2FiZXphZG89e2Nhc2lsbGVyby5kZXNwbGllZ3VlRW5jYWJlemFkbz8/KHByb3BzLmJsb3F1ZU9Gb3JtdWxhcmlvLnRpcG9jPT0nQ1AnPydsYXRlcmFsJzonc3VwZXJpb3InKX0vPjpcclxuICAgICAgICAgICAgICAgICAgICBjYXNpbGxlcm8udGlwb2MgPT0gXCJCXCI/PEJsb3F1ZURlc3BsaWVndWUga2V5PXtrZXl9IGJsb3F1ZT17Y2FzaWxsZXJvfSBmb3JtdWxhcmlvPXtwcm9wcy5mb3JtdWxhcmlvfSBmb3JQaz17cHJvcHMuZm9yUGt9Lz46XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzaWxsZXJvLnRpcG9jID09IFwiRklMVFJPXCI/PEZpbHRyb0Rlc3BsaWVndWUga2V5PXtrZXl9IGZpbHRybz17Y2FzaWxsZXJvfSBmb3JQaz17cHJvcHMuZm9yUGt9Lz46XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzaWxsZXJvLnRpcG9jID09IFwiQkZcIj88Qm90b25Gb3JtdWxhcmlvRGVzcGxpZWd1ZSBrZXk9e2tleX0gY2FzaWxsZXJvPXtjYXNpbGxlcm99IGZvcm11bGFyaW89e3Byb3BzLmZvcm11bGFyaW99IGZvclBrPXtwcm9wcy5mb3JQa30vPjpcclxuICAgICAgICAgICAgICAgICAgICBjYXNpbGxlcm8udGlwb2MgPT0gXCJDT05TXCI/PENvbnNpc3RlbmNpYURlc3BsaWVndWUga2V5PXtrZXl9IGNhc2lsbGVybz17Y2FzaWxsZXJvfSBmb3JQaz17cHJvcHMuZm9yUGt9Lz46XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzaWxsZXJvLnRpcG9jID09IFwiQ1BcIj88Q29uanVudG9QcmVndW50YXNEZXNwbGllZ3VlIGtleT17a2V5fSBjYXNpbGxlcm89e2Nhc2lsbGVyb30gZm9ybXVsYXJpbz17cHJvcHMuZm9ybXVsYXJpb30gZm9yUGs9e3Byb3BzLmZvclBrfS8+OlxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2lsbGVyby50aXBvYyA9PSBcIlRFWFRPXCI/PFRleHRvRGVzcGxpZWd1ZSBrZXk9e2tleX0gY2FzaWxsZXJvPXtjYXNpbGxlcm99IGZvclBrPXtwcm9wcy5mb3JQa30vPjpcclxuICAgICAgICAgICAgICAgICAgICBjYXNpbGxlcm8udGlwb2MgPT0gXCJMSUJSRVwiPzxMaWJyZURlc3BsaWVndWUga2V5PXtrZXl9IGNhc2lsbGVybz17Y2FzaWxsZXJvfSBmb3JtdWxhcmlvPXtwcm9wcy5mb3JtdWxhcmlvfSBmb3JQaz17cHJvcHMuZm9yUGt9Lz46XHJcbiAgICAgICAgICAgICAgICAgICAgPENhc2lsbGVyb0Rlc2Nvbm9jaWRvIGtleT17a2V5fSBjYXNpbGxlcm89e2Nhc2lsbGVyb30gZm9yUGs9e3Byb3BzLmZvclBrfS8+XHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgIDppPT1saW1pdGVOb1ZlclRvZG8/XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGtleT0nJHNwaW5uZXInIGNsYXNzTmFtZT1cInNwaW5uZXItYm9yZGVyXCIgcm9sZT1cInN0YXR1c1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuPmNhcmdhbmRvIGJsb3F1ZS4uLjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA6bnVsbFxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgfSlcclxuICAgIH08L2Rpdj5cclxufVxyXG5cclxuZnVuY3Rpb24gQmxvcXVlRGVzcGxpZWd1ZShwcm9wczp7YmxvcXVlOkJsb3F1ZSwgZm9ybXVsYXJpbzpGb3JtdWxhcmlvLCBmb3JQazpGb3JQa30pe1xyXG4gICAgdmFyIHtibG9xdWUsIGZvclBrfSA9IHByb3BzO1xyXG4gICAgdmFyIGtleT1ibG9xdWUudmVyX2lkIT0nLScgJiYgYmxvcXVlLnZlcl9pZCB8fCBibG9xdWUuY2FzaWxsZXJvO1xyXG4gICAgdmFyIGFjdGl2ZVN0ZXA9MDtcclxuICAgIHZhciBtdWx0aXBsZSA9ICEhYmxvcXVlLnVuaWRhZF9hbmFsaXNpcztcclxuICAgIHZhciBsaXN0YSA9IFt7Zm9yUGssIGtleTowLCBtdWx0aXBsZTpmYWxzZX1dO1xyXG4gICAgdmFyIGhhYmlsaXRhZG9yID0gYmxvcXVlLmV4cHJlc2lvbl9oYWJpbGl0YXJfanM/Z2V0RnVuY2lvbkhhYmlsaXRhcihibG9xdWUuZXhwcmVzaW9uX2hhYmlsaXRhcl9qcyk6KCk9PnRydWU7XHJcbiAgICB2YXIge21vZG9EZXNwbGllZ3VlfSA9IHVzZVNlbGVjdG9yVml2aWVuZGEoZm9yUGspO1xyXG4gICAgaWYobXVsdGlwbGUpe1xyXG4gICAgICAgIC8vIFRPRE86IEdFTkVSQUxJWkFSXHJcbiAgICAgICAgLy8gQHRzLWlnbm9yZSBcclxuICAgICAgICAvLyBsaXN0YT1yZXNwdWVzdGFzLnBlcnNvbmFzLm1hcCgoX3BlcnNvbmEsIGkpPT4oXHJcbiAgICAgICAgLy8gICAgIHtmb3JQazp7Li4uZm9yUGssIHBlcnNvbmE6aSsxfSwga2V5OmkrMSwgbXVsdGlwbGU6dHJ1ZX1cclxuICAgICAgICAvLyApKVxyXG4gICAgfVxyXG4gICAgdmFyIGlkID0gYGJsb3F1ZS0ke2Jsb3F1ZS5pZF9jYXNpbGxlcm99YDtcclxuICAgIHJlZ2lzdHJhckVsZW1lbnRvKHtcclxuICAgICAgICBpZCxcclxuICAgICAgICBzdHlsZTonZGlzcGxheScsXHJcbiAgICAgICAgZnVuOiAocmVzcHVlc3RhczpSZXNwdWVzdGFzKT0+IGhhYmlsaXRhZG9yKHJlc3B1ZXN0YXMpIHx8IG1vZG9EZXNwbGllZ3VlPT0nbWV0YWRhdG9zJz8ndW5zZXQnOidub25lJ1xyXG4gICAgfSlcclxuICAgIHJldHVybiA8RGVzcGxlZ2FyQ2FzaWxsZXJvIGNhc2lsbGVybz17YmxvcXVlfSBudWVzdHJvLWJsb3F1ZT17YmxvcXVlLmlkX2Nhc2lsbGVyb30gZXMtbXVsdGlwbGU9e211bHRpcGxlPydTSSc6J05PJ30gaWQ9e2lkfT5cclxuICAgICAgICA8RW5jYWJlemFkb0Rlc3BsaWVndWUgY2FzaWxsZXJvPXtibG9xdWV9IGZvclBrPXtmb3JQa30vPlxyXG4gICAgICAgIHtsaXN0YS5tYXAoKHtrZXksIGZvclBrLCBtdWx0aXBsZX0pPT5cclxuICAgICAgICAgICAgPERlc3BsZWdhckNvbnRlbmlkb0ludGVybm9CbG9xdWVPRm9ybXVsYXJpbyBrZXk9e2tleX0gYmxvcXVlT0Zvcm11bGFyaW89e2Jsb3F1ZX0gZm9ybXVsYXJpbz17cHJvcHMuZm9ybXVsYXJpb30gZm9yUGs9e2ZvclBrfSBtdWx0aXBsZT17bXVsdGlwbGV9Lz5cclxuICAgICAgICApfVxyXG4gICAgPC9EZXNwbGVnYXJDYXNpbGxlcm8+O1xyXG59XHJcblxyXG5jb25zdCBGb3JtdWxhcmlvRW5jYWJlemFkbyA9IERlc3BsaWVndWVFbmNhYmV6YWRvO1xyXG5cclxuZnVuY3Rpb24gTWVudUxldHJhKHByb3BzOnt0YW1hbm5pbzpudW1iZXIsIGRlbm9taW5hY2lvbjpzdHJpbmd9KXtcclxuICAgIGNvbnN0IGNhbWJpYXJMZXRyYSA9ICh0YW1hbm5pbzpudW1iZXIpPT57XHJcbiAgICAgICAgdmFyIHJvb3QgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XHJcbiAgICAgICAgcm9vdC5zdHlsZS5mb250U2l6ZT10YW1hbm5pbytcInB4XCI7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gPE1lbnVJdGVtXHJcbiAgICAgICAgb25DbGljaz17KCk9PmNhbWJpYXJMZXRyYShwcm9wcy50YW1hbm5pbyl9IHN0eWxlPXt7Zm9udFNpemU6cHJvcHMudGFtYW5uaW8rJ3B4J319XHJcbiAgICA+bGV0cmEge3Byb3BzLmRlbm9taW5hY2lvbn08L01lbnVJdGVtPlxyXG59XHJcblxyXG5mdW5jdGlvbiBGYXN0U2V0dHVwKCl7XHJcbiAgICBjb25zdCBbYW5jaG9yRWwsIHNldEFuY2hvckVsXSA9IFJlYWN0LnVzZVN0YXRlKG51bGwpO1xyXG4gICAgY29uc3QgW29wZW4sIHNldE9wZW5dID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgaGFuZGxlQ2xpY2sgPSAoZXZlbnQ6YW55KSA9PiB7XHJcbiAgICAgICAgc2V0QW5jaG9yRWwoZXZlbnQuY3VycmVudFRhcmdldCk7XHJcbiAgICAgICAgc2V0T3BlbigocHJldikgPT4gIXByZXYpO1xyXG4gICAgfTtcclxuICAgIGNvbnN0IGRpc3BhdGNoID0gdXNlRGlzcGF0Y2goKTtcclxuICAgIGNvbnN0IGNhbWJpYXIgPSAobW9kb0Rlc3BsaWVndWU6TW9kb0Rlc3BsaWVndWUpPT57XHJcbiAgICAgICAgZGlzcGF0Y2goZGlzcGF0Y2hlcnMuTU9ET19ERVNQTElFR1VFKHttb2RvRGVzcGxpZWd1ZX0pKTtcclxuICAgICAgICBzZXRPcGVuKGZhbHNlKVxyXG4gICAgfVxyXG4gICAgY29uc3Qgb3BjaW9uZXMgPSB1c2VTZWxlY3Rvcigoc3RhdGU6Q2Fzb1N0YXRlKT0+c3RhdGUub3BjaW9uZXMpXHJcbiAgICByZXR1cm4gPD5cclxuICAgICAgICA8QnV0dG9uIG9uQ2xpY2s9e2hhbmRsZUNsaWNrfT5cclxuICAgICAgICAgICAgPElDT04uU2V0dGluZ3MvPlxyXG4gICAgICAgIDwvQnV0dG9uPlxyXG4gICAgICAgIDxNZW51IG9wZW49e29wZW59IGFuY2hvckVsPXthbmNob3JFbH0gb25DbG9zZT17KCk9PnNldE9wZW4oZmFsc2UpfT5cclxuICAgICAgICAgICAgPE1lbnVJdGVtIG9uQ2xpY2s9eygpPT5jYW1iaWFyKFwicmVsZXZhbWllbnRvXCIpfT5ub3JtYWw8L01lbnVJdGVtPlxyXG4gICAgICAgICAgICA8TWVudUl0ZW0gb25DbGljaz17KCk9PmNhbWJpYXIoXCJQREZcIiAgICAgICAgICl9PlBERiBwYXJhIHJlbGV2YW1pZW50bzwvTWVudUl0ZW0+XHJcbiAgICAgICAgICAgIDxNZW51SXRlbSBvbkNsaWNrPXsoKT0+Y2FtYmlhcihcIm1ldGFkYXRvc1wiICAgKX0+cmV2aXNhciBtZXRhZGF0b3M8L01lbnVJdGVtPlxyXG4gICAgICAgICAgICA8RGl2aWRlci8+XHJcbiAgICAgICAgICAgIDxNZW51TGV0cmEgdGFtYW5uaW89ezEyfSBkZW5vbWluYWNpb24gPSBcIm11eSBjaGljYVwiLz5cclxuICAgICAgICAgICAgPE1lbnVMZXRyYSB0YW1hbm5pbz17MTR9IGRlbm9taW5hY2lvbiA9IFwiY2hpY2FcIi8+XHJcbiAgICAgICAgICAgIDxNZW51TGV0cmEgdGFtYW5uaW89ezE2fSBkZW5vbWluYWNpb24gPSBcIm5vcm1hbFwiLz5cclxuICAgICAgICAgICAgPE1lbnVMZXRyYSB0YW1hbm5pbz17MTl9IGRlbm9taW5hY2lvbiA9IFwiZ3JhbmRlXCIvPlxyXG4gICAgICAgICAgICA8TWVudUxldHJhIHRhbWFubmlvPXsyMn0gZGVub21pbmFjaW9uID0gXCJlbm9ybWVcIi8+XHJcbiAgICAgICAgICAgIDxEaXZpZGVyLz5cclxuICAgICAgICAgICAgPE1lbnVJdGVtPjxsYWJlbD48Q2hlY2tib3ggY2hlY2tlZD17b3BjaW9uZXMuY29uQ2FtcG9PcGNpb25lc30gb25DaGFuZ2U9e1xyXG4gICAgICAgICAgICAgICAgKCk9PmRpc3BhdGNoKGRpc3BhdGNoZXJzLlNFVF9PUENJT04oe29wY2lvbjonY29uQ2FtcG9PcGNpb25lcycsIHZhbG9yOiFvcGNpb25lcy5jb25DYW1wb09wY2lvbmVzfSkpXHJcbiAgICAgICAgICAgIH0gaW5wdXRQcm9wcz17eyAnYXJpYS1sYWJlbCc6ICdwcmltYXJ5IGNoZWNrYm94JyB9fS8+Y2FtcG8gb3BjaW9uZXM8L2xhYmVsPjwvTWVudUl0ZW0+XHJcbiAgICAgICAgICAgIDxNZW51SXRlbT48bGFiZWw+PENoZWNrYm94IGNoZWNrZWQ9e29wY2lvbmVzLnNhbHRvQXV0b21hdGljb30gb25DaGFuZ2U9e1xyXG4gICAgICAgICAgICAgICAgKCk9PmRpc3BhdGNoKGRpc3BhdGNoZXJzLlNFVF9PUENJT04oe29wY2lvbjonc2FsdG9BdXRvbWF0aWNvJywgdmFsb3I6IW9wY2lvbmVzLnNhbHRvQXV0b21hdGljb30pKVxyXG4gICAgICAgICAgICB9IGlucHV0UHJvcHM9e3sgJ2FyaWEtbGFiZWwnOiAncHJpbWFyeSBjaGVja2JveCcgfX0vPnNhbHRvIGF1dG9tw6F0aWNvPC9sYWJlbD48L01lbnVJdGVtPlxyXG4gICAgICAgIDwvTWVudT5cclxuICAgIDwvPjtcclxufVxyXG5cclxuZnVuY3Rpb24gQmFycmFEZU5hdmVnYWNpb24ocHJvcHM6e2ZvclBrOkZvclBrLCBzb2xvTGVjdHVyYTpib29sZWFuLCBtb2RvRGlyZWN0bzpib29sZWFufSl7XHJcbiAgICBjb25zdCBkaXNwYXRjaCA9IHVzZURpc3BhdGNoKCk7XHJcbiAgICBjb25zdCBmb3JQayA9IHByb3BzLmZvclBrO1xyXG4gICAgY29uc3Qge29wY2lvbmVzfSA9IHVzZVNlbGVjdG9yVml2aWVuZGEoZm9yUGspO1xyXG4gICAgY29uc3QgW2NvbmZpcm1hQ2VycmFyLCBzZXRDb25maXJtYUNlcnJhcl0gPSB1c2VTdGF0ZTxib29sZWFufG51bGw+KGZhbHNlKTtcclxuICAgIHZhciBlc3RydWN0dXJhID0gZ2V0RXN0cnVjdHVyYSgpO1xyXG4gICAgdmFyIGRvbWluaW8gPSBnZXREYXRvc0J5UGFzcygpLmluZm9ybWFjaW9uSGRyW2ZvclBrW2VzdHJ1Y3R1cmEubWFpblREUEtdXS50ZW0uZG9taW5pbztcclxuICAgIHZhciBjZXJyYXJEaXJlY3RvID0gYXN5bmMgZnVuY3Rpb24oKXtcclxuICAgICAgICByZW1vdmVDU1NCeUlkKEJPT1RTVFJBUF81XzFfM19TUkMpO1xyXG4gICAgICAgIGdvdG9Db25zaXN0aXIoXHJcbiAgICAgICAgICAgIGVzdHJ1Y3R1cmEub3BlcmF0aXZvIGFzIElkT3BlcmF0aXZvLFxyXG4gICAgICAgICAgICBnZXREYXRvc0J5UGFzcygpLmluZm9ybWFjaW9uSGRyW2ZvclBrW2VzdHJ1Y3R1cmEubWFpblREUEtdXS50YXJlYS50YXJlYSxcclxuICAgICAgICAgICAgZm9yUGtbZXN0cnVjdHVyYS5tYWluVERQS11cclxuICAgICAgICApO1xyXG4gICAgICAgIC8vdmFyIGhhc2g9bmV3IFVSTFNlYXJjaFBhcmFtcyhsb2NhdGlvbi5oYXNoPy5yZXBsYWNlKC9eXFwjLywnJykuc3BsaXQoJyZhdXRvcHJvY2VkJylbMF0pO1xyXG4gICAgICAgIC8vLy9oYXNoLmRlbGV0ZSgnYXV0b3Byb2NlZCcpXHJcbiAgICAgICAgLy9jbG9zZSgpO1xyXG4gICAgICAgIC8vbG9jYXRpb24uaGFzaD1oYXNoLnRvU3RyaW5nKCk7XHJcbiAgICB9XHJcbiAgICB2YXIgYm90b25lc0Zvcm11bGFyaW89W107XHJcbiAgICBpZighb3BjaW9uZXMubW9kb0RpcmVjdG8pe1xyXG4gICAgICAgIGJvdG9uZXNGb3JtdWxhcmlvLnB1c2goe3F1ZTogJ2hkcicgICAgLCBhYnI6J0hkUicsIGlkOklEX0JPVE9OX1ZPTFZFUl9IRFIsIGxhYmVsOidob2phIGRlIHJ1dGEnLCByZXRyb2Nlc286MH0pXHJcbiAgICB9XHJcbiAgICBvcGNpb25lcy5waWxhRm9yUGsuZm9yRWFjaCgoZm9yUGssaSk9PlxyXG4gICAgICAgIGJvdG9uZXNGb3JtdWxhcmlvLnB1c2goe3F1ZTondm9sdmVyJywgYWJyOmZvclBrLmZvcm11bGFyaW8ucmVwbGFjZSgvXkY6LywnJyksIGxhYmVsOmZvclBrLmZvcm11bGFyaW8sIHJldHJvY2VzbzpvcGNpb25lcy5waWxhRm9yUGsubGVuZ3RoLWl9KVxyXG4gICAgKVxyXG4gICAgYm90b25lc0Zvcm11bGFyaW8ucHVzaCh7cXVlOicnLCBhYnI6Zm9yUGsuZm9ybXVsYXJpby5yZXBsYWNlKC9eRjovLCcnKSwgbGFiZWw6Zm9yUGsuZm9ybXVsYXJpbywgcmV0cm9jZXNvOjB9KTtcclxuICAgIHJlZ2lzdHJhckVsZW1lbnRvKHtpZDpwcm9wcy5tb2RvRGlyZWN0bz9JRF9CT1RPTl9DRVJSQVI6SURfQk9UT05fVk9MVkVSX0hEUiwgZGlyZWN0OnRydWUsXHJcbiAgICAgICAgZnVuOihcclxuICAgICAgICAgICAgcjpSZXNwdWVzdGFzLCBcclxuICAgICAgICAgICAgX2ZlZWRiYWNrRm9ybTogRm9ybVN0cnVjdHVyZVN0YXRlPElkVmFyaWFibGUsIFZhbG9yLCBJZEZpbj4sIFxyXG4gICAgICAgICAgICBlbGVtZW50bzpIVE1MRGl2RWxlbWVudCwgXHJcbiAgICAgICAgICAgIGZlZWRiYWNrQWxsOntbZm9ybXVsYXJpbyBpbiBQbGFpbkZvclBrXTpGb3JtU3RydWN0dXJlU3RhdGU8SWRWYXJpYWJsZSwgVmFsb3IsIElkRmluPn0sIFxyXG4gICAgICAgICAgICBfZXN0cnVjdHVyYTpFc3RydWN0dXJhXHJcbiAgICAgICAgKT0+e1xyXG4gICAgICAgICAgICBlbGVtZW50by5zZXRBdHRyaWJ1dGUoJ3Jlc3VtZW4tZXN0YWRvJyxjYWxjdWxhclJlc3VtZW5WaXZpZW5kYShmb3JQaywgZmVlZGJhY2tBbGwsIHIpLnJlc3VtZW5Fc3RhZG8pO1xyXG4gICAgICAgIH1cclxuICAgIH0pXHJcbiAgICByZXR1cm4gPD5cclxuICAgICAgICA8QnV0dG9uR3JvdXAga2V5PVwiZm9ybXVsYXJpb3NcIiBjbGFzc05hbWU9XCJiYXJyYS1uYXZlZ2FjaW9uXCIgc29sby1sZWN0dXJhPXtwcm9wcy5zb2xvTGVjdHVyYT8nc2knOidubyd9ID5cclxuICAgICAgICAgICAge2JvdG9uZXNGb3JtdWxhcmlvLm1hcCgoYixpKT0+XHJcbiAgICAgICAgICAgICAgICA8QnV0dG9uIGNvbG9yPXtiLnF1ZT09Zm9yUGsuZm9ybXVsYXJpbz9cInByaW1hcnlcIjpcImluaGVyaXRcIn0gdmFyaWFudD1cIm91dGxpbmVkXCJcclxuICAgICAgICAgICAgICAgICAgICBpZD17Yi5pZH1cclxuICAgICAgICAgICAgICAgICAgICBrZXk9e2Ake2l9LSR7Yi5xdWV9LSR7Yi5yZXRyb2Nlc299YH1cclxuICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17IWIucXVlfVxyXG4gICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpPT57XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYi5xdWU9PSdoZHInP2Rpc3BhdGNoZXJzLlZPTFZFUl9IRFIoe30pOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2hlcnMuVk9MVkVSX0RFX0ZPUk1VTEFSSU8oe21hZ25pdHVkUmV0cm9jZXNvOmIucmV0cm9jZXNvfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYi5xdWU9PSdoZHInP251bGw6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwYXRjaEJ5UGFzcyhhY2Npb25fYWJyaXJfZm9ybXVsYXJpbyx7Zm9yUGs6b3BjaW9uZXMucGlsYUZvclBrW29wY2lvbmVzLnBpbGFGb3JQay5sZW5ndGgtYi5yZXRyb2Nlc29dfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJhYnJcIj57Yi5hYnJ9PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImxhYmVsXCI+e2IubGFiZWx9PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9CdXR0b24+XHJcbiAgICAgICAgICAgICl9XHJcbiAgICAgICAgPC9CdXR0b25Hcm91cD5cclxuICAgICAgICB7cHJvcHMuc29sb0xlY3R1cmE/PFR5cG9ncmFwaHkgY29tcG9uZW50PVwic3BhblwiIHN0eWxlPXt7bWFyZ2luOicwIDEwcHgnfX0+IChTb2xvIExlY3R1cmEpIDwvVHlwb2dyYXBoeT46bnVsbH1cclxuICAgICAgICB7cHJvcHMubW9kb0RpcmVjdG8/XHJcbiAgICAgICAgICAgIDw+XHJcbiAgICAgICAgICAgICAgICA8QnV0dG9uR3JvdXAga2V5PVwidm9sdmVyX3lfZ3JhYmFyXCIgc3R5bGU9e3ttYXJnaW46JzAgMCAwIDMwcHgnfX0+XHJcbiAgICAgICAgICAgICAgICAgICAgPEJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZD17SURfQk9UT05fQ0VSUkFSfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xvcj1cImluaGVyaXRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50PVwib3V0bGluZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXthc3luYyAoKT0+e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYocHJvcHMuc29sb0xlY3R1cmEgfHwgIWdldERpcnR5KCkpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlcnJhckRpcmVjdG8oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldENvbmZpcm1hQ2VycmFyKHRydWUpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8SUNPTi5FeGl0VG9BcHAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxEaWFsb2dcclxuICAgICAgICAgICAgICAgICAgICAgICAgb3Blbj17ISFjb25maXJtYUNlcnJhcn1cclxuICAgICAgICAgICAgICAgICAgICAgICAgLy9oYWNlIHF1ZSBubyBzZSBjaWVycmUgZWwgbWVuc2FqZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNsb3NlPXsoKT0+c2V0Q29uZmlybWFDZXJyYXIoZmFsc2UpfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhcmlhLWxhYmVsbGVkYnk9XCJhbGVydC1kaWFsb2ctdGl0bGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhcmlhLWRlc2NyaWJlZGJ5PVwiYWxlcnQtZGlhbG9nLWRlc2NyaXB0aW9uXCJcclxuICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxEaWFsb2dUaXRsZSBpZD1cImFsZXJ0LWRpYWxvZy10aXRsZVwiPkNvbmZpcm1lIGNpZXJyZSBkZSBlbmN1ZXN0YTwvRGlhbG9nVGl0bGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxEaWFsb2dDb250ZW50PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPERpYWxvZ0NvbnRlbnRUZXh0IGlkPVwiYWxlcnQtZGlhbG9nLWRlc2NyaXB0aW9uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRXN0w6EgcG9yIHNhbGlyIGRlIGxhIGVuY3Vlc3RhLCBzZSBwZXJkZXLDoW4gbG9zIGNhbWJpb3Mgbm8gZ3VhcmRhZG9zLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9EaWFsb2dDb250ZW50VGV4dD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9EaWFsb2dDb250ZW50PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8RGlhbG9nQWN0aW9ucz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxCdXR0b24gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCk9PntcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VycmFyRGlyZWN0bygpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX0gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I9XCJzZWNvbmRhcnlcIiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50PVwib3V0bGluZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NhcnRhciBjYW1iaW9zIHkgY2VycmFyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxCdXR0b24gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCk9PntcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0Q29uZmlybWFDZXJyYXIoZmFsc2UpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX0gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudD1cImNvbnRhaW5lZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWFyIGVkaXRhbmRvIGVuY3Vlc3RhXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L0RpYWxvZ0FjdGlvbnM+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9EaWFsb2c+XHJcbiAgICAgICAgICAgICAgICAgICAge3Byb3BzLnNvbG9MZWN0dXJhP251bGw6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxCdXR0b25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPXtcInNhdmUtYnV0dG9uXCJ9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcj1cImluaGVyaXRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudD1cIm91dGxpbmVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXt0cnVlfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17YXN5bmMgKCk9PnRydWV9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJQ09OLlNhdmUvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L0J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICA8L0J1dHRvbkdyb3VwPlxyXG4gICAgICAgICAgICA8Lz5cclxuICAgICAgICA6bnVsbH1cclxuICAgICAgICA8VHlwb2dyYXBoeSBjbGFzc05hbWU9XCJtb3N0cmFyLWZvclBrXCIgY29tcG9uZW50PVwic3BhblwiIHN0eWxlPXt7bWFyZ2luOicwIDEwcHgnfX0+IFxyXG4gICAgICAgICAgICB7VkVSX0RPTUlOSU8/PGRpdiBrZXk9e2RvbWluaW99PjxzcGFuPmRvbWluaW88L3NwYW4+PHNwYW4+e2RvbWluaW99PC9zcGFuPjwvZGl2PjonJ31cclxuICAgICAgICAgICAge2xpa2VBcihwcm9wcy5mb3JQaykuZmlsdGVyKChfLGspPT5rIT0nZm9ybXVsYXJpbycpLm1hcCgodixrKT0+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGtleT17a30+PHNwYW4+e2t9PC9zcGFuPjxzcGFuPnt2fTwvc3Bhbj48L2Rpdj5cclxuICAgICAgICAgICAgKS5hcnJheSgpfSBcclxuICAgICAgICA8L1R5cG9ncmFwaHk+XHJcbiAgICAgICAgPEZhc3RTZXR0dXAvPlxyXG4gICAgPC8+XHJcbn1cclxuXHJcbmZ1bmN0aW9uIEJvdG9uVm9sdmVyRW5EaXYoe2lkfTp7aWQ6c3RyaW5nfSl7XHJcbiAgICB2YXIge29wY2lvbmVzfSA9IHVzZVNlbGVjdG9yKChzdGF0ZTpDYXNvU3RhdGUpPT4oe29wY2lvbmVzOnN0YXRlLm9wY2lvbmVzfSkpO1xyXG4gICAgY29uc3QgZGlzcGF0Y2ggPSB1c2VEaXNwYXRjaCgpO1xyXG4gICAgdmFyIGVzVm9sdmVyID0gb3BjaW9uZXMucGlsYUZvclBrLmxlbmd0aD4wO1xyXG4gICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPVwiZGl2LWJvdG9uLXZvbHZlclwiPlxyXG4gICAgICAgIDxCdXR0b24gaWQ9e2lkfSBjbGFzc05hbWU9XCJib3Rvbi12b2x2ZXJcIlxyXG4gICAgICAgICAgICBvbkNsaWNrPXsoKT0+e1xyXG4gICAgICAgICAgICAgICAgaWYgKGVzVm9sdmVyKSB7IFxyXG4gICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoQnlQYXNzKGFjY2lvbl9hYnJpcl9mb3JtdWxhcmlvLHtmb3JQazpvcGNpb25lcy5waWxhRm9yUGtbb3BjaW9uZXMucGlsYUZvclBrLmxlbmd0aC0xXX0pO1xyXG4gICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoKGRpc3BhdGNoZXJzLlZPTFZFUl9ERV9GT1JNVUxBUklPKHttYWduaXR1ZFJldHJvY2VzbzoxfSkpXHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBib3RvbkNlcnJhciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKElEX0JPVE9OX0NFUlJBUikgfHwgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoSURfQk9UT05fVk9MVkVSX0hEUikgXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGJvdG9uQ2VycmFyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvdG9uQ2VycmFyLmNsaWNrKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9fVxyXG4gICAgICAgID4gPElDT04uQ2hldnJvbkxlZnQvPntlc1ZvbHZlciA/IFwiIFZvbHZlclwiIDogXCIgQ2VycmFyXCJ9PC9CdXR0b24+XHJcbiAgICA8L2Rpdj5cclxufVxyXG5cclxuZnVuY3Rpb24gRm9ybXVsYXJpb0Rlc3BsaWVndWUocHJvcHM6e2ZvclBrOkZvclBrfSl7XHJcbiAgICB2YXIgZm9yUGsgPSBwcm9wcy5mb3JQaztcclxuICAgIHZhciB7Zm9ybXVsYXJpbywgbW9kb0Rlc3BsaWVndWUsIG1vZG8sIG9wY2lvbmVzfSBcclxuICAgICAgICA9IHVzZVNlbGVjdG9yVml2aWVuZGEocHJvcHMuZm9yUGspO1xyXG4gICAgdmFyIHNvbG9MZWN0dXJhID0gZ2V0RGF0b3NCeVBhc3MoKS5zb2xvTGVjdHVyYTtcclxuICAgIGNvbnN0IGRpc3BhdGNoID0gdXNlRGlzcGF0Y2goKTtcclxuICAgIHZhciBlc1ZvbHZlciA9IG9wY2lvbmVzLnBpbGFGb3JQay5sZW5ndGg+MDtcclxuICAgIHVzZUVmZmVjdCgoKT0+e1xyXG4gICAgICAgIHZhciBjb250cm9sU2Nyb2xsPSgpPT57XHJcbiAgICAgICAgICAgIHZhciBhcnJpYmEgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZmFiLWFjdGl2by1hcnJpYmEnKTtcclxuICAgICAgICAgICAgaWYoYXJyaWJhKXtcclxuICAgICAgICAgICAgICAgIHNldFZhbG9yRGlzdGludG8oYXJyaWJhLnN0eWxlLCAndmlzaWJpbGl0eScsXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxyXG4gICAgICAgICAgICAgICAgICAgIGFycmliYS5lbFRvcFZpc2liaWxpemFyICE9bnVsbCAmJiBhcnJpYmEuZWxUb3BWaXNpYmlsaXphciArIDEwIFxyXG4gICAgICAgICAgICAgICAgICAgIDwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcCA/ICd2aXNpYmxlJyA6ICdoaWRkZW4nXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciBhYmFqbyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmYWItYWN0aXZvLWFiYWpvJyk7XHJcbiAgICAgICAgICAgIGlmKGFiYWpvKXtcclxuICAgICAgICAgICAgICAgIHNldFZhbG9yRGlzdGludG8oYWJham8uc3R5bGUsICd2aXNpYmlsaXR5JywgXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxyXG4gICAgICAgICAgICAgICAgICAgIGFiYWpvLmVsQm90dG9tVmlzaWJpbGl6YXIgIT0gbnVsbCAmJiBhYmFqby5lbEJvdHRvbVZpc2liaWxpemFyIC0gMjBcclxuICAgICAgICAgICAgICAgICAgICA+IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3AgKyB3aW5kb3cuaW5uZXJIZWlnaHQgKiAwLjcgPyAndmlzaWJsZScgOiAnaGlkZGVuJ1xyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgY29udHJvbFNjcm9sbCk7XHJcbiAgICAgICAgY29udHJvbFNjcm9sbCgpO1xyXG4gICAgICAgIHJldHVybiAoKT0+e1xyXG4gICAgICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgY29udHJvbFNjcm9sbCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSlcclxuICAgIC8vIFRPRE8gVm9sdmVyIGEgcG9uZXIgZWwgbW92aW1pZW50byBhIGxhIGFjdHVhbFxyXG4gICAgdmFyIGFjdHVhbDphbnlcclxuICAgIHZhciBjb21wbGV0bzphbnlcclxuICAgIHZhciBvbkNsaWNrU2FsdGFyQWN0dWFsID0gKCk9PntcclxuICAgICAgICB2YXIge3ZhcmlhYmxlQWN0dWFsfSA9IGRpc3BhdGNoQnlQYXNzKGFjY2lvbl9yZWdpc3RyYXJfcmVzcHVlc3RhLCB7cmVzcHVlc3RhOm51bGwsIHZhcmlhYmxlOk5PX0NBTUJJQVJfX1NPTE9fVFJBRVJfU1RBVFVTLCBmb3JQazpwcm9wcy5mb3JQa30pO1xyXG4gICAgICAgIGlmKHZhcmlhYmxlQWN0dWFsKXtcclxuICAgICAgICAgICAgZW5mb2NhckVsZW1lbnRvRGVWYXJpYWJsZSh2YXJpYWJsZUFjdHVhbClcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICB2YXIgbGlzdGFNb2RvczpNb2RvRGVzcGxpZWd1ZVtdPVsnbWV0YWRhdG9zJywncmVsZXZhbWllbnRvJywnUERGJ107XHJcbiAgICBbJ2JvdG9uLXZvbHZlci0xJywgJ2JvdG9uLXZvbHZlci0yJ10uZm9yRWFjaChpZD0+e1xyXG4gICAgICAgIHJlZ2lzdHJhckVsZW1lbnRvKHtpZCwgZGlyZWN0OnRydWUsXHJcbiAgICAgICAgICAgIGZ1bjooXHJcbiAgICAgICAgICAgICAgICByOlJlc3B1ZXN0YXMsIFxyXG4gICAgICAgICAgICAgICAgZmVlZGJhY2tGb3JtOiBGb3JtU3RydWN0dXJlU3RhdGU8SWRWYXJpYWJsZSwgVmFsb3IsIElkRmluPiwgXHJcbiAgICAgICAgICAgICAgICBlbGVtZW50bzpIVE1MRGl2RWxlbWVudCwgXHJcbiAgICAgICAgICAgICAgICBmZWVkYmFja0FsbDp7W2Zvcm11bGFyaW8gaW4gUGxhaW5Gb3JQa106Rm9ybVN0cnVjdHVyZVN0YXRlPElkVmFyaWFibGUsIFZhbG9yLCBJZEZpbj59LCBcclxuICAgICAgICAgICAgICAgIF9lc3RydWN0dXJhOkVzdHJ1Y3R1cmFcclxuICAgICAgICAgICAgKT0+e1xyXG4gICAgICAgICAgICAgICAgZWxlbWVudG8uc2V0QXR0cmlidXRlKCdyZXN1bWVuLWVzdGFkbycsZXNWb2x2ZXI/ZmVlZGJhY2tGb3JtLnJlc3VtZW46Y2FsY3VsYXJSZXN1bWVuVml2aWVuZGEoZm9yUGssIGZlZWRiYWNrQWxsLCByKS5yZXN1bWVuRXN0YWRvKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICB9KVxyXG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvciBlc3BlY2lhbCBoYXkgcXVlIGxlZXJsbyBlbiBlbCBwYXJzZXIgZGUgY2FzaWxsZXJvcyBzaSBlc3RvIHRlcm1pbmEgcXVlZGFuZG8gYXPDrVxyXG4gICAgdmFyIHBhbnRhbGxhQ29tcGxldGEgPSBmb3JtdWxhcmlvLmVzcGVjaWFsPy5wYW50YWxsYUNvbXBsZXRhO1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgICA8PlxyXG4gICAgICAgICAgICA8QXBwQmFyIHBvc2l0aW9uPVwiZml4ZWRcIiBjb2xvcj17c29sb0xlY3R1cmE/J3NlY29uZGFyeSc6J3ByaW1hcnknfT5cclxuICAgICAgICAgICAgICAgIDxUb29sYmFyPlxyXG4gICAgICAgICAgICAgICAgICAgIDxCYXJyYURlTmF2ZWdhY2lvbiBmb3JQaz17Zm9yUGt9IHNvbG9MZWN0dXJhPXtzb2xvTGVjdHVyYSB8fCBmYWxzZX0gbW9kb0RpcmVjdG89e29wY2lvbmVzLm1vZG9EaXJlY3RvfS8+XHJcbiAgICAgICAgICAgICAgICA8L1Rvb2xiYXI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGlkPVwibWluaS1jb25zb2xlXCI+PC9kaXY+XHJcbiAgICAgICAgICAgIDwvQXBwQmFyPlxyXG4gICAgICAgICAgICA8bWFpbj5cclxuICAgICAgICAgICAgICAgIDxQYXBlciBjbGFzc05hbWU9XCJmb3JtdWxhcmlvXCIgbW9kby1kZXNwbGllZ3VlPXttb2RvRGVzcGxpZWd1ZX0gdmVyLW51bS1vcGNpb25lcz17b3BjaW9uZXMuY29uQ2FtcG9PcGNpb25lcz8nU0knOidOTyd9PlxyXG4gICAgICAgICAgICAgICAgICAgIHttb2RvLmRlbW8/PGRpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPFR5cG9ncmFwaHkgY29tcG9uZW50PVwic3BhblwiPk1vZG8gZGUgZGVzcGxpZWd1ZTo8L1R5cG9ncmFwaHk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxCdXR0b25Hcm91cD5cclxuICAgICAgICAgICAgICAgICAgICAgICAge2xpc3RhTW9kb3MubWFwKG1vZG89PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPEJ1dHRvbiBrZXk9e21vZG99IHZhcmlhbnQ9e21vZG89PW1vZG9EZXNwbGllZ3VlP1wiY29udGFpbmVkXCI6XCJvdXRsaW5lZFwifSBvbkNsaWNrPXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKT0+ZGlzcGF0Y2goZGlzcGF0Y2hlcnMuTU9ET19ERVNQTElFR1VFKHttb2RvRGVzcGxpZWd1ZTptb2RvfSkpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Pnttb2RvfTwvQnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICApfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L0J1dHRvbkdyb3VwPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PjpudWxsfVxyXG4gICAgICAgICAgICAgICAgICAgIHtwYW50YWxsYUNvbXBsZXRhP251bGw6PEJvdG9uVm9sdmVyRW5EaXYgaWQ9XCJib3Rvbi12b2x2ZXItMVwiLz59XHJcbiAgICAgICAgICAgICAgICAgICAge3BhbnRhbGxhQ29tcGxldGE/bnVsbDo8Rm9ybXVsYXJpb0VuY2FiZXphZG8gY2FzaWxsZXJvPXtmb3JtdWxhcmlvfS8+fVxyXG4gICAgICAgICAgICAgICAgICAgIDxEZXNwbGVnYXJDb250ZW5pZG9JbnRlcm5vQmxvcXVlT0Zvcm11bGFyaW8gYmxvcXVlT0Zvcm11bGFyaW89e2Zvcm11bGFyaW99IGZvcm11bGFyaW89e2Zvcm11bGFyaW99IGZvclBrPXtmb3JQa30gbXVsdGlwbGU9e2ZhbHNlfS8+XHJcbiAgICAgICAgICAgICAgICAgICAge3BhbnRhbGxhQ29tcGxldGE/bnVsbDo8Qm90b25Wb2x2ZXJFbkRpdiBpZD1cImJvdG9uLXZvbHZlci0yXCIvPn1cclxuICAgICAgICAgICAgICAgIDwvUGFwZXI+XHJcbiAgICAgICAgICAgICAgICA8RmFiIGlkPSdmYWItYWN0aXZvLWFycmliYScgY29sb3I9XCJwcmltYXJ5XCIgYXJpYS1sYWJlbD1cImFkZFwiIG9uQ2xpY2s9e29uQ2xpY2tTYWx0YXJBY3R1YWx9PlxyXG4gICAgICAgICAgICAgICAgICAgIDxJQ09OLktleWJvYXJkQXJyb3dVcCAvPlxyXG4gICAgICAgICAgICAgICAgPC9GYWI+XHJcbiAgICAgICAgICAgICAgICA8RmFiIGlkPSdmYWItYWN0aXZvLWFiYWpvJyBjb2xvcj1cInByaW1hcnlcIiBhcmlhLWxhYmVsPVwiYWRkXCIgb25DbGljaz17b25DbGlja1NhbHRhckFjdHVhbH0+XHJcbiAgICAgICAgICAgICAgICAgICAgPElDT04uS2V5Ym9hcmRBcnJvd0Rvd24gLz5cclxuICAgICAgICAgICAgICAgIDwvRmFiPlxyXG4gICAgICAgICAgICAgICAgPEZhYiBpZD0nZmFiLWVycm9yLWFycmliYScgdmFyaWFudD1cImV4dGVuZGVkXCIgY29sb3I9XCJzZWNvbmRhcnlcIiBhcmlhLWxhYmVsPVwiZWRpdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxJQ09OLk5hdmlnYXRpb24gLz5cclxuICAgICAgICAgICAgICAgICAgICBFcnJvclxyXG4gICAgICAgICAgICAgICAgPC9GYWI+ICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgPEZhYiBpZD0nZmFiLWVycm9yLWFiYWpvJyB2YXJpYW50PVwiZXh0ZW5kZWRcIiBjb2xvcj1cInNlY29uZGFyeVwiIGFyaWEtbGFiZWw9XCJlZGl0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPElDT04uTmF2aWdhdGlvbkRvd24gLz5cclxuICAgICAgICAgICAgICAgICAgICBFcnJvclxyXG4gICAgICAgICAgICAgICAgPC9GYWI+ICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9J2VzcGFjaW8tZmluYWwtZm9ybXVsYXJpbyc+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICB7b3BjaW9uZXMubW9kb0JvcnJhclJlc3B1ZXN0YSAmJiBvcGNpb25lcy5mb3JQaz88RGVzcGxlZ2FyQ29uZmlybWFyQm9ycmFyUmVzcHVlc3RhIGZvclBrPXtvcGNpb25lcy5mb3JQa30gdmFyaWFibGVCb3JyYXI9e29wY2lvbmVzLm1vZG9Cb3JyYXJSZXNwdWVzdGF9Lz46bnVsbH1cclxuICAgICAgICAgICAgPC9tYWluPlxyXG4gICAgICAgIDwvPlxyXG4gICAgKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIEF0cmlidXRvKHByb3BzOntub21icmU6c3RyaW5nLCB2YWxvcjphbnl9KXtcclxuICAgIHJldHVybiBwcm9wcy52YWxvciE9bnVsbCAmJiBwcm9wcy52YWxvciE9Jyc/PHNwYW4gY2xhc3NOYW1lPVwiYXRyaWJ1dG8tcGFyXCI+XHJcbiAgICAgICAge3Byb3BzLm5vbWJyZT88c3BhbiBjbGFzc05hbWU9XCJhdHJpYnV0by1ub21icmVcIj57cHJvcHMubm9tYnJlfTwvc3Bhbj46bnVsbH1cclxuICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwiYXRyaWJ1dG8tdmFsb3JcIj57cHJvcHMudmFsb3IudG9TdHJpbmcoKX08L3NwYW4+XHJcbiAgICA8L3NwYW4+Om51bGxcclxufVxyXG5cclxuY29uc3QgbGlzdGFFc3RhZG9zQ2FyZ2E6RXN0YWRvQ2FyZ2FbXT1bJ3Jlc3VtZW4nLCdyZWxldmFtaWVudG8nLCdyZWNpYm8nXTtcclxudmFyIHJlc3VtaWRvcmVzID0gW1xyXG4gICAge25vbWJyZTonUkVBJyAgICAgICAgICwgZjoocnI6UmVzcHVlc3Rhc1JhaXopPT5yci5yZXN1bWVuRXN0YWRvPT1cIm9rXCIgICAgICAgICAgfSxcclxuICAgIHtub21icmU6J0NpdGEgcGFjdGFkYScsIGY6KHJyOlJlc3B1ZXN0YXNSYWl6KT0+cnIucmVzdW1lbkVzdGFkbz09XCJjaXRhIHBhY3RhZGFcIn0sXHJcbiAgICB7bm9tYnJlOidQZW5kaWVudGVzJyAgLCBmOihycjpSZXNwdWVzdGFzUmFpeik9PnJyLnJlc3VtZW5Fc3RhZG89PVwidmFjaW9cIiAgICAgICB9LFxyXG5dO1xyXG5cclxucmVzdW1pZG9yZXMucHVzaChcclxuICAgIHtub21icmU6J090cm9zJywgZjpyZXN1bWlkb3Jlcy5yZWR1Y2UoKGcscik9Pihycj0+IXIuZihycikgJiYgZyhycikgKSwoXzpSZXNwdWVzdGFzUmFpeik9PnRydWUpIH1cclxuKVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIERlc3BsZWdhckxpbmVhUmVzdW1lblVBUHJpbmNpcGFsKHByb3BzOntcclxuICAgIG51bVZpdmllbmRhOklkRW5jLFxyXG4gICAgZm9ybVByaW5jaXBhbDpJZEZvcm11bGFyaW8sXHJcbiAgICB0YXJlYTogc3RyaW5nLFxyXG4gICAgcmVzcHVlc3RhczpSZXNwdWVzdGFzUmFpeixcclxufSl7XHJcbiAgICBjb25zdCB7bnVtVml2aWVuZGEsIHJlc3B1ZXN0YXMsIGZvcm1QcmluY2lwYWwsIHRhcmVhfSA9IHByb3BzO1xyXG4gICAgY29uc3QgaWQ9J3Zpdi0nK251bVZpdmllbmRhO1xyXG4gICAgY29uc3QgZXN0cnVjdHVyYSA9IGdldEVzdHJ1Y3R1cmEoKTtcclxuICAgIGNvbnN0IGZvclBrOkZvclBrPXtmb3JtdWxhcmlvOmZvcm1QcmluY2lwYWwsIFtlc3RydWN0dXJhLm1haW5URFBLXTpOdW1iZXIobnVtVml2aWVuZGEpIGFzIElkRW5jfSBhcyBGb3JQazsgLy9ubyBxdWl0YXIgZWwgY2FzdGVvIHBvcnF1ZSB2aWVuZSBjb21vIHRleHRvIHkgbmVjZXNpdG8gcXVlIHNlYSBuw7ptZXJvXHJcbiAgICB2YXIgdGVtID0gZ2V0RGF0b3NCeVBhc3MoKS5pbmZvcm1hY2lvbkhkcltudW1WaXZpZW5kYV0udGVtO1xyXG4gICAgY29uc3QgZGlzcGF0Y2ggPSB1c2VEaXNwYXRjaCgpO1xyXG4gICAgdXNlRWZmZWN0KCgpPT57XHJcbiAgICAgICAgdm9sY2Fkb0luaWNpYWxFbGVtZW50b3NSZWdpc3RyYWRvcyhmb3JQayk7XHJcbiAgICAgICAgaW50ZW50YXJCYWNrdXAoZm9yUGspXHJcbiAgICB9KVxyXG4gICAgcmVnaXN0cmFyRWxlbWVudG8oe2lkLCBkaXJlY3Q6dHJ1ZSxcclxuICAgICAgICBmdW46KFxyXG4gICAgICAgICAgICByOlJlc3B1ZXN0YXMsIFxyXG4gICAgICAgICAgICBfZmVlZGJhY2tGb3JtOiBGb3JtU3RydWN0dXJlU3RhdGU8SWRWYXJpYWJsZSwgVmFsb3IsIElkRmluPiwgXHJcbiAgICAgICAgICAgIGVsZW1lbnRvOkhUTUxEaXZFbGVtZW50LCBcclxuICAgICAgICAgICAgZmVlZGJhY2tBbGw6e1tmb3JtdWxhcmlvIGluIFBsYWluRm9yUGtdOkZvcm1TdHJ1Y3R1cmVTdGF0ZTxJZFZhcmlhYmxlLCBWYWxvciwgSWRGaW4+fSwgXHJcbiAgICAgICAgICAgIF9lc3RydWN0dXJhOkVzdHJ1Y3R1cmFcclxuICAgICAgICApPT57XHJcbiAgICAgICAgICAgIC8vcHJlZ3VudG8gc2kgZXMgbGEgbWlzbWEgdml2aWVuZGEgcG9ycXVlIGxhIGZ1bmNpb24gc2UgZGlzcGFyYSBcclxuICAgICAgICAgICAgLy9jb24gdG9kYXMgbGFzIGNvbWJpbmFjaW9uZXMgZGUgcmVzcHVlc3RhcyBwYXJhIGNhZGEgZm9yUGtcclxuICAgICAgICAgICAgLy9AdHMtaWdub3JlIHZpdmllbmRhIGV4aXN0ZVxyXG4gICAgICAgICAgICBpZihyW2VzdHJ1Y3R1cmEubWFpblREUEtdID09IGZvclBrW2VzdHJ1Y3R1cmEubWFpblREUEtdKXtcclxuICAgICAgICAgICAgICAgIGVsZW1lbnRvLnNldEF0dHJpYnV0ZSgncmVzdW1lbi1lc3RhZG8nLGNhbGN1bGFyUmVzdW1lblZpdmllbmRhKGZvclBrLCBmZWVkYmFja0FsbCwgcikucmVzdW1lbkVzdGFkbyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgICAgIFxyXG4gICAgfSlcclxuICAgIHJldHVybiA8VGFibGVSb3cga2V5PXtudW1WaXZpZW5kYX0+XHJcbiAgICAgICAgPFRhYmxlQ2VsbD5cclxuICAgICAgICAgICAge3RlbT9cclxuICAgICAgICAgICAgICAgIDw+XHJcbiAgICAgICAgICAgICAgICAgICAgPERlc3BsZWdhclRlbSB0ZW09e3RlbX0vPlxyXG4gICAgICAgICAgICAgICAgICAgIHtyZXNwdWVzdGFzWydyZXN1bWVuRXN0YWRvJyBhcyBJZFZhcmlhYmxlXT09XCJjaXRhIHBhY3RhZGFcIj9cclxuICAgICAgICAgICAgICAgICAgICAgICAgPERlc3BsZWdhckNpdGFQYWN0YWRhIHJlc3B1ZXN0YXM9e3Jlc3B1ZXN0YXN9Lz5cclxuICAgICAgICAgICAgICAgICAgICA6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxEZXNwbGVnYXJDaXRhUGFjdGFkYVlTZWxlY2Npb25hZG9BbnRlcmlvclRlbSB0ZW09e3RlbX0vPlxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIDwvPlxyXG4gICAgICAgICAgICA6bnVsbH1cclxuICAgICAgICA8L1RhYmxlQ2VsbD5cclxuICAgICAgICA8VGFibGVDZWxsPlxyXG4gICAgICAgICAgICB7dGFyZWF9XHJcbiAgICAgICAgPC9UYWJsZUNlbGw+XHJcbiAgICAgICAgPFRhYmxlQ2VsbD5cclxuICAgICAgICAgICAgPEJ1dHRvbiBpZD17aWR9IG9uQ2xpY2s9eygpPT4gXHJcbiAgICAgICAgICAgICAgICBkaXNwYXRjaChkaXNwYXRjaGVycy5DQU1CSUFSX0ZPUk1VTEFSSU8oe2ZvclBrLCBhcGlsYXJWdWVsdGE6ZmFsc2V9KSlcclxuICAgICAgICAgICAgfT5cclxuICAgICAgICAgICAgICAgIHtudW1WaXZpZW5kYS50b1N0cmluZygpfVxyXG4gICAgICAgICAgICA8L0J1dHRvbj5cclxuICAgICAgICA8L1RhYmxlQ2VsbD5cclxuICAgIDwvVGFibGVSb3c+XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBEZXNwbGVnYXJDYXJnYShwcm9wczp7XHJcbiAgICBjYXJnYTpDYXJnYSwgXHJcbiAgICBpZENhcmdhOklkQ2FyZ2EsIFxyXG4gICAgcG9zaWNpb246bnVtYmVyLFxyXG4gICAgaW5mb3JtYWNpb25IZHI6SW5mb3JtYWNpb25IZHIsIFxyXG4gICAgcmVzcHVlc3RhczogUmVzcHVlc3RhTGFzVUEsXHJcbiAgICBmZWVkYmFja1Jvd1ZhbGlkYXRvcjp7XHJcbiAgICAgICAgW2Zvcm11bGFyaW8gaW4gUGxhaW5Gb3JQa106Rm9ybVN0cnVjdHVyZVN0YXRlPElkVmFyaWFibGUsIFZhbG9yLCBJZEZpbj4gXHJcbiAgICB9XHJcbn0pe1xyXG4gICAgY29uc3QgW25ld1N1cnZleSwgc2V0TmV3U3VydmV5XSA9IHVzZVN0YXRlKDApO1xyXG4gICAgY29uc3Qge2NhcmdhLCBpZENhcmdhLCBpbmZvcm1hY2lvbkhkciwgcmVzcHVlc3Rhc30gPSBwcm9wcztcclxuICAgIHZhciBlc3RydWN0dXJhID0gZ2V0RXN0cnVjdHVyYSgpO1xyXG4gICAgbGV0IGNhbnRMaW5lYXNSZXN1bWVuID0gbGlrZUFyKGluZm9ybWFjaW9uSGRyKS5maWx0ZXIoKGluZm9ybWFjaW9uKT0+aW5mb3JtYWNpb24udGVtLmNhcmdhPT1pZENhcmdhKS5hcnJheSgpLmxlbmd0aDtcclxuICAgIGNvbnN0IGRpc3BhdGNoID0gdXNlRGlzcGF0Y2goKTtcclxuICAgIHJldHVybiA8UGFwZXIgY2xhc3NOYW1lPVwiY2FyZ2FcIiBzdHlsZT17e21hcmdpbkJvdHRvbTogJzEwcHgnLCBwYWRkaW5nOiAnMTBweCd9fT5cclxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImluZm9ybWFjaW9uLWNhcmdhXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiY2FyZ2FcIj7DgXJlYToge2lkQ2FyZ2F9PC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwib2JzZXJ2YWNpb25lc1wiPntjYXJnYS5vYnNlcnZhY2lvbmVzfTwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiaW5mb3JtYWNpb24tY2FyZ2FcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmZWNoYVwiPntjYXJnYS5mZWNoYX08L2Rpdj5cclxuICAgICAgICAgICAgey8qXHJcbiAgICAgICAgICAgIDxCdXR0b25Hcm91cD5cclxuICAgICAgICAgICAge2xpc3RhRXN0YWRvc0NhcmdhLm1hcChlc3RhZG9fY2FyZ2E9PlxyXG4gICAgICAgICAgICAgICAgPEJ1dHRvbiBrZXk9e2VzdGFkb19jYXJnYX0gdmFyaWFudD17ZXN0YWRvX2NhcmdhPT1jYXJnYS5lc3RhZG9fY2FyZ2E/XCJjb250YWluZWRcIjpcIm91dGxpbmVkXCJ9IG9uQ2xpY2s9e1xyXG4gICAgICAgICAgICAgICAgICAgICgpPT5kaXNwYXRjaChkaXNwYXRjaGVycy5FU1RBRE9fQ0FSR0Eoe2lkQ2FyZ2EsIGVzdGFkb19jYXJnYX0pKVxyXG4gICAgICAgICAgICAgICAgfT57ZXN0YWRvX2NhcmdhfTwvQnV0dG9uPlxyXG4gICAgICAgICAgICApfVxyXG4gICAgICAgICAgICA8L0J1dHRvbkdyb3VwPlxyXG4gICAgICAgICAgICAqL31cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICB7Y2FyZ2EuZXN0YWRvX2NhcmdhPT1udWxsICYmICFwcm9wcy5wb3NpY2lvbiB8fCBjYXJnYS5lc3RhZG9fY2FyZ2E9PSdyZWxldmFtaWVudG8nP1xyXG4gICAgICAgIDxUYWJsZSBjbGFzc05hbWU9XCJ0YWJsYS1jYXJnYS1ob2phLWRlLXJ1dGFcIj5cclxuICAgICAgICAgICAgPGNvbGdyb3VwPlxyXG4gICAgICAgICAgICAgICAgPGNvbCBzdHlsZT17e3dpZHRoOlwiNzUlXCJ9fS8+XHJcbiAgICAgICAgICAgICAgICA8Y29sIHN0eWxlPXt7d2lkdGg6XCIxMCVcIn19Lz4gICAgXHJcbiAgICAgICAgICAgICAgICA8Y29sIHN0eWxlPXt7d2lkdGg6XCIxNSVcIn19Lz4gICAgXHJcbiAgICAgICAgICAgIDwvY29sZ3JvdXA+XHJcbiAgICAgICAgICAgIHtjYW50TGluZWFzUmVzdW1lbj9cclxuICAgICAgICAgICAgICAgIDxUYWJsZUhlYWQgc3R5bGU9e3tmb250U2l6ZTogXCIxLjJyZW1cIn19PlxyXG4gICAgICAgICAgICAgICAgICAgIDxUYWJsZVJvdyBjbGFzc05hbWU9XCJ0ci1jYXJnYVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8VGFibGVDZWxsPmRvbWljaWxpbzwvVGFibGVDZWxsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8VGFibGVDZWxsPnRhcmVhPC9UYWJsZUNlbGw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxUYWJsZUNlbGw+ZW5jPC9UYWJsZUNlbGw+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9UYWJsZVJvdz5cclxuICAgICAgICAgICAgICAgIDwvVGFibGVIZWFkPlxyXG4gICAgICAgICAgICA6bnVsbH1cclxuICAgICAgICAgICAgPFRhYmxlQm9keT5cclxuICAgICAgICAgICAgICAgIDw+XHJcbiAgICAgICAgICAgICAgICB7bGlrZUFyKGluZm9ybWFjaW9uSGRyKS5maWx0ZXIoKGluZm9ybWFjaW9uKT0+aW5mb3JtYWNpb24udGVtLmNhcmdhPT1pZENhcmdhKS5tYXAoKGluZm9ybWFjaW9uLCBudW1WaXZpZW5kYSk9PlxyXG4gICAgICAgICAgICAgICAgICAgIDxEZXNwbGVnYXJMaW5lYVJlc3VtZW5VQVByaW5jaXBhbCBcclxuICAgICAgICAgICAgICAgICAgICAgICAga2V5PXtudW1WaXZpZW5kYX0gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG51bVZpdmllbmRhPXtudW1WaXZpZW5kYX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZWE9e2luZm9ybWFjaW9uLnRhcmVhLnRhcmVhfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtUHJpbmNpcGFsPXtpbmZvcm1hY2lvbi50YXJlYS5tYWluX2Zvcm19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXM9e3Jlc3B1ZXN0YXNbZXN0cnVjdHVyYS5tYWluVERdW251bVZpdmllbmRhXSBhcyBSZXNwdWVzdGFzUmFpen1cclxuICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgKS5hcnJheSgpfVxyXG4gICAgICAgICAgICAgICAge2VzdHJ1Y3R1cmEucGVybWl0ZUdlbmVyYXJNdWVzdHJhP1xyXG4gICAgICAgICAgICAgICAgICAgIDxUYWJsZVJvdyBjbGFzc05hbWU9XCJ0ci1jYXJnYS1udWV2b1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8VGFibGVDZWxsIGNvbFNwYW49ezN9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPEJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJjb250YWluZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCk9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcmVhckVuY3Vlc3RhKGlkQ2FyZ2EsKGZvclBrUmFpejpGb3JQa1JhaXopPT57XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwYXRjaChkaXNwYXRjaGVycy5DQU1CSUFSX0ZPUk1VTEFSSU8oe2ZvclBrOmZvclBrUmFpeiwgYXBpbGFyVnVlbHRhOmZhbHNlfSkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SUNPTi5BZGQvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9CdXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvVGFibGVDZWxsPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvVGFibGVSb3c+XHJcbiAgICAgICAgICAgICAgICA6bnVsbH1cclxuICAgICAgICAgICAgICAgIDwvPlxyXG4gICAgICAgICAgICA8L1RhYmxlQm9keT5cclxuICAgICAgICA8L1RhYmxlPjpcclxuICAgICAgICA8VGFibGU+XHJcbiAgICAgICAgICAgIDxUYWJsZUhlYWQgc3R5bGU9e3tmb250U2l6ZTogXCIxLjJyZW1cIn19PlxyXG4gICAgICAgICAgICAgICAgPFRhYmxlUm93IGNsYXNzTmFtZT1cInRyLWNhcmdhXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3Jlc3VtaWRvcmVzLm1hcCgocmVzdW1pZG9yOiB0eXBlb2YgcmVzdW1pZG9yZXNbMF0sIGk6bnVtYmVyKT0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxUYWJsZUNlbGwga2V5PXtpfT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtyZXN1bWlkb3Iubm9tYnJlfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L1RhYmxlQ2VsbD5cclxuICAgICAgICAgICAgICAgICAgICApfVxyXG4gICAgICAgICAgICAgICAgPC9UYWJsZVJvdz5cclxuICAgICAgICAgICAgPC9UYWJsZUhlYWQ+XHJcbiAgICAgICAgPC9UYWJsZT5cclxuICAgICAgICB9XHJcbiAgICA8L1BhcGVyPlxyXG59XHJcbmV4cG9ydCBmdW5jdGlvbiBEZXNwbGVnYXJDaXRhUGFjdGFkYShwcm9wczp7cmVzcHVlc3RhczpSZXNwdWVzdGFzfSl7XHJcbiAgICBjb25zdCB7cmVzcHVlc3Rhc30gPSBwcm9wcztcclxuICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT1cImNpdGEtcGFjdGFkYVwiPlxyXG4gICAgICAgIDxkaXY+PEF0cmlidXRvIG5vbWJyZT1cIkNpdGEgcGFjdGFkYSBjb24gXCIgdmFsb3I9e3Jlc3B1ZXN0YXNbcDEyXX0vPjwvZGl2PlxyXG4gICAgICAgIDxkaXY+PEF0cmlidXRvIG5vbWJyZT1cIkNlbC46XCIgdmFsb3I9e3Jlc3B1ZXN0YXNbc3AyXX0vPjwvZGl2PlxyXG4gICAgICAgIDxkaXY+PEF0cmlidXRvIG5vbWJyZT1cIlRlbC46XCIgdmFsb3I9e3Jlc3B1ZXN0YXNbc3AzXX0vPjwvZGl2PlxyXG4gICAgICAgIDxkaXY+PEF0cmlidXRvIG5vbWJyZT1cIkZlY2hhOlwiIHZhbG9yPXtyZXNwdWVzdGFzW3NwNF19Lz48L2Rpdj5cclxuICAgICAgICA8ZGl2PjxBdHJpYnV0byBub21icmU9XCJIb3JhOlwiIHZhbG9yPXtyZXNwdWVzdGFzW3NwNV19Lz48L2Rpdj5cclxuICAgIDwvZGl2PlxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gRGVzcGxlZ2FyQ2l0YVBhY3RhZGFZU2VsZWNjaW9uYWRvQW50ZXJpb3JUZW0ocHJvcHM6e3RlbTpURU19KXtcclxuICAgIGNvbnN0IHt0ZW19ID0gcHJvcHM7XHJcbiAgICByZXR1cm4gPGRpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRlbS1jaXRhXCI+XHJcbiAgICAgICAgICAgIDxBdHJpYnV0byBub21icmU9XCJDaXRhOlwiIHZhbG9yPXt0ZW0uY2l0YX0vPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBEZXNwbGVnYXJUZW0ocHJvcHM6e3RlbTpURU19KXtcclxuICAgIGNvbnN0IHt0ZW19ID0gcHJvcHM7XHJcbiAgICByZXR1cm4gPGRpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRlbS1kb21pY2lsaW9cIj57dGVtLm5vbWNhbGxlfSB7dGVtLm5yb2NhdGFzdHJhbH0gPEF0cmlidXRvIG5vbWJyZT1cInBpc29cIiB2YWxvcj17dGVtLnBpc299Lz4gPEF0cmlidXRvIG5vbWJyZT1cImRwdG9cIiB2YWxvcj17dGVtLmRlcGFydGFtZW50b30vPiA8L2Rpdj5cclxuICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICA8QXRyaWJ1dG8gbm9tYnJlPVwic2VjdG9yXCIgdmFsb3I9e3RlbS5zZWN0b3J9Lz5cclxuICAgICAgICAgICAgPEF0cmlidXRvIG5vbWJyZT1cImVkaWZpY2lvXCIgdmFsb3I9e3RlbS5lZGlmaWNpb30vPlxyXG4gICAgICAgICAgICA8QXRyaWJ1dG8gbm9tYnJlPVwiY2FzYVwiIHZhbG9yPXt0ZW0uY2FzYX0vPlxyXG4gICAgICAgICAgICA8QXRyaWJ1dG8gbm9tYnJlPVwiZW50cmFkYVwiIHZhbG9yPXt0ZW0uZW50cmFkYX0vPlxyXG4gICAgICAgICAgICA8QXRyaWJ1dG8gbm9tYnJlPVwiaGFiaXRhY2lvblwiIHZhbG9yPXt0ZW0uaGFiaXRhY2lvbn0vPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGVtLW9ic2VydmFjaW9uZXNcIj5cclxuICAgICAgICAgICAge3RlbS5vYnNlcnZhY2lvbmVzfSBcclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gSG9qYURlUnV0YURlc3BsaWVndWUoKXtcclxuICAgIHZhciB7Y2FyZ2FzLCBudW1fc2luY3JvLCBpbmZvcm1hY2lvbkhkciwgcmVzcHVlc3Rhc30gPSBnZXREYXRvc0J5UGFzcygpO1xyXG4gICAgdmFyIHttb2RvfSA9IHVzZVNlbGVjdG9yKChzdGF0ZTpDYXNvU3RhdGUpPT4oe21vZG86c3RhdGUubW9kb30pKTtcclxuICAgIHZhciBmZWVkYmFja1Jvd1ZhbGlkYXRvciA9IGdldEZlZWRiYWNrUm93VmFsaWRhdG9yKClcclxuICAgIGNvbnN0IGRpc3BhdGNoID0gdXNlRGlzcGF0Y2goKTtcclxuICAgIGNvbnN0IHVwZGF0ZU9ubGluZVN0YXR1cyA9IGZ1bmN0aW9uKCl7XHJcbiAgICAgICAgc2V0T25saW5lKHdpbmRvdy5uYXZpZ2F0b3Iub25MaW5lKTtcclxuICAgIH1cclxuICAgIGNvbnN0IGFwcFZlcnNpb24gPSBnZXRDYWNoZVZlcnNpb24oKTtcclxuICAgIGNvbnN0IFtvbmxpbmUsIHNldE9ubGluZV0gPSB1c2VTdGF0ZSh3aW5kb3cubmF2aWdhdG9yLm9uTGluZSk7XHJcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignb25saW5lJywgIHVwZGF0ZU9ubGluZVN0YXR1cyk7XHJcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignb2ZmbGluZScsIHVwZGF0ZU9ubGluZVN0YXR1cyk7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICAgIDw+XHJcbiAgICAgICAgICAgIDxBcHBCYXIgcG9zaXRpb249XCJmaXhlZFwiPlxyXG4gICAgICAgICAgICAgICAgPFRvb2xiYXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPFR5cG9ncmFwaHkgdmFyaWFudD1cImg2XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEhvamEgZGUgcnV0YVxyXG4gICAgICAgICAgICAgICAgICAgIDwvVHlwb2dyYXBoeT5cclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy88SWNvbkJ1dHRvbiBzdHlsZT17e21hcmdpblRvcDonM3B4J319XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gICAgY29sb3I9XCJpbmhlcml0XCJcclxuICAgICAgICAgICAgICAgICAgICAvLyAgICAvL29uQ2xpY2s9ey8qZGlzcGF0Y2ggcXVlIGxsZXZhIGEgcGFudGFsbGEgb3BjaW9uZXMqL31cclxuICAgICAgICAgICAgICAgICAgICAvLz5cclxuICAgICAgICAgICAgICAgICAgICAvLyAgICA8SUNPTi5TZXR0aW5ncy8+XHJcbiAgICAgICAgICAgICAgICAgICAgLy88L0ljb25CdXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHtvbmxpbmU/XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SWNvbkJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPVwiaW5oZXJpdFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCk9PntcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290b1NpbmNyb25pemFyKClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJQ09OLlN5bmNBbHQvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9JY29uQnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8Lz5cclxuICAgICAgICAgICAgICAgICAgICA6bnVsbH1cclxuICAgICAgICAgICAgICAgIDwvVG9vbGJhcj5cclxuICAgICAgICAgICAgPC9BcHBCYXI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiaG9qYS1kZS1ydXRhXCI+XHJcbiAgICAgICAgICAgICAgICB7bW9kby5kZW1vPzxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPFR5cG9ncmFwaHk+TW9kbyBkZW1vIDwvVHlwb2dyYXBoeT5cclxuICAgICAgICAgICAgICAgICAgICA8QnV0dG9uIHZhcmlhbnQ9XCJvdXRsaW5lZFwiIGNvbG9yPVwic2Vjb25kYXJ5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCk9PmRpc3BhdGNoKGRpc3BhdGNoZXJzLlJFSU5JQ0lBUl9ERU1PKHt9KSl9XHJcbiAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZWluaWNpYXJcclxuICAgICAgICAgICAgICAgICAgICA8L0J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PjpudWxsfVxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJub21icmUtdmVyc2lvblwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXY+RGlyZWNjacOzbiBHZW5lcmFsIGRlIEVzdGFkw61zdGljYSB5IENlbnNvcyAtIEMuQS5CLkEuPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdj57bXkuZ2V0TG9jYWxWYXIoJ2FwcC12ZXJzaW9uJyl9IHNpbmNybyB7bnVtX3NpbmNyb30gLSB2ZXJzacOzbiB7YXBwVmVyc2lvbn08L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAge2xpa2VBcihjYXJnYXMpLm1hcCgoY2FyZ2EsIGlkQ2FyZ2EsIF8sIHBvc2ljaW9uKT0+XHJcbiAgICAgICAgICAgICAgICAgICAgPERlc3BsZWdhckNhcmdhIGtleT17aWRDYXJnYX0gY2FyZ2E9e2NhcmdhfSBpZENhcmdhPXtpZENhcmdhfSBwb3NpY2lvbj17cG9zaWNpb259IGluZm9ybWFjaW9uSGRyPXtpbmZvcm1hY2lvbkhkcn0gZmVlZGJhY2tSb3dWYWxpZGF0b3I9e2ZlZWRiYWNrUm93VmFsaWRhdG9yfSByZXNwdWVzdGFzPXtyZXNwdWVzdGFzfS8+XHJcbiAgICAgICAgICAgICAgICApLmFycmF5KCl9XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvPlxyXG4gICAgKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIExpc3RhVGV4dG9zKHByb3BzOnt0ZXh0b3M6c3RyaW5nW119KXtcclxuICAgIHJldHVybiA8dWw+XHJcbiAgICAgICAge3Byb3BzLnRleHRvcy5tYXAodD0+PGxpPjxUeXBvZ3JhcGh5Pnt0fTwvVHlwb2dyYXBoeT48L2xpPil9XHJcbiAgICA8L3VsPjtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIEJpZW52ZW5pZGFEZXNwbGllZ3VlKHByb3BzOnttb2RvOkNhc29TdGF0ZVtcIm1vZG9cIl19KXtcclxuICAgIGNvbnN0IGRpc3BhdGNoPXVzZURpc3BhdGNoKCk7XHJcbiAgICByZXR1cm4gPFBhcGVyIGNsYXNzTmFtZT1cImJpZW52ZW5pZGFcIj5cclxuICAgICAgICB7cHJvcHMubW9kby5kZW1vP1xyXG4gICAgICAgICAgICA8PlxyXG4gICAgICAgICAgICAgICAgPFR5cG9ncmFwaHk+REVNTyBkZWwgc2lzdGVtYSBkZSByZWxldmFtaWVudG8gZGUgRE1FTkNVPC9UeXBvZ3JhcGh5PlxyXG4gICAgICAgICAgICAgICAgPFR5cG9ncmFwaHk+RW4gZXN0YSBkZW1vOjwvVHlwb2dyYXBoeT5cclxuICAgICAgICAgICAgICAgIDxMaXN0YVRleHRvcyB0ZXh0b3M9e1tcclxuICAgICAgICAgICAgICAgICAgICBcIkFsZ3VuYXMgdml2aWVuZGFzIGFwYXJlY2VuIHJlbGV2YWRhcyAoZWwgYm90w7NuIGVzdMOhIGRlIGNvbG9yKSBzaXJ2ZW4gZGUgZWplbXBsb1wiLFxyXG4gICAgICAgICAgICAgICAgICAgIFwiTG8gcXVlIHNlIGNhcmd1ZW4gc2UgZ3VhcmRhbiBsb2NhbG1lbnRlIHBlcm8gbm8gc2UgdHJhc21pdGVuIGEgbGEgYmFzZSBkZSBkYXRvc1wiLFxyXG4gICAgICAgICAgICAgICAgICAgIFwiU2UgcHVlZGUgdm9sdmVyIGEgbGEgdmVyc2nDs24gaW5pY2lhbCAobyBzZWEgYm9ycmFyIGxvIHF1ZSBzZSBndWFyZMOzIGxvY2FsbWVudGUpIGRlc2RlIGxhIGhvamEgZGUgcnV0YSBib3RvbiBbcmVpbmljaWFyIGRlbW9dXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgXCJUb2RhdsOtYSBoYXkgY29zYXMgcXVlIGZhbHRhbiBvIHB1ZWRlbiBjYW1iaWFyXCIsXHJcbiAgICAgICAgICAgICAgICBdfSAvPlxyXG4gICAgICAgICAgICA8Lz5cclxuICAgICAgICAgICAgOjw+XHJcbiAgICAgICAgICAgICAgICA8VHlwb2dyYXBoeT5FbmN1ZXN0YSBkZSBTZXJvcHJldmFsZW5jaWEgZGUgQ09WSUQtMTk8L1R5cG9ncmFwaHk+XHJcbiAgICAgICAgICAgIDwvPlxyXG4gICAgICAgIH1cclxuICAgICAgICA8QnV0dG9uXHJcbiAgICAgICAgICAgIHZhcmlhbnQ9XCJjb250YWluZWRcIlxyXG4gICAgICAgICAgICBjb2xvcj1cInNlY29uZGFyeVwiXHJcbiAgICAgICAgICAgIG9uQ2xpY2s9eygpPT57IGdvdG9TaW5jcm9uaXphcigpOyB9fVxyXG4gICAgICAgID5cclxuICAgICAgICAgICAgPHNwYW4+U2luY3Jvbml6YXIgPC9zcGFuPiA8SUNPTi5TeW5jQWx0Lz5cclxuICAgICAgICA8L0J1dHRvbj5cclxuICAgICAgICA8QnV0dG9uXHJcbiAgICAgICAgICAgIHZhcmlhbnQ9XCJjb250YWluZWRcIlxyXG4gICAgICAgICAgICBjb2xvcj1cInByaW1hcnlcIlxyXG4gICAgICAgICAgICBvbkNsaWNrPXsoKT0+ZGlzcGF0Y2goZGlzcGF0Y2hlcnMuU0VUX09QQ0lPTih7b3BjaW9uOidiaWVudmVuaWRvJywgdmFsb3I6dHJ1ZX0pKX1cclxuICAgICAgICA+XHJcbiAgICAgICAgICAgIDxzcGFuPkNvbnRpbnVhciA8L3NwYW4+IDxJQ09OLlNlbmQvPlxyXG4gICAgICAgIDwvQnV0dG9uPlxyXG4gICAgPC9QYXBlcj5cclxufVxyXG5cclxuLy9DT05UUk9MIERFIFBFU1RBw5FBU1xyXG52YXIgYWxsT3BlbmVkVGFiczp7W3g6c3RyaW5nXTpudW1iZXJ9PXt9O1xyXG52YXIgaW5mb09wZW5lZFRhYnM9e1xyXG4gICAgYWxsT3BlbmVkVGFicyxcclxuICAgIG15SWQ6J2NhbGN1bGFuZG8uLi4nLFxyXG4gICAgb3RoZXJUYWJzTmFtZXM6JydcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIE9wZW5lZFRhYnMoKXtcclxuICAgIGNvbnN0IFt0YWJzLCBzZXRUYWJzXSA9IHVzZVN0YXRlKGluZm9PcGVuZWRUYWJzLm90aGVyVGFic05hbWVzKTtcclxuICAgIHZhciB7bW9kb0RpcmVjdG99ID0gdXNlU2VsZWN0b3IoKHN0YXRlOkNhc29TdGF0ZSk9Pih7bW9kb0RpcmVjdG86c3RhdGUub3BjaW9uZXMubW9kb0RpcmVjdG99KSk7XHJcbiAgICBjb25zdCB1cGRhdGVUYWJzU3RhdHVzID0gZnVuY3Rpb24oKXtcclxuICAgICAgICBzZXRUYWJzKGluZm9PcGVuZWRUYWJzLm90aGVyVGFic05hbWVzKTtcclxuICAgIH1cclxuICAgIHVzZUVmZmVjdCgoKT0+e1xyXG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdteS10YWJzJyx1cGRhdGVUYWJzU3RhdHVzKTtcclxuICAgICAgICByZXR1cm4gKCkgPT4gd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ215LXRhYnMnLHVwZGF0ZVRhYnNTdGF0dXMpO1xyXG4gICAgfSxbXSlcclxuICAgIHJldHVybiBtb2RvRGlyZWN0bz9udWxsOih0YWJzKT9cclxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRhYi1jb3VudGVyIHRhYi1lcnJvclwiPsKhQVRFTkNJw5NOISBIYXkgbcOhcyBkZSB1bmEgdmVudGFuYSBhYmllcnRhLiBTZSBwdWVkZW4gcGVyZGVyIGRhdG9zOiB7dGFic308L2Rpdj5cclxuICAgIDpcclxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRhYi1jb3VudGVyXCI+4pyUPC9kaXY+XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBBcHBEbUVuY3UoKXtcclxuICAgIHZhciB7Zm9yUGssIGJpZW52ZW5pZG8sIG1vZG99ID0gdXNlU2VsZWN0b3IoKHN0YXRlOkNhc29TdGF0ZSk9Pih7Li4uc3RhdGUub3BjaW9uZXMsIC4uLnN0YXRlLm1vZG8sIC4uLnN0YXRlfSkpO1xyXG4gICAgaWYoIWJpZW52ZW5pZG8pe1xyXG4gICAgICAgIHJldHVybiA8QmllbnZlbmlkYURlc3BsaWVndWUgbW9kbz17bW9kb30vPiBcclxuICAgIH1lbHNlIGlmKGZvclBrPT1udWxsKXtcclxuICAgICAgICByZXR1cm4gPEhvamFEZVJ1dGFEZXNwbGllZ3VlIC8+IFxyXG4gICAgfWVsc2V7XHJcbiAgICAgICAgcmV0dXJuIDxGb3JtdWxhcmlvRGVzcGxpZWd1ZSBmb3JQaz17Zm9yUGt9Lz5cclxuICAgIH1cclxufVxyXG5cclxuZnVuY3Rpb24gUGFudGFsbGFJbmljaWFsU2luQ2FyZ2EoX3Byb3BzOnt9KXtcclxuICAgIGNvbnN0IHVwZGF0ZU9ubGluZVN0YXR1cyA9IGZ1bmN0aW9uKCl7XHJcbiAgICAgICAgc2V0T25saW5lKHdpbmRvdy5uYXZpZ2F0b3Iub25MaW5lKTtcclxuICAgIH1cclxuICAgIGNvbnN0IFtvbmxpbmUsIHNldE9ubGluZV0gPSB1c2VTdGF0ZSh3aW5kb3cubmF2aWdhdG9yLm9uTGluZSk7XHJcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignb25saW5lJywgIHVwZGF0ZU9ubGluZVN0YXR1cyk7XHJcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignb2ZmbGluZScsIHVwZGF0ZU9ubGluZVN0YXR1cyk7XHJcbiAgICBjb25zdCBwYXJhZ3JhcGhTdHlsZXM9e2ZvbnRTaXplOlwiMS4ycmVtXCIsIGZvbnRXZWlnaHQ6NjAwLCBwYWRkaW5nOiBcIjVweCAxMHB4XCJ9O1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgICA8PlxyXG4gICAgICAgICAgICA8QXBwQmFyIHBvc2l0aW9uPVwiZml4ZWRcIj5cclxuICAgICAgICAgICAgICAgIDxUeXBvZ3JhcGh5IHZhcmlhbnQ9XCJoNlwiIHN0eWxlPXt7bWFyZ2luOjI1fX0+XHJcbiAgICAgICAgICAgICAgICAgICAgRGlzcG9zaXRpdm8gc2luIGNhcmdhXHJcbiAgICAgICAgICAgICAgICA8L1R5cG9ncmFwaHk+XHJcbiAgICAgICAgICAgIDwvQXBwQmFyPlxyXG4gICAgICAgICAgICA8bWFpbj5cclxuICAgICAgICAgICAgICAgIDxQYXBlciBzdHlsZT17e2hlaWdodDonNjAwcHgnLCBwYWRkaW5nOlwiMTVweFwiLCBtYXJnaW5Ub3A6NzV9fT5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7b25saW5lP1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VHlwb2dyYXBoeSBjb21wb25lbnQ9XCJwXCIgc3R5bGU9e3BhcmFncmFwaFN0eWxlc30+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNpbmNyb25pemFyIGRpc3Bvc2l0aXZvXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPXt7cGFkZGluZzonNXB4J319PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudD1cImNvbnRhaW5lZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCk9PntcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290b1NpbmNyb25pemFyKClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJQ09OLlN5bmNBbHQvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9CdXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1R5cG9ncmFwaHk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Lz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFR5cG9ncmFwaHkgY29tcG9uZW50PVwicFwiIHN0eWxlPXtwYXJhZ3JhcGhTdHlsZXN9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vIGhheSBjb25leGnDs24gYSBpbnRlcm5ldCwgcG9yIGZhdm9yIGNvbsOpY3RlIGVsIGRpc3Bvc2l0aXZvIGEgdW5hIHJlZCBwYXJhIHNpbmNyb25pemFyIHVuYSBob2phIGRlIHJ1dGEuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1R5cG9ncmFwaHk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvUGFwZXI+XHJcbiAgICAgICAgICAgIDwvbWFpbj5cclxuICAgICAgICA8Lz5cclxuICAgICk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBQYW50YWxsYUluaWNpYWwoKXtcclxuICAgIHZhciB7Zm9yUGssIGJpZW52ZW5pZG8sIG1vZG99ID0gdXNlU2VsZWN0b3IoKHN0YXRlOkNhc29TdGF0ZSk9Pih7Li4uc3RhdGUub3BjaW9uZXMsIC4uLnN0YXRlLm1vZG8sIC4uLnN0YXRlfSkpO1xyXG4gICAgaWYoIWJpZW52ZW5pZG8pe1xyXG4gICAgICAgIHJldHVybiA8QmllbnZlbmlkYURlc3BsaWVndWUgbW9kbz17bW9kb30vPiBcclxuICAgIH1lbHNlIGlmKGZvclBrPT1udWxsKXtcclxuICAgICAgICByZXR1cm4gPEhvamFEZVJ1dGFEZXNwbGllZ3VlIC8+IFxyXG4gICAgfWVsc2V7XHJcbiAgICAgICAgcmV0dXJuIDxGb3JtdWxhcmlvRGVzcGxpZWd1ZSBmb3JQaz17Zm9yUGt9Lz5cclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGRtUGFudGFsbGFJbmljaWFsU2luQ2FyZ2EoKXtcclxuICAgIHRyeXtcclxuICAgICAgICBhd2FpdCBsb2FkQ1NTKEJPT1RTVFJBUF81XzFfM19TUkMpO1xyXG4gICAgfWNhdGNoKGVycil7XHJcbiAgICAgICAgdGhyb3coZXJyKVxyXG4gICAgfVxyXG4gICAgUmVhY3RET00ucmVuZGVyKFxyXG4gICAgICAgIDxQYW50YWxsYUluaWNpYWxTaW5DYXJnYS8+LFxyXG4gICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtYWluX2xheW91dCcpXHJcbiAgICApXHJcbn1cclxuXHJcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBkZXNwbGVnYXJGb3JtdWxhcmlvQWN0dWFsKG9wdHM6e21vZG9EZW1vOmJvb2xlYW4sIGZvclBrUmFpej86Rm9yUGtSYWl6LCBvcGVyYXRpdm86SWRPcGVyYXRpdm99KXtcclxuICAgIC8vIHRyYWVyIGxvcyBtZXRhZGF0b3MgZW4gdW5hIFwiZXN0cnVjdHVyYVwiXHJcbiAgICAvLyB0cmFlciBsb3MgZGF0b3MgZGUgbG9jYWxTdG9yYWdlXHJcbiAgICAvLyB2ZXJpZmljYXIgZWwgbWFpbiBMYXlvdXRcclxuICAgIGNvbnN0IHN0b3JlID0gYXdhaXQgZG1UcmFlckRhdG9zRm9ybXVsYXJpbyhvcHRzKVxyXG4gICAgdHJ5e1xyXG4gICAgICAgIGF3YWl0IGxvYWRDU1MoQk9PVFNUUkFQXzVfMV8zX1NSQyk7XHJcbiAgICB9Y2F0Y2goZXJyKXtcclxuICAgICAgICB0aHJvdyhlcnIpXHJcbiAgICB9XHJcbiAgICBSZWFjdERPTS5yZW5kZXIoXHJcbiAgICAgICAgPFJlbmRlclByaW5jaXBhbCBzdG9yZT17c3RvcmV9IGRpc3BhdGNoZXJzPXtkaXNwYXRjaGVyc30gbWVuc2FqZVJldG9ybm89e29wdHMuZm9yUGtSYWl6P1wiVm9sdmVyIGFsIGZvcm11bGFyaW9cIjpcIlZvbHZlciBhIGxhIGhvamEgZGUgcnV0YVwifT5cclxuICAgICAgICAgICAgPE9wZW5lZFRhYnMvPlxyXG4gICAgICAgICAgICA8QXBwRG1FbmN1Lz5cclxuICAgICAgICA8L1JlbmRlclByaW5jaXBhbD4sXHJcbiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21haW5fbGF5b3V0JylcclxuICAgIClcclxufVxyXG5cclxuaWYodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpe1xyXG4gICAgLy8gQHRzLWlnbm9yZSBwYXJhIGhhY2VybG9cclxuICAgIHdpbmRvdy5kZXNwbGVnYXJGb3JtdWxhcmlvQWN0dWFsID0gZGVzcGxlZ2FyRm9ybXVsYXJpb0FjdHVhbDtcclxuICAgIC8vIEB0cy1pZ25vcmUgcGFyYSBoYWNlcmxvXHJcbiAgICB3aW5kb3cuZG1QYW50YWxsYUluaWNpYWxTaW5DYXJnYSA9IGRtUGFudGFsbGFJbmljaWFsU2luQ2FyZ2E7XHJcbn1cclxuXHJcblxyXG5mdW5jdGlvbiBsb2FkSW5zdGFuY2UoKXtcclxuICAgIGlmKHR5cGVvZiBCcm9hZGNhc3RDaGFubmVsID09PSAndW5kZWZpbmVkJyl7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdmFyIGJjID0gbmV3IEJyb2FkY2FzdENoYW5uZWwoJ2NvbnRhZG9yJyk7XHJcbiAgICB2YXIgbXlJZD1TdHJpbmcuZnJvbUNvZGVQb2ludCgxMDArTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKjEwMDApKStNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqMTAwKS8vKyctJytuZXcgRGF0ZSgpLmdldFRpbWUoKTtcclxuICAgIGFsbE9wZW5lZFRhYnNbbXlJZF09MTtcclxuICAgIGluZm9PcGVuZWRUYWJzLm15SWQ9bXlJZDtcclxuICAgIHZhciBldmVudCA9IG5ldyBFdmVudCgnbXktdGFicycpO1xyXG4gICAgYmMub25tZXNzYWdlPWZ1bmN0aW9uKGV2KXtcclxuICAgICAgICBpZihldi5kYXRhLnF1ZT09J3NveScpe1xyXG4gICAgICAgICAgICBpZighYWxsT3BlbmVkVGFic1tldi5kYXRhLmlkXSl7XHJcbiAgICAgICAgICAgICAgICBhbGxPcGVuZWRUYWJzW2V2LmRhdGEuaWRdPTA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYWxsT3BlbmVkVGFic1tldi5kYXRhLmlkXSsrO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZihldi5kYXRhLnF1ZT09J3VubG9hZCcpe1xyXG4gICAgICAgICAgICBkZWxldGUgYWxsT3BlbmVkVGFic1tldi5kYXRhLmlkXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYoZXYuZGF0YS5xdWU9PSdsb2FkJyl7XHJcbiAgICAgICAgICAgIGFsbE9wZW5lZFRhYnNbZXYuZGF0YS5pZF09MTtcclxuICAgICAgICAgICAgYmMucG9zdE1lc3NhZ2Uoe3F1ZTonc295JyxpZDpteUlkfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGluZm9PcGVuZWRUYWJzLm90aGVyVGFic05hbWVzPWxpa2VBcihhbGxPcGVuZWRUYWJzKS5maWx0ZXIoKF8saWQpPT5pZCE9bXlJZCkuam9pbignLCcpO1xyXG4gICAgICAgIHdpbmRvdy5kaXNwYXRjaEV2ZW50KGV2ZW50KTtcclxuICAgIH07XHJcbiAgICBiYy5wb3N0TWVzc2FnZSh7cXVlOidsb2FkJyxpZDpteUlkfSk7XHJcbiAgICB3aW5kb3cuZGlzcGF0Y2hFdmVudChldmVudCk7XHJcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigndW5sb2FkJyxmdW5jdGlvbigpe1xyXG4gICAgICAgIGJjLnBvc3RNZXNzYWdlKHtxdWU6J3VubG9hZCcsaWQ6bXlJZH0pO1xyXG4gICAgICAgIHdpbmRvdy5kaXNwYXRjaEV2ZW50KGV2ZW50KTtcclxuICAgIH0pXHJcbiAgICAvL21vc3RyYXJRdWllbmVzU29tb3MoKTtcclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IHNldExpYnJlRGVzcGxpZWd1ZSA9IChsaWJyZTpMaWJyZURlc3BsaWVndWVUeXBlKT0+TGlicmVEZXNwbGllZ3VlID0gbGlicmVcclxuXHJcbnNldExpYnJlRGVzcGxpZWd1ZSgocHJvcHM6e1xyXG4gICAga2V5OnN0cmluZ1xyXG4gICAgY2FzaWxsZXJvOkxpYnJlXHJcbiAgICBmb3JtdWxhcmlvOkZvcm11bGFyaW9cclxuICAgIGZvclBrOkZvclBrXHJcbn0pPT48ZGl2IGtleT17cHJvcHMua2V5fSBpZD17cHJvcHMuY2FzaWxsZXJvLmlkX2Nhc2lsbGVyb30+ZXN0ZSBjYXNpbGxlcm8gZGViZSByZWRlZmluaXJzZSBlbiBsYSBBUFAgZmluYWwgeSBzdSB1c28gZXMgZXhjbHVzaXZvIGRlbCDDoXJlYSBpbmZvcm3DoXRpY2E8L2Rpdj4pXHJcblxyXG5zZXRDYWxjdWxhclZhcmlhYmxlcygocmVzcHVlc3Rhc1JhaXo6UmVzcHVlc3Rhc1JhaXosIGZvclBrOkZvclBrKT0+e1xyXG4gICAgdHlwZSBDb25maWdQYWRyZSA9IHtcclxuICAgICAgICB1YVBlcnNvbmFzOiBJZFVuaWRhZEFuYWxpc2lzXHJcbiAgICAgICAgdmFyU2V4b1BlcnNvbmE6IElkVmFyaWFibGVcclxuICAgICAgICB2YXJOb21icmVQZXJzb25hOiBJZFZhcmlhYmxlXHJcbiAgICAgICAgdmFyTG9zTm9tYnJlczogSWRWYXJpYWJsZVxyXG4gICAgfVxyXG4gICAgdmFyIGVzdHJ1Y3R1cmEgPSBnZXRFc3RydWN0dXJhKCk7XHJcbiAgICB2YXIgYXV0b0NhcmdhclBlcnNvbmFzID0gKGNvbmZpZ1BhZHJlOiBDb25maWdQYWRyZSAsdWFQYWRyZVBlcnNvbmFzOklkVW5pZGFkQW5hbGlzaXMsIGVzdHJ1Y3R1cmE6RXN0cnVjdHVyYSk9PntcclxuICAgICAgICB2YXIgbGVlck5vbWJyZXMgPSAocmVzcHVlc3Rhc1VBUGFkcmU6UmVzcHVlc3RhcywgY29uZmlnUGFkcmU6Q29uZmlnUGFkcmUpPT57XHJcbiAgICAgICAgICAgIGlmKCFyZXNwdWVzdGFzVUFQYWRyZVtjb25maWdQYWRyZS51YVBlcnNvbmFzXSB8fCBlbXB0eShyZXNwdWVzdGFzVUFQYWRyZVtjb25maWdQYWRyZS51YVBlcnNvbmFzXSkgfHwgcmVzcHVlc3Rhc1VBUGFkcmVbY29uZmlnUGFkcmUudWFQZXJzb25hc11bMF1bY29uZmlnUGFkcmUudmFyU2V4b1BlcnNvbmFdID09IG51bGwpe1xyXG4gICAgICAgICAgICAgICAgdmFyIGxvc05vbWJyZXMgPSByZXNwdWVzdGFzVUFQYWRyZVtjb25maWdQYWRyZS52YXJMb3NOb21icmVzXSBhcyBzdHJpbmdcclxuICAgICAgICAgICAgICAgIGlmKGxvc05vbWJyZXMgIT0gbnVsbCl7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYoIXJlc3B1ZXN0YXNVQVBhZHJlW2NvbmZpZ1BhZHJlLnVhUGVyc29uYXNdKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzcHVlc3Rhc1VBUGFkcmVbY29uZmlnUGFkcmUudWFQZXJzb25hc109W107XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGxvc05vbWJyZXNcclxuICAgICAgICAgICAgICAgICAgICAgICAgLnNwbGl0KCcsJylcclxuICAgICAgICAgICAgICAgICAgICAgICAgLmZpbHRlcigobm9tYnJlOnN0cmluZyk9Pm5vbWJyZS50cmltKCkubGVuZ3RoID4gMClcclxuICAgICAgICAgICAgICAgICAgICAgICAgLmZvckVhY2goKG5vbWJyZTpzdHJpbmcsIGk6bnVtYmVyKT0+e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcHVlc3Rhc1VBUGFkcmVbY29uZmlnUGFkcmUudWFQZXJzb25hc11baV0gPSByZXNwdWVzdGFzVUFQYWRyZVtjb25maWdQYWRyZS51YVBlcnNvbmFzXVtpXSB8fCB7fTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNVQVBhZHJlW2NvbmZpZ1BhZHJlLnVhUGVyc29uYXNdW2ldW2NvbmZpZ1BhZHJlLnZhck5vbWJyZVBlcnNvbmFdID0gbm9tYnJlLnRyaW0oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZihlc3RydWN0dXJhLnVuaWRhZGVzX2FuYWxpc2lzW3VhUGFkcmVQZXJzb25hc10pe1xyXG4gICAgICAgICAgICBpZih1YVBhZHJlUGVyc29uYXMgPT0gJ3ZpdmllbmRhcycpe1xyXG4gICAgICAgICAgICAgICAgbGVlck5vbWJyZXMocmVzcHVlc3Rhc1JhaXosY29uZmlnUGFkcmUpXHJcbiAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgZm9yKHZhciByZXNwdWVzdGFzVUFQYWRyZSBvZiBpdGVyYXRvcihyZXNwdWVzdGFzUmFpelt1YVBhZHJlUGVyc29uYXNdPz9bXSkpe1xyXG4gICAgICAgICAgICAgICAgICAgIGxlZXJOb21icmVzKHJlc3B1ZXN0YXNVQVBhZHJlLGNvbmZpZ1BhZHJlKVxyXG4gICAgICAgICAgICAgICAgfSAgIFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgdmFyIHVhc0l0ZXJhcjoge1xyXG4gICAgICAgIFtrZXkgaW4gSWRVbmlkYWRBbmFsaXNpc106Q29uZmlnUGFkcmVcclxuICAgIH07IFxyXG4gICAgdmFyIGNvbmZpZ0VuY3UgOiBDb25maWdQYWRyZSA9IHsgXHJcbiAgICAgICAgdWFQZXJzb25hczogJ3BlcnNvbmFzJyxcclxuICAgICAgICB2YXJTZXhvUGVyc29uYTogJ3NleG8nIGFzIElkVmFyaWFibGUsXHJcbiAgICAgICAgdmFyTm9tYnJlUGVyc29uYTogJ25vbWJyZScgYXMgSWRWYXJpYWJsZSxcclxuICAgICAgICB2YXJMb3NOb21icmVzOiBcImxvc19ub21icmVzXCIgYXMgSWRWYXJpYWJsZVxyXG4gICAgfTtcclxuICAgIHZhciBjb25maWdTdXBlIDogQ29uZmlnUGFkcmUgPSB7IFxyXG4gICAgICAgIHVhUGVyc29uYXM6ICdwZXJzb25hc19zdXAnIGFzIElkVW5pZGFkQW5hbGlzaXMsXHJcbiAgICAgICAgdmFyU2V4b1BlcnNvbmE6ICdzZXhvX3N1cCcgIGFzIElkVmFyaWFibGUsXHJcbiAgICAgICAgdmFyTm9tYnJlUGVyc29uYTogJ25vbWJyZV9zdXAnICBhcyBJZFZhcmlhYmxlLFxyXG4gICAgICAgIHZhckxvc05vbWJyZXM6IFwibm9tYnJlc19jb21wb25lbnRlc19zdXBcIiAgYXMgSWRWYXJpYWJsZVxyXG4gICAgfTtcclxuXHJcbiAgICBpZihlc3RydWN0dXJhLmNvblJlYUhvZ2FyKXtcclxuICAgICAgICB1YXNJdGVyYXIgPSB7XHJcbiAgICAgICAgICAgIGhvZ2FyZXM6IGNvbmZpZ0VuY3UsXHJcbiAgICAgICAgICAgIFtcImhvZ2FyZXNfc3VwXCIgYXMgSWRVbmlkYWRBbmFsaXNpc10gOiBjb25maWdTdXBlXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxpa2VBcih1YXNJdGVyYXIpLmZvckVhY2goKGNvbmZpZ1BhZHJlLHVhUGFkcmUpPT57XHJcbiAgICAgICAgICAgIGF1dG9DYXJnYXJQZXJzb25hcyhjb25maWdQYWRyZSx1YVBhZHJlLCBlc3RydWN0dXJhKVxyXG4gICAgICAgICAgICBcclxuICAgICAgICB9KVxyXG4gICAgfWVsc2V7XHJcbiAgICAgICAgdmFyIGNvbmZpZ1BhZHJlczogQ29uZmlnUGFkcmVbXSA9IFtjb25maWdFbmN1LGNvbmZpZ1N1cGVdO1xyXG4gICAgICAgIGNvbmZpZ1BhZHJlcy5mb3JFYWNoKChjb25maWdQYWRyZSk9PntcclxuICAgICAgICAgICAgYXV0b0NhcmdhclBlcnNvbmFzKGNvbmZpZ1BhZHJlLCd2aXZpZW5kYXMnLCBlc3RydWN0dXJhKVxyXG4gICAgICAgIH0pICAgICAgICBcclxuICAgIH1cclxuICAgIHJlc3B1ZXN0YXNSYWl6LnZkb21pbmlvPWdldERhdG9zQnlQYXNzKCkuaW5mb3JtYWNpb25IZHJbZm9yUGtbZXN0cnVjdHVyYS5tYWluVERQS11dLnRlbS5kb21pbmlvO1xyXG4gICAgLy9UT0RPOiBNRUpPUkFSIEVOIEFMR1VOIE1PTUVOVE8gRUwgQk9UT04gTElTVE9cclxuICAgIGxldCB0b3RhbEggPSByZXNwdWVzdGFzUmFpelsndG90YWxfaCcgYXMgSWRWYXJpYWJsZV07XHJcbiAgICByZXNwdWVzdGFzUmFpelsnJEIuRjpTMScgYXMgSWRWYXJpYWJsZV0gPSAocmVzcHVlc3Rhc1JhaXpbJ2hvZ2FyZXMnXSB8fCBbXSkubGVuZ3RoID09IHRvdGFsSD8nb2snOm51bGw7XHJcbiAgICBsZXQgdG90YWxIc3VwID0gcmVzcHVlc3Rhc1JhaXpbJ3RvdGFsX2hfc3VwJyBhcyBJZFZhcmlhYmxlXTtcclxuICAgIHJlc3B1ZXN0YXNSYWl6WyckQi5GOlMxX1NVUCcgYXMgSWRWYXJpYWJsZV0gPSAocmVzcHVlc3Rhc1JhaXpbJ2hvZ2FyZXNfc3VwJyBhcyBJZFVuaWRhZEFuYWxpc2lzXSB8fCBbXSkubGVuZ3RoID09IHRvdGFsSHN1cD8nb2snOm51bGw7XHJcbn0pXHJcblxyXG53aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIGZ1bmN0aW9uKCl7XHJcbiAgICBsb2FkSW5zdGFuY2UoKVxyXG59KVxyXG4vL0ZJTiBDT05UUk9MIFBFU1RBw5FBU1xyXG5cclxuZnVuY3Rpb24gbG9hZENTUyhjc3NVUkw6c3RyaW5nLCBpZD86c3RyaW5nKTpQcm9taXNlPHZvaWQ+e1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKCggcmVzb2x2ZSwgcmVqZWN0ICk9PntcclxuICAgICAgICB2YXIgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICdsaW5rJyApO1xyXG4gICAgICAgIGxpbmsucmVsICA9ICdzdHlsZXNoZWV0JztcclxuICAgICAgICBsaW5rLmhyZWYgPSBjc3NVUkw7XHJcbiAgICAgICAgbGluay5pZCA9IGlkIHx8IGNzc1VSTDtcclxuICAgICAgICBkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKCBsaW5rICk7XHJcbiAgICAgICAgbGluay5vbmxvYWQgPSAoKT0+eyBcclxuICAgICAgICAgICAgcmVzb2x2ZSgpOyBcclxuICAgICAgICAgICAgY29uc29sZS5sb2coYHRyYWUgJHtjc3NVUkx9YCk7XHJcbiAgICAgICAgfTtcclxuICAgICAgICBsaW5rLm9uZXJyb3I9KGVycik9PntcclxuICAgICAgICAgICAgY29uc29sZS5sb2coJ2Vycm9yIGNhcmdhbmRvIGVsIGVzdGlsbycsIGVycilcclxuICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihgcHJvYmxlbWEgY2FyZ2FuZG8gZXN0aWxvICR7Y3NzVVJMfWApKVxyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG59XHJcblxyXG5mdW5jdGlvbiByZW1vdmVDU1NCeUlkKGlkOnN0cmluZyl7XHJcbiAgICB2YXIgbGlua05vZGUgPSAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpO1xyXG4gICAgbGlua05vZGU/LnBhcmVudE5vZGU/LnJlbW92ZUNoaWxkKGxpbmtOb2RlKTtcclxufVxyXG5cclxuY29uc3QgQk9PVFNUUkFQXzVfMV8zX1NSQyA9ICdjc3MvYm9vdHN0cmFwLm1pbi5jc3MnOyJdfQ==
|
|
1610
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVuZGVyLWZvcm11bGFyaW8uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdW5sb2dnZWQvcmVuZGVyLWZvcm11bGFyaW8udHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBQUEsK0JBQStCO0lBQy9CLHNDQUFzQztJQUN0QyxxREFRMEI7SUFDMUIsbUNBZ0JpQjtJQUNqQiwyREFhNEI7SUFDNUIseURBSTRCO0lBQzVCLGlDQUE2RDtJQUM3RCw2Q0FBdUQ7SUFDdkQscUNBQXVEO0lBQ3ZELCtDQUE2QztJQUM3QywyQ0FBd0M7SUFFeEMsNENBTTJCO0lBSTNCLDJEQWM0QjtJQUU1QiwyQ0FBeUM7SUFFekMsTUFBTSxjQUFjLEdBQUcsRUFBRSxDQUFDO0lBRzFCLFNBQVMsY0FBYyxDQUFDLElBQWdCLEVBQUUsV0FBNkM7UUFDbkYsSUFBRyxPQUFPLElBQUksSUFBSSxRQUFRO1lBQUUsT0FBTyxTQUFTLENBQUM7UUFDN0MsSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFDLFNBQVMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsRUFBQyxLQUFLLENBQUMsQ0FBQztRQUN0RSxJQUFJLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUMsQ0FBQyxJQUFJLEVBQUMsRUFBRSxDQUFBLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFDLENBQUMsSUFBSSxFQUFDLEVBQUUsQ0FBQSxJQUFJLElBQUksR0FBRyxDQUFDLENBQUM7UUFDekYsSUFBRyxDQUFDLFdBQVcsSUFBSSxJQUFJO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFDckM7O1VBRUU7SUFDTixDQUFDO0lBRUQsTUFBTSxXQUFXLEdBQUcsS0FBSyxDQUFDLENBQUMscUpBQXFKO0lBQ2hMLGdJQUFnSTtJQUVoSSxNQUFNLG1CQUFtQixHQUFHLGtCQUFrQixDQUFD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UUFDNUMsTUFBQSxRQUFRLGFBQVIsUUFBUSx1QkFBUixRQUFRLENBQUUsVUFBVSwwQ0FBRSxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUVELE1BQU0sbUJBQW1CLEdBQUcsdUJBQXVCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcclxuaW1wb3J0ICogYXMgUmVhY3RET00gZnJvbSBcInJlYWN0LWRvbVwiO1xyXG5pbXBvcnQgeyAgXHJcbiAgICBSZW5kZXJQcmluY2lwYWwsIFxyXG4gICAgYWRhcHRhclRpcG9WYXJDYXNpbGxlcm8sXHJcbiAgICBJQ09OLFxyXG4gICAgZm9jdXNUb0lkLFxyXG4gICAgc2Nyb2xsVG9Ub3AsXHJcbiAgICBzY3JvbGxUb0JvdHRvbSxcclxuICAgIG1hdGVyaWFsSW9JY29uc1N2Z1BhdGhcclxufSBmcm9tIFwiLi9yZW5kZXItZ2VuZXJhbFwiO1xyXG5pbXBvcnQge0Jsb3F1ZSwgQm90b25Gb3JtdWxhcmlvLCBcclxuICAgIENhc2lsbGVyb0Jhc2UsIENhc29TdGF0ZSwgQ29uanVudG9QcmVndW50YXMsIENvbnNpc3RlbmNpYSwgXHJcbiAgICBFc3RhZG9DYXJnYSwgRmlsdHJvLCBGb3JQaywgRm9yUGtSYWl6LCBGb3JtdWxhcmlvLCBcclxuICAgIElkRm9ybXVsYXJpbywgSWRQcmVndW50YSwgSWRUYXJlYSwgSWRWYXJpYWJsZSwgSW5mb0Zvcm11bGFyaW8sXHJcbiAgICBNb2RvRGVzcGxpZWd1ZSxcclxuICAgIE9wY2lvbiwgT3BjaW9uTXVsdGlwbGUsIFBsYWluRm9yUGssIFxyXG4gICAgUHJlZ3VudGEsIFByZWd1bnRhQ29uT3BjaW9uZXMsIFByZWd1bnRhU2ltcGxlLCBcclxuICAgIFJlc3B1ZXN0YXMsIFJlc3B1ZXN0YUxhc1VBLCBSZXNwdWVzdGFzUmFpeiwgVmFsb3IsIFRFTSwgSWRDYXJnYSwgQ2FyZ2EsIElkRmluLCBJZFVuaWRhZEFuYWxpc2lzLFxyXG4gICAgTW9kb0FsbWFjZW5hbWllbnRvLFxyXG4gICAgdG9QbGFpbkZvclBrLFxyXG4gICAgSWRDYXNpbGxlcm8sXHJcbiAgICBQcmVndW50YUNvblNpTm8sXHJcbiAgICBUZXh0bywgRXN0cnVjdHVyYSwgSW5mb3JtYWNpb25IZHIsIERhdG9zSGRyVWFQcGFsLCBDb25maWd1cmFjaW9uU29ydGVvRm9ybXVsYXJpbywgUmVzdW1lbkVzdGFkbywgRGF0b3NCeVBhc3NQZXJzaXN0aWJsZXMsIElkT3BlcmF0aXZvLCBJZEVuYywgTGlicmUsIFVuaWRhZEFuYWxpc2lzLFxyXG4gICAgaXRlcmF0b3IsIGVtcHR5LCBDb25maWd1cmFjaW9uSGFiaWxpdGFyQm90b25Gb3JtdWxhcmlvLFxyXG4gICAgQ2FtcG9Qa1JhaXosXHJcbiAgICBWYWx1ZVBrUmFpelxyXG59IGZyb20gXCIuL3RpcG9zXCI7XHJcbmltcG9ydHsgXHJcbiAgICBhY2Npb25fYWJyaXJfZm9ybXVsYXJpbyxcclxuICAgIGFjY2lvbl9ib3JyYXJfZm9ybXVsYXJpbyxcclxuICAgIGNhbGN1bGFyQWN0dWFsQkYsXHJcbiAgICBjYWxjdWxhckRpc2FibGVkQkYsXHJcbiAgICBjYWxjdWxhclBlcm1pdGVCb3JyYXJCRixcclxuICAgIGNhbGN1bGFyUmVzdW1lblZpdmllbmRhLFxyXG4gICAgY3JlYXJFbmN1ZXN0YSxcclxuICAgIGdldERhdG9zQnlQYXNzLFxyXG4gICAgZ2V0Rm9ybXVsYXJpb3NGb3JWYWx1ZVBrUmFpeixcclxuICAgIGdldE1haW5Gb3JtRm9yVml2aWVuZGEsXHJcbiAgICBpbnRlbnRhckJhY2t1cCxcclxuICAgIHNldENhbGN1bGFyVmFyaWFibGVzXHJcbn0gZnJvbSBcIi4vYnlwYXNzLWZvcm11bGFyaW9cIlxyXG5pbXBvcnQgeyBkbVRyYWVyRGF0b3NGb3JtdWxhcmlvLCBkaXNwYXRjaGVycywgXHJcbiAgICBnb3RvU2luY3Jvbml6YXIsXHJcbiAgICBnZXRDYWNoZVZlcnNpb24sXHJcbiAgICBnb3RvQ29uc2lzdGlyLFxyXG59IGZyb20gXCIuL3JlZHV4LWZvcm11bGFyaW9cIjtcclxuaW1wb3J0IHsgdXNlU3RhdGUsIHVzZUVmZmVjdCwgdXNlTGF5b3V0RWZmZWN0IH0gZnJvbSBcInJlYWN0XCI7XHJcbmltcG9ydCB7IHVzZVNlbGVjdG9yLCB1c2VEaXNwYXRjaCB9IGZyb20gXCJyZWFjdC1yZWR1eFwiOyBcclxuaW1wb3J0IHsgc3RyaWN0IGFzIGxpa2VBciwgYmVpbmdBcnJheSB9IGZyb20gXCJsaWtlLWFyXCI7XHJcbmltcG9ydCB7c2xlZXAsIGNvYWxlc2NlfSBmcm9tIFwiYmVzdC1nbG9iYWxzXCI7XHJcbmltcG9ydCB7IHVuZXhwZWN0ZWQgfSBmcm9tIFwiY2FzdC1lcnJvclwiO1xyXG5cclxuaW1wb3J0IHtcclxuICAgIEFwcEJhciwgQnV0dG9uR3JvdXAsIENpcmN1bGFyUHJvZ3Jlc3MsIENoZWNrYm94LCBcclxuICAgIERpYWxvZywgRGlhbG9nQWN0aW9ucywgRGlhbG9nQ29udGVudCwgRGlhbG9nQ29udGVudFRleHQsIFxyXG4gICAgRGlhbG9nVGl0bGUsIERpdmlkZXIsIEZhYiwgSWNvbkJ1dHRvbixcclxuICAgIE1lbnUsIE1lbnVJdGVtLCBQYXBlciwgUG9wb3ZlcixcclxuICAgIFRhYmxlLCBUYWJsZUJvZHksIFRhYmxlQ2VsbCwgVGFibGVIZWFkLCBUYWJsZVJvdywgVG9vbGJhciwgQ3NzQmFzZWxpbmVQcm9wc1xyXG59IGZyb20gXCJAbWF0ZXJpYWwtdWkvY29yZVwiO1xyXG5pbXBvcnQgeyBFc3RhZG9WYXJpYWJsZSwgRm9ybVN0cnVjdHVyZVN0YXRlIH0gZnJvbSBcInJvdy12YWxpZGF0b3JcIjtcclxuaW1wb3J0IHsgQ1NTUHJvcGVydGllcyB9IGZyb20gXCJAbWF0ZXJpYWwtdWkvY29yZS9zdHlsZXMvd2l0aFN0eWxlc1wiO1xyXG5cclxuaW1wb3J0IHsgXHJcbiAgICByZWdpc3RyYXJFbGVtZW50bywgc2V0QXR0ckRpc3RpbnRvLCBzZXRWYWxvckRpc3RpbnRvLCBkaXNwYXRjaEJ5UGFzcywgXHJcbiAgICBnZXREaXJ0eSwgZ2V0RmVlZGJhY2tSb3dWYWxpZGF0b3IsXHJcbiAgICBnZXRGdW5jaW9uSGFiaWxpdGFyLCBcclxuICAgIGdldEVzdHJ1Y3R1cmEsIFxyXG4gICAgZGVmT3BlcmF0aXZvLFxyXG4gICAgdm9sY2Fkb0luaWNpYWxFbGVtZW50b3NSZWdpc3RyYWRvcyxcclxuICAgIG51bWJlck9yU3RyaW5nSW5jSWZBcnJheSwgXHJcbiAgICBjYWxjdWxhckVsZW1lbnRvRW5mb2NhZG8sXHJcbiAgICBhY2Npb25fcmVnaXN0cmFyX3Jlc3B1ZXN0YSxcclxuICAgIGFjY2lvbl9pZF9wcmVndW50YSxcclxuICAgIGFjY2lvbl9hZ3JlZ2FyX2Zvcm11bGFyaW8sXHJcbiAgICBOT19DQU1CSUFSX19WRVJJRklDQVJfU0lfRVNfTkVDRVNBUklPLFxyXG4gICAgTk9fQ0FNQklBUl9fU09MT19UUkFFUl9TVEFUVVNcclxufSBmcm9tIFwiLi9ieXBhc3MtZm9ybXVsYXJpb1wiXHJcblxyXG5pbXBvcnQge2h0bWwsIEh0bWxUYWd9IGZyb20gXCJqcy10by1odG1sXCI7XHJcblxyXG5jb25zdCBERUxBWV9TQ1JPTExfMyA9IDUwO1xyXG5cclxuZnVuY3Rpb24gYnJlYWtlYWJsZVRleHQodGV4dDpzdHJpbmd8bnVsbCk6c3RyaW5nfHVuZGVmaW5lZDtcclxuZnVuY3Rpb24gYnJlYWtlYWJsZVRleHQodGV4dDpzdHJpbmd8bnVsbCwgZGljY2lvbmFyaW8/OntbY2xhdmU6c3RyaW5nXTpSZWFjdC5SZWFjdE5vZGV9KXtcclxuICAgIGlmKHR5cGVvZiB0ZXh0ICE9IFwic3RyaW5nXCIpIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKC9cXC8vZyxcIi9cXHUyMDYzXCIpLnJlcGxhY2UoL1xcL1xcdTIwNjMoXFx3KVxcYi9nLCcvJDEnKTtcclxuICAgIHRleHQgPSB0ZXh0LnJlcGxhY2UoL19fXyovZywodG9kbyk9PmBbJHt0b2RvfV1gKS5yZXBsYWNlKC9cXEBcXHcrXFxAL2csKHRvZG8pPT5gWyR7dG9kb31dYCk7XHJcbiAgICBpZighZGljY2lvbmFyaW8gfHwgdHJ1ZSkgcmV0dXJuIHRleHQ7XHJcbiAgICAvKlxyXG4gICAgcmV0dXJuIDxzcGFuPntwYXJ0ZXMubWFwKChwYXJ0ZTpzdHJpbmcsIGk6bnVtYmVyKSA9PiA8c3BhbiBzdHlsZT17aSUyPT0xP3t0ZXh0RGVjb3JhdGlvbjpcInVuZGVybGluZVwifTp7fX0+IHtwYXJ0ZStcIiBcIn0gPC9zcGFuPil9PC9zcGFuPlxyXG4gICAgKi9cclxufVxyXG5cclxuY29uc3QgVkVSX0RPTUlOSU8gPSBmYWxzZTsgLy8gZWwgZW5jdWVzdGFkb3Igbm8gbmVjZXNpdGEgdmVyIGVsIGRvbWluaW8gZW4gY2FkYSBlbmN1ZXN0YSBwb3JxdWUgZWwgZG9taW5pbyBkZXBlbmRlIGRlbCDDoXJlYSB5IHNlIGRlZHVjZSBkZWwgcHJpbWVyIGTDrWdpdG8gZGVsIG7Dum1lcm8gZGUgZW5jdWVzdGFcclxuLy8gbm8gcG9uZXIgVkVSX0RPTUlOSU8gZW4gdHJ1ZSwgY2FtYmlhciBwb3IgdW5hIHZhcmlhYmxlIHF1ZSBzZSBmaWplIHNpIGVsIERNIGVzdMOhIGVuIG1vZG8gcHJ1ZWJhIG8gZW4gbW9kbyBcImRpc2XDsW8gY29uY2VwdHVhbFwiXHJcblxyXG5jb25zdCBJRF9CT1RPTl9WT0xWRVJfSERSID0gJ2JvdG9uLXZvbHZlci1oZHInO1xyXG5jb25zdCBJRF9CT1RPTl9DRVJSQVIgPSAnYm90b24tY2VycmFyLWVuY3Vlc3RhJztcclxuXHJcbnZhciBkZWJlU2FsdGFyOmJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbndpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgKCk9PntcclxuICAgIC8qXHJcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIChldjpLZXlib2FyZEV2ZW50KT0+e1xyXG4gICAgICAgIGRlYmVTYWx0YXIgPSBldi5rZXkgPT0gJ0VudGVyJyB8fCBldi5rZXlDb2RlID09IDEzO1xyXG4gICAgfSlcclxuICAgICovXHJcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKT0+e1xyXG4gICAgICAgIGRlYmVTYWx0YXIgPSBmYWxzZTtcclxuICAgIH0pXHJcbn0pXHJcblxyXG4vLyAvKlxyXG5cclxudHlwZSBDb21tb25BdHRyaWJ1dGVzID0ge2NsYXNzTmFtZT86c3RyaW5nLHN0eWxlPzpDU1NQcm9wZXJ0aWVzLGlkPzpzdHJpbmcsIHRhYkluZGV4PzpudW1iZXJ9IC8vIENTU1Byb3BlcnRpZXNcclxudHlwZSBDb2xvclZhbHVlcyA9ICdwcmltYXJ5J3wnc2Vjb25kYXJ5J3wnZGVmYXVsdCd8J2luaGVyaXQnXHJcblxyXG5leHBvcnQgdHlwZSBMaWJyZURlc3BsaWVndWVUeXBlID0gKHByb3BzOntcclxuICAgIGtleTpzdHJpbmdcclxuICAgIGNhc2lsbGVybzpMaWJyZVxyXG4gICAgZm9ybXVsYXJpbzpGb3JtdWxhcmlvXHJcbiAgICBmb3JQazpGb3JQa1xyXG59KT0+SlNYLkVsZW1lbnQ7XHJcblxyXG52YXIgTGlicmVEZXNwbGllZ3VlOiBMaWJyZURlc3BsaWVndWVUeXBlXHJcblxyXG5jb25zdCBCdXR0b24gPSAoe3ZhcmlhbnQsIG9uQ2xpY2ssIGRpc2FibGVkLCBjaGlsZHJlbiwgY2xhc3NOYW1lLCBjb2xvciwgc2l6ZSwgXHJcbiAgICAgICAgZGlzYWJsZUVsZXZhdGlvbiwgZGlzYWJsZUZvY3VzUmlwcGxlLCBkaXNhYmxlUmlwcGxlLCBcclxuICAgICAgICAuLi5vdGhlclxyXG4gICAgfTp7XHJcbiAgICB2YXJpYW50PzpzdHJpbmcsXHJcbiAgICBjb2xvcj86Q29sb3JWYWx1ZXMsXHJcbiAgICBvbkNsaWNrPzpSZWFjdC5Nb3VzZUV2ZW50SGFuZGxlcjxIVE1MQnV0dG9uRWxlbWVudD4sIC8vICAoZXZlbnQ6TW91c2VFdmVudC8qIDxIVE1MQnV0dG9uRWxlbWVudCwgTW91c2VFdmVudD4qLyk9PnZvaWQsXHJcbiAgICBkaXNhYmxlZD86Ym9vbGVhblxyXG4gICAgY2hpbGRyZW46YW55LFxyXG4gICAgY2xhc3NOYW1lPzpzdHJpbmcsXHJcbiAgICBzaXplPzonc21hbGwnLFxyXG4gICAgZGlzYWJsZUVsZXZhdGlvbj86YW55LCBkaXNhYmxlRm9jdXNSaXBwbGU/OmFueSwgZGlzYWJsZVJpcHBsZT86YW55LFxyXG59ICYgQ29tbW9uQXR0cmlidXRlcyk9PjxidXR0b24gXHJcbiAgICB7Li4ub3RoZXJ9XHJcbiAgICBjbGFzc05hbWU9e2BidG4gYnRuJHt2YXJpYW50PT0nY29udGFpbmVkJz8nJzonLScrKHZhcmlhbnQ9PSdvdXRsaW5lZCc/J291dGxpbmUnOnZhcmlhbnQpfS0keyhjb2xvcj09J2RlZmF1bHQnIHx8IGNvbG9yPT0naW5oZXJpdCc/J3NlY29uZGFyeSc6Y29sb3I9PSdzZWNvbmRhcnknPydkYW5nZXInOmNvbG9yKXx8J3NlY29uZGFyeSd9ICR7Y2xhc3NOYW1lfHwnJ30gJHtzaXplPT0nc21hbGwnPydidG4tc20nOicnfWB9XHJcbiAgICBkaXNhYmxlZD17ZGlzYWJsZWR9XHJcbiAgICBvbkNsaWNrPXtvbkNsaWNrfVxyXG4+e2NoaWxkcmVufTwvYnV0dG9uPjtcclxuXHJcbmNvbnN0IEJ1dHRvbjIgPSAoe3ZhcmlhbnQsIG9uQ2xpY2ssIGRpc2FibGVkLCBjaGlsZHJlbiwgY2xhc3NOYW1lLCBjb2xvciwgc2l6ZSwgLi4ub3RoZXJ9OntcclxuICAgIHZhcmlhbnQ/OnN0cmluZyxcclxuICAgIGNvbG9yPzpDb2xvclZhbHVlcyxcclxuICAgIG9uQ2xpY2s/OigpPT52b2lkLFxyXG4gICAgZGlzYWJsZWQ/OmJvb2xlYW5cclxuICAgIGNoaWxkcmVuOmFueSxcclxuICAgIGNsYXNzTmFtZT86c3RyaW5nLFxyXG4gICAgc2l6ZT86J3NtYWxsJyxcclxuICAgICRhdHRycz86e31cclxufSAmIENvbW1vbkF0dHJpYnV0ZXMpPT5odG1sLmJ1dHRvbih7XHJcbiAgICAuLi5vdGhlcixcclxuICAgIGNsYXNzOiBgYnRuIGJ0biR7dmFyaWFudD09J2NvbnRhaW5lZCc/Jyc6Jy0nKyh2YXJpYW50PT0nb3V0bGluZWQnPydvdXRsaW5lJzp2YXJpYW50KX0tJHsoY29sb3I9PSdkZWZhdWx0JyB8fCBjb2xvcj09J2luaGVyaXQnPydzZWNvbmRhcnknOmNvbG9yPT0nc2Vjb25kYXJ5Jz8nZGFuZ2VyJzpjb2xvcil8fCdzZWNvbmRhcnknfSAke2NsYXNzTmFtZXx8Jyd9ICR7c2l6ZT09J3NtYWxsJz8nYnRuLXNtJzonJ31gLFxyXG4gICAgZGlzYWJsZWQsXHJcbiAgICAkb246e2NsaWNrOm9uQ2xpY2t9XHJcbn0sIGNoaWxkcmVuKTtcclxuXHJcblxyXG5jb25zdCBUZXh0RmllbGQgPSAocHJvcHM6e1xyXG4gICAgaWQ6c3RyaW5nLFxyXG4gICAgZGlzYWJsZWQ/OmJvb2xlYW4sXHJcbiAgICBjbGFzc05hbWU/OnN0cmluZyxcclxuICAgIGF1dG9Gb2N1cz86Ym9vbGVhbixcclxuICAgIGZ1bGxXaWR0aDpib29sZWFuXHJcbiAgICBpbnB1dFByb3BzPzphbnksXHJcbiAgICB2YWx1ZT86YW55LFxyXG4gICAgdHlwZTphbnksXHJcbiAgICBsYWJlbD86c3RyaW5nLFxyXG4gICAgZXJyb3I/OmJvb2xlYW4sXHJcbiAgICBoZWxwZXJUZXh0PzpzdHJpbmcsXHJcbiAgICBtdWx0aWxpbmU/OmJvb2xlYW4sXHJcbiAgICBvbkNoYW5nZT86KGV2ZW50OmFueSk9PnZvaWQsXHJcbiAgICBvbkZvY3VzPzooZXZlbnQ6YW55KT0+dm9pZCxcclxuICAgIG9uQmx1cj86KGV2ZW50OmFueSwgdmFsb3I6YW55KT0+dm9pZCxcclxuICAgIC8vIG9uS2V5RG93bj86KGV2ZW50OktleWJvYXJkRXZlbnQpPT52b2lkIC8vIEtleWJvYXJkRXZlbnRIYW5kbGVyPEhUTUxJbnB1dEVsZW1lbnQ+XHJcbiAgICBvbktleURvd24/OlJlYWN0LktleWJvYXJkRXZlbnRIYW5kbGVyPEhUTUxJbnB1dEVsZW1lbnQ+XHJcbn0pPT48aW5wdXRcclxuICAgIGlkPXtwcm9wcy5pZH1cclxuICAgIGRpc2FibGVkPXtwcm9wcy5kaXNhYmxlZH1cclxuICAgIGNsYXNzTmFtZT17cHJvcHMuY2xhc3NOYW1lfVxyXG4gICAgYXV0b0ZvY3VzPXtwcm9wcy5hdXRvRm9jdXN9XHJcbiAgICB2YWx1ZT17cHJvcHMudmFsdWV9IFxyXG4gICAgdHlwZT17cHJvcHMudHlwZX1cclxuICAgIG9uQ2hhbmdlPXtwcm9wcy5vbkNoYW5nZX1cclxuICAgIG9uRm9jdXM9e3Byb3BzLm9uRm9jdXN9XHJcbiAgICBvbkJsdXI9eyhldnQpPT5wcm9wcy5vbkJsdXI/LihldnQsIGV2dC50YXJnZXQudmFsdWUpfVxyXG4gICAgb25LZXlEb3duPXtwcm9wcy5vbktleURvd259XHJcbiAgICBwbGFjZWhvbGRlcj17cHJvcHMubGFiZWx9XHJcbi8+O1xyXG5cclxuY29uc3QgVHlwb2dyYXBoeSA9ICh7Y2hpbGRyZW4sIC4uLm90aGVyc306e1xyXG4gICAgY2hpbGRyZW46YW55LFxyXG4gICAgY29tcG9uZW50PzpzdHJpbmdcclxuICAgIHZhcmlhbnQ/OidoNidcclxufSZDb21tb25BdHRyaWJ1dGVzKT0+UmVhY3QuY3JlYXRlRWxlbWVudChvdGhlcnMudmFyaWFudHx8b3RoZXJzLmNvbXBvbmVudHx8J2Rpdicsb3RoZXJzLGNoaWxkcmVuKTtcclxuXHJcbmZ1bmN0aW9uIEdyaWQocHJvcHM6e1xyXG4gICAgY29udGFpbmVyPzpib29sZWFuLFxyXG4gICAgc3BhY2luZz86bnVtYmVyLFxyXG4gICAgaXRlbT86Ym9vbGVhbixcclxuICAgIHdyYXA/Oid3cmFwJ3wnbm93cmFwJyxcclxuICAgIGRpcmVjdGlvbj86J3Jvdyd8J2NvbHVtbidcclxuICAgIGFsaWduSXRlbXM/OidzdHJldGNoJyB8ICdmbGV4LXN0YXJ0JyB8ICdmbGV4LWVuZCcgfCAnY2VudGVyJyB8ICdiYXNlbGluZScsXHJcbiAgICBjaGlsZHJlbjphbnksXHJcbiAgICB4cz86bnVtYmVyLFxyXG4gICAgc20/Om51bWJlcixcclxufSZDb21tb25BdHRyaWJ1dGVzKXtcclxuICAgIHZhciB7Y29udGFpbmVyLCBpdGVtLCB3cmFwLCBkaXJlY3Rpb24sIGFsaWduSXRlbXMsIGNoaWxkcmVuLCBjbGFzc05hbWUsIHhzLCBzbSwgc3BhY2luZywgLi4ub3RoZXJ9ID0gcHJvcHM7XHJcbiAgICByZXR1cm4gPGRpdlxyXG4gICAgey4uLm90aGVyfVxyXG4gICAgY2xhc3NOYW1lPXtgJHtjbGFzc05hbWV8fCcnfSAke3hzIT1udWxsPydncmlkLXhzLScreHM6Jyd9ICR7c20hPW51bGw/J2dyaWQtc20tJytzbTonJ31gfVxyXG4gICAgc3R5bGU9e2NvbnRhaW5lcj97XHJcbiAgICAgICAgZGlzcGxheTonZmxleCcsXHJcbiAgICAgICAgZmxleFdyYXA6d3JhcCxcclxuICAgICAgICBmbGV4RGlyZWN0aW9uOmRpcmVjdGlvbixcclxuICAgICAgICBhbGlnbkl0ZW1zOmFsaWduSXRlbXMsXHJcbiAgICAgICAgbWFyZ2luOnNwYWNpbmchPW51bGw/c3BhY2luZyo4KydweCc6dW5kZWZpbmVkXHJcbiAgICB9OntcclxuICAgIH19XHJcbj57Y2hpbGRyZW59PC9kaXY+XHJcbn1cclxuXHJcbnZhciBwMTIgPSAncDEyJyBhcyBJZFZhcmlhYmxlO1xyXG52YXIgc3AyID0gJ3NwMicgYXMgSWRWYXJpYWJsZTtcclxudmFyIHNwMyA9ICdzcDMnIGFzIElkVmFyaWFibGU7XHJcbnZhciBzcDQgPSAnc3A0JyBhcyBJZFZhcmlhYmxlO1xyXG52YXIgc3A1ID0gJ3NwNScgYXMgSWRWYXJpYWJsZTtcclxuXHJcbnZhciBkaWNjaW9uYXJpbyA9IHt9XHJcblxyXG4vKlxyXG4vLyBjb25zdCB0YWtlRWxlbWVudE9yRGVmYXVsdDxLLCBUIGV4dGVuZHMgW0sgaW5dLCBEPigpXHJcbmZ1bmN0aW9uIGlzSW48ViwgVD4oazprZXlvZiBULCBvYmplY3Q6VCk6IG9iamVjdFtrXSBpcyBWe1xyXG4gICAgcmV0dXJuIHRydWVcclxufVxyXG4qL1xyXG5mdW5jdGlvbiB0YWtlRWxlbWVudE9yRGVmYXVsdDxWLEsgZXh0ZW5kcyBzdHJpbmcsS08gZXh0ZW5kcyBzdHJpbmc+KGs6Sywgb2JqZWN0OntbayBpbiBLT106Vn0sIGRlZmF1bHRWYWx1ZTpWKTpWe1xyXG4gICAgcmV0dXJuIGsgaW4gb2JqZWN0ID8gXHJcbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBwb3IgYWxndW5hIHJhesOzbiBUUyBubyBxdWllcmUgZW50ZW5kZXIgcXVlIHNpIGsgZXN0w6EgZW4gb2JqZWN0LCBvYmplY3Rba10gZXhpc3RlXHJcbiAgICAgICAgb2JqZWN0W2tdIFxyXG4gICAgOiBkZWZhdWx0VmFsdWVcclxufVxyXG5cclxuZnVuY3Rpb24gRGVzcGxpZWd1ZUVuY2FiZXphZG8ocHJvcHM6e2Nhc2lsbGVybzpDYXNpbGxlcm9FbmNhYmV6YWJsZSwgbGVlcj86Ym9vbGVhbn0pe1xyXG4gICAgY29uc3QgZm9yUGtOdWxsPXt9IGFzIEZvclBrO1xyXG4gICAgcmV0dXJuIDxFbmNhYmV6YWRvRGVzcGxpZWd1ZSBjYXNpbGxlcm89e3Byb3BzLmNhc2lsbGVyb30gbGVlcj17cHJvcHMubGVlcn0gZm9yUGs9e2ZvclBrTnVsbH0vPjtcclxufVxyXG5cclxuZnVuY3Rpb24gc3ViaXJIYXN0YShlbGVtZW50bzpIVE1MRWxlbWVudHxudWxsLCBmdW46KGVsZW1lbnRvOkhUTUxFbGVtZW50KT0+Ym9vbGVhbik6SFRNTEVsZW1lbnR8bnVsbHtcclxuICAgIGlmKGVsZW1lbnRvID09IG51bGwpIHJldHVybiBudWxsO1xyXG4gICAgaWYoZnVuKGVsZW1lbnRvKSkgcmV0dXJuIGVsZW1lbnRvO1xyXG4gICAgcmV0dXJuIHN1YmlySGFzdGEoZWxlbWVudG8ucGFyZW50RWxlbWVudCwgZnVuKTtcclxufVxyXG5cclxudmFyIGVsZW1lbnRvQ29uU2VubmlhbEJvcnJhcjpIVE1MRWxlbWVudHxudWxsID0gbnVsbDtcclxuXHJcbmZ1bmN0aW9uIEJvdG9uQm9ycmFyKHtpZCwgdmFyaWFibGUsIGZvclBrLCB2YWxvck9wY2lvbn06e2lkOnN0cmluZywgdmFyaWFibGU6SWRWYXJpYWJsZSwgZm9yUGs6Rm9yUGssIHZhbG9yT3BjaW9uPzphbnl9KXtcclxuICAgIHZhciBoYW5kbGVDbGlja0JvcnJhcj0oKT0+e1xyXG4gICAgICAgIGRpc3BhdGNoQnlQYXNzKGFjY2lvbl9yZWdpc3RyYXJfcmVzcHVlc3RhLCB7cmVzcHVlc3RhOm51bGwsIHZhcmlhYmxlOnZhcmlhYmxlLCBmb3JQazpmb3JQa30pXHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPVwiYm90b24tYm9ycmFyXCI+XHJcbiAgICAgICAgPEJ1dHRvblxyXG4gICAgICAgICAgICBpZD17aWR9XHJcbiAgICAgICAgICAgIG1pLXZhcmlhYmxlPXt2YXJpYWJsZX1cclxuICAgICAgICAgICAgdmFsb3Itb3BjaW9uPXt2YWxvck9wY2lvbn1cclxuICAgICAgICAgICAgdmFyaWFudD1cIm91dGxpbmVkXCJcclxuICAgICAgICAgICAgY2xhc3NOYW1lPVwiYm90b24tb3BjaW9uIGJvdG9uLW9wY2lvbi1ib3JyYXJcIlxyXG4gICAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVDbGlja0JvcnJhcn1cclxuICAgICAgICA+XHJcbiAgICAgICAgICAgIDxJQ09OLkRlbGV0ZUZvcmV2ZXIvPlxyXG4gICAgICAgIDwvQnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcbn1cclxuXHJcbmZ1bmN0aW9uIFNhbHRvRGVzcGxpZWd1ZSh7Y2FzaWxsZXJvLHByZWZpam99OntjYXNpbGxlcm86UHJlZ3VudGF8T3BjaW9ufEZpbHRybywgcHJlZmlqbz86c3RyaW5nfSl7XHJcbiAgICByZXR1cm4gY2FzaWxsZXJvLnNhbHRvP1xyXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwicGFzZVwiPlxyXG4gICAgICAgICAgICB7cHJlZmlqbz88c3BhbiBjbGFzc05hbWU9XCJwcmVmaWpvXCI+e3ByZWZpam99IDwvc3Bhbj46bnVsbH1cclxuICAgICAgICAgICAgPElDT04uVHJlbmRpbmdGbGF0IC8+PHNwYW4+e2Nhc2lsbGVyby5zYWx0b308L3NwYW4+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA6bnVsbFxyXG59XHJcblxyXG5mdW5jdGlvbiBPcGNpb25EZXNwbGllZ3VlKHByb3BzOntjYXNpbGxlcm86T3BjaW9uLCB2YWxvck9wY2lvbjpudW1iZXIsIHZhcmlhYmxlOklkVmFyaWFibGUsIGZvclBrOkZvclBrLCBsZWVyOmJvb2xlYW4sIGNvbkJvdG9uQm9ycmFyOmJvb2xlYW59KXtcclxuICAgIGNvbnN0IHtjYXNpbGxlcm99ID0gcHJvcHM7XHJcbiAgICBjb25zdCBkaXNwYXRjaCA9IHVzZURpc3BhdGNoKCk7XHJcbiAgICB2YXIgc2FsdG9BdXRvbWF0aWNvID0gdXNlU2VsZWN0b3IoKHN0YXRlOkNhc29TdGF0ZSk9PnN0YXRlLm9wY2lvbmVzLnNhbHRvQXV0b21hdGljbyk7XHJcbiAgICB2YXIgaGFuZGxlQ2xpY2s6UmVhY3QuTW91c2VFdmVudEhhbmRsZXI8SFRNTEJ1dHRvbkVsZW1lbnQ+ID0gYXN5bmMgKGV2ZW50KT0+e1xyXG4gICAgICAgIHZhciBjb250YWluZXIgPSBzdWJpckhhc3RhKGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudCwgZWxlbWVudG89PmVsZW1lbnRvLmNsYXNzTGlzdC5jb250YWlucygncHJlZ3VudGEnKSB8fCBlbGVtZW50by5jbGFzc0xpc3QuY29udGFpbnMoJ211bHRpcGxlJykpIHx8IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtYWluX2xheW91dCcpITtcclxuICAgICAgICB2YXIgdGllbmUgPSBjb250YWluZXIuZ2V0QXR0cmlidXRlKCdlc3RveS1ib3JyYW5kbycpO1xyXG4gICAgICAgIGNvbnRhaW5lci5zZXRBdHRyaWJ1dGUoJ2VzdG95LWJvcnJhbmRvJywnTk8nKTtcclxuICAgICAgICBpZihlbGVtZW50b0NvblNlbm5pYWxCb3JyYXIpe1xyXG4gICAgICAgICAgICBlbGVtZW50b0NvblNlbm5pYWxCb3JyYXIuc2V0QXR0cmlidXRlKCdlc3RveS1ib3JyYW5kbycsJ05PJyk7XHJcbiAgICAgICAgICAgIGVsZW1lbnRvQ29uU2VubmlhbEJvcnJhciA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciB7cmVjZW50TW9kaWZpZWQsIHNpZ3VpZW50ZVZhcmlhYmxlfSA9IGRpc3BhdGNoQnlQYXNzKGFjY2lvbl9yZWdpc3RyYXJfcmVzcHVlc3RhLCB7cmVzcHVlc3RhOnByb3BzLnZhbG9yT3BjaW9uLCB2YXJpYWJsZTpwcm9wcy52YXJpYWJsZSwgZm9yUGs6cHJvcHMuZm9yUGt9KTtcclxuICAgICAgICBpZighcmVjZW50TW9kaWZpZWQpe1xyXG4gICAgICAgICAgICBjb250YWluZXIuc2V0QXR0cmlidXRlKCdlc3RveS1ib3JyYW5kbycsdGllbmU9PSdTSSc/J05PJzonU0knKTtcclxuICAgICAgICAgICAgaWYodGllbmUhPSdTSScpe1xyXG4gICAgICAgICAgICAgICAgZWxlbWVudG9Db25TZW5uaWFsQm9ycmFyPWNvbnRhaW5lcjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICBpZihzaWd1aWVudGVWYXJpYWJsZSAmJiBzYWx0b0F1dG9tYXRpY28pe1xyXG4gICAgICAgICAgICAgICAgdmFyIGJvdG9uU3R5bGUgPSAoZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50KT8uc3R5bGU7XHJcbiAgICAgICAgICAgICAgICBpZihib3RvblN0eWxlKSBib3RvblN0eWxlLmNvbG9yID0gJ2dyZWVuJztcclxuICAgICAgICAgICAgICAgIGF3YWl0IHNsZWVwKERFTEFZX1NDUk9MTF8zKTtcclxuICAgICAgICAgICAgICAgIGlmKGJvdG9uU3R5bGUpIGJvdG9uU3R5bGUuY29sb3IgPSAnYmx1ZSc7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCBzbGVlcChERUxBWV9TQ1JPTExfMyk7XHJcbiAgICAgICAgICAgICAgICBpZihib3RvblN0eWxlKSBib3RvblN0eWxlLmNvbG9yID0gJ2dyZWVuJztcclxuICAgICAgICAgICAgICAgIGF3YWl0IHNsZWVwKERFTEFZX1NDUk9MTF8zKTtcclxuICAgICAgICAgICAgICAgIGlmKGJvdG9uU3R5bGUpIGJvdG9uU3R5bGUuY29sb3IgPSAnJztcclxuICAgICAgICAgICAgICAgIC8vQHRzLWlnbm9yZSBhbGd1bm9zIGNhc2lsbGVyb3MgdGllbmVuIGVzcGVjaWFsIHkgb3Ryb3Mgbm9cclxuICAgICAgICAgICAgICAgIChjYXNpbGxlcm8uZXNwZWNpYWw/Lm5vU2Nyb2xsID09IHRydWUpP251bGw6ZW5mb2NhckVsZW1lbnRvRGVWYXJpYWJsZShjYXNpbGxlcm8uZXNwZWNpYWw/LnNjcm9sbFRvID8/IHNpZ3VpZW50ZVZhcmlhYmxlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICByZXR1cm4gPEdyaWQgY2xhc3NOYW1lPVwib3BjaW9uXCI+IFxyXG4gICAgICAgIHtwcm9wcy5jb25Cb3RvbkJvcnJhcj88Qm90b25Cb3JyYXJcclxuICAgICAgICAgICAgaWQ9e2BvcGNpb24tdmFyLSR7cHJvcHMudmFyaWFibGV9LSR7cHJvcHMudmFsb3JPcGNpb259LWJvcnJhcmB9XHJcbiAgICAgICAgICAgIGZvclBrPXtwcm9wcy5mb3JQa31cclxuICAgICAgICAgICAgdmFyaWFibGU9e3Byb3BzLnZhcmlhYmxlfVxyXG4gICAgICAgICAgICB2YWxvck9wY2lvbj17cHJvcHMudmFsb3JPcGNpb259XHJcbiAgICAgICAgICAgIC8+Om51bGx9XHJcbiAgICAgICAgPEJ1dHRvbiBcclxuICAgICAgICAgICAgaWQ9e2BvcGNpb24tdmFyLSR7cHJvcHMudmFyaWFibGV9LSR7cHJvcHMudmFsb3JPcGNpb259YH1cclxuICAgICAgICAgICAgbWktdmFyaWFibGU9e3Byb3BzLnZhcmlhYmxlfVxyXG4gICAgICAgICAgICB2YWxvci1vcGNpb249e3Byb3BzLnZhbG9yT3BjaW9ufVxyXG4gICAgICAgICAgICB2YXJpYW50PVwib3V0bGluZWRcIlxyXG4gICAgICAgICAgICBjbGFzc05hbWU9XCJib3Rvbi1vcGNpb24gYm90b24tb3BjaW9uLXNlbGVjY2lvblwiXHJcbiAgICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZUNsaWNrfVxyXG4gICAgICAgICAgICB0YWJJbmRleD17LTF9XHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgICA8R3JpZCBjb250YWluZXIgd3JhcD1cIm5vd3JhcFwiPlxyXG4gICAgICAgICAgICAgICAgPEdyaWQgY2xhc3NOYW1lPVwiaWRcIj5cclxuICAgICAgICAgICAgICAgICAgICB7Y2FzaWxsZXJvLnZlcl9pZCB8fCBjYXNpbGxlcm8uY2FzaWxsZXJvfVxyXG4gICAgICAgICAgICAgICAgPC9HcmlkPlxyXG4gICAgICAgICAgICAgICAgPEdyaWQgY2xhc3NOYW1lPVwib3BjaW9uLXRleHRvXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPFR5cG9ncmFwaHkgZGViZS1sZWVyPXtjYXNpbGxlcm8ubGVlcj8nU0knOmNhc2lsbGVyby5sZWVyPT09ZmFsc2U/J05PJzpwcm9wcy5sZWVyPydTSSc6J05PJ30+e2JyZWFrZWFibGVUZXh0KGNhc2lsbGVyby5ub21icmUpfTwvVHlwb2dyYXBoeT5cclxuICAgICAgICAgICAgICAgICAgICB7Y2FzaWxsZXJvLmFjbGFyYWNpb24/XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxUeXBvZ3JhcGh5IGNsYXNzTmFtZT0nYWNsYXJhY2lvbic+e2JyZWFrZWFibGVUZXh0KGNhc2lsbGVyby5hY2xhcmFjaW9uKX08L1R5cG9ncmFwaHk+XHJcbiAgICAgICAgICAgICAgICAgICAgOm51bGx9XHJcbiAgICAgICAgICAgICAgICA8L0dyaWQ+XHJcbiAgICAgICAgICAgIDwvR3JpZD5cclxuICAgICAgICA8L0J1dHRvbj5cclxuICAgICAgICA8U2FsdG9EZXNwbGllZ3VlIGNhc2lsbGVybz17Y2FzaWxsZXJvfS8+XHJcbiAgICA8L0dyaWQ+XHJcbn1cclxuaW50ZXJmYWNlIEljYXNpbGxlcm9Db25PcGNpb25lc3tcclxuICAgIHZhcl9uYW1lOklkVmFyaWFibGUsXHJcbiAgICBkZXNwbGllZ3VlQ29udGVuaWRvOid2ZXJ0aWNhbCd8J2hvcml6b250YWwnfG51bGwsXHJcbiAgICBjYXNpbGxlcm9zOk9wY2lvbltdXHJcbn1cclxuXHJcblxyXG5mdW5jdGlvbiBTaU5vRGVzcGxpZWd1ZShwcm9wczp7Y2FzaWxsZXJvQ29uT3BjaW9uZXM6SWNhc2lsbGVyb0Nvbk9wY2lvbmVzLCBmb3JQazpGb3JQaywgZGVzcGxpZWd1ZUNvbnRlbmlkbzondmVydGljYWwnfCdob3Jpem9udGFsJ30pe1xyXG4gICAgcmV0dXJuIDxPcGNpb25lc0Rlc3BsaWVndWUgXHJcbiAgICAgICAgY2FzaWxsZXJvQ29uT3BjaW9uZXM9e3Byb3BzLmNhc2lsbGVyb0Nvbk9wY2lvbmVzfSBcclxuICAgICAgICBmb3JQaz17cHJvcHMuZm9yUGt9IFxyXG4gICAgICAgIGxlZXI9e2ZhbHNlfVxyXG4gICAgICAgIGRlc3BsaWVndWVDb250ZW5pZG89e3Byb3BzLmRlc3BsaWVndWVDb250ZW5pZG99XHJcbiAgICAvPlxyXG59XHJcblxyXG5mdW5jdGlvbiByZWdpc3RyYWRvckRlVmFyaWFibGUocHJlZ3VudGE6UHJlZ3VudGF8T3BjaW9uTXVsdGlwbGV8Q29uanVudG9QcmVndW50YXMpe1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgICByZXNwdWVzdGFzOlJlc3B1ZXN0YXMsIGZlZWRiYWNrRm9ybTogRm9ybVN0cnVjdHVyZVN0YXRlPElkVmFyaWFibGUsIFZhbG9yLCBJZEZpbj4sIGVsZW1lbnRvOkhUTUxEaXZFbGVtZW50XHJcbiAgICApPT57XHJcbiAgICAgICAgdmFyIHZhbG9yQWN0dWFsID0gcHJlZ3VudGEudmFyX25hbWUgPT0gbnVsbCA/IG51bGwgOiByZXNwdWVzdGFzW3ByZWd1bnRhLnZhcl9uYW1lXTtcclxuICAgICAgICB2YXIgZmVlZGJhY2tSb3cgPSBmZWVkYmFja0Zvcm0uZmVlZGJhY2s7XHJcbiAgICAgICAgdmFyIGZlZWRiYWNrVmFyID0gcHJlZ3VudGEudmFyX25hbWUgPT0gbnVsbCA/IG51bGwgOiBmZWVkYmFja1Jvd1twcmVndW50YS52YXJfbmFtZV07XHJcbiAgICAgICAgdmFyIHRpZW5lVmFsb3I9dmFsb3JBY3R1YWwhPW51bGwgJiYgZmVlZGJhY2tWYXIhPW51bGw/KGZlZWRiYWNrVmFyLmNvblByb2JsZW1hPydpbnZhbGlkbyc6J3ZhbGlkbycpOidOTyc7XHJcbiAgICAgICAgdmFyIGVzdGFkbzpFc3RhZG9WYXJpYWJsZTsgXHJcbiAgICAgICAgaWYocHJlZ3VudGEudGlwb3Zhcil7XHJcbiAgICAgICAgICAgIGVzdGFkbz1mZWVkYmFja1Zhcj8uZXN0YWRvITtcclxuICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgdmFyIGZlZWRiYWNrTXVsdGkgPSBwcmVndW50YS5jYXNpbGxlcm9zLmZpbHRlcihjPT5jLnZhcl9uYW1lIT1udWxsKS5yZWR1Y2UoKHB2LCBvbSk9PntcclxuICAgICAgICAgICAgICAgIHZhciBmYj1mZWVkYmFja1Jvdz8uW29tLnZhcl9uYW1lIV0hXHJcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRpZW5lQWN0dWFsOiBwdi50aWVuZUFjdHVhbCB8fCBmYi5lc3RhZG89PSdhY3R1YWwnLFxyXG4gICAgICAgICAgICAgICAgICAgIGVzdGFTYWx0ZWFkYTogcHYuZXN0YVNhbHRlYWRhICYmIChmYi5lc3RhZG89PSdzYWx0ZWFkYScgfHwgZmIuZXN0YWRvPT0nZnVlcmFfZGVfZmx1am9fcG9yX3NhbHRvJylcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSwge3RpZW5lQWN0dWFsOmZhbHNlLCBlc3RhU2FsdGVhZGE6dHJ1ZX0pO1xyXG4gICAgICAgICAgICBlc3RhZG89ZmVlZGJhY2tNdWx0aS50aWVuZUFjdHVhbD8nYWN0dWFsJzpmZWVkYmFja011bHRpLmVzdGFTYWx0ZWFkYT8nc2FsdGVhZGEnOid0b2RhdmlhX25vJ1xyXG4gICAgICAgIH1cclxuICAgICAgICBzZXRBdHRyRGlzdGludG8oZWxlbWVudG8sICdudWVzdHJvLXZhbGlkYXRvcicsIGVzdGFkbyk7XHJcbiAgICAgICAgc2V0QXR0ckRpc3RpbnRvKGVsZW1lbnRvLCAndGllbmUtdmFsb3InLCB0aWVuZVZhbG9yKTtcclxuICAgICAgICBzZXRBdHRyRGlzdGludG8oZWxlbWVudG8sICdlc3RhLWluaGFiaWxpdGFkYScsIGZlZWRiYWNrVmFyPy5pbmhhYmlsaXRhZGE/J1NJJzonTk8nKTtcclxuICAgICAgICBpZihwcmVndW50YS52YXJfbmFtZSl7XHJcbiAgICAgICAgICAgIHZhciBvcGNpb25lczpIVE1MQnV0dG9uRWxlbWVudFtdID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZWxlbWVudG8ucXVlcnlTZWxlY3RvckFsbChgLmJvdG9uLW9wY2lvblttaS12YXJpYWJsZT1cIiR7cHJlZ3VudGEudmFyX25hbWV9XCJdYCksMCk7XHJcbiAgICAgICAgICAgIHZhciBlbGVtZW50b09wY2lvbjpIVE1MQnV0dG9uRWxlbWVudDtcclxuICAgICAgICAgICAgZm9yKGVsZW1lbnRvT3BjaW9uIG9mIG9wY2lvbmVzKXtcclxuICAgICAgICAgICAgICAgIHZhciB2YWxvck9wY2lvbiA9IGVsZW1lbnRvT3BjaW9uLmdldEF0dHJpYnV0ZSgndmFsb3Itb3BjaW9uJyk7XHJcbiAgICAgICAgICAgICAgICBzZXRBdHRyRGlzdGludG8oZWxlbWVudG9PcGNpb24sICdvcGNpb24tc2VsZWNjaW9uYWRhJywgdmFsb3JPcGNpb24gPT0gdmFsb3JBY3R1YWwgPyBcIlNJXCI6IFwiTk9cIilcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YXIgZWxlbWVudG9zSW5wdXQ6SFRNTElucHV0RWxlbWVudFtdID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZWxlbWVudG8ucXVlcnlTZWxlY3RvckFsbCgnLnZhcmlhYmxlJykpO1xyXG4gICAgICAgICAgICB2YXIgZWxlbWVudG9JbnB1dDpIVE1MSW5wdXRFbGVtZW50O1xyXG4gICAgICAgICAgICBmb3IoZWxlbWVudG9JbnB1dCBvZiBlbGVtZW50b3NJbnB1dCl7XHJcbiAgICAgICAgICAgICAgICBzZXRWYWxvckRpc3RpbnRvKGVsZW1lbnRvSW5wdXQsICd2YWx1ZScsIHZhbG9yQWN0dWFsID09IG51bGwgPyAnJyA6IHZhbG9yQWN0dWFsLnRvU3RyaW5nKCkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciBib3Rvbk5zTmMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcIm5zbmMtcHJlZ3VudGEtXCIrcHJlZ3VudGEudmFyX25hbWUpITtcclxuICAgICAgICAgICAgc2V0QXR0ckRpc3RpbnRvKGJvdG9uTnNOYywgJ29wY2lvbi1zZWxlY2Npb25hZGEnLCB2YWxvckFjdHVhbCA9PSAocHJlZ3VudGEudmFsb3JfbnNfbmMgPz8gLTkpID8gXCJTSVwiIDogXCJOT1wiKVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxuZnVuY3Rpb24gT3BjaW9uTXVsdGlwbGVEZXNwbGllZ3VlKHByb3BzOntvcGNpb25NOk9wY2lvbk11bHRpcGxlLCBmb3JQazpGb3JQa30pe1xyXG4gICAgY29uc3Qge29wY2lvbk19ID0gcHJvcHM7XHJcbiAgICB2YXIgaWQgPSBgb3BjaW9uTS0ke29wY2lvbk0uaWRfY2FzaWxsZXJvfWA7XHJcbiAgICAvL0B0cy1pZ25vcmUgYWx0dW5vcyBjYXNpbGxlcm9zIG5vIHRpZW5lbiBlc3BlY2lhbCwgbm8gaW1wb3J0YSwgZXMgc29sbyBwYXJhIHBvbmVyIGxvcyBtZXRhZGF0b3NcclxuICAgIHZhciBzdHlsZXMgPSBvcGNpb25NLmVzcGVjaWFsPy5mbGV4RGlyZWN0aW9uP3tmbGV4RGlyZWN0aW9uOm9wY2lvbk0uZXNwZWNpYWwuZmxleERpcmVjdGlvbn06e307XHJcbiAgICByZWdpc3RyYXJFbGVtZW50byh7XHJcbiAgICAgICAgaWQsIFxyXG4gICAgICAgIGRpcmVjdDp0cnVlLCBcclxuICAgICAgICBmdW46IHJlZ2lzdHJhZG9yRGVWYXJpYWJsZShvcGNpb25NKVxyXG4gICAgfSlcclxuICAgIHJldHVybiA8RGVzcGxlZ2FyQ2FzaWxsZXJvIFxyXG4gICAgICAgIGlkPXtpZH1cclxuICAgICAgICBjYXNpbGxlcm89e29wY2lvbk19XHJcbiAgICAgICAgZGVzcGxpZWd1ZUVuY2FiZXphZG89J2xhdGVyYWwnXHJcbiAgICAgICAgc3R5bGU9e3N0eWxlc31cclxuICAgID5cclxuICAgICAgICA8RW5jYWJlemFkb0Rlc3BsaWVndWUgXHJcbiAgICAgICAgICAgIGNhc2lsbGVybz17b3BjaW9uTX0gXHJcbiAgICAgICAgICAgIHZlcklkR3Vpb249e3RydWV9IFxyXG4gICAgICAgICAgICBsZWVyPXtvcGNpb25NLmxlZXIhPT1mYWxzZX0gXHJcbiAgICAgICAgICAgIGZvclBrPXtwcm9wcy5mb3JQa31cclxuICAgICAgICAvPlxyXG4gICAgICAgIDxTaU5vRGVzcGxpZWd1ZSBcclxuICAgICAgICAgICAgY2FzaWxsZXJvQ29uT3BjaW9uZXM9e29wY2lvbk19IFxyXG4gICAgICAgICAgICBmb3JQaz17cHJvcHMuZm9yUGt9XHJcbiAgICAgICAgICAgIGRlc3BsaWVndWVDb250ZW5pZG89e3Byb3BzLm9wY2lvbk0uZGVzcGxpZWd1ZUNvbnRlbmlkbz8/J2hvcml6b250YWwnfVxyXG4gICAgICAgIC8+XHJcbiAgICA8L0Rlc3BsZWdhckNhc2lsbGVybz5cclxufVxyXG5cclxudHlwZSBDYXNpbGxlcm9FbmNhYmV6YWJsZSA9IEZvcm11bGFyaW98QmxvcXVlfEZpbHRyb3xDb25qdW50b1ByZWd1bnRhc3xQcmVndW50YXxPcGNpb25NdWx0aXBsZXxQcmVndW50YVNpbXBsZXxDb25zaXN0ZW5jaWF8VGV4dG9cclxuXHJcbmZ1bmN0aW9uIEVuY2FiZXphZG9EZXNwbGllZ3VlKHByb3BzOntjYXNpbGxlcm86Q2FzaWxsZXJvRW5jYWJlemFibGUsIHZlcklkR3Vpb24/OmJvb2xlYW4sIGxlZXI/OmJvb2xlYW4sIGZvclBrOkZvclBrfSl7XHJcbiAgICB2YXIge2Nhc2lsbGVybywgZm9yUGt9ID0gcHJvcHM7XHJcbiAgICB2YXIgY29uQ2FtcG9PcGNpb25lcyA9IHVzZVNlbGVjdG9yKChzdGF0ZTpDYXNvU3RhdGUpPT5zdGF0ZS5vcGNpb25lcy5jb25DYW1wb09wY2lvbmVzKVxyXG4gICAgdmFyIGhhbmRsZUNsaWNrQm9ycmFyPSgpPT57XHJcbiAgICAgICAgZGlzcGF0Y2hCeVBhc3MoYWNjaW9uX3JlZ2lzdHJhcl9yZXNwdWVzdGEsIHtyZXNwdWVzdGE6bnVsbCwgdmFyaWFibGU6Y2FzaWxsZXJvLnZhcl9uYW1lIGFzIElkVmFyaWFibGUsIGZvclBrOmZvclBrfSlcclxuICAgIH07XHJcbiAgICB2YXIgdmVyX2lkID0gY2FzaWxsZXJvLnZlcl9pZCA/PyBjYXNpbGxlcm8uY2FzaWxsZXJvO1xyXG4gICAgLy8gQHRzLWlnbm9yZSBubyBlc3TDoSBlbiB0b2RvcyBsb3MgY2FzaWxsZXJvcyBwZXJvIGFjw6EgcGFyYSBlbCBkZXNwbGllZ3VlIGRlIG1ldGFkYXRvcyBubyBpbXBvcnRhXHJcbiAgICB2YXIgY2FsY3VsYWRhID0gY2FzaWxsZXJvLmNhbGN1bGFkYTtcclxuICAgIHZhciBpZCA9IGBpZC1kaXYtJHtjYXNpbGxlcm8udmFyX25hbWV8fGNhc2lsbGVyby5jYXNpbGxlcm99YDtcclxuICAgIHZhciBpZEFjY2lvbmVzID0gXCJhY2Npb25lcy1cIitpZDtcclxuICAgIHJldHVybiA8ZGl2IFxyXG4gICAgICAgIGNsYXNzTmFtZT1cImVuY2FiZXphZG9cIiBcclxuICAgICAgICBkZWJlLWxlZXI9e3Byb3BzLmxlZXI/J1NJJzonTk8nfSBcclxuICAgID5cclxuICAgICAgICA8ZGl2IGlkPXtpZH0gY2xhc3NOYW1lPVwiaWQtZGl2XCIgdGl0bGU9e2Ake2Nhc2lsbGVyby5jYXNpbGxlcm99IC0gJHtjYXNpbGxlcm8udmFyX25hbWV9YH1cclxuICAgICAgICAgICAgb25DbGljaz17KCk9PntcclxuICAgICAgICAgICAgICAgIHZhciBkaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZEFjY2lvbmVzKTtcclxuICAgICAgICAgICAgICAgIGRpdiEuc2V0QXR0cmlidXRlKFwiYWNjaW9uLXZpc2libGVcIiwgKDEtTnVtYmVyKGRpdiEuZ2V0QXR0cmlidXRlKFwiYWNjaW9uLXZpc2libGVcIikpKS50b1N0cmluZygpKTtcclxuICAgICAgICAgICAgICAgIC8vIFRPRE8uIFZlciBxdcOpIGhhY2Vtb3MgY3VhbmRvIHNlIHRvY2EgZWwgSUQgZGUgbGEgcHJlZ3V0bmFcclxuICAgICAgICAgICAgICAgIGRpc3BhdGNoQnlQYXNzKGFjY2lvbl9pZF9wcmVndW50YSwge3ByZWd1bnRhOiBjYXNpbGxlcm8uY2FzaWxsZXJvIGFzIElkUHJlZ3VudGEsIGZvclBrfSk7XHJcbiAgICAgICAgICAgIH19XHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImlkXCI+XHJcbiAgICAgICAgICAgICAgICB7dmVyX2lkfVxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgeyhjYXNpbGxlcm8udGlwb3Zhcj09XCJzaV9ub1wifHxjYXNpbGxlcm8udGlwb3Zhcj09XCJvcGNpb25lc1wiKT88Q2FtcG8gZGlzYWJsZWQ9e2ZhbHNlfSBwcmVndW50YT17Y2FzaWxsZXJvfSBmb3JQaz17Zm9yUGt9IG1pbmk9e3RydWV9IGhpZGRlbj17IWNvbkNhbXBvT3BjaW9uZXMgJiYgJ3F1aXRhcid9Lz46bnVsbH1cclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJhY2Npb25lcy1wcmVndW50YVwiIGlkPXtpZEFjY2lvbmVzfSBhY2Npb24tdmlzaWJsZT1cIjBcIj5cclxuICAgICAgICAgICAgICAgIHtjYXNpbGxlcm8udmFyX25hbWU/PGRpdj48QnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgaWQ9e1wiYm9ycmFyLXByZWd1bnRhLVwiK2Nhc2lsbGVyby52YXJfbmFtZX1cclxuICAgICAgICAgICAgICAgICAgICBtaS12YXJpYWJsZT17Y2FzaWxsZXJvLnZhcl9uYW1lfVxyXG4gICAgICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJvdXRsaW5lZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiYm90b24tcHJlZ3VudGEtYm9ycmFyXCJcclxuICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVDbGlja0JvcnJhcn1cclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICA8SUNPTi5EZWxldGVGb3JldmVyLz5cclxuICAgICAgICAgICAgICAgIDwvQnV0dG9uPjwvZGl2PjpudWxsfVxyXG4gICAgICAgICAgICAgICAge2Nhc2lsbGVyby52YXJfbmFtZT8obnNfbmM9PjxkaXY+PEJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgIGlkPXtcIm5zbmMtcHJlZ3VudGEtXCIrY2FzaWxsZXJvLnZhcl9uYW1lfVxyXG4gICAgICAgICAgICAgICAgICAgIG1pLXZhcmlhYmxlPXtjYXNpbGxlcm8udmFyX25hbWV9XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyaWFudD1cIm91dGxpbmVkXCJcclxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJib3Rvbi1wcmVndW50YS1uc25jXCJcclxuICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKT0+e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNwYXRjaEJ5UGFzcyhhY2Npb25fcmVnaXN0cmFyX3Jlc3B1ZXN0YSwge3Jlc3B1ZXN0YTpuc19uYywgdmFyaWFibGU6Y2FzaWxsZXJvLnZhcl9uYW1lIGFzIElkVmFyaWFibGUsIGZvclBrOmZvclBrfSlcclxuICAgICAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgIE5TL05DXHJcbiAgICAgICAgICAgICAgICA8L0J1dHRvbj48L2Rpdj4pKGNhc2lsbGVyby52YWxvcl9uc19uYz8/LTkpOm51bGx9XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibm9tYnJlLWRpdlwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm5vbWJyZVwiPnticmVha2VhYmxlVGV4dChjYXNpbGxlcm8ubm9tYnJlKX08L2Rpdj5cclxuICAgICAgICAgICAge2Nhc2lsbGVyby5hY2xhcmFjaW9uP1xyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJhY2xhcmFjaW9uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge2Nhc2lsbGVyby5zYWx0byAmJiBjYXNpbGxlcm8udGlwb2M9PSdGSUxUUk8nP1xyXG4gICAgICAgICAgICAgICAgICAgICAgICA8U2FsdG9EZXNwbGllZ3VlIGNhc2lsbGVybz17Y2FzaWxsZXJvfSBwcmVmaWpvPXticmVha2VhYmxlVGV4dChjYXNpbGxlcm8uYWNsYXJhY2lvbil9Lz5cclxuICAgICAgICAgICAgICAgICAgICA6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrZWFibGVUZXh0KGNhc2lsbGVyby5hY2xhcmFjaW9uKVxyXG4gICAgICAgICAgICAgICAgICAgIH0gICAgICAgIFxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDpudWxsfVxyXG4gICAgICAgICAgICA8ZGl2IGxvcy1tZXRhZGF0b3M9XCJzaVwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gZWwtbWV0YWRhdG89XCJ2YXJpYWJsZVwiPntjYXNpbGxlcm8udmFyX25hbWV9PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAge2Nhc2lsbGVyby50aXBvdmFyICYmIGNhc2lsbGVyby50aXBvdmFyIT0nb3BjaW9uZXMnICYmIGNhc2lsbGVyby50aXBvdmFyIT0nc2lfbm8nP1xyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGVsLW1ldGFkYXRvPVwidGlwb3ZhclwiPntjYXNpbGxlcm8udGlwb3Zhcn08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA6bnVsbH1cclxuICAgICAgICAgICAgICAgIHsgICAvL0B0cy1pZ25vcmUgdW5hIG9wY2nDs24gbcO6bHRpcGxlIG51bmNhIGxvIGEgYSBzZXIsIG5vIHRpZW5lIGVsIGNhbXBvLCBubyBpbXBvcnRhXHJcbiAgICAgICAgICAgICAgICAgICAgY2FzaWxsZXJvLm9wdGF0aXZvPzxzcGFuIGVsLW1ldGFkYXRvPVwib3B0YXRpdmFcIj5vcHRhdGl2YTwvc3Bhbj46bnVsbFxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAge2NhbGN1bGFkYT88c3BhbiBlbC1tZXRhZGF0bz1cImNhbGN1bGFkYVwiPmNhbGN1bGFkYTwvc3Bhbj46bnVsbH1cclxuICAgICAgICAgICAgICAgIHtjYXNpbGxlcm8uZGVzcGxpZWd1ZU9jdWx0YT88c3BhbiBlbC1tZXRhZGF0bz1cIm9jdWx0YVwiPm9jdWx0YTwvc3Bhbj46bnVsbH1cclxuICAgICAgICAgICAgICAgIHtjYXNpbGxlcm8uZXhwcmVzaW9uX2hhYmlsaXRhcj88c3BhbiBlbC1tZXRhZGF0bz1cImV4cHJlc2lvbl9oYWJpbGl0YXJcIj5oYWJpbGl0YToge2Nhc2lsbGVyby5leHByZXNpb25faGFiaWxpdGFyfTwvc3Bhbj46bnVsbH1cclxuICAgICAgICAgICAgICAgIHsgICAvL0B0cy1pZ25vcmUgYWx0dW5vcyBjYXNpbGxlcm9zIG5vIHRpZW5lbiBlc3BlY2lhbCwgbm8gaW1wb3J0YSwgZXMgc29sbyBwYXJhIHBvbmVyIGxvcyBtZXRhZGF0b3NcclxuICAgICAgICAgICAgICAgICAgICBjYXNpbGxlcm8uZXNwZWNpYWw/LmF1dG9pbmc/PHNwYW4gZWwtbWV0YWRhdG89XCJleHByZXNpb25fYXV0b2luZ1wiPmF1dG9pbmc6IHtjYXNpbGxlcm8uZXNwZWNpYWw/LmF1dG9pbmd9PC9zcGFuPjpudWxsXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbn1cclxuXHJcbmZ1bmN0aW9uIERlc3BsZWdhckNvbmZpcm1hckJvcnJhclJlc3B1ZXN0YShwcm9wczp7Zm9yUGs6Rm9yUGssIHZhcmlhYmxlQm9ycmFyOklkVmFyaWFibGV9KXtcclxuICAgIHZhciBbb3Blbiwgc2V0T3Blbl0gPSB1c2VTdGF0ZSghIXByb3BzLnZhcmlhYmxlQm9ycmFyKVxyXG4gICAgY29uc3QgZGlzcGF0Y2ggPSB1c2VEaXNwYXRjaCgpO1xyXG4gICAgY29uc3QgaGFuZGxlQ2xvc2UgPSAoKSA9PiB7XHJcbiAgICAgICAgZGlzcGF0Y2goZGlzcGF0Y2hlcnMuQ09ORklSTUFSX0JPUlJBUl9SRVNQVUVTVEEoe2ZvclBrOnByb3BzLmZvclBrLCB2YXJpYWJsZTpudWxsfSkpO1xyXG4gICAgICAgIHNldE9wZW4oZmFsc2UpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIDxQb3BvdmVyXHJcbiAgICAgICAgICAgIGlkPXtcInBvcG92ZXItY29uZmlybWFyXCJ9XHJcbiAgICAgICAgICAgIG9wZW49e29wZW59XHJcbiAgICAgICAgICAgIG9uQ2xvc2U9e2hhbmRsZUNsb3NlfVxyXG4gICAgICAgICAgICBhbmNob3JPcmlnaW49e3tcclxuICAgICAgICAgICAgICAgIHZlcnRpY2FsOiAnYm90dG9tJyxcclxuICAgICAgICAgICAgICAgIGhvcml6b250YWw6ICdjZW50ZXInLFxyXG4gICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICB0cmFuc2Zvcm1PcmlnaW49e3tcclxuICAgICAgICAgICAgICAgIHZlcnRpY2FsOiAndG9wJyxcclxuICAgICAgICAgICAgICAgIGhvcml6b250YWw6ICdsZWZ0JyxcclxuICAgICAgICAgICAgfX1cclxuICAgICAgICA+ICAgXHJcbiAgICAgICAgICAgIDxUeXBvZ3JhcGh5PkxhIHByZWd1bnRhIHRpZW5lIHJlZ2lzdHJhZGEgdW5hIHJlc3B1ZXN0YSBxdWUgbm8gZnVlIGRldGVjdGFkYSBjb21vIGVycsOzbmVhPC9UeXBvZ3JhcGh5PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImNvbmZpcm1hLWJvdG9uZXNcIj5cclxuICAgICAgICAgICAgICAgIDxCdXR0b24gY29sb3I9XCJzZWNvbmRhcnlcIiB2YXJpYW50PVwib3V0bGluZWRcIiBvbkNsaWNrPXsoKT0+e1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKHByb3BzLnZhcmlhYmxlQm9ycmFyKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2hCeVBhc3MoYWNjaW9uX3JlZ2lzdHJhcl9yZXNwdWVzdGEsIHtmb3JQazpwcm9wcy5mb3JQaywgdmFyaWFibGU6cHJvcHMudmFyaWFibGVCb3JyYXIsIHJlc3B1ZXN0YTpudWxsfSlcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaGFuZGxlQ2xvc2UoKTtcclxuICAgICAgICAgICAgICAgIH19PmJvcnJhciByZXNwdWVzdGE8L0J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxCdXR0b24gY29sb3I9XCJwcmltYXJ5XCIgdmFyaWFudD1cIm91dGxpbmVkXCIgb25DbGljaz17aGFuZGxlQ2xvc2V9PnZvbHZlciBzaW4gYm9ycmFyPC9CdXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvUG9wb3Zlcj47XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNhbGN1bGFyTnVlc3RyYUxvbmdpdHVkKGxvbmdpdHVkOnN0cmluZyB8bnVsbCl7XHJcbiAgICByZXR1cm4gbG9uZ2l0dWQ7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGVuZm9jYXJFbGVtZW50b0RlVmFyaWFibGUoc2lndWllbnRlVmFyaWFibGU6SWRWYXJpYWJsZXxJZEZpbil7XHJcbiAgICBkZWJlU2FsdGFyID0gZmFsc2U7XHJcbiAgICB2YXIge3RvcCwgZW5mb2NhZG8sIGVsZW1lbnRvSW5wdXRWYXJpYWJsZX0gPSBjYWxjdWxhckVsZW1lbnRvRW5mb2NhZG8oc2lndWllbnRlVmFyaWFibGUpO1xyXG4gICAgaWYodG9wICE9IG51bGwgJiYgdG9wPjAgJiYgKCFlbmZvY2FkbyB8fCBcInNhbHRhIHNpZW1wcmVcIikpe1xyXG4gICAgICAgIHdpbmRvdy5zY3JvbGxUbyh7dG9wLCBsZWZ0OjAsIGJlaGF2aW9yOidzbW9vdGgnfSk7XHJcbiAgICB9XHJcbiAgICBlbGVtZW50b0lucHV0VmFyaWFibGU/LmZvY3VzKCk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIENhbXBvKHByb3BzOntkaXNhYmxlZDpib29sZWFuLCBwcmVndW50YTpQcmVndW50YVNpbXBsZXxQcmVndW50YUNvbk9wY2lvbmVzfFByZWd1bnRhQ29uU2lOb3xPcGNpb25NdWx0aXBsZSwgZm9yUGs6Rm9yUGssIG1pbmk/OmJvb2xlYW4sIGhpZGRlbj86Ym9vbGVhbnwncXVpdGFyJ30pe1xyXG4gICAgdmFyIHtwcmVndW50YSwgZGlzYWJsZWQsIG1pbmkgfSA9IHByb3BzO1xyXG4gICAgdmFyIHtzYWx0b0F1dG9tYXRpY28sIGNvbkNhbXBvT3BjaW9uZXN9ID0gdXNlU2VsZWN0b3IoKHN0YXRlOkNhc29TdGF0ZSk9PnN0YXRlLm9wY2lvbmVzKTtcclxuICAgIGNvbnN0IGxvbmdpdHVkID0gbWluaSA/IHByZWd1bnRhLmNhc2lsbGVyb3MucmVkdWNlKChhY3VtLCBvKT0+TWF0aC5tYXgoby5jYXNpbGxlcm8udG9TdHJpbmcoKS5sZW5ndGgsIGFjdW0pLCAwKSA6IFxyXG4gICAgICAgIC8vIEB0cy1pZ25vcmUgbWluaSBlcyBwYXJhIGxvcyBvdHJvc1xyXG4gICAgICAgIHByZWd1bnRhLmxvbmdpdHVkO1xyXG4gICAgLy8gdmFyIFt2YWxvciwgc2V0VmFsb3JdID0gdXNlU3RhdGUocHJvcHMudmFsb3IpO1xyXG4gICAgdmFyIFtlZGl0YW5kbywgc2V0RWRpdGFuZG9dID0gdXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgLy8gdXNlRWZmZWN0KCgpID0+IHtcclxuICAgIC8vICAgICBzZXRWYWxvcihwcm9wcy52YWxvcilcclxuICAgIC8vIH0sIFtwcm9wcy52YWxvcl0pO1xyXG4gICAgY29uc3QgaW5wdXRQcm9wcyA9IHtcclxuICAgICAgICBtYXhMZW5ndGg6IGxvbmdpdHVkLFxyXG4gICAgfTtcclxuICAgIGNvbnN0IG9uQ2hhbmdlPShudWV2b1ZhbG9yOlZhbG9yfHR5cGVvZiBOT19DQU1CSUFSX19WRVJJRklDQVJfU0lfRVNfTkVDRVNBUklPKT0+e1xyXG4gICAgICAgIHZhciB7c2lndWllbnRlVmFyaWFibGV9ID0gZGlzcGF0Y2hCeVBhc3MoYWNjaW9uX3JlZ2lzdHJhcl9yZXNwdWVzdGEsIHtmb3JQazpwcm9wcy5mb3JQaywgdmFyaWFibGU6cHJlZ3VudGEudmFyX25hbWUsIHJlc3B1ZXN0YTpudWV2b1ZhbG9yfSk7XHJcbiAgICAgICAgaWYoc2lndWllbnRlVmFyaWFibGUgJiYgZGViZVNhbHRhcil7XHJcbiAgICAgICAgICAgIC8vQHRzLWlnbm9yZSBhbGd1bm9zIGNhc2lsbGVyb3MgdGllbmVuIGVzcGVjaWFsIHkgb3Ryb3Mgbm9cclxuICAgICAgICAgICAgKHByZWd1bnRhLmVzcGVjaWFsPy5ub1Njcm9sbCA9PSB0cnVlKT9udWxsOmVuZm9jYXJFbGVtZW50b0RlVmFyaWFibGUocHJlZ3VudGEuZXNwZWNpYWw/LnNjcm9sbFRvID8/IHNpZ3VpZW50ZVZhcmlhYmxlKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgdmFyIG51ZXN0cmFMb25naXR1ZCA9IGNhbGN1bGFyTnVlc3RyYUxvbmdpdHVkKGxvbmdpdHVkKVxyXG4gICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPVwiY2FtcG9cIiBudWVzdHJhLWxvbmdpdHVkPXtudWVzdHJhTG9uZ2l0dWR9IHN0eWxlPXtwcm9wcy5oaWRkZW49PSdxdWl0YXInP3tkaXNwbGF5Oidub25lJ306cHJvcHMuaGlkZGVuP3t2aXNpYmlsaXR5OidoaWRkZW4nfTp1bmRlZmluZWR9PlxyXG4gICAgICAgIHttaW5pP251bGw6PEJvdG9uQm9ycmFyXHJcbiAgICAgICAgICAgIGlkPXtgYm9ycmFyLWFiaWVydGEtJHtwcmVndW50YS52YXJfbmFtZX1gfVxyXG4gICAgICAgICAgICB2YXJpYWJsZT17cHJlZ3VudGEudmFyX25hbWV9XHJcbiAgICAgICAgICAgIGZvclBrPXtwcm9wcy5mb3JQa31cclxuICAgICAgICAvPn1cclxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImlucHV0LWNhbXBvXCI+XHJcbiAgICAgICAgICAgIDxUZXh0RmllbGQgXHJcbiAgICAgICAgICAgICAgICBpZD17YHZhci0ke3ByZWd1bnRhLnZhcl9uYW1lfWB9XHJcbiAgICAgICAgICAgICAgICBkaXNhYmxlZD17ZGlzYWJsZWR9XHJcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ2YXJpYWJsZVwiIFxyXG4gICAgICAgICAgICAgICAgLy92YXItbGVuZ3RoPXtwcmVndW50YS5sb25naXR1ZH0gXHJcbiAgICAgICAgICAgICAgICBmdWxsV2lkdGg9e3RydWV9XHJcbiAgICAgICAgICAgICAgICBpbnB1dFByb3BzPXtpbnB1dFByb3BzfVxyXG4gICAgICAgICAgICAgICAgdHlwZT17cHJlZ3VudGEuZGVzcGxpZWd1ZVRpcG9JbnB1dD8/YWRhcHRhclRpcG9WYXJDYXNpbGxlcm8ocHJlZ3VudGEudGlwb3Zhcil9XHJcbiAgICAgICAgICAgICAgICBvbktleURvd249eyhldmVudDpSZWFjdC5LZXlib2FyZEV2ZW50KT0+e1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBlc0VudGVyID0gKGV2ZW50LmtleSA9PSAnRW50ZXInIHx8IGV2ZW50LmtleUNvZGUgPT0gMTMpXHJcbiAgICAgICAgICAgICAgICAgICAgZGViZVNhbHRhciA9IGVzRW50ZXIgJiYgKHNhbHRvQXV0b21hdGljbyB8fCBjb25DYW1wb09wY2lvbmVzKTtcclxuICAgICAgICAgICAgICAgICAgICBpZihlc0VudGVyKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoZXZlbnQudGFyZ2V0IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQudGFyZ2V0LmJsdXIoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgICBvbkZvY3VzPXsoX2V2ZW50KT0+c2V0RWRpdGFuZG8odHJ1ZSl9XHJcbiAgICAgICAgICAgICAgICBvbkJsdXI9eyhldmVudCwgdmFsb3IpPT57XHJcbiAgICAgICAgICAgICAgICAgICAgaWYoZXZlbnQ/LnJlbGF0ZWRUYXJnZXQ/LmdldEF0dHJpYnV0ZSgnYm90b24tY29uZmlybWFyJykpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWJlU2FsdGFyID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2UodmFsb3IpO1xyXG4gICAgICAgICAgICAgICAgICAgIHNldEVkaXRhbmRvKGZhbHNlKVxyXG4gICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgLz5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICB7ZGlzYWJsZWQgfHwgbWluaT9udWxsOlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImJvdG9uLWNvbmZpcm1hci1jYW1wb1wiPlxyXG4gICAgICAgICAgICAgICAgPEJ1dHRvbiB2YXJpYW50PXtlZGl0YW5kbz9cImNvbnRhaW5lZFwiOidvdXRsaW5lZCd9IHNpemU9XCJzbWFsbFwiIGNvbG9yPXtlZGl0YW5kbz8ncHJpbWFyeSc6J2RlZmF1bHQnfVxyXG4gICAgICAgICAgICAgICAgICAgIGJvdG9uLWNvbmZpcm1hcj17cHJlZ3VudGEudmFyX25hbWV9XHJcbiAgICAgICAgICAgICAgICAgICAgdGFiSW5kZXg9ey0xfVxyXG4gICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpPT57XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlKE5PX0NBTUJJQVJfX1ZFUklGSUNBUl9TSV9FU19ORUNFU0FSSU8pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRFZGl0YW5kbyhmYWxzZSlcclxuICAgICAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgICAgPjxJQ09OLkNoZWNrLz48L0J1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgfVxyXG4gICAgPC9kaXY+XHJcbn1cclxuXHJcbmludGVyZmFjZSBJY2FzaWxsZXJvQ29uT3BjaW9uZXN7XHJcbiAgICB2YXJfbmFtZTpJZFZhcmlhYmxlLFxyXG4gICAgY2FzaWxsZXJvczpPcGNpb25bXVxyXG59XHJcblxyXG5mdW5jdGlvbiBPcGNpb25lc0Rlc3BsaWVndWUoXHJcbiAgICB7Y2FzaWxsZXJvQ29uT3BjaW9uZXMsIGZvclBrLCAgbGVlciwgZGVzcGxpZWd1ZUNvbnRlbmlkb306XHJcbiAgICB7Y2FzaWxsZXJvQ29uT3BjaW9uZXM6SWNhc2lsbGVyb0Nvbk9wY2lvbmVzLCBmb3JQazpGb3JQaywgbGVlcjpib29sZWFuLCBkZXNwbGllZ3VlQ29udGVuaWRvOid2ZXJ0aWNhbCd8J2hvcml6b250YWwnfVxyXG4pe1xyXG4gICAgY29uc3QgZGVzcGxlZ2FyT3Ryb3MgPSAob3BjaW9uOk9wY2lvbiwgc29sb1BhcmFEZXNwbGllZ3VlOid2ZXJ0aWNhbCd8J2hvcml6b250YWwnfG51bGwpID0+IG9wY2lvbi5jYXNpbGxlcm9zLm1hcCgoc3ViUHJlZ3VudGE6UHJlZ3VudGEpPT4oXHJcbiAgICAgICAgc29sb1BhcmFEZXNwbGllZ3VlID09IG51bGwgfHwgc29sb1BhcmFEZXNwbGllZ3VlID09IHN1YlByZWd1bnRhLmRlc3BsaWVndWVDb250ZW5pZG8gP1xyXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwib3Ryb3MtZXNwZWNpZmljYXJcIiBrZXk9e3N1YlByZWd1bnRhLmlkX2Nhc2lsbGVyb30+XHJcbiAgICAgICAgICAgIDxQcmVndW50YURlc3BsaWVndWUgXHJcbiAgICAgICAgICAgICAgICBwcmVndW50YT17c3ViUHJlZ3VudGF9IFxyXG4gICAgICAgICAgICAgICAgZm9yUGs9e2ZvclBrfSBcclxuICAgICAgICAgICAgICAgIGRlc3BsaWVndWVFbmNhYmV6YWRvPSdzdXBlcmlvcidcclxuICAgICAgICAgICAgLz5cclxuICAgICAgICA8L2Rpdj46bnVsbFxyXG4gICAgKSlcclxuICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT1cImNvbnRlbmlkb1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm9wY2lvbmVzXCIgZGVzcGxpZWd1ZS1jb250ZW5pZG89e2Rlc3BsaWVndWVDb250ZW5pZG8/Pyd2ZXJ0aWNhbCd9PlxyXG4gICAgICAgICAgICB7Y2FzaWxsZXJvQ29uT3BjaW9uZXMuY2FzaWxsZXJvcy5tYXAoKG9wY2lvbjpPcGNpb24sIGk6bnVtYmVyKT0+XHJcbiAgICAgICAgICAgICAgICA8R3JpZCBrZXk9e29wY2lvbi5pZF9jYXNpbGxlcm99IGl0ZW1cclxuICAgICAgICAgICAgICAgICAgICBvY3VsdGFyLXNhbHRlYWRhPXtvcGNpb24uZGVzcGxpZWd1ZU9jdWx0YT8ob3BjaW9uLmV4cHJlc2lvbl9oYWJpbGl0YXJfanM/J0lOSEFCSUxJVEFSJzonU0knKTonTk8nfVxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgIDxPcGNpb25EZXNwbGllZ3VlIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNpbGxlcm89e29wY2lvbn0gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlPXtjYXNpbGxlcm9Db25PcGNpb25lcy52YXJfbmFtZX0gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbG9yT3BjaW9uPXtvcGNpb24uY2FzaWxsZXJvfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JQaz17Zm9yUGt9IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZWVyPXtsZWVyfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25Cb3RvbkJvcnJhcj17aT09MCB8fCBkZXNwbGllZ3VlQ29udGVuaWRvIT0naG9yaXpvbnRhbCd9XHJcbiAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICAgICB7ZGVzcGxpZWd1ZUNvbnRlbmlkbz09J2hvcml6b250YWwnP251bGw6ZGVzcGxlZ2FyT3Ryb3Mob3BjaW9uLG51bGwpfVxyXG4gICAgICAgICAgICAgICAgPC9HcmlkPlxyXG4gICAgICAgICAgICApfVxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIHtkZXNwbGllZ3VlQ29udGVuaWRvPT0naG9yaXpvbnRhbCc/Y2FzaWxsZXJvQ29uT3BjaW9uZXMuY2FzaWxsZXJvcy5tYXAoKG9wY2lvbjpPcGNpb24pPT5cclxuICAgICAgICAgICAgZGVzcGxlZ2FyT3Ryb3Mob3BjaW9uLG51bGwpXHJcbiAgICAgICAgKTpudWxsfVxyXG4gICAgPC9kaXY+XHJcbn1cclxuXHJcbmNvbnN0IG5vbWJyZUNhc2lsbGVybz17XHJcbiAgICBGOiAnZm9ybXVsYXJpbycsXHJcbiAgICBCOiAnYmxvcXVlJyxcclxuICAgIFA6ICdwcmVndW50YScsXHJcbiAgICBDUDogJ2Nvbmp1bnRvcHJlZ3VudGFzJyxcclxuICAgIE86ICdvcGNpb24nLFxyXG4gICAgT006ICdtdWx0aXBsZScsXHJcbiAgICBGSUxUUk86ICdmaWx0cm8nLFxyXG4gICAgQ09OUzogJ2NvbnNpc3RlbmNpYScsXHJcbiAgICBCRjogJ2JvdG9uZm9ybXVsYXJpbycsXHJcbiAgICBURVhUTzogJ2FjbGFyYWNpb25zdXBlcmlvcicsXHJcbn1cclxuXHJcbmZ1bmN0aW9uIERlc3BsZWdhckNhc2lsbGVybyhwcm9wczp7XHJcbiAgICBjYXNpbGxlcm86UHJlZ3VudGF8QmxvcXVlfEZpbHRyb3xDb25qdW50b1ByZWd1bnRhc3xCb3RvbkZvcm11bGFyaW98Q29uc2lzdGVuY2lhfE9wY2lvbk11bHRpcGxlfFRleHRvLFxyXG4gICAgaWQ/OnN0cmluZyxcclxuICAgIHN0eWxlPzpSZWFjdC5DU1NQcm9wZXJ0aWVzLFxyXG4gICAgZGVzcGxpZWd1ZUVuY2FiZXphZG8/OidsYXRlcmFsJ3wnc3VwZXJpb3InXHJcbiAgICBjaGlsZHJlbjpSZWFjdC5SZWFjdE5vZGV8UmVhY3QuUmVhY3ROb2RlW10sXHJcbiAgICBcIm9jdWx0YXItc2FsdGVhZGFcIj86J1NJJ3wnTk8nfCdJTkhBQklMSVRBUid8dW5kZWZpbmVkXHJcbn0pe1xyXG4gICAgcmV0dXJuIDxkaXYgXHJcbiAgICAgICAga2V5PXtgJHtwcm9wcy5jYXNpbGxlcm8udGlwb2N9LSR7cHJvcHMuaWR8fHByb3BzLmNhc2lsbGVyby5pZF9jYXNpbGxlcm99YH1cclxuICAgICAgICBjbGFzc05hbWU9e2BjYXNpbGxlcm8gJHtub21icmVDYXNpbGxlcm9bcHJvcHMuY2FzaWxsZXJvLnRpcG9jXX1gfVxyXG4gICAgICAgIGlkPXtwcm9wcy5pZH1cclxuICAgICAgICBzdHlsZT17cHJvcHMuc3R5bGV9XHJcbiAgICAgICAgZGVzcGxpZWd1ZS1lbmNhYmV6YWRvPXtwcm9wcy5jYXNpbGxlcm8uZGVzcGxpZWd1ZUVuY2FiZXphZG8/P3Byb3BzLmRlc3BsaWVndWVFbmNhYmV6YWRvPz8nc3VwZXJpb3InfVxyXG4gICAgICAgIG9jdWx0YXItc2FsdGVhZGE9e3Byb3BzW1wib2N1bHRhci1zYWx0ZWFkYVwiXX1cclxuICAgID57cHJvcHMuY2hpbGRyZW59PC9kaXY+XHJcbn1cclxuXHJcbmZ1bmN0aW9uIFByZWd1bnRhRGVzcGxpZWd1ZShwcm9wczp7XHJcbiAgICBwcmVndW50YTpQcmVndW50YSwgXHJcbiAgICBmb3JQazpGb3JQaywgXHJcbiAgICBkZXNwbGllZ3VlRW5jYWJlemFkbzonbGF0ZXJhbCd8J3N1cGVyaW9yJ1xyXG59KXtcclxuICAgIHZhciB7cHJlZ3VudGF9ID0gcHJvcHM7XHJcbiAgICBjb25zdCBkaXNwYXRjaD11c2VEaXNwYXRjaCgpO1xyXG4gICAgdmFyIGVzdGFkbzpFc3RhZG9WYXJpYWJsZTtcclxuICAgIHZhciBpZCA9IGBwcmVndW50YS0ke3ByZWd1bnRhLmlkX2Nhc2lsbGVyb31gXHJcbiAgICByZWdpc3RyYXJFbGVtZW50byh7XHJcbiAgICAgICAgaWQsIFxyXG4gICAgICAgIGRpcmVjdDp0cnVlLCBcclxuICAgICAgICBmdW46IHJlZ2lzdHJhZG9yRGVWYXJpYWJsZShwcmVndW50YSlcclxuICAgIH0pXHJcbiAgICB2YXIgc3R5bGU6IENTU1Byb3BlcnRpZXMgPSB7fVxyXG4gICAgaWYocHJlZ3VudGEuZGVzcGxpZWd1ZSA9PSAnZ3JpZCcpe1xyXG4gICAgICAgIHN0eWxlLmRpc3BsYXkgPSAnZ3JpZCc7XHJcbiAgICAgICAgc3R5bGUuZ3JpZFRlbXBsYXRlQ29sdW1ucyA9ICdyZXBlYXQoMywxZnIpJztcclxuICAgIH1cclxuICAgIHJldHVybiA8RGVzcGxlZ2FyQ2FzaWxsZXJvXHJcbiAgICAgICAgaWQ9e2lkfVxyXG4gICAgICAgIGNhc2lsbGVybz17cHJlZ3VudGF9XHJcbiAgICAgICAgc3R5bGU9e3N0eWxlfVxyXG4gICAgICAgIG51ZXN0cm8tdGlwb3Zhcj17cHJlZ3VudGEudGlwb3Zhcnx8XCJtdWx0aXBsZVwifSBcclxuICAgICAgICBvY3VsdGFyLXNhbHRlYWRhPXtwcmVndW50YS5kZXNwbGllZ3VlT2N1bHRhPyhwcmVndW50YS5leHByZXNpb25faGFiaWxpdGFyX2pzPydJTkhBQklMSVRBUic6J1NJJyk6J05PJ31cclxuICAgICAgICBkZXNwbGllZ3VlRW5jYWJlemFkbz17cHJvcHMuZGVzcGxpZWd1ZUVuY2FiZXphZG99XHJcblxyXG4gICAgPlxyXG4gICAgICAgIDxFbmNhYmV6YWRvRGVzcGxpZWd1ZSBcclxuICAgICAgICAgICAgY2FzaWxsZXJvPXtwcmVndW50YX0gXHJcbiAgICAgICAgICAgIGxlZXI9e3ByZWd1bnRhLmxlZXIhPT1mYWxzZX0gIFxyXG4gICAgICAgICAgICBmb3JQaz17cHJvcHMuZm9yUGt9XHJcbiAgICAgICAgLz5cclxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImNvbnRlbmlkb1wiPntcclxuICAgICAgICAgICAgcHJlZ3VudGEudGlwb3Zhcj09XCJzaV9ub1wiPzxHcmlkIGNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDxTaU5vRGVzcGxpZWd1ZSBcclxuICAgICAgICAgICAgICAgICAgICBjYXNpbGxlcm9Db25PcGNpb25lcz17cHJlZ3VudGF9IFxyXG4gICAgICAgICAgICAgICAgICAgIGZvclBrPXtwcm9wcy5mb3JQa30gXHJcbiAgICAgICAgICAgICAgICAgICAgZGVzcGxpZWd1ZUNvbnRlbmlkbz17cHJvcHMucHJlZ3VudGEuZGVzcGxpZWd1ZUNvbnRlbmlkbz8/J3ZlcnRpY2FsJ31cclxuICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgIDwvR3JpZD46XHJcbiAgICAgICAgICAgIHByZWd1bnRhLnRpcG92YXI9PVwib3BjaW9uZXNcIiA/XHJcbiAgICAgICAgICAgICAgICA8T3BjaW9uZXNEZXNwbGllZ3VlIFxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2lsbGVyb0Nvbk9wY2lvbmVzPXtwcmVndW50YX0gXHJcbiAgICAgICAgICAgICAgICAgICAgZm9yUGs9e3Byb3BzLmZvclBrfSBcclxuICAgICAgICAgICAgICAgICAgICBsZWVyPXshIXByZWd1bnRhLmxlZXJ9XHJcbiAgICAgICAgICAgICAgICAgICAgZGVzcGxpZWd1ZUNvbnRlbmlkbz17cHJlZ3VudGEuZGVzcGxpZWd1ZUNvbnRlbmlkbz8/J3ZlcnRpY2FsJ31cclxuICAgICAgICAgICAgICAgIC8+OlxyXG4gICAgICAgICAgICBwcmVndW50YS50aXBvdmFyPT1udWxsP1xyXG4gICAgICAgICAgICAgICAgKHByZWd1bnRhLmNhc2lsbGVyb3MgYXMgKE9wY2lvbk11bHRpcGxlfENvbnNpc3RlbmNpYSlbXSkubWFwKChvcGNpb25NdWx0aXBsZSk9PlxyXG4gICAgICAgICAgICAgICAgICAgIG9wY2lvbk11bHRpcGxlLnRpcG9jPT0nT00nPyAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgPE9wY2lvbk11bHRpcGxlRGVzcGxpZWd1ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5PXtvcGNpb25NdWx0aXBsZS5pZF9jYXNpbGxlcm99IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BjaW9uTT17b3BjaW9uTXVsdGlwbGV9IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yUGs9e3Byb3BzLmZvclBrfSBcclxuICAgICAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICAgICA6IC8vbGFzIGNvbnNpc3RlbmNpYXMgcHVlZGVuIHNlciBoZXJtYW5hcyBkZSBPTVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8Q29uc2lzdGVuY2lhRGVzcGxpZWd1ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5PXtvcGNpb25NdWx0aXBsZS5pZF9jYXNpbGxlcm99XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNpbGxlcm89e29wY2lvbk11bHRpcGxlfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yUGs9e3Byb3BzLmZvclBrfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvPiAgICBcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgOlxyXG4gICAgICAgICAgICAoKHByZWd1bnRhU2ltcGxlOlByZWd1bnRhU2ltcGxlKT0+XHJcbiAgICAgICAgICAgICAgICA8Q2FtcG9cclxuICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17cHJlZ3VudGFTaW1wbGUuY2FsY3VsYWRhP3RydWU6ZmFsc2V9XHJcbiAgICAgICAgICAgICAgICAgICAgcHJlZ3VudGE9e3ByZWd1bnRhU2ltcGxlfVxyXG4gICAgICAgICAgICAgICAgICAgIGZvclBrPXtwcm9wcy5mb3JQa31cclxuICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICkocHJlZ3VudGEpXHJcbiAgICAgICAgfTwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwicGllLXByZWd1bnRhXCI+XHJcbiAgICAgICAgICAgIDxTYWx0b0Rlc3BsaWVndWUgXHJcbiAgICAgICAgICAgICAgICBjYXNpbGxlcm89e3ByZWd1bnRhfVxyXG4gICAgICAgICAgICAgICAgcHJlZmlqbz17cHJlZ3VudGEudGlwb3Zhcj09XCJvcGNpb25lc1wiPyhcclxuICAgICAgICAgICAgICAgICAgICBwcmVndW50YS5jYXNpbGxlcm9zLnNvbWUob3BjaW9uPT5vcGNpb24uc2FsdG8pP1wicmVzdG8gZGUgbGFzIG9wY2lvbmVzXCI6XCJ0b2RhcyBsYXMgb3BjaW9uZXNcIlxyXG4gICAgICAgICAgICAgICAgKTpcIlwifVxyXG4gICAgICAgICAgICAvPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9EZXNwbGVnYXJDYXNpbGxlcm8+XHJcbn1cclxuXHJcbnZhciBjYWxjdWxhckRpc2FibGVkQkZBZ3JlZ2FyTGlzdG8gPSAoXHJcbiAgICBjb25maWdTb3J0ZW9Gb3JtdWxhcmlvOkNvbmZpZ3VyYWNpb25Tb3J0ZW9Gb3JtdWxhcmlvfG51bGwsIFxyXG4gICAgaGFiaWxpdGFjaW9uQm90b25Gb3JtdWxhcmlvOiBDb25maWd1cmFjaW9uSGFiaWxpdGFyQm90b25Gb3JtdWxhcmlvfG51bGwsXHJcbiAgICBmb3JtdWxhcmlvOklkRm9ybXVsYXJpb1xyXG4pPT57XHJcbiAgICBpZihoYWJpbGl0YWNpb25Cb3RvbkZvcm11bGFyaW8gJiYgaGFiaWxpdGFjaW9uQm90b25Gb3JtdWxhcmlvW2Zvcm11bGFyaW9dKXtcclxuICAgICAgICByZXR1cm4gIWhhYmlsaXRhY2lvbkJvdG9uRm9ybXVsYXJpb1tmb3JtdWxhcmlvXS5oYWJpbGl0YXJfYWdyZWdhcl9saXN0b1xyXG4gICAgfWVsc2V7XHJcbiAgICAgICAgcmV0dXJuICEhKGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW8gJiYgY29uZmlnU29ydGVvRm9ybXVsYXJpby5pZF9mb3JtdWxhcmlvX2luZGl2aWR1YWwgPT0gZm9ybXVsYXJpbylcclxuICAgIH1cclxufVxyXG5cclxuZnVuY3Rpb24gYm90b25lc0RlbEZvcm11bGFyaW8ocjpSZXNwdWVzdGFzLCB1bmlkYWRfYW5hbGlzaXM6SWRVbmlkYWRBbmFsaXNpcywgZXN0cnVjdHVyYTpFc3RydWN0dXJhLCBmb3JQa1BhZHJlOkZvclBrLCBmZWVkYmFja0FsbDp7W2Zvcm11bGFyaW8gaW4gUGxhaW5Gb3JQa106Rm9ybVN0cnVjdHVyZVN0YXRlPElkVmFyaWFibGUsIFZhbG9yLCBJZEZpbj59KTpIdG1sVGFnPEhUTUxEaXZFbGVtZW50PntcclxuICAgIHZhciBmb3Jtc1ZpdmllbmRhID0gZ2V0Rm9ybXVsYXJpb3NGb3JWYWx1ZVBrUmFpeihmb3JQa1BhZHJlW2VzdHJ1Y3R1cmEucGtBZ3JlZ2FkYVVhUHBhbF0pO1xyXG4gICAgdmFyIHVhRGVmID0gZXN0cnVjdHVyYS51bmlkYWRlc19hbmFsaXNpc1t1bmlkYWRfYW5hbGlzaXNdO1xyXG4gICAgdmFyIGFycmF5RXN0cnVjdHVyYUZvcm11bGFyaW9zID0gKGxpa2VBcihlc3RydWN0dXJhLmZvcm11bGFyaW9zKSkuYXJyYXkoKTtcclxuICAgIHZhciB4ID0gbGlrZUFyKHVhRGVmLmhpamFzKS5maWx0ZXIodWFIaWphPT5cclxuICAgICAgICAgICAgLy9kZXNjYXJ0byB1YXMgcXVlIG5vIGVzdMOpbiBlbiBuaW5ndW4gZm9ybVxyXG4gICAgICAgICAgICBhcnJheUVzdHJ1Y3R1cmFGb3JtdWxhcmlvcy5maWx0ZXIoKGluZm9Gb3JtdWxhcmlvKT0+XHJcbiAgICAgICAgICAgICAgICBpbmZvRm9ybXVsYXJpby5jYXNpbGxlcm9zLnVuaWRhZF9hbmFsaXNpcyA9PSB1YUhpamE/LnVuaWRhZF9hbmFsaXNpcyAmJiBmb3Jtc1ZpdmllbmRhLmluY2x1ZGVzKGluZm9Gb3JtdWxhcmlvLmNhc2lsbGVyb3MuaWRfY2FzaWxsZXJvIGFzIElkRm9ybXVsYXJpbylcclxuICAgICAgICAgICAgKS5sZW5ndGggPiAwXHJcbiAgICAgICAgKS5tYXAodWFIaWphPT4oXHJcbiAgICAgICAgdWFIaWphID09IG51bGwgPyBudWxsIDpcclxuICAgICAgICBodG1sLmRpdih7Y2xhc3M6J3VhLWhpamFzJ30sW1xyXG4gICAgICAgICAgICBodG1sLmRpdih1YUhpamEudW5pZGFkX2FuYWxpc2lzKSxcclxuICAgICAgICAgICAgaHRtbC5kaXYoXHJcbiAgICAgICAgICAgICAgICBsaWtlQXIoclt1YUhpamEudW5pZGFkX2FuYWxpc2lzXXx8W10pLm1hcCgocmVzcHVlc3Rhc0hpamEsIGkpPT57XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIG51bSA9IE51bWJlcihpKSsxXHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGZvclBrSGlqYVBhcmNpYWwgPSB7Li4uZm9yUGtQYWRyZSwgW3VhSGlqYS5wa19hZ3JlZ2FkYV06IG51bX07XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW8gPSBlc3RydWN0dXJhLmNvbmZpZ1NvcnRlbz9lc3RydWN0dXJhLmNvbmZpZ1NvcnRlb1tnZXRNYWluRm9ybUZvclZpdmllbmRhKGZvclBrUGFkcmVbZXN0cnVjdHVyYS5wa0FncmVnYWRhVWFQcGFsXSldOm51bGxcclxuICAgICAgICAgICAgICAgICAgICB2YXIgaGFiaWxpdGFjaW9uQm90b25Gb3JtdWxhcmlvID0gZXN0cnVjdHVyYS5oYWJpbGl0YWNpb25Cb3RvbkZvcm11bGFyaW87XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGh0bWwuZGl2KHtjbGFzczonbnVtZXJhZG9yLXVhJ30sIFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaHRtbC5kaXYoe2NsYXNzOidib3RvbmVzLXVhJ30sW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaHRtbC5kaXYoe2NsYXNzOidudW1lcm8tdWEnfSxudW0udG9TdHJpbmcoKSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5saWtlQXIoZXN0cnVjdHVyYS5mb3JtdWxhcmlvcylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoZm9ybURlZj0+Zm9ybURlZi5jYXNpbGxlcm9zLnVuaWRhZF9hbmFsaXNpcyA9PSB1YUhpamEudW5pZGFkX2FuYWxpc2lzICYmIGZvcm1zVml2aWVuZGEuaW5jbHVkZXMoZm9ybURlZi5jYXNpbGxlcm9zLmlkX2Nhc2lsbGVybyBhcyBJZEZvcm11bGFyaW8pKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLm1hcCgoX2Zvcm1EZWYsIGZvcm11bGFyaW8pPT57XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZvclBrID0gey4uLmZvclBrSGlqYVBhcmNpYWwsIGZvcm11bGFyaW99O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmZWVkYmFja0Zvcm0gPSBmZWVkYmFja0FsbFt0b1BsYWluRm9yUGsoZm9yUGspXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmVlZGJhY2tGb3JtID8gaHRtbC5kaXYoe30sW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBodG1sLmJ1dHRvbigodWFIaWphISkucGtfYWdyZWdhZGErXCIgb2s6IFwiKyhOdW1iZXIoaSkrMSkpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3RvbkZvcm11bGFyaW9Db25SZXN1bWVuKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvclBrLCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW0sIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdHVhbDogdHJ1ZSB8fCBjYWxjdWxhckFjdHVhbEJGKGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW8sIG51bSwgbnVsbCwgZm9ybXVsYXJpbywgciksIC8vUkVWSVNBUiB0cnVlIHBhcmEgcXVlIG5vIHNlIGdyaXNlblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZpbzpmYWxzZSwgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ6IGNhbGN1bGFyRGlzYWJsZWRCRihjb25maWdTb3J0ZW9Gb3JtdWxhcmlvLCBoYWJpbGl0YWNpb25Cb3RvbkZvcm11bGFyaW8sIG51bSwgZm9ybXVsYXJpbywgcilcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZWVkYmFja0Zvcm0sIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtkZXNwbGllZ3VlT2N1bHRhOmZhbHNlLCBleHByZXNpb25faGFiaWxpdGFyX2pzOicnLCBub21icmU6Zm9ybXVsYXJpbywgYWNsYXJhY2lvbjpudWxsLCBzYWx0bzpmb3JtdWxhcmlvfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvclBrUGFkcmUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImJvdG9uLWlyLXJlc3VtZW4tZm9ybXVsYXJpb1wiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXN0cnVjdHVyYS5mb3JtdWxhcmlvc1tmb3JtdWxhcmlvXS5jYXNpbGxlcm9zXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKSA6IG51bGxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLmFycmF5KCkubWFwKHg9PnggPT0gbnVsbCA/IG51bGwgOiB4KS5yZXZlcnNlKCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICxib3RvbmVzRGVsRm9ybXVsYXJpbyhyZXNwdWVzdGFzSGlqYSwgdWFIaWphLnVuaWRhZF9hbmFsaXNpcywgZXN0cnVjdHVyYSwgZm9yUGtIaWphUGFyY2lhbCwgZmVlZGJhY2tBbGwpXHJcbiAgICAgICAgICAgICAgICAgICAgXSlcclxuICAgICAgICAgICAgICAgIH0pLmFycmF5KCkubWFwKHg9PnggPT0gbnVsbCA/IG51bGwgOiB4KVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgXSlcclxuICAgICkpLmFycmF5KCkubWFwKHg9PnggPT0gbnVsbCA/IG51bGwgOiB4KTtcclxuICAgIHJldHVybiBodG1sLmRpdigvKntzdHlsZTonZGlzcGxheTpmbGV4OyBmbGV4LWRpcmVjdGlvbjpyb3cnfSwqL3gpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBUZXh0b0Rlc3BsaWVndWUocHJvcHM6e2Nhc2lsbGVybzpUZXh0bywgZm9yUGs6Rm9yUGt9KXtcclxuICAgIHZhciB7Y2FzaWxsZXJvLCBmb3JQa30gPSBwcm9wcztcclxuICAgIGNvbnN0IGRpc3BhdGNoID0gdXNlRGlzcGF0Y2goKTtcclxuICAgIHZhciBoYWJpbGl0YWRvciA9IGNhc2lsbGVyby5leHByZXNpb25faGFiaWxpdGFyX2pzP2dldEZ1bmNpb25IYWJpbGl0YXIoY2FzaWxsZXJvLmV4cHJlc2lvbl9oYWJpbGl0YXJfanMpOigpPT50cnVlO1xyXG4gICAgdmFyIHttb2RvRGVzcGxpZWd1ZX0gPSB1c2VTZWxlY3RvclZpdmllbmRhKGZvclBrKTtcclxuICAgIHZhciBpZCA9IGB0ZXh0by0ke2Nhc2lsbGVyby5pZF9jYXNpbGxlcm99YDtcclxuICAgIHJlZ2lzdHJhckVsZW1lbnRvKHtpZCwgc3R5bGU6J2Rpc3BsYXknLCBmdW46KHI6UmVzcHVlc3Rhcyk9PmhhYmlsaXRhZG9yKHIpIHx8IG1vZG9EZXNwbGllZ3VlPT0nbWV0YWRhdG9zJz8nYmxvY2snOidub25lJ30pXHJcbiAgICB2YXIgZXNSZXN1bWVuRm9ybXVsYXJpbyA9IGNhc2lsbGVyby5jYXNpbGxlcm89PSdSZXNGb3InIGFzIElkQ2FzaWxsZXJvOyAvLyBUT0RPOiBDYW1iaWEgZXN0byBxdWUgZXN0w6EgamFyY29kZWFkby5cclxuICAgIGlmKGVzUmVzdW1lbkZvcm11bGFyaW8pe1xyXG4gICAgICAgIHJlZ2lzdHJhckVsZW1lbnRvKHtpZCwgZGlyZWN0OnRydWUsIFxyXG4gICAgICAgICAgICBmdW46KFxyXG4gICAgICAgICAgICAgICAgcjpSZXNwdWVzdGFzLCBcclxuICAgICAgICAgICAgICAgIF9mZWVkYmFja0Zvcm06IEZvcm1TdHJ1Y3R1cmVTdGF0ZTxJZFZhcmlhYmxlLCBWYWxvciwgSWRGaW4+LCBcclxuICAgICAgICAgICAgICAgIGVsZW1lbnRvOkhUTUxEaXZFbGVtZW50LCBcclxuICAgICAgICAgICAgICAgIGZlZWRiYWNrQWxsOntbZm9ybXVsYXJpbyBpbiBQbGFpbkZvclBrXTpGb3JtU3RydWN0dXJlU3RhdGU8SWRWYXJpYWJsZSxWYWxvciwgSWRGaW4+fSwgXHJcbiAgICAgICAgICAgICAgICBlc3RydWN0dXJhOkVzdHJ1Y3R1cmFcclxuICAgICAgICAgICAgKT0+e1xyXG4gICAgICAgICAgICAgICAgZWxlbWVudG8uc3R5bGUuZGlzcGxheT0nJztcclxuICAgICAgICAgICAgICAgIC8vQHRzLWlnbm9yZSBsYXMgcmVzcHVlc3RhcyBzb24gcmVzcHVlc3Rhc1JhaXogcG9ycXVlIFJlc0ZvciBlc3TDoSBlbiBlbCBmb3JtIHBwYWxcclxuICAgICAgICAgICAgICAgIGlmKHJbJ3Jlc3VtZW5Fc3RhZG8nXSBhcyBSZXN1bWVuRXN0YWRvID09ICd2YWNpbycpe1xyXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnRvLnRleHRDb250ZW50ID0gXCJyZWxldmFtaWVudG8gc2luIGVtcGV6YXJcIjtcclxuICAgICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnRvLnRleHRDb250ZW50ID0gXCJyZWxldmFtaWVudG8gZW1wZXphZG9cIjtcclxuICAgICAgICAgICAgICAgICAgICB2YXIge3VuaWRhZF9hbmFsaXNpc30gPSBlc3RydWN0dXJhLmZvcm11bGFyaW9zW2ZvclBrLmZvcm11bGFyaW9dLmNhc2lsbGVyb3M7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudG8uaW5uZXJIVE1MPVwiXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudG8uYXBwZW5kQ2hpbGQoYm90b25lc0RlbEZvcm11bGFyaW8ociwgdW5pZGFkX2FuYWxpc2lzLCBlc3RydWN0dXJhLCBmb3JQaywgZmVlZGJhY2tBbGwpLmNyZWF0ZSgpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcbiAgICB2YXIgaXIgPSAoZGVmQm90b246RGVmaW5pY2lvbkZvcm11bGFyaW9BYnJpcik9PntcclxuICAgICAgICAvLyB2YXIgbnVldmFGb3JQaz17Li4uZm9yUGssIGZvcm11bGFyaW86aWRGb3JtdWxhcmlvRGVzdGlub307XHJcbiAgICAgICAgLy8gbnVldmFGb3JQa1tudWV2b0NhbXBvUGtdID0gZGVmQm90b24ubnVtXHJcbiAgICAgICAgZGlzcGF0Y2hCeVBhc3MoYWNjaW9uX2FicmlyX2Zvcm11bGFyaW8se2ZvclBrOmRlZkJvdG9uLmZvclBrfSk7XHJcbiAgICAgICAgZGlzcGF0Y2goZGlzcGF0Y2hlcnMuQ0FNQklBUl9GT1JNVUxBUklPKHtmb3JQazpkZWZCb3Rvbi5mb3JQaywgYXBpbGFyVnVlbHRhOnRydWV9KSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gPERlc3BsZWdhckNhc2lsbGVybyBcclxuICAgICAgICBpZD17YCR7aWR9LWV4dGVybm9gfVxyXG4gICAgICAgIGNhc2lsbGVybz17Y2FzaWxsZXJvfVxyXG4gICAgPlxyXG4gICAgICAgIDxFbmNhYmV6YWRvRGVzcGxpZWd1ZSBjYXNpbGxlcm89e2Nhc2lsbGVyb30gbGVlcj17ZmFsc2V9IGZvclBrPXtmb3JQa30vPlxyXG4gICAgICAgIDxkaXYgaWQ9e2lkfSBzdHlsZT17e2Rpc3BsYXk6J25vbmUnfX0+PC9kaXY+XHJcbiAgICAgICAge2VzUmVzdW1lbkZvcm11bGFyaW8/XHJcbiAgICAgICAgPEJ1dHRvbiBjbGFzc05hbWU9XCJzcGVjaWFsLWJ1dHRvblwiIGlkPVwiYm90b24taXItcmVzdW1lbi1mb3JtdWxhcmlvXCIgc3R5bGU9e3tkaXNwbGF5Oidub25lJ319XHJcbiAgICAgICAgICAgIG9uQ2xpY2s9eyhldmVudCk9PntcclxuICAgICAgICAgICAgICAgIGlyKEpTT04ucGFyc2UoKGV2ZW50LnRhcmdldCEgYXMgdW5rbm93biBhcyBIVE1MQnV0dG9uRWxlbWVudCkuZ2V0QXR0cmlidXRlKCdkZWYtYnV0dG9uJykhKSlcclxuICAgICAgICAgICAgfX1cclxuICAgICAgICA+aXIgKGludGVybm8pPC9CdXR0b24+XHJcbiAgICAgICAgOm51bGx9XHJcblxyXG4gICAgPC9EZXNwbGVnYXJDYXNpbGxlcm8+XHJcbn1cclxuXHJcbmZ1bmN0aW9uIEZpbHRyb0Rlc3BsaWVndWUocHJvcHM6e2ZpbHRybzpGaWx0cm8sIGZvclBrOkZvclBrfSl7XHJcbiAgICB2YXIge2ZpbHRyb30gPSBwcm9wcztcclxuICAgIHJldHVybiA8RGVzcGxlZ2FyQ2FzaWxsZXJvIGNhc2lsbGVybz17ZmlsdHJvfT5cclxuICAgICAgICA8RGVzcGxpZWd1ZUVuY2FiZXphZG8gY2FzaWxsZXJvPXtmaWx0cm99Lz5cclxuICAgIDwvRGVzcGxlZ2FyQ2FzaWxsZXJvPlxyXG59XHJcblxyXG5mdW5jdGlvbiBDb25zaXN0ZW5jaWFEZXNwbGllZ3VlKHByb3BzOntjYXNpbGxlcm86Q29uc2lzdGVuY2lhLCBmb3JQazpGb3JQa30pe1xyXG4gICAgdmFyIHtjYXNpbGxlcm8sIGZvclBrfSA9IHByb3BzO1xyXG4gICAgdmFyIGhhYmlsaXRhZG9yID0gY2FzaWxsZXJvLmV4cHJlc2lvbl9oYWJpbGl0YXJfanM/Z2V0RnVuY2lvbkhhYmlsaXRhcihjYXNpbGxlcm8uZXhwcmVzaW9uX2hhYmlsaXRhcl9qcyk6KCk9PnRydWU7XHJcbiAgICB2YXIge21vZG9EZXNwbGllZ3VlfSA9IHVzZVNlbGVjdG9yVml2aWVuZGEoZm9yUGspO1xyXG4gICAgdmFyIGlkID0gYGNvbnNpc3RlbmNpYS0ke2Nhc2lsbGVyby5pZF9jYXNpbGxlcm99YDtcclxuICAgIHJlZ2lzdHJhckVsZW1lbnRvKHtpZCwgc3R5bGU6J2Rpc3BsYXknLCBmdW46KHI6UmVzcHVlc3Rhcyk9PmhhYmlsaXRhZG9yKHIpIHx8IG1vZG9EZXNwbGllZ3VlPT0nbWV0YWRhdG9zJz8nYmxvY2snOidub25lJ30pXHJcbiAgICByZXR1cm4gPERlc3BsZWdhckNhc2lsbGVybyBcclxuICAgICAgICBpZD17aWR9XHJcbiAgICAgICAgY2FzaWxsZXJvPXtjYXNpbGxlcm99XHJcbiAgICAgICAgc3R5bGU9e3tkaXNwbGF5Oidub25lJ319XHJcbiAgICA+XHJcbiAgICAgICAgPEVuY2FiZXphZG9EZXNwbGllZ3VlIGNhc2lsbGVybz17Y2FzaWxsZXJvfSBsZWVyPXtmYWxzZX0gZm9yUGs9e2ZvclBrfS8+XHJcbiAgICA8L0Rlc3BsZWdhckNhc2lsbGVybz5cclxufVxyXG5cclxudHlwZSBEZWZpbmljaW9uRm9ybXVsYXJpb0FicmlyPVxyXG4oe2ZvclBrOkZvclBrLCBudW06bnVtYmVyLCBhY3R1YWw6Ym9vbGVhbiwgcHJldmlvOmJvb2xlYW59IHwgXHJcbntmb3JQazpGb3JQaywgbnVtOm51bWJlciwgYWN0dWFsOmJvb2xlYW4sIHByZXZpbzpmYWxzZSwgZXNBZ3JlZ2FyOnRydWV9IHwgXHJcbntmb3JQazpGb3JQaywgbnVtOm51bWJlciwgYWN0dWFsOmJvb2xlYW4sIHByZXZpbzpmYWxzZSwgZXNDb25maXJtYXI6dHJ1ZX0gfFxyXG57Zm9yUGs6Rm9yUGssIG51bTpudW1iZXIsIGFjdHVhbDpib29sZWFuLCBwcmV2aW86ZmFsc2UsIHBlcm1pdGVCb3JyYXI6Ym9vbGVhbn0gfFxyXG57Zm9yUGs6Rm9yUGssIG51bTpmYWxzZSwgYWN0dWFsOmJvb2xlYW4sIHByZXZpbzp0cnVlLCB1bmljbzp0cnVlfSlcclxuJiB7ZXNDb25maXJtYXI/OnRydWUsIGVzQWdyZWdhcj86dHJ1ZSwgcGVybWl0ZUJvcnJhcj86Ym9vbGVhbiwgZGlzYWJsZWQ/OmJvb2xlYW58dW5kZWZpbmVkfTtcclxuXHJcblxyXG52YXIgYm90b25Gb3JtdWxhcmlvQ29uUmVzdW1lbiA9IChcclxuICAgIGRlZkJvdG9uOkRlZmluaWNpb25Gb3JtdWxhcmlvQWJyaXIsIFxyXG4gICAgZmVlZGJhY2tGb3JtOkZvcm1TdHJ1Y3R1cmVTdGF0ZTxJZFZhcmlhYmxlLCBWYWxvciwgSWRGaW4+LCBcclxuICAgIHJlc3B1ZXN0YXNBdW1lbnRhZGFzOlJlc3B1ZXN0YXMsXHJcbiAgICBjYXNpbGxlcm86e2Rlc3BsaWVndWVPY3VsdGE/OmJvb2xlYW58bnVsbCwgZXhwcmVzaW9uX2hhYmlsaXRhcl9qcz86c3RyaW5nLCBhY2xhcmFjaW9uOnN0cmluZ3xudWxsLCBleHByZXNpb25faGFiaWxpdGFyPzpzdHJpbmcsIG5vbWJyZT86c3RyaW5nLCBzYWx0bzpzdHJpbmd8bnVsbCwgZXNwZWNpYWw/OmFueX0sXHJcbiAgICBmb3JQa1BhZHJlOiBGb3JQayxcclxuICAgIGlkQnV0dG9uOnN0cmluZyxcclxuICAgIGZvcm11bGFyaW9BQWJyaXI6Rm9ybXVsYXJpb1xyXG4pPT57XHJcbiAgICB2YXIgZm9yUGs6Rm9yUGsgPSBkZWZCb3Rvbi5mb3JQaztcclxuICAgIHZhciBzdWZpam9JZEVsZW1lbnRvID0gdG9QbGFpbkZvclBrKGZvclBrKSsoZGVmQm90b24uZXNDb25maXJtYXI/Jy1saXN0byc6JycpO1xyXG4gICAgdmFyIGlkID0gYGRpdi1ib3Rvbi1mb3JtdWxhcmlvLSR7c3VmaWpvSWRFbGVtZW50b31gO1xyXG4gICAgdmFyIGVzdGFkbyA9IGZlZWRiYWNrRm9ybS5yZXN1bWVuO1xyXG4gICAgcmV0dXJuIGh0bWwudHIoe1xyXG4gICAgICAgIGlkLCBcclxuICAgICAgICBjbGFzczpcInNlY2Npb24tYm90b24tZm9ybXVsYXJpb1wiICwgXHJcbiAgICAgICAgJGF0dHJzOntcclxuICAgICAgICAgICAgXCJudWVzdHJvLXZhbGlkYXRvclwiOmRlZkJvdG9uLmFjdHVhbD8nYWN0dWFsJzpkZWZCb3Rvbi5wcmV2aW8/J3ZhbGlkYSc6J3RvZGF2aWFfbm8nLFxyXG4gICAgICAgICAgICBcIm9jdWx0YXItc2FsdGVhZGFcIjpjYXNpbGxlcm8uZGVzcGxpZWd1ZU9jdWx0YT8oY2FzaWxsZXJvLmV4cHJlc2lvbl9oYWJpbGl0YXJfanM/J0lOSEFCSUxJVEFSJzonU0knKTonTk8nLFxyXG4gICAgICAgICAgICBcInRpZW5lLXZhbG9yXCI6XCJOT1wiLFxyXG4gICAgICAgICAgICBcImRlZi1idXR0b25cIjpKU09OLnN0cmluZ2lmeShkZWZCb3RvbilcclxuICAgICAgICB9XHJcbiAgICB9LCBbXHJcbiAgICAgICAgY2FzaWxsZXJvLmFjbGFyYWNpb24/XHJcbiAgICAgICAgICAgIGh0bWwudGQoe2NsYXNzOlwiYWNsYXJhY2lvblwifSwgW2JyZWFrZWFibGVUZXh0KGNhc2lsbGVyby5hY2xhcmFjaW9uKV0pXHJcbiAgICAgICAgOm51bGwsXHJcbiAgICAgICAgaHRtbC50ZCh7Y29sc3BhbjooZGVmQm90b24uZXNBZ3JlZ2FyIHx8IGRlZkJvdG9uLmVzQ29uZmlybWFyKT9cclxuICAgICAgICAgICAgICAgIChjYXNpbGxlcm8uZXNwZWNpYWw/LmNhbXBvc1Jlc3VtZW4ubGVuZ3RoPz8xKSsoY2FzaWxsZXJvLmFjbGFyYWNpb24/MDoxKVxyXG4gICAgICAgICAgICA6bnVsbH0sW1xyXG4gICAgICAgICAgICBCdXR0b24yKHtcclxuICAgICAgICAgICAgICAgIC8vIGlkOmB2YXItJHtpZFZhcmlhYmxlfWAsXHJcbiAgICAgICAgICAgICAgICBpZDpgYm90b24tZm9ybXVsYXJpby0ke3N1Zmlqb0lkRWxlbWVudG99YCwgXHJcbiAgICAgICAgICAgICAgICB2YXJpYW50Olwib3V0bGluZWRcIixcclxuICAgICAgICAgICAgICAgIGRpc2FibGVkOiBkZWZCb3Rvbi5kaXNhYmxlZCxcclxuICAgICAgICAgICAgICAgIGNvbG9yOlwiaW5oZXJpdFwiLFxyXG4gICAgICAgICAgICAgICAgb25DbGljazooKT0+e1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKGRlZkJvdG9uLmVzQ29uZmlybWFyKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoZGVmQm90b24ubnVtICE9IG51bGwpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoY2FzaWxsZXJvLnNhbHRvKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgQkZfdmFybmFtZSA9ICckQi5GOicrIGNhc2lsbGVyby5zYWx0byBhcyBJZFZhcmlhYmxlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2hCeVBhc3MoYWNjaW9uX3JlZ2lzdHJhcl9yZXNwdWVzdGEse2ZvclBrOmZvclBrUGFkcmUsIHZhcmlhYmxlOkJGX3Zhcm5hbWUsIHJlc3B1ZXN0YTpkZWZCb3Rvbi5udW09PTA/bnVsbDpkZWZCb3Rvbi5udW0gYXMgVmFsb3J9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoQnlQYXNzKGFjY2lvbl9yZWdpc3RyYXJfcmVzcHVlc3RhLHtmb3JQazpmb3JQa1BhZHJlLCB2YXJpYWJsZTpjYXNpbGxlcm8uZXhwcmVzaW9uX2hhYmlsaXRhciBhcyBJZFZhcmlhYmxlLCByZXNwdWVzdGE6ZGVmQm90b24ubnVtIGFzIFZhbG9yfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJ1dHRvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkQnV0dG9uKSEgYXMgSFRNTEJ1dHRvbkVsZW1lbnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1dHRvbi5zZXRBdHRyaWJ1dGUoJ2RlZi1idXR0b24nLCBKU09OLnN0cmluZ2lmeShkZWZCb3RvbikpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBidXR0b24uY2xpY2soKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgJGF0dHJzOntcclxuICAgICAgICAgICAgICAgICAgICBcInJlc3VtZW4tZXN0YWRvXCI6ZXN0YWRvIT0ndmFjaW8nP2VzdGFkbzogZGVmQm90b24uYWN0dWFsPydhY3R1YWwnOmRlZkJvdG9uLnByZXZpbz9lc3RhZG86J3RvZGF2aWFfbm8nLFxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgLCBjaGlsZHJlbjpbXHJcbiAgICAgICAgICAgICAgICAgICAgKGRlZkJvdG9uLmVzQWdyZWdhcj8nYWdyZWdhcic6ZGVmQm90b24uZXNDb25maXJtYXI/J0xpc3RvJzpjYXNpbGxlcm8ubm9tYnJlICsgJyAnICsgKGRlZkJvdG9uLm51bXx8JycpKSxcclxuICAgICAgICAgICAgICAgICAgICBodG1sLnN2Zyh7Y2xhc3M6XCJNdWlTdmdJY29uLXJvb3RcIiwgZm9jdXNhYmxlOmZhbHNlLCB2aWV3Ym94OlwiMCAwIDI0IDI0XCIsIFwiYXJpYS1oaWRkZW5cIjpcInRydWVcIn0sW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBodG1sLnBhdGgoe2Q6KGRlZkJvdG9uLmVzQWdyZWdhcj9tYXRlcmlhbElvSWNvbnNTdmdQYXRoLkFkZDpkZWZCb3Rvbi5lc0NvbmZpcm1hcj9tYXRlcmlhbElvSWNvbnNTdmdQYXRoLkNoZWNrOmNhc2lsbGVyby5zYWx0bz9tYXRlcmlhbElvSWNvbnNTdmdQYXRoLkZvcndhcmQ6bWF0ZXJpYWxJb0ljb25zU3ZnUGF0aC5FeGl0VG9BcHApfSlcclxuICAgICAgICAgICAgICAgICAgICBdKVxyXG4gICAgICAgICAgICAgICAgXVxyXG4gICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgKGRlZkJvdG9uLnBlcm1pdGVCb3JyYXI/XHJcbiAgICAgICAgICAgICAgICBCdXR0b24yKHtcclxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6XCJib3Rvbi1ib3JyYXItdWEtdmFjaWFcIixcclxuICAgICAgICAgICAgICAgICAgICBjb2xvcjpcImRlZmF1bHRcIixcclxuICAgICAgICAgICAgICAgICAgICB2YXJpYW50Olwib3V0bGluZWRcIixcclxuICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjpcclxuICAgICAgICAgICAgICAgICAgICAgICAgaHRtbC5zdmcoe2NsYXNzOlwiTXVpU3ZnSWNvbi1yb290XCIsIGZvY3VzYWJsZTpmYWxzZSwgdmlld2JveDpcIjAgMCAyNCAyNFwiLCBcImFyaWEtaGlkZGVuXCI6XCJ0cnVlXCJ9LFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh0bWwucGF0aCh7ZDptYXRlcmlhbElvSWNvbnNTdmdQYXRoLkRlbGV0ZUZvcmV2ZXJ9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBdKSwgXHJcbiAgICAgICAgICAgICAgICAgICAgb25DbGljazooKT0+YWNjaW9uX2JvcnJhcl9mb3JtdWxhcmlvKHtmb3JQaywgZm9yUGtQYWRyZX0pfSlcclxuICAgICAgICAgICAgOm51bGwpIFxyXG4gICAgICAgIF0pLFxyXG4gICAgICAgIChkZWZCb3Rvbi5udW0gIT09IGZhbHNlICYmICFkZWZCb3Rvbi5lc0FncmVnYXIgJiYgIWRlZkJvdG9uLmVzQ29uZmlybWFyP1xyXG4gICAgICAgICAgICAoY2FzaWxsZXJvLmVzcGVjaWFsPy5jYW1wb3NSZXN1bWVuPz9bLypkZWZCb3Rvbi5udW0udG9TdHJpbmcoKSovXSkubWFwKFxyXG4gICAgICAgICAgICAgICAgKGNhbXBvOnN0cmluZyk9Pmh0bWwudGQocmVzcHVlc3Rhc0F1bWVudGFkYXNbZm9ybXVsYXJpb0FBYnJpci51bmlkYWRfYW5hbGlzaXNdW2RlZkJvdG9uLm51bS0xXVtjYW1wbyBhcyBJZFZhcmlhYmxlXSlcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgIDpudWxsKVxyXG4gICAgICAgIC8vIGh0bWwuZGl2KHtjbGFzczonaW5saW5lLWRpYWxvZycsICRhdHRyczp7XCJpbmxpbmUtZGlhbG9nLW9wZW5cIjogY29uZmlybWFyRm9yemFySXIgPT0gZGVmQm90b24ubnVtPyd2aXNpYmxlJzonaGlkZGVuJ319LFsgICAgICAgICAgICAgICAgXSlcclxuICAgICAgICBcclxuICAgICAgICAvKlxyXG4gICAgICAgICAgICB7ZGVmQm90b24uZXNBZ3JlZ2FyPzw+IDxzcGFuPiAgPC9zcGFuPiA8QnV0dG9uXHJcbiAgICAgICAgICAgICAgICB2YXJpYW50PVwib3V0bGluZWRcIlxyXG4gICAgICAgICAgICAgICAgY29sb3I9XCJpbmhlcml0XCJcclxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpPT57XHJcbiAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICA+PElDT04uQ2hlY2svPjwvQnV0dG9uPjwvPjpudWxsfVxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgICovXHJcbiAgICBdKS5jcmVhdGUoKVxyXG59XHJcblxyXG52YXIgYnVzY2FySG5vc0Zvcm11bGFyaW8gPSAoaWRGb3JtdWxhcmlvRGVzdGlubzpJZEZvcm11bGFyaW8pPT57XHJcbiAgICB2YXIgZXN0cnVjdHVyYSA9IGdldEVzdHJ1Y3R1cmEoKTtcclxuICAgIHZhciB1YSA9IGVzdHJ1Y3R1cmEuZm9ybXVsYXJpb3NbaWRGb3JtdWxhcmlvRGVzdGlub10uY2FzaWxsZXJvcy51bmlkYWRfYW5hbGlzaXM7XHJcbiAgICByZXR1cm4gbGlrZUFyKGVzdHJ1Y3R1cmEuZm9ybXVsYXJpb3MpXHJcbiAgICAgICAgLmZpbHRlcigoaW5mb0Zvcm11bGFyaW86SW5mb0Zvcm11bGFyaW8sIGlkRm9ybTpJZEZvcm11bGFyaW8pPT5cclxuICAgICAgICAgICAgaW5mb0Zvcm11bGFyaW8uY2FzaWxsZXJvcy51bmlkYWRfYW5hbGlzaXMgPT0gdWFcclxuICAgICAgICApLm1hcCgoX2luZm9Gb3JtdWxhcmlvOkluZm9Gb3JtdWxhcmlvLCBpZEZvcm06SWRGb3JtdWxhcmlvKT0+XHJcbiAgICAgICAgICAgIGlkRm9ybVxyXG4gICAgICAgICkuYXJyYXkoKVxyXG59XHJcblxyXG52YXIgY2hlY2tGb3Jtc1ZhY2lvcyA9IChmb3JtczpJZEZvcm11bGFyaW9bXSwgZmVlZGJhY2tBbGw6e1xyXG4gICAgW2Zvcm11bGFyaW8gaW4gUGxhaW5Gb3JQa106Rm9ybVN0cnVjdHVyZVN0YXRlPElkVmFyaWFibGUsIFZhbG9yLCBJZEZpbj4gLy8gcmVzdWx0YWRvIGRlbCByb3dWYWxpZGF0b3IgcGFyYSBlc3RhZG8uZm9yUGtcclxufSwgZm9yUGs6Rm9yUGspPT57XHJcbiAgICByZXR1cm4gZm9ybXMuZmlsdGVyKChmb3JtOklkRm9ybXVsYXJpbyk9PntcclxuICAgICAgICBsZXQgbXlmb3JQaz17Li4uZm9yUGssIGZvcm11bGFyaW86Zm9ybX07XHJcbiAgICAgICAgdmFyIGZlZWRiYWNrID0gZmVlZGJhY2tBbGxbdG9QbGFpbkZvclBrKG15Zm9yUGspXTtcclxuICAgICAgICByZXR1cm4gZmVlZGJhY2sucmVzdW1lbiAhPSAndmFjaW8nXHJcbiAgICB9KS5sZW5ndGggPT0gMFxyXG59XHJcblxyXG5mdW5jdGlvbiBCb3RvbkZvcm11bGFyaW9EZXNwbGllZ3VlKHByb3BzOntjYXNpbGxlcm86Qm90b25Gb3JtdWxhcmlvLCBmb3JtdWxhcmlvOkZvcm11bGFyaW8sIGZvclBrOkZvclBrfSl7XHJcbiAgICB2YXIge2Nhc2lsbGVybywgZm9yUGt9ID0gcHJvcHM7XHJcbiAgICB2YXIgaGFiaWxpdGFkb3IgPSBjYXNpbGxlcm8uZXhwcmVzaW9uX2hhYmlsaXRhcl9qcz9nZXRGdW5jaW9uSGFiaWxpdGFyKGNhc2lsbGVyby5leHByZXNpb25faGFiaWxpdGFyX2pzKTooKT0+dHJ1ZTtcclxuICAgIHZhciB7b3BjaW9uZXN9ID0gdXNlU2VsZWN0b3JWaXZpZW5kYShmb3JQayk7XHJcbiAgICAvL3ZhciBpZEZvcm11bGFyaW9EZXN0aW5vID0gJ0Y6JytjYXNpbGxlcm8uc2FsdG8hIGFzIElkRm9ybXVsYXJpbzsgICAvL29yaWdpbmFsXHJcbiAgICB2YXIgYXJtb05vbVNhbHRvPWNhc2lsbGVyby5zYWx0bz8uc3Vic3RyaW5nKDAsMik9PSdGOic/Y2FzaWxsZXJvLnNhbHRvLnNsaWNlKDIpOmNhc2lsbGVyby5zYWx0bztcclxuICAgIC8vY29uc29sZS5sb2coJ0JvdG9uRm9ybXVsYXJpb0Rlc3BsaWVndWUgYXJtb05vbVNhbHRvICcgK2FybW9Ob21TYWx0byk7XHJcbiAgICB2YXIgaWRGb3JtdWxhcmlvRGVzdGlubyA9ICdGOicrYXJtb05vbVNhbHRvISBhcyBJZEZvcm11bGFyaW87XHJcbiAgICB2YXIgZXN0cnVjdHVyYSA9IGdldEVzdHJ1Y3R1cmEoKTtcclxuICAgIHZhciB7Zm9ybXVsYXJpb0FBYnJpcn0gPSB1c2VTZWxlY3RvcigoX3N0YXRlOkNhc29TdGF0ZSk9Pih7XHJcbiAgICAgICAgZm9ybXVsYXJpb0FBYnJpcjplc3RydWN0dXJhLmZvcm11bGFyaW9zW2lkRm9ybXVsYXJpb0Rlc3Rpbm9dLmNhc2lsbGVyb3MsXHJcbiAgICB9KSk7XHJcbiAgICB2YXIgc3VmaWpvSWRFbGVtZW50byA9IHRvUGxhaW5Gb3JQayhmb3JQayk7XHJcbiAgICAvKlxyXG4gICAgcmVnaXN0cmFyRWxlbWVudG8oe1xyXG4gICAgICAgIGlkOmBkaXYtYm90b24tZm9ybXVsYXJpby0ke3N1Zmlqb0lkRWxlbWVudG99YCwgXHJcbiAgICAgICAgYXR0cjonZXN0YS1pbmhhYmlsaXRhZGEnLCBcclxuICAgICAgICAvLyBmdW46IChyOlJlc3B1ZXN0YXMpPT5oYWJpbGl0YWRvcihyKT8nU0knOidOTydcclxuICAgICAgICBmdW46IChfcjpSZXNwdWVzdGFzKT0+J05PJ1xyXG4gICAgfSk7XHJcbiAgICByZWdpc3RyYXJFbGVtZW50bzxIVE1MQnV0dG9uRWxlbWVudD4oe1xyXG4gICAgICAgIGlkOmBib3Rvbi1mb3JtdWxhcmlvLSR7c3VmaWpvSWRFbGVtZW50b31gLCBcclxuICAgICAgICBwcm9wOidkaXNhYmxlZCcsIFxyXG4gICAgICAgIC8vIGZ1bjogKHI6UmVzcHVlc3Rhcyk9PiFoYWJpbGl0YWRvcihyKVxyXG4gICAgICAgIGZ1bjogKF9yOlJlc3B1ZXN0YXMpPT5mYWxzZVxyXG4gICAgfSk7XHJcbiAgICAqL1xyXG4gICAgY29uc3QgZGlzcGF0Y2ggPSB1c2VEaXNwYXRjaCgpO1xyXG4gICAgdmFyIFtjb25maXJtYXJGb3J6YXJJciwgc2V0Q29uZmlybWFyRm9yemFySXJdID0gdXNlU3RhdGU8RGVmaW5pY2lvbkZvcm11bGFyaW9BYnJpcnxmYWxzZXxudWxsPihudWxsKTtcclxuICAgIHZhciBtdWx0aXBsZUZvcm11bGFyaW9zPWZvcm11bGFyaW9BQWJyaXIudW5pZGFkX2FuYWxpc2lzICE9IHByb3BzLmZvcm11bGFyaW8udW5pZGFkX2FuYWxpc2lzO1xyXG4gICAgdmFyIG51ZXZvQ2FtcG9QayA9IGRlZk9wZXJhdGl2by5kZWZVQVtmb3JtdWxhcmlvQUFicmlyLnVuaWRhZF9hbmFsaXNpc10ucGs7XHJcbiAgIC8vIHZhciB2YXJfbmFtZT0nJEIuJytjYXNpbGxlcm8uc2FsdG87IC8vb3JpZ2luYWxcclxuICAgIHZhciB2YXJfbmFtZT0nJEIuRjonK2FybW9Ob21TYWx0bztcclxuICAgIHZhciBpZFNlY2Npb249YHNlY2Npb24tYm90b24tZm9ybXVsYXJpby0ke3Zhcl9uYW1lfWA7XHJcbiAgICB2YXIgaWRCdXR0b249YHNwZWNpYWwtYnV0dG9uLSR7aWRTZWNjaW9ufWA7XHJcbiAgICByZWdpc3RyYXJFbGVtZW50bzxIVE1MRGl2RWxlbWVudD4oe1xyXG4gICAgICAgIGlkOmlkU2VjY2lvbiwgXHJcbiAgICAgICAgZGlyZWN0OnRydWUsXHJcbiAgICAgICAgZnVuOiAocmVzcHVlc3Rhc0F1bWVudGFkYXM6UmVzcHVlc3RhcywgZmVlZGJhY2tSb3c6IEZvcm1TdHJ1Y3R1cmVTdGF0ZTxJZFZhcmlhYmxlLCBWYWxvciwgSWRGaW4+LCBkaXY6SFRNTERpdkVsZW1lbnQsXHJcbiAgICAgICAgICAgICAgICBmZWVkYmFja0FsbDp7XHJcbiAgICAgICAgICAgICAgICAgICAgW2Zvcm11bGFyaW8gaW4gUGxhaW5Gb3JQa106Rm9ybVN0cnVjdHVyZVN0YXRlPElkVmFyaWFibGUsIFZhbG9yLCBJZEZpbj4gLy8gcmVzdWx0YWRvIGRlbCByb3dWYWxpZGF0b3IgcGFyYSBlc3RhZG8uZm9yUGtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgKT0+e1xyXG4gICAgICAgICAgICB0cnl7XHJcbiAgICAgICAgICAgICAgICB2YXIgbGlzdGFEZUJvdG9uZXNBYnJpcjpEZWZpbmljaW9uRm9ybXVsYXJpb0FicmlyW10gPSBbXTtcclxuICAgICAgICAgICAgICAgLy8gdmFyIGVzVmFyQWN0dWFsID0gZmVlZGJhY2tSb3cuYWN0dWFsID09ICckQi5GOicrY2FzaWxsZXJvLnNhbHRvOyAgLy9vcmlnaW5hbFxyXG4gICAgICAgICAgICAgICAgdmFyIGVzVmFyQWN0dWFsID0gZmVlZGJhY2tSb3cuYWN0dWFsICA9PSAnJEIuRjonK2FybW9Ob21TYWx0bztcclxuICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coJ0JvdG9uRm9ybXVsYXJpb0Rlc3BsaWVndWUgZXNWYXJBY3R1YWwgJyArZXNWYXJBY3R1YWwgICk7XHJcbiAgICAgICAgICAgICAgICBpZihtdWx0aXBsZUZvcm11bGFyaW9zICYmIGNhc2lsbGVyby5zYWx0byE9bnVsbCl7XHJcbiAgICAgICAgICAgICAgICAgIC8vICBsZXQgZGVmRm9ybXVsYXJpbzpJbmZvRm9ybXVsYXJpbyA9IGVzdHJ1Y3R1cmEuZm9ybXVsYXJpb3NbJ0Y6JytjYXNpbGxlcm8uc2FsdG8gYXMgSWRGb3JtdWxhcmlvXTsgICAgICAvL29yaWdpbmFsXHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGRlZkZvcm11bGFyaW86SW5mb0Zvcm11bGFyaW8gPSBlc3RydWN0dXJhLmZvcm11bGFyaW9zWydGOicrYXJtb05vbVNhbHRvIGFzIElkRm9ybXVsYXJpb107XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGRlZlVBID0gZXN0cnVjdHVyYS51bmlkYWRlc19hbmFsaXNpc1tkZWZGb3JtdWxhcmlvLmNhc2lsbGVyb3MudW5pZGFkX2FuYWxpc2lzIV07XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNvbmp1bnRvID0gcmVzcHVlc3Rhc0F1bWVudGFkYXNbZGVmRm9ybXVsYXJpby5jYXNpbGxlcm9zLnVuaWRhZF9hbmFsaXNpcyFdO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBjYW50aWRhZEVzcGVyYWRhID0gcmVzcHVlc3Rhc0F1bWVudGFkYXNbY2FzaWxsZXJvLmV4cHJlc2lvbl9oYWJpbGl0YXIgYXMgSWRWYXJpYWJsZV07XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIG51bUFjdHVhbDpudW1iZXJ8bnVsbCA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgIC8vICB2YXIgZXN0YWRvRGVsQm90b24gPSBmZWVkYmFja1Jvdy5mZWVkYmFja1snJEIuRjonK2Nhc2lsbGVyby5zYWx0byBhcyBJZFZhcmlhYmxlXS5lc3RhZG8gICAvL29yaWdpbmFsXHJcbiAgICAgICAgICAgICAgICAgICAgICB2YXIgZXN0YWRvRGVsQm90b24gPSBmZWVkYmFja1Jvdy5mZWVkYmFja1snJEIuRjonK2FybW9Ob21TYWx0byBhcyBJZFZhcmlhYmxlXS5lc3RhZG9cclxuICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdCb3RvbkZvcm11bGFyaW9EZXNwbGllZ3VlIGVzdGFkb0RlbEJvdG9uICcgK2VzdGFkb0RlbEJvdG9uICApO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBjb25maWdTb3J0ZW9Gb3JtdWxhcmlvID0gZXN0cnVjdHVyYS5jb25maWdTb3J0ZW8/ZXN0cnVjdHVyYS5jb25maWdTb3J0ZW9bZ2V0TWFpbkZvcm1Gb3JWaXZpZW5kYShmb3JQa1tlc3RydWN0dXJhLnBrQWdyZWdhZGFVYVBwYWxdKV06bnVsbFxyXG4gICAgICAgICAgICAgICAgICAgIHZhciBoYWJpbGl0YWNpb25Cb3RvbkZvcm11bGFyaW8gPSBlc3RydWN0dXJhLmhhYmlsaXRhY2lvbkJvdG9uRm9ybXVsYXJpbztcclxuICAgICAgICAgICAgICAgICAgICBsaXN0YURlQm90b25lc0FicmlyID0gbGlrZUFyKGNvbmp1bnRvKS5tYXAoKF8sIGkpPT57XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBudW06bnVtYmVyID0gbnVtYmVyT3JTdHJpbmdJbmNJZkFycmF5KGksIGNvbmp1bnRvKSBhcyBudW1iZXI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBmb3JQaz17Li4ucHJvcHMuZm9yUGssIGZvcm11bGFyaW86aWRGb3JtdWxhcmlvRGVzdGlubywgW251ZXZvQ2FtcG9Qa106bnVtfTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZvcm1Ibm9zID0gYnVzY2FySG5vc0Zvcm11bGFyaW8oaWRGb3JtdWxhcmlvRGVzdGlubylcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZlZWRiYWNrID0gZmVlZGJhY2tBbGxbdG9QbGFpbkZvclBrKGZvclBrKV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKG51bUFjdHVhbCA9PSBudWxsICYmIGZlZWRiYWNrLnJlc3VtZW4gPT0gXCJ2YWNpb1wiICYmIGVzdGFkb0RlbEJvdG9uID09J3ZhbGlkYScpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtQWN0dWFsID0gbnVtO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JQaywgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bWVuOm51bGwsIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtLCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdHVhbDogY2FsY3VsYXJBY3R1YWxCRihjb25maWdTb3J0ZW9Gb3JtdWxhcmlvLCBudW0sIG51bUFjdHVhbCwgaWRGb3JtdWxhcmlvRGVzdGlubywgcmVzcHVlc3Rhc0F1bWVudGFkYXMpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldmlvOiBudW1BY3R1YWwgPT0gbnVsbCwgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJtaXRlQm9ycmFyOiBsaWtlQXIoY29uanVudG8pLmFycmF5KCkubGVuZ3RoID09IE51bWJlcihpKSArIDEgJiYgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tGb3Jtc1ZhY2lvcyhmb3JtSG5vcywgZmVlZGJhY2tBbGwsIGZvclBrKSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGN1bGFyUGVybWl0ZUJvcnJhckJGKGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW8saWRGb3JtdWxhcmlvRGVzdGlubyksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZDogY2FsY3VsYXJEaXNhYmxlZEJGKGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW8sIGhhYmlsaXRhY2lvbkJvdG9uRm9ybXVsYXJpbywgbnVtLCBpZEZvcm11bGFyaW9EZXN0aW5vLCByZXNwdWVzdGFzQXVtZW50YWRhcylcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0pLmFycmF5KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYoXCJwdWVkZSBhZ3JlZ2FyIC8vVE9ETyBWRVIgRVNUT1wiICYmIChjb25qdW50byBpbnN0YW5jZW9mIEFycmF5IHx8IGNvbmp1bnRvID09IG51bGwpKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG51ZXZvVmFsb3JQaz0oY29uanVudG89PW51bGwgPyAwIDogY29uanVudG8ubGVuZ3RoKSArIDE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBmb3JQaz17Li4ucHJvcHMuZm9yUGssIGZvcm11bGFyaW86aWRGb3JtdWxhcmlvRGVzdGlubywgW251ZXZvQ2FtcG9Qa106bnVldm9WYWxvclBrfTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGRlYmVBZ3JlZ2FyT2xpc3RvID0gbnVtQWN0dWFsID09IG51bGwgJiYgKGNhbnRpZGFkRXNwZXJhZGEgPT0gbnVsbCB8fCBjYW50aWRhZEVzcGVyYWRhICE9IChjb25qdW50byAhPW51bGwgJiYgY29uanVudG8ubGVuZ3RoKSkgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAoZXN0YWRvRGVsQm90b24gPT0ndmFsaWRhJyB8fCBlc1ZhckFjdHVhbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RhRGVCb3RvbmVzQWJyaXIucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JQaywgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW06bnVldm9WYWxvclBrLCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVzQWdyZWdhcjp0cnVlLCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdHVhbDpkZWJlQWdyZWdhck9saXN0bywgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2aW86IGZhbHNlLCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkOiBjYWxjdWxhckRpc2FibGVkQkZBZ3JlZ2FyTGlzdG8oY29uZmlnU29ydGVvRm9ybXVsYXJpbywgaGFiaWxpdGFjaW9uQm90b25Gb3JtdWxhcmlvLCBpZEZvcm11bGFyaW9EZXN0aW5vKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGlzdGFEZUJvdG9uZXNBYnJpci5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvclBrLCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bTpudWV2b1ZhbG9yUGsgLSAxLCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVzQ29uZmlybWFyOnRydWUsIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0dWFsOmRlYmVBZ3JlZ2FyT2xpc3RvICYmICghY2FzaWxsZXJvLmxvbmdpdHVkIHx8IG51ZXZvVmFsb3JQayA+IE51bWJlcihjYXNpbGxlcm8ubG9uZ2l0dWQpKSwgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2aW86IGZhbHNlLCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkOiBjYWxjdWxhckRpc2FibGVkQkZBZ3JlZ2FyTGlzdG8oY29uZmlnU29ydGVvRm9ybXVsYXJpbywgaGFiaWxpdGFjaW9uQm90b25Gb3JtdWxhcmlvLCBpZEZvcm11bGFyaW9EZXN0aW5vKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgZm9yUGs9ey4uLnByb3BzLmZvclBrLCBmb3JtdWxhcmlvOmlkRm9ybXVsYXJpb0Rlc3Rpbm99O1xyXG4gICAgICAgICAgICAgICAgICAgIGxpc3RhRGVCb3RvbmVzQWJyaXIgPSBbe2ZvclBrLCBudW06ZmFsc2UsIHVuaWNvOnRydWUsIGFjdHVhbDplc1ZhckFjdHVhbCwgcHJldmlvOnRydWV9XVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdmFyIHRvZG9zTG9zQm90b25lcyA9IGxpc3RhRGVCb3RvbmVzQWJyaXIubWFwKGRlZkJvdG9uPT5cclxuICAgICAgICAgICAgICAgICAgICBib3RvbkZvcm11bGFyaW9Db25SZXN1bWVuKGRlZkJvdG9uLCBmZWVkYmFja0FsbFt0b1BsYWluRm9yUGsoZGVmQm90b24uZm9yUGspXT8/e3Jlc3VtZW46J3ZhY2lvJ30sIHJlc3B1ZXN0YXNBdW1lbnRhZGFzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNpbGxlcm8sIHByb3BzLmZvclBrLCBpZEJ1dHRvbiwgZm9ybXVsYXJpb0FBYnJpclxyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIGxldCBub21icmVzQ2FtcG9zUmVzdW1lbiA9IGxpa2VBcigoY2FzaWxsZXJvLmVzcGVjaWFsPy5jYW1wb3NSZXN1bWVufHxbXSkpLmFycmF5KCkubWFwKGM9PmMpO1xyXG4gICAgICAgICAgICAgICAgdmFyIGh0bWxTZWNjaW9uPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkU2VjY2lvbikhO1xyXG4gICAgICAgICAgICAgICAgaHRtbFNlY2Npb24uaW5uZXJIVE1MPVwiXCI7XHJcbiAgICAgICAgICAgICAgICBodG1sU2VjY2lvbi5hcHBlbmRDaGlsZChodG1sLnRhYmxlKHtjbGFzczpgdGFibGUgdGFibGUtc3RyaXBlZCAke25vbWJyZXNDYW1wb3NSZXN1bWVuLmxlbmd0aD8ndy1hdXRvJzonJ31gfSxbXHJcbiAgICAgICAgICAgICAgICAgICAgaHRtbC50aGVhZChbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGh0bWwudHIoW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzaWxsZXJvLmFjbGFyYWNpb24/aHRtbC50aCgpOm51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBodG1sLnRoKGNhc2lsbGVyby5ub21icmUpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9tYnJlc0NhbXBvc1Jlc3VtZW4ubWFwKChub21icmVDYW1wbyk9Pmh0bWwudGgobm9tYnJlQ2FtcG8pKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgXSlcclxuICAgICAgICAgICAgICAgICAgICBdKSxcclxuICAgICAgICAgICAgICAgICAgICBodG1sLnRib2R5KFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdG9kb3NMb3NCb3RvbmVzXHJcbiAgICAgICAgICAgICAgICAgICAgXSlcclxuICAgICAgICAgICAgICAgIF0pLmNyZWF0ZSgpKTtcclxuICAgICAgICAgICAgfWNhdGNoKGVycil7XHJcbiAgICAgICAgICAgICAgICB2YXIgZXJyb3IgPSB1bmV4cGVjdGVkKGVycik7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcImVudHJhIGFsIGNhdGNoXCIpXHJcbiAgICAgICAgICAgICAgICBkaXYudGV4dENvbnRlbnQ9J2VzdG8sIEZBTEzDiSAnK2Vycm9yLm1lc3NhZ2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9KTtcclxuICAgIGNvbnN0IGlyID0gKGRlZkJvdG9uOkRlZmluaWNpb25Gb3JtdWxhcmlvQWJyaXIpPT57XHJcbiAgICAgICAgaWYoIWNhc2lsbGVyby5zYWx0byl7XHJcbiAgICAgICAgICAgIG9wY2lvbmVzLm1vZG9EaXJlY3RvP1xyXG4gICAgICAgICAgICAgICAgbnVsbFxyXG4gICAgICAgICAgICA6XHJcbiAgICAgICAgICAgICAgICBkaXNwYXRjaChkaXNwYXRjaGVycy5WT0xWRVJfSERSKHt9KSk7XHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgIHZhciBudWV2YUZvclBrPXsuLi5mb3JQaywgZm9ybXVsYXJpbzppZEZvcm11bGFyaW9EZXN0aW5vfTtcclxuICAgICAgICAgICAgaWYobXVsdGlwbGVGb3JtdWxhcmlvcyl7XHJcbiAgICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlIGZvclBrIHkgc3VzIGNvbXBvbmVudGVzXHJcbiAgICAgICAgICAgICAgICBudWV2YUZvclBrW251ZXZvQ2FtcG9Qa10gPSBkZWZCb3Rvbi5udW1cclxuICAgICAgICAgICAgICAgIGlmKGRlZkJvdG9uLmVzQWdyZWdhcil7XHJcbiAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2hCeVBhc3MoYWNjaW9uX2FncmVnYXJfZm9ybXVsYXJpbyx7Zm9yUGs6bnVldmFGb3JQa30pO1xyXG4gICAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2hCeVBhc3MoYWNjaW9uX2FicmlyX2Zvcm11bGFyaW8se2ZvclBrOm51ZXZhRm9yUGt9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBkaXNwYXRjaChkaXNwYXRjaGVycy5DQU1CSUFSX0ZPUk1VTEFSSU8oe2ZvclBrOm51ZXZhRm9yUGssIGFwaWxhclZ1ZWx0YTp0cnVlfSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZihjb25maXJtYXJGb3J6YXJJcil7c2V0Q29uZmlybWFyRm9yemFySXIoZmFsc2UpfVxyXG4gICAgfTtcclxuICAgIHJldHVybiA8RGVzcGxlZ2FyQ2FzaWxsZXJvIGNhc2lsbGVybz17Y2FzaWxsZXJvfT5cclxuICAgICAgICA8ZGl2IGlkPXtpZFNlY2Npb259PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxCdXR0b24gY2xhc3NOYW1lPVwic3BlY2lhbC1idXR0b25cIiBpZD17aWRCdXR0b259XHJcbiAgICAgICAgICAgIG9uQ2xpY2s9eyhldmVudCk9PntcclxuICAgICAgICAgICAgICAgIGlyKEpTT04ucGFyc2UoKGV2ZW50LnRhcmdldCEgYXMgdW5rbm93biBhcyBIVE1MQnV0dG9uRWxlbWVudCkuZ2V0QXR0cmlidXRlKCdkZWYtYnV0dG9uJykhKSlcclxuICAgICAgICAgICAgfX1cclxuICAgICAgICA+aXIgKGludGVybm8pPC9CdXR0b24+XHJcbiAgICAgICAgPERpYWxvZyBcclxuICAgICAgICAgICAgY2xhc3NOYW1lPVwibnVlc3Ryby1kaWFsb2dvXCJcclxuICAgICAgICAgICAgb3Blbj17ISFjb25maXJtYXJGb3J6YXJJcn1cclxuICAgICAgICAgICAgb25DbG9zZT17KCk9PnNldENvbmZpcm1hckZvcnphcklyKG51bGwpfVxyXG4gICAgICAgID5cclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJudWVzdHJvLWRpYWxvZ29cIj5cclxuICAgICAgICAgICAgICAgIDxUeXBvZ3JhcGh5Pk5vIHNlIHB1ZWRlIGF2YW56YXIgYWwgc2lndWllbnRlIGZvcm11bGFyaW8uPC9UeXBvZ3JhcGh5PlxyXG4gICAgICAgICAgICAgICAgPFR5cG9ncmFwaHk+UXVpesOhcyBubyB0ZXJtaW7DsyBkZSBjb250ZXN0YXIgbGFzIHByZWd1bnRhcyBjb3JyZXNwb25kaWVudGVzPC9UeXBvZ3JhcGh5PlxyXG4gICAgICAgICAgICAgICAgPFR5cG9ncmFwaHk+UXVpesOhcyBubyBjb3JyZXNwb25kZSBlbiBiYXNlIGEgbGFzIHJlc3B1ZXN0YXMgb2J0ZW5pZGFzPC9UeXBvZ3JhcGh5PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPEJ1dHRvbiBjb2xvcj1cInNlY29uZGFyeVwiIG9uQ2xpY2s9eygpPT5jb25maXJtYXJGb3J6YXJJciAmJiBpcihjb25maXJtYXJGb3J6YXJJcil9PmZvcnphcjwvQnV0dG9uPlxyXG4gICAgICAgICAgICA8QnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIHZhcmlhbnQ9XCJjb250YWluZWRcIiBvbkNsaWNrPXsoKT0+c2V0Q29uZmlybWFyRm9yemFySXIobnVsbCl9PkVudGVuZGlkbzwvQnV0dG9uPlxyXG4gICAgICAgIDwvRGlhbG9nPlxyXG4gICAgPC9EZXNwbGVnYXJDYXNpbGxlcm8+XHJcbn1cclxuXHJcbmZ1bmN0aW9uIENhc2lsbGVyb0Rlc2Nvbm9jaWRvKHByb3BzOntjYXNpbGxlcm86Q2FzaWxsZXJvQmFzZSwgZm9yUGs6Rm9yUGt9KXtcclxuICAgIHJldHVybiA8RGVzcGxlZ2FyQ2FzaWxsZXJvIFxyXG4gICAgICAgIGlkPXtgY2FzaWxsZXJvZGVzY29ub2NpZG8tJHtwcm9wcy5jYXNpbGxlcm8uaWRfY2FzaWxsZXJvfWB9XHJcbiAgICAgICAgY2FzaWxsZXJvPXtwcm9wcy5jYXNpbGxlcm8gYXMgQmxvcXVlfVxyXG4gICAgICAgIHN0eWxlPXt7ZGlzcGxheTonbm9uZSd9fVxyXG4gICAgPlxyXG4gICAgICAgIDxUeXBvZ3JhcGh5PlRpcG8gZGUgY2FzaWxsZXJvIG5vIGltcGxlbWVudGFkbzogXCJ7cHJvcHMuY2FzaWxsZXJvLnRpcG9jfVwiIHBhcmEgXCJ7cHJvcHMuY2FzaWxsZXJvLmNhc2lsbGVyb31cIjwvVHlwb2dyYXBoeT5cclxuICAgICAgICA8RW5jYWJlemFkb0Rlc3BsaWVndWUgY2FzaWxsZXJvPXtwcm9wcy5jYXNpbGxlcm8gYXMgQ2FzaWxsZXJvRW5jYWJlemFibGV9IGxlZXI9e2ZhbHNlfSBmb3JQaz17cHJvcHMuZm9yUGt9Lz5cclxuICAgIDwvRGVzcGxlZ2FyQ2FzaWxsZXJvPlxyXG59XHJcblxyXG5mdW5jdGlvbiB1c2VTZWxlY3RvclZpdmllbmRhKGZvclBrOkZvclBrKXtcclxuICAgIHJldHVybiB1c2VTZWxlY3Rvcigoc3RhdGU6Q2Fzb1N0YXRlKT0+e1xyXG4gICAgICAgIHZhciBlc3RydWN0dXJhID0gZ2V0RXN0cnVjdHVyYSgpO1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIGZvcm11bGFyaW86IGVzdHJ1Y3R1cmEuZm9ybXVsYXJpb3NbZm9yUGsuZm9ybXVsYXJpb10uY2FzaWxsZXJvcyxcclxuICAgICAgICAgICAgbW9kb0Rlc3BsaWVndWU6IHRydWUgfHwgc3RhdGUubW9kby5kZW1vP3N0YXRlLm9wY2lvbmVzLm1vZG9EZXNwbGllZ3VlOidyZWxldmFtaWVudG8nLFxyXG4gICAgICAgICAgICBtb2RvOiBzdGF0ZS5tb2RvLFxyXG4gICAgICAgICAgICBvcGNpb25lczogc3RhdGUub3BjaW9uZXMsXHJcbiAgICAgICAgfVxyXG4gICAgfSlcclxufVxyXG5cclxuZnVuY3Rpb24gQ29uanVudG9QcmVndW50YXNEZXNwbGllZ3VlKHByb3BzOntjYXNpbGxlcm86Q29uanVudG9QcmVndW50YXMsIGZvcm11bGFyaW86Rm9ybXVsYXJpbywgZm9yUGs6Rm9yUGt9KXtcclxuICAgIGxldCB7Y2FzaWxsZXJvLCBmb3JQa30gPSBwcm9wcztcclxuICAgIHZhciBpZCA9IGBjb25qdW50by1wcmVndW50YXMtJHtjYXNpbGxlcm8uaWRfY2FzaWxsZXJvfWA7XHJcbiAgICByZWdpc3RyYXJFbGVtZW50byh7XHJcbiAgICAgICAgaWQsIFxyXG4gICAgICAgIGRpcmVjdDp0cnVlLCBcclxuICAgICAgICBmdW46IHJlZ2lzdHJhZG9yRGVWYXJpYWJsZShjYXNpbGxlcm8pXHJcbiAgICB9KVxyXG4gICAgbGV0IG1vZG9EZXNwbGllZ3VlID0gXCJub3JtYWxcIjtcclxuICAgIGxldCBoYWJpbGl0YWRvID0gdHJ1ZTtcclxuICAgIHJldHVybiBoYWJpbGl0YWRvIHx8IG1vZG9EZXNwbGllZ3VlPT0nbWV0YWRhdG9zJz88RGVzcGxlZ2FyQ2FzaWxsZXJvIGlkPXtpZH0gY2FzaWxsZXJvPXtjYXNpbGxlcm99PlxyXG4gICAgICAgIDxFbmNhYmV6YWRvRGVzcGxpZWd1ZSBjYXNpbGxlcm89e2Nhc2lsbGVyb30gZm9yUGs9e2ZvclBrfSBsZWVyPXtjYXNpbGxlcm8ubGVlciE9PWZhbHNlfS8+XHJcbiAgICAgICAgPERlc3BsZWdhckNvbnRlbmlkb0ludGVybm9CbG9xdWVPRm9ybXVsYXJpbyBibG9xdWVPRm9ybXVsYXJpbz17Y2FzaWxsZXJvfSBmb3JtdWxhcmlvPXtwcm9wcy5mb3JtdWxhcmlvfSBmb3JQaz17Zm9yUGt9IG11bHRpcGxlPXtmYWxzZX0vPlxyXG4gICAgPC9EZXNwbGVnYXJDYXNpbGxlcm8+Om51bGw7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIERlc3BsZWdhckNvbnRlbmlkb0ludGVybm9CbG9xdWVPRm9ybXVsYXJpbyhwcm9wczp7YmxvcXVlT0Zvcm11bGFyaW86QmxvcXVlfEZvcm11bGFyaW98Q29uanVudG9QcmVndW50YXMsIGZvcm11bGFyaW86Rm9ybXVsYXJpbywgZm9yUGs6Rm9yUGssIG11bHRpcGxlOmJvb2xlYW59KXtcclxuICAgIHZhciBwYXJjaWFsaXphYmxlID0gcHJvcHMuYmxvcXVlT0Zvcm11bGFyaW8udGlwb2M9PSdGJztcclxuICAgIGNvbnN0IFt2ZXJUb2RvLCBzZXRWZXJUb2RvXSA9IHVzZVN0YXRlKCFwYXJjaWFsaXphYmxlKTtcclxuICAgIGNvbnN0IFtmb3JQa0FjdHVhbCwgc2V0Rm9yUGtBY3R1YWxdID0gdXNlU3RhdGU8SWRDYXNpbGxlcm98bnVsbD4obnVsbCk7XHJcbiAgICBpZihwYXJjaWFsaXphYmxlKXtcclxuICAgICAgICBpZihmb3JQa0FjdHVhbCAhPSBwcm9wcy5ibG9xdWVPRm9ybXVsYXJpby5jYXNpbGxlcm8pe1xyXG4gICAgICAgICAgICBzZXRWZXJUb2RvKGZhbHNlKVxyXG4gICAgICAgICAgICBzZXRGb3JQa0FjdHVhbChwcm9wcy5ibG9xdWVPRm9ybXVsYXJpby5jYXNpbGxlcm8pXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHVzZUVmZmVjdCgoKT0+e1xyXG4gICAgICAgICAgICB2YXIgdGltZXIgPSBzZXRUaW1lb3V0KCgpPT57XHJcbiAgICAgICAgICAgICAgICBzZXRWZXJUb2RvKHRydWUpO1xyXG4gICAgICAgICAgICB9LDI1MClcclxuICAgICAgICAgICAgcmV0dXJuICgpPT57XHJcbiAgICAgICAgICAgICAgICBpZih0aW1lcil7XHJcbiAgICAgICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcbiAgICBjb25zdCBsaW1pdGVOb1ZlclRvZG8gPSAzO1xyXG4gICAgdXNlRWZmZWN0KCgpPT57XHJcbiAgICAgICAgaWYocHJvcHMuYmxvcXVlT0Zvcm11bGFyaW8udGlwb2M9PSdGJyl7XHJcbiAgICAgICAgICAgIHZvbGNhZG9JbmljaWFsRWxlbWVudG9zUmVnaXN0cmFkb3MocHJvcHMuZm9yUGspO1xyXG4gICAgICAgIH1cclxuICAgIH0sW3RvUGxhaW5Gb3JQayhwcm9wcy5mb3JQayksdmVyVG9kb10pXHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIGlmKHByb3BzLmJsb3F1ZU9Gb3JtdWxhcmlvLnRpcG9jPT0nRicgJiYgdmVyVG9kbyl7XHJcbiAgICAgICAgICAgIHZhciB7c2lndWllbnRlVmFyaWFibGUsIHZhcmlhYmxlQWN0dWFsfSA9IGRpc3BhdGNoQnlQYXNzKGFjY2lvbl9yZWdpc3RyYXJfcmVzcHVlc3RhLCB7cmVzcHVlc3RhOm51bGwsIHZhcmlhYmxlOk5PX0NBTUJJQVJfX1NPTE9fVFJBRVJfU1RBVFVTLCBmb3JQazpwcm9wcy5mb3JQa30pO1xyXG4gICAgICAgICAgICBpZih2YXJpYWJsZUFjdHVhbCB8fCBzaWd1aWVudGVWYXJpYWJsZSl7XHJcbiAgICAgICAgICAgICAgICBlbmZvY2FyRWxlbWVudG9EZVZhcmlhYmxlKGNvYWxlc2NlKHZhcmlhYmxlQWN0dWFsIGFzIHN0cmluZ3xudWxsLHNpZ3VpZW50ZVZhcmlhYmxlIGFzIHN0cmluZ3xudWxsKSBhcyBJZFZhcmlhYmxlKVxyXG4gICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgIHZhciBmZWVkYmFja1Jvd1ZhbGlkYXRvciA9IGdldEZlZWRiYWNrUm93VmFsaWRhdG9yKClcclxuICAgICAgICAgICAgICAgIGlmKGZlZWRiYWNrUm93VmFsaWRhdG9yW3RvUGxhaW5Gb3JQayhwcm9wcy5mb3JQayldLnJlc3VtZW49PSdvaycpe1xyXG4gICAgICAgICAgICAgICAgICAgIHNjcm9sbFRvVG9wKClcclxuICAgICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgICAgIHNjcm9sbFRvVG9wKClcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPVwiY29udGVuaWRvXCI+XHJcbiAgICAgICAge3ZlclRvZG8/bnVsbDo8ZGl2IHN0eWxlPXt7aGVpZ2h0OlwiNTAwcHhcIiwgdGV4dEFsaWduOidjZW50ZXInLCB2ZXJ0aWNhbEFsaWduOidtaWRkbGUnLCB3aWR0aDonMTAwJScsIHBvc2l0aW9uOlwiZml4ZWRcIiwgYmFja2dyb3VuZENvbG9yOiAncmdiYSgxMDAsMTAwLDEwMCwwLjMpJywgZm9udFNpemU6JzIwMCUnfX0gPmNhcmdhbmRvLi4uPC9kaXY+fVxyXG4gICAgICAgIHtwcm9wcy5ibG9xdWVPRm9ybXVsYXJpby5jYXNpbGxlcm9zLm1hcCgoY2FzaWxsZXJvLCBpKT0+e1xyXG4gICAgICAgICAgICB2YXIga2V5ID0gY2FzaWxsZXJvLnRpcG9jKyctJytjYXNpbGxlcm8uaWRfY2FzaWxsZXJvKyctJytpO1xyXG4gICAgICAgICAgICByZXR1cm4gKHZlclRvZG8gfHwgaSA8IGxpbWl0ZU5vVmVyVG9kbz9cclxuICAgICAgICAgICAgICAgIChcclxuICAgICAgICAgICAgICAgICAgICBjYXNpbGxlcm8udGlwb2MgPT0gXCJQXCI/PFByZWd1bnRhRGVzcGxpZWd1ZSBrZXk9e2tleX0gcHJlZ3VudGE9e2Nhc2lsbGVyb30gZm9yUGs9e3Byb3BzLmZvclBrfSBkZXNwbGllZ3VlRW5jYWJlemFkbz17Y2FzaWxsZXJvLmRlc3BsaWVndWVFbmNhYmV6YWRvPz8ocHJvcHMuYmxvcXVlT0Zvcm11bGFyaW8udGlwb2M9PSdDUCc/J2xhdGVyYWwnOidzdXBlcmlvcicpfS8+OlxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2lsbGVyby50aXBvYyA9PSBcIkJcIj88QmxvcXVlRGVzcGxpZWd1ZSBrZXk9e2tleX0gYmxvcXVlPXtjYXNpbGxlcm99IGZvcm11bGFyaW89e3Byb3BzLmZvcm11bGFyaW99IGZvclBrPXtwcm9wcy5mb3JQa30vPjpcclxuICAgICAgICAgICAgICAgICAgICBjYXNpbGxlcm8udGlwb2MgPT0gXCJGSUxUUk9cIj88RmlsdHJvRGVzcGxpZWd1ZSBrZXk9e2tleX0gZmlsdHJvPXtjYXNpbGxlcm99IGZvclBrPXtwcm9wcy5mb3JQa30vPjpcclxuICAgICAgICAgICAgICAgICAgICBjYXNpbGxlcm8udGlwb2MgPT0gXCJCRlwiPzxCb3RvbkZvcm11bGFyaW9EZXNwbGllZ3VlIGtleT17a2V5fSBjYXNpbGxlcm89e2Nhc2lsbGVyb30gZm9ybXVsYXJpbz17cHJvcHMuZm9ybXVsYXJpb30gZm9yUGs9e3Byb3BzLmZvclBrfS8+OlxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2lsbGVyby50aXBvYyA9PSBcIkNPTlNcIj88Q29uc2lzdGVuY2lhRGVzcGxpZWd1ZSBrZXk9e2tleX0gY2FzaWxsZXJvPXtjYXNpbGxlcm99IGZvclBrPXtwcm9wcy5mb3JQa30vPjpcclxuICAgICAgICAgICAgICAgICAgICBjYXNpbGxlcm8udGlwb2MgPT0gXCJDUFwiPzxDb25qdW50b1ByZWd1bnRhc0Rlc3BsaWVndWUga2V5PXtrZXl9IGNhc2lsbGVybz17Y2FzaWxsZXJvfSBmb3JtdWxhcmlvPXtwcm9wcy5mb3JtdWxhcmlvfSBmb3JQaz17cHJvcHMuZm9yUGt9Lz46XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzaWxsZXJvLnRpcG9jID09IFwiVEVYVE9cIj88VGV4dG9EZXNwbGllZ3VlIGtleT17a2V5fSBjYXNpbGxlcm89e2Nhc2lsbGVyb30gZm9yUGs9e3Byb3BzLmZvclBrfS8+OlxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2lsbGVyby50aXBvYyA9PSBcIkxJQlJFXCI/PExpYnJlRGVzcGxpZWd1ZSBrZXk9e2tleX0gY2FzaWxsZXJvPXtjYXNpbGxlcm99IGZvcm11bGFyaW89e3Byb3BzLmZvcm11bGFyaW99IGZvclBrPXtwcm9wcy5mb3JQa30vPjpcclxuICAgICAgICAgICAgICAgICAgICA8Q2FzaWxsZXJvRGVzY29ub2NpZG8ga2V5PXtrZXl9IGNhc2lsbGVybz17Y2FzaWxsZXJvfSBmb3JQaz17cHJvcHMuZm9yUGt9Lz5cclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgOmk9PWxpbWl0ZU5vVmVyVG9kbz9cclxuICAgICAgICAgICAgICAgIDxkaXYga2V5PSckc3Bpbm5lcicgY2xhc3NOYW1lPVwic3Bpbm5lci1ib3JkZXJcIiByb2xlPVwic3RhdHVzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4+Y2FyZ2FuZG8gYmxvcXVlLi4uPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDpudWxsXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICB9KVxyXG4gICAgfTwvZGl2PlxyXG59XHJcblxyXG5mdW5jdGlvbiBCbG9xdWVEZXNwbGllZ3VlKHByb3BzOntibG9xdWU6QmxvcXVlLCBmb3JtdWxhcmlvOkZvcm11bGFyaW8sIGZvclBrOkZvclBrfSl7XHJcbiAgICB2YXIge2Jsb3F1ZSwgZm9yUGt9ID0gcHJvcHM7XHJcbiAgICB2YXIga2V5PWJsb3F1ZS52ZXJfaWQhPSctJyAmJiBibG9xdWUudmVyX2lkIHx8IGJsb3F1ZS5jYXNpbGxlcm87XHJcbiAgICB2YXIgYWN0aXZlU3RlcD0wO1xyXG4gICAgdmFyIG11bHRpcGxlID0gISFibG9xdWUudW5pZGFkX2FuYWxpc2lzO1xyXG4gICAgdmFyIGxpc3RhID0gW3tmb3JQaywga2V5OjAsIG11bHRpcGxlOmZhbHNlfV07XHJcbiAgICB2YXIgaGFiaWxpdGFkb3IgPSBibG9xdWUuZXhwcmVzaW9uX2hhYmlsaXRhcl9qcz9nZXRGdW5jaW9uSGFiaWxpdGFyKGJsb3F1ZS5leHByZXNpb25faGFiaWxpdGFyX2pzKTooKT0+dHJ1ZTtcclxuICAgIHZhciB7bW9kb0Rlc3BsaWVndWV9ID0gdXNlU2VsZWN0b3JWaXZpZW5kYShmb3JQayk7XHJcbiAgICBpZihtdWx0aXBsZSl7XHJcbiAgICAgICAgLy8gVE9ETzogR0VORVJBTElaQVJcclxuICAgICAgICAvLyBAdHMtaWdub3JlIFxyXG4gICAgICAgIC8vIGxpc3RhPXJlc3B1ZXN0YXMucGVyc29uYXMubWFwKChfcGVyc29uYSwgaSk9PihcclxuICAgICAgICAvLyAgICAge2ZvclBrOnsuLi5mb3JQaywgcGVyc29uYTppKzF9LCBrZXk6aSsxLCBtdWx0aXBsZTp0cnVlfVxyXG4gICAgICAgIC8vICkpXHJcbiAgICB9XHJcbiAgICB2YXIgaWQgPSBgYmxvcXVlLSR7YmxvcXVlLmlkX2Nhc2lsbGVyb31gO1xyXG4gICAgcmVnaXN0cmFyRWxlbWVudG8oe1xyXG4gICAgICAgIGlkLFxyXG4gICAgICAgIHN0eWxlOidkaXNwbGF5JyxcclxuICAgICAgICBmdW46IChyZXNwdWVzdGFzOlJlc3B1ZXN0YXMpPT4gaGFiaWxpdGFkb3IocmVzcHVlc3RhcykgfHwgbW9kb0Rlc3BsaWVndWU9PSdtZXRhZGF0b3MnPyd1bnNldCc6J25vbmUnXHJcbiAgICB9KVxyXG4gICAgcmV0dXJuIDxEZXNwbGVnYXJDYXNpbGxlcm8gY2FzaWxsZXJvPXtibG9xdWV9IG51ZXN0cm8tYmxvcXVlPXtibG9xdWUuaWRfY2FzaWxsZXJvfSBlcy1tdWx0aXBsZT17bXVsdGlwbGU/J1NJJzonTk8nfSBpZD17aWR9PlxyXG4gICAgICAgIDxFbmNhYmV6YWRvRGVzcGxpZWd1ZSBjYXNpbGxlcm89e2Jsb3F1ZX0gZm9yUGs9e2ZvclBrfS8+XHJcbiAgICAgICAge2xpc3RhLm1hcCgoe2tleSwgZm9yUGssIG11bHRpcGxlfSk9PlxyXG4gICAgICAgICAgICA8RGVzcGxlZ2FyQ29udGVuaWRvSW50ZXJub0Jsb3F1ZU9Gb3JtdWxhcmlvIGtleT17a2V5fSBibG9xdWVPRm9ybXVsYXJpbz17YmxvcXVlfSBmb3JtdWxhcmlvPXtwcm9wcy5mb3JtdWxhcmlvfSBmb3JQaz17Zm9yUGt9IG11bHRpcGxlPXttdWx0aXBsZX0vPlxyXG4gICAgICAgICl9XHJcbiAgICA8L0Rlc3BsZWdhckNhc2lsbGVybz47XHJcbn1cclxuXHJcbmNvbnN0IEZvcm11bGFyaW9FbmNhYmV6YWRvID0gRGVzcGxpZWd1ZUVuY2FiZXphZG87XHJcblxyXG5mdW5jdGlvbiBNZW51TGV0cmEocHJvcHM6e3RhbWFubmlvOm51bWJlciwgZGVub21pbmFjaW9uOnN0cmluZ30pe1xyXG4gICAgY29uc3QgY2FtYmlhckxldHJhID0gKHRhbWFubmlvOm51bWJlcik9PntcclxuICAgICAgICB2YXIgcm9vdCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcclxuICAgICAgICByb290LnN0eWxlLmZvbnRTaXplPXRhbWFubmlvK1wicHhcIjtcclxuICAgIH1cclxuICAgIHJldHVybiA8TWVudUl0ZW1cclxuICAgICAgICBvbkNsaWNrPXsoKT0+Y2FtYmlhckxldHJhKHByb3BzLnRhbWFubmlvKX0gc3R5bGU9e3tmb250U2l6ZTpwcm9wcy50YW1hbm5pbysncHgnfX1cclxuICAgID5sZXRyYSB7cHJvcHMuZGVub21pbmFjaW9ufTwvTWVudUl0ZW0+XHJcbn1cclxuXHJcbmZ1bmN0aW9uIEZhc3RTZXR0dXAoKXtcclxuICAgIGNvbnN0IFthbmNob3JFbCwgc2V0QW5jaG9yRWxdID0gUmVhY3QudXNlU3RhdGUobnVsbCk7XHJcbiAgICBjb25zdCBbb3Blbiwgc2V0T3Blbl0gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XHJcbiAgICBjb25zdCBoYW5kbGVDbGljayA9IChldmVudDphbnkpID0+IHtcclxuICAgICAgICBzZXRBbmNob3JFbChldmVudC5jdXJyZW50VGFyZ2V0KTtcclxuICAgICAgICBzZXRPcGVuKChwcmV2KSA9PiAhcHJldik7XHJcbiAgICB9O1xyXG4gICAgY29uc3QgZGlzcGF0Y2ggPSB1c2VEaXNwYXRjaCgpO1xyXG4gICAgY29uc3QgY2FtYmlhciA9IChtb2RvRGVzcGxpZWd1ZTpNb2RvRGVzcGxpZWd1ZSk9PntcclxuICAgICAgICBkaXNwYXRjaChkaXNwYXRjaGVycy5NT0RPX0RFU1BMSUVHVUUoe21vZG9EZXNwbGllZ3VlfSkpO1xyXG4gICAgICAgIHNldE9wZW4oZmFsc2UpXHJcbiAgICB9XHJcbiAgICBjb25zdCBvcGNpb25lcyA9IHVzZVNlbGVjdG9yKChzdGF0ZTpDYXNvU3RhdGUpPT5zdGF0ZS5vcGNpb25lcylcclxuICAgIHJldHVybiA8PlxyXG4gICAgICAgIDxCdXR0b24gb25DbGljaz17aGFuZGxlQ2xpY2t9PlxyXG4gICAgICAgICAgICA8SUNPTi5TZXR0aW5ncy8+XHJcbiAgICAgICAgPC9CdXR0b24+XHJcbiAgICAgICAgPE1lbnUgb3Blbj17b3Blbn0gYW5jaG9yRWw9e2FuY2hvckVsfSBvbkNsb3NlPXsoKT0+c2V0T3BlbihmYWxzZSl9PlxyXG4gICAgICAgICAgICA8TWVudUl0ZW0gb25DbGljaz17KCk9PmNhbWJpYXIoXCJyZWxldmFtaWVudG9cIil9Pm5vcm1hbDwvTWVudUl0ZW0+XHJcbiAgICAgICAgICAgIDxNZW51SXRlbSBvbkNsaWNrPXsoKT0+Y2FtYmlhcihcIlBERlwiICAgICAgICAgKX0+UERGIHBhcmEgcmVsZXZhbWllbnRvPC9NZW51SXRlbT5cclxuICAgICAgICAgICAgPE1lbnVJdGVtIG9uQ2xpY2s9eygpPT5jYW1iaWFyKFwibWV0YWRhdG9zXCIgICApfT5yZXZpc2FyIG1ldGFkYXRvczwvTWVudUl0ZW0+XHJcbiAgICAgICAgICAgIDxEaXZpZGVyLz5cclxuICAgICAgICAgICAgPE1lbnVMZXRyYSB0YW1hbm5pbz17MTJ9IGRlbm9taW5hY2lvbiA9IFwibXV5IGNoaWNhXCIvPlxyXG4gICAgICAgICAgICA8TWVudUxldHJhIHRhbWFubmlvPXsxNH0gZGVub21pbmFjaW9uID0gXCJjaGljYVwiLz5cclxuICAgICAgICAgICAgPE1lbnVMZXRyYSB0YW1hbm5pbz17MTZ9IGRlbm9taW5hY2lvbiA9IFwibm9ybWFsXCIvPlxyXG4gICAgICAgICAgICA8TWVudUxldHJhIHRhbWFubmlvPXsxOX0gZGVub21pbmFjaW9uID0gXCJncmFuZGVcIi8+XHJcbiAgICAgICAgICAgIDxNZW51TGV0cmEgdGFtYW5uaW89ezIyfSBkZW5vbWluYWNpb24gPSBcImVub3JtZVwiLz5cclxuICAgICAgICAgICAgPERpdmlkZXIvPlxyXG4gICAgICAgICAgICA8TWVudUl0ZW0+PGxhYmVsPjxDaGVja2JveCBjaGVja2VkPXtvcGNpb25lcy5jb25DYW1wb09wY2lvbmVzfSBvbkNoYW5nZT17XHJcbiAgICAgICAgICAgICAgICAoKT0+ZGlzcGF0Y2goZGlzcGF0Y2hlcnMuU0VUX09QQ0lPTih7b3BjaW9uOidjb25DYW1wb09wY2lvbmVzJywgdmFsb3I6IW9wY2lvbmVzLmNvbkNhbXBvT3BjaW9uZXN9KSlcclxuICAgICAgICAgICAgfSBpbnB1dFByb3BzPXt7ICdhcmlhLWxhYmVsJzogJ3ByaW1hcnkgY2hlY2tib3gnIH19Lz5jYW1wbyBvcGNpb25lczwvbGFiZWw+PC9NZW51SXRlbT5cclxuICAgICAgICAgICAgPE1lbnVJdGVtPjxsYWJlbD48Q2hlY2tib3ggY2hlY2tlZD17b3BjaW9uZXMuc2FsdG9BdXRvbWF0aWNvfSBvbkNoYW5nZT17XHJcbiAgICAgICAgICAgICAgICAoKT0+ZGlzcGF0Y2goZGlzcGF0Y2hlcnMuU0VUX09QQ0lPTih7b3BjaW9uOidzYWx0b0F1dG9tYXRpY28nLCB2YWxvcjohb3BjaW9uZXMuc2FsdG9BdXRvbWF0aWNvfSkpXHJcbiAgICAgICAgICAgIH0gaW5wdXRQcm9wcz17eyAnYXJpYS1sYWJlbCc6ICdwcmltYXJ5IGNoZWNrYm94JyB9fS8+c2FsdG8gYXV0b23DoXRpY288L2xhYmVsPjwvTWVudUl0ZW0+XHJcbiAgICAgICAgPC9NZW51PlxyXG4gICAgPC8+O1xyXG59XHJcblxyXG5mdW5jdGlvbiBCYXJyYURlTmF2ZWdhY2lvbihwcm9wczp7Zm9yUGs6Rm9yUGssIHNvbG9MZWN0dXJhOmJvb2xlYW4sIG1vZG9EaXJlY3RvOmJvb2xlYW59KXtcclxuICAgIGNvbnN0IGRpc3BhdGNoID0gdXNlRGlzcGF0Y2goKTtcclxuICAgIGNvbnN0IGZvclBrID0gcHJvcHMuZm9yUGs7XHJcbiAgICBjb25zdCB7b3BjaW9uZXN9ID0gdXNlU2VsZWN0b3JWaXZpZW5kYShmb3JQayk7XHJcbiAgICBjb25zdCBbY29uZmlybWFDZXJyYXIsIHNldENvbmZpcm1hQ2VycmFyXSA9IHVzZVN0YXRlPGJvb2xlYW58bnVsbD4oZmFsc2UpO1xyXG4gICAgdmFyIGVzdHJ1Y3R1cmEgPSBnZXRFc3RydWN0dXJhKCk7XHJcbiAgICB2YXIgZG9taW5pbyA9IGdldERhdG9zQnlQYXNzKCkuaW5mb3JtYWNpb25IZHJbZm9yUGtbZXN0cnVjdHVyYS5wa0FncmVnYWRhVWFQcGFsXV0udGVtLmRvbWluaW87XHJcbiAgICB2YXIgY2VycmFyRGlyZWN0byA9IGFzeW5jIGZ1bmN0aW9uKCl7XHJcbiAgICAgICAgcmVtb3ZlQ1NTQnlJZChCT09UU1RSQVBfNV8xXzNfU1JDKTtcclxuICAgICAgICBnb3RvQ29uc2lzdGlyKFxyXG4gICAgICAgICAgICBlc3RydWN0dXJhLm9wZXJhdGl2byBhcyBJZE9wZXJhdGl2byxcclxuICAgICAgICAgICAgZ2V0RGF0b3NCeVBhc3MoKS5pbmZvcm1hY2lvbkhkcltmb3JQa1tlc3RydWN0dXJhLnBrQWdyZWdhZGFVYVBwYWxdXS50YXJlYS50YXJlYSxcclxuICAgICAgICAgICAgZm9yUGtbZXN0cnVjdHVyYS5wa0FncmVnYWRhVWFQcGFsXVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgLy92YXIgaGFzaD1uZXcgVVJMU2VhcmNoUGFyYW1zKGxvY2F0aW9uLmhhc2g/LnJlcGxhY2UoL15cXCMvLCcnKS5zcGxpdCgnJmF1dG9wcm9jZWQnKVswXSk7XHJcbiAgICAgICAgLy8vL2hhc2guZGVsZXRlKCdhdXRvcHJvY2VkJylcclxuICAgICAgICAvL2Nsb3NlKCk7XHJcbiAgICAgICAgLy9sb2NhdGlvbi5oYXNoPWhhc2gudG9TdHJpbmcoKTtcclxuICAgIH1cclxuICAgIHZhciBib3RvbmVzRm9ybXVsYXJpbz1bXTtcclxuICAgIGlmKCFvcGNpb25lcy5tb2RvRGlyZWN0byl7XHJcbiAgICAgICAgYm90b25lc0Zvcm11bGFyaW8ucHVzaCh7cXVlOiAnaGRyJyAgICAsIGFicjonSGRSJywgaWQ6SURfQk9UT05fVk9MVkVSX0hEUiwgbGFiZWw6J2hvamEgZGUgcnV0YScsIHJldHJvY2VzbzowfSlcclxuICAgIH1cclxuICAgIG9wY2lvbmVzLnBpbGFGb3JQay5mb3JFYWNoKChmb3JQayxpKT0+XHJcbiAgICAgICAgYm90b25lc0Zvcm11bGFyaW8ucHVzaCh7cXVlOid2b2x2ZXInLCBhYnI6Zm9yUGsuZm9ybXVsYXJpby5yZXBsYWNlKC9eRjovLCcnKSwgbGFiZWw6Zm9yUGsuZm9ybXVsYXJpbywgcmV0cm9jZXNvOm9wY2lvbmVzLnBpbGFGb3JQay5sZW5ndGgtaX0pXHJcbiAgICApXHJcbiAgICBib3RvbmVzRm9ybXVsYXJpby5wdXNoKHtxdWU6JycsIGFicjpmb3JQay5mb3JtdWxhcmlvLnJlcGxhY2UoL15GOi8sJycpLCBsYWJlbDpmb3JQay5mb3JtdWxhcmlvLCByZXRyb2Nlc286MH0pO1xyXG4gICAgcmVnaXN0cmFyRWxlbWVudG8oe2lkOnByb3BzLm1vZG9EaXJlY3RvP0lEX0JPVE9OX0NFUlJBUjpJRF9CT1RPTl9WT0xWRVJfSERSLCBkaXJlY3Q6dHJ1ZSxcclxuICAgICAgICBmdW46KFxyXG4gICAgICAgICAgICByOlJlc3B1ZXN0YXMsIFxyXG4gICAgICAgICAgICBfZmVlZGJhY2tGb3JtOiBGb3JtU3RydWN0dXJlU3RhdGU8SWRWYXJpYWJsZSwgVmFsb3IsIElkRmluPiwgXHJcbiAgICAgICAgICAgIGVsZW1lbnRvOkhUTUxEaXZFbGVtZW50LCBcclxuICAgICAgICAgICAgZmVlZGJhY2tBbGw6e1tmb3JtdWxhcmlvIGluIFBsYWluRm9yUGtdOkZvcm1TdHJ1Y3R1cmVTdGF0ZTxJZFZhcmlhYmxlLCBWYWxvciwgSWRGaW4+fSwgXHJcbiAgICAgICAgICAgIF9lc3RydWN0dXJhOkVzdHJ1Y3R1cmFcclxuICAgICAgICApPT57XHJcbiAgICAgICAgICAgIGVsZW1lbnRvLnNldEF0dHJpYnV0ZSgncmVzdW1lbi1lc3RhZG8nLGNhbGN1bGFyUmVzdW1lblZpdmllbmRhKGZvclBrLCBmZWVkYmFja0FsbCwgcikucmVzdW1lbkVzdGFkbyk7XHJcbiAgICAgICAgfVxyXG4gICAgfSlcclxuICAgIHJldHVybiA8PlxyXG4gICAgICAgIDxCdXR0b25Hcm91cCBrZXk9XCJmb3JtdWxhcmlvc1wiIGNsYXNzTmFtZT1cImJhcnJhLW5hdmVnYWNpb25cIiBzb2xvLWxlY3R1cmE9e3Byb3BzLnNvbG9MZWN0dXJhPydzaSc6J25vJ30gPlxyXG4gICAgICAgICAgICB7Ym90b25lc0Zvcm11bGFyaW8ubWFwKChiLGkpPT5cclxuICAgICAgICAgICAgICAgIDxCdXR0b24gY29sb3I9e2IucXVlPT1mb3JQay5mb3JtdWxhcmlvP1wicHJpbWFyeVwiOlwiaW5oZXJpdFwifSB2YXJpYW50PVwib3V0bGluZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgIGlkPXtiLmlkfVxyXG4gICAgICAgICAgICAgICAgICAgIGtleT17YCR7aX0tJHtiLnF1ZX0tJHtiLnJldHJvY2Vzb31gfVxyXG4gICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXshYi5xdWV9XHJcbiAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCk9PntcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2goXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiLnF1ZT09J2hkcic/ZGlzcGF0Y2hlcnMuVk9MVkVSX0hEUih7fSk6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwYXRjaGVycy5WT0xWRVJfREVfRk9STVVMQVJJTyh7bWFnbml0dWRSZXRyb2Nlc286Yi5yZXRyb2Nlc299KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBiLnF1ZT09J2hkcic/bnVsbDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoQnlQYXNzKGFjY2lvbl9hYnJpcl9mb3JtdWxhcmlvLHtmb3JQazpvcGNpb25lcy5waWxhRm9yUGtbb3BjaW9uZXMucGlsYUZvclBrLmxlbmd0aC1iLnJldHJvY2Vzb119KTtcclxuICAgICAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImFiclwiPntiLmFicn08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwibGFiZWxcIj57Yi5sYWJlbH08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L0J1dHRvbj5cclxuICAgICAgICAgICAgKX1cclxuICAgICAgICA8L0J1dHRvbkdyb3VwPlxyXG4gICAgICAgIHtwcm9wcy5zb2xvTGVjdHVyYT88VHlwb2dyYXBoeSBjb21wb25lbnQ9XCJzcGFuXCIgc3R5bGU9e3ttYXJnaW46JzAgMTBweCd9fT4gKFNvbG8gTGVjdHVyYSkgPC9UeXBvZ3JhcGh5PjpudWxsfVxyXG4gICAgICAgIHtwcm9wcy5tb2RvRGlyZWN0bz9cclxuICAgICAgICAgICAgPD5cclxuICAgICAgICAgICAgICAgIDxCdXR0b25Hcm91cCBrZXk9XCJ2b2x2ZXJfeV9ncmFiYXJcIiBzdHlsZT17e21hcmdpbjonMCAwIDAgMzBweCd9fT5cclxuICAgICAgICAgICAgICAgICAgICA8QnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkPXtJRF9CT1RPTl9DRVJSQVJ9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPVwiaW5oZXJpdFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJvdXRsaW5lZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e2FzeW5jICgpPT57XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihwcm9wcy5zb2xvTGVjdHVyYSB8fCAhZ2V0RGlydHkoKSl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VycmFyRGlyZWN0bygpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0Q29uZmlybWFDZXJyYXIodHJ1ZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxJQ09OLkV4aXRUb0FwcC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9CdXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPERpYWxvZ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBvcGVuPXshIWNvbmZpcm1hQ2VycmFyfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvL2hhY2UgcXVlIG5vIHNlIGNpZXJyZSBlbCBtZW5zYWplXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xvc2U9eygpPT5zZXRDb25maXJtYUNlcnJhcihmYWxzZSl9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWxsZWRieT1cImFsZXJ0LWRpYWxvZy10aXRsZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtZGVzY3JpYmVkYnk9XCJhbGVydC1kaWFsb2ctZGVzY3JpcHRpb25cIlxyXG4gICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPERpYWxvZ1RpdGxlIGlkPVwiYWxlcnQtZGlhbG9nLXRpdGxlXCI+Q29uZmlybWUgY2llcnJlIGRlIGVuY3Vlc3RhPC9EaWFsb2dUaXRsZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPERpYWxvZ0NvbnRlbnQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8RGlhbG9nQ29udGVudFRleHQgaWQ9XCJhbGVydC1kaWFsb2ctZGVzY3JpcHRpb25cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFc3TDoSBwb3Igc2FsaXIgZGUgbGEgZW5jdWVzdGEsIHNlIHBlcmRlcsOhbiBsb3MgY2FtYmlvcyBubyBndWFyZGFkb3MuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0RpYWxvZ0NvbnRlbnRUZXh0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L0RpYWxvZ0NvbnRlbnQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxEaWFsb2dBY3Rpb25zPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPEJ1dHRvbiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKT0+e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZXJyYXJEaXJlY3RvKClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fSBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcj1cInNlY29uZGFyeVwiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJvdXRsaW5lZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY2FydGFyIGNhbWJpb3MgeSBjZXJyYXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPEJ1dHRvbiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKT0+e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRDb25maXJtYUNlcnJhcihmYWxzZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fSBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcj1cInByaW1hcnlcIiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50PVwiY29udGFpbmVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51YXIgZWRpdGFuZG8gZW5jdWVzdGFcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvRGlhbG9nQWN0aW9ucz5cclxuICAgICAgICAgICAgICAgICAgICA8L0RpYWxvZz5cclxuICAgICAgICAgICAgICAgICAgICB7cHJvcHMuc29sb0xlY3R1cmE/bnVsbDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgPEJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9e1wic2F2ZS1idXR0b25cIn1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPVwiaW5oZXJpdFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50PVwib3V0bGluZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e3RydWV9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXthc3luYyAoKT0+dHJ1ZX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPElDT04uU2F2ZS8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIDwvQnV0dG9uR3JvdXA+XHJcbiAgICAgICAgICAgIDwvPlxyXG4gICAgICAgIDpudWxsfVxyXG4gICAgICAgIDxUeXBvZ3JhcGh5IGNsYXNzTmFtZT1cIm1vc3RyYXItZm9yUGtcIiBjb21wb25lbnQ9XCJzcGFuXCIgc3R5bGU9e3ttYXJnaW46JzAgMTBweCd9fT4gXHJcbiAgICAgICAgICAgIHtWRVJfRE9NSU5JTz88ZGl2IGtleT17ZG9taW5pb30+PHNwYW4+ZG9taW5pbzwvc3Bhbj48c3Bhbj57ZG9taW5pb308L3NwYW4+PC9kaXY+OicnfVxyXG4gICAgICAgICAgICB7bGlrZUFyKHByb3BzLmZvclBrKS5maWx0ZXIoKF8sayk9PmshPSdmb3JtdWxhcmlvJykubWFwKCh2LGspPT5cclxuICAgICAgICAgICAgICAgIDxkaXYga2V5PXtrfT48c3Bhbj57a308L3NwYW4+PHNwYW4+e3Z9PC9zcGFuPjwvZGl2PlxyXG4gICAgICAgICAgICApLmFycmF5KCl9IFxyXG4gICAgICAgIDwvVHlwb2dyYXBoeT5cclxuICAgICAgICA8RmFzdFNldHR1cC8+XHJcbiAgICA8Lz5cclxufVxyXG5cclxuZnVuY3Rpb24gQm90b25Wb2x2ZXJFbkRpdih7aWR9OntpZDpzdHJpbmd9KXtcclxuICAgIHZhciB7b3BjaW9uZXN9ID0gdXNlU2VsZWN0b3IoKHN0YXRlOkNhc29TdGF0ZSk9Pih7b3BjaW9uZXM6c3RhdGUub3BjaW9uZXN9KSk7XHJcbiAgICBjb25zdCBkaXNwYXRjaCA9IHVzZURpc3BhdGNoKCk7XHJcbiAgICB2YXIgZXNWb2x2ZXIgPSBvcGNpb25lcy5waWxhRm9yUGsubGVuZ3RoPjA7XHJcbiAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9XCJkaXYtYm90b24tdm9sdmVyXCI+XHJcbiAgICAgICAgPEJ1dHRvbiBpZD17aWR9IGNsYXNzTmFtZT1cImJvdG9uLXZvbHZlclwiXHJcbiAgICAgICAgICAgIG9uQ2xpY2s9eygpPT57XHJcbiAgICAgICAgICAgICAgICBpZiAoZXNWb2x2ZXIpIHsgXHJcbiAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2hCeVBhc3MoYWNjaW9uX2FicmlyX2Zvcm11bGFyaW8se2ZvclBrOm9wY2lvbmVzLnBpbGFGb3JQa1tvcGNpb25lcy5waWxhRm9yUGsubGVuZ3RoLTFdfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2goZGlzcGF0Y2hlcnMuVk9MVkVSX0RFX0ZPUk1VTEFSSU8oe21hZ25pdHVkUmV0cm9jZXNvOjF9KSlcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGJvdG9uQ2VycmFyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoSURfQk9UT05fQ0VSUkFSKSB8fCBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChJRF9CT1RPTl9WT0xWRVJfSERSKSBcclxuICAgICAgICAgICAgICAgICAgICBpZiAoYm90b25DZXJyYXIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYm90b25DZXJyYXIuY2xpY2soKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH19XHJcbiAgICAgICAgPiA8SUNPTi5DaGV2cm9uTGVmdC8+e2VzVm9sdmVyID8gXCIgVm9sdmVyXCIgOiBcIiBDZXJyYXJcIn08L0J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG59XHJcblxyXG5mdW5jdGlvbiBGb3JtdWxhcmlvRGVzcGxpZWd1ZShwcm9wczp7Zm9yUGs6Rm9yUGt9KXtcclxuICAgIHZhciBmb3JQayA9IHByb3BzLmZvclBrO1xyXG4gICAgdmFyIHtmb3JtdWxhcmlvLCBtb2RvRGVzcGxpZWd1ZSwgbW9kbywgb3BjaW9uZXN9IFxyXG4gICAgICAgID0gdXNlU2VsZWN0b3JWaXZpZW5kYShwcm9wcy5mb3JQayk7XHJcbiAgICB2YXIgc29sb0xlY3R1cmEgPSBnZXREYXRvc0J5UGFzcygpLnNvbG9MZWN0dXJhO1xyXG4gICAgY29uc3QgZGlzcGF0Y2ggPSB1c2VEaXNwYXRjaCgpO1xyXG4gICAgdmFyIGVzVm9sdmVyID0gb3BjaW9uZXMucGlsYUZvclBrLmxlbmd0aD4wO1xyXG4gICAgdXNlRWZmZWN0KCgpPT57XHJcbiAgICAgICAgdmFyIGNvbnRyb2xTY3JvbGw9KCk9PntcclxuICAgICAgICAgICAgdmFyIGFycmliYSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmYWItYWN0aXZvLWFycmliYScpO1xyXG4gICAgICAgICAgICBpZihhcnJpYmEpe1xyXG4gICAgICAgICAgICAgICAgc2V0VmFsb3JEaXN0aW50byhhcnJpYmEuc3R5bGUsICd2aXNpYmlsaXR5JyxcclxuICAgICAgICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlXHJcbiAgICAgICAgICAgICAgICAgICAgYXJyaWJhLmVsVG9wVmlzaWJpbGl6YXIgIT1udWxsICYmIGFycmliYS5lbFRvcFZpc2liaWxpemFyICsgMTAgXHJcbiAgICAgICAgICAgICAgICAgICAgPCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wID8gJ3Zpc2libGUnIDogJ2hpZGRlbidcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFyIGFiYWpvID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZhYi1hY3Rpdm8tYWJham8nKTtcclxuICAgICAgICAgICAgaWYoYWJham8pe1xyXG4gICAgICAgICAgICAgICAgc2V0VmFsb3JEaXN0aW50byhhYmFqby5zdHlsZSwgJ3Zpc2liaWxpdHknLCBcclxuICAgICAgICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlXHJcbiAgICAgICAgICAgICAgICAgICAgYWJham8uZWxCb3R0b21WaXNpYmlsaXphciAhPSBudWxsICYmIGFiYWpvLmVsQm90dG9tVmlzaWJpbGl6YXIgLSAyMFxyXG4gICAgICAgICAgICAgICAgICAgID4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcCArIHdpbmRvdy5pbm5lckhlaWdodCAqIDAuNyA/ICd2aXNpYmxlJyA6ICdoaWRkZW4nXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBjb250cm9sU2Nyb2xsKTtcclxuICAgICAgICBjb250cm9sU2Nyb2xsKCk7XHJcbiAgICAgICAgcmV0dXJuICgpPT57XHJcbiAgICAgICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBjb250cm9sU2Nyb2xsKTtcclxuICAgICAgICB9XHJcbiAgICB9KVxyXG4gICAgLy8gVE9ETyBWb2x2ZXIgYSBwb25lciBlbCBtb3ZpbWllbnRvIGEgbGEgYWN0dWFsXHJcbiAgICB2YXIgYWN0dWFsOmFueVxyXG4gICAgdmFyIGNvbXBsZXRvOmFueVxyXG4gICAgdmFyIG9uQ2xpY2tTYWx0YXJBY3R1YWwgPSAoKT0+e1xyXG4gICAgICAgIHZhciB7dmFyaWFibGVBY3R1YWx9ID0gZGlzcGF0Y2hCeVBhc3MoYWNjaW9uX3JlZ2lzdHJhcl9yZXNwdWVzdGEsIHtyZXNwdWVzdGE6bnVsbCwgdmFyaWFibGU6Tk9fQ0FNQklBUl9fU09MT19UUkFFUl9TVEFUVVMsIGZvclBrOnByb3BzLmZvclBrfSk7XHJcbiAgICAgICAgaWYodmFyaWFibGVBY3R1YWwpe1xyXG4gICAgICAgICAgICBlbmZvY2FyRWxlbWVudG9EZVZhcmlhYmxlKHZhcmlhYmxlQWN0dWFsKVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHZhciBsaXN0YU1vZG9zOk1vZG9EZXNwbGllZ3VlW109WydtZXRhZGF0b3MnLCdyZWxldmFtaWVudG8nLCdQREYnXTtcclxuICAgIFsnYm90b24tdm9sdmVyLTEnLCAnYm90b24tdm9sdmVyLTInXS5mb3JFYWNoKGlkPT57XHJcbiAgICAgICAgcmVnaXN0cmFyRWxlbWVudG8oe2lkLCBkaXJlY3Q6dHJ1ZSxcclxuICAgICAgICAgICAgZnVuOihcclxuICAgICAgICAgICAgICAgIHI6UmVzcHVlc3RhcywgXHJcbiAgICAgICAgICAgICAgICBmZWVkYmFja0Zvcm06IEZvcm1TdHJ1Y3R1cmVTdGF0ZTxJZFZhcmlhYmxlLCBWYWxvciwgSWRGaW4+LCBcclxuICAgICAgICAgICAgICAgIGVsZW1lbnRvOkhUTUxEaXZFbGVtZW50LCBcclxuICAgICAgICAgICAgICAgIGZlZWRiYWNrQWxsOntbZm9ybXVsYXJpbyBpbiBQbGFpbkZvclBrXTpGb3JtU3RydWN0dXJlU3RhdGU8SWRWYXJpYWJsZSwgVmFsb3IsIElkRmluPn0sIFxyXG4gICAgICAgICAgICAgICAgX2VzdHJ1Y3R1cmE6RXN0cnVjdHVyYVxyXG4gICAgICAgICAgICApPT57XHJcbiAgICAgICAgICAgICAgICBlbGVtZW50by5zZXRBdHRyaWJ1dGUoJ3Jlc3VtZW4tZXN0YWRvJyxlc1ZvbHZlcj9mZWVkYmFja0Zvcm0ucmVzdW1lbjpjYWxjdWxhclJlc3VtZW5WaXZpZW5kYShmb3JQaywgZmVlZGJhY2tBbGwsIHIpLnJlc3VtZW5Fc3RhZG8pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgIH0pXHJcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIGVzcGVjaWFsIGhheSBxdWUgbGVlcmxvIGVuIGVsIHBhcnNlciBkZSBjYXNpbGxlcm9zIHNpIGVzdG8gdGVybWluYSBxdWVkYW5kbyBhc8OtXHJcbiAgICB2YXIgcGFudGFsbGFDb21wbGV0YSA9IGZvcm11bGFyaW8uZXNwZWNpYWw/LnBhbnRhbGxhQ29tcGxldGE7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICAgIDw+XHJcbiAgICAgICAgICAgIDxBcHBCYXIgcG9zaXRpb249XCJmaXhlZFwiIGNvbG9yPXtzb2xvTGVjdHVyYT8nc2Vjb25kYXJ5JzoncHJpbWFyeSd9PlxyXG4gICAgICAgICAgICAgICAgPFRvb2xiYXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPEJhcnJhRGVOYXZlZ2FjaW9uIGZvclBrPXtmb3JQa30gc29sb0xlY3R1cmE9e3NvbG9MZWN0dXJhIHx8IGZhbHNlfSBtb2RvRGlyZWN0bz17b3BjaW9uZXMubW9kb0RpcmVjdG99Lz5cclxuICAgICAgICAgICAgICAgIDwvVG9vbGJhcj5cclxuICAgICAgICAgICAgICAgIDxkaXYgaWQ9XCJtaW5pLWNvbnNvbGVcIj48L2Rpdj5cclxuICAgICAgICAgICAgPC9BcHBCYXI+XHJcbiAgICAgICAgICAgIDxtYWluPlxyXG4gICAgICAgICAgICAgICAgPFBhcGVyIGNsYXNzTmFtZT1cImZvcm11bGFyaW9cIiBtb2RvLWRlc3BsaWVndWU9e21vZG9EZXNwbGllZ3VlfSB2ZXItbnVtLW9wY2lvbmVzPXtvcGNpb25lcy5jb25DYW1wb09wY2lvbmVzPydTSSc6J05PJ30+XHJcbiAgICAgICAgICAgICAgICAgICAge21vZG8uZGVtbz88ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8VHlwb2dyYXBoeSBjb21wb25lbnQ9XCJzcGFuXCI+TW9kbyBkZSBkZXNwbGllZ3VlOjwvVHlwb2dyYXBoeT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPEJ1dHRvbkdyb3VwPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7bGlzdGFNb2Rvcy5tYXAobW9kbz0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QnV0dG9uIGtleT17bW9kb30gdmFyaWFudD17bW9kbz09bW9kb0Rlc3BsaWVndWU/XCJjb250YWluZWRcIjpcIm91dGxpbmVkXCJ9IG9uQ2xpY2s9e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgpPT5kaXNwYXRjaChkaXNwYXRjaGVycy5NT0RPX0RFU1BMSUVHVUUoe21vZG9EZXNwbGllZ3VlOm1vZG99KSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0+e21vZG99PC9CdXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICl9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvQnV0dG9uR3JvdXA+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+Om51bGx9XHJcbiAgICAgICAgICAgICAgICAgICAge3BhbnRhbGxhQ29tcGxldGE/bnVsbDo8Qm90b25Wb2x2ZXJFbkRpdiBpZD1cImJvdG9uLXZvbHZlci0xXCIvPn1cclxuICAgICAgICAgICAgICAgICAgICB7cGFudGFsbGFDb21wbGV0YT9udWxsOjxGb3JtdWxhcmlvRW5jYWJlemFkbyBjYXNpbGxlcm89e2Zvcm11bGFyaW99Lz59XHJcbiAgICAgICAgICAgICAgICAgICAgPERlc3BsZWdhckNvbnRlbmlkb0ludGVybm9CbG9xdWVPRm9ybXVsYXJpbyBibG9xdWVPRm9ybXVsYXJpbz17Zm9ybXVsYXJpb30gZm9ybXVsYXJpbz17Zm9ybXVsYXJpb30gZm9yUGs9e2ZvclBrfSBtdWx0aXBsZT17ZmFsc2V9Lz5cclxuICAgICAgICAgICAgICAgICAgICB7cGFudGFsbGFDb21wbGV0YT9udWxsOjxCb3RvblZvbHZlckVuRGl2IGlkPVwiYm90b24tdm9sdmVyLTJcIi8+fVxyXG4gICAgICAgICAgICAgICAgPC9QYXBlcj5cclxuICAgICAgICAgICAgICAgIDxGYWIgaWQ9J2ZhYi1hY3Rpdm8tYXJyaWJhJyBjb2xvcj1cInByaW1hcnlcIiBhcmlhLWxhYmVsPVwiYWRkXCIgb25DbGljaz17b25DbGlja1NhbHRhckFjdHVhbH0+XHJcbiAgICAgICAgICAgICAgICAgICAgPElDT04uS2V5Ym9hcmRBcnJvd1VwIC8+XHJcbiAgICAgICAgICAgICAgICA8L0ZhYj5cclxuICAgICAgICAgICAgICAgIDxGYWIgaWQ9J2ZhYi1hY3Rpdm8tYWJham8nIGNvbG9yPVwicHJpbWFyeVwiIGFyaWEtbGFiZWw9XCJhZGRcIiBvbkNsaWNrPXtvbkNsaWNrU2FsdGFyQWN0dWFsfT5cclxuICAgICAgICAgICAgICAgICAgICA8SUNPTi5LZXlib2FyZEFycm93RG93biAvPlxyXG4gICAgICAgICAgICAgICAgPC9GYWI+XHJcbiAgICAgICAgICAgICAgICA8RmFiIGlkPSdmYWItZXJyb3ItYXJyaWJhJyB2YXJpYW50PVwiZXh0ZW5kZWRcIiBjb2xvcj1cInNlY29uZGFyeVwiIGFyaWEtbGFiZWw9XCJlZGl0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPElDT04uTmF2aWdhdGlvbiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIEVycm9yXHJcbiAgICAgICAgICAgICAgICA8L0ZhYj4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICA8RmFiIGlkPSdmYWItZXJyb3ItYWJham8nIHZhcmlhbnQ9XCJleHRlbmRlZFwiIGNvbG9yPVwic2Vjb25kYXJ5XCIgYXJpYS1sYWJlbD1cImVkaXRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8SUNPTi5OYXZpZ2F0aW9uRG93biAvPlxyXG4gICAgICAgICAgICAgICAgICAgIEVycm9yXHJcbiAgICAgICAgICAgICAgICA8L0ZhYj4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT0nZXNwYWNpby1maW5hbC1mb3JtdWxhcmlvJz48L2Rpdj5cclxuICAgICAgICAgICAgICAgIHtvcGNpb25lcy5tb2RvQm9ycmFyUmVzcHVlc3RhICYmIG9wY2lvbmVzLmZvclBrPzxEZXNwbGVnYXJDb25maXJtYXJCb3JyYXJSZXNwdWVzdGEgZm9yUGs9e29wY2lvbmVzLmZvclBrfSB2YXJpYWJsZUJvcnJhcj17b3BjaW9uZXMubW9kb0JvcnJhclJlc3B1ZXN0YX0vPjpudWxsfVxyXG4gICAgICAgICAgICA8L21haW4+XHJcbiAgICAgICAgPC8+XHJcbiAgICApO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gQXRyaWJ1dG8ocHJvcHM6e25vbWJyZTpzdHJpbmcsIHZhbG9yOmFueX0pe1xyXG4gICAgcmV0dXJuIHByb3BzLnZhbG9yIT1udWxsICYmIHByb3BzLnZhbG9yIT0nJz88c3BhbiBjbGFzc05hbWU9XCJhdHJpYnV0by1wYXJcIj5cclxuICAgICAgICB7cHJvcHMubm9tYnJlPzxzcGFuIGNsYXNzTmFtZT1cImF0cmlidXRvLW5vbWJyZVwiPntwcm9wcy5ub21icmV9PC9zcGFuPjpudWxsfVxyXG4gICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJhdHJpYnV0by12YWxvclwiPntwcm9wcy52YWxvci50b1N0cmluZygpfTwvc3Bhbj5cclxuICAgIDwvc3Bhbj46bnVsbFxyXG59XHJcblxyXG5jb25zdCBsaXN0YUVzdGFkb3NDYXJnYTpFc3RhZG9DYXJnYVtdPVsncmVzdW1lbicsJ3JlbGV2YW1pZW50bycsJ3JlY2libyddO1xyXG52YXIgcmVzdW1pZG9yZXMgPSBbXHJcbiAgICB7bm9tYnJlOidSRUEnICAgICAgICAgLCBmOihycjpSZXNwdWVzdGFzUmFpeik9PnJyLnJlc3VtZW5Fc3RhZG89PVwib2tcIiAgICAgICAgICB9LFxyXG4gICAge25vbWJyZTonQ2l0YSBwYWN0YWRhJywgZjoocnI6UmVzcHVlc3Rhc1JhaXopPT5yci5yZXN1bWVuRXN0YWRvPT1cImNpdGEgcGFjdGFkYVwifSxcclxuICAgIHtub21icmU6J1BlbmRpZW50ZXMnICAsIGY6KHJyOlJlc3B1ZXN0YXNSYWl6KT0+cnIucmVzdW1lbkVzdGFkbz09XCJ2YWNpb1wiICAgICAgIH0sXHJcbl07XHJcblxyXG5yZXN1bWlkb3Jlcy5wdXNoKFxyXG4gICAge25vbWJyZTonT3Ryb3MnLCBmOnJlc3VtaWRvcmVzLnJlZHVjZSgoZyxyKT0+KHJyPT4hci5mKHJyKSAmJiBnKHJyKSApLChfOlJlc3B1ZXN0YXNSYWl6KT0+dHJ1ZSkgfVxyXG4pXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gRGVzcGxlZ2FyTGluZWFSZXN1bWVuVUFQcmluY2lwYWwocHJvcHM6e1xyXG4gICAgbnVtVml2aWVuZGE6SWRFbmMsXHJcbiAgICBmb3JtUHJpbmNpcGFsOklkRm9ybXVsYXJpbyxcclxuICAgIHRhcmVhOiBzdHJpbmcsXHJcbiAgICByZXNwdWVzdGFzOlJlc3B1ZXN0YXNSYWl6LFxyXG59KXtcclxuICAgIGNvbnN0IHtudW1WaXZpZW5kYSwgcmVzcHVlc3RhcywgZm9ybVByaW5jaXBhbCwgdGFyZWF9ID0gcHJvcHM7XHJcbiAgICBjb25zdCBpZD0ndml2LScrbnVtVml2aWVuZGE7XHJcbiAgICBjb25zdCBlc3RydWN0dXJhID0gZ2V0RXN0cnVjdHVyYSgpO1xyXG4gICAgY29uc3QgZm9yUGs6Rm9yUGs9e2Zvcm11bGFyaW86Zm9ybVByaW5jaXBhbCwgW2VzdHJ1Y3R1cmEucGtBZ3JlZ2FkYVVhUHBhbF06TnVtYmVyKG51bVZpdmllbmRhKSBhcyBJZEVuY30gYXMgRm9yUGs7IC8vbm8gcXVpdGFyIGVsIGNhc3RlbyBwb3JxdWUgdmllbmUgY29tbyB0ZXh0byB5IG5lY2VzaXRvIHF1ZSBzZWEgbsO6bWVyb1xyXG4gICAgdmFyIHRlbSA9IGdldERhdG9zQnlQYXNzKCkuaW5mb3JtYWNpb25IZHJbbnVtVml2aWVuZGFdLnRlbTtcclxuICAgIGNvbnN0IGRpc3BhdGNoID0gdXNlRGlzcGF0Y2goKTtcclxuICAgIHVzZUVmZmVjdCgoKT0+e1xyXG4gICAgICAgIHZvbGNhZG9JbmljaWFsRWxlbWVudG9zUmVnaXN0cmFkb3MoZm9yUGspO1xyXG4gICAgICAgIGludGVudGFyQmFja3VwKGZvclBrKVxyXG4gICAgfSlcclxuICAgIHJlZ2lzdHJhckVsZW1lbnRvKHtpZCwgZGlyZWN0OnRydWUsXHJcbiAgICAgICAgZnVuOihcclxuICAgICAgICAgICAgcjpSZXNwdWVzdGFzLCBcclxuICAgICAgICAgICAgX2ZlZWRiYWNrRm9ybTogRm9ybVN0cnVjdHVyZVN0YXRlPElkVmFyaWFibGUsIFZhbG9yLCBJZEZpbj4sIFxyXG4gICAgICAgICAgICBlbGVtZW50bzpIVE1MRGl2RWxlbWVudCwgXHJcbiAgICAgICAgICAgIGZlZWRiYWNrQWxsOntbZm9ybXVsYXJpbyBpbiBQbGFpbkZvclBrXTpGb3JtU3RydWN0dXJlU3RhdGU8SWRWYXJpYWJsZSwgVmFsb3IsIElkRmluPn0sIFxyXG4gICAgICAgICAgICBfZXN0cnVjdHVyYTpFc3RydWN0dXJhXHJcbiAgICAgICAgKT0+e1xyXG4gICAgICAgICAgICAvL3ByZWd1bnRvIHNpIGVzIGxhIG1pc21hIHZpdmllbmRhIHBvcnF1ZSBsYSBmdW5jaW9uIHNlIGRpc3BhcmEgXHJcbiAgICAgICAgICAgIC8vY29uIHRvZGFzIGxhcyBjb21iaW5hY2lvbmVzIGRlIHJlc3B1ZXN0YXMgcGFyYSBjYWRhIGZvclBrXHJcbiAgICAgICAgICAgIC8vQHRzLWlnbm9yZSB2aXZpZW5kYSBleGlzdGVcclxuICAgICAgICAgICAgaWYocltlc3RydWN0dXJhLnBrQWdyZWdhZGFVYVBwYWxdID09IGZvclBrW2VzdHJ1Y3R1cmEucGtBZ3JlZ2FkYVVhUHBhbF0pe1xyXG4gICAgICAgICAgICAgICAgZWxlbWVudG8uc2V0QXR0cmlidXRlKCdyZXN1bWVuLWVzdGFkbycsY2FsY3VsYXJSZXN1bWVuVml2aWVuZGEoZm9yUGssIGZlZWRiYWNrQWxsLCByKS5yZXN1bWVuRXN0YWRvKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICAgICAgXHJcbiAgICB9KVxyXG4gICAgcmV0dXJuIDxUYWJsZVJvdyBrZXk9e251bVZpdmllbmRhfT5cclxuICAgICAgICA8VGFibGVDZWxsPlxyXG4gICAgICAgICAgICB7dGVtP1xyXG4gICAgICAgICAgICAgICAgPD5cclxuICAgICAgICAgICAgICAgICAgICA8RGVzcGxlZ2FyVGVtIHRlbT17dGVtfS8+XHJcbiAgICAgICAgICAgICAgICAgICAge3Jlc3B1ZXN0YXNbJ3Jlc3VtZW5Fc3RhZG8nIGFzIElkVmFyaWFibGVdPT1cImNpdGEgcGFjdGFkYVwiP1xyXG4gICAgICAgICAgICAgICAgICAgICAgICA8RGVzcGxlZ2FyQ2l0YVBhY3RhZGEgcmVzcHVlc3Rhcz17cmVzcHVlc3Rhc30vPlxyXG4gICAgICAgICAgICAgICAgICAgIDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgPERlc3BsZWdhckNpdGFQYWN0YWRhWVNlbGVjY2lvbmFkb0FudGVyaW9yVGVtIHRlbT17dGVtfS8+XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgPC8+XHJcbiAgICAgICAgICAgIDpudWxsfVxyXG4gICAgICAgIDwvVGFibGVDZWxsPlxyXG4gICAgICAgIDxUYWJsZUNlbGw+XHJcbiAgICAgICAgICAgIHt0YXJlYX1cclxuICAgICAgICA8L1RhYmxlQ2VsbD5cclxuICAgICAgICA8VGFibGVDZWxsPlxyXG4gICAgICAgICAgICA8QnV0dG9uIGlkPXtpZH0gb25DbGljaz17KCk9PiBcclxuICAgICAgICAgICAgICAgIGRpc3BhdGNoKGRpc3BhdGNoZXJzLkNBTUJJQVJfRk9STVVMQVJJTyh7Zm9yUGssIGFwaWxhclZ1ZWx0YTpmYWxzZX0pKVxyXG4gICAgICAgICAgICB9PlxyXG4gICAgICAgICAgICAgICAge251bVZpdmllbmRhLnRvU3RyaW5nKCl9XHJcbiAgICAgICAgICAgIDwvQnV0dG9uPlxyXG4gICAgICAgIDwvVGFibGVDZWxsPlxyXG4gICAgPC9UYWJsZVJvdz5cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIERlc3BsZWdhckNhcmdhKHByb3BzOntcclxuICAgIGNhcmdhOkNhcmdhLCBcclxuICAgIGlkQ2FyZ2E6SWRDYXJnYSwgXHJcbiAgICBwb3NpY2lvbjpudW1iZXIsXHJcbiAgICBpbmZvcm1hY2lvbkhkcjpJbmZvcm1hY2lvbkhkciwgXHJcbiAgICByZXNwdWVzdGFzOiBSZXNwdWVzdGFMYXNVQSxcclxuICAgIGZlZWRiYWNrUm93VmFsaWRhdG9yOntcclxuICAgICAgICBbZm9ybXVsYXJpbyBpbiBQbGFpbkZvclBrXTpGb3JtU3RydWN0dXJlU3RhdGU8SWRWYXJpYWJsZSwgVmFsb3IsIElkRmluPiBcclxuICAgIH1cclxufSl7XHJcbiAgICBjb25zdCBbbmV3U3VydmV5LCBzZXROZXdTdXJ2ZXldID0gdXNlU3RhdGUoMCk7XHJcbiAgICBjb25zdCB7Y2FyZ2EsIGlkQ2FyZ2EsIGluZm9ybWFjaW9uSGRyLCByZXNwdWVzdGFzfSA9IHByb3BzO1xyXG4gICAgdmFyIGVzdHJ1Y3R1cmEgPSBnZXRFc3RydWN0dXJhKCk7XHJcbiAgICBsZXQgY2FudExpbmVhc1Jlc3VtZW4gPSBsaWtlQXIoaW5mb3JtYWNpb25IZHIpLmZpbHRlcigoaW5mb3JtYWNpb24pPT5pbmZvcm1hY2lvbi50ZW0uY2FyZ2E9PWlkQ2FyZ2EpLmFycmF5KCkubGVuZ3RoO1xyXG4gICAgY29uc3QgZGlzcGF0Y2ggPSB1c2VEaXNwYXRjaCgpO1xyXG4gICAgcmV0dXJuIDxQYXBlciBjbGFzc05hbWU9XCJjYXJnYVwiIHN0eWxlPXt7bWFyZ2luQm90dG9tOiAnMTBweCcsIHBhZGRpbmc6ICcxMHB4J319PlxyXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiaW5mb3JtYWNpb24tY2FyZ2FcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJjYXJnYVwiPsOBcmVhOiB7aWRDYXJnYX08L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJvYnNlcnZhY2lvbmVzXCI+e2NhcmdhLm9ic2VydmFjaW9uZXN9PC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJpbmZvcm1hY2lvbi1jYXJnYVwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZlY2hhXCI+e2NhcmdhLmZlY2hhfTwvZGl2PlxyXG4gICAgICAgICAgICB7LypcclxuICAgICAgICAgICAgPEJ1dHRvbkdyb3VwPlxyXG4gICAgICAgICAgICB7bGlzdGFFc3RhZG9zQ2FyZ2EubWFwKGVzdGFkb19jYXJnYT0+XHJcbiAgICAgICAgICAgICAgICA8QnV0dG9uIGtleT17ZXN0YWRvX2NhcmdhfSB2YXJpYW50PXtlc3RhZG9fY2FyZ2E9PWNhcmdhLmVzdGFkb19jYXJnYT9cImNvbnRhaW5lZFwiOlwib3V0bGluZWRcIn0gb25DbGljaz17XHJcbiAgICAgICAgICAgICAgICAgICAgKCk9PmRpc3BhdGNoKGRpc3BhdGNoZXJzLkVTVEFET19DQVJHQSh7aWRDYXJnYSwgZXN0YWRvX2NhcmdhfSkpXHJcbiAgICAgICAgICAgICAgICB9Pntlc3RhZG9fY2FyZ2F9PC9CdXR0b24+XHJcbiAgICAgICAgICAgICl9XHJcbiAgICAgICAgICAgIDwvQnV0dG9uR3JvdXA+XHJcbiAgICAgICAgICAgICovfVxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIHtjYXJnYS5lc3RhZG9fY2FyZ2E9PW51bGwgJiYgIXByb3BzLnBvc2ljaW9uIHx8IGNhcmdhLmVzdGFkb19jYXJnYT09J3JlbGV2YW1pZW50byc/XHJcbiAgICAgICAgPFRhYmxlIGNsYXNzTmFtZT1cInRhYmxhLWNhcmdhLWhvamEtZGUtcnV0YVwiPlxyXG4gICAgICAgICAgICA8Y29sZ3JvdXA+XHJcbiAgICAgICAgICAgICAgICA8Y29sIHN0eWxlPXt7d2lkdGg6XCI3NSVcIn19Lz5cclxuICAgICAgICAgICAgICAgIDxjb2wgc3R5bGU9e3t3aWR0aDpcIjEwJVwifX0vPiAgICBcclxuICAgICAgICAgICAgICAgIDxjb2wgc3R5bGU9e3t3aWR0aDpcIjE1JVwifX0vPiAgICBcclxuICAgICAgICAgICAgPC9jb2xncm91cD5cclxuICAgICAgICAgICAge2NhbnRMaW5lYXNSZXN1bWVuP1xyXG4gICAgICAgICAgICAgICAgPFRhYmxlSGVhZCBzdHlsZT17e2ZvbnRTaXplOiBcIjEuMnJlbVwifX0+XHJcbiAgICAgICAgICAgICAgICAgICAgPFRhYmxlUm93IGNsYXNzTmFtZT1cInRyLWNhcmdhXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxUYWJsZUNlbGw+ZG9taWNpbGlvPC9UYWJsZUNlbGw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxUYWJsZUNlbGw+dGFyZWE8L1RhYmxlQ2VsbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPFRhYmxlQ2VsbD5lbmM8L1RhYmxlQ2VsbD5cclxuICAgICAgICAgICAgICAgICAgICA8L1RhYmxlUm93PlxyXG4gICAgICAgICAgICAgICAgPC9UYWJsZUhlYWQ+XHJcbiAgICAgICAgICAgIDpudWxsfVxyXG4gICAgICAgICAgICA8VGFibGVCb2R5PlxyXG4gICAgICAgICAgICAgICAgPD5cclxuICAgICAgICAgICAgICAgIHtsaWtlQXIoaW5mb3JtYWNpb25IZHIpLmZpbHRlcigoaW5mb3JtYWNpb24pPT5pbmZvcm1hY2lvbi50ZW0uY2FyZ2E9PWlkQ2FyZ2EpLm1hcCgoaW5mb3JtYWNpb24sIG51bVZpdmllbmRhKT0+XHJcbiAgICAgICAgICAgICAgICAgICAgPERlc3BsZWdhckxpbmVhUmVzdW1lblVBUHJpbmNpcGFsIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBrZXk9e251bVZpdmllbmRhfSBcclxuICAgICAgICAgICAgICAgICAgICAgICAgbnVtVml2aWVuZGE9e251bVZpdmllbmRhfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJlYT17aW5mb3JtYWNpb24udGFyZWEudGFyZWF9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1QcmluY2lwYWw9e2luZm9ybWFjaW9uLnRhcmVhLm1haW5fZm9ybX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzcHVlc3Rhcz17cmVzcHVlc3Rhc1tlc3RydWN0dXJhLnVhUHBhbF1bbnVtVml2aWVuZGFdIGFzIFJlc3B1ZXN0YXNSYWl6fVxyXG4gICAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICApLmFycmF5KCl9XHJcbiAgICAgICAgICAgICAgICB7ZXN0cnVjdHVyYS5wZXJtaXRlR2VuZXJhck11ZXN0cmE/XHJcbiAgICAgICAgICAgICAgICAgICAgPFRhYmxlUm93IGNsYXNzTmFtZT1cInRyLWNhcmdhLW51ZXZvXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxUYWJsZUNlbGwgY29sU3Bhbj17M30+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudD1cImNvbnRhaW5lZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKT0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWFyRW5jdWVzdGEoaWRDYXJnYSwoZm9yUGtSYWl6OkZvclBrUmFpeik9PntcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoKGRpc3BhdGNoZXJzLkNBTUJJQVJfRk9STVVMQVJJTyh7Zm9yUGs6Zm9yUGtSYWl6LCBhcGlsYXJWdWVsdGE6ZmFsc2V9KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJQ09OLkFkZC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9UYWJsZUNlbGw+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9UYWJsZVJvdz5cclxuICAgICAgICAgICAgICAgIDpudWxsfVxyXG4gICAgICAgICAgICAgICAgPC8+XHJcbiAgICAgICAgICAgIDwvVGFibGVCb2R5PlxyXG4gICAgICAgIDwvVGFibGU+OlxyXG4gICAgICAgIDxUYWJsZT5cclxuICAgICAgICAgICAgPFRhYmxlSGVhZCBzdHlsZT17e2ZvbnRTaXplOiBcIjEuMnJlbVwifX0+XHJcbiAgICAgICAgICAgICAgICA8VGFibGVSb3cgY2xhc3NOYW1lPVwidHItY2FyZ2FcIj5cclxuICAgICAgICAgICAgICAgICAgICB7cmVzdW1pZG9yZXMubWFwKChyZXN1bWlkb3I6IHR5cGVvZiByZXN1bWlkb3Jlc1swXSwgaTpudW1iZXIpPT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPFRhYmxlQ2VsbCBrZXk9e2l9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3Jlc3VtaWRvci5ub21icmV9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvVGFibGVDZWxsPlxyXG4gICAgICAgICAgICAgICAgICAgICl9XHJcbiAgICAgICAgICAgICAgICA8L1RhYmxlUm93PlxyXG4gICAgICAgICAgICA8L1RhYmxlSGVhZD5cclxuICAgICAgICA8L1RhYmxlPlxyXG4gICAgICAgIH1cclxuICAgIDwvUGFwZXI+XHJcbn1cclxuZXhwb3J0IGZ1bmN0aW9uIERlc3BsZWdhckNpdGFQYWN0YWRhKHByb3BzOntyZXNwdWVzdGFzOlJlc3B1ZXN0YXN9KXtcclxuICAgIGNvbnN0IHtyZXNwdWVzdGFzfSA9IHByb3BzO1xyXG4gICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPVwiY2l0YS1wYWN0YWRhXCI+XHJcbiAgICAgICAgPGRpdj48QXRyaWJ1dG8gbm9tYnJlPVwiQ2l0YSBwYWN0YWRhIGNvbiBcIiB2YWxvcj17cmVzcHVlc3Rhc1twMTJdfS8+PC9kaXY+XHJcbiAgICAgICAgPGRpdj48QXRyaWJ1dG8gbm9tYnJlPVwiQ2VsLjpcIiB2YWxvcj17cmVzcHVlc3Rhc1tzcDJdfS8+PC9kaXY+XHJcbiAgICAgICAgPGRpdj48QXRyaWJ1dG8gbm9tYnJlPVwiVGVsLjpcIiB2YWxvcj17cmVzcHVlc3Rhc1tzcDNdfS8+PC9kaXY+XHJcbiAgICAgICAgPGRpdj48QXRyaWJ1dG8gbm9tYnJlPVwiRmVjaGE6XCIgdmFsb3I9e3Jlc3B1ZXN0YXNbc3A0XX0vPjwvZGl2PlxyXG4gICAgICAgIDxkaXY+PEF0cmlidXRvIG5vbWJyZT1cIkhvcmE6XCIgdmFsb3I9e3Jlc3B1ZXN0YXNbc3A1XX0vPjwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBEZXNwbGVnYXJDaXRhUGFjdGFkYVlTZWxlY2Npb25hZG9BbnRlcmlvclRlbShwcm9wczp7dGVtOlRFTX0pe1xyXG4gICAgY29uc3Qge3RlbX0gPSBwcm9wcztcclxuICAgIHJldHVybiA8ZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGVtLWNpdGFcIj5cclxuICAgICAgICAgICAgPEF0cmlidXRvIG5vbWJyZT1cIkNpdGE6XCIgdmFsb3I9e3RlbS5jaXRhfS8+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIERlc3BsZWdhclRlbShwcm9wczp7dGVtOlRFTX0pe1xyXG4gICAgY29uc3Qge3RlbX0gPSBwcm9wcztcclxuICAgIHJldHVybiA8ZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGVtLWRvbWljaWxpb1wiPnt0ZW0ubm9tY2FsbGV9IHt0ZW0ubnJvY2F0YXN0cmFsfSA8QXRyaWJ1dG8gbm9tYnJlPVwicGlzb1wiIHZhbG9yPXt0ZW0ucGlzb30vPiA8QXRyaWJ1dG8gbm9tYnJlPVwiZHB0b1wiIHZhbG9yPXt0ZW0uZGVwYXJ0YW1lbnRvfS8+IDwvZGl2PlxyXG4gICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgIDxBdHJpYnV0byBub21icmU9XCJzZWN0b3JcIiB2YWxvcj17dGVtLnNlY3Rvcn0vPlxyXG4gICAgICAgICAgICA8QXRyaWJ1dG8gbm9tYnJlPVwiZWRpZmljaW9cIiB2YWxvcj17dGVtLmVkaWZpY2lvfS8+XHJcbiAgICAgICAgICAgIDxBdHJpYnV0byBub21icmU9XCJjYXNhXCIgdmFsb3I9e3RlbS5jYXNhfS8+XHJcbiAgICAgICAgICAgIDxBdHJpYnV0byBub21icmU9XCJlbnRyYWRhXCIgdmFsb3I9e3RlbS5lbnRyYWRhfS8+XHJcbiAgICAgICAgICAgIDxBdHJpYnV0byBub21icmU9XCJoYWJpdGFjaW9uXCIgdmFsb3I9e3RlbS5oYWJpdGFjaW9ufS8+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZW0tb2JzZXJ2YWNpb25lc1wiPlxyXG4gICAgICAgICAgICB7dGVtLm9ic2VydmFjaW9uZXN9IFxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBIb2phRGVSdXRhRGVzcGxpZWd1ZSgpe1xyXG4gICAgdmFyIHtjYXJnYXMsIG51bV9zaW5jcm8sIGluZm9ybWFjaW9uSGRyLCByZXNwdWVzdGFzfSA9IGdldERhdG9zQnlQYXNzKCk7XHJcbiAgICB2YXIge21vZG99ID0gdXNlU2VsZWN0b3IoKHN0YXRlOkNhc29TdGF0ZSk9Pih7bW9kbzpzdGF0ZS5tb2RvfSkpO1xyXG4gICAgdmFyIGZlZWRiYWNrUm93VmFsaWRhdG9yID0gZ2V0RmVlZGJhY2tSb3dWYWxpZGF0b3IoKVxyXG4gICAgY29uc3QgZGlzcGF0Y2ggPSB1c2VEaXNwYXRjaCgpO1xyXG4gICAgY29uc3QgdXBkYXRlT25saW5lU3RhdHVzID0gZnVuY3Rpb24oKXtcclxuICAgICAgICBzZXRPbmxpbmUod2luZG93Lm5hdmlnYXRvci5vbkxpbmUpO1xyXG4gICAgfVxyXG4gICAgY29uc3QgYXBwVmVyc2lvbiA9IGdldENhY2hlVmVyc2lvbigpO1xyXG4gICAgY29uc3QgW29ubGluZSwgc2V0T25saW5lXSA9IHVzZVN0YXRlKHdpbmRvdy5uYXZpZ2F0b3Iub25MaW5lKTtcclxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdvbmxpbmUnLCAgdXBkYXRlT25saW5lU3RhdHVzKTtcclxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdvZmZsaW5lJywgdXBkYXRlT25saW5lU3RhdHVzKTtcclxuICAgIHJldHVybiAoXHJcbiAgICAgICAgPD5cclxuICAgICAgICAgICAgPEFwcEJhciBwb3NpdGlvbj1cImZpeGVkXCI+XHJcbiAgICAgICAgICAgICAgICA8VG9vbGJhcj5cclxuICAgICAgICAgICAgICAgICAgICA8VHlwb2dyYXBoeSB2YXJpYW50PVwiaDZcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgSG9qYSBkZSBydXRhXHJcbiAgICAgICAgICAgICAgICAgICAgPC9UeXBvZ3JhcGh5PlxyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAvLzxJY29uQnV0dG9uIHN0eWxlPXt7bWFyZ2luVG9wOiczcHgnfX1cclxuICAgICAgICAgICAgICAgICAgICAvLyAgICBjb2xvcj1cImluaGVyaXRcIlxyXG4gICAgICAgICAgICAgICAgICAgIC8vICAgIC8vb25DbGljaz17LypkaXNwYXRjaCBxdWUgbGxldmEgYSBwYW50YWxsYSBvcGNpb25lcyovfVxyXG4gICAgICAgICAgICAgICAgICAgIC8vPlxyXG4gICAgICAgICAgICAgICAgICAgIC8vICAgIDxJQ09OLlNldHRpbmdzLz5cclxuICAgICAgICAgICAgICAgICAgICAvLzwvSWNvbkJ1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAge29ubGluZT9cclxuICAgICAgICAgICAgICAgICAgICAgICAgPD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJY29uQnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I9XCJpbmhlcml0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKT0+e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvU2luY3Jvbml6YXIoKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPElDT04uU3luY0FsdC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0ljb25CdXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvPlxyXG4gICAgICAgICAgICAgICAgICAgIDpudWxsfVxyXG4gICAgICAgICAgICAgICAgPC9Ub29sYmFyPlxyXG4gICAgICAgICAgICA8L0FwcEJhcj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJob2phLWRlLXJ1dGFcIj5cclxuICAgICAgICAgICAgICAgIHttb2RvLmRlbW8/PGRpdj5cclxuICAgICAgICAgICAgICAgICAgICA8VHlwb2dyYXBoeT5Nb2RvIGRlbW8gPC9UeXBvZ3JhcGh5PlxyXG4gICAgICAgICAgICAgICAgICAgIDxCdXR0b24gdmFyaWFudD1cIm91dGxpbmVkXCIgY29sb3I9XCJzZWNvbmRhcnlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKT0+ZGlzcGF0Y2goZGlzcGF0Y2hlcnMuUkVJTklDSUFSX0RFTU8oe30pKX1cclxuICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlaW5pY2lhclxyXG4gICAgICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+Om51bGx9XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm5vbWJyZS12ZXJzaW9uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdj5EaXJlY2Npw7NuIEdlbmVyYWwgZGUgRXN0YWTDrXN0aWNhIHkgQ2Vuc29zIC0gQy5BLkIuQS48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2PntteS5nZXRMb2NhbFZhcignYXBwLXZlcnNpb24nKX0gc2luY3JvIHtudW1fc2luY3JvfSAtIHZlcnNpw7NuIHthcHBWZXJzaW9ufTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICB7bGlrZUFyKGNhcmdhcykubWFwKChjYXJnYSwgaWRDYXJnYSwgXywgcG9zaWNpb24pPT5cclxuICAgICAgICAgICAgICAgICAgICA8RGVzcGxlZ2FyQ2FyZ2Ega2V5PXtpZENhcmdhfSBjYXJnYT17Y2FyZ2F9IGlkQ2FyZ2E9e2lkQ2FyZ2F9IHBvc2ljaW9uPXtwb3NpY2lvbn0gaW5mb3JtYWNpb25IZHI9e2luZm9ybWFjaW9uSGRyfSBmZWVkYmFja1Jvd1ZhbGlkYXRvcj17ZmVlZGJhY2tSb3dWYWxpZGF0b3J9IHJlc3B1ZXN0YXM9e3Jlc3B1ZXN0YXN9Lz5cclxuICAgICAgICAgICAgICAgICkuYXJyYXkoKX1cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC8+XHJcbiAgICApO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gTGlzdGFUZXh0b3MocHJvcHM6e3RleHRvczpzdHJpbmdbXX0pe1xyXG4gICAgcmV0dXJuIDx1bD5cclxuICAgICAgICB7cHJvcHMudGV4dG9zLm1hcCh0PT48bGk+PFR5cG9ncmFwaHk+e3R9PC9UeXBvZ3JhcGh5PjwvbGk+KX1cclxuICAgIDwvdWw+O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gQmllbnZlbmlkYURlc3BsaWVndWUocHJvcHM6e21vZG86Q2Fzb1N0YXRlW1wibW9kb1wiXX0pe1xyXG4gICAgY29uc3QgZGlzcGF0Y2g9dXNlRGlzcGF0Y2goKTtcclxuICAgIHJldHVybiA8UGFwZXIgY2xhc3NOYW1lPVwiYmllbnZlbmlkYVwiPlxyXG4gICAgICAgIHtwcm9wcy5tb2RvLmRlbW8/XHJcbiAgICAgICAgICAgIDw+XHJcbiAgICAgICAgICAgICAgICA8VHlwb2dyYXBoeT5ERU1PIGRlbCBzaXN0ZW1hIGRlIHJlbGV2YW1pZW50byBkZSBETUVOQ1U8L1R5cG9ncmFwaHk+XHJcbiAgICAgICAgICAgICAgICA8VHlwb2dyYXBoeT5FbiBlc3RhIGRlbW86PC9UeXBvZ3JhcGh5PlxyXG4gICAgICAgICAgICAgICAgPExpc3RhVGV4dG9zIHRleHRvcz17W1xyXG4gICAgICAgICAgICAgICAgICAgIFwiQWxndW5hcyB2aXZpZW5kYXMgYXBhcmVjZW4gcmVsZXZhZGFzIChlbCBib3TDs24gZXN0w6EgZGUgY29sb3IpIHNpcnZlbiBkZSBlamVtcGxvXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgXCJMbyBxdWUgc2UgY2FyZ3VlbiBzZSBndWFyZGFuIGxvY2FsbWVudGUgcGVybyBubyBzZSB0cmFzbWl0ZW4gYSBsYSBiYXNlIGRlIGRhdG9zXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgXCJTZSBwdWVkZSB2b2x2ZXIgYSBsYSB2ZXJzacOzbiBpbmljaWFsIChvIHNlYSBib3JyYXIgbG8gcXVlIHNlIGd1YXJkw7MgbG9jYWxtZW50ZSkgZGVzZGUgbGEgaG9qYSBkZSBydXRhIGJvdG9uIFtyZWluaWNpYXIgZGVtb11cIixcclxuICAgICAgICAgICAgICAgICAgICBcIlRvZGF2w61hIGhheSBjb3NhcyBxdWUgZmFsdGFuIG8gcHVlZGVuIGNhbWJpYXJcIixcclxuICAgICAgICAgICAgICAgIF19IC8+XHJcbiAgICAgICAgICAgIDwvPlxyXG4gICAgICAgICAgICA6PD5cclxuICAgICAgICAgICAgICAgIDxUeXBvZ3JhcGh5PkVuY3Vlc3RhIGRlIFNlcm9wcmV2YWxlbmNpYSBkZSBDT1ZJRC0xOTwvVHlwb2dyYXBoeT5cclxuICAgICAgICAgICAgPC8+XHJcbiAgICAgICAgfVxyXG4gICAgICAgIDxCdXR0b25cclxuICAgICAgICAgICAgdmFyaWFudD1cImNvbnRhaW5lZFwiXHJcbiAgICAgICAgICAgIGNvbG9yPVwic2Vjb25kYXJ5XCJcclxuICAgICAgICAgICAgb25DbGljaz17KCk9PnsgZ290b1NpbmNyb25pemFyKCk7IH19XHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgICA8c3Bhbj5TaW5jcm9uaXphciA8L3NwYW4+IDxJQ09OLlN5bmNBbHQvPlxyXG4gICAgICAgIDwvQnV0dG9uPlxyXG4gICAgICAgIDxCdXR0b25cclxuICAgICAgICAgICAgdmFyaWFudD1cImNvbnRhaW5lZFwiXHJcbiAgICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXHJcbiAgICAgICAgICAgIG9uQ2xpY2s9eygpPT5kaXNwYXRjaChkaXNwYXRjaGVycy5TRVRfT1BDSU9OKHtvcGNpb246J2JpZW52ZW5pZG8nLCB2YWxvcjp0cnVlfSkpfVxyXG4gICAgICAgID5cclxuICAgICAgICAgICAgPHNwYW4+Q29udGludWFyIDwvc3Bhbj4gPElDT04uU2VuZC8+XHJcbiAgICAgICAgPC9CdXR0b24+XHJcbiAgICA8L1BhcGVyPlxyXG59XHJcblxyXG4vL0NPTlRST0wgREUgUEVTVEHDkUFTXHJcbnZhciBhbGxPcGVuZWRUYWJzOntbeDpzdHJpbmddOm51bWJlcn09e307XHJcbnZhciBpbmZvT3BlbmVkVGFicz17XHJcbiAgICBhbGxPcGVuZWRUYWJzLFxyXG4gICAgbXlJZDonY2FsY3VsYW5kby4uLicsXHJcbiAgICBvdGhlclRhYnNOYW1lczonJ1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gT3BlbmVkVGFicygpe1xyXG4gICAgY29uc3QgW3RhYnMsIHNldFRhYnNdID0gdXNlU3RhdGUoaW5mb09wZW5lZFRhYnMub3RoZXJUYWJzTmFtZXMpO1xyXG4gICAgdmFyIHttb2RvRGlyZWN0b30gPSB1c2VTZWxlY3Rvcigoc3RhdGU6Q2Fzb1N0YXRlKT0+KHttb2RvRGlyZWN0bzpzdGF0ZS5vcGNpb25lcy5tb2RvRGlyZWN0b30pKTtcclxuICAgIGNvbnN0IHVwZGF0ZVRhYnNTdGF0dXMgPSBmdW5jdGlvbigpe1xyXG4gICAgICAgIHNldFRhYnMoaW5mb09wZW5lZFRhYnMub3RoZXJUYWJzTmFtZXMpO1xyXG4gICAgfVxyXG4gICAgdXNlRWZmZWN0KCgpPT57XHJcbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ215LXRhYnMnLHVwZGF0ZVRhYnNTdGF0dXMpO1xyXG4gICAgICAgIHJldHVybiAoKSA9PiB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignbXktdGFicycsdXBkYXRlVGFic1N0YXR1cyk7XHJcbiAgICB9LFtdKVxyXG4gICAgcmV0dXJuIG1vZG9EaXJlY3RvP251bGw6KHRhYnMpP1xyXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGFiLWNvdW50ZXIgdGFiLWVycm9yXCI+wqFBVEVOQ0nDk04hIEhheSBtw6FzIGRlIHVuYSB2ZW50YW5hIGFiaWVydGEuIFNlIHB1ZWRlbiBwZXJkZXIgZGF0b3M6IHt0YWJzfTwvZGl2PlxyXG4gICAgOlxyXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGFiLWNvdW50ZXJcIj7inJQ8L2Rpdj5cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIEFwcERtRW5jdSgpe1xyXG4gICAgdmFyIHtmb3JQaywgYmllbnZlbmlkbywgbW9kb30gPSB1c2VTZWxlY3Rvcigoc3RhdGU6Q2Fzb1N0YXRlKT0+KHsuLi5zdGF0ZS5vcGNpb25lcywgLi4uc3RhdGUubW9kbywgLi4uc3RhdGV9KSk7XHJcbiAgICBpZighYmllbnZlbmlkbyl7XHJcbiAgICAgICAgcmV0dXJuIDxCaWVudmVuaWRhRGVzcGxpZWd1ZSBtb2RvPXttb2RvfS8+IFxyXG4gICAgfWVsc2UgaWYoZm9yUGs9PW51bGwpe1xyXG4gICAgICAgIHJldHVybiA8SG9qYURlUnV0YURlc3BsaWVndWUgLz4gXHJcbiAgICB9ZWxzZXtcclxuICAgICAgICByZXR1cm4gPEZvcm11bGFyaW9EZXNwbGllZ3VlIGZvclBrPXtmb3JQa30vPlxyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBQYW50YWxsYUluaWNpYWxTaW5DYXJnYShfcHJvcHM6e30pe1xyXG4gICAgY29uc3QgdXBkYXRlT25saW5lU3RhdHVzID0gZnVuY3Rpb24oKXtcclxuICAgICAgICBzZXRPbmxpbmUod2luZG93Lm5hdmlnYXRvci5vbkxpbmUpO1xyXG4gICAgfVxyXG4gICAgY29uc3QgW29ubGluZSwgc2V0T25saW5lXSA9IHVzZVN0YXRlKHdpbmRvdy5uYXZpZ2F0b3Iub25MaW5lKTtcclxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdvbmxpbmUnLCAgdXBkYXRlT25saW5lU3RhdHVzKTtcclxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdvZmZsaW5lJywgdXBkYXRlT25saW5lU3RhdHVzKTtcclxuICAgIGNvbnN0IHBhcmFncmFwaFN0eWxlcz17Zm9udFNpemU6XCIxLjJyZW1cIiwgZm9udFdlaWdodDo2MDAsIHBhZGRpbmc6IFwiNXB4IDEwcHhcIn07XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICAgIDw+XHJcbiAgICAgICAgICAgIDxBcHBCYXIgcG9zaXRpb249XCJmaXhlZFwiPlxyXG4gICAgICAgICAgICAgICAgPFR5cG9ncmFwaHkgdmFyaWFudD1cImg2XCIgc3R5bGU9e3ttYXJnaW46MjV9fT5cclxuICAgICAgICAgICAgICAgICAgICBEaXNwb3NpdGl2byBzaW4gY2FyZ2FcclxuICAgICAgICAgICAgICAgIDwvVHlwb2dyYXBoeT5cclxuICAgICAgICAgICAgPC9BcHBCYXI+XHJcbiAgICAgICAgICAgIDxtYWluPlxyXG4gICAgICAgICAgICAgICAgPFBhcGVyIHN0eWxlPXt7aGVpZ2h0Oic2MDBweCcsIHBhZGRpbmc6XCIxNXB4XCIsIG1hcmdpblRvcDo3NX19PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHtvbmxpbmU/XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUeXBvZ3JhcGh5IGNvbXBvbmVudD1cInBcIiBzdHlsZT17cGFyYWdyYXBoU3R5bGVzfT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2luY3Jvbml6YXIgZGlzcG9zaXRpdm9cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9e3twYWRkaW5nOic1cHgnfX0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50PVwiY29udGFpbmVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKT0+e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvU2luY3Jvbml6YXIoKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPElDT04uU3luY0FsdC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvVHlwb2dyYXBoeT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VHlwb2dyYXBoeSBjb21wb25lbnQ9XCJwXCIgc3R5bGU9e3BhcmFncmFwaFN0eWxlc30+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm8gaGF5IGNvbmV4acOzbiBhIGludGVybmV0LCBwb3IgZmF2b3IgY29uw6ljdGUgZWwgZGlzcG9zaXRpdm8gYSB1bmEgcmVkIHBhcmEgc2luY3Jvbml6YXIgdW5hIGhvamEgZGUgcnV0YS5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvVHlwb2dyYXBoeT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9QYXBlcj5cclxuICAgICAgICAgICAgPC9tYWluPlxyXG4gICAgICAgIDwvPlxyXG4gICAgKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIFBhbnRhbGxhSW5pY2lhbCgpe1xyXG4gICAgdmFyIHtmb3JQaywgYmllbnZlbmlkbywgbW9kb30gPSB1c2VTZWxlY3Rvcigoc3RhdGU6Q2Fzb1N0YXRlKT0+KHsuLi5zdGF0ZS5vcGNpb25lcywgLi4uc3RhdGUubW9kbywgLi4uc3RhdGV9KSk7XHJcbiAgICBpZighYmllbnZlbmlkbyl7XHJcbiAgICAgICAgcmV0dXJuIDxCaWVudmVuaWRhRGVzcGxpZWd1ZSBtb2RvPXttb2RvfS8+IFxyXG4gICAgfWVsc2UgaWYoZm9yUGs9PW51bGwpe1xyXG4gICAgICAgIHJldHVybiA8SG9qYURlUnV0YURlc3BsaWVndWUgLz4gXHJcbiAgICB9ZWxzZXtcclxuICAgICAgICByZXR1cm4gPEZvcm11bGFyaW9EZXNwbGllZ3VlIGZvclBrPXtmb3JQa30vPlxyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZG1QYW50YWxsYUluaWNpYWxTaW5DYXJnYSgpe1xyXG4gICAgdHJ5e1xyXG4gICAgICAgIGF3YWl0IGxvYWRDU1MoQk9PVFNUUkFQXzVfMV8zX1NSQyk7XHJcbiAgICB9Y2F0Y2goZXJyKXtcclxuICAgICAgICB0aHJvdyhlcnIpXHJcbiAgICB9XHJcbiAgICBSZWFjdERPTS5yZW5kZXIoXHJcbiAgICAgICAgPFBhbnRhbGxhSW5pY2lhbFNpbkNhcmdhLz4sXHJcbiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21haW5fbGF5b3V0JylcclxuICAgIClcclxufVxyXG5cclxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGRlc3BsZWdhckZvcm11bGFyaW9BY3R1YWwob3B0czp7bW9kb0RlbW86Ym9vbGVhbiwgZm9yUGtSYWl6PzpGb3JQa1JhaXosIG9wZXJhdGl2bzpJZE9wZXJhdGl2b30pe1xyXG4gICAgLy8gdHJhZXIgbG9zIG1ldGFkYXRvcyBlbiB1bmEgXCJlc3RydWN0dXJhXCJcclxuICAgIC8vIHRyYWVyIGxvcyBkYXRvcyBkZSBsb2NhbFN0b3JhZ2VcclxuICAgIC8vIHZlcmlmaWNhciBlbCBtYWluIExheW91dFxyXG4gICAgY29uc3Qgc3RvcmUgPSBhd2FpdCBkbVRyYWVyRGF0b3NGb3JtdWxhcmlvKG9wdHMpXHJcbiAgICB0cnl7XHJcbiAgICAgICAgYXdhaXQgbG9hZENTUyhCT09UU1RSQVBfNV8xXzNfU1JDKTtcclxuICAgIH1jYXRjaChlcnIpe1xyXG4gICAgICAgIHRocm93KGVycilcclxuICAgIH1cclxuICAgIFJlYWN0RE9NLnJlbmRlcihcclxuICAgICAgICA8UmVuZGVyUHJpbmNpcGFsIHN0b3JlPXtzdG9yZX0gZGlzcGF0Y2hlcnM9e2Rpc3BhdGNoZXJzfSBtZW5zYWplUmV0b3Jubz17b3B0cy5mb3JQa1JhaXo/XCJWb2x2ZXIgYWwgZm9ybXVsYXJpb1wiOlwiVm9sdmVyIGEgbGEgaG9qYSBkZSBydXRhXCJ9PlxyXG4gICAgICAgICAgICA8T3BlbmVkVGFicy8+XHJcbiAgICAgICAgICAgIDxBcHBEbUVuY3UvPlxyXG4gICAgICAgIDwvUmVuZGVyUHJpbmNpcGFsPixcclxuICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWFpbl9sYXlvdXQnKVxyXG4gICAgKVxyXG59XHJcblxyXG5pZih0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyl7XHJcbiAgICAvLyBAdHMtaWdub3JlIHBhcmEgaGFjZXJsb1xyXG4gICAgd2luZG93LmRlc3BsZWdhckZvcm11bGFyaW9BY3R1YWwgPSBkZXNwbGVnYXJGb3JtdWxhcmlvQWN0dWFsO1xyXG4gICAgLy8gQHRzLWlnbm9yZSBwYXJhIGhhY2VybG9cclxuICAgIHdpbmRvdy5kbVBhbnRhbGxhSW5pY2lhbFNpbkNhcmdhID0gZG1QYW50YWxsYUluaWNpYWxTaW5DYXJnYTtcclxufVxyXG5cclxuXHJcbmZ1bmN0aW9uIGxvYWRJbnN0YW5jZSgpe1xyXG4gICAgaWYodHlwZW9mIEJyb2FkY2FzdENoYW5uZWwgPT09ICd1bmRlZmluZWQnKXtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB2YXIgYmMgPSBuZXcgQnJvYWRjYXN0Q2hhbm5lbCgnY29udGFkb3InKTtcclxuICAgIHZhciBteUlkPVN0cmluZy5mcm9tQ29kZVBvaW50KDEwMCtNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqMTAwMCkpK01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSoxMDApLy8rJy0nK25ldyBEYXRlKCkuZ2V0VGltZSgpO1xyXG4gICAgYWxsT3BlbmVkVGFic1tteUlkXT0xO1xyXG4gICAgaW5mb09wZW5lZFRhYnMubXlJZD1teUlkO1xyXG4gICAgdmFyIGV2ZW50ID0gbmV3IEV2ZW50KCdteS10YWJzJyk7XHJcbiAgICBiYy5vbm1lc3NhZ2U9ZnVuY3Rpb24oZXYpe1xyXG4gICAgICAgIGlmKGV2LmRhdGEucXVlPT0nc295Jyl7XHJcbiAgICAgICAgICAgIGlmKCFhbGxPcGVuZWRUYWJzW2V2LmRhdGEuaWRdKXtcclxuICAgICAgICAgICAgICAgIGFsbE9wZW5lZFRhYnNbZXYuZGF0YS5pZF09MDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBhbGxPcGVuZWRUYWJzW2V2LmRhdGEuaWRdKys7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKGV2LmRhdGEucXVlPT0ndW5sb2FkJyl7XHJcbiAgICAgICAgICAgIGRlbGV0ZSBhbGxPcGVuZWRUYWJzW2V2LmRhdGEuaWRdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZihldi5kYXRhLnF1ZT09J2xvYWQnKXtcclxuICAgICAgICAgICAgYWxsT3BlbmVkVGFic1tldi5kYXRhLmlkXT0xO1xyXG4gICAgICAgICAgICBiYy5wb3N0TWVzc2FnZSh7cXVlOidzb3knLGlkOm15SWR9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaW5mb09wZW5lZFRhYnMub3RoZXJUYWJzTmFtZXM9bGlrZUFyKGFsbE9wZW5lZFRhYnMpLmZpbHRlcigoXyxpZCk9PmlkIT1teUlkKS5qb2luKCcsJyk7XHJcbiAgICAgICAgd2luZG93LmRpc3BhdGNoRXZlbnQoZXZlbnQpO1xyXG4gICAgfTtcclxuICAgIGJjLnBvc3RNZXNzYWdlKHtxdWU6J2xvYWQnLGlkOm15SWR9KTtcclxuICAgIHdpbmRvdy5kaXNwYXRjaEV2ZW50KGV2ZW50KTtcclxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCd1bmxvYWQnLGZ1bmN0aW9uKCl7XHJcbiAgICAgICAgYmMucG9zdE1lc3NhZ2Uoe3F1ZTondW5sb2FkJyxpZDpteUlkfSk7XHJcbiAgICAgICAgd2luZG93LmRpc3BhdGNoRXZlbnQoZXZlbnQpO1xyXG4gICAgfSlcclxuICAgIC8vbW9zdHJhclF1aWVuZXNTb21vcygpO1xyXG59XHJcblxyXG5leHBvcnQgY29uc3Qgc2V0TGlicmVEZXNwbGllZ3VlID0gKGxpYnJlOkxpYnJlRGVzcGxpZWd1ZVR5cGUpPT5MaWJyZURlc3BsaWVndWUgPSBsaWJyZVxyXG5cclxuc2V0TGlicmVEZXNwbGllZ3VlKChwcm9wczp7XHJcbiAgICBrZXk6c3RyaW5nXHJcbiAgICBjYXNpbGxlcm86TGlicmVcclxuICAgIGZvcm11bGFyaW86Rm9ybXVsYXJpb1xyXG4gICAgZm9yUGs6Rm9yUGtcclxufSk9PjxkaXYga2V5PXtwcm9wcy5rZXl9IGlkPXtwcm9wcy5jYXNpbGxlcm8uaWRfY2FzaWxsZXJvfT5lc3RlIGNhc2lsbGVybyBkZWJlIHJlZGVmaW5pcnNlIGVuIGxhIEFQUCBmaW5hbCB5IHN1IHVzbyBlcyBleGNsdXNpdm8gZGVsIMOhcmVhIGluZm9ybcOhdGljYTwvZGl2PilcclxuXHJcbnNldENhbGN1bGFyVmFyaWFibGVzKChyZXNwdWVzdGFzUmFpejpSZXNwdWVzdGFzUmFpeiwgZm9yUGs6Rm9yUGspPT57XHJcbiAgICB0eXBlIENvbmZpZ1BhZHJlID0ge1xyXG4gICAgICAgIHVhUGVyc29uYXM6IElkVW5pZGFkQW5hbGlzaXNcclxuICAgICAgICB2YXJTZXhvUGVyc29uYTogSWRWYXJpYWJsZVxyXG4gICAgICAgIHZhck5vbWJyZVBlcnNvbmE6IElkVmFyaWFibGVcclxuICAgICAgICB2YXJMb3NOb21icmVzOiBJZFZhcmlhYmxlXHJcbiAgICB9XHJcbiAgICB2YXIgZXN0cnVjdHVyYSA9IGdldEVzdHJ1Y3R1cmEoKTtcclxuICAgIHZhciBhdXRvQ2FyZ2FyUGVyc29uYXMgPSAoY29uZmlnUGFkcmU6IENvbmZpZ1BhZHJlICx1YVBhZHJlUGVyc29uYXM6SWRVbmlkYWRBbmFsaXNpcywgZXN0cnVjdHVyYTpFc3RydWN0dXJhKT0+e1xyXG4gICAgICAgIHZhciBsZWVyTm9tYnJlcyA9IChyZXNwdWVzdGFzVUFQYWRyZTpSZXNwdWVzdGFzLCBjb25maWdQYWRyZTpDb25maWdQYWRyZSk9PntcclxuICAgICAgICAgICAgaWYoIXJlc3B1ZXN0YXNVQVBhZHJlW2NvbmZpZ1BhZHJlLnVhUGVyc29uYXNdIHx8IGVtcHR5KHJlc3B1ZXN0YXNVQVBhZHJlW2NvbmZpZ1BhZHJlLnVhUGVyc29uYXNdKSB8fCByZXNwdWVzdGFzVUFQYWRyZVtjb25maWdQYWRyZS51YVBlcnNvbmFzXVswXVtjb25maWdQYWRyZS52YXJTZXhvUGVyc29uYV0gPT0gbnVsbCl7XHJcbiAgICAgICAgICAgICAgICB2YXIgbG9zTm9tYnJlcyA9IHJlc3B1ZXN0YXNVQVBhZHJlW2NvbmZpZ1BhZHJlLnZhckxvc05vbWJyZXNdIGFzIHN0cmluZ1xyXG4gICAgICAgICAgICAgICAgaWYobG9zTm9tYnJlcyAhPSBudWxsKXtcclxuICAgICAgICAgICAgICAgICAgICBpZighcmVzcHVlc3Rhc1VBUGFkcmVbY29uZmlnUGFkcmUudWFQZXJzb25hc10pe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNwdWVzdGFzVUFQYWRyZVtjb25maWdQYWRyZS51YVBlcnNvbmFzXT1bXTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgbG9zTm9tYnJlc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAuc3BsaXQoJywnKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKChub21icmU6c3RyaW5nKT0+bm9tYnJlLnRyaW0oKS5sZW5ndGggPiAwKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAuZm9yRWFjaCgobm9tYnJlOnN0cmluZywgaTpudW1iZXIpPT57XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwdWVzdGFzVUFQYWRyZVtjb25maWdQYWRyZS51YVBlcnNvbmFzXVtpXSA9IHJlc3B1ZXN0YXNVQVBhZHJlW2NvbmZpZ1BhZHJlLnVhUGVyc29uYXNdW2ldIHx8IHt9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcHVlc3Rhc1VBUGFkcmVbY29uZmlnUGFkcmUudWFQZXJzb25hc11baV1bY29uZmlnUGFkcmUudmFyTm9tYnJlUGVyc29uYV0gPSBub21icmUudHJpbSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKGVzdHJ1Y3R1cmEudW5pZGFkZXNfYW5hbGlzaXNbdWFQYWRyZVBlcnNvbmFzXSl7XHJcbiAgICAgICAgICAgIGlmKHVhUGFkcmVQZXJzb25hcyA9PSAndml2aWVuZGFzJyl7XHJcbiAgICAgICAgICAgICAgICBsZWVyTm9tYnJlcyhyZXNwdWVzdGFzUmFpeixjb25maWdQYWRyZSlcclxuICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICBmb3IodmFyIHJlc3B1ZXN0YXNVQVBhZHJlIG9mIGl0ZXJhdG9yKHJlc3B1ZXN0YXNSYWl6W3VhUGFkcmVQZXJzb25hc10/P1tdKSl7XHJcbiAgICAgICAgICAgICAgICAgICAgbGVlck5vbWJyZXMocmVzcHVlc3Rhc1VBUGFkcmUsY29uZmlnUGFkcmUpXHJcbiAgICAgICAgICAgICAgICB9ICAgXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICB2YXIgdWFzSXRlcmFyOiB7XHJcbiAgICAgICAgW2tleSBpbiBJZFVuaWRhZEFuYWxpc2lzXTpDb25maWdQYWRyZVxyXG4gICAgfTsgXHJcbiAgICB2YXIgY29uZmlnRW5jdSA6IENvbmZpZ1BhZHJlID0geyBcclxuICAgICAgICB1YVBlcnNvbmFzOiAncGVyc29uYXMnLFxyXG4gICAgICAgIHZhclNleG9QZXJzb25hOiAnc2V4bycgYXMgSWRWYXJpYWJsZSxcclxuICAgICAgICB2YXJOb21icmVQZXJzb25hOiAnbm9tYnJlJyBhcyBJZFZhcmlhYmxlLFxyXG4gICAgICAgIHZhckxvc05vbWJyZXM6IFwibG9zX25vbWJyZXNcIiBhcyBJZFZhcmlhYmxlXHJcbiAgICB9O1xyXG4gICAgdmFyIGNvbmZpZ1N1cGUgOiBDb25maWdQYWRyZSA9IHsgXHJcbiAgICAgICAgdWFQZXJzb25hczogJ3BlcnNvbmFzX3N1cCcgYXMgSWRVbmlkYWRBbmFsaXNpcyxcclxuICAgICAgICB2YXJTZXhvUGVyc29uYTogJ3NleG9fc3VwJyAgYXMgSWRWYXJpYWJsZSxcclxuICAgICAgICB2YXJOb21icmVQZXJzb25hOiAnbm9tYnJlX3N1cCcgIGFzIElkVmFyaWFibGUsXHJcbiAgICAgICAgdmFyTG9zTm9tYnJlczogXCJub21icmVzX2NvbXBvbmVudGVzX3N1cFwiICBhcyBJZFZhcmlhYmxlXHJcbiAgICB9O1xyXG5cclxuICAgIGlmKGVzdHJ1Y3R1cmEuY29uUmVhSG9nYXIpe1xyXG4gICAgICAgIHVhc0l0ZXJhciA9IHtcclxuICAgICAgICAgICAgaG9nYXJlczogY29uZmlnRW5jdSxcclxuICAgICAgICAgICAgW1wiaG9nYXJlc19zdXBcIiBhcyBJZFVuaWRhZEFuYWxpc2lzXSA6IGNvbmZpZ1N1cGVcclxuICAgICAgICB9XHJcbiAgICAgICAgbGlrZUFyKHVhc0l0ZXJhcikuZm9yRWFjaCgoY29uZmlnUGFkcmUsdWFQYWRyZSk9PntcclxuICAgICAgICAgICAgYXV0b0NhcmdhclBlcnNvbmFzKGNvbmZpZ1BhZHJlLHVhUGFkcmUsIGVzdHJ1Y3R1cmEpXHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgIH0pXHJcbiAgICB9ZWxzZXtcclxuICAgICAgICB2YXIgY29uZmlnUGFkcmVzOiBDb25maWdQYWRyZVtdID0gW2NvbmZpZ0VuY3UsY29uZmlnU3VwZV07XHJcbiAgICAgICAgY29uZmlnUGFkcmVzLmZvckVhY2goKGNvbmZpZ1BhZHJlKT0+e1xyXG4gICAgICAgICAgICBhdXRvQ2FyZ2FyUGVyc29uYXMoY29uZmlnUGFkcmUsJ3ZpdmllbmRhcycsIGVzdHJ1Y3R1cmEpXHJcbiAgICAgICAgfSkgICAgICAgIFxyXG4gICAgfVxyXG4gICAgcmVzcHVlc3Rhc1JhaXoudmRvbWluaW89Z2V0RGF0b3NCeVBhc3MoKS5pbmZvcm1hY2lvbkhkcltmb3JQa1tlc3RydWN0dXJhLnBrQWdyZWdhZGFVYVBwYWxdXS50ZW0uZG9taW5pbztcclxuICAgIC8vVE9ETzogTUVKT1JBUiBFTiBBTEdVTiBNT01FTlRPIEVMIEJPVE9OIExJU1RPXHJcbiAgICBsZXQgdG90YWxIID0gcmVzcHVlc3Rhc1JhaXpbJ3RvdGFsX2gnIGFzIElkVmFyaWFibGVdO1xyXG4gICAgcmVzcHVlc3Rhc1JhaXpbJyRCLkY6UzEnIGFzIElkVmFyaWFibGVdID0gKHJlc3B1ZXN0YXNSYWl6Wydob2dhcmVzJ10gfHwgW10pLmxlbmd0aCA9PSB0b3RhbEg/J29rJzpudWxsO1xyXG4gICAgbGV0IHRvdGFsSHN1cCA9IHJlc3B1ZXN0YXNSYWl6Wyd0b3RhbF9oX3N1cCcgYXMgSWRWYXJpYWJsZV07XHJcbiAgICByZXNwdWVzdGFzUmFpelsnJEIuRjpTMV9TVVAnIGFzIElkVmFyaWFibGVdID0gKHJlc3B1ZXN0YXNSYWl6Wydob2dhcmVzX3N1cCcgYXMgSWRVbmlkYWRBbmFsaXNpc10gfHwgW10pLmxlbmd0aCA9PSB0b3RhbEhzdXA/J29rJzpudWxsO1xyXG59KVxyXG5cclxud2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBmdW5jdGlvbigpe1xyXG4gICAgbG9hZEluc3RhbmNlKClcclxufSlcclxuLy9GSU4gQ09OVFJPTCBQRVNUQcORQVNcclxuXHJcbmZ1bmN0aW9uIGxvYWRDU1MoY3NzVVJMOnN0cmluZywgaWQ/OnN0cmluZyk6UHJvbWlzZTx2b2lkPntcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgoIHJlc29sdmUsIHJlamVjdCApPT57XHJcbiAgICAgICAgdmFyIGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAnbGluaycgKTtcclxuICAgICAgICBsaW5rLnJlbCAgPSAnc3R5bGVzaGVldCc7XHJcbiAgICAgICAgbGluay5ocmVmID0gY3NzVVJMO1xyXG4gICAgICAgIGxpbmsuaWQgPSBpZCB8fCBjc3NVUkw7XHJcbiAgICAgICAgZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZCggbGluayApO1xyXG4gICAgICAgIGxpbmsub25sb2FkID0gKCk9PnsgXHJcbiAgICAgICAgICAgIHJlc29sdmUoKTsgXHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGB0cmFlICR7Y3NzVVJMfWApO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgbGluay5vbmVycm9yPShlcnIpPT57XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdlcnJvciBjYXJnYW5kbyBlbCBlc3RpbG8nLCBlcnIpXHJcbiAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoYHByb2JsZW1hIGNhcmdhbmRvIGVzdGlsbyAke2Nzc1VSTH1gKSlcclxuICAgICAgICB9XHJcbiAgICB9KTtcclxufVxyXG5cclxuZnVuY3Rpb24gcmVtb3ZlQ1NTQnlJZChpZDpzdHJpbmcpe1xyXG4gICAgdmFyIGxpbmtOb2RlID0gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTtcclxuICAgIGxpbmtOb2RlPy5wYXJlbnROb2RlPy5yZW1vdmVDaGlsZChsaW5rTm9kZSk7XHJcbn1cclxuXHJcbmNvbnN0IEJPT1RTVFJBUF81XzFfM19TUkMgPSAnY3NzL2Jvb3RzdHJhcC5taW4uY3NzJzsiXX0=
|