dmencu 3.2.4 → 3.2.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (30) hide show
  1. package/dist/client/client/client.js +2 -2
  2. package/dist/client/unlogged/bypass-formulario.d.ts +5 -0
  3. package/dist/client/unlogged/bypass-formulario.js +58 -1
  4. package/dist/client/unlogged/redux-formulario.d.ts +44 -2
  5. package/dist/client/unlogged/redux-formulario.js +44 -4
  6. package/dist/client/unlogged/render-formulario.d.ts +6 -0
  7. package/dist/client/unlogged/render-formulario.js +205 -14
  8. package/dist/client/unlogged/render-formulario.tsx +252 -18
  9. package/dist/client/unlogged/render-general.d.ts +8 -0
  10. package/dist/client/unlogged/render-general.js +29 -2
  11. package/dist/client/unlogged/render-general.tsx +30 -0
  12. package/dist/client/unlogged/tipos.d.ts +7 -2
  13. package/dist/client/unlogged/tipos.js +1 -1
  14. package/dist/server/server/app-dmencu.js +2 -2
  15. package/dist/server/server/procedures-dmencu.js +6 -4
  16. package/dist/server/unlogged/tipos.d.ts +7 -2
  17. package/dist/server/unlogged/tipos.js +1 -1
  18. package/dist/unlogged/unlogged/bypass-formulario.d.ts +5 -0
  19. package/dist/unlogged/unlogged/bypass-formulario.js +58 -1
  20. package/dist/unlogged/unlogged/redux-formulario.d.ts +44 -2
  21. package/dist/unlogged/unlogged/redux-formulario.js +44 -4
  22. package/dist/unlogged/unlogged/render-formulario.d.ts +6 -0
  23. package/dist/unlogged/unlogged/render-formulario.js +205 -14
  24. package/dist/unlogged/unlogged/render-formulario.tsx +252 -18
  25. package/dist/unlogged/unlogged/render-general.d.ts +8 -0
  26. package/dist/unlogged/unlogged/render-general.js +29 -2
  27. package/dist/unlogged/unlogged/render-general.tsx +30 -0
  28. package/dist/unlogged/unlogged/tipos.d.ts +7 -2
  29. package/dist/unlogged/unlogged/tipos.js +1 -1
  30. package/package.json +1 -1
@@ -268,7 +268,8 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
268
268
  'prioridad' , reserva+1 ,
269
269
  'observaciones' , tt.carga_observaciones ,
270
270
  'cita' , cita ,
271
- 'carga' , t.area
271
+ 'carga' , t.area ,
272
+ 'semana' , t.semana
272
273
  ) as tem, t.area,
273
274
  --TODO: GENERALIZAR
274
275
  jsonb_build_object(
@@ -281,7 +282,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
281
282
  from tem t left join tareas_tem tt on (t.operativo = tt.operativo and t.enc = tt.enc and t.tarea_actual = tt.tarea)
282
283
  left join tareas ta on t.tarea_actual = ta.tarea
283
284
  where t.habilitada and ${quotedCondViv}
284
- group by t.operativo, t.enc, t.json_encuesta, t.resumen_estado, dominio, nomcalle,sector,edificio, entrada, nrocatastral, piso,departamento,habitacion,casa,reserva,tt.carga_observaciones, cita, t.area, tt.tarea, fecha_asignacion, asignado, main_form
285
+ group by t.operativo, t.enc, t.json_encuesta, t.resumen_estado, dominio, nomcalle,sector,edificio, entrada, nrocatastral, piso,departamento,habitacion,casa,reserva,tt.carga_observaciones, cita, t.area, tt.tarea, fecha_asignacion, asignado, main_form, t.semana
285
286
  )
286
287
  select jsonb_build_object(
287
288
  ${context.be.db.quoteLiteral(unidadAnalisisPrincipal)}, ${(0, pg_promise_strict_1.jsono)(`select enc, respuestas, jsonb_build_object('resumenEstado',"resumenEstado") as otras from ${context.be.db.quoteIdent(unidadAnalisisPrincipal)}`, 'enc', `otras || coalesce(respuestas,'{}'::jsonb)`)}
@@ -485,7 +486,8 @@ select o.id_casillero as id_formulario, o.unidad_analisis, 'BF_'||o.casillero bo
485
486
  'prioridad' , null ,
486
487
  'observaciones' , null ,
487
488
  'cita' , null ,
488
- 'carga' , null
489
+ 'carga' , null ,
490
+ 'semana' , null
489
491
  ) as tem,
490
492
  jsonb_build_object(
491
493
  'tarea', ${context.be.db.quoteLiteral(defaultTarea.tarea)},
@@ -2042,4 +2044,4 @@ select o.id_casillero as id_formulario, o.unidad_analisis, 'BF_'||o.casillero bo
2042
2044
  }
2043
2045
  ];
2044
2046
  });
2045
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvY2VkdXJlcy1kbWVuY3UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VydmVyL3Byb2NlZHVyZXMtZG1lbmN1LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBQUEsWUFBWSxDQUFDOzs7SUErY2Isb0RBaUNDO0lBNWVELGtDQUFrQztJQUNsQyxpREFBK0I7SUFLL0IseURBQTREO0lBRTVELCtDQUF3RDtJQUN4RCwyQkFBb0M7SUFFcEMsZ0RBQWdEO0lBR2hELHlEQUF3RDtJQUN4RCxxQ0FBZ0M7SUFFaEMsMkNBQWtEO0lBQ2xELDZDQUErQztJQUUvQyxJQUFJLElBQUksR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDM0IsSUFBSSxRQUFRLEdBQUcsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBRXBDLElBQUksWUFBWSxHQUFHLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUUzQyxNQUFNLGFBQWEsR0FBRyxNQUFNLENBQUM7SUFFN0IsTUFBTSxzQkFBc0IsR0FBRyxHQUFHLENBQUM7SUFDbkMsTUFBTSx5QkFBeUIsR0FBRyxHQUFHLENBQUM7SUFDdEMsTUFBTSx3QkFBd0IsR0FBRyxRQUFRLENBQUM7SUFDMUMsTUFBTSwyQkFBMkIsR0FBRyxXQUFXLENBQUM7SUFDaEQsTUFBTSxlQUFlLEdBQUcsQ0FBQyxDQUFDO0lBSTFCLElBQUksZUFBZ0MsQ0FBQztJQUNyQyxJQUFJLGNBQWMsR0FBRyxHQUFHLENBQUE7SUFFakIsTUFBTSxrQkFBa0IsR0FBRyxDQUFDLEdBQW9CLEVBQUUsRUFBRSxDQUN2RCxlQUFlLEdBQUcsR0FBRyxDQUFDO0lBRGIsUUFBQSxrQkFBa0Isc0JBQ0w7SUFFbkIsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLEdBQVcsRUFBRSxFQUFFLENBQzVDLGNBQWMsR0FBRyxHQUFHLENBQUM7SUFEWixRQUFBLGdCQUFnQixvQkFDSjtJQUV6QixJQUFB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RyxNQUFNO3NCQUMzRCxtQkFBbUI7c0JBQ25CLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO3NCQUNyRCxNQUFNLEdBQUcsV0FBVztzQkFDcEIsTUFBTSxHQUFHLGlCQUFpQjtzQkFDMUIsTUFBTSxHQUFHLFNBQVM7c0JBQ2xCLE1BQU0sR0FBRyxrQkFBa0IsQ0FBQztnQkFDbEMsT0FBTyxHQUFHLENBQUM7WUFDZixDQUFDO1NBQ0o7UUFDRDtZQUNJLE1BQU0sRUFBRSw0QkFBNEI7WUFDcEMsVUFBVSxFQUFFO2dCQUNSLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUU7Z0JBQ2pFLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFO2FBQ3BDO1lBQ0QsS0FBSyxFQUFFLENBQUMsT0FBTyxDQUFDO1lBQ2hCLFlBQVksRUFBRSxLQUFLLFdBQVcsT0FBeUIsRUFBRSxVQUEyRTtnQkFDaEksQ0FBQyxNQUFNLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUN2Qjs7O2dDQUdnQixFQUNoQixDQUFDLFVBQVUsQ0FBQyxTQUFTLEVBQUUsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUN6QyxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDO2dCQUV4QixPQUFPLHdCQUF3QixVQUFVLENBQUMsR0FBRyxlQUFlLENBQUM7WUFDakUsQ0FBQztTQUNKO0tBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xyXG5cclxuaW1wb3J0IHsgUHJvY2VkdXJlRGVmLCBUYWJsZURlZmluaXRpb24sIENsaWVudCwgVGFibGVEZWZpbml0aW9ucyB9IGZyb20gXCIuL3R5cGVzLWRtZW5jdVwiO1xyXG5pbXBvcnQgeyBQcm9jZWR1cmVDb250ZXh0LCBDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzLCBGb3JlaWduS2V5IH0gZnJvbSBcIm1ldGEtZW5jXCI7XHJcbmltcG9ydCAqIGFzIGxpa2VBciBmcm9tIFwibGlrZS1hclwiO1xyXG5leHBvcnQgKiBmcm9tIFwiLi90eXBlcy1kbWVuY3VcIjtcclxuaW1wb3J0IHsgSWRVbmlkYWRBbmFsaXNpcywgVW5pZGFkQW5hbGlzaXMsIEVzdGFkb0FjY2lvbiwgSWRFbmMsIElkVGFyZWEsIFJlc3B1ZXN0YXNSYWl6LCBJZE9wZXJhdGl2bywgSWRDYXJnYSwgTW9kb0RNIH0gZnJvbSBcIi4uL3VubG9nZ2VkL3RpcG9zXCI7XHJcblxyXG5pbXBvcnQgeyBPcGVyYXRpdm9HZW5lcmF0b3IgfSBmcm9tIFwicHJvY2VzYW1pZW50b1wiO1xyXG5cclxuaW1wb3J0IHsganNvbiwganNvbm8sIFJlc3VsdFJvd3MgfSBmcm9tIFwicGctcHJvbWlzZS1zdHJpY3RcIjtcclxuXHJcbmltcG9ydCB7IGNoYW5naW5nLCBkYXRlLCBjb2FsZXNjZSB9IGZyb20gJ2Jlc3QtZ2xvYmFscyc7XHJcbmltcG9ydCB7IHByb21pc2VzIGFzIGZzIH0gZnJvbSBcImZzXCI7XHJcblxyXG5pbXBvcnQgKiBhcyBFeHByZXNpb25QYXJzZXIgZnJvbSAnZXhwcmUtcGFyc2VyJztcclxuaW1wb3J0IHsgdGFyZWFzIH0gZnJvbSBcIi4vdGFibGUtdGFyZWFzXCI7XHJcbmltcG9ydCB7IHByZXBlbmRMaXN0ZW5lciB9IGZyb20gXCJwcm9jZXNzXCI7XHJcbmltcG9ydCB7IGdldERpYXNBUGFzYXJRdWVyeSB9IGZyb20gXCIuL3RhYmxlLXRhcmVhc190ZW1cIjtcclxuaW1wb3J0IHsgZXJyb3IgfSBmcm9tIFwiY29uc29sZVwiO1xyXG5pbXBvcnQgeyBDb250ZXh0IH0gZnJvbSBcInZtXCI7XHJcbmltcG9ydCB7IGV4cGVjdGVkLCB1bmV4cGVjdGVkIH0gZnJvbSBcImNhc3QtZXJyb3JcIjtcclxuaW1wb3J0IHsgZ2V0TW9kb0J5UG9saWN5IH0gZnJvbSBcIi4vYXBwLWRtZW5jdVwiO1xyXG5cclxudmFyIFBhdGggPSByZXF1aXJlKCdwYXRoJyk7XHJcbnZhciBzcWxUb29scyA9IHJlcXVpcmUoJ3NxbC10b29scycpO1xyXG5cclxudmFyIGRpc2NyZXBhbmNlcyA9IHJlcXVpcmUoJ2Rpc2NyZXBhbmNlcycpO1xyXG5cclxuY29uc3QgZm9ybVByaW5jaXBhbCA9ICdGOkYxJztcclxuXHJcbmNvbnN0IEVTVEFET19QT1NURVJJT1JfQ0FSR0EgPSAnQyc7XHJcbmNvbnN0IEVTVEFET19QT1NURVJJT1JfREVTQ0FSR0EgPSAnRCc7XHJcbmNvbnN0IE9QRVJBQ0lPTl9QUkVQQVJBUl9DQVJHQSA9ICdjYXJnYXInO1xyXG5jb25zdCBPUEVSQUNJT05fUFJFUEFSQVJfREVTQ0FSR0EgPSAnZGVzY2FyZ2FyJztcclxuY29uc3QgREVGQVVMVF9ET01JTklPID0gMztcclxuXHJcbmV4cG9ydCB0eXBlIGdlbmVyYXJJZEVuY0Z1biA9IChhcmVhOiBudW1iZXIsIGluZGV4OiBudW1iZXIpID0+IElkRW5jXHJcblxyXG52YXIgZ2VuZXJhcklkRW5jRnVuOiBnZW5lcmFySWRFbmNGdW47XHJcbnZhciBtYXhBRW5jUG9yQXJlYSA9IDk5OVxyXG5cclxuZXhwb3J0IGNvbnN0IHNldEdlbmVyYXJJZEVuY0Z1biA9IChmdW46IGdlbmVyYXJJZEVuY0Z1bikgPT5cclxuICAgIGdlbmVyYXJJZEVuY0Z1biA9IGZ1bjtcclxuXHJcbmV4cG9ydCBjb25zdCBzZXRNYXhFbmNQb3JBcmVhID0gKG1heDogbnVtYmVyKSA9PlxyXG4gICAgbWF4QUVuY1BvckFyZWEgPSBtYXg7XHJcblxyXG5zZXRHZW5lcmFySWRFbmNGdW4oKGFyZWE6IG51bWJlciwgbnVtRW5jOiBudW1iZXIpID0+IGFyZWEudG9TdHJpbmcoKSArIG51bUVuYy50b1N0cmluZygpLnBhZFN0YXJ0KG1heEFFbmNQb3JBcmVhLnRvU3RyaW5nKCkubGVuZ3RoLCAnMCcpIGFzIHVua25vd24gYXMgSWRFbmMpO1xyXG5cclxuc2V0TWF4RW5jUG9yQXJlYSg5OTkpO1xyXG5cclxuYXN5bmMgZnVuY3Rpb24gZ2VuZXJhck51ZXZvSWRFbmMoY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCwgb3BlcmF0aXZvOiBJZE9wZXJhdGl2bywgYXJlYTogbnVtYmVyLCBtYXhBRW5jUG9yQXJlYTogbnVtYmVyKSB7XHJcbiAgICBjb25zdCBzaWd1aWVudGVOdW1lcm9FbmN1ZXN0YSA9IChhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgU0VMRUNUIG9idGVuZXJfc2lndWllbnRlX2NvbnRhZG9yX2FyZWEoJDEsJDIsJDMpIEFTIG5leHRfY291bnRlcjtcclxuICAgIGAsIFtvcGVyYXRpdm8sIGFyZWEsIG1heEFFbmNQb3JBcmVhXSkuZmV0Y2hVbmlxdWVWYWx1ZSgpKS52YWx1ZTtcclxuICAgIHJldHVybiBnZW5lcmFySWRFbmNGdW4oYXJlYSwgc2lndWllbnRlTnVtZXJvRW5jdWVzdGEpO1xyXG59XHJcblxyXG5leHBvcnQgY29uc3QgZ2V0T3BlcmF0aXZvQWN0dWFsID0gYXN5bmMgKGNvbnRleHQ6IFByb2NlZHVyZUNvbnRleHQpID0+IHtcclxuICAgIHZhciBiZSA9IGNvbnRleHQuYmU7XHJcbiAgICB2YXIgb3BlcmF0aXZvID0gKGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KFxyXG4gICAgICAgIGBzZWxlY3Qgb3BlcmF0aXZvXHJcbiAgICAgICAgICAgIGZyb20gcGFyYW1ldHJvc1xyXG4gICAgICAgICAgICB3aGVyZSB1bmljb19yZWdpc3Ryb2BcclxuICAgICAgICAsIFtdXHJcbiAgICApLmZldGNoVW5pcXVlVmFsdWUoKSkudmFsdWVcclxuICAgIGlmIChvcGVyYXRpdm8pIHtcclxuICAgICAgICByZXR1cm4gb3BlcmF0aXZvXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRocm93IEVycm9yKCdubyBzZSBjb25maWd1csOzIHVuIG9wZXJhdGl2byBlbiBsYSB0YWJsYSBwYXLDoW1ldHJvcycpO1xyXG4gICAgfVxyXG59O1xyXG5cclxuYXN5bmMgZnVuY3Rpb24gZ2V0RGVmYXVsdFRhcmVhKGNvbnRleHQ6IFByb2NlZHVyZUNvbnRleHQsIG9wZXJhdGl2bzogSWRPcGVyYXRpdm8pIHtcclxuICAgIHJldHVybiAoYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgIHNlbGVjdCAqIFxyXG4gICAgICAgICAgICBmcm9tIHRhcmVhcyBcclxuICAgICAgICAgICAgd2hlcmUgZXNfaW5pY2lhbCBhbmQgb3BlcmF0aXZvID0gJDFcclxuICAgIGAsIFtvcGVyYXRpdm9dKS5mZXRjaFVuaXF1ZVJvdygpKS5yb3c7XHJcbn1cclxuXHJcbmFzeW5jIGZ1bmN0aW9uIGdldE9wZXJhdGl2b1Blcm1pdGVHZW5lcmFyTXVlc3RyYShjbGllbnQ6IENsaWVudCwgb3BlcmF0aXZvOiBJZE9wZXJhdGl2byk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgcmV0dXJuIChhd2FpdCBjbGllbnQucXVlcnkoYFxyXG4gICAgICAgIHNlbGVjdCBwZXJtaXRlX2dlbmVyYXJfbXVlc3RyYSBcclxuICAgICAgICAgICAgZnJvbSBvcGVyYXRpdm9zIFxyXG4gICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm8gPSAkMVxyXG4gICAgYCwgW29wZXJhdGl2b10pLmZldGNoVW5pcXVlVmFsdWUoKSkudmFsdWU7XHJcbn1cclxuXHJcbmFzeW5jIGZ1bmN0aW9uIHBlcnNpc3RpckVuY3Vlc3RhQXV0b2dlbmVyYWRhRW5ETShjb250ZXh0OiBQcm9jZWR1cmVDb250ZXh0LCBPUEVSQVRJVk86IElkT3BlcmF0aXZvLCBhcmVhOiBudW1iZXIsIGVuY0F1dG9nZW5lcmFkb0RtOiBzdHJpbmcsIHRva2VuOiBzdHJpbmcsIHJlc3B1ZXN0YXNSYWl6OiBSZXNwdWVzdGFzUmFpeiwgcmVjZXBjaW9uaXN0YTogc3RyaW5nLCBhc2lnbmFkbzogc3RyaW5nLCBtb2RvX2RtOiBNb2RvRE0sIGNhbWJpYV9tb2RvX2RtOiBib29sZWFuKTogUHJvbWlzZTxJZEVuYz4ge1xyXG4gICAgbGV0IGlkRW5jID0gbnVsbDtcclxuICAgIHZhciBwZXJtaXRlX2dlbmVyYXJfbXVlc3RyYSA9IGF3YWl0IGdldE9wZXJhdGl2b1Blcm1pdGVHZW5lcmFyTXVlc3RyYShjb250ZXh0LmNsaWVudCwgT1BFUkFUSVZPKTtcclxuICAgIGlmIChwZXJtaXRlX2dlbmVyYXJfbXVlc3RyYSkge1xyXG4gICAgICAgIGNvbnN0IGF1dG9nZW5lcmFkb0ZpZWxkID0gbW9kb19kbSA9PSAncHJvZHVjJyA/ICdlbmNfYXV0b2dlbmVyYWRvX2RtJyA6ICdlbmNfYXV0b2dlbmVyYWRvX2RtX2NhcGEnO1xyXG4gICAgICAgIGNvbnN0IHJlc3VsdFVwZGF0ZSA9IGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgVVBEQVRFIHRlbSBcclxuICAgICAgICAgICAgICAgIHNldCAoanNvbl9iYWNrdXAsIGpzb25fZW5jdWVzdGEsIGZlY2hhX2JhY2t1cCkgPSBcclxuICAgICAgICAgICAgICAgICAgICAoJDQsICQ1LCBjdXJyZW50X3RpbWVzdGFtcClcclxuICAgICAgICAgICAgICAgIHdoZXJlIChvcGVyYXRpdm8gPSAkMSBhbmQgJHtjb250ZXh0LmJlLmRiLnF1b3RlSWRlbnQoYXV0b2dlbmVyYWRvRmllbGQpfSA9ICQyIGFuZCB0b2tlbl9hdXRvZ2VuZXJhZG9fZG0gPSAkMylcclxuICAgICAgICAgICAgICAgIHJldHVybmluZyAqXHJcbiAgICAgICAgYCwgW09QRVJBVElWTywgZW5jQXV0b2dlbmVyYWRvRG0sIHRva2VuLCByZXNwdWVzdGFzUmFpeiwgcmVzcHVlc3Rhc1JhaXpdKS5mZXRjaE9uZVJvd0lmRXhpc3RzKCk7XHJcbiAgICAgICAgLy8gaGFnbyBpbnNlcnQgcG9ycXVlIG5vIGV4aXN0ZSBlbiB0ZW1cclxuICAgICAgICBjb25zdCBkZWZhdWx0VGFyZWEgPSBhd2FpdCBnZXREZWZhdWx0VGFyZWEoY29udGV4dCwgT1BFUkFUSVZPKTtcclxuICAgICAgICBpZiAocmVzdWx0VXBkYXRlLnJvd0NvdW50ID09IDApIHtcclxuICAgICAgICAgICAgaWRFbmMgPSBhd2FpdCBnZW5lcmFyTnVldm9JZEVuYyhjb250ZXh0LCBPUEVSQVRJVk8sIGFyZWEsIG1heEFFbmNQb3JBcmVhKVxyXG4gICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICBJTlNFUlQgaW50byB0ZW0gKFxyXG4gICAgICAgICAgICAgICAgICAgIG9wZXJhdGl2byxcclxuICAgICAgICAgICAgICAgICAgICBlbmMsXHJcbiAgICAgICAgICAgICAgICAgICAgYXJlYSxcclxuICAgICAgICAgICAgICAgICAgICBkb21pbmlvLFxyXG4gICAgICAgICAgICAgICAgICAgIGhhYmlsaXRhZGEsXHJcbiAgICAgICAgICAgICAgICAgICAgJHtjb250ZXh0LmJlLmRiLnF1b3RlSWRlbnQoYXV0b2dlbmVyYWRvRmllbGQpfSxcclxuICAgICAgICAgICAgICAgICAgICB0b2tlbl9hdXRvZ2VuZXJhZG9fZG0sXHJcbiAgICAgICAgICAgICAgICAgICAgdGFyZWFfYWN0dWFsLFxyXG4gICAgICAgICAgICAgICAgICAgIGpzb25fYmFja3VwLFxyXG4gICAgICAgICAgICAgICAgICAgIGpzb25fZW5jdWVzdGEsIFxyXG4gICAgICAgICAgICAgICAgICAgIGZlY2hhX2JhY2t1cFxyXG4gICAgICAgICAgICAgICAgKSBcclxuICAgICAgICAgICAgICAgICAgICB2YWx1ZXMgKCQxLCAkMiwgJDMsICQ0LCAkNSwgJDYsICQ3LCAkOCwgJDksICQxMCwgY3VycmVudF90aW1lc3RhbXApXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nICpcclxuICAgICAgICAgICAgYCwgW1xyXG4gICAgICAgICAgICAgICAgT1BFUkFUSVZPLFxyXG4gICAgICAgICAgICAgICAgaWRFbmMsXHJcbiAgICAgICAgICAgICAgICBhcmVhLFxyXG4gICAgICAgICAgICAgICAgREVGQVVMVF9ET01JTklPLFxyXG4gICAgICAgICAgICAgICAgdHJ1ZSxcclxuICAgICAgICAgICAgICAgIGVuY0F1dG9nZW5lcmFkb0RtLFxyXG4gICAgICAgICAgICAgICAgdG9rZW4sXHJcbiAgICAgICAgICAgICAgICBkZWZhdWx0VGFyZWEudGFyZWEsXHJcbiAgICAgICAgICAgICAgICByZXNwdWVzdGFzUmFpeixcclxuICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNSYWl6LFxyXG4gICAgICAgICAgICBdKS5mZXRjaFVuaXF1ZVJvdygpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlkRW5jID0gcmVzdWx0VXBkYXRlLnJvdy5lbmNcclxuICAgICAgICB9XHJcbiAgICAgICAgYXdhaXQgZ2VuZXJhclRhcmVhc1RlbUZhbHRhbnRlcyhjb250ZXh0LCBPUEVSQVRJVk8pO1xyXG4gICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgdXBkYXRlIHRhcmVhc190ZW1cclxuICAgICAgICAgICAgICAgIHNldCByZWNlcGNpb25pc3RhID0gJDQsIGFzaWduYWRvID0gJDVcclxuICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2bz0gJDEgYW5kIGVuYyA9ICQyIGFuZCB0YXJlYSA9ICQzXHJcbiAgICAgICAgICAgIHJldHVybmluZyAqXHJcbiAgICAgICAgYCwgW09QRVJBVElWTywgaWRFbmMsIGRlZmF1bHRUYXJlYS50YXJlYSwgcmVjZXBjaW9uaXN0YSwgYXNpZ25hZG9dKS5mZXRjaFVuaXF1ZVJvdygpO1xyXG4gICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgdXBkYXRlIHRhcmVhc190ZW1cclxuICAgICAgICAgICAgICAgIHNldCBjYXJnYWRvX2RtID0gJDQsIGVzdGFkbyA9ICQ1LCBvcGVyYWNpb24gPSAkNlxyXG4gICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvPSAkMSBhbmQgZW5jID0gJDIgYW5kIHRhcmVhID0gJDNcclxuICAgICAgICAgICAgcmV0dXJuaW5nICpcclxuICAgICAgICBgLCBbT1BFUkFUSVZPLCBpZEVuYywgZGVmYXVsdFRhcmVhLnRhcmVhLCB0b2tlbiwgRVNUQURPX1BPU1RFUklPUl9DQVJHQSwgY2FtYmlhX21vZG9fZG0gPyBudWxsIDogT1BFUkFDSU9OX1BSRVBBUkFSX0NBUkdBXVxyXG4gICAgICAgICkuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgIH1cclxuICAgIHJldHVybiBpZEVuY1xyXG59XHJcblxyXG4vKmRlZmluaWNpw7NuIGRlIGVzdHJ1Y3R1cmEgY29tcGxldGEsIGN1YW5kbyBleGlzdGEgaW5nLWVuYyBoYXkgcXVlIHBvbmVybG8gYWjDrSovXHJcbnR5cGUgRXN0cnVjdHVyYVRhYmxhID0geyB0YWJsZU5hbWU6IHN0cmluZywgcGtGaWVsZHM6IHsgZmllbGROYW1lOiBzdHJpbmcgfVtdLCBjaGlsZFRhYmxlczogRXN0cnVjdHVyYVRhYmxhW10gfTtcclxuZnVuY3Rpb24gY3JlYXRlU3RydWN0dXJlKGNvbnRleHQ6IFByb2NlZHVyZUNvbnRleHQsIHRhYmxlTmFtZTogc3RyaW5nKSB7XHJcbiAgICB2YXIgYmUgPSBjb250ZXh0LmJlO1xyXG4gICAgdmFyIG1haW5UYWJsZURlZjogVGFibGVEZWZpbml0aW9uID0gYmUudGFibGVTdHJ1Y3R1cmVzW3RhYmxlTmFtZV0oY29udGV4dCk7XHJcbiAgICB2YXIgZ2V0UGtGcm9tVGFibGVEZWYgPSBmdW5jdGlvbiBnZXRQa0Zyb21UYWJsZURlZih0YWJsZURlZjogVGFibGVEZWZpbml0aW9uKSB7XHJcbiAgICAgICAgcmV0dXJuIHRhYmxlRGVmLnByaW1hcnlLZXkubWFwKGZ1bmN0aW9uIChwaykge1xyXG4gICAgICAgICAgICByZXR1cm4geyBmaWVsZE5hbWU6IHBrIH07XHJcbiAgICAgICAgfSlcclxuICAgIH07XHJcbiAgICB2YXIgZ2V0RmtGcm9tVGFibGVEZWYgPSBmdW5jdGlvbiBnZXRGa0Zyb21UYWJsZURlZih0YWJsZURlZjogVGFibGVEZWZpbml0aW9uLCBwYXJlbnRUYWJsZU5hbWU6IHN0cmluZykge1xyXG4gICAgICAgIGxldCBwYXJlbnRGayA9ICg8Rm9yZWlnbktleVtdPnRhYmxlRGVmLmZvcmVpZ25LZXlzKS5maW5kKGZrID0+IGZrLnJlZmVyZW5jZXMgPT0gcGFyZW50VGFibGVOYW1lKTtcclxuICAgICAgICByZXR1cm4gcGFyZW50RmsgPyBwYXJlbnRGay5maWVsZHMgOiBbXTtcclxuICAgIH1cclxuICAgIHZhciBzdHJ1Y3Q6IEVzdHJ1Y3R1cmFUYWJsYSA9IHtcclxuICAgICAgICB0YWJsZU5hbWU6IG1haW5UYWJsZURlZi5uYW1lLFxyXG4gICAgICAgIHBrRmllbGRzOiBnZXRQa0Zyb21UYWJsZURlZihtYWluVGFibGVEZWYpLFxyXG4gICAgICAgIGNoaWxkVGFibGVzOiBbXVxyXG4gICAgfTtcclxuICAgIGlmIChtYWluVGFibGVEZWYuZGV0YWlsVGFibGVzICYmIG1haW5UYWJsZURlZi5kZXRhaWxUYWJsZXMubGVuZ3RoKSB7XHJcbiAgICAgICAgbWFpblRhYmxlRGVmLmRldGFpbFRhYmxlcy5mb3JFYWNoKGZ1bmN0aW9uIChkZXRhaWxUYWJsZSkge1xyXG4gICAgICAgICAgICBpZiAoZGV0YWlsVGFibGUudGFibGUpIHtcclxuICAgICAgICAgICAgICAgIHN0cnVjdC5jaGlsZFRhYmxlcy5wdXNoKFxyXG4gICAgICAgICAgICAgICAgICAgIGNoYW5naW5nKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVTdHJ1Y3R1cmUoY29udGV4dCwgZGV0YWlsVGFibGUudGFibGUpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7IGZrRmllbGRzOiBnZXRGa0Zyb21UYWJsZURlZihiZS50YWJsZVN0cnVjdHVyZXNbZGV0YWlsVGFibGUudGFibGVdKGNvbnRleHQpLCB0YWJsZU5hbWUpIH1cclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuICAgIHJldHVybiBzdHJ1Y3Q7XHJcbn1cclxuLyogZmluIGRlZmluaWNpb24gZXN0cnVjdHVyYSBjb21wbGV0YSAqL1xyXG5cclxudHlwZSBBbnlPYmplY3QgPSB7IFtrOiBzdHJpbmddOiBhbnkgfVxyXG5cclxudHlwZSBGdW5QYXJhbXMgPSB7XHJcbiAgICB0YXJlYTogSWRUYXJlYTtcclxuICAgIHJlc3B1ZXN0YXNVQVByaW5jaXBhbDogUmVzcHVlc3Rhc1JhaXo7XHJcbiAgICBzZXR0ZXJzOiBzdHJpbmdbXTtcclxuICAgIHBhcmFtczogYW55W107XHJcbiAgICBkZXN0aW5vOiAndGVtJyB8ICd0YXJlYXNfdGVtJztcclxufTtcclxuXHJcbmNvbnN0IGdldFNldHRlcnNBbmRQYXJhbWV0ZXJzRm9yUmVhTm9SZWFSZXN1bWVuRXN0YWRvID0gKHtcclxuICAgIHRhcmVhLFxyXG4gICAgcmVzcHVlc3Rhc1VBUHJpbmNpcGFsOiByLFxyXG4gICAgc2V0dGVyczogc2V0dGVyc0VudHJhZGEsXHJcbiAgICBwYXJhbXM6IHBhcmFtc0VudHJhZGEsXHJcbiAgICBkZXN0aW5vXHJcbn06IEZ1blBhcmFtcykgPT4ge1xyXG4gICAgY29uc3QgaXNTdXBlID0gdGFyZWEgPT09ICdzdXBlJztcclxuICAgIGNvbnN0IHN1Zmlqb1N1cGUgPSBpc1N1cGUgPyAnX3N1cCcgOiAnJztcclxuICAgIGNvbnN0IHByZWZpam9EbSA9IGRlc3Rpbm8gPT09ICd0YXJlYXNfdGVtJyA/ICdkbV8nIDogJyc7XHJcblxyXG4gICAgY29uc3Qgb2Zmc2V0ID0gcGFyYW1zRW50cmFkYS5sZW5ndGggKyAxO1xyXG5cclxuICAgIGNvbnN0IG51ZXZvc1ZhbG9yZXMgPSBpc1N1cGVcclxuICAgICAgICA/IFtyLnJlc3VtZW5Fc3RhZG9TdXAsIHIuY29kTm9SZWFTdXAsIHIuY29kUmVhU3VwXVxyXG4gICAgICAgIDogW3IucmVzdW1lbkVzdGFkbywgci5jb2ROb1JlYSwgci5jb2RSZWFdO1xyXG5cclxuICAgIGNvbnN0IGNhbXBvcyA9IFtcclxuICAgICAgICBgJHtwcmVmaWpvRG19cmVzdW1lbl9lc3RhZG8ke3N1Zmlqb1N1cGV9YCxcclxuICAgICAgICBgJHtwcmVmaWpvRG19bm9yZWEke3N1Zmlqb1N1cGV9YCxcclxuICAgICAgICBgJHtwcmVmaWpvRG19cmVhJHtzdWZpam9TdXBlfWBcclxuICAgIF07XHJcblxyXG4gICAgY29uc3QgbnVldm9zU2V0dGVycyA9IGNhbXBvcy5tYXAoKGNhbXBvLCBpKSA9PiBgJHtjYW1wb309JCR7b2Zmc2V0ICsgaX1gKTtcclxuXHJcbiAgICBjb25zdCBzZXR0ZXJzID0gWy4uLnNldHRlcnNFbnRyYWRhLCAuLi5udWV2b3NTZXR0ZXJzXTtcclxuICAgIGNvbnN0IHBhcmFtcyA9IFsuLi5wYXJhbXNFbnRyYWRhLCAuLi5udWV2b3NWYWxvcmVzXTtcclxuXHJcbiAgICByZXR1cm4geyBzZXR0ZXJzLCBwYXJhbXMgfTtcclxufTtcclxuXHJcbnZhciBndWFyZGFyRW5jdWVzdGFFblRlbSA9IGFzeW5jIChjb250ZXh0OiBQcm9jZWR1cmVDb250ZXh0LCBvcGVyYXRpdm86IElkT3BlcmF0aXZvLCBpZEVuYzogc3RyaW5nLCByZXNwdWVzdGFzVUFQcmluY2lwYWw6IFJlc3B1ZXN0YXNSYWl6LCB0YXJlYTogSWRUYXJlYSkgPT4ge1xyXG4gICAgdmFyIHsgcGFyYW1zLCBzZXR0ZXJzIH0gPSBnZXRTZXR0ZXJzQW5kUGFyYW1ldGVyc0ZvclJlYU5vUmVhUmVzdW1lbkVzdGFkbyh7XHJcbiAgICAgICAgdGFyZWEsXHJcbiAgICAgICAgcmVzcHVlc3Rhc1VBUHJpbmNpcGFsLFxyXG4gICAgICAgIHNldHRlcnM6IFtganNvbl9lbmN1ZXN0YSA9ICQzYCwgYGZlY2hhX21vZGlmX2VuY3Vlc3RhID0gY3VycmVudF90aW1lc3RhbXBgXSxcclxuICAgICAgICBwYXJhbXM6IFtvcGVyYXRpdm8sIGlkRW5jLCByZXNwdWVzdGFzVUFQcmluY2lwYWxdLFxyXG4gICAgICAgIGRlc3Rpbm86ICd0ZW0nXHJcbiAgICB9KVxyXG4gICAgcmV0dXJuIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KFxyXG4gICAgICAgIGB1cGRhdGUgdGVtXHJcbiAgICAgICAgICAgIHNldCAke3NldHRlcnMuam9pbignLCcpfVxyXG4gICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm89ICQxIGFuZCBlbmMgPSAkMlxyXG4gICAgICAgICAgICByZXR1cm5pbmcgJ29rJ2BcclxuICAgICAgICAsXHJcbiAgICAgICAgcGFyYW1zXHJcbiAgICApLmZldGNoVW5pcXVlUm93KCk7XHJcbn1cclxuXHJcbmFzeW5jIGZ1bmN0aW9uIHJlZ2lzdHJhclBhc2VUYWJsYShcclxuICAgIGNvbnRleHQ6IFByb2NlZHVyZUNvbnRleHQsXHJcbiAgICBvcGVyYXRpdm86IElkT3BlcmF0aXZvLFxyXG4gICAgaWRFbmM6IHN0cmluZyB8IG51bWJlcixcclxuICAgIHJlc3B1ZXN0YXNVQVByaW5jaXBhbDogYW55XHJcbikge1xyXG4gICAgdmFyIGJlID0gY29udGV4dC5iZTtcclxuICAgIHZhciBwcm9jZWR1cmVHdWFyZGFyID0gYmUucHJvY2VkdXJlLmNhc29fZ3VhcmRhcjtcclxuICAgIGxldCByZXN1bHRhZG8gPSBgaWQgZW5jICR7aWRFbmN9OiBgO1xyXG4gICAgbGV0IHBhcmFtX2d1YXJkYXIgPSB7IG9wZXJhdGl2bzogb3BlcmF0aXZvLCBpZF9jYXNvOiBpZEVuYywgZGF0b3NfY2FzbzogcmVzcHVlc3Rhc1VBUHJpbmNpcGFsIH07XHJcbiAgICBsZXQgc2F2ZXBvaW50TmFtZSA9IGBzcF9ndWFyZGFyXyR7aWRFbmN9YC5yZXBsYWNlKC9bXmEtekEtWjAtOV9dL2csICdfJyk7XHJcblxyXG4gICAgdHJ5IHtcclxuICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgU0FWRVBPSU5UICR7c2F2ZXBvaW50TmFtZX1gKS5leGVjdXRlKCk7XHJcbiAgICAgICAgcmVzdWx0YWRvICs9IGF3YWl0IHByb2NlZHVyZUd1YXJkYXIuY29yZUZ1bmN0aW9uKGNvbnRleHQsIHBhcmFtX2d1YXJkYXIpO1xyXG4gICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBSRUxFQVNFIFNBVkVQT0lOVCAke3NhdmVwb2ludE5hbWV9YCkuZXhlY3V0ZSgpO1xyXG4gICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFJPTExCQUNLIFRPIFNBVkVQT0lOVCAke3NhdmVwb2ludE5hbWV9YCkuZXhlY3V0ZSgpO1xyXG4gICAgICAgIHZhciBlcnJvciA9IGV4cGVjdGVkKGVycik7XHJcbiAgICAgICAgbGV0IGVyck1lc3NhZ2UgPSByZXN1bHRhZG8gKyBcImRtX2ZvcnBrcmFpel9kZXNjYXJnYXIuIFwiICsgZXJyb3IubWVzc2FnZTtcclxuICAgICAgICByZXN1bHRhZG8gPSBlcnJNZXNzYWdlO1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyTWVzc2FnZSwgZXJyb3IpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShcclxuICAgICAgICBgdXBkYXRlIHRlbVxyXG4gICAgICAgICAgICBzZXQgcGFzZV90YWJsYSA9ICQzXHJcbiAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2byA9ICQxIGFuZCBlbmMgPSAkMlxyXG4gICAgICAgICAgICByZXR1cm5pbmcgJ29rJ2AsXHJcbiAgICAgICAgW29wZXJhdGl2bywgaWRFbmMsIHJlc3VsdGFkb11cclxuICAgICkuZmV0Y2hVbmlxdWVSb3coKTtcclxufVxyXG5cclxudmFyIHNpbXVsYXJHdWFyZGFkb0RlRW5jdWVzdGFEZXNkZUFwcEVzY3JpdG9yaW8gPSBhc3luYyAoY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCwgb3BlcmF0aXZvOiBJZE9wZXJhdGl2bywgZW5jOiBJZEVuYywgdGFyZWE6IElkVGFyZWEsIGpzb25fZW5jdWVzdGE6IGFueSkgPT4ge1xyXG4gICAgdmFyIGJlID0gY29udGV4dC5iZTtcclxuICAgIGNvbnN0IFVBX1BSSU5DSVBBTCA9IChhd2FpdCBnZXRVQVByaW5jaXBhbChjb250ZXh0LmNsaWVudCwgb3BlcmF0aXZvKSkudW5pZGFkX2FuYWxpc2lzO1xyXG4gICAgcmV0dXJuIGF3YWl0IGJlLnByb2NlZHVyZS5kbV9mb3Jwa3JhaXpfZGVzY2FyZ2FyLmNvcmVGdW5jdGlvbihcclxuICAgICAgICBjb250ZXh0LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgb3BlcmF0aXZvOiBvcGVyYXRpdm8sXHJcbiAgICAgICAgICAgIHBlcnNpc3RlbnRlczoge1xyXG4gICAgICAgICAgICAgICAgcmVzcHVlc3Rhczoge1xyXG4gICAgICAgICAgICAgICAgICAgIFtVQV9QUklOQ0lQQUxdOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtlbmNdOiBqc29uX2VuY3Vlc3RhXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGluZm9ybWFjaW9uSGRyOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgW2VuY106IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZWE6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmVhXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICApXHJcbn1cclxuXHJcbnZhciBnZXRIZHJRdWVyeSA9IGZ1bmN0aW9uIGdldEhkclF1ZXJ5KHF1b3RlZENvbmRWaXY6IHN0cmluZywgY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCwgdW5pZGFkQW5hbGlzaXNQcmluY2lwYWw6IElkVW5pZGFkQW5hbGlzaXMsIHBlcm1pdGVHZW5lcmFyTXVlc3RyYTogYm9vbGVhbiwgaWRwZXI6c3RyaW5nKSB7XHJcbiAgICByZXR1cm4gYFxyXG4gICAgd2l0aCAke2NvbnRleHQuYmUuZGIucXVvdGVJZGVudCh1bmlkYWRBbmFsaXNpc1ByaW5jaXBhbCl9IGFzIFxyXG4gICAgICAgIChzZWxlY3QgdC5vcGVyYXRpdm8sIHQuZW5jLCB0Lmpzb25fZW5jdWVzdGEgYXMgcmVzcHVlc3RhcywgdC5yZXN1bWVuX2VzdGFkbyBhcyBcInJlc3VtZW5Fc3RhZG9cIiwgXHJcbiAgICAgICAgICAgIGpzb25iX2J1aWxkX29iamVjdChcclxuICAgICAgICAgICAgICAgICdkb21pbmlvJyAgICAgICAsIGRvbWluaW8gICAgICAgLFxyXG4gICAgICAgICAgICAgICAgJ25vbWNhbGxlJyAgICAgICwgbm9tY2FsbGUgICAgICAsXHJcbiAgICAgICAgICAgICAgICAnc2VjdG9yJyAgICAgICAgLCBzZWN0b3IgICAgICAgICxcclxuICAgICAgICAgICAgICAgICdlZGlmaWNpbycgICAgICAsIGVkaWZpY2lvICAgICAgLFxyXG4gICAgICAgICAgICAgICAgJ2VudHJhZGEnICAgICAgICwgZW50cmFkYSAgICAgICAsXHJcbiAgICAgICAgICAgICAgICAnbnJvY2F0YXN0cmFsJyAgLCBucm9jYXRhc3RyYWwgICxcclxuICAgICAgICAgICAgICAgICdwaXNvJyAgICAgICAgICAsIHBpc28gICAgICAgICAgLFxyXG4gICAgICAgICAgICAgICAgJ2RlcGFydGFtZW50bycgICwgZGVwYXJ0YW1lbnRvICAsXHJcbiAgICAgICAgICAgICAgICAnaGFiaXRhY2lvbicgICAgLCBoYWJpdGFjaW9uICAgICxcclxuICAgICAgICAgICAgICAgICdjYXNhJyAgICAgICAgICAsIGNhc2EgICAgICAgICAgLFxyXG4gICAgICAgICAgICAgICAgJ3ByaW9yaWRhZCcgICAgICwgcmVzZXJ2YSsxICAgICAsXHJcbiAgICAgICAgICAgICAgICAnb2JzZXJ2YWNpb25lcycgLCB0dC5jYXJnYV9vYnNlcnZhY2lvbmVzICxcclxuICAgICAgICAgICAgICAgICdjaXRhJyAgICAgICAgICAsIGNpdGEgLFxyXG4gICAgICAgICAgICAgICAgJ2NhcmdhJyAgICAgICAgICwgdC5hcmVhICAgICAgICAgXHJcbiAgICAgICAgICAgICkgYXMgdGVtLCB0LmFyZWEsXHJcbiAgICAgICAgICAgIC0tVE9ETzogR0VORVJBTElaQVJcclxuICAgICAgICAgICAganNvbmJfYnVpbGRfb2JqZWN0KFxyXG4gICAgICAgICAgICAgICAgJ3RhcmVhJywgdHQudGFyZWEsXHJcbiAgICAgICAgICAgICAgICAnZmVjaGFfYXNpZ25hY2lvbicsIGZlY2hhX2FzaWduYWNpb24sXHJcbiAgICAgICAgICAgICAgICAnYXNpZ25hZG8nLCBhc2lnbmFkbyxcclxuICAgICAgICAgICAgICAgICdtYWluX2Zvcm0nLCBtYWluX2Zvcm1cclxuICAgICAgICAgICAgKSBhcyB0YXJlYSxcclxuICAgICAgICAgICAgbWluKGZlY2hhX2FzaWduYWNpb24pIGFzIGZlY2hhX2FzaWduYWNpb25cclxuICAgICAgICAgICAgZnJvbSB0ZW0gdCBsZWZ0IGpvaW4gdGFyZWFzX3RlbSB0dCBvbiAodC5vcGVyYXRpdm8gPSB0dC5vcGVyYXRpdm8gYW5kIHQuZW5jID0gdHQuZW5jIGFuZCB0LnRhcmVhX2FjdHVhbCA9IHR0LnRhcmVhKVxyXG4gICAgICAgICAgICAgICAgICAgICAgIGxlZnQgam9pbiB0YXJlYXMgdGEgb24gdC50YXJlYV9hY3R1YWwgPSB0YS50YXJlYVxyXG4gICAgICAgICAgICB3aGVyZSB0LmhhYmlsaXRhZGEgYW5kICR7cXVvdGVkQ29uZFZpdn1cclxuICAgICAgICAgICAgZ3JvdXAgYnkgdC5vcGVyYXRpdm8sIHQuZW5jLCB0Lmpzb25fZW5jdWVzdGEsIHQucmVzdW1lbl9lc3RhZG8sIGRvbWluaW8sIG5vbWNhbGxlLHNlY3RvcixlZGlmaWNpbywgZW50cmFkYSwgbnJvY2F0YXN0cmFsLCBwaXNvLGRlcGFydGFtZW50byxoYWJpdGFjaW9uLGNhc2EscmVzZXJ2YSx0dC5jYXJnYV9vYnNlcnZhY2lvbmVzLCBjaXRhLCB0LmFyZWEsIHR0LnRhcmVhLCBmZWNoYV9hc2lnbmFjaW9uLCBhc2lnbmFkbywgbWFpbl9mb3JtXHJcbiAgICAgICAgKVxyXG4gICAgICAgIHNlbGVjdCBqc29uYl9idWlsZF9vYmplY3QoXHJcbiAgICAgICAgICAgICAgICAke2NvbnRleHQuYmUuZGIucXVvdGVMaXRlcmFsKHVuaWRhZEFuYWxpc2lzUHJpbmNpcGFsKX0sICR7anNvbm8oXHJcbiAgICAgICAgYHNlbGVjdCBlbmMsIHJlc3B1ZXN0YXMsIGpzb25iX2J1aWxkX29iamVjdCgncmVzdW1lbkVzdGFkbycsXCJyZXN1bWVuRXN0YWRvXCIpIGFzIG90cmFzIGZyb20gJHtjb250ZXh0LmJlLmRiLnF1b3RlSWRlbnQodW5pZGFkQW5hbGlzaXNQcmluY2lwYWwpfWAsXHJcbiAgICAgICAgJ2VuYycsXHJcbiAgICAgICAgYG90cmFzIHx8IGNvYWxlc2NlKHJlc3B1ZXN0YXMsJ3t9Jzo6anNvbmIpYFxyXG4gICAgKX1cclxuICAgICAgICAgICAgKSBhcyByZXNwdWVzdGFzLFxyXG4gICAgICAgICAgICAke2pzb24oYFxyXG4gICAgICAgICAgICAgICAgc2VsZWN0IGEuYXJlYSBhcyBjYXJnYSwgb2JzZXJ2YWNpb25lc19oZHIgYXMgb2JzZXJ2YWNpb25lcywgbWluKGZlY2hhX2FzaWduYWNpb24pIGFzIGZlY2hhLCB0YS5yZWNlcGNpb25pc3RhLFxyXG4gICAgICAgICAgICAgICAgJHtwZXJtaXRlR2VuZXJhck11ZXN0cmEgPyBgY2FzZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB3aGVuIHRhLmFzaWduYWRvID0gJHtjb250ZXh0LmJlLmRiLnF1b3RlTGl0ZXJhbChpZHBlcil9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoZW4gdHJ1ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGZhbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgZW5kYDogYGZhbHNlYH0gYXMgcHVlZGVfYXV0b2dlbmVyYXJcclxuICAgICAgICAgICAgICAgICAgICBmcm9tICR7Y29udGV4dC5iZS5kYi5xdW90ZUlkZW50KHVuaWRhZEFuYWxpc2lzUHJpbmNpcGFsKX0gYXV4IGlubmVyIGpvaW4gYXJlYXMgYSB1c2luZyAob3BlcmF0aXZvLCBhcmVhKSBpbm5lciBqb2luIHRhcmVhc19hcmVhcyB0YSBvbiAoYS5hcmVhID0gdGEuYXJlYSBhbmQgYXV4LnRhcmVhLT4+J3RhcmVhJyA9IHRhLnRhcmVhKVxyXG4gICAgICAgICAgICAgICAgICAgIGdyb3VwIGJ5IGEuYXJlYSwgb2JzZXJ2YWNpb25lc19oZHIsIHRhLnJlY2VwY2lvbmlzdGEsIHB1ZWRlX2F1dG9nZW5lcmFyXHJcbiAgICAgICAgICAgICAgICAke3Blcm1pdGVHZW5lcmFyTXVlc3RyYSA/IGBcclxuICAgICAgICAgICAgICAgICAgICB1bmlvbiAtLSBlc3RlIHVuaW9uIHBlcm1pdGUgdmlzdWFsaXphciBhcmVhcyBhc2lnbmFkYXMgc2luIGVuY3Vlc3RhcyBnZW5lcmFkYXNcclxuICAgICAgICAgICAgICAgICAgICBzZWxlY3QgYXJlYSBhcyBjYXJnYSwgbnVsbCBhcyBvYnNlcnZhY2lvbmVzLCBudWxsIGFzIGZlY2hhLCByZWNlcGNpb25pc3RhLCB0cnVlIGFzIHB1ZWRlX2F1dG9nZW5lcmFyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gdGFyZWFzX2FyZWFzIHdoZXJlIGFzaWduYWRvID0gJHtjb250ZXh0LmJlLmRiLnF1b3RlTGl0ZXJhbChpZHBlcil9IGFuZCB0YXJlYSA9ICdlbmN1J2AgOiAnJ31cclxuICAgICAgICAgICAgICAgIGAsICdmZWNoYScpfSBhcyBjYXJnYXMsXHJcbiAgICAgICAgICAgICR7anNvbm8oXHJcbiAgICAgICAgYHNlbGVjdCBlbmMsIGpzb25iX2J1aWxkX29iamVjdCgndGVtJywgdGVtLCAndGFyZWEnLCB0YXJlYSkgYXMgb3RyYXMgZnJvbSAke2NvbnRleHQuYmUuZGIucXVvdGVJZGVudCh1bmlkYWRBbmFsaXNpc1ByaW5jaXBhbCl9YCxcclxuICAgICAgICAnZW5jJyxcclxuICAgICAgICBgb3RyYXMgfHwne30nOjpqc29uYmBcclxuICAgICl9XHJcbiAgICAgICAgICAgIGFzIFwiaW5mb3JtYWNpb25IZHJcIlxyXG5gXHJcbn1cclxuXHJcbmV4cG9ydCB2YXIgc2V0SGRyUXVlcnkgPSAobXlGdW46IChxdW90ZWRDb25kVml2OiBzdHJpbmcsIGNvbnRleHQ6IFByb2NlZHVyZUNvbnRleHQsIHVuaWRhZEFuYWxpc2lzUHJpbmNpcGFsOiBJZFVuaWRhZEFuYWxpc2lzLCBwZXJtaXRlR2VuZXJhck11ZXN0cmE6IGJvb2xlYW4sIGlkcGVyOiBzdHJpbmcpID0+IHN0cmluZykgPT4gZ2V0SGRyUXVlcnkgPSBteUZ1blxyXG5cclxuY29uc3QgZ2V0VUFQcmluY2lwYWwgPSBhc3luYyAoY2xpZW50OiBDbGllbnQsIG9wZXJhdGl2bzogSWRPcGVyYXRpdm8pID0+XHJcbiAgICAoYXdhaXQgY2xpZW50LnF1ZXJ5KFxyXG4gICAgICAgIGBzZWxlY3QgKlxyXG4gICAgICAgICAgICBmcm9tIHVuaWRhZF9hbmFsaXNpc1xyXG4gICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm89ICQxIGFuZCBwcmluY2lwYWxcclxuICAgICAgICBgXHJcbiAgICAgICAgLFxyXG4gICAgICAgIFtvcGVyYXRpdm9dXHJcbiAgICApLmZldGNoVW5pcXVlUm93KCkpLnJvd1xyXG5cclxudmFyIGZ1bmNpb25lc0Nvbm9jaWRhczogeyBbayBpbiBzdHJpbmddOiBib29sZWFuIH0gPSB7fVxyXG5cclxudmFyIGNvbXBpbGVyID0gbmV3IEV4cHJlc2lvblBhcnNlci5Db21waWxlcih7XHJcbiAgICBsYW5ndWFnZTogJ2pzJyxcclxuICAgIHZhcldyYXBwZXI6ICh2YXJfbmFtZTogc3RyaW5nKSA9PiBgaGVscGVycy5udWxsMnplcm8odmFsb3Jlcy4ke3Zhcl9uYW1lfSlgLFxyXG4gICAgZnVuV3JhcHBlcjogKGZ1bmN0aW9uTmFtZTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgaWYgKCFmdW5jaW9uZXNDb25vY2lkYXNbZnVuY3Rpb25OYW1lXSkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhmdW5jdGlvbk5hbWUpXHJcbiAgICAgICAgICAgIGZ1bmNpb25lc0Nvbm9jaWRhc1tmdW5jdGlvbk5hbWVdID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGBoZWxwZXJzLmZ1bnMuJHtmdW5jdGlvbk5hbWV9YFxyXG4gICAgfVxyXG59KVxyXG5cclxudHlwZSBDYXNpbGxlcm9EZUFjYSA9IHtcclxuICAgIGNoaWxkczogQ2FzaWxsZXJvRGVBY2FbXSxcclxuICAgIGRhdGE6IHtcclxuICAgICAgICBleHByZXNpb25faGFiaWxpdGFyOiBzdHJpbmdcclxuICAgICAgICBleHByZXNpb25faGFiaWxpdGFyX2pzOiBzdHJpbmdcclxuICAgICAgICBlc3BlY2lhbDogYW55XHJcbiAgICAgICAgZXhwcmVzaW9uX2F1dG9pbmdyZXNhcl9qczogc3RyaW5nXHJcbiAgICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNvbXBpbGFyRXhwcmVzaW9uKGV4cHJlc2lvbjogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gY29tcGlsZXIudG9Db2RlKEV4cHJlc2lvblBhcnNlci5wYXJzZShcclxuICAgICAgICBleHByZXNpb25cclxuICAgICAgICAgICAgLnJlcGxhY2UoL1xcYmlzIGRpc3RpbmN0IGZyb21cXGIvZ2ksICcgPD4gJylcclxuICAgICAgICAgICAgLnJlcGxhY2UoLyEhL2dpLCAnICcpXHJcbiAgICApKS5yZXBsYWNlKC9oZWxwZXJzXFwuZnVuc1xcLmJsYW5jb1xcKGhlbHBlcnMubnVsbDJ6ZXJvXFwoL2csICdoZWxwZXJzLmZ1bnMuYmxhbmNvKCgnKVxyXG4gICAgICAgIC5yZXBsYWNlKC9oZWxwZXJzXFwuZnVuc1xcLmluZm9ybWFkb1xcKGhlbHBlcnMubnVsbDJ6ZXJvXFwoL2csICdoZWxwZXJzLmZ1bnMuaW5mb3JtYWRvKCgnKTtcclxufVxyXG5cclxuZnVuY3Rpb24gY29tcGlsYXJFeHByZXNpb25lcyhjYXNpbGxlcm86IENhc2lsbGVyb0RlQWNhKSB7XHJcbiAgICBpZiAoIWNhc2lsbGVybykgeyByZXR1cm4gfVxyXG4gICAgaWYgKGNhc2lsbGVyby5kYXRhLmV4cHJlc2lvbl9oYWJpbGl0YXIpIHtcclxuICAgICAgICBjYXNpbGxlcm8uZGF0YS5leHByZXNpb25faGFiaWxpdGFyX2pzID0gY29tcGlsYXJFeHByZXNpb24oY2FzaWxsZXJvLmRhdGEuZXhwcmVzaW9uX2hhYmlsaXRhcik7XHJcbiAgICB9XHJcbiAgICBpZiAoY2FzaWxsZXJvLmRhdGEuZXNwZWNpYWw/LmF1dG9pbmcpIHtcclxuICAgICAgICB2YXIgcGFydGVzID0gY2FzaWxsZXJvLmRhdGEuZXNwZWNpYWw/LmF1dG9pbmcuc3BsaXQoJz0+Jyk7XHJcbiAgICAgICAgaWYgKHBhcnRlcy5sZW5ndGggPiAxKSB7XHJcbiAgICAgICAgICAgIHZhciBwcmVjb25kaWNpb24gPSBwYXJ0ZXNbMF07XHJcbiAgICAgICAgICAgIHZhciB2YWxvciA9IHBhcnRlcy5zbGljZSgxKS5qb2luKCc9PicpO1xyXG4gICAgICAgICAgICBjYXNpbGxlcm8uZGF0YS5leHByZXNpb25fYXV0b2luZ3Jlc2FyX2pzID0gYCgke2NvbXBpbGFyRXhwcmVzaW9uKHByZWNvbmRpY2lvbil9KT8oJHtjb21waWxhckV4cHJlc2lvbih2YWxvcil9KTpudWxsYDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjYXNpbGxlcm8uZGF0YS5leHByZXNpb25fYXV0b2luZ3Jlc2FyX2pzID0gY29tcGlsYXJFeHByZXNpb24ocGFydGVzWzBdKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBmb3IgKHZhciBjYXNpbGxlcm9JbnRlcm5vIG9mIGNhc2lsbGVyby5jaGlsZHMpIGNvbXBpbGFyRXhwcmVzaW9uZXMoY2FzaWxsZXJvSW50ZXJubyk7XHJcbn1cclxuXHJcbmNvbnN0IGdlbmVyYXJFbmN1ZXN0YVRlbSA9IGFzeW5jIChjb250ZXh0OiBQcm9jZWR1cmVDb250ZXh0LCBvcGVyYXRpdm86IElkT3BlcmF0aXZvLCBpZEVuYzogSWRFbmMsIGFyZWE6IG51bWJlciwgZG9taW5pbzogbnVtYmVyLCB0YXJlYV9hY3R1YWw6IElkVGFyZWEpID0+IHtcclxuICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICBJTlNFUlQgaW50byB0ZW0gKG9wZXJhdGl2bywgZW5jLCBhcmVhLCBkb21pbmlvLCBoYWJpbGl0YWRhLCB0YXJlYV9hY3R1YWwpIHZhbHVlcyAoJDEsICQyLCAkMywgJDQsICQ1LCAkNilgLFxyXG4gICAgICAgIFtvcGVyYXRpdm8sIGlkRW5jLCBhcmVhLCBkb21pbmlvLCB0cnVlLCB0YXJlYV9hY3R1YWxdKS5leGVjdXRlKCk7XHJcbn1cclxuXHJcbmNvbnN0IGdlbmVyYXJUYXJlYXNUZW1GYWx0YW50ZXMgPSBhc3luYyAoY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCwgb3BlcmF0aXZvOiBJZE9wZXJhdGl2bykgPT4ge1xyXG4gICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgIGluc2VydCBpbnRvIHRhcmVhc190ZW0gKG9wZXJhdGl2bywgZW5jLCB0YXJlYSlcclxuICAgICAgICAgICAgc2VsZWN0IHRhLm9wZXJhdGl2bywgdGEuZW5jLCB0YS50YXJlYVxyXG4gICAgICAgICAgICBmcm9tIChzZWxlY3QgdGEuKiwgdC5lbmMsdC5hcmVhIGZyb20gdGFyZWFzIHRhLCB0ZW0gdCB3aGVyZSB0YS5vcGVyYXRpdm89dC5vcGVyYXRpdm8pIHRhIFxyXG4gICAgICAgICAgICB3aGVyZSB0YS5vcGVyYXRpdm8gPSAkMSBcclxuICAgICAgICAgICAgICAgIGFuZCBub3QgKHRhLm9wZXJhdGl2bywgdGEuZW5jLCB0YS50YXJlYSkgaW4gKHNlbGVjdCBvcGVyYXRpdm8sIGVuYywgdGFyZWEgZnJvbSB0YXJlYXNfdGVtKVxyXG4gICAgICAgICAgICBvcmRlciBieSAxLDMsMjtcclxuICAgIGAsIFtvcGVyYXRpdm9dKS5leGVjdXRlKCk7XHJcbn1cclxuXHJcbmNvbnN0IGJ1c2NhckVuY3Vlc3RhRW5UZW0gPSBhc3luYyAoY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCwgcGFyYW1zOiBDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzPGFueT4pID0+IHtcclxuICAgIHRyeSB7XHJcbiAgICAgICAgdmFyIHJlc3VsdCA9IGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgc2VsZWN0ICpcclxuICAgICAgICAgICAgICAgIGZyb20gdGVtXHJcbiAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm8gPSAkMSBhbmQgZW5jID0gJDIgLS1wayB2ZXJpZmljYWRhXHJcbiAgICAgICAgYCwgW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy5lbmNdKS5mZXRjaFVuaXF1ZVJvdygpO1xyXG4gICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgdGhyb3cgRXJyb3IoYE5vIHNlIGVuY29udHLDsyBsYSBlbmN1ZXN0YSAke3BhcmFtcy5lbmN9IHBhcmEgZWwgb3BlcmF0aXZvICR7cGFyYW1zLm9wZXJhdGl2b30uICR7ZXhwZWN0ZWQoZXJyKS5tZXNzYWdlfWApXHJcbiAgICB9XHJcbiAgICByZXR1cm4geyBjYXNvVGVtOiByZXN1bHQucm93IH07XHJcbn1cclxuXHJcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwYXNhckVuY3Vlc3Rhc0FQcm9pZShjbGllbnQ6IENsaWVudCkge1xyXG4gICAgbGV0IHBhcmFtZXRyb3MgPSAoYXdhaXQgY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIHNlbGVjdCAqIGZyb20gcGFyYW1ldHJvcyB3aGVyZSB1bmljb19yZWdpc3Ryb2AsXHJcbiAgICAgICAgW10pLmZldGNoVW5pcXVlUm93KCkpLnJvdztcclxuICAgIHZhciBzZWxlY3QgPSBgc2VsZWN0IHQub3BlcmF0aXZvLCB0LmVuYywgdC50YXJlYV9hY3R1YWwsIHR0LnRzX2VudHJhZGFcclxuICAgICAgICBmcm9tIHRhcmVhc190ZW0gdHQgam9pbiB0ZW0gdCB1c2luZyAob3BlcmF0aXZvLGVuYylcclxuICAgICAgICB3aGVyZSB0dC5vcGVyYXRpdm89JDEgYW5kIHR0LnRhcmVhPSAkMiBhbmQgKCR7Z2V0RGlhc0FQYXNhclF1ZXJ5KCd0dCcpfSA8PSAwIG9yIGNvYWxlc2NlKHR0LmFkZWxhbnRhcixmYWxzZSkpIGFuZCB0dC50YXJlYSA9IHQudGFyZWFfYWN0dWFsXHJcbiAgICBgO1xyXG4gICAgYXdhaXQgY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICBVUERBVEUgdGFyZWFzX3RlbSB0dFxyXG4gICAgICAgICAgICBzZXQgZXN0YWRvID0gJ1YnXHJcbiAgICAgICAgICAgIGZyb20gKCR7c2VsZWN0fSkgYXV4XHJcbiAgICAgICAgICAgIHdoZXJlIHR0Lm9wZXJhdGl2byA9IGF1eC5vcGVyYXRpdm8gYW5kIHR0LmVuYyA9IGF1eC5lbmMgYW5kIHR0LnRhcmVhID0gJDNcclxuICAgICAgICAgICAgcmV0dXJuaW5nICpgLFxyXG4gICAgICAgIFtwYXJhbWV0cm9zLm9wZXJhdGl2bywgJ2ZpbmMnLCAnZmluYyddKVxyXG4gICAgICAgIC5mZXRjaEFsbCgpO1xyXG4gICAgLy9UT0RPIGFzaWduYXIgZW4gcHJvY2VzYW1pZW50b1xyXG4gICAgYXdhaXQgY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICBVUERBVEUgdGFyZWFzX3RlbSB0dFxyXG4gICAgICAgICAgICBzZXQgZXN0YWRvID0gJ0EnXHJcbiAgICAgICAgICAgIGZyb20gKCR7c2VsZWN0fSkgYXV4XHJcbiAgICAgICAgICAgIHdoZXJlIHR0Lm9wZXJhdGl2byA9IGF1eC5vcGVyYXRpdm8gYW5kIHR0LmVuYyA9IGF1eC5lbmMgYW5kIHR0LnRhcmVhID0gJDNcclxuICAgICAgICAgICAgcmV0dXJuaW5nICpgLFxyXG4gICAgICAgIFtwYXJhbWV0cm9zLm9wZXJhdGl2bywgJ2ZpbmMnLCAncHJvYyddKVxyXG4gICAgICAgIC5mZXRjaEFsbCgpO1xyXG4gICAgYXdhaXQgY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICB1cGRhdGUgdGVtIHRcclxuICAgICAgICAgICAgc2V0IHRhcmVhX2FjdHVhbCA9ICdwcm9jJ1xyXG4gICAgICAgICAgICBmcm9tICgke3NlbGVjdH0pIGF1eFxyXG4gICAgICAgICAgICB3aGVyZSB0Lm9wZXJhdGl2byA9IGF1eC5vcGVyYXRpdm8gYW5kIHQuZW5jID0gYXV4LmVuY1xyXG4gICAgICAgICAgICByZXR1cm5pbmcgKmAsXHJcbiAgICAgICAgW3BhcmFtZXRyb3Mub3BlcmF0aXZvLCAnZmluYyddKS5mZXRjaEFsbCgpO1xyXG4gICAgcmV0dXJuICdvayc7XHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBQcm9jZWR1cmVzRG1FbmN1OiBQcm9jZWR1cmVEZWZbXSA9IFtcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdvcGVyYXRpdm9fZXN0cnVjdHVyYV9jb21wbGV0YScsXHJcbiAgICAgICAgcGFyYW1ldGVyczogW1xyXG4gICAgICAgICAgICB7IG5hbWU6ICdvcGVyYXRpdm8nLCB0eXBlTmFtZTogJ3RleHQnLCByZWZlcmVuY2VzOiAnb3BlcmF0aXZvcycgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAnaWRwZXJfbG9ndWVhZG9fdGFibGV0JywgdHlwZU5hbWU6ICd0ZXh0JywgZGVmYXVsdFZhbHVlOm51bGwgfSxcclxuXHJcbiAgICAgICAgXSxcclxuICAgICAgICByZXN1bHRPazonZGVzcGxlZ2FyRm9ybXVsYXJpbycsXHJcbiAgICAgICAgdW5sb2dnZWQ6IHRydWUsIFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjphc3luYyBmdW5jdGlvbihjb250ZXh0OlByb2NlZHVyZUNvbnRleHQsIHBhcmFtZXRlcnM6Q29yZUZ1bmN0aW9uUGFyYW1ldGVyczx7b3BlcmF0aXZvOiBJZE9wZXJhdGl2bywgaWRwZXJfbG9ndWVhZG9fdGFibGV0OiBzdHJpbmd8bnVsbH0+KXtcclxuICAgICAgICAgICAgdmFyIGJlID0gY29udGV4dC5iZTtcclxuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KFxyXG4gICAgICAgICAgICAgICAgYHNlbGVjdCBjYXNpbGxlcm9zX2plcmFycXVpemFkb3MoJDEpIGFzIGZvcm11bGFyaW9zLCBcclxuICAgICAgICAgICAgICAgICAgICAke2pzb25vKGBzZWxlY3QgdW5pZGFkX2FuYWxpc2lzLCBwYWRyZSwgcGtfYWdyZWdhZGEsICd7fSc6Ompzb25iIGFzIGhpamFzIGZyb20gdW5pZGFkX2FuYWxpc2lzIHdoZXJlIG9wZXJhdGl2byA9ICQyYCwgJ3VuaWRhZF9hbmFsaXNpcycpfSBhcyB1bmlkYWRlc19hbmFsaXNpc1xyXG4gICAgICAgICAgICAgICAgYCxcclxuICAgICAgICAgICAgICAgIFtwYXJhbWV0ZXJzLm9wZXJhdGl2bywgcGFyYW1ldGVycy5vcGVyYXRpdm9dXHJcbiAgICAgICAgICAgICkuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgICAgICAgICAgbGlrZUFyKHJlc3VsdC5yb3cuZm9ybXVsYXJpb3MpLmZvckVhY2goZiA9PiBjb21waWxhckV4cHJlc2lvbmVzKGYpKTtcclxuICAgICAgICAgICAgLy8gSGVybWFub3Mgc29uIGxvcyBmb3JtdWxhcmlvcyBxdWUgZXN0w6FuIGltcGxhbnRhZG9zIGVuIG90cm8gZm9ybXVsYXJpbyBkZSBsYSBtaXNtYSBVQS4gUG9yIGVqZW1wbG8gZWwgQTEgZW4gZWwgUzFcclxuICAgICAgICAgICAgdmFyIHJlc3VsdEhlcm1hbm9zID0gYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG5zZWxlY3Qgby5pZF9jYXNpbGxlcm8gYXMgaWRfZm9ybXVsYXJpbywgby51bmlkYWRfYW5hbGlzaXMsICdCRl8nfHxvLmNhc2lsbGVybyBib3RvbiwgYmYuY2FzaWxsZXJvLCBiZi5wYWRyZSwgZnAuY2FzaWxsZXJvLCBmcC51bmlkYWRfYW5hbGlzaXNcclxuICBmcm9tIGNhc2lsbGVyb3MgbyBsZWZ0IGpvaW4gY2FzaWxsZXJvcyBiZlxyXG4gICAgb24gYmYudGlwb2M9J0JGJ1xyXG5cdGFuZCBiZi5jYXNpbGxlcm8gPSAnQkZfJ3x8by5jYXNpbGxlcm9cclxuXHRhbmQgYmYub3BlcmF0aXZvID0gby5vcGVyYXRpdm9cclxuXHRsZWZ0IGpvaW4gY2FzaWxsZXJvcyBmcFxyXG5cdCAgb24gZnAuaWRfY2FzaWxsZXJvID0gYmYucGFkcmVcclxuXHQgIGFuZCBmcC5vcGVyYXRpdm8gPSBiZi5vcGVyYXRpdm9cclxuICB3aGVyZSBvLnRpcG9jID0gJ0YnXHJcbiAgICBhbmQgby51bmlkYWRfYW5hbGlzaXMgPSBmcC51bmlkYWRfYW5hbGlzaXNcclxuXHRhbmQgby5vcGVyYXRpdm8gPSAkMWAsXHJcbiAgICAgICAgICAgICAgICBbcGFyYW1ldGVycy5vcGVyYXRpdm9dXHJcbiAgICAgICAgICAgICkuZmV0Y2hBbGwoKTtcclxuICAgICAgICAgICAgcmVzdWx0SGVybWFub3Mucm93cy5mb3JFYWNoKHJvdyA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQucm93LmZvcm11bGFyaW9zW3Jvdy5pZF9mb3JtdWxhcmlvXS5kYXRhLmhlcm1hbm8gPSB0cnVlO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICBmdW5jdGlvbiBjb21wbGV0YXJVQSh1YTogVW5pZGFkQW5hbGlzaXMsIGlkVWE6IElkVW5pZGFkQW5hbGlzaXMsIHVBczogeyBbayBpbiBJZFVuaWRhZEFuYWxpc2lzXTogVW5pZGFkQW5hbGlzaXMgfSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHVhLnBhZHJlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdUFzW3VhLnBhZHJlXS5oaWphc1tpZFVhXSA9IHVhO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB1YS5wcmluY2lwYWwgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGxpa2VBcihyZXN1bHQucm93LnVuaWRhZGVzX2FuYWxpc2lzKS5mb3JFYWNoKCh1YSwgaWRVYSkgPT5cclxuICAgICAgICAgICAgICAgIGNvbXBsZXRhclVBKHVhLCBpZFVhIGFzIElkVW5pZGFkQW5hbGlzaXMsIHJlc3VsdC5yb3cudW5pZGFkZXNfYW5hbGlzaXMpXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgICAgdmFyIHtcclxuICAgICAgICAgICAgICAgIGNvbl9yZWFfaG9nYXI6IGNvblJlYUhvZ2FyLFxyXG4gICAgICAgICAgICAgICAgY29uZmlnX3NvcnRlbzogY29uZmlnU29ydGVvLFxyXG4gICAgICAgICAgICAgICAgaGFiaWxpdGFjaW9uX2JvdG9uX2Zvcm11bGFyaW86IGhhYmlsaXRhY2lvbkJvdG9uRm9ybXVsYXJpbyxcclxuICAgICAgICAgICAgfSA9IChhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICBzZWxlY3QgY29uZmlnX3NvcnRlbywgY29uX3JlYV9ob2dhciwgaGFiaWxpdGFjaW9uX2JvdG9uX2Zvcm11bGFyaW8sIHBlcm1pdGVfZ2VuZXJhcl9tdWVzdHJhIFxyXG4gICAgICAgICAgICAgICAgICAgIGZyb20gb3BlcmF0aXZvcyBcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm8gPSAkMVxyXG4gICAgICAgICAgICBgLCBbcGFyYW1ldGVycy5vcGVyYXRpdm9dKS5mZXRjaFVuaXF1ZVJvdygpKS5yb3c7XHJcblxyXG4gICAgICAgICAgICB2YXIgc2VtYW5hcyA9IChhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShcclxuICAgICAgICAgICAgICAgIGBzZWxlY3QgIFxyXG4gICAgICAgICAgICAgICAgICAgICR7anNvbm8oYHNlbGVjdCAqIGZyb20gc2VtYW5hcyB3aGVyZSBvcGVyYXRpdm8gPSAkMWAsICdzZW1hbmEnKX0gYXMgc2VtYW5hc1xyXG4gICAgICAgICAgICAgICAgYCxcclxuICAgICAgICAgICAgICAgIFtwYXJhbWV0ZXJzLm9wZXJhdGl2b11cclxuICAgICAgICAgICAgKS5mZXRjaFVuaXF1ZVJvdygpKS5yb3cuc2VtYW5hcztcclxuICAgICAgICAgICAgbGV0IGNvbXBpbGFyRXhwcmVzaW9uZXNEb21pbmlvcyA9IChleHByZXNpb25lc0RvbWluaW86IGFueSkgPT5cclxuICAgICAgICAgICAgICAgIGxpa2VBcihleHByZXNpb25lc0RvbWluaW8pXHJcbiAgICAgICAgICAgICAgICAgICAgLm1hcCgoZXhwciwgZG9taW5pbykgPT4gKHsgZG9taW5pbywgZXhwcjogY29tcGlsYXJFeHByZXNpb24oZXhwci5leHByKSB9KSlcclxuICAgICAgICAgICAgICAgICAgICAucGxhaW4oKTtcclxuICAgICAgICAgICAgaWYgKGNvbmZpZ1NvcnRlbykge1xyXG4gICAgICAgICAgICAgICAgbGlrZUFyKGNvbmZpZ1NvcnRlbykuZm9yRWFjaCgoY29uZmlnU29ydGVvRm9ybXVsYXJpbykgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW8uZXhwcl9pbmNvbXBsZXRpdHVkX2pzID0gY29tcGlsYXJFeHByZXNpb25lc0RvbWluaW9zKGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW8uZXhwcl9pbmNvbXBsZXRpdHVkKVxyXG4gICAgICAgICAgICAgICAgICAgIGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW8uZmlsdHJvX2pzID0gY29tcGlsYXJFeHByZXNpb25lc0RvbWluaW9zKGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW8uZmlsdHJvKVxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoaGFiaWxpdGFjaW9uQm90b25Gb3JtdWxhcmlvKSB7XHJcbiAgICAgICAgICAgICAgICBsaWtlQXIoaGFiaWxpdGFjaW9uQm90b25Gb3JtdWxhcmlvKS5mb3JFYWNoKChmb3JtKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9ybS5leHByX2hhYmlsaXRhcl9ib3Rvbl9qcyA9IGNvbXBpbGFyRXhwcmVzaW9uKGZvcm0uZXhwcl9oYWJpbGl0YXJfYm90b24pXHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciBkZWZhdWx0VGFyZWEgPSBhd2FpdCBnZXREZWZhdWx0VGFyZWEoY29udGV4dCwgcGFyYW1ldGVycy5vcGVyYXRpdm8pO1xyXG4gICAgICAgICAgICB2YXIgZGVmYXVsdEluZm9ybWFjaW9uSGRyID0gKGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KFxyXG4gICAgICAgICAgICAgICAgYHNlbGVjdCAgXHJcbiAgICAgICAgICAgICAgICAgICAganNvbmJfYnVpbGRfb2JqZWN0KFxyXG4gICAgICAgICAgICAgICAgICAgICdkb21pbmlvJyAgICAgICAsICR7Y29udGV4dC5iZS5kYi5xdW90ZUxpdGVyYWwoREVGQVVMVF9ET01JTklPKX0sXHJcbiAgICAgICAgICAgICAgICAgICAgJ25vbWNhbGxlJyAgICAgICwgbnVsbCAgICAgICAgICAsXHJcbiAgICAgICAgICAgICAgICAgICAgJ3NlY3RvcicgICAgICAgICwgbnVsbCAgICAgICAgICAsXHJcbiAgICAgICAgICAgICAgICAgICAgJ2VkaWZpY2lvJyAgICAgICwgbnVsbCAgICAgICAgICAsXHJcbiAgICAgICAgICAgICAgICAgICAgJ2VudHJhZGEnICAgICAgICwgbnVsbCAgICAgICAgICAsXHJcbiAgICAgICAgICAgICAgICAgICAgJ25yb2NhdGFzdHJhbCcgICwgbnVsbCAgICAgICAgICAsXHJcbiAgICAgICAgICAgICAgICAgICAgJ3Bpc28nICAgICAgICAgICwgbnVsbCAgICAgICAgICAsXHJcbiAgICAgICAgICAgICAgICAgICAgJ2RlcGFydGFtZW50bycgICwgbnVsbCAgICAgICAgICAsXHJcbiAgICAgICAgICAgICAgICAgICAgJ2hhYml0YWNpb24nICAgICwgbnVsbCAgICAgICAgICAsXHJcbiAgICAgICAgICAgICAgICAgICAgJ2Nhc2EnICAgICAgICAgICwgbnVsbCAgICAgICAgICAsXHJcbiAgICAgICAgICAgICAgICAgICAgJ3ByaW9yaWRhZCcgICAgICwgbnVsbCAgICAgICAgICAsXHJcbiAgICAgICAgICAgICAgICAgICAgJ29ic2VydmFjaW9uZXMnICwgbnVsbCAgICAgICAgICAsXHJcbiAgICAgICAgICAgICAgICAgICAgJ2NpdGEnICAgICAgICAgICwgbnVsbCAgICAgICAgICAsXHJcbiAgICAgICAgICAgICAgICAgICAgJ2NhcmdhJyAgICAgICAgICwgbnVsbCAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgKSBhcyB0ZW0sXHJcbiAgICAgICAgICAgICAgICBqc29uYl9idWlsZF9vYmplY3QoXHJcbiAgICAgICAgICAgICAgICAgICAgJ3RhcmVhJywgJHtjb250ZXh0LmJlLmRiLnF1b3RlTGl0ZXJhbChkZWZhdWx0VGFyZWEudGFyZWEpfSxcclxuICAgICAgICAgICAgICAgICAgICAnZmVjaGFfYXNpZ25hY2lvbicsIG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgJ2FzaWduYWRvJywgJHtjb250ZXh0LmJlLmRiLnF1b3RlTGl0ZXJhbChwYXJhbWV0ZXJzLmlkcGVyX2xvZ3VlYWRvX3RhYmxldCB8fCBjb250ZXh0LnVzZXIuaWRwZXIpfSxcclxuICAgICAgICAgICAgICAgICAgICAnbWFpbl9mb3JtJywgJHtjb250ZXh0LmJlLmRiLnF1b3RlTGl0ZXJhbChkZWZhdWx0VGFyZWEubWFpbl9mb3JtKX1cclxuICAgICAgICAgICAgICAgICkgYXMgdGFyZWFcclxuICAgICAgICAgICAgICAgIGAsXHJcbiAgICAgICAgICAgICAgICBbXVxyXG4gICAgICAgICAgICApLmZldGNoVW5pcXVlUm93KCkpLnJvdztcclxuICAgICAgICAgICAgdmFyIHsgdW5pZGFkX2FuYWxpc2lzLCBwa19hZ3JlZ2FkYSB9ID0gKGF3YWl0IGdldFVBUHJpbmNpcGFsKGNvbnRleHQuY2xpZW50LCBwYXJhbWV0ZXJzLm9wZXJhdGl2bykpO1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgdGltZXN0YW1wOiBiZS5jYWNoZXMudGltZXN0YW1wRXN0cnVjdHVyYSxcclxuICAgICAgICAgICAgICAgIC4uLnJlc3VsdC5yb3csXHJcbiAgICAgICAgICAgICAgICBvcGVyYXRpdm86IHBhcmFtZXRlcnMub3BlcmF0aXZvLFxyXG4gICAgICAgICAgICAgICAgY29uUmVhSG9nYXIsXHJcbiAgICAgICAgICAgICAgICBjb25maWdTb3J0ZW8sXHJcbiAgICAgICAgICAgICAgICBoYWJpbGl0YWNpb25Cb3RvbkZvcm11bGFyaW8sXHJcbiAgICAgICAgICAgICAgICBub1JlYXM6IGJlLmNhY2hlcy50YWJsZUNvbnRlbnQubm9fcmVhLFxyXG4gICAgICAgICAgICAgICAgbm9SZWFzU3VwOiBiZS5jYWNoZXMudGFibGVDb250ZW50Lm5vX3JlYV9zdXAsXHJcbiAgICAgICAgICAgICAgICBkZWZhdWx0SW5mb3JtYWNpb25IZHIsXHJcbiAgICAgICAgICAgICAgICB1YVBwYWw6IHVuaWRhZF9hbmFsaXNpcyxcclxuICAgICAgICAgICAgICAgIHNlbWFuYXMsXHJcbiAgICAgICAgICAgICAgICBwa0FncmVnYWRhVWFQcGFsOiBwa19hZ3JlZ2FkYVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnZ2VuZXJhcl9mb3JtdWxhcmlvcycsXHJcbiAgICAgICAgcGFyYW1ldGVyczogW1xyXG4gICAgICAgICAgICB7IG5hbWU6ICdhbm5pbycsIHR5cGVOYW1lOiAnaW50ZWdlcicsIHJlZmVyZW5jZXM6ICdhbm5pbycgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAnbWVzJywgdHlwZU5hbWU6ICdpbnRlZ2VyJywgcmVmZXJlbmNlczogJ21lcycgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAnbG90ZScsIHR5cGVOYW1lOiAnaW50ZWdlcicsIHJlZmVyZW5jZXM6ICdsb3RlcycgfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjphc3luYyBmdW5jdGlvbihjb250ZXh0OlByb2NlZHVyZUNvbnRleHQsIHBhcmFtZXRlcnM6Q29yZUZ1bmN0aW9uUGFyYW1ldGVyczx7YW5uaW86bnVtYmVyLCBtZXM6bnVtYmVyLCBsb3RlOm51bWJlcn0+KXtcclxuICAgICAgICAgICAgdmFyIGJlPWNvbnRleHQuYmU7XHJcbiAgICAgICAgICAgIGNvbnN0IE9QRVJBVElWTyA9IGF3YWl0IGdldE9wZXJhdGl2b0FjdHVhbChjb250ZXh0KTtcclxuICAgICAgICAgICAgbGV0IHJvdzogVW5pZGFkQW5hbGlzaXMgPSBhd2FpdCBnZXRVQVByaW5jaXBhbChjb250ZXh0LmNsaWVudCwgT1BFUkFUSVZPKTtcclxuICAgICAgICAgICAgbGV0IHJlc3VsdFByZWd1bnRhcyA9IGF3YWl0IGJlLnByb2NlZHVyZS5wcmVndW50YXNfdWFfdHJhZXIuY29yZUZ1bmN0aW9uKGNvbnRleHQsIHJvdylcclxuICAgICAgICAgICAgdmFyIGNvbnRlbmVkb3JWYWNpbzogeyBba2V5OiBzdHJpbmddOiBhbnkgfSA9IHt9O1xyXG4gICAgICAgICAgICByZXN1bHRQcmVndW50YXMuZm9yRWFjaChmdW5jdGlvbiAoZGVmUHJlZ3VudGE6YW55KSB7XHJcbiAgICAgICAgICAgICAgICBjb250ZW5lZG9yVmFjaW9bZGVmUHJlZ3VudGEudmFyX25hbWVdID0gZGVmUHJlZ3VudGEudW5pZGFkX2FuYWxpc2lzID8gW10gOiBudWxsO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgY29udGVuZWRvclZhY2lvLmFubmlvID0gcGFyYW1ldGVycy5hbm5pbztcclxuICAgICAgICAgICAgY29udGVuZWRvclZhY2lvLm1lcyA9IHBhcmFtZXRlcnMubWVzO1xyXG4gICAgICAgICAgICBjb250ZW5lZG9yVmFjaW8ubG90ZSA9IHBhcmFtZXRlcnMubG90ZTtcclxuXHJcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShcclxuICAgICAgICAgICAgICAgIGBzZWxlY3QgZGViZV9oYWJlci5pZF9jYXNvLCBzIGFzIGlkXHJcbiAgICAgICAgICAgICAgICAgICAgZnJvbSAoc2VsZWN0IGxvdGUsIGFybWFyX2lkKGFubmlvLCBtZXMsIGxvdGUsIHMpIGFzIGlkX2Nhc28sIHNcclxuICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSAoc2VsZWN0IGFubmlvLG1lcyxsb3RlLCBjYW50X2N1ZXMgZnJvbSBsb3RlcyB3aGVyZSAoYW5uaW8sbWVzLGxvdGUpPSgkMiwkMywkNCkpIHIsIGxhdGVyYWwgZ2VuZXJhdGVfc2VyaWVzKDEsY2FudF9jdWVzKSBzXHJcbiAgICAgICAgICAgICAgICAgICAgKSBkZWJlX2hhYmVyIGxlZnQgam9pbiBkZWZnZW4gaGF5IG9uIGhheS5pZF9jYXNvID0gZGViZV9oYWJlci5pZF9jYXNvIGFuZCBoYXkub3BlcmF0aXZvPSQxXHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgaGF5LmlkX2Nhc28gaXMgbnVsbGAsXHJcbiAgICAgICAgICAgICAgICBbT1BFUkFUSVZPLCBwYXJhbWV0ZXJzLmFubmlvLCBwYXJhbWV0ZXJzLm1lcywgcGFyYW1ldGVycy5sb3RlXVxyXG4gICAgICAgICAgICApLmZldGNoQWxsKCk7XHJcbiAgICAgICAgICAgIHZhciBwYXJhbXMgPSB7IG9wZXJhdGl2bzogT1BFUkFUSVZPIH07XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgKHJlc3VsdC5yb3dDb3VudCB8fCAwKTsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCBiZS5wcm9jZWR1cmUuY2Fzb19ndWFyZGFyLmNvcmVGdW5jdGlvbihcclxuICAgICAgICAgICAgICAgICAgICBjb250ZXh0LFxyXG4gICAgICAgICAgICAgICAgICAgIGNoYW5naW5nKHBhcmFtcywgeyBpZF9jYXNvOiByZXN1bHQucm93c1tpXS5pZF9jYXNvLCBkYXRvc19jYXNvOiBjaGFuZ2luZyhjb250ZW5lZG9yVmFjaW8sIHsgaWQ6IHJlc3VsdC5yb3dzW2ldLmlkIH0pIH0pXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHsgYWdyZWdhZGFzOiByZXN1bHQucm93Q291bnQgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAndXBsb2FkX2ZpbGUnLFxyXG4gICAgICAgIHByb2dyZXNzOiB0cnVlLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6IFtcclxuICAgICAgICAgICAgeyBuYW1lOiAnaWRfYWRqdW50bycsIHR5cGVOYW1lOiAnaW50ZWdlcicgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAnbm9tYnJlJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgZmlsZXM6e2NvdW50OjF9LFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjpmdW5jdGlvbihjb250ZXh0OlByb2NlZHVyZUNvbnRleHQsIHBhcmFtZXRlcnM6Q29yZUZ1bmN0aW9uUGFyYW1ldGVyczx7aWRfYWRqdW50bz86bnVtYmVyLCBub21icmU/OnN0cmluZ30+LCBmaWxlcyl7XHJcbiAgICAgICAgICAgIGxldCBiZT1jb250ZXh0LmJlO1xyXG4gICAgICAgICAgICBsZXQgY2xpZW50PWNvbnRleHQuY2xpZW50O1xyXG4gICAgICAgICAgICBjb250ZXh0LmluZm9ybVByb2dyZXNzKHttZXNzYWdlOmJlLm1lc3NhZ2VzLmZpbGVVcGxvYWRlZH0pO1xyXG4gICAgICAgICAgICAvL0B0cy1pZ25vcmUgZXhpc3RlXHJcbiAgICAgICAgICAgIGxldCBmaWxlID0gZmlsZXNbMF1cclxuICAgICAgICAgICAgbGV0IGV4dCA9IFBhdGguZXh0bmFtZShmaWxlLnBhdGgpLnN1YnN0cigxKTtcclxuICAgICAgICAgICAgbGV0IG9yaWdpbmFsRmlsZW5hbWUgPSBmaWxlLm9yaWdpbmFsRmlsZW5hbWUuc2xpY2UoMCwgLShleHQubGVuZ3RoICsgMSkpO1xyXG4gICAgICAgICAgICBsZXQgZmlsZW5hbWUgPSBwYXJhbWV0ZXJzLm5vbWJyZSB8fCBvcmlnaW5hbEZpbGVuYW1lO1xyXG4gICAgICAgICAgICBsZXQgbmV3UGF0aCA9ICdsb2NhbC1hdHRhY2htZW50cy9maWxlLSc7XHJcbiAgICAgICAgICAgIHZhciBjcmVhdGVSZXNwb25zZSA9IGZ1bmN0aW9uIGNyZWF0ZVJlc3BvbnNlKGFkanVudG9Sb3c6YW55KSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgcmVzdWx0YWRvID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdMYSBzdWJpZGEgc2UgcmVhbGl6w7MgY29ycmVjdGFtZW50ZSAodXBkYXRlKScsXHJcbiAgICAgICAgICAgICAgICAgICAgbm9tYnJlOiBhZGp1bnRvUm93Lm5vbWJyZSxcclxuICAgICAgICAgICAgICAgICAgICBub21icmVfb3JpZ2luYWw6IGFkanVudG9Sb3cubm9tYnJlX29yaWdpbmFsLFxyXG4gICAgICAgICAgICAgICAgICAgIGV4dDogYWRqdW50b1Jvdy5leHQsXHJcbiAgICAgICAgICAgICAgICAgICAgZmVjaGE6IGFkanVudG9Sb3cuZmVjaGEsXHJcbiAgICAgICAgICAgICAgICAgICAgaG9yYTogYWRqdW50b1Jvdy5ob3JhLFxyXG4gICAgICAgICAgICAgICAgICAgIGlkX2FkanVudG86IGFkanVudG9Sb3cuaWRfYWRqdW50b1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdGFkb1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vQHRzLWlnbm9yZVxyXG4gICAgICAgICAgICB2YXIgbW92ZUZpbGUgPSBmdW5jdGlvbiBtb3ZlRmlsZShmaWxlLCBpZF9hZGp1bnRvLCBleHRlbnNpb24pIHtcclxuICAgICAgICAgICAgICAgIC8vQHRzLWlnbm9yZVxyXG4gICAgICAgICAgICAgICAgZnMubW92ZShmaWxlLnBhdGgsIG5ld1BhdGggKyBpZF9hZGp1bnRvICsgJy4nICsgZXh0ZW5zaW9uLCB7IG92ZXJ3cml0ZTogdHJ1ZSB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCkudGhlbihmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAocGFyYW1ldGVycy5pZF9hZGp1bnRvKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuY2xpZW50LnF1ZXJ5KGB1cGRhdGUgYWRqdW50b3Mgc2V0IG5vbWJyZT0gJDEsbm9tYnJlX29yaWdpbmFsID0gJDIsIGV4dCA9ICQzLCBydXRhID0gY29uY2F0KCdsb2NhbC1hdHRhY2htZW50cy9maWxlLScsJDQ6OnRleHQsJy4nLCQzOjp0ZXh0KSwgZmVjaGEgPSBub3coKSwgaG9yYSA9IGRhdGVfdHJ1bmMoJ3NlY29uZHMnLGN1cnJlbnRfdGltZXN0YW1wLWN1cnJlbnRfZGF0ZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgd2hlcmUgaWRfYWRqdW50byA9ICQ0IHJldHVybmluZyAqYCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2ZpbGVuYW1lLCBvcmlnaW5hbEZpbGVuYW1lLCBleHQsIHBhcmFtZXRlcnMuaWRfYWRqdW50b11cclxuICAgICAgICAgICAgICAgICAgICApLmZldGNoVW5pcXVlUm93KCkudGhlbihmdW5jdGlvbiAocmVzdWx0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVSZXNwb25zZShyZXN1bHQucm93KVxyXG4gICAgICAgICAgICAgICAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKHJlc3VsdGFkbykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBtb3ZlRmlsZShmaWxlLCByZXN1bHRhZG8uaWRfYWRqdW50bywgcmVzdWx0YWRvLmV4dCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHRhZG9cclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBpbnNlcnQgaW50byBhZGp1bnRvcyAobm9tYnJlLCBub21icmVfb3JpZ2luYWwsIGV4dCwgZmVjaGEsIGhvcmEpIHZhbHVlcyAoJDEsJDIsJDMsbm93KCksIGRhdGVfdHJ1bmMoJ3NlY29uZHMnLGN1cnJlbnRfdGltZXN0YW1wLWN1cnJlbnRfZGF0ZSkpIHJldHVybmluZyAqYCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2ZpbGVuYW1lLCBvcmlnaW5hbEZpbGVuYW1lLCBleHRdXHJcbiAgICAgICAgICAgICAgICAgICAgKS5mZXRjaFVuaXF1ZVJvdygpLnRoZW4oZnVuY3Rpb24gKHJlc3VsdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4dC5jbGllbnQucXVlcnkoYHVwZGF0ZSBhZGp1bnRvcyBzZXQgcnV0YSA9IGNvbmNhdCgnbG9jYWwtYXR0YWNobWVudHMvZmlsZS0nLGlkX2FkanVudG86OnRleHQsJy4nLGV4dClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoZXJlIGlkX2FkanVudG8gPSAkMSByZXR1cm5pbmcgKmAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVzdWx0LnJvdy5pZF9hZGp1bnRvXVxyXG4gICAgICAgICAgICAgICAgICAgICAgICApLmZldGNoVW5pcXVlUm93KCkudGhlbihmdW5jdGlvbiAocmVzdWx0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlUmVzcG9uc2UocmVzdWx0LnJvdylcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSkudGhlbihmdW5jdGlvbiAocmVzdWx0YWRvKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb3ZlRmlsZShmaWxlLCByZXN1bHRhZG8uaWRfYWRqdW50bywgcmVzdWx0YWRvLmV4dCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0YWRvXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KS5jYXRjaChmdW5jdGlvbiAoZXJyKSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBlcnI7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnY2Fzb19ndWFyZGFyJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOiBbXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ29wZXJhdGl2bycsIHR5cGVOYW1lOiAndGV4dCcsIHJlZmVyZW5jZXM6ICdvcGVyYXRpdm9zJyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICdpZF9jYXNvJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICdkYXRvc19jYXNvJywgdHlwZU5hbWU6ICdqc29uYicgfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIGRlZmluZWRJbjogJ2RtZW5jdScsXHJcbiAgICAgICAgLy9AdHMtaWdub3JlIGVzcGVjaWZpY28gZWwgdGlwbyBkZSBsb3MgcGFyw6FtZXRyb3NcclxuICAgICAgICBjb3JlRnVuY3Rpb246IGFzeW5jIGZ1bmN0aW9uIChjb250ZXh0OiBQcm9jZWR1cmVDb250ZXh0LCBwYXJhbWV0ZXJzOiB7XHJcbiAgICAgICAgICAgIG9wZXJhdGl2bzogSWRPcGVyYXRpdm8sXHJcbiAgICAgICAgICAgIGlkX2Nhc286IHN0cmluZyxcclxuICAgICAgICAgICAgZGF0b3NfY2FzbzogQW55T2JqZWN0XHJcbiAgICAgICAgfSwgbmV3Q2xpZW50OiBDbGllbnQpIHtcclxuICAgICAgICAgICAgdmFyIHsgdW5pZGFkX2FuYWxpc2lzLCBwa19hZ3JlZ2FkYSB9ID0gKGF3YWl0IGdldFVBUHJpbmNpcGFsKGNvbnRleHQuY2xpZW50LCBwYXJhbWV0ZXJzLm9wZXJhdGl2bykpO1xyXG4gICAgICAgICAgICB2YXIgY2xpZW50ID0gbmV3Q2xpZW50IHx8IGNvbnRleHQuY2xpZW50O1xyXG4gICAgICAgICAgICB2YXIgZGF0b3NfanNvbiA9IHBhcmFtZXRlcnMuZGF0b3NfY2FzbztcclxuICAgICAgICAgICAgdmFyIGJlID0gY29udGV4dC5iZTtcclxuICAgICAgICAgICAgdmFyIHRhYmxlU3RydWN0dXJlc19hcHA6IFRhYmxlRGVmaW5pdGlvbnMgPSBiZS50YWJsZVN0cnVjdHVyZXM7XHJcblxyXG4gICAgICAgICAgICB2YXIgc3RydWN0X2RtZW5jdSA9IGNyZWF0ZVN0cnVjdHVyZShjb250ZXh0LCB1bmlkYWRfYW5hbGlzaXMpO1xyXG4gICAgICAgICAgICBkYXRvc19qc29uWydvcGVyYXRpdm8nXSA9IHBhcmFtZXRlcnMub3BlcmF0aXZvO1xyXG5cclxuICAgICAgICAgICAgZGF0b3NfanNvbltwa19hZ3JlZ2FkYV0gPSBwYXJhbWV0ZXJzLmlkX2Nhc287XHJcbiAgICAgICAgICAgIGZ1bmN0aW9uIGNvbXBsZXRhcl91bHRfcGtfZW5fYXJyKHVsdF9wazphbnksIHVhX2FycjphbnlbXSkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGNvbl9wa19jb21wbGV0YSA9IHVhX2FycjtcclxuICAgICAgICAgICAgICAgIGlmICh1YV9hcnIgJiYgdWFfYXJyLmxlbmd0aCA+PSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uX3BrX2NvbXBsZXRhID0gY29uX3BrX2NvbXBsZXRhLm1hcCgodW5hX3VhLCBpKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHVuYV91YVt1bHRfcGtdID0gaSArIDFcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVuYV91YTtcclxuICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBjb25fcGtfY29tcGxldGFcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBmdW5jdGlvbiByZWNvcnJlcl9kYXRvc19hZ3JlZ2FuZG9fcGtzKGRhdG9zajogYW55KSB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBrZXlOYW1lIGluIGRhdG9zaikge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBkYXRvSyA9IGRhdG9zaltrZXlOYW1lXTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZGF0b0sgaW5zdGFuY2VvZiBBcnJheSAmJiBkYXRvSy5sZW5ndGggPj0gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGsgPSB0YWJsZVN0cnVjdHVyZXNfYXBwW2tleU5hbWVdKGNvbnRleHQpLnByaW1hcnlLZXk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB1bHRfcGsgPSBwa1tway5sZW5ndGggLSAxXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0b0sgPSBjb21wbGV0YXJfdWx0X3BrX2VuX2Fycih1bHRfcGssIGRhdG9LKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0b0suZm9yRWFjaCgoZWxlbUk6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbUkgPSByZWNvcnJlcl9kYXRvc19hZ3JlZ2FuZG9fcGtzKGVsZW1JKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChrZXlOYW1lLnN0YXJ0c1dpdGgoJyQnKSB8fCBrZXlOYW1lLnN0YXJ0c1dpdGgoJ18nKSB8fCBrZXlOYW1lID09ICdudWxsJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgZGF0b3NqW2tleU5hbWVdO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiBkYXRvc2o7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZGF0b3NfanNvbiA9IHJlY29ycmVyX2RhdG9zX2FncmVnYW5kb19wa3MoZGF0b3NfanNvbik7XHJcbiAgICAgICAgICAgIGRlbGV0ZSBkYXRvc19qc29uLmNvZFJlYTtcclxuICAgICAgICAgICAgZGVsZXRlIGRhdG9zX2pzb24uY29kTm9SZWE7XHJcbiAgICAgICAgICAgIGRlbGV0ZSBkYXRvc19qc29uLnJlc3VtZW5Fc3RhZG87XHJcbiAgICAgICAgICAgIGRlbGV0ZSBkYXRvc19qc29uLmNvZFJlYVN1cDtcclxuICAgICAgICAgICAgZGVsZXRlIGRhdG9zX2pzb24uY29kTm9SZWFTdXA7XHJcbiAgICAgICAgICAgIGRlbGV0ZSBkYXRvc19qc29uLnJlc3VtZW5Fc3RhZG9TdXA7XHJcblxyXG4gICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMoZGF0b3NfanNvbikubGVuZ3RoID4gMikge1xyXG4gICAgICAgICAgICAgICAgdmFyIHF1ZXJpZXMgPSBzcWxUb29scy5zdHJ1Y3R1cmVkRGF0YS5zcWxXcml0ZShkYXRvc19qc29uLCBzdHJ1Y3RfZG1lbmN1KTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBhd2FpdCBxdWVyaWVzLnJlZHVjZShmdW5jdGlvbiAocHJvbWlzZTogUHJvbWlzZTxhbnk+LCBxdWVyeTogc3RyaW5nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByb21pc2UudGhlbihmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjbGllbnQucXVlcnkocXVlcnkpLmV4ZWN1dGUoKS50aGVuKGZ1bmN0aW9uIChfcmVzdWx0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ29rJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9LCBQcm9taXNlLnJlc29sdmUoKSkudGhlbihmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwib2tcIjtcclxuICAgICAgICAgICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChlcnI6IEVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcImNhc29fZ3VhcmRhciBFTlRSQSBFTiBFTCBDQVRDSDogXCIsIGV4cGVjdGVkKGVycikpXHJcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgZXJyXHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuICd2YWNpbyc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjogJ2Nhc29fdHJhZXInLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6IFtcclxuICAgICAgICAgICAgLy97bmFtZTonZm9ybXVsYXJpbycgICAgLCAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZU5hbWU6J3RleHQnfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAnb3BlcmF0aXZvJywgcmVmZXJlbmNlczogJ29wZXJhdGl2b3MnLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ2lkX2Nhc28nLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgXSxcclxuICAgICAgICByZXN1bHRPazogJ2dvVG9FbmMnLFxyXG4gICAgICAgIGRlZmluZWRJbjogJ2RtZW5jdScsXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOiBhc3luYyBmdW5jdGlvbiAoY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCwgcGFyYW1ldGVyczogQ29yZUZ1bmN0aW9uUGFyYW1ldGVyczx7IG9wZXJhdGl2bzogSWRPcGVyYXRpdm8sIGlkX2Nhc286IHN0cmluZyB9Pikge1xyXG4gICAgICAgICAgICB2YXIgeyB1bmlkYWRfYW5hbGlzaXMsIHBrX2FncmVnYWRhIH0gPSAoYXdhaXQgZ2V0VUFQcmluY2lwYWwoY29udGV4dC5jbGllbnQsIHBhcmFtZXRlcnMub3BlcmF0aXZvKSk7XHJcbiAgICAgICAgICAgIHZhciBjbGllbnQgPSBjb250ZXh0LmNsaWVudDtcclxuICAgICAgICAgICAgdmFyIHN0cnVjdF9kbWVuY3UgPSBjcmVhdGVTdHJ1Y3R1cmUoY29udGV4dCwgdW5pZGFkX2FuYWxpc2lzKTtcclxuICAgICAgICAgICAgdmFyIHNxbCA9IHNxbFRvb2xzLnN0cnVjdHVyZWREYXRhLnNxbFJlYWQoeyBvcGVyYXRpdm86IHBhcmFtZXRlcnMub3BlcmF0aXZvLCBbcGtfYWdyZWdhZGFdOiBwYXJhbWV0ZXJzLmlkX2Nhc28gfSwgc3RydWN0X2RtZW5jdSk7XHJcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSBhd2FpdCBjbGllbnQucXVlcnkoc3FsKS5mZXRjaFVuaXF1ZVZhbHVlKCk7XHJcbiAgICAgICAgICAgIHZhciByZXNwb25zZSA9IHtcclxuICAgICAgICAgICAgICAgIG9wZXJhdGl2bzogcGFyYW1ldGVycy5vcGVyYXRpdm8sXHJcbiAgICAgICAgICAgICAgICBpZF9jYXNvOiBwYXJhbWV0ZXJzLmlkX2Nhc28sXHJcbiAgICAgICAgICAgICAgICBkYXRvc19jYXNvOiByZXN1bHQudmFsdWUsXHJcbiAgICAgICAgICAgICAgICAvL2Zvcm11bGFyaW86IGZvcm1QcmluY2lwYWwsXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjogJ2Nhc29fdHJhZXJfb19jcmVhcicsXHJcbiAgICAgICAgcGFyYW1ldGVyczogW1xyXG4gICAgICAgICAgICB7IG5hbWU6ICdvcGVyYXRpdm8nLCByZWZlcmVuY2VzOiAnb3BlcmF0aXZvcycsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAnaWRfY2FzbycsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIHJlc3VsdE9rOiAnZ29Ub0VuYycsXHJcbiAgICAgICAgLy8gYml0YWNvcmE6e2Fsd2F5czp0cnVlfSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246YXN5bmMgZnVuY3Rpb24oY29udGV4dDpQcm9jZWR1cmVDb250ZXh0LCBwYXJhbWV0ZXJzOkNvcmVGdW5jdGlvblBhcmFtZXRlcnM8e29wZXJhdGl2bzogSWRPcGVyYXRpdm8sIGlkX2Nhc286IHN0cmluZ30+KXtcclxuICAgICAgICAgICAgdmFyIGJlID0gY29udGV4dC5iZTtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSBhd2FpdCBiZS5wcm9jZWR1cmVbJ2Nhc29fdHJhZXInXS5jb3JlRnVuY3Rpb24oY29udGV4dCwgcGFyYW1ldGVycyk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgICAgICAgdmFyIGpzb24gPSBhd2FpdCBiZS5wcm9jZWR1cmVbJ2Nhc29fcHJlcGFyYXInXS5jb3JlRnVuY3Rpb24oY29udGV4dCwgcGFyYW1ldGVycyk7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCBiZS5wcm9jZWR1cmVbJ2Nhc29fZ3VhcmRhciddLmNvcmVGdW5jdGlvbihjb250ZXh0LCBjaGFuZ2luZyhwYXJhbWV0ZXJzLCB7IGRhdG9zX2Nhc286IGpzb24gfSkpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGF3YWl0IGJlLnByb2NlZHVyZVsnY2Fzb190cmFlciddLmNvcmVGdW5jdGlvbihjb250ZXh0LCBwYXJhbWV0ZXJzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAncGFzYXJfanNvbjJ1YScsXHJcbiAgICAgICAgcGFyYW1ldGVyczogW1xyXG4gICAgICAgIF0sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOmFzeW5jIGZ1bmN0aW9uKGNvbnRleHQ6UHJvY2VkdXJlQ29udGV4dCwgX3BhcmFtZXRlcnM6Q29yZUZ1bmN0aW9uUGFyYW1ldGVyczx7fT4pe1xyXG4gICAgICAgICAgICAvKiBHRU5FUkFMSVpBUjogKi9cclxuICAgICAgICAgICAgdmFyIGJlID0gY29udGV4dC5iZTtcclxuICAgICAgICAgICAgLyogRklOLUdFTkVSQUxJWkFSOiAqL1xyXG4gICAgICAgICAgICBjb25zdCBPUEVSQVRJVk8gPSBhd2FpdCBnZXRPcGVyYXRpdm9BY3R1YWwoY29udGV4dCk7XHJcbiAgICAgICAgICAgIHZhciB7IHVuaWRhZF9hbmFsaXNpcywgcGtfYWdyZWdhZGEgfSA9IChhd2FpdCBnZXRVQVByaW5jaXBhbChjb250ZXh0LmNsaWVudCwgT1BFUkFUSVZPKSk7XHJcbiAgICAgICAgICAgIGxldCByZXN1bHRNYWluID0gYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFNFTEVDVCAqIGZyb20gJHtiZS5kYi5xdW90ZUlkZW50KHVuaWRhZF9hbmFsaXNpcyl9IExJTUlUIDFgKS5mZXRjaEFsbCgpO1xyXG4gICAgICAgICAgICBpZiAoKHJlc3VsdE1haW4ucm93Q291bnQgfHwgMCkgPiAwKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnSEFZIERBVE9TJywgcmVzdWx0TWFpbi5yb3dzKVxyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdIQVkgREFUT1MuIE5PIFNFIFBVRURFIElOSUNJQVIgRUwgUEFTQUpFJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgbGV0IHJlc3VsdEpzb24gPSBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShcclxuICAgICAgICAgICAgICAgIGBTRUxFQ1Qgb3BlcmF0aXZvLCBlbmMgaWRfY2FzbywganNvbl9lbmN1ZXN0YSBkYXRvc19jYXNvIGZyb20gdGVtIFxyXG4gICAgICAgICAgICAgICAgICAgIFdIRVJFIG9wZXJhdGl2bz0kMSBhbmQgcmVzdW1lbl9lc3RhZG8gaXMgZGlzdGluY3QgZnJvbSAndmFjaW8nIGFuZCBqc29uX2VuY3Vlc3RhIGlzIG5vdCBudWxsIFxyXG4gICAgICAgICAgICAgICAgICAgIG9yZGVyIGJ5IGVuYyBgLFxyXG4gICAgICAgICAgICAgICAgW09QRVJBVElWT11cclxuICAgICAgICAgICAgKS5mZXRjaEFsbCgpO1xyXG4gICAgICAgICAgICB2YXIgcHJvY2VkdXJlR3VhcmRhciA9IGJlLnByb2NlZHVyZS5jYXNvX2d1YXJkYXI7XHJcbiAgICAgICAgICAgIGlmIChwcm9jZWR1cmVHdWFyZGFyLmRlZmluZWRJbiAhPSAnZG1lbmN1Jykge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdoYXkgcXVlIHNvYnJlZXNjcmliaXIgY2Fzb19ndWFyZGFyJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKHJlc3VsdEpzb24ucm93cy5tYXAoYXN5bmMgZnVuY3Rpb24gKHJvdykge1xyXG4gICAgICAgICAgICAgICAgbGV0IHJlc3VsdGFkbyA9IGBpZCBjYXNvICR7cm93LmlkX2Nhc299OiBgO1xyXG4gICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCBiZS5pblRyYW5zYWN0aW9uKG51bGwsIGFzeW5jIGZ1bmN0aW9uIChfY2xpZW50KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdGFkbyArPSBhd2FpdCBwcm9jZWR1cmVHdWFyZGFyLmNvcmVGdW5jdGlvbihjb250ZXh0LCByb3cpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgZXJyb3IgPSBleHBlY3RlZChlcnIpO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBlcnJNZXNzYWdlID0gcmVzdWx0YWRvICsgXCJqc29uMnVhIGVycm9yLiBcIiArIGVycm9yLm1lc3NhZ2U7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0YWRvID0gZXJyTWVzc2FnZVxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyTWVzc2FnZSwgZXJyb3IpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0YWRvLmluY2x1ZGVzKCdvaycpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHsgZGF0b3NfY2FzbywgaWRfY2Fzbywgb3BlcmF0aXZvIH0gPSBhd2FpdCBiZS5wcm9jZWR1cmUuY2Fzb190cmFlci5jb3JlRnVuY3Rpb24oY29udGV4dCwgeyBvcGVyYXRpdm86IHJvdy5vcGVyYXRpdm8sIGlkX2Nhc286IHJvdy5pZF9jYXNvIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHZlclF1ZUdyYWJvID0geyBkYXRvc19jYXNvLCBpZF9jYXNvLCBvcGVyYXRpdm8gfVxyXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc2NyZXBhbmNlcy5zaG93QW5kVGhyb3codmVyUXVlR3JhYm8sIHJvdylcclxuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcih2ZXJRdWVHcmFibywgcm93LCBleHBlY3RlZChlcnIpKVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHRhZG87XHJcbiAgICAgICAgICAgIH0pKS5jYXRjaChmdW5jdGlvbiAoZXJyKSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBlcnI7XHJcbiAgICAgICAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKHJlc3VsdCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjogJ2RtX2ZvcnBrcmFpel9jYXJnYXInLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6IFtcclxuICAgICAgICAgICAgeyBuYW1lOiAnb3BlcmF0aXZvJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICdwa19yYWl6X3ZhbHVlJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICd0YXJlYScsIHR5cGVOYW1lOiAndGV4dCcsIHJlZmVyZW5jZXM6IFwidGFyZWFzXCIgfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjphc3luYyBmdW5jdGlvbihjb250ZXh0OiBQcm9jZWR1cmVDb250ZXh0LCBwYXJhbWV0ZXJzOiBDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzPHtvcGVyYXRpdm86IElkT3BlcmF0aXZvLCBwa19yYWl6X3ZhbHVlOiBzdHJpbmcsIHRhcmVhOiBzdHJpbmd9Pil7XHJcbiAgICAgICAgICAgIGNvbnN0IGJlPWNvbnRleHQuYmU7XHJcbiAgICAgICAgICAgIGNvbnN0IHtvcGVyYXRpdm8scGtfcmFpel92YWx1ZSwgdGFyZWF9ID0gcGFyYW1ldGVycztcclxuICAgICAgICAgICAgY29uc3Qge3Blcm1pdGVfYm9ycmFyX3VhOiB0YXJlYVBlcm1pdGVCb3JyYXJVQSwgbWFpbl9mb3JtfSA9IChhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICBzZWxlY3QgcGVybWl0ZV9ib3JyYXJfdWEsIG1haW5fZm9ybSBcclxuICAgICAgICAgICAgICAgICAgICBmcm9tIHRhcmVhcyBcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm89ICQxIGFuZCB0YXJlYT0kMlxyXG4gICAgICAgICAgICBgLCBbb3BlcmF0aXZvLCB0YXJlYV0pLmZldGNoVW5pcXVlUm93KCkpLnJvdztcclxuICAgICAgICAgICAgY29uc3Qge3VuaWRhZF9hbmFsaXNpc30gPSAoYXdhaXQgZ2V0VUFQcmluY2lwYWwoY29udGV4dC5jbGllbnQsIHBhcmFtZXRlcnMub3BlcmF0aXZvKSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvbmR2aXY9IGAgdC5vcGVyYXRpdm89ICQxIGFuZCB0LmVuYyA9JDJgO1xyXG4gICAgICAgICAgICBjb25zdCB1c3VhcmlvUHVlZGVQcm9jZXNhckVuY3Vlc3RhcyA9IGNvbnRleHQucHVlZGU/LmVuY3Vlc3Rhcz8ucHJvY2VzYXIgfHwgZmFsc2U7XHJcbiAgICAgICAgICAgIGNvbnN0IHNvbG9MZWN0dXJhID0gKGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIHNlbGVjdCBjb3VudCgqKVxyXG4gICAgICAgICAgICAgICAgICAgIGZyb20gdGFyZWFzX3RlbSBqb2luIHRlbSB1c2luZyhvcGVyYXRpdm8sIGVuYykgam9pbiBlc3RhZG9zIHVzaW5nIChvcGVyYXRpdm8sIGVzdGFkbykgLS1wayBlc3RhZG8geSB0ZW0gdmVyaWZpY2FkYVxyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2bz0gJDEgYW5kIGVuYyA9ICQyIGFuZCAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhcmdhZG9fZG0gaXMgbm90IG51bGwgb3IgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vdCBwZXJtaXRlX2VkaXRhcl9lbmN1ZXN0YSBhbmQgYXNpZ25hZG8gPD4gJHtjb250ZXh0LmJlLmRiLnF1b3RlTGl0ZXJhbChjb250ZXh0LnVzZXIuaWRwZXIpfSBvclxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJlYSA9IHRhcmVhX2FjdHVhbCBhbmQgdGFyZWFfYWN0dWFsID0gJ3Byb2MnIGFuZCAkMyBvciBcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZWEgPSB0YXJlYV9hY3R1YWwgYW5kIHRhcmVhX2FjdHVhbCA9ICdwcm9jJyBhbmQgZXN0YWRvID0gJ1YnXHJcbiAgICAgICAgICAgIClgLCBbb3BlcmF0aXZvLCBwa19yYWl6X3ZhbHVlLCAhdXN1YXJpb1B1ZWRlUHJvY2VzYXJFbmN1ZXN0YXNdKS5mZXRjaFVuaXF1ZVZhbHVlKCkpLnZhbHVlID4gMDtcclxuICAgICAgICAgICAgdmFyIHBlcm1pdGVHZW5lcmFyTXVlc3RyYSA9IGF3YWl0IGdldE9wZXJhdGl2b1Blcm1pdGVHZW5lcmFyTXVlc3RyYShjb250ZXh0LmNsaWVudCwgb3BlcmF0aXZvKTtcclxuICAgICAgICAgICAgdmFyIHsgcm93IH0gPSBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShnZXRIZHJRdWVyeShjb25kdml2LCBjb250ZXh0LCB1bmlkYWRfYW5hbGlzaXMsIHBlcm1pdGVHZW5lcmFyTXVlc3RyYSwgY29udGV4dC51c2VyLmlkcGVyKSwgW29wZXJhdGl2bywgcGtfcmFpel92YWx1ZV0pLmZldGNoVW5pcXVlUm93KCk7XHJcbiAgICAgICAgICAgIHJvdy5pbmZvcm1hY2lvbkhkcltwa19yYWl6X3ZhbHVlXS50YXJlYSA9IHtcclxuICAgICAgICAgICAgICAgIHRhcmVhLFxyXG4gICAgICAgICAgICAgICAgbWFpbl9mb3JtXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAuLi5yb3csXHJcbiAgICAgICAgICAgICAgICBvcGVyYXRpdm8sXHJcbiAgICAgICAgICAgICAgICBzb2xvTGVjdHVyYSxcclxuICAgICAgICAgICAgICAgIGlkcGVyOiBjb250ZXh0LnVzZXIuaWRwZXIsXHJcbiAgICAgICAgICAgICAgICBjYXJnYXM6IGxpa2VBci5jcmVhdGVJbmRleChyb3cuY2FyZ2FzLm1hcCgoY2FyZ2E6IGFueSkgPT4gKHsgLi4uY2FyZ2EsIGZlY2hhOiBjYXJnYS5mZWNoYSA/IGRhdGUuaXNvKGNhcmdhLmZlY2hhKS50b0RteSgpIDogbnVsbCB9KSksICdjYXJnYScpLFxyXG4gICAgICAgICAgICAgICAgdGltZXN0YW1wRXN0cnVjdHVyYTogYmUuY2FjaGVzLnRpbWVzdGFtcEVzdHJ1Y3R1cmEsXHJcbiAgICAgICAgICAgICAgICBwZXJtaXRlQm9ycmFyRWxlbWVudG9zVUE6ICEhKHRhcmVhUGVybWl0ZUJvcnJhclVBICYmIGdldE1vZG9CeVBvbGljeShiZSkgPT09ICdHQUJJTkVURScgJiYgY29udGV4dC5wdWVkZT8uZW5jdWVzdGFzPy5ib3JyYXJfdWEpXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdkbV9mb3Jwa3JhaXpfZGVzY2FyZ2FyJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOiBbXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ29wZXJhdGl2bycsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAncGVyc2lzdGVudGVzJywgdHlwZU5hbWU6ICdqc29uYicgfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjogYXN5bmMgZnVuY3Rpb24gKGNvbnRleHQ6IFByb2NlZHVyZUNvbnRleHQsIHBhcmFtZXRlcnM6IENvcmVGdW5jdGlvblBhcmFtZXRlcnM8eyBvcGVyYXRpdm86IElkT3BlcmF0aXZvLCBwZXJzaXN0ZW50ZXM6IEFueU9iamVjdCB9Pikge1xyXG4gICAgICAgICAgICB2YXIgYmUgPSBjb250ZXh0LmJlO1xyXG4gICAgICAgICAgICB2YXIgeyBvcGVyYXRpdm8sIHBlcnNpc3RlbnRlcyB9ID0gcGFyYW1ldGVycztcclxuICAgICAgICAgICAgY29uc3QgVUFfUFJJTkNJUEFMID0gKGF3YWl0IGdldFVBUHJpbmNpcGFsKGNvbnRleHQuY2xpZW50LCBvcGVyYXRpdm8pKS51bmlkYWRfYW5hbGlzaXM7XHJcbiAgICAgICAgICAgIHZhciBwcm9jZWR1cmVHdWFyZGFyID0gYmUucHJvY2VkdXJlLmNhc29fZ3VhcmRhcjtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHJlc3B1ZXN0YXMgPSBwZXJzaXN0ZW50ZXMucmVzcHVlc3Rhc1tVQV9QUklOQ0lQQUxdIHx8IHt9O1xyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGlkRW5jIGluIHJlc3B1ZXN0YXMpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3B1ZXN0YXNVQVByaW5jaXBhbCA9IHJlc3B1ZXN0YXNbaWRFbmNdO1xyXG4gICAgICAgICAgICAgICAgaWYgKHJlc3B1ZXN0YXNVQVByaW5jaXBhbC5zMWExX29icyA9PSAnIXBydWViYSBkZSBlcnJvciBhbCBncmFiYXIhJykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRElPIFBSVUVCQSBERSBFUlJPUiBBTCBHUkFCQVInKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGF3YWl0IGd1YXJkYXJFbmN1ZXN0YUVuVGVtKGNvbnRleHQsIG9wZXJhdGl2bywgaWRFbmMsIHJlc3B1ZXN0YXNVQVByaW5jaXBhbCwgcGVyc2lzdGVudGVzLmluZm9ybWFjaW9uSGRyW2lkRW5jXS50YXJlYS50YXJlYSk7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCByZWdpc3RyYXJQYXNlVGFibGEoY29udGV4dCwgb3BlcmF0aXZvLCBpZEVuYywgcmVzcHVlc3Rhc1VBUHJpbmNpcGFsKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiAnb2snO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnZG1fc2luY3Jvbml6YXInLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6IFtcclxuICAgICAgICAgICAgeyBuYW1lOiAncGVyc2lzdGVudGVzJywgdHlwZU5hbWU6ICdqc29uYicgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAnbW9kb19kbScsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAnY2FtYmlhX21vZG9fZG0nLCB0eXBlTmFtZTogJ2Jvb2xlYW4nIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ2lkcGVyX2xvZ3VlYWRvX3RhYmxldCcsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIHVubG9nZ2VkOnRydWUsXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOmFzeW5jIGZ1bmN0aW9uKGNvbnRleHQ6IFByb2NlZHVyZUNvbnRleHQsIHBhcmFtZXRlcnM6IENvcmVGdW5jdGlvblBhcmFtZXRlcnM8e3BlcnNpc3RlbnRlczogQW55T2JqZWN0LCBtb2RvX2RtOiBzdHJpbmcsIGNhbWJpYV9tb2RvX2RtOiBib29sZWFuLCBpZHBlcl9sb2d1ZWFkb190YWJsZXQ6IHN0cmluZ30+KXtcclxuICAgICAgICAgICAgY29uc3QgT1BFUkFUSVZPID0gYXdhaXQgZ2V0T3BlcmF0aXZvQWN0dWFsKGNvbnRleHQpO1xyXG4gICAgICAgICAgICBjb25zdCBwZXJtaXRlR2VuZXJhck11ZXN0cmEgPSBhd2FpdCBnZXRPcGVyYXRpdm9QZXJtaXRlR2VuZXJhck11ZXN0cmEoY29udGV4dC5jbGllbnQsIE9QRVJBVElWTyk7XHJcbiAgICAgICAgICAgIGlmKCFwZXJtaXRlR2VuZXJhck11ZXN0cmEgJiYgcGFyYW1ldGVycy5jYW1iaWFfbW9kb19kbSl7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcignTm8gZXMgcG9zaWJsZSBjYW1iaWFyIGRlIG1vZG8gZW4gZXN0ZSBvcGVyYXRpdm8nKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YXIgYmUgPSBjb250ZXh0LmJlO1xyXG4gICAgICAgICAgICB2YXIgeyBwZXJzaXN0ZW50ZXMsIG1vZG9fZG0sIGNhbWJpYV9tb2RvX2RtLCBpZHBlcl9sb2d1ZWFkb190YWJsZXQgfSA9IHBhcmFtZXRlcnM7XHJcbiAgICAgICAgICAgIGNvbnN0IHVzZXJuYW1lTG9ndWVhZG9UYWJsZXQgPSAoYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYHNlbGVjdCB1c3VhcmlvIGZyb20gdXN1YXJpb3Mgd2hlcmUgaWRwZXIgPSAkMWAsIFtpZHBlcl9sb2d1ZWFkb190YWJsZXRdKS5mZXRjaFVuaXF1ZVZhbHVlKCkpLnZhbHVlOyBcclxuICAgICAgICAgICAgdmFyIHRva2VuOiBzdHJpbmcgPSBwZXJzaXN0ZW50ZXM/LnRva2VuIHx8IChhd2FpdCBiZS5wcm9jZWR1cmUudG9rZW5fZ2V0LmNvcmVGdW5jdGlvbihjb250ZXh0LCB7XHJcbiAgICAgICAgICAgICAgICB1c2VyYWdlbnQ6IGNvbnRleHQuc2Vzc2lvbi5yZXEudXNlcmFnZW50LFxyXG4gICAgICAgICAgICAgICAgdXNlcm5hbWU6IHVzZXJuYW1lTG9ndWVhZG9UYWJsZXRcclxuICAgICAgICAgICAgfSkpLnRva2VuO1xyXG4gICAgICAgICAgICBjb25zdCBudW1fc2luY3JvID0gKGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIElOU0VSVCBJTlRPIHNpbmNyb25pemFjaW9uZXMgKHRva2VuLCB1c3VhcmlvLCBkYXRvcylcclxuICAgICAgICAgICAgICAgICAgICBWQUxVRVMgKCQxLCQyLCQzKSBcclxuICAgICAgICAgICAgICAgICAgICBSRVRVUk5JTkcgc2luY3JvXHJcbiAgICAgICAgICAgICAgICBgLCBbdG9rZW4sIHVzZXJuYW1lTG9ndWVhZG9UYWJsZXQsIHBlcnNpc3RlbnRlc11cclxuICAgICAgICAgICAgKS5mZXRjaFVuaXF1ZVZhbHVlKCkpLnZhbHVlO1xyXG4gICAgICAgICAgICB2YXIgY29uZHZpdiA9IGBcclxuICAgICAgICAgICAgICAgIHR0Lm9wZXJhdGl2bz0gJDEgXHJcbiAgICAgICAgICAgICAgICBhbmQgYXNpZ25hZG8gPSAkMlxyXG4gICAgICAgICAgICAgICAgYW5kIHR0Lm9wZXJhY2lvbj0nY2FyZ2FyJyBcclxuICAgICAgICAgICAgICAgIGFuZCAodHQuY2FyZ2Fkb19kbSBpcyBudWxsIG9yIHR0LmNhcmdhZG9fZG0gPSAke2NvbnRleHQuYmUuZGIucXVvdGVMaXRlcmFsKHRva2VuKX0pXHJcbiAgICAgICAgICAgIGA7XHJcbiAgICAgICAgICAgIGNvbnN0IHsgdW5pZGFkX2FuYWxpc2lzOiBVQV9QUklOQ0lQQUwsIHBrX2FncmVnYWRhIH0gPSAoYXdhaXQgZ2V0VUFQcmluY2lwYWwoY29udGV4dC5jbGllbnQsIE9QRVJBVElWTykpO1xyXG4gICAgICAgICAgICBpZiAocGVyc2lzdGVudGVzKSB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpZEVuYyBpbiBwZXJzaXN0ZW50ZXMucmVzcHVlc3Rhc1tVQV9QUklOQ0lQQUxdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHJlc3B1ZXN0YXNVQVByaW5jaXBhbCA9IHBlcnNpc3RlbnRlcy5yZXNwdWVzdGFzW1VBX1BSSU5DSVBBTF1baWRFbmNdO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vVE9ETyBBTCBQQVJFQ0VSIEVTVMOBIFJFU1VFTFRPLCBMTyBERUpPIFBPUiBMQVMgRFVEQVNcclxuICAgICAgICAgICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMocmVzcHVlc3Rhc1VBUHJpbmNpcGFsKS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjYXJnYSA9IHBlcnNpc3RlbnRlcy5jYXJnYXNbcGVyc2lzdGVudGVzLmluZm9ybWFjaW9uSGRyW2lkRW5jXS50ZW0uY2FyZ2FdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGFyZWEgPSBwZXJzaXN0ZW50ZXMuaW5mb3JtYWNpb25IZHJbaWRFbmNdLnRhcmVhLnRhcmVhO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjYXJnYVRhcmVhc0FyZWFzID0gKGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYHNlbGVjdCByZWNlcGNpb25pc3RhXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSB0YXJlYXNfYXJlYXNcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm89ICQxIGFuZCB0YXJlYSA9ICQyIGFuZCBhcmVhID0gJDMgLS1wayB2ZXJpZmljYWRhXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBgLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW09QRVJBVElWTywgdGFyZWEsIGNhcmdhLmNhcmdhXVxyXG4gICAgICAgICAgICAgICAgICAgICAgICApLmZldGNoVW5pcXVlVmFsdWUoKSkudmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY2FyZ2FUYXJlYXNBcmVhcyAmJiAhY2FyZ2EucmVjZXBjaW9uaXN0YSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoYG5vIHNlIGRlZmluacOzIHVuIHJlY2VwY2lvbmlzdGEgcGFyYSBlbCBvcGVyYXRpdm8gJHtPUEVSQVRJVk99LCB0YXJlYSAke3RhcmVhfSwgw6FyZWEgJHtjYXJnYS5jYXJnYX0sIHBvciBmYXZvciBjb211bmlxdWVzw6kgY29uIEdBQklORVRFIHBhcmEgcXVlIGNhcmd1ZW4gdW4gcmVjZXBjaW9uaXN0YWApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKE51bWJlcihpZEVuYykgPCAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZEVuYyA9IGF3YWl0IHBlcnNpc3RpckVuY3Vlc3RhQXV0b2dlbmVyYWRhRW5ETShjb250ZXh0LCBPUEVSQVRJVk8sIGNhcmdhLmNhcmdhLCBpZEVuYywgdG9rZW4sIHJlc3B1ZXN0YXNVQVByaW5jaXBhbCwgY2FyZ2EucmVjZXBjaW9uaXN0YSB8fCBjYXJnYVRhcmVhc0FyZWFzLCBwZXJzaXN0ZW50ZXMuaWRwZXIsIG1vZG9fZG0gYXMgTW9kb0RNLCBjYW1iaWFfbW9kb19kbSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHB1ZWRvR3VhcmRhckVuVEVNID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHsgcGFyYW1zLCBzZXR0ZXJzIH0gPSBnZXRTZXR0ZXJzQW5kUGFyYW1ldGVyc0ZvclJlYU5vUmVhUmVzdW1lbkVzdGFkbyh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJlYSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNVQVByaW5jaXBhbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldHRlcnM6IFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgZXN0YWRvID0gJHtjb250ZXh0LmJlLmRiLnF1b3RlTGl0ZXJhbChFU1RBRE9fUE9TVEVSSU9SX0RFU0NBUkdBKX1gLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBjYXJnYWRvX2RtPW51bGxgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zOiBbT1BFUkFUSVZPLCBpZEVuYywgdGFyZWEsIHRva2VuXSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Rpbm86ICd0YXJlYXNfdGVtJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2FtYmlhX21vZG9fZG0gfHwgcGVyc2lzdGVudGVzLmlkcGVyICE9IGlkcGVyX2xvZ3VlYWRvX3RhYmxldCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0dGVycy5wdXNoKGBvcGVyYWNpb24gPSAnZGVzY2FyZ2FyJ2ApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBxdWVyeVRhcmVhc1RlbSA9IGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYHVwZGF0ZSB0YXJlYXNfdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0ICR7c2V0dGVycy5qb2luKCcsJyl9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvPSAkMSBhbmQgZW5jID0gJDIgYW5kIHRhcmVhID0gJDMgYW5kIGNhcmdhZG9fZG0gPSAkNFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAnb2snYFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICkuZmV0Y2hPbmVSb3dJZkV4aXN0cygpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwdWVkb0d1YXJkYXJFblRFTSA9IHF1ZXJ5VGFyZWFzVGVtLnJvd0NvdW50ID09IDE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwdWVkb0d1YXJkYXJFblRFTSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgZ3VhcmRhckVuY3Vlc3RhRW5UZW0oY29udGV4dCwgT1BFUkFUSVZPLCBpZEVuYywgcmVzcHVlc3Rhc1VBUHJpbmNpcGFsLCB0YXJlYSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCByZWdpc3RyYXJQYXNlVGFibGEoY29udGV4dCwgT1BFUkFUSVZPLCBpZEVuYywgcmVzcHVlc3Rhc1VBUHJpbmNpcGFsKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IGZzLmFwcGVuZEZpbGUoJ2xvY2FsLXJlY2liaWRvLXNpbi10b2tlbi50eHQnLCBKU09OLnN0cmluZ2lmeSh7IG5vdzogbmV3IERhdGUoKSwgaWRwZXI6IHBlcnNpc3RlbnRlcy5pZHBlciwgaWRDYXNvOiBpZEVuYywgW3BrX2FncmVnYWRhXTogcmVzcHVlc3Rhc1VBUHJpbmNpcGFsIH0pICsgJ1xcblxcbicsICd1dGY4Jyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFyIHsgcm93IH0gPSBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShnZXRIZHJRdWVyeShjb25kdml2LCBjb250ZXh0LCBVQV9QUklOQ0lQQUwsIHBlcm1pdGVHZW5lcmFyTXVlc3RyYSwgaWRwZXJfbG9ndWVhZG9fdGFibGV0KSwgW09QRVJBVElWTywgaWRwZXJfbG9ndWVhZG9fdGFibGV0XSkuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoXHJcbiAgICAgICAgICAgICAgICBgdXBkYXRlIHRhcmVhc190ZW0gdHRcclxuICAgICAgICAgICAgICAgICAgICBzZXQgIGVzdGFkbyA9ICQ0LCBjYXJnYWRvX2RtPSQzOjp0ZXh0XHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgJHtjb25kdml2fSBcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgZW5jYFxyXG4gICAgICAgICAgICAgICAgLFxyXG4gICAgICAgICAgICAgICAgW09QRVJBVElWTywgaWRwZXJfbG9ndWVhZG9fdGFibGV0LCB0b2tlbiwgRVNUQURPX1BPU1RFUklPUl9DQVJHQV1cclxuICAgICAgICAgICAgKS5mZXRjaEFsbCgpO1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgLi4ucm93LFxyXG4gICAgICAgICAgICAgICAgb3BlcmF0aXZvOiBPUEVSQVRJVk8sXHJcbiAgICAgICAgICAgICAgICBzb2xvTGVjdHVyYTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICB0b2tlbixcclxuICAgICAgICAgICAgICAgIG51bV9zaW5jcm8sXHJcbiAgICAgICAgICAgICAgICBpZHBlcjogaWRwZXJfbG9ndWVhZG9fdGFibGV0LFxyXG4gICAgICAgICAgICAgICAgY2FyZ2FzOiBsaWtlQXIuY3JlYXRlSW5kZXgocm93LmNhcmdhcy5tYXAoY2FyZ2EgPT4gKHsgLi4uY2FyZ2EsIGZlY2hhOiBjYXJnYS5mZWNoYSA/IGRhdGUuaXNvKGNhcmdhLmZlY2hhKS50b0RteSgpIDogbnVsbCwgZXN0YWRvX2NhcmdhOiAncmVsZXZhbWllbnRvJyB9KSksICdjYXJnYScpXHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnZG1fYmFja3VwJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOiBbXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ3Rva2VuJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICd0ZW0nLCB0eXBlTmFtZTogJ2pzb25iJyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICdtb2RvX2RtJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgdW5sb2dnZWQ6IHRydWUsXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOiBhc3luYyBmdW5jdGlvbiAoY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCwgcGFyYW1ldGVyczogQ29yZUZ1bmN0aW9uUGFyYW1ldGVyczx7IHRva2VuOiBzdHJpbmcgfCBudWxsLCB0ZW06IEFueU9iamVjdCwgbW9kb19kbTogTW9kb0RNIH0+KSB7XHJcbiAgICAgICAgICAgIHZhciB7IGJlLCBjbGllbnQgfSA9IGNvbnRleHQ7XHJcbiAgICAgICAgICAgIGNvbnN0IE9QRVJBVElWTyA9IGF3YWl0IGdldE9wZXJhdGl2b0FjdHVhbChjb250ZXh0KTtcclxuICAgICAgICAgICAgdmFyIG51bV9zaW5jcm86IG51bWJlciA9IDA7XHJcbiAgICAgICAgICAgIHZhciB0b2tlbjogc3RyaW5nIHwgbnVsbCA9IHBhcmFtZXRlcnMudG9rZW47XHJcbiAgICAgICAgICAgIGlmICh0b2tlbiA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4geyBvazogJ29rOk4vVCcgfTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHZhciB7IHJvd0NvdW50IH0gPSBhd2FpdCBjbGllbnQucXVlcnkoYHNlbGVjdCAxIGZyb20gdG9rZW5zIHdoZXJlIHRva2VuID0gJDFgLCBbdG9rZW5dKS5mZXRjaE9uZVJvd0lmRXhpc3RzKCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXJvd0NvdW50KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgb2s6ICdvazpOL1QnIH07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFyIHsgdW5pZGFkX2FuYWxpc2lzLCBwa19hZ3JlZ2FkYSB9ID0gKGF3YWl0IGdldFVBUHJpbmNpcGFsKGNvbnRleHQuY2xpZW50LCBPUEVSQVRJVk8pKTtcclxuICAgICAgICAgICAgaWYgKHBhcmFtZXRlcnMudGVtKSB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBiYWNrdXAgb2YgbGlrZUFyKHBhcmFtZXRlcnMudGVtKS5hcnJheSgpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGFyZWEgPSBiYWNrdXAuY2FyZ2EuY2FyZ2E7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHJlc3B1ZXN0YXNSYWl6ID0gYmFja3VwLnJlc3B1ZXN0YXNSYWl6O1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBpZEVuY0RNID0gYmFja3VwLmZvclBrUmFpeltwa19hZ3JlZ2FkYV0udG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgcmVjZXBjaW9uaXN0YSA9IGJhY2t1cC5jYXJnYS5yZWNlcGNpb25pc3RhO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBhc2lnbmFkbyA9IGJhY2t1cC5pZHBlcjtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoTnVtYmVyKGlkRW5jRE0pIDwgMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBwZXJzaXN0aXJFbmN1ZXN0YUF1dG9nZW5lcmFkYUVuRE0oY29udGV4dCwgT1BFUkFUSVZPLCBhcmVhLCBpZEVuY0RNLCB0b2tlbiwgcmVzcHVlc3Rhc1JhaXosIHJlY2VwY2lvbmlzdGEsIGFzaWduYWRvLCBwYXJhbWV0ZXJzLm1vZG9fZG0sIGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgcmVzdWx0ID0gYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBgdXBkYXRlIHRlbVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldCBqc29uX2JhY2t1cCA9ICQzLCBmZWNoYV9iYWNrdXAgPSBjdXJyZW50X3RpbWVzdGFtcFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2bz0gJDEgYW5kIGVuYyA9ICQyIGFuZCBqc29uX2JhY2t1cCBpcyBkaXN0aW5jdCBmcm9tICQ0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nICdvaydgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbT1BFUkFUSVZPLCBpZEVuY0RNLCByZXNwdWVzdGFzUmFpeiwgcmVzcHVlc3Rhc1JhaXpdXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICkuZmV0Y2hPbmVSb3dJZkV4aXN0cygpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIG9rOiAnb2snXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdjb25zaXN0aXJfdml2aWVuZGEnLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6IFtcclxuICAgICAgICAgICAgeyBuYW1lOiAnb3BlcmF0aXZvJywgcmVmZXJlbmNlczogJ29wZXJhdGl2b3MnLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ2Nhc28nLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgXSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246IGFzeW5jIGZ1bmN0aW9uIChjb250ZXh0OiBQcm9jZWR1cmVDb250ZXh0LCBwYXJhbWV0ZXJzOiBDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzPHsgb3BlcmF0aXZvOiBJZE9wZXJhdGl2bywgY2Fzbzogc3RyaW5nIH0+KSB7XHJcbiAgICAgICAgICAgIHZhciB7IGJlLCBjbGllbnQgfSA9IGNvbnRleHQ7XHJcbiAgICAgICAgICAgIGxldCBwYXJhbV9wcm9jID0ge1xyXG4gICAgICAgICAgICAgICAgb3BlcmF0aXZvOiBwYXJhbWV0ZXJzLm9wZXJhdGl2byxcclxuICAgICAgICAgICAgICAgIGlkX2Nhc286IHBhcmFtZXRlcnMuY2Fzb1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGxldCBlcnJNZXNzYWdlOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcclxuICAgICAgICAgICAgbGV0IHJlc3VsdGFkbzogc3RyaW5nIHwgbnVsbCA9IG51bGw7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICByZXN1bHRhZG8gPSBhd2FpdCBiZS5wcm9jZWR1cmUuY29uc2lzdGlyX2VuY3Vlc3RhLmNvcmVGdW5jdGlvbihjb250ZXh0LFxyXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtX3Byb2NcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgICAgICAgdmFyIGVycm9yID0gdW5leHBlY3RlZChlcnIpO1xyXG4gICAgICAgICAgICAgICAgZXJyTWVzc2FnZSA9IFwiIGNvbnNpc3Rpcl9jYXNvLiBcIiArIGVycm9yLm1lc3NhZ2U7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGVyck1lc3NhZ2UsIGVycm9yKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCcqKioqKiogY29uc2lzdGlyX2Nhc28gcmVzdWx0YWRvOicsIHJlc3VsdGFkbylcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIG9rOiAnb2snXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnZG1fcmVzY2F0YXInLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6IFtcclxuICAgICAgICAgICAgeyBuYW1lOiAnbG9jYWxTdG9yYWdlSXRlbScsIHR5cGVOYW1lOiAnanNvbmInIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ2xvY2FsU3RvcmFnZUl0ZW1LZXknLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgXSxcclxuICAgICAgICB1bmxvZ2dlZDogdHJ1ZSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246IGFzeW5jIGZ1bmN0aW9uIChjb250ZXh0OiBQcm9jZWR1cmVDb250ZXh0LCBwYXJhbXM6IENvcmVGdW5jdGlvblBhcmFtZXRlcnM8eyBsb2NhbFN0b3JhZ2VJdGVtS2V5OiBzdHJpbmcsIGxvY2FsU3RvcmFnZUl0ZW06IEFueU9iamVjdCB9Pikge1xyXG4gICAgICAgICAgICB2YXIgeyBsb2NhbFN0b3JhZ2VJdGVtS2V5LCBsb2NhbFN0b3JhZ2VJdGVtIH0gPSBwYXJhbXM7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhsb2NhbFN0b3JhZ2VJdGVtKTtcclxuICAgICAgICAgICAgICAgIGF3YWl0IGZzLmFwcGVuZEZpbGUoJ2xvY2FsLXJlc2NhdGUudHh0JywgSlNPTi5zdHJpbmdpZnkoeyBub3c6IG5ldyBEYXRlKCksIHVzZXI6IGNvbnRleHQudXNlcm5hbWUsIGl0ZW1LZXk6IGxvY2FsU3RvcmFnZUl0ZW1LZXksIGl0ZW1EYXRhOiBsb2NhbFN0b3JhZ2VJdGVtIH0pICsgJ1xcblxcbicsICd1dGY4Jyk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJ29rJztcclxuICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdFUlJPUicsIGV4cGVjdGVkKGVycikpO1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdvcGVyYXRpdm9fZ2V0JyxcclxuICAgICAgICBwYXJhbWV0ZXJzOltdLFxyXG4gICAgICAgIHVubG9nZ2VkOnRydWUsXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOmFzeW5jIGZ1bmN0aW9uKGNvbnRleHQ6UHJvY2VkdXJlQ29udGV4dCwgX3BhcmFtZXRlcnM6Q29yZUZ1bmN0aW9uUGFyYW1ldGVyczx7fT4pe1xyXG4gICAgICAgICAgICByZXR1cm4gZ2V0T3BlcmF0aXZvQWN0dWFsKGNvbnRleHQpXHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdnZXRfcmFuZG9tX2ZyZWVfY2FzZScsXHJcbiAgICAgICAgcGFyYW1ldGVyczogW3sgbmFtZTogJ29wZXJhdGl2bycsIHR5cGVOYW1lOiAndGV4dCcgfV0sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOiBhc3luYyBmdW5jdGlvbiAoY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCwgcGFyYW1zOiBDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzPHsgb3BlcmF0aXZvOiBJZE9wZXJhdGl2byB9Pikge1xyXG4gICAgICAgICAgICBjb25zdCBtaW5zVG9FeHBpcmUgPSAzMDtcclxuICAgICAgICAgICAgY29uc3QgbWluc1NpbmNlQmxvcXVlZCA9IGBkYXRlX3BhcnQoJ21pbicsIGFnZShjdXJyZW50X3RpbWVzdGFtcCwgZmVjaGFfYmxvcXVlbykpYDtcclxuICAgICAgICAgICAgY29uc3QgZW5jID0gYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYHNlbGVjdCBlbmMgZnJvbSB0ZW0gd2hlcmUgb3BlcmF0aXZvPSQxIGFuZCAobGlicmUgb3IgJHttaW5zU2luY2VCbG9xdWVkfSA+ICR7bWluc1RvRXhwaXJlfSkgbGltaXQgMTtgLCBbcGFyYW1zLm9wZXJhdGl2b10pLmZldGNoVW5pcXVlVmFsdWUoKTtcclxuICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFVQREFURSB0ZW0gc2V0IGxpYnJlID0gZmFsc2UsIGZlY2hhX2Jsb3F1ZW89Y3VycmVudF90aW1lc3RhbXAgd2hlcmUgb3BlcmF0aXZvPSQxIGFuZCBlbmM9JDJgLCBbcGFyYW1zLm9wZXJhdGl2bywgZW5jLnZhbHVlXSkuZXhlY3V0ZSgpO1xyXG4gICAgICAgICAgICByZXR1cm4gZW5jLnZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnbXVlc3RyYV9nZW5lcmFyJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOiBbXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ29wZXJhdGl2bycsIHR5cGVOYW1lOiAndGV4dCcsIHJlZmVyZW5jZXM6IFwib3BlcmF0aXZvc1wiIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ2FyZWEnLCB0eXBlTmFtZTogJ2ludGVnZXInLCByZWZlcmVuY2VzOiBcImFyZWFzXCIgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAnZG9taW5pbycsIHR5cGVOYW1lOiAnaW50ZWdlcicsIGRlZmF1bHRWYWx1ZTogMyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICdjYW50X2VuY3Vlc3RhcycsIHR5cGVOYW1lOiAnaW50ZWdlcicgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAndGFyZWFfYWN0dWFsJywgdHlwZU5hbWU6ICd0ZXh0JywgcmVmZXJlbmNlczogJ3RhcmVhcycgfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjogYXN5bmMgZnVuY3Rpb24gKGNvbnRleHQ6IFByb2NlZHVyZUNvbnRleHQsIHBhcmFtczogQ29yZUZ1bmN0aW9uUGFyYW1ldGVyczx7IG9wZXJhdGl2bzogSWRPcGVyYXRpdm8sIGFyZWE6IG51bWJlciwgZG9taW5pbzogbnVtYmVyLCBjYW50X2VuY3Vlc3RhczogbnVtYmVyLCB0YXJlYV9hY3R1YWw6IElkVGFyZWEgfT4pIHtcclxuICAgICAgICAgICAgY29uc3QgYmUgPSBjb250ZXh0LmJlO1xyXG4gICAgICAgICAgICB2YXIgcGVybWl0ZUdlbmVyYXJNdWVzdHJhID0gYXdhaXQgZ2V0T3BlcmF0aXZvUGVybWl0ZUdlbmVyYXJNdWVzdHJhKGNvbnRleHQuY2xpZW50LCBwYXJhbXMub3BlcmF0aXZvKTtcclxuICAgICAgICAgICAgaWYgKHBlcm1pdGVHZW5lcmFyTXVlc3RyYSkge1xyXG4gICAgICAgICAgICAgICAgbGV0IHRvdGFsQWN0dWFsID0gKGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KFxyXG4gICAgICAgICAgICAgICAgICAgIGBzZWxlY3QgY291bnQoKikgYXMgdG90YWxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSB0ZW1cclxuICAgICAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvPSAkMSBhbmQgYXJlYSA9ICQyYCxcclxuICAgICAgICAgICAgICAgICAgICBbcGFyYW1zLm9wZXJhdGl2bywgcGFyYW1zLmFyZWFdXHJcbiAgICAgICAgICAgICAgICApLmZldGNoVW5pcXVlVmFsdWUoKSkudmFsdWU7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IHBhcmFtcy5jYW50X2VuY3Vlc3RhcyAtIHRvdGFsQWN0dWFsOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBlbmMgPSBhd2FpdCBnZW5lcmFyTnVldm9JZEVuYyhjb250ZXh0LCBwYXJhbXMub3BlcmF0aXZvLCBwYXJhbXMuYXJlYSwgbWF4QUVuY1BvckFyZWEpXHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgZ2VuZXJhckVuY3Vlc3RhVGVtKGNvbnRleHQsIHBhcmFtcy5vcGVyYXRpdm8sIGVuYywgcGFyYW1zLmFyZWEsIHBhcmFtcy5kb21pbmlvLCBwYXJhbXMudGFyZWFfYWN0dWFsKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGF3YWl0IGdlbmVyYXJUYXJlYXNUZW1GYWx0YW50ZXMoY29udGV4dCwgcGFyYW1zLm9wZXJhdGl2byk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJ29rJztcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRocm93IEVycm9yKFwiZWwgb3BlcmF0aXZvIG5vIHBlcm1pdGUgZ2VuZXJhciBtdWVzdHJhXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdtdWVzdHJhX2FncmVnYXInLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6IFtcclxuICAgICAgICAgICAgeyBuYW1lOiAnb3BlcmF0aXZvJywgdHlwZU5hbWU6ICd0ZXh0JywgcmVmZXJlbmNlczogXCJvcGVyYXRpdm9zXCIgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAnYXJlYScsIHR5cGVOYW1lOiAnaW50ZWdlcicsIHJlZmVyZW5jZXM6IFwiYXJlYXNcIiB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICdkb21pbmlvJywgdHlwZU5hbWU6ICdpbnRlZ2VyJywgZGVmYXVsdFZhbHVlOiAzIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ2NhbnRfZW5jdWVzdGFzJywgdHlwZU5hbWU6ICdpbnRlZ2VyJyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICd0YXJlYV9hY3R1YWwnLCB0eXBlTmFtZTogJ3RleHQnLCByZWZlcmVuY2VzOiAndGFyZWFzJyB9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOiBhc3luYyBmdW5jdGlvbiAoY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCwgcGFyYW1zOiBDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzPHsgb3BlcmF0aXZvOiBJZE9wZXJhdGl2bywgYXJlYTogbnVtYmVyLCBkb21pbmlvOiBudW1iZXIsIGNhbnRfZW5jdWVzdGFzOiBudW1iZXIsIHRhcmVhX2FjdHVhbDogc3RyaW5nIH0+KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGJlID0gY29udGV4dC5iZTtcclxuICAgICAgICAgICAgdmFyIHBlcm1pdGVHZW5lcmFyTXVlc3RyYSA9IGF3YWl0IGdldE9wZXJhdGl2b1Blcm1pdGVHZW5lcmFyTXVlc3RyYShjb250ZXh0LmNsaWVudCwgcGFyYW1zLm9wZXJhdGl2byk7XHJcbiAgICAgICAgICAgIGlmIChwZXJtaXRlR2VuZXJhck11ZXN0cmEpIHtcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDw9IHBhcmFtcy5jYW50X2VuY3Vlc3RhczsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZW5jID0gYXdhaXQgZ2VuZXJhck51ZXZvSWRFbmMoY29udGV4dCwgcGFyYW1zLm9wZXJhdGl2bywgcGFyYW1zLmFyZWEsIG1heEFFbmNQb3JBcmVhKVxyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGdlbmVyYXJFbmN1ZXN0YVRlbShjb250ZXh0LCBwYXJhbXMub3BlcmF0aXZvLCBlbmMsIHBhcmFtcy5hcmVhLCBwYXJhbXMuZG9taW5pbywgcGFyYW1zLnRhcmVhX2FjdHVhbCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBhd2FpdCBnZW5lcmFyVGFyZWFzVGVtRmFsdGFudGVzKGNvbnRleHQsIHBhcmFtcy5vcGVyYXRpdm8pO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuICdvayc7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcihcImVsIG9wZXJhdGl2byBubyBwZXJtaXRlIGdlbmVyYXIgbXVlc3RyYVwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnZW5jdWVzdGFfYmxhbnF1ZWFyX3ByZXZpc3VhbGl6YXInLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6IFtcclxuICAgICAgICAgICAgeyBuYW1lOiAnb3BlcmF0aXZvJywgdHlwZU5hbWU6ICd0ZXh0JywgcmVmZXJlbmNlczogXCJvcGVyYXRpdm9zXCIgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAnZW5jJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgcm9sZXM6IFsnY29vcl9wcm9jJywgJ2Nvb3JfY2FtcG8nLCAnYWRtaW4nXSxcclxuICAgICAgICByZXN1bHRPazogJ21vc3RyYXJfZW5jdWVzdGFfYV9ibGFucXVlYXJfY29udGVuaWRvJyxcclxuICAgICAgICBjb3JlRnVuY3Rpb246IGFzeW5jIGZ1bmN0aW9uIChjb250ZXh0OiBQcm9jZWR1cmVDb250ZXh0LCBwYXJhbXM6IENvcmVGdW5jdGlvblBhcmFtZXRlcnM8eyBvcGVyYXRpdm86IElkT3BlcmF0aXZvLCBlbmM6IHN0cmluZyB9Pikge1xyXG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgYnVzY2FyRW5jdWVzdGFFblRlbShjb250ZXh0LCBwYXJhbXMpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnZW5jdWVzdGFfYmxhbnF1ZWFyJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOiBbXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ29wZXJhdGl2bycsIHR5cGVOYW1lOiAndGV4dCcsIHJlZmVyZW5jZXM6IFwib3BlcmF0aXZvc1wiIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ2VuYycsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIHJvbGVzOiBbJ2Nvb3JfcHJvYycsICdzdWJjb29yX2NhbXBvJywgJ2Nvb3JfY2FtcG8nLCAnYWRtaW4nXSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246IGFzeW5jIGZ1bmN0aW9uIChjb250ZXh0OiBQcm9jZWR1cmVDb250ZXh0LCBwYXJhbXM6IENvcmVGdW5jdGlvblBhcmFtZXRlcnM8eyBvcGVyYXRpdm86IElkT3BlcmF0aXZvLCBlbmM6IHN0cmluZyB9Pikge1xyXG4gICAgICAgICAgICB2YXIgYmUgPSBjb250ZXh0LmJlO1xyXG4gICAgICAgICAgICB2YXIgeyB1bmlkYWRfYW5hbGlzaXMsIHBrX2FncmVnYWRhIH0gPSAoYXdhaXQgZ2V0VUFQcmluY2lwYWwoY29udGV4dC5jbGllbnQsIHBhcmFtcy5vcGVyYXRpdm8pKTtcclxuICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoXHJcbiAgICAgICAgICAgICAgICBgZGVsZXRlIFxyXG4gICAgICAgICAgICAgICAgICAgIGZyb20gJHtiZS5kYi5xdW90ZUlkZW50KHVuaWRhZF9hbmFsaXNpcyl9IFxyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2bz0kMSBhbmQgJHtiZS5kYi5xdW90ZUlkZW50KHBrX2FncmVnYWRhKX0gPSAkMlxyXG4gICAgICAgICAgICBgLCBbcGFyYW1zLm9wZXJhdGl2bywgcGFyYW1zLmVuY10pLmV4ZWN1dGUoKTtcclxuICAgICAgICAvL3Bhc28gYSBlbmN1IHBhcmEgZ3VhcmRhciBlbiBoaXN0b3JpYWxcclxuICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgdXBkYXRlIHRlbVxyXG4gICAgICAgICAgICAgICAgICAgIHNldCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZWFfYWN0dWFsID0gJ2VuY3UnXHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvID0gJDEgYW5kIGVuYyA9ICQyIC0tcGsgdmVyaWZpY2FkYVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAqXHJcbiAgICAgICAgICAgIGAsIFtwYXJhbXMub3BlcmF0aXZvLCBwYXJhbXMuZW5jXSkuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgZGVsZXRlIFxyXG4gICAgICAgICAgICAgICAgICAgIGZyb20gdGFyZWFzX3RlbSBcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm8gPSAkMSBhbmQgZW5jID0gJDJcclxuICAgICAgICAgICAgYCwgW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy5lbmNdKS5leGVjdXRlKCk7XHJcbiAgICAgICAgICAgIGF3YWl0IGdlbmVyYXJUYXJlYXNUZW1GYWx0YW50ZXMoY29udGV4dCwgcGFyYW1zLm9wZXJhdGl2byk7XHJcbiAgICAgICAgICAgIC8vcmVzZXRlbyB0ZW0gKG5vIHNlIGd1YXJkYSBoaXN0b3JpYWwgcG9ycXVlIHRhcmVhX2FjdHVhbCBlcyBudWxsKVxyXG4gICAgICAgICAgICAvL2d1YXJkbyBiYWNrdXAgcG9yIGxhcyBkdWRhc1xyXG4gICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICB1cGRhdGUgdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBqc29uX2JhY2t1cCA9IGpzb25fZW5jdWVzdGEsIGpzb25fZW5jdWVzdGEgPSBudWxsLCB0YXJlYV9hY3R1YWwgPSBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmZWNoYV9tb2RpZl9lbmN1ZXN0YSA9IG51bGwsIGZlY2hhX2JhY2t1cCA9IGN1cnJlbnRfdGltZXN0YW1wLCBtb2RpZmljYWRvID0gbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdW1lbl9lc3RhZG8gPSBudWxsLCByZXN1bWVuX2VzdGFkb19zdXAgPSBudWxsLCBzdXBlcnZpc2lvbl9kaXJpZ2lkYSA9IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhc2VfdGFibGEgPSBudWxsLCByZWEgPSBudWxsLCBub3JlYSA9IG51bGwsIHJlYV9zdXAgPSBudWxsLCBub3JlYV9zdXAgPSBudWxsXHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvID0gJDEgYW5kIGVuYyA9ICQyIC0tcGsgdmVyaWZpY2FkYVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAqXHJcbiAgICAgICAgICAgIGAsIFtwYXJhbXMub3BlcmF0aXZvLCBwYXJhbXMuZW5jXSkuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgZGVsZXRlIFxyXG4gICAgICAgICAgICAgICAgICAgIGZyb20gaW5jb25zaXN0ZW5jaWFzXHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvID0gJDEgYW5kICR7YmUuZGIucXVvdGVJZGVudChwa19hZ3JlZ2FkYSl9ID0gJDJcclxuICAgICAgICAgICAgYCwgW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy5lbmNdKS5leGVjdXRlKCk7XHJcbiAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIGRlbGV0ZSBcclxuICAgICAgICAgICAgICAgICAgICBmcm9tIGluX2Nvbl92YXJcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm8gPSAkMSBhbmQgcGtfaW50ZWdyYWRhLT4+JHtiZS5kYi5xdW90ZUxpdGVyYWwocGtfYWdyZWdhZGEpfSA9ICQyXHJcbiAgICAgICAgICAgIGAsIFtwYXJhbXMub3BlcmF0aXZvLCBwYXJhbXMuZW5jXSkuZXhlY3V0ZSgpO1xyXG4gICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICBkZWxldGUgXHJcbiAgICAgICAgICAgICAgICAgICAgZnJvbSBpbmNvbnNpc3RlbmNpYXNfdWx0aW1hc1xyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2byA9ICQxIGFuZCBwa19pbnRlZ3JhZGEtPj4ke2JlLmRiLnF1b3RlTGl0ZXJhbChwa19hZ3JlZ2FkYSl9ID0gJDJcclxuICAgICAgICAgICAgYCwgW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy5lbmNdKS5leGVjdXRlKCk7XHJcbiAgICAgICAgICAgIHJldHVybiBgbGEgZW5jdWVzdGEgJHtwYXJhbXMuZW5jfSBzZSBibGFucXVlw7MgY29ycmVjdGFtZW50ZWA7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdlbmN1ZXN0YV9ib3JyYXJfcHJldmlzdWFsaXphcicsXHJcbiAgICAgICAgcGFyYW1ldGVyczogW1xyXG4gICAgICAgICAgICB7IG5hbWU6ICdvcGVyYXRpdm8nLCB0eXBlTmFtZTogJ3RleHQnLCByZWZlcmVuY2VzOiBcIm9wZXJhdGl2b3NcIiB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICdlbmMnLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgXSxcclxuICAgICAgICByb2xlczpbJ2Nvb3JfcHJvYycsJ3N1YmNvb3JfY2FtcG8nLCdjb29yX2NhbXBvJywnYWRtaW4nXSxcclxuICAgICAgICByZXN1bHRPazonbW9zdHJhcl9lbmN1ZXN0YV9hX2JvcnJhcicsXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOmFzeW5jIGZ1bmN0aW9uKGNvbnRleHQ6UHJvY2VkdXJlQ29udGV4dCwgcGFyYW1zOkNvcmVGdW5jdGlvblBhcmFtZXRlcnM8e29wZXJhdGl2bzogSWRPcGVyYXRpdm8sIGVuYzogc3RyaW5nfT4pe1xyXG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgYnVzY2FyRW5jdWVzdGFFblRlbShjb250ZXh0LHBhcmFtcyk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdlbmN1ZXN0YV9ib3JyYXInLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6IFtcclxuICAgICAgICAgICAgeyBuYW1lOiAnb3BlcmF0aXZvJywgdHlwZU5hbWU6ICd0ZXh0JywgcmVmZXJlbmNlczogXCJvcGVyYXRpdm9zXCIgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAnZW5jJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgcm9sZXM6IFsnY29vcl9wcm9jJywgJ3N1YmNvb3JfY2FtcG8nLCAnY29vcl9jYW1wbycsICdhZG1pbiddLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjogYXN5bmMgZnVuY3Rpb24gKGNvbnRleHQ6IFByb2NlZHVyZUNvbnRleHQsIHBhcmFtczogQ29yZUZ1bmN0aW9uUGFyYW1ldGVyczx7IG9wZXJhdGl2bzogSWRPcGVyYXRpdm8sIGVuYzogc3RyaW5nIH0+KSB7XHJcbiAgICAgICAgICAgIHZhciBiZSA9IGNvbnRleHQuYmU7XHJcbiAgICAgICAgICAgIHZhciBwZXJtaXRlX2dlbmVyYXJfbXVlc3RyYSA9IGF3YWl0IGdldE9wZXJhdGl2b1Blcm1pdGVHZW5lcmFyTXVlc3RyYShjb250ZXh0LmNsaWVudCwgcGFyYW1zLm9wZXJhdGl2byk7XHJcbiAgICAgICAgICAgIGlmIChwZXJtaXRlX2dlbmVyYXJfbXVlc3RyYSkge1xyXG4gICAgICAgICAgICAgICAgdmFyIHsgdW5pZGFkX2FuYWxpc2lzLCBwa19hZ3JlZ2FkYSB9ID0gKGF3YWl0IGdldFVBUHJpbmNpcGFsKGNvbnRleHQuY2xpZW50LCBwYXJhbXMub3BlcmF0aXZvKSk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB7IGNhc29UZW0gfSA9IGF3YWl0IGJ1c2NhckVuY3Vlc3RhRW5UZW0oY29udGV4dCwgcGFyYW1zKTtcclxuICAgICAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgICAgICBpbnNlcnQgaW50byBcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGVtX2JvcnJhZGFzIChvcGVyYXRpdm8sIGVuYywgY3VhbmRvLCBhcmVhLCBjbHVzdGVyLCBkb21pbmlvLCB0YXJlYV9hY3R1YWwsIGpzb25fZW5jdWVzdGEsIHRva2VuX2F1dG9nZW5lcmFkb19kbSwgZW5jX2F1dG9nZW5lcmFkb19kbSwgZW5jX2F1dG9nZW5lcmFkb19kbV9jYXBhLCBwcm9pZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzICgkMSwkMixjdXJyZW50X3RpbWVzdGFtcCwkMywkNCwkNSwkNiwkNywkOCwkOSwkMTAsJDExKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgKlxyXG4gICAgICAgICAgICAgICAgICAgIGAsIFtcclxuICAgICAgICAgICAgICAgICAgICBjYXNvVGVtLm9wZXJhdGl2byxcclxuICAgICAgICAgICAgICAgICAgICBjYXNvVGVtLmVuYyxcclxuICAgICAgICAgICAgICAgICAgICBjYXNvVGVtLmFyZWEsXHJcbiAgICAgICAgICAgICAgICAgICAgY2Fzb1RlbS5jbHVzdGVyLFxyXG4gICAgICAgICAgICAgICAgICAgIGNhc29UZW0uZG9taW5pbyxcclxuICAgICAgICAgICAgICAgICAgICBjYXNvVGVtLnRhcmVhX2FjdHVhbCxcclxuICAgICAgICAgICAgICAgICAgICBjYXNvVGVtLmpzb25fZW5jdWVzdGEsXHJcbiAgICAgICAgICAgICAgICAgICAgY2Fzb1RlbS50b2tlbl9hdXRvZ2VuZXJhZG9fZG0sXHJcbiAgICAgICAgICAgICAgICAgICAgY2Fzb1RlbS5lbmNfYXV0b2dlbmVyYWRvX2RtLFxyXG4gICAgICAgICAgICAgICAgICAgIGNhc29UZW0uZW5jX2F1dG9nZW5lcmFkb19kbV9jYXBhLFxyXG4gICAgICAgICAgICAgICAgICAgIGNhc29UZW0ucHJvaWVcclxuICAgICAgICAgICAgICAgIF0pLmZldGNoVW5pcXVlUm93KCk7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShcclxuICAgICAgICAgICAgICAgICAgICBgZGVsZXRlIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmcm9tICR7YmUuZGIucXVvdGVJZGVudCh1bmlkYWRfYW5hbGlzaXMpfSBcclxuICAgICAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvPSQxIGFuZCAke2JlLmRiLnF1b3RlSWRlbnQocGtfYWdyZWdhZGEpfSA9ICQyXHJcbiAgICAgICAgICAgICAgICBgLCBbcGFyYW1zLm9wZXJhdGl2bywgcGFyYW1zLmVuY10pLmV4ZWN1dGUoKTtcclxuICAgICAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgICAgICBkZWxldGUgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gdGFyZWFzX3RlbSBcclxuICAgICAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvID0gJDEgYW5kIGVuYyA9ICQyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAqXHJcbiAgICAgICAgICAgICAgICBgLCBbcGFyYW1zLm9wZXJhdGl2bywgcGFyYW1zLmVuY10pLmZldGNoQWxsKCk7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmcm9tIHRlbVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm8gPSAkMSBhbmQgZW5jID0gJDIgLS1wayB2ZXJpZmljYWRhXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAqXHJcbiAgICAgICAgICAgICAgICBgLCBbcGFyYW1zLm9wZXJhdGl2bywgcGFyYW1zLmVuY10pLmZldGNoVW5pcXVlUm93KCk7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmcm9tIGhpc3RvcmlhbF90ZW1cclxuICAgICAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvID0gJDEgYW5kIGVuYyA9ICQyIC0tcGsgdmVyaWZpY2FkYVxyXG4gICAgICAgICAgICAgICAgYCwgW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy5lbmNdKS5leGVjdXRlKCk7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmcm9tIGluY29uc2lzdGVuY2lhc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm8gPSAkMSBhbmQgJHtiZS5kYi5xdW90ZUlkZW50KHBrX2FncmVnYWRhKX0gPSAkMlxyXG4gICAgICAgICAgICAgICAgYCwgW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy5lbmNdKS5leGVjdXRlKCk7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmcm9tIGluX2Nvbl92YXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvID0gJDEgYW5kIHBrX2ludGVncmFkYS0+PiR7YmUuZGIucXVvdGVMaXRlcmFsKHBrX2FncmVnYWRhKX0gPSAkMlxyXG4gICAgICAgICAgICAgICAgYCwgW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy5lbmNdKS5leGVjdXRlKCk7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmcm9tIGluY29uc2lzdGVuY2lhc191bHRpbWFzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2byA9ICQxIGFuZCBwa19pbnRlZ3JhZGEtPj4ke2JlLmRiLnF1b3RlTGl0ZXJhbChwa19hZ3JlZ2FkYSl9ID0gJDJcclxuICAgICAgICAgICAgICAgIGAsIFtwYXJhbXMub3BlcmF0aXZvLCBwYXJhbXMuZW5jXSkuZXhlY3V0ZSgpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGBsYSBlbmN1ZXN0YSAke3BhcmFtcy5lbmN9IHNlIGJvcnLDsyBjb3JyZWN0YW1lbnRlYDtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRocm93IEVycm9yKCdubyBzZSBwdWVkZSBib3JyYXIgbGEgZW5jdWVzdGEgcG9ycXVlIGVsIG9wZXJhdGl2byB0aWVuZSBtdWVzdHJhIGVzdMOhdGljYScpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdlbmN1ZXN0YXNfY2FwYWNpdGFjaW9uX2JvcnJhcicsXHJcbiAgICAgICAgcGFyYW1ldGVyczogW1xyXG4gICAgICAgICAgICB7IG5hbWU6ICdvcGVyYXRpdm8nLCB0eXBlTmFtZTogJ3RleHQnLCByZWZlcmVuY2VzOiBcIm9wZXJhdGl2b3NcIiB9XHJcbiAgICAgICAgXSxcclxuICAgICAgICByb2xlczogWydhZG1pbiddLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjogYXN5bmMgZnVuY3Rpb24gKGNvbnRleHQ6IFByb2NlZHVyZUNvbnRleHQsIHBhcmFtczogQ29yZUZ1bmN0aW9uUGFyYW1ldGVyczx7IG9wZXJhdGl2bzogSWRPcGVyYXRpdm8gfT4pIHtcclxuICAgICAgICAgICAgdmFyIGJlID0gY29udGV4dC5iZTtcclxuICAgICAgICAgICAgdmFyIHBlcm1pdGVfZ2VuZXJhcl9tdWVzdHJhID0gYXdhaXQgZ2V0T3BlcmF0aXZvUGVybWl0ZUdlbmVyYXJNdWVzdHJhKGNvbnRleHQuY2xpZW50LCBwYXJhbXMub3BlcmF0aXZvKTtcclxuICAgICAgICAgICAgaWYgKHBlcm1pdGVfZ2VuZXJhcl9tdWVzdHJhKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBlbmNzQUJvcnJhciA9IChhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShcclxuICAgICAgICAgICAgICAgICAgICBgc2VsZWN0ICogXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2bz0kMSBhbmQgZW5jX2F1dG9nZW5lcmFkb19kbV9jYXBhIGlzIG5vdCBudWxsXHJcbiAgICAgICAgICAgICAgICBgLCBbcGFyYW1zLm9wZXJhdGl2b10pLmZldGNoQWxsKCkpLnJvd3M7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCByb3cgb2YgZW5jc0FCb3JyYXIpIHtcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCBiZS5wcm9jZWR1cmUuZW5jdWVzdGFfYm9ycmFyLmNvcmVGdW5jdGlvbihjb250ZXh0LCB7IG9wZXJhdGl2bzogcGFyYW1zLm9wZXJhdGl2bywgZW5jOiByb3cuZW5jIH0pXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3NlIGJvcnJhcm9uIGxhcyBlbmN1ZXN0YXMgZGUgY2FwYWNpdGFjacOzbic7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcignbm8gc2UgcHVlZGUgYm9ycmFyIGxhIGVuY3Vlc3RhIHBvcnF1ZSBlbCBvcGVyYXRpdm8gdGllbmUgbXVlc3RyYSBlc3TDoXRpY2EnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnYWNjaW9uX3RhcmVhc190ZW1fZWplY3V0YXInLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6IFtcclxuICAgICAgICAgICAgeyBuYW1lOiAnb3BlcmF0aXZvJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICd0YXJlYScsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAnZW5jJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICdjb25kaWNpb24nLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ2FjY2lvbicsIHR5cGVOYW1lOiAnanNvbmInIH0sXHJcbiAgICAgICAgXSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246IGFzeW5jIGZ1bmN0aW9uIChjb250ZXh0OiBQcm9jZWR1cmVDb250ZXh0LCBwYXJhbXM6IENvcmVGdW5jdGlvblBhcmFtZXRlcnM8eyBvcGVyYXRpdm86IElkT3BlcmF0aXZvLCB0YXJlYTogc3RyaW5nLCBlbmM6IHN0cmluZywgY29uZGljaW9uOiBzdHJpbmcsIGFjY2lvbjogRXN0YWRvQWNjaW9uIH0+KSB7XHJcbiAgICAgICAgICAgIHZhciBiZSA9IGNvbnRleHQuYmU7XHJcbiAgICAgICAgICAgIHZhciBhY2Npb24gPSBwYXJhbXMuYWNjaW9uIGFzIEVzdGFkb0FjY2lvbjtcclxuICAgICAgICAgICAgdmFyIGN1bXBsZTogYm9vbGVhbiA9IChhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShcclxuICAgICAgICAgICAgICAgIGBzZWxlY3QgYWNjaW9uX2N1bXBsZV9jb25kaWNpb24oJDUsICQ2LCAkNywgJDgsIChcclxuICAgICAgICAgICAgICAgICAgICBzZWxlY3QgY29uZGljaW9uIFxyXG4gICAgICAgICAgICAgICAgICAgICAgZnJvbSBlc3RhZG9zX2FjY2lvbmVzIFxyXG4gICAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvID0gJDEgYW5kIGVzdGFkbyA9ICQyIGFuZCBlYWNjaW9uID0gJDMgYW5kIGVzdGFkb19kZXN0aW5vID0gJDRcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgKWAsIFtcclxuICAgICAgICAgICAgICAgIHBhcmFtcy5vcGVyYXRpdm8sXHJcbiAgICAgICAgICAgICAgICBhY2Npb24uZXN0YWRvLFxyXG4gICAgICAgICAgICAgICAgYWNjaW9uLmVhY2Npb24sXHJcbiAgICAgICAgICAgICAgICBhY2Npb24uZXN0YWRvX2Rlc3Rpbm8sXHJcbiAgICAgICAgICAgICAgICBwYXJhbXMub3BlcmF0aXZvLFxyXG4gICAgICAgICAgICAgICAgYWNjaW9uLmVzdGFkbyxcclxuICAgICAgICAgICAgICAgIHBhcmFtcy5lbmMsXHJcbiAgICAgICAgICAgICAgICBhY2Npb24uZWFjY2lvbixcclxuICAgICAgICAgICAgXSkuZmV0Y2hVbmlxdWVWYWx1ZSgpKS52YWx1ZTtcclxuICAgICAgICAgICAgaWYgKCFjdW1wbGUpIHtcclxuICAgICAgICAgICAgICAgIHRocm93IEVycm9yKGBObyBzZSBwdWRvIGVqZWN1dGFyIGxhIGFjY2nDs24sIG5vIHNlIGN1bXBsZSBsYSBjb25kaWNpw7NuIFwiJHtwYXJhbXMuY29uZGljaW9ufVwiIG8gYmllbiBlbCBlc3RhZG8gZXN0w6EgZGVzYWN0dWFsaXphZG8sIHJlZnJlc3F1ZSBsYSBncmlsbGEuYClcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIFVQREFURSB0YXJlYXNfdGVtIFxyXG4gICAgICAgICAgICAgICAgICAgIHNldCBlc3RhZG8gPSAkNFxyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2bz0kMSBcclxuICAgICAgICAgICAgICAgICAgICAgICAgYW5kIGVuYz0kMiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgYW5kIHRhcmVhID0gJDNcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgKmAsXHJcbiAgICAgICAgICAgICAgICBbXHJcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zLm9wZXJhdGl2byxcclxuICAgICAgICAgICAgICAgICAgICBwYXJhbXMuZW5jLFxyXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtcy50YXJlYSxcclxuICAgICAgICAgICAgICAgICAgICBhY2Npb24uZXN0YWRvX2Rlc3Rpbm9cclxuICAgICAgICAgICAgICAgIF1cclxuICAgICAgICAgICAgKS5mZXRjaFVuaXF1ZVJvdygpO1xyXG4gICAgICAgICAgICBpZiAoYWNjaW9uLm5vbWJyZV9wcm9jZWR1cmUpIHtcclxuICAgICAgICAgICAgICAgIGlmIChiZS5wcm9jZWR1cmVbYWNjaW9uLm5vbWJyZV9wcm9jZWR1cmVdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgYmUucHJvY2VkdXJlW2FjY2lvbi5ub21icmVfcHJvY2VkdXJlXS5jb3JlRnVuY3Rpb24oY29udGV4dCwgcGFyYW1zKVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcihgTm8gZXhpc3RlIGVsIHByb2NlZHVyZSBcIiR7YWNjaW9uLm5vbWJyZV9wcm9jZWR1cmV9XCIgZGVmaW5pZG8gZW4gbGEgdGFibGEgXCJlc3RhZG9zX2FjY2lvbmVzXCIgcGFyYSBlbFxyXG4gICAgICAgICAgICAgICAgICAgIG9wZXJhdGl2bzogJHthY2Npb24ub3BlcmF0aXZvfSwgZXN0YWRvOiAke2FjY2lvbi5lc3RhZG99LCBlYWNjaW9uOiAke2FjY2lvbi5lYWNjaW9ufS5gKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIEJVU0NPIFBBU0UgREUgVEFSRUFcclxuICAgICAgICAgICAgdmFyIHRhcmVhU2lndWllbnRlID0gKGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KFxyXG4gICAgICAgICAgICAgICAgYHNlbGVjdCAqXHJcbiAgICAgICAgICAgICAgICAgICAgZnJvbSB0YXJlYXNfcHJveGltYXNcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBcclxuICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aXZvID0gJDEgYW5kIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJlYSA9ICQyIGFuZCBlc3RhZG8gPSAkMyBhbmQgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmVhX2N1bXBsZV9jb25kaWNpb24oJDQsICQ1LCAkNiwgJDcsIGNvbmRpY2lvbilcclxuICAgICAgICAgICAgICAgICAgICBvcmRlciBieSBvcmRlblxyXG4gICAgICAgICAgICAgICAgICAgIGxpbWl0IDFgXHJcbiAgICAgICAgICAgICAgICAsIFtcclxuICAgICAgICAgICAgICAgICAgICBwYXJhbXMub3BlcmF0aXZvLFxyXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtcy50YXJlYSxcclxuICAgICAgICAgICAgICAgICAgICBhY2Npb24uZXN0YWRvX2Rlc3Rpbm8sXHJcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zLm9wZXJhdGl2byxcclxuICAgICAgICAgICAgICAgICAgICBwYXJhbXMudGFyZWEsXHJcbiAgICAgICAgICAgICAgICAgICAgYWNjaW9uLmVzdGFkb19kZXN0aW5vLFxyXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtcy5lbmNcclxuICAgICAgICAgICAgICAgIF0pLmZldGNoT25lUm93SWZFeGlzdHMoKSkucm93O1xyXG4gICAgICAgICAgICBpZiAodGFyZWFTaWd1aWVudGUpIHtcclxuICAgICAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgICAgICB1cGRhdGUgdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldCB0YXJlYV9hY3R1YWwgPSAkM1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm8gPSAkMSBhbmQgZW5jID0gJDJcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nICpgXHJcbiAgICAgICAgICAgICAgICAgICAgLCBbcGFyYW1zLm9wZXJhdGl2bywgcGFyYW1zLmVuYywgdGFyZWFTaWd1aWVudGUudGFyZWFfZGVzdGlub11cclxuICAgICAgICAgICAgICAgICkuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgICAgICAgICAgICAgIGxldCBhdXRvQXNpZ25hZG8gPSB0YXJlYVNpZ3VpZW50ZS5yZWdpc3RyYV9yZWNlcGNpb25pc3RhID8gY29udGV4dC51c2VyLmlkcGVyIDogbnVsbDtcclxuICAgICAgICAgICAgICAgIGxldCBxID0gY29udGV4dC5iZS5kYi5xdW90ZUxpdGVyYWw7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICAgICAgdXBkYXRlIHRhcmVhc190ZW1cclxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0IHRzX2VudHJhZGEgPSBjdXJyZW50X3RpbWVzdGFtcCwgYWRlbGFudGFyID0gbnVsbCwgZXN0YWRvID0gJDRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7YXV0b0FzaWduYWRvID9cclxuICAgICAgICAgICAgICAgICAgICAgICAgXCIsIHJlY2VwY2lvbmlzdGE9XCIgKyBxKGF1dG9Bc2lnbmFkbylcclxuICAgICAgICAgICAgICAgICAgICAgICAgOiBcIlwifVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm8gPSAkMSBhbmQgZW5jID0gJDIgYW5kIHRhcmVhID0gJDNcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nICpgXHJcbiAgICAgICAgICAgICAgICAgICAgLCBbcGFyYW1zLm9wZXJhdGl2bywgcGFyYW1zLmVuYywgdGFyZWFTaWd1aWVudGUudGFyZWFfZGVzdGlubywgdGFyZWFTaWd1aWVudGUuZXN0YWRvX2Rlc3Rpbm9dXHJcbiAgICAgICAgICAgICAgICApLmZldGNoVW5pcXVlUm93KCk7XHJcbiAgICAgICAgICAgICAgICBpZiAodGFyZWFTaWd1aWVudGUubm9tYnJlX3Byb2NlZHVyZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGJlLnByb2NlZHVyZVt0YXJlYVNpZ3VpZW50ZS5ub21icmVfcHJvY2VkdXJlXS5jb3JlRnVuY3Rpb24oY29udGV4dCwgcGFyYW1zKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBGSU4gUEFTRSBERSBUQVJFQVxyXG4gICAgICAgICAgICByZXR1cm4gXCJva1wiO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnZW5jdWVzdGFfY2FyZ2FfcHJlcGFyYXInLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6IFtcclxuICAgICAgICAgICAgeyBuYW1lOiAnb3BlcmF0aXZvJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICd0YXJlYScsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAnZW5jJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOiBhc3luYyBmdW5jdGlvbiAoY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCwgcGFyYW1zOiBDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzPHsgb3BlcmF0aXZvOiBJZE9wZXJhdGl2bywgdGFyZWE6IHN0cmluZywgZW5jOiBzdHJpbmcgfT4pIHtcclxuICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgVVBEQVRFIHRhcmVhc190ZW1cclxuICAgICAgICAgICAgICAgICAgICBzZXQgb3BlcmFjaW9uID0gJDRcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm89JDEgYW5kIHRhcmVhPSAkMiBhbmQgZW5jPSQzXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nICpgLFxyXG4gICAgICAgICAgICAgICAgW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy50YXJlYSwgcGFyYW1zLmVuYywgT1BFUkFDSU9OX1BSRVBBUkFSX0NBUkdBXSlcclxuICAgICAgICAgICAgICAgIC5mZXRjaFVuaXF1ZVJvdygpO1xyXG4gICAgICAgICAgICByZXR1cm4gJ29rJztcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjogJ2VuY3Vlc3RhX2Rpc3BvbmliaWxpemFyJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOiBbXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ29wZXJhdGl2bycsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAndGFyZWEnLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ2VuYycsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjogYXN5bmMgZnVuY3Rpb24gKGNvbnRleHQ6IFByb2NlZHVyZUNvbnRleHQsIHBhcmFtczogQ29yZUZ1bmN0aW9uUGFyYW1ldGVyczx7IG9wZXJhdGl2bzogSWRPcGVyYXRpdm8sIHRhcmVhOiBzdHJpbmcsIGVuYzogc3RyaW5nIH0+KSB7XHJcbiAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIFVQREFURSB0YXJlYXNfdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0IGFzaWduYWRvID0gbnVsbFxyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2bz0kMSBhbmQgdGFyZWE9ICQyIGFuZCBlbmM9JDNcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgKmAsXHJcbiAgICAgICAgICAgICAgICBbcGFyYW1zLm9wZXJhdGl2bywgcGFyYW1zLnRhcmVhLCBwYXJhbXMuZW5jXSlcclxuICAgICAgICAgICAgICAgIC5mZXRjaFVuaXF1ZVJvdygpO1xyXG4gICAgICAgICAgICByZXR1cm4gJ29rJztcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjogJ2VuY3Vlc3RhX25vX2NhcmdhcicsXHJcbiAgICAgICAgcGFyYW1ldGVyczogW1xyXG4gICAgICAgICAgICB7IG5hbWU6ICdvcGVyYXRpdm8nLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ3RhcmVhJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICdlbmMnLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgXSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246IGFzeW5jIGZ1bmN0aW9uIChjb250ZXh0OiBQcm9jZWR1cmVDb250ZXh0LCBwYXJhbXM6IENvcmVGdW5jdGlvblBhcmFtZXRlcnM8eyBvcGVyYXRpdm86IElkT3BlcmF0aXZvLCB0YXJlYTogc3RyaW5nLCBlbmM6IHN0cmluZyB9Pikge1xyXG4gICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICBVUERBVEUgdGFyZWFzX3RlbVxyXG4gICAgICAgICAgICAgICAgICAgIHNldCBvcGVyYWNpb24gPSBudWxsXHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvPSQxIGFuZCB0YXJlYT0gJDIgYW5kIGVuYz0kM1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAqYCxcclxuICAgICAgICAgICAgICAgIFtwYXJhbXMub3BlcmF0aXZvLCBwYXJhbXMudGFyZWEsIHBhcmFtcy5lbmNdKVxyXG4gICAgICAgICAgICAgICAgLmZldGNoVW5pcXVlUm93KCk7XHJcbiAgICAgICAgICAgIHJldHVybiAnb2snO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnZW5jdWVzdGFfZGVzY2FyZ2FfcHJlcGFyYXInLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6IFtcclxuICAgICAgICAgICAgeyBuYW1lOiAnb3BlcmF0aXZvJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICd0YXJlYScsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAnZW5jJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOiBhc3luYyBmdW5jdGlvbiAoY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCwgcGFyYW1zOiBDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzPHsgb3BlcmF0aXZvOiBJZE9wZXJhdGl2bywgdGFyZWE6IHN0cmluZywgZW5jOiBzdHJpbmcgfT4pIHtcclxuICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgVVBEQVRFIHRhcmVhc190ZW1cclxuICAgICAgICAgICAgICAgICAgICBzZXQgb3BlcmFjaW9uID0gJDRcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm89JDEgYW5kIHRhcmVhPSAkMiBhbmQgZW5jPSQzXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nICpgLFxyXG4gICAgICAgICAgICAgICAgW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy50YXJlYSwgcGFyYW1zLmVuYywgT1BFUkFDSU9OX1BSRVBBUkFSX0RFU0NBUkdBXSlcclxuICAgICAgICAgICAgICAgIC5mZXRjaFVuaXF1ZVJvdygpO1xyXG4gICAgICAgICAgICByZXR1cm4gJ29rJztcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjogJ2VuY3Vlc3RhX25vX2Rlc2NhcmdhcicsXHJcbiAgICAgICAgcGFyYW1ldGVyczogW1xyXG4gICAgICAgICAgICB7IG5hbWU6ICdvcGVyYXRpdm8nLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ3RhcmVhJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICdlbmMnLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgXSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246IGFzeW5jIGZ1bmN0aW9uIChjb250ZXh0OiBQcm9jZWR1cmVDb250ZXh0LCBwYXJhbXM6IENvcmVGdW5jdGlvblBhcmFtZXRlcnM8eyBvcGVyYXRpdm86IElkT3BlcmF0aXZvLCB0YXJlYTogc3RyaW5nLCBlbmM6IHN0cmluZyB9Pikge1xyXG4gICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICBVUERBVEUgdGFyZWFzX3RlbVxyXG4gICAgICAgICAgICAgICAgICAgIHNldCBvcGVyYWNpb24gPSAnY2FyZ2FyJ1xyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2bz0kMSBhbmQgdGFyZWE9ICQyIGFuZCBlbmM9JDNcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgKmAsXHJcbiAgICAgICAgICAgICAgICBbcGFyYW1zLm9wZXJhdGl2bywgcGFyYW1zLnRhcmVhLCBwYXJhbXMuZW5jXSlcclxuICAgICAgICAgICAgICAgIC5mZXRjaFVuaXF1ZVJvdygpO1xyXG4gICAgICAgICAgICByZXR1cm4gJ29rJztcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjogJ2VuY3Vlc3RhX2FuYWxpemFyJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOiBbXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ29wZXJhdGl2bycsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAndGFyZWEnLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ2VuYycsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjogYXN5bmMgZnVuY3Rpb24gKGNvbnRleHQ6IFByb2NlZHVyZUNvbnRleHQsIHBhcmFtczogQ29yZUZ1bmN0aW9uUGFyYW1ldGVyczx7IG9wZXJhdGl2bzogSWRPcGVyYXRpdm8sIHRhcmVhOiBzdHJpbmcsIGVuYzogc3RyaW5nIH0+KSB7XHJcbiAgICAgICAgICAgIHZhciBiZSA9IGNvbnRleHQuYmU7XHJcbiAgICAgICAgICAgIGF3YWl0IGJlLnByb2NlZHVyZS5jb25zaXN0aXJfZW5jdWVzdGEuY29yZUZ1bmN0aW9uKGNvbnRleHQsIHsgb3BlcmF0aXZvOiBwYXJhbXMub3BlcmF0aXZvLCBpZF9jYXNvOiBwYXJhbXMuZW5jIH0pXHJcbiAgICAgICAgICAgIHJldHVybiAnb2snO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnaW5jb25zaXN0ZW5jaWFzX2VuY3Vlc3RhX2NvbnRyb2xhcicsXHJcbiAgICAgICAgcGFyYW1ldGVyczogW1xyXG4gICAgICAgICAgICB7IG5hbWU6ICdvcGVyYXRpdm8nLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ3RhcmVhJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICdlbmMnLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgXSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246IGFzeW5jIGZ1bmN0aW9uIChjb250ZXh0OiBQcm9jZWR1cmVDb250ZXh0LCBwYXJhbXM6IENvcmVGdW5jdGlvblBhcmFtZXRlcnM8eyBvcGVyYXRpdm86IElkT3BlcmF0aXZvLCB0YXJlYTogc3RyaW5nLCBlbmM6IHN0cmluZyB9Pikge1xyXG4gICAgICAgICAgICB2YXIgY2FudGlkYWQ6IG51bWJlciA9IChhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICBzZWxlY3QgY291bnQoKikgYXMgY3VtcGxlXHJcbiAgICAgICAgICAgICAgICAgICAgZnJvbSBpbmNvbnNpc3RlbmNpYXMgaSBcclxuICAgICAgICAgICAgICAgICAgICAgICAgam9pbiBjb25zaXN0ZW5jaWFzIGMgdXNpbmcgKG9wZXJhdGl2bywgY29uc2lzdGVuY2lhKSBcclxuICAgICAgICAgICAgICAgICAgICAgICAgam9pbiBtb21lbnRvc19jb25zaXN0ZW5jaWEgbWMgdXNpbmcgKG9wZXJhdGl2bywgbW9tZW50bylcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBcclxuICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aXZvID0gJDEgYW5kIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2aXZpZW5kYSA9ICQyIGFuZCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgbW9tZW50b19jb25zaXN0ZW5jaWFfY3VtcGxlX2NvbmRpY2lvbihcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1jLm9wZXJhdGl2byxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkudml2aWVuZGEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkMywgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VsZWN0IGNvbmRpY2lvbiBmcm9tIG1vbWVudG9zX2NvbnNpc3RlbmNpYSB3aGVyZSBvcGVyYXRpdm8gPSBtYy5vcGVyYXRpdm8gYW5kIG1vbWVudG8gPSBtYy5tb21lbnRvKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICApIGFuZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpLmp1c3RpZmljYWNpb24gaXMgbnVsbGAsXHJcbiAgICAgICAgICAgICAgICBbcGFyYW1zLm9wZXJhdGl2bywgcGFyYW1zLmVuYywgY29udGV4dC51c2VybmFtZV0pXHJcbiAgICAgICAgICAgICAgICAuZmV0Y2hVbmlxdWVWYWx1ZSgpKS52YWx1ZVxyXG4gICAgICAgICAgICBpZiAoY2FudGlkYWQpIHtcclxuICAgICAgICAgICAgICAgIHRocm93IEVycm9yKGBubyBzZSBwdWVkZSB2ZXJpZmljYXIgbGEgdGFyZWEgcG9ycXVlIGhheSBpbmNvbnNpc3RlbmNpYXMsIHBvciBmYXZvciByZXN1w6lsdmFsYXMgbyBqdXN0aWbDrXF1ZWxhcyBlbiBjYXNvIGRlIHNlciBuZWNlc2FyaW8uYClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gJ29rJztcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjogJ2VuY3Vlc3RhX3ZlcmlmaWNhcicsXHJcbiAgICAgICAgcGFyYW1ldGVyczogW1xyXG4gICAgICAgICAgICB7IG5hbWU6ICdvcGVyYXRpdm8nLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ3RhcmVhJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICdlbmMnLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgXSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246IGFzeW5jIGZ1bmN0aW9uIChjb250ZXh0OiBQcm9jZWR1cmVDb250ZXh0LCBwYXJhbXM6IENvcmVGdW5jdGlvblBhcmFtZXRlcnM8eyBvcGVyYXRpdm86IElkT3BlcmF0aXZvLCB0YXJlYTogc3RyaW5nLCBlbmM6IHN0cmluZyB9Pikge1xyXG4gICAgICAgICAgICB2YXIgYmUgPSBjb250ZXh0LmJlO1xyXG4gICAgICAgICAgICBhd2FpdCBiZS5wcm9jZWR1cmUuaW5jb25zaXN0ZW5jaWFzX2VuY3Vlc3RhX2NvbnRyb2xhci5jb3JlRnVuY3Rpb24oY29udGV4dCwgcGFyYW1zKTtcclxuICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgVVBEQVRFIHRhcmVhc190ZW1cclxuICAgICAgICAgICAgICAgICAgICBzZXQgdmVyaWZpY2FkbyA9ICcxJ1xyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2bz0kMSBhbmQgdGFyZWE9ICQyIGFuZCBlbmM9JDNcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgKmAsXHJcbiAgICAgICAgICAgICAgICBbcGFyYW1zLm9wZXJhdGl2bywgcGFyYW1zLnRhcmVhLCBwYXJhbXMuZW5jXSlcclxuICAgICAgICAgICAgICAgIC5mZXRjaFVuaXF1ZVJvdygpO1xyXG4gICAgICAgICAgICByZXR1cm4gJ29rJztcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjogJ2VuY3Vlc3RhX25vX3ZlcmlmaWNhcicsXHJcbiAgICAgICAgcGFyYW1ldGVyczogW1xyXG4gICAgICAgICAgICB7IG5hbWU6ICdvcGVyYXRpdm8nLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ3RhcmVhJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICdlbmMnLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgXSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246IGFzeW5jIGZ1bmN0aW9uIChjb250ZXh0OiBQcm9jZWR1cmVDb250ZXh0LCBwYXJhbXM6IENvcmVGdW5jdGlvblBhcmFtZXRlcnM8eyBvcGVyYXRpdm86IElkT3BlcmF0aXZvLCB0YXJlYTogc3RyaW5nLCBlbmM6IHN0cmluZyB9Pikge1xyXG4gICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICBVUERBVEUgdGFyZWFzX3RlbVxyXG4gICAgICAgICAgICAgICAgICAgIHNldCB2ZXJpZmljYWRvID0gbnVsbFxyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2bz0kMSBhbmQgdGFyZWE9ICQyIGFuZCBlbmM9JDNcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgKmAsXHJcbiAgICAgICAgICAgICAgICBbcGFyYW1zLm9wZXJhdGl2bywgcGFyYW1zLnRhcmVhLCBwYXJhbXMuZW5jXSlcclxuICAgICAgICAgICAgICAgIC5mZXRjaFVuaXF1ZVJvdygpO1xyXG4gICAgICAgICAgICByZXR1cm4gJ29rJztcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjogJ2VuY3Vlc3RhX2NlcnJhcicsXHJcbiAgICAgICAgcGFyYW1ldGVyczogW1xyXG4gICAgICAgICAgICB7IG5hbWU6ICdvcGVyYXRpdm8nLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ3RhcmVhJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICdlbmMnLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgXSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246IGFzeW5jIGZ1bmN0aW9uIChjb250ZXh0OiBQcm9jZWR1cmVDb250ZXh0LCBwYXJhbXM6IENvcmVGdW5jdGlvblBhcmFtZXRlcnM8eyBvcGVyYXRpdm86IElkT3BlcmF0aXZvLCB0YXJlYTogc3RyaW5nLCBlbmM6IHN0cmluZyB9Pikge1xyXG4gICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICBVUERBVEUgdGFyZWFzX3RlbVxyXG4gICAgICAgICAgICAgICAgICAgIHNldCB2ZXJpZmljYWRvID0gJzEnLCBhc2lnbmFkbyA9ICQ0XHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvPSQxIGFuZCB0YXJlYT0gJDIgYW5kIGVuYz0kM1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAqYCxcclxuICAgICAgICAgICAgICAgIFtwYXJhbXMub3BlcmF0aXZvLCBwYXJhbXMudGFyZWEsIHBhcmFtcy5lbmMsIGNvbnRleHQudXNlci5pZHBlcl0pXHJcbiAgICAgICAgICAgICAgICAuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgICAgICAgICAgcmV0dXJuICdvayc7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdlbmN1ZXN0YV9ub19jZXJyYXInLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6IFtcclxuICAgICAgICAgICAgeyBuYW1lOiAnb3BlcmF0aXZvJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICd0YXJlYScsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAnZW5jJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOiBhc3luYyBmdW5jdGlvbiAoY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCwgcGFyYW1zOiBDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzPHsgb3BlcmF0aXZvOiBJZE9wZXJhdGl2bywgdGFyZWE6IHN0cmluZywgZW5jOiBzdHJpbmcgfT4pIHtcclxuICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgVVBEQVRFIHRhcmVhc190ZW1cclxuICAgICAgICAgICAgICAgICAgICBzZXQgdmVyaWZpY2FkbyA9IG51bGxcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm89JDEgYW5kIHRhcmVhPSAkMiBhbmQgZW5jPSQzXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nICpgLFxyXG4gICAgICAgICAgICAgICAgW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy50YXJlYSwgcGFyYW1zLmVuY10pXHJcbiAgICAgICAgICAgICAgICAuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgICAgICAgICAgcmV0dXJuICdvayc7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdlbmN1ZXN0YV9zdXBlcnZpc2FyX3ByZXNlbmNpYWwnLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6IFtcclxuICAgICAgICAgICAgeyBuYW1lOiAnb3BlcmF0aXZvJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICdlbmMnLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ3RhcmVhJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOiBhc3luYyBmdW5jdGlvbiAoY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCwgcGFyYW1zOiBDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzPHsgb3BlcmF0aXZvOiBJZE9wZXJhdGl2bywgZW5jOiBzdHJpbmcsIHRhcmVhOiBzdHJpbmcgfT4pIHtcclxuICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgVVBEQVRFIHRlbVxyXG4gICAgICAgICAgICAgICAgICAgIHNldCB0YXJlYV9hY3R1YWwgPSAkMywgc3VwZXJ2aXNpb25fZGlyaWdpZGEgPSAkNFxyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2bz0kMSBhbmQgZW5jPSQyXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nICpgLFxyXG4gICAgICAgICAgICAgICAgW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy5lbmMsICdzdXBlJywgMV0pXHJcbiAgICAgICAgICAgICAgICAuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgICAgICAgICAgcmV0dXJuICdvayc7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdlbmN1ZXN0YV9zdXBlcnZpc2FyX3RlbGVmb25pY2EnLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6IFtcclxuICAgICAgICAgICAgeyBuYW1lOiAnb3BlcmF0aXZvJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICdlbmMnLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ3RhcmVhJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOiBhc3luYyBmdW5jdGlvbiAoY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCwgcGFyYW1zOiBDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzPHsgb3BlcmF0aXZvOiBJZE9wZXJhdGl2bywgZW5jOiBzdHJpbmcsIHRhcmVhOiBzdHJpbmcgfT4pIHtcclxuICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgVVBEQVRFIHRlbVxyXG4gICAgICAgICAgICAgICAgICAgIHNldCB0YXJlYV9hY3R1YWwgPSAkMywgc3VwZXJ2aXNpb25fZGlyaWdpZGEgPSAkNFxyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2bz0kMSBhbmQgZW5jPSQyXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nICpgLFxyXG4gICAgICAgICAgICAgICAgW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy5lbmMsICdzdXBlJywgMl0pXHJcbiAgICAgICAgICAgICAgICAuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgICAgICAgICAgcmV0dXJuICdvayc7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdlbmN1ZXN0YV9ub19zdXBlcnZpc2FyJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOiBbXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ29wZXJhdGl2bycsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAnZW5jJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICd0YXJlYScsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjogYXN5bmMgZnVuY3Rpb24gKGNvbnRleHQ6IFByb2NlZHVyZUNvbnRleHQsIHBhcmFtczogQ29yZUZ1bmN0aW9uUGFyYW1ldGVyczx7IG9wZXJhdGl2bzogSWRPcGVyYXRpdm8sIGVuYzogc3RyaW5nLCB0YXJlYTogc3RyaW5nIH0+KSB7XHJcbiAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIFVQREFURSB0ZW1cclxuICAgICAgICAgICAgICAgICAgICBzZXQgdGFyZWFfYWN0dWFsID0gJDMsIHN1cGVydmlzaW9uX2RpcmlnaWRhID0gbnVsbFxyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2bz0kMSBhbmQgZW5jPSQyXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nICpgLFxyXG4gICAgICAgICAgICAgICAgW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy5lbmMsICdmaW5jJ10pXHJcbiAgICAgICAgICAgICAgICAuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgICAgICAgICAgcmV0dXJuICdvayc7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdlbmN1ZXN0YV9wYXNhcl9hX2FuYWMnLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6IFtcclxuICAgICAgICAgICAgeyBuYW1lOiAnb3BlcmF0aXZvJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICdlbmMnLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ3RhcmVhJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOiBhc3luYyBmdW5jdGlvbiAoY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCwgcGFyYW1zOiBDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzPHsgb3BlcmF0aXZvOiBJZE9wZXJhdGl2bywgZW5jOiBzdHJpbmcsIHRhcmVhOiBzdHJpbmcgfT4pIHtcclxuICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgVVBEQVRFIHRhcmVhc190ZW1cclxuICAgICAgICAgICAgICAgICAgICBzZXQgZXN0YWRvID0gJ0NDJ1xyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2bz0kMSBhbmQgZW5jPSQyIGFuZCB0YXJlYSBpbiAoJDMsJDQpIC0tcXVpZXJvIHBhc2FyIGxhcyAyIHRhcmVhcyBhIENDXHJcbiAgICAgICAgICAgICAgICBgLFxyXG4gICAgICAgICAgICAgICAgW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy5lbmMsICdhbmFjJywgJ3Byb2MnXSlcclxuICAgICAgICAgICAgICAgIC5leGVjdXRlKCk7XHJcbiAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIFVQREFURSB0ZW1cclxuICAgICAgICAgICAgICAgICAgICBzZXQgdGFyZWFfYWN0dWFsID0gJDNcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm89JDEgYW5kIGVuYz0kMlxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAqYCxcclxuICAgICAgICAgICAgICAgIFtwYXJhbXMub3BlcmF0aXZvLCBwYXJhbXMuZW5jLCAnYW5hYyddKVxyXG4gICAgICAgICAgICAgICAgLmZldGNoVW5pcXVlUm93KCk7XHJcbiAgICAgICAgICAgIHJldHVybiAnb2snO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnZW5jdWVzdGFfbm9fcGFzYXJfYV9hbmFjJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOiBbXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ29wZXJhdGl2bycsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAnZW5jJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICd0YXJlYScsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjogYXN5bmMgZnVuY3Rpb24gKGNvbnRleHQ6IFByb2NlZHVyZUNvbnRleHQsIHBhcmFtczogQ29yZUZ1bmN0aW9uUGFyYW1ldGVyczx7IG9wZXJhdGl2bzogSWRPcGVyYXRpdm8sIGVuYzogc3RyaW5nLCB0YXJlYTogc3RyaW5nIH0+KSB7XHJcbiAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIFVQREFURSB0YXJlYXNfdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0IGVzdGFkbyA9ICdBJ1xyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2bz0kMSBhbmQgZW5jPSQyIGFuZCB0YXJlYT0gJDNcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgKmAsXHJcbiAgICAgICAgICAgICAgICBbcGFyYW1zLm9wZXJhdGl2bywgcGFyYW1zLmVuYywgJ3Byb2MnXSlcclxuICAgICAgICAgICAgICAgIC5mZXRjaFVuaXF1ZVJvdygpO1xyXG4gICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICBVUERBVEUgdGFyZWFzX3RlbVxyXG4gICAgICAgICAgICAgICAgICAgIHNldCBlc3RhZG8gPSAnMEQnXHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvPSQxIGFuZCBlbmM9JDIgYW5kIHRhcmVhPSAkM1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAqYCxcclxuICAgICAgICAgICAgICAgIFtwYXJhbXMub3BlcmF0aXZvLCBwYXJhbXMuZW5jLCAnYW5hYyddKVxyXG4gICAgICAgICAgICAgICAgLmZldGNoVW5pcXVlUm93KCk7XHJcbiAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIFVQREFURSB0ZW1cclxuICAgICAgICAgICAgICAgICAgICBzZXQgdGFyZWFfYWN0dWFsID0gJDNcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm89JDEgYW5kIGVuYz0kMlxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAqYCxcclxuICAgICAgICAgICAgICAgIFtwYXJhbXMub3BlcmF0aXZvLCBwYXJhbXMuZW5jLCAncHJvYyddKVxyXG4gICAgICAgICAgICAgICAgLmZldGNoVW5pcXVlUm93KCk7XHJcbiAgICAgICAgICAgIHJldHVybiAnb2snO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnZW5jdWVzdGFfZGV2b2x2ZXJfcHJvY19kZXNkZV9hbmFjJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOiBbXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ29wZXJhdGl2bycsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAnZW5jJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICd0YXJlYScsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjogYXN5bmMgZnVuY3Rpb24gKGNvbnRleHQ6IFByb2NlZHVyZUNvbnRleHQsIHBhcmFtczogQ29yZUZ1bmN0aW9uUGFyYW1ldGVyczx7IG9wZXJhdGl2bzogSWRPcGVyYXRpdm8sIGVuYzogc3RyaW5nLCB0YXJlYTogc3RyaW5nIH0+KSB7XHJcbiAgICAgICAgICAgIHZhciBiZSA9IGNvbnRleHQuYmU7XHJcbiAgICAgICAgICAgIGF3YWl0IGJlLnByb2NlZHVyZS5lbmN1ZXN0YV92ZXJpZmljYXIuY29yZUZ1bmN0aW9uKGNvbnRleHQsIHBhcmFtcyk7XHJcbiAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIFVQREFURSB0YXJlYXNfdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0IGVzdGFkbyA9ICdBJ1xyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2bz0kMSBhbmQgZW5jPSQyIGFuZCB0YXJlYT0gJDNcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgKmAsXHJcbiAgICAgICAgICAgICAgICBbcGFyYW1zLm9wZXJhdGl2bywgcGFyYW1zLmVuYywgJ3Byb2MnXSlcclxuICAgICAgICAgICAgICAgIC5mZXRjaFVuaXF1ZVJvdygpO1xyXG4gICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICBVUERBVEUgdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0IHRhcmVhX2FjdHVhbCA9ICQzXHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvPSQxIGFuZCBlbmM9JDJcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgKmAsXHJcbiAgICAgICAgICAgICAgICBbcGFyYW1zLm9wZXJhdGl2bywgcGFyYW1zLmVuYywgJ3Byb2MnXSlcclxuICAgICAgICAgICAgICAgIC5mZXRjaFVuaXF1ZVJvdygpO1xyXG4gICAgICAgICAgICByZXR1cm4gJ29rJztcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjogJ2VuY3Vlc3RhX25vX2Rldm9sdmVyX3Byb2NfZGVzZGVfYW5hYycsXHJcbiAgICAgICAgcGFyYW1ldGVyczogW1xyXG4gICAgICAgICAgICB7IG5hbWU6ICdvcGVyYXRpdm8nLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ2VuYycsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAndGFyZWEnLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgXSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246IGFzeW5jIGZ1bmN0aW9uIChjb250ZXh0OiBQcm9jZWR1cmVDb250ZXh0LCBwYXJhbXM6IENvcmVGdW5jdGlvblBhcmFtZXRlcnM8eyBvcGVyYXRpdm86IElkT3BlcmF0aXZvLCBlbmM6IHN0cmluZywgdGFyZWE6IHN0cmluZyB9Pikge1xyXG4gICAgICAgICAgICB2YXIgYmUgPSBjb250ZXh0LmJlO1xyXG4gICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICBVUERBVEUgdGFyZWFzX3RlbVxyXG4gICAgICAgICAgICAgICAgICAgIHNldCBlc3RhZG8gPSAnQ0MnXHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvPSQxIGFuZCBlbmM9JDIgYW5kIHRhcmVhIGluICgkMywkNCkgLS1xdWllcm8gcGFzYXIgbGFzIDIgdGFyZWFzIGEgQ0NcclxuICAgICAgICAgICAgICAgIGAsXHJcbiAgICAgICAgICAgICAgICBbcGFyYW1zLm9wZXJhdGl2bywgcGFyYW1zLmVuYywgJ2FuYWMnLCAncHJvYyddKVxyXG4gICAgICAgICAgICAgICAgLmV4ZWN1dGUoKTtcclxuICAgICAgICAgICAgYXdhaXQgYmUucHJvY2VkdXJlLmVuY3Vlc3RhX25vX3ZlcmlmaWNhci5jb3JlRnVuY3Rpb24oY29udGV4dCwgcGFyYW1zKTtcclxuICAgICAgICAgICAgcmV0dXJuICdvayc7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdlbmN1ZXN0YV9yZWN1cGVyYXJfZGVzZGVfYW5hYycsXHJcbiAgICAgICAgcGFyYW1ldGVyczogW1xyXG4gICAgICAgICAgICB7IG5hbWU6ICdvcGVyYXRpdm8nLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ2VuYycsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAndGFyZWEnLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgXSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246IGFzeW5jIGZ1bmN0aW9uIChjb250ZXh0OiBQcm9jZWR1cmVDb250ZXh0LCBwYXJhbXM6IENvcmVGdW5jdGlvblBhcmFtZXRlcnM8eyBvcGVyYXRpdm86IElkT3BlcmF0aXZvLCBlbmM6IHN0cmluZywgdGFyZWE6IHN0cmluZyB9Pikge1xyXG4gICAgICAgICAgICB2YXIgYmUgPSBjb250ZXh0LmJlO1xyXG4gICAgICAgICAgICB2YXIgeyBvcGVyYXRpdm8sIGVuYywgdGFyZWEgfSA9IHBhcmFtcztcclxuICAgICAgICAgICAgYXdhaXQgYmUucHJvY2VkdXJlLmVuY3Vlc3RhX3ZlcmlmaWNhci5jb3JlRnVuY3Rpb24oY29udGV4dCwgcGFyYW1zKTtcclxuICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgdXBkYXRlIHRlbSBcclxuICAgICAgICAgICAgICAgICAgICBzZXQgdGFyZWFfYWN0dWFsID0gJDNcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm8gPSAkMSBhbmQgZW5jID0gJDJcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgKmAsXHJcbiAgICAgICAgICAgICAgICBbb3BlcmF0aXZvLCBlbmMsICdyZWN1J10pXHJcbiAgICAgICAgICAgICAgICAuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgICAgICAgICAgcmV0dXJuICdvayc7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdlbmN1ZXN0YV9ub19yZWN1cGVyYXJfZGVzZGVfYW5hYycsXHJcbiAgICAgICAgcGFyYW1ldGVyczogW1xyXG4gICAgICAgICAgICB7IG5hbWU6ICdvcGVyYXRpdm8nLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ2VuYycsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAndGFyZWEnLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgXSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246IGFzeW5jIGZ1bmN0aW9uIChjb250ZXh0OiBQcm9jZWR1cmVDb250ZXh0LCBwYXJhbXM6IENvcmVGdW5jdGlvblBhcmFtZXRlcnM8eyBvcGVyYXRpdm86IElkT3BlcmF0aXZvLCBlbmM6IHN0cmluZywgdGFyZWE6IHN0cmluZyB9Pikge1xyXG4gICAgICAgICAgICB2YXIgYmUgPSBjb250ZXh0LmJlO1xyXG4gICAgICAgICAgICB2YXIgeyBvcGVyYXRpdm8sIGVuYywgdGFyZWEgfSA9IHBhcmFtcztcclxuICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgdXBkYXRlIHRlbSBcclxuICAgICAgICAgICAgICAgICAgICBzZXQgdGFyZWFfYWN0dWFsID0gJDRcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm8gPSAkMSBhbmQgZW5jID0gJDIgYW5kIHRhcmVhX2FjdHVhbCA9ICQzXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nICpgLFxyXG4gICAgICAgICAgICAgICAgW29wZXJhdGl2bywgZW5jLCAncmVjdScsICdhbmFjJ10pXHJcbiAgICAgICAgICAgICAgICAuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgICAgICAgICAgYXdhaXQgYmUucHJvY2VkdXJlLmVuY3Vlc3RhX25vX3ZlcmlmaWNhci5jb3JlRnVuY3Rpb24oY29udGV4dCwgcGFyYW1zKTtcclxuICAgICAgICAgICAgcmV0dXJuICdvayc7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdlbmN1ZXN0YV9mb3J6YXJfdGFyZWEnLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6IFtcclxuICAgICAgICAgICAgeyBuYW1lOiAnb3BlcmF0aXZvJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICdlbmMnLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ3RhcmVhX2FjdHVhbCcsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAndGFyZWFfbnVldmEnLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgXSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246IGFzeW5jIGZ1bmN0aW9uIChjb250ZXh0OiBQcm9jZWR1cmVDb250ZXh0LCBwYXJhbXM6IENvcmVGdW5jdGlvblBhcmFtZXRlcnM8eyBvcGVyYXRpdm86IElkT3BlcmF0aXZvLCBlbmM6IHN0cmluZywgdGFyZWFfYWN0dWFsOiBzdHJpbmcsIHRhcmVhX251ZXZhOiBzdHJpbmcgfT4pIHtcclxuICAgICAgICAgICAgdmFyIHsgb3BlcmF0aXZvLCBlbmMsIHRhcmVhX2FjdHVhbCwgdGFyZWFfbnVldmEgfSA9IHBhcmFtcztcclxuICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgdXBkYXRlIHRlbSBcclxuICAgICAgICAgICAgICAgICAgICBzZXQgdGFyZWFfYWN0dWFsID0gJDRcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm8gPSAkMSBhbmQgZW5jID0gJDIgYW5kIHRhcmVhX2FjdHVhbCA9ICQzXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nICpgLFxyXG4gICAgICAgICAgICAgICAgW29wZXJhdGl2bywgZW5jLCB0YXJlYV9hY3R1YWwsIHRhcmVhX251ZXZhXSlcclxuICAgICAgICAgICAgICAgIC5mZXRjaFVuaXF1ZVJvdygpO1xyXG4gICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICB1cGRhdGUgdGFyZWFzX3RlbSBcclxuICAgICAgICAgICAgICAgICAgICBzZXQgZXN0YWRvID0gJ1YnIFxyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2byA9ICQxIGFuZCBlbmMgPSAkMiBhbmQgdGFyZWEgPSAkM1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAqYCxcclxuICAgICAgICAgICAgICAgIFtvcGVyYXRpdm8sIGVuYywgdGFyZWFfYWN0dWFsXSlcclxuICAgICAgICAgICAgICAgIC5mZXRjaFVuaXF1ZVJvdygpO1xyXG4gICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICB1cGRhdGUgdGFyZWFzX3RlbSBcclxuICAgICAgICAgICAgICAgICAgICBzZXQgZXN0YWRvID0gJzBEJ1xyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2byA9ICQxIGFuZCBlbmMgPSAkMiBhbmQgdGFyZWEgPSAkM1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAqYCxcclxuICAgICAgICAgICAgICAgIFtvcGVyYXRpdm8sIGVuYywgdGFyZWFfbnVldmFdKVxyXG4gICAgICAgICAgICAgICAgLmZldGNoVW5pcXVlUm93KCk7XHJcbiAgICAgICAgICAgIHJldHVybiAnb2snO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnZW5jdWVzdGFfaGFiaWxpdGFyX2Rlc2hhYmlsaXRhcicsXHJcbiAgICAgICAgcGFyYW1ldGVyczogW1xyXG4gICAgICAgICAgICB7IG5hbWU6ICdvcGVyYXRpdm8nLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ2VuYycsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjogYXN5bmMgZnVuY3Rpb24gKGNvbnRleHQ6IFByb2NlZHVyZUNvbnRleHQsIHBhcmFtczogQ29yZUZ1bmN0aW9uUGFyYW1ldGVyczx7IG9wZXJhdGl2bzogSWRPcGVyYXRpdm8sIGVuYzogc3RyaW5nIH0+KSB7XHJcbiAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIFVQREFURSB0ZW1cclxuICAgICAgICAgICAgICAgICAgICBzZXQgaGFiaWxpdGFkYSA9IG5vdCBoYWJpbGl0YWRhXHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvPSQxIGFuZCBlbmM9JDJcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgKmAsXHJcbiAgICAgICAgICAgICAgICBbcGFyYW1zLm9wZXJhdGl2bywgcGFyYW1zLmVuY10pXHJcbiAgICAgICAgICAgICAgICAuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgICAgICAgICAgcmV0dXJuICdvayc7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdlbmN1ZXN0YXNfcHJvY2VzYW1pZW50b19wYXNhcicsXHJcbiAgICAgICAgcGFyYW1ldGVyczogW10sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOmFzeW5jIGZ1bmN0aW9uKGNvbnRleHQ6UHJvY2VkdXJlQ29udGV4dCwgX3BhcmFtczpDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzPHt9Pil7XHJcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCBwYXNhckVuY3Vlc3Rhc0FQcm9pZShjb250ZXh0LmNsaWVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdpbnRlcmNhbWJpYXJfZW5jdWVzdGFzJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOiBbXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ2VuYzEnLCByZWZlcmVuY2VzOiAndGVtJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICdjYW50SG9nMScsIHR5cGVOYW1lOiAnaW50ZWdlcicgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAnZW5jMicsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAnY2FudEhvZzInLCB0eXBlTmFtZTogJ2ludGVnZXInIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ3Bhc28nLCB0eXBlTmFtZTogJ2ludGVnZXInIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ2NvbmZpcm1hJywgdHlwZU5hbWU6ICdib29sZWFuJywgZGVmYXVsdFZhbHVlOiBmYWxzZSwgbGFiZWw6ICdDb25maXJtYSBpbnRlcmNhbWJpbyBkZSBsb3MgZGF0b3MgZW50cmUgbGFzIGVuY3Vlc3Rhcz8gJyB9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgcm9sZXM6IFsnY29vcl9wcm9jJywgJ3Byb2Nlc2FtaWVudG8nLCAnYWRtaW4nXSxcclxuICAgICAgICBwcm9ncmVzczogdHJ1ZSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246IGFzeW5jIGZ1bmN0aW9uIChjb250ZXh0OiBQcm9jZWR1cmVDb250ZXh0LCBwYXJhbXM6IENvcmVGdW5jdGlvblBhcmFtZXRlcnM8YW55Pikge1xyXG4gICAgICAgICAgICAvKipcclxuICAgICAgICAgICAgICogUGFyYSBjb250cm9sYXI6XHJcbiAgICAgICAgICAgICAqIC0gcXVlIGxhcyBob2dhcmVzLCBwZXJzb25hcywgZXRjIGVzdMOpbiBpbnRlcmNhbWJpYWRhcyBcclxuICAgICAgICAgICAgICogICogdGFudG8gZW4gZWwganNvblxyXG4gICAgICAgICAgICAgKiAgKiBjb21vIGVuIGxhcyBURHNcclxuICAgICAgICAgICAgICogLSBjb3NhcyBxdWUgc2UgY2FsY3VsYW4gcG9yIGxhIGFwcD8gY3VhbGVzPyAocmVzdW1lbl9lc3RhZG8sIHJlYSB5IG5vcmVhKVxyXG4gICAgICAgICAgICAgKi9cclxuXHJcbiAgICAgICAgICAgIGlmICghcGFyYW1zLmNvbmZpcm1hKSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIGNvbmZpcm3DsyBpbnRlcmNhbWJpbycpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKCFwYXJhbXMuZW5jMSB8fCAhcGFyYW1zLmVuYzIpIHtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRXJyb3IsIEZhbHRhIGluZ3Jlc2FyIHVuIG51bWVybyBkZSBlbmN1ZXN0YSEnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAocGFyYW1zLmVuYzEgPT0gcGFyYW1zLmVuYzIpIHtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRXJyb3IsIGVuYzEgeSBlbmMyIGRlYmVuIHNlciBkaXN0aW50b3MhJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKCFwYXJhbXMuY2FudEhvZzEpIHtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRXJyb3IsIENhbnRpZGFkIGRlIEhvZ2FyZXMgZGUgZW5jMSwgbm8gZXN0YSBpbmdyZXNhZG8hJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKCFwYXJhbXMuY2FudEhvZzIpIHtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRXJyb3IsIENhbnRpZGFkIGRlIEhvZ2FyZXMgZGUgZW5jMiwgbm8gZXN0YSBpbmdyZXNhZG8hJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gQ09OVFJPTEFSIFFVRSBOSU5HVU5BIERFIExBUyAyIGVuY3Vlc3RhcyBFU1RFIENBUkdBREEsIEFCSUVSVEEgRkFMVEFcclxuICAgICAgICAgICAgY29uc3QgT1BFUkFUSVZPID0gYXdhaXQgZ2V0T3BlcmF0aXZvQWN0dWFsKGNvbnRleHQpO1xyXG4gICAgICAgICAgICB2YXIgeyB1bmlkYWRfYW5hbGlzaXMsIHBrX2FncmVnYWRhIH0gPSAoYXdhaXQgZ2V0VUFQcmluY2lwYWwoY29udGV4dC5jbGllbnQsIE9QRVJBVElWTykpO1xyXG4gICAgICAgICAgICBjb25zdCBjYW50X2hvZ3MgPSAoYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgc2VsZWN0IHZpdmllbmRhLCBjb3VudCgqKW5oIGZyb20gaG9nYXJlcyB3aGVyZSBvcGVyYXRpdm89JDEgYW5kICh2aXZpZW5kYT0kMiBvciB2aXZpZW5kYT0kMylcclxuICAgICAgICAgICAgICAgIGdyb3VwIGJ5IHZpdmllbmRhIG9yZGVyIGJ5IHZpdmllbmRhXHJcbiAgICAgICAgICAgICAgICBgLCBbT1BFUkFUSVZPLCBwYXJhbXMuZW5jMSwgcGFyYW1zLmVuYzJdKS5mZXRjaEFsbCgpKS5yb3dzO1xyXG5cclxuICAgICAgICAgICAgdmFyIHBhcmFtX25oID0gW3BhcmFtcy5jYW50SG9nMSwgcGFyYW1zLmNhbnRIb2cyXTtcclxuICAgICAgICAgICAgY2FudF9ob2dzLmZvckVhY2goKHhlLCBpKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAocGFyYW1fbmhbaV0gIT09IHhlLm5oKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgeG1lbnMgPSBgRXJyb3IsIG5vIGNvaW5jaWRlIGxhIGNhbnRpZGFkIGRlIGhvZ2FyZXMgZGUgZW5jJHtpICsgMX1gO1xyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcih4bWVucyk7XHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIHZhciByZWdFbmMgPSAoYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICBzZWxlY3QgZW5jLCB0YXJlYV9hY3R1YWwsIGpzb25fZW5jdWVzdGEgZnJvbSB0ZW0gd2hlcmUgb3BlcmF0aXZvPSQxIGFuZCAoZW5jID0kMiBvciBlbmM9JDMpIG9yZGVyIGJ5IGVuY1xyXG4gICAgICAgICAgICBgLCBbT1BFUkFUSVZPLCBwYXJhbXMuZW5jMSwgcGFyYW1zLmVuYzJdKS5mZXRjaEFsbCgpKS5yb3dzO1xyXG5cclxuICAgICAgICAgICAgaWYgKHJlZ0VuYy5sZW5ndGggIT0gMikge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFcnJvciwgTm8gc2UgZW5jb250cmFyb24gMiBlbmN1ZXN0YXMnKVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLy8gbGltcGlhIGxhcyBURHMgIFxyXG4gICAgICAgICAgICAgICAgbGV0IFtlbmMxLCBlbmMyXSA9IFtyZWdFbmNbMF0sIHJlZ0VuY1sxXV1cclxuICAgICAgICAgICAgICAgIGlmIChwYXJhbXMucGFzbyA9PSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGBkZWxldGUgZnJvbSAke2NvbnRleHQuYmUuZGIucXVvdGVJZGVudCh1bmlkYWRfYW5hbGlzaXMpfSB3aGVyZSBvcGVyYXRpdm89JDEgYW5kICh2aXZpZW5kYT0kMiBPUiB2aXZpZW5kYT0kMylgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICwgW09QRVJBVElWTywgZW5jMS5lbmMsIGVuYzIuZW5jXVxyXG4gICAgICAgICAgICAgICAgICAgICkuZXhlY3V0ZSgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAocGFyYW1zLnBhc28gPT0gMikge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vc2ltdWxhIGd1YXJkYWRvXHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgc2ltdWxhckd1YXJkYWRvRGVFbmN1ZXN0YURlc2RlQXBwRXNjcml0b3Jpbyhjb250ZXh0LCBPUEVSQVRJVk8sIGVuYzEuZW5jLCBlbmMxLnRhcmVhX2FjdHVhbCwgZW5jMi5qc29uX2VuY3Vlc3RhKVxyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHNpbXVsYXJHdWFyZGFkb0RlRW5jdWVzdGFEZXNkZUFwcEVzY3JpdG9yaW8oY29udGV4dCwgT1BFUkFUSVZPLCBlbmMyLmVuYywgZW5jMi50YXJlYV9hY3R1YWwsIGVuYzEuanNvbl9lbmN1ZXN0YSlcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gKGBMaXN0byBwYXNvICR7cGFyYW1zLnBhc299LiBJbnRlcmNhbWJpbyByZWFsaXphZG8gZW50cmUgbGFzIGVuY3Vlc3RhcyAgJHtwYXJhbXMuZW5jMX0geSAke3BhcmFtcy5lbmMyfS4gUG9yIGZhdm9yIGNvbnNpc3RhIGxhIGVuY3Vlc3RhYClcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjogJ2VuY3Vlc3RhZG9yX2Rtc19tb3N0cmFyJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOiBbXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ29wZXJhdGl2bycsIHR5cGVOYW1lOiAndGV4dCcsIHJlZmVyZW5jZXM6IFwib3BlcmF0aXZvc1wiIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ2VuY3Vlc3RhZG9yJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgcm9sZXM6IFsnY29vcl9wcm9jJywgJ2Nvb3JfY2FtcG8nLCAnYWRtaW4nXSxcclxuICAgICAgICByZXN1bHRPazogJ21vc3RyYXJfZW5jdWVzdGFzX2FfYmxhbnF1ZWFyJyxcclxuICAgICAgICBjb3JlRnVuY3Rpb246IGFzeW5jIGZ1bmN0aW9uIChjb250ZXh0OiBQcm9jZWR1cmVDb250ZXh0LCBwYXJhbXM6IENvcmVGdW5jdGlvblBhcmFtZXRlcnM8eyBvcGVyYXRpdm86IElkT3BlcmF0aXZvLCBlbmN1ZXN0YWRvcjogc3RyaW5nIH0+KSB7XHJcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICBzZWxlY3QgKlxyXG4gICAgICAgICAgICAgICAgICAgIGZyb20gdGFyZWFzX3RlbVxyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2bz0kMSBhbmQgYXNpZ25hZG8gPSAkMiBhbmQgY2FyZ2Fkb19kbSBpcyBub3QgbnVsbFxyXG4gICAgICAgICAgICAgICAgICAgIG9yZGVyIGJ5IGNhcmdhZG9fZG1cclxuICAgICAgICAgICAgICAgIGAsXHJcbiAgICAgICAgICAgICAgICBbcGFyYW1zLm9wZXJhdGl2bywgcGFyYW1zLmVuY3Vlc3RhZG9yXSlcclxuICAgICAgICAgICAgICAgIC5mZXRjaEFsbCgpO1xyXG4gICAgICAgICAgICBpZiAocmVzdWx0LnJvd0NvdW50ID09IDApIHtcclxuICAgICAgICAgICAgICAgIHRocm93IEVycm9yKGBObyBzZSBlbmNvbnRyYXJvbiBlbmN1ZXN0YXMgY2FyZ2FkYXMgZW4gdW4gRE0gcGFyYSBlbCBvcGVyYXRpdm8gJHtwYXJhbXMub3BlcmF0aXZvfSwgZW5jdWVzdGFkb3IgJHtwYXJhbXMuZW5jdWVzdGFkb3J9YClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4geyByb3dzOiByZXN1bHQucm93cywgb3BlcmF0aXZvOiBwYXJhbXMub3BlcmF0aXZvIH07XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdkbV9ibGFucXVlYXInLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6IFtcclxuICAgICAgICAgICAgeyBuYW1lOiAnb3BlcmF0aXZvJywgdHlwZU5hbWU6ICd0ZXh0JywgcmVmZXJlbmNlczogXCJvcGVyYXRpdm9zXCIgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAndG9rZW4nLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgXSxcclxuICAgICAgICByb2xlczogWydjb29yX3Byb2MnLCAnY29vcl9jYW1wbycsICdhZG1pbiddLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjogYXN5bmMgZnVuY3Rpb24gKGNvbnRleHQ6IFByb2NlZHVyZUNvbnRleHQsIHBhcmFtczogQ29yZUZ1bmN0aW9uUGFyYW1ldGVyczx7IG9wZXJhdGl2bzogSWRPcGVyYXRpdm8sIHRva2VuOiBzdHJpbmcgfT4pIHtcclxuICAgICAgICAgICAgdmFyIGJlID0gY29udGV4dC5iZTtcclxuICAgICAgICAgICAgbGV0IHRhcmVhc1RlbVJlc3VsdCA9IGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIFVQREFURSB0YXJlYXNfdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0IGNhcmdhZG9fZG0gPSBudWxsLCBvcGVyYWNpb24gPSAkMywgZXN0YWRvID0gJDRcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm89JDEgYW5kIGNhcmdhZG9fZG0gPSAkMlxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAqYCxcclxuICAgICAgICAgICAgICAgIFtwYXJhbXMub3BlcmF0aXZvLCBwYXJhbXMudG9rZW4sIE9QRVJBQ0lPTl9QUkVQQVJBUl9ERVNDQVJHQSwgRVNUQURPX1BPU1RFUklPUl9ERVNDQVJHQV0pXHJcbiAgICAgICAgICAgICAgICAuZmV0Y2hBbGwoKTtcclxuICAgICAgICAgICAgaWYgKHRhcmVhc1RlbVJlc3VsdC5yb3dDb3VudCA9PSAwKSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcignTm8gc2UgYmxhbnF1ZcOzIG5pbmd1bmEgZW5jdWVzdGEnKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGZvciAobGV0IHR0IG9mIHRhcmVhc1RlbVJlc3VsdC5yb3dzKSB7XHJcbiAgICAgICAgICAgICAgICB0dC5yZXN1bHRfYmxhbnF1ZW8gPSBgZW5jICR7dHQuZW5jfSBzZSBibGFucXVlw7MgY29ycmVjdGFtZW50ZS5gO1xyXG4gICAgICAgICAgICAgICAgbGV0IHJlc3VsdEJhY2t1cCA9IGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgICAgICBVUERBVEUgdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldCBqc29uX2VuY3Vlc3RhID0ganNvbl9iYWNrdXAsIGZlY2hhX21vZGlmX2VuY3Vlc3RhID0gZmVjaGFfYmFja3VwXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2bz0kMSBhbmQgZW5jPSQyIGFuZCBmZWNoYV9iYWNrdXAgPiBjb2FsZXNjZShmZWNoYV9tb2RpZl9lbmN1ZXN0YSwgJzE5MDAtMDEtMDEnKSBhbmQganNvbl9iYWNrdXAgaXMgbm90IG51bGxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nICpgLFxyXG4gICAgICAgICAgICAgICAgICAgIFt0dC5vcGVyYXRpdm8sIHR0LmVuY10pXHJcbiAgICAgICAgICAgICAgICAgICAgLmZldGNoT25lUm93SWZFeGlzdHMoKTtcclxuICAgICAgICAgICAgICAgIGlmIChyZXN1bHRCYWNrdXAucm93Q291bnQpIHtcclxuICAgICAgICAgICAgICAgICAgICB0dC5yZXN1bHRfYmxhbnF1ZW8gKz0gYCBTZSByZXN0YWJsZWNpw7MgZWwgYmFja3VwIGNvbiBmZWNoYSAke3Jlc3VsdEJhY2t1cC5yb3cuZmVjaGFfYmFja3VwLnRvWW1kSG1zKCl9LmBcclxuICAgICAgICAgICAgICAgICAgICB2YXIgeyBwYXJhbXM6IHF1ZXJ5UGFyYW1zLCBzZXR0ZXJzIH0gPSBnZXRTZXR0ZXJzQW5kUGFyYW1ldGVyc0ZvclJlYU5vUmVhUmVzdW1lbkVzdGFkbyh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmVhOiB0dC50YXJlYSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzcHVlc3Rhc1VBUHJpbmNpcGFsOiByZXN1bHRCYWNrdXAucm93Lmpzb25fZW5jdWVzdGEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldHRlcnM6IFtdLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXM6IFt0dC5vcGVyYXRpdm8sIHR0LmVuYywgdHQudGFyZWFdLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkZXN0aW5vOiAndGFyZWFzX3RlbSdcclxuICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBgdXBkYXRlIHRhcmVhc190ZW1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldCAke3NldHRlcnMuam9pbignLCcpfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvPSAkMSBhbmQgZW5jID0gJDIgYW5kIHRhcmVhID0gJDNcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAnb2snYFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5UGFyYW1zXHJcbiAgICAgICAgICAgICAgICAgICAgKS5mZXRjaFVuaXF1ZVJvdygpO1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHNpbXVsYXJHdWFyZGFkb0RlRW5jdWVzdGFEZXNkZUFwcEVzY3JpdG9yaW8oY29udGV4dCwgcmVzdWx0QmFja3VwLnJvdy5vcGVyYXRpdm8sIHJlc3VsdEJhY2t1cC5yb3cuZW5jLCB0dC50YXJlYSwgcmVzdWx0QmFja3VwLnJvdy5qc29uX2VuY3Vlc3RhKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiB0YXJlYXNUZW1SZXN1bHQucm93cztcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjogJ21vZG9fZG1fZGVmZWN0b19vYnRlbmVyJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOiBbXHJcbiAgICAgICAgXSxcclxuICAgICAgICB1bmxvZ2dlZDogdHJ1ZSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246IGFzeW5jIGZ1bmN0aW9uIChjb250ZXh0OiBQcm9jZWR1cmVDb250ZXh0LCBfcGFyYW1ldGVyczogQ29yZUZ1bmN0aW9uUGFyYW1ldGVyczx7fT4pIHtcclxuICAgICAgICAgICAgY29uc3QgeyBjbGllbnQgfSA9IGNvbnRleHQ7XHJcbiAgICAgICAgICAgIGNvbnN0IG1vZG9EbURlZmVjdG8gPSAoYXdhaXQgKGNsaWVudC5xdWVyeShgc2VsZWN0IG1vZG9fZG1fZGVmZWN0byBmcm9tIHBhcmFtZXRyb3Mgd2hlcmUgdW5pY29fcmVnaXN0cm9gLCBbXSkuZmV0Y2hVbmlxdWVWYWx1ZSgpKSkudmFsdWU7XHJcbiAgICAgICAgICAgIHJldHVybiBtb2RvRG1EZWZlY3RvO1xyXG4gICAgICAgIH1cclxuICAgIH0sIHtcclxuICAgICAgICBhY3Rpb246ICdtb2RvX2FwcF9nZXQnLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6IFtdLFxyXG4gICAgICAgIHVubG9nZ2VkOiB0cnVlLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjogYXN5bmMgZnVuY3Rpb24gKGNvbnRleHQ6IFByb2NlZHVyZUNvbnRleHQsIF9wYXJhbWV0ZXJzOiBDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzPHt9Pikge1xyXG4gICAgICAgICAgICBjb25zdCB7IGJlIH0gPSBjb250ZXh0O1xyXG4gICAgICAgICAgICByZXR1cm4gZ2V0TW9kb0J5UG9saWN5KGJlKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjogJ29wZXJhdGl2b19taWdyYXInLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6IFtcclxuICAgICAgICAgICAgeyBuYW1lOiAnb3BlcmF0aXZvX29yaWdlbicsIHR5cGVOYW1lOiAndGV4dCcsIHJlZmVyZW5jZXM6ICdvcGVyYXRpdm9zJyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICdvcGVyYXRpdm9fZGVzdGlubycsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAnc2NoZW1hX25hbWUnLCB0eXBlTmFtZTogJ3RleHQnLCBsYWJlbDogJ25vbWJyZSBkZSBzY2hlbWEnIH0sXHJcbiAgICAgICAgXSxcclxuICAgICAgICByZXN1bHRPazogJ2Rvd25sb2FkX3NxbCcsXHJcbiAgICAgICAgcHJvY2VlZExhYmVsOiAnbWlncmFyJyxcclxuICAgICAgICByb2xlczogWydhZG1pbiddLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjogYXN5bmMgZnVuY3Rpb24gKGNvbnRleHQ6IFByb2NlZHVyZUNvbnRleHQsIHBhcmFtczogeyBvcGVyYXRpdm9fb3JpZ2VuOiBzdHJpbmcsIG9wZXJhdGl2b19kZXN0aW5vOiBzdHJpbmcsIHNjaGVtYV9uYW1lOiBzdHJpbmcgfSkge1xyXG4gICAgICAgICAgICBjb25zdCB0YWJsZXMgPSBhd2FpdCBQcm9taXNlLmFsbChbJ29wZXJhdGl2b3MnLCAndGFyZWFzJywgJ3VuaWRhZF9hbmFsaXNpcycsICdjYXNpbGxlcm9zJ10ubWFwKGFzeW5jIHRhYmxlTmFtZSA9PiAoe1xyXG4gICAgICAgICAgICAgICAgbmFtZTogdGFibGVOYW1lLFxyXG4gICAgICAgICAgICAgICAgcmVzdWx0OiBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgc2VsZWN0ICogZnJvbSAke2NvbnRleHQuYmUuZGIucXVvdGVJZGVudCh0YWJsZU5hbWUpfSB3aGVyZSBvcGVyYXRpdm8gPSAkMWAsIFtwYXJhbXMub3BlcmF0aXZvX29yaWdlbl0pLmZldGNoQWxsKClcclxuICAgICAgICAgICAgfSkpKTtcclxuXHJcbiAgICAgICAgICAgIHRhYmxlcy5mb3JFYWNoKChfLCBpKSA9PiB0YWJsZXNbaV0ucmVzdWx0LnJvd3MuZm9yRWFjaChyb3cgPT4gcm93Lm9wZXJhdGl2byA9IHBhcmFtcy5vcGVyYXRpdm9fZGVzdGlubykpO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgZGlzYWJsZUNhc2lsbGVyb3NGSyA9IGBcclxuICAgICAgICAgICAgICAgIC0tIERlc2hhYmlsaXRhciB2YWxpZGFjacOzbiBkZSBGSyB5IHRyaWdnZXJzIGVuIGNhc2lsbGVyb3NcclxuICAgICAgICAgICAgICAgIEFMVEVSIFRBQkxFICR7Y29udGV4dC5iZS5kYi5xdW90ZUlkZW50KHBhcmFtcy5zY2hlbWFfbmFtZSl9LmNhc2lsbGVyb3MgRElTQUJMRSBUUklHR0VSIEFMTDtcclxuICAgICAgICAgICAgYDtcclxuICAgICAgICAgICAgY29uc3QgZW5hYmxlQ2FzaWxsZXJvc0ZLID0gYFxyXG4gICAgICAgICAgICAgICAgLS0gSGFiaWxpdGFyIHZhbGlkYWNpw7NuIGRlIEZLIHkgdHJpZ2dlcnMgZW4gY2FzaWxsZXJvc1xyXG4gICAgICAgICAgICAgICAgQUxURVIgVEFCTEUgJHtjb250ZXh0LmJlLmRiLnF1b3RlSWRlbnQocGFyYW1zLnNjaGVtYV9uYW1lKX0uY2FzaWxsZXJvcyBFTkFCTEUgVFJJR0dFUiBBTEw7XHJcbiAgICAgICAgICAgIGA7XHJcbiAgICAgICAgICAgIGNvbnN0IGJ1aWxkSW5zZXJ0cyA9IChxdWVyeTogeyBuYW1lOiBzdHJpbmcsIHJlc3VsdDogUmVzdWx0Um93cyB9KSA9PiBxdWVyeS5yZXN1bHQucm93cy5tYXAocm93ID0+XHJcbiAgICAgICAgICAgICAgICAnaW5zZXJ0IGludG8gJyArIGNvbnRleHQuYmUuZGIucXVvdGVJZGVudChwYXJhbXMuc2NoZW1hX25hbWUpICsgJy4nICsgY29udGV4dC5iZS5kYi5xdW90ZUlkZW50KHF1ZXJ5Lm5hbWUpICtcclxuICAgICAgICAgICAgICAgICcgKCcgKyBxdWVyeS5yZXN1bHQuZmllbGRzLm1hcCgoZjogeyBuYW1lOiBzdHJpbmcgfSkgPT4gY29udGV4dC5iZS5kYi5xdW90ZUlkZW50KGYubmFtZSkpLmpvaW4oJywgJykgKyAnKScgK1xyXG4gICAgICAgICAgICAgICAgJyB2YWx1ZXMgKCcgKyBxdWVyeS5yZXN1bHQuZmllbGRzLm1hcCgoZjogeyBuYW1lOiBzdHJpbmcgfSkgPT4gY29udGV4dC5iZS5kYi5xdW90ZU51bGxhYmxlKHJvd1tmLm5hbWVdKSkuam9pbignLCAnKSArICcpOydcclxuICAgICAgICAgICAgKS5qb2luKCdcXG4nKTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGluc2VydEFyZWFzID0gYFxyXG4gICAgICAgICAgICAgICAgaW5zZXJ0IGludG8gYXJlYXMgKG9wZXJhdGl2bywgYXJlYSlcclxuICAgICAgICAgICAgICAgICAgICBzZWxlY3QgJHtjb250ZXh0LmJlLmRiLnF1b3RlTnVsbGFibGUocGFyYW1zLm9wZXJhdGl2b19kZXN0aW5vKX0gYXMgb3BlcmF0aXZvLCBhcmVhXHJcbiAgICAgICAgICAgICAgICAgICAgZnJvbSBhcmVhcyB3aGVyZSBvcGVyYXRpdm8gPSAke2NvbnRleHQuYmUuZGIucXVvdGVOdWxsYWJsZShwYXJhbXMub3BlcmF0aXZvX29yaWdlbil9O1xyXG4gICAgICAgICAgICBgXHJcblxyXG4gICAgICAgICAgICBjb25zdCBpbnNlcnRUYXJlYXNBcmVhcyA9IGBcclxuICAgICAgICAgICAgICAgIGluc2VydCBpbnRvIHRhcmVhc19hcmVhcyAob3BlcmF0aXZvLHRhcmVhLCBhcmVhKVxyXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdCAke2NvbnRleHQuYmUuZGIucXVvdGVOdWxsYWJsZShwYXJhbXMub3BlcmF0aXZvX2Rlc3Rpbm8pfSBhcyBvcGVyYXRpdm8sIHRhcmVhLCBhcmVhXHJcbiAgICAgICAgICAgICAgICAgICAgZnJvbSB0YXJlYXNfYXJlYXNcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm8gPSAke2NvbnRleHQuYmUuZGIucXVvdGVOdWxsYWJsZShwYXJhbXMub3BlcmF0aXZvX29yaWdlbil9O1xyXG4gICAgICAgICAgICBgO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgaW5zZXJ0VGVtID0gYFxyXG4gICAgICAgICAgICAgICAgaW5zZXJ0IGludG8gdGVtIChvcGVyYXRpdm8sIGFyZWEsIGVuYywgZG9taW5pbywgaGFiaWxpdGFkYSlcclxuICAgICAgICAgICAgICAgICAgICBzZWxlY3QgJHtjb250ZXh0LmJlLmRiLnF1b3RlTnVsbGFibGUocGFyYW1zLm9wZXJhdGl2b19kZXN0aW5vKX0gYXMgb3BlcmF0aXZvLCBhcmVhLCAoYXJlYSB8fCBlbmM6OnRleHQpIGVuYywgY2FzZSB3aGVuIGVuY3MuZW5jIDwgMTA2IHRoZW4gMyBlbHNlIDUgZW5kIGFzIGRvbWluaW8sIHRydWUgYXMgaGFiaWxpdGFkYVxyXG4gICAgICAgICAgICAgICAgICAgIGZyb20gYXJlYXMgam9pbiAoU0VMRUNUIGdlbmVyYXRlX3NlcmllcygxMDAsIDExMCkgZW5jKSBlbmNzXHJcbiAgICAgICAgICAgICAgICAgICAgb24gb3BlcmF0aXZvID0gJHtjb250ZXh0LmJlLmRiLnF1b3RlTnVsbGFibGUocGFyYW1zLm9wZXJhdGl2b19vcmlnZW4pfTtcclxuICAgICAgICAgICAgYDtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHNxbCA9IGBzZXQgc2VhcmNoX3BhdGggPSBcIiR7cGFyYW1zLnNjaGVtYV9uYW1lfVwiO2AgKyBgXFxuXFxuYFxyXG4gICAgICAgICAgICAgICAgKyBkaXNhYmxlQ2FzaWxsZXJvc0ZLXHJcbiAgICAgICAgICAgICAgICArIHRhYmxlcy5tYXAocXVlcnkgPT4gYnVpbGRJbnNlcnRzKHF1ZXJ5KSkuam9pbignXFxuXFxuJylcclxuICAgICAgICAgICAgICAgICsgJ1xcblxcbicgKyBpbnNlcnRBcmVhc1xyXG4gICAgICAgICAgICAgICAgKyAnXFxuXFxuJyArIGluc2VydFRhcmVhc0FyZWFzXHJcbiAgICAgICAgICAgICAgICArICdcXG5cXG4nICsgaW5zZXJ0VGVtXHJcbiAgICAgICAgICAgICAgICArICdcXG5cXG4nICsgZW5hYmxlQ2FzaWxsZXJvc0ZLO1xyXG4gICAgICAgICAgICByZXR1cm4gc3FsO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnZW5jdWVzdGFfY2FwYV9hX3Byb2RfcGFzYXInLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6IFtcclxuICAgICAgICAgICAgeyBuYW1lOiAnb3BlcmF0aXZvJywgdHlwZU5hbWU6ICd0ZXh0JywgcmVmZXJlbmNlczogJ29wZXJhdGl2b3MnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ2VuYycsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIHJvbGVzOiBbJ2FkbWluJ10sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOiBhc3luYyBmdW5jdGlvbiAoY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCwgcGFyYW1ldGVyczogQ29yZUZ1bmN0aW9uUGFyYW1ldGVyczx7IG9wZXJhdGl2bzogSWRPcGVyYXRpdm8sIGVuYzogc3RyaW5nIH0+KSB7XHJcbiAgICAgICAgICAgIChhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShcclxuICAgICAgICAgICAgICAgIGB1cGRhdGUgdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0IGVuY19hdXRvZ2VuZXJhZG9fZG0gPSBlbmNfYXV0b2dlbmVyYWRvX2RtX2NhcGEsIGVuY19hdXRvZ2VuZXJhZG9fZG1fY2FwYSA9IG51bGxcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm8gPSAkMSBhbmQgZW5jID0gJDIgYW5kIGVuY19hdXRvZ2VuZXJhZG9fZG1fY2FwYSBpcyBub3QgbnVsbFxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAqYCxcclxuICAgICAgICAgICAgICAgIFtwYXJhbWV0ZXJzLm9wZXJhdGl2bywgcGFyYW1ldGVycy5lbmNdXHJcbiAgICAgICAgICAgICkuZmV0Y2hVbmlxdWVSb3coKSkucm93O1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIGBzZSBtb3Zpw7MgbGEgZW5jdWVzdGEgJHtwYXJhbWV0ZXJzLmVuY30gYSBwcm9kdWNjacOzbmA7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5dOyJdfQ==
2047
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvY2VkdXJlcy1kbWVuY3UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VydmVyL3Byb2NlZHVyZXMtZG1lbmN1LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBQUEsWUFBWSxDQUFDOzs7SUFnZGIsb0RBaUNDO0lBN2VELGtDQUFrQztJQUNsQyxpREFBK0I7SUFLL0IseURBQTREO0lBRTVELCtDQUF3RDtJQUN4RCwyQkFBb0M7SUFFcEMsZ0RBQWdEO0lBR2hELHlEQUF3RDtJQUN4RCxxQ0FBZ0M7SUFFaEMsMkNBQWtEO0lBQ2xELDZDQUErQztJQUUvQyxJQUFJLElBQUksR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDM0IsSUFBSSxRQUFRLEdBQUcsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBRXBDLElBQUksWUFBWSxHQUFHLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUUzQyxNQUFNLGFBQWEsR0FBRyxNQUFNLENBQUM7SUFFN0IsTUFBTSxzQkFBc0IsR0FBRyxHQUFHLENBQUM7SUFDbkMsTUFBTSx5QkFBeUIsR0FBRyxHQUFHLENBQUM7SUFDdEMsTUFBTSx3QkFBd0IsR0FBRyxRQUFRLENBQUM7SUFDMUMsTUFBTSwyQkFBMkIsR0FBRyxXQUFXLENBQUM7SUFDaEQsTUFBTSxlQUFlLEdBQUcsQ0FBQyxDQUFDO0lBSTFCLElBQUksZUFBZ0MsQ0FBQztJQUNyQyxJQUFJLGNBQWMsR0FBRyxHQUFHLENBQUE7SUFFakIsTUFBTSxrQkFBa0IsR0FBRyxDQUFDLEdBQW9CLEVBQUUsRUFBRSxDQUN2RCxlQUFlLEdBQUcsR0FBRyxDQUFDO0lBRGIsUUFBQSxrQkFBa0Isc0JBQ0w7SUFFbkIsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLEdBQVcsRUFBRSxFQUFFLENBQzVDLGNBQWMsR0FBRyxHQUFHLENBQUM7SUFEWixRQUFBLGdCQUFnQixvQkFDSjtJQUV6QixJQUFB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QUFHLE1BQU07c0JBQzNELG1CQUFtQjtzQkFDbkIsTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7c0JBQ3JELE1BQU0sR0FBRyxXQUFXO3NCQUNwQixNQUFNLEdBQUcsaUJBQWlCO3NCQUMxQixNQUFNLEdBQUcsU0FBUztzQkFDbEIsTUFBTSxHQUFHLGtCQUFrQixDQUFDO2dCQUNsQyxPQUFPLEdBQUcsQ0FBQztZQUNmLENBQUM7U0FDSjtRQUNEO1lBQ0ksTUFBTSxFQUFFLDRCQUE0QjtZQUNwQyxVQUFVLEVBQUU7Z0JBQ1IsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRTtnQkFDakUsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUU7YUFDcEM7WUFDRCxLQUFLLEVBQUUsQ0FBQyxPQUFPLENBQUM7WUFDaEIsWUFBWSxFQUFFLEtBQUssV0FBVyxPQUF5QixFQUFFLFVBQTJFO2dCQUNoSSxDQUFDLE1BQU0sT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQ3ZCOzs7Z0NBR2dCLEVBQ2hCLENBQUMsVUFBVSxDQUFDLFNBQVMsRUFBRSxVQUFVLENBQUMsR0FBRyxDQUFDLENBQ3pDLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUM7Z0JBRXhCLE9BQU8sd0JBQXdCLFVBQVUsQ0FBQyxHQUFHLGVBQWUsQ0FBQztZQUNqRSxDQUFDO1NBQ0o7S0FDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XHJcblxyXG5pbXBvcnQgeyBQcm9jZWR1cmVEZWYsIFRhYmxlRGVmaW5pdGlvbiwgQ2xpZW50LCBUYWJsZURlZmluaXRpb25zIH0gZnJvbSBcIi4vdHlwZXMtZG1lbmN1XCI7XHJcbmltcG9ydCB7IFByb2NlZHVyZUNvbnRleHQsIENvcmVGdW5jdGlvblBhcmFtZXRlcnMsIEZvcmVpZ25LZXkgfSBmcm9tIFwibWV0YS1lbmNcIjtcclxuaW1wb3J0ICogYXMgbGlrZUFyIGZyb20gXCJsaWtlLWFyXCI7XHJcbmV4cG9ydCAqIGZyb20gXCIuL3R5cGVzLWRtZW5jdVwiO1xyXG5pbXBvcnQgeyBJZFVuaWRhZEFuYWxpc2lzLCBVbmlkYWRBbmFsaXNpcywgRXN0YWRvQWNjaW9uLCBJZEVuYywgSWRUYXJlYSwgUmVzcHVlc3Rhc1JhaXosIElkT3BlcmF0aXZvLCBJZENhcmdhLCBNb2RvRE0gfSBmcm9tIFwiLi4vdW5sb2dnZWQvdGlwb3NcIjtcclxuXHJcbmltcG9ydCB7IE9wZXJhdGl2b0dlbmVyYXRvciB9IGZyb20gXCJwcm9jZXNhbWllbnRvXCI7XHJcblxyXG5pbXBvcnQgeyBqc29uLCBqc29ubywgUmVzdWx0Um93cyB9IGZyb20gXCJwZy1wcm9taXNlLXN0cmljdFwiO1xyXG5cclxuaW1wb3J0IHsgY2hhbmdpbmcsIGRhdGUsIGNvYWxlc2NlIH0gZnJvbSAnYmVzdC1nbG9iYWxzJztcclxuaW1wb3J0IHsgcHJvbWlzZXMgYXMgZnMgfSBmcm9tIFwiZnNcIjtcclxuXHJcbmltcG9ydCAqIGFzIEV4cHJlc2lvblBhcnNlciBmcm9tICdleHByZS1wYXJzZXInO1xyXG5pbXBvcnQgeyB0YXJlYXMgfSBmcm9tIFwiLi90YWJsZS10YXJlYXNcIjtcclxuaW1wb3J0IHsgcHJlcGVuZExpc3RlbmVyIH0gZnJvbSBcInByb2Nlc3NcIjtcclxuaW1wb3J0IHsgZ2V0RGlhc0FQYXNhclF1ZXJ5IH0gZnJvbSBcIi4vdGFibGUtdGFyZWFzX3RlbVwiO1xyXG5pbXBvcnQgeyBlcnJvciB9IGZyb20gXCJjb25zb2xlXCI7XHJcbmltcG9ydCB7IENvbnRleHQgfSBmcm9tIFwidm1cIjtcclxuaW1wb3J0IHsgZXhwZWN0ZWQsIHVuZXhwZWN0ZWQgfSBmcm9tIFwiY2FzdC1lcnJvclwiO1xyXG5pbXBvcnQgeyBnZXRNb2RvQnlQb2xpY3kgfSBmcm9tIFwiLi9hcHAtZG1lbmN1XCI7XHJcblxyXG52YXIgUGF0aCA9IHJlcXVpcmUoJ3BhdGgnKTtcclxudmFyIHNxbFRvb2xzID0gcmVxdWlyZSgnc3FsLXRvb2xzJyk7XHJcblxyXG52YXIgZGlzY3JlcGFuY2VzID0gcmVxdWlyZSgnZGlzY3JlcGFuY2VzJyk7XHJcblxyXG5jb25zdCBmb3JtUHJpbmNpcGFsID0gJ0Y6RjEnO1xyXG5cclxuY29uc3QgRVNUQURPX1BPU1RFUklPUl9DQVJHQSA9ICdDJztcclxuY29uc3QgRVNUQURPX1BPU1RFUklPUl9ERVNDQVJHQSA9ICdEJztcclxuY29uc3QgT1BFUkFDSU9OX1BSRVBBUkFSX0NBUkdBID0gJ2Nhcmdhcic7XHJcbmNvbnN0IE9QRVJBQ0lPTl9QUkVQQVJBUl9ERVNDQVJHQSA9ICdkZXNjYXJnYXInO1xyXG5jb25zdCBERUZBVUxUX0RPTUlOSU8gPSAzO1xyXG5cclxuZXhwb3J0IHR5cGUgZ2VuZXJhcklkRW5jRnVuID0gKGFyZWE6IG51bWJlciwgaW5kZXg6IG51bWJlcikgPT4gSWRFbmNcclxuXHJcbnZhciBnZW5lcmFySWRFbmNGdW46IGdlbmVyYXJJZEVuY0Z1bjtcclxudmFyIG1heEFFbmNQb3JBcmVhID0gOTk5XHJcblxyXG5leHBvcnQgY29uc3Qgc2V0R2VuZXJhcklkRW5jRnVuID0gKGZ1bjogZ2VuZXJhcklkRW5jRnVuKSA9PlxyXG4gICAgZ2VuZXJhcklkRW5jRnVuID0gZnVuO1xyXG5cclxuZXhwb3J0IGNvbnN0IHNldE1heEVuY1BvckFyZWEgPSAobWF4OiBudW1iZXIpID0+XHJcbiAgICBtYXhBRW5jUG9yQXJlYSA9IG1heDtcclxuXHJcbnNldEdlbmVyYXJJZEVuY0Z1bigoYXJlYTogbnVtYmVyLCBudW1FbmM6IG51bWJlcikgPT4gYXJlYS50b1N0cmluZygpICsgbnVtRW5jLnRvU3RyaW5nKCkucGFkU3RhcnQobWF4QUVuY1BvckFyZWEudG9TdHJpbmcoKS5sZW5ndGgsICcwJykgYXMgdW5rbm93biBhcyBJZEVuYyk7XHJcblxyXG5zZXRNYXhFbmNQb3JBcmVhKDk5OSk7XHJcblxyXG5hc3luYyBmdW5jdGlvbiBnZW5lcmFyTnVldm9JZEVuYyhjb250ZXh0OiBQcm9jZWR1cmVDb250ZXh0LCBvcGVyYXRpdm86IElkT3BlcmF0aXZvLCBhcmVhOiBudW1iZXIsIG1heEFFbmNQb3JBcmVhOiBudW1iZXIpIHtcclxuICAgIGNvbnN0IHNpZ3VpZW50ZU51bWVyb0VuY3Vlc3RhID0gKGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICBTRUxFQ1Qgb2J0ZW5lcl9zaWd1aWVudGVfY29udGFkb3JfYXJlYSgkMSwkMiwkMykgQVMgbmV4dF9jb3VudGVyO1xyXG4gICAgYCwgW29wZXJhdGl2bywgYXJlYSwgbWF4QUVuY1BvckFyZWFdKS5mZXRjaFVuaXF1ZVZhbHVlKCkpLnZhbHVlO1xyXG4gICAgcmV0dXJuIGdlbmVyYXJJZEVuY0Z1bihhcmVhLCBzaWd1aWVudGVOdW1lcm9FbmN1ZXN0YSk7XHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBnZXRPcGVyYXRpdm9BY3R1YWwgPSBhc3luYyAoY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCkgPT4ge1xyXG4gICAgdmFyIGJlID0gY29udGV4dC5iZTtcclxuICAgIHZhciBvcGVyYXRpdm8gPSAoYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoXHJcbiAgICAgICAgYHNlbGVjdCBvcGVyYXRpdm9cclxuICAgICAgICAgICAgZnJvbSBwYXJhbWV0cm9zXHJcbiAgICAgICAgICAgIHdoZXJlIHVuaWNvX3JlZ2lzdHJvYFxyXG4gICAgICAgICwgW11cclxuICAgICkuZmV0Y2hVbmlxdWVWYWx1ZSgpKS52YWx1ZVxyXG4gICAgaWYgKG9wZXJhdGl2bykge1xyXG4gICAgICAgIHJldHVybiBvcGVyYXRpdm9cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhyb3cgRXJyb3IoJ25vIHNlIGNvbmZpZ3Vyw7MgdW4gb3BlcmF0aXZvIGVuIGxhIHRhYmxhIHBhcsOhbWV0cm9zJyk7XHJcbiAgICB9XHJcbn07XHJcblxyXG5hc3luYyBmdW5jdGlvbiBnZXREZWZhdWx0VGFyZWEoY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCwgb3BlcmF0aXZvOiBJZE9wZXJhdGl2bykge1xyXG4gICAgcmV0dXJuIChhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgc2VsZWN0ICogXHJcbiAgICAgICAgICAgIGZyb20gdGFyZWFzIFxyXG4gICAgICAgICAgICB3aGVyZSBlc19pbmljaWFsIGFuZCBvcGVyYXRpdm8gPSAkMVxyXG4gICAgYCwgW29wZXJhdGl2b10pLmZldGNoVW5pcXVlUm93KCkpLnJvdztcclxufVxyXG5cclxuYXN5bmMgZnVuY3Rpb24gZ2V0T3BlcmF0aXZvUGVybWl0ZUdlbmVyYXJNdWVzdHJhKGNsaWVudDogQ2xpZW50LCBvcGVyYXRpdm86IElkT3BlcmF0aXZvKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICByZXR1cm4gKGF3YWl0IGNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgc2VsZWN0IHBlcm1pdGVfZ2VuZXJhcl9tdWVzdHJhIFxyXG4gICAgICAgICAgICBmcm9tIG9wZXJhdGl2b3MgXHJcbiAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2byA9ICQxXHJcbiAgICBgLCBbb3BlcmF0aXZvXSkuZmV0Y2hVbmlxdWVWYWx1ZSgpKS52YWx1ZTtcclxufVxyXG5cclxuYXN5bmMgZnVuY3Rpb24gcGVyc2lzdGlyRW5jdWVzdGFBdXRvZ2VuZXJhZGFFbkRNKGNvbnRleHQ6IFByb2NlZHVyZUNvbnRleHQsIE9QRVJBVElWTzogSWRPcGVyYXRpdm8sIGFyZWE6IG51bWJlciwgZW5jQXV0b2dlbmVyYWRvRG06IHN0cmluZywgdG9rZW46IHN0cmluZywgcmVzcHVlc3Rhc1JhaXo6IFJlc3B1ZXN0YXNSYWl6LCByZWNlcGNpb25pc3RhOiBzdHJpbmcsIGFzaWduYWRvOiBzdHJpbmcsIG1vZG9fZG06IE1vZG9ETSwgY2FtYmlhX21vZG9fZG06IGJvb2xlYW4pOiBQcm9taXNlPElkRW5jPiB7XHJcbiAgICBsZXQgaWRFbmMgPSBudWxsO1xyXG4gICAgdmFyIHBlcm1pdGVfZ2VuZXJhcl9tdWVzdHJhID0gYXdhaXQgZ2V0T3BlcmF0aXZvUGVybWl0ZUdlbmVyYXJNdWVzdHJhKGNvbnRleHQuY2xpZW50LCBPUEVSQVRJVk8pO1xyXG4gICAgaWYgKHBlcm1pdGVfZ2VuZXJhcl9tdWVzdHJhKSB7XHJcbiAgICAgICAgY29uc3QgYXV0b2dlbmVyYWRvRmllbGQgPSBtb2RvX2RtID09ICdwcm9kdWMnID8gJ2VuY19hdXRvZ2VuZXJhZG9fZG0nIDogJ2VuY19hdXRvZ2VuZXJhZG9fZG1fY2FwYSc7XHJcbiAgICAgICAgY29uc3QgcmVzdWx0VXBkYXRlID0gYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICBVUERBVEUgdGVtIFxyXG4gICAgICAgICAgICAgICAgc2V0IChqc29uX2JhY2t1cCwganNvbl9lbmN1ZXN0YSwgZmVjaGFfYmFja3VwKSA9IFxyXG4gICAgICAgICAgICAgICAgICAgICgkNCwgJDUsIGN1cnJlbnRfdGltZXN0YW1wKVxyXG4gICAgICAgICAgICAgICAgd2hlcmUgKG9wZXJhdGl2byA9ICQxIGFuZCAke2NvbnRleHQuYmUuZGIucXVvdGVJZGVudChhdXRvZ2VuZXJhZG9GaWVsZCl9ID0gJDIgYW5kIHRva2VuX2F1dG9nZW5lcmFkb19kbSA9ICQzKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuaW5nICpcclxuICAgICAgICBgLCBbT1BFUkFUSVZPLCBlbmNBdXRvZ2VuZXJhZG9EbSwgdG9rZW4sIHJlc3B1ZXN0YXNSYWl6LCByZXNwdWVzdGFzUmFpel0pLmZldGNoT25lUm93SWZFeGlzdHMoKTtcclxuICAgICAgICAvLyBoYWdvIGluc2VydCBwb3JxdWUgbm8gZXhpc3RlIGVuIHRlbVxyXG4gICAgICAgIGNvbnN0IGRlZmF1bHRUYXJlYSA9IGF3YWl0IGdldERlZmF1bHRUYXJlYShjb250ZXh0LCBPUEVSQVRJVk8pO1xyXG4gICAgICAgIGlmIChyZXN1bHRVcGRhdGUucm93Q291bnQgPT0gMCkge1xyXG4gICAgICAgICAgICBpZEVuYyA9IGF3YWl0IGdlbmVyYXJOdWV2b0lkRW5jKGNvbnRleHQsIE9QRVJBVElWTywgYXJlYSwgbWF4QUVuY1BvckFyZWEpXHJcbiAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIElOU0VSVCBpbnRvIHRlbSAoXHJcbiAgICAgICAgICAgICAgICAgICAgb3BlcmF0aXZvLFxyXG4gICAgICAgICAgICAgICAgICAgIGVuYyxcclxuICAgICAgICAgICAgICAgICAgICBhcmVhLFxyXG4gICAgICAgICAgICAgICAgICAgIGRvbWluaW8sXHJcbiAgICAgICAgICAgICAgICAgICAgaGFiaWxpdGFkYSxcclxuICAgICAgICAgICAgICAgICAgICAke2NvbnRleHQuYmUuZGIucXVvdGVJZGVudChhdXRvZ2VuZXJhZG9GaWVsZCl9LFxyXG4gICAgICAgICAgICAgICAgICAgIHRva2VuX2F1dG9nZW5lcmFkb19kbSxcclxuICAgICAgICAgICAgICAgICAgICB0YXJlYV9hY3R1YWwsXHJcbiAgICAgICAgICAgICAgICAgICAganNvbl9iYWNrdXAsXHJcbiAgICAgICAgICAgICAgICAgICAganNvbl9lbmN1ZXN0YSwgXHJcbiAgICAgICAgICAgICAgICAgICAgZmVjaGFfYmFja3VwXHJcbiAgICAgICAgICAgICAgICApIFxyXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlcyAoJDEsICQyLCAkMywgJDQsICQ1LCAkNiwgJDcsICQ4LCAkOSwgJDEwLCBjdXJyZW50X3RpbWVzdGFtcClcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgKlxyXG4gICAgICAgICAgICBgLCBbXHJcbiAgICAgICAgICAgICAgICBPUEVSQVRJVk8sXHJcbiAgICAgICAgICAgICAgICBpZEVuYyxcclxuICAgICAgICAgICAgICAgIGFyZWEsXHJcbiAgICAgICAgICAgICAgICBERUZBVUxUX0RPTUlOSU8sXHJcbiAgICAgICAgICAgICAgICB0cnVlLFxyXG4gICAgICAgICAgICAgICAgZW5jQXV0b2dlbmVyYWRvRG0sXHJcbiAgICAgICAgICAgICAgICB0b2tlbixcclxuICAgICAgICAgICAgICAgIGRlZmF1bHRUYXJlYS50YXJlYSxcclxuICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNSYWl6LFxyXG4gICAgICAgICAgICAgICAgcmVzcHVlc3Rhc1JhaXosXHJcbiAgICAgICAgICAgIF0pLmZldGNoVW5pcXVlUm93KCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWRFbmMgPSByZXN1bHRVcGRhdGUucm93LmVuY1xyXG4gICAgICAgIH1cclxuICAgICAgICBhd2FpdCBnZW5lcmFyVGFyZWFzVGVtRmFsdGFudGVzKGNvbnRleHQsIE9QRVJBVElWTyk7XHJcbiAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICB1cGRhdGUgdGFyZWFzX3RlbVxyXG4gICAgICAgICAgICAgICAgc2V0IHJlY2VwY2lvbmlzdGEgPSAkNCwgYXNpZ25hZG8gPSAkNVxyXG4gICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvPSAkMSBhbmQgZW5jID0gJDIgYW5kIHRhcmVhID0gJDNcclxuICAgICAgICAgICAgcmV0dXJuaW5nICpcclxuICAgICAgICBgLCBbT1BFUkFUSVZPLCBpZEVuYywgZGVmYXVsdFRhcmVhLnRhcmVhLCByZWNlcGNpb25pc3RhLCBhc2lnbmFkb10pLmZldGNoVW5pcXVlUm93KCk7XHJcbiAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICB1cGRhdGUgdGFyZWFzX3RlbVxyXG4gICAgICAgICAgICAgICAgc2V0IGNhcmdhZG9fZG0gPSAkNCwgZXN0YWRvID0gJDUsIG9wZXJhY2lvbiA9ICQ2XHJcbiAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm89ICQxIGFuZCBlbmMgPSAkMiBhbmQgdGFyZWEgPSAkM1xyXG4gICAgICAgICAgICByZXR1cm5pbmcgKlxyXG4gICAgICAgIGAsIFtPUEVSQVRJVk8sIGlkRW5jLCBkZWZhdWx0VGFyZWEudGFyZWEsIHRva2VuLCBFU1RBRE9fUE9TVEVSSU9SX0NBUkdBLCBjYW1iaWFfbW9kb19kbSA/IG51bGwgOiBPUEVSQUNJT05fUFJFUEFSQVJfQ0FSR0FdXHJcbiAgICAgICAgKS5mZXRjaFVuaXF1ZVJvdygpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGlkRW5jXHJcbn1cclxuXHJcbi8qZGVmaW5pY2nDs24gZGUgZXN0cnVjdHVyYSBjb21wbGV0YSwgY3VhbmRvIGV4aXN0YSBpbmctZW5jIGhheSBxdWUgcG9uZXJsbyBhaMOtKi9cclxudHlwZSBFc3RydWN0dXJhVGFibGEgPSB7IHRhYmxlTmFtZTogc3RyaW5nLCBwa0ZpZWxkczogeyBmaWVsZE5hbWU6IHN0cmluZyB9W10sIGNoaWxkVGFibGVzOiBFc3RydWN0dXJhVGFibGFbXSB9O1xyXG5mdW5jdGlvbiBjcmVhdGVTdHJ1Y3R1cmUoY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCwgdGFibGVOYW1lOiBzdHJpbmcpIHtcclxuICAgIHZhciBiZSA9IGNvbnRleHQuYmU7XHJcbiAgICB2YXIgbWFpblRhYmxlRGVmOiBUYWJsZURlZmluaXRpb24gPSBiZS50YWJsZVN0cnVjdHVyZXNbdGFibGVOYW1lXShjb250ZXh0KTtcclxuICAgIHZhciBnZXRQa0Zyb21UYWJsZURlZiA9IGZ1bmN0aW9uIGdldFBrRnJvbVRhYmxlRGVmKHRhYmxlRGVmOiBUYWJsZURlZmluaXRpb24pIHtcclxuICAgICAgICByZXR1cm4gdGFibGVEZWYucHJpbWFyeUtleS5tYXAoZnVuY3Rpb24gKHBrKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB7IGZpZWxkTmFtZTogcGsgfTtcclxuICAgICAgICB9KVxyXG4gICAgfTtcclxuICAgIHZhciBnZXRGa0Zyb21UYWJsZURlZiA9IGZ1bmN0aW9uIGdldEZrRnJvbVRhYmxlRGVmKHRhYmxlRGVmOiBUYWJsZURlZmluaXRpb24sIHBhcmVudFRhYmxlTmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgbGV0IHBhcmVudEZrID0gKDxGb3JlaWduS2V5W10+dGFibGVEZWYuZm9yZWlnbktleXMpLmZpbmQoZmsgPT4gZmsucmVmZXJlbmNlcyA9PSBwYXJlbnRUYWJsZU5hbWUpO1xyXG4gICAgICAgIHJldHVybiBwYXJlbnRGayA/IHBhcmVudEZrLmZpZWxkcyA6IFtdO1xyXG4gICAgfVxyXG4gICAgdmFyIHN0cnVjdDogRXN0cnVjdHVyYVRhYmxhID0ge1xyXG4gICAgICAgIHRhYmxlTmFtZTogbWFpblRhYmxlRGVmLm5hbWUsXHJcbiAgICAgICAgcGtGaWVsZHM6IGdldFBrRnJvbVRhYmxlRGVmKG1haW5UYWJsZURlZiksXHJcbiAgICAgICAgY2hpbGRUYWJsZXM6IFtdXHJcbiAgICB9O1xyXG4gICAgaWYgKG1haW5UYWJsZURlZi5kZXRhaWxUYWJsZXMgJiYgbWFpblRhYmxlRGVmLmRldGFpbFRhYmxlcy5sZW5ndGgpIHtcclxuICAgICAgICBtYWluVGFibGVEZWYuZGV0YWlsVGFibGVzLmZvckVhY2goZnVuY3Rpb24gKGRldGFpbFRhYmxlKSB7XHJcbiAgICAgICAgICAgIGlmIChkZXRhaWxUYWJsZS50YWJsZSkge1xyXG4gICAgICAgICAgICAgICAgc3RydWN0LmNoaWxkVGFibGVzLnB1c2goXHJcbiAgICAgICAgICAgICAgICAgICAgY2hhbmdpbmcoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZVN0cnVjdHVyZShjb250ZXh0LCBkZXRhaWxUYWJsZS50YWJsZSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgZmtGaWVsZHM6IGdldEZrRnJvbVRhYmxlRGVmKGJlLnRhYmxlU3RydWN0dXJlc1tkZXRhaWxUYWJsZS50YWJsZV0oY29udGV4dCksIHRhYmxlTmFtZSkgfVxyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHN0cnVjdDtcclxufVxyXG4vKiBmaW4gZGVmaW5pY2lvbiBlc3RydWN0dXJhIGNvbXBsZXRhICovXHJcblxyXG50eXBlIEFueU9iamVjdCA9IHsgW2s6IHN0cmluZ106IGFueSB9XHJcblxyXG50eXBlIEZ1blBhcmFtcyA9IHtcclxuICAgIHRhcmVhOiBJZFRhcmVhO1xyXG4gICAgcmVzcHVlc3Rhc1VBUHJpbmNpcGFsOiBSZXNwdWVzdGFzUmFpejtcclxuICAgIHNldHRlcnM6IHN0cmluZ1tdO1xyXG4gICAgcGFyYW1zOiBhbnlbXTtcclxuICAgIGRlc3Rpbm86ICd0ZW0nIHwgJ3RhcmVhc190ZW0nO1xyXG59O1xyXG5cclxuY29uc3QgZ2V0U2V0dGVyc0FuZFBhcmFtZXRlcnNGb3JSZWFOb1JlYVJlc3VtZW5Fc3RhZG8gPSAoe1xyXG4gICAgdGFyZWEsXHJcbiAgICByZXNwdWVzdGFzVUFQcmluY2lwYWw6IHIsXHJcbiAgICBzZXR0ZXJzOiBzZXR0ZXJzRW50cmFkYSxcclxuICAgIHBhcmFtczogcGFyYW1zRW50cmFkYSxcclxuICAgIGRlc3Rpbm9cclxufTogRnVuUGFyYW1zKSA9PiB7XHJcbiAgICBjb25zdCBpc1N1cGUgPSB0YXJlYSA9PT0gJ3N1cGUnO1xyXG4gICAgY29uc3Qgc3VmaWpvU3VwZSA9IGlzU3VwZSA/ICdfc3VwJyA6ICcnO1xyXG4gICAgY29uc3QgcHJlZmlqb0RtID0gZGVzdGlubyA9PT0gJ3RhcmVhc190ZW0nID8gJ2RtXycgOiAnJztcclxuXHJcbiAgICBjb25zdCBvZmZzZXQgPSBwYXJhbXNFbnRyYWRhLmxlbmd0aCArIDE7XHJcblxyXG4gICAgY29uc3QgbnVldm9zVmFsb3JlcyA9IGlzU3VwZVxyXG4gICAgICAgID8gW3IucmVzdW1lbkVzdGFkb1N1cCwgci5jb2ROb1JlYVN1cCwgci5jb2RSZWFTdXBdXHJcbiAgICAgICAgOiBbci5yZXN1bWVuRXN0YWRvLCByLmNvZE5vUmVhLCByLmNvZFJlYV07XHJcblxyXG4gICAgY29uc3QgY2FtcG9zID0gW1xyXG4gICAgICAgIGAke3ByZWZpam9EbX1yZXN1bWVuX2VzdGFkbyR7c3VmaWpvU3VwZX1gLFxyXG4gICAgICAgIGAke3ByZWZpam9EbX1ub3JlYSR7c3VmaWpvU3VwZX1gLFxyXG4gICAgICAgIGAke3ByZWZpam9EbX1yZWEke3N1Zmlqb1N1cGV9YFxyXG4gICAgXTtcclxuXHJcbiAgICBjb25zdCBudWV2b3NTZXR0ZXJzID0gY2FtcG9zLm1hcCgoY2FtcG8sIGkpID0+IGAke2NhbXBvfT0kJHtvZmZzZXQgKyBpfWApO1xyXG5cclxuICAgIGNvbnN0IHNldHRlcnMgPSBbLi4uc2V0dGVyc0VudHJhZGEsIC4uLm51ZXZvc1NldHRlcnNdO1xyXG4gICAgY29uc3QgcGFyYW1zID0gWy4uLnBhcmFtc0VudHJhZGEsIC4uLm51ZXZvc1ZhbG9yZXNdO1xyXG5cclxuICAgIHJldHVybiB7IHNldHRlcnMsIHBhcmFtcyB9O1xyXG59O1xyXG5cclxudmFyIGd1YXJkYXJFbmN1ZXN0YUVuVGVtID0gYXN5bmMgKGNvbnRleHQ6IFByb2NlZHVyZUNvbnRleHQsIG9wZXJhdGl2bzogSWRPcGVyYXRpdm8sIGlkRW5jOiBzdHJpbmcsIHJlc3B1ZXN0YXNVQVByaW5jaXBhbDogUmVzcHVlc3Rhc1JhaXosIHRhcmVhOiBJZFRhcmVhKSA9PiB7XHJcbiAgICB2YXIgeyBwYXJhbXMsIHNldHRlcnMgfSA9IGdldFNldHRlcnNBbmRQYXJhbWV0ZXJzRm9yUmVhTm9SZWFSZXN1bWVuRXN0YWRvKHtcclxuICAgICAgICB0YXJlYSxcclxuICAgICAgICByZXNwdWVzdGFzVUFQcmluY2lwYWwsXHJcbiAgICAgICAgc2V0dGVyczogW2Bqc29uX2VuY3Vlc3RhID0gJDNgLCBgZmVjaGFfbW9kaWZfZW5jdWVzdGEgPSBjdXJyZW50X3RpbWVzdGFtcGBdLFxyXG4gICAgICAgIHBhcmFtczogW29wZXJhdGl2bywgaWRFbmMsIHJlc3B1ZXN0YXNVQVByaW5jaXBhbF0sXHJcbiAgICAgICAgZGVzdGlubzogJ3RlbSdcclxuICAgIH0pXHJcbiAgICByZXR1cm4gYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoXHJcbiAgICAgICAgYHVwZGF0ZSB0ZW1cclxuICAgICAgICAgICAgc2V0ICR7c2V0dGVycy5qb2luKCcsJyl9XHJcbiAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2bz0gJDEgYW5kIGVuYyA9ICQyXHJcbiAgICAgICAgICAgIHJldHVybmluZyAnb2snYFxyXG4gICAgICAgICxcclxuICAgICAgICBwYXJhbXNcclxuICAgICkuZmV0Y2hVbmlxdWVSb3coKTtcclxufVxyXG5cclxuYXN5bmMgZnVuY3Rpb24gcmVnaXN0cmFyUGFzZVRhYmxhKFxyXG4gICAgY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCxcclxuICAgIG9wZXJhdGl2bzogSWRPcGVyYXRpdm8sXHJcbiAgICBpZEVuYzogc3RyaW5nIHwgbnVtYmVyLFxyXG4gICAgcmVzcHVlc3Rhc1VBUHJpbmNpcGFsOiBhbnlcclxuKSB7XHJcbiAgICB2YXIgYmUgPSBjb250ZXh0LmJlO1xyXG4gICAgdmFyIHByb2NlZHVyZUd1YXJkYXIgPSBiZS5wcm9jZWR1cmUuY2Fzb19ndWFyZGFyO1xyXG4gICAgbGV0IHJlc3VsdGFkbyA9IGBpZCBlbmMgJHtpZEVuY306IGA7XHJcbiAgICBsZXQgcGFyYW1fZ3VhcmRhciA9IHsgb3BlcmF0aXZvOiBvcGVyYXRpdm8sIGlkX2Nhc286IGlkRW5jLCBkYXRvc19jYXNvOiByZXNwdWVzdGFzVUFQcmluY2lwYWwgfTtcclxuICAgIGxldCBzYXZlcG9pbnROYW1lID0gYHNwX2d1YXJkYXJfJHtpZEVuY31gLnJlcGxhY2UoL1teYS16QS1aMC05X10vZywgJ18nKTtcclxuXHJcbiAgICB0cnkge1xyXG4gICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBTQVZFUE9JTlQgJHtzYXZlcG9pbnROYW1lfWApLmV4ZWN1dGUoKTtcclxuICAgICAgICByZXN1bHRhZG8gKz0gYXdhaXQgcHJvY2VkdXJlR3VhcmRhci5jb3JlRnVuY3Rpb24oY29udGV4dCwgcGFyYW1fZ3VhcmRhcik7XHJcbiAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFJFTEVBU0UgU0FWRVBPSU5UICR7c2F2ZXBvaW50TmFtZX1gKS5leGVjdXRlKCk7XHJcbiAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgUk9MTEJBQ0sgVE8gU0FWRVBPSU5UICR7c2F2ZXBvaW50TmFtZX1gKS5leGVjdXRlKCk7XHJcbiAgICAgICAgdmFyIGVycm9yID0gZXhwZWN0ZWQoZXJyKTtcclxuICAgICAgICBsZXQgZXJyTWVzc2FnZSA9IHJlc3VsdGFkbyArIFwiZG1fZm9ycGtyYWl6X2Rlc2Nhcmdhci4gXCIgKyBlcnJvci5tZXNzYWdlO1xyXG4gICAgICAgIHJlc3VsdGFkbyA9IGVyck1lc3NhZ2U7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnJNZXNzYWdlLCBlcnJvcik7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KFxyXG4gICAgICAgIGB1cGRhdGUgdGVtXHJcbiAgICAgICAgICAgIHNldCBwYXNlX3RhYmxhID0gJDNcclxuICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvID0gJDEgYW5kIGVuYyA9ICQyXHJcbiAgICAgICAgICAgIHJldHVybmluZyAnb2snYCxcclxuICAgICAgICBbb3BlcmF0aXZvLCBpZEVuYywgcmVzdWx0YWRvXVxyXG4gICAgKS5mZXRjaFVuaXF1ZVJvdygpO1xyXG59XHJcblxyXG52YXIgc2ltdWxhckd1YXJkYWRvRGVFbmN1ZXN0YURlc2RlQXBwRXNjcml0b3JpbyA9IGFzeW5jIChjb250ZXh0OiBQcm9jZWR1cmVDb250ZXh0LCBvcGVyYXRpdm86IElkT3BlcmF0aXZvLCBlbmM6IElkRW5jLCB0YXJlYTogSWRUYXJlYSwganNvbl9lbmN1ZXN0YTogYW55KSA9PiB7XHJcbiAgICB2YXIgYmUgPSBjb250ZXh0LmJlO1xyXG4gICAgY29uc3QgVUFfUFJJTkNJUEFMID0gKGF3YWl0IGdldFVBUHJpbmNpcGFsKGNvbnRleHQuY2xpZW50LCBvcGVyYXRpdm8pKS51bmlkYWRfYW5hbGlzaXM7XHJcbiAgICByZXR1cm4gYXdhaXQgYmUucHJvY2VkdXJlLmRtX2ZvcnBrcmFpel9kZXNjYXJnYXIuY29yZUZ1bmN0aW9uKFxyXG4gICAgICAgIGNvbnRleHQsXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBvcGVyYXRpdm86IG9wZXJhdGl2byxcclxuICAgICAgICAgICAgcGVyc2lzdGVudGVzOiB7XHJcbiAgICAgICAgICAgICAgICByZXNwdWVzdGFzOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgW1VBX1BSSU5DSVBBTF06IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2VuY106IGpzb25fZW5jdWVzdGFcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgaW5mb3JtYWNpb25IZHI6IHtcclxuICAgICAgICAgICAgICAgICAgICBbZW5jXToge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJlYToge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZWFcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIClcclxufVxyXG5cclxudmFyIGdldEhkclF1ZXJ5ID0gZnVuY3Rpb24gZ2V0SGRyUXVlcnkocXVvdGVkQ29uZFZpdjogc3RyaW5nLCBjb250ZXh0OiBQcm9jZWR1cmVDb250ZXh0LCB1bmlkYWRBbmFsaXNpc1ByaW5jaXBhbDogSWRVbmlkYWRBbmFsaXNpcywgcGVybWl0ZUdlbmVyYXJNdWVzdHJhOiBib29sZWFuLCBpZHBlcjpzdHJpbmcpIHtcclxuICAgIHJldHVybiBgXHJcbiAgICB3aXRoICR7Y29udGV4dC5iZS5kYi5xdW90ZUlkZW50KHVuaWRhZEFuYWxpc2lzUHJpbmNpcGFsKX0gYXMgXHJcbiAgICAgICAgKHNlbGVjdCB0Lm9wZXJhdGl2bywgdC5lbmMsIHQuanNvbl9lbmN1ZXN0YSBhcyByZXNwdWVzdGFzLCB0LnJlc3VtZW5fZXN0YWRvIGFzIFwicmVzdW1lbkVzdGFkb1wiLCBcclxuICAgICAgICAgICAganNvbmJfYnVpbGRfb2JqZWN0KFxyXG4gICAgICAgICAgICAgICAgJ2RvbWluaW8nICAgICAgICwgZG9taW5pbyAgICAgICAsXHJcbiAgICAgICAgICAgICAgICAnbm9tY2FsbGUnICAgICAgLCBub21jYWxsZSAgICAgICxcclxuICAgICAgICAgICAgICAgICdzZWN0b3InICAgICAgICAsIHNlY3RvciAgICAgICAgLFxyXG4gICAgICAgICAgICAgICAgJ2VkaWZpY2lvJyAgICAgICwgZWRpZmljaW8gICAgICAsXHJcbiAgICAgICAgICAgICAgICAnZW50cmFkYScgICAgICAgLCBlbnRyYWRhICAgICAgICxcclxuICAgICAgICAgICAgICAgICducm9jYXRhc3RyYWwnICAsIG5yb2NhdGFzdHJhbCAgLFxyXG4gICAgICAgICAgICAgICAgJ3Bpc28nICAgICAgICAgICwgcGlzbyAgICAgICAgICAsXHJcbiAgICAgICAgICAgICAgICAnZGVwYXJ0YW1lbnRvJyAgLCBkZXBhcnRhbWVudG8gICxcclxuICAgICAgICAgICAgICAgICdoYWJpdGFjaW9uJyAgICAsIGhhYml0YWNpb24gICAgLFxyXG4gICAgICAgICAgICAgICAgJ2Nhc2EnICAgICAgICAgICwgY2FzYSAgICAgICAgICAsXHJcbiAgICAgICAgICAgICAgICAncHJpb3JpZGFkJyAgICAgLCByZXNlcnZhKzEgICAgICxcclxuICAgICAgICAgICAgICAgICdvYnNlcnZhY2lvbmVzJyAsIHR0LmNhcmdhX29ic2VydmFjaW9uZXMgLFxyXG4gICAgICAgICAgICAgICAgJ2NpdGEnICAgICAgICAgICwgY2l0YSAsXHJcbiAgICAgICAgICAgICAgICAnY2FyZ2EnICAgICAgICAgLCB0LmFyZWEgICAgICAgICxcclxuICAgICAgICAgICAgICAgICdzZW1hbmEnICAgICAgICAsIHQuc2VtYW5hXHJcbiAgICAgICAgICAgICkgYXMgdGVtLCB0LmFyZWEsXHJcbiAgICAgICAgICAgIC0tVE9ETzogR0VORVJBTElaQVJcclxuICAgICAgICAgICAganNvbmJfYnVpbGRfb2JqZWN0KFxyXG4gICAgICAgICAgICAgICAgJ3RhcmVhJywgdHQudGFyZWEsXHJcbiAgICAgICAgICAgICAgICAnZmVjaGFfYXNpZ25hY2lvbicsIGZlY2hhX2FzaWduYWNpb24sXHJcbiAgICAgICAgICAgICAgICAnYXNpZ25hZG8nLCBhc2lnbmFkbyxcclxuICAgICAgICAgICAgICAgICdtYWluX2Zvcm0nLCBtYWluX2Zvcm1cclxuICAgICAgICAgICAgKSBhcyB0YXJlYSxcclxuICAgICAgICAgICAgbWluKGZlY2hhX2FzaWduYWNpb24pIGFzIGZlY2hhX2FzaWduYWNpb25cclxuICAgICAgICAgICAgZnJvbSB0ZW0gdCBsZWZ0IGpvaW4gdGFyZWFzX3RlbSB0dCBvbiAodC5vcGVyYXRpdm8gPSB0dC5vcGVyYXRpdm8gYW5kIHQuZW5jID0gdHQuZW5jIGFuZCB0LnRhcmVhX2FjdHVhbCA9IHR0LnRhcmVhKVxyXG4gICAgICAgICAgICAgICAgICAgICAgIGxlZnQgam9pbiB0YXJlYXMgdGEgb24gdC50YXJlYV9hY3R1YWwgPSB0YS50YXJlYVxyXG4gICAgICAgICAgICB3aGVyZSB0LmhhYmlsaXRhZGEgYW5kICR7cXVvdGVkQ29uZFZpdn1cclxuICAgICAgICAgICAgZ3JvdXAgYnkgdC5vcGVyYXRpdm8sIHQuZW5jLCB0Lmpzb25fZW5jdWVzdGEsIHQucmVzdW1lbl9lc3RhZG8sIGRvbWluaW8sIG5vbWNhbGxlLHNlY3RvcixlZGlmaWNpbywgZW50cmFkYSwgbnJvY2F0YXN0cmFsLCBwaXNvLGRlcGFydGFtZW50byxoYWJpdGFjaW9uLGNhc2EscmVzZXJ2YSx0dC5jYXJnYV9vYnNlcnZhY2lvbmVzLCBjaXRhLCB0LmFyZWEsIHR0LnRhcmVhLCBmZWNoYV9hc2lnbmFjaW9uLCBhc2lnbmFkbywgbWFpbl9mb3JtLCB0LnNlbWFuYVxyXG4gICAgICAgIClcclxuICAgICAgICBzZWxlY3QganNvbmJfYnVpbGRfb2JqZWN0KFxyXG4gICAgICAgICAgICAgICAgJHtjb250ZXh0LmJlLmRiLnF1b3RlTGl0ZXJhbCh1bmlkYWRBbmFsaXNpc1ByaW5jaXBhbCl9LCAke2pzb25vKFxyXG4gICAgICAgIGBzZWxlY3QgZW5jLCByZXNwdWVzdGFzLCBqc29uYl9idWlsZF9vYmplY3QoJ3Jlc3VtZW5Fc3RhZG8nLFwicmVzdW1lbkVzdGFkb1wiKSBhcyBvdHJhcyBmcm9tICR7Y29udGV4dC5iZS5kYi5xdW90ZUlkZW50KHVuaWRhZEFuYWxpc2lzUHJpbmNpcGFsKX1gLFxyXG4gICAgICAgICdlbmMnLFxyXG4gICAgICAgIGBvdHJhcyB8fCBjb2FsZXNjZShyZXNwdWVzdGFzLCd7fSc6Ompzb25iKWBcclxuICAgICl9XHJcbiAgICAgICAgICAgICkgYXMgcmVzcHVlc3RhcyxcclxuICAgICAgICAgICAgJHtqc29uKGBcclxuICAgICAgICAgICAgICAgIHNlbGVjdCBhLmFyZWEgYXMgY2FyZ2EsIG9ic2VydmFjaW9uZXNfaGRyIGFzIG9ic2VydmFjaW9uZXMsIG1pbihmZWNoYV9hc2lnbmFjaW9uKSBhcyBmZWNoYSwgdGEucmVjZXBjaW9uaXN0YSxcclxuICAgICAgICAgICAgICAgICR7cGVybWl0ZUdlbmVyYXJNdWVzdHJhID8gYGNhc2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgd2hlbiB0YS5hc2lnbmFkbyA9ICR7Y29udGV4dC5iZS5kYi5xdW90ZUxpdGVyYWwoaWRwZXIpfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGVuIHRydWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBmYWxzZVxyXG4gICAgICAgICAgICAgICAgICAgIGVuZGA6IGBmYWxzZWB9IGFzIHB1ZWRlX2F1dG9nZW5lcmFyXHJcbiAgICAgICAgICAgICAgICAgICAgZnJvbSAke2NvbnRleHQuYmUuZGIucXVvdGVJZGVudCh1bmlkYWRBbmFsaXNpc1ByaW5jaXBhbCl9IGF1eCBpbm5lciBqb2luIGFyZWFzIGEgdXNpbmcgKG9wZXJhdGl2bywgYXJlYSkgaW5uZXIgam9pbiB0YXJlYXNfYXJlYXMgdGEgb24gKGEuYXJlYSA9IHRhLmFyZWEgYW5kIGF1eC50YXJlYS0+Pid0YXJlYScgPSB0YS50YXJlYSlcclxuICAgICAgICAgICAgICAgICAgICBncm91cCBieSBhLmFyZWEsIG9ic2VydmFjaW9uZXNfaGRyLCB0YS5yZWNlcGNpb25pc3RhLCBwdWVkZV9hdXRvZ2VuZXJhclxyXG4gICAgICAgICAgICAgICAgJHtwZXJtaXRlR2VuZXJhck11ZXN0cmEgPyBgXHJcbiAgICAgICAgICAgICAgICAgICAgdW5pb24gLS0gZXN0ZSB1bmlvbiBwZXJtaXRlIHZpc3VhbGl6YXIgYXJlYXMgYXNpZ25hZGFzIHNpbiBlbmN1ZXN0YXMgZ2VuZXJhZGFzXHJcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0IGFyZWEgYXMgY2FyZ2EsIG51bGwgYXMgb2JzZXJ2YWNpb25lcywgbnVsbCBhcyBmZWNoYSwgcmVjZXBjaW9uaXN0YSwgdHJ1ZSBhcyBwdWVkZV9hdXRvZ2VuZXJhclxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmcm9tIHRhcmVhc19hcmVhcyB3aGVyZSBhc2lnbmFkbyA9ICR7Y29udGV4dC5iZS5kYi5xdW90ZUxpdGVyYWwoaWRwZXIpfSBhbmQgdGFyZWEgPSAnZW5jdSdgIDogJyd9XHJcbiAgICAgICAgICAgICAgICBgLCAnZmVjaGEnKX0gYXMgY2FyZ2FzLFxyXG4gICAgICAgICAgICAke2pzb25vKFxyXG4gICAgICAgIGBzZWxlY3QgZW5jLCBqc29uYl9idWlsZF9vYmplY3QoJ3RlbScsIHRlbSwgJ3RhcmVhJywgdGFyZWEpIGFzIG90cmFzIGZyb20gJHtjb250ZXh0LmJlLmRiLnF1b3RlSWRlbnQodW5pZGFkQW5hbGlzaXNQcmluY2lwYWwpfWAsXHJcbiAgICAgICAgJ2VuYycsXHJcbiAgICAgICAgYG90cmFzIHx8J3t9Jzo6anNvbmJgXHJcbiAgICApfVxyXG4gICAgICAgICAgICBhcyBcImluZm9ybWFjaW9uSGRyXCJcclxuYFxyXG59XHJcblxyXG5leHBvcnQgdmFyIHNldEhkclF1ZXJ5ID0gKG15RnVuOiAocXVvdGVkQ29uZFZpdjogc3RyaW5nLCBjb250ZXh0OiBQcm9jZWR1cmVDb250ZXh0LCB1bmlkYWRBbmFsaXNpc1ByaW5jaXBhbDogSWRVbmlkYWRBbmFsaXNpcywgcGVybWl0ZUdlbmVyYXJNdWVzdHJhOiBib29sZWFuLCBpZHBlcjogc3RyaW5nKSA9PiBzdHJpbmcpID0+IGdldEhkclF1ZXJ5ID0gbXlGdW5cclxuXHJcbmNvbnN0IGdldFVBUHJpbmNpcGFsID0gYXN5bmMgKGNsaWVudDogQ2xpZW50LCBvcGVyYXRpdm86IElkT3BlcmF0aXZvKSA9PlxyXG4gICAgKGF3YWl0IGNsaWVudC5xdWVyeShcclxuICAgICAgICBgc2VsZWN0ICpcclxuICAgICAgICAgICAgZnJvbSB1bmlkYWRfYW5hbGlzaXNcclxuICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvPSAkMSBhbmQgcHJpbmNpcGFsXHJcbiAgICAgICAgYFxyXG4gICAgICAgICxcclxuICAgICAgICBbb3BlcmF0aXZvXVxyXG4gICAgKS5mZXRjaFVuaXF1ZVJvdygpKS5yb3dcclxuXHJcbnZhciBmdW5jaW9uZXNDb25vY2lkYXM6IHsgW2sgaW4gc3RyaW5nXTogYm9vbGVhbiB9ID0ge31cclxuXHJcbnZhciBjb21waWxlciA9IG5ldyBFeHByZXNpb25QYXJzZXIuQ29tcGlsZXIoe1xyXG4gICAgbGFuZ3VhZ2U6ICdqcycsXHJcbiAgICB2YXJXcmFwcGVyOiAodmFyX25hbWU6IHN0cmluZykgPT4gYGhlbHBlcnMubnVsbDJ6ZXJvKHZhbG9yZXMuJHt2YXJfbmFtZX0pYCxcclxuICAgIGZ1bldyYXBwZXI6IChmdW5jdGlvbk5hbWU6IHN0cmluZykgPT4ge1xyXG4gICAgICAgIGlmICghZnVuY2lvbmVzQ29ub2NpZGFzW2Z1bmN0aW9uTmFtZV0pIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coZnVuY3Rpb25OYW1lKVxyXG4gICAgICAgICAgICBmdW5jaW9uZXNDb25vY2lkYXNbZnVuY3Rpb25OYW1lXSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBgaGVscGVycy5mdW5zLiR7ZnVuY3Rpb25OYW1lfWBcclxuICAgIH1cclxufSlcclxuXHJcbnR5cGUgQ2FzaWxsZXJvRGVBY2EgPSB7XHJcbiAgICBjaGlsZHM6IENhc2lsbGVyb0RlQWNhW10sXHJcbiAgICBkYXRhOiB7XHJcbiAgICAgICAgZXhwcmVzaW9uX2hhYmlsaXRhcjogc3RyaW5nXHJcbiAgICAgICAgZXhwcmVzaW9uX2hhYmlsaXRhcl9qczogc3RyaW5nXHJcbiAgICAgICAgZXNwZWNpYWw6IGFueVxyXG4gICAgICAgIGV4cHJlc2lvbl9hdXRvaW5ncmVzYXJfanM6IHN0cmluZ1xyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBjb21waWxhckV4cHJlc2lvbihleHByZXNpb246IHN0cmluZykge1xyXG4gICAgcmV0dXJuIGNvbXBpbGVyLnRvQ29kZShFeHByZXNpb25QYXJzZXIucGFyc2UoXHJcbiAgICAgICAgZXhwcmVzaW9uXHJcbiAgICAgICAgICAgIC5yZXBsYWNlKC9cXGJpcyBkaXN0aW5jdCBmcm9tXFxiL2dpLCAnIDw+ICcpXHJcbiAgICAgICAgICAgIC5yZXBsYWNlKC8hIS9naSwgJyAnKVxyXG4gICAgKSkucmVwbGFjZSgvaGVscGVyc1xcLmZ1bnNcXC5ibGFuY29cXChoZWxwZXJzLm51bGwyemVyb1xcKC9nLCAnaGVscGVycy5mdW5zLmJsYW5jbygoJylcclxuICAgICAgICAucmVwbGFjZSgvaGVscGVyc1xcLmZ1bnNcXC5pbmZvcm1hZG9cXChoZWxwZXJzLm51bGwyemVyb1xcKC9nLCAnaGVscGVycy5mdW5zLmluZm9ybWFkbygoJyk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNvbXBpbGFyRXhwcmVzaW9uZXMoY2FzaWxsZXJvOiBDYXNpbGxlcm9EZUFjYSkge1xyXG4gICAgaWYgKCFjYXNpbGxlcm8pIHsgcmV0dXJuIH1cclxuICAgIGlmIChjYXNpbGxlcm8uZGF0YS5leHByZXNpb25faGFiaWxpdGFyKSB7XHJcbiAgICAgICAgY2FzaWxsZXJvLmRhdGEuZXhwcmVzaW9uX2hhYmlsaXRhcl9qcyA9IGNvbXBpbGFyRXhwcmVzaW9uKGNhc2lsbGVyby5kYXRhLmV4cHJlc2lvbl9oYWJpbGl0YXIpO1xyXG4gICAgfVxyXG4gICAgaWYgKGNhc2lsbGVyby5kYXRhLmVzcGVjaWFsPy5hdXRvaW5nKSB7XHJcbiAgICAgICAgdmFyIHBhcnRlcyA9IGNhc2lsbGVyby5kYXRhLmVzcGVjaWFsPy5hdXRvaW5nLnNwbGl0KCc9PicpO1xyXG4gICAgICAgIGlmIChwYXJ0ZXMubGVuZ3RoID4gMSkge1xyXG4gICAgICAgICAgICB2YXIgcHJlY29uZGljaW9uID0gcGFydGVzWzBdO1xyXG4gICAgICAgICAgICB2YXIgdmFsb3IgPSBwYXJ0ZXMuc2xpY2UoMSkuam9pbignPT4nKTtcclxuICAgICAgICAgICAgY2FzaWxsZXJvLmRhdGEuZXhwcmVzaW9uX2F1dG9pbmdyZXNhcl9qcyA9IGAoJHtjb21waWxhckV4cHJlc2lvbihwcmVjb25kaWNpb24pfSk/KCR7Y29tcGlsYXJFeHByZXNpb24odmFsb3IpfSk6bnVsbGA7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY2FzaWxsZXJvLmRhdGEuZXhwcmVzaW9uX2F1dG9pbmdyZXNhcl9qcyA9IGNvbXBpbGFyRXhwcmVzaW9uKHBhcnRlc1swXSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZm9yICh2YXIgY2FzaWxsZXJvSW50ZXJubyBvZiBjYXNpbGxlcm8uY2hpbGRzKSBjb21waWxhckV4cHJlc2lvbmVzKGNhc2lsbGVyb0ludGVybm8pO1xyXG59XHJcblxyXG5jb25zdCBnZW5lcmFyRW5jdWVzdGFUZW0gPSBhc3luYyAoY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCwgb3BlcmF0aXZvOiBJZE9wZXJhdGl2bywgaWRFbmM6IElkRW5jLCBhcmVhOiBudW1iZXIsIGRvbWluaW86IG51bWJlciwgdGFyZWFfYWN0dWFsOiBJZFRhcmVhKSA9PiB7XHJcbiAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgSU5TRVJUIGludG8gdGVtIChvcGVyYXRpdm8sIGVuYywgYXJlYSwgZG9taW5pbywgaGFiaWxpdGFkYSwgdGFyZWFfYWN0dWFsKSB2YWx1ZXMgKCQxLCAkMiwgJDMsICQ0LCAkNSwgJDYpYCxcclxuICAgICAgICBbb3BlcmF0aXZvLCBpZEVuYywgYXJlYSwgZG9taW5pbywgdHJ1ZSwgdGFyZWFfYWN0dWFsXSkuZXhlY3V0ZSgpO1xyXG59XHJcblxyXG5jb25zdCBnZW5lcmFyVGFyZWFzVGVtRmFsdGFudGVzID0gYXN5bmMgKGNvbnRleHQ6IFByb2NlZHVyZUNvbnRleHQsIG9wZXJhdGl2bzogSWRPcGVyYXRpdm8pID0+IHtcclxuICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICBpbnNlcnQgaW50byB0YXJlYXNfdGVtIChvcGVyYXRpdm8sIGVuYywgdGFyZWEpXHJcbiAgICAgICAgICAgIHNlbGVjdCB0YS5vcGVyYXRpdm8sIHRhLmVuYywgdGEudGFyZWFcclxuICAgICAgICAgICAgZnJvbSAoc2VsZWN0IHRhLiosIHQuZW5jLHQuYXJlYSBmcm9tIHRhcmVhcyB0YSwgdGVtIHQgd2hlcmUgdGEub3BlcmF0aXZvPXQub3BlcmF0aXZvKSB0YSBcclxuICAgICAgICAgICAgd2hlcmUgdGEub3BlcmF0aXZvID0gJDEgXHJcbiAgICAgICAgICAgICAgICBhbmQgbm90ICh0YS5vcGVyYXRpdm8sIHRhLmVuYywgdGEudGFyZWEpIGluIChzZWxlY3Qgb3BlcmF0aXZvLCBlbmMsIHRhcmVhIGZyb20gdGFyZWFzX3RlbSlcclxuICAgICAgICAgICAgb3JkZXIgYnkgMSwzLDI7XHJcbiAgICBgLCBbb3BlcmF0aXZvXSkuZXhlY3V0ZSgpO1xyXG59XHJcblxyXG5jb25zdCBidXNjYXJFbmN1ZXN0YUVuVGVtID0gYXN5bmMgKGNvbnRleHQ6IFByb2NlZHVyZUNvbnRleHQsIHBhcmFtczogQ29yZUZ1bmN0aW9uUGFyYW1ldGVyczxhbnk+KSA9PiB7XHJcbiAgICB0cnkge1xyXG4gICAgICAgIHZhciByZXN1bHQgPSBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgIHNlbGVjdCAqXHJcbiAgICAgICAgICAgICAgICBmcm9tIHRlbVxyXG4gICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvID0gJDEgYW5kIGVuYyA9ICQyIC0tcGsgdmVyaWZpY2FkYVxyXG4gICAgICAgIGAsIFtwYXJhbXMub3BlcmF0aXZvLCBwYXJhbXMuZW5jXSkuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICAgIHRocm93IEVycm9yKGBObyBzZSBlbmNvbnRyw7MgbGEgZW5jdWVzdGEgJHtwYXJhbXMuZW5jfSBwYXJhIGVsIG9wZXJhdGl2byAke3BhcmFtcy5vcGVyYXRpdm99LiAke2V4cGVjdGVkKGVycikubWVzc2FnZX1gKVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHsgY2Fzb1RlbTogcmVzdWx0LnJvdyB9O1xyXG59XHJcblxyXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcGFzYXJFbmN1ZXN0YXNBUHJvaWUoY2xpZW50OiBDbGllbnQpIHtcclxuICAgIGxldCBwYXJhbWV0cm9zID0gKGF3YWl0IGNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICBzZWxlY3QgKiBmcm9tIHBhcmFtZXRyb3Mgd2hlcmUgdW5pY29fcmVnaXN0cm9gLFxyXG4gICAgICAgIFtdKS5mZXRjaFVuaXF1ZVJvdygpKS5yb3c7XHJcbiAgICB2YXIgc2VsZWN0ID0gYHNlbGVjdCB0Lm9wZXJhdGl2bywgdC5lbmMsIHQudGFyZWFfYWN0dWFsLCB0dC50c19lbnRyYWRhXHJcbiAgICAgICAgZnJvbSB0YXJlYXNfdGVtIHR0IGpvaW4gdGVtIHQgdXNpbmcgKG9wZXJhdGl2byxlbmMpXHJcbiAgICAgICAgd2hlcmUgdHQub3BlcmF0aXZvPSQxIGFuZCB0dC50YXJlYT0gJDIgYW5kICgke2dldERpYXNBUGFzYXJRdWVyeSgndHQnKX0gPD0gMCBvciBjb2FsZXNjZSh0dC5hZGVsYW50YXIsZmFsc2UpKSBhbmQgdHQudGFyZWEgPSB0LnRhcmVhX2FjdHVhbFxyXG4gICAgYDtcclxuICAgIGF3YWl0IGNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgVVBEQVRFIHRhcmVhc190ZW0gdHRcclxuICAgICAgICAgICAgc2V0IGVzdGFkbyA9ICdWJ1xyXG4gICAgICAgICAgICBmcm9tICgke3NlbGVjdH0pIGF1eFxyXG4gICAgICAgICAgICB3aGVyZSB0dC5vcGVyYXRpdm8gPSBhdXgub3BlcmF0aXZvIGFuZCB0dC5lbmMgPSBhdXguZW5jIGFuZCB0dC50YXJlYSA9ICQzXHJcbiAgICAgICAgICAgIHJldHVybmluZyAqYCxcclxuICAgICAgICBbcGFyYW1ldHJvcy5vcGVyYXRpdm8sICdmaW5jJywgJ2ZpbmMnXSlcclxuICAgICAgICAuZmV0Y2hBbGwoKTtcclxuICAgIC8vVE9ETyBhc2lnbmFyIGVuIHByb2Nlc2FtaWVudG9cclxuICAgIGF3YWl0IGNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgVVBEQVRFIHRhcmVhc190ZW0gdHRcclxuICAgICAgICAgICAgc2V0IGVzdGFkbyA9ICdBJ1xyXG4gICAgICAgICAgICBmcm9tICgke3NlbGVjdH0pIGF1eFxyXG4gICAgICAgICAgICB3aGVyZSB0dC5vcGVyYXRpdm8gPSBhdXgub3BlcmF0aXZvIGFuZCB0dC5lbmMgPSBhdXguZW5jIGFuZCB0dC50YXJlYSA9ICQzXHJcbiAgICAgICAgICAgIHJldHVybmluZyAqYCxcclxuICAgICAgICBbcGFyYW1ldHJvcy5vcGVyYXRpdm8sICdmaW5jJywgJ3Byb2MnXSlcclxuICAgICAgICAuZmV0Y2hBbGwoKTtcclxuICAgIGF3YWl0IGNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgdXBkYXRlIHRlbSB0XHJcbiAgICAgICAgICAgIHNldCB0YXJlYV9hY3R1YWwgPSAncHJvYydcclxuICAgICAgICAgICAgZnJvbSAoJHtzZWxlY3R9KSBhdXhcclxuICAgICAgICAgICAgd2hlcmUgdC5vcGVyYXRpdm8gPSBhdXgub3BlcmF0aXZvIGFuZCB0LmVuYyA9IGF1eC5lbmNcclxuICAgICAgICAgICAgcmV0dXJuaW5nICpgLFxyXG4gICAgICAgIFtwYXJhbWV0cm9zLm9wZXJhdGl2bywgJ2ZpbmMnXSkuZmV0Y2hBbGwoKTtcclxuICAgIHJldHVybiAnb2snO1xyXG59XHJcblxyXG5leHBvcnQgY29uc3QgUHJvY2VkdXJlc0RtRW5jdTogUHJvY2VkdXJlRGVmW10gPSBbXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnb3BlcmF0aXZvX2VzdHJ1Y3R1cmFfY29tcGxldGEnLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6IFtcclxuICAgICAgICAgICAgeyBuYW1lOiAnb3BlcmF0aXZvJywgdHlwZU5hbWU6ICd0ZXh0JywgcmVmZXJlbmNlczogJ29wZXJhdGl2b3MnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ2lkcGVyX2xvZ3VlYWRvX3RhYmxldCcsIHR5cGVOYW1lOiAndGV4dCcsIGRlZmF1bHRWYWx1ZTpudWxsIH0sXHJcblxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgcmVzdWx0T2s6J2Rlc3BsZWdhckZvcm11bGFyaW8nLFxyXG4gICAgICAgIHVubG9nZ2VkOiB0cnVlLCBcclxuICAgICAgICBjb3JlRnVuY3Rpb246YXN5bmMgZnVuY3Rpb24oY29udGV4dDpQcm9jZWR1cmVDb250ZXh0LCBwYXJhbWV0ZXJzOkNvcmVGdW5jdGlvblBhcmFtZXRlcnM8e29wZXJhdGl2bzogSWRPcGVyYXRpdm8sIGlkcGVyX2xvZ3VlYWRvX3RhYmxldDogc3RyaW5nfG51bGx9Pil7XHJcbiAgICAgICAgICAgIHZhciBiZSA9IGNvbnRleHQuYmU7XHJcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShcclxuICAgICAgICAgICAgICAgIGBzZWxlY3QgY2FzaWxsZXJvc19qZXJhcnF1aXphZG9zKCQxKSBhcyBmb3JtdWxhcmlvcywgXHJcbiAgICAgICAgICAgICAgICAgICAgJHtqc29ubyhgc2VsZWN0IHVuaWRhZF9hbmFsaXNpcywgcGFkcmUsIHBrX2FncmVnYWRhLCAne30nOjpqc29uYiBhcyBoaWphcyBmcm9tIHVuaWRhZF9hbmFsaXNpcyB3aGVyZSBvcGVyYXRpdm8gPSAkMmAsICd1bmlkYWRfYW5hbGlzaXMnKX0gYXMgdW5pZGFkZXNfYW5hbGlzaXNcclxuICAgICAgICAgICAgICAgIGAsXHJcbiAgICAgICAgICAgICAgICBbcGFyYW1ldGVycy5vcGVyYXRpdm8sIHBhcmFtZXRlcnMub3BlcmF0aXZvXVxyXG4gICAgICAgICAgICApLmZldGNoVW5pcXVlUm93KCk7XHJcbiAgICAgICAgICAgIGxpa2VBcihyZXN1bHQucm93LmZvcm11bGFyaW9zKS5mb3JFYWNoKGYgPT4gY29tcGlsYXJFeHByZXNpb25lcyhmKSk7XHJcbiAgICAgICAgICAgIC8vIEhlcm1hbm9zIHNvbiBsb3MgZm9ybXVsYXJpb3MgcXVlIGVzdMOhbiBpbXBsYW50YWRvcyBlbiBvdHJvIGZvcm11bGFyaW8gZGUgbGEgbWlzbWEgVUEuIFBvciBlamVtcGxvIGVsIEExIGVuIGVsIFMxXHJcbiAgICAgICAgICAgIHZhciByZXN1bHRIZXJtYW5vcyA9IGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuc2VsZWN0IG8uaWRfY2FzaWxsZXJvIGFzIGlkX2Zvcm11bGFyaW8sIG8udW5pZGFkX2FuYWxpc2lzLCAnQkZfJ3x8by5jYXNpbGxlcm8gYm90b24sIGJmLmNhc2lsbGVybywgYmYucGFkcmUsIGZwLmNhc2lsbGVybywgZnAudW5pZGFkX2FuYWxpc2lzXHJcbiAgZnJvbSBjYXNpbGxlcm9zIG8gbGVmdCBqb2luIGNhc2lsbGVyb3MgYmZcclxuICAgIG9uIGJmLnRpcG9jPSdCRidcclxuXHRhbmQgYmYuY2FzaWxsZXJvID0gJ0JGXyd8fG8uY2FzaWxsZXJvXHJcblx0YW5kIGJmLm9wZXJhdGl2byA9IG8ub3BlcmF0aXZvXHJcblx0bGVmdCBqb2luIGNhc2lsbGVyb3MgZnBcclxuXHQgIG9uIGZwLmlkX2Nhc2lsbGVybyA9IGJmLnBhZHJlXHJcblx0ICBhbmQgZnAub3BlcmF0aXZvID0gYmYub3BlcmF0aXZvXHJcbiAgd2hlcmUgby50aXBvYyA9ICdGJ1xyXG4gICAgYW5kIG8udW5pZGFkX2FuYWxpc2lzID0gZnAudW5pZGFkX2FuYWxpc2lzXHJcblx0YW5kIG8ub3BlcmF0aXZvID0gJDFgLFxyXG4gICAgICAgICAgICAgICAgW3BhcmFtZXRlcnMub3BlcmF0aXZvXVxyXG4gICAgICAgICAgICApLmZldGNoQWxsKCk7XHJcbiAgICAgICAgICAgIHJlc3VsdEhlcm1hbm9zLnJvd3MuZm9yRWFjaChyb3cgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0LnJvdy5mb3JtdWxhcmlvc1tyb3cuaWRfZm9ybXVsYXJpb10uZGF0YS5oZXJtYW5vID0gdHJ1ZTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgZnVuY3Rpb24gY29tcGxldGFyVUEodWE6IFVuaWRhZEFuYWxpc2lzLCBpZFVhOiBJZFVuaWRhZEFuYWxpc2lzLCB1QXM6IHsgW2sgaW4gSWRVbmlkYWRBbmFsaXNpc106IFVuaWRhZEFuYWxpc2lzIH0pIHtcclxuICAgICAgICAgICAgICAgIGlmICh1YS5wYWRyZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHVBc1t1YS5wYWRyZV0uaGlqYXNbaWRVYV0gPSB1YTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdWEucHJpbmNpcGFsID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBsaWtlQXIocmVzdWx0LnJvdy51bmlkYWRlc19hbmFsaXNpcykuZm9yRWFjaCgodWEsIGlkVWEpID0+XHJcbiAgICAgICAgICAgICAgICBjb21wbGV0YXJVQSh1YSwgaWRVYSBhcyBJZFVuaWRhZEFuYWxpc2lzLCByZXN1bHQucm93LnVuaWRhZGVzX2FuYWxpc2lzKVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICAgIHZhciB7XHJcbiAgICAgICAgICAgICAgICBjb25fcmVhX2hvZ2FyOiBjb25SZWFIb2dhcixcclxuICAgICAgICAgICAgICAgIGNvbmZpZ19zb3J0ZW86IGNvbmZpZ1NvcnRlbyxcclxuICAgICAgICAgICAgICAgIGhhYmlsaXRhY2lvbl9ib3Rvbl9mb3JtdWxhcmlvOiBoYWJpbGl0YWNpb25Cb3RvbkZvcm11bGFyaW8sXHJcbiAgICAgICAgICAgIH0gPSAoYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgc2VsZWN0IGNvbmZpZ19zb3J0ZW8sIGNvbl9yZWFfaG9nYXIsIGhhYmlsaXRhY2lvbl9ib3Rvbl9mb3JtdWxhcmlvLCBwZXJtaXRlX2dlbmVyYXJfbXVlc3RyYSBcclxuICAgICAgICAgICAgICAgICAgICBmcm9tIG9wZXJhdGl2b3MgXHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvID0gJDFcclxuICAgICAgICAgICAgYCwgW3BhcmFtZXRlcnMub3BlcmF0aXZvXSkuZmV0Y2hVbmlxdWVSb3coKSkucm93O1xyXG5cclxuICAgICAgICAgICAgdmFyIHNlbWFuYXMgPSAoYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoXHJcbiAgICAgICAgICAgICAgICBgc2VsZWN0ICBcclxuICAgICAgICAgICAgICAgICAgICAke2pzb25vKGBzZWxlY3QgKiBmcm9tIHNlbWFuYXMgd2hlcmUgb3BlcmF0aXZvID0gJDFgLCAnc2VtYW5hJyl9IGFzIHNlbWFuYXNcclxuICAgICAgICAgICAgICAgIGAsXHJcbiAgICAgICAgICAgICAgICBbcGFyYW1ldGVycy5vcGVyYXRpdm9dXHJcbiAgICAgICAgICAgICkuZmV0Y2hVbmlxdWVSb3coKSkucm93LnNlbWFuYXM7XHJcbiAgICAgICAgICAgIGxldCBjb21waWxhckV4cHJlc2lvbmVzRG9taW5pb3MgPSAoZXhwcmVzaW9uZXNEb21pbmlvOiBhbnkpID0+XHJcbiAgICAgICAgICAgICAgICBsaWtlQXIoZXhwcmVzaW9uZXNEb21pbmlvKVxyXG4gICAgICAgICAgICAgICAgICAgIC5tYXAoKGV4cHIsIGRvbWluaW8pID0+ICh7IGRvbWluaW8sIGV4cHI6IGNvbXBpbGFyRXhwcmVzaW9uKGV4cHIuZXhwcikgfSkpXHJcbiAgICAgICAgICAgICAgICAgICAgLnBsYWluKCk7XHJcbiAgICAgICAgICAgIGlmIChjb25maWdTb3J0ZW8pIHtcclxuICAgICAgICAgICAgICAgIGxpa2VBcihjb25maWdTb3J0ZW8pLmZvckVhY2goKGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW8pID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25maWdTb3J0ZW9Gb3JtdWxhcmlvLmV4cHJfaW5jb21wbGV0aXR1ZF9qcyA9IGNvbXBpbGFyRXhwcmVzaW9uZXNEb21pbmlvcyhjb25maWdTb3J0ZW9Gb3JtdWxhcmlvLmV4cHJfaW5jb21wbGV0aXR1ZClcclxuICAgICAgICAgICAgICAgICAgICBjb25maWdTb3J0ZW9Gb3JtdWxhcmlvLmZpbHRyb19qcyA9IGNvbXBpbGFyRXhwcmVzaW9uZXNEb21pbmlvcyhjb25maWdTb3J0ZW9Gb3JtdWxhcmlvLmZpbHRybylcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGhhYmlsaXRhY2lvbkJvdG9uRm9ybXVsYXJpbykge1xyXG4gICAgICAgICAgICAgICAgbGlrZUFyKGhhYmlsaXRhY2lvbkJvdG9uRm9ybXVsYXJpbykuZm9yRWFjaCgoZm9ybSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGZvcm0uZXhwcl9oYWJpbGl0YXJfYm90b25fanMgPSBjb21waWxhckV4cHJlc2lvbihmb3JtLmV4cHJfaGFiaWxpdGFyX2JvdG9uKVxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YXIgZGVmYXVsdFRhcmVhID0gYXdhaXQgZ2V0RGVmYXVsdFRhcmVhKGNvbnRleHQsIHBhcmFtZXRlcnMub3BlcmF0aXZvKTtcclxuICAgICAgICAgICAgdmFyIGRlZmF1bHRJbmZvcm1hY2lvbkhkciA9IChhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShcclxuICAgICAgICAgICAgICAgIGBzZWxlY3QgIFxyXG4gICAgICAgICAgICAgICAgICAgIGpzb25iX2J1aWxkX29iamVjdChcclxuICAgICAgICAgICAgICAgICAgICAnZG9taW5pbycgICAgICAgLCAke2NvbnRleHQuYmUuZGIucXVvdGVMaXRlcmFsKERFRkFVTFRfRE9NSU5JTyl9LFxyXG4gICAgICAgICAgICAgICAgICAgICdub21jYWxsZScgICAgICAsIG51bGwgICAgICAgICAgLFxyXG4gICAgICAgICAgICAgICAgICAgICdzZWN0b3InICAgICAgICAsIG51bGwgICAgICAgICAgLFxyXG4gICAgICAgICAgICAgICAgICAgICdlZGlmaWNpbycgICAgICAsIG51bGwgICAgICAgICAgLFxyXG4gICAgICAgICAgICAgICAgICAgICdlbnRyYWRhJyAgICAgICAsIG51bGwgICAgICAgICAgLFxyXG4gICAgICAgICAgICAgICAgICAgICducm9jYXRhc3RyYWwnICAsIG51bGwgICAgICAgICAgLFxyXG4gICAgICAgICAgICAgICAgICAgICdwaXNvJyAgICAgICAgICAsIG51bGwgICAgICAgICAgLFxyXG4gICAgICAgICAgICAgICAgICAgICdkZXBhcnRhbWVudG8nICAsIG51bGwgICAgICAgICAgLFxyXG4gICAgICAgICAgICAgICAgICAgICdoYWJpdGFjaW9uJyAgICAsIG51bGwgICAgICAgICAgLFxyXG4gICAgICAgICAgICAgICAgICAgICdjYXNhJyAgICAgICAgICAsIG51bGwgICAgICAgICAgLFxyXG4gICAgICAgICAgICAgICAgICAgICdwcmlvcmlkYWQnICAgICAsIG51bGwgICAgICAgICAgLFxyXG4gICAgICAgICAgICAgICAgICAgICdvYnNlcnZhY2lvbmVzJyAsIG51bGwgICAgICAgICAgLFxyXG4gICAgICAgICAgICAgICAgICAgICdjaXRhJyAgICAgICAgICAsIG51bGwgICAgICAgICAgLFxyXG4gICAgICAgICAgICAgICAgICAgICdjYXJnYScgICAgICAgICAsIG51bGwgICAgICAgICAgLFxyXG4gICAgICAgICAgICAgICAgICAgICdzZW1hbmEnICAgICAgICAsIG51bGxcclxuICAgICAgICAgICAgICAgICkgYXMgdGVtLFxyXG4gICAgICAgICAgICAgICAganNvbmJfYnVpbGRfb2JqZWN0KFxyXG4gICAgICAgICAgICAgICAgICAgICd0YXJlYScsICR7Y29udGV4dC5iZS5kYi5xdW90ZUxpdGVyYWwoZGVmYXVsdFRhcmVhLnRhcmVhKX0sXHJcbiAgICAgICAgICAgICAgICAgICAgJ2ZlY2hhX2FzaWduYWNpb24nLCBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgICdhc2lnbmFkbycsICR7Y29udGV4dC5iZS5kYi5xdW90ZUxpdGVyYWwocGFyYW1ldGVycy5pZHBlcl9sb2d1ZWFkb190YWJsZXQgfHwgY29udGV4dC51c2VyLmlkcGVyKX0sXHJcbiAgICAgICAgICAgICAgICAgICAgJ21haW5fZm9ybScsICR7Y29udGV4dC5iZS5kYi5xdW90ZUxpdGVyYWwoZGVmYXVsdFRhcmVhLm1haW5fZm9ybSl9XHJcbiAgICAgICAgICAgICAgICApIGFzIHRhcmVhXHJcbiAgICAgICAgICAgICAgICBgLFxyXG4gICAgICAgICAgICAgICAgW11cclxuICAgICAgICAgICAgKS5mZXRjaFVuaXF1ZVJvdygpKS5yb3c7XHJcbiAgICAgICAgICAgIHZhciB7IHVuaWRhZF9hbmFsaXNpcywgcGtfYWdyZWdhZGEgfSA9IChhd2FpdCBnZXRVQVByaW5jaXBhbChjb250ZXh0LmNsaWVudCwgcGFyYW1ldGVycy5vcGVyYXRpdm8pKTtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIHRpbWVzdGFtcDogYmUuY2FjaGVzLnRpbWVzdGFtcEVzdHJ1Y3R1cmEsXHJcbiAgICAgICAgICAgICAgICAuLi5yZXN1bHQucm93LFxyXG4gICAgICAgICAgICAgICAgb3BlcmF0aXZvOiBwYXJhbWV0ZXJzLm9wZXJhdGl2byxcclxuICAgICAgICAgICAgICAgIGNvblJlYUhvZ2FyLFxyXG4gICAgICAgICAgICAgICAgY29uZmlnU29ydGVvLFxyXG4gICAgICAgICAgICAgICAgaGFiaWxpdGFjaW9uQm90b25Gb3JtdWxhcmlvLFxyXG4gICAgICAgICAgICAgICAgbm9SZWFzOiBiZS5jYWNoZXMudGFibGVDb250ZW50Lm5vX3JlYSxcclxuICAgICAgICAgICAgICAgIG5vUmVhc1N1cDogYmUuY2FjaGVzLnRhYmxlQ29udGVudC5ub19yZWFfc3VwLFxyXG4gICAgICAgICAgICAgICAgZGVmYXVsdEluZm9ybWFjaW9uSGRyLFxyXG4gICAgICAgICAgICAgICAgdWFQcGFsOiB1bmlkYWRfYW5hbGlzaXMsXHJcbiAgICAgICAgICAgICAgICBzZW1hbmFzLFxyXG4gICAgICAgICAgICAgICAgcGtBZ3JlZ2FkYVVhUHBhbDogcGtfYWdyZWdhZGFcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjogJ2dlbmVyYXJfZm9ybXVsYXJpb3MnLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6IFtcclxuICAgICAgICAgICAgeyBuYW1lOiAnYW5uaW8nLCB0eXBlTmFtZTogJ2ludGVnZXInLCByZWZlcmVuY2VzOiAnYW5uaW8nIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ21lcycsIHR5cGVOYW1lOiAnaW50ZWdlcicsIHJlZmVyZW5jZXM6ICdtZXMnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ2xvdGUnLCB0eXBlTmFtZTogJ2ludGVnZXInLCByZWZlcmVuY2VzOiAnbG90ZXMnIH0sXHJcbiAgICAgICAgXSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246YXN5bmMgZnVuY3Rpb24oY29udGV4dDpQcm9jZWR1cmVDb250ZXh0LCBwYXJhbWV0ZXJzOkNvcmVGdW5jdGlvblBhcmFtZXRlcnM8e2FubmlvOm51bWJlciwgbWVzOm51bWJlciwgbG90ZTpudW1iZXJ9Pil7XHJcbiAgICAgICAgICAgIHZhciBiZT1jb250ZXh0LmJlO1xyXG4gICAgICAgICAgICBjb25zdCBPUEVSQVRJVk8gPSBhd2FpdCBnZXRPcGVyYXRpdm9BY3R1YWwoY29udGV4dCk7XHJcbiAgICAgICAgICAgIGxldCByb3c6IFVuaWRhZEFuYWxpc2lzID0gYXdhaXQgZ2V0VUFQcmluY2lwYWwoY29udGV4dC5jbGllbnQsIE9QRVJBVElWTyk7XHJcbiAgICAgICAgICAgIGxldCByZXN1bHRQcmVndW50YXMgPSBhd2FpdCBiZS5wcm9jZWR1cmUucHJlZ3VudGFzX3VhX3RyYWVyLmNvcmVGdW5jdGlvbihjb250ZXh0LCByb3cpXHJcbiAgICAgICAgICAgIHZhciBjb250ZW5lZG9yVmFjaW86IHsgW2tleTogc3RyaW5nXTogYW55IH0gPSB7fTtcclxuICAgICAgICAgICAgcmVzdWx0UHJlZ3VudGFzLmZvckVhY2goZnVuY3Rpb24gKGRlZlByZWd1bnRhOmFueSkge1xyXG4gICAgICAgICAgICAgICAgY29udGVuZWRvclZhY2lvW2RlZlByZWd1bnRhLnZhcl9uYW1lXSA9IGRlZlByZWd1bnRhLnVuaWRhZF9hbmFsaXNpcyA/IFtdIDogbnVsbDtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGNvbnRlbmVkb3JWYWNpby5hbm5pbyA9IHBhcmFtZXRlcnMuYW5uaW87XHJcbiAgICAgICAgICAgIGNvbnRlbmVkb3JWYWNpby5tZXMgPSBwYXJhbWV0ZXJzLm1lcztcclxuICAgICAgICAgICAgY29udGVuZWRvclZhY2lvLmxvdGUgPSBwYXJhbWV0ZXJzLmxvdGU7XHJcblxyXG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoXHJcbiAgICAgICAgICAgICAgICBgc2VsZWN0IGRlYmVfaGFiZXIuaWRfY2FzbywgcyBhcyBpZFxyXG4gICAgICAgICAgICAgICAgICAgIGZyb20gKHNlbGVjdCBsb3RlLCBhcm1hcl9pZChhbm5pbywgbWVzLCBsb3RlLCBzKSBhcyBpZF9jYXNvLCBzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gKHNlbGVjdCBhbm5pbyxtZXMsbG90ZSwgY2FudF9jdWVzIGZyb20gbG90ZXMgd2hlcmUgKGFubmlvLG1lcyxsb3RlKT0oJDIsJDMsJDQpKSByLCBsYXRlcmFsIGdlbmVyYXRlX3NlcmllcygxLGNhbnRfY3Vlcykgc1xyXG4gICAgICAgICAgICAgICAgICAgICkgZGViZV9oYWJlciBsZWZ0IGpvaW4gZGVmZ2VuIGhheSBvbiBoYXkuaWRfY2FzbyA9IGRlYmVfaGFiZXIuaWRfY2FzbyBhbmQgaGF5Lm9wZXJhdGl2bz0kMVxyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIGhheS5pZF9jYXNvIGlzIG51bGxgLFxyXG4gICAgICAgICAgICAgICAgW09QRVJBVElWTywgcGFyYW1ldGVycy5hbm5pbywgcGFyYW1ldGVycy5tZXMsIHBhcmFtZXRlcnMubG90ZV1cclxuICAgICAgICAgICAgKS5mZXRjaEFsbCgpO1xyXG4gICAgICAgICAgICB2YXIgcGFyYW1zID0geyBvcGVyYXRpdm86IE9QRVJBVElWTyB9O1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IChyZXN1bHQucm93Q291bnQgfHwgMCk7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgYmUucHJvY2VkdXJlLmNhc29fZ3VhcmRhci5jb3JlRnVuY3Rpb24oXHJcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dCxcclxuICAgICAgICAgICAgICAgICAgICBjaGFuZ2luZyhwYXJhbXMsIHsgaWRfY2FzbzogcmVzdWx0LnJvd3NbaV0uaWRfY2FzbywgZGF0b3NfY2FzbzogY2hhbmdpbmcoY29udGVuZWRvclZhY2lvLCB7IGlkOiByZXN1bHQucm93c1tpXS5pZCB9KSB9KVxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiB7IGFncmVnYWRhczogcmVzdWx0LnJvd0NvdW50IH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjogJ3VwbG9hZF9maWxlJyxcclxuICAgICAgICBwcm9ncmVzczogdHJ1ZSxcclxuICAgICAgICBwYXJhbWV0ZXJzOiBbXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ2lkX2FkanVudG8nLCB0eXBlTmFtZTogJ2ludGVnZXInIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ25vbWJyZScsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIGZpbGVzOntjb3VudDoxfSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246ZnVuY3Rpb24oY29udGV4dDpQcm9jZWR1cmVDb250ZXh0LCBwYXJhbWV0ZXJzOkNvcmVGdW5jdGlvblBhcmFtZXRlcnM8e2lkX2FkanVudG8/Om51bWJlciwgbm9tYnJlPzpzdHJpbmd9PiwgZmlsZXMpe1xyXG4gICAgICAgICAgICBsZXQgYmU9Y29udGV4dC5iZTtcclxuICAgICAgICAgICAgbGV0IGNsaWVudD1jb250ZXh0LmNsaWVudDtcclxuICAgICAgICAgICAgY29udGV4dC5pbmZvcm1Qcm9ncmVzcyh7bWVzc2FnZTpiZS5tZXNzYWdlcy5maWxlVXBsb2FkZWR9KTtcclxuICAgICAgICAgICAgLy9AdHMtaWdub3JlIGV4aXN0ZVxyXG4gICAgICAgICAgICBsZXQgZmlsZSA9IGZpbGVzWzBdXHJcbiAgICAgICAgICAgIGxldCBleHQgPSBQYXRoLmV4dG5hbWUoZmlsZS5wYXRoKS5zdWJzdHIoMSk7XHJcbiAgICAgICAgICAgIGxldCBvcmlnaW5hbEZpbGVuYW1lID0gZmlsZS5vcmlnaW5hbEZpbGVuYW1lLnNsaWNlKDAsIC0oZXh0Lmxlbmd0aCArIDEpKTtcclxuICAgICAgICAgICAgbGV0IGZpbGVuYW1lID0gcGFyYW1ldGVycy5ub21icmUgfHwgb3JpZ2luYWxGaWxlbmFtZTtcclxuICAgICAgICAgICAgbGV0IG5ld1BhdGggPSAnbG9jYWwtYXR0YWNobWVudHMvZmlsZS0nO1xyXG4gICAgICAgICAgICB2YXIgY3JlYXRlUmVzcG9uc2UgPSBmdW5jdGlvbiBjcmVhdGVSZXNwb25zZShhZGp1bnRvUm93OmFueSkge1xyXG4gICAgICAgICAgICAgICAgbGV0IHJlc3VsdGFkbyA9IHtcclxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiAnTGEgc3ViaWRhIHNlIHJlYWxpesOzIGNvcnJlY3RhbWVudGUgKHVwZGF0ZSknLFxyXG4gICAgICAgICAgICAgICAgICAgIG5vbWJyZTogYWRqdW50b1Jvdy5ub21icmUsXHJcbiAgICAgICAgICAgICAgICAgICAgbm9tYnJlX29yaWdpbmFsOiBhZGp1bnRvUm93Lm5vbWJyZV9vcmlnaW5hbCxcclxuICAgICAgICAgICAgICAgICAgICBleHQ6IGFkanVudG9Sb3cuZXh0LFxyXG4gICAgICAgICAgICAgICAgICAgIGZlY2hhOiBhZGp1bnRvUm93LmZlY2hhLFxyXG4gICAgICAgICAgICAgICAgICAgIGhvcmE6IGFkanVudG9Sb3cuaG9yYSxcclxuICAgICAgICAgICAgICAgICAgICBpZF9hZGp1bnRvOiBhZGp1bnRvUm93LmlkX2FkanVudG9cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHRhZG9cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvL0B0cy1pZ25vcmVcclxuICAgICAgICAgICAgdmFyIG1vdmVGaWxlID0gZnVuY3Rpb24gbW92ZUZpbGUoZmlsZSwgaWRfYWRqdW50bywgZXh0ZW5zaW9uKSB7XHJcbiAgICAgICAgICAgICAgICAvL0B0cy1pZ25vcmVcclxuICAgICAgICAgICAgICAgIGZzLm1vdmUoZmlsZS5wYXRoLCBuZXdQYXRoICsgaWRfYWRqdW50byArICcuJyArIGV4dGVuc2lvbiwgeyBvdmVyd3JpdGU6IHRydWUgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHBhcmFtZXRlcnMuaWRfYWRqdW50bykge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjb250ZXh0LmNsaWVudC5xdWVyeShgdXBkYXRlIGFkanVudG9zIHNldCBub21icmU9ICQxLG5vbWJyZV9vcmlnaW5hbCA9ICQyLCBleHQgPSAkMywgcnV0YSA9IGNvbmNhdCgnbG9jYWwtYXR0YWNobWVudHMvZmlsZS0nLCQ0Ojp0ZXh0LCcuJywkMzo6dGV4dCksIGZlY2hhID0gbm93KCksIGhvcmEgPSBkYXRlX3RydW5jKCdzZWNvbmRzJyxjdXJyZW50X3RpbWVzdGFtcC1jdXJyZW50X2RhdGUpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdoZXJlIGlkX2FkanVudG8gPSAkNCByZXR1cm5pbmcgKmAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtmaWxlbmFtZSwgb3JpZ2luYWxGaWxlbmFtZSwgZXh0LCBwYXJhbWV0ZXJzLmlkX2FkanVudG9dXHJcbiAgICAgICAgICAgICAgICAgICAgKS5mZXRjaFVuaXF1ZVJvdygpLnRoZW4oZnVuY3Rpb24gKHJlc3VsdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlUmVzcG9uc2UocmVzdWx0LnJvdylcclxuICAgICAgICAgICAgICAgICAgICB9KS50aGVuKGZ1bmN0aW9uIChyZXN1bHRhZG8pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbW92ZUZpbGUoZmlsZSwgcmVzdWx0YWRvLmlkX2FkanVudG8sIHJlc3VsdGFkby5leHQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0YWRvXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjb250ZXh0LmNsaWVudC5xdWVyeShgaW5zZXJ0IGludG8gYWRqdW50b3MgKG5vbWJyZSwgbm9tYnJlX29yaWdpbmFsLCBleHQsIGZlY2hhLCBob3JhKSB2YWx1ZXMgKCQxLCQyLCQzLG5vdygpLCBkYXRlX3RydW5jKCdzZWNvbmRzJyxjdXJyZW50X3RpbWVzdGFtcC1jdXJyZW50X2RhdGUpKSByZXR1cm5pbmcgKmAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtmaWxlbmFtZSwgb3JpZ2luYWxGaWxlbmFtZSwgZXh0XVxyXG4gICAgICAgICAgICAgICAgICAgICkuZmV0Y2hVbmlxdWVSb3coKS50aGVuKGZ1bmN0aW9uIChyZXN1bHQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuY2xpZW50LnF1ZXJ5KGB1cGRhdGUgYWRqdW50b3Mgc2V0IHJ1dGEgPSBjb25jYXQoJ2xvY2FsLWF0dGFjaG1lbnRzL2ZpbGUtJyxpZF9hZGp1bnRvOjp0ZXh0LCcuJyxleHQpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGVyZSBpZF9hZGp1bnRvID0gJDEgcmV0dXJuaW5nICpgLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Jlc3VsdC5yb3cuaWRfYWRqdW50b11cclxuICAgICAgICAgICAgICAgICAgICAgICAgKS5mZXRjaFVuaXF1ZVJvdygpLnRoZW4oZnVuY3Rpb24gKHJlc3VsdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZVJlc3BvbnNlKHJlc3VsdC5yb3cpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKHJlc3VsdGFkbykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbW92ZUZpbGUoZmlsZSwgcmVzdWx0YWRvLmlkX2FkanVudG8sIHJlc3VsdGFkby5leHQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdGFkb1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKGVycikge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjogJ2Nhc29fZ3VhcmRhcicsXHJcbiAgICAgICAgcGFyYW1ldGVyczogW1xyXG4gICAgICAgICAgICB7IG5hbWU6ICdvcGVyYXRpdm8nLCB0eXBlTmFtZTogJ3RleHQnLCByZWZlcmVuY2VzOiAnb3BlcmF0aXZvcycgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAnaWRfY2FzbycsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAnZGF0b3NfY2FzbycsIHR5cGVOYW1lOiAnanNvbmInIH0sXHJcbiAgICAgICAgXSxcclxuICAgICAgICBkZWZpbmVkSW46ICdkbWVuY3UnLFxyXG4gICAgICAgIC8vQHRzLWlnbm9yZSBlc3BlY2lmaWNvIGVsIHRpcG8gZGUgbG9zIHBhcsOhbWV0cm9zXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOiBhc3luYyBmdW5jdGlvbiAoY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCwgcGFyYW1ldGVyczoge1xyXG4gICAgICAgICAgICBvcGVyYXRpdm86IElkT3BlcmF0aXZvLFxyXG4gICAgICAgICAgICBpZF9jYXNvOiBzdHJpbmcsXHJcbiAgICAgICAgICAgIGRhdG9zX2Nhc286IEFueU9iamVjdFxyXG4gICAgICAgIH0sIG5ld0NsaWVudDogQ2xpZW50KSB7XHJcbiAgICAgICAgICAgIHZhciB7IHVuaWRhZF9hbmFsaXNpcywgcGtfYWdyZWdhZGEgfSA9IChhd2FpdCBnZXRVQVByaW5jaXBhbChjb250ZXh0LmNsaWVudCwgcGFyYW1ldGVycy5vcGVyYXRpdm8pKTtcclxuICAgICAgICAgICAgdmFyIGNsaWVudCA9IG5ld0NsaWVudCB8fCBjb250ZXh0LmNsaWVudDtcclxuICAgICAgICAgICAgdmFyIGRhdG9zX2pzb24gPSBwYXJhbWV0ZXJzLmRhdG9zX2Nhc287XHJcbiAgICAgICAgICAgIHZhciBiZSA9IGNvbnRleHQuYmU7XHJcbiAgICAgICAgICAgIHZhciB0YWJsZVN0cnVjdHVyZXNfYXBwOiBUYWJsZURlZmluaXRpb25zID0gYmUudGFibGVTdHJ1Y3R1cmVzO1xyXG5cclxuICAgICAgICAgICAgdmFyIHN0cnVjdF9kbWVuY3UgPSBjcmVhdGVTdHJ1Y3R1cmUoY29udGV4dCwgdW5pZGFkX2FuYWxpc2lzKTtcclxuICAgICAgICAgICAgZGF0b3NfanNvblsnb3BlcmF0aXZvJ10gPSBwYXJhbWV0ZXJzLm9wZXJhdGl2bztcclxuXHJcbiAgICAgICAgICAgIGRhdG9zX2pzb25bcGtfYWdyZWdhZGFdID0gcGFyYW1ldGVycy5pZF9jYXNvO1xyXG4gICAgICAgICAgICBmdW5jdGlvbiBjb21wbGV0YXJfdWx0X3BrX2VuX2Fycih1bHRfcGs6YW55LCB1YV9hcnI6YW55W10pIHtcclxuICAgICAgICAgICAgICAgIHZhciBjb25fcGtfY29tcGxldGEgPSB1YV9hcnI7XHJcbiAgICAgICAgICAgICAgICBpZiAodWFfYXJyICYmIHVhX2Fyci5sZW5ndGggPj0gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbl9wa19jb21wbGV0YSA9IGNvbl9wa19jb21wbGV0YS5tYXAoKHVuYV91YSwgaSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB1bmFfdWFbdWx0X3BrXSA9IGkgKyAxXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB1bmFfdWE7XHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gY29uX3BrX2NvbXBsZXRhXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZnVuY3Rpb24gcmVjb3JyZXJfZGF0b3NfYWdyZWdhbmRvX3BrcyhkYXRvc2o6IGFueSkge1xyXG4gICAgICAgICAgICAgICAgZm9yICh2YXIga2V5TmFtZSBpbiBkYXRvc2opIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgZGF0b0sgPSBkYXRvc2pba2V5TmFtZV07XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRhdG9LIGluc3RhbmNlb2YgQXJyYXkgJiYgZGF0b0subGVuZ3RoID49IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBrID0gdGFibGVTdHJ1Y3R1cmVzX2FwcFtrZXlOYW1lXShjb250ZXh0KS5wcmltYXJ5S2V5O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdWx0X3BrID0gcGtbcGsubGVuZ3RoIC0gMV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdG9LID0gY29tcGxldGFyX3VsdF9wa19lbl9hcnIodWx0X3BrLCBkYXRvSyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdG9LLmZvckVhY2goKGVsZW1JOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1JID0gcmVjb3JyZXJfZGF0b3NfYWdyZWdhbmRvX3BrcyhlbGVtSSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoa2V5TmFtZS5zdGFydHNXaXRoKCckJykgfHwga2V5TmFtZS5zdGFydHNXaXRoKCdfJykgfHwga2V5TmFtZSA9PSAnbnVsbCcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGRhdG9zaltrZXlOYW1lXTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZGF0b3NqO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGRhdG9zX2pzb24gPSByZWNvcnJlcl9kYXRvc19hZ3JlZ2FuZG9fcGtzKGRhdG9zX2pzb24pO1xyXG4gICAgICAgICAgICBkZWxldGUgZGF0b3NfanNvbi5jb2RSZWE7XHJcbiAgICAgICAgICAgIGRlbGV0ZSBkYXRvc19qc29uLmNvZE5vUmVhO1xyXG4gICAgICAgICAgICBkZWxldGUgZGF0b3NfanNvbi5yZXN1bWVuRXN0YWRvO1xyXG4gICAgICAgICAgICBkZWxldGUgZGF0b3NfanNvbi5jb2RSZWFTdXA7XHJcbiAgICAgICAgICAgIGRlbGV0ZSBkYXRvc19qc29uLmNvZE5vUmVhU3VwO1xyXG4gICAgICAgICAgICBkZWxldGUgZGF0b3NfanNvbi5yZXN1bWVuRXN0YWRvU3VwO1xyXG5cclxuICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzKGRhdG9zX2pzb24pLmxlbmd0aCA+IDIpIHtcclxuICAgICAgICAgICAgICAgIHZhciBxdWVyaWVzID0gc3FsVG9vbHMuc3RydWN0dXJlZERhdGEuc3FsV3JpdGUoZGF0b3NfanNvbiwgc3RydWN0X2RtZW5jdSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gYXdhaXQgcXVlcmllcy5yZWR1Y2UoZnVuY3Rpb24gKHByb21pc2U6IFByb21pc2U8YW55PiwgcXVlcnk6IHN0cmluZykge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBwcm9taXNlLnRoZW4oZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2xpZW50LnF1ZXJ5KHF1ZXJ5KS5leGVjdXRlKCkudGhlbihmdW5jdGlvbiAoX3Jlc3VsdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdvayc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSwgUHJvbWlzZS5yZXNvbHZlKCkpLnRoZW4oZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcIm9rXCI7XHJcbiAgICAgICAgICAgICAgICB9KS5jYXRjaChmdW5jdGlvbiAoZXJyOiBFcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJjYXNvX2d1YXJkYXIgRU5UUkEgRU4gRUwgQ0FUQ0g6IFwiLCBleHBlY3RlZChlcnIpKVxyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IGVyclxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiAndmFjaW8nO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdjYXNvX3RyYWVyJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOiBbXHJcbiAgICAgICAgICAgIC8ve25hbWU6J2Zvcm11bGFyaW8nICAgICwgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVOYW1lOid0ZXh0J30sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ29wZXJhdGl2bycsIHJlZmVyZW5jZXM6ICdvcGVyYXRpdm9zJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICdpZF9jYXNvJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgcmVzdWx0T2s6ICdnb1RvRW5jJyxcclxuICAgICAgICBkZWZpbmVkSW46ICdkbWVuY3UnLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjogYXN5bmMgZnVuY3Rpb24gKGNvbnRleHQ6IFByb2NlZHVyZUNvbnRleHQsIHBhcmFtZXRlcnM6IENvcmVGdW5jdGlvblBhcmFtZXRlcnM8eyBvcGVyYXRpdm86IElkT3BlcmF0aXZvLCBpZF9jYXNvOiBzdHJpbmcgfT4pIHtcclxuICAgICAgICAgICAgdmFyIHsgdW5pZGFkX2FuYWxpc2lzLCBwa19hZ3JlZ2FkYSB9ID0gKGF3YWl0IGdldFVBUHJpbmNpcGFsKGNvbnRleHQuY2xpZW50LCBwYXJhbWV0ZXJzLm9wZXJhdGl2bykpO1xyXG4gICAgICAgICAgICB2YXIgY2xpZW50ID0gY29udGV4dC5jbGllbnQ7XHJcbiAgICAgICAgICAgIHZhciBzdHJ1Y3RfZG1lbmN1ID0gY3JlYXRlU3RydWN0dXJlKGNvbnRleHQsIHVuaWRhZF9hbmFsaXNpcyk7XHJcbiAgICAgICAgICAgIHZhciBzcWwgPSBzcWxUb29scy5zdHJ1Y3R1cmVkRGF0YS5zcWxSZWFkKHsgb3BlcmF0aXZvOiBwYXJhbWV0ZXJzLm9wZXJhdGl2bywgW3BrX2FncmVnYWRhXTogcGFyYW1ldGVycy5pZF9jYXNvIH0sIHN0cnVjdF9kbWVuY3UpO1xyXG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gYXdhaXQgY2xpZW50LnF1ZXJ5KHNxbCkuZmV0Y2hVbmlxdWVWYWx1ZSgpO1xyXG4gICAgICAgICAgICB2YXIgcmVzcG9uc2UgPSB7XHJcbiAgICAgICAgICAgICAgICBvcGVyYXRpdm86IHBhcmFtZXRlcnMub3BlcmF0aXZvLFxyXG4gICAgICAgICAgICAgICAgaWRfY2FzbzogcGFyYW1ldGVycy5pZF9jYXNvLFxyXG4gICAgICAgICAgICAgICAgZGF0b3NfY2FzbzogcmVzdWx0LnZhbHVlLFxyXG4gICAgICAgICAgICAgICAgLy9mb3JtdWxhcmlvOiBmb3JtUHJpbmNpcGFsLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdjYXNvX3RyYWVyX29fY3JlYXInLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6IFtcclxuICAgICAgICAgICAgeyBuYW1lOiAnb3BlcmF0aXZvJywgcmVmZXJlbmNlczogJ29wZXJhdGl2b3MnLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ2lkX2Nhc28nLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgXSxcclxuICAgICAgICByZXN1bHRPazogJ2dvVG9FbmMnLFxyXG4gICAgICAgIC8vIGJpdGFjb3JhOnthbHdheXM6dHJ1ZX0sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOmFzeW5jIGZ1bmN0aW9uKGNvbnRleHQ6UHJvY2VkdXJlQ29udGV4dCwgcGFyYW1ldGVyczpDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzPHtvcGVyYXRpdm86IElkT3BlcmF0aXZvLCBpZF9jYXNvOiBzdHJpbmd9Pil7XHJcbiAgICAgICAgICAgIHZhciBiZSA9IGNvbnRleHQuYmU7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gYXdhaXQgYmUucHJvY2VkdXJlWydjYXNvX3RyYWVyJ10uY29yZUZ1bmN0aW9uKGNvbnRleHQsIHBhcmFtZXRlcnMpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdFxyXG4gICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgICAgICAgICAgIHZhciBqc29uID0gYXdhaXQgYmUucHJvY2VkdXJlWydjYXNvX3ByZXBhcmFyJ10uY29yZUZ1bmN0aW9uKGNvbnRleHQsIHBhcmFtZXRlcnMpO1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgYmUucHJvY2VkdXJlWydjYXNvX2d1YXJkYXInXS5jb3JlRnVuY3Rpb24oY29udGV4dCwgY2hhbmdpbmcocGFyYW1ldGVycywgeyBkYXRvc19jYXNvOiBqc29uIH0pKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBhd2FpdCBiZS5wcm9jZWR1cmVbJ2Nhc29fdHJhZXInXS5jb3JlRnVuY3Rpb24oY29udGV4dCwgcGFyYW1ldGVycyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjogJ3Bhc2FyX2pzb24ydWEnLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6IFtcclxuICAgICAgICBdLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjphc3luYyBmdW5jdGlvbihjb250ZXh0OlByb2NlZHVyZUNvbnRleHQsIF9wYXJhbWV0ZXJzOkNvcmVGdW5jdGlvblBhcmFtZXRlcnM8e30+KXtcclxuICAgICAgICAgICAgLyogR0VORVJBTElaQVI6ICovXHJcbiAgICAgICAgICAgIHZhciBiZSA9IGNvbnRleHQuYmU7XHJcbiAgICAgICAgICAgIC8qIEZJTi1HRU5FUkFMSVpBUjogKi9cclxuICAgICAgICAgICAgY29uc3QgT1BFUkFUSVZPID0gYXdhaXQgZ2V0T3BlcmF0aXZvQWN0dWFsKGNvbnRleHQpO1xyXG4gICAgICAgICAgICB2YXIgeyB1bmlkYWRfYW5hbGlzaXMsIHBrX2FncmVnYWRhIH0gPSAoYXdhaXQgZ2V0VUFQcmluY2lwYWwoY29udGV4dC5jbGllbnQsIE9QRVJBVElWTykpO1xyXG4gICAgICAgICAgICBsZXQgcmVzdWx0TWFpbiA9IGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBTRUxFQ1QgKiBmcm9tICR7YmUuZGIucXVvdGVJZGVudCh1bmlkYWRfYW5hbGlzaXMpfSBMSU1JVCAxYCkuZmV0Y2hBbGwoKTtcclxuICAgICAgICAgICAgaWYgKChyZXN1bHRNYWluLnJvd0NvdW50IHx8IDApID4gMCkge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ0hBWSBEQVRPUycsIHJlc3VsdE1haW4ucm93cylcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSEFZIERBVE9TLiBOTyBTRSBQVUVERSBJTklDSUFSIEVMIFBBU0FKRScpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGxldCByZXN1bHRKc29uID0gYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoXHJcbiAgICAgICAgICAgICAgICBgU0VMRUNUIG9wZXJhdGl2bywgZW5jIGlkX2Nhc28sIGpzb25fZW5jdWVzdGEgZGF0b3NfY2FzbyBmcm9tIHRlbSBcclxuICAgICAgICAgICAgICAgICAgICBXSEVSRSBvcGVyYXRpdm89JDEgYW5kIHJlc3VtZW5fZXN0YWRvIGlzIGRpc3RpbmN0IGZyb20gJ3ZhY2lvJyBhbmQganNvbl9lbmN1ZXN0YSBpcyBub3QgbnVsbCBcclxuICAgICAgICAgICAgICAgICAgICBvcmRlciBieSBlbmMgYCxcclxuICAgICAgICAgICAgICAgIFtPUEVSQVRJVk9dXHJcbiAgICAgICAgICAgICkuZmV0Y2hBbGwoKTtcclxuICAgICAgICAgICAgdmFyIHByb2NlZHVyZUd1YXJkYXIgPSBiZS5wcm9jZWR1cmUuY2Fzb19ndWFyZGFyO1xyXG4gICAgICAgICAgICBpZiAocHJvY2VkdXJlR3VhcmRhci5kZWZpbmVkSW4gIT0gJ2RtZW5jdScpIHtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignaGF5IHF1ZSBzb2JyZWVzY3JpYmlyIGNhc29fZ3VhcmRhcicpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLmFsbChyZXN1bHRKc29uLnJvd3MubWFwKGFzeW5jIGZ1bmN0aW9uIChyb3cpIHtcclxuICAgICAgICAgICAgICAgIGxldCByZXN1bHRhZG8gPSBgaWQgY2FzbyAke3Jvdy5pZF9jYXNvfTogYDtcclxuICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgYmUuaW5UcmFuc2FjdGlvbihudWxsLCBhc3luYyBmdW5jdGlvbiAoX2NsaWVudCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRhZG8gKz0gYXdhaXQgcHJvY2VkdXJlR3VhcmRhci5jb3JlRnVuY3Rpb24oY29udGV4dCwgcm93KTtcclxuICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGVycm9yID0gZXhwZWN0ZWQoZXJyKTtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgZXJyTWVzc2FnZSA9IHJlc3VsdGFkbyArIFwianNvbjJ1YSBlcnJvci4gXCIgKyBlcnJvci5tZXNzYWdlO1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdGFkbyA9IGVyck1lc3NhZ2VcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGVyck1lc3NhZ2UsIGVycm9yKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdGFkby5pbmNsdWRlcygnb2snKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciB7IGRhdG9zX2Nhc28sIGlkX2Nhc28sIG9wZXJhdGl2byB9ID0gYXdhaXQgYmUucHJvY2VkdXJlLmNhc29fdHJhZXIuY29yZUZ1bmN0aW9uKGNvbnRleHQsIHsgb3BlcmF0aXZvOiByb3cub3BlcmF0aXZvLCBpZF9jYXNvOiByb3cuaWRfY2FzbyB9KVxyXG4gICAgICAgICAgICAgICAgICAgIHZhciB2ZXJRdWVHcmFibyA9IHsgZGF0b3NfY2FzbywgaWRfY2Fzbywgb3BlcmF0aXZvIH1cclxuICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNjcmVwYW5jZXMuc2hvd0FuZFRocm93KHZlclF1ZUdyYWJvLCByb3cpXHJcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IodmVyUXVlR3JhYm8sIHJvdywgZXhwZWN0ZWQoZXJyKSlcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0YWRvO1xyXG4gICAgICAgICAgICB9KSkuY2F0Y2goZnVuY3Rpb24gKGVycikge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyO1xyXG4gICAgICAgICAgICB9KS50aGVuKGZ1bmN0aW9uIChyZXN1bHQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdkbV9mb3Jwa3JhaXpfY2FyZ2FyJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOiBbXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ29wZXJhdGl2bycsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAncGtfcmFpel92YWx1ZScsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAndGFyZWEnLCB0eXBlTmFtZTogJ3RleHQnLCByZWZlcmVuY2VzOiBcInRhcmVhc1wiIH0sXHJcbiAgICAgICAgXSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246YXN5bmMgZnVuY3Rpb24oY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCwgcGFyYW1ldGVyczogQ29yZUZ1bmN0aW9uUGFyYW1ldGVyczx7b3BlcmF0aXZvOiBJZE9wZXJhdGl2bywgcGtfcmFpel92YWx1ZTogc3RyaW5nLCB0YXJlYTogc3RyaW5nfT4pe1xyXG4gICAgICAgICAgICBjb25zdCBiZT1jb250ZXh0LmJlO1xyXG4gICAgICAgICAgICBjb25zdCB7b3BlcmF0aXZvLHBrX3JhaXpfdmFsdWUsIHRhcmVhfSA9IHBhcmFtZXRlcnM7XHJcbiAgICAgICAgICAgIGNvbnN0IHtwZXJtaXRlX2JvcnJhcl91YTogdGFyZWFQZXJtaXRlQm9ycmFyVUEsIG1haW5fZm9ybX0gPSAoYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgc2VsZWN0IHBlcm1pdGVfYm9ycmFyX3VhLCBtYWluX2Zvcm0gXHJcbiAgICAgICAgICAgICAgICAgICAgZnJvbSB0YXJlYXMgXHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvPSAkMSBhbmQgdGFyZWE9JDJcclxuICAgICAgICAgICAgYCwgW29wZXJhdGl2bywgdGFyZWFdKS5mZXRjaFVuaXF1ZVJvdygpKS5yb3c7XHJcbiAgICAgICAgICAgIGNvbnN0IHt1bmlkYWRfYW5hbGlzaXN9ID0gKGF3YWl0IGdldFVBUHJpbmNpcGFsKGNvbnRleHQuY2xpZW50LCBwYXJhbWV0ZXJzLm9wZXJhdGl2bykpO1xyXG4gICAgICAgICAgICBjb25zdCBjb25kdml2PSBgIHQub3BlcmF0aXZvPSAkMSBhbmQgdC5lbmMgPSQyYDtcclxuICAgICAgICAgICAgY29uc3QgdXN1YXJpb1B1ZWRlUHJvY2VzYXJFbmN1ZXN0YXMgPSBjb250ZXh0LnB1ZWRlPy5lbmN1ZXN0YXM/LnByb2Nlc2FyIHx8IGZhbHNlO1xyXG4gICAgICAgICAgICBjb25zdCBzb2xvTGVjdHVyYSA9IChhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICBzZWxlY3QgY291bnQoKilcclxuICAgICAgICAgICAgICAgICAgICBmcm9tIHRhcmVhc190ZW0gam9pbiB0ZW0gdXNpbmcob3BlcmF0aXZvLCBlbmMpIGpvaW4gZXN0YWRvcyB1c2luZyAob3BlcmF0aXZvLCBlc3RhZG8pIC0tcGsgZXN0YWRvIHkgdGVtIHZlcmlmaWNhZGFcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm89ICQxIGFuZCBlbmMgPSAkMiBhbmQgKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXJnYWRvX2RtIGlzIG5vdCBudWxsIG9yIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBub3QgcGVybWl0ZV9lZGl0YXJfZW5jdWVzdGEgYW5kIGFzaWduYWRvIDw+ICR7Y29udGV4dC5iZS5kYi5xdW90ZUxpdGVyYWwoY29udGV4dC51c2VyLmlkcGVyKX0gb3JcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZWEgPSB0YXJlYV9hY3R1YWwgYW5kIHRhcmVhX2FjdHVhbCA9ICdwcm9jJyBhbmQgJDMgb3IgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmVhID0gdGFyZWFfYWN0dWFsIGFuZCB0YXJlYV9hY3R1YWwgPSAncHJvYycgYW5kIGVzdGFkbyA9ICdWJ1xyXG4gICAgICAgICAgICApYCwgW29wZXJhdGl2bywgcGtfcmFpel92YWx1ZSwgIXVzdWFyaW9QdWVkZVByb2Nlc2FyRW5jdWVzdGFzXSkuZmV0Y2hVbmlxdWVWYWx1ZSgpKS52YWx1ZSA+IDA7XHJcbiAgICAgICAgICAgIHZhciBwZXJtaXRlR2VuZXJhck11ZXN0cmEgPSBhd2FpdCBnZXRPcGVyYXRpdm9QZXJtaXRlR2VuZXJhck11ZXN0cmEoY29udGV4dC5jbGllbnQsIG9wZXJhdGl2byk7XHJcbiAgICAgICAgICAgIHZhciB7IHJvdyB9ID0gYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoZ2V0SGRyUXVlcnkoY29uZHZpdiwgY29udGV4dCwgdW5pZGFkX2FuYWxpc2lzLCBwZXJtaXRlR2VuZXJhck11ZXN0cmEsIGNvbnRleHQudXNlci5pZHBlciksIFtvcGVyYXRpdm8sIHBrX3JhaXpfdmFsdWVdKS5mZXRjaFVuaXF1ZVJvdygpO1xyXG4gICAgICAgICAgICByb3cuaW5mb3JtYWNpb25IZHJbcGtfcmFpel92YWx1ZV0udGFyZWEgPSB7XHJcbiAgICAgICAgICAgICAgICB0YXJlYSxcclxuICAgICAgICAgICAgICAgIG1haW5fZm9ybVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgLi4ucm93LFxyXG4gICAgICAgICAgICAgICAgb3BlcmF0aXZvLFxyXG4gICAgICAgICAgICAgICAgc29sb0xlY3R1cmEsXHJcbiAgICAgICAgICAgICAgICBpZHBlcjogY29udGV4dC51c2VyLmlkcGVyLFxyXG4gICAgICAgICAgICAgICAgY2FyZ2FzOiBsaWtlQXIuY3JlYXRlSW5kZXgocm93LmNhcmdhcy5tYXAoKGNhcmdhOiBhbnkpID0+ICh7IC4uLmNhcmdhLCBmZWNoYTogY2FyZ2EuZmVjaGEgPyBkYXRlLmlzbyhjYXJnYS5mZWNoYSkudG9EbXkoKSA6IG51bGwgfSkpLCAnY2FyZ2EnKSxcclxuICAgICAgICAgICAgICAgIHRpbWVzdGFtcEVzdHJ1Y3R1cmE6IGJlLmNhY2hlcy50aW1lc3RhbXBFc3RydWN0dXJhLFxyXG4gICAgICAgICAgICAgICAgcGVybWl0ZUJvcnJhckVsZW1lbnRvc1VBOiAhISh0YXJlYVBlcm1pdGVCb3JyYXJVQSAmJiBnZXRNb2RvQnlQb2xpY3koYmUpID09PSAnR0FCSU5FVEUnICYmIGNvbnRleHQucHVlZGU/LmVuY3Vlc3Rhcz8uYm9ycmFyX3VhKVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnZG1fZm9ycGtyYWl6X2Rlc2NhcmdhcicsXHJcbiAgICAgICAgcGFyYW1ldGVyczogW1xyXG4gICAgICAgICAgICB7IG5hbWU6ICdvcGVyYXRpdm8nLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ3BlcnNpc3RlbnRlcycsIHR5cGVOYW1lOiAnanNvbmInIH0sXHJcbiAgICAgICAgXSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246IGFzeW5jIGZ1bmN0aW9uIChjb250ZXh0OiBQcm9jZWR1cmVDb250ZXh0LCBwYXJhbWV0ZXJzOiBDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzPHsgb3BlcmF0aXZvOiBJZE9wZXJhdGl2bywgcGVyc2lzdGVudGVzOiBBbnlPYmplY3QgfT4pIHtcclxuICAgICAgICAgICAgdmFyIGJlID0gY29udGV4dC5iZTtcclxuICAgICAgICAgICAgdmFyIHsgb3BlcmF0aXZvLCBwZXJzaXN0ZW50ZXMgfSA9IHBhcmFtZXRlcnM7XHJcbiAgICAgICAgICAgIGNvbnN0IFVBX1BSSU5DSVBBTCA9IChhd2FpdCBnZXRVQVByaW5jaXBhbChjb250ZXh0LmNsaWVudCwgb3BlcmF0aXZvKSkudW5pZGFkX2FuYWxpc2lzO1xyXG4gICAgICAgICAgICB2YXIgcHJvY2VkdXJlR3VhcmRhciA9IGJlLnByb2NlZHVyZS5jYXNvX2d1YXJkYXI7XHJcblxyXG4gICAgICAgICAgICBjb25zdCByZXNwdWVzdGFzID0gcGVyc2lzdGVudGVzLnJlc3B1ZXN0YXNbVUFfUFJJTkNJUEFMXSB8fCB7fTtcclxuICAgICAgICAgICAgZm9yIChjb25zdCBpZEVuYyBpbiByZXNwdWVzdGFzKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCByZXNwdWVzdGFzVUFQcmluY2lwYWwgPSByZXNwdWVzdGFzW2lkRW5jXTtcclxuICAgICAgICAgICAgICAgIGlmIChyZXNwdWVzdGFzVUFQcmluY2lwYWwuczFhMV9vYnMgPT0gJyFwcnVlYmEgZGUgZXJyb3IgYWwgZ3JhYmFyIScpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0RJTyBQUlVFQkEgREUgRVJST1IgQUwgR1JBQkFSJyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBhd2FpdCBndWFyZGFyRW5jdWVzdGFFblRlbShjb250ZXh0LCBvcGVyYXRpdm8sIGlkRW5jLCByZXNwdWVzdGFzVUFQcmluY2lwYWwsIHBlcnNpc3RlbnRlcy5pbmZvcm1hY2lvbkhkcltpZEVuY10udGFyZWEudGFyZWEpO1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgcmVnaXN0cmFyUGFzZVRhYmxhKGNvbnRleHQsIG9wZXJhdGl2bywgaWRFbmMsIHJlc3B1ZXN0YXNVQVByaW5jaXBhbClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gJ29rJztcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjogJ2RtX3NpbmNyb25pemFyJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOiBbXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ3BlcnNpc3RlbnRlcycsIHR5cGVOYW1lOiAnanNvbmInIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ21vZG9fZG0nLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ2NhbWJpYV9tb2RvX2RtJywgdHlwZU5hbWU6ICdib29sZWFuJyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICdpZHBlcl9sb2d1ZWFkb190YWJsZXQnLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgXSxcclxuICAgICAgICB1bmxvZ2dlZDp0cnVlLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjphc3luYyBmdW5jdGlvbihjb250ZXh0OiBQcm9jZWR1cmVDb250ZXh0LCBwYXJhbWV0ZXJzOiBDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzPHtwZXJzaXN0ZW50ZXM6IEFueU9iamVjdCwgbW9kb19kbTogc3RyaW5nLCBjYW1iaWFfbW9kb19kbTogYm9vbGVhbiwgaWRwZXJfbG9ndWVhZG9fdGFibGV0OiBzdHJpbmd9Pil7XHJcbiAgICAgICAgICAgIGNvbnN0IE9QRVJBVElWTyA9IGF3YWl0IGdldE9wZXJhdGl2b0FjdHVhbChjb250ZXh0KTtcclxuICAgICAgICAgICAgY29uc3QgcGVybWl0ZUdlbmVyYXJNdWVzdHJhID0gYXdhaXQgZ2V0T3BlcmF0aXZvUGVybWl0ZUdlbmVyYXJNdWVzdHJhKGNvbnRleHQuY2xpZW50LCBPUEVSQVRJVk8pO1xyXG4gICAgICAgICAgICBpZighcGVybWl0ZUdlbmVyYXJNdWVzdHJhICYmIHBhcmFtZXRlcnMuY2FtYmlhX21vZG9fZG0pe1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoJ05vIGVzIHBvc2libGUgY2FtYmlhciBkZSBtb2RvIGVuIGVzdGUgb3BlcmF0aXZvJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFyIGJlID0gY29udGV4dC5iZTtcclxuICAgICAgICAgICAgdmFyIHsgcGVyc2lzdGVudGVzLCBtb2RvX2RtLCBjYW1iaWFfbW9kb19kbSwgaWRwZXJfbG9ndWVhZG9fdGFibGV0IH0gPSBwYXJhbWV0ZXJzO1xyXG4gICAgICAgICAgICBjb25zdCB1c2VybmFtZUxvZ3VlYWRvVGFibGV0ID0gKGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBzZWxlY3QgdXN1YXJpbyBmcm9tIHVzdWFyaW9zIHdoZXJlIGlkcGVyID0gJDFgLCBbaWRwZXJfbG9ndWVhZG9fdGFibGV0XSkuZmV0Y2hVbmlxdWVWYWx1ZSgpKS52YWx1ZTsgXHJcbiAgICAgICAgICAgIHZhciB0b2tlbjogc3RyaW5nID0gcGVyc2lzdGVudGVzPy50b2tlbiB8fCAoYXdhaXQgYmUucHJvY2VkdXJlLnRva2VuX2dldC5jb3JlRnVuY3Rpb24oY29udGV4dCwge1xyXG4gICAgICAgICAgICAgICAgdXNlcmFnZW50OiBjb250ZXh0LnNlc3Npb24ucmVxLnVzZXJhZ2VudCxcclxuICAgICAgICAgICAgICAgIHVzZXJuYW1lOiB1c2VybmFtZUxvZ3VlYWRvVGFibGV0XHJcbiAgICAgICAgICAgIH0pKS50b2tlbjtcclxuICAgICAgICAgICAgY29uc3QgbnVtX3NpbmNybyA9IChhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICBJTlNFUlQgSU5UTyBzaW5jcm9uaXphY2lvbmVzICh0b2tlbiwgdXN1YXJpbywgZGF0b3MpXHJcbiAgICAgICAgICAgICAgICAgICAgVkFMVUVTICgkMSwkMiwkMykgXHJcbiAgICAgICAgICAgICAgICAgICAgUkVUVVJOSU5HIHNpbmNyb1xyXG4gICAgICAgICAgICAgICAgYCwgW3Rva2VuLCB1c2VybmFtZUxvZ3VlYWRvVGFibGV0LCBwZXJzaXN0ZW50ZXNdXHJcbiAgICAgICAgICAgICkuZmV0Y2hVbmlxdWVWYWx1ZSgpKS52YWx1ZTtcclxuICAgICAgICAgICAgdmFyIGNvbmR2aXYgPSBgXHJcbiAgICAgICAgICAgICAgICB0dC5vcGVyYXRpdm89ICQxIFxyXG4gICAgICAgICAgICAgICAgYW5kIGFzaWduYWRvID0gJDJcclxuICAgICAgICAgICAgICAgIGFuZCB0dC5vcGVyYWNpb249J2NhcmdhcicgXHJcbiAgICAgICAgICAgICAgICBhbmQgKHR0LmNhcmdhZG9fZG0gaXMgbnVsbCBvciB0dC5jYXJnYWRvX2RtID0gJHtjb250ZXh0LmJlLmRiLnF1b3RlTGl0ZXJhbCh0b2tlbil9KVxyXG4gICAgICAgICAgICBgO1xyXG4gICAgICAgICAgICBjb25zdCB7IHVuaWRhZF9hbmFsaXNpczogVUFfUFJJTkNJUEFMLCBwa19hZ3JlZ2FkYSB9ID0gKGF3YWl0IGdldFVBUHJpbmNpcGFsKGNvbnRleHQuY2xpZW50LCBPUEVSQVRJVk8pKTtcclxuICAgICAgICAgICAgaWYgKHBlcnNpc3RlbnRlcykge1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaWRFbmMgaW4gcGVyc2lzdGVudGVzLnJlc3B1ZXN0YXNbVUFfUFJJTkNJUEFMXSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCByZXNwdWVzdGFzVUFQcmluY2lwYWwgPSBwZXJzaXN0ZW50ZXMucmVzcHVlc3Rhc1tVQV9QUklOQ0lQQUxdW2lkRW5jXTtcclxuICAgICAgICAgICAgICAgICAgICAvL1RPRE8gQUwgUEFSRUNFUiBFU1TDgSBSRVNVRUxUTywgTE8gREVKTyBQT1IgTEFTIERVREFTXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzKHJlc3B1ZXN0YXNVQVByaW5jaXBhbCkubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgY2FyZ2EgPSBwZXJzaXN0ZW50ZXMuY2FyZ2FzW3BlcnNpc3RlbnRlcy5pbmZvcm1hY2lvbkhkcltpZEVuY10udGVtLmNhcmdhXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRhcmVhID0gcGVyc2lzdGVudGVzLmluZm9ybWFjaW9uSGRyW2lkRW5jXS50YXJlYS50YXJlYTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2FyZ2FUYXJlYXNBcmVhcyA9IChhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBzZWxlY3QgcmVjZXBjaW9uaXN0YVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gdGFyZWFzX2FyZWFzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvPSAkMSBhbmQgdGFyZWEgPSAkMiBhbmQgYXJlYSA9ICQzIC0tcGsgdmVyaWZpY2FkYVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtPUEVSQVRJVk8sIHRhcmVhLCBjYXJnYS5jYXJnYV1cclxuICAgICAgICAgICAgICAgICAgICAgICAgKS5mZXRjaFVuaXF1ZVZhbHVlKCkpLnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNhcmdhVGFyZWFzQXJlYXMgJiYgIWNhcmdhLnJlY2VwY2lvbmlzdGEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IEVycm9yKGBubyBzZSBkZWZpbmnDsyB1biByZWNlcGNpb25pc3RhIHBhcmEgZWwgb3BlcmF0aXZvICR7T1BFUkFUSVZPfSwgdGFyZWEgJHt0YXJlYX0sIMOhcmVhICR7Y2FyZ2EuY2FyZ2F9LCBwb3IgZmF2b3IgY29tdW5pcXVlc8OpIGNvbiBHQUJJTkVURSBwYXJhIHF1ZSBjYXJndWVuIHVuIHJlY2VwY2lvbmlzdGFgKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChOdW1iZXIoaWRFbmMpIDwgMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWRFbmMgPSBhd2FpdCBwZXJzaXN0aXJFbmN1ZXN0YUF1dG9nZW5lcmFkYUVuRE0oY29udGV4dCwgT1BFUkFUSVZPLCBjYXJnYS5jYXJnYSwgaWRFbmMsIHRva2VuLCByZXNwdWVzdGFzVUFQcmluY2lwYWwsIGNhcmdhLnJlY2VwY2lvbmlzdGEgfHwgY2FyZ2FUYXJlYXNBcmVhcywgcGVyc2lzdGVudGVzLmlkcGVyLCBtb2RvX2RtIGFzIE1vZG9ETSwgY2FtYmlhX21vZG9fZG0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwdWVkb0d1YXJkYXJFblRFTSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB7IHBhcmFtcywgc2V0dGVycyB9ID0gZ2V0U2V0dGVyc0FuZFBhcmFtZXRlcnNGb3JSZWFOb1JlYVJlc3VtZW5Fc3RhZG8oe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZWEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwdWVzdGFzVUFQcmluY2lwYWwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXR0ZXJzOiBbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYGVzdGFkbyA9ICR7Y29udGV4dC5iZS5kYi5xdW90ZUxpdGVyYWwoRVNUQURPX1BPU1RFUklPUl9ERVNDQVJHQSl9YCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgY2FyZ2Fkb19kbT1udWxsYFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtczogW09QRVJBVElWTywgaWRFbmMsIHRhcmVhLCB0b2tlbl0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0aW5vOiAndGFyZWFzX3RlbSdcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNhbWJpYV9tb2RvX2RtIHx8IHBlcnNpc3RlbnRlcy5pZHBlciAhPSBpZHBlcl9sb2d1ZWFkb190YWJsZXQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldHRlcnMucHVzaChgb3BlcmFjaW9uID0gJ2Rlc2NhcmdhcidgKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcXVlcnlUYXJlYXNUZW0gPSBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGB1cGRhdGUgdGFyZWFzX3RlbVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldCAke3NldHRlcnMuam9pbignLCcpfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2bz0gJDEgYW5kIGVuYyA9ICQyIGFuZCB0YXJlYSA9ICQzIGFuZCBjYXJnYWRvX2RtID0gJDRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgJ29rJ2BcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICApLmZldGNoT25lUm93SWZFeGlzdHMoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcHVlZG9HdWFyZGFyRW5URU0gPSBxdWVyeVRhcmVhc1RlbS5yb3dDb3VudCA9PSAxO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocHVlZG9HdWFyZGFyRW5URU0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IGd1YXJkYXJFbmN1ZXN0YUVuVGVtKGNvbnRleHQsIE9QRVJBVElWTywgaWRFbmMsIHJlc3B1ZXN0YXNVQVByaW5jaXBhbCwgdGFyZWEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgcmVnaXN0cmFyUGFzZVRhYmxhKGNvbnRleHQsIE9QRVJBVElWTywgaWRFbmMsIHJlc3B1ZXN0YXNVQVByaW5jaXBhbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBmcy5hcHBlbmRGaWxlKCdsb2NhbC1yZWNpYmlkby1zaW4tdG9rZW4udHh0JywgSlNPTi5zdHJpbmdpZnkoeyBub3c6IG5ldyBEYXRlKCksIGlkcGVyOiBwZXJzaXN0ZW50ZXMuaWRwZXIsIGlkQ2FzbzogaWRFbmMsIFtwa19hZ3JlZ2FkYV06IHJlc3B1ZXN0YXNVQVByaW5jaXBhbCB9KSArICdcXG5cXG4nLCAndXRmOCcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciB7IHJvdyB9ID0gYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoZ2V0SGRyUXVlcnkoY29uZHZpdiwgY29udGV4dCwgVUFfUFJJTkNJUEFMLCBwZXJtaXRlR2VuZXJhck11ZXN0cmEsIGlkcGVyX2xvZ3VlYWRvX3RhYmxldCksIFtPUEVSQVRJVk8sIGlkcGVyX2xvZ3VlYWRvX3RhYmxldF0pLmZldGNoVW5pcXVlUm93KCk7XHJcbiAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KFxyXG4gICAgICAgICAgICAgICAgYHVwZGF0ZSB0YXJlYXNfdGVtIHR0XHJcbiAgICAgICAgICAgICAgICAgICAgc2V0ICBlc3RhZG8gPSAkNCwgY2FyZ2Fkb19kbT0kMzo6dGV4dFxyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlICR7Y29uZHZpdn0gXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nIGVuY2BcclxuICAgICAgICAgICAgICAgICxcclxuICAgICAgICAgICAgICAgIFtPUEVSQVRJVk8sIGlkcGVyX2xvZ3VlYWRvX3RhYmxldCwgdG9rZW4sIEVTVEFET19QT1NURVJJT1JfQ0FSR0FdXHJcbiAgICAgICAgICAgICkuZmV0Y2hBbGwoKTtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIC4uLnJvdyxcclxuICAgICAgICAgICAgICAgIG9wZXJhdGl2bzogT1BFUkFUSVZPLFxyXG4gICAgICAgICAgICAgICAgc29sb0xlY3R1cmE6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgdG9rZW4sXHJcbiAgICAgICAgICAgICAgICBudW1fc2luY3JvLFxyXG4gICAgICAgICAgICAgICAgaWRwZXI6IGlkcGVyX2xvZ3VlYWRvX3RhYmxldCxcclxuICAgICAgICAgICAgICAgIGNhcmdhczogbGlrZUFyLmNyZWF0ZUluZGV4KHJvdy5jYXJnYXMubWFwKGNhcmdhID0+ICh7IC4uLmNhcmdhLCBmZWNoYTogY2FyZ2EuZmVjaGEgPyBkYXRlLmlzbyhjYXJnYS5mZWNoYSkudG9EbXkoKSA6IG51bGwsIGVzdGFkb19jYXJnYTogJ3JlbGV2YW1pZW50bycgfSkpLCAnY2FyZ2EnKVxyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjogJ2RtX2JhY2t1cCcsXHJcbiAgICAgICAgcGFyYW1ldGVyczogW1xyXG4gICAgICAgICAgICB7IG5hbWU6ICd0b2tlbicsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAndGVtJywgdHlwZU5hbWU6ICdqc29uYicgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAnbW9kb19kbScsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIHVubG9nZ2VkOiB0cnVlLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjogYXN5bmMgZnVuY3Rpb24gKGNvbnRleHQ6IFByb2NlZHVyZUNvbnRleHQsIHBhcmFtZXRlcnM6IENvcmVGdW5jdGlvblBhcmFtZXRlcnM8eyB0b2tlbjogc3RyaW5nIHwgbnVsbCwgdGVtOiBBbnlPYmplY3QsIG1vZG9fZG06IE1vZG9ETSB9Pikge1xyXG4gICAgICAgICAgICB2YXIgeyBiZSwgY2xpZW50IH0gPSBjb250ZXh0O1xyXG4gICAgICAgICAgICBjb25zdCBPUEVSQVRJVk8gPSBhd2FpdCBnZXRPcGVyYXRpdm9BY3R1YWwoY29udGV4dCk7XHJcbiAgICAgICAgICAgIHZhciBudW1fc2luY3JvOiBudW1iZXIgPSAwO1xyXG4gICAgICAgICAgICB2YXIgdG9rZW46IHN0cmluZyB8IG51bGwgPSBwYXJhbWV0ZXJzLnRva2VuO1xyXG4gICAgICAgICAgICBpZiAodG9rZW4gPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgb2s6ICdvazpOL1QnIH07XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgeyByb3dDb3VudCB9ID0gYXdhaXQgY2xpZW50LnF1ZXJ5KGBzZWxlY3QgMSBmcm9tIHRva2VucyB3aGVyZSB0b2tlbiA9ICQxYCwgW3Rva2VuXSkuZmV0Y2hPbmVSb3dJZkV4aXN0cygpO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFyb3dDb3VudCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7IG9rOiAnb2s6Ti9UJyB9O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciB7IHVuaWRhZF9hbmFsaXNpcywgcGtfYWdyZWdhZGEgfSA9IChhd2FpdCBnZXRVQVByaW5jaXBhbChjb250ZXh0LmNsaWVudCwgT1BFUkFUSVZPKSk7XHJcbiAgICAgICAgICAgIGlmIChwYXJhbWV0ZXJzLnRlbSkge1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgYmFja3VwIG9mIGxpa2VBcihwYXJhbWV0ZXJzLnRlbSkuYXJyYXkoKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBhcmVhID0gYmFja3VwLmNhcmdhLmNhcmdhO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCByZXNwdWVzdGFzUmFpeiA9IGJhY2t1cC5yZXNwdWVzdGFzUmFpejtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgaWRFbmNETSA9IGJhY2t1cC5mb3JQa1JhaXpbcGtfYWdyZWdhZGFdLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHJlY2VwY2lvbmlzdGEgPSBiYWNrdXAuY2FyZ2EucmVjZXBjaW9uaXN0YTtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgYXNpZ25hZG8gPSBiYWNrdXAuaWRwZXI7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKE51bWJlcihpZEVuY0RNKSA8IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgcGVyc2lzdGlyRW5jdWVzdGFBdXRvZ2VuZXJhZGFFbkRNKGNvbnRleHQsIE9QRVJBVElWTywgYXJlYSwgaWRFbmNETSwgdG9rZW4sIHJlc3B1ZXN0YXNSYWl6LCByZWNlcGNpb25pc3RhLCBhc2lnbmFkbywgcGFyYW1ldGVycy5tb2RvX2RtLCBmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHJlc3VsdCA9IGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYHVwZGF0ZSB0ZW1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXQganNvbl9iYWNrdXAgPSAkMywgZmVjaGFfYmFja3VwID0gY3VycmVudF90aW1lc3RhbXBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm89ICQxIGFuZCBlbmMgPSAkMiBhbmQganNvbl9iYWNrdXAgaXMgZGlzdGluY3QgZnJvbSAkNFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAnb2snYFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW09QRVJBVElWTywgaWRFbmNETSwgcmVzcHVlc3Rhc1JhaXosIHJlc3B1ZXN0YXNSYWl6XVxyXG4gICAgICAgICAgICAgICAgICAgICAgICApLmZldGNoT25lUm93SWZFeGlzdHMoKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICBvazogJ29rJ1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnY29uc2lzdGlyX3ZpdmllbmRhJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOiBbXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ29wZXJhdGl2bycsIHJlZmVyZW5jZXM6ICdvcGVyYXRpdm9zJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICdjYXNvJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOiBhc3luYyBmdW5jdGlvbiAoY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCwgcGFyYW1ldGVyczogQ29yZUZ1bmN0aW9uUGFyYW1ldGVyczx7IG9wZXJhdGl2bzogSWRPcGVyYXRpdm8sIGNhc286IHN0cmluZyB9Pikge1xyXG4gICAgICAgICAgICB2YXIgeyBiZSwgY2xpZW50IH0gPSBjb250ZXh0O1xyXG4gICAgICAgICAgICBsZXQgcGFyYW1fcHJvYyA9IHtcclxuICAgICAgICAgICAgICAgIG9wZXJhdGl2bzogcGFyYW1ldGVycy5vcGVyYXRpdm8sXHJcbiAgICAgICAgICAgICAgICBpZF9jYXNvOiBwYXJhbWV0ZXJzLmNhc29cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBsZXQgZXJyTWVzc2FnZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XHJcbiAgICAgICAgICAgIGxldCByZXN1bHRhZG86IHN0cmluZyB8IG51bGwgPSBudWxsO1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0YWRvID0gYXdhaXQgYmUucHJvY2VkdXJlLmNvbnNpc3Rpcl9lbmN1ZXN0YS5jb3JlRnVuY3Rpb24oY29udGV4dCxcclxuICAgICAgICAgICAgICAgICAgICBwYXJhbV9wcm9jXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgICAgICAgICAgIHZhciBlcnJvciA9IHVuZXhwZWN0ZWQoZXJyKTtcclxuICAgICAgICAgICAgICAgIGVyck1lc3NhZ2UgPSBcIiBjb25zaXN0aXJfY2Fzby4gXCIgKyBlcnJvci5tZXNzYWdlO1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJNZXNzYWdlLCBlcnJvcilcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygnKioqKioqIGNvbnNpc3Rpcl9jYXNvIHJlc3VsdGFkbzonLCByZXN1bHRhZG8pXHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICBvazogJ29rJ1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjogJ2RtX3Jlc2NhdGFyJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOiBbXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ2xvY2FsU3RvcmFnZUl0ZW0nLCB0eXBlTmFtZTogJ2pzb25iJyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICdsb2NhbFN0b3JhZ2VJdGVtS2V5JywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgdW5sb2dnZWQ6IHRydWUsXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOiBhc3luYyBmdW5jdGlvbiAoY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCwgcGFyYW1zOiBDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzPHsgbG9jYWxTdG9yYWdlSXRlbUtleTogc3RyaW5nLCBsb2NhbFN0b3JhZ2VJdGVtOiBBbnlPYmplY3QgfT4pIHtcclxuICAgICAgICAgICAgdmFyIHsgbG9jYWxTdG9yYWdlSXRlbUtleSwgbG9jYWxTdG9yYWdlSXRlbSB9ID0gcGFyYW1zO1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2cobG9jYWxTdG9yYWdlSXRlbSk7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCBmcy5hcHBlbmRGaWxlKCdsb2NhbC1yZXNjYXRlLnR4dCcsIEpTT04uc3RyaW5naWZ5KHsgbm93OiBuZXcgRGF0ZSgpLCB1c2VyOiBjb250ZXh0LnVzZXJuYW1lLCBpdGVtS2V5OiBsb2NhbFN0b3JhZ2VJdGVtS2V5LCBpdGVtRGF0YTogbG9jYWxTdG9yYWdlSXRlbSB9KSArICdcXG5cXG4nLCAndXRmOCcpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuICdvayc7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignRVJST1InLCBleHBlY3RlZChlcnIpKTtcclxuICAgICAgICAgICAgICAgIHRocm93IGVycjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnb3BlcmF0aXZvX2dldCcsXHJcbiAgICAgICAgcGFyYW1ldGVyczpbXSxcclxuICAgICAgICB1bmxvZ2dlZDp0cnVlLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjphc3luYyBmdW5jdGlvbihjb250ZXh0OlByb2NlZHVyZUNvbnRleHQsIF9wYXJhbWV0ZXJzOkNvcmVGdW5jdGlvblBhcmFtZXRlcnM8e30+KXtcclxuICAgICAgICAgICAgcmV0dXJuIGdldE9wZXJhdGl2b0FjdHVhbChjb250ZXh0KVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnZ2V0X3JhbmRvbV9mcmVlX2Nhc2UnLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6IFt7IG5hbWU6ICdvcGVyYXRpdm8nLCB0eXBlTmFtZTogJ3RleHQnIH1dLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjogYXN5bmMgZnVuY3Rpb24gKGNvbnRleHQ6IFByb2NlZHVyZUNvbnRleHQsIHBhcmFtczogQ29yZUZ1bmN0aW9uUGFyYW1ldGVyczx7IG9wZXJhdGl2bzogSWRPcGVyYXRpdm8gfT4pIHtcclxuICAgICAgICAgICAgY29uc3QgbWluc1RvRXhwaXJlID0gMzA7XHJcbiAgICAgICAgICAgIGNvbnN0IG1pbnNTaW5jZUJsb3F1ZWQgPSBgZGF0ZV9wYXJ0KCdtaW4nLCBhZ2UoY3VycmVudF90aW1lc3RhbXAsIGZlY2hhX2Jsb3F1ZW8pKWA7XHJcbiAgICAgICAgICAgIGNvbnN0IGVuYyA9IGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBzZWxlY3QgZW5jIGZyb20gdGVtIHdoZXJlIG9wZXJhdGl2bz0kMSBhbmQgKGxpYnJlIG9yICR7bWluc1NpbmNlQmxvcXVlZH0gPiAke21pbnNUb0V4cGlyZX0pIGxpbWl0IDE7YCwgW3BhcmFtcy5vcGVyYXRpdm9dKS5mZXRjaFVuaXF1ZVZhbHVlKCk7XHJcbiAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBVUERBVEUgdGVtIHNldCBsaWJyZSA9IGZhbHNlLCBmZWNoYV9ibG9xdWVvPWN1cnJlbnRfdGltZXN0YW1wIHdoZXJlIG9wZXJhdGl2bz0kMSBhbmQgZW5jPSQyYCwgW3BhcmFtcy5vcGVyYXRpdm8sIGVuYy52YWx1ZV0pLmV4ZWN1dGUoKTtcclxuICAgICAgICAgICAgcmV0dXJuIGVuYy52YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjogJ211ZXN0cmFfZ2VuZXJhcicsXHJcbiAgICAgICAgcGFyYW1ldGVyczogW1xyXG4gICAgICAgICAgICB7IG5hbWU6ICdvcGVyYXRpdm8nLCB0eXBlTmFtZTogJ3RleHQnLCByZWZlcmVuY2VzOiBcIm9wZXJhdGl2b3NcIiB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICdhcmVhJywgdHlwZU5hbWU6ICdpbnRlZ2VyJywgcmVmZXJlbmNlczogXCJhcmVhc1wiIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ2RvbWluaW8nLCB0eXBlTmFtZTogJ2ludGVnZXInLCBkZWZhdWx0VmFsdWU6IDMgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAnY2FudF9lbmN1ZXN0YXMnLCB0eXBlTmFtZTogJ2ludGVnZXInIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ3RhcmVhX2FjdHVhbCcsIHR5cGVOYW1lOiAndGV4dCcsIHJlZmVyZW5jZXM6ICd0YXJlYXMnIH0sXHJcbiAgICAgICAgXSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246IGFzeW5jIGZ1bmN0aW9uIChjb250ZXh0OiBQcm9jZWR1cmVDb250ZXh0LCBwYXJhbXM6IENvcmVGdW5jdGlvblBhcmFtZXRlcnM8eyBvcGVyYXRpdm86IElkT3BlcmF0aXZvLCBhcmVhOiBudW1iZXIsIGRvbWluaW86IG51bWJlciwgY2FudF9lbmN1ZXN0YXM6IG51bWJlciwgdGFyZWFfYWN0dWFsOiBJZFRhcmVhIH0+KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGJlID0gY29udGV4dC5iZTtcclxuICAgICAgICAgICAgdmFyIHBlcm1pdGVHZW5lcmFyTXVlc3RyYSA9IGF3YWl0IGdldE9wZXJhdGl2b1Blcm1pdGVHZW5lcmFyTXVlc3RyYShjb250ZXh0LmNsaWVudCwgcGFyYW1zLm9wZXJhdGl2byk7XHJcbiAgICAgICAgICAgIGlmIChwZXJtaXRlR2VuZXJhck11ZXN0cmEpIHtcclxuICAgICAgICAgICAgICAgIGxldCB0b3RhbEFjdHVhbCA9IChhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShcclxuICAgICAgICAgICAgICAgICAgICBgc2VsZWN0IGNvdW50KCopIGFzIHRvdGFsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2bz0gJDEgYW5kIGFyZWEgPSAkMmAsXHJcbiAgICAgICAgICAgICAgICAgICAgW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy5hcmVhXVxyXG4gICAgICAgICAgICAgICAgKS5mZXRjaFVuaXF1ZVZhbHVlKCkpLnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCBwYXJhbXMuY2FudF9lbmN1ZXN0YXMgLSB0b3RhbEFjdHVhbDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZW5jID0gYXdhaXQgZ2VuZXJhck51ZXZvSWRFbmMoY29udGV4dCwgcGFyYW1zLm9wZXJhdGl2bywgcGFyYW1zLmFyZWEsIG1heEFFbmNQb3JBcmVhKVxyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGdlbmVyYXJFbmN1ZXN0YVRlbShjb250ZXh0LCBwYXJhbXMub3BlcmF0aXZvLCBlbmMsIHBhcmFtcy5hcmVhLCBwYXJhbXMuZG9taW5pbywgcGFyYW1zLnRhcmVhX2FjdHVhbCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBhd2FpdCBnZW5lcmFyVGFyZWFzVGVtRmFsdGFudGVzKGNvbnRleHQsIHBhcmFtcy5vcGVyYXRpdm8pO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuICdvayc7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcihcImVsIG9wZXJhdGl2byBubyBwZXJtaXRlIGdlbmVyYXIgbXVlc3RyYVwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnbXVlc3RyYV9hZ3JlZ2FyJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOiBbXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ29wZXJhdGl2bycsIHR5cGVOYW1lOiAndGV4dCcsIHJlZmVyZW5jZXM6IFwib3BlcmF0aXZvc1wiIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ2FyZWEnLCB0eXBlTmFtZTogJ2ludGVnZXInLCByZWZlcmVuY2VzOiBcImFyZWFzXCIgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAnZG9taW5pbycsIHR5cGVOYW1lOiAnaW50ZWdlcicsIGRlZmF1bHRWYWx1ZTogMyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICdjYW50X2VuY3Vlc3RhcycsIHR5cGVOYW1lOiAnaW50ZWdlcicgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAndGFyZWFfYWN0dWFsJywgdHlwZU5hbWU6ICd0ZXh0JywgcmVmZXJlbmNlczogJ3RhcmVhcycgfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjogYXN5bmMgZnVuY3Rpb24gKGNvbnRleHQ6IFByb2NlZHVyZUNvbnRleHQsIHBhcmFtczogQ29yZUZ1bmN0aW9uUGFyYW1ldGVyczx7IG9wZXJhdGl2bzogSWRPcGVyYXRpdm8sIGFyZWE6IG51bWJlciwgZG9taW5pbzogbnVtYmVyLCBjYW50X2VuY3Vlc3RhczogbnVtYmVyLCB0YXJlYV9hY3R1YWw6IHN0cmluZyB9Pikge1xyXG4gICAgICAgICAgICBjb25zdCBiZSA9IGNvbnRleHQuYmU7XHJcbiAgICAgICAgICAgIHZhciBwZXJtaXRlR2VuZXJhck11ZXN0cmEgPSBhd2FpdCBnZXRPcGVyYXRpdm9QZXJtaXRlR2VuZXJhck11ZXN0cmEoY29udGV4dC5jbGllbnQsIHBhcmFtcy5vcGVyYXRpdm8pO1xyXG4gICAgICAgICAgICBpZiAocGVybWl0ZUdlbmVyYXJNdWVzdHJhKSB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8PSBwYXJhbXMuY2FudF9lbmN1ZXN0YXM7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVuYyA9IGF3YWl0IGdlbmVyYXJOdWV2b0lkRW5jKGNvbnRleHQsIHBhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy5hcmVhLCBtYXhBRW5jUG9yQXJlYSlcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCBnZW5lcmFyRW5jdWVzdGFUZW0oY29udGV4dCwgcGFyYW1zLm9wZXJhdGl2bywgZW5jLCBwYXJhbXMuYXJlYSwgcGFyYW1zLmRvbWluaW8sIHBhcmFtcy50YXJlYV9hY3R1YWwpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgYXdhaXQgZ2VuZXJhclRhcmVhc1RlbUZhbHRhbnRlcyhjb250ZXh0LCBwYXJhbXMub3BlcmF0aXZvKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiAnb2snO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoXCJlbCBvcGVyYXRpdm8gbm8gcGVybWl0ZSBnZW5lcmFyIG11ZXN0cmFcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjogJ2VuY3Vlc3RhX2JsYW5xdWVhcl9wcmV2aXN1YWxpemFyJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOiBbXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ29wZXJhdGl2bycsIHR5cGVOYW1lOiAndGV4dCcsIHJlZmVyZW5jZXM6IFwib3BlcmF0aXZvc1wiIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ2VuYycsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIHJvbGVzOiBbJ2Nvb3JfcHJvYycsICdjb29yX2NhbXBvJywgJ2FkbWluJ10sXHJcbiAgICAgICAgcmVzdWx0T2s6ICdtb3N0cmFyX2VuY3Vlc3RhX2FfYmxhbnF1ZWFyX2NvbnRlbmlkbycsXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOiBhc3luYyBmdW5jdGlvbiAoY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCwgcGFyYW1zOiBDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzPHsgb3BlcmF0aXZvOiBJZE9wZXJhdGl2bywgZW5jOiBzdHJpbmcgfT4pIHtcclxuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IGJ1c2NhckVuY3Vlc3RhRW5UZW0oY29udGV4dCwgcGFyYW1zKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjogJ2VuY3Vlc3RhX2JsYW5xdWVhcicsXHJcbiAgICAgICAgcGFyYW1ldGVyczogW1xyXG4gICAgICAgICAgICB7IG5hbWU6ICdvcGVyYXRpdm8nLCB0eXBlTmFtZTogJ3RleHQnLCByZWZlcmVuY2VzOiBcIm9wZXJhdGl2b3NcIiB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICdlbmMnLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgXSxcclxuICAgICAgICByb2xlczogWydjb29yX3Byb2MnLCAnc3ViY29vcl9jYW1wbycsICdjb29yX2NhbXBvJywgJ2FkbWluJ10sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOiBhc3luYyBmdW5jdGlvbiAoY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCwgcGFyYW1zOiBDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzPHsgb3BlcmF0aXZvOiBJZE9wZXJhdGl2bywgZW5jOiBzdHJpbmcgfT4pIHtcclxuICAgICAgICAgICAgdmFyIGJlID0gY29udGV4dC5iZTtcclxuICAgICAgICAgICAgdmFyIHsgdW5pZGFkX2FuYWxpc2lzLCBwa19hZ3JlZ2FkYSB9ID0gKGF3YWl0IGdldFVBUHJpbmNpcGFsKGNvbnRleHQuY2xpZW50LCBwYXJhbXMub3BlcmF0aXZvKSk7XHJcbiAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KFxyXG4gICAgICAgICAgICAgICAgYGRlbGV0ZSBcclxuICAgICAgICAgICAgICAgICAgICBmcm9tICR7YmUuZGIucXVvdGVJZGVudCh1bmlkYWRfYW5hbGlzaXMpfSBcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm89JDEgYW5kICR7YmUuZGIucXVvdGVJZGVudChwa19hZ3JlZ2FkYSl9ID0gJDJcclxuICAgICAgICAgICAgYCwgW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy5lbmNdKS5leGVjdXRlKCk7XHJcbiAgICAgICAgLy9wYXNvIGEgZW5jdSBwYXJhIGd1YXJkYXIgZW4gaGlzdG9yaWFsXHJcbiAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIHVwZGF0ZSB0ZW1cclxuICAgICAgICAgICAgICAgICAgICBzZXQgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmVhX2FjdHVhbCA9ICdlbmN1J1xyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2byA9ICQxIGFuZCBlbmMgPSAkMiAtLXBrIHZlcmlmaWNhZGFcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgKlxyXG4gICAgICAgICAgICBgLCBbcGFyYW1zLm9wZXJhdGl2bywgcGFyYW1zLmVuY10pLmZldGNoVW5pcXVlUm93KCk7XHJcbiAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIGRlbGV0ZSBcclxuICAgICAgICAgICAgICAgICAgICBmcm9tIHRhcmVhc190ZW0gXHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvID0gJDEgYW5kIGVuYyA9ICQyXHJcbiAgICAgICAgICAgIGAsIFtwYXJhbXMub3BlcmF0aXZvLCBwYXJhbXMuZW5jXSkuZXhlY3V0ZSgpO1xyXG4gICAgICAgICAgICBhd2FpdCBnZW5lcmFyVGFyZWFzVGVtRmFsdGFudGVzKGNvbnRleHQsIHBhcmFtcy5vcGVyYXRpdm8pO1xyXG4gICAgICAgICAgICAvL3Jlc2V0ZW8gdGVtIChubyBzZSBndWFyZGEgaGlzdG9yaWFsIHBvcnF1ZSB0YXJlYV9hY3R1YWwgZXMgbnVsbClcclxuICAgICAgICAgICAgLy9ndWFyZG8gYmFja3VwIHBvciBsYXMgZHVkYXNcclxuICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgdXBkYXRlIHRlbVxyXG4gICAgICAgICAgICAgICAgICAgIHNldCBcclxuICAgICAgICAgICAgICAgICAgICAgICAganNvbl9iYWNrdXAgPSBqc29uX2VuY3Vlc3RhLCBqc29uX2VuY3Vlc3RhID0gbnVsbCwgdGFyZWFfYWN0dWFsID0gbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmVjaGFfbW9kaWZfZW5jdWVzdGEgPSBudWxsLCBmZWNoYV9iYWNrdXAgPSBjdXJyZW50X3RpbWVzdGFtcCwgbW9kaWZpY2FkbyA9IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VtZW5fZXN0YWRvID0gbnVsbCwgcmVzdW1lbl9lc3RhZG9fc3VwID0gbnVsbCwgc3VwZXJ2aXNpb25fZGlyaWdpZGEgPSBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXNlX3RhYmxhID0gbnVsbCwgcmVhID0gbnVsbCwgbm9yZWEgPSBudWxsLCByZWFfc3VwID0gbnVsbCwgbm9yZWFfc3VwID0gbnVsbFxyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2byA9ICQxIGFuZCBlbmMgPSAkMiAtLXBrIHZlcmlmaWNhZGFcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgKlxyXG4gICAgICAgICAgICBgLCBbcGFyYW1zLm9wZXJhdGl2bywgcGFyYW1zLmVuY10pLmZldGNoVW5pcXVlUm93KCk7XHJcbiAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIGRlbGV0ZSBcclxuICAgICAgICAgICAgICAgICAgICBmcm9tIGluY29uc2lzdGVuY2lhc1xyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2byA9ICQxIGFuZCAke2JlLmRiLnF1b3RlSWRlbnQocGtfYWdyZWdhZGEpfSA9ICQyXHJcbiAgICAgICAgICAgIGAsIFtwYXJhbXMub3BlcmF0aXZvLCBwYXJhbXMuZW5jXSkuZXhlY3V0ZSgpO1xyXG4gICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICBkZWxldGUgXHJcbiAgICAgICAgICAgICAgICAgICAgZnJvbSBpbl9jb25fdmFyXHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvID0gJDEgYW5kIHBrX2ludGVncmFkYS0+PiR7YmUuZGIucXVvdGVMaXRlcmFsKHBrX2FncmVnYWRhKX0gPSAkMlxyXG4gICAgICAgICAgICBgLCBbcGFyYW1zLm9wZXJhdGl2bywgcGFyYW1zLmVuY10pLmV4ZWN1dGUoKTtcclxuICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgZGVsZXRlIFxyXG4gICAgICAgICAgICAgICAgICAgIGZyb20gaW5jb25zaXN0ZW5jaWFzX3VsdGltYXNcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm8gPSAkMSBhbmQgcGtfaW50ZWdyYWRhLT4+JHtiZS5kYi5xdW90ZUxpdGVyYWwocGtfYWdyZWdhZGEpfSA9ICQyXHJcbiAgICAgICAgICAgIGAsIFtwYXJhbXMub3BlcmF0aXZvLCBwYXJhbXMuZW5jXSkuZXhlY3V0ZSgpO1xyXG4gICAgICAgICAgICByZXR1cm4gYGxhIGVuY3Vlc3RhICR7cGFyYW1zLmVuY30gc2UgYmxhbnF1ZcOzIGNvcnJlY3RhbWVudGVgO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnZW5jdWVzdGFfYm9ycmFyX3ByZXZpc3VhbGl6YXInLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6IFtcclxuICAgICAgICAgICAgeyBuYW1lOiAnb3BlcmF0aXZvJywgdHlwZU5hbWU6ICd0ZXh0JywgcmVmZXJlbmNlczogXCJvcGVyYXRpdm9zXCIgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAnZW5jJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgcm9sZXM6Wydjb29yX3Byb2MnLCdzdWJjb29yX2NhbXBvJywnY29vcl9jYW1wbycsJ2FkbWluJ10sXHJcbiAgICAgICAgcmVzdWx0T2s6J21vc3RyYXJfZW5jdWVzdGFfYV9ib3JyYXInLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjphc3luYyBmdW5jdGlvbihjb250ZXh0OlByb2NlZHVyZUNvbnRleHQsIHBhcmFtczpDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzPHtvcGVyYXRpdm86IElkT3BlcmF0aXZvLCBlbmM6IHN0cmluZ30+KXtcclxuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IGJ1c2NhckVuY3Vlc3RhRW5UZW0oY29udGV4dCxwYXJhbXMpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnZW5jdWVzdGFfYm9ycmFyJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOiBbXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ29wZXJhdGl2bycsIHR5cGVOYW1lOiAndGV4dCcsIHJlZmVyZW5jZXM6IFwib3BlcmF0aXZvc1wiIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ2VuYycsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIHJvbGVzOiBbJ2Nvb3JfcHJvYycsICdzdWJjb29yX2NhbXBvJywgJ2Nvb3JfY2FtcG8nLCAnYWRtaW4nXSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246IGFzeW5jIGZ1bmN0aW9uIChjb250ZXh0OiBQcm9jZWR1cmVDb250ZXh0LCBwYXJhbXM6IENvcmVGdW5jdGlvblBhcmFtZXRlcnM8eyBvcGVyYXRpdm86IElkT3BlcmF0aXZvLCBlbmM6IHN0cmluZyB9Pikge1xyXG4gICAgICAgICAgICB2YXIgYmUgPSBjb250ZXh0LmJlO1xyXG4gICAgICAgICAgICB2YXIgcGVybWl0ZV9nZW5lcmFyX211ZXN0cmEgPSBhd2FpdCBnZXRPcGVyYXRpdm9QZXJtaXRlR2VuZXJhck11ZXN0cmEoY29udGV4dC5jbGllbnQsIHBhcmFtcy5vcGVyYXRpdm8pO1xyXG4gICAgICAgICAgICBpZiAocGVybWl0ZV9nZW5lcmFyX211ZXN0cmEpIHtcclxuICAgICAgICAgICAgICAgIHZhciB7IHVuaWRhZF9hbmFsaXNpcywgcGtfYWdyZWdhZGEgfSA9IChhd2FpdCBnZXRVQVByaW5jaXBhbChjb250ZXh0LmNsaWVudCwgcGFyYW1zLm9wZXJhdGl2bykpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgeyBjYXNvVGVtIH0gPSBhd2FpdCBidXNjYXJFbmN1ZXN0YUVuVGVtKGNvbnRleHQsIHBhcmFtcyk7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICAgICAgaW5zZXJ0IGludG8gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRlbV9ib3JyYWRhcyAob3BlcmF0aXZvLCBlbmMsIGN1YW5kbywgYXJlYSwgY2x1c3RlciwgZG9taW5pbywgdGFyZWFfYWN0dWFsLCBqc29uX2VuY3Vlc3RhLCB0b2tlbl9hdXRvZ2VuZXJhZG9fZG0sIGVuY19hdXRvZ2VuZXJhZG9fZG0sIGVuY19hdXRvZ2VuZXJhZG9fZG1fY2FwYSwgcHJvaWUpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcyAoJDEsJDIsY3VycmVudF90aW1lc3RhbXAsJDMsJDQsJDUsJDYsJDcsJDgsJDksJDEwLCQxMSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nICpcclxuICAgICAgICAgICAgICAgICAgICBgLCBbXHJcbiAgICAgICAgICAgICAgICAgICAgY2Fzb1RlbS5vcGVyYXRpdm8sXHJcbiAgICAgICAgICAgICAgICAgICAgY2Fzb1RlbS5lbmMsXHJcbiAgICAgICAgICAgICAgICAgICAgY2Fzb1RlbS5hcmVhLFxyXG4gICAgICAgICAgICAgICAgICAgIGNhc29UZW0uY2x1c3RlcixcclxuICAgICAgICAgICAgICAgICAgICBjYXNvVGVtLmRvbWluaW8sXHJcbiAgICAgICAgICAgICAgICAgICAgY2Fzb1RlbS50YXJlYV9hY3R1YWwsXHJcbiAgICAgICAgICAgICAgICAgICAgY2Fzb1RlbS5qc29uX2VuY3Vlc3RhLFxyXG4gICAgICAgICAgICAgICAgICAgIGNhc29UZW0udG9rZW5fYXV0b2dlbmVyYWRvX2RtLFxyXG4gICAgICAgICAgICAgICAgICAgIGNhc29UZW0uZW5jX2F1dG9nZW5lcmFkb19kbSxcclxuICAgICAgICAgICAgICAgICAgICBjYXNvVGVtLmVuY19hdXRvZ2VuZXJhZG9fZG1fY2FwYSxcclxuICAgICAgICAgICAgICAgICAgICBjYXNvVGVtLnByb2llXHJcbiAgICAgICAgICAgICAgICBdKS5mZXRjaFVuaXF1ZVJvdygpO1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoXHJcbiAgICAgICAgICAgICAgICAgICAgYGRlbGV0ZSBcclxuICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSAke2JlLmRiLnF1b3RlSWRlbnQodW5pZGFkX2FuYWxpc2lzKX0gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2bz0kMSBhbmQgJHtiZS5kYi5xdW90ZUlkZW50KHBrX2FncmVnYWRhKX0gPSAkMlxyXG4gICAgICAgICAgICAgICAgYCwgW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy5lbmNdKS5leGVjdXRlKCk7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmcm9tIHRhcmVhc190ZW0gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2byA9ICQxIGFuZCBlbmMgPSAkMlxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgKlxyXG4gICAgICAgICAgICAgICAgYCwgW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy5lbmNdKS5mZXRjaEFsbCgpO1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBcclxuICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSB0ZW1cclxuICAgICAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvID0gJDEgYW5kIGVuYyA9ICQyIC0tcGsgdmVyaWZpY2FkYVxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgKlxyXG4gICAgICAgICAgICAgICAgYCwgW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy5lbmNdKS5mZXRjaFVuaXF1ZVJvdygpO1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBcclxuICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSBoaXN0b3JpYWxfdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2byA9ICQxIGFuZCBlbmMgPSAkMiAtLXBrIHZlcmlmaWNhZGFcclxuICAgICAgICAgICAgICAgIGAsIFtwYXJhbXMub3BlcmF0aXZvLCBwYXJhbXMuZW5jXSkuZXhlY3V0ZSgpO1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBcclxuICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSBpbmNvbnNpc3RlbmNpYXNcclxuICAgICAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvID0gJDEgYW5kICR7YmUuZGIucXVvdGVJZGVudChwa19hZ3JlZ2FkYSl9ID0gJDJcclxuICAgICAgICAgICAgICAgIGAsIFtwYXJhbXMub3BlcmF0aXZvLCBwYXJhbXMuZW5jXSkuZXhlY3V0ZSgpO1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBcclxuICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSBpbl9jb25fdmFyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2byA9ICQxIGFuZCBwa19pbnRlZ3JhZGEtPj4ke2JlLmRiLnF1b3RlTGl0ZXJhbChwa19hZ3JlZ2FkYSl9ID0gJDJcclxuICAgICAgICAgICAgICAgIGAsIFtwYXJhbXMub3BlcmF0aXZvLCBwYXJhbXMuZW5jXSkuZXhlY3V0ZSgpO1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBcclxuICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSBpbmNvbnNpc3RlbmNpYXNfdWx0aW1hc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm8gPSAkMSBhbmQgcGtfaW50ZWdyYWRhLT4+JHtiZS5kYi5xdW90ZUxpdGVyYWwocGtfYWdyZWdhZGEpfSA9ICQyXHJcbiAgICAgICAgICAgICAgICBgLCBbcGFyYW1zLm9wZXJhdGl2bywgcGFyYW1zLmVuY10pLmV4ZWN1dGUoKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBgbGEgZW5jdWVzdGEgJHtwYXJhbXMuZW5jfSBzZSBib3Jyw7MgY29ycmVjdGFtZW50ZWA7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcignbm8gc2UgcHVlZGUgYm9ycmFyIGxhIGVuY3Vlc3RhIHBvcnF1ZSBlbCBvcGVyYXRpdm8gdGllbmUgbXVlc3RyYSBlc3TDoXRpY2EnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnZW5jdWVzdGFzX2NhcGFjaXRhY2lvbl9ib3JyYXInLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6IFtcclxuICAgICAgICAgICAgeyBuYW1lOiAnb3BlcmF0aXZvJywgdHlwZU5hbWU6ICd0ZXh0JywgcmVmZXJlbmNlczogXCJvcGVyYXRpdm9zXCIgfVxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgcm9sZXM6IFsnYWRtaW4nXSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246IGFzeW5jIGZ1bmN0aW9uIChjb250ZXh0OiBQcm9jZWR1cmVDb250ZXh0LCBwYXJhbXM6IENvcmVGdW5jdGlvblBhcmFtZXRlcnM8eyBvcGVyYXRpdm86IElkT3BlcmF0aXZvIH0+KSB7XHJcbiAgICAgICAgICAgIHZhciBiZSA9IGNvbnRleHQuYmU7XHJcbiAgICAgICAgICAgIHZhciBwZXJtaXRlX2dlbmVyYXJfbXVlc3RyYSA9IGF3YWl0IGdldE9wZXJhdGl2b1Blcm1pdGVHZW5lcmFyTXVlc3RyYShjb250ZXh0LmNsaWVudCwgcGFyYW1zLm9wZXJhdGl2byk7XHJcbiAgICAgICAgICAgIGlmIChwZXJtaXRlX2dlbmVyYXJfbXVlc3RyYSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZW5jc0FCb3JyYXIgPSAoYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoXHJcbiAgICAgICAgICAgICAgICAgICAgYHNlbGVjdCAqIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmcm9tIHRlbVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm89JDEgYW5kIGVuY19hdXRvZ2VuZXJhZG9fZG1fY2FwYSBpcyBub3QgbnVsbFxyXG4gICAgICAgICAgICAgICAgYCwgW3BhcmFtcy5vcGVyYXRpdm9dKS5mZXRjaEFsbCgpKS5yb3dzO1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgcm93IG9mIGVuY3NBQm9ycmFyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgYmUucHJvY2VkdXJlLmVuY3Vlc3RhX2JvcnJhci5jb3JlRnVuY3Rpb24oY29udGV4dCwgeyBvcGVyYXRpdm86IHBhcmFtcy5vcGVyYXRpdm8sIGVuYzogcm93LmVuYyB9KVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuICdzZSBib3JyYXJvbiBsYXMgZW5jdWVzdGFzIGRlIGNhcGFjaXRhY2nDs24nO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoJ25vIHNlIHB1ZWRlIGJvcnJhciBsYSBlbmN1ZXN0YSBwb3JxdWUgZWwgb3BlcmF0aXZvIHRpZW5lIG11ZXN0cmEgZXN0w6F0aWNhJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjogJ2FjY2lvbl90YXJlYXNfdGVtX2VqZWN1dGFyJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOiBbXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ29wZXJhdGl2bycsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAndGFyZWEnLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ2VuYycsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAnY29uZGljaW9uJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICdhY2Npb24nLCB0eXBlTmFtZTogJ2pzb25iJyB9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOiBhc3luYyBmdW5jdGlvbiAoY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCwgcGFyYW1zOiBDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzPHsgb3BlcmF0aXZvOiBJZE9wZXJhdGl2bywgdGFyZWE6IHN0cmluZywgZW5jOiBzdHJpbmcsIGNvbmRpY2lvbjogc3RyaW5nLCBhY2Npb246IEVzdGFkb0FjY2lvbiB9Pikge1xyXG4gICAgICAgICAgICB2YXIgYmUgPSBjb250ZXh0LmJlO1xyXG4gICAgICAgICAgICB2YXIgYWNjaW9uID0gcGFyYW1zLmFjY2lvbiBhcyBFc3RhZG9BY2Npb247XHJcbiAgICAgICAgICAgIHZhciBjdW1wbGU6IGJvb2xlYW4gPSAoYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoXHJcbiAgICAgICAgICAgICAgICBgc2VsZWN0IGFjY2lvbl9jdW1wbGVfY29uZGljaW9uKCQ1LCAkNiwgJDcsICQ4LCAoXHJcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0IGNvbmRpY2lvbiBcclxuICAgICAgICAgICAgICAgICAgICAgIGZyb20gZXN0YWRvc19hY2Npb25lcyBcclxuICAgICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2byA9ICQxIGFuZCBlc3RhZG8gPSAkMiBhbmQgZWFjY2lvbiA9ICQzIGFuZCBlc3RhZG9fZGVzdGlubyA9ICQ0XHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgIClgLCBbXHJcbiAgICAgICAgICAgICAgICBwYXJhbXMub3BlcmF0aXZvLFxyXG4gICAgICAgICAgICAgICAgYWNjaW9uLmVzdGFkbyxcclxuICAgICAgICAgICAgICAgIGFjY2lvbi5lYWNjaW9uLFxyXG4gICAgICAgICAgICAgICAgYWNjaW9uLmVzdGFkb19kZXN0aW5vLFxyXG4gICAgICAgICAgICAgICAgcGFyYW1zLm9wZXJhdGl2byxcclxuICAgICAgICAgICAgICAgIGFjY2lvbi5lc3RhZG8sXHJcbiAgICAgICAgICAgICAgICBwYXJhbXMuZW5jLFxyXG4gICAgICAgICAgICAgICAgYWNjaW9uLmVhY2Npb24sXHJcbiAgICAgICAgICAgIF0pLmZldGNoVW5pcXVlVmFsdWUoKSkudmFsdWU7XHJcbiAgICAgICAgICAgIGlmICghY3VtcGxlKSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcihgTm8gc2UgcHVkbyBlamVjdXRhciBsYSBhY2Npw7NuLCBubyBzZSBjdW1wbGUgbGEgY29uZGljacOzbiBcIiR7cGFyYW1zLmNvbmRpY2lvbn1cIiBvIGJpZW4gZWwgZXN0YWRvIGVzdMOhIGRlc2FjdHVhbGl6YWRvLCByZWZyZXNxdWUgbGEgZ3JpbGxhLmApXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICBVUERBVEUgdGFyZWFzX3RlbSBcclxuICAgICAgICAgICAgICAgICAgICBzZXQgZXN0YWRvID0gJDRcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm89JDEgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBlbmM9JDIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFuZCB0YXJlYSA9ICQzXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nICpgLFxyXG4gICAgICAgICAgICAgICAgW1xyXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtcy5vcGVyYXRpdm8sXHJcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zLmVuYyxcclxuICAgICAgICAgICAgICAgICAgICBwYXJhbXMudGFyZWEsXHJcbiAgICAgICAgICAgICAgICAgICAgYWNjaW9uLmVzdGFkb19kZXN0aW5vXHJcbiAgICAgICAgICAgICAgICBdXHJcbiAgICAgICAgICAgICkuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgICAgICAgICAgaWYgKGFjY2lvbi5ub21icmVfcHJvY2VkdXJlKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoYmUucHJvY2VkdXJlW2FjY2lvbi5ub21icmVfcHJvY2VkdXJlXSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGJlLnByb2NlZHVyZVthY2Npb24ubm9tYnJlX3Byb2NlZHVyZV0uY29yZUZ1bmN0aW9uKGNvbnRleHQsIHBhcmFtcylcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoYE5vIGV4aXN0ZSBlbCBwcm9jZWR1cmUgXCIke2FjY2lvbi5ub21icmVfcHJvY2VkdXJlfVwiIGRlZmluaWRvIGVuIGxhIHRhYmxhIFwiZXN0YWRvc19hY2Npb25lc1wiIHBhcmEgZWxcclxuICAgICAgICAgICAgICAgICAgICBvcGVyYXRpdm86ICR7YWNjaW9uLm9wZXJhdGl2b30sIGVzdGFkbzogJHthY2Npb24uZXN0YWRvfSwgZWFjY2lvbjogJHthY2Npb24uZWFjY2lvbn0uYClcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBCVVNDTyBQQVNFIERFIFRBUkVBXHJcbiAgICAgICAgICAgIHZhciB0YXJlYVNpZ3VpZW50ZSA9IChhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShcclxuICAgICAgICAgICAgICAgIGBzZWxlY3QgKlxyXG4gICAgICAgICAgICAgICAgICAgIGZyb20gdGFyZWFzX3Byb3hpbWFzXHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGl2byA9ICQxIGFuZCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZWEgPSAkMiBhbmQgZXN0YWRvID0gJDMgYW5kIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJlYV9jdW1wbGVfY29uZGljaW9uKCQ0LCAkNSwgJDYsICQ3LCBjb25kaWNpb24pXHJcbiAgICAgICAgICAgICAgICAgICAgb3JkZXIgYnkgb3JkZW5cclxuICAgICAgICAgICAgICAgICAgICBsaW1pdCAxYFxyXG4gICAgICAgICAgICAgICAgLCBbXHJcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zLm9wZXJhdGl2byxcclxuICAgICAgICAgICAgICAgICAgICBwYXJhbXMudGFyZWEsXHJcbiAgICAgICAgICAgICAgICAgICAgYWNjaW9uLmVzdGFkb19kZXN0aW5vLFxyXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtcy5vcGVyYXRpdm8sXHJcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zLnRhcmVhLFxyXG4gICAgICAgICAgICAgICAgICAgIGFjY2lvbi5lc3RhZG9fZGVzdGlubyxcclxuICAgICAgICAgICAgICAgICAgICBwYXJhbXMuZW5jXHJcbiAgICAgICAgICAgICAgICBdKS5mZXRjaE9uZVJvd0lmRXhpc3RzKCkpLnJvdztcclxuICAgICAgICAgICAgaWYgKHRhcmVhU2lndWllbnRlKSB7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICAgICAgdXBkYXRlIHRlbVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXQgdGFyZWFfYWN0dWFsID0gJDNcclxuICAgICAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvID0gJDEgYW5kIGVuYyA9ICQyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAqYFxyXG4gICAgICAgICAgICAgICAgICAgICwgW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy5lbmMsIHRhcmVhU2lndWllbnRlLnRhcmVhX2Rlc3Rpbm9dXHJcbiAgICAgICAgICAgICAgICApLmZldGNoVW5pcXVlUm93KCk7XHJcbiAgICAgICAgICAgICAgICBsZXQgYXV0b0FzaWduYWRvID0gdGFyZWFTaWd1aWVudGUucmVnaXN0cmFfcmVjZXBjaW9uaXN0YSA/IGNvbnRleHQudXNlci5pZHBlciA6IG51bGw7XHJcbiAgICAgICAgICAgICAgICBsZXQgcSA9IGNvbnRleHQuYmUuZGIucXVvdGVMaXRlcmFsO1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgICAgIHVwZGF0ZSB0YXJlYXNfdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldCB0c19lbnRyYWRhID0gY3VycmVudF90aW1lc3RhbXAsIGFkZWxhbnRhciA9IG51bGwsIGVzdGFkbyA9ICQ0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2F1dG9Bc2lnbmFkbyA/XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiLCByZWNlcGNpb25pc3RhPVwiICsgcShhdXRvQXNpZ25hZG8pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDogXCJcIn1cclxuICAgICAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvID0gJDEgYW5kIGVuYyA9ICQyIGFuZCB0YXJlYSA9ICQzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAqYFxyXG4gICAgICAgICAgICAgICAgICAgICwgW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy5lbmMsIHRhcmVhU2lndWllbnRlLnRhcmVhX2Rlc3Rpbm8sIHRhcmVhU2lndWllbnRlLmVzdGFkb19kZXN0aW5vXVxyXG4gICAgICAgICAgICAgICAgKS5mZXRjaFVuaXF1ZVJvdygpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRhcmVhU2lndWllbnRlLm5vbWJyZV9wcm9jZWR1cmUpIHtcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCBiZS5wcm9jZWR1cmVbdGFyZWFTaWd1aWVudGUubm9tYnJlX3Byb2NlZHVyZV0uY29yZUZ1bmN0aW9uKGNvbnRleHQsIHBhcmFtcyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gRklOIFBBU0UgREUgVEFSRUFcclxuICAgICAgICAgICAgcmV0dXJuIFwib2tcIjtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjogJ2VuY3Vlc3RhX2NhcmdhX3ByZXBhcmFyJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOiBbXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ29wZXJhdGl2bycsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAndGFyZWEnLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ2VuYycsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjogYXN5bmMgZnVuY3Rpb24gKGNvbnRleHQ6IFByb2NlZHVyZUNvbnRleHQsIHBhcmFtczogQ29yZUZ1bmN0aW9uUGFyYW1ldGVyczx7IG9wZXJhdGl2bzogSWRPcGVyYXRpdm8sIHRhcmVhOiBzdHJpbmcsIGVuYzogc3RyaW5nIH0+KSB7XHJcbiAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIFVQREFURSB0YXJlYXNfdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0IG9wZXJhY2lvbiA9ICQ0XHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvPSQxIGFuZCB0YXJlYT0gJDIgYW5kIGVuYz0kM1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAqYCxcclxuICAgICAgICAgICAgICAgIFtwYXJhbXMub3BlcmF0aXZvLCBwYXJhbXMudGFyZWEsIHBhcmFtcy5lbmMsIE9QRVJBQ0lPTl9QUkVQQVJBUl9DQVJHQV0pXHJcbiAgICAgICAgICAgICAgICAuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgICAgICAgICAgcmV0dXJuICdvayc7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdlbmN1ZXN0YV9kaXNwb25pYmlsaXphcicsXHJcbiAgICAgICAgcGFyYW1ldGVyczogW1xyXG4gICAgICAgICAgICB7IG5hbWU6ICdvcGVyYXRpdm8nLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ3RhcmVhJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICdlbmMnLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgXSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246IGFzeW5jIGZ1bmN0aW9uIChjb250ZXh0OiBQcm9jZWR1cmVDb250ZXh0LCBwYXJhbXM6IENvcmVGdW5jdGlvblBhcmFtZXRlcnM8eyBvcGVyYXRpdm86IElkT3BlcmF0aXZvLCB0YXJlYTogc3RyaW5nLCBlbmM6IHN0cmluZyB9Pikge1xyXG4gICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICBVUERBVEUgdGFyZWFzX3RlbVxyXG4gICAgICAgICAgICAgICAgICAgIHNldCBhc2lnbmFkbyA9IG51bGxcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm89JDEgYW5kIHRhcmVhPSAkMiBhbmQgZW5jPSQzXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nICpgLFxyXG4gICAgICAgICAgICAgICAgW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy50YXJlYSwgcGFyYW1zLmVuY10pXHJcbiAgICAgICAgICAgICAgICAuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgICAgICAgICAgcmV0dXJuICdvayc7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdlbmN1ZXN0YV9ub19jYXJnYXInLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6IFtcclxuICAgICAgICAgICAgeyBuYW1lOiAnb3BlcmF0aXZvJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICd0YXJlYScsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAnZW5jJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOiBhc3luYyBmdW5jdGlvbiAoY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCwgcGFyYW1zOiBDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzPHsgb3BlcmF0aXZvOiBJZE9wZXJhdGl2bywgdGFyZWE6IHN0cmluZywgZW5jOiBzdHJpbmcgfT4pIHtcclxuICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgVVBEQVRFIHRhcmVhc190ZW1cclxuICAgICAgICAgICAgICAgICAgICBzZXQgb3BlcmFjaW9uID0gbnVsbFxyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2bz0kMSBhbmQgdGFyZWE9ICQyIGFuZCBlbmM9JDNcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgKmAsXHJcbiAgICAgICAgICAgICAgICBbcGFyYW1zLm9wZXJhdGl2bywgcGFyYW1zLnRhcmVhLCBwYXJhbXMuZW5jXSlcclxuICAgICAgICAgICAgICAgIC5mZXRjaFVuaXF1ZVJvdygpO1xyXG4gICAgICAgICAgICByZXR1cm4gJ29rJztcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjogJ2VuY3Vlc3RhX2Rlc2NhcmdhX3ByZXBhcmFyJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOiBbXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ29wZXJhdGl2bycsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAndGFyZWEnLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ2VuYycsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjogYXN5bmMgZnVuY3Rpb24gKGNvbnRleHQ6IFByb2NlZHVyZUNvbnRleHQsIHBhcmFtczogQ29yZUZ1bmN0aW9uUGFyYW1ldGVyczx7IG9wZXJhdGl2bzogSWRPcGVyYXRpdm8sIHRhcmVhOiBzdHJpbmcsIGVuYzogc3RyaW5nIH0+KSB7XHJcbiAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIFVQREFURSB0YXJlYXNfdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0IG9wZXJhY2lvbiA9ICQ0XHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvPSQxIGFuZCB0YXJlYT0gJDIgYW5kIGVuYz0kM1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAqYCxcclxuICAgICAgICAgICAgICAgIFtwYXJhbXMub3BlcmF0aXZvLCBwYXJhbXMudGFyZWEsIHBhcmFtcy5lbmMsIE9QRVJBQ0lPTl9QUkVQQVJBUl9ERVNDQVJHQV0pXHJcbiAgICAgICAgICAgICAgICAuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgICAgICAgICAgcmV0dXJuICdvayc7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdlbmN1ZXN0YV9ub19kZXNjYXJnYXInLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6IFtcclxuICAgICAgICAgICAgeyBuYW1lOiAnb3BlcmF0aXZvJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICd0YXJlYScsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAnZW5jJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOiBhc3luYyBmdW5jdGlvbiAoY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCwgcGFyYW1zOiBDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzPHsgb3BlcmF0aXZvOiBJZE9wZXJhdGl2bywgdGFyZWE6IHN0cmluZywgZW5jOiBzdHJpbmcgfT4pIHtcclxuICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgVVBEQVRFIHRhcmVhc190ZW1cclxuICAgICAgICAgICAgICAgICAgICBzZXQgb3BlcmFjaW9uID0gJ2NhcmdhcidcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm89JDEgYW5kIHRhcmVhPSAkMiBhbmQgZW5jPSQzXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nICpgLFxyXG4gICAgICAgICAgICAgICAgW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy50YXJlYSwgcGFyYW1zLmVuY10pXHJcbiAgICAgICAgICAgICAgICAuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgICAgICAgICAgcmV0dXJuICdvayc7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdlbmN1ZXN0YV9hbmFsaXphcicsXHJcbiAgICAgICAgcGFyYW1ldGVyczogW1xyXG4gICAgICAgICAgICB7IG5hbWU6ICdvcGVyYXRpdm8nLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ3RhcmVhJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICdlbmMnLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgXSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246IGFzeW5jIGZ1bmN0aW9uIChjb250ZXh0OiBQcm9jZWR1cmVDb250ZXh0LCBwYXJhbXM6IENvcmVGdW5jdGlvblBhcmFtZXRlcnM8eyBvcGVyYXRpdm86IElkT3BlcmF0aXZvLCB0YXJlYTogc3RyaW5nLCBlbmM6IHN0cmluZyB9Pikge1xyXG4gICAgICAgICAgICB2YXIgYmUgPSBjb250ZXh0LmJlO1xyXG4gICAgICAgICAgICBhd2FpdCBiZS5wcm9jZWR1cmUuY29uc2lzdGlyX2VuY3Vlc3RhLmNvcmVGdW5jdGlvbihjb250ZXh0LCB7IG9wZXJhdGl2bzogcGFyYW1zLm9wZXJhdGl2bywgaWRfY2FzbzogcGFyYW1zLmVuYyB9KVxyXG4gICAgICAgICAgICByZXR1cm4gJ29rJztcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjogJ2luY29uc2lzdGVuY2lhc19lbmN1ZXN0YV9jb250cm9sYXInLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6IFtcclxuICAgICAgICAgICAgeyBuYW1lOiAnb3BlcmF0aXZvJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICd0YXJlYScsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAnZW5jJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOiBhc3luYyBmdW5jdGlvbiAoY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCwgcGFyYW1zOiBDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzPHsgb3BlcmF0aXZvOiBJZE9wZXJhdGl2bywgdGFyZWE6IHN0cmluZywgZW5jOiBzdHJpbmcgfT4pIHtcclxuICAgICAgICAgICAgdmFyIGNhbnRpZGFkOiBudW1iZXIgPSAoYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgc2VsZWN0IGNvdW50KCopIGFzIGN1bXBsZVxyXG4gICAgICAgICAgICAgICAgICAgIGZyb20gaW5jb25zaXN0ZW5jaWFzIGkgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGpvaW4gY29uc2lzdGVuY2lhcyBjIHVzaW5nIChvcGVyYXRpdm8sIGNvbnNpc3RlbmNpYSkgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGpvaW4gbW9tZW50b3NfY29uc2lzdGVuY2lhIG1jIHVzaW5nIChvcGVyYXRpdm8sIG1vbWVudG8pXHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGl2byA9ICQxIGFuZCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgdml2aWVuZGEgPSAkMiBhbmQgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vbWVudG9fY29uc2lzdGVuY2lhX2N1bXBsZV9jb25kaWNpb24oXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYy5vcGVyYXRpdm8sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpLnZpdmllbmRhLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJDMsIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGVjdCBjb25kaWNpb24gZnJvbSBtb21lbnRvc19jb25zaXN0ZW5jaWEgd2hlcmUgb3BlcmF0aXZvID0gbWMub3BlcmF0aXZvIGFuZCBtb21lbnRvID0gbWMubW9tZW50bylcclxuICAgICAgICAgICAgICAgICAgICAgICAgKSBhbmRcclxuICAgICAgICAgICAgICAgICAgICAgICAgaS5qdXN0aWZpY2FjaW9uIGlzIG51bGxgLFxyXG4gICAgICAgICAgICAgICAgW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy5lbmMsIGNvbnRleHQudXNlcm5hbWVdKVxyXG4gICAgICAgICAgICAgICAgLmZldGNoVW5pcXVlVmFsdWUoKSkudmFsdWVcclxuICAgICAgICAgICAgaWYgKGNhbnRpZGFkKSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcihgbm8gc2UgcHVlZGUgdmVyaWZpY2FyIGxhIHRhcmVhIHBvcnF1ZSBoYXkgaW5jb25zaXN0ZW5jaWFzLCBwb3IgZmF2b3IgcmVzdcOpbHZhbGFzIG8ganVzdGlmw61xdWVsYXMgZW4gY2FzbyBkZSBzZXIgbmVjZXNhcmlvLmApXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuICdvayc7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdlbmN1ZXN0YV92ZXJpZmljYXInLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6IFtcclxuICAgICAgICAgICAgeyBuYW1lOiAnb3BlcmF0aXZvJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICd0YXJlYScsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAnZW5jJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOiBhc3luYyBmdW5jdGlvbiAoY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCwgcGFyYW1zOiBDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzPHsgb3BlcmF0aXZvOiBJZE9wZXJhdGl2bywgdGFyZWE6IHN0cmluZywgZW5jOiBzdHJpbmcgfT4pIHtcclxuICAgICAgICAgICAgdmFyIGJlID0gY29udGV4dC5iZTtcclxuICAgICAgICAgICAgYXdhaXQgYmUucHJvY2VkdXJlLmluY29uc2lzdGVuY2lhc19lbmN1ZXN0YV9jb250cm9sYXIuY29yZUZ1bmN0aW9uKGNvbnRleHQsIHBhcmFtcyk7XHJcbiAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIFVQREFURSB0YXJlYXNfdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0IHZlcmlmaWNhZG8gPSAnMSdcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm89JDEgYW5kIHRhcmVhPSAkMiBhbmQgZW5jPSQzXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nICpgLFxyXG4gICAgICAgICAgICAgICAgW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy50YXJlYSwgcGFyYW1zLmVuY10pXHJcbiAgICAgICAgICAgICAgICAuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgICAgICAgICAgcmV0dXJuICdvayc7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdlbmN1ZXN0YV9ub192ZXJpZmljYXInLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6IFtcclxuICAgICAgICAgICAgeyBuYW1lOiAnb3BlcmF0aXZvJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICd0YXJlYScsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAnZW5jJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOiBhc3luYyBmdW5jdGlvbiAoY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCwgcGFyYW1zOiBDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzPHsgb3BlcmF0aXZvOiBJZE9wZXJhdGl2bywgdGFyZWE6IHN0cmluZywgZW5jOiBzdHJpbmcgfT4pIHtcclxuICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgVVBEQVRFIHRhcmVhc190ZW1cclxuICAgICAgICAgICAgICAgICAgICBzZXQgdmVyaWZpY2FkbyA9IG51bGxcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm89JDEgYW5kIHRhcmVhPSAkMiBhbmQgZW5jPSQzXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nICpgLFxyXG4gICAgICAgICAgICAgICAgW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy50YXJlYSwgcGFyYW1zLmVuY10pXHJcbiAgICAgICAgICAgICAgICAuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgICAgICAgICAgcmV0dXJuICdvayc7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdlbmN1ZXN0YV9jZXJyYXInLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6IFtcclxuICAgICAgICAgICAgeyBuYW1lOiAnb3BlcmF0aXZvJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICd0YXJlYScsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAnZW5jJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOiBhc3luYyBmdW5jdGlvbiAoY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCwgcGFyYW1zOiBDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzPHsgb3BlcmF0aXZvOiBJZE9wZXJhdGl2bywgdGFyZWE6IHN0cmluZywgZW5jOiBzdHJpbmcgfT4pIHtcclxuICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgVVBEQVRFIHRhcmVhc190ZW1cclxuICAgICAgICAgICAgICAgICAgICBzZXQgdmVyaWZpY2FkbyA9ICcxJywgYXNpZ25hZG8gPSAkNFxyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2bz0kMSBhbmQgdGFyZWE9ICQyIGFuZCBlbmM9JDNcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgKmAsXHJcbiAgICAgICAgICAgICAgICBbcGFyYW1zLm9wZXJhdGl2bywgcGFyYW1zLnRhcmVhLCBwYXJhbXMuZW5jLCBjb250ZXh0LnVzZXIuaWRwZXJdKVxyXG4gICAgICAgICAgICAgICAgLmZldGNoVW5pcXVlUm93KCk7XHJcbiAgICAgICAgICAgIHJldHVybiAnb2snO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnZW5jdWVzdGFfbm9fY2VycmFyJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOiBbXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ29wZXJhdGl2bycsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAndGFyZWEnLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ2VuYycsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjogYXN5bmMgZnVuY3Rpb24gKGNvbnRleHQ6IFByb2NlZHVyZUNvbnRleHQsIHBhcmFtczogQ29yZUZ1bmN0aW9uUGFyYW1ldGVyczx7IG9wZXJhdGl2bzogSWRPcGVyYXRpdm8sIHRhcmVhOiBzdHJpbmcsIGVuYzogc3RyaW5nIH0+KSB7XHJcbiAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIFVQREFURSB0YXJlYXNfdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0IHZlcmlmaWNhZG8gPSBudWxsXHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvPSQxIGFuZCB0YXJlYT0gJDIgYW5kIGVuYz0kM1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAqYCxcclxuICAgICAgICAgICAgICAgIFtwYXJhbXMub3BlcmF0aXZvLCBwYXJhbXMudGFyZWEsIHBhcmFtcy5lbmNdKVxyXG4gICAgICAgICAgICAgICAgLmZldGNoVW5pcXVlUm93KCk7XHJcbiAgICAgICAgICAgIHJldHVybiAnb2snO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnZW5jdWVzdGFfc3VwZXJ2aXNhcl9wcmVzZW5jaWFsJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOiBbXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ29wZXJhdGl2bycsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAnZW5jJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICd0YXJlYScsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjogYXN5bmMgZnVuY3Rpb24gKGNvbnRleHQ6IFByb2NlZHVyZUNvbnRleHQsIHBhcmFtczogQ29yZUZ1bmN0aW9uUGFyYW1ldGVyczx7IG9wZXJhdGl2bzogSWRPcGVyYXRpdm8sIGVuYzogc3RyaW5nLCB0YXJlYTogc3RyaW5nIH0+KSB7XHJcbiAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIFVQREFURSB0ZW1cclxuICAgICAgICAgICAgICAgICAgICBzZXQgdGFyZWFfYWN0dWFsID0gJDMsIHN1cGVydmlzaW9uX2RpcmlnaWRhID0gJDRcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm89JDEgYW5kIGVuYz0kMlxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAqYCxcclxuICAgICAgICAgICAgICAgIFtwYXJhbXMub3BlcmF0aXZvLCBwYXJhbXMuZW5jLCAnc3VwZScsIDFdKVxyXG4gICAgICAgICAgICAgICAgLmZldGNoVW5pcXVlUm93KCk7XHJcbiAgICAgICAgICAgIHJldHVybiAnb2snO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnZW5jdWVzdGFfc3VwZXJ2aXNhcl90ZWxlZm9uaWNhJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOiBbXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ29wZXJhdGl2bycsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAnZW5jJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICd0YXJlYScsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjogYXN5bmMgZnVuY3Rpb24gKGNvbnRleHQ6IFByb2NlZHVyZUNvbnRleHQsIHBhcmFtczogQ29yZUZ1bmN0aW9uUGFyYW1ldGVyczx7IG9wZXJhdGl2bzogSWRPcGVyYXRpdm8sIGVuYzogc3RyaW5nLCB0YXJlYTogc3RyaW5nIH0+KSB7XHJcbiAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIFVQREFURSB0ZW1cclxuICAgICAgICAgICAgICAgICAgICBzZXQgdGFyZWFfYWN0dWFsID0gJDMsIHN1cGVydmlzaW9uX2RpcmlnaWRhID0gJDRcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm89JDEgYW5kIGVuYz0kMlxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAqYCxcclxuICAgICAgICAgICAgICAgIFtwYXJhbXMub3BlcmF0aXZvLCBwYXJhbXMuZW5jLCAnc3VwZScsIDJdKVxyXG4gICAgICAgICAgICAgICAgLmZldGNoVW5pcXVlUm93KCk7XHJcbiAgICAgICAgICAgIHJldHVybiAnb2snO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnZW5jdWVzdGFfbm9fc3VwZXJ2aXNhcicsXHJcbiAgICAgICAgcGFyYW1ldGVyczogW1xyXG4gICAgICAgICAgICB7IG5hbWU6ICdvcGVyYXRpdm8nLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ2VuYycsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAndGFyZWEnLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgXSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246IGFzeW5jIGZ1bmN0aW9uIChjb250ZXh0OiBQcm9jZWR1cmVDb250ZXh0LCBwYXJhbXM6IENvcmVGdW5jdGlvblBhcmFtZXRlcnM8eyBvcGVyYXRpdm86IElkT3BlcmF0aXZvLCBlbmM6IHN0cmluZywgdGFyZWE6IHN0cmluZyB9Pikge1xyXG4gICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICBVUERBVEUgdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0IHRhcmVhX2FjdHVhbCA9ICQzLCBzdXBlcnZpc2lvbl9kaXJpZ2lkYSA9IG51bGxcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm89JDEgYW5kIGVuYz0kMlxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAqYCxcclxuICAgICAgICAgICAgICAgIFtwYXJhbXMub3BlcmF0aXZvLCBwYXJhbXMuZW5jLCAnZmluYyddKVxyXG4gICAgICAgICAgICAgICAgLmZldGNoVW5pcXVlUm93KCk7XHJcbiAgICAgICAgICAgIHJldHVybiAnb2snO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnZW5jdWVzdGFfcGFzYXJfYV9hbmFjJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOiBbXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ29wZXJhdGl2bycsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAnZW5jJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICd0YXJlYScsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjogYXN5bmMgZnVuY3Rpb24gKGNvbnRleHQ6IFByb2NlZHVyZUNvbnRleHQsIHBhcmFtczogQ29yZUZ1bmN0aW9uUGFyYW1ldGVyczx7IG9wZXJhdGl2bzogSWRPcGVyYXRpdm8sIGVuYzogc3RyaW5nLCB0YXJlYTogc3RyaW5nIH0+KSB7XHJcbiAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIFVQREFURSB0YXJlYXNfdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0IGVzdGFkbyA9ICdDQydcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm89JDEgYW5kIGVuYz0kMiBhbmQgdGFyZWEgaW4gKCQzLCQ0KSAtLXF1aWVybyBwYXNhciBsYXMgMiB0YXJlYXMgYSBDQ1xyXG4gICAgICAgICAgICAgICAgYCxcclxuICAgICAgICAgICAgICAgIFtwYXJhbXMub3BlcmF0aXZvLCBwYXJhbXMuZW5jLCAnYW5hYycsICdwcm9jJ10pXHJcbiAgICAgICAgICAgICAgICAuZXhlY3V0ZSgpO1xyXG4gICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICBVUERBVEUgdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0IHRhcmVhX2FjdHVhbCA9ICQzXHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvPSQxIGFuZCBlbmM9JDJcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgKmAsXHJcbiAgICAgICAgICAgICAgICBbcGFyYW1zLm9wZXJhdGl2bywgcGFyYW1zLmVuYywgJ2FuYWMnXSlcclxuICAgICAgICAgICAgICAgIC5mZXRjaFVuaXF1ZVJvdygpO1xyXG4gICAgICAgICAgICByZXR1cm4gJ29rJztcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjogJ2VuY3Vlc3RhX25vX3Bhc2FyX2FfYW5hYycsXHJcbiAgICAgICAgcGFyYW1ldGVyczogW1xyXG4gICAgICAgICAgICB7IG5hbWU6ICdvcGVyYXRpdm8nLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ2VuYycsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAndGFyZWEnLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgXSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246IGFzeW5jIGZ1bmN0aW9uIChjb250ZXh0OiBQcm9jZWR1cmVDb250ZXh0LCBwYXJhbXM6IENvcmVGdW5jdGlvblBhcmFtZXRlcnM8eyBvcGVyYXRpdm86IElkT3BlcmF0aXZvLCBlbmM6IHN0cmluZywgdGFyZWE6IHN0cmluZyB9Pikge1xyXG4gICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICBVUERBVEUgdGFyZWFzX3RlbVxyXG4gICAgICAgICAgICAgICAgICAgIHNldCBlc3RhZG8gPSAnQSdcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm89JDEgYW5kIGVuYz0kMiBhbmQgdGFyZWE9ICQzXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nICpgLFxyXG4gICAgICAgICAgICAgICAgW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy5lbmMsICdwcm9jJ10pXHJcbiAgICAgICAgICAgICAgICAuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgVVBEQVRFIHRhcmVhc190ZW1cclxuICAgICAgICAgICAgICAgICAgICBzZXQgZXN0YWRvID0gJzBEJ1xyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2bz0kMSBhbmQgZW5jPSQyIGFuZCB0YXJlYT0gJDNcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgKmAsXHJcbiAgICAgICAgICAgICAgICBbcGFyYW1zLm9wZXJhdGl2bywgcGFyYW1zLmVuYywgJ2FuYWMnXSlcclxuICAgICAgICAgICAgICAgIC5mZXRjaFVuaXF1ZVJvdygpO1xyXG4gICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICBVUERBVEUgdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0IHRhcmVhX2FjdHVhbCA9ICQzXHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvPSQxIGFuZCBlbmM9JDJcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgKmAsXHJcbiAgICAgICAgICAgICAgICBbcGFyYW1zLm9wZXJhdGl2bywgcGFyYW1zLmVuYywgJ3Byb2MnXSlcclxuICAgICAgICAgICAgICAgIC5mZXRjaFVuaXF1ZVJvdygpO1xyXG4gICAgICAgICAgICByZXR1cm4gJ29rJztcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjogJ2VuY3Vlc3RhX2Rldm9sdmVyX3Byb2NfZGVzZGVfYW5hYycsXHJcbiAgICAgICAgcGFyYW1ldGVyczogW1xyXG4gICAgICAgICAgICB7IG5hbWU6ICdvcGVyYXRpdm8nLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ2VuYycsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAndGFyZWEnLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgXSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246IGFzeW5jIGZ1bmN0aW9uIChjb250ZXh0OiBQcm9jZWR1cmVDb250ZXh0LCBwYXJhbXM6IENvcmVGdW5jdGlvblBhcmFtZXRlcnM8eyBvcGVyYXRpdm86IElkT3BlcmF0aXZvLCBlbmM6IHN0cmluZywgdGFyZWE6IHN0cmluZyB9Pikge1xyXG4gICAgICAgICAgICB2YXIgYmUgPSBjb250ZXh0LmJlO1xyXG4gICAgICAgICAgICBhd2FpdCBiZS5wcm9jZWR1cmUuZW5jdWVzdGFfdmVyaWZpY2FyLmNvcmVGdW5jdGlvbihjb250ZXh0LCBwYXJhbXMpO1xyXG4gICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICBVUERBVEUgdGFyZWFzX3RlbVxyXG4gICAgICAgICAgICAgICAgICAgIHNldCBlc3RhZG8gPSAnQSdcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm89JDEgYW5kIGVuYz0kMiBhbmQgdGFyZWE9ICQzXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nICpgLFxyXG4gICAgICAgICAgICAgICAgW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy5lbmMsICdwcm9jJ10pXHJcbiAgICAgICAgICAgICAgICAuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgVVBEQVRFIHRlbVxyXG4gICAgICAgICAgICAgICAgICAgIHNldCB0YXJlYV9hY3R1YWwgPSAkM1xyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2bz0kMSBhbmQgZW5jPSQyXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nICpgLFxyXG4gICAgICAgICAgICAgICAgW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy5lbmMsICdwcm9jJ10pXHJcbiAgICAgICAgICAgICAgICAuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgICAgICAgICAgcmV0dXJuICdvayc7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdlbmN1ZXN0YV9ub19kZXZvbHZlcl9wcm9jX2Rlc2RlX2FuYWMnLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6IFtcclxuICAgICAgICAgICAgeyBuYW1lOiAnb3BlcmF0aXZvJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICdlbmMnLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ3RhcmVhJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOiBhc3luYyBmdW5jdGlvbiAoY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCwgcGFyYW1zOiBDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzPHsgb3BlcmF0aXZvOiBJZE9wZXJhdGl2bywgZW5jOiBzdHJpbmcsIHRhcmVhOiBzdHJpbmcgfT4pIHtcclxuICAgICAgICAgICAgdmFyIGJlID0gY29udGV4dC5iZTtcclxuICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgVVBEQVRFIHRhcmVhc190ZW1cclxuICAgICAgICAgICAgICAgICAgICBzZXQgZXN0YWRvID0gJ0NDJ1xyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2bz0kMSBhbmQgZW5jPSQyIGFuZCB0YXJlYSBpbiAoJDMsJDQpIC0tcXVpZXJvIHBhc2FyIGxhcyAyIHRhcmVhcyBhIENDXHJcbiAgICAgICAgICAgICAgICBgLFxyXG4gICAgICAgICAgICAgICAgW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy5lbmMsICdhbmFjJywgJ3Byb2MnXSlcclxuICAgICAgICAgICAgICAgIC5leGVjdXRlKCk7XHJcbiAgICAgICAgICAgIGF3YWl0IGJlLnByb2NlZHVyZS5lbmN1ZXN0YV9ub192ZXJpZmljYXIuY29yZUZ1bmN0aW9uKGNvbnRleHQsIHBhcmFtcyk7XHJcbiAgICAgICAgICAgIHJldHVybiAnb2snO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnZW5jdWVzdGFfcmVjdXBlcmFyX2Rlc2RlX2FuYWMnLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6IFtcclxuICAgICAgICAgICAgeyBuYW1lOiAnb3BlcmF0aXZvJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICdlbmMnLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ3RhcmVhJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOiBhc3luYyBmdW5jdGlvbiAoY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCwgcGFyYW1zOiBDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzPHsgb3BlcmF0aXZvOiBJZE9wZXJhdGl2bywgZW5jOiBzdHJpbmcsIHRhcmVhOiBzdHJpbmcgfT4pIHtcclxuICAgICAgICAgICAgdmFyIGJlID0gY29udGV4dC5iZTtcclxuICAgICAgICAgICAgdmFyIHsgb3BlcmF0aXZvLCBlbmMsIHRhcmVhIH0gPSBwYXJhbXM7XHJcbiAgICAgICAgICAgIGF3YWl0IGJlLnByb2NlZHVyZS5lbmN1ZXN0YV92ZXJpZmljYXIuY29yZUZ1bmN0aW9uKGNvbnRleHQsIHBhcmFtcyk7XHJcbiAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIHVwZGF0ZSB0ZW0gXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0IHRhcmVhX2FjdHVhbCA9ICQzXHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvID0gJDEgYW5kIGVuYyA9ICQyXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nICpgLFxyXG4gICAgICAgICAgICAgICAgW29wZXJhdGl2bywgZW5jLCAncmVjdSddKVxyXG4gICAgICAgICAgICAgICAgLmZldGNoVW5pcXVlUm93KCk7XHJcbiAgICAgICAgICAgIHJldHVybiAnb2snO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnZW5jdWVzdGFfbm9fcmVjdXBlcmFyX2Rlc2RlX2FuYWMnLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6IFtcclxuICAgICAgICAgICAgeyBuYW1lOiAnb3BlcmF0aXZvJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICdlbmMnLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ3RhcmVhJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOiBhc3luYyBmdW5jdGlvbiAoY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCwgcGFyYW1zOiBDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzPHsgb3BlcmF0aXZvOiBJZE9wZXJhdGl2bywgZW5jOiBzdHJpbmcsIHRhcmVhOiBzdHJpbmcgfT4pIHtcclxuICAgICAgICAgICAgdmFyIGJlID0gY29udGV4dC5iZTtcclxuICAgICAgICAgICAgdmFyIHsgb3BlcmF0aXZvLCBlbmMsIHRhcmVhIH0gPSBwYXJhbXM7XHJcbiAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIHVwZGF0ZSB0ZW0gXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0IHRhcmVhX2FjdHVhbCA9ICQ0XHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvID0gJDEgYW5kIGVuYyA9ICQyIGFuZCB0YXJlYV9hY3R1YWwgPSAkM1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAqYCxcclxuICAgICAgICAgICAgICAgIFtvcGVyYXRpdm8sIGVuYywgJ3JlY3UnLCAnYW5hYyddKVxyXG4gICAgICAgICAgICAgICAgLmZldGNoVW5pcXVlUm93KCk7XHJcbiAgICAgICAgICAgIGF3YWl0IGJlLnByb2NlZHVyZS5lbmN1ZXN0YV9ub192ZXJpZmljYXIuY29yZUZ1bmN0aW9uKGNvbnRleHQsIHBhcmFtcyk7XHJcbiAgICAgICAgICAgIHJldHVybiAnb2snO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnZW5jdWVzdGFfZm9yemFyX3RhcmVhJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOiBbXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ29wZXJhdGl2bycsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAnZW5jJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICd0YXJlYV9hY3R1YWwnLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ3RhcmVhX251ZXZhJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOiBhc3luYyBmdW5jdGlvbiAoY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCwgcGFyYW1zOiBDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzPHsgb3BlcmF0aXZvOiBJZE9wZXJhdGl2bywgZW5jOiBzdHJpbmcsIHRhcmVhX2FjdHVhbDogc3RyaW5nLCB0YXJlYV9udWV2YTogc3RyaW5nIH0+KSB7XHJcbiAgICAgICAgICAgIHZhciB7IG9wZXJhdGl2bywgZW5jLCB0YXJlYV9hY3R1YWwsIHRhcmVhX251ZXZhIH0gPSBwYXJhbXM7XHJcbiAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIHVwZGF0ZSB0ZW0gXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0IHRhcmVhX2FjdHVhbCA9ICQ0XHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvID0gJDEgYW5kIGVuYyA9ICQyIGFuZCB0YXJlYV9hY3R1YWwgPSAkM1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAqYCxcclxuICAgICAgICAgICAgICAgIFtvcGVyYXRpdm8sIGVuYywgdGFyZWFfYWN0dWFsLCB0YXJlYV9udWV2YV0pXHJcbiAgICAgICAgICAgICAgICAuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgdXBkYXRlIHRhcmVhc190ZW0gXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0IGVzdGFkbyA9ICdWJyBcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm8gPSAkMSBhbmQgZW5jID0gJDIgYW5kIHRhcmVhID0gJDNcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgKmAsXHJcbiAgICAgICAgICAgICAgICBbb3BlcmF0aXZvLCBlbmMsIHRhcmVhX2FjdHVhbF0pXHJcbiAgICAgICAgICAgICAgICAuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgdXBkYXRlIHRhcmVhc190ZW0gXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0IGVzdGFkbyA9ICcwRCdcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm8gPSAkMSBhbmQgZW5jID0gJDIgYW5kIHRhcmVhID0gJDNcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgKmAsXHJcbiAgICAgICAgICAgICAgICBbb3BlcmF0aXZvLCBlbmMsIHRhcmVhX251ZXZhXSlcclxuICAgICAgICAgICAgICAgIC5mZXRjaFVuaXF1ZVJvdygpO1xyXG4gICAgICAgICAgICByZXR1cm4gJ29rJztcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjogJ2VuY3Vlc3RhX2hhYmlsaXRhcl9kZXNoYWJpbGl0YXInLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6IFtcclxuICAgICAgICAgICAgeyBuYW1lOiAnb3BlcmF0aXZvJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICdlbmMnLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgXSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246IGFzeW5jIGZ1bmN0aW9uIChjb250ZXh0OiBQcm9jZWR1cmVDb250ZXh0LCBwYXJhbXM6IENvcmVGdW5jdGlvblBhcmFtZXRlcnM8eyBvcGVyYXRpdm86IElkT3BlcmF0aXZvLCBlbmM6IHN0cmluZyB9Pikge1xyXG4gICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICBVUERBVEUgdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0IGhhYmlsaXRhZGEgPSBub3QgaGFiaWxpdGFkYVxyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2bz0kMSBhbmQgZW5jPSQyXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nICpgLFxyXG4gICAgICAgICAgICAgICAgW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy5lbmNdKVxyXG4gICAgICAgICAgICAgICAgLmZldGNoVW5pcXVlUm93KCk7XHJcbiAgICAgICAgICAgIHJldHVybiAnb2snO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnZW5jdWVzdGFzX3Byb2Nlc2FtaWVudG9fcGFzYXInLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6IFtdLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjphc3luYyBmdW5jdGlvbihjb250ZXh0OlByb2NlZHVyZUNvbnRleHQsIF9wYXJhbXM6Q29yZUZ1bmN0aW9uUGFyYW1ldGVyczx7fT4pe1xyXG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgcGFzYXJFbmN1ZXN0YXNBUHJvaWUoY29udGV4dC5jbGllbnQpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnaW50ZXJjYW1iaWFyX2VuY3Vlc3RhcycsXHJcbiAgICAgICAgcGFyYW1ldGVyczogW1xyXG4gICAgICAgICAgICB7IG5hbWU6ICdlbmMxJywgcmVmZXJlbmNlczogJ3RlbScsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAnY2FudEhvZzEnLCB0eXBlTmFtZTogJ2ludGVnZXInIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ2VuYzInLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ2NhbnRIb2cyJywgdHlwZU5hbWU6ICdpbnRlZ2VyJyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICdwYXNvJywgdHlwZU5hbWU6ICdpbnRlZ2VyJyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICdjb25maXJtYScsIHR5cGVOYW1lOiAnYm9vbGVhbicsIGRlZmF1bHRWYWx1ZTogZmFsc2UsIGxhYmVsOiAnQ29uZmlybWEgaW50ZXJjYW1iaW8gZGUgbG9zIGRhdG9zIGVudHJlIGxhcyBlbmN1ZXN0YXM/ICcgfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIHJvbGVzOiBbJ2Nvb3JfcHJvYycsICdwcm9jZXNhbWllbnRvJywgJ2FkbWluJ10sXHJcbiAgICAgICAgcHJvZ3Jlc3M6IHRydWUsXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOiBhc3luYyBmdW5jdGlvbiAoY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCwgcGFyYW1zOiBDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzPGFueT4pIHtcclxuICAgICAgICAgICAgLyoqXHJcbiAgICAgICAgICAgICAqIFBhcmEgY29udHJvbGFyOlxyXG4gICAgICAgICAgICAgKiAtIHF1ZSBsYXMgaG9nYXJlcywgcGVyc29uYXMsIGV0YyBlc3TDqW4gaW50ZXJjYW1iaWFkYXMgXHJcbiAgICAgICAgICAgICAqICAqIHRhbnRvIGVuIGVsIGpzb25cclxuICAgICAgICAgICAgICogICogY29tbyBlbiBsYXMgVERzXHJcbiAgICAgICAgICAgICAqIC0gY29zYXMgcXVlIHNlIGNhbGN1bGFuIHBvciBsYSBhcHA/IGN1YWxlcz8gKHJlc3VtZW5fZXN0YWRvLCByZWEgeSBub3JlYSlcclxuICAgICAgICAgICAgICovXHJcblxyXG4gICAgICAgICAgICBpZiAoIXBhcmFtcy5jb25maXJtYSkge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBjb25maXJtw7MgaW50ZXJjYW1iaW8nKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICghcGFyYW1zLmVuYzEgfHwgIXBhcmFtcy5lbmMyKSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Vycm9yLCBGYWx0YSBpbmdyZXNhciB1biBudW1lcm8gZGUgZW5jdWVzdGEhJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHBhcmFtcy5lbmMxID09IHBhcmFtcy5lbmMyKSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Vycm9yLCBlbmMxIHkgZW5jMiBkZWJlbiBzZXIgZGlzdGludG9zIScpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICghcGFyYW1zLmNhbnRIb2cxKSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Vycm9yLCBDYW50aWRhZCBkZSBIb2dhcmVzIGRlIGVuYzEsIG5vIGVzdGEgaW5ncmVzYWRvIScpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICghcGFyYW1zLmNhbnRIb2cyKSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Vycm9yLCBDYW50aWRhZCBkZSBIb2dhcmVzIGRlIGVuYzIsIG5vIGVzdGEgaW5ncmVzYWRvIScpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIENPTlRST0xBUiBRVUUgTklOR1VOQSBERSBMQVMgMiBlbmN1ZXN0YXMgRVNURSBDQVJHQURBLCBBQklFUlRBIEZBTFRBXHJcbiAgICAgICAgICAgIGNvbnN0IE9QRVJBVElWTyA9IGF3YWl0IGdldE9wZXJhdGl2b0FjdHVhbChjb250ZXh0KTtcclxuICAgICAgICAgICAgdmFyIHsgdW5pZGFkX2FuYWxpc2lzLCBwa19hZ3JlZ2FkYSB9ID0gKGF3YWl0IGdldFVBUHJpbmNpcGFsKGNvbnRleHQuY2xpZW50LCBPUEVSQVRJVk8pKTtcclxuICAgICAgICAgICAgY29uc3QgY2FudF9ob2dzID0gKGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIHNlbGVjdCB2aXZpZW5kYSwgY291bnQoKiluaCBmcm9tIGhvZ2FyZXMgd2hlcmUgb3BlcmF0aXZvPSQxIGFuZCAodml2aWVuZGE9JDIgb3Igdml2aWVuZGE9JDMpXHJcbiAgICAgICAgICAgICAgICBncm91cCBieSB2aXZpZW5kYSBvcmRlciBieSB2aXZpZW5kYVxyXG4gICAgICAgICAgICAgICAgYCwgW09QRVJBVElWTywgcGFyYW1zLmVuYzEsIHBhcmFtcy5lbmMyXSkuZmV0Y2hBbGwoKSkucm93cztcclxuXHJcbiAgICAgICAgICAgIHZhciBwYXJhbV9uaCA9IFtwYXJhbXMuY2FudEhvZzEsIHBhcmFtcy5jYW50SG9nMl07XHJcbiAgICAgICAgICAgIGNhbnRfaG9ncy5mb3JFYWNoKCh4ZSwgaSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHBhcmFtX25oW2ldICE9PSB4ZS5uaCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHhtZW5zID0gYEVycm9yLCBubyBjb2luY2lkZSBsYSBjYW50aWRhZCBkZSBob2dhcmVzIGRlIGVuYyR7aSArIDF9YDtcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoeG1lbnMpO1xyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICB2YXIgcmVnRW5jID0gKGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgc2VsZWN0IGVuYywgdGFyZWFfYWN0dWFsLCBqc29uX2VuY3Vlc3RhIGZyb20gdGVtIHdoZXJlIG9wZXJhdGl2bz0kMSBhbmQgKGVuYyA9JDIgb3IgZW5jPSQzKSBvcmRlciBieSBlbmNcclxuICAgICAgICAgICAgYCwgW09QRVJBVElWTywgcGFyYW1zLmVuYzEsIHBhcmFtcy5lbmMyXSkuZmV0Y2hBbGwoKSkucm93cztcclxuXHJcbiAgICAgICAgICAgIGlmIChyZWdFbmMubGVuZ3RoICE9IDIpIHtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRXJyb3IsIE5vIHNlIGVuY29udHJhcm9uIDIgZW5jdWVzdGFzJylcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIC8vIGxpbXBpYSBsYXMgVERzICBcclxuICAgICAgICAgICAgICAgIGxldCBbZW5jMSwgZW5jMl0gPSBbcmVnRW5jWzBdLCByZWdFbmNbMV1dXHJcbiAgICAgICAgICAgICAgICBpZiAocGFyYW1zLnBhc28gPT0gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBgZGVsZXRlIGZyb20gJHtjb250ZXh0LmJlLmRiLnF1b3RlSWRlbnQodW5pZGFkX2FuYWxpc2lzKX0gd2hlcmUgb3BlcmF0aXZvPSQxIGFuZCAodml2aWVuZGE9JDIgT1Igdml2aWVuZGE9JDMpYFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAsIFtPUEVSQVRJVk8sIGVuYzEuZW5jLCBlbmMyLmVuY11cclxuICAgICAgICAgICAgICAgICAgICApLmV4ZWN1dGUoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHBhcmFtcy5wYXNvID09IDIpIHtcclxuICAgICAgICAgICAgICAgICAgICAvL3NpbXVsYSBndWFyZGFkb1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHNpbXVsYXJHdWFyZGFkb0RlRW5jdWVzdGFEZXNkZUFwcEVzY3JpdG9yaW8oY29udGV4dCwgT1BFUkFUSVZPLCBlbmMxLmVuYywgZW5jMS50YXJlYV9hY3R1YWwsIGVuYzIuanNvbl9lbmN1ZXN0YSlcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCBzaW11bGFyR3VhcmRhZG9EZUVuY3Vlc3RhRGVzZGVBcHBFc2NyaXRvcmlvKGNvbnRleHQsIE9QRVJBVElWTywgZW5jMi5lbmMsIGVuYzIudGFyZWFfYWN0dWFsLCBlbmMxLmpzb25fZW5jdWVzdGEpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIChgTGlzdG8gcGFzbyAke3BhcmFtcy5wYXNvfS4gSW50ZXJjYW1iaW8gcmVhbGl6YWRvIGVudHJlIGxhcyBlbmN1ZXN0YXMgICR7cGFyYW1zLmVuYzF9IHkgJHtwYXJhbXMuZW5jMn0uIFBvciBmYXZvciBjb25zaXN0YSBsYSBlbmN1ZXN0YWApXHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdlbmN1ZXN0YWRvcl9kbXNfbW9zdHJhcicsXHJcbiAgICAgICAgcGFyYW1ldGVyczogW1xyXG4gICAgICAgICAgICB7IG5hbWU6ICdvcGVyYXRpdm8nLCB0eXBlTmFtZTogJ3RleHQnLCByZWZlcmVuY2VzOiBcIm9wZXJhdGl2b3NcIiB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICdlbmN1ZXN0YWRvcicsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIHJvbGVzOiBbJ2Nvb3JfcHJvYycsICdjb29yX2NhbXBvJywgJ2FkbWluJ10sXHJcbiAgICAgICAgcmVzdWx0T2s6ICdtb3N0cmFyX2VuY3Vlc3Rhc19hX2JsYW5xdWVhcicsXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOiBhc3luYyBmdW5jdGlvbiAoY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCwgcGFyYW1zOiBDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzPHsgb3BlcmF0aXZvOiBJZE9wZXJhdGl2bywgZW5jdWVzdGFkb3I6IHN0cmluZyB9Pikge1xyXG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgc2VsZWN0ICpcclxuICAgICAgICAgICAgICAgICAgICBmcm9tIHRhcmVhc190ZW1cclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm89JDEgYW5kIGFzaWduYWRvID0gJDIgYW5kIGNhcmdhZG9fZG0gaXMgbm90IG51bGxcclxuICAgICAgICAgICAgICAgICAgICBvcmRlciBieSBjYXJnYWRvX2RtXHJcbiAgICAgICAgICAgICAgICBgLFxyXG4gICAgICAgICAgICAgICAgW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy5lbmN1ZXN0YWRvcl0pXHJcbiAgICAgICAgICAgICAgICAuZmV0Y2hBbGwoKTtcclxuICAgICAgICAgICAgaWYgKHJlc3VsdC5yb3dDb3VudCA9PSAwKSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcihgTm8gc2UgZW5jb250cmFyb24gZW5jdWVzdGFzIGNhcmdhZGFzIGVuIHVuIERNIHBhcmEgZWwgb3BlcmF0aXZvICR7cGFyYW1zLm9wZXJhdGl2b30sIGVuY3Vlc3RhZG9yICR7cGFyYW1zLmVuY3Vlc3RhZG9yfWApXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHsgcm93czogcmVzdWx0LnJvd3MsIG9wZXJhdGl2bzogcGFyYW1zLm9wZXJhdGl2byB9O1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnZG1fYmxhbnF1ZWFyJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOiBbXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ29wZXJhdGl2bycsIHR5cGVOYW1lOiAndGV4dCcsIHJlZmVyZW5jZXM6IFwib3BlcmF0aXZvc1wiIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ3Rva2VuJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgcm9sZXM6IFsnY29vcl9wcm9jJywgJ2Nvb3JfY2FtcG8nLCAnYWRtaW4nXSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246IGFzeW5jIGZ1bmN0aW9uIChjb250ZXh0OiBQcm9jZWR1cmVDb250ZXh0LCBwYXJhbXM6IENvcmVGdW5jdGlvblBhcmFtZXRlcnM8eyBvcGVyYXRpdm86IElkT3BlcmF0aXZvLCB0b2tlbjogc3RyaW5nIH0+KSB7XHJcbiAgICAgICAgICAgIHZhciBiZSA9IGNvbnRleHQuYmU7XHJcbiAgICAgICAgICAgIGxldCB0YXJlYXNUZW1SZXN1bHQgPSBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICBVUERBVEUgdGFyZWFzX3RlbVxyXG4gICAgICAgICAgICAgICAgICAgIHNldCBjYXJnYWRvX2RtID0gbnVsbCwgb3BlcmFjaW9uID0gJDMsIGVzdGFkbyA9ICQ0XHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvPSQxIGFuZCBjYXJnYWRvX2RtID0gJDJcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgKmAsXHJcbiAgICAgICAgICAgICAgICBbcGFyYW1zLm9wZXJhdGl2bywgcGFyYW1zLnRva2VuLCBPUEVSQUNJT05fUFJFUEFSQVJfREVTQ0FSR0EsIEVTVEFET19QT1NURVJJT1JfREVTQ0FSR0FdKVxyXG4gICAgICAgICAgICAgICAgLmZldGNoQWxsKCk7XHJcbiAgICAgICAgICAgIGlmICh0YXJlYXNUZW1SZXN1bHQucm93Q291bnQgPT0gMCkge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyb3IoJ05vIHNlIGJsYW5xdWXDsyBuaW5ndW5hIGVuY3Vlc3RhJylcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBmb3IgKGxldCB0dCBvZiB0YXJlYXNUZW1SZXN1bHQucm93cykge1xyXG4gICAgICAgICAgICAgICAgdHQucmVzdWx0X2JsYW5xdWVvID0gYGVuYyAke3R0LmVuY30gc2UgYmxhbnF1ZcOzIGNvcnJlY3RhbWVudGUuYDtcclxuICAgICAgICAgICAgICAgIGxldCByZXN1bHRCYWNrdXAgPSBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICAgICAgVVBEQVRFIHRlbVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXQganNvbl9lbmN1ZXN0YSA9IGpzb25fYmFja3VwLCBmZWNoYV9tb2RpZl9lbmN1ZXN0YSA9IGZlY2hhX2JhY2t1cFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm89JDEgYW5kIGVuYz0kMiBhbmQgZmVjaGFfYmFja3VwID4gY29hbGVzY2UoZmVjaGFfbW9kaWZfZW5jdWVzdGEsICcxOTAwLTAxLTAxJykgYW5kIGpzb25fYmFja3VwIGlzIG5vdCBudWxsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAqYCxcclxuICAgICAgICAgICAgICAgICAgICBbdHQub3BlcmF0aXZvLCB0dC5lbmNdKVxyXG4gICAgICAgICAgICAgICAgICAgIC5mZXRjaE9uZVJvd0lmRXhpc3RzKCk7XHJcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0QmFja3VwLnJvd0NvdW50KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdHQucmVzdWx0X2JsYW5xdWVvICs9IGAgU2UgcmVzdGFibGVjacOzIGVsIGJhY2t1cCBjb24gZmVjaGEgJHtyZXN1bHRCYWNrdXAucm93LmZlY2hhX2JhY2t1cC50b1ltZEhtcygpfS5gXHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHsgcGFyYW1zOiBxdWVyeVBhcmFtcywgc2V0dGVycyB9ID0gZ2V0U2V0dGVyc0FuZFBhcmFtZXRlcnNGb3JSZWFOb1JlYVJlc3VtZW5Fc3RhZG8oe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJlYTogdHQudGFyZWEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNVQVByaW5jaXBhbDogcmVzdWx0QmFja3VwLnJvdy5qc29uX2VuY3Vlc3RhLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXR0ZXJzOiBbXSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zOiBbdHQub3BlcmF0aXZvLCB0dC5lbmMsIHR0LnRhcmVhXSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGVzdGlubzogJ3RhcmVhc190ZW0nXHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShcclxuICAgICAgICAgICAgICAgICAgICAgICAgYHVwZGF0ZSB0YXJlYXNfdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXQgJHtzZXR0ZXJzLmpvaW4oJywnKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2bz0gJDEgYW5kIGVuYyA9ICQyIGFuZCB0YXJlYSA9ICQzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgJ29rJ2BcclxuICAgICAgICAgICAgICAgICAgICAgICAgLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBxdWVyeVBhcmFtc1xyXG4gICAgICAgICAgICAgICAgICAgICkuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCBzaW11bGFyR3VhcmRhZG9EZUVuY3Vlc3RhRGVzZGVBcHBFc2NyaXRvcmlvKGNvbnRleHQsIHJlc3VsdEJhY2t1cC5yb3cub3BlcmF0aXZvLCByZXN1bHRCYWNrdXAucm93LmVuYywgdHQudGFyZWEsIHJlc3VsdEJhY2t1cC5yb3cuanNvbl9lbmN1ZXN0YSlcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gdGFyZWFzVGVtUmVzdWx0LnJvd3M7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdtb2RvX2RtX2RlZmVjdG9fb2J0ZW5lcicsXHJcbiAgICAgICAgcGFyYW1ldGVyczogW1xyXG4gICAgICAgIF0sXHJcbiAgICAgICAgdW5sb2dnZWQ6IHRydWUsXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOiBhc3luYyBmdW5jdGlvbiAoY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCwgX3BhcmFtZXRlcnM6IENvcmVGdW5jdGlvblBhcmFtZXRlcnM8e30+KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHsgY2xpZW50IH0gPSBjb250ZXh0O1xyXG4gICAgICAgICAgICBjb25zdCBtb2RvRG1EZWZlY3RvID0gKGF3YWl0IChjbGllbnQucXVlcnkoYHNlbGVjdCBtb2RvX2RtX2RlZmVjdG8gZnJvbSBwYXJhbWV0cm9zIHdoZXJlIHVuaWNvX3JlZ2lzdHJvYCwgW10pLmZldGNoVW5pcXVlVmFsdWUoKSkpLnZhbHVlO1xyXG4gICAgICAgICAgICByZXR1cm4gbW9kb0RtRGVmZWN0bztcclxuICAgICAgICB9XHJcbiAgICB9LCB7XHJcbiAgICAgICAgYWN0aW9uOiAnbW9kb19hcHBfZ2V0JyxcclxuICAgICAgICBwYXJhbWV0ZXJzOiBbXSxcclxuICAgICAgICB1bmxvZ2dlZDogdHJ1ZSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246IGFzeW5jIGZ1bmN0aW9uIChjb250ZXh0OiBQcm9jZWR1cmVDb250ZXh0LCBfcGFyYW1ldGVyczogQ29yZUZ1bmN0aW9uUGFyYW1ldGVyczx7fT4pIHtcclxuICAgICAgICAgICAgY29uc3QgeyBiZSB9ID0gY29udGV4dDtcclxuICAgICAgICAgICAgcmV0dXJuIGdldE1vZG9CeVBvbGljeShiZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdvcGVyYXRpdm9fbWlncmFyJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOiBbXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ29wZXJhdGl2b19vcmlnZW4nLCB0eXBlTmFtZTogJ3RleHQnLCByZWZlcmVuY2VzOiAnb3BlcmF0aXZvcycgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAnb3BlcmF0aXZvX2Rlc3Rpbm8nLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ3NjaGVtYV9uYW1lJywgdHlwZU5hbWU6ICd0ZXh0JywgbGFiZWw6ICdub21icmUgZGUgc2NoZW1hJyB9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgcmVzdWx0T2s6ICdkb3dubG9hZF9zcWwnLFxyXG4gICAgICAgIHByb2NlZWRMYWJlbDogJ21pZ3JhcicsXHJcbiAgICAgICAgcm9sZXM6IFsnYWRtaW4nXSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246IGFzeW5jIGZ1bmN0aW9uIChjb250ZXh0OiBQcm9jZWR1cmVDb250ZXh0LCBwYXJhbXM6IHsgb3BlcmF0aXZvX29yaWdlbjogc3RyaW5nLCBvcGVyYXRpdm9fZGVzdGlubzogc3RyaW5nLCBzY2hlbWFfbmFtZTogc3RyaW5nIH0pIHtcclxuICAgICAgICAgICAgY29uc3QgdGFibGVzID0gYXdhaXQgUHJvbWlzZS5hbGwoWydvcGVyYXRpdm9zJywgJ3RhcmVhcycsICd1bmlkYWRfYW5hbGlzaXMnLCAnY2FzaWxsZXJvcyddLm1hcChhc3luYyB0YWJsZU5hbWUgPT4gKHtcclxuICAgICAgICAgICAgICAgIG5hbWU6IHRhYmxlTmFtZSxcclxuICAgICAgICAgICAgICAgIHJlc3VsdDogYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYHNlbGVjdCAqIGZyb20gJHtjb250ZXh0LmJlLmRiLnF1b3RlSWRlbnQodGFibGVOYW1lKX0gd2hlcmUgb3BlcmF0aXZvID0gJDFgLCBbcGFyYW1zLm9wZXJhdGl2b19vcmlnZW5dKS5mZXRjaEFsbCgpXHJcbiAgICAgICAgICAgIH0pKSk7XHJcblxyXG4gICAgICAgICAgICB0YWJsZXMuZm9yRWFjaCgoXywgaSkgPT4gdGFibGVzW2ldLnJlc3VsdC5yb3dzLmZvckVhY2gocm93ID0+IHJvdy5vcGVyYXRpdm8gPSBwYXJhbXMub3BlcmF0aXZvX2Rlc3Rpbm8pKTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGRpc2FibGVDYXNpbGxlcm9zRksgPSBgXHJcbiAgICAgICAgICAgICAgICAtLSBEZXNoYWJpbGl0YXIgdmFsaWRhY2nDs24gZGUgRksgeSB0cmlnZ2VycyBlbiBjYXNpbGxlcm9zXHJcbiAgICAgICAgICAgICAgICBBTFRFUiBUQUJMRSAke2NvbnRleHQuYmUuZGIucXVvdGVJZGVudChwYXJhbXMuc2NoZW1hX25hbWUpfS5jYXNpbGxlcm9zIERJU0FCTEUgVFJJR0dFUiBBTEw7XHJcbiAgICAgICAgICAgIGA7XHJcbiAgICAgICAgICAgIGNvbnN0IGVuYWJsZUNhc2lsbGVyb3NGSyA9IGBcclxuICAgICAgICAgICAgICAgIC0tIEhhYmlsaXRhciB2YWxpZGFjacOzbiBkZSBGSyB5IHRyaWdnZXJzIGVuIGNhc2lsbGVyb3NcclxuICAgICAgICAgICAgICAgIEFMVEVSIFRBQkxFICR7Y29udGV4dC5iZS5kYi5xdW90ZUlkZW50KHBhcmFtcy5zY2hlbWFfbmFtZSl9LmNhc2lsbGVyb3MgRU5BQkxFIFRSSUdHRVIgQUxMO1xyXG4gICAgICAgICAgICBgO1xyXG4gICAgICAgICAgICBjb25zdCBidWlsZEluc2VydHMgPSAocXVlcnk6IHsgbmFtZTogc3RyaW5nLCByZXN1bHQ6IFJlc3VsdFJvd3MgfSkgPT4gcXVlcnkucmVzdWx0LnJvd3MubWFwKHJvdyA9PlxyXG4gICAgICAgICAgICAgICAgJ2luc2VydCBpbnRvICcgKyBjb250ZXh0LmJlLmRiLnF1b3RlSWRlbnQocGFyYW1zLnNjaGVtYV9uYW1lKSArICcuJyArIGNvbnRleHQuYmUuZGIucXVvdGVJZGVudChxdWVyeS5uYW1lKSArXHJcbiAgICAgICAgICAgICAgICAnICgnICsgcXVlcnkucmVzdWx0LmZpZWxkcy5tYXAoKGY6IHsgbmFtZTogc3RyaW5nIH0pID0+IGNvbnRleHQuYmUuZGIucXVvdGVJZGVudChmLm5hbWUpKS5qb2luKCcsICcpICsgJyknICtcclxuICAgICAgICAgICAgICAgICcgdmFsdWVzICgnICsgcXVlcnkucmVzdWx0LmZpZWxkcy5tYXAoKGY6IHsgbmFtZTogc3RyaW5nIH0pID0+IGNvbnRleHQuYmUuZGIucXVvdGVOdWxsYWJsZShyb3dbZi5uYW1lXSkpLmpvaW4oJywgJykgKyAnKTsnXHJcbiAgICAgICAgICAgICkuam9pbignXFxuJyk7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBpbnNlcnRBcmVhcyA9IGBcclxuICAgICAgICAgICAgICAgIGluc2VydCBpbnRvIGFyZWFzIChvcGVyYXRpdm8sIGFyZWEpXHJcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0ICR7Y29udGV4dC5iZS5kYi5xdW90ZU51bGxhYmxlKHBhcmFtcy5vcGVyYXRpdm9fZGVzdGlubyl9IGFzIG9wZXJhdGl2bywgYXJlYVxyXG4gICAgICAgICAgICAgICAgICAgIGZyb20gYXJlYXMgd2hlcmUgb3BlcmF0aXZvID0gJHtjb250ZXh0LmJlLmRiLnF1b3RlTnVsbGFibGUocGFyYW1zLm9wZXJhdGl2b19vcmlnZW4pfTtcclxuICAgICAgICAgICAgYFxyXG5cclxuICAgICAgICAgICAgY29uc3QgaW5zZXJ0VGFyZWFzQXJlYXMgPSBgXHJcbiAgICAgICAgICAgICAgICBpbnNlcnQgaW50byB0YXJlYXNfYXJlYXMgKG9wZXJhdGl2byx0YXJlYSwgYXJlYSlcclxuICAgICAgICAgICAgICAgICAgICBzZWxlY3QgJHtjb250ZXh0LmJlLmRiLnF1b3RlTnVsbGFibGUocGFyYW1zLm9wZXJhdGl2b19kZXN0aW5vKX0gYXMgb3BlcmF0aXZvLCB0YXJlYSwgYXJlYVxyXG4gICAgICAgICAgICAgICAgICAgIGZyb20gdGFyZWFzX2FyZWFzXHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvID0gJHtjb250ZXh0LmJlLmRiLnF1b3RlTnVsbGFibGUocGFyYW1zLm9wZXJhdGl2b19vcmlnZW4pfTtcclxuICAgICAgICAgICAgYDtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGluc2VydFRlbSA9IGBcclxuICAgICAgICAgICAgICAgIGluc2VydCBpbnRvIHRlbSAob3BlcmF0aXZvLCBhcmVhLCBlbmMsIGRvbWluaW8sIGhhYmlsaXRhZGEpXHJcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0ICR7Y29udGV4dC5iZS5kYi5xdW90ZU51bGxhYmxlKHBhcmFtcy5vcGVyYXRpdm9fZGVzdGlubyl9IGFzIG9wZXJhdGl2bywgYXJlYSwgKGFyZWEgfHwgZW5jOjp0ZXh0KSBlbmMsIGNhc2Ugd2hlbiBlbmNzLmVuYyA8IDEwNiB0aGVuIDMgZWxzZSA1IGVuZCBhcyBkb21pbmlvLCB0cnVlIGFzIGhhYmlsaXRhZGFcclxuICAgICAgICAgICAgICAgICAgICBmcm9tIGFyZWFzIGpvaW4gKFNFTEVDVCBnZW5lcmF0ZV9zZXJpZXMoMTAwLCAxMTApIGVuYykgZW5jc1xyXG4gICAgICAgICAgICAgICAgICAgIG9uIG9wZXJhdGl2byA9ICR7Y29udGV4dC5iZS5kYi5xdW90ZU51bGxhYmxlKHBhcmFtcy5vcGVyYXRpdm9fb3JpZ2VuKX07XHJcbiAgICAgICAgICAgIGA7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBzcWwgPSBgc2V0IHNlYXJjaF9wYXRoID0gXCIke3BhcmFtcy5zY2hlbWFfbmFtZX1cIjtgICsgYFxcblxcbmBcclxuICAgICAgICAgICAgICAgICsgZGlzYWJsZUNhc2lsbGVyb3NGS1xyXG4gICAgICAgICAgICAgICAgKyB0YWJsZXMubWFwKHF1ZXJ5ID0+IGJ1aWxkSW5zZXJ0cyhxdWVyeSkpLmpvaW4oJ1xcblxcbicpXHJcbiAgICAgICAgICAgICAgICArICdcXG5cXG4nICsgaW5zZXJ0QXJlYXNcclxuICAgICAgICAgICAgICAgICsgJ1xcblxcbicgKyBpbnNlcnRUYXJlYXNBcmVhc1xyXG4gICAgICAgICAgICAgICAgKyAnXFxuXFxuJyArIGluc2VydFRlbVxyXG4gICAgICAgICAgICAgICAgKyAnXFxuXFxuJyArIGVuYWJsZUNhc2lsbGVyb3NGSztcclxuICAgICAgICAgICAgcmV0dXJuIHNxbDtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjogJ2VuY3Vlc3RhX2NhcGFfYV9wcm9kX3Bhc2FyJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOiBbXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ29wZXJhdGl2bycsIHR5cGVOYW1lOiAndGV4dCcsIHJlZmVyZW5jZXM6ICdvcGVyYXRpdm9zJyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICdlbmMnLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgXSxcclxuICAgICAgICByb2xlczogWydhZG1pbiddLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjogYXN5bmMgZnVuY3Rpb24gKGNvbnRleHQ6IFByb2NlZHVyZUNvbnRleHQsIHBhcmFtZXRlcnM6IENvcmVGdW5jdGlvblBhcmFtZXRlcnM8eyBvcGVyYXRpdm86IElkT3BlcmF0aXZvLCBlbmM6IHN0cmluZyB9Pikge1xyXG4gICAgICAgICAgICAoYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoXHJcbiAgICAgICAgICAgICAgICBgdXBkYXRlIHRlbVxyXG4gICAgICAgICAgICAgICAgICAgIHNldCBlbmNfYXV0b2dlbmVyYWRvX2RtID0gZW5jX2F1dG9nZW5lcmFkb19kbV9jYXBhLCBlbmNfYXV0b2dlbmVyYWRvX2RtX2NhcGEgPSBudWxsXHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvID0gJDEgYW5kIGVuYyA9ICQyIGFuZCBlbmNfYXV0b2dlbmVyYWRvX2RtX2NhcGEgaXMgbm90IG51bGxcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgKmAsXHJcbiAgICAgICAgICAgICAgICBbcGFyYW1ldGVycy5vcGVyYXRpdm8sIHBhcmFtZXRlcnMuZW5jXVxyXG4gICAgICAgICAgICApLmZldGNoVW5pcXVlUm93KCkpLnJvdztcclxuXHJcbiAgICAgICAgICAgIHJldHVybiBgc2UgbW92acOzIGxhIGVuY3Vlc3RhICR7cGFyYW1ldGVycy5lbmN9IGEgcHJvZHVjY2nDs25gO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXTsiXX0=