dmencu 0.7.26 → 0.7.27
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/unlogged/bypass-formulario.d.ts +2 -2
- package/dist/client/unlogged/bypass-formulario.js +15 -6
- package/dist/client/unlogged/render-formulario.tsx +18 -7
- package/dist/client/unlogged/tipos.d.ts +10 -0
- package/dist/client/unlogged/tipos.js +1 -1
- package/dist/server/server/app-dmencu.js +5 -1
- package/dist/server/server/procedures-dmencu.js +9 -4
- package/dist/server/unlogged/tipos.d.ts +10 -0
- package/dist/server/unlogged/tipos.js +1 -1
- package/dist/unlogged/unlogged/bypass-formulario.d.ts +2 -2
- package/dist/unlogged/unlogged/bypass-formulario.js +15 -6
- package/dist/unlogged/unlogged/render-formulario.js +15 -6
- package/dist/unlogged/unlogged/render-formulario.tsx +18 -7
- package/dist/unlogged/unlogged/tipos.d.ts +10 -0
- package/dist/unlogged/unlogged/tipos.js +1 -1
- package/package.json +1 -1
|
@@ -447,7 +447,14 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
|
447
447
|
React.createElement("div", { className: "pie-pregunta" },
|
|
448
448
|
React.createElement(SaltoDespliegue, { casillero: pregunta, prefijo: pregunta.tipovar == "opciones" ? (pregunta.casilleros.some(opcion => opcion.salto) ? "resto de las opciones" : "todas las opciones") : "" })));
|
|
449
449
|
}
|
|
450
|
-
var calcularDisabledBFAgregarListo = (configSorteoFormulario, formulario) =>
|
|
450
|
+
var calcularDisabledBFAgregarListo = (configSorteoFormulario, habilitacionBotonFormulario, formulario) => {
|
|
451
|
+
if (habilitacionBotonFormulario && habilitacionBotonFormulario[formulario]) {
|
|
452
|
+
return !habilitacionBotonFormulario[formulario].habilitar_agregar_listo;
|
|
453
|
+
}
|
|
454
|
+
else {
|
|
455
|
+
return !!(configSorteoFormulario && configSorteoFormulario.id_formulario_individual == formulario);
|
|
456
|
+
}
|
|
457
|
+
};
|
|
451
458
|
function botonesDelFormulario(r, unidad_analisis, estructura, forPkPadre, feedbackAll) {
|
|
452
459
|
var formsVivienda = (0, bypass_formulario_1.getFormulariosForIdVivienda)(forPkPadre.vivienda);
|
|
453
460
|
var uaDef = estructura.unidades_analisis[unidad_analisis];
|
|
@@ -461,6 +468,7 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
|
461
468
|
var num = Number(i) + 1;
|
|
462
469
|
var forPkHijaParcial = Object.assign(Object.assign({}, forPkPadre), { [uaHija.pk_agregada]: num });
|
|
463
470
|
var configSorteoFormulario = estructura.configSorteo ? estructura.configSorteo[(0, bypass_formulario_1.getMainFormForVivienda)(forPkPadre.vivienda)] : null;
|
|
471
|
+
var habilitacionBotonFormulario = estructura.habilitacionBotonFormulario;
|
|
464
472
|
return js_to_html_1.html.div({ class: 'numerador-ua' }, [
|
|
465
473
|
js_to_html_1.html.div({ class: 'botones-ua' }, [
|
|
466
474
|
js_to_html_1.html.div({ class: 'numero-ua' }, num.toString()),
|
|
@@ -476,7 +484,7 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
|
476
484
|
num,
|
|
477
485
|
actual: true || (0, bypass_formulario_1.calcularActualBF)(configSorteoFormulario, num, null, formulario, r),
|
|
478
486
|
previo: false,
|
|
479
|
-
disabled: (0, bypass_formulario_1.calcularDisabledBF)(configSorteoFormulario, num, formulario, r)
|
|
487
|
+
disabled: (0, bypass_formulario_1.calcularDisabledBF)(configSorteoFormulario, habilitacionBotonFormulario, num, formulario, r)
|
|
480
488
|
}, feedbackForm, r, { despliegueOculta: false, expresion_habilitar_js: '', nombre: formulario, aclaracion: null, salto: formulario }, forPkPadre, "boton-ir-resumen-formulario", estructura.formularios[formulario].casilleros)
|
|
481
489
|
]) : null;
|
|
482
490
|
}).array().map(x => x == null ? null : x).reverse(),
|
|
@@ -687,6 +695,7 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
|
687
695
|
var estadoDelBoton = feedbackRow.feedback['$B.F:' + armoNomSalto].estado;
|
|
688
696
|
// console.log('BotonFormularioDespliegue estadoDelBoton ' +estadoDelBoton );
|
|
689
697
|
var configSorteoFormulario = estructura.configSorteo ? estructura.configSorteo[(0, bypass_formulario_1.getMainFormForVivienda)(forPk.vivienda)] : null;
|
|
698
|
+
var habilitacionBotonFormulario = estructura.habilitacionBotonFormulario;
|
|
690
699
|
listaDeBotonesAbrir = (0, like_ar_1.strict)(conjunto).map((_, i) => {
|
|
691
700
|
let num = (0, bypass_formulario_2.numberOrStringIncIfArray)(i, conjunto);
|
|
692
701
|
let forPk = Object.assign(Object.assign({}, props.forPk), { formulario: idFormularioDestino, [nuevoCampoPk]: num });
|
|
@@ -704,7 +713,7 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
|
704
713
|
permiteBorrar: (0, like_ar_1.strict)(conjunto).array().length == Number(i) + 1 &&
|
|
705
714
|
checkFormsVacios(formHnos, feedbackAll, forPk) &&
|
|
706
715
|
(0, bypass_formulario_1.calcularPermiteBorrarBF)(configSorteoFormulario, idFormularioDestino),
|
|
707
|
-
disabled: (0, bypass_formulario_1.calcularDisabledBF)(configSorteoFormulario, num, idFormularioDestino, respuestasAumentadas)
|
|
716
|
+
disabled: (0, bypass_formulario_1.calcularDisabledBF)(configSorteoFormulario, habilitacionBotonFormulario, num, idFormularioDestino, respuestasAumentadas)
|
|
708
717
|
};
|
|
709
718
|
}).array();
|
|
710
719
|
if ("puede agregar //TODO VER ESTO" && (conjunto instanceof Array || conjunto == null)) {
|
|
@@ -718,7 +727,7 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
|
718
727
|
esAgregar: true,
|
|
719
728
|
actual: debeAgregarOlisto,
|
|
720
729
|
previo: false,
|
|
721
|
-
disabled: calcularDisabledBFAgregarListo(configSorteoFormulario, idFormularioDestino)
|
|
730
|
+
disabled: calcularDisabledBFAgregarListo(configSorteoFormulario, habilitacionBotonFormulario, idFormularioDestino)
|
|
722
731
|
});
|
|
723
732
|
listaDeBotonesAbrir.push({
|
|
724
733
|
forPk,
|
|
@@ -726,7 +735,7 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
|
726
735
|
esConfirmar: true,
|
|
727
736
|
actual: debeAgregarOlisto && (!casillero.longitud || nuevoValorPk > Number(casillero.longitud)),
|
|
728
737
|
previo: false,
|
|
729
|
-
disabled: calcularDisabledBFAgregarListo(configSorteoFormulario, idFormularioDestino)
|
|
738
|
+
disabled: calcularDisabledBFAgregarListo(configSorteoFormulario, habilitacionBotonFormulario, idFormularioDestino)
|
|
730
739
|
});
|
|
731
740
|
}
|
|
732
741
|
}
|
|
@@ -1559,4 +1568,4 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
|
1559
1568
|
}
|
|
1560
1569
|
const BOOTSTRAP_5_1_3_SRC = 'css/bootstrap.min.css';
|
|
1561
1570
|
});
|
|
1562
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVuZGVyLWZvcm11bGFyaW8uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdW5sb2dnZWQvcmVuZGVyLWZvcm11bGFyaW8udHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBQUEsK0JBQStCO0lBQy9CLHNDQUFzQztJQUN0QyxxREFRMEI7SUFDMUIsbUNBY2lCO0lBQ2pCLDJEQVk0QjtJQUM1Qix5REFJNEI7SUFDNUIsaUNBQTZEO0lBQzdELDZDQUF1RDtJQUN2RCxxQ0FBdUQ7SUFDdkQsK0NBQTZDO0lBQzdDLDJDQUF3QztJQUV4Qyw0Q0FNMkI7SUFJM0IsMkRBYzRCO0lBRTVCLDJDQUF5QztJQUV6QyxNQUFNLGNBQWMsR0FBRyxFQUFFLENBQUM7SUFHMUIsU0FBUyxjQUFjLENBQUMsSUFBZ0IsRUFBRSxXQUE2QztRQUNuRixJQUFHLE9BQU8sSUFBSSxJQUFJLFFBQVE7WUFBRSxPQUFPLFNBQVMsQ0FBQztRQUM3QyxJQUFJLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUMsU0FBUyxDQUFDLENBQUMsT0FBTyxDQUFDLGlCQUFpQixFQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3RFLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBQyxDQUFDLElBQUksRUFBQyxFQUFFLENBQUEsSUFBSSxJQUFJLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUMsQ0FBQyxJQUFJLEVBQUMsRUFBRSxDQUFBLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQztRQUN6RixJQUFHLENBQUMsV0FBVyxJQUFJLElBQUk7WUFBRSxPQUFPLElBQUksQ0FBQztRQUNyQzs7VUFFRTtJQUNOLENBQUM7SUFFRCxNQUFNLFdBQVcsR0FBRyxLQUFLLENBQUMsQ0FBQyxxSkFBcUo7SUFDaEwsZ0lBQWdJO0lBRWhJLE1BQU0sbUJBQW1CLEdBQUcsa0JBQWtCLENBQUM7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LENBQUMsQ0FBQztZQUNsQyxDQUFDLENBQUM7WUFDRixJQUFJLENBQUMsT0FBTyxHQUFDLENBQUMsR0FBRyxFQUFDLEVBQUU7Z0JBQ2hCLE9BQU8sQ0FBQyxHQUFHLENBQUMsMEJBQTBCLEVBQUUsR0FBRyxDQUFDLENBQUE7Z0JBQzVDLE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBQyw0QkFBNEIsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFBO1lBQzNELENBQUMsQ0FBQTtRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELFNBQVMsYUFBYSxDQUFDLEVBQVM7O1FBQzVCLElBQUksUUFBUSxHQUFJLFFBQVEsQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDNUMsTUFBQSxRQUFRLGFBQVIsUUFBUSx1QkFBUixRQUFRLENBQUUsVUFBVSwwQ0FBRSxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUVELE1BQU0sbUJBQW1CLEdBQUcsdUJBQXVCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcclxuaW1wb3J0ICogYXMgUmVhY3RET00gZnJvbSBcInJlYWN0LWRvbVwiO1xyXG5pbXBvcnQgeyAgXHJcbiAgICBSZW5kZXJQcmluY2lwYWwsIFxyXG4gICAgYWRhcHRhclRpcG9WYXJDYXNpbGxlcm8sXHJcbiAgICBJQ09OLFxyXG4gICAgZm9jdXNUb0lkLFxyXG4gICAgc2Nyb2xsVG9Ub3AsXHJcbiAgICBzY3JvbGxUb0JvdHRvbSxcclxuICAgIG1hdGVyaWFsSW9JY29uc1N2Z1BhdGhcclxufSBmcm9tIFwiLi9yZW5kZXItZ2VuZXJhbFwiO1xyXG5pbXBvcnQge0Jsb3F1ZSwgQm90b25Gb3JtdWxhcmlvLCBcclxuICAgIENhc2lsbGVyb0Jhc2UsIENhc29TdGF0ZSwgQ29uanVudG9QcmVndW50YXMsIENvbnNpc3RlbmNpYSwgXHJcbiAgICBFc3RhZG9DYXJnYSwgRmlsdHJvLCBGb3JQaywgRm9yUGtSYWl6LCBGb3JtdWxhcmlvLCBcclxuICAgIElkRm9ybXVsYXJpbywgSWRQcmVndW50YSwgSWRUYXJlYSwgSWRWYXJpYWJsZSwgSW5mb0Zvcm11bGFyaW8sXHJcbiAgICBNb2RvRGVzcGxpZWd1ZSxcclxuICAgIE9wY2lvbiwgT3BjaW9uTXVsdGlwbGUsIFBsYWluRm9yUGssIFxyXG4gICAgUHJlZ3VudGEsIFByZWd1bnRhQ29uT3BjaW9uZXMsIFByZWd1bnRhU2ltcGxlLCBcclxuICAgIFJlc3B1ZXN0YXMsIFJlc3B1ZXN0YUxhc1VBLCBSZXNwdWVzdGFzUmFpeiwgVmFsb3IsIFRFTSwgSWRDYXJnYSwgQ2FyZ2EsIElkRmluLCBJZFVuaWRhZEFuYWxpc2lzLFxyXG4gICAgTW9kb0FsbWFjZW5hbWllbnRvLFxyXG4gICAgdG9QbGFpbkZvclBrLFxyXG4gICAgSWRDYXNpbGxlcm8sXHJcbiAgICBQcmVndW50YUNvblNpTm8sXHJcbiAgICBUZXh0bywgRXN0cnVjdHVyYSwgSW5mb3JtYWNpb25IZHIsIERhdG9zSGRyVWFQcGFsLCBDb25maWd1cmFjaW9uU29ydGVvRm9ybXVsYXJpbywgUmVzdW1lbkVzdGFkbywgRGF0b3NCeVBhc3NQZXJzaXN0aWJsZXMsIElkT3BlcmF0aXZvLCBJZEVuYywgTGlicmUsIFVuaWRhZEFuYWxpc2lzLFxyXG4gICAgaXRlcmF0b3IsIGVtcHR5XHJcbn0gZnJvbSBcIi4vdGlwb3NcIjtcclxuaW1wb3J0eyBcclxuICAgIGFjY2lvbl9hYnJpcl9mb3JtdWxhcmlvLFxyXG4gICAgYWNjaW9uX2JvcnJhcl9mb3JtdWxhcmlvLFxyXG4gICAgY2FsY3VsYXJBY3R1YWxCRixcclxuICAgIGNhbGN1bGFyRGlzYWJsZWRCRixcclxuICAgIGNhbGN1bGFyUGVybWl0ZUJvcnJhckJGLFxyXG4gICAgY2FsY3VsYXJSZXN1bWVuVml2aWVuZGEsXHJcbiAgICBnZXREYXRvc0J5UGFzcyxcclxuICAgIGdldEZvcm11bGFyaW9zRm9ySWRWaXZpZW5kYSxcclxuICAgIGdldE1haW5Gb3JtRm9yVml2aWVuZGEsXHJcbiAgICBpbnRlbnRhckJhY2t1cCxcclxuICAgIHNldENhbGN1bGFyVmFyaWFibGVzXHJcbn0gZnJvbSBcIi4vYnlwYXNzLWZvcm11bGFyaW9cIlxyXG5pbXBvcnQgeyBkbVRyYWVyRGF0b3NGb3JtdWxhcmlvLCBkaXNwYXRjaGVycywgXHJcbiAgICBnb3RvU2luY3Jvbml6YXIsXHJcbiAgICBnZXRDYWNoZVZlcnNpb24sXHJcbiAgICBnb3RvQ29uc2lzdGlyLFxyXG59IGZyb20gXCIuL3JlZHV4LWZvcm11bGFyaW9cIjtcclxuaW1wb3J0IHsgdXNlU3RhdGUsIHVzZUVmZmVjdCwgdXNlTGF5b3V0RWZmZWN0IH0gZnJvbSBcInJlYWN0XCI7XHJcbmltcG9ydCB7IHVzZVNlbGVjdG9yLCB1c2VEaXNwYXRjaCB9IGZyb20gXCJyZWFjdC1yZWR1eFwiOyBcclxuaW1wb3J0IHsgc3RyaWN0IGFzIGxpa2VBciwgYmVpbmdBcnJheSB9IGZyb20gXCJsaWtlLWFyXCI7XHJcbmltcG9ydCB7c2xlZXAsIGNvYWxlc2NlfSBmcm9tIFwiYmVzdC1nbG9iYWxzXCI7XHJcbmltcG9ydCB7IHVuZXhwZWN0ZWQgfSBmcm9tIFwiY2FzdC1lcnJvclwiO1xyXG5cclxuaW1wb3J0IHtcclxuICAgIEFwcEJhciwgQnV0dG9uR3JvdXAsIENpcmN1bGFyUHJvZ3Jlc3MsIENoZWNrYm94LCBcclxuICAgIERpYWxvZywgRGlhbG9nQWN0aW9ucywgRGlhbG9nQ29udGVudCwgRGlhbG9nQ29udGVudFRleHQsIFxyXG4gICAgRGlhbG9nVGl0bGUsIERpdmlkZXIsIEZhYiwgSWNvbkJ1dHRvbixcclxuICAgIE1lbnUsIE1lbnVJdGVtLCBQYXBlciwgUG9wb3ZlcixcclxuICAgIFRhYmxlLCBUYWJsZUJvZHksIFRhYmxlQ2VsbCwgVGFibGVIZWFkLCBUYWJsZVJvdywgVG9vbGJhclxyXG59IGZyb20gXCJAbWF0ZXJpYWwtdWkvY29yZVwiO1xyXG5pbXBvcnQgeyBFc3RhZG9WYXJpYWJsZSwgRm9ybVN0cnVjdHVyZVN0YXRlIH0gZnJvbSBcInJvdy12YWxpZGF0b3JcIjtcclxuaW1wb3J0IHsgQ1NTUHJvcGVydGllcyB9IGZyb20gXCJAbWF0ZXJpYWwtdWkvY29yZS9zdHlsZXMvd2l0aFN0eWxlc1wiO1xyXG5cclxuaW1wb3J0IHsgXHJcbiAgICByZWdpc3RyYXJFbGVtZW50bywgc2V0QXR0ckRpc3RpbnRvLCBzZXRWYWxvckRpc3RpbnRvLCBkaXNwYXRjaEJ5UGFzcywgXHJcbiAgICBnZXREaXJ0eSwgZ2V0RmVlZGJhY2tSb3dWYWxpZGF0b3IsXHJcbiAgICBnZXRGdW5jaW9uSGFiaWxpdGFyLCBcclxuICAgIGdldEVzdHJ1Y3R1cmEsIFxyXG4gICAgZGVmT3BlcmF0aXZvLFxyXG4gICAgdm9sY2Fkb0luaWNpYWxFbGVtZW50b3NSZWdpc3RyYWRvcyxcclxuICAgIG51bWJlck9yU3RyaW5nSW5jSWZBcnJheSwgXHJcbiAgICBjYWxjdWxhckVsZW1lbnRvRW5mb2NhZG8sXHJcbiAgICBhY2Npb25fcmVnaXN0cmFyX3Jlc3B1ZXN0YSxcclxuICAgIGFjY2lvbl9pZF9wcmVndW50YSxcclxuICAgIGFjY2lvbl9hZ3JlZ2FyX2Zvcm11bGFyaW8sXHJcbiAgICBOT19DQU1CSUFSX19WRVJJRklDQVJfU0lfRVNfTkVDRVNBUklPLFxyXG4gICAgTk9fQ0FNQklBUl9fU09MT19UUkFFUl9TVEFUVVNcclxufSBmcm9tIFwiLi9ieXBhc3MtZm9ybXVsYXJpb1wiXHJcblxyXG5pbXBvcnQge2h0bWwsIEh0bWxUYWd9IGZyb20gXCJqcy10by1odG1sXCI7XHJcblxyXG5jb25zdCBERUxBWV9TQ1JPTExfMyA9IDUwO1xyXG5cclxuZnVuY3Rpb24gYnJlYWtlYWJsZVRleHQodGV4dDpzdHJpbmd8bnVsbCk6c3RyaW5nfHVuZGVmaW5lZDtcclxuZnVuY3Rpb24gYnJlYWtlYWJsZVRleHQodGV4dDpzdHJpbmd8bnVsbCwgZGljY2lvbmFyaW8/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+XHJcbiAgICA6bnVsbFxyXG59XHJcblxyXG5mdW5jdGlvbiBPcGNpb25EZXNwbGllZ3VlKHByb3BzOntjYXNpbGxlcm86T3BjaW9uLCB2YWxvck9wY2lvbjpudW1iZXIsIHZhcmlhYmxlOklkVmFyaWFibGUsIGZvclBrOkZvclBrLCBsZWVyOmJvb2xlYW4sIGNvbkJvdG9uQm9ycmFyOmJvb2xlYW59KXtcclxuICAgIGNvbnN0IHtjYXNpbGxlcm99ID0gcHJvcHM7XHJcbiAgICB2YXIgZGlzcGF0Y2ggPSB1c2VEaXNwYXRjaCgpO1xyXG4gICAgdmFyIHNhbHRvQXV0b21hdGljbyA9IHVzZVNlbGVjdG9yKChzdGF0ZTpDYXNvU3RhdGUpPT5zdGF0ZS5vcGNpb25lcy5zYWx0b0F1dG9tYXRpY28pO1xyXG4gICAgdmFyIGhhbmRsZUNsaWNrOlJlYWN0Lk1vdXNlRXZlbnRIYW5kbGVyPEhUTUxCdXR0b25FbGVtZW50PiA9IGFzeW5jIChldmVudCk9PntcclxuICAgICAgICB2YXIgY29udGFpbmVyID0gc3ViaXJIYXN0YShldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQsIGVsZW1lbnRvPT5lbGVtZW50by5jbGFzc0xpc3QuY29udGFpbnMoJ3ByZWd1bnRhJykgfHwgZWxlbWVudG8uY2xhc3NMaXN0LmNvbnRhaW5zKCdtdWx0aXBsZScpKSB8fCBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWFpbl9sYXlvdXQnKSE7XHJcbiAgICAgICAgdmFyIHRpZW5lID0gY29udGFpbmVyLmdldEF0dHJpYnV0ZSgnZXN0b3ktYm9ycmFuZG8nKTtcclxuICAgICAgICBjb250YWluZXIuc2V0QXR0cmlidXRlKCdlc3RveS1ib3JyYW5kbycsJ05PJyk7XHJcbiAgICAgICAgaWYoZWxlbWVudG9Db25TZW5uaWFsQm9ycmFyKXtcclxuICAgICAgICAgICAgZWxlbWVudG9Db25TZW5uaWFsQm9ycmFyLnNldEF0dHJpYnV0ZSgnZXN0b3ktYm9ycmFuZG8nLCdOTycpO1xyXG4gICAgICAgICAgICBlbGVtZW50b0NvblNlbm5pYWxCb3JyYXIgPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIge3JlY2VudE1vZGlmaWVkLCBzaWd1aWVudGVWYXJpYWJsZX0gPSBkaXNwYXRjaEJ5UGFzcyhhY2Npb25fcmVnaXN0cmFyX3Jlc3B1ZXN0YSwge3Jlc3B1ZXN0YTpwcm9wcy52YWxvck9wY2lvbiwgdmFyaWFibGU6cHJvcHMudmFyaWFibGUsIGZvclBrOnByb3BzLmZvclBrfSk7XHJcbiAgICAgICAgaWYoIXJlY2VudE1vZGlmaWVkKXtcclxuICAgICAgICAgICAgY29udGFpbmVyLnNldEF0dHJpYnV0ZSgnZXN0b3ktYm9ycmFuZG8nLHRpZW5lPT0nU0knPydOTyc6J1NJJyk7XHJcbiAgICAgICAgICAgIGlmKHRpZW5lIT0nU0knKXtcclxuICAgICAgICAgICAgICAgIGVsZW1lbnRvQ29uU2VubmlhbEJvcnJhcj1jb250YWluZXI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgaWYoc2lndWllbnRlVmFyaWFibGUgJiYgc2FsdG9BdXRvbWF0aWNvKXtcclxuICAgICAgICAgICAgICAgIHZhciBib3RvblN0eWxlID0gKGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudCk/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+Om51bGx9XHJcbiAgICAgICAgICAgICAgICB7ICAgLy9AdHMtaWdub3JlIGFsdHVub3MgY2FzaWxsZXJvcyBubyB0aWVuZW4gZXNwZWNpYWwsIG5vIGltcG9ydGEsIGVzIHNvbG8gcGFyYSBwb25lciBsb3MgbWV0YWRhdG9zXHJcbiAgICAgICAgICAgICAgICAgICAgY2FzaWxsZXJvLmVzcGVjaWFsPy5hdXRvaW5nPzxzcGFuIGVsLW1ldGFkYXRvPVwiZXhwcmVzaW9uX2F1dG9pbmdcIj5hdXRvaW5nOiB7Y2FzaWxsZXJvLmVzcGVjaWFsPy5hdXRvaW5nfTwvc3Bhbj46bnVsbFxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG59XHJcblxyXG5mdW5jdGlvbiBEZXNwbGVnYXJDb25maXJtYXJCb3JyYXJSZXNwdWVzdGEocHJvcHM6e2ZvclBrOkZvclBrLCB2YXJpYWJsZUJvcnJhcjpJZFZhcmlhYmxlfSl7XHJcbiAgICB2YXIgW29wZW4sIHNldE9wZW5dID0gdXNlU3RhdGUoISFwcm9wcy52YXJpYWJsZUJvcnJhcilcclxuICAgIHZhciBkaXNwYXRjaCA9IHVzZURpc3BhdGNoKCk7XHJcbiAgICBjb25zdCBoYW5kbGVDbG9zZSA9ICgpID0+IHtcclxuICAgICAgICBkaXNwYXRjaChkaXNwYXRjaGVycy5DT05GSVJNQVJfQk9SUkFSX1JFU1BVRVNUQSh7Zm9yUGs6cHJvcHMuZm9yUGssIHZhcmlhYmxlOm51bGx9KSk7XHJcbiAgICAgICAgc2V0T3BlbihmYWxzZSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gPFBvcG92ZXJcclxuICAgICAgICAgICAgaWQ9e1wicG9wb3Zlci1jb25maXJtYXJcIn1cclxuICAgICAgICAgICAgb3Blbj17b3Blbn1cclxuICAgICAgICAgICAgb25DbG9zZT17aGFuZGxlQ2xvc2V9XHJcbiAgICAgICAgICAgIGFuY2hvck9yaWdpbj17e1xyXG4gICAgICAgICAgICAgICAgdmVydGljYWw6ICdib3R0b20nLFxyXG4gICAgICAgICAgICAgICAgaG9yaXpvbnRhbDogJ2NlbnRlcicsXHJcbiAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgIHRyYW5zZm9ybU9yaWdpbj17e1xyXG4gICAgICAgICAgICAgICAgdmVydGljYWw6ICd0b3AnLFxyXG4gICAgICAgICAgICAgICAgaG9yaXpvbnRhbDogJ2xlZnQnLFxyXG4gICAgICAgICAgICB9fVxyXG4gICAgICAgID4gICBcclxuICAgICAgICAgICAgPFR5cG9ncmFwaHk+TGEgcHJlZ3VudGEgdGllbmUgcmVnaXN0cmFkYSB1bmEgcmVzcHVlc3RhIHF1ZSBubyBmdWUgZGV0ZWN0YWRhIGNvbW8gZXJyw7NuZWE8L1R5cG9ncmFwaHk+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiY29uZmlybWEtYm90b25lc1wiPlxyXG4gICAgICAgICAgICAgICAgPEJ1dHRvbiBjb2xvcj1cInNlY29uZGFyeVwiIHZhcmlhbnQ9XCJvdXRsaW5lZFwiIG9uQ2xpY2s9eygpPT57XHJcbiAgICAgICAgICAgICAgICAgICAgaWYocHJvcHMudmFyaWFibGVCb3JyYXIpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNwYXRjaEJ5UGFzcyhhY2Npb25fcmVnaXN0cmFyX3Jlc3B1ZXN0YSwge2ZvclBrOnByb3BzLmZvclBrLCB2YXJpYWJsZTpwcm9wcy52YXJpYWJsZUJvcnJhciwgcmVzcHVlc3RhOm51bGx9KVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBoYW5kbGVDbG9zZSgpO1xyXG4gICAgICAgICAgICAgICAgfX0+Ym9ycmFyIHJlc3B1ZXN0YTwvQnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPEJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiB2YXJpYW50PVwib3V0bGluZWRcIiBvbkNsaWNrPXtoYW5kbGVDbG9zZX0+dm9sdmVyIHNpbiBib3JyYXI8L0J1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9Qb3BvdmVyPjtcclxufVxyXG5cclxuZnVuY3Rpb24gY2FsY3VsYXJOdWVzdHJhTG9uZ2l0dWQobG9uZ2l0dWQ6c3RyaW5nIHxudWxsKXtcclxuICAgIHJldHVybiBsb25naXR1ZDtcclxufVxyXG5cclxuZnVuY3Rpb24gZW5mb2NhckVsZW1lbnRvRGVWYXJpYWJsZShzaWd1aWVudGVWYXJpYWJsZTpJZFZhcmlhYmxlfElkRmluKXtcclxuICAgIGRlYmVTYWx0YXIgPSBmYWxzZTtcclxuICAgIHZhciB7dG9wLCBlbmZvY2FkbywgZWxlbWVudG9JbnB1dFZhcmlhYmxlfSA9IGNhbGN1bGFyRWxlbWVudG9FbmZvY2FkbyhzaWd1aWVudGVWYXJpYWJsZSk7XHJcbiAgICBpZih0b3AgIT0gbnVsbCAmJiB0b3A+MCAmJiAoIWVuZm9jYWRvIHx8IFwic2FsdGEgc2llbXByZVwiKSl7XHJcbiAgICAgICAgd2luZG93LnNjcm9sbFRvKHt0b3AsIGxlZnQ6MCwgYmVoYXZpb3I6J3Ntb290aCd9KTtcclxuICAgIH1cclxuICAgIGVsZW1lbnRvSW5wdXRWYXJpYWJsZT8uZm9jdXMoKTtcclxufVxyXG5cclxuZnVuY3Rpb24gQ2FtcG8ocHJvcHM6e2Rpc2FibGVkOmJvb2xlYW4sIHByZWd1bnRhOlByZWd1bnRhU2ltcGxlfFByZWd1bnRhQ29uT3BjaW9uZXN8UHJlZ3VudGFDb25TaU5vfE9wY2lvbk11bHRpcGxlLCBmb3JQazpGb3JQaywgbWluaT86Ym9vbGVhbiwgaGlkZGVuPzpib29sZWFufCdxdWl0YXInfSl7XHJcbiAgICB2YXIge3ByZWd1bnRhLCBkaXNhYmxlZCwgbWluaSB9ID0gcHJvcHM7XHJcbiAgICB2YXIge3NhbHRvQXV0b21hdGljbywgY29uQ2FtcG9PcGNpb25lc30gPSB1c2VTZWxlY3Rvcigoc3RhdGU6Q2Fzb1N0YXRlKT0+c3RhdGUub3BjaW9uZXMpO1xyXG4gICAgY29uc3QgbG9uZ2l0dWQgPSBtaW5pID8gcHJlZ3VudGEuY2FzaWxsZXJvcy5yZWR1Y2UoKGFjdW0sIG8pPT5NYXRoLm1heChvLmNhc2lsbGVyby50b1N0cmluZygpLmxlbmd0aCwgYWN1bSksIDApIDogXHJcbiAgICAgICAgLy8gQHRzLWlnbm9yZSBtaW5pIGVzIHBhcmEgbG9zIG90cm9zXHJcbiAgICAgICAgcHJlZ3VudGEubG9uZ2l0dWQ7XHJcbiAgICAvLyB2YXIgW3ZhbG9yLCBzZXRWYWxvcl0gPSB1c2VTdGF0ZShwcm9wcy52YWxvcik7XHJcbiAgICB2YXIgW2VkaXRhbmRvLCBzZXRFZGl0YW5kb10gPSB1c2VTdGF0ZShmYWxzZSk7XHJcbiAgICAvLyB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgLy8gICAgIHNldFZhbG9yKHByb3BzLnZhbG9yKVxyXG4gICAgLy8gfSwgW3Byb3BzLnZhbG9yXSk7XHJcbiAgICBjb25zdCBpbnB1dFByb3BzID0ge1xyXG4gICAgICAgIG1heExlbmd0aDogbG9uZ2l0dWQsXHJcbiAgICB9O1xyXG4gICAgY29uc3Qgb25DaGFuZ2U9KG51ZXZvVmFsb3I6VmFsb3J8dHlwZW9mIE5PX0NBTUJJQVJfX1ZFUklGSUNBUl9TSV9FU19ORUNFU0FSSU8pPT57XHJcbiAgICAgICAgdmFyIHtzaWd1aWVudGVWYXJpYWJsZX0gPSBkaXNwYXRjaEJ5UGFzcyhhY2Npb25fcmVnaXN0cmFyX3Jlc3B1ZXN0YSwge2ZvclBrOnByb3BzLmZvclBrLCB2YXJpYWJsZTpwcmVndW50YS52YXJfbmFtZSwgcmVzcHVlc3RhOm51ZXZvVmFsb3J9KTtcclxuICAgICAgICBpZihzaWd1aWVudGVWYXJpYWJsZSAmJiBkZWJlU2FsdGFyKXtcclxuICAgICAgICAgICAgLy9AdHMtaWdub3JlIGFsZ3Vub3MgY2FzaWxsZXJvcyB0aWVuZW4gZXNwZWNpYWwgeSBvdHJvcyBub1xyXG4gICAgICAgICAgICAocHJlZ3VudGEuZXNwZWNpYWw/Lm5vU2Nyb2xsID09IHRydWUpP251bGw6ZW5mb2NhckVsZW1lbnRvRGVWYXJpYWJsZShwcmVndW50YS5lc3BlY2lhbD8uc2Nyb2xsVG8gPz8gc2lndWllbnRlVmFyaWFibGUpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICB2YXIgbnVlc3RyYUxvbmdpdHVkID0gY2FsY3VsYXJOdWVzdHJhTG9uZ2l0dWQobG9uZ2l0dWQpXHJcbiAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9XCJjYW1wb1wiIG51ZXN0cmEtbG9uZ2l0dWQ9e251ZXN0cmFMb25naXR1ZH0gc3R5bGU9e3Byb3BzLmhpZGRlbj09J3F1aXRhcic/e2Rpc3BsYXk6J25vbmUnfTpwcm9wcy5oaWRkZW4/e3Zpc2liaWxpdHk6J2hpZGRlbid9OnVuZGVmaW5lZH0+XHJcbiAgICAgICAge21pbmk/bnVsbDo8Qm90b25Cb3JyYXJcclxuICAgICAgICAgICAgaWQ9e2Bib3JyYXItYWJpZXJ0YS0ke3ByZWd1bnRhLnZhcl9uYW1lfWB9XHJcbiAgICAgICAgICAgIHZhcmlhYmxlPXtwcmVndW50YS52YXJfbmFtZX1cclxuICAgICAgICAgICAgZm9yUGs9e3Byb3BzLmZvclBrfVxyXG4gICAgICAgIC8+fVxyXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiaW5wdXQtY2FtcG9cIj5cclxuICAgICAgICAgICAgPFRleHRGaWVsZCBcclxuICAgICAgICAgICAgICAgIGlkPXtgdmFyLSR7cHJlZ3VudGEudmFyX25hbWV9YH1cclxuICAgICAgICAgICAgICAgIGRpc2FibGVkPXtkaXNhYmxlZH1cclxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInZhcmlhYmxlXCIgXHJcbiAgICAgICAgICAgICAgICAvL3Zhci1sZW5ndGg9e3ByZWd1bnRhLmxvbmdpdHVkfSBcclxuICAgICAgICAgICAgICAgIGZ1bGxXaWR0aD17dHJ1ZX1cclxuICAgICAgICAgICAgICAgIGlucHV0UHJvcHM9e2lucHV0UHJvcHN9XHJcbiAgICAgICAgICAgICAgICB0eXBlPXtwcmVndW50YS5kZXNwbGllZ3VlVGlwb0lucHV0Pz9hZGFwdGFyVGlwb1ZhckNhc2lsbGVybyhwcmVndW50YS50aXBvdmFyKX1cclxuICAgICAgICAgICAgICAgIG9uS2V5RG93bj17KGV2ZW50OlJlYWN0LktleWJvYXJkRXZlbnQpPT57XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGVzRW50ZXIgPSAoZXZlbnQua2V5ID09ICdFbnRlcicgfHwgZXZlbnQua2V5Q29kZSA9PSAxMylcclxuICAgICAgICAgICAgICAgICAgICBkZWJlU2FsdGFyID0gZXNFbnRlciAmJiAoc2FsdG9BdXRvbWF0aWNvIHx8IGNvbkNhbXBvT3BjaW9uZXMpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKGVzRW50ZXIpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZihldmVudC50YXJnZXQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudC50YXJnZXQuYmx1cigpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgICAgIG9uRm9jdXM9eyhfZXZlbnQpPT5zZXRFZGl0YW5kbyh0cnVlKX1cclxuICAgICAgICAgICAgICAgIG9uQmx1cj17KGV2ZW50LCB2YWxvcik9PntcclxuICAgICAgICAgICAgICAgICAgICBpZihldmVudD8ucmVsYXRlZFRhcmdldD8uZ2V0QXR0cmlidXRlKCdib3Rvbi1jb25maXJtYXInKSl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlYmVTYWx0YXIgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZSh2YWxvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgc2V0RWRpdGFuZG8oZmFsc2UpXHJcbiAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAvPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIHtkaXNhYmxlZCB8fCBtaW5pP251bGw6XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYm90b24tY29uZmlybWFyLWNhbXBvXCI+XHJcbiAgICAgICAgICAgICAgICA8QnV0dG9uIHZhcmlhbnQ9e2VkaXRhbmRvP1wiY29udGFpbmVkXCI6J291dGxpbmVkJ30gc2l6ZT1cInNtYWxsXCIgY29sb3I9e2VkaXRhbmRvPydwcmltYXJ5JzonZGVmYXVsdCd9XHJcbiAgICAgICAgICAgICAgICAgICAgYm90b24tY29uZmlybWFyPXtwcmVndW50YS52YXJfbmFtZX1cclxuICAgICAgICAgICAgICAgICAgICB0YWJJbmRleD17LTF9XHJcbiAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCk9PntcclxuICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2UoTk9fQ0FNQklBUl9fVkVSSUZJQ0FSX1NJX0VTX05FQ0VTQVJJTyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEVkaXRhbmRvKGZhbHNlKVxyXG4gICAgICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgICA+PElDT04uQ2hlY2svPjwvQnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICB9XHJcbiAgICA8L2Rpdj5cclxufVxyXG5cclxuaW50ZXJmYWNlIEljYXNpbGxlcm9Db25PcGNpb25lc3tcclxuICAgIHZhcl9uYW1lOklkVmFyaWFibGUsXHJcbiAgICBjYXNpbGxlcm9zOk9wY2lvbltdXHJcbn1cclxuXHJcbmZ1bmN0aW9uIE9wY2lvbmVzRGVzcGxpZWd1ZShcclxuICAgIHtjYXNpbGxlcm9Db25PcGNpb25lcywgZm9yUGssICBsZWVyLCBkZXNwbGllZ3VlQ29udGVuaWRvfTpcclxuICAgIHtjYXNpbGxlcm9Db25PcGNpb25lczpJY2FzaWxsZXJvQ29uT3BjaW9uZXMsIGZvclBrOkZvclBrLCBsZWVyOmJvb2xlYW4sIGRlc3BsaWVndWVDb250ZW5pZG86J3ZlcnRpY2FsJ3wnaG9yaXpvbnRhbCd9XHJcbil7XHJcbiAgICBjb25zdCBkZXNwbGVnYXJPdHJvcyA9IChvcGNpb246T3BjaW9uLCBzb2xvUGFyYURlc3BsaWVndWU6J3ZlcnRpY2FsJ3wnaG9yaXpvbnRhbCd8bnVsbCkgPT4gb3BjaW9uLmNhc2lsbGVyb3MubWFwKChzdWJQcmVndW50YTpQcmVndW50YSk9PihcclxuICAgICAgICBzb2xvUGFyYURlc3BsaWVndWUgPT0gbnVsbCB8fCBzb2xvUGFyYURlc3BsaWVndWUgPT0gc3ViUHJlZ3VudGEuZGVzcGxpZWd1ZUNvbnRlbmlkbyA/XHJcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJvdHJvcy1lc3BlY2lmaWNhclwiIGtleT17c3ViUHJlZ3VudGEuaWRfY2FzaWxsZXJvfT5cclxuICAgICAgICAgICAgPFByZWd1bnRhRGVzcGxpZWd1ZSBcclxuICAgICAgICAgICAgICAgIHByZWd1bnRhPXtzdWJQcmVndW50YX0gXHJcbiAgICAgICAgICAgICAgICBmb3JQaz17Zm9yUGt9IFxyXG4gICAgICAgICAgICAgICAgZGVzcGxpZWd1ZUVuY2FiZXphZG89J3N1cGVyaW9yJ1xyXG4gICAgICAgICAgICAvPlxyXG4gICAgICAgIDwvZGl2PjpudWxsXHJcbiAgICApKVxyXG4gICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPVwiY29udGVuaWRvXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwib3BjaW9uZXNcIiBkZXNwbGllZ3VlLWNvbnRlbmlkbz17ZGVzcGxpZWd1ZUNvbnRlbmlkbz8/J3ZlcnRpY2FsJ30+XHJcbiAgICAgICAgICAgIHtjYXNpbGxlcm9Db25PcGNpb25lcy5jYXNpbGxlcm9zLm1hcCgob3BjaW9uOk9wY2lvbiwgaTpudW1iZXIpPT5cclxuICAgICAgICAgICAgICAgIDxHcmlkIGtleT17b3BjaW9uLmlkX2Nhc2lsbGVyb30gaXRlbVxyXG4gICAgICAgICAgICAgICAgICAgIG9jdWx0YXItc2FsdGVhZGE9e29wY2lvbi5kZXNwbGllZ3VlT2N1bHRhPyhvcGNpb24uZXhwcmVzaW9uX2hhYmlsaXRhcl9qcz8nSU5IQUJJTElUQVInOidTSScpOidOTyd9XHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgPE9wY2lvbkRlc3BsaWVndWUgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2lsbGVybz17b3BjaW9ufSBcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGU9e2Nhc2lsbGVyb0Nvbk9wY2lvbmVzLnZhcl9uYW1lfSBcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsb3JPcGNpb249e29wY2lvbi5jYXNpbGxlcm99XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvclBrPXtmb3JQa30gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxlZXI9e2xlZXJ9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbkJvdG9uQm9ycmFyPXtpPT0wIHx8IGRlc3BsaWVndWVDb250ZW5pZG8hPSdob3Jpem9udGFsJ31cclxuICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgIHtkZXNwbGllZ3VlQ29udGVuaWRvPT0naG9yaXpvbnRhbCc/bnVsbDpkZXNwbGVnYXJPdHJvcyhvcGNpb24sbnVsbCl9XHJcbiAgICAgICAgICAgICAgICA8L0dyaWQ+XHJcbiAgICAgICAgICAgICl9XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAge2Rlc3BsaWVndWVDb250ZW5pZG89PSdob3Jpem9udGFsJz9jYXNpbGxlcm9Db25PcGNpb25lcy5jYXNpbGxlcm9zLm1hcCgob3BjaW9uOk9wY2lvbik9PlxyXG4gICAgICAgICAgICBkZXNwbGVnYXJPdHJvcyhvcGNpb24sbnVsbClcclxuICAgICAgICApOm51bGx9XHJcbiAgICA8L2Rpdj5cclxufVxyXG5cclxuY29uc3Qgbm9tYnJlQ2FzaWxsZXJvPXtcclxuICAgIEY6ICdmb3JtdWxhcmlvJyxcclxuICAgIEI6ICdibG9xdWUnLFxyXG4gICAgUDogJ3ByZWd1bnRhJyxcclxuICAgIENQOiAnY29uanVudG9wcmVndW50YXMnLFxyXG4gICAgTzogJ29wY2lvbicsXHJcbiAgICBPTTogJ211bHRpcGxlJyxcclxuICAgIEZJTFRSTzogJ2ZpbHRybycsXHJcbiAgICBDT05TOiAnY29uc2lzdGVuY2lhJyxcclxuICAgIEJGOiAnYm90b25mb3JtdWxhcmlvJyxcclxuICAgIFRFWFRPOiAnYWNsYXJhY2lvbnN1cGVyaW9yJyxcclxufVxyXG5cclxuZnVuY3Rpb24gRGVzcGxlZ2FyQ2FzaWxsZXJvKHByb3BzOntcclxuICAgIGNhc2lsbGVybzpQcmVndW50YXxCbG9xdWV8RmlsdHJvfENvbmp1bnRvUHJlZ3VudGFzfEJvdG9uRm9ybXVsYXJpb3xDb25zaXN0ZW5jaWF8T3BjaW9uTXVsdGlwbGV8VGV4dG8sXHJcbiAgICBpZD86c3RyaW5nLFxyXG4gICAgc3R5bGU/OlJlYWN0LkNTU1Byb3BlcnRpZXMsXHJcbiAgICBkZXNwbGllZ3VlRW5jYWJlemFkbz86J2xhdGVyYWwnfCdzdXBlcmlvcidcclxuICAgIGNoaWxkcmVuOlJlYWN0LlJlYWN0Tm9kZXxSZWFjdC5SZWFjdE5vZGVbXSxcclxuICAgIFwib2N1bHRhci1zYWx0ZWFkYVwiPzonU0knfCdOTyd8J0lOSEFCSUxJVEFSJ3x1bmRlZmluZWRcclxufSl7XHJcbiAgICByZXR1cm4gPGRpdiBcclxuICAgICAgICBrZXk9e2Ake3Byb3BzLmNhc2lsbGVyby50aXBvY30tJHtwcm9wcy5pZHx8cHJvcHMuY2FzaWxsZXJvLmlkX2Nhc2lsbGVyb31gfVxyXG4gICAgICAgIGNsYXNzTmFtZT17YGNhc2lsbGVybyAke25vbWJyZUNhc2lsbGVyb1twcm9wcy5jYXNpbGxlcm8udGlwb2NdfWB9XHJcbiAgICAgICAgaWQ9e3Byb3BzLmlkfVxyXG4gICAgICAgIHN0eWxlPXtwcm9wcy5zdHlsZX1cclxuICAgICAgICBkZXNwbGllZ3VlLWVuY2FiZXphZG89e3Byb3BzLmNhc2lsbGVyby5kZXNwbGllZ3VlRW5jYWJlemFkbz8/cHJvcHMuZGVzcGxpZWd1ZUVuY2FiZXphZG8/PydzdXBlcmlvcid9XHJcbiAgICAgICAgb2N1bHRhci1zYWx0ZWFkYT17cHJvcHNbXCJvY3VsdGFyLXNhbHRlYWRhXCJdfVxyXG4gICAgPntwcm9wcy5jaGlsZHJlbn08L2Rpdj5cclxufVxyXG5cclxuZnVuY3Rpb24gUHJlZ3VudGFEZXNwbGllZ3VlKHByb3BzOntcclxuICAgIHByZWd1bnRhOlByZWd1bnRhLCBcclxuICAgIGZvclBrOkZvclBrLCBcclxuICAgIGRlc3BsaWVndWVFbmNhYmV6YWRvOidsYXRlcmFsJ3wnc3VwZXJpb3InXHJcbn0pe1xyXG4gICAgdmFyIHtwcmVndW50YX0gPSBwcm9wcztcclxuICAgIHZhciBkaXNwYXRjaD11c2VEaXNwYXRjaCgpO1xyXG4gICAgdmFyIGVzdGFkbzpFc3RhZG9WYXJpYWJsZTtcclxuICAgIHZhciBpZCA9IGBwcmVndW50YS0ke3ByZWd1bnRhLmlkX2Nhc2lsbGVyb31gXHJcbiAgICByZWdpc3RyYXJFbGVtZW50byh7XHJcbiAgICAgICAgaWQsIFxyXG4gICAgICAgIGRpcmVjdDp0cnVlLCBcclxuICAgICAgICBmdW46IHJlZ2lzdHJhZG9yRGVWYXJpYWJsZShwcmVndW50YSlcclxuICAgIH0pXHJcbiAgICByZXR1cm4gPERlc3BsZWdhckNhc2lsbGVyb1xyXG4gICAgICAgIGlkPXtpZH1cclxuICAgICAgICBjYXNpbGxlcm89e3ByZWd1bnRhfVxyXG4gICAgICAgIG51ZXN0cm8tdGlwb3Zhcj17cHJlZ3VudGEudGlwb3Zhcnx8XCJtdWx0aXBsZVwifSBcclxuICAgICAgICBvY3VsdGFyLXNhbHRlYWRhPXtwcmVndW50YS5kZXNwbGllZ3VlT2N1bHRhPyhwcmVndW50YS5leHByZXNpb25faGFiaWxpdGFyX2pzPydJTkhBQklMSVRBUic6J1NJJyk6J05PJ31cclxuICAgICAgICBkZXNwbGllZ3VlRW5jYWJlemFkbz17cHJvcHMuZGVzcGxpZWd1ZUVuY2FiZXphZG99XHJcbiAgICA+XHJcbiAgICAgICAgPEVuY2FiZXphZG9EZXNwbGllZ3VlIFxyXG4gICAgICAgICAgICBjYXNpbGxlcm89e3ByZWd1bnRhfSBcclxuICAgICAgICAgICAgbGVlcj17cHJlZ3VudGEubGVlciE9PWZhbHNlfSAgXHJcbiAgICAgICAgICAgIGZvclBrPXtwcm9wcy5mb3JQa31cclxuICAgICAgICAvPlxyXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiY29udGVuaWRvXCI+e1xyXG4gICAgICAgICAgICBwcmVndW50YS50aXBvdmFyPT1cInNpX25vXCI/PEdyaWQgY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPFNpTm9EZXNwbGllZ3VlIFxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2lsbGVyb0Nvbk9wY2lvbmVzPXtwcmVndW50YX0gXHJcbiAgICAgICAgICAgICAgICAgICAgZm9yUGs9e3Byb3BzLmZvclBrfSBcclxuICAgICAgICAgICAgICAgICAgICBkZXNwbGllZ3VlQ29udGVuaWRvPXtwcm9wcy5wcmVndW50YS5kZXNwbGllZ3VlQ29udGVuaWRvPz8ndmVydGljYWwnfVxyXG4gICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgPC9HcmlkPjpcclxuICAgICAgICAgICAgcHJlZ3VudGEudGlwb3Zhcj09XCJvcGNpb25lc1wiID9cclxuICAgICAgICAgICAgICAgIDxPcGNpb25lc0Rlc3BsaWVndWUgXHJcbiAgICAgICAgICAgICAgICAgICAgY2FzaWxsZXJvQ29uT3BjaW9uZXM9e3ByZWd1bnRhfSBcclxuICAgICAgICAgICAgICAgICAgICBmb3JQaz17cHJvcHMuZm9yUGt9IFxyXG4gICAgICAgICAgICAgICAgICAgIGxlZXI9eyEhcHJlZ3VudGEubGVlcn1cclxuICAgICAgICAgICAgICAgICAgICBkZXNwbGllZ3VlQ29udGVuaWRvPXtwcmVndW50YS5kZXNwbGllZ3VlQ29udGVuaWRvPz8ndmVydGljYWwnfVxyXG4gICAgICAgICAgICAgICAgLz46XHJcbiAgICAgICAgICAgIHByZWd1bnRhLnRpcG92YXI9PW51bGw/XHJcbiAgICAgICAgICAgICAgICAocHJlZ3VudGEuY2FzaWxsZXJvcyBhcyAoT3BjaW9uTXVsdGlwbGV8Q29uc2lzdGVuY2lhKVtdKS5tYXAoKG9wY2lvbk11bHRpcGxlKT0+XHJcbiAgICAgICAgICAgICAgICAgICAgb3BjaW9uTXVsdGlwbGUudGlwb2M9PSdPTSc/ICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8T3BjaW9uTXVsdGlwbGVEZXNwbGllZ3VlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk9e29wY2lvbk11bHRpcGxlLmlkX2Nhc2lsbGVyb30gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGNpb25NPXtvcGNpb25NdWx0aXBsZX0gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JQaz17cHJvcHMuZm9yUGt9IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDogLy9sYXMgY29uc2lzdGVuY2lhcyBwdWVkZW4gc2VyIGhlcm1hbmFzIGRlIE9NXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxDb25zaXN0ZW5jaWFEZXNwbGllZ3VlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk9e29wY2lvbk11bHRpcGxlLmlkX2Nhc2lsbGVyb31cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2lsbGVybz17b3BjaW9uTXVsdGlwbGV9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JQaz17cHJvcHMuZm9yUGt9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8+ICAgIFxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICA6XHJcbiAgICAgICAgICAgICgocHJlZ3VudGFTaW1wbGU6UHJlZ3VudGFTaW1wbGUpPT5cclxuICAgICAgICAgICAgICAgIDxDYW1wb1xyXG4gICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXtwcmVndW50YVNpbXBsZS5jYWxjdWxhZGE/dHJ1ZTpmYWxzZX1cclxuICAgICAgICAgICAgICAgICAgICBwcmVndW50YT17cHJlZ3VudGFTaW1wbGV9XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yUGs9e3Byb3BzLmZvclBrfVxyXG4gICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgKShwcmVndW50YSlcclxuICAgICAgICB9PC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJwaWUtcHJlZ3VudGFcIj5cclxuICAgICAgICAgICAgPFNhbHRvRGVzcGxpZWd1ZSBcclxuICAgICAgICAgICAgICAgIGNhc2lsbGVybz17cHJlZ3VudGF9XHJcbiAgICAgICAgICAgICAgICBwcmVmaWpvPXtwcmVndW50YS50aXBvdmFyPT1cIm9wY2lvbmVzXCI/KFxyXG4gICAgICAgICAgICAgICAgICAgIHByZWd1bnRhLmNhc2lsbGVyb3Muc29tZShvcGNpb249Pm9wY2lvbi5zYWx0byk/XCJyZXN0byBkZSBsYXMgb3BjaW9uZXNcIjpcInRvZGFzIGxhcyBvcGNpb25lc1wiXHJcbiAgICAgICAgICAgICAgICApOlwiXCJ9XHJcbiAgICAgICAgICAgIC8+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L0Rlc3BsZWdhckNhc2lsbGVybz5cclxufVxyXG5cclxudmFyIGNhbGN1bGFyRGlzYWJsZWRCRkFncmVnYXJMaXN0byA9IChjb25maWdTb3J0ZW9Gb3JtdWxhcmlvOkNvbmZpZ3VyYWNpb25Tb3J0ZW9Gb3JtdWxhcmlvfG51bGwsIGZvcm11bGFyaW86SWRGb3JtdWxhcmlvKT0+XHJcbiAgICAhIShjb25maWdTb3J0ZW9Gb3JtdWxhcmlvICYmIGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW8uaWRfZm9ybXVsYXJpb19pbmRpdmlkdWFsID09IGZvcm11bGFyaW8pXHJcblxyXG5mdW5jdGlvbiBib3RvbmVzRGVsRm9ybXVsYXJpbyhyOlJlc3B1ZXN0YXMsIHVuaWRhZF9hbmFsaXNpczpJZFVuaWRhZEFuYWxpc2lzLCBlc3RydWN0dXJhOkVzdHJ1Y3R1cmEsIGZvclBrUGFkcmU6Rm9yUGssIGZlZWRiYWNrQWxsOntbZm9ybXVsYXJpbyBpbiBQbGFpbkZvclBrXTpGb3JtU3RydWN0dXJlU3RhdGU8SWRWYXJpYWJsZSwgVmFsb3IsIElkRmluPn0pOkh0bWxUYWc8SFRNTERpdkVsZW1lbnQ+e1xyXG4gICAgdmFyIGZvcm1zVml2aWVuZGEgPSBnZXRGb3JtdWxhcmlvc0ZvcklkVml2aWVuZGEoZm9yUGtQYWRyZS52aXZpZW5kYSk7XHJcbiAgICB2YXIgdWFEZWYgPSBlc3RydWN0dXJhLnVuaWRhZGVzX2FuYWxpc2lzW3VuaWRhZF9hbmFsaXNpc107XHJcbiAgICB2YXIgYXJyYXlFc3RydWN0dXJhRm9ybXVsYXJpb3MgPSAobGlrZUFyKGVzdHJ1Y3R1cmEuZm9ybXVsYXJpb3MpKS5hcnJheSgpO1xyXG4gICAgdmFyIHggPSBsaWtlQXIodWFEZWYuaGlqYXMpLmZpbHRlcih1YUhpamE9PlxyXG4gICAgICAgICAgICAvL2Rlc2NhcnRvIHVhcyBxdWUgbm8gZXN0w6luIGVuIG5pbmd1biBmb3JtXHJcbiAgICAgICAgICAgIGFycmF5RXN0cnVjdHVyYUZvcm11bGFyaW9zLmZpbHRlcigoaW5mb0Zvcm11bGFyaW8pPT5cclxuICAgICAgICAgICAgICAgIGluZm9Gb3JtdWxhcmlvLmNhc2lsbGVyb3MudW5pZGFkX2FuYWxpc2lzID09IHVhSGlqYT8udW5pZGFkX2FuYWxpc2lzICYmIGZvcm1zVml2aWVuZGEuaW5jbHVkZXMoaW5mb0Zvcm11bGFyaW8uY2FzaWxsZXJvcy5pZF9jYXNpbGxlcm8gYXMgSWRGb3JtdWxhcmlvKVxyXG4gICAgICAgICAgICApLmxlbmd0aCA+IDBcclxuICAgICAgICApLm1hcCh1YUhpamE9PihcclxuICAgICAgICB1YUhpamEgPT0gbnVsbCA/IG51bGwgOlxyXG4gICAgICAgIGh0bWwuZGl2KHtjbGFzczondWEtaGlqYXMnfSxbXHJcbiAgICAgICAgICAgIGh0bWwuZGl2KHVhSGlqYS51bmlkYWRfYW5hbGlzaXMpLFxyXG4gICAgICAgICAgICBodG1sLmRpdihcclxuICAgICAgICAgICAgICAgIGxpa2VBcihyW3VhSGlqYS51bmlkYWRfYW5hbGlzaXNdfHxbXSkubWFwKChyZXNwdWVzdGFzSGlqYSwgaSk9PntcclxuICAgICAgICAgICAgICAgICAgICB2YXIgbnVtID0gTnVtYmVyKGkpKzFcclxuICAgICAgICAgICAgICAgICAgICB2YXIgZm9yUGtIaWphUGFyY2lhbCA9IHsuLi5mb3JQa1BhZHJlLCBbdWFIaWphLnBrX2FncmVnYWRhXTogbnVtfTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgY29uZmlnU29ydGVvRm9ybXVsYXJpbyA9IGVzdHJ1Y3R1cmEuY29uZmlnU29ydGVvP2VzdHJ1Y3R1cmEuY29uZmlnU29ydGVvW2dldE1haW5Gb3JtRm9yVml2aWVuZGEoZm9yUGtQYWRyZS52aXZpZW5kYSEpXTpudWxsXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGh0bWwuZGl2KHtjbGFzczonbnVtZXJhZG9yLXVhJ30sIFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaHRtbC5kaXYoe2NsYXNzOidib3RvbmVzLXVhJ30sW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaHRtbC5kaXYoe2NsYXNzOidudW1lcm8tdWEnfSxudW0udG9TdHJpbmcoKSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5saWtlQXIoZXN0cnVjdHVyYS5mb3JtdWxhcmlvcylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoZm9ybURlZj0+Zm9ybURlZi5jYXNpbGxlcm9zLnVuaWRhZF9hbmFsaXNpcyA9PSB1YUhpamEudW5pZGFkX2FuYWxpc2lzICYmIGZvcm1zVml2aWVuZGEuaW5jbHVkZXMoZm9ybURlZi5jYXNpbGxlcm9zLmlkX2Nhc2lsbGVybyBhcyBJZEZvcm11bGFyaW8pKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLm1hcCgoX2Zvcm1EZWYsIGZvcm11bGFyaW8pPT57XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZvclBrID0gey4uLmZvclBrSGlqYVBhcmNpYWwsIGZvcm11bGFyaW99O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmZWVkYmFja0Zvcm0gPSBmZWVkYmFja0FsbFt0b1BsYWluRm9yUGsoZm9yUGspXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmVlZGJhY2tGb3JtID8gaHRtbC5kaXYoe30sW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBodG1sLmJ1dHRvbigodWFIaWphISkucGtfYWdyZWdhZGErXCIgb2s6IFwiKyhOdW1iZXIoaSkrMSkpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3RvbkZvcm11bGFyaW9Db25SZXN1bWVuKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvclBrLCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW0sIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdHVhbDogdHJ1ZSB8fCBjYWxjdWxhckFjdHVhbEJGKGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW8sIG51bSwgbnVsbCwgZm9ybXVsYXJpbywgciksIC8vUkVWSVNBUiB0cnVlIHBhcmEgcXVlIG5vIHNlIGdyaXNlblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZpbzpmYWxzZSwgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ6IGNhbGN1bGFyRGlzYWJsZWRCRihjb25maWdTb3J0ZW9Gb3JtdWxhcmlvLCBudW0sIGZvcm11bGFyaW8sIHIpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmVlZGJhY2tGb3JtLCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ZGVzcGxpZWd1ZU9jdWx0YTpmYWxzZSwgZXhwcmVzaW9uX2hhYmlsaXRhcl9qczonJywgbm9tYnJlOmZvcm11bGFyaW8sIGFjbGFyYWNpb246bnVsbCwgc2FsdG86Zm9ybXVsYXJpb30sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JQa1BhZHJlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJib3Rvbi1pci1yZXN1bWVuLWZvcm11bGFyaW9cIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVzdHJ1Y3R1cmEuZm9ybXVsYXJpb3NbZm9ybXVsYXJpb10uY2FzaWxsZXJvc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSkgOiBudWxsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KS5hcnJheSgpLm1hcCh4PT54ID09IG51bGwgPyBudWxsIDogeCkucmV2ZXJzZSgpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBdKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAsYm90b25lc0RlbEZvcm11bGFyaW8ocmVzcHVlc3Rhc0hpamEsIHVhSGlqYS51bmlkYWRfYW5hbGlzaXMsIGVzdHJ1Y3R1cmEsIGZvclBrSGlqYVBhcmNpYWwsIGZlZWRiYWNrQWxsKVxyXG4gICAgICAgICAgICAgICAgICAgIF0pXHJcbiAgICAgICAgICAgICAgICB9KS5hcnJheSgpLm1hcCh4PT54ID09IG51bGwgPyBudWxsIDogeClcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgIF0pXHJcbiAgICApKS5hcnJheSgpLm1hcCh4PT54ID09IG51bGwgPyBudWxsIDogeCk7XHJcbiAgICByZXR1cm4gaHRtbC5kaXYoLyp7c3R5bGU6J2Rpc3BsYXk6ZmxleDsgZmxleC1kaXJlY3Rpb246cm93J30sKi94KTtcclxufVxyXG5cclxuZnVuY3Rpb24gVGV4dG9EZXNwbGllZ3VlKHByb3BzOntjYXNpbGxlcm86VGV4dG8sIGZvclBrOkZvclBrfSl7XHJcbiAgICB2YXIge2Nhc2lsbGVybywgZm9yUGt9ID0gcHJvcHM7XHJcbiAgICB2YXIgZGlzcGF0Y2ggPSB1c2VEaXNwYXRjaCgpO1xyXG4gICAgdmFyIGhhYmlsaXRhZG9yID0gY2FzaWxsZXJvLmV4cHJlc2lvbl9oYWJpbGl0YXJfanM/Z2V0RnVuY2lvbkhhYmlsaXRhcihjYXNpbGxlcm8uZXhwcmVzaW9uX2hhYmlsaXRhcl9qcyk6KCk9PnRydWU7XHJcbiAgICB2YXIge21vZG9EZXNwbGllZ3VlfSA9IHVzZVNlbGVjdG9yVml2aWVuZGEoZm9yUGspO1xyXG4gICAgdmFyIGlkID0gYHRleHRvLSR7Y2FzaWxsZXJvLmlkX2Nhc2lsbGVyb31gO1xyXG4gICAgcmVnaXN0cmFyRWxlbWVudG8oe2lkLCBzdHlsZTonZGlzcGxheScsIGZ1bjoocjpSZXNwdWVzdGFzKT0+aGFiaWxpdGFkb3IocikgfHwgbW9kb0Rlc3BsaWVndWU9PSdtZXRhZGF0b3MnPydibG9jayc6J25vbmUnfSlcclxuICAgIHZhciBlc1Jlc3VtZW5Gb3JtdWxhcmlvID0gY2FzaWxsZXJvLmNhc2lsbGVybz09J1Jlc0ZvcicgYXMgSWRDYXNpbGxlcm87IC8vIFRPRE86IENhbWJpYSBlc3RvIHF1ZSBlc3TDoSBqYXJjb2RlYWRvLlxyXG4gICAgaWYoZXNSZXN1bWVuRm9ybXVsYXJpbyl7XHJcbiAgICAgICAgcmVnaXN0cmFyRWxlbWVudG8oe2lkLCBkaXJlY3Q6dHJ1ZSwgXHJcbiAgICAgICAgICAgIGZ1bjooXHJcbiAgICAgICAgICAgICAgICByOlJlc3B1ZXN0YXMsIFxyXG4gICAgICAgICAgICAgICAgX2ZlZWRiYWNrRm9ybTogRm9ybVN0cnVjdHVyZVN0YXRlPElkVmFyaWFibGUsIFZhbG9yLCBJZEZpbj4sIFxyXG4gICAgICAgICAgICAgICAgZWxlbWVudG86SFRNTERpdkVsZW1lbnQsIFxyXG4gICAgICAgICAgICAgICAgZmVlZGJhY2tBbGw6e1tmb3JtdWxhcmlvIGluIFBsYWluRm9yUGtdOkZvcm1TdHJ1Y3R1cmVTdGF0ZTxJZFZhcmlhYmxlLFZhbG9yLCBJZEZpbj59LCBcclxuICAgICAgICAgICAgICAgIGVzdHJ1Y3R1cmE6RXN0cnVjdHVyYVxyXG4gICAgICAgICAgICApPT57XHJcbiAgICAgICAgICAgICAgICBlbGVtZW50by5zdHlsZS5kaXNwbGF5PScnO1xyXG4gICAgICAgICAgICAgICAgLy9AdHMtaWdub3JlIGxhcyByZXNwdWVzdGFzIHNvbiByZXNwdWVzdGFzUmFpeiBwb3JxdWUgUmVzRm9yIGVzdMOhIGVuIGVsIGZvcm0gcHBhbFxyXG4gICAgICAgICAgICAgICAgaWYoclsncmVzdW1lbkVzdGFkbyddIGFzIFJlc3VtZW5Fc3RhZG8gPT0gJ3ZhY2lvJyl7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudG8udGV4dENvbnRlbnQgPSBcInJlbGV2YW1pZW50byBzaW4gZW1wZXphclwiO1xyXG4gICAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudG8udGV4dENvbnRlbnQgPSBcInJlbGV2YW1pZW50byBlbXBlemFkb1wiO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciB7dW5pZGFkX2FuYWxpc2lzfSA9IGVzdHJ1Y3R1cmEuZm9ybXVsYXJpb3NbZm9yUGsuZm9ybXVsYXJpb10uY2FzaWxsZXJvcztcclxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50by5pbm5lckhUTUw9XCJcIjtcclxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50by5hcHBlbmRDaGlsZChib3RvbmVzRGVsRm9ybXVsYXJpbyhyLCB1bmlkYWRfYW5hbGlzaXMsIGVzdHJ1Y3R1cmEsIGZvclBrLCBmZWVkYmFja0FsbCkuY3JlYXRlKCkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuICAgIHZhciBpciA9IChkZWZCb3RvbjpEZWZpbmljaW9uRm9ybXVsYXJpb0FicmlyKT0+e1xyXG4gICAgICAgIC8vIHZhciBudWV2YUZvclBrPXsuLi5mb3JQaywgZm9ybXVsYXJpbzppZEZvcm11bGFyaW9EZXN0aW5vfTtcclxuICAgICAgICAvLyBudWV2YUZvclBrW251ZXZvQ2FtcG9Qa10gPSBkZWZCb3Rvbi5udW1cclxuICAgICAgICBkaXNwYXRjaEJ5UGFzcyhhY2Npb25fYWJyaXJfZm9ybXVsYXJpbyx7Zm9yUGs6ZGVmQm90b24uZm9yUGt9KTtcclxuICAgICAgICBkaXNwYXRjaChkaXNwYXRjaGVycy5DQU1CSUFSX0ZPUk1VTEFSSU8oe2ZvclBrOmRlZkJvdG9uLmZvclBrLCBhcGlsYXJWdWVsdGE6dHJ1ZX0pKTtcclxuICAgIH1cclxuICAgIHJldHVybiA8RGVzcGxlZ2FyQ2FzaWxsZXJvIFxyXG4gICAgICAgIGlkPXtgJHtpZH0tZXh0ZXJub2B9XHJcbiAgICAgICAgY2FzaWxsZXJvPXtjYXNpbGxlcm99XHJcbiAgICA+XHJcbiAgICAgICAgPEVuY2FiZXphZG9EZXNwbGllZ3VlIGNhc2lsbGVybz17Y2FzaWxsZXJvfSBsZWVyPXtmYWxzZX0gZm9yUGs9e2ZvclBrfS8+XHJcbiAgICAgICAgPGRpdiBpZD17aWR9IHN0eWxlPXt7ZGlzcGxheTonbm9uZSd9fT48L2Rpdj5cclxuICAgICAgICB7ZXNSZXN1bWVuRm9ybXVsYXJpbz9cclxuICAgICAgICA8QnV0dG9uIGNsYXNzTmFtZT1cInNwZWNpYWwtYnV0dG9uXCIgaWQ9XCJib3Rvbi1pci1yZXN1bWVuLWZvcm11bGFyaW9cIiBzdHlsZT17e2Rpc3BsYXk6J25vbmUnfX1cclxuICAgICAgICAgICAgb25DbGljaz17KGV2ZW50KT0+e1xyXG4gICAgICAgICAgICAgICAgaXIoSlNPTi5wYXJzZSgoZXZlbnQudGFyZ2V0ISBhcyB1bmtub3duIGFzIEhUTUxCdXR0b25FbGVtZW50KS5nZXRBdHRyaWJ1dGUoJ2RlZi1idXR0b24nKSEpKVxyXG4gICAgICAgICAgICB9fVxyXG4gICAgICAgID5pciAoaW50ZXJubyk8L0J1dHRvbj5cclxuICAgICAgICA6bnVsbH1cclxuXHJcbiAgICA8L0Rlc3BsZWdhckNhc2lsbGVybz5cclxufVxyXG5cclxuZnVuY3Rpb24gRmlsdHJvRGVzcGxpZWd1ZShwcm9wczp7ZmlsdHJvOkZpbHRybywgZm9yUGs6Rm9yUGt9KXtcclxuICAgIHZhciB7ZmlsdHJvfSA9IHByb3BzO1xyXG4gICAgcmV0dXJuIDxEZXNwbGVnYXJDYXNpbGxlcm8gY2FzaWxsZXJvPXtmaWx0cm99PlxyXG4gICAgICAgIDxEZXNwbGllZ3VlRW5jYWJlemFkbyBjYXNpbGxlcm89e2ZpbHRyb30vPlxyXG4gICAgPC9EZXNwbGVnYXJDYXNpbGxlcm8+XHJcbn1cclxuXHJcbmZ1bmN0aW9uIENvbnNpc3RlbmNpYURlc3BsaWVndWUocHJvcHM6e2Nhc2lsbGVybzpDb25zaXN0ZW5jaWEsIGZvclBrOkZvclBrfSl7XHJcbiAgICB2YXIge2Nhc2lsbGVybywgZm9yUGt9ID0gcHJvcHM7XHJcbiAgICB2YXIgaGFiaWxpdGFkb3IgPSBjYXNpbGxlcm8uZXhwcmVzaW9uX2hhYmlsaXRhcl9qcz9nZXRGdW5jaW9uSGFiaWxpdGFyKGNhc2lsbGVyby5leHByZXNpb25faGFiaWxpdGFyX2pzKTooKT0+dHJ1ZTtcclxuICAgIHZhciB7bW9kb0Rlc3BsaWVndWV9ID0gdXNlU2VsZWN0b3JWaXZpZW5kYShmb3JQayk7XHJcbiAgICB2YXIgaWQgPSBgY29uc2lzdGVuY2lhLSR7Y2FzaWxsZXJvLmlkX2Nhc2lsbGVyb31gO1xyXG4gICAgcmVnaXN0cmFyRWxlbWVudG8oe2lkLCBzdHlsZTonZGlzcGxheScsIGZ1bjoocjpSZXNwdWVzdGFzKT0+aGFiaWxpdGFkb3IocikgfHwgbW9kb0Rlc3BsaWVndWU9PSdtZXRhZGF0b3MnPydibG9jayc6J25vbmUnfSlcclxuICAgIHJldHVybiA8RGVzcGxlZ2FyQ2FzaWxsZXJvIFxyXG4gICAgICAgIGlkPXtpZH1cclxuICAgICAgICBjYXNpbGxlcm89e2Nhc2lsbGVyb31cclxuICAgICAgICBzdHlsZT17e2Rpc3BsYXk6J25vbmUnfX1cclxuICAgID5cclxuICAgICAgICA8RW5jYWJlemFkb0Rlc3BsaWVndWUgY2FzaWxsZXJvPXtjYXNpbGxlcm99IGxlZXI9e2ZhbHNlfSBmb3JQaz17Zm9yUGt9Lz5cclxuICAgIDwvRGVzcGxlZ2FyQ2FzaWxsZXJvPlxyXG59XHJcblxyXG50eXBlIERlZmluaWNpb25Gb3JtdWxhcmlvQWJyaXI9XHJcbih7Zm9yUGs6Rm9yUGssIG51bTpudW1iZXIsIGFjdHVhbDpib29sZWFuLCBwcmV2aW86Ym9vbGVhbn0gfCBcclxue2ZvclBrOkZvclBrLCBudW06bnVtYmVyLCBhY3R1YWw6Ym9vbGVhbiwgcHJldmlvOmZhbHNlLCBlc0FncmVnYXI6dHJ1ZX0gfCBcclxue2ZvclBrOkZvclBrLCBudW06bnVtYmVyLCBhY3R1YWw6Ym9vbGVhbiwgcHJldmlvOmZhbHNlLCBlc0NvbmZpcm1hcjp0cnVlfSB8XHJcbntmb3JQazpGb3JQaywgbnVtOm51bWJlciwgYWN0dWFsOmJvb2xlYW4sIHByZXZpbzpmYWxzZSwgcGVybWl0ZUJvcnJhcjpib29sZWFufSB8XHJcbntmb3JQazpGb3JQaywgbnVtOmZhbHNlLCBhY3R1YWw6Ym9vbGVhbiwgcHJldmlvOnRydWUsIHVuaWNvOnRydWV9KVxyXG4mIHtlc0NvbmZpcm1hcj86dHJ1ZSwgZXNBZ3JlZ2FyPzp0cnVlLCBwZXJtaXRlQm9ycmFyPzpib29sZWFuLCBkaXNhYmxlZD86Ym9vbGVhbnx1bmRlZmluZWR9O1xyXG5cclxuXHJcbnZhciBib3RvbkZvcm11bGFyaW9Db25SZXN1bWVuID0gKFxyXG4gICAgZGVmQm90b246RGVmaW5pY2lvbkZvcm11bGFyaW9BYnJpciwgXHJcbiAgICBmZWVkYmFja0Zvcm06Rm9ybVN0cnVjdHVyZVN0YXRlPElkVmFyaWFibGUsIFZhbG9yLCBJZEZpbj4sIFxyXG4gICAgcmVzcHVlc3Rhc0F1bWVudGFkYXM6UmVzcHVlc3RhcyxcclxuICAgIGNhc2lsbGVybzp7ZGVzcGxpZWd1ZU9jdWx0YT86Ym9vbGVhbnxudWxsLCBleHByZXNpb25faGFiaWxpdGFyX2pzPzpzdHJpbmcsIGFjbGFyYWNpb246c3RyaW5nfG51bGwsIGV4cHJlc2lvbl9oYWJpbGl0YXI/OnN0cmluZywgbm9tYnJlPzpzdHJpbmcsIHNhbHRvOnN0cmluZ3xudWxsLCBlc3BlY2lhbD86YW55fSxcclxuICAgIGZvclBrUGFkcmU6IEZvclBrLFxyXG4gICAgaWRCdXR0b246c3RyaW5nLFxyXG4gICAgZm9ybXVsYXJpb0FBYnJpcjpGb3JtdWxhcmlvXHJcbik9PntcclxuICAgIHZhciBmb3JQazpGb3JQayA9IGRlZkJvdG9uLmZvclBrO1xyXG4gICAgdmFyIHN1Zmlqb0lkRWxlbWVudG8gPSB0b1BsYWluRm9yUGsoZm9yUGspKyhkZWZCb3Rvbi5lc0NvbmZpcm1hcj8nLWxpc3RvJzonJyk7XHJcbiAgICB2YXIgaWQgPSBgZGl2LWJvdG9uLWZvcm11bGFyaW8tJHtzdWZpam9JZEVsZW1lbnRvfWA7XHJcbiAgICB2YXIgZXN0YWRvID0gZmVlZGJhY2tGb3JtLnJlc3VtZW47XHJcbiAgICByZXR1cm4gaHRtbC5kaXYoe1xyXG4gICAgICAgIGlkLCBcclxuICAgICAgICBjbGFzczpcInNlY2Npb24tYm90b24tZm9ybXVsYXJpb1wiICwgXHJcbiAgICAgICAgJGF0dHJzOntcclxuICAgICAgICAgICAgXCJudWVzdHJvLXZhbGlkYXRvclwiOmRlZkJvdG9uLmFjdHVhbD8nYWN0dWFsJzpkZWZCb3Rvbi5wcmV2aW8/J3ZhbGlkYSc6J3RvZGF2aWFfbm8nLFxyXG4gICAgICAgICAgICBcIm9jdWx0YXItc2FsdGVhZGFcIjpjYXNpbGxlcm8uZGVzcGxpZWd1ZU9jdWx0YT8oY2FzaWxsZXJvLmV4cHJlc2lvbl9oYWJpbGl0YXJfanM/J0lOSEFCSUxJVEFSJzonU0knKTonTk8nLFxyXG4gICAgICAgICAgICBcInRpZW5lLXZhbG9yXCI6XCJOT1wiLFxyXG4gICAgICAgICAgICBcImRlZi1idXR0b25cIjpKU09OLnN0cmluZ2lmeShkZWZCb3RvbilcclxuICAgICAgICB9XHJcbiAgICB9LCBbXHJcbiAgICAgICAgY2FzaWxsZXJvLmFjbGFyYWNpb24gfHwgaHRtbC5kaXYoe2NsYXNzOlwiYWNsYXJhY2lvblwifSwgW2JyZWFrZWFibGVUZXh0KGNhc2lsbGVyby5hY2xhcmFjaW9uKT8/bnVsbF0pLFxyXG4gICAgICAgIGh0bWwuZGl2KFtcclxuICAgICAgICAgICAgQnV0dG9uMih7XHJcbiAgICAgICAgICAgICAgICAvLyBpZDpgdmFyLSR7aWRWYXJpYWJsZX1gLFxyXG4gICAgICAgICAgICAgICAgaWQ6YGJvdG9uLWZvcm11bGFyaW8tJHtzdWZpam9JZEVsZW1lbnRvfWAsIFxyXG4gICAgICAgICAgICAgICAgdmFyaWFudDpcIm91dGxpbmVkXCIsXHJcbiAgICAgICAgICAgICAgICBkaXNhYmxlZDogZGVmQm90b24uZGlzYWJsZWQsXHJcbiAgICAgICAgICAgICAgICBjb2xvcjpcImluaGVyaXRcIixcclxuICAgICAgICAgICAgICAgIG9uQ2xpY2s6KCk9PntcclxuICAgICAgICAgICAgICAgICAgICBpZihkZWZCb3Rvbi5lc0NvbmZpcm1hcil7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKGRlZkJvdG9uLm51bSAhPSBudWxsKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGNhc2lsbGVyby5zYWx0byl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIEJGX3Zhcm5hbWUgPSAnJEIuRjonKyBjYXNpbGxlcm8uc2FsdG8gYXMgSWRWYXJpYWJsZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoQnlQYXNzKGFjY2lvbl9yZWdpc3RyYXJfcmVzcHVlc3RhLHtmb3JQazpmb3JQa1BhZHJlLCB2YXJpYWJsZTpCRl92YXJuYW1lLCByZXNwdWVzdGE6ZGVmQm90b24ubnVtPT0wP251bGw6ZGVmQm90b24ubnVtIGFzIFZhbG9yfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwYXRjaEJ5UGFzcyhhY2Npb25fcmVnaXN0cmFyX3Jlc3B1ZXN0YSx7Zm9yUGs6Zm9yUGtQYWRyZSwgdmFyaWFibGU6Y2FzaWxsZXJvLmV4cHJlc2lvbl9oYWJpbGl0YXIgYXMgSWRWYXJpYWJsZSwgcmVzcHVlc3RhOmRlZkJvdG9uLm51bSBhcyBWYWxvcn0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBidXR0b24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZEJ1dHRvbikhIGFzIEhUTUxCdXR0b25FbGVtZW50O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBidXR0b24uc2V0QXR0cmlidXRlKCdkZWYtYnV0dG9uJywgSlNPTi5zdHJpbmdpZnkoZGVmQm90b24pKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnV0dG9uLmNsaWNrKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICRhdHRyczp7XHJcbiAgICAgICAgICAgICAgICAgICAgXCJyZXN1bWVuLWVzdGFkb1wiOmVzdGFkbyE9J3ZhY2lvJz9lc3RhZG86IGRlZkJvdG9uLmFjdHVhbD8nYWN0dWFsJzpkZWZCb3Rvbi5wcmV2aW8/ZXN0YWRvOid0b2RhdmlhX25vJyxcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICwgY2hpbGRyZW46W1xyXG4gICAgICAgICAgICAgICAgICAgIChkZWZCb3Rvbi5lc0FncmVnYXI/J2FncmVnYXInOmRlZkJvdG9uLmVzQ29uZmlybWFyPydMaXN0byc6Y2FzaWxsZXJvLm5vbWJyZSArICcgJyArIChkZWZCb3Rvbi5udW18fCcnKSksXHJcbiAgICAgICAgICAgICAgICAgICAgaHRtbC5zdmcoe2NsYXNzOlwiTXVpU3ZnSWNvbi1yb290XCIsIGZvY3VzYWJsZTpmYWxzZSwgdmlld2JveDpcIjAgMCAyNCAyNFwiLCBcImFyaWEtaGlkZGVuXCI6XCJ0cnVlXCJ9LFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaHRtbC5wYXRoKHtkOihkZWZCb3Rvbi5lc0FncmVnYXI/bWF0ZXJpYWxJb0ljb25zU3ZnUGF0aC5BZGQ6ZGVmQm90b24uZXNDb25maXJtYXI/bWF0ZXJpYWxJb0ljb25zU3ZnUGF0aC5DaGVjazpjYXNpbGxlcm8uc2FsdG8/bWF0ZXJpYWxJb0ljb25zU3ZnUGF0aC5Gb3J3YXJkOm1hdGVyaWFsSW9JY29uc1N2Z1BhdGguRXhpdFRvQXBwKX0pXHJcbiAgICAgICAgICAgICAgICAgICAgXSlcclxuICAgICAgICAgICAgICAgIF1cclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgIChkZWZCb3Rvbi5wZXJtaXRlQm9ycmFyP1xyXG4gICAgICAgICAgICAgICAgQnV0dG9uMih7XHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOlwiYm90b24tYm9ycmFyLXVhLXZhY2lhXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgY29sb3I6XCJkZWZhdWx0XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgdmFyaWFudDpcIm91dGxpbmVkXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGh0bWwuc3ZnKHtjbGFzczpcIk11aVN2Z0ljb24tcm9vdFwiLCBmb2N1c2FibGU6ZmFsc2UsIHZpZXdib3g6XCIwIDAgMjQgMjRcIiwgXCJhcmlhLWhpZGRlblwiOlwidHJ1ZVwifSxbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBodG1sLnBhdGgoe2Q6bWF0ZXJpYWxJb0ljb25zU3ZnUGF0aC5EZWxldGVGb3JldmVyfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgXSksIFxyXG4gICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s6KCk9PmFjY2lvbl9ib3JyYXJfZm9ybXVsYXJpbyh7Zm9yUGssIGZvclBrUGFkcmV9KX0pXHJcbiAgICAgICAgICAgIDpudWxsKSxcclxuICAgICAgICAgICAgKGRlZkJvdG9uLm51bSAhPT0gZmFsc2UgJiYgIWRlZkJvdG9uLmVzQWdyZWdhciAmJiAhZGVmQm90b24uZXNDb25maXJtYXI/XHJcbiAgICAgICAgICAgICAgICBodG1sLnNwYW4oKGNhc2lsbGVyby5lc3BlY2lhbD8uY2FtcG9zUmVzdW1lbj8/W2RlZkJvdG9uLm51bS50b1N0cmluZygpXSkubWFwKFxyXG4gICAgICAgICAgICAgICAgICAgIChjYW1wbzpzdHJpbmcpPT5yZXNwdWVzdGFzQXVtZW50YWRhc1tmb3JtdWxhcmlvQUFicmlyLnVuaWRhZF9hbmFsaXNpc11bZGVmQm90b24ubnVtLTFdW2NhbXBvIGFzIElkVmFyaWFibGVdXHJcbiAgICAgICAgICAgICAgICApLmpvaW4oJywgJykgKVxyXG4gICAgICAgICAgICA6bnVsbClcclxuICAgICAgICAgICAgLy8gaHRtbC5kaXYoe2NsYXNzOidpbmxpbmUtZGlhbG9nJywgJGF0dHJzOntcImlubGluZS1kaWFsb2ctb3BlblwiOiBjb25maXJtYXJGb3J6YXJJciA9PSBkZWZCb3Rvbi5udW0/J3Zpc2libGUnOidoaWRkZW4nfX0sWyAgICAgICAgICAgICAgICBdKVxyXG4gICAgICAgIF0pXHJcbiAgICAgICAgLypcclxuICAgICAgICAgICAge2RlZkJvdG9uLmVzQWdyZWdhcj88PiA8c3Bhbj4gIDwvc3Bhbj4gPEJ1dHRvblxyXG4gICAgICAgICAgICAgICAgdmFyaWFudD1cIm91dGxpbmVkXCJcclxuICAgICAgICAgICAgICAgIGNvbG9yPVwiaW5oZXJpdFwiXHJcbiAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKT0+e1xyXG4gICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgPjxJQ09OLkNoZWNrLz48L0J1dHRvbj48Lz46bnVsbH1cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICAqL1xyXG4gICAgXSkuY3JlYXRlKClcclxufVxyXG5cclxudmFyIGJ1c2Nhckhub3NGb3JtdWxhcmlvID0gKGlkRm9ybXVsYXJpb0Rlc3Rpbm86SWRGb3JtdWxhcmlvKT0+e1xyXG4gICAgdmFyIGVzdHJ1Y3R1cmEgPSBnZXRFc3RydWN0dXJhKCk7XHJcbiAgICB2YXIgdWEgPSBlc3RydWN0dXJhLmZvcm11bGFyaW9zW2lkRm9ybXVsYXJpb0Rlc3Rpbm9dLmNhc2lsbGVyb3MudW5pZGFkX2FuYWxpc2lzO1xyXG4gICAgcmV0dXJuIGxpa2VBcihlc3RydWN0dXJhLmZvcm11bGFyaW9zKVxyXG4gICAgICAgIC5maWx0ZXIoKGluZm9Gb3JtdWxhcmlvOkluZm9Gb3JtdWxhcmlvLCBpZEZvcm06SWRGb3JtdWxhcmlvKT0+XHJcbiAgICAgICAgICAgIGluZm9Gb3JtdWxhcmlvLmNhc2lsbGVyb3MudW5pZGFkX2FuYWxpc2lzID09IHVhXHJcbiAgICAgICAgKS5tYXAoKF9pbmZvRm9ybXVsYXJpbzpJbmZvRm9ybXVsYXJpbywgaWRGb3JtOklkRm9ybXVsYXJpbyk9PlxyXG4gICAgICAgICAgICBpZEZvcm1cclxuICAgICAgICApLmFycmF5KClcclxufVxyXG5cclxudmFyIGNoZWNrRm9ybXNWYWNpb3MgPSAoZm9ybXM6SWRGb3JtdWxhcmlvW10sIGZlZWRiYWNrQWxsOntcclxuICAgIFtmb3JtdWxhcmlvIGluIFBsYWluRm9yUGtdOkZvcm1TdHJ1Y3R1cmVTdGF0ZTxJZFZhcmlhYmxlLCBWYWxvciwgSWRGaW4+IC8vIHJlc3VsdGFkbyBkZWwgcm93VmFsaWRhdG9yIHBhcmEgZXN0YWRvLmZvclBrXHJcbn0sIGZvclBrOkZvclBrKT0+e1xyXG4gICAgcmV0dXJuIGZvcm1zLmZpbHRlcigoZm9ybTpJZEZvcm11bGFyaW8pPT57XHJcbiAgICAgICAgbGV0IG15Zm9yUGs9ey4uLmZvclBrLCBmb3JtdWxhcmlvOmZvcm19O1xyXG4gICAgICAgIHZhciBmZWVkYmFjayA9IGZlZWRiYWNrQWxsW3RvUGxhaW5Gb3JQayhteWZvclBrKV07XHJcbiAgICAgICAgcmV0dXJuIGZlZWRiYWNrLnJlc3VtZW4gIT0gJ3ZhY2lvJ1xyXG4gICAgfSkubGVuZ3RoID09IDBcclxufVxyXG5cclxuZnVuY3Rpb24gQm90b25Gb3JtdWxhcmlvRGVzcGxpZWd1ZShwcm9wczp7Y2FzaWxsZXJvOkJvdG9uRm9ybXVsYXJpbywgZm9ybXVsYXJpbzpGb3JtdWxhcmlvLCBmb3JQazpGb3JQa30pe1xyXG4gICAgdmFyIHtjYXNpbGxlcm8sIGZvclBrfSA9IHByb3BzO1xyXG4gICAgdmFyIGhhYmlsaXRhZG9yID0gY2FzaWxsZXJvLmV4cHJlc2lvbl9oYWJpbGl0YXJfanM/Z2V0RnVuY2lvbkhhYmlsaXRhcihjYXNpbGxlcm8uZXhwcmVzaW9uX2hhYmlsaXRhcl9qcyk6KCk9PnRydWU7XHJcbiAgICB2YXIge29wY2lvbmVzfSA9IHVzZVNlbGVjdG9yVml2aWVuZGEoZm9yUGspO1xyXG4gICAgLy92YXIgaWRGb3JtdWxhcmlvRGVzdGlubyA9ICdGOicrY2FzaWxsZXJvLnNhbHRvISBhcyBJZEZvcm11bGFyaW87ICAgLy9vcmlnaW5hbFxyXG4gICAgdmFyIGFybW9Ob21TYWx0bz1jYXNpbGxlcm8uc2FsdG8/LnN1YnN0cmluZygwLDIpPT0nRjonP2Nhc2lsbGVyby5zYWx0by5zbGljZSgyKTpjYXNpbGxlcm8uc2FsdG87XHJcbiAgICAvL2NvbnNvbGUubG9nKCdCb3RvbkZvcm11bGFyaW9EZXNwbGllZ3VlIGFybW9Ob21TYWx0byAnICthcm1vTm9tU2FsdG8pO1xyXG4gICAgdmFyIGlkRm9ybXVsYXJpb0Rlc3Rpbm8gPSAnRjonK2FybW9Ob21TYWx0byEgYXMgSWRGb3JtdWxhcmlvO1xyXG4gICAgdmFyIGVzdHJ1Y3R1cmEgPSBnZXRFc3RydWN0dXJhKCk7XHJcbiAgICB2YXIge2Zvcm11bGFyaW9BQWJyaXJ9ID0gdXNlU2VsZWN0b3IoKF9zdGF0ZTpDYXNvU3RhdGUpPT4oe1xyXG4gICAgICAgIGZvcm11bGFyaW9BQWJyaXI6ZXN0cnVjdHVyYS5mb3JtdWxhcmlvc1tpZEZvcm11bGFyaW9EZXN0aW5vXS5jYXNpbGxlcm9zLFxyXG4gICAgfSkpO1xyXG4gICAgdmFyIHN1Zmlqb0lkRWxlbWVudG8gPSB0b1BsYWluRm9yUGsoZm9yUGspO1xyXG4gICAgLypcclxuICAgIHJlZ2lzdHJhckVsZW1lbnRvKHtcclxuICAgICAgICBpZDpgZGl2LWJvdG9uLWZvcm11bGFyaW8tJHtzdWZpam9JZEVsZW1lbnRvfWAsIFxyXG4gICAgICAgIGF0dHI6J2VzdGEtaW5oYWJpbGl0YWRhJywgXHJcbiAgICAgICAgLy8gZnVuOiAocjpSZXNwdWVzdGFzKT0+aGFiaWxpdGFkb3Iocik/J1NJJzonTk8nXHJcbiAgICAgICAgZnVuOiAoX3I6UmVzcHVlc3Rhcyk9PidOTydcclxuICAgIH0pO1xyXG4gICAgcmVnaXN0cmFyRWxlbWVudG88SFRNTEJ1dHRvbkVsZW1lbnQ+KHtcclxuICAgICAgICBpZDpgYm90b24tZm9ybXVsYXJpby0ke3N1Zmlqb0lkRWxlbWVudG99YCwgXHJcbiAgICAgICAgcHJvcDonZGlzYWJsZWQnLCBcclxuICAgICAgICAvLyBmdW46IChyOlJlc3B1ZXN0YXMpPT4haGFiaWxpdGFkb3IocilcclxuICAgICAgICBmdW46IChfcjpSZXNwdWVzdGFzKT0+ZmFsc2VcclxuICAgIH0pO1xyXG4gICAgKi9cclxuICAgIHZhciBkaXNwYXRjaCA9IHVzZURpc3BhdGNoKCk7XHJcbiAgICB2YXIgW2NvbmZpcm1hckZvcnphcklyLCBzZXRDb25maXJtYXJGb3J6YXJJcl0gPSB1c2VTdGF0ZTxEZWZpbmljaW9uRm9ybXVsYXJpb0FicmlyfGZhbHNlfG51bGw+KG51bGwpO1xyXG4gICAgdmFyIG11bHRpcGxlRm9ybXVsYXJpb3M9Zm9ybXVsYXJpb0FBYnJpci51bmlkYWRfYW5hbGlzaXMgIT0gcHJvcHMuZm9ybXVsYXJpby51bmlkYWRfYW5hbGlzaXM7XHJcbiAgICB2YXIgbnVldm9DYW1wb1BrID0gZGVmT3BlcmF0aXZvLmRlZlVBW2Zvcm11bGFyaW9BQWJyaXIudW5pZGFkX2FuYWxpc2lzXS5waztcclxuICAgLy8gdmFyIHZhcl9uYW1lPSckQi4nK2Nhc2lsbGVyby5zYWx0bzsgLy9vcmlnaW5hbFxyXG4gICAgdmFyIHZhcl9uYW1lPSckQi5GOicrYXJtb05vbVNhbHRvO1xyXG4gICAgdmFyIGlkU2VjY2lvbj1gc2VjY2lvbi1ib3Rvbi1mb3JtdWxhcmlvLSR7dmFyX25hbWV9YDtcclxuICAgIHZhciBpZEJ1dHRvbj1gc3BlY2lhbC1idXR0b24tJHtpZFNlY2Npb259YDtcclxuICAgIHJlZ2lzdHJhckVsZW1lbnRvPEhUTUxEaXZFbGVtZW50Pih7XHJcbiAgICAgICAgaWQ6aWRTZWNjaW9uLCBcclxuICAgICAgICBkaXJlY3Q6dHJ1ZSxcclxuICAgICAgICBmdW46IChyZXNwdWVzdGFzQXVtZW50YWRhczpSZXNwdWVzdGFzLCBmZWVkYmFja1JvdzogRm9ybVN0cnVjdHVyZVN0YXRlPElkVmFyaWFibGUsIFZhbG9yLCBJZEZpbj4sIGRpdjpIVE1MRGl2RWxlbWVudCxcclxuICAgICAgICAgICAgICAgIGZlZWRiYWNrQWxsOntcclxuICAgICAgICAgICAgICAgICAgICBbZm9ybXVsYXJpbyBpbiBQbGFpbkZvclBrXTpGb3JtU3RydWN0dXJlU3RhdGU8SWRWYXJpYWJsZSwgVmFsb3IsIElkRmluPiAvLyByZXN1bHRhZG8gZGVsIHJvd1ZhbGlkYXRvciBwYXJhIGVzdGFkby5mb3JQa1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICApPT57XHJcbiAgICAgICAgICAgIHRyeXtcclxuICAgICAgICAgICAgICAgIHZhciBsaXN0YURlQm90b25lc0FicmlyOkRlZmluaWNpb25Gb3JtdWxhcmlvQWJyaXJbXSA9IFtdO1xyXG4gICAgICAgICAgICAgICAvLyB2YXIgZXNWYXJBY3R1YWwgPSBmZWVkYmFja1Jvdy5hY3R1YWwgPT0gJyRCLkY6JytjYXNpbGxlcm8uc2FsdG87ICAvL29yaWdpbmFsXHJcbiAgICAgICAgICAgICAgICB2YXIgZXNWYXJBY3R1YWwgPSBmZWVkYmFja1Jvdy5hY3R1YWwgID09ICckQi5GOicrYXJtb05vbVNhbHRvO1xyXG4gICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZygnQm90b25Gb3JtdWxhcmlvRGVzcGxpZWd1ZSBlc1ZhckFjdHVhbCAnICtlc1ZhckFjdHVhbCAgKTtcclxuICAgICAgICAgICAgICAgIGlmKG11bHRpcGxlRm9ybXVsYXJpb3MgJiYgY2FzaWxsZXJvLnNhbHRvIT1udWxsKXtcclxuICAgICAgICAgICAgICAgICAgLy8gIGxldCBkZWZGb3JtdWxhcmlvOkluZm9Gb3JtdWxhcmlvID0gZXN0cnVjdHVyYS5mb3JtdWxhcmlvc1snRjonK2Nhc2lsbGVyby5zYWx0byBhcyBJZEZvcm11bGFyaW9dOyAgICAgIC8vb3JpZ2luYWxcclxuICAgICAgICAgICAgICAgICAgICBsZXQgZGVmRm9ybXVsYXJpbzpJbmZvRm9ybXVsYXJpbyA9IGVzdHJ1Y3R1cmEuZm9ybXVsYXJpb3NbJ0Y6Jythcm1vTm9tU2FsdG8gYXMgSWRGb3JtdWxhcmlvXTtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgZGVmVUEgPSBlc3RydWN0dXJhLnVuaWRhZGVzX2FuYWxpc2lzW2RlZkZvcm11bGFyaW8uY2FzaWxsZXJvcy51bmlkYWRfYW5hbGlzaXMhXTtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgY29uanVudG8gPSByZXNwdWVzdGFzQXVtZW50YWRhc1tkZWZGb3JtdWxhcmlvLmNhc2lsbGVyb3MudW5pZGFkX2FuYWxpc2lzIV07XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNhbnRpZGFkRXNwZXJhZGEgPSByZXNwdWVzdGFzQXVtZW50YWRhc1tjYXNpbGxlcm8uZXhwcmVzaW9uX2hhYmlsaXRhciBhcyBJZFZhcmlhYmxlXTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgbnVtQWN0dWFsOm51bWJlcnxudWxsID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgLy8gIHZhciBlc3RhZG9EZWxCb3RvbiA9IGZlZWRiYWNrUm93LmZlZWRiYWNrWyckQi5GOicrY2FzaWxsZXJvLnNhbHRvIGFzIElkVmFyaWFibGVdLmVzdGFkbyAgIC8vb3JpZ2luYWxcclxuICAgICAgICAgICAgICAgICAgICAgIHZhciBlc3RhZG9EZWxCb3RvbiA9IGZlZWRiYWNrUm93LmZlZWRiYWNrWyckQi5GOicrYXJtb05vbVNhbHRvIGFzIElkVmFyaWFibGVdLmVzdGFkb1xyXG4gICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coJ0JvdG9uRm9ybXVsYXJpb0Rlc3BsaWVndWUgZXN0YWRvRGVsQm90b24gJyArZXN0YWRvRGVsQm90b24gICk7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW8gPSBlc3RydWN0dXJhLmNvbmZpZ1NvcnRlbz9lc3RydWN0dXJhLmNvbmZpZ1NvcnRlb1tnZXRNYWluRm9ybUZvclZpdmllbmRhKGZvclBrLnZpdmllbmRhKV06bnVsbFxyXG4gICAgICAgICAgICAgICAgICAgIGxpc3RhRGVCb3RvbmVzQWJyaXIgPSBsaWtlQXIoY29uanVudG8pLm1hcCgoXywgaSk9PntcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG51bTpudW1iZXIgPSBudW1iZXJPclN0cmluZ0luY0lmQXJyYXkoaSwgY29uanVudG8pIGFzIG51bWJlcjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGZvclBrPXsuLi5wcm9wcy5mb3JQaywgZm9ybXVsYXJpbzppZEZvcm11bGFyaW9EZXN0aW5vLCBbbnVldm9DYW1wb1BrXTpudW19O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZm9ybUhub3MgPSBidXNjYXJIbm9zRm9ybXVsYXJpbyhpZEZvcm11bGFyaW9EZXN0aW5vKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZmVlZGJhY2sgPSBmZWVkYmFja0FsbFt0b1BsYWluRm9yUGsoZm9yUGspXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYobnVtQWN0dWFsID09IG51bGwgJiYgZmVlZGJhY2sucmVzdW1lbiA9PSBcInZhY2lvXCIgJiYgZXN0YWRvRGVsQm90b24gPT0ndmFsaWRhJyl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1BY3R1YWwgPSBudW07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvclBrLCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VtZW46bnVsbCwgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW0sIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0dWFsOiBjYWxjdWxhckFjdHVhbEJGKGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW8sIG51bSwgbnVtQWN0dWFsLCBpZEZvcm11bGFyaW9EZXN0aW5vLCByZXNwdWVzdGFzQXVtZW50YWRhcyksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2aW86IG51bUFjdHVhbCA9PSBudWxsLCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlcm1pdGVCb3JyYXI6IGxpa2VBcihjb25qdW50bykuYXJyYXkoKS5sZW5ndGggPT0gTnVtYmVyKGkpICsgMSAmJiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja0Zvcm1zVmFjaW9zKGZvcm1Ibm9zLCBmZWVkYmFja0FsbCwgZm9yUGspICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsY3VsYXJQZXJtaXRlQm9ycmFyQkYoY29uZmlnU29ydGVvRm9ybXVsYXJpbyxpZEZvcm11bGFyaW9EZXN0aW5vKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkOiBjYWxjdWxhckRpc2FibGVkQkYoY29uZmlnU29ydGVvRm9ybXVsYXJpbywgbnVtLCBpZEZvcm11bGFyaW9EZXN0aW5vLCByZXNwdWVzdGFzQXVtZW50YWRhcylcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0pLmFycmF5KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYoXCJwdWVkZSBhZ3JlZ2FyIC8vVE9ETyBWRVIgRVNUT1wiICYmIChjb25qdW50byBpbnN0YW5jZW9mIEFycmF5IHx8IGNvbmp1bnRvID09IG51bGwpKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG51ZXZvVmFsb3JQaz0oY29uanVudG89PW51bGwgPyAwIDogY29uanVudG8ubGVuZ3RoKSArIDE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBmb3JQaz17Li4ucHJvcHMuZm9yUGssIGZvcm11bGFyaW86aWRGb3JtdWxhcmlvRGVzdGlubywgW251ZXZvQ2FtcG9Qa106bnVldm9WYWxvclBrfTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGRlYmVBZ3JlZ2FyT2xpc3RvID0gbnVtQWN0dWFsID09IG51bGwgJiYgKGNhbnRpZGFkRXNwZXJhZGEgPT0gbnVsbCB8fCBjYW50aWRhZEVzcGVyYWRhICE9IChjb25qdW50byAhPW51bGwgJiYgY29uanVudG8ubGVuZ3RoKSkgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAoZXN0YWRvRGVsQm90b24gPT0ndmFsaWRhJyB8fCBlc1ZhckFjdHVhbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RhRGVCb3RvbmVzQWJyaXIucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JQaywgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW06bnVldm9WYWxvclBrLCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVzQWdyZWdhcjp0cnVlLCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdHVhbDpkZWJlQWdyZWdhck9saXN0bywgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2aW86IGZhbHNlLCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkOiBjYWxjdWxhckRpc2FibGVkQkZBZ3JlZ2FyTGlzdG8oY29uZmlnU29ydGVvRm9ybXVsYXJpbyxpZEZvcm11bGFyaW9EZXN0aW5vKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGlzdGFEZUJvdG9uZXNBYnJpci5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvclBrLCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bTpudWV2b1ZhbG9yUGsgLSAxLCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVzQ29uZmlybWFyOnRydWUsIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0dWFsOmRlYmVBZ3JlZ2FyT2xpc3RvICYmICghY2FzaWxsZXJvLmxvbmdpdHVkIHx8IG51ZXZvVmFsb3JQayA+IE51bWJlcihjYXNpbGxlcm8ubG9uZ2l0dWQpKSwgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2aW86IGZhbHNlLCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkOiBjYWxjdWxhckRpc2FibGVkQkZBZ3JlZ2FyTGlzdG8oY29uZmlnU29ydGVvRm9ybXVsYXJpbyxpZEZvcm11bGFyaW9EZXN0aW5vKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgZm9yUGs9ey4uLnByb3BzLmZvclBrLCBmb3JtdWxhcmlvOmlkRm9ybXVsYXJpb0Rlc3Rpbm99O1xyXG4gICAgICAgICAgICAgICAgICAgIGxpc3RhRGVCb3RvbmVzQWJyaXIgPSBbe2ZvclBrLCBudW06ZmFsc2UsIHVuaWNvOnRydWUsIGFjdHVhbDplc1ZhckFjdHVhbCwgcHJldmlvOnRydWV9XVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdmFyIHRvZG9zTG9zQm90b25lcyA9IGxpc3RhRGVCb3RvbmVzQWJyaXIubWFwKGRlZkJvdG9uPT5cclxuICAgICAgICAgICAgICAgICAgICBib3RvbkZvcm11bGFyaW9Db25SZXN1bWVuKGRlZkJvdG9uLCBmZWVkYmFja0FsbFt0b1BsYWluRm9yUGsoZGVmQm90b24uZm9yUGspXT8/e3Jlc3VtZW46J3ZhY2lvJ30sIHJlc3B1ZXN0YXNBdW1lbnRhZGFzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNpbGxlcm8sIHByb3BzLmZvclBrLCBpZEJ1dHRvbiwgZm9ybXVsYXJpb0FBYnJpclxyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIHZhciBodG1sU2VjY2lvbj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZFNlY2Npb24pITtcclxuICAgICAgICAgICAgICAgIGh0bWxTZWNjaW9uLmlubmVySFRNTD1cIlwiO1xyXG4gICAgICAgICAgICAgICAgaHRtbFNlY2Npb24uYXBwZW5kQ2hpbGQoaHRtbC5kaXYodG9kb3NMb3NCb3RvbmVzKS5jcmVhdGUoKSk7XHJcbiAgICAgICAgICAgIH1jYXRjaChlcnIpe1xyXG4gICAgICAgICAgICAgICAgdmFyIGVycm9yID0gdW5leHBlY3RlZChlcnIpO1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJlbnRyYSBhbCBjYXRjaFwiKVxyXG4gICAgICAgICAgICAgICAgZGl2LnRleHRDb250ZW50PSdlc3RvLCBGQUxMw4kgJytlcnJvci5tZXNzYWdlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICBjb25zdCBpciA9IChkZWZCb3RvbjpEZWZpbmljaW9uRm9ybXVsYXJpb0FicmlyKT0+e1xyXG4gICAgICAgIGlmKCFjYXNpbGxlcm8uc2FsdG8pe1xyXG4gICAgICAgICAgICBvcGNpb25lcy5tb2RvRGlyZWN0bz9cclxuICAgICAgICAgICAgICAgIG51bGxcclxuICAgICAgICAgICAgOlxyXG4gICAgICAgICAgICAgICAgZGlzcGF0Y2goZGlzcGF0Y2hlcnMuVk9MVkVSX0hEUih7fSkpO1xyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICB2YXIgbnVldmFGb3JQaz17Li4uZm9yUGssIGZvcm11bGFyaW86aWRGb3JtdWxhcmlvRGVzdGlub307XHJcbiAgICAgICAgICAgIGlmKG11bHRpcGxlRm9ybXVsYXJpb3Mpe1xyXG4gICAgICAgICAgICAgICAgLy8gQHRzLWlnbm9yZSBmb3JQayB5IHN1cyBjb21wb25lbnRlc1xyXG4gICAgICAgICAgICAgICAgbnVldmFGb3JQa1tudWV2b0NhbXBvUGtdID0gZGVmQm90b24ubnVtXHJcbiAgICAgICAgICAgICAgICBpZihkZWZCb3Rvbi5lc0FncmVnYXIpe1xyXG4gICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoQnlQYXNzKGFjY2lvbl9hZ3JlZ2FyX2Zvcm11bGFyaW8se2ZvclBrOm51ZXZhRm9yUGt9KTtcclxuICAgICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoQnlQYXNzKGFjY2lvbl9hYnJpcl9mb3JtdWxhcmlvLHtmb3JQazpudWV2YUZvclBrfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZGlzcGF0Y2goZGlzcGF0Y2hlcnMuQ0FNQklBUl9GT1JNVUxBUklPKHtmb3JQazpudWV2YUZvclBrLCBhcGlsYXJWdWVsdGE6dHJ1ZX0pKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYoY29uZmlybWFyRm9yemFySXIpe3NldENvbmZpcm1hckZvcnphcklyKGZhbHNlKX1cclxuICAgIH07XHJcbiAgICByZXR1cm4gPERlc3BsZWdhckNhc2lsbGVybyBjYXNpbGxlcm89e2Nhc2lsbGVyb30+XHJcbiAgICAgICAgPGRpdiBpZD17aWRTZWNjaW9ufT5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8QnV0dG9uIGNsYXNzTmFtZT1cInNwZWNpYWwtYnV0dG9uXCIgaWQ9e2lkQnV0dG9ufVxyXG4gICAgICAgICAgICBvbkNsaWNrPXsoZXZlbnQpPT57XHJcbiAgICAgICAgICAgICAgICBpcihKU09OLnBhcnNlKChldmVudC50YXJnZXQhIGFzIHVua25vd24gYXMgSFRNTEJ1dHRvbkVsZW1lbnQpLmdldEF0dHJpYnV0ZSgnZGVmLWJ1dHRvbicpISkpXHJcbiAgICAgICAgICAgIH19XHJcbiAgICAgICAgPmlyIChpbnRlcm5vKTwvQnV0dG9uPlxyXG4gICAgICAgIDxEaWFsb2cgXHJcbiAgICAgICAgICAgIGNsYXNzTmFtZT1cIm51ZXN0cm8tZGlhbG9nb1wiXHJcbiAgICAgICAgICAgIG9wZW49eyEhY29uZmlybWFyRm9yemFySXJ9XHJcbiAgICAgICAgICAgIG9uQ2xvc2U9eygpPT5zZXRDb25maXJtYXJGb3J6YXJJcihudWxsKX1cclxuICAgICAgICA+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibnVlc3Ryby1kaWFsb2dvXCI+XHJcbiAgICAgICAgICAgICAgICA8VHlwb2dyYXBoeT5ObyBzZSBwdWVkZSBhdmFuemFyIGFsIHNpZ3VpZW50ZSBmb3JtdWxhcmlvLjwvVHlwb2dyYXBoeT5cclxuICAgICAgICAgICAgICAgIDxUeXBvZ3JhcGh5PlF1aXrDoXMgbm8gdGVybWluw7MgZGUgY29udGVzdGFyIGxhcyBwcmVndW50YXMgY29ycmVzcG9uZGllbnRlczwvVHlwb2dyYXBoeT5cclxuICAgICAgICAgICAgICAgIDxUeXBvZ3JhcGh5PlF1aXrDoXMgbm8gY29ycmVzcG9uZGUgZW4gYmFzZSBhIGxhcyByZXNwdWVzdGFzIG9idGVuaWRhczwvVHlwb2dyYXBoeT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxCdXR0b24gY29sb3I9XCJzZWNvbmRhcnlcIiBvbkNsaWNrPXsoKT0+Y29uZmlybWFyRm9yemFySXIgJiYgaXIoY29uZmlybWFyRm9yemFySXIpfT5mb3J6YXI8L0J1dHRvbj5cclxuICAgICAgICAgICAgPEJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiB2YXJpYW50PVwiY29udGFpbmVkXCIgb25DbGljaz17KCk9PnNldENvbmZpcm1hckZvcnphcklyKG51bGwpfT5FbnRlbmRpZG88L0J1dHRvbj5cclxuICAgICAgICA8L0RpYWxvZz5cclxuICAgIDwvRGVzcGxlZ2FyQ2FzaWxsZXJvPlxyXG59XHJcblxyXG5mdW5jdGlvbiBDYXNpbGxlcm9EZXNjb25vY2lkbyhwcm9wczp7Y2FzaWxsZXJvOkNhc2lsbGVyb0Jhc2UsIGZvclBrOkZvclBrfSl7XHJcbiAgICByZXR1cm4gPERlc3BsZWdhckNhc2lsbGVybyBcclxuICAgICAgICBpZD17YGNhc2lsbGVyb2Rlc2Nvbm9jaWRvLSR7cHJvcHMuY2FzaWxsZXJvLmlkX2Nhc2lsbGVyb31gfVxyXG4gICAgICAgIGNhc2lsbGVybz17cHJvcHMuY2FzaWxsZXJvIGFzIEJsb3F1ZX1cclxuICAgICAgICBzdHlsZT17e2Rpc3BsYXk6J25vbmUnfX1cclxuICAgID5cclxuICAgICAgICA8VHlwb2dyYXBoeT5UaXBvIGRlIGNhc2lsbGVybyBubyBpbXBsZW1lbnRhZG86IFwie3Byb3BzLmNhc2lsbGVyby50aXBvY31cIiBwYXJhIFwie3Byb3BzLmNhc2lsbGVyby5jYXNpbGxlcm99XCI8L1R5cG9ncmFwaHk+XHJcbiAgICAgICAgPEVuY2FiZXphZG9EZXNwbGllZ3VlIGNhc2lsbGVybz17cHJvcHMuY2FzaWxsZXJvIGFzIENhc2lsbGVyb0VuY2FiZXphYmxlfSBsZWVyPXtmYWxzZX0gZm9yUGs9e3Byb3BzLmZvclBrfS8+XHJcbiAgICA8L0Rlc3BsZWdhckNhc2lsbGVybz5cclxufVxyXG5cclxuZnVuY3Rpb24gdXNlU2VsZWN0b3JWaXZpZW5kYShmb3JQazpGb3JQayl7XHJcbiAgICByZXR1cm4gdXNlU2VsZWN0b3IoKHN0YXRlOkNhc29TdGF0ZSk9PntcclxuICAgICAgICB2YXIgZXN0cnVjdHVyYSA9IGdldEVzdHJ1Y3R1cmEoKTtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBmb3JtdWxhcmlvOiBlc3RydWN0dXJhLmZvcm11bGFyaW9zW2ZvclBrLmZvcm11bGFyaW9dLmNhc2lsbGVyb3MsXHJcbiAgICAgICAgICAgIG1vZG9EZXNwbGllZ3VlOiB0cnVlIHx8IHN0YXRlLm1vZG8uZGVtbz9zdGF0ZS5vcGNpb25lcy5tb2RvRGVzcGxpZWd1ZToncmVsZXZhbWllbnRvJyxcclxuICAgICAgICAgICAgbW9kbzogc3RhdGUubW9kbyxcclxuICAgICAgICAgICAgb3BjaW9uZXM6IHN0YXRlLm9wY2lvbmVzLFxyXG4gICAgICAgIH1cclxuICAgIH0pXHJcbn1cclxuXHJcbmZ1bmN0aW9uIENvbmp1bnRvUHJlZ3VudGFzRGVzcGxpZWd1ZShwcm9wczp7Y2FzaWxsZXJvOkNvbmp1bnRvUHJlZ3VudGFzLCBmb3JtdWxhcmlvOkZvcm11bGFyaW8sIGZvclBrOkZvclBrfSl7XHJcbiAgICBsZXQge2Nhc2lsbGVybywgZm9yUGt9ID0gcHJvcHM7XHJcbiAgICB2YXIgaWQgPSBgY29uanVudG8tcHJlZ3VudGFzLSR7Y2FzaWxsZXJvLmlkX2Nhc2lsbGVyb31gO1xyXG4gICAgcmVnaXN0cmFyRWxlbWVudG8oe1xyXG4gICAgICAgIGlkLCBcclxuICAgICAgICBkaXJlY3Q6dHJ1ZSwgXHJcbiAgICAgICAgZnVuOiByZWdpc3RyYWRvckRlVmFyaWFibGUoY2FzaWxsZXJvKVxyXG4gICAgfSlcclxuICAgIGxldCBtb2RvRGVzcGxpZWd1ZSA9IFwibm9ybWFsXCI7XHJcbiAgICBsZXQgaGFiaWxpdGFkbyA9IHRydWU7XHJcbiAgICByZXR1cm4gaGFiaWxpdGFkbyB8fCBtb2RvRGVzcGxpZWd1ZT09J21ldGFkYXRvcyc/PERlc3BsZWdhckNhc2lsbGVybyBpZD17aWR9IGNhc2lsbGVybz17Y2FzaWxsZXJvfT5cclxuICAgICAgICA8RW5jYWJlemFkb0Rlc3BsaWVndWUgY2FzaWxsZXJvPXtjYXNpbGxlcm99IGZvclBrPXtmb3JQa30gbGVlcj17Y2FzaWxsZXJvLmxlZXIhPT1mYWxzZX0vPlxyXG4gICAgICAgIDxEZXNwbGVnYXJDb250ZW5pZG9JbnRlcm5vQmxvcXVlT0Zvcm11bGFyaW8gYmxvcXVlT0Zvcm11bGFyaW89e2Nhc2lsbGVyb30gZm9ybXVsYXJpbz17cHJvcHMuZm9ybXVsYXJpb30gZm9yUGs9e2ZvclBrfSBtdWx0aXBsZT17ZmFsc2V9Lz5cclxuICAgIDwvRGVzcGxlZ2FyQ2FzaWxsZXJvPjpudWxsO1xyXG59XHJcblxyXG5mdW5jdGlvbiBEZXNwbGVnYXJDb250ZW5pZG9JbnRlcm5vQmxvcXVlT0Zvcm11bGFyaW8ocHJvcHM6e2Jsb3F1ZU9Gb3JtdWxhcmlvOkJsb3F1ZXxGb3JtdWxhcmlvfENvbmp1bnRvUHJlZ3VudGFzLCBmb3JtdWxhcmlvOkZvcm11bGFyaW8sIGZvclBrOkZvclBrLCBtdWx0aXBsZTpib29sZWFufSl7XHJcbiAgICB2YXIgcGFyY2lhbGl6YWJsZSA9IHByb3BzLmJsb3F1ZU9Gb3JtdWxhcmlvLnRpcG9jPT0nRic7XHJcbiAgICBjb25zdCBbdmVyVG9kbywgc2V0VmVyVG9kb10gPSB1c2VTdGF0ZSghcGFyY2lhbGl6YWJsZSk7XHJcbiAgICBjb25zdCBbZm9yUGtBY3R1YWwsIHNldEZvclBrQWN0dWFsXSA9IHVzZVN0YXRlPElkQ2FzaWxsZXJvfG51bGw+KG51bGwpO1xyXG4gICAgaWYocGFyY2lhbGl6YWJsZSl7XHJcbiAgICAgICAgaWYoZm9yUGtBY3R1YWwgIT0gcHJvcHMuYmxvcXVlT0Zvcm11bGFyaW8uY2FzaWxsZXJvKXtcclxuICAgICAgICAgICAgc2V0VmVyVG9kbyhmYWxzZSlcclxuICAgICAgICAgICAgc2V0Rm9yUGtBY3R1YWwocHJvcHMuYmxvcXVlT0Zvcm11bGFyaW8uY2FzaWxsZXJvKVxyXG4gICAgICAgIH1cclxuICAgICAgICB1c2VFZmZlY3QoKCk9PntcclxuICAgICAgICAgICAgdmFyIHRpbWVyID0gc2V0VGltZW91dCgoKT0+e1xyXG4gICAgICAgICAgICAgICAgc2V0VmVyVG9kbyh0cnVlKTtcclxuICAgICAgICAgICAgfSwyNTApXHJcbiAgICAgICAgICAgIHJldHVybiAoKT0+e1xyXG4gICAgICAgICAgICAgICAgaWYodGltZXIpe1xyXG4gICAgICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lcik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgfVxyXG4gICAgY29uc3QgbGltaXRlTm9WZXJUb2RvID0gMztcclxuICAgIHVzZUVmZmVjdCgoKT0+e1xyXG4gICAgICAgIGlmKHByb3BzLmJsb3F1ZU9Gb3JtdWxhcmlvLnRpcG9jPT0nRicpe1xyXG4gICAgICAgICAgICB2b2xjYWRvSW5pY2lhbEVsZW1lbnRvc1JlZ2lzdHJhZG9zKHByb3BzLmZvclBrKTtcclxuICAgICAgICB9XHJcbiAgICB9LFt0b1BsYWluRm9yUGsocHJvcHMuZm9yUGspLHZlclRvZG9dKVxyXG4gICAgdXNlTGF5b3V0RWZmZWN0KCgpID0+IHtcclxuICAgICAgICBpZihwcm9wcy5ibG9xdWVPRm9ybXVsYXJpby50aXBvYz09J0YnICYmIHZlclRvZG8pe1xyXG4gICAgICAgICAgICB2YXIge3NpZ3VpZW50ZVZhcmlhYmxlLCB2YXJpYWJsZUFjdHVhbH0gPSBkaXNwYXRjaEJ5UGFzcyhhY2Npb25fcmVnaXN0cmFyX3Jlc3B1ZXN0YSwge3Jlc3B1ZXN0YTpudWxsLCB2YXJpYWJsZTpOT19DQU1CSUFSX19TT0xPX1RSQUVSX1NUQVRVUywgZm9yUGs6cHJvcHMuZm9yUGt9KTtcclxuICAgICAgICAgICAgaWYodmFyaWFibGVBY3R1YWwgfHwgc2lndWllbnRlVmFyaWFibGUpe1xyXG4gICAgICAgICAgICAgICAgZW5mb2NhckVsZW1lbnRvRGVWYXJpYWJsZShjb2FsZXNjZSh2YXJpYWJsZUFjdHVhbCBhcyBzdHJpbmd8bnVsbCxzaWd1aWVudGVWYXJpYWJsZSBhcyBzdHJpbmd8bnVsbCkgYXMgSWRWYXJpYWJsZSlcclxuICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICB2YXIgZmVlZGJhY2tSb3dWYWxpZGF0b3IgPSBnZXRGZWVkYmFja1Jvd1ZhbGlkYXRvcigpXHJcbiAgICAgICAgICAgICAgICBpZihmZWVkYmFja1Jvd1ZhbGlkYXRvclt0b1BsYWluRm9yUGsocHJvcHMuZm9yUGspXS5yZXN1bWVuPT0nb2snKXtcclxuICAgICAgICAgICAgICAgICAgICBzY3JvbGxUb1RvcCgpXHJcbiAgICAgICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgICAgICBzY3JvbGxUb1RvcCgpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9KTtcclxuICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT1cImNvbnRlbmlkb1wiPlxyXG4gICAgICAgIHt2ZXJUb2RvP251bGw6PGRpdiBzdHlsZT17e2hlaWdodDpcIjUwMHB4XCIsIHRleHRBbGlnbjonY2VudGVyJywgdmVydGljYWxBbGlnbjonbWlkZGxlJywgd2lkdGg6JzEwMCUnLCBwb3NpdGlvbjpcImZpeGVkXCIsIGJhY2tncm91bmRDb2xvcjogJ3JnYmEoMTAwLDEwMCwxMDAsMC4zKScsIGZvbnRTaXplOicyMDAlJ319ID5jYXJnYW5kby4uLjwvZGl2Pn1cclxuICAgICAgICB7cHJvcHMuYmxvcXVlT0Zvcm11bGFyaW8uY2FzaWxsZXJvcy5tYXAoKGNhc2lsbGVybywgaSk9PntcclxuICAgICAgICAgICAgdmFyIGtleSA9IGNhc2lsbGVyby50aXBvYysnLScrY2FzaWxsZXJvLmlkX2Nhc2lsbGVybysnLScraTtcclxuICAgICAgICAgICAgcmV0dXJuICh2ZXJUb2RvIHx8IGkgPCBsaW1pdGVOb1ZlclRvZG8/XHJcbiAgICAgICAgICAgICAgICAoXHJcbiAgICAgICAgICAgICAgICAgICAgY2FzaWxsZXJvLnRpcG9jID09IFwiUFwiPzxQcmVndW50YURlc3BsaWVndWUga2V5PXtrZXl9IHByZWd1bnRhPXtjYXNpbGxlcm99IGZvclBrPXtwcm9wcy5mb3JQa30gZGVzcGxpZWd1ZUVuY2FiZXphZG89e2Nhc2lsbGVyby5kZXNwbGllZ3VlRW5jYWJlemFkbz8/KHByb3BzLmJsb3F1ZU9Gb3JtdWxhcmlvLnRpcG9jPT0nQ1AnPydsYXRlcmFsJzonc3VwZXJpb3InKX0vPjpcclxuICAgICAgICAgICAgICAgICAgICBjYXNpbGxlcm8udGlwb2MgPT0gXCJCXCI/PEJsb3F1ZURlc3BsaWVndWUga2V5PXtrZXl9IGJsb3F1ZT17Y2FzaWxsZXJvfSBmb3JtdWxhcmlvPXtwcm9wcy5mb3JtdWxhcmlvfSBmb3JQaz17cHJvcHMuZm9yUGt9Lz46XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzaWxsZXJvLnRpcG9jID09IFwiRklMVFJPXCI/PEZpbHRyb0Rlc3BsaWVndWUga2V5PXtrZXl9IGZpbHRybz17Y2FzaWxsZXJvfSBmb3JQaz17cHJvcHMuZm9yUGt9Lz46XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzaWxsZXJvLnRpcG9jID09IFwiQkZcIj88Qm90b25Gb3JtdWxhcmlvRGVzcGxpZWd1ZSBrZXk9e2tleX0gY2FzaWxsZXJvPXtjYXNpbGxlcm99IGZvcm11bGFyaW89e3Byb3BzLmZvcm11bGFyaW99IGZvclBrPXtwcm9wcy5mb3JQa30vPjpcclxuICAgICAgICAgICAgICAgICAgICBjYXNpbGxlcm8udGlwb2MgPT0gXCJDT05TXCI/PENvbnNpc3RlbmNpYURlc3BsaWVndWUga2V5PXtrZXl9IGNhc2lsbGVybz17Y2FzaWxsZXJvfSBmb3JQaz17cHJvcHMuZm9yUGt9Lz46XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzaWxsZXJvLnRpcG9jID09IFwiQ1BcIj88Q29uanVudG9QcmVndW50YXNEZXNwbGllZ3VlIGtleT17a2V5fSBjYXNpbGxlcm89e2Nhc2lsbGVyb30gZm9ybXVsYXJpbz17cHJvcHMuZm9ybXVsYXJpb30gZm9yUGs9e3Byb3BzLmZvclBrfS8+OlxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2lsbGVyby50aXBvYyA9PSBcIlRFWFRPXCI/PFRleHRvRGVzcGxpZWd1ZSBrZXk9e2tleX0gY2FzaWxsZXJvPXtjYXNpbGxlcm99IGZvclBrPXtwcm9wcy5mb3JQa30vPjpcclxuICAgICAgICAgICAgICAgICAgICBjYXNpbGxlcm8udGlwb2MgPT0gXCJMSUJSRVwiPzxMaWJyZURlc3BsaWVndWUga2V5PXtrZXl9IGNhc2lsbGVybz17Y2FzaWxsZXJvfSBmb3JtdWxhcmlvPXtwcm9wcy5mb3JtdWxhcmlvfSBmb3JQaz17cHJvcHMuZm9yUGt9Lz46XHJcbiAgICAgICAgICAgICAgICAgICAgPENhc2lsbGVyb0Rlc2Nvbm9jaWRvIGtleT17a2V5fSBjYXNpbGxlcm89e2Nhc2lsbGVyb30gZm9yUGs9e3Byb3BzLmZvclBrfS8+XHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgIDppPT1saW1pdGVOb1ZlclRvZG8/XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGtleT0nJHNwaW5uZXInIGNsYXNzTmFtZT1cInNwaW5uZXItYm9yZGVyXCIgcm9sZT1cInN0YXR1c1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuPmNhcmdhbmRvIGJsb3F1ZS4uLjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA6bnVsbFxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgfSlcclxuICAgIH08L2Rpdj5cclxufVxyXG5cclxuZnVuY3Rpb24gQmxvcXVlRGVzcGxpZWd1ZShwcm9wczp7YmxvcXVlOkJsb3F1ZSwgZm9ybXVsYXJpbzpGb3JtdWxhcmlvLCBmb3JQazpGb3JQa30pe1xyXG4gICAgdmFyIHtibG9xdWUsIGZvclBrfSA9IHByb3BzO1xyXG4gICAgdmFyIGtleT1ibG9xdWUudmVyX2lkIT0nLScgJiYgYmxvcXVlLnZlcl9pZCB8fCBibG9xdWUuY2FzaWxsZXJvO1xyXG4gICAgdmFyIGFjdGl2ZVN0ZXA9MDtcclxuICAgIHZhciBtdWx0aXBsZSA9ICEhYmxvcXVlLnVuaWRhZF9hbmFsaXNpcztcclxuICAgIHZhciBsaXN0YSA9IFt7Zm9yUGssIGtleTowLCBtdWx0aXBsZTpmYWxzZX1dO1xyXG4gICAgdmFyIGhhYmlsaXRhZG9yID0gYmxvcXVlLmV4cHJlc2lvbl9oYWJpbGl0YXJfanM/Z2V0RnVuY2lvbkhhYmlsaXRhcihibG9xdWUuZXhwcmVzaW9uX2hhYmlsaXRhcl9qcyk6KCk9PnRydWU7XHJcbiAgICB2YXIge21vZG9EZXNwbGllZ3VlfSA9IHVzZVNlbGVjdG9yVml2aWVuZGEoZm9yUGspO1xyXG4gICAgaWYobXVsdGlwbGUpe1xyXG4gICAgICAgIC8vIFRPRE86IEdFTkVSQUxJWkFSXHJcbiAgICAgICAgLy8gQHRzLWlnbm9yZSBcclxuICAgICAgICAvLyBsaXN0YT1yZXNwdWVzdGFzLnBlcnNvbmFzLm1hcCgoX3BlcnNvbmEsIGkpPT4oXHJcbiAgICAgICAgLy8gICAgIHtmb3JQazp7Li4uZm9yUGssIHBlcnNvbmE6aSsxfSwga2V5OmkrMSwgbXVsdGlwbGU6dHJ1ZX1cclxuICAgICAgICAvLyApKVxyXG4gICAgfVxyXG4gICAgdmFyIGlkID0gYGJsb3F1ZS0ke2Jsb3F1ZS5pZF9jYXNpbGxlcm99YDtcclxuICAgIHJlZ2lzdHJhckVsZW1lbnRvKHtcclxuICAgICAgICBpZCxcclxuICAgICAgICBzdHlsZTonZGlzcGxheScsXHJcbiAgICAgICAgZnVuOiAocmVzcHVlc3RhczpSZXNwdWVzdGFzKT0+IGhhYmlsaXRhZG9yKHJlc3B1ZXN0YXMpIHx8IG1vZG9EZXNwbGllZ3VlPT0nbWV0YWRhdG9zJz8ndW5zZXQnOidub25lJ1xyXG4gICAgfSlcclxuICAgIHJldHVybiA8RGVzcGxlZ2FyQ2FzaWxsZXJvIGNhc2lsbGVybz17YmxvcXVlfSBudWVzdHJvLWJsb3F1ZT17YmxvcXVlLmlkX2Nhc2lsbGVyb30gZXMtbXVsdGlwbGU9e211bHRpcGxlPydTSSc6J05PJ30gaWQ9e2lkfT5cclxuICAgICAgICA8RW5jYWJlemFkb0Rlc3BsaWVndWUgY2FzaWxsZXJvPXtibG9xdWV9IGZvclBrPXtmb3JQa30vPlxyXG4gICAgICAgIHtsaXN0YS5tYXAoKHtrZXksIGZvclBrLCBtdWx0aXBsZX0pPT5cclxuICAgICAgICAgICAgPERlc3BsZWdhckNvbnRlbmlkb0ludGVybm9CbG9xdWVPRm9ybXVsYXJpbyBrZXk9e2tleX0gYmxvcXVlT0Zvcm11bGFyaW89e2Jsb3F1ZX0gZm9ybXVsYXJpbz17cHJvcHMuZm9ybXVsYXJpb30gZm9yUGs9e2ZvclBrfSBtdWx0aXBsZT17bXVsdGlwbGV9Lz5cclxuICAgICAgICApfVxyXG4gICAgPC9EZXNwbGVnYXJDYXNpbGxlcm8+O1xyXG59XHJcblxyXG5jb25zdCBGb3JtdWxhcmlvRW5jYWJlemFkbyA9IERlc3BsaWVndWVFbmNhYmV6YWRvO1xyXG5cclxuZnVuY3Rpb24gTWVudUxldHJhKHByb3BzOnt0YW1hbm5pbzpudW1iZXIsIGRlbm9taW5hY2lvbjpzdHJpbmd9KXtcclxuICAgIGNvbnN0IGNhbWJpYXJMZXRyYSA9ICh0YW1hbm5pbzpudW1iZXIpPT57XHJcbiAgICAgICAgdmFyIHJvb3QgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XHJcbiAgICAgICAgcm9vdC5zdHlsZS5mb250U2l6ZT10YW1hbm5pbytcInB4XCI7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gPE1lbnVJdGVtXHJcbiAgICAgICAgb25DbGljaz17KCk9PmNhbWJpYXJMZXRyYShwcm9wcy50YW1hbm5pbyl9IHN0eWxlPXt7Zm9udFNpemU6cHJvcHMudGFtYW5uaW8rJ3B4J319XHJcbiAgICA+bGV0cmEge3Byb3BzLmRlbm9taW5hY2lvbn08L01lbnVJdGVtPlxyXG59XHJcblxyXG5mdW5jdGlvbiBGYXN0U2V0dHVwKCl7XHJcbiAgICBjb25zdCBbYW5jaG9yRWwsIHNldEFuY2hvckVsXSA9IFJlYWN0LnVzZVN0YXRlKG51bGwpO1xyXG4gICAgY29uc3QgW29wZW4sIHNldE9wZW5dID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgaGFuZGxlQ2xpY2sgPSAoZXZlbnQ6YW55KSA9PiB7XHJcbiAgICAgICAgc2V0QW5jaG9yRWwoZXZlbnQuY3VycmVudFRhcmdldCk7XHJcbiAgICAgICAgc2V0T3BlbigocHJldikgPT4gIXByZXYpO1xyXG4gICAgfTtcclxuICAgIGNvbnN0IGRpc3BhdGNoID0gdXNlRGlzcGF0Y2goKTtcclxuICAgIGNvbnN0IGNhbWJpYXIgPSAobW9kb0Rlc3BsaWVndWU6TW9kb0Rlc3BsaWVndWUpPT57XHJcbiAgICAgICAgZGlzcGF0Y2goZGlzcGF0Y2hlcnMuTU9ET19ERVNQTElFR1VFKHttb2RvRGVzcGxpZWd1ZX0pKTtcclxuICAgICAgICBzZXRPcGVuKGZhbHNlKVxyXG4gICAgfVxyXG4gICAgY29uc3Qgb3BjaW9uZXMgPSB1c2VTZWxlY3Rvcigoc3RhdGU6Q2Fzb1N0YXRlKT0+c3RhdGUub3BjaW9uZXMpXHJcbiAgICByZXR1cm4gPD5cclxuICAgICAgICA8QnV0dG9uIG9uQ2xpY2s9e2hhbmRsZUNsaWNrfT5cclxuICAgICAgICAgICAgPElDT04uU2V0dGluZ3MvPlxyXG4gICAgICAgIDwvQnV0dG9uPlxyXG4gICAgICAgIDxNZW51IG9wZW49e29wZW59IGFuY2hvckVsPXthbmNob3JFbH0gb25DbG9zZT17KCk9PnNldE9wZW4oZmFsc2UpfT5cclxuICAgICAgICAgICAgPE1lbnVJdGVtIG9uQ2xpY2s9eygpPT5jYW1iaWFyKFwicmVsZXZhbWllbnRvXCIpfT5ub3JtYWw8L01lbnVJdGVtPlxyXG4gICAgICAgICAgICA8TWVudUl0ZW0gb25DbGljaz17KCk9PmNhbWJpYXIoXCJQREZcIiAgICAgICAgICl9PlBERiBwYXJhIHJlbGV2YW1pZW50bzwvTWVudUl0ZW0+XHJcbiAgICAgICAgICAgIDxNZW51SXRlbSBvbkNsaWNrPXsoKT0+Y2FtYmlhcihcIm1ldGFkYXRvc1wiICAgKX0+cmV2aXNhciBtZXRhZGF0b3M8L01lbnVJdGVtPlxyXG4gICAgICAgICAgICA8RGl2aWRlci8+XHJcbiAgICAgICAgICAgIDxNZW51TGV0cmEgdGFtYW5uaW89ezEyfSBkZW5vbWluYWNpb24gPSBcIm11eSBjaGljYVwiLz5cclxuICAgICAgICAgICAgPE1lbnVMZXRyYSB0YW1hbm5pbz17MTR9IGRlbm9taW5hY2lvbiA9IFwiY2hpY2FcIi8+XHJcbiAgICAgICAgICAgIDxNZW51TGV0cmEgdGFtYW5uaW89ezE2fSBkZW5vbWluYWNpb24gPSBcIm5vcm1hbFwiLz5cclxuICAgICAgICAgICAgPE1lbnVMZXRyYSB0YW1hbm5pbz17MTl9IGRlbm9taW5hY2lvbiA9IFwiZ3JhbmRlXCIvPlxyXG4gICAgICAgICAgICA8TWVudUxldHJhIHRhbWFubmlvPXsyMn0gZGVub21pbmFjaW9uID0gXCJlbm9ybWVcIi8+XHJcbiAgICAgICAgICAgIDxEaXZpZGVyLz5cclxuICAgICAgICAgICAgPE1lbnVJdGVtPjxsYWJlbD48Q2hlY2tib3ggY2hlY2tlZD17b3BjaW9uZXMuY29uQ2FtcG9PcGNpb25lc30gb25DaGFuZ2U9e1xyXG4gICAgICAgICAgICAgICAgKCk9PmRpc3BhdGNoKGRpc3BhdGNoZXJzLlNFVF9PUENJT04oe29wY2lvbjonY29uQ2FtcG9PcGNpb25lcycsIHZhbG9yOiFvcGNpb25lcy5jb25DYW1wb09wY2lvbmVzfSkpXHJcbiAgICAgICAgICAgIH0gaW5wdXRQcm9wcz17eyAnYXJpYS1sYWJlbCc6ICdwcmltYXJ5IGNoZWNrYm94JyB9fS8+Y2FtcG8gb3BjaW9uZXM8L2xhYmVsPjwvTWVudUl0ZW0+XHJcbiAgICAgICAgICAgIDxNZW51SXRlbT48bGFiZWw+PENoZWNrYm94IGNoZWNrZWQ9e29wY2lvbmVzLnNhbHRvQXV0b21hdGljb30gb25DaGFuZ2U9e1xyXG4gICAgICAgICAgICAgICAgKCk9PmRpc3BhdGNoKGRpc3BhdGNoZXJzLlNFVF9PUENJT04oe29wY2lvbjonc2FsdG9BdXRvbWF0aWNvJywgdmFsb3I6IW9wY2lvbmVzLnNhbHRvQXV0b21hdGljb30pKVxyXG4gICAgICAgICAgICB9IGlucHV0UHJvcHM9e3sgJ2FyaWEtbGFiZWwnOiAncHJpbWFyeSBjaGVja2JveCcgfX0vPnNhbHRvIGF1dG9tw6F0aWNvPC9sYWJlbD48L01lbnVJdGVtPlxyXG4gICAgICAgIDwvTWVudT5cclxuICAgIDwvPjtcclxufVxyXG5cclxuZnVuY3Rpb24gQmFycmFEZU5hdmVnYWNpb24ocHJvcHM6e2ZvclBrOkZvclBrLCBzb2xvTGVjdHVyYTpib29sZWFuLCBtb2RvRGlyZWN0bzpib29sZWFufSl7XHJcbiAgICBjb25zdCBkaXNwYXRjaCA9IHVzZURpc3BhdGNoKCk7XHJcbiAgICBjb25zdCBmb3JQayA9IHByb3BzLmZvclBrO1xyXG4gICAgY29uc3Qge29wY2lvbmVzfSA9IHVzZVNlbGVjdG9yVml2aWVuZGEoZm9yUGspO1xyXG4gICAgY29uc3QgW2NvbmZpcm1hQ2VycmFyLCBzZXRDb25maXJtYUNlcnJhcl0gPSB1c2VTdGF0ZTxib29sZWFufG51bGw+KGZhbHNlKTtcclxuICAgIHZhciBkb21pbmlvID0gZ2V0RGF0b3NCeVBhc3MoKS5pbmZvcm1hY2lvbkhkcltmb3JQay52aXZpZW5kYV0udGVtLmRvbWluaW87XHJcbiAgICB2YXIgY2VycmFyRGlyZWN0byA9IGFzeW5jIGZ1bmN0aW9uKCl7XHJcbiAgICAgICAgcmVtb3ZlQ1NTQnlJZChCT09UU1RSQVBfNV8xXzNfU1JDKTtcclxuICAgICAgICB2YXIgZXN0cnVjdHVyYSA9IGdldEVzdHJ1Y3R1cmEoKTtcclxuICAgICAgICBnb3RvQ29uc2lzdGlyKFxyXG4gICAgICAgICAgICBlc3RydWN0dXJhLm9wZXJhdGl2byBhcyBJZE9wZXJhdGl2byxcclxuICAgICAgICAgICAgZ2V0RGF0b3NCeVBhc3MoKS5pbmZvcm1hY2lvbkhkcltmb3JQay52aXZpZW5kYV0udGFyZWEudGFyZWEsXHJcbiAgICAgICAgICAgIGZvclBrLnZpdmllbmRhXHJcbiAgICAgICAgKTtcclxuICAgICAgICAvL3ZhciBoYXNoPW5ldyBVUkxTZWFyY2hQYXJhbXMobG9jYXRpb24uaGFzaD8ucmVwbGFjZSgvXlxcIy8sJycpLnNwbGl0KCcmYXV0b3Byb2NlZCcpWzBdKTtcclxuICAgICAgICAvLy8vaGFzaC5kZWxldGUoJ2F1dG9wcm9jZWQnKVxyXG4gICAgICAgIC8vY2xvc2UoKTtcclxuICAgICAgICAvL2xvY2F0aW9uLmhhc2g9aGFzaC50b1N0cmluZygpO1xyXG4gICAgfVxyXG4gICAgdmFyIGJvdG9uZXNGb3JtdWxhcmlvPVtdO1xyXG4gICAgaWYoIW9wY2lvbmVzLm1vZG9EaXJlY3RvKXtcclxuICAgICAgICBib3RvbmVzRm9ybXVsYXJpby5wdXNoKHtxdWU6ICdoZHInICAgICwgYWJyOidIZFInLCBpZDpJRF9CT1RPTl9WT0xWRVJfSERSLCBsYWJlbDonaG9qYSBkZSBydXRhJywgcmV0cm9jZXNvOjB9KVxyXG4gICAgfVxyXG4gICAgb3BjaW9uZXMucGlsYUZvclBrLmZvckVhY2goKGZvclBrLGkpPT5cclxuICAgICAgICBib3RvbmVzRm9ybXVsYXJpby5wdXNoKHtxdWU6J3ZvbHZlcicsIGFicjpmb3JQay5mb3JtdWxhcmlvLnJlcGxhY2UoL15GOi8sJycpLCBsYWJlbDpmb3JQay5mb3JtdWxhcmlvLCByZXRyb2Nlc286b3BjaW9uZXMucGlsYUZvclBrLmxlbmd0aC1pfSlcclxuICAgIClcclxuICAgIGJvdG9uZXNGb3JtdWxhcmlvLnB1c2goe3F1ZTonJywgYWJyOmZvclBrLmZvcm11bGFyaW8ucmVwbGFjZSgvXkY6LywnJyksIGxhYmVsOmZvclBrLmZvcm11bGFyaW8sIHJldHJvY2VzbzowfSk7XHJcbiAgICByZWdpc3RyYXJFbGVtZW50byh7aWQ6cHJvcHMubW9kb0RpcmVjdG8/SURfQk9UT05fQ0VSUkFSOklEX0JPVE9OX1ZPTFZFUl9IRFIsIGRpcmVjdDp0cnVlLFxyXG4gICAgICAgIGZ1bjooXHJcbiAgICAgICAgICAgIHI6UmVzcHVlc3RhcywgXHJcbiAgICAgICAgICAgIF9mZWVkYmFja0Zvcm06IEZvcm1TdHJ1Y3R1cmVTdGF0ZTxJZFZhcmlhYmxlLCBWYWxvciwgSWRGaW4+LCBcclxuICAgICAgICAgICAgZWxlbWVudG86SFRNTERpdkVsZW1lbnQsIFxyXG4gICAgICAgICAgICBmZWVkYmFja0FsbDp7W2Zvcm11bGFyaW8gaW4gUGxhaW5Gb3JQa106Rm9ybVN0cnVjdHVyZVN0YXRlPElkVmFyaWFibGUsIFZhbG9yLCBJZEZpbj59LCBcclxuICAgICAgICAgICAgX2VzdHJ1Y3R1cmE6RXN0cnVjdHVyYVxyXG4gICAgICAgICk9PntcclxuICAgICAgICAgICAgZWxlbWVudG8uc2V0QXR0cmlidXRlKCdyZXN1bWVuLWVzdGFkbycsY2FsY3VsYXJSZXN1bWVuVml2aWVuZGEoZm9yUGssIGZlZWRiYWNrQWxsLCByKS5yZXN1bWVuRXN0YWRvKTtcclxuICAgICAgICB9XHJcbiAgICB9KVxyXG4gICAgcmV0dXJuIDw+XHJcbiAgICAgICAgPEJ1dHRvbkdyb3VwIGtleT1cImZvcm11bGFyaW9zXCIgY2xhc3NOYW1lPVwiYmFycmEtbmF2ZWdhY2lvblwiIHNvbG8tbGVjdHVyYT17cHJvcHMuc29sb0xlY3R1cmE/J3NpJzonbm8nfSA+XHJcbiAgICAgICAgICAgIHtib3RvbmVzRm9ybXVsYXJpby5tYXAoKGIsaSk9PlxyXG4gICAgICAgICAgICAgICAgPEJ1dHRvbiBjb2xvcj17Yi5xdWU9PWZvclBrLmZvcm11bGFyaW8/XCJwcmltYXJ5XCI6XCJpbmhlcml0XCJ9IHZhcmlhbnQ9XCJvdXRsaW5lZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgaWQ9e2IuaWR9XHJcbiAgICAgICAgICAgICAgICAgICAga2V5PXtgJHtpfS0ke2IucXVlfS0ke2IucmV0cm9jZXNvfWB9XHJcbiAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9eyFiLnF1ZX1cclxuICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKT0+e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNwYXRjaChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGIucXVlPT0naGRyJz9kaXNwYXRjaGVycy5WT0xWRVJfSERSKHt9KTpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoZXJzLlZPTFZFUl9ERV9GT1JNVUxBUklPKHttYWduaXR1ZFJldHJvY2VzbzpiLnJldHJvY2Vzb30pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGIucXVlPT0naGRyJz9udWxsOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2hCeVBhc3MoYWNjaW9uX2FicmlyX2Zvcm11bGFyaW8se2ZvclBrOm9wY2lvbmVzLnBpbGFGb3JQa1tvcGNpb25lcy5waWxhRm9yUGsubGVuZ3RoLWIucmV0cm9jZXNvXX0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwiYWJyXCI+e2IuYWJyfTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJsYWJlbFwiPntiLmxhYmVsfTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxyXG4gICAgICAgICAgICApfVxyXG4gICAgICAgIDwvQnV0dG9uR3JvdXA+XHJcbiAgICAgICAge3Byb3BzLnNvbG9MZWN0dXJhPzxUeXBvZ3JhcGh5IGNvbXBvbmVudD1cInNwYW5cIiBzdHlsZT17e21hcmdpbjonMCAxMHB4J319PiAoU29sbyBMZWN0dXJhKSA8L1R5cG9ncmFwaHk+Om51bGx9XHJcbiAgICAgICAge3Byb3BzLm1vZG9EaXJlY3RvP1xyXG4gICAgICAgICAgICA8PlxyXG4gICAgICAgICAgICAgICAgPEJ1dHRvbkdyb3VwIGtleT1cInZvbHZlcl95X2dyYWJhclwiIHN0eWxlPXt7bWFyZ2luOicwIDAgMCAzMHB4J319PlxyXG4gICAgICAgICAgICAgICAgICAgIDxCdXR0b25cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ9e0lEX0JPVE9OX0NFUlJBUn1cclxuICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I9XCJpbmhlcml0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudD1cIm91dGxpbmVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17YXN5bmMgKCk9PntcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHByb3BzLnNvbG9MZWN0dXJhIHx8ICFnZXREaXJ0eSgpKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZXJyYXJEaXJlY3RvKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRDb25maXJtYUNlcnJhcih0cnVlKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPElDT04uRXhpdFRvQXBwLz5cclxuICAgICAgICAgICAgICAgICAgICA8L0J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8RGlhbG9nXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wZW49eyEhY29uZmlybWFDZXJyYXJ9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vaGFjZSBxdWUgbm8gc2UgY2llcnJlIGVsIG1lbnNhamVcclxuICAgICAgICAgICAgICAgICAgICAgICAgb25DbG9zZT17KCk9PnNldENvbmZpcm1hQ2VycmFyKGZhbHNlKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbGxlZGJ5PVwiYWxlcnQtZGlhbG9nLXRpdGxlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXJpYS1kZXNjcmliZWRieT1cImFsZXJ0LWRpYWxvZy1kZXNjcmlwdGlvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8RGlhbG9nVGl0bGUgaWQ9XCJhbGVydC1kaWFsb2ctdGl0bGVcIj5Db25maXJtZSBjaWVycmUgZGUgZW5jdWVzdGE8L0RpYWxvZ1RpdGxlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8RGlhbG9nQ29udGVudD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxEaWFsb2dDb250ZW50VGV4dCBpZD1cImFsZXJ0LWRpYWxvZy1kZXNjcmlwdGlvblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVzdMOhIHBvciBzYWxpciBkZSBsYSBlbmN1ZXN0YSwgc2UgcGVyZGVyw6FuIGxvcyBjYW1iaW9zIG5vIGd1YXJkYWRvcy5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvRGlhbG9nQ29udGVudFRleHQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvRGlhbG9nQ29udGVudD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPERpYWxvZ0FjdGlvbnM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QnV0dG9uIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpPT57XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlcnJhckRpcmVjdG8oKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPVwic2Vjb25kYXJ5XCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudD1cIm91dGxpbmVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjYXJ0YXIgY2FtYmlvcyB5IGNlcnJhclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9CdXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QnV0dG9uIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpPT57XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldENvbmZpcm1hQ2VycmFyKGZhbHNlKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJjb250YWluZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVhciBlZGl0YW5kbyBlbmN1ZXN0YVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9CdXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9EaWFsb2dBY3Rpb25zPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvRGlhbG9nPlxyXG4gICAgICAgICAgICAgICAgICAgIHtwcm9wcy5zb2xvTGVjdHVyYT9udWxsOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8QnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD17XCJzYXZlLWJ1dHRvblwifVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I9XCJpbmhlcml0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJvdXRsaW5lZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17dHJ1ZX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e2FzeW5jICgpPT50cnVlfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SUNPTi5TYXZlLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9CdXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgPC9CdXR0b25Hcm91cD5cclxuICAgICAgICAgICAgPC8+XHJcbiAgICAgICAgOm51bGx9XHJcbiAgICAgICAgPFR5cG9ncmFwaHkgY2xhc3NOYW1lPVwibW9zdHJhci1mb3JQa1wiIGNvbXBvbmVudD1cInNwYW5cIiBzdHlsZT17e21hcmdpbjonMCAxMHB4J319PiBcclxuICAgICAgICAgICAge1ZFUl9ET01JTklPPzxkaXYga2V5PXtkb21pbmlvfT48c3Bhbj5kb21pbmlvPC9zcGFuPjxzcGFuPntkb21pbmlvfTwvc3Bhbj48L2Rpdj46Jyd9XHJcbiAgICAgICAgICAgIHtsaWtlQXIocHJvcHMuZm9yUGspLmZpbHRlcigoXyxrKT0+ayE9J2Zvcm11bGFyaW8nKS5tYXAoKHYsayk9PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBrZXk9e2t9PjxzcGFuPntrfTwvc3Bhbj48c3Bhbj57dn08L3NwYW4+PC9kaXY+XHJcbiAgICAgICAgICAgICkuYXJyYXkoKX0gXHJcbiAgICAgICAgPC9UeXBvZ3JhcGh5PlxyXG4gICAgICAgIDxGYXN0U2V0dHVwLz5cclxuICAgIDwvPlxyXG59XHJcblxyXG5mdW5jdGlvbiBCb3RvblZvbHZlckVuRGl2KHtpZH06e2lkOnN0cmluZ30pe1xyXG4gICAgdmFyIHtvcGNpb25lc30gPSB1c2VTZWxlY3Rvcigoc3RhdGU6Q2Fzb1N0YXRlKT0+KHtvcGNpb25lczpzdGF0ZS5vcGNpb25lc30pKTtcclxuICAgIGNvbnN0IGRpc3BhdGNoID0gdXNlRGlzcGF0Y2goKTtcclxuICAgIHZhciBlc1ZvbHZlciA9IG9wY2lvbmVzLnBpbGFGb3JQay5sZW5ndGg+MDtcclxuICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT1cImRpdi1ib3Rvbi12b2x2ZXJcIj5cclxuICAgICAgICA8QnV0dG9uIGlkPXtpZH0gY2xhc3NOYW1lPVwiYm90b24tdm9sdmVyXCJcclxuICAgICAgICAgICAgb25DbGljaz17KCk9PntcclxuICAgICAgICAgICAgICAgIGlmIChlc1ZvbHZlcikgeyBcclxuICAgICAgICAgICAgICAgICAgICBkaXNwYXRjaEJ5UGFzcyhhY2Npb25fYWJyaXJfZm9ybXVsYXJpbyx7Zm9yUGs6b3BjaW9uZXMucGlsYUZvclBrW29wY2lvbmVzLnBpbGFGb3JQay5sZW5ndGgtMV19KTtcclxuICAgICAgICAgICAgICAgICAgICBkaXNwYXRjaChkaXNwYXRjaGVycy5WT0xWRVJfREVfRk9STVVMQVJJTyh7bWFnbml0dWRSZXRyb2Nlc286MX0pKVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgYm90b25DZXJyYXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChJRF9CT1RPTl9DRVJSQVIpIHx8IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKElEX0JPVE9OX1ZPTFZFUl9IRFIpIFxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChib3RvbkNlcnJhcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBib3RvbkNlcnJhci5jbGljaygpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfX1cclxuICAgICAgICA+IDxJQ09OLkNoZXZyb25MZWZ0Lz57ZXNWb2x2ZXIgPyBcIiBWb2x2ZXJcIiA6IFwiIENlcnJhclwifTwvQnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcbn1cclxuXHJcbmZ1bmN0aW9uIEZvcm11bGFyaW9EZXNwbGllZ3VlKHByb3BzOntmb3JQazpGb3JQa30pe1xyXG4gICAgdmFyIGZvclBrID0gcHJvcHMuZm9yUGs7XHJcbiAgICB2YXIge2Zvcm11bGFyaW8sIG1vZG9EZXNwbGllZ3VlLCBtb2RvLCBvcGNpb25lc30gXHJcbiAgICAgICAgPSB1c2VTZWxlY3RvclZpdmllbmRhKHByb3BzLmZvclBrKTtcclxuICAgIHZhciBzb2xvTGVjdHVyYSA9IGdldERhdG9zQnlQYXNzKCkuc29sb0xlY3R1cmE7XHJcbiAgICBjb25zdCBkaXNwYXRjaCA9IHVzZURpc3BhdGNoKCk7XHJcbiAgICB2YXIgZXNWb2x2ZXIgPSBvcGNpb25lcy5waWxhRm9yUGsubGVuZ3RoPjA7XHJcbiAgICB1c2VFZmZlY3QoKCk9PntcclxuICAgICAgICB2YXIgY29udHJvbFNjcm9sbD0oKT0+e1xyXG4gICAgICAgICAgICB2YXIgYXJyaWJhID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZhYi1hY3Rpdm8tYXJyaWJhJyk7XHJcbiAgICAgICAgICAgIGlmKGFycmliYSl7XHJcbiAgICAgICAgICAgICAgICBzZXRWYWxvckRpc3RpbnRvKGFycmliYS5zdHlsZSwgJ3Zpc2liaWxpdHknLFxyXG4gICAgICAgICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcclxuICAgICAgICAgICAgICAgICAgICBhcnJpYmEuZWxUb3BWaXNpYmlsaXphciAhPW51bGwgJiYgYXJyaWJhLmVsVG9wVmlzaWJpbGl6YXIgKyAxMCBcclxuICAgICAgICAgICAgICAgICAgICA8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3AgPyAndmlzaWJsZScgOiAnaGlkZGVuJ1xyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YXIgYWJham8gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZmFiLWFjdGl2by1hYmFqbycpO1xyXG4gICAgICAgICAgICBpZihhYmFqbyl7XHJcbiAgICAgICAgICAgICAgICBzZXRWYWxvckRpc3RpbnRvKGFiYWpvLnN0eWxlLCAndmlzaWJpbGl0eScsIFxyXG4gICAgICAgICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcclxuICAgICAgICAgICAgICAgICAgICBhYmFqby5lbEJvdHRvbVZpc2liaWxpemFyICE9IG51bGwgJiYgYWJham8uZWxCb3R0b21WaXNpYmlsaXphciAtIDIwXHJcbiAgICAgICAgICAgICAgICAgICAgPiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wICsgd2luZG93LmlubmVySGVpZ2h0ICogMC43ID8gJ3Zpc2libGUnIDogJ2hpZGRlbidcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIGNvbnRyb2xTY3JvbGwpO1xyXG4gICAgICAgIGNvbnRyb2xTY3JvbGwoKTtcclxuICAgICAgICByZXR1cm4gKCk9PntcclxuICAgICAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIGNvbnRyb2xTY3JvbGwpO1xyXG4gICAgICAgIH1cclxuICAgIH0pXHJcbiAgICAvLyBUT0RPIFZvbHZlciBhIHBvbmVyIGVsIG1vdmltaWVudG8gYSBsYSBhY3R1YWxcclxuICAgIHZhciBhY3R1YWw6YW55XHJcbiAgICB2YXIgY29tcGxldG86YW55XHJcbiAgICB2YXIgb25DbGlja1NhbHRhckFjdHVhbCA9ICgpPT57XHJcbiAgICAgICAgdmFyIHt2YXJpYWJsZUFjdHVhbH0gPSBkaXNwYXRjaEJ5UGFzcyhhY2Npb25fcmVnaXN0cmFyX3Jlc3B1ZXN0YSwge3Jlc3B1ZXN0YTpudWxsLCB2YXJpYWJsZTpOT19DQU1CSUFSX19TT0xPX1RSQUVSX1NUQVRVUywgZm9yUGs6cHJvcHMuZm9yUGt9KTtcclxuICAgICAgICBpZih2YXJpYWJsZUFjdHVhbCl7XHJcbiAgICAgICAgICAgIGVuZm9jYXJFbGVtZW50b0RlVmFyaWFibGUodmFyaWFibGVBY3R1YWwpXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgdmFyIGxpc3RhTW9kb3M6TW9kb0Rlc3BsaWVndWVbXT1bJ21ldGFkYXRvcycsJ3JlbGV2YW1pZW50bycsJ1BERiddO1xyXG4gICAgWydib3Rvbi12b2x2ZXItMScsICdib3Rvbi12b2x2ZXItMiddLmZvckVhY2goaWQ9PntcclxuICAgICAgICByZWdpc3RyYXJFbGVtZW50byh7aWQsIGRpcmVjdDp0cnVlLFxyXG4gICAgICAgICAgICBmdW46KFxyXG4gICAgICAgICAgICAgICAgcjpSZXNwdWVzdGFzLCBcclxuICAgICAgICAgICAgICAgIGZlZWRiYWNrRm9ybTogRm9ybVN0cnVjdHVyZVN0YXRlPElkVmFyaWFibGUsIFZhbG9yLCBJZEZpbj4sIFxyXG4gICAgICAgICAgICAgICAgZWxlbWVudG86SFRNTERpdkVsZW1lbnQsIFxyXG4gICAgICAgICAgICAgICAgZmVlZGJhY2tBbGw6e1tmb3JtdWxhcmlvIGluIFBsYWluRm9yUGtdOkZvcm1TdHJ1Y3R1cmVTdGF0ZTxJZFZhcmlhYmxlLCBWYWxvciwgSWRGaW4+fSwgXHJcbiAgICAgICAgICAgICAgICBfZXN0cnVjdHVyYTpFc3RydWN0dXJhXHJcbiAgICAgICAgICAgICk9PntcclxuICAgICAgICAgICAgICAgIGVsZW1lbnRvLnNldEF0dHJpYnV0ZSgncmVzdW1lbi1lc3RhZG8nLGVzVm9sdmVyP2ZlZWRiYWNrRm9ybS5yZXN1bWVuOmNhbGN1bGFyUmVzdW1lblZpdmllbmRhKGZvclBrLCBmZWVkYmFja0FsbCwgcikucmVzdW1lbkVzdGFkbyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgfSlcclxuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgZXNwZWNpYWwgaGF5IHF1ZSBsZWVybG8gZW4gZWwgcGFyc2VyIGRlIGNhc2lsbGVyb3Mgc2kgZXN0byB0ZXJtaW5hIHF1ZWRhbmRvIGFzw61cclxuICAgIHZhciBwYW50YWxsYUNvbXBsZXRhID0gZm9ybXVsYXJpby5lc3BlY2lhbD8ucGFudGFsbGFDb21wbGV0YTtcclxuICAgIHJldHVybiAoXHJcbiAgICAgICAgPD5cclxuICAgICAgICAgICAgPEFwcEJhciBwb3NpdGlvbj1cImZpeGVkXCIgY29sb3I9e3NvbG9MZWN0dXJhPydzZWNvbmRhcnknOidwcmltYXJ5J30+XHJcbiAgICAgICAgICAgICAgICA8VG9vbGJhcj5cclxuICAgICAgICAgICAgICAgICAgICA8QmFycmFEZU5hdmVnYWNpb24gZm9yUGs9e2ZvclBrfSBzb2xvTGVjdHVyYT17c29sb0xlY3R1cmEgfHwgZmFsc2V9IG1vZG9EaXJlY3RvPXtvcGNpb25lcy5tb2RvRGlyZWN0b30vPlxyXG4gICAgICAgICAgICAgICAgPC9Ub29sYmFyPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBpZD1cIm1pbmktY29uc29sZVwiPjwvZGl2PlxyXG4gICAgICAgICAgICA8L0FwcEJhcj5cclxuICAgICAgICAgICAgPG1haW4+XHJcbiAgICAgICAgICAgICAgICA8UGFwZXIgY2xhc3NOYW1lPVwiZm9ybXVsYXJpb1wiIG1vZG8tZGVzcGxpZWd1ZT17bW9kb0Rlc3BsaWVndWV9IHZlci1udW0tb3BjaW9uZXM9e29wY2lvbmVzLmNvbkNhbXBvT3BjaW9uZXM/J1NJJzonTk8nfT5cclxuICAgICAgICAgICAgICAgICAgICB7bW9kby5kZW1vPzxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxUeXBvZ3JhcGh5IGNvbXBvbmVudD1cInNwYW5cIj5Nb2RvIGRlIGRlc3BsaWVndWU6PC9UeXBvZ3JhcGh5PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8QnV0dG9uR3JvdXA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHtsaXN0YU1vZG9zLm1hcChtb2RvPT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxCdXR0b24ga2V5PXttb2RvfSB2YXJpYW50PXttb2RvPT1tb2RvRGVzcGxpZWd1ZT9cImNvbnRhaW5lZFwiOlwib3V0bGluZWRcIn0gb25DbGljaz17XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCk9PmRpc3BhdGNoKGRpc3BhdGNoZXJzLk1PRE9fREVTUExJRUdVRSh7bW9kb0Rlc3BsaWVndWU6bW9kb30pKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfT57bW9kb308L0J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9CdXR0b25Hcm91cD5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj46bnVsbH1cclxuICAgICAgICAgICAgICAgICAgICB7cGFudGFsbGFDb21wbGV0YT9udWxsOjxCb3RvblZvbHZlckVuRGl2IGlkPVwiYm90b24tdm9sdmVyLTFcIi8+fVxyXG4gICAgICAgICAgICAgICAgICAgIHtwYW50YWxsYUNvbXBsZXRhP251bGw6PEZvcm11bGFyaW9FbmNhYmV6YWRvIGNhc2lsbGVybz17Zm9ybXVsYXJpb30vPn1cclxuICAgICAgICAgICAgICAgICAgICA8RGVzcGxlZ2FyQ29udGVuaWRvSW50ZXJub0Jsb3F1ZU9Gb3JtdWxhcmlvIGJsb3F1ZU9Gb3JtdWxhcmlvPXtmb3JtdWxhcmlvfSBmb3JtdWxhcmlvPXtmb3JtdWxhcmlvfSBmb3JQaz17Zm9yUGt9IG11bHRpcGxlPXtmYWxzZX0vPlxyXG4gICAgICAgICAgICAgICAgICAgIHtwYW50YWxsYUNvbXBsZXRhP251bGw6PEJvdG9uVm9sdmVyRW5EaXYgaWQ9XCJib3Rvbi12b2x2ZXItMlwiLz59XHJcbiAgICAgICAgICAgICAgICA8L1BhcGVyPlxyXG4gICAgICAgICAgICAgICAgPEZhYiBpZD0nZmFiLWFjdGl2by1hcnJpYmEnIGNvbG9yPVwicHJpbWFyeVwiIGFyaWEtbGFiZWw9XCJhZGRcIiBvbkNsaWNrPXtvbkNsaWNrU2FsdGFyQWN0dWFsfT5cclxuICAgICAgICAgICAgICAgICAgICA8SUNPTi5LZXlib2FyZEFycm93VXAgLz5cclxuICAgICAgICAgICAgICAgIDwvRmFiPlxyXG4gICAgICAgICAgICAgICAgPEZhYiBpZD0nZmFiLWFjdGl2by1hYmFqbycgY29sb3I9XCJwcmltYXJ5XCIgYXJpYS1sYWJlbD1cImFkZFwiIG9uQ2xpY2s9e29uQ2xpY2tTYWx0YXJBY3R1YWx9PlxyXG4gICAgICAgICAgICAgICAgICAgIDxJQ09OLktleWJvYXJkQXJyb3dEb3duIC8+XHJcbiAgICAgICAgICAgICAgICA8L0ZhYj5cclxuICAgICAgICAgICAgICAgIDxGYWIgaWQ9J2ZhYi1lcnJvci1hcnJpYmEnIHZhcmlhbnQ9XCJleHRlbmRlZFwiIGNvbG9yPVwic2Vjb25kYXJ5XCIgYXJpYS1sYWJlbD1cImVkaXRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8SUNPTi5OYXZpZ2F0aW9uIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgRXJyb3JcclxuICAgICAgICAgICAgICAgIDwvRmFiPiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIDxGYWIgaWQ9J2ZhYi1lcnJvci1hYmFqbycgdmFyaWFudD1cImV4dGVuZGVkXCIgY29sb3I9XCJzZWNvbmRhcnlcIiBhcmlhLWxhYmVsPVwiZWRpdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxJQ09OLk5hdmlnYXRpb25Eb3duIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgRXJyb3JcclxuICAgICAgICAgICAgICAgIDwvRmFiPiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPSdlc3BhY2lvLWZpbmFsLWZvcm11bGFyaW8nPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAge29wY2lvbmVzLm1vZG9Cb3JyYXJSZXNwdWVzdGEgJiYgb3BjaW9uZXMuZm9yUGs/PERlc3BsZWdhckNvbmZpcm1hckJvcnJhclJlc3B1ZXN0YSBmb3JQaz17b3BjaW9uZXMuZm9yUGt9IHZhcmlhYmxlQm9ycmFyPXtvcGNpb25lcy5tb2RvQm9ycmFyUmVzcHVlc3RhfS8+Om51bGx9XHJcbiAgICAgICAgICAgIDwvbWFpbj5cclxuICAgICAgICA8Lz5cclxuICAgICk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBBdHJpYnV0byhwcm9wczp7bm9tYnJlOnN0cmluZywgdmFsb3I6YW55fSl7XHJcbiAgICByZXR1cm4gcHJvcHMudmFsb3IhPW51bGwgJiYgcHJvcHMudmFsb3IhPScnPzxzcGFuIGNsYXNzTmFtZT1cImF0cmlidXRvLXBhclwiPlxyXG4gICAgICAgIHtwcm9wcy5ub21icmU/PHNwYW4gY2xhc3NOYW1lPVwiYXRyaWJ1dG8tbm9tYnJlXCI+e3Byb3BzLm5vbWJyZX08L3NwYW4+Om51bGx9XHJcbiAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImF0cmlidXRvLXZhbG9yXCI+e3Byb3BzLnZhbG9yLnRvU3RyaW5nKCl9PC9zcGFuPlxyXG4gICAgPC9zcGFuPjpudWxsXHJcbn1cclxuXHJcbmNvbnN0IGxpc3RhRXN0YWRvc0NhcmdhOkVzdGFkb0NhcmdhW109WydyZXN1bWVuJywncmVsZXZhbWllbnRvJywncmVjaWJvJ107XHJcbnZhciByZXN1bWlkb3JlcyA9IFtcclxuICAgIHtub21icmU6J1JFQScgICAgICAgICAsIGY6KHJyOlJlc3B1ZXN0YXNSYWl6KT0+cnIucmVzdW1lbkVzdGFkbz09XCJva1wiICAgICAgICAgIH0sXHJcbiAgICB7bm9tYnJlOidDaXRhIHBhY3RhZGEnLCBmOihycjpSZXNwdWVzdGFzUmFpeik9PnJyLnJlc3VtZW5Fc3RhZG89PVwiY2l0YSBwYWN0YWRhXCJ9LFxyXG4gICAge25vbWJyZTonUGVuZGllbnRlcycgICwgZjoocnI6UmVzcHVlc3Rhc1JhaXopPT5yci5yZXN1bWVuRXN0YWRvPT1cInZhY2lvXCIgICAgICAgfSxcclxuXTtcclxuXHJcbnJlc3VtaWRvcmVzLnB1c2goXHJcbiAgICB7bm9tYnJlOidPdHJvcycsIGY6cmVzdW1pZG9yZXMucmVkdWNlKChnLHIpPT4ocnI9PiFyLmYocnIpICYmIGcocnIpICksKF86UmVzcHVlc3Rhc1JhaXopPT50cnVlKSB9XHJcbilcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBEZXNwbGVnYXJMaW5lYVJlc3VtZW5VQVByaW5jaXBhbChwcm9wczp7XHJcbiAgICBudW1WaXZpZW5kYTpJZEVuYyxcclxuICAgIGZvcm1QcmluY2lwYWw6SWRGb3JtdWxhcmlvLFxyXG4gICAgdGFyZWE6IHN0cmluZyxcclxuICAgIHJlc3B1ZXN0YXM6UmVzcHVlc3Rhc1JhaXosXHJcbn0pe1xyXG4gICAgY29uc3Qge251bVZpdmllbmRhLCByZXNwdWVzdGFzLCBmb3JtUHJpbmNpcGFsLCB0YXJlYX0gPSBwcm9wcztcclxuICAgIGNvbnN0IGlkPSd2aXYtJytudW1WaXZpZW5kYTtcclxuICAgIGNvbnN0IGZvclBrOkZvclBrPXtmb3JtdWxhcmlvOmZvcm1QcmluY2lwYWwsIHZpdmllbmRhOk51bWJlcihudW1WaXZpZW5kYSkgYXMgSWRFbmN9OyAvL25vIHF1aXRhciBlbCBjYXN0ZW8gcG9ycXVlIHZpZW5lIGNvbW8gdGV4dG8geSBuZWNlc2l0byBxdWUgc2VhIG7Dum1lcm9cclxuICAgIHZhciB0ZW0gPSBnZXREYXRvc0J5UGFzcygpLmluZm9ybWFjaW9uSGRyW251bVZpdmllbmRhXS50ZW07XHJcbiAgICB2YXIgZGlzcGF0Y2ggPSB1c2VEaXNwYXRjaCgpO1xyXG4gICAgdXNlRWZmZWN0KCgpPT57XHJcbiAgICAgICAgdm9sY2Fkb0luaWNpYWxFbGVtZW50b3NSZWdpc3RyYWRvcyhmb3JQayk7XHJcbiAgICAgICAgaW50ZW50YXJCYWNrdXAoZm9yUGspXHJcbiAgICB9KVxyXG4gICAgcmVnaXN0cmFyRWxlbWVudG8oe2lkLCBkaXJlY3Q6dHJ1ZSxcclxuICAgICAgICBmdW46KFxyXG4gICAgICAgICAgICByOlJlc3B1ZXN0YXMsIFxyXG4gICAgICAgICAgICBfZmVlZGJhY2tGb3JtOiBGb3JtU3RydWN0dXJlU3RhdGU8SWRWYXJpYWJsZSwgVmFsb3IsIElkRmluPiwgXHJcbiAgICAgICAgICAgIGVsZW1lbnRvOkhUTUxEaXZFbGVtZW50LCBcclxuICAgICAgICAgICAgZmVlZGJhY2tBbGw6e1tmb3JtdWxhcmlvIGluIFBsYWluRm9yUGtdOkZvcm1TdHJ1Y3R1cmVTdGF0ZTxJZFZhcmlhYmxlLCBWYWxvciwgSWRGaW4+fSwgXHJcbiAgICAgICAgICAgIF9lc3RydWN0dXJhOkVzdHJ1Y3R1cmFcclxuICAgICAgICApPT57XHJcbiAgICAgICAgICAgIC8vcHJlZ3VudG8gc2kgZXMgbGEgbWlzbWEgdml2aWVuZGEgcG9ycXVlIGxhIGZ1bmNpb24gc2UgZGlzcGFyYSBcclxuICAgICAgICAgICAgLy9jb24gdG9kYXMgbGFzIGNvbWJpbmFjaW9uZXMgZGUgcmVzcHVlc3RhcyBwYXJhIGNhZGEgZm9yUGtcclxuICAgICAgICAgICAgLy9AdHMtaWdub3JlIHZpdmllbmRhIGV4aXN0ZVxyXG4gICAgICAgICAgICBpZihyLnZpdmllbmRhID09IGZvclBrLnZpdmllbmRhKXtcclxuICAgICAgICAgICAgICAgIGVsZW1lbnRvLnNldEF0dHJpYnV0ZSgncmVzdW1lbi1lc3RhZG8nLGNhbGN1bGFyUmVzdW1lblZpdmllbmRhKGZvclBrLCBmZWVkYmFja0FsbCwgcikucmVzdW1lbkVzdGFkbyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgICAgIFxyXG4gICAgfSlcclxuICAgIHJldHVybiA8VGFibGVSb3cga2V5PXtudW1WaXZpZW5kYX0+XHJcbiAgICAgICAgPFRhYmxlQ2VsbD5cclxuICAgICAgICAgICAge3RlbT9cclxuICAgICAgICAgICAgICAgIDw+XHJcbiAgICAgICAgICAgICAgICAgICAgPERlc3BsZWdhclRlbSB0ZW09e3RlbX0vPlxyXG4gICAgICAgICAgICAgICAgICAgIHtyZXNwdWVzdGFzWydyZXN1bWVuRXN0YWRvJyBhcyBJZFZhcmlhYmxlXT09XCJjaXRhIHBhY3RhZGFcIj9cclxuICAgICAgICAgICAgICAgICAgICAgICAgPERlc3BsZWdhckNpdGFQYWN0YWRhIHJlc3B1ZXN0YXM9e3Jlc3B1ZXN0YXN9Lz5cclxuICAgICAgICAgICAgICAgICAgICA6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxEZXNwbGVnYXJDaXRhUGFjdGFkYVlTZWxlY2Npb25hZG9BbnRlcmlvclRlbSB0ZW09e3RlbX0vPlxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIDwvPlxyXG4gICAgICAgICAgICA6bnVsbH1cclxuICAgICAgICA8L1RhYmxlQ2VsbD5cclxuICAgICAgICA8VGFibGVDZWxsPlxyXG4gICAgICAgICAgICB7dGFyZWF9XHJcbiAgICAgICAgPC9UYWJsZUNlbGw+XHJcbiAgICAgICAgPFRhYmxlQ2VsbD5cclxuICAgICAgICAgICAgPEJ1dHRvbiBpZD17aWR9IG9uQ2xpY2s9eygpPT4gXHJcbiAgICAgICAgICAgICAgICBkaXNwYXRjaChkaXNwYXRjaGVycy5DQU1CSUFSX0ZPUk1VTEFSSU8oe2ZvclBrLCBhcGlsYXJWdWVsdGE6ZmFsc2V9KSlcclxuICAgICAgICAgICAgfT5cclxuICAgICAgICAgICAgICAgIHtudW1WaXZpZW5kYS50b1N0cmluZygpfVxyXG4gICAgICAgICAgICA8L0J1dHRvbj5cclxuICAgICAgICA8L1RhYmxlQ2VsbD5cclxuICAgIDwvVGFibGVSb3c+XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBEZXNwbGVnYXJDYXJnYShwcm9wczp7XHJcbiAgICBjYXJnYTpDYXJnYSwgXHJcbiAgICBpZENhcmdhOklkQ2FyZ2EsIFxyXG4gICAgcG9zaWNpb246bnVtYmVyLFxyXG4gICAgaW5mb3JtYWNpb25IZHI6SW5mb3JtYWNpb25IZHIsIFxyXG4gICAgcmVzcHVlc3RhczogUmVzcHVlc3RhTGFzVUEsXHJcbiAgICBmZWVkYmFja1Jvd1ZhbGlkYXRvcjp7XHJcbiAgICAgICAgW2Zvcm11bGFyaW8gaW4gUGxhaW5Gb3JQa106Rm9ybVN0cnVjdHVyZVN0YXRlPElkVmFyaWFibGUsIFZhbG9yLCBJZEZpbj4gXHJcbiAgICB9XHJcbn0pe1xyXG4gICAgY29uc3Qge2NhcmdhLCBpZENhcmdhLCBpbmZvcm1hY2lvbkhkciwgcmVzcHVlc3Rhc30gPSBwcm9wcztcclxuICAgIHJldHVybiA8UGFwZXIgY2xhc3NOYW1lPVwiY2FyZ2FcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImluZm9ybWFjaW9uLWNhcmdhXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiY2FyZ2FcIj7DgXJlYToge2lkQ2FyZ2F9PC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwib2JzZXJ2YWNpb25lc1wiPntjYXJnYS5vYnNlcnZhY2lvbmVzfTwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiaW5mb3JtYWNpb24tY2FyZ2FcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmZWNoYVwiPntjYXJnYS5mZWNoYX08L2Rpdj5cclxuICAgICAgICAgICAgey8qXHJcbiAgICAgICAgICAgIDxCdXR0b25Hcm91cD5cclxuICAgICAgICAgICAge2xpc3RhRXN0YWRvc0NhcmdhLm1hcChlc3RhZG9fY2FyZ2E9PlxyXG4gICAgICAgICAgICAgICAgPEJ1dHRvbiBrZXk9e2VzdGFkb19jYXJnYX0gdmFyaWFudD17ZXN0YWRvX2NhcmdhPT1jYXJnYS5lc3RhZG9fY2FyZ2E/XCJjb250YWluZWRcIjpcIm91dGxpbmVkXCJ9IG9uQ2xpY2s9e1xyXG4gICAgICAgICAgICAgICAgICAgICgpPT5kaXNwYXRjaChkaXNwYXRjaGVycy5FU1RBRE9fQ0FSR0Eoe2lkQ2FyZ2EsIGVzdGFkb19jYXJnYX0pKVxyXG4gICAgICAgICAgICAgICAgfT57ZXN0YWRvX2NhcmdhfTwvQnV0dG9uPlxyXG4gICAgICAgICAgICApfVxyXG4gICAgICAgICAgICA8L0J1dHRvbkdyb3VwPlxyXG4gICAgICAgICAgICAqL31cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICB7Y2FyZ2EuZXN0YWRvX2NhcmdhPT1udWxsICYmICFwcm9wcy5wb3NpY2lvbiB8fCBjYXJnYS5lc3RhZG9fY2FyZ2E9PSdyZWxldmFtaWVudG8nP1xyXG4gICAgICAgIDxUYWJsZSBjbGFzc05hbWU9XCJ0YWJsYS1jYXJnYS1ob2phLWRlLXJ1dGFcIj5cclxuICAgICAgICAgICAgPGNvbGdyb3VwPlxyXG4gICAgICAgICAgICAgICAgPGNvbCBzdHlsZT17e3dpZHRoOlwiNzUlXCJ9fS8+XHJcbiAgICAgICAgICAgICAgICA8Y29sIHN0eWxlPXt7d2lkdGg6XCIxMCVcIn19Lz4gICAgXHJcbiAgICAgICAgICAgICAgICA8Y29sIHN0eWxlPXt7d2lkdGg6XCIxNSVcIn19Lz4gICAgXHJcbiAgICAgICAgICAgIDwvY29sZ3JvdXA+XHJcbiAgICAgICAgICAgIDxUYWJsZUhlYWQgc3R5bGU9e3tmb250U2l6ZTogXCIxLjJyZW1cIn19PlxyXG4gICAgICAgICAgICAgICAgPFRhYmxlUm93IGNsYXNzTmFtZT1cInRyLWNhcmdhXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPFRhYmxlQ2VsbD5kb21pY2lsaW88L1RhYmxlQ2VsbD5cclxuICAgICAgICAgICAgICAgICAgICA8VGFibGVDZWxsPnRhcmVhPC9UYWJsZUNlbGw+XHJcbiAgICAgICAgICAgICAgICAgICAgPFRhYmxlQ2VsbD5lbmM8L1RhYmxlQ2VsbD5cclxuICAgICAgICAgICAgICAgIDwvVGFibGVSb3c+XHJcbiAgICAgICAgICAgIDwvVGFibGVIZWFkPlxyXG4gICAgICAgICAgICA8VGFibGVCb2R5PlxyXG4gICAgICAgICAgICAgICAge2xpa2VBcihpbmZvcm1hY2lvbkhkcikuZmlsdGVyKChpbmZvcm1hY2lvbik9PmluZm9ybWFjaW9uLnRlbS5jYXJnYT09aWRDYXJnYSkubWFwKChpbmZvcm1hY2lvbiwgbnVtVml2aWVuZGEpPT5cclxuICAgICAgICAgICAgICAgICAgICA8RGVzcGxlZ2FyTGluZWFSZXN1bWVuVUFQcmluY2lwYWwgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleT17bnVtVml2aWVuZGF9IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBudW1WaXZpZW5kYT17bnVtVml2aWVuZGF9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmVhPXtpbmZvcm1hY2lvbi50YXJlYS50YXJlYX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybVByaW5jaXBhbD17aW5mb3JtYWNpb24udGFyZWEubWFpbl9mb3JtfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNwdWVzdGFzPXtyZXNwdWVzdGFzLnZpdmllbmRhc1tudW1WaXZpZW5kYV0gYXMgUmVzcHVlc3Rhc1JhaXp9XHJcbiAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICkuYXJyYXkoKX1cclxuICAgICAgICAgICAgPC9UYWJsZUJvZHk+XHJcbiAgICAgICAgPC9UYWJsZT46XHJcbiAgICAgICAgPFRhYmxlPlxyXG4gICAgICAgICAgICA8VGFibGVIZWFkIHN0eWxlPXt7Zm9udFNpemU6IFwiMS4ycmVtXCJ9fT5cclxuICAgICAgICAgICAgICAgIDxUYWJsZVJvdyBjbGFzc05hbWU9XCJ0ci1jYXJnYVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHtyZXN1bWlkb3Jlcy5tYXAoKHJlc3VtaWRvcjogdHlwZW9mIHJlc3VtaWRvcmVzWzBdLCBpOm51bWJlcik9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8VGFibGVDZWxsIGtleT17aX0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7cmVzdW1pZG9yLm5vbWJyZX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9UYWJsZUNlbGw+XHJcbiAgICAgICAgICAgICAgICAgICAgKX1cclxuICAgICAgICAgICAgICAgIDwvVGFibGVSb3c+XHJcbiAgICAgICAgICAgIDwvVGFibGVIZWFkPlxyXG4gICAgICAgIDwvVGFibGU+XHJcbiAgICAgICAgfVxyXG4gICAgPC9QYXBlcj5cclxufVxyXG5leHBvcnQgZnVuY3Rpb24gRGVzcGxlZ2FyQ2l0YVBhY3RhZGEocHJvcHM6e3Jlc3B1ZXN0YXM6UmVzcHVlc3Rhc30pe1xyXG4gICAgY29uc3Qge3Jlc3B1ZXN0YXN9ID0gcHJvcHM7XHJcbiAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9XCJjaXRhLXBhY3RhZGFcIj5cclxuICAgICAgICA8ZGl2PjxBdHJpYnV0byBub21icmU9XCJDaXRhIHBhY3RhZGEgY29uIFwiIHZhbG9yPXtyZXNwdWVzdGFzW3AxMl19Lz48L2Rpdj5cclxuICAgICAgICA8ZGl2PjxBdHJpYnV0byBub21icmU9XCJDZWwuOlwiIHZhbG9yPXtyZXNwdWVzdGFzW3NwMl19Lz48L2Rpdj5cclxuICAgICAgICA8ZGl2PjxBdHJpYnV0byBub21icmU9XCJUZWwuOlwiIHZhbG9yPXtyZXNwdWVzdGFzW3NwM119Lz48L2Rpdj5cclxuICAgICAgICA8ZGl2PjxBdHJpYnV0byBub21icmU9XCJGZWNoYTpcIiB2YWxvcj17cmVzcHVlc3Rhc1tzcDRdfS8+PC9kaXY+XHJcbiAgICAgICAgPGRpdj48QXRyaWJ1dG8gbm9tYnJlPVwiSG9yYTpcIiB2YWxvcj17cmVzcHVlc3Rhc1tzcDVdfS8+PC9kaXY+XHJcbiAgICA8L2Rpdj5cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIERlc3BsZWdhckNpdGFQYWN0YWRhWVNlbGVjY2lvbmFkb0FudGVyaW9yVGVtKHByb3BzOnt0ZW06VEVNfSl7XHJcbiAgICBjb25zdCB7dGVtfSA9IHByb3BzO1xyXG4gICAgcmV0dXJuIDxkaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZW0tY2l0YVwiPlxyXG4gICAgICAgICAgICA8QXRyaWJ1dG8gbm9tYnJlPVwiQ2l0YTpcIiB2YWxvcj17dGVtLmNpdGF9Lz5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gRGVzcGxlZ2FyVGVtKHByb3BzOnt0ZW06VEVNfSl7XHJcbiAgICBjb25zdCB7dGVtfSA9IHByb3BzO1xyXG4gICAgcmV0dXJuIDxkaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZW0tZG9taWNpbGlvXCI+e3RlbS5ub21jYWxsZX0ge3RlbS5ucm9jYXRhc3RyYWx9IDxBdHJpYnV0byBub21icmU9XCJwaXNvXCIgdmFsb3I9e3RlbS5waXNvfS8+IDxBdHJpYnV0byBub21icmU9XCJkcHRvXCIgdmFsb3I9e3RlbS5kZXBhcnRhbWVudG99Lz4gPC9kaXY+XHJcbiAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgPEF0cmlidXRvIG5vbWJyZT1cInNlY3RvclwiIHZhbG9yPXt0ZW0uc2VjdG9yfS8+XHJcbiAgICAgICAgICAgIDxBdHJpYnV0byBub21icmU9XCJlZGlmaWNpb1wiIHZhbG9yPXt0ZW0uZWRpZmljaW99Lz5cclxuICAgICAgICAgICAgPEF0cmlidXRvIG5vbWJyZT1cImNhc2FcIiB2YWxvcj17dGVtLmNhc2F9Lz5cclxuICAgICAgICAgICAgPEF0cmlidXRvIG5vbWJyZT1cImVudHJhZGFcIiB2YWxvcj17dGVtLmVudHJhZGF9Lz5cclxuICAgICAgICAgICAgPEF0cmlidXRvIG5vbWJyZT1cImhhYml0YWNpb25cIiB2YWxvcj17dGVtLmhhYml0YWNpb259Lz5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRlbS1vYnNlcnZhY2lvbmVzXCI+XHJcbiAgICAgICAgICAgIHt0ZW0ub2JzZXJ2YWNpb25lc30gXHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIEhvamFEZVJ1dGFEZXNwbGllZ3VlKCl7XHJcbiAgICB2YXIge2NhcmdhcywgbnVtX3NpbmNybywgaW5mb3JtYWNpb25IZHIsIHJlc3B1ZXN0YXN9ID0gZ2V0RGF0b3NCeVBhc3MoKTtcclxuICAgIHZhciB7bW9kb30gPSB1c2VTZWxlY3Rvcigoc3RhdGU6Q2Fzb1N0YXRlKT0+KHttb2RvOnN0YXRlLm1vZG99KSk7XHJcbiAgICB2YXIgZmVlZGJhY2tSb3dWYWxpZGF0b3IgPSBnZXRGZWVkYmFja1Jvd1ZhbGlkYXRvcigpXHJcbiAgICB2YXIgZGlzcGF0Y2ggPSB1c2VEaXNwYXRjaCgpO1xyXG4gICAgY29uc3QgdXBkYXRlT25saW5lU3RhdHVzID0gZnVuY3Rpb24oKXtcclxuICAgICAgICBzZXRPbmxpbmUod2luZG93Lm5hdmlnYXRvci5vbkxpbmUpO1xyXG4gICAgfVxyXG4gICAgY29uc3QgYXBwVmVyc2lvbiA9IGdldENhY2hlVmVyc2lvbigpO1xyXG4gICAgY29uc3QgW29ubGluZSwgc2V0T25saW5lXSA9IHVzZVN0YXRlKHdpbmRvdy5uYXZpZ2F0b3Iub25MaW5lKTtcclxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdvbmxpbmUnLCAgdXBkYXRlT25saW5lU3RhdHVzKTtcclxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdvZmZsaW5lJywgdXBkYXRlT25saW5lU3RhdHVzKTtcclxuICAgIHJldHVybiAoXHJcbiAgICAgICAgPD5cclxuICAgICAgICAgICAgPEFwcEJhciBwb3NpdGlvbj1cImZpeGVkXCI+XHJcbiAgICAgICAgICAgICAgICA8VG9vbGJhcj5cclxuICAgICAgICAgICAgICAgICAgICA8VHlwb2dyYXBoeSB2YXJpYW50PVwiaDZcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgSG9qYSBkZSBydXRhXHJcbiAgICAgICAgICAgICAgICAgICAgPC9UeXBvZ3JhcGh5PlxyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAvLzxJY29uQnV0dG9uIHN0eWxlPXt7bWFyZ2luVG9wOiczcHgnfX1cclxuICAgICAgICAgICAgICAgICAgICAvLyAgICBjb2xvcj1cImluaGVyaXRcIlxyXG4gICAgICAgICAgICAgICAgICAgIC8vICAgIC8vb25DbGljaz17LypkaXNwYXRjaCBxdWUgbGxldmEgYSBwYW50YWxsYSBvcGNpb25lcyovfVxyXG4gICAgICAgICAgICAgICAgICAgIC8vPlxyXG4gICAgICAgICAgICAgICAgICAgIC8vICAgIDxJQ09OLlNldHRpbmdzLz5cclxuICAgICAgICAgICAgICAgICAgICAvLzwvSWNvbkJ1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAge29ubGluZT9cclxuICAgICAgICAgICAgICAgICAgICAgICAgPD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJY29uQnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I9XCJpbmhlcml0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKT0+e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvU2luY3Jvbml6YXIoKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPElDT04uU3luY0FsdC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0ljb25CdXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvPlxyXG4gICAgICAgICAgICAgICAgICAgIDpudWxsfVxyXG4gICAgICAgICAgICAgICAgPC9Ub29sYmFyPlxyXG4gICAgICAgICAgICA8L0FwcEJhcj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJob2phLWRlLXJ1dGFcIj5cclxuICAgICAgICAgICAgICAgIHttb2RvLmRlbW8/PGRpdj5cclxuICAgICAgICAgICAgICAgICAgICA8VHlwb2dyYXBoeT5Nb2RvIGRlbW8gPC9UeXBvZ3JhcGh5PlxyXG4gICAgICAgICAgICAgICAgICAgIDxCdXR0b24gdmFyaWFudD1cIm91dGxpbmVkXCIgY29sb3I9XCJzZWNvbmRhcnlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKT0+ZGlzcGF0Y2goZGlzcGF0Y2hlcnMuUkVJTklDSUFSX0RFTU8oe30pKX1cclxuICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlaW5pY2lhclxyXG4gICAgICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+Om51bGx9XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm5vbWJyZS12ZXJzaW9uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdj5EaXJlY2Npw7NuIEdlbmVyYWwgZGUgRXN0YWTDrXN0aWNhIHkgQ2Vuc29zIC0gQy5BLkIuQS48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2PntteS5nZXRMb2NhbFZhcignYXBwLXZlcnNpb24nKX0gc2luY3JvIHtudW1fc2luY3JvfSAtIHZlcnNpw7NuIHthcHBWZXJzaW9ufTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICB7bGlrZUFyKGNhcmdhcykubWFwKChjYXJnYSwgaWRDYXJnYSwgXywgcG9zaWNpb24pPT5cclxuICAgICAgICAgICAgICAgICAgICA8RGVzcGxlZ2FyQ2FyZ2Ega2V5PXtpZENhcmdhfSBjYXJnYT17Y2FyZ2F9IGlkQ2FyZ2E9e2lkQ2FyZ2F9IHBvc2ljaW9uPXtwb3NpY2lvbn0gaW5mb3JtYWNpb25IZHI9e2luZm9ybWFjaW9uSGRyfSBmZWVkYmFja1Jvd1ZhbGlkYXRvcj17ZmVlZGJhY2tSb3dWYWxpZGF0b3J9IHJlc3B1ZXN0YXM9e3Jlc3B1ZXN0YXN9Lz5cclxuICAgICAgICAgICAgICAgICkuYXJyYXkoKX1cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC8+XHJcbiAgICApO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gTGlzdGFUZXh0b3MocHJvcHM6e3RleHRvczpzdHJpbmdbXX0pe1xyXG4gICAgcmV0dXJuIDx1bD5cclxuICAgICAgICB7cHJvcHMudGV4dG9zLm1hcCh0PT48bGk+PFR5cG9ncmFwaHk+e3R9PC9UeXBvZ3JhcGh5PjwvbGk+KX1cclxuICAgIDwvdWw+O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gQmllbnZlbmlkYURlc3BsaWVndWUocHJvcHM6e21vZG86Q2Fzb1N0YXRlW1wibW9kb1wiXX0pe1xyXG4gICAgdmFyIGRpc3BhdGNoPXVzZURpc3BhdGNoKCk7XHJcbiAgICByZXR1cm4gPFBhcGVyIGNsYXNzTmFtZT1cImJpZW52ZW5pZGFcIj5cclxuICAgICAgICB7cHJvcHMubW9kby5kZW1vP1xyXG4gICAgICAgICAgICA8PlxyXG4gICAgICAgICAgICAgICAgPFR5cG9ncmFwaHk+REVNTyBkZWwgc2lzdGVtYSBkZSByZWxldmFtaWVudG8gZGUgRE1FTkNVPC9UeXBvZ3JhcGh5PlxyXG4gICAgICAgICAgICAgICAgPFR5cG9ncmFwaHk+RW4gZXN0YSBkZW1vOjwvVHlwb2dyYXBoeT5cclxuICAgICAgICAgICAgICAgIDxMaXN0YVRleHRvcyB0ZXh0b3M9e1tcclxuICAgICAgICAgICAgICAgICAgICBcIkFsZ3VuYXMgdml2aWVuZGFzIGFwYXJlY2VuIHJlbGV2YWRhcyAoZWwgYm90w7NuIGVzdMOhIGRlIGNvbG9yKSBzaXJ2ZW4gZGUgZWplbXBsb1wiLFxyXG4gICAgICAgICAgICAgICAgICAgIFwiTG8gcXVlIHNlIGNhcmd1ZW4gc2UgZ3VhcmRhbiBsb2NhbG1lbnRlIHBlcm8gbm8gc2UgdHJhc21pdGVuIGEgbGEgYmFzZSBkZSBkYXRvc1wiLFxyXG4gICAgICAgICAgICAgICAgICAgIFwiU2UgcHVlZGUgdm9sdmVyIGEgbGEgdmVyc2nDs24gaW5pY2lhbCAobyBzZWEgYm9ycmFyIGxvIHF1ZSBzZSBndWFyZMOzIGxvY2FsbWVudGUpIGRlc2RlIGxhIGhvamEgZGUgcnV0YSBib3RvbiBbcmVpbmljaWFyIGRlbW9dXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgXCJUb2RhdsOtYSBoYXkgY29zYXMgcXVlIGZhbHRhbiBvIHB1ZWRlbiBjYW1iaWFyXCIsXHJcbiAgICAgICAgICAgICAgICBdfSAvPlxyXG4gICAgICAgICAgICA8Lz5cclxuICAgICAgICAgICAgOjw+XHJcbiAgICAgICAgICAgICAgICA8VHlwb2dyYXBoeT5FbmN1ZXN0YSBkZSBTZXJvcHJldmFsZW5jaWEgZGUgQ09WSUQtMTk8L1R5cG9ncmFwaHk+XHJcbiAgICAgICAgICAgIDwvPlxyXG4gICAgICAgIH1cclxuICAgICAgICA8QnV0dG9uXHJcbiAgICAgICAgICAgIHZhcmlhbnQ9XCJjb250YWluZWRcIlxyXG4gICAgICAgICAgICBjb2xvcj1cInNlY29uZGFyeVwiXHJcbiAgICAgICAgICAgIG9uQ2xpY2s9eygpPT57IGdvdG9TaW5jcm9uaXphcigpOyB9fVxyXG4gICAgICAgID5cclxuICAgICAgICAgICAgPHNwYW4+U2luY3Jvbml6YXIgPC9zcGFuPiA8SUNPTi5TeW5jQWx0Lz5cclxuICAgICAgICA8L0J1dHRvbj5cclxuICAgICAgICA8QnV0dG9uXHJcbiAgICAgICAgICAgIHZhcmlhbnQ9XCJjb250YWluZWRcIlxyXG4gICAgICAgICAgICBjb2xvcj1cInByaW1hcnlcIlxyXG4gICAgICAgICAgICBvbkNsaWNrPXsoKT0+ZGlzcGF0Y2goZGlzcGF0Y2hlcnMuU0VUX09QQ0lPTih7b3BjaW9uOidiaWVudmVuaWRvJywgdmFsb3I6dHJ1ZX0pKX1cclxuICAgICAgICA+XHJcbiAgICAgICAgICAgIDxzcGFuPkNvbnRpbnVhciA8L3NwYW4+IDxJQ09OLlNlbmQvPlxyXG4gICAgICAgIDwvQnV0dG9uPlxyXG4gICAgPC9QYXBlcj5cclxufVxyXG5cclxuLy9DT05UUk9MIERFIFBFU1RBw5FBU1xyXG52YXIgYWxsT3BlbmVkVGFiczp7W3g6c3RyaW5nXTpudW1iZXJ9PXt9O1xyXG52YXIgaW5mb09wZW5lZFRhYnM9e1xyXG4gICAgYWxsT3BlbmVkVGFicyxcclxuICAgIG15SWQ6J2NhbGN1bGFuZG8uLi4nLFxyXG4gICAgb3RoZXJUYWJzTmFtZXM6JydcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIE9wZW5lZFRhYnMoKXtcclxuICAgIGNvbnN0IFt0YWJzLCBzZXRUYWJzXSA9IHVzZVN0YXRlKGluZm9PcGVuZWRUYWJzLm90aGVyVGFic05hbWVzKTtcclxuICAgIHZhciB7bW9kb0RpcmVjdG99ID0gdXNlU2VsZWN0b3IoKHN0YXRlOkNhc29TdGF0ZSk9Pih7bW9kb0RpcmVjdG86c3RhdGUub3BjaW9uZXMubW9kb0RpcmVjdG99KSk7XHJcbiAgICBjb25zdCB1cGRhdGVUYWJzU3RhdHVzID0gZnVuY3Rpb24oKXtcclxuICAgICAgICBzZXRUYWJzKGluZm9PcGVuZWRUYWJzLm90aGVyVGFic05hbWVzKTtcclxuICAgIH1cclxuICAgIHVzZUVmZmVjdCgoKT0+e1xyXG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdteS10YWJzJyx1cGRhdGVUYWJzU3RhdHVzKTtcclxuICAgICAgICByZXR1cm4gKCkgPT4gd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ215LXRhYnMnLHVwZGF0ZVRhYnNTdGF0dXMpO1xyXG4gICAgfSxbXSlcclxuICAgIHJldHVybiBtb2RvRGlyZWN0bz9udWxsOih0YWJzKT9cclxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRhYi1jb3VudGVyIHRhYi1lcnJvclwiPsKhQVRFTkNJw5NOISBIYXkgbcOhcyBkZSB1bmEgdmVudGFuYSBhYmllcnRhLiBTZSBwdWVkZW4gcGVyZGVyIGRhdG9zOiB7dGFic308L2Rpdj5cclxuICAgIDpcclxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRhYi1jb3VudGVyXCI+4pyUPC9kaXY+XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBBcHBEbUVuY3UoKXtcclxuICAgIHZhciB7Zm9yUGssIGJpZW52ZW5pZG8sIG1vZG99ID0gdXNlU2VsZWN0b3IoKHN0YXRlOkNhc29TdGF0ZSk9Pih7Li4uc3RhdGUub3BjaW9uZXMsIC4uLnN0YXRlLm1vZG8sIC4uLnN0YXRlfSkpO1xyXG4gICAgaWYoIWJpZW52ZW5pZG8pe1xyXG4gICAgICAgIHJldHVybiA8QmllbnZlbmlkYURlc3BsaWVndWUgbW9kbz17bW9kb30vPiBcclxuICAgIH1lbHNlIGlmKGZvclBrPT1udWxsKXtcclxuICAgICAgICByZXR1cm4gPEhvamFEZVJ1dGFEZXNwbGllZ3VlIC8+IFxyXG4gICAgfWVsc2V7XHJcbiAgICAgICAgcmV0dXJuIDxGb3JtdWxhcmlvRGVzcGxpZWd1ZSBmb3JQaz17Zm9yUGt9Lz5cclxuICAgIH1cclxufVxyXG5cclxuZnVuY3Rpb24gUGFudGFsbGFJbmljaWFsU2luQ2FyZ2EoX3Byb3BzOnt9KXtcclxuICAgIGNvbnN0IHVwZGF0ZU9ubGluZVN0YXR1cyA9IGZ1bmN0aW9uKCl7XHJcbiAgICAgICAgc2V0T25saW5lKHdpbmRvdy5uYXZpZ2F0b3Iub25MaW5lKTtcclxuICAgIH1cclxuICAgIGNvbnN0IFtvbmxpbmUsIHNldE9ubGluZV0gPSB1c2VTdGF0ZSh3aW5kb3cubmF2aWdhdG9yLm9uTGluZSk7XHJcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignb25saW5lJywgIHVwZGF0ZU9ubGluZVN0YXR1cyk7XHJcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignb2ZmbGluZScsIHVwZGF0ZU9ubGluZVN0YXR1cyk7XHJcbiAgICBjb25zdCBwYXJhZ3JhcGhTdHlsZXM9e2ZvbnRTaXplOlwiMS4ycmVtXCIsIGZvbnRXZWlnaHQ6NjAwLCBwYWRkaW5nOiBcIjVweCAxMHB4XCJ9O1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgICA8PlxyXG4gICAgICAgICAgICA8QXBwQmFyIHBvc2l0aW9uPVwiZml4ZWRcIj5cclxuICAgICAgICAgICAgICAgIDxUeXBvZ3JhcGh5IHZhcmlhbnQ9XCJoNlwiIHN0eWxlPXt7bWFyZ2luOjI1fX0+XHJcbiAgICAgICAgICAgICAgICAgICAgRGlzcG9zaXRpdm8gc2luIGNhcmdhXHJcbiAgICAgICAgICAgICAgICA8L1R5cG9ncmFwaHk+XHJcbiAgICAgICAgICAgIDwvQXBwQmFyPlxyXG4gICAgICAgICAgICA8bWFpbj5cclxuICAgICAgICAgICAgICAgIDxQYXBlciBzdHlsZT17e2hlaWdodDonNjAwcHgnLCBwYWRkaW5nOlwiMTVweFwiLCBtYXJnaW5Ub3A6NzV9fT5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7b25saW5lP1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VHlwb2dyYXBoeSBjb21wb25lbnQ9XCJwXCIgc3R5bGU9e3BhcmFncmFwaFN0eWxlc30+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNpbmNyb25pemFyIGRpc3Bvc2l0aXZvXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPXt7cGFkZGluZzonNXB4J319PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudD1cImNvbnRhaW5lZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCk9PntcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290b1NpbmNyb25pemFyKClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJQ09OLlN5bmNBbHQvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9CdXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1R5cG9ncmFwaHk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Lz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFR5cG9ncmFwaHkgY29tcG9uZW50PVwicFwiIHN0eWxlPXtwYXJhZ3JhcGhTdHlsZXN9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vIGhheSBjb25leGnDs24gYSBpbnRlcm5ldCwgcG9yIGZhdm9yIGNvbsOpY3RlIGVsIGRpc3Bvc2l0aXZvIGEgdW5hIHJlZCBwYXJhIHNpbmNyb25pemFyIHVuYSBob2phIGRlIHJ1dGEuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1R5cG9ncmFwaHk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvUGFwZXI+XHJcbiAgICAgICAgICAgIDwvbWFpbj5cclxuICAgICAgICA8Lz5cclxuICAgICk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBQYW50YWxsYUluaWNpYWwoKXtcclxuICAgIHZhciB7Zm9yUGssIGJpZW52ZW5pZG8sIG1vZG99ID0gdXNlU2VsZWN0b3IoKHN0YXRlOkNhc29TdGF0ZSk9Pih7Li4uc3RhdGUub3BjaW9uZXMsIC4uLnN0YXRlLm1vZG8sIC4uLnN0YXRlfSkpO1xyXG4gICAgaWYoIWJpZW52ZW5pZG8pe1xyXG4gICAgICAgIHJldHVybiA8QmllbnZlbmlkYURlc3BsaWVndWUgbW9kbz17bW9kb30vPiBcclxuICAgIH1lbHNlIGlmKGZvclBrPT1udWxsKXtcclxuICAgICAgICByZXR1cm4gPEhvamFEZVJ1dGFEZXNwbGllZ3VlIC8+IFxyXG4gICAgfWVsc2V7XHJcbiAgICAgICAgcmV0dXJuIDxGb3JtdWxhcmlvRGVzcGxpZWd1ZSBmb3JQaz17Zm9yUGt9Lz5cclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGRtUGFudGFsbGFJbmljaWFsU2luQ2FyZ2EoKXtcclxuICAgIHRyeXtcclxuICAgICAgICBhd2FpdCBsb2FkQ1NTKEJPT1RTVFJBUF81XzFfM19TUkMpO1xyXG4gICAgfWNhdGNoKGVycil7XHJcbiAgICAgICAgdGhyb3coZXJyKVxyXG4gICAgfVxyXG4gICAgUmVhY3RET00ucmVuZGVyKFxyXG4gICAgICAgIDxQYW50YWxsYUluaWNpYWxTaW5DYXJnYS8+LFxyXG4gICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtYWluX2xheW91dCcpXHJcbiAgICApXHJcbn1cclxuXHJcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBkZXNwbGVnYXJGb3JtdWxhcmlvQWN0dWFsKG9wdHM6e21vZG9EZW1vOmJvb2xlYW4sIGZvclBrUmFpej86Rm9yUGtSYWl6LCBvcGVyYXRpdm86SWRPcGVyYXRpdm99KXtcclxuICAgIC8vIHRyYWVyIGxvcyBtZXRhZGF0b3MgZW4gdW5hIFwiZXN0cnVjdHVyYVwiXHJcbiAgICAvLyB0cmFlciBsb3MgZGF0b3MgZGUgbG9jYWxTdG9yYWdlXHJcbiAgICAvLyB2ZXJpZmljYXIgZWwgbWFpbiBMYXlvdXRcclxuICAgIGNvbnN0IHN0b3JlID0gYXdhaXQgZG1UcmFlckRhdG9zRm9ybXVsYXJpbyhvcHRzKVxyXG4gICAgdHJ5e1xyXG4gICAgICAgIGF3YWl0IGxvYWRDU1MoQk9PVFNUUkFQXzVfMV8zX1NSQyk7XHJcbiAgICB9Y2F0Y2goZXJyKXtcclxuICAgICAgICB0aHJvdyhlcnIpXHJcbiAgICB9XHJcbiAgICBSZWFjdERPTS5yZW5kZXIoXHJcbiAgICAgICAgPFJlbmRlclByaW5jaXBhbCBzdG9yZT17c3RvcmV9IGRpc3BhdGNoZXJzPXtkaXNwYXRjaGVyc30gbWVuc2FqZVJldG9ybm89e29wdHMuZm9yUGtSYWl6P1wiVm9sdmVyIGFsIGZvcm11bGFyaW9cIjpcIlZvbHZlciBhIGxhIGhvamEgZGUgcnV0YVwifT5cclxuICAgICAgICAgICAgPE9wZW5lZFRhYnMvPlxyXG4gICAgICAgICAgICA8QXBwRG1FbmN1Lz5cclxuICAgICAgICA8L1JlbmRlclByaW5jaXBhbD4sXHJcbiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21haW5fbGF5b3V0JylcclxuICAgIClcclxufVxyXG5cclxuaWYodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpe1xyXG4gICAgLy8gQHRzLWlnbm9yZSBwYXJhIGhhY2VybG9cclxuICAgIHdpbmRvdy5kZXNwbGVnYXJGb3JtdWxhcmlvQWN0dWFsID0gZGVzcGxlZ2FyRm9ybXVsYXJpb0FjdHVhbDtcclxuICAgIC8vIEB0cy1pZ25vcmUgcGFyYSBoYWNlcmxvXHJcbiAgICB3aW5kb3cuZG1QYW50YWxsYUluaWNpYWxTaW5DYXJnYSA9IGRtUGFudGFsbGFJbmljaWFsU2luQ2FyZ2E7XHJcbn1cclxuXHJcblxyXG5mdW5jdGlvbiBsb2FkSW5zdGFuY2UoKXtcclxuICAgIGlmKHR5cGVvZiBCcm9hZGNhc3RDaGFubmVsID09PSAndW5kZWZpbmVkJyl7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdmFyIGJjID0gbmV3IEJyb2FkY2FzdENoYW5uZWwoJ2NvbnRhZG9yJyk7XHJcbiAgICB2YXIgbXlJZD1TdHJpbmcuZnJvbUNvZGVQb2ludCgxMDArTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKjEwMDApKStNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqMTAwKS8vKyctJytuZXcgRGF0ZSgpLmdldFRpbWUoKTtcclxuICAgIGFsbE9wZW5lZFRhYnNbbXlJZF09MTtcclxuICAgIGluZm9PcGVuZWRUYWJzLm15SWQ9bXlJZDtcclxuICAgIHZhciBldmVudCA9IG5ldyBFdmVudCgnbXktdGFicycpO1xyXG4gICAgYmMub25tZXNzYWdlPWZ1bmN0aW9uKGV2KXtcclxuICAgICAgICBpZihldi5kYXRhLnF1ZT09J3NveScpe1xyXG4gICAgICAgICAgICBpZighYWxsT3BlbmVkVGFic1tldi5kYXRhLmlkXSl7XHJcbiAgICAgICAgICAgICAgICBhbGxPcGVuZWRUYWJzW2V2LmRhdGEuaWRdPTA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYWxsT3BlbmVkVGFic1tldi5kYXRhLmlkXSsrO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZihldi5kYXRhLnF1ZT09J3VubG9hZCcpe1xyXG4gICAgICAgICAgICBkZWxldGUgYWxsT3BlbmVkVGFic1tldi5kYXRhLmlkXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYoZXYuZGF0YS5xdWU9PSdsb2FkJyl7XHJcbiAgICAgICAgICAgIGFsbE9wZW5lZFRhYnNbZXYuZGF0YS5pZF09MTtcclxuICAgICAgICAgICAgYmMucG9zdE1lc3NhZ2Uoe3F1ZTonc295JyxpZDpteUlkfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGluZm9PcGVuZWRUYWJzLm90aGVyVGFic05hbWVzPWxpa2VBcihhbGxPcGVuZWRUYWJzKS5maWx0ZXIoKF8saWQpPT5pZCE9bXlJZCkuam9pbignLCcpO1xyXG4gICAgICAgIHdpbmRvdy5kaXNwYXRjaEV2ZW50KGV2ZW50KTtcclxuICAgIH07XHJcbiAgICBiYy5wb3N0TWVzc2FnZSh7cXVlOidsb2FkJyxpZDpteUlkfSk7XHJcbiAgICB3aW5kb3cuZGlzcGF0Y2hFdmVudChldmVudCk7XHJcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigndW5sb2FkJyxmdW5jdGlvbigpe1xyXG4gICAgICAgIGJjLnBvc3RNZXNzYWdlKHtxdWU6J3VubG9hZCcsaWQ6bXlJZH0pO1xyXG4gICAgICAgIHdpbmRvdy5kaXNwYXRjaEV2ZW50KGV2ZW50KTtcclxuICAgIH0pXHJcbiAgICAvL21vc3RyYXJRdWllbmVzU29tb3MoKTtcclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IHNldExpYnJlRGVzcGxpZWd1ZSA9IChsaWJyZTpMaWJyZURlc3BsaWVndWVUeXBlKT0+TGlicmVEZXNwbGllZ3VlID0gbGlicmVcclxuXHJcbnNldExpYnJlRGVzcGxpZWd1ZSgocHJvcHM6e1xyXG4gICAga2V5OnN0cmluZ1xyXG4gICAgY2FzaWxsZXJvOkxpYnJlXHJcbiAgICBmb3JtdWxhcmlvOkZvcm11bGFyaW9cclxuICAgIGZvclBrOkZvclBrXHJcbn0pPT48ZGl2IGtleT17cHJvcHMua2V5fSBpZD17cHJvcHMuY2FzaWxsZXJvLmlkX2Nhc2lsbGVyb30+ZXN0ZSBjYXNpbGxlcm8gZGViZSByZWRlZmluaXJzZSBlbiBsYSBBUFAgZmluYWwgeSBzdSB1c28gZXMgZXhjbHVzaXZvIGRlbCDDoXJlYSBpbmZvcm3DoXRpY2E8L2Rpdj4pXHJcblxyXG5zZXRDYWxjdWxhclZhcmlhYmxlcygocmVzcHVlc3Rhc1JhaXo6UmVzcHVlc3Rhc1JhaXosIGZvclBrOkZvclBrKT0+e1xyXG4gICAgdHlwZSBDb25maWdQYWRyZSA9IHtcclxuICAgICAgICB1YVBlcnNvbmFzOiBJZFVuaWRhZEFuYWxpc2lzXHJcbiAgICAgICAgdmFyU2V4b1BlcnNvbmE6IElkVmFyaWFibGVcclxuICAgICAgICB2YXJOb21icmVQZXJzb25hOiBJZFZhcmlhYmxlXHJcbiAgICAgICAgdmFyTG9zTm9tYnJlczogSWRWYXJpYWJsZVxyXG4gICAgfVxyXG4gICAgdmFyIGVzdHJ1Y3R1cmEgPSBnZXRFc3RydWN0dXJhKCk7XHJcbiAgICB2YXIgYXV0b0NhcmdhclBlcnNvbmFzID0gKGNvbmZpZ1BhZHJlOiBDb25maWdQYWRyZSAsdWFQYWRyZVBlcnNvbmFzOklkVW5pZGFkQW5hbGlzaXMsIGVzdHJ1Y3R1cmE6RXN0cnVjdHVyYSk9PntcclxuICAgICAgICB2YXIgbGVlck5vbWJyZXMgPSAocmVzcHVlc3Rhc1VBUGFkcmU6UmVzcHVlc3RhcywgY29uZmlnUGFkcmU6Q29uZmlnUGFkcmUpPT57XHJcbiAgICAgICAgICAgIGlmKCFyZXNwdWVzdGFzVUFQYWRyZVtjb25maWdQYWRyZS51YVBlcnNvbmFzXSB8fCBlbXB0eShyZXNwdWVzdGFzVUFQYWRyZVtjb25maWdQYWRyZS51YVBlcnNvbmFzXSkgfHwgcmVzcHVlc3Rhc1VBUGFkcmVbY29uZmlnUGFkcmUudWFQZXJzb25hc11bMF1bY29uZmlnUGFkcmUudmFyU2V4b1BlcnNvbmFdID09IG51bGwpe1xyXG4gICAgICAgICAgICAgICAgdmFyIGxvc05vbWJyZXMgPSByZXNwdWVzdGFzVUFQYWRyZVtjb25maWdQYWRyZS52YXJMb3NOb21icmVzXSBhcyBzdHJpbmdcclxuICAgICAgICAgICAgICAgIGlmKGxvc05vbWJyZXMgIT0gbnVsbCl7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYoIXJlc3B1ZXN0YXNVQVBhZHJlW2NvbmZpZ1BhZHJlLnVhUGVyc29uYXNdKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzcHVlc3Rhc1VBUGFkcmVbY29uZmlnUGFkcmUudWFQZXJzb25hc109W107XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGxvc05vbWJyZXNcclxuICAgICAgICAgICAgICAgICAgICAgICAgLnNwbGl0KCcsJylcclxuICAgICAgICAgICAgICAgICAgICAgICAgLmZpbHRlcigobm9tYnJlOnN0cmluZyk9Pm5vbWJyZS50cmltKCkubGVuZ3RoID4gMClcclxuICAgICAgICAgICAgICAgICAgICAgICAgLmZvckVhY2goKG5vbWJyZTpzdHJpbmcsIGk6bnVtYmVyKT0+e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcHVlc3Rhc1VBUGFkcmVbY29uZmlnUGFkcmUudWFQZXJzb25hc11baV0gPSByZXNwdWVzdGFzVUFQYWRyZVtjb25maWdQYWRyZS51YVBlcnNvbmFzXVtpXSB8fCB7fTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNVQVBhZHJlW2NvbmZpZ1BhZHJlLnVhUGVyc29uYXNdW2ldW2NvbmZpZ1BhZHJlLnZhck5vbWJyZVBlcnNvbmFdID0gbm9tYnJlLnRyaW0oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZihlc3RydWN0dXJhLnVuaWRhZGVzX2FuYWxpc2lzW3VhUGFkcmVQZXJzb25hc10pe1xyXG4gICAgICAgICAgICBpZih1YVBhZHJlUGVyc29uYXMgPT0gJ3ZpdmllbmRhcycpe1xyXG4gICAgICAgICAgICAgICAgbGVlck5vbWJyZXMocmVzcHVlc3Rhc1JhaXosY29uZmlnUGFkcmUpXHJcbiAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgZm9yKHZhciByZXNwdWVzdGFzVUFQYWRyZSBvZiBpdGVyYXRvcihyZXNwdWVzdGFzUmFpelt1YVBhZHJlUGVyc29uYXNdPz9bXSkpe1xyXG4gICAgICAgICAgICAgICAgICAgIGxlZXJOb21icmVzKHJlc3B1ZXN0YXNVQVBhZHJlLGNvbmZpZ1BhZHJlKVxyXG4gICAgICAgICAgICAgICAgfSAgIFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgdmFyIHVhc0l0ZXJhcjoge1xyXG4gICAgICAgIFtrZXkgaW4gSWRVbmlkYWRBbmFsaXNpc106Q29uZmlnUGFkcmVcclxuICAgIH07IFxyXG4gICAgdmFyIGNvbmZpZ0VuY3UgOiBDb25maWdQYWRyZSA9IHsgXHJcbiAgICAgICAgdWFQZXJzb25hczogJ3BlcnNvbmFzJyxcclxuICAgICAgICB2YXJTZXhvUGVyc29uYTogJ3NleG8nIGFzIElkVmFyaWFibGUsXHJcbiAgICAgICAgdmFyTm9tYnJlUGVyc29uYTogJ25vbWJyZScgYXMgSWRWYXJpYWJsZSxcclxuICAgICAgICB2YXJMb3NOb21icmVzOiBcImxvc19ub21icmVzXCIgYXMgSWRWYXJpYWJsZVxyXG4gICAgfTtcclxuICAgIHZhciBjb25maWdTdXBlIDogQ29uZmlnUGFkcmUgPSB7IFxyXG4gICAgICAgIHVhUGVyc29uYXM6ICdwZXJzb25hc19zdXAnIGFzIElkVW5pZGFkQW5hbGlzaXMsXHJcbiAgICAgICAgdmFyU2V4b1BlcnNvbmE6ICdzZXhvX3N1cCcgIGFzIElkVmFyaWFibGUsXHJcbiAgICAgICAgdmFyTm9tYnJlUGVyc29uYTogJ25vbWJyZV9zdXAnICBhcyBJZFZhcmlhYmxlLFxyXG4gICAgICAgIHZhckxvc05vbWJyZXM6IFwibm9tYnJlc19jb21wb25lbnRlc19zdXBcIiAgYXMgSWRWYXJpYWJsZVxyXG4gICAgfTtcclxuXHJcbiAgICBpZihlc3RydWN0dXJhLmNvblJlYUhvZ2FyKXtcclxuICAgICAgICB1YXNJdGVyYXIgPSB7XHJcbiAgICAgICAgICAgIGhvZ2FyZXM6IGNvbmZpZ0VuY3UsXHJcbiAgICAgICAgICAgIFtcImhvZ2FyZXNfc3VwXCIgYXMgSWRVbmlkYWRBbmFsaXNpc10gOiBjb25maWdTdXBlXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxpa2VBcih1YXNJdGVyYXIpLmZvckVhY2goKGNvbmZpZ1BhZHJlLHVhUGFkcmUpPT57XHJcbiAgICAgICAgICAgIGF1dG9DYXJnYXJQZXJzb25hcyhjb25maWdQYWRyZSx1YVBhZHJlLCBlc3RydWN0dXJhKVxyXG4gICAgICAgICAgICBcclxuICAgICAgICB9KVxyXG4gICAgfWVsc2V7XHJcbiAgICAgICAgdmFyIGNvbmZpZ1BhZHJlczogQ29uZmlnUGFkcmVbXSA9IFtjb25maWdFbmN1LGNvbmZpZ1N1cGVdO1xyXG4gICAgICAgIGNvbmZpZ1BhZHJlcy5mb3JFYWNoKChjb25maWdQYWRyZSk9PntcclxuICAgICAgICAgICAgYXV0b0NhcmdhclBlcnNvbmFzKGNvbmZpZ1BhZHJlLCd2aXZpZW5kYXMnLCBlc3RydWN0dXJhKVxyXG4gICAgICAgIH0pICAgICAgICBcclxuICAgIH1cclxuICAgIHJlc3B1ZXN0YXNSYWl6LnZkb21pbmlvPWdldERhdG9zQnlQYXNzKCkuaW5mb3JtYWNpb25IZHJbZm9yUGsudml2aWVuZGFdLnRlbS5kb21pbmlvO1xyXG4gICAgLy9UT0RPOiBNRUpPUkFSIEVOIEFMR1VOIE1PTUVOVE8gRUwgQk9UT04gTElTVE9cclxuICAgIGxldCB0b3RhbEggPSByZXNwdWVzdGFzUmFpelsndG90YWxfaCcgYXMgSWRWYXJpYWJsZV07XHJcbiAgICByZXNwdWVzdGFzUmFpelsnJEIuRjpTMScgYXMgSWRWYXJpYWJsZV0gPSAocmVzcHVlc3Rhc1JhaXpbJ2hvZ2FyZXMnXSB8fCBbXSkubGVuZ3RoID09IHRvdGFsSD8nb2snOm51bGw7XHJcbiAgICBsZXQgdG90YWxIc3VwID0gcmVzcHVlc3Rhc1JhaXpbJ3RvdGFsX2hfc3VwJyBhcyBJZFZhcmlhYmxlXTtcclxuICAgIHJlc3B1ZXN0YXNSYWl6WyckQi5GOlMxX1NVUCcgYXMgSWRWYXJpYWJsZV0gPSAocmVzcHVlc3Rhc1JhaXpbJ2hvZ2FyZXNfc3VwJyBhcyBJZFVuaWRhZEFuYWxpc2lzXSB8fCBbXSkubGVuZ3RoID09IHRvdGFsSHN1cD8nb2snOm51bGw7XHJcbn0pXHJcblxyXG53aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIGZ1bmN0aW9uKCl7XHJcbiAgICBsb2FkSW5zdGFuY2UoKVxyXG59KVxyXG4vL0ZJTiBDT05UUk9MIFBFU1RBw5FBU1xyXG5cclxuZnVuY3Rpb24gbG9hZENTUyhjc3NVUkw6c3RyaW5nLCBpZD86c3RyaW5nKTpQcm9taXNlPHZvaWQ+e1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKCggcmVzb2x2ZSwgcmVqZWN0ICk9PntcclxuICAgICAgICB2YXIgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICdsaW5rJyApO1xyXG4gICAgICAgIGxpbmsucmVsICA9ICdzdHlsZXNoZWV0JztcclxuICAgICAgICBsaW5rLmhyZWYgPSBjc3NVUkw7XHJcbiAgICAgICAgbGluay5pZCA9IGlkIHx8IGNzc1VSTDtcclxuICAgICAgICBkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKCBsaW5rICk7XHJcbiAgICAgICAgbGluay5vbmxvYWQgPSAoKT0+eyBcclxuICAgICAgICAgICAgcmVzb2x2ZSgpOyBcclxuICAgICAgICAgICAgY29uc29sZS5sb2coYHRyYWUgJHtjc3NVUkx9YCk7XHJcbiAgICAgICAgfTtcclxuICAgICAgICBsaW5rLm9uZXJyb3I9KGVycik9PntcclxuICAgICAgICAgICAgY29uc29sZS5sb2coJ2Vycm9yIGNhcmdhbmRvIGVsIGVzdGlsbycsIGVycilcclxuICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihgcHJvYmxlbWEgY2FyZ2FuZG8gZXN0aWxvICR7Y3NzVVJMfWApKVxyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG59XHJcblxyXG5mdW5jdGlvbiByZW1vdmVDU1NCeUlkKGlkOnN0cmluZyl7XHJcbiAgICB2YXIgbGlua05vZGUgPSAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpO1xyXG4gICAgbGlua05vZGU/LnBhcmVudE5vZGU/LnJlbW92ZUNoaWxkKGxpbmtOb2RlKTtcclxufVxyXG5cclxuY29uc3QgQk9PVFNUUkFQXzVfMV8zX1NSQyA9ICdjc3MvYm9vdHN0cmFwLm1pbi5jc3MnOyJdfQ==
|
|
1571
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVuZGVyLWZvcm11bGFyaW8uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdW5sb2dnZWQvcmVuZGVyLWZvcm11bGFyaW8udHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBQUEsK0JBQStCO0lBQy9CLHNDQUFzQztJQUN0QyxxREFRMEI7SUFDMUIsbUNBY2lCO0lBQ2pCLDJEQVk0QjtJQUM1Qix5REFJNEI7SUFDNUIsaUNBQTZEO0lBQzdELDZDQUF1RDtJQUN2RCxxQ0FBdUQ7SUFDdkQsK0NBQTZDO0lBQzdDLDJDQUF3QztJQUV4Qyw0Q0FNMkI7SUFJM0IsMkRBYzRCO0lBRTVCLDJDQUF5QztJQUV6QyxNQUFNLGNBQWMsR0FBRyxFQUFFLENBQUM7SUFHMUIsU0FBUyxjQUFjLENBQUMsSUFBZ0IsRUFBRSxXQUE2QztRQUNuRixJQUFHLE9BQU8sSUFBSSxJQUFJLFFBQVE7WUFBRSxPQUFPLFNBQVMsQ0FBQztRQUM3QyxJQUFJLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUMsU0FBUyxDQUFDLENBQUMsT0FBTyxDQUFDLGlCQUFpQixFQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3RFLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBQyxDQUFDLElBQUksRUFBQyxFQUFFLENBQUEsSUFBSSxJQUFJLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUMsQ0FBQyxJQUFJLEVBQUMsRUFBRSxDQUFBLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQztRQUN6RixJQUFHLENBQUMsV0FBVyxJQUFJLElBQUk7WUFBRSxPQUFPLElBQUksQ0FBQztRQUNyQzs7VUFFRTtJQUNOLENBQUM7SUFFRCxNQUFNLFdBQVcsR0FBRyxLQUFLLENBQUMsQ0FBQyxxSkFBcUo7SUFDaEwsZ0lBQWdJO0lBRWhJLE1BQU0sbUJBQW1CLEdBQUcsa0JBQWtCLENBQUM7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QUFDLGFBQWEsQ0FBRSxNQUFNLENBQUUsQ0FBQztZQUM1QyxJQUFJLENBQUMsR0FBRyxHQUFJLFlBQVksQ0FBQztZQUN6QixJQUFJLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQztZQUNuQixJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxNQUFNLENBQUM7WUFDdkIsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUUsSUFBSSxDQUFFLENBQUM7WUFDbEMsSUFBSSxDQUFDLE1BQU0sR0FBRyxHQUFFLEVBQUU7Z0JBQ2QsT0FBTyxFQUFFLENBQUM7Z0JBQ1YsT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLE1BQU0sRUFBRSxDQUFDLENBQUM7WUFDbEMsQ0FBQyxDQUFDO1lBQ0YsSUFBSSxDQUFDLE9BQU8sR0FBQyxDQUFDLEdBQUcsRUFBQyxFQUFFO2dCQUNoQixPQUFPLENBQUMsR0FBRyxDQUFDLDBCQUEwQixFQUFFLEdBQUcsQ0FBQyxDQUFBO2dCQUM1QyxNQUFNLENBQUMsSUFBSSxLQUFLLENBQUMsNEJBQTRCLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQTtZQUMzRCxDQUFDLENBQUE7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxTQUFTLGFBQWEsQ0FBQyxFQUFTOztRQUM1QixJQUFJLFFBQVEsR0FBSSxRQUFRLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzVDLE1BQUEsUUFBUSxhQUFSLFFBQVEsdUJBQVIsUUFBUSxDQUFFLFVBQVUsMENBQUUsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFFRCxNQUFNLG1CQUFtQixHQUFHLHVCQUF1QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XHJcbmltcG9ydCAqIGFzIFJlYWN0RE9NIGZyb20gXCJyZWFjdC1kb21cIjtcclxuaW1wb3J0IHsgIFxyXG4gICAgUmVuZGVyUHJpbmNpcGFsLCBcclxuICAgIGFkYXB0YXJUaXBvVmFyQ2FzaWxsZXJvLFxyXG4gICAgSUNPTixcclxuICAgIGZvY3VzVG9JZCxcclxuICAgIHNjcm9sbFRvVG9wLFxyXG4gICAgc2Nyb2xsVG9Cb3R0b20sXHJcbiAgICBtYXRlcmlhbElvSWNvbnNTdmdQYXRoXHJcbn0gZnJvbSBcIi4vcmVuZGVyLWdlbmVyYWxcIjtcclxuaW1wb3J0IHtCbG9xdWUsIEJvdG9uRm9ybXVsYXJpbywgXHJcbiAgICBDYXNpbGxlcm9CYXNlLCBDYXNvU3RhdGUsIENvbmp1bnRvUHJlZ3VudGFzLCBDb25zaXN0ZW5jaWEsIFxyXG4gICAgRXN0YWRvQ2FyZ2EsIEZpbHRybywgRm9yUGssIEZvclBrUmFpeiwgRm9ybXVsYXJpbywgXHJcbiAgICBJZEZvcm11bGFyaW8sIElkUHJlZ3VudGEsIElkVGFyZWEsIElkVmFyaWFibGUsIEluZm9Gb3JtdWxhcmlvLFxyXG4gICAgTW9kb0Rlc3BsaWVndWUsXHJcbiAgICBPcGNpb24sIE9wY2lvbk11bHRpcGxlLCBQbGFpbkZvclBrLCBcclxuICAgIFByZWd1bnRhLCBQcmVndW50YUNvbk9wY2lvbmVzLCBQcmVndW50YVNpbXBsZSwgXHJcbiAgICBSZXNwdWVzdGFzLCBSZXNwdWVzdGFMYXNVQSwgUmVzcHVlc3Rhc1JhaXosIFZhbG9yLCBURU0sIElkQ2FyZ2EsIENhcmdhLCBJZEZpbiwgSWRVbmlkYWRBbmFsaXNpcyxcclxuICAgIE1vZG9BbG1hY2VuYW1pZW50byxcclxuICAgIHRvUGxhaW5Gb3JQayxcclxuICAgIElkQ2FzaWxsZXJvLFxyXG4gICAgUHJlZ3VudGFDb25TaU5vLFxyXG4gICAgVGV4dG8sIEVzdHJ1Y3R1cmEsIEluZm9ybWFjaW9uSGRyLCBEYXRvc0hkclVhUHBhbCwgQ29uZmlndXJhY2lvblNvcnRlb0Zvcm11bGFyaW8sIFJlc3VtZW5Fc3RhZG8sIERhdG9zQnlQYXNzUGVyc2lzdGlibGVzLCBJZE9wZXJhdGl2bywgSWRFbmMsIExpYnJlLCBVbmlkYWRBbmFsaXNpcyxcclxuICAgIGl0ZXJhdG9yLCBlbXB0eSwgQ29uZmlndXJhY2lvbkhhYmlsaXRhckJvdG9uRm9ybXVsYXJpb1xyXG59IGZyb20gXCIuL3RpcG9zXCI7XHJcbmltcG9ydHsgXHJcbiAgICBhY2Npb25fYWJyaXJfZm9ybXVsYXJpbyxcclxuICAgIGFjY2lvbl9ib3JyYXJfZm9ybXVsYXJpbyxcclxuICAgIGNhbGN1bGFyQWN0dWFsQkYsXHJcbiAgICBjYWxjdWxhckRpc2FibGVkQkYsXHJcbiAgICBjYWxjdWxhclBlcm1pdGVCb3JyYXJCRixcclxuICAgIGNhbGN1bGFyUmVzdW1lblZpdmllbmRhLFxyXG4gICAgZ2V0RGF0b3NCeVBhc3MsXHJcbiAgICBnZXRGb3JtdWxhcmlvc0ZvcklkVml2aWVuZGEsXHJcbiAgICBnZXRNYWluRm9ybUZvclZpdmllbmRhLFxyXG4gICAgaW50ZW50YXJCYWNrdXAsXHJcbiAgICBzZXRDYWxjdWxhclZhcmlhYmxlc1xyXG59IGZyb20gXCIuL2J5cGFzcy1mb3JtdWxhcmlvXCJcclxuaW1wb3J0IHsgZG1UcmFlckRhdG9zRm9ybXVsYXJpbywgZGlzcGF0Y2hlcnMsIFxyXG4gICAgZ290b1NpbmNyb25pemFyLFxyXG4gICAgZ2V0Q2FjaGVWZXJzaW9uLFxyXG4gICAgZ290b0NvbnNpc3RpcixcclxufSBmcm9tIFwiLi9yZWR1eC1mb3JtdWxhcmlvXCI7XHJcbmltcG9ydCB7IHVzZVN0YXRlLCB1c2VFZmZlY3QsIHVzZUxheW91dEVmZmVjdCB9IGZyb20gXCJyZWFjdFwiO1xyXG5pbXBvcnQgeyB1c2VTZWxlY3RvciwgdXNlRGlzcGF0Y2ggfSBmcm9tIFwicmVhY3QtcmVkdXhcIjsgXHJcbmltcG9ydCB7IHN0cmljdCBhcyBsaWtlQXIsIGJlaW5nQXJyYXkgfSBmcm9tIFwibGlrZS1hclwiO1xyXG5pbXBvcnQge3NsZWVwLCBjb2FsZXNjZX0gZnJvbSBcImJlc3QtZ2xvYmFsc1wiO1xyXG5pbXBvcnQgeyB1bmV4cGVjdGVkIH0gZnJvbSBcImNhc3QtZXJyb3JcIjtcclxuXHJcbmltcG9ydCB7XHJcbiAgICBBcHBCYXIsIEJ1dHRvbkdyb3VwLCBDaXJjdWxhclByb2dyZXNzLCBDaGVja2JveCwgXHJcbiAgICBEaWFsb2csIERpYWxvZ0FjdGlvbnMsIERpYWxvZ0NvbnRlbnQsIERpYWxvZ0NvbnRlbnRUZXh0LCBcclxuICAgIERpYWxvZ1RpdGxlLCBEaXZpZGVyLCBGYWIsIEljb25CdXR0b24sXHJcbiAgICBNZW51LCBNZW51SXRlbSwgUGFwZXIsIFBvcG92ZXIsXHJcbiAgICBUYWJsZSwgVGFibGVCb2R5LCBUYWJsZUNlbGwsIFRhYmxlSGVhZCwgVGFibGVSb3csIFRvb2xiYXJcclxufSBmcm9tIFwiQG1hdGVyaWFsLXVpL2NvcmVcIjtcclxuaW1wb3J0IHsgRXN0YWRvVmFyaWFibGUsIEZvcm1TdHJ1Y3R1cmVTdGF0ZSB9IGZyb20gXCJyb3ctdmFsaWRhdG9yXCI7XHJcbmltcG9ydCB7IENTU1Byb3BlcnRpZXMgfSBmcm9tIFwiQG1hdGVyaWFsLXVpL2NvcmUvc3R5bGVzL3dpdGhTdHlsZXNcIjtcclxuXHJcbmltcG9ydCB7IFxyXG4gICAgcmVnaXN0cmFyRWxlbWVudG8sIHNldEF0dHJEaXN0aW50bywgc2V0VmFsb3JEaXN0aW50bywgZGlzcGF0Y2hCeVBhc3MsIFxyXG4gICAgZ2V0RGlydHksIGdldEZlZWRiYWNrUm93VmFsaWRhdG9yLFxyXG4gICAgZ2V0RnVuY2lvbkhhYmlsaXRhciwgXHJcbiAgICBnZXRFc3RydWN0dXJhLCBcclxuICAgIGRlZk9wZXJhdGl2byxcclxuICAgIHZvbGNhZG9JbmljaWFsRWxlbWVudG9zUmVnaXN0cmFkb3MsXHJcbiAgICBudW1iZXJPclN0cmluZ0luY0lmQXJyYXksIFxyXG4gICAgY2FsY3VsYXJFbGVtZW50b0VuZm9jYWRvLFxyXG4gICAgYWNjaW9uX3JlZ2lzdHJhcl9yZXNwdWVzdGEsXHJcbiAgICBhY2Npb25faWRfcHJlZ3VudGEsXHJcbiAgICBhY2Npb25fYWdyZWdhcl9mb3JtdWxhcmlvLFxyXG4gICAgTk9fQ0FNQklBUl9fVkVSSUZJQ0FSX1NJX0VTX05FQ0VTQVJJTyxcclxuICAgIE5PX0NBTUJJQVJfX1NPTE9fVFJBRVJfU1RBVFVTXHJcbn0gZnJvbSBcIi4vYnlwYXNzLWZvcm11bGFyaW9cIlxyXG5cclxuaW1wb3J0IHtodG1sLCBIdG1sVGFnfSBmcm9tIFwianMtdG8taHRtbFwiO1xyXG5cclxuY29uc3QgREVMQVlfU0NST0xMXzMgPSA1MDtcclxuXHJcbmZ1bmN0aW9uIGJyZWFrZWFibGVUZXh0KHRleHQ6c3RyaW5nfG51bGwpOnN0cmluZ3x1bmRlZmluZWQ7XHJcbmZ1bmN0aW9uIGJyZWFrZWFibGVUZXh0KHRleHQ6c3RyaW5nfG51bGwsIGRpY2Npb25hcmlvPzp7W2NsYXZlOnN0cmluZ106UmVhY3QuUmVhY3ROb2RlfSl7XHJcbiAgICBpZih0eXBlb2YgdGV4dCAhPSBcInN0cmluZ1wiKSByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgdGV4dCA9IHRleHQucmVwbGFjZSgvXFwvL2csXCIvXFx1MjA2M1wiKS5yZXBsYWNlKC9cXC9cXHUyMDYzKFxcdylcXGIvZywnLyQxJyk7XHJcbiAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKC9fX18qL2csKHRvZG8pPT5gWyR7dG9kb31dYCkucmVwbGFjZSgvXFxAXFx3K1xcQC9nLCh0b2RvKT0+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+Om51bGx9XHJcbiAgICAgICAgICAgIDxJQ09OLlRyZW5kaW5nRmxhdCAvPjxzcGFuPntjYXNpbGxlcm8uc2FsdG99PC9zcGFuPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgOm51bGxcclxufVxyXG5cclxuZnVuY3Rpb24gT3BjaW9uRGVzcGxpZWd1ZShwcm9wczp7Y2FzaWxsZXJvOk9wY2lvbiwgdmFsb3JPcGNpb246bnVtYmVyLCB2YXJpYWJsZTpJZFZhcmlhYmxlLCBmb3JQazpGb3JQaywgbGVlcjpib29sZWFuLCBjb25Cb3RvbkJvcnJhcjpib29sZWFufSl7XHJcbiAgICBjb25zdCB7Y2FzaWxsZXJvfSA9IHByb3BzO1xyXG4gICAgdmFyIGRpc3BhdGNoID0gdXNlRGlzcGF0Y2goKTtcclxuICAgIHZhciBzYWx0b0F1dG9tYXRpY28gPSB1c2VTZWxlY3Rvcigoc3RhdGU6Q2Fzb1N0YXRlKT0+c3RhdGUub3BjaW9uZXMuc2FsdG9BdXRvbWF0aWNvKTtcclxuICAgIHZhciBoYW5kbGVDbGljazpSZWFjdC5Nb3VzZUV2ZW50SGFuZGxlcjxIVE1MQnV0dG9uRWxlbWVudD4gPSBhc3luYyAoZXZlbnQpPT57XHJcbiAgICAgICAgdmFyIGNvbnRhaW5lciA9IHN1YmlySGFzdGEoZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50LCBlbGVtZW50bz0+ZWxlbWVudG8uY2xhc3NMaXN0LmNvbnRhaW5zKCdwcmVndW50YScpIHx8IGVsZW1lbnRvLmNsYXNzTGlzdC5jb250YWlucygnbXVsdGlwbGUnKSkgfHwgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21haW5fbGF5b3V0JykhO1xyXG4gICAgICAgIHZhciB0aWVuZSA9IGNvbnRhaW5lci5nZXRBdHRyaWJ1dGUoJ2VzdG95LWJvcnJhbmRvJyk7XHJcbiAgICAgICAgY29udGFpbmVyLnNldEF0dHJpYnV0ZSgnZXN0b3ktYm9ycmFuZG8nLCdOTycpO1xyXG4gICAgICAgIGlmKGVsZW1lbnRvQ29uU2VubmlhbEJvcnJhcil7XHJcbiAgICAgICAgICAgIGVsZW1lbnRvQ29uU2VubmlhbEJvcnJhci5zZXRBdHRyaWJ1dGUoJ2VzdG95LWJvcnJhbmRvJywnTk8nKTtcclxuICAgICAgICAgICAgZWxlbWVudG9Db25TZW5uaWFsQm9ycmFyID0gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHtyZWNlbnRNb2RpZmllZCwgc2lndWllbnRlVmFyaWFibGV9ID0gZGlzcGF0Y2hCeVBhc3MoYWNjaW9uX3JlZ2lzdHJhcl9yZXNwdWVzdGEsIHtyZXNwdWVzdGE6cHJvcHMudmFsb3JPcGNpb24sIHZhcmlhYmxlOnByb3BzLnZhcmlhYmxlLCBmb3JQazpwcm9wcy5mb3JQa30pO1xyXG4gICAgICAgIGlmKCFyZWNlbnRNb2RpZmllZCl7XHJcbiAgICAgICAgICAgIGNvbnRhaW5lci5zZXRBdHRyaWJ1dGUoJ2VzdG95LWJvcnJhbmRvJyx0aWVuZT09J1NJJz8nTk8nOidTSScpO1xyXG4gICAgICAgICAgICBpZih0aWVuZSE9J1NJJyl7XHJcbiAgICAgICAgICAgICAgICBlbGVtZW50b0NvblNlbm5pYWxCb3JyYXI9Y29udGFpbmVyO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgIGlmKHNpZ3VpZW50ZVZhcmlhYmxlICYmIHNhbHRvQXV0b21hdGljbyl7XHJcbiAgICAgICAgICAgICAgICB2YXIgYm90b25TdHlsZSA9IChldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQpPy5zdHlsZTtcclxuICAgICAgICAgICAgICAgIGlmKGJvdG9uU3R5bGUpIGJvdG9uU3R5bGUuY29sb3IgPSAnZ3JlZW4nO1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgc2xlZXAoREVMQVlfU0NST0xMXzMpO1xyXG4gICAgICAgICAgICAgICAgaWYoYm90b25TdHlsZSkgYm90b25TdHlsZS5jb2xvciA9ICdibHVlJztcclxuICAgICAgICAgICAgICAgIGF3YWl0IHNsZWVwKERFTEFZX1NDUk9MTF8zKTtcclxuICAgICAgICAgICAgICAgIGlmKGJvdG9uU3R5bGUpIGJvdG9uU3R5bGUuY29sb3IgPSAnZ3JlZW4nO1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgc2xlZXAoREVMQVlfU0NST0xMXzMpO1xyXG4gICAgICAgICAgICAgICAgaWYoYm90b25TdHlsZSkgYm90b25TdHlsZS5jb2xvciA9ICcnO1xyXG4gICAgICAgICAgICAgICAgLy9AdHMtaWdub3JlIGFsZ3Vub3MgY2FzaWxsZXJvcyB0aWVuZW4gZXNwZWNpYWwgeSBvdHJvcyBub1xyXG4gICAgICAgICAgICAgICAgKGNhc2lsbGVyby5lc3BlY2lhbD8ubm9TY3JvbGwgPT0gdHJ1ZSk/bnVsbDplbmZvY2FyRWxlbWVudG9EZVZhcmlhYmxlKGNhc2lsbGVyby5lc3BlY2lhbD8uc2Nyb2xsVG8gPz8gc2lndWllbnRlVmFyaWFibGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIHJldHVybiA8R3JpZCBjbGFzc05hbWU9XCJvcGNpb25cIj4gXHJcbiAgICAgICAge3Byb3BzLmNvbkJvdG9uQm9ycmFyPzxCb3RvbkJvcnJhclxyXG4gICAgICAgICAgICBpZD17YG9wY2lvbi12YXItJHtwcm9wcy52YXJpYWJsZX0tJHtwcm9wcy52YWxvck9wY2lvbn0tYm9ycmFyYH1cclxuICAgICAgICAgICAgZm9yUGs9e3Byb3BzLmZvclBrfVxyXG4gICAgICAgICAgICB2YXJpYWJsZT17cHJvcHMudmFyaWFibGV9XHJcbiAgICAgICAgICAgIHZhbG9yT3BjaW9uPXtwcm9wcy52YWxvck9wY2lvbn1cclxuICAgICAgICAgICAgLz46bnVsbH1cclxuICAgICAgICA8QnV0dG9uIFxyXG4gICAgICAgICAgICBpZD17YG9wY2lvbi12YXItJHtwcm9wcy52YXJpYWJsZX0tJHtwcm9wcy52YWxvck9wY2lvbn1gfVxyXG4gICAgICAgICAgICBtaS12YXJpYWJsZT17cHJvcHMudmFyaWFibGV9XHJcbiAgICAgICAgICAgIHZhbG9yLW9wY2lvbj17cHJvcHMudmFsb3JPcGNpb259XHJcbiAgICAgICAgICAgIHZhcmlhbnQ9XCJvdXRsaW5lZFwiXHJcbiAgICAgICAgICAgIGNsYXNzTmFtZT1cImJvdG9uLW9wY2lvbiBib3Rvbi1vcGNpb24tc2VsZWNjaW9uXCJcclxuICAgICAgICAgICAgb25DbGljaz17aGFuZGxlQ2xpY2t9XHJcbiAgICAgICAgICAgIHRhYkluZGV4PXstMX1cclxuICAgICAgICA+XHJcbiAgICAgICAgICAgIDxHcmlkIGNvbnRhaW5lciB3cmFwPVwibm93cmFwXCI+XHJcbiAgICAgICAgICAgICAgICA8R3JpZCBjbGFzc05hbWU9XCJpZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHtjYXNpbGxlcm8udmVyX2lkIHx8IGNhc2lsbGVyby5jYXNpbGxlcm99XHJcbiAgICAgICAgICAgICAgICA8L0dyaWQ+XHJcbiAgICAgICAgICAgICAgICA8R3JpZCBjbGFzc05hbWU9XCJvcGNpb24tdGV4dG9cIj5cclxuICAgICAgICAgICAgICAgICAgICA8VHlwb2dyYXBoeSBkZWJlLWxlZXI9e2Nhc2lsbGVyby5sZWVyPydTSSc6Y2FzaWxsZXJvLmxlZXI9PT1mYWxzZT8nTk8nOnByb3BzLmxlZXI/J1NJJzonTk8nfT57YnJlYWtlYWJsZVRleHQoY2FzaWxsZXJvLm5vbWJyZSl9PC9UeXBvZ3JhcGh5PlxyXG4gICAgICAgICAgICAgICAgICAgIHtjYXNpbGxlcm8uYWNsYXJhY2lvbj9cclxuICAgICAgICAgICAgICAgICAgICAgICAgPFR5cG9ncmFwaHkgY2xhc3NOYW1lPSdhY2xhcmFjaW9uJz57YnJlYWtlYWJsZVRleHQoY2FzaWxsZXJvLmFjbGFyYWNpb24pfTwvVHlwb2dyYXBoeT5cclxuICAgICAgICAgICAgICAgICAgICA6bnVsbH1cclxuICAgICAgICAgICAgICAgIDwvR3JpZD5cclxuICAgICAgICAgICAgPC9HcmlkPlxyXG4gICAgICAgIDwvQnV0dG9uPlxyXG4gICAgICAgIDxTYWx0b0Rlc3BsaWVndWUgY2FzaWxsZXJvPXtjYXNpbGxlcm99Lz5cclxuICAgIDwvR3JpZD5cclxufVxyXG5pbnRlcmZhY2UgSWNhc2lsbGVyb0Nvbk9wY2lvbmVze1xyXG4gICAgdmFyX25hbWU6SWRWYXJpYWJsZSxcclxuICAgIGRlc3BsaWVndWVDb250ZW5pZG86J3ZlcnRpY2FsJ3wnaG9yaXpvbnRhbCd8bnVsbCxcclxuICAgIGNhc2lsbGVyb3M6T3BjaW9uW11cclxufVxyXG5cclxuXHJcbmZ1bmN0aW9uIFNpTm9EZXNwbGllZ3VlKHByb3BzOntjYXNpbGxlcm9Db25PcGNpb25lczpJY2FzaWxsZXJvQ29uT3BjaW9uZXMsIGZvclBrOkZvclBrLCBkZXNwbGllZ3VlQ29udGVuaWRvOid2ZXJ0aWNhbCd8J2hvcml6b250YWwnfSl7XHJcbiAgICByZXR1cm4gPE9wY2lvbmVzRGVzcGxpZWd1ZSBcclxuICAgICAgICBjYXNpbGxlcm9Db25PcGNpb25lcz17cHJvcHMuY2FzaWxsZXJvQ29uT3BjaW9uZXN9IFxyXG4gICAgICAgIGZvclBrPXtwcm9wcy5mb3JQa30gXHJcbiAgICAgICAgbGVlcj17ZmFsc2V9XHJcbiAgICAgICAgZGVzcGxpZWd1ZUNvbnRlbmlkbz17cHJvcHMuZGVzcGxpZWd1ZUNvbnRlbmlkb31cclxuICAgIC8+XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHJlZ2lzdHJhZG9yRGVWYXJpYWJsZShwcmVndW50YTpQcmVndW50YXxPcGNpb25NdWx0aXBsZXxDb25qdW50b1ByZWd1bnRhcyl7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICAgIHJlc3B1ZXN0YXM6UmVzcHVlc3RhcywgZmVlZGJhY2tGb3JtOiBGb3JtU3RydWN0dXJlU3RhdGU8SWRWYXJpYWJsZSwgVmFsb3IsIElkRmluPiwgZWxlbWVudG86SFRNTERpdkVsZW1lbnRcclxuICAgICk9PntcclxuICAgICAgICB2YXIgdmFsb3JBY3R1YWwgPSBwcmVndW50YS52YXJfbmFtZSA9PSBudWxsID8gbnVsbCA6IHJlc3B1ZXN0YXNbcHJlZ3VudGEudmFyX25hbWVdO1xyXG4gICAgICAgIHZhciBmZWVkYmFja1JvdyA9IGZlZWRiYWNrRm9ybS5mZWVkYmFjaztcclxuICAgICAgICB2YXIgZmVlZGJhY2tWYXIgPSBwcmVndW50YS52YXJfbmFtZSA9PSBudWxsID8gbnVsbCA6IGZlZWRiYWNrUm93W3ByZWd1bnRhLnZhcl9uYW1lXTtcclxuICAgICAgICB2YXIgdGllbmVWYWxvcj12YWxvckFjdHVhbCE9bnVsbCAmJiBmZWVkYmFja1ZhciE9bnVsbD8oZmVlZGJhY2tWYXIuY29uUHJvYmxlbWE/J2ludmFsaWRvJzondmFsaWRvJyk6J05PJztcclxuICAgICAgICB2YXIgZXN0YWRvOkVzdGFkb1ZhcmlhYmxlOyBcclxuICAgICAgICBpZihwcmVndW50YS50aXBvdmFyKXtcclxuICAgICAgICAgICAgZXN0YWRvPWZlZWRiYWNrVmFyPy5lc3RhZG8hO1xyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICB2YXIgZmVlZGJhY2tNdWx0aSA9IHByZWd1bnRhLmNhc2lsbGVyb3MuZmlsdGVyKGM9PmMudmFyX25hbWUhPW51bGwpLnJlZHVjZSgocHYsIG9tKT0+e1xyXG4gICAgICAgICAgICAgICAgdmFyIGZiPWZlZWRiYWNrUm93Py5bb20udmFyX25hbWUhXSFcclxuICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGllbmVBY3R1YWw6IHB2LnRpZW5lQWN0dWFsIHx8IGZiLmVzdGFkbz09J2FjdHVhbCcsXHJcbiAgICAgICAgICAgICAgICAgICAgZXN0YVNhbHRlYWRhOiBwdi5lc3RhU2FsdGVhZGEgJiYgKGZiLmVzdGFkbz09J3NhbHRlYWRhJyB8fCBmYi5lc3RhZG89PSdmdWVyYV9kZV9mbHVqb19wb3Jfc2FsdG8nKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LCB7dGllbmVBY3R1YWw6ZmFsc2UsIGVzdGFTYWx0ZWFkYTp0cnVlfSk7XHJcbiAgICAgICAgICAgIGVzdGFkbz1mZWVkYmFja011bHRpLnRpZW5lQWN0dWFsPydhY3R1YWwnOmZlZWRiYWNrTXVsdGkuZXN0YVNhbHRlYWRhPydzYWx0ZWFkYSc6J3RvZGF2aWFfbm8nXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHNldEF0dHJEaXN0aW50byhlbGVtZW50bywgJ251ZXN0cm8tdmFsaWRhdG9yJywgZXN0YWRvKTtcclxuICAgICAgICBzZXRBdHRyRGlzdGludG8oZWxlbWVudG8sICd0aWVuZS12YWxvcicsIHRpZW5lVmFsb3IpO1xyXG4gICAgICAgIHNldEF0dHJEaXN0aW50byhlbGVtZW50bywgJ2VzdGEtaW5oYWJpbGl0YWRhJywgZmVlZGJhY2tWYXI/LmluaGFiaWxpdGFkYT8nU0knOidOTycpO1xyXG4gICAgICAgIGlmKHByZWd1bnRhLnZhcl9uYW1lKXtcclxuICAgICAgICAgICAgdmFyIG9wY2lvbmVzOkhUTUxCdXR0b25FbGVtZW50W10gPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChlbGVtZW50by5xdWVyeVNlbGVjdG9yQWxsKGAuYm90b24tb3BjaW9uW21pLXZhcmlhYmxlPVwiJHtwcmVndW50YS52YXJfbmFtZX1cIl1gKSwwKTtcclxuICAgICAgICAgICAgdmFyIGVsZW1lbnRvT3BjaW9uOkhUTUxCdXR0b25FbGVtZW50O1xyXG4gICAgICAgICAgICBmb3IoZWxlbWVudG9PcGNpb24gb2Ygb3BjaW9uZXMpe1xyXG4gICAgICAgICAgICAgICAgdmFyIHZhbG9yT3BjaW9uID0gZWxlbWVudG9PcGNpb24uZ2V0QXR0cmlidXRlKCd2YWxvci1vcGNpb24nKTtcclxuICAgICAgICAgICAgICAgIHNldEF0dHJEaXN0aW50byhlbGVtZW50b09wY2lvbiwgJ29wY2lvbi1zZWxlY2Npb25hZGEnLCB2YWxvck9wY2lvbiA9PSB2YWxvckFjdHVhbCA/IFwiU0lcIjogXCJOT1wiKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciBlbGVtZW50b3NJbnB1dDpIVE1MSW5wdXRFbGVtZW50W10gPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChlbGVtZW50by5xdWVyeVNlbGVjdG9yQWxsKCcudmFyaWFibGUnKSk7XHJcbiAgICAgICAgICAgIHZhciBlbGVtZW50b0lucHV0OkhUTUxJbnB1dEVsZW1lbnQ7XHJcbiAgICAgICAgICAgIGZvcihlbGVtZW50b0lucHV0IG9mIGVsZW1lbnRvc0lucHV0KXtcclxuICAgICAgICAgICAgICAgIHNldFZhbG9yRGlzdGludG8oZWxlbWVudG9JbnB1dCwgJ3ZhbHVlJywgdmFsb3JBY3R1YWwgPT0gbnVsbCA/ICcnIDogdmFsb3JBY3R1YWwudG9TdHJpbmcoKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFyIGJvdG9uTnNOYyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwibnNuYy1wcmVndW50YS1cIitwcmVndW50YS52YXJfbmFtZSkhO1xyXG4gICAgICAgICAgICBzZXRBdHRyRGlzdGludG8oYm90b25Oc05jLCAnb3BjaW9uLXNlbGVjY2lvbmFkYScsIHZhbG9yQWN0dWFsID09IChwcmVndW50YS52YWxvcl9uc19uYyA/PyAtOSkgPyBcIlNJXCIgOiBcIk5PXCIpXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBPcGNpb25NdWx0aXBsZURlc3BsaWVndWUocHJvcHM6e29wY2lvbk06T3BjaW9uTXVsdGlwbGUsIGZvclBrOkZvclBrfSl7XHJcbiAgICBjb25zdCB7b3BjaW9uTX0gPSBwcm9wcztcclxuICAgIHZhciBpZCA9IGBvcGNpb25NLSR7b3BjaW9uTS5pZF9jYXNpbGxlcm99YDtcclxuICAgIC8vQHRzLWlnbm9yZSBhbHR1bm9zIGNhc2lsbGVyb3Mgbm8gdGllbmVuIGVzcGVjaWFsLCBubyBpbXBvcnRhLCBlcyBzb2xvIHBhcmEgcG9uZXIgbG9zIG1ldGFkYXRvc1xyXG4gICAgdmFyIHN0eWxlcyA9IG9wY2lvbk0uZXNwZWNpYWw/LmZsZXhEaXJlY3Rpb24/e2ZsZXhEaXJlY3Rpb246b3BjaW9uTS5lc3BlY2lhbC5mbGV4RGlyZWN0aW9ufTp7fTtcclxuICAgIHJlZ2lzdHJhckVsZW1lbnRvKHtcclxuICAgICAgICBpZCwgXHJcbiAgICAgICAgZGlyZWN0OnRydWUsIFxyXG4gICAgICAgIGZ1bjogcmVnaXN0cmFkb3JEZVZhcmlhYmxlKG9wY2lvbk0pXHJcbiAgICB9KVxyXG4gICAgcmV0dXJuIDxEZXNwbGVnYXJDYXNpbGxlcm8gXHJcbiAgICAgICAgaWQ9e2lkfVxyXG4gICAgICAgIGNhc2lsbGVybz17b3BjaW9uTX1cclxuICAgICAgICBkZXNwbGllZ3VlRW5jYWJlemFkbz0nbGF0ZXJhbCdcclxuICAgICAgICBzdHlsZT17c3R5bGVzfVxyXG4gICAgPlxyXG4gICAgICAgIDxFbmNhYmV6YWRvRGVzcGxpZWd1ZSBcclxuICAgICAgICAgICAgY2FzaWxsZXJvPXtvcGNpb25NfSBcclxuICAgICAgICAgICAgdmVySWRHdWlvbj17dHJ1ZX0gXHJcbiAgICAgICAgICAgIGxlZXI9e29wY2lvbk0ubGVlciE9PWZhbHNlfSBcclxuICAgICAgICAgICAgZm9yUGs9e3Byb3BzLmZvclBrfVxyXG4gICAgICAgIC8+XHJcbiAgICAgICAgPFNpTm9EZXNwbGllZ3VlIFxyXG4gICAgICAgICAgICBjYXNpbGxlcm9Db25PcGNpb25lcz17b3BjaW9uTX0gXHJcbiAgICAgICAgICAgIGZvclBrPXtwcm9wcy5mb3JQa31cclxuICAgICAgICAgICAgZGVzcGxpZWd1ZUNvbnRlbmlkbz17cHJvcHMub3BjaW9uTS5kZXNwbGllZ3VlQ29udGVuaWRvPz8naG9yaXpvbnRhbCd9XHJcbiAgICAgICAgLz5cclxuICAgIDwvRGVzcGxlZ2FyQ2FzaWxsZXJvPlxyXG59XHJcblxyXG50eXBlIENhc2lsbGVyb0VuY2FiZXphYmxlID0gRm9ybXVsYXJpb3xCbG9xdWV8RmlsdHJvfENvbmp1bnRvUHJlZ3VudGFzfFByZWd1bnRhfE9wY2lvbk11bHRpcGxlfFByZWd1bnRhU2ltcGxlfENvbnNpc3RlbmNpYXxUZXh0b1xyXG5cclxuZnVuY3Rpb24gRW5jYWJlemFkb0Rlc3BsaWVndWUocHJvcHM6e2Nhc2lsbGVybzpDYXNpbGxlcm9FbmNhYmV6YWJsZSwgdmVySWRHdWlvbj86Ym9vbGVhbiwgbGVlcj86Ym9vbGVhbiwgZm9yUGs6Rm9yUGt9KXtcclxuICAgIHZhciB7Y2FzaWxsZXJvLCBmb3JQa30gPSBwcm9wcztcclxuICAgIHZhciBjb25DYW1wb09wY2lvbmVzID0gdXNlU2VsZWN0b3IoKHN0YXRlOkNhc29TdGF0ZSk9PnN0YXRlLm9wY2lvbmVzLmNvbkNhbXBvT3BjaW9uZXMpXHJcbiAgICB2YXIgaGFuZGxlQ2xpY2tCb3JyYXI9KCk9PntcclxuICAgICAgICBkaXNwYXRjaEJ5UGFzcyhhY2Npb25fcmVnaXN0cmFyX3Jlc3B1ZXN0YSwge3Jlc3B1ZXN0YTpudWxsLCB2YXJpYWJsZTpjYXNpbGxlcm8udmFyX25hbWUgYXMgSWRWYXJpYWJsZSwgZm9yUGs6Zm9yUGt9KVxyXG4gICAgfTtcclxuICAgIHZhciB2ZXJfaWQgPSBjYXNpbGxlcm8udmVyX2lkID8/IGNhc2lsbGVyby5jYXNpbGxlcm87XHJcbiAgICAvLyBAdHMtaWdub3JlIG5vIGVzdMOhIGVuIHRvZG9zIGxvcyBjYXNpbGxlcm9zIHBlcm8gYWPDoSBwYXJhIGVsIGRlc3BsaWVndWUgZGUgbWV0YWRhdG9zIG5vIGltcG9ydGFcclxuICAgIHZhciBjYWxjdWxhZGEgPSBjYXNpbGxlcm8uY2FsY3VsYWRhO1xyXG4gICAgdmFyIGlkID0gYGlkLWRpdi0ke2Nhc2lsbGVyby52YXJfbmFtZXx8Y2FzaWxsZXJvLmNhc2lsbGVyb31gO1xyXG4gICAgdmFyIGlkQWNjaW9uZXMgPSBcImFjY2lvbmVzLVwiK2lkO1xyXG4gICAgcmV0dXJuIDxkaXYgXHJcbiAgICAgICAgY2xhc3NOYW1lPVwiZW5jYWJlemFkb1wiIFxyXG4gICAgICAgIGRlYmUtbGVlcj17cHJvcHMubGVlcj8nU0knOidOTyd9IFxyXG4gICAgPlxyXG4gICAgICAgIDxkaXYgaWQ9e2lkfSBjbGFzc05hbWU9XCJpZC1kaXZcIiB0aXRsZT17YCR7Y2FzaWxsZXJvLmNhc2lsbGVyb30gLSAke2Nhc2lsbGVyby52YXJfbmFtZX1gfVxyXG4gICAgICAgICAgICBvbkNsaWNrPXsoKT0+e1xyXG4gICAgICAgICAgICAgICAgdmFyIGRpdiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkQWNjaW9uZXMpO1xyXG4gICAgICAgICAgICAgICAgZGl2IS5zZXRBdHRyaWJ1dGUoXCJhY2Npb24tdmlzaWJsZVwiLCAoMS1OdW1iZXIoZGl2IS5nZXRBdHRyaWJ1dGUoXCJhY2Npb24tdmlzaWJsZVwiKSkpLnRvU3RyaW5nKCkpO1xyXG4gICAgICAgICAgICAgICAgLy8gVE9ETy4gVmVyIHF1w6kgaGFjZW1vcyBjdWFuZG8gc2UgdG9jYSBlbCBJRCBkZSBsYSBwcmVndXRuYVxyXG4gICAgICAgICAgICAgICAgZGlzcGF0Y2hCeVBhc3MoYWNjaW9uX2lkX3ByZWd1bnRhLCB7cHJlZ3VudGE6IGNhc2lsbGVyby5jYXNpbGxlcm8gYXMgSWRQcmVndW50YSwgZm9yUGt9KTtcclxuICAgICAgICAgICAgfX1cclxuICAgICAgICA+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiaWRcIj5cclxuICAgICAgICAgICAgICAgIHt2ZXJfaWR9XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICB7KGNhc2lsbGVyby50aXBvdmFyPT1cInNpX25vXCJ8fGNhc2lsbGVyby50aXBvdmFyPT1cIm9wY2lvbmVzXCIpPzxDYW1wbyBkaXNhYmxlZD17ZmFsc2V9IHByZWd1bnRhPXtjYXNpbGxlcm99IGZvclBrPXtmb3JQa30gbWluaT17dHJ1ZX0gaGlkZGVuPXshY29uQ2FtcG9PcGNpb25lcyAmJiAncXVpdGFyJ30vPjpudWxsfVxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImFjY2lvbmVzLXByZWd1bnRhXCIgaWQ9e2lkQWNjaW9uZXN9IGFjY2lvbi12aXNpYmxlPVwiMFwiPlxyXG4gICAgICAgICAgICAgICAge2Nhc2lsbGVyby52YXJfbmFtZT88ZGl2PjxCdXR0b25cclxuICAgICAgICAgICAgICAgICAgICBpZD17XCJib3JyYXItcHJlZ3VudGEtXCIrY2FzaWxsZXJvLnZhcl9uYW1lfVxyXG4gICAgICAgICAgICAgICAgICAgIG1pLXZhcmlhYmxlPXtjYXNpbGxlcm8udmFyX25hbWV9XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyaWFudD1cIm91dGxpbmVkXCJcclxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJib3Rvbi1wcmVndW50YS1ib3JyYXJcIlxyXG4gICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZUNsaWNrQm9ycmFyfVxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgIDxJQ09OLkRlbGV0ZUZvcmV2ZXIvPlxyXG4gICAgICAgICAgICAgICAgPC9CdXR0b24+PC9kaXY+Om51bGx9XHJcbiAgICAgICAgICAgICAgICB7Y2FzaWxsZXJvLnZhcl9uYW1lPyhuc19uYz0+PGRpdj48QnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgaWQ9e1wibnNuYy1wcmVndW50YS1cIitjYXNpbGxlcm8udmFyX25hbWV9XHJcbiAgICAgICAgICAgICAgICAgICAgbWktdmFyaWFibGU9e2Nhc2lsbGVyby52YXJfbmFtZX1cclxuICAgICAgICAgICAgICAgICAgICB2YXJpYW50PVwib3V0bGluZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImJvdG9uLXByZWd1bnRhLW5zbmNcIlxyXG4gICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpPT57XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoQnlQYXNzKGFjY2lvbl9yZWdpc3RyYXJfcmVzcHVlc3RhLCB7cmVzcHVlc3RhOm5zX25jLCB2YXJpYWJsZTpjYXNpbGxlcm8udmFyX25hbWUgYXMgSWRWYXJpYWJsZSwgZm9yUGs6Zm9yUGt9KVxyXG4gICAgICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgTlMvTkNcclxuICAgICAgICAgICAgICAgIDwvQnV0dG9uPjwvZGl2PikoY2FzaWxsZXJvLnZhbG9yX25zX25jPz8tOSk6bnVsbH1cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJub21icmUtZGl2XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibm9tYnJlXCI+e2JyZWFrZWFibGVUZXh0KGNhc2lsbGVyby5ub21icmUpfTwvZGl2PlxyXG4gICAgICAgICAgICB7Y2FzaWxsZXJvLmFjbGFyYWNpb24/XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImFjbGFyYWNpb25cIj5cclxuICAgICAgICAgICAgICAgICAgICB7Y2FzaWxsZXJvLnNhbHRvICYmIGNhc2lsbGVyby50aXBvYz09J0ZJTFRSTyc/XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxTYWx0b0Rlc3BsaWVndWUgY2FzaWxsZXJvPXtjYXNpbGxlcm99IHByZWZpam89e2JyZWFrZWFibGVUZXh0KGNhc2lsbGVyby5hY2xhcmFjaW9uKX0vPlxyXG4gICAgICAgICAgICAgICAgICAgIDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtlYWJsZVRleHQoY2FzaWxsZXJvLmFjbGFyYWNpb24pXHJcbiAgICAgICAgICAgICAgICAgICAgfSAgICAgICAgXHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgOm51bGx9XHJcbiAgICAgICAgICAgIDxkaXYgbG9zLW1ldGFkYXRvcz1cInNpXCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBlbC1tZXRhZGF0bz1cInZhcmlhYmxlXCI+e2Nhc2lsbGVyby52YXJfbmFtZX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICB7Y2FzaWxsZXJvLnRpcG92YXIgJiYgY2FzaWxsZXJvLnRpcG92YXIhPSdvcGNpb25lcycgJiYgY2FzaWxsZXJvLnRpcG92YXIhPSdzaV9ubyc/XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gZWwtbWV0YWRhdG89XCJ0aXBvdmFyXCI+e2Nhc2lsbGVyby50aXBvdmFyfTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDpudWxsfVxyXG4gICAgICAgICAgICAgICAgeyAgIC8vQHRzLWlnbm9yZSB1bmEgb3BjacOzbiBtw7psdGlwbGUgbnVuY2EgbG8gYSBhIHNlciwgbm8gdGllbmUgZWwgY2FtcG8sIG5vIGltcG9ydGFcclxuICAgICAgICAgICAgICAgICAgICBjYXNpbGxlcm8ub3B0YXRpdm8/PHNwYW4gZWwtbWV0YWRhdG89XCJvcHRhdGl2YVwiPm9wdGF0aXZhPC9zcGFuPjpudWxsXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB7Y2FsY3VsYWRhPzxzcGFuIGVsLW1ldGFkYXRvPVwiY2FsY3VsYWRhXCI+Y2FsY3VsYWRhPC9zcGFuPjpudWxsfVxyXG4gICAgICAgICAgICAgICAge2Nhc2lsbGVyby5kZXNwbGllZ3VlT2N1bHRhPzxzcGFuIGVsLW1ldGFkYXRvPVwib2N1bHRhXCI+b2N1bHRhPC9zcGFuPjpudWxsfVxyXG4gICAgICAgICAgICAgICAge2Nhc2lsbGVyby5leHByZXNpb25faGFiaWxpdGFyPzxzcGFuIGVsLW1ldGFkYXRvPVwiZXhwcmVzaW9uX2hhYmlsaXRhclwiPmhhYmlsaXRhOiB7Y2FzaWxsZXJvLmV4cHJlc2lvbl9oYWJpbGl0YXJ9PC9zcGFuPjpudWxsfVxyXG4gICAgICAgICAgICAgICAgeyAgIC8vQHRzLWlnbm9yZSBhbHR1bm9zIGNhc2lsbGVyb3Mgbm8gdGllbmVuIGVzcGVjaWFsLCBubyBpbXBvcnRhLCBlcyBzb2xvIHBhcmEgcG9uZXIgbG9zIG1ldGFkYXRvc1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2lsbGVyby5lc3BlY2lhbD8uYXV0b2luZz88c3BhbiBlbC1tZXRhZGF0bz1cImV4cHJlc2lvbl9hdXRvaW5nXCI+YXV0b2luZzoge2Nhc2lsbGVyby5lc3BlY2lhbD8uYXV0b2luZ308L3NwYW4+Om51bGxcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxufVxyXG5cclxuZnVuY3Rpb24gRGVzcGxlZ2FyQ29uZmlybWFyQm9ycmFyUmVzcHVlc3RhKHByb3BzOntmb3JQazpGb3JQaywgdmFyaWFibGVCb3JyYXI6SWRWYXJpYWJsZX0pe1xyXG4gICAgdmFyIFtvcGVuLCBzZXRPcGVuXSA9IHVzZVN0YXRlKCEhcHJvcHMudmFyaWFibGVCb3JyYXIpXHJcbiAgICB2YXIgZGlzcGF0Y2ggPSB1c2VEaXNwYXRjaCgpO1xyXG4gICAgY29uc3QgaGFuZGxlQ2xvc2UgPSAoKSA9PiB7XHJcbiAgICAgICAgZGlzcGF0Y2goZGlzcGF0Y2hlcnMuQ09ORklSTUFSX0JPUlJBUl9SRVNQVUVTVEEoe2ZvclBrOnByb3BzLmZvclBrLCB2YXJpYWJsZTpudWxsfSkpO1xyXG4gICAgICAgIHNldE9wZW4oZmFsc2UpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIDxQb3BvdmVyXHJcbiAgICAgICAgICAgIGlkPXtcInBvcG92ZXItY29uZmlybWFyXCJ9XHJcbiAgICAgICAgICAgIG9wZW49e29wZW59XHJcbiAgICAgICAgICAgIG9uQ2xvc2U9e2hhbmRsZUNsb3NlfVxyXG4gICAgICAgICAgICBhbmNob3JPcmlnaW49e3tcclxuICAgICAgICAgICAgICAgIHZlcnRpY2FsOiAnYm90dG9tJyxcclxuICAgICAgICAgICAgICAgIGhvcml6b250YWw6ICdjZW50ZXInLFxyXG4gICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICB0cmFuc2Zvcm1PcmlnaW49e3tcclxuICAgICAgICAgICAgICAgIHZlcnRpY2FsOiAndG9wJyxcclxuICAgICAgICAgICAgICAgIGhvcml6b250YWw6ICdsZWZ0JyxcclxuICAgICAgICAgICAgfX1cclxuICAgICAgICA+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+XHJcbn1cclxuXHJcbmZ1bmN0aW9uIFByZWd1bnRhRGVzcGxpZWd1ZShwcm9wczp7XHJcbiAgICBwcmVndW50YTpQcmVndW50YSwgXHJcbiAgICBmb3JQazpGb3JQaywgXHJcbiAgICBkZXNwbGllZ3VlRW5jYWJlemFkbzonbGF0ZXJhbCd8J3N1cGVyaW9yJ1xyXG59KXtcclxuICAgIHZhciB7cHJlZ3VudGF9ID0gcHJvcHM7XHJcbiAgICB2YXIgZGlzcGF0Y2g9dXNlRGlzcGF0Y2goKTtcclxuICAgIHZhciBlc3RhZG86RXN0YWRvVmFyaWFibGU7XHJcbiAgICB2YXIgaWQgPSBgcHJlZ3VudGEtJHtwcmVndW50YS5pZF9jYXNpbGxlcm99YFxyXG4gICAgcmVnaXN0cmFyRWxlbWVudG8oe1xyXG4gICAgICAgIGlkLCBcclxuICAgICAgICBkaXJlY3Q6dHJ1ZSwgXHJcbiAgICAgICAgZnVuOiByZWdpc3RyYWRvckRlVmFyaWFibGUocHJlZ3VudGEpXHJcbiAgICB9KVxyXG4gICAgcmV0dXJuIDxEZXNwbGVnYXJDYXNpbGxlcm9cclxuICAgICAgICBpZD17aWR9XHJcbiAgICAgICAgY2FzaWxsZXJvPXtwcmVndW50YX1cclxuICAgICAgICBudWVzdHJvLXRpcG92YXI9e3ByZWd1bnRhLnRpcG92YXJ8fFwibXVsdGlwbGVcIn0gXHJcbiAgICAgICAgb2N1bHRhci1zYWx0ZWFkYT17cHJlZ3VudGEuZGVzcGxpZWd1ZU9jdWx0YT8ocHJlZ3VudGEuZXhwcmVzaW9uX2hhYmlsaXRhcl9qcz8nSU5IQUJJTElUQVInOidTSScpOidOTyd9XHJcbiAgICAgICAgZGVzcGxpZWd1ZUVuY2FiZXphZG89e3Byb3BzLmRlc3BsaWVndWVFbmNhYmV6YWRvfVxyXG4gICAgPlxyXG4gICAgICAgIDxFbmNhYmV6YWRvRGVzcGxpZWd1ZSBcclxuICAgICAgICAgICAgY2FzaWxsZXJvPXtwcmVndW50YX0gXHJcbiAgICAgICAgICAgIGxlZXI9e3ByZWd1bnRhLmxlZXIhPT1mYWxzZX0gIFxyXG4gICAgICAgICAgICBmb3JQaz17cHJvcHMuZm9yUGt9XHJcbiAgICAgICAgLz5cclxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImNvbnRlbmlkb1wiPntcclxuICAgICAgICAgICAgcHJlZ3VudGEudGlwb3Zhcj09XCJzaV9ub1wiPzxHcmlkIGNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDxTaU5vRGVzcGxpZWd1ZSBcclxuICAgICAgICAgICAgICAgICAgICBjYXNpbGxlcm9Db25PcGNpb25lcz17cHJlZ3VudGF9IFxyXG4gICAgICAgICAgICAgICAgICAgIGZvclBrPXtwcm9wcy5mb3JQa30gXHJcbiAgICAgICAgICAgICAgICAgICAgZGVzcGxpZWd1ZUNvbnRlbmlkbz17cHJvcHMucHJlZ3VudGEuZGVzcGxpZWd1ZUNvbnRlbmlkbz8/J3ZlcnRpY2FsJ31cclxuICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgIDwvR3JpZD46XHJcbiAgICAgICAgICAgIHByZWd1bnRhLnRpcG92YXI9PVwib3BjaW9uZXNcIiA/XHJcbiAgICAgICAgICAgICAgICA8T3BjaW9uZXNEZXNwbGllZ3VlIFxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2lsbGVyb0Nvbk9wY2lvbmVzPXtwcmVndW50YX0gXHJcbiAgICAgICAgICAgICAgICAgICAgZm9yUGs9e3Byb3BzLmZvclBrfSBcclxuICAgICAgICAgICAgICAgICAgICBsZWVyPXshIXByZWd1bnRhLmxlZXJ9XHJcbiAgICAgICAgICAgICAgICAgICAgZGVzcGxpZWd1ZUNvbnRlbmlkbz17cHJlZ3VudGEuZGVzcGxpZWd1ZUNvbnRlbmlkbz8/J3ZlcnRpY2FsJ31cclxuICAgICAgICAgICAgICAgIC8+OlxyXG4gICAgICAgICAgICBwcmVndW50YS50aXBvdmFyPT1udWxsP1xyXG4gICAgICAgICAgICAgICAgKHByZWd1bnRhLmNhc2lsbGVyb3MgYXMgKE9wY2lvbk11bHRpcGxlfENvbnNpc3RlbmNpYSlbXSkubWFwKChvcGNpb25NdWx0aXBsZSk9PlxyXG4gICAgICAgICAgICAgICAgICAgIG9wY2lvbk11bHRpcGxlLnRpcG9jPT0nT00nPyAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgPE9wY2lvbk11bHRpcGxlRGVzcGxpZWd1ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5PXtvcGNpb25NdWx0aXBsZS5pZF9jYXNpbGxlcm99IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BjaW9uTT17b3BjaW9uTXVsdGlwbGV9IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yUGs9e3Byb3BzLmZvclBrfSBcclxuICAgICAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICAgICA6IC8vbGFzIGNvbnNpc3RlbmNpYXMgcHVlZGVuIHNlciBoZXJtYW5hcyBkZSBPTVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8Q29uc2lzdGVuY2lhRGVzcGxpZWd1ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5PXtvcGNpb25NdWx0aXBsZS5pZF9jYXNpbGxlcm99XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNpbGxlcm89e29wY2lvbk11bHRpcGxlfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yUGs9e3Byb3BzLmZvclBrfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvPiAgICBcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgOlxyXG4gICAgICAgICAgICAoKHByZWd1bnRhU2ltcGxlOlByZWd1bnRhU2ltcGxlKT0+XHJcbiAgICAgICAgICAgICAgICA8Q2FtcG9cclxuICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17cHJlZ3VudGFTaW1wbGUuY2FsY3VsYWRhP3RydWU6ZmFsc2V9XHJcbiAgICAgICAgICAgICAgICAgICAgcHJlZ3VudGE9e3ByZWd1bnRhU2ltcGxlfVxyXG4gICAgICAgICAgICAgICAgICAgIGZvclBrPXtwcm9wcy5mb3JQa31cclxuICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICkocHJlZ3VudGEpXHJcbiAgICAgICAgfTwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwicGllLXByZWd1bnRhXCI+XHJcbiAgICAgICAgICAgIDxTYWx0b0Rlc3BsaWVndWUgXHJcbiAgICAgICAgICAgICAgICBjYXNpbGxlcm89e3ByZWd1bnRhfVxyXG4gICAgICAgICAgICAgICAgcHJlZmlqbz17cHJlZ3VudGEudGlwb3Zhcj09XCJvcGNpb25lc1wiPyhcclxuICAgICAgICAgICAgICAgICAgICBwcmVndW50YS5jYXNpbGxlcm9zLnNvbWUob3BjaW9uPT5vcGNpb24uc2FsdG8pP1wicmVzdG8gZGUgbGFzIG9wY2lvbmVzXCI6XCJ0b2RhcyBsYXMgb3BjaW9uZXNcIlxyXG4gICAgICAgICAgICAgICAgKTpcIlwifVxyXG4gICAgICAgICAgICAvPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9EZXNwbGVnYXJDYXNpbGxlcm8+XHJcbn1cclxuXHJcbnZhciBjYWxjdWxhckRpc2FibGVkQkZBZ3JlZ2FyTGlzdG8gPSAoXHJcbiAgICBjb25maWdTb3J0ZW9Gb3JtdWxhcmlvOkNvbmZpZ3VyYWNpb25Tb3J0ZW9Gb3JtdWxhcmlvfG51bGwsIFxyXG4gICAgaGFiaWxpdGFjaW9uQm90b25Gb3JtdWxhcmlvOiBDb25maWd1cmFjaW9uSGFiaWxpdGFyQm90b25Gb3JtdWxhcmlvfG51bGwsXHJcbiAgICBmb3JtdWxhcmlvOklkRm9ybXVsYXJpb1xyXG4pPT57XHJcbiAgICBpZihoYWJpbGl0YWNpb25Cb3RvbkZvcm11bGFyaW8gJiYgaGFiaWxpdGFjaW9uQm90b25Gb3JtdWxhcmlvW2Zvcm11bGFyaW9dKXtcclxuICAgICAgICByZXR1cm4gIWhhYmlsaXRhY2lvbkJvdG9uRm9ybXVsYXJpb1tmb3JtdWxhcmlvXS5oYWJpbGl0YXJfYWdyZWdhcl9saXN0b1xyXG4gICAgfWVsc2V7XHJcbiAgICAgICAgcmV0dXJuICEhKGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW8gJiYgY29uZmlnU29ydGVvRm9ybXVsYXJpby5pZF9mb3JtdWxhcmlvX2luZGl2aWR1YWwgPT0gZm9ybXVsYXJpbylcclxuICAgIH1cclxufVxyXG5cclxuZnVuY3Rpb24gYm90b25lc0RlbEZvcm11bGFyaW8ocjpSZXNwdWVzdGFzLCB1bmlkYWRfYW5hbGlzaXM6SWRVbmlkYWRBbmFsaXNpcywgZXN0cnVjdHVyYTpFc3RydWN0dXJhLCBmb3JQa1BhZHJlOkZvclBrLCBmZWVkYmFja0FsbDp7W2Zvcm11bGFyaW8gaW4gUGxhaW5Gb3JQa106Rm9ybVN0cnVjdHVyZVN0YXRlPElkVmFyaWFibGUsIFZhbG9yLCBJZEZpbj59KTpIdG1sVGFnPEhUTUxEaXZFbGVtZW50PntcclxuICAgIHZhciBmb3Jtc1ZpdmllbmRhID0gZ2V0Rm9ybXVsYXJpb3NGb3JJZFZpdmllbmRhKGZvclBrUGFkcmUudml2aWVuZGEpO1xyXG4gICAgdmFyIHVhRGVmID0gZXN0cnVjdHVyYS51bmlkYWRlc19hbmFsaXNpc1t1bmlkYWRfYW5hbGlzaXNdO1xyXG4gICAgdmFyIGFycmF5RXN0cnVjdHVyYUZvcm11bGFyaW9zID0gKGxpa2VBcihlc3RydWN0dXJhLmZvcm11bGFyaW9zKSkuYXJyYXkoKTtcclxuICAgIHZhciB4ID0gbGlrZUFyKHVhRGVmLmhpamFzKS5maWx0ZXIodWFIaWphPT5cclxuICAgICAgICAgICAgLy9kZXNjYXJ0byB1YXMgcXVlIG5vIGVzdMOpbiBlbiBuaW5ndW4gZm9ybVxyXG4gICAgICAgICAgICBhcnJheUVzdHJ1Y3R1cmFGb3JtdWxhcmlvcy5maWx0ZXIoKGluZm9Gb3JtdWxhcmlvKT0+XHJcbiAgICAgICAgICAgICAgICBpbmZvRm9ybXVsYXJpby5jYXNpbGxlcm9zLnVuaWRhZF9hbmFsaXNpcyA9PSB1YUhpamE/LnVuaWRhZF9hbmFsaXNpcyAmJiBmb3Jtc1ZpdmllbmRhLmluY2x1ZGVzKGluZm9Gb3JtdWxhcmlvLmNhc2lsbGVyb3MuaWRfY2FzaWxsZXJvIGFzIElkRm9ybXVsYXJpbylcclxuICAgICAgICAgICAgKS5sZW5ndGggPiAwXHJcbiAgICAgICAgKS5tYXAodWFIaWphPT4oXHJcbiAgICAgICAgdWFIaWphID09IG51bGwgPyBudWxsIDpcclxuICAgICAgICBodG1sLmRpdih7Y2xhc3M6J3VhLWhpamFzJ30sW1xyXG4gICAgICAgICAgICBodG1sLmRpdih1YUhpamEudW5pZGFkX2FuYWxpc2lzKSxcclxuICAgICAgICAgICAgaHRtbC5kaXYoXHJcbiAgICAgICAgICAgICAgICBsaWtlQXIoclt1YUhpamEudW5pZGFkX2FuYWxpc2lzXXx8W10pLm1hcCgocmVzcHVlc3Rhc0hpamEsIGkpPT57XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIG51bSA9IE51bWJlcihpKSsxXHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGZvclBrSGlqYVBhcmNpYWwgPSB7Li4uZm9yUGtQYWRyZSwgW3VhSGlqYS5wa19hZ3JlZ2FkYV06IG51bX07XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW8gPSBlc3RydWN0dXJhLmNvbmZpZ1NvcnRlbz9lc3RydWN0dXJhLmNvbmZpZ1NvcnRlb1tnZXRNYWluRm9ybUZvclZpdmllbmRhKGZvclBrUGFkcmUudml2aWVuZGEhKV06bnVsbFxyXG4gICAgICAgICAgICAgICAgICAgIHZhciBoYWJpbGl0YWNpb25Cb3RvbkZvcm11bGFyaW8gPSBlc3RydWN0dXJhLmhhYmlsaXRhY2lvbkJvdG9uRm9ybXVsYXJpbztcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaHRtbC5kaXYoe2NsYXNzOidudW1lcmFkb3ItdWEnfSwgW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBodG1sLmRpdih7Y2xhc3M6J2JvdG9uZXMtdWEnfSxbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBodG1sLmRpdih7Y2xhc3M6J251bWVyby11YSd9LG51bS50b1N0cmluZygpKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmxpa2VBcihlc3RydWN0dXJhLmZvcm11bGFyaW9zKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLmZpbHRlcihmb3JtRGVmPT5mb3JtRGVmLmNhc2lsbGVyb3MudW5pZGFkX2FuYWxpc2lzID09IHVhSGlqYS51bmlkYWRfYW5hbGlzaXMgJiYgZm9ybXNWaXZpZW5kYS5pbmNsdWRlcyhmb3JtRGVmLmNhc2lsbGVyb3MuaWRfY2FzaWxsZXJvIGFzIElkRm9ybXVsYXJpbykpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAubWFwKChfZm9ybURlZiwgZm9ybXVsYXJpbyk9PntcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZm9yUGsgPSB7Li4uZm9yUGtIaWphUGFyY2lhbCwgZm9ybXVsYXJpb307XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZlZWRiYWNrRm9ybSA9IGZlZWRiYWNrQWxsW3RvUGxhaW5Gb3JQayhmb3JQayldO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmZWVkYmFja0Zvcm0gPyBodG1sLmRpdih7fSxbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGh0bWwuYnV0dG9uKCh1YUhpamEhKS5wa19hZ3JlZ2FkYStcIiBvazogXCIrKE51bWJlcihpKSsxKSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvdG9uRm9ybXVsYXJpb0NvblJlc3VtZW4oXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yUGssIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bSwgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0dWFsOiB0cnVlIHx8IGNhbGN1bGFyQWN0dWFsQkYoY29uZmlnU29ydGVvRm9ybXVsYXJpbywgbnVtLCBudWxsLCBmb3JtdWxhcmlvLCByKSwgLy9SRVZJU0FSIHRydWUgcGFyYSBxdWUgbm8gc2UgZ3Jpc2VuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldmlvOmZhbHNlLCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZDogY2FsY3VsYXJEaXNhYmxlZEJGKGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW8sIGhhYmlsaXRhY2lvbkJvdG9uRm9ybXVsYXJpbywgbnVtLCBmb3JtdWxhcmlvLCByKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZlZWRiYWNrRm9ybSwgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2Rlc3BsaWVndWVPY3VsdGE6ZmFsc2UsIGV4cHJlc2lvbl9oYWJpbGl0YXJfanM6JycsIG5vbWJyZTpmb3JtdWxhcmlvLCBhY2xhcmFjaW9uOm51bGwsIHNhbHRvOmZvcm11bGFyaW99LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yUGtQYWRyZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYm90b24taXItcmVzdW1lbi1mb3JtdWxhcmlvXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlc3RydWN0dXJhLmZvcm11bGFyaW9zW2Zvcm11bGFyaW9dLmNhc2lsbGVyb3NcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pIDogbnVsbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkuYXJyYXkoKS5tYXAoeD0+eCA9PSBudWxsID8gbnVsbCA6IHgpLnJldmVyc2UoKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgXSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgLGJvdG9uZXNEZWxGb3JtdWxhcmlvKHJlc3B1ZXN0YXNIaWphLCB1YUhpamEudW5pZGFkX2FuYWxpc2lzLCBlc3RydWN0dXJhLCBmb3JQa0hpamFQYXJjaWFsLCBmZWVkYmFja0FsbClcclxuICAgICAgICAgICAgICAgICAgICBdKVxyXG4gICAgICAgICAgICAgICAgfSkuYXJyYXkoKS5tYXAoeD0+eCA9PSBudWxsID8gbnVsbCA6IHgpXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICBdKVxyXG4gICAgKSkuYXJyYXkoKS5tYXAoeD0+eCA9PSBudWxsID8gbnVsbCA6IHgpO1xyXG4gICAgcmV0dXJuIGh0bWwuZGl2KC8qe3N0eWxlOidkaXNwbGF5OmZsZXg7IGZsZXgtZGlyZWN0aW9uOnJvdyd9LCoveCk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIFRleHRvRGVzcGxpZWd1ZShwcm9wczp7Y2FzaWxsZXJvOlRleHRvLCBmb3JQazpGb3JQa30pe1xyXG4gICAgdmFyIHtjYXNpbGxlcm8sIGZvclBrfSA9IHByb3BzO1xyXG4gICAgdmFyIGRpc3BhdGNoID0gdXNlRGlzcGF0Y2goKTtcclxuICAgIHZhciBoYWJpbGl0YWRvciA9IGNhc2lsbGVyby5leHByZXNpb25faGFiaWxpdGFyX2pzP2dldEZ1bmNpb25IYWJpbGl0YXIoY2FzaWxsZXJvLmV4cHJlc2lvbl9oYWJpbGl0YXJfanMpOigpPT50cnVlO1xyXG4gICAgdmFyIHttb2RvRGVzcGxpZWd1ZX0gPSB1c2VTZWxlY3RvclZpdmllbmRhKGZvclBrKTtcclxuICAgIHZhciBpZCA9IGB0ZXh0by0ke2Nhc2lsbGVyby5pZF9jYXNpbGxlcm99YDtcclxuICAgIHJlZ2lzdHJhckVsZW1lbnRvKHtpZCwgc3R5bGU6J2Rpc3BsYXknLCBmdW46KHI6UmVzcHVlc3Rhcyk9PmhhYmlsaXRhZG9yKHIpIHx8IG1vZG9EZXNwbGllZ3VlPT0nbWV0YWRhdG9zJz8nYmxvY2snOidub25lJ30pXHJcbiAgICB2YXIgZXNSZXN1bWVuRm9ybXVsYXJpbyA9IGNhc2lsbGVyby5jYXNpbGxlcm89PSdSZXNGb3InIGFzIElkQ2FzaWxsZXJvOyAvLyBUT0RPOiBDYW1iaWEgZXN0byBxdWUgZXN0w6EgamFyY29kZWFkby5cclxuICAgIGlmKGVzUmVzdW1lbkZvcm11bGFyaW8pe1xyXG4gICAgICAgIHJlZ2lzdHJhckVsZW1lbnRvKHtpZCwgZGlyZWN0OnRydWUsIFxyXG4gICAgICAgICAgICBmdW46KFxyXG4gICAgICAgICAgICAgICAgcjpSZXNwdWVzdGFzLCBcclxuICAgICAgICAgICAgICAgIF9mZWVkYmFja0Zvcm06IEZvcm1TdHJ1Y3R1cmVTdGF0ZTxJZFZhcmlhYmxlLCBWYWxvciwgSWRGaW4+LCBcclxuICAgICAgICAgICAgICAgIGVsZW1lbnRvOkhUTUxEaXZFbGVtZW50LCBcclxuICAgICAgICAgICAgICAgIGZlZWRiYWNrQWxsOntbZm9ybXVsYXJpbyBpbiBQbGFpbkZvclBrXTpGb3JtU3RydWN0dXJlU3RhdGU8SWRWYXJpYWJsZSxWYWxvciwgSWRGaW4+fSwgXHJcbiAgICAgICAgICAgICAgICBlc3RydWN0dXJhOkVzdHJ1Y3R1cmFcclxuICAgICAgICAgICAgKT0+e1xyXG4gICAgICAgICAgICAgICAgZWxlbWVudG8uc3R5bGUuZGlzcGxheT0nJztcclxuICAgICAgICAgICAgICAgIC8vQHRzLWlnbm9yZSBsYXMgcmVzcHVlc3RhcyBzb24gcmVzcHVlc3Rhc1JhaXogcG9ycXVlIFJlc0ZvciBlc3TDoSBlbiBlbCBmb3JtIHBwYWxcclxuICAgICAgICAgICAgICAgIGlmKHJbJ3Jlc3VtZW5Fc3RhZG8nXSBhcyBSZXN1bWVuRXN0YWRvID09ICd2YWNpbycpe1xyXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnRvLnRleHRDb250ZW50ID0gXCJyZWxldmFtaWVudG8gc2luIGVtcGV6YXJcIjtcclxuICAgICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnRvLnRleHRDb250ZW50ID0gXCJyZWxldmFtaWVudG8gZW1wZXphZG9cIjtcclxuICAgICAgICAgICAgICAgICAgICB2YXIge3VuaWRhZF9hbmFsaXNpc30gPSBlc3RydWN0dXJhLmZvcm11bGFyaW9zW2ZvclBrLmZvcm11bGFyaW9dLmNhc2lsbGVyb3M7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudG8uaW5uZXJIVE1MPVwiXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudG8uYXBwZW5kQ2hpbGQoYm90b25lc0RlbEZvcm11bGFyaW8ociwgdW5pZGFkX2FuYWxpc2lzLCBlc3RydWN0dXJhLCBmb3JQaywgZmVlZGJhY2tBbGwpLmNyZWF0ZSgpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcbiAgICB2YXIgaXIgPSAoZGVmQm90b246RGVmaW5pY2lvbkZvcm11bGFyaW9BYnJpcik9PntcclxuICAgICAgICAvLyB2YXIgbnVldmFGb3JQaz17Li4uZm9yUGssIGZvcm11bGFyaW86aWRGb3JtdWxhcmlvRGVzdGlub307XHJcbiAgICAgICAgLy8gbnVldmFGb3JQa1tudWV2b0NhbXBvUGtdID0gZGVmQm90b24ubnVtXHJcbiAgICAgICAgZGlzcGF0Y2hCeVBhc3MoYWNjaW9uX2FicmlyX2Zvcm11bGFyaW8se2ZvclBrOmRlZkJvdG9uLmZvclBrfSk7XHJcbiAgICAgICAgZGlzcGF0Y2goZGlzcGF0Y2hlcnMuQ0FNQklBUl9GT1JNVUxBUklPKHtmb3JQazpkZWZCb3Rvbi5mb3JQaywgYXBpbGFyVnVlbHRhOnRydWV9KSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gPERlc3BsZWdhckNhc2lsbGVybyBcclxuICAgICAgICBpZD17YCR7aWR9LWV4dGVybm9gfVxyXG4gICAgICAgIGNhc2lsbGVybz17Y2FzaWxsZXJvfVxyXG4gICAgPlxyXG4gICAgICAgIDxFbmNhYmV6YWRvRGVzcGxpZWd1ZSBjYXNpbGxlcm89e2Nhc2lsbGVyb30gbGVlcj17ZmFsc2V9IGZvclBrPXtmb3JQa30vPlxyXG4gICAgICAgIDxkaXYgaWQ9e2lkfSBzdHlsZT17e2Rpc3BsYXk6J25vbmUnfX0+PC9kaXY+XHJcbiAgICAgICAge2VzUmVzdW1lbkZvcm11bGFyaW8/XHJcbiAgICAgICAgPEJ1dHRvbiBjbGFzc05hbWU9XCJzcGVjaWFsLWJ1dHRvblwiIGlkPVwiYm90b24taXItcmVzdW1lbi1mb3JtdWxhcmlvXCIgc3R5bGU9e3tkaXNwbGF5Oidub25lJ319XHJcbiAgICAgICAgICAgIG9uQ2xpY2s9eyhldmVudCk9PntcclxuICAgICAgICAgICAgICAgIGlyKEpTT04ucGFyc2UoKGV2ZW50LnRhcmdldCEgYXMgdW5rbm93biBhcyBIVE1MQnV0dG9uRWxlbWVudCkuZ2V0QXR0cmlidXRlKCdkZWYtYnV0dG9uJykhKSlcclxuICAgICAgICAgICAgfX1cclxuICAgICAgICA+aXIgKGludGVybm8pPC9CdXR0b24+XHJcbiAgICAgICAgOm51bGx9XHJcblxyXG4gICAgPC9EZXNwbGVnYXJDYXNpbGxlcm8+XHJcbn1cclxuXHJcbmZ1bmN0aW9uIEZpbHRyb0Rlc3BsaWVndWUocHJvcHM6e2ZpbHRybzpGaWx0cm8sIGZvclBrOkZvclBrfSl7XHJcbiAgICB2YXIge2ZpbHRyb30gPSBwcm9wcztcclxuICAgIHJldHVybiA8RGVzcGxlZ2FyQ2FzaWxsZXJvIGNhc2lsbGVybz17ZmlsdHJvfT5cclxuICAgICAgICA8RGVzcGxpZWd1ZUVuY2FiZXphZG8gY2FzaWxsZXJvPXtmaWx0cm99Lz5cclxuICAgIDwvRGVzcGxlZ2FyQ2FzaWxsZXJvPlxyXG59XHJcblxyXG5mdW5jdGlvbiBDb25zaXN0ZW5jaWFEZXNwbGllZ3VlKHByb3BzOntjYXNpbGxlcm86Q29uc2lzdGVuY2lhLCBmb3JQazpGb3JQa30pe1xyXG4gICAgdmFyIHtjYXNpbGxlcm8sIGZvclBrfSA9IHByb3BzO1xyXG4gICAgdmFyIGhhYmlsaXRhZG9yID0gY2FzaWxsZXJvLmV4cHJlc2lvbl9oYWJpbGl0YXJfanM/Z2V0RnVuY2lvbkhhYmlsaXRhcihjYXNpbGxlcm8uZXhwcmVzaW9uX2hhYmlsaXRhcl9qcyk6KCk9PnRydWU7XHJcbiAgICB2YXIge21vZG9EZXNwbGllZ3VlfSA9IHVzZVNlbGVjdG9yVml2aWVuZGEoZm9yUGspO1xyXG4gICAgdmFyIGlkID0gYGNvbnNpc3RlbmNpYS0ke2Nhc2lsbGVyby5pZF9jYXNpbGxlcm99YDtcclxuICAgIHJlZ2lzdHJhckVsZW1lbnRvKHtpZCwgc3R5bGU6J2Rpc3BsYXknLCBmdW46KHI6UmVzcHVlc3Rhcyk9PmhhYmlsaXRhZG9yKHIpIHx8IG1vZG9EZXNwbGllZ3VlPT0nbWV0YWRhdG9zJz8nYmxvY2snOidub25lJ30pXHJcbiAgICByZXR1cm4gPERlc3BsZWdhckNhc2lsbGVybyBcclxuICAgICAgICBpZD17aWR9XHJcbiAgICAgICAgY2FzaWxsZXJvPXtjYXNpbGxlcm99XHJcbiAgICAgICAgc3R5bGU9e3tkaXNwbGF5Oidub25lJ319XHJcbiAgICA+XHJcbiAgICAgICAgPEVuY2FiZXphZG9EZXNwbGllZ3VlIGNhc2lsbGVybz17Y2FzaWxsZXJvfSBsZWVyPXtmYWxzZX0gZm9yUGs9e2ZvclBrfS8+XHJcbiAgICA8L0Rlc3BsZWdhckNhc2lsbGVybz5cclxufVxyXG5cclxudHlwZSBEZWZpbmljaW9uRm9ybXVsYXJpb0FicmlyPVxyXG4oe2ZvclBrOkZvclBrLCBudW06bnVtYmVyLCBhY3R1YWw6Ym9vbGVhbiwgcHJldmlvOmJvb2xlYW59IHwgXHJcbntmb3JQazpGb3JQaywgbnVtOm51bWJlciwgYWN0dWFsOmJvb2xlYW4sIHByZXZpbzpmYWxzZSwgZXNBZ3JlZ2FyOnRydWV9IHwgXHJcbntmb3JQazpGb3JQaywgbnVtOm51bWJlciwgYWN0dWFsOmJvb2xlYW4sIHByZXZpbzpmYWxzZSwgZXNDb25maXJtYXI6dHJ1ZX0gfFxyXG57Zm9yUGs6Rm9yUGssIG51bTpudW1iZXIsIGFjdHVhbDpib29sZWFuLCBwcmV2aW86ZmFsc2UsIHBlcm1pdGVCb3JyYXI6Ym9vbGVhbn0gfFxyXG57Zm9yUGs6Rm9yUGssIG51bTpmYWxzZSwgYWN0dWFsOmJvb2xlYW4sIHByZXZpbzp0cnVlLCB1bmljbzp0cnVlfSlcclxuJiB7ZXNDb25maXJtYXI/OnRydWUsIGVzQWdyZWdhcj86dHJ1ZSwgcGVybWl0ZUJvcnJhcj86Ym9vbGVhbiwgZGlzYWJsZWQ/OmJvb2xlYW58dW5kZWZpbmVkfTtcclxuXHJcblxyXG52YXIgYm90b25Gb3JtdWxhcmlvQ29uUmVzdW1lbiA9IChcclxuICAgIGRlZkJvdG9uOkRlZmluaWNpb25Gb3JtdWxhcmlvQWJyaXIsIFxyXG4gICAgZmVlZGJhY2tGb3JtOkZvcm1TdHJ1Y3R1cmVTdGF0ZTxJZFZhcmlhYmxlLCBWYWxvciwgSWRGaW4+LCBcclxuICAgIHJlc3B1ZXN0YXNBdW1lbnRhZGFzOlJlc3B1ZXN0YXMsXHJcbiAgICBjYXNpbGxlcm86e2Rlc3BsaWVndWVPY3VsdGE/OmJvb2xlYW58bnVsbCwgZXhwcmVzaW9uX2hhYmlsaXRhcl9qcz86c3RyaW5nLCBhY2xhcmFjaW9uOnN0cmluZ3xudWxsLCBleHByZXNpb25faGFiaWxpdGFyPzpzdHJpbmcsIG5vbWJyZT86c3RyaW5nLCBzYWx0bzpzdHJpbmd8bnVsbCwgZXNwZWNpYWw/OmFueX0sXHJcbiAgICBmb3JQa1BhZHJlOiBGb3JQayxcclxuICAgIGlkQnV0dG9uOnN0cmluZyxcclxuICAgIGZvcm11bGFyaW9BQWJyaXI6Rm9ybXVsYXJpb1xyXG4pPT57XHJcbiAgICB2YXIgZm9yUGs6Rm9yUGsgPSBkZWZCb3Rvbi5mb3JQaztcclxuICAgIHZhciBzdWZpam9JZEVsZW1lbnRvID0gdG9QbGFpbkZvclBrKGZvclBrKSsoZGVmQm90b24uZXNDb25maXJtYXI/Jy1saXN0byc6JycpO1xyXG4gICAgdmFyIGlkID0gYGRpdi1ib3Rvbi1mb3JtdWxhcmlvLSR7c3VmaWpvSWRFbGVtZW50b31gO1xyXG4gICAgdmFyIGVzdGFkbyA9IGZlZWRiYWNrRm9ybS5yZXN1bWVuO1xyXG4gICAgcmV0dXJuIGh0bWwuZGl2KHtcclxuICAgICAgICBpZCwgXHJcbiAgICAgICAgY2xhc3M6XCJzZWNjaW9uLWJvdG9uLWZvcm11bGFyaW9cIiAsIFxyXG4gICAgICAgICRhdHRyczp7XHJcbiAgICAgICAgICAgIFwibnVlc3Ryby12YWxpZGF0b3JcIjpkZWZCb3Rvbi5hY3R1YWw/J2FjdHVhbCc6ZGVmQm90b24ucHJldmlvPyd2YWxpZGEnOid0b2RhdmlhX25vJyxcclxuICAgICAgICAgICAgXCJvY3VsdGFyLXNhbHRlYWRhXCI6Y2FzaWxsZXJvLmRlc3BsaWVndWVPY3VsdGE/KGNhc2lsbGVyby5leHByZXNpb25faGFiaWxpdGFyX2pzPydJTkhBQklMSVRBUic6J1NJJyk6J05PJyxcclxuICAgICAgICAgICAgXCJ0aWVuZS12YWxvclwiOlwiTk9cIixcclxuICAgICAgICAgICAgXCJkZWYtYnV0dG9uXCI6SlNPTi5zdHJpbmdpZnkoZGVmQm90b24pXHJcbiAgICAgICAgfVxyXG4gICAgfSwgW1xyXG4gICAgICAgIGNhc2lsbGVyby5hY2xhcmFjaW9uIHx8IGh0bWwuZGl2KHtjbGFzczpcImFjbGFyYWNpb25cIn0sIFticmVha2VhYmxlVGV4dChjYXNpbGxlcm8uYWNsYXJhY2lvbik/P251bGxdKSxcclxuICAgICAgICBodG1sLmRpdihbXHJcbiAgICAgICAgICAgIEJ1dHRvbjIoe1xyXG4gICAgICAgICAgICAgICAgLy8gaWQ6YHZhci0ke2lkVmFyaWFibGV9YCxcclxuICAgICAgICAgICAgICAgIGlkOmBib3Rvbi1mb3JtdWxhcmlvLSR7c3VmaWpvSWRFbGVtZW50b31gLCBcclxuICAgICAgICAgICAgICAgIHZhcmlhbnQ6XCJvdXRsaW5lZFwiLFxyXG4gICAgICAgICAgICAgICAgZGlzYWJsZWQ6IGRlZkJvdG9uLmRpc2FibGVkLFxyXG4gICAgICAgICAgICAgICAgY29sb3I6XCJpbmhlcml0XCIsXHJcbiAgICAgICAgICAgICAgICBvbkNsaWNrOigpPT57XHJcbiAgICAgICAgICAgICAgICAgICAgaWYoZGVmQm90b24uZXNDb25maXJtYXIpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZihkZWZCb3Rvbi5udW0gIT0gbnVsbCl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihjYXNpbGxlcm8uc2FsdG8pe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBCRl92YXJuYW1lID0gJyRCLkY6JysgY2FzaWxsZXJvLnNhbHRvIGFzIElkVmFyaWFibGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwYXRjaEJ5UGFzcyhhY2Npb25fcmVnaXN0cmFyX3Jlc3B1ZXN0YSx7Zm9yUGs6Zm9yUGtQYWRyZSwgdmFyaWFibGU6QkZfdmFybmFtZSwgcmVzcHVlc3RhOmRlZkJvdG9uLm51bT09MD9udWxsOmRlZkJvdG9uLm51bSBhcyBWYWxvcn0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2hCeVBhc3MoYWNjaW9uX3JlZ2lzdHJhcl9yZXNwdWVzdGEse2ZvclBrOmZvclBrUGFkcmUsIHZhcmlhYmxlOmNhc2lsbGVyby5leHByZXNpb25faGFiaWxpdGFyIGFzIElkVmFyaWFibGUsIHJlc3B1ZXN0YTpkZWZCb3Rvbi5udW0gYXMgVmFsb3J9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYnV0dG9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWRCdXR0b24pISBhcyBIVE1MQnV0dG9uRWxlbWVudDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnV0dG9uLnNldEF0dHJpYnV0ZSgnZGVmLWJ1dHRvbicsIEpTT04uc3RyaW5naWZ5KGRlZkJvdG9uKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1dHRvbi5jbGljaygpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAkYXR0cnM6e1xyXG4gICAgICAgICAgICAgICAgICAgIFwicmVzdW1lbi1lc3RhZG9cIjplc3RhZG8hPSd2YWNpbyc/ZXN0YWRvOiBkZWZCb3Rvbi5hY3R1YWw/J2FjdHVhbCc6ZGVmQm90b24ucHJldmlvP2VzdGFkbzondG9kYXZpYV9ubycsXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAsIGNoaWxkcmVuOltcclxuICAgICAgICAgICAgICAgICAgICAoZGVmQm90b24uZXNBZ3JlZ2FyPydhZ3JlZ2FyJzpkZWZCb3Rvbi5lc0NvbmZpcm1hcj8nTGlzdG8nOmNhc2lsbGVyby5ub21icmUgKyAnICcgKyAoZGVmQm90b24ubnVtfHwnJykpLFxyXG4gICAgICAgICAgICAgICAgICAgIGh0bWwuc3ZnKHtjbGFzczpcIk11aVN2Z0ljb24tcm9vdFwiLCBmb2N1c2FibGU6ZmFsc2UsIHZpZXdib3g6XCIwIDAgMjQgMjRcIiwgXCJhcmlhLWhpZGRlblwiOlwidHJ1ZVwifSxbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGh0bWwucGF0aCh7ZDooZGVmQm90b24uZXNBZ3JlZ2FyP21hdGVyaWFsSW9JY29uc1N2Z1BhdGguQWRkOmRlZkJvdG9uLmVzQ29uZmlybWFyP21hdGVyaWFsSW9JY29uc1N2Z1BhdGguQ2hlY2s6Y2FzaWxsZXJvLnNhbHRvP21hdGVyaWFsSW9JY29uc1N2Z1BhdGguRm9yd2FyZDptYXRlcmlhbElvSWNvbnNTdmdQYXRoLkV4aXRUb0FwcCl9KVxyXG4gICAgICAgICAgICAgICAgICAgIF0pXHJcbiAgICAgICAgICAgICAgICBdXHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICAoZGVmQm90b24ucGVybWl0ZUJvcnJhcj9cclxuICAgICAgICAgICAgICAgIEJ1dHRvbjIoe1xyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTpcImJvdG9uLWJvcnJhci11YS12YWNpYVwiLFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOlwiZGVmYXVsdFwiLFxyXG4gICAgICAgICAgICAgICAgICAgIHZhcmlhbnQ6XCJvdXRsaW5lZFwiLFxyXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBodG1sLnN2Zyh7Y2xhc3M6XCJNdWlTdmdJY29uLXJvb3RcIiwgZm9jdXNhYmxlOmZhbHNlLCB2aWV3Ym94OlwiMCAwIDI0IDI0XCIsIFwiYXJpYS1oaWRkZW5cIjpcInRydWVcIn0sW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaHRtbC5wYXRoKHtkOm1hdGVyaWFsSW9JY29uc1N2Z1BhdGguRGVsZXRlRm9yZXZlcn0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF0pLCBcclxuICAgICAgICAgICAgICAgICAgICBvbkNsaWNrOigpPT5hY2Npb25fYm9ycmFyX2Zvcm11bGFyaW8oe2ZvclBrLCBmb3JQa1BhZHJlfSl9KVxyXG4gICAgICAgICAgICA6bnVsbCksXHJcbiAgICAgICAgICAgIChkZWZCb3Rvbi5udW0gIT09IGZhbHNlICYmICFkZWZCb3Rvbi5lc0FncmVnYXIgJiYgIWRlZkJvdG9uLmVzQ29uZmlybWFyP1xyXG4gICAgICAgICAgICAgICAgaHRtbC5zcGFuKChjYXNpbGxlcm8uZXNwZWNpYWw/LmNhbXBvc1Jlc3VtZW4/P1tkZWZCb3Rvbi5udW0udG9TdHJpbmcoKV0pLm1hcChcclxuICAgICAgICAgICAgICAgICAgICAoY2FtcG86c3RyaW5nKT0+cmVzcHVlc3Rhc0F1bWVudGFkYXNbZm9ybXVsYXJpb0FBYnJpci51bmlkYWRfYW5hbGlzaXNdW2RlZkJvdG9uLm51bS0xXVtjYW1wbyBhcyBJZFZhcmlhYmxlXVxyXG4gICAgICAgICAgICAgICAgKS5qb2luKCcsICcpIClcclxuICAgICAgICAgICAgOm51bGwpXHJcbiAgICAgICAgICAgIC8vIGh0bWwuZGl2KHtjbGFzczonaW5saW5lLWRpYWxvZycsICRhdHRyczp7XCJpbmxpbmUtZGlhbG9nLW9wZW5cIjogY29uZmlybWFyRm9yemFySXIgPT0gZGVmQm90b24ubnVtPyd2aXNpYmxlJzonaGlkZGVuJ319LFsgICAgICAgICAgICAgICAgXSlcclxuICAgICAgICBdKVxyXG4gICAgICAgIC8qXHJcbiAgICAgICAgICAgIHtkZWZCb3Rvbi5lc0FncmVnYXI/PD4gPHNwYW4+ICA8L3NwYW4+IDxCdXR0b25cclxuICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJvdXRsaW5lZFwiXHJcbiAgICAgICAgICAgICAgICBjb2xvcj1cImluaGVyaXRcIlxyXG4gICAgICAgICAgICAgICAgb25DbGljaz17KCk9PntcclxuICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgID48SUNPTi5DaGVjay8+PC9CdXR0b24+PC8+Om51bGx9XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgKi9cclxuICAgIF0pLmNyZWF0ZSgpXHJcbn1cclxuXHJcbnZhciBidXNjYXJIbm9zRm9ybXVsYXJpbyA9IChpZEZvcm11bGFyaW9EZXN0aW5vOklkRm9ybXVsYXJpbyk9PntcclxuICAgIHZhciBlc3RydWN0dXJhID0gZ2V0RXN0cnVjdHVyYSgpO1xyXG4gICAgdmFyIHVhID0gZXN0cnVjdHVyYS5mb3JtdWxhcmlvc1tpZEZvcm11bGFyaW9EZXN0aW5vXS5jYXNpbGxlcm9zLnVuaWRhZF9hbmFsaXNpcztcclxuICAgIHJldHVybiBsaWtlQXIoZXN0cnVjdHVyYS5mb3JtdWxhcmlvcylcclxuICAgICAgICAuZmlsdGVyKChpbmZvRm9ybXVsYXJpbzpJbmZvRm9ybXVsYXJpbywgaWRGb3JtOklkRm9ybXVsYXJpbyk9PlxyXG4gICAgICAgICAgICBpbmZvRm9ybXVsYXJpby5jYXNpbGxlcm9zLnVuaWRhZF9hbmFsaXNpcyA9PSB1YVxyXG4gICAgICAgICkubWFwKChfaW5mb0Zvcm11bGFyaW86SW5mb0Zvcm11bGFyaW8sIGlkRm9ybTpJZEZvcm11bGFyaW8pPT5cclxuICAgICAgICAgICAgaWRGb3JtXHJcbiAgICAgICAgKS5hcnJheSgpXHJcbn1cclxuXHJcbnZhciBjaGVja0Zvcm1zVmFjaW9zID0gKGZvcm1zOklkRm9ybXVsYXJpb1tdLCBmZWVkYmFja0FsbDp7XHJcbiAgICBbZm9ybXVsYXJpbyBpbiBQbGFpbkZvclBrXTpGb3JtU3RydWN0dXJlU3RhdGU8SWRWYXJpYWJsZSwgVmFsb3IsIElkRmluPiAvLyByZXN1bHRhZG8gZGVsIHJvd1ZhbGlkYXRvciBwYXJhIGVzdGFkby5mb3JQa1xyXG59LCBmb3JQazpGb3JQayk9PntcclxuICAgIHJldHVybiBmb3Jtcy5maWx0ZXIoKGZvcm06SWRGb3JtdWxhcmlvKT0+e1xyXG4gICAgICAgIGxldCBteWZvclBrPXsuLi5mb3JQaywgZm9ybXVsYXJpbzpmb3JtfTtcclxuICAgICAgICB2YXIgZmVlZGJhY2sgPSBmZWVkYmFja0FsbFt0b1BsYWluRm9yUGsobXlmb3JQayldO1xyXG4gICAgICAgIHJldHVybiBmZWVkYmFjay5yZXN1bWVuICE9ICd2YWNpbydcclxuICAgIH0pLmxlbmd0aCA9PSAwXHJcbn1cclxuXHJcbmZ1bmN0aW9uIEJvdG9uRm9ybXVsYXJpb0Rlc3BsaWVndWUocHJvcHM6e2Nhc2lsbGVybzpCb3RvbkZvcm11bGFyaW8sIGZvcm11bGFyaW86Rm9ybXVsYXJpbywgZm9yUGs6Rm9yUGt9KXtcclxuICAgIHZhciB7Y2FzaWxsZXJvLCBmb3JQa30gPSBwcm9wcztcclxuICAgIHZhciBoYWJpbGl0YWRvciA9IGNhc2lsbGVyby5leHByZXNpb25faGFiaWxpdGFyX2pzP2dldEZ1bmNpb25IYWJpbGl0YXIoY2FzaWxsZXJvLmV4cHJlc2lvbl9oYWJpbGl0YXJfanMpOigpPT50cnVlO1xyXG4gICAgdmFyIHtvcGNpb25lc30gPSB1c2VTZWxlY3RvclZpdmllbmRhKGZvclBrKTtcclxuICAgIC8vdmFyIGlkRm9ybXVsYXJpb0Rlc3Rpbm8gPSAnRjonK2Nhc2lsbGVyby5zYWx0byEgYXMgSWRGb3JtdWxhcmlvOyAgIC8vb3JpZ2luYWxcclxuICAgIHZhciBhcm1vTm9tU2FsdG89Y2FzaWxsZXJvLnNhbHRvPy5zdWJzdHJpbmcoMCwyKT09J0Y6Jz9jYXNpbGxlcm8uc2FsdG8uc2xpY2UoMik6Y2FzaWxsZXJvLnNhbHRvO1xyXG4gICAgLy9jb25zb2xlLmxvZygnQm90b25Gb3JtdWxhcmlvRGVzcGxpZWd1ZSBhcm1vTm9tU2FsdG8gJyArYXJtb05vbVNhbHRvKTtcclxuICAgIHZhciBpZEZvcm11bGFyaW9EZXN0aW5vID0gJ0Y6Jythcm1vTm9tU2FsdG8hIGFzIElkRm9ybXVsYXJpbztcclxuICAgIHZhciBlc3RydWN0dXJhID0gZ2V0RXN0cnVjdHVyYSgpO1xyXG4gICAgdmFyIHtmb3JtdWxhcmlvQUFicmlyfSA9IHVzZVNlbGVjdG9yKChfc3RhdGU6Q2Fzb1N0YXRlKT0+KHtcclxuICAgICAgICBmb3JtdWxhcmlvQUFicmlyOmVzdHJ1Y3R1cmEuZm9ybXVsYXJpb3NbaWRGb3JtdWxhcmlvRGVzdGlub10uY2FzaWxsZXJvcyxcclxuICAgIH0pKTtcclxuICAgIHZhciBzdWZpam9JZEVsZW1lbnRvID0gdG9QbGFpbkZvclBrKGZvclBrKTtcclxuICAgIC8qXHJcbiAgICByZWdpc3RyYXJFbGVtZW50byh7XHJcbiAgICAgICAgaWQ6YGRpdi1ib3Rvbi1mb3JtdWxhcmlvLSR7c3VmaWpvSWRFbGVtZW50b31gLCBcclxuICAgICAgICBhdHRyOidlc3RhLWluaGFiaWxpdGFkYScsIFxyXG4gICAgICAgIC8vIGZ1bjogKHI6UmVzcHVlc3Rhcyk9PmhhYmlsaXRhZG9yKHIpPydTSSc6J05PJ1xyXG4gICAgICAgIGZ1bjogKF9yOlJlc3B1ZXN0YXMpPT4nTk8nXHJcbiAgICB9KTtcclxuICAgIHJlZ2lzdHJhckVsZW1lbnRvPEhUTUxCdXR0b25FbGVtZW50Pih7XHJcbiAgICAgICAgaWQ6YGJvdG9uLWZvcm11bGFyaW8tJHtzdWZpam9JZEVsZW1lbnRvfWAsIFxyXG4gICAgICAgIHByb3A6J2Rpc2FibGVkJywgXHJcbiAgICAgICAgLy8gZnVuOiAocjpSZXNwdWVzdGFzKT0+IWhhYmlsaXRhZG9yKHIpXHJcbiAgICAgICAgZnVuOiAoX3I6UmVzcHVlc3Rhcyk9PmZhbHNlXHJcbiAgICB9KTtcclxuICAgICovXHJcbiAgICB2YXIgZGlzcGF0Y2ggPSB1c2VEaXNwYXRjaCgpO1xyXG4gICAgdmFyIFtjb25maXJtYXJGb3J6YXJJciwgc2V0Q29uZmlybWFyRm9yemFySXJdID0gdXNlU3RhdGU8RGVmaW5pY2lvbkZvcm11bGFyaW9BYnJpcnxmYWxzZXxudWxsPihudWxsKTtcclxuICAgIHZhciBtdWx0aXBsZUZvcm11bGFyaW9zPWZvcm11bGFyaW9BQWJyaXIudW5pZGFkX2FuYWxpc2lzICE9IHByb3BzLmZvcm11bGFyaW8udW5pZGFkX2FuYWxpc2lzO1xyXG4gICAgdmFyIG51ZXZvQ2FtcG9QayA9IGRlZk9wZXJhdGl2by5kZWZVQVtmb3JtdWxhcmlvQUFicmlyLnVuaWRhZF9hbmFsaXNpc10ucGs7XHJcbiAgIC8vIHZhciB2YXJfbmFtZT0nJEIuJytjYXNpbGxlcm8uc2FsdG87IC8vb3JpZ2luYWxcclxuICAgIHZhciB2YXJfbmFtZT0nJEIuRjonK2FybW9Ob21TYWx0bztcclxuICAgIHZhciBpZFNlY2Npb249YHNlY2Npb24tYm90b24tZm9ybXVsYXJpby0ke3Zhcl9uYW1lfWA7XHJcbiAgICB2YXIgaWRCdXR0b249YHNwZWNpYWwtYnV0dG9uLSR7aWRTZWNjaW9ufWA7XHJcbiAgICByZWdpc3RyYXJFbGVtZW50bzxIVE1MRGl2RWxlbWVudD4oe1xyXG4gICAgICAgIGlkOmlkU2VjY2lvbiwgXHJcbiAgICAgICAgZGlyZWN0OnRydWUsXHJcbiAgICAgICAgZnVuOiAocmVzcHVlc3Rhc0F1bWVudGFkYXM6UmVzcHVlc3RhcywgZmVlZGJhY2tSb3c6IEZvcm1TdHJ1Y3R1cmVTdGF0ZTxJZFZhcmlhYmxlLCBWYWxvciwgSWRGaW4+LCBkaXY6SFRNTERpdkVsZW1lbnQsXHJcbiAgICAgICAgICAgICAgICBmZWVkYmFja0FsbDp7XHJcbiAgICAgICAgICAgICAgICAgICAgW2Zvcm11bGFyaW8gaW4gUGxhaW5Gb3JQa106Rm9ybVN0cnVjdHVyZVN0YXRlPElkVmFyaWFibGUsIFZhbG9yLCBJZEZpbj4gLy8gcmVzdWx0YWRvIGRlbCByb3dWYWxpZGF0b3IgcGFyYSBlc3RhZG8uZm9yUGtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgKT0+e1xyXG4gICAgICAgICAgICB0cnl7XHJcbiAgICAgICAgICAgICAgICB2YXIgbGlzdGFEZUJvdG9uZXNBYnJpcjpEZWZpbmljaW9uRm9ybXVsYXJpb0FicmlyW10gPSBbXTtcclxuICAgICAgICAgICAgICAgLy8gdmFyIGVzVmFyQWN0dWFsID0gZmVlZGJhY2tSb3cuYWN0dWFsID09ICckQi5GOicrY2FzaWxsZXJvLnNhbHRvOyAgLy9vcmlnaW5hbFxyXG4gICAgICAgICAgICAgICAgdmFyIGVzVmFyQWN0dWFsID0gZmVlZGJhY2tSb3cuYWN0dWFsICA9PSAnJEIuRjonK2FybW9Ob21TYWx0bztcclxuICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coJ0JvdG9uRm9ybXVsYXJpb0Rlc3BsaWVndWUgZXNWYXJBY3R1YWwgJyArZXNWYXJBY3R1YWwgICk7XHJcbiAgICAgICAgICAgICAgICBpZihtdWx0aXBsZUZvcm11bGFyaW9zICYmIGNhc2lsbGVyby5zYWx0byE9bnVsbCl7XHJcbiAgICAgICAgICAgICAgICAgIC8vICBsZXQgZGVmRm9ybXVsYXJpbzpJbmZvRm9ybXVsYXJpbyA9IGVzdHJ1Y3R1cmEuZm9ybXVsYXJpb3NbJ0Y6JytjYXNpbGxlcm8uc2FsdG8gYXMgSWRGb3JtdWxhcmlvXTsgICAgICAvL29yaWdpbmFsXHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGRlZkZvcm11bGFyaW86SW5mb0Zvcm11bGFyaW8gPSBlc3RydWN0dXJhLmZvcm11bGFyaW9zWydGOicrYXJtb05vbVNhbHRvIGFzIElkRm9ybXVsYXJpb107XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGRlZlVBID0gZXN0cnVjdHVyYS51bmlkYWRlc19hbmFsaXNpc1tkZWZGb3JtdWxhcmlvLmNhc2lsbGVyb3MudW5pZGFkX2FuYWxpc2lzIV07XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNvbmp1bnRvID0gcmVzcHVlc3Rhc0F1bWVudGFkYXNbZGVmRm9ybXVsYXJpby5jYXNpbGxlcm9zLnVuaWRhZF9hbmFsaXNpcyFdO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBjYW50aWRhZEVzcGVyYWRhID0gcmVzcHVlc3Rhc0F1bWVudGFkYXNbY2FzaWxsZXJvLmV4cHJlc2lvbl9oYWJpbGl0YXIgYXMgSWRWYXJpYWJsZV07XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIG51bUFjdHVhbDpudW1iZXJ8bnVsbCA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgIC8vICB2YXIgZXN0YWRvRGVsQm90b24gPSBmZWVkYmFja1Jvdy5mZWVkYmFja1snJEIuRjonK2Nhc2lsbGVyby5zYWx0byBhcyBJZFZhcmlhYmxlXS5lc3RhZG8gICAvL29yaWdpbmFsXHJcbiAgICAgICAgICAgICAgICAgICAgICB2YXIgZXN0YWRvRGVsQm90b24gPSBmZWVkYmFja1Jvdy5mZWVkYmFja1snJEIuRjonK2FybW9Ob21TYWx0byBhcyBJZFZhcmlhYmxlXS5lc3RhZG9cclxuICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdCb3RvbkZvcm11bGFyaW9EZXNwbGllZ3VlIGVzdGFkb0RlbEJvdG9uICcgK2VzdGFkb0RlbEJvdG9uICApO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBjb25maWdTb3J0ZW9Gb3JtdWxhcmlvID0gZXN0cnVjdHVyYS5jb25maWdTb3J0ZW8/ZXN0cnVjdHVyYS5jb25maWdTb3J0ZW9bZ2V0TWFpbkZvcm1Gb3JWaXZpZW5kYShmb3JQay52aXZpZW5kYSldOm51bGxcclxuICAgICAgICAgICAgICAgICAgICB2YXIgaGFiaWxpdGFjaW9uQm90b25Gb3JtdWxhcmlvID0gZXN0cnVjdHVyYS5oYWJpbGl0YWNpb25Cb3RvbkZvcm11bGFyaW87XHJcbiAgICAgICAgICAgICAgICAgICAgbGlzdGFEZUJvdG9uZXNBYnJpciA9IGxpa2VBcihjb25qdW50bykubWFwKChfLCBpKT0+e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgbnVtOm51bWJlciA9IG51bWJlck9yU3RyaW5nSW5jSWZBcnJheShpLCBjb25qdW50bykgYXMgbnVtYmVyO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgZm9yUGs9ey4uLnByb3BzLmZvclBrLCBmb3JtdWxhcmlvOmlkRm9ybXVsYXJpb0Rlc3Rpbm8sIFtudWV2b0NhbXBvUGtdOm51bX07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmb3JtSG5vcyA9IGJ1c2Nhckhub3NGb3JtdWxhcmlvKGlkRm9ybXVsYXJpb0Rlc3Rpbm8pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmZWVkYmFjayA9IGZlZWRiYWNrQWxsW3RvUGxhaW5Gb3JQayhmb3JQayldO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZihudW1BY3R1YWwgPT0gbnVsbCAmJiBmZWVkYmFjay5yZXN1bWVuID09IFwidmFjaW9cIiAmJiBlc3RhZG9EZWxCb3RvbiA9PSd2YWxpZGEnKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bUFjdHVhbCA9IG51bTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yUGssIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdW1lbjpudWxsLCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bSwgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3R1YWw6IGNhbGN1bGFyQWN0dWFsQkYoY29uZmlnU29ydGVvRm9ybXVsYXJpbywgbnVtLCBudW1BY3R1YWwsIGlkRm9ybXVsYXJpb0Rlc3Rpbm8sIHJlc3B1ZXN0YXNBdW1lbnRhZGFzKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZpbzogbnVtQWN0dWFsID09IG51bGwsIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVybWl0ZUJvcnJhcjogbGlrZUFyKGNvbmp1bnRvKS5hcnJheSgpLmxlbmd0aCA9PSBOdW1iZXIoaSkgKyAxICYmIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrRm9ybXNWYWNpb3MoZm9ybUhub3MsIGZlZWRiYWNrQWxsLCBmb3JQaykgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxjdWxhclBlcm1pdGVCb3JyYXJCRihjb25maWdTb3J0ZW9Gb3JtdWxhcmlvLGlkRm9ybXVsYXJpb0Rlc3Rpbm8pLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ6IGNhbGN1bGFyRGlzYWJsZWRCRihjb25maWdTb3J0ZW9Gb3JtdWxhcmlvLCBoYWJpbGl0YWNpb25Cb3RvbkZvcm11bGFyaW8sIG51bSwgaWRGb3JtdWxhcmlvRGVzdGlubywgcmVzcHVlc3Rhc0F1bWVudGFkYXMpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9KS5hcnJheSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKFwicHVlZGUgYWdyZWdhciAvL1RPRE8gVkVSIEVTVE9cIiAmJiAoY29uanVudG8gaW5zdGFuY2VvZiBBcnJheSB8fCBjb25qdW50byA9PSBudWxsKSl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBudWV2b1ZhbG9yUGs9KGNvbmp1bnRvPT1udWxsID8gMCA6IGNvbmp1bnRvLmxlbmd0aCkgKyAxO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgZm9yUGs9ey4uLnByb3BzLmZvclBrLCBmb3JtdWxhcmlvOmlkRm9ybXVsYXJpb0Rlc3Rpbm8sIFtudWV2b0NhbXBvUGtdOm51ZXZvVmFsb3JQa307XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBkZWJlQWdyZWdhck9saXN0byA9IG51bUFjdHVhbCA9PSBudWxsICYmIChjYW50aWRhZEVzcGVyYWRhID09IG51bGwgfHwgY2FudGlkYWRFc3BlcmFkYSAhPSAoY29uanVudG8gIT1udWxsICYmIGNvbmp1bnRvLmxlbmd0aCkpIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgKGVzdGFkb0RlbEJvdG9uID09J3ZhbGlkYScgfHwgZXNWYXJBY3R1YWwpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsaXN0YURlQm90b25lc0FicmlyLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yUGssIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtOm51ZXZvVmFsb3JQaywgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlc0FncmVnYXI6dHJ1ZSwgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3R1YWw6ZGViZUFncmVnYXJPbGlzdG8sIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldmlvOiBmYWxzZSwgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZDogY2FsY3VsYXJEaXNhYmxlZEJGQWdyZWdhckxpc3RvKGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW8sIGhhYmlsaXRhY2lvbkJvdG9uRm9ybXVsYXJpbywgaWRGb3JtdWxhcmlvRGVzdGlubylcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RhRGVCb3RvbmVzQWJyaXIucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JQaywgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW06bnVldm9WYWxvclBrIC0gMSwgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlc0NvbmZpcm1hcjp0cnVlLCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdHVhbDpkZWJlQWdyZWdhck9saXN0byAmJiAoIWNhc2lsbGVyby5sb25naXR1ZCB8fCBudWV2b1ZhbG9yUGsgPiBOdW1iZXIoY2FzaWxsZXJvLmxvbmdpdHVkKSksIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldmlvOiBmYWxzZSwgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZDogY2FsY3VsYXJEaXNhYmxlZEJGQWdyZWdhckxpc3RvKGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW8sIGhhYmlsaXRhY2lvbkJvdG9uRm9ybXVsYXJpbywgaWRGb3JtdWxhcmlvRGVzdGlubylcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGZvclBrPXsuLi5wcm9wcy5mb3JQaywgZm9ybXVsYXJpbzppZEZvcm11bGFyaW9EZXN0aW5vfTtcclxuICAgICAgICAgICAgICAgICAgICBsaXN0YURlQm90b25lc0FicmlyID0gW3tmb3JQaywgbnVtOmZhbHNlLCB1bmljbzp0cnVlLCBhY3R1YWw6ZXNWYXJBY3R1YWwsIHByZXZpbzp0cnVlfV1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHZhciB0b2Rvc0xvc0JvdG9uZXMgPSBsaXN0YURlQm90b25lc0FicmlyLm1hcChkZWZCb3Rvbj0+XHJcbiAgICAgICAgICAgICAgICAgICAgYm90b25Gb3JtdWxhcmlvQ29uUmVzdW1lbihkZWZCb3RvbiwgZmVlZGJhY2tBbGxbdG9QbGFpbkZvclBrKGRlZkJvdG9uLmZvclBrKV0/P3tyZXN1bWVuOid2YWNpbyd9LCByZXNwdWVzdGFzQXVtZW50YWRhcyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzaWxsZXJvLCBwcm9wcy5mb3JQaywgaWRCdXR0b24sIGZvcm11bGFyaW9BQWJyaXJcclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICB2YXIgaHRtbFNlY2Npb249ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWRTZWNjaW9uKSE7XHJcbiAgICAgICAgICAgICAgICBodG1sU2VjY2lvbi5pbm5lckhUTUw9XCJcIjtcclxuICAgICAgICAgICAgICAgIGh0bWxTZWNjaW9uLmFwcGVuZENoaWxkKGh0bWwuZGl2KHRvZG9zTG9zQm90b25lcykuY3JlYXRlKCkpO1xyXG4gICAgICAgICAgICB9Y2F0Y2goZXJyKXtcclxuICAgICAgICAgICAgICAgIHZhciBlcnJvciA9IHVuZXhwZWN0ZWQoZXJyKTtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiZW50cmEgYWwgY2F0Y2hcIilcclxuICAgICAgICAgICAgICAgIGRpdi50ZXh0Q29udGVudD0nZXN0bywgRkFMTMOJICcrZXJyb3IubWVzc2FnZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgY29uc3QgaXIgPSAoZGVmQm90b246RGVmaW5pY2lvbkZvcm11bGFyaW9BYnJpcik9PntcclxuICAgICAgICBpZighY2FzaWxsZXJvLnNhbHRvKXtcclxuICAgICAgICAgICAgb3BjaW9uZXMubW9kb0RpcmVjdG8/XHJcbiAgICAgICAgICAgICAgICBudWxsXHJcbiAgICAgICAgICAgIDpcclxuICAgICAgICAgICAgICAgIGRpc3BhdGNoKGRpc3BhdGNoZXJzLlZPTFZFUl9IRFIoe30pKTtcclxuICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgdmFyIG51ZXZhRm9yUGs9ey4uLmZvclBrLCBmb3JtdWxhcmlvOmlkRm9ybXVsYXJpb0Rlc3Rpbm99O1xyXG4gICAgICAgICAgICBpZihtdWx0aXBsZUZvcm11bGFyaW9zKXtcclxuICAgICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmUgZm9yUGsgeSBzdXMgY29tcG9uZW50ZXNcclxuICAgICAgICAgICAgICAgIG51ZXZhRm9yUGtbbnVldm9DYW1wb1BrXSA9IGRlZkJvdG9uLm51bVxyXG4gICAgICAgICAgICAgICAgaWYoZGVmQm90b24uZXNBZ3JlZ2FyKXtcclxuICAgICAgICAgICAgICAgICAgICBkaXNwYXRjaEJ5UGFzcyhhY2Npb25fYWdyZWdhcl9mb3JtdWxhcmlvLHtmb3JQazpudWV2YUZvclBrfSk7XHJcbiAgICAgICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgICAgICBkaXNwYXRjaEJ5UGFzcyhhY2Npb25fYWJyaXJfZm9ybXVsYXJpbyx7Zm9yUGs6bnVldmFGb3JQa30pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGRpc3BhdGNoKGRpc3BhdGNoZXJzLkNBTUJJQVJfRk9STVVMQVJJTyh7Zm9yUGs6bnVldmFGb3JQaywgYXBpbGFyVnVlbHRhOnRydWV9KSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKGNvbmZpcm1hckZvcnphcklyKXtzZXRDb25maXJtYXJGb3J6YXJJcihmYWxzZSl9XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIDxEZXNwbGVnYXJDYXNpbGxlcm8gY2FzaWxsZXJvPXtjYXNpbGxlcm99PlxyXG4gICAgICAgIDxkaXYgaWQ9e2lkU2VjY2lvbn0+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPEJ1dHRvbiBjbGFzc05hbWU9XCJzcGVjaWFsLWJ1dHRvblwiIGlkPXtpZEJ1dHRvbn1cclxuICAgICAgICAgICAgb25DbGljaz17KGV2ZW50KT0+e1xyXG4gICAgICAgICAgICAgICAgaXIoSlNPTi5wYXJzZSgoZXZlbnQudGFyZ2V0ISBhcyB1bmtub3duIGFzIEhUTUxCdXR0b25FbGVtZW50KS5nZXRBdHRyaWJ1dGUoJ2RlZi1idXR0b24nKSEpKVxyXG4gICAgICAgICAgICB9fVxyXG4gICAgICAgID5pciAoaW50ZXJubyk8L0J1dHRvbj5cclxuICAgICAgICA8RGlhbG9nIFxyXG4gICAgICAgICAgICBjbGFzc05hbWU9XCJudWVzdHJvLWRpYWxvZ29cIlxyXG4gICAgICAgICAgICBvcGVuPXshIWNvbmZpcm1hckZvcnphcklyfVxyXG4gICAgICAgICAgICBvbkNsb3NlPXsoKT0+c2V0Q29uZmlybWFyRm9yemFySXIobnVsbCl9XHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm51ZXN0cm8tZGlhbG9nb1wiPlxyXG4gICAgICAgICAgICAgICAgPFR5cG9ncmFwaHk+Tm8gc2UgcHVlZGUgYXZhbnphciBhbCBzaWd1aWVudGUgZm9ybXVsYXJpby48L1R5cG9ncmFwaHk+XHJcbiAgICAgICAgICAgICAgICA8VHlwb2dyYXBoeT5RdWl6w6FzIG5vIHRlcm1pbsOzIGRlIGNvbnRlc3RhciBsYXMgcHJlZ3VudGFzIGNvcnJlc3BvbmRpZW50ZXM8L1R5cG9ncmFwaHk+XHJcbiAgICAgICAgICAgICAgICA8VHlwb2dyYXBoeT5RdWl6w6FzIG5vIGNvcnJlc3BvbmRlIGVuIGJhc2UgYSBsYXMgcmVzcHVlc3RhcyBvYnRlbmlkYXM8L1R5cG9ncmFwaHk+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8QnV0dG9uIGNvbG9yPVwic2Vjb25kYXJ5XCIgb25DbGljaz17KCk9PmNvbmZpcm1hckZvcnphcklyICYmIGlyKGNvbmZpcm1hckZvcnphcklyKX0+Zm9yemFyPC9CdXR0b24+XHJcbiAgICAgICAgICAgIDxCdXR0b24gY29sb3I9XCJwcmltYXJ5XCIgdmFyaWFudD1cImNvbnRhaW5lZFwiIG9uQ2xpY2s9eygpPT5zZXRDb25maXJtYXJGb3J6YXJJcihudWxsKX0+RW50ZW5kaWRvPC9CdXR0b24+XHJcbiAgICAgICAgPC9EaWFsb2c+XHJcbiAgICA8L0Rlc3BsZWdhckNhc2lsbGVybz5cclxufVxyXG5cclxuZnVuY3Rpb24gQ2FzaWxsZXJvRGVzY29ub2NpZG8ocHJvcHM6e2Nhc2lsbGVybzpDYXNpbGxlcm9CYXNlLCBmb3JQazpGb3JQa30pe1xyXG4gICAgcmV0dXJuIDxEZXNwbGVnYXJDYXNpbGxlcm8gXHJcbiAgICAgICAgaWQ9e2BjYXNpbGxlcm9kZXNjb25vY2lkby0ke3Byb3BzLmNhc2lsbGVyby5pZF9jYXNpbGxlcm99YH1cclxuICAgICAgICBjYXNpbGxlcm89e3Byb3BzLmNhc2lsbGVybyBhcyBCbG9xdWV9XHJcbiAgICAgICAgc3R5bGU9e3tkaXNwbGF5Oidub25lJ319XHJcbiAgICA+XHJcbiAgICAgICAgPFR5cG9ncmFwaHk+VGlwbyBkZSBjYXNpbGxlcm8gbm8gaW1wbGVtZW50YWRvOiBcIntwcm9wcy5jYXNpbGxlcm8udGlwb2N9XCIgcGFyYSBcIntwcm9wcy5jYXNpbGxlcm8uY2FzaWxsZXJvfVwiPC9UeXBvZ3JhcGh5PlxyXG4gICAgICAgIDxFbmNhYmV6YWRvRGVzcGxpZWd1ZSBjYXNpbGxlcm89e3Byb3BzLmNhc2lsbGVybyBhcyBDYXNpbGxlcm9FbmNhYmV6YWJsZX0gbGVlcj17ZmFsc2V9IGZvclBrPXtwcm9wcy5mb3JQa30vPlxyXG4gICAgPC9EZXNwbGVnYXJDYXNpbGxlcm8+XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHVzZVNlbGVjdG9yVml2aWVuZGEoZm9yUGs6Rm9yUGspe1xyXG4gICAgcmV0dXJuIHVzZVNlbGVjdG9yKChzdGF0ZTpDYXNvU3RhdGUpPT57XHJcbiAgICAgICAgdmFyIGVzdHJ1Y3R1cmEgPSBnZXRFc3RydWN0dXJhKCk7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgZm9ybXVsYXJpbzogZXN0cnVjdHVyYS5mb3JtdWxhcmlvc1tmb3JQay5mb3JtdWxhcmlvXS5jYXNpbGxlcm9zLFxyXG4gICAgICAgICAgICBtb2RvRGVzcGxpZWd1ZTogdHJ1ZSB8fCBzdGF0ZS5tb2RvLmRlbW8/c3RhdGUub3BjaW9uZXMubW9kb0Rlc3BsaWVndWU6J3JlbGV2YW1pZW50bycsXHJcbiAgICAgICAgICAgIG1vZG86IHN0YXRlLm1vZG8sXHJcbiAgICAgICAgICAgIG9wY2lvbmVzOiBzdGF0ZS5vcGNpb25lcyxcclxuICAgICAgICB9XHJcbiAgICB9KVxyXG59XHJcblxyXG5mdW5jdGlvbiBDb25qdW50b1ByZWd1bnRhc0Rlc3BsaWVndWUocHJvcHM6e2Nhc2lsbGVybzpDb25qdW50b1ByZWd1bnRhcywgZm9ybXVsYXJpbzpGb3JtdWxhcmlvLCBmb3JQazpGb3JQa30pe1xyXG4gICAgbGV0IHtjYXNpbGxlcm8sIGZvclBrfSA9IHByb3BzO1xyXG4gICAgdmFyIGlkID0gYGNvbmp1bnRvLXByZWd1bnRhcy0ke2Nhc2lsbGVyby5pZF9jYXNpbGxlcm99YDtcclxuICAgIHJlZ2lzdHJhckVsZW1lbnRvKHtcclxuICAgICAgICBpZCwgXHJcbiAgICAgICAgZGlyZWN0OnRydWUsIFxyXG4gICAgICAgIGZ1bjogcmVnaXN0cmFkb3JEZVZhcmlhYmxlKGNhc2lsbGVybylcclxuICAgIH0pXHJcbiAgICBsZXQgbW9kb0Rlc3BsaWVndWUgPSBcIm5vcm1hbFwiO1xyXG4gICAgbGV0IGhhYmlsaXRhZG8gPSB0cnVlO1xyXG4gICAgcmV0dXJuIGhhYmlsaXRhZG8gfHwgbW9kb0Rlc3BsaWVndWU9PSdtZXRhZGF0b3MnPzxEZXNwbGVnYXJDYXNpbGxlcm8gaWQ9e2lkfSBjYXNpbGxlcm89e2Nhc2lsbGVyb30+XHJcbiAgICAgICAgPEVuY2FiZXphZG9EZXNwbGllZ3VlIGNhc2lsbGVybz17Y2FzaWxsZXJvfSBmb3JQaz17Zm9yUGt9IGxlZXI9e2Nhc2lsbGVyby5sZWVyIT09ZmFsc2V9Lz5cclxuICAgICAgICA8RGVzcGxlZ2FyQ29udGVuaWRvSW50ZXJub0Jsb3F1ZU9Gb3JtdWxhcmlvIGJsb3F1ZU9Gb3JtdWxhcmlvPXtjYXNpbGxlcm99IGZvcm11bGFyaW89e3Byb3BzLmZvcm11bGFyaW99IGZvclBrPXtmb3JQa30gbXVsdGlwbGU9e2ZhbHNlfS8+XHJcbiAgICA8L0Rlc3BsZWdhckNhc2lsbGVybz46bnVsbDtcclxufVxyXG5cclxuZnVuY3Rpb24gRGVzcGxlZ2FyQ29udGVuaWRvSW50ZXJub0Jsb3F1ZU9Gb3JtdWxhcmlvKHByb3BzOntibG9xdWVPRm9ybXVsYXJpbzpCbG9xdWV8Rm9ybXVsYXJpb3xDb25qdW50b1ByZWd1bnRhcywgZm9ybXVsYXJpbzpGb3JtdWxhcmlvLCBmb3JQazpGb3JQaywgbXVsdGlwbGU6Ym9vbGVhbn0pe1xyXG4gICAgdmFyIHBhcmNpYWxpemFibGUgPSBwcm9wcy5ibG9xdWVPRm9ybXVsYXJpby50aXBvYz09J0YnO1xyXG4gICAgY29uc3QgW3ZlclRvZG8sIHNldFZlclRvZG9dID0gdXNlU3RhdGUoIXBhcmNpYWxpemFibGUpO1xyXG4gICAgY29uc3QgW2ZvclBrQWN0dWFsLCBzZXRGb3JQa0FjdHVhbF0gPSB1c2VTdGF0ZTxJZENhc2lsbGVyb3xudWxsPihudWxsKTtcclxuICAgIGlmKHBhcmNpYWxpemFibGUpe1xyXG4gICAgICAgIGlmKGZvclBrQWN0dWFsICE9IHByb3BzLmJsb3F1ZU9Gb3JtdWxhcmlvLmNhc2lsbGVybyl7XHJcbiAgICAgICAgICAgIHNldFZlclRvZG8oZmFsc2UpXHJcbiAgICAgICAgICAgIHNldEZvclBrQWN0dWFsKHByb3BzLmJsb3F1ZU9Gb3JtdWxhcmlvLmNhc2lsbGVybylcclxuICAgICAgICB9XHJcbiAgICAgICAgdXNlRWZmZWN0KCgpPT57XHJcbiAgICAgICAgICAgIHZhciB0aW1lciA9IHNldFRpbWVvdXQoKCk9PntcclxuICAgICAgICAgICAgICAgIHNldFZlclRvZG8odHJ1ZSk7XHJcbiAgICAgICAgICAgIH0sMjUwKVxyXG4gICAgICAgICAgICByZXR1cm4gKCk9PntcclxuICAgICAgICAgICAgICAgIGlmKHRpbWVyKXtcclxuICAgICAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZXIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuICAgIGNvbnN0IGxpbWl0ZU5vVmVyVG9kbyA9IDM7XHJcbiAgICB1c2VFZmZlY3QoKCk9PntcclxuICAgICAgICBpZihwcm9wcy5ibG9xdWVPRm9ybXVsYXJpby50aXBvYz09J0YnKXtcclxuICAgICAgICAgICAgdm9sY2Fkb0luaWNpYWxFbGVtZW50b3NSZWdpc3RyYWRvcyhwcm9wcy5mb3JQayk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxbdG9QbGFpbkZvclBrKHByb3BzLmZvclBrKSx2ZXJUb2RvXSlcclxuICAgIHVzZUxheW91dEVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgaWYocHJvcHMuYmxvcXVlT0Zvcm11bGFyaW8udGlwb2M9PSdGJyAmJiB2ZXJUb2RvKXtcclxuICAgICAgICAgICAgdmFyIHtzaWd1aWVudGVWYXJpYWJsZSwgdmFyaWFibGVBY3R1YWx9ID0gZGlzcGF0Y2hCeVBhc3MoYWNjaW9uX3JlZ2lzdHJhcl9yZXNwdWVzdGEsIHtyZXNwdWVzdGE6bnVsbCwgdmFyaWFibGU6Tk9fQ0FNQklBUl9fU09MT19UUkFFUl9TVEFUVVMsIGZvclBrOnByb3BzLmZvclBrfSk7XHJcbiAgICAgICAgICAgIGlmKHZhcmlhYmxlQWN0dWFsIHx8IHNpZ3VpZW50ZVZhcmlhYmxlKXtcclxuICAgICAgICAgICAgICAgIGVuZm9jYXJFbGVtZW50b0RlVmFyaWFibGUoY29hbGVzY2UodmFyaWFibGVBY3R1YWwgYXMgc3RyaW5nfG51bGwsc2lndWllbnRlVmFyaWFibGUgYXMgc3RyaW5nfG51bGwpIGFzIElkVmFyaWFibGUpXHJcbiAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgdmFyIGZlZWRiYWNrUm93VmFsaWRhdG9yID0gZ2V0RmVlZGJhY2tSb3dWYWxpZGF0b3IoKVxyXG4gICAgICAgICAgICAgICAgaWYoZmVlZGJhY2tSb3dWYWxpZGF0b3JbdG9QbGFpbkZvclBrKHByb3BzLmZvclBrKV0ucmVzdW1lbj09J29rJyl7XHJcbiAgICAgICAgICAgICAgICAgICAgc2Nyb2xsVG9Ub3AoKVxyXG4gICAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgc2Nyb2xsVG9Ub3AoKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9XCJjb250ZW5pZG9cIj5cclxuICAgICAgICB7dmVyVG9kbz9udWxsOjxkaXYgc3R5bGU9e3toZWlnaHQ6XCI1MDBweFwiLCB0ZXh0QWxpZ246J2NlbnRlcicsIHZlcnRpY2FsQWxpZ246J21pZGRsZScsIHdpZHRoOicxMDAlJywgcG9zaXRpb246XCJmaXhlZFwiLCBiYWNrZ3JvdW5kQ29sb3I6ICdyZ2JhKDEwMCwxMDAsMTAwLDAuMyknLCBmb250U2l6ZTonMjAwJSd9fSA+Y2FyZ2FuZG8uLi48L2Rpdj59XHJcbiAgICAgICAge3Byb3BzLmJsb3F1ZU9Gb3JtdWxhcmlvLmNhc2lsbGVyb3MubWFwKChjYXNpbGxlcm8sIGkpPT57XHJcbiAgICAgICAgICAgIHZhciBrZXkgPSBjYXNpbGxlcm8udGlwb2MrJy0nK2Nhc2lsbGVyby5pZF9jYXNpbGxlcm8rJy0nK2k7XHJcbiAgICAgICAgICAgIHJldHVybiAodmVyVG9kbyB8fCBpIDwgbGltaXRlTm9WZXJUb2RvP1xyXG4gICAgICAgICAgICAgICAgKFxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2lsbGVyby50aXBvYyA9PSBcIlBcIj88UHJlZ3VudGFEZXNwbGllZ3VlIGtleT17a2V5fSBwcmVndW50YT17Y2FzaWxsZXJvfSBmb3JQaz17cHJvcHMuZm9yUGt9IGRlc3BsaWVndWVFbmNhYmV6YWRvPXtjYXNpbGxlcm8uZGVzcGxpZWd1ZUVuY2FiZXphZG8/Pyhwcm9wcy5ibG9xdWVPRm9ybXVsYXJpby50aXBvYz09J0NQJz8nbGF0ZXJhbCc6J3N1cGVyaW9yJyl9Lz46XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzaWxsZXJvLnRpcG9jID09IFwiQlwiPzxCbG9xdWVEZXNwbGllZ3VlIGtleT17a2V5fSBibG9xdWU9e2Nhc2lsbGVyb30gZm9ybXVsYXJpbz17cHJvcHMuZm9ybXVsYXJpb30gZm9yUGs9e3Byb3BzLmZvclBrfS8+OlxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2lsbGVyby50aXBvYyA9PSBcIkZJTFRST1wiPzxGaWx0cm9EZXNwbGllZ3VlIGtleT17a2V5fSBmaWx0cm89e2Nhc2lsbGVyb30gZm9yUGs9e3Byb3BzLmZvclBrfS8+OlxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2lsbGVyby50aXBvYyA9PSBcIkJGXCI/PEJvdG9uRm9ybXVsYXJpb0Rlc3BsaWVndWUga2V5PXtrZXl9IGNhc2lsbGVybz17Y2FzaWxsZXJvfSBmb3JtdWxhcmlvPXtwcm9wcy5mb3JtdWxhcmlvfSBmb3JQaz17cHJvcHMuZm9yUGt9Lz46XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzaWxsZXJvLnRpcG9jID09IFwiQ09OU1wiPzxDb25zaXN0ZW5jaWFEZXNwbGllZ3VlIGtleT17a2V5fSBjYXNpbGxlcm89e2Nhc2lsbGVyb30gZm9yUGs9e3Byb3BzLmZvclBrfS8+OlxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2lsbGVyby50aXBvYyA9PSBcIkNQXCI/PENvbmp1bnRvUHJlZ3VudGFzRGVzcGxpZWd1ZSBrZXk9e2tleX0gY2FzaWxsZXJvPXtjYXNpbGxlcm99IGZvcm11bGFyaW89e3Byb3BzLmZvcm11bGFyaW99IGZvclBrPXtwcm9wcy5mb3JQa30vPjpcclxuICAgICAgICAgICAgICAgICAgICBjYXNpbGxlcm8udGlwb2MgPT0gXCJURVhUT1wiPzxUZXh0b0Rlc3BsaWVndWUga2V5PXtrZXl9IGNhc2lsbGVybz17Y2FzaWxsZXJvfSBmb3JQaz17cHJvcHMuZm9yUGt9Lz46XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzaWxsZXJvLnRpcG9jID09IFwiTElCUkVcIj88TGlicmVEZXNwbGllZ3VlIGtleT17a2V5fSBjYXNpbGxlcm89e2Nhc2lsbGVyb30gZm9ybXVsYXJpbz17cHJvcHMuZm9ybXVsYXJpb30gZm9yUGs9e3Byb3BzLmZvclBrfS8+OlxyXG4gICAgICAgICAgICAgICAgICAgIDxDYXNpbGxlcm9EZXNjb25vY2lkbyBrZXk9e2tleX0gY2FzaWxsZXJvPXtjYXNpbGxlcm99IGZvclBrPXtwcm9wcy5mb3JQa30vPlxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICA6aT09bGltaXRlTm9WZXJUb2RvP1xyXG4gICAgICAgICAgICAgICAgPGRpdiBrZXk9JyRzcGlubmVyJyBjbGFzc05hbWU9XCJzcGlubmVyLWJvcmRlclwiIHJvbGU9XCJzdGF0dXNcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3Bhbj5jYXJnYW5kbyBibG9xdWUuLi48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgOm51bGxcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgIH0pXHJcbiAgICB9PC9kaXY+XHJcbn1cclxuXHJcbmZ1bmN0aW9uIEJsb3F1ZURlc3BsaWVndWUocHJvcHM6e2Jsb3F1ZTpCbG9xdWUsIGZvcm11bGFyaW86Rm9ybXVsYXJpbywgZm9yUGs6Rm9yUGt9KXtcclxuICAgIHZhciB7YmxvcXVlLCBmb3JQa30gPSBwcm9wcztcclxuICAgIHZhciBrZXk9YmxvcXVlLnZlcl9pZCE9Jy0nICYmIGJsb3F1ZS52ZXJfaWQgfHwgYmxvcXVlLmNhc2lsbGVybztcclxuICAgIHZhciBhY3RpdmVTdGVwPTA7XHJcbiAgICB2YXIgbXVsdGlwbGUgPSAhIWJsb3F1ZS51bmlkYWRfYW5hbGlzaXM7XHJcbiAgICB2YXIgbGlzdGEgPSBbe2ZvclBrLCBrZXk6MCwgbXVsdGlwbGU6ZmFsc2V9XTtcclxuICAgIHZhciBoYWJpbGl0YWRvciA9IGJsb3F1ZS5leHByZXNpb25faGFiaWxpdGFyX2pzP2dldEZ1bmNpb25IYWJpbGl0YXIoYmxvcXVlLmV4cHJlc2lvbl9oYWJpbGl0YXJfanMpOigpPT50cnVlO1xyXG4gICAgdmFyIHttb2RvRGVzcGxpZWd1ZX0gPSB1c2VTZWxlY3RvclZpdmllbmRhKGZvclBrKTtcclxuICAgIGlmKG11bHRpcGxlKXtcclxuICAgICAgICAvLyBUT0RPOiBHRU5FUkFMSVpBUlxyXG4gICAgICAgIC8vIEB0cy1pZ25vcmUgXHJcbiAgICAgICAgLy8gbGlzdGE9cmVzcHVlc3Rhcy5wZXJzb25hcy5tYXAoKF9wZXJzb25hLCBpKT0+KFxyXG4gICAgICAgIC8vICAgICB7Zm9yUGs6ey4uLmZvclBrLCBwZXJzb25hOmkrMX0sIGtleTppKzEsIG11bHRpcGxlOnRydWV9XHJcbiAgICAgICAgLy8gKSlcclxuICAgIH1cclxuICAgIHZhciBpZCA9IGBibG9xdWUtJHtibG9xdWUuaWRfY2FzaWxsZXJvfWA7XHJcbiAgICByZWdpc3RyYXJFbGVtZW50byh7XHJcbiAgICAgICAgaWQsXHJcbiAgICAgICAgc3R5bGU6J2Rpc3BsYXknLFxyXG4gICAgICAgIGZ1bjogKHJlc3B1ZXN0YXM6UmVzcHVlc3Rhcyk9PiBoYWJpbGl0YWRvcihyZXNwdWVzdGFzKSB8fCBtb2RvRGVzcGxpZWd1ZT09J21ldGFkYXRvcyc/J3Vuc2V0Jzonbm9uZSdcclxuICAgIH0pXHJcbiAgICByZXR1cm4gPERlc3BsZWdhckNhc2lsbGVybyBjYXNpbGxlcm89e2Jsb3F1ZX0gbnVlc3Ryby1ibG9xdWU9e2Jsb3F1ZS5pZF9jYXNpbGxlcm99IGVzLW11bHRpcGxlPXttdWx0aXBsZT8nU0knOidOTyd9IGlkPXtpZH0+XHJcbiAgICAgICAgPEVuY2FiZXphZG9EZXNwbGllZ3VlIGNhc2lsbGVybz17YmxvcXVlfSBmb3JQaz17Zm9yUGt9Lz5cclxuICAgICAgICB7bGlzdGEubWFwKCh7a2V5LCBmb3JQaywgbXVsdGlwbGV9KT0+XHJcbiAgICAgICAgICAgIDxEZXNwbGVnYXJDb250ZW5pZG9JbnRlcm5vQmxvcXVlT0Zvcm11bGFyaW8ga2V5PXtrZXl9IGJsb3F1ZU9Gb3JtdWxhcmlvPXtibG9xdWV9IGZvcm11bGFyaW89e3Byb3BzLmZvcm11bGFyaW99IGZvclBrPXtmb3JQa30gbXVsdGlwbGU9e211bHRpcGxlfS8+XHJcbiAgICAgICAgKX1cclxuICAgIDwvRGVzcGxlZ2FyQ2FzaWxsZXJvPjtcclxufVxyXG5cclxuY29uc3QgRm9ybXVsYXJpb0VuY2FiZXphZG8gPSBEZXNwbGllZ3VlRW5jYWJlemFkbztcclxuXHJcbmZ1bmN0aW9uIE1lbnVMZXRyYShwcm9wczp7dGFtYW5uaW86bnVtYmVyLCBkZW5vbWluYWNpb246c3RyaW5nfSl7XHJcbiAgICBjb25zdCBjYW1iaWFyTGV0cmEgPSAodGFtYW5uaW86bnVtYmVyKT0+e1xyXG4gICAgICAgIHZhciByb290ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xyXG4gICAgICAgIHJvb3Quc3R5bGUuZm9udFNpemU9dGFtYW5uaW8rXCJweFwiO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIDxNZW51SXRlbVxyXG4gICAgICAgIG9uQ2xpY2s9eygpPT5jYW1iaWFyTGV0cmEocHJvcHMudGFtYW5uaW8pfSBzdHlsZT17e2ZvbnRTaXplOnByb3BzLnRhbWFubmlvKydweCd9fVxyXG4gICAgPmxldHJhIHtwcm9wcy5kZW5vbWluYWNpb259PC9NZW51SXRlbT5cclxufVxyXG5cclxuZnVuY3Rpb24gRmFzdFNldHR1cCgpe1xyXG4gICAgY29uc3QgW2FuY2hvckVsLCBzZXRBbmNob3JFbF0gPSBSZWFjdC51c2VTdGF0ZShudWxsKTtcclxuICAgIGNvbnN0IFtvcGVuLCBzZXRPcGVuXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKTtcclxuICAgIGNvbnN0IGhhbmRsZUNsaWNrID0gKGV2ZW50OmFueSkgPT4ge1xyXG4gICAgICAgIHNldEFuY2hvckVsKGV2ZW50LmN1cnJlbnRUYXJnZXQpO1xyXG4gICAgICAgIHNldE9wZW4oKHByZXYpID0+ICFwcmV2KTtcclxuICAgIH07XHJcbiAgICBjb25zdCBkaXNwYXRjaCA9IHVzZURpc3BhdGNoKCk7XHJcbiAgICBjb25zdCBjYW1iaWFyID0gKG1vZG9EZXNwbGllZ3VlOk1vZG9EZXNwbGllZ3VlKT0+e1xyXG4gICAgICAgIGRpc3BhdGNoKGRpc3BhdGNoZXJzLk1PRE9fREVTUExJRUdVRSh7bW9kb0Rlc3BsaWVndWV9KSk7XHJcbiAgICAgICAgc2V0T3BlbihmYWxzZSlcclxuICAgIH1cclxuICAgIGNvbnN0IG9wY2lvbmVzID0gdXNlU2VsZWN0b3IoKHN0YXRlOkNhc29TdGF0ZSk9PnN0YXRlLm9wY2lvbmVzKVxyXG4gICAgcmV0dXJuIDw+XHJcbiAgICAgICAgPEJ1dHRvbiBvbkNsaWNrPXtoYW5kbGVDbGlja30+XHJcbiAgICAgICAgICAgIDxJQ09OLlNldHRpbmdzLz5cclxuICAgICAgICA8L0J1dHRvbj5cclxuICAgICAgICA8TWVudSBvcGVuPXtvcGVufSBhbmNob3JFbD17YW5jaG9yRWx9IG9uQ2xvc2U9eygpPT5zZXRPcGVuKGZhbHNlKX0+XHJcbiAgICAgICAgICAgIDxNZW51SXRlbSBvbkNsaWNrPXsoKT0+Y2FtYmlhcihcInJlbGV2YW1pZW50b1wiKX0+bm9ybWFsPC9NZW51SXRlbT5cclxuICAgICAgICAgICAgPE1lbnVJdGVtIG9uQ2xpY2s9eygpPT5jYW1iaWFyKFwiUERGXCIgICAgICAgICApfT5QREYgcGFyYSByZWxldmFtaWVudG88L01lbnVJdGVtPlxyXG4gICAgICAgICAgICA8TWVudUl0ZW0gb25DbGljaz17KCk9PmNhbWJpYXIoXCJtZXRhZGF0b3NcIiAgICl9PnJldmlzYXIgbWV0YWRhdG9zPC9NZW51SXRlbT5cclxuICAgICAgICAgICAgPERpdmlkZXIvPlxyXG4gICAgICAgICAgICA8TWVudUxldHJhIHRhbWFubmlvPXsxMn0gZGVub21pbmFjaW9uID0gXCJtdXkgY2hpY2FcIi8+XHJcbiAgICAgICAgICAgIDxNZW51TGV0cmEgdGFtYW5uaW89ezE0fSBkZW5vbWluYWNpb24gPSBcImNoaWNhXCIvPlxyXG4gICAgICAgICAgICA8TWVudUxldHJhIHRhbWFubmlvPXsxNn0gZGVub21pbmFjaW9uID0gXCJub3JtYWxcIi8+XHJcbiAgICAgICAgICAgIDxNZW51TGV0cmEgdGFtYW5uaW89ezE5fSBkZW5vbWluYWNpb24gPSBcImdyYW5kZVwiLz5cclxuICAgICAgICAgICAgPE1lbnVMZXRyYSB0YW1hbm5pbz17MjJ9IGRlbm9taW5hY2lvbiA9IFwiZW5vcm1lXCIvPlxyXG4gICAgICAgICAgICA8RGl2aWRlci8+XHJcbiAgICAgICAgICAgIDxNZW51SXRlbT48bGFiZWw+PENoZWNrYm94IGNoZWNrZWQ9e29wY2lvbmVzLmNvbkNhbXBvT3BjaW9uZXN9IG9uQ2hhbmdlPXtcclxuICAgICAgICAgICAgICAgICgpPT5kaXNwYXRjaChkaXNwYXRjaGVycy5TRVRfT1BDSU9OKHtvcGNpb246J2NvbkNhbXBvT3BjaW9uZXMnLCB2YWxvcjohb3BjaW9uZXMuY29uQ2FtcG9PcGNpb25lc30pKVxyXG4gICAgICAgICAgICB9IGlucHV0UHJvcHM9e3sgJ2FyaWEtbGFiZWwnOiAncHJpbWFyeSBjaGVja2JveCcgfX0vPmNhbXBvIG9wY2lvbmVzPC9sYWJlbD48L01lbnVJdGVtPlxyXG4gICAgICAgICAgICA8TWVudUl0ZW0+PGxhYmVsPjxDaGVja2JveCBjaGVja2VkPXtvcGNpb25lcy5zYWx0b0F1dG9tYXRpY299IG9uQ2hhbmdlPXtcclxuICAgICAgICAgICAgICAgICgpPT5kaXNwYXRjaChkaXNwYXRjaGVycy5TRVRfT1BDSU9OKHtvcGNpb246J3NhbHRvQXV0b21hdGljbycsIHZhbG9yOiFvcGNpb25lcy5zYWx0b0F1dG9tYXRpY299KSlcclxuICAgICAgICAgICAgfSBpbnB1dFByb3BzPXt7ICdhcmlhLWxhYmVsJzogJ3ByaW1hcnkgY2hlY2tib3gnIH19Lz5zYWx0byBhdXRvbcOhdGljbzwvbGFiZWw+PC9NZW51SXRlbT5cclxuICAgICAgICA8L01lbnU+XHJcbiAgICA8Lz47XHJcbn1cclxuXHJcbmZ1bmN0aW9uIEJhcnJhRGVOYXZlZ2FjaW9uKHByb3BzOntmb3JQazpGb3JQaywgc29sb0xlY3R1cmE6Ym9vbGVhbiwgbW9kb0RpcmVjdG86Ym9vbGVhbn0pe1xyXG4gICAgY29uc3QgZGlzcGF0Y2ggPSB1c2VEaXNwYXRjaCgpO1xyXG4gICAgY29uc3QgZm9yUGsgPSBwcm9wcy5mb3JQaztcclxuICAgIGNvbnN0IHtvcGNpb25lc30gPSB1c2VTZWxlY3RvclZpdmllbmRhKGZvclBrKTtcclxuICAgIGNvbnN0IFtjb25maXJtYUNlcnJhciwgc2V0Q29uZmlybWFDZXJyYXJdID0gdXNlU3RhdGU8Ym9vbGVhbnxudWxsPihmYWxzZSk7XHJcbiAgICB2YXIgZG9taW5pbyA9IGdldERhdG9zQnlQYXNzKCkuaW5mb3JtYWNpb25IZHJbZm9yUGsudml2aWVuZGFdLnRlbS5kb21pbmlvO1xyXG4gICAgdmFyIGNlcnJhckRpcmVjdG8gPSBhc3luYyBmdW5jdGlvbigpe1xyXG4gICAgICAgIHJlbW92ZUNTU0J5SWQoQk9PVFNUUkFQXzVfMV8zX1NSQyk7XHJcbiAgICAgICAgdmFyIGVzdHJ1Y3R1cmEgPSBnZXRFc3RydWN0dXJhKCk7XHJcbiAgICAgICAgZ290b0NvbnNpc3RpcihcclxuICAgICAgICAgICAgZXN0cnVjdHVyYS5vcGVyYXRpdm8gYXMgSWRPcGVyYXRpdm8sXHJcbiAgICAgICAgICAgIGdldERhdG9zQnlQYXNzKCkuaW5mb3JtYWNpb25IZHJbZm9yUGsudml2aWVuZGFdLnRhcmVhLnRhcmVhLFxyXG4gICAgICAgICAgICBmb3JQay52aXZpZW5kYVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgLy92YXIgaGFzaD1uZXcgVVJMU2VhcmNoUGFyYW1zKGxvY2F0aW9uLmhhc2g/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+dHJ1ZSkgfVxyXG4pXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gRGVzcGxlZ2FyTGluZWFSZXN1bWVuVUFQcmluY2lwYWwocHJvcHM6e1xyXG4gICAgbnVtVml2aWVuZGE6SWRFbmMsXHJcbiAgICBmb3JtUHJpbmNpcGFsOklkRm9ybXVsYXJpbyxcclxuICAgIHRhcmVhOiBzdHJpbmcsXHJcbiAgICByZXNwdWVzdGFzOlJlc3B1ZXN0YXNSYWl6LFxyXG59KXtcclxuICAgIGNvbnN0IHtudW1WaXZpZW5kYSwgcmVzcHVlc3RhcywgZm9ybVByaW5jaXBhbCwgdGFyZWF9ID0gcHJvcHM7XHJcbiAgICBjb25zdCBpZD0ndml2LScrbnVtVml2aWVuZGE7XHJcbiAgICBjb25zdCBmb3JQazpGb3JQaz17Zm9ybXVsYXJpbzpmb3JtUHJpbmNpcGFsLCB2aXZpZW5kYTpOdW1iZXIobnVtVml2aWVuZGEpIGFzIElkRW5jfTsgLy9ubyBxdWl0YXIgZWwgY2FzdGVvIHBvcnF1ZSB2aWVuZSBjb21vIHRleHRvIHkgbmVjZXNpdG8gcXVlIHNlYSBuw7ptZXJvXHJcbiAgICB2YXIgdGVtID0gZ2V0RGF0b3NCeVBhc3MoKS5pbmZvcm1hY2lvbkhkcltudW1WaXZpZW5kYV0udGVtO1xyXG4gICAgdmFyIGRpc3BhdGNoID0gdXNlRGlzcGF0Y2goKTtcclxuICAgIHVzZUVmZmVjdCgoKT0+e1xyXG4gICAgICAgIHZvbGNhZG9JbmljaWFsRWxlbWVudG9zUmVnaXN0cmFkb3MoZm9yUGspO1xyXG4gICAgICAgIGludGVudGFyQmFja3VwKGZvclBrKVxyXG4gICAgfSlcclxuICAgIHJlZ2lzdHJhckVsZW1lbnRvKHtpZCwgZGlyZWN0OnRydWUsXHJcbiAgICAgICAgZnVuOihcclxuICAgICAgICAgICAgcjpSZXNwdWVzdGFzLCBcclxuICAgICAgICAgICAgX2ZlZWRiYWNrRm9ybTogRm9ybVN0cnVjdHVyZVN0YXRlPElkVmFyaWFibGUsIFZhbG9yLCBJZEZpbj4sIFxyXG4gICAgICAgICAgICBlbGVtZW50bzpIVE1MRGl2RWxlbWVudCwgXHJcbiAgICAgICAgICAgIGZlZWRiYWNrQWxsOntbZm9ybXVsYXJpbyBpbiBQbGFpbkZvclBrXTpGb3JtU3RydWN0dXJlU3RhdGU8SWRWYXJpYWJsZSwgVmFsb3IsIElkRmluPn0sIFxyXG4gICAgICAgICAgICBfZXN0cnVjdHVyYTpFc3RydWN0dXJhXHJcbiAgICAgICAgKT0+e1xyXG4gICAgICAgICAgICAvL3ByZWd1bnRvIHNpIGVzIGxhIG1pc21hIHZpdmllbmRhIHBvcnF1ZSBsYSBmdW5jaW9uIHNlIGRpc3BhcmEgXHJcbiAgICAgICAgICAgIC8vY29uIHRvZGFzIGxhcyBjb21iaW5hY2lvbmVzIGRlIHJlc3B1ZXN0YXMgcGFyYSBjYWRhIGZvclBrXHJcbiAgICAgICAgICAgIC8vQHRzLWlnbm9yZSB2aXZpZW5kYSBleGlzdGVcclxuICAgICAgICAgICAgaWYoci52aXZpZW5kYSA9PSBmb3JQay52aXZpZW5kYSl7XHJcbiAgICAgICAgICAgICAgICBlbGVtZW50by5zZXRBdHRyaWJ1dGUoJ3Jlc3VtZW4tZXN0YWRvJyxjYWxjdWxhclJlc3VtZW5WaXZpZW5kYShmb3JQaywgZmVlZGJhY2tBbGwsIHIpLnJlc3VtZW5Fc3RhZG8pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgICAgICBcclxuICAgIH0pXHJcbiAgICByZXR1cm4gPFRhYmxlUm93IGtleT17bnVtVml2aWVuZGF9PlxyXG4gICAgICAgIDxUYWJsZUNlbGw+XHJcbiAgICAgICAgICAgIHt0ZW0/XHJcbiAgICAgICAgICAgICAgICA8PlxyXG4gICAgICAgICAgICAgICAgICAgIDxEZXNwbGVnYXJUZW0gdGVtPXt0ZW19Lz5cclxuICAgICAgICAgICAgICAgICAgICB7cmVzcHVlc3Rhc1sncmVzdW1lbkVzdGFkbycgYXMgSWRWYXJpYWJsZV09PVwiY2l0YSBwYWN0YWRhXCI/XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxEZXNwbGVnYXJDaXRhUGFjdGFkYSByZXNwdWVzdGFzPXtyZXNwdWVzdGFzfS8+XHJcbiAgICAgICAgICAgICAgICAgICAgOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8RGVzcGxlZ2FyQ2l0YVBhY3RhZGFZU2VsZWNjaW9uYWRvQW50ZXJpb3JUZW0gdGVtPXt0ZW19Lz5cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICA8Lz5cclxuICAgICAgICAgICAgOm51bGx9XHJcbiAgICAgICAgPC9UYWJsZUNlbGw+XHJcbiAgICAgICAgPFRhYmxlQ2VsbD5cclxuICAgICAgICAgICAge3RhcmVhfVxyXG4gICAgICAgIDwvVGFibGVDZWxsPlxyXG4gICAgICAgIDxUYWJsZUNlbGw+XHJcbiAgICAgICAgICAgIDxCdXR0b24gaWQ9e2lkfSBvbkNsaWNrPXsoKT0+IFxyXG4gICAgICAgICAgICAgICAgZGlzcGF0Y2goZGlzcGF0Y2hlcnMuQ0FNQklBUl9GT1JNVUxBUklPKHtmb3JQaywgYXBpbGFyVnVlbHRhOmZhbHNlfSkpXHJcbiAgICAgICAgICAgIH0+XHJcbiAgICAgICAgICAgICAgICB7bnVtVml2aWVuZGEudG9TdHJpbmcoKX1cclxuICAgICAgICAgICAgPC9CdXR0b24+XHJcbiAgICAgICAgPC9UYWJsZUNlbGw+XHJcbiAgICA8L1RhYmxlUm93PlxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gRGVzcGxlZ2FyQ2FyZ2EocHJvcHM6e1xyXG4gICAgY2FyZ2E6Q2FyZ2EsIFxyXG4gICAgaWRDYXJnYTpJZENhcmdhLCBcclxuICAgIHBvc2ljaW9uOm51bWJlcixcclxuICAgIGluZm9ybWFjaW9uSGRyOkluZm9ybWFjaW9uSGRyLCBcclxuICAgIHJlc3B1ZXN0YXM6IFJlc3B1ZXN0YUxhc1VBLFxyXG4gICAgZmVlZGJhY2tSb3dWYWxpZGF0b3I6e1xyXG4gICAgICAgIFtmb3JtdWxhcmlvIGluIFBsYWluRm9yUGtdOkZvcm1TdHJ1Y3R1cmVTdGF0ZTxJZFZhcmlhYmxlLCBWYWxvciwgSWRGaW4+IFxyXG4gICAgfVxyXG59KXtcclxuICAgIGNvbnN0IHtjYXJnYSwgaWRDYXJnYSwgaW5mb3JtYWNpb25IZHIsIHJlc3B1ZXN0YXN9ID0gcHJvcHM7XHJcbiAgICByZXR1cm4gPFBhcGVyIGNsYXNzTmFtZT1cImNhcmdhXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJpbmZvcm1hY2lvbi1jYXJnYVwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImNhcmdhXCI+w4FyZWE6IHtpZENhcmdhfTwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm9ic2VydmFjaW9uZXNcIj57Y2FyZ2Eub2JzZXJ2YWNpb25lc308L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImluZm9ybWFjaW9uLWNhcmdhXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmVjaGFcIj57Y2FyZ2EuZmVjaGF9PC9kaXY+XHJcbiAgICAgICAgICAgIHsvKlxyXG4gICAgICAgICAgICA8QnV0dG9uR3JvdXA+XHJcbiAgICAgICAgICAgIHtsaXN0YUVzdGFkb3NDYXJnYS5tYXAoZXN0YWRvX2NhcmdhPT5cclxuICAgICAgICAgICAgICAgIDxCdXR0b24ga2V5PXtlc3RhZG9fY2FyZ2F9IHZhcmlhbnQ9e2VzdGFkb19jYXJnYT09Y2FyZ2EuZXN0YWRvX2NhcmdhP1wiY29udGFpbmVkXCI6XCJvdXRsaW5lZFwifSBvbkNsaWNrPXtcclxuICAgICAgICAgICAgICAgICAgICAoKT0+ZGlzcGF0Y2goZGlzcGF0Y2hlcnMuRVNUQURPX0NBUkdBKHtpZENhcmdhLCBlc3RhZG9fY2FyZ2F9KSlcclxuICAgICAgICAgICAgICAgIH0+e2VzdGFkb19jYXJnYX08L0J1dHRvbj5cclxuICAgICAgICAgICAgKX1cclxuICAgICAgICAgICAgPC9CdXR0b25Hcm91cD5cclxuICAgICAgICAgICAgKi99XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAge2NhcmdhLmVzdGFkb19jYXJnYT09bnVsbCAmJiAhcHJvcHMucG9zaWNpb24gfHwgY2FyZ2EuZXN0YWRvX2NhcmdhPT0ncmVsZXZhbWllbnRvJz9cclxuICAgICAgICA8VGFibGUgY2xhc3NOYW1lPVwidGFibGEtY2FyZ2EtaG9qYS1kZS1ydXRhXCI+XHJcbiAgICAgICAgICAgIDxjb2xncm91cD5cclxuICAgICAgICAgICAgICAgIDxjb2wgc3R5bGU9e3t3aWR0aDpcIjc1JVwifX0vPlxyXG4gICAgICAgICAgICAgICAgPGNvbCBzdHlsZT17e3dpZHRoOlwiMTAlXCJ9fS8+ICAgIFxyXG4gICAgICAgICAgICAgICAgPGNvbCBzdHlsZT17e3dpZHRoOlwiMTUlXCJ9fS8+ICAgIFxyXG4gICAgICAgICAgICA8L2NvbGdyb3VwPlxyXG4gICAgICAgICAgICA8VGFibGVIZWFkIHN0eWxlPXt7Zm9udFNpemU6IFwiMS4ycmVtXCJ9fT5cclxuICAgICAgICAgICAgICAgIDxUYWJsZVJvdyBjbGFzc05hbWU9XCJ0ci1jYXJnYVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxUYWJsZUNlbGw+ZG9taWNpbGlvPC9UYWJsZUNlbGw+XHJcbiAgICAgICAgICAgICAgICAgICAgPFRhYmxlQ2VsbD50YXJlYTwvVGFibGVDZWxsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxUYWJsZUNlbGw+ZW5jPC9UYWJsZUNlbGw+XHJcbiAgICAgICAgICAgICAgICA8L1RhYmxlUm93PlxyXG4gICAgICAgICAgICA8L1RhYmxlSGVhZD5cclxuICAgICAgICAgICAgPFRhYmxlQm9keT5cclxuICAgICAgICAgICAgICAgIHtsaWtlQXIoaW5mb3JtYWNpb25IZHIpLmZpbHRlcigoaW5mb3JtYWNpb24pPT5pbmZvcm1hY2lvbi50ZW0uY2FyZ2E9PWlkQ2FyZ2EpLm1hcCgoaW5mb3JtYWNpb24sIG51bVZpdmllbmRhKT0+XHJcbiAgICAgICAgICAgICAgICAgICAgPERlc3BsZWdhckxpbmVhUmVzdW1lblVBUHJpbmNpcGFsIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBrZXk9e251bVZpdmllbmRhfSBcclxuICAgICAgICAgICAgICAgICAgICAgICAgbnVtVml2aWVuZGE9e251bVZpdmllbmRhfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJlYT17aW5mb3JtYWNpb24udGFyZWEudGFyZWF9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1QcmluY2lwYWw9e2luZm9ybWFjaW9uLnRhcmVhLm1haW5fZm9ybX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzcHVlc3Rhcz17cmVzcHVlc3Rhcy52aXZpZW5kYXNbbnVtVml2aWVuZGFdIGFzIFJlc3B1ZXN0YXNSYWl6fVxyXG4gICAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICApLmFycmF5KCl9XHJcbiAgICAgICAgICAgIDwvVGFibGVCb2R5PlxyXG4gICAgICAgIDwvVGFibGU+OlxyXG4gICAgICAgIDxUYWJsZT5cclxuICAgICAgICAgICAgPFRhYmxlSGVhZCBzdHlsZT17e2ZvbnRTaXplOiBcIjEuMnJlbVwifX0+XHJcbiAgICAgICAgICAgICAgICA8VGFibGVSb3cgY2xhc3NOYW1lPVwidHItY2FyZ2FcIj5cclxuICAgICAgICAgICAgICAgICAgICB7cmVzdW1pZG9yZXMubWFwKChyZXN1bWlkb3I6IHR5cGVvZiByZXN1bWlkb3Jlc1swXSwgaTpudW1iZXIpPT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPFRhYmxlQ2VsbCBrZXk9e2l9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3Jlc3VtaWRvci5ub21icmV9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvVGFibGVDZWxsPlxyXG4gICAgICAgICAgICAgICAgICAgICl9XHJcbiAgICAgICAgICAgICAgICA8L1RhYmxlUm93PlxyXG4gICAgICAgICAgICA8L1RhYmxlSGVhZD5cclxuICAgICAgICA8L1RhYmxlPlxyXG4gICAgICAgIH1cclxuICAgIDwvUGFwZXI+XHJcbn1cclxuZXhwb3J0IGZ1bmN0aW9uIERlc3BsZWdhckNpdGFQYWN0YWRhKHByb3BzOntyZXNwdWVzdGFzOlJlc3B1ZXN0YXN9KXtcclxuICAgIGNvbnN0IHtyZXNwdWVzdGFzfSA9IHByb3BzO1xyXG4gICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPVwiY2l0YS1wYWN0YWRhXCI+XHJcbiAgICAgICAgPGRpdj48QXRyaWJ1dG8gbm9tYnJlPVwiQ2l0YSBwYWN0YWRhIGNvbiBcIiB2YWxvcj17cmVzcHVlc3Rhc1twMTJdfS8+PC9kaXY+XHJcbiAgICAgICAgPGRpdj48QXRyaWJ1dG8gbm9tYnJlPVwiQ2VsLjpcIiB2YWxvcj17cmVzcHVlc3Rhc1tzcDJdfS8+PC9kaXY+XHJcbiAgICAgICAgPGRpdj48QXRyaWJ1dG8gbm9tYnJlPVwiVGVsLjpcIiB2YWxvcj17cmVzcHVlc3Rhc1tzcDNdfS8+PC9kaXY+XHJcbiAgICAgICAgPGRpdj48QXRyaWJ1dG8gbm9tYnJlPVwiRmVjaGE6XCIgdmFsb3I9e3Jlc3B1ZXN0YXNbc3A0XX0vPjwvZGl2PlxyXG4gICAgICAgIDxkaXY+PEF0cmlidXRvIG5vbWJyZT1cIkhvcmE6XCIgdmFsb3I9e3Jlc3B1ZXN0YXNbc3A1XX0vPjwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBEZXNwbGVnYXJDaXRhUGFjdGFkYVlTZWxlY2Npb25hZG9BbnRlcmlvclRlbShwcm9wczp7dGVtOlRFTX0pe1xyXG4gICAgY29uc3Qge3RlbX0gPSBwcm9wcztcclxuICAgIHJldHVybiA8ZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGVtLWNpdGFcIj5cclxuICAgICAgICAgICAgPEF0cmlidXRvIG5vbWJyZT1cIkNpdGE6XCIgdmFsb3I9e3RlbS5jaXRhfS8+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIERlc3BsZWdhclRlbShwcm9wczp7dGVtOlRFTX0pe1xyXG4gICAgY29uc3Qge3RlbX0gPSBwcm9wcztcclxuICAgIHJldHVybiA8ZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGVtLWRvbWljaWxpb1wiPnt0ZW0ubm9tY2FsbGV9IHt0ZW0ubnJvY2F0YXN0cmFsfSA8QXRyaWJ1dG8gbm9tYnJlPVwicGlzb1wiIHZhbG9yPXt0ZW0ucGlzb30vPiA8QXRyaWJ1dG8gbm9tYnJlPVwiZHB0b1wiIHZhbG9yPXt0ZW0uZGVwYXJ0YW1lbnRvfS8+IDwvZGl2PlxyXG4gICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgIDxBdHJpYnV0byBub21icmU9XCJzZWN0b3JcIiB2YWxvcj17dGVtLnNlY3Rvcn0vPlxyXG4gICAgICAgICAgICA8QXRyaWJ1dG8gbm9tYnJlPVwiZWRpZmljaW9cIiB2YWxvcj17dGVtLmVkaWZpY2lvfS8+XHJcbiAgICAgICAgICAgIDxBdHJpYnV0byBub21icmU9XCJjYXNhXCIgdmFsb3I9e3RlbS5jYXNhfS8+XHJcbiAgICAgICAgICAgIDxBdHJpYnV0byBub21icmU9XCJlbnRyYWRhXCIgdmFsb3I9e3RlbS5lbnRyYWRhfS8+XHJcbiAgICAgICAgICAgIDxBdHJpYnV0byBub21icmU9XCJoYWJpdGFjaW9uXCIgdmFsb3I9e3RlbS5oYWJpdGFjaW9ufS8+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZW0tb2JzZXJ2YWNpb25lc1wiPlxyXG4gICAgICAgICAgICB7dGVtLm9ic2VydmFjaW9uZXN9IFxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBIb2phRGVSdXRhRGVzcGxpZWd1ZSgpe1xyXG4gICAgdmFyIHtjYXJnYXMsIG51bV9zaW5jcm8sIGluZm9ybWFjaW9uSGRyLCByZXNwdWVzdGFzfSA9IGdldERhdG9zQnlQYXNzKCk7XHJcbiAgICB2YXIge21vZG99ID0gdXNlU2VsZWN0b3IoKHN0YXRlOkNhc29TdGF0ZSk9Pih7bW9kbzpzdGF0ZS5tb2RvfSkpO1xyXG4gICAgdmFyIGZlZWRiYWNrUm93VmFsaWRhdG9yID0gZ2V0RmVlZGJhY2tSb3dWYWxpZGF0b3IoKVxyXG4gICAgdmFyIGRpc3BhdGNoID0gdXNlRGlzcGF0Y2goKTtcclxuICAgIGNvbnN0IHVwZGF0ZU9ubGluZVN0YXR1cyA9IGZ1bmN0aW9uKCl7XHJcbiAgICAgICAgc2V0T25saW5lKHdpbmRvdy5uYXZpZ2F0b3Iub25MaW5lKTtcclxuICAgIH1cclxuICAgIGNvbnN0IGFwcFZlcnNpb24gPSBnZXRDYWNoZVZlcnNpb24oKTtcclxuICAgIGNvbnN0IFtvbmxpbmUsIHNldE9ubGluZV0gPSB1c2VTdGF0ZSh3aW5kb3cubmF2aWdhdG9yLm9uTGluZSk7XHJcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignb25saW5lJywgIHVwZGF0ZU9ubGluZVN0YXR1cyk7XHJcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignb2ZmbGluZScsIHVwZGF0ZU9ubGluZVN0YXR1cyk7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICAgIDw+XHJcbiAgICAgICAgICAgIDxBcHBCYXIgcG9zaXRpb249XCJmaXhlZFwiPlxyXG4gICAgICAgICAgICAgICAgPFRvb2xiYXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPFR5cG9ncmFwaHkgdmFyaWFudD1cImg2XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEhvamEgZGUgcnV0YVxyXG4gICAgICAgICAgICAgICAgICAgIDwvVHlwb2dyYXBoeT5cclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy88SWNvbkJ1dHRvbiBzdHlsZT17e21hcmdpblRvcDonM3B4J319XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gICAgY29sb3I9XCJpbmhlcml0XCJcclxuICAgICAgICAgICAgICAgICAgICAvLyAgICAvL29uQ2xpY2s9ey8qZGlzcGF0Y2ggcXVlIGxsZXZhIGEgcGFudGFsbGEgb3BjaW9uZXMqL31cclxuICAgICAgICAgICAgICAgICAgICAvLz5cclxuICAgICAgICAgICAgICAgICAgICAvLyAgICA8SUNPTi5TZXR0aW5ncy8+XHJcbiAgICAgICAgICAgICAgICAgICAgLy88L0ljb25CdXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHtvbmxpbmU/XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SWNvbkJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPVwiaW5oZXJpdFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCk9PntcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290b1NpbmNyb25pemFyKClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJQ09OLlN5bmNBbHQvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9JY29uQnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8Lz5cclxuICAgICAgICAgICAgICAgICAgICA6bnVsbH1cclxuICAgICAgICAgICAgICAgIDwvVG9vbGJhcj5cclxuICAgICAgICAgICAgPC9BcHBCYXI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiaG9qYS1kZS1ydXRhXCI+XHJcbiAgICAgICAgICAgICAgICB7bW9kby5kZW1vPzxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPFR5cG9ncmFwaHk+TW9kbyBkZW1vIDwvVHlwb2dyYXBoeT5cclxuICAgICAgICAgICAgICAgICAgICA8QnV0dG9uIHZhcmlhbnQ9XCJvdXRsaW5lZFwiIGNvbG9yPVwic2Vjb25kYXJ5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCk9PmRpc3BhdGNoKGRpc3BhdGNoZXJzLlJFSU5JQ0lBUl9ERU1PKHt9KSl9XHJcbiAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZWluaWNpYXJcclxuICAgICAgICAgICAgICAgICAgICA8L0J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PjpudWxsfVxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJub21icmUtdmVyc2lvblwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXY+RGlyZWNjacOzbiBHZW5lcmFsIGRlIEVzdGFkw61zdGljYSB5IENlbnNvcyAtIEMuQS5CLkEuPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdj57bXkuZ2V0TG9jYWxWYXIoJ2FwcC12ZXJzaW9uJyl9IHNpbmNybyB7bnVtX3NpbmNyb30gLSB2ZXJzacOzbiB7YXBwVmVyc2lvbn08L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAge2xpa2VBcihjYXJnYXMpLm1hcCgoY2FyZ2EsIGlkQ2FyZ2EsIF8sIHBvc2ljaW9uKT0+XHJcbiAgICAgICAgICAgICAgICAgICAgPERlc3BsZWdhckNhcmdhIGtleT17aWRDYXJnYX0gY2FyZ2E9e2NhcmdhfSBpZENhcmdhPXtpZENhcmdhfSBwb3NpY2lvbj17cG9zaWNpb259IGluZm9ybWFjaW9uSGRyPXtpbmZvcm1hY2lvbkhkcn0gZmVlZGJhY2tSb3dWYWxpZGF0b3I9e2ZlZWRiYWNrUm93VmFsaWRhdG9yfSByZXNwdWVzdGFzPXtyZXNwdWVzdGFzfS8+XHJcbiAgICAgICAgICAgICAgICApLmFycmF5KCl9XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvPlxyXG4gICAgKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIExpc3RhVGV4dG9zKHByb3BzOnt0ZXh0b3M6c3RyaW5nW119KXtcclxuICAgIHJldHVybiA8dWw+XHJcbiAgICAgICAge3Byb3BzLnRleHRvcy5tYXAodD0+PGxpPjxUeXBvZ3JhcGh5Pnt0fTwvVHlwb2dyYXBoeT48L2xpPil9XHJcbiAgICA8L3VsPjtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIEJpZW52ZW5pZGFEZXNwbGllZ3VlKHByb3BzOnttb2RvOkNhc29TdGF0ZVtcIm1vZG9cIl19KXtcclxuICAgIHZhciBkaXNwYXRjaD11c2VEaXNwYXRjaCgpO1xyXG4gICAgcmV0dXJuIDxQYXBlciBjbGFzc05hbWU9XCJiaWVudmVuaWRhXCI+XHJcbiAgICAgICAge3Byb3BzLm1vZG8uZGVtbz9cclxuICAgICAgICAgICAgPD5cclxuICAgICAgICAgICAgICAgIDxUeXBvZ3JhcGh5PkRFTU8gZGVsIHNpc3RlbWEgZGUgcmVsZXZhbWllbnRvIGRlIERNRU5DVTwvVHlwb2dyYXBoeT5cclxuICAgICAgICAgICAgICAgIDxUeXBvZ3JhcGh5PkVuIGVzdGEgZGVtbzo8L1R5cG9ncmFwaHk+XHJcbiAgICAgICAgICAgICAgICA8TGlzdGFUZXh0b3MgdGV4dG9zPXtbXHJcbiAgICAgICAgICAgICAgICAgICAgXCJBbGd1bmFzIHZpdmllbmRhcyBhcGFyZWNlbiByZWxldmFkYXMgKGVsIGJvdMOzbiBlc3TDoSBkZSBjb2xvcikgc2lydmVuIGRlIGVqZW1wbG9cIixcclxuICAgICAgICAgICAgICAgICAgICBcIkxvIHF1ZSBzZSBjYXJndWVuIHNlIGd1YXJkYW4gbG9jYWxtZW50ZSBwZXJvIG5vIHNlIHRyYXNtaXRlbiBhIGxhIGJhc2UgZGUgZGF0b3NcIixcclxuICAgICAgICAgICAgICAgICAgICBcIlNlIHB1ZWRlIHZvbHZlciBhIGxhIHZlcnNpw7NuIGluaWNpYWwgKG8gc2VhIGJvcnJhciBsbyBxdWUgc2UgZ3VhcmTDsyBsb2NhbG1lbnRlKSBkZXNkZSBsYSBob2phIGRlIHJ1dGEgYm90b24gW3JlaW5pY2lhciBkZW1vXVwiLFxyXG4gICAgICAgICAgICAgICAgICAgIFwiVG9kYXbDrWEgaGF5IGNvc2FzIHF1ZSBmYWx0YW4gbyBwdWVkZW4gY2FtYmlhclwiLFxyXG4gICAgICAgICAgICAgICAgXX0gLz5cclxuICAgICAgICAgICAgPC8+XHJcbiAgICAgICAgICAgIDo8PlxyXG4gICAgICAgICAgICAgICAgPFR5cG9ncmFwaHk+RW5jdWVzdGEgZGUgU2Vyb3ByZXZhbGVuY2lhIGRlIENPVklELTE5PC9UeXBvZ3JhcGh5PlxyXG4gICAgICAgICAgICA8Lz5cclxuICAgICAgICB9XHJcbiAgICAgICAgPEJ1dHRvblxyXG4gICAgICAgICAgICB2YXJpYW50PVwiY29udGFpbmVkXCJcclxuICAgICAgICAgICAgY29sb3I9XCJzZWNvbmRhcnlcIlxyXG4gICAgICAgICAgICBvbkNsaWNrPXsoKT0+eyBnb3RvU2luY3Jvbml6YXIoKTsgfX1cclxuICAgICAgICA+XHJcbiAgICAgICAgICAgIDxzcGFuPlNpbmNyb25pemFyIDwvc3Bhbj4gPElDT04uU3luY0FsdC8+XHJcbiAgICAgICAgPC9CdXR0b24+XHJcbiAgICAgICAgPEJ1dHRvblxyXG4gICAgICAgICAgICB2YXJpYW50PVwiY29udGFpbmVkXCJcclxuICAgICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcclxuICAgICAgICAgICAgb25DbGljaz17KCk9PmRpc3BhdGNoKGRpc3BhdGNoZXJzLlNFVF9PUENJT04oe29wY2lvbjonYmllbnZlbmlkbycsIHZhbG9yOnRydWV9KSl9XHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgICA8c3Bhbj5Db250aW51YXIgPC9zcGFuPiA8SUNPTi5TZW5kLz5cclxuICAgICAgICA8L0J1dHRvbj5cclxuICAgIDwvUGFwZXI+XHJcbn1cclxuXHJcbi8vQ09OVFJPTCBERSBQRVNUQcORQVNcclxudmFyIGFsbE9wZW5lZFRhYnM6e1t4OnN0cmluZ106bnVtYmVyfT17fTtcclxudmFyIGluZm9PcGVuZWRUYWJzPXtcclxuICAgIGFsbE9wZW5lZFRhYnMsXHJcbiAgICBteUlkOidjYWxjdWxhbmRvLi4uJyxcclxuICAgIG90aGVyVGFic05hbWVzOicnXHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBPcGVuZWRUYWJzKCl7XHJcbiAgICBjb25zdCBbdGFicywgc2V0VGFic10gPSB1c2VTdGF0ZShpbmZvT3BlbmVkVGFicy5vdGhlclRhYnNOYW1lcyk7XHJcbiAgICB2YXIge21vZG9EaXJlY3RvfSA9IHVzZVNlbGVjdG9yKChzdGF0ZTpDYXNvU3RhdGUpPT4oe21vZG9EaXJlY3RvOnN0YXRlLm9wY2lvbmVzLm1vZG9EaXJlY3RvfSkpO1xyXG4gICAgY29uc3QgdXBkYXRlVGFic1N0YXR1cyA9IGZ1bmN0aW9uKCl7XHJcbiAgICAgICAgc2V0VGFicyhpbmZvT3BlbmVkVGFicy5vdGhlclRhYnNOYW1lcyk7XHJcbiAgICB9XHJcbiAgICB1c2VFZmZlY3QoKCk9PntcclxuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbXktdGFicycsdXBkYXRlVGFic1N0YXR1cyk7XHJcbiAgICAgICAgcmV0dXJuICgpID0+IHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdteS10YWJzJyx1cGRhdGVUYWJzU3RhdHVzKTtcclxuICAgIH0sW10pXHJcbiAgICByZXR1cm4gbW9kb0RpcmVjdG8/bnVsbDoodGFicyk/XHJcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0YWItY291bnRlciB0YWItZXJyb3JcIj7CoUFURU5DScOTTiEgSGF5IG3DoXMgZGUgdW5hIHZlbnRhbmEgYWJpZXJ0YS4gU2UgcHVlZGVuIHBlcmRlciBkYXRvczoge3RhYnN9PC9kaXY+XHJcbiAgICA6XHJcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0YWItY291bnRlclwiPuKclDwvZGl2PlxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gQXBwRG1FbmN1KCl7XHJcbiAgICB2YXIge2ZvclBrLCBiaWVudmVuaWRvLCBtb2RvfSA9IHVzZVNlbGVjdG9yKChzdGF0ZTpDYXNvU3RhdGUpPT4oey4uLnN0YXRlLm9wY2lvbmVzLCAuLi5zdGF0ZS5tb2RvLCAuLi5zdGF0ZX0pKTtcclxuICAgIGlmKCFiaWVudmVuaWRvKXtcclxuICAgICAgICByZXR1cm4gPEJpZW52ZW5pZGFEZXNwbGllZ3VlIG1vZG89e21vZG99Lz4gXHJcbiAgICB9ZWxzZSBpZihmb3JQaz09bnVsbCl7XHJcbiAgICAgICAgcmV0dXJuIDxIb2phRGVSdXRhRGVzcGxpZWd1ZSAvPiBcclxuICAgIH1lbHNle1xyXG4gICAgICAgIHJldHVybiA8Rm9ybXVsYXJpb0Rlc3BsaWVndWUgZm9yUGs9e2ZvclBrfS8+XHJcbiAgICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIFBhbnRhbGxhSW5pY2lhbFNpbkNhcmdhKF9wcm9wczp7fSl7XHJcbiAgICBjb25zdCB1cGRhdGVPbmxpbmVTdGF0dXMgPSBmdW5jdGlvbigpe1xyXG4gICAgICAgIHNldE9ubGluZSh3aW5kb3cubmF2aWdhdG9yLm9uTGluZSk7XHJcbiAgICB9XHJcbiAgICBjb25zdCBbb25saW5lLCBzZXRPbmxpbmVdID0gdXNlU3RhdGUod2luZG93Lm5hdmlnYXRvci5vbkxpbmUpO1xyXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ29ubGluZScsICB1cGRhdGVPbmxpbmVTdGF0dXMpO1xyXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ29mZmxpbmUnLCB1cGRhdGVPbmxpbmVTdGF0dXMpO1xyXG4gICAgY29uc3QgcGFyYWdyYXBoU3R5bGVzPXtmb250U2l6ZTpcIjEuMnJlbVwiLCBmb250V2VpZ2h0OjYwMCwgcGFkZGluZzogXCI1cHggMTBweFwifTtcclxuICAgIHJldHVybiAoXHJcbiAgICAgICAgPD5cclxuICAgICAgICAgICAgPEFwcEJhciBwb3NpdGlvbj1cImZpeGVkXCI+XHJcbiAgICAgICAgICAgICAgICA8VHlwb2dyYXBoeSB2YXJpYW50PVwiaDZcIiBzdHlsZT17e21hcmdpbjoyNX19PlxyXG4gICAgICAgICAgICAgICAgICAgIERpc3Bvc2l0aXZvIHNpbiBjYXJnYVxyXG4gICAgICAgICAgICAgICAgPC9UeXBvZ3JhcGh5PlxyXG4gICAgICAgICAgICA8L0FwcEJhcj5cclxuICAgICAgICAgICAgPG1haW4+XHJcbiAgICAgICAgICAgICAgICA8UGFwZXIgc3R5bGU9e3toZWlnaHQ6JzYwMHB4JywgcGFkZGluZzpcIjE1cHhcIiwgbWFyZ2luVG9wOjc1fX0+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge29ubGluZT9cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFR5cG9ncmFwaHkgY29tcG9uZW50PVwicFwiIHN0eWxlPXtwYXJhZ3JhcGhTdHlsZXN9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTaW5jcm9uaXphciBkaXNwb3NpdGl2b1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT17e3BhZGRpbmc6JzVweCd9fT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxCdXR0b25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcj1cInByaW1hcnlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJjb250YWluZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpPT57XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG9TaW5jcm9uaXphcigpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SUNPTi5TeW5jQWx0Lz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9UeXBvZ3JhcGh5PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUeXBvZ3JhcGh5IGNvbXBvbmVudD1cInBcIiBzdHlsZT17cGFyYWdyYXBoU3R5bGVzfT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBObyBoYXkgY29uZXhpw7NuIGEgaW50ZXJuZXQsIHBvciBmYXZvciBjb27DqWN0ZSBlbCBkaXNwb3NpdGl2byBhIHVuYSByZWQgcGFyYSBzaW5jcm9uaXphciB1bmEgaG9qYSBkZSBydXRhLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9UeXBvZ3JhcGh5PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L1BhcGVyPlxyXG4gICAgICAgICAgICA8L21haW4+XHJcbiAgICAgICAgPC8+XHJcbiAgICApO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gUGFudGFsbGFJbmljaWFsKCl7XHJcbiAgICB2YXIge2ZvclBrLCBiaWVudmVuaWRvLCBtb2RvfSA9IHVzZVNlbGVjdG9yKChzdGF0ZTpDYXNvU3RhdGUpPT4oey4uLnN0YXRlLm9wY2lvbmVzLCAuLi5zdGF0ZS5tb2RvLCAuLi5zdGF0ZX0pKTtcclxuICAgIGlmKCFiaWVudmVuaWRvKXtcclxuICAgICAgICByZXR1cm4gPEJpZW52ZW5pZGFEZXNwbGllZ3VlIG1vZG89e21vZG99Lz4gXHJcbiAgICB9ZWxzZSBpZihmb3JQaz09bnVsbCl7XHJcbiAgICAgICAgcmV0dXJuIDxIb2phRGVSdXRhRGVzcGxpZWd1ZSAvPiBcclxuICAgIH1lbHNle1xyXG4gICAgICAgIHJldHVybiA8Rm9ybXVsYXJpb0Rlc3BsaWVndWUgZm9yUGs9e2ZvclBrfS8+XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBkbVBhbnRhbGxhSW5pY2lhbFNpbkNhcmdhKCl7XHJcbiAgICB0cnl7XHJcbiAgICAgICAgYXdhaXQgbG9hZENTUyhCT09UU1RSQVBfNV8xXzNfU1JDKTtcclxuICAgIH1jYXRjaChlcnIpe1xyXG4gICAgICAgIHRocm93KGVycilcclxuICAgIH1cclxuICAgIFJlYWN0RE9NLnJlbmRlcihcclxuICAgICAgICA8UGFudGFsbGFJbmljaWFsU2luQ2FyZ2EvPixcclxuICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWFpbl9sYXlvdXQnKVxyXG4gICAgKVxyXG59XHJcblxyXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZGVzcGxlZ2FyRm9ybXVsYXJpb0FjdHVhbChvcHRzOnttb2RvRGVtbzpib29sZWFuLCBmb3JQa1JhaXo/OkZvclBrUmFpeiwgb3BlcmF0aXZvOklkT3BlcmF0aXZvfSl7XHJcbiAgICAvLyB0cmFlciBsb3MgbWV0YWRhdG9zIGVuIHVuYSBcImVzdHJ1Y3R1cmFcIlxyXG4gICAgLy8gdHJhZXIgbG9zIGRhdG9zIGRlIGxvY2FsU3RvcmFnZVxyXG4gICAgLy8gdmVyaWZpY2FyIGVsIG1haW4gTGF5b3V0XHJcbiAgICBjb25zdCBzdG9yZSA9IGF3YWl0IGRtVHJhZXJEYXRvc0Zvcm11bGFyaW8ob3B0cylcclxuICAgIHRyeXtcclxuICAgICAgICBhd2FpdCBsb2FkQ1NTKEJPT1RTVFJBUF81XzFfM19TUkMpO1xyXG4gICAgfWNhdGNoKGVycil7XHJcbiAgICAgICAgdGhyb3coZXJyKVxyXG4gICAgfVxyXG4gICAgUmVhY3RET00ucmVuZGVyKFxyXG4gICAgICAgIDxSZW5kZXJQcmluY2lwYWwgc3RvcmU9e3N0b3JlfSBkaXNwYXRjaGVycz17ZGlzcGF0Y2hlcnN9IG1lbnNhamVSZXRvcm5vPXtvcHRzLmZvclBrUmFpej9cIlZvbHZlciBhbCBmb3JtdWxhcmlvXCI6XCJWb2x2ZXIgYSBsYSBob2phIGRlIHJ1dGFcIn0+XHJcbiAgICAgICAgICAgIDxPcGVuZWRUYWJzLz5cclxuICAgICAgICAgICAgPEFwcERtRW5jdS8+XHJcbiAgICAgICAgPC9SZW5kZXJQcmluY2lwYWw+LFxyXG4gICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtYWluX2xheW91dCcpXHJcbiAgICApXHJcbn1cclxuXHJcbmlmKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKXtcclxuICAgIC8vIEB0cy1pZ25vcmUgcGFyYSBoYWNlcmxvXHJcbiAgICB3aW5kb3cuZGVzcGxlZ2FyRm9ybXVsYXJpb0FjdHVhbCA9IGRlc3BsZWdhckZvcm11bGFyaW9BY3R1YWw7XHJcbiAgICAvLyBAdHMtaWdub3JlIHBhcmEgaGFjZXJsb1xyXG4gICAgd2luZG93LmRtUGFudGFsbGFJbmljaWFsU2luQ2FyZ2EgPSBkbVBhbnRhbGxhSW5pY2lhbFNpbkNhcmdhO1xyXG59XHJcblxyXG5cclxuZnVuY3Rpb24gbG9hZEluc3RhbmNlKCl7XHJcbiAgICBpZih0eXBlb2YgQnJvYWRjYXN0Q2hhbm5lbCA9PT0gJ3VuZGVmaW5lZCcpe1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHZhciBiYyA9IG5ldyBCcm9hZGNhc3RDaGFubmVsKCdjb250YWRvcicpO1xyXG4gICAgdmFyIG15SWQ9U3RyaW5nLmZyb21Db2RlUG9pbnQoMTAwK01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSoxMDAwKSkrTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKjEwMCkvLysnLScrbmV3IERhdGUoKS5nZXRUaW1lKCk7XHJcbiAgICBhbGxPcGVuZWRUYWJzW215SWRdPTE7XHJcbiAgICBpbmZvT3BlbmVkVGFicy5teUlkPW15SWQ7XHJcbiAgICB2YXIgZXZlbnQgPSBuZXcgRXZlbnQoJ215LXRhYnMnKTtcclxuICAgIGJjLm9ubWVzc2FnZT1mdW5jdGlvbihldil7XHJcbiAgICAgICAgaWYoZXYuZGF0YS5xdWU9PSdzb3knKXtcclxuICAgICAgICAgICAgaWYoIWFsbE9wZW5lZFRhYnNbZXYuZGF0YS5pZF0pe1xyXG4gICAgICAgICAgICAgICAgYWxsT3BlbmVkVGFic1tldi5kYXRhLmlkXT0wO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGFsbE9wZW5lZFRhYnNbZXYuZGF0YS5pZF0rKztcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYoZXYuZGF0YS5xdWU9PSd1bmxvYWQnKXtcclxuICAgICAgICAgICAgZGVsZXRlIGFsbE9wZW5lZFRhYnNbZXYuZGF0YS5pZF07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKGV2LmRhdGEucXVlPT0nbG9hZCcpe1xyXG4gICAgICAgICAgICBhbGxPcGVuZWRUYWJzW2V2LmRhdGEuaWRdPTE7XHJcbiAgICAgICAgICAgIGJjLnBvc3RNZXNzYWdlKHtxdWU6J3NveScsaWQ6bXlJZH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpbmZvT3BlbmVkVGFicy5vdGhlclRhYnNOYW1lcz1saWtlQXIoYWxsT3BlbmVkVGFicykuZmlsdGVyKChfLGlkKT0+aWQhPW15SWQpLmpvaW4oJywnKTtcclxuICAgICAgICB3aW5kb3cuZGlzcGF0Y2hFdmVudChldmVudCk7XHJcbiAgICB9O1xyXG4gICAgYmMucG9zdE1lc3NhZ2Uoe3F1ZTonbG9hZCcsaWQ6bXlJZH0pO1xyXG4gICAgd2luZG93LmRpc3BhdGNoRXZlbnQoZXZlbnQpO1xyXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3VubG9hZCcsZnVuY3Rpb24oKXtcclxuICAgICAgICBiYy5wb3N0TWVzc2FnZSh7cXVlOid1bmxvYWQnLGlkOm15SWR9KTtcclxuICAgICAgICB3aW5kb3cuZGlzcGF0Y2hFdmVudChldmVudCk7XHJcbiAgICB9KVxyXG4gICAgLy9tb3N0cmFyUXVpZW5lc1NvbW9zKCk7XHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBzZXRMaWJyZURlc3BsaWVndWUgPSAobGlicmU6TGlicmVEZXNwbGllZ3VlVHlwZSk9PkxpYnJlRGVzcGxpZWd1ZSA9IGxpYnJlXHJcblxyXG5zZXRMaWJyZURlc3BsaWVndWUoKHByb3BzOntcclxuICAgIGtleTpzdHJpbmdcclxuICAgIGNhc2lsbGVybzpMaWJyZVxyXG4gICAgZm9ybXVsYXJpbzpGb3JtdWxhcmlvXHJcbiAgICBmb3JQazpGb3JQa1xyXG59KT0+PGRpdiBrZXk9e3Byb3BzLmtleX0gaWQ9e3Byb3BzLmNhc2lsbGVyby5pZF9jYXNpbGxlcm99PmVzdGUgY2FzaWxsZXJvIGRlYmUgcmVkZWZpbmlyc2UgZW4gbGEgQVBQIGZpbmFsIHkgc3UgdXNvIGVzIGV4Y2x1c2l2byBkZWwgw6FyZWEgaW5mb3Jtw6F0aWNhPC9kaXY+KVxyXG5cclxuc2V0Q2FsY3VsYXJWYXJpYWJsZXMoKHJlc3B1ZXN0YXNSYWl6OlJlc3B1ZXN0YXNSYWl6LCBmb3JQazpGb3JQayk9PntcclxuICAgIHR5cGUgQ29uZmlnUGFkcmUgPSB7XHJcbiAgICAgICAgdWFQZXJzb25hczogSWRVbmlkYWRBbmFsaXNpc1xyXG4gICAgICAgIHZhclNleG9QZXJzb25hOiBJZFZhcmlhYmxlXHJcbiAgICAgICAgdmFyTm9tYnJlUGVyc29uYTogSWRWYXJpYWJsZVxyXG4gICAgICAgIHZhckxvc05vbWJyZXM6IElkVmFyaWFibGVcclxuICAgIH1cclxuICAgIHZhciBlc3RydWN0dXJhID0gZ2V0RXN0cnVjdHVyYSgpO1xyXG4gICAgdmFyIGF1dG9DYXJnYXJQZXJzb25hcyA9IChjb25maWdQYWRyZTogQ29uZmlnUGFkcmUgLHVhUGFkcmVQZXJzb25hczpJZFVuaWRhZEFuYWxpc2lzLCBlc3RydWN0dXJhOkVzdHJ1Y3R1cmEpPT57XHJcbiAgICAgICAgdmFyIGxlZXJOb21icmVzID0gKHJlc3B1ZXN0YXNVQVBhZHJlOlJlc3B1ZXN0YXMsIGNvbmZpZ1BhZHJlOkNvbmZpZ1BhZHJlKT0+e1xyXG4gICAgICAgICAgICBpZighcmVzcHVlc3Rhc1VBUGFkcmVbY29uZmlnUGFkcmUudWFQZXJzb25hc10gfHwgZW1wdHkocmVzcHVlc3Rhc1VBUGFkcmVbY29uZmlnUGFkcmUudWFQZXJzb25hc10pIHx8IHJlc3B1ZXN0YXNVQVBhZHJlW2NvbmZpZ1BhZHJlLnVhUGVyc29uYXNdWzBdW2NvbmZpZ1BhZHJlLnZhclNleG9QZXJzb25hXSA9PSBudWxsKXtcclxuICAgICAgICAgICAgICAgIHZhciBsb3NOb21icmVzID0gcmVzcHVlc3Rhc1VBUGFkcmVbY29uZmlnUGFkcmUudmFyTG9zTm9tYnJlc10gYXMgc3RyaW5nXHJcbiAgICAgICAgICAgICAgICBpZihsb3NOb21icmVzICE9IG51bGwpe1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKCFyZXNwdWVzdGFzVUFQYWRyZVtjb25maWdQYWRyZS51YVBlcnNvbmFzXSl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNVQVBhZHJlW2NvbmZpZ1BhZHJlLnVhUGVyc29uYXNdPVtdO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBsb3NOb21icmVzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5zcGxpdCgnLCcpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoKG5vbWJyZTpzdHJpbmcpPT5ub21icmUudHJpbSgpLmxlbmd0aCA+IDApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5mb3JFYWNoKChub21icmU6c3RyaW5nLCBpOm51bWJlcik9PntcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNVQVBhZHJlW2NvbmZpZ1BhZHJlLnVhUGVyc29uYXNdW2ldID0gcmVzcHVlc3Rhc1VBUGFkcmVbY29uZmlnUGFkcmUudWFQZXJzb25hc11baV0gfHwge307XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwdWVzdGFzVUFQYWRyZVtjb25maWdQYWRyZS51YVBlcnNvbmFzXVtpXVtjb25maWdQYWRyZS52YXJOb21icmVQZXJzb25hXSA9IG5vbWJyZS50cmltKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYoZXN0cnVjdHVyYS51bmlkYWRlc19hbmFsaXNpc1t1YVBhZHJlUGVyc29uYXNdKXtcclxuICAgICAgICAgICAgaWYodWFQYWRyZVBlcnNvbmFzID09ICd2aXZpZW5kYXMnKXtcclxuICAgICAgICAgICAgICAgIGxlZXJOb21icmVzKHJlc3B1ZXN0YXNSYWl6LGNvbmZpZ1BhZHJlKVxyXG4gICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgIGZvcih2YXIgcmVzcHVlc3Rhc1VBUGFkcmUgb2YgaXRlcmF0b3IocmVzcHVlc3Rhc1JhaXpbdWFQYWRyZVBlcnNvbmFzXT8/W10pKXtcclxuICAgICAgICAgICAgICAgICAgICBsZWVyTm9tYnJlcyhyZXNwdWVzdGFzVUFQYWRyZSxjb25maWdQYWRyZSlcclxuICAgICAgICAgICAgICAgIH0gICBcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHZhciB1YXNJdGVyYXI6IHtcclxuICAgICAgICBba2V5IGluIElkVW5pZGFkQW5hbGlzaXNdOkNvbmZpZ1BhZHJlXHJcbiAgICB9OyBcclxuICAgIHZhciBjb25maWdFbmN1IDogQ29uZmlnUGFkcmUgPSB7IFxyXG4gICAgICAgIHVhUGVyc29uYXM6ICdwZXJzb25hcycsXHJcbiAgICAgICAgdmFyU2V4b1BlcnNvbmE6ICdzZXhvJyBhcyBJZFZhcmlhYmxlLFxyXG4gICAgICAgIHZhck5vbWJyZVBlcnNvbmE6ICdub21icmUnIGFzIElkVmFyaWFibGUsXHJcbiAgICAgICAgdmFyTG9zTm9tYnJlczogXCJsb3Nfbm9tYnJlc1wiIGFzIElkVmFyaWFibGVcclxuICAgIH07XHJcbiAgICB2YXIgY29uZmlnU3VwZSA6IENvbmZpZ1BhZHJlID0geyBcclxuICAgICAgICB1YVBlcnNvbmFzOiAncGVyc29uYXNfc3VwJyBhcyBJZFVuaWRhZEFuYWxpc2lzLFxyXG4gICAgICAgIHZhclNleG9QZXJzb25hOiAnc2V4b19zdXAnICBhcyBJZFZhcmlhYmxlLFxyXG4gICAgICAgIHZhck5vbWJyZVBlcnNvbmE6ICdub21icmVfc3VwJyAgYXMgSWRWYXJpYWJsZSxcclxuICAgICAgICB2YXJMb3NOb21icmVzOiBcIm5vbWJyZXNfY29tcG9uZW50ZXNfc3VwXCIgIGFzIElkVmFyaWFibGVcclxuICAgIH07XHJcblxyXG4gICAgaWYoZXN0cnVjdHVyYS5jb25SZWFIb2dhcil7XHJcbiAgICAgICAgdWFzSXRlcmFyID0ge1xyXG4gICAgICAgICAgICBob2dhcmVzOiBjb25maWdFbmN1LFxyXG4gICAgICAgICAgICBbXCJob2dhcmVzX3N1cFwiIGFzIElkVW5pZGFkQW5hbGlzaXNdIDogY29uZmlnU3VwZVxyXG4gICAgICAgIH1cclxuICAgICAgICBsaWtlQXIodWFzSXRlcmFyKS5mb3JFYWNoKChjb25maWdQYWRyZSx1YVBhZHJlKT0+e1xyXG4gICAgICAgICAgICBhdXRvQ2FyZ2FyUGVyc29uYXMoY29uZmlnUGFkcmUsdWFQYWRyZSwgZXN0cnVjdHVyYSlcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgfSlcclxuICAgIH1lbHNle1xyXG4gICAgICAgIHZhciBjb25maWdQYWRyZXM6IENvbmZpZ1BhZHJlW10gPSBbY29uZmlnRW5jdSxjb25maWdTdXBlXTtcclxuICAgICAgICBjb25maWdQYWRyZXMuZm9yRWFjaCgoY29uZmlnUGFkcmUpPT57XHJcbiAgICAgICAgICAgIGF1dG9DYXJnYXJQZXJzb25hcyhjb25maWdQYWRyZSwndml2aWVuZGFzJywgZXN0cnVjdHVyYSlcclxuICAgICAgICB9KSAgICAgICAgXHJcbiAgICB9XHJcbiAgICByZXNwdWVzdGFzUmFpei52ZG9taW5pbz1nZXREYXRvc0J5UGFzcygpLmluZm9ybWFjaW9uSGRyW2ZvclBrLnZpdmllbmRhXS50ZW0uZG9taW5pbztcclxuICAgIC8vVE9ETzogTUVKT1JBUiBFTiBBTEdVTiBNT01FTlRPIEVMIEJPVE9OIExJU1RPXHJcbiAgICBsZXQgdG90YWxIID0gcmVzcHVlc3Rhc1JhaXpbJ3RvdGFsX2gnIGFzIElkVmFyaWFibGVdO1xyXG4gICAgcmVzcHVlc3Rhc1JhaXpbJyRCLkY6UzEnIGFzIElkVmFyaWFibGVdID0gKHJlc3B1ZXN0YXNSYWl6Wydob2dhcmVzJ10gfHwgW10pLmxlbmd0aCA9PSB0b3RhbEg/J29rJzpudWxsO1xyXG4gICAgbGV0IHRvdGFsSHN1cCA9IHJlc3B1ZXN0YXNSYWl6Wyd0b3RhbF9oX3N1cCcgYXMgSWRWYXJpYWJsZV07XHJcbiAgICByZXNwdWVzdGFzUmFpelsnJEIuRjpTMV9TVVAnIGFzIElkVmFyaWFibGVdID0gKHJlc3B1ZXN0YXNSYWl6Wydob2dhcmVzX3N1cCcgYXMgSWRVbmlkYWRBbmFsaXNpc10gfHwgW10pLmxlbmd0aCA9PSB0b3RhbEhzdXA/J29rJzpudWxsO1xyXG59KVxyXG5cclxud2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBmdW5jdGlvbigpe1xyXG4gICAgbG9hZEluc3RhbmNlKClcclxufSlcclxuLy9GSU4gQ09OVFJPTCBQRVNUQcORQVNcclxuXHJcbmZ1bmN0aW9uIGxvYWRDU1MoY3NzVVJMOnN0cmluZywgaWQ/OnN0cmluZyk6UHJvbWlzZTx2b2lkPntcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgoIHJlc29sdmUsIHJlamVjdCApPT57XHJcbiAgICAgICAgdmFyIGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAnbGluaycgKTtcclxuICAgICAgICBsaW5rLnJlbCAgPSAnc3R5bGVzaGVldCc7XHJcbiAgICAgICAgbGluay5ocmVmID0gY3NzVVJMO1xyXG4gICAgICAgIGxpbmsuaWQgPSBpZCB8fCBjc3NVUkw7XHJcbiAgICAgICAgZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZCggbGluayApO1xyXG4gICAgICAgIGxpbmsub25sb2FkID0gKCk9PnsgXHJcbiAgICAgICAgICAgIHJlc29sdmUoKTsgXHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGB0cmFlICR7Y3NzVVJMfWApO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgbGluay5vbmVycm9yPShlcnIpPT57XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdlcnJvciBjYXJnYW5kbyBlbCBlc3RpbG8nLCBlcnIpXHJcbiAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoYHByb2JsZW1hIGNhcmdhbmRvIGVzdGlsbyAke2Nzc1VSTH1gKSlcclxuICAgICAgICB9XHJcbiAgICB9KTtcclxufVxyXG5cclxuZnVuY3Rpb24gcmVtb3ZlQ1NTQnlJZChpZDpzdHJpbmcpe1xyXG4gICAgdmFyIGxpbmtOb2RlID0gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTtcclxuICAgIGxpbmtOb2RlPy5wYXJlbnROb2RlPy5yZW1vdmVDaGlsZChsaW5rTm9kZSk7XHJcbn1cclxuXHJcbmNvbnN0IEJPT1RTVFJBUF81XzFfM19TUkMgPSAnY3NzL2Jvb3RzdHJhcC5taW4uY3NzJzsiXX0=
|