dmencu 3.0.6 → 3.0.7

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 (45) hide show
  1. package/dist/client/unlogged/abrir-formulario.js +1 -1
  2. package/dist/client/unlogged/css/bootstrap.min.css +6 -6
  3. package/dist/client/unlogged/render-config.js +1 -1
  4. package/dist/client/unlogged/render-formulario.js +9 -5
  5. package/dist/client/unlogged/render-formulario.tsx +46 -43
  6. package/dist/client/unlogged/render-init.js +1 -1
  7. package/dist/client/unlogged/tsconfig.json +14 -14
  8. package/dist/server/server/app-dmencu.d.ts +516 -863
  9. package/dist/server/server/table-area_enc_proximas.js +1 -1
  10. package/dist/server/server/table-barrios.js +1 -1
  11. package/dist/server/server/table-encuestadores.js +7 -7
  12. package/dist/server/server/table-fracciones.js +1 -1
  13. package/dist/server/server/table-hogares.js +1 -1
  14. package/dist/server/server/table-hogares_sup.js +1 -1
  15. package/dist/server/server/table-manzanas.js +1 -1
  16. package/dist/server/server/table-parametros.js +1 -1
  17. package/dist/server/server/table-personal.js +7 -7
  18. package/dist/server/server/table-personal_rol.js +7 -7
  19. package/dist/server/server/table-personas.js +1 -1
  20. package/dist/server/server/table-personas_sup.js +1 -1
  21. package/dist/server/server/table-radios.js +1 -1
  22. package/dist/server/server/table-recepcionistas.js +1 -1
  23. package/dist/server/server/table-visitas.js +1 -1
  24. package/dist/server/server/table-visitas_sup.js +1 -1
  25. package/dist/server/server/table-viviendas.js +1 -1
  26. package/dist/server/server/types-dmencu.js +1 -1
  27. package/dist/unlogged/unlogged/abrir-formulario.js +1 -1
  28. package/dist/unlogged/unlogged/css/bootstrap.min.css +6 -6
  29. package/dist/unlogged/unlogged/render-config.js +1 -1
  30. package/dist/unlogged/unlogged/render-formulario.js +9 -5
  31. package/dist/unlogged/unlogged/render-formulario.tsx +46 -43
  32. package/dist/unlogged/unlogged/render-init.js +1 -1
  33. package/dist/unlogged/unlogged/tsconfig.json +14 -14
  34. package/install/actualizar-2023-05-14.sql +38 -38
  35. package/install/actualizar_inconvar.sql +28 -28
  36. package/install/agregados_tem.sql +4 -4
  37. package/install/asignar_desasignar_tareas_tem_trg.sql +43 -43
  38. package/install/metadatos/permisos.tab +11 -11
  39. package/install/metadatos/roles.tab +10 -10
  40. package/install/metadatos/roles_permisos.tab +94 -94
  41. package/install/metadatos/tipovar.tab +9 -9
  42. package/install/sincro_tareas_areas_tareas_tem_trg.sql +29 -29
  43. package/install/usuarios_trg.sql +41 -41
  44. package/install/validar_tareas_tem_trg.sql +67 -67
  45. package/package.json +91 -91
@@ -358,7 +358,11 @@ var __rest = (this && this.__rest) || function (s, e) {
358
358
  React.createElement(render_general_1.ICON.DeleteForever, null))) : null,
359
359
  casillero.var_name ? (ns_nc => React.createElement("div", null,
360
360
  React.createElement(exports.Button, { id: "nsnc-pregunta-" + casillero.var_name, "mi-variable": casillero.var_name, variant: "outlined", className: "boton-pregunta-nsnc", onClick: () => {
361
- (0, bypass_formulario_2.dispatchByPass)(bypass_formulario_2.accion_registrar_respuesta, { respuesta: ns_nc, variable: casillero.var_name, forPk: forPk });
361
+ var _a, _b;
362
+ var { siguienteVariable } = (0, bypass_formulario_2.dispatchByPass)(bypass_formulario_2.accion_registrar_respuesta, { respuesta: ns_nc, variable: casillero.var_name, forPk: forPk });
363
+ if (siguienteVariable) {
364
+ enfocarElementoDeVariable((_b = (_a = casillero.especial) === null || _a === void 0 ? void 0 : _a.scrollTo) !== null && _b !== void 0 ? _b : siguienteVariable);
365
+ }
362
366
  } }, "NS/NC")))((_b = casillero.valor_ns_nc) !== null && _b !== void 0 ? _b : -9) : null)),
363
367
  React.createElement("div", { className: "nombre-div" },
364
368
  React.createElement("div", { className: "nombre" },
@@ -478,7 +482,7 @@ var __rest = (this && this.__rest) || function (s, e) {
478
482
  } },
479
483
  React.createElement("div", { className: "input-campo" },
480
484
  React.createElement(TextField, { id: `var-${pregunta.var_name || ''}`, disabled: disabled || ((_a = pregunta.especial) === null || _a === void 0 ? void 0 : _a.gps), className: "variable",
481
- //var-length={pregunta.longitud}
485
+ //var-length={pregunta.longitud}
482
486
  fullWidth: true, inputProps: inputProps, type: (_b = pregunta.despliegueTipoInput) !== null && _b !== void 0 ? _b : (0, render_general_1.adaptarTipoVarCasillero)(pregunta.tipovar), onFocus: (_event) => setEditando(true), onBlur: (_event, valor) => {
483
487
  onChange(valor);
484
488
  setEditando(false);
@@ -1199,7 +1203,7 @@ var __rest = (this && this.__rest) || function (s, e) {
1199
1203
  var { modoDespliegue } = useSelectorVivienda(forPk);
1200
1204
  if (multiple) {
1201
1205
  // TODO: GENERALIZAR
1202
- // @ts-ignore
1206
+ // @ts-ignore
1203
1207
  // lista=respuestas.personas.map((_persona, i)=>(
1204
1208
  // {forPk:{...forPk, persona:i+1}, key:i+1, multiple:true}
1205
1209
  // ))
@@ -1450,7 +1454,7 @@ var __rest = (this && this.__rest) || function (s, e) {
1450
1454
  (0, bypass_formulario_2.registrarElemento)({
1451
1455
  id, direct: true,
1452
1456
  fun: (r, _feedbackForm, elemento, feedbackAll, _estructura) => {
1453
- //pregunto si es la misma vivienda porque la funcion se dispara
1457
+ //pregunto si es la misma vivienda porque la funcion se dispara
1454
1458
  //con todas las combinaciones de respuestas para cada forPk
1455
1459
  //@ts-ignore vivienda existe
1456
1460
  if (r[estructura.pkAgregadaUaPpal] == forPk[estructura.pkAgregadaUaPpal]) {
@@ -2042,4 +2046,4 @@ var __rest = (this && this.__rest) || function (s, e) {
2042
2046
  }
2043
2047
  const BOOTSTRAP_5_1_3_SRC = 'css/bootstrap.min.css';
2044
2048
  });
2045
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVuZGVyLWZvcm11bGFyaW8uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdW5sb2dnZWQvcmVuZGVyLWZvcm11bGFyaW8udHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBZ0hBLHNDQU9DO0lBeUpELDhCQTZCQztJQTZyREQsNEJBS0M7SUFpTUQsb0RBU0M7SUFFRCxvR0FPQztJQUVELG9DQWVDO0lBZUQsMENBcUJDO0lBRUQsZ0RBMEJDO0lBRUQsd0RBOEdDO0lBdUJELDBEQW9GQztJQVFELHdEQXlEQztJQUVELGdEQW9HQztJQUtELGtFQVdDO0lBa0NELGtDQUlDO0lBVUQsZ0NBY0M7SUFFRCw4QkFxQ0M7SUFFRCw4REFrQkM7SUE5eEZELCtCQUErQjtJQUMvQixzQ0FBc0M7SUFDdEMscURBUTBCO0lBQzFCLG1DQWdCaUI7SUFDakIsMkRBaUI0QjtJQUM1Qix5REFHNEI7SUFDNUIsaUNBQTRDO0lBQzVDLDZDQUF1RDtJQUN2RCxxQ0FBMkM7SUFDM0MsK0NBQXlEO0lBQ3pELDJDQUF3QztJQUV4Qyw0Q0FTdUI7SUFHdkIsMkRBYzRCO0lBRTVCLDJDQUEyQztJQUMzQyxtREFBc0Y7SUFFdEYsaUVBQWlFO0lBQ2pFLHdFQUF3RTtJQUN4RSxJQUFBLG9DQUFvQixFQUFDLFNBQWUsK0JBQStCOztZQUMvRCxJQUFJLFlBQVksR0FBRyxJQUFBLCtCQUFlLEdBQUUsQ0FBQztZQUNyQyxNQUFNLFVBQVUsR0FBRyxNQUFNLFlBQVksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN2RCxNQUFNLEtBQUssR0FBRyxNQUFNLFlBQVksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUM3QyxJQUFHLFVBQVUsSUFBSSxLQUFLLEVBQUMsQ0FBQztnQkFDcEIsSUFBQSxpQ0FBYSxFQUFDLFVBQVUsQ0FBQyxDQUFDO2dCQUMxQixJQUFBLGtDQUFjLEVBQUMsS0FBSyxDQUFDLENBQUM7WUFDMUIsQ0FB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LENBQUMsQ0FBQztZQUNoQyxJQUFJLENBQUMsTUFBTSxHQUFHLEdBQUcsRUFBRTtnQkFDZixPQUFPLEVBQUUsQ0FBQztnQkFDVixPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsTUFBTSxFQUFFLENBQUMsQ0FBQztZQUNsQyxDQUFDLENBQUM7WUFDRixJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsR0FBRyxFQUFFLEVBQUU7Z0JBQ25CLE9BQU8sQ0FBQyxHQUFHLENBQUMsMEJBQTBCLEVBQUUsR0FBRyxDQUFDLENBQUE7Z0JBQzVDLE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBQyw0QkFBNEIsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFBO1lBQzNELENBQUMsQ0FBQTtRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELFNBQVMsYUFBYSxDQUFDLEVBQVU7O1FBQzdCLElBQUksUUFBUSxHQUFHLFFBQVEsQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDM0MsTUFBQSxRQUFRLGFBQVIsUUFBUSx1QkFBUixRQUFRLENBQUUsVUFBVSwwQ0FBRSxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUVELE1BQU0sbUJBQW1CLEdBQUcsdUJBQXVCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcclxuaW1wb3J0ICogYXMgUmVhY3RET00gZnJvbSBcInJlYWN0LWRvbVwiO1xyXG5pbXBvcnQge1xyXG4gICAgUmVuZGVyUHJpbmNpcGFsLFxyXG4gICAgYWRhcHRhclRpcG9WYXJDYXNpbGxlcm8sXHJcbiAgICBJQ09OLFxyXG4gICAgc2Nyb2xsVG9Ub3AsXHJcbiAgICBtYXRlcmlhbElvSWNvbnNTdmdQYXRoLFxyXG4gICAgdXNlT25saW5lU3RhdHVzLFxyXG4gICAgUmVuZGVyaXphZG9ySlNPTixcclxufSBmcm9tIFwiLi9yZW5kZXItZ2VuZXJhbFwiO1xyXG5pbXBvcnQge1xyXG4gICAgQmxvcXVlLCBCb3RvbkZvcm11bGFyaW8sXHJcbiAgICBDYXNpbGxlcm9CYXNlLCBDYXNvU3RhdGUsIENvbmp1bnRvUHJlZ3VudGFzLCBDb25zaXN0ZW5jaWEsXHJcbiAgICBFc3RhZG9DYXJnYSwgRmlsdHJvLCBGb3JQaywgRm9yUGtSYWl6LCBGb3JtdWxhcmlvLFxyXG4gICAgSWRGb3JtdWxhcmlvLCBJZFByZWd1bnRhLCBJZFRhcmVhLCBJZFZhcmlhYmxlLCBJbmZvRm9ybXVsYXJpbyxcclxuICAgIE1vZG9EZXNwbGllZ3VlLFxyXG4gICAgT3BjaW9uLCBPcGNpb25NdWx0aXBsZSwgUGxhaW5Gb3JQayxcclxuICAgIFByZWd1bnRhLCBQcmVndW50YUNvbk9wY2lvbmVzLCBQcmVndW50YVNpbXBsZSxcclxuICAgIFJlc3B1ZXN0YXMsIFJlc3B1ZXN0YUxhc1VBLCBSZXNwdWVzdGFzUmFpeiwgVmFsb3IsIFRFTSwgSWRDYXJnYSwgQ2FyZ2EsIElkRmluLCBJZFVuaWRhZEFuYWxpc2lzLFxyXG4gICAgdG9QbGFpbkZvclBrLFxyXG4gICAgSWRDYXNpbGxlcm8sXHJcbiAgICBQcmVndW50YUNvblNpTm8sXHJcbiAgICBUZXh0bywgRXN0cnVjdHVyYSwgSW5mb3JtYWNpb25IZHIsIENvbmZpZ3VyYWNpb25Tb3J0ZW9Gb3JtdWxhcmlvLCBSZXN1bWVuRXN0YWRvLCBJZE9wZXJhdGl2bywgSWRFbmMsIExpYnJlLFxyXG4gICAgaXRlcmF0b3IsIGVtcHR5LCBDb25maWd1cmFjaW9uSGFiaWxpdGFyQm90b25Gb3JtdWxhcmlvLFxyXG4gICAgUE1hdHJpeixcclxuICAgIE1vZG9ETSxcclxufSBmcm9tIFwiLi90aXBvc1wiO1xyXG5pbXBvcnQge1xyXG4gICAgYWNjaW9uX2FicmlyX2Zvcm11bGFyaW8sXHJcbiAgICBhY2Npb25fYm9ycmFyX2Zvcm11bGFyaW8sXHJcbiAgICBjYWxjdWxhckFjdHVhbEJGLFxyXG4gICAgY2FsY3VsYXJEaXNhYmxlZEJGLFxyXG4gICAgY2FsY3VsYXJQZXJtaXRlQm9ycmFyQkYsXHJcbiAgICBjYWxjdWxhclJlc3VtZW5WaXZpZW5kYSxcclxuICAgIGNyZWFyRW5jdWVzdGEsXHJcbiAgICBoYXlEYXRvc0J5UGFzc0FsbWFjZW5hZG9zLFxyXG4gICAgZ2V0RGF0b3NCeVBhc3MsXHJcbiAgICBnZXRGb3JtdWxhcmlvc0ZvclZhbHVlUGtSYWl6LFxyXG4gICAgZ2V0TWFpbkZvcm1Gb3JWaXZpZW5kYSxcclxuICAgIGludGVudGFyQmFja3VwLFxyXG4gICAgcmVzcHVlc3Rhc0ZvclBrLFxyXG4gICAgc2V0Q2FsY3VsYXJWYXJpYWJsZXMsXHJcbiAgICBzZXREYXRvc0J5UGFzcyxcclxuICAgIHNldEVzdHJ1Y3R1cmFcclxufSBmcm9tIFwiLi9ieXBhc3MtZm9ybXVsYXJpb1wiXHJcbmltcG9ydCB7XHJcbiAgICBjcmVhclN0b3JlRm9ybXVsYXJpbywgZGlzcGF0Y2hlcnMsXHJcbiAgICBnb3RvQ29uc2lzdGlyLFxyXG59IGZyb20gXCIuL3JlZHV4LWZvcm11bGFyaW9cIjtcclxuaW1wb3J0IHsgdXNlU3RhdGUsIHVzZUVmZmVjdCB9IGZyb20gXCJyZWFjdFwiO1xyXG5pbXBvcnQgeyB1c2VTZWxlY3RvciwgdXNlRGlzcGF0Y2ggfSBmcm9tIFwicmVhY3QtcmVkdXhcIjtcclxuaW1wb3J0IHsgc3RyaWN0IGFzIGxpa2VBciB9IGZyb20gXCJsaWtlLWFyXCI7XHJcbmltcG9ydCB7IHNsZWVwLCBjb2FsZXNjZSwgZGF0ZXRpbWUgfSBmcm9tIFwiYmVzdC1nbG9iYWxzXCI7XHJcbmltcG9ydCB7IHVuZXhwZWN0ZWQgfSBmcm9tIFwiY2FzdC1lcnJvclwiO1xyXG5cclxuaW1wb3J0IHtcclxuICAgIEFwcEJhciwgQnV0dG9uR3JvdXAsIENoZWNrYm94LFxyXG4gICAgRGlhbG9nLCBEaWFsb2dBY3Rpb25zLCBEaWFsb2dDb250ZW50LCBEaWFsb2dDb250ZW50VGV4dCxcclxuICAgIERpYWxvZ1RpdGxlLCBEaXZpZGVyLCBGYWIsXHJcbiAgICBJY29uLFxyXG4gICAgTGlzdEl0ZW1JY29uLFxyXG4gICAgTGlzdEl0ZW1UZXh0LFxyXG4gICAgTWVudSwgTWVudUl0ZW0sIFBhcGVyLCBQb3BvdmVyLFxyXG4gICAgVGFibGUsIFRhYmxlQm9keSwgVGFibGVDZWxsLCBUYWJsZUhlYWQsIFRhYmxlUm93LCBUb29sYmFyXHJcbn0gZnJvbSBcIkBtdWkvbWF0ZXJpYWxcIjtcclxuaW1wb3J0IHsgRXN0YWRvVmFyaWFibGUsIEZvcm1TdHJ1Y3R1cmVTdGF0ZSB9IGZyb20gXCJyb3ctdmFsaWRhdG9yXCI7XHJcblxyXG5pbXBvcnQge1xyXG4gICAgcmVnaXN0cmFyRWxlbWVudG8sIHNldEF0dHJEaXN0aW50bywgc2V0VmFsb3JEaXN0aW50bywgZGlzcGF0Y2hCeVBhc3MsXHJcbiAgICBnZXREaXJ0eSwgZ2V0RmVlZGJhY2tSb3dWYWxpZGF0b3IsXHJcbiAgICBnZXRGdW5jaW9uSGFiaWxpdGFyLFxyXG4gICAgZ2V0RXN0cnVjdHVyYSxcclxuICAgIGRlZk9wZXJhdGl2byxcclxuICAgIHZvbGNhZG9JbmljaWFsRWxlbWVudG9zUmVnaXN0cmFkb3MsXHJcbiAgICBudW1iZXJPclN0cmluZ0luY0lmQXJyYXksXHJcbiAgICBjYWxjdWxhckVsZW1lbnRvRW5mb2NhZG8sXHJcbiAgICBhY2Npb25fcmVnaXN0cmFyX3Jlc3B1ZXN0YSxcclxuICAgIGFjY2lvbl9pZF9wcmVndW50YSxcclxuICAgIGFjY2lvbl9hZ3JlZ2FyX2Zvcm11bGFyaW8sXHJcbiAgICBOT19DQU1CSUFSX19WRVJJRklDQVJfU0lfRVNfTkVDRVNBUklPLFxyXG4gICAgTk9fQ0FNQklBUl9fU09MT19UUkFFUl9TVEFUVVNcclxufSBmcm9tIFwiLi9ieXBhc3MtZm9ybXVsYXJpb1wiXHJcblxyXG5pbXBvcnQgeyBodG1sLCBIdG1sVGFnIH0gZnJvbSBcImpzLXRvLWh0bWxcIjtcclxuaW1wb3J0IHsgRm9ybVJlbmRlcmVyLCBnZXRGb3JtUmVuZGVyZXIsIHJlZ2lzdHJhckNhcmdhck1vdG9yIH0gZnJvbSBcIi4vcmVuZGVyLWNvbmZpZ1wiO1xyXG5cclxuLy8gUmVnaXN0cmEgbGEgaW1wbGVtZW50YWNpw7NuIGRlIGNhcmdhck1vdG9yIGFsIGNhcmdhciBlbCBtw7NkdWxvLlxyXG4vLyBFc3RvIGV2aXRhIGxhIGRlcGVuZGVuY2lhIGNpcmN1bGFyIHJlbmRlci1jb25maWcg4oaQIGJ5cGFzcy1mb3JtdWxhcmlvLlxyXG5yZWdpc3RyYXJDYXJnYXJNb3Rvcihhc3luYyBmdW5jdGlvbiBjYXJnYXJFc3RydWN0dXJhWURhdG9zRW5NZW1vcmlhKCkge1xyXG4gICAgdmFyIGZvcm1SZW5kZXJlciA9IGdldEZvcm1SZW5kZXJlcigpO1xyXG4gICAgY29uc3QgZXN0cnVjdHVyYSA9IGF3YWl0IGZvcm1SZW5kZXJlci5sZWVyRXN0cnVjdHVyYSgpO1xyXG4gICAgY29uc3QgZGF0b3MgPSBhd2FpdCBmb3JtUmVuZGVyZXIubGVlckRhdG9zKCk7XHJcbiAgICBpZihlc3RydWN0dXJhICYmIGRhdG9zKXtcclxuICAgICAgICBzZXRFc3RydWN0dXJhKGVzdHJ1Y3R1cmEpO1xyXG4gICAgICAgIHNldERhdG9zQnlQYXNzKGRhdG9zKTtcclxuICAgIH1cclxufSk7XHJcblxyXG5jb25zdCBERUxBWV9TQ1JPTExfMyA9IDUwO1xyXG5cclxuZnVuY3Rpb24gYnJlYWtlYWJsZVRleHQodGV4dDogc3RyaW5nIHwgbnVsbCk6IHN0cmluZyB8IG51bGw7XHJcbmZ1bmN0aW9uIGJyZWFrZWFibGVUZXh0KHRleHQ6IHN0cmluZyB8IG51bGwsIGRpY2Npb25hcmlvPzogeyBbY2xhdmU6IHN0cmluZ106IFJlYWN0LlJlYWN0Tm9kZSB9KSB7XHJcbiAgICBpZiAodHlwZW9mIHRleHQgIT0gXCJzdHJpbmdcIikgcmV0dXJuIG51bGw7XHJcbiAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKC9cXC8vZywgXCIvXFx1MjA2M1wiKS5yZXBsYWNlKC9cXC9cXHUyMDYzKFxcdylcXGIvZywgJy8kMScpO1xyXG4gICAgdGV4dCA9IHRleHQucmVwbGFjZSgvX19fKi9nLCAodG9kbykgPT4gYFske3RvZG99XWApLnJlcGxhY2UoL1xcQFxcdytcXEAvZywgKHRvZG8pID0+IGBbJHt0b2RvfV1gKTtcclxuICAgIGlmICghZGljY2lvbmFyaW8gfHwgdHJ1ZSkgcmV0dXJuIHRleHQ7XHJcbiAgICAvKlxyXG4gICAgcmV0dXJuIDxzcGFuPntwYXJ0ZXMubWFwKChwYXJ0ZTpzdHJpbmcsIGk6bnVtYmVyKSA9PiA8c3BhbiBzdHlsZT17aSUyPT0xP3t0ZXh0RGVjb3JhdGlvbjpcInVuZGVybGluZVwifTp7fX0+IHtwYXJ0ZStcIiBcIn0gPC9zcGFuPil9PC9zcGFuPlxyXG4gICAgKi9cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldEJGVmFyTmFtZXMoc2FsdG86IHN0cmluZyB8IG51bGwpIHtcclxuICAgIGNvbnN0IGFybW9Ob21TYWx0byA9IHNhbHRvPy5zdWJzdHJpbmcoMCwgMikgPT0gJ0Y6JyA/IHNhbHRvLnNsaWNlKDIpIDogc2FsdG87XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIGxpc3RvOiAnJEIuRjonICsgYXJtb05vbVNhbHRvIGFzIElkVmFyaWFibGUsXHJcbiAgICAgICAgYWdyZWdhcjogJyRCLkY6JyArIGFybW9Ob21TYWx0byArICdfYWdyZWdhcicgYXMgSWRWYXJpYWJsZSxcclxuICAgICAgICBpZEZvcm11bGFyaW86ICdGOicgKyBhcm1vTm9tU2FsdG8gYXMgSWRGb3JtdWxhcmlvXHJcbiAgICB9O1xyXG59XHJcblxyXG5jb25zdCBWRVJfRE9NSU5JTyA9IGZhbHNlOyAvLyBlbCBlbmN1ZXN0YWRvciBubyBuZWNlc2l0YSB2ZXIgZWwgZG9taW5pbyBlbiBjYWRhIGVuY3Vlc3RhIHBvcnF1ZSBlbCBkb21pbmlvIGRlcGVuZGUgZGVsIMOhcmVhIHkgc2UgZGVkdWNlIGRlbCBwcmltZXIgZMOtZ2l0byBkZWwgbsO6bWVybyBkZSBlbmN1ZXN0YVxyXG4vLyBubyBwb25lciBWRVJfRE9NSU5JTyBlbiB0cnVlLCBjYW1iaWFyIHBvciB1bmEgdmFyaWFibGUgcXVlIHNlIGZpamUgc2kgZWwgRE0gZXN0w6EgZW4gbW9kbyBwcnVlYmEgbyBlbiBtb2RvIFwiZGlzZcOxbyBjb25jZXB0dWFsXCJcclxuXHJcbmNvbnN0IElEX0JPVE9OX1ZPTFZFUl9IRFIgPSAnYm90b24tdm9sdmVyLWhkcic7XHJcbmNvbnN0IElEX0JPVE9OX0NFUlJBUiA9ICdib3Rvbi1jZXJyYXItZW5jdWVzdGEnO1xyXG5cclxudmFyIGRlYmVTYWx0YXI6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbndpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgKCkgPT4ge1xyXG4gICAgLypcclxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgKGV2OktleWJvYXJkRXZlbnQpPT57XHJcbiAgICAgICAgZGViZVNhbHRhciA9IGV2LmtleSA9PSAnRW50ZXInIHx8IGV2LmtleUNvZGUgPT0gMTM7XHJcbiAgICB9KVxyXG4gICAgKi9cclxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcclxuICAgICAgICBkZWJlU2FsdGFyID0gZmFsc2U7XHJcbiAgICB9KVxyXG59KVxyXG5cclxuLy8gLypcclxuXHJcbnR5cGUgQ29tbW9uQXR0cmlidXRlcyA9IHsgY2xhc3NOYW1lPzogc3RyaW5nLCBzdHlsZT86IFJlYWN0LkNTU1Byb3BlcnRpZXMsIGlkPzogc3RyaW5nLCB0YWJJbmRleD86IG51bWJlciB9IC8vIENTU1Byb3BlcnRpZXNcclxudHlwZSBDb2xvclZhbHVlcyA9ICdwcmltYXJ5JyB8ICdzZWNvbmRhcnknIHwgJ2RlZmF1bHQnIHwgJ2luaGVyaXQnIHwgJ3N1Y2Nlc3MnXHJcblxyXG5leHBvcnQgdHlwZSBMaWJyZURlc3BsaWVndWVUeXBlID0gKHByb3BzOiB7XHJcbiAgICBrZXk6IHN0cmluZ1xyXG4gICAgY2FzaWxsZXJvOiBMaWJyZVxyXG4gICAgZm9ybXVsYXJpbzogRm9ybXVsYXJpb1xyXG4gICAgZm9yUGs6IEZvclBrXHJcbn0pID0+IEpTWC5FbGVtZW50O1xyXG5cclxudmFyIExpYnJlRGVzcGxpZWd1ZTogTGlicmVEZXNwbGllZ3VlVHlwZVxyXG5cclxuZXhwb3J0IGNvbnN0IEJ1dHRvbiA9ICh7IHZhcmlhbnQsIG9uQ2xpY2ssIGRpc2FibGVkLCBjaGlsZHJlbiwgY2xhc3NOYW1lLCBjb2xvciwgc2l6ZSxcclxuICAgIGRpc2FibGVFbGV2YXRpb24sIGRpc2FibGVGb2N1c1JpcHBsZSwgZGlzYWJsZVJpcHBsZSwgdHlwZSxcclxuICAgIC4uLm90aGVyXHJcbn06IHtcclxuICAgIHZhcmlhbnQ/OiBzdHJpbmcsXHJcbiAgICBjb2xvcj86IENvbG9yVmFsdWVzLFxyXG4gICAgb25DbGljaz86IFJlYWN0Lk1vdXNlRXZlbnRIYW5kbGVyPEhUTUxCdXR0b25FbGVtZW50PiwgLy8gIChldmVudDpNb3VzZUV2ZW50LyogPEhUTUxCdXR0b25FbGVtZW50LCBNb3VzZUV2ZW50PiovKT0+dm9pZCxcclxuICAgIGRpc2FibGVkPzogYm9vbGVhblxyXG4gICAgY2hpbGRyZW46IGFueSxcclxuICAgIGNsYXNzTmFtZT86IHN0cmluZyxcclxuICAgIHNpemU/OiAnc21hbGwnLFxyXG4gICAgdHlwZT86ICdidXR0b24nIHwgJ3N1Ym1pdCcgfCAncmVzZXQnLFxyXG4gICAgZGlzYWJsZUVsZXZhdGlvbj86IGFueSwgZGlzYWJsZUZvY3VzUmlwcGxlPzogYW55LCBkaXNhYmxlUmlwcGxlPzogYW55LFxyXG59ICYgQ29tbW9uQXR0cmlidXRlcykgPT4gPGJ1dHRvblxyXG4gICAgey4uLm90aGVyfVxyXG4gICAgY2xhc3NOYW1lPXtgYnRuIGJ0biR7dmFyaWFudCA9PSAnY29udGFpbmVkJyA/ICcnIDogJy0nICsgKHZhcmlhbnQgPT0gJ291dGxpbmVkJyA/ICdvdXRsaW5lJyA6IHZhcmlhbnQpfS0keyhjb2xvciA9PSAnZGVmYXVsdCcgfHwgY29sb3IgPT0gJ2luaGVyaXQnID8gJ3NlY29uZGFyeScgOiBjb2xvciA9PSAnc2Vjb25kYXJ5JyA/ICdkYW5nZXInIDogY29sb3IpIHx8ICdzZWNvbmRhcnknfSAke2NsYXNzTmFtZSB8fCAnJ30gJHtzaXplID09ICdzbWFsbCcgPyAnYnRuLXNtJyA6ICcnfWB9XHJcbiAgICBkaXNhYmxlZD17ZGlzYWJsZWR9XHJcbiAgICB0eXBlPXt0eXBlfVxyXG4gICAgb25DbGljaz17b25DbGlja31cclxuPntjaGlsZHJlbn08L2J1dHRvbj47XHJcblxyXG5jb25zdCBzdHlsZVRvQ3NzID0gKHN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzIHwgc3RyaW5nIHwgdW5kZWZpbmVkKTogc3RyaW5nIHwgdW5kZWZpbmVkID0+IHtcclxuICAgIGlmICh0eXBlb2Ygc3R5bGUgPT09ICdzdHJpbmcnIHx8IHN0eWxlID09IG51bGwpIHJldHVybiBzdHlsZTtcclxuICAgIHJldHVybiBPYmplY3QuZW50cmllcyhzdHlsZSkubWFwKChbaywgdl0pID0+XHJcbiAgICAgICAgYCR7ay5yZXBsYWNlKC9bQS1aXS9nLCBtID0+IFwiLVwiICsgbS50b0xvd2VyQ2FzZSgpKX06JHt2fWBcclxuICAgICkuam9pbignOycpO1xyXG59XHJcblxyXG5jb25zdCBCdXR0b24yID0gKHsgdmFyaWFudCwgb25DbGljaywgZGlzYWJsZWQsIGNoaWxkcmVuLCBjbGFzc05hbWUsIGNvbG9yLCBzaXplLCBzdHlsZSwgLi4ub3RoZXIgfToge1xyXG4gICAgdmFyaWFudD86IHN0cmluZyxcclxuICAgIGNvbG9yPzogQ29sb3JWYWx1ZXMsXHJcbiAgICBvbkNsaWNrPzogKCkgPT4gdm9pZCxcclxuICAgIGRpc2FibGVkPzogYm9vbGVhblxyXG4gICAgY2hpbGRyZW46IGFueSxcclxuICAgIGNsYXNzTmFtZT86IHN0cmluZyxcclxuICAgIHNpemU/OiAnc21hbGwnLFxyXG4gICAgc3R5bGU/OiBSZWFjdC5DU1NQcm9wZXJ0aWVzIHwgc3RyaW5nLFxyXG4gICAgJGF0dHJzPzoge31cclxufSAmIENvbW1vbkF0dHJpYnV0ZXMpID0+IGh0bWwuYnV0dG9uKHtcclxuICAgIC4uLm90aGVyLFxyXG4gICAgc3R5bGU6IHN0eWxlVG9Dc3Moc3R5bGUpLFxyXG4gICAgY2xhc3M6IGBidG4gYnRuJHt2YXJpYW50ID09ICdjb250YWluZWQnID8gJycgOiAnLScgKyAodmFyaWFudCA9PSAnb3V0bGluZWQnID8gJ291dGxpbmUnIDogdmFyaWFudCl9LSR7KGNvbG9yID09ICdkZWZhdWx0JyB8fCBjb2xvciA9PSAnaW5oZXJpdCcgPyAnc2Vjb25kYXJ5JyA6IGNvbG9yID09ICdzZWNvbmRhcnknID8gJ2RhbmdlcicgOiBjb2xvcikgfHwgJ3NlY29uZGFyeSd9ICR7Y2xhc3NOYW1lIHx8ICcnfSAke3NpemUgPT0gJ3NtYWxsJyA/ICdidG4tc20nIDogJyd9YCxcclxuICAgIGRpc2FibGVkLFxyXG4gICAgJG9uOiB7IGNsaWNrOiBvbkNsaWNrIH1cclxufSwgY2hpbGRyZW4pO1xyXG5cclxuXHJcbmNvbnN0IFRleHRGaWVsZCA9IChwcm9wczoge1xyXG4gICAgaWQ6IHN0cmluZyxcclxuICAgIGRpc2FibGVkPzogYm9vbGVhbixcclxuICAgIGNsYXNzTmFtZT86IHN0cmluZyxcclxuICAgIGF1dG9Gb2N1cz86IGJvb2xlYW4sXHJcbiAgICBmdWxsV2lkdGg6IGJvb2xlYW5cclxuICAgIGlucHV0UHJvcHM/OiBhbnksXHJcbiAgICB2YWx1ZT86IGFueSxcclxuICAgIHR5cGU6IGFueSxcclxuICAgIGxhYmVsPzogc3RyaW5nLFxyXG4gICAgZXJyb3I/OiBib29sZWFuLFxyXG4gICAgaGVscGVyVGV4dD86IHN0cmluZyxcclxuICAgIG11bHRpbGluZT86IGJvb2xlYW4sXHJcbiAgICBvbkNoYW5nZT86IChldmVudDogYW55KSA9PiB2b2lkLFxyXG4gICAgb25Gb2N1cz86IChldmVudDogYW55KSA9PiB2b2lkLFxyXG4gICAgb25CbHVyPzogKGV2ZW50OiBhbnksIHZhbG9yOiBhbnkpID0+IHZvaWQsXHJcbiAgICAvLyBvbktleURvd24/OihldmVudDpLZXlib2FyZEV2ZW50KT0+dm9pZCAvLyBLZXlib2FyZEV2ZW50SGFuZGxlcjxIVE1MSW5wdXRFbGVtZW50PlxyXG4gICAgb25LZXlEb3duPzogUmVhY3QuS2V5Ym9hcmRFdmVudEhhbmRsZXI8SFRNTElucHV0RWxlbWVudD5cclxufSkgPT4gPGlucHV0XHJcbiAgICAgICAgey4uLnByb3BzLmlucHV0UHJvcHN9XHJcbiAgICAgICAgaWQ9e3Byb3BzLmlkfVxyXG4gICAgICAgIGRpc2FibGVkPXtwcm9wcy5kaXNhYmxlZH1cclxuICAgICAgICBjbGFzc05hbWU9e3Byb3BzLmNsYXNzTmFtZX1cclxuICAgICAgICBhdXRvRm9jdXM9e3Byb3BzLmF1dG9Gb2N1c31cclxuICAgICAgICB2YWx1ZT17cHJvcHMudmFsdWV9XHJcbiAgICAgICAgdHlwZT17cHJvcHMudHlwZX1cclxuICAgICAgICBvbkNoYW5nZT17cHJvcHMub25DaGFuZ2V9XHJcbiAgICAgICAgb25Gb2N1cz17cHJvcHMub25Gb2N1c31cclxuICAgICAgICBvbkJsdXI9eyhldnQpID0+IHByb3BzLm9uQmx1cj8uKGV2dCwgZXZ0LnRhcmdldC52YWx1ZSl9XHJcbiAgICAgICAgb25LZXlEb3duPXtwcm9wcy5vbktleURvd259XHJcbiAgICAgICAgcGxhY2Vob2xkZXI9e3Byb3BzLmxhYmVsfVxyXG4gICAgLz47XHJcblxyXG5jb25zdCBUeXBvZ3JhcGh5ID0gKHsgY2hpbGRyZW4sIC4uLm90aGVycyB9OiB7XHJcbiAgICBjaGlsZHJlbjogYW55LFxyXG4gICAgY29tcG9uZW50Pzogc3RyaW5nXHJcbiAgICB2YXJpYW50PzogJ2JvZHkyJ3wnaDUnfCdoNidcclxuICAgIGNvbG9yPzogQ29sb3JWYWx1ZXNcclxufSAmIENvbW1vbkF0dHJpYnV0ZXMpID0+IFJlYWN0LmNyZWF0ZUVsZW1lbnQob3RoZXJzLnZhcmlhbnQgfHwgb3RoZXJzLmNvbXBvbmVudCB8fCAnZGl2Jywgb3RoZXJzLCBjaGlsZHJlbik7XHJcblxyXG5mdW5jdGlvbiBHcmlkKHByb3BzOiB7XHJcbiAgICBjb250YWluZXI/OiBib29sZWFuLFxyXG4gICAgc3BhY2luZz86IG51bWJlcixcclxuICAgIGl0ZW0/OiBib29sZWFuLFxyXG4gICAgd3JhcD86ICd3cmFwJyB8ICdub3dyYXAnLFxyXG4gICAgZGlyZWN0aW9uPzogJ3JvdycgfCAnY29sdW1uJ1xyXG4gICAgYWxpZ25JdGVtcz86ICdzdHJldGNoJyB8ICdmbGV4LXN0YXJ0JyB8ICdmbGV4LWVuZCcgfCAnY2VudGVyJyB8ICdiYXNlbGluZScsXHJcbiAgICBjaGlsZHJlbjogYW55LFxyXG4gICAgeHM/OiBudW1iZXIsXHJcbiAgICBzbT86IG51bWJlcixcclxufSAmIENvbW1vbkF0dHJpYnV0ZXMpIHtcclxuICAgIHZhciB7IGNvbnRhaW5lciwgaXRlbSwgd3JhcCwgZGlyZWN0aW9uLCBhbGlnbkl0ZW1zLCBjaGlsZHJlbiwgY2xhc3NOYW1lLCB4cywgc20sIHNwYWNpbmcsIC4uLm90aGVyIH0gPSBwcm9wcztcclxuICAgIHJldHVybiA8ZGl2XHJcbiAgICAgICAgey4uLm90aGVyfVxyXG4gICAgICAgIGNsYXNzTmFtZT17YCR7Y2xhc3NOYW1lIHx8ICcnfSAke3hzICE9IG51bGwgPyAnZ3JpZC14cy0nICsgeHMgOiAnJ30gJHtzbSAhPSBudWxsID8gJ2dyaWQtc20tJyArIHNtIDogJyd9YH1cclxuICAgICAgICBzdHlsZT17Y29udGFpbmVyID8ge1xyXG4gICAgICAgICAgICBkaXNwbGF5OiAnZmxleCcsXHJcbiAgICAgICAgICAgIGZsZXhXcmFwOiB3cmFwLFxyXG4gICAgICAgICAgICBmbGV4RGlyZWN0aW9uOiBkaXJlY3Rpb24sXHJcbiAgICAgICAgICAgIGFsaWduSXRlbXM6IGFsaWduSXRlbXMsXHJcbiAgICAgICAgICAgIG1hcmdpbjogc3BhY2luZyAhPSBudWxsID8gc3BhY2luZyAqIDggKyAncHgnIDogdW5kZWZpbmVkXHJcbiAgICAgICAgfSA6IHtcclxuICAgICAgICB9fVxyXG4gICAgPntjaGlsZHJlbn08L2Rpdj5cclxufVxyXG5cclxuaW50ZXJmYWNlIEZhc3RTZXR1cFByb3BzIHtcclxuICAgIGRpc2FibGVkPzogYm9vbGVhbjtcclxuICAgIGNoaWxkcmVuOiBSZWFjdC5SZWFjdE5vZGU7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBGYXN0U2V0dXAocHJvcHM6IEZhc3RTZXR1cFByb3BzKTogSlNYLkVsZW1lbnQge1xyXG4gICAgY29uc3QgW2FuY2hvckVsLCBzZXRBbmNob3JFbF0gPSBSZWFjdC51c2VTdGF0ZTxudWxsIHwgSFRNTEVsZW1lbnQ+KG51bGwpO1xyXG4gICAgY29uc3QgW29wZW4sIHNldE9wZW5dID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xyXG5cclxuICAgIGNvbnN0IGhhbmRsZUNsaWNrID0gKGV2ZW50OiBSZWFjdC5Nb3VzZUV2ZW50PEhUTUxCdXR0b25FbGVtZW50PikgPT4ge1xyXG4gICAgICAgIHNldEFuY2hvckVsKGV2ZW50LmN1cnJlbnRUYXJnZXQpO1xyXG4gICAgICAgIHNldE9wZW4oKHByZXYpID0+ICFwcmV2KTtcclxuICAgIH07XHJcblxyXG4gICAgY29uc3QgaGFuZGxlQ2xvc2UgPSAoKSA9PiB7XHJcbiAgICAgICAgc2V0T3BlbihmYWxzZSk7XHJcbiAgICB9O1xyXG5cclxuICAgIHJldHVybiAoXHJcbiAgICAgICAgPD5cclxuICAgICAgICAgICAgPEJ1dHRvbiBvbkNsaWNrPXtoYW5kbGVDbGlja30gZGlzYWJsZWQ9e3Byb3BzLmRpc2FibGVkfT5cclxuICAgICAgICAgICAgICAgIDxJQ09OLlNldHRpbmdzIC8+XHJcbiAgICAgICAgICAgIDwvQnV0dG9uPlxyXG5cclxuICAgICAgICAgICAgPE1lbnVcclxuICAgICAgICAgICAgICAgIG9wZW49e29wZW59XHJcbiAgICAgICAgICAgICAgICBhbmNob3JFbD17YW5jaG9yRWx9XHJcbiAgICAgICAgICAgICAgICBvbkNsb3NlPXtoYW5kbGVDbG9zZX1cclxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZUNsb3NlfVxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICB7cHJvcHMuY2hpbGRyZW59XHJcbiAgICAgICAgICAgIDwvTWVudT5cclxuICAgICAgICA8Lz5cclxuICAgICk7XHJcbn1cclxuXHJcbnZhciBwMTIgPSAncDEyJyBhcyBJZFZhcmlhYmxlO1xyXG52YXIgc3AyID0gJ3NwMicgYXMgSWRWYXJpYWJsZTtcclxudmFyIHNwMyA9ICdzcDMnIGFzIElkVmFyaWFibGU7XHJcbnZhciBzcDQgPSAnc3A0JyBhcyBJZFZhcmlhYmxlO1xyXG52YXIgc3A1ID0gJ3NwNScgYXMgSWRWYXJpYWJsZTtcclxuXHJcbi8qXHJcbi8vIGNvbnN0IHRha2VFbGVtZW50T3JEZWZhdWx0PEssIFQgZXh0ZW5kcyBbSyBpbl0sIEQ+KClcclxuZnVuY3Rpb24gaXNJbjxWLCBUPihrOmtleW9mIFQsIG9iamVjdDpUKTogb2JqZWN0W2tdIGlzIFZ7XHJcbiAgICByZXR1cm4gdHJ1ZVxyXG59XHJcbiovXHJcbmZ1bmN0aW9uIHRha2VFbGVtZW50T3JEZWZhdWx0PFYsIEsgZXh0ZW5kcyBzdHJpbmcsIEtPIGV4dGVuZHMgc3RyaW5nPihrOiBLLCBvYmplY3Q6IHsgW2sgaW4gS09dOiBWIH0sIGRlZmF1bHRWYWx1ZTogVik6IFYge1xyXG4gICAgcmV0dXJuIGsgaW4gb2JqZWN0ID9cclxuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIHBvciBhbGd1bmEgcmF6w7NuIFRTIG5vIHF1aWVyZSBlbnRlbmRlciBxdWUgc2kgayBlc3TDoSBlbiBvYmplY3QsIG9iamVjdFtrXSBleGlzdGVcclxuICAgICAgICBvYmplY3Rba11cclxuICAgICAgICA6IGRlZmF1bHRWYWx1ZVxyXG59XHJcblxyXG5mdW5jdGlvbiBEZXNwbGllZ3VlRW5jYWJlemFkbyhwcm9wczogeyBjYXNpbGxlcm86IENhc2lsbGVyb0VuY2FiZXphYmxlLCBsZWVyPzogYm9vbGVhbiB9KSB7XHJcbiAgICBjb25zdCBmb3JQa051bGwgPSB7fSBhcyBGb3JQaztcclxuICAgIHJldHVybiA8RW5jYWJlemFkb0Rlc3BsaWVndWUgY2FzaWxsZXJvPXtwcm9wcy5jYXNpbGxlcm99IGxlZXI9e3Byb3BzLmxlZXJ9IGZvclBrPXtmb3JQa051bGx9IC8+O1xyXG59XHJcblxyXG5mdW5jdGlvbiBzdWJpckhhc3RhKGVsZW1lbnRvOiBIVE1MRWxlbWVudCB8IG51bGwsIGZ1bjogKGVsZW1lbnRvOiBIVE1MRWxlbWVudCkgPT4gYm9vbGVhbik6IEhUTUxFbGVtZW50IHwgbnVsbCB7XHJcbiAgICBpZiAoZWxlbWVudG8gPT0gbnVsbCkgcmV0dXJuIG51bGw7XHJcbiAgICBpZiAoZnVuKGVsZW1lbnRvKSkgcmV0dXJuIGVsZW1lbnRvO1xyXG4gICAgcmV0dXJuIHN1YmlySGFzdGEoZWxlbWVudG8ucGFyZW50RWxlbWVudCwgZnVuKTtcclxufVxyXG5cclxudmFyIGVsZW1lbnRvQ29uU2VubmlhbEJvcnJhcjogSFRNTEVsZW1lbnQgfCBudWxsID0gbnVsbDtcclxuXHJcbmZ1bmN0aW9uIEJvdG9uQm9ycmFyKHsgaWQsIHZhcmlhYmxlLCBmb3JQaywgdmFsb3JPcGNpb24gfTogeyBpZDogc3RyaW5nLCB2YXJpYWJsZTogSWRWYXJpYWJsZSwgZm9yUGs6IEZvclBrLCB2YWxvck9wY2lvbj86IGFueSB9KSB7XHJcbiAgICB2YXIgaGFuZGxlQ2xpY2tCb3JyYXIgPSAoKSA9PiB7XHJcbiAgICAgICAgZGlzcGF0Y2hCeVBhc3MoYWNjaW9uX3JlZ2lzdHJhcl9yZXNwdWVzdGEsIHsgcmVzcHVlc3RhOiBudWxsLCB2YXJpYWJsZTogdmFyaWFibGUsIGZvclBrOiBmb3JQayB9KVxyXG4gICAgfTtcclxuICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT1cImJvdG9uLWJvcnJhclwiPlxyXG4gICAgICAgIDxCdXR0b25cclxuICAgICAgICAgICAgaWQ9e2lkfVxyXG4gICAgICAgICAgICBtaS12YXJpYWJsZT17dmFyaWFibGV9XHJcbiAgICAgICAgICAgIHZhbG9yLW9wY2lvbj17dmFsb3JPcGNpb259XHJcbiAgICAgICAgICAgIHZhcmlhbnQ9XCJvdXRsaW5lZFwiXHJcbiAgICAgICAgICAgIGNsYXNzTmFtZT1cImJvdG9uLW9wY2lvbiBib3Rvbi1vcGNpb24tYm9ycmFyXCJcclxuICAgICAgICAgICAgb25DbGljaz17aGFuZGxlQ2xpY2tCb3JyYXJ9XHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgICA8SUNPTi5EZWxldGVGb3JldmVyIC8+XHJcbiAgICAgICAgPC9CdXR0b24+XHJcbiAgICA8L2Rpdj5cclxufVxyXG5cclxuZnVuY3Rpb24gU2FsdG9EZXNwbGllZ3VlKHsgY2FzaWxsZXJvLCBwcmVmaWpvIH06IHsgY2FzaWxsZXJvOiBQcmVndW50YSB8IE9wY2lvbiB8IEZpbHRybywgcHJlZmlqbz86IHN0cmluZyB9KSB7XHJcbiAgICByZXR1cm4gY2FzaWxsZXJvLnNhbHRvID9cclxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInBhc2VcIj5cclxuICAgICAgICAgICAge3ByZWZpam8gPyA8c3BhbiBjbGFzc05hbWU9XCJwcmVmaWpvXCI+e3ByZWZpam99IDwvc3Bhbj4gOiBudWxsfVxyXG4gICAgICAgICAgICA8SUNPTi5UcmVuZGluZ0ZsYXQgLz48c3Bhbj57Y2FzaWxsZXJvLnNhbHRvfTwvc3Bhbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA6IG51bGxcclxufVxyXG5cclxuZnVuY3Rpb24gT3BjaW9uRGVzcGxpZWd1ZShwcm9wczogeyBjYXNpbGxlcm86IE9wY2lvbiwgdmFsb3JPcGNpb246IG51bWJlciwgdmFyaWFibGU6IElkVmFyaWFibGUsIGZvclBrOiBGb3JQaywgbGVlcjogYm9vbGVhbiwgY29uQm90b25Cb3JyYXI6IGJvb2xlYW4gfSkge1xyXG4gICAgY29uc3QgeyBjYXNpbGxlcm8gfSA9IHByb3BzO1xyXG4gICAgY29uc3QgZGlzcGF0Y2ggPSB1c2VEaXNwYXRjaCgpO1xyXG4gICAgdmFyIHNhbHRvQXV0b21hdGljbyA9IHVzZVNlbGVjdG9yKChzdGF0ZTogQ2Fzb1N0YXRlKSA9PiBzdGF0ZS5vcGNpb25lcy5zYWx0b0F1dG9tYXRpY28pO1xyXG4gICAgdmFyIGhhbmRsZUNsaWNrOiBSZWFjdC5Nb3VzZUV2ZW50SGFuZGxlcjxIVE1MQnV0dG9uRWxlbWVudD4gPSBhc3luYyAoZXZlbnQpID0+IHtcclxuICAgICAgICB2YXIgY29udGFpbmVyID0gc3ViaXJIYXN0YShldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQsIGVsZW1lbnRvID0+IGVsZW1lbnRvLmNsYXNzTGlzdC5jb250YWlucygncHJlZ3VudGEnKSB8fCBlbGVtZW50by5jbGFzc0xpc3QuY29udGFpbnMoJ211bHRpcGxlJykpIHx8IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtYWluX2xheW91dCcpITtcclxuICAgICAgICB2YXIgdGllbmUgPSBjb250YWluZXIuZ2V0QXR0cmlidXRlKCdlc3RveS1ib3JyYW5kbycpO1xyXG4gICAgICAgIGNvbnRhaW5lci5zZXRBdHRyaWJ1dGUoJ2VzdG95LWJvcnJhbmRvJywgJ05PJyk7XHJcbiAgICAgICAgaWYgKGVsZW1lbnRvQ29uU2VubmlhbEJvcnJhcikge1xyXG4gICAgICAgICAgICBlbGVtZW50b0NvblNlbm5pYWxCb3JyYXIuc2V0QXR0cmlidXRlKCdlc3RveS1ib3JyYW5kbycsICdOTycpO1xyXG4gICAgICAgICAgICBlbGVtZW50b0NvblNlbm5pYWxCb3JyYXIgPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgeyByZWNlbnRNb2RpZmllZCwgc2lndWllbnRlVmFyaWFibGUgfSA9IGRpc3BhdGNoQnlQYXNzKGFjY2lvbl9yZWdpc3RyYXJfcmVzcHVlc3RhLCB7IHJlc3B1ZXN0YTogcHJvcHMudmFsb3JPcGNpb24sIHZhcmlhYmxlOiBwcm9wcy52YXJpYWJsZSwgZm9yUGs6IHByb3BzLmZvclBrIH0pO1xyXG4gICAgICAgIGlmICghcmVjZW50TW9kaWZpZWQpIHtcclxuICAgICAgICAgICAgY29udGFpbmVyLnNldEF0dHJpYnV0ZSgnZXN0b3ktYm9ycmFuZG8nLCB0aWVuZSA9PSAnU0knID8gJ05PJyA6ICdTSScpO1xyXG4gICAgICAgICAgICBpZiAodGllbmUgIT0gJ1NJJykge1xyXG4gICAgICAgICAgICAgICAgZWxlbWVudG9Db25TZW5uaWFsQm9ycmFyID0gY29udGFpbmVyO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKHNpZ3VpZW50ZVZhcmlhYmxlICYmIHNhbHRvQXV0b21hdGljbykge1xyXG4gICAgICAgICAgICAgICAgdmFyIGJvdG9uU3R5bGUgPSAoZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50KT8uc3R5bGU7XHJcbiAgICAgICAgICAgICAgICBpZiAoYm90b25TdHlsZSkgYm90b25TdHlsZS5jb2xvciA9ICdncmVlbic7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCBzbGVlcChERUxBWV9TQ1JPTExfMyk7XHJcbiAgICAgICAgICAgICAgICBpZiAoYm90b25TdHlsZSkgYm90b25TdHlsZS5jb2xvciA9ICdibHVlJztcclxuICAgICAgICAgICAgICAgIGF3YWl0IHNsZWVwKERFTEFZX1NDUk9MTF8zKTtcclxuICAgICAgICAgICAgICAgIGlmIChib3RvblN0eWxlKSBib3RvblN0eWxlLmNvbG9yID0gJ2dyZWVuJztcclxuICAgICAgICAgICAgICAgIGF3YWl0IHNsZWVwKERFTEFZX1NDUk9MTF8zKTtcclxuICAgICAgICAgICAgICAgIGlmIChib3RvblN0eWxlKSBib3RvblN0eWxlLmNvbG9yID0gJyc7XHJcbiAgICAgICAgICAgICAgICAoY2FzaWxsZXJvLmVzcGVjaWFsPy5ub1Njcm9sbCA9PSB0cnVlKSA/IG51bGwgOiBlbmZvY2FyRWxlbWVudG9EZVZhcmlhYmxlKGNhc2lsbGVyby5lc3BlY2lhbD8uc2Nyb2xsVG8gPz8gc2lndWllbnRlVmFyaWFibGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIHJldHVybiA8R3JpZCBjbGFzc05hbWU9XCJvcGNpb25cIj5cclxuICAgICAgICB7cHJvcHMuY29uQm90b25Cb3JyYXIgPyA8Qm90b25Cb3JyYXJcclxuICAgICAgICAgICAgaWQ9e2BvcGNpb24tdmFyLSR7cHJvcHMudmFyaWFibGV9LSR7cHJvcHMudmFsb3JPcGNpb259LWJvcnJhcmB9XHJcbiAgICAgICAgICAgIGZvclBrPXtwcm9wcy5mb3JQa31cclxuICAgICAgICAgICAgdmFyaWFibGU9e3Byb3BzLnZhcmlhYmxlfVxyXG4gICAgICAgICAgICB2YWxvck9wY2lvbj17cHJvcHMudmFsb3JPcGNpb259XHJcbiAgICAgICAgLz4gOiBudWxsfVxyXG4gICAgICAgIDxCdXR0b25cclxuICAgICAgICAgICAgaWQ9e2BvcGNpb24tdmFyLSR7cHJvcHMudmFyaWFibGV9LSR7cHJvcHMudmFsb3JPcGNpb259YH1cclxuICAgICAgICAgICAgbWktdmFyaWFibGU9e3Byb3BzLnZhcmlhYmxlfVxyXG4gICAgICAgICAgICB2YWxvci1vcGNpb249e3Byb3BzLnZhbG9yT3BjaW9ufVxyXG4gICAgICAgICAgICB2YXJpYW50PVwib3V0bGluZWRcIlxyXG4gICAgICAgICAgICBjbGFzc05hbWU9XCJib3Rvbi1vcGNpb24gYm90b24tb3BjaW9uLXNlbGVjY2lvblwiXHJcbiAgICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZUNsaWNrfVxyXG4gICAgICAgICAgICB0YWJJbmRleD17LTF9XHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgICA8R3JpZCBjb250YWluZXIgd3JhcD1cIm5vd3JhcFwiPlxyXG4gICAgICAgICAgICAgICAgPEdyaWQgY2xhc3NOYW1lPVwiaWRcIj5cclxuICAgICAgICAgICAgICAgICAgICB7Y2FzaWxsZXJvLnZlcl9pZCB8fCBjYXNpbGxlcm8uY2FzaWxsZXJvfVxyXG4gICAgICAgICAgICAgICAgPC9HcmlkPlxyXG4gICAgICAgICAgICAgICAgPEdyaWQgY2xhc3NOYW1lPVwib3BjaW9uLXRleHRvXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPFR5cG9ncmFwaHkgZGViZS1sZWVyPXtjYXNpbGxlcm8ubGVlciA/ICdTSScgOiBjYXNpbGxlcm8ubGVlciA9PT0gZmFsc2UgPyAnTk8nIDogcHJvcHMubGVlciA/ICdTSScgOiAnTk8nfT57YnJlYWtlYWJsZVRleHQoY2FzaWxsZXJvLm5vbWJyZSl9PC9UeXBvZ3JhcGh5PlxyXG4gICAgICAgICAgICAgICAgICAgIHtjYXNpbGxlcm8uYWNsYXJhY2lvbiA/XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxUeXBvZ3JhcGh5IGNsYXNzTmFtZT0nYWNsYXJhY2lvbic+e2JyZWFrZWFibGVUZXh0KGNhc2lsbGVyby5hY2xhcmFjaW9uKX08L1R5cG9ncmFwaHk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDogbnVsbH1cclxuICAgICAgICAgICAgICAgIDwvR3JpZD5cclxuICAgICAgICAgICAgPC9HcmlkPlxyXG4gICAgICAgIDwvQnV0dG9uPlxyXG4gICAgICAgIDxTYWx0b0Rlc3BsaWVndWUgY2FzaWxsZXJvPXtjYXNpbGxlcm99IC8+XHJcbiAgICA8L0dyaWQ+XHJcbn1cclxuaW50ZXJmYWNlIEljYXNpbGxlcm9Db25PcGNpb25lcyB7XHJcbiAgICB2YXJfbmFtZTogSWRWYXJpYWJsZSxcclxuICAgIGRlc3BsaWVndWVDb250ZW5pZG86ICd2ZXJ0aWNhbCcgfCAnaG9yaXpvbnRhbCcgfCBudWxsLFxyXG4gICAgY2FzaWxsZXJvczogT3BjaW9uW11cclxufVxyXG5cclxuXHJcbmZ1bmN0aW9uIFNpTm9EZXNwbGllZ3VlKHByb3BzOiB7IGNhc2lsbGVyb0Nvbk9wY2lvbmVzOiBJY2FzaWxsZXJvQ29uT3BjaW9uZXMsIGZvclBrOiBGb3JQaywgZGVzcGxpZWd1ZUNvbnRlbmlkbzogJ3ZlcnRpY2FsJyB8ICdob3Jpem9udGFsJyB9KSB7XHJcbiAgICByZXR1cm4gPE9wY2lvbmVzRGVzcGxpZWd1ZVxyXG4gICAgICAgIGNhc2lsbGVyb0Nvbk9wY2lvbmVzPXtwcm9wcy5jYXNpbGxlcm9Db25PcGNpb25lc31cclxuICAgICAgICBmb3JQaz17cHJvcHMuZm9yUGt9XHJcbiAgICAgICAgbGVlcj17ZmFsc2V9XHJcbiAgICAgICAgZGVzcGxpZWd1ZUNvbnRlbmlkbz17cHJvcHMuZGVzcGxpZWd1ZUNvbnRlbmlkb31cclxuICAgIC8+XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHJlZ2lzdHJhZG9yRGVWYXJpYWJsZShwcmVndW50YTogUHJlZ3VudGEgfCBPcGNpb25NdWx0aXBsZSB8IENvbmp1bnRvUHJlZ3VudGFzKSB7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICAgIHJlc3B1ZXN0YXM6IFJlc3B1ZXN0YXMsIGZlZWRiYWNrRm9ybTogRm9ybVN0cnVjdHVyZVN0YXRlPElkVmFyaWFibGUsIFZhbG9yLCBJZEZpbj4sIGVsZW1lbnRvOiBIVE1MRGl2RWxlbWVudFxyXG4gICAgKSA9PiB7XHJcbiAgICAgICAgdmFyIHZhbG9yQWN0dWFsID0gcHJlZ3VudGEudmFyX25hbWUgPT0gbnVsbCA/IG51bGwgOiByZXNwdWVzdGFzW3ByZWd1bnRhLnZhcl9uYW1lXTtcclxuICAgICAgICB2YXIgZmVlZGJhY2tSb3cgPSBmZWVkYmFja0Zvcm0uZmVlZGJhY2s7XHJcbiAgICAgICAgdmFyIGZlZWRiYWNrVmFyID0gcHJlZ3VudGEudmFyX25hbWUgPT0gbnVsbCA/IG51bGwgOiBmZWVkYmFja1Jvd1twcmVndW50YS52YXJfbmFtZV07XHJcbiAgICAgICAgdmFyIHRpZW5lVmFsb3IgPSB2YWxvckFjdHVhbCAhPSBudWxsICYmIGZlZWRiYWNrVmFyICE9IG51bGwgPyAoZmVlZGJhY2tWYXIuY29uUHJvYmxlbWEgPyAnaW52YWxpZG8nIDogJ3ZhbGlkbycpIDogJ05PJztcclxuICAgICAgICB2YXIgZXN0YWRvOiBFc3RhZG9WYXJpYWJsZTtcclxuICAgICAgICBpZiAocHJlZ3VudGEudGlwb3Zhcikge1xyXG4gICAgICAgICAgICBlc3RhZG8gPSBmZWVkYmFja1Zhcj8uZXN0YWRvITtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB2YXIgZmVlZGJhY2tNdWx0aSA9IHByZWd1bnRhLmNhc2lsbGVyb3MuZmlsdGVyKGMgPT4gYy52YXJfbmFtZSAhPSBudWxsKS5yZWR1Y2UoKHB2LCBvbSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdmFyIGZiID0gZmVlZGJhY2tSb3c/LltvbS52YXJfbmFtZSFdIVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICB0aWVuZUFjdHVhbDogcHYudGllbmVBY3R1YWwgfHwgZmIuZXN0YWRvID09ICdhY3R1YWwnLFxyXG4gICAgICAgICAgICAgICAgICAgIGVzdGFTYWx0ZWFkYTogcHYuZXN0YVNhbHRlYWRhICYmIChmYi5lc3RhZG8gPT0gJ3NhbHRlYWRhJyB8fCBmYi5lc3RhZG8gPT0gJ2Z1ZXJhX2RlX2ZsdWpvX3Bvcl9zYWx0bycpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sIHsgdGllbmVBY3R1YWw6IGZhbHNlLCBlc3RhU2FsdGVhZGE6IHRydWUgfSk7XHJcbiAgICAgICAgICAgIGVzdGFkbyA9IGZlZWRiYWNrTXVsdGkudGllbmVBY3R1YWwgPyAnYWN0dWFsJyA6IGZlZWRiYWNrTXVsdGkuZXN0YVNhbHRlYWRhID8gJ3NhbHRlYWRhJyA6ICd0b2RhdmlhX25vJ1xyXG4gICAgICAgIH1cclxuICAgICAgICBzZXRBdHRyRGlzdGludG8oZWxlbWVudG8sICdudWVzdHJvLXZhbGlkYXRvcicsIGVzdGFkbyk7XHJcbiAgICAgICAgc2V0QXR0ckRpc3RpbnRvKGVsZW1lbnRvLCAndGllbmUtdmFsb3InLCB0aWVuZVZhbG9yKTtcclxuICAgICAgICBzZXRBdHRyRGlzdGludG8oZWxlbWVudG8sICdlc3RhLWluaGFiaWxpdGFkYScsIGZlZWRiYWNrVmFyPy5pbmhhYmlsaXRhZGEgPyAnU0knIDogJ05PJyk7XHJcbiAgICAgICAgaWYgKHByZWd1bnRhLnZhcl9uYW1lKSB7XHJcbiAgICAgICAgICAgIHZhciBvcGNpb25lczogSFRNTEJ1dHRvbkVsZW1lbnRbXSA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGVsZW1lbnRvLnF1ZXJ5U2VsZWN0b3JBbGwoYC5ib3Rvbi1vcGNpb25bbWktdmFyaWFibGU9XCIke3ByZWd1bnRhLnZhcl9uYW1lfVwiXWApLCAwKTtcclxuICAgICAgICAgICAgdmFyIGVsZW1lbnRvT3BjaW9uOiBIVE1MQnV0dG9uRWxlbWVudDtcclxuICAgICAgICAgICAgZm9yIChlbGVtZW50b09wY2lvbiBvZiBvcGNpb25lcykge1xyXG4gICAgICAgICAgICAgICAgdmFyIHZhbG9yT3BjaW9uID0gZWxlbWVudG9PcGNpb24uZ2V0QXR0cmlidXRlKCd2YWxvci1vcGNpb24nKTtcclxuICAgICAgICAgICAgICAgIHNldEF0dHJEaXN0aW50byhlbGVtZW50b09wY2lvbiwgJ29wY2lvbi1zZWxlY2Npb25hZGEnLCB2YWxvck9wY2lvbiA9PSB2YWxvckFjdHVhbCA/IFwiU0lcIiA6IFwiTk9cIilcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YXIgZWxlbWVudG9zSW5wdXQ6IEhUTUxJbnB1dEVsZW1lbnRbXSA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGVsZW1lbnRvLnF1ZXJ5U2VsZWN0b3JBbGwoJy52YXJpYWJsZScpKTtcclxuICAgICAgICAgICAgdmFyIGVsZW1lbnRvSW5wdXQ6IEhUTUxJbnB1dEVsZW1lbnQ7XHJcbiAgICAgICAgICAgIGZvciAoZWxlbWVudG9JbnB1dCBvZiBlbGVtZW50b3NJbnB1dCkge1xyXG4gICAgICAgICAgICAgICAgc2V0VmFsb3JEaXN0aW50byhlbGVtZW50b0lucHV0LCAndmFsdWUnLCB2YWxvckFjdHVhbCA9PSBudWxsID8gJycgOiB2YWxvckFjdHVhbC50b1N0cmluZygpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YXIgYm90b25Oc05jID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJuc25jLXByZWd1bnRhLVwiICsgcHJlZ3VudGEudmFyX25hbWUpITtcclxuICAgICAgICAgICAgc2V0QXR0ckRpc3RpbnRvKGJvdG9uTnNOYywgJ29wY2lvbi1zZWxlY2Npb25hZGEnLCB2YWxvckFjdHVhbCA9PSAocHJlZ3VudGEudmFsb3JfbnNfbmMgPz8gLTkpID8gXCJTSVwiIDogXCJOT1wiKVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxuZnVuY3Rpb24gT3BjaW9uTXVsdGlwbGVEZXNwbGllZ3VlKHByb3BzOiB7IG9wY2lvbk06IE9wY2lvbk11bHRpcGxlLCBmb3JQazogRm9yUGsgfSkge1xyXG4gICAgY29uc3QgeyBvcGNpb25NIH0gPSBwcm9wcztcclxuICAgIHZhciBpZCA9IGBvcGNpb25NLSR7b3BjaW9uTS5pZF9jYXNpbGxlcm99YDtcclxuICAgIHZhciBzdHlsZXM6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSBvcGNpb25NLmVzcGVjaWFsPy5mbGV4RGlyZWN0aW9uID8geyBmbGV4RGlyZWN0aW9uOiBvcGNpb25NLmVzcGVjaWFsLmZsZXhEaXJlY3Rpb24gfSA6IHsgZmxleFdyYXA6ICd3cmFwJyB9O1xyXG4gICAgcmVnaXN0cmFyRWxlbWVudG8oe1xyXG4gICAgICAgIGlkLFxyXG4gICAgICAgIGRpcmVjdDogdHJ1ZSxcclxuICAgICAgICBmdW46IHJlZ2lzdHJhZG9yRGVWYXJpYWJsZShvcGNpb25NKVxyXG4gICAgfSlcclxuICAgIGNvbnN0IHVwZGF0ZVdpbmRvd1dpZHRoID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHNldFdpbmRvd1dpZHRoKHdpbmRvdy5pbm5lcldpZHRoKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBbd2luZG93V2lkdGgsIHNldFdpbmRvd1dpZHRoXSA9IHVzZVN0YXRlKHdpbmRvdy5pbm5lcldpZHRoKTtcclxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCB1cGRhdGVXaW5kb3dXaWR0aCk7XHJcbiAgICByZXR1cm4gPERlc3BsZWdhckNhc2lsbGVyb1xyXG4gICAgICAgIGlkPXtpZH1cclxuICAgICAgICBjYXNpbGxlcm89e29wY2lvbk19XHJcbiAgICAgICAgZGVzcGxpZWd1ZUVuY2FiZXphZG89J2xhdGVyYWwnXHJcbiAgICAgICAgc3R5bGU9e3N0eWxlc31cclxuICAgID5cclxuICAgICAgICA8RW5jYWJlemFkb0Rlc3BsaWVndWVcclxuICAgICAgICAgICAgY2FzaWxsZXJvPXtvcGNpb25NfVxyXG4gICAgICAgICAgICB2ZXJJZEd1aW9uPXt0cnVlfVxyXG4gICAgICAgICAgICBsZWVyPXtvcGNpb25NLmxlZXIgIT09IGZhbHNlfVxyXG4gICAgICAgICAgICBmb3JQaz17cHJvcHMuZm9yUGt9XHJcbiAgICAgICAgICAgIHN0eWxlPXt7IG1heFdpZHRoOiB3aW5kb3dXaWR0aCAtIDQwMCB9fSAvL1RPRE8gTUVKT1JBUlxyXG4gICAgICAgIC8+XHJcbiAgICAgICAgPFNpTm9EZXNwbGllZ3VlXHJcbiAgICAgICAgICAgIGNhc2lsbGVyb0Nvbk9wY2lvbmVzPXtvcGNpb25NfVxyXG4gICAgICAgICAgICBmb3JQaz17cHJvcHMuZm9yUGt9XHJcbiAgICAgICAgICAgIGRlc3BsaWVndWVDb250ZW5pZG89e3Byb3BzLm9wY2lvbk0uZGVzcGxpZWd1ZUNvbnRlbmlkbyA/PyAnaG9yaXpvbnRhbCd9XHJcbiAgICAgICAgLz5cclxuICAgIDwvRGVzcGxlZ2FyQ2FzaWxsZXJvPlxyXG59XHJcblxyXG50eXBlIENhc2lsbGVyb0VuY2FiZXphYmxlID0gRm9ybXVsYXJpbyB8IEJsb3F1ZSB8IEZpbHRybyB8IENvbmp1bnRvUHJlZ3VudGFzIHwgUHJlZ3VudGEgfCBPcGNpb25NdWx0aXBsZSB8IFByZWd1bnRhU2ltcGxlIHwgQ29uc2lzdGVuY2lhIHwgVGV4dG8gfCBQTWF0cml6XHJcblxyXG5jb25zdCBnZXRMb3NNZXRhZGF0b3MgPSAoY2FzaWxsZXJvOiBDYXNpbGxlcm9FbmNhYmV6YWJsZSk6IFJlYWN0LkpTWC5FbGVtZW50ID0+XHJcbiAgICA8ZGl2IGxvcy1tZXRhZGF0b3M9XCJzaVwiPlxyXG4gICAgICAgIDxzcGFuIGVsLW1ldGFkYXRvPVwidmFyaWFibGVcIj57Y2FzaWxsZXJvLnZhcl9uYW1lfTwvc3Bhbj5cclxuICAgICAgICB7Y2FzaWxsZXJvLnRpcG92YXIgJiYgY2FzaWxsZXJvLnRpcG92YXIgIT0gJ29wY2lvbmVzJyAmJiBjYXNpbGxlcm8udGlwb3ZhciAhPSAnc2lfbm8nID9cclxuICAgICAgICAgICAgPHNwYW4gZWwtbWV0YWRhdG89XCJ0aXBvdmFyXCI+e2Nhc2lsbGVyby50aXBvdmFyfTwvc3Bhbj5cclxuICAgICAgICAgICAgOiBudWxsfVxyXG4gICAgICAgIHtjYXNpbGxlcm8udmFyX25hbWUgJiYgY2FzaWxsZXJvLm9wdGF0aXZvID8gPHNwYW4gZWwtbWV0YWRhdG89XCJvcHRhdGl2YVwiPm9wdGF0aXZhPC9zcGFuPiA6IG51bGx9XHJcbiAgICAgICAge2Nhc2lsbGVyby5jYWxjdWxhZGEgPyA8c3BhbiBlbC1tZXRhZGF0bz1cImNhbGN1bGFkYVwiPmNhbGN1bGFkYTwvc3Bhbj4gOiBudWxsfVxyXG4gICAgICAgIHtjYXNpbGxlcm8uZGVzcGxpZWd1ZU9jdWx0YSA/IDxzcGFuIGVsLW1ldGFkYXRvPVwib2N1bHRhXCI+b2N1bHRhPC9zcGFuPiA6IG51bGx9XHJcbiAgICAgICAge2Nhc2lsbGVyby5leHByZXNpb25faGFiaWxpdGFyID8gPHNwYW4gZWwtbWV0YWRhdG89XCJleHByZXNpb25faGFiaWxpdGFyXCI+aGFiaWxpdGE6IHtjYXNpbGxlcm8uZXhwcmVzaW9uX2hhYmlsaXRhcn08L3NwYW4+IDogbnVsbH1cclxuICAgICAgICB7Y2FzaWxsZXJvLmVzcGVjaWFsPy5hdXRvaW5nID8gPHNwYW4gZWwtbWV0YWRhdG89XCJleHByZXNpb25fYXV0b2luZ1wiPmF1dG9pbmc6IHtjYXNpbGxlcm8uZXNwZWNpYWw/LmF1dG9pbmd9PC9zcGFuPiA6IG51bGx9XHJcbiAgICA8L2Rpdj5cclxuXHJcbmZ1bmN0aW9uIEVuY2FiZXphZG9EZXNwbGllZ3VlKHByb3BzOiB7XHJcbiAgICBzdHlsZT86IFJlYWN0LkNTU1Byb3BlcnRpZXMsXHJcbiAgICBjYXNpbGxlcm86IENhc2lsbGVyb0VuY2FiZXphYmxlLFxyXG4gICAgdmVySWRHdWlvbj86IGJvb2xlYW4sXHJcbiAgICBsZWVyPzogYm9vbGVhbixcclxuICAgIGZvclBrOiBGb3JQa1xyXG59KSB7XHJcbiAgICB2YXIgeyBjYXNpbGxlcm8sIGZvclBrIH0gPSBwcm9wcztcclxuICAgIHZhciBjb25DYW1wb09wY2lvbmVzID0gdXNlU2VsZWN0b3IoKHN0YXRlOiBDYXNvU3RhdGUpID0+IHN0YXRlLm9wY2lvbmVzLmNvbkNhbXBvT3BjaW9uZXMpXHJcbiAgICB2YXIgaGFuZGxlQ2xpY2tCb3JyYXIgPSAoKSA9PiB7XHJcbiAgICAgICAgZGlzcGF0Y2hCeVBhc3MoYWNjaW9uX3JlZ2lzdHJhcl9yZXNwdWVzdGEsIHsgcmVzcHVlc3RhOiBudWxsLCB2YXJpYWJsZTogY2FzaWxsZXJvLnZhcl9uYW1lIGFzIElkVmFyaWFibGUsIGZvclBrOiBmb3JQayB9KVxyXG4gICAgfTtcclxuICAgIHZhciB2ZXJfaWQgPSBjYXNpbGxlcm8udmVyX2lkID8/IGNhc2lsbGVyby5jYXNpbGxlcm87XHJcbiAgICB2YXIgY2FsY3VsYWRhID0gY2FzaWxsZXJvLmNhbGN1bGFkYTtcclxuICAgIHZhciBpZCA9IGBpZC1kaXYtJHtjYXNpbGxlcm8udmFyX25hbWUgfHwgY2FzaWxsZXJvLmNhc2lsbGVyb31gO1xyXG4gICAgdmFyIGlkQWNjaW9uZXMgPSBcImFjY2lvbmVzLVwiICsgaWQ7XHJcbiAgICByZXR1cm4gPGRpdlxyXG4gICAgICAgIGNsYXNzTmFtZT1cImVuY2FiZXphZG9cIlxyXG4gICAgICAgIGRlYmUtbGVlcj17cHJvcHMubGVlciA/ICdTSScgOiAnTk8nfVxyXG4gICAgICAgIHN0eWxlPXtwcm9wcy5zdHlsZX1cclxuICAgID5cclxuICAgICAgICA8ZGl2IGlkPXtpZH0gY2xhc3NOYW1lPVwiaWQtZGl2XCIgdGl0bGU9e2Ake2Nhc2lsbGVyby5jYXNpbGxlcm99IC0gJHtjYXNpbGxlcm8udmFyX25hbWV9YH1cclxuICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdmFyIGRpdiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkQWNjaW9uZXMpO1xyXG4gICAgICAgICAgICAgICAgZGl2IS5zZXRBdHRyaWJ1dGUoXCJhY2Npb24tdmlzaWJsZVwiLCAoMSAtIE51bWJlcihkaXYhLmdldEF0dHJpYnV0ZShcImFjY2lvbi12aXNpYmxlXCIpKSkudG9TdHJpbmcoKSk7XHJcbiAgICAgICAgICAgICAgICAvLyBUT0RPLiBWZXIgcXXDqSBoYWNlbW9zIGN1YW5kbyBzZSB0b2NhIGVsIElEIGRlIGxhIHByZWd1dG5hXHJcbiAgICAgICAgICAgICAgICBkaXNwYXRjaEJ5UGFzcyhhY2Npb25faWRfcHJlZ3VudGEsIHsgcHJlZ3VudGE6IGNhc2lsbGVyby5jYXNpbGxlcm8gYXMgSWRQcmVndW50YSwgZm9yUGsgfSk7XHJcbiAgICAgICAgICAgIH19XHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImlkXCI+XHJcbiAgICAgICAgICAgICAgICB7dmVyX2lkfVxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgeyhjYXNpbGxlcm8udGlwb3ZhciA9PSBcInNpX25vXCIgfHwgY2FzaWxsZXJvLnRpcG92YXIgPT0gXCJvcGNpb25lc1wiKSA/IDxDYW1wbyBkaXNhYmxlZD17ZmFsc2V9IHByZWd1bnRhPXtjYXNpbGxlcm8gYXMgdW5rbm93biBhcyBQcmVndW50YVNpbXBsZX0gZm9yUGs9e2ZvclBrfSBtaW5pPXt0cnVlfSBoaWRkZW49eyFjb25DYW1wb09wY2lvbmVzICYmICdxdWl0YXInfSAvPiA6IG51bGx9XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYWNjaW9uZXMtcHJlZ3VudGFcIiBpZD17aWRBY2Npb25lc30gYWNjaW9uLXZpc2libGU9XCIwXCI+XHJcbiAgICAgICAgICAgICAgICB7Y2FzaWxsZXJvLnZhcl9uYW1lID8gPGRpdj48QnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgaWQ9e1wiYm9ycmFyLXByZWd1bnRhLVwiICsgY2FzaWxsZXJvLnZhcl9uYW1lfVxyXG4gICAgICAgICAgICAgICAgICAgIG1pLXZhcmlhYmxlPXtjYXNpbGxlcm8udmFyX25hbWV9XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyaWFudD1cIm91dGxpbmVkXCJcclxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJib3Rvbi1wcmVndW50YS1ib3JyYXJcIlxyXG4gICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZUNsaWNrQm9ycmFyfVxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgIDxJQ09OLkRlbGV0ZUZvcmV2ZXIgLz5cclxuICAgICAgICAgICAgICAgIDwvQnV0dG9uPjwvZGl2PiA6IG51bGx9XHJcbiAgICAgICAgICAgICAgICB7Y2FzaWxsZXJvLnZhcl9uYW1lID8gKG5zX25jID0+IDxkaXY+PEJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgIGlkPXtcIm5zbmMtcHJlZ3VudGEtXCIgKyBjYXNpbGxlcm8udmFyX25hbWV9XHJcbiAgICAgICAgICAgICAgICAgICAgbWktdmFyaWFibGU9e2Nhc2lsbGVyby52YXJfbmFtZX1cclxuICAgICAgICAgICAgICAgICAgICB2YXJpYW50PVwib3V0bGluZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImJvdG9uLXByZWd1bnRhLW5zbmNcIlxyXG4gICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2hCeVBhc3MoYWNjaW9uX3JlZ2lzdHJhcl9yZXNwdWVzdGEsIHsgcmVzcHVlc3RhOiBuc19uYywgdmFyaWFibGU6IGNhc2lsbGVyby52YXJfbmFtZSBhcyBJZFZhcmlhYmxlLCBmb3JQazogZm9yUGsgfSlcclxuICAgICAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgIE5TL05DXHJcbiAgICAgICAgICAgICAgICA8L0J1dHRvbj48L2Rpdj4pKGNhc2lsbGVyby52YWxvcl9uc19uYyA/PyAtOSkgOiBudWxsfVxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm5vbWJyZS1kaXZcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJub21icmVcIj57YnJlYWtlYWJsZVRleHQoY2FzaWxsZXJvLm5vbWJyZSl9XHJcbiAgICAgICAgICAgICAgICB7Y2FzaWxsZXJvLmVzcGVjaWFsPy5ncHMgP1xyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8QnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIHZhcmlhbnQ9XCJvdXRsaW5lZFwiIHN0eWxlPXt7IG1hcmdpbkxlZnQ6ICcxMHB4JyB9fSBvbkNsaWNrPXsoX2V2ZW50KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2YXJOYW1lID0gY2FzaWxsZXJvLnZhcl9uYW1lITtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGFncmVnYXJJbmZvR1BTID0gKGluZm86IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgcmVzcHVlc3RhczogckFjdHVhbGVzIH0gPSByZXNwdWVzdGFzRm9yUGsoZm9yUGspO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbG9yQWN0dWFsID0gckFjdHVhbGVzW3Zhck5hbWVdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBhdXggPSBKU09OLnBhcnNlKHZhbG9yQWN0dWFsPy50b1N0cmluZygpIHx8IFwiW11cIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV4LnVuc2hpZnQoaW5mbyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRpc3BhdGNoQnlQYXNzKGFjY2lvbl9yZWdpc3RyYXJfcmVzcHVlc3RhLCB7IGZvclBrOiBwcm9wcy5mb3JQaywgdmFyaWFibGU6IHZhck5hbWUsIHJlc3B1ZXN0YTogSlNPTi5zdHJpbmdpZnkoYXV4KSB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB7IHNpZ3VpZW50ZVZhcmlhYmxlIH0gPSBhZ3JlZ2FySW5mb0dQUyhgJHtkYXRldGltZS5ub3coKS50b1ltZEhtcygpfSAtIGVzcGVyYW5kbyBwdW50byBncHNgKSB8fCB7fTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzaWd1aWVudGVWYXJpYWJsZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZm9jYXJFbGVtZW50b0RlVmFyaWFibGUoc2lndWllbnRlVmFyaWFibGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmF2aWdhdG9yLmdlb2xvY2F0aW9uLmdldEN1cnJlbnRQb3NpdGlvbihwb3NpdGlvbiA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgeyBsYXRpdHVkZSwgbG9uZ2l0dWRlLCBhbHRpdHVkZSwgYWNjdXJhY3ksIGFsdGl0dWRlQWNjdXJhY3ksIGhlYWRpbmcsIHNwZWVkIH0gPSBwb3NpdGlvbi5jb29yZHM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGF0YVRvU2F2ZSA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29vcmRzOiB7IGxhdGl0dWRlLCBsb25naXR1ZGUsIGFsdGl0dWRlLCBhY2N1cmFjeSwgYWx0aXR1ZGVBY2N1cmFjeSwgaGVhZGluZywgc3BlZWQgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZXN0YW1wOiBwb3NpdGlvbi50aW1lc3RhbXBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFncmVnYXJJbmZvR1BTKEpTT04uc3RyaW5naWZ5KGRhdGFUb1NhdmUpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIGUgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFncmVnYXJJbmZvR1BTKGUubWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCB7IGVuYWJsZUhpZ2hBY2N1cmFjeTogdHJ1ZSwgdGltZW91dDogMTAwMDAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfT48SUNPTi5Mb2NhdGlvbiAvPjwvQnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA6IG51bGx9XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICB7Y2FzaWxsZXJvLmFjbGFyYWNpb24gP1xyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJhY2xhcmFjaW9uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge2Nhc2lsbGVyby5zYWx0byAmJiBjYXNpbGxlcm8udGlwb2MgPT0gJ0ZJTFRSTycgP1xyXG4gICAgICAgICAgICAgICAgICAgICAgICA8U2FsdG9EZXNwbGllZ3VlIGNhc2lsbGVybz17Y2FzaWxsZXJvfSBwcmVmaWpvPXticmVha2VhYmxlVGV4dChjYXNpbGxlcm8uYWNsYXJhY2lvbikhfSAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrZWFibGVUZXh0KGNhc2lsbGVyby5hY2xhcmFjaW9uKVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgOiBudWxsfVxyXG4gICAgICAgICAgICB7Z2V0TG9zTWV0YWRhdG9zKGNhc2lsbGVybyl9XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxufVxyXG5cclxuZnVuY3Rpb24gRGVzcGxlZ2FyQ29uZmlybWFyQm9ycmFyUmVzcHVlc3RhKHByb3BzOiB7IGZvclBrOiBGb3JQaywgdmFyaWFibGVCb3JyYXI6IElkVmFyaWFibGUgfSkge1xyXG4gICAgdmFyIFtvcGVuLCBzZXRPcGVuXSA9IHVzZVN0YXRlKCEhcHJvcHMudmFyaWFibGVCb3JyYXIpXHJcbiAgICBjb25zdCBkaXNwYXRjaCA9IHVzZURpc3BhdGNoKCk7XHJcbiAgICBjb25zdCBoYW5kbGVDbG9zZSA9ICgpID0+IHtcclxuICAgICAgICBkaXNwYXRjaChkaXNwYXRjaGVycy5DT05GSVJNQVJfQk9SUkFSX1JFU1BVRVNUQSh7IGZvclBrOiBwcm9wcy5mb3JQaywgdmFyaWFibGU6IG51bGwgfSkpO1xyXG4gICAgICAgIHNldE9wZW4oZmFsc2UpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIDxQb3BvdmVyXHJcbiAgICAgICAgaWQ9e1wicG9wb3Zlci1jb25maXJtYXJcIn1cclxuICAgICAgICBvcGVuPXtvcGVufVxyXG4gICAgICAgIG9uQ2xvc2U9e2hhbmRsZUNsb3NlfVxyXG4gICAgICAgIGFuY2hvck9yaWdpbj17e1xyXG4gICAgICAgICAgICB2ZXJ0aWNhbDogJ2JvdHRvbScsXHJcbiAgICAgICAgICAgIGhvcml6b250YWw6ICdjZW50ZXInLFxyXG4gICAgICAgIH19XHJcbiAgICAgICAgdHJhbnNmb3JtT3JpZ2luPXt7XHJcbiAgICAgICAgICAgIHZlcnRpY2FsOiAndG9wJyxcclxuICAgICAgICAgICAgaG9yaXpvbnRhbDogJ2xlZnQnLFxyXG4gICAgICAgIH19XHJcbiAgICA+XHJcbiAgICAgICAgPFR5cG9ncmFwaHk+TGEgcHJlZ3VudGEgdGllbmUgcmVnaXN0cmFkYSB1bmEgcmVzcHVlc3RhIHF1ZSBubyBmdWUgZGV0ZWN0YWRhIGNvbW8gZXJyw7NuZWE8L1R5cG9ncmFwaHk+XHJcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJjb25maXJtYS1ib3RvbmVzXCI+XHJcbiAgICAgICAgICAgIDxCdXR0b24gY29sb3I9XCJzZWNvbmRhcnlcIiB2YXJpYW50PVwib3V0bGluZWRcIiBvbkNsaWNrPXsoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAocHJvcHMudmFyaWFibGVCb3JyYXIpIHtcclxuICAgICAgICAgICAgICAgICAgICBkaXNwYXRjaEJ5UGFzcyhhY2Npb25fcmVnaXN0cmFyX3Jlc3B1ZXN0YSwgeyBmb3JQazogcHJvcHMuZm9yUGssIHZhcmlhYmxlOiBwcm9wcy52YXJpYWJsZUJvcnJhciwgcmVzcHVlc3RhOiBudWxsIH0pXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBoYW5kbGVDbG9zZSgpO1xyXG4gICAgICAgICAgICB9fT5ib3JyYXIgcmVzcHVlc3RhPC9CdXR0b24+XHJcbiAgICAgICAgICAgIDxCdXR0b24gY29sb3I9XCJwcmltYXJ5XCIgdmFyaWFudD1cIm91dGxpbmVkXCIgb25DbGljaz17aGFuZGxlQ2xvc2V9PnZvbHZlciBzaW4gYm9ycmFyPC9CdXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L1BvcG92ZXI+O1xyXG59XHJcblxyXG5mdW5jdGlvbiBjYWxjdWxhck51ZXN0cmFMb25naXR1ZChsb25naXR1ZDogc3RyaW5nIHwgbnVtYmVyIHwgbnVsbCB8IHVuZGVmaW5lZCkge1xyXG4gICAgcmV0dXJuIGxvbmdpdHVkO1xyXG59XHJcblxyXG5mdW5jdGlvbiBlbmZvY2FyRWxlbWVudG9EZVZhcmlhYmxlKHNpZ3VpZW50ZVZhcmlhYmxlOiBJZFZhcmlhYmxlIHwgSWRGaW4pIHtcclxuICAgIGRlYmVTYWx0YXIgPSBmYWxzZTtcclxuICAgIHZhciB7IHRvcCwgZW5mb2NhZG8sIGVsZW1lbnRvSW5wdXRWYXJpYWJsZSB9ID0gY2FsY3VsYXJFbGVtZW50b0VuZm9jYWRvKHNpZ3VpZW50ZVZhcmlhYmxlKTtcclxuICAgIGlmICh0b3AgIT0gbnVsbCAmJiB0b3AgPiAwICYmICghZW5mb2NhZG8gfHwgXCJzYWx0YSBzaWVtcHJlXCIpKSB7XHJcbiAgICAgICAgd2luZG93LnNjcm9sbFRvKHsgdG9wLCBsZWZ0OiAwLCBiZWhhdmlvcjogJ3Ntb290aCcgfSk7XHJcbiAgICB9XHJcbiAgICBlbGVtZW50b0lucHV0VmFyaWFibGU/LmZvY3VzKCk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIENhbXBvKHByb3BzOiB7IGRpc2FibGVkOiBib29sZWFuLCBwcmVndW50YTogUHJlZ3VudGFTaW1wbGUgfCBQcmVndW50YUNvbk9wY2lvbmVzIHwgUHJlZ3VudGFDb25TaU5vIHwgT3BjaW9uTXVsdGlwbGUsIGZvclBrOiBGb3JQaywgbWluaT86IGJvb2xlYW4sIGhpZGRlbj86IGJvb2xlYW4gfCAncXVpdGFyJyB9KSB7XHJcbiAgICB2YXIgeyBwcmVndW50YSwgZGlzYWJsZWQsIG1pbmkgfSA9IHByb3BzO1xyXG4gICAgdmFyIHsgc2FsdG9BdXRvbWF0aWNvLCBjb25DYW1wb09wY2lvbmVzIH0gPSB1c2VTZWxlY3Rvcigoc3RhdGU6IENhc29TdGF0ZSkgPT4gc3RhdGUub3BjaW9uZXMpO1xyXG4gICAgY29uc3QgbG9uZ2l0dWQgPSBtaW5pID8gcHJlZ3VudGEuY2FzaWxsZXJvcy5yZWR1Y2UoKGFjdW0sIG8pID0+IE1hdGgubWF4KG8uY2FzaWxsZXJvLnRvU3RyaW5nKCkubGVuZ3RoLCBhY3VtKSwgMCkgOlxyXG4gICAgICAgIHByZWd1bnRhLmxvbmdpdHVkO1xyXG4gICAgLy8gdmFyIFt2YWxvciwgc2V0VmFsb3JdID0gdXNlU3RhdGUocHJvcHMudmFsb3IpO1xyXG4gICAgdmFyIFtlZGl0YW5kbywgc2V0RWRpdGFuZG9dID0gdXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgLy8gdXNlRWZmZWN0KCgpID0+IHtcclxuICAgIC8vICAgICBzZXRWYWxvcihwcm9wcy52YWxvcilcclxuICAgIC8vIH0sIFtwcm9wcy52YWxvcl0pO1xyXG4gICAgY29uc3QgaW5wdXRQcm9wcyA9IHtcclxuICAgICAgICBtYXhMZW5ndGg6IGxvbmdpdHVkLFxyXG4gICAgICAgIGVudGVyS2V5SGludDogXCJuZXh0XCIgYXMgY29uc3QsXHJcbiAgICB9O1xyXG4gICAgY29uc3Qgb25DaGFuZ2UgPSAobnVldm9WYWxvcjogVmFsb3IgfCB0eXBlb2YgTk9fQ0FNQklBUl9fVkVSSUZJQ0FSX1NJX0VTX05FQ0VTQVJJTykgPT4ge1xyXG4gICAgICAgIHZhciB7IHNpZ3VpZW50ZVZhcmlhYmxlIH0gPSBkaXNwYXRjaEJ5UGFzcyhhY2Npb25fcmVnaXN0cmFyX3Jlc3B1ZXN0YSwgeyBmb3JQazogcHJvcHMuZm9yUGssIHZhcmlhYmxlOiBwcmVndW50YS52YXJfbmFtZSBhcyBJZFZhcmlhYmxlLCByZXNwdWVzdGE6IG51ZXZvVmFsb3IgfSk7XHJcbiAgICAgICAgaWYgKHNpZ3VpZW50ZVZhcmlhYmxlICYmIGRlYmVTYWx0YXIpIHtcclxuICAgICAgICAgICAgKHByZWd1bnRhLmVzcGVjaWFsPy5ub1Njcm9sbCA9PSB0cnVlKSA/IG51bGwgOiBlbmZvY2FyRWxlbWVudG9EZVZhcmlhYmxlKHByZWd1bnRhLmVzcGVjaWFsPy5zY3JvbGxUbyA/PyBzaWd1aWVudGVWYXJpYWJsZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIGNvbnN0IGhhbmRsZVN1Ym1pdCA9ICh7IGVzQm90b25Db25maXJtYXIgfTogeyBlc0JvdG9uQ29uZmlybWFyOiBib29sZWFuIH0pID0+IHtcclxuICAgICAgICBkZWJlU2FsdGFyID0gZXNCb3RvbkNvbmZpcm1hciA/IHRydWUgOiAoc2FsdG9BdXRvbWF0aWNvIHx8IGNvbkNhbXBvT3BjaW9uZXMpO1xyXG4gICAgICAgIFxyXG4gICAgICAgIHZhciBpc0lucHV0Rm9jdXNlZCA9IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgJiYgKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQudGFnTmFtZSA9PT0gJ0lOUFVUJyB8fCBkb2N1bWVudC5hY3RpdmVFbGVtZW50LnRhZ05hbWUgPT09ICdURVhUQVJFQScpO1xyXG4gICAgICAgIGlmIChpc0lucHV0Rm9jdXNlZCkge1xyXG4gICAgICAgICAgICBpZiAoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XHJcbiAgICAgICAgICAgICAgICBkb2N1bWVudC5hY3RpdmVFbGVtZW50LmJsdXIoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHZhciBlbGVtZW50b0lucHV0VmFyaWFibGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgdmFyLSR7cHJlZ3VudGEudmFyX25hbWUgfHwgJyd9YCkgYXMgSFRNTElucHV0RWxlbWVudDtcclxuICAgICAgICAgICAgb25DaGFuZ2UoZWxlbWVudG9JbnB1dFZhcmlhYmxlID8gZWxlbWVudG9JbnB1dFZhcmlhYmxlLnZhbHVlIDogTk9fQ0FNQklBUl9fVkVSSUZJQ0FSX1NJX0VTX05FQ0VTQVJJTyk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICB2YXIgbnVlc3RyYUxvbmdpdHVkID0gY2FsY3VsYXJOdWVzdHJhTG9uZ2l0dWQocHJlZ3VudGEubG9uZ2l0dWQgfHwgbG9uZ2l0dWQpXHJcbiAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9XCJjYW1wb1wiIG51ZXN0cmEtbG9uZ2l0dWQ9e251ZXN0cmFMb25naXR1ZH0gc3R5bGU9e3Byb3BzLmhpZGRlbiA9PSAncXVpdGFyJyA/IHsgZGlzcGxheTogJ25vbmUnIH0gOiBwcm9wcy5oaWRkZW4gPyB7IHZpc2liaWxpdHk6ICdoaWRkZW4nIH0gOiB1bmRlZmluZWR9PlxyXG4gICAgICAgIHttaW5pID8gbnVsbCA6IDxCb3RvbkJvcnJhclxyXG4gICAgICAgICAgICBpZD17YGJvcnJhci1hYmllcnRhLSR7cHJlZ3VudGEudmFyX25hbWV9YH1cclxuICAgICAgICAgICAgdmFyaWFibGU9e3ByZWd1bnRhLnZhcl9uYW1lfVxyXG4gICAgICAgICAgICBmb3JQaz17cHJvcHMuZm9yUGt9XHJcbiAgICAgICAgLz59XHJcbiAgICAgICAgPGZvcm0gXHJcbiAgICAgICAgICAgIGNsYXNzTmFtZT1cImZvcm0tY2FtcG8td3JhcHBlclwiIFxyXG4gICAgICAgICAgICBzdHlsZT17eyBkaXNwbGF5OiAnY29udGVudHMnIH19IFxyXG4gICAgICAgICAgICBvblN1Ym1pdD17KGUpID0+IHtcclxuICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgIGhhbmRsZVN1Ym1pdCh7IGVzQm90b25Db25maXJtYXI6IGZhbHNlIH0pO1xyXG4gICAgICAgICAgICB9fVxyXG4gICAgICAgID5cclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJpbnB1dC1jYW1wb1wiPlxyXG4gICAgICAgICAgICAgICAgPFRleHRGaWVsZFxyXG4gICAgICAgICAgICAgICAgICAgIGlkPXtgdmFyLSR7cHJlZ3VudGEudmFyX25hbWUgfHwgJyd9YH1cclxuICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17ZGlzYWJsZWQgfHwgcHJlZ3VudGEuZXNwZWNpYWw/Lmdwc31cclxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ2YXJpYWJsZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgLy92YXItbGVuZ3RoPXtwcmVndW50YS5sb25naXR1ZH0gXHJcbiAgICAgICAgICAgICAgICAgICAgZnVsbFdpZHRoPXt0cnVlfVxyXG4gICAgICAgICAgICAgICAgICAgIGlucHV0UHJvcHM9e2lucHV0UHJvcHN9XHJcbiAgICAgICAgICAgICAgICAgICAgdHlwZT17cHJlZ3VudGEuZGVzcGxpZWd1ZVRpcG9JbnB1dCA/PyBhZGFwdGFyVGlwb1ZhckNhc2lsbGVybyhwcmVndW50YS50aXBvdmFyKX1cclxuICAgICAgICAgICAgICAgICAgICBvbkZvY3VzPXsoX2V2ZW50KSA9PiBzZXRFZGl0YW5kbyh0cnVlKX1cclxuICAgICAgICAgICAgICAgICAgICBvbkJsdXI9eyhfZXZlbnQsIHZhbG9yKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlKHZhbG9yKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0RWRpdGFuZG8oZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgICAgICAgb25LZXlEb3duPXsoZXZlbnQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVzRW50ZXIgPSAoZXZlbnQua2V5ID09ICdFbnRlcicgfHwgZXZlbnQua2V5Q29kZSA9PSAxMylcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVzRW50ZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVTdWJtaXQoeyBlc0JvdG9uQ29uZmlybWFyOiBmYWxzZSB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAge2Rpc2FibGVkIHx8IHByZWd1bnRhLmVzcGVjaWFsPy5ncHMgfHwgbWluaSA/IG51bGwgOlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJib3Rvbi1jb25maXJtYXItY2FtcG9cIj5cclxuICAgICAgICAgICAgICAgICAgICA8QnV0dG9uIHZhcmlhbnQ9e2VkaXRhbmRvID8gXCJjb250YWluZWRcIiA6ICdvdXRsaW5lZCd9IHNpemU9XCJzbWFsbFwiIGNvbG9yPXtlZGl0YW5kbyA/ICdwcmltYXJ5JyA6ICdkZWZhdWx0J31cclxuICAgICAgICAgICAgICAgICAgICAgICAgYm90b24tY29uZmlybWFyPXtwcmVndW50YS52YXJfbmFtZX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgdGFiSW5kZXg9ey0xfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KGU6IFJlYWN0Lk1vdXNlRXZlbnQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZVN1Ym1pdCh7IGVzQm90b25Db25maXJtYXI6IHRydWUgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgICAgICAgPjxJQ09OLkNoZWNrIC8+PC9CdXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIDwvZm9ybT5cclxuICAgIDwvZGl2PlxyXG59XHJcblxyXG5pbnRlcmZhY2UgSWNhc2lsbGVyb0Nvbk9wY2lvbmVzIHtcclxuICAgIHZhcl9uYW1lOiBJZFZhcmlhYmxlLFxyXG4gICAgY2FzaWxsZXJvczogT3BjaW9uW11cclxufVxyXG5cclxuZnVuY3Rpb24gT3BjaW9uZXNEZXNwbGllZ3VlKFxyXG4gICAgeyBjYXNpbGxlcm9Db25PcGNpb25lcywgZm9yUGssIGxlZXIsIGRlc3BsaWVndWVDb250ZW5pZG8gfTpcclxuICAgICAgICB7IGNhc2lsbGVyb0Nvbk9wY2lvbmVzOiBJY2FzaWxsZXJvQ29uT3BjaW9uZXMsIGZvclBrOiBGb3JQaywgbGVlcjogYm9vbGVhbiwgZGVzcGxpZWd1ZUNvbnRlbmlkbzogJ3ZlcnRpY2FsJyB8ICdob3Jpem9udGFsJyB9XHJcbikge1xyXG4gICAgY29uc3QgZGVzcGxlZ2FyT3Ryb3MgPSAob3BjaW9uOiBPcGNpb24sIHNvbG9QYXJhRGVzcGxpZWd1ZTogJ3ZlcnRpY2FsJyB8ICdob3Jpem9udGFsJyB8IG51bGwpID0+IG9wY2lvbi5jYXNpbGxlcm9zLm1hcCgoc3ViUHJlZ3VudGE6IFByZWd1bnRhKSA9PiAoXHJcbiAgICAgICAgc29sb1BhcmFEZXNwbGllZ3VlID09IG51bGwgfHwgc29sb1BhcmFEZXNwbGllZ3VlID09IHN1YlByZWd1bnRhLmRlc3BsaWVndWVDb250ZW5pZG8gP1xyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm90cm9zLWVzcGVjaWZpY2FyXCIgc3R5bGU9e3sgd2lkdGg6ICcxMDAlJyB9fSBrZXk9e3N1YlByZWd1bnRhLmlkX2Nhc2lsbGVyb30+XHJcbiAgICAgICAgICAgICAgICA8UHJlZ3VudGFEZXNwbGllZ3VlXHJcbiAgICAgICAgICAgICAgICAgICAgcHJlZ3VudGE9e3N1YlByZWd1bnRhfVxyXG4gICAgICAgICAgICAgICAgICAgIGZvclBrPXtmb3JQa31cclxuICAgICAgICAgICAgICAgICAgICBkZXNwbGllZ3VlRW5jYWJlemFkbz0nc3VwZXJpb3InXHJcbiAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICA8L2Rpdj4gOiBudWxsXHJcbiAgICApKVxyXG4gICAgcmV0dXJuIDw+PGRpdiBjbGFzc05hbWU9XCJjb250ZW5pZG9cIj5cclxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm9wY2lvbmVzXCIgZGVzcGxpZWd1ZS1jb250ZW5pZG89e2Rlc3BsaWVndWVDb250ZW5pZG8gPz8gJ3ZlcnRpY2FsJ30+XHJcbiAgICAgICAgICAgIHtjYXNpbGxlcm9Db25PcGNpb25lcy5jYXNpbGxlcm9zLm1hcCgob3BjaW9uOiBPcGNpb24sIGk6IG51bWJlcikgPT5cclxuICAgICAgICAgICAgICAgIDxHcmlkIGtleT17b3BjaW9uLmlkX2Nhc2lsbGVyb30gaXRlbVxyXG4gICAgICAgICAgICAgICAgICAgIG9jdWx0YXItc2FsdGVhZGE9e29wY2lvbi5kZXNwbGllZ3VlT2N1bHRhID8gKG9wY2lvbi5leHByZXNpb25faGFiaWxpdGFyX2pzID8gJ0lOSEFCSUxJVEFSJyA6ICdTSScpIDogJ05PJ31cclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICA8T3BjaW9uRGVzcGxpZWd1ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNpbGxlcm89e29wY2lvbn1cclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGU9e2Nhc2lsbGVyb0Nvbk9wY2lvbmVzLnZhcl9uYW1lfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWxvck9wY2lvbj17b3BjaW9uLmNhc2lsbGVyb31cclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yUGs9e2ZvclBrfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZWVyPXtsZWVyfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25Cb3RvbkJvcnJhcj17aSA9PSAwIHx8IGRlc3BsaWVndWVDb250ZW5pZG8gIT0gJ2hvcml6b250YWwnfVxyXG4gICAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICAgICAge2Rlc3BsaWVndWVDb250ZW5pZG8gPT0gJ2hvcml6b250YWwnID8gbnVsbCA6IGRlc3BsZWdhck90cm9zKG9wY2lvbiwgbnVsbCl9XHJcbiAgICAgICAgICAgICAgICA8L0dyaWQ+XHJcbiAgICAgICAgICAgICl9XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgICAgICB7ZGVzcGxpZWd1ZUNvbnRlbmlkbyA9PSAnaG9yaXpvbnRhbCcgPyBjYXNpbGxlcm9Db25PcGNpb25lcy5jYXNpbGxlcm9zLm1hcCgob3BjaW9uOiBPcGNpb24pID0+XHJcbiAgICAgICAgICAgIGRlc3BsZWdhck90cm9zKG9wY2lvbiwgbnVsbClcclxuICAgICAgICApIDogbnVsbH08Lz5cclxufVxyXG5cclxuY29uc3Qgbm9tYnJlQ2FzaWxsZXJvID0ge1xyXG4gICAgRjogJ2Zvcm11bGFyaW8nLFxyXG4gICAgQjogJ2Jsb3F1ZScsXHJcbiAgICBQOiAncHJlZ3VudGEnLFxyXG4gICAgQ1A6ICdjb25qdW50b3ByZWd1bnRhcycsXHJcbiAgICBPOiAnb3BjaW9uJyxcclxuICAgIE9NOiAnbXVsdGlwbGUnLFxyXG4gICAgRklMVFJPOiAnZmlsdHJvJyxcclxuICAgIENPTlM6ICdjb25zaXN0ZW5jaWEnLFxyXG4gICAgQkY6ICdib3RvbmZvcm11bGFyaW8nLFxyXG4gICAgVEVYVE86ICdhY2xhcmFjaW9uc3VwZXJpb3InLFxyXG4gICAgUE1BVFJJWjogJ3ByZWd1bnRhZW5mb3JtYWRlbWF0cml6JyxcclxufVxyXG5cclxuZnVuY3Rpb24gRGVzcGxlZ2FyQ2FzaWxsZXJvKHByb3BzOiB7XHJcbiAgICBjYXNpbGxlcm86IFByZWd1bnRhIHwgQmxvcXVlIHwgRmlsdHJvIHwgQ29uanVudG9QcmVndW50YXMgfCBCb3RvbkZvcm11bGFyaW8gfCBDb25zaXN0ZW5jaWEgfCBPcGNpb25NdWx0aXBsZSB8IFRleHRvIHwgUE1hdHJpeixcclxuICAgIGlkPzogc3RyaW5nLFxyXG4gICAgc3R5bGU/OiBSZWFjdC5DU1NQcm9wZXJ0aWVzLFxyXG4gICAgZGVzcGxpZWd1ZUVuY2FiZXphZG8/OiAnbGF0ZXJhbCcgfCAnc3VwZXJpb3InXHJcbiAgICBjaGlsZHJlbjogUmVhY3QuUmVhY3ROb2RlIHwgUmVhY3QuUmVhY3ROb2RlW10sXHJcbiAgICBcIm9jdWx0YXItc2FsdGVhZGFcIj86ICdTSScgfCAnTk8nIHwgJ0lOSEFCSUxJVEFSJyB8IHVuZGVmaW5lZFxyXG59KSB7XHJcbiAgICByZXR1cm4gPGRpdlxyXG4gICAgICAgIGtleT17YCR7cHJvcHMuY2FzaWxsZXJvLnRpcG9jfS0ke3Byb3BzLmlkIHx8IHByb3BzLmNhc2lsbGVyby5pZF9jYXNpbGxlcm99YH1cclxuICAgICAgICBjbGFzc05hbWU9e2BjYXNpbGxlcm8gJHtub21icmVDYXNpbGxlcm9bcHJvcHMuY2FzaWxsZXJvLnRpcG9jXX1gfVxyXG4gICAgICAgIGlkPXtwcm9wcy5pZH1cclxuICAgICAgICBzdHlsZT17cHJvcHMuc3R5bGV9XHJcbiAgICAgICAgZGVzcGxpZWd1ZS1lbmNhYmV6YWRvPXtwcm9wcy5jYXNpbGxlcm8uZGVzcGxpZWd1ZUVuY2FiZXphZG8gPz8gcHJvcHMuZGVzcGxpZWd1ZUVuY2FiZXphZG8gPz8gJ3N1cGVyaW9yJ31cclxuICAgICAgICBvY3VsdGFyLXNhbHRlYWRhPXtwcm9wc1tcIm9jdWx0YXItc2FsdGVhZGFcIl19XHJcbiAgICA+e3Byb3BzLmNoaWxkcmVufTwvZGl2PlxyXG59XHJcblxyXG5mdW5jdGlvbiBQcmVndW50YURlc3BsaWVndWUocHJvcHM6IHtcclxuICAgIHByZWd1bnRhOiBQcmVndW50YSxcclxuICAgIGZvclBrOiBGb3JQayxcclxuICAgIGRlc3BsaWVndWVFbmNhYmV6YWRvOiAnbGF0ZXJhbCcgfCAnc3VwZXJpb3InLFxyXG4gICAgcGFyYVBNYXRyaXo/OiB0cnVlXHJcbn0pIHtcclxuICAgIHZhciB7IHByZWd1bnRhIH0gPSBwcm9wcztcclxuICAgIGNvbnN0IGRpc3BhdGNoID0gdXNlRGlzcGF0Y2goKTtcclxuICAgIHZhciBlc3RhZG86IEVzdGFkb1ZhcmlhYmxlO1xyXG4gICAgdmFyIGlkID0gYHByZWd1bnRhLSR7cHJlZ3VudGEuaWRfY2FzaWxsZXJvfWBcclxuICAgIHJlZ2lzdHJhckVsZW1lbnRvKHtcclxuICAgICAgICBpZCxcclxuICAgICAgICBkaXJlY3Q6IHRydWUsXHJcbiAgICAgICAgZnVuOiByZWdpc3RyYWRvckRlVmFyaWFibGUocHJlZ3VudGEpXHJcbiAgICB9KVxyXG4gICAgdmFyIGlkID0gYHByZWd1bnRhLSR7cHJlZ3VudGEuaWRfY2FzaWxsZXJvfWBcclxuICAgIHZhciBzdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHt9XHJcbiAgICBpZiAocHJlZ3VudGEuZGVzcGxpZWd1ZSA9PSAnZ3JpZCcpIHtcclxuICAgICAgICBzdHlsZS5kaXNwbGF5ID0gJ2dyaWQnO1xyXG4gICAgICAgIHN0eWxlLmdyaWRUZW1wbGF0ZUNvbHVtbnMgPSAncmVwZWF0KDMsMWZyKSc7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHByb3BzLnBhcmFQTWF0cml6ID9cclxuICAgICAgICA8PlxyXG4gICAgICAgICAgICB7Z2V0TG9zTWV0YWRhdG9zKHByZWd1bnRhKX1cclxuICAgICAgICAgICAgPENhbXBvXHJcbiAgICAgICAgICAgICAgICBkaXNhYmxlZD17cHJlZ3VudGEuY2FsY3VsYWRhID8gdHJ1ZSA6IGZhbHNlfVxyXG4gICAgICAgICAgICAgICAgcHJlZ3VudGE9e3ByZWd1bnRhIGFzIHVua25vd24gYXMgUHJlZ3VudGFTaW1wbGV9XHJcbiAgICAgICAgICAgICAgICBmb3JQaz17cHJvcHMuZm9yUGt9XHJcbiAgICAgICAgICAgICAgICBtaW5pPXt0cnVlfVxyXG4gICAgICAgICAgICAvPlxyXG4gICAgICAgIDwvPlxyXG4gICAgICAgIDogPERlc3BsZWdhckNhc2lsbGVyb1xyXG4gICAgICAgICAgICBpZD17aWR9XHJcbiAgICAgICAgICAgIGNhc2lsbGVybz17cHJlZ3VudGF9XHJcbiAgICAgICAgICAgIHN0eWxlPXtzdHlsZX1cclxuICAgICAgICAgICAgbnVlc3Ryby10aXBvdmFyPXtwcmVndW50YS50aXBvdmFyIHx8IFwibXVsdGlwbGVcIn1cclxuICAgICAgICAgICAgb2N1bHRhci1zYWx0ZWFkYT17cHJlZ3VudGEuZGVzcGxpZWd1ZU9jdWx0YSA/IChwcmVndW50YS5leHByZXNpb25faGFiaWxpdGFyX2pzID8gJ0lOSEFCSUxJVEFSJyA6ICdTSScpIDogJ05PJ31cclxuICAgICAgICAgICAgZGVzcGxpZWd1ZUVuY2FiZXphZG89e3Byb3BzLmRlc3BsaWVndWVFbmNhYmV6YWRvfVxyXG5cclxuICAgICAgICA+XHJcbiAgICAgICAgICAgIDxFbmNhYmV6YWRvRGVzcGxpZWd1ZVxyXG4gICAgICAgICAgICAgICAgY2FzaWxsZXJvPXtwcmVndW50YX1cclxuICAgICAgICAgICAgICAgIGxlZXI9e3ByZWd1bnRhLmxlZXIgIT09IGZhbHNlfVxyXG4gICAgICAgICAgICAgICAgZm9yUGs9e3Byb3BzLmZvclBrfVxyXG4gICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImNvbnRlbmlkb1wiPntcclxuICAgICAgICAgICAgICAgIHByZWd1bnRhLnRpcG92YXIgPT0gXCJzaV9ub1wiID8gPEdyaWQgY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDxTaU5vRGVzcGxpZWd1ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNpbGxlcm9Db25PcGNpb25lcz17cHJlZ3VudGF9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvclBrPXtwcm9wcy5mb3JQa31cclxuICAgICAgICAgICAgICAgICAgICAgICAgZGVzcGxpZWd1ZUNvbnRlbmlkbz17cHJvcHMucHJlZ3VudGEuZGVzcGxpZWd1ZUNvbnRlbmlkbyA/PyAndmVydGljYWwnfVxyXG4gICAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICA8L0dyaWQ+IDpcclxuICAgICAgICAgICAgICAgICAgICBwcmVndW50YS50aXBvdmFyID09IFwib3BjaW9uZXNcIiA/XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxPcGNpb25lc0Rlc3BsaWVndWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2lsbGVyb0Nvbk9wY2lvbmVzPXtwcmVndW50YX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvclBrPXtwcm9wcy5mb3JQa31cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlZXI9eyEhcHJlZ3VudGEubGVlcn1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3BsaWVndWVDb250ZW5pZG89e3ByZWd1bnRhLmRlc3BsaWVndWVDb250ZW5pZG8gPz8gJ3ZlcnRpY2FsJ31cclxuICAgICAgICAgICAgICAgICAgICAgICAgLz4gOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwcmVndW50YS50aXBvdmFyID09IG51bGwgP1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHByZWd1bnRhLmNhc2lsbGVyb3MgYXMgKE9wY2lvbk11bHRpcGxlIHwgQ29uc2lzdGVuY2lhKVtdKS5tYXAoKG9wY2lvbk11bHRpcGxlKSA9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wY2lvbk11bHRpcGxlLnRpcG9jID09ICdPTScgP1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8T3BjaW9uTXVsdGlwbGVEZXNwbGllZ3VlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk9e29wY2lvbk11bHRpcGxlLmlkX2Nhc2lsbGVyb31cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wY2lvbk09e29wY2lvbk11bHRpcGxlfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yUGs9e3Byb3BzLmZvclBrfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IC8vbGFzIGNvbnNpc3RlbmNpYXMgcHVlZGVuIHNlciBoZXJtYW5hcyBkZSBPTVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Q29uc2lzdGVuY2lhRGVzcGxpZWd1ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5PXtvcGNpb25NdWx0aXBsZS5pZF9jYXNpbGxlcm99XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNpbGxlcm89e29wY2lvbk11bHRpcGxlfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yUGs9e3Byb3BzLmZvclBrfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKChwcmVndW50YVNpbXBsZTogUHJlZ3VudGFTaW1wbGUpID0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPENhbXBvXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXtwcmVndW50YVNpbXBsZS5jYWxjdWxhZGEgPyB0cnVlIDogZmFsc2V9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWd1bnRhPXtwcmVndW50YVNpbXBsZX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yUGs9e3Byb3BzLmZvclBrfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApKHByZWd1bnRhKVxyXG4gICAgICAgICAgICB9PC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwicGllLXByZWd1bnRhXCI+XHJcbiAgICAgICAgICAgICAgICA8U2FsdG9EZXNwbGllZ3VlXHJcbiAgICAgICAgICAgICAgICAgICAgY2FzaWxsZXJvPXtwcmVndW50YX1cclxuICAgICAgICAgICAgICAgICAgICBwcmVmaWpvPXtwcmVndW50YS50aXBvdmFyID09IFwib3BjaW9uZXNcIiA/IChcclxuICAgICAgICAgICAgICAgICAgICAgICAgcHJlZ3VudGEuY2FzaWxsZXJvcy5zb21lKG9wY2lvbiA9PiBvcGNpb24uc2FsdG8pID8gXCJyZXN0byBkZSBsYXMgb3BjaW9uZXNcIiA6IFwidG9kYXMgbGFzIG9wY2lvbmVzXCJcclxuICAgICAgICAgICAgICAgICAgICApIDogXCJcIn1cclxuICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvRGVzcGxlZ2FyQ2FzaWxsZXJvPlxyXG59XHJcblxyXG5mdW5jdGlvbiBQTWF0cml6RGVzcGxpZWd1ZShwcm9wczoge1xyXG4gICAgY2FzaWxsZXJvOiBQTWF0cml6LFxyXG4gICAgZm9yUGs6IEZvclBrLFxyXG59KSB7XHJcbiAgICB2YXIgeyBjYXNpbGxlcm8gfSA9IHByb3BzO1xyXG4gICAgdmFyIGlkID0gYHByZWd1bnRhLSR7Y2FzaWxsZXJvLmlkX2Nhc2lsbGVyb31gXHJcbiAgICBjb25zdCBjb2xzID0gKGNhc2lsbGVyby5jYXNpbGxlcm9zIGFzIChPcGNpb25NdWx0aXBsZSB8IENvbnNpc3RlbmNpYSlbXSlcclxuICAgICAgICAuZmluZCgob3BjaW9uTXVsdGlwbGUpID0+IG9wY2lvbk11bHRpcGxlLnRpcG9jID09ICdPTScpPy5jYXNpbGxlcm9zXHJcbiAgICAgICAgLm1hcCgocHJlZ3VudGEpID0+IHByZWd1bnRhLm5vbWJyZSk7XHJcbiAgICBjb25zdCB0ZFN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0geyB0ZXh0QWxpZ246ICdjZW50ZXInLCB3aWR0aDogY29scyA/ICg1NTAgLyAoY29scy5sZW5ndGgpKS50b1N0cmluZygpICsgJ3B4JyA6ICcnIH07XHJcbiAgICByZXR1cm4gPERlc3BsZWdhckNhc2lsbGVyb1xyXG4gICAgICAgIGlkPXtpZH1cclxuICAgICAgICBjYXNpbGxlcm89e2Nhc2lsbGVyb31cclxuICAgICAgICBvY3VsdGFyLXNhbHRlYWRhPXtjYXNpbGxlcm8uZGVzcGxpZWd1ZU9jdWx0YSA/IChjYXNpbGxlcm8uZXhwcmVzaW9uX2hhYmlsaXRhcl9qcyA/ICdJTkhBQklMSVRBUicgOiAnU0knKSA6ICdOTyd9XHJcbiAgICA+XHJcbiAgICAgICAgPEVuY2FiZXphZG9EZXNwbGllZ3VlXHJcbiAgICAgICAgICAgIGNhc2lsbGVybz17Y2FzaWxsZXJvfVxyXG4gICAgICAgICAgICBsZWVyPXtjYXNpbGxlcm8ubGVlciAhPT0gZmFsc2V9XHJcbiAgICAgICAgICAgIGZvclBrPXtwcm9wcy5mb3JQa31cclxuICAgICAgICAvPlxyXG4gICAgICAgIDx0YWJsZSBjbGFzc05hbWU9XCJ0YWJsZSB0YWJsZS1zdHJpcGVkXCI+XHJcbiAgICAgICAgICAgIDx0aGVhZD5cclxuICAgICAgICAgICAgICAgIDx0cj5cclxuICAgICAgICAgICAgICAgICAgICA8dGg+PC90aD5cclxuICAgICAgICAgICAgICAgICAgICB7Y29scz8ubWFwKChjb2wsIGkpID0+IDx0aCBrZXk9e2l9IHNjb3BlPVwiY29sXCIgc3R5bGU9e3RkU3R5bGV9Pntjb2x9PC90aD4pfVxyXG4gICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgPC90aGVhZD5cclxuICAgICAgICAgICAgPHRib2R5PlxyXG4gICAgICAgICAgICAgICAgeyhjYXNpbGxlcm8uY2FzaWxsZXJvcyBhcyAoT3BjaW9uTXVsdGlwbGUgfCBDb25zaXN0ZW5jaWEpW10pLm1hcCgob3BjaW9uTXVsdGlwbGUsIGkpID0+XHJcbiAgICAgICAgICAgICAgICAgICAgb3BjaW9uTXVsdGlwbGUudGlwb2MgPT0gJ09NJyA/XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ciBrZXk9e2l9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPntvcGNpb25NdWx0aXBsZS5ub21icmV9PC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtvcGNpb25NdWx0aXBsZS5jYXNpbGxlcm9zLm1hcCgocHJlZ3VudGEpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaWQgPSBgcHJlZ3VudGEtJHtwcmVndW50YS5pZF9jYXNpbGxlcm99YFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdHJhckVsZW1lbnRvKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdDogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuOiByZWdpc3RyYWRvckRlVmFyaWFibGUocHJlZ3VudGEgYXMgdW5rbm93biBhcyBQcmVndW50YSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiA8dGQga2V5PXtpZH0gaWQ9e2lkfT48UHJlZ3VudGFEZXNwbGllZ3VlIGZvclBrPXtwcm9wcy5mb3JQa30gcHJlZ3VudGE9e3ByZWd1bnRhIGFzIHVua25vd24gYXMgUHJlZ3VudGF9IGRlc3BsaWVndWVFbmNhYmV6YWRvPVwic3VwZXJpb3JcIiBwYXJhUE1hdHJpej17dHJ1ZX0gLz48L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSl9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA6IC8vbGFzIGNvbnNpc3RlbmNpYXMgcHVlZGVuIHNlciBoZXJtYW5hcyBkZSBPTVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8Q29uc2lzdGVuY2lhRGVzcGxpZWd1ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5PXtvcGNpb25NdWx0aXBsZS5pZF9jYXNpbGxlcm99XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNpbGxlcm89e29wY2lvbk11bHRpcGxlfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yUGs9e3Byb3BzLmZvclBrfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgKX1cclxuICAgICAgICAgICAgPC90Ym9keT5cclxuICAgICAgICA8L3RhYmxlPlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInBpZS1wcmVndW50YVwiPjwvZGl2PlxyXG4gICAgPC9EZXNwbGVnYXJDYXNpbGxlcm8+XHJcbn1cclxuXHJcbnZhciBjYWxjdWxhckRpc2FibGVkQkZBZ3JlZ2FyTGlzdG8gPSAoXHJcbiAgICBjb25maWdTb3J0ZW9Gb3JtdWxhcmlvOiBDb25maWd1cmFjaW9uU29ydGVvRm9ybXVsYXJpbyB8IG51bGwsXHJcbiAgICBoYWJpbGl0YWNpb25Cb3RvbkZvcm11bGFyaW86IENvbmZpZ3VyYWNpb25IYWJpbGl0YXJCb3RvbkZvcm11bGFyaW8gfCBudWxsLFxyXG4gICAgZm9ybXVsYXJpbzogSWRGb3JtdWxhcmlvXHJcbikgPT4ge1xyXG4gICAgaWYgKGhhYmlsaXRhY2lvbkJvdG9uRm9ybXVsYXJpbyAmJiBoYWJpbGl0YWNpb25Cb3RvbkZvcm11bGFyaW9bZm9ybXVsYXJpb10pIHtcclxuICAgICAgICByZXR1cm4gIWhhYmlsaXRhY2lvbkJvdG9uRm9ybXVsYXJpb1tmb3JtdWxhcmlvXS5oYWJpbGl0YXJfYWdyZWdhcl9saXN0b1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gISEoY29uZmlnU29ydGVvRm9ybXVsYXJpbyAmJiBjb25maWdTb3J0ZW9Gb3JtdWxhcmlvLmlkX2Zvcm11bGFyaW9faW5kaXZpZHVhbCA9PSBmb3JtdWxhcmlvKVxyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBib3RvbmVzRGVsRm9ybXVsYXJpbyhyOiBSZXNwdWVzdGFzLCB1bmlkYWRfYW5hbGlzaXM6IElkVW5pZGFkQW5hbGlzaXMsIGVzdHJ1Y3R1cmE6IEVzdHJ1Y3R1cmEsIGZvclBrUGFkcmU6IEZvclBrLCBmZWVkYmFja0FsbDogeyBbZm9ybXVsYXJpbyBpbiBQbGFpbkZvclBrXTogRm9ybVN0cnVjdHVyZVN0YXRlPElkVmFyaWFibGUsIFZhbG9yLCBJZEZpbj4gfSk6IEh0bWxUYWc8SFRNTERpdkVsZW1lbnQ+IHtcclxuICAgIHZhciBmb3Jtc1ZpdmllbmRhID0gZ2V0Rm9ybXVsYXJpb3NGb3JWYWx1ZVBrUmFpeihmb3JQa1BhZHJlW2VzdHJ1Y3R1cmEucGtBZ3JlZ2FkYVVhUHBhbF0pO1xyXG4gICAgdmFyIHVhRGVmID0gZXN0cnVjdHVyYS51bmlkYWRlc19hbmFsaXNpc1t1bmlkYWRfYW5hbGlzaXNdO1xyXG4gICAgdmFyIGFycmF5RXN0cnVjdHVyYUZvcm11bGFyaW9zID0gKGxpa2VBcihlc3RydWN0dXJhLmZvcm11bGFyaW9zKSkuYXJyYXkoKTtcclxuICAgIHZhciB4ID0gbGlrZUFyKHVhRGVmLmhpamFzKS5maWx0ZXIodWFIaWphID0+XHJcbiAgICAgICAgLy9kZXNjYXJ0byB1YXMgcXVlIG5vIGVzdMOpbiBlbiBuaW5ndW4gZm9ybVxyXG4gICAgICAgIGFycmF5RXN0cnVjdHVyYUZvcm11bGFyaW9zLmZpbHRlcigoaW5mb0Zvcm11bGFyaW8pID0+XHJcbiAgICAgICAgICAgIGluZm9Gb3JtdWxhcmlvLmNhc2lsbGVyb3MudW5pZGFkX2FuYWxpc2lzID09IHVhSGlqYT8udW5pZGFkX2FuYWxpc2lzICYmIGZvcm1zVml2aWVuZGEuaW5jbHVkZXMoaW5mb0Zvcm11bGFyaW8uY2FzaWxsZXJvcy5pZF9jYXNpbGxlcm8gYXMgSWRGb3JtdWxhcmlvKVxyXG4gICAgICAgICkubGVuZ3RoID4gMFxyXG4gICAgKS5tYXAodWFIaWphID0+IChcclxuICAgICAgICB1YUhpamEgPT0gbnVsbCA/IG51bGwgOlxyXG4gICAgICAgICAgICBodG1sLmRpdih7IGNsYXNzOiAndWEtaGlqYXMnIH0sIFtcclxuICAgICAgICAgICAgICAgIGh0bWwuZGl2KHVhSGlqYS51bmlkYWRfYW5hbGlzaXMpLFxyXG4gICAgICAgICAgICAgICAgaHRtbC5kaXYoXHJcbiAgICAgICAgICAgICAgICAgICAgbGlrZUFyKHJbdWFIaWphLnVuaWRhZF9hbmFsaXNpc10gfHwgW10pLm1hcCgocmVzcHVlc3Rhc0hpamEsIGkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG51bSA9IE51bWJlcihpKSArIDFcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZvclBrSGlqYVBhcmNpYWwgPSB7IC4uLmZvclBrUGFkcmUsIFt1YUhpamEucGtfYWdyZWdhZGFdOiBudW0gfTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW8gPSBlc3RydWN0dXJhLmNvbmZpZ1NvcnRlbyA/IGVzdHJ1Y3R1cmEuY29uZmlnU29ydGVvW2dldE1haW5Gb3JtRm9yVml2aWVuZGEoZm9yUGtQYWRyZVtlc3RydWN0dXJhLnBrQWdyZWdhZGFVYVBwYWxdKV0gOiBudWxsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBoYWJpbGl0YWNpb25Cb3RvbkZvcm11bGFyaW8gPSBlc3RydWN0dXJhLmhhYmlsaXRhY2lvbkJvdG9uRm9ybXVsYXJpbztcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGh0bWwuZGl2KHsgY2xhc3M6ICdudW1lcmFkb3ItdWEnIH0sIFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh0bWwuZGl2KHsgY2xhc3M6ICdib3RvbmVzLXVhJyB9LCBbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHRtbC5kaXYoeyBjbGFzczogJ251bWVyby11YScgfSwgbnVtLnRvU3RyaW5nKCkpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmxpa2VBcihlc3RydWN0dXJhLmZvcm11bGFyaW9zKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKGZvcm1EZWYgPT4gZm9ybURlZi5jYXNpbGxlcm9zLnVuaWRhZF9hbmFsaXNpcyA9PSB1YUhpamEudW5pZGFkX2FuYWxpc2lzICYmIGZvcm1zVml2aWVuZGEuaW5jbHVkZXMoZm9ybURlZi5jYXNpbGxlcm9zLmlkX2Nhc2lsbGVybyBhcyBJZEZvcm11bGFyaW8pKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAubWFwKChfZm9ybURlZiwgZm9ybXVsYXJpbykgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZvclBrID0geyAuLi5mb3JQa0hpamFQYXJjaWFsLCBmb3JtdWxhcmlvIH07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZmVlZGJhY2tGb3JtID0gZmVlZGJhY2tBbGxbdG9QbGFpbkZvclBrKGZvclBrKV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmVlZGJhY2tGb3JtID8gaHRtbC5kaXYoe30sIFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBodG1sLmJ1dHRvbigodWFIaWphISkucGtfYWdyZWdhZGErXCIgb2s6IFwiKyhOdW1iZXIoaSkrMSkpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvdG9uRm9ybXVsYXJpb0NvblJlc3VtZW4oXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvclBrLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0dWFsOiB0cnVlIHx8IGNhbGN1bGFyQWN0dWFsQkYoY29uZmlnU29ydGVvRm9ybXVsYXJpbywgbnVtLCBudWxsLCBmb3JtdWxhcmlvLCByKSwgLy9SRVZJU0FSIHRydWUgcGFyYSBxdWUgbm8gc2UgZ3Jpc2VuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2aW86IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ6IGNhbGN1bGFyRGlzYWJsZWRCRihjb25maWdTb3J0ZW9Gb3JtdWxhcmlvLCBoYWJpbGl0YWNpb25Cb3RvbkZvcm11bGFyaW8sIG51bSwgZm9ybXVsYXJpbywgcilcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmVlZGJhY2tGb3JtLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGRlc3BsaWVndWVPY3VsdGE6IGZhbHNlLCBleHByZXNpb25faGFiaWxpdGFyX2pzOiAnJywgbm9tYnJlOiBmb3JtdWxhcmlvLCBhY2xhcmFjaW9uOiBudWxsLCBzYWx0bzogZm9ybXVsYXJpbyB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JQa1BhZHJlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImJvdG9uLWlyLXJlc3VtZW4tZm9ybXVsYXJpb1wiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlc3RydWN0dXJhLmZvcm11bGFyaW9zW2Zvcm11bGFyaW9dLmNhc2lsbGVyb3NcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKSA6IG51bGxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkuYXJyYXkoKS5tYXAoeCA9PiB4ID09IG51bGwgPyBudWxsIDogeCkucmV2ZXJzZSgpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgYm90b25lc0RlbEZvcm11bGFyaW8ocmVzcHVlc3Rhc0hpamEsIHVhSGlqYS51bmlkYWRfYW5hbGlzaXMsIGVzdHJ1Y3R1cmEsIGZvclBrSGlqYVBhcmNpYWwsIGZlZWRiYWNrQWxsKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBdKVxyXG4gICAgICAgICAgICAgICAgICAgIH0pLmFycmF5KCkubWFwKHggPT4geCA9PSBudWxsID8gbnVsbCA6IHgpXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgIF0pXHJcbiAgICApKS5hcnJheSgpLm1hcCh4ID0+IHggPT0gbnVsbCA/IG51bGwgOiB4KTtcclxuICAgIHJldHVybiBodG1sLmRpdigvKntzdHlsZTonZGlzcGxheTpmbGV4OyBmbGV4LWRpcmVjdGlvbjpyb3cnfSwqL3gpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBUZXh0b0Rlc3BsaWVndWUocHJvcHM6IHsgY2FzaWxsZXJvOiBUZXh0bywgZm9yUGs6IEZvclBrIH0pIHtcclxuICAgIHZhciB7IGNhc2lsbGVybywgZm9yUGsgfSA9IHByb3BzO1xyXG4gICAgY29uc3QgZGlzcGF0Y2ggPSB1c2VEaXNwYXRjaCgpO1xyXG4gICAgdmFyIGhhYmlsaXRhZG9yID0gY2FzaWxsZXJvLmV4cHJlc2lvbl9oYWJpbGl0YXJfanMgPyBnZXRGdW5jaW9uSGFiaWxpdGFyKGNhc2lsbGVyby5leHByZXNpb25faGFiaWxpdGFyX2pzKSA6ICgpID0+IHRydWU7XHJcbiAgICB2YXIgeyBtb2RvRGVzcGxpZWd1ZSB9ID0gdXNlU2VsZWN0b3JWaXZpZW5kYShmb3JQayk7XHJcbiAgICB2YXIgaWQgPSBgdGV4dG8tJHtjYXNpbGxlcm8uaWRfY2FzaWxsZXJvfWA7XHJcbiAgICByZWdpc3RyYXJFbGVtZW50byh7IGlkLCBzdHlsZTogJ2Rpc3BsYXknLCBmdW46IChyOiBSZXNwdWVzdGFzKSA9PiBoYWJpbGl0YWRvcihyKSB8fCBtb2RvRGVzcGxpZWd1ZSA9PSAnbWV0YWRhdG9zJyA/ICdibG9jaycgOiAnbm9uZScgfSlcclxuICAgIHZhciBlc1Jlc3VtZW5Gb3JtdWxhcmlvID0gY2FzaWxsZXJvLmNhc2lsbGVybyA9PSAnUmVzRm9yJyBhcyBJZENhc2lsbGVybzsgLy8gVE9ETzogQ2FtYmlhIGVzdG8gcXVlIGVzdMOhIGphcmNvZGVhZG8uXHJcbiAgICBpZiAoZXNSZXN1bWVuRm9ybXVsYXJpbykge1xyXG4gICAgICAgIHJlZ2lzdHJhckVsZW1lbnRvKHtcclxuICAgICAgICAgICAgaWQsIGRpcmVjdDogdHJ1ZSxcclxuICAgICAgICAgICAgZnVuOiAoXHJcbiAgICAgICAgICAgICAgICByOiBSZXNwdWVzdGFzLFxyXG4gICAgICAgICAgICAgICAgX2ZlZWRiYWNrRm9ybTogRm9ybVN0cnVjdHVyZVN0YXRlPElkVmFyaWFibGUsIFZhbG9yLCBJZEZpbj4sXHJcbiAgICAgICAgICAgICAgICBlbGVtZW50bzogSFRNTERpdkVsZW1lbnQsXHJcbiAgICAgICAgICAgICAgICBmZWVkYmFja0FsbDogeyBbZm9ybXVsYXJpbyBpbiBQbGFpbkZvclBrXTogRm9ybVN0cnVjdHVyZVN0YXRlPElkVmFyaWFibGUsIFZhbG9yLCBJZEZpbj4gfSxcclxuICAgICAgICAgICAgICAgIGVzdHJ1Y3R1cmE6IEVzdHJ1Y3R1cmFcclxuICAgICAgICAgICAgKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBlbGVtZW50by5zdHlsZS5kaXNwbGF5ID0gJyc7XHJcbiAgICAgICAgICAgICAgICAvL0B0cy1pZ25vcmUgbGFzIHJlc3B1ZXN0YXMgc29uIHJlc3B1ZXN0YXNSYWl6IHBvcnF1ZSBSZXNGb3IgZXN0w6EgZW4gZWwgZm9ybSBwcGFsXHJcbiAgICAgICAgICAgICAgICBpZiAoclsncmVzdW1lbkVzdGFkbyddIGFzIFJlc3VtZW5Fc3RhZG8gPT0gJ3ZhY2lvJykge1xyXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnRvLnRleHRDb250ZW50ID0gXCJyZWxldmFtaWVudG8gc2luIGVtcGV6YXJcIjtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudG8udGV4dENvbnRlbnQgPSBcInJlbGV2YW1pZW50byBlbXBlemFkb1wiO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciB7IHVuaWRhZF9hbmFsaXNpcyB9ID0gZXN0cnVjdHVyYS5mb3JtdWxhcmlvc1tmb3JQay5mb3JtdWxhcmlvXS5jYXNpbGxlcm9zO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnRvLmlubmVySFRNTCA9IFwiXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudG8uYXBwZW5kQ2hpbGQoYm90b25lc0RlbEZvcm11bGFyaW8ociwgdW5pZGFkX2FuYWxpc2lzLCBlc3RydWN0dXJhLCBmb3JQaywgZmVlZGJhY2tBbGwpLmNyZWF0ZSgpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcbiAgICB2YXIgaXIgPSAoZGVmQm90b246IERlZmluaWNpb25Gb3JtdWxhcmlvQWJyaXIpID0+IHtcclxuICAgICAgICAvLyB2YXIgbnVldmFGb3JQaz17Li4uZm9yUGssIGZvcm11bGFyaW86aWRGb3JtdWxhcmlvRGVzdGlub307XHJcbiAgICAgICAgLy8gbnVldmFGb3JQa1tudWV2b0NhbXBvUGtdID0gZGVmQm90b24ubnVtXHJcbiAgICAgICAgZGlzcGF0Y2hCeVBhc3MoYWNjaW9uX2FicmlyX2Zvcm11bGFyaW8sIHsgZm9yUGs6IGRlZkJvdG9uLmZvclBrIH0pO1xyXG4gICAgICAgIGRpc3BhdGNoKGRpc3BhdGNoZXJzLkNBTUJJQVJfRk9STVVMQVJJTyh7IGZvclBrOiBkZWZCb3Rvbi5mb3JQaywgYXBpbGFyVnVlbHRhOiB0cnVlIH0pKTtcclxuICAgIH1cclxuICAgIHJldHVybiA8RGVzcGxlZ2FyQ2FzaWxsZXJvXHJcbiAgICAgICAgaWQ9e2Ake2lkfS1leHRlcm5vYH1cclxuICAgICAgICBjYXNpbGxlcm89e2Nhc2lsbGVyb31cclxuICAgID5cclxuICAgICAgICA8RW5jYWJlemFkb0Rlc3BsaWVndWUgY2FzaWxsZXJvPXtjYXNpbGxlcm99IGxlZXI9e2ZhbHNlfSBmb3JQaz17Zm9yUGt9IC8+XHJcbiAgICAgICAgPGRpdiBpZD17aWR9IHN0eWxlPXt7IGRpc3BsYXk6ICdub25lJyB9fT48L2Rpdj5cclxuICAgICAgICB7ZXNSZXN1bWVuRm9ybXVsYXJpbyA/XHJcbiAgICAgICAgICAgIDxCdXR0b24gY2xhc3NOYW1lPVwic3BlY2lhbC1idXR0b25cIiBpZD1cImJvdG9uLWlyLXJlc3VtZW4tZm9ybXVsYXJpb1wiIHN0eWxlPXt7IGRpc3BsYXk6ICdub25lJyB9fVxyXG4gICAgICAgICAgICAgICAgb25DbGljaz17KGV2ZW50KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaXIoSlNPTi5wYXJzZSgoZXZlbnQudGFyZ2V0ISBhcyB1bmtub3duIGFzIEhUTUxCdXR0b25FbGVtZW50KS5nZXRBdHRyaWJ1dGUoJ2RlZi1idXR0b24nKSEpKVxyXG4gICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgPmlyIChpbnRlcm5vKTwvQnV0dG9uPlxyXG4gICAgICAgICAgICA6IG51bGx9XHJcblxyXG4gICAgPC9EZXNwbGVnYXJDYXNpbGxlcm8+XHJcbn1cclxuXHJcbmZ1bmN0aW9uIEZpbHRyb0Rlc3BsaWVndWUocHJvcHM6IHsgZmlsdHJvOiBGaWx0cm8sIGZvclBrOiBGb3JQayB9KSB7XHJcbiAgICB2YXIgeyBmaWx0cm8gfSA9IHByb3BzO1xyXG4gICAgcmV0dXJuIDxEZXNwbGVnYXJDYXNpbGxlcm8gY2FzaWxsZXJvPXtmaWx0cm99PlxyXG4gICAgICAgIDxEZXNwbGllZ3VlRW5jYWJlemFkbyBjYXNpbGxlcm89e2ZpbHRyb30gLz5cclxuICAgIDwvRGVzcGxlZ2FyQ2FzaWxsZXJvPlxyXG59XHJcblxyXG5mdW5jdGlvbiBDb25zaXN0ZW5jaWFEZXNwbGllZ3VlKHByb3BzOiB7IGNhc2lsbGVybzogQ29uc2lzdGVuY2lhLCBmb3JQazogRm9yUGsgfSkge1xyXG4gICAgdmFyIHsgY2FzaWxsZXJvLCBmb3JQayB9ID0gcHJvcHM7XHJcbiAgICB2YXIgaGFiaWxpdGFkb3IgPSBjYXNpbGxlcm8uZXhwcmVzaW9uX2hhYmlsaXRhcl9qcyA/IGdldEZ1bmNpb25IYWJpbGl0YXIoY2FzaWxsZXJvLmV4cHJlc2lvbl9oYWJpbGl0YXJfanMpIDogKCkgPT4gdHJ1ZTtcclxuICAgIHZhciB7IG1vZG9EZXNwbGllZ3VlIH0gPSB1c2VTZWxlY3RvclZpdmllbmRhKGZvclBrKTtcclxuICAgIHZhciBpZCA9IGBjb25zaXN0ZW5jaWEtJHtjYXNpbGxlcm8uaWRfY2FzaWxsZXJvfWA7XHJcbiAgICByZWdpc3RyYXJFbGVtZW50byh7IGlkLCBzdHlsZTogJ2Rpc3BsYXknLCBmdW46IChyOiBSZXNwdWVzdGFzKSA9PiBoYWJpbGl0YWRvcihyKSB8fCBtb2RvRGVzcGxpZWd1ZSA9PSAnbWV0YWRhdG9zJyA/ICdibG9jaycgOiAnbm9uZScgfSlcclxuICAgIHJldHVybiA8RGVzcGxlZ2FyQ2FzaWxsZXJvXHJcbiAgICAgICAgaWQ9e2lkfVxyXG4gICAgICAgIGNhc2lsbGVybz17Y2FzaWxsZXJvfVxyXG4gICAgICAgIHN0eWxlPXt7IGRpc3BsYXk6ICdub25lJyB9fVxyXG4gICAgPlxyXG4gICAgICAgIDxFbmNhYmV6YWRvRGVzcGxpZWd1ZSBjYXNpbGxlcm89e2Nhc2lsbGVyb30gbGVlcj17ZmFsc2V9IGZvclBrPXtmb3JQa30gLz5cclxuICAgIDwvRGVzcGxlZ2FyQ2FzaWxsZXJvPlxyXG59XHJcblxyXG50eXBlIERlZmluaWNpb25Gb3JtdWxhcmlvQWJyaXIgPVxyXG4gICAgKHsgZm9yUGs6IEZvclBrLCBudW06IG51bWJlciwgYWN0dWFsOiBib29sZWFuLCBwcmV2aW86IGJvb2xlYW4gfSB8XHJcbiAgICB7IGZvclBrOiBGb3JQaywgbnVtOiBudW1iZXIsIGFjdHVhbDogYm9vbGVhbiwgcHJldmlvOiBmYWxzZSwgZXNBZ3JlZ2FyOiB0cnVlIH0gfFxyXG4gICAgeyBmb3JQazogRm9yUGssIG51bTogbnVtYmVyLCBhY3R1YWw6IGJvb2xlYW4sIHByZXZpbzogZmFsc2UsIGVzQ29uZmlybWFyOiB0cnVlIH0gfFxyXG4gICAgeyBmb3JQazogRm9yUGssIG51bTogbnVtYmVyLCBhY3R1YWw6IGJvb2xlYW4sIHByZXZpbzogZmFsc2UsIHBlcm1pdGVCb3JyYXI6IGJvb2xlYW4gfSB8XHJcbiAgICB7IGZvclBrOiBGb3JQaywgbnVtOiBmYWxzZSwgYWN0dWFsOiBib29sZWFuLCBwcmV2aW86IHRydWUsIHVuaWNvOiB0cnVlIH0pXHJcbiAgICAmIHsgZXNDb25maXJtYXI/OiB0cnVlLCBlc0FncmVnYXI/OiB0cnVlLCBwZXJtaXRlQm9ycmFyPzogYm9vbGVhbiwgcGVybWl0ZUJvcnJhckdhYmluZXRlPzogYm9vbGVhbiwgZGlzYWJsZWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkIH07XHJcblxyXG5cclxudmFyIGJvdG9uRm9ybXVsYXJpb0NvblJlc3VtZW4gPSAoXHJcbiAgICBkZWZCb3RvbjogRGVmaW5pY2lvbkZvcm11bGFyaW9BYnJpcixcclxuICAgIGZlZWRiYWNrRm9ybTogRm9ybVN0cnVjdHVyZVN0YXRlPElkVmFyaWFibGUsIFZhbG9yLCBJZEZpbj4sXHJcbiAgICByZXNwdWVzdGFzQXVtZW50YWRhczogUmVzcHVlc3RhcyxcclxuICAgIGNhc2lsbGVybzogeyBkZXNwbGllZ3VlT2N1bHRhPzogYm9vbGVhbiB8IG51bGwsIGV4cHJlc2lvbl9oYWJpbGl0YXJfanM/OiBzdHJpbmcsIGFjbGFyYWNpb246IHN0cmluZyB8IG51bGwsIGV4cHJlc2lvbl9oYWJpbGl0YXI/OiBzdHJpbmcsIG5vbWJyZT86IHN0cmluZywgc2FsdG86IHN0cmluZyB8IG51bGwsIGVzcGVjaWFsPzogYW55IH0sXHJcbiAgICBmb3JQa1BhZHJlOiBGb3JQayxcclxuICAgIGlkQnV0dG9uOiBzdHJpbmcsXHJcbiAgICBmb3JtdWxhcmlvQUFicmlyOiBGb3JtdWxhcmlvLFxyXG4gICAgcGVkaXJDb25maXJtYWNpb25Cb3JyYWRvPzogKGRlZkJvdG9uOiBEZWZpbmljaW9uRm9ybXVsYXJpb0FicmlyLCBmb3JQa1BhZHJlOiBGb3JQaykgPT4gdm9pZFxyXG4pID0+IHtcclxuICAgIHZhciBmb3JQazogRm9yUGsgPSBkZWZCb3Rvbi5mb3JQaztcclxuICAgIHZhciBzdWZpam9JZEVsZW1lbnRvID0gdG9QbGFpbkZvclBrKGZvclBrKSArIChkZWZCb3Rvbi5lc0NvbmZpcm1hciA/ICctbGlzdG8nIDogJycpO1xyXG4gICAgdmFyIGlkID0gYGRpdi1ib3Rvbi1mb3JtdWxhcmlvLSR7c3VmaWpvSWRFbGVtZW50b31gO1xyXG4gICAgdmFyIGVzdGFkbyA9IGZlZWRiYWNrRm9ybS5yZXN1bWVuO1xyXG4gICAgcmV0dXJuIGh0bWwudHIoe1xyXG4gICAgICAgIGlkLFxyXG4gICAgICAgIGNsYXNzOiBcInNlY2Npb24tYm90b24tZm9ybXVsYXJpb1wiLFxyXG4gICAgICAgICRhdHRyczoge1xyXG4gICAgICAgICAgICBcIm51ZXN0cm8tdmFsaWRhdG9yXCI6IGRlZkJvdG9uLmFjdHVhbCA/ICdhY3R1YWwnIDogZGVmQm90b24ucHJldmlvID8gJ3ZhbGlkYScgOiAndG9kYXZpYV9ubycsXHJcbiAgICAgICAgICAgIFwib2N1bHRhci1zYWx0ZWFkYVwiOiBjYXNpbGxlcm8uZGVzcGxpZWd1ZU9jdWx0YSA/IChjYXNpbGxlcm8uZXhwcmVzaW9uX2hhYmlsaXRhcl9qcyA/ICdJTkhBQklMSVRBUicgOiAnU0knKSA6ICdOTycsXHJcbiAgICAgICAgICAgIFwidGllbmUtdmFsb3JcIjogXCJOT1wiLFxyXG4gICAgICAgICAgICBcImRlZi1idXR0b25cIjogSlNPTi5zdHJpbmdpZnkoZGVmQm90b24pXHJcbiAgICAgICAgfVxyXG4gICAgfSwgW1xyXG4gICAgICAgIGNhc2lsbGVyby5hY2xhcmFjaW9uID9cclxuICAgICAgICAgICAgaHRtbC50ZCh7IGNsYXNzOiBcImFjbGFyYWNpb25cIiB9LCBbYnJlYWtlYWJsZVRleHQoY2FzaWxsZXJvLmFjbGFyYWNpb24pXSlcclxuICAgICAgICAgICAgOiBudWxsLFxyXG4gICAgICAgIGh0bWwudGQoe1xyXG4gICAgICAgICAgICBjb2xzcGFuOiAoZGVmQm90b24uZXNBZ3JlZ2FyIHx8IGRlZkJvdG9uLmVzQ29uZmlybWFyKSA/XHJcbiAgICAgICAgICAgICAgICAoY2FzaWxsZXJvLmVzcGVjaWFsPy5jYW1wb3NSZXN1bWVuLmxlbmd0aCA/PyAxKSArIChjYXNpbGxlcm8uYWNsYXJhY2lvbiA/IDAgOiAxKVxyXG4gICAgICAgICAgICAgICAgOiBudWxsXHJcbiAgICAgICAgfSwgW1xyXG4gICAgICAgICAgICBCdXR0b24yKHtcclxuICAgICAgICAgICAgICAgIC8vIGlkOmB2YXItJHtpZFZhcmlhYmxlfWAsXHJcbiAgICAgICAgICAgICAgICBpZDogYGJvdG9uLWZvcm11bGFyaW8tJHtzdWZpam9JZEVsZW1lbnRvfWAsXHJcbiAgICAgICAgICAgICAgICB2YXJpYW50OiBkZWZCb3Rvbi5hY3R1YWwgPyBcImNvbnRhaW5lZFwiIDogXCJvdXRsaW5lZFwiLFxyXG4gICAgICAgICAgICAgICAgZGlzYWJsZWQ6IGRlZkJvdG9uLmRpc2FibGVkLFxyXG4gICAgICAgICAgICAgICAgY29sb3I6IGRlZkJvdG9uLmFjdHVhbCA/IFwicHJpbWFyeVwiIDogXCJpbmhlcml0XCIsXHJcbiAgICAgICAgICAgICAgICBvbkNsaWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRlZkJvdG9uLmVzQ29uZmlybWFyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkZWZCb3Rvbi5udW0gIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNhc2lsbGVyby5zYWx0bykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgbGlzdG8sIGFncmVnYXIgfSA9IGdldEJGVmFyTmFtZXMoY2FzaWxsZXJvLnNhbHRvKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwYXRjaEJ5UGFzcyhhY2Npb25fcmVnaXN0cmFyX3Jlc3B1ZXN0YSwgeyBmb3JQazogZm9yUGtQYWRyZSwgdmFyaWFibGU6IGxpc3RvLCByZXNwdWVzdGE6IGRlZkJvdG9uLm51bSBhcyBWYWxvciB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwYXRjaEJ5UGFzcyhhY2Npb25fcmVnaXN0cmFyX3Jlc3B1ZXN0YSwgeyBmb3JQazogZm9yUGtQYWRyZSwgdmFyaWFibGU6IGFncmVnYXIsIHJlc3B1ZXN0YTogMSBhcyBWYWxvciB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjYXNpbGxlcm8uZXhwcmVzaW9uX2hhYmlsaXRhcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoQnlQYXNzKGFjY2lvbl9yZWdpc3RyYXJfcmVzcHVlc3RhLCB7IGZvclBrOiBmb3JQa1BhZHJlLCB2YXJpYWJsZTogY2FzaWxsZXJvLmV4cHJlc2lvbl9oYWJpbGl0YXIgYXMgSWRWYXJpYWJsZSwgcmVzcHVlc3RhOiBkZWZCb3Rvbi5udW0gYXMgVmFsb3IgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYnV0dG9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWRCdXR0b24pISBhcyBIVE1MQnV0dG9uRWxlbWVudDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnV0dG9uLnNldEF0dHJpYnV0ZSgnZGVmLWJ1dHRvbicsIEpTT04uc3RyaW5naWZ5KGRlZkJvdG9uKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1dHRvbi5jbGljaygpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAkYXR0cnM6IHtcclxuICAgICAgICAgICAgICAgICAgICBcInJlc3VtZW4tZXN0YWRvXCI6IGVzdGFkbyAhPSAndmFjaW8nID8gZXN0YWRvIDogZGVmQm90b24uYWN0dWFsID8gJ2FjdHVhbCcgOiBkZWZCb3Rvbi5wcmV2aW8gPyBlc3RhZG8gOiAndG9kYXZpYV9ubycsXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAsIGNoaWxkcmVuOiBbXHJcbiAgICAgICAgICAgICAgICAgICAgKGRlZkJvdG9uLmVzQWdyZWdhciA/ICdhZ3JlZ2FyJyA6IGRlZkJvdG9uLmVzQ29uZmlybWFyID8gJ0xpc3RvJyA6IGNhc2lsbGVyby5ub21icmUgKyAnICcgKyAoZGVmQm90b24ubnVtIHx8ICcnKSksXHJcbiAgICAgICAgICAgICAgICAgICAgaHRtbC5zdmcoeyBmb2N1c2FibGU6IGZhbHNlLCB2aWV3Ym94OiBcIjAgMCAyNCAyNFwiLCBcImFyaWEtaGlkZGVuXCI6IFwidHJ1ZVwiLCBzdHlsZTogc3R5bGVUb0Nzcyh7IGZpbGw6IFwiY3VycmVudENvbG9yXCIgfSkgfSwgW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBodG1sLnBhdGgoeyBkOiAoZGVmQm90b24uZXNBZ3JlZ2FyID8gbWF0ZXJpYWxJb0ljb25zU3ZnUGF0aC5BZGQgOiBkZWZCb3Rvbi5lc0NvbmZpcm1hciA/IG1hdGVyaWFsSW9JY29uc1N2Z1BhdGguQ2hlY2sgOiBjYXNpbGxlcm8uc2FsdG8gPyBtYXRlcmlhbElvSWNvbnNTdmdQYXRoLkZvcndhcmQgOiBtYXRlcmlhbElvSWNvbnNTdmdQYXRoLkV4aXRUb0FwcCksIHN0eWxlOiBzdHlsZVRvQ3NzKHsgZmlsbDogJ2N1cnJlbnRDb2xvcicgfSkgfSlcclxuICAgICAgICAgICAgICAgICAgICBdKVxyXG4gICAgICAgICAgICAgICAgXVxyXG4gICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgKGRlZkJvdG9uLnBlcm1pdGVCb3JyYXIgfHwgZGVmQm90b24ucGVybWl0ZUJvcnJhckdhYmluZXRlID9cclxuICAgICAgICAgICAgICAgIEJ1dHRvbjIoe1xyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJib3Rvbi1ib3JyYXItdWEtdmFjaWFcIixcclxuICAgICAgICAgICAgICAgICAgICBjb2xvcjogXCJkZWZhdWx0XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgdmFyaWFudDogXCJvdXRsaW5lZFwiLFxyXG4gICAgICAgICAgICAgICAgICAgIHN0eWxlOiB7IG1hcmdpbkxlZnQ6ICc4cHgnIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGh0bWwuc3ZnKHsgZm9jdXNhYmxlOiBmYWxzZSwgdmlld2JveDogXCIwIDAgMjQgMjRcIiwgXCJhcmlhLWhpZGRlblwiOiBcInRydWVcIiwgc3R5bGU6IHN0eWxlVG9Dc3MoeyBmaWxsOiBcImN1cnJlbnRDb2xvclwiIH0pIH0sIFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh0bWwucGF0aCh7IGQ6IG1hdGVyaWFsSW9JY29uc1N2Z1BhdGguRGVsZXRlRm9yZXZlciwgc3R5bGU6IHN0eWxlVG9Dc3MoeyBmaWxsOiAnY3VycmVudENvbG9yJyB9KSB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBdKSxcclxuICAgICAgICAgICAgICAgICAgICBvbkNsaWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkZWZCb3Rvbi5wZXJtaXRlQm9ycmFyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY2Npb25fYm9ycmFyX2Zvcm11bGFyaW8oeyBmb3JQaywgZm9yUGtQYWRyZSB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgbGlzdG8sIGFncmVnYXIgfSA9IGdldEJGVmFyTmFtZXMoY2FzaWxsZXJvLnNhbHRvKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkZWZCb3Rvbi5udW0gPT09IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwYXRjaEJ5UGFzcyhhY2Npb25fcmVnaXN0cmFyX3Jlc3B1ZXN0YSwgeyBmb3JQazogZm9yUGtQYWRyZSwgdmFyaWFibGU6IGFncmVnYXIsIHJlc3B1ZXN0YTogbnVsbCBhcyB1bmtub3duIGFzIFZhbG9yIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2hCeVBhc3MoYWNjaW9uX3JlZ2lzdHJhcl9yZXNwdWVzdGEsIHsgZm9yUGs6IGZvclBrUGFkcmUsIHZhcmlhYmxlOiBsaXN0bywgcmVzcHVlc3RhOiBudWxsIGFzIHVua25vd24gYXMgVmFsb3IgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2FzaWxsZXJvLmV4cHJlc2lvbl9oYWJpbGl0YXIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwYXRjaEJ5UGFzcyhhY2Npb25fcmVnaXN0cmFyX3Jlc3B1ZXN0YSwgeyBmb3JQazogZm9yUGtQYWRyZSwgdmFyaWFibGU6IGNhc2lsbGVyby5leHByZXNpb25faGFiaWxpdGFyIGFzIElkVmFyaWFibGUsIHJlc3B1ZXN0YTogbnVsbCBhcyB1bmtub3duIGFzIFZhbG9yIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGRlZkJvdG9uLnBlcm1pdGVCb3JyYXJHYWJpbmV0ZSAmJiBwZWRpckNvbmZpcm1hY2lvbkJvcnJhZG8pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlZGlyQ29uZmlybWFjaW9uQm9ycmFkbyhkZWZCb3RvbiwgZm9yUGtQYWRyZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgOiBudWxsKSxcclxuICAgICAgICAgICAgKGRlZkJvdG9uLmVzQ29uZmlybWFyICYmIGNhc2lsbGVyby5zYWx0byAmJiByZXNwdWVzdGFzQXVtZW50YWRhc1snJEIuRjonICsgKGNhc2lsbGVyby5zYWx0by5zdWJzdHJpbmcoMCwgMikgPT0gJ0Y6JyA/IGNhc2lsbGVyby5zYWx0by5zbGljZSgyKSA6IGNhc2lsbGVyby5zYWx0bykgYXMgSWRWYXJpYWJsZV0gIT0gbnVsbCA/XHJcbiAgICAgICAgICAgICAgICBCdXR0b24yKHtcclxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6IFwiYm90b24tZGVzaGFjZXItbGlzdG9cIixcclxuICAgICAgICAgICAgICAgICAgICBjb2xvcjogXCJkZWZhdWx0XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgdmFyaWFudDogXCJvdXRsaW5lZFwiLFxyXG4gICAgICAgICAgICAgICAgICAgIHN0eWxlOiB7IG1hcmdpbkxlZnQ6ICc4cHgnIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJEZXNoYWNlciBMaXN0b1wiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBodG1sLnN2Zyh7IGZvY3VzYWJsZTogZmFsc2UsIHZpZXdib3g6IFwiMCAwIDI0IDI0XCIsIFwiYXJpYS1oaWRkZW5cIjogXCJ0cnVlXCIsIHN0eWxlOiBzdHlsZVRvQ3NzKHsgbWFyZ2luTGVmdDogJzRweCcsIGhlaWdodDogJzIwcHgnLCB2ZXJ0aWNhbEFsaWduOiAnbWlkZGxlJyB9KSB9LCBbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBodG1sLnBhdGgoeyBkOiBtYXRlcmlhbElvSWNvbnNTdmdQYXRoLkRlbGV0ZUZvcmV2ZXIsIHN0eWxlOiBzdHlsZVRvQ3NzKHsgZmlsbDogJ2N1cnJlbnRDb2xvcicgfSkgfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgXSksXHJcbiAgICAgICAgICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgICAgICAgICBvbkNsaWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgbGlzdG8sIGFncmVnYXIgfSA9IGdldEJGVmFyTmFtZXMoY2FzaWxsZXJvLnNhbHRvKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2hCeVBhc3MoYWNjaW9uX3JlZ2lzdHJhcl9yZXNwdWVzdGEsIHsgZm9yUGs6IGZvclBrUGFkcmUsIHZhcmlhYmxlOiBhZ3JlZ2FyLCByZXNwdWVzdGE6IG51bGwgYXMgdW5rbm93biBhcyBWYWxvciB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2hCeVBhc3MoYWNjaW9uX3JlZ2lzdHJhcl9yZXNwdWVzdGEsIHsgZm9yUGs6IGZvclBrUGFkcmUsIHZhcmlhYmxlOiBsaXN0bywgcmVzcHVlc3RhOiBudWxsIGFzIHVua25vd24gYXMgVmFsb3IgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjYXNpbGxlcm8uZXhwcmVzaW9uX2hhYmlsaXRhcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2hCeVBhc3MoYWNjaW9uX3JlZ2lzdHJhcl9yZXNwdWVzdGEsIHsgZm9yUGs6IGZvclBrUGFkcmUsIHZhcmlhYmxlOiBjYXNpbGxlcm8uZXhwcmVzaW9uX2hhYmlsaXRhciBhcyBJZFZhcmlhYmxlLCByZXNwdWVzdGE6IG51bGwgYXMgdW5rbm93biBhcyBWYWxvciB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICA6IG51bGwpXHJcbiAgICAgICAgXSksXHJcbiAgICAgICAgKGRlZkJvdG9uLm51bSAhPT0gZmFsc2UgJiYgIWRlZkJvdG9uLmVzQWdyZWdhciAmJiAhZGVmQm90b24uZXNDb25maXJtYXIgP1xyXG4gICAgICAgICAgICAoY2FzaWxsZXJvLmVzcGVjaWFsPy5jYW1wb3NSZXN1bWVuID8/IFsvKmRlZkJvdG9uLm51bS50b1N0cmluZygpKi9dKS5tYXAoXHJcbiAgICAgICAgICAgICAgICAoY2FtcG86IHN0cmluZykgPT4gaHRtbC50ZCgocmVzcHVlc3Rhc0F1bWVudGFkYXNbZm9ybXVsYXJpb0FBYnJpci51bmlkYWRfYW5hbGlzaXNdW2RlZkJvdG9uLm51bSAtIDFdW2NhbXBvIGFzIElkVmFyaWFibGVdID8/ICcnKS50b1N0cmluZygpKVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICAgIDogbnVsbClcclxuICAgICAgICAvLyBodG1sLmRpdih7Y2xhc3M6J2lubGluZS1kaWFsb2cnLCAkYXR0cnM6e1wiaW5saW5lLWRpYWxvZy1vcGVuXCI6IGNvbmZpcm1hckZvcnphcklyID09IGRlZkJvdG9uLm51bT8ndmlzaWJsZSc6J2hpZGRlbid9fSxbICAgICAgICAgICAgICAgIF0pXHJcblxyXG4gICAgICAgIC8qXHJcbiAgICAgICAgICAgIHtkZWZCb3Rvbi5lc0FncmVnYXI/PD4gPHNwYW4+ICA8L3NwYW4+IDxCdXR0b25cclxuICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJvdXRsaW5lZFwiXHJcbiAgICAgICAgICAgICAgICBjb2xvcj1cImluaGVyaXRcIlxyXG4gICAgICAgICAgICAgICAgb25DbGljaz17KCk9PntcclxuICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgID48SUNPTi5DaGVjay8+PC9CdXR0b24+PC8+Om51bGx9XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgKi9cclxuICAgIF0pLmNyZWF0ZSgpXHJcbn1cclxuXHJcbnZhciBidXNjYXJIbm9zRm9ybXVsYXJpbyA9IChpZEZvcm11bGFyaW9EZXN0aW5vOiBJZEZvcm11bGFyaW8pID0+IHtcclxuICAgIHZhciBlc3RydWN0dXJhID0gZ2V0RXN0cnVjdHVyYSgpO1xyXG4gICAgdmFyIHVhID0gZXN0cnVjdHVyYS5mb3JtdWxhcmlvc1tpZEZvcm11bGFyaW9EZXN0aW5vXS5jYXNpbGxlcm9zLnVuaWRhZF9hbmFsaXNpcztcclxuICAgIHJldHVybiBsaWtlQXIoZXN0cnVjdHVyYS5mb3JtdWxhcmlvcylcclxuICAgICAgICAuZmlsdGVyKChpbmZvRm9ybXVsYXJpbzogSW5mb0Zvcm11bGFyaW8sIF9pZEZvcm06IElkRm9ybXVsYXJpbykgPT5cclxuICAgICAgICAgICAgaW5mb0Zvcm11bGFyaW8uY2FzaWxsZXJvcy51bmlkYWRfYW5hbGlzaXMgPT0gdWFcclxuICAgICAgICApLm1hcCgoX2luZm9Gb3JtdWxhcmlvOiBJbmZvRm9ybXVsYXJpbywgaWRGb3JtOiBJZEZvcm11bGFyaW8pID0+XHJcbiAgICAgICAgICAgIGlkRm9ybVxyXG4gICAgICAgICkuYXJyYXkoKVxyXG59XHJcblxyXG52YXIgY2hlY2tGb3Jtc1ZhY2lvcyA9IChmb3JtczogSWRGb3JtdWxhcmlvW10sIGZlZWRiYWNrQWxsOiB7XHJcbiAgICBbZm9ybXVsYXJpbyBpbiBQbGFpbkZvclBrXTogRm9ybVN0cnVjdHVyZVN0YXRlPElkVmFyaWFibGUsIFZhbG9yLCBJZEZpbj4gLy8gcmVzdWx0YWRvIGRlbCByb3dWYWxpZGF0b3IgcGFyYSBlc3RhZG8uZm9yUGtcclxufSwgZm9yUGs6IEZvclBrKSA9PiB7XHJcbiAgICByZXR1cm4gZm9ybXMuZmlsdGVyKChmb3JtOiBJZEZvcm11bGFyaW8pID0+IHtcclxuICAgICAgICBsZXQgbXlmb3JQayA9IHsgLi4uZm9yUGssIGZvcm11bGFyaW86IGZvcm0gfTtcclxuICAgICAgICB2YXIgZmVlZGJhY2sgPSBmZWVkYmFja0FsbFt0b1BsYWluRm9yUGsobXlmb3JQayldO1xyXG4gICAgICAgIHJldHVybiBmZWVkYmFjay5yZXN1bWVuICE9ICd2YWNpbydcclxuICAgIH0pLmxlbmd0aCA9PSAwXHJcbn1cclxuXHJcbmZ1bmN0aW9uIEJvdG9uRm9ybXVsYXJpb0Rlc3BsaWVndWUocHJvcHM6IHsgY2FzaWxsZXJvOiBCb3RvbkZvcm11bGFyaW8sIGZvcm11bGFyaW86IEZvcm11bGFyaW8sIGZvclBrOiBGb3JQayB9KSB7XHJcbiAgICB2YXIgeyBjYXNpbGxlcm8sIGZvclBrIH0gPSBwcm9wcztcclxuICAgIHZhciBoYWJpbGl0YWRvciA9IGNhc2lsbGVyby5leHByZXNpb25faGFiaWxpdGFyX2pzID8gZ2V0RnVuY2lvbkhhYmlsaXRhcihjYXNpbGxlcm8uZXhwcmVzaW9uX2hhYmlsaXRhcl9qcykgOiAoKSA9PiB0cnVlO1xyXG4gICAgdmFyIHsgb3BjaW9uZXMgfSA9IHVzZVNlbGVjdG9yVml2aWVuZGEoZm9yUGspO1xyXG4gICAgdmFyIHsgbGlzdG86IEJGX2xpc3RvLCBhZ3JlZ2FyOiBCRl9hZ3JlZ2FyLCBpZEZvcm11bGFyaW86IGlkRm9ybXVsYXJpb0Rlc3Rpbm8gfSA9IGdldEJGVmFyTmFtZXMoY2FzaWxsZXJvLnNhbHRvKTtcclxuICAgIHZhciBlc3RydWN0dXJhID0gZ2V0RXN0cnVjdHVyYSgpO1xyXG4gICAgdmFyIHsgZm9ybXVsYXJpb0FBYnJpciB9ID0gdXNlU2VsZWN0b3IoKF9zdGF0ZTogQ2Fzb1N0YXRlKSA9PiAoe1xyXG4gICAgICAgIGZvcm11bGFyaW9BQWJyaXI6IGVzdHJ1Y3R1cmEuZm9ybXVsYXJpb3NbaWRGb3JtdWxhcmlvRGVzdGlub10uY2FzaWxsZXJvcyxcclxuICAgIH0pKTtcclxuICAgIHZhciBzdWZpam9JZEVsZW1lbnRvID0gdG9QbGFpbkZvclBrKGZvclBrKTtcclxuICAgIC8qXHJcbiAgICByZWdpc3RyYXJFbGVtZW50byh7XHJcbiAgICAgICAgaWQ6YGRpdi1ib3Rvbi1mb3JtdWxhcmlvLSR7c3VmaWpvSWRFbGVtZW50b31gLCBcclxuICAgICAgICBhdHRyOidlc3RhLWluaGFiaWxpdGFkYScsIFxyXG4gICAgICAgIC8vIGZ1bjogKHI6UmVzcHVlc3Rhcyk9PmhhYmlsaXRhZG9yKHIpPydTSSc6J05PJ1xyXG4gICAgICAgIGZ1bjogKF9yOlJlc3B1ZXN0YXMpPT4nTk8nXHJcbiAgICB9KTtcclxuICAgIHJlZ2lzdHJhckVsZW1lbnRvPEhUTUxCdXR0b25FbGVtZW50Pih7XHJcbiAgICAgICAgaWQ6YGJvdG9uLWZvcm11bGFyaW8tJHtzdWZpam9JZEVsZW1lbnRvfWAsIFxyXG4gICAgICAgIHByb3A6J2Rpc2FibGVkJywgXHJcbiAgICAgICAgLy8gZnVuOiAocjpSZXNwdWVzdGFzKT0+IWhhYmlsaXRhZG9yKHIpXHJcbiAgICAgICAgZnVuOiAoX3I6UmVzcHVlc3Rhcyk9PmZhbHNlXHJcbiAgICB9KTtcclxuICAgICovXHJcbiAgICBjb25zdCBkaXNwYXRjaCA9IHVzZURpc3BhdGNoKCk7XHJcbiAgICB2YXIgW2NvbmZpcm1hckZvcnphcklyLCBzZXRDb25maXJtYXJGb3J6YXJJcl0gPSB1c2VTdGF0ZTxEZWZpbmljaW9uRm9ybXVsYXJpb0FicmlyIHwgZmFsc2UgfCBudWxsPihudWxsKTtcclxuICAgIHZhciBbY29uZmlybWFjaW9uQm9ycmFkbywgc2V0Q29uZmlybWFjaW9uQm9ycmFkb10gPSB1c2VTdGF0ZTx7ZGVmQm90b246IERlZmluaWNpb25Gb3JtdWxhcmlvQWJyaXIsIGZvclBrUGFkcmU6IEZvclBrLCBkYXRvczogYW55fSB8IG51bGw+KG51bGwpO1xyXG4gICAgdmFyIFtmcmFzZUJvcnJhZG8sIHNldEZyYXNlQm9ycmFkb10gPSB1c2VTdGF0ZSgnJyk7XHJcbiAgICB2YXIgW2Vycm9yRnJhc2VCb3JyYWRvLCBzZXRFcnJvckZyYXNlQm9ycmFkb10gPSB1c2VTdGF0ZShmYWxzZSk7XHJcbiAgICB2YXIgcGVybWl0ZUJvcnJhckdhYmluZXRlID0gZ2V0RGF0b3NCeVBhc3MoKS5wZXJtaXRlQm9ycmFyRWxlbWVudG9zVUEgPz8gZmFsc2U7XHJcbiAgICB2YXIgcGVkaXJDb25maXJtYWNpb25Cb3JyYWRvID0gKGRlZkJvdG9uOiBEZWZpbmljaW9uRm9ybXVsYXJpb0FicmlyLCBmb3JQa1BhZHJlOiBGb3JQaykgPT4ge1xyXG4gICAgICAgIGNvbnN0IHtyZXNwdWVzdGFzfSA9IHJlc3B1ZXN0YXNGb3JQayhmb3JQa1BhZHJlKVxyXG4gICAgICAgIHZhciBkYXRvc0hpam9zID0gcmVzcHVlc3Rhc1tmb3JtdWxhcmlvQUFicmlyLnVuaWRhZF9hbmFsaXNpc11bKGRlZkJvdG9uLm51bSB8fCAxKSAtIDFdO1xyXG4gICAgICAgIHNldENvbmZpcm1hY2lvbkJvcnJhZG8oeyBkZWZCb3RvbiwgZm9yUGtQYWRyZSwgZGF0b3M6IGRhdG9zSGlqb3MgfSk7XHJcbiAgICAgICAgc2V0RnJhc2VCb3JyYWRvKCcnKTtcclxuICAgICAgICBzZXRFcnJvckZyYXNlQm9ycmFkbyhmYWxzZSk7XHJcbiAgICB9O1xyXG4gICAgdmFyIG11bHRpcGxlRm9ybXVsYXJpb3MgPSBmb3JtdWxhcmlvQUFicmlyLnVuaWRhZF9hbmFsaXNpcyAhPSBwcm9wcy5mb3JtdWxhcmlvLnVuaWRhZF9hbmFsaXNpcztcclxuICAgIHZhciBudWV2b0NhbXBvUGsgPSBkZWZPcGVyYXRpdm8uZGVmVUFbZm9ybXVsYXJpb0FBYnJpci51bmlkYWRfYW5hbGlzaXNdLnBrO1xyXG4gICAgLy8gdmFyIHZhcl9uYW1lPSckQi4nK2Nhc2lsbGVyby5zYWx0bzsgLy9vcmlnaW5hbFxyXG4gICAgdmFyIGlkU2VjY2lvbiA9IGBzZWNjaW9uLWJvdG9uLWZvcm11bGFyaW8tJHtCRl9saXN0b31gO1xyXG4gICAgdmFyIGlkQnV0dG9uID0gYHNwZWNpYWwtYnV0dG9uLSR7aWRTZWNjaW9ufWA7XHJcbiAgICB2YXIgdmFyX25hbWVfcmVnaXN0cm8gPSBtdWx0aXBsZUZvcm11bGFyaW9zID8gQkZfYWdyZWdhciA6IEJGX2xpc3RvO1xyXG4gICAgcmVnaXN0cmFyRWxlbWVudG88SFRNTERpdkVsZW1lbnQ+KHtcclxuICAgICAgICBpZDogaWRTZWNjaW9uLFxyXG4gICAgICAgIHZhcmlhYmxlOiB2YXJfbmFtZV9yZWdpc3RybyxcclxuICAgICAgICBmb3JQazogZm9yUGssXHJcbiAgICAgICAgZGlyZWN0OiB0cnVlLFxyXG4gICAgICAgIGZ1bjogKHJlc3B1ZXN0YXNBdW1lbnRhZGFzOiBSZXNwdWVzdGFzLCBmZWVkYmFja1JvdzogRm9ybVN0cnVjdHVyZVN0YXRlPElkVmFyaWFibGUsIFZhbG9yLCBJZEZpbj4sIGRpdjogSFRNTERpdkVsZW1lbnQsXHJcbiAgICAgICAgICAgIGZlZWRiYWNrQWxsOiB7XHJcbiAgICAgICAgICAgICAgICBbZm9ybXVsYXJpbyBpbiBQbGFpbkZvclBrXTogRm9ybVN0cnVjdHVyZVN0YXRlPElkVmFyaWFibGUsIFZhbG9yLCBJZEZpbj4gLy8gcmVzdWx0YWRvIGRlbCByb3dWYWxpZGF0b3IgcGFyYSBlc3RhZG8uZm9yUGtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICkgPT4ge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGVzdGFkb19saXN0byA9IGZlZWRiYWNrUm93LmZlZWRiYWNrW0JGX2xpc3RvXT8uZXN0YWRvIHx8ICd2YWxpZGEnO1xyXG4gICAgICAgICAgICAgICAgdmFyIGVzdGFkb19hZ3JlZ2FyID0gbXVsdGlwbGVGb3JtdWxhcmlvcyA/IChmZWVkYmFja1Jvdy5mZWVkYmFja1tCRl9hZ3JlZ2FyXT8uZXN0YWRvIHx8ICd2YWxpZGEnKSA6ICd2YWxpZGEnO1xyXG4gICAgICAgICAgICAgICAgdmFyIGVzdGFkb19nZW5lcmFsID0gZXN0YWRvX2FncmVnYXIgIT09ICd2YWxpZGEnID8gZXN0YWRvX2FncmVnYXIgOiBlc3RhZG9fbGlzdG87XHJcbiAgICAgICAgICAgICAgICBzZXRBdHRyRGlzdGludG8oZGl2LCAnbnVlc3Ryby12YWxpZGF0b3InLCBlc3RhZG9fZ2VuZXJhbCk7XHJcbiAgICAgICAgICAgICAgICBzZXRBdHRyRGlzdGludG8oZGl2LCAndGllbmUtdmFsb3InLCBlc3RhZG9fZ2VuZXJhbCA9PT0gJ3ZhbGlkYScgPyAndmFsaWRvJyA6ICdOTycpO1xyXG5cclxuICAgICAgICAgICAgICAgIHZhciBsaXN0YURlQm90b25lc0FicmlyOiBEZWZpbmljaW9uRm9ybXVsYXJpb0FicmlyW10gPSBbXTtcclxuICAgICAgICAgICAgICAgIC8vIHZhciBlc1ZhckFjdHVhbCA9IGZlZWRiYWNrUm93LmFjdHVhbCA9PSAnJEIuRjonK2Nhc2lsbGVyby5zYWx0bzsgIC8vb3JpZ2luYWxcclxuICAgICAgICAgICAgICAgIHZhciBlc1ZhckFjdHVhbCA9ICEhZmVlZGJhY2tSb3cuYWN0dWFsPy5zdGFydHNXaXRoKEJGX2xpc3RvKTtcclxuICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdCb3RvbkZvcm11bGFyaW9EZXNwbGllZ3VlIGVzVmFyQWN0dWFsICcgK2VzVmFyQWN0dWFsICApO1xyXG4gICAgICAgICAgICAgICAgaWYgKG11bHRpcGxlRm9ybXVsYXJpb3MgJiYgY2FzaWxsZXJvLnNhbHRvICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyAgbGV0IGRlZkZvcm11bGFyaW86SW5mb0Zvcm11bGFyaW8gPSBlc3RydWN0dXJhLmZvcm11bGFyaW9zWydGOicrY2FzaWxsZXJvLnNhbHRvIGFzIElkRm9ybXVsYXJpb107ICAgICAgLy9vcmlnaW5hbFxyXG4gICAgICAgICAgICAgICAgICAgIGxldCBkZWZGb3JtdWxhcmlvOiBJbmZvRm9ybXVsYXJpbyA9IGVzdHJ1Y3R1cmEuZm9ybXVsYXJpb3NbaWRGb3JtdWxhcmlvRGVzdGlub107XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGRlZlVBID0gZXN0cnVjdHVyYS51bmlkYWRlc19hbmFsaXNpc1tkZWZGb3JtdWxhcmlvLmNhc2lsbGVyb3MudW5pZGFkX2FuYWxpc2lzIV07XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNvbmp1bnRvID0gcmVzcHVlc3Rhc0F1bWVudGFkYXNbZGVmRm9ybXVsYXJpby5jYXNpbGxlcm9zLnVuaWRhZF9hbmFsaXNpcyFdO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBjYW50aWRhZEVzcGVyYWRhID0gcmVzcHVlc3Rhc0F1bWVudGFkYXNbY2FzaWxsZXJvLmV4cHJlc2lvbl9oYWJpbGl0YXIgYXMgSWRWYXJpYWJsZV07XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIG51bUFjdHVhbDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gIHZhciBlc3RhZG9EZWxCb3RvbiA9IGZlZWRiYWNrUm93LmZlZWRiYWNrWyckQi5GOicrY2FzaWxsZXJvLnNhbHRvIGFzIElkVmFyaWFibGVdLmVzdGFkbyAgIC8vb3JpZ2luYWxcclxuICAgICAgICAgICAgICAgICAgICB2YXIgZXN0YWRvRGVsQm90b24gPSBmZWVkYmFja1Jvdy5mZWVkYmFja1tCRl9saXN0b10uZXN0YWRvXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coJ0JvdG9uRm9ybXVsYXJpb0Rlc3BsaWVndWUgZXN0YWRvRGVsQm90b24gJyArZXN0YWRvRGVsQm90b24gICk7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW8gPSBlc3RydWN0dXJhLmNvbmZpZ1NvcnRlbyA/IGVzdHJ1Y3R1cmEuY29uZmlnU29ydGVvW2dldE1haW5Gb3JtRm9yVml2aWVuZGEoZm9yUGtbZXN0cnVjdHVyYS5wa0FncmVnYWRhVWFQcGFsXSldIDogbnVsbFxyXG4gICAgICAgICAgICAgICAgICAgIHZhciBoYWJpbGl0YWNpb25Cb3RvbkZvcm11bGFyaW8gPSBlc3RydWN0dXJhLmhhYmlsaXRhY2lvbkJvdG9uRm9ybXVsYXJpbztcclxuICAgICAgICAgICAgICAgICAgICBsaXN0YURlQm90b25lc0FicmlyID0gbGlrZUFyKGNvbmp1bnRvKS5tYXAoKF8sIGkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG51bTogbnVtYmVyID0gbnVtYmVyT3JTdHJpbmdJbmNJZkFycmF5KGksIGNvbmp1bnRvKSBhcyBudW1iZXI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBmb3JQayA9IHsgLi4ucHJvcHMuZm9yUGssIGZvcm11bGFyaW86IGlkRm9ybXVsYXJpb0Rlc3Rpbm8sIFtudWV2b0NhbXBvUGtdOiBudW0gfTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZvcm1Ibm9zID0gYnVzY2FySG5vc0Zvcm11bGFyaW8oaWRGb3JtdWxhcmlvRGVzdGlubylcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZlZWRiYWNrID0gZmVlZGJhY2tBbGxbdG9QbGFpbkZvclBrKGZvclBrKV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChudW1BY3R1YWwgPT0gbnVsbCAmJiBmZWVkYmFjay5yZXN1bWVuID09IFwidmFjaW9cIiAmJiBlc3RhZG9EZWxCb3RvbiA9PSAndmFsaWRhJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtQWN0dWFsID0gbnVtO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JQayxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VtZW46IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3R1YWw6IGNhbGN1bGFyQWN0dWFsQkYoY29uZmlnU29ydGVvRm9ybXVsYXJpbywgbnVtLCBudW1BY3R1YWwsIGlkRm9ybXVsYXJpb0Rlc3Rpbm8sIHJlc3B1ZXN0YXNBdW1lbnRhZGFzKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZpbzogbnVtQWN0dWFsID09IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJtaXRlQm9ycmFyOiBsaWtlQXIoY29uanVudG8pLmFycmF5KCkubGVuZ3RoID09IE51bWJlcihpKSArIDEgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja0Zvcm1zVmFjaW9zKGZvcm1Ibm9zLCBmZWVkYmFja0FsbCwgZm9yUGspICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsY3VsYXJQZXJtaXRlQm9ycmFyQkYoY29uZmlnU29ydGVvRm9ybXVsYXJpbywgaWRGb3JtdWxhcmlvRGVzdGlubyksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJtaXRlQm9ycmFyR2FiaW5ldGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZDogY2FsY3VsYXJEaXNhYmxlZEJGKGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW8sIGhhYmlsaXRhY2lvbkJvdG9uRm9ybXVsYXJpbywgbnVtLCBpZEZvcm11bGFyaW9EZXN0aW5vLCByZXNwdWVzdGFzQXVtZW50YWRhcylcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0pLmFycmF5KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRydWUgLypcInB1ZWRlIGFncmVnYXIgLy9UT0RPIFZFUiBFU1RPXCIqLyAmJiAoY29uanVudG8gaW5zdGFuY2VvZiBBcnJheSB8fCBjb25qdW50byA9PSBudWxsKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgbnVldm9WYWxvclBrID0gKGNvbmp1bnRvID09IG51bGwgPyAwIDogY29uanVudG8ubGVuZ3RoKSArIDE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBmb3JQayA9IHsgLi4ucHJvcHMuZm9yUGssIGZvcm11bGFyaW86IGlkRm9ybXVsYXJpb0Rlc3Rpbm8sIFtudWV2b0NhbXBvUGtdOiBudWV2b1ZhbG9yUGsgfTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGxpc3RvUHJlc2lvbmFkbyA9IHJlc3B1ZXN0YXNBdW1lbnRhZGFzW0JGX2xpc3RvXSAhPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgZGViZUFncmVnYXJPbGlzdG8gPSBudW1BY3R1YWwgPT0gbnVsbCAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNhc2lsbGVyby5leHByZXNpb25faGFiaWxpdGFyID9cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2FudGlkYWRFc3BlcmFkYSA9PSBudWxsIHx8IGNhbnRpZGFkRXNwZXJhZGEgIT0gKGNvbmp1bnRvICE9IG51bGwgJiYgY29uanVudG8ubGVuZ3RoKSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICFsaXN0b1ByZXNpb25hZG9cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgJiYgKGVzdGFkb0RlbEJvdG9uID09ICd2YWxpZGEnIHx8IGVzVmFyQWN0dWFsKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGlzdGFEZUJvdG9uZXNBYnJpci5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvclBrLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtOiBudWV2b1ZhbG9yUGssXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlc0FncmVnYXI6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3R1YWw6IGRlYmVBZ3JlZ2FyT2xpc3RvLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldmlvOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkOiBjYWxjdWxhckRpc2FibGVkQkZBZ3JlZ2FyTGlzdG8oY29uZmlnU29ydGVvRm9ybXVsYXJpbywgaGFiaWxpdGFjaW9uQm90b25Gb3JtdWxhcmlvLCBpZEZvcm11bGFyaW9EZXN0aW5vKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGlzdGFEZUJvdG9uZXNBYnJpci5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvclBrLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtOiBudWV2b1ZhbG9yUGsgLSAxLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXNDb25maXJtYXI6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3R1YWw6IGRlYmVBZ3JlZ2FyT2xpc3RvLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldmlvOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkOiBjYWxjdWxhckRpc2FibGVkQkZBZ3JlZ2FyTGlzdG8oY29uZmlnU29ydGVvRm9ybXVsYXJpbywgaGFiaWxpdGFjaW9uQm90b25Gb3JtdWxhcmlvLCBpZEZvcm11bGFyaW9EZXN0aW5vKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBmb3JQayA9IHsgLi4ucHJvcHMuZm9yUGssIGZvcm11bGFyaW86IGlkRm9ybXVsYXJpb0Rlc3Rpbm8gfTtcclxuICAgICAgICAgICAgICAgICAgICBsaXN0YURlQm90b25lc0FicmlyID0gW3sgZm9yUGssIG51bTogZmFsc2UsIHVuaWNvOiB0cnVlLCBhY3R1YWw6IGVzVmFyQWN0dWFsLCBwcmV2aW86IHRydWUgfV1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHZhciB0b2Rvc0xvc0JvdG9uZXMgPSBsaXN0YURlQm90b25lc0FicmlyLm1hcChkZWZCb3RvbiA9PlxyXG4gICAgICAgICAgICAgICAgICAgIGJvdG9uRm9ybXVsYXJpb0NvblJlc3VtZW4oZGVmQm90b24sIGZlZWRiYWNrQWxsW3RvUGxhaW5Gb3JQayhkZWZCb3Rvbi5mb3JQayldID8/IHsgcmVzdW1lbjogJ3ZhY2lvJyB9LCByZXNwdWVzdGFzQXVtZW50YWRhcyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzaWxsZXJvLCBwcm9wcy5mb3JQaywgaWRCdXR0b24sIGZvcm11bGFyaW9BQWJyaXIsIHBlZGlyQ29uZmlybWFjaW9uQm9ycmFkb1xyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIGxldCBub21icmVzQ2FtcG9zUmVzdW1lbiA9IGxpa2VBcigoY2FzaWxsZXJvLmVzcGVjaWFsPy5jYW1wb3NSZXN1bWVuIHx8IFtdKSkuYXJyYXkoKS5tYXAoYyA9PiBjKTtcclxuICAgICAgICAgICAgICAgIHZhciBodG1sU2VjY2lvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkU2VjY2lvbikhO1xyXG4gICAgICAgICAgICAgICAgaHRtbFNlY2Npb24uaW5uZXJIVE1MID0gXCJcIjtcclxuICAgICAgICAgICAgICAgIGh0bWxTZWNjaW9uLmFwcGVuZENoaWxkKGh0bWwudGFibGUoeyBjbGFzczogYHRhYmxlIHRhYmxlLXN0cmlwZWQgJHtub21icmVzQ2FtcG9zUmVzdW1lbi5sZW5ndGggPyAndy1hdXRvJyA6ICcnfWAgfSwgW1xyXG4gICAgICAgICAgICAgICAgICAgIGh0bWwudGhlYWQoW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBodG1sLnRyKFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2lsbGVyby5hY2xhcmFjaW9uID8gaHRtbC50aCgpIDogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh0bWwudGgoY2FzaWxsZXJvLm5vbWJyZSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5ub21icmVzQ2FtcG9zUmVzdW1lbi5tYXAoKG5vbWJyZUNhbXBvKSA9PiBodG1sLnRoKG5vbWJyZUNhbXBvIGFzIHN0cmluZykpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBdKVxyXG4gICAgICAgICAgICAgICAgICAgIF0pLFxyXG4gICAgICAgICAgICAgICAgICAgIGh0bWwudGJvZHkoW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAuLi50b2Rvc0xvc0JvdG9uZXNcclxuICAgICAgICAgICAgICAgICAgICBdKVxyXG4gICAgICAgICAgICAgICAgXSkuY3JlYXRlKCkpO1xyXG4gICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgICAgICAgICAgIHZhciBlcnJvciA9IHVuZXhwZWN0ZWQoZXJyKTtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiZW50cmEgYWwgY2F0Y2hcIilcclxuICAgICAgICAgICAgICAgIGRpdi50ZXh0Q29udGVudCA9ICdlc3RvLCBGQUxMw4kgJyArIGVycm9yLm1lc3NhZ2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9KTtcclxuICAgIGNvbnN0IGlyID0gKGRlZkJvdG9uOiBEZWZpbmljaW9uRm9ybXVsYXJpb0FicmlyKSA9PiB7XHJcbiAgICAgICAgaWYgKCFjYXNpbGxlcm8uc2FsdG8pIHtcclxuICAgICAgICAgICAgb3BjaW9uZXMubW9kb0RpcmVjdG8gP1xyXG4gICAgICAgICAgICAgICAgbnVsbFxyXG4gICAgICAgICAgICAgICAgOlxyXG4gICAgICAgICAgICAgICAgZGlzcGF0Y2goZGlzcGF0Y2hlcnMuVk9MVkVSX0hEUih7fSkpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHZhciBudWV2YUZvclBrID0geyAuLi5mb3JQaywgZm9ybXVsYXJpbzogaWRGb3JtdWxhcmlvRGVzdGlubyB9O1xyXG4gICAgICAgICAgICB2YXIgeyBsaXN0bzogQkZfbGlzdG8sIGFncmVnYXI6IEJGX2FncmVnYXIgfSA9IGdldEJGVmFyTmFtZXMoY2FzaWxsZXJvLnNhbHRvKTtcclxuICAgICAgICAgICAgaWYgKG11bHRpcGxlRm9ybXVsYXJpb3MpIHtcclxuICAgICAgICAgICAgICAgIChudWV2YUZvclBrIGFzIGFueSlbbnVldm9DYW1wb1BrXSA9IGRlZkJvdG9uLm51bVxyXG4gICAgICAgICAgICAgICAgaWYgKGRlZkJvdG9uLmVzQWdyZWdhcikge1xyXG4gICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoQnlQYXNzKGFjY2lvbl9hZ3JlZ2FyX2Zvcm11bGFyaW8sIHsgZm9yUGs6IG51ZXZhRm9yUGsgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2hCeVBhc3MoYWNjaW9uX3JlZ2lzdHJhcl9yZXNwdWVzdGEsIHsgZm9yUGs6IHByb3BzLmZvclBrLCB2YXJpYWJsZTogQkZfYWdyZWdhciwgcmVzcHVlc3RhOiAxIGFzIFZhbG9yIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoQnlQYXNzKGFjY2lvbl9yZWdpc3RyYXJfcmVzcHVlc3RhLCB7IGZvclBrOiBwcm9wcy5mb3JQaywgdmFyaWFibGU6IEJGX2xpc3RvLCByZXNwdWVzdGE6IG51bGwgYXMgdW5rbm93biBhcyBWYWxvciB9KTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoY2FzaWxsZXJvLmV4cHJlc2lvbl9oYWJpbGl0YXIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2hCeVBhc3MoYWNjaW9uX3JlZ2lzdHJhcl9yZXNwdWVzdGEsIHsgZm9yUGs6IHByb3BzLmZvclBrLCB2YXJpYWJsZTogY2FzaWxsZXJvLmV4cHJlc2lvbl9oYWJpbGl0YXIgYXMgSWRWYXJpYWJsZSwgcmVzcHVlc3RhOiBudWxsIGFzIHVua25vd24gYXMgVmFsb3IgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBkaXNwYXRjaEJ5UGFzcyhhY2Npb25fYWJyaXJfZm9ybXVsYXJpbywgeyBmb3JQazogbnVldmFGb3JQayB9KTtcclxuICAgICAgICAgICAgICAgICAgICAvLyBTaSBhYnJvIHVubyBleGlzdGVudGUsIHRhbWJpw6luIHJlc2V0ZW8gZWwgbGlzdG8gcGFyYSBmb3J6YXIgcXVlIHZ1ZWx2YW4gYSBhcHJldGFybG8gc2kgY2FtYmlhbiBhbGdvXHJcbiAgICAgICAgICAgICAgICAgICAgLy9kaXNwYXRjaEJ5UGFzcyhhY2Npb25fcmVnaXN0cmFyX3Jlc3B1ZXN0YSwgeyBmb3JQazogcHJvcHMuZm9yUGssIHZhcmlhYmxlOiBCRl9saXN0bywgcmVzcHVlc3RhOiBudWxsIGFzIHVua25vd24gYXMgVmFsb3IgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBkaXNwYXRjaEJ5UGFzcyhhY2Npb25fcmVnaXN0cmFyX3Jlc3B1ZXN0YSwgeyBmb3JQazogcHJvcHMuZm9yUGssIHZhcmlhYmxlOiBCRl9saXN0bywgcmVzcHVlc3RhOiAxIGFzIFZhbG9yIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGRpc3BhdGNoKGRpc3BhdGNoZXJzLkNBTUJJQVJfRk9STVVMQVJJTyh7IGZvclBrOiBudWV2YUZvclBrLCBhcGlsYXJWdWVsdGE6IHRydWUgfSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoY29uZmlybWFyRm9yemFySXIpIHsgc2V0Q29uZmlybWFyRm9yemFySXIoZmFsc2UpIH1cclxuICAgIH07XHJcbiAgICByZXR1cm4gPERlc3BsZWdhckNhc2lsbGVybyBjYXNpbGxlcm89e2Nhc2lsbGVyb30+XHJcbiAgICAgICAge211bHRpcGxlRm9ybXVsYXJpb3MgJiYgPHNwYW4gaWQ9eyd2YXItJyArIEJGX2FncmVnYXJ9IHN0eWxlPXt7IHBvc2l0aW9uOiAnYWJzb2x1dGUnLCBtYXJnaW5Ub3A6ICctNjBweCcgfX0+PC9zcGFuPn1cclxuICAgICAgICA8c3BhbiBpZD17J3Zhci0nICsgQkZfbGlzdG99IHN0eWxlPXt7IHBvc2l0aW9uOiAnYWJzb2x1dGUnLCBtYXJnaW5Ub3A6ICctNjBweCcgfX0+PC9zcGFuPlxyXG4gICAgICAgIDxkaXYgaWQ9e2lkU2VjY2lvbn0+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPEJ1dHRvbiBjbGFzc05hbWU9XCJzcGVjaWFsLWJ1dHRvblwiIGlkPXtpZEJ1dHRvbn1cclxuICAgICAgICAgICAgb25DbGljaz17KGV2ZW50KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpcihKU09OLnBhcnNlKChldmVudC50YXJnZXQhIGFzIHVua25vd24gYXMgSFRNTEJ1dHRvbkVsZW1lbnQpLmdldEF0dHJpYnV0ZSgnZGVmLWJ1dHRvbicpISkpXHJcbiAgICAgICAgICAgIH19XHJcbiAgICAgICAgPmlyIChpbnRlcm5vKTwvQnV0dG9uPlxyXG4gICAgICAgIDxEaWFsb2dcclxuICAgICAgICAgICAgY2xhc3NOYW1lPVwibnVlc3Ryby1kaWFsb2dvXCJcclxuICAgICAgICAgICAgb3Blbj17ISFjb25maXJtYXJGb3J6YXJJcn1cclxuICAgICAgICAgICAgb25DbG9zZT17KCkgPT4gc2V0Q29uZmlybWFyRm9yemFySXIobnVsbCl9XHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm51ZXN0cm8tZGlhbG9nb1wiPlxyXG4gICAgICAgICAgICAgICAgPFR5cG9ncmFwaHk+Tm8gc2UgcHVlZGUgYXZhbnphciBhbCBzaWd1aWVudGUgZm9ybXVsYXJpby48L1R5cG9ncmFwaHk+XHJcbiAgICAgICAgICAgICAgICA8VHlwb2dyYXBoeT5RdWl6w6FzIG5vIHRlcm1pbsOzIGRlIGNvbnRlc3RhciBsYXMgcHJlZ3VudGFzIGNvcnJlc3BvbmRpZW50ZXM8L1R5cG9ncmFwaHk+XHJcbiAgICAgICAgICAgICAgICA8VHlwb2dyYXBoeT5RdWl6w6FzIG5vIGNvcnJlc3BvbmRlIGVuIGJhc2UgYSBsYXMgcmVzcHVlc3RhcyBvYnRlbmlkYXM8L1R5cG9ncmFwaHk+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8QnV0dG9uIGNvbG9yPVwic2Vjb25kYXJ5XCIgb25DbGljaz17KCkgPT4gY29uZmlybWFyRm9yemFySXIgJiYgaXIoY29uZmlybWFyRm9yemFySXIpfT5mb3J6YXI8L0J1dHRvbj5cclxuICAgICAgICAgICAgPEJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiB2YXJpYW50PVwiY29udGFpbmVkXCIgb25DbGljaz17KCkgPT4gc2V0Q29uZmlybWFyRm9yemFySXIobnVsbCl9PkVudGVuZGlkbzwvQnV0dG9uPlxyXG4gICAgICAgIDwvRGlhbG9nPlxyXG4gICAgICAgIHtjb25maXJtYWNpb25Cb3JyYWRvICYmIChcclxuICAgICAgICAgICAgPERpYWxvZyBvcGVuPXt0cnVlfSBvbkNsb3NlPXsoKSA9PiB7IFxyXG4gICAgICAgICAgICAgICAgc2V0Q29uZmlybWFjaW9uQm9ycmFkbyhudWxsKTsgXHJcbiAgICAgICAgICAgICAgICBzZXRGcmFzZUJvcnJhZG8oJycpOyBcclxuICAgICAgICAgICAgICAgIHNldEVycm9yRnJhc2VCb3JyYWRvKGZhbHNlKTsgXHJcbiAgICAgICAgICAgIH19PlxyXG4gICAgICAgICAgICAgICAgPERpYWxvZ1RpdGxlPkFkdmVydGVuY2lhOiBTZSBwZXJkZXLDoW4gZGF0b3M8L0RpYWxvZ1RpdGxlPlxyXG4gICAgICAgICAgICAgICAgPERpYWxvZ0NvbnRlbnQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPERpYWxvZ0NvbnRlbnRUZXh0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7YEVzdMOhIHBvciBib3JyYXIgZWwgZm9ybXVsYXJpbyAke2NvbmZpcm1hY2lvbkJvcnJhZG8uZGVmQm90b24uZm9yUGsuZm9ybXVsYXJpb30gKCR7ZXN0cnVjdHVyYS51bmlkYWRlc19hbmFsaXNpc1tlc3RydWN0dXJhLmZvcm11bGFyaW9zW2NvbmZpcm1hY2lvbkJvcnJhZG8uZGVmQm90b24uZm9yUGsuZm9ybXVsYXJpb10uY2FzaWxsZXJvcy51bmlkYWRfYW5hbGlzaXNdLnBrX2FncmVnYWRhfTogJHtjb25maXJtYWNpb25Cb3JyYWRvLmRlZkJvdG9uLm51bX0pLiBMb3MgZGF0b3MgZGVsIG1pc21vIHkgdG9kb3Mgc3VzIHJlZ2lzdHJvcyBhc29jaWFkb3Mgc2UgcGVyZGVyw6FuLiDCv0Rlc2VhIGNvbnRpbnVhcj9gfVxyXG4gICAgICAgICAgICAgICAgICAgIDwvRGlhbG9nQ29udGVudFRleHQ+XHJcbiAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBtYXJnaW5Ub3A6ICcyMHB4JywgbWFyZ2luQm90dG9tOiAnMjBweCcgfX0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxEaWFsb2dDb250ZW50VGV4dD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhcmEgY29uZmlybWFyIGVsIGJvcnJhZG8sIGVzY3JpYmEgbGEgZnJhc2UgPHN0cm9uZz5cImZvcnphciBib3JyYWRvXCI8L3N0cm9uZz4gYSBjb250aW51YWNpw7NuOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L0RpYWxvZ0NvbnRlbnRUZXh0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD1cImlucHV0LWZvcnphci1ib3JyYWRvXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17ZnJhc2VCb3JyYWRvfSBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXtlID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRGcmFzZUJvcnJhZG8oZS50YXJnZXQudmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEVycm9yRnJhc2VCb3JyYWRvKGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3t3aWR0aDogJzEwMCUnLCBwYWRkaW5nOiAnOHB4JywgYm9yZGVyOiBlcnJvckZyYXNlQm9ycmFkbyA/ICcxcHggc29saWQgcmVkJyA6ICcxcHggc29saWQgI2NjYycsIGJvcmRlclJhZGl1czogJzRweCd9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJmb3J6YXIgYm9ycmFkb1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvQ29tcGxldGU9XCJvZmZcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7ZXJyb3JGcmFzZUJvcnJhZG8gJiYgPGRpdiBzdHlsZT17e2NvbG9yOiAncmVkJywgbWFyZ2luVG9wOiAnNXB4JywgZm9udFNpemU6ICcwLjg1ZW0nfX0+TGEgZnJhc2UgaW5ncmVzYWRhIGVzIGluY29ycmVjdGEuPC9kaXY+fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8VHlwb2dyYXBoeSB2YXJpYW50PVwiaDZcIiBzdHlsZT17eyBtYXJnaW5Ub3A6ICcxMHB4JywgZm9udFdlaWdodDogJ2JvbGQnIH19PkRhdG9zIHF1ZSBzZSBwZXJkZXLDoW46PC9UeXBvZ3JhcGh5PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3sgbWF4V2lkdGg6ICc2MDBweCcsIG1hcmdpbjogJzAgYXV0bycsIGZvbnRGYW1pbHk6ICdzYW5zLXNlcmlmJyB9fT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPFJlbmRlcml6YWRvckpTT04gZGF0b3M9e2NvbmZpcm1hY2lvbkJvcnJhZG8uZGF0b3N9IC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L0RpYWxvZ0NvbnRlbnQ+XHJcbiAgICAgICAgICAgICAgICA8RGlhbG9nQWN0aW9ucz5cclxuICAgICAgICAgICAgICAgICAgICA8QnV0dG9uIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xvcj1cInByaW1hcnlcIiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudD1cIm91dGxpbmVkXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHsgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRDb25maXJtYWNpb25Cb3JyYWRvKG51bGwpOyBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEZyYXNlQm9ycmFkbygnJyk7IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0RXJyb3JGcmFzZUJvcnJhZG8oZmFsc2UpOyBcclxuICAgICAgICAgICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIENhbmNlbGFyXHJcbiAgICAgICAgICAgICAgICAgICAgPC9CdXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPEJ1dHRvbiBjb2xvcj1cInNlY29uZGFyeVwiIHZhcmlhbnQ9XCJjb250YWluZWRcIiBvbkNsaWNrPXsoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY29uZmlybWFjaW9uQm9ycmFkbykgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZyYXNlQm9ycmFkby50cmltKCkudG9Mb3dlckNhc2UoKSAhPT0gXCJmb3J6YXIgYm9ycmFkb1wiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRFcnJvckZyYXNlQm9ycmFkbyh0cnVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGlucHV0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2lucHV0LWZvcnphci1ib3JyYWRvJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlucHV0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0LmZvY3VzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0LnNjcm9sbEludG9WaWV3KHsgYmVoYXZpb3I6ICdzbW9vdGgnLCBibG9jazogJ2NlbnRlcicgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgMTAwKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB7ZGVmQm90b24sIGZvclBrUGFkcmV9ID0gY29uZmlybWFjaW9uQm9ycmFkbztcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZm9yUGsgPSBkZWZCb3Rvbi5mb3JQaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgYWNjaW9uX2JvcnJhcl9mb3JtdWxhcmlvKHsgZm9yUGssIGZvclBrUGFkcmUgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgbGlzdG8sIGFncmVnYXIgfSA9IGdldEJGVmFyTmFtZXMoY2FzaWxsZXJvLnNhbHRvKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRlZkJvdG9uLm51bSA9PT0gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2hCeVBhc3MoYWNjaW9uX3JlZ2lzdHJhcl9yZXNwdWVzdGEsIHsgZm9yUGs6IGZvclBrUGFkcmUsIHZhcmlhYmxlOiBhZ3JlZ2FyLCByZXNwdWVzdGE6IG51bGwgYXMgdW5rbm93biBhcyBWYWxvciB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNwYXRjaEJ5UGFzcyhhY2Npb25fcmVnaXN0cmFyX3Jlc3B1ZXN0YSwgeyBmb3JQazogZm9yUGtQYWRyZSwgdmFyaWFibGU6IGxpc3RvLCByZXNwdWVzdGE6IG51bGwgYXMgdW5rbm93biBhcyBWYWxvciB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNhc2lsbGVyby5leHByZXNpb25faGFiaWxpdGFyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwYXRjaEJ5UGFzcyhhY2Npb25fcmVnaXN0cmFyX3Jlc3B1ZXN0YSwgeyBmb3JQazogZm9yUGtQYWRyZSwgdmFyaWFibGU6IGNhc2lsbGVyby5leHByZXNpb25faGFiaWxpdGFyIGFzIElkVmFyaWFibGUsIHJlc3B1ZXN0YTogbnVsbCBhcyB1bmtub3duIGFzIFZhbG9yIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldENvbmZpcm1hY2lvbkJvcnJhZG8obnVsbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEZyYXNlQm9ycmFkbygnJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEVycm9yRnJhc2VCb3JyYWRvKGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICB9fT5Cb3JyYXIgZGUgdG9kYXMgZm9ybWFzPC9CdXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L0RpYWxvZ0FjdGlvbnM+XHJcbiAgICAgICAgICAgIDwvRGlhbG9nPlxyXG4gICAgICAgICl9XHJcbiAgICA8L0Rlc3BsZWdhckNhc2lsbGVybz5cclxufVxyXG5cclxuZnVuY3Rpb24gQ2FzaWxsZXJvRGVzY29ub2NpZG8ocHJvcHM6IHsgY2FzaWxsZXJvOiBDYXNpbGxlcm9CYXNlLCBmb3JQazogRm9yUGsgfSkge1xyXG4gICAgcmV0dXJuIDxEZXNwbGVnYXJDYXNpbGxlcm9cclxuICAgICAgICBpZD17YGNhc2lsbGVyb2Rlc2Nvbm9jaWRvLSR7cHJvcHMuY2FzaWxsZXJvLmlkX2Nhc2lsbGVyb31gfVxyXG4gICAgICAgIGNhc2lsbGVybz17cHJvcHMuY2FzaWxsZXJvIGFzIEJsb3F1ZX1cclxuICAgICAgICBzdHlsZT17eyBkaXNwbGF5OiAnbm9uZScgfX1cclxuICAgID5cclxuICAgICAgICA8VHlwb2dyYXBoeT5UaXBvIGRlIGNhc2lsbGVybyBubyBpbXBsZW1lbnRhZG86IFwie3Byb3BzLmNhc2lsbGVyby50aXBvY31cIiBwYXJhIFwie3Byb3BzLmNhc2lsbGVyby5jYXNpbGxlcm99XCI8L1R5cG9ncmFwaHk+XHJcbiAgICAgICAgPEVuY2FiZXphZG9EZXNwbGllZ3VlIGNhc2lsbGVybz17cHJvcHMuY2FzaWxsZXJvIGFzIENhc2lsbGVyb0VuY2FiZXphYmxlfSBsZWVyPXtmYWxzZX0gZm9yUGs9e3Byb3BzLmZvclBrfSAvPlxyXG4gICAgPC9EZXNwbGVnYXJDYXNpbGxlcm8+XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHVzZVNlbGVjdG9yVml2aWVuZGEoZm9yUGs6IEZvclBrKSB7XHJcbiAgICByZXR1cm4gdXNlU2VsZWN0b3IoKHN0YXRlOiBDYXNvU3RhdGUpID0+IHtcclxuICAgICAgICB2YXIgZXN0cnVjdHVyYSA9IGdldEVzdHJ1Y3R1cmEoKTtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBmb3JtdWxhcmlvOiBlc3RydWN0dXJhLmZvcm11bGFyaW9zW2ZvclBrLmZvcm11bGFyaW9dLmNhc2lsbGVyb3MsXHJcbiAgICAgICAgICAgIG1vZG9EZXNwbGllZ3VlOiBzdGF0ZS5vcGNpb25lcy5tb2RvRGVzcGxpZWd1ZSxcclxuICAgICAgICAgICAgb3BjaW9uZXM6IHN0YXRlLm9wY2lvbmVzLFxyXG4gICAgICAgIH1cclxuICAgIH0pXHJcbn1cclxuXHJcbmZ1bmN0aW9uIENvbmp1bnRvUHJlZ3VudGFzRGVzcGxpZWd1ZShwcm9wczogeyBjYXNpbGxlcm86IENvbmp1bnRvUHJlZ3VudGFzLCBmb3JtdWxhcmlvOiBGb3JtdWxhcmlvLCBmb3JQazogRm9yUGsgfSkge1xyXG4gICAgbGV0IHsgY2FzaWxsZXJvLCBmb3JQayB9ID0gcHJvcHM7XHJcbiAgICB2YXIgaWQgPSBgY29uanVudG8tcHJlZ3VudGFzLSR7Y2FzaWxsZXJvLmlkX2Nhc2lsbGVyb31gO1xyXG4gICAgcmVnaXN0cmFyRWxlbWVudG8oe1xyXG4gICAgICAgIGlkLFxyXG4gICAgICAgIGRpcmVjdDogdHJ1ZSxcclxuICAgICAgICBmdW46IHJlZ2lzdHJhZG9yRGVWYXJpYWJsZShjYXNpbGxlcm8pXHJcbiAgICB9KVxyXG4gICAgbGV0IG1vZG9EZXNwbGllZ3VlID0gXCJub3JtYWxcIjtcclxuICAgIGxldCBoYWJpbGl0YWRvID0gdHJ1ZTtcclxuICAgIHJldHVybiBoYWJpbGl0YWRvIHx8IG1vZG9EZXNwbGllZ3VlID09ICdtZXRhZGF0b3MnID8gPERlc3BsZWdhckNhc2lsbGVybyBpZD17aWR9IGNhc2lsbGVybz17Y2FzaWxsZXJvfT5cclxuICAgICAgICA8RW5jYWJlemFkb0Rlc3BsaWVndWUgY2FzaWxsZXJvPXtjYXNpbGxlcm99IGZvclBrPXtmb3JQa30gbGVlcj17Y2FzaWxsZXJvLmxlZXIgIT09IGZhbHNlfSAvPlxyXG4gICAgICAgIDxEZXNwbGVnYXJDb250ZW5pZG9JbnRlcm5vQmxvcXVlT0Zvcm11bGFyaW8gYmxvcXVlT0Zvcm11bGFyaW89e2Nhc2lsbGVyb30gZm9ybXVsYXJpbz17cHJvcHMuZm9ybXVsYXJpb30gZm9yUGs9e2ZvclBrfSBtdWx0aXBsZT17ZmFsc2V9IC8+XHJcbiAgICA8L0Rlc3BsZWdhckNhc2lsbGVybz4gOiBudWxsO1xyXG59XHJcblxyXG5mdW5jdGlvbiBEZXNwbGVnYXJDb250ZW5pZG9JbnRlcm5vQmxvcXVlT0Zvcm11bGFyaW8ocHJvcHM6IHsgYmxvcXVlT0Zvcm11bGFyaW86IEJsb3F1ZSB8IEZvcm11bGFyaW8gfCBDb25qdW50b1ByZWd1bnRhcywgZm9ybXVsYXJpbzogRm9ybXVsYXJpbywgZm9yUGs6IEZvclBrLCBtdWx0aXBsZTogYm9vbGVhbiB9KSB7XHJcbiAgICB2YXIgcGFyY2lhbGl6YWJsZSA9IHByb3BzLmJsb3F1ZU9Gb3JtdWxhcmlvLnRpcG9jID09ICdGJztcclxuICAgIGNvbnN0IFt2ZXJUb2RvLCBzZXRWZXJUb2RvXSA9IHVzZVN0YXRlKCFwYXJjaWFsaXphYmxlKTtcclxuICAgIGNvbnN0IFtmb3JQa0FjdHVhbCwgc2V0Rm9yUGtBY3R1YWxdID0gdXNlU3RhdGU8SWRDYXNpbGxlcm8gfCBudWxsPihudWxsKTtcclxuICAgIGlmIChwYXJjaWFsaXphYmxlKSB7XHJcbiAgICAgICAgaWYgKGZvclBrQWN0dWFsICE9IHByb3BzLmJsb3F1ZU9Gb3JtdWxhcmlvLmNhc2lsbGVybykge1xyXG4gICAgICAgICAgICBzZXRWZXJUb2RvKGZhbHNlKVxyXG4gICAgICAgICAgICBzZXRGb3JQa0FjdHVhbChwcm9wcy5ibG9xdWVPRm9ybXVsYXJpby5jYXNpbGxlcm8pXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHZhciB0aW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgc2V0VmVyVG9kbyh0cnVlKTtcclxuICAgICAgICAgICAgfSwgMjUwKVxyXG4gICAgICAgICAgICByZXR1cm4gKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRpbWVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcbiAgICBjb25zdCBsaW1pdGVOb1ZlclRvZG8gPSAzO1xyXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICBpZiAocHJvcHMuYmxvcXVlT0Zvcm11bGFyaW8udGlwb2MgPT0gJ0YnKSB7XHJcbiAgICAgICAgICAgIHZvbGNhZG9JbmljaWFsRWxlbWVudG9zUmVnaXN0cmFkb3MocHJvcHMuZm9yUGspO1xyXG4gICAgICAgIH1cclxuICAgIH0sIFt0b1BsYWluRm9yUGsocHJvcHMuZm9yUGspLCB2ZXJUb2RvXSlcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgaWYgKHByb3BzLmJsb3F1ZU9Gb3JtdWxhcmlvLnRpcG9jID09ICdGJyAmJiB2ZXJUb2RvKSB7XHJcbiAgICAgICAgICAgIHZhciB7IHNpZ3VpZW50ZVZhcmlhYmxlLCB2YXJpYWJsZUFjdHVhbCB9ID0gZGlzcGF0Y2hCeVBhc3MoYWNjaW9uX3JlZ2lzdHJhcl9yZXNwdWVzdGEsIHsgcmVzcHVlc3RhOiBudWxsLCB2YXJpYWJsZTogTk9fQ0FNQklBUl9fU09MT19UUkFFUl9TVEFUVVMsIGZvclBrOiBwcm9wcy5mb3JQayB9KTtcclxuICAgICAgICAgICAgaWYgKHZhcmlhYmxlQWN0dWFsIHx8IHNpZ3VpZW50ZVZhcmlhYmxlKSB7XHJcbiAgICAgICAgICAgICAgICBlbmZvY2FyRWxlbWVudG9EZVZhcmlhYmxlKGNvYWxlc2NlKHZhcmlhYmxlQWN0dWFsIGFzIHN0cmluZyB8IG51bGwsIHNpZ3VpZW50ZVZhcmlhYmxlIGFzIHN0cmluZyB8IG51bGwpIGFzIElkVmFyaWFibGUpXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgZmVlZGJhY2tSb3dWYWxpZGF0b3IgPSBnZXRGZWVkYmFja1Jvd1ZhbGlkYXRvcigpXHJcbiAgICAgICAgICAgICAgICBpZiAoZmVlZGJhY2tSb3dWYWxpZGF0b3JbdG9QbGFpbkZvclBrKHByb3BzLmZvclBrKV0ucmVzdW1lbiA9PSAnb2snKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2Nyb2xsVG9Ub3AoKVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBzY3JvbGxUb1RvcCgpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9KTtcclxuICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT1cImNvbnRlbmlkb1wiPlxyXG4gICAgICAgIHt2ZXJUb2RvID8gbnVsbCA6IDxkaXYgc3R5bGU9e3sgaGVpZ2h0OiBcIjUwMHB4XCIsIHRleHRBbGlnbjogJ2NlbnRlcicsIHZlcnRpY2FsQWxpZ246ICdtaWRkbGUnLCB3aWR0aDogJzEwMCUnLCBwb3NpdGlvbjogXCJmaXhlZFwiLCBiYWNrZ3JvdW5kQ29sb3I6ICdyZ2JhKDEwMCwxMDAsMTAwLDAuMyknLCBmb250U2l6ZTogJzIwMCUnIH19ID5jYXJnYW5kby4uLjwvZGl2Pn1cclxuICAgICAgICB7cHJvcHMuYmxvcXVlT0Zvcm11bGFyaW8uY2FzaWxsZXJvcy5tYXAoKGNhc2lsbGVybywgaSkgPT4ge1xyXG4gICAgICAgICAgICB2YXIga2V5ID0gY2FzaWxsZXJvLnRpcG9jICsgJy0nICsgY2FzaWxsZXJvLmlkX2Nhc2lsbGVybyArICctJyArIGk7XHJcbiAgICAgICAgICAgIHJldHVybiAodmVyVG9kbyB8fCBpIDwgbGltaXRlTm9WZXJUb2RvID9cclxuICAgICAgICAgICAgICAgIChcclxuICAgICAgICAgICAgICAgICAgICBjYXNpbGxlcm8udGlwb2MgPT0gXCJQXCIgPyA8UHJlZ3VudGFEZXNwbGllZ3VlIGtleT17a2V5fSBwcmVndW50YT17Y2FzaWxsZXJvfSBmb3JQaz17cHJvcHMuZm9yUGt9IGRlc3BsaWVndWVFbmNhYmV6YWRvPXtjYXNpbGxlcm8uZGVzcGxpZWd1ZUVuY2FiZXphZG8gPz8gKHByb3BzLmJsb3F1ZU9Gb3JtdWxhcmlvLnRpcG9jID09ICdDUCcgPyAnbGF0ZXJhbCcgOiAnc3VwZXJpb3InKX0gLz4gOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNpbGxlcm8udGlwb2MgPT0gXCJCXCIgPyA8QmxvcXVlRGVzcGxpZWd1ZSBrZXk9e2tleX0gYmxvcXVlPXtjYXNpbGxlcm99IGZvcm11bGFyaW89e3Byb3BzLmZvcm11bGFyaW99IGZvclBrPXtwcm9wcy5mb3JQa30gLz4gOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzaWxsZXJvLnRpcG9jID09IFwiRklMVFJPXCIgPyA8RmlsdHJvRGVzcGxpZWd1ZSBrZXk9e2tleX0gZmlsdHJvPXtjYXNpbGxlcm99IGZvclBrPXtwcm9wcy5mb3JQa30gLz4gOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2lsbGVyby50aXBvYyA9PSBcIkJGXCIgPyA8Qm90b25Gb3JtdWxhcmlvRGVzcGxpZWd1ZSBrZXk9e2tleX0gY2FzaWxsZXJvPXtjYXNpbGxlcm99IGZvcm11bGFyaW89e3Byb3BzLmZvcm11bGFyaW99IGZvclBrPXtwcm9wcy5mb3JQa30gLz4gOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNpbGxlcm8udGlwb2MgPT0gXCJDT05TXCIgPyA8Q29uc2lzdGVuY2lhRGVzcGxpZWd1ZSBrZXk9e2tleX0gY2FzaWxsZXJvPXtjYXNpbGxlcm99IGZvclBrPXtwcm9wcy5mb3JQa30gLz4gOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzaWxsZXJvLnRpcG9jID09IFwiQ1BcIiA/IDxDb25qdW50b1ByZWd1bnRhc0Rlc3BsaWVndWUga2V5PXtrZXl9IGNhc2lsbGVybz17Y2FzaWxsZXJvfSBmb3JtdWxhcmlvPXtwcm9wcy5mb3JtdWxhcmlvfSBmb3JQaz17cHJvcHMuZm9yUGt9IC8+IDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNpbGxlcm8udGlwb2MgPT0gXCJURVhUT1wiID8gPFRleHRvRGVzcGxpZWd1ZSBrZXk9e2tleX0gY2FzaWxsZXJvPXtjYXNpbGxlcm99IGZvclBrPXtwcm9wcy5mb3JQa30gLz4gOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNpbGxlcm8udGlwb2MgPT0gXCJQTUFUUklaXCIgPyA8UE1hdHJpekRlc3BsaWVndWUga2V5PXtrZXl9IGNhc2lsbGVybz17Y2FzaWxsZXJvfSBmb3JQaz17cHJvcHMuZm9yUGt9IC8+IDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2lsbGVyby50aXBvYyA9PSBcIkxJQlJFXCIgPyA8TGlicmVEZXNwbGllZ3VlIGtleT17a2V5fSBjYXNpbGxlcm89e2Nhc2lsbGVyb30gZm9ybXVsYXJpbz17cHJvcHMuZm9ybXVsYXJpb30gZm9yUGs9e3Byb3BzLmZvclBrfSAvPiA6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPENhc2lsbGVyb0Rlc2Nvbm9jaWRvIGtleT17a2V5fSBjYXNpbGxlcm89e2Nhc2lsbGVyb30gZm9yUGs9e3Byb3BzLmZvclBrfSAvPlxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgOiBpID09IGxpbWl0ZU5vVmVyVG9kbyA/XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBrZXk9JyRzcGlubmVyJyBjbGFzc05hbWU9XCJzcGlubmVyLWJvcmRlclwiIHJvbGU9XCJzdGF0dXNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+Y2FyZ2FuZG8gYmxvcXVlLi4uPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDogbnVsbFxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgfSlcclxuICAgICAgICB9PC9kaXY+XHJcbn1cclxuXHJcbmZ1bmN0aW9uIEJsb3F1ZURlc3BsaWVndWUocHJvcHM6IHsgYmxvcXVlOiBCbG9xdWUsIGZvcm11bGFyaW86IEZvcm11bGFyaW8sIGZvclBrOiBGb3JQayB9KSB7XHJcbiAgICB2YXIgeyBibG9xdWUsIGZvclBrIH0gPSBwcm9wcztcclxuICAgIHZhciBrZXkgPSBibG9xdWUudmVyX2lkICE9ICctJyAmJiBibG9xdWUudmVyX2lkIHx8IGJsb3F1ZS5jYXNpbGxlcm87XHJcbiAgICB2YXIgYWN0aXZlU3RlcCA9IDA7XHJcbiAgICB2YXIgbXVsdGlwbGUgPSAhIWJsb3F1ZS51bmlkYWRfYW5hbGlzaXM7XHJcbiAgICB2YXIgbGlzdGEgPSBbeyBmb3JQaywga2V5OiAwLCBtdWx0aXBsZTogZmFsc2UgfV07XHJcbiAgICB2YXIgaGFiaWxpdGFkb3IgPSBibG9xdWUuZXhwcmVzaW9uX2hhYmlsaXRhcl9qcyA/IGdldEZ1bmNpb25IYWJpbGl0YXIoYmxvcXVlLmV4cHJlc2lvbl9oYWJpbGl0YXJfanMpIDogKCkgPT4gdHJ1ZTtcclxuICAgIHZhciB7IG1vZG9EZXNwbGllZ3VlIH0gPSB1c2VTZWxlY3RvclZpdmllbmRhKGZvclBrKTtcclxuICAgIGlmIChtdWx0aXBsZSkge1xyXG4gICAgICAgIC8vIFRPRE86IEdFTkVSQUxJWkFSXHJcbiAgICAgICAgLy8gQHRzLWlnbm9yZSBcclxuICAgICAgICAvLyBsaXN0YT1yZXNwdWVzdGFzLnBlcnNvbmFzLm1hcCgoX3BlcnNvbmEsIGkpPT4oXHJcbiAgICAgICAgLy8gICAgIHtmb3JQazp7Li4uZm9yUGssIHBlcnNvbmE6aSsxfSwga2V5OmkrMSwgbXVsdGlwbGU6dHJ1ZX1cclxuICAgICAgICAvLyApKVxyXG4gICAgfVxyXG4gICAgdmFyIGlkID0gYGJsb3F1ZS0ke2Jsb3F1ZS5pZF9jYXNpbGxlcm99YDtcclxuICAgIHJlZ2lzdHJhckVsZW1lbnRvKHtcclxuICAgICAgICBpZCxcclxuICAgICAgICBzdHlsZTogJ2Rpc3BsYXknLFxyXG4gICAgICAgIGZ1bjogKHJlc3B1ZXN0YXM6IFJlc3B1ZXN0YXMpID0+IGhhYmlsaXRhZG9yKHJlc3B1ZXN0YXMpIHx8IG1vZG9EZXNwbGllZ3VlID09ICdtZXRhZGF0b3MnID8gJ3Vuc2V0JyA6ICdub25lJ1xyXG4gICAgfSlcclxuICAgIHJldHVybiA8RGVzcGxlZ2FyQ2FzaWxsZXJvIGNhc2lsbGVybz17YmxvcXVlfSBudWVzdHJvLWJsb3F1ZT17YmxvcXVlLmlkX2Nhc2lsbGVyb30gZXMtbXVsdGlwbGU9e211bHRpcGxlID8gJ1NJJyA6ICdOTyd9IGlkPXtpZH0+XHJcbiAgICAgICAgPEVuY2FiZXphZG9EZXNwbGllZ3VlIGNhc2lsbGVybz17YmxvcXVlfSBmb3JQaz17Zm9yUGt9IC8+XHJcbiAgICAgICAge2xpc3RhLm1hcCgoeyBrZXksIGZvclBrLCBtdWx0aXBsZSB9KSA9PlxyXG4gICAgICAgICAgICA8RGVzcGxlZ2FyQ29udGVuaWRvSW50ZXJub0Jsb3F1ZU9Gb3JtdWxhcmlvIGtleT17a2V5fSBibG9xdWVPRm9ybXVsYXJpbz17YmxvcXVlfSBmb3JtdWxhcmlvPXtwcm9wcy5mb3JtdWxhcmlvfSBmb3JQaz17Zm9yUGt9IG11bHRpcGxlPXttdWx0aXBsZX0gLz5cclxuICAgICAgICApfVxyXG4gICAgPC9EZXNwbGVnYXJDYXNpbGxlcm8+O1xyXG59XHJcblxyXG5jb25zdCBGb3JtdWxhcmlvRW5jYWJlemFkbyA9IERlc3BsaWVndWVFbmNhYmV6YWRvO1xyXG5cclxuZnVuY3Rpb24gTWVudUxldHJhKHByb3BzOiB7IHRhbWFubmlvOiBudW1iZXIsIGRlbm9taW5hY2lvbjogc3RyaW5nIH0pIHtcclxuICAgIGNvbnN0IGNhbWJpYXJMZXRyYSA9ICh0YW1hbm5pbzogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgdmFyIHJvb3QgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XHJcbiAgICAgICAgcm9vdC5zdHlsZS5mb250U2l6ZSA9IHRhbWFubmlvICsgXCJweFwiO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIDxNZW51SXRlbVxyXG4gICAgICAgIG9uQ2xpY2s9eygpID0+IGNhbWJpYXJMZXRyYShwcm9wcy50YW1hbm5pbyl9IHN0eWxlPXt7IGZvbnRTaXplOiBwcm9wcy50YW1hbm5pbyArICdweCcgfX1cclxuICAgID5sZXRyYSB7cHJvcHMuZGVub21pbmFjaW9ufTwvTWVudUl0ZW0+XHJcbn1cclxuXHJcbmZ1bmN0aW9uIEJhcnJhRGVOYXZlZ2FjaW9uKHByb3BzOiB7IGZvclBrOiBGb3JQaywgc29sb0xlY3R1cmE6IGJvb2xlYW4sIG1vZG9EaXJlY3RvOiBib29sZWFuIH0pIHtcclxuICAgIGNvbnN0IGRpc3BhdGNoID0gdXNlRGlzcGF0Y2goKTtcclxuICAgIGNvbnN0IGZvclBrID0gcHJvcHMuZm9yUGs7XHJcbiAgICBjb25zdCB7IG9wY2lvbmVzIH0gPSB1c2VTZWxlY3RvclZpdmllbmRhKGZvclBrKTtcclxuICAgIGNvbnN0IFtjb25maXJtYUNlcnJhciwgc2V0Q29uZmlybWFDZXJyYXJdID0gdXNlU3RhdGU8Ym9vbGVhbiB8IG51bGw+KGZhbHNlKTtcclxuICAgIHZhciBlc3RydWN0dXJhID0gZ2V0RXN0cnVjdHVyYSgpO1xyXG4gICAgdmFyIGRvbWluaW8gPSBnZXREYXRvc0J5UGFzcygpLmluZm9ybWFjaW9uSGRyW2ZvclBrW2VzdHJ1Y3R1cmEucGtBZ3JlZ2FkYVVhUHBhbF1dLnRlbS5kb21pbmlvO1xyXG4gICAgdmFyIGNlcnJhckRpcmVjdG8gPSBhc3luYyBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmVtb3ZlQ1NTQnlJZChCT09UU1RSQVBfNV8xXzNfU1JDKTtcclxuICAgICAgICBnb3RvQ29uc2lzdGlyKFxyXG4gICAgICAgICAgICBlc3RydWN0dXJhLm9wZXJhdGl2byBhcyBJZE9wZXJhdGl2byxcclxuICAgICAgICAgICAgZ2V0RGF0b3NCeVBhc3MoKS5pbmZvcm1hY2lvbkhkcltmb3JQa1tlc3RydWN0dXJhLnBrQWdyZWdhZGFVYVBwYWxdXS50YXJlYS50YXJlYSxcclxuICAgICAgICAgICAgZm9yUGtbZXN0cnVjdHVyYS5wa0FncmVnYWRhVWFQcGFsXVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgLy92YXIgaGFzaD1uZXcgVVJMU2VhcmNoUGFyYW1zKGxvY2F0aW9uLmhhc2g/LnJlcGxhY2UoL15cXCMvLCcnKS5zcGxpdCgnJmF1dG9wcm9jZWQnKVswXSk7XHJcbiAgICAgICAgLy8vL2hhc2guZGVsZXRlKCdhdXRvcHJvY2VkJylcclxuICAgICAgICAvL2Nsb3NlKCk7XHJcbiAgICAgICAgLy9sb2NhdGlvbi5oYXNoPWhhc2gudG9TdHJpbmcoKTtcclxuICAgIH1cclxuICAgIHZhciBib3RvbmVzRm9ybXVsYXJpbyA9IFtdO1xyXG4gICAgaWYgKCFvcGNpb25lcy5tb2RvRGlyZWN0bykge1xyXG4gICAgICAgIGJvdG9uZXNGb3JtdWxhcmlvLnB1c2goeyBxdWU6ICdoZHInLCBhYnI6ICdIZFInLCBpZDogSURfQk9UT05fVk9MVkVSX0hEUiwgbGFiZWw6ICdIb2phIGRlIFJ1dGEnLCByZXRyb2Nlc286IDAgfSlcclxuICAgIH1cclxuICAgIG9wY2lvbmVzLnBpbGFGb3JQay5mb3JFYWNoKChmb3JQaywgaSkgPT5cclxuICAgICAgICBib3RvbmVzRm9ybXVsYXJpby5wdXNoKHsgcXVlOiAndm9sdmVyJywgYWJyOiBmb3JQay5mb3JtdWxhcmlvLnJlcGxhY2UoL15GOi8sICcnKSwgbGFiZWw6IGZvclBrLmZvcm11bGFyaW8sIHJldHJvY2Vzbzogb3BjaW9uZXMucGlsYUZvclBrLmxlbmd0aCAtIGkgfSlcclxuICAgIClcclxuICAgIGJvdG9uZXNGb3JtdWxhcmlvLnB1c2goeyBxdWU6ICcnLCBhYnI6IGZvclBrLmZvcm11bGFyaW8ucmVwbGFjZSgvXkY6LywgJycpLCBsYWJlbDogZm9yUGsuZm9ybXVsYXJpbywgcmV0cm9jZXNvOiAwIH0pO1xyXG4gICAgcmVnaXN0cmFyRWxlbWVudG8oe1xyXG4gICAgICAgIGlkOiBwcm9wcy5tb2RvRGlyZWN0byA/IElEX0JPVE9OX0NFUlJBUiA6IElEX0JPVE9OX1ZPTFZFUl9IRFIsIGRpcmVjdDogdHJ1ZSxcclxuICAgICAgICBmdW46IChcclxuICAgICAgICAgICAgcjogUmVzcHVlc3RhcyxcclxuICAgICAgICAgICAgX2ZlZWRiYWNrRm9ybTogRm9ybVN0cnVjdHVyZVN0YXRlPElkVmFyaWFibGUsIFZhbG9yLCBJZEZpbj4sXHJcbiAgICAgICAgICAgIGVsZW1lbnRvOiBIVE1MRGl2RWxlbWVudCxcclxuICAgICAgICAgICAgZmVlZGJhY2tBbGw6IHsgW2Zvcm11bGFyaW8gaW4gUGxhaW5Gb3JQa106IEZvcm1TdHJ1Y3R1cmVTdGF0ZTxJZFZhcmlhYmxlLCBWYWxvciwgSWRGaW4+IH0sXHJcbiAgICAgICAgICAgIF9lc3RydWN0dXJhOiBFc3RydWN0dXJhXHJcbiAgICAgICAgKSA9PiB7XHJcbiAgICAgICAgICAgIGVsZW1lbnRvLnNldEF0dHJpYnV0ZSgncmVzdW1lbi1lc3RhZG8nLCBjYWxjdWxhclJlc3VtZW5WaXZpZW5kYShmb3JQaywgZmVlZGJhY2tBbGwsIHIpLnJlc3VtZW5Fc3RhZG8pO1xyXG4gICAgICAgIH1cclxuICAgIH0pXHJcbiAgICBjb25zdCBjYW1iaWFyID0gKG1vZG9EZXNwbGllZ3VlOiBNb2RvRGVzcGxpZWd1ZSkgPT4ge1xyXG4gICAgICAgIGRpc3BhdGNoKGRpc3BhdGNoZXJzLk1PRE9fREVTUExJRUdVRSh7IG1vZG9EZXNwbGllZ3VlIH0pKTtcclxuICAgIH1cclxuICAgIHJldHVybiA8PlxyXG4gICAgICAgIDxCdXR0b25Hcm91cCBrZXk9XCJmb3JtdWxhcmlvc1wiIGNsYXNzTmFtZT1cImJhcnJhLW5hdmVnYWNpb25cIiBzb2xvLWxlY3R1cmE9e3Byb3BzLnNvbG9MZWN0dXJhID8gJ3NpJyA6ICdubyd9ID5cclxuICAgICAgICAgICAge2JvdG9uZXNGb3JtdWxhcmlvLm1hcCgoYiwgaSkgPT5cclxuICAgICAgICAgICAgICAgIDxCdXR0b24gY29sb3I9e2IucXVlID09IGZvclBrLmZvcm11bGFyaW8gPyBcInByaW1hcnlcIiA6IFwiaW5oZXJpdFwifSB2YXJpYW50PVwib3V0bGluZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgIGlkPXtiLmlkfVxyXG4gICAgICAgICAgICAgICAgICAgIGtleT17YCR7aX0tJHtiLnF1ZX0tJHtiLnJldHJvY2Vzb31gfVxyXG4gICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXshYi5xdWV9XHJcbiAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNwYXRjaChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGIucXVlID09ICdoZHInID8gZGlzcGF0Y2hlcnMuVk9MVkVSX0hEUih7fSkgOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoZXJzLlZPTFZFUl9ERV9GT1JNVUxBUklPKHsgbWFnbml0dWRSZXRyb2Nlc286IGIucmV0cm9jZXNvIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGIucXVlID09ICdoZHInID8gbnVsbCA6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwYXRjaEJ5UGFzcyhhY2Npb25fYWJyaXJfZm9ybXVsYXJpbywgeyBmb3JQazogb3BjaW9uZXMucGlsYUZvclBrW29wY2lvbmVzLnBpbGFGb3JQay5sZW5ndGggLSBiLnJldHJvY2Vzb10gfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJhYnJcIj57Yi5hYnJ9PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIHtiLnF1ZSA9PSAnaGRyJyA/IDxJQ09OLkFzc2lnbm1lbnQgLz4gOiBudWxsfVxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImxhYmVsXCI+e2IubGFiZWx9PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9CdXR0b24+XHJcbiAgICAgICAgICAgICl9XHJcbiAgICAgICAgPC9CdXR0b25Hcm91cD5cclxuICAgICAgICB7cHJvcHMuc29sb0xlY3R1cmEgPyA8VHlwb2dyYXBoeSBjb21wb25lbnQ9XCJzcGFuXCIgc3R5bGU9e3sgbWFyZ2luOiAnMCAxMHB4JyB9fT4gKFNvbG8gTGVjdHVyYSkgPC9UeXBvZ3JhcGh5PiA6IG51bGx9XHJcbiAgICAgICAge3Byb3BzLm1vZG9EaXJlY3RvID9cclxuICAgICAgICAgICAgPD5cclxuICAgICAgICAgICAgICAgIDxCdXR0b25Hcm91cCBrZXk9XCJ2b2x2ZXJfeV9ncmFiYXJcIiBzdHlsZT17eyBtYXJnaW46ICcwIDAgMCAzMHB4JyB9fT5cclxuICAgICAgICAgICAgICAgICAgICA8QnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkPXtJRF9CT1RPTl9DRVJSQVJ9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPVwiaW5oZXJpdFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJvdXRsaW5lZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e2FzeW5jICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9wcy5zb2xvTGVjdHVyYSB8fCAhZ2V0RGlydHkoKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlcnJhckRpcmVjdG8oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0Q29uZmlybWFDZXJyYXIodHJ1ZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxJQ09OLkV4aXRUb0FwcCAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxEaWFsb2dcclxuICAgICAgICAgICAgICAgICAgICAgICAgb3Blbj17ISFjb25maXJtYUNlcnJhcn1cclxuICAgICAgICAgICAgICAgICAgICAgICAgLy9oYWNlIHF1ZSBubyBzZSBjaWVycmUgZWwgbWVuc2FqZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNsb3NlPXsoKSA9PiBzZXRDb25maXJtYUNlcnJhcihmYWxzZSl9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWxsZWRieT1cImFsZXJ0LWRpYWxvZy10aXRsZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtZGVzY3JpYmVkYnk9XCJhbGVydC1kaWFsb2ctZGVzY3JpcHRpb25cIlxyXG4gICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPERpYWxvZ1RpdGxlIGlkPVwiYWxlcnQtZGlhbG9nLXRpdGxlXCI+Q29uZmlybWUgY2llcnJlIGRlIGVuY3Vlc3RhPC9EaWFsb2dUaXRsZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPERpYWxvZ0NvbnRlbnQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8RGlhbG9nQ29udGVudFRleHQgaWQ9XCJhbGVydC1kaWFsb2ctZGVzY3JpcHRpb25cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFc3TDoSBwb3Igc2FsaXIgZGUgbGEgZW5jdWVzdGEsIHNlIHBlcmRlcsOhbiBsb3MgY2FtYmlvcyBubyBndWFyZGFkb3MuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0RpYWxvZ0NvbnRlbnRUZXh0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L0RpYWxvZ0NvbnRlbnQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxEaWFsb2dBY3Rpb25zPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPEJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VycmFyRGlyZWN0bygpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcj1cInNlY29uZGFyeVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudD1cIm91dGxpbmVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjYXJ0YXIgY2FtYmlvcyB5IGNlcnJhclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9CdXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRDb25maXJtYUNlcnJhcihmYWxzZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudD1cImNvbnRhaW5lZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWFyIGVkaXRhbmRvIGVuY3Vlc3RhXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0J1dHRvbj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvRGlhbG9nQWN0aW9ucz5cclxuICAgICAgICAgICAgICAgICAgICA8L0RpYWxvZz5cclxuICAgICAgICAgICAgICAgICAgICB7cHJvcHMuc29sb0xlY3R1cmEgPyBudWxsIDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgPEJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9e1wic2F2ZS1idXR0b25cIn1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPVwiaW5oZXJpdFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50PVwib3V0bGluZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e3RydWV9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXthc3luYyAoKSA9PiB0cnVlfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SUNPTi5TYXZlIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIDwvQnV0dG9uR3JvdXA+XHJcbiAgICAgICAgICAgIDwvPlxyXG4gICAgICAgICAgICA6IG51bGx9XHJcbiAgICAgICAgPFR5cG9ncmFwaHkgY2xhc3NOYW1lPVwibW9zdHJhci1mb3JQa1wiIGNvbXBvbmVudD1cInNwYW5cIiBzdHlsZT17eyBtYXJnaW46ICcwIDEwcHgnIH19PlxyXG4gICAgICAgICAgICB7VkVSX0RPTUlOSU8gPyA8ZGl2IGtleT17ZG9taW5pb30+PHNwYW4+ZG9taW5pbzwvc3Bhbj48c3Bhbj57ZG9taW5pb308L3NwYW4+PC9kaXY+IDogJyd9XHJcbiAgICAgICAgICAgIHtsaWtlQXIocHJvcHMuZm9yUGspLmZpbHRlcigoXywgaykgPT4gayAhPSAnZm9ybXVsYXJpbycpLm1hcCgodiwgaykgPT5cclxuICAgICAgICAgICAgICAgIDxkaXYga2V5PXtrfT48c3Bhbj57a308L3NwYW4+PHNwYW4+e3Z9PC9zcGFuPjwvZGl2PlxyXG4gICAgICAgICAgICApLmFycmF5KCl9XHJcbiAgICAgICAgPC9UeXBvZ3JhcGh5PlxyXG4gICAgICAgIDxGYXN0U2V0dXA+XHJcbiAgICAgICAgICAgIDxNZW51SXRlbSBvbkNsaWNrPXsoKSA9PiBjYW1iaWFyKFwicmVsZXZhbWllbnRvXCIpfT5ub3JtYWw8L01lbnVJdGVtPlxyXG4gICAgICAgICAgICA8TWVudUl0ZW0gb25DbGljaz17KCkgPT4gY2FtYmlhcihcIlBERlwiKX0+UERGIHBhcmEgcmVsZXZhbWllbnRvPC9NZW51SXRlbT5cclxuICAgICAgICAgICAgPE1lbnVJdGVtIG9uQ2xpY2s9eygpID0+IGNhbWJpYXIoXCJtZXRhZGF0b3NcIil9PnJldmlzYXIgbWV0YWRhdG9zPC9NZW51SXRlbT5cclxuICAgICAgICAgICAgPERpdmlkZXIgLz5cclxuICAgICAgICAgICAgPE1lbnVMZXRyYSB0YW1hbm5pbz17MTJ9IGRlbm9taW5hY2lvbj1cIm11eSBjaGljYVwiIC8+XHJcbiAgICAgICAgICAgIDxNZW51TGV0cmEgdGFtYW5uaW89ezE0fSBkZW5vbWluYWNpb249XCJjaGljYVwiIC8+XHJcbiAgICAgICAgICAgIDxNZW51TGV0cmEgdGFtYW5uaW89ezE2fSBkZW5vbWluYWNpb249XCJub3JtYWxcIiAvPlxyXG4gICAgICAgICAgICA8TWVudUxldHJhIHRhbWFubmlvPXsxOX0gZGVub21pbmFjaW9uPVwiZ3JhbmRlXCIgLz5cclxuICAgICAgICAgICAgPE1lbnVMZXRyYSB0YW1hbm5pbz17MjJ9IGRlbm9taW5hY2lvbj1cImVub3JtZVwiIC8+XHJcbiAgICAgICAgICAgIDxEaXZpZGVyIC8+XHJcbiAgICAgICAgICAgIDxNZW51SXRlbT48bGFiZWw+PENoZWNrYm94IGNoZWNrZWQ9e29wY2lvbmVzLmNvbkNhbXBvT3BjaW9uZXN9IG9uQ2hhbmdlPXtcclxuICAgICAgICAgICAgICAgICgpID0+IGRpc3BhdGNoKGRpc3BhdGNoZXJzLlNFVF9PUENJT04oeyBvcGNpb246ICdjb25DYW1wb09wY2lvbmVzJywgdmFsb3I6ICFvcGNpb25lcy5jb25DYW1wb09wY2lvbmVzIH0pKVxyXG4gICAgICAgICAgICB9IGlucHV0UHJvcHM9e3sgJ2FyaWEtbGFiZWwnOiAncHJpbWFyeSBjaGVja2JveCcgfX0gLz5jYW1wbyBvcGNpb25lczwvbGFiZWw+PC9NZW51SXRlbT5cclxuICAgICAgICAgICAgPE1lbnVJdGVtPjxsYWJlbD48Q2hlY2tib3ggY2hlY2tlZD17b3BjaW9uZXMuc2FsdG9BdXRvbWF0aWNvfSBvbkNoYW5nZT17XHJcbiAgICAgICAgICAgICAgICAoKSA9PiBkaXNwYXRjaChkaXNwYXRjaGVycy5TRVRfT1BDSU9OKHsgb3BjaW9uOiAnc2FsdG9BdXRvbWF0aWNvJywgdmFsb3I6ICFvcGNpb25lcy5zYWx0b0F1dG9tYXRpY28gfSkpXHJcbiAgICAgICAgICAgIH0gaW5wdXRQcm9wcz17eyAnYXJpYS1sYWJlbCc6ICdwcmltYXJ5IGNoZWNrYm94JyB9fSAvPnNhbHRvIGF1dG9tw6F0aWNvPC9sYWJlbD48L01lbnVJdGVtPlxyXG4gICAgICAgIDwvRmFzdFNldHVwPlxyXG4gICAgPC8+XHJcbn1cclxuXHJcbmZ1bmN0aW9uIEJvdG9uVm9sdmVyRW5EaXYoeyBpZCB9OiB7IGlkOiBzdHJpbmcgfSkge1xyXG4gICAgdmFyIHsgb3BjaW9uZXMgfSA9IHVzZVNlbGVjdG9yKChzdGF0ZTogQ2Fzb1N0YXRlKSA9PiAoeyBvcGNpb25lczogc3RhdGUub3BjaW9uZXMgfSkpO1xyXG4gICAgY29uc3QgZGlzcGF0Y2ggPSB1c2VEaXNwYXRjaCgpO1xyXG4gICAgdmFyIGVzVm9sdmVyID0gb3BjaW9uZXMucGlsYUZvclBrLmxlbmd0aCA+IDA7XHJcbiAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9XCJkaXYtYm90b24tdm9sdmVyXCI+XHJcbiAgICAgICAgPEJ1dHRvbiBpZD17aWR9IGNsYXNzTmFtZT1cImJvdG9uLXZvbHZlclwiXHJcbiAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChlc1ZvbHZlcikge1xyXG4gICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoQnlQYXNzKGFjY2lvbl9hYnJpcl9mb3JtdWxhcmlvLCB7IGZvclBrOiBvcGNpb25lcy5waWxhRm9yUGtbb3BjaW9uZXMucGlsYUZvclBrLmxlbmd0aCAtIDFdIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoKGRpc3BhdGNoZXJzLlZPTFZFUl9ERV9GT1JNVUxBUklPKHsgbWFnbml0dWRSZXRyb2Nlc286IDEgfSkpXHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBib3RvbkNlcnJhciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKElEX0JPVE9OX0NFUlJBUikgfHwgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoSURfQk9UT05fVk9MVkVSX0hEUilcclxuICAgICAgICAgICAgICAgICAgICBpZiAoYm90b25DZXJyYXIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYm90b25DZXJyYXIuY2xpY2soKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH19XHJcbiAgICAgICAgPiA8SUNPTi5DaGV2cm9uTGVmdCAvPntlc1ZvbHZlciA/IFwiIFZvbHZlclwiIDogXCIgQ2VycmFyXCJ9PC9CdXR0b24+XHJcbiAgICA8L2Rpdj5cclxufVxyXG5cclxuZnVuY3Rpb24gRm9ybXVsYXJpb0Rlc3BsaWVndWUocHJvcHM6IHsgZm9yUGs6IEZvclBrIH0pIHtcclxuICAgIHZhciBmb3JQayA9IHByb3BzLmZvclBrO1xyXG4gICAgdmFyIHsgZm9ybXVsYXJpbywgbW9kb0Rlc3BsaWVndWUsIG9wY2lvbmVzIH1cclxuICAgICAgICA9IHVzZVNlbGVjdG9yVml2aWVuZGEocHJvcHMuZm9yUGspO1xyXG4gICAgdmFyIHNvbG9MZWN0dXJhID0gZ2V0RGF0b3NCeVBhc3MoKS5zb2xvTGVjdHVyYTtcclxuICAgIGNvbnN0IGRpc3BhdGNoID0gdXNlRGlzcGF0Y2goKTtcclxuICAgIHZhciBlc1ZvbHZlciA9IG9wY2lvbmVzLnBpbGFGb3JQay5sZW5ndGggPiAwO1xyXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICB2YXIgY29udHJvbFNjcm9sbCA9ICgpID0+IHtcclxuICAgICAgICAgICAgdmFyIGFycmliYSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmYWItYWN0aXZvLWFycmliYScpO1xyXG4gICAgICAgICAgICBpZiAoYXJyaWJhKSB7XHJcbiAgICAgICAgICAgICAgICBzZXRWYWxvckRpc3RpbnRvKGFycmliYS5zdHlsZSwgJ3Zpc2liaWxpdHknLFxyXG4gICAgICAgICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcclxuICAgICAgICAgICAgICAgICAgICBhcnJpYmEuZWxUb3BWaXNpYmlsaXphciAhPSBudWxsICYmIGFycmliYS5lbFRvcFZpc2liaWxpemFyICsgMTBcclxuICAgICAgICAgICAgICAgICAgICAgICAgPCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wID8gJ3Zpc2libGUnIDogJ2hpZGRlbidcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFyIGFiYWpvID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZhYi1hY3Rpdm8tYWJham8nKTtcclxuICAgICAgICAgICAgaWYgKGFiYWpvKSB7XHJcbiAgICAgICAgICAgICAgICBzZXRWYWxvckRpc3RpbnRvKGFiYWpvLnN0eWxlLCAndmlzaWJpbGl0eScsXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxyXG4gICAgICAgICAgICAgICAgICAgIGFiYWpvLmVsQm90dG9tVmlzaWJpbGl6YXIgIT0gbnVsbCAmJiBhYmFqby5lbEJvdHRvbVZpc2liaWxpemFyIC0gMjBcclxuICAgICAgICAgICAgICAgICAgICAgICAgPiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wICsgd2luZG93LmlubmVySGVpZ2h0ICogMC43ID8gJ3Zpc2libGUnIDogJ2hpZGRlbidcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgaWRDYXNvID0gbGlrZUFyKHByb3BzLmZvclBrKS5maW5kKChfLCBrKSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiBrICE9ICdmb3JtdWxhcmlvJ1xyXG4gICAgICAgIH0pPy50b1N0cmluZygpO1xyXG4gICAgICAgIHdpbmRvdy5kb2N1bWVudC50aXRsZSA9IGdldEVzdHJ1Y3R1cmEoKS5vcGVyYXRpdm8gKyAnLSAnICsgaWRDYXNvO1xyXG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBjb250cm9sU2Nyb2xsKTtcclxuICAgICAgICBjb250cm9sU2Nyb2xsKCk7XHJcbiAgICAgICAgcmV0dXJuICgpID0+IHtcclxuICAgICAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIGNvbnRyb2xTY3JvbGwpO1xyXG4gICAgICAgIH1cclxuICAgIH0pXHJcbiAgICAvLyBUT0RPIFZvbHZlciBhIHBvbmVyIGVsIG1vdmltaWVudG8gYSBsYSBhY3R1YWxcclxuICAgIHZhciBhY3R1YWw6IGFueVxyXG4gICAgdmFyIGNvbXBsZXRvOiBhbnlcclxuICAgIHZhciBvbkNsaWNrU2FsdGFyQWN0dWFsID0gKCkgPT4ge1xyXG4gICAgICAgIHZhciB7IHZhcmlhYmxlQWN0dWFsIH0gPSBkaXNwYXRjaEJ5UGFzcyhhY2Npb25fcmVnaXN0cmFyX3Jlc3B1ZXN0YSwgeyByZXNwdWVzdGE6IG51bGwsIHZhcmlhYmxlOiBOT19DQU1CSUFSX19TT0xPX1RSQUVSX1NUQVRVUywgZm9yUGs6IHByb3BzLmZvclBrIH0pO1xyXG4gICAgICAgIGlmICh2YXJpYWJsZUFjdHVhbCkge1xyXG4gICAgICAgICAgICBlbmZvY2FyRWxlbWVudG9EZVZhcmlhYmxlKHZhcmlhYmxlQWN0dWFsKVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHZhciBsaXN0YU1vZG9zOiBNb2RvRGVzcGxpZWd1ZVtdID0gWydtZXRhZGF0b3MnLCAncmVsZXZhbWllbnRvJywgJ1BERiddO1xyXG4gICAgWydib3Rvbi12b2x2ZXItMScsICdib3Rvbi12b2x2ZXItMiddLmZvckVhY2goaWQgPT4ge1xyXG4gICAgICAgIHJlZ2lzdHJhckVsZW1lbnRvKHtcclxuICAgICAgICAgICAgaWQsIGRpcmVjdDogdHJ1ZSxcclxuICAgICAgICAgICAgZnVuOiAoXHJcbiAgICAgICAgICAgICAgICByOiBSZXNwdWVzdGFzLFxyXG4gICAgICAgICAgICAgICAgZmVlZGJhY2tGb3JtOiBGb3JtU3RydWN0dXJlU3RhdGU8SWRWYXJpYWJsZSwgVmFsb3IsIElkRmluPixcclxuICAgICAgICAgICAgICAgIGVsZW1lbnRvOiBIVE1MRGl2RWxlbWVudCxcclxuICAgICAgICAgICAgICAgIGZlZWRiYWNrQWxsOiB7IFtmb3JtdWxhcmlvIGluIFBsYWluRm9yUGtdOiBGb3JtU3RydWN0dXJlU3RhdGU8SWRWYXJpYWJsZSwgVmFsb3IsIElkRmluPiB9LFxyXG4gICAgICAgICAgICAgICAgX2VzdHJ1Y3R1cmE6IEVzdHJ1Y3R1cmFcclxuICAgICAgICAgICAgKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBlbGVtZW50by5zZXRBdHRyaWJ1dGUoJ3Jlc3VtZW4tZXN0YWRvJywgZXNWb2x2ZXIgPyBmZWVkYmFja0Zvcm0ucmVzdW1lbiA6IGNhbGN1bGFyUmVzdW1lblZpdmllbmRhKGZvclBrLCBmZWVkYmFja0FsbCwgcikucmVzdW1lbkVzdGFkbyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgfSlcclxuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgZXNwZWNpYWwgaGF5IHF1ZSBsZWVybG8gZW4gZWwgcGFyc2VyIGRlIGNhc2lsbGVyb3Mgc2kgZXN0byB0ZXJtaW5hIHF1ZWRhbmRvIGFzw61cclxuICAgIHZhciBwYW50YWxsYUNvbXBsZXRhID0gZm9ybXVsYXJpby5lc3BlY2lhbD8ucGFudGFsbGFDb21wbGV0YTtcclxuICAgIGNvbnN0IG1vZG9ETTogTW9kb0RNID0gZ2V0Rm9ybVJlbmRlcmVyKCkuZ2V0TW9kb0RNKCk7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICAgIDw+XHJcbiAgICAgICAgICAgIDxBcHBCYXJQcmluY2lwYWxcclxuICAgICAgICAgICAgICAgIG1vZG9ETT17bW9kb0RNfVxyXG4gICAgICAgICAgICAgICAgc29sb0xlY3R1cmE9e3NvbG9MZWN0dXJhfVxyXG4gICAgICAgICAgICAgICAgYmFycmFOYXZGb3JtdWxhcmlvPXtcclxuICAgICAgICAgICAgICAgICAgICA8QmFycmFEZU5hdmVnYWNpb24gZm9yUGs9e2ZvclBrfSBzb2xvTGVjdHVyYT17c29sb0xlY3R1cmEgfHwgZmFsc2V9IG1vZG9EaXJlY3RvPXtvcGNpb25lcy5tb2RvRGlyZWN0b30gLz5cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBpZD1cIm1pbmktY29uc29sZVwiPjwvZGl2PlxyXG4gICAgICAgICAgICA8L0FwcEJhclByaW5jaXBhbD5cclxuICAgICAgICAgICAgPG1haW4+XHJcbiAgICAgICAgICAgICAgICA8UGFwZXIgY2xhc3NOYW1lPVwiZm9ybXVsYXJpb1wiIG1vZG8tZGVzcGxpZWd1ZT17bW9kb0Rlc3BsaWVndWV9IHZlci1udW0tb3BjaW9uZXM9e29wY2lvbmVzLmNvbkNhbXBvT3BjaW9uZXMgPyAnU0knIDogJ05PJ30+XHJcbiAgICAgICAgICAgICAgICAgICAge3BhbnRhbGxhQ29tcGxldGEgPyBudWxsIDogPEJvdG9uVm9sdmVyRW5EaXYgaWQ9XCJib3Rvbi12b2x2ZXItMVwiIC8+fVxyXG4gICAgICAgICAgICAgICAgICAgIHtwYW50YWxsYUNvbXBsZXRhID8gbnVsbCA6IDxGb3JtdWxhcmlvRW5jYWJlemFkbyBjYXNpbGxlcm89e2Zvcm11bGFyaW99IC8+fVxyXG4gICAgICAgICAgICAgICAgICAgIDxEZXNwbGVnYXJDb250ZW5pZG9JbnRlcm5vQmxvcXVlT0Zvcm11bGFyaW8gYmxvcXVlT0Zvcm11bGFyaW89e2Zvcm11bGFyaW99IGZvcm11bGFyaW89e2Zvcm11bGFyaW99IGZvclBrPXtmb3JQa30gbXVsdGlwbGU9e2ZhbHNlfSAvPlxyXG4gICAgICAgICAgICAgICAgICAgIHtwYW50YWxsYUNvbXBsZXRhID8gbnVsbCA6IDxCb3RvblZvbHZlckVuRGl2IGlkPVwiYm90b24tdm9sdmVyLTJcIiAvPn1cclxuICAgICAgICAgICAgICAgIDwvUGFwZXI+XHJcbiAgICAgICAgICAgICAgICA8RmFiIGlkPSdmYWItYWN0aXZvLWFycmliYScgY29sb3I9XCJwcmltYXJ5XCIgYXJpYS1sYWJlbD1cImFkZFwiIG9uQ2xpY2s9e29uQ2xpY2tTYWx0YXJBY3R1YWx9PlxyXG4gICAgICAgICAgICAgICAgICAgIDxJQ09OLktleWJvYXJkQXJyb3dVcCAvPlxyXG4gICAgICAgICAgICAgICAgPC9GYWI+XHJcbiAgICAgICAgICAgICAgICA8RmFiIGlkPSdmYWItYWN0aXZvLWFiYWpvJyBjb2xvcj1cInByaW1hcnlcIiBhcmlhLWxhYmVsPVwiYWRkXCIgb25DbGljaz17b25DbGlja1NhbHRhckFjdHVhbH0+XHJcbiAgICAgICAgICAgICAgICAgICAgPElDT04uS2V5Ym9hcmRBcnJvd0Rvd24gLz5cclxuICAgICAgICAgICAgICAgIDwvRmFiPlxyXG4gICAgICAgICAgICAgICAgPEZhYiBpZD0nZmFiLWVycm9yLWFycmliYScgdmFyaWFudD1cImV4dGVuZGVkXCIgY29sb3I9XCJzZWNvbmRhcnlcIiBhcmlhLWxhYmVsPVwiZWRpdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxJQ09OLk5hdmlnYXRpb24gLz5cclxuICAgICAgICAgICAgICAgICAgICBFcnJvclxyXG4gICAgICAgICAgICAgICAgPC9GYWI+XHJcbiAgICAgICAgICAgICAgICA8RmFiIGlkPSdmYWItZXJyb3ItYWJham8nIHZhcmlhbnQ9XCJleHRlbmRlZFwiIGNvbG9yPVwic2Vjb25kYXJ5XCIgYXJpYS1sYWJlbD1cImVkaXRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8SUNPTi5OYXZpZ2F0aW9uRG93biAvPlxyXG4gICAgICAgICAgICAgICAgICAgIEVycm9yXHJcbiAgICAgICAgICAgICAgICA8L0ZhYj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPSdlc3BhY2lvLWZpbmFsLWZvcm11bGFyaW8nPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAge29wY2lvbmVzLm1vZG9Cb3JyYXJSZXNwdWVzdGEgJiYgb3BjaW9uZXMuZm9yUGsgPyA8RGVzcGxlZ2FyQ29uZmlybWFyQm9ycmFyUmVzcHVlc3RhIGZvclBrPXtvcGNpb25lcy5mb3JQa30gdmFyaWFibGVCb3JyYXI9e29wY2lvbmVzLm1vZG9Cb3JyYXJSZXNwdWVzdGF9IC8+IDogbnVsbH1cclxuICAgICAgICAgICAgPC9tYWluPlxyXG4gICAgICAgIDwvPlxyXG4gICAgKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIEF0cmlidXRvKHByb3BzOiB7IG5vbWJyZTogc3RyaW5nLCB2YWxvcjogYW55IH0pIHtcclxuICAgIHJldHVybiBwcm9wcy52YWxvciAhPSBudWxsICYmIHByb3BzLnZhbG9yICE9ICcnID8gPHNwYW4gY2xhc3NOYW1lPVwiYXRyaWJ1dG8tcGFyXCI+XHJcbiAgICAgICAge3Byb3BzLm5vbWJyZSA/IDxzcGFuIGNsYXNzTmFtZT1cImF0cmlidXRvLW5vbWJyZVwiPntwcm9wcy5ub21icmV9PC9zcGFuPiA6IG51bGx9XHJcbiAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwiYXRyaWJ1dG8tdmFsb3JcIj57cHJvcHMudmFsb3IudG9TdHJpbmcoKX08L3NwYW4+XHJcbiAgICA8L3NwYW4+IDogbnVsbFxyXG59XHJcblxyXG5leHBvcnQgY29uc3QgbGlzdGFFc3RhZG9zQ2FyZ2E6IEVzdGFkb0NhcmdhW10gPSBbJ3Jlc3VtZW4nLCAncmVsZXZhbWllbnRvJywgJ3JlY2libyddO1xyXG5leHBvcnQgdmFyIHJlc3VtaWRvcmVzID0gW1xyXG4gICAgeyBub21icmU6ICdSRUEnLCBmOiAocnI6IFJlc3B1ZXN0YXNSYWl6KSA9PiByci5yZXN1bWVuRXN0YWRvID09IFwib2tcIiB9LFxyXG4gICAgeyBub21icmU6ICdDaXRhIHBhY3RhZGEnLCBmOiAocnI6IFJlc3B1ZXN0YXNSYWl6KSA9PiByci5yZXN1bWVuRXN0YWRvID09IFwiY2l0YSBwYWN0YWRhXCIgfSxcclxuICAgIHsgbm9tYnJlOiAnUGVuZGllbnRlcycsIGY6IChycjogUmVzcHVlc3Rhc1JhaXopID0+IHJyLnJlc3VtZW5Fc3RhZG8gPT0gXCJ2YWNpb1wiIH0sXHJcbl07XHJcblxyXG5yZXN1bWlkb3Jlcy5wdXNoKFxyXG4gICAgeyBub21icmU6ICdPdHJvcycsIGY6IHJlc3VtaWRvcmVzLnJlZHVjZSgoZywgcikgPT4gKHJyID0+ICFyLmYocnIpICYmIGcocnIpKSwgKF86IFJlc3B1ZXN0YXNSYWl6KSA9PiB0cnVlKSB9XHJcbilcclxuXHJcbmV4cG9ydCB0eXBlIERlc3BsZWdhckxpbmVhUmVzdW1lblVBUHJpbmNpcGFsVHlwZSA9IChwcm9wczoge1xyXG4gICAgbnVtVml2aWVuZGE6IElkRW5jLFxyXG4gICAgZm9ybVByaW5jaXBhbDogSWRGb3JtdWxhcmlvLFxyXG4gICAgdGFyZWE6IHN0cmluZyxcclxuICAgIHJlc3B1ZXN0YXM6IFJlc3B1ZXN0YXNSYWl6LFxyXG59KSA9PiBKU1guRWxlbWVudDtcclxuXHJcbmV4cG9ydCB2YXIgRGVzcGxlZ2FyTGluZWFSZXN1bWVuVUFQcmluY2lwYWw6IERlc3BsZWdhckxpbmVhUmVzdW1lblVBUHJpbmNpcGFsVHlwZVxyXG5cclxuZXhwb3J0IGNvbnN0IHNldERlc3BsZWdhckxpbmVhUmVzdW1lblVBUHJpbmNpcGFsID0gKGxpbmVhUmVzdW1lblVBUHJpbmNpcGFsOiBEZXNwbGVnYXJMaW5lYVJlc3VtZW5VQVByaW5jaXBhbFR5cGUpID0+IERlc3BsZWdhckxpbmVhUmVzdW1lblVBUHJpbmNpcGFsID0gbGluZWFSZXN1bWVuVUFQcmluY2lwYWw7XHJcblxyXG5zZXREZXNwbGVnYXJMaW5lYVJlc3VtZW5VQVByaW5jaXBhbCgocHJvcHM6IHtcclxuICAgIG51bVZpdmllbmRhOiBJZEVuYyxcclxuICAgIGZvcm1QcmluY2lwYWw6IElkRm9ybXVsYXJpbyxcclxuICAgIHRhcmVhOiBzdHJpbmcsXHJcbiAgICByZXNwdWVzdGFzOiBSZXNwdWVzdGFzUmFpeixcclxufSkgPT4ge1xyXG4gICAgY29uc3QgeyBudW1WaXZpZW5kYSwgcmVzcHVlc3RhcywgZm9ybVByaW5jaXBhbCwgdGFyZWEgfSA9IHByb3BzO1xyXG4gICAgY29uc3QgaWQgPSAndml2LScgKyBudW1WaXZpZW5kYTtcclxuICAgIGNvbnN0IGVzdHJ1Y3R1cmEgPSBnZXRFc3RydWN0dXJhKCk7XHJcbiAgICBjb25zdCBmb3JQazogRm9yUGsgPSB7IGZvcm11bGFyaW86IGZvcm1QcmluY2lwYWwsIFtlc3RydWN0dXJhLnBrQWdyZWdhZGFVYVBwYWxdOiBOdW1iZXIobnVtVml2aWVuZGEpIGFzIElkRW5jIH0gYXMgRm9yUGs7IC8vbm8gcXVpdGFyIGVsIGNhc3RlbyBwb3JxdWUgdmllbmUgY29tbyB0ZXh0byB5IG5lY2VzaXRvIHF1ZSBzZWEgbsO6bWVyb1xyXG4gICAgdmFyIHRlbSA9IGdldERhdG9zQnlQYXNzKCkuaW5mb3JtYWNpb25IZHJbbnVtVml2aWVuZGFdLnRlbTtcclxuICAgIGNvbnN0IGRpc3BhdGNoID0gdXNlRGlzcGF0Y2goKTtcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgdm9sY2Fkb0luaWNpYWxFbGVtZW50b3NSZWdpc3RyYWRvcyhmb3JQayk7XHJcbiAgICAgICAgaW50ZW50YXJCYWNrdXAoZm9yUGspXHJcbiAgICB9KVxyXG4gICAgcmVnaXN0cmFyRWxlbWVudG8oe1xyXG4gICAgICAgIGlkLCBkaXJlY3Q6IHRydWUsXHJcbiAgICAgICAgZnVuOiAoXHJcbiAgICAgICAgICAgIHI6IFJlc3B1ZXN0YXMsXHJcbiAgICAgICAgICAgIF9mZWVkYmFja0Zvcm06IEZvcm1TdHJ1Y3R1cmVTdGF0ZTxJZFZhcmlhYmxlLCBWYWxvciwgSWRGaW4+LFxyXG4gICAgICAgICAgICBlbGVtZW50bzogSFRNTERpdkVsZW1lbnQsXHJcbiAgICAgICAgICAgIGZlZWRiYWNrQWxsOiB7IFtmb3JtdWxhcmlvIGluIFBsYWluRm9yUGtdOiBGb3JtU3RydWN0dXJlU3RhdGU8SWRWYXJpYWJsZSwgVmFsb3IsIElkRmluPiB9LFxyXG4gICAgICAgICAgICBfZXN0cnVjdHVyYTogRXN0cnVjdHVyYVxyXG4gICAgICAgICkgPT4ge1xyXG4gICAgICAgICAgICAvL3ByZWd1bnRvIHNpIGVzIGxhIG1pc21hIHZpdmllbmRhIHBvcnF1ZSBsYSBmdW5jaW9uIHNlIGRpc3BhcmEgXHJcbiAgICAgICAgICAgIC8vY29uIHRvZGFzIGxhcyBjb21iaW5hY2lvbmVzIGRlIHJlc3B1ZXN0YXMgcGFyYSBjYWRhIGZvclBrXHJcbiAgICAgICAgICAgIC8vQHRzLWlnbm9yZSB2aXZpZW5kYSBleGlzdGVcclxuICAgICAgICAgICAgaWYgKHJbZXN0cnVjdHVyYS5wa0FncmVnYWRhVWFQcGFsXSA9PSBmb3JQa1tlc3RydWN0dXJhLnBrQWdyZWdhZGFVYVBwYWxdKSB7XHJcbiAgICAgICAgICAgICAgICBlbGVtZW50by5zZXRBdHRyaWJ1dGUoJ3Jlc3VtZW4tZXN0YWRvJywgY2FsY3VsYXJSZXN1bWVuVml2aWVuZGEoZm9yUGssIGZlZWRiYWNrQWxsLCByKS5yZXN1bWVuRXN0YWRvKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9KVxyXG4gICAgcmV0dXJuIDxUYWJsZVJvdyBrZXk9e251bVZpdmllbmRhfT5cclxuICAgICAgICA8VGFibGVDZWxsPlxyXG4gICAgICAgICAgICB7dGVtID9cclxuICAgICAgICAgICAgICAgIDw+XHJcbiAgICAgICAgICAgICAgICAgICAgPERlc3BsZWdhclRlbSB0ZW09e3RlbX0gLz5cclxuICAgICAgICAgICAgICAgICAgICB7cmVzcHVlc3Rhc1sncmVzdW1lbkVzdGFkbycgYXMgSWRWYXJpYWJsZV0gPT0gXCJjaXRhIHBhY3RhZGFcIiA/XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxEZXNwbGVnYXJDaXRhUGFjdGFkYSByZXNwdWVzdGFzPXtyZXNwdWVzdGFzfSAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxEZXNwbGVnYXJDaXRhUGFjdGFkYVlTZWxlY2Npb25hZG9BbnRlcmlvclRlbSB0ZW09e3RlbX0gLz5cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICA8Lz5cclxuICAgICAgICAgICAgICAgIDogbnVsbH1cclxuICAgICAgICA8L1RhYmxlQ2VsbD5cclxuICAgICAgICA8VGFibGVDZWxsPlxyXG4gICAgICAgICAgICB7dGFyZWF9XHJcbiAgICAgICAgPC9UYWJsZUNlbGw+XHJcbiAgICAgICAgPFRhYmxlQ2VsbD5cclxuICAgICAgICAgICAgPEJ1dHRvbiBpZD17aWR9IG9uQ2xpY2s9eygpID0+XHJcbiAgICAgICAgICAgICAgICBkaXNwYXRjaChkaXNwYXRjaGVycy5DQU1CSUFSX0ZPUk1VTEFSSU8oeyBmb3JQaywgYXBpbGFyVnVlbHRhOiBmYWxzZSB9KSlcclxuICAgICAgICAgICAgfT5cclxuICAgICAgICAgICAgICAgIHtudW1WaXZpZW5kYS50b1N0cmluZygpfVxyXG4gICAgICAgICAgICA8L0J1dHRvbj5cclxuICAgICAgICA8L1RhYmxlQ2VsbD5cclxuICAgIDwvVGFibGVSb3c+XHJcbn0pO1xyXG5cclxuZXhwb3J0IHR5cGUgRGVzcGxlZ2FyQ2FyZ2FUeXBlID0gKHByb3BzOiB7XHJcbiAgICBjYXJnYTogQ2FyZ2EsXHJcbiAgICBpZENhcmdhOiBJZENhcmdhLFxyXG4gICAgcG9zaWNpb246IG51bWJlcixcclxuICAgIGluZm9ybWFjaW9uSGRyOiBJbmZvcm1hY2lvbkhkcixcclxuICAgIHJlc3B1ZXN0YXM6IFJlc3B1ZXN0YUxhc1VBLFxyXG4gICAgZmVlZGJhY2tSb3dWYWxpZGF0b3I6IHtcclxuICAgICAgICBbZm9ybXVsYXJpbyBpbiBQbGFpbkZvclBrXTogRm9ybVN0cnVjdHVyZVN0YXRlPElkVmFyaWFibGUsIFZhbG9yLCBJZEZpbj5cclxuICAgIH1cclxufSkgPT4gSlNYLkVsZW1lbnQ7XHJcblxyXG5leHBvcnQgdmFyIERlc3BsZWdhckNhcmdhOiBEZXNwbGVnYXJDYXJnYVR5cGVcclxuXHJcbmV4cG9ydCBjb25zdCBzZXREZXNwbGVnYXJDYXJnYSA9IChkZXNwbGllZ3VlQ2FyZ2E6IERlc3BsZWdhckNhcmdhVHlwZSkgPT4gRGVzcGxlZ2FyQ2FyZ2EgPSBkZXNwbGllZ3VlQ2FyZ2E7XHJcblxyXG5zZXREZXNwbGVnYXJDYXJnYSgocHJvcHM6IHtcclxuICAgIGNhcmdhOiBDYXJnYSxcclxuICAgIGlkQ2FyZ2E6IElkQ2FyZ2EsXHJcbiAgICBwb3NpY2lvbjogbnVtYmVyLFxyXG4gICAgaW5mb3JtYWNpb25IZHI6IEluZm9ybWFjaW9uSGRyLFxyXG4gICAgcmVzcHVlc3RhczogUmVzcHVlc3RhTGFzVUEsXHJcbiAgICBmZWVkYmFja1Jvd1ZhbGlkYXRvcjoge1xyXG4gICAgICAgIFtmb3JtdWxhcmlvIGluIFBsYWluRm9yUGtdOiBGb3JtU3RydWN0dXJlU3RhdGU8SWRWYXJpYWJsZSwgVmFsb3IsIElkRmluPlxyXG4gICAgfVxyXG59KSA9PiB7XHJcbiAgICBjb25zdCB7IGNhcmdhLCBpZENhcmdhLCBpbmZvcm1hY2lvbkhkciwgcmVzcHVlc3RhcyB9ID0gcHJvcHM7XHJcbiAgICB2YXIgZXN0cnVjdHVyYSA9IGdldEVzdHJ1Y3R1cmEoKTtcclxuICAgIGxldCBjYW50TGluZWFzUmVzdW1lbiA9IGxpa2VBcihpbmZvcm1hY2lvbkhkcikuZmlsdGVyKChpbmZvcm1hY2lvbikgPT4gaW5mb3JtYWNpb24udGVtLmNhcmdhID09IGlkQ2FyZ2EpLmFycmF5KCkubGVuZ3RoO1xyXG4gICAgY29uc3QgZGlzcGF0Y2ggPSB1c2VEaXNwYXRjaCgpO1xyXG4gICAgY29uc3QgbW9kb0RNOiBNb2RvRE0gPSBnZXRGb3JtUmVuZGVyZXIoKS5nZXRNb2RvRE0oKTtcclxuICAgIHJldHVybiA8UGFwZXIgY2xhc3NOYW1lPVwiY2FyZ2FcIiBzdHlsZT17eyBtYXJnaW5Cb3R0b206ICcxMHB4JywgcGFkZGluZzogJzEwcHgnIH19PlxyXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiaW5mb3JtYWNpb24tY2FyZ2FcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJjYXJnYVwiPsOBcmVhOiB7aWRDYXJnYX08L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJvYnNlcnZhY2lvbmVzXCI+e2NhcmdhLm9ic2VydmFjaW9uZXN9PC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJpbmZvcm1hY2lvbi1jYXJnYVwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZlY2hhXCI+e2NhcmdhLmZlY2hhfTwvZGl2PlxyXG4gICAgICAgICAgICB7LypcclxuICAgICAgICAgICAgPEJ1dHRvbkdyb3VwPlxyXG4gICAgICAgICAgICB7bGlzdGFFc3RhZG9zQ2FyZ2EubWFwKGVzdGFkb19jYXJnYT0+XHJcbiAgICAgICAgICAgICAgICA8QnV0dG9uIGtleT17ZXN0YWRvX2NhcmdhfSB2YXJpYW50PXtlc3RhZG9fY2FyZ2E9PWNhcmdhLmVzdGFkb19jYXJnYT9cImNvbnRhaW5lZFwiOlwib3V0bGluZWRcIn0gb25DbGljaz17XHJcbiAgICAgICAgICAgICAgICAgICAgKCk9PmRpc3BhdGNoKGRpc3BhdGNoZXJzLkVTVEFET19DQVJHQSh7aWRDYXJnYSwgZXN0YWRvX2NhcmdhfSkpXHJcbiAgICAgICAgICAgICAgICB9Pntlc3RhZG9fY2FyZ2F9PC9CdXR0b24+XHJcbiAgICAgICAgICAgICl9XHJcbiAgICAgICAgICAgIDwvQnV0dG9uR3JvdXA+XHJcbiAgICAgICAgICAgICovfVxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIHtjYXJnYS5lc3RhZG9fY2FyZ2EgPT0gbnVsbCAmJiAhcHJvcHMucG9zaWNpb24gfHwgY2FyZ2EuZXN0YWRvX2NhcmdhID09ICdyZWxldmFtaWVudG8nID9cclxuICAgICAgICAgICAgPFRhYmxlIGNsYXNzTmFtZT1cInRhYmxhLWNhcmdhLWhvamEtZGUtcnV0YVwiPlxyXG4gICAgICAgICAgICAgICAgPGNvbGdyb3VwPlxyXG4gICAgICAgICAgICAgICAgICAgIDxjb2wgc3R5bGU9e3sgd2lkdGg6IFwiNzUlXCIgfX0gLz5cclxuICAgICAgICAgICAgICAgICAgICA8Y29sIHN0eWxlPXt7IHdpZHRoOiBcIjEwJVwiIH19IC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPGNvbCBzdHlsZT17eyB3aWR0aDogXCIxNSVcIiB9fSAvPlxyXG4gICAgICAgICAgICAgICAgPC9jb2xncm91cD5cclxuICAgICAgICAgICAgICAgIHtjYW50TGluZWFzUmVzdW1lbiA/XHJcbiAgICAgICAgICAgICAgICAgICAgPFRhYmxlSGVhZCBzdHlsZT17eyBmb250U2l6ZTogXCIxLjJyZW1cIiB9fT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPFRhYmxlUm93IGNsYXNzTmFtZT1cInRyLWNhcmdhXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VGFibGVDZWxsPmRvbWljaWxpbzwvVGFibGVDZWxsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFRhYmxlQ2VsbD50YXJlYTwvVGFibGVDZWxsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFRhYmxlQ2VsbD5lbmM8L1RhYmxlQ2VsbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9UYWJsZVJvdz5cclxuICAgICAgICAgICAgICAgICAgICA8L1RhYmxlSGVhZD5cclxuICAgICAgICAgICAgICAgICAgICA6IG51bGx9XHJcbiAgICAgICAgICAgICAgICA8VGFibGVCb2R5PlxyXG4gICAgICAgICAgICAgICAgICAgIDw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHtsaWtlQXIoaW5mb3JtYWNpb25IZHIpLmZpbHRlcigoaW5mb3JtYWNpb24pID0+IGluZm9ybWFjaW9uLnRlbS5jYXJnYSA9PSBpZENhcmdhKS5tYXAoKGluZm9ybWFjaW9uLCBudW1WaXZpZW5kYSkgPT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxEZXNwbGVnYXJMaW5lYVJlc3VtZW5VQVByaW5jaXBhbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleT17bnVtVml2aWVuZGF9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtVml2aWVuZGE9e251bVZpdmllbmRhfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmVhPXtpbmZvcm1hY2lvbi50YXJlYS50YXJlYX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtUHJpbmNpcGFsPXtpbmZvcm1hY2lvbi50YXJlYS5tYWluX2Zvcm19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcHVlc3Rhcz17cmVzcHVlc3Rhc1tlc3RydWN0dXJhLnVhUHBhbF1bbnVtVml2aWVuZGFdIGFzIFJlc3B1ZXN0YXNSYWl6fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgKS5hcnJheSgpfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7Y2FyZ2EucHVlZGVfYXV0b2dlbmVyYXIgP1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFRhYmxlUm93IGNsYXNzTmFtZT1cInRyLWNhcmdhLW51ZXZvXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFRhYmxlQ2VsbCBjb2xTcGFuPXszfT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudD1cImNvbnRhaW5lZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcj17bW9kb0RNID09IFwiY2FwYVwiID8gXCJzdWNjZXNzXCIgOiBcInByaW1hcnlcIn1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXJFbmN1ZXN0YShpZENhcmdhLCAoZm9yUGtSYWl6OiBGb3JQa1JhaXopID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2goZGlzcGF0Y2hlcnMuQ0FNQklBUl9GT1JNVUxBUklPKHsgZm9yUGs6IGZvclBrUmFpeiwgYXBpbGFyVnVlbHRhOiBmYWxzZSB9KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPElDT04uQWRkIC8+IE51ZXZvIGN1ZXN0aW9uYXJpb1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1RhYmxlQ2VsbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvVGFibGVSb3c+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IG51bGx9XHJcbiAgICAgICAgICAgICAgICAgICAgPC8+XHJcbiAgICAgICAgICAgICAgICA8L1RhYmxlQm9keT5cclxuICAgICAgICAgICAgPC9UYWJsZT4gOlxyXG4gICAgICAgICAgICA8VGFibGU+XHJcbiAgICAgICAgICAgICAgICA8VGFibGVIZWFkIHN0eWxlPXt7IGZvbnRTaXplOiBcIjEuMnJlbVwiIH19PlxyXG4gICAgICAgICAgICAgICAgICAgIDxUYWJsZVJvdyBjbGFzc05hbWU9XCJ0ci1jYXJnYVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7cmVzdW1pZG9yZXMubWFwKChyZXN1bWlkb3I6IHR5cGVvZiByZXN1bWlkb3Jlc1swXSwgaTogbnVtYmVyKSA9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFRhYmxlQ2VsbCBrZXk9e2l9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtyZXN1bWlkb3Iubm9tYnJlfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9UYWJsZUNlbGw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICl9XHJcbiAgICAgICAgICAgICAgICAgICAgPC9UYWJsZVJvdz5cclxuICAgICAgICAgICAgICAgIDwvVGFibGVIZWFkPlxyXG4gICAgICAgICAgICA8L1RhYmxlPlxyXG4gICAgICAgIH1cclxuICAgIDwvUGFwZXI+XHJcbn0pO1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIERlc3BsZWdhckNpdGFQYWN0YWRhKHByb3BzOiB7IHJlc3B1ZXN0YXM6IFJlc3B1ZXN0YXMgfSkge1xyXG4gICAgY29uc3QgeyByZXNwdWVzdGFzIH0gPSBwcm9wcztcclxuICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT1cImNpdGEtcGFjdGFkYVwiPlxyXG4gICAgICAgIDxkaXY+PEF0cmlidXRvIG5vbWJyZT1cIkNpdGEgcGFjdGFkYSBjb24gXCIgdmFsb3I9e3Jlc3B1ZXN0YXNbcDEyXX0gLz48L2Rpdj5cclxuICAgICAgICA8ZGl2PjxBdHJpYnV0byBub21icmU9XCJDZWwuOlwiIHZhbG9yPXtyZXNwdWVzdGFzW3NwMl19IC8+PC9kaXY+XHJcbiAgICAgICAgPGRpdj48QXRyaWJ1dG8gbm9tYnJlPVwiVGVsLjpcIiB2YWxvcj17cmVzcHVlc3Rhc1tzcDNdfSAvPjwvZGl2PlxyXG4gICAgICAgIDxkaXY+PEF0cmlidXRvIG5vbWJyZT1cIkZlY2hhOlwiIHZhbG9yPXtyZXNwdWVzdGFzW3NwNF19IC8+PC9kaXY+XHJcbiAgICAgICAgPGRpdj48QXRyaWJ1dG8gbm9tYnJlPVwiSG9yYTpcIiB2YWxvcj17cmVzcHVlc3Rhc1tzcDVdfSAvPjwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBEZXNwbGVnYXJDaXRhUGFjdGFkYVlTZWxlY2Npb25hZG9BbnRlcmlvclRlbShwcm9wczogeyB0ZW06IFRFTSB9KSB7XHJcbiAgICBjb25zdCB7IHRlbSB9ID0gcHJvcHM7XHJcbiAgICByZXR1cm4gPGRpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRlbS1jaXRhXCI+XHJcbiAgICAgICAgICAgIDxBdHJpYnV0byBub21icmU9XCJDaXRhOlwiIHZhbG9yPXt0ZW0uY2l0YX0gLz5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gRGVzcGxlZ2FyVGVtKHByb3BzOiB7IHRlbTogVEVNIH0pIHtcclxuICAgIGNvbnN0IHsgdGVtIH0gPSBwcm9wcztcclxuICAgIHJldHVybiA8ZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGVtLWRvbWljaWxpb1wiPnt0ZW0ubm9tY2FsbGV9IHt0ZW0ubnJvY2F0YXN0cmFsfSA8QXRyaWJ1dG8gbm9tYnJlPVwicGlzb1wiIHZhbG9yPXt0ZW0ucGlzb30gLz4gPEF0cmlidXRvIG5vbWJyZT1cImRwdG9cIiB2YWxvcj17dGVtLmRlcGFydGFtZW50b30gLz4gPC9kaXY+XHJcbiAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgPEF0cmlidXRvIG5vbWJyZT1cInNlY3RvclwiIHZhbG9yPXt0ZW0uc2VjdG9yfSAvPlxyXG4gICAgICAgICAgICA8QXRyaWJ1dG8gbm9tYnJlPVwiZWRpZmljaW9cIiB2YWxvcj17dGVtLmVkaWZpY2lvfSAvPlxyXG4gICAgICAgICAgICA8QXRyaWJ1dG8gbm9tYnJlPVwiY2FzYVwiIHZhbG9yPXt0ZW0uY2FzYX0gLz5cclxuICAgICAgICAgICAgPEF0cmlidXRvIG5vbWJyZT1cImVudHJhZGFcIiB2YWxvcj17dGVtLmVudHJhZGF9IC8+XHJcbiAgICAgICAgICAgIDxBdHJpYnV0byBub21icmU9XCJoYWJpdGFjaW9uXCIgdmFsb3I9e3RlbS5oYWJpdGFjaW9ufSAvPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGVtLW9ic2VydmFjaW9uZXNcIj5cclxuICAgICAgICAgICAge3RlbS5vYnNlcnZhY2lvbmVzfVxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBoYW5kbGVMb2dvdXQgPSBhc3luYyAoKTogUHJvbWlzZTx2b2lkPiA9PiB7XHJcbiAgICBhd2FpdCBnZXRGb3JtUmVuZGVyZXIoKS5vbkxvZ291dCgpO1xyXG59O1xyXG5cclxuZXhwb3J0IHR5cGUgQXBwQmFyUHJpbmNpcGFsUHJvcHMgPSB7XHJcbiAgICB0aXR1bG8/OiBSZWFjdC5SZWFjdE5vZGU7XHJcbiAgICBiYXJyYU5hdkZvcm11bGFyaW8/OiBSZWFjdC5SZWFjdE5vZGU7XHJcbiAgICBtb2RvRE06IE1vZG9ETTtcclxuICAgIHNvbG9MZWN0dXJhPzogYm9vbGVhbjtcclxuICAgIGNoaWxkcmVuPzogUmVhY3QuUmVhY3ROb2RlO1xyXG4gICAgZGlzYWJsZWQ/OiBib29sZWFuO1xyXG59O1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIEFwcEJhclByaW5jaXBhbChwcm9wczogQXBwQmFyUHJpbmNpcGFsUHJvcHMpOiBKU1guRWxlbWVudCB7XHJcbiAgICB2YXIgY29sb3I6ICdzZWNvbmRhcnknIHwgJ3N1Y2Nlc3MnIHwgJ3ByaW1hcnknID0gcHJvcHMuc29sb0xlY3R1cmEgPyAnc2Vjb25kYXJ5JyA6IHByb3BzLm1vZG9ETSA9PT0gJ2NhcGEnID8gJ3N1Y2Nlc3MnIDogJ3ByaW1hcnknO1xyXG4gICAgdmFyIHsgZm9yUGssIHBhbnRhbGxhQWN0dWFsIH0gPSB1c2VTZWxlY3Rvcigoc3RhdGU6IENhc29TdGF0ZSkgPT4gc3RhdGUub3BjaW9uZXMpO1xyXG4gICAgY29uc3QgbW9zdHJhckJvdG9uZXJhTmF2ZWdhY2lvbiA9IHBhbnRhbGxhQWN0dWFsICYmIHBhbnRhbGxhQWN0dWFsICE9PSAnc2luY3Jvbml6YWNpb25fcmVxdWVyaWRhJyAmJiAhcHJvcHMuYmFycmFOYXZGb3JtdWxhcmlvO1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgICA8QXBwQmFyIHBvc2l0aW9uPVwiZml4ZWRcIiBjb2xvcj17Y29sb3J9XHJcbiAgICAgICAgICAgIHN0eWxlPXtwcm9wcy5kaXNhYmxlZCA/IHsgcG9pbnRlckV2ZW50czogJ25vbmUnLCBvcGFjaXR5OiAwLjkgfSA6IHt9fVxyXG4gICAgICAgID5cclxuICAgICAgICAgICAgPFRvb2xiYXI+XHJcbiAgICAgICAgICAgICAgICB7cHJvcHMuYmFycmFOYXZGb3JtdWxhcmlvfVxyXG4gICAgICAgICAgICAgICAge21vc3RyYXJCb3RvbmVyYU5hdmVnYWNpb24gPyAoXHJcbiAgICAgICAgICAgICAgICAgICAgPEJvdG9uZXJhTmF2ZWdhY2lvbiBkaXNhYmxlZD17cHJvcHMuZGlzYWJsZWR9Lz4gIFxyXG4gICAgICAgICAgICAgICAgKSA6IG51bGx9IFxyXG4gICAgICAgICAgICAgICAge3Byb3BzLm1vZG9ETSA9PT0gJ2NhcGEnICYmICFwcm9wcy5iYXJyYU5hdkZvcm11bGFyaW8gPyAoXHJcbiAgICAgICAgICAgICAgICAgICAgPFR5cG9ncmFwaHk+PHNwYW4gc3R5bGU9e3sgbWFyZ2luTGVmdDogJzVweCcgfX0+IE1PRE8gQ0FQQUNJVEFDScOTTjwvc3Bhbj48L1R5cG9ncmFwaHk+XHJcbiAgICAgICAgICAgICAgICApIDogbnVsbH1cclxuICAgICAgICAgICAgICAgIDxVc3VhcmlvTG9ndWVhZG9ZQ29uZmlnIG1vc3RyYXJTZXR1cD17IWZvclBrfSBtb3N0cmFyTG9nb3V0PXshIXBhbnRhbGxhQWN0dWFsICYmICFwcm9wcy5iYXJyYU5hdkZvcm11bGFyaW99IG9uTG9nb3V0PXtoYW5kbGVMb2dvdXR9IC8+XHJcbiAgICAgICAgICAgIDwvVG9vbGJhcj5cclxuICAgICAgICAgICAge3Byb3BzLmNoaWxkcmVufVxyXG4gICAgICAgIDwvQXBwQmFyPlxyXG4gICAgKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIEJvdG9uZXJhTmF2ZWdhY2lvbihwcm9wczogeyBkaXNhYmxlZD86IGJvb2xlYW4gfSk6IEpTWC5FbGVtZW50IHtcclxuICAgIGNvbnN0IGRpc3BhdGNoID0gdXNlRGlzcGF0Y2goKTtcclxuICAgIGNvbnN0IHsgcGFudGFsbGFBY3R1YWwgfSA9IHVzZVNlbGVjdG9yKChzdGF0ZTogQ2Fzb1N0YXRlKSA9PiBzdGF0ZS5vcGNpb25lcyk7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICAgIDxCdXR0b25Hcm91cCB2YXJpYW50PVwib3V0bGluZWRcIiBzaXplPVwic21hbGxcIiBjb2xvcj1cImluaGVyaXRcIj5cclxuICAgICAgICAgICAgPEJ1dHRvblxyXG4gICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gXHJcbiAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2goZGlzcGF0Y2hlcnMuU0VUX09QQ0lPTih7IG9wY2lvbjogJ3BhbnRhbGxhQWN0dWFsJywgdmFsb3I6ICdoZHInIH0pKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZGlzYWJsZWQ9e3BhbnRhbGxhQWN0dWFsID09PSAnaGRyJyB8fCBwcm9wcy5kaXNhYmxlZH1cclxuICAgICAgICAgICAgICAgIHN0eWxlPXtwYW50YWxsYUFjdHVhbCA9PT0gJ2hkcicgPyB7IGJhY2tncm91bmRDb2xvcjogJ3JnYmEoMjU1LDI1NSwyNTUsMC4xKScgfSA6IHVuZGVmaW5lZH1cclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgPElDT04uQXNzaWdubWVudCAvPiBIb2phIGRlIFJ1dGFcclxuICAgICAgICAgICAgPC9CdXR0b24+XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICA8QnV0dG9uXHJcbiAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PlxyXG4gICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoKGRpc3BhdGNoZXJzLlNFVF9PUENJT04oeyBvcGNpb246ICdwYW50YWxsYUFjdHVhbCcsIHZhbG9yOiAnc2luY3Jvbml6YWNpb24nIH0pKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZGlzYWJsZWQ9e3BhbnRhbGxhQWN0dWFsID09PSAnc2luY3Jvbml6YWNpb24nIHx8IHByb3BzLmRpc2FibGVkfVxyXG4gICAgICAgICAgICAgICAgc3R5bGU9e3BhbnRhbGxhQWN0dWFsID09PSAnc2luY3Jvbml6YWNpb24nID8geyBiYWNrZ3JvdW5kQ29sb3I6ICdyZ2JhKDI1NSwyNTUsMjU1LDAuMSknIH0gOiB1bmRlZmluZWR9XHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIDxJQ09OLkNsb3VkU3luYyAvPiBTaW5jcm9uaXphY2nDs25cclxuICAgICAgICAgICAgPC9CdXR0b24+XHJcbiAgICAgICAgPC9CdXR0b25Hcm91cD5cclxuICAgICk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBVc3VhcmlvTG9ndWVhZG9ZQ29uZmlnKHByb3BzOiB7IFxyXG4gICAgbW9zdHJhclNldHVwPzogYm9vbGVhbixcclxuICAgIG1vc3RyYXJMb2dvdXQ/OiBib29sZWFuLFxyXG4gICAgb25Mb2dvdXQ/OiAoKSA9PiB2b2lkLCBcclxuICAgIG5hdmlnYXRpb25NZW51PzogUmVhY3QuUmVhY3ROb2RlIFxyXG59KTogSlNYLkVsZW1lbnQge1xyXG4gICAgdmFyIHVzZXJuYW1lOiBzdHJpbmcgfCBudWxsID0gZ2V0Rm9ybVJlbmRlcmVyKCkuZ2V0VXNlcm5hbWVMb2d1ZWFkbygpO1xyXG4gICAgdmFyIGlkcGVyOiBzdHJpbmcgfCBudWxsID0gZ2V0Rm9ybVJlbmRlcmVyKCkuZ2V0SWRwZXJMb2d1ZWFkbygpO1xyXG4gICAgdmFyIHsgcGFudGFsbGFBY3R1YWwgfSA9IHVzZVNlbGVjdG9yKChzdGF0ZTogQ2Fzb1N0YXRlKSA9PiBzdGF0ZS5vcGNpb25lcyk7XHJcblxyXG4gICAgdmFyIGRpc3BhdGNoID0gdXNlRGlzcGF0Y2goKTtcclxuICAgIHZhciBbb3BlbkRpYWxvZywgc2V0T3BlbkRpYWxvZ10gPSB1c2VTdGF0ZTxib29sZWFuPihmYWxzZSk7XHJcblxyXG4gICAgdmFyIGhhbmRsZUxvZ291dENsaWNrID0gKCk6IHZvaWQgPT4ge1xyXG4gICAgICAgIHNldE9wZW5EaWFsb2codHJ1ZSk7XHJcbiAgICB9O1xyXG5cclxuICAgIHZhciBoYW5kbGVDbG9zZSA9ICgpOiB2b2lkID0+IHtcclxuICAgICAgICBzZXRPcGVuRGlhbG9nKGZhbHNlKTtcclxuICAgIH07XHJcblxyXG4gICAgdmFyIGhhbmRsZUNvbmZpcm1Mb2dvdXQgPSBhc3luYyAoKTogUHJvbWlzZTx2b2lkPiA9PiB7XHJcbiAgICAgICAgc2V0T3BlbkRpYWxvZyhmYWxzZSk7XHJcbiAgICAgICAgaWYgKHByb3BzLm9uTG9nb3V0KSB7XHJcbiAgICAgICAgICAgIGF3YWl0IHByb3BzLm9uTG9nb3V0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICB2YXIgZGF0b3MgPSBnZXREYXRvc0J5UGFzcygpO1xyXG4gICAgdmFyIHRpZW5lRW5jdWVzdGFzOiBib29sZWFuID0gISEoZGF0b3MgJiYgZGF0b3MuaW5mb3JtYWNpb25IZHIgJiYgT2JqZWN0LmtleXMoZGF0b3MuaW5mb3JtYWNpb25IZHIpLmxlbmd0aCA+IDApO1xyXG4gICAgY29uc3QgbW9kb0RNID0gZ2V0Rm9ybVJlbmRlcmVyKCkuZ2V0TW9kb0RNKCk7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICAgIDxkaXYgc3R5bGU9e3sgZGlzcGxheTogJ2ZsZXgnLCBhbGlnbkl0ZW1zOiAnY2VudGVyJywgZ2FwOiAnMTBweCcgfX0+XHJcbiAgICAgICAgICAgIHtwcm9wcy5uYXZpZ2F0aW9uTWVudX1cclxuICAgICAgICAgICAgPFR5cG9ncmFwaHkgdmFyaWFudD1cImJvZHkyXCIgc3R5bGU9e3sgY29sb3I6ICdpbmhlcml0JywgZm9udFdlaWdodDogJ2JvbGQnLCBtYXJnaW5MZWZ0Oic1cHgnIH19PlxyXG4gICAgICAgICAgICAgICAge2lkcGVyfSAtIHt1c2VybmFtZX1cclxuICAgICAgICAgICAgPC9UeXBvZ3JhcGh5PlxyXG4gICAgICAgICAgICB7cHJvcHMubW9zdHJhclNldHVwID8gKFxyXG4gICAgICAgICAgICAgICAgPEZhc3RTZXR1cD5cclxuICAgICAgICAgICAgICAgICAgICA8TWVudUl0ZW0gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2goZGlzcGF0Y2hlcnMuU0VUX09QQ0lPTih7IG9wY2lvbjogJ3BhbnRhbGxhQWN0dWFsJywgdmFsb3I6ICdtb2RvJyB9KSl9XHJcbiAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8TGlzdEl0ZW1JY29uPnttb2RvRE0gPT09ICdjYXBhJyA/IDxJQ09OLkJ1c2luZXNzQ2VudGVyIC8+IDogPElDT04uU3BvcnRzRXNwb3J0cyAvPn0gPC9MaXN0SXRlbUljb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxMaXN0SXRlbVRleHQ+Q2FtYmlvIGEgbW9kbyB7bW9kb0RNID09PSAnY2FwYScgPyAnUHJvZHVjY2nDs24nIDogJ0NhcGFjaXRhY2nDs24nfTwvTGlzdEl0ZW1UZXh0PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvTWVudUl0ZW0+XHJcbiAgICAgICAgICAgICAgICAgICAgPERpdmlkZXIvPlxyXG4gICAgICAgICAgICAgICAgICAgIDxNZW51SXRlbVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17dHJ1ZX1cclxuICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxMaXN0SXRlbVRleHQ+U29wb3J0ZSB0w6ljbmljbzwvTGlzdEl0ZW1UZXh0PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvTWVudUl0ZW0+XHJcbiAgICAgICAgICAgICAgICAgICAgPE1lbnVJdGVtIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoKGRpc3BhdGNoZXJzLlJFU0VUX09QQ0lPTkVTKHt9KSl9XHJcbiAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8TGlzdEl0ZW1JY29uPjxJQ09OLlJlZnJlc2gvPjwvTGlzdEl0ZW1JY29uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8TGlzdEl0ZW1UZXh0PlJlc2V0IG9wY2lvbmVzPC9MaXN0SXRlbVRleHQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9NZW51SXRlbT5cclxuICAgICAgICAgICAgICAgICAgICA8TWVudUl0ZW1cclxuICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGlzdG9yeS5yZXBsYWNlU3RhdGUobnVsbCwgJycsIGAke2xvY2F0aW9uLm9yaWdpbiArIGxvY2F0aW9uLnBhdGhuYW1lfS8uLi9tZW51I2k9c2luY3Jvbml6YXJgKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uLnJlbG9hZCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9fSAgXHJcbiAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8TGlzdEl0ZW1JY29uPjxJQ09OLlN5bmNBbHQgLz48L0xpc3RJdGVtSWNvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPExpc3RJdGVtVGV4dD5TaW5jcm9uaXphY2nDs24gKGxpbmsgdmllam8pPC9MaXN0SXRlbVRleHQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9NZW51SXRlbT5cclxuICAgICAgICAgICAgICAgIDwvRmFzdFNldHVwPlxyXG4gICAgICAgICAgICApIDogbnVsbH1cclxuICAgICAgICAgICAge3Byb3BzLm1vc3RyYXJMb2dvdXQgPyAoXHJcbiAgICAgICAgICAgICAgICA8QnV0dG9uIGNvbG9yPVwiaW5oZXJpdFwiIG9uQ2xpY2s9e2hhbmRsZUxvZ291dENsaWNrfSBzdHlsZT17eyBtaW5XaWR0aDogJ2F1dG8nLCBwYWRkaW5nOiAnNnB4JyB9fT5cclxuICAgICAgICAgICAgICAgICAgICA8SUNPTi5FeGl0VG9BcHAgLz5cclxuICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxyXG4gICAgICAgICAgICApIDogbnVsbH1cclxuXHJcbiAgICAgICAgICAgIDxEaWFsb2cgb3Blbj17b3BlbkRpYWxvZ30gb25DbG9zZT17aGFuZGxlQ2xvc2V9PlxyXG4gICAgICAgICAgICAgICAgPERpYWxvZ1RpdGxlPkNlcnJhciBTZXNpw7NuPC9EaWFsb2dUaXRsZT5cclxuICAgICAgICAgICAgICAgIDxEaWFsb2dDb250ZW50PlxyXG4gICAgICAgICAgICAgICAgICAgIDxEaWFsb2dDb250ZW50VGV4dD5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3RpZW5lRW5jdWVzdGFzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IFwiSGF5IGVuY3Vlc3RhcyBjYXJnYWRhcyBlbiBlbCBkaXNwb3NpdGl2by4gU2kgc2FsZSBkZSBsYSBhcGxpY2FjacOzbiBzaW4gc2luY3Jvbml6YXIgcG9kcsOtYSBwZXJkZXIgZWwgdHJhYmFqbyByZWFsaXphZG8uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogXCLCv0VzdMOhIHNlZ3VybyBkZSBxdWUgZGVzZWEgc2FsaXI/IFBhcmEgdm9sdmVyIGEgaW5ncmVzYXIgZGViZXLDoSBpbmljaWFyIHNlc2nDs24gbnVldmFtZW50ZS5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgPC9EaWFsb2dDb250ZW50VGV4dD5cclxuICAgICAgICAgICAgICAgIDwvRGlhbG9nQ29udGVudD5cclxuICAgICAgICAgICAgICAgIDxEaWFsb2dBY3Rpb25zPlxyXG4gICAgICAgICAgICAgICAgICAgIHt0aWVuZUVuY3Vlc3RhcyA/IChcclxuICAgICAgICAgICAgICAgICAgICAgICAgPD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxCdXR0b24gb25DbGljaz17aGFuZGxlQ29uZmlybUxvZ291dH0gY29sb3I9XCJzZWNvbmRhcnlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTYWxpciBkZSB0b2RvcyBtb2Rvc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9CdXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QnV0dG9uIG9uQ2xpY2s9e2hhbmRsZUNsb3NlfSBjb2xvcj1cInByaW1hcnlcIiB2YXJpYW50PVwiY29udGFpbmVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29udGludWFyIHJlbGV2YW5kb1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9CdXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvPlxyXG4gICAgICAgICAgICAgICAgICAgICkgOiAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QnV0dG9uIG9uQ2xpY2s9e2hhbmRsZUNsb3NlfSBjb2xvcj1cImluaGVyaXRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDYW5jZWxhclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9CdXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QnV0dG9uIG9uQ2xpY2s9e2hhbmRsZUNvbmZpcm1Mb2dvdXR9IGNvbG9yPVwicHJpbWFyeVwiIHZhcmlhbnQ9XCJjb250YWluZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTYWxpclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9CdXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvPlxyXG4gICAgICAgICAgICAgICAgICAgICl9XHJcbiAgICAgICAgICAgICAgICA8L0RpYWxvZ0FjdGlvbnM+XHJcbiAgICAgICAgICAgIDwvRGlhbG9nPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgKTtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBMYXlvdXRBY2Npb25EaXNwb3NpdGl2b1Byb3BzIHtcclxuICAgIHRpdHVsb0FwcEJhcjogUmVhY3QuUmVhY3ROb2RlO1xyXG4gICAgdGl0dWxvUGFuZWw6IHN0cmluZztcclxuICAgIGhlYWRlckFkaWNpb25hbD86IFJlYWN0LlJlYWN0Tm9kZTtcclxuXHJcbiAgICBtb2RvRE06IE1vZG9ETTtcclxuICAgIG9ubGluZTogYm9vbGVhbjtcclxuXHJcbiAgICBsb2FkaW5nPzogYm9vbGVhbjtcclxuICAgIGF2aXNvPzogeyB0aXBvOiAnaW5mbycgfCAnc3VjY2VzcycgfCAnZXJyb3InLCBtZW5zYWplOiBzdHJpbmcgfSB8IG51bGw7XHJcblxyXG4gICAgdGV4dG9Cb3RvbkFjY2lvbjogUmVhY3QuUmVhY3ROb2RlO1xyXG4gICAgY29sb3JCb3RvbkFjY2lvbj86IENvbG9yVmFsdWVzO1xyXG4gICAgb25BY2Npb246ICgpID0+IHZvaWQ7XHJcblxyXG4gICAgZGVzaGFiaWxpdGFyQm90b25Wb2x2ZXI/OiBib29sZWFuO1xyXG4gICAgbWVuc2FqZVZhY2lvPzogc3RyaW5nO1xyXG5cclxuICAgIGNoaWxkcmVuTW9kYWxlcz86IFJlYWN0LlJlYWN0Tm9kZTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIExheW91dEFjY2lvbkRpc3Bvc2l0aXZvKHByb3BzOiBMYXlvdXRBY2Npb25EaXNwb3NpdGl2b1Byb3BzKTogSlNYLkVsZW1lbnQge1xyXG4gICAgY29uc3QgZGF0b3NCeVBhc3MgPSBnZXREYXRvc0J5UGFzcygpO1xyXG4gICAgY29uc3QgZXN0cnVjdHVyYSA9IGdldEVzdHJ1Y3R1cmEoKTtcclxuICAgIGNvbnN0IGRpc3BhdGNoID0gdXNlRGlzcGF0Y2goKTtcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgc2Nyb2xsVG9Ub3AoKTtcclxuICAgIH0sIFtdKTtcclxuXHJcbiAgICBjb25zdCBhdmlzb1JlZHV4ID0gdXNlU2VsZWN0b3IoKHN0YXRlOiBDYXNvU3RhdGUpID0+IHN0YXRlLm9wY2lvbmVzLmF2aXNvUGVyc2lzdGVudGUpO1xyXG4gICAgY29uc3QgYXZpc29BTW9zdHJhciA9IHByb3BzLmF2aXNvIHx8IGF2aXNvUmVkdXg7XHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIGlmIChhdmlzb1JlZHV4KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBkaXNwYXRjaChkaXNwYXRjaGVycy5TRVRfT1BDSU9OKHsgb3BjaW9uOiAnYXZpc29QZXJzaXN0ZW50ZScsIHZhbG9yOiBudWxsIH0pKTtcclxuICAgICAgICAgICAgfSwgNTAwMCk7XHJcbiAgICAgICAgICAgIHJldHVybiAoKSA9PiBjbGVhclRpbWVvdXQodGltZXIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm5cclxuICAgIH0sIFthdmlzb1JlZHV4LCBkaXNwYXRjaF0pO1xyXG5cclxuICAgIGNvbnN0IGNhbnRDYXJnYXM6IG51bWJlciA9IGhheURhdG9zQnlQYXNzQWxtYWNlbmFkb3MoKSA/IGxpa2VBcihkYXRvc0J5UGFzcy5jYXJnYXMpLmFycmF5KCkubGVuZ3RoIDogMDtcclxuICAgIGNvbnN0IGNhbnRSZXNwdWVzdGFzOiBudW1iZXIgPSBoYXlEYXRvc0J5UGFzc0FsbWFjZW5hZG9zKCkgJiYgZXN0cnVjdHVyYSA/IGxpa2VBcihkYXRvc0J5UGFzcy5yZXNwdWVzdGFzW2VzdHJ1Y3R1cmEudWFQcGFsXSkuYXJyYXkoKS5sZW5ndGggOiAwO1xyXG5cclxuICAgIHJldHVybiAoXHJcbiAgICAgICAgPD5cclxuICAgICAgICAgICAgPEFwcEJhclByaW5jaXBhbFxyXG4gICAgICAgICAgICAgICAgbW9kb0RNPXtwcm9wcy5tb2RvRE19XHJcbiAgICAgICAgICAgICAgICB0aXR1bG89e3Byb3BzLnRpdHVsb0FwcEJhcn1cclxuICAgICAgICAgICAgICAgIGRpc2FibGVkPXtwcm9wcy5sb2FkaW5nfVxyXG4gICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImhvamEtZGUtcnV0YVwiPlxyXG4gICAgICAgICAgICAgICAgPEluZm9WZXJzaW9uU2luY3JvRGVzcGxpZWd1ZS8+XHJcbiAgICAgICAgICAgICAgICA8UGFwZXIgc3R5bGU9e3sgcGFkZGluZzogJzIwcHgnLCBtYXJnaW46ICdhdXRvJywgbWFyZ2luQm90dG9tOiAnMTBweCcgfX0+XHJcbiAgICAgICAgICAgICAgICAgICAgPFR5cG9ncmFwaHkgdmFyaWFudD1cImg1XCI+e3Byb3BzLnRpdHVsb1BhbmVsfTwvVHlwb2dyYXBoeT5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAge3Byb3BzLmhlYWRlckFkaWNpb25hbH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAge2hheURhdG9zQnlQYXNzQWxtYWNlbmFkb3MoKSA/IChcclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBtYXJnaW5Cb3R0b206ICcyMHB4JyB9fT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUeXBvZ3JhcGh5IHZhcmlhbnQ9XCJoNlwiPkluZm9ybWFjacOzbiBkZWwgZGlzcG9zaXRpdm86PC9UeXBvZ3JhcGh5PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFR5cG9ncmFwaHk+e2NhbnRDYXJnYXN9IMOhcmVhczoge2xpa2VBcihkYXRvc0J5UGFzcy5jYXJnYXMpLmtleXMoKS5qb2luKCcsICcpfTwvVHlwb2dyYXBoeT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUeXBvZ3JhcGh5PntjYW50UmVzcHVlc3Rhc30ge2VzdHJ1Y3R1cmE/LnVhUHBhbCB8fCAndml2aWVuZGFzJ308L1R5cG9ncmFwaHk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICkgOiAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb3BzLm1lbnNhamVWYWNpbyAmJiBwcm9wcy5tZW5zYWplVmFjaW8udHJpbSgpICE9PSBcIlwiID8gKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFR5cG9ncmFwaHkgc3R5bGU9e3sgbWFyZ2luQm90dG9tOiAnMjBweCcgfX0+e3Byb3BzLm1lbnNhamVWYWNpb308L1R5cG9ncmFwaHk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICkgOiBudWxsXHJcbiAgICAgICAgICAgICAgICAgICAgKX1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAge2F2aXNvQU1vc3RyYXIgJiYgKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8UGFwZXIgc3R5bGU9e3tcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6ICcxMHB4JyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbkJvdHRvbTogJzIwcHgnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiBhdmlzb0FNb3N0cmFyLnRpcG8gPT09ICdzdWNjZXNzJyA/ICcjZTZmZmZhJyA6IGF2aXNvQU1vc3RyYXIudGlwbyA9PT0gJ2Vycm9yJyA/ICcjZmZmNWY1JyA6ICcjZWRmMmY3JyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiBhdmlzb0FNb3N0cmFyLnRpcG8gPT09ICdzdWNjZXNzJyA/ICcjMjM0ZTUyJyA6IGF2aXNvQU1vc3RyYXIudGlwbyA9PT0gJ2Vycm9yJyA/ICcjOWIyYzJjJyA6ICcjMmQzNzQ4JyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlcjogYDFweCBzb2xpZCAke2F2aXNvQU1vc3RyYXIudGlwbyA9PT0gJ3N1Y2Nlc3MnID8gJyMzMTk3OTUnIDogYXZpc29BTW9zdHJhci50aXBvID09PSAnZXJyb3InID8gJyNlNTNlM2UnIDogJyNjYmQ1ZTAnfWBcclxuICAgICAgICAgICAgICAgICAgICAgICAgfX0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VHlwb2dyYXBoeT57YXZpc29BTW9zdHJhci5tZW5zYWplfTwvVHlwb2dyYXBoeT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9QYXBlcj5cclxuICAgICAgICAgICAgICAgICAgICApfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IGRpc3BsYXk6ICdmbGV4JywgZ2FwOiAnMTBweCcsIGFsaWduSXRlbXM6ICdjZW50ZXInLCBmbGV4V3JhcDogJ3dyYXAnIH19PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8QnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50PVwiY29udGFpbmVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPXtwcm9wcy5jb2xvckJvdG9uQWNjaW9uIHx8ICdwcmltYXJ5J31cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXtwcm9wcy5sb2FkaW5nIHx8ICFwcm9wcy5vbmxpbmV9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXtwcm9wcy5vbkFjY2lvbn1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3Byb3BzLnRleHRvQm90b25BY2Npb259XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvQnV0dG9uPiAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3sgZGlzcGxheTogJ2ZsZXgnLCBnYXA6ICcxMHB4JywgYWxpZ25JdGVtczogJ2NlbnRlcicsIGZsZXhXcmFwOiAnd3JhcCcgfX0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHshcHJvcHMub25saW5lICYmIChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUeXBvZ3JhcGh5IGNvbG9yPVwic2Vjb25kYXJ5XCIgc3R5bGU9e3sgbWFyZ2luTGVmdDogcHJvcHMuZGVzaGFiaWxpdGFyQm90b25Wb2x2ZXIgPyAnMHB4JyA6ICcxMHB4JyB9fT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZWJlIGVzdGFyIGNvbmVjdGFkbyBhIGludGVybmV0IHBhcmEgcmVhbGl6YXIgZXN0YSBhY2Npw7NuLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9UeXBvZ3JhcGh5PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICApfVxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9QYXBlcj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICB7cHJvcHMuY2hpbGRyZW5Nb2RhbGVzfVxyXG4gICAgICAgIDwvPlxyXG4gICAgKTtcclxufVxyXG5cclxuaW50ZXJmYWNlIFBhbnRhbGxhU2luY3Jvbml6YWNpb25Qcm9wcyB7XHJcbiAgICAvLyBQcm9wcyBvcGNpb25hbGVzIHBhcmEgZWwgXCJzYWJvclwiIHJlcXVlcmlkYVxyXG4gICAgcmVxdWVyaWRhPzogYm9vbGVhbjtcclxuICAgIG1lbnNhamVSZXF1ZXJpZG8/OiBSZWFjdC5SZWFjdE5vZGU7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBQYW50YWxsYVNpbmNyb25pemFjaW9uKHByb3BzOiBQYW50YWxsYVNpbmNyb25pemFjaW9uUHJvcHMpOiBKU1guRWxlbWVudCB7XHJcbiAgICBjb25zdCBbbG9hZGluZywgc2V0TG9hZGluZ10gPSB1c2VTdGF0ZTxib29sZWFuPihmYWxzZSk7XHJcbiAgICBjb25zdCBhdmlzb1BlcnNpc3RlbnRlID0gdXNlU2VsZWN0b3IoKHN0YXRlOiBDYXNvU3RhdGUpID0+IHN0YXRlLm9wY2lvbmVzLmF2aXNvUGVyc2lzdGVudGUpO1xyXG4gICAgY29uc3Qgb25saW5lOiBib29sZWFuID0gdXNlT25saW5lU3RhdHVzKCk7XHJcbiAgICBjb25zdCBkaXNwYXRjaCA9IHVzZURpc3BhdGNoKCk7XHJcbiAgICBjb25zdCBtb2RvRE0gPSBnZXRGb3JtUmVuZGVyZXIoKS5nZXRNb2RvRE0oKTtcclxuXHJcbiAgICBjb25zdCBoYW5kbGVTaW5jcm9uaXphciA9IGFzeW5jICgpOiBQcm9taXNlPHZvaWQ+ID0+IHtcclxuICAgICAgICBzZXRMb2FkaW5nKHRydWUpO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGRpc3BhdGNoKGRpc3BhdGNoZXJzLlNFVF9PUENJT04oeyBvcGNpb246ICdhdmlzb1BlcnNpc3RlbnRlJywgdmFsb3I6IG51bGwgfSkpO1xyXG4gICAgICAgICAgICBjb25zdCBmb3JtUmVuZGVyZXIgPSBnZXRGb3JtUmVuZGVyZXIoKTtcclxuICAgICAgICAgICAgY29uc3QgZGF0b3MgPSBhd2FpdCBmb3JtUmVuZGVyZXIub25TaW5jcm9uaXphcihhd2FpdCBmb3JtUmVuZGVyZXIubGVlckRhdG9zKCksIGZhbHNlKTtcclxuICAgICAgICAgICAgYXdhaXQgZm9ybVJlbmRlcmVyLmNhcmdhck1vdG9yKCk7XHJcbiAgICAgICAgICAgIGNvbnN0IG1lbnNhamVFeGl0byA9IGBTaW5jcm9uaXphY2nDs24gZXhpdG9zYS4gU2luY3JvIE7CuiAke2RhdG9zLm51bV9zaW5jcm99YDtcclxuICAgICAgICAgICAgZGlzcGF0Y2goZGlzcGF0Y2hlcnMuU0VUX1BBTlRBTExBX0FDVFVBTCh7IHBhbnRhbGxhOiAnc2luY3Jvbml6YWNpb24nLCBhdmlzb1BlcnNpc3RlbnRlOiB7IHRpcG86ICdzdWNjZXNzJywgbWVuc2FqZTogbWVuc2FqZUV4aXRvIH0gfSkpO1xyXG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhlcnIpXHJcbiAgICAgICAgICAgIGRpc3BhdGNoKGRpc3BhdGNoZXJzLlNFVF9QQU5UQUxMQV9BQ1RVQUwoe1xyXG4gICAgICAgICAgICAgICAgcGFudGFsbGE6IHByb3BzLnJlcXVlcmlkYSA/ICdzaW5jcm9uaXphY2lvbl9yZXF1ZXJpZGEnIDogJ3NpbmNyb25pemFjaW9uJyxcclxuICAgICAgICAgICAgICAgIGF2aXNvUGVyc2lzdGVudGU6IHsgdGlwbzogJ2Vycm9yJywgbWVuc2FqZTogYEVycm9yIGRlIHNpbmNyb25pemFjacOzbjogJHt1bmV4cGVjdGVkKGVycikubWVzc2FnZX1gIH1cclxuICAgICAgICAgICAgfSkpO1xyXG4gICAgICAgIH0gZmluYWxseSB7XHJcbiAgICAgICAgICAgIHNldExvYWRpbmcoZmFsc2UpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgLy8gRXN0aWxvIHBhcmEgZWwgbWVuc2FqZSBjdWFuZG8gZXMgcmVxdWVyaWRhXHJcbiAgICBjb25zdCBwYXJhZ3JhcGhTdHlsZXMgPSB7IGZvbnRTaXplOiBcIjEuMnJlbVwiLCBmb250V2VpZ2h0OiA2MDAsIHBhZGRpbmc6IFwiNXB4IDEwcHhcIiwgbWFyZ2luQm90dG9tOiBcIjE1cHhcIiB9O1xyXG5cclxuICAgIC8vIFNpIGVzIHJlcXVlcmlkYSwgaW55ZWN0YW1vcyBlbCBtZW5zYWplIGV4cGxpY2F0aXZvIGFycmliYVxyXG4gICAgY29uc3QgaGVhZGVyQWRpY2lvbmFsID0gcHJvcHMucmVxdWVyaWRhICYmIHByb3BzLm1lbnNhamVSZXF1ZXJpZG8gPyAoXHJcbiAgICAgICAgPFR5cG9ncmFwaHkgY29tcG9uZW50PVwiZGl2XCIgc3R5bGU9e3BhcmFncmFwaFN0eWxlc30+XHJcbiAgICAgICAgICAgIHtwcm9wcy5tZW5zYWplUmVxdWVyaWRvfVxyXG4gICAgICAgIDwvVHlwb2dyYXBoeT5cclxuICAgICkgOiBudWxsO1xyXG5cclxuICAgIHJldHVybiAoXHJcbiAgICAgICAgPExheW91dEFjY2lvbkRpc3Bvc2l0aXZvXHJcbiAgICAgICAgICAgIHRpdHVsb0FwcEJhcj17cHJvcHMucmVxdWVyaWRhID8gYFNJTkNST05JWkFDScOTTiBSRVFVRVJJREEke21vZG9ETSA9PT0gJ2NhcGEnID8gJyAtIENBUEEnIDogJyd9YCA6ICdTSU5DUk9OSVpBQ0nDk04nfVxyXG4gICAgICAgICAgICBtb2RvRE09e21vZG9ETX1cclxuICAgICAgICAgICAgdGl0dWxvUGFuZWw9e3Byb3BzLnJlcXVlcmlkYSA/IFwiU2luY3Jvbml6YWNpw7NuIFJlcXVlcmlkYVwiIDogXCJTaW5jcm9uaXphciBEaXNwb3NpdGl2b1wifVxyXG4gICAgICAgICAgICBoZWFkZXJBZGljaW9uYWw9e2hlYWRlckFkaWNpb25hbH1cclxuICAgICAgICAgICAgYXZpc289e2F2aXNvUGVyc2lzdGVudGV9XHJcbiAgICAgICAgICAgIGxvYWRpbmc9e2xvYWRpbmd9XHJcbiAgICAgICAgICAgIG9ubGluZT17b25saW5lfVxyXG4gICAgICAgICAgICB0ZXh0b0JvdG9uQWNjaW9uPXtcclxuICAgICAgICAgICAgICAgIGxvYWRpbmcgPyBcclxuICAgICAgICAgICAgICAgICAgICAnU2luY3Jvbml6YW5kby4uLidcclxuICAgICAgICAgICAgICAgIDpcclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT17eyBkaXNwbGF5OiAnZmxleCcsIGFsaWduSXRlbXM6ICdjZW50ZXInLCBnYXA6ICc4cHgnIH19PjxJQ09OLkNsb3VkU3luYyAvPiBTaW5jcm9uaXphcjwvc3Bhbj5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb2xvckJvdG9uQWNjaW9uPXttb2RvRE0gPT09ICdjYXBhJyA/ICdzdWNjZXNzJyA6ICdwcmltYXJ5J31cclxuICAgICAgICAgICAgb25BY2Npb249e2hhbmRsZVNpbmNyb25pemFyfVxyXG4gICAgICAgICAgICBtZW5zYWplVmFjaW89e3Byb3BzLnJlcXVlcmlkYSA/IFwiIFwiIDogXCJObyBoYXkgaW5mb3JtYWNpw7NuIGRlIGZvcm11bGFyaW9zIGxvY2FsbWVudGUuXCJ9XHJcbiAgICAgICAgLz5cclxuICAgICk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBQYW50YWxsYUNhbWJpb01vZG8oKTogSlNYLkVsZW1lbnQge1xyXG4gICAgY29uc3QgW2xvYWRpbmcsIHNldExvYWRpbmddID0gdXNlU3RhdGU8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gICAgY29uc3QgW2F2aXNvLCBzZXRBdmlzb10gPSB1c2VTdGF0ZTx7IHRpcG86ICdpbmZvJyB8ICdzdWNjZXNzJyB8ICdlcnJvcicsIG1lbnNhamU6IHN0cmluZyB9IHwgbnVsbD4obnVsbCk7XHJcbiAgICBjb25zdCBbcGFzc3dvcmQsIHNldFBhc3N3b3JkXSA9IHVzZVN0YXRlPHN0cmluZz4oJycpO1xyXG4gICAgY29uc3QgW2RpYWxvZ09wZW4sIHNldERpYWxvZ09wZW5dID0gdXNlU3RhdGU8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gICAgY29uc3QgW21vZG9ETSwgc2V0TW9kb0RNXSA9IHVzZVN0YXRlPE1vZG9ETT4oJ3Byb2R1YycpO1xyXG4gICAgY29uc3QgW2Vycm9yUGFzc3dvcmQsIHNldEVycm9yUGFzc3dvcmRdID0gdXNlU3RhdGU8c3RyaW5nIHwgbnVsbD4obnVsbCk7XHJcbiAgICBjb25zdCBvbmxpbmU6IGJvb2xlYW4gPSB1c2VPbmxpbmVTdGF0dXMoKTtcclxuICAgIGNvbnN0IGRpc3BhdGNoID0gdXNlRGlzcGF0Y2goKTtcclxuXHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGZldGNoTW9kbyA9IGFzeW5jICgpOiBQcm9taXNlPHZvaWQ+ID0+IHtcclxuICAgICAgICAgICAgY29uc3QgbTogTW9kb0RNID0gZ2V0Rm9ybVJlbmRlcmVyKCkuZ2V0TW9kb0RNKCk7XHJcbiAgICAgICAgICAgIGdldEZvcm1SZW5kZXJlcigpLnNldE1vZG9ETShtKTtcclxuICAgICAgICAgICAgc2V0TW9kb0RNKG0pO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgZmV0Y2hNb2RvKCk7XHJcbiAgICB9LCBbXSk7XHJcblxyXG4gICAgY29uc3QgaGFuZGxlQ29uZmlybWFyQ2FtYmlvID0gYXN5bmMgKCk6IFByb21pc2U8dm9pZD4gPT4ge1xyXG4gICAgICAgIGlmIChwYXNzd29yZCAhPT0gJzEyMzQnKSB7XHJcbiAgICAgICAgICAgIHNldEVycm9yUGFzc3dvcmQoJ0NvbnRyYXNlw7FhIGluY29ycmVjdGEuJyk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgc2V0RXJyb3JQYXNzd29yZChudWxsKTtcclxuICAgICAgICBzZXREaWFsb2dPcGVuKGZhbHNlKTtcclxuICAgICAgICBzZXRMb2FkaW5nKHRydWUpO1xyXG4gICAgICAgIHNldEF2aXNvKG51bGwpO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG51ZXZvTW9kbzogTW9kb0RNID0gbW9kb0RNID09PSAncHJvZHVjJyA/ICdjYXBhJyA6ICdwcm9kdWMnO1xyXG4gICAgICAgICAgICBjb25zdCBmb3JtUmVuZGVyZXIgPSBnZXRGb3JtUmVuZGVyZXIoKTtcclxuICAgICAgICAgICAgYXdhaXQgZm9ybVJlbmRlcmVyLm9uU2luY3Jvbml6YXIoYXdhaXQgZm9ybVJlbmRlcmVyLmxlZXJEYXRvcygpLCB0cnVlKTtcclxuICAgICAgICAgICAgZm9ybVJlbmRlcmVyLnNldE1vZG9ETShudWV2b01vZG8pO1xyXG4gICAgICAgICAgICBzZXRNb2RvRE0obnVldm9Nb2RvKTtcclxuICAgICAgICAgICAgYXdhaXQgZm9ybVJlbmRlcmVyLmNhcmdhck1vdG9yKCk7XHJcbiAgICAgICAgICAgIHNldEF2aXNvKHsgdGlwbzogJ3N1Y2Nlc3MnLCBtZW5zYWplOiBgTU9ETyAke251ZXZvTW9kby50b1VwcGVyQ2FzZSgpfSBBQ1RJVkFETyBZIERJU1BPU0lUSVZPIFNJTkNST05JWkFET2AgfSk7XHJcbiAgICAgICAgICAgIGRpc3BhdGNoKGRpc3BhdGNoZXJzLlNFVF9PUENJT04oeyBvcGNpb246ICdwYW50YWxsYUFjdHVhbCcsIHZhbG9yOiAnbW9kbycgfSkpO1xyXG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgICBzZXRBdmlzbyh7IHRpcG86ICdlcnJvcicsIG1lbnNhamU6IGBFcnJvciBhbCBjYW1iaWFyIGRlIG1vZG86ICR7dW5leHBlY3RlZChlcnIpLm1lc3NhZ2V9YCB9KTtcclxuICAgICAgICB9IGZpbmFsbHkge1xyXG4gICAgICAgICAgICBzZXRMb2FkaW5nKGZhbHNlKTtcclxuICAgICAgICAgICAgc2V0UGFzc3dvcmQoJycpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgY29uc3QgaGVhZGVyQWRpY2lvbmFsVGV4dCA9IChcclxuICAgICAgICA8VHlwb2dyYXBoeSBzdHlsZT17eyBtYXJnaW5Cb3R0b206ICcyMHB4JywgZm9udFdlaWdodDogJ2JvbGQnIH19PlxyXG4gICAgICAgICAgICBNb2RvIGFjdHVhbDogPHNwYW4gc3R5bGU9e3sgY29sb3I6IG1vZG9ETSA9PT0gJ2NhcGEnID8gJ2dyZWVuJyA6ICdibHVlJywgdGV4dFRyYW5zZm9ybTogJ3VwcGVyY2FzZScgfX0+e21vZG9ETX08L3NwYW4+XHJcbiAgICAgICAgPC9UeXBvZ3JhcGh5PlxyXG4gICAgKTtcclxuXHJcbiAgICByZXR1cm4gKFxyXG4gICAgICAgIDxMYXlvdXRBY2Npb25EaXNwb3NpdGl2b1xyXG4gICAgICAgICAgICB0aXR1bG9BcHBCYXI9XCJDQU1CSU8gREUgTU9ET1wiXHJcbiAgICAgICAgICAgIG1vZG9ETT17bW9kb0RNfVxyXG4gICAgICAgICAgICB0aXR1bG9QYW5lbD1cIkNhbWJpYXIgTW9kbyBkZWwgRGlzcG9zaXRpdm9cIlxyXG4gICAgICAgICAgICBoZWFkZXJBZGljaW9uYWw9e2hlYWRlckFkaWNpb25hbFRleHR9XHJcbiAgICAgICAgICAgIGF2aXNvPXthdmlzb31cclxuICAgICAgICAgICAgbG9hZGluZz17bG9hZGluZ31cclxuICAgICAgICAgICAgb25saW5lPXtvbmxpbmV9XHJcbiAgICAgICAgICAgIHRleHRvQm90b25BY2Npb249e2BDYW1iaWFyIGEgbW9kbyAke21vZG9ETSA9PT0gJ3Byb2R1YycgPyAnY2FwYScgOiAncHJvZHVjJ31gfVxyXG4gICAgICAgICAgICBjb2xvckJvdG9uQWNjaW9uPXttb2RvRE0gPT09ICdwcm9kdWMnID8gJ3ByaW1hcnknIDogJ3N1Y2Nlc3MnfVxyXG4gICAgICAgICAgICBvbkFjY2lvbj17KCkgPT4geyBzZXRFcnJvclBhc3N3b3JkKG51bGwpOyBzZXREaWFsb2dPcGVuKHRydWUpOyB9fVxyXG4gICAgICAgICAgICBjaGlsZHJlbk1vZGFsZXM9e1xyXG4gICAgICAgICAgICAgICAgPERpYWxvZyBvcGVuPXtkaWFsb2dPcGVufSBvbkNsb3NlPXsoKSA9PiB7IHNldERpYWxvZ09wZW4oZmFsc2UpOyBzZXRQYXNzd29yZCgnJyk7IHNldEVycm9yUGFzc3dvcmQobnVsbCk7IH19PlxyXG4gICAgICAgICAgICAgICAgICAgIDxEaWFsb2dUaXRsZT5Db25maXJtYXIgY2FtYmlvIGRlIG1vZG88L0RpYWxvZ1RpdGxlPlxyXG4gICAgICAgICAgICAgICAgICAgIDxEaWFsb2dDb250ZW50PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8RGlhbG9nQ29udGVudFRleHQgc3R5bGU9e3sgbWFyZ2luQm90dG9tOiAnMTVweCcgfX0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb25maXJtYSBjYW1iaW8gZGUgbW9kbyBcInttb2RvRE19XCIgYSBcInttb2RvRE0gPT09ICdwcm9kdWMnID8gJ2NhcGEnIDogJ3Byb2R1Yyd9XCIuIFNlIHNpbmNyb25pemFyw6EgZWwgZGlzcG9zaXRpdm8uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvRGlhbG9nQ29udGVudFRleHQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHtlcnJvclBhc3N3b3JkICYmIChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUeXBvZ3JhcGh5IHN0eWxlPXt7IGNvbG9yOiAnI2QzMmYyZicsIG1hcmdpbkJvdHRvbTogJzE1cHgnLCBmb250V2VpZ2h0OiAnYm9sZCcgfX0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2Vycm9yUGFzc3dvcmR9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1R5cG9ncmFwaHk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICl9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxUeXBvZ3JhcGh5IHZhcmlhbnQ9XCJib2R5MlwiIHN0eWxlPXt7IG1hcmdpbkJvdHRvbTogJzEwcHgnIH19PlBvciBmYXZvciBpbmdyZXNlIGxhIGNvbnRyYXNlw7FhOjwvVHlwb2dyYXBoeT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwicGFzc3dvcmRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3Bhc3N3b3JkfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlOiBSZWFjdC5DaGFuZ2VFdmVudDxIVE1MSW5wdXRFbGVtZW50PikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFBhc3N3b3JkKGUudGFyZ2V0LnZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3JQYXNzd29yZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRFcnJvclBhc3N3b3JkKG51bGwpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT17eyB3aWR0aDogJzEwMCUnLCBwYWRkaW5nOiAnMTBweCcsIGZvbnRTaXplOiAnMTZweCcgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICAgICA8L0RpYWxvZ0NvbnRlbnQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPERpYWxvZ0FjdGlvbnM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxCdXR0b24gb25DbGljaz17KCkgPT4geyBzZXREaWFsb2dPcGVuKGZhbHNlKTsgc2V0UGFzc3dvcmQoJycpOyBzZXRFcnJvclBhc3N3b3JkKG51bGwpOyB9fSBjb2xvcj1cImluaGVyaXRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIENhbmNlbGFyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8QnV0dG9uIG9uQ2xpY2s9e2hhbmRsZUNvbmZpcm1hckNhbWJpb30gY29sb3I9XCJwcmltYXJ5XCIgdmFyaWFudD1cImNvbnRhaW5lZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29uZmlybWFyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvRGlhbG9nQWN0aW9ucz5cclxuICAgICAgICAgICAgICAgIDwvRGlhbG9nPlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgLz5cclxuICAgICk7XHJcbn1cclxuXHJcbmludGVyZmFjZSBJbmZvVmVyc2lvblNpbmNyb0Rlc3BsaWVndWVQcm9wcyB7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBJbmZvVmVyc2lvblNpbmNyb0Rlc3BsaWVndWUoX3Byb3BzOiBJbmZvVmVyc2lvblNpbmNyb0Rlc3BsaWVndWVQcm9wcyk6IEpTWC5FbGVtZW50IHtcclxuICAgIGNvbnN0IHZlcnNpb24gPSBnZXRGb3JtUmVuZGVyZXIoKS5nZXRBcHBDYWNoZVZlcnNpb24oKTtcclxuICAgIGNvbnN0IHsgbnVtX3NpbmNybyB9ID0gZ2V0RGF0b3NCeVBhc3MoKTtcclxuICAgIHJldHVybiAoXHJcbiAgICAgICAgPFBhcGVyIHN0eWxlPXt7IG1hcmdpbkJvdHRvbTogJzEwcHgnLCBwYWRkaW5nOiAnMTBweCcgfX0+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibm9tYnJlLXZlcnNpb25cIj5cclxuICAgICAgICAgICAgICAgIDxkaXY+SW5zdGl0dXRvIGRlIEVzdGFkw61zdGljYSB5IENlbnNvcyBkZSBsYSBDaXVkYWQgQXV0w7Nub21hIGRlIEJ1ZW5vcyBBaXJlcyAtIElERUNCQTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdj52ZXJzacOzbiB7dmVyc2lvbn0gLSB7bnVtX3NpbmNybyA/IGBzaW5jcm86ICR7bnVtX3NpbmNyby50b1N0cmluZygpfWAgOiAnc2luIHNpbmNyb25pemFyJ308L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9QYXBlcj5cclxuICAgICk7XHJcbn1cclxuXHJcbmV4cG9ydCB0eXBlIEhvamFEZVJ1dGFEZXNwbGllZ3VlUHJvcHMgPSB7XHJcbn07XHJcblxyXG5leHBvcnQgdHlwZSBIb2phRGVSdXRhRGVzcGxpZWd1ZVR5cGUgPSAocHJvcHM6IEhvamFEZVJ1dGFEZXNwbGllZ3VlUHJvcHMpID0+IEpTWC5FbGVtZW50O1xyXG5cclxuZXhwb3J0IHZhciBIb2phRGVSdXRhRGVzcGxpZWd1ZTogSG9qYURlUnV0YURlc3BsaWVndWVUeXBlXHJcblxyXG5leHBvcnQgY29uc3Qgc2V0SG9qYURlUnV0YURlc3BsaWVndWUgPSAoaG9qYURlUnV0YTogSG9qYURlUnV0YURlc3BsaWVndWVUeXBlKSA9PiBIb2phRGVSdXRhRGVzcGxpZWd1ZSA9IGhvamFEZVJ1dGFcclxuXHJcbnNldEhvamFEZVJ1dGFEZXNwbGllZ3VlKChfcHJvcHM6IEhvamFEZVJ1dGFEZXNwbGllZ3VlUHJvcHMpID0+IHtcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgc2Nyb2xsVG9Ub3AoKTtcclxuICAgIH0sIFtdKTtcclxuICAgIHZhciB7IGNhcmdhcywgbnVtX3NpbmNybywgaW5mb3JtYWNpb25IZHIsIHJlc3B1ZXN0YXMgfSA9IGdldERhdG9zQnlQYXNzKCk7XHJcbiAgICB2YXIgZmVlZGJhY2tSb3dWYWxpZGF0b3IgPSBnZXRGZWVkYmFja1Jvd1ZhbGlkYXRvcigpO1xyXG4gICAgY29uc3QgbW9kb0RNOiBNb2RvRE0gPSBnZXRGb3JtUmVuZGVyZXIoKS5nZXRNb2RvRE0oKTtcclxuICAgIHJldHVybiAoXHJcbiAgICAgICAgPD5cclxuICAgICAgICAgICAgPEFwcEJhclByaW5jaXBhbFxyXG4gICAgICAgICAgICAgICAgbW9kb0RNPXttb2RvRE19XHJcbiAgICAgICAgICAgICAgICB0aXR1bG89XCJIT0pBIERFIFJVVEFcIlxyXG4gICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImhvamEtZGUtcnV0YVwiPlxyXG4gICAgICAgICAgICAgICAgPEluZm9WZXJzaW9uU2luY3JvRGVzcGxpZWd1ZS8+XHJcbiAgICAgICAgICAgICAgICB7bGlrZUFyKGNhcmdhcykubWFwKChjYXJnYSwgaWRDYXJnYSwgXywgcG9zaWNpb24pID0+XHJcbiAgICAgICAgICAgICAgICAgICAgPERlc3BsZWdhckNhcmdhIGtleT17aWRDYXJnYX0gY2FyZ2E9e2NhcmdhfSBpZENhcmdhPXtpZENhcmdhfSBwb3NpY2lvbj17cG9zaWNpb259IGluZm9ybWFjaW9uSGRyPXtpbmZvcm1hY2lvbkhkcn0gZmVlZGJhY2tSb3dWYWxpZGF0b3I9e2ZlZWRiYWNrUm93VmFsaWRhdG9yfSByZXNwdWVzdGFzPXtyZXNwdWVzdGFzfSAvPlxyXG4gICAgICAgICAgICAgICAgKS5hcnJheSgpfVxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8Lz5cclxuICAgICk7XHJcbn0pO1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIExpc3RhVGV4dG9zKHByb3BzOiB7IHRleHRvczogc3RyaW5nW10gfSkge1xyXG4gICAgcmV0dXJuIDx1bD5cclxuICAgICAgICB7cHJvcHMudGV4dG9zLm1hcCh0ID0+IDxsaT48VHlwb2dyYXBoeT57dH08L1R5cG9ncmFwaHk+PC9saT4pfVxyXG4gICAgPC91bD47XHJcbn1cclxuXHJcbi8vQ09OVFJPTCBERSBQRVNUQcORQVNcclxudmFyIGFsbE9wZW5lZFRhYnM6IHsgW3g6IHN0cmluZ106IG51bWJlciB9ID0ge307XHJcbnZhciBpbmZvT3BlbmVkVGFicyA9IHtcclxuICAgIGFsbE9wZW5lZFRhYnMsXHJcbiAgICBteUlkOiAnY2FsY3VsYW5kby4uLicsXHJcbiAgICBvdGhlclRhYnNOYW1lczogJydcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIE9wZW5lZFRhYnMoKSB7XHJcbiAgICBjb25zdCBbdGFicywgc2V0VGFic10gPSB1c2VTdGF0ZShpbmZvT3BlbmVkVGFicy5vdGhlclRhYnNOYW1lcyk7XHJcbiAgICB2YXIgeyBtb2RvRGlyZWN0byB9ID0gdXNlU2VsZWN0b3IoKHN0YXRlOiBDYXNvU3RhdGUpID0+ICh7IG1vZG9EaXJlY3RvOiBzdGF0ZS5vcGNpb25lcy5tb2RvRGlyZWN0byB9KSk7XHJcbiAgICBjb25zdCB1cGRhdGVUYWJzU3RhdHVzID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHNldFRhYnMoaW5mb09wZW5lZFRhYnMub3RoZXJUYWJzTmFtZXMpO1xyXG4gICAgfVxyXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbXktdGFicycsIHVwZGF0ZVRhYnNTdGF0dXMpO1xyXG4gICAgICAgIHJldHVybiAoKSA9PiB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignbXktdGFicycsIHVwZGF0ZVRhYnNTdGF0dXMpO1xyXG4gICAgfSwgW10pXHJcbiAgICByZXR1cm4gbW9kb0RpcmVjdG8gPyBudWxsIDogKHRhYnMpID9cclxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRhYi1jb3VudGVyIHRhYi1lcnJvclwiPsKhQVRFTkNJw5NOISBIYXkgbcOhcyBkZSB1bmEgdmVudGFuYSBhYmllcnRhLiBTZSBwdWVkZW4gcGVyZGVyIGRhdG9zOiB7dGFic308L2Rpdj5cclxuICAgICAgICA6XHJcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0YWItY291bnRlclwiPuKclDwvZGl2PlxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gQXBwRG1FbmN1KCkge1xyXG4gICAgdmFyIHsgZm9yUGssIHBhbnRhbGxhQWN0dWFsIH0gPSB1c2VTZWxlY3Rvcigoc3RhdGU6IENhc29TdGF0ZSkgPT4gc3RhdGUub3BjaW9uZXMpO1xyXG4gICAgdmFyIGRhdG9zQnlQYXNzID0gZ2V0RGF0b3NCeVBhc3MoKTtcclxuICAgIGNvbnN0IGRpc3BhdGNoID0gdXNlRGlzcGF0Y2goKTtcclxuXHJcbiAgICAvLyBEZXRlcm1pbmFyIHNpIGxhIHNpbmNyb25pemFjacOzbiBlcyByZXF1ZXJpZGFcclxuICAgIGNvbnN0IHNpbmNyb1JlcXVlcmlkYSA9ICFoYXlEYXRvc0J5UGFzc0FsbWFjZW5hZG9zKClcclxuICAgICAgICB8fCAoaGF5RGF0b3NCeVBhc3NBbG1hY2VuYWRvcygpICYmIGRhdG9zQnlQYXNzLmlkcGVyICE9PSBnZXRGb3JtUmVuZGVyZXIoKS5nZXRJZHBlckxvZ3VlYWRvKCkpO1xyXG5cclxuICAgIC8vIFNpIGxhIHNpbmNybyBlcyByZXF1ZXJpZGEsIGZvcnphciBwYW50YWxsYUFjdHVhbCB2w61hIFJlZHV4XHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIGlmIChzaW5jcm9SZXF1ZXJpZGEgJiYgcGFudGFsbGFBY3R1YWwgIT09ICdzaW5jcm9uaXphY2lvbl9yZXF1ZXJpZGEnKSB7XHJcbiAgICAgICAgICAgIGRpc3BhdGNoKGRpc3BhdGNoZXJzLlNFVF9PUENJT04oeyBvcGNpb246ICdwYW50YWxsYUFjdHVhbCcsIHZhbG9yOiAnc2luY3Jvbml6YWNpb25fcmVxdWVyaWRhJyB9KSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSwgW3NpbmNyb1JlcXVlcmlkYSwgcGFudGFsbGFBY3R1YWwsIGRpc3BhdGNoXSk7XHJcblxyXG4gICAgaWYgKHNpbmNyb1JlcXVlcmlkYSkge1xyXG4gICAgICAgIGNvbnN0IG1lbnNhamUgPSAhaGF5RGF0b3NCeVBhc3NBbG1hY2VuYWRvcygpXHJcbiAgICAgICAgICAgID8gPD4gRGViZSBzaW5jcm9uaXphciBlbCBkaXNwb3NpdGl2byBwYXJhIG9idGVuZXIgdW5hIGhvamEgZGUgcnV0YS48Lz5cclxuICAgICAgICAgICAgOiA8PiBFbCB1c3VhcmlvIGF1dGVudGljYWRvIG5vIGNvaW5jaWRlIGNvbiBlbCB1c3VhcmlvIGFzb2NpYWRvIGFsXHJcbiAgICAgICAgICAgICAgICB0cmFiYWpvIGFsbWFjZW5hZG8gZW4gbGEgdGFibGV0LlxyXG4gICAgICAgICAgICAgICAgPGJyIC8+XHJcbiAgICAgICAgICAgICAgICBEZWJlIHNpbmNyb25pemFyIGFudGVzIGRlIGNvbnRpbnVhci5cclxuICAgICAgICAgICAgPC8+O1xyXG4gICAgICAgIHJldHVybiA8UGFudGFsbGFTaW5jcm9uaXphY2lvbiByZXF1ZXJpZGE9e3RydWV9IG1lbnNhamVSZXF1ZXJpZG89e21lbnNhamV9IC8+O1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChmb3JQayA9PSBudWxsKSB7XHJcbiAgICAgICAgaWYgKHBhbnRhbGxhQWN0dWFsID09PSAnc2luY3Jvbml6YWNpb24nKSB7XHJcbiAgICAgICAgICAgIHJldHVybiA8UGFudGFsbGFTaW5jcm9uaXphY2lvbiAvPlxyXG4gICAgICAgIH0gZWxzZSBpZiAocGFudGFsbGFBY3R1YWwgPT09ICdtb2RvJykge1xyXG4gICAgICAgICAgICByZXR1cm4gPFBhbnRhbGxhQ2FtYmlvTW9kbyAvPlxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gPEhvamFEZVJ1dGFEZXNwbGllZ3VlIC8+XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiA8Rm9ybXVsYXJpb0Rlc3BsaWVndWUgZm9yUGs9e2ZvclBrfSAvPlxyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZGVzcGxlZ2FyRm9ybXVsYXJpb0FjdHVhbChcclxuICAgIGZvcm1SZW5kZXJlcjogRm9ybVJlbmRlcmVyLFxyXG4gICAgb3B0czogeyBmb3JQa1JhaXo/OiBGb3JQa1JhaXogfSA9IHt9XHJcbikge1xyXG4gICAgYXdhaXQgZm9ybVJlbmRlcmVyLmNhcmdhck1vdG9yKCk7XHJcbiAgICBjb25zdCBzdG9yZSA9IGF3YWl0IGNyZWFyU3RvcmVGb3JtdWxhcmlvKG9wdHMpXHJcbiAgICB0cnkge1xyXG4gICAgICAgIGF3YWl0IGxvYWRDU1MoQk9PVFNUUkFQXzVfMV8zX1NSQyk7XHJcbiAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgICB0aHJvdyAoZXJyKVxyXG4gICAgfVxyXG4gICAgUmVhY3RET00ucmVuZGVyKFxyXG4gICAgICAgIDxSZW5kZXJQcmluY2lwYWwgc3RvcmU9e3N0b3JlfSBkaXNwYXRjaGVycz17ZGlzcGF0Y2hlcnN9IG1lbnNhamVSZXRvcm5vPXtvcHRzLmZvclBrUmFpeiA/IFwiVm9sdmVyIGFsIGZvcm11bGFyaW9cIiA6IFwiVm9sdmVyIGEgbGEgaG9qYSBkZSBydXRhXCJ9PlxyXG4gICAgICAgICAgICA8T3BlbmVkVGFicyAvPlxyXG4gICAgICAgICAgICA8QXBwRG1FbmN1IC8+XHJcbiAgICAgICAgPC9SZW5kZXJQcmluY2lwYWw+LFxyXG4gICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtYWluX2xheW91dCcpXHJcbiAgICApXHJcbn1cclxuXHJcbmZ1bmN0aW9uIGxvYWRJbnN0YW5jZSgpIHtcclxuICAgIGlmICh0eXBlb2YgQnJvYWRjYXN0Q2hhbm5lbCA9PT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB2YXIgYmMgPSBuZXcgQnJvYWRjYXN0Q2hhbm5lbCgnY29udGFkb3InKTtcclxuICAgIHZhciBteUlkID0gU3RyaW5nLmZyb21Db2RlUG9pbnQoMTAwICsgTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMTAwMCkpICsgTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMTAwKS8vKyctJytuZXcgRGF0ZSgpLmdldFRpbWUoKTtcclxuICAgIGFsbE9wZW5lZFRhYnNbbXlJZF0gPSAxO1xyXG4gICAgaW5mb09wZW5lZFRhYnMubXlJZCA9IG15SWQ7XHJcbiAgICB2YXIgZXZlbnQgPSBuZXcgRXZlbnQoJ215LXRhYnMnKTtcclxuICAgIGJjLm9ubWVzc2FnZSA9IGZ1bmN0aW9uIChldikge1xyXG4gICAgICAgIGlmIChldi5kYXRhLnF1ZSA9PSAnc295Jykge1xyXG4gICAgICAgICAgICBpZiAoIWFsbE9wZW5lZFRhYnNbZXYuZGF0YS5pZF0pIHtcclxuICAgICAgICAgICAgICAgIGFsbE9wZW5lZFRhYnNbZXYuZGF0YS5pZF0gPSAwO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGFsbE9wZW5lZFRhYnNbZXYuZGF0YS5pZF0rKztcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGV2LmRhdGEucXVlID09ICd1bmxvYWQnKSB7XHJcbiAgICAgICAgICAgIGRlbGV0ZSBhbGxPcGVuZWRUYWJzW2V2LmRhdGEuaWRdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZXYuZGF0YS5xdWUgPT0gJ2xvYWQnKSB7XHJcbiAgICAgICAgICAgIGFsbE9wZW5lZFRhYnNbZXYuZGF0YS5pZF0gPSAxO1xyXG4gICAgICAgICAgICBiYy5wb3N0TWVzc2FnZSh7IHF1ZTogJ3NveScsIGlkOiBteUlkIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpbmZvT3BlbmVkVGFicy5vdGhlclRhYnNOYW1lcyA9IGxpa2VBcihhbGxPcGVuZWRUYWJzKS5maWx0ZXIoKF8sIGlkKSA9PiBpZCAhPSBteUlkKS5qb2luKCcsJyk7XHJcbiAgICAgICAgd2luZG93LmRpc3BhdGNoRXZlbnQoZXZlbnQpO1xyXG4gICAgfTtcclxuICAgIGJjLnBvc3RNZXNzYWdlKHsgcXVlOiAnbG9hZCcsIGlkOiBteUlkIH0pO1xyXG4gICAgd2luZG93LmRpc3BhdGNoRXZlbnQoZXZlbnQpO1xyXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3VubG9hZCcsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBiYy5wb3N0TWVzc2FnZSh7IHF1ZTogJ3VubG9hZCcsIGlkOiBteUlkIH0pO1xyXG4gICAgICAgIHdpbmRvdy5kaXNwYXRjaEV2ZW50KGV2ZW50KTtcclxuICAgIH0pXHJcbiAgICAvL21vc3RyYXJRdWllbmVzU29tb3MoKTtcclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IHNldExpYnJlRGVzcGxpZWd1ZSA9IChsaWJyZTogTGlicmVEZXNwbGllZ3VlVHlwZSkgPT4gTGlicmVEZXNwbGllZ3VlID0gbGlicmVcclxuXHJcbnNldExpYnJlRGVzcGxpZWd1ZSgocHJvcHM6IHtcclxuICAgIGtleTogc3RyaW5nXHJcbiAgICBjYXNpbGxlcm86IExpYnJlXHJcbiAgICBmb3JtdWxhcmlvOiBGb3JtdWxhcmlvXHJcbiAgICBmb3JQazogRm9yUGtcclxufSkgPT4gPGRpdiBrZXk9e3Byb3BzLmtleX0gaWQ9e3Byb3BzLmNhc2lsbGVyby5pZF9jYXNpbGxlcm99PmVzdGUgY2FzaWxsZXJvIGRlYmUgcmVkZWZpbmlyc2UgZW4gbGEgQVBQIGZpbmFsIHkgc3UgdXNvIGVzIGV4Y2x1c2l2byBkZWwgw6FyZWEgaW5mb3Jtw6F0aWNhPC9kaXY+KVxyXG5cclxuc2V0Q2FsY3VsYXJWYXJpYWJsZXMoKHJlc3B1ZXN0YXNSYWl6OiBSZXNwdWVzdGFzUmFpeiwgZm9yUGs6IEZvclBrKSA9PiB7XHJcbiAgICB0eXBlIENvbmZpZ1BhZHJlID0ge1xyXG4gICAgICAgIHVhUGVyc29uYXM6IElkVW5pZGFkQW5hbGlzaXNcclxuICAgICAgICB2YXJTZXhvUGVyc29uYTogSWRWYXJpYWJsZVxyXG4gICAgICAgIHZhck5vbWJyZVBlcnNvbmE6IElkVmFyaWFibGVcclxuICAgICAgICB2YXJMb3NOb21icmVzOiBJZFZhcmlhYmxlXHJcbiAgICB9XHJcbiAgICB2YXIgZXN0cnVjdHVyYSA9IGdldEVzdHJ1Y3R1cmEoKTtcclxuICAgIHZhciBhdXRvQ2FyZ2FyUGVyc29uYXMgPSAoY29uZmlnUGFkcmU6IENvbmZpZ1BhZHJlLCB1YVBhZHJlUGVyc29uYXM6IElkVW5pZGFkQW5hbGlzaXMsIGVzdHJ1Y3R1cmE6IEVzdHJ1Y3R1cmEpID0+IHtcclxuICAgICAgICB2YXIgbGVlck5vbWJyZXMgPSAocmVzcHVlc3Rhc1VBUGFkcmU6IFJlc3B1ZXN0YXMsIGNvbmZpZ1BhZHJlOiBDb25maWdQYWRyZSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoIXJlc3B1ZXN0YXNVQVBhZHJlW2NvbmZpZ1BhZHJlLnVhUGVyc29uYXNdIHx8IGVtcHR5KHJlc3B1ZXN0YXNVQVBhZHJlW2NvbmZpZ1BhZHJlLnVhUGVyc29uYXNdKSB8fCByZXNwdWVzdGFzVUFQYWRyZVtjb25maWdQYWRyZS51YVBlcnNvbmFzXVswXVtjb25maWdQYWRyZS52YXJTZXhvUGVyc29uYV0gPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGxvc05vbWJyZXMgPSByZXNwdWVzdGFzVUFQYWRyZVtjb25maWdQYWRyZS52YXJMb3NOb21icmVzXSBhcyBzdHJpbmdcclxuICAgICAgICAgICAgICAgIGlmIChsb3NOb21icmVzICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIXJlc3B1ZXN0YXNVQVBhZHJlW2NvbmZpZ1BhZHJlLnVhUGVyc29uYXNdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNVQVBhZHJlW2NvbmZpZ1BhZHJlLnVhUGVyc29uYXNdID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGxvc05vbWJyZXNcclxuICAgICAgICAgICAgICAgICAgICAgICAgLnNwbGl0KCcsJylcclxuICAgICAgICAgICAgICAgICAgICAgICAgLmZpbHRlcigobm9tYnJlOiBzdHJpbmcpID0+IG5vbWJyZS50cmltKCkubGVuZ3RoID4gMClcclxuICAgICAgICAgICAgICAgICAgICAgICAgLmZvckVhY2goKG5vbWJyZTogc3RyaW5nLCBpOiBudW1iZXIpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNVQVBhZHJlW2NvbmZpZ1BhZHJlLnVhUGVyc29uYXNdW2ldID0gcmVzcHVlc3Rhc1VBUGFkcmVbY29uZmlnUGFkcmUudWFQZXJzb25hc11baV0gfHwge307XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwdWVzdGFzVUFQYWRyZVtjb25maWdQYWRyZS51YVBlcnNvbmFzXVtpXVtjb25maWdQYWRyZS52YXJOb21icmVQZXJzb25hXSA9IG5vbWJyZS50cmltKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGVzdHJ1Y3R1cmEudW5pZGFkZXNfYW5hbGlzaXNbdWFQYWRyZVBlcnNvbmFzXSkge1xyXG4gICAgICAgICAgICBpZiAodWFQYWRyZVBlcnNvbmFzID09ICd2aXZpZW5kYXMnKSB7XHJcbiAgICAgICAgICAgICAgICBsZWVyTm9tYnJlcyhyZXNwdWVzdGFzUmFpeiwgY29uZmlnUGFkcmUpXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKHZhciByZXNwdWVzdGFzVUFQYWRyZSBvZiBpdGVyYXRvcihyZXNwdWVzdGFzUmFpelt1YVBhZHJlUGVyc29uYXNdID8/IFtdKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxlZXJOb21icmVzKHJlc3B1ZXN0YXNVQVBhZHJlLCBjb25maWdQYWRyZSlcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHZhciB1YXNJdGVyYXI6IFBhcnRpYWw8e1xyXG4gICAgICAgIFtrZXkgaW4gSWRVbmlkYWRBbmFsaXNpc106IENvbmZpZ1BhZHJlXHJcbiAgICB9PjtcclxuICAgIHZhciBjb25maWdFbmN1OiBDb25maWdQYWRyZSA9IHtcclxuICAgICAgICB1YVBlcnNvbmFzOiAncGVyc29uYXMnLFxyXG4gICAgICAgIHZhclNleG9QZXJzb25hOiAnc2V4bycgYXMgSWRWYXJpYWJsZSxcclxuICAgICAgICB2YXJOb21icmVQZXJzb25hOiAnbm9tYnJlJyBhcyBJZFZhcmlhYmxlLFxyXG4gICAgICAgIHZhckxvc05vbWJyZXM6IFwibG9zX25vbWJyZXNcIiBhcyBJZFZhcmlhYmxlXHJcbiAgICB9O1xyXG4gICAgdmFyIGNvbmZpZ1N1cGU6IENvbmZpZ1BhZHJlID0ge1xyXG4gICAgICAgIHVhUGVyc29uYXM6ICdwZXJzb25hc19zdXAnIGFzIElkVW5pZGFkQW5hbGlzaXMsXHJcbiAgICAgICAgdmFyU2V4b1BlcnNvbmE6ICdzZXhvX3N1cCcgYXMgSWRWYXJpYWJsZSxcclxuICAgICAgICB2YXJOb21icmVQZXJzb25hOiAnbm9tYnJlX3N1cCcgYXMgSWRWYXJpYWJsZSxcclxuICAgICAgICB2YXJMb3NOb21icmVzOiBcIm5vbWJyZXNfY29tcG9uZW50ZXNfc3VwXCIgYXMgSWRWYXJpYWJsZVxyXG4gICAgfTtcclxuXHJcbiAgICBpZiAoZXN0cnVjdHVyYS5jb25SZWFIb2dhcikge1xyXG4gICAgICAgIHVhc0l0ZXJhciA9IHtcclxuICAgICAgICAgICAgaG9nYXJlczogY29uZmlnRW5jdSxcclxuICAgICAgICAgICAgW1wiaG9nYXJlc19zdXBcIiBhcyBJZFVuaWRhZEFuYWxpc2lzXTogY29uZmlnU3VwZVxyXG4gICAgICAgIH1cclxuICAgICAgICBsaWtlQXIodWFzSXRlcmFyKS5mb3JFYWNoKChjb25maWdQYWRyZSwgdWFQYWRyZSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoY29uZmlnUGFkcmUpIHtcclxuICAgICAgICAgICAgICAgIGF1dG9DYXJnYXJQZXJzb25hcyhjb25maWdQYWRyZSwgdWFQYWRyZSBhcyBJZFVuaWRhZEFuYWxpc2lzLCBlc3RydWN0dXJhKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdmFyIGNvbmZpZ1BhZHJlczogQ29uZmlnUGFkcmVbXSA9IFtjb25maWdFbmN1LCBjb25maWdTdXBlXTtcclxuICAgICAgICBjb25maWdQYWRyZXMuZm9yRWFjaCgoY29uZmlnUGFkcmUpID0+IHtcclxuICAgICAgICAgICAgYXV0b0NhcmdhclBlcnNvbmFzKGNvbmZpZ1BhZHJlLCAndml2aWVuZGFzJywgZXN0cnVjdHVyYSlcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG4gICAgcmVzcHVlc3Rhc1JhaXoudmRvbWluaW8gPSBnZXREYXRvc0J5UGFzcygpLmluZm9ybWFjaW9uSGRyW2ZvclBrW2VzdHJ1Y3R1cmEucGtBZ3JlZ2FkYVVhUHBhbF1dLnRlbS5kb21pbmlvO1xyXG4gICAgLy9UT0RPOiBNRUpPUkFSIEVOIEFMR1VOIE1PTUVOVE8gRUwgQk9UT04gTElTVE9cclxuICAgIC8vbGV0IHRvdGFsSCA9IHJlc3B1ZXN0YXNSYWl6Wyd0b3RhbF9oJyBhcyBJZFZhcmlhYmxlXTtcclxuICAgIC8vcmVzcHVlc3Rhc1JhaXpbJyRCLkY6UzEnIGFzIElkVmFyaWFibGVdID0gKHJlc3B1ZXN0YXNSYWl6Wydob2dhcmVzJ10gfHwgW10pLmxlbmd0aCA9PSB0b3RhbEggPyAnb2snIDogbnVsbDtcclxuICAgIC8vbGV0IHRvdGFsSHN1cCA9IHJlc3B1ZXN0YXNSYWl6Wyd0b3RhbF9oX3N1cCcgYXMgSWRWYXJpYWJsZV07XHJcbiAgICAvL3Jlc3B1ZXN0YXNSYWl6WyckQi5GOlMxX1NVUCcgYXMgSWRWYXJpYWJsZV0gPSAocmVzcHVlc3Rhc1JhaXpbJ2hvZ2FyZXNfc3VwJyBhcyBJZFVuaWRhZEFuYWxpc2lzXSB8fCBbXSkubGVuZ3RoID09IHRvdGFsSHN1cCA/ICdvaycgOiBudWxsO1xyXG59KVxyXG5cclxud2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBmdW5jdGlvbiAoKSB7XHJcbiAgICBsb2FkSW5zdGFuY2UoKVxyXG59KVxyXG4vL0ZJTiBDT05UUk9MIFBFU1RBw5FBU1xyXG5cclxuZnVuY3Rpb24gbG9hZENTUyhjc3NVUkw6IHN0cmluZywgaWQ/OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgdmFyIGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdsaW5rJyk7XHJcbiAgICAgICAgbGluay5yZWwgPSAnc3R5bGVzaGVldCc7XHJcbiAgICAgICAgbGluay5ocmVmID0gY3NzVVJMO1xyXG4gICAgICAgIGxpbmsuaWQgPSBpZCB8fCBjc3NVUkw7XHJcbiAgICAgICAgZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChsaW5rKTtcclxuICAgICAgICBsaW5rLm9ubG9hZCA9ICgpID0+IHtcclxuICAgICAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgdHJhZSAke2Nzc1VSTH1gKTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIGxpbmsub25lcnJvciA9IChlcnIpID0+IHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coJ2Vycm9yIGNhcmdhbmRvIGVsIGVzdGlsbycsIGVycilcclxuICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihgcHJvYmxlbWEgY2FyZ2FuZG8gZXN0aWxvICR7Y3NzVVJMfWApKVxyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG59XHJcblxyXG5mdW5jdGlvbiByZW1vdmVDU1NCeUlkKGlkOiBzdHJpbmcpIHtcclxuICAgIHZhciBsaW5rTm9kZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTtcclxuICAgIGxpbmtOb2RlPy5wYXJlbnROb2RlPy5yZW1vdmVDaGlsZChsaW5rTm9kZSk7XHJcbn1cclxuXHJcbmNvbnN0IEJPT1RTVFJBUF81XzFfM19TUkMgPSAnY3NzL2Jvb3RzdHJhcC5taW4uY3NzJzsiXX0=
2049
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVuZGVyLWZvcm11bGFyaW8uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdW5sb2dnZWQvcmVuZGVyLWZvcm11bGFyaW8udHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBZ0hBLHNDQU9DO0lBeUpELDhCQTZCQztJQWdzREQsNEJBS0M7SUFpTUQsb0RBU0M7SUFFRCxvR0FPQztJQUVELG9DQWVDO0lBZUQsMENBcUJDO0lBRUQsZ0RBMEJDO0lBRUQsd0RBOEdDO0lBdUJELDBEQW9GQztJQVFELHdEQXlEQztJQUVELGdEQW9HQztJQUtELGtFQVdDO0lBa0NELGtDQUlDO0lBVUQsZ0NBY0M7SUFFRCw4QkFxQ0M7SUFFRCw4REFrQkM7SUFqeUZELCtCQUErQjtJQUMvQixzQ0FBc0M7SUFDdEMscURBUTBCO0lBQzFCLG1DQWdCaUI7SUFDakIsMkRBaUI0QjtJQUM1Qix5REFHNEI7SUFDNUIsaUNBQTRDO0lBQzVDLDZDQUF1RDtJQUN2RCxxQ0FBMkM7SUFDM0MsK0NBQXlEO0lBQ3pELDJDQUF3QztJQUV4Qyw0Q0FTdUI7SUFHdkIsMkRBYzRCO0lBRTVCLDJDQUEyQztJQUMzQyxtREFBc0Y7SUFFdEYsaUVBQWlFO0lBQ2pFLHdFQUF3RTtJQUN4RSxJQUFBLG9DQUFvQixFQUFDLFNBQWUsK0JBQStCOztZQUMvRCxJQUFJLFlBQVksR0FBRyxJQUFBLCtCQUFlLEdBQUUsQ0FBQztZQUNyQyxNQUFNLFVBQVUsR0FBRyxNQUFNLFlBQVksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN2RCxNQUFNLEtBQUssR0FBRyxNQUFNLFlBQVksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUM3QyxJQUFHLFVBQVUsSUFBSSxLQUFLLEVBQUMsQ0FBQztnQkFDcEIsSUFBQSxpQ0FBYSxFQUFDLFVBQVUsQ0FBQyxDQUFDO2dCQUMxQixJQUFBLGtDQUFjLEVBQUMsS0FBSyxDQUFDLENBQUM7WUFDMUIsQ0FB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QUFDLEdBQUcsR0FBRyxZQUFZLENBQUM7WUFDeEIsSUFBSSxDQUFDLElBQUksR0FBRyxNQUFNLENBQUM7WUFDbkIsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksTUFBTSxDQUFDO1lBQ3ZCLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2hDLElBQUksQ0FBQyxNQUFNLEdBQUcsR0FBRyxFQUFFO2dCQUNmLE9BQU8sRUFBRSxDQUFDO2dCQUNWLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxNQUFNLEVBQUUsQ0FBQyxDQUFDO1lBQ2xDLENBQUMsQ0FBQztZQUNGLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxHQUFHLEVBQUUsRUFBRTtnQkFDbkIsT0FBTyxDQUFDLEdBQUcsQ0FBQywwQkFBMEIsRUFBRSxHQUFHLENBQUMsQ0FBQTtnQkFDNUMsTUFBTSxDQUFDLElBQUksS0FBSyxDQUFDLDRCQUE0QixNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUE7WUFDM0QsQ0FBQyxDQUFBO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsU0FBUyxhQUFhLENBQUMsRUFBVTs7UUFDN0IsSUFBSSxRQUFRLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUMzQyxNQUFBLFFBQVEsYUFBUixRQUFRLHVCQUFSLFFBQVEsQ0FBRSxVQUFVLDBDQUFFLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBRUQsTUFBTSxtQkFBbUIsR0FBRyx1QkFBdUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xyXG5pbXBvcnQgKiBhcyBSZWFjdERPTSBmcm9tIFwicmVhY3QtZG9tXCI7XHJcbmltcG9ydCB7XHJcbiAgICBSZW5kZXJQcmluY2lwYWwsXHJcbiAgICBhZGFwdGFyVGlwb1ZhckNhc2lsbGVybyxcclxuICAgIElDT04sXHJcbiAgICBzY3JvbGxUb1RvcCxcclxuICAgIG1hdGVyaWFsSW9JY29uc1N2Z1BhdGgsXHJcbiAgICB1c2VPbmxpbmVTdGF0dXMsXHJcbiAgICBSZW5kZXJpemFkb3JKU09OLFxyXG59IGZyb20gXCIuL3JlbmRlci1nZW5lcmFsXCI7XHJcbmltcG9ydCB7XHJcbiAgICBCbG9xdWUsIEJvdG9uRm9ybXVsYXJpbyxcclxuICAgIENhc2lsbGVyb0Jhc2UsIENhc29TdGF0ZSwgQ29uanVudG9QcmVndW50YXMsIENvbnNpc3RlbmNpYSxcclxuICAgIEVzdGFkb0NhcmdhLCBGaWx0cm8sIEZvclBrLCBGb3JQa1JhaXosIEZvcm11bGFyaW8sXHJcbiAgICBJZEZvcm11bGFyaW8sIElkUHJlZ3VudGEsIElkVGFyZWEsIElkVmFyaWFibGUsIEluZm9Gb3JtdWxhcmlvLFxyXG4gICAgTW9kb0Rlc3BsaWVndWUsXHJcbiAgICBPcGNpb24sIE9wY2lvbk11bHRpcGxlLCBQbGFpbkZvclBrLFxyXG4gICAgUHJlZ3VudGEsIFByZWd1bnRhQ29uT3BjaW9uZXMsIFByZWd1bnRhU2ltcGxlLFxyXG4gICAgUmVzcHVlc3RhcywgUmVzcHVlc3RhTGFzVUEsIFJlc3B1ZXN0YXNSYWl6LCBWYWxvciwgVEVNLCBJZENhcmdhLCBDYXJnYSwgSWRGaW4sIElkVW5pZGFkQW5hbGlzaXMsXHJcbiAgICB0b1BsYWluRm9yUGssXHJcbiAgICBJZENhc2lsbGVybyxcclxuICAgIFByZWd1bnRhQ29uU2lObyxcclxuICAgIFRleHRvLCBFc3RydWN0dXJhLCBJbmZvcm1hY2lvbkhkciwgQ29uZmlndXJhY2lvblNvcnRlb0Zvcm11bGFyaW8sIFJlc3VtZW5Fc3RhZG8sIElkT3BlcmF0aXZvLCBJZEVuYywgTGlicmUsXHJcbiAgICBpdGVyYXRvciwgZW1wdHksIENvbmZpZ3VyYWNpb25IYWJpbGl0YXJCb3RvbkZvcm11bGFyaW8sXHJcbiAgICBQTWF0cml6LFxyXG4gICAgTW9kb0RNLFxyXG59IGZyb20gXCIuL3RpcG9zXCI7XHJcbmltcG9ydCB7XHJcbiAgICBhY2Npb25fYWJyaXJfZm9ybXVsYXJpbyxcclxuICAgIGFjY2lvbl9ib3JyYXJfZm9ybXVsYXJpbyxcclxuICAgIGNhbGN1bGFyQWN0dWFsQkYsXHJcbiAgICBjYWxjdWxhckRpc2FibGVkQkYsXHJcbiAgICBjYWxjdWxhclBlcm1pdGVCb3JyYXJCRixcclxuICAgIGNhbGN1bGFyUmVzdW1lblZpdmllbmRhLFxyXG4gICAgY3JlYXJFbmN1ZXN0YSxcclxuICAgIGhheURhdG9zQnlQYXNzQWxtYWNlbmFkb3MsXHJcbiAgICBnZXREYXRvc0J5UGFzcyxcclxuICAgIGdldEZvcm11bGFyaW9zRm9yVmFsdWVQa1JhaXosXHJcbiAgICBnZXRNYWluRm9ybUZvclZpdmllbmRhLFxyXG4gICAgaW50ZW50YXJCYWNrdXAsXHJcbiAgICByZXNwdWVzdGFzRm9yUGssXHJcbiAgICBzZXRDYWxjdWxhclZhcmlhYmxlcyxcclxuICAgIHNldERhdG9zQnlQYXNzLFxyXG4gICAgc2V0RXN0cnVjdHVyYVxyXG59IGZyb20gXCIuL2J5cGFzcy1mb3JtdWxhcmlvXCJcclxuaW1wb3J0IHtcclxuICAgIGNyZWFyU3RvcmVGb3JtdWxhcmlvLCBkaXNwYXRjaGVycyxcclxuICAgIGdvdG9Db25zaXN0aXIsXHJcbn0gZnJvbSBcIi4vcmVkdXgtZm9ybXVsYXJpb1wiO1xyXG5pbXBvcnQgeyB1c2VTdGF0ZSwgdXNlRWZmZWN0IH0gZnJvbSBcInJlYWN0XCI7XHJcbmltcG9ydCB7IHVzZVNlbGVjdG9yLCB1c2VEaXNwYXRjaCB9IGZyb20gXCJyZWFjdC1yZWR1eFwiO1xyXG5pbXBvcnQgeyBzdHJpY3QgYXMgbGlrZUFyIH0gZnJvbSBcImxpa2UtYXJcIjtcclxuaW1wb3J0IHsgc2xlZXAsIGNvYWxlc2NlLCBkYXRldGltZSB9IGZyb20gXCJiZXN0LWdsb2JhbHNcIjtcclxuaW1wb3J0IHsgdW5leHBlY3RlZCB9IGZyb20gXCJjYXN0LWVycm9yXCI7XHJcblxyXG5pbXBvcnQge1xyXG4gICAgQXBwQmFyLCBCdXR0b25Hcm91cCwgQ2hlY2tib3gsXHJcbiAgICBEaWFsb2csIERpYWxvZ0FjdGlvbnMsIERpYWxvZ0NvbnRlbnQsIERpYWxvZ0NvbnRlbnRUZXh0LFxyXG4gICAgRGlhbG9nVGl0bGUsIERpdmlkZXIsIEZhYixcclxuICAgIEljb24sXHJcbiAgICBMaXN0SXRlbUljb24sXHJcbiAgICBMaXN0SXRlbVRleHQsXHJcbiAgICBNZW51LCBNZW51SXRlbSwgUGFwZXIsIFBvcG92ZXIsXHJcbiAgICBUYWJsZSwgVGFibGVCb2R5LCBUYWJsZUNlbGwsIFRhYmxlSGVhZCwgVGFibGVSb3csIFRvb2xiYXJcclxufSBmcm9tIFwiQG11aS9tYXRlcmlhbFwiO1xyXG5pbXBvcnQgeyBFc3RhZG9WYXJpYWJsZSwgRm9ybVN0cnVjdHVyZVN0YXRlIH0gZnJvbSBcInJvdy12YWxpZGF0b3JcIjtcclxuXHJcbmltcG9ydCB7XHJcbiAgICByZWdpc3RyYXJFbGVtZW50bywgc2V0QXR0ckRpc3RpbnRvLCBzZXRWYWxvckRpc3RpbnRvLCBkaXNwYXRjaEJ5UGFzcyxcclxuICAgIGdldERpcnR5LCBnZXRGZWVkYmFja1Jvd1ZhbGlkYXRvcixcclxuICAgIGdldEZ1bmNpb25IYWJpbGl0YXIsXHJcbiAgICBnZXRFc3RydWN0dXJhLFxyXG4gICAgZGVmT3BlcmF0aXZvLFxyXG4gICAgdm9sY2Fkb0luaWNpYWxFbGVtZW50b3NSZWdpc3RyYWRvcyxcclxuICAgIG51bWJlck9yU3RyaW5nSW5jSWZBcnJheSxcclxuICAgIGNhbGN1bGFyRWxlbWVudG9FbmZvY2FkbyxcclxuICAgIGFjY2lvbl9yZWdpc3RyYXJfcmVzcHVlc3RhLFxyXG4gICAgYWNjaW9uX2lkX3ByZWd1bnRhLFxyXG4gICAgYWNjaW9uX2FncmVnYXJfZm9ybXVsYXJpbyxcclxuICAgIE5PX0NBTUJJQVJfX1ZFUklGSUNBUl9TSV9FU19ORUNFU0FSSU8sXHJcbiAgICBOT19DQU1CSUFSX19TT0xPX1RSQUVSX1NUQVRVU1xyXG59IGZyb20gXCIuL2J5cGFzcy1mb3JtdWxhcmlvXCJcclxuXHJcbmltcG9ydCB7IGh0bWwsIEh0bWxUYWcgfSBmcm9tIFwianMtdG8taHRtbFwiO1xyXG5pbXBvcnQgeyBGb3JtUmVuZGVyZXIsIGdldEZvcm1SZW5kZXJlciwgcmVnaXN0cmFyQ2FyZ2FyTW90b3IgfSBmcm9tIFwiLi9yZW5kZXItY29uZmlnXCI7XHJcblxyXG4vLyBSZWdpc3RyYSBsYSBpbXBsZW1lbnRhY2nDs24gZGUgY2FyZ2FyTW90b3IgYWwgY2FyZ2FyIGVsIG3Ds2R1bG8uXHJcbi8vIEVzdG8gZXZpdGEgbGEgZGVwZW5kZW5jaWEgY2lyY3VsYXIgcmVuZGVyLWNvbmZpZyDihpAgYnlwYXNzLWZvcm11bGFyaW8uXHJcbnJlZ2lzdHJhckNhcmdhck1vdG9yKGFzeW5jIGZ1bmN0aW9uIGNhcmdhckVzdHJ1Y3R1cmFZRGF0b3NFbk1lbW9yaWEoKSB7XHJcbiAgICB2YXIgZm9ybVJlbmRlcmVyID0gZ2V0Rm9ybVJlbmRlcmVyKCk7XHJcbiAgICBjb25zdCBlc3RydWN0dXJhID0gYXdhaXQgZm9ybVJlbmRlcmVyLmxlZXJFc3RydWN0dXJhKCk7XHJcbiAgICBjb25zdCBkYXRvcyA9IGF3YWl0IGZvcm1SZW5kZXJlci5sZWVyRGF0b3MoKTtcclxuICAgIGlmKGVzdHJ1Y3R1cmEgJiYgZGF0b3Mpe1xyXG4gICAgICAgIHNldEVzdHJ1Y3R1cmEoZXN0cnVjdHVyYSk7XHJcbiAgICAgICAgc2V0RGF0b3NCeVBhc3MoZGF0b3MpO1xyXG4gICAgfVxyXG59KTtcclxuXHJcbmNvbnN0IERFTEFZX1NDUk9MTF8zID0gNTA7XHJcblxyXG5mdW5jdGlvbiBicmVha2VhYmxlVGV4dCh0ZXh0OiBzdHJpbmcgfCBudWxsKTogc3RyaW5nIHwgbnVsbDtcclxuZnVuY3Rpb24gYnJlYWtlYWJsZVRleHQodGV4dDogc3RyaW5nIHwgbnVsbCwgZGljY2lvbmFyaW8/OiB7IFtjbGF2ZTogc3RyaW5nXTogUmVhY3QuUmVhY3ROb2RlIH0pIHtcclxuICAgIGlmICh0eXBlb2YgdGV4dCAhPSBcInN0cmluZ1wiKSByZXR1cm4gbnVsbDtcclxuICAgIHRleHQgPSB0ZXh0LnJlcGxhY2UoL1xcLy9nLCBcIi9cXHUyMDYzXCIpLnJlcGxhY2UoL1xcL1xcdTIwNjMoXFx3KVxcYi9nLCAnLyQxJyk7XHJcbiAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKC9fX18qL2csICh0b2RvKSA9PiBgWyR7dG9kb31dYCkucmVwbGFjZSgvXFxAXFx3K1xcQC9nLCAodG9kbykgPT4gYFske3RvZG99XWApO1xyXG4gICAgaWYgKCFkaWNjaW9uYXJpbyB8fCB0cnVlKSByZXR1cm4gdGV4dDtcclxuICAgIC8qXHJcbiAgICByZXR1cm4gPHNwYW4+e3BhcnRlcy5tYXAoKHBhcnRlOnN0cmluZywgaTpudW1iZXIpID0+IDxzcGFuIHN0eWxlPXtpJTI9PTE/e3RleHREZWNvcmF0aW9uOlwidW5kZXJsaW5lXCJ9Ont9fT4ge3BhcnRlK1wiIFwifSA8L3NwYW4+KX08L3NwYW4+XHJcbiAgICAqL1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0QkZWYXJOYW1lcyhzYWx0bzogc3RyaW5nIHwgbnVsbCkge1xyXG4gICAgY29uc3QgYXJtb05vbVNhbHRvID0gc2FsdG8/LnN1YnN0cmluZygwLCAyKSA9PSAnRjonID8gc2FsdG8uc2xpY2UoMikgOiBzYWx0bztcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgbGlzdG86ICckQi5GOicgKyBhcm1vTm9tU2FsdG8gYXMgSWRWYXJpYWJsZSxcclxuICAgICAgICBhZ3JlZ2FyOiAnJEIuRjonICsgYXJtb05vbVNhbHRvICsgJ19hZ3JlZ2FyJyBhcyBJZFZhcmlhYmxlLFxyXG4gICAgICAgIGlkRm9ybXVsYXJpbzogJ0Y6JyArIGFybW9Ob21TYWx0byBhcyBJZEZvcm11bGFyaW9cclxuICAgIH07XHJcbn1cclxuXHJcbmNvbnN0IFZFUl9ET01JTklPID0gZmFsc2U7IC8vIGVsIGVuY3Vlc3RhZG9yIG5vIG5lY2VzaXRhIHZlciBlbCBkb21pbmlvIGVuIGNhZGEgZW5jdWVzdGEgcG9ycXVlIGVsIGRvbWluaW8gZGVwZW5kZSBkZWwgw6FyZWEgeSBzZSBkZWR1Y2UgZGVsIHByaW1lciBkw61naXRvIGRlbCBuw7ptZXJvIGRlIGVuY3Vlc3RhXHJcbi8vIG5vIHBvbmVyIFZFUl9ET01JTklPIGVuIHRydWUsIGNhbWJpYXIgcG9yIHVuYSB2YXJpYWJsZSBxdWUgc2UgZmlqZSBzaSBlbCBETSBlc3TDoSBlbiBtb2RvIHBydWViYSBvIGVuIG1vZG8gXCJkaXNlw7FvIGNvbmNlcHR1YWxcIlxyXG5cclxuY29uc3QgSURfQk9UT05fVk9MVkVSX0hEUiA9ICdib3Rvbi12b2x2ZXItaGRyJztcclxuY29uc3QgSURfQk9UT05fQ0VSUkFSID0gJ2JvdG9uLWNlcnJhci1lbmN1ZXN0YSc7XHJcblxyXG52YXIgZGViZVNhbHRhcjogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxud2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCAoKSA9PiB7XHJcbiAgICAvKlxyXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCAoZXY6S2V5Ym9hcmRFdmVudCk9PntcclxuICAgICAgICBkZWJlU2FsdGFyID0gZXYua2V5ID09ICdFbnRlcicgfHwgZXYua2V5Q29kZSA9PSAxMztcclxuICAgIH0pXHJcbiAgICAqL1xyXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4ge1xyXG4gICAgICAgIGRlYmVTYWx0YXIgPSBmYWxzZTtcclxuICAgIH0pXHJcbn0pXHJcblxyXG4vLyAvKlxyXG5cclxudHlwZSBDb21tb25BdHRyaWJ1dGVzID0geyBjbGFzc05hbWU/OiBzdHJpbmcsIHN0eWxlPzogUmVhY3QuQ1NTUHJvcGVydGllcywgaWQ/OiBzdHJpbmcsIHRhYkluZGV4PzogbnVtYmVyIH0gLy8gQ1NTUHJvcGVydGllc1xyXG50eXBlIENvbG9yVmFsdWVzID0gJ3ByaW1hcnknIHwgJ3NlY29uZGFyeScgfCAnZGVmYXVsdCcgfCAnaW5oZXJpdCcgfCAnc3VjY2VzcydcclxuXHJcbmV4cG9ydCB0eXBlIExpYnJlRGVzcGxpZWd1ZVR5cGUgPSAocHJvcHM6IHtcclxuICAgIGtleTogc3RyaW5nXHJcbiAgICBjYXNpbGxlcm86IExpYnJlXHJcbiAgICBmb3JtdWxhcmlvOiBGb3JtdWxhcmlvXHJcbiAgICBmb3JQazogRm9yUGtcclxufSkgPT4gSlNYLkVsZW1lbnQ7XHJcblxyXG52YXIgTGlicmVEZXNwbGllZ3VlOiBMaWJyZURlc3BsaWVndWVUeXBlXHJcblxyXG5leHBvcnQgY29uc3QgQnV0dG9uID0gKHsgdmFyaWFudCwgb25DbGljaywgZGlzYWJsZWQsIGNoaWxkcmVuLCBjbGFzc05hbWUsIGNvbG9yLCBzaXplLFxyXG4gICAgZGlzYWJsZUVsZXZhdGlvbiwgZGlzYWJsZUZvY3VzUmlwcGxlLCBkaXNhYmxlUmlwcGxlLCB0eXBlLFxyXG4gICAgLi4ub3RoZXJcclxufToge1xyXG4gICAgdmFyaWFudD86IHN0cmluZyxcclxuICAgIGNvbG9yPzogQ29sb3JWYWx1ZXMsXHJcbiAgICBvbkNsaWNrPzogUmVhY3QuTW91c2VFdmVudEhhbmRsZXI8SFRNTEJ1dHRvbkVsZW1lbnQ+LCAvLyAgKGV2ZW50Ok1vdXNlRXZlbnQvKiA8SFRNTEJ1dHRvbkVsZW1lbnQsIE1vdXNlRXZlbnQ+Ki8pPT52b2lkLFxyXG4gICAgZGlzYWJsZWQ/OiBib29sZWFuXHJcbiAgICBjaGlsZHJlbjogYW55LFxyXG4gICAgY2xhc3NOYW1lPzogc3RyaW5nLFxyXG4gICAgc2l6ZT86ICdzbWFsbCcsXHJcbiAgICB0eXBlPzogJ2J1dHRvbicgfCAnc3VibWl0JyB8ICdyZXNldCcsXHJcbiAgICBkaXNhYmxlRWxldmF0aW9uPzogYW55LCBkaXNhYmxlRm9jdXNSaXBwbGU/OiBhbnksIGRpc2FibGVSaXBwbGU/OiBhbnksXHJcbn0gJiBDb21tb25BdHRyaWJ1dGVzKSA9PiA8YnV0dG9uXHJcbiAgICB7Li4ub3RoZXJ9XHJcbiAgICBjbGFzc05hbWU9e2BidG4gYnRuJHt2YXJpYW50ID09ICdjb250YWluZWQnID8gJycgOiAnLScgKyAodmFyaWFudCA9PSAnb3V0bGluZWQnID8gJ291dGxpbmUnIDogdmFyaWFudCl9LSR7KGNvbG9yID09ICdkZWZhdWx0JyB8fCBjb2xvciA9PSAnaW5oZXJpdCcgPyAnc2Vjb25kYXJ5JyA6IGNvbG9yID09ICdzZWNvbmRhcnknID8gJ2RhbmdlcicgOiBjb2xvcikgfHwgJ3NlY29uZGFyeSd9ICR7Y2xhc3NOYW1lIHx8ICcnfSAke3NpemUgPT0gJ3NtYWxsJyA/ICdidG4tc20nIDogJyd9YH1cclxuICAgIGRpc2FibGVkPXtkaXNhYmxlZH1cclxuICAgIHR5cGU9e3R5cGV9XHJcbiAgICBvbkNsaWNrPXtvbkNsaWNrfVxyXG4+e2NoaWxkcmVufTwvYnV0dG9uPjtcclxuXHJcbmNvbnN0IHN0eWxlVG9Dc3MgPSAoc3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgfCBzdHJpbmcgfCB1bmRlZmluZWQpOiBzdHJpbmcgfCB1bmRlZmluZWQgPT4ge1xyXG4gICAgaWYgKHR5cGVvZiBzdHlsZSA9PT0gJ3N0cmluZycgfHwgc3R5bGUgPT0gbnVsbCkgcmV0dXJuIHN0eWxlO1xyXG4gICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHN0eWxlKS5tYXAoKFtrLCB2XSkgPT5cclxuICAgICAgICBgJHtrLnJlcGxhY2UoL1tBLVpdL2csIG0gPT4gXCItXCIgKyBtLnRvTG93ZXJDYXNlKCkpfToke3Z9YFxyXG4gICAgKS5qb2luKCc7Jyk7XHJcbn1cclxuXHJcbmNvbnN0IEJ1dHRvbjIgPSAoeyB2YXJpYW50LCBvbkNsaWNrLCBkaXNhYmxlZCwgY2hpbGRyZW4sIGNsYXNzTmFtZSwgY29sb3IsIHNpemUsIHN0eWxlLCAuLi5vdGhlciB9OiB7XHJcbiAgICB2YXJpYW50Pzogc3RyaW5nLFxyXG4gICAgY29sb3I/OiBDb2xvclZhbHVlcyxcclxuICAgIG9uQ2xpY2s/OiAoKSA9PiB2b2lkLFxyXG4gICAgZGlzYWJsZWQ/OiBib29sZWFuXHJcbiAgICBjaGlsZHJlbjogYW55LFxyXG4gICAgY2xhc3NOYW1lPzogc3RyaW5nLFxyXG4gICAgc2l6ZT86ICdzbWFsbCcsXHJcbiAgICBzdHlsZT86IFJlYWN0LkNTU1Byb3BlcnRpZXMgfCBzdHJpbmcsXHJcbiAgICAkYXR0cnM/OiB7fVxyXG59ICYgQ29tbW9uQXR0cmlidXRlcykgPT4gaHRtbC5idXR0b24oe1xyXG4gICAgLi4ub3RoZXIsXHJcbiAgICBzdHlsZTogc3R5bGVUb0NzcyhzdHlsZSksXHJcbiAgICBjbGFzczogYGJ0biBidG4ke3ZhcmlhbnQgPT0gJ2NvbnRhaW5lZCcgPyAnJyA6ICctJyArICh2YXJpYW50ID09ICdvdXRsaW5lZCcgPyAnb3V0bGluZScgOiB2YXJpYW50KX0tJHsoY29sb3IgPT0gJ2RlZmF1bHQnIHx8IGNvbG9yID09ICdpbmhlcml0JyA/ICdzZWNvbmRhcnknIDogY29sb3IgPT0gJ3NlY29uZGFyeScgPyAnZGFuZ2VyJyA6IGNvbG9yKSB8fCAnc2Vjb25kYXJ5J30gJHtjbGFzc05hbWUgfHwgJyd9ICR7c2l6ZSA9PSAnc21hbGwnID8gJ2J0bi1zbScgOiAnJ31gLFxyXG4gICAgZGlzYWJsZWQsXHJcbiAgICAkb246IHsgY2xpY2s6IG9uQ2xpY2sgfVxyXG59LCBjaGlsZHJlbik7XHJcblxyXG5cclxuY29uc3QgVGV4dEZpZWxkID0gKHByb3BzOiB7XHJcbiAgICBpZDogc3RyaW5nLFxyXG4gICAgZGlzYWJsZWQ/OiBib29sZWFuLFxyXG4gICAgY2xhc3NOYW1lPzogc3RyaW5nLFxyXG4gICAgYXV0b0ZvY3VzPzogYm9vbGVhbixcclxuICAgIGZ1bGxXaWR0aDogYm9vbGVhblxyXG4gICAgaW5wdXRQcm9wcz86IGFueSxcclxuICAgIHZhbHVlPzogYW55LFxyXG4gICAgdHlwZTogYW55LFxyXG4gICAgbGFiZWw/OiBzdHJpbmcsXHJcbiAgICBlcnJvcj86IGJvb2xlYW4sXHJcbiAgICBoZWxwZXJUZXh0Pzogc3RyaW5nLFxyXG4gICAgbXVsdGlsaW5lPzogYm9vbGVhbixcclxuICAgIG9uQ2hhbmdlPzogKGV2ZW50OiBhbnkpID0+IHZvaWQsXHJcbiAgICBvbkZvY3VzPzogKGV2ZW50OiBhbnkpID0+IHZvaWQsXHJcbiAgICBvbkJsdXI/OiAoZXZlbnQ6IGFueSwgdmFsb3I6IGFueSkgPT4gdm9pZCxcclxuICAgIC8vIG9uS2V5RG93bj86KGV2ZW50OktleWJvYXJkRXZlbnQpPT52b2lkIC8vIEtleWJvYXJkRXZlbnRIYW5kbGVyPEhUTUxJbnB1dEVsZW1lbnQ+XHJcbiAgICBvbktleURvd24/OiBSZWFjdC5LZXlib2FyZEV2ZW50SGFuZGxlcjxIVE1MSW5wdXRFbGVtZW50PlxyXG59KSA9PiA8aW5wdXRcclxuICAgICAgICB7Li4ucHJvcHMuaW5wdXRQcm9wc31cclxuICAgICAgICBpZD17cHJvcHMuaWR9XHJcbiAgICAgICAgZGlzYWJsZWQ9e3Byb3BzLmRpc2FibGVkfVxyXG4gICAgICAgIGNsYXNzTmFtZT17cHJvcHMuY2xhc3NOYW1lfVxyXG4gICAgICAgIGF1dG9Gb2N1cz17cHJvcHMuYXV0b0ZvY3VzfVxyXG4gICAgICAgIHZhbHVlPXtwcm9wcy52YWx1ZX1cclxuICAgICAgICB0eXBlPXtwcm9wcy50eXBlfVxyXG4gICAgICAgIG9uQ2hhbmdlPXtwcm9wcy5vbkNoYW5nZX1cclxuICAgICAgICBvbkZvY3VzPXtwcm9wcy5vbkZvY3VzfVxyXG4gICAgICAgIG9uQmx1cj17KGV2dCkgPT4gcHJvcHMub25CbHVyPy4oZXZ0LCBldnQudGFyZ2V0LnZhbHVlKX1cclxuICAgICAgICBvbktleURvd249e3Byb3BzLm9uS2V5RG93bn1cclxuICAgICAgICBwbGFjZWhvbGRlcj17cHJvcHMubGFiZWx9XHJcbiAgICAvPjtcclxuXHJcbmNvbnN0IFR5cG9ncmFwaHkgPSAoeyBjaGlsZHJlbiwgLi4ub3RoZXJzIH06IHtcclxuICAgIGNoaWxkcmVuOiBhbnksXHJcbiAgICBjb21wb25lbnQ/OiBzdHJpbmdcclxuICAgIHZhcmlhbnQ/OiAnYm9keTInfCdoNSd8J2g2J1xyXG4gICAgY29sb3I/OiBDb2xvclZhbHVlc1xyXG59ICYgQ29tbW9uQXR0cmlidXRlcykgPT4gUmVhY3QuY3JlYXRlRWxlbWVudChvdGhlcnMudmFyaWFudCB8fCBvdGhlcnMuY29tcG9uZW50IHx8ICdkaXYnLCBvdGhlcnMsIGNoaWxkcmVuKTtcclxuXHJcbmZ1bmN0aW9uIEdyaWQocHJvcHM6IHtcclxuICAgIGNvbnRhaW5lcj86IGJvb2xlYW4sXHJcbiAgICBzcGFjaW5nPzogbnVtYmVyLFxyXG4gICAgaXRlbT86IGJvb2xlYW4sXHJcbiAgICB3cmFwPzogJ3dyYXAnIHwgJ25vd3JhcCcsXHJcbiAgICBkaXJlY3Rpb24/OiAncm93JyB8ICdjb2x1bW4nXHJcbiAgICBhbGlnbkl0ZW1zPzogJ3N0cmV0Y2gnIHwgJ2ZsZXgtc3RhcnQnIHwgJ2ZsZXgtZW5kJyB8ICdjZW50ZXInIHwgJ2Jhc2VsaW5lJyxcclxuICAgIGNoaWxkcmVuOiBhbnksXHJcbiAgICB4cz86IG51bWJlcixcclxuICAgIHNtPzogbnVtYmVyLFxyXG59ICYgQ29tbW9uQXR0cmlidXRlcykge1xyXG4gICAgdmFyIHsgY29udGFpbmVyLCBpdGVtLCB3cmFwLCBkaXJlY3Rpb24sIGFsaWduSXRlbXMsIGNoaWxkcmVuLCBjbGFzc05hbWUsIHhzLCBzbSwgc3BhY2luZywgLi4ub3RoZXIgfSA9IHByb3BzO1xyXG4gICAgcmV0dXJuIDxkaXZcclxuICAgICAgICB7Li4ub3RoZXJ9XHJcbiAgICAgICAgY2xhc3NOYW1lPXtgJHtjbGFzc05hbWUgfHwgJyd9ICR7eHMgIT0gbnVsbCA/ICdncmlkLXhzLScgKyB4cyA6ICcnfSAke3NtICE9IG51bGwgPyAnZ3JpZC1zbS0nICsgc20gOiAnJ31gfVxyXG4gICAgICAgIHN0eWxlPXtjb250YWluZXIgPyB7XHJcbiAgICAgICAgICAgIGRpc3BsYXk6ICdmbGV4JyxcclxuICAgICAgICAgICAgZmxleFdyYXA6IHdyYXAsXHJcbiAgICAgICAgICAgIGZsZXhEaXJlY3Rpb246IGRpcmVjdGlvbixcclxuICAgICAgICAgICAgYWxpZ25JdGVtczogYWxpZ25JdGVtcyxcclxuICAgICAgICAgICAgbWFyZ2luOiBzcGFjaW5nICE9IG51bGwgPyBzcGFjaW5nICogOCArICdweCcgOiB1bmRlZmluZWRcclxuICAgICAgICB9IDoge1xyXG4gICAgICAgIH19XHJcbiAgICA+e2NoaWxkcmVufTwvZGl2PlxyXG59XHJcblxyXG5pbnRlcmZhY2UgRmFzdFNldHVwUHJvcHMge1xyXG4gICAgZGlzYWJsZWQ/OiBib29sZWFuO1xyXG4gICAgY2hpbGRyZW46IFJlYWN0LlJlYWN0Tm9kZTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIEZhc3RTZXR1cChwcm9wczogRmFzdFNldHVwUHJvcHMpOiBKU1guRWxlbWVudCB7XHJcbiAgICBjb25zdCBbYW5jaG9yRWwsIHNldEFuY2hvckVsXSA9IFJlYWN0LnVzZVN0YXRlPG51bGwgfCBIVE1MRWxlbWVudD4obnVsbCk7XHJcbiAgICBjb25zdCBbb3Blbiwgc2V0T3Blbl0gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XHJcblxyXG4gICAgY29uc3QgaGFuZGxlQ2xpY2sgPSAoZXZlbnQ6IFJlYWN0Lk1vdXNlRXZlbnQ8SFRNTEJ1dHRvbkVsZW1lbnQ+KSA9PiB7XHJcbiAgICAgICAgc2V0QW5jaG9yRWwoZXZlbnQuY3VycmVudFRhcmdldCk7XHJcbiAgICAgICAgc2V0T3BlbigocHJldikgPT4gIXByZXYpO1xyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBoYW5kbGVDbG9zZSA9ICgpID0+IHtcclxuICAgICAgICBzZXRPcGVuKGZhbHNlKTtcclxuICAgIH07XHJcblxyXG4gICAgcmV0dXJuIChcclxuICAgICAgICA8PlxyXG4gICAgICAgICAgICA8QnV0dG9uIG9uQ2xpY2s9e2hhbmRsZUNsaWNrfSBkaXNhYmxlZD17cHJvcHMuZGlzYWJsZWR9PlxyXG4gICAgICAgICAgICAgICAgPElDT04uU2V0dGluZ3MgLz5cclxuICAgICAgICAgICAgPC9CdXR0b24+XHJcblxyXG4gICAgICAgICAgICA8TWVudVxyXG4gICAgICAgICAgICAgICAgb3Blbj17b3Blbn1cclxuICAgICAgICAgICAgICAgIGFuY2hvckVsPXthbmNob3JFbH1cclxuICAgICAgICAgICAgICAgIG9uQ2xvc2U9e2hhbmRsZUNsb3NlfVxyXG4gICAgICAgICAgICAgICAgb25DbGljaz17aGFuZGxlQ2xvc2V9XHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIHtwcm9wcy5jaGlsZHJlbn1cclxuICAgICAgICAgICAgPC9NZW51PlxyXG4gICAgICAgIDwvPlxyXG4gICAgKTtcclxufVxyXG5cclxudmFyIHAxMiA9ICdwMTInIGFzIElkVmFyaWFibGU7XHJcbnZhciBzcDIgPSAnc3AyJyBhcyBJZFZhcmlhYmxlO1xyXG52YXIgc3AzID0gJ3NwMycgYXMgSWRWYXJpYWJsZTtcclxudmFyIHNwNCA9ICdzcDQnIGFzIElkVmFyaWFibGU7XHJcbnZhciBzcDUgPSAnc3A1JyBhcyBJZFZhcmlhYmxlO1xyXG5cclxuLypcclxuLy8gY29uc3QgdGFrZUVsZW1lbnRPckRlZmF1bHQ8SywgVCBleHRlbmRzIFtLIGluXSwgRD4oKVxyXG5mdW5jdGlvbiBpc0luPFYsIFQ+KGs6a2V5b2YgVCwgb2JqZWN0OlQpOiBvYmplY3Rba10gaXMgVntcclxuICAgIHJldHVybiB0cnVlXHJcbn1cclxuKi9cclxuZnVuY3Rpb24gdGFrZUVsZW1lbnRPckRlZmF1bHQ8ViwgSyBleHRlbmRzIHN0cmluZywgS08gZXh0ZW5kcyBzdHJpbmc+KGs6IEssIG9iamVjdDogeyBbayBpbiBLT106IFYgfSwgZGVmYXVsdFZhbHVlOiBWKTogViB7XHJcbiAgICByZXR1cm4gayBpbiBvYmplY3QgP1xyXG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgcG9yIGFsZ3VuYSByYXrDs24gVFMgbm8gcXVpZXJlIGVudGVuZGVyIHF1ZSBzaSBrIGVzdMOhIGVuIG9iamVjdCwgb2JqZWN0W2tdIGV4aXN0ZVxyXG4gICAgICAgIG9iamVjdFtrXVxyXG4gICAgICAgIDogZGVmYXVsdFZhbHVlXHJcbn1cclxuXHJcbmZ1bmN0aW9uIERlc3BsaWVndWVFbmNhYmV6YWRvKHByb3BzOiB7IGNhc2lsbGVybzogQ2FzaWxsZXJvRW5jYWJlemFibGUsIGxlZXI/OiBib29sZWFuIH0pIHtcclxuICAgIGNvbnN0IGZvclBrTnVsbCA9IHt9IGFzIEZvclBrO1xyXG4gICAgcmV0dXJuIDxFbmNhYmV6YWRvRGVzcGxpZWd1ZSBjYXNpbGxlcm89e3Byb3BzLmNhc2lsbGVyb30gbGVlcj17cHJvcHMubGVlcn0gZm9yUGs9e2ZvclBrTnVsbH0gLz47XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHN1YmlySGFzdGEoZWxlbWVudG86IEhUTUxFbGVtZW50IHwgbnVsbCwgZnVuOiAoZWxlbWVudG86IEhUTUxFbGVtZW50KSA9PiBib29sZWFuKTogSFRNTEVsZW1lbnQgfCBudWxsIHtcclxuICAgIGlmIChlbGVtZW50byA9PSBudWxsKSByZXR1cm4gbnVsbDtcclxuICAgIGlmIChmdW4oZWxlbWVudG8pKSByZXR1cm4gZWxlbWVudG87XHJcbiAgICByZXR1cm4gc3ViaXJIYXN0YShlbGVtZW50by5wYXJlbnRFbGVtZW50LCBmdW4pO1xyXG59XHJcblxyXG52YXIgZWxlbWVudG9Db25TZW5uaWFsQm9ycmFyOiBIVE1MRWxlbWVudCB8IG51bGwgPSBudWxsO1xyXG5cclxuZnVuY3Rpb24gQm90b25Cb3JyYXIoeyBpZCwgdmFyaWFibGUsIGZvclBrLCB2YWxvck9wY2lvbiB9OiB7IGlkOiBzdHJpbmcsIHZhcmlhYmxlOiBJZFZhcmlhYmxlLCBmb3JQazogRm9yUGssIHZhbG9yT3BjaW9uPzogYW55IH0pIHtcclxuICAgIHZhciBoYW5kbGVDbGlja0JvcnJhciA9ICgpID0+IHtcclxuICAgICAgICBkaXNwYXRjaEJ5UGFzcyhhY2Npb25fcmVnaXN0cmFyX3Jlc3B1ZXN0YSwgeyByZXNwdWVzdGE6IG51bGwsIHZhcmlhYmxlOiB2YXJpYWJsZSwgZm9yUGs6IGZvclBrIH0pXHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPVwiYm90b24tYm9ycmFyXCI+XHJcbiAgICAgICAgPEJ1dHRvblxyXG4gICAgICAgICAgICBpZD17aWR9XHJcbiAgICAgICAgICAgIG1pLXZhcmlhYmxlPXt2YXJpYWJsZX1cclxuICAgICAgICAgICAgdmFsb3Itb3BjaW9uPXt2YWxvck9wY2lvbn1cclxuICAgICAgICAgICAgdmFyaWFudD1cIm91dGxpbmVkXCJcclxuICAgICAgICAgICAgY2xhc3NOYW1lPVwiYm90b24tb3BjaW9uIGJvdG9uLW9wY2lvbi1ib3JyYXJcIlxyXG4gICAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVDbGlja0JvcnJhcn1cclxuICAgICAgICA+XHJcbiAgICAgICAgICAgIDxJQ09OLkRlbGV0ZUZvcmV2ZXIgLz5cclxuICAgICAgICA8L0J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG59XHJcblxyXG5mdW5jdGlvbiBTYWx0b0Rlc3BsaWVndWUoeyBjYXNpbGxlcm8sIHByZWZpam8gfTogeyBjYXNpbGxlcm86IFByZWd1bnRhIHwgT3BjaW9uIHwgRmlsdHJvLCBwcmVmaWpvPzogc3RyaW5nIH0pIHtcclxuICAgIHJldHVybiBjYXNpbGxlcm8uc2FsdG8gP1xyXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwicGFzZVwiPlxyXG4gICAgICAgICAgICB7cHJlZmlqbyA/IDxzcGFuIGNsYXNzTmFtZT1cInByZWZpam9cIj57cHJlZmlqb30gPC9zcGFuPiA6IG51bGx9XHJcbiAgICAgICAgICAgIDxJQ09OLlRyZW5kaW5nRmxhdCAvPjxzcGFuPntjYXNpbGxlcm8uc2FsdG99PC9zcGFuPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDogbnVsbFxyXG59XHJcblxyXG5mdW5jdGlvbiBPcGNpb25EZXNwbGllZ3VlKHByb3BzOiB7IGNhc2lsbGVybzogT3BjaW9uLCB2YWxvck9wY2lvbjogbnVtYmVyLCB2YXJpYWJsZTogSWRWYXJpYWJsZSwgZm9yUGs6IEZvclBrLCBsZWVyOiBib29sZWFuLCBjb25Cb3RvbkJvcnJhcjogYm9vbGVhbiB9KSB7XHJcbiAgICBjb25zdCB7IGNhc2lsbGVybyB9ID0gcHJvcHM7XHJcbiAgICBjb25zdCBkaXNwYXRjaCA9IHVzZURpc3BhdGNoKCk7XHJcbiAgICB2YXIgc2FsdG9BdXRvbWF0aWNvID0gdXNlU2VsZWN0b3IoKHN0YXRlOiBDYXNvU3RhdGUpID0+IHN0YXRlLm9wY2lvbmVzLnNhbHRvQXV0b21hdGljbyk7XHJcbiAgICB2YXIgaGFuZGxlQ2xpY2s6IFJlYWN0Lk1vdXNlRXZlbnRIYW5kbGVyPEhUTUxCdXR0b25FbGVtZW50PiA9IGFzeW5jIChldmVudCkgPT4ge1xyXG4gICAgICAgIHZhciBjb250YWluZXIgPSBzdWJpckhhc3RhKGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudCwgZWxlbWVudG8gPT4gZWxlbWVudG8uY2xhc3NMaXN0LmNvbnRhaW5zKCdwcmVndW50YScpIHx8IGVsZW1lbnRvLmNsYXNzTGlzdC5jb250YWlucygnbXVsdGlwbGUnKSkgfHwgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21haW5fbGF5b3V0JykhO1xyXG4gICAgICAgIHZhciB0aWVuZSA9IGNvbnRhaW5lci5nZXRBdHRyaWJ1dGUoJ2VzdG95LWJvcnJhbmRvJyk7XHJcbiAgICAgICAgY29udGFpbmVyLnNldEF0dHJpYnV0ZSgnZXN0b3ktYm9ycmFuZG8nLCAnTk8nKTtcclxuICAgICAgICBpZiAoZWxlbWVudG9Db25TZW5uaWFsQm9ycmFyKSB7XHJcbiAgICAgICAgICAgIGVsZW1lbnRvQ29uU2VubmlhbEJvcnJhci5zZXRBdHRyaWJ1dGUoJ2VzdG95LWJvcnJhbmRvJywgJ05PJyk7XHJcbiAgICAgICAgICAgIGVsZW1lbnRvQ29uU2VubmlhbEJvcnJhciA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciB7IHJlY2VudE1vZGlmaWVkLCBzaWd1aWVudGVWYXJpYWJsZSB9ID0gZGlzcGF0Y2hCeVBhc3MoYWNjaW9uX3JlZ2lzdHJhcl9yZXNwdWVzdGEsIHsgcmVzcHVlc3RhOiBwcm9wcy52YWxvck9wY2lvbiwgdmFyaWFibGU6IHByb3BzLnZhcmlhYmxlLCBmb3JQazogcHJvcHMuZm9yUGsgfSk7XHJcbiAgICAgICAgaWYgKCFyZWNlbnRNb2RpZmllZCkge1xyXG4gICAgICAgICAgICBjb250YWluZXIuc2V0QXR0cmlidXRlKCdlc3RveS1ib3JyYW5kbycsIHRpZW5lID09ICdTSScgPyAnTk8nIDogJ1NJJyk7XHJcbiAgICAgICAgICAgIGlmICh0aWVuZSAhPSAnU0knKSB7XHJcbiAgICAgICAgICAgICAgICBlbGVtZW50b0NvblNlbm5pYWxCb3JyYXIgPSBjb250YWluZXI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAoc2lndWllbnRlVmFyaWFibGUgJiYgc2FsdG9BdXRvbWF0aWNvKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgYm90b25TdHlsZSA9IChldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQpPy5zdHlsZTtcclxuICAgICAgICAgICAgICAgIGlmIChib3RvblN0eWxlKSBib3RvblN0eWxlLmNvbG9yID0gJ2dyZWVuJztcclxuICAgICAgICAgICAgICAgIGF3YWl0IHNsZWVwKERFTEFZX1NDUk9MTF8zKTtcclxuICAgICAgICAgICAgICAgIGlmIChib3RvblN0eWxlKSBib3RvblN0eWxlLmNvbG9yID0gJ2JsdWUnO1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgc2xlZXAoREVMQVlfU0NST0xMXzMpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGJvdG9uU3R5bGUpIGJvdG9uU3R5bGUuY29sb3IgPSAnZ3JlZW4nO1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgc2xlZXAoREVMQVlfU0NST0xMXzMpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGJvdG9uU3R5bGUpIGJvdG9uU3R5bGUuY29sb3IgPSAnJztcclxuICAgICAgICAgICAgICAgIChjYXNpbGxlcm8uZXNwZWNpYWw/Lm5vU2Nyb2xsID09IHRydWUpID8gbnVsbCA6IGVuZm9jYXJFbGVtZW50b0RlVmFyaWFibGUoY2FzaWxsZXJvLmVzcGVjaWFsPy5zY3JvbGxUbyA/PyBzaWd1aWVudGVWYXJpYWJsZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIDxHcmlkIGNsYXNzTmFtZT1cIm9wY2lvblwiPlxyXG4gICAgICAgIHtwcm9wcy5jb25Cb3RvbkJvcnJhciA/IDxCb3RvbkJvcnJhclxyXG4gICAgICAgICAgICBpZD17YG9wY2lvbi12YXItJHtwcm9wcy52YXJpYWJsZX0tJHtwcm9wcy52YWxvck9wY2lvbn0tYm9ycmFyYH1cclxuICAgICAgICAgICAgZm9yUGs9e3Byb3BzLmZvclBrfVxyXG4gICAgICAgICAgICB2YXJpYWJsZT17cHJvcHMudmFyaWFibGV9XHJcbiAgICAgICAgICAgIHZhbG9yT3BjaW9uPXtwcm9wcy52YWxvck9wY2lvbn1cclxuICAgICAgICAvPiA6IG51bGx9XHJcbiAgICAgICAgPEJ1dHRvblxyXG4gICAgICAgICAgICBpZD17YG9wY2lvbi12YXItJHtwcm9wcy52YXJpYWJsZX0tJHtwcm9wcy52YWxvck9wY2lvbn1gfVxyXG4gICAgICAgICAgICBtaS12YXJpYWJsZT17cHJvcHMudmFyaWFibGV9XHJcbiAgICAgICAgICAgIHZhbG9yLW9wY2lvbj17cHJvcHMudmFsb3JPcGNpb259XHJcbiAgICAgICAgICAgIHZhcmlhbnQ9XCJvdXRsaW5lZFwiXHJcbiAgICAgICAgICAgIGNsYXNzTmFtZT1cImJvdG9uLW9wY2lvbiBib3Rvbi1vcGNpb24tc2VsZWNjaW9uXCJcclxuICAgICAgICAgICAgb25DbGljaz17aGFuZGxlQ2xpY2t9XHJcbiAgICAgICAgICAgIHRhYkluZGV4PXstMX1cclxuICAgICAgICA+XHJcbiAgICAgICAgICAgIDxHcmlkIGNvbnRhaW5lciB3cmFwPVwibm93cmFwXCI+XHJcbiAgICAgICAgICAgICAgICA8R3JpZCBjbGFzc05hbWU9XCJpZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHtjYXNpbGxlcm8udmVyX2lkIHx8IGNhc2lsbGVyby5jYXNpbGxlcm99XHJcbiAgICAgICAgICAgICAgICA8L0dyaWQ+XHJcbiAgICAgICAgICAgICAgICA8R3JpZCBjbGFzc05hbWU9XCJvcGNpb24tdGV4dG9cIj5cclxuICAgICAgICAgICAgICAgICAgICA8VHlwb2dyYXBoeSBkZWJlLWxlZXI9e2Nhc2lsbGVyby5sZWVyID8gJ1NJJyA6IGNhc2lsbGVyby5sZWVyID09PSBmYWxzZSA/ICdOTycgOiBwcm9wcy5sZWVyID8gJ1NJJyA6ICdOTyd9PnticmVha2VhYmxlVGV4dChjYXNpbGxlcm8ubm9tYnJlKX08L1R5cG9ncmFwaHk+XHJcbiAgICAgICAgICAgICAgICAgICAge2Nhc2lsbGVyby5hY2xhcmFjaW9uID9cclxuICAgICAgICAgICAgICAgICAgICAgICAgPFR5cG9ncmFwaHkgY2xhc3NOYW1lPSdhY2xhcmFjaW9uJz57YnJlYWtlYWJsZVRleHQoY2FzaWxsZXJvLmFjbGFyYWNpb24pfTwvVHlwb2dyYXBoeT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgOiBudWxsfVxyXG4gICAgICAgICAgICAgICAgPC9HcmlkPlxyXG4gICAgICAgICAgICA8L0dyaWQ+XHJcbiAgICAgICAgPC9CdXR0b24+XHJcbiAgICAgICAgPFNhbHRvRGVzcGxpZWd1ZSBjYXNpbGxlcm89e2Nhc2lsbGVyb30gLz5cclxuICAgIDwvR3JpZD5cclxufVxyXG5pbnRlcmZhY2UgSWNhc2lsbGVyb0Nvbk9wY2lvbmVzIHtcclxuICAgIHZhcl9uYW1lOiBJZFZhcmlhYmxlLFxyXG4gICAgZGVzcGxpZWd1ZUNvbnRlbmlkbzogJ3ZlcnRpY2FsJyB8ICdob3Jpem9udGFsJyB8IG51bGwsXHJcbiAgICBjYXNpbGxlcm9zOiBPcGNpb25bXVxyXG59XHJcblxyXG5cclxuZnVuY3Rpb24gU2lOb0Rlc3BsaWVndWUocHJvcHM6IHsgY2FzaWxsZXJvQ29uT3BjaW9uZXM6IEljYXNpbGxlcm9Db25PcGNpb25lcywgZm9yUGs6IEZvclBrLCBkZXNwbGllZ3VlQ29udGVuaWRvOiAndmVydGljYWwnIHwgJ2hvcml6b250YWwnIH0pIHtcclxuICAgIHJldHVybiA8T3BjaW9uZXNEZXNwbGllZ3VlXHJcbiAgICAgICAgY2FzaWxsZXJvQ29uT3BjaW9uZXM9e3Byb3BzLmNhc2lsbGVyb0Nvbk9wY2lvbmVzfVxyXG4gICAgICAgIGZvclBrPXtwcm9wcy5mb3JQa31cclxuICAgICAgICBsZWVyPXtmYWxzZX1cclxuICAgICAgICBkZXNwbGllZ3VlQ29udGVuaWRvPXtwcm9wcy5kZXNwbGllZ3VlQ29udGVuaWRvfVxyXG4gICAgLz5cclxufVxyXG5cclxuZnVuY3Rpb24gcmVnaXN0cmFkb3JEZVZhcmlhYmxlKHByZWd1bnRhOiBQcmVndW50YSB8IE9wY2lvbk11bHRpcGxlIHwgQ29uanVudG9QcmVndW50YXMpIHtcclxuICAgIHJldHVybiAoXHJcbiAgICAgICAgcmVzcHVlc3RhczogUmVzcHVlc3RhcywgZmVlZGJhY2tGb3JtOiBGb3JtU3RydWN0dXJlU3RhdGU8SWRWYXJpYWJsZSwgVmFsb3IsIElkRmluPiwgZWxlbWVudG86IEhUTUxEaXZFbGVtZW50XHJcbiAgICApID0+IHtcclxuICAgICAgICB2YXIgdmFsb3JBY3R1YWwgPSBwcmVndW50YS52YXJfbmFtZSA9PSBudWxsID8gbnVsbCA6IHJlc3B1ZXN0YXNbcHJlZ3VudGEudmFyX25hbWVdO1xyXG4gICAgICAgIHZhciBmZWVkYmFja1JvdyA9IGZlZWRiYWNrRm9ybS5mZWVkYmFjaztcclxuICAgICAgICB2YXIgZmVlZGJhY2tWYXIgPSBwcmVndW50YS52YXJfbmFtZSA9PSBudWxsID8gbnVsbCA6IGZlZWRiYWNrUm93W3ByZWd1bnRhLnZhcl9uYW1lXTtcclxuICAgICAgICB2YXIgdGllbmVWYWxvciA9IHZhbG9yQWN0dWFsICE9IG51bGwgJiYgZmVlZGJhY2tWYXIgIT0gbnVsbCA/IChmZWVkYmFja1Zhci5jb25Qcm9ibGVtYSA/ICdpbnZhbGlkbycgOiAndmFsaWRvJykgOiAnTk8nO1xyXG4gICAgICAgIHZhciBlc3RhZG86IEVzdGFkb1ZhcmlhYmxlO1xyXG4gICAgICAgIGlmIChwcmVndW50YS50aXBvdmFyKSB7XHJcbiAgICAgICAgICAgIGVzdGFkbyA9IGZlZWRiYWNrVmFyPy5lc3RhZG8hO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHZhciBmZWVkYmFja011bHRpID0gcHJlZ3VudGEuY2FzaWxsZXJvcy5maWx0ZXIoYyA9PiBjLnZhcl9uYW1lICE9IG51bGwpLnJlZHVjZSgocHYsIG9tKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB2YXIgZmIgPSBmZWVkYmFja1Jvdz8uW29tLnZhcl9uYW1lIV0hXHJcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRpZW5lQWN0dWFsOiBwdi50aWVuZUFjdHVhbCB8fCBmYi5lc3RhZG8gPT0gJ2FjdHVhbCcsXHJcbiAgICAgICAgICAgICAgICAgICAgZXN0YVNhbHRlYWRhOiBwdi5lc3RhU2FsdGVhZGEgJiYgKGZiLmVzdGFkbyA9PSAnc2FsdGVhZGEnIHx8IGZiLmVzdGFkbyA9PSAnZnVlcmFfZGVfZmx1am9fcG9yX3NhbHRvJylcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSwgeyB0aWVuZUFjdHVhbDogZmFsc2UsIGVzdGFTYWx0ZWFkYTogdHJ1ZSB9KTtcclxuICAgICAgICAgICAgZXN0YWRvID0gZmVlZGJhY2tNdWx0aS50aWVuZUFjdHVhbCA/ICdhY3R1YWwnIDogZmVlZGJhY2tNdWx0aS5lc3RhU2FsdGVhZGEgPyAnc2FsdGVhZGEnIDogJ3RvZGF2aWFfbm8nXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHNldEF0dHJEaXN0aW50byhlbGVtZW50bywgJ251ZXN0cm8tdmFsaWRhdG9yJywgZXN0YWRvKTtcclxuICAgICAgICBzZXRBdHRyRGlzdGludG8oZWxlbWVudG8sICd0aWVuZS12YWxvcicsIHRpZW5lVmFsb3IpO1xyXG4gICAgICAgIHNldEF0dHJEaXN0aW50byhlbGVtZW50bywgJ2VzdGEtaW5oYWJpbGl0YWRhJywgZmVlZGJhY2tWYXI/LmluaGFiaWxpdGFkYSA/ICdTSScgOiAnTk8nKTtcclxuICAgICAgICBpZiAocHJlZ3VudGEudmFyX25hbWUpIHtcclxuICAgICAgICAgICAgdmFyIG9wY2lvbmVzOiBIVE1MQnV0dG9uRWxlbWVudFtdID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZWxlbWVudG8ucXVlcnlTZWxlY3RvckFsbChgLmJvdG9uLW9wY2lvblttaS12YXJpYWJsZT1cIiR7cHJlZ3VudGEudmFyX25hbWV9XCJdYCksIDApO1xyXG4gICAgICAgICAgICB2YXIgZWxlbWVudG9PcGNpb246IEhUTUxCdXR0b25FbGVtZW50O1xyXG4gICAgICAgICAgICBmb3IgKGVsZW1lbnRvT3BjaW9uIG9mIG9wY2lvbmVzKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgdmFsb3JPcGNpb24gPSBlbGVtZW50b09wY2lvbi5nZXRBdHRyaWJ1dGUoJ3ZhbG9yLW9wY2lvbicpO1xyXG4gICAgICAgICAgICAgICAgc2V0QXR0ckRpc3RpbnRvKGVsZW1lbnRvT3BjaW9uLCAnb3BjaW9uLXNlbGVjY2lvbmFkYScsIHZhbG9yT3BjaW9uID09IHZhbG9yQWN0dWFsID8gXCJTSVwiIDogXCJOT1wiKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciBlbGVtZW50b3NJbnB1dDogSFRNTElucHV0RWxlbWVudFtdID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZWxlbWVudG8ucXVlcnlTZWxlY3RvckFsbCgnLnZhcmlhYmxlJykpO1xyXG4gICAgICAgICAgICB2YXIgZWxlbWVudG9JbnB1dDogSFRNTElucHV0RWxlbWVudDtcclxuICAgICAgICAgICAgZm9yIChlbGVtZW50b0lucHV0IG9mIGVsZW1lbnRvc0lucHV0KSB7XHJcbiAgICAgICAgICAgICAgICBzZXRWYWxvckRpc3RpbnRvKGVsZW1lbnRvSW5wdXQsICd2YWx1ZScsIHZhbG9yQWN0dWFsID09IG51bGwgPyAnJyA6IHZhbG9yQWN0dWFsLnRvU3RyaW5nKCkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciBib3Rvbk5zTmMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcIm5zbmMtcHJlZ3VudGEtXCIgKyBwcmVndW50YS52YXJfbmFtZSkhO1xyXG4gICAgICAgICAgICBzZXRBdHRyRGlzdGludG8oYm90b25Oc05jLCAnb3BjaW9uLXNlbGVjY2lvbmFkYScsIHZhbG9yQWN0dWFsID09IChwcmVndW50YS52YWxvcl9uc19uYyA/PyAtOSkgPyBcIlNJXCIgOiBcIk5PXCIpXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBPcGNpb25NdWx0aXBsZURlc3BsaWVndWUocHJvcHM6IHsgb3BjaW9uTTogT3BjaW9uTXVsdGlwbGUsIGZvclBrOiBGb3JQayB9KSB7XHJcbiAgICBjb25zdCB7IG9wY2lvbk0gfSA9IHByb3BzO1xyXG4gICAgdmFyIGlkID0gYG9wY2lvbk0tJHtvcGNpb25NLmlkX2Nhc2lsbGVyb31gO1xyXG4gICAgdmFyIHN0eWxlczogUmVhY3QuQ1NTUHJvcGVydGllcyA9IG9wY2lvbk0uZXNwZWNpYWw/LmZsZXhEaXJlY3Rpb24gPyB7IGZsZXhEaXJlY3Rpb246IG9wY2lvbk0uZXNwZWNpYWwuZmxleERpcmVjdGlvbiB9IDogeyBmbGV4V3JhcDogJ3dyYXAnIH07XHJcbiAgICByZWdpc3RyYXJFbGVtZW50byh7XHJcbiAgICAgICAgaWQsXHJcbiAgICAgICAgZGlyZWN0OiB0cnVlLFxyXG4gICAgICAgIGZ1bjogcmVnaXN0cmFkb3JEZVZhcmlhYmxlKG9wY2lvbk0pXHJcbiAgICB9KVxyXG4gICAgY29uc3QgdXBkYXRlV2luZG93V2lkdGggPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgc2V0V2luZG93V2lkdGgod2luZG93LmlubmVyV2lkdGgpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IFt3aW5kb3dXaWR0aCwgc2V0V2luZG93V2lkdGhdID0gdXNlU3RhdGUod2luZG93LmlubmVyV2lkdGgpO1xyXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHVwZGF0ZVdpbmRvd1dpZHRoKTtcclxuICAgIHJldHVybiA8RGVzcGxlZ2FyQ2FzaWxsZXJvXHJcbiAgICAgICAgaWQ9e2lkfVxyXG4gICAgICAgIGNhc2lsbGVybz17b3BjaW9uTX1cclxuICAgICAgICBkZXNwbGllZ3VlRW5jYWJlemFkbz0nbGF0ZXJhbCdcclxuICAgICAgICBzdHlsZT17c3R5bGVzfVxyXG4gICAgPlxyXG4gICAgICAgIDxFbmNhYmV6YWRvRGVzcGxpZWd1ZVxyXG4gICAgICAgICAgICBjYXNpbGxlcm89e29wY2lvbk19XHJcbiAgICAgICAgICAgIHZlcklkR3Vpb249e3RydWV9XHJcbiAgICAgICAgICAgIGxlZXI9e29wY2lvbk0ubGVlciAhPT0gZmFsc2V9XHJcbiAgICAgICAgICAgIGZvclBrPXtwcm9wcy5mb3JQa31cclxuICAgICAgICAgICAgc3R5bGU9e3sgbWF4V2lkdGg6IHdpbmRvd1dpZHRoIC0gNDAwIH19IC8vVE9ETyBNRUpPUkFSXHJcbiAgICAgICAgLz5cclxuICAgICAgICA8U2lOb0Rlc3BsaWVndWVcclxuICAgICAgICAgICAgY2FzaWxsZXJvQ29uT3BjaW9uZXM9e29wY2lvbk19XHJcbiAgICAgICAgICAgIGZvclBrPXtwcm9wcy5mb3JQa31cclxuICAgICAgICAgICAgZGVzcGxpZWd1ZUNvbnRlbmlkbz17cHJvcHMub3BjaW9uTS5kZXNwbGllZ3VlQ29udGVuaWRvID8/ICdob3Jpem9udGFsJ31cclxuICAgICAgICAvPlxyXG4gICAgPC9EZXNwbGVnYXJDYXNpbGxlcm8+XHJcbn1cclxuXHJcbnR5cGUgQ2FzaWxsZXJvRW5jYWJlemFibGUgPSBGb3JtdWxhcmlvIHwgQmxvcXVlIHwgRmlsdHJvIHwgQ29uanVudG9QcmVndW50YXMgfCBQcmVndW50YSB8IE9wY2lvbk11bHRpcGxlIHwgUHJlZ3VudGFTaW1wbGUgfCBDb25zaXN0ZW5jaWEgfCBUZXh0byB8IFBNYXRyaXpcclxuXHJcbmNvbnN0IGdldExvc01ldGFkYXRvcyA9IChjYXNpbGxlcm86IENhc2lsbGVyb0VuY2FiZXphYmxlKTogUmVhY3QuSlNYLkVsZW1lbnQgPT5cclxuICAgIDxkaXYgbG9zLW1ldGFkYXRvcz1cInNpXCI+XHJcbiAgICAgICAgPHNwYW4gZWwtbWV0YWRhdG89XCJ2YXJpYWJsZVwiPntjYXNpbGxlcm8udmFyX25hbWV9PC9zcGFuPlxyXG4gICAgICAgIHtjYXNpbGxlcm8udGlwb3ZhciAmJiBjYXNpbGxlcm8udGlwb3ZhciAhPSAnb3BjaW9uZXMnICYmIGNhc2lsbGVyby50aXBvdmFyICE9ICdzaV9ubycgP1xyXG4gICAgICAgICAgICA8c3BhbiBlbC1tZXRhZGF0bz1cInRpcG92YXJcIj57Y2FzaWxsZXJvLnRpcG92YXJ9PC9zcGFuPlxyXG4gICAgICAgICAgICA6IG51bGx9XHJcbiAgICAgICAge2Nhc2lsbGVyby52YXJfbmFtZSAmJiBjYXNpbGxlcm8ub3B0YXRpdm8gPyA8c3BhbiBlbC1tZXRhZGF0bz1cIm9wdGF0aXZhXCI+b3B0YXRpdmE8L3NwYW4+IDogbnVsbH1cclxuICAgICAgICB7Y2FzaWxsZXJvLmNhbGN1bGFkYSA/IDxzcGFuIGVsLW1ldGFkYXRvPVwiY2FsY3VsYWRhXCI+Y2FsY3VsYWRhPC9zcGFuPiA6IG51bGx9XHJcbiAgICAgICAge2Nhc2lsbGVyby5kZXNwbGllZ3VlT2N1bHRhID8gPHNwYW4gZWwtbWV0YWRhdG89XCJvY3VsdGFcIj5vY3VsdGE8L3NwYW4+IDogbnVsbH1cclxuICAgICAgICB7Y2FzaWxsZXJvLmV4cHJlc2lvbl9oYWJpbGl0YXIgPyA8c3BhbiBlbC1tZXRhZGF0bz1cImV4cHJlc2lvbl9oYWJpbGl0YXJcIj5oYWJpbGl0YToge2Nhc2lsbGVyby5leHByZXNpb25faGFiaWxpdGFyfTwvc3Bhbj4gOiBudWxsfVxyXG4gICAgICAgIHtjYXNpbGxlcm8uZXNwZWNpYWw/LmF1dG9pbmcgPyA8c3BhbiBlbC1tZXRhZGF0bz1cImV4cHJlc2lvbl9hdXRvaW5nXCI+YXV0b2luZzoge2Nhc2lsbGVyby5lc3BlY2lhbD8uYXV0b2luZ308L3NwYW4+IDogbnVsbH1cclxuICAgIDwvZGl2PlxyXG5cclxuZnVuY3Rpb24gRW5jYWJlemFkb0Rlc3BsaWVndWUocHJvcHM6IHtcclxuICAgIHN0eWxlPzogUmVhY3QuQ1NTUHJvcGVydGllcyxcclxuICAgIGNhc2lsbGVybzogQ2FzaWxsZXJvRW5jYWJlemFibGUsXHJcbiAgICB2ZXJJZEd1aW9uPzogYm9vbGVhbixcclxuICAgIGxlZXI/OiBib29sZWFuLFxyXG4gICAgZm9yUGs6IEZvclBrXHJcbn0pIHtcclxuICAgIHZhciB7IGNhc2lsbGVybywgZm9yUGsgfSA9IHByb3BzO1xyXG4gICAgdmFyIGNvbkNhbXBvT3BjaW9uZXMgPSB1c2VTZWxlY3Rvcigoc3RhdGU6IENhc29TdGF0ZSkgPT4gc3RhdGUub3BjaW9uZXMuY29uQ2FtcG9PcGNpb25lcylcclxuICAgIHZhciBoYW5kbGVDbGlja0JvcnJhciA9ICgpID0+IHtcclxuICAgICAgICBkaXNwYXRjaEJ5UGFzcyhhY2Npb25fcmVnaXN0cmFyX3Jlc3B1ZXN0YSwgeyByZXNwdWVzdGE6IG51bGwsIHZhcmlhYmxlOiBjYXNpbGxlcm8udmFyX25hbWUgYXMgSWRWYXJpYWJsZSwgZm9yUGs6IGZvclBrIH0pXHJcbiAgICB9O1xyXG4gICAgdmFyIHZlcl9pZCA9IGNhc2lsbGVyby52ZXJfaWQgPz8gY2FzaWxsZXJvLmNhc2lsbGVybztcclxuICAgIHZhciBjYWxjdWxhZGEgPSBjYXNpbGxlcm8uY2FsY3VsYWRhO1xyXG4gICAgdmFyIGlkID0gYGlkLWRpdi0ke2Nhc2lsbGVyby52YXJfbmFtZSB8fCBjYXNpbGxlcm8uY2FzaWxsZXJvfWA7XHJcbiAgICB2YXIgaWRBY2Npb25lcyA9IFwiYWNjaW9uZXMtXCIgKyBpZDtcclxuICAgIHJldHVybiA8ZGl2XHJcbiAgICAgICAgY2xhc3NOYW1lPVwiZW5jYWJlemFkb1wiXHJcbiAgICAgICAgZGViZS1sZWVyPXtwcm9wcy5sZWVyID8gJ1NJJyA6ICdOTyd9XHJcbiAgICAgICAgc3R5bGU9e3Byb3BzLnN0eWxlfVxyXG4gICAgPlxyXG4gICAgICAgIDxkaXYgaWQ9e2lkfSBjbGFzc05hbWU9XCJpZC1kaXZcIiB0aXRsZT17YCR7Y2FzaWxsZXJvLmNhc2lsbGVyb30gLSAke2Nhc2lsbGVyby52YXJfbmFtZX1gfVxyXG4gICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB2YXIgZGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWRBY2Npb25lcyk7XHJcbiAgICAgICAgICAgICAgICBkaXYhLnNldEF0dHJpYnV0ZShcImFjY2lvbi12aXNpYmxlXCIsICgxIC0gTnVtYmVyKGRpdiEuZ2V0QXR0cmlidXRlKFwiYWNjaW9uLXZpc2libGVcIikpKS50b1N0cmluZygpKTtcclxuICAgICAgICAgICAgICAgIC8vIFRPRE8uIFZlciBxdcOpIGhhY2Vtb3MgY3VhbmRvIHNlIHRvY2EgZWwgSUQgZGUgbGEgcHJlZ3V0bmFcclxuICAgICAgICAgICAgICAgIGRpc3BhdGNoQnlQYXNzKGFjY2lvbl9pZF9wcmVndW50YSwgeyBwcmVndW50YTogY2FzaWxsZXJvLmNhc2lsbGVybyBhcyBJZFByZWd1bnRhLCBmb3JQayB9KTtcclxuICAgICAgICAgICAgfX1cclxuICAgICAgICA+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiaWRcIj5cclxuICAgICAgICAgICAgICAgIHt2ZXJfaWR9XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICB7KGNhc2lsbGVyby50aXBvdmFyID09IFwic2lfbm9cIiB8fCBjYXNpbGxlcm8udGlwb3ZhciA9PSBcIm9wY2lvbmVzXCIpID8gPENhbXBvIGRpc2FibGVkPXtmYWxzZX0gcHJlZ3VudGE9e2Nhc2lsbGVybyBhcyB1bmtub3duIGFzIFByZWd1bnRhU2ltcGxlfSBmb3JQaz17Zm9yUGt9IG1pbmk9e3RydWV9IGhpZGRlbj17IWNvbkNhbXBvT3BjaW9uZXMgJiYgJ3F1aXRhcid9IC8+IDogbnVsbH1cclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJhY2Npb25lcy1wcmVndW50YVwiIGlkPXtpZEFjY2lvbmVzfSBhY2Npb24tdmlzaWJsZT1cIjBcIj5cclxuICAgICAgICAgICAgICAgIHtjYXNpbGxlcm8udmFyX25hbWUgPyA8ZGl2PjxCdXR0b25cclxuICAgICAgICAgICAgICAgICAgICBpZD17XCJib3JyYXItcHJlZ3VudGEtXCIgKyBjYXNpbGxlcm8udmFyX25hbWV9XHJcbiAgICAgICAgICAgICAgICAgICAgbWktdmFyaWFibGU9e2Nhc2lsbGVyby52YXJfbmFtZX1cclxuICAgICAgICAgICAgICAgICAgICB2YXJpYW50PVwib3V0bGluZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImJvdG9uLXByZWd1bnRhLWJvcnJhclwiXHJcbiAgICAgICAgICAgICAgICAgICAgb25DbGljaz17aGFuZGxlQ2xpY2tCb3JyYXJ9XHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgPElDT04uRGVsZXRlRm9yZXZlciAvPlxyXG4gICAgICAgICAgICAgICAgPC9CdXR0b24+PC9kaXY+IDogbnVsbH1cclxuICAgICAgICAgICAgICAgIHtjYXNpbGxlcm8udmFyX25hbWUgPyAobnNfbmMgPT4gPGRpdj48QnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgaWQ9e1wibnNuYy1wcmVndW50YS1cIiArIGNhc2lsbGVyby52YXJfbmFtZX1cclxuICAgICAgICAgICAgICAgICAgICBtaS12YXJpYWJsZT17Y2FzaWxsZXJvLnZhcl9uYW1lfVxyXG4gICAgICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJvdXRsaW5lZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiYm90b24tcHJlZ3VudGEtbnNuY1wiXHJcbiAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgeyBzaWd1aWVudGVWYXJpYWJsZSB9ID0gZGlzcGF0Y2hCeVBhc3MoYWNjaW9uX3JlZ2lzdHJhcl9yZXNwdWVzdGEsIHsgcmVzcHVlc3RhOiBuc19uYywgdmFyaWFibGU6IGNhc2lsbGVyby52YXJfbmFtZSBhcyBJZFZhcmlhYmxlLCBmb3JQazogZm9yUGsgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKHNpZ3VpZW50ZVZhcmlhYmxlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmZvY2FyRWxlbWVudG9EZVZhcmlhYmxlKGNhc2lsbGVyby5lc3BlY2lhbD8uc2Nyb2xsVG8gPz8gc2lndWllbnRlVmFyaWFibGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICBOUy9OQ1xyXG4gICAgICAgICAgICAgICAgPC9CdXR0b24+PC9kaXY+KShjYXNpbGxlcm8udmFsb3JfbnNfbmMgPz8gLTkpIDogbnVsbH1cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJub21icmUtZGl2XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibm9tYnJlXCI+e2JyZWFrZWFibGVUZXh0KGNhc2lsbGVyby5ub21icmUpfVxyXG4gICAgICAgICAgICAgICAge2Nhc2lsbGVyby5lc3BlY2lhbD8uZ3BzID9cclxuICAgICAgICAgICAgICAgICAgICA8c3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPEJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiB2YXJpYW50PVwib3V0bGluZWRcIiBzdHlsZT17eyBtYXJnaW5MZWZ0OiAnMTBweCcgfX0gb25DbGljaz17KF9ldmVudCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFyTmFtZSA9IGNhc2lsbGVyby52YXJfbmFtZSE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhZ3JlZ2FySW5mb0dQUyA9IChpbmZvOiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB7IHJlc3B1ZXN0YXM6IHJBY3R1YWxlcyB9ID0gcmVzcHVlc3Rhc0ZvclBrKGZvclBrKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWxvckFjdHVhbCA9IHJBY3R1YWxlc1t2YXJOYW1lXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgYXV4ID0gSlNPTi5wYXJzZSh2YWxvckFjdHVhbD8udG9TdHJpbmcoKSB8fCBcIltdXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1eC51bnNoaWZ0KGluZm8pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkaXNwYXRjaEJ5UGFzcyhhY2Npb25fcmVnaXN0cmFyX3Jlc3B1ZXN0YSwgeyBmb3JQazogcHJvcHMuZm9yUGssIHZhcmlhYmxlOiB2YXJOYW1lLCByZXNwdWVzdGE6IEpTT04uc3RyaW5naWZ5KGF1eCkgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgeyBzaWd1aWVudGVWYXJpYWJsZSB9ID0gYWdyZWdhckluZm9HUFMoYCR7ZGF0ZXRpbWUubm93KCkudG9ZbWRIbXMoKX0gLSBlc3BlcmFuZG8gcHVudG8gZ3BzYCkgfHwge307XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2lndWllbnRlVmFyaWFibGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmZvY2FyRWxlbWVudG9EZVZhcmlhYmxlKHNpZ3VpZW50ZVZhcmlhYmxlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdmlnYXRvci5nZW9sb2NhdGlvbi5nZXRDdXJyZW50UG9zaXRpb24ocG9zaXRpb24gPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgbGF0aXR1ZGUsIGxvbmdpdHVkZSwgYWx0aXR1ZGUsIGFjY3VyYWN5LCBhbHRpdHVkZUFjY3VyYWN5LCBoZWFkaW5nLCBzcGVlZCB9ID0gcG9zaXRpb24uY29vcmRzO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRhdGFUb1NhdmUgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvb3JkczogeyBsYXRpdHVkZSwgbG9uZ2l0dWRlLCBhbHRpdHVkZSwgYWNjdXJhY3ksIGFsdGl0dWRlQWNjdXJhY3ksIGhlYWRpbmcsIHNwZWVkIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVzdGFtcDogcG9zaXRpb24udGltZXN0YW1wXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZ3JlZ2FySW5mb0dQUyhKU09OLnN0cmluZ2lmeShkYXRhVG9TYXZlKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBlID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZ3JlZ2FySW5mb0dQUyhlLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgeyBlbmFibGVIaWdoQWNjdXJhY3k6IHRydWUsIHRpbWVvdXQ6IDEwMDAwIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0+PElDT04uTG9jYXRpb24gLz48L0J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgOiBudWxsfVxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAge2Nhc2lsbGVyby5hY2xhcmFjaW9uID9cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYWNsYXJhY2lvblwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHtjYXNpbGxlcm8uc2FsdG8gJiYgY2FzaWxsZXJvLnRpcG9jID09ICdGSUxUUk8nID9cclxuICAgICAgICAgICAgICAgICAgICAgICAgPFNhbHRvRGVzcGxpZWd1ZSBjYXNpbGxlcm89e2Nhc2lsbGVyb30gcHJlZmlqbz17YnJlYWtlYWJsZVRleHQoY2FzaWxsZXJvLmFjbGFyYWNpb24pIX0gLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVha2VhYmxlVGV4dChjYXNpbGxlcm8uYWNsYXJhY2lvbilcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDogbnVsbH1cclxuICAgICAgICAgICAge2dldExvc01ldGFkYXRvcyhjYXNpbGxlcm8pfVxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbn1cclxuXHJcbmZ1bmN0aW9uIERlc3BsZWdhckNvbmZpcm1hckJvcnJhclJlc3B1ZXN0YShwcm9wczogeyBmb3JQazogRm9yUGssIHZhcmlhYmxlQm9ycmFyOiBJZFZhcmlhYmxlIH0pIHtcclxuICAgIHZhciBbb3Blbiwgc2V0T3Blbl0gPSB1c2VTdGF0ZSghIXByb3BzLnZhcmlhYmxlQm9ycmFyKVxyXG4gICAgY29uc3QgZGlzcGF0Y2ggPSB1c2VEaXNwYXRjaCgpO1xyXG4gICAgY29uc3QgaGFuZGxlQ2xvc2UgPSAoKSA9PiB7XHJcbiAgICAgICAgZGlzcGF0Y2goZGlzcGF0Y2hlcnMuQ09ORklSTUFSX0JPUlJBUl9SRVNQVUVTVEEoeyBmb3JQazogcHJvcHMuZm9yUGssIHZhcmlhYmxlOiBudWxsIH0pKTtcclxuICAgICAgICBzZXRPcGVuKGZhbHNlKTtcclxuICAgIH1cclxuICAgIHJldHVybiA8UG9wb3ZlclxyXG4gICAgICAgIGlkPXtcInBvcG92ZXItY29uZmlybWFyXCJ9XHJcbiAgICAgICAgb3Blbj17b3Blbn1cclxuICAgICAgICBvbkNsb3NlPXtoYW5kbGVDbG9zZX1cclxuICAgICAgICBhbmNob3JPcmlnaW49e3tcclxuICAgICAgICAgICAgdmVydGljYWw6ICdib3R0b20nLFxyXG4gICAgICAgICAgICBob3Jpem9udGFsOiAnY2VudGVyJyxcclxuICAgICAgICB9fVxyXG4gICAgICAgIHRyYW5zZm9ybU9yaWdpbj17e1xyXG4gICAgICAgICAgICB2ZXJ0aWNhbDogJ3RvcCcsXHJcbiAgICAgICAgICAgIGhvcml6b250YWw6ICdsZWZ0JyxcclxuICAgICAgICB9fVxyXG4gICAgPlxyXG4gICAgICAgIDxUeXBvZ3JhcGh5PkxhIHByZWd1bnRhIHRpZW5lIHJlZ2lzdHJhZGEgdW5hIHJlc3B1ZXN0YSBxdWUgbm8gZnVlIGRldGVjdGFkYSBjb21vIGVycsOzbmVhPC9UeXBvZ3JhcGh5PlxyXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiY29uZmlybWEtYm90b25lc1wiPlxyXG4gICAgICAgICAgICA8QnV0dG9uIGNvbG9yPVwic2Vjb25kYXJ5XCIgdmFyaWFudD1cIm91dGxpbmVkXCIgb25DbGljaz17KCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHByb3BzLnZhcmlhYmxlQm9ycmFyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2hCeVBhc3MoYWNjaW9uX3JlZ2lzdHJhcl9yZXNwdWVzdGEsIHsgZm9yUGs6IHByb3BzLmZvclBrLCB2YXJpYWJsZTogcHJvcHMudmFyaWFibGVCb3JyYXIsIHJlc3B1ZXN0YTogbnVsbCB9KVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaGFuZGxlQ2xvc2UoKTtcclxuICAgICAgICAgICAgfX0+Ym9ycmFyIHJlc3B1ZXN0YTwvQnV0dG9uPlxyXG4gICAgICAgICAgICA8QnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIHZhcmlhbnQ9XCJvdXRsaW5lZFwiIG9uQ2xpY2s9e2hhbmRsZUNsb3NlfT52b2x2ZXIgc2luIGJvcnJhcjwvQnV0dG9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9Qb3BvdmVyPjtcclxufVxyXG5cclxuZnVuY3Rpb24gY2FsY3VsYXJOdWVzdHJhTG9uZ2l0dWQobG9uZ2l0dWQ6IHN0cmluZyB8IG51bWJlciB8IG51bGwgfCB1bmRlZmluZWQpIHtcclxuICAgIHJldHVybiBsb25naXR1ZDtcclxufVxyXG5cclxuZnVuY3Rpb24gZW5mb2NhckVsZW1lbnRvRGVWYXJpYWJsZShzaWd1aWVudGVWYXJpYWJsZTogSWRWYXJpYWJsZSB8IElkRmluKSB7XHJcbiAgICBkZWJlU2FsdGFyID0gZmFsc2U7XHJcbiAgICB2YXIgeyB0b3AsIGVuZm9jYWRvLCBlbGVtZW50b0lucHV0VmFyaWFibGUgfSA9IGNhbGN1bGFyRWxlbWVudG9FbmZvY2FkbyhzaWd1aWVudGVWYXJpYWJsZSk7XHJcbiAgICBpZiAodG9wICE9IG51bGwgJiYgdG9wID4gMCAmJiAoIWVuZm9jYWRvIHx8IFwic2FsdGEgc2llbXByZVwiKSkge1xyXG4gICAgICAgIHdpbmRvdy5zY3JvbGxUbyh7IHRvcCwgbGVmdDogMCwgYmVoYXZpb3I6ICdzbW9vdGgnIH0pO1xyXG4gICAgfVxyXG4gICAgZWxlbWVudG9JbnB1dFZhcmlhYmxlPy5mb2N1cygpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBDYW1wbyhwcm9wczogeyBkaXNhYmxlZDogYm9vbGVhbiwgcHJlZ3VudGE6IFByZWd1bnRhU2ltcGxlIHwgUHJlZ3VudGFDb25PcGNpb25lcyB8IFByZWd1bnRhQ29uU2lObyB8IE9wY2lvbk11bHRpcGxlLCBmb3JQazogRm9yUGssIG1pbmk/OiBib29sZWFuLCBoaWRkZW4/OiBib29sZWFuIHwgJ3F1aXRhcicgfSkge1xyXG4gICAgdmFyIHsgcHJlZ3VudGEsIGRpc2FibGVkLCBtaW5pIH0gPSBwcm9wcztcclxuICAgIHZhciB7IHNhbHRvQXV0b21hdGljbywgY29uQ2FtcG9PcGNpb25lcyB9ID0gdXNlU2VsZWN0b3IoKHN0YXRlOiBDYXNvU3RhdGUpID0+IHN0YXRlLm9wY2lvbmVzKTtcclxuICAgIGNvbnN0IGxvbmdpdHVkID0gbWluaSA/IHByZWd1bnRhLmNhc2lsbGVyb3MucmVkdWNlKChhY3VtLCBvKSA9PiBNYXRoLm1heChvLmNhc2lsbGVyby50b1N0cmluZygpLmxlbmd0aCwgYWN1bSksIDApIDpcclxuICAgICAgICBwcmVndW50YS5sb25naXR1ZDtcclxuICAgIC8vIHZhciBbdmFsb3IsIHNldFZhbG9yXSA9IHVzZVN0YXRlKHByb3BzLnZhbG9yKTtcclxuICAgIHZhciBbZWRpdGFuZG8sIHNldEVkaXRhbmRvXSA9IHVzZVN0YXRlKGZhbHNlKTtcclxuICAgIC8vIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAvLyAgICAgc2V0VmFsb3IocHJvcHMudmFsb3IpXHJcbiAgICAvLyB9LCBbcHJvcHMudmFsb3JdKTtcclxuICAgIGNvbnN0IGlucHV0UHJvcHMgPSB7XHJcbiAgICAgICAgbWF4TGVuZ3RoOiBsb25naXR1ZCxcclxuICAgICAgICBlbnRlcktleUhpbnQ6IFwibmV4dFwiIGFzIGNvbnN0LFxyXG4gICAgfTtcclxuICAgIGNvbnN0IG9uQ2hhbmdlID0gKG51ZXZvVmFsb3I6IFZhbG9yIHwgdHlwZW9mIE5PX0NBTUJJQVJfX1ZFUklGSUNBUl9TSV9FU19ORUNFU0FSSU8pID0+IHtcclxuICAgICAgICB2YXIgeyBzaWd1aWVudGVWYXJpYWJsZSB9ID0gZGlzcGF0Y2hCeVBhc3MoYWNjaW9uX3JlZ2lzdHJhcl9yZXNwdWVzdGEsIHsgZm9yUGs6IHByb3BzLmZvclBrLCB2YXJpYWJsZTogcHJlZ3VudGEudmFyX25hbWUgYXMgSWRWYXJpYWJsZSwgcmVzcHVlc3RhOiBudWV2b1ZhbG9yIH0pO1xyXG4gICAgICAgIGlmIChzaWd1aWVudGVWYXJpYWJsZSAmJiBkZWJlU2FsdGFyKSB7XHJcbiAgICAgICAgICAgIChwcmVndW50YS5lc3BlY2lhbD8ubm9TY3JvbGwgPT0gdHJ1ZSkgPyBudWxsIDogZW5mb2NhckVsZW1lbnRvRGVWYXJpYWJsZShwcmVndW50YS5lc3BlY2lhbD8uc2Nyb2xsVG8gPz8gc2lndWllbnRlVmFyaWFibGUpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICBjb25zdCBoYW5kbGVTdWJtaXQgPSAoeyBlc0JvdG9uQ29uZmlybWFyIH06IHsgZXNCb3RvbkNvbmZpcm1hcjogYm9vbGVhbiB9KSA9PiB7XHJcbiAgICAgICAgZGViZVNhbHRhciA9IGVzQm90b25Db25maXJtYXIgPyB0cnVlIDogKHNhbHRvQXV0b21hdGljbyB8fCBjb25DYW1wb09wY2lvbmVzKTtcclxuXHJcbiAgICAgICAgdmFyIGlzSW5wdXRGb2N1c2VkID0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudCAmJiAoZG9jdW1lbnQuYWN0aXZlRWxlbWVudC50YWdOYW1lID09PSAnSU5QVVQnIHx8IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQudGFnTmFtZSA9PT0gJ1RFWFRBUkVBJyk7XHJcbiAgICAgICAgaWYgKGlzSW5wdXRGb2N1c2VkKSB7XHJcbiAgICAgICAgICAgIGlmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcclxuICAgICAgICAgICAgICAgIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQuYmx1cigpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdmFyIGVsZW1lbnRvSW5wdXRWYXJpYWJsZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGB2YXItJHtwcmVndW50YS52YXJfbmFtZSB8fCAnJ31gKSBhcyBIVE1MSW5wdXRFbGVtZW50O1xyXG4gICAgICAgICAgICBvbkNoYW5nZShlbGVtZW50b0lucHV0VmFyaWFibGUgPyBlbGVtZW50b0lucHV0VmFyaWFibGUudmFsdWUgOiBOT19DQU1CSUFSX19WRVJJRklDQVJfU0lfRVNfTkVDRVNBUklPKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIHZhciBudWVzdHJhTG9uZ2l0dWQgPSBjYWxjdWxhck51ZXN0cmFMb25naXR1ZChwcmVndW50YS5sb25naXR1ZCB8fCBsb25naXR1ZClcclxuICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT1cImNhbXBvXCIgbnVlc3RyYS1sb25naXR1ZD17bnVlc3RyYUxvbmdpdHVkfSBzdHlsZT17cHJvcHMuaGlkZGVuID09ICdxdWl0YXInID8geyBkaXNwbGF5OiAnbm9uZScgfSA6IHByb3BzLmhpZGRlbiA/IHsgdmlzaWJpbGl0eTogJ2hpZGRlbicgfSA6IHVuZGVmaW5lZH0+XHJcbiAgICAgICAge21pbmkgPyBudWxsIDogPEJvdG9uQm9ycmFyXHJcbiAgICAgICAgICAgIGlkPXtgYm9ycmFyLWFiaWVydGEtJHtwcmVndW50YS52YXJfbmFtZX1gfVxyXG4gICAgICAgICAgICB2YXJpYWJsZT17cHJlZ3VudGEudmFyX25hbWV9XHJcbiAgICAgICAgICAgIGZvclBrPXtwcm9wcy5mb3JQa31cclxuICAgICAgICAvPn1cclxuICAgICAgICA8Zm9ybVxyXG4gICAgICAgICAgICBjbGFzc05hbWU9XCJmb3JtLWNhbXBvLXdyYXBwZXJcIlxyXG4gICAgICAgICAgICBzdHlsZT17eyBkaXNwbGF5OiAnY29udGVudHMnIH19XHJcbiAgICAgICAgICAgIG9uU3VibWl0PXsoZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgICAgaGFuZGxlU3VibWl0KHsgZXNCb3RvbkNvbmZpcm1hcjogZmFsc2UgfSk7XHJcbiAgICAgICAgICAgIH19XHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImlucHV0LWNhbXBvXCI+XHJcbiAgICAgICAgICAgICAgICA8VGV4dEZpZWxkXHJcbiAgICAgICAgICAgICAgICAgICAgaWQ9e2B2YXItJHtwcmVndW50YS52YXJfbmFtZSB8fCAnJ31gfVxyXG4gICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXtkaXNhYmxlZCB8fCBwcmVndW50YS5lc3BlY2lhbD8uZ3BzfVxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInZhcmlhYmxlXCJcclxuICAgICAgICAgICAgICAgICAgICAvL3Zhci1sZW5ndGg9e3ByZWd1bnRhLmxvbmdpdHVkfVxyXG4gICAgICAgICAgICAgICAgICAgIGZ1bGxXaWR0aD17dHJ1ZX1cclxuICAgICAgICAgICAgICAgICAgICBpbnB1dFByb3BzPXtpbnB1dFByb3BzfVxyXG4gICAgICAgICAgICAgICAgICAgIHR5cGU9e3ByZWd1bnRhLmRlc3BsaWVndWVUaXBvSW5wdXQgPz8gYWRhcHRhclRpcG9WYXJDYXNpbGxlcm8ocHJlZ3VudGEudGlwb3Zhcil9XHJcbiAgICAgICAgICAgICAgICAgICAgb25Gb2N1cz17KF9ldmVudCkgPT4gc2V0RWRpdGFuZG8odHJ1ZSl9XHJcbiAgICAgICAgICAgICAgICAgICAgb25CbHVyPXsoX2V2ZW50LCB2YWxvcikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZSh2YWxvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEVkaXRhbmRvKGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgICAgICAgIG9uS2V5RG93bj17KGV2ZW50KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlc0VudGVyID0gKGV2ZW50LmtleSA9PSAnRW50ZXInIHx8IGV2ZW50LmtleUNvZGUgPT0gMTMpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlc0VudGVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlU3VibWl0KHsgZXNCb3RvbkNvbmZpcm1hcjogZmFsc2UgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIHtkaXNhYmxlZCB8fCBwcmVndW50YS5lc3BlY2lhbD8uZ3BzIHx8IG1pbmkgPyBudWxsIDpcclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYm90b24tY29uZmlybWFyLWNhbXBvXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPEJ1dHRvbiB2YXJpYW50PXtlZGl0YW5kbyA/IFwiY29udGFpbmVkXCIgOiAnb3V0bGluZWQnfSBzaXplPVwic21hbGxcIiBjb2xvcj17ZWRpdGFuZG8gPyAncHJpbWFyeScgOiAnZGVmYXVsdCd9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvdG9uLWNvbmZpcm1hcj17cHJlZ3VudGEudmFyX25hbWV9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhYkluZGV4PXstMX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eyhlOiBSZWFjdC5Nb3VzZUV2ZW50KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVTdWJtaXQoeyBlc0JvdG9uQ29uZmlybWFyOiB0cnVlIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgICAgICAgID48SUNPTi5DaGVjayAvPjwvQnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICA8L2Zvcm0+XHJcbiAgICA8L2Rpdj5cclxufVxyXG5cclxuaW50ZXJmYWNlIEljYXNpbGxlcm9Db25PcGNpb25lcyB7XHJcbiAgICB2YXJfbmFtZTogSWRWYXJpYWJsZSxcclxuICAgIGNhc2lsbGVyb3M6IE9wY2lvbltdXHJcbn1cclxuXHJcbmZ1bmN0aW9uIE9wY2lvbmVzRGVzcGxpZWd1ZShcclxuICAgIHsgY2FzaWxsZXJvQ29uT3BjaW9uZXMsIGZvclBrLCBsZWVyLCBkZXNwbGllZ3VlQ29udGVuaWRvIH06XHJcbiAgICAgICAgeyBjYXNpbGxlcm9Db25PcGNpb25lczogSWNhc2lsbGVyb0Nvbk9wY2lvbmVzLCBmb3JQazogRm9yUGssIGxlZXI6IGJvb2xlYW4sIGRlc3BsaWVndWVDb250ZW5pZG86ICd2ZXJ0aWNhbCcgfCAnaG9yaXpvbnRhbCcgfVxyXG4pIHtcclxuICAgIGNvbnN0IGRlc3BsZWdhck90cm9zID0gKG9wY2lvbjogT3BjaW9uLCBzb2xvUGFyYURlc3BsaWVndWU6ICd2ZXJ0aWNhbCcgfCAnaG9yaXpvbnRhbCcgfCBudWxsKSA9PiBvcGNpb24uY2FzaWxsZXJvcy5tYXAoKHN1YlByZWd1bnRhOiBQcmVndW50YSkgPT4gKFxyXG4gICAgICAgIHNvbG9QYXJhRGVzcGxpZWd1ZSA9PSBudWxsIHx8IHNvbG9QYXJhRGVzcGxpZWd1ZSA9PSBzdWJQcmVndW50YS5kZXNwbGllZ3VlQ29udGVuaWRvID9cclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJvdHJvcy1lc3BlY2lmaWNhclwiIHN0eWxlPXt7IHdpZHRoOiAnMTAwJScgfX0ga2V5PXtzdWJQcmVndW50YS5pZF9jYXNpbGxlcm99PlxyXG4gICAgICAgICAgICAgICAgPFByZWd1bnRhRGVzcGxpZWd1ZVxyXG4gICAgICAgICAgICAgICAgICAgIHByZWd1bnRhPXtzdWJQcmVndW50YX1cclxuICAgICAgICAgICAgICAgICAgICBmb3JQaz17Zm9yUGt9XHJcbiAgICAgICAgICAgICAgICAgICAgZGVzcGxpZWd1ZUVuY2FiZXphZG89J3N1cGVyaW9yJ1xyXG4gICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgPC9kaXY+IDogbnVsbFxyXG4gICAgKSlcclxuICAgIHJldHVybiA8PjxkaXYgY2xhc3NOYW1lPVwiY29udGVuaWRvXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJvcGNpb25lc1wiIGRlc3BsaWVndWUtY29udGVuaWRvPXtkZXNwbGllZ3VlQ29udGVuaWRvID8/ICd2ZXJ0aWNhbCd9PlxyXG4gICAgICAgICAgICB7Y2FzaWxsZXJvQ29uT3BjaW9uZXMuY2FzaWxsZXJvcy5tYXAoKG9wY2lvbjogT3BjaW9uLCBpOiBudW1iZXIpID0+XHJcbiAgICAgICAgICAgICAgICA8R3JpZCBrZXk9e29wY2lvbi5pZF9jYXNpbGxlcm99IGl0ZW1cclxuICAgICAgICAgICAgICAgICAgICBvY3VsdGFyLXNhbHRlYWRhPXtvcGNpb24uZGVzcGxpZWd1ZU9jdWx0YSA/IChvcGNpb24uZXhwcmVzaW9uX2hhYmlsaXRhcl9qcyA/ICdJTkhBQklMSVRBUicgOiAnU0knKSA6ICdOTyd9XHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgPE9wY2lvbkRlc3BsaWVndWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzaWxsZXJvPXtvcGNpb259XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlPXtjYXNpbGxlcm9Db25PcGNpb25lcy52YXJfbmFtZX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsb3JPcGNpb249e29wY2lvbi5jYXNpbGxlcm99XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvclBrPXtmb3JQa31cclxuICAgICAgICAgICAgICAgICAgICAgICAgbGVlcj17bGVlcn1cclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uQm90b25Cb3JyYXI9e2kgPT0gMCB8fCBkZXNwbGllZ3VlQ29udGVuaWRvICE9ICdob3Jpem9udGFsJ31cclxuICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgIHtkZXNwbGllZ3VlQ29udGVuaWRvID09ICdob3Jpem9udGFsJyA/IG51bGwgOiBkZXNwbGVnYXJPdHJvcyhvcGNpb24sIG51bGwpfVxyXG4gICAgICAgICAgICAgICAgPC9HcmlkPlxyXG4gICAgICAgICAgICApfVxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICAgICAge2Rlc3BsaWVndWVDb250ZW5pZG8gPT0gJ2hvcml6b250YWwnID8gY2FzaWxsZXJvQ29uT3BjaW9uZXMuY2FzaWxsZXJvcy5tYXAoKG9wY2lvbjogT3BjaW9uKSA9PlxyXG4gICAgICAgICAgICBkZXNwbGVnYXJPdHJvcyhvcGNpb24sIG51bGwpXHJcbiAgICAgICAgKSA6IG51bGx9PC8+XHJcbn1cclxuXHJcbmNvbnN0IG5vbWJyZUNhc2lsbGVybyA9IHtcclxuICAgIEY6ICdmb3JtdWxhcmlvJyxcclxuICAgIEI6ICdibG9xdWUnLFxyXG4gICAgUDogJ3ByZWd1bnRhJyxcclxuICAgIENQOiAnY29uanVudG9wcmVndW50YXMnLFxyXG4gICAgTzogJ29wY2lvbicsXHJcbiAgICBPTTogJ211bHRpcGxlJyxcclxuICAgIEZJTFRSTzogJ2ZpbHRybycsXHJcbiAgICBDT05TOiAnY29uc2lzdGVuY2lhJyxcclxuICAgIEJGOiAnYm90b25mb3JtdWxhcmlvJyxcclxuICAgIFRFWFRPOiAnYWNsYXJhY2lvbnN1cGVyaW9yJyxcclxuICAgIFBNQVRSSVo6ICdwcmVndW50YWVuZm9ybWFkZW1hdHJpeicsXHJcbn1cclxuXHJcbmZ1bmN0aW9uIERlc3BsZWdhckNhc2lsbGVybyhwcm9wczoge1xyXG4gICAgY2FzaWxsZXJvOiBQcmVndW50YSB8IEJsb3F1ZSB8IEZpbHRybyB8IENvbmp1bnRvUHJlZ3VudGFzIHwgQm90b25Gb3JtdWxhcmlvIHwgQ29uc2lzdGVuY2lhIHwgT3BjaW9uTXVsdGlwbGUgfCBUZXh0byB8IFBNYXRyaXosXHJcbiAgICBpZD86IHN0cmluZyxcclxuICAgIHN0eWxlPzogUmVhY3QuQ1NTUHJvcGVydGllcyxcclxuICAgIGRlc3BsaWVndWVFbmNhYmV6YWRvPzogJ2xhdGVyYWwnIHwgJ3N1cGVyaW9yJ1xyXG4gICAgY2hpbGRyZW46IFJlYWN0LlJlYWN0Tm9kZSB8IFJlYWN0LlJlYWN0Tm9kZVtdLFxyXG4gICAgXCJvY3VsdGFyLXNhbHRlYWRhXCI/OiAnU0knIHwgJ05PJyB8ICdJTkhBQklMSVRBUicgfCB1bmRlZmluZWRcclxufSkge1xyXG4gICAgcmV0dXJuIDxkaXZcclxuICAgICAgICBrZXk9e2Ake3Byb3BzLmNhc2lsbGVyby50aXBvY30tJHtwcm9wcy5pZCB8fCBwcm9wcy5jYXNpbGxlcm8uaWRfY2FzaWxsZXJvfWB9XHJcbiAgICAgICAgY2xhc3NOYW1lPXtgY2FzaWxsZXJvICR7bm9tYnJlQ2FzaWxsZXJvW3Byb3BzLmNhc2lsbGVyby50aXBvY119YH1cclxuICAgICAgICBpZD17cHJvcHMuaWR9XHJcbiAgICAgICAgc3R5bGU9e3Byb3BzLnN0eWxlfVxyXG4gICAgICAgIGRlc3BsaWVndWUtZW5jYWJlemFkbz17cHJvcHMuY2FzaWxsZXJvLmRlc3BsaWVndWVFbmNhYmV6YWRvID8/IHByb3BzLmRlc3BsaWVndWVFbmNhYmV6YWRvID8/ICdzdXBlcmlvcid9XHJcbiAgICAgICAgb2N1bHRhci1zYWx0ZWFkYT17cHJvcHNbXCJvY3VsdGFyLXNhbHRlYWRhXCJdfVxyXG4gICAgPntwcm9wcy5jaGlsZHJlbn08L2Rpdj5cclxufVxyXG5cclxuZnVuY3Rpb24gUHJlZ3VudGFEZXNwbGllZ3VlKHByb3BzOiB7XHJcbiAgICBwcmVndW50YTogUHJlZ3VudGEsXHJcbiAgICBmb3JQazogRm9yUGssXHJcbiAgICBkZXNwbGllZ3VlRW5jYWJlemFkbzogJ2xhdGVyYWwnIHwgJ3N1cGVyaW9yJyxcclxuICAgIHBhcmFQTWF0cml6PzogdHJ1ZVxyXG59KSB7XHJcbiAgICB2YXIgeyBwcmVndW50YSB9ID0gcHJvcHM7XHJcbiAgICBjb25zdCBkaXNwYXRjaCA9IHVzZURpc3BhdGNoKCk7XHJcbiAgICB2YXIgZXN0YWRvOiBFc3RhZG9WYXJpYWJsZTtcclxuICAgIHZhciBpZCA9IGBwcmVndW50YS0ke3ByZWd1bnRhLmlkX2Nhc2lsbGVyb31gXHJcbiAgICByZWdpc3RyYXJFbGVtZW50byh7XHJcbiAgICAgICAgaWQsXHJcbiAgICAgICAgZGlyZWN0OiB0cnVlLFxyXG4gICAgICAgIGZ1bjogcmVnaXN0cmFkb3JEZVZhcmlhYmxlKHByZWd1bnRhKVxyXG4gICAgfSlcclxuICAgIHZhciBpZCA9IGBwcmVndW50YS0ke3ByZWd1bnRhLmlkX2Nhc2lsbGVyb31gXHJcbiAgICB2YXIgc3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7fVxyXG4gICAgaWYgKHByZWd1bnRhLmRlc3BsaWVndWUgPT0gJ2dyaWQnKSB7XHJcbiAgICAgICAgc3R5bGUuZGlzcGxheSA9ICdncmlkJztcclxuICAgICAgICBzdHlsZS5ncmlkVGVtcGxhdGVDb2x1bW5zID0gJ3JlcGVhdCgzLDFmciknO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBwcm9wcy5wYXJhUE1hdHJpeiA/XHJcbiAgICAgICAgPD5cclxuICAgICAgICAgICAge2dldExvc01ldGFkYXRvcyhwcmVndW50YSl9XHJcbiAgICAgICAgICAgIDxDYW1wb1xyXG4gICAgICAgICAgICAgICAgZGlzYWJsZWQ9e3ByZWd1bnRhLmNhbGN1bGFkYSA/IHRydWUgOiBmYWxzZX1cclxuICAgICAgICAgICAgICAgIHByZWd1bnRhPXtwcmVndW50YSBhcyB1bmtub3duIGFzIFByZWd1bnRhU2ltcGxlfVxyXG4gICAgICAgICAgICAgICAgZm9yUGs9e3Byb3BzLmZvclBrfVxyXG4gICAgICAgICAgICAgICAgbWluaT17dHJ1ZX1cclxuICAgICAgICAgICAgLz5cclxuICAgICAgICA8Lz5cclxuICAgICAgICA6IDxEZXNwbGVnYXJDYXNpbGxlcm9cclxuICAgICAgICAgICAgaWQ9e2lkfVxyXG4gICAgICAgICAgICBjYXNpbGxlcm89e3ByZWd1bnRhfVxyXG4gICAgICAgICAgICBzdHlsZT17c3R5bGV9XHJcbiAgICAgICAgICAgIG51ZXN0cm8tdGlwb3Zhcj17cHJlZ3VudGEudGlwb3ZhciB8fCBcIm11bHRpcGxlXCJ9XHJcbiAgICAgICAgICAgIG9jdWx0YXItc2FsdGVhZGE9e3ByZWd1bnRhLmRlc3BsaWVndWVPY3VsdGEgPyAocHJlZ3VudGEuZXhwcmVzaW9uX2hhYmlsaXRhcl9qcyA/ICdJTkhBQklMSVRBUicgOiAnU0knKSA6ICdOTyd9XHJcbiAgICAgICAgICAgIGRlc3BsaWVndWVFbmNhYmV6YWRvPXtwcm9wcy5kZXNwbGllZ3VlRW5jYWJlemFkb31cclxuXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgICA8RW5jYWJlemFkb0Rlc3BsaWVndWVcclxuICAgICAgICAgICAgICAgIGNhc2lsbGVybz17cHJlZ3VudGF9XHJcbiAgICAgICAgICAgICAgICBsZWVyPXtwcmVndW50YS5sZWVyICE9PSBmYWxzZX1cclxuICAgICAgICAgICAgICAgIGZvclBrPXtwcm9wcy5mb3JQa31cclxuICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJjb250ZW5pZG9cIj57XHJcbiAgICAgICAgICAgICAgICBwcmVndW50YS50aXBvdmFyID09IFwic2lfbm9cIiA/IDxHcmlkIGNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICA8U2lOb0Rlc3BsaWVndWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzaWxsZXJvQ29uT3BjaW9uZXM9e3ByZWd1bnRhfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JQaz17cHJvcHMuZm9yUGt9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlc3BsaWVndWVDb250ZW5pZG89e3Byb3BzLnByZWd1bnRhLmRlc3BsaWVndWVDb250ZW5pZG8gPz8gJ3ZlcnRpY2FsJ31cclxuICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgPC9HcmlkPiA6XHJcbiAgICAgICAgICAgICAgICAgICAgcHJlZ3VudGEudGlwb3ZhciA9PSBcIm9wY2lvbmVzXCIgP1xyXG4gICAgICAgICAgICAgICAgICAgICAgICA8T3BjaW9uZXNEZXNwbGllZ3VlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNpbGxlcm9Db25PcGNpb25lcz17cHJlZ3VudGF9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JQaz17cHJvcHMuZm9yUGt9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZWVyPXshIXByZWd1bnRhLmxlZXJ9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNwbGllZ3VlQ29udGVuaWRvPXtwcmVndW50YS5kZXNwbGllZ3VlQ29udGVuaWRvID8/ICd2ZXJ0aWNhbCd9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8+IDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgcHJlZ3VudGEudGlwb3ZhciA9PSBudWxsID9cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwcmVndW50YS5jYXNpbGxlcm9zIGFzIChPcGNpb25NdWx0aXBsZSB8IENvbnNpc3RlbmNpYSlbXSkubWFwKChvcGNpb25NdWx0aXBsZSkgPT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGNpb25NdWx0aXBsZS50aXBvYyA9PSAnT00nID9cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPE9wY2lvbk11bHRpcGxlRGVzcGxpZWd1ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5PXtvcGNpb25NdWx0aXBsZS5pZF9jYXNpbGxlcm99XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGNpb25NPXtvcGNpb25NdWx0aXBsZX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvclBrPXtwcm9wcy5mb3JQa31cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAvL2xhcyBjb25zaXN0ZW5jaWFzIHB1ZWRlbiBzZXIgaGVybWFuYXMgZGUgT01cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPENvbnNpc3RlbmNpYURlc3BsaWVndWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleT17b3BjaW9uTXVsdGlwbGUuaWRfY2FzaWxsZXJvfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzaWxsZXJvPXtvcGNpb25NdWx0aXBsZX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvclBrPXtwcm9wcy5mb3JQa31cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICgocHJlZ3VudGFTaW1wbGU6IFByZWd1bnRhU2ltcGxlKSA9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxDYW1wb1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17cHJlZ3VudGFTaW1wbGUuY2FsY3VsYWRhID8gdHJ1ZSA6IGZhbHNlfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVndW50YT17cHJlZ3VudGFTaW1wbGV9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvclBrPXtwcm9wcy5mb3JQa31cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKShwcmVndW50YSlcclxuICAgICAgICAgICAgfTwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInBpZS1wcmVndW50YVwiPlxyXG4gICAgICAgICAgICAgICAgPFNhbHRvRGVzcGxpZWd1ZVxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2lsbGVybz17cHJlZ3VudGF9XHJcbiAgICAgICAgICAgICAgICAgICAgcHJlZmlqbz17cHJlZ3VudGEudGlwb3ZhciA9PSBcIm9wY2lvbmVzXCIgPyAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHByZWd1bnRhLmNhc2lsbGVyb3Muc29tZShvcGNpb24gPT4gb3BjaW9uLnNhbHRvKSA/IFwicmVzdG8gZGUgbGFzIG9wY2lvbmVzXCIgOiBcInRvZGFzIGxhcyBvcGNpb25lc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgKSA6IFwiXCJ9XHJcbiAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L0Rlc3BsZWdhckNhc2lsbGVybz5cclxufVxyXG5cclxuZnVuY3Rpb24gUE1hdHJpekRlc3BsaWVndWUocHJvcHM6IHtcclxuICAgIGNhc2lsbGVybzogUE1hdHJpeixcclxuICAgIGZvclBrOiBGb3JQayxcclxufSkge1xyXG4gICAgdmFyIHsgY2FzaWxsZXJvIH0gPSBwcm9wcztcclxuICAgIHZhciBpZCA9IGBwcmVndW50YS0ke2Nhc2lsbGVyby5pZF9jYXNpbGxlcm99YFxyXG4gICAgY29uc3QgY29scyA9IChjYXNpbGxlcm8uY2FzaWxsZXJvcyBhcyAoT3BjaW9uTXVsdGlwbGUgfCBDb25zaXN0ZW5jaWEpW10pXHJcbiAgICAgICAgLmZpbmQoKG9wY2lvbk11bHRpcGxlKSA9PiBvcGNpb25NdWx0aXBsZS50aXBvYyA9PSAnT00nKT8uY2FzaWxsZXJvc1xyXG4gICAgICAgIC5tYXAoKHByZWd1bnRhKSA9PiBwcmVndW50YS5ub21icmUpO1xyXG4gICAgY29uc3QgdGRTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHsgdGV4dEFsaWduOiAnY2VudGVyJywgd2lkdGg6IGNvbHMgPyAoNTUwIC8gKGNvbHMubGVuZ3RoKSkudG9TdHJpbmcoKSArICdweCcgOiAnJyB9O1xyXG4gICAgcmV0dXJuIDxEZXNwbGVnYXJDYXNpbGxlcm9cclxuICAgICAgICBpZD17aWR9XHJcbiAgICAgICAgY2FzaWxsZXJvPXtjYXNpbGxlcm99XHJcbiAgICAgICAgb2N1bHRhci1zYWx0ZWFkYT17Y2FzaWxsZXJvLmRlc3BsaWVndWVPY3VsdGEgPyAoY2FzaWxsZXJvLmV4cHJlc2lvbl9oYWJpbGl0YXJfanMgPyAnSU5IQUJJTElUQVInIDogJ1NJJykgOiAnTk8nfVxyXG4gICAgPlxyXG4gICAgICAgIDxFbmNhYmV6YWRvRGVzcGxpZWd1ZVxyXG4gICAgICAgICAgICBjYXNpbGxlcm89e2Nhc2lsbGVyb31cclxuICAgICAgICAgICAgbGVlcj17Y2FzaWxsZXJvLmxlZXIgIT09IGZhbHNlfVxyXG4gICAgICAgICAgICBmb3JQaz17cHJvcHMuZm9yUGt9XHJcbiAgICAgICAgLz5cclxuICAgICAgICA8dGFibGUgY2xhc3NOYW1lPVwidGFibGUgdGFibGUtc3RyaXBlZFwiPlxyXG4gICAgICAgICAgICA8dGhlYWQ+XHJcbiAgICAgICAgICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRoPjwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAge2NvbHM/Lm1hcCgoY29sLCBpKSA9PiA8dGgga2V5PXtpfSBzY29wZT1cImNvbFwiIHN0eWxlPXt0ZFN0eWxlfT57Y29sfTwvdGg+KX1cclxuICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgIDwvdGhlYWQ+XHJcbiAgICAgICAgICAgIDx0Ym9keT5cclxuICAgICAgICAgICAgICAgIHsoY2FzaWxsZXJvLmNhc2lsbGVyb3MgYXMgKE9wY2lvbk11bHRpcGxlIHwgQ29uc2lzdGVuY2lhKVtdKS5tYXAoKG9wY2lvbk11bHRpcGxlLCBpKSA9PlxyXG4gICAgICAgICAgICAgICAgICAgIG9wY2lvbk11bHRpcGxlLnRpcG9jID09ICdPTScgP1xyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dHIga2V5PXtpfT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD57b3BjaW9uTXVsdGlwbGUubm9tYnJlfTwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7b3BjaW9uTXVsdGlwbGUuY2FzaWxsZXJvcy5tYXAoKHByZWd1bnRhKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGlkID0gYHByZWd1bnRhLSR7cHJlZ3VudGEuaWRfY2FzaWxsZXJvfWBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdpc3RyYXJFbGVtZW50byh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3Q6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bjogcmVnaXN0cmFkb3JEZVZhcmlhYmxlKHByZWd1bnRhIGFzIHVua25vd24gYXMgUHJlZ3VudGEpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gPHRkIGtleT17aWR9IGlkPXtpZH0+PFByZWd1bnRhRGVzcGxpZWd1ZSBmb3JQaz17cHJvcHMuZm9yUGt9IHByZWd1bnRhPXtwcmVndW50YSBhcyB1bmtub3duIGFzIFByZWd1bnRhfSBkZXNwbGllZ3VlRW5jYWJlemFkbz1cInN1cGVyaW9yXCIgcGFyYVBNYXRyaXo9e3RydWV9IC8+PC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RyPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgOiAvL2xhcyBjb25zaXN0ZW5jaWFzIHB1ZWRlbiBzZXIgaGVybWFuYXMgZGUgT01cclxuICAgICAgICAgICAgICAgICAgICAgICAgPENvbnNpc3RlbmNpYURlc3BsaWVndWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleT17b3BjaW9uTXVsdGlwbGUuaWRfY2FzaWxsZXJvfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzaWxsZXJvPXtvcGNpb25NdWx0aXBsZX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvclBrPXtwcm9wcy5mb3JQa31cclxuICAgICAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICl9XHJcbiAgICAgICAgICAgIDwvdGJvZHk+XHJcbiAgICAgICAgPC90YWJsZT5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJwaWUtcHJlZ3VudGFcIj48L2Rpdj5cclxuICAgIDwvRGVzcGxlZ2FyQ2FzaWxsZXJvPlxyXG59XHJcblxyXG52YXIgY2FsY3VsYXJEaXNhYmxlZEJGQWdyZWdhckxpc3RvID0gKFxyXG4gICAgY29uZmlnU29ydGVvRm9ybXVsYXJpbzogQ29uZmlndXJhY2lvblNvcnRlb0Zvcm11bGFyaW8gfCBudWxsLFxyXG4gICAgaGFiaWxpdGFjaW9uQm90b25Gb3JtdWxhcmlvOiBDb25maWd1cmFjaW9uSGFiaWxpdGFyQm90b25Gb3JtdWxhcmlvIHwgbnVsbCxcclxuICAgIGZvcm11bGFyaW86IElkRm9ybXVsYXJpb1xyXG4pID0+IHtcclxuICAgIGlmIChoYWJpbGl0YWNpb25Cb3RvbkZvcm11bGFyaW8gJiYgaGFiaWxpdGFjaW9uQm90b25Gb3JtdWxhcmlvW2Zvcm11bGFyaW9dKSB7XHJcbiAgICAgICAgcmV0dXJuICFoYWJpbGl0YWNpb25Cb3RvbkZvcm11bGFyaW9bZm9ybXVsYXJpb10uaGFiaWxpdGFyX2FncmVnYXJfbGlzdG9cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuICEhKGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW8gJiYgY29uZmlnU29ydGVvRm9ybXVsYXJpby5pZF9mb3JtdWxhcmlvX2luZGl2aWR1YWwgPT0gZm9ybXVsYXJpbylcclxuICAgIH1cclxufVxyXG5cclxuZnVuY3Rpb24gYm90b25lc0RlbEZvcm11bGFyaW8ocjogUmVzcHVlc3RhcywgdW5pZGFkX2FuYWxpc2lzOiBJZFVuaWRhZEFuYWxpc2lzLCBlc3RydWN0dXJhOiBFc3RydWN0dXJhLCBmb3JQa1BhZHJlOiBGb3JQaywgZmVlZGJhY2tBbGw6IHsgW2Zvcm11bGFyaW8gaW4gUGxhaW5Gb3JQa106IEZvcm1TdHJ1Y3R1cmVTdGF0ZTxJZFZhcmlhYmxlLCBWYWxvciwgSWRGaW4+IH0pOiBIdG1sVGFnPEhUTUxEaXZFbGVtZW50PiB7XHJcbiAgICB2YXIgZm9ybXNWaXZpZW5kYSA9IGdldEZvcm11bGFyaW9zRm9yVmFsdWVQa1JhaXooZm9yUGtQYWRyZVtlc3RydWN0dXJhLnBrQWdyZWdhZGFVYVBwYWxdKTtcclxuICAgIHZhciB1YURlZiA9IGVzdHJ1Y3R1cmEudW5pZGFkZXNfYW5hbGlzaXNbdW5pZGFkX2FuYWxpc2lzXTtcclxuICAgIHZhciBhcnJheUVzdHJ1Y3R1cmFGb3JtdWxhcmlvcyA9IChsaWtlQXIoZXN0cnVjdHVyYS5mb3JtdWxhcmlvcykpLmFycmF5KCk7XHJcbiAgICB2YXIgeCA9IGxpa2VBcih1YURlZi5oaWphcykuZmlsdGVyKHVhSGlqYSA9PlxyXG4gICAgICAgIC8vZGVzY2FydG8gdWFzIHF1ZSBubyBlc3TDqW4gZW4gbmluZ3VuIGZvcm1cclxuICAgICAgICBhcnJheUVzdHJ1Y3R1cmFGb3JtdWxhcmlvcy5maWx0ZXIoKGluZm9Gb3JtdWxhcmlvKSA9PlxyXG4gICAgICAgICAgICBpbmZvRm9ybXVsYXJpby5jYXNpbGxlcm9zLnVuaWRhZF9hbmFsaXNpcyA9PSB1YUhpamE/LnVuaWRhZF9hbmFsaXNpcyAmJiBmb3Jtc1ZpdmllbmRhLmluY2x1ZGVzKGluZm9Gb3JtdWxhcmlvLmNhc2lsbGVyb3MuaWRfY2FzaWxsZXJvIGFzIElkRm9ybXVsYXJpbylcclxuICAgICAgICApLmxlbmd0aCA+IDBcclxuICAgICkubWFwKHVhSGlqYSA9PiAoXHJcbiAgICAgICAgdWFIaWphID09IG51bGwgPyBudWxsIDpcclxuICAgICAgICAgICAgaHRtbC5kaXYoeyBjbGFzczogJ3VhLWhpamFzJyB9LCBbXHJcbiAgICAgICAgICAgICAgICBodG1sLmRpdih1YUhpamEudW5pZGFkX2FuYWxpc2lzKSxcclxuICAgICAgICAgICAgICAgIGh0bWwuZGl2KFxyXG4gICAgICAgICAgICAgICAgICAgIGxpa2VBcihyW3VhSGlqYS51bmlkYWRfYW5hbGlzaXNdIHx8IFtdKS5tYXAoKHJlc3B1ZXN0YXNIaWphLCBpKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBudW0gPSBOdW1iZXIoaSkgKyAxXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmb3JQa0hpamFQYXJjaWFsID0geyAuLi5mb3JQa1BhZHJlLCBbdWFIaWphLnBrX2FncmVnYWRhXTogbnVtIH07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb25maWdTb3J0ZW9Gb3JtdWxhcmlvID0gZXN0cnVjdHVyYS5jb25maWdTb3J0ZW8gPyBlc3RydWN0dXJhLmNvbmZpZ1NvcnRlb1tnZXRNYWluRm9ybUZvclZpdmllbmRhKGZvclBrUGFkcmVbZXN0cnVjdHVyYS5wa0FncmVnYWRhVWFQcGFsXSldIDogbnVsbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaGFiaWxpdGFjaW9uQm90b25Gb3JtdWxhcmlvID0gZXN0cnVjdHVyYS5oYWJpbGl0YWNpb25Cb3RvbkZvcm11bGFyaW87XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBodG1sLmRpdih7IGNsYXNzOiAnbnVtZXJhZG9yLXVhJyB9LCBbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBodG1sLmRpdih7IGNsYXNzOiAnYm90b25lcy11YScgfSwgW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh0bWwuZGl2KHsgY2xhc3M6ICdudW1lcm8tdWEnIH0sIG51bS50b1N0cmluZygpKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5saWtlQXIoZXN0cnVjdHVyYS5mb3JtdWxhcmlvcylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmZpbHRlcihmb3JtRGVmID0+IGZvcm1EZWYuY2FzaWxsZXJvcy51bmlkYWRfYW5hbGlzaXMgPT0gdWFIaWphLnVuaWRhZF9hbmFsaXNpcyAmJiBmb3Jtc1ZpdmllbmRhLmluY2x1ZGVzKGZvcm1EZWYuY2FzaWxsZXJvcy5pZF9jYXNpbGxlcm8gYXMgSWRGb3JtdWxhcmlvKSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLm1hcCgoX2Zvcm1EZWYsIGZvcm11bGFyaW8pID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmb3JQayA9IHsgLi4uZm9yUGtIaWphUGFyY2lhbCwgZm9ybXVsYXJpbyB9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZlZWRiYWNrRm9ybSA9IGZlZWRiYWNrQWxsW3RvUGxhaW5Gb3JQayhmb3JQayldO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZlZWRiYWNrRm9ybSA/IGh0bWwuZGl2KHt9LCBbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaHRtbC5idXR0b24oKHVhSGlqYSEpLnBrX2FncmVnYWRhK1wiIG9rOiBcIisoTnVtYmVyKGkpKzEpKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3RvbkZvcm11bGFyaW9Db25SZXN1bWVuKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JQayxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdHVhbDogdHJ1ZSB8fCBjYWxjdWxhckFjdHVhbEJGKGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW8sIG51bSwgbnVsbCwgZm9ybXVsYXJpbywgciksIC8vUkVWSVNBUiB0cnVlIHBhcmEgcXVlIG5vIHNlIGdyaXNlblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldmlvOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkOiBjYWxjdWxhckRpc2FibGVkQkYoY29uZmlnU29ydGVvRm9ybXVsYXJpbywgaGFiaWxpdGFjaW9uQm90b25Gb3JtdWxhcmlvLCBudW0sIGZvcm11bGFyaW8sIHIpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZlZWRiYWNrRm9ybSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBkZXNwbGllZ3VlT2N1bHRhOiBmYWxzZSwgZXhwcmVzaW9uX2hhYmlsaXRhcl9qczogJycsIG5vbWJyZTogZm9ybXVsYXJpbywgYWNsYXJhY2lvbjogbnVsbCwgc2FsdG86IGZvcm11bGFyaW8gfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yUGtQYWRyZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJib3Rvbi1pci1yZXN1bWVuLWZvcm11bGFyaW9cIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXN0cnVjdHVyYS5mb3JtdWxhcmlvc1tmb3JtdWxhcmlvXS5jYXNpbGxlcm9zXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSkgOiBudWxsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLmFycmF5KCkubWFwKHggPT4geCA9PSBudWxsID8gbnVsbCA6IHgpLnJldmVyc2UoKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIGJvdG9uZXNEZWxGb3JtdWxhcmlvKHJlc3B1ZXN0YXNIaWphLCB1YUhpamEudW5pZGFkX2FuYWxpc2lzLCBlc3RydWN0dXJhLCBmb3JQa0hpamFQYXJjaWFsLCBmZWVkYmFja0FsbClcclxuICAgICAgICAgICAgICAgICAgICAgICAgXSlcclxuICAgICAgICAgICAgICAgICAgICB9KS5hcnJheSgpLm1hcCh4ID0+IHggPT0gbnVsbCA/IG51bGwgOiB4KVxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICBdKVxyXG4gICAgKSkuYXJyYXkoKS5tYXAoeCA9PiB4ID09IG51bGwgPyBudWxsIDogeCk7XHJcbiAgICByZXR1cm4gaHRtbC5kaXYoLyp7c3R5bGU6J2Rpc3BsYXk6ZmxleDsgZmxleC1kaXJlY3Rpb246cm93J30sKi94KTtcclxufVxyXG5cclxuZnVuY3Rpb24gVGV4dG9EZXNwbGllZ3VlKHByb3BzOiB7IGNhc2lsbGVybzogVGV4dG8sIGZvclBrOiBGb3JQayB9KSB7XHJcbiAgICB2YXIgeyBjYXNpbGxlcm8sIGZvclBrIH0gPSBwcm9wcztcclxuICAgIGNvbnN0IGRpc3BhdGNoID0gdXNlRGlzcGF0Y2goKTtcclxuICAgIHZhciBoYWJpbGl0YWRvciA9IGNhc2lsbGVyby5leHByZXNpb25faGFiaWxpdGFyX2pzID8gZ2V0RnVuY2lvbkhhYmlsaXRhcihjYXNpbGxlcm8uZXhwcmVzaW9uX2hhYmlsaXRhcl9qcykgOiAoKSA9PiB0cnVlO1xyXG4gICAgdmFyIHsgbW9kb0Rlc3BsaWVndWUgfSA9IHVzZVNlbGVjdG9yVml2aWVuZGEoZm9yUGspO1xyXG4gICAgdmFyIGlkID0gYHRleHRvLSR7Y2FzaWxsZXJvLmlkX2Nhc2lsbGVyb31gO1xyXG4gICAgcmVnaXN0cmFyRWxlbWVudG8oeyBpZCwgc3R5bGU6ICdkaXNwbGF5JywgZnVuOiAocjogUmVzcHVlc3RhcykgPT4gaGFiaWxpdGFkb3IocikgfHwgbW9kb0Rlc3BsaWVndWUgPT0gJ21ldGFkYXRvcycgPyAnYmxvY2snIDogJ25vbmUnIH0pXHJcbiAgICB2YXIgZXNSZXN1bWVuRm9ybXVsYXJpbyA9IGNhc2lsbGVyby5jYXNpbGxlcm8gPT0gJ1Jlc0ZvcicgYXMgSWRDYXNpbGxlcm87IC8vIFRPRE86IENhbWJpYSBlc3RvIHF1ZSBlc3TDoSBqYXJjb2RlYWRvLlxyXG4gICAgaWYgKGVzUmVzdW1lbkZvcm11bGFyaW8pIHtcclxuICAgICAgICByZWdpc3RyYXJFbGVtZW50byh7XHJcbiAgICAgICAgICAgIGlkLCBkaXJlY3Q6IHRydWUsXHJcbiAgICAgICAgICAgIGZ1bjogKFxyXG4gICAgICAgICAgICAgICAgcjogUmVzcHVlc3RhcyxcclxuICAgICAgICAgICAgICAgIF9mZWVkYmFja0Zvcm06IEZvcm1TdHJ1Y3R1cmVTdGF0ZTxJZFZhcmlhYmxlLCBWYWxvciwgSWRGaW4+LFxyXG4gICAgICAgICAgICAgICAgZWxlbWVudG86IEhUTUxEaXZFbGVtZW50LFxyXG4gICAgICAgICAgICAgICAgZmVlZGJhY2tBbGw6IHsgW2Zvcm11bGFyaW8gaW4gUGxhaW5Gb3JQa106IEZvcm1TdHJ1Y3R1cmVTdGF0ZTxJZFZhcmlhYmxlLCBWYWxvciwgSWRGaW4+IH0sXHJcbiAgICAgICAgICAgICAgICBlc3RydWN0dXJhOiBFc3RydWN0dXJhXHJcbiAgICAgICAgICAgICkgPT4ge1xyXG4gICAgICAgICAgICAgICAgZWxlbWVudG8uc3R5bGUuZGlzcGxheSA9ICcnO1xyXG4gICAgICAgICAgICAgICAgLy9AdHMtaWdub3JlIGxhcyByZXNwdWVzdGFzIHNvbiByZXNwdWVzdGFzUmFpeiBwb3JxdWUgUmVzRm9yIGVzdMOhIGVuIGVsIGZvcm0gcHBhbFxyXG4gICAgICAgICAgICAgICAgaWYgKHJbJ3Jlc3VtZW5Fc3RhZG8nXSBhcyBSZXN1bWVuRXN0YWRvID09ICd2YWNpbycpIHtcclxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50by50ZXh0Q29udGVudCA9IFwicmVsZXZhbWllbnRvIHNpbiBlbXBlemFyXCI7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnRvLnRleHRDb250ZW50ID0gXCJyZWxldmFtaWVudG8gZW1wZXphZG9cIjtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgeyB1bmlkYWRfYW5hbGlzaXMgfSA9IGVzdHJ1Y3R1cmEuZm9ybXVsYXJpb3NbZm9yUGsuZm9ybXVsYXJpb10uY2FzaWxsZXJvcztcclxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50by5pbm5lckhUTUwgPSBcIlwiO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnRvLmFwcGVuZENoaWxkKGJvdG9uZXNEZWxGb3JtdWxhcmlvKHIsIHVuaWRhZF9hbmFsaXNpcywgZXN0cnVjdHVyYSwgZm9yUGssIGZlZWRiYWNrQWxsKS5jcmVhdGUoKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgfVxyXG4gICAgdmFyIGlyID0gKGRlZkJvdG9uOiBEZWZpbmljaW9uRm9ybXVsYXJpb0FicmlyKSA9PiB7XHJcbiAgICAgICAgLy8gdmFyIG51ZXZhRm9yUGs9ey4uLmZvclBrLCBmb3JtdWxhcmlvOmlkRm9ybXVsYXJpb0Rlc3Rpbm99O1xyXG4gICAgICAgIC8vIG51ZXZhRm9yUGtbbnVldm9DYW1wb1BrXSA9IGRlZkJvdG9uLm51bVxyXG4gICAgICAgIGRpc3BhdGNoQnlQYXNzKGFjY2lvbl9hYnJpcl9mb3JtdWxhcmlvLCB7IGZvclBrOiBkZWZCb3Rvbi5mb3JQayB9KTtcclxuICAgICAgICBkaXNwYXRjaChkaXNwYXRjaGVycy5DQU1CSUFSX0ZPUk1VTEFSSU8oeyBmb3JQazogZGVmQm90b24uZm9yUGssIGFwaWxhclZ1ZWx0YTogdHJ1ZSB9KSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gPERlc3BsZWdhckNhc2lsbGVyb1xyXG4gICAgICAgIGlkPXtgJHtpZH0tZXh0ZXJub2B9XHJcbiAgICAgICAgY2FzaWxsZXJvPXtjYXNpbGxlcm99XHJcbiAgICA+XHJcbiAgICAgICAgPEVuY2FiZXphZG9EZXNwbGllZ3VlIGNhc2lsbGVybz17Y2FzaWxsZXJvfSBsZWVyPXtmYWxzZX0gZm9yUGs9e2ZvclBrfSAvPlxyXG4gICAgICAgIDxkaXYgaWQ9e2lkfSBzdHlsZT17eyBkaXNwbGF5OiAnbm9uZScgfX0+PC9kaXY+XHJcbiAgICAgICAge2VzUmVzdW1lbkZvcm11bGFyaW8gP1xyXG4gICAgICAgICAgICA8QnV0dG9uIGNsYXNzTmFtZT1cInNwZWNpYWwtYnV0dG9uXCIgaWQ9XCJib3Rvbi1pci1yZXN1bWVuLWZvcm11bGFyaW9cIiBzdHlsZT17eyBkaXNwbGF5OiAnbm9uZScgfX1cclxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9eyhldmVudCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlyKEpTT04ucGFyc2UoKGV2ZW50LnRhcmdldCEgYXMgdW5rbm93biBhcyBIVE1MQnV0dG9uRWxlbWVudCkuZ2V0QXR0cmlidXRlKCdkZWYtYnV0dG9uJykhKSlcclxuICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgID5pciAoaW50ZXJubyk8L0J1dHRvbj5cclxuICAgICAgICAgICAgOiBudWxsfVxyXG5cclxuICAgIDwvRGVzcGxlZ2FyQ2FzaWxsZXJvPlxyXG59XHJcblxyXG5mdW5jdGlvbiBGaWx0cm9EZXNwbGllZ3VlKHByb3BzOiB7IGZpbHRybzogRmlsdHJvLCBmb3JQazogRm9yUGsgfSkge1xyXG4gICAgdmFyIHsgZmlsdHJvIH0gPSBwcm9wcztcclxuICAgIHJldHVybiA8RGVzcGxlZ2FyQ2FzaWxsZXJvIGNhc2lsbGVybz17ZmlsdHJvfT5cclxuICAgICAgICA8RGVzcGxpZWd1ZUVuY2FiZXphZG8gY2FzaWxsZXJvPXtmaWx0cm99IC8+XHJcbiAgICA8L0Rlc3BsZWdhckNhc2lsbGVybz5cclxufVxyXG5cclxuZnVuY3Rpb24gQ29uc2lzdGVuY2lhRGVzcGxpZWd1ZShwcm9wczogeyBjYXNpbGxlcm86IENvbnNpc3RlbmNpYSwgZm9yUGs6IEZvclBrIH0pIHtcclxuICAgIHZhciB7IGNhc2lsbGVybywgZm9yUGsgfSA9IHByb3BzO1xyXG4gICAgdmFyIGhhYmlsaXRhZG9yID0gY2FzaWxsZXJvLmV4cHJlc2lvbl9oYWJpbGl0YXJfanMgPyBnZXRGdW5jaW9uSGFiaWxpdGFyKGNhc2lsbGVyby5leHByZXNpb25faGFiaWxpdGFyX2pzKSA6ICgpID0+IHRydWU7XHJcbiAgICB2YXIgeyBtb2RvRGVzcGxpZWd1ZSB9ID0gdXNlU2VsZWN0b3JWaXZpZW5kYShmb3JQayk7XHJcbiAgICB2YXIgaWQgPSBgY29uc2lzdGVuY2lhLSR7Y2FzaWxsZXJvLmlkX2Nhc2lsbGVyb31gO1xyXG4gICAgcmVnaXN0cmFyRWxlbWVudG8oeyBpZCwgc3R5bGU6ICdkaXNwbGF5JywgZnVuOiAocjogUmVzcHVlc3RhcykgPT4gaGFiaWxpdGFkb3IocikgfHwgbW9kb0Rlc3BsaWVndWUgPT0gJ21ldGFkYXRvcycgPyAnYmxvY2snIDogJ25vbmUnIH0pXHJcbiAgICByZXR1cm4gPERlc3BsZWdhckNhc2lsbGVyb1xyXG4gICAgICAgIGlkPXtpZH1cclxuICAgICAgICBjYXNpbGxlcm89e2Nhc2lsbGVyb31cclxuICAgICAgICBzdHlsZT17eyBkaXNwbGF5OiAnbm9uZScgfX1cclxuICAgID5cclxuICAgICAgICA8RW5jYWJlemFkb0Rlc3BsaWVndWUgY2FzaWxsZXJvPXtjYXNpbGxlcm99IGxlZXI9e2ZhbHNlfSBmb3JQaz17Zm9yUGt9IC8+XHJcbiAgICA8L0Rlc3BsZWdhckNhc2lsbGVybz5cclxufVxyXG5cclxudHlwZSBEZWZpbmljaW9uRm9ybXVsYXJpb0FicmlyID1cclxuICAgICh7IGZvclBrOiBGb3JQaywgbnVtOiBudW1iZXIsIGFjdHVhbDogYm9vbGVhbiwgcHJldmlvOiBib29sZWFuIH0gfFxyXG4gICAgeyBmb3JQazogRm9yUGssIG51bTogbnVtYmVyLCBhY3R1YWw6IGJvb2xlYW4sIHByZXZpbzogZmFsc2UsIGVzQWdyZWdhcjogdHJ1ZSB9IHxcclxuICAgIHsgZm9yUGs6IEZvclBrLCBudW06IG51bWJlciwgYWN0dWFsOiBib29sZWFuLCBwcmV2aW86IGZhbHNlLCBlc0NvbmZpcm1hcjogdHJ1ZSB9IHxcclxuICAgIHsgZm9yUGs6IEZvclBrLCBudW06IG51bWJlciwgYWN0dWFsOiBib29sZWFuLCBwcmV2aW86IGZhbHNlLCBwZXJtaXRlQm9ycmFyOiBib29sZWFuIH0gfFxyXG4gICAgeyBmb3JQazogRm9yUGssIG51bTogZmFsc2UsIGFjdHVhbDogYm9vbGVhbiwgcHJldmlvOiB0cnVlLCB1bmljbzogdHJ1ZSB9KVxyXG4gICAgJiB7IGVzQ29uZmlybWFyPzogdHJ1ZSwgZXNBZ3JlZ2FyPzogdHJ1ZSwgcGVybWl0ZUJvcnJhcj86IGJvb2xlYW4sIHBlcm1pdGVCb3JyYXJHYWJpbmV0ZT86IGJvb2xlYW4sIGRpc2FibGVkPzogYm9vbGVhbiB8IHVuZGVmaW5lZCB9O1xyXG5cclxuXHJcbnZhciBib3RvbkZvcm11bGFyaW9Db25SZXN1bWVuID0gKFxyXG4gICAgZGVmQm90b246IERlZmluaWNpb25Gb3JtdWxhcmlvQWJyaXIsXHJcbiAgICBmZWVkYmFja0Zvcm06IEZvcm1TdHJ1Y3R1cmVTdGF0ZTxJZFZhcmlhYmxlLCBWYWxvciwgSWRGaW4+LFxyXG4gICAgcmVzcHVlc3Rhc0F1bWVudGFkYXM6IFJlc3B1ZXN0YXMsXHJcbiAgICBjYXNpbGxlcm86IHsgZGVzcGxpZWd1ZU9jdWx0YT86IGJvb2xlYW4gfCBudWxsLCBleHByZXNpb25faGFiaWxpdGFyX2pzPzogc3RyaW5nLCBhY2xhcmFjaW9uOiBzdHJpbmcgfCBudWxsLCBleHByZXNpb25faGFiaWxpdGFyPzogc3RyaW5nLCBub21icmU/OiBzdHJpbmcsIHNhbHRvOiBzdHJpbmcgfCBudWxsLCBlc3BlY2lhbD86IGFueSB9LFxyXG4gICAgZm9yUGtQYWRyZTogRm9yUGssXHJcbiAgICBpZEJ1dHRvbjogc3RyaW5nLFxyXG4gICAgZm9ybXVsYXJpb0FBYnJpcjogRm9ybXVsYXJpbyxcclxuICAgIHBlZGlyQ29uZmlybWFjaW9uQm9ycmFkbz86IChkZWZCb3RvbjogRGVmaW5pY2lvbkZvcm11bGFyaW9BYnJpciwgZm9yUGtQYWRyZTogRm9yUGspID0+IHZvaWRcclxuKSA9PiB7XHJcbiAgICB2YXIgZm9yUGs6IEZvclBrID0gZGVmQm90b24uZm9yUGs7XHJcbiAgICB2YXIgc3VmaWpvSWRFbGVtZW50byA9IHRvUGxhaW5Gb3JQayhmb3JQaykgKyAoZGVmQm90b24uZXNDb25maXJtYXIgPyAnLWxpc3RvJyA6ICcnKTtcclxuICAgIHZhciBpZCA9IGBkaXYtYm90b24tZm9ybXVsYXJpby0ke3N1Zmlqb0lkRWxlbWVudG99YDtcclxuICAgIHZhciBlc3RhZG8gPSBmZWVkYmFja0Zvcm0ucmVzdW1lbjtcclxuICAgIHJldHVybiBodG1sLnRyKHtcclxuICAgICAgICBpZCxcclxuICAgICAgICBjbGFzczogXCJzZWNjaW9uLWJvdG9uLWZvcm11bGFyaW9cIixcclxuICAgICAgICAkYXR0cnM6IHtcclxuICAgICAgICAgICAgXCJudWVzdHJvLXZhbGlkYXRvclwiOiBkZWZCb3Rvbi5hY3R1YWwgPyAnYWN0dWFsJyA6IGRlZkJvdG9uLnByZXZpbyA/ICd2YWxpZGEnIDogJ3RvZGF2aWFfbm8nLFxyXG4gICAgICAgICAgICBcIm9jdWx0YXItc2FsdGVhZGFcIjogY2FzaWxsZXJvLmRlc3BsaWVndWVPY3VsdGEgPyAoY2FzaWxsZXJvLmV4cHJlc2lvbl9oYWJpbGl0YXJfanMgPyAnSU5IQUJJTElUQVInIDogJ1NJJykgOiAnTk8nLFxyXG4gICAgICAgICAgICBcInRpZW5lLXZhbG9yXCI6IFwiTk9cIixcclxuICAgICAgICAgICAgXCJkZWYtYnV0dG9uXCI6IEpTT04uc3RyaW5naWZ5KGRlZkJvdG9uKVxyXG4gICAgICAgIH1cclxuICAgIH0sIFtcclxuICAgICAgICBjYXNpbGxlcm8uYWNsYXJhY2lvbiA/XHJcbiAgICAgICAgICAgIGh0bWwudGQoeyBjbGFzczogXCJhY2xhcmFjaW9uXCIgfSwgW2JyZWFrZWFibGVUZXh0KGNhc2lsbGVyby5hY2xhcmFjaW9uKV0pXHJcbiAgICAgICAgICAgIDogbnVsbCxcclxuICAgICAgICBodG1sLnRkKHtcclxuICAgICAgICAgICAgY29sc3BhbjogKGRlZkJvdG9uLmVzQWdyZWdhciB8fCBkZWZCb3Rvbi5lc0NvbmZpcm1hcikgP1xyXG4gICAgICAgICAgICAgICAgKGNhc2lsbGVyby5lc3BlY2lhbD8uY2FtcG9zUmVzdW1lbi5sZW5ndGggPz8gMSkgKyAoY2FzaWxsZXJvLmFjbGFyYWNpb24gPyAwIDogMSlcclxuICAgICAgICAgICAgICAgIDogbnVsbFxyXG4gICAgICAgIH0sIFtcclxuICAgICAgICAgICAgQnV0dG9uMih7XHJcbiAgICAgICAgICAgICAgICAvLyBpZDpgdmFyLSR7aWRWYXJpYWJsZX1gLFxyXG4gICAgICAgICAgICAgICAgaWQ6IGBib3Rvbi1mb3JtdWxhcmlvLSR7c3VmaWpvSWRFbGVtZW50b31gLFxyXG4gICAgICAgICAgICAgICAgdmFyaWFudDogZGVmQm90b24uYWN0dWFsID8gXCJjb250YWluZWRcIiA6IFwib3V0bGluZWRcIixcclxuICAgICAgICAgICAgICAgIGRpc2FibGVkOiBkZWZCb3Rvbi5kaXNhYmxlZCxcclxuICAgICAgICAgICAgICAgIGNvbG9yOiBkZWZCb3Rvbi5hY3R1YWwgPyBcInByaW1hcnlcIiA6IFwiaW5oZXJpdFwiLFxyXG4gICAgICAgICAgICAgICAgb25DbGljazogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChkZWZCb3Rvbi5lc0NvbmZpcm1hcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGVmQm90b24ubnVtICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjYXNpbGxlcm8uc2FsdG8pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB7IGxpc3RvLCBhZ3JlZ2FyIH0gPSBnZXRCRlZhck5hbWVzKGNhc2lsbGVyby5zYWx0byk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2hCeVBhc3MoYWNjaW9uX3JlZ2lzdHJhcl9yZXNwdWVzdGEsIHsgZm9yUGs6IGZvclBrUGFkcmUsIHZhcmlhYmxlOiBsaXN0bywgcmVzcHVlc3RhOiBkZWZCb3Rvbi5udW0gYXMgVmFsb3IgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2hCeVBhc3MoYWNjaW9uX3JlZ2lzdHJhcl9yZXNwdWVzdGEsIHsgZm9yUGs6IGZvclBrUGFkcmUsIHZhcmlhYmxlOiBhZ3JlZ2FyLCByZXNwdWVzdGE6IDEgYXMgVmFsb3IgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2FzaWxsZXJvLmV4cHJlc2lvbl9oYWJpbGl0YXIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwYXRjaEJ5UGFzcyhhY2Npb25fcmVnaXN0cmFyX3Jlc3B1ZXN0YSwgeyBmb3JQazogZm9yUGtQYWRyZSwgdmFyaWFibGU6IGNhc2lsbGVyby5leHByZXNpb25faGFiaWxpdGFyIGFzIElkVmFyaWFibGUsIHJlc3B1ZXN0YTogZGVmQm90b24ubnVtIGFzIFZhbG9yIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJ1dHRvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkQnV0dG9uKSEgYXMgSFRNTEJ1dHRvbkVsZW1lbnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1dHRvbi5zZXRBdHRyaWJ1dGUoJ2RlZi1idXR0b24nLCBKU09OLnN0cmluZ2lmeShkZWZCb3RvbikpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBidXR0b24uY2xpY2soKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgJGF0dHJzOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgXCJyZXN1bWVuLWVzdGFkb1wiOiBlc3RhZG8gIT0gJ3ZhY2lvJyA/IGVzdGFkbyA6IGRlZkJvdG9uLmFjdHVhbCA/ICdhY3R1YWwnIDogZGVmQm90b24ucHJldmlvID8gZXN0YWRvIDogJ3RvZGF2aWFfbm8nLFxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgLCBjaGlsZHJlbjogW1xyXG4gICAgICAgICAgICAgICAgICAgIChkZWZCb3Rvbi5lc0FncmVnYXIgPyAnYWdyZWdhcicgOiBkZWZCb3Rvbi5lc0NvbmZpcm1hciA/ICdMaXN0bycgOiBjYXNpbGxlcm8ubm9tYnJlICsgJyAnICsgKGRlZkJvdG9uLm51bSB8fCAnJykpLFxyXG4gICAgICAgICAgICAgICAgICAgIGh0bWwuc3ZnKHsgZm9jdXNhYmxlOiBmYWxzZSwgdmlld2JveDogXCIwIDAgMjQgMjRcIiwgXCJhcmlhLWhpZGRlblwiOiBcInRydWVcIiwgc3R5bGU6IHN0eWxlVG9Dc3MoeyBmaWxsOiBcImN1cnJlbnRDb2xvclwiIH0pIH0sIFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaHRtbC5wYXRoKHsgZDogKGRlZkJvdG9uLmVzQWdyZWdhciA/IG1hdGVyaWFsSW9JY29uc1N2Z1BhdGguQWRkIDogZGVmQm90b24uZXNDb25maXJtYXIgPyBtYXRlcmlhbElvSWNvbnNTdmdQYXRoLkNoZWNrIDogY2FzaWxsZXJvLnNhbHRvID8gbWF0ZXJpYWxJb0ljb25zU3ZnUGF0aC5Gb3J3YXJkIDogbWF0ZXJpYWxJb0ljb25zU3ZnUGF0aC5FeGl0VG9BcHApLCBzdHlsZTogc3R5bGVUb0Nzcyh7IGZpbGw6ICdjdXJyZW50Q29sb3InIH0pIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgXSlcclxuICAgICAgICAgICAgICAgIF1cclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgIChkZWZCb3Rvbi5wZXJtaXRlQm9ycmFyIHx8IGRlZkJvdG9uLnBlcm1pdGVCb3JyYXJHYWJpbmV0ZSA/XHJcbiAgICAgICAgICAgICAgICBCdXR0b24yKHtcclxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6IFwiYm90b24tYm9ycmFyLXVhLXZhY2lhXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgY29sb3I6IFwiZGVmYXVsdFwiLFxyXG4gICAgICAgICAgICAgICAgICAgIHZhcmlhbnQ6IFwib3V0bGluZWRcIixcclxuICAgICAgICAgICAgICAgICAgICBzdHlsZTogeyBtYXJnaW5MZWZ0OiAnOHB4JyB9LFxyXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBodG1sLnN2Zyh7IGZvY3VzYWJsZTogZmFsc2UsIHZpZXdib3g6IFwiMCAwIDI0IDI0XCIsIFwiYXJpYS1oaWRkZW5cIjogXCJ0cnVlXCIsIHN0eWxlOiBzdHlsZVRvQ3NzKHsgZmlsbDogXCJjdXJyZW50Q29sb3JcIiB9KSB9LCBbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBodG1sLnBhdGgoeyBkOiBtYXRlcmlhbElvSWNvbnNTdmdQYXRoLkRlbGV0ZUZvcmV2ZXIsIHN0eWxlOiBzdHlsZVRvQ3NzKHsgZmlsbDogJ2N1cnJlbnRDb2xvcicgfSkgfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgXSksXHJcbiAgICAgICAgICAgICAgICAgICAgb25DbGljazogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGVmQm90b24ucGVybWl0ZUJvcnJhcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWNjaW9uX2JvcnJhcl9mb3JtdWxhcmlvKHsgZm9yUGssIGZvclBrUGFkcmUgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB7IGxpc3RvLCBhZ3JlZ2FyIH0gPSBnZXRCRlZhck5hbWVzKGNhc2lsbGVyby5zYWx0byk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGVmQm90b24ubnVtID09PSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2hCeVBhc3MoYWNjaW9uX3JlZ2lzdHJhcl9yZXNwdWVzdGEsIHsgZm9yUGs6IGZvclBrUGFkcmUsIHZhcmlhYmxlOiBhZ3JlZ2FyLCByZXNwdWVzdGE6IG51bGwgYXMgdW5rbm93biBhcyBWYWxvciB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoQnlQYXNzKGFjY2lvbl9yZWdpc3RyYXJfcmVzcHVlc3RhLCB7IGZvclBrOiBmb3JQa1BhZHJlLCB2YXJpYWJsZTogbGlzdG8sIHJlc3B1ZXN0YTogbnVsbCBhcyB1bmtub3duIGFzIFZhbG9yIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNhc2lsbGVyby5leHByZXNpb25faGFiaWxpdGFyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2hCeVBhc3MoYWNjaW9uX3JlZ2lzdHJhcl9yZXNwdWVzdGEsIHsgZm9yUGs6IGZvclBrUGFkcmUsIHZhcmlhYmxlOiBjYXNpbGxlcm8uZXhwcmVzaW9uX2hhYmlsaXRhciBhcyBJZFZhcmlhYmxlLCByZXNwdWVzdGE6IG51bGwgYXMgdW5rbm93biBhcyBWYWxvciB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChkZWZCb3Rvbi5wZXJtaXRlQm9ycmFyR2FiaW5ldGUgJiYgcGVkaXJDb25maXJtYWNpb25Cb3JyYWRvKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZWRpckNvbmZpcm1hY2lvbkJvcnJhZG8oZGVmQm90b24sIGZvclBrUGFkcmUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIDogbnVsbCksXHJcbiAgICAgICAgICAgIChkZWZCb3Rvbi5lc0NvbmZpcm1hciAmJiBjYXNpbGxlcm8uc2FsdG8gJiYgcmVzcHVlc3Rhc0F1bWVudGFkYXNbJyRCLkY6JyArIChjYXNpbGxlcm8uc2FsdG8uc3Vic3RyaW5nKDAsIDIpID09ICdGOicgPyBjYXNpbGxlcm8uc2FsdG8uc2xpY2UoMikgOiBjYXNpbGxlcm8uc2FsdG8pIGFzIElkVmFyaWFibGVdICE9IG51bGwgP1xyXG4gICAgICAgICAgICAgICAgQnV0dG9uMih7XHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBcImJvdG9uLWRlc2hhY2VyLWxpc3RvXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgY29sb3I6IFwiZGVmYXVsdFwiLFxyXG4gICAgICAgICAgICAgICAgICAgIHZhcmlhbnQ6IFwib3V0bGluZWRcIixcclxuICAgICAgICAgICAgICAgICAgICBzdHlsZTogeyBtYXJnaW5MZWZ0OiAnOHB4JyB9LFxyXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiRGVzaGFjZXIgTGlzdG9cIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgaHRtbC5zdmcoeyBmb2N1c2FibGU6IGZhbHNlLCB2aWV3Ym94OiBcIjAgMCAyNCAyNFwiLCBcImFyaWEtaGlkZGVuXCI6IFwidHJ1ZVwiLCBzdHlsZTogc3R5bGVUb0Nzcyh7IG1hcmdpbkxlZnQ6ICc0cHgnLCBoZWlnaHQ6ICcyMHB4JywgdmVydGljYWxBbGlnbjogJ21pZGRsZScgfSkgfSwgW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaHRtbC5wYXRoKHsgZDogbWF0ZXJpYWxJb0ljb25zU3ZnUGF0aC5EZWxldGVGb3JldmVyLCBzdHlsZTogc3R5bGVUb0Nzcyh7IGZpbGw6ICdjdXJyZW50Q29sb3InIH0pIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF0pLFxyXG4gICAgICAgICAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgICAgICAgICAgb25DbGljazogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB7IGxpc3RvLCBhZ3JlZ2FyIH0gPSBnZXRCRlZhck5hbWVzKGNhc2lsbGVyby5zYWx0byk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoQnlQYXNzKGFjY2lvbl9yZWdpc3RyYXJfcmVzcHVlc3RhLCB7IGZvclBrOiBmb3JQa1BhZHJlLCB2YXJpYWJsZTogYWdyZWdhciwgcmVzcHVlc3RhOiBudWxsIGFzIHVua25vd24gYXMgVmFsb3IgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoQnlQYXNzKGFjY2lvbl9yZWdpc3RyYXJfcmVzcHVlc3RhLCB7IGZvclBrOiBmb3JQa1BhZHJlLCB2YXJpYWJsZTogbGlzdG8sIHJlc3B1ZXN0YTogbnVsbCBhcyB1bmtub3duIGFzIFZhbG9yIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2FzaWxsZXJvLmV4cHJlc2lvbl9oYWJpbGl0YXIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoQnlQYXNzKGFjY2lvbl9yZWdpc3RyYXJfcmVzcHVlc3RhLCB7IGZvclBrOiBmb3JQa1BhZHJlLCB2YXJpYWJsZTogY2FzaWxsZXJvLmV4cHJlc2lvbl9oYWJpbGl0YXIgYXMgSWRWYXJpYWJsZSwgcmVzcHVlc3RhOiBudWxsIGFzIHVua25vd24gYXMgVmFsb3IgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgOiBudWxsKVxyXG4gICAgICAgIF0pLFxyXG4gICAgICAgIChkZWZCb3Rvbi5udW0gIT09IGZhbHNlICYmICFkZWZCb3Rvbi5lc0FncmVnYXIgJiYgIWRlZkJvdG9uLmVzQ29uZmlybWFyID9cclxuICAgICAgICAgICAgKGNhc2lsbGVyby5lc3BlY2lhbD8uY2FtcG9zUmVzdW1lbiA/PyBbLypkZWZCb3Rvbi5udW0udG9TdHJpbmcoKSovXSkubWFwKFxyXG4gICAgICAgICAgICAgICAgKGNhbXBvOiBzdHJpbmcpID0+IGh0bWwudGQoKHJlc3B1ZXN0YXNBdW1lbnRhZGFzW2Zvcm11bGFyaW9BQWJyaXIudW5pZGFkX2FuYWxpc2lzXVtkZWZCb3Rvbi5udW0gLSAxXVtjYW1wbyBhcyBJZFZhcmlhYmxlXSA/PyAnJykudG9TdHJpbmcoKSlcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICA6IG51bGwpXHJcbiAgICAgICAgLy8gaHRtbC5kaXYoe2NsYXNzOidpbmxpbmUtZGlhbG9nJywgJGF0dHJzOntcImlubGluZS1kaWFsb2ctb3BlblwiOiBjb25maXJtYXJGb3J6YXJJciA9PSBkZWZCb3Rvbi5udW0/J3Zpc2libGUnOidoaWRkZW4nfX0sWyAgICAgICAgICAgICAgICBdKVxyXG5cclxuICAgICAgICAvKlxyXG4gICAgICAgICAgICB7ZGVmQm90b24uZXNBZ3JlZ2FyPzw+IDxzcGFuPiAgPC9zcGFuPiA8QnV0dG9uXHJcbiAgICAgICAgICAgICAgICB2YXJpYW50PVwib3V0bGluZWRcIlxyXG4gICAgICAgICAgICAgICAgY29sb3I9XCJpbmhlcml0XCJcclxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpPT57XHJcbiAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICA+PElDT04uQ2hlY2svPjwvQnV0dG9uPjwvPjpudWxsfVxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgICovXHJcbiAgICBdKS5jcmVhdGUoKVxyXG59XHJcblxyXG52YXIgYnVzY2FySG5vc0Zvcm11bGFyaW8gPSAoaWRGb3JtdWxhcmlvRGVzdGlubzogSWRGb3JtdWxhcmlvKSA9PiB7XHJcbiAgICB2YXIgZXN0cnVjdHVyYSA9IGdldEVzdHJ1Y3R1cmEoKTtcclxuICAgIHZhciB1YSA9IGVzdHJ1Y3R1cmEuZm9ybXVsYXJpb3NbaWRGb3JtdWxhcmlvRGVzdGlub10uY2FzaWxsZXJvcy51bmlkYWRfYW5hbGlzaXM7XHJcbiAgICByZXR1cm4gbGlrZUFyKGVzdHJ1Y3R1cmEuZm9ybXVsYXJpb3MpXHJcbiAgICAgICAgLmZpbHRlcigoaW5mb0Zvcm11bGFyaW86IEluZm9Gb3JtdWxhcmlvLCBfaWRGb3JtOiBJZEZvcm11bGFyaW8pID0+XHJcbiAgICAgICAgICAgIGluZm9Gb3JtdWxhcmlvLmNhc2lsbGVyb3MudW5pZGFkX2FuYWxpc2lzID09IHVhXHJcbiAgICAgICAgKS5tYXAoKF9pbmZvRm9ybXVsYXJpbzogSW5mb0Zvcm11bGFyaW8sIGlkRm9ybTogSWRGb3JtdWxhcmlvKSA9PlxyXG4gICAgICAgICAgICBpZEZvcm1cclxuICAgICAgICApLmFycmF5KClcclxufVxyXG5cclxudmFyIGNoZWNrRm9ybXNWYWNpb3MgPSAoZm9ybXM6IElkRm9ybXVsYXJpb1tdLCBmZWVkYmFja0FsbDoge1xyXG4gICAgW2Zvcm11bGFyaW8gaW4gUGxhaW5Gb3JQa106IEZvcm1TdHJ1Y3R1cmVTdGF0ZTxJZFZhcmlhYmxlLCBWYWxvciwgSWRGaW4+IC8vIHJlc3VsdGFkbyBkZWwgcm93VmFsaWRhdG9yIHBhcmEgZXN0YWRvLmZvclBrXHJcbn0sIGZvclBrOiBGb3JQaykgPT4ge1xyXG4gICAgcmV0dXJuIGZvcm1zLmZpbHRlcigoZm9ybTogSWRGb3JtdWxhcmlvKSA9PiB7XHJcbiAgICAgICAgbGV0IG15Zm9yUGsgPSB7IC4uLmZvclBrLCBmb3JtdWxhcmlvOiBmb3JtIH07XHJcbiAgICAgICAgdmFyIGZlZWRiYWNrID0gZmVlZGJhY2tBbGxbdG9QbGFpbkZvclBrKG15Zm9yUGspXTtcclxuICAgICAgICByZXR1cm4gZmVlZGJhY2sucmVzdW1lbiAhPSAndmFjaW8nXHJcbiAgICB9KS5sZW5ndGggPT0gMFxyXG59XHJcblxyXG5mdW5jdGlvbiBCb3RvbkZvcm11bGFyaW9EZXNwbGllZ3VlKHByb3BzOiB7IGNhc2lsbGVybzogQm90b25Gb3JtdWxhcmlvLCBmb3JtdWxhcmlvOiBGb3JtdWxhcmlvLCBmb3JQazogRm9yUGsgfSkge1xyXG4gICAgdmFyIHsgY2FzaWxsZXJvLCBmb3JQayB9ID0gcHJvcHM7XHJcbiAgICB2YXIgaGFiaWxpdGFkb3IgPSBjYXNpbGxlcm8uZXhwcmVzaW9uX2hhYmlsaXRhcl9qcyA/IGdldEZ1bmNpb25IYWJpbGl0YXIoY2FzaWxsZXJvLmV4cHJlc2lvbl9oYWJpbGl0YXJfanMpIDogKCkgPT4gdHJ1ZTtcclxuICAgIHZhciB7IG9wY2lvbmVzIH0gPSB1c2VTZWxlY3RvclZpdmllbmRhKGZvclBrKTtcclxuICAgIHZhciB7IGxpc3RvOiBCRl9saXN0bywgYWdyZWdhcjogQkZfYWdyZWdhciwgaWRGb3JtdWxhcmlvOiBpZEZvcm11bGFyaW9EZXN0aW5vIH0gPSBnZXRCRlZhck5hbWVzKGNhc2lsbGVyby5zYWx0byk7XHJcbiAgICB2YXIgZXN0cnVjdHVyYSA9IGdldEVzdHJ1Y3R1cmEoKTtcclxuICAgIHZhciB7IGZvcm11bGFyaW9BQWJyaXIgfSA9IHVzZVNlbGVjdG9yKChfc3RhdGU6IENhc29TdGF0ZSkgPT4gKHtcclxuICAgICAgICBmb3JtdWxhcmlvQUFicmlyOiBlc3RydWN0dXJhLmZvcm11bGFyaW9zW2lkRm9ybXVsYXJpb0Rlc3Rpbm9dLmNhc2lsbGVyb3MsXHJcbiAgICB9KSk7XHJcbiAgICB2YXIgc3VmaWpvSWRFbGVtZW50byA9IHRvUGxhaW5Gb3JQayhmb3JQayk7XHJcbiAgICAvKlxyXG4gICAgcmVnaXN0cmFyRWxlbWVudG8oe1xyXG4gICAgICAgIGlkOmBkaXYtYm90b24tZm9ybXVsYXJpby0ke3N1Zmlqb0lkRWxlbWVudG99YCxcclxuICAgICAgICBhdHRyOidlc3RhLWluaGFiaWxpdGFkYScsXHJcbiAgICAgICAgLy8gZnVuOiAocjpSZXNwdWVzdGFzKT0+aGFiaWxpdGFkb3Iocik/J1NJJzonTk8nXHJcbiAgICAgICAgZnVuOiAoX3I6UmVzcHVlc3Rhcyk9PidOTydcclxuICAgIH0pO1xyXG4gICAgcmVnaXN0cmFyRWxlbWVudG88SFRNTEJ1dHRvbkVsZW1lbnQ+KHtcclxuICAgICAgICBpZDpgYm90b24tZm9ybXVsYXJpby0ke3N1Zmlqb0lkRWxlbWVudG99YCxcclxuICAgICAgICBwcm9wOidkaXNhYmxlZCcsXHJcbiAgICAgICAgLy8gZnVuOiAocjpSZXNwdWVzdGFzKT0+IWhhYmlsaXRhZG9yKHIpXHJcbiAgICAgICAgZnVuOiAoX3I6UmVzcHVlc3Rhcyk9PmZhbHNlXHJcbiAgICB9KTtcclxuICAgICovXHJcbiAgICBjb25zdCBkaXNwYXRjaCA9IHVzZURpc3BhdGNoKCk7XHJcbiAgICB2YXIgW2NvbmZpcm1hckZvcnphcklyLCBzZXRDb25maXJtYXJGb3J6YXJJcl0gPSB1c2VTdGF0ZTxEZWZpbmljaW9uRm9ybXVsYXJpb0FicmlyIHwgZmFsc2UgfCBudWxsPihudWxsKTtcclxuICAgIHZhciBbY29uZmlybWFjaW9uQm9ycmFkbywgc2V0Q29uZmlybWFjaW9uQm9ycmFkb10gPSB1c2VTdGF0ZTx7ZGVmQm90b246IERlZmluaWNpb25Gb3JtdWxhcmlvQWJyaXIsIGZvclBrUGFkcmU6IEZvclBrLCBkYXRvczogYW55fSB8IG51bGw+KG51bGwpO1xyXG4gICAgdmFyIFtmcmFzZUJvcnJhZG8sIHNldEZyYXNlQm9ycmFkb10gPSB1c2VTdGF0ZSgnJyk7XHJcbiAgICB2YXIgW2Vycm9yRnJhc2VCb3JyYWRvLCBzZXRFcnJvckZyYXNlQm9ycmFkb10gPSB1c2VTdGF0ZShmYWxzZSk7XHJcbiAgICB2YXIgcGVybWl0ZUJvcnJhckdhYmluZXRlID0gZ2V0RGF0b3NCeVBhc3MoKS5wZXJtaXRlQm9ycmFyRWxlbWVudG9zVUEgPz8gZmFsc2U7XHJcbiAgICB2YXIgcGVkaXJDb25maXJtYWNpb25Cb3JyYWRvID0gKGRlZkJvdG9uOiBEZWZpbmljaW9uRm9ybXVsYXJpb0FicmlyLCBmb3JQa1BhZHJlOiBGb3JQaykgPT4ge1xyXG4gICAgICAgIGNvbnN0IHtyZXNwdWVzdGFzfSA9IHJlc3B1ZXN0YXNGb3JQayhmb3JQa1BhZHJlKVxyXG4gICAgICAgIHZhciBkYXRvc0hpam9zID0gcmVzcHVlc3Rhc1tmb3JtdWxhcmlvQUFicmlyLnVuaWRhZF9hbmFsaXNpc11bKGRlZkJvdG9uLm51bSB8fCAxKSAtIDFdO1xyXG4gICAgICAgIHNldENvbmZpcm1hY2lvbkJvcnJhZG8oeyBkZWZCb3RvbiwgZm9yUGtQYWRyZSwgZGF0b3M6IGRhdG9zSGlqb3MgfSk7XHJcbiAgICAgICAgc2V0RnJhc2VCb3JyYWRvKCcnKTtcclxuICAgICAgICBzZXRFcnJvckZyYXNlQm9ycmFkbyhmYWxzZSk7XHJcbiAgICB9O1xyXG4gICAgdmFyIG11bHRpcGxlRm9ybXVsYXJpb3MgPSBmb3JtdWxhcmlvQUFicmlyLnVuaWRhZF9hbmFsaXNpcyAhPSBwcm9wcy5mb3JtdWxhcmlvLnVuaWRhZF9hbmFsaXNpcztcclxuICAgIHZhciBudWV2b0NhbXBvUGsgPSBkZWZPcGVyYXRpdm8uZGVmVUFbZm9ybXVsYXJpb0FBYnJpci51bmlkYWRfYW5hbGlzaXNdLnBrO1xyXG4gICAgLy8gdmFyIHZhcl9uYW1lPSckQi4nK2Nhc2lsbGVyby5zYWx0bzsgLy9vcmlnaW5hbFxyXG4gICAgdmFyIGlkU2VjY2lvbiA9IGBzZWNjaW9uLWJvdG9uLWZvcm11bGFyaW8tJHtCRl9saXN0b31gO1xyXG4gICAgdmFyIGlkQnV0dG9uID0gYHNwZWNpYWwtYnV0dG9uLSR7aWRTZWNjaW9ufWA7XHJcbiAgICB2YXIgdmFyX25hbWVfcmVnaXN0cm8gPSBtdWx0aXBsZUZvcm11bGFyaW9zID8gQkZfYWdyZWdhciA6IEJGX2xpc3RvO1xyXG4gICAgcmVnaXN0cmFyRWxlbWVudG88SFRNTERpdkVsZW1lbnQ+KHtcclxuICAgICAgICBpZDogaWRTZWNjaW9uLFxyXG4gICAgICAgIHZhcmlhYmxlOiB2YXJfbmFtZV9yZWdpc3RybyxcclxuICAgICAgICBmb3JQazogZm9yUGssXHJcbiAgICAgICAgZGlyZWN0OiB0cnVlLFxyXG4gICAgICAgIGZ1bjogKHJlc3B1ZXN0YXNBdW1lbnRhZGFzOiBSZXNwdWVzdGFzLCBmZWVkYmFja1JvdzogRm9ybVN0cnVjdHVyZVN0YXRlPElkVmFyaWFibGUsIFZhbG9yLCBJZEZpbj4sIGRpdjogSFRNTERpdkVsZW1lbnQsXHJcbiAgICAgICAgICAgIGZlZWRiYWNrQWxsOiB7XHJcbiAgICAgICAgICAgICAgICBbZm9ybXVsYXJpbyBpbiBQbGFpbkZvclBrXTogRm9ybVN0cnVjdHVyZVN0YXRlPElkVmFyaWFibGUsIFZhbG9yLCBJZEZpbj4gLy8gcmVzdWx0YWRvIGRlbCByb3dWYWxpZGF0b3IgcGFyYSBlc3RhZG8uZm9yUGtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICkgPT4ge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGVzdGFkb19saXN0byA9IGZlZWRiYWNrUm93LmZlZWRiYWNrW0JGX2xpc3RvXT8uZXN0YWRvIHx8ICd2YWxpZGEnO1xyXG4gICAgICAgICAgICAgICAgdmFyIGVzdGFkb19hZ3JlZ2FyID0gbXVsdGlwbGVGb3JtdWxhcmlvcyA/IChmZWVkYmFja1Jvdy5mZWVkYmFja1tCRl9hZ3JlZ2FyXT8uZXN0YWRvIHx8ICd2YWxpZGEnKSA6ICd2YWxpZGEnO1xyXG4gICAgICAgICAgICAgICAgdmFyIGVzdGFkb19nZW5lcmFsID0gZXN0YWRvX2FncmVnYXIgIT09ICd2YWxpZGEnID8gZXN0YWRvX2FncmVnYXIgOiBlc3RhZG9fbGlzdG87XHJcbiAgICAgICAgICAgICAgICBzZXRBdHRyRGlzdGludG8oZGl2LCAnbnVlc3Ryby12YWxpZGF0b3InLCBlc3RhZG9fZ2VuZXJhbCk7XHJcbiAgICAgICAgICAgICAgICBzZXRBdHRyRGlzdGludG8oZGl2LCAndGllbmUtdmFsb3InLCBlc3RhZG9fZ2VuZXJhbCA9PT0gJ3ZhbGlkYScgPyAndmFsaWRvJyA6ICdOTycpO1xyXG5cclxuICAgICAgICAgICAgICAgIHZhciBsaXN0YURlQm90b25lc0FicmlyOiBEZWZpbmljaW9uRm9ybXVsYXJpb0FicmlyW10gPSBbXTtcclxuICAgICAgICAgICAgICAgIC8vIHZhciBlc1ZhckFjdHVhbCA9IGZlZWRiYWNrUm93LmFjdHVhbCA9PSAnJEIuRjonK2Nhc2lsbGVyby5zYWx0bzsgIC8vb3JpZ2luYWxcclxuICAgICAgICAgICAgICAgIHZhciBlc1ZhckFjdHVhbCA9ICEhZmVlZGJhY2tSb3cuYWN0dWFsPy5zdGFydHNXaXRoKEJGX2xpc3RvKTtcclxuICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdCb3RvbkZvcm11bGFyaW9EZXNwbGllZ3VlIGVzVmFyQWN0dWFsICcgK2VzVmFyQWN0dWFsICApO1xyXG4gICAgICAgICAgICAgICAgaWYgKG11bHRpcGxlRm9ybXVsYXJpb3MgJiYgY2FzaWxsZXJvLnNhbHRvICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyAgbGV0IGRlZkZvcm11bGFyaW86SW5mb0Zvcm11bGFyaW8gPSBlc3RydWN0dXJhLmZvcm11bGFyaW9zWydGOicrY2FzaWxsZXJvLnNhbHRvIGFzIElkRm9ybXVsYXJpb107ICAgICAgLy9vcmlnaW5hbFxyXG4gICAgICAgICAgICAgICAgICAgIGxldCBkZWZGb3JtdWxhcmlvOiBJbmZvRm9ybXVsYXJpbyA9IGVzdHJ1Y3R1cmEuZm9ybXVsYXJpb3NbaWRGb3JtdWxhcmlvRGVzdGlub107XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGRlZlVBID0gZXN0cnVjdHVyYS51bmlkYWRlc19hbmFsaXNpc1tkZWZGb3JtdWxhcmlvLmNhc2lsbGVyb3MudW5pZGFkX2FuYWxpc2lzIV07XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNvbmp1bnRvID0gcmVzcHVlc3Rhc0F1bWVudGFkYXNbZGVmRm9ybXVsYXJpby5jYXNpbGxlcm9zLnVuaWRhZF9hbmFsaXNpcyFdO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBjYW50aWRhZEVzcGVyYWRhID0gcmVzcHVlc3Rhc0F1bWVudGFkYXNbY2FzaWxsZXJvLmV4cHJlc2lvbl9oYWJpbGl0YXIgYXMgSWRWYXJpYWJsZV07XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIG51bUFjdHVhbDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gIHZhciBlc3RhZG9EZWxCb3RvbiA9IGZlZWRiYWNrUm93LmZlZWRiYWNrWyckQi5GOicrY2FzaWxsZXJvLnNhbHRvIGFzIElkVmFyaWFibGVdLmVzdGFkbyAgIC8vb3JpZ2luYWxcclxuICAgICAgICAgICAgICAgICAgICB2YXIgZXN0YWRvRGVsQm90b24gPSBmZWVkYmFja1Jvdy5mZWVkYmFja1tCRl9saXN0b10uZXN0YWRvXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coJ0JvdG9uRm9ybXVsYXJpb0Rlc3BsaWVndWUgZXN0YWRvRGVsQm90b24gJyArZXN0YWRvRGVsQm90b24gICk7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW8gPSBlc3RydWN0dXJhLmNvbmZpZ1NvcnRlbyA/IGVzdHJ1Y3R1cmEuY29uZmlnU29ydGVvW2dldE1haW5Gb3JtRm9yVml2aWVuZGEoZm9yUGtbZXN0cnVjdHVyYS5wa0FncmVnYWRhVWFQcGFsXSldIDogbnVsbFxyXG4gICAgICAgICAgICAgICAgICAgIHZhciBoYWJpbGl0YWNpb25Cb3RvbkZvcm11bGFyaW8gPSBlc3RydWN0dXJhLmhhYmlsaXRhY2lvbkJvdG9uRm9ybXVsYXJpbztcclxuICAgICAgICAgICAgICAgICAgICBsaXN0YURlQm90b25lc0FicmlyID0gbGlrZUFyKGNvbmp1bnRvKS5tYXAoKF8sIGkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG51bTogbnVtYmVyID0gbnVtYmVyT3JTdHJpbmdJbmNJZkFycmF5KGksIGNvbmp1bnRvKSBhcyBudW1iZXI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBmb3JQayA9IHsgLi4ucHJvcHMuZm9yUGssIGZvcm11bGFyaW86IGlkRm9ybXVsYXJpb0Rlc3Rpbm8sIFtudWV2b0NhbXBvUGtdOiBudW0gfTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZvcm1Ibm9zID0gYnVzY2FySG5vc0Zvcm11bGFyaW8oaWRGb3JtdWxhcmlvRGVzdGlubylcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZlZWRiYWNrID0gZmVlZGJhY2tBbGxbdG9QbGFpbkZvclBrKGZvclBrKV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChudW1BY3R1YWwgPT0gbnVsbCAmJiBmZWVkYmFjay5yZXN1bWVuID09IFwidmFjaW9cIiAmJiBlc3RhZG9EZWxCb3RvbiA9PSAndmFsaWRhJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtQWN0dWFsID0gbnVtO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JQayxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VtZW46IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3R1YWw6IGNhbGN1bGFyQWN0dWFsQkYoY29uZmlnU29ydGVvRm9ybXVsYXJpbywgbnVtLCBudW1BY3R1YWwsIGlkRm9ybXVsYXJpb0Rlc3Rpbm8sIHJlc3B1ZXN0YXNBdW1lbnRhZGFzKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZpbzogbnVtQWN0dWFsID09IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJtaXRlQm9ycmFyOiBsaWtlQXIoY29uanVudG8pLmFycmF5KCkubGVuZ3RoID09IE51bWJlcihpKSArIDEgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja0Zvcm1zVmFjaW9zKGZvcm1Ibm9zLCBmZWVkYmFja0FsbCwgZm9yUGspICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsY3VsYXJQZXJtaXRlQm9ycmFyQkYoY29uZmlnU29ydGVvRm9ybXVsYXJpbywgaWRGb3JtdWxhcmlvRGVzdGlubyksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJtaXRlQm9ycmFyR2FiaW5ldGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZDogY2FsY3VsYXJEaXNhYmxlZEJGKGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW8sIGhhYmlsaXRhY2lvbkJvdG9uRm9ybXVsYXJpbywgbnVtLCBpZEZvcm11bGFyaW9EZXN0aW5vLCByZXNwdWVzdGFzQXVtZW50YWRhcylcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0pLmFycmF5KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRydWUgLypcInB1ZWRlIGFncmVnYXIgLy9UT0RPIFZFUiBFU1RPXCIqLyAmJiAoY29uanVudG8gaW5zdGFuY2VvZiBBcnJheSB8fCBjb25qdW50byA9PSBudWxsKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgbnVldm9WYWxvclBrID0gKGNvbmp1bnRvID09IG51bGwgPyAwIDogY29uanVudG8ubGVuZ3RoKSArIDE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBmb3JQayA9IHsgLi4ucHJvcHMuZm9yUGssIGZvcm11bGFyaW86IGlkRm9ybXVsYXJpb0Rlc3Rpbm8sIFtudWV2b0NhbXBvUGtdOiBudWV2b1ZhbG9yUGsgfTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGxpc3RvUHJlc2lvbmFkbyA9IHJlc3B1ZXN0YXNBdW1lbnRhZGFzW0JGX2xpc3RvXSAhPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgZGViZUFncmVnYXJPbGlzdG8gPSBudW1BY3R1YWwgPT0gbnVsbCAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNhc2lsbGVyby5leHByZXNpb25faGFiaWxpdGFyID9cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2FudGlkYWRFc3BlcmFkYSA9PSBudWxsIHx8IGNhbnRpZGFkRXNwZXJhZGEgIT0gKGNvbmp1bnRvICE9IG51bGwgJiYgY29uanVudG8ubGVuZ3RoKSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICFsaXN0b1ByZXNpb25hZG9cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgJiYgKGVzdGFkb0RlbEJvdG9uID09ICd2YWxpZGEnIHx8IGVzVmFyQWN0dWFsKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGlzdGFEZUJvdG9uZXNBYnJpci5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvclBrLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtOiBudWV2b1ZhbG9yUGssXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlc0FncmVnYXI6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3R1YWw6IGRlYmVBZ3JlZ2FyT2xpc3RvLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldmlvOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkOiBjYWxjdWxhckRpc2FibGVkQkZBZ3JlZ2FyTGlzdG8oY29uZmlnU29ydGVvRm9ybXVsYXJpbywgaGFiaWxpdGFjaW9uQm90b25Gb3JtdWxhcmlvLCBpZEZvcm11bGFyaW9EZXN0aW5vKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGlzdGFEZUJvdG9uZXNBYnJpci5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvclBrLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtOiBudWV2b1ZhbG9yUGsgLSAxLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXNDb25maXJtYXI6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3R1YWw6IGRlYmVBZ3JlZ2FyT2xpc3RvLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldmlvOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkOiBjYWxjdWxhckRpc2FibGVkQkZBZ3JlZ2FyTGlzdG8oY29uZmlnU29ydGVvRm9ybXVsYXJpbywgaGFiaWxpdGFjaW9uQm90b25Gb3JtdWxhcmlvLCBpZEZvcm11bGFyaW9EZXN0aW5vKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBmb3JQayA9IHsgLi4ucHJvcHMuZm9yUGssIGZvcm11bGFyaW86IGlkRm9ybXVsYXJpb0Rlc3Rpbm8gfTtcclxuICAgICAgICAgICAgICAgICAgICBsaXN0YURlQm90b25lc0FicmlyID0gW3sgZm9yUGssIG51bTogZmFsc2UsIHVuaWNvOiB0cnVlLCBhY3R1YWw6IGVzVmFyQWN0dWFsLCBwcmV2aW86IHRydWUgfV1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHZhciB0b2Rvc0xvc0JvdG9uZXMgPSBsaXN0YURlQm90b25lc0FicmlyLm1hcChkZWZCb3RvbiA9PlxyXG4gICAgICAgICAgICAgICAgICAgIGJvdG9uRm9ybXVsYXJpb0NvblJlc3VtZW4oZGVmQm90b24sIGZlZWRiYWNrQWxsW3RvUGxhaW5Gb3JQayhkZWZCb3Rvbi5mb3JQayldID8/IHsgcmVzdW1lbjogJ3ZhY2lvJyB9LCByZXNwdWVzdGFzQXVtZW50YWRhcyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzaWxsZXJvLCBwcm9wcy5mb3JQaywgaWRCdXR0b24sIGZvcm11bGFyaW9BQWJyaXIsIHBlZGlyQ29uZmlybWFjaW9uQm9ycmFkb1xyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIGxldCBub21icmVzQ2FtcG9zUmVzdW1lbiA9IGxpa2VBcigoY2FzaWxsZXJvLmVzcGVjaWFsPy5jYW1wb3NSZXN1bWVuIHx8IFtdKSkuYXJyYXkoKS5tYXAoYyA9PiBjKTtcclxuICAgICAgICAgICAgICAgIHZhciBodG1sU2VjY2lvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkU2VjY2lvbikhO1xyXG4gICAgICAgICAgICAgICAgaHRtbFNlY2Npb24uaW5uZXJIVE1MID0gXCJcIjtcclxuICAgICAgICAgICAgICAgIGh0bWxTZWNjaW9uLmFwcGVuZENoaWxkKGh0bWwudGFibGUoeyBjbGFzczogYHRhYmxlIHRhYmxlLXN0cmlwZWQgJHtub21icmVzQ2FtcG9zUmVzdW1lbi5sZW5ndGggPyAndy1hdXRvJyA6ICcnfWAgfSwgW1xyXG4gICAgICAgICAgICAgICAgICAgIGh0bWwudGhlYWQoW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBodG1sLnRyKFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2lsbGVyby5hY2xhcmFjaW9uID8gaHRtbC50aCgpIDogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh0bWwudGgoY2FzaWxsZXJvLm5vbWJyZSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5ub21icmVzQ2FtcG9zUmVzdW1lbi5tYXAoKG5vbWJyZUNhbXBvKSA9PiBodG1sLnRoKG5vbWJyZUNhbXBvIGFzIHN0cmluZykpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBdKVxyXG4gICAgICAgICAgICAgICAgICAgIF0pLFxyXG4gICAgICAgICAgICAgICAgICAgIGh0bWwudGJvZHkoW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAuLi50b2Rvc0xvc0JvdG9uZXNcclxuICAgICAgICAgICAgICAgICAgICBdKVxyXG4gICAgICAgICAgICAgICAgXSkuY3JlYXRlKCkpO1xyXG4gICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgICAgICAgICAgIHZhciBlcnJvciA9IHVuZXhwZWN0ZWQoZXJyKTtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiZW50cmEgYWwgY2F0Y2hcIilcclxuICAgICAgICAgICAgICAgIGRpdi50ZXh0Q29udGVudCA9ICdlc3RvLCBGQUxMw4kgJyArIGVycm9yLm1lc3NhZ2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9KTtcclxuICAgIGNvbnN0IGlyID0gKGRlZkJvdG9uOiBEZWZpbmljaW9uRm9ybXVsYXJpb0FicmlyKSA9PiB7XHJcbiAgICAgICAgaWYgKCFjYXNpbGxlcm8uc2FsdG8pIHtcclxuICAgICAgICAgICAgb3BjaW9uZXMubW9kb0RpcmVjdG8gP1xyXG4gICAgICAgICAgICAgICAgbnVsbFxyXG4gICAgICAgICAgICAgICAgOlxyXG4gICAgICAgICAgICAgICAgZGlzcGF0Y2goZGlzcGF0Y2hlcnMuVk9MVkVSX0hEUih7fSkpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHZhciBudWV2YUZvclBrID0geyAuLi5mb3JQaywgZm9ybXVsYXJpbzogaWRGb3JtdWxhcmlvRGVzdGlubyB9O1xyXG4gICAgICAgICAgICB2YXIgeyBsaXN0bzogQkZfbGlzdG8sIGFncmVnYXI6IEJGX2FncmVnYXIgfSA9IGdldEJGVmFyTmFtZXMoY2FzaWxsZXJvLnNhbHRvKTtcclxuICAgICAgICAgICAgaWYgKG11bHRpcGxlRm9ybXVsYXJpb3MpIHtcclxuICAgICAgICAgICAgICAgIChudWV2YUZvclBrIGFzIGFueSlbbnVldm9DYW1wb1BrXSA9IGRlZkJvdG9uLm51bVxyXG4gICAgICAgICAgICAgICAgaWYgKGRlZkJvdG9uLmVzQWdyZWdhcikge1xyXG4gICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoQnlQYXNzKGFjY2lvbl9hZ3JlZ2FyX2Zvcm11bGFyaW8sIHsgZm9yUGs6IG51ZXZhRm9yUGsgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2hCeVBhc3MoYWNjaW9uX3JlZ2lzdHJhcl9yZXNwdWVzdGEsIHsgZm9yUGs6IHByb3BzLmZvclBrLCB2YXJpYWJsZTogQkZfYWdyZWdhciwgcmVzcHVlc3RhOiAxIGFzIFZhbG9yIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoQnlQYXNzKGFjY2lvbl9yZWdpc3RyYXJfcmVzcHVlc3RhLCB7IGZvclBrOiBwcm9wcy5mb3JQaywgdmFyaWFibGU6IEJGX2xpc3RvLCByZXNwdWVzdGE6IG51bGwgYXMgdW5rbm93biBhcyBWYWxvciB9KTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoY2FzaWxsZXJvLmV4cHJlc2lvbl9oYWJpbGl0YXIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2hCeVBhc3MoYWNjaW9uX3JlZ2lzdHJhcl9yZXNwdWVzdGEsIHsgZm9yUGs6IHByb3BzLmZvclBrLCB2YXJpYWJsZTogY2FzaWxsZXJvLmV4cHJlc2lvbl9oYWJpbGl0YXIgYXMgSWRWYXJpYWJsZSwgcmVzcHVlc3RhOiBudWxsIGFzIHVua25vd24gYXMgVmFsb3IgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBkaXNwYXRjaEJ5UGFzcyhhY2Npb25fYWJyaXJfZm9ybXVsYXJpbywgeyBmb3JQazogbnVldmFGb3JQayB9KTtcclxuICAgICAgICAgICAgICAgICAgICAvLyBTaSBhYnJvIHVubyBleGlzdGVudGUsIHRhbWJpw6luIHJlc2V0ZW8gZWwgbGlzdG8gcGFyYSBmb3J6YXIgcXVlIHZ1ZWx2YW4gYSBhcHJldGFybG8gc2kgY2FtYmlhbiBhbGdvXHJcbiAgICAgICAgICAgICAgICAgICAgLy9kaXNwYXRjaEJ5UGFzcyhhY2Npb25fcmVnaXN0cmFyX3Jlc3B1ZXN0YSwgeyBmb3JQazogcHJvcHMuZm9yUGssIHZhcmlhYmxlOiBCRl9saXN0bywgcmVzcHVlc3RhOiBudWxsIGFzIHVua25vd24gYXMgVmFsb3IgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBkaXNwYXRjaEJ5UGFzcyhhY2Npb25fcmVnaXN0cmFyX3Jlc3B1ZXN0YSwgeyBmb3JQazogcHJvcHMuZm9yUGssIHZhcmlhYmxlOiBCRl9saXN0bywgcmVzcHVlc3RhOiAxIGFzIFZhbG9yIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGRpc3BhdGNoKGRpc3BhdGNoZXJzLkNBTUJJQVJfRk9STVVMQVJJTyh7IGZvclBrOiBudWV2YUZvclBrLCBhcGlsYXJWdWVsdGE6IHRydWUgfSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoY29uZmlybWFyRm9yemFySXIpIHsgc2V0Q29uZmlybWFyRm9yemFySXIoZmFsc2UpIH1cclxuICAgIH07XHJcbiAgICByZXR1cm4gPERlc3BsZWdhckNhc2lsbGVybyBjYXNpbGxlcm89e2Nhc2lsbGVyb30+XHJcbiAgICAgICAge211bHRpcGxlRm9ybXVsYXJpb3MgJiYgPHNwYW4gaWQ9eyd2YXItJyArIEJGX2FncmVnYXJ9IHN0eWxlPXt7IHBvc2l0aW9uOiAnYWJzb2x1dGUnLCBtYXJnaW5Ub3A6ICctNjBweCcgfX0+PC9zcGFuPn1cclxuICAgICAgICA8c3BhbiBpZD17J3Zhci0nICsgQkZfbGlzdG99IHN0eWxlPXt7IHBvc2l0aW9uOiAnYWJzb2x1dGUnLCBtYXJnaW5Ub3A6ICctNjBweCcgfX0+PC9zcGFuPlxyXG4gICAgICAgIDxkaXYgaWQ9e2lkU2VjY2lvbn0+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPEJ1dHRvbiBjbGFzc05hbWU9XCJzcGVjaWFsLWJ1dHRvblwiIGlkPXtpZEJ1dHRvbn1cclxuICAgICAgICAgICAgb25DbGljaz17KGV2ZW50KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpcihKU09OLnBhcnNlKChldmVudC50YXJnZXQhIGFzIHVua25vd24gYXMgSFRNTEJ1dHRvbkVsZW1lbnQpLmdldEF0dHJpYnV0ZSgnZGVmLWJ1dHRvbicpISkpXHJcbiAgICAgICAgICAgIH19XHJcbiAgICAgICAgPmlyIChpbnRlcm5vKTwvQnV0dG9uPlxyXG4gICAgICAgIDxEaWFsb2dcclxuICAgICAgICAgICAgY2xhc3NOYW1lPVwibnVlc3Ryby1kaWFsb2dvXCJcclxuICAgICAgICAgICAgb3Blbj17ISFjb25maXJtYXJGb3J6YXJJcn1cclxuICAgICAgICAgICAgb25DbG9zZT17KCkgPT4gc2V0Q29uZmlybWFyRm9yemFySXIobnVsbCl9XHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm51ZXN0cm8tZGlhbG9nb1wiPlxyXG4gICAgICAgICAgICAgICAgPFR5cG9ncmFwaHk+Tm8gc2UgcHVlZGUgYXZhbnphciBhbCBzaWd1aWVudGUgZm9ybXVsYXJpby48L1R5cG9ncmFwaHk+XHJcbiAgICAgICAgICAgICAgICA8VHlwb2dyYXBoeT5RdWl6w6FzIG5vIHRlcm1pbsOzIGRlIGNvbnRlc3RhciBsYXMgcHJlZ3VudGFzIGNvcnJlc3BvbmRpZW50ZXM8L1R5cG9ncmFwaHk+XHJcbiAgICAgICAgICAgICAgICA8VHlwb2dyYXBoeT5RdWl6w6FzIG5vIGNvcnJlc3BvbmRlIGVuIGJhc2UgYSBsYXMgcmVzcHVlc3RhcyBvYnRlbmlkYXM8L1R5cG9ncmFwaHk+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8QnV0dG9uIGNvbG9yPVwic2Vjb25kYXJ5XCIgb25DbGljaz17KCkgPT4gY29uZmlybWFyRm9yemFySXIgJiYgaXIoY29uZmlybWFyRm9yemFySXIpfT5mb3J6YXI8L0J1dHRvbj5cclxuICAgICAgICAgICAgPEJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiB2YXJpYW50PVwiY29udGFpbmVkXCIgb25DbGljaz17KCkgPT4gc2V0Q29uZmlybWFyRm9yemFySXIobnVsbCl9PkVudGVuZGlkbzwvQnV0dG9uPlxyXG4gICAgICAgIDwvRGlhbG9nPlxyXG4gICAgICAgIHtjb25maXJtYWNpb25Cb3JyYWRvICYmIChcclxuICAgICAgICAgICAgPERpYWxvZyBvcGVuPXt0cnVlfSBvbkNsb3NlPXsoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBzZXRDb25maXJtYWNpb25Cb3JyYWRvKG51bGwpO1xyXG4gICAgICAgICAgICAgICAgc2V0RnJhc2VCb3JyYWRvKCcnKTtcclxuICAgICAgICAgICAgICAgIHNldEVycm9yRnJhc2VCb3JyYWRvKGZhbHNlKTtcclxuICAgICAgICAgICAgfX0+XHJcbiAgICAgICAgICAgICAgICA8RGlhbG9nVGl0bGU+QWR2ZXJ0ZW5jaWE6IFNlIHBlcmRlcsOhbiBkYXRvczwvRGlhbG9nVGl0bGU+XHJcbiAgICAgICAgICAgICAgICA8RGlhbG9nQ29udGVudD5cclxuICAgICAgICAgICAgICAgICAgICA8RGlhbG9nQ29udGVudFRleHQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHtgRXN0w6EgcG9yIGJvcnJhciBlbCBmb3JtdWxhcmlvICR7Y29uZmlybWFjaW9uQm9ycmFkby5kZWZCb3Rvbi5mb3JQay5mb3JtdWxhcmlvfSAoJHtlc3RydWN0dXJhLnVuaWRhZGVzX2FuYWxpc2lzW2VzdHJ1Y3R1cmEuZm9ybXVsYXJpb3NbY29uZmlybWFjaW9uQm9ycmFkby5kZWZCb3Rvbi5mb3JQay5mb3JtdWxhcmlvXS5jYXNpbGxlcm9zLnVuaWRhZF9hbmFsaXNpc10ucGtfYWdyZWdhZGF9OiAke2NvbmZpcm1hY2lvbkJvcnJhZG8uZGVmQm90b24ubnVtfSkuIExvcyBkYXRvcyBkZWwgbWlzbW8geSB0b2RvcyBzdXMgcmVnaXN0cm9zIGFzb2NpYWRvcyBzZSBwZXJkZXLDoW4uIMK/RGVzZWEgY29udGludWFyP2B9XHJcbiAgICAgICAgICAgICAgICAgICAgPC9EaWFsb2dDb250ZW50VGV4dD5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBtYXJnaW5Ub3A6ICcyMHB4JywgbWFyZ2luQm90dG9tOiAnMjBweCcgfX0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxEaWFsb2dDb250ZW50VGV4dD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhcmEgY29uZmlybWFyIGVsIGJvcnJhZG8sIGVzY3JpYmEgbGEgZnJhc2UgPHN0cm9uZz5cImZvcnphciBib3JyYWRvXCI8L3N0cm9uZz4gYSBjb250aW51YWNpw7NuOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L0RpYWxvZ0NvbnRlbnRUZXh0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwiaW5wdXQtZm9yemFyLWJvcnJhZG9cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e2ZyYXNlQm9ycmFkb31cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXtlID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRGcmFzZUJvcnJhZG8oZS50YXJnZXQudmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEVycm9yRnJhc2VCb3JyYWRvKGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT17e3dpZHRoOiAnMTAwJScsIHBhZGRpbmc6ICc4cHgnLCBib3JkZXI6IGVycm9yRnJhc2VCb3JyYWRvID8gJzFweCBzb2xpZCByZWQnIDogJzFweCBzb2xpZCAjY2NjJywgYm9yZGVyUmFkaXVzOiAnNHB4J319XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cImZvcnphciBib3JyYWRvXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9Db21wbGV0ZT1cIm9mZlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHtlcnJvckZyYXNlQm9ycmFkbyAmJiA8ZGl2IHN0eWxlPXt7Y29sb3I6ICdyZWQnLCBtYXJnaW5Ub3A6ICc1cHgnLCBmb250U2l6ZTogJzAuODVlbSd9fT5MYSBmcmFzZSBpbmdyZXNhZGEgZXMgaW5jb3JyZWN0YS48L2Rpdj59XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDxUeXBvZ3JhcGh5IHZhcmlhbnQ9XCJoNlwiIHN0eWxlPXt7IG1hcmdpblRvcDogJzEwcHgnLCBmb250V2VpZ2h0OiAnYm9sZCcgfX0+RGF0b3MgcXVlIHNlIHBlcmRlcsOhbjo8L1R5cG9ncmFwaHk+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBtYXhXaWR0aDogJzYwMHB4JywgbWFyZ2luOiAnMCBhdXRvJywgZm9udEZhbWlseTogJ3NhbnMtc2VyaWYnIH19PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8UmVuZGVyaXphZG9ySlNPTiBkYXRvcz17Y29uZmlybWFjaW9uQm9ycmFkby5kYXRvc30gLz5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvRGlhbG9nQ29udGVudD5cclxuICAgICAgICAgICAgICAgIDxEaWFsb2dBY3Rpb25zPlxyXG4gICAgICAgICAgICAgICAgICAgIDxCdXR0b25cclxuICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudD1cIm91dGxpbmVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0Q29uZmlybWFjaW9uQm9ycmFkbyhudWxsKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEZyYXNlQm9ycmFkbygnJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRFcnJvckZyYXNlQm9ycmFkbyhmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBDYW5jZWxhclxyXG4gICAgICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxCdXR0b24gY29sb3I9XCJzZWNvbmRhcnlcIiB2YXJpYW50PVwiY29udGFpbmVkXCIgb25DbGljaz17KCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNvbmZpcm1hY2lvbkJvcnJhZG8pIHJldHVybjtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmcmFzZUJvcnJhZG8udHJpbSgpLnRvTG93ZXJDYXNlKCkgIT09IFwiZm9yemFyIGJvcnJhZG9cIikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0RXJyb3JGcmFzZUJvcnJhZG8odHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnB1dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpbnB1dC1mb3J6YXItYm9ycmFkbycpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbnB1dCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dC5mb2N1cygpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dC5zY3JvbGxJbnRvVmlldyh7IGJlaGF2aW9yOiAnc21vb3RoJywgYmxvY2s6ICdjZW50ZXInIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIDEwMCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qge2RlZkJvdG9uLCBmb3JQa1BhZHJlfSA9IGNvbmZpcm1hY2lvbkJvcnJhZG87XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZvclBrID0gZGVmQm90b24uZm9yUGs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFjY2lvbl9ib3JyYXJfZm9ybXVsYXJpbyh7IGZvclBrLCBmb3JQa1BhZHJlIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB7IGxpc3RvLCBhZ3JlZ2FyIH0gPSBnZXRCRlZhck5hbWVzKGNhc2lsbGVyby5zYWx0byk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkZWZCb3Rvbi5udW0gPT09IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoQnlQYXNzKGFjY2lvbl9yZWdpc3RyYXJfcmVzcHVlc3RhLCB7IGZvclBrOiBmb3JQa1BhZHJlLCB2YXJpYWJsZTogYWdyZWdhciwgcmVzcHVlc3RhOiBudWxsIGFzIHVua25vd24gYXMgVmFsb3IgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2hCeVBhc3MoYWNjaW9uX3JlZ2lzdHJhcl9yZXNwdWVzdGEsIHsgZm9yUGs6IGZvclBrUGFkcmUsIHZhcmlhYmxlOiBsaXN0bywgcmVzcHVlc3RhOiBudWxsIGFzIHVua25vd24gYXMgVmFsb3IgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjYXNpbGxlcm8uZXhwcmVzaW9uX2hhYmlsaXRhcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2hCeVBhc3MoYWNjaW9uX3JlZ2lzdHJhcl9yZXNwdWVzdGEsIHsgZm9yUGs6IGZvclBrUGFkcmUsIHZhcmlhYmxlOiBjYXNpbGxlcm8uZXhwcmVzaW9uX2hhYmlsaXRhciBhcyBJZFZhcmlhYmxlLCByZXNwdWVzdGE6IG51bGwgYXMgdW5rbm93biBhcyBWYWxvciB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRDb25maXJtYWNpb25Cb3JyYWRvKG51bGwpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRGcmFzZUJvcnJhZG8oJycpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRFcnJvckZyYXNlQm9ycmFkbyhmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfX0+Qm9ycmFyIGRlIHRvZGFzIGZvcm1hczwvQnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9EaWFsb2dBY3Rpb25zPlxyXG4gICAgICAgICAgICA8L0RpYWxvZz5cclxuICAgICAgICApfVxyXG4gICAgPC9EZXNwbGVnYXJDYXNpbGxlcm8+XHJcbn1cclxuXHJcbmZ1bmN0aW9uIENhc2lsbGVyb0Rlc2Nvbm9jaWRvKHByb3BzOiB7IGNhc2lsbGVybzogQ2FzaWxsZXJvQmFzZSwgZm9yUGs6IEZvclBrIH0pIHtcclxuICAgIHJldHVybiA8RGVzcGxlZ2FyQ2FzaWxsZXJvXHJcbiAgICAgICAgaWQ9e2BjYXNpbGxlcm9kZXNjb25vY2lkby0ke3Byb3BzLmNhc2lsbGVyby5pZF9jYXNpbGxlcm99YH1cclxuICAgICAgICBjYXNpbGxlcm89e3Byb3BzLmNhc2lsbGVybyBhcyBCbG9xdWV9XHJcbiAgICAgICAgc3R5bGU9e3sgZGlzcGxheTogJ25vbmUnIH19XHJcbiAgICA+XHJcbiAgICAgICAgPFR5cG9ncmFwaHk+VGlwbyBkZSBjYXNpbGxlcm8gbm8gaW1wbGVtZW50YWRvOiBcIntwcm9wcy5jYXNpbGxlcm8udGlwb2N9XCIgcGFyYSBcIntwcm9wcy5jYXNpbGxlcm8uY2FzaWxsZXJvfVwiPC9UeXBvZ3JhcGh5PlxyXG4gICAgICAgIDxFbmNhYmV6YWRvRGVzcGxpZWd1ZSBjYXNpbGxlcm89e3Byb3BzLmNhc2lsbGVybyBhcyBDYXNpbGxlcm9FbmNhYmV6YWJsZX0gbGVlcj17ZmFsc2V9IGZvclBrPXtwcm9wcy5mb3JQa30gLz5cclxuICAgIDwvRGVzcGxlZ2FyQ2FzaWxsZXJvPlxyXG59XHJcblxyXG5mdW5jdGlvbiB1c2VTZWxlY3RvclZpdmllbmRhKGZvclBrOiBGb3JQaykge1xyXG4gICAgcmV0dXJuIHVzZVNlbGVjdG9yKChzdGF0ZTogQ2Fzb1N0YXRlKSA9PiB7XHJcbiAgICAgICAgdmFyIGVzdHJ1Y3R1cmEgPSBnZXRFc3RydWN0dXJhKCk7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgZm9ybXVsYXJpbzogZXN0cnVjdHVyYS5mb3JtdWxhcmlvc1tmb3JQay5mb3JtdWxhcmlvXS5jYXNpbGxlcm9zLFxyXG4gICAgICAgICAgICBtb2RvRGVzcGxpZWd1ZTogc3RhdGUub3BjaW9uZXMubW9kb0Rlc3BsaWVndWUsXHJcbiAgICAgICAgICAgIG9wY2lvbmVzOiBzdGF0ZS5vcGNpb25lcyxcclxuICAgICAgICB9XHJcbiAgICB9KVxyXG59XHJcblxyXG5mdW5jdGlvbiBDb25qdW50b1ByZWd1bnRhc0Rlc3BsaWVndWUocHJvcHM6IHsgY2FzaWxsZXJvOiBDb25qdW50b1ByZWd1bnRhcywgZm9ybXVsYXJpbzogRm9ybXVsYXJpbywgZm9yUGs6IEZvclBrIH0pIHtcclxuICAgIGxldCB7IGNhc2lsbGVybywgZm9yUGsgfSA9IHByb3BzO1xyXG4gICAgdmFyIGlkID0gYGNvbmp1bnRvLXByZWd1bnRhcy0ke2Nhc2lsbGVyby5pZF9jYXNpbGxlcm99YDtcclxuICAgIHJlZ2lzdHJhckVsZW1lbnRvKHtcclxuICAgICAgICBpZCxcclxuICAgICAgICBkaXJlY3Q6IHRydWUsXHJcbiAgICAgICAgZnVuOiByZWdpc3RyYWRvckRlVmFyaWFibGUoY2FzaWxsZXJvKVxyXG4gICAgfSlcclxuICAgIGxldCBtb2RvRGVzcGxpZWd1ZSA9IFwibm9ybWFsXCI7XHJcbiAgICBsZXQgaGFiaWxpdGFkbyA9IHRydWU7XHJcbiAgICByZXR1cm4gaGFiaWxpdGFkbyB8fCBtb2RvRGVzcGxpZWd1ZSA9PSAnbWV0YWRhdG9zJyA/IDxEZXNwbGVnYXJDYXNpbGxlcm8gaWQ9e2lkfSBjYXNpbGxlcm89e2Nhc2lsbGVyb30+XHJcbiAgICAgICAgPEVuY2FiZXphZG9EZXNwbGllZ3VlIGNhc2lsbGVybz17Y2FzaWxsZXJvfSBmb3JQaz17Zm9yUGt9IGxlZXI9e2Nhc2lsbGVyby5sZWVyICE9PSBmYWxzZX0gLz5cclxuICAgICAgICA8RGVzcGxlZ2FyQ29udGVuaWRvSW50ZXJub0Jsb3F1ZU9Gb3JtdWxhcmlvIGJsb3F1ZU9Gb3JtdWxhcmlvPXtjYXNpbGxlcm99IGZvcm11bGFyaW89e3Byb3BzLmZvcm11bGFyaW99IGZvclBrPXtmb3JQa30gbXVsdGlwbGU9e2ZhbHNlfSAvPlxyXG4gICAgPC9EZXNwbGVnYXJDYXNpbGxlcm8+IDogbnVsbDtcclxufVxyXG5cclxuZnVuY3Rpb24gRGVzcGxlZ2FyQ29udGVuaWRvSW50ZXJub0Jsb3F1ZU9Gb3JtdWxhcmlvKHByb3BzOiB7IGJsb3F1ZU9Gb3JtdWxhcmlvOiBCbG9xdWUgfCBGb3JtdWxhcmlvIHwgQ29uanVudG9QcmVndW50YXMsIGZvcm11bGFyaW86IEZvcm11bGFyaW8sIGZvclBrOiBGb3JQaywgbXVsdGlwbGU6IGJvb2xlYW4gfSkge1xyXG4gICAgdmFyIHBhcmNpYWxpemFibGUgPSBwcm9wcy5ibG9xdWVPRm9ybXVsYXJpby50aXBvYyA9PSAnRic7XHJcbiAgICBjb25zdCBbdmVyVG9kbywgc2V0VmVyVG9kb10gPSB1c2VTdGF0ZSghcGFyY2lhbGl6YWJsZSk7XHJcbiAgICBjb25zdCBbZm9yUGtBY3R1YWwsIHNldEZvclBrQWN0dWFsXSA9IHVzZVN0YXRlPElkQ2FzaWxsZXJvIHwgbnVsbD4obnVsbCk7XHJcbiAgICBpZiAocGFyY2lhbGl6YWJsZSkge1xyXG4gICAgICAgIGlmIChmb3JQa0FjdHVhbCAhPSBwcm9wcy5ibG9xdWVPRm9ybXVsYXJpby5jYXNpbGxlcm8pIHtcclxuICAgICAgICAgICAgc2V0VmVyVG9kbyhmYWxzZSlcclxuICAgICAgICAgICAgc2V0Rm9yUGtBY3R1YWwocHJvcHMuYmxvcXVlT0Zvcm11bGFyaW8uY2FzaWxsZXJvKVxyXG4gICAgICAgIH1cclxuICAgICAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgICAgICB2YXIgdGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHNldFZlclRvZG8odHJ1ZSk7XHJcbiAgICAgICAgICAgIH0sIDI1MClcclxuICAgICAgICAgICAgcmV0dXJuICgpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICh0aW1lcikge1xyXG4gICAgICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lcik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgfVxyXG4gICAgY29uc3QgbGltaXRlTm9WZXJUb2RvID0gMztcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgaWYgKHByb3BzLmJsb3F1ZU9Gb3JtdWxhcmlvLnRpcG9jID09ICdGJykge1xyXG4gICAgICAgICAgICB2b2xjYWRvSW5pY2lhbEVsZW1lbnRvc1JlZ2lzdHJhZG9zKHByb3BzLmZvclBrKTtcclxuICAgICAgICB9XHJcbiAgICB9LCBbdG9QbGFpbkZvclBrKHByb3BzLmZvclBrKSwgdmVyVG9kb10pXHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIGlmIChwcm9wcy5ibG9xdWVPRm9ybXVsYXJpby50aXBvYyA9PSAnRicgJiYgdmVyVG9kbykge1xyXG4gICAgICAgICAgICB2YXIgeyBzaWd1aWVudGVWYXJpYWJsZSwgdmFyaWFibGVBY3R1YWwgfSA9IGRpc3BhdGNoQnlQYXNzKGFjY2lvbl9yZWdpc3RyYXJfcmVzcHVlc3RhLCB7IHJlc3B1ZXN0YTogbnVsbCwgdmFyaWFibGU6IE5PX0NBTUJJQVJfX1NPTE9fVFJBRVJfU1RBVFVTLCBmb3JQazogcHJvcHMuZm9yUGsgfSk7XHJcbiAgICAgICAgICAgIGlmICh2YXJpYWJsZUFjdHVhbCB8fCBzaWd1aWVudGVWYXJpYWJsZSkge1xyXG4gICAgICAgICAgICAgICAgZW5mb2NhckVsZW1lbnRvRGVWYXJpYWJsZShjb2FsZXNjZSh2YXJpYWJsZUFjdHVhbCBhcyBzdHJpbmcgfCBudWxsLCBzaWd1aWVudGVWYXJpYWJsZSBhcyBzdHJpbmcgfCBudWxsKSBhcyBJZFZhcmlhYmxlKVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdmFyIGZlZWRiYWNrUm93VmFsaWRhdG9yID0gZ2V0RmVlZGJhY2tSb3dWYWxpZGF0b3IoKVxyXG4gICAgICAgICAgICAgICAgaWYgKGZlZWRiYWNrUm93VmFsaWRhdG9yW3RvUGxhaW5Gb3JQayhwcm9wcy5mb3JQayldLnJlc3VtZW4gPT0gJ29rJykge1xyXG4gICAgICAgICAgICAgICAgICAgIHNjcm9sbFRvVG9wKClcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2Nyb2xsVG9Ub3AoKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9XCJjb250ZW5pZG9cIj5cclxuICAgICAgICB7dmVyVG9kbyA/IG51bGwgOiA8ZGl2IHN0eWxlPXt7IGhlaWdodDogXCI1MDBweFwiLCB0ZXh0QWxpZ246ICdjZW50ZXInLCB2ZXJ0aWNhbEFsaWduOiAnbWlkZGxlJywgd2lkdGg6ICcxMDAlJywgcG9zaXRpb246IFwiZml4ZWRcIiwgYmFja2dyb3VuZENvbG9yOiAncmdiYSgxMDAsMTAwLDEwMCwwLjMpJywgZm9udFNpemU6ICcyMDAlJyB9fSA+Y2FyZ2FuZG8uLi48L2Rpdj59XHJcbiAgICAgICAge3Byb3BzLmJsb3F1ZU9Gb3JtdWxhcmlvLmNhc2lsbGVyb3MubWFwKChjYXNpbGxlcm8sIGkpID0+IHtcclxuICAgICAgICAgICAgdmFyIGtleSA9IGNhc2lsbGVyby50aXBvYyArICctJyArIGNhc2lsbGVyby5pZF9jYXNpbGxlcm8gKyAnLScgKyBpO1xyXG4gICAgICAgICAgICByZXR1cm4gKHZlclRvZG8gfHwgaSA8IGxpbWl0ZU5vVmVyVG9kbyA/XHJcbiAgICAgICAgICAgICAgICAoXHJcbiAgICAgICAgICAgICAgICAgICAgY2FzaWxsZXJvLnRpcG9jID09IFwiUFwiID8gPFByZWd1bnRhRGVzcGxpZWd1ZSBrZXk9e2tleX0gcHJlZ3VudGE9e2Nhc2lsbGVyb30gZm9yUGs9e3Byb3BzLmZvclBrfSBkZXNwbGllZ3VlRW5jYWJlemFkbz17Y2FzaWxsZXJvLmRlc3BsaWVndWVFbmNhYmV6YWRvID8/IChwcm9wcy5ibG9xdWVPRm9ybXVsYXJpby50aXBvYyA9PSAnQ1AnID8gJ2xhdGVyYWwnIDogJ3N1cGVyaW9yJyl9IC8+IDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzaWxsZXJvLnRpcG9jID09IFwiQlwiID8gPEJsb3F1ZURlc3BsaWVndWUga2V5PXtrZXl9IGJsb3F1ZT17Y2FzaWxsZXJvfSBmb3JtdWxhcmlvPXtwcm9wcy5mb3JtdWxhcmlvfSBmb3JQaz17cHJvcHMuZm9yUGt9IC8+IDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2lsbGVyby50aXBvYyA9PSBcIkZJTFRST1wiID8gPEZpbHRyb0Rlc3BsaWVndWUga2V5PXtrZXl9IGZpbHRybz17Y2FzaWxsZXJvfSBmb3JQaz17cHJvcHMuZm9yUGt9IC8+IDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNpbGxlcm8udGlwb2MgPT0gXCJCRlwiID8gPEJvdG9uRm9ybXVsYXJpb0Rlc3BsaWVndWUga2V5PXtrZXl9IGNhc2lsbGVybz17Y2FzaWxsZXJvfSBmb3JtdWxhcmlvPXtwcm9wcy5mb3JtdWxhcmlvfSBmb3JQaz17cHJvcHMuZm9yUGt9IC8+IDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzaWxsZXJvLnRpcG9jID09IFwiQ09OU1wiID8gPENvbnNpc3RlbmNpYURlc3BsaWVndWUga2V5PXtrZXl9IGNhc2lsbGVybz17Y2FzaWxsZXJvfSBmb3JQaz17cHJvcHMuZm9yUGt9IC8+IDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2lsbGVyby50aXBvYyA9PSBcIkNQXCIgPyA8Q29uanVudG9QcmVndW50YXNEZXNwbGllZ3VlIGtleT17a2V5fSBjYXNpbGxlcm89e2Nhc2lsbGVyb30gZm9ybXVsYXJpbz17cHJvcHMuZm9ybXVsYXJpb30gZm9yUGs9e3Byb3BzLmZvclBrfSAvPiA6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzaWxsZXJvLnRpcG9jID09IFwiVEVYVE9cIiA/IDxUZXh0b0Rlc3BsaWVndWUga2V5PXtrZXl9IGNhc2lsbGVybz17Y2FzaWxsZXJvfSBmb3JQaz17cHJvcHMuZm9yUGt9IC8+IDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzaWxsZXJvLnRpcG9jID09IFwiUE1BVFJJWlwiID8gPFBNYXRyaXpEZXNwbGllZ3VlIGtleT17a2V5fSBjYXNpbGxlcm89e2Nhc2lsbGVyb30gZm9yUGs9e3Byb3BzLmZvclBrfSAvPiA6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNpbGxlcm8udGlwb2MgPT0gXCJMSUJSRVwiID8gPExpYnJlRGVzcGxpZWd1ZSBrZXk9e2tleX0gY2FzaWxsZXJvPXtjYXNpbGxlcm99IGZvcm11bGFyaW89e3Byb3BzLmZvcm11bGFyaW99IGZvclBrPXtwcm9wcy5mb3JQa30gLz4gOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxDYXNpbGxlcm9EZXNjb25vY2lkbyBrZXk9e2tleX0gY2FzaWxsZXJvPXtjYXNpbGxlcm99IGZvclBrPXtwcm9wcy5mb3JQa30gLz5cclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIDogaSA9PSBsaW1pdGVOb1ZlclRvZG8gP1xyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYga2V5PSckc3Bpbm5lcicgY2xhc3NOYW1lPVwic3Bpbm5lci1ib3JkZXJcIiByb2xlPVwic3RhdHVzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPmNhcmdhbmRvIGJsb3F1ZS4uLjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA6IG51bGxcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgfTwvZGl2PlxyXG59XHJcblxyXG5mdW5jdGlvbiBCbG9xdWVEZXNwbGllZ3VlKHByb3BzOiB7IGJsb3F1ZTogQmxvcXVlLCBmb3JtdWxhcmlvOiBGb3JtdWxhcmlvLCBmb3JQazogRm9yUGsgfSkge1xyXG4gICAgdmFyIHsgYmxvcXVlLCBmb3JQayB9ID0gcHJvcHM7XHJcbiAgICB2YXIga2V5ID0gYmxvcXVlLnZlcl9pZCAhPSAnLScgJiYgYmxvcXVlLnZlcl9pZCB8fCBibG9xdWUuY2FzaWxsZXJvO1xyXG4gICAgdmFyIGFjdGl2ZVN0ZXAgPSAwO1xyXG4gICAgdmFyIG11bHRpcGxlID0gISFibG9xdWUudW5pZGFkX2FuYWxpc2lzO1xyXG4gICAgdmFyIGxpc3RhID0gW3sgZm9yUGssIGtleTogMCwgbXVsdGlwbGU6IGZhbHNlIH1dO1xyXG4gICAgdmFyIGhhYmlsaXRhZG9yID0gYmxvcXVlLmV4cHJlc2lvbl9oYWJpbGl0YXJfanMgPyBnZXRGdW5jaW9uSGFiaWxpdGFyKGJsb3F1ZS5leHByZXNpb25faGFiaWxpdGFyX2pzKSA6ICgpID0+IHRydWU7XHJcbiAgICB2YXIgeyBtb2RvRGVzcGxpZWd1ZSB9ID0gdXNlU2VsZWN0b3JWaXZpZW5kYShmb3JQayk7XHJcbiAgICBpZiAobXVsdGlwbGUpIHtcclxuICAgICAgICAvLyBUT0RPOiBHRU5FUkFMSVpBUlxyXG4gICAgICAgIC8vIEB0cy1pZ25vcmVcclxuICAgICAgICAvLyBsaXN0YT1yZXNwdWVzdGFzLnBlcnNvbmFzLm1hcCgoX3BlcnNvbmEsIGkpPT4oXHJcbiAgICAgICAgLy8gICAgIHtmb3JQazp7Li4uZm9yUGssIHBlcnNvbmE6aSsxfSwga2V5OmkrMSwgbXVsdGlwbGU6dHJ1ZX1cclxuICAgICAgICAvLyApKVxyXG4gICAgfVxyXG4gICAgdmFyIGlkID0gYGJsb3F1ZS0ke2Jsb3F1ZS5pZF9jYXNpbGxlcm99YDtcclxuICAgIHJlZ2lzdHJhckVsZW1lbnRvKHtcclxuICAgICAgICBpZCxcclxuICAgICAgICBzdHlsZTogJ2Rpc3BsYXknLFxyXG4gICAgICAgIGZ1bjogKHJlc3B1ZXN0YXM6IFJlc3B1ZXN0YXMpID0+IGhhYmlsaXRhZG9yKHJlc3B1ZXN0YXMpIHx8IG1vZG9EZXNwbGllZ3VlID09ICdtZXRhZGF0b3MnID8gJ3Vuc2V0JyA6ICdub25lJ1xyXG4gICAgfSlcclxuICAgIHJldHVybiA8RGVzcGxlZ2FyQ2FzaWxsZXJvIGNhc2lsbGVybz17YmxvcXVlfSBudWVzdHJvLWJsb3F1ZT17YmxvcXVlLmlkX2Nhc2lsbGVyb30gZXMtbXVsdGlwbGU9e211bHRpcGxlID8gJ1NJJyA6ICdOTyd9IGlkPXtpZH0+XHJcbiAgICAgICAgPEVuY2FiZXphZG9EZXNwbGllZ3VlIGNhc2lsbGVybz17YmxvcXVlfSBmb3JQaz17Zm9yUGt9IC8+XHJcbiAgICAgICAge2xpc3RhLm1hcCgoeyBrZXksIGZvclBrLCBtdWx0aXBsZSB9KSA9PlxyXG4gICAgICAgICAgICA8RGVzcGxlZ2FyQ29udGVuaWRvSW50ZXJub0Jsb3F1ZU9Gb3JtdWxhcmlvIGtleT17a2V5fSBibG9xdWVPRm9ybXVsYXJpbz17YmxvcXVlfSBmb3JtdWxhcmlvPXtwcm9wcy5mb3JtdWxhcmlvfSBmb3JQaz17Zm9yUGt9IG11bHRpcGxlPXttdWx0aXBsZX0gLz5cclxuICAgICAgICApfVxyXG4gICAgPC9EZXNwbGVnYXJDYXNpbGxlcm8+O1xyXG59XHJcblxyXG5jb25zdCBGb3JtdWxhcmlvRW5jYWJlemFkbyA9IERlc3BsaWVndWVFbmNhYmV6YWRvO1xyXG5cclxuZnVuY3Rpb24gTWVudUxldHJhKHByb3BzOiB7IHRhbWFubmlvOiBudW1iZXIsIGRlbm9taW5hY2lvbjogc3RyaW5nIH0pIHtcclxuICAgIGNvbnN0IGNhbWJpYXJMZXRyYSA9ICh0YW1hbm5pbzogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgdmFyIHJvb3QgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XHJcbiAgICAgICAgcm9vdC5zdHlsZS5mb250U2l6ZSA9IHRhbWFubmlvICsgXCJweFwiO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIDxNZW51SXRlbVxyXG4gICAgICAgIG9uQ2xpY2s9eygpID0+IGNhbWJpYXJMZXRyYShwcm9wcy50YW1hbm5pbyl9IHN0eWxlPXt7IGZvbnRTaXplOiBwcm9wcy50YW1hbm5pbyArICdweCcgfX1cclxuICAgID5sZXRyYSB7cHJvcHMuZGVub21pbmFjaW9ufTwvTWVudUl0ZW0+XHJcbn1cclxuXHJcbmZ1bmN0aW9uIEJhcnJhRGVOYXZlZ2FjaW9uKHByb3BzOiB7IGZvclBrOiBGb3JQaywgc29sb0xlY3R1cmE6IGJvb2xlYW4sIG1vZG9EaXJlY3RvOiBib29sZWFuIH0pIHtcclxuICAgIGNvbnN0IGRpc3BhdGNoID0gdXNlRGlzcGF0Y2goKTtcclxuICAgIGNvbnN0IGZvclBrID0gcHJvcHMuZm9yUGs7XHJcbiAgICBjb25zdCB7IG9wY2lvbmVzIH0gPSB1c2VTZWxlY3RvclZpdmllbmRhKGZvclBrKTtcclxuICAgIGNvbnN0IFtjb25maXJtYUNlcnJhciwgc2V0Q29uZmlybWFDZXJyYXJdID0gdXNlU3RhdGU8Ym9vbGVhbiB8IG51bGw+KGZhbHNlKTtcclxuICAgIHZhciBlc3RydWN0dXJhID0gZ2V0RXN0cnVjdHVyYSgpO1xyXG4gICAgdmFyIGRvbWluaW8gPSBnZXREYXRvc0J5UGFzcygpLmluZm9ybWFjaW9uSGRyW2ZvclBrW2VzdHJ1Y3R1cmEucGtBZ3JlZ2FkYVVhUHBhbF1dLnRlbS5kb21pbmlvO1xyXG4gICAgdmFyIGNlcnJhckRpcmVjdG8gPSBhc3luYyBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmVtb3ZlQ1NTQnlJZChCT09UU1RSQVBfNV8xXzNfU1JDKTtcclxuICAgICAgICBnb3RvQ29uc2lzdGlyKFxyXG4gICAgICAgICAgICBlc3RydWN0dXJhLm9wZXJhdGl2byBhcyBJZE9wZXJhdGl2byxcclxuICAgICAgICAgICAgZ2V0RGF0b3NCeVBhc3MoKS5pbmZvcm1hY2lvbkhkcltmb3JQa1tlc3RydWN0dXJhLnBrQWdyZWdhZGFVYVBwYWxdXS50YXJlYS50YXJlYSxcclxuICAgICAgICAgICAgZm9yUGtbZXN0cnVjdHVyYS5wa0FncmVnYWRhVWFQcGFsXVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgLy92YXIgaGFzaD1uZXcgVVJMU2VhcmNoUGFyYW1zKGxvY2F0aW9uLmhhc2g/LnJlcGxhY2UoL15cXCMvLCcnKS5zcGxpdCgnJmF1dG9wcm9jZWQnKVswXSk7XHJcbiAgICAgICAgLy8vL2hhc2guZGVsZXRlKCdhdXRvcHJvY2VkJylcclxuICAgICAgICAvL2Nsb3NlKCk7XHJcbiAgICAgICAgLy9sb2NhdGlvbi5oYXNoPWhhc2gudG9TdHJpbmcoKTtcclxuICAgIH1cclxuICAgIHZhciBib3RvbmVzRm9ybXVsYXJpbyA9IFtdO1xyXG4gICAgaWYgKCFvcGNpb25lcy5tb2RvRGlyZWN0bykge1xyXG4gICAgICAgIGJvdG9uZXNGb3JtdWxhcmlvLnB1c2goeyBxdWU6ICdoZHInLCBhYnI6ICdIZFInLCBpZDogSURfQk9UT05fVk9MVkVSX0hEUiwgbGFiZWw6ICdIb2phIGRlIFJ1dGEnLCByZXRyb2Nlc286IDAgfSlcclxuICAgIH1cclxuICAgIG9wY2lvbmVzLnBpbGFGb3JQay5mb3JFYWNoKChmb3JQaywgaSkgPT5cclxuICAgICAgICBib3RvbmVzRm9ybXVsYXJpby5wdXNoKHsgcXVlOiAndm9sdmVyJywgYWJyOiBmb3JQay5mb3JtdWxhcmlvLnJlcGxhY2UoL15GOi8sICcnKSwgbGFiZWw6IGZvclBrLmZvcm11bGFyaW8sIHJldHJvY2Vzbzogb3BjaW9uZXMucGlsYUZvclBrLmxlbmd0aCAtIGkgfSlcclxuICAgIClcclxuICAgIGJvdG9uZXNGb3JtdWxhcmlvLnB1c2goeyBxdWU6ICcnLCBhYnI6IGZvclBrLmZvcm11bGFyaW8ucmVwbGFjZSgvXkY6LywgJycpLCBsYWJlbDogZm9yUGsuZm9ybXVsYXJpbywgcmV0cm9jZXNvOiAwIH0pO1xyXG4gICAgcmVnaXN0cmFyRWxlbWVudG8oe1xyXG4gICAgICAgIGlkOiBwcm9wcy5tb2RvRGlyZWN0byA/IElEX0JPVE9OX0NFUlJBUiA6IElEX0JPVE9OX1ZPTFZFUl9IRFIsIGRpcmVjdDogdHJ1ZSxcclxuICAgICAgICBmdW46IChcclxuICAgICAgICAgICAgcjogUmVzcHVlc3RhcyxcclxuICAgICAgICAgICAgX2ZlZWRiYWNrRm9ybTogRm9ybVN0cnVjdHVyZVN0YXRlPElkVmFyaWFibGUsIFZhbG9yLCBJZEZpbj4sXHJcbiAgICAgICAgICAgIGVsZW1lbnRvOiBIVE1MRGl2RWxlbWVudCxcclxuICAgICAgICAgICAgZmVlZGJhY2tBbGw6IHsgW2Zvcm11bGFyaW8gaW4gUGxhaW5Gb3JQa106IEZvcm1TdHJ1Y3R1cmVTdGF0ZTxJZFZhcmlhYmxlLCBWYWxvciwgSWRGaW4+IH0sXHJcbiAgICAgICAgICAgIF9lc3RydWN0dXJhOiBFc3RydWN0dXJhXHJcbiAgICAgICAgKSA9PiB7XHJcbiAgICAgICAgICAgIGVsZW1lbnRvLnNldEF0dHJpYnV0ZSgncmVzdW1lbi1lc3RhZG8nLCBjYWxjdWxhclJlc3VtZW5WaXZpZW5kYShmb3JQaywgZmVlZGJhY2tBbGwsIHIpLnJlc3VtZW5Fc3RhZG8pO1xyXG4gICAgICAgIH1cclxuICAgIH0pXHJcbiAgICBjb25zdCBjYW1iaWFyID0gKG1vZG9EZXNwbGllZ3VlOiBNb2RvRGVzcGxpZWd1ZSkgPT4ge1xyXG4gICAgICAgIGRpc3BhdGNoKGRpc3BhdGNoZXJzLk1PRE9fREVTUExJRUdVRSh7IG1vZG9EZXNwbGllZ3VlIH0pKTtcclxuICAgIH1cclxuICAgIHJldHVybiA8PlxyXG4gICAgICAgIDxCdXR0b25Hcm91cCBrZXk9XCJmb3JtdWxhcmlvc1wiIGNsYXNzTmFtZT1cImJhcnJhLW5hdmVnYWNpb25cIiBzb2xvLWxlY3R1cmE9e3Byb3BzLnNvbG9MZWN0dXJhID8gJ3NpJyA6ICdubyd9ID5cclxuICAgICAgICAgICAge2JvdG9uZXNGb3JtdWxhcmlvLm1hcCgoYiwgaSkgPT5cclxuICAgICAgICAgICAgICAgIDxCdXR0b24gY29sb3I9e2IucXVlID09IGZvclBrLmZvcm11bGFyaW8gPyBcInByaW1hcnlcIiA6IFwiaW5oZXJpdFwifSB2YXJpYW50PVwib3V0bGluZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgIGlkPXtiLmlkfVxyXG4gICAgICAgICAgICAgICAgICAgIGtleT17YCR7aX0tJHtiLnF1ZX0tJHtiLnJldHJvY2Vzb31gfVxyXG4gICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXshYi5xdWV9XHJcbiAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNwYXRjaChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGIucXVlID09ICdoZHInID8gZGlzcGF0Y2hlcnMuVk9MVkVSX0hEUih7fSkgOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoZXJzLlZPTFZFUl9ERV9GT1JNVUxBUklPKHsgbWFnbml0dWRSZXRyb2Nlc286IGIucmV0cm9jZXNvIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGIucXVlID09ICdoZHInID8gbnVsbCA6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwYXRjaEJ5UGFzcyhhY2Npb25fYWJyaXJfZm9ybXVsYXJpbywgeyBmb3JQazogb3BjaW9uZXMucGlsYUZvclBrW29wY2lvbmVzLnBpbGFGb3JQay5sZW5ndGggLSBiLnJldHJvY2Vzb10gfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJhYnJcIj57Yi5hYnJ9PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIHtiLnF1ZSA9PSAnaGRyJyA/IDxJQ09OLkFzc2lnbm1lbnQgLz4gOiBudWxsfVxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImxhYmVsXCI+e2IubGFiZWx9PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9CdXR0b24+XHJcbiAgICAgICAgICAgICl9XHJcbiAgICAgICAgPC9CdXR0b25Hcm91cD5cclxuICAgICAgICB7cHJvcHMuc29sb0xlY3R1cmEgPyA8VHlwb2dyYXBoeSBjb21wb25lbnQ9XCJzcGFuXCIgc3R5bGU9e3sgbWFyZ2luOiAnMCAxMHB4JyB9fT4gKFNvbG8gTGVjdHVyYSkgPC9UeXBvZ3JhcGh5PiA6IG51bGx9XHJcbiAgICAgICAge3Byb3BzLm1vZG9EaXJlY3RvID9cclxuICAgICAgICAgICAgPD5cclxuICAgICAgICAgICAgICAgIDxCdXR0b25Hcm91cCBrZXk9XCJ2b2x2ZXJfeV9ncmFiYXJcIiBzdHlsZT17eyBtYXJnaW46ICcwIDAgMCAzMHB4JyB9fT5cclxuICAgICAgICAgICAgICAgICAgICA8QnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkPXtJRF9CT1RPTl9DRVJSQVJ9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPVwiaW5oZXJpdFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJvdXRsaW5lZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e2FzeW5jICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9wcy5zb2xvTGVjdHVyYSB8fCAhZ2V0RGlydHkoKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlcnJhckRpcmVjdG8oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0Q29uZmlybWFDZXJyYXIodHJ1ZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxJQ09OLkV4aXRUb0FwcCAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxEaWFsb2dcclxuICAgICAgICAgICAgICAgICAgICAgICAgb3Blbj17ISFjb25maXJtYUNlcnJhcn1cclxuICAgICAgICAgICAgICAgICAgICAgICAgLy9oYWNlIHF1ZSBubyBzZSBjaWVycmUgZWwgbWVuc2FqZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNsb3NlPXsoKSA9PiBzZXRDb25maXJtYUNlcnJhcihmYWxzZSl9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWxsZWRieT1cImFsZXJ0LWRpYWxvZy10aXRsZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtZGVzY3JpYmVkYnk9XCJhbGVydC1kaWFsb2ctZGVzY3JpcHRpb25cIlxyXG4gICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPERpYWxvZ1RpdGxlIGlkPVwiYWxlcnQtZGlhbG9nLXRpdGxlXCI+Q29uZmlybWUgY2llcnJlIGRlIGVuY3Vlc3RhPC9EaWFsb2dUaXRsZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPERpYWxvZ0NvbnRlbnQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8RGlhbG9nQ29udGVudFRleHQgaWQ9XCJhbGVydC1kaWFsb2ctZGVzY3JpcHRpb25cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFc3TDoSBwb3Igc2FsaXIgZGUgbGEgZW5jdWVzdGEsIHNlIHBlcmRlcsOhbiBsb3MgY2FtYmlvcyBubyBndWFyZGFkb3MuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0RpYWxvZ0NvbnRlbnRUZXh0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L0RpYWxvZ0NvbnRlbnQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxEaWFsb2dBY3Rpb25zPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPEJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VycmFyRGlyZWN0bygpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcj1cInNlY29uZGFyeVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudD1cIm91dGxpbmVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjYXJ0YXIgY2FtYmlvcyB5IGNlcnJhclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9CdXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRDb25maXJtYUNlcnJhcihmYWxzZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudD1cImNvbnRhaW5lZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWFyIGVkaXRhbmRvIGVuY3Vlc3RhXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0J1dHRvbj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvRGlhbG9nQWN0aW9ucz5cclxuICAgICAgICAgICAgICAgICAgICA8L0RpYWxvZz5cclxuICAgICAgICAgICAgICAgICAgICB7cHJvcHMuc29sb0xlY3R1cmEgPyBudWxsIDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgPEJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9e1wic2F2ZS1idXR0b25cIn1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPVwiaW5oZXJpdFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50PVwib3V0bGluZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e3RydWV9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXthc3luYyAoKSA9PiB0cnVlfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SUNPTi5TYXZlIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIDwvQnV0dG9uR3JvdXA+XHJcbiAgICAgICAgICAgIDwvPlxyXG4gICAgICAgICAgICA6IG51bGx9XHJcbiAgICAgICAgPFR5cG9ncmFwaHkgY2xhc3NOYW1lPVwibW9zdHJhci1mb3JQa1wiIGNvbXBvbmVudD1cInNwYW5cIiBzdHlsZT17eyBtYXJnaW46ICcwIDEwcHgnIH19PlxyXG4gICAgICAgICAgICB7VkVSX0RPTUlOSU8gPyA8ZGl2IGtleT17ZG9taW5pb30+PHNwYW4+ZG9taW5pbzwvc3Bhbj48c3Bhbj57ZG9taW5pb308L3NwYW4+PC9kaXY+IDogJyd9XHJcbiAgICAgICAgICAgIHtsaWtlQXIocHJvcHMuZm9yUGspLmZpbHRlcigoXywgaykgPT4gayAhPSAnZm9ybXVsYXJpbycpLm1hcCgodiwgaykgPT5cclxuICAgICAgICAgICAgICAgIDxkaXYga2V5PXtrfT48c3Bhbj57a308L3NwYW4+PHNwYW4+e3Z9PC9zcGFuPjwvZGl2PlxyXG4gICAgICAgICAgICApLmFycmF5KCl9XHJcbiAgICAgICAgPC9UeXBvZ3JhcGh5PlxyXG4gICAgICAgIDxGYXN0U2V0dXA+XHJcbiAgICAgICAgICAgIDxNZW51SXRlbSBvbkNsaWNrPXsoKSA9PiBjYW1iaWFyKFwicmVsZXZhbWllbnRvXCIpfT5ub3JtYWw8L01lbnVJdGVtPlxyXG4gICAgICAgICAgICA8TWVudUl0ZW0gb25DbGljaz17KCkgPT4gY2FtYmlhcihcIlBERlwiKX0+UERGIHBhcmEgcmVsZXZhbWllbnRvPC9NZW51SXRlbT5cclxuICAgICAgICAgICAgPE1lbnVJdGVtIG9uQ2xpY2s9eygpID0+IGNhbWJpYXIoXCJtZXRhZGF0b3NcIil9PnJldmlzYXIgbWV0YWRhdG9zPC9NZW51SXRlbT5cclxuICAgICAgICAgICAgPERpdmlkZXIgLz5cclxuICAgICAgICAgICAgPE1lbnVMZXRyYSB0YW1hbm5pbz17MTJ9IGRlbm9taW5hY2lvbj1cIm11eSBjaGljYVwiIC8+XHJcbiAgICAgICAgICAgIDxNZW51TGV0cmEgdGFtYW5uaW89ezE0fSBkZW5vbWluYWNpb249XCJjaGljYVwiIC8+XHJcbiAgICAgICAgICAgIDxNZW51TGV0cmEgdGFtYW5uaW89ezE2fSBkZW5vbWluYWNpb249XCJub3JtYWxcIiAvPlxyXG4gICAgICAgICAgICA8TWVudUxldHJhIHRhbWFubmlvPXsxOX0gZGVub21pbmFjaW9uPVwiZ3JhbmRlXCIgLz5cclxuICAgICAgICAgICAgPE1lbnVMZXRyYSB0YW1hbm5pbz17MjJ9IGRlbm9taW5hY2lvbj1cImVub3JtZVwiIC8+XHJcbiAgICAgICAgICAgIDxEaXZpZGVyIC8+XHJcbiAgICAgICAgICAgIDxNZW51SXRlbT48bGFiZWw+PENoZWNrYm94IGNoZWNrZWQ9e29wY2lvbmVzLmNvbkNhbXBvT3BjaW9uZXN9IG9uQ2hhbmdlPXtcclxuICAgICAgICAgICAgICAgICgpID0+IGRpc3BhdGNoKGRpc3BhdGNoZXJzLlNFVF9PUENJT04oeyBvcGNpb246ICdjb25DYW1wb09wY2lvbmVzJywgdmFsb3I6ICFvcGNpb25lcy5jb25DYW1wb09wY2lvbmVzIH0pKVxyXG4gICAgICAgICAgICB9IGlucHV0UHJvcHM9e3sgJ2FyaWEtbGFiZWwnOiAncHJpbWFyeSBjaGVja2JveCcgfX0gLz5jYW1wbyBvcGNpb25lczwvbGFiZWw+PC9NZW51SXRlbT5cclxuICAgICAgICAgICAgPE1lbnVJdGVtPjxsYWJlbD48Q2hlY2tib3ggY2hlY2tlZD17b3BjaW9uZXMuc2FsdG9BdXRvbWF0aWNvfSBvbkNoYW5nZT17XHJcbiAgICAgICAgICAgICAgICAoKSA9PiBkaXNwYXRjaChkaXNwYXRjaGVycy5TRVRfT1BDSU9OKHsgb3BjaW9uOiAnc2FsdG9BdXRvbWF0aWNvJywgdmFsb3I6ICFvcGNpb25lcy5zYWx0b0F1dG9tYXRpY28gfSkpXHJcbiAgICAgICAgICAgIH0gaW5wdXRQcm9wcz17eyAnYXJpYS1sYWJlbCc6ICdwcmltYXJ5IGNoZWNrYm94JyB9fSAvPnNhbHRvIGF1dG9tw6F0aWNvPC9sYWJlbD48L01lbnVJdGVtPlxyXG4gICAgICAgIDwvRmFzdFNldHVwPlxyXG4gICAgPC8+XHJcbn1cclxuXHJcbmZ1bmN0aW9uIEJvdG9uVm9sdmVyRW5EaXYoeyBpZCB9OiB7IGlkOiBzdHJpbmcgfSkge1xyXG4gICAgdmFyIHsgb3BjaW9uZXMgfSA9IHVzZVNlbGVjdG9yKChzdGF0ZTogQ2Fzb1N0YXRlKSA9PiAoeyBvcGNpb25lczogc3RhdGUub3BjaW9uZXMgfSkpO1xyXG4gICAgY29uc3QgZGlzcGF0Y2ggPSB1c2VEaXNwYXRjaCgpO1xyXG4gICAgdmFyIGVzVm9sdmVyID0gb3BjaW9uZXMucGlsYUZvclBrLmxlbmd0aCA+IDA7XHJcbiAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9XCJkaXYtYm90b24tdm9sdmVyXCI+XHJcbiAgICAgICAgPEJ1dHRvbiBpZD17aWR9IGNsYXNzTmFtZT1cImJvdG9uLXZvbHZlclwiXHJcbiAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChlc1ZvbHZlcikge1xyXG4gICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoQnlQYXNzKGFjY2lvbl9hYnJpcl9mb3JtdWxhcmlvLCB7IGZvclBrOiBvcGNpb25lcy5waWxhRm9yUGtbb3BjaW9uZXMucGlsYUZvclBrLmxlbmd0aCAtIDFdIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoKGRpc3BhdGNoZXJzLlZPTFZFUl9ERV9GT1JNVUxBUklPKHsgbWFnbml0dWRSZXRyb2Nlc286IDEgfSkpXHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBib3RvbkNlcnJhciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKElEX0JPVE9OX0NFUlJBUikgfHwgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoSURfQk9UT05fVk9MVkVSX0hEUilcclxuICAgICAgICAgICAgICAgICAgICBpZiAoYm90b25DZXJyYXIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYm90b25DZXJyYXIuY2xpY2soKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH19XHJcbiAgICAgICAgPiA8SUNPTi5DaGV2cm9uTGVmdCAvPntlc1ZvbHZlciA/IFwiIFZvbHZlclwiIDogXCIgQ2VycmFyXCJ9PC9CdXR0b24+XHJcbiAgICA8L2Rpdj5cclxufVxyXG5cclxuZnVuY3Rpb24gRm9ybXVsYXJpb0Rlc3BsaWVndWUocHJvcHM6IHsgZm9yUGs6IEZvclBrIH0pIHtcclxuICAgIHZhciBmb3JQayA9IHByb3BzLmZvclBrO1xyXG4gICAgdmFyIHsgZm9ybXVsYXJpbywgbW9kb0Rlc3BsaWVndWUsIG9wY2lvbmVzIH1cclxuICAgICAgICA9IHVzZVNlbGVjdG9yVml2aWVuZGEocHJvcHMuZm9yUGspO1xyXG4gICAgdmFyIHNvbG9MZWN0dXJhID0gZ2V0RGF0b3NCeVBhc3MoKS5zb2xvTGVjdHVyYTtcclxuICAgIGNvbnN0IGRpc3BhdGNoID0gdXNlRGlzcGF0Y2goKTtcclxuICAgIHZhciBlc1ZvbHZlciA9IG9wY2lvbmVzLnBpbGFGb3JQay5sZW5ndGggPiAwO1xyXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICB2YXIgY29udHJvbFNjcm9sbCA9ICgpID0+IHtcclxuICAgICAgICAgICAgdmFyIGFycmliYSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmYWItYWN0aXZvLWFycmliYScpO1xyXG4gICAgICAgICAgICBpZiAoYXJyaWJhKSB7XHJcbiAgICAgICAgICAgICAgICBzZXRWYWxvckRpc3RpbnRvKGFycmliYS5zdHlsZSwgJ3Zpc2liaWxpdHknLFxyXG4gICAgICAgICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcclxuICAgICAgICAgICAgICAgICAgICBhcnJpYmEuZWxUb3BWaXNpYmlsaXphciAhPSBudWxsICYmIGFycmliYS5lbFRvcFZpc2liaWxpemFyICsgMTBcclxuICAgICAgICAgICAgICAgICAgICAgICAgPCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wID8gJ3Zpc2libGUnIDogJ2hpZGRlbidcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFyIGFiYWpvID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZhYi1hY3Rpdm8tYWJham8nKTtcclxuICAgICAgICAgICAgaWYgKGFiYWpvKSB7XHJcbiAgICAgICAgICAgICAgICBzZXRWYWxvckRpc3RpbnRvKGFiYWpvLnN0eWxlLCAndmlzaWJpbGl0eScsXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxyXG4gICAgICAgICAgICAgICAgICAgIGFiYWpvLmVsQm90dG9tVmlzaWJpbGl6YXIgIT0gbnVsbCAmJiBhYmFqby5lbEJvdHRvbVZpc2liaWxpemFyIC0gMjBcclxuICAgICAgICAgICAgICAgICAgICAgICAgPiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wICsgd2luZG93LmlubmVySGVpZ2h0ICogMC43ID8gJ3Zpc2libGUnIDogJ2hpZGRlbidcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgaWRDYXNvID0gbGlrZUFyKHByb3BzLmZvclBrKS5maW5kKChfLCBrKSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiBrICE9ICdmb3JtdWxhcmlvJ1xyXG4gICAgICAgIH0pPy50b1N0cmluZygpO1xyXG4gICAgICAgIHdpbmRvdy5kb2N1bWVudC50aXRsZSA9IGdldEVzdHJ1Y3R1cmEoKS5vcGVyYXRpdm8gKyAnLSAnICsgaWRDYXNvO1xyXG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBjb250cm9sU2Nyb2xsKTtcclxuICAgICAgICBjb250cm9sU2Nyb2xsKCk7XHJcbiAgICAgICAgcmV0dXJuICgpID0+IHtcclxuICAgICAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIGNvbnRyb2xTY3JvbGwpO1xyXG4gICAgICAgIH1cclxuICAgIH0pXHJcbiAgICAvLyBUT0RPIFZvbHZlciBhIHBvbmVyIGVsIG1vdmltaWVudG8gYSBsYSBhY3R1YWxcclxuICAgIHZhciBhY3R1YWw6IGFueVxyXG4gICAgdmFyIGNvbXBsZXRvOiBhbnlcclxuICAgIHZhciBvbkNsaWNrU2FsdGFyQWN0dWFsID0gKCkgPT4ge1xyXG4gICAgICAgIHZhciB7IHZhcmlhYmxlQWN0dWFsIH0gPSBkaXNwYXRjaEJ5UGFzcyhhY2Npb25fcmVnaXN0cmFyX3Jlc3B1ZXN0YSwgeyByZXNwdWVzdGE6IG51bGwsIHZhcmlhYmxlOiBOT19DQU1CSUFSX19TT0xPX1RSQUVSX1NUQVRVUywgZm9yUGs6IHByb3BzLmZvclBrIH0pO1xyXG4gICAgICAgIGlmICh2YXJpYWJsZUFjdHVhbCkge1xyXG4gICAgICAgICAgICBlbmZvY2FyRWxlbWVudG9EZVZhcmlhYmxlKHZhcmlhYmxlQWN0dWFsKVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHZhciBsaXN0YU1vZG9zOiBNb2RvRGVzcGxpZWd1ZVtdID0gWydtZXRhZGF0b3MnLCAncmVsZXZhbWllbnRvJywgJ1BERiddO1xyXG4gICAgWydib3Rvbi12b2x2ZXItMScsICdib3Rvbi12b2x2ZXItMiddLmZvckVhY2goaWQgPT4ge1xyXG4gICAgICAgIHJlZ2lzdHJhckVsZW1lbnRvKHtcclxuICAgICAgICAgICAgaWQsIGRpcmVjdDogdHJ1ZSxcclxuICAgICAgICAgICAgZnVuOiAoXHJcbiAgICAgICAgICAgICAgICByOiBSZXNwdWVzdGFzLFxyXG4gICAgICAgICAgICAgICAgZmVlZGJhY2tGb3JtOiBGb3JtU3RydWN0dXJlU3RhdGU8SWRWYXJpYWJsZSwgVmFsb3IsIElkRmluPixcclxuICAgICAgICAgICAgICAgIGVsZW1lbnRvOiBIVE1MRGl2RWxlbWVudCxcclxuICAgICAgICAgICAgICAgIGZlZWRiYWNrQWxsOiB7IFtmb3JtdWxhcmlvIGluIFBsYWluRm9yUGtdOiBGb3JtU3RydWN0dXJlU3RhdGU8SWRWYXJpYWJsZSwgVmFsb3IsIElkRmluPiB9LFxyXG4gICAgICAgICAgICAgICAgX2VzdHJ1Y3R1cmE6IEVzdHJ1Y3R1cmFcclxuICAgICAgICAgICAgKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBlbGVtZW50by5zZXRBdHRyaWJ1dGUoJ3Jlc3VtZW4tZXN0YWRvJywgZXNWb2x2ZXIgPyBmZWVkYmFja0Zvcm0ucmVzdW1lbiA6IGNhbGN1bGFyUmVzdW1lblZpdmllbmRhKGZvclBrLCBmZWVkYmFja0FsbCwgcikucmVzdW1lbkVzdGFkbyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgfSlcclxuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgZXNwZWNpYWwgaGF5IHF1ZSBsZWVybG8gZW4gZWwgcGFyc2VyIGRlIGNhc2lsbGVyb3Mgc2kgZXN0byB0ZXJtaW5hIHF1ZWRhbmRvIGFzw61cclxuICAgIHZhciBwYW50YWxsYUNvbXBsZXRhID0gZm9ybXVsYXJpby5lc3BlY2lhbD8ucGFudGFsbGFDb21wbGV0YTtcclxuICAgIGNvbnN0IG1vZG9ETTogTW9kb0RNID0gZ2V0Rm9ybVJlbmRlcmVyKCkuZ2V0TW9kb0RNKCk7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICAgIDw+XHJcbiAgICAgICAgICAgIDxBcHBCYXJQcmluY2lwYWxcclxuICAgICAgICAgICAgICAgIG1vZG9ETT17bW9kb0RNfVxyXG4gICAgICAgICAgICAgICAgc29sb0xlY3R1cmE9e3NvbG9MZWN0dXJhfVxyXG4gICAgICAgICAgICAgICAgYmFycmFOYXZGb3JtdWxhcmlvPXtcclxuICAgICAgICAgICAgICAgICAgICA8QmFycmFEZU5hdmVnYWNpb24gZm9yUGs9e2ZvclBrfSBzb2xvTGVjdHVyYT17c29sb0xlY3R1cmEgfHwgZmFsc2V9IG1vZG9EaXJlY3RvPXtvcGNpb25lcy5tb2RvRGlyZWN0b30gLz5cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBpZD1cIm1pbmktY29uc29sZVwiPjwvZGl2PlxyXG4gICAgICAgICAgICA8L0FwcEJhclByaW5jaXBhbD5cclxuICAgICAgICAgICAgPG1haW4+XHJcbiAgICAgICAgICAgICAgICA8UGFwZXIgY2xhc3NOYW1lPVwiZm9ybXVsYXJpb1wiIG1vZG8tZGVzcGxpZWd1ZT17bW9kb0Rlc3BsaWVndWV9IHZlci1udW0tb3BjaW9uZXM9e29wY2lvbmVzLmNvbkNhbXBvT3BjaW9uZXMgPyAnU0knIDogJ05PJ30+XHJcbiAgICAgICAgICAgICAgICAgICAge3BhbnRhbGxhQ29tcGxldGEgPyBudWxsIDogPEJvdG9uVm9sdmVyRW5EaXYgaWQ9XCJib3Rvbi12b2x2ZXItMVwiIC8+fVxyXG4gICAgICAgICAgICAgICAgICAgIHtwYW50YWxsYUNvbXBsZXRhID8gbnVsbCA6IDxGb3JtdWxhcmlvRW5jYWJlemFkbyBjYXNpbGxlcm89e2Zvcm11bGFyaW99IC8+fVxyXG4gICAgICAgICAgICAgICAgICAgIDxEZXNwbGVnYXJDb250ZW5pZG9JbnRlcm5vQmxvcXVlT0Zvcm11bGFyaW8gYmxvcXVlT0Zvcm11bGFyaW89e2Zvcm11bGFyaW99IGZvcm11bGFyaW89e2Zvcm11bGFyaW99IGZvclBrPXtmb3JQa30gbXVsdGlwbGU9e2ZhbHNlfSAvPlxyXG4gICAgICAgICAgICAgICAgICAgIHtwYW50YWxsYUNvbXBsZXRhID8gbnVsbCA6IDxCb3RvblZvbHZlckVuRGl2IGlkPVwiYm90b24tdm9sdmVyLTJcIiAvPn1cclxuICAgICAgICAgICAgICAgIDwvUGFwZXI+XHJcbiAgICAgICAgICAgICAgICA8RmFiIGlkPSdmYWItYWN0aXZvLWFycmliYScgY29sb3I9XCJwcmltYXJ5XCIgYXJpYS1sYWJlbD1cImFkZFwiIG9uQ2xpY2s9e29uQ2xpY2tTYWx0YXJBY3R1YWx9PlxyXG4gICAgICAgICAgICAgICAgICAgIDxJQ09OLktleWJvYXJkQXJyb3dVcCAvPlxyXG4gICAgICAgICAgICAgICAgPC9GYWI+XHJcbiAgICAgICAgICAgICAgICA8RmFiIGlkPSdmYWItYWN0aXZvLWFiYWpvJyBjb2xvcj1cInByaW1hcnlcIiBhcmlhLWxhYmVsPVwiYWRkXCIgb25DbGljaz17b25DbGlja1NhbHRhckFjdHVhbH0+XHJcbiAgICAgICAgICAgICAgICAgICAgPElDT04uS2V5Ym9hcmRBcnJvd0Rvd24gLz5cclxuICAgICAgICAgICAgICAgIDwvRmFiPlxyXG4gICAgICAgICAgICAgICAgPEZhYiBpZD0nZmFiLWVycm9yLWFycmliYScgdmFyaWFudD1cImV4dGVuZGVkXCIgY29sb3I9XCJzZWNvbmRhcnlcIiBhcmlhLWxhYmVsPVwiZWRpdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxJQ09OLk5hdmlnYXRpb24gLz5cclxuICAgICAgICAgICAgICAgICAgICBFcnJvclxyXG4gICAgICAgICAgICAgICAgPC9GYWI+XHJcbiAgICAgICAgICAgICAgICA8RmFiIGlkPSdmYWItZXJyb3ItYWJham8nIHZhcmlhbnQ9XCJleHRlbmRlZFwiIGNvbG9yPVwic2Vjb25kYXJ5XCIgYXJpYS1sYWJlbD1cImVkaXRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8SUNPTi5OYXZpZ2F0aW9uRG93biAvPlxyXG4gICAgICAgICAgICAgICAgICAgIEVycm9yXHJcbiAgICAgICAgICAgICAgICA8L0ZhYj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPSdlc3BhY2lvLWZpbmFsLWZvcm11bGFyaW8nPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAge29wY2lvbmVzLm1vZG9Cb3JyYXJSZXNwdWVzdGEgJiYgb3BjaW9uZXMuZm9yUGsgPyA8RGVzcGxlZ2FyQ29uZmlybWFyQm9ycmFyUmVzcHVlc3RhIGZvclBrPXtvcGNpb25lcy5mb3JQa30gdmFyaWFibGVCb3JyYXI9e29wY2lvbmVzLm1vZG9Cb3JyYXJSZXNwdWVzdGF9IC8+IDogbnVsbH1cclxuICAgICAgICAgICAgPC9tYWluPlxyXG4gICAgICAgIDwvPlxyXG4gICAgKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIEF0cmlidXRvKHByb3BzOiB7IG5vbWJyZTogc3RyaW5nLCB2YWxvcjogYW55IH0pIHtcclxuICAgIHJldHVybiBwcm9wcy52YWxvciAhPSBudWxsICYmIHByb3BzLnZhbG9yICE9ICcnID8gPHNwYW4gY2xhc3NOYW1lPVwiYXRyaWJ1dG8tcGFyXCI+XHJcbiAgICAgICAge3Byb3BzLm5vbWJyZSA/IDxzcGFuIGNsYXNzTmFtZT1cImF0cmlidXRvLW5vbWJyZVwiPntwcm9wcy5ub21icmV9PC9zcGFuPiA6IG51bGx9XHJcbiAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwiYXRyaWJ1dG8tdmFsb3JcIj57cHJvcHMudmFsb3IudG9TdHJpbmcoKX08L3NwYW4+XHJcbiAgICA8L3NwYW4+IDogbnVsbFxyXG59XHJcblxyXG5leHBvcnQgY29uc3QgbGlzdGFFc3RhZG9zQ2FyZ2E6IEVzdGFkb0NhcmdhW10gPSBbJ3Jlc3VtZW4nLCAncmVsZXZhbWllbnRvJywgJ3JlY2libyddO1xyXG5leHBvcnQgdmFyIHJlc3VtaWRvcmVzID0gW1xyXG4gICAgeyBub21icmU6ICdSRUEnLCBmOiAocnI6IFJlc3B1ZXN0YXNSYWl6KSA9PiByci5yZXN1bWVuRXN0YWRvID09IFwib2tcIiB9LFxyXG4gICAgeyBub21icmU6ICdDaXRhIHBhY3RhZGEnLCBmOiAocnI6IFJlc3B1ZXN0YXNSYWl6KSA9PiByci5yZXN1bWVuRXN0YWRvID09IFwiY2l0YSBwYWN0YWRhXCIgfSxcclxuICAgIHsgbm9tYnJlOiAnUGVuZGllbnRlcycsIGY6IChycjogUmVzcHVlc3Rhc1JhaXopID0+IHJyLnJlc3VtZW5Fc3RhZG8gPT0gXCJ2YWNpb1wiIH0sXHJcbl07XHJcblxyXG5yZXN1bWlkb3Jlcy5wdXNoKFxyXG4gICAgeyBub21icmU6ICdPdHJvcycsIGY6IHJlc3VtaWRvcmVzLnJlZHVjZSgoZywgcikgPT4gKHJyID0+ICFyLmYocnIpICYmIGcocnIpKSwgKF86IFJlc3B1ZXN0YXNSYWl6KSA9PiB0cnVlKSB9XHJcbilcclxuXHJcbmV4cG9ydCB0eXBlIERlc3BsZWdhckxpbmVhUmVzdW1lblVBUHJpbmNpcGFsVHlwZSA9IChwcm9wczoge1xyXG4gICAgbnVtVml2aWVuZGE6IElkRW5jLFxyXG4gICAgZm9ybVByaW5jaXBhbDogSWRGb3JtdWxhcmlvLFxyXG4gICAgdGFyZWE6IHN0cmluZyxcclxuICAgIHJlc3B1ZXN0YXM6IFJlc3B1ZXN0YXNSYWl6LFxyXG59KSA9PiBKU1guRWxlbWVudDtcclxuXHJcbmV4cG9ydCB2YXIgRGVzcGxlZ2FyTGluZWFSZXN1bWVuVUFQcmluY2lwYWw6IERlc3BsZWdhckxpbmVhUmVzdW1lblVBUHJpbmNpcGFsVHlwZVxyXG5cclxuZXhwb3J0IGNvbnN0IHNldERlc3BsZWdhckxpbmVhUmVzdW1lblVBUHJpbmNpcGFsID0gKGxpbmVhUmVzdW1lblVBUHJpbmNpcGFsOiBEZXNwbGVnYXJMaW5lYVJlc3VtZW5VQVByaW5jaXBhbFR5cGUpID0+IERlc3BsZWdhckxpbmVhUmVzdW1lblVBUHJpbmNpcGFsID0gbGluZWFSZXN1bWVuVUFQcmluY2lwYWw7XHJcblxyXG5zZXREZXNwbGVnYXJMaW5lYVJlc3VtZW5VQVByaW5jaXBhbCgocHJvcHM6IHtcclxuICAgIG51bVZpdmllbmRhOiBJZEVuYyxcclxuICAgIGZvcm1QcmluY2lwYWw6IElkRm9ybXVsYXJpbyxcclxuICAgIHRhcmVhOiBzdHJpbmcsXHJcbiAgICByZXNwdWVzdGFzOiBSZXNwdWVzdGFzUmFpeixcclxufSkgPT4ge1xyXG4gICAgY29uc3QgeyBudW1WaXZpZW5kYSwgcmVzcHVlc3RhcywgZm9ybVByaW5jaXBhbCwgdGFyZWEgfSA9IHByb3BzO1xyXG4gICAgY29uc3QgaWQgPSAndml2LScgKyBudW1WaXZpZW5kYTtcclxuICAgIGNvbnN0IGVzdHJ1Y3R1cmEgPSBnZXRFc3RydWN0dXJhKCk7XHJcbiAgICBjb25zdCBmb3JQazogRm9yUGsgPSB7IGZvcm11bGFyaW86IGZvcm1QcmluY2lwYWwsIFtlc3RydWN0dXJhLnBrQWdyZWdhZGFVYVBwYWxdOiBOdW1iZXIobnVtVml2aWVuZGEpIGFzIElkRW5jIH0gYXMgRm9yUGs7IC8vbm8gcXVpdGFyIGVsIGNhc3RlbyBwb3JxdWUgdmllbmUgY29tbyB0ZXh0byB5IG5lY2VzaXRvIHF1ZSBzZWEgbsO6bWVyb1xyXG4gICAgdmFyIHRlbSA9IGdldERhdG9zQnlQYXNzKCkuaW5mb3JtYWNpb25IZHJbbnVtVml2aWVuZGFdLnRlbTtcclxuICAgIGNvbnN0IGRpc3BhdGNoID0gdXNlRGlzcGF0Y2goKTtcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgdm9sY2Fkb0luaWNpYWxFbGVtZW50b3NSZWdpc3RyYWRvcyhmb3JQayk7XHJcbiAgICAgICAgaW50ZW50YXJCYWNrdXAoZm9yUGspXHJcbiAgICB9KVxyXG4gICAgcmVnaXN0cmFyRWxlbWVudG8oe1xyXG4gICAgICAgIGlkLCBkaXJlY3Q6IHRydWUsXHJcbiAgICAgICAgZnVuOiAoXHJcbiAgICAgICAgICAgIHI6IFJlc3B1ZXN0YXMsXHJcbiAgICAgICAgICAgIF9mZWVkYmFja0Zvcm06IEZvcm1TdHJ1Y3R1cmVTdGF0ZTxJZFZhcmlhYmxlLCBWYWxvciwgSWRGaW4+LFxyXG4gICAgICAgICAgICBlbGVtZW50bzogSFRNTERpdkVsZW1lbnQsXHJcbiAgICAgICAgICAgIGZlZWRiYWNrQWxsOiB7IFtmb3JtdWxhcmlvIGluIFBsYWluRm9yUGtdOiBGb3JtU3RydWN0dXJlU3RhdGU8SWRWYXJpYWJsZSwgVmFsb3IsIElkRmluPiB9LFxyXG4gICAgICAgICAgICBfZXN0cnVjdHVyYTogRXN0cnVjdHVyYVxyXG4gICAgICAgICkgPT4ge1xyXG4gICAgICAgICAgICAvL3ByZWd1bnRvIHNpIGVzIGxhIG1pc21hIHZpdmllbmRhIHBvcnF1ZSBsYSBmdW5jaW9uIHNlIGRpc3BhcmFcclxuICAgICAgICAgICAgLy9jb24gdG9kYXMgbGFzIGNvbWJpbmFjaW9uZXMgZGUgcmVzcHVlc3RhcyBwYXJhIGNhZGEgZm9yUGtcclxuICAgICAgICAgICAgLy9AdHMtaWdub3JlIHZpdmllbmRhIGV4aXN0ZVxyXG4gICAgICAgICAgICBpZiAocltlc3RydWN0dXJhLnBrQWdyZWdhZGFVYVBwYWxdID09IGZvclBrW2VzdHJ1Y3R1cmEucGtBZ3JlZ2FkYVVhUHBhbF0pIHtcclxuICAgICAgICAgICAgICAgIGVsZW1lbnRvLnNldEF0dHJpYnV0ZSgncmVzdW1lbi1lc3RhZG8nLCBjYWxjdWxhclJlc3VtZW5WaXZpZW5kYShmb3JQaywgZmVlZGJhY2tBbGwsIHIpLnJlc3VtZW5Fc3RhZG8pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0pXHJcbiAgICByZXR1cm4gPFRhYmxlUm93IGtleT17bnVtVml2aWVuZGF9PlxyXG4gICAgICAgIDxUYWJsZUNlbGw+XHJcbiAgICAgICAgICAgIHt0ZW0gP1xyXG4gICAgICAgICAgICAgICAgPD5cclxuICAgICAgICAgICAgICAgICAgICA8RGVzcGxlZ2FyVGVtIHRlbT17dGVtfSAvPlxyXG4gICAgICAgICAgICAgICAgICAgIHtyZXNwdWVzdGFzWydyZXN1bWVuRXN0YWRvJyBhcyBJZFZhcmlhYmxlXSA9PSBcImNpdGEgcGFjdGFkYVwiID9cclxuICAgICAgICAgICAgICAgICAgICAgICAgPERlc3BsZWdhckNpdGFQYWN0YWRhIHJlc3B1ZXN0YXM9e3Jlc3B1ZXN0YXN9IC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgPERlc3BsZWdhckNpdGFQYWN0YWRhWVNlbGVjY2lvbmFkb0FudGVyaW9yVGVtIHRlbT17dGVtfSAvPlxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIDwvPlxyXG4gICAgICAgICAgICAgICAgOiBudWxsfVxyXG4gICAgICAgIDwvVGFibGVDZWxsPlxyXG4gICAgICAgIDxUYWJsZUNlbGw+XHJcbiAgICAgICAgICAgIHt0YXJlYX1cclxuICAgICAgICA8L1RhYmxlQ2VsbD5cclxuICAgICAgICA8VGFibGVDZWxsPlxyXG4gICAgICAgICAgICA8QnV0dG9uIGlkPXtpZH0gb25DbGljaz17KCkgPT5cclxuICAgICAgICAgICAgICAgIGRpc3BhdGNoKGRpc3BhdGNoZXJzLkNBTUJJQVJfRk9STVVMQVJJTyh7IGZvclBrLCBhcGlsYXJWdWVsdGE6IGZhbHNlIH0pKVxyXG4gICAgICAgICAgICB9PlxyXG4gICAgICAgICAgICAgICAge251bVZpdmllbmRhLnRvU3RyaW5nKCl9XHJcbiAgICAgICAgICAgIDwvQnV0dG9uPlxyXG4gICAgICAgIDwvVGFibGVDZWxsPlxyXG4gICAgPC9UYWJsZVJvdz5cclxufSk7XHJcblxyXG5leHBvcnQgdHlwZSBEZXNwbGVnYXJDYXJnYVR5cGUgPSAocHJvcHM6IHtcclxuICAgIGNhcmdhOiBDYXJnYSxcclxuICAgIGlkQ2FyZ2E6IElkQ2FyZ2EsXHJcbiAgICBwb3NpY2lvbjogbnVtYmVyLFxyXG4gICAgaW5mb3JtYWNpb25IZHI6IEluZm9ybWFjaW9uSGRyLFxyXG4gICAgcmVzcHVlc3RhczogUmVzcHVlc3RhTGFzVUEsXHJcbiAgICBmZWVkYmFja1Jvd1ZhbGlkYXRvcjoge1xyXG4gICAgICAgIFtmb3JtdWxhcmlvIGluIFBsYWluRm9yUGtdOiBGb3JtU3RydWN0dXJlU3RhdGU8SWRWYXJpYWJsZSwgVmFsb3IsIElkRmluPlxyXG4gICAgfVxyXG59KSA9PiBKU1guRWxlbWVudDtcclxuXHJcbmV4cG9ydCB2YXIgRGVzcGxlZ2FyQ2FyZ2E6IERlc3BsZWdhckNhcmdhVHlwZVxyXG5cclxuZXhwb3J0IGNvbnN0IHNldERlc3BsZWdhckNhcmdhID0gKGRlc3BsaWVndWVDYXJnYTogRGVzcGxlZ2FyQ2FyZ2FUeXBlKSA9PiBEZXNwbGVnYXJDYXJnYSA9IGRlc3BsaWVndWVDYXJnYTtcclxuXHJcbnNldERlc3BsZWdhckNhcmdhKChwcm9wczoge1xyXG4gICAgY2FyZ2E6IENhcmdhLFxyXG4gICAgaWRDYXJnYTogSWRDYXJnYSxcclxuICAgIHBvc2ljaW9uOiBudW1iZXIsXHJcbiAgICBpbmZvcm1hY2lvbkhkcjogSW5mb3JtYWNpb25IZHIsXHJcbiAgICByZXNwdWVzdGFzOiBSZXNwdWVzdGFMYXNVQSxcclxuICAgIGZlZWRiYWNrUm93VmFsaWRhdG9yOiB7XHJcbiAgICAgICAgW2Zvcm11bGFyaW8gaW4gUGxhaW5Gb3JQa106IEZvcm1TdHJ1Y3R1cmVTdGF0ZTxJZFZhcmlhYmxlLCBWYWxvciwgSWRGaW4+XHJcbiAgICB9XHJcbn0pID0+IHtcclxuICAgIGNvbnN0IHsgY2FyZ2EsIGlkQ2FyZ2EsIGluZm9ybWFjaW9uSGRyLCByZXNwdWVzdGFzIH0gPSBwcm9wcztcclxuICAgIHZhciBlc3RydWN0dXJhID0gZ2V0RXN0cnVjdHVyYSgpO1xyXG4gICAgbGV0IGNhbnRMaW5lYXNSZXN1bWVuID0gbGlrZUFyKGluZm9ybWFjaW9uSGRyKS5maWx0ZXIoKGluZm9ybWFjaW9uKSA9PiBpbmZvcm1hY2lvbi50ZW0uY2FyZ2EgPT0gaWRDYXJnYSkuYXJyYXkoKS5sZW5ndGg7XHJcbiAgICBjb25zdCBkaXNwYXRjaCA9IHVzZURpc3BhdGNoKCk7XHJcbiAgICBjb25zdCBtb2RvRE06IE1vZG9ETSA9IGdldEZvcm1SZW5kZXJlcigpLmdldE1vZG9ETSgpO1xyXG4gICAgcmV0dXJuIDxQYXBlciBjbGFzc05hbWU9XCJjYXJnYVwiIHN0eWxlPXt7IG1hcmdpbkJvdHRvbTogJzEwcHgnLCBwYWRkaW5nOiAnMTBweCcgfX0+XHJcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJpbmZvcm1hY2lvbi1jYXJnYVwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImNhcmdhXCI+w4FyZWE6IHtpZENhcmdhfTwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm9ic2VydmFjaW9uZXNcIj57Y2FyZ2Eub2JzZXJ2YWNpb25lc308L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImluZm9ybWFjaW9uLWNhcmdhXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmVjaGFcIj57Y2FyZ2EuZmVjaGF9PC9kaXY+XHJcbiAgICAgICAgICAgIHsvKlxyXG4gICAgICAgICAgICA8QnV0dG9uR3JvdXA+XHJcbiAgICAgICAgICAgIHtsaXN0YUVzdGFkb3NDYXJnYS5tYXAoZXN0YWRvX2NhcmdhPT5cclxuICAgICAgICAgICAgICAgIDxCdXR0b24ga2V5PXtlc3RhZG9fY2FyZ2F9IHZhcmlhbnQ9e2VzdGFkb19jYXJnYT09Y2FyZ2EuZXN0YWRvX2NhcmdhP1wiY29udGFpbmVkXCI6XCJvdXRsaW5lZFwifSBvbkNsaWNrPXtcclxuICAgICAgICAgICAgICAgICAgICAoKT0+ZGlzcGF0Y2goZGlzcGF0Y2hlcnMuRVNUQURPX0NBUkdBKHtpZENhcmdhLCBlc3RhZG9fY2FyZ2F9KSlcclxuICAgICAgICAgICAgICAgIH0+e2VzdGFkb19jYXJnYX08L0J1dHRvbj5cclxuICAgICAgICAgICAgKX1cclxuICAgICAgICAgICAgPC9CdXR0b25Hcm91cD5cclxuICAgICAgICAgICAgKi99XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAge2NhcmdhLmVzdGFkb19jYXJnYSA9PSBudWxsICYmICFwcm9wcy5wb3NpY2lvbiB8fCBjYXJnYS5lc3RhZG9fY2FyZ2EgPT0gJ3JlbGV2YW1pZW50bycgP1xyXG4gICAgICAgICAgICA8VGFibGUgY2xhc3NOYW1lPVwidGFibGEtY2FyZ2EtaG9qYS1kZS1ydXRhXCI+XHJcbiAgICAgICAgICAgICAgICA8Y29sZ3JvdXA+XHJcbiAgICAgICAgICAgICAgICAgICAgPGNvbCBzdHlsZT17eyB3aWR0aDogXCI3NSVcIiB9fSAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDxjb2wgc3R5bGU9e3sgd2lkdGg6IFwiMTAlXCIgfX0gLz5cclxuICAgICAgICAgICAgICAgICAgICA8Y29sIHN0eWxlPXt7IHdpZHRoOiBcIjE1JVwiIH19IC8+XHJcbiAgICAgICAgICAgICAgICA8L2NvbGdyb3VwPlxyXG4gICAgICAgICAgICAgICAge2NhbnRMaW5lYXNSZXN1bWVuID9cclxuICAgICAgICAgICAgICAgICAgICA8VGFibGVIZWFkIHN0eWxlPXt7IGZvbnRTaXplOiBcIjEuMnJlbVwiIH19PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8VGFibGVSb3cgY2xhc3NOYW1lPVwidHItY2FyZ2FcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUYWJsZUNlbGw+ZG9taWNpbGlvPC9UYWJsZUNlbGw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VGFibGVDZWxsPnRhcmVhPC9UYWJsZUNlbGw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VGFibGVDZWxsPmVuYzwvVGFibGVDZWxsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L1RhYmxlUm93PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvVGFibGVIZWFkPlxyXG4gICAgICAgICAgICAgICAgICAgIDogbnVsbH1cclxuICAgICAgICAgICAgICAgIDxUYWJsZUJvZHk+XHJcbiAgICAgICAgICAgICAgICAgICAgPD5cclxuICAgICAgICAgICAgICAgICAgICAgICAge2xpa2VBcihpbmZvcm1hY2lvbkhkcikuZmlsdGVyKChpbmZvcm1hY2lvbikgPT4gaW5mb3JtYWNpb24udGVtLmNhcmdhID09IGlkQ2FyZ2EpLm1hcCgoaW5mb3JtYWNpb24sIG51bVZpdmllbmRhKSA9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPERlc3BsZWdhckxpbmVhUmVzdW1lblVBUHJpbmNpcGFsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5PXtudW1WaXZpZW5kYX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1WaXZpZW5kYT17bnVtVml2aWVuZGF9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZWE9e2luZm9ybWFjaW9uLnRhcmVhLnRhcmVhfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1QcmluY2lwYWw9e2luZm9ybWFjaW9uLnRhcmVhLm1haW5fZm9ybX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwdWVzdGFzPXtyZXNwdWVzdGFzW2VzdHJ1Y3R1cmEudWFQcGFsXVtudW1WaXZpZW5kYV0gYXMgUmVzcHVlc3Rhc1JhaXp9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICApLmFycmF5KCl9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHtjYXJnYS5wdWVkZV9hdXRvZ2VuZXJhciA/XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VGFibGVSb3cgY2xhc3NOYW1lPVwidHItY2FyZ2EtbnVldm9cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VGFibGVDZWxsIGNvbFNwYW49ezN9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50PVwiY29udGFpbmVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPXttb2RvRE0gPT0gXCJjYXBhXCIgPyBcInN1Y2Nlc3NcIiA6IFwicHJpbWFyeVwifVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcmVhckVuY3Vlc3RhKGlkQ2FyZ2EsIChmb3JQa1JhaXo6IEZvclBrUmFpeikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwYXRjaChkaXNwYXRjaGVycy5DQU1CSUFSX0ZPUk1VTEFSSU8oeyBmb3JQazogZm9yUGtSYWl6LCBhcGlsYXJWdWVsdGE6IGZhbHNlIH0pKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SUNPTi5BZGQgLz4gTnVldm8gY3Vlc3Rpb25hcmlvXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvVGFibGVDZWxsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9UYWJsZVJvdz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogbnVsbH1cclxuICAgICAgICAgICAgICAgICAgICA8Lz5cclxuICAgICAgICAgICAgICAgIDwvVGFibGVCb2R5PlxyXG4gICAgICAgICAgICA8L1RhYmxlPiA6XHJcbiAgICAgICAgICAgIDxUYWJsZT5cclxuICAgICAgICAgICAgICAgIDxUYWJsZUhlYWQgc3R5bGU9e3sgZm9udFNpemU6IFwiMS4ycmVtXCIgfX0+XHJcbiAgICAgICAgICAgICAgICAgICAgPFRhYmxlUm93IGNsYXNzTmFtZT1cInRyLWNhcmdhXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHtyZXN1bWlkb3Jlcy5tYXAoKHJlc3VtaWRvcjogdHlwZW9mIHJlc3VtaWRvcmVzWzBdLCBpOiBudW1iZXIpID0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VGFibGVDZWxsIGtleT17aX0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3Jlc3VtaWRvci5ub21icmV9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1RhYmxlQ2VsbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgKX1cclxuICAgICAgICAgICAgICAgICAgICA8L1RhYmxlUm93PlxyXG4gICAgICAgICAgICAgICAgPC9UYWJsZUhlYWQ+XHJcbiAgICAgICAgICAgIDwvVGFibGU+XHJcbiAgICAgICAgfVxyXG4gICAgPC9QYXBlcj5cclxufSk7XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gRGVzcGxlZ2FyQ2l0YVBhY3RhZGEocHJvcHM6IHsgcmVzcHVlc3RhczogUmVzcHVlc3RhcyB9KSB7XHJcbiAgICBjb25zdCB7IHJlc3B1ZXN0YXMgfSA9IHByb3BzO1xyXG4gICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPVwiY2l0YS1wYWN0YWRhXCI+XHJcbiAgICAgICAgPGRpdj48QXRyaWJ1dG8gbm9tYnJlPVwiQ2l0YSBwYWN0YWRhIGNvbiBcIiB2YWxvcj17cmVzcHVlc3Rhc1twMTJdfSAvPjwvZGl2PlxyXG4gICAgICAgIDxkaXY+PEF0cmlidXRvIG5vbWJyZT1cIkNlbC46XCIgdmFsb3I9e3Jlc3B1ZXN0YXNbc3AyXX0gLz48L2Rpdj5cclxuICAgICAgICA8ZGl2PjxBdHJpYnV0byBub21icmU9XCJUZWwuOlwiIHZhbG9yPXtyZXNwdWVzdGFzW3NwM119IC8+PC9kaXY+XHJcbiAgICAgICAgPGRpdj48QXRyaWJ1dG8gbm9tYnJlPVwiRmVjaGE6XCIgdmFsb3I9e3Jlc3B1ZXN0YXNbc3A0XX0gLz48L2Rpdj5cclxuICAgICAgICA8ZGl2PjxBdHJpYnV0byBub21icmU9XCJIb3JhOlwiIHZhbG9yPXtyZXNwdWVzdGFzW3NwNV19IC8+PC9kaXY+XHJcbiAgICA8L2Rpdj5cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIERlc3BsZWdhckNpdGFQYWN0YWRhWVNlbGVjY2lvbmFkb0FudGVyaW9yVGVtKHByb3BzOiB7IHRlbTogVEVNIH0pIHtcclxuICAgIGNvbnN0IHsgdGVtIH0gPSBwcm9wcztcclxuICAgIHJldHVybiA8ZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGVtLWNpdGFcIj5cclxuICAgICAgICAgICAgPEF0cmlidXRvIG5vbWJyZT1cIkNpdGE6XCIgdmFsb3I9e3RlbS5jaXRhfSAvPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBEZXNwbGVnYXJUZW0ocHJvcHM6IHsgdGVtOiBURU0gfSkge1xyXG4gICAgY29uc3QgeyB0ZW0gfSA9IHByb3BzO1xyXG4gICAgcmV0dXJuIDxkaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZW0tZG9taWNpbGlvXCI+e3RlbS5ub21jYWxsZX0ge3RlbS5ucm9jYXRhc3RyYWx9IDxBdHJpYnV0byBub21icmU9XCJwaXNvXCIgdmFsb3I9e3RlbS5waXNvfSAvPiA8QXRyaWJ1dG8gbm9tYnJlPVwiZHB0b1wiIHZhbG9yPXt0ZW0uZGVwYXJ0YW1lbnRvfSAvPiA8L2Rpdj5cclxuICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICA8QXRyaWJ1dG8gbm9tYnJlPVwic2VjdG9yXCIgdmFsb3I9e3RlbS5zZWN0b3J9IC8+XHJcbiAgICAgICAgICAgIDxBdHJpYnV0byBub21icmU9XCJlZGlmaWNpb1wiIHZhbG9yPXt0ZW0uZWRpZmljaW99IC8+XHJcbiAgICAgICAgICAgIDxBdHJpYnV0byBub21icmU9XCJjYXNhXCIgdmFsb3I9e3RlbS5jYXNhfSAvPlxyXG4gICAgICAgICAgICA8QXRyaWJ1dG8gbm9tYnJlPVwiZW50cmFkYVwiIHZhbG9yPXt0ZW0uZW50cmFkYX0gLz5cclxuICAgICAgICAgICAgPEF0cmlidXRvIG5vbWJyZT1cImhhYml0YWNpb25cIiB2YWxvcj17dGVtLmhhYml0YWNpb259IC8+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZW0tb2JzZXJ2YWNpb25lc1wiPlxyXG4gICAgICAgICAgICB7dGVtLm9ic2VydmFjaW9uZXN9XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IGhhbmRsZUxvZ291dCA9IGFzeW5jICgpOiBQcm9taXNlPHZvaWQ+ID0+IHtcclxuICAgIGF3YWl0IGdldEZvcm1SZW5kZXJlcigpLm9uTG9nb3V0KCk7XHJcbn07XHJcblxyXG5leHBvcnQgdHlwZSBBcHBCYXJQcmluY2lwYWxQcm9wcyA9IHtcclxuICAgIHRpdHVsbz86IFJlYWN0LlJlYWN0Tm9kZTtcclxuICAgIGJhcnJhTmF2Rm9ybXVsYXJpbz86IFJlYWN0LlJlYWN0Tm9kZTtcclxuICAgIG1vZG9ETTogTW9kb0RNO1xyXG4gICAgc29sb0xlY3R1cmE/OiBib29sZWFuO1xyXG4gICAgY2hpbGRyZW4/OiBSZWFjdC5SZWFjdE5vZGU7XHJcbiAgICBkaXNhYmxlZD86IGJvb2xlYW47XHJcbn07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gQXBwQmFyUHJpbmNpcGFsKHByb3BzOiBBcHBCYXJQcmluY2lwYWxQcm9wcyk6IEpTWC5FbGVtZW50IHtcclxuICAgIHZhciBjb2xvcjogJ3NlY29uZGFyeScgfCAnc3VjY2VzcycgfCAncHJpbWFyeScgPSBwcm9wcy5zb2xvTGVjdHVyYSA/ICdzZWNvbmRhcnknIDogcHJvcHMubW9kb0RNID09PSAnY2FwYScgPyAnc3VjY2VzcycgOiAncHJpbWFyeSc7XHJcbiAgICB2YXIgeyBmb3JQaywgcGFudGFsbGFBY3R1YWwgfSA9IHVzZVNlbGVjdG9yKChzdGF0ZTogQ2Fzb1N0YXRlKSA9PiBzdGF0ZS5vcGNpb25lcyk7XHJcbiAgICBjb25zdCBtb3N0cmFyQm90b25lcmFOYXZlZ2FjaW9uID0gcGFudGFsbGFBY3R1YWwgJiYgcGFudGFsbGFBY3R1YWwgIT09ICdzaW5jcm9uaXphY2lvbl9yZXF1ZXJpZGEnICYmICFwcm9wcy5iYXJyYU5hdkZvcm11bGFyaW87XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICAgIDxBcHBCYXIgcG9zaXRpb249XCJmaXhlZFwiIGNvbG9yPXtjb2xvcn1cclxuICAgICAgICAgICAgc3R5bGU9e3Byb3BzLmRpc2FibGVkID8geyBwb2ludGVyRXZlbnRzOiAnbm9uZScsIG9wYWNpdHk6IDAuOSB9IDoge319XHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgICA8VG9vbGJhcj5cclxuICAgICAgICAgICAgICAgIHtwcm9wcy5iYXJyYU5hdkZvcm11bGFyaW99XHJcbiAgICAgICAgICAgICAgICB7bW9zdHJhckJvdG9uZXJhTmF2ZWdhY2lvbiA/IChcclxuICAgICAgICAgICAgICAgICAgICA8Qm90b25lcmFOYXZlZ2FjaW9uIGRpc2FibGVkPXtwcm9wcy5kaXNhYmxlZH0vPlxyXG4gICAgICAgICAgICAgICAgKSA6IG51bGx9XHJcbiAgICAgICAgICAgICAgICB7cHJvcHMubW9kb0RNID09PSAnY2FwYScgJiYgIXByb3BzLmJhcnJhTmF2Rm9ybXVsYXJpbyA/IChcclxuICAgICAgICAgICAgICAgICAgICA8VHlwb2dyYXBoeT48c3BhbiBzdHlsZT17eyBtYXJnaW5MZWZ0OiAnNXB4JyB9fT4gTU9ETyBDQVBBQ0lUQUNJw5NOPC9zcGFuPjwvVHlwb2dyYXBoeT5cclxuICAgICAgICAgICAgICAgICkgOiBudWxsfVxyXG4gICAgICAgICAgICAgICAgPFVzdWFyaW9Mb2d1ZWFkb1lDb25maWcgbW9zdHJhclNldHVwPXshZm9yUGt9IG1vc3RyYXJMb2dvdXQ9eyEhcGFudGFsbGFBY3R1YWwgJiYgIXByb3BzLmJhcnJhTmF2Rm9ybXVsYXJpb30gb25Mb2dvdXQ9e2hhbmRsZUxvZ291dH0gLz5cclxuICAgICAgICAgICAgPC9Ub29sYmFyPlxyXG4gICAgICAgICAgICB7cHJvcHMuY2hpbGRyZW59XHJcbiAgICAgICAgPC9BcHBCYXI+XHJcbiAgICApO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gQm90b25lcmFOYXZlZ2FjaW9uKHByb3BzOiB7IGRpc2FibGVkPzogYm9vbGVhbiB9KTogSlNYLkVsZW1lbnQge1xyXG4gICAgY29uc3QgZGlzcGF0Y2ggPSB1c2VEaXNwYXRjaCgpO1xyXG4gICAgY29uc3QgeyBwYW50YWxsYUFjdHVhbCB9ID0gdXNlU2VsZWN0b3IoKHN0YXRlOiBDYXNvU3RhdGUpID0+IHN0YXRlLm9wY2lvbmVzKTtcclxuICAgIHJldHVybiAoXHJcbiAgICAgICAgPEJ1dHRvbkdyb3VwIHZhcmlhbnQ9XCJvdXRsaW5lZFwiIHNpemU9XCJzbWFsbFwiIGNvbG9yPVwiaW5oZXJpdFwiPlxyXG4gICAgICAgICAgICA8QnV0dG9uXHJcbiAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PlxyXG4gICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoKGRpc3BhdGNoZXJzLlNFVF9PUENJT04oeyBvcGNpb246ICdwYW50YWxsYUFjdHVhbCcsIHZhbG9yOiAnaGRyJyB9KSlcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGRpc2FibGVkPXtwYW50YWxsYUFjdHVhbCA9PT0gJ2hkcicgfHwgcHJvcHMuZGlzYWJsZWR9XHJcbiAgICAgICAgICAgICAgICBzdHlsZT17cGFudGFsbGFBY3R1YWwgPT09ICdoZHInID8geyBiYWNrZ3JvdW5kQ29sb3I6ICdyZ2JhKDI1NSwyNTUsMjU1LDAuMSknIH0gOiB1bmRlZmluZWR9XHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIDxJQ09OLkFzc2lnbm1lbnQgLz4gSG9qYSBkZSBSdXRhXHJcbiAgICAgICAgICAgIDwvQnV0dG9uPlxyXG5cclxuICAgICAgICAgICAgPEJ1dHRvblxyXG4gICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT5cclxuICAgICAgICAgICAgICAgICAgICBkaXNwYXRjaChkaXNwYXRjaGVycy5TRVRfT1BDSU9OKHsgb3BjaW9uOiAncGFudGFsbGFBY3R1YWwnLCB2YWxvcjogJ3NpbmNyb25pemFjaW9uJyB9KSlcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGRpc2FibGVkPXtwYW50YWxsYUFjdHVhbCA9PT0gJ3NpbmNyb25pemFjaW9uJyB8fCBwcm9wcy5kaXNhYmxlZH1cclxuICAgICAgICAgICAgICAgIHN0eWxlPXtwYW50YWxsYUFjdHVhbCA9PT0gJ3NpbmNyb25pemFjaW9uJyA/IHsgYmFja2dyb3VuZENvbG9yOiAncmdiYSgyNTUsMjU1LDI1NSwwLjEpJyB9IDogdW5kZWZpbmVkfVxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICA8SUNPTi5DbG91ZFN5bmMgLz4gU2luY3Jvbml6YWNpw7NuXHJcbiAgICAgICAgICAgIDwvQnV0dG9uPlxyXG4gICAgICAgIDwvQnV0dG9uR3JvdXA+XHJcbiAgICApO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gVXN1YXJpb0xvZ3VlYWRvWUNvbmZpZyhwcm9wczoge1xyXG4gICAgbW9zdHJhclNldHVwPzogYm9vbGVhbixcclxuICAgIG1vc3RyYXJMb2dvdXQ/OiBib29sZWFuLFxyXG4gICAgb25Mb2dvdXQ/OiAoKSA9PiB2b2lkLFxyXG4gICAgbmF2aWdhdGlvbk1lbnU/OiBSZWFjdC5SZWFjdE5vZGVcclxufSk6IEpTWC5FbGVtZW50IHtcclxuICAgIHZhciB1c2VybmFtZTogc3RyaW5nIHwgbnVsbCA9IGdldEZvcm1SZW5kZXJlcigpLmdldFVzZXJuYW1lTG9ndWVhZG8oKTtcclxuICAgIHZhciBpZHBlcjogc3RyaW5nIHwgbnVsbCA9IGdldEZvcm1SZW5kZXJlcigpLmdldElkcGVyTG9ndWVhZG8oKTtcclxuICAgIHZhciB7IHBhbnRhbGxhQWN0dWFsIH0gPSB1c2VTZWxlY3Rvcigoc3RhdGU6IENhc29TdGF0ZSkgPT4gc3RhdGUub3BjaW9uZXMpO1xyXG5cclxuICAgIHZhciBkaXNwYXRjaCA9IHVzZURpc3BhdGNoKCk7XHJcbiAgICB2YXIgW29wZW5EaWFsb2csIHNldE9wZW5EaWFsb2ddID0gdXNlU3RhdGU8Ym9vbGVhbj4oZmFsc2UpO1xyXG5cclxuICAgIHZhciBoYW5kbGVMb2dvdXRDbGljayA9ICgpOiB2b2lkID0+IHtcclxuICAgICAgICBzZXRPcGVuRGlhbG9nKHRydWUpO1xyXG4gICAgfTtcclxuXHJcbiAgICB2YXIgaGFuZGxlQ2xvc2UgPSAoKTogdm9pZCA9PiB7XHJcbiAgICAgICAgc2V0T3BlbkRpYWxvZyhmYWxzZSk7XHJcbiAgICB9O1xyXG5cclxuICAgIHZhciBoYW5kbGVDb25maXJtTG9nb3V0ID0gYXN5bmMgKCk6IFByb21pc2U8dm9pZD4gPT4ge1xyXG4gICAgICAgIHNldE9wZW5EaWFsb2coZmFsc2UpO1xyXG4gICAgICAgIGlmIChwcm9wcy5vbkxvZ291dCkge1xyXG4gICAgICAgICAgICBhd2FpdCBwcm9wcy5vbkxvZ291dCgpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgdmFyIGRhdG9zID0gZ2V0RGF0b3NCeVBhc3MoKTtcclxuICAgIHZhciB0aWVuZUVuY3Vlc3RhczogYm9vbGVhbiA9ICEhKGRhdG9zICYmIGRhdG9zLmluZm9ybWFjaW9uSGRyICYmIE9iamVjdC5rZXlzKGRhdG9zLmluZm9ybWFjaW9uSGRyKS5sZW5ndGggPiAwKTtcclxuICAgIGNvbnN0IG1vZG9ETSA9IGdldEZvcm1SZW5kZXJlcigpLmdldE1vZG9ETSgpO1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgICA8ZGl2IHN0eWxlPXt7IGRpc3BsYXk6ICdmbGV4JywgYWxpZ25JdGVtczogJ2NlbnRlcicsIGdhcDogJzEwcHgnIH19PlxyXG4gICAgICAgICAgICB7cHJvcHMubmF2aWdhdGlvbk1lbnV9XHJcbiAgICAgICAgICAgIDxUeXBvZ3JhcGh5IHZhcmlhbnQ9XCJib2R5MlwiIHN0eWxlPXt7IGNvbG9yOiAnaW5oZXJpdCcsIGZvbnRXZWlnaHQ6ICdib2xkJywgbWFyZ2luTGVmdDonNXB4JyB9fT5cclxuICAgICAgICAgICAgICAgIHtpZHBlcn0gLSB7dXNlcm5hbWV9XHJcbiAgICAgICAgICAgIDwvVHlwb2dyYXBoeT5cclxuICAgICAgICAgICAge3Byb3BzLm1vc3RyYXJTZXR1cCA/IChcclxuICAgICAgICAgICAgICAgIDxGYXN0U2V0dXA+XHJcbiAgICAgICAgICAgICAgICAgICAgPE1lbnVJdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwYXRjaChkaXNwYXRjaGVycy5TRVRfT1BDSU9OKHsgb3BjaW9uOiAncGFudGFsbGFBY3R1YWwnLCB2YWxvcjogJ21vZG8nIH0pKX1cclxuICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxMaXN0SXRlbUljb24+e21vZG9ETSA9PT0gJ2NhcGEnID8gPElDT04uQnVzaW5lc3NDZW50ZXIgLz4gOiA8SUNPTi5TcG9ydHNFc3BvcnRzIC8+fSA8L0xpc3RJdGVtSWNvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPExpc3RJdGVtVGV4dD5DYW1iaW8gYSBtb2RvIHttb2RvRE0gPT09ICdjYXBhJyA/ICdQcm9kdWNjacOzbicgOiAnQ2FwYWNpdGFjacOzbid9PC9MaXN0SXRlbVRleHQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9NZW51SXRlbT5cclxuICAgICAgICAgICAgICAgICAgICA8RGl2aWRlci8+XHJcbiAgICAgICAgICAgICAgICAgICAgPE1lbnVJdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXt0cnVlfVxyXG4gICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPExpc3RJdGVtVGV4dD5Tb3BvcnRlIHTDqWNuaWNvPC9MaXN0SXRlbVRleHQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9NZW51SXRlbT5cclxuICAgICAgICAgICAgICAgICAgICA8TWVudUl0ZW1cclxuICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoKGRpc3BhdGNoZXJzLlJFU0VUX09QQ0lPTkVTKHt9KSl9XHJcbiAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8TGlzdEl0ZW1JY29uPjxJQ09OLlJlZnJlc2gvPjwvTGlzdEl0ZW1JY29uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8TGlzdEl0ZW1UZXh0PlJlc2V0IG9wY2lvbmVzPC9MaXN0SXRlbVRleHQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9NZW51SXRlbT5cclxuICAgICAgICAgICAgICAgICAgICA8TWVudUl0ZW1cclxuICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGlzdG9yeS5yZXBsYWNlU3RhdGUobnVsbCwgJycsIGAke2xvY2F0aW9uLm9yaWdpbiArIGxvY2F0aW9uLnBhdGhuYW1lfS8uLi9tZW51I2k9c2luY3Jvbml6YXJgKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uLnJlbG9hZCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPExpc3RJdGVtSWNvbj48SUNPTi5TeW5jQWx0IC8+PC9MaXN0SXRlbUljb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxMaXN0SXRlbVRleHQ+U2luY3Jvbml6YWNpw7NuIChsaW5rIHZpZWpvKTwvTGlzdEl0ZW1UZXh0PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvTWVudUl0ZW0+XHJcbiAgICAgICAgICAgICAgICA8L0Zhc3RTZXR1cD5cclxuICAgICAgICAgICAgKSA6IG51bGx9XHJcbiAgICAgICAgICAgIHtwcm9wcy5tb3N0cmFyTG9nb3V0ID8gKFxyXG4gICAgICAgICAgICAgICAgPEJ1dHRvbiBjb2xvcj1cImluaGVyaXRcIiBvbkNsaWNrPXtoYW5kbGVMb2dvdXRDbGlja30gc3R5bGU9e3sgbWluV2lkdGg6ICdhdXRvJywgcGFkZGluZzogJzZweCcgfX0+XHJcbiAgICAgICAgICAgICAgICAgICAgPElDT04uRXhpdFRvQXBwIC8+XHJcbiAgICAgICAgICAgICAgICA8L0J1dHRvbj5cclxuICAgICAgICAgICAgKSA6IG51bGx9XHJcblxyXG4gICAgICAgICAgICA8RGlhbG9nIG9wZW49e29wZW5EaWFsb2d9IG9uQ2xvc2U9e2hhbmRsZUNsb3NlfT5cclxuICAgICAgICAgICAgICAgIDxEaWFsb2dUaXRsZT5DZXJyYXIgU2VzacOzbjwvRGlhbG9nVGl0bGU+XHJcbiAgICAgICAgICAgICAgICA8RGlhbG9nQ29udGVudD5cclxuICAgICAgICAgICAgICAgICAgICA8RGlhbG9nQ29udGVudFRleHQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt0aWVuZUVuY3Vlc3Rhc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBcIkhheSBlbmN1ZXN0YXMgY2FyZ2FkYXMgZW4gZWwgZGlzcG9zaXRpdm8uIFNpIHNhbGUgZGUgbGEgYXBsaWNhY2nDs24gc2luIHNpbmNyb25pemFyIHBvZHLDrWEgcGVyZGVyIGVsIHRyYWJham8gcmVhbGl6YWRvLlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFwiwr9Fc3TDoSBzZWd1cm8gZGUgcXVlIGRlc2VhIHNhbGlyPyBQYXJhIHZvbHZlciBhIGluZ3Jlc2FyIGRlYmVyw6EgaW5pY2lhciBzZXNpw7NuIG51ZXZhbWVudGUuXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIDwvRGlhbG9nQ29udGVudFRleHQ+XHJcbiAgICAgICAgICAgICAgICA8L0RpYWxvZ0NvbnRlbnQ+XHJcbiAgICAgICAgICAgICAgICA8RGlhbG9nQWN0aW9ucz5cclxuICAgICAgICAgICAgICAgICAgICB7dGllbmVFbmN1ZXN0YXMgPyAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QnV0dG9uIG9uQ2xpY2s9e2hhbmRsZUNvbmZpcm1Mb2dvdXR9IGNvbG9yPVwic2Vjb25kYXJ5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2FsaXIgZGUgdG9kb3MgbW9kb3NcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPEJ1dHRvbiBvbkNsaWNrPXtoYW5kbGVDbG9zZX0gY29sb3I9XCJwcmltYXJ5XCIgdmFyaWFudD1cImNvbnRhaW5lZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnRpbnVhciByZWxldmFuZG9cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8Lz5cclxuICAgICAgICAgICAgICAgICAgICApIDogKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPEJ1dHRvbiBvbkNsaWNrPXtoYW5kbGVDbG9zZX0gY29sb3I9XCJpbmhlcml0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuY2VsYXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPEJ1dHRvbiBvbkNsaWNrPXtoYW5kbGVDb25maXJtTG9nb3V0fSBjb2xvcj1cInByaW1hcnlcIiB2YXJpYW50PVwiY29udGFpbmVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2FsaXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8Lz5cclxuICAgICAgICAgICAgICAgICAgICApfVxyXG4gICAgICAgICAgICAgICAgPC9EaWFsb2dBY3Rpb25zPlxyXG4gICAgICAgICAgICA8L0RpYWxvZz5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICk7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgTGF5b3V0QWNjaW9uRGlzcG9zaXRpdm9Qcm9wcyB7XHJcbiAgICB0aXR1bG9BcHBCYXI6IFJlYWN0LlJlYWN0Tm9kZTtcclxuICAgIHRpdHVsb1BhbmVsOiBzdHJpbmc7XHJcbiAgICBoZWFkZXJBZGljaW9uYWw/OiBSZWFjdC5SZWFjdE5vZGU7XHJcblxyXG4gICAgbW9kb0RNOiBNb2RvRE07XHJcbiAgICBvbmxpbmU6IGJvb2xlYW47XHJcblxyXG4gICAgbG9hZGluZz86IGJvb2xlYW47XHJcbiAgICBhdmlzbz86IHsgdGlwbzogJ2luZm8nIHwgJ3N1Y2Nlc3MnIHwgJ2Vycm9yJywgbWVuc2FqZTogc3RyaW5nIH0gfCBudWxsO1xyXG5cclxuICAgIHRleHRvQm90b25BY2Npb246IFJlYWN0LlJlYWN0Tm9kZTtcclxuICAgIGNvbG9yQm90b25BY2Npb24/OiBDb2xvclZhbHVlcztcclxuICAgIG9uQWNjaW9uOiAoKSA9PiB2b2lkO1xyXG5cclxuICAgIGRlc2hhYmlsaXRhckJvdG9uVm9sdmVyPzogYm9vbGVhbjtcclxuICAgIG1lbnNhamVWYWNpbz86IHN0cmluZztcclxuXHJcbiAgICBjaGlsZHJlbk1vZGFsZXM/OiBSZWFjdC5SZWFjdE5vZGU7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBMYXlvdXRBY2Npb25EaXNwb3NpdGl2byhwcm9wczogTGF5b3V0QWNjaW9uRGlzcG9zaXRpdm9Qcm9wcyk6IEpTWC5FbGVtZW50IHtcclxuICAgIGNvbnN0IGRhdG9zQnlQYXNzID0gZ2V0RGF0b3NCeVBhc3MoKTtcclxuICAgIGNvbnN0IGVzdHJ1Y3R1cmEgPSBnZXRFc3RydWN0dXJhKCk7XHJcbiAgICBjb25zdCBkaXNwYXRjaCA9IHVzZURpc3BhdGNoKCk7XHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIHNjcm9sbFRvVG9wKCk7XHJcbiAgICB9LCBbXSk7XHJcblxyXG4gICAgY29uc3QgYXZpc29SZWR1eCA9IHVzZVNlbGVjdG9yKChzdGF0ZTogQ2Fzb1N0YXRlKSA9PiBzdGF0ZS5vcGNpb25lcy5hdmlzb1BlcnNpc3RlbnRlKTtcclxuICAgIGNvbnN0IGF2aXNvQU1vc3RyYXIgPSBwcm9wcy5hdmlzbyB8fCBhdmlzb1JlZHV4O1xyXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICBpZiAoYXZpc29SZWR1eCkge1xyXG4gICAgICAgICAgICBjb25zdCB0aW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgZGlzcGF0Y2goZGlzcGF0Y2hlcnMuU0VUX09QQ0lPTih7IG9wY2lvbjogJ2F2aXNvUGVyc2lzdGVudGUnLCB2YWxvcjogbnVsbCB9KSk7XHJcbiAgICAgICAgICAgIH0sIDUwMDApO1xyXG4gICAgICAgICAgICByZXR1cm4gKCkgPT4gY2xlYXJUaW1lb3V0KHRpbWVyKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuXHJcbiAgICB9LCBbYXZpc29SZWR1eCwgZGlzcGF0Y2hdKTtcclxuXHJcbiAgICBjb25zdCBjYW50Q2FyZ2FzOiBudW1iZXIgPSBoYXlEYXRvc0J5UGFzc0FsbWFjZW5hZG9zKCkgPyBsaWtlQXIoZGF0b3NCeVBhc3MuY2FyZ2FzKS5hcnJheSgpLmxlbmd0aCA6IDA7XHJcbiAgICBjb25zdCBjYW50UmVzcHVlc3RhczogbnVtYmVyID0gaGF5RGF0b3NCeVBhc3NBbG1hY2VuYWRvcygpICYmIGVzdHJ1Y3R1cmEgPyBsaWtlQXIoZGF0b3NCeVBhc3MucmVzcHVlc3Rhc1tlc3RydWN0dXJhLnVhUHBhbF0pLmFycmF5KCkubGVuZ3RoIDogMDtcclxuXHJcbiAgICByZXR1cm4gKFxyXG4gICAgICAgIDw+XHJcbiAgICAgICAgICAgIDxBcHBCYXJQcmluY2lwYWxcclxuICAgICAgICAgICAgICAgIG1vZG9ETT17cHJvcHMubW9kb0RNfVxyXG4gICAgICAgICAgICAgICAgdGl0dWxvPXtwcm9wcy50aXR1bG9BcHBCYXJ9XHJcbiAgICAgICAgICAgICAgICBkaXNhYmxlZD17cHJvcHMubG9hZGluZ31cclxuICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJob2phLWRlLXJ1dGFcIj5cclxuICAgICAgICAgICAgICAgIDxJbmZvVmVyc2lvblNpbmNyb0Rlc3BsaWVndWUvPlxyXG4gICAgICAgICAgICAgICAgPFBhcGVyIHN0eWxlPXt7IHBhZGRpbmc6ICcyMHB4JywgbWFyZ2luOiAnYXV0bycsIG1hcmdpbkJvdHRvbTogJzEwcHgnIH19PlxyXG4gICAgICAgICAgICAgICAgICAgIDxUeXBvZ3JhcGh5IHZhcmlhbnQ9XCJoNVwiPntwcm9wcy50aXR1bG9QYW5lbH08L1R5cG9ncmFwaHk+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHtwcm9wcy5oZWFkZXJBZGljaW9uYWx9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHtoYXlEYXRvc0J5UGFzc0FsbWFjZW5hZG9zKCkgPyAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3sgbWFyZ2luQm90dG9tOiAnMjBweCcgfX0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VHlwb2dyYXBoeSB2YXJpYW50PVwiaDZcIj5JbmZvcm1hY2nDs24gZGVsIGRpc3Bvc2l0aXZvOjwvVHlwb2dyYXBoeT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUeXBvZ3JhcGh5PntjYW50Q2FyZ2FzfSDDoXJlYXM6IHtsaWtlQXIoZGF0b3NCeVBhc3MuY2FyZ2FzKS5rZXlzKCkuam9pbignLCAnKX08L1R5cG9ncmFwaHk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VHlwb2dyYXBoeT57Y2FudFJlc3B1ZXN0YXN9IHtlc3RydWN0dXJhPy51YVBwYWwgfHwgJ3ZpdmllbmRhcyd9PC9UeXBvZ3JhcGh5PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICApIDogKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9wcy5tZW5zYWplVmFjaW8gJiYgcHJvcHMubWVuc2FqZVZhY2lvLnRyaW0oKSAhPT0gXCJcIiA/IChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUeXBvZ3JhcGh5IHN0eWxlPXt7IG1hcmdpbkJvdHRvbTogJzIwcHgnIH19Pntwcm9wcy5tZW5zYWplVmFjaW99PC9UeXBvZ3JhcGh5PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICApIDogbnVsbFxyXG4gICAgICAgICAgICAgICAgICAgICl9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHthdmlzb0FNb3N0cmFyICYmIChcclxuICAgICAgICAgICAgICAgICAgICAgICAgPFBhcGVyIHN0eWxlPXt7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAnMTBweCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW5Cb3R0b206ICcyMHB4JyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogYXZpc29BTW9zdHJhci50aXBvID09PSAnc3VjY2VzcycgPyAnI2U2ZmZmYScgOiBhdmlzb0FNb3N0cmFyLnRpcG8gPT09ICdlcnJvcicgPyAnI2ZmZjVmNScgOiAnI2VkZjJmNycsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogYXZpc29BTW9zdHJhci50aXBvID09PSAnc3VjY2VzcycgPyAnIzIzNGU1MicgOiBhdmlzb0FNb3N0cmFyLnRpcG8gPT09ICdlcnJvcicgPyAnIzliMmMyYycgOiAnIzJkMzc0OCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXI6IGAxcHggc29saWQgJHthdmlzb0FNb3N0cmFyLnRpcG8gPT09ICdzdWNjZXNzJyA/ICcjMzE5Nzk1JyA6IGF2aXNvQU1vc3RyYXIudGlwbyA9PT0gJ2Vycm9yJyA/ICcjZTUzZTNlJyA6ICcjY2JkNWUwJ31gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH19PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFR5cG9ncmFwaHk+e2F2aXNvQU1vc3RyYXIubWVuc2FqZX08L1R5cG9ncmFwaHk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvUGFwZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgKX1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBkaXNwbGF5OiAnZmxleCcsIGdhcDogJzEwcHgnLCBhbGlnbkl0ZW1zOiAnY2VudGVyJywgZmxleFdyYXA6ICd3cmFwJyB9fT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPEJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudD1cImNvbnRhaW5lZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcj17cHJvcHMuY29sb3JCb3RvbkFjY2lvbiB8fCAncHJpbWFyeSd9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17cHJvcHMubG9hZGluZyB8fCAhcHJvcHMub25saW5lfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17cHJvcHMub25BY2Npb259XHJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtwcm9wcy50ZXh0b0JvdG9uQWNjaW9ufVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L0J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IGRpc3BsYXk6ICdmbGV4JywgZ2FwOiAnMTBweCcsIGFsaWduSXRlbXM6ICdjZW50ZXInLCBmbGV4V3JhcDogJ3dyYXAnIH19PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7IXByb3BzLm9ubGluZSAmJiAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VHlwb2dyYXBoeSBjb2xvcj1cInNlY29uZGFyeVwiIHN0eWxlPXt7IG1hcmdpbkxlZnQ6IHByb3BzLmRlc2hhYmlsaXRhckJvdG9uVm9sdmVyID8gJzBweCcgOiAnMTBweCcgfX0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGViZSBlc3RhciBjb25lY3RhZG8gYSBpbnRlcm5ldCBwYXJhIHJlYWxpemFyIGVzdGEgYWNjacOzbi5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvVHlwb2dyYXBoeT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgKX1cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvUGFwZXI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAge3Byb3BzLmNoaWxkcmVuTW9kYWxlc31cclxuICAgICAgICA8Lz5cclxuICAgICk7XHJcbn1cclxuXHJcbmludGVyZmFjZSBQYW50YWxsYVNpbmNyb25pemFjaW9uUHJvcHMge1xyXG4gICAgLy8gUHJvcHMgb3BjaW9uYWxlcyBwYXJhIGVsIFwic2Fib3JcIiByZXF1ZXJpZGFcclxuICAgIHJlcXVlcmlkYT86IGJvb2xlYW47XHJcbiAgICBtZW5zYWplUmVxdWVyaWRvPzogUmVhY3QuUmVhY3ROb2RlO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gUGFudGFsbGFTaW5jcm9uaXphY2lvbihwcm9wczogUGFudGFsbGFTaW5jcm9uaXphY2lvblByb3BzKTogSlNYLkVsZW1lbnQge1xyXG4gICAgY29uc3QgW2xvYWRpbmcsIHNldExvYWRpbmddID0gdXNlU3RhdGU8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gICAgY29uc3QgYXZpc29QZXJzaXN0ZW50ZSA9IHVzZVNlbGVjdG9yKChzdGF0ZTogQ2Fzb1N0YXRlKSA9PiBzdGF0ZS5vcGNpb25lcy5hdmlzb1BlcnNpc3RlbnRlKTtcclxuICAgIGNvbnN0IG9ubGluZTogYm9vbGVhbiA9IHVzZU9ubGluZVN0YXR1cygpO1xyXG4gICAgY29uc3QgZGlzcGF0Y2ggPSB1c2VEaXNwYXRjaCgpO1xyXG4gICAgY29uc3QgbW9kb0RNID0gZ2V0Rm9ybVJlbmRlcmVyKCkuZ2V0TW9kb0RNKCk7XHJcblxyXG4gICAgY29uc3QgaGFuZGxlU2luY3Jvbml6YXIgPSBhc3luYyAoKTogUHJvbWlzZTx2b2lkPiA9PiB7XHJcbiAgICAgICAgc2V0TG9hZGluZyh0cnVlKTtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBkaXNwYXRjaChkaXNwYXRjaGVycy5TRVRfT1BDSU9OKHsgb3BjaW9uOiAnYXZpc29QZXJzaXN0ZW50ZScsIHZhbG9yOiBudWxsIH0pKTtcclxuICAgICAgICAgICAgY29uc3QgZm9ybVJlbmRlcmVyID0gZ2V0Rm9ybVJlbmRlcmVyKCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGRhdG9zID0gYXdhaXQgZm9ybVJlbmRlcmVyLm9uU2luY3Jvbml6YXIoYXdhaXQgZm9ybVJlbmRlcmVyLmxlZXJEYXRvcygpLCBmYWxzZSk7XHJcbiAgICAgICAgICAgIGF3YWl0IGZvcm1SZW5kZXJlci5jYXJnYXJNb3RvcigpO1xyXG4gICAgICAgICAgICBjb25zdCBtZW5zYWplRXhpdG8gPSBgU2luY3Jvbml6YWNpw7NuIGV4aXRvc2EuIFNpbmNybyBOwrogJHtkYXRvcy5udW1fc2luY3JvfWA7XHJcbiAgICAgICAgICAgIGRpc3BhdGNoKGRpc3BhdGNoZXJzLlNFVF9QQU5UQUxMQV9BQ1RVQUwoeyBwYW50YWxsYTogJ3NpbmNyb25pemFjaW9uJywgYXZpc29QZXJzaXN0ZW50ZTogeyB0aXBvOiAnc3VjY2VzcycsIG1lbnNhamU6IG1lbnNhamVFeGl0byB9IH0pKTtcclxuICAgICAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coZXJyKVxyXG4gICAgICAgICAgICBkaXNwYXRjaChkaXNwYXRjaGVycy5TRVRfUEFOVEFMTEFfQUNUVUFMKHtcclxuICAgICAgICAgICAgICAgIHBhbnRhbGxhOiBwcm9wcy5yZXF1ZXJpZGEgPyAnc2luY3Jvbml6YWNpb25fcmVxdWVyaWRhJyA6ICdzaW5jcm9uaXphY2lvbicsXHJcbiAgICAgICAgICAgICAgICBhdmlzb1BlcnNpc3RlbnRlOiB7IHRpcG86ICdlcnJvcicsIG1lbnNhamU6IGBFcnJvciBkZSBzaW5jcm9uaXphY2nDs246ICR7dW5leHBlY3RlZChlcnIpLm1lc3NhZ2V9YCB9XHJcbiAgICAgICAgICAgIH0pKTtcclxuICAgICAgICB9IGZpbmFsbHkge1xyXG4gICAgICAgICAgICBzZXRMb2FkaW5nKGZhbHNlKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIC8vIEVzdGlsbyBwYXJhIGVsIG1lbnNhamUgY3VhbmRvIGVzIHJlcXVlcmlkYVxyXG4gICAgY29uc3QgcGFyYWdyYXBoU3R5bGVzID0geyBmb250U2l6ZTogXCIxLjJyZW1cIiwgZm9udFdlaWdodDogNjAwLCBwYWRkaW5nOiBcIjVweCAxMHB4XCIsIG1hcmdpbkJvdHRvbTogXCIxNXB4XCIgfTtcclxuXHJcbiAgICAvLyBTaSBlcyByZXF1ZXJpZGEsIGlueWVjdGFtb3MgZWwgbWVuc2FqZSBleHBsaWNhdGl2byBhcnJpYmFcclxuICAgIGNvbnN0IGhlYWRlckFkaWNpb25hbCA9IHByb3BzLnJlcXVlcmlkYSAmJiBwcm9wcy5tZW5zYWplUmVxdWVyaWRvID8gKFxyXG4gICAgICAgIDxUeXBvZ3JhcGh5IGNvbXBvbmVudD1cImRpdlwiIHN0eWxlPXtwYXJhZ3JhcGhTdHlsZXN9PlxyXG4gICAgICAgICAgICB7cHJvcHMubWVuc2FqZVJlcXVlcmlkb31cclxuICAgICAgICA8L1R5cG9ncmFwaHk+XHJcbiAgICApIDogbnVsbDtcclxuXHJcbiAgICByZXR1cm4gKFxyXG4gICAgICAgIDxMYXlvdXRBY2Npb25EaXNwb3NpdGl2b1xyXG4gICAgICAgICAgICB0aXR1bG9BcHBCYXI9e3Byb3BzLnJlcXVlcmlkYSA/IGBTSU5DUk9OSVpBQ0nDk04gUkVRVUVSSURBJHttb2RvRE0gPT09ICdjYXBhJyA/ICcgLSBDQVBBJyA6ICcnfWAgOiAnU0lOQ1JPTklaQUNJw5NOJ31cclxuICAgICAgICAgICAgbW9kb0RNPXttb2RvRE19XHJcbiAgICAgICAgICAgIHRpdHVsb1BhbmVsPXtwcm9wcy5yZXF1ZXJpZGEgPyBcIlNpbmNyb25pemFjacOzbiBSZXF1ZXJpZGFcIiA6IFwiU2luY3Jvbml6YXIgRGlzcG9zaXRpdm9cIn1cclxuICAgICAgICAgICAgaGVhZGVyQWRpY2lvbmFsPXtoZWFkZXJBZGljaW9uYWx9XHJcbiAgICAgICAgICAgIGF2aXNvPXthdmlzb1BlcnNpc3RlbnRlfVxyXG4gICAgICAgICAgICBsb2FkaW5nPXtsb2FkaW5nfVxyXG4gICAgICAgICAgICBvbmxpbmU9e29ubGluZX1cclxuICAgICAgICAgICAgdGV4dG9Cb3RvbkFjY2lvbj17XHJcbiAgICAgICAgICAgICAgICBsb2FkaW5nID9cclxuICAgICAgICAgICAgICAgICAgICAnU2luY3Jvbml6YW5kby4uLidcclxuICAgICAgICAgICAgICAgIDpcclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT17eyBkaXNwbGF5OiAnZmxleCcsIGFsaWduSXRlbXM6ICdjZW50ZXInLCBnYXA6ICc4cHgnIH19PjxJQ09OLkNsb3VkU3luYyAvPiBTaW5jcm9uaXphcjwvc3Bhbj5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb2xvckJvdG9uQWNjaW9uPXttb2RvRE0gPT09ICdjYXBhJyA/ICdzdWNjZXNzJyA6ICdwcmltYXJ5J31cclxuICAgICAgICAgICAgb25BY2Npb249e2hhbmRsZVNpbmNyb25pemFyfVxyXG4gICAgICAgICAgICBtZW5zYWplVmFjaW89e3Byb3BzLnJlcXVlcmlkYSA/IFwiIFwiIDogXCJObyBoYXkgaW5mb3JtYWNpw7NuIGRlIGZvcm11bGFyaW9zIGxvY2FsbWVudGUuXCJ9XHJcbiAgICAgICAgLz5cclxuICAgICk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBQYW50YWxsYUNhbWJpb01vZG8oKTogSlNYLkVsZW1lbnQge1xyXG4gICAgY29uc3QgW2xvYWRpbmcsIHNldExvYWRpbmddID0gdXNlU3RhdGU8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gICAgY29uc3QgW2F2aXNvLCBzZXRBdmlzb10gPSB1c2VTdGF0ZTx7IHRpcG86ICdpbmZvJyB8ICdzdWNjZXNzJyB8ICdlcnJvcicsIG1lbnNhamU6IHN0cmluZyB9IHwgbnVsbD4obnVsbCk7XHJcbiAgICBjb25zdCBbcGFzc3dvcmQsIHNldFBhc3N3b3JkXSA9IHVzZVN0YXRlPHN0cmluZz4oJycpO1xyXG4gICAgY29uc3QgW2RpYWxvZ09wZW4sIHNldERpYWxvZ09wZW5dID0gdXNlU3RhdGU8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gICAgY29uc3QgW21vZG9ETSwgc2V0TW9kb0RNXSA9IHVzZVN0YXRlPE1vZG9ETT4oJ3Byb2R1YycpO1xyXG4gICAgY29uc3QgW2Vycm9yUGFzc3dvcmQsIHNldEVycm9yUGFzc3dvcmRdID0gdXNlU3RhdGU8c3RyaW5nIHwgbnVsbD4obnVsbCk7XHJcbiAgICBjb25zdCBvbmxpbmU6IGJvb2xlYW4gPSB1c2VPbmxpbmVTdGF0dXMoKTtcclxuICAgIGNvbnN0IGRpc3BhdGNoID0gdXNlRGlzcGF0Y2goKTtcclxuXHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGZldGNoTW9kbyA9IGFzeW5jICgpOiBQcm9taXNlPHZvaWQ+ID0+IHtcclxuICAgICAgICAgICAgY29uc3QgbTogTW9kb0RNID0gZ2V0Rm9ybVJlbmRlcmVyKCkuZ2V0TW9kb0RNKCk7XHJcbiAgICAgICAgICAgIGdldEZvcm1SZW5kZXJlcigpLnNldE1vZG9ETShtKTtcclxuICAgICAgICAgICAgc2V0TW9kb0RNKG0pO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgZmV0Y2hNb2RvKCk7XHJcbiAgICB9LCBbXSk7XHJcblxyXG4gICAgY29uc3QgaGFuZGxlQ29uZmlybWFyQ2FtYmlvID0gYXN5bmMgKCk6IFByb21pc2U8dm9pZD4gPT4ge1xyXG4gICAgICAgIGlmIChwYXNzd29yZCAhPT0gJzEyMzQnKSB7XHJcbiAgICAgICAgICAgIHNldEVycm9yUGFzc3dvcmQoJ0NvbnRyYXNlw7FhIGluY29ycmVjdGEuJyk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgc2V0RXJyb3JQYXNzd29yZChudWxsKTtcclxuICAgICAgICBzZXREaWFsb2dPcGVuKGZhbHNlKTtcclxuICAgICAgICBzZXRMb2FkaW5nKHRydWUpO1xyXG4gICAgICAgIHNldEF2aXNvKG51bGwpO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG51ZXZvTW9kbzogTW9kb0RNID0gbW9kb0RNID09PSAncHJvZHVjJyA/ICdjYXBhJyA6ICdwcm9kdWMnO1xyXG4gICAgICAgICAgICBjb25zdCBmb3JtUmVuZGVyZXIgPSBnZXRGb3JtUmVuZGVyZXIoKTtcclxuICAgICAgICAgICAgYXdhaXQgZm9ybVJlbmRlcmVyLm9uU2luY3Jvbml6YXIoYXdhaXQgZm9ybVJlbmRlcmVyLmxlZXJEYXRvcygpLCB0cnVlKTtcclxuICAgICAgICAgICAgZm9ybVJlbmRlcmVyLnNldE1vZG9ETShudWV2b01vZG8pO1xyXG4gICAgICAgICAgICBzZXRNb2RvRE0obnVldm9Nb2RvKTtcclxuICAgICAgICAgICAgYXdhaXQgZm9ybVJlbmRlcmVyLmNhcmdhck1vdG9yKCk7XHJcbiAgICAgICAgICAgIHNldEF2aXNvKHsgdGlwbzogJ3N1Y2Nlc3MnLCBtZW5zYWplOiBgTU9ETyAke251ZXZvTW9kby50b1VwcGVyQ2FzZSgpfSBBQ1RJVkFETyBZIERJU1BPU0lUSVZPIFNJTkNST05JWkFET2AgfSk7XHJcbiAgICAgICAgICAgIGRpc3BhdGNoKGRpc3BhdGNoZXJzLlNFVF9PUENJT04oeyBvcGNpb246ICdwYW50YWxsYUFjdHVhbCcsIHZhbG9yOiAnbW9kbycgfSkpO1xyXG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgICBzZXRBdmlzbyh7IHRpcG86ICdlcnJvcicsIG1lbnNhamU6IGBFcnJvciBhbCBjYW1iaWFyIGRlIG1vZG86ICR7dW5leHBlY3RlZChlcnIpLm1lc3NhZ2V9YCB9KTtcclxuICAgICAgICB9IGZpbmFsbHkge1xyXG4gICAgICAgICAgICBzZXRMb2FkaW5nKGZhbHNlKTtcclxuICAgICAgICAgICAgc2V0UGFzc3dvcmQoJycpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgY29uc3QgaGVhZGVyQWRpY2lvbmFsVGV4dCA9IChcclxuICAgICAgICA8VHlwb2dyYXBoeSBzdHlsZT17eyBtYXJnaW5Cb3R0b206ICcyMHB4JywgZm9udFdlaWdodDogJ2JvbGQnIH19PlxyXG4gICAgICAgICAgICBNb2RvIGFjdHVhbDogPHNwYW4gc3R5bGU9e3sgY29sb3I6IG1vZG9ETSA9PT0gJ2NhcGEnID8gJ2dyZWVuJyA6ICdibHVlJywgdGV4dFRyYW5zZm9ybTogJ3VwcGVyY2FzZScgfX0+e21vZG9ETX08L3NwYW4+XHJcbiAgICAgICAgPC9UeXBvZ3JhcGh5PlxyXG4gICAgKTtcclxuXHJcbiAgICByZXR1cm4gKFxyXG4gICAgICAgIDxMYXlvdXRBY2Npb25EaXNwb3NpdGl2b1xyXG4gICAgICAgICAgICB0aXR1bG9BcHBCYXI9XCJDQU1CSU8gREUgTU9ET1wiXHJcbiAgICAgICAgICAgIG1vZG9ETT17bW9kb0RNfVxyXG4gICAgICAgICAgICB0aXR1bG9QYW5lbD1cIkNhbWJpYXIgTW9kbyBkZWwgRGlzcG9zaXRpdm9cIlxyXG4gICAgICAgICAgICBoZWFkZXJBZGljaW9uYWw9e2hlYWRlckFkaWNpb25hbFRleHR9XHJcbiAgICAgICAgICAgIGF2aXNvPXthdmlzb31cclxuICAgICAgICAgICAgbG9hZGluZz17bG9hZGluZ31cclxuICAgICAgICAgICAgb25saW5lPXtvbmxpbmV9XHJcbiAgICAgICAgICAgIHRleHRvQm90b25BY2Npb249e2BDYW1iaWFyIGEgbW9kbyAke21vZG9ETSA9PT0gJ3Byb2R1YycgPyAnY2FwYScgOiAncHJvZHVjJ31gfVxyXG4gICAgICAgICAgICBjb2xvckJvdG9uQWNjaW9uPXttb2RvRE0gPT09ICdwcm9kdWMnID8gJ3ByaW1hcnknIDogJ3N1Y2Nlc3MnfVxyXG4gICAgICAgICAgICBvbkFjY2lvbj17KCkgPT4geyBzZXRFcnJvclBhc3N3b3JkKG51bGwpOyBzZXREaWFsb2dPcGVuKHRydWUpOyB9fVxyXG4gICAgICAgICAgICBjaGlsZHJlbk1vZGFsZXM9e1xyXG4gICAgICAgICAgICAgICAgPERpYWxvZyBvcGVuPXtkaWFsb2dPcGVufSBvbkNsb3NlPXsoKSA9PiB7IHNldERpYWxvZ09wZW4oZmFsc2UpOyBzZXRQYXNzd29yZCgnJyk7IHNldEVycm9yUGFzc3dvcmQobnVsbCk7IH19PlxyXG4gICAgICAgICAgICAgICAgICAgIDxEaWFsb2dUaXRsZT5Db25maXJtYXIgY2FtYmlvIGRlIG1vZG88L0RpYWxvZ1RpdGxlPlxyXG4gICAgICAgICAgICAgICAgICAgIDxEaWFsb2dDb250ZW50PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8RGlhbG9nQ29udGVudFRleHQgc3R5bGU9e3sgbWFyZ2luQm90dG9tOiAnMTVweCcgfX0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb25maXJtYSBjYW1iaW8gZGUgbW9kbyBcInttb2RvRE19XCIgYSBcInttb2RvRE0gPT09ICdwcm9kdWMnID8gJ2NhcGEnIDogJ3Byb2R1Yyd9XCIuIFNlIHNpbmNyb25pemFyw6EgZWwgZGlzcG9zaXRpdm8uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvRGlhbG9nQ29udGVudFRleHQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHtlcnJvclBhc3N3b3JkICYmIChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUeXBvZ3JhcGh5IHN0eWxlPXt7IGNvbG9yOiAnI2QzMmYyZicsIG1hcmdpbkJvdHRvbTogJzE1cHgnLCBmb250V2VpZ2h0OiAnYm9sZCcgfX0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2Vycm9yUGFzc3dvcmR9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1R5cG9ncmFwaHk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICl9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxUeXBvZ3JhcGh5IHZhcmlhbnQ9XCJib2R5MlwiIHN0eWxlPXt7IG1hcmdpbkJvdHRvbTogJzEwcHgnIH19PlBvciBmYXZvciBpbmdyZXNlIGxhIGNvbnRyYXNlw7FhOjwvVHlwb2dyYXBoeT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwicGFzc3dvcmRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3Bhc3N3b3JkfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlOiBSZWFjdC5DaGFuZ2VFdmVudDxIVE1MSW5wdXRFbGVtZW50PikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFBhc3N3b3JkKGUudGFyZ2V0LnZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3JQYXNzd29yZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRFcnJvclBhc3N3b3JkKG51bGwpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT17eyB3aWR0aDogJzEwMCUnLCBwYWRkaW5nOiAnMTBweCcsIGZvbnRTaXplOiAnMTZweCcgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICAgICA8L0RpYWxvZ0NvbnRlbnQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPERpYWxvZ0FjdGlvbnM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxCdXR0b24gb25DbGljaz17KCkgPT4geyBzZXREaWFsb2dPcGVuKGZhbHNlKTsgc2V0UGFzc3dvcmQoJycpOyBzZXRFcnJvclBhc3N3b3JkKG51bGwpOyB9fSBjb2xvcj1cImluaGVyaXRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIENhbmNlbGFyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8QnV0dG9uIG9uQ2xpY2s9e2hhbmRsZUNvbmZpcm1hckNhbWJpb30gY29sb3I9XCJwcmltYXJ5XCIgdmFyaWFudD1cImNvbnRhaW5lZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29uZmlybWFyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvRGlhbG9nQWN0aW9ucz5cclxuICAgICAgICAgICAgICAgIDwvRGlhbG9nPlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgLz5cclxuICAgICk7XHJcbn1cclxuXHJcbmludGVyZmFjZSBJbmZvVmVyc2lvblNpbmNyb0Rlc3BsaWVndWVQcm9wcyB7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBJbmZvVmVyc2lvblNpbmNyb0Rlc3BsaWVndWUoX3Byb3BzOiBJbmZvVmVyc2lvblNpbmNyb0Rlc3BsaWVndWVQcm9wcyk6IEpTWC5FbGVtZW50IHtcclxuICAgIGNvbnN0IHZlcnNpb24gPSBnZXRGb3JtUmVuZGVyZXIoKS5nZXRBcHBDYWNoZVZlcnNpb24oKTtcclxuICAgIGNvbnN0IHsgbnVtX3NpbmNybyB9ID0gZ2V0RGF0b3NCeVBhc3MoKTtcclxuICAgIHJldHVybiAoXHJcbiAgICAgICAgPFBhcGVyIHN0eWxlPXt7IG1hcmdpbkJvdHRvbTogJzEwcHgnLCBwYWRkaW5nOiAnMTBweCcgfX0+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibm9tYnJlLXZlcnNpb25cIj5cclxuICAgICAgICAgICAgICAgIDxkaXY+SW5zdGl0dXRvIGRlIEVzdGFkw61zdGljYSB5IENlbnNvcyBkZSBsYSBDaXVkYWQgQXV0w7Nub21hIGRlIEJ1ZW5vcyBBaXJlcyAtIElERUNCQTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdj52ZXJzacOzbiB7dmVyc2lvbn0gLSB7bnVtX3NpbmNybyA/IGBzaW5jcm86ICR7bnVtX3NpbmNyby50b1N0cmluZygpfWAgOiAnc2luIHNpbmNyb25pemFyJ308L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9QYXBlcj5cclxuICAgICk7XHJcbn1cclxuXHJcbmV4cG9ydCB0eXBlIEhvamFEZVJ1dGFEZXNwbGllZ3VlUHJvcHMgPSB7XHJcbn07XHJcblxyXG5leHBvcnQgdHlwZSBIb2phRGVSdXRhRGVzcGxpZWd1ZVR5cGUgPSAocHJvcHM6IEhvamFEZVJ1dGFEZXNwbGllZ3VlUHJvcHMpID0+IEpTWC5FbGVtZW50O1xyXG5cclxuZXhwb3J0IHZhciBIb2phRGVSdXRhRGVzcGxpZWd1ZTogSG9qYURlUnV0YURlc3BsaWVndWVUeXBlXHJcblxyXG5leHBvcnQgY29uc3Qgc2V0SG9qYURlUnV0YURlc3BsaWVndWUgPSAoaG9qYURlUnV0YTogSG9qYURlUnV0YURlc3BsaWVndWVUeXBlKSA9PiBIb2phRGVSdXRhRGVzcGxpZWd1ZSA9IGhvamFEZVJ1dGFcclxuXHJcbnNldEhvamFEZVJ1dGFEZXNwbGllZ3VlKChfcHJvcHM6IEhvamFEZVJ1dGFEZXNwbGllZ3VlUHJvcHMpID0+IHtcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgc2Nyb2xsVG9Ub3AoKTtcclxuICAgIH0sIFtdKTtcclxuICAgIHZhciB7IGNhcmdhcywgbnVtX3NpbmNybywgaW5mb3JtYWNpb25IZHIsIHJlc3B1ZXN0YXMgfSA9IGdldERhdG9zQnlQYXNzKCk7XHJcbiAgICB2YXIgZmVlZGJhY2tSb3dWYWxpZGF0b3IgPSBnZXRGZWVkYmFja1Jvd1ZhbGlkYXRvcigpO1xyXG4gICAgY29uc3QgbW9kb0RNOiBNb2RvRE0gPSBnZXRGb3JtUmVuZGVyZXIoKS5nZXRNb2RvRE0oKTtcclxuICAgIHJldHVybiAoXHJcbiAgICAgICAgPD5cclxuICAgICAgICAgICAgPEFwcEJhclByaW5jaXBhbFxyXG4gICAgICAgICAgICAgICAgbW9kb0RNPXttb2RvRE19XHJcbiAgICAgICAgICAgICAgICB0aXR1bG89XCJIT0pBIERFIFJVVEFcIlxyXG4gICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImhvamEtZGUtcnV0YVwiPlxyXG4gICAgICAgICAgICAgICAgPEluZm9WZXJzaW9uU2luY3JvRGVzcGxpZWd1ZS8+XHJcbiAgICAgICAgICAgICAgICB7bGlrZUFyKGNhcmdhcykubWFwKChjYXJnYSwgaWRDYXJnYSwgXywgcG9zaWNpb24pID0+XHJcbiAgICAgICAgICAgICAgICAgICAgPERlc3BsZWdhckNhcmdhIGtleT17aWRDYXJnYX0gY2FyZ2E9e2NhcmdhfSBpZENhcmdhPXtpZENhcmdhfSBwb3NpY2lvbj17cG9zaWNpb259IGluZm9ybWFjaW9uSGRyPXtpbmZvcm1hY2lvbkhkcn0gZmVlZGJhY2tSb3dWYWxpZGF0b3I9e2ZlZWRiYWNrUm93VmFsaWRhdG9yfSByZXNwdWVzdGFzPXtyZXNwdWVzdGFzfSAvPlxyXG4gICAgICAgICAgICAgICAgKS5hcnJheSgpfVxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8Lz5cclxuICAgICk7XHJcbn0pO1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIExpc3RhVGV4dG9zKHByb3BzOiB7IHRleHRvczogc3RyaW5nW10gfSkge1xyXG4gICAgcmV0dXJuIDx1bD5cclxuICAgICAgICB7cHJvcHMudGV4dG9zLm1hcCh0ID0+IDxsaT48VHlwb2dyYXBoeT57dH08L1R5cG9ncmFwaHk+PC9saT4pfVxyXG4gICAgPC91bD47XHJcbn1cclxuXHJcbi8vQ09OVFJPTCBERSBQRVNUQcORQVNcclxudmFyIGFsbE9wZW5lZFRhYnM6IHsgW3g6IHN0cmluZ106IG51bWJlciB9ID0ge307XHJcbnZhciBpbmZvT3BlbmVkVGFicyA9IHtcclxuICAgIGFsbE9wZW5lZFRhYnMsXHJcbiAgICBteUlkOiAnY2FsY3VsYW5kby4uLicsXHJcbiAgICBvdGhlclRhYnNOYW1lczogJydcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIE9wZW5lZFRhYnMoKSB7XHJcbiAgICBjb25zdCBbdGFicywgc2V0VGFic10gPSB1c2VTdGF0ZShpbmZvT3BlbmVkVGFicy5vdGhlclRhYnNOYW1lcyk7XHJcbiAgICB2YXIgeyBtb2RvRGlyZWN0byB9ID0gdXNlU2VsZWN0b3IoKHN0YXRlOiBDYXNvU3RhdGUpID0+ICh7IG1vZG9EaXJlY3RvOiBzdGF0ZS5vcGNpb25lcy5tb2RvRGlyZWN0byB9KSk7XHJcbiAgICBjb25zdCB1cGRhdGVUYWJzU3RhdHVzID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHNldFRhYnMoaW5mb09wZW5lZFRhYnMub3RoZXJUYWJzTmFtZXMpO1xyXG4gICAgfVxyXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbXktdGFicycsIHVwZGF0ZVRhYnNTdGF0dXMpO1xyXG4gICAgICAgIHJldHVybiAoKSA9PiB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignbXktdGFicycsIHVwZGF0ZVRhYnNTdGF0dXMpO1xyXG4gICAgfSwgW10pXHJcbiAgICByZXR1cm4gbW9kb0RpcmVjdG8gPyBudWxsIDogKHRhYnMpID9cclxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRhYi1jb3VudGVyIHRhYi1lcnJvclwiPsKhQVRFTkNJw5NOISBIYXkgbcOhcyBkZSB1bmEgdmVudGFuYSBhYmllcnRhLiBTZSBwdWVkZW4gcGVyZGVyIGRhdG9zOiB7dGFic308L2Rpdj5cclxuICAgICAgICA6XHJcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0YWItY291bnRlclwiPuKclDwvZGl2PlxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gQXBwRG1FbmN1KCkge1xyXG4gICAgdmFyIHsgZm9yUGssIHBhbnRhbGxhQWN0dWFsIH0gPSB1c2VTZWxlY3Rvcigoc3RhdGU6IENhc29TdGF0ZSkgPT4gc3RhdGUub3BjaW9uZXMpO1xyXG4gICAgdmFyIGRhdG9zQnlQYXNzID0gZ2V0RGF0b3NCeVBhc3MoKTtcclxuICAgIGNvbnN0IGRpc3BhdGNoID0gdXNlRGlzcGF0Y2goKTtcclxuXHJcbiAgICAvLyBEZXRlcm1pbmFyIHNpIGxhIHNpbmNyb25pemFjacOzbiBlcyByZXF1ZXJpZGFcclxuICAgIGNvbnN0IHNpbmNyb1JlcXVlcmlkYSA9ICFoYXlEYXRvc0J5UGFzc0FsbWFjZW5hZG9zKClcclxuICAgICAgICB8fCAoaGF5RGF0b3NCeVBhc3NBbG1hY2VuYWRvcygpICYmIGRhdG9zQnlQYXNzLmlkcGVyICE9PSBnZXRGb3JtUmVuZGVyZXIoKS5nZXRJZHBlckxvZ3VlYWRvKCkpO1xyXG5cclxuICAgIC8vIFNpIGxhIHNpbmNybyBlcyByZXF1ZXJpZGEsIGZvcnphciBwYW50YWxsYUFjdHVhbCB2w61hIFJlZHV4XHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIGlmIChzaW5jcm9SZXF1ZXJpZGEgJiYgcGFudGFsbGFBY3R1YWwgIT09ICdzaW5jcm9uaXphY2lvbl9yZXF1ZXJpZGEnKSB7XHJcbiAgICAgICAgICAgIGRpc3BhdGNoKGRpc3BhdGNoZXJzLlNFVF9PUENJT04oeyBvcGNpb246ICdwYW50YWxsYUFjdHVhbCcsIHZhbG9yOiAnc2luY3Jvbml6YWNpb25fcmVxdWVyaWRhJyB9KSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSwgW3NpbmNyb1JlcXVlcmlkYSwgcGFudGFsbGFBY3R1YWwsIGRpc3BhdGNoXSk7XHJcblxyXG4gICAgaWYgKHNpbmNyb1JlcXVlcmlkYSkge1xyXG4gICAgICAgIGNvbnN0IG1lbnNhamUgPSAhaGF5RGF0b3NCeVBhc3NBbG1hY2VuYWRvcygpXHJcbiAgICAgICAgICAgID8gPD4gRGViZSBzaW5jcm9uaXphciBlbCBkaXNwb3NpdGl2byBwYXJhIG9idGVuZXIgdW5hIGhvamEgZGUgcnV0YS48Lz5cclxuICAgICAgICAgICAgOiA8PiBFbCB1c3VhcmlvIGF1dGVudGljYWRvIG5vIGNvaW5jaWRlIGNvbiBlbCB1c3VhcmlvIGFzb2NpYWRvIGFsXHJcbiAgICAgICAgICAgICAgICB0cmFiYWpvIGFsbWFjZW5hZG8gZW4gbGEgdGFibGV0LlxyXG4gICAgICAgICAgICAgICAgPGJyIC8+XHJcbiAgICAgICAgICAgICAgICBEZWJlIHNpbmNyb25pemFyIGFudGVzIGRlIGNvbnRpbnVhci5cclxuICAgICAgICAgICAgPC8+O1xyXG4gICAgICAgIHJldHVybiA8UGFudGFsbGFTaW5jcm9uaXphY2lvbiByZXF1ZXJpZGE9e3RydWV9IG1lbnNhamVSZXF1ZXJpZG89e21lbnNhamV9IC8+O1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChmb3JQayA9PSBudWxsKSB7XHJcbiAgICAgICAgaWYgKHBhbnRhbGxhQWN0dWFsID09PSAnc2luY3Jvbml6YWNpb24nKSB7XHJcbiAgICAgICAgICAgIHJldHVybiA8UGFudGFsbGFTaW5jcm9uaXphY2lvbiAvPlxyXG4gICAgICAgIH0gZWxzZSBpZiAocGFudGFsbGFBY3R1YWwgPT09ICdtb2RvJykge1xyXG4gICAgICAgICAgICByZXR1cm4gPFBhbnRhbGxhQ2FtYmlvTW9kbyAvPlxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gPEhvamFEZVJ1dGFEZXNwbGllZ3VlIC8+XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiA8Rm9ybXVsYXJpb0Rlc3BsaWVndWUgZm9yUGs9e2ZvclBrfSAvPlxyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZGVzcGxlZ2FyRm9ybXVsYXJpb0FjdHVhbChcclxuICAgIGZvcm1SZW5kZXJlcjogRm9ybVJlbmRlcmVyLFxyXG4gICAgb3B0czogeyBmb3JQa1JhaXo/OiBGb3JQa1JhaXogfSA9IHt9XHJcbikge1xyXG4gICAgYXdhaXQgZm9ybVJlbmRlcmVyLmNhcmdhck1vdG9yKCk7XHJcbiAgICBjb25zdCBzdG9yZSA9IGF3YWl0IGNyZWFyU3RvcmVGb3JtdWxhcmlvKG9wdHMpXHJcbiAgICB0cnkge1xyXG4gICAgICAgIGF3YWl0IGxvYWRDU1MoQk9PVFNUUkFQXzVfMV8zX1NSQyk7XHJcbiAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgICB0aHJvdyAoZXJyKVxyXG4gICAgfVxyXG4gICAgUmVhY3RET00ucmVuZGVyKFxyXG4gICAgICAgIDxSZW5kZXJQcmluY2lwYWwgc3RvcmU9e3N0b3JlfSBkaXNwYXRjaGVycz17ZGlzcGF0Y2hlcnN9IG1lbnNhamVSZXRvcm5vPXtvcHRzLmZvclBrUmFpeiA/IFwiVm9sdmVyIGFsIGZvcm11bGFyaW9cIiA6IFwiVm9sdmVyIGEgbGEgaG9qYSBkZSBydXRhXCJ9PlxyXG4gICAgICAgICAgICA8T3BlbmVkVGFicyAvPlxyXG4gICAgICAgICAgICA8QXBwRG1FbmN1IC8+XHJcbiAgICAgICAgPC9SZW5kZXJQcmluY2lwYWw+LFxyXG4gICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtYWluX2xheW91dCcpXHJcbiAgICApXHJcbn1cclxuXHJcbmZ1bmN0aW9uIGxvYWRJbnN0YW5jZSgpIHtcclxuICAgIGlmICh0eXBlb2YgQnJvYWRjYXN0Q2hhbm5lbCA9PT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB2YXIgYmMgPSBuZXcgQnJvYWRjYXN0Q2hhbm5lbCgnY29udGFkb3InKTtcclxuICAgIHZhciBteUlkID0gU3RyaW5nLmZyb21Db2RlUG9pbnQoMTAwICsgTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMTAwMCkpICsgTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMTAwKS8vKyctJytuZXcgRGF0ZSgpLmdldFRpbWUoKTtcclxuICAgIGFsbE9wZW5lZFRhYnNbbXlJZF0gPSAxO1xyXG4gICAgaW5mb09wZW5lZFRhYnMubXlJZCA9IG15SWQ7XHJcbiAgICB2YXIgZXZlbnQgPSBuZXcgRXZlbnQoJ215LXRhYnMnKTtcclxuICAgIGJjLm9ubWVzc2FnZSA9IGZ1bmN0aW9uIChldikge1xyXG4gICAgICAgIGlmIChldi5kYXRhLnF1ZSA9PSAnc295Jykge1xyXG4gICAgICAgICAgICBpZiAoIWFsbE9wZW5lZFRhYnNbZXYuZGF0YS5pZF0pIHtcclxuICAgICAgICAgICAgICAgIGFsbE9wZW5lZFRhYnNbZXYuZGF0YS5pZF0gPSAwO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGFsbE9wZW5lZFRhYnNbZXYuZGF0YS5pZF0rKztcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGV2LmRhdGEucXVlID09ICd1bmxvYWQnKSB7XHJcbiAgICAgICAgICAgIGRlbGV0ZSBhbGxPcGVuZWRUYWJzW2V2LmRhdGEuaWRdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZXYuZGF0YS5xdWUgPT0gJ2xvYWQnKSB7XHJcbiAgICAgICAgICAgIGFsbE9wZW5lZFRhYnNbZXYuZGF0YS5pZF0gPSAxO1xyXG4gICAgICAgICAgICBiYy5wb3N0TWVzc2FnZSh7IHF1ZTogJ3NveScsIGlkOiBteUlkIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpbmZvT3BlbmVkVGFicy5vdGhlclRhYnNOYW1lcyA9IGxpa2VBcihhbGxPcGVuZWRUYWJzKS5maWx0ZXIoKF8sIGlkKSA9PiBpZCAhPSBteUlkKS5qb2luKCcsJyk7XHJcbiAgICAgICAgd2luZG93LmRpc3BhdGNoRXZlbnQoZXZlbnQpO1xyXG4gICAgfTtcclxuICAgIGJjLnBvc3RNZXNzYWdlKHsgcXVlOiAnbG9hZCcsIGlkOiBteUlkIH0pO1xyXG4gICAgd2luZG93LmRpc3BhdGNoRXZlbnQoZXZlbnQpO1xyXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3VubG9hZCcsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBiYy5wb3N0TWVzc2FnZSh7IHF1ZTogJ3VubG9hZCcsIGlkOiBteUlkIH0pO1xyXG4gICAgICAgIHdpbmRvdy5kaXNwYXRjaEV2ZW50KGV2ZW50KTtcclxuICAgIH0pXHJcbiAgICAvL21vc3RyYXJRdWllbmVzU29tb3MoKTtcclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IHNldExpYnJlRGVzcGxpZWd1ZSA9IChsaWJyZTogTGlicmVEZXNwbGllZ3VlVHlwZSkgPT4gTGlicmVEZXNwbGllZ3VlID0gbGlicmVcclxuXHJcbnNldExpYnJlRGVzcGxpZWd1ZSgocHJvcHM6IHtcclxuICAgIGtleTogc3RyaW5nXHJcbiAgICBjYXNpbGxlcm86IExpYnJlXHJcbiAgICBmb3JtdWxhcmlvOiBGb3JtdWxhcmlvXHJcbiAgICBmb3JQazogRm9yUGtcclxufSkgPT4gPGRpdiBrZXk9e3Byb3BzLmtleX0gaWQ9e3Byb3BzLmNhc2lsbGVyby5pZF9jYXNpbGxlcm99PmVzdGUgY2FzaWxsZXJvIGRlYmUgcmVkZWZpbmlyc2UgZW4gbGEgQVBQIGZpbmFsIHkgc3UgdXNvIGVzIGV4Y2x1c2l2byBkZWwgw6FyZWEgaW5mb3Jtw6F0aWNhPC9kaXY+KVxyXG5cclxuc2V0Q2FsY3VsYXJWYXJpYWJsZXMoKHJlc3B1ZXN0YXNSYWl6OiBSZXNwdWVzdGFzUmFpeiwgZm9yUGs6IEZvclBrKSA9PiB7XHJcbiAgICB0eXBlIENvbmZpZ1BhZHJlID0ge1xyXG4gICAgICAgIHVhUGVyc29uYXM6IElkVW5pZGFkQW5hbGlzaXNcclxuICAgICAgICB2YXJTZXhvUGVyc29uYTogSWRWYXJpYWJsZVxyXG4gICAgICAgIHZhck5vbWJyZVBlcnNvbmE6IElkVmFyaWFibGVcclxuICAgICAgICB2YXJMb3NOb21icmVzOiBJZFZhcmlhYmxlXHJcbiAgICB9XHJcbiAgICB2YXIgZXN0cnVjdHVyYSA9IGdldEVzdHJ1Y3R1cmEoKTtcclxuICAgIHZhciBhdXRvQ2FyZ2FyUGVyc29uYXMgPSAoY29uZmlnUGFkcmU6IENvbmZpZ1BhZHJlLCB1YVBhZHJlUGVyc29uYXM6IElkVW5pZGFkQW5hbGlzaXMsIGVzdHJ1Y3R1cmE6IEVzdHJ1Y3R1cmEpID0+IHtcclxuICAgICAgICB2YXIgbGVlck5vbWJyZXMgPSAocmVzcHVlc3Rhc1VBUGFkcmU6IFJlc3B1ZXN0YXMsIGNvbmZpZ1BhZHJlOiBDb25maWdQYWRyZSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoIXJlc3B1ZXN0YXNVQVBhZHJlW2NvbmZpZ1BhZHJlLnVhUGVyc29uYXNdIHx8IGVtcHR5KHJlc3B1ZXN0YXNVQVBhZHJlW2NvbmZpZ1BhZHJlLnVhUGVyc29uYXNdKSB8fCByZXNwdWVzdGFzVUFQYWRyZVtjb25maWdQYWRyZS51YVBlcnNvbmFzXVswXVtjb25maWdQYWRyZS52YXJTZXhvUGVyc29uYV0gPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGxvc05vbWJyZXMgPSByZXNwdWVzdGFzVUFQYWRyZVtjb25maWdQYWRyZS52YXJMb3NOb21icmVzXSBhcyBzdHJpbmdcclxuICAgICAgICAgICAgICAgIGlmIChsb3NOb21icmVzICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIXJlc3B1ZXN0YXNVQVBhZHJlW2NvbmZpZ1BhZHJlLnVhUGVyc29uYXNdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNVQVBhZHJlW2NvbmZpZ1BhZHJlLnVhUGVyc29uYXNdID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGxvc05vbWJyZXNcclxuICAgICAgICAgICAgICAgICAgICAgICAgLnNwbGl0KCcsJylcclxuICAgICAgICAgICAgICAgICAgICAgICAgLmZpbHRlcigobm9tYnJlOiBzdHJpbmcpID0+IG5vbWJyZS50cmltKCkubGVuZ3RoID4gMClcclxuICAgICAgICAgICAgICAgICAgICAgICAgLmZvckVhY2goKG5vbWJyZTogc3RyaW5nLCBpOiBudW1iZXIpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNVQVBhZHJlW2NvbmZpZ1BhZHJlLnVhUGVyc29uYXNdW2ldID0gcmVzcHVlc3Rhc1VBUGFkcmVbY29uZmlnUGFkcmUudWFQZXJzb25hc11baV0gfHwge307XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwdWVzdGFzVUFQYWRyZVtjb25maWdQYWRyZS51YVBlcnNvbmFzXVtpXVtjb25maWdQYWRyZS52YXJOb21icmVQZXJzb25hXSA9IG5vbWJyZS50cmltKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGVzdHJ1Y3R1cmEudW5pZGFkZXNfYW5hbGlzaXNbdWFQYWRyZVBlcnNvbmFzXSkge1xyXG4gICAgICAgICAgICBpZiAodWFQYWRyZVBlcnNvbmFzID09ICd2aXZpZW5kYXMnKSB7XHJcbiAgICAgICAgICAgICAgICBsZWVyTm9tYnJlcyhyZXNwdWVzdGFzUmFpeiwgY29uZmlnUGFkcmUpXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKHZhciByZXNwdWVzdGFzVUFQYWRyZSBvZiBpdGVyYXRvcihyZXNwdWVzdGFzUmFpelt1YVBhZHJlUGVyc29uYXNdID8/IFtdKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxlZXJOb21icmVzKHJlc3B1ZXN0YXNVQVBhZHJlLCBjb25maWdQYWRyZSlcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHZhciB1YXNJdGVyYXI6IFBhcnRpYWw8e1xyXG4gICAgICAgIFtrZXkgaW4gSWRVbmlkYWRBbmFsaXNpc106IENvbmZpZ1BhZHJlXHJcbiAgICB9PjtcclxuICAgIHZhciBjb25maWdFbmN1OiBDb25maWdQYWRyZSA9IHtcclxuICAgICAgICB1YVBlcnNvbmFzOiAncGVyc29uYXMnLFxyXG4gICAgICAgIHZhclNleG9QZXJzb25hOiAnc2V4bycgYXMgSWRWYXJpYWJsZSxcclxuICAgICAgICB2YXJOb21icmVQZXJzb25hOiAnbm9tYnJlJyBhcyBJZFZhcmlhYmxlLFxyXG4gICAgICAgIHZhckxvc05vbWJyZXM6IFwibG9zX25vbWJyZXNcIiBhcyBJZFZhcmlhYmxlXHJcbiAgICB9O1xyXG4gICAgdmFyIGNvbmZpZ1N1cGU6IENvbmZpZ1BhZHJlID0ge1xyXG4gICAgICAgIHVhUGVyc29uYXM6ICdwZXJzb25hc19zdXAnIGFzIElkVW5pZGFkQW5hbGlzaXMsXHJcbiAgICAgICAgdmFyU2V4b1BlcnNvbmE6ICdzZXhvX3N1cCcgYXMgSWRWYXJpYWJsZSxcclxuICAgICAgICB2YXJOb21icmVQZXJzb25hOiAnbm9tYnJlX3N1cCcgYXMgSWRWYXJpYWJsZSxcclxuICAgICAgICB2YXJMb3NOb21icmVzOiBcIm5vbWJyZXNfY29tcG9uZW50ZXNfc3VwXCIgYXMgSWRWYXJpYWJsZVxyXG4gICAgfTtcclxuXHJcbiAgICBpZiAoZXN0cnVjdHVyYS5jb25SZWFIb2dhcikge1xyXG4gICAgICAgIHVhc0l0ZXJhciA9IHtcclxuICAgICAgICAgICAgaG9nYXJlczogY29uZmlnRW5jdSxcclxuICAgICAgICAgICAgW1wiaG9nYXJlc19zdXBcIiBhcyBJZFVuaWRhZEFuYWxpc2lzXTogY29uZmlnU3VwZVxyXG4gICAgICAgIH1cclxuICAgICAgICBsaWtlQXIodWFzSXRlcmFyKS5mb3JFYWNoKChjb25maWdQYWRyZSwgdWFQYWRyZSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoY29uZmlnUGFkcmUpIHtcclxuICAgICAgICAgICAgICAgIGF1dG9DYXJnYXJQZXJzb25hcyhjb25maWdQYWRyZSwgdWFQYWRyZSBhcyBJZFVuaWRhZEFuYWxpc2lzLCBlc3RydWN0dXJhKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdmFyIGNvbmZpZ1BhZHJlczogQ29uZmlnUGFkcmVbXSA9IFtjb25maWdFbmN1LCBjb25maWdTdXBlXTtcclxuICAgICAgICBjb25maWdQYWRyZXMuZm9yRWFjaCgoY29uZmlnUGFkcmUpID0+IHtcclxuICAgICAgICAgICAgYXV0b0NhcmdhclBlcnNvbmFzKGNvbmZpZ1BhZHJlLCAndml2aWVuZGFzJywgZXN0cnVjdHVyYSlcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG4gICAgcmVzcHVlc3Rhc1JhaXoudmRvbWluaW8gPSBnZXREYXRvc0J5UGFzcygpLmluZm9ybWFjaW9uSGRyW2ZvclBrW2VzdHJ1Y3R1cmEucGtBZ3JlZ2FkYVVhUHBhbF1dLnRlbS5kb21pbmlvO1xyXG4gICAgLy9UT0RPOiBNRUpPUkFSIEVOIEFMR1VOIE1PTUVOVE8gRUwgQk9UT04gTElTVE9cclxuICAgIC8vbGV0IHRvdGFsSCA9IHJlc3B1ZXN0YXNSYWl6Wyd0b3RhbF9oJyBhcyBJZFZhcmlhYmxlXTtcclxuICAgIC8vcmVzcHVlc3Rhc1JhaXpbJyRCLkY6UzEnIGFzIElkVmFyaWFibGVdID0gKHJlc3B1ZXN0YXNSYWl6Wydob2dhcmVzJ10gfHwgW10pLmxlbmd0aCA9PSB0b3RhbEggPyAnb2snIDogbnVsbDtcclxuICAgIC8vbGV0IHRvdGFsSHN1cCA9IHJlc3B1ZXN0YXNSYWl6Wyd0b3RhbF9oX3N1cCcgYXMgSWRWYXJpYWJsZV07XHJcbiAgICAvL3Jlc3B1ZXN0YXNSYWl6WyckQi5GOlMxX1NVUCcgYXMgSWRWYXJpYWJsZV0gPSAocmVzcHVlc3Rhc1JhaXpbJ2hvZ2FyZXNfc3VwJyBhcyBJZFVuaWRhZEFuYWxpc2lzXSB8fCBbXSkubGVuZ3RoID09IHRvdGFsSHN1cCA/ICdvaycgOiBudWxsO1xyXG59KVxyXG5cclxud2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBmdW5jdGlvbiAoKSB7XHJcbiAgICBsb2FkSW5zdGFuY2UoKVxyXG59KVxyXG4vL0ZJTiBDT05UUk9MIFBFU1RBw5FBU1xyXG5cclxuZnVuY3Rpb24gbG9hZENTUyhjc3NVUkw6IHN0cmluZywgaWQ/OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgdmFyIGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdsaW5rJyk7XHJcbiAgICAgICAgbGluay5yZWwgPSAnc3R5bGVzaGVldCc7XHJcbiAgICAgICAgbGluay5ocmVmID0gY3NzVVJMO1xyXG4gICAgICAgIGxpbmsuaWQgPSBpZCB8fCBjc3NVUkw7XHJcbiAgICAgICAgZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChsaW5rKTtcclxuICAgICAgICBsaW5rLm9ubG9hZCA9ICgpID0+IHtcclxuICAgICAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgdHJhZSAke2Nzc1VSTH1gKTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIGxpbmsub25lcnJvciA9IChlcnIpID0+IHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coJ2Vycm9yIGNhcmdhbmRvIGVsIGVzdGlsbycsIGVycilcclxuICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihgcHJvYmxlbWEgY2FyZ2FuZG8gZXN0aWxvICR7Y3NzVVJMfWApKVxyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG59XHJcblxyXG5mdW5jdGlvbiByZW1vdmVDU1NCeUlkKGlkOiBzdHJpbmcpIHtcclxuICAgIHZhciBsaW5rTm9kZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTtcclxuICAgIGxpbmtOb2RlPy5wYXJlbnROb2RlPy5yZW1vdmVDaGlsZChsaW5rTm9kZSk7XHJcbn1cclxuXHJcbmNvbnN0IEJPT1RTVFJBUF81XzFfM19TUkMgPSAnY3NzL2Jvb3RzdHJhcC5taW4uY3NzJzsiXX0=