dmencu 0.7.1 → 0.7.3

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.
Files changed (36) hide show
  1. package/dist/client/unlogged/render-formulario.tsx +61 -39
  2. package/dist/client/unlogged/tipos.d.ts +1 -0
  3. package/dist/client/unlogged/tipos.js +1 -1
  4. package/dist/server/server/app-dmencu.js +19 -6
  5. package/dist/server/server/procedures-dmencu.js +5 -5
  6. package/dist/server/server/table-permisos.js +2 -2
  7. package/dist/server/server/table-roles.js +1 -5
  8. package/dist/server/server/table-roles_permisos.js +2 -1
  9. package/dist/server/server/table-tareas_tem.js +2 -2
  10. package/dist/server/server/table-tareas_tem_asignables.d.ts +3 -0
  11. package/dist/server/server/table-tareas_tem_asignables.js +57 -0
  12. package/dist/server/server/table-tareas_tem_fin_campo copy.d.ts +3 -0
  13. package/dist/server/server/table-tareas_tem_fin_campo copy.js +28 -0
  14. package/dist/server/server/table-tareas_tem_ingreso copy.d.ts +3 -0
  15. package/dist/server/server/table-tareas_tem_ingreso copy.js +32 -0
  16. package/dist/server/server/table-tareas_tem_procesamiento copy.d.ts +3 -0
  17. package/dist/server/server/table-tareas_tem_procesamiento copy.js +32 -0
  18. package/dist/server/server/table-tareas_tem_recepcion copy.d.ts +8 -0
  19. package/dist/server/server/table-tareas_tem_recepcion copy.js +82 -0
  20. package/dist/server/server/{table-con_momentos.d.ts → table-tem_asignacion copy.d.ts } +1 -1
  21. package/dist/server/server/table-tem_asignacion copy.js +51 -0
  22. package/dist/server/unlogged/tipos.d.ts +1 -0
  23. package/dist/server/unlogged/tipos.js +1 -1
  24. package/dist/unlogged/unlogged/render-formulario.js +55 -34
  25. package/dist/unlogged/unlogged/render-formulario.tsx +61 -39
  26. package/dist/unlogged/unlogged/tipos.d.ts +1 -0
  27. package/dist/unlogged/unlogged/tipos.js +1 -1
  28. package/install/inicial_update_varcal_por_encuesta.sql +0 -11
  29. package/install/roles.tab +12 -11
  30. package/install/roles_permisos.tab +10 -0
  31. package/install/roles_subordinados.tab +3 -1
  32. package/package.json +1 -1
  33. package/dist/server/server/table-con_momentos.js +0 -34
  34. package/install/con_momentos.tab +0 -7
  35. package/install/controlar_justificacion_inconsistencias.sql +0 -58
  36. package/install/controlar_justificacion_inconsistencias.sql.bak +0 -35
@@ -1450,44 +1450,65 @@ var __rest = (this && this.__rest) || function (s, e) {
1450
1450
  exports.setLibreDespliegue = setLibreDespliegue;
1451
1451
  (0, exports.setLibreDespliegue)((props) => React.createElement("div", { key: props.key, id: props.casillero.id_casillero }, "este casillero debe redefinirse en la APP final y su uso es exclusivo del \u00E1rea inform\u00E1tica"));
1452
1452
  (0, bypass_formulario_1.setCalcularVariables)((respuestasRaiz, forPk) => {
1453
- //TODO GENERALIZAR
1454
- var uasIterar = {
1455
- hogares: {
1456
- uaPersonas: 'personas',
1457
- varSexoPersona: 'sexo',
1458
- varNombrePersona: 'nombre',
1459
- varLosNombres: "los_nombres"
1460
- },
1461
- ["hogares_sup"]: {
1462
- uaPersonas: 'personas_sup',
1463
- varSexoPersona: 'sexo_sup',
1464
- varNombrePersona: 'nombre_sup',
1465
- varLosNombres: "nombres_componentes_sup"
1466
- }
1467
- };
1468
- (0, like_ar_1.strict)(uasIterar).forEach((configHogares, uaHogares) => {
1453
+ var estructura = (0, bypass_formulario_2.getEstructura)();
1454
+ var autoCargarPersonas = (configPadre, uaPadrePersonas, estructura) => {
1469
1455
  var _a;
1470
- var estructura = (0, bypass_formulario_2.getEstructura)();
1471
- if (estructura.unidades_analisis[uaHogares]) {
1472
- for (var respuestasHogar of (0, tipos_1.iterator)((_a = respuestasRaiz[uaHogares]) !== null && _a !== void 0 ? _a : [])) {
1473
- if (!respuestasHogar[configHogares.uaPersonas] || (0, tipos_1.empty)(respuestasHogar[configHogares.uaPersonas]) || respuestasHogar[configHogares.uaPersonas][0][configHogares.varSexoPersona] == null) {
1474
- var losNombres = respuestasHogar[configHogares.varLosNombres];
1475
- if (losNombres != null) {
1476
- if (!respuestasHogar[configHogares.uaPersonas]) {
1477
- respuestasHogar[configHogares.uaPersonas] = [];
1478
- }
1479
- losNombres
1480
- .split(',')
1481
- .filter((nombre) => nombre.trim().length > 0)
1482
- .forEach((nombre, i) => {
1483
- respuestasHogar[configHogares.uaPersonas][i] = respuestasHogar[configHogares.uaPersonas][i] || {};
1484
- respuestasHogar[configHogares.uaPersonas][i][configHogares.varNombrePersona] = nombre.trim();
1485
- });
1456
+ var leerNombres = (respuestasUAPadre, configPadre) => {
1457
+ if (!respuestasUAPadre[configPadre.uaPersonas] || (0, tipos_1.empty)(respuestasUAPadre[configPadre.uaPersonas]) || respuestasUAPadre[configPadre.uaPersonas][0][configPadre.varSexoPersona] == null) {
1458
+ var losNombres = respuestasUAPadre[configPadre.varLosNombres];
1459
+ if (losNombres != null) {
1460
+ if (!respuestasUAPadre[configPadre.uaPersonas]) {
1461
+ respuestasUAPadre[configPadre.uaPersonas] = [];
1486
1462
  }
1463
+ losNombres
1464
+ .split(',')
1465
+ .filter((nombre) => nombre.trim().length > 0)
1466
+ .forEach((nombre, i) => {
1467
+ respuestasUAPadre[configPadre.uaPersonas][i] = respuestasUAPadre[configPadre.uaPersonas][i] || {};
1468
+ respuestasUAPadre[configPadre.uaPersonas][i][configPadre.varNombrePersona] = nombre.trim();
1469
+ });
1470
+ }
1471
+ }
1472
+ };
1473
+ if (estructura.unidades_analisis[uaPadrePersonas]) {
1474
+ if (uaPadrePersonas == 'viviendas') {
1475
+ leerNombres(respuestasRaiz, configPadre);
1476
+ }
1477
+ else {
1478
+ for (var respuestasUAPadre of (0, tipos_1.iterator)((_a = respuestasRaiz[uaPadrePersonas]) !== null && _a !== void 0 ? _a : [])) {
1479
+ leerNombres(respuestasUAPadre, configPadre);
1487
1480
  }
1488
1481
  }
1489
1482
  }
1490
- });
1483
+ };
1484
+ var uasIterar;
1485
+ var configEncu = {
1486
+ uaPersonas: 'personas',
1487
+ varSexoPersona: 'sexo',
1488
+ varNombrePersona: 'nombre',
1489
+ varLosNombres: "los_nombres"
1490
+ };
1491
+ var configSupe = {
1492
+ uaPersonas: 'personas_sup',
1493
+ varSexoPersona: 'sexo_sup',
1494
+ varNombrePersona: 'nombre_sup',
1495
+ varLosNombres: "nombres_componentes_sup"
1496
+ };
1497
+ if (estructura.conReaHogar) {
1498
+ uasIterar = {
1499
+ hogares: configEncu,
1500
+ ["hogares_sup"]: configSupe
1501
+ };
1502
+ (0, like_ar_1.strict)(uasIterar).forEach((configPadre, uaPadre) => {
1503
+ autoCargarPersonas(configPadre, uaPadre, estructura);
1504
+ });
1505
+ }
1506
+ else {
1507
+ var configPadres = [configEncu, configSupe];
1508
+ configPadres.forEach((configPadre) => {
1509
+ autoCargarPersonas(configPadre, 'viviendas', estructura);
1510
+ });
1511
+ }
1491
1512
  respuestasRaiz.vdominio = (0, bypass_formulario_1.getDatosByPass)().informacionHdr[forPk.vivienda].tem.dominio;
1492
1513
  //TODO: MEJORAR EN ALGUN MOMENTO EL BOTON LISTO
1493
1514
  let totalH = respuestasRaiz['total_h'];
@@ -1523,4 +1544,4 @@ var __rest = (this && this.__rest) || function (s, e) {
1523
1544
  }
1524
1545
  const BOOTSTRAP_5_1_3_SRC = 'css/bootstrap.min.css';
1525
1546
  });
1526
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVuZGVyLWZvcm11bGFyaW8uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdW5sb2dnZWQvcmVuZGVyLWZvcm11bGFyaW8udHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBQUEsK0JBQStCO0lBQy9CLHNDQUFzQztJQUN0QyxxREFRMEI7SUFDMUIsbUNBY2lCO0lBQ2pCLDJEQVk0QjtJQUM1Qix5REFJNEI7SUFDNUIsaUNBQTZEO0lBQzdELDZDQUF1RDtJQUN2RCxxQ0FBdUQ7SUFDdkQsK0NBQTZDO0lBQzdDLDJDQUF3QztJQUV4Qyw0Q0FNMkI7SUFJM0IsMkRBYzRCO0lBRTVCLDJDQUF5QztJQUV6QyxNQUFNLGNBQWMsR0FBRyxFQUFFLENBQUM7SUFHMUIsU0FBUyxjQUFjLENBQUMsSUFBZ0IsRUFBRSxXQUE2QztRQUNuRixJQUFHLE9BQU8sSUFBSSxJQUFJLFFBQVE7WUFBRSxPQUFPLFNBQVMsQ0FBQztRQUM3QyxJQUFJLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUMsU0FBUyxDQUFDLENBQUMsT0FBTyxDQUFDLGlCQUFpQixFQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3RFLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBQyxDQUFDLElBQUksRUFBQyxFQUFFLENBQUEsSUFBSSxJQUFJLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUMsQ0FBQyxJQUFJLEVBQUMsRUFBRSxDQUFBLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQztRQUN6RixJQUFHLENBQUMsV0FBVyxJQUFJLElBQUk7WUFBRSxPQUFPLElBQUksQ0FBQztRQUNyQzs7VUFFRTtJQUNOLENBQUM7SUFFRCxNQUFNLFdBQVcsR0FBRyxLQUFLLENBQUMsQ0FBQyxxSkFBcUo7SUFDaEwsZ0lBQWdJO0lBRWhJLE1BQU0sbUJBQW1CLEdBQUcsa0JBQWtCLENBQUM7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QUFDO1lBQ2xDLElBQUksQ0FBQyxNQUFNLEdBQUcsR0FBRSxFQUFFO2dCQUNkLE9BQU8sRUFBRSxDQUFDO2dCQUNWLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxNQUFNLEVBQUUsQ0FBQyxDQUFDO1lBQ2xDLENBQUMsQ0FBQztZQUNGLElBQUksQ0FBQyxPQUFPLEdBQUMsQ0FBQyxHQUFHLEVBQUMsRUFBRTtnQkFDaEIsT0FBTyxDQUFDLEdBQUcsQ0FBQywwQkFBMEIsRUFBRSxHQUFHLENBQUMsQ0FBQTtnQkFDNUMsTUFBTSxDQUFDLElBQUksS0FBSyxDQUFDLDRCQUE0QixNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUE7WUFDM0QsQ0FBQyxDQUFBO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsU0FBUyxhQUFhLENBQUMsRUFBUzs7UUFDNUIsSUFBSSxRQUFRLEdBQUksUUFBUSxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUM1QyxNQUFBLFFBQVEsYUFBUixRQUFRLHVCQUFSLFFBQVEsQ0FBRSxVQUFVLDBDQUFFLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBRUQsTUFBTSxtQkFBbUIsR0FBRyx1QkFBdUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xyXG5pbXBvcnQgKiBhcyBSZWFjdERPTSBmcm9tIFwicmVhY3QtZG9tXCI7XHJcbmltcG9ydCB7ICBcclxuICAgIFJlbmRlclByaW5jaXBhbCwgXHJcbiAgICBhZGFwdGFyVGlwb1ZhckNhc2lsbGVybyxcclxuICAgIElDT04sXHJcbiAgICBmb2N1c1RvSWQsXHJcbiAgICBzY3JvbGxUb1RvcCxcclxuICAgIHNjcm9sbFRvQm90dG9tLFxyXG4gICAgbWF0ZXJpYWxJb0ljb25zU3ZnUGF0aFxyXG59IGZyb20gXCIuL3JlbmRlci1nZW5lcmFsXCI7XHJcbmltcG9ydCB7QmxvcXVlLCBCb3RvbkZvcm11bGFyaW8sIFxyXG4gICAgQ2FzaWxsZXJvQmFzZSwgQ2Fzb1N0YXRlLCBDb25qdW50b1ByZWd1bnRhcywgQ29uc2lzdGVuY2lhLCBcclxuICAgIEVzdGFkb0NhcmdhLCBGaWx0cm8sIEZvclBrLCBGb3JQa1JhaXosIEZvcm11bGFyaW8sIFxyXG4gICAgSWRGb3JtdWxhcmlvLCBJZFByZWd1bnRhLCBJZFRhcmVhLCBJZFZhcmlhYmxlLCBJbmZvRm9ybXVsYXJpbyxcclxuICAgIE1vZG9EZXNwbGllZ3VlLFxyXG4gICAgT3BjaW9uLCBPcGNpb25NdWx0aXBsZSwgUGxhaW5Gb3JQaywgXHJcbiAgICBQcmVndW50YSwgUHJlZ3VudGFDb25PcGNpb25lcywgUHJlZ3VudGFTaW1wbGUsIFxyXG4gICAgUmVzcHVlc3RhcywgUmVzcHVlc3RhTGFzVUEsIFJlc3B1ZXN0YXNSYWl6LCBWYWxvciwgVEVNLCBJZENhcmdhLCBDYXJnYSwgSWRGaW4sIElkVW5pZGFkQW5hbGlzaXMsXHJcbiAgICBNb2RvQWxtYWNlbmFtaWVudG8sXHJcbiAgICB0b1BsYWluRm9yUGssXHJcbiAgICBJZENhc2lsbGVybyxcclxuICAgIFByZWd1bnRhQ29uU2lObyxcclxuICAgIFRleHRvLCBFc3RydWN0dXJhLCBJbmZvcm1hY2lvbkhkciwgRGF0b3NIZHJVYVBwYWwsIENvbmZpZ3VyYWNpb25Tb3J0ZW9Gb3JtdWxhcmlvLCBSZXN1bWVuRXN0YWRvLCBEYXRvc0J5UGFzc1BlcnNpc3RpYmxlcywgSWRPcGVyYXRpdm8sIElkRW5jLCBMaWJyZSwgVW5pZGFkQW5hbGlzaXMsXHJcbiAgICBpdGVyYXRvciwgZW1wdHlcclxufSBmcm9tIFwiLi90aXBvc1wiO1xyXG5pbXBvcnR7IFxyXG4gICAgYWNjaW9uX2FicmlyX2Zvcm11bGFyaW8sXHJcbiAgICBhY2Npb25fYm9ycmFyX2Zvcm11bGFyaW8sXHJcbiAgICBjYWxjdWxhckFjdHVhbEJGLFxyXG4gICAgY2FsY3VsYXJEaXNhYmxlZEJGLFxyXG4gICAgY2FsY3VsYXJQZXJtaXRlQm9ycmFyQkYsXHJcbiAgICBjYWxjdWxhclJlc3VtZW5WaXZpZW5kYSxcclxuICAgIGdldERhdG9zQnlQYXNzLFxyXG4gICAgZ2V0Rm9ybXVsYXJpb3NGb3JJZFZpdmllbmRhLFxyXG4gICAgZ2V0TWFpbkZvcm1Gb3JWaXZpZW5kYSxcclxuICAgIGludGVudGFyQmFja3VwLFxyXG4gICAgc2V0Q2FsY3VsYXJWYXJpYWJsZXNcclxufSBmcm9tIFwiLi9ieXBhc3MtZm9ybXVsYXJpb1wiXHJcbmltcG9ydCB7IGRtVHJhZXJEYXRvc0Zvcm11bGFyaW8sIGRpc3BhdGNoZXJzLCBcclxuICAgIGdvdG9TaW5jcm9uaXphcixcclxuICAgIGdldENhY2hlVmVyc2lvbixcclxuICAgIGdvdG9Db25zaXN0aXIsXHJcbn0gZnJvbSBcIi4vcmVkdXgtZm9ybXVsYXJpb1wiO1xyXG5pbXBvcnQgeyB1c2VTdGF0ZSwgdXNlRWZmZWN0LCB1c2VMYXlvdXRFZmZlY3QgfSBmcm9tIFwicmVhY3RcIjtcclxuaW1wb3J0IHsgdXNlU2VsZWN0b3IsIHVzZURpc3BhdGNoIH0gZnJvbSBcInJlYWN0LXJlZHV4XCI7IFxyXG5pbXBvcnQgeyBzdHJpY3QgYXMgbGlrZUFyLCBiZWluZ0FycmF5IH0gZnJvbSBcImxpa2UtYXJcIjtcclxuaW1wb3J0IHtzbGVlcCwgY29hbGVzY2V9IGZyb20gXCJiZXN0LWdsb2JhbHNcIjtcclxuaW1wb3J0IHsgdW5leHBlY3RlZCB9IGZyb20gXCJjYXN0LWVycm9yXCI7XHJcblxyXG5pbXBvcnQge1xyXG4gICAgQXBwQmFyLCBCdXR0b25Hcm91cCwgQ2lyY3VsYXJQcm9ncmVzcywgQ2hlY2tib3gsIFxyXG4gICAgRGlhbG9nLCBEaWFsb2dBY3Rpb25zLCBEaWFsb2dDb250ZW50LCBEaWFsb2dDb250ZW50VGV4dCwgXHJcbiAgICBEaWFsb2dUaXRsZSwgRGl2aWRlciwgRmFiLCBJY29uQnV0dG9uLFxyXG4gICAgTWVudSwgTWVudUl0ZW0sIFBhcGVyLCBQb3BvdmVyLFxyXG4gICAgVGFibGUsIFRhYmxlQm9keSwgVGFibGVDZWxsLCBUYWJsZUhlYWQsIFRhYmxlUm93LCBUb29sYmFyXHJcbn0gZnJvbSBcIkBtYXRlcmlhbC11aS9jb3JlXCI7XHJcbmltcG9ydCB7IEVzdGFkb1ZhcmlhYmxlLCBGb3JtU3RydWN0dXJlU3RhdGUgfSBmcm9tIFwicm93LXZhbGlkYXRvclwiO1xyXG5pbXBvcnQgeyBDU1NQcm9wZXJ0aWVzIH0gZnJvbSBcIkBtYXRlcmlhbC11aS9jb3JlL3N0eWxlcy93aXRoU3R5bGVzXCI7XHJcblxyXG5pbXBvcnQgeyBcclxuICAgIHJlZ2lzdHJhckVsZW1lbnRvLCBzZXRBdHRyRGlzdGludG8sIHNldFZhbG9yRGlzdGludG8sIGRpc3BhdGNoQnlQYXNzLCBcclxuICAgIGdldERpcnR5LCBnZXRGZWVkYmFja1Jvd1ZhbGlkYXRvcixcclxuICAgIGdldEZ1bmNpb25IYWJpbGl0YXIsIFxyXG4gICAgZ2V0RXN0cnVjdHVyYSwgXHJcbiAgICBkZWZPcGVyYXRpdm8sXHJcbiAgICB2b2xjYWRvSW5pY2lhbEVsZW1lbnRvc1JlZ2lzdHJhZG9zLFxyXG4gICAgbnVtYmVyT3JTdHJpbmdJbmNJZkFycmF5LCBcclxuICAgIGNhbGN1bGFyRWxlbWVudG9FbmZvY2FkbyxcclxuICAgIGFjY2lvbl9yZWdpc3RyYXJfcmVzcHVlc3RhLFxyXG4gICAgYWNjaW9uX2lkX3ByZWd1bnRhLFxyXG4gICAgYWNjaW9uX2FncmVnYXJfZm9ybXVsYXJpbyxcclxuICAgIE5PX0NBTUJJQVJfX1ZFUklGSUNBUl9TSV9FU19ORUNFU0FSSU8sXHJcbiAgICBOT19DQU1CSUFSX19TT0xPX1RSQUVSX1NUQVRVU1xyXG59IGZyb20gXCIuL2J5cGFzcy1mb3JtdWxhcmlvXCJcclxuXHJcbmltcG9ydCB7aHRtbCwgSHRtbFRhZ30gZnJvbSBcImpzLXRvLWh0bWxcIjtcclxuXHJcbmNvbnN0IERFTEFZX1NDUk9MTF8zID0gNTA7XHJcblxyXG5mdW5jdGlvbiBicmVha2VhYmxlVGV4dCh0ZXh0OnN0cmluZ3xudWxsKTpzdHJpbmd8dW5kZWZpbmVkO1xyXG5mdW5jdGlvbiBicmVha2VhYmxlVGV4dCh0ZXh0OnN0cmluZ3xudWxsLCBkaWNjaW9uYXJpbz86e1tjbGF2ZTpzdHJpbmddOlJlYWN0LlJlYWN0Tm9kZX0pe1xyXG4gICAgaWYodHlwZW9mIHRleHQgIT0gXCJzdHJpbmdcIikgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgIHRleHQgPSB0ZXh0LnJlcGxhY2UoL1xcLy9nLFwiL1xcdTIwNjNcIikucmVwbGFjZSgvXFwvXFx1MjA2MyhcXHcpXFxiL2csJy8kMScpO1xyXG4gICAgdGV4dCA9IHRleHQucmVwbGFjZSgvX19fKi9nLCh0b2RvKT0+YFske3RvZG99XWApLnJlcGxhY2UoL1xcQFxcdytcXEAvZywodG9kbyk9PmBbJHt0b2RvfV1gKTtcclxuICAgIGlmKCFkaWNjaW9uYXJpbyB8fCB0cnVlKSByZXR1cm4gdGV4dDtcclxuICAgIC8qXHJcbiAgICByZXR1cm4gPHNwYW4+e3BhcnRlcy5tYXAoKHBhcnRlOnN0cmluZywgaTpudW1iZXIpID0+IDxzcGFuIHN0eWxlPXtpJTI9PTE/e3RleHREZWNvcmF0aW9uOlwidW5kZXJsaW5lXCJ9Ont9fT4ge3BhcnRlK1wiIFwifSA8L3NwYW4+KX08L3NwYW4+XHJcbiAgICAqL1xyXG59XHJcblxyXG5jb25zdCBWRVJfRE9NSU5JTyA9IGZhbHNlOyAvLyBlbCBlbmN1ZXN0YWRvciBubyBuZWNlc2l0YSB2ZXIgZWwgZG9taW5pbyBlbiBjYWRhIGVuY3Vlc3RhIHBvcnF1ZSBlbCBkb21pbmlvIGRlcGVuZGUgZGVsIMOhcmVhIHkgc2UgZGVkdWNlIGRlbCBwcmltZXIgZMOtZ2l0byBkZWwgbsO6bWVybyBkZSBlbmN1ZXN0YVxyXG4vLyBubyBwb25lciBWRVJfRE9NSU5JTyBlbiB0cnVlLCBjYW1iaWFyIHBvciB1bmEgdmFyaWFibGUgcXVlIHNlIGZpamUgc2kgZWwgRE0gZXN0w6EgZW4gbW9kbyBwcnVlYmEgbyBlbiBtb2RvIFwiZGlzZcOxbyBjb25jZXB0dWFsXCJcclxuXHJcbmNvbnN0IElEX0JPVE9OX1ZPTFZFUl9IRFIgPSAnYm90b24tdm9sdmVyLWhkcic7XHJcbmNvbnN0IElEX0JPVE9OX0NFUlJBUiA9ICdib3Rvbi1jZXJyYXItZW5jdWVzdGEnO1xyXG5cclxudmFyIGRlYmVTYWx0YXI6Ym9vbGVhbiA9IGZhbHNlO1xyXG5cclxud2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCAoKT0+e1xyXG4gICAgLypcclxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgKGV2OktleWJvYXJkRXZlbnQpPT57XHJcbiAgICAgICAgZGViZVNhbHRhciA9IGV2LmtleSA9PSAnRW50ZXInIHx8IGV2LmtleUNvZGUgPT0gMTM7XHJcbiAgICB9KVxyXG4gICAgKi9cclxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpPT57XHJcbiAgICAgICAgZGViZVNhbHRhciA9IGZhbHNlO1xyXG4gICAgfSlcclxufSlcclxuXHJcbi8vIC8qXHJcblxyXG50eXBlIENvbW1vbkF0dHJpYnV0ZXMgPSB7Y2xhc3NOYW1lPzpzdHJpbmcsc3R5bGU/OkNTU1Byb3BlcnRpZXMsaWQ/OnN0cmluZywgdGFiSW5kZXg/Om51bWJlcn0gLy8gQ1NTUHJvcGVydGllc1xyXG50eXBlIENvbG9yVmFsdWVzID0gJ3ByaW1hcnknfCdzZWNvbmRhcnknfCdkZWZhdWx0J3wnaW5oZXJpdCdcclxuXHJcbmV4cG9ydCB0eXBlIExpYnJlRGVzcGxpZWd1ZVR5cGUgPSAocHJvcHM6e1xyXG4gICAga2V5OnN0cmluZ1xyXG4gICAgY2FzaWxsZXJvOkxpYnJlXHJcbiAgICBmb3JtdWxhcmlvOkZvcm11bGFyaW9cclxuICAgIGZvclBrOkZvclBrXHJcbn0pPT5KU1guRWxlbWVudDtcclxuXHJcbnZhciBMaWJyZURlc3BsaWVndWU6IExpYnJlRGVzcGxpZWd1ZVR5cGVcclxuXHJcbmNvbnN0IEJ1dHRvbiA9ICh7dmFyaWFudCwgb25DbGljaywgZGlzYWJsZWQsIGNoaWxkcmVuLCBjbGFzc05hbWUsIGNvbG9yLCBzaXplLCBcclxuICAgICAgICBkaXNhYmxlRWxldmF0aW9uLCBkaXNhYmxlRm9jdXNSaXBwbGUsIGRpc2FibGVSaXBwbGUsIFxyXG4gICAgICAgIC4uLm90aGVyXHJcbiAgICB9OntcclxuICAgIHZhcmlhbnQ/OnN0cmluZyxcclxuICAgIGNvbG9yPzpDb2xvclZhbHVlcyxcclxuICAgIG9uQ2xpY2s/OlJlYWN0Lk1vdXNlRXZlbnRIYW5kbGVyPEhUTUxCdXR0b25FbGVtZW50PiwgLy8gIChldmVudDpNb3VzZUV2ZW50LyogPEhUTUxCdXR0b25FbGVtZW50LCBNb3VzZUV2ZW50PiovKT0+dm9pZCxcclxuICAgIGRpc2FibGVkPzpib29sZWFuXHJcbiAgICBjaGlsZHJlbjphbnksXHJcbiAgICBjbGFzc05hbWU/OnN0cmluZyxcclxuICAgIHNpemU/OidzbWFsbCcsXHJcbiAgICBkaXNhYmxlRWxldmF0aW9uPzphbnksIGRpc2FibGVGb2N1c1JpcHBsZT86YW55LCBkaXNhYmxlUmlwcGxlPzphbnksXHJcbn0gJiBDb21tb25BdHRyaWJ1dGVzKT0+PGJ1dHRvbiBcclxuICAgIHsuLi5vdGhlcn1cclxuICAgIGNsYXNzTmFtZT17YGJ0biBidG4ke3ZhcmlhbnQ9PSdjb250YWluZWQnPycnOictJysodmFyaWFudD09J291dGxpbmVkJz8nb3V0bGluZSc6dmFyaWFudCl9LSR7KGNvbG9yPT0nZGVmYXVsdCcgfHwgY29sb3I9PSdpbmhlcml0Jz8nc2Vjb25kYXJ5Jzpjb2xvcj09J3NlY29uZGFyeSc/J2Rhbmdlcic6Y29sb3IpfHwnc2Vjb25kYXJ5J30gJHtjbGFzc05hbWV8fCcnfSAke3NpemU9PSdzbWFsbCc/J2J0bi1zbSc6Jyd9YH1cclxuICAgIGRpc2FibGVkPXtkaXNhYmxlZH1cclxuICAgIG9uQ2xpY2s9e29uQ2xpY2t9XHJcbj57Y2hpbGRyZW59PC9idXR0b24+O1xyXG5cclxuY29uc3QgQnV0dG9uMiA9ICh7dmFyaWFudCwgb25DbGljaywgZGlzYWJsZWQsIGNoaWxkcmVuLCBjbGFzc05hbWUsIGNvbG9yLCBzaXplLCAuLi5vdGhlcn06e1xyXG4gICAgdmFyaWFudD86c3RyaW5nLFxyXG4gICAgY29sb3I/OkNvbG9yVmFsdWVzLFxyXG4gICAgb25DbGljaz86KCk9PnZvaWQsXHJcbiAgICBkaXNhYmxlZD86Ym9vbGVhblxyXG4gICAgY2hpbGRyZW46YW55LFxyXG4gICAgY2xhc3NOYW1lPzpzdHJpbmcsXHJcbiAgICBzaXplPzonc21hbGwnLFxyXG4gICAgJGF0dHJzPzp7fVxyXG59ICYgQ29tbW9uQXR0cmlidXRlcyk9Pmh0bWwuYnV0dG9uKHtcclxuICAgIC4uLm90aGVyLFxyXG4gICAgY2xhc3M6IGBidG4gYnRuJHt2YXJpYW50PT0nY29udGFpbmVkJz8nJzonLScrKHZhcmlhbnQ9PSdvdXRsaW5lZCc/J291dGxpbmUnOnZhcmlhbnQpfS0keyhjb2xvcj09J2RlZmF1bHQnIHx8IGNvbG9yPT0naW5oZXJpdCc/J3NlY29uZGFyeSc6Y29sb3I9PSdzZWNvbmRhcnknPydkYW5nZXInOmNvbG9yKXx8J3NlY29uZGFyeSd9ICR7Y2xhc3NOYW1lfHwnJ30gJHtzaXplPT0nc21hbGwnPydidG4tc20nOicnfWAsXHJcbiAgICBkaXNhYmxlZCxcclxuICAgICRvbjp7Y2xpY2s6b25DbGlja31cclxufSwgY2hpbGRyZW4pO1xyXG5cclxuXHJcbmNvbnN0IFRleHRGaWVsZCA9IChwcm9wczp7XHJcbiAgICBpZDpzdHJpbmcsXHJcbiAgICBkaXNhYmxlZD86Ym9vbGVhbixcclxuICAgIGNsYXNzTmFtZT86c3RyaW5nLFxyXG4gICAgYXV0b0ZvY3VzPzpib29sZWFuLFxyXG4gICAgZnVsbFdpZHRoOmJvb2xlYW5cclxuICAgIGlucHV0UHJvcHM/OmFueSxcclxuICAgIHZhbHVlPzphbnksXHJcbiAgICB0eXBlOmFueSxcclxuICAgIGxhYmVsPzpzdHJpbmcsXHJcbiAgICBlcnJvcj86Ym9vbGVhbixcclxuICAgIGhlbHBlclRleHQ/OnN0cmluZyxcclxuICAgIG11bHRpbGluZT86Ym9vbGVhbixcclxuICAgIG9uQ2hhbmdlPzooZXZlbnQ6YW55KT0+dm9pZCxcclxuICAgIG9uRm9jdXM/OihldmVudDphbnkpPT52b2lkLFxyXG4gICAgb25CbHVyPzooZXZlbnQ6YW55LCB2YWxvcjphbnkpPT52b2lkLFxyXG4gICAgLy8gb25LZXlEb3duPzooZXZlbnQ6S2V5Ym9hcmRFdmVudCk9PnZvaWQgLy8gS2V5Ym9hcmRFdmVudEhhbmRsZXI8SFRNTElucHV0RWxlbWVudD5cclxuICAgIG9uS2V5RG93bj86UmVhY3QuS2V5Ym9hcmRFdmVudEhhbmRsZXI8SFRNTElucHV0RWxlbWVudD5cclxufSk9PjxpbnB1dFxyXG4gICAgaWQ9e3Byb3BzLmlkfVxyXG4gICAgZGlzYWJsZWQ9e3Byb3BzLmRpc2FibGVkfVxyXG4gICAgY2xhc3NOYW1lPXtwcm9wcy5jbGFzc05hbWV9XHJcbiAgICBhdXRvRm9jdXM9e3Byb3BzLmF1dG9Gb2N1c31cclxuICAgIHZhbHVlPXtwcm9wcy52YWx1ZX0gXHJcbiAgICB0eXBlPXtwcm9wcy50eXBlfVxyXG4gICAgb25DaGFuZ2U9e3Byb3BzLm9uQ2hhbmdlfVxyXG4gICAgb25Gb2N1cz17cHJvcHMub25Gb2N1c31cclxuICAgIG9uQmx1cj17KGV2dCk9PnByb3BzLm9uQmx1cj8uKGV2dCwgZXZ0LnRhcmdldC52YWx1ZSl9XHJcbiAgICBvbktleURvd249e3Byb3BzLm9uS2V5RG93bn1cclxuICAgIHBsYWNlaG9sZGVyPXtwcm9wcy5sYWJlbH1cclxuLz47XHJcblxyXG5jb25zdCBUeXBvZ3JhcGh5ID0gKHtjaGlsZHJlbiwgLi4ub3RoZXJzfTp7XHJcbiAgICBjaGlsZHJlbjphbnksXHJcbiAgICBjb21wb25lbnQ/OnN0cmluZ1xyXG4gICAgdmFyaWFudD86J2g2J1xyXG59JkNvbW1vbkF0dHJpYnV0ZXMpPT5SZWFjdC5jcmVhdGVFbGVtZW50KG90aGVycy52YXJpYW50fHxvdGhlcnMuY29tcG9uZW50fHwnZGl2JyxvdGhlcnMsY2hpbGRyZW4pO1xyXG5cclxuZnVuY3Rpb24gR3JpZChwcm9wczp7XHJcbiAgICBjb250YWluZXI/OmJvb2xlYW4sXHJcbiAgICBzcGFjaW5nPzpudW1iZXIsXHJcbiAgICBpdGVtPzpib29sZWFuLFxyXG4gICAgd3JhcD86J3dyYXAnfCdub3dyYXAnLFxyXG4gICAgZGlyZWN0aW9uPzoncm93J3wnY29sdW1uJ1xyXG4gICAgYWxpZ25JdGVtcz86J3N0cmV0Y2gnIHwgJ2ZsZXgtc3RhcnQnIHwgJ2ZsZXgtZW5kJyB8ICdjZW50ZXInIHwgJ2Jhc2VsaW5lJyxcclxuICAgIGNoaWxkcmVuOmFueSxcclxuICAgIHhzPzpudW1iZXIsXHJcbiAgICBzbT86bnVtYmVyLFxyXG59JkNvbW1vbkF0dHJpYnV0ZXMpe1xyXG4gICAgdmFyIHtjb250YWluZXIsIGl0ZW0sIHdyYXAsIGRpcmVjdGlvbiwgYWxpZ25JdGVtcywgY2hpbGRyZW4sIGNsYXNzTmFtZSwgeHMsIHNtLCBzcGFjaW5nLCAuLi5vdGhlcn0gPSBwcm9wcztcclxuICAgIHJldHVybiA8ZGl2XHJcbiAgICB7Li4ub3RoZXJ9XHJcbiAgICBjbGFzc05hbWU9e2Ake2NsYXNzTmFtZXx8Jyd9ICR7eHMhPW51bGw/J2dyaWQteHMtJyt4czonJ30gJHtzbSE9bnVsbD8nZ3JpZC1zbS0nK3NtOicnfWB9XHJcbiAgICBzdHlsZT17Y29udGFpbmVyP3tcclxuICAgICAgICBkaXNwbGF5OidmbGV4JyxcclxuICAgICAgICBmbGV4V3JhcDp3cmFwLFxyXG4gICAgICAgIGZsZXhEaXJlY3Rpb246ZGlyZWN0aW9uLFxyXG4gICAgICAgIGFsaWduSXRlbXM6YWxpZ25JdGVtcyxcclxuICAgICAgICBtYXJnaW46c3BhY2luZyE9bnVsbD9zcGFjaW5nKjgrJ3B4Jzp1bmRlZmluZWRcclxuICAgIH06e1xyXG4gICAgfX1cclxuPntjaGlsZHJlbn08L2Rpdj5cclxufVxyXG5cclxudmFyIHAxMiA9ICdwMTInIGFzIElkVmFyaWFibGU7XHJcbnZhciBzcDIgPSAnc3AyJyBhcyBJZFZhcmlhYmxlO1xyXG52YXIgc3AzID0gJ3NwMycgYXMgSWRWYXJpYWJsZTtcclxudmFyIHNwNCA9ICdzcDQnIGFzIElkVmFyaWFibGU7XHJcbnZhciBzcDUgPSAnc3A1JyBhcyBJZFZhcmlhYmxlO1xyXG5cclxudmFyIGRpY2Npb25hcmlvID0ge31cclxuXHJcbi8qXHJcbi8vIGNvbnN0IHRha2VFbGVtZW50T3JEZWZhdWx0PEssIFQgZXh0ZW5kcyBbSyBpbl0sIEQ+KClcclxuZnVuY3Rpb24gaXNJbjxWLCBUPihrOmtleW9mIFQsIG9iamVjdDpUKTogb2JqZWN0W2tdIGlzIFZ7XHJcbiAgICByZXR1cm4gdHJ1ZVxyXG59XHJcbiovXHJcbmZ1bmN0aW9uIHRha2VFbGVtZW50T3JEZWZhdWx0PFYsSyBleHRlbmRzIHN0cmluZyxLTyBleHRlbmRzIHN0cmluZz4oazpLLCBvYmplY3Q6e1trIGluIEtPXTpWfSwgZGVmYXVsdFZhbHVlOlYpOlZ7XHJcbiAgICByZXR1cm4gayBpbiBvYmplY3QgPyBcclxuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIHBvciBhbGd1bmEgcmF6w7NuIFRTIG5vIHF1aWVyZSBlbnRlbmRlciBxdWUgc2kgayBlc3TDoSBlbiBvYmplY3QsIG9iamVjdFtrXSBleGlzdGVcclxuICAgICAgICBvYmplY3Rba10gXHJcbiAgICA6IGRlZmF1bHRWYWx1ZVxyXG59XHJcblxyXG5mdW5jdGlvbiBEZXNwbGllZ3VlRW5jYWJlemFkbyhwcm9wczp7Y2FzaWxsZXJvOkNhc2lsbGVyb0VuY2FiZXphYmxlLCBsZWVyPzpib29sZWFufSl7XHJcbiAgICBjb25zdCBmb3JQa051bGw9e30gYXMgRm9yUGs7XHJcbiAgICByZXR1cm4gPEVuY2FiZXphZG9EZXNwbGllZ3VlIGNhc2lsbGVybz17cHJvcHMuY2FzaWxsZXJvfSBsZWVyPXtwcm9wcy5sZWVyfSBmb3JQaz17Zm9yUGtOdWxsfS8+O1xyXG59XHJcblxyXG5mdW5jdGlvbiBzdWJpckhhc3RhKGVsZW1lbnRvOkhUTUxFbGVtZW50fG51bGwsIGZ1bjooZWxlbWVudG86SFRNTEVsZW1lbnQpPT5ib29sZWFuKTpIVE1MRWxlbWVudHxudWxse1xyXG4gICAgaWYoZWxlbWVudG8gPT0gbnVsbCkgcmV0dXJuIG51bGw7XHJcbiAgICBpZihmdW4oZWxlbWVudG8pKSByZXR1cm4gZWxlbWVudG87XHJcbiAgICByZXR1cm4gc3ViaXJIYXN0YShlbGVtZW50by5wYXJlbnRFbGVtZW50LCBmdW4pO1xyXG59XHJcblxyXG52YXIgZWxlbWVudG9Db25TZW5uaWFsQm9ycmFyOkhUTUxFbGVtZW50fG51bGwgPSBudWxsO1xyXG5cclxuZnVuY3Rpb24gQm90b25Cb3JyYXIoe2lkLCB2YXJpYWJsZSwgZm9yUGssIHZhbG9yT3BjaW9ufTp7aWQ6c3RyaW5nLCB2YXJpYWJsZTpJZFZhcmlhYmxlLCBmb3JQazpGb3JQaywgdmFsb3JPcGNpb24/OmFueX0pe1xyXG4gICAgdmFyIGhhbmRsZUNsaWNrQm9ycmFyPSgpPT57XHJcbiAgICAgICAgZGlzcGF0Y2hCeVBhc3MoYWNjaW9uX3JlZ2lzdHJhcl9yZXNwdWVzdGEsIHtyZXNwdWVzdGE6bnVsbCwgdmFyaWFibGU6dmFyaWFibGUsIGZvclBrOmZvclBrfSlcclxuICAgIH07XHJcbiAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9XCJib3Rvbi1ib3JyYXJcIj5cclxuICAgICAgICA8QnV0dG9uXHJcbiAgICAgICAgICAgIGlkPXtpZH1cclxuICAgICAgICAgICAgbWktdmFyaWFibGU9e3ZhcmlhYmxlfVxyXG4gICAgICAgICAgICB2YWxvci1vcGNpb249e3ZhbG9yT3BjaW9ufVxyXG4gICAgICAgICAgICB2YXJpYW50PVwib3V0bGluZWRcIlxyXG4gICAgICAgICAgICBjbGFzc05hbWU9XCJib3Rvbi1vcGNpb24gYm90b24tb3BjaW9uLWJvcnJhclwiXHJcbiAgICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZUNsaWNrQm9ycmFyfVxyXG4gICAgICAgID5cclxuICAgICAgICAgICAgPElDT04uRGVsZXRlRm9yZXZlci8+XHJcbiAgICAgICAgPC9CdXR0b24+XHJcbiAgICA8L2Rpdj5cclxufVxyXG5cclxuZnVuY3Rpb24gU2FsdG9EZXNwbGllZ3VlKHtjYXNpbGxlcm8scHJlZmlqb306e2Nhc2lsbGVybzpQcmVndW50YXxPcGNpb258RmlsdHJvLCBwcmVmaWpvPzpzdHJpbmd9KXtcclxuICAgIHJldHVybiBjYXNpbGxlcm8uc2FsdG8/XHJcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJwYXNlXCI+XHJcbiAgICAgICAgICAgIHtwcmVmaWpvPzxzcGFuIGNsYXNzTmFtZT1cInByZWZpam9cIj57cHJlZmlqb30gPC9zcGFuPjpudWxsfVxyXG4gICAgICAgICAgICA8SUNPTi5UcmVuZGluZ0ZsYXQgLz48c3Bhbj57Y2FzaWxsZXJvLnNhbHRvfTwvc3Bhbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDpudWxsXHJcbn1cclxuXHJcbmZ1bmN0aW9uIE9wY2lvbkRlc3BsaWVndWUocHJvcHM6e2Nhc2lsbGVybzpPcGNpb24sIHZhbG9yT3BjaW9uOm51bWJlciwgdmFyaWFibGU6SWRWYXJpYWJsZSwgZm9yUGs6Rm9yUGssIGxlZXI6Ym9vbGVhbiwgY29uQm90b25Cb3JyYXI6Ym9vbGVhbn0pe1xyXG4gICAgY29uc3Qge2Nhc2lsbGVyb30gPSBwcm9wcztcclxuICAgIHZhciBkaXNwYXRjaCA9IHVzZURpc3BhdGNoKCk7XHJcbiAgICB2YXIgc2FsdG9BdXRvbWF0aWNvID0gdXNlU2VsZWN0b3IoKHN0YXRlOkNhc29TdGF0ZSk9PnN0YXRlLm9wY2lvbmVzLnNhbHRvQXV0b21hdGljbyk7XHJcbiAgICB2YXIgaGFuZGxlQ2xpY2s6UmVhY3QuTW91c2VFdmVudEhhbmRsZXI8SFRNTEJ1dHRvbkVsZW1lbnQ+ID0gYXN5bmMgKGV2ZW50KT0+e1xyXG4gICAgICAgIHZhciBjb250YWluZXIgPSBzdWJpckhhc3RhKGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudCwgZWxlbWVudG89PmVsZW1lbnRvLmNsYXNzTGlzdC5jb250YWlucygncHJlZ3VudGEnKSB8fCBlbGVtZW50by5jbGFzc0xpc3QuY29udGFpbnMoJ211bHRpcGxlJykpIHx8IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtYWluX2xheW91dCcpITtcclxuICAgICAgICB2YXIgdGllbmUgPSBjb250YWluZXIuZ2V0QXR0cmlidXRlKCdlc3RveS1ib3JyYW5kbycpO1xyXG4gICAgICAgIGNvbnRhaW5lci5zZXRBdHRyaWJ1dGUoJ2VzdG95LWJvcnJhbmRvJywnTk8nKTtcclxuICAgICAgICBpZihlbGVtZW50b0NvblNlbm5pYWxCb3JyYXIpe1xyXG4gICAgICAgICAgICBlbGVtZW50b0NvblNlbm5pYWxCb3JyYXIuc2V0QXR0cmlidXRlKCdlc3RveS1ib3JyYW5kbycsJ05PJyk7XHJcbiAgICAgICAgICAgIGVsZW1lbnRvQ29uU2VubmlhbEJvcnJhciA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciB7cmVjZW50TW9kaWZpZWQsIHNpZ3VpZW50ZVZhcmlhYmxlfSA9IGRpc3BhdGNoQnlQYXNzKGFjY2lvbl9yZWdpc3RyYXJfcmVzcHVlc3RhLCB7cmVzcHVlc3RhOnByb3BzLnZhbG9yT3BjaW9uLCB2YXJpYWJsZTpwcm9wcy52YXJpYWJsZSwgZm9yUGs6cHJvcHMuZm9yUGt9KTtcclxuICAgICAgICBpZighcmVjZW50TW9kaWZpZWQpe1xyXG4gICAgICAgICAgICBjb250YWluZXIuc2V0QXR0cmlidXRlKCdlc3RveS1ib3JyYW5kbycsdGllbmU9PSdTSSc/J05PJzonU0knKTtcclxuICAgICAgICAgICAgaWYodGllbmUhPSdTSScpe1xyXG4gICAgICAgICAgICAgICAgZWxlbWVudG9Db25TZW5uaWFsQm9ycmFyPWNvbnRhaW5lcjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICBpZihzaWd1aWVudGVWYXJpYWJsZSAmJiBzYWx0b0F1dG9tYXRpY28pe1xyXG4gICAgICAgICAgICAgICAgdmFyIGJvdG9uU3R5bGUgPSAoZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50KT8uc3R5bGU7XHJcbiAgICAgICAgICAgICAgICBpZihib3RvblN0eWxlKSBib3RvblN0eWxlLmNvbG9yID0gJ2dyZWVuJztcclxuICAgICAgICAgICAgICAgIGF3YWl0IHNsZWVwKERFTEFZX1NDUk9MTF8zKTtcclxuICAgICAgICAgICAgICAgIGlmKGJvdG9uU3R5bGUpIGJvdG9uU3R5bGUuY29sb3IgPSAnYmx1ZSc7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCBzbGVlcChERUxBWV9TQ1JPTExfMyk7XHJcbiAgICAgICAgICAgICAgICBpZihib3RvblN0eWxlKSBib3RvblN0eWxlLmNvbG9yID0gJ2dyZWVuJztcclxuICAgICAgICAgICAgICAgIGF3YWl0IHNsZWVwKERFTEFZX1NDUk9MTF8zKTtcclxuICAgICAgICAgICAgICAgIGlmKGJvdG9uU3R5bGUpIGJvdG9uU3R5bGUuY29sb3IgPSAnJztcclxuICAgICAgICAgICAgICAgIC8vQHRzLWlnbm9yZSBhbGd1bm9zIGNhc2lsbGVyb3MgdGllbmVuIGVzcGVjaWFsIHkgb3Ryb3Mgbm9cclxuICAgICAgICAgICAgICAgIChjYXNpbGxlcm8uZXNwZWNpYWw/Lm5vU2Nyb2xsID09IHRydWUpP251bGw6ZW5mb2NhckVsZW1lbnRvRGVWYXJpYWJsZShjYXNpbGxlcm8uZXNwZWNpYWw/LnNjcm9sbFRvID8/IHNpZ3VpZW50ZVZhcmlhYmxlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICByZXR1cm4gPEdyaWQgY2xhc3NOYW1lPVwib3BjaW9uXCI+IFxyXG4gICAgICAgIHtwcm9wcy5jb25Cb3RvbkJvcnJhcj88Qm90b25Cb3JyYXJcclxuICAgICAgICAgICAgaWQ9e2BvcGNpb24tdmFyLSR7cHJvcHMudmFyaWFibGV9LSR7cHJvcHMudmFsb3JPcGNpb259LWJvcnJhcmB9XHJcbiAgICAgICAgICAgIGZvclBrPXtwcm9wcy5mb3JQa31cclxuICAgICAgICAgICAgdmFyaWFibGU9e3Byb3BzLnZhcmlhYmxlfVxyXG4gICAgICAgICAgICB2YWxvck9wY2lvbj17cHJvcHMudmFsb3JPcGNpb259XHJcbiAgICAgICAgICAgIC8+Om51bGx9XHJcbiAgICAgICAgPEJ1dHRvbiBcclxuICAgICAgICAgICAgaWQ9e2BvcGNpb24tdmFyLSR7cHJvcHMudmFyaWFibGV9LSR7cHJvcHMudmFsb3JPcGNpb259YH1cclxuICAgICAgICAgICAgbWktdmFyaWFibGU9e3Byb3BzLnZhcmlhYmxlfVxyXG4gICAgICAgICAgICB2YWxvci1vcGNpb249e3Byb3BzLnZhbG9yT3BjaW9ufVxyXG4gICAgICAgICAgICB2YXJpYW50PVwib3V0bGluZWRcIlxyXG4gICAgICAgICAgICBjbGFzc05hbWU9XCJib3Rvbi1vcGNpb24gYm90b24tb3BjaW9uLXNlbGVjY2lvblwiXHJcbiAgICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZUNsaWNrfVxyXG4gICAgICAgICAgICB0YWJJbmRleD17LTF9XHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgICA8R3JpZCBjb250YWluZXIgd3JhcD1cIm5vd3JhcFwiPlxyXG4gICAgICAgICAgICAgICAgPEdyaWQgY2xhc3NOYW1lPVwiaWRcIj5cclxuICAgICAgICAgICAgICAgICAgICB7Y2FzaWxsZXJvLnZlcl9pZCB8fCBjYXNpbGxlcm8uY2FzaWxsZXJvfVxyXG4gICAgICAgICAgICAgICAgPC9HcmlkPlxyXG4gICAgICAgICAgICAgICAgPEdyaWQgY2xhc3NOYW1lPVwib3BjaW9uLXRleHRvXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPFR5cG9ncmFwaHkgZGViZS1sZWVyPXtjYXNpbGxlcm8ubGVlcj8nU0knOmNhc2lsbGVyby5sZWVyPT09ZmFsc2U/J05PJzpwcm9wcy5sZWVyPydTSSc6J05PJ30+e2JyZWFrZWFibGVUZXh0KGNhc2lsbGVyby5ub21icmUpfTwvVHlwb2dyYXBoeT5cclxuICAgICAgICAgICAgICAgICAgICB7Y2FzaWxsZXJvLmFjbGFyYWNpb24/XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxUeXBvZ3JhcGh5IGNsYXNzTmFtZT0nYWNsYXJhY2lvbic+e2JyZWFrZWFibGVUZXh0KGNhc2lsbGVyby5hY2xhcmFjaW9uKX08L1R5cG9ncmFwaHk+XHJcbiAgICAgICAgICAgICAgICAgICAgOm51bGx9XHJcbiAgICAgICAgICAgICAgICA8L0dyaWQ+XHJcbiAgICAgICAgICAgIDwvR3JpZD5cclxuICAgICAgICA8L0J1dHRvbj5cclxuICAgICAgICA8U2FsdG9EZXNwbGllZ3VlIGNhc2lsbGVybz17Y2FzaWxsZXJvfS8+XHJcbiAgICA8L0dyaWQ+XHJcbn1cclxuaW50ZXJmYWNlIEljYXNpbGxlcm9Db25PcGNpb25lc3tcclxuICAgIHZhcl9uYW1lOklkVmFyaWFibGUsXHJcbiAgICBkZXNwbGllZ3VlQ29udGVuaWRvOid2ZXJ0aWNhbCd8J2hvcml6b250YWwnfG51bGwsXHJcbiAgICBjYXNpbGxlcm9zOk9wY2lvbltdXHJcbn1cclxuXHJcblxyXG5mdW5jdGlvbiBTaU5vRGVzcGxpZWd1ZShwcm9wczp7Y2FzaWxsZXJvQ29uT3BjaW9uZXM6SWNhc2lsbGVyb0Nvbk9wY2lvbmVzLCBmb3JQazpGb3JQaywgZGVzcGxpZWd1ZUNvbnRlbmlkbzondmVydGljYWwnfCdob3Jpem9udGFsJ30pe1xyXG4gICAgcmV0dXJuIDxPcGNpb25lc0Rlc3BsaWVndWUgXHJcbiAgICAgICAgY2FzaWxsZXJvQ29uT3BjaW9uZXM9e3Byb3BzLmNhc2lsbGVyb0Nvbk9wY2lvbmVzfSBcclxuICAgICAgICBmb3JQaz17cHJvcHMuZm9yUGt9IFxyXG4gICAgICAgIGxlZXI9e2ZhbHNlfVxyXG4gICAgICAgIGRlc3BsaWVndWVDb250ZW5pZG89e3Byb3BzLmRlc3BsaWVndWVDb250ZW5pZG99XHJcbiAgICAvPlxyXG59XHJcblxyXG5mdW5jdGlvbiByZWdpc3RyYWRvckRlVmFyaWFibGUocHJlZ3VudGE6UHJlZ3VudGF8T3BjaW9uTXVsdGlwbGV8Q29uanVudG9QcmVndW50YXMpe1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgICByZXNwdWVzdGFzOlJlc3B1ZXN0YXMsIGZlZWRiYWNrRm9ybTogRm9ybVN0cnVjdHVyZVN0YXRlPElkVmFyaWFibGUsIFZhbG9yLCBJZEZpbj4sIGVsZW1lbnRvOkhUTUxEaXZFbGVtZW50XHJcbiAgICApPT57XHJcbiAgICAgICAgdmFyIHZhbG9yQWN0dWFsID0gcHJlZ3VudGEudmFyX25hbWUgPT0gbnVsbCA/IG51bGwgOiByZXNwdWVzdGFzW3ByZWd1bnRhLnZhcl9uYW1lXTtcclxuICAgICAgICB2YXIgZmVlZGJhY2tSb3cgPSBmZWVkYmFja0Zvcm0uZmVlZGJhY2s7XHJcbiAgICAgICAgdmFyIGZlZWRiYWNrVmFyID0gcHJlZ3VudGEudmFyX25hbWUgPT0gbnVsbCA/IG51bGwgOiBmZWVkYmFja1Jvd1twcmVndW50YS52YXJfbmFtZV07XHJcbiAgICAgICAgdmFyIHRpZW5lVmFsb3I9dmFsb3JBY3R1YWwhPW51bGwgJiYgZmVlZGJhY2tWYXIhPW51bGw/KGZlZWRiYWNrVmFyLmNvblByb2JsZW1hPydpbnZhbGlkbyc6J3ZhbGlkbycpOidOTyc7XHJcbiAgICAgICAgdmFyIGVzdGFkbzpFc3RhZG9WYXJpYWJsZTsgXHJcbiAgICAgICAgaWYocHJlZ3VudGEudGlwb3Zhcil7XHJcbiAgICAgICAgICAgIGVzdGFkbz1mZWVkYmFja1Zhcj8uZXN0YWRvITtcclxuICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgdmFyIGZlZWRiYWNrTXVsdGkgPSBwcmVndW50YS5jYXNpbGxlcm9zLmZpbHRlcihjPT5jLnZhcl9uYW1lIT1udWxsKS5yZWR1Y2UoKHB2LCBvbSk9PntcclxuICAgICAgICAgICAgICAgIHZhciBmYj1mZWVkYmFja1Jvdz8uW29tLnZhcl9uYW1lIV0hXHJcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRpZW5lQWN0dWFsOiBwdi50aWVuZUFjdHVhbCB8fCBmYi5lc3RhZG89PSdhY3R1YWwnLFxyXG4gICAgICAgICAgICAgICAgICAgIGVzdGFTYWx0ZWFkYTogcHYuZXN0YVNhbHRlYWRhICYmIChmYi5lc3RhZG89PSdzYWx0ZWFkYScgfHwgZmIuZXN0YWRvPT0nZnVlcmFfZGVfZmx1am9fcG9yX3NhbHRvJylcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSwge3RpZW5lQWN0dWFsOmZhbHNlLCBlc3RhU2FsdGVhZGE6dHJ1ZX0pO1xyXG4gICAgICAgICAgICBlc3RhZG89ZmVlZGJhY2tNdWx0aS50aWVuZUFjdHVhbD8nYWN0dWFsJzpmZWVkYmFja011bHRpLmVzdGFTYWx0ZWFkYT8nc2FsdGVhZGEnOid0b2RhdmlhX25vJ1xyXG4gICAgICAgIH1cclxuICAgICAgICBzZXRBdHRyRGlzdGludG8oZWxlbWVudG8sICdudWVzdHJvLXZhbGlkYXRvcicsIGVzdGFkbyk7XHJcbiAgICAgICAgc2V0QXR0ckRpc3RpbnRvKGVsZW1lbnRvLCAndGllbmUtdmFsb3InLCB0aWVuZVZhbG9yKTtcclxuICAgICAgICBzZXRBdHRyRGlzdGludG8oZWxlbWVudG8sICdlc3RhLWluaGFiaWxpdGFkYScsIGZlZWRiYWNrVmFyPy5pbmhhYmlsaXRhZGE/J1NJJzonTk8nKTtcclxuICAgICAgICBpZihwcmVndW50YS52YXJfbmFtZSl7XHJcbiAgICAgICAgICAgIHZhciBvcGNpb25lczpIVE1MQnV0dG9uRWxlbWVudFtdID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZWxlbWVudG8ucXVlcnlTZWxlY3RvckFsbChgLmJvdG9uLW9wY2lvblttaS12YXJpYWJsZT1cIiR7cHJlZ3VudGEudmFyX25hbWV9XCJdYCksMCk7XHJcbiAgICAgICAgICAgIHZhciBlbGVtZW50b09wY2lvbjpIVE1MQnV0dG9uRWxlbWVudDtcclxuICAgICAgICAgICAgZm9yKGVsZW1lbnRvT3BjaW9uIG9mIG9wY2lvbmVzKXtcclxuICAgICAgICAgICAgICAgIHZhciB2YWxvck9wY2lvbiA9IGVsZW1lbnRvT3BjaW9uLmdldEF0dHJpYnV0ZSgndmFsb3Itb3BjaW9uJyk7XHJcbiAgICAgICAgICAgICAgICBzZXRBdHRyRGlzdGludG8oZWxlbWVudG9PcGNpb24sICdvcGNpb24tc2VsZWNjaW9uYWRhJywgdmFsb3JPcGNpb24gPT0gdmFsb3JBY3R1YWwgPyBcIlNJXCI6IFwiTk9cIilcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YXIgZWxlbWVudG9zSW5wdXQ6SFRNTElucHV0RWxlbWVudFtdID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZWxlbWVudG8ucXVlcnlTZWxlY3RvckFsbCgnLnZhcmlhYmxlJykpO1xyXG4gICAgICAgICAgICB2YXIgZWxlbWVudG9JbnB1dDpIVE1MSW5wdXRFbGVtZW50O1xyXG4gICAgICAgICAgICBmb3IoZWxlbWVudG9JbnB1dCBvZiBlbGVtZW50b3NJbnB1dCl7XHJcbiAgICAgICAgICAgICAgICBzZXRWYWxvckRpc3RpbnRvKGVsZW1lbnRvSW5wdXQsICd2YWx1ZScsIHZhbG9yQWN0dWFsID09IG51bGwgPyAnJyA6IHZhbG9yQWN0dWFsLnRvU3RyaW5nKCkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciBib3Rvbk5zTmMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcIm5zbmMtcHJlZ3VudGEtXCIrcHJlZ3VudGEudmFyX25hbWUpITtcclxuICAgICAgICAgICAgc2V0QXR0ckRpc3RpbnRvKGJvdG9uTnNOYywgJ29wY2lvbi1zZWxlY2Npb25hZGEnLCB2YWxvckFjdHVhbCA9PSAocHJlZ3VudGEudmFsb3JfbnNfbmMgPz8gLTkpID8gXCJTSVwiIDogXCJOT1wiKVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxuZnVuY3Rpb24gT3BjaW9uTXVsdGlwbGVEZXNwbGllZ3VlKHByb3BzOntvcGNpb25NOk9wY2lvbk11bHRpcGxlLCBmb3JQazpGb3JQa30pe1xyXG4gICAgY29uc3Qge29wY2lvbk19ID0gcHJvcHM7XHJcbiAgICB2YXIgaWQgPSBgb3BjaW9uTS0ke29wY2lvbk0uaWRfY2FzaWxsZXJvfWA7XHJcbiAgICByZWdpc3RyYXJFbGVtZW50byh7XHJcbiAgICAgICAgaWQsIFxyXG4gICAgICAgIGRpcmVjdDp0cnVlLCBcclxuICAgICAgICBmdW46IHJlZ2lzdHJhZG9yRGVWYXJpYWJsZShvcGNpb25NKVxyXG4gICAgfSlcclxuICAgIHJldHVybiA8RGVzcGxlZ2FyQ2FzaWxsZXJvIFxyXG4gICAgICAgIGlkPXtpZH1cclxuICAgICAgICBjYXNpbGxlcm89e29wY2lvbk19XHJcbiAgICAgICAgZGVzcGxpZWd1ZUVuY2FiZXphZG89J2xhdGVyYWwnXHJcbiAgICA+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+e1xyXG4gICAgdmFyIGZvcm1zVml2aWVuZGEgPSBnZXRGb3JtdWxhcmlvc0ZvcklkVml2aWVuZGEoZm9yUGtQYWRyZS52aXZpZW5kYSk7XHJcbiAgICB2YXIgdWFEZWYgPSBlc3RydWN0dXJhLnVuaWRhZGVzX2FuYWxpc2lzW3VuaWRhZF9hbmFsaXNpc107XHJcbiAgICB2YXIgYXJyYXlFc3RydWN0dXJhRm9ybXVsYXJpb3MgPSAobGlrZUFyKGVzdHJ1Y3R1cmEuZm9ybXVsYXJpb3MpKS5hcnJheSgpO1xyXG4gICAgdmFyIHggPSBsaWtlQXIodWFEZWYuaGlqYXMpLmZpbHRlcih1YUhpamE9PlxyXG4gICAgICAgICAgICBmb3Jtc1ZpdmllbmRhLmluY2x1ZGVzKFxyXG4gICAgICAgICAgICAgICAgYXJyYXlFc3RydWN0dXJhRm9ybXVsYXJpb3MuZmluZCgoaW5mb0Zvcm11bGFyaW8pPT5cclxuICAgICAgICAgICAgICAgICAgICBpbmZvRm9ybXVsYXJpby5jYXNpbGxlcm9zLnVuaWRhZF9hbmFsaXNpcyA9PSB1YUhpamE/LnVuaWRhZF9hbmFsaXNpcylcclxuICAgICAgICAgICAgICAgID8uY2FzaWxsZXJvcy5pZF9jYXNpbGxlcm8gYXMgSWRGb3JtdWxhcmlvXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICApLm1hcCh1YUhpamE9PihcclxuICAgICAgICB1YUhpamEgPT0gbnVsbCA/IG51bGwgOlxyXG4gICAgICAgIGh0bWwuZGl2KHtjbGFzczondWEtaGlqYXMnfSxbXHJcbiAgICAgICAgICAgIGh0bWwuZGl2KHVhSGlqYS51bmlkYWRfYW5hbGlzaXMpLFxyXG4gICAgICAgICAgICBodG1sLmRpdihcclxuICAgICAgICAgICAgICAgIGxpa2VBcihyW3VhSGlqYS51bmlkYWRfYW5hbGlzaXNdfHxbXSkubWFwKChyZXNwdWVzdGFzSGlqYSwgaSk9PntcclxuICAgICAgICAgICAgICAgICAgICB2YXIgbnVtID0gTnVtYmVyKGkpKzFcclxuICAgICAgICAgICAgICAgICAgICB2YXIgZm9yUGtIaWphUGFyY2lhbCA9IHsuLi5mb3JQa1BhZHJlLCBbdWFIaWphLnBrX2FncmVnYWRhXTogbnVtfTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgY29uZmlnU29ydGVvRm9ybXVsYXJpbyA9IGVzdHJ1Y3R1cmEuY29uZmlnU29ydGVvP2VzdHJ1Y3R1cmEuY29uZmlnU29ydGVvW2dldE1haW5Gb3JtRm9yVml2aWVuZGEoZm9yUGtQYWRyZS52aXZpZW5kYSEpXTpudWxsXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGh0bWwuZGl2KHtjbGFzczonbnVtZXJhZG9yLXVhJ30sIFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaHRtbC5kaXYoe2NsYXNzOidib3RvbmVzLXVhJ30sW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaHRtbC5kaXYoe2NsYXNzOidudW1lcm8tdWEnfSxudW0udG9TdHJpbmcoKSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5saWtlQXIoZXN0cnVjdHVyYS5mb3JtdWxhcmlvcylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoZm9ybURlZj0+Zm9ybURlZi5jYXNpbGxlcm9zLnVuaWRhZF9hbmFsaXNpcyA9PSB1YUhpamEudW5pZGFkX2FuYWxpc2lzIClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5tYXAoKF9mb3JtRGVmLCBmb3JtdWxhcmlvKT0+e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmb3JQayA9IHsuLi5mb3JQa0hpamFQYXJjaWFsLCBmb3JtdWxhcmlvfTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZmVlZGJhY2tGb3JtID0gZmVlZGJhY2tBbGxbdG9QbGFpbkZvclBrKGZvclBrKV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZlZWRiYWNrRm9ybSA/IGh0bWwuZGl2KHt9LFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaHRtbC5idXR0b24oKHVhSGlqYSEpLnBrX2FncmVnYWRhK1wiIG9rOiBcIisoTnVtYmVyKGkpKzEpKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm90b25Gb3JtdWxhcmlvQ29uUmVzdW1lbihcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JQaywgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtLCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3R1YWw6IHRydWUgfHwgY2FsY3VsYXJBY3R1YWxCRihjb25maWdTb3J0ZW9Gb3JtdWxhcmlvLCBudW0sIG51bGwsIGZvcm11bGFyaW8sIHIpLCAvL1JFVklTQVIgdHJ1ZSBwYXJhIHF1ZSBubyBzZSBncmlzZW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2aW86ZmFsc2UsIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkOiBjYWxjdWxhckRpc2FibGVkQkYoY29uZmlnU29ydGVvRm9ybXVsYXJpbywgbnVtLCBmb3JtdWxhcmlvLCByKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZlZWRiYWNrRm9ybSwgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2Rlc3BsaWVndWVPY3VsdGE6ZmFsc2UsIGV4cHJlc2lvbl9oYWJpbGl0YXJfanM6JycsIG5vbWJyZTpmb3JtdWxhcmlvLCBhY2xhcmFjaW9uOm51bGwsIHNhbHRvOmZvcm11bGFyaW99LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yUGtQYWRyZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYm90b24taXItcmVzdW1lbi1mb3JtdWxhcmlvXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlc3RydWN0dXJhLmZvcm11bGFyaW9zW2Zvcm11bGFyaW9dLmNhc2lsbGVyb3NcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pIDogbnVsbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkuYXJyYXkoKS5tYXAoeD0+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+XHJcbiAgICAgICAgKi9cclxuICAgIF0pLmNyZWF0ZSgpXHJcbn1cclxuXHJcblxyXG5mdW5jdGlvbiBCb3RvbkZvcm11bGFyaW9EZXNwbGllZ3VlKHByb3BzOntjYXNpbGxlcm86Qm90b25Gb3JtdWxhcmlvLCBmb3JtdWxhcmlvOkZvcm11bGFyaW8sIGZvclBrOkZvclBrfSl7XHJcbiAgICB2YXIge2Nhc2lsbGVybywgZm9yUGt9ID0gcHJvcHM7XHJcbiAgICB2YXIgaGFiaWxpdGFkb3IgPSBjYXNpbGxlcm8uZXhwcmVzaW9uX2hhYmlsaXRhcl9qcz9nZXRGdW5jaW9uSGFiaWxpdGFyKGNhc2lsbGVyby5leHByZXNpb25faGFiaWxpdGFyX2pzKTooKT0+dHJ1ZTtcclxuICAgIHZhciB7b3BjaW9uZXN9ID0gdXNlU2VsZWN0b3JWaXZpZW5kYShmb3JQayk7XHJcbiAgICAvL3ZhciBpZEZvcm11bGFyaW9EZXN0aW5vID0gJ0Y6JytjYXNpbGxlcm8uc2FsdG8hIGFzIElkRm9ybXVsYXJpbzsgICAvL29yaWdpbmFsXHJcbiAgICB2YXIgYXJtb05vbVNhbHRvPWNhc2lsbGVyby5zYWx0bz8uc3Vic3RyaW5nKDAsMik9PSdGOic/Y2FzaWxsZXJvLnNhbHRvLnNsaWNlKDIpOmNhc2lsbGVyby5zYWx0bztcclxuICAgIC8vY29uc29sZS5sb2coJ0JvdG9uRm9ybXVsYXJpb0Rlc3BsaWVndWUgYXJtb05vbVNhbHRvICcgK2FybW9Ob21TYWx0byk7XHJcbiAgICB2YXIgaWRGb3JtdWxhcmlvRGVzdGlubyA9ICdGOicrYXJtb05vbVNhbHRvISBhcyBJZEZvcm11bGFyaW87XHJcbiAgICB2YXIgZXN0cnVjdHVyYSA9IGdldEVzdHJ1Y3R1cmEoKTtcclxuICAgIHZhciB7Zm9ybXVsYXJpb0FBYnJpcn0gPSB1c2VTZWxlY3RvcigoX3N0YXRlOkNhc29TdGF0ZSk9Pih7XHJcbiAgICAgICAgZm9ybXVsYXJpb0FBYnJpcjplc3RydWN0dXJhLmZvcm11bGFyaW9zW2lkRm9ybXVsYXJpb0Rlc3Rpbm9dLmNhc2lsbGVyb3MsXHJcbiAgICB9KSk7XHJcbiAgICB2YXIgc3VmaWpvSWRFbGVtZW50byA9IHRvUGxhaW5Gb3JQayhmb3JQayk7XHJcbiAgICAvKlxyXG4gICAgcmVnaXN0cmFyRWxlbWVudG8oe1xyXG4gICAgICAgIGlkOmBkaXYtYm90b24tZm9ybXVsYXJpby0ke3N1Zmlqb0lkRWxlbWVudG99YCwgXHJcbiAgICAgICAgYXR0cjonZXN0YS1pbmhhYmlsaXRhZGEnLCBcclxuICAgICAgICAvLyBmdW46IChyOlJlc3B1ZXN0YXMpPT5oYWJpbGl0YWRvcihyKT8nU0knOidOTydcclxuICAgICAgICBmdW46IChfcjpSZXNwdWVzdGFzKT0+J05PJ1xyXG4gICAgfSk7XHJcbiAgICByZWdpc3RyYXJFbGVtZW50bzxIVE1MQnV0dG9uRWxlbWVudD4oe1xyXG4gICAgICAgIGlkOmBib3Rvbi1mb3JtdWxhcmlvLSR7c3VmaWpvSWRFbGVtZW50b31gLCBcclxuICAgICAgICBwcm9wOidkaXNhYmxlZCcsIFxyXG4gICAgICAgIC8vIGZ1bjogKHI6UmVzcHVlc3Rhcyk9PiFoYWJpbGl0YWRvcihyKVxyXG4gICAgICAgIGZ1bjogKF9yOlJlc3B1ZXN0YXMpPT5mYWxzZVxyXG4gICAgfSk7XHJcbiAgICAqL1xyXG4gICAgdmFyIGRpc3BhdGNoID0gdXNlRGlzcGF0Y2goKTtcclxuICAgIHZhciBbY29uZmlybWFyRm9yemFySXIsIHNldENvbmZpcm1hckZvcnphcklyXSA9IHVzZVN0YXRlPERlZmluaWNpb25Gb3JtdWxhcmlvQWJyaXJ8ZmFsc2V8bnVsbD4obnVsbCk7XHJcbiAgICB2YXIgbXVsdGlwbGVGb3JtdWxhcmlvcz1mb3JtdWxhcmlvQUFicmlyLnVuaWRhZF9hbmFsaXNpcyAhPSBwcm9wcy5mb3JtdWxhcmlvLnVuaWRhZF9hbmFsaXNpcztcclxuICAgIHZhciBudWV2b0NhbXBvUGsgPSBkZWZPcGVyYXRpdm8uZGVmVUFbZm9ybXVsYXJpb0FBYnJpci51bmlkYWRfYW5hbGlzaXNdLnBrO1xyXG4gICAvLyB2YXIgdmFyX25hbWU9JyRCLicrY2FzaWxsZXJvLnNhbHRvOyAvL29yaWdpbmFsXHJcbiAgICB2YXIgdmFyX25hbWU9JyRCLkY6Jythcm1vTm9tU2FsdG87XHJcbiAgICB2YXIgaWRTZWNjaW9uPWBzZWNjaW9uLWJvdG9uLWZvcm11bGFyaW8tJHt2YXJfbmFtZX1gO1xyXG4gICAgdmFyIGlkQnV0dG9uPWBzcGVjaWFsLWJ1dHRvbi0ke2lkU2VjY2lvbn1gO1xyXG4gICAgcmVnaXN0cmFyRWxlbWVudG88SFRNTERpdkVsZW1lbnQ+KHtcclxuICAgICAgICBpZDppZFNlY2Npb24sIFxyXG4gICAgICAgIGRpcmVjdDp0cnVlLFxyXG4gICAgICAgIGZ1bjogKHJlc3B1ZXN0YXNBdW1lbnRhZGFzOlJlc3B1ZXN0YXMsIGZlZWRiYWNrUm93OiBGb3JtU3RydWN0dXJlU3RhdGU8SWRWYXJpYWJsZSwgVmFsb3IsIElkRmluPiwgZGl2OkhUTUxEaXZFbGVtZW50LFxyXG4gICAgICAgICAgICAgICAgZmVlZGJhY2tBbGw6e1xyXG4gICAgICAgICAgICAgICAgICAgIFtmb3JtdWxhcmlvIGluIFBsYWluRm9yUGtdOkZvcm1TdHJ1Y3R1cmVTdGF0ZTxJZFZhcmlhYmxlLCBWYWxvciwgSWRGaW4+IC8vIHJlc3VsdGFkbyBkZWwgcm93VmFsaWRhdG9yIHBhcmEgZXN0YWRvLmZvclBrXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICk9PntcclxuICAgICAgICAgICAgdHJ5e1xyXG4gICAgICAgICAgICAgICAgdmFyIGxpc3RhRGVCb3RvbmVzQWJyaXI6RGVmaW5pY2lvbkZvcm11bGFyaW9BYnJpcltdID0gW107XHJcbiAgICAgICAgICAgICAgIC8vIHZhciBlc1ZhckFjdHVhbCA9IGZlZWRiYWNrUm93LmFjdHVhbCA9PSAnJEIuRjonK2Nhc2lsbGVyby5zYWx0bzsgIC8vb3JpZ2luYWxcclxuICAgICAgICAgICAgICAgIHZhciBlc1ZhckFjdHVhbCA9IGZlZWRiYWNrUm93LmFjdHVhbCAgPT0gJyRCLkY6Jythcm1vTm9tU2FsdG87XHJcbiAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdCb3RvbkZvcm11bGFyaW9EZXNwbGllZ3VlIGVzVmFyQWN0dWFsICcgK2VzVmFyQWN0dWFsICApO1xyXG4gICAgICAgICAgICAgICAgaWYobXVsdGlwbGVGb3JtdWxhcmlvcyAmJiBjYXNpbGxlcm8uc2FsdG8hPW51bGwpe1xyXG4gICAgICAgICAgICAgICAgICAvLyAgbGV0IGRlZkZvcm11bGFyaW86SW5mb0Zvcm11bGFyaW8gPSBlc3RydWN0dXJhLmZvcm11bGFyaW9zWydGOicrY2FzaWxsZXJvLnNhbHRvIGFzIElkRm9ybXVsYXJpb107ICAgICAgLy9vcmlnaW5hbFxyXG4gICAgICAgICAgICAgICAgICAgIGxldCBkZWZGb3JtdWxhcmlvOkluZm9Gb3JtdWxhcmlvID0gZXN0cnVjdHVyYS5mb3JtdWxhcmlvc1snRjonK2FybW9Ob21TYWx0byBhcyBJZEZvcm11bGFyaW9dO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBkZWZVQSA9IGVzdHJ1Y3R1cmEudW5pZGFkZXNfYW5hbGlzaXNbZGVmRm9ybXVsYXJpby5jYXNpbGxlcm9zLnVuaWRhZF9hbmFsaXNpcyFdO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBjb25qdW50byA9IHJlc3B1ZXN0YXNBdW1lbnRhZGFzW2RlZkZvcm11bGFyaW8uY2FzaWxsZXJvcy51bmlkYWRfYW5hbGlzaXMhXTtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgY2FudGlkYWRFc3BlcmFkYSA9IHJlc3B1ZXN0YXNBdW1lbnRhZGFzW2Nhc2lsbGVyby5leHByZXNpb25faGFiaWxpdGFyIGFzIElkVmFyaWFibGVdO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBudW1BY3R1YWw6bnVtYmVyfG51bGwgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAvLyAgdmFyIGVzdGFkb0RlbEJvdG9uID0gZmVlZGJhY2tSb3cuZmVlZGJhY2tbJyRCLkY6JytjYXNpbGxlcm8uc2FsdG8gYXMgSWRWYXJpYWJsZV0uZXN0YWRvICAgLy9vcmlnaW5hbFxyXG4gICAgICAgICAgICAgICAgICAgICAgdmFyIGVzdGFkb0RlbEJvdG9uID0gZmVlZGJhY2tSb3cuZmVlZGJhY2tbJyRCLkY6Jythcm1vTm9tU2FsdG8gYXMgSWRWYXJpYWJsZV0uZXN0YWRvXHJcbiAgICAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZygnQm90b25Gb3JtdWxhcmlvRGVzcGxpZWd1ZSBlc3RhZG9EZWxCb3RvbiAnICtlc3RhZG9EZWxCb3RvbiAgKTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgY29uZmlnU29ydGVvRm9ybXVsYXJpbyA9IGVzdHJ1Y3R1cmEuY29uZmlnU29ydGVvP2VzdHJ1Y3R1cmEuY29uZmlnU29ydGVvW2dldE1haW5Gb3JtRm9yVml2aWVuZGEoZm9yUGsudml2aWVuZGEpXTpudWxsXHJcbiAgICAgICAgICAgICAgICAgICAgbGlzdGFEZUJvdG9uZXNBYnJpciA9IGxpa2VBcihjb25qdW50bykubWFwKChfLCBpKT0+e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgbnVtOm51bWJlciA9IG51bWJlck9yU3RyaW5nSW5jSWZBcnJheShpLCBjb25qdW50bykgYXMgbnVtYmVyO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgZm9yUGs9ey4uLnByb3BzLmZvclBrLCBmb3JtdWxhcmlvOmlkRm9ybXVsYXJpb0Rlc3Rpbm8sIFtudWV2b0NhbXBvUGtdOm51bX07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmZWVkYmFjayA9IGZlZWRiYWNrQWxsW3RvUGxhaW5Gb3JQayhmb3JQayldO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZihudW1BY3R1YWwgPT0gbnVsbCAmJiBmZWVkYmFjay5yZXN1bWVuID09IFwidmFjaW9cIiAmJiBlc3RhZG9EZWxCb3RvbiA9PSd2YWxpZGEnKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bUFjdHVhbCA9IG51bTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yUGssIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdW1lbjpudWxsLCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bSwgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3R1YWw6IGNhbGN1bGFyQWN0dWFsQkYoY29uZmlnU29ydGVvRm9ybXVsYXJpbywgbnVtLCBudW1BY3R1YWwsIGlkRm9ybXVsYXJpb0Rlc3Rpbm8sIHJlc3B1ZXN0YXNBdW1lbnRhZGFzKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZpbzogbnVtQWN0dWFsID09IG51bGwsIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVybWl0ZUJvcnJhcjogbGlrZUFyKGNvbmp1bnRvKS5hcnJheSgpLmxlbmd0aCA9PSBOdW1iZXIoaSkgKyAxICYmIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZlZWRiYWNrLnJlc3VtZW4gPT0gJ3ZhY2lvJyAmJiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxjdWxhclBlcm1pdGVCb3JyYXJCRihjb25maWdTb3J0ZW9Gb3JtdWxhcmlvLGlkRm9ybXVsYXJpb0Rlc3Rpbm8pLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ6IGNhbGN1bGFyRGlzYWJsZWRCRihjb25maWdTb3J0ZW9Gb3JtdWxhcmlvLCBudW0sIGlkRm9ybXVsYXJpb0Rlc3Rpbm8sIHJlc3B1ZXN0YXNBdW1lbnRhZGFzKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSkuYXJyYXkoKTtcclxuICAgICAgICAgICAgICAgICAgICBpZihcInB1ZWRlIGFncmVnYXIgLy9UT0RPIFZFUiBFU1RPXCIgJiYgKGNvbmp1bnRvIGluc3RhbmNlb2YgQXJyYXkgfHwgY29uanVudG8gPT0gbnVsbCkpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgbnVldm9WYWxvclBrPShjb25qdW50bz09bnVsbCA/IDAgOiBjb25qdW50by5sZW5ndGgpICsgMTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGZvclBrPXsuLi5wcm9wcy5mb3JQaywgZm9ybXVsYXJpbzppZEZvcm11bGFyaW9EZXN0aW5vLCBbbnVldm9DYW1wb1BrXTpudWV2b1ZhbG9yUGt9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgZGViZUFncmVnYXJPbGlzdG8gPSBudW1BY3R1YWwgPT0gbnVsbCAmJiAoY2FudGlkYWRFc3BlcmFkYSA9PSBudWxsIHx8IGNhbnRpZGFkRXNwZXJhZGEgIT0gKGNvbmp1bnRvICE9bnVsbCAmJiBjb25qdW50by5sZW5ndGgpKSBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIChlc3RhZG9EZWxCb3RvbiA9PSd2YWxpZGEnIHx8IGVzVmFyQWN0dWFsKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGlzdGFEZUJvdG9uZXNBYnJpci5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvclBrLCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bTpudWV2b1ZhbG9yUGssIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXNBZ3JlZ2FyOnRydWUsIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0dWFsOmRlYmVBZ3JlZ2FyT2xpc3RvLCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZpbzogZmFsc2UsIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ6IGNhbGN1bGFyRGlzYWJsZWRCRkFncmVnYXJMaXN0byhjb25maWdTb3J0ZW9Gb3JtdWxhcmlvLGlkRm9ybXVsYXJpb0Rlc3Rpbm8pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsaXN0YURlQm90b25lc0FicmlyLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yUGssIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtOm51ZXZvVmFsb3JQayAtIDEsIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXNDb25maXJtYXI6dHJ1ZSwgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3R1YWw6ZGViZUFncmVnYXJPbGlzdG8gJiYgKCFjYXNpbGxlcm8ubG9uZ2l0dWQgfHwgbnVldm9WYWxvclBrID4gTnVtYmVyKGNhc2lsbGVyby5sb25naXR1ZCkpLCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZpbzogZmFsc2UsIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ6IGNhbGN1bGFyRGlzYWJsZWRCRkFncmVnYXJMaXN0byhjb25maWdTb3J0ZW9Gb3JtdWxhcmlvLGlkRm9ybXVsYXJpb0Rlc3Rpbm8pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBmb3JQaz17Li4ucHJvcHMuZm9yUGssIGZvcm11bGFyaW86aWRGb3JtdWxhcmlvRGVzdGlub307XHJcbiAgICAgICAgICAgICAgICAgICAgbGlzdGFEZUJvdG9uZXNBYnJpciA9IFt7Zm9yUGssIG51bTpmYWxzZSwgdW5pY286dHJ1ZSwgYWN0dWFsOmVzVmFyQWN0dWFsLCBwcmV2aW86dHJ1ZX1dXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB2YXIgdG9kb3NMb3NCb3RvbmVzID0gbGlzdGFEZUJvdG9uZXNBYnJpci5tYXAoZGVmQm90b249PlxyXG4gICAgICAgICAgICAgICAgICAgIGJvdG9uRm9ybXVsYXJpb0NvblJlc3VtZW4oZGVmQm90b24sIGZlZWRiYWNrQWxsW3RvUGxhaW5Gb3JQayhkZWZCb3Rvbi5mb3JQayldPz97cmVzdW1lbjondmFjaW8nfSwgcmVzcHVlc3Rhc0F1bWVudGFkYXMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2lsbGVybywgcHJvcHMuZm9yUGssIGlkQnV0dG9uLCBmb3JtdWxhcmlvQUFicmlyXHJcbiAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgdmFyIGh0bWxTZWNjaW9uPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkU2VjY2lvbikhO1xyXG4gICAgICAgICAgICAgICAgaHRtbFNlY2Npb24uaW5uZXJIVE1MPVwiXCI7XHJcbiAgICAgICAgICAgICAgICBodG1sU2VjY2lvbi5hcHBlbmRDaGlsZChodG1sLmRpdih0b2Rvc0xvc0JvdG9uZXMpLmNyZWF0ZSgpKTtcclxuICAgICAgICAgICAgfWNhdGNoKGVycil7XHJcbiAgICAgICAgICAgICAgICB2YXIgZXJyb3IgPSB1bmV4cGVjdGVkKGVycik7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcImVudHJhIGFsIGNhdGNoXCIpXHJcbiAgICAgICAgICAgICAgICBkaXYudGV4dENvbnRlbnQ9J2VzdG8sIEZBTEzDiSAnK2Vycm9yLm1lc3NhZ2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9KTtcclxuICAgIGNvbnN0IGlyID0gKGRlZkJvdG9uOkRlZmluaWNpb25Gb3JtdWxhcmlvQWJyaXIpPT57XHJcbiAgICAgICAgaWYoIWNhc2lsbGVyby5zYWx0byl7XHJcbiAgICAgICAgICAgIG9wY2lvbmVzLm1vZG9EaXJlY3RvP1xyXG4gICAgICAgICAgICAgICAgbnVsbFxyXG4gICAgICAgICAgICA6XHJcbiAgICAgICAgICAgICAgICBkaXNwYXRjaChkaXNwYXRjaGVycy5WT0xWRVJfSERSKHt9KSk7XHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgIHZhciBudWV2YUZvclBrPXsuLi5mb3JQaywgZm9ybXVsYXJpbzppZEZvcm11bGFyaW9EZXN0aW5vfTtcclxuICAgICAgICAgICAgaWYobXVsdGlwbGVGb3JtdWxhcmlvcyl7XHJcbiAgICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlIGZvclBrIHkgc3VzIGNvbXBvbmVudGVzXHJcbiAgICAgICAgICAgICAgICBudWV2YUZvclBrW251ZXZvQ2FtcG9Qa10gPSBkZWZCb3Rvbi5udW1cclxuICAgICAgICAgICAgICAgIGlmKGRlZkJvdG9uLmVzQWdyZWdhcil7XHJcbiAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2hCeVBhc3MoYWNjaW9uX2FncmVnYXJfZm9ybXVsYXJpbyx7Zm9yUGs6bnVldmFGb3JQa30pO1xyXG4gICAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2hCeVBhc3MoYWNjaW9uX2FicmlyX2Zvcm11bGFyaW8se2ZvclBrOm51ZXZhRm9yUGt9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBkaXNwYXRjaChkaXNwYXRjaGVycy5DQU1CSUFSX0ZPUk1VTEFSSU8oe2ZvclBrOm51ZXZhRm9yUGssIGFwaWxhclZ1ZWx0YTp0cnVlfSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZihjb25maXJtYXJGb3J6YXJJcil7c2V0Q29uZmlybWFyRm9yemFySXIoZmFsc2UpfVxyXG4gICAgfTtcclxuICAgIHJldHVybiA8RGVzcGxlZ2FyQ2FzaWxsZXJvIGNhc2lsbGVybz17Y2FzaWxsZXJvfT5cclxuICAgICAgICA8ZGl2IGlkPXtpZFNlY2Npb259PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxCdXR0b24gY2xhc3NOYW1lPVwic3BlY2lhbC1idXR0b25cIiBpZD17aWRCdXR0b259XHJcbiAgICAgICAgICAgIG9uQ2xpY2s9eyhldmVudCk9PntcclxuICAgICAgICAgICAgICAgIGlyKEpTT04ucGFyc2UoKGV2ZW50LnRhcmdldCEgYXMgdW5rbm93biBhcyBIVE1MQnV0dG9uRWxlbWVudCkuZ2V0QXR0cmlidXRlKCdkZWYtYnV0dG9uJykhKSlcclxuICAgICAgICAgICAgfX1cclxuICAgICAgICA+aXIgKGludGVybm8pPC9CdXR0b24+XHJcbiAgICAgICAgPERpYWxvZyBcclxuICAgICAgICAgICAgY2xhc3NOYW1lPVwibnVlc3Ryby1kaWFsb2dvXCJcclxuICAgICAgICAgICAgb3Blbj17ISFjb25maXJtYXJGb3J6YXJJcn1cclxuICAgICAgICAgICAgb25DbG9zZT17KCk9PnNldENvbmZpcm1hckZvcnphcklyKG51bGwpfVxyXG4gICAgICAgID5cclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJudWVzdHJvLWRpYWxvZ29cIj5cclxuICAgICAgICAgICAgICAgIDxUeXBvZ3JhcGh5Pk5vIHNlIHB1ZWRlIGF2YW56YXIgYWwgc2lndWllbnRlIGZvcm11bGFyaW8uPC9UeXBvZ3JhcGh5PlxyXG4gICAgICAgICAgICAgICAgPFR5cG9ncmFwaHk+UXVpesOhcyBubyB0ZXJtaW7DsyBkZSBjb250ZXN0YXIgbGFzIHByZWd1bnRhcyBjb3JyZXNwb25kaWVudGVzPC9UeXBvZ3JhcGh5PlxyXG4gICAgICAgICAgICAgICAgPFR5cG9ncmFwaHk+UXVpesOhcyBubyBjb3JyZXNwb25kZSBlbiBiYXNlIGEgbGFzIHJlc3B1ZXN0YXMgb2J0ZW5pZGFzPC9UeXBvZ3JhcGh5PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPEJ1dHRvbiBjb2xvcj1cInNlY29uZGFyeVwiIG9uQ2xpY2s9eygpPT5jb25maXJtYXJGb3J6YXJJciAmJiBpcihjb25maXJtYXJGb3J6YXJJcil9PmZvcnphcjwvQnV0dG9uPlxyXG4gICAgICAgICAgICA8QnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIHZhcmlhbnQ9XCJjb250YWluZWRcIiBvbkNsaWNrPXsoKT0+c2V0Q29uZmlybWFyRm9yemFySXIobnVsbCl9PkVudGVuZGlkbzwvQnV0dG9uPlxyXG4gICAgICAgIDwvRGlhbG9nPlxyXG4gICAgPC9EZXNwbGVnYXJDYXNpbGxlcm8+XHJcbn1cclxuXHJcbmZ1bmN0aW9uIENhc2lsbGVyb0Rlc2Nvbm9jaWRvKHByb3BzOntjYXNpbGxlcm86Q2FzaWxsZXJvQmFzZSwgZm9yUGs6Rm9yUGt9KXtcclxuICAgIHJldHVybiA8RGVzcGxlZ2FyQ2FzaWxsZXJvIFxyXG4gICAgICAgIGlkPXtgY2FzaWxsZXJvZGVzY29ub2NpZG8tJHtwcm9wcy5jYXNpbGxlcm8uaWRfY2FzaWxsZXJvfWB9XHJcbiAgICAgICAgY2FzaWxsZXJvPXtwcm9wcy5jYXNpbGxlcm8gYXMgQmxvcXVlfVxyXG4gICAgICAgIHN0eWxlPXt7ZGlzcGxheTonbm9uZSd9fVxyXG4gICAgPlxyXG4gICAgICAgIDxUeXBvZ3JhcGh5PlRpcG8gZGUgY2FzaWxsZXJvIG5vIGltcGxlbWVudGFkbzogXCJ7cHJvcHMuY2FzaWxsZXJvLnRpcG9jfVwiIHBhcmEgXCJ7cHJvcHMuY2FzaWxsZXJvLmNhc2lsbGVyb31cIjwvVHlwb2dyYXBoeT5cclxuICAgICAgICA8RW5jYWJlemFkb0Rlc3BsaWVndWUgY2FzaWxsZXJvPXtwcm9wcy5jYXNpbGxlcm8gYXMgQ2FzaWxsZXJvRW5jYWJlemFibGV9IGxlZXI9e2ZhbHNlfSBmb3JQaz17cHJvcHMuZm9yUGt9Lz5cclxuICAgIDwvRGVzcGxlZ2FyQ2FzaWxsZXJvPlxyXG59XHJcblxyXG5mdW5jdGlvbiB1c2VTZWxlY3RvclZpdmllbmRhKGZvclBrOkZvclBrKXtcclxuICAgIHJldHVybiB1c2VTZWxlY3Rvcigoc3RhdGU6Q2Fzb1N0YXRlKT0+e1xyXG4gICAgICAgIHZhciBlc3RydWN0dXJhID0gZ2V0RXN0cnVjdHVyYSgpO1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIGZvcm11bGFyaW86IGVzdHJ1Y3R1cmEuZm9ybXVsYXJpb3NbZm9yUGsuZm9ybXVsYXJpb10uY2FzaWxsZXJvcyxcclxuICAgICAgICAgICAgbW9kb0Rlc3BsaWVndWU6IHRydWUgfHwgc3RhdGUubW9kby5kZW1vP3N0YXRlLm9wY2lvbmVzLm1vZG9EZXNwbGllZ3VlOidyZWxldmFtaWVudG8nLFxyXG4gICAgICAgICAgICBtb2RvOiBzdGF0ZS5tb2RvLFxyXG4gICAgICAgICAgICBvcGNpb25lczogc3RhdGUub3BjaW9uZXMsXHJcbiAgICAgICAgfVxyXG4gICAgfSlcclxufVxyXG5cclxuZnVuY3Rpb24gQ29uanVudG9QcmVndW50YXNEZXNwbGllZ3VlKHByb3BzOntjYXNpbGxlcm86Q29uanVudG9QcmVndW50YXMsIGZvcm11bGFyaW86Rm9ybXVsYXJpbywgZm9yUGs6Rm9yUGt9KXtcclxuICAgIGxldCB7Y2FzaWxsZXJvLCBmb3JQa30gPSBwcm9wcztcclxuICAgIHZhciBpZCA9IGBjb25qdW50by1wcmVndW50YXMtJHtjYXNpbGxlcm8uaWRfY2FzaWxsZXJvfWA7XHJcbiAgICByZWdpc3RyYXJFbGVtZW50byh7XHJcbiAgICAgICAgaWQsIFxyXG4gICAgICAgIGRpcmVjdDp0cnVlLCBcclxuICAgICAgICBmdW46IHJlZ2lzdHJhZG9yRGVWYXJpYWJsZShjYXNpbGxlcm8pXHJcbiAgICB9KVxyXG4gICAgbGV0IG1vZG9EZXNwbGllZ3VlID0gXCJub3JtYWxcIjtcclxuICAgIGxldCBoYWJpbGl0YWRvID0gdHJ1ZTtcclxuICAgIHJldHVybiBoYWJpbGl0YWRvIHx8IG1vZG9EZXNwbGllZ3VlPT0nbWV0YWRhdG9zJz88RGVzcGxlZ2FyQ2FzaWxsZXJvIGlkPXtpZH0gY2FzaWxsZXJvPXtjYXNpbGxlcm99PlxyXG4gICAgICAgIDxFbmNhYmV6YWRvRGVzcGxpZWd1ZSBjYXNpbGxlcm89e2Nhc2lsbGVyb30gZm9yUGs9e2ZvclBrfSBsZWVyPXtjYXNpbGxlcm8ubGVlciE9PWZhbHNlfS8+XHJcbiAgICAgICAgPERlc3BsZWdhckNvbnRlbmlkb0ludGVybm9CbG9xdWVPRm9ybXVsYXJpbyBibG9xdWVPRm9ybXVsYXJpbz17Y2FzaWxsZXJvfSBmb3JtdWxhcmlvPXtwcm9wcy5mb3JtdWxhcmlvfSBmb3JQaz17Zm9yUGt9IG11bHRpcGxlPXtmYWxzZX0vPlxyXG4gICAgPC9EZXNwbGVnYXJDYXNpbGxlcm8+Om51bGw7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIERlc3BsZWdhckNvbnRlbmlkb0ludGVybm9CbG9xdWVPRm9ybXVsYXJpbyhwcm9wczp7YmxvcXVlT0Zvcm11bGFyaW86QmxvcXVlfEZvcm11bGFyaW98Q29uanVudG9QcmVndW50YXMsIGZvcm11bGFyaW86Rm9ybXVsYXJpbywgZm9yUGs6Rm9yUGssIG11bHRpcGxlOmJvb2xlYW59KXtcclxuICAgIHZhciBwYXJjaWFsaXphYmxlID0gcHJvcHMuYmxvcXVlT0Zvcm11bGFyaW8udGlwb2M9PSdGJztcclxuICAgIGNvbnN0IFt2ZXJUb2RvLCBzZXRWZXJUb2RvXSA9IHVzZVN0YXRlKCFwYXJjaWFsaXphYmxlKTtcclxuICAgIGNvbnN0IFtmb3JQa0FjdHVhbCwgc2V0Rm9yUGtBY3R1YWxdID0gdXNlU3RhdGU8SWRDYXNpbGxlcm98bnVsbD4obnVsbCk7XHJcbiAgICBpZihwYXJjaWFsaXphYmxlKXtcclxuICAgICAgICBpZihmb3JQa0FjdHVhbCAhPSBwcm9wcy5ibG9xdWVPRm9ybXVsYXJpby5jYXNpbGxlcm8pe1xyXG4gICAgICAgICAgICBzZXRWZXJUb2RvKGZhbHNlKVxyXG4gICAgICAgICAgICBzZXRGb3JQa0FjdHVhbChwcm9wcy5ibG9xdWVPRm9ybXVsYXJpby5jYXNpbGxlcm8pXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHVzZUVmZmVjdCgoKT0+e1xyXG4gICAgICAgICAgICB2YXIgdGltZXIgPSBzZXRUaW1lb3V0KCgpPT57XHJcbiAgICAgICAgICAgICAgICBzZXRWZXJUb2RvKHRydWUpO1xyXG4gICAgICAgICAgICB9LDI1MClcclxuICAgICAgICAgICAgcmV0dXJuICgpPT57XHJcbiAgICAgICAgICAgICAgICBpZih0aW1lcil7XHJcbiAgICAgICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcbiAgICBjb25zdCBsaW1pdGVOb1ZlclRvZG8gPSAzO1xyXG4gICAgdXNlRWZmZWN0KCgpPT57XHJcbiAgICAgICAgaWYocHJvcHMuYmxvcXVlT0Zvcm11bGFyaW8udGlwb2M9PSdGJyl7XHJcbiAgICAgICAgICAgIHZvbGNhZG9JbmljaWFsRWxlbWVudG9zUmVnaXN0cmFkb3MocHJvcHMuZm9yUGspO1xyXG4gICAgICAgIH1cclxuICAgIH0sW3RvUGxhaW5Gb3JQayhwcm9wcy5mb3JQayksdmVyVG9kb10pXHJcbiAgICB1c2VMYXlvdXRFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIGlmKHByb3BzLmJsb3F1ZU9Gb3JtdWxhcmlvLnRpcG9jPT0nRicgJiYgdmVyVG9kbyl7XHJcbiAgICAgICAgICAgIHZhciB7c2lndWllbnRlVmFyaWFibGUsIHZhcmlhYmxlQWN0dWFsfSA9IGRpc3BhdGNoQnlQYXNzKGFjY2lvbl9yZWdpc3RyYXJfcmVzcHVlc3RhLCB7cmVzcHVlc3RhOm51bGwsIHZhcmlhYmxlOk5PX0NBTUJJQVJfX1NPTE9fVFJBRVJfU1RBVFVTLCBmb3JQazpwcm9wcy5mb3JQa30pO1xyXG4gICAgICAgICAgICBpZih2YXJpYWJsZUFjdHVhbCB8fCBzaWd1aWVudGVWYXJpYWJsZSl7XHJcbiAgICAgICAgICAgICAgICBlbmZvY2FyRWxlbWVudG9EZVZhcmlhYmxlKGNvYWxlc2NlKHZhcmlhYmxlQWN0dWFsIGFzIHN0cmluZ3xudWxsLHNpZ3VpZW50ZVZhcmlhYmxlIGFzIHN0cmluZ3xudWxsKSBhcyBJZFZhcmlhYmxlKVxyXG4gICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgIHZhciBmZWVkYmFja1Jvd1ZhbGlkYXRvciA9IGdldEZlZWRiYWNrUm93VmFsaWRhdG9yKClcclxuICAgICAgICAgICAgICAgIGlmKGZlZWRiYWNrUm93VmFsaWRhdG9yW3RvUGxhaW5Gb3JQayhwcm9wcy5mb3JQayldLnJlc3VtZW49PSdvaycpe1xyXG4gICAgICAgICAgICAgICAgICAgIHNjcm9sbFRvVG9wKClcclxuICAgICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgICAgIHNjcm9sbFRvVG9wKClcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPVwiY29udGVuaWRvXCI+XHJcbiAgICAgICAge3ZlclRvZG8/bnVsbDo8ZGl2IHN0eWxlPXt7aGVpZ2h0OlwiNTAwcHhcIiwgdGV4dEFsaWduOidjZW50ZXInLCB2ZXJ0aWNhbEFsaWduOidtaWRkbGUnLCB3aWR0aDonMTAwJScsIHBvc2l0aW9uOlwiZml4ZWRcIiwgYmFja2dyb3VuZENvbG9yOiAncmdiYSgxMDAsMTAwLDEwMCwwLjMpJywgZm9udFNpemU6JzIwMCUnfX0gPmNhcmdhbmRvLi4uPC9kaXY+fVxyXG4gICAgICAgIHtwcm9wcy5ibG9xdWVPRm9ybXVsYXJpby5jYXNpbGxlcm9zLm1hcCgoY2FzaWxsZXJvLCBpKT0+e1xyXG4gICAgICAgICAgICB2YXIga2V5ID0gY2FzaWxsZXJvLnRpcG9jKyctJytjYXNpbGxlcm8uaWRfY2FzaWxsZXJvKyctJytpO1xyXG4gICAgICAgICAgICByZXR1cm4gKHZlclRvZG8gfHwgaSA8IGxpbWl0ZU5vVmVyVG9kbz9cclxuICAgICAgICAgICAgICAgIChcclxuICAgICAgICAgICAgICAgICAgICBjYXNpbGxlcm8udGlwb2MgPT0gXCJQXCI/PFByZWd1bnRhRGVzcGxpZWd1ZSBrZXk9e2tleX0gcHJlZ3VudGE9e2Nhc2lsbGVyb30gZm9yUGs9e3Byb3BzLmZvclBrfSBkZXNwbGllZ3VlRW5jYWJlemFkbz17Y2FzaWxsZXJvLmRlc3BsaWVndWVFbmNhYmV6YWRvPz8ocHJvcHMuYmxvcXVlT0Zvcm11bGFyaW8udGlwb2M9PSdDUCc/J2xhdGVyYWwnOidzdXBlcmlvcicpfS8+OlxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2lsbGVyby50aXBvYyA9PSBcIkJcIj88QmxvcXVlRGVzcGxpZWd1ZSBrZXk9e2tleX0gYmxvcXVlPXtjYXNpbGxlcm99IGZvcm11bGFyaW89e3Byb3BzLmZvcm11bGFyaW99IGZvclBrPXtwcm9wcy5mb3JQa30vPjpcclxuICAgICAgICAgICAgICAgICAgICBjYXNpbGxlcm8udGlwb2MgPT0gXCJGSUxUUk9cIj88RmlsdHJvRGVzcGxpZWd1ZSBrZXk9e2tleX0gZmlsdHJvPXtjYXNpbGxlcm99IGZvclBrPXtwcm9wcy5mb3JQa30vPjpcclxuICAgICAgICAgICAgICAgICAgICBjYXNpbGxlcm8udGlwb2MgPT0gXCJCRlwiPzxCb3RvbkZvcm11bGFyaW9EZXNwbGllZ3VlIGtleT17a2V5fSBjYXNpbGxlcm89e2Nhc2lsbGVyb30gZm9ybXVsYXJpbz17cHJvcHMuZm9ybXVsYXJpb30gZm9yUGs9e3Byb3BzLmZvclBrfS8+OlxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2lsbGVyby50aXBvYyA9PSBcIkNPTlNcIj88Q29uc2lzdGVuY2lhRGVzcGxpZWd1ZSBrZXk9e2tleX0gY2FzaWxsZXJvPXtjYXNpbGxlcm99IGZvclBrPXtwcm9wcy5mb3JQa30vPjpcclxuICAgICAgICAgICAgICAgICAgICBjYXNpbGxlcm8udGlwb2MgPT0gXCJDUFwiPzxDb25qdW50b1ByZWd1bnRhc0Rlc3BsaWVndWUga2V5PXtrZXl9IGNhc2lsbGVybz17Y2FzaWxsZXJvfSBmb3JtdWxhcmlvPXtwcm9wcy5mb3JtdWxhcmlvfSBmb3JQaz17cHJvcHMuZm9yUGt9Lz46XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzaWxsZXJvLnRpcG9jID09IFwiVEVYVE9cIj88VGV4dG9EZXNwbGllZ3VlIGtleT17a2V5fSBjYXNpbGxlcm89e2Nhc2lsbGVyb30gZm9yUGs9e3Byb3BzLmZvclBrfS8+OlxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2lsbGVyby50aXBvYyA9PSBcIkxJQlJFXCI/PExpYnJlRGVzcGxpZWd1ZSBrZXk9e2tleX0gY2FzaWxsZXJvPXtjYXNpbGxlcm99IGZvcm11bGFyaW89e3Byb3BzLmZvcm11bGFyaW99IGZvclBrPXtwcm9wcy5mb3JQa30vPjpcclxuICAgICAgICAgICAgICAgICAgICA8Q2FzaWxsZXJvRGVzY29ub2NpZG8ga2V5PXtrZXl9IGNhc2lsbGVybz17Y2FzaWxsZXJvfSBmb3JQaz17cHJvcHMuZm9yUGt9Lz5cclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgOmk9PWxpbWl0ZU5vVmVyVG9kbz9cclxuICAgICAgICAgICAgICAgIDxkaXYga2V5PSckc3Bpbm5lcicgY2xhc3NOYW1lPVwic3Bpbm5lci1ib3JkZXJcIiByb2xlPVwic3RhdHVzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4+Y2FyZ2FuZG8gYmxvcXVlLi4uPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDpudWxsXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICB9KVxyXG4gICAgfTwvZGl2PlxyXG59XHJcblxyXG5mdW5jdGlvbiBCbG9xdWVEZXNwbGllZ3VlKHByb3BzOntibG9xdWU6QmxvcXVlLCBmb3JtdWxhcmlvOkZvcm11bGFyaW8sIGZvclBrOkZvclBrfSl7XHJcbiAgICB2YXIge2Jsb3F1ZSwgZm9yUGt9ID0gcHJvcHM7XHJcbiAgICB2YXIga2V5PWJsb3F1ZS52ZXJfaWQhPSctJyAmJiBibG9xdWUudmVyX2lkIHx8IGJsb3F1ZS5jYXNpbGxlcm87XHJcbiAgICB2YXIgYWN0aXZlU3RlcD0wO1xyXG4gICAgdmFyIG11bHRpcGxlID0gISFibG9xdWUudW5pZGFkX2FuYWxpc2lzO1xyXG4gICAgdmFyIGxpc3RhID0gW3tmb3JQaywga2V5OjAsIG11bHRpcGxlOmZhbHNlfV07XHJcbiAgICB2YXIgaGFiaWxpdGFkb3IgPSBibG9xdWUuZXhwcmVzaW9uX2hhYmlsaXRhcl9qcz9nZXRGdW5jaW9uSGFiaWxpdGFyKGJsb3F1ZS5leHByZXNpb25faGFiaWxpdGFyX2pzKTooKT0+dHJ1ZTtcclxuICAgIHZhciB7bW9kb0Rlc3BsaWVndWV9ID0gdXNlU2VsZWN0b3JWaXZpZW5kYShmb3JQayk7XHJcbiAgICBpZihtdWx0aXBsZSl7XHJcbiAgICAgICAgLy8gVE9ETzogR0VORVJBTElaQVJcclxuICAgICAgICAvLyBAdHMtaWdub3JlIFxyXG4gICAgICAgIC8vIGxpc3RhPXJlc3B1ZXN0YXMucGVyc29uYXMubWFwKChfcGVyc29uYSwgaSk9PihcclxuICAgICAgICAvLyAgICAge2ZvclBrOnsuLi5mb3JQaywgcGVyc29uYTppKzF9LCBrZXk6aSsxLCBtdWx0aXBsZTp0cnVlfVxyXG4gICAgICAgIC8vICkpXHJcbiAgICB9XHJcbiAgICB2YXIgaWQgPSBgYmxvcXVlLSR7YmxvcXVlLmlkX2Nhc2lsbGVyb31gO1xyXG4gICAgcmVnaXN0cmFyRWxlbWVudG8oe1xyXG4gICAgICAgIGlkLFxyXG4gICAgICAgIHN0eWxlOidkaXNwbGF5JyxcclxuICAgICAgICBmdW46IChyZXNwdWVzdGFzOlJlc3B1ZXN0YXMpPT4gaGFiaWxpdGFkb3IocmVzcHVlc3RhcykgfHwgbW9kb0Rlc3BsaWVndWU9PSdtZXRhZGF0b3MnPyd1bnNldCc6J25vbmUnXHJcbiAgICB9KVxyXG4gICAgcmV0dXJuIDxEZXNwbGVnYXJDYXNpbGxlcm8gY2FzaWxsZXJvPXtibG9xdWV9IG51ZXN0cm8tYmxvcXVlPXtibG9xdWUuaWRfY2FzaWxsZXJvfSBlcy1tdWx0aXBsZT17bXVsdGlwbGU/J1NJJzonTk8nfSBpZD17aWR9PlxyXG4gICAgICAgIDxFbmNhYmV6YWRvRGVzcGxpZWd1ZSBjYXNpbGxlcm89e2Jsb3F1ZX0gZm9yUGs9e2ZvclBrfS8+XHJcbiAgICAgICAge2xpc3RhLm1hcCgoe2tleSwgZm9yUGssIG11bHRpcGxlfSk9PlxyXG4gICAgICAgICAgICA8RGVzcGxlZ2FyQ29udGVuaWRvSW50ZXJub0Jsb3F1ZU9Gb3JtdWxhcmlvIGtleT17a2V5fSBibG9xdWVPRm9ybXVsYXJpbz17YmxvcXVlfSBmb3JtdWxhcmlvPXtwcm9wcy5mb3JtdWxhcmlvfSBmb3JQaz17Zm9yUGt9IG11bHRpcGxlPXttdWx0aXBsZX0vPlxyXG4gICAgICAgICl9XHJcbiAgICA8L0Rlc3BsZWdhckNhc2lsbGVybz47XHJcbn1cclxuXHJcbmNvbnN0IEZvcm11bGFyaW9FbmNhYmV6YWRvID0gRGVzcGxpZWd1ZUVuY2FiZXphZG87XHJcblxyXG5mdW5jdGlvbiBNZW51TGV0cmEocHJvcHM6e3RhbWFubmlvOm51bWJlciwgZGVub21pbmFjaW9uOnN0cmluZ30pe1xyXG4gICAgY29uc3QgY2FtYmlhckxldHJhID0gKHRhbWFubmlvOm51bWJlcik9PntcclxuICAgICAgICB2YXIgcm9vdCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcclxuICAgICAgICByb290LnN0eWxlLmZvbnRTaXplPXRhbWFubmlvK1wicHhcIjtcclxuICAgIH1cclxuICAgIHJldHVybiA8TWVudUl0ZW1cclxuICAgICAgICBvbkNsaWNrPXsoKT0+Y2FtYmlhckxldHJhKHByb3BzLnRhbWFubmlvKX0gc3R5bGU9e3tmb250U2l6ZTpwcm9wcy50YW1hbm5pbysncHgnfX1cclxuICAgID5sZXRyYSB7cHJvcHMuZGVub21pbmFjaW9ufTwvTWVudUl0ZW0+XHJcbn1cclxuXHJcbmZ1bmN0aW9uIEZhc3RTZXR0dXAoKXtcclxuICAgIGNvbnN0IFthbmNob3JFbCwgc2V0QW5jaG9yRWxdID0gUmVhY3QudXNlU3RhdGUobnVsbCk7XHJcbiAgICBjb25zdCBbb3Blbiwgc2V0T3Blbl0gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XHJcbiAgICBjb25zdCBoYW5kbGVDbGljayA9IChldmVudDphbnkpID0+IHtcclxuICAgICAgICBzZXRBbmNob3JFbChldmVudC5jdXJyZW50VGFyZ2V0KTtcclxuICAgICAgICBzZXRPcGVuKChwcmV2KSA9PiAhcHJldik7XHJcbiAgICB9O1xyXG4gICAgY29uc3QgZGlzcGF0Y2ggPSB1c2VEaXNwYXRjaCgpO1xyXG4gICAgY29uc3QgY2FtYmlhciA9IChtb2RvRGVzcGxpZWd1ZTpNb2RvRGVzcGxpZWd1ZSk9PntcclxuICAgICAgICBkaXNwYXRjaChkaXNwYXRjaGVycy5NT0RPX0RFU1BMSUVHVUUoe21vZG9EZXNwbGllZ3VlfSkpO1xyXG4gICAgICAgIHNldE9wZW4oZmFsc2UpXHJcbiAgICB9XHJcbiAgICBjb25zdCBvcGNpb25lcyA9IHVzZVNlbGVjdG9yKChzdGF0ZTpDYXNvU3RhdGUpPT5zdGF0ZS5vcGNpb25lcylcclxuICAgIHJldHVybiA8PlxyXG4gICAgICAgIDxCdXR0b24gb25DbGljaz17aGFuZGxlQ2xpY2t9PlxyXG4gICAgICAgICAgICA8SUNPTi5TZXR0aW5ncy8+XHJcbiAgICAgICAgPC9CdXR0b24+XHJcbiAgICAgICAgPE1lbnUgb3Blbj17b3Blbn0gYW5jaG9yRWw9e2FuY2hvckVsfSBvbkNsb3NlPXsoKT0+c2V0T3BlbihmYWxzZSl9PlxyXG4gICAgICAgICAgICA8TWVudUl0ZW0gb25DbGljaz17KCk9PmNhbWJpYXIoXCJyZWxldmFtaWVudG9cIil9Pm5vcm1hbDwvTWVudUl0ZW0+XHJcbiAgICAgICAgICAgIDxNZW51SXRlbSBvbkNsaWNrPXsoKT0+Y2FtYmlhcihcIlBERlwiICAgICAgICAgKX0+UERGIHBhcmEgcmVsZXZhbWllbnRvPC9NZW51SXRlbT5cclxuICAgICAgICAgICAgPE1lbnVJdGVtIG9uQ2xpY2s9eygpPT5jYW1iaWFyKFwibWV0YWRhdG9zXCIgICApfT5yZXZpc2FyIG1ldGFkYXRvczwvTWVudUl0ZW0+XHJcbiAgICAgICAgICAgIDxEaXZpZGVyLz5cclxuICAgICAgICAgICAgPE1lbnVMZXRyYSB0YW1hbm5pbz17MTJ9IGRlbm9taW5hY2lvbiA9IFwibXV5IGNoaWNhXCIvPlxyXG4gICAgICAgICAgICA8TWVudUxldHJhIHRhbWFubmlvPXsxNH0gZGVub21pbmFjaW9uID0gXCJjaGljYVwiLz5cclxuICAgICAgICAgICAgPE1lbnVMZXRyYSB0YW1hbm5pbz17MTZ9IGRlbm9taW5hY2lvbiA9IFwibm9ybWFsXCIvPlxyXG4gICAgICAgICAgICA8TWVudUxldHJhIHRhbWFubmlvPXsxOX0gZGVub21pbmFjaW9uID0gXCJncmFuZGVcIi8+XHJcbiAgICAgICAgICAgIDxNZW51TGV0cmEgdGFtYW5uaW89ezIyfSBkZW5vbWluYWNpb24gPSBcImVub3JtZVwiLz5cclxuICAgICAgICAgICAgPERpdmlkZXIvPlxyXG4gICAgICAgICAgICA8TWVudUl0ZW0+PGxhYmVsPjxDaGVja2JveCBjaGVja2VkPXtvcGNpb25lcy5jb25DYW1wb09wY2lvbmVzfSBvbkNoYW5nZT17XHJcbiAgICAgICAgICAgICAgICAoKT0+ZGlzcGF0Y2goZGlzcGF0Y2hlcnMuU0VUX09QQ0lPTih7b3BjaW9uOidjb25DYW1wb09wY2lvbmVzJywgdmFsb3I6IW9wY2lvbmVzLmNvbkNhbXBvT3BjaW9uZXN9KSlcclxuICAgICAgICAgICAgfSBpbnB1dFByb3BzPXt7ICdhcmlhLWxhYmVsJzogJ3ByaW1hcnkgY2hlY2tib3gnIH19Lz5jYW1wbyBvcGNpb25lczwvbGFiZWw+PC9NZW51SXRlbT5cclxuICAgICAgICAgICAgPE1lbnVJdGVtPjxsYWJlbD48Q2hlY2tib3ggY2hlY2tlZD17b3BjaW9uZXMuc2FsdG9BdXRvbWF0aWNvfSBvbkNoYW5nZT17XHJcbiAgICAgICAgICAgICAgICAoKT0+ZGlzcGF0Y2goZGlzcGF0Y2hlcnMuU0VUX09QQ0lPTih7b3BjaW9uOidzYWx0b0F1dG9tYXRpY28nLCB2YWxvcjohb3BjaW9uZXMuc2FsdG9BdXRvbWF0aWNvfSkpXHJcbiAgICAgICAgICAgIH0gaW5wdXRQcm9wcz17eyAnYXJpYS1sYWJlbCc6ICdwcmltYXJ5IGNoZWNrYm94JyB9fS8+c2FsdG8gYXV0b23DoXRpY288L2xhYmVsPjwvTWVudUl0ZW0+XHJcbiAgICAgICAgPC9NZW51PlxyXG4gICAgPC8+O1xyXG59XHJcblxyXG5mdW5jdGlvbiBCYXJyYURlTmF2ZWdhY2lvbihwcm9wczp7Zm9yUGs6Rm9yUGssIHNvbG9MZWN0dXJhOmJvb2xlYW4sIG1vZG9EaXJlY3RvOmJvb2xlYW59KXtcclxuICAgIGNvbnN0IGRpc3BhdGNoID0gdXNlRGlzcGF0Y2goKTtcclxuICAgIGNvbnN0IGZvclBrID0gcHJvcHMuZm9yUGs7XHJcbiAgICBjb25zdCB7b3BjaW9uZXN9ID0gdXNlU2VsZWN0b3JWaXZpZW5kYShmb3JQayk7XHJcbiAgICBjb25zdCBbY29uZmlybWFDZXJyYXIsIHNldENvbmZpcm1hQ2VycmFyXSA9IHVzZVN0YXRlPGJvb2xlYW58bnVsbD4oZmFsc2UpO1xyXG4gICAgdmFyIGRvbWluaW8gPSBnZXREYXRvc0J5UGFzcygpLmluZm9ybWFjaW9uSGRyW2ZvclBrLnZpdmllbmRhXS50ZW0uZG9taW5pbztcclxuICAgIHZhciBjZXJyYXJEaXJlY3RvID0gYXN5bmMgZnVuY3Rpb24oKXtcclxuICAgICAgICByZW1vdmVDU1NCeUlkKEJPT1RTVFJBUF81XzFfM19TUkMpO1xyXG4gICAgICAgIHZhciBlc3RydWN0dXJhID0gZ2V0RXN0cnVjdHVyYSgpO1xyXG4gICAgICAgIGdvdG9Db25zaXN0aXIoXHJcbiAgICAgICAgICAgIGVzdHJ1Y3R1cmEub3BlcmF0aXZvIGFzIElkT3BlcmF0aXZvLFxyXG4gICAgICAgICAgICBnZXREYXRvc0J5UGFzcygpLmluZm9ybWFjaW9uSGRyW2ZvclBrLnZpdmllbmRhXS50YXJlYS50YXJlYSxcclxuICAgICAgICAgICAgZm9yUGsudml2aWVuZGFcclxuICAgICAgICApO1xyXG4gICAgICAgIC8vdmFyIGhhc2g9bmV3IFVSTFNlYXJjaFBhcmFtcyhsb2NhdGlvbi5oYXNoPy5yZXBsYWNlKC9eXFwjLywnJykuc3BsaXQoJyZhdXRvcHJvY2VkJylbMF0pO1xyXG4gICAgICAgIC8vLy9oYXNoLmRlbGV0ZSgnYXV0b3Byb2NlZCcpXHJcbiAgICAgICAgLy9jbG9zZSgpO1xyXG4gICAgICAgIC8vbG9jYXRpb24uaGFzaD1oYXNoLnRvU3RyaW5nKCk7XHJcbiAgICB9XHJcbiAgICB2YXIgYm90b25lc0Zvcm11bGFyaW89W107XHJcbiAgICBpZighb3BjaW9uZXMubW9kb0RpcmVjdG8pe1xyXG4gICAgICAgIGJvdG9uZXNGb3JtdWxhcmlvLnB1c2goe3F1ZTogJ2hkcicgICAgLCBhYnI6J0hkUicsIGlkOklEX0JPVE9OX1ZPTFZFUl9IRFIsIGxhYmVsOidob2phIGRlIHJ1dGEnLCByZXRyb2Nlc286MH0pXHJcbiAgICB9XHJcbiAgICBvcGNpb25lcy5waWxhRm9yUGsuZm9yRWFjaCgoZm9yUGssaSk9PlxyXG4gICAgICAgIGJvdG9uZXNGb3JtdWxhcmlvLnB1c2goe3F1ZTondm9sdmVyJywgYWJyOmZvclBrLmZvcm11bGFyaW8ucmVwbGFjZSgvXkY6LywnJyksIGxhYmVsOmZvclBrLmZvcm11bGFyaW8sIHJldHJvY2VzbzpvcGNpb25lcy5waWxhRm9yUGsubGVuZ3RoLWl9KVxyXG4gICAgKVxyXG4gICAgYm90b25lc0Zvcm11bGFyaW8ucHVzaCh7cXVlOicnLCBhYnI6Zm9yUGsuZm9ybXVsYXJpby5yZXBsYWNlKC9eRjovLCcnKSwgbGFiZWw6Zm9yUGsuZm9ybXVsYXJpbywgcmV0cm9jZXNvOjB9KTtcclxuICAgIHJlZ2lzdHJhckVsZW1lbnRvKHtpZDpwcm9wcy5tb2RvRGlyZWN0bz9JRF9CT1RPTl9DRVJSQVI6SURfQk9UT05fVk9MVkVSX0hEUiwgZGlyZWN0OnRydWUsXHJcbiAgICAgICAgZnVuOihcclxuICAgICAgICAgICAgcjpSZXNwdWVzdGFzLCBcclxuICAgICAgICAgICAgX2ZlZWRiYWNrRm9ybTogRm9ybVN0cnVjdHVyZVN0YXRlPElkVmFyaWFibGUsIFZhbG9yLCBJZEZpbj4sIFxyXG4gICAgICAgICAgICBlbGVtZW50bzpIVE1MRGl2RWxlbWVudCwgXHJcbiAgICAgICAgICAgIGZlZWRiYWNrQWxsOntbZm9ybXVsYXJpbyBpbiBQbGFpbkZvclBrXTpGb3JtU3RydWN0dXJlU3RhdGU8SWRWYXJpYWJsZSwgVmFsb3IsIElkRmluPn0sIFxyXG4gICAgICAgICAgICBfZXN0cnVjdHVyYTpFc3RydWN0dXJhXHJcbiAgICAgICAgKT0+e1xyXG4gICAgICAgICAgICBlbGVtZW50by5zZXRBdHRyaWJ1dGUoJ3Jlc3VtZW4tZXN0YWRvJyxjYWxjdWxhclJlc3VtZW5WaXZpZW5kYShmb3JQaywgZmVlZGJhY2tBbGwsIHIpLnJlc3VtZW5Fc3RhZG8pO1xyXG4gICAgICAgIH1cclxuICAgIH0pXHJcbiAgICByZXR1cm4gPD5cclxuICAgICAgICA8QnV0dG9uR3JvdXAga2V5PVwiZm9ybXVsYXJpb3NcIiBjbGFzc05hbWU9XCJiYXJyYS1uYXZlZ2FjaW9uXCIgc29sby1sZWN0dXJhPXtwcm9wcy5zb2xvTGVjdHVyYT8nc2knOidubyd9ID5cclxuICAgICAgICAgICAge2JvdG9uZXNGb3JtdWxhcmlvLm1hcCgoYixpKT0+XHJcbiAgICAgICAgICAgICAgICA8QnV0dG9uIGNvbG9yPXtiLnF1ZT09Zm9yUGsuZm9ybXVsYXJpbz9cInByaW1hcnlcIjpcImluaGVyaXRcIn0gdmFyaWFudD1cIm91dGxpbmVkXCJcclxuICAgICAgICAgICAgICAgICAgICBpZD17Yi5pZH1cclxuICAgICAgICAgICAgICAgICAgICBrZXk9e2Ake2l9LSR7Yi5xdWV9LSR7Yi5yZXRyb2Nlc299YH1cclxuICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17IWIucXVlfVxyXG4gICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpPT57XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYi5xdWU9PSdoZHInP2Rpc3BhdGNoZXJzLlZPTFZFUl9IRFIoe30pOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2hlcnMuVk9MVkVSX0RFX0ZPUk1VTEFSSU8oe21hZ25pdHVkUmV0cm9jZXNvOmIucmV0cm9jZXNvfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYi5xdWU9PSdoZHInP251bGw6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwYXRjaEJ5UGFzcyhhY2Npb25fYWJyaXJfZm9ybXVsYXJpbyx7Zm9yUGs6b3BjaW9uZXMucGlsYUZvclBrW29wY2lvbmVzLnBpbGFGb3JQay5sZW5ndGgtYi5yZXRyb2Nlc29dfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJhYnJcIj57Yi5hYnJ9PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImxhYmVsXCI+e2IubGFiZWx9PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9CdXR0b24+XHJcbiAgICAgICAgICAgICl9XHJcbiAgICAgICAgPC9CdXR0b25Hcm91cD5cclxuICAgICAgICB7cHJvcHMuc29sb0xlY3R1cmE/PFR5cG9ncmFwaHkgY29tcG9uZW50PVwic3BhblwiIHN0eWxlPXt7bWFyZ2luOicwIDEwcHgnfX0+IChTb2xvIExlY3R1cmEpIDwvVHlwb2dyYXBoeT46bnVsbH1cclxuICAgICAgICB7cHJvcHMubW9kb0RpcmVjdG8/XHJcbiAgICAgICAgICAgIDw+XHJcbiAgICAgICAgICAgICAgICA8QnV0dG9uR3JvdXAga2V5PVwidm9sdmVyX3lfZ3JhYmFyXCIgc3R5bGU9e3ttYXJnaW46JzAgMCAwIDMwcHgnfX0+XHJcbiAgICAgICAgICAgICAgICAgICAgPEJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZD17SURfQk9UT05fQ0VSUkFSfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xvcj1cImluaGVyaXRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50PVwib3V0bGluZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXthc3luYyAoKT0+e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYocHJvcHMuc29sb0xlY3R1cmEgfHwgIWdldERpcnR5KCkpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlcnJhckRpcmVjdG8oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldENvbmZpcm1hQ2VycmFyKHRydWUpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8SUNPTi5FeGl0VG9BcHAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxEaWFsb2dcclxuICAgICAgICAgICAgICAgICAgICAgICAgb3Blbj17ISFjb25maXJtYUNlcnJhcn1cclxuICAgICAgICAgICAgICAgICAgICAgICAgLy9oYWNlIHF1ZSBubyBzZSBjaWVycmUgZWwgbWVuc2FqZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNsb3NlPXsoKT0+c2V0Q29uZmlybWFDZXJyYXIoZmFsc2UpfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhcmlhLWxhYmVsbGVkYnk9XCJhbGVydC1kaWFsb2ctdGl0bGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhcmlhLWRlc2NyaWJlZGJ5PVwiYWxlcnQtZGlhbG9nLWRlc2NyaXB0aW9uXCJcclxuICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxEaWFsb2dUaXRsZSBpZD1cImFsZXJ0LWRpYWxvZy10aXRsZVwiPkNvbmZpcm1lIGNpZXJyZSBkZSBlbmN1ZXN0YTwvRGlhbG9nVGl0bGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxEaWFsb2dDb250ZW50PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPERpYWxvZ0NvbnRlbnRUZXh0IGlkPVwiYWxlcnQtZGlhbG9nLWRlc2NyaXB0aW9uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRXN0w6EgcG9yIHNhbGlyIGRlIGxhIGVuY3Vlc3RhLCBzZSBwZXJkZXLDoW4gbG9zIGNhbWJpb3Mgbm8gZ3VhcmRhZG9zLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9EaWFsb2dDb250ZW50VGV4dD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9EaWFsb2dDb250ZW50PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8RGlhbG9nQWN0aW9ucz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxCdXR0b24gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCk9PntcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VycmFyRGlyZWN0bygpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX0gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I9XCJzZWNvbmRhcnlcIiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50PVwib3V0bGluZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NhcnRhciBjYW1iaW9zIHkgY2VycmFyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxCdXR0b24gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCk9PntcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0Q29uZmlybWFDZXJyYXIoZmFsc2UpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX0gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudD1cImNvbnRhaW5lZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWFyIGVkaXRhbmRvIGVuY3Vlc3RhXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L0RpYWxvZ0FjdGlvbnM+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9EaWFsb2c+XHJcbiAgICAgICAgICAgICAgICAgICAge3Byb3BzLnNvbG9MZWN0dXJhP251bGw6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxCdXR0b25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPXtcInNhdmUtYnV0dG9uXCJ9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcj1cImluaGVyaXRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudD1cIm91dGxpbmVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXt0cnVlfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17YXN5bmMgKCk9PnRydWV9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJQ09OLlNhdmUvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L0J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICA8L0J1dHRvbkdyb3VwPlxyXG4gICAgICAgICAgICA8Lz5cclxuICAgICAgICA6bnVsbH1cclxuICAgICAgICA8VHlwb2dyYXBoeSBjbGFzc05hbWU9XCJtb3N0cmFyLWZvclBrXCIgY29tcG9uZW50PVwic3BhblwiIHN0eWxlPXt7bWFyZ2luOicwIDEwcHgnfX0+IFxyXG4gICAgICAgICAgICB7VkVSX0RPTUlOSU8/PGRpdiBrZXk9e2RvbWluaW99PjxzcGFuPmRvbWluaW88L3NwYW4+PHNwYW4+e2RvbWluaW99PC9zcGFuPjwvZGl2PjonJ31cclxuICAgICAgICAgICAge2xpa2VBcihwcm9wcy5mb3JQaykuZmlsdGVyKChfLGspPT5rIT0nZm9ybXVsYXJpbycpLm1hcCgodixrKT0+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGtleT17a30+PHNwYW4+e2t9PC9zcGFuPjxzcGFuPnt2fTwvc3Bhbj48L2Rpdj5cclxuICAgICAgICAgICAgKS5hcnJheSgpfSBcclxuICAgICAgICA8L1R5cG9ncmFwaHk+XHJcbiAgICAgICAgPEZhc3RTZXR0dXAvPlxyXG4gICAgPC8+XHJcbn1cclxuXHJcbmZ1bmN0aW9uIEJvdG9uVm9sdmVyRW5EaXYoe2lkfTp7aWQ6c3RyaW5nfSl7XHJcbiAgICB2YXIge29wY2lvbmVzfSA9IHVzZVNlbGVjdG9yKChzdGF0ZTpDYXNvU3RhdGUpPT4oe29wY2lvbmVzOnN0YXRlLm9wY2lvbmVzfSkpO1xyXG4gICAgY29uc3QgZGlzcGF0Y2ggPSB1c2VEaXNwYXRjaCgpO1xyXG4gICAgdmFyIGVzVm9sdmVyID0gb3BjaW9uZXMucGlsYUZvclBrLmxlbmd0aD4wO1xyXG4gICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPVwiZGl2LWJvdG9uLXZvbHZlclwiPlxyXG4gICAgICAgIDxCdXR0b24gaWQ9e2lkfSBjbGFzc05hbWU9XCJib3Rvbi12b2x2ZXJcIlxyXG4gICAgICAgICAgICBvbkNsaWNrPXsoKT0+e1xyXG4gICAgICAgICAgICAgICAgaWYgKGVzVm9sdmVyKSB7IFxyXG4gICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoQnlQYXNzKGFjY2lvbl9hYnJpcl9mb3JtdWxhcmlvLHtmb3JQazpvcGNpb25lcy5waWxhRm9yUGtbb3BjaW9uZXMucGlsYUZvclBrLmxlbmd0aC0xXX0pO1xyXG4gICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoKGRpc3BhdGNoZXJzLlZPTFZFUl9ERV9GT1JNVUxBUklPKHttYWduaXR1ZFJldHJvY2VzbzoxfSkpXHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBib3RvbkNlcnJhciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKElEX0JPVE9OX0NFUlJBUikgfHwgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoSURfQk9UT05fVk9MVkVSX0hEUikgXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGJvdG9uQ2VycmFyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvdG9uQ2VycmFyLmNsaWNrKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9fVxyXG4gICAgICAgID4gPElDT04uQ2hldnJvbkxlZnQvPntlc1ZvbHZlciA/IFwiIFZvbHZlclwiIDogXCIgQ2VycmFyXCJ9PC9CdXR0b24+XHJcbiAgICA8L2Rpdj5cclxufVxyXG5cclxuZnVuY3Rpb24gRm9ybXVsYXJpb0Rlc3BsaWVndWUocHJvcHM6e2ZvclBrOkZvclBrfSl7XHJcbiAgICB2YXIgZm9yUGsgPSBwcm9wcy5mb3JQaztcclxuICAgIHZhciB7Zm9ybXVsYXJpbywgbW9kb0Rlc3BsaWVndWUsIG1vZG8sIG9wY2lvbmVzfSBcclxuICAgICAgICA9IHVzZVNlbGVjdG9yVml2aWVuZGEocHJvcHMuZm9yUGspO1xyXG4gICAgdmFyIHNvbG9MZWN0dXJhID0gZ2V0RGF0b3NCeVBhc3MoKS5zb2xvTGVjdHVyYTtcclxuICAgIGNvbnN0IGRpc3BhdGNoID0gdXNlRGlzcGF0Y2goKTtcclxuICAgIHZhciBlc1ZvbHZlciA9IG9wY2lvbmVzLnBpbGFGb3JQay5sZW5ndGg+MDtcclxuICAgIHVzZUVmZmVjdCgoKT0+e1xyXG4gICAgICAgIHZhciBjb250cm9sU2Nyb2xsPSgpPT57XHJcbiAgICAgICAgICAgIHZhciBhcnJpYmEgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZmFiLWFjdGl2by1hcnJpYmEnKTtcclxuICAgICAgICAgICAgaWYoYXJyaWJhKXtcclxuICAgICAgICAgICAgICAgIHNldFZhbG9yRGlzdGludG8oYXJyaWJhLnN0eWxlLCAndmlzaWJpbGl0eScsXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxyXG4gICAgICAgICAgICAgICAgICAgIGFycmliYS5lbFRvcFZpc2liaWxpemFyICE9bnVsbCAmJiBhcnJpYmEuZWxUb3BWaXNpYmlsaXphciArIDEwIFxyXG4gICAgICAgICAgICAgICAgICAgIDwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcCA/ICd2aXNpYmxlJyA6ICdoaWRkZW4nXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciBhYmFqbyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmYWItYWN0aXZvLWFiYWpvJyk7XHJcbiAgICAgICAgICAgIGlmKGFiYWpvKXtcclxuICAgICAgICAgICAgICAgIHNldFZhbG9yRGlzdGludG8oYWJham8uc3R5bGUsICd2aXNpYmlsaXR5JywgXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxyXG4gICAgICAgICAgICAgICAgICAgIGFiYWpvLmVsQm90dG9tVmlzaWJpbGl6YXIgIT0gbnVsbCAmJiBhYmFqby5lbEJvdHRvbVZpc2liaWxpemFyIC0gMjBcclxuICAgICAgICAgICAgICAgICAgICA+IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3AgKyB3aW5kb3cuaW5uZXJIZWlnaHQgKiAwLjcgPyAndmlzaWJsZScgOiAnaGlkZGVuJ1xyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgY29udHJvbFNjcm9sbCk7XHJcbiAgICAgICAgY29udHJvbFNjcm9sbCgpO1xyXG4gICAgICAgIHJldHVybiAoKT0+e1xyXG4gICAgICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgY29udHJvbFNjcm9sbCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSlcclxuICAgIC8vIFRPRE8gVm9sdmVyIGEgcG9uZXIgZWwgbW92aW1pZW50byBhIGxhIGFjdHVhbFxyXG4gICAgdmFyIGFjdHVhbDphbnlcclxuICAgIHZhciBjb21wbGV0bzphbnlcclxuICAgIHZhciBvbkNsaWNrU2FsdGFyQWN0dWFsID0gKCk9PntcclxuICAgICAgICB2YXIge3ZhcmlhYmxlQWN0dWFsfSA9IGRpc3BhdGNoQnlQYXNzKGFjY2lvbl9yZWdpc3RyYXJfcmVzcHVlc3RhLCB7cmVzcHVlc3RhOm51bGwsIHZhcmlhYmxlOk5PX0NBTUJJQVJfX1NPTE9fVFJBRVJfU1RBVFVTLCBmb3JQazpwcm9wcy5mb3JQa30pO1xyXG4gICAgICAgIGlmKHZhcmlhYmxlQWN0dWFsKXtcclxuICAgICAgICAgICAgZW5mb2NhckVsZW1lbnRvRGVWYXJpYWJsZSh2YXJpYWJsZUFjdHVhbClcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICB2YXIgbGlzdGFNb2RvczpNb2RvRGVzcGxpZWd1ZVtdPVsnbWV0YWRhdG9zJywncmVsZXZhbWllbnRvJywnUERGJ107XHJcbiAgICBbJ2JvdG9uLXZvbHZlci0xJywgJ2JvdG9uLXZvbHZlci0yJ10uZm9yRWFjaChpZD0+e1xyXG4gICAgICAgIHJlZ2lzdHJhckVsZW1lbnRvKHtpZCwgZGlyZWN0OnRydWUsXHJcbiAgICAgICAgICAgIGZ1bjooXHJcbiAgICAgICAgICAgICAgICByOlJlc3B1ZXN0YXMsIFxyXG4gICAgICAgICAgICAgICAgZmVlZGJhY2tGb3JtOiBGb3JtU3RydWN0dXJlU3RhdGU8SWRWYXJpYWJsZSwgVmFsb3IsIElkRmluPiwgXHJcbiAgICAgICAgICAgICAgICBlbGVtZW50bzpIVE1MRGl2RWxlbWVudCwgXHJcbiAgICAgICAgICAgICAgICBmZWVkYmFja0FsbDp7W2Zvcm11bGFyaW8gaW4gUGxhaW5Gb3JQa106Rm9ybVN0cnVjdHVyZVN0YXRlPElkVmFyaWFibGUsIFZhbG9yLCBJZEZpbj59LCBcclxuICAgICAgICAgICAgICAgIF9lc3RydWN0dXJhOkVzdHJ1Y3R1cmFcclxuICAgICAgICAgICAgKT0+e1xyXG4gICAgICAgICAgICAgICAgZWxlbWVudG8uc2V0QXR0cmlidXRlKCdyZXN1bWVuLWVzdGFkbycsZXNWb2x2ZXI/ZmVlZGJhY2tGb3JtLnJlc3VtZW46Y2FsY3VsYXJSZXN1bWVuVml2aWVuZGEoZm9yUGssIGZlZWRiYWNrQWxsLCByKS5yZXN1bWVuRXN0YWRvKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICB9KVxyXG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvciBlc3BlY2lhbCBoYXkgcXVlIGxlZXJsbyBlbiBlbCBwYXJzZXIgZGUgY2FzaWxsZXJvcyBzaSBlc3RvIHRlcm1pbmEgcXVlZGFuZG8gYXPDrVxyXG4gICAgdmFyIHBhbnRhbGxhQ29tcGxldGEgPSBmb3JtdWxhcmlvLmVzcGVjaWFsPy5wYW50YWxsYUNvbXBsZXRhO1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgICA8PlxyXG4gICAgICAgICAgICA8QXBwQmFyIHBvc2l0aW9uPVwiZml4ZWRcIiBjb2xvcj17c29sb0xlY3R1cmE/J3NlY29uZGFyeSc6J3ByaW1hcnknfT5cclxuICAgICAgICAgICAgICAgIDxUb29sYmFyPlxyXG4gICAgICAgICAgICAgICAgICAgIDxCYXJyYURlTmF2ZWdhY2lvbiBmb3JQaz17Zm9yUGt9IHNvbG9MZWN0dXJhPXtzb2xvTGVjdHVyYSB8fCBmYWxzZX0gbW9kb0RpcmVjdG89e29wY2lvbmVzLm1vZG9EaXJlY3RvfS8+XHJcbiAgICAgICAgICAgICAgICA8L1Rvb2xiYXI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGlkPVwibWluaS1jb25zb2xlXCI+PC9kaXY+XHJcbiAgICAgICAgICAgIDwvQXBwQmFyPlxyXG4gICAgICAgICAgICA8bWFpbj5cclxuICAgICAgICAgICAgICAgIDxQYXBlciBjbGFzc05hbWU9XCJmb3JtdWxhcmlvXCIgbW9kby1kZXNwbGllZ3VlPXttb2RvRGVzcGxpZWd1ZX0gdmVyLW51bS1vcGNpb25lcz17b3BjaW9uZXMuY29uQ2FtcG9PcGNpb25lcz8nU0knOidOTyd9PlxyXG4gICAgICAgICAgICAgICAgICAgIHttb2RvLmRlbW8/PGRpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPFR5cG9ncmFwaHkgY29tcG9uZW50PVwic3BhblwiPk1vZG8gZGUgZGVzcGxpZWd1ZTo8L1R5cG9ncmFwaHk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxCdXR0b25Hcm91cD5cclxuICAgICAgICAgICAgICAgICAgICAgICAge2xpc3RhTW9kb3MubWFwKG1vZG89PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPEJ1dHRvbiBrZXk9e21vZG99IHZhcmlhbnQ9e21vZG89PW1vZG9EZXNwbGllZ3VlP1wiY29udGFpbmVkXCI6XCJvdXRsaW5lZFwifSBvbkNsaWNrPXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKT0+ZGlzcGF0Y2goZGlzcGF0Y2hlcnMuTU9ET19ERVNQTElFR1VFKHttb2RvRGVzcGxpZWd1ZTptb2RvfSkpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Pnttb2RvfTwvQnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICApfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L0J1dHRvbkdyb3VwPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PjpudWxsfVxyXG4gICAgICAgICAgICAgICAgICAgIHtwYW50YWxsYUNvbXBsZXRhP251bGw6PEJvdG9uVm9sdmVyRW5EaXYgaWQ9XCJib3Rvbi12b2x2ZXItMVwiLz59XHJcbiAgICAgICAgICAgICAgICAgICAge3BhbnRhbGxhQ29tcGxldGE/bnVsbDo8Rm9ybXVsYXJpb0VuY2FiZXphZG8gY2FzaWxsZXJvPXtmb3JtdWxhcmlvfS8+fVxyXG4gICAgICAgICAgICAgICAgICAgIDxEZXNwbGVnYXJDb250ZW5pZG9JbnRlcm5vQmxvcXVlT0Zvcm11bGFyaW8gYmxvcXVlT0Zvcm11bGFyaW89e2Zvcm11bGFyaW99IGZvcm11bGFyaW89e2Zvcm11bGFyaW99IGZvclBrPXtmb3JQa30gbXVsdGlwbGU9e2ZhbHNlfS8+XHJcbiAgICAgICAgICAgICAgICAgICAge3BhbnRhbGxhQ29tcGxldGE/bnVsbDo8Qm90b25Wb2x2ZXJFbkRpdiBpZD1cImJvdG9uLXZvbHZlci0yXCIvPn1cclxuICAgICAgICAgICAgICAgIDwvUGFwZXI+XHJcbiAgICAgICAgICAgICAgICA8RmFiIGlkPSdmYWItYWN0aXZvLWFycmliYScgY29sb3I9XCJwcmltYXJ5XCIgYXJpYS1sYWJlbD1cImFkZFwiIG9uQ2xpY2s9e29uQ2xpY2tTYWx0YXJBY3R1YWx9PlxyXG4gICAgICAgICAgICAgICAgICAgIDxJQ09OLktleWJvYXJkQXJyb3dVcCAvPlxyXG4gICAgICAgICAgICAgICAgPC9GYWI+XHJcbiAgICAgICAgICAgICAgICA8RmFiIGlkPSdmYWItYWN0aXZvLWFiYWpvJyBjb2xvcj1cInByaW1hcnlcIiBhcmlhLWxhYmVsPVwiYWRkXCIgb25DbGljaz17b25DbGlja1NhbHRhckFjdHVhbH0+XHJcbiAgICAgICAgICAgICAgICAgICAgPElDT04uS2V5Ym9hcmRBcnJvd0Rvd24gLz5cclxuICAgICAgICAgICAgICAgIDwvRmFiPlxyXG4gICAgICAgICAgICAgICAgPEZhYiBpZD0nZmFiLWVycm9yLWFycmliYScgdmFyaWFudD1cImV4dGVuZGVkXCIgY29sb3I9XCJzZWNvbmRhcnlcIiBhcmlhLWxhYmVsPVwiZWRpdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxJQ09OLk5hdmlnYXRpb24gLz5cclxuICAgICAgICAgICAgICAgICAgICBFcnJvclxyXG4gICAgICAgICAgICAgICAgPC9GYWI+ICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgPEZhYiBpZD0nZmFiLWVycm9yLWFiYWpvJyB2YXJpYW50PVwiZXh0ZW5kZWRcIiBjb2xvcj1cInNlY29uZGFyeVwiIGFyaWEtbGFiZWw9XCJlZGl0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPElDT04uTmF2aWdhdGlvbkRvd24gLz5cclxuICAgICAgICAgICAgICAgICAgICBFcnJvclxyXG4gICAgICAgICAgICAgICAgPC9GYWI+ICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9J2VzcGFjaW8tZmluYWwtZm9ybXVsYXJpbyc+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICB7b3BjaW9uZXMubW9kb0JvcnJhclJlc3B1ZXN0YSAmJiBvcGNpb25lcy5mb3JQaz88RGVzcGxlZ2FyQ29uZmlybWFyQm9ycmFyUmVzcHVlc3RhIGZvclBrPXtvcGNpb25lcy5mb3JQa30gdmFyaWFibGVCb3JyYXI9e29wY2lvbmVzLm1vZG9Cb3JyYXJSZXNwdWVzdGF9Lz46bnVsbH1cclxuICAgICAgICAgICAgPC9tYWluPlxyXG4gICAgICAgIDwvPlxyXG4gICAgKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIEF0cmlidXRvKHByb3BzOntub21icmU6c3RyaW5nLCB2YWxvcjphbnl9KXtcclxuICAgIHJldHVybiBwcm9wcy52YWxvciE9bnVsbCAmJiBwcm9wcy52YWxvciE9Jyc/PHNwYW4gY2xhc3NOYW1lPVwiYXRyaWJ1dG8tcGFyXCI+XHJcbiAgICAgICAge3Byb3BzLm5vbWJyZT88c3BhbiBjbGFzc05hbWU9XCJhdHJpYnV0by1ub21icmVcIj57cHJvcHMubm9tYnJlfTwvc3Bhbj46bnVsbH1cclxuICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwiYXRyaWJ1dG8tdmFsb3JcIj57cHJvcHMudmFsb3IudG9TdHJpbmcoKX08L3NwYW4+XHJcbiAgICA8L3NwYW4+Om51bGxcclxufVxyXG5cclxuY29uc3QgbGlzdGFFc3RhZG9zQ2FyZ2E6RXN0YWRvQ2FyZ2FbXT1bJ3Jlc3VtZW4nLCdyZWxldmFtaWVudG8nLCdyZWNpYm8nXTtcclxudmFyIHJlc3VtaWRvcmVzID0gW1xyXG4gICAge25vbWJyZTonUkVBJyAgICAgICAgICwgZjoocnI6UmVzcHVlc3Rhc1JhaXopPT5yci5yZXN1bWVuRXN0YWRvPT1cIm9rXCIgICAgICAgICAgfSxcclxuICAgIHtub21icmU6J0NpdGEgcGFjdGFkYScsIGY6KHJyOlJlc3B1ZXN0YXNSYWl6KT0+cnIucmVzdW1lbkVzdGFkbz09XCJjaXRhIHBhY3RhZGFcIn0sXHJcbiAgICB7bm9tYnJlOidQZW5kaWVudGVzJyAgLCBmOihycjpSZXNwdWVzdGFzUmFpeik9PnJyLnJlc3VtZW5Fc3RhZG89PVwidmFjaW9cIiAgICAgICB9LFxyXG5dO1xyXG5cclxucmVzdW1pZG9yZXMucHVzaChcclxuICAgIHtub21icmU6J090cm9zJywgZjpyZXN1bWlkb3Jlcy5yZWR1Y2UoKGcscik9Pihycj0+IXIuZihycikgJiYgZyhycikgKSwoXzpSZXNwdWVzdGFzUmFpeik9PnRydWUpIH1cclxuKVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIERlc3BsZWdhckxpbmVhUmVzdW1lblVBUHJpbmNpcGFsKHByb3BzOntcclxuICAgIG51bVZpdmllbmRhOklkRW5jLFxyXG4gICAgZm9ybVByaW5jaXBhbDpJZEZvcm11bGFyaW8sXHJcbiAgICB0YXJlYTogc3RyaW5nLFxyXG4gICAgcmVzcHVlc3RhczpSZXNwdWVzdGFzUmFpeixcclxufSl7XHJcbiAgICBjb25zdCB7bnVtVml2aWVuZGEsIHJlc3B1ZXN0YXMsIGZvcm1QcmluY2lwYWwsIHRhcmVhfSA9IHByb3BzO1xyXG4gICAgY29uc3QgaWQ9J3Zpdi0nK251bVZpdmllbmRhO1xyXG4gICAgY29uc3QgZm9yUGs6Rm9yUGs9e2Zvcm11bGFyaW86Zm9ybVByaW5jaXBhbCwgdml2aWVuZGE6TnVtYmVyKG51bVZpdmllbmRhKSBhcyBJZEVuY307IC8vbm8gcXVpdGFyIGVsIGNhc3RlbyBwb3JxdWUgdmllbmUgY29tbyB0ZXh0byB5IG5lY2VzaXRvIHF1ZSBzZWEgbsO6bWVyb1xyXG4gICAgdmFyIHRlbSA9IGdldERhdG9zQnlQYXNzKCkuaW5mb3JtYWNpb25IZHJbbnVtVml2aWVuZGFdLnRlbTtcclxuICAgIHZhciBkaXNwYXRjaCA9IHVzZURpc3BhdGNoKCk7XHJcbiAgICB1c2VFZmZlY3QoKCk9PntcclxuICAgICAgICB2b2xjYWRvSW5pY2lhbEVsZW1lbnRvc1JlZ2lzdHJhZG9zKGZvclBrKTtcclxuICAgICAgICBpbnRlbnRhckJhY2t1cChmb3JQaylcclxuICAgIH0pXHJcbiAgICByZWdpc3RyYXJFbGVtZW50byh7aWQsIGRpcmVjdDp0cnVlLFxyXG4gICAgICAgIGZ1bjooXHJcbiAgICAgICAgICAgIHI6UmVzcHVlc3RhcywgXHJcbiAgICAgICAgICAgIF9mZWVkYmFja0Zvcm06IEZvcm1TdHJ1Y3R1cmVTdGF0ZTxJZFZhcmlhYmxlLCBWYWxvciwgSWRGaW4+LCBcclxuICAgICAgICAgICAgZWxlbWVudG86SFRNTERpdkVsZW1lbnQsIFxyXG4gICAgICAgICAgICBmZWVkYmFja0FsbDp7W2Zvcm11bGFyaW8gaW4gUGxhaW5Gb3JQa106Rm9ybVN0cnVjdHVyZVN0YXRlPElkVmFyaWFibGUsIFZhbG9yLCBJZEZpbj59LCBcclxuICAgICAgICAgICAgX2VzdHJ1Y3R1cmE6RXN0cnVjdHVyYVxyXG4gICAgICAgICk9PntcclxuICAgICAgICAgICAgLy9wcmVndW50byBzaSBlcyBsYSBtaXNtYSB2aXZpZW5kYSBwb3JxdWUgbGEgZnVuY2lvbiBzZSBkaXNwYXJhIFxyXG4gICAgICAgICAgICAvL2NvbiB0b2RhcyBsYXMgY29tYmluYWNpb25lcyBkZSByZXNwdWVzdGFzIHBhcmEgY2FkYSBmb3JQa1xyXG4gICAgICAgICAgICAvL0B0cy1pZ25vcmUgdml2aWVuZGEgZXhpc3RlXHJcbiAgICAgICAgICAgIGlmKHIudml2aWVuZGEgPT0gZm9yUGsudml2aWVuZGEpe1xyXG4gICAgICAgICAgICAgICAgZWxlbWVudG8uc2V0QXR0cmlidXRlKCdyZXN1bWVuLWVzdGFkbycsY2FsY3VsYXJSZXN1bWVuVml2aWVuZGEoZm9yUGssIGZlZWRiYWNrQWxsLCByKS5yZXN1bWVuRXN0YWRvKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICAgICAgXHJcbiAgICB9KVxyXG4gICAgcmV0dXJuIDxUYWJsZVJvdyBrZXk9e251bVZpdmllbmRhfT5cclxuICAgICAgICA8VGFibGVDZWxsPlxyXG4gICAgICAgICAgICB7dGVtP1xyXG4gICAgICAgICAgICAgICAgPD5cclxuICAgICAgICAgICAgICAgICAgICA8RGVzcGxlZ2FyVGVtIHRlbT17dGVtfS8+XHJcbiAgICAgICAgICAgICAgICAgICAge3Jlc3B1ZXN0YXNbJ3Jlc3VtZW5Fc3RhZG8nIGFzIElkVmFyaWFibGVdPT1cImNpdGEgcGFjdGFkYVwiP1xyXG4gICAgICAgICAgICAgICAgICAgICAgICA8RGVzcGxlZ2FyQ2l0YVBhY3RhZGEgcmVzcHVlc3Rhcz17cmVzcHVlc3Rhc30vPlxyXG4gICAgICAgICAgICAgICAgICAgIDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgPERlc3BsZWdhckNpdGFQYWN0YWRhWVNlbGVjY2lvbmFkb0FudGVyaW9yVGVtIHRlbT17dGVtfS8+XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgPC8+XHJcbiAgICAgICAgICAgIDpudWxsfVxyXG4gICAgICAgIDwvVGFibGVDZWxsPlxyXG4gICAgICAgIDxUYWJsZUNlbGw+XHJcbiAgICAgICAgICAgIHt0YXJlYX1cclxuICAgICAgICA8L1RhYmxlQ2VsbD5cclxuICAgICAgICA8VGFibGVDZWxsPlxyXG4gICAgICAgICAgICA8QnV0dG9uIGlkPXtpZH0gb25DbGljaz17KCk9PiBcclxuICAgICAgICAgICAgICAgIGRpc3BhdGNoKGRpc3BhdGNoZXJzLkNBTUJJQVJfRk9STVVMQVJJTyh7Zm9yUGssIGFwaWxhclZ1ZWx0YTpmYWxzZX0pKVxyXG4gICAgICAgICAgICB9PlxyXG4gICAgICAgICAgICAgICAge251bVZpdmllbmRhLnRvU3RyaW5nKCl9XHJcbiAgICAgICAgICAgIDwvQnV0dG9uPlxyXG4gICAgICAgIDwvVGFibGVDZWxsPlxyXG4gICAgPC9UYWJsZVJvdz5cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIERlc3BsZWdhckNhcmdhKHByb3BzOntcclxuICAgIGNhcmdhOkNhcmdhLCBcclxuICAgIGlkQ2FyZ2E6SWRDYXJnYSwgXHJcbiAgICBwb3NpY2lvbjpudW1iZXIsXHJcbiAgICBpbmZvcm1hY2lvbkhkcjpJbmZvcm1hY2lvbkhkciwgXHJcbiAgICByZXNwdWVzdGFzOiBSZXNwdWVzdGFMYXNVQSxcclxuICAgIGZlZWRiYWNrUm93VmFsaWRhdG9yOntcclxuICAgICAgICBbZm9ybXVsYXJpbyBpbiBQbGFpbkZvclBrXTpGb3JtU3RydWN0dXJlU3RhdGU8SWRWYXJpYWJsZSwgVmFsb3IsIElkRmluPiBcclxuICAgIH1cclxufSl7XHJcbiAgICBjb25zdCB7Y2FyZ2EsIGlkQ2FyZ2EsIGluZm9ybWFjaW9uSGRyLCByZXNwdWVzdGFzfSA9IHByb3BzO1xyXG4gICAgcmV0dXJuIDxQYXBlciBjbGFzc05hbWU9XCJjYXJnYVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiaW5mb3JtYWNpb24tY2FyZ2FcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJjYXJnYVwiPsOBcmVhOiB7aWRDYXJnYX08L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJvYnNlcnZhY2lvbmVzXCI+e2NhcmdhLm9ic2VydmFjaW9uZXN9PC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJpbmZvcm1hY2lvbi1jYXJnYVwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZlY2hhXCI+e2NhcmdhLmZlY2hhfTwvZGl2PlxyXG4gICAgICAgICAgICB7LypcclxuICAgICAgICAgICAgPEJ1dHRvbkdyb3VwPlxyXG4gICAgICAgICAgICB7bGlzdGFFc3RhZG9zQ2FyZ2EubWFwKGVzdGFkb19jYXJnYT0+XHJcbiAgICAgICAgICAgICAgICA8QnV0dG9uIGtleT17ZXN0YWRvX2NhcmdhfSB2YXJpYW50PXtlc3RhZG9fY2FyZ2E9PWNhcmdhLmVzdGFkb19jYXJnYT9cImNvbnRhaW5lZFwiOlwib3V0bGluZWRcIn0gb25DbGljaz17XHJcbiAgICAgICAgICAgICAgICAgICAgKCk9PmRpc3BhdGNoKGRpc3BhdGNoZXJzLkVTVEFET19DQVJHQSh7aWRDYXJnYSwgZXN0YWRvX2NhcmdhfSkpXHJcbiAgICAgICAgICAgICAgICB9Pntlc3RhZG9fY2FyZ2F9PC9CdXR0b24+XHJcbiAgICAgICAgICAgICl9XHJcbiAgICAgICAgICAgIDwvQnV0dG9uR3JvdXA+XHJcbiAgICAgICAgICAgICovfVxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIHtjYXJnYS5lc3RhZG9fY2FyZ2E9PW51bGwgJiYgIXByb3BzLnBvc2ljaW9uIHx8IGNhcmdhLmVzdGFkb19jYXJnYT09J3JlbGV2YW1pZW50byc/XHJcbiAgICAgICAgPFRhYmxlIGNsYXNzTmFtZT1cInRhYmxhLWNhcmdhLWhvamEtZGUtcnV0YVwiPlxyXG4gICAgICAgICAgICA8Y29sZ3JvdXA+XHJcbiAgICAgICAgICAgICAgICA8Y29sIHN0eWxlPXt7d2lkdGg6XCI3NSVcIn19Lz5cclxuICAgICAgICAgICAgICAgIDxjb2wgc3R5bGU9e3t3aWR0aDpcIjEwJVwifX0vPiAgICBcclxuICAgICAgICAgICAgICAgIDxjb2wgc3R5bGU9e3t3aWR0aDpcIjE1JVwifX0vPiAgICBcclxuICAgICAgICAgICAgPC9jb2xncm91cD5cclxuICAgICAgICAgICAgPFRhYmxlSGVhZCBzdHlsZT17e2ZvbnRTaXplOiBcIjEuMnJlbVwifX0+XHJcbiAgICAgICAgICAgICAgICA8VGFibGVSb3cgY2xhc3NOYW1lPVwidHItY2FyZ2FcIj5cclxuICAgICAgICAgICAgICAgICAgICA8VGFibGVDZWxsPmRvbWljaWxpbzwvVGFibGVDZWxsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxUYWJsZUNlbGw+dGFyZWE8L1RhYmxlQ2VsbD5cclxuICAgICAgICAgICAgICAgICAgICA8VGFibGVDZWxsPmVuYzwvVGFibGVDZWxsPlxyXG4gICAgICAgICAgICAgICAgPC9UYWJsZVJvdz5cclxuICAgICAgICAgICAgPC9UYWJsZUhlYWQ+XHJcbiAgICAgICAgICAgIDxUYWJsZUJvZHk+XHJcbiAgICAgICAgICAgICAgICB7bGlrZUFyKGluZm9ybWFjaW9uSGRyKS5maWx0ZXIoKGluZm9ybWFjaW9uKT0+aW5mb3JtYWNpb24udGVtLmNhcmdhPT1pZENhcmdhKS5tYXAoKGluZm9ybWFjaW9uLCBudW1WaXZpZW5kYSk9PlxyXG4gICAgICAgICAgICAgICAgICAgIDxEZXNwbGVnYXJMaW5lYVJlc3VtZW5VQVByaW5jaXBhbCBcclxuICAgICAgICAgICAgICAgICAgICAgICAga2V5PXtudW1WaXZpZW5kYX0gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG51bVZpdmllbmRhPXtudW1WaXZpZW5kYX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZWE9e2luZm9ybWFjaW9uLnRhcmVhLnRhcmVhfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtUHJpbmNpcGFsPXtpbmZvcm1hY2lvbi50YXJlYS5tYWluX2Zvcm19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXM9e3Jlc3B1ZXN0YXMudml2aWVuZGFzW251bVZpdmllbmRhXSBhcyBSZXNwdWVzdGFzUmFpen1cclxuICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgKS5hcnJheSgpfVxyXG4gICAgICAgICAgICA8L1RhYmxlQm9keT5cclxuICAgICAgICA8L1RhYmxlPjpcclxuICAgICAgICA8VGFibGU+XHJcbiAgICAgICAgICAgIDxUYWJsZUhlYWQgc3R5bGU9e3tmb250U2l6ZTogXCIxLjJyZW1cIn19PlxyXG4gICAgICAgICAgICAgICAgPFRhYmxlUm93IGNsYXNzTmFtZT1cInRyLWNhcmdhXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3Jlc3VtaWRvcmVzLm1hcCgocmVzdW1pZG9yOiB0eXBlb2YgcmVzdW1pZG9yZXNbMF0sIGk6bnVtYmVyKT0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxUYWJsZUNlbGwga2V5PXtpfT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtyZXN1bWlkb3Iubm9tYnJlfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L1RhYmxlQ2VsbD5cclxuICAgICAgICAgICAgICAgICAgICApfVxyXG4gICAgICAgICAgICAgICAgPC9UYWJsZVJvdz5cclxuICAgICAgICAgICAgPC9UYWJsZUhlYWQ+XHJcbiAgICAgICAgPC9UYWJsZT5cclxuICAgICAgICB9XHJcbiAgICA8L1BhcGVyPlxyXG59XHJcbmV4cG9ydCBmdW5jdGlvbiBEZXNwbGVnYXJDaXRhUGFjdGFkYShwcm9wczp7cmVzcHVlc3RhczpSZXNwdWVzdGFzfSl7XHJcbiAgICBjb25zdCB7cmVzcHVlc3Rhc30gPSBwcm9wcztcclxuICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT1cImNpdGEtcGFjdGFkYVwiPlxyXG4gICAgICAgIDxkaXY+PEF0cmlidXRvIG5vbWJyZT1cIkNpdGEgcGFjdGFkYSBjb24gXCIgdmFsb3I9e3Jlc3B1ZXN0YXNbcDEyXX0vPjwvZGl2PlxyXG4gICAgICAgIDxkaXY+PEF0cmlidXRvIG5vbWJyZT1cIkNlbC46XCIgdmFsb3I9e3Jlc3B1ZXN0YXNbc3AyXX0vPjwvZGl2PlxyXG4gICAgICAgIDxkaXY+PEF0cmlidXRvIG5vbWJyZT1cIlRlbC46XCIgdmFsb3I9e3Jlc3B1ZXN0YXNbc3AzXX0vPjwvZGl2PlxyXG4gICAgICAgIDxkaXY+PEF0cmlidXRvIG5vbWJyZT1cIkZlY2hhOlwiIHZhbG9yPXtyZXNwdWVzdGFzW3NwNF19Lz48L2Rpdj5cclxuICAgICAgICA8ZGl2PjxBdHJpYnV0byBub21icmU9XCJIb3JhOlwiIHZhbG9yPXtyZXNwdWVzdGFzW3NwNV19Lz48L2Rpdj5cclxuICAgIDwvZGl2PlxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gRGVzcGxlZ2FyQ2l0YVBhY3RhZGFZU2VsZWNjaW9uYWRvQW50ZXJpb3JUZW0ocHJvcHM6e3RlbTpURU19KXtcclxuICAgIGNvbnN0IHt0ZW19ID0gcHJvcHM7XHJcbiAgICByZXR1cm4gPGRpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRlbS1jaXRhXCI+XHJcbiAgICAgICAgICAgIDxBdHJpYnV0byBub21icmU9XCJDaXRhOlwiIHZhbG9yPXt0ZW0uY2l0YX0vPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBEZXNwbGVnYXJUZW0ocHJvcHM6e3RlbTpURU19KXtcclxuICAgIGNvbnN0IHt0ZW19ID0gcHJvcHM7XHJcbiAgICByZXR1cm4gPGRpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRlbS1kb21pY2lsaW9cIj57dGVtLm5vbWNhbGxlfSB7dGVtLm5yb2NhdGFzdHJhbH0gPEF0cmlidXRvIG5vbWJyZT1cInBpc29cIiB2YWxvcj17dGVtLnBpc299Lz4gPEF0cmlidXRvIG5vbWJyZT1cImRwdG9cIiB2YWxvcj17dGVtLmRlcGFydGFtZW50b30vPiA8L2Rpdj5cclxuICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICA8QXRyaWJ1dG8gbm9tYnJlPVwic2VjdG9yXCIgdmFsb3I9e3RlbS5zZWN0b3J9Lz5cclxuICAgICAgICAgICAgPEF0cmlidXRvIG5vbWJyZT1cImVkaWZpY2lvXCIgdmFsb3I9e3RlbS5lZGlmaWNpb30vPlxyXG4gICAgICAgICAgICA8QXRyaWJ1dG8gbm9tYnJlPVwiY2FzYVwiIHZhbG9yPXt0ZW0uY2FzYX0vPlxyXG4gICAgICAgICAgICA8QXRyaWJ1dG8gbm9tYnJlPVwiZW50cmFkYVwiIHZhbG9yPXt0ZW0uZW50cmFkYX0vPlxyXG4gICAgICAgICAgICA8QXRyaWJ1dG8gbm9tYnJlPVwiaGFiaXRhY2lvblwiIHZhbG9yPXt0ZW0uaGFiaXRhY2lvbn0vPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGVtLW9ic2VydmFjaW9uZXNcIj5cclxuICAgICAgICAgICAge3RlbS5vYnNlcnZhY2lvbmVzfSBcclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gSG9qYURlUnV0YURlc3BsaWVndWUoKXtcclxuICAgIHZhciB7Y2FyZ2FzLCBudW1fc2luY3JvLCBpbmZvcm1hY2lvbkhkciwgcmVzcHVlc3Rhc30gPSBnZXREYXRvc0J5UGFzcygpO1xyXG4gICAgdmFyIHttb2RvfSA9IHVzZVNlbGVjdG9yKChzdGF0ZTpDYXNvU3RhdGUpPT4oe21vZG86c3RhdGUubW9kb30pKTtcclxuICAgIHZhciBmZWVkYmFja1Jvd1ZhbGlkYXRvciA9IGdldEZlZWRiYWNrUm93VmFsaWRhdG9yKClcclxuICAgIHZhciBkaXNwYXRjaCA9IHVzZURpc3BhdGNoKCk7XHJcbiAgICBjb25zdCB1cGRhdGVPbmxpbmVTdGF0dXMgPSBmdW5jdGlvbigpe1xyXG4gICAgICAgIHNldE9ubGluZSh3aW5kb3cubmF2aWdhdG9yLm9uTGluZSk7XHJcbiAgICB9XHJcbiAgICBjb25zdCBhcHBWZXJzaW9uID0gZ2V0Q2FjaGVWZXJzaW9uKCk7XHJcbiAgICBjb25zdCBbb25saW5lLCBzZXRPbmxpbmVdID0gdXNlU3RhdGUod2luZG93Lm5hdmlnYXRvci5vbkxpbmUpO1xyXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ29ubGluZScsICB1cGRhdGVPbmxpbmVTdGF0dXMpO1xyXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ29mZmxpbmUnLCB1cGRhdGVPbmxpbmVTdGF0dXMpO1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgICA8PlxyXG4gICAgICAgICAgICA8QXBwQmFyIHBvc2l0aW9uPVwiZml4ZWRcIj5cclxuICAgICAgICAgICAgICAgIDxUb29sYmFyPlxyXG4gICAgICAgICAgICAgICAgICAgIDxUeXBvZ3JhcGh5IHZhcmlhbnQ9XCJoNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBIb2phIGRlIHJ1dGFcclxuICAgICAgICAgICAgICAgICAgICA8L1R5cG9ncmFwaHk+XHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vPEljb25CdXR0b24gc3R5bGU9e3ttYXJnaW5Ub3A6JzNweCd9fVxyXG4gICAgICAgICAgICAgICAgICAgIC8vICAgIGNvbG9yPVwiaW5oZXJpdFwiXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gICAgLy9vbkNsaWNrPXsvKmRpc3BhdGNoIHF1ZSBsbGV2YSBhIHBhbnRhbGxhIG9wY2lvbmVzKi99XHJcbiAgICAgICAgICAgICAgICAgICAgLy8+XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gICAgPElDT04uU2V0dGluZ3MvPlxyXG4gICAgICAgICAgICAgICAgICAgIC8vPC9JY29uQnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB7b25saW5lP1xyXG4gICAgICAgICAgICAgICAgICAgICAgICA8PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPEljb25CdXR0b25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcj1cImluaGVyaXRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpPT57XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG9TaW5jcm9uaXphcigpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SUNPTi5TeW5jQWx0Lz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvSWNvbkJ1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC8+XHJcbiAgICAgICAgICAgICAgICAgICAgOm51bGx9XHJcbiAgICAgICAgICAgICAgICA8L1Rvb2xiYXI+XHJcbiAgICAgICAgICAgIDwvQXBwQmFyPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImhvamEtZGUtcnV0YVwiPlxyXG4gICAgICAgICAgICAgICAge21vZG8uZGVtbz88ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxUeXBvZ3JhcGh5Pk1vZG8gZGVtbyA8L1R5cG9ncmFwaHk+XHJcbiAgICAgICAgICAgICAgICAgICAgPEJ1dHRvbiB2YXJpYW50PVwib3V0bGluZWRcIiBjb2xvcj1cInNlY29uZGFyeVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpPT5kaXNwYXRjaChkaXNwYXRjaGVycy5SRUlOSUNJQVJfREVNTyh7fSkpfVxyXG4gICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVpbmljaWFyXHJcbiAgICAgICAgICAgICAgICAgICAgPC9CdXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj46bnVsbH1cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibm9tYnJlLXZlcnNpb25cIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2PkRpcmVjY2nDs24gR2VuZXJhbCBkZSBFc3RhZMOtc3RpY2EgeSBDZW5zb3MgLSBDLkEuQi5BLjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXY+e215LmdldExvY2FsVmFyKCdhcHAtdmVyc2lvbicpfSBzaW5jcm8ge251bV9zaW5jcm99IC0gdmVyc2nDs24ge2FwcFZlcnNpb259PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIHtsaWtlQXIoY2FyZ2FzKS5tYXAoKGNhcmdhLCBpZENhcmdhLCBfLCBwb3NpY2lvbik9PlxyXG4gICAgICAgICAgICAgICAgICAgIDxEZXNwbGVnYXJDYXJnYSBrZXk9e2lkQ2FyZ2F9IGNhcmdhPXtjYXJnYX0gaWRDYXJnYT17aWRDYXJnYX0gcG9zaWNpb249e3Bvc2ljaW9ufSBpbmZvcm1hY2lvbkhkcj17aW5mb3JtYWNpb25IZHJ9IGZlZWRiYWNrUm93VmFsaWRhdG9yPXtmZWVkYmFja1Jvd1ZhbGlkYXRvcn0gcmVzcHVlc3Rhcz17cmVzcHVlc3Rhc30vPlxyXG4gICAgICAgICAgICAgICAgKS5hcnJheSgpfVxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8Lz5cclxuICAgICk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBMaXN0YVRleHRvcyhwcm9wczp7dGV4dG9zOnN0cmluZ1tdfSl7XHJcbiAgICByZXR1cm4gPHVsPlxyXG4gICAgICAgIHtwcm9wcy50ZXh0b3MubWFwKHQ9PjxsaT48VHlwb2dyYXBoeT57dH08L1R5cG9ncmFwaHk+PC9saT4pfVxyXG4gICAgPC91bD47XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBCaWVudmVuaWRhRGVzcGxpZWd1ZShwcm9wczp7bW9kbzpDYXNvU3RhdGVbXCJtb2RvXCJdfSl7XHJcbiAgICB2YXIgZGlzcGF0Y2g9dXNlRGlzcGF0Y2goKTtcclxuICAgIHJldHVybiA8UGFwZXIgY2xhc3NOYW1lPVwiYmllbnZlbmlkYVwiPlxyXG4gICAgICAgIHtwcm9wcy5tb2RvLmRlbW8/XHJcbiAgICAgICAgICAgIDw+XHJcbiAgICAgICAgICAgICAgICA8VHlwb2dyYXBoeT5ERU1PIGRlbCBzaXN0ZW1hIGRlIHJlbGV2YW1pZW50byBkZSBETUVOQ1U8L1R5cG9ncmFwaHk+XHJcbiAgICAgICAgICAgICAgICA8VHlwb2dyYXBoeT5FbiBlc3RhIGRlbW86PC9UeXBvZ3JhcGh5PlxyXG4gICAgICAgICAgICAgICAgPExpc3RhVGV4dG9zIHRleHRvcz17W1xyXG4gICAgICAgICAgICAgICAgICAgIFwiQWxndW5hcyB2aXZpZW5kYXMgYXBhcmVjZW4gcmVsZXZhZGFzIChlbCBib3TDs24gZXN0w6EgZGUgY29sb3IpIHNpcnZlbiBkZSBlamVtcGxvXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgXCJMbyBxdWUgc2UgY2FyZ3VlbiBzZSBndWFyZGFuIGxvY2FsbWVudGUgcGVybyBubyBzZSB0cmFzbWl0ZW4gYSBsYSBiYXNlIGRlIGRhdG9zXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgXCJTZSBwdWVkZSB2b2x2ZXIgYSBsYSB2ZXJzacOzbiBpbmljaWFsIChvIHNlYSBib3JyYXIgbG8gcXVlIHNlIGd1YXJkw7MgbG9jYWxtZW50ZSkgZGVzZGUgbGEgaG9qYSBkZSBydXRhIGJvdG9uIFtyZWluaWNpYXIgZGVtb11cIixcclxuICAgICAgICAgICAgICAgICAgICBcIlRvZGF2w61hIGhheSBjb3NhcyBxdWUgZmFsdGFuIG8gcHVlZGVuIGNhbWJpYXJcIixcclxuICAgICAgICAgICAgICAgIF19IC8+XHJcbiAgICAgICAgICAgIDwvPlxyXG4gICAgICAgICAgICA6PD5cclxuICAgICAgICAgICAgICAgIDxUeXBvZ3JhcGh5PkVuY3Vlc3RhIGRlIFNlcm9wcmV2YWxlbmNpYSBkZSBDT1ZJRC0xOTwvVHlwb2dyYXBoeT5cclxuICAgICAgICAgICAgPC8+XHJcbiAgICAgICAgfVxyXG4gICAgICAgIDxCdXR0b25cclxuICAgICAgICAgICAgdmFyaWFudD1cImNvbnRhaW5lZFwiXHJcbiAgICAgICAgICAgIGNvbG9yPVwic2Vjb25kYXJ5XCJcclxuICAgICAgICAgICAgb25DbGljaz17KCk9PnsgZ290b1NpbmNyb25pemFyKCk7IH19XHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgICA8c3Bhbj5TaW5jcm9uaXphciA8L3NwYW4+IDxJQ09OLlN5bmNBbHQvPlxyXG4gICAgICAgIDwvQnV0dG9uPlxyXG4gICAgICAgIDxCdXR0b25cclxuICAgICAgICAgICAgdmFyaWFudD1cImNvbnRhaW5lZFwiXHJcbiAgICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXHJcbiAgICAgICAgICAgIG9uQ2xpY2s9eygpPT5kaXNwYXRjaChkaXNwYXRjaGVycy5TRVRfT1BDSU9OKHtvcGNpb246J2JpZW52ZW5pZG8nLCB2YWxvcjp0cnVlfSkpfVxyXG4gICAgICAgID5cclxuICAgICAgICAgICAgPHNwYW4+Q29udGludWFyIDwvc3Bhbj4gPElDT04uU2VuZC8+XHJcbiAgICAgICAgPC9CdXR0b24+XHJcbiAgICA8L1BhcGVyPlxyXG59XHJcblxyXG4vL0NPTlRST0wgREUgUEVTVEHDkUFTXHJcbnZhciBhbGxPcGVuZWRUYWJzOntbeDpzdHJpbmddOm51bWJlcn09e307XHJcbnZhciBpbmZvT3BlbmVkVGFicz17XHJcbiAgICBhbGxPcGVuZWRUYWJzLFxyXG4gICAgbXlJZDonY2FsY3VsYW5kby4uLicsXHJcbiAgICBvdGhlclRhYnNOYW1lczonJ1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gT3BlbmVkVGFicygpe1xyXG4gICAgY29uc3QgW3RhYnMsIHNldFRhYnNdID0gdXNlU3RhdGUoaW5mb09wZW5lZFRhYnMub3RoZXJUYWJzTmFtZXMpO1xyXG4gICAgdmFyIHttb2RvRGlyZWN0b30gPSB1c2VTZWxlY3Rvcigoc3RhdGU6Q2Fzb1N0YXRlKT0+KHttb2RvRGlyZWN0bzpzdGF0ZS5vcGNpb25lcy5tb2RvRGlyZWN0b30pKTtcclxuICAgIGNvbnN0IHVwZGF0ZVRhYnNTdGF0dXMgPSBmdW5jdGlvbigpe1xyXG4gICAgICAgIHNldFRhYnMoaW5mb09wZW5lZFRhYnMub3RoZXJUYWJzTmFtZXMpO1xyXG4gICAgfVxyXG4gICAgdXNlRWZmZWN0KCgpPT57XHJcbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ215LXRhYnMnLHVwZGF0ZVRhYnNTdGF0dXMpO1xyXG4gICAgICAgIHJldHVybiAoKSA9PiB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignbXktdGFicycsdXBkYXRlVGFic1N0YXR1cyk7XHJcbiAgICB9LFtdKVxyXG4gICAgcmV0dXJuIG1vZG9EaXJlY3RvP251bGw6KHRhYnMpP1xyXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGFiLWNvdW50ZXIgdGFiLWVycm9yXCI+wqFBVEVOQ0nDk04hIEhheSBtw6FzIGRlIHVuYSB2ZW50YW5hIGFiaWVydGEuIFNlIHB1ZWRlbiBwZXJkZXIgZGF0b3M6IHt0YWJzfTwvZGl2PlxyXG4gICAgOlxyXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGFiLWNvdW50ZXJcIj7inJQ8L2Rpdj5cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIEFwcERtRW5jdSgpe1xyXG4gICAgdmFyIHtmb3JQaywgYmllbnZlbmlkbywgbW9kb30gPSB1c2VTZWxlY3Rvcigoc3RhdGU6Q2Fzb1N0YXRlKT0+KHsuLi5zdGF0ZS5vcGNpb25lcywgLi4uc3RhdGUubW9kbywgLi4uc3RhdGV9KSk7XHJcbiAgICBpZighYmllbnZlbmlkbyl7XHJcbiAgICAgICAgcmV0dXJuIDxCaWVudmVuaWRhRGVzcGxpZWd1ZSBtb2RvPXttb2RvfS8+IFxyXG4gICAgfWVsc2UgaWYoZm9yUGs9PW51bGwpe1xyXG4gICAgICAgIHJldHVybiA8SG9qYURlUnV0YURlc3BsaWVndWUgLz4gXHJcbiAgICB9ZWxzZXtcclxuICAgICAgICByZXR1cm4gPEZvcm11bGFyaW9EZXNwbGllZ3VlIGZvclBrPXtmb3JQa30vPlxyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBQYW50YWxsYUluaWNpYWxTaW5DYXJnYShfcHJvcHM6e30pe1xyXG4gICAgY29uc3QgdXBkYXRlT25saW5lU3RhdHVzID0gZnVuY3Rpb24oKXtcclxuICAgICAgICBzZXRPbmxpbmUod2luZG93Lm5hdmlnYXRvci5vbkxpbmUpO1xyXG4gICAgfVxyXG4gICAgY29uc3QgW29ubGluZSwgc2V0T25saW5lXSA9IHVzZVN0YXRlKHdpbmRvdy5uYXZpZ2F0b3Iub25MaW5lKTtcclxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdvbmxpbmUnLCAgdXBkYXRlT25saW5lU3RhdHVzKTtcclxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdvZmZsaW5lJywgdXBkYXRlT25saW5lU3RhdHVzKTtcclxuICAgIGNvbnN0IHBhcmFncmFwaFN0eWxlcz17Zm9udFNpemU6XCIxLjJyZW1cIiwgZm9udFdlaWdodDo2MDAsIHBhZGRpbmc6IFwiNXB4IDEwcHhcIn07XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICAgIDw+XHJcbiAgICAgICAgICAgIDxBcHBCYXIgcG9zaXRpb249XCJmaXhlZFwiPlxyXG4gICAgICAgICAgICAgICAgPFR5cG9ncmFwaHkgdmFyaWFudD1cImg2XCIgc3R5bGU9e3ttYXJnaW46MjV9fT5cclxuICAgICAgICAgICAgICAgICAgICBEaXNwb3NpdGl2byBzaW4gY2FyZ2FcclxuICAgICAgICAgICAgICAgIDwvVHlwb2dyYXBoeT5cclxuICAgICAgICAgICAgPC9BcHBCYXI+XHJcbiAgICAgICAgICAgIDxtYWluPlxyXG4gICAgICAgICAgICAgICAgPFBhcGVyIHN0eWxlPXt7aGVpZ2h0Oic2MDBweCcsIHBhZGRpbmc6XCIxNXB4XCIsIG1hcmdpblRvcDo3NX19PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHtvbmxpbmU/XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUeXBvZ3JhcGh5IGNvbXBvbmVudD1cInBcIiBzdHlsZT17cGFyYWdyYXBoU3R5bGVzfT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2luY3Jvbml6YXIgZGlzcG9zaXRpdm9cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9e3twYWRkaW5nOic1cHgnfX0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50PVwiY29udGFpbmVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKT0+e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvU2luY3Jvbml6YXIoKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPElDT04uU3luY0FsdC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvVHlwb2dyYXBoeT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VHlwb2dyYXBoeSBjb21wb25lbnQ9XCJwXCIgc3R5bGU9e3BhcmFncmFwaFN0eWxlc30+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm8gaGF5IGNvbmV4acOzbiBhIGludGVybmV0LCBwb3IgZmF2b3IgY29uw6ljdGUgZWwgZGlzcG9zaXRpdm8gYSB1bmEgcmVkIHBhcmEgc2luY3Jvbml6YXIgdW5hIGhvamEgZGUgcnV0YS5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvVHlwb2dyYXBoeT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9QYXBlcj5cclxuICAgICAgICAgICAgPC9tYWluPlxyXG4gICAgICAgIDwvPlxyXG4gICAgKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIFBhbnRhbGxhSW5pY2lhbCgpe1xyXG4gICAgdmFyIHtmb3JQaywgYmllbnZlbmlkbywgbW9kb30gPSB1c2VTZWxlY3Rvcigoc3RhdGU6Q2Fzb1N0YXRlKT0+KHsuLi5zdGF0ZS5vcGNpb25lcywgLi4uc3RhdGUubW9kbywgLi4uc3RhdGV9KSk7XHJcbiAgICBpZighYmllbnZlbmlkbyl7XHJcbiAgICAgICAgcmV0dXJuIDxCaWVudmVuaWRhRGVzcGxpZWd1ZSBtb2RvPXttb2RvfS8+IFxyXG4gICAgfWVsc2UgaWYoZm9yUGs9PW51bGwpe1xyXG4gICAgICAgIHJldHVybiA8SG9qYURlUnV0YURlc3BsaWVndWUgLz4gXHJcbiAgICB9ZWxzZXtcclxuICAgICAgICByZXR1cm4gPEZvcm11bGFyaW9EZXNwbGllZ3VlIGZvclBrPXtmb3JQa30vPlxyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZG1QYW50YWxsYUluaWNpYWxTaW5DYXJnYSgpe1xyXG4gICAgdHJ5e1xyXG4gICAgICAgIGF3YWl0IGxvYWRDU1MoQk9PVFNUUkFQXzVfMV8zX1NSQyk7XHJcbiAgICB9Y2F0Y2goZXJyKXtcclxuICAgICAgICB0aHJvdyhlcnIpXHJcbiAgICB9XHJcbiAgICBSZWFjdERPTS5yZW5kZXIoXHJcbiAgICAgICAgPFBhbnRhbGxhSW5pY2lhbFNpbkNhcmdhLz4sXHJcbiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21haW5fbGF5b3V0JylcclxuICAgIClcclxufVxyXG5cclxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGRlc3BsZWdhckZvcm11bGFyaW9BY3R1YWwob3B0czp7bW9kb0RlbW86Ym9vbGVhbiwgZm9yUGtSYWl6PzpGb3JQa1JhaXosIG9wZXJhdGl2bzpJZE9wZXJhdGl2b30pe1xyXG4gICAgLy8gdHJhZXIgbG9zIG1ldGFkYXRvcyBlbiB1bmEgXCJlc3RydWN0dXJhXCJcclxuICAgIC8vIHRyYWVyIGxvcyBkYXRvcyBkZSBsb2NhbFN0b3JhZ2VcclxuICAgIC8vIHZlcmlmaWNhciBlbCBtYWluIExheW91dFxyXG4gICAgY29uc3Qgc3RvcmUgPSBhd2FpdCBkbVRyYWVyRGF0b3NGb3JtdWxhcmlvKG9wdHMpXHJcbiAgICB0cnl7XHJcbiAgICAgICAgYXdhaXQgbG9hZENTUyhCT09UU1RSQVBfNV8xXzNfU1JDKTtcclxuICAgIH1jYXRjaChlcnIpe1xyXG4gICAgICAgIHRocm93KGVycilcclxuICAgIH1cclxuICAgIFJlYWN0RE9NLnJlbmRlcihcclxuICAgICAgICA8UmVuZGVyUHJpbmNpcGFsIHN0b3JlPXtzdG9yZX0gZGlzcGF0Y2hlcnM9e2Rpc3BhdGNoZXJzfSBtZW5zYWplUmV0b3Jubz17b3B0cy5mb3JQa1JhaXo/XCJWb2x2ZXIgYWwgZm9ybXVsYXJpb1wiOlwiVm9sdmVyIGEgbGEgaG9qYSBkZSBydXRhXCJ9PlxyXG4gICAgICAgICAgICA8T3BlbmVkVGFicy8+XHJcbiAgICAgICAgICAgIDxBcHBEbUVuY3UvPlxyXG4gICAgICAgIDwvUmVuZGVyUHJpbmNpcGFsPixcclxuICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWFpbl9sYXlvdXQnKVxyXG4gICAgKVxyXG59XHJcblxyXG5pZih0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyl7XHJcbiAgICAvLyBAdHMtaWdub3JlIHBhcmEgaGFjZXJsb1xyXG4gICAgd2luZG93LmRlc3BsZWdhckZvcm11bGFyaW9BY3R1YWwgPSBkZXNwbGVnYXJGb3JtdWxhcmlvQWN0dWFsO1xyXG4gICAgLy8gQHRzLWlnbm9yZSBwYXJhIGhhY2VybG9cclxuICAgIHdpbmRvdy5kbVBhbnRhbGxhSW5pY2lhbFNpbkNhcmdhID0gZG1QYW50YWxsYUluaWNpYWxTaW5DYXJnYTtcclxufVxyXG5cclxuXHJcbmZ1bmN0aW9uIGxvYWRJbnN0YW5jZSgpe1xyXG4gICAgaWYodHlwZW9mIEJyb2FkY2FzdENoYW5uZWwgPT09ICd1bmRlZmluZWQnKXtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB2YXIgYmMgPSBuZXcgQnJvYWRjYXN0Q2hhbm5lbCgnY29udGFkb3InKTtcclxuICAgIHZhciBteUlkPVN0cmluZy5mcm9tQ29kZVBvaW50KDEwMCtNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqMTAwMCkpK01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSoxMDApLy8rJy0nK25ldyBEYXRlKCkuZ2V0VGltZSgpO1xyXG4gICAgYWxsT3BlbmVkVGFic1tteUlkXT0xO1xyXG4gICAgaW5mb09wZW5lZFRhYnMubXlJZD1teUlkO1xyXG4gICAgdmFyIGV2ZW50ID0gbmV3IEV2ZW50KCdteS10YWJzJyk7XHJcbiAgICBiYy5vbm1lc3NhZ2U9ZnVuY3Rpb24oZXYpe1xyXG4gICAgICAgIGlmKGV2LmRhdGEucXVlPT0nc295Jyl7XHJcbiAgICAgICAgICAgIGlmKCFhbGxPcGVuZWRUYWJzW2V2LmRhdGEuaWRdKXtcclxuICAgICAgICAgICAgICAgIGFsbE9wZW5lZFRhYnNbZXYuZGF0YS5pZF09MDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBhbGxPcGVuZWRUYWJzW2V2LmRhdGEuaWRdKys7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKGV2LmRhdGEucXVlPT0ndW5sb2FkJyl7XHJcbiAgICAgICAgICAgIGRlbGV0ZSBhbGxPcGVuZWRUYWJzW2V2LmRhdGEuaWRdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZihldi5kYXRhLnF1ZT09J2xvYWQnKXtcclxuICAgICAgICAgICAgYWxsT3BlbmVkVGFic1tldi5kYXRhLmlkXT0xO1xyXG4gICAgICAgICAgICBiYy5wb3N0TWVzc2FnZSh7cXVlOidzb3knLGlkOm15SWR9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaW5mb09wZW5lZFRhYnMub3RoZXJUYWJzTmFtZXM9bGlrZUFyKGFsbE9wZW5lZFRhYnMpLmZpbHRlcigoXyxpZCk9PmlkIT1teUlkKS5qb2luKCcsJyk7XHJcbiAgICAgICAgd2luZG93LmRpc3BhdGNoRXZlbnQoZXZlbnQpO1xyXG4gICAgfTtcclxuICAgIGJjLnBvc3RNZXNzYWdlKHtxdWU6J2xvYWQnLGlkOm15SWR9KTtcclxuICAgIHdpbmRvdy5kaXNwYXRjaEV2ZW50KGV2ZW50KTtcclxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCd1bmxvYWQnLGZ1bmN0aW9uKCl7XHJcbiAgICAgICAgYmMucG9zdE1lc3NhZ2Uoe3F1ZTondW5sb2FkJyxpZDpteUlkfSk7XHJcbiAgICAgICAgd2luZG93LmRpc3BhdGNoRXZlbnQoZXZlbnQpO1xyXG4gICAgfSlcclxuICAgIC8vbW9zdHJhclF1aWVuZXNTb21vcygpO1xyXG59XHJcblxyXG5leHBvcnQgY29uc3Qgc2V0TGlicmVEZXNwbGllZ3VlID0gKGxpYnJlOkxpYnJlRGVzcGxpZWd1ZVR5cGUpPT5MaWJyZURlc3BsaWVndWUgPSBsaWJyZVxyXG5cclxuc2V0TGlicmVEZXNwbGllZ3VlKChwcm9wczp7XHJcbiAgICBrZXk6c3RyaW5nXHJcbiAgICBjYXNpbGxlcm86TGlicmVcclxuICAgIGZvcm11bGFyaW86Rm9ybXVsYXJpb1xyXG4gICAgZm9yUGs6Rm9yUGtcclxufSk9PjxkaXYga2V5PXtwcm9wcy5rZXl9IGlkPXtwcm9wcy5jYXNpbGxlcm8uaWRfY2FzaWxsZXJvfT5lc3RlIGNhc2lsbGVybyBkZWJlIHJlZGVmaW5pcnNlIGVuIGxhIEFQUCBmaW5hbCB5IHN1IHVzbyBlcyBleGNsdXNpdm8gZGVsIMOhcmVhIGluZm9ybcOhdGljYTwvZGl2PilcclxuXHJcbnNldENhbGN1bGFyVmFyaWFibGVzKChyZXNwdWVzdGFzUmFpejpSZXNwdWVzdGFzUmFpeiwgZm9yUGs6Rm9yUGspPT57XHJcbiAgICAvL1RPRE8gR0VORVJBTElaQVJcclxuICAgIHZhciB1YXNJdGVyYXI6e1xyXG4gICAgICAgIFtrZXkgaW4gSWRVbmlkYWRBbmFsaXNpc106e1xyXG4gICAgICAgICAgICB1YVBlcnNvbmFzOiBJZFVuaWRhZEFuYWxpc2lzXHJcbiAgICAgICAgICAgIHZhclNleG9QZXJzb25hOiBJZFZhcmlhYmxlXHJcbiAgICAgICAgICAgIHZhck5vbWJyZVBlcnNvbmE6IElkVmFyaWFibGVcclxuICAgICAgICAgICAgdmFyTG9zTm9tYnJlczogSWRWYXJpYWJsZVxyXG4gICAgICAgIH1cclxuICAgIH0gPSB7XHJcbiAgICAgICAgaG9nYXJlczoge1xyXG4gICAgICAgICAgICB1YVBlcnNvbmFzOiAncGVyc29uYXMnLFxyXG4gICAgICAgICAgICB2YXJTZXhvUGVyc29uYTogJ3NleG8nIGFzIElkVmFyaWFibGUsXHJcbiAgICAgICAgICAgIHZhck5vbWJyZVBlcnNvbmE6ICdub21icmUnIGFzIElkVmFyaWFibGUsXHJcbiAgICAgICAgICAgIHZhckxvc05vbWJyZXM6IFwibG9zX25vbWJyZXNcIiBhcyBJZFZhcmlhYmxlXHJcbiAgICAgICAgfSxcclxuICAgICAgICBbXCJob2dhcmVzX3N1cFwiIGFzIElkVW5pZGFkQW5hbGlzaXNdIDoge1xyXG4gICAgICAgICAgICB1YVBlcnNvbmFzOiAncGVyc29uYXNfc3VwJyBhcyBJZFVuaWRhZEFuYWxpc2lzLFxyXG4gICAgICAgICAgICB2YXJTZXhvUGVyc29uYTogJ3NleG9fc3VwJyAgYXMgSWRWYXJpYWJsZSxcclxuICAgICAgICAgICAgdmFyTm9tYnJlUGVyc29uYTogJ25vbWJyZV9zdXAnICBhcyBJZFZhcmlhYmxlLFxyXG4gICAgICAgICAgICB2YXJMb3NOb21icmVzOiBcIm5vbWJyZXNfY29tcG9uZW50ZXNfc3VwXCIgIGFzIElkVmFyaWFibGVcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBsaWtlQXIodWFzSXRlcmFyKS5mb3JFYWNoKChjb25maWdIb2dhcmVzLHVhSG9nYXJlcyk9PntcclxuICAgICAgICB2YXIgZXN0cnVjdHVyYSA9IGdldEVzdHJ1Y3R1cmEoKTtcclxuICAgICAgICBpZihlc3RydWN0dXJhLnVuaWRhZGVzX2FuYWxpc2lzW3VhSG9nYXJlc10pe1xyXG4gICAgICAgICAgICBmb3IodmFyIHJlc3B1ZXN0YXNIb2dhciBvZiBpdGVyYXRvcihyZXNwdWVzdGFzUmFpelt1YUhvZ2FyZXNdPz9bXSkpe1xyXG4gICAgICAgICAgICAgICAgaWYoIXJlc3B1ZXN0YXNIb2dhcltjb25maWdIb2dhcmVzLnVhUGVyc29uYXNdIHx8IGVtcHR5KHJlc3B1ZXN0YXNIb2dhcltjb25maWdIb2dhcmVzLnVhUGVyc29uYXNdKSB8fCByZXNwdWVzdGFzSG9nYXJbY29uZmlnSG9nYXJlcy51YVBlcnNvbmFzXVswXVtjb25maWdIb2dhcmVzLnZhclNleG9QZXJzb25hXSA9PSBudWxsKXtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgbG9zTm9tYnJlcyA9IHJlc3B1ZXN0YXNIb2dhcltjb25maWdIb2dhcmVzLnZhckxvc05vbWJyZXNdIGFzIHN0cmluZ1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKGxvc05vbWJyZXMgIT0gbnVsbCl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKCFyZXNwdWVzdGFzSG9nYXJbY29uZmlnSG9nYXJlcy51YVBlcnNvbmFzXSl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwdWVzdGFzSG9nYXJbY29uZmlnSG9nYXJlcy51YVBlcnNvbmFzXT1bXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsb3NOb21icmVzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc3BsaXQoJywnKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLmZpbHRlcigobm9tYnJlOnN0cmluZyk9Pm5vbWJyZS50cmltKCkubGVuZ3RoID4gMClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5mb3JFYWNoKChub21icmU6c3RyaW5nLCBpOm51bWJlcik9PntcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwdWVzdGFzSG9nYXJbY29uZmlnSG9nYXJlcy51YVBlcnNvbmFzXVtpXSA9IHJlc3B1ZXN0YXNIb2dhcltjb25maWdIb2dhcmVzLnVhUGVyc29uYXNdW2ldIHx8IHt9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNIb2dhcltjb25maWdIb2dhcmVzLnVhUGVyc29uYXNdW2ldW2NvbmZpZ0hvZ2FyZXMudmFyTm9tYnJlUGVyc29uYV0gPSBub21icmUudHJpbSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9KVxyXG4gICAgcmVzcHVlc3Rhc1JhaXoudmRvbWluaW89Z2V0RGF0b3NCeVBhc3MoKS5pbmZvcm1hY2lvbkhkcltmb3JQay52aXZpZW5kYV0udGVtLmRvbWluaW87XHJcbiAgICAvL1RPRE86IE1FSk9SQVIgRU4gQUxHVU4gTU9NRU5UTyBFTCBCT1RPTiBMSVNUT1xyXG4gICAgbGV0IHRvdGFsSCA9IHJlc3B1ZXN0YXNSYWl6Wyd0b3RhbF9oJyBhcyBJZFZhcmlhYmxlXTtcclxuICAgIHJlc3B1ZXN0YXNSYWl6WyckQi5GOlMxJyBhcyBJZFZhcmlhYmxlXSA9IChyZXNwdWVzdGFzUmFpelsnaG9nYXJlcyddIHx8IFtdKS5sZW5ndGggPT0gdG90YWxIPydvayc6bnVsbDtcclxuICAgIGxldCB0b3RhbEhzdXAgPSByZXNwdWVzdGFzUmFpelsndG90YWxfaF9zdXAnIGFzIElkVmFyaWFibGVdO1xyXG4gICAgcmVzcHVlc3Rhc1JhaXpbJyRCLkY6UzFfU1VQJyBhcyBJZFZhcmlhYmxlXSA9IChyZXNwdWVzdGFzUmFpelsnaG9nYXJlc19zdXAnIGFzIElkVW5pZGFkQW5hbGlzaXNdIHx8IFtdKS5sZW5ndGggPT0gdG90YWxIc3VwPydvayc6bnVsbDtcclxufSlcclxuXHJcbndpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgZnVuY3Rpb24oKXtcclxuICAgIGxvYWRJbnN0YW5jZSgpXHJcbn0pXHJcbi8vRklOIENPTlRST0wgUEVTVEHDkUFTXHJcblxyXG5mdW5jdGlvbiBsb2FkQ1NTKGNzc1VSTDpzdHJpbmcsIGlkPzpzdHJpbmcpOlByb21pc2U8dm9pZD57XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKCByZXNvbHZlLCByZWplY3QgKT0+e1xyXG4gICAgICAgIHZhciBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggJ2xpbmsnICk7XHJcbiAgICAgICAgbGluay5yZWwgID0gJ3N0eWxlc2hlZXQnO1xyXG4gICAgICAgIGxpbmsuaHJlZiA9IGNzc1VSTDtcclxuICAgICAgICBsaW5rLmlkID0gaWQgfHwgY3NzVVJMO1xyXG4gICAgICAgIGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoIGxpbmsgKTtcclxuICAgICAgICBsaW5rLm9ubG9hZCA9ICgpPT57IFxyXG4gICAgICAgICAgICByZXNvbHZlKCk7IFxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgdHJhZSAke2Nzc1VSTH1gKTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIGxpbmsub25lcnJvcj0oZXJyKT0+e1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygnZXJyb3IgY2FyZ2FuZG8gZWwgZXN0aWxvJywgZXJyKVxyXG4gICAgICAgICAgICByZWplY3QobmV3IEVycm9yKGBwcm9ibGVtYSBjYXJnYW5kbyBlc3RpbG8gJHtjc3NVUkx9YCkpXHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHJlbW92ZUNTU0J5SWQoaWQ6c3RyaW5nKXtcclxuICAgIHZhciBsaW5rTm9kZSA9ICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7XHJcbiAgICBsaW5rTm9kZT8ucGFyZW50Tm9kZT8ucmVtb3ZlQ2hpbGQobGlua05vZGUpO1xyXG59XHJcblxyXG5jb25zdCBCT09UU1RSQVBfNV8xXzNfU1JDID0gJ2Nzcy9ib290c3RyYXAubWluLmNzcyc7Il19
1547
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVuZGVyLWZvcm11bGFyaW8uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdW5sb2dnZWQvcmVuZGVyLWZvcm11bGFyaW8udHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBQUEsK0JBQStCO0lBQy9CLHNDQUFzQztJQUN0QyxxREFRMEI7SUFDMUIsbUNBY2lCO0lBQ2pCLDJEQVk0QjtJQUM1Qix5REFJNEI7SUFDNUIsaUNBQTZEO0lBQzdELDZDQUF1RDtJQUN2RCxxQ0FBdUQ7SUFDdkQsK0NBQTZDO0lBQzdDLDJDQUF3QztJQUV4Qyw0Q0FNMkI7SUFJM0IsMkRBYzRCO0lBRTVCLDJDQUF5QztJQUV6QyxNQUFNLGNBQWMsR0FBRyxFQUFFLENBQUM7SUFHMUIsU0FBUyxjQUFjLENBQUMsSUFBZ0IsRUFBRSxXQUE2QztRQUNuRixJQUFHLE9BQU8sSUFBSSxJQUFJLFFBQVE7WUFBRSxPQUFPLFNBQVMsQ0FBQztRQUM3QyxJQUFJLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUMsU0FBUyxDQUFDLENBQUMsT0FBTyxDQUFDLGlCQUFpQixFQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3RFLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBQyxDQUFDLElBQUksRUFBQyxFQUFFLENBQUEsSUFBSSxJQUFJLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUMsQ0FBQyxJQUFJLEVBQUMsRUFBRSxDQUFBLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQztRQUN6RixJQUFHLENBQUMsV0FBVyxJQUFJLElBQUk7WUFBRSxPQUFPLElBQUksQ0FBQztRQUNyQzs7VUFFRTtJQUNOLENBQUM7SUFFRCxNQUFNLFdBQVcsR0FBRyxLQUFLLENBQUMsQ0FBQyxxSkFBcUo7SUFDaEwsZ0lBQWdJO0lBRWhJLE1BQU0sbUJBQW1CLEdBQUcsa0JBQWtCLENBQUM7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QUE0QixNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUE7WUFDM0QsQ0FBQyxDQUFBO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsU0FBUyxhQUFhLENBQUMsRUFBUzs7UUFDNUIsSUFBSSxRQUFRLEdBQUksUUFBUSxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUM1QyxNQUFBLFFBQVEsYUFBUixRQUFRLHVCQUFSLFFBQVEsQ0FBRSxVQUFVLDBDQUFFLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBRUQsTUFBTSxtQkFBbUIsR0FBRyx1QkFBdUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xyXG5pbXBvcnQgKiBhcyBSZWFjdERPTSBmcm9tIFwicmVhY3QtZG9tXCI7XHJcbmltcG9ydCB7ICBcclxuICAgIFJlbmRlclByaW5jaXBhbCwgXHJcbiAgICBhZGFwdGFyVGlwb1ZhckNhc2lsbGVybyxcclxuICAgIElDT04sXHJcbiAgICBmb2N1c1RvSWQsXHJcbiAgICBzY3JvbGxUb1RvcCxcclxuICAgIHNjcm9sbFRvQm90dG9tLFxyXG4gICAgbWF0ZXJpYWxJb0ljb25zU3ZnUGF0aFxyXG59IGZyb20gXCIuL3JlbmRlci1nZW5lcmFsXCI7XHJcbmltcG9ydCB7QmxvcXVlLCBCb3RvbkZvcm11bGFyaW8sIFxyXG4gICAgQ2FzaWxsZXJvQmFzZSwgQ2Fzb1N0YXRlLCBDb25qdW50b1ByZWd1bnRhcywgQ29uc2lzdGVuY2lhLCBcclxuICAgIEVzdGFkb0NhcmdhLCBGaWx0cm8sIEZvclBrLCBGb3JQa1JhaXosIEZvcm11bGFyaW8sIFxyXG4gICAgSWRGb3JtdWxhcmlvLCBJZFByZWd1bnRhLCBJZFRhcmVhLCBJZFZhcmlhYmxlLCBJbmZvRm9ybXVsYXJpbyxcclxuICAgIE1vZG9EZXNwbGllZ3VlLFxyXG4gICAgT3BjaW9uLCBPcGNpb25NdWx0aXBsZSwgUGxhaW5Gb3JQaywgXHJcbiAgICBQcmVndW50YSwgUHJlZ3VudGFDb25PcGNpb25lcywgUHJlZ3VudGFTaW1wbGUsIFxyXG4gICAgUmVzcHVlc3RhcywgUmVzcHVlc3RhTGFzVUEsIFJlc3B1ZXN0YXNSYWl6LCBWYWxvciwgVEVNLCBJZENhcmdhLCBDYXJnYSwgSWRGaW4sIElkVW5pZGFkQW5hbGlzaXMsXHJcbiAgICBNb2RvQWxtYWNlbmFtaWVudG8sXHJcbiAgICB0b1BsYWluRm9yUGssXHJcbiAgICBJZENhc2lsbGVybyxcclxuICAgIFByZWd1bnRhQ29uU2lObyxcclxuICAgIFRleHRvLCBFc3RydWN0dXJhLCBJbmZvcm1hY2lvbkhkciwgRGF0b3NIZHJVYVBwYWwsIENvbmZpZ3VyYWNpb25Tb3J0ZW9Gb3JtdWxhcmlvLCBSZXN1bWVuRXN0YWRvLCBEYXRvc0J5UGFzc1BlcnNpc3RpYmxlcywgSWRPcGVyYXRpdm8sIElkRW5jLCBMaWJyZSwgVW5pZGFkQW5hbGlzaXMsXHJcbiAgICBpdGVyYXRvciwgZW1wdHlcclxufSBmcm9tIFwiLi90aXBvc1wiO1xyXG5pbXBvcnR7IFxyXG4gICAgYWNjaW9uX2FicmlyX2Zvcm11bGFyaW8sXHJcbiAgICBhY2Npb25fYm9ycmFyX2Zvcm11bGFyaW8sXHJcbiAgICBjYWxjdWxhckFjdHVhbEJGLFxyXG4gICAgY2FsY3VsYXJEaXNhYmxlZEJGLFxyXG4gICAgY2FsY3VsYXJQZXJtaXRlQm9ycmFyQkYsXHJcbiAgICBjYWxjdWxhclJlc3VtZW5WaXZpZW5kYSxcclxuICAgIGdldERhdG9zQnlQYXNzLFxyXG4gICAgZ2V0Rm9ybXVsYXJpb3NGb3JJZFZpdmllbmRhLFxyXG4gICAgZ2V0TWFpbkZvcm1Gb3JWaXZpZW5kYSxcclxuICAgIGludGVudGFyQmFja3VwLFxyXG4gICAgc2V0Q2FsY3VsYXJWYXJpYWJsZXNcclxufSBmcm9tIFwiLi9ieXBhc3MtZm9ybXVsYXJpb1wiXHJcbmltcG9ydCB7IGRtVHJhZXJEYXRvc0Zvcm11bGFyaW8sIGRpc3BhdGNoZXJzLCBcclxuICAgIGdvdG9TaW5jcm9uaXphcixcclxuICAgIGdldENhY2hlVmVyc2lvbixcclxuICAgIGdvdG9Db25zaXN0aXIsXHJcbn0gZnJvbSBcIi4vcmVkdXgtZm9ybXVsYXJpb1wiO1xyXG5pbXBvcnQgeyB1c2VTdGF0ZSwgdXNlRWZmZWN0LCB1c2VMYXlvdXRFZmZlY3QgfSBmcm9tIFwicmVhY3RcIjtcclxuaW1wb3J0IHsgdXNlU2VsZWN0b3IsIHVzZURpc3BhdGNoIH0gZnJvbSBcInJlYWN0LXJlZHV4XCI7IFxyXG5pbXBvcnQgeyBzdHJpY3QgYXMgbGlrZUFyLCBiZWluZ0FycmF5IH0gZnJvbSBcImxpa2UtYXJcIjtcclxuaW1wb3J0IHtzbGVlcCwgY29hbGVzY2V9IGZyb20gXCJiZXN0LWdsb2JhbHNcIjtcclxuaW1wb3J0IHsgdW5leHBlY3RlZCB9IGZyb20gXCJjYXN0LWVycm9yXCI7XHJcblxyXG5pbXBvcnQge1xyXG4gICAgQXBwQmFyLCBCdXR0b25Hcm91cCwgQ2lyY3VsYXJQcm9ncmVzcywgQ2hlY2tib3gsIFxyXG4gICAgRGlhbG9nLCBEaWFsb2dBY3Rpb25zLCBEaWFsb2dDb250ZW50LCBEaWFsb2dDb250ZW50VGV4dCwgXHJcbiAgICBEaWFsb2dUaXRsZSwgRGl2aWRlciwgRmFiLCBJY29uQnV0dG9uLFxyXG4gICAgTWVudSwgTWVudUl0ZW0sIFBhcGVyLCBQb3BvdmVyLFxyXG4gICAgVGFibGUsIFRhYmxlQm9keSwgVGFibGVDZWxsLCBUYWJsZUhlYWQsIFRhYmxlUm93LCBUb29sYmFyXHJcbn0gZnJvbSBcIkBtYXRlcmlhbC11aS9jb3JlXCI7XHJcbmltcG9ydCB7IEVzdGFkb1ZhcmlhYmxlLCBGb3JtU3RydWN0dXJlU3RhdGUgfSBmcm9tIFwicm93LXZhbGlkYXRvclwiO1xyXG5pbXBvcnQgeyBDU1NQcm9wZXJ0aWVzIH0gZnJvbSBcIkBtYXRlcmlhbC11aS9jb3JlL3N0eWxlcy93aXRoU3R5bGVzXCI7XHJcblxyXG5pbXBvcnQgeyBcclxuICAgIHJlZ2lzdHJhckVsZW1lbnRvLCBzZXRBdHRyRGlzdGludG8sIHNldFZhbG9yRGlzdGludG8sIGRpc3BhdGNoQnlQYXNzLCBcclxuICAgIGdldERpcnR5LCBnZXRGZWVkYmFja1Jvd1ZhbGlkYXRvcixcclxuICAgIGdldEZ1bmNpb25IYWJpbGl0YXIsIFxyXG4gICAgZ2V0RXN0cnVjdHVyYSwgXHJcbiAgICBkZWZPcGVyYXRpdm8sXHJcbiAgICB2b2xjYWRvSW5pY2lhbEVsZW1lbnRvc1JlZ2lzdHJhZG9zLFxyXG4gICAgbnVtYmVyT3JTdHJpbmdJbmNJZkFycmF5LCBcclxuICAgIGNhbGN1bGFyRWxlbWVudG9FbmZvY2FkbyxcclxuICAgIGFjY2lvbl9yZWdpc3RyYXJfcmVzcHVlc3RhLFxyXG4gICAgYWNjaW9uX2lkX3ByZWd1bnRhLFxyXG4gICAgYWNjaW9uX2FncmVnYXJfZm9ybXVsYXJpbyxcclxuICAgIE5PX0NBTUJJQVJfX1ZFUklGSUNBUl9TSV9FU19ORUNFU0FSSU8sXHJcbiAgICBOT19DQU1CSUFSX19TT0xPX1RSQUVSX1NUQVRVU1xyXG59IGZyb20gXCIuL2J5cGFzcy1mb3JtdWxhcmlvXCJcclxuXHJcbmltcG9ydCB7aHRtbCwgSHRtbFRhZ30gZnJvbSBcImpzLXRvLWh0bWxcIjtcclxuXHJcbmNvbnN0IERFTEFZX1NDUk9MTF8zID0gNTA7XHJcblxyXG5mdW5jdGlvbiBicmVha2VhYmxlVGV4dCh0ZXh0OnN0cmluZ3xudWxsKTpzdHJpbmd8dW5kZWZpbmVkO1xyXG5mdW5jdGlvbiBicmVha2VhYmxlVGV4dCh0ZXh0OnN0cmluZ3xudWxsLCBkaWNjaW9uYXJpbz86e1tjbGF2ZTpzdHJpbmddOlJlYWN0LlJlYWN0Tm9kZX0pe1xyXG4gICAgaWYodHlwZW9mIHRleHQgIT0gXCJzdHJpbmdcIikgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgIHRleHQgPSB0ZXh0LnJlcGxhY2UoL1xcLy9nLFwiL1xcdTIwNjNcIikucmVwbGFjZSgvXFwvXFx1MjA2MyhcXHcpXFxiL2csJy8kMScpO1xyXG4gICAgdGV4dCA9IHRleHQucmVwbGFjZSgvX19fKi9nLCh0b2RvKT0+YFske3RvZG99XWApLnJlcGxhY2UoL1xcQFxcdytcXEAvZywodG9kbyk9PmBbJHt0b2RvfV1gKTtcclxuICAgIGlmKCFkaWNjaW9uYXJpbyB8fCB0cnVlKSByZXR1cm4gdGV4dDtcclxuICAgIC8qXHJcbiAgICByZXR1cm4gPHNwYW4+e3BhcnRlcy5tYXAoKHBhcnRlOnN0cmluZywgaTpudW1iZXIpID0+IDxzcGFuIHN0eWxlPXtpJTI9PTE/e3RleHREZWNvcmF0aW9uOlwidW5kZXJsaW5lXCJ9Ont9fT4ge3BhcnRlK1wiIFwifSA8L3NwYW4+KX08L3NwYW4+XHJcbiAgICAqL1xyXG59XHJcblxyXG5jb25zdCBWRVJfRE9NSU5JTyA9IGZhbHNlOyAvLyBlbCBlbmN1ZXN0YWRvciBubyBuZWNlc2l0YSB2ZXIgZWwgZG9taW5pbyBlbiBjYWRhIGVuY3Vlc3RhIHBvcnF1ZSBlbCBkb21pbmlvIGRlcGVuZGUgZGVsIMOhcmVhIHkgc2UgZGVkdWNlIGRlbCBwcmltZXIgZMOtZ2l0byBkZWwgbsO6bWVybyBkZSBlbmN1ZXN0YVxyXG4vLyBubyBwb25lciBWRVJfRE9NSU5JTyBlbiB0cnVlLCBjYW1iaWFyIHBvciB1bmEgdmFyaWFibGUgcXVlIHNlIGZpamUgc2kgZWwgRE0gZXN0w6EgZW4gbW9kbyBwcnVlYmEgbyBlbiBtb2RvIFwiZGlzZcOxbyBjb25jZXB0dWFsXCJcclxuXHJcbmNvbnN0IElEX0JPVE9OX1ZPTFZFUl9IRFIgPSAnYm90b24tdm9sdmVyLWhkcic7XHJcbmNvbnN0IElEX0JPVE9OX0NFUlJBUiA9ICdib3Rvbi1jZXJyYXItZW5jdWVzdGEnO1xyXG5cclxudmFyIGRlYmVTYWx0YXI6Ym9vbGVhbiA9IGZhbHNlO1xyXG5cclxud2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCAoKT0+e1xyXG4gICAgLypcclxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgKGV2OktleWJvYXJkRXZlbnQpPT57XHJcbiAgICAgICAgZGViZVNhbHRhciA9IGV2LmtleSA9PSAnRW50ZXInIHx8IGV2LmtleUNvZGUgPT0gMTM7XHJcbiAgICB9KVxyXG4gICAgKi9cclxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpPT57XHJcbiAgICAgICAgZGViZVNhbHRhciA9IGZhbHNlO1xyXG4gICAgfSlcclxufSlcclxuXHJcbi8vIC8qXHJcblxyXG50eXBlIENvbW1vbkF0dHJpYnV0ZXMgPSB7Y2xhc3NOYW1lPzpzdHJpbmcsc3R5bGU/OkNTU1Byb3BlcnRpZXMsaWQ/OnN0cmluZywgdGFiSW5kZXg/Om51bWJlcn0gLy8gQ1NTUHJvcGVydGllc1xyXG50eXBlIENvbG9yVmFsdWVzID0gJ3ByaW1hcnknfCdzZWNvbmRhcnknfCdkZWZhdWx0J3wnaW5oZXJpdCdcclxuXHJcbmV4cG9ydCB0eXBlIExpYnJlRGVzcGxpZWd1ZVR5cGUgPSAocHJvcHM6e1xyXG4gICAga2V5OnN0cmluZ1xyXG4gICAgY2FzaWxsZXJvOkxpYnJlXHJcbiAgICBmb3JtdWxhcmlvOkZvcm11bGFyaW9cclxuICAgIGZvclBrOkZvclBrXHJcbn0pPT5KU1guRWxlbWVudDtcclxuXHJcbnZhciBMaWJyZURlc3BsaWVndWU6IExpYnJlRGVzcGxpZWd1ZVR5cGVcclxuXHJcbmNvbnN0IEJ1dHRvbiA9ICh7dmFyaWFudCwgb25DbGljaywgZGlzYWJsZWQsIGNoaWxkcmVuLCBjbGFzc05hbWUsIGNvbG9yLCBzaXplLCBcclxuICAgICAgICBkaXNhYmxlRWxldmF0aW9uLCBkaXNhYmxlRm9jdXNSaXBwbGUsIGRpc2FibGVSaXBwbGUsIFxyXG4gICAgICAgIC4uLm90aGVyXHJcbiAgICB9OntcclxuICAgIHZhcmlhbnQ/OnN0cmluZyxcclxuICAgIGNvbG9yPzpDb2xvclZhbHVlcyxcclxuICAgIG9uQ2xpY2s/OlJlYWN0Lk1vdXNlRXZlbnRIYW5kbGVyPEhUTUxCdXR0b25FbGVtZW50PiwgLy8gIChldmVudDpNb3VzZUV2ZW50LyogPEhUTUxCdXR0b25FbGVtZW50LCBNb3VzZUV2ZW50PiovKT0+dm9pZCxcclxuICAgIGRpc2FibGVkPzpib29sZWFuXHJcbiAgICBjaGlsZHJlbjphbnksXHJcbiAgICBjbGFzc05hbWU/OnN0cmluZyxcclxuICAgIHNpemU/OidzbWFsbCcsXHJcbiAgICBkaXNhYmxlRWxldmF0aW9uPzphbnksIGRpc2FibGVGb2N1c1JpcHBsZT86YW55LCBkaXNhYmxlUmlwcGxlPzphbnksXHJcbn0gJiBDb21tb25BdHRyaWJ1dGVzKT0+PGJ1dHRvbiBcclxuICAgIHsuLi5vdGhlcn1cclxuICAgIGNsYXNzTmFtZT17YGJ0biBidG4ke3ZhcmlhbnQ9PSdjb250YWluZWQnPycnOictJysodmFyaWFudD09J291dGxpbmVkJz8nb3V0bGluZSc6dmFyaWFudCl9LSR7KGNvbG9yPT0nZGVmYXVsdCcgfHwgY29sb3I9PSdpbmhlcml0Jz8nc2Vjb25kYXJ5Jzpjb2xvcj09J3NlY29uZGFyeSc/J2Rhbmdlcic6Y29sb3IpfHwnc2Vjb25kYXJ5J30gJHtjbGFzc05hbWV8fCcnfSAke3NpemU9PSdzbWFsbCc/J2J0bi1zbSc6Jyd9YH1cclxuICAgIGRpc2FibGVkPXtkaXNhYmxlZH1cclxuICAgIG9uQ2xpY2s9e29uQ2xpY2t9XHJcbj57Y2hpbGRyZW59PC9idXR0b24+O1xyXG5cclxuY29uc3QgQnV0dG9uMiA9ICh7dmFyaWFudCwgb25DbGljaywgZGlzYWJsZWQsIGNoaWxkcmVuLCBjbGFzc05hbWUsIGNvbG9yLCBzaXplLCAuLi5vdGhlcn06e1xyXG4gICAgdmFyaWFudD86c3RyaW5nLFxyXG4gICAgY29sb3I/OkNvbG9yVmFsdWVzLFxyXG4gICAgb25DbGljaz86KCk9PnZvaWQsXHJcbiAgICBkaXNhYmxlZD86Ym9vbGVhblxyXG4gICAgY2hpbGRyZW46YW55LFxyXG4gICAgY2xhc3NOYW1lPzpzdHJpbmcsXHJcbiAgICBzaXplPzonc21hbGwnLFxyXG4gICAgJGF0dHJzPzp7fVxyXG59ICYgQ29tbW9uQXR0cmlidXRlcyk9Pmh0bWwuYnV0dG9uKHtcclxuICAgIC4uLm90aGVyLFxyXG4gICAgY2xhc3M6IGBidG4gYnRuJHt2YXJpYW50PT0nY29udGFpbmVkJz8nJzonLScrKHZhcmlhbnQ9PSdvdXRsaW5lZCc/J291dGxpbmUnOnZhcmlhbnQpfS0keyhjb2xvcj09J2RlZmF1bHQnIHx8IGNvbG9yPT0naW5oZXJpdCc/J3NlY29uZGFyeSc6Y29sb3I9PSdzZWNvbmRhcnknPydkYW5nZXInOmNvbG9yKXx8J3NlY29uZGFyeSd9ICR7Y2xhc3NOYW1lfHwnJ30gJHtzaXplPT0nc21hbGwnPydidG4tc20nOicnfWAsXHJcbiAgICBkaXNhYmxlZCxcclxuICAgICRvbjp7Y2xpY2s6b25DbGlja31cclxufSwgY2hpbGRyZW4pO1xyXG5cclxuXHJcbmNvbnN0IFRleHRGaWVsZCA9IChwcm9wczp7XHJcbiAgICBpZDpzdHJpbmcsXHJcbiAgICBkaXNhYmxlZD86Ym9vbGVhbixcclxuICAgIGNsYXNzTmFtZT86c3RyaW5nLFxyXG4gICAgYXV0b0ZvY3VzPzpib29sZWFuLFxyXG4gICAgZnVsbFdpZHRoOmJvb2xlYW5cclxuICAgIGlucHV0UHJvcHM/OmFueSxcclxuICAgIHZhbHVlPzphbnksXHJcbiAgICB0eXBlOmFueSxcclxuICAgIGxhYmVsPzpzdHJpbmcsXHJcbiAgICBlcnJvcj86Ym9vbGVhbixcclxuICAgIGhlbHBlclRleHQ/OnN0cmluZyxcclxuICAgIG11bHRpbGluZT86Ym9vbGVhbixcclxuICAgIG9uQ2hhbmdlPzooZXZlbnQ6YW55KT0+dm9pZCxcclxuICAgIG9uRm9jdXM/OihldmVudDphbnkpPT52b2lkLFxyXG4gICAgb25CbHVyPzooZXZlbnQ6YW55LCB2YWxvcjphbnkpPT52b2lkLFxyXG4gICAgLy8gb25LZXlEb3duPzooZXZlbnQ6S2V5Ym9hcmRFdmVudCk9PnZvaWQgLy8gS2V5Ym9hcmRFdmVudEhhbmRsZXI8SFRNTElucHV0RWxlbWVudD5cclxuICAgIG9uS2V5RG93bj86UmVhY3QuS2V5Ym9hcmRFdmVudEhhbmRsZXI8SFRNTElucHV0RWxlbWVudD5cclxufSk9PjxpbnB1dFxyXG4gICAgaWQ9e3Byb3BzLmlkfVxyXG4gICAgZGlzYWJsZWQ9e3Byb3BzLmRpc2FibGVkfVxyXG4gICAgY2xhc3NOYW1lPXtwcm9wcy5jbGFzc05hbWV9XHJcbiAgICBhdXRvRm9jdXM9e3Byb3BzLmF1dG9Gb2N1c31cclxuICAgIHZhbHVlPXtwcm9wcy52YWx1ZX0gXHJcbiAgICB0eXBlPXtwcm9wcy50eXBlfVxyXG4gICAgb25DaGFuZ2U9e3Byb3BzLm9uQ2hhbmdlfVxyXG4gICAgb25Gb2N1cz17cHJvcHMub25Gb2N1c31cclxuICAgIG9uQmx1cj17KGV2dCk9PnByb3BzLm9uQmx1cj8uKGV2dCwgZXZ0LnRhcmdldC52YWx1ZSl9XHJcbiAgICBvbktleURvd249e3Byb3BzLm9uS2V5RG93bn1cclxuICAgIHBsYWNlaG9sZGVyPXtwcm9wcy5sYWJlbH1cclxuLz47XHJcblxyXG5jb25zdCBUeXBvZ3JhcGh5ID0gKHtjaGlsZHJlbiwgLi4ub3RoZXJzfTp7XHJcbiAgICBjaGlsZHJlbjphbnksXHJcbiAgICBjb21wb25lbnQ/OnN0cmluZ1xyXG4gICAgdmFyaWFudD86J2g2J1xyXG59JkNvbW1vbkF0dHJpYnV0ZXMpPT5SZWFjdC5jcmVhdGVFbGVtZW50KG90aGVycy52YXJpYW50fHxvdGhlcnMuY29tcG9uZW50fHwnZGl2JyxvdGhlcnMsY2hpbGRyZW4pO1xyXG5cclxuZnVuY3Rpb24gR3JpZChwcm9wczp7XHJcbiAgICBjb250YWluZXI/OmJvb2xlYW4sXHJcbiAgICBzcGFjaW5nPzpudW1iZXIsXHJcbiAgICBpdGVtPzpib29sZWFuLFxyXG4gICAgd3JhcD86J3dyYXAnfCdub3dyYXAnLFxyXG4gICAgZGlyZWN0aW9uPzoncm93J3wnY29sdW1uJ1xyXG4gICAgYWxpZ25JdGVtcz86J3N0cmV0Y2gnIHwgJ2ZsZXgtc3RhcnQnIHwgJ2ZsZXgtZW5kJyB8ICdjZW50ZXInIHwgJ2Jhc2VsaW5lJyxcclxuICAgIGNoaWxkcmVuOmFueSxcclxuICAgIHhzPzpudW1iZXIsXHJcbiAgICBzbT86bnVtYmVyLFxyXG59JkNvbW1vbkF0dHJpYnV0ZXMpe1xyXG4gICAgdmFyIHtjb250YWluZXIsIGl0ZW0sIHdyYXAsIGRpcmVjdGlvbiwgYWxpZ25JdGVtcywgY2hpbGRyZW4sIGNsYXNzTmFtZSwgeHMsIHNtLCBzcGFjaW5nLCAuLi5vdGhlcn0gPSBwcm9wcztcclxuICAgIHJldHVybiA8ZGl2XHJcbiAgICB7Li4ub3RoZXJ9XHJcbiAgICBjbGFzc05hbWU9e2Ake2NsYXNzTmFtZXx8Jyd9ICR7eHMhPW51bGw/J2dyaWQteHMtJyt4czonJ30gJHtzbSE9bnVsbD8nZ3JpZC1zbS0nK3NtOicnfWB9XHJcbiAgICBzdHlsZT17Y29udGFpbmVyP3tcclxuICAgICAgICBkaXNwbGF5OidmbGV4JyxcclxuICAgICAgICBmbGV4V3JhcDp3cmFwLFxyXG4gICAgICAgIGZsZXhEaXJlY3Rpb246ZGlyZWN0aW9uLFxyXG4gICAgICAgIGFsaWduSXRlbXM6YWxpZ25JdGVtcyxcclxuICAgICAgICBtYXJnaW46c3BhY2luZyE9bnVsbD9zcGFjaW5nKjgrJ3B4Jzp1bmRlZmluZWRcclxuICAgIH06e1xyXG4gICAgfX1cclxuPntjaGlsZHJlbn08L2Rpdj5cclxufVxyXG5cclxudmFyIHAxMiA9ICdwMTInIGFzIElkVmFyaWFibGU7XHJcbnZhciBzcDIgPSAnc3AyJyBhcyBJZFZhcmlhYmxlO1xyXG52YXIgc3AzID0gJ3NwMycgYXMgSWRWYXJpYWJsZTtcclxudmFyIHNwNCA9ICdzcDQnIGFzIElkVmFyaWFibGU7XHJcbnZhciBzcDUgPSAnc3A1JyBhcyBJZFZhcmlhYmxlO1xyXG5cclxudmFyIGRpY2Npb25hcmlvID0ge31cclxuXHJcbi8qXHJcbi8vIGNvbnN0IHRha2VFbGVtZW50T3JEZWZhdWx0PEssIFQgZXh0ZW5kcyBbSyBpbl0sIEQ+KClcclxuZnVuY3Rpb24gaXNJbjxWLCBUPihrOmtleW9mIFQsIG9iamVjdDpUKTogb2JqZWN0W2tdIGlzIFZ7XHJcbiAgICByZXR1cm4gdHJ1ZVxyXG59XHJcbiovXHJcbmZ1bmN0aW9uIHRha2VFbGVtZW50T3JEZWZhdWx0PFYsSyBleHRlbmRzIHN0cmluZyxLTyBleHRlbmRzIHN0cmluZz4oazpLLCBvYmplY3Q6e1trIGluIEtPXTpWfSwgZGVmYXVsdFZhbHVlOlYpOlZ7XHJcbiAgICByZXR1cm4gayBpbiBvYmplY3QgPyBcclxuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIHBvciBhbGd1bmEgcmF6w7NuIFRTIG5vIHF1aWVyZSBlbnRlbmRlciBxdWUgc2kgayBlc3TDoSBlbiBvYmplY3QsIG9iamVjdFtrXSBleGlzdGVcclxuICAgICAgICBvYmplY3Rba10gXHJcbiAgICA6IGRlZmF1bHRWYWx1ZVxyXG59XHJcblxyXG5mdW5jdGlvbiBEZXNwbGllZ3VlRW5jYWJlemFkbyhwcm9wczp7Y2FzaWxsZXJvOkNhc2lsbGVyb0VuY2FiZXphYmxlLCBsZWVyPzpib29sZWFufSl7XHJcbiAgICBjb25zdCBmb3JQa051bGw9e30gYXMgRm9yUGs7XHJcbiAgICByZXR1cm4gPEVuY2FiZXphZG9EZXNwbGllZ3VlIGNhc2lsbGVybz17cHJvcHMuY2FzaWxsZXJvfSBsZWVyPXtwcm9wcy5sZWVyfSBmb3JQaz17Zm9yUGtOdWxsfS8+O1xyXG59XHJcblxyXG5mdW5jdGlvbiBzdWJpckhhc3RhKGVsZW1lbnRvOkhUTUxFbGVtZW50fG51bGwsIGZ1bjooZWxlbWVudG86SFRNTEVsZW1lbnQpPT5ib29sZWFuKTpIVE1MRWxlbWVudHxudWxse1xyXG4gICAgaWYoZWxlbWVudG8gPT0gbnVsbCkgcmV0dXJuIG51bGw7XHJcbiAgICBpZihmdW4oZWxlbWVudG8pKSByZXR1cm4gZWxlbWVudG87XHJcbiAgICByZXR1cm4gc3ViaXJIYXN0YShlbGVtZW50by5wYXJlbnRFbGVtZW50LCBmdW4pO1xyXG59XHJcblxyXG52YXIgZWxlbWVudG9Db25TZW5uaWFsQm9ycmFyOkhUTUxFbGVtZW50fG51bGwgPSBudWxsO1xyXG5cclxuZnVuY3Rpb24gQm90b25Cb3JyYXIoe2lkLCB2YXJpYWJsZSwgZm9yUGssIHZhbG9yT3BjaW9ufTp7aWQ6c3RyaW5nLCB2YXJpYWJsZTpJZFZhcmlhYmxlLCBmb3JQazpGb3JQaywgdmFsb3JPcGNpb24/OmFueX0pe1xyXG4gICAgdmFyIGhhbmRsZUNsaWNrQm9ycmFyPSgpPT57XHJcbiAgICAgICAgZGlzcGF0Y2hCeVBhc3MoYWNjaW9uX3JlZ2lzdHJhcl9yZXNwdWVzdGEsIHtyZXNwdWVzdGE6bnVsbCwgdmFyaWFibGU6dmFyaWFibGUsIGZvclBrOmZvclBrfSlcclxuICAgIH07XHJcbiAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9XCJib3Rvbi1ib3JyYXJcIj5cclxuICAgICAgICA8QnV0dG9uXHJcbiAgICAgICAgICAgIGlkPXtpZH1cclxuICAgICAgICAgICAgbWktdmFyaWFibGU9e3ZhcmlhYmxlfVxyXG4gICAgICAgICAgICB2YWxvci1vcGNpb249e3ZhbG9yT3BjaW9ufVxyXG4gICAgICAgICAgICB2YXJpYW50PVwib3V0bGluZWRcIlxyXG4gICAgICAgICAgICBjbGFzc05hbWU9XCJib3Rvbi1vcGNpb24gYm90b24tb3BjaW9uLWJvcnJhclwiXHJcbiAgICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZUNsaWNrQm9ycmFyfVxyXG4gICAgICAgID5cclxuICAgICAgICAgICAgPElDT04uRGVsZXRlRm9yZXZlci8+XHJcbiAgICAgICAgPC9CdXR0b24+XHJcbiAgICA8L2Rpdj5cclxufVxyXG5cclxuZnVuY3Rpb24gU2FsdG9EZXNwbGllZ3VlKHtjYXNpbGxlcm8scHJlZmlqb306e2Nhc2lsbGVybzpQcmVndW50YXxPcGNpb258RmlsdHJvLCBwcmVmaWpvPzpzdHJpbmd9KXtcclxuICAgIHJldHVybiBjYXNpbGxlcm8uc2FsdG8/XHJcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJwYXNlXCI+XHJcbiAgICAgICAgICAgIHtwcmVmaWpvPzxzcGFuIGNsYXNzTmFtZT1cInByZWZpam9cIj57cHJlZmlqb30gPC9zcGFuPjpudWxsfVxyXG4gICAgICAgICAgICA8SUNPTi5UcmVuZGluZ0ZsYXQgLz48c3Bhbj57Y2FzaWxsZXJvLnNhbHRvfTwvc3Bhbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDpudWxsXHJcbn1cclxuXHJcbmZ1bmN0aW9uIE9wY2lvbkRlc3BsaWVndWUocHJvcHM6e2Nhc2lsbGVybzpPcGNpb24sIHZhbG9yT3BjaW9uOm51bWJlciwgdmFyaWFibGU6SWRWYXJpYWJsZSwgZm9yUGs6Rm9yUGssIGxlZXI6Ym9vbGVhbiwgY29uQm90b25Cb3JyYXI6Ym9vbGVhbn0pe1xyXG4gICAgY29uc3Qge2Nhc2lsbGVyb30gPSBwcm9wcztcclxuICAgIHZhciBkaXNwYXRjaCA9IHVzZURpc3BhdGNoKCk7XHJcbiAgICB2YXIgc2FsdG9BdXRvbWF0aWNvID0gdXNlU2VsZWN0b3IoKHN0YXRlOkNhc29TdGF0ZSk9PnN0YXRlLm9wY2lvbmVzLnNhbHRvQXV0b21hdGljbyk7XHJcbiAgICB2YXIgaGFuZGxlQ2xpY2s6UmVhY3QuTW91c2VFdmVudEhhbmRsZXI8SFRNTEJ1dHRvbkVsZW1lbnQ+ID0gYXN5bmMgKGV2ZW50KT0+e1xyXG4gICAgICAgIHZhciBjb250YWluZXIgPSBzdWJpckhhc3RhKGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudCwgZWxlbWVudG89PmVsZW1lbnRvLmNsYXNzTGlzdC5jb250YWlucygncHJlZ3VudGEnKSB8fCBlbGVtZW50by5jbGFzc0xpc3QuY29udGFpbnMoJ211bHRpcGxlJykpIHx8IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtYWluX2xheW91dCcpITtcclxuICAgICAgICB2YXIgdGllbmUgPSBjb250YWluZXIuZ2V0QXR0cmlidXRlKCdlc3RveS1ib3JyYW5kbycpO1xyXG4gICAgICAgIGNvbnRhaW5lci5zZXRBdHRyaWJ1dGUoJ2VzdG95LWJvcnJhbmRvJywnTk8nKTtcclxuICAgICAgICBpZihlbGVtZW50b0NvblNlbm5pYWxCb3JyYXIpe1xyXG4gICAgICAgICAgICBlbGVtZW50b0NvblNlbm5pYWxCb3JyYXIuc2V0QXR0cmlidXRlKCdlc3RveS1ib3JyYW5kbycsJ05PJyk7XHJcbiAgICAgICAgICAgIGVsZW1lbnRvQ29uU2VubmlhbEJvcnJhciA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciB7cmVjZW50TW9kaWZpZWQsIHNpZ3VpZW50ZVZhcmlhYmxlfSA9IGRpc3BhdGNoQnlQYXNzKGFjY2lvbl9yZWdpc3RyYXJfcmVzcHVlc3RhLCB7cmVzcHVlc3RhOnByb3BzLnZhbG9yT3BjaW9uLCB2YXJpYWJsZTpwcm9wcy52YXJpYWJsZSwgZm9yUGs6cHJvcHMuZm9yUGt9KTtcclxuICAgICAgICBpZighcmVjZW50TW9kaWZpZWQpe1xyXG4gICAgICAgICAgICBjb250YWluZXIuc2V0QXR0cmlidXRlKCdlc3RveS1ib3JyYW5kbycsdGllbmU9PSdTSSc/J05PJzonU0knKTtcclxuICAgICAgICAgICAgaWYodGllbmUhPSdTSScpe1xyXG4gICAgICAgICAgICAgICAgZWxlbWVudG9Db25TZW5uaWFsQm9ycmFyPWNvbnRhaW5lcjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICBpZihzaWd1aWVudGVWYXJpYWJsZSAmJiBzYWx0b0F1dG9tYXRpY28pe1xyXG4gICAgICAgICAgICAgICAgdmFyIGJvdG9uU3R5bGUgPSAoZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50KT8uc3R5bGU7XHJcbiAgICAgICAgICAgICAgICBpZihib3RvblN0eWxlKSBib3RvblN0eWxlLmNvbG9yID0gJ2dyZWVuJztcclxuICAgICAgICAgICAgICAgIGF3YWl0IHNsZWVwKERFTEFZX1NDUk9MTF8zKTtcclxuICAgICAgICAgICAgICAgIGlmKGJvdG9uU3R5bGUpIGJvdG9uU3R5bGUuY29sb3IgPSAnYmx1ZSc7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCBzbGVlcChERUxBWV9TQ1JPTExfMyk7XHJcbiAgICAgICAgICAgICAgICBpZihib3RvblN0eWxlKSBib3RvblN0eWxlLmNvbG9yID0gJ2dyZWVuJztcclxuICAgICAgICAgICAgICAgIGF3YWl0IHNsZWVwKERFTEFZX1NDUk9MTF8zKTtcclxuICAgICAgICAgICAgICAgIGlmKGJvdG9uU3R5bGUpIGJvdG9uU3R5bGUuY29sb3IgPSAnJztcclxuICAgICAgICAgICAgICAgIC8vQHRzLWlnbm9yZSBhbGd1bm9zIGNhc2lsbGVyb3MgdGllbmVuIGVzcGVjaWFsIHkgb3Ryb3Mgbm9cclxuICAgICAgICAgICAgICAgIChjYXNpbGxlcm8uZXNwZWNpYWw/Lm5vU2Nyb2xsID09IHRydWUpP251bGw6ZW5mb2NhckVsZW1lbnRvRGVWYXJpYWJsZShjYXNpbGxlcm8uZXNwZWNpYWw/LnNjcm9sbFRvID8/IHNpZ3VpZW50ZVZhcmlhYmxlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICByZXR1cm4gPEdyaWQgY2xhc3NOYW1lPVwib3BjaW9uXCI+IFxyXG4gICAgICAgIHtwcm9wcy5jb25Cb3RvbkJvcnJhcj88Qm90b25Cb3JyYXJcclxuICAgICAgICAgICAgaWQ9e2BvcGNpb24tdmFyLSR7cHJvcHMudmFyaWFibGV9LSR7cHJvcHMudmFsb3JPcGNpb259LWJvcnJhcmB9XHJcbiAgICAgICAgICAgIGZvclBrPXtwcm9wcy5mb3JQa31cclxuICAgICAgICAgICAgdmFyaWFibGU9e3Byb3BzLnZhcmlhYmxlfVxyXG4gICAgICAgICAgICB2YWxvck9wY2lvbj17cHJvcHMudmFsb3JPcGNpb259XHJcbiAgICAgICAgICAgIC8+Om51bGx9XHJcbiAgICAgICAgPEJ1dHRvbiBcclxuICAgICAgICAgICAgaWQ9e2BvcGNpb24tdmFyLSR7cHJvcHMudmFyaWFibGV9LSR7cHJvcHMudmFsb3JPcGNpb259YH1cclxuICAgICAgICAgICAgbWktdmFyaWFibGU9e3Byb3BzLnZhcmlhYmxlfVxyXG4gICAgICAgICAgICB2YWxvci1vcGNpb249e3Byb3BzLnZhbG9yT3BjaW9ufVxyXG4gICAgICAgICAgICB2YXJpYW50PVwib3V0bGluZWRcIlxyXG4gICAgICAgICAgICBjbGFzc05hbWU9XCJib3Rvbi1vcGNpb24gYm90b24tb3BjaW9uLXNlbGVjY2lvblwiXHJcbiAgICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZUNsaWNrfVxyXG4gICAgICAgICAgICB0YWJJbmRleD17LTF9XHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgICA8R3JpZCBjb250YWluZXIgd3JhcD1cIm5vd3JhcFwiPlxyXG4gICAgICAgICAgICAgICAgPEdyaWQgY2xhc3NOYW1lPVwiaWRcIj5cclxuICAgICAgICAgICAgICAgICAgICB7Y2FzaWxsZXJvLnZlcl9pZCB8fCBjYXNpbGxlcm8uY2FzaWxsZXJvfVxyXG4gICAgICAgICAgICAgICAgPC9HcmlkPlxyXG4gICAgICAgICAgICAgICAgPEdyaWQgY2xhc3NOYW1lPVwib3BjaW9uLXRleHRvXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPFR5cG9ncmFwaHkgZGViZS1sZWVyPXtjYXNpbGxlcm8ubGVlcj8nU0knOmNhc2lsbGVyby5sZWVyPT09ZmFsc2U/J05PJzpwcm9wcy5sZWVyPydTSSc6J05PJ30+e2JyZWFrZWFibGVUZXh0KGNhc2lsbGVyby5ub21icmUpfTwvVHlwb2dyYXBoeT5cclxuICAgICAgICAgICAgICAgICAgICB7Y2FzaWxsZXJvLmFjbGFyYWNpb24/XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxUeXBvZ3JhcGh5IGNsYXNzTmFtZT0nYWNsYXJhY2lvbic+e2JyZWFrZWFibGVUZXh0KGNhc2lsbGVyby5hY2xhcmFjaW9uKX08L1R5cG9ncmFwaHk+XHJcbiAgICAgICAgICAgICAgICAgICAgOm51bGx9XHJcbiAgICAgICAgICAgICAgICA8L0dyaWQ+XHJcbiAgICAgICAgICAgIDwvR3JpZD5cclxuICAgICAgICA8L0J1dHRvbj5cclxuICAgICAgICA8U2FsdG9EZXNwbGllZ3VlIGNhc2lsbGVybz17Y2FzaWxsZXJvfS8+XHJcbiAgICA8L0dyaWQ+XHJcbn1cclxuaW50ZXJmYWNlIEljYXNpbGxlcm9Db25PcGNpb25lc3tcclxuICAgIHZhcl9uYW1lOklkVmFyaWFibGUsXHJcbiAgICBkZXNwbGllZ3VlQ29udGVuaWRvOid2ZXJ0aWNhbCd8J2hvcml6b250YWwnfG51bGwsXHJcbiAgICBjYXNpbGxlcm9zOk9wY2lvbltdXHJcbn1cclxuXHJcblxyXG5mdW5jdGlvbiBTaU5vRGVzcGxpZWd1ZShwcm9wczp7Y2FzaWxsZXJvQ29uT3BjaW9uZXM6SWNhc2lsbGVyb0Nvbk9wY2lvbmVzLCBmb3JQazpGb3JQaywgZGVzcGxpZWd1ZUNvbnRlbmlkbzondmVydGljYWwnfCdob3Jpem9udGFsJ30pe1xyXG4gICAgcmV0dXJuIDxPcGNpb25lc0Rlc3BsaWVndWUgXHJcbiAgICAgICAgY2FzaWxsZXJvQ29uT3BjaW9uZXM9e3Byb3BzLmNhc2lsbGVyb0Nvbk9wY2lvbmVzfSBcclxuICAgICAgICBmb3JQaz17cHJvcHMuZm9yUGt9IFxyXG4gICAgICAgIGxlZXI9e2ZhbHNlfVxyXG4gICAgICAgIGRlc3BsaWVndWVDb250ZW5pZG89e3Byb3BzLmRlc3BsaWVndWVDb250ZW5pZG99XHJcbiAgICAvPlxyXG59XHJcblxyXG5mdW5jdGlvbiByZWdpc3RyYWRvckRlVmFyaWFibGUocHJlZ3VudGE6UHJlZ3VudGF8T3BjaW9uTXVsdGlwbGV8Q29uanVudG9QcmVndW50YXMpe1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgICByZXNwdWVzdGFzOlJlc3B1ZXN0YXMsIGZlZWRiYWNrRm9ybTogRm9ybVN0cnVjdHVyZVN0YXRlPElkVmFyaWFibGUsIFZhbG9yLCBJZEZpbj4sIGVsZW1lbnRvOkhUTUxEaXZFbGVtZW50XHJcbiAgICApPT57XHJcbiAgICAgICAgdmFyIHZhbG9yQWN0dWFsID0gcHJlZ3VudGEudmFyX25hbWUgPT0gbnVsbCA/IG51bGwgOiByZXNwdWVzdGFzW3ByZWd1bnRhLnZhcl9uYW1lXTtcclxuICAgICAgICB2YXIgZmVlZGJhY2tSb3cgPSBmZWVkYmFja0Zvcm0uZmVlZGJhY2s7XHJcbiAgICAgICAgdmFyIGZlZWRiYWNrVmFyID0gcHJlZ3VudGEudmFyX25hbWUgPT0gbnVsbCA/IG51bGwgOiBmZWVkYmFja1Jvd1twcmVndW50YS52YXJfbmFtZV07XHJcbiAgICAgICAgdmFyIHRpZW5lVmFsb3I9dmFsb3JBY3R1YWwhPW51bGwgJiYgZmVlZGJhY2tWYXIhPW51bGw/KGZlZWRiYWNrVmFyLmNvblByb2JsZW1hPydpbnZhbGlkbyc6J3ZhbGlkbycpOidOTyc7XHJcbiAgICAgICAgdmFyIGVzdGFkbzpFc3RhZG9WYXJpYWJsZTsgXHJcbiAgICAgICAgaWYocHJlZ3VudGEudGlwb3Zhcil7XHJcbiAgICAgICAgICAgIGVzdGFkbz1mZWVkYmFja1Zhcj8uZXN0YWRvITtcclxuICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgdmFyIGZlZWRiYWNrTXVsdGkgPSBwcmVndW50YS5jYXNpbGxlcm9zLmZpbHRlcihjPT5jLnZhcl9uYW1lIT1udWxsKS5yZWR1Y2UoKHB2LCBvbSk9PntcclxuICAgICAgICAgICAgICAgIHZhciBmYj1mZWVkYmFja1Jvdz8uW29tLnZhcl9uYW1lIV0hXHJcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRpZW5lQWN0dWFsOiBwdi50aWVuZUFjdHVhbCB8fCBmYi5lc3RhZG89PSdhY3R1YWwnLFxyXG4gICAgICAgICAgICAgICAgICAgIGVzdGFTYWx0ZWFkYTogcHYuZXN0YVNhbHRlYWRhICYmIChmYi5lc3RhZG89PSdzYWx0ZWFkYScgfHwgZmIuZXN0YWRvPT0nZnVlcmFfZGVfZmx1am9fcG9yX3NhbHRvJylcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSwge3RpZW5lQWN0dWFsOmZhbHNlLCBlc3RhU2FsdGVhZGE6dHJ1ZX0pO1xyXG4gICAgICAgICAgICBlc3RhZG89ZmVlZGJhY2tNdWx0aS50aWVuZUFjdHVhbD8nYWN0dWFsJzpmZWVkYmFja011bHRpLmVzdGFTYWx0ZWFkYT8nc2FsdGVhZGEnOid0b2RhdmlhX25vJ1xyXG4gICAgICAgIH1cclxuICAgICAgICBzZXRBdHRyRGlzdGludG8oZWxlbWVudG8sICdudWVzdHJvLXZhbGlkYXRvcicsIGVzdGFkbyk7XHJcbiAgICAgICAgc2V0QXR0ckRpc3RpbnRvKGVsZW1lbnRvLCAndGllbmUtdmFsb3InLCB0aWVuZVZhbG9yKTtcclxuICAgICAgICBzZXRBdHRyRGlzdGludG8oZWxlbWVudG8sICdlc3RhLWluaGFiaWxpdGFkYScsIGZlZWRiYWNrVmFyPy5pbmhhYmlsaXRhZGE/J1NJJzonTk8nKTtcclxuICAgICAgICBpZihwcmVndW50YS52YXJfbmFtZSl7XHJcbiAgICAgICAgICAgIHZhciBvcGNpb25lczpIVE1MQnV0dG9uRWxlbWVudFtdID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZWxlbWVudG8ucXVlcnlTZWxlY3RvckFsbChgLmJvdG9uLW9wY2lvblttaS12YXJpYWJsZT1cIiR7cHJlZ3VudGEudmFyX25hbWV9XCJdYCksMCk7XHJcbiAgICAgICAgICAgIHZhciBlbGVtZW50b09wY2lvbjpIVE1MQnV0dG9uRWxlbWVudDtcclxuICAgICAgICAgICAgZm9yKGVsZW1lbnRvT3BjaW9uIG9mIG9wY2lvbmVzKXtcclxuICAgICAgICAgICAgICAgIHZhciB2YWxvck9wY2lvbiA9IGVsZW1lbnRvT3BjaW9uLmdldEF0dHJpYnV0ZSgndmFsb3Itb3BjaW9uJyk7XHJcbiAgICAgICAgICAgICAgICBzZXRBdHRyRGlzdGludG8oZWxlbWVudG9PcGNpb24sICdvcGNpb24tc2VsZWNjaW9uYWRhJywgdmFsb3JPcGNpb24gPT0gdmFsb3JBY3R1YWwgPyBcIlNJXCI6IFwiTk9cIilcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YXIgZWxlbWVudG9zSW5wdXQ6SFRNTElucHV0RWxlbWVudFtdID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZWxlbWVudG8ucXVlcnlTZWxlY3RvckFsbCgnLnZhcmlhYmxlJykpO1xyXG4gICAgICAgICAgICB2YXIgZWxlbWVudG9JbnB1dDpIVE1MSW5wdXRFbGVtZW50O1xyXG4gICAgICAgICAgICBmb3IoZWxlbWVudG9JbnB1dCBvZiBlbGVtZW50b3NJbnB1dCl7XHJcbiAgICAgICAgICAgICAgICBzZXRWYWxvckRpc3RpbnRvKGVsZW1lbnRvSW5wdXQsICd2YWx1ZScsIHZhbG9yQWN0dWFsID09IG51bGwgPyAnJyA6IHZhbG9yQWN0dWFsLnRvU3RyaW5nKCkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciBib3Rvbk5zTmMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcIm5zbmMtcHJlZ3VudGEtXCIrcHJlZ3VudGEudmFyX25hbWUpITtcclxuICAgICAgICAgICAgc2V0QXR0ckRpc3RpbnRvKGJvdG9uTnNOYywgJ29wY2lvbi1zZWxlY2Npb25hZGEnLCB2YWxvckFjdHVhbCA9PSAocHJlZ3VudGEudmFsb3JfbnNfbmMgPz8gLTkpID8gXCJTSVwiIDogXCJOT1wiKVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxuZnVuY3Rpb24gT3BjaW9uTXVsdGlwbGVEZXNwbGllZ3VlKHByb3BzOntvcGNpb25NOk9wY2lvbk11bHRpcGxlLCBmb3JQazpGb3JQa30pe1xyXG4gICAgY29uc3Qge29wY2lvbk19ID0gcHJvcHM7XHJcbiAgICB2YXIgaWQgPSBgb3BjaW9uTS0ke29wY2lvbk0uaWRfY2FzaWxsZXJvfWA7XHJcbiAgICByZWdpc3RyYXJFbGVtZW50byh7XHJcbiAgICAgICAgaWQsIFxyXG4gICAgICAgIGRpcmVjdDp0cnVlLCBcclxuICAgICAgICBmdW46IHJlZ2lzdHJhZG9yRGVWYXJpYWJsZShvcGNpb25NKVxyXG4gICAgfSlcclxuICAgIHJldHVybiA8RGVzcGxlZ2FyQ2FzaWxsZXJvIFxyXG4gICAgICAgIGlkPXtpZH1cclxuICAgICAgICBjYXNpbGxlcm89e29wY2lvbk19XHJcbiAgICAgICAgZGVzcGxpZWd1ZUVuY2FiZXphZG89J2xhdGVyYWwnXHJcbiAgICA+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+e1xyXG4gICAgdmFyIGZvcm1zVml2aWVuZGEgPSBnZXRGb3JtdWxhcmlvc0ZvcklkVml2aWVuZGEoZm9yUGtQYWRyZS52aXZpZW5kYSk7XHJcbiAgICB2YXIgdWFEZWYgPSBlc3RydWN0dXJhLnVuaWRhZGVzX2FuYWxpc2lzW3VuaWRhZF9hbmFsaXNpc107XHJcbiAgICB2YXIgYXJyYXlFc3RydWN0dXJhRm9ybXVsYXJpb3MgPSAobGlrZUFyKGVzdHJ1Y3R1cmEuZm9ybXVsYXJpb3MpKS5hcnJheSgpO1xyXG4gICAgdmFyIHggPSBsaWtlQXIodWFEZWYuaGlqYXMpLmZpbHRlcih1YUhpamE9PlxyXG4gICAgICAgICAgICBmb3Jtc1ZpdmllbmRhLmluY2x1ZGVzKFxyXG4gICAgICAgICAgICAgICAgYXJyYXlFc3RydWN0dXJhRm9ybXVsYXJpb3MuZmluZCgoaW5mb0Zvcm11bGFyaW8pPT5cclxuICAgICAgICAgICAgICAgICAgICBpbmZvRm9ybXVsYXJpby5jYXNpbGxlcm9zLnVuaWRhZF9hbmFsaXNpcyA9PSB1YUhpamE/LnVuaWRhZF9hbmFsaXNpcylcclxuICAgICAgICAgICAgICAgID8uY2FzaWxsZXJvcy5pZF9jYXNpbGxlcm8gYXMgSWRGb3JtdWxhcmlvXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICApLm1hcCh1YUhpamE9PihcclxuICAgICAgICB1YUhpamEgPT0gbnVsbCA/IG51bGwgOlxyXG4gICAgICAgIGh0bWwuZGl2KHtjbGFzczondWEtaGlqYXMnfSxbXHJcbiAgICAgICAgICAgIGh0bWwuZGl2KHVhSGlqYS51bmlkYWRfYW5hbGlzaXMpLFxyXG4gICAgICAgICAgICBodG1sLmRpdihcclxuICAgICAgICAgICAgICAgIGxpa2VBcihyW3VhSGlqYS51bmlkYWRfYW5hbGlzaXNdfHxbXSkubWFwKChyZXNwdWVzdGFzSGlqYSwgaSk9PntcclxuICAgICAgICAgICAgICAgICAgICB2YXIgbnVtID0gTnVtYmVyKGkpKzFcclxuICAgICAgICAgICAgICAgICAgICB2YXIgZm9yUGtIaWphUGFyY2lhbCA9IHsuLi5mb3JQa1BhZHJlLCBbdWFIaWphLnBrX2FncmVnYWRhXTogbnVtfTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgY29uZmlnU29ydGVvRm9ybXVsYXJpbyA9IGVzdHJ1Y3R1cmEuY29uZmlnU29ydGVvP2VzdHJ1Y3R1cmEuY29uZmlnU29ydGVvW2dldE1haW5Gb3JtRm9yVml2aWVuZGEoZm9yUGtQYWRyZS52aXZpZW5kYSEpXTpudWxsXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGh0bWwuZGl2KHtjbGFzczonbnVtZXJhZG9yLXVhJ30sIFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaHRtbC5kaXYoe2NsYXNzOidib3RvbmVzLXVhJ30sW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaHRtbC5kaXYoe2NsYXNzOidudW1lcm8tdWEnfSxudW0udG9TdHJpbmcoKSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5saWtlQXIoZXN0cnVjdHVyYS5mb3JtdWxhcmlvcylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoZm9ybURlZj0+Zm9ybURlZi5jYXNpbGxlcm9zLnVuaWRhZF9hbmFsaXNpcyA9PSB1YUhpamEudW5pZGFkX2FuYWxpc2lzIClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5tYXAoKF9mb3JtRGVmLCBmb3JtdWxhcmlvKT0+e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmb3JQayA9IHsuLi5mb3JQa0hpamFQYXJjaWFsLCBmb3JtdWxhcmlvfTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZmVlZGJhY2tGb3JtID0gZmVlZGJhY2tBbGxbdG9QbGFpbkZvclBrKGZvclBrKV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZlZWRiYWNrRm9ybSA/IGh0bWwuZGl2KHt9LFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaHRtbC5idXR0b24oKHVhSGlqYSEpLnBrX2FncmVnYWRhK1wiIG9rOiBcIisoTnVtYmVyKGkpKzEpKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm90b25Gb3JtdWxhcmlvQ29uUmVzdW1lbihcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JQaywgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtLCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3R1YWw6IHRydWUgfHwgY2FsY3VsYXJBY3R1YWxCRihjb25maWdTb3J0ZW9Gb3JtdWxhcmlvLCBudW0sIG51bGwsIGZvcm11bGFyaW8sIHIpLCAvL1JFVklTQVIgdHJ1ZSBwYXJhIHF1ZSBubyBzZSBncmlzZW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2aW86ZmFsc2UsIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkOiBjYWxjdWxhckRpc2FibGVkQkYoY29uZmlnU29ydGVvRm9ybXVsYXJpbywgbnVtLCBmb3JtdWxhcmlvLCByKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZlZWRiYWNrRm9ybSwgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2Rlc3BsaWVndWVPY3VsdGE6ZmFsc2UsIGV4cHJlc2lvbl9oYWJpbGl0YXJfanM6JycsIG5vbWJyZTpmb3JtdWxhcmlvLCBhY2xhcmFjaW9uOm51bGwsIHNhbHRvOmZvcm11bGFyaW99LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yUGtQYWRyZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYm90b24taXItcmVzdW1lbi1mb3JtdWxhcmlvXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlc3RydWN0dXJhLmZvcm11bGFyaW9zW2Zvcm11bGFyaW9dLmNhc2lsbGVyb3NcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pIDogbnVsbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkuYXJyYXkoKS5tYXAoeD0+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+XHJcbiAgICAgICAgKi9cclxuICAgIF0pLmNyZWF0ZSgpXHJcbn1cclxuXHJcblxyXG5mdW5jdGlvbiBCb3RvbkZvcm11bGFyaW9EZXNwbGllZ3VlKHByb3BzOntjYXNpbGxlcm86Qm90b25Gb3JtdWxhcmlvLCBmb3JtdWxhcmlvOkZvcm11bGFyaW8sIGZvclBrOkZvclBrfSl7XHJcbiAgICB2YXIge2Nhc2lsbGVybywgZm9yUGt9ID0gcHJvcHM7XHJcbiAgICB2YXIgaGFiaWxpdGFkb3IgPSBjYXNpbGxlcm8uZXhwcmVzaW9uX2hhYmlsaXRhcl9qcz9nZXRGdW5jaW9uSGFiaWxpdGFyKGNhc2lsbGVyby5leHByZXNpb25faGFiaWxpdGFyX2pzKTooKT0+dHJ1ZTtcclxuICAgIHZhciB7b3BjaW9uZXN9ID0gdXNlU2VsZWN0b3JWaXZpZW5kYShmb3JQayk7XHJcbiAgICAvL3ZhciBpZEZvcm11bGFyaW9EZXN0aW5vID0gJ0Y6JytjYXNpbGxlcm8uc2FsdG8hIGFzIElkRm9ybXVsYXJpbzsgICAvL29yaWdpbmFsXHJcbiAgICB2YXIgYXJtb05vbVNhbHRvPWNhc2lsbGVyby5zYWx0bz8uc3Vic3RyaW5nKDAsMik9PSdGOic/Y2FzaWxsZXJvLnNhbHRvLnNsaWNlKDIpOmNhc2lsbGVyby5zYWx0bztcclxuICAgIC8vY29uc29sZS5sb2coJ0JvdG9uRm9ybXVsYXJpb0Rlc3BsaWVndWUgYXJtb05vbVNhbHRvICcgK2FybW9Ob21TYWx0byk7XHJcbiAgICB2YXIgaWRGb3JtdWxhcmlvRGVzdGlubyA9ICdGOicrYXJtb05vbVNhbHRvISBhcyBJZEZvcm11bGFyaW87XHJcbiAgICB2YXIgZXN0cnVjdHVyYSA9IGdldEVzdHJ1Y3R1cmEoKTtcclxuICAgIHZhciB7Zm9ybXVsYXJpb0FBYnJpcn0gPSB1c2VTZWxlY3RvcigoX3N0YXRlOkNhc29TdGF0ZSk9Pih7XHJcbiAgICAgICAgZm9ybXVsYXJpb0FBYnJpcjplc3RydWN0dXJhLmZvcm11bGFyaW9zW2lkRm9ybXVsYXJpb0Rlc3Rpbm9dLmNhc2lsbGVyb3MsXHJcbiAgICB9KSk7XHJcbiAgICB2YXIgc3VmaWpvSWRFbGVtZW50byA9IHRvUGxhaW5Gb3JQayhmb3JQayk7XHJcbiAgICAvKlxyXG4gICAgcmVnaXN0cmFyRWxlbWVudG8oe1xyXG4gICAgICAgIGlkOmBkaXYtYm90b24tZm9ybXVsYXJpby0ke3N1Zmlqb0lkRWxlbWVudG99YCwgXHJcbiAgICAgICAgYXR0cjonZXN0YS1pbmhhYmlsaXRhZGEnLCBcclxuICAgICAgICAvLyBmdW46IChyOlJlc3B1ZXN0YXMpPT5oYWJpbGl0YWRvcihyKT8nU0knOidOTydcclxuICAgICAgICBmdW46IChfcjpSZXNwdWVzdGFzKT0+J05PJ1xyXG4gICAgfSk7XHJcbiAgICByZWdpc3RyYXJFbGVtZW50bzxIVE1MQnV0dG9uRWxlbWVudD4oe1xyXG4gICAgICAgIGlkOmBib3Rvbi1mb3JtdWxhcmlvLSR7c3VmaWpvSWRFbGVtZW50b31gLCBcclxuICAgICAgICBwcm9wOidkaXNhYmxlZCcsIFxyXG4gICAgICAgIC8vIGZ1bjogKHI6UmVzcHVlc3Rhcyk9PiFoYWJpbGl0YWRvcihyKVxyXG4gICAgICAgIGZ1bjogKF9yOlJlc3B1ZXN0YXMpPT5mYWxzZVxyXG4gICAgfSk7XHJcbiAgICAqL1xyXG4gICAgdmFyIGRpc3BhdGNoID0gdXNlRGlzcGF0Y2goKTtcclxuICAgIHZhciBbY29uZmlybWFyRm9yemFySXIsIHNldENvbmZpcm1hckZvcnphcklyXSA9IHVzZVN0YXRlPERlZmluaWNpb25Gb3JtdWxhcmlvQWJyaXJ8ZmFsc2V8bnVsbD4obnVsbCk7XHJcbiAgICB2YXIgbXVsdGlwbGVGb3JtdWxhcmlvcz1mb3JtdWxhcmlvQUFicmlyLnVuaWRhZF9hbmFsaXNpcyAhPSBwcm9wcy5mb3JtdWxhcmlvLnVuaWRhZF9hbmFsaXNpcztcclxuICAgIHZhciBudWV2b0NhbXBvUGsgPSBkZWZPcGVyYXRpdm8uZGVmVUFbZm9ybXVsYXJpb0FBYnJpci51bmlkYWRfYW5hbGlzaXNdLnBrO1xyXG4gICAvLyB2YXIgdmFyX25hbWU9JyRCLicrY2FzaWxsZXJvLnNhbHRvOyAvL29yaWdpbmFsXHJcbiAgICB2YXIgdmFyX25hbWU9JyRCLkY6Jythcm1vTm9tU2FsdG87XHJcbiAgICB2YXIgaWRTZWNjaW9uPWBzZWNjaW9uLWJvdG9uLWZvcm11bGFyaW8tJHt2YXJfbmFtZX1gO1xyXG4gICAgdmFyIGlkQnV0dG9uPWBzcGVjaWFsLWJ1dHRvbi0ke2lkU2VjY2lvbn1gO1xyXG4gICAgcmVnaXN0cmFyRWxlbWVudG88SFRNTERpdkVsZW1lbnQ+KHtcclxuICAgICAgICBpZDppZFNlY2Npb24sIFxyXG4gICAgICAgIGRpcmVjdDp0cnVlLFxyXG4gICAgICAgIGZ1bjogKHJlc3B1ZXN0YXNBdW1lbnRhZGFzOlJlc3B1ZXN0YXMsIGZlZWRiYWNrUm93OiBGb3JtU3RydWN0dXJlU3RhdGU8SWRWYXJpYWJsZSwgVmFsb3IsIElkRmluPiwgZGl2OkhUTUxEaXZFbGVtZW50LFxyXG4gICAgICAgICAgICAgICAgZmVlZGJhY2tBbGw6e1xyXG4gICAgICAgICAgICAgICAgICAgIFtmb3JtdWxhcmlvIGluIFBsYWluRm9yUGtdOkZvcm1TdHJ1Y3R1cmVTdGF0ZTxJZFZhcmlhYmxlLCBWYWxvciwgSWRGaW4+IC8vIHJlc3VsdGFkbyBkZWwgcm93VmFsaWRhdG9yIHBhcmEgZXN0YWRvLmZvclBrXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICk9PntcclxuICAgICAgICAgICAgdHJ5e1xyXG4gICAgICAgICAgICAgICAgdmFyIGxpc3RhRGVCb3RvbmVzQWJyaXI6RGVmaW5pY2lvbkZvcm11bGFyaW9BYnJpcltdID0gW107XHJcbiAgICAgICAgICAgICAgIC8vIHZhciBlc1ZhckFjdHVhbCA9IGZlZWRiYWNrUm93LmFjdHVhbCA9PSAnJEIuRjonK2Nhc2lsbGVyby5zYWx0bzsgIC8vb3JpZ2luYWxcclxuICAgICAgICAgICAgICAgIHZhciBlc1ZhckFjdHVhbCA9IGZlZWRiYWNrUm93LmFjdHVhbCAgPT0gJyRCLkY6Jythcm1vTm9tU2FsdG87XHJcbiAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdCb3RvbkZvcm11bGFyaW9EZXNwbGllZ3VlIGVzVmFyQWN0dWFsICcgK2VzVmFyQWN0dWFsICApO1xyXG4gICAgICAgICAgICAgICAgaWYobXVsdGlwbGVGb3JtdWxhcmlvcyAmJiBjYXNpbGxlcm8uc2FsdG8hPW51bGwpe1xyXG4gICAgICAgICAgICAgICAgICAvLyAgbGV0IGRlZkZvcm11bGFyaW86SW5mb0Zvcm11bGFyaW8gPSBlc3RydWN0dXJhLmZvcm11bGFyaW9zWydGOicrY2FzaWxsZXJvLnNhbHRvIGFzIElkRm9ybXVsYXJpb107ICAgICAgLy9vcmlnaW5hbFxyXG4gICAgICAgICAgICAgICAgICAgIGxldCBkZWZGb3JtdWxhcmlvOkluZm9Gb3JtdWxhcmlvID0gZXN0cnVjdHVyYS5mb3JtdWxhcmlvc1snRjonK2FybW9Ob21TYWx0byBhcyBJZEZvcm11bGFyaW9dO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBkZWZVQSA9IGVzdHJ1Y3R1cmEudW5pZGFkZXNfYW5hbGlzaXNbZGVmRm9ybXVsYXJpby5jYXNpbGxlcm9zLnVuaWRhZF9hbmFsaXNpcyFdO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBjb25qdW50byA9IHJlc3B1ZXN0YXNBdW1lbnRhZGFzW2RlZkZvcm11bGFyaW8uY2FzaWxsZXJvcy51bmlkYWRfYW5hbGlzaXMhXTtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgY2FudGlkYWRFc3BlcmFkYSA9IHJlc3B1ZXN0YXNBdW1lbnRhZGFzW2Nhc2lsbGVyby5leHByZXNpb25faGFiaWxpdGFyIGFzIElkVmFyaWFibGVdO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBudW1BY3R1YWw6bnVtYmVyfG51bGwgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAvLyAgdmFyIGVzdGFkb0RlbEJvdG9uID0gZmVlZGJhY2tSb3cuZmVlZGJhY2tbJyRCLkY6JytjYXNpbGxlcm8uc2FsdG8gYXMgSWRWYXJpYWJsZV0uZXN0YWRvICAgLy9vcmlnaW5hbFxyXG4gICAgICAgICAgICAgICAgICAgICAgdmFyIGVzdGFkb0RlbEJvdG9uID0gZmVlZGJhY2tSb3cuZmVlZGJhY2tbJyRCLkY6Jythcm1vTm9tU2FsdG8gYXMgSWRWYXJpYWJsZV0uZXN0YWRvXHJcbiAgICAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZygnQm90b25Gb3JtdWxhcmlvRGVzcGxpZWd1ZSBlc3RhZG9EZWxCb3RvbiAnICtlc3RhZG9EZWxCb3RvbiAgKTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgY29uZmlnU29ydGVvRm9ybXVsYXJpbyA9IGVzdHJ1Y3R1cmEuY29uZmlnU29ydGVvP2VzdHJ1Y3R1cmEuY29uZmlnU29ydGVvW2dldE1haW5Gb3JtRm9yVml2aWVuZGEoZm9yUGsudml2aWVuZGEpXTpudWxsXHJcbiAgICAgICAgICAgICAgICAgICAgbGlzdGFEZUJvdG9uZXNBYnJpciA9IGxpa2VBcihjb25qdW50bykubWFwKChfLCBpKT0+e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgbnVtOm51bWJlciA9IG51bWJlck9yU3RyaW5nSW5jSWZBcnJheShpLCBjb25qdW50bykgYXMgbnVtYmVyO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgZm9yUGs9ey4uLnByb3BzLmZvclBrLCBmb3JtdWxhcmlvOmlkRm9ybXVsYXJpb0Rlc3Rpbm8sIFtudWV2b0NhbXBvUGtdOm51bX07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmZWVkYmFjayA9IGZlZWRiYWNrQWxsW3RvUGxhaW5Gb3JQayhmb3JQayldO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZihudW1BY3R1YWwgPT0gbnVsbCAmJiBmZWVkYmFjay5yZXN1bWVuID09IFwidmFjaW9cIiAmJiBlc3RhZG9EZWxCb3RvbiA9PSd2YWxpZGEnKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bUFjdHVhbCA9IG51bTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yUGssIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdW1lbjpudWxsLCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bSwgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3R1YWw6IGNhbGN1bGFyQWN0dWFsQkYoY29uZmlnU29ydGVvRm9ybXVsYXJpbywgbnVtLCBudW1BY3R1YWwsIGlkRm9ybXVsYXJpb0Rlc3Rpbm8sIHJlc3B1ZXN0YXNBdW1lbnRhZGFzKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZpbzogbnVtQWN0dWFsID09IG51bGwsIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVybWl0ZUJvcnJhcjogbGlrZUFyKGNvbmp1bnRvKS5hcnJheSgpLmxlbmd0aCA9PSBOdW1iZXIoaSkgKyAxICYmIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZlZWRiYWNrLnJlc3VtZW4gPT0gJ3ZhY2lvJyAmJiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxjdWxhclBlcm1pdGVCb3JyYXJCRihjb25maWdTb3J0ZW9Gb3JtdWxhcmlvLGlkRm9ybXVsYXJpb0Rlc3Rpbm8pLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ6IGNhbGN1bGFyRGlzYWJsZWRCRihjb25maWdTb3J0ZW9Gb3JtdWxhcmlvLCBudW0sIGlkRm9ybXVsYXJpb0Rlc3Rpbm8sIHJlc3B1ZXN0YXNBdW1lbnRhZGFzKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSkuYXJyYXkoKTtcclxuICAgICAgICAgICAgICAgICAgICBpZihcInB1ZWRlIGFncmVnYXIgLy9UT0RPIFZFUiBFU1RPXCIgJiYgKGNvbmp1bnRvIGluc3RhbmNlb2YgQXJyYXkgfHwgY29uanVudG8gPT0gbnVsbCkpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgbnVldm9WYWxvclBrPShjb25qdW50bz09bnVsbCA/IDAgOiBjb25qdW50by5sZW5ndGgpICsgMTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGZvclBrPXsuLi5wcm9wcy5mb3JQaywgZm9ybXVsYXJpbzppZEZvcm11bGFyaW9EZXN0aW5vLCBbbnVldm9DYW1wb1BrXTpudWV2b1ZhbG9yUGt9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgZGViZUFncmVnYXJPbGlzdG8gPSBudW1BY3R1YWwgPT0gbnVsbCAmJiAoY2FudGlkYWRFc3BlcmFkYSA9PSBudWxsIHx8IGNhbnRpZGFkRXNwZXJhZGEgIT0gKGNvbmp1bnRvICE9bnVsbCAmJiBjb25qdW50by5sZW5ndGgpKSBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIChlc3RhZG9EZWxCb3RvbiA9PSd2YWxpZGEnIHx8IGVzVmFyQWN0dWFsKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGlzdGFEZUJvdG9uZXNBYnJpci5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvclBrLCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bTpudWV2b1ZhbG9yUGssIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXNBZ3JlZ2FyOnRydWUsIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0dWFsOmRlYmVBZ3JlZ2FyT2xpc3RvLCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZpbzogZmFsc2UsIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ6IGNhbGN1bGFyRGlzYWJsZWRCRkFncmVnYXJMaXN0byhjb25maWdTb3J0ZW9Gb3JtdWxhcmlvLGlkRm9ybXVsYXJpb0Rlc3Rpbm8pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsaXN0YURlQm90b25lc0FicmlyLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yUGssIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtOm51ZXZvVmFsb3JQayAtIDEsIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXNDb25maXJtYXI6dHJ1ZSwgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3R1YWw6ZGViZUFncmVnYXJPbGlzdG8gJiYgKCFjYXNpbGxlcm8ubG9uZ2l0dWQgfHwgbnVldm9WYWxvclBrID4gTnVtYmVyKGNhc2lsbGVyby5sb25naXR1ZCkpLCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZpbzogZmFsc2UsIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ6IGNhbGN1bGFyRGlzYWJsZWRCRkFncmVnYXJMaXN0byhjb25maWdTb3J0ZW9Gb3JtdWxhcmlvLGlkRm9ybXVsYXJpb0Rlc3Rpbm8pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBmb3JQaz17Li4ucHJvcHMuZm9yUGssIGZvcm11bGFyaW86aWRGb3JtdWxhcmlvRGVzdGlub307XHJcbiAgICAgICAgICAgICAgICAgICAgbGlzdGFEZUJvdG9uZXNBYnJpciA9IFt7Zm9yUGssIG51bTpmYWxzZSwgdW5pY286dHJ1ZSwgYWN0dWFsOmVzVmFyQWN0dWFsLCBwcmV2aW86dHJ1ZX1dXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB2YXIgdG9kb3NMb3NCb3RvbmVzID0gbGlzdGFEZUJvdG9uZXNBYnJpci5tYXAoZGVmQm90b249PlxyXG4gICAgICAgICAgICAgICAgICAgIGJvdG9uRm9ybXVsYXJpb0NvblJlc3VtZW4oZGVmQm90b24sIGZlZWRiYWNrQWxsW3RvUGxhaW5Gb3JQayhkZWZCb3Rvbi5mb3JQayldPz97cmVzdW1lbjondmFjaW8nfSwgcmVzcHVlc3Rhc0F1bWVudGFkYXMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2lsbGVybywgcHJvcHMuZm9yUGssIGlkQnV0dG9uLCBmb3JtdWxhcmlvQUFicmlyXHJcbiAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgdmFyIGh0bWxTZWNjaW9uPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkU2VjY2lvbikhO1xyXG4gICAgICAgICAgICAgICAgaHRtbFNlY2Npb24uaW5uZXJIVE1MPVwiXCI7XHJcbiAgICAgICAgICAgICAgICBodG1sU2VjY2lvbi5hcHBlbmRDaGlsZChodG1sLmRpdih0b2Rvc0xvc0JvdG9uZXMpLmNyZWF0ZSgpKTtcclxuICAgICAgICAgICAgfWNhdGNoKGVycil7XHJcbiAgICAgICAgICAgICAgICB2YXIgZXJyb3IgPSB1bmV4cGVjdGVkKGVycik7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcImVudHJhIGFsIGNhdGNoXCIpXHJcbiAgICAgICAgICAgICAgICBkaXYudGV4dENvbnRlbnQ9J2VzdG8sIEZBTEzDiSAnK2Vycm9yLm1lc3NhZ2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9KTtcclxuICAgIGNvbnN0IGlyID0gKGRlZkJvdG9uOkRlZmluaWNpb25Gb3JtdWxhcmlvQWJyaXIpPT57XHJcbiAgICAgICAgaWYoIWNhc2lsbGVyby5zYWx0byl7XHJcbiAgICAgICAgICAgIG9wY2lvbmVzLm1vZG9EaXJlY3RvP1xyXG4gICAgICAgICAgICAgICAgbnVsbFxyXG4gICAgICAgICAgICA6XHJcbiAgICAgICAgICAgICAgICBkaXNwYXRjaChkaXNwYXRjaGVycy5WT0xWRVJfSERSKHt9KSk7XHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgIHZhciBudWV2YUZvclBrPXsuLi5mb3JQaywgZm9ybXVsYXJpbzppZEZvcm11bGFyaW9EZXN0aW5vfTtcclxuICAgICAgICAgICAgaWYobXVsdGlwbGVGb3JtdWxhcmlvcyl7XHJcbiAgICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlIGZvclBrIHkgc3VzIGNvbXBvbmVudGVzXHJcbiAgICAgICAgICAgICAgICBudWV2YUZvclBrW251ZXZvQ2FtcG9Qa10gPSBkZWZCb3Rvbi5udW1cclxuICAgICAgICAgICAgICAgIGlmKGRlZkJvdG9uLmVzQWdyZWdhcil7XHJcbiAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2hCeVBhc3MoYWNjaW9uX2FncmVnYXJfZm9ybXVsYXJpbyx7Zm9yUGs6bnVldmFGb3JQa30pO1xyXG4gICAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2hCeVBhc3MoYWNjaW9uX2FicmlyX2Zvcm11bGFyaW8se2ZvclBrOm51ZXZhRm9yUGt9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBkaXNwYXRjaChkaXNwYXRjaGVycy5DQU1CSUFSX0ZPUk1VTEFSSU8oe2ZvclBrOm51ZXZhRm9yUGssIGFwaWxhclZ1ZWx0YTp0cnVlfSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZihjb25maXJtYXJGb3J6YXJJcil7c2V0Q29uZmlybWFyRm9yemFySXIoZmFsc2UpfVxyXG4gICAgfTtcclxuICAgIHJldHVybiA8RGVzcGxlZ2FyQ2FzaWxsZXJvIGNhc2lsbGVybz17Y2FzaWxsZXJvfT5cclxuICAgICAgICA8ZGl2IGlkPXtpZFNlY2Npb259PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxCdXR0b24gY2xhc3NOYW1lPVwic3BlY2lhbC1idXR0b25cIiBpZD17aWRCdXR0b259XHJcbiAgICAgICAgICAgIG9uQ2xpY2s9eyhldmVudCk9PntcclxuICAgICAgICAgICAgICAgIGlyKEpTT04ucGFyc2UoKGV2ZW50LnRhcmdldCEgYXMgdW5rbm93biBhcyBIVE1MQnV0dG9uRWxlbWVudCkuZ2V0QXR0cmlidXRlKCdkZWYtYnV0dG9uJykhKSlcclxuICAgICAgICAgICAgfX1cclxuICAgICAgICA+aXIgKGludGVybm8pPC9CdXR0b24+XHJcbiAgICAgICAgPERpYWxvZyBcclxuICAgICAgICAgICAgY2xhc3NOYW1lPVwibnVlc3Ryby1kaWFsb2dvXCJcclxuICAgICAgICAgICAgb3Blbj17ISFjb25maXJtYXJGb3J6YXJJcn1cclxuICAgICAgICAgICAgb25DbG9zZT17KCk9PnNldENvbmZpcm1hckZvcnphcklyKG51bGwpfVxyXG4gICAgICAgID5cclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJudWVzdHJvLWRpYWxvZ29cIj5cclxuICAgICAgICAgICAgICAgIDxUeXBvZ3JhcGh5Pk5vIHNlIHB1ZWRlIGF2YW56YXIgYWwgc2lndWllbnRlIGZvcm11bGFyaW8uPC9UeXBvZ3JhcGh5PlxyXG4gICAgICAgICAgICAgICAgPFR5cG9ncmFwaHk+UXVpesOhcyBubyB0ZXJtaW7DsyBkZSBjb250ZXN0YXIgbGFzIHByZWd1bnRhcyBjb3JyZXNwb25kaWVudGVzPC9UeXBvZ3JhcGh5PlxyXG4gICAgICAgICAgICAgICAgPFR5cG9ncmFwaHk+UXVpesOhcyBubyBjb3JyZXNwb25kZSBlbiBiYXNlIGEgbGFzIHJlc3B1ZXN0YXMgb2J0ZW5pZGFzPC9UeXBvZ3JhcGh5PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPEJ1dHRvbiBjb2xvcj1cInNlY29uZGFyeVwiIG9uQ2xpY2s9eygpPT5jb25maXJtYXJGb3J6YXJJciAmJiBpcihjb25maXJtYXJGb3J6YXJJcil9PmZvcnphcjwvQnV0dG9uPlxyXG4gICAgICAgICAgICA8QnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIHZhcmlhbnQ9XCJjb250YWluZWRcIiBvbkNsaWNrPXsoKT0+c2V0Q29uZmlybWFyRm9yemFySXIobnVsbCl9PkVudGVuZGlkbzwvQnV0dG9uPlxyXG4gICAgICAgIDwvRGlhbG9nPlxyXG4gICAgPC9EZXNwbGVnYXJDYXNpbGxlcm8+XHJcbn1cclxuXHJcbmZ1bmN0aW9uIENhc2lsbGVyb0Rlc2Nvbm9jaWRvKHByb3BzOntjYXNpbGxlcm86Q2FzaWxsZXJvQmFzZSwgZm9yUGs6Rm9yUGt9KXtcclxuICAgIHJldHVybiA8RGVzcGxlZ2FyQ2FzaWxsZXJvIFxyXG4gICAgICAgIGlkPXtgY2FzaWxsZXJvZGVzY29ub2NpZG8tJHtwcm9wcy5jYXNpbGxlcm8uaWRfY2FzaWxsZXJvfWB9XHJcbiAgICAgICAgY2FzaWxsZXJvPXtwcm9wcy5jYXNpbGxlcm8gYXMgQmxvcXVlfVxyXG4gICAgICAgIHN0eWxlPXt7ZGlzcGxheTonbm9uZSd9fVxyXG4gICAgPlxyXG4gICAgICAgIDxUeXBvZ3JhcGh5PlRpcG8gZGUgY2FzaWxsZXJvIG5vIGltcGxlbWVudGFkbzogXCJ7cHJvcHMuY2FzaWxsZXJvLnRpcG9jfVwiIHBhcmEgXCJ7cHJvcHMuY2FzaWxsZXJvLmNhc2lsbGVyb31cIjwvVHlwb2dyYXBoeT5cclxuICAgICAgICA8RW5jYWJlemFkb0Rlc3BsaWVndWUgY2FzaWxsZXJvPXtwcm9wcy5jYXNpbGxlcm8gYXMgQ2FzaWxsZXJvRW5jYWJlemFibGV9IGxlZXI9e2ZhbHNlfSBmb3JQaz17cHJvcHMuZm9yUGt9Lz5cclxuICAgIDwvRGVzcGxlZ2FyQ2FzaWxsZXJvPlxyXG59XHJcblxyXG5mdW5jdGlvbiB1c2VTZWxlY3RvclZpdmllbmRhKGZvclBrOkZvclBrKXtcclxuICAgIHJldHVybiB1c2VTZWxlY3Rvcigoc3RhdGU6Q2Fzb1N0YXRlKT0+e1xyXG4gICAgICAgIHZhciBlc3RydWN0dXJhID0gZ2V0RXN0cnVjdHVyYSgpO1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIGZvcm11bGFyaW86IGVzdHJ1Y3R1cmEuZm9ybXVsYXJpb3NbZm9yUGsuZm9ybXVsYXJpb10uY2FzaWxsZXJvcyxcclxuICAgICAgICAgICAgbW9kb0Rlc3BsaWVndWU6IHRydWUgfHwgc3RhdGUubW9kby5kZW1vP3N0YXRlLm9wY2lvbmVzLm1vZG9EZXNwbGllZ3VlOidyZWxldmFtaWVudG8nLFxyXG4gICAgICAgICAgICBtb2RvOiBzdGF0ZS5tb2RvLFxyXG4gICAgICAgICAgICBvcGNpb25lczogc3RhdGUub3BjaW9uZXMsXHJcbiAgICAgICAgfVxyXG4gICAgfSlcclxufVxyXG5cclxuZnVuY3Rpb24gQ29uanVudG9QcmVndW50YXNEZXNwbGllZ3VlKHByb3BzOntjYXNpbGxlcm86Q29uanVudG9QcmVndW50YXMsIGZvcm11bGFyaW86Rm9ybXVsYXJpbywgZm9yUGs6Rm9yUGt9KXtcclxuICAgIGxldCB7Y2FzaWxsZXJvLCBmb3JQa30gPSBwcm9wcztcclxuICAgIHZhciBpZCA9IGBjb25qdW50by1wcmVndW50YXMtJHtjYXNpbGxlcm8uaWRfY2FzaWxsZXJvfWA7XHJcbiAgICByZWdpc3RyYXJFbGVtZW50byh7XHJcbiAgICAgICAgaWQsIFxyXG4gICAgICAgIGRpcmVjdDp0cnVlLCBcclxuICAgICAgICBmdW46IHJlZ2lzdHJhZG9yRGVWYXJpYWJsZShjYXNpbGxlcm8pXHJcbiAgICB9KVxyXG4gICAgbGV0IG1vZG9EZXNwbGllZ3VlID0gXCJub3JtYWxcIjtcclxuICAgIGxldCBoYWJpbGl0YWRvID0gdHJ1ZTtcclxuICAgIHJldHVybiBoYWJpbGl0YWRvIHx8IG1vZG9EZXNwbGllZ3VlPT0nbWV0YWRhdG9zJz88RGVzcGxlZ2FyQ2FzaWxsZXJvIGlkPXtpZH0gY2FzaWxsZXJvPXtjYXNpbGxlcm99PlxyXG4gICAgICAgIDxFbmNhYmV6YWRvRGVzcGxpZWd1ZSBjYXNpbGxlcm89e2Nhc2lsbGVyb30gZm9yUGs9e2ZvclBrfSBsZWVyPXtjYXNpbGxlcm8ubGVlciE9PWZhbHNlfS8+XHJcbiAgICAgICAgPERlc3BsZWdhckNvbnRlbmlkb0ludGVybm9CbG9xdWVPRm9ybXVsYXJpbyBibG9xdWVPRm9ybXVsYXJpbz17Y2FzaWxsZXJvfSBmb3JtdWxhcmlvPXtwcm9wcy5mb3JtdWxhcmlvfSBmb3JQaz17Zm9yUGt9IG11bHRpcGxlPXtmYWxzZX0vPlxyXG4gICAgPC9EZXNwbGVnYXJDYXNpbGxlcm8+Om51bGw7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIERlc3BsZWdhckNvbnRlbmlkb0ludGVybm9CbG9xdWVPRm9ybXVsYXJpbyhwcm9wczp7YmxvcXVlT0Zvcm11bGFyaW86QmxvcXVlfEZvcm11bGFyaW98Q29uanVudG9QcmVndW50YXMsIGZvcm11bGFyaW86Rm9ybXVsYXJpbywgZm9yUGs6Rm9yUGssIG11bHRpcGxlOmJvb2xlYW59KXtcclxuICAgIHZhciBwYXJjaWFsaXphYmxlID0gcHJvcHMuYmxvcXVlT0Zvcm11bGFyaW8udGlwb2M9PSdGJztcclxuICAgIGNvbnN0IFt2ZXJUb2RvLCBzZXRWZXJUb2RvXSA9IHVzZVN0YXRlKCFwYXJjaWFsaXphYmxlKTtcclxuICAgIGNvbnN0IFtmb3JQa0FjdHVhbCwgc2V0Rm9yUGtBY3R1YWxdID0gdXNlU3RhdGU8SWRDYXNpbGxlcm98bnVsbD4obnVsbCk7XHJcbiAgICBpZihwYXJjaWFsaXphYmxlKXtcclxuICAgICAgICBpZihmb3JQa0FjdHVhbCAhPSBwcm9wcy5ibG9xdWVPRm9ybXVsYXJpby5jYXNpbGxlcm8pe1xyXG4gICAgICAgICAgICBzZXRWZXJUb2RvKGZhbHNlKVxyXG4gICAgICAgICAgICBzZXRGb3JQa0FjdHVhbChwcm9wcy5ibG9xdWVPRm9ybXVsYXJpby5jYXNpbGxlcm8pXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHVzZUVmZmVjdCgoKT0+e1xyXG4gICAgICAgICAgICB2YXIgdGltZXIgPSBzZXRUaW1lb3V0KCgpPT57XHJcbiAgICAgICAgICAgICAgICBzZXRWZXJUb2RvKHRydWUpO1xyXG4gICAgICAgICAgICB9LDI1MClcclxuICAgICAgICAgICAgcmV0dXJuICgpPT57XHJcbiAgICAgICAgICAgICAgICBpZih0aW1lcil7XHJcbiAgICAgICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcbiAgICBjb25zdCBsaW1pdGVOb1ZlclRvZG8gPSAzO1xyXG4gICAgdXNlRWZmZWN0KCgpPT57XHJcbiAgICAgICAgaWYocHJvcHMuYmxvcXVlT0Zvcm11bGFyaW8udGlwb2M9PSdGJyl7XHJcbiAgICAgICAgICAgIHZvbGNhZG9JbmljaWFsRWxlbWVudG9zUmVnaXN0cmFkb3MocHJvcHMuZm9yUGspO1xyXG4gICAgICAgIH1cclxuICAgIH0sW3RvUGxhaW5Gb3JQayhwcm9wcy5mb3JQayksdmVyVG9kb10pXHJcbiAgICB1c2VMYXlvdXRFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIGlmKHByb3BzLmJsb3F1ZU9Gb3JtdWxhcmlvLnRpcG9jPT0nRicgJiYgdmVyVG9kbyl7XHJcbiAgICAgICAgICAgIHZhciB7c2lndWllbnRlVmFyaWFibGUsIHZhcmlhYmxlQWN0dWFsfSA9IGRpc3BhdGNoQnlQYXNzKGFjY2lvbl9yZWdpc3RyYXJfcmVzcHVlc3RhLCB7cmVzcHVlc3RhOm51bGwsIHZhcmlhYmxlOk5PX0NBTUJJQVJfX1NPTE9fVFJBRVJfU1RBVFVTLCBmb3JQazpwcm9wcy5mb3JQa30pO1xyXG4gICAgICAgICAgICBpZih2YXJpYWJsZUFjdHVhbCB8fCBzaWd1aWVudGVWYXJpYWJsZSl7XHJcbiAgICAgICAgICAgICAgICBlbmZvY2FyRWxlbWVudG9EZVZhcmlhYmxlKGNvYWxlc2NlKHZhcmlhYmxlQWN0dWFsIGFzIHN0cmluZ3xudWxsLHNpZ3VpZW50ZVZhcmlhYmxlIGFzIHN0cmluZ3xudWxsKSBhcyBJZFZhcmlhYmxlKVxyXG4gICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgIHZhciBmZWVkYmFja1Jvd1ZhbGlkYXRvciA9IGdldEZlZWRiYWNrUm93VmFsaWRhdG9yKClcclxuICAgICAgICAgICAgICAgIGlmKGZlZWRiYWNrUm93VmFsaWRhdG9yW3RvUGxhaW5Gb3JQayhwcm9wcy5mb3JQayldLnJlc3VtZW49PSdvaycpe1xyXG4gICAgICAgICAgICAgICAgICAgIHNjcm9sbFRvVG9wKClcclxuICAgICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgICAgIHNjcm9sbFRvVG9wKClcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPVwiY29udGVuaWRvXCI+XHJcbiAgICAgICAge3ZlclRvZG8/bnVsbDo8ZGl2IHN0eWxlPXt7aGVpZ2h0OlwiNTAwcHhcIiwgdGV4dEFsaWduOidjZW50ZXInLCB2ZXJ0aWNhbEFsaWduOidtaWRkbGUnLCB3aWR0aDonMTAwJScsIHBvc2l0aW9uOlwiZml4ZWRcIiwgYmFja2dyb3VuZENvbG9yOiAncmdiYSgxMDAsMTAwLDEwMCwwLjMpJywgZm9udFNpemU6JzIwMCUnfX0gPmNhcmdhbmRvLi4uPC9kaXY+fVxyXG4gICAgICAgIHtwcm9wcy5ibG9xdWVPRm9ybXVsYXJpby5jYXNpbGxlcm9zLm1hcCgoY2FzaWxsZXJvLCBpKT0+e1xyXG4gICAgICAgICAgICB2YXIga2V5ID0gY2FzaWxsZXJvLnRpcG9jKyctJytjYXNpbGxlcm8uaWRfY2FzaWxsZXJvKyctJytpO1xyXG4gICAgICAgICAgICByZXR1cm4gKHZlclRvZG8gfHwgaSA8IGxpbWl0ZU5vVmVyVG9kbz9cclxuICAgICAgICAgICAgICAgIChcclxuICAgICAgICAgICAgICAgICAgICBjYXNpbGxlcm8udGlwb2MgPT0gXCJQXCI/PFByZWd1bnRhRGVzcGxpZWd1ZSBrZXk9e2tleX0gcHJlZ3VudGE9e2Nhc2lsbGVyb30gZm9yUGs9e3Byb3BzLmZvclBrfSBkZXNwbGllZ3VlRW5jYWJlemFkbz17Y2FzaWxsZXJvLmRlc3BsaWVndWVFbmNhYmV6YWRvPz8ocHJvcHMuYmxvcXVlT0Zvcm11bGFyaW8udGlwb2M9PSdDUCc/J2xhdGVyYWwnOidzdXBlcmlvcicpfS8+OlxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2lsbGVyby50aXBvYyA9PSBcIkJcIj88QmxvcXVlRGVzcGxpZWd1ZSBrZXk9e2tleX0gYmxvcXVlPXtjYXNpbGxlcm99IGZvcm11bGFyaW89e3Byb3BzLmZvcm11bGFyaW99IGZvclBrPXtwcm9wcy5mb3JQa30vPjpcclxuICAgICAgICAgICAgICAgICAgICBjYXNpbGxlcm8udGlwb2MgPT0gXCJGSUxUUk9cIj88RmlsdHJvRGVzcGxpZWd1ZSBrZXk9e2tleX0gZmlsdHJvPXtjYXNpbGxlcm99IGZvclBrPXtwcm9wcy5mb3JQa30vPjpcclxuICAgICAgICAgICAgICAgICAgICBjYXNpbGxlcm8udGlwb2MgPT0gXCJCRlwiPzxCb3RvbkZvcm11bGFyaW9EZXNwbGllZ3VlIGtleT17a2V5fSBjYXNpbGxlcm89e2Nhc2lsbGVyb30gZm9ybXVsYXJpbz17cHJvcHMuZm9ybXVsYXJpb30gZm9yUGs9e3Byb3BzLmZvclBrfS8+OlxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2lsbGVyby50aXBvYyA9PSBcIkNPTlNcIj88Q29uc2lzdGVuY2lhRGVzcGxpZWd1ZSBrZXk9e2tleX0gY2FzaWxsZXJvPXtjYXNpbGxlcm99IGZvclBrPXtwcm9wcy5mb3JQa30vPjpcclxuICAgICAgICAgICAgICAgICAgICBjYXNpbGxlcm8udGlwb2MgPT0gXCJDUFwiPzxDb25qdW50b1ByZWd1bnRhc0Rlc3BsaWVndWUga2V5PXtrZXl9IGNhc2lsbGVybz17Y2FzaWxsZXJvfSBmb3JtdWxhcmlvPXtwcm9wcy5mb3JtdWxhcmlvfSBmb3JQaz17cHJvcHMuZm9yUGt9Lz46XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzaWxsZXJvLnRpcG9jID09IFwiVEVYVE9cIj88VGV4dG9EZXNwbGllZ3VlIGtleT17a2V5fSBjYXNpbGxlcm89e2Nhc2lsbGVyb30gZm9yUGs9e3Byb3BzLmZvclBrfS8+OlxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2lsbGVyby50aXBvYyA9PSBcIkxJQlJFXCI/PExpYnJlRGVzcGxpZWd1ZSBrZXk9e2tleX0gY2FzaWxsZXJvPXtjYXNpbGxlcm99IGZvcm11bGFyaW89e3Byb3BzLmZvcm11bGFyaW99IGZvclBrPXtwcm9wcy5mb3JQa30vPjpcclxuICAgICAgICAgICAgICAgICAgICA8Q2FzaWxsZXJvRGVzY29ub2NpZG8ga2V5PXtrZXl9IGNhc2lsbGVybz17Y2FzaWxsZXJvfSBmb3JQaz17cHJvcHMuZm9yUGt9Lz5cclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgOmk9PWxpbWl0ZU5vVmVyVG9kbz9cclxuICAgICAgICAgICAgICAgIDxkaXYga2V5PSckc3Bpbm5lcicgY2xhc3NOYW1lPVwic3Bpbm5lci1ib3JkZXJcIiByb2xlPVwic3RhdHVzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4+Y2FyZ2FuZG8gYmxvcXVlLi4uPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDpudWxsXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICB9KVxyXG4gICAgfTwvZGl2PlxyXG59XHJcblxyXG5mdW5jdGlvbiBCbG9xdWVEZXNwbGllZ3VlKHByb3BzOntibG9xdWU6QmxvcXVlLCBmb3JtdWxhcmlvOkZvcm11bGFyaW8sIGZvclBrOkZvclBrfSl7XHJcbiAgICB2YXIge2Jsb3F1ZSwgZm9yUGt9ID0gcHJvcHM7XHJcbiAgICB2YXIga2V5PWJsb3F1ZS52ZXJfaWQhPSctJyAmJiBibG9xdWUudmVyX2lkIHx8IGJsb3F1ZS5jYXNpbGxlcm87XHJcbiAgICB2YXIgYWN0aXZlU3RlcD0wO1xyXG4gICAgdmFyIG11bHRpcGxlID0gISFibG9xdWUudW5pZGFkX2FuYWxpc2lzO1xyXG4gICAgdmFyIGxpc3RhID0gW3tmb3JQaywga2V5OjAsIG11bHRpcGxlOmZhbHNlfV07XHJcbiAgICB2YXIgaGFiaWxpdGFkb3IgPSBibG9xdWUuZXhwcmVzaW9uX2hhYmlsaXRhcl9qcz9nZXRGdW5jaW9uSGFiaWxpdGFyKGJsb3F1ZS5leHByZXNpb25faGFiaWxpdGFyX2pzKTooKT0+dHJ1ZTtcclxuICAgIHZhciB7bW9kb0Rlc3BsaWVndWV9ID0gdXNlU2VsZWN0b3JWaXZpZW5kYShmb3JQayk7XHJcbiAgICBpZihtdWx0aXBsZSl7XHJcbiAgICAgICAgLy8gVE9ETzogR0VORVJBTElaQVJcclxuICAgICAgICAvLyBAdHMtaWdub3JlIFxyXG4gICAgICAgIC8vIGxpc3RhPXJlc3B1ZXN0YXMucGVyc29uYXMubWFwKChfcGVyc29uYSwgaSk9PihcclxuICAgICAgICAvLyAgICAge2ZvclBrOnsuLi5mb3JQaywgcGVyc29uYTppKzF9LCBrZXk6aSsxLCBtdWx0aXBsZTp0cnVlfVxyXG4gICAgICAgIC8vICkpXHJcbiAgICB9XHJcbiAgICB2YXIgaWQgPSBgYmxvcXVlLSR7YmxvcXVlLmlkX2Nhc2lsbGVyb31gO1xyXG4gICAgcmVnaXN0cmFyRWxlbWVudG8oe1xyXG4gICAgICAgIGlkLFxyXG4gICAgICAgIHN0eWxlOidkaXNwbGF5JyxcclxuICAgICAgICBmdW46IChyZXNwdWVzdGFzOlJlc3B1ZXN0YXMpPT4gaGFiaWxpdGFkb3IocmVzcHVlc3RhcykgfHwgbW9kb0Rlc3BsaWVndWU9PSdtZXRhZGF0b3MnPyd1bnNldCc6J25vbmUnXHJcbiAgICB9KVxyXG4gICAgcmV0dXJuIDxEZXNwbGVnYXJDYXNpbGxlcm8gY2FzaWxsZXJvPXtibG9xdWV9IG51ZXN0cm8tYmxvcXVlPXtibG9xdWUuaWRfY2FzaWxsZXJvfSBlcy1tdWx0aXBsZT17bXVsdGlwbGU/J1NJJzonTk8nfSBpZD17aWR9PlxyXG4gICAgICAgIDxFbmNhYmV6YWRvRGVzcGxpZWd1ZSBjYXNpbGxlcm89e2Jsb3F1ZX0gZm9yUGs9e2ZvclBrfS8+XHJcbiAgICAgICAge2xpc3RhLm1hcCgoe2tleSwgZm9yUGssIG11bHRpcGxlfSk9PlxyXG4gICAgICAgICAgICA8RGVzcGxlZ2FyQ29udGVuaWRvSW50ZXJub0Jsb3F1ZU9Gb3JtdWxhcmlvIGtleT17a2V5fSBibG9xdWVPRm9ybXVsYXJpbz17YmxvcXVlfSBmb3JtdWxhcmlvPXtwcm9wcy5mb3JtdWxhcmlvfSBmb3JQaz17Zm9yUGt9IG11bHRpcGxlPXttdWx0aXBsZX0vPlxyXG4gICAgICAgICl9XHJcbiAgICA8L0Rlc3BsZWdhckNhc2lsbGVybz47XHJcbn1cclxuXHJcbmNvbnN0IEZvcm11bGFyaW9FbmNhYmV6YWRvID0gRGVzcGxpZWd1ZUVuY2FiZXphZG87XHJcblxyXG5mdW5jdGlvbiBNZW51TGV0cmEocHJvcHM6e3RhbWFubmlvOm51bWJlciwgZGVub21pbmFjaW9uOnN0cmluZ30pe1xyXG4gICAgY29uc3QgY2FtYmlhckxldHJhID0gKHRhbWFubmlvOm51bWJlcik9PntcclxuICAgICAgICB2YXIgcm9vdCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcclxuICAgICAgICByb290LnN0eWxlLmZvbnRTaXplPXRhbWFubmlvK1wicHhcIjtcclxuICAgIH1cclxuICAgIHJldHVybiA8TWVudUl0ZW1cclxuICAgICAgICBvbkNsaWNrPXsoKT0+Y2FtYmlhckxldHJhKHByb3BzLnRhbWFubmlvKX0gc3R5bGU9e3tmb250U2l6ZTpwcm9wcy50YW1hbm5pbysncHgnfX1cclxuICAgID5sZXRyYSB7cHJvcHMuZGVub21pbmFjaW9ufTwvTWVudUl0ZW0+XHJcbn1cclxuXHJcbmZ1bmN0aW9uIEZhc3RTZXR0dXAoKXtcclxuICAgIGNvbnN0IFthbmNob3JFbCwgc2V0QW5jaG9yRWxdID0gUmVhY3QudXNlU3RhdGUobnVsbCk7XHJcbiAgICBjb25zdCBbb3Blbiwgc2V0T3Blbl0gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XHJcbiAgICBjb25zdCBoYW5kbGVDbGljayA9IChldmVudDphbnkpID0+IHtcclxuICAgICAgICBzZXRBbmNob3JFbChldmVudC5jdXJyZW50VGFyZ2V0KTtcclxuICAgICAgICBzZXRPcGVuKChwcmV2KSA9PiAhcHJldik7XHJcbiAgICB9O1xyXG4gICAgY29uc3QgZGlzcGF0Y2ggPSB1c2VEaXNwYXRjaCgpO1xyXG4gICAgY29uc3QgY2FtYmlhciA9IChtb2RvRGVzcGxpZWd1ZTpNb2RvRGVzcGxpZWd1ZSk9PntcclxuICAgICAgICBkaXNwYXRjaChkaXNwYXRjaGVycy5NT0RPX0RFU1BMSUVHVUUoe21vZG9EZXNwbGllZ3VlfSkpO1xyXG4gICAgICAgIHNldE9wZW4oZmFsc2UpXHJcbiAgICB9XHJcbiAgICBjb25zdCBvcGNpb25lcyA9IHVzZVNlbGVjdG9yKChzdGF0ZTpDYXNvU3RhdGUpPT5zdGF0ZS5vcGNpb25lcylcclxuICAgIHJldHVybiA8PlxyXG4gICAgICAgIDxCdXR0b24gb25DbGljaz17aGFuZGxlQ2xpY2t9PlxyXG4gICAgICAgICAgICA8SUNPTi5TZXR0aW5ncy8+XHJcbiAgICAgICAgPC9CdXR0b24+XHJcbiAgICAgICAgPE1lbnUgb3Blbj17b3Blbn0gYW5jaG9yRWw9e2FuY2hvckVsfSBvbkNsb3NlPXsoKT0+c2V0T3BlbihmYWxzZSl9PlxyXG4gICAgICAgICAgICA8TWVudUl0ZW0gb25DbGljaz17KCk9PmNhbWJpYXIoXCJyZWxldmFtaWVudG9cIil9Pm5vcm1hbDwvTWVudUl0ZW0+XHJcbiAgICAgICAgICAgIDxNZW51SXRlbSBvbkNsaWNrPXsoKT0+Y2FtYmlhcihcIlBERlwiICAgICAgICAgKX0+UERGIHBhcmEgcmVsZXZhbWllbnRvPC9NZW51SXRlbT5cclxuICAgICAgICAgICAgPE1lbnVJdGVtIG9uQ2xpY2s9eygpPT5jYW1iaWFyKFwibWV0YWRhdG9zXCIgICApfT5yZXZpc2FyIG1ldGFkYXRvczwvTWVudUl0ZW0+XHJcbiAgICAgICAgICAgIDxEaXZpZGVyLz5cclxuICAgICAgICAgICAgPE1lbnVMZXRyYSB0YW1hbm5pbz17MTJ9IGRlbm9taW5hY2lvbiA9IFwibXV5IGNoaWNhXCIvPlxyXG4gICAgICAgICAgICA8TWVudUxldHJhIHRhbWFubmlvPXsxNH0gZGVub21pbmFjaW9uID0gXCJjaGljYVwiLz5cclxuICAgICAgICAgICAgPE1lbnVMZXRyYSB0YW1hbm5pbz17MTZ9IGRlbm9taW5hY2lvbiA9IFwibm9ybWFsXCIvPlxyXG4gICAgICAgICAgICA8TWVudUxldHJhIHRhbWFubmlvPXsxOX0gZGVub21pbmFjaW9uID0gXCJncmFuZGVcIi8+XHJcbiAgICAgICAgICAgIDxNZW51TGV0cmEgdGFtYW5uaW89ezIyfSBkZW5vbWluYWNpb24gPSBcImVub3JtZVwiLz5cclxuICAgICAgICAgICAgPERpdmlkZXIvPlxyXG4gICAgICAgICAgICA8TWVudUl0ZW0+PGxhYmVsPjxDaGVja2JveCBjaGVja2VkPXtvcGNpb25lcy5jb25DYW1wb09wY2lvbmVzfSBvbkNoYW5nZT17XHJcbiAgICAgICAgICAgICAgICAoKT0+ZGlzcGF0Y2goZGlzcGF0Y2hlcnMuU0VUX09QQ0lPTih7b3BjaW9uOidjb25DYW1wb09wY2lvbmVzJywgdmFsb3I6IW9wY2lvbmVzLmNvbkNhbXBvT3BjaW9uZXN9KSlcclxuICAgICAgICAgICAgfSBpbnB1dFByb3BzPXt7ICdhcmlhLWxhYmVsJzogJ3ByaW1hcnkgY2hlY2tib3gnIH19Lz5jYW1wbyBvcGNpb25lczwvbGFiZWw+PC9NZW51SXRlbT5cclxuICAgICAgICAgICAgPE1lbnVJdGVtPjxsYWJlbD48Q2hlY2tib3ggY2hlY2tlZD17b3BjaW9uZXMuc2FsdG9BdXRvbWF0aWNvfSBvbkNoYW5nZT17XHJcbiAgICAgICAgICAgICAgICAoKT0+ZGlzcGF0Y2goZGlzcGF0Y2hlcnMuU0VUX09QQ0lPTih7b3BjaW9uOidzYWx0b0F1dG9tYXRpY28nLCB2YWxvcjohb3BjaW9uZXMuc2FsdG9BdXRvbWF0aWNvfSkpXHJcbiAgICAgICAgICAgIH0gaW5wdXRQcm9wcz17eyAnYXJpYS1sYWJlbCc6ICdwcmltYXJ5IGNoZWNrYm94JyB9fS8+c2FsdG8gYXV0b23DoXRpY288L2xhYmVsPjwvTWVudUl0ZW0+XHJcbiAgICAgICAgPC9NZW51PlxyXG4gICAgPC8+O1xyXG59XHJcblxyXG5mdW5jdGlvbiBCYXJyYURlTmF2ZWdhY2lvbihwcm9wczp7Zm9yUGs6Rm9yUGssIHNvbG9MZWN0dXJhOmJvb2xlYW4sIG1vZG9EaXJlY3RvOmJvb2xlYW59KXtcclxuICAgIGNvbnN0IGRpc3BhdGNoID0gdXNlRGlzcGF0Y2goKTtcclxuICAgIGNvbnN0IGZvclBrID0gcHJvcHMuZm9yUGs7XHJcbiAgICBjb25zdCB7b3BjaW9uZXN9ID0gdXNlU2VsZWN0b3JWaXZpZW5kYShmb3JQayk7XHJcbiAgICBjb25zdCBbY29uZmlybWFDZXJyYXIsIHNldENvbmZpcm1hQ2VycmFyXSA9IHVzZVN0YXRlPGJvb2xlYW58bnVsbD4oZmFsc2UpO1xyXG4gICAgdmFyIGRvbWluaW8gPSBnZXREYXRvc0J5UGFzcygpLmluZm9ybWFjaW9uSGRyW2ZvclBrLnZpdmllbmRhXS50ZW0uZG9taW5pbztcclxuICAgIHZhciBjZXJyYXJEaXJlY3RvID0gYXN5bmMgZnVuY3Rpb24oKXtcclxuICAgICAgICByZW1vdmVDU1NCeUlkKEJPT1RTVFJBUF81XzFfM19TUkMpO1xyXG4gICAgICAgIHZhciBlc3RydWN0dXJhID0gZ2V0RXN0cnVjdHVyYSgpO1xyXG4gICAgICAgIGdvdG9Db25zaXN0aXIoXHJcbiAgICAgICAgICAgIGVzdHJ1Y3R1cmEub3BlcmF0aXZvIGFzIElkT3BlcmF0aXZvLFxyXG4gICAgICAgICAgICBnZXREYXRvc0J5UGFzcygpLmluZm9ybWFjaW9uSGRyW2ZvclBrLnZpdmllbmRhXS50YXJlYS50YXJlYSxcclxuICAgICAgICAgICAgZm9yUGsudml2aWVuZGFcclxuICAgICAgICApO1xyXG4gICAgICAgIC8vdmFyIGhhc2g9bmV3IFVSTFNlYXJjaFBhcmFtcyhsb2NhdGlvbi5oYXNoPy5yZXBsYWNlKC9eXFwjLywnJykuc3BsaXQoJyZhdXRvcHJvY2VkJylbMF0pO1xyXG4gICAgICAgIC8vLy9oYXNoLmRlbGV0ZSgnYXV0b3Byb2NlZCcpXHJcbiAgICAgICAgLy9jbG9zZSgpO1xyXG4gICAgICAgIC8vbG9jYXRpb24uaGFzaD1oYXNoLnRvU3RyaW5nKCk7XHJcbiAgICB9XHJcbiAgICB2YXIgYm90b25lc0Zvcm11bGFyaW89W107XHJcbiAgICBpZighb3BjaW9uZXMubW9kb0RpcmVjdG8pe1xyXG4gICAgICAgIGJvdG9uZXNGb3JtdWxhcmlvLnB1c2goe3F1ZTogJ2hkcicgICAgLCBhYnI6J0hkUicsIGlkOklEX0JPVE9OX1ZPTFZFUl9IRFIsIGxhYmVsOidob2phIGRlIHJ1dGEnLCByZXRyb2Nlc286MH0pXHJcbiAgICB9XHJcbiAgICBvcGNpb25lcy5waWxhRm9yUGsuZm9yRWFjaCgoZm9yUGssaSk9PlxyXG4gICAgICAgIGJvdG9uZXNGb3JtdWxhcmlvLnB1c2goe3F1ZTondm9sdmVyJywgYWJyOmZvclBrLmZvcm11bGFyaW8ucmVwbGFjZSgvXkY6LywnJyksIGxhYmVsOmZvclBrLmZvcm11bGFyaW8sIHJldHJvY2VzbzpvcGNpb25lcy5waWxhRm9yUGsubGVuZ3RoLWl9KVxyXG4gICAgKVxyXG4gICAgYm90b25lc0Zvcm11bGFyaW8ucHVzaCh7cXVlOicnLCBhYnI6Zm9yUGsuZm9ybXVsYXJpby5yZXBsYWNlKC9eRjovLCcnKSwgbGFiZWw6Zm9yUGsuZm9ybXVsYXJpbywgcmV0cm9jZXNvOjB9KTtcclxuICAgIHJlZ2lzdHJhckVsZW1lbnRvKHtpZDpwcm9wcy5tb2RvRGlyZWN0bz9JRF9CT1RPTl9DRVJSQVI6SURfQk9UT05fVk9MVkVSX0hEUiwgZGlyZWN0OnRydWUsXHJcbiAgICAgICAgZnVuOihcclxuICAgICAgICAgICAgcjpSZXNwdWVzdGFzLCBcclxuICAgICAgICAgICAgX2ZlZWRiYWNrRm9ybTogRm9ybVN0cnVjdHVyZVN0YXRlPElkVmFyaWFibGUsIFZhbG9yLCBJZEZpbj4sIFxyXG4gICAgICAgICAgICBlbGVtZW50bzpIVE1MRGl2RWxlbWVudCwgXHJcbiAgICAgICAgICAgIGZlZWRiYWNrQWxsOntbZm9ybXVsYXJpbyBpbiBQbGFpbkZvclBrXTpGb3JtU3RydWN0dXJlU3RhdGU8SWRWYXJpYWJsZSwgVmFsb3IsIElkRmluPn0sIFxyXG4gICAgICAgICAgICBfZXN0cnVjdHVyYTpFc3RydWN0dXJhXHJcbiAgICAgICAgKT0+e1xyXG4gICAgICAgICAgICBlbGVtZW50by5zZXRBdHRyaWJ1dGUoJ3Jlc3VtZW4tZXN0YWRvJyxjYWxjdWxhclJlc3VtZW5WaXZpZW5kYShmb3JQaywgZmVlZGJhY2tBbGwsIHIpLnJlc3VtZW5Fc3RhZG8pO1xyXG4gICAgICAgIH1cclxuICAgIH0pXHJcbiAgICByZXR1cm4gPD5cclxuICAgICAgICA8QnV0dG9uR3JvdXAga2V5PVwiZm9ybXVsYXJpb3NcIiBjbGFzc05hbWU9XCJiYXJyYS1uYXZlZ2FjaW9uXCIgc29sby1sZWN0dXJhPXtwcm9wcy5zb2xvTGVjdHVyYT8nc2knOidubyd9ID5cclxuICAgICAgICAgICAge2JvdG9uZXNGb3JtdWxhcmlvLm1hcCgoYixpKT0+XHJcbiAgICAgICAgICAgICAgICA8QnV0dG9uIGNvbG9yPXtiLnF1ZT09Zm9yUGsuZm9ybXVsYXJpbz9cInByaW1hcnlcIjpcImluaGVyaXRcIn0gdmFyaWFudD1cIm91dGxpbmVkXCJcclxuICAgICAgICAgICAgICAgICAgICBpZD17Yi5pZH1cclxuICAgICAgICAgICAgICAgICAgICBrZXk9e2Ake2l9LSR7Yi5xdWV9LSR7Yi5yZXRyb2Nlc299YH1cclxuICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17IWIucXVlfVxyXG4gICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpPT57XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYi5xdWU9PSdoZHInP2Rpc3BhdGNoZXJzLlZPTFZFUl9IRFIoe30pOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2hlcnMuVk9MVkVSX0RFX0ZPUk1VTEFSSU8oe21hZ25pdHVkUmV0cm9jZXNvOmIucmV0cm9jZXNvfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYi5xdWU9PSdoZHInP251bGw6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwYXRjaEJ5UGFzcyhhY2Npb25fYWJyaXJfZm9ybXVsYXJpbyx7Zm9yUGs6b3BjaW9uZXMucGlsYUZvclBrW29wY2lvbmVzLnBpbGFGb3JQay5sZW5ndGgtYi5yZXRyb2Nlc29dfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJhYnJcIj57Yi5hYnJ9PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImxhYmVsXCI+e2IubGFiZWx9PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9CdXR0b24+XHJcbiAgICAgICAgICAgICl9XHJcbiAgICAgICAgPC9CdXR0b25Hcm91cD5cclxuICAgICAgICB7cHJvcHMuc29sb0xlY3R1cmE/PFR5cG9ncmFwaHkgY29tcG9uZW50PVwic3BhblwiIHN0eWxlPXt7bWFyZ2luOicwIDEwcHgnfX0+IChTb2xvIExlY3R1cmEpIDwvVHlwb2dyYXBoeT46bnVsbH1cclxuICAgICAgICB7cHJvcHMubW9kb0RpcmVjdG8/XHJcbiAgICAgICAgICAgIDw+XHJcbiAgICAgICAgICAgICAgICA8QnV0dG9uR3JvdXAga2V5PVwidm9sdmVyX3lfZ3JhYmFyXCIgc3R5bGU9e3ttYXJnaW46JzAgMCAwIDMwcHgnfX0+XHJcbiAgICAgICAgICAgICAgICAgICAgPEJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZD17SURfQk9UT05fQ0VSUkFSfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xvcj1cImluaGVyaXRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50PVwib3V0bGluZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXthc3luYyAoKT0+e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYocHJvcHMuc29sb0xlY3R1cmEgfHwgIWdldERpcnR5KCkpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlcnJhckRpcmVjdG8oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldENvbmZpcm1hQ2VycmFyKHRydWUpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8SUNPTi5FeGl0VG9BcHAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxEaWFsb2dcclxuICAgICAgICAgICAgICAgICAgICAgICAgb3Blbj17ISFjb25maXJtYUNlcnJhcn1cclxuICAgICAgICAgICAgICAgICAgICAgICAgLy9oYWNlIHF1ZSBubyBzZSBjaWVycmUgZWwgbWVuc2FqZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNsb3NlPXsoKT0+c2V0Q29uZmlybWFDZXJyYXIoZmFsc2UpfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhcmlhLWxhYmVsbGVkYnk9XCJhbGVydC1kaWFsb2ctdGl0bGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhcmlhLWRlc2NyaWJlZGJ5PVwiYWxlcnQtZGlhbG9nLWRlc2NyaXB0aW9uXCJcclxuICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxEaWFsb2dUaXRsZSBpZD1cImFsZXJ0LWRpYWxvZy10aXRsZVwiPkNvbmZpcm1lIGNpZXJyZSBkZSBlbmN1ZXN0YTwvRGlhbG9nVGl0bGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxEaWFsb2dDb250ZW50PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPERpYWxvZ0NvbnRlbnRUZXh0IGlkPVwiYWxlcnQtZGlhbG9nLWRlc2NyaXB0aW9uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRXN0w6EgcG9yIHNhbGlyIGRlIGxhIGVuY3Vlc3RhLCBzZSBwZXJkZXLDoW4gbG9zIGNhbWJpb3Mgbm8gZ3VhcmRhZG9zLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9EaWFsb2dDb250ZW50VGV4dD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9EaWFsb2dDb250ZW50PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8RGlhbG9nQWN0aW9ucz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxCdXR0b24gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCk9PntcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VycmFyRGlyZWN0bygpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX0gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I9XCJzZWNvbmRhcnlcIiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50PVwib3V0bGluZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NhcnRhciBjYW1iaW9zIHkgY2VycmFyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxCdXR0b24gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCk9PntcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0Q29uZmlybWFDZXJyYXIoZmFsc2UpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX0gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudD1cImNvbnRhaW5lZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWFyIGVkaXRhbmRvIGVuY3Vlc3RhXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L0RpYWxvZ0FjdGlvbnM+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9EaWFsb2c+XHJcbiAgICAgICAgICAgICAgICAgICAge3Byb3BzLnNvbG9MZWN0dXJhP251bGw6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxCdXR0b25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPXtcInNhdmUtYnV0dG9uXCJ9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcj1cImluaGVyaXRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudD1cIm91dGxpbmVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXt0cnVlfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17YXN5bmMgKCk9PnRydWV9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJQ09OLlNhdmUvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L0J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICA8L0J1dHRvbkdyb3VwPlxyXG4gICAgICAgICAgICA8Lz5cclxuICAgICAgICA6bnVsbH1cclxuICAgICAgICA8VHlwb2dyYXBoeSBjbGFzc05hbWU9XCJtb3N0cmFyLWZvclBrXCIgY29tcG9uZW50PVwic3BhblwiIHN0eWxlPXt7bWFyZ2luOicwIDEwcHgnfX0+IFxyXG4gICAgICAgICAgICB7VkVSX0RPTUlOSU8/PGRpdiBrZXk9e2RvbWluaW99PjxzcGFuPmRvbWluaW88L3NwYW4+PHNwYW4+e2RvbWluaW99PC9zcGFuPjwvZGl2PjonJ31cclxuICAgICAgICAgICAge2xpa2VBcihwcm9wcy5mb3JQaykuZmlsdGVyKChfLGspPT5rIT0nZm9ybXVsYXJpbycpLm1hcCgodixrKT0+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGtleT17a30+PHNwYW4+e2t9PC9zcGFuPjxzcGFuPnt2fTwvc3Bhbj48L2Rpdj5cclxuICAgICAgICAgICAgKS5hcnJheSgpfSBcclxuICAgICAgICA8L1R5cG9ncmFwaHk+XHJcbiAgICAgICAgPEZhc3RTZXR0dXAvPlxyXG4gICAgPC8+XHJcbn1cclxuXHJcbmZ1bmN0aW9uIEJvdG9uVm9sdmVyRW5EaXYoe2lkfTp7aWQ6c3RyaW5nfSl7XHJcbiAgICB2YXIge29wY2lvbmVzfSA9IHVzZVNlbGVjdG9yKChzdGF0ZTpDYXNvU3RhdGUpPT4oe29wY2lvbmVzOnN0YXRlLm9wY2lvbmVzfSkpO1xyXG4gICAgY29uc3QgZGlzcGF0Y2ggPSB1c2VEaXNwYXRjaCgpO1xyXG4gICAgdmFyIGVzVm9sdmVyID0gb3BjaW9uZXMucGlsYUZvclBrLmxlbmd0aD4wO1xyXG4gICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPVwiZGl2LWJvdG9uLXZvbHZlclwiPlxyXG4gICAgICAgIDxCdXR0b24gaWQ9e2lkfSBjbGFzc05hbWU9XCJib3Rvbi12b2x2ZXJcIlxyXG4gICAgICAgICAgICBvbkNsaWNrPXsoKT0+e1xyXG4gICAgICAgICAgICAgICAgaWYgKGVzVm9sdmVyKSB7IFxyXG4gICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoQnlQYXNzKGFjY2lvbl9hYnJpcl9mb3JtdWxhcmlvLHtmb3JQazpvcGNpb25lcy5waWxhRm9yUGtbb3BjaW9uZXMucGlsYUZvclBrLmxlbmd0aC0xXX0pO1xyXG4gICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoKGRpc3BhdGNoZXJzLlZPTFZFUl9ERV9GT1JNVUxBUklPKHttYWduaXR1ZFJldHJvY2VzbzoxfSkpXHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBib3RvbkNlcnJhciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKElEX0JPVE9OX0NFUlJBUikgfHwgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoSURfQk9UT05fVk9MVkVSX0hEUikgXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGJvdG9uQ2VycmFyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvdG9uQ2VycmFyLmNsaWNrKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9fVxyXG4gICAgICAgID4gPElDT04uQ2hldnJvbkxlZnQvPntlc1ZvbHZlciA/IFwiIFZvbHZlclwiIDogXCIgQ2VycmFyXCJ9PC9CdXR0b24+XHJcbiAgICA8L2Rpdj5cclxufVxyXG5cclxuZnVuY3Rpb24gRm9ybXVsYXJpb0Rlc3BsaWVndWUocHJvcHM6e2ZvclBrOkZvclBrfSl7XHJcbiAgICB2YXIgZm9yUGsgPSBwcm9wcy5mb3JQaztcclxuICAgIHZhciB7Zm9ybXVsYXJpbywgbW9kb0Rlc3BsaWVndWUsIG1vZG8sIG9wY2lvbmVzfSBcclxuICAgICAgICA9IHVzZVNlbGVjdG9yVml2aWVuZGEocHJvcHMuZm9yUGspO1xyXG4gICAgdmFyIHNvbG9MZWN0dXJhID0gZ2V0RGF0b3NCeVBhc3MoKS5zb2xvTGVjdHVyYTtcclxuICAgIGNvbnN0IGRpc3BhdGNoID0gdXNlRGlzcGF0Y2goKTtcclxuICAgIHZhciBlc1ZvbHZlciA9IG9wY2lvbmVzLnBpbGFGb3JQay5sZW5ndGg+MDtcclxuICAgIHVzZUVmZmVjdCgoKT0+e1xyXG4gICAgICAgIHZhciBjb250cm9sU2Nyb2xsPSgpPT57XHJcbiAgICAgICAgICAgIHZhciBhcnJpYmEgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZmFiLWFjdGl2by1hcnJpYmEnKTtcclxuICAgICAgICAgICAgaWYoYXJyaWJhKXtcclxuICAgICAgICAgICAgICAgIHNldFZhbG9yRGlzdGludG8oYXJyaWJhLnN0eWxlLCAndmlzaWJpbGl0eScsXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxyXG4gICAgICAgICAgICAgICAgICAgIGFycmliYS5lbFRvcFZpc2liaWxpemFyICE9bnVsbCAmJiBhcnJpYmEuZWxUb3BWaXNpYmlsaXphciArIDEwIFxyXG4gICAgICAgICAgICAgICAgICAgIDwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcCA/ICd2aXNpYmxlJyA6ICdoaWRkZW4nXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciBhYmFqbyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmYWItYWN0aXZvLWFiYWpvJyk7XHJcbiAgICAgICAgICAgIGlmKGFiYWpvKXtcclxuICAgICAgICAgICAgICAgIHNldFZhbG9yRGlzdGludG8oYWJham8uc3R5bGUsICd2aXNpYmlsaXR5JywgXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxyXG4gICAgICAgICAgICAgICAgICAgIGFiYWpvLmVsQm90dG9tVmlzaWJpbGl6YXIgIT0gbnVsbCAmJiBhYmFqby5lbEJvdHRvbVZpc2liaWxpemFyIC0gMjBcclxuICAgICAgICAgICAgICAgICAgICA+IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3AgKyB3aW5kb3cuaW5uZXJIZWlnaHQgKiAwLjcgPyAndmlzaWJsZScgOiAnaGlkZGVuJ1xyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgY29udHJvbFNjcm9sbCk7XHJcbiAgICAgICAgY29udHJvbFNjcm9sbCgpO1xyXG4gICAgICAgIHJldHVybiAoKT0+e1xyXG4gICAgICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgY29udHJvbFNjcm9sbCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSlcclxuICAgIC8vIFRPRE8gVm9sdmVyIGEgcG9uZXIgZWwgbW92aW1pZW50byBhIGxhIGFjdHVhbFxyXG4gICAgdmFyIGFjdHVhbDphbnlcclxuICAgIHZhciBjb21wbGV0bzphbnlcclxuICAgIHZhciBvbkNsaWNrU2FsdGFyQWN0dWFsID0gKCk9PntcclxuICAgICAgICB2YXIge3ZhcmlhYmxlQWN0dWFsfSA9IGRpc3BhdGNoQnlQYXNzKGFjY2lvbl9yZWdpc3RyYXJfcmVzcHVlc3RhLCB7cmVzcHVlc3RhOm51bGwsIHZhcmlhYmxlOk5PX0NBTUJJQVJfX1NPTE9fVFJBRVJfU1RBVFVTLCBmb3JQazpwcm9wcy5mb3JQa30pO1xyXG4gICAgICAgIGlmKHZhcmlhYmxlQWN0dWFsKXtcclxuICAgICAgICAgICAgZW5mb2NhckVsZW1lbnRvRGVWYXJpYWJsZSh2YXJpYWJsZUFjdHVhbClcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICB2YXIgbGlzdGFNb2RvczpNb2RvRGVzcGxpZWd1ZVtdPVsnbWV0YWRhdG9zJywncmVsZXZhbWllbnRvJywnUERGJ107XHJcbiAgICBbJ2JvdG9uLXZvbHZlci0xJywgJ2JvdG9uLXZvbHZlci0yJ10uZm9yRWFjaChpZD0+e1xyXG4gICAgICAgIHJlZ2lzdHJhckVsZW1lbnRvKHtpZCwgZGlyZWN0OnRydWUsXHJcbiAgICAgICAgICAgIGZ1bjooXHJcbiAgICAgICAgICAgICAgICByOlJlc3B1ZXN0YXMsIFxyXG4gICAgICAgICAgICAgICAgZmVlZGJhY2tGb3JtOiBGb3JtU3RydWN0dXJlU3RhdGU8SWRWYXJpYWJsZSwgVmFsb3IsIElkRmluPiwgXHJcbiAgICAgICAgICAgICAgICBlbGVtZW50bzpIVE1MRGl2RWxlbWVudCwgXHJcbiAgICAgICAgICAgICAgICBmZWVkYmFja0FsbDp7W2Zvcm11bGFyaW8gaW4gUGxhaW5Gb3JQa106Rm9ybVN0cnVjdHVyZVN0YXRlPElkVmFyaWFibGUsIFZhbG9yLCBJZEZpbj59LCBcclxuICAgICAgICAgICAgICAgIF9lc3RydWN0dXJhOkVzdHJ1Y3R1cmFcclxuICAgICAgICAgICAgKT0+e1xyXG4gICAgICAgICAgICAgICAgZWxlbWVudG8uc2V0QXR0cmlidXRlKCdyZXN1bWVuLWVzdGFkbycsZXNWb2x2ZXI/ZmVlZGJhY2tGb3JtLnJlc3VtZW46Y2FsY3VsYXJSZXN1bWVuVml2aWVuZGEoZm9yUGssIGZlZWRiYWNrQWxsLCByKS5yZXN1bWVuRXN0YWRvKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICB9KVxyXG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvciBlc3BlY2lhbCBoYXkgcXVlIGxlZXJsbyBlbiBlbCBwYXJzZXIgZGUgY2FzaWxsZXJvcyBzaSBlc3RvIHRlcm1pbmEgcXVlZGFuZG8gYXPDrVxyXG4gICAgdmFyIHBhbnRhbGxhQ29tcGxldGEgPSBmb3JtdWxhcmlvLmVzcGVjaWFsPy5wYW50YWxsYUNvbXBsZXRhO1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgICA8PlxyXG4gICAgICAgICAgICA8QXBwQmFyIHBvc2l0aW9uPVwiZml4ZWRcIiBjb2xvcj17c29sb0xlY3R1cmE/J3NlY29uZGFyeSc6J3ByaW1hcnknfT5cclxuICAgICAgICAgICAgICAgIDxUb29sYmFyPlxyXG4gICAgICAgICAgICAgICAgICAgIDxCYXJyYURlTmF2ZWdhY2lvbiBmb3JQaz17Zm9yUGt9IHNvbG9MZWN0dXJhPXtzb2xvTGVjdHVyYSB8fCBmYWxzZX0gbW9kb0RpcmVjdG89e29wY2lvbmVzLm1vZG9EaXJlY3RvfS8+XHJcbiAgICAgICAgICAgICAgICA8L1Rvb2xiYXI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGlkPVwibWluaS1jb25zb2xlXCI+PC9kaXY+XHJcbiAgICAgICAgICAgIDwvQXBwQmFyPlxyXG4gICAgICAgICAgICA8bWFpbj5cclxuICAgICAgICAgICAgICAgIDxQYXBlciBjbGFzc05hbWU9XCJmb3JtdWxhcmlvXCIgbW9kby1kZXNwbGllZ3VlPXttb2RvRGVzcGxpZWd1ZX0gdmVyLW51bS1vcGNpb25lcz17b3BjaW9uZXMuY29uQ2FtcG9PcGNpb25lcz8nU0knOidOTyd9PlxyXG4gICAgICAgICAgICAgICAgICAgIHttb2RvLmRlbW8/PGRpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPFR5cG9ncmFwaHkgY29tcG9uZW50PVwic3BhblwiPk1vZG8gZGUgZGVzcGxpZWd1ZTo8L1R5cG9ncmFwaHk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxCdXR0b25Hcm91cD5cclxuICAgICAgICAgICAgICAgICAgICAgICAge2xpc3RhTW9kb3MubWFwKG1vZG89PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPEJ1dHRvbiBrZXk9e21vZG99IHZhcmlhbnQ9e21vZG89PW1vZG9EZXNwbGllZ3VlP1wiY29udGFpbmVkXCI6XCJvdXRsaW5lZFwifSBvbkNsaWNrPXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKT0+ZGlzcGF0Y2goZGlzcGF0Y2hlcnMuTU9ET19ERVNQTElFR1VFKHttb2RvRGVzcGxpZWd1ZTptb2RvfSkpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Pnttb2RvfTwvQnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICApfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L0J1dHRvbkdyb3VwPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PjpudWxsfVxyXG4gICAgICAgICAgICAgICAgICAgIHtwYW50YWxsYUNvbXBsZXRhP251bGw6PEJvdG9uVm9sdmVyRW5EaXYgaWQ9XCJib3Rvbi12b2x2ZXItMVwiLz59XHJcbiAgICAgICAgICAgICAgICAgICAge3BhbnRhbGxhQ29tcGxldGE/bnVsbDo8Rm9ybXVsYXJpb0VuY2FiZXphZG8gY2FzaWxsZXJvPXtmb3JtdWxhcmlvfS8+fVxyXG4gICAgICAgICAgICAgICAgICAgIDxEZXNwbGVnYXJDb250ZW5pZG9JbnRlcm5vQmxvcXVlT0Zvcm11bGFyaW8gYmxvcXVlT0Zvcm11bGFyaW89e2Zvcm11bGFyaW99IGZvcm11bGFyaW89e2Zvcm11bGFyaW99IGZvclBrPXtmb3JQa30gbXVsdGlwbGU9e2ZhbHNlfS8+XHJcbiAgICAgICAgICAgICAgICAgICAge3BhbnRhbGxhQ29tcGxldGE/bnVsbDo8Qm90b25Wb2x2ZXJFbkRpdiBpZD1cImJvdG9uLXZvbHZlci0yXCIvPn1cclxuICAgICAgICAgICAgICAgIDwvUGFwZXI+XHJcbiAgICAgICAgICAgICAgICA8RmFiIGlkPSdmYWItYWN0aXZvLWFycmliYScgY29sb3I9XCJwcmltYXJ5XCIgYXJpYS1sYWJlbD1cImFkZFwiIG9uQ2xpY2s9e29uQ2xpY2tTYWx0YXJBY3R1YWx9PlxyXG4gICAgICAgICAgICAgICAgICAgIDxJQ09OLktleWJvYXJkQXJyb3dVcCAvPlxyXG4gICAgICAgICAgICAgICAgPC9GYWI+XHJcbiAgICAgICAgICAgICAgICA8RmFiIGlkPSdmYWItYWN0aXZvLWFiYWpvJyBjb2xvcj1cInByaW1hcnlcIiBhcmlhLWxhYmVsPVwiYWRkXCIgb25DbGljaz17b25DbGlja1NhbHRhckFjdHVhbH0+XHJcbiAgICAgICAgICAgICAgICAgICAgPElDT04uS2V5Ym9hcmRBcnJvd0Rvd24gLz5cclxuICAgICAgICAgICAgICAgIDwvRmFiPlxyXG4gICAgICAgICAgICAgICAgPEZhYiBpZD0nZmFiLWVycm9yLWFycmliYScgdmFyaWFudD1cImV4dGVuZGVkXCIgY29sb3I9XCJzZWNvbmRhcnlcIiBhcmlhLWxhYmVsPVwiZWRpdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxJQ09OLk5hdmlnYXRpb24gLz5cclxuICAgICAgICAgICAgICAgICAgICBFcnJvclxyXG4gICAgICAgICAgICAgICAgPC9GYWI+ICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgPEZhYiBpZD0nZmFiLWVycm9yLWFiYWpvJyB2YXJpYW50PVwiZXh0ZW5kZWRcIiBjb2xvcj1cInNlY29uZGFyeVwiIGFyaWEtbGFiZWw9XCJlZGl0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPElDT04uTmF2aWdhdGlvbkRvd24gLz5cclxuICAgICAgICAgICAgICAgICAgICBFcnJvclxyXG4gICAgICAgICAgICAgICAgPC9GYWI+ICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9J2VzcGFjaW8tZmluYWwtZm9ybXVsYXJpbyc+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICB7b3BjaW9uZXMubW9kb0JvcnJhclJlc3B1ZXN0YSAmJiBvcGNpb25lcy5mb3JQaz88RGVzcGxlZ2FyQ29uZmlybWFyQm9ycmFyUmVzcHVlc3RhIGZvclBrPXtvcGNpb25lcy5mb3JQa30gdmFyaWFibGVCb3JyYXI9e29wY2lvbmVzLm1vZG9Cb3JyYXJSZXNwdWVzdGF9Lz46bnVsbH1cclxuICAgICAgICAgICAgPC9tYWluPlxyXG4gICAgICAgIDwvPlxyXG4gICAgKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIEF0cmlidXRvKHByb3BzOntub21icmU6c3RyaW5nLCB2YWxvcjphbnl9KXtcclxuICAgIHJldHVybiBwcm9wcy52YWxvciE9bnVsbCAmJiBwcm9wcy52YWxvciE9Jyc/PHNwYW4gY2xhc3NOYW1lPVwiYXRyaWJ1dG8tcGFyXCI+XHJcbiAgICAgICAge3Byb3BzLm5vbWJyZT88c3BhbiBjbGFzc05hbWU9XCJhdHJpYnV0by1ub21icmVcIj57cHJvcHMubm9tYnJlfTwvc3Bhbj46bnVsbH1cclxuICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwiYXRyaWJ1dG8tdmFsb3JcIj57cHJvcHMudmFsb3IudG9TdHJpbmcoKX08L3NwYW4+XHJcbiAgICA8L3NwYW4+Om51bGxcclxufVxyXG5cclxuY29uc3QgbGlzdGFFc3RhZG9zQ2FyZ2E6RXN0YWRvQ2FyZ2FbXT1bJ3Jlc3VtZW4nLCdyZWxldmFtaWVudG8nLCdyZWNpYm8nXTtcclxudmFyIHJlc3VtaWRvcmVzID0gW1xyXG4gICAge25vbWJyZTonUkVBJyAgICAgICAgICwgZjoocnI6UmVzcHVlc3Rhc1JhaXopPT5yci5yZXN1bWVuRXN0YWRvPT1cIm9rXCIgICAgICAgICAgfSxcclxuICAgIHtub21icmU6J0NpdGEgcGFjdGFkYScsIGY6KHJyOlJlc3B1ZXN0YXNSYWl6KT0+cnIucmVzdW1lbkVzdGFkbz09XCJjaXRhIHBhY3RhZGFcIn0sXHJcbiAgICB7bm9tYnJlOidQZW5kaWVudGVzJyAgLCBmOihycjpSZXNwdWVzdGFzUmFpeik9PnJyLnJlc3VtZW5Fc3RhZG89PVwidmFjaW9cIiAgICAgICB9LFxyXG5dO1xyXG5cclxucmVzdW1pZG9yZXMucHVzaChcclxuICAgIHtub21icmU6J090cm9zJywgZjpyZXN1bWlkb3Jlcy5yZWR1Y2UoKGcscik9Pihycj0+IXIuZihycikgJiYgZyhycikgKSwoXzpSZXNwdWVzdGFzUmFpeik9PnRydWUpIH1cclxuKVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIERlc3BsZWdhckxpbmVhUmVzdW1lblVBUHJpbmNpcGFsKHByb3BzOntcclxuICAgIG51bVZpdmllbmRhOklkRW5jLFxyXG4gICAgZm9ybVByaW5jaXBhbDpJZEZvcm11bGFyaW8sXHJcbiAgICB0YXJlYTogc3RyaW5nLFxyXG4gICAgcmVzcHVlc3RhczpSZXNwdWVzdGFzUmFpeixcclxufSl7XHJcbiAgICBjb25zdCB7bnVtVml2aWVuZGEsIHJlc3B1ZXN0YXMsIGZvcm1QcmluY2lwYWwsIHRhcmVhfSA9IHByb3BzO1xyXG4gICAgY29uc3QgaWQ9J3Zpdi0nK251bVZpdmllbmRhO1xyXG4gICAgY29uc3QgZm9yUGs6Rm9yUGs9e2Zvcm11bGFyaW86Zm9ybVByaW5jaXBhbCwgdml2aWVuZGE6TnVtYmVyKG51bVZpdmllbmRhKSBhcyBJZEVuY307IC8vbm8gcXVpdGFyIGVsIGNhc3RlbyBwb3JxdWUgdmllbmUgY29tbyB0ZXh0byB5IG5lY2VzaXRvIHF1ZSBzZWEgbsO6bWVyb1xyXG4gICAgdmFyIHRlbSA9IGdldERhdG9zQnlQYXNzKCkuaW5mb3JtYWNpb25IZHJbbnVtVml2aWVuZGFdLnRlbTtcclxuICAgIHZhciBkaXNwYXRjaCA9IHVzZURpc3BhdGNoKCk7XHJcbiAgICB1c2VFZmZlY3QoKCk9PntcclxuICAgICAgICB2b2xjYWRvSW5pY2lhbEVsZW1lbnRvc1JlZ2lzdHJhZG9zKGZvclBrKTtcclxuICAgICAgICBpbnRlbnRhckJhY2t1cChmb3JQaylcclxuICAgIH0pXHJcbiAgICByZWdpc3RyYXJFbGVtZW50byh7aWQsIGRpcmVjdDp0cnVlLFxyXG4gICAgICAgIGZ1bjooXHJcbiAgICAgICAgICAgIHI6UmVzcHVlc3RhcywgXHJcbiAgICAgICAgICAgIF9mZWVkYmFja0Zvcm06IEZvcm1TdHJ1Y3R1cmVTdGF0ZTxJZFZhcmlhYmxlLCBWYWxvciwgSWRGaW4+LCBcclxuICAgICAgICAgICAgZWxlbWVudG86SFRNTERpdkVsZW1lbnQsIFxyXG4gICAgICAgICAgICBmZWVkYmFja0FsbDp7W2Zvcm11bGFyaW8gaW4gUGxhaW5Gb3JQa106Rm9ybVN0cnVjdHVyZVN0YXRlPElkVmFyaWFibGUsIFZhbG9yLCBJZEZpbj59LCBcclxuICAgICAgICAgICAgX2VzdHJ1Y3R1cmE6RXN0cnVjdHVyYVxyXG4gICAgICAgICk9PntcclxuICAgICAgICAgICAgLy9wcmVndW50byBzaSBlcyBsYSBtaXNtYSB2aXZpZW5kYSBwb3JxdWUgbGEgZnVuY2lvbiBzZSBkaXNwYXJhIFxyXG4gICAgICAgICAgICAvL2NvbiB0b2RhcyBsYXMgY29tYmluYWNpb25lcyBkZSByZXNwdWVzdGFzIHBhcmEgY2FkYSBmb3JQa1xyXG4gICAgICAgICAgICAvL0B0cy1pZ25vcmUgdml2aWVuZGEgZXhpc3RlXHJcbiAgICAgICAgICAgIGlmKHIudml2aWVuZGEgPT0gZm9yUGsudml2aWVuZGEpe1xyXG4gICAgICAgICAgICAgICAgZWxlbWVudG8uc2V0QXR0cmlidXRlKCdyZXN1bWVuLWVzdGFkbycsY2FsY3VsYXJSZXN1bWVuVml2aWVuZGEoZm9yUGssIGZlZWRiYWNrQWxsLCByKS5yZXN1bWVuRXN0YWRvKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICAgICAgXHJcbiAgICB9KVxyXG4gICAgcmV0dXJuIDxUYWJsZVJvdyBrZXk9e251bVZpdmllbmRhfT5cclxuICAgICAgICA8VGFibGVDZWxsPlxyXG4gICAgICAgICAgICB7dGVtP1xyXG4gICAgICAgICAgICAgICAgPD5cclxuICAgICAgICAgICAgICAgICAgICA8RGVzcGxlZ2FyVGVtIHRlbT17dGVtfS8+XHJcbiAgICAgICAgICAgICAgICAgICAge3Jlc3B1ZXN0YXNbJ3Jlc3VtZW5Fc3RhZG8nIGFzIElkVmFyaWFibGVdPT1cImNpdGEgcGFjdGFkYVwiP1xyXG4gICAgICAgICAgICAgICAgICAgICAgICA8RGVzcGxlZ2FyQ2l0YVBhY3RhZGEgcmVzcHVlc3Rhcz17cmVzcHVlc3Rhc30vPlxyXG4gICAgICAgICAgICAgICAgICAgIDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgPERlc3BsZWdhckNpdGFQYWN0YWRhWVNlbGVjY2lvbmFkb0FudGVyaW9yVGVtIHRlbT17dGVtfS8+XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgPC8+XHJcbiAgICAgICAgICAgIDpudWxsfVxyXG4gICAgICAgIDwvVGFibGVDZWxsPlxyXG4gICAgICAgIDxUYWJsZUNlbGw+XHJcbiAgICAgICAgICAgIHt0YXJlYX1cclxuICAgICAgICA8L1RhYmxlQ2VsbD5cclxuICAgICAgICA8VGFibGVDZWxsPlxyXG4gICAgICAgICAgICA8QnV0dG9uIGlkPXtpZH0gb25DbGljaz17KCk9PiBcclxuICAgICAgICAgICAgICAgIGRpc3BhdGNoKGRpc3BhdGNoZXJzLkNBTUJJQVJfRk9STVVMQVJJTyh7Zm9yUGssIGFwaWxhclZ1ZWx0YTpmYWxzZX0pKVxyXG4gICAgICAgICAgICB9PlxyXG4gICAgICAgICAgICAgICAge251bVZpdmllbmRhLnRvU3RyaW5nKCl9XHJcbiAgICAgICAgICAgIDwvQnV0dG9uPlxyXG4gICAgICAgIDwvVGFibGVDZWxsPlxyXG4gICAgPC9UYWJsZVJvdz5cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIERlc3BsZWdhckNhcmdhKHByb3BzOntcclxuICAgIGNhcmdhOkNhcmdhLCBcclxuICAgIGlkQ2FyZ2E6SWRDYXJnYSwgXHJcbiAgICBwb3NpY2lvbjpudW1iZXIsXHJcbiAgICBpbmZvcm1hY2lvbkhkcjpJbmZvcm1hY2lvbkhkciwgXHJcbiAgICByZXNwdWVzdGFzOiBSZXNwdWVzdGFMYXNVQSxcclxuICAgIGZlZWRiYWNrUm93VmFsaWRhdG9yOntcclxuICAgICAgICBbZm9ybXVsYXJpbyBpbiBQbGFpbkZvclBrXTpGb3JtU3RydWN0dXJlU3RhdGU8SWRWYXJpYWJsZSwgVmFsb3IsIElkRmluPiBcclxuICAgIH1cclxufSl7XHJcbiAgICBjb25zdCB7Y2FyZ2EsIGlkQ2FyZ2EsIGluZm9ybWFjaW9uSGRyLCByZXNwdWVzdGFzfSA9IHByb3BzO1xyXG4gICAgcmV0dXJuIDxQYXBlciBjbGFzc05hbWU9XCJjYXJnYVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiaW5mb3JtYWNpb24tY2FyZ2FcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJjYXJnYVwiPsOBcmVhOiB7aWRDYXJnYX08L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJvYnNlcnZhY2lvbmVzXCI+e2NhcmdhLm9ic2VydmFjaW9uZXN9PC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJpbmZvcm1hY2lvbi1jYXJnYVwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZlY2hhXCI+e2NhcmdhLmZlY2hhfTwvZGl2PlxyXG4gICAgICAgICAgICB7LypcclxuICAgICAgICAgICAgPEJ1dHRvbkdyb3VwPlxyXG4gICAgICAgICAgICB7bGlzdGFFc3RhZG9zQ2FyZ2EubWFwKGVzdGFkb19jYXJnYT0+XHJcbiAgICAgICAgICAgICAgICA8QnV0dG9uIGtleT17ZXN0YWRvX2NhcmdhfSB2YXJpYW50PXtlc3RhZG9fY2FyZ2E9PWNhcmdhLmVzdGFkb19jYXJnYT9cImNvbnRhaW5lZFwiOlwib3V0bGluZWRcIn0gb25DbGljaz17XHJcbiAgICAgICAgICAgICAgICAgICAgKCk9PmRpc3BhdGNoKGRpc3BhdGNoZXJzLkVTVEFET19DQVJHQSh7aWRDYXJnYSwgZXN0YWRvX2NhcmdhfSkpXHJcbiAgICAgICAgICAgICAgICB9Pntlc3RhZG9fY2FyZ2F9PC9CdXR0b24+XHJcbiAgICAgICAgICAgICl9XHJcbiAgICAgICAgICAgIDwvQnV0dG9uR3JvdXA+XHJcbiAgICAgICAgICAgICovfVxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIHtjYXJnYS5lc3RhZG9fY2FyZ2E9PW51bGwgJiYgIXByb3BzLnBvc2ljaW9uIHx8IGNhcmdhLmVzdGFkb19jYXJnYT09J3JlbGV2YW1pZW50byc/XHJcbiAgICAgICAgPFRhYmxlIGNsYXNzTmFtZT1cInRhYmxhLWNhcmdhLWhvamEtZGUtcnV0YVwiPlxyXG4gICAgICAgICAgICA8Y29sZ3JvdXA+XHJcbiAgICAgICAgICAgICAgICA8Y29sIHN0eWxlPXt7d2lkdGg6XCI3NSVcIn19Lz5cclxuICAgICAgICAgICAgICAgIDxjb2wgc3R5bGU9e3t3aWR0aDpcIjEwJVwifX0vPiAgICBcclxuICAgICAgICAgICAgICAgIDxjb2wgc3R5bGU9e3t3aWR0aDpcIjE1JVwifX0vPiAgICBcclxuICAgICAgICAgICAgPC9jb2xncm91cD5cclxuICAgICAgICAgICAgPFRhYmxlSGVhZCBzdHlsZT17e2ZvbnRTaXplOiBcIjEuMnJlbVwifX0+XHJcbiAgICAgICAgICAgICAgICA8VGFibGVSb3cgY2xhc3NOYW1lPVwidHItY2FyZ2FcIj5cclxuICAgICAgICAgICAgICAgICAgICA8VGFibGVDZWxsPmRvbWljaWxpbzwvVGFibGVDZWxsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxUYWJsZUNlbGw+dGFyZWE8L1RhYmxlQ2VsbD5cclxuICAgICAgICAgICAgICAgICAgICA8VGFibGVDZWxsPmVuYzwvVGFibGVDZWxsPlxyXG4gICAgICAgICAgICAgICAgPC9UYWJsZVJvdz5cclxuICAgICAgICAgICAgPC9UYWJsZUhlYWQ+XHJcbiAgICAgICAgICAgIDxUYWJsZUJvZHk+XHJcbiAgICAgICAgICAgICAgICB7bGlrZUFyKGluZm9ybWFjaW9uSGRyKS5maWx0ZXIoKGluZm9ybWFjaW9uKT0+aW5mb3JtYWNpb24udGVtLmNhcmdhPT1pZENhcmdhKS5tYXAoKGluZm9ybWFjaW9uLCBudW1WaXZpZW5kYSk9PlxyXG4gICAgICAgICAgICAgICAgICAgIDxEZXNwbGVnYXJMaW5lYVJlc3VtZW5VQVByaW5jaXBhbCBcclxuICAgICAgICAgICAgICAgICAgICAgICAga2V5PXtudW1WaXZpZW5kYX0gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG51bVZpdmllbmRhPXtudW1WaXZpZW5kYX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZWE9e2luZm9ybWFjaW9uLnRhcmVhLnRhcmVhfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtUHJpbmNpcGFsPXtpbmZvcm1hY2lvbi50YXJlYS5tYWluX2Zvcm19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXM9e3Jlc3B1ZXN0YXMudml2aWVuZGFzW251bVZpdmllbmRhXSBhcyBSZXNwdWVzdGFzUmFpen1cclxuICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgKS5hcnJheSgpfVxyXG4gICAgICAgICAgICA8L1RhYmxlQm9keT5cclxuICAgICAgICA8L1RhYmxlPjpcclxuICAgICAgICA8VGFibGU+XHJcbiAgICAgICAgICAgIDxUYWJsZUhlYWQgc3R5bGU9e3tmb250U2l6ZTogXCIxLjJyZW1cIn19PlxyXG4gICAgICAgICAgICAgICAgPFRhYmxlUm93IGNsYXNzTmFtZT1cInRyLWNhcmdhXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3Jlc3VtaWRvcmVzLm1hcCgocmVzdW1pZG9yOiB0eXBlb2YgcmVzdW1pZG9yZXNbMF0sIGk6bnVtYmVyKT0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxUYWJsZUNlbGwga2V5PXtpfT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtyZXN1bWlkb3Iubm9tYnJlfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L1RhYmxlQ2VsbD5cclxuICAgICAgICAgICAgICAgICAgICApfVxyXG4gICAgICAgICAgICAgICAgPC9UYWJsZVJvdz5cclxuICAgICAgICAgICAgPC9UYWJsZUhlYWQ+XHJcbiAgICAgICAgPC9UYWJsZT5cclxuICAgICAgICB9XHJcbiAgICA8L1BhcGVyPlxyXG59XHJcbmV4cG9ydCBmdW5jdGlvbiBEZXNwbGVnYXJDaXRhUGFjdGFkYShwcm9wczp7cmVzcHVlc3RhczpSZXNwdWVzdGFzfSl7XHJcbiAgICBjb25zdCB7cmVzcHVlc3Rhc30gPSBwcm9wcztcclxuICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT1cImNpdGEtcGFjdGFkYVwiPlxyXG4gICAgICAgIDxkaXY+PEF0cmlidXRvIG5vbWJyZT1cIkNpdGEgcGFjdGFkYSBjb24gXCIgdmFsb3I9e3Jlc3B1ZXN0YXNbcDEyXX0vPjwvZGl2PlxyXG4gICAgICAgIDxkaXY+PEF0cmlidXRvIG5vbWJyZT1cIkNlbC46XCIgdmFsb3I9e3Jlc3B1ZXN0YXNbc3AyXX0vPjwvZGl2PlxyXG4gICAgICAgIDxkaXY+PEF0cmlidXRvIG5vbWJyZT1cIlRlbC46XCIgdmFsb3I9e3Jlc3B1ZXN0YXNbc3AzXX0vPjwvZGl2PlxyXG4gICAgICAgIDxkaXY+PEF0cmlidXRvIG5vbWJyZT1cIkZlY2hhOlwiIHZhbG9yPXtyZXNwdWVzdGFzW3NwNF19Lz48L2Rpdj5cclxuICAgICAgICA8ZGl2PjxBdHJpYnV0byBub21icmU9XCJIb3JhOlwiIHZhbG9yPXtyZXNwdWVzdGFzW3NwNV19Lz48L2Rpdj5cclxuICAgIDwvZGl2PlxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gRGVzcGxlZ2FyQ2l0YVBhY3RhZGFZU2VsZWNjaW9uYWRvQW50ZXJpb3JUZW0ocHJvcHM6e3RlbTpURU19KXtcclxuICAgIGNvbnN0IHt0ZW19ID0gcHJvcHM7XHJcbiAgICByZXR1cm4gPGRpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRlbS1jaXRhXCI+XHJcbiAgICAgICAgICAgIDxBdHJpYnV0byBub21icmU9XCJDaXRhOlwiIHZhbG9yPXt0ZW0uY2l0YX0vPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBEZXNwbGVnYXJUZW0ocHJvcHM6e3RlbTpURU19KXtcclxuICAgIGNvbnN0IHt0ZW19ID0gcHJvcHM7XHJcbiAgICByZXR1cm4gPGRpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRlbS1kb21pY2lsaW9cIj57dGVtLm5vbWNhbGxlfSB7dGVtLm5yb2NhdGFzdHJhbH0gPEF0cmlidXRvIG5vbWJyZT1cInBpc29cIiB2YWxvcj17dGVtLnBpc299Lz4gPEF0cmlidXRvIG5vbWJyZT1cImRwdG9cIiB2YWxvcj17dGVtLmRlcGFydGFtZW50b30vPiA8L2Rpdj5cclxuICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICA8QXRyaWJ1dG8gbm9tYnJlPVwic2VjdG9yXCIgdmFsb3I9e3RlbS5zZWN0b3J9Lz5cclxuICAgICAgICAgICAgPEF0cmlidXRvIG5vbWJyZT1cImVkaWZpY2lvXCIgdmFsb3I9e3RlbS5lZGlmaWNpb30vPlxyXG4gICAgICAgICAgICA8QXRyaWJ1dG8gbm9tYnJlPVwiY2FzYVwiIHZhbG9yPXt0ZW0uY2FzYX0vPlxyXG4gICAgICAgICAgICA8QXRyaWJ1dG8gbm9tYnJlPVwiZW50cmFkYVwiIHZhbG9yPXt0ZW0uZW50cmFkYX0vPlxyXG4gICAgICAgICAgICA8QXRyaWJ1dG8gbm9tYnJlPVwiaGFiaXRhY2lvblwiIHZhbG9yPXt0ZW0uaGFiaXRhY2lvbn0vPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGVtLW9ic2VydmFjaW9uZXNcIj5cclxuICAgICAgICAgICAge3RlbS5vYnNlcnZhY2lvbmVzfSBcclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gSG9qYURlUnV0YURlc3BsaWVndWUoKXtcclxuICAgIHZhciB7Y2FyZ2FzLCBudW1fc2luY3JvLCBpbmZvcm1hY2lvbkhkciwgcmVzcHVlc3Rhc30gPSBnZXREYXRvc0J5UGFzcygpO1xyXG4gICAgdmFyIHttb2RvfSA9IHVzZVNlbGVjdG9yKChzdGF0ZTpDYXNvU3RhdGUpPT4oe21vZG86c3RhdGUubW9kb30pKTtcclxuICAgIHZhciBmZWVkYmFja1Jvd1ZhbGlkYXRvciA9IGdldEZlZWRiYWNrUm93VmFsaWRhdG9yKClcclxuICAgIHZhciBkaXNwYXRjaCA9IHVzZURpc3BhdGNoKCk7XHJcbiAgICBjb25zdCB1cGRhdGVPbmxpbmVTdGF0dXMgPSBmdW5jdGlvbigpe1xyXG4gICAgICAgIHNldE9ubGluZSh3aW5kb3cubmF2aWdhdG9yLm9uTGluZSk7XHJcbiAgICB9XHJcbiAgICBjb25zdCBhcHBWZXJzaW9uID0gZ2V0Q2FjaGVWZXJzaW9uKCk7XHJcbiAgICBjb25zdCBbb25saW5lLCBzZXRPbmxpbmVdID0gdXNlU3RhdGUod2luZG93Lm5hdmlnYXRvci5vbkxpbmUpO1xyXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ29ubGluZScsICB1cGRhdGVPbmxpbmVTdGF0dXMpO1xyXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ29mZmxpbmUnLCB1cGRhdGVPbmxpbmVTdGF0dXMpO1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgICA8PlxyXG4gICAgICAgICAgICA8QXBwQmFyIHBvc2l0aW9uPVwiZml4ZWRcIj5cclxuICAgICAgICAgICAgICAgIDxUb29sYmFyPlxyXG4gICAgICAgICAgICAgICAgICAgIDxUeXBvZ3JhcGh5IHZhcmlhbnQ9XCJoNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBIb2phIGRlIHJ1dGFcclxuICAgICAgICAgICAgICAgICAgICA8L1R5cG9ncmFwaHk+XHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vPEljb25CdXR0b24gc3R5bGU9e3ttYXJnaW5Ub3A6JzNweCd9fVxyXG4gICAgICAgICAgICAgICAgICAgIC8vICAgIGNvbG9yPVwiaW5oZXJpdFwiXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gICAgLy9vbkNsaWNrPXsvKmRpc3BhdGNoIHF1ZSBsbGV2YSBhIHBhbnRhbGxhIG9wY2lvbmVzKi99XHJcbiAgICAgICAgICAgICAgICAgICAgLy8+XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gICAgPElDT04uU2V0dGluZ3MvPlxyXG4gICAgICAgICAgICAgICAgICAgIC8vPC9JY29uQnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB7b25saW5lP1xyXG4gICAgICAgICAgICAgICAgICAgICAgICA8PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPEljb25CdXR0b25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcj1cImluaGVyaXRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpPT57XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG9TaW5jcm9uaXphcigpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SUNPTi5TeW5jQWx0Lz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvSWNvbkJ1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC8+XHJcbiAgICAgICAgICAgICAgICAgICAgOm51bGx9XHJcbiAgICAgICAgICAgICAgICA8L1Rvb2xiYXI+XHJcbiAgICAgICAgICAgIDwvQXBwQmFyPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImhvamEtZGUtcnV0YVwiPlxyXG4gICAgICAgICAgICAgICAge21vZG8uZGVtbz88ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxUeXBvZ3JhcGh5Pk1vZG8gZGVtbyA8L1R5cG9ncmFwaHk+XHJcbiAgICAgICAgICAgICAgICAgICAgPEJ1dHRvbiB2YXJpYW50PVwib3V0bGluZWRcIiBjb2xvcj1cInNlY29uZGFyeVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpPT5kaXNwYXRjaChkaXNwYXRjaGVycy5SRUlOSUNJQVJfREVNTyh7fSkpfVxyXG4gICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVpbmljaWFyXHJcbiAgICAgICAgICAgICAgICAgICAgPC9CdXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj46bnVsbH1cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibm9tYnJlLXZlcnNpb25cIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2PkRpcmVjY2nDs24gR2VuZXJhbCBkZSBFc3RhZMOtc3RpY2EgeSBDZW5zb3MgLSBDLkEuQi5BLjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXY+e215LmdldExvY2FsVmFyKCdhcHAtdmVyc2lvbicpfSBzaW5jcm8ge251bV9zaW5jcm99IC0gdmVyc2nDs24ge2FwcFZlcnNpb259PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIHtsaWtlQXIoY2FyZ2FzKS5tYXAoKGNhcmdhLCBpZENhcmdhLCBfLCBwb3NpY2lvbik9PlxyXG4gICAgICAgICAgICAgICAgICAgIDxEZXNwbGVnYXJDYXJnYSBrZXk9e2lkQ2FyZ2F9IGNhcmdhPXtjYXJnYX0gaWRDYXJnYT17aWRDYXJnYX0gcG9zaWNpb249e3Bvc2ljaW9ufSBpbmZvcm1hY2lvbkhkcj17aW5mb3JtYWNpb25IZHJ9IGZlZWRiYWNrUm93VmFsaWRhdG9yPXtmZWVkYmFja1Jvd1ZhbGlkYXRvcn0gcmVzcHVlc3Rhcz17cmVzcHVlc3Rhc30vPlxyXG4gICAgICAgICAgICAgICAgKS5hcnJheSgpfVxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8Lz5cclxuICAgICk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBMaXN0YVRleHRvcyhwcm9wczp7dGV4dG9zOnN0cmluZ1tdfSl7XHJcbiAgICByZXR1cm4gPHVsPlxyXG4gICAgICAgIHtwcm9wcy50ZXh0b3MubWFwKHQ9PjxsaT48VHlwb2dyYXBoeT57dH08L1R5cG9ncmFwaHk+PC9saT4pfVxyXG4gICAgPC91bD47XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBCaWVudmVuaWRhRGVzcGxpZWd1ZShwcm9wczp7bW9kbzpDYXNvU3RhdGVbXCJtb2RvXCJdfSl7XHJcbiAgICB2YXIgZGlzcGF0Y2g9dXNlRGlzcGF0Y2goKTtcclxuICAgIHJldHVybiA8UGFwZXIgY2xhc3NOYW1lPVwiYmllbnZlbmlkYVwiPlxyXG4gICAgICAgIHtwcm9wcy5tb2RvLmRlbW8/XHJcbiAgICAgICAgICAgIDw+XHJcbiAgICAgICAgICAgICAgICA8VHlwb2dyYXBoeT5ERU1PIGRlbCBzaXN0ZW1hIGRlIHJlbGV2YW1pZW50byBkZSBETUVOQ1U8L1R5cG9ncmFwaHk+XHJcbiAgICAgICAgICAgICAgICA8VHlwb2dyYXBoeT5FbiBlc3RhIGRlbW86PC9UeXBvZ3JhcGh5PlxyXG4gICAgICAgICAgICAgICAgPExpc3RhVGV4dG9zIHRleHRvcz17W1xyXG4gICAgICAgICAgICAgICAgICAgIFwiQWxndW5hcyB2aXZpZW5kYXMgYXBhcmVjZW4gcmVsZXZhZGFzIChlbCBib3TDs24gZXN0w6EgZGUgY29sb3IpIHNpcnZlbiBkZSBlamVtcGxvXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgXCJMbyBxdWUgc2UgY2FyZ3VlbiBzZSBndWFyZGFuIGxvY2FsbWVudGUgcGVybyBubyBzZSB0cmFzbWl0ZW4gYSBsYSBiYXNlIGRlIGRhdG9zXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgXCJTZSBwdWVkZSB2b2x2ZXIgYSBsYSB2ZXJzacOzbiBpbmljaWFsIChvIHNlYSBib3JyYXIgbG8gcXVlIHNlIGd1YXJkw7MgbG9jYWxtZW50ZSkgZGVzZGUgbGEgaG9qYSBkZSBydXRhIGJvdG9uIFtyZWluaWNpYXIgZGVtb11cIixcclxuICAgICAgICAgICAgICAgICAgICBcIlRvZGF2w61hIGhheSBjb3NhcyBxdWUgZmFsdGFuIG8gcHVlZGVuIGNhbWJpYXJcIixcclxuICAgICAgICAgICAgICAgIF19IC8+XHJcbiAgICAgICAgICAgIDwvPlxyXG4gICAgICAgICAgICA6PD5cclxuICAgICAgICAgICAgICAgIDxUeXBvZ3JhcGh5PkVuY3Vlc3RhIGRlIFNlcm9wcmV2YWxlbmNpYSBkZSBDT1ZJRC0xOTwvVHlwb2dyYXBoeT5cclxuICAgICAgICAgICAgPC8+XHJcbiAgICAgICAgfVxyXG4gICAgICAgIDxCdXR0b25cclxuICAgICAgICAgICAgdmFyaWFudD1cImNvbnRhaW5lZFwiXHJcbiAgICAgICAgICAgIGNvbG9yPVwic2Vjb25kYXJ5XCJcclxuICAgICAgICAgICAgb25DbGljaz17KCk9PnsgZ290b1NpbmNyb25pemFyKCk7IH19XHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgICA8c3Bhbj5TaW5jcm9uaXphciA8L3NwYW4+IDxJQ09OLlN5bmNBbHQvPlxyXG4gICAgICAgIDwvQnV0dG9uPlxyXG4gICAgICAgIDxCdXR0b25cclxuICAgICAgICAgICAgdmFyaWFudD1cImNvbnRhaW5lZFwiXHJcbiAgICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXHJcbiAgICAgICAgICAgIG9uQ2xpY2s9eygpPT5kaXNwYXRjaChkaXNwYXRjaGVycy5TRVRfT1BDSU9OKHtvcGNpb246J2JpZW52ZW5pZG8nLCB2YWxvcjp0cnVlfSkpfVxyXG4gICAgICAgID5cclxuICAgICAgICAgICAgPHNwYW4+Q29udGludWFyIDwvc3Bhbj4gPElDT04uU2VuZC8+XHJcbiAgICAgICAgPC9CdXR0b24+XHJcbiAgICA8L1BhcGVyPlxyXG59XHJcblxyXG4vL0NPTlRST0wgREUgUEVTVEHDkUFTXHJcbnZhciBhbGxPcGVuZWRUYWJzOntbeDpzdHJpbmddOm51bWJlcn09e307XHJcbnZhciBpbmZvT3BlbmVkVGFicz17XHJcbiAgICBhbGxPcGVuZWRUYWJzLFxyXG4gICAgbXlJZDonY2FsY3VsYW5kby4uLicsXHJcbiAgICBvdGhlclRhYnNOYW1lczonJ1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gT3BlbmVkVGFicygpe1xyXG4gICAgY29uc3QgW3RhYnMsIHNldFRhYnNdID0gdXNlU3RhdGUoaW5mb09wZW5lZFRhYnMub3RoZXJUYWJzTmFtZXMpO1xyXG4gICAgdmFyIHttb2RvRGlyZWN0b30gPSB1c2VTZWxlY3Rvcigoc3RhdGU6Q2Fzb1N0YXRlKT0+KHttb2RvRGlyZWN0bzpzdGF0ZS5vcGNpb25lcy5tb2RvRGlyZWN0b30pKTtcclxuICAgIGNvbnN0IHVwZGF0ZVRhYnNTdGF0dXMgPSBmdW5jdGlvbigpe1xyXG4gICAgICAgIHNldFRhYnMoaW5mb09wZW5lZFRhYnMub3RoZXJUYWJzTmFtZXMpO1xyXG4gICAgfVxyXG4gICAgdXNlRWZmZWN0KCgpPT57XHJcbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ215LXRhYnMnLHVwZGF0ZVRhYnNTdGF0dXMpO1xyXG4gICAgICAgIHJldHVybiAoKSA9PiB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignbXktdGFicycsdXBkYXRlVGFic1N0YXR1cyk7XHJcbiAgICB9LFtdKVxyXG4gICAgcmV0dXJuIG1vZG9EaXJlY3RvP251bGw6KHRhYnMpP1xyXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGFiLWNvdW50ZXIgdGFiLWVycm9yXCI+wqFBVEVOQ0nDk04hIEhheSBtw6FzIGRlIHVuYSB2ZW50YW5hIGFiaWVydGEuIFNlIHB1ZWRlbiBwZXJkZXIgZGF0b3M6IHt0YWJzfTwvZGl2PlxyXG4gICAgOlxyXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGFiLWNvdW50ZXJcIj7inJQ8L2Rpdj5cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIEFwcERtRW5jdSgpe1xyXG4gICAgdmFyIHtmb3JQaywgYmllbnZlbmlkbywgbW9kb30gPSB1c2VTZWxlY3Rvcigoc3RhdGU6Q2Fzb1N0YXRlKT0+KHsuLi5zdGF0ZS5vcGNpb25lcywgLi4uc3RhdGUubW9kbywgLi4uc3RhdGV9KSk7XHJcbiAgICBpZighYmllbnZlbmlkbyl7XHJcbiAgICAgICAgcmV0dXJuIDxCaWVudmVuaWRhRGVzcGxpZWd1ZSBtb2RvPXttb2RvfS8+IFxyXG4gICAgfWVsc2UgaWYoZm9yUGs9PW51bGwpe1xyXG4gICAgICAgIHJldHVybiA8SG9qYURlUnV0YURlc3BsaWVndWUgLz4gXHJcbiAgICB9ZWxzZXtcclxuICAgICAgICByZXR1cm4gPEZvcm11bGFyaW9EZXNwbGllZ3VlIGZvclBrPXtmb3JQa30vPlxyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBQYW50YWxsYUluaWNpYWxTaW5DYXJnYShfcHJvcHM6e30pe1xyXG4gICAgY29uc3QgdXBkYXRlT25saW5lU3RhdHVzID0gZnVuY3Rpb24oKXtcclxuICAgICAgICBzZXRPbmxpbmUod2luZG93Lm5hdmlnYXRvci5vbkxpbmUpO1xyXG4gICAgfVxyXG4gICAgY29uc3QgW29ubGluZSwgc2V0T25saW5lXSA9IHVzZVN0YXRlKHdpbmRvdy5uYXZpZ2F0b3Iub25MaW5lKTtcclxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdvbmxpbmUnLCAgdXBkYXRlT25saW5lU3RhdHVzKTtcclxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdvZmZsaW5lJywgdXBkYXRlT25saW5lU3RhdHVzKTtcclxuICAgIGNvbnN0IHBhcmFncmFwaFN0eWxlcz17Zm9udFNpemU6XCIxLjJyZW1cIiwgZm9udFdlaWdodDo2MDAsIHBhZGRpbmc6IFwiNXB4IDEwcHhcIn07XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICAgIDw+XHJcbiAgICAgICAgICAgIDxBcHBCYXIgcG9zaXRpb249XCJmaXhlZFwiPlxyXG4gICAgICAgICAgICAgICAgPFR5cG9ncmFwaHkgdmFyaWFudD1cImg2XCIgc3R5bGU9e3ttYXJnaW46MjV9fT5cclxuICAgICAgICAgICAgICAgICAgICBEaXNwb3NpdGl2byBzaW4gY2FyZ2FcclxuICAgICAgICAgICAgICAgIDwvVHlwb2dyYXBoeT5cclxuICAgICAgICAgICAgPC9BcHBCYXI+XHJcbiAgICAgICAgICAgIDxtYWluPlxyXG4gICAgICAgICAgICAgICAgPFBhcGVyIHN0eWxlPXt7aGVpZ2h0Oic2MDBweCcsIHBhZGRpbmc6XCIxNXB4XCIsIG1hcmdpblRvcDo3NX19PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHtvbmxpbmU/XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUeXBvZ3JhcGh5IGNvbXBvbmVudD1cInBcIiBzdHlsZT17cGFyYWdyYXBoU3R5bGVzfT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2luY3Jvbml6YXIgZGlzcG9zaXRpdm9cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9e3twYWRkaW5nOic1cHgnfX0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50PVwiY29udGFpbmVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKT0+e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvU2luY3Jvbml6YXIoKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPElDT04uU3luY0FsdC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvVHlwb2dyYXBoeT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VHlwb2dyYXBoeSBjb21wb25lbnQ9XCJwXCIgc3R5bGU9e3BhcmFncmFwaFN0eWxlc30+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm8gaGF5IGNvbmV4acOzbiBhIGludGVybmV0LCBwb3IgZmF2b3IgY29uw6ljdGUgZWwgZGlzcG9zaXRpdm8gYSB1bmEgcmVkIHBhcmEgc2luY3Jvbml6YXIgdW5hIGhvamEgZGUgcnV0YS5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvVHlwb2dyYXBoeT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9QYXBlcj5cclxuICAgICAgICAgICAgPC9tYWluPlxyXG4gICAgICAgIDwvPlxyXG4gICAgKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIFBhbnRhbGxhSW5pY2lhbCgpe1xyXG4gICAgdmFyIHtmb3JQaywgYmllbnZlbmlkbywgbW9kb30gPSB1c2VTZWxlY3Rvcigoc3RhdGU6Q2Fzb1N0YXRlKT0+KHsuLi5zdGF0ZS5vcGNpb25lcywgLi4uc3RhdGUubW9kbywgLi4uc3RhdGV9KSk7XHJcbiAgICBpZighYmllbnZlbmlkbyl7XHJcbiAgICAgICAgcmV0dXJuIDxCaWVudmVuaWRhRGVzcGxpZWd1ZSBtb2RvPXttb2RvfS8+IFxyXG4gICAgfWVsc2UgaWYoZm9yUGs9PW51bGwpe1xyXG4gICAgICAgIHJldHVybiA8SG9qYURlUnV0YURlc3BsaWVndWUgLz4gXHJcbiAgICB9ZWxzZXtcclxuICAgICAgICByZXR1cm4gPEZvcm11bGFyaW9EZXNwbGllZ3VlIGZvclBrPXtmb3JQa30vPlxyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZG1QYW50YWxsYUluaWNpYWxTaW5DYXJnYSgpe1xyXG4gICAgdHJ5e1xyXG4gICAgICAgIGF3YWl0IGxvYWRDU1MoQk9PVFNUUkFQXzVfMV8zX1NSQyk7XHJcbiAgICB9Y2F0Y2goZXJyKXtcclxuICAgICAgICB0aHJvdyhlcnIpXHJcbiAgICB9XHJcbiAgICBSZWFjdERPTS5yZW5kZXIoXHJcbiAgICAgICAgPFBhbnRhbGxhSW5pY2lhbFNpbkNhcmdhLz4sXHJcbiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21haW5fbGF5b3V0JylcclxuICAgIClcclxufVxyXG5cclxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGRlc3BsZWdhckZvcm11bGFyaW9BY3R1YWwob3B0czp7bW9kb0RlbW86Ym9vbGVhbiwgZm9yUGtSYWl6PzpGb3JQa1JhaXosIG9wZXJhdGl2bzpJZE9wZXJhdGl2b30pe1xyXG4gICAgLy8gdHJhZXIgbG9zIG1ldGFkYXRvcyBlbiB1bmEgXCJlc3RydWN0dXJhXCJcclxuICAgIC8vIHRyYWVyIGxvcyBkYXRvcyBkZSBsb2NhbFN0b3JhZ2VcclxuICAgIC8vIHZlcmlmaWNhciBlbCBtYWluIExheW91dFxyXG4gICAgY29uc3Qgc3RvcmUgPSBhd2FpdCBkbVRyYWVyRGF0b3NGb3JtdWxhcmlvKG9wdHMpXHJcbiAgICB0cnl7XHJcbiAgICAgICAgYXdhaXQgbG9hZENTUyhCT09UU1RSQVBfNV8xXzNfU1JDKTtcclxuICAgIH1jYXRjaChlcnIpe1xyXG4gICAgICAgIHRocm93KGVycilcclxuICAgIH1cclxuICAgIFJlYWN0RE9NLnJlbmRlcihcclxuICAgICAgICA8UmVuZGVyUHJpbmNpcGFsIHN0b3JlPXtzdG9yZX0gZGlzcGF0Y2hlcnM9e2Rpc3BhdGNoZXJzfSBtZW5zYWplUmV0b3Jubz17b3B0cy5mb3JQa1JhaXo/XCJWb2x2ZXIgYWwgZm9ybXVsYXJpb1wiOlwiVm9sdmVyIGEgbGEgaG9qYSBkZSBydXRhXCJ9PlxyXG4gICAgICAgICAgICA8T3BlbmVkVGFicy8+XHJcbiAgICAgICAgICAgIDxBcHBEbUVuY3UvPlxyXG4gICAgICAgIDwvUmVuZGVyUHJpbmNpcGFsPixcclxuICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWFpbl9sYXlvdXQnKVxyXG4gICAgKVxyXG59XHJcblxyXG5pZih0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyl7XHJcbiAgICAvLyBAdHMtaWdub3JlIHBhcmEgaGFjZXJsb1xyXG4gICAgd2luZG93LmRlc3BsZWdhckZvcm11bGFyaW9BY3R1YWwgPSBkZXNwbGVnYXJGb3JtdWxhcmlvQWN0dWFsO1xyXG4gICAgLy8gQHRzLWlnbm9yZSBwYXJhIGhhY2VybG9cclxuICAgIHdpbmRvdy5kbVBhbnRhbGxhSW5pY2lhbFNpbkNhcmdhID0gZG1QYW50YWxsYUluaWNpYWxTaW5DYXJnYTtcclxufVxyXG5cclxuXHJcbmZ1bmN0aW9uIGxvYWRJbnN0YW5jZSgpe1xyXG4gICAgaWYodHlwZW9mIEJyb2FkY2FzdENoYW5uZWwgPT09ICd1bmRlZmluZWQnKXtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB2YXIgYmMgPSBuZXcgQnJvYWRjYXN0Q2hhbm5lbCgnY29udGFkb3InKTtcclxuICAgIHZhciBteUlkPVN0cmluZy5mcm9tQ29kZVBvaW50KDEwMCtNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqMTAwMCkpK01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSoxMDApLy8rJy0nK25ldyBEYXRlKCkuZ2V0VGltZSgpO1xyXG4gICAgYWxsT3BlbmVkVGFic1tteUlkXT0xO1xyXG4gICAgaW5mb09wZW5lZFRhYnMubXlJZD1teUlkO1xyXG4gICAgdmFyIGV2ZW50ID0gbmV3IEV2ZW50KCdteS10YWJzJyk7XHJcbiAgICBiYy5vbm1lc3NhZ2U9ZnVuY3Rpb24oZXYpe1xyXG4gICAgICAgIGlmKGV2LmRhdGEucXVlPT0nc295Jyl7XHJcbiAgICAgICAgICAgIGlmKCFhbGxPcGVuZWRUYWJzW2V2LmRhdGEuaWRdKXtcclxuICAgICAgICAgICAgICAgIGFsbE9wZW5lZFRhYnNbZXYuZGF0YS5pZF09MDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBhbGxPcGVuZWRUYWJzW2V2LmRhdGEuaWRdKys7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKGV2LmRhdGEucXVlPT0ndW5sb2FkJyl7XHJcbiAgICAgICAgICAgIGRlbGV0ZSBhbGxPcGVuZWRUYWJzW2V2LmRhdGEuaWRdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZihldi5kYXRhLnF1ZT09J2xvYWQnKXtcclxuICAgICAgICAgICAgYWxsT3BlbmVkVGFic1tldi5kYXRhLmlkXT0xO1xyXG4gICAgICAgICAgICBiYy5wb3N0TWVzc2FnZSh7cXVlOidzb3knLGlkOm15SWR9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaW5mb09wZW5lZFRhYnMub3RoZXJUYWJzTmFtZXM9bGlrZUFyKGFsbE9wZW5lZFRhYnMpLmZpbHRlcigoXyxpZCk9PmlkIT1teUlkKS5qb2luKCcsJyk7XHJcbiAgICAgICAgd2luZG93LmRpc3BhdGNoRXZlbnQoZXZlbnQpO1xyXG4gICAgfTtcclxuICAgIGJjLnBvc3RNZXNzYWdlKHtxdWU6J2xvYWQnLGlkOm15SWR9KTtcclxuICAgIHdpbmRvdy5kaXNwYXRjaEV2ZW50KGV2ZW50KTtcclxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCd1bmxvYWQnLGZ1bmN0aW9uKCl7XHJcbiAgICAgICAgYmMucG9zdE1lc3NhZ2Uoe3F1ZTondW5sb2FkJyxpZDpteUlkfSk7XHJcbiAgICAgICAgd2luZG93LmRpc3BhdGNoRXZlbnQoZXZlbnQpO1xyXG4gICAgfSlcclxuICAgIC8vbW9zdHJhclF1aWVuZXNTb21vcygpO1xyXG59XHJcblxyXG5leHBvcnQgY29uc3Qgc2V0TGlicmVEZXNwbGllZ3VlID0gKGxpYnJlOkxpYnJlRGVzcGxpZWd1ZVR5cGUpPT5MaWJyZURlc3BsaWVndWUgPSBsaWJyZVxyXG5cclxuc2V0TGlicmVEZXNwbGllZ3VlKChwcm9wczp7XHJcbiAgICBrZXk6c3RyaW5nXHJcbiAgICBjYXNpbGxlcm86TGlicmVcclxuICAgIGZvcm11bGFyaW86Rm9ybXVsYXJpb1xyXG4gICAgZm9yUGs6Rm9yUGtcclxufSk9PjxkaXYga2V5PXtwcm9wcy5rZXl9IGlkPXtwcm9wcy5jYXNpbGxlcm8uaWRfY2FzaWxsZXJvfT5lc3RlIGNhc2lsbGVybyBkZWJlIHJlZGVmaW5pcnNlIGVuIGxhIEFQUCBmaW5hbCB5IHN1IHVzbyBlcyBleGNsdXNpdm8gZGVsIMOhcmVhIGluZm9ybcOhdGljYTwvZGl2PilcclxuXHJcbnNldENhbGN1bGFyVmFyaWFibGVzKChyZXNwdWVzdGFzUmFpejpSZXNwdWVzdGFzUmFpeiwgZm9yUGs6Rm9yUGspPT57XHJcbiAgICB0eXBlIENvbmZpZ1BhZHJlID0ge1xyXG4gICAgICAgIHVhUGVyc29uYXM6IElkVW5pZGFkQW5hbGlzaXNcclxuICAgICAgICB2YXJTZXhvUGVyc29uYTogSWRWYXJpYWJsZVxyXG4gICAgICAgIHZhck5vbWJyZVBlcnNvbmE6IElkVmFyaWFibGVcclxuICAgICAgICB2YXJMb3NOb21icmVzOiBJZFZhcmlhYmxlXHJcbiAgICB9XHJcbiAgICB2YXIgZXN0cnVjdHVyYSA9IGdldEVzdHJ1Y3R1cmEoKTtcclxuICAgIHZhciBhdXRvQ2FyZ2FyUGVyc29uYXMgPSAoY29uZmlnUGFkcmU6IENvbmZpZ1BhZHJlICx1YVBhZHJlUGVyc29uYXM6SWRVbmlkYWRBbmFsaXNpcywgZXN0cnVjdHVyYTpFc3RydWN0dXJhKT0+e1xyXG4gICAgICAgIHZhciBsZWVyTm9tYnJlcyA9IChyZXNwdWVzdGFzVUFQYWRyZTpSZXNwdWVzdGFzLCBjb25maWdQYWRyZTpDb25maWdQYWRyZSk9PntcclxuICAgICAgICAgICAgaWYoIXJlc3B1ZXN0YXNVQVBhZHJlW2NvbmZpZ1BhZHJlLnVhUGVyc29uYXNdIHx8IGVtcHR5KHJlc3B1ZXN0YXNVQVBhZHJlW2NvbmZpZ1BhZHJlLnVhUGVyc29uYXNdKSB8fCByZXNwdWVzdGFzVUFQYWRyZVtjb25maWdQYWRyZS51YVBlcnNvbmFzXVswXVtjb25maWdQYWRyZS52YXJTZXhvUGVyc29uYV0gPT0gbnVsbCl7XHJcbiAgICAgICAgICAgICAgICB2YXIgbG9zTm9tYnJlcyA9IHJlc3B1ZXN0YXNVQVBhZHJlW2NvbmZpZ1BhZHJlLnZhckxvc05vbWJyZXNdIGFzIHN0cmluZ1xyXG4gICAgICAgICAgICAgICAgaWYobG9zTm9tYnJlcyAhPSBudWxsKXtcclxuICAgICAgICAgICAgICAgICAgICBpZighcmVzcHVlc3Rhc1VBUGFkcmVbY29uZmlnUGFkcmUudWFQZXJzb25hc10pe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNwdWVzdGFzVUFQYWRyZVtjb25maWdQYWRyZS51YVBlcnNvbmFzXT1bXTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgbG9zTm9tYnJlc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAuc3BsaXQoJywnKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKChub21icmU6c3RyaW5nKT0+bm9tYnJlLnRyaW0oKS5sZW5ndGggPiAwKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAuZm9yRWFjaCgobm9tYnJlOnN0cmluZywgaTpudW1iZXIpPT57XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwdWVzdGFzVUFQYWRyZVtjb25maWdQYWRyZS51YVBlcnNvbmFzXVtpXSA9IHJlc3B1ZXN0YXNVQVBhZHJlW2NvbmZpZ1BhZHJlLnVhUGVyc29uYXNdW2ldIHx8IHt9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcHVlc3Rhc1VBUGFkcmVbY29uZmlnUGFkcmUudWFQZXJzb25hc11baV1bY29uZmlnUGFkcmUudmFyTm9tYnJlUGVyc29uYV0gPSBub21icmUudHJpbSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKGVzdHJ1Y3R1cmEudW5pZGFkZXNfYW5hbGlzaXNbdWFQYWRyZVBlcnNvbmFzXSl7XHJcbiAgICAgICAgICAgIGlmKHVhUGFkcmVQZXJzb25hcyA9PSAndml2aWVuZGFzJyl7XHJcbiAgICAgICAgICAgICAgICBsZWVyTm9tYnJlcyhyZXNwdWVzdGFzUmFpeixjb25maWdQYWRyZSlcclxuICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICBmb3IodmFyIHJlc3B1ZXN0YXNVQVBhZHJlIG9mIGl0ZXJhdG9yKHJlc3B1ZXN0YXNSYWl6W3VhUGFkcmVQZXJzb25hc10/P1tdKSl7XHJcbiAgICAgICAgICAgICAgICAgICAgbGVlck5vbWJyZXMocmVzcHVlc3Rhc1VBUGFkcmUsY29uZmlnUGFkcmUpXHJcbiAgICAgICAgICAgICAgICB9ICAgXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICB2YXIgdWFzSXRlcmFyOiB7XHJcbiAgICAgICAgW2tleSBpbiBJZFVuaWRhZEFuYWxpc2lzXTpDb25maWdQYWRyZVxyXG4gICAgfTsgXHJcbiAgICB2YXIgY29uZmlnRW5jdSA6IENvbmZpZ1BhZHJlID0geyBcclxuICAgICAgICB1YVBlcnNvbmFzOiAncGVyc29uYXMnLFxyXG4gICAgICAgIHZhclNleG9QZXJzb25hOiAnc2V4bycgYXMgSWRWYXJpYWJsZSxcclxuICAgICAgICB2YXJOb21icmVQZXJzb25hOiAnbm9tYnJlJyBhcyBJZFZhcmlhYmxlLFxyXG4gICAgICAgIHZhckxvc05vbWJyZXM6IFwibG9zX25vbWJyZXNcIiBhcyBJZFZhcmlhYmxlXHJcbiAgICB9O1xyXG4gICAgdmFyIGNvbmZpZ1N1cGUgOiBDb25maWdQYWRyZSA9IHsgXHJcbiAgICAgICAgdWFQZXJzb25hczogJ3BlcnNvbmFzX3N1cCcgYXMgSWRVbmlkYWRBbmFsaXNpcyxcclxuICAgICAgICB2YXJTZXhvUGVyc29uYTogJ3NleG9fc3VwJyAgYXMgSWRWYXJpYWJsZSxcclxuICAgICAgICB2YXJOb21icmVQZXJzb25hOiAnbm9tYnJlX3N1cCcgIGFzIElkVmFyaWFibGUsXHJcbiAgICAgICAgdmFyTG9zTm9tYnJlczogXCJub21icmVzX2NvbXBvbmVudGVzX3N1cFwiICBhcyBJZFZhcmlhYmxlXHJcbiAgICB9O1xyXG5cclxuICAgIGlmKGVzdHJ1Y3R1cmEuY29uUmVhSG9nYXIpe1xyXG4gICAgICAgIHVhc0l0ZXJhciA9IHtcclxuICAgICAgICAgICAgaG9nYXJlczogY29uZmlnRW5jdSxcclxuICAgICAgICAgICAgW1wiaG9nYXJlc19zdXBcIiBhcyBJZFVuaWRhZEFuYWxpc2lzXSA6IGNvbmZpZ1N1cGVcclxuICAgICAgICB9XHJcbiAgICAgICAgbGlrZUFyKHVhc0l0ZXJhcikuZm9yRWFjaCgoY29uZmlnUGFkcmUsdWFQYWRyZSk9PntcclxuICAgICAgICAgICAgYXV0b0NhcmdhclBlcnNvbmFzKGNvbmZpZ1BhZHJlLHVhUGFkcmUsIGVzdHJ1Y3R1cmEpXHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgIH0pXHJcbiAgICB9ZWxzZXtcclxuICAgICAgICB2YXIgY29uZmlnUGFkcmVzOiBDb25maWdQYWRyZVtdID0gW2NvbmZpZ0VuY3UsY29uZmlnU3VwZV07XHJcbiAgICAgICAgY29uZmlnUGFkcmVzLmZvckVhY2goKGNvbmZpZ1BhZHJlKT0+e1xyXG4gICAgICAgICAgICBhdXRvQ2FyZ2FyUGVyc29uYXMoY29uZmlnUGFkcmUsJ3ZpdmllbmRhcycsIGVzdHJ1Y3R1cmEpXHJcbiAgICAgICAgfSkgICAgICAgIFxyXG4gICAgfVxyXG4gICAgcmVzcHVlc3Rhc1JhaXoudmRvbWluaW89Z2V0RGF0b3NCeVBhc3MoKS5pbmZvcm1hY2lvbkhkcltmb3JQay52aXZpZW5kYV0udGVtLmRvbWluaW87XHJcbiAgICAvL1RPRE86IE1FSk9SQVIgRU4gQUxHVU4gTU9NRU5UTyBFTCBCT1RPTiBMSVNUT1xyXG4gICAgbGV0IHRvdGFsSCA9IHJlc3B1ZXN0YXNSYWl6Wyd0b3RhbF9oJyBhcyBJZFZhcmlhYmxlXTtcclxuICAgIHJlc3B1ZXN0YXNSYWl6WyckQi5GOlMxJyBhcyBJZFZhcmlhYmxlXSA9IChyZXNwdWVzdGFzUmFpelsnaG9nYXJlcyddIHx8IFtdKS5sZW5ndGggPT0gdG90YWxIPydvayc6bnVsbDtcclxuICAgIGxldCB0b3RhbEhzdXAgPSByZXNwdWVzdGFzUmFpelsndG90YWxfaF9zdXAnIGFzIElkVmFyaWFibGVdO1xyXG4gICAgcmVzcHVlc3Rhc1JhaXpbJyRCLkY6UzFfU1VQJyBhcyBJZFZhcmlhYmxlXSA9IChyZXNwdWVzdGFzUmFpelsnaG9nYXJlc19zdXAnIGFzIElkVW5pZGFkQW5hbGlzaXNdIHx8IFtdKS5sZW5ndGggPT0gdG90YWxIc3VwPydvayc6bnVsbDtcclxufSlcclxuXHJcbndpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgZnVuY3Rpb24oKXtcclxuICAgIGxvYWRJbnN0YW5jZSgpXHJcbn0pXHJcbi8vRklOIENPTlRST0wgUEVTVEHDkUFTXHJcblxyXG5mdW5jdGlvbiBsb2FkQ1NTKGNzc1VSTDpzdHJpbmcsIGlkPzpzdHJpbmcpOlByb21pc2U8dm9pZD57XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKCByZXNvbHZlLCByZWplY3QgKT0+e1xyXG4gICAgICAgIHZhciBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggJ2xpbmsnICk7XHJcbiAgICAgICAgbGluay5yZWwgID0gJ3N0eWxlc2hlZXQnO1xyXG4gICAgICAgIGxpbmsuaHJlZiA9IGNzc1VSTDtcclxuICAgICAgICBsaW5rLmlkID0gaWQgfHwgY3NzVVJMO1xyXG4gICAgICAgIGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoIGxpbmsgKTtcclxuICAgICAgICBsaW5rLm9ubG9hZCA9ICgpPT57IFxyXG4gICAgICAgICAgICByZXNvbHZlKCk7IFxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgdHJhZSAke2Nzc1VSTH1gKTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIGxpbmsub25lcnJvcj0oZXJyKT0+e1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygnZXJyb3IgY2FyZ2FuZG8gZWwgZXN0aWxvJywgZXJyKVxyXG4gICAgICAgICAgICByZWplY3QobmV3IEVycm9yKGBwcm9ibGVtYSBjYXJnYW5kbyBlc3RpbG8gJHtjc3NVUkx9YCkpXHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHJlbW92ZUNTU0J5SWQoaWQ6c3RyaW5nKXtcclxuICAgIHZhciBsaW5rTm9kZSA9ICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7XHJcbiAgICBsaW5rTm9kZT8ucGFyZW50Tm9kZT8ucmVtb3ZlQ2hpbGQobGlua05vZGUpO1xyXG59XHJcblxyXG5jb25zdCBCT09UU1RSQVBfNV8xXzNfU1JDID0gJ2Nzcy9ib290c3RyYXAubWluLmNzcyc7Il19