sonamu 0.8.21 → 0.8.23

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 (40) hide show
  1. package/dist/api/config.d.ts +1 -1
  2. package/dist/api/config.d.ts.map +1 -1
  3. package/dist/api/config.js +1 -1
  4. package/dist/api/sonamu.d.ts +1 -1
  5. package/dist/api/sonamu.d.ts.map +1 -1
  6. package/dist/api/sonamu.js +14 -19
  7. package/dist/cone/cone-generator.js +29 -16
  8. package/dist/database/base-model.js +2 -2
  9. package/dist/database/db.d.ts +1 -1
  10. package/dist/database/db.d.ts.map +1 -1
  11. package/dist/database/db.js +1 -1
  12. package/dist/syncer/syncer.js +2 -2
  13. package/dist/testing/dev-test-routes.d.ts.map +1 -1
  14. package/dist/testing/dev-test-routes.js +4 -1
  15. package/dist/testing/global-setup.d.ts.map +1 -1
  16. package/dist/testing/global-setup.js +1 -4
  17. package/dist/ui/api.d.ts.map +1 -1
  18. package/dist/ui/api.js +11 -11
  19. package/dist/ui-web/assets/index-BrQKU3j9.css +1 -0
  20. package/dist/ui-web/assets/{index-DP968oXY.js → index-DIasN3Gt.js} +47 -47
  21. package/dist/ui-web/index.html +2 -2
  22. package/package.json +3 -3
  23. package/src/api/config.ts +1 -1
  24. package/src/api/sonamu.ts +15 -20
  25. package/src/cone/cone-generator.ts +39 -19
  26. package/src/database/base-model.ts +1 -1
  27. package/src/database/db.ts +1 -1
  28. package/src/skills/AGENTS.md +11 -1
  29. package/src/skills/sonamu/SKILL.md +42 -149
  30. package/src/skills/sonamu/cdd.md +172 -517
  31. package/src/skills/sonamu/cone.md +3 -4
  32. package/src/skills/sonamu/fixture-cli.md +1 -1
  33. package/src/skills/sonamu/workflow.md +72 -80
  34. package/src/syncer/syncer.ts +1 -1
  35. package/src/testing/dev-test-routes.ts +3 -0
  36. package/src/testing/global-setup.ts +0 -4
  37. package/src/ui/api.ts +6 -15
  38. package/dist/ui-web/assets/index-B7gc0Ygb.css +0 -1
  39. package/src/skills/project/business-logic.md +0 -270
  40. package/src/skills/project/requirements.md +0 -160
@@ -209,7 +209,7 @@ export class Syncer {
209
209
  }
210
210
  async autoloadWorkflows() {
211
211
  this.workflows = await loadWorkflows();
212
- await Sonamu.workflows?.synchronize(this.workflows);
212
+ await Sonamu.workflows.synchronize(this.workflows);
213
213
  }
214
214
  async autoloadSSRRoutes() {
215
215
  const ssrConfigPath = path.join(Sonamu.apiRootPath, "src/ssr");
@@ -494,4 +494,4 @@ export class Syncer {
494
494
  }
495
495
  }
496
496
 
497
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zeW5jZXIvc3luY2VyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGhvdCB9IGZyb20gXCJAc29uYW11LWtpdC9obXItaG9va1wiO1xuaW1wb3J0IGFzc2VydCBmcm9tIFwiYXNzZXJ0XCI7XG5pbXBvcnQgY2hhbGsgZnJvbSBcImNoYWxrXCI7XG5pbXBvcnQgeyBFdmVudEVtaXR0ZXIgfSBmcm9tIFwiZXZlbnRzXCI7XG5pbXBvcnQgeyBta2RpciwgcmVhZEZpbGUsIHdyaXRlRmlsZSB9IGZyb20gXCJmcy9wcm9taXNlc1wiO1xuaW1wb3J0IGluZmxlY3Rpb24gZnJvbSBcImluZmxlY3Rpb25cIjtcbmltcG9ydCB7IG1pbmltYXRjaCB9IGZyb20gXCJtaW5pbWF0Y2hcIjtcbmltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgeyBncm91cCwgdW5pcXVlIH0gZnJvbSBcInJhZGFzaGlcIjtcbmltcG9ydCB0eXBlIHsgeiB9IGZyb20gXCJ6b2RcIjtcbmltcG9ydCB0eXBlIHsgV29ya2Zsb3dNZXRhZGF0YSB9IGZyb20gXCIuLlwiO1xuaW1wb3J0IHsgcmVnaXN0ZXJlZEFwaXMgfSBmcm9tIFwiLi4vYXBpL2RlY29yYXRvcnNcIjtcbmltcG9ydCB7IFNvbmFtdSB9IGZyb20gXCIuLi9hcGkvc29uYW11XCI7XG5pbXBvcnQgeyBFbnRpdHlNYW5hZ2VyLCB0eXBlIEVudGl0eU5hbWVzUmVjb3JkIH0gZnJvbSBcIi4uL2VudGl0eS9lbnRpdHktbWFuYWdlclwiO1xuaW1wb3J0IHsgQWxyZWFkeVByb2Nlc3NlZEV4Y2VwdGlvbiB9IGZyb20gXCIuLi9leGNlcHRpb25zL3NvLWV4Y2VwdGlvbnNcIjtcbmltcG9ydCB7IE5haXRlIH0gZnJvbSBcIi4uL25haXRlL25haXRlXCI7XG5pbXBvcnQgeyBUZW1wbGF0ZU1hbmFnZXIgfSBmcm9tIFwiLi4vdGVtcGxhdGUvdGVtcGxhdGUtbWFuYWdlclwiO1xuaW1wb3J0IHR5cGUgeyBHZW5lcmF0ZU9wdGlvbnMsIFBhdGhBbmRDb2RlIH0gZnJvbSBcIi4uL3R5cGVzL3R5cGVzXCI7XG5pbXBvcnQgeyBUZW1wbGF0ZUtleSwgdHlwZSBUZW1wbGF0ZU9wdGlvbnMgfSBmcm9tIFwiLi4vdHlwZXMvdHlwZXNcIjtcbmltcG9ydCB7IG1hcEFzeW5jLCByZWR1Y2VBc3luYyB9IGZyb20gXCIuLi91dGlscy9hc3luYy11dGlsc1wiO1xuaW1wb3J0IHsgY2VudGVyVGV4dCB9IGZyb20gXCIuLi91dGlscy9jb25zb2xlLXV0aWxcIjtcbmltcG9ydCB7IGlzVGVzdCB9IGZyb20gXCIuLi91dGlscy9jb250cm9sbGVyXCI7XG5pbXBvcnQgeyBjb3B5RmlsZVdpdGhSZXBsYWNlQ29yZVRvU2hhcmVkLCBleGlzdHMgfSBmcm9tIFwiLi4vdXRpbHMvZnMtdXRpbHNcIjtcbmltcG9ydCB0eXBlIHsgQWJzb2x1dGVQYXRoIH0gZnJvbSBcIi4uL3V0aWxzL3BhdGgtdXRpbHNcIjtcbmltcG9ydCB7IHJ1bldpdGhHcmFjZWZ1bFNodXRkb3duIH0gZnJvbSBcIi4uL3V0aWxzL3Byb2Nlc3MtdXRpbHNcIjtcbmltcG9ydCB7IGZpbmRDaGFuZ2VkRmlsZXNVc2luZ0NoZWNrc3VtcywgcmVuZXdDaGVja3N1bXMgfSBmcm9tIFwiLi9jaGVja3N1bVwiO1xuaW1wb3J0IHsgZ2VuZXJhdGVUZW1wbGF0ZSwgcmVuZGVyVGVtcGxhdGUgfSBmcm9tIFwiLi9jb2RlLWdlbmVyYXRvclwiO1xuaW1wb3J0IHsgY3JlYXRlRW50aXR5LCBkZWxFbnRpdHkgfSBmcm9tIFwiLi9lbnRpdHktb3BlcmF0aW9uc1wiO1xuaW1wb3J0IHtcbiAgY2hlY2tzdW1QYXR0ZXJuR3JvdXAsXG4gIHR5cGUgRmlsZVR5cGUsXG4gIGdldENoZWNrc3VtUGF0dGVybkdyb3VwSW5BYnNvbHV0ZVBhdGgsXG59IGZyb20gXCIuL2ZpbGUtcGF0dGVybnNcIjtcbmltcG9ydCB7XG4gIHR5cGUgTG9hZGVkQXBpcyxcbiAgdHlwZSBMb2FkZWRNb2RlbHMsXG4gIHR5cGUgTG9hZGVkVHlwZXMsXG4gIGxvYWRBcGlzLFxuICBsb2FkTW9kZWxzLFxuICBsb2FkVHlwZXMsXG4gIGxvYWRXb3JrZmxvd3MsXG59IGZyb20gXCIuL21vZHVsZS1sb2FkZXJcIjtcbmltcG9ydCAqIGFzIFN5bmNlckFjdGlvbnMgZnJvbSBcIi4vc3luY2VyLWFjdGlvbnNcIjtcblxudHlwZSBEaWZmR3JvdXBzID0ge1xuICBba2V5IGluIEZpbGVUeXBlXTogQWJzb2x1dGVQYXRoW107XG59O1xuXG5leHBvcnQgY2xhc3MgU3luY2VyIHtcbiAgYXBpczogTG9hZGVkQXBpcyA9IFtdO1xuICB0eXBlczogTG9hZGVkVHlwZXMgPSB7fTtcbiAgbW9kZWxzOiBMb2FkZWRNb2RlbHMgPSB7fTtcbiAgd29ya2Zsb3dzOiBNYXA8c3RyaW5nLCBXb3JrZmxvd01ldGFkYXRhW10+ID0gbmV3IE1hcCgpO1xuICBldmVudEVtaXR0ZXI6IEV2ZW50RW1pdHRlciA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAvKipcbiAgICog7LK07YGs7ISs7J20IOuzgOqyveuQnCDrtoDrtoTsl5Ag64yA7ZW0IOyLse2BrOulvCDsp4Ttlontlanri4jri6QuXG4gICAqIHNvbmFtdS5zaGFyZWQudHPripQg7YyM7J287J20IOyXhuydhCDrlYzrp4wgMe2ajCDsg53shLHtlZjqs6AsIOydtO2bhOyXkOuKlCDrja7slrTsk7Dsp4Ag7JWK7Iq164uI64ukLlxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgYXN5bmMgc3luYygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB7IHRhcmdldHMgfSA9IFNvbmFtdS5jb25maWcuc3luYztcblxuICAgIC8vIHNvbmFtdS5zaGFyZWQudHPripQg7YyM7J287J20IOyXhuydhCDrlYzrp4wgMe2ajCDsg53shLHtlanri4jri6QuXG4gICAgYXdhaXQgdGhpcy5jb3B5U2hhcmVkVG9UYXJnZXRzKHRhcmdldHMpO1xuXG4gICAgLy8g6re4IOuLpOydjOu2gO2EsOuKlCDrs4Dqsr3rkJwg7YyM7J287J2EIOywvuyVhOyEnCDrj5nquLDtmZQg7J6R7JeF7J2EIOyLpO2Wie2VqeuLiOuLpC5cbiAgICBjb25zdCBjaGFuZ2VkRmlsZXMgPSBhd2FpdCBmaW5kQ2hhbmdlZEZpbGVzVXNpbmdDaGVja3N1bXMoKTtcbiAgICBpZiAoY2hhbmdlZEZpbGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgY29uc29sZS5sb2coY2hhbGsuYmxhY2suYmdHcmVlbihjZW50ZXJUZXh0KFwiQWxsIGZpbGVzIGFyZSBzeW5jZWQhXCIpKSk7XG5cbiAgICAgIC8vIOuzgOqyveyCrO2VreydtCDsl4bslrTrj4QgU1NSIO2FnO2UjOumv+ydgCDsg53shLEgKOy0iOq4sCDshKTsoJUg7IucLCDsnbTrr7gg7KG07J6s7ZWY66m0IOyKpO2CtSlcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IGdlbmVyYXRlVGVtcGxhdGUoXCJxdWVyaWVzXCIsIHt9LCB7IG92ZXJ3cml0ZTogZmFsc2UgfSk7XG4gICAgICAgIGF3YWl0IGdlbmVyYXRlVGVtcGxhdGUoXCJlbnRyeV9zZXJ2ZXJcIiwge30sIHsgb3ZlcndyaXRlOiBmYWxzZSB9KTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgLy8g7YyM7J287J20IOydtOuvuCDsobTsnqztlZjrqbQg66y07IucXG4gICAgICAgIGlmICghKGUgaW5zdGFuY2VvZiBBbHJlYWR5UHJvY2Vzc2VkRXhjZXB0aW9uKSkge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJGYWlsZWQgdG8gZ2VuZXJhdGUgU1NSIHRlbXBsYXRlczpcIiwgZSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIOunjOyVvSDsi7Htgawg7KSR7JeQIO2UhOuhnOyEuOyKpOqwgCDso73snLzrqbQg6rys7Jes67KE66as6riwIOuVjOusuOyXkCxcbiAgICAvLyDsi5zqt7jrhJDsl5Drj4Qg7J6g7IucIOuyhO2LuCDsiJgg7J6I64qUIO2ZmOqyvSDsho3sl5DshJwg7Iux7YGs66W8IOyLpO2Wie2VqeuLiOuLpC5cbiAgICBhd2FpdCBydW5XaXRoR3JhY2VmdWxTaHV0ZG93bihcbiAgICAgIGFzeW5jICgpID0+IHtcbiAgICAgICAgLy8g7JaY6rCAIOyLse2BrCDsnpHsl4Ug7IiY7ZaJ7ZWY64qUIOuzuOyytOyeheuLiOuLpC5cbiAgICAgICAgYXdhaXQgdGhpcy5kb1N5bmNBY3Rpb25zKGNoYW5nZWRGaWxlcyk7XG5cbiAgICAgICAgLy8g7Iux7YGsIOyVoeyFmOydtCDrgZ3rgpjrqbQg7ZWt7IOBIOyytO2BrOyErOydhCDri6Tsi5wg6rCx7Iug7ZWp64uI64ukLlxuICAgICAgICBhd2FpdCByZW5ld0NoZWNrc3VtcygpO1xuICAgICAgfSxcbiAgICAgIHsgd2hlblRoaXNIYXBwZW5zOiBcIlNJR1VTUjJcIiwgd2FpdEZvclVwVG86IDIwMDAwIH0sXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXYXRjaGVy6rCAIOqwkOyngO2VnCDtjIzsnbwg67OA6rK9IOyCrO2VreyXkCDrjIDtlbQg7Iux7YGs66W8IOynhO2Wie2VqeuLiOuLpC5cbiAgICog7KO87Ja07KeEIOuzgOqyvSDtjIzsnbzrk6Qg7KSRIOyytO2BrOyErCDqtIDrpqwg64yA7IOB7J24IOqyg+uTpOunjCDqsIDsoLjri6TqsIAg7Iux7YGs66W8IOynhO2Wie2VqeuLiOuLpC5cbiAgICog7LK07YGs7ISsIO2MjOydvCDsl4XrjbDsnbTtirjripQg7Jes6riw7JeQ7IScIO2VmOyngCDslYrsirXri4jri6QuIO2YuOy2nOyekOqwgCDtlanri4jri6QuXG4gICAqIEBwYXJhbSBkaWZmRmlsZVBhdGggLSDrs4Dqsr0g7YyM7J2865OkLiDtlITroZzsoJ3tirgg66Oo7Yq467aA7YSwIFwic3JjL1wiIOuYkOuKlCBcImRpc3QvXCLroZwg7Iuc7J6R7ZWY64qUIOyDgeuMgCDqsr3roZzsnoXri4jri6QuIOyYiOyLnDogXCJzcmMvYXBwbGljYXRpb24vdXNlci91c2VyLm1vZGVsLnRzXCJcbiAgICovXG4gIGFzeW5jIHN5bmNGcm9tV2F0Y2hlcihldmVudDogc3RyaW5nLCBkaWZmRmlsZVBhdGg6IEFic29sdXRlUGF0aCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmIChldmVudCAhPT0gXCJjaGFuZ2VcIiAmJiBldmVudCAhPT0gXCJhZGRcIiAmJiBldmVudCAhPT0gXCJ1bmxpbmtcIikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFNTUiDshKTsoJUg7YyM7J28IOuzgOqyvSDqsJDsp4BcbiAgICBpZiAoZGlmZkZpbGVQYXRoLmluY2x1ZGVzKFwiL3NyYy9zc3IvXCIpKSB7XG4gICAgICBjb25zb2xlLmxvZyhjaGFsay5ib2xkLnllbGxvdyhcIlNTUiBjb25maWcgY2hhbmdlZCAtIHJlbG9hZGluZy4uLlwiKSk7XG4gICAgICAvLyBTU1Ig7YyM7J2864+EIGludmFsaWRhdGUg7ZuEIHJlbG9hZFxuICAgICAgaWYgKCFpc1Rlc3QoKSkge1xuICAgICAgICBhd2FpdCBob3QuaW52YWxpZGF0ZUZpbGUoZGlmZkZpbGVQYXRoLCBldmVudCk7XG4gICAgICB9XG4gICAgICBhd2FpdCB0aGlzLmF1dG9sb2FkU1NSUm91dGVzKCk7XG4gICAgICB0aGlzLmV2ZW50RW1pdHRlci5lbWl0KFwib25ITVJDb21wbGV0ZWRcIik7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8g7J2864uoIOuzgOqyveuQnCDtjIzsnbzqs7wgZGVwZW5kZW50IO2MjOydvOuTpOydhCBpbnZhbGlkYXRlIO2VqeuLiOuLpC5cbiAgICAvLyDtlZwg67KIIOydtOyDgSBpbXBvcnTrkJwg7Lmc6rWs65Ok7JeQIOuMgO2VtOyEnOunjCDsi6TsoJwg7J6R7JeF7J20IOydvOyWtOuCqeuLiOuLpC5cbiAgICAvLyDqt7jrn6zri4gg7JWI7Ius7ZWY6rOgIGludmFsaWRhdGUg7ZW064+EIOuQqeuLiOuLpC5cbiAgICAvLyDthYzsiqTtirgg7ZmY6rK97JeQ7ISc64qUIGhvdC5pbnZhbGlkYXRlRmlsZeyLnCDstIjquLAg7JeQ65+s6rCAIOuwnOyDne2VmOq4sCDrlYzrrLjsl5AgaW52YWxpZGF0ZSDtlZjsp4Ag7JWK7Iq164uI64ukLlxuICAgIGlmICghaXNUZXN0KCkpIHtcbiAgICAgIGNvbnN0IGludmFsaWRhdGVkUGF0aHMgPSAoYXdhaXQgaG90LmludmFsaWRhdGVGaWxlKGRpZmZGaWxlUGF0aCwgZXZlbnQpKSBhcyBBYnNvbHV0ZVBhdGhbXTtcblxuICAgICAgaWYgKGludmFsaWRhdGVkUGF0aHMubGVuZ3RoID4gMCkge1xuICAgICAgICBjb25zb2xlLmxvZyhjaGFsay5ib2xkKGDwn5SEIEludmFsaWRhdGVkOmApKTtcblxuICAgICAgICBmb3IgKGNvbnN0IGludmFsaWRhdGVkUGF0aCBvZiBpbnZhbGlkYXRlZFBhdGhzKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIOunjOyVvSBtb2RlbC50cyDtjIzsnbzsnbQg67OA6rK9KGludmFsaWRhdGUp65CY7JeI64ukPyDqt7jrn6zrqbQgcmVnaXN0ZXJlZEFwaXMg7KSR7JeQ7IScIOydtCDrqqjrjbjsl5Ag7ZW064u57ZWY64qUIGFwaeuTpOydgCDsp4Dsm4zspJjsmpQuXG4gICAgICAgICAgICAvLyByZWdpc3RlcmVkQXBpc+uKlCDthrXsnLzroZwg64ukIOuCoOugpOuyhOumtCDsiJgg7JeG7Iq164uI64ukLiByZWdpc3RlcmVkQXBpc+yXkCDsmKzrnbzsmKTripQg7Lmc6rWs65Ok7J2AIOy0iOq4sCDroZzrk5zsi5wg65iQ64qUIEhNUuyLnOyXkOunjCDrk7HroZ3rkJjquLAg65WM66y47J6F64uI64ukLlxuICAgICAgICAgICAgLy8g65Sw65287IScIG1vZGVsLnRzIO2MjOydvOydmCDrs4Dqsr3snLzroZwg64uk7J2M67KIIOyDiOuhnOyatCBldmFs7J20IOyYiOyDgeuQmOuKlCDsnbQg7Iuc7KCQ7JeQ7ISc66eMLCDsnbQg66qo64247JeQ7IScIOuCmOyYqCByZWdpc3RlcmVkQXBpc+uTpOydhCDsp4Dsm4zspIQg7IiYIOyeiOyKteuLiOuLpC5cbiAgICAgICAgICAgIGNvbnN0IHJlbW92ZWRBcGlzID0gdGhpcy5yZW1vdmVJbnZhbGlkYXRlZFJlZ2lzdGVyZWRBcGlzKGludmFsaWRhdGVkUGF0aCk7XG4gICAgICAgICAgICBpZiAocmVtb3ZlZEFwaXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgICAgICBjaGFsay5ibHVlKGAtICR7cGF0aC5yZWxhdGl2ZShTb25hbXUuYXBpUm9vdFBhdGgsIGludmFsaWRhdGVkUGF0aCl9YCksXG4gICAgICAgICAgICAgICAgY2hhbGsuZ3JheShgKHdpdGggJHtyZW1vdmVkQXBpcy5sZW5ndGh9IEFQSXMpYCksXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBjb25zb2xlLmxvZyhjaGFsay5ibHVlKGAtICR7cGF0aC5yZWxhdGl2ZShTb25hbXUuYXBpUm9vdFBhdGgsIGludmFsaWRhdGVkUGF0aCl9YCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICBjaGFsay5yZWQoYEZhaWxlZCB0byByZW1vdmUgaW52YWxpZGF0ZWQgcmVnaXN0ZXJlZCBBUElzIGZvciAke2ludmFsaWRhdGVkUGF0aH1gKSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gZGV2UnVubmVyIO2ZnOyEse2ZlCDsi5wsIOuzgOqyveuQnCDshozsiqQg7YyM7J287J2EIFZpdGVzdCDrqqjrk4gg6re4656Y7ZSE7JeQ7ISc64+EIOustO2aqO2ZlO2VqeuLiOuLpC5cbiAgICAvLyBWaXRl7J2YIG1vZHVsZUdyYXBoLmludmFsaWRhdGVNb2R1bGUoKeydtCBpbXBvcnRlciDrsKntlqXsnLzroZwg7J6s6reA7KCBIGNhc2NhZGXtlZjrr4DroZwsXG4gICAgLy8g7IaM7IqkIO2MjOydvCDtlZjrgpjrp4wg66y07Zqo7ZmU7ZWY66m0IOydtOulvCBpbXBvcnTtlZjripQg7YWM7Iqk7Yq4IO2MjOydvOuPhCDsnpDrj5nsnLzroZwg66y07Zqo7ZmU65Cp64uI64ukLlxuICAgIGlmICghaXNUZXN0KCkgJiYgU29uYW11LmNvbmZpZy50ZXN0Py5kZXZSdW5uZXI/LmVuYWJsZWQgJiYgU29uYW11LmRldlZpdGVzdE1hbmFnZXIpIHtcbiAgICAgIFNvbmFtdS5kZXZWaXRlc3RNYW5hZ2VyLmludmFsaWRhdGVGaWxlcyhbZGlmZkZpbGVQYXRoXSk7XG4gICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgY2hhbGsuZGltKGBUZXN0IGludmFsaWRhdGVkOiAke3BhdGgucmVsYXRpdmUoU29uYW11LmFwaVJvb3RQYXRoLCBkaWZmRmlsZVBhdGgpfWApLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBpc0luQ2hlY2tQYXR0ZXJuR3JvdXAgPSBPYmplY3QudmFsdWVzKGdldENoZWNrc3VtUGF0dGVybkdyb3VwSW5BYnNvbHV0ZVBhdGgoKSkuc29tZShcbiAgICAgIChwYXR0ZXJuKSA9PiBtaW5pbWF0Y2goZGlmZkZpbGVQYXRoLCBwYXR0ZXJuKSxcbiAgICApO1xuXG4gICAgLy8g7ZWgIOydvChzeW5jKeydtCDsnojsnLzrqbQg7ZWp64uI64ukLlxuICAgIGlmIChpc0luQ2hlY2tQYXR0ZXJuR3JvdXApIHtcbiAgICAgIGF3YWl0IHRoaXMuZG9TeW5jQWN0aW9ucyhbZGlmZkZpbGVQYXRoXSk7XG4gICAgfVxuXG4gICAgLy8g7Iux7YGsIOyekeyXheydtCDrgZ3rgpjrqbQg66qo65OgIOuqqOuTiOydhCDroZzrk5ztlanri4jri6QuXG4gICAgLy8gaG1yLWhvb2vsl5Ag7J2Y7ZW0IGludmFsaWRhdGXrkJwg67aA67aE65Ok7J20IOyVhOuLiOudvOuptCDsupDsi5wg6re464yA66GcIOycoOyngO2VqeuLiOuLpC5cbiAgICBhd2FpdCB0aGlzLmF1dG9sb2FkVHlwZXMoKTtcbiAgICBhd2FpdCB0aGlzLmF1dG9sb2FkTW9kZWxzKCk7XG4gICAgYXdhaXQgdGhpcy5hdXRvbG9hZEFwaXMoKTtcbiAgICBhd2FpdCB0aGlzLmF1dG9sb2FkV29ya2Zsb3dzKCk7XG5cbiAgICB0aGlzLmV2ZW50RW1pdHRlci5lbWl0KFwib25ITVJDb21wbGV0ZWRcIik7XG4gIH1cblxuICByZW1vdmVJbnZhbGlkYXRlZFJlZ2lzdGVyZWRBcGlzKFxuICAgIGludmFsaWRhdGVkUGF0aDogQWJzb2x1dGVQYXRoLFxuICApOiAodHlwZW9mIHJlZ2lzdGVyZWRBcGlzKVtudW1iZXJdW10ge1xuICAgIGlmICghaW52YWxpZGF0ZWRQYXRoLmVuZHNXaXRoKFwiLm1vZGVsLnRzXCIgLyrshozsiqQg7L2U65Oc66W8IOuLpOujqOuKlCDsg4HtmansnbTri4ggLnRzIOqyveuhnOuhnCDrtIXri4jri6QuKi8pKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgY29uc3QgZW50aXR5SWQgPSBFbnRpdHlNYW5hZ2VyLmdldEVudGl0eUlkRnJvbVBhdGgoaW52YWxpZGF0ZWRQYXRoKTtcbiAgICBjb25zdCB0b1JlbW92ZSA9IHJlZ2lzdGVyZWRBcGlzLmZpbHRlcigoYXBpKSA9PiBhcGkubW9kZWxOYW1lID09PSBgJHtlbnRpdHlJZH1Nb2RlbGApO1xuICAgIGZvciAoY29uc3QgYXBpIG9mIHRvUmVtb3ZlKSB7XG4gICAgICBjb25zdCBpZHggPSByZWdpc3RlcmVkQXBpcy5pbmRleE9mKGFwaSk7XG4gICAgICBpZiAoaWR4ICE9PSAtMSkge1xuICAgICAgICByZWdpc3RlcmVkQXBpcy5zcGxpY2UoaWR4LCAxKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdG9SZW1vdmU7XG4gIH1cblxuICBhc3luYyBjb3B5U2hhcmVkVG9UYXJnZXRzKHRhcmdldHM6IHN0cmluZ1tdKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gcGx1cmFsLnRzIOuCtOyaqeydhCDsnb3slrTshJwgc2hhcmVkIO2MjOydvOyXkCDsgr3snoXtlanri4jri6QuXG4gICAgY29uc3QgZGljdFV0aWxzUGF0aCA9IHBhdGguam9pbihcbiAgICAgIGltcG9ydC5tZXRhLmRpcm5hbWUucmVwbGFjZShcIi9kaXN0L1wiLCBcIi9zcmMvXCIpLFxuICAgICAgXCIuLi9kaWN0L3V0aWxzLnRzXCIsXG4gICAgKTtcbiAgICBjb25zdCBkaWN0VXRpbHNDb2RlID0gKGF3YWl0IGV4aXN0cyhkaWN0VXRpbHNQYXRoKSlcbiAgICAgID8gYXdhaXQgcmVhZEZpbGUoZGljdFV0aWxzUGF0aCwgXCJ1dGYtOFwiKVxuICAgICAgOiBcIlwiO1xuXG4gICAgLy8g7Yq57KCVIOuzgOyImCDsuZjtmZjsnYQg7JyE7ZW07IScIOyCrOyaqe2VqeuLiOuLpC5cbiAgICBjb25zdCBjb252ZXJ0TWFwID0ge1xuICAgICAgYmFzZVVybDpcbiAgICAgICAgU29uYW11LmNvbmZpZy5zZXJ2ZXIuYmFzZVVybCA/P1xuICAgICAgICBgaHR0cDovLyR7U29uYW11LmNvbmZpZy5zZXJ2ZXIubGlzdGVuPy5ob3N0ID8/IFwibG9jYWxob3N0XCJ9OiR7U29uYW11LmNvbmZpZy5zZXJ2ZXIubGlzdGVuPy5wb3J0ID8/IDMwMDB9YCxcbiAgICAgIGRpY3RVdGlsczogZGljdFV0aWxzQ29kZSxcbiAgICB9O1xuXG4gICAgZm9yIChjb25zdCB0YXJnZXQgb2YgdGFyZ2V0cykge1xuICAgICAgLy8g7KeA6riIIOqwgOyguOqwgOugpOuKlCDsnbQg7YyM7J287J2AIFNvbmFtdSDsvZTrk5zrsqDsnbTsiqTsnZgg7J2867aA7J6F64uI64ukLlxuICAgICAgLy8g6re465+w642wIGRpc3Qg7IaNIOu5jOuTnOuQnCDshozsiqQg7L2U65OcIO2MjOydvOydtCDtlYTsmpTtlZwg6rKD7J20IOyVhOuLiOqzoCwgc3Jj7JeQ66eMIOyeiOuKlCDthY3siqTtirgg7YyM7J287J20IO2VhOyalO2VqeuLiOuLpC5cbiAgICAgIC8vIOuUsOudvOyEnCAvc3JjL+yXkOyEnCDssL7sirXri4jri6QuXG4gICAgICBjb25zdCBzcmNQYXRoID0gcGF0aC5qb2luKFxuICAgICAgICBpbXBvcnQubWV0YS5kaXJuYW1lLnJlcGxhY2UoXCIvZGlzdC9cIiwgXCIvc3JjL1wiKSxcbiAgICAgICAgYC4uL3NoYXJlZC8ke3RhcmdldH0uc2hhcmVkLnRzLnR4dGAsXG4gICAgICApO1xuICAgICAgaWYgKCEoYXdhaXQgZXhpc3RzKHNyY1BhdGgpKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmICghKGF3YWl0IGV4aXN0cyhwYXRoLmpvaW4oU29uYW11LmFwcFJvb3RQYXRoLCB0YXJnZXQpKSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBUcmllZCB0byBjb3B5IHNvbmFtdS5zaGFyZWQudHMgdG8gdGFyZ2V0ICcke3RhcmdldH0nIGJ1dCB0aGUgdGFyZ2V0IGRpcmVjdG9yeSBkb2VzIG5vdCBleGlzdC4gUGxlYXNlIGNoZWNrIHlvdXIgcHJvamVjdCBkaXJlY3Rvcnkgc3RydWN0dXJlLmAsXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGZ1bGxUZXh0ID0gYXdhaXQgcmVhZEZpbGUoc3JjUGF0aCwgXCJ1dGYtOFwiKTtcbiAgICAgIGNvbnN0IGNvbnZlcnRlZFRleHQgPSBPYmplY3QuZW50cmllcyhjb252ZXJ0TWFwKS5yZWR1Y2UoXG4gICAgICAgIChhY2MsIFtrZXksIHZhbHVlXSkgPT4gYWNjLnJlcGxhY2UoYCRbWyR7a2V5fV1dYCwgdmFsdWUpLFxuICAgICAgICBmdWxsVGV4dCxcbiAgICAgICk7XG5cbiAgICAgIC8vIOydtOqxtCDtlITroZzsoJ3tirjsl5AgLnRzIOyGjOyKpCDsvZTrk5wg7YyM7J287J2EIOyDneyEse2VmOuKlCDqsoPsnbTrr4DroZwgc3Jj7J2YIC50cyDqsr3roZzroZwg6rCR64uI64ukLlxuICAgICAgY29uc3QgZGVzdFBhdGggPSBwYXRoLmpvaW4oU29uYW11LmFwcFJvb3RQYXRoLCB0YXJnZXQsIFwic3JjL3NlcnZpY2VzL3NvbmFtdS5zaGFyZWQudHNcIik7XG5cbiAgICAgIC8vIOygleunkCDtmLnsi5zrgpjsp4Drp4wgdGFyZ2V0IOuUlOugie2GoOumrOuKlCDsnojslrTrj4Qgc3JjL3NlcnZpY2VzIOuUlOugie2GoOumrOuKlCDsl4bsnYQg7IiYIOyeiOycvOuvgOuhnCDrr7jrpqwg7IOd7ISx7ZW07KSN64uI64ukLlxuICAgICAgaWYgKCEoYXdhaXQgZXhpc3RzKHBhdGguZGlybmFtZShkZXN0UGF0aCkpKSkge1xuICAgICAgICBhd2FpdCBta2RpcihwYXRoLmRpcm5hbWUoZGVzdFBhdGgpLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgICAgY29uc29sZS53YXJuKGBDcmVhdGVkIGRpcmVjdG9yeSAnJHtwYXRoLmRpcm5hbWUoZGVzdFBhdGgpfScgYmVjYXVzZSBpdCBkaWQgbm90IGV4aXN0LmApO1xuICAgICAgfVxuXG4gICAgICAvLyDtjIzsnbzsnbQg7J2066+4IOyhtOyerO2VmOuptCDqsbTrhIjrnIHri4jri6QuXG4gICAgICAvLyBzb25hbXUuc2hhcmVkLnRz64qUIO2UhOuhnOygne2KuOyXkOyEnCDsnpDsnKDroa3qsowg7Luk7Iqk7YSw66eI7J207KeV7ZWgIOyImCDsnojslrTslbwg7ZWY66+A66GcLFxuICAgICAgLy8g7LWc7LSIIDHtmozrp4wg7IOd7ISx7ZWY6rOgIOydtO2bhOyXkOuKlCDrja7slrTsk7Dsp4Ag7JWK7Iq164uI64ukLlxuICAgICAgLy8g7YWc7ZSM66a/IOuCtOyaqSgkW1tkaWN0VXRpbHNdXSDrk7Ep7J20IOuzgOqyveuQmOyXiOydhCDrlYwg67CY7JiB7J20IO2VhOyalO2VmOuptCxcbiAgICAgIC8vIO2VtOuLuSDtjIzsnbzsnYQg7IKt7KCc7ZWcIOuSpCBgcG5wbSBzb25hbXUgc3luY2DroZwg7J6s7IOd7ISx7ZWY66m0IOuQqeuLiOuLpC5cbiAgICAgIGlmIChhd2FpdCBleGlzdHMoZGVzdFBhdGgpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBhd2FpdCB3cml0ZUZpbGUoZGVzdFBhdGgsIGNvbnZlcnRlZFRleHQpO1xuICAgICAgIWlzVGVzdCgpICYmXG4gICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgIGNoYWxrLmJvbGQoXCJDb3BpZWQ6IFwiKSArIGNoYWxrLmJsdWUocGF0aC5yZWxhdGl2ZShTb25hbXUuYXBwUm9vdFBhdGgsIGRlc3RQYXRoKSksXG4gICAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgYXV0b2xvYWRUeXBlcygpIHtcbiAgICB0aGlzLnR5cGVzID0gYXdhaXQgbG9hZFR5cGVzKCk7XG4gIH1cblxuICBhc3luYyBhdXRvbG9hZE1vZGVscygpIHtcbiAgICB0aGlzLm1vZGVscyA9IGF3YWl0IGxvYWRNb2RlbHMoKTtcbiAgfVxuXG4gIGFzeW5jIGF1dG9sb2FkQXBpcygpIHtcbiAgICB0aGlzLmFwaXMgPSBhd2FpdCBsb2FkQXBpcygpO1xuICB9XG5cbiAgYXN5bmMgYXV0b2xvYWRXb3JrZmxvd3MoKSB7XG4gICAgdGhpcy53b3JrZmxvd3MgPSBhd2FpdCBsb2FkV29ya2Zsb3dzKCk7XG4gICAgYXdhaXQgU29uYW11LndvcmtmbG93cz8uc3luY2hyb25pemUodGhpcy53b3JrZmxvd3MpO1xuICB9XG5cbiAgYXN5bmMgYXV0b2xvYWRTU1JSb3V0ZXMoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3Qgc3NyQ29uZmlnUGF0aCA9IHBhdGguam9pbihTb25hbXUuYXBpUm9vdFBhdGgsIFwic3JjL3NzclwiKTtcblxuICAgIC8vIOq4sOyhtCByb3V0ZXMg7LSI6riw7ZmUXG4gICAgY29uc3QgeyBjbGVhclNTUlJvdXRlcyB9ID0gYXdhaXQgaW1wb3J0KFwiLi4vc3NyXCIpO1xuICAgIGNsZWFyU1NSUm91dGVzKCk7XG5cbiAgICAvLyBzc3Ig7Y+0642UIOyXhuycvOuptCDsiqTtgrVcbiAgICBpZiAoIShhd2FpdCBleGlzdHMoc3NyQ29uZmlnUGF0aCkpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gc3NyIO2PtOuNlCDslYjsnZgg66qo65OgIC50cyDtjIzsnbwg66Gc65OcXG4gICAgY29uc3QgeyBnbG9iQXN5bmMgfSA9IGF3YWl0IGltcG9ydChcIi4uL3V0aWxzL2FzeW5jLXV0aWxzXCIpO1xuICAgIGNvbnN0IHsgaW1wb3J0TWVtYmVycyB9ID0gYXdhaXQgaW1wb3J0KFwiLi4vdXRpbHMvZXNtLXV0aWxzXCIpO1xuICAgIGNvbnN0IHsgcnVudGltZVBhdGggfSA9IGF3YWl0IGltcG9ydChcIi4uL3V0aWxzL3BhdGgtdXRpbHNcIik7XG5cbiAgICAvLyBydW50aW1lUGF0aOulvCDsgqzsmqntlZjsl6wg6rCc67CcL+2UhOuhnOuNleyFmCDtmZjqsr3sl5Ag66ee64qUIO2ZleyepeyekCDsspjrpqxcbiAgICBjb25zdCBmaWxlcyA9IGF3YWl0IGdsb2JBc3luYyhwYXRoLmpvaW4oc3NyQ29uZmlnUGF0aCwgcnVudGltZVBhdGgoXCIqKi8qLnRzXCIpKSk7XG5cbiAgICBmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIC8vIGltcG9ydE1lbWJlcnPrpbwg7IKs7Jqp7ZWY66m0IO2MjOydvOydmCBzaWRlIGVmZmVjdChyZWdpc3RlclNTUiDtmLjstpwp6rCAIOyLpO2WieuQqFxuICAgICAgICBhd2FpdCBpbXBvcnRNZW1iZXJzKGZpbGUpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKGBGYWlsZWQgdG8gbG9hZCBTU1Igcm91dGU6ICR7ZmlsZX1gLCBlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICog7Iuk7KCcIOyLse2BrOulvCDsiJjtlontlZjripQg67O47LK07J6F64uI64ukLlxuICAgKiDrs4Dqsr3rkJwg7YyM7J2865Ok7J2EIO2DgOyeheuzhOuhnCDrtoTrpZjtlZjqs6Ag6rCBIO2DgOyeheyXkCDrp57ripQg7JWh7IWY7J2EIOyLpO2Wie2VqeuLiOuLpC5cbiAgICogQHBhcmFtIGRpZmZGaWxlUGF0aHMgLSDrs4Dqsr3rkJwg7YyM7J2865Ok7J2YIOygiOuMgCDqsr3roZwg66qp66GdXG4gICAqIEByZXR1cm5zIGRpZmZUeXBlcyAtIOuzgOqyveuQnCDtjIzsnbzsnZgg7YOA7J6FIOuqqeuhnSAoZW50aXR5LCB0eXBlcywgbW9kZWwg65OxKVxuICAgKi9cbiAgYXN5bmMgZG9TeW5jQWN0aW9ucyhkaWZmRmlsZVBhdGhzOiBBYnNvbHV0ZVBhdGhbXSk6IFByb21pc2U8eyBkaWZmVHlwZXM6IHN0cmluZ1tdIH0+IHtcbiAgICBjb25zdCBkaWZmR3JvdXBzID0gdGhpcy5jYWxjdWxhdGVEaWZmR3JvdXBzKGRpZmZGaWxlUGF0aHMpO1xuICAgIGNvbnN0IGRpZmZUeXBlcyA9IE9iamVjdC5rZXlzKGRpZmZHcm91cHMpIGFzIEZpbGVUeXBlW107XG5cbiAgICAvLyBTaW5nbGUgc291cmNlIG9mIHRydXRo6rCAIOuzgOqyveuQnCDqsr3smrBcbiAgICBpZiAoZGlmZlR5cGVzLmluY2x1ZGVzKFwiZW50aXR5XCIpIHx8IGRpZmZUeXBlcy5pbmNsdWRlcyhcInR5cGVzXCIpKSB7XG4gICAgICBhd2FpdCB0aGlzLmhhbmRsZVRydXRoU291cmNlQ2hhbmdlcyhkaWZmR3JvdXBzLCBkaWZmVHlwZXMpO1xuICAgIH1cblxuICAgIC8vIO2DgOqyn+ycvOuhnCDrs7Xsgqzrp4wg7ZWY66m0IOuQmOuKlCDtjIzsnbzsnbQg67OA6rK965CcIOqyveyasFxuICAgIGlmIChcbiAgICAgIGRpZmZUeXBlcy5pbmNsdWRlcyhcInR5cGVzXCIpIHx8XG4gICAgICBkaWZmVHlwZXMuaW5jbHVkZXMoXCJmdW5jdGlvbnNcIikgfHxcbiAgICAgIGRpZmZUeXBlcy5pbmNsdWRlcyhcImdlbmVyYXRlZFwiKVxuICAgICkge1xuICAgICAgYXdhaXQgdGhpcy5oYW5kbGVTeW5jYWJsZUZpbGVDaGFuZ2VzKGRpZmZHcm91cHMpO1xuICAgIH1cblxuICAgIC8vIOuqqOuNuC/tlITroIjsnoQg6rWs7ZiE7LK06rCAIOuzgOqyveuQnCDqsr3smrBcbiAgICBpZiAoZGlmZlR5cGVzLmluY2x1ZGVzKFwibW9kZWxcIikgfHwgZGlmZlR5cGVzLmluY2x1ZGVzKFwiZnJhbWVcIikpIHtcbiAgICAgIGF3YWl0IHRoaXMuaGFuZGxlSW1wbGVtZW50YXRpb25DaGFuZ2VzKGRpZmZHcm91cHMpO1xuICAgIH1cblxuICAgIC8vIOyEpOyglSDtjIzsnbzsnbQg67OA6rK965CcIOqyveyasFxuICAgIGlmIChkaWZmVHlwZXMuaW5jbHVkZXMoXCJjb25maWdcIikpIHtcbiAgICAgIGF3YWl0IFN5bmNlckFjdGlvbnMuYWN0aW9uU3luY0NvbmZpZygpO1xuICAgIH1cblxuICAgIC8vIOybjO2BrO2UjOuhnOyasCDtjIzsnbzsnbQg67OA6rK965CcIOqyveyasFxuICAgIGlmIChkaWZmVHlwZXMuaW5jbHVkZXMoXCJ3b3JrZmxvd1wiKSkge1xuICAgICAgYXdhaXQgdGhpcy5hdXRvbG9hZFdvcmtmbG93cygpO1xuICAgIH1cblxuICAgIC8vIGkxOG4g6rSA66CoIO2MjOydvOydtCDrs4Dqsr3rkJwg6rK97JqwXG4gICAgLy8gLSBpMThuLyoudHM6IGxvY2FsZSDrsojsl60g7YyM7J28XG4gICAgLy8gLSBlbnRpdHkuanNvbjogZW50aXR5IGxhYmVsc1xuICAgIC8vIC0gc29uYW11LmNvbmZpZy50czogaTE4biDshKTsoJUgKGRlZmF1bHRMb2NhbGUsIHN1cHBvcnRlZExvY2FsZXMpXG4gICAgaWYgKFxuICAgICAgZGlmZlR5cGVzLmluY2x1ZGVzKFwiaTE4blwiKSB8fFxuICAgICAgZGlmZlR5cGVzLmluY2x1ZGVzKFwiZW50aXR5XCIpIHx8XG4gICAgICBkaWZmVHlwZXMuaW5jbHVkZXMoXCJjb25maWdcIilcbiAgICApIHtcbiAgICAgIGF3YWl0IHRoaXMuc3luY1NEKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGRpZmZUeXBlcyxcbiAgICB9O1xuICB9XG5cbiAgY2FsY3VsYXRlRGlmZkdyb3VwcyhkaWZmRmlsZXM6IEFic29sdXRlUGF0aFtdKTogRGlmZkdyb3VwcyB7XG4gICAgY29uc3QgZmlsZVR5cGVzID0gT2JqZWN0LmtleXMoY2hlY2tzdW1QYXR0ZXJuR3JvdXApIGFzIEZpbGVUeXBlW107XG5cbiAgICByZXR1cm4gZ3JvdXAoZGlmZkZpbGVzLCAoZmlsZVBhdGgpID0+IHtcbiAgICAgIC8vIOygiOuMgCDqsr3roZzsl5DshJwgc3JjL+uhnCDsi5zsnpHtlZjripQg7IOB64yAIOqyveuhnCDrtoDrtoTsnYQg7LaU7Lac7ZWp64uI64ukLlxuICAgICAgY29uc3Qgc3JjSW5kZXggPSBmaWxlUGF0aC5pbmRleE9mKFwiL3NyYy9cIik7XG4gICAgICBpZiAoc3JjSW5kZXggPT09IC0xKSByZXR1cm4gXCJ1bmtub3duXCI7XG4gICAgICBjb25zdCByZWxhdGl2ZVBhdGggPSBmaWxlUGF0aC5zbGljZShzcmNJbmRleCArIDEpOyAvLyBcInNyYy8uLi5cIiDtmJXtg5xcblxuICAgICAgZm9yIChjb25zdCBmaWxlVHlwZSBvZiBmaWxlVHlwZXMpIHtcbiAgICAgICAgaWYgKG1pbmltYXRjaChyZWxhdGl2ZVBhdGgsIGNoZWNrc3VtUGF0dGVybkdyb3VwW2ZpbGVUeXBlXSkpIHtcbiAgICAgICAgICByZXR1cm4gZmlsZVR5cGU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBcInVua25vd25cIjtcbiAgICB9KSBhcyB1bmtub3duIGFzIERpZmZHcm91cHM7XG4gIH1cblxuICBhc3luYyBoYW5kbGVUcnV0aFNvdXJjZUNoYW5nZXMoZGlmZkdyb3VwczogRGlmZkdyb3VwcywgZGlmZlR5cGVzOiBzdHJpbmdbXSk6IFByb21pc2U8dm9pZD4ge1xuICAgIE5haXRlLnQoXCJoYW5kbGVUcnV0aFNvdXJjZUNoYW5nZXNcIiwgeyBkaWZmR3JvdXBzLCBkaWZmVHlwZXMgfSk7XG5cbiAgICBhd2FpdCBFbnRpdHlNYW5hZ2VyLnJlbG9hZCgpO1xuXG4gICAgLy8gdHlwZXMg7IOd7ISxKGVudGl0eSDsg4jroZwg7LaU6rCA65CcIOqyveyasClcbiAgICAvLyBwYXJlbnRJZOqwgCDsl4bqs6AsIHR5cGVz6rCAIOyXhuuKlCDqsr3smrDsl5Drp4wg7IOd7ISxXG4gICAgY29uc3QgZW50aXR5UGF0aCA9IGRpZmZHcm91cHMuZW50aXR5Py5hdCgwKTtcbiAgICBpZiAoZW50aXR5UGF0aCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCBlbnRpdHlJZCA9IEVudGl0eU1hbmFnZXIuZ2V0RW50aXR5SWRGcm9tUGF0aChlbnRpdHlQYXRoKTtcbiAgICAgIGNvbnN0IGVudGl0eSA9IEVudGl0eU1hbmFnZXIuZ2V0KGVudGl0eUlkKTtcbiAgICAgIC8vIO2UhOuhnOygne2KuOyXkCDsg53shLHrkJjslrTslbwg7ZWY64qUIC50cyDtjIzsnbzsnZgg6rK966Gc7J6F64uI64ukLlxuICAgICAgY29uc3QgdHlwZUZpbGVQYXRoID0gcGF0aC5qb2luKFxuICAgICAgICBTb25hbXUuYXBpUm9vdFBhdGgsXG4gICAgICAgIGBzcmMvYXBwbGljYXRpb24vJHtlbnRpdHkubmFtZXMuZnN9LyR7ZW50aXR5Lm5hbWVzLmZzfS50eXBlcy50c2AsXG4gICAgICApO1xuICAgICAgaWYgKGVudGl0eS5wYXJlbnRJZCA9PT0gdW5kZWZpbmVkICYmICEoYXdhaXQgZXhpc3RzKHR5cGVGaWxlUGF0aCkpKSB7XG4gICAgICAgIGF3YWl0IGdlbmVyYXRlVGVtcGxhdGUoXCJpbml0X3R5cGVzXCIsIHsgZW50aXR5SWQgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgYXdhaXQgU3luY2VyQWN0aW9ucy5hY3Rpb25HZW5lcmF0ZVNjaGVtYXMoKTtcblxuICAgIGRpZmZHcm91cHMuZ2VuZXJhdGVkID0gdW5pcXVlKFtcbiAgICAgIC4uLihkaWZmR3JvdXBzLmdlbmVyYXRlZCA/PyBbXSksXG4gICAgICBwYXRoLmpvaW4oU29uYW11LmFwaVJvb3RQYXRoLCBcInNyYy9hcHBsaWNhdGlvbi9zb25hbXUuZ2VuZXJhdGVkLnRzXCIpIGFzIEFic29sdXRlUGF0aCxcbiAgICBdKTtcbiAgICBkaWZmVHlwZXMucHVzaChcImdlbmVyYXRlZFwiKTtcbiAgfVxuXG4gIGFzeW5jIGhhbmRsZVN5bmNhYmxlRmlsZUNoYW5nZXMoZGlmZkdyb3VwczogRGlmZkdyb3Vwcyk6IFByb21pc2U8RmlsZVR5cGVbXT4ge1xuICAgIGNvbnN0IHRzUGF0aHMgPSB1bmlxdWUoW1xuICAgICAgLi4uKGRpZmZHcm91cHMudHlwZXMgPz8gW10pLFxuICAgICAgLi4uKGRpZmZHcm91cHMuZnVuY3Rpb25zID8/IFtdKSxcbiAgICAgIC4uLihkaWZmR3JvdXBzLmdlbmVyYXRlZCA/PyBbXSksXG4gICAgXSk7XG4gICAgTmFpdGUudChcImhhbmRsZVN5bmNhYmxlRmlsZUNoYW5nZXNcIiwgeyBkaWZmR3JvdXBzIH0pO1xuXG4gICAgLy8gY29uc29sZS5sb2coXG4gICAgLy8gICBjaGFsay5ncmF5KFxuICAgIC8vICAgICBgW1Byb2Nlc3NpbmddIEhhbmRsaW5nIHR5cGVzL2Z1bmN0aW9ucy9nZW5lcmF0ZWQgY2hhbmdlczogJHt0c1BhdGhzLm1hcCgocCkgPT4gcGF0aC5yZWxhdGl2ZShTb25hbXUuYXBpUm9vdFBhdGgsIHApKS5qb2luKFwiLCBcIil9YFxuICAgIC8vICAgKVxuICAgIC8vICk7XG5cbiAgICBhd2FpdCBTeW5jZXJBY3Rpb25zLmFjdGlvblN5bmNGaWxlc1RvVGFyZ2V0cyh0c1BhdGhzKTtcblxuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIGFzeW5jIGhhbmRsZUltcGxlbWVudGF0aW9uQ2hhbmdlcyhkaWZmR3JvdXBzOiBEaWZmR3JvdXBzKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgTmFpdGUudChcImhhbmRsZUltcGxlbWVudGF0aW9uQ2hhbmdlc1wiLCB7IGRpZmZHcm91cHMgfSk7XG4gICAgY29uc3QgbWVyZ2VkR3JvdXAgPSBbLi4uKGRpZmZHcm91cHMubW9kZWwgPz8gW10pLCAuLi4oZGlmZkdyb3Vwcy5mcmFtZSA/PyBbXSldO1xuXG4gICAgLy8gY29uc29sZS5sb2coXG4gICAgLy8gICBjaGFsay5ncmF5KFxuICAgIC8vICAgICBgW1Byb2Nlc3NpbmddIEhhbmRsaW5nIG1vZGVsL2ZyYW1lIGNoYW5nZXM6ICR7bWVyZ2VkR3JvdXAubWFwKChwKSA9PiBwYXRoLnJlbGF0aXZlKFNvbmFtdS5hcGlSb290UGF0aCwgcCkpLmpvaW4oXCIsIFwiKX1gXG4gICAgLy8gICApXG4gICAgLy8gKTtcblxuICAgIC8vIGdlbmVyYXRlZF9odHRwLnRlbXBsYXRlLnRz7JeQ7IScIHN5bmNlci50eXBlc+ulvCDslIHri4jri6QuXG4gICAgLy8gc2VydmljZS50ZW1wbGF0ZS50c+yXkOyEnCBzeW5jZXIuYXBpc+ulvCDslIHri4jri6QuXG4gICAgYXdhaXQgdGhpcy5hdXRvbG9hZE1vZGVscygpO1xuICAgIGF3YWl0IHRoaXMuYXV0b2xvYWRUeXBlcygpO1xuICAgIGF3YWl0IHRoaXMuYXV0b2xvYWRBcGlzKCk7XG5cbiAgICBjb25zdCBwYXJhbXM6IHtcbiAgICAgIG5hbWVzUmVjb3JkOiBFbnRpdHlOYW1lc1JlY29yZDtcbiAgICB9W10gPSBtZXJnZWRHcm91cC5tYXAoKG1vZGVsUGF0aCkgPT4ge1xuICAgICAgaWYgKG1vZGVsUGF0aC5lbmRzV2l0aChcIi5tb2RlbC50c1wiKSkge1xuICAgICAgICBjb25zdCBlbnRpdHlJZCA9IEVudGl0eU1hbmFnZXIuZ2V0RW50aXR5SWRGcm9tUGF0aChtb2RlbFBhdGgpO1xuICAgICAgICBhc3NlcnQoZW50aXR5SWQpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG5hbWVzUmVjb3JkOiBFbnRpdHlNYW5hZ2VyLmdldE5hbWVzRnJvbUlkKGVudGl0eUlkKSxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGlmIChtb2RlbFBhdGguZW5kc1dpdGgoXCIuZnJhbWUudHNcIikpIHtcbiAgICAgICAgY29uc3QgWywgZnJhbWVOYW1lXSA9IG1vZGVsUGF0aC5tYXRjaCgvLitcXC8oLispXFwuZnJhbWVcXC50cyQvKSA/PyBbXTtcbiAgICAgICAgYXNzZXJ0KGZyYW1lTmFtZSk7XG4gICAgICAgIC8vIGZyYW1lTmFtZeydhCBQYXNjYWxDYXNl66GcIOuzgO2ZmCAoZGFzaGJvYXJkIC0+IERhc2hib2FyZClcbiAgICAgICAgY29uc3QgZnJhbWVJZCA9IGluZmxlY3Rpb24uY2FtZWxpemUoZnJhbWVOYW1lKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBuYW1lc1JlY29yZDogRW50aXR5TWFuYWdlci5nZXROYW1lc0Zyb21JZChmcmFtZUlkKSxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHRocm93IG5ldyBFcnJvcihcIm5vdCByZWFjaGFibGVcIik7XG4gICAgfSk7XG5cbiAgICBhd2FpdCBTeW5jZXJBY3Rpb25zLmFjdGlvbkdlbmVyYXRlU2VydmljZXMocGFyYW1zKTtcbiAgICBhd2FpdCBTeW5jZXJBY3Rpb25zLmFjdGlvbkdlbmVyYXRlSHR0cHMoKTtcbiAgICBhd2FpdCBTeW5jZXJBY3Rpb25zLmFjdGlvbkdlbmVyYXRlU3NyKCk7XG4gIH1cblxuICAvKipcbiAgICog7KO87Ja07KeEIOyXlO2LsO2LsOyZgCDthZztlIzrpr8g7YKk7JeQIOuMgO2VtCwg7IOd7ISx65CcIOy9lOuTnOqwgCDsobTsnqztlZjripTsp4Ag7ZmV7J247ZWp64uI64ukLlxuICAgKiBAcGFyYW0gZW50aXR5SWQg7JeU7Yuw7YuwIElEXG4gICAqIEBwYXJhbSB0ZW1wbGF0ZUtleSDthZztlIzrpr8g7YKkXG4gICAqIEBwYXJhbSBlbnVtSWQg7Je06rGw7ZiVIElEXG4gICAqIEByZXR1cm5zIOyDneyEseuQnCDsvZTrk5zqsIAg7KG07J6s7ZWY64qU7KeAIOyXrOu2gFxuICAgKi9cbiAgYXN5bmMgY2hlY2tFeGlzdHNHZW5Db2RlKFxuICAgIGVudGl0eUlkOiBzdHJpbmcsXG4gICAgdGVtcGxhdGVLZXk6IFRlbXBsYXRlS2V5LFxuICAgIGVudW1JZD86IHN0cmluZyxcbiAgKTogUHJvbWlzZTx7IHN1YlBhdGg6IHN0cmluZzsgZnVsbFBhdGg6IHN0cmluZzsgaXNFeGlzdHM6IGJvb2xlYW4gfT4ge1xuICAgIGNvbnN0IHsgdGFyZ2V0LCBwYXRoOiBnZW5QYXRoIH0gPSBUZW1wbGF0ZU1hbmFnZXIuZ2V0KHRlbXBsYXRlS2V5KS5nZXRUYXJnZXRBbmRQYXRoKFxuICAgICAgRW50aXR5TWFuYWdlci5nZXROYW1lc0Zyb21JZChlbnRpdHlJZCksXG4gICAgICBlbnVtSWQsXG4gICAgKTtcblxuICAgIGNvbnN0IHN1YlBhdGggPSBwYXRoLmpvaW4odGFyZ2V0LCBnZW5QYXRoKTtcbiAgICBjb25zdCBmdWxsUGF0aCA9IHBhdGguam9pbihTb25hbXUuYXBwUm9vdFBhdGgsIHN1YlBhdGgpO1xuICAgIHJldHVybiB7XG4gICAgICBzdWJQYXRoLFxuICAgICAgZnVsbFBhdGgsXG4gICAgICBpc0V4aXN0czogYXdhaXQgZXhpc3RzKGZ1bGxQYXRoKSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIOyjvOyWtOynhCDsl5Tti7Dti7DsmYAg7Je06rGw7ZiV7JeQIOuMgO2VtCwg7IOd7ISx65CcIOy9lOuTnOqwgCDsobTsnqztlZjripTsp4Ag7ZmV7J247ZWp64uI64ukLlxuICAgKiBAcGFyYW0gZW50aXR5SWQg7JeU7Yuw7YuwIElEXG4gICAqIEBwYXJhbSBlbnVtcyDsl7TqsbDtmJUg66CI7J2067iUXG4gICAqIEByZXR1cm5zIOyDneyEseuQnCDsvZTrk5zqsIAg7KG07J6s7ZWY64qU7KeAIOyXrOu2gFxuICAgKi9cbiAgYXN5bmMgY2hlY2tFeGlzdHMoXG4gICAgZW50aXR5SWQ6IHN0cmluZyxcbiAgICBlbnVtczoge1xuICAgICAgW25hbWU6IHN0cmluZ106IHouWm9kRW51bTxSZWFkb25seTxSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBudW1iZXI+Pj47XG4gICAgfSxcbiAgKTogUHJvbWlzZTxSZWNvcmQ8YCR7VGVtcGxhdGVLZXl9JHtzdHJpbmd9YCwgYm9vbGVhbj4+IHtcbiAgICBjb25zdCBrZXlzOiBUZW1wbGF0ZUtleVtdID0gVGVtcGxhdGVLZXkub3B0aW9ucztcbiAgICBjb25zdCBuYW1lcyA9IEVudGl0eU1hbmFnZXIuZ2V0TmFtZXNGcm9tSWQoZW50aXR5SWQpO1xuICAgIGNvbnN0IGVudW1zS2V5cyA9IE9iamVjdC5rZXlzKGVudW1zKS5maWx0ZXIoKG5hbWUpID0+IG5hbWUgIT09IG5hbWVzLmNvbnN0YW50KTtcblxuICAgIHJldHVybiBhd2FpdCByZWR1Y2VBc3luYyhcbiAgICAgIGtleXMsXG4gICAgICBhc3luYyAocmVzdWx0LCBrZXkpID0+IHtcbiAgICAgICAgY29uc3QgdHBsID0gVGVtcGxhdGVNYW5hZ2VyLmdldChrZXkpO1xuICAgICAgICBpZiAoa2V5LnN0YXJ0c1dpdGgoXCJ2aWV3X2VudW1zXCIpKSB7XG4gICAgICAgICAgYXdhaXQgbWFwQXN5bmMoZW51bXNLZXlzLCBhc3luYyAoY29tcG9uZW50SWQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHsgdGFyZ2V0LCBwYXRoOiBwIH0gPSB0cGwuZ2V0VGFyZ2V0QW5kUGF0aChuYW1lcywgY29tcG9uZW50SWQpO1xuICAgICAgICAgICAgcmVzdWx0W2Ake2tleX1fXyR7Y29tcG9uZW50SWR9YF0gPSBhd2FpdCBleGlzdHMoXG4gICAgICAgICAgICAgIHBhdGguam9pbihTb25hbXUuYXBwUm9vdFBhdGgsIHRhcmdldCwgcCksXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB7IHRhcmdldCwgcGF0aDogcCB9ID0gdHBsLmdldFRhcmdldEFuZFBhdGgobmFtZXMpO1xuICAgICAgICBjb25zdCB7IHRhcmdldHMgfSA9IFNvbmFtdS5jb25maWcuc3luYztcbiAgICAgICAgaWYgKHRhcmdldC5pbmNsdWRlcyhcIjp0YXJnZXRcIikpIHtcbiAgICAgICAgICBhd2FpdCBtYXBBc3luYyh0YXJnZXRzLCBhc3luYyAodCkgPT4ge1xuICAgICAgICAgICAgcmVzdWx0W2Ake2tleX1fXyR7dH1gXSA9IGF3YWl0IGV4aXN0cyhcbiAgICAgICAgICAgICAgcGF0aC5qb2luKFNvbmFtdS5hcHBSb290UGF0aCwgdGFyZ2V0LnJlcGxhY2UoXCI6dGFyZ2V0XCIsIHQpLCBwKSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVzdWx0W2tleV0gPSBhd2FpdCBleGlzdHMocGF0aC5qb2luKFNvbmFtdS5hcHBSb290UGF0aCwgdGFyZ2V0LCBwKSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfSxcbiAgICAgIHt9IGFzIFJlY29yZDxgJHtUZW1wbGF0ZUtleX0ke3N0cmluZ31gLCBib29sZWFuPixcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIO2VmOychO2YuO2ZmOyaqSDtlITroZ3si5wg66mU7IaM65Oc7J6F64uI64ukLlxuICAgKi9cbiAgYXN5bmMgY3JlYXRlRW50aXR5KGZvcm06IFRlbXBsYXRlT3B0aW9uc1tcImVudGl0eVwiXSkge1xuICAgIHJldHVybiBhd2FpdCBjcmVhdGVFbnRpdHkoZm9ybSk7XG4gIH1cblxuICAvKipcbiAgICog7ZWY7JyE7Zi47ZmY7JqpIO2UhOuhneyLnCDrqZTshozrk5zsnoXri4jri6QuXG4gICAqL1xuICBhc3luYyBkZWxFbnRpdHkoZW50aXR5SWQ6IHN0cmluZyk6IFByb21pc2U8eyBkZWxQYXRoczogc3RyaW5nW10gfT4ge1xuICAgIHJldHVybiBhd2FpdCBkZWxFbnRpdHkoZW50aXR5SWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIO2VmOychO2YuO2ZmOyaqSDtlITroZ3si5wg66mU7IaM65Oc7J6F64uI64ukLlxuICAgKi9cbiAgYXN5bmMgZ2VuZXJhdGVUZW1wbGF0ZTxUIGV4dGVuZHMgVGVtcGxhdGVLZXk+KFxuICAgIGtleTogVCxcbiAgICB0ZW1wbGF0ZU9wdGlvbnM6IFRlbXBsYXRlT3B0aW9uc1tUXSxcbiAgICBfZ2VuZXJhdGVPcHRpb25zPzogR2VuZXJhdGVPcHRpb25zLFxuICApOiBQcm9taXNlPEFic29sdXRlUGF0aFtdPiB7XG4gICAgcmV0dXJuIGF3YWl0IGdlbmVyYXRlVGVtcGxhdGUoa2V5LCB0ZW1wbGF0ZU9wdGlvbnMsIF9nZW5lcmF0ZU9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIO2VmOychO2YuO2ZmOyaqSDtlITroZ3si5wg66mU7IaM65Oc7J6F64uI64ukLlxuICAgKi9cbiAgYXN5bmMgcmVuZGVyVGVtcGxhdGU8VCBleHRlbmRzIGtleW9mIFRlbXBsYXRlT3B0aW9ucz4oXG4gICAga2V5OiBULFxuICAgIHRlbXBsYXRlT3B0aW9uczogVGVtcGxhdGVPcHRpb25zW1RdLFxuICApOiBQcm9taXNlPFBhdGhBbmRDb2RlW10+IHtcbiAgICByZXR1cm4gYXdhaXQgcmVuZGVyVGVtcGxhdGUoa2V5LCB0ZW1wbGF0ZU9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIO2VmOychO2YuO2ZmOyaqSDtlITroZ3si5wg66mU7IaM65Oc7J6F64uI64ukLlxuICAgKi9cbiAgYXN5bmMgcmVuZXdDaGVja3N1bXMoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIGF3YWl0IHJlbmV3Q2hlY2tzdW1zKCk7XG4gIH1cblxuICAvKipcbiAgICogU0QoU29uYW11IERpY3Rpb25hcnkpIO2FnO2UjOumv+ydhCDsg53shLHtlanri4jri6QuXG4gICAqL1xuICBhc3luYyBzeW5jU0QoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgeyB0YXJnZXRzIH0gPSBTb25hbXUuY29uZmlnLnN5bmM7XG4gICAgY29uc3QgaTE4bkNvbmZpZyA9IFNvbmFtdS5jb25maWcuaTE4bjtcblxuICAgIGNvbnN0IHRhcmdldExpc3QgPSBbXCJhcGlcIiwgLi4udGFyZ2V0c10gYXMgKFwiYXBpXCIgfCBcIndlYlwiIHwgXCJhcHBcIilbXTtcblxuICAgIGNvbnN0IGFwaUkxOG5EaXIgPSBwYXRoLmpvaW4oU29uYW11LmFwcFJvb3RQYXRoLCBTb25hbXUuY29uZmlnLmFwaS5kaXIsIFwic3JjL2kxOG5cIik7XG5cbiAgICBmb3IgKGNvbnN0IHRhcmdldCBvZiB0YXJnZXRMaXN0KSB7XG4gICAgICB0cnkge1xuICAgICAgICAvLyB3ZWIvYXBw7J2YIOqyveyasCBsb2NhbGUg7YyM7J2865Ok7J2EIGFwaeyXkOyEnCDrs7XsgqxcbiAgICAgICAgaWYgKHRhcmdldCAhPT0gXCJhcGlcIikge1xuICAgICAgICAgIGF3YWl0IHRoaXMuc3luY0xvY2FsZUZpbGVzKHRhcmdldCwgYXBpSTE4bkRpciwgaTE4bkNvbmZpZy5zdXBwb3J0ZWRMb2NhbGVzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGF3YWl0IGdlbmVyYXRlVGVtcGxhdGUoXCJzZFwiLCB7IHRhcmdldCB9LCB7IG92ZXJ3cml0ZTogdHJ1ZSB9KTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihgRmFpbGVkIHRvIGdlbmVyYXRlIFNEIHRlbXBsYXRlIGZvciAke3RhcmdldH06YCwgZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIGFwaeydmCBsb2NhbGUg7YyM7J287J2EIHdlYi9hcHDsnLzroZwg67O17IKs7ZWp64uI64ukLlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBzeW5jTG9jYWxlRmlsZXMoXG4gICAgdGFyZ2V0OiBzdHJpbmcsXG4gICAgYXBpSTE4bkRpcjogc3RyaW5nLFxuICAgIGxvY2FsZXM6IHN0cmluZ1tdLFxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB0YXJnZXRJMThuRGlyID0gcGF0aC5qb2luKFNvbmFtdS5hcHBSb290UGF0aCwgdGFyZ2V0LCBcInNyYy9pMThuXCIpO1xuXG4gICAgLy8g65SU66CJ7Yag66as6rCAIOyXhuycvOuptCDsg53shLFcbiAgICBhd2FpdCBta2Rpcih0YXJnZXRJMThuRGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcblxuICAgIGZvciAoY29uc3QgbG9jYWxlIG9mIGxvY2FsZXMpIHtcbiAgICAgIGNvbnN0IHNvdXJjZUZpbGUgPSBwYXRoLmpvaW4oYXBpSTE4bkRpciwgYCR7bG9jYWxlfS50c2ApO1xuICAgICAgY29uc3QgdGFyZ2V0RmlsZSA9IHBhdGguam9pbih0YXJnZXRJMThuRGlyLCBgJHtsb2NhbGV9LnRzYCk7XG5cbiAgICAgIGNvbnN0IHN5bmNIZWFkZXIgPSBbXG4gICAgICAgIFwiLyoqXCIsXG4gICAgICAgIFwiICogQGdlbmVyYXRlZFwiLFxuICAgICAgICBcIiAqIEFQSeyXkOyEnCDrj5nquLDtmZTrkJwg7YyM7J287J6F64uI64ukLiDsp4HsoJEg7IiY7KCV7ZWY7KeAIOuniOyEuOyalC5cIixcbiAgICAgICAgXCIgKi9cIixcbiAgICAgIF0uam9pbihcIlxcblwiKTtcbiAgICAgIGF3YWl0IGNvcHlGaWxlV2l0aFJlcGxhY2VDb3JlVG9TaGFyZWQoc291cmNlRmlsZSwgdGFyZ2V0RmlsZSwgc3luY0hlYWRlcik7XG4gICAgICAhaXNUZXN0KCkgJiZcbiAgICAgICAgY29uc29sZS5sb2coY2hhbGsuYm9sZChcIkNvcGllZDogXCIpICsgY2hhbGsuY3lhbihgJHt0YXJnZXR9L3NyYy9pMThuLyR7bG9jYWxlfS50c2ApKTtcbiAgICB9XG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJob3QiLCJhc3NlcnQiLCJjaGFsayIsIkV2ZW50RW1pdHRlciIsIm1rZGlyIiwicmVhZEZpbGUiLCJ3cml0ZUZpbGUiLCJpbmZsZWN0aW9uIiwibWluaW1hdGNoIiwicGF0aCIsImdyb3VwIiwidW5pcXVlIiwicmVnaXN0ZXJlZEFwaXMiLCJTb25hbXUiLCJFbnRpdHlNYW5hZ2VyIiwiQWxyZWFkeVByb2Nlc3NlZEV4Y2VwdGlvbiIsIk5haXRlIiwiVGVtcGxhdGVNYW5hZ2VyIiwiVGVtcGxhdGVLZXkiLCJtYXBBc3luYyIsInJlZHVjZUFzeW5jIiwiY2VudGVyVGV4dCIsImlzVGVzdCIsImNvcHlGaWxlV2l0aFJlcGxhY2VDb3JlVG9TaGFyZWQiLCJleGlzdHMiLCJydW5XaXRoR3JhY2VmdWxTaHV0ZG93biIsImZpbmRDaGFuZ2VkRmlsZXNVc2luZ0NoZWNrc3VtcyIsInJlbmV3Q2hlY2tzdW1zIiwiZ2VuZXJhdGVUZW1wbGF0ZSIsInJlbmRlclRlbXBsYXRlIiwiY3JlYXRlRW50aXR5IiwiZGVsRW50aXR5IiwiY2hlY2tzdW1QYXR0ZXJuR3JvdXAiLCJnZXRDaGVja3N1bVBhdHRlcm5Hcm91cEluQWJzb2x1dGVQYXRoIiwibG9hZEFwaXMiLCJsb2FkTW9kZWxzIiwibG9hZFR5cGVzIiwibG9hZFdvcmtmbG93cyIsIlN5bmNlckFjdGlvbnMiLCJTeW5jZXIiLCJhcGlzIiwidHlwZXMiLCJtb2RlbHMiLCJ3b3JrZmxvd3MiLCJNYXAiLCJldmVudEVtaXR0ZXIiLCJzeW5jIiwidGFyZ2V0cyIsImNvbmZpZyIsImNvcHlTaGFyZWRUb1RhcmdldHMiLCJjaGFuZ2VkRmlsZXMiLCJsZW5ndGgiLCJjb25zb2xlIiwibG9nIiwiYmxhY2siLCJiZ0dyZWVuIiwib3ZlcndyaXRlIiwiZSIsImVycm9yIiwiZG9TeW5jQWN0aW9ucyIsIndoZW5UaGlzSGFwcGVucyIsIndhaXRGb3JVcFRvIiwic3luY0Zyb21XYXRjaGVyIiwiZXZlbnQiLCJkaWZmRmlsZVBhdGgiLCJpbmNsdWRlcyIsImJvbGQiLCJ5ZWxsb3ciLCJpbnZhbGlkYXRlRmlsZSIsImF1dG9sb2FkU1NSUm91dGVzIiwiZW1pdCIsImludmFsaWRhdGVkUGF0aHMiLCJpbnZhbGlkYXRlZFBhdGgiLCJyZW1vdmVkQXBpcyIsInJlbW92ZUludmFsaWRhdGVkUmVnaXN0ZXJlZEFwaXMiLCJibHVlIiwicmVsYXRpdmUiLCJhcGlSb290UGF0aCIsImdyYXkiLCJyZWQiLCJ0ZXN0IiwiZGV2UnVubmVyIiwiZW5hYmxlZCIsImRldlZpdGVzdE1hbmFnZXIiLCJpbnZhbGlkYXRlRmlsZXMiLCJkaW0iLCJpc0luQ2hlY2tQYXR0ZXJuR3JvdXAiLCJPYmplY3QiLCJ2YWx1ZXMiLCJzb21lIiwicGF0dGVybiIsImF1dG9sb2FkVHlwZXMiLCJhdXRvbG9hZE1vZGVscyIsImF1dG9sb2FkQXBpcyIsImF1dG9sb2FkV29ya2Zsb3dzIiwiZW5kc1dpdGgiLCJlbnRpdHlJZCIsImdldEVudGl0eUlkRnJvbVBhdGgiLCJ0b1JlbW92ZSIsImZpbHRlciIsImFwaSIsIm1vZGVsTmFtZSIsImlkeCIsImluZGV4T2YiLCJzcGxpY2UiLCJkaWN0VXRpbHNQYXRoIiwiam9pbiIsImRpcm5hbWUiLCJyZXBsYWNlIiwiZGljdFV0aWxzQ29kZSIsImNvbnZlcnRNYXAiLCJiYXNlVXJsIiwic2VydmVyIiwibGlzdGVuIiwiaG9zdCIsInBvcnQiLCJkaWN0VXRpbHMiLCJ0YXJnZXQiLCJzcmNQYXRoIiwiYXBwUm9vdFBhdGgiLCJFcnJvciIsImZ1bGxUZXh0IiwiY29udmVydGVkVGV4dCIsImVudHJpZXMiLCJyZWR1Y2UiLCJhY2MiLCJrZXkiLCJ2YWx1ZSIsImRlc3RQYXRoIiwicmVjdXJzaXZlIiwid2FybiIsInN5bmNocm9uaXplIiwic3NyQ29uZmlnUGF0aCIsImNsZWFyU1NSUm91dGVzIiwiZ2xvYkFzeW5jIiwiaW1wb3J0TWVtYmVycyIsInJ1bnRpbWVQYXRoIiwiZmlsZXMiLCJmaWxlIiwiZGlmZkZpbGVQYXRocyIsImRpZmZHcm91cHMiLCJjYWxjdWxhdGVEaWZmR3JvdXBzIiwiZGlmZlR5cGVzIiwia2V5cyIsImhhbmRsZVRydXRoU291cmNlQ2hhbmdlcyIsImhhbmRsZVN5bmNhYmxlRmlsZUNoYW5nZXMiLCJoYW5kbGVJbXBsZW1lbnRhdGlvbkNoYW5nZXMiLCJhY3Rpb25TeW5jQ29uZmlnIiwic3luY1NEIiwiZGlmZkZpbGVzIiwiZmlsZVR5cGVzIiwiZmlsZVBhdGgiLCJzcmNJbmRleCIsInJlbGF0aXZlUGF0aCIsInNsaWNlIiwiZmlsZVR5cGUiLCJ0IiwicmVsb2FkIiwiZW50aXR5UGF0aCIsImVudGl0eSIsImF0IiwidW5kZWZpbmVkIiwiZ2V0IiwidHlwZUZpbGVQYXRoIiwibmFtZXMiLCJmcyIsInBhcmVudElkIiwiYWN0aW9uR2VuZXJhdGVTY2hlbWFzIiwiZ2VuZXJhdGVkIiwicHVzaCIsInRzUGF0aHMiLCJmdW5jdGlvbnMiLCJhY3Rpb25TeW5jRmlsZXNUb1RhcmdldHMiLCJtZXJnZWRHcm91cCIsIm1vZGVsIiwiZnJhbWUiLCJwYXJhbXMiLCJtYXAiLCJtb2RlbFBhdGgiLCJuYW1lc1JlY29yZCIsImdldE5hbWVzRnJvbUlkIiwiZnJhbWVOYW1lIiwibWF0Y2giLCJmcmFtZUlkIiwiY2FtZWxpemUiLCJhY3Rpb25HZW5lcmF0ZVNlcnZpY2VzIiwiYWN0aW9uR2VuZXJhdGVIdHRwcyIsImFjdGlvbkdlbmVyYXRlU3NyIiwiY2hlY2tFeGlzdHNHZW5Db2RlIiwidGVtcGxhdGVLZXkiLCJlbnVtSWQiLCJnZW5QYXRoIiwiZ2V0VGFyZ2V0QW5kUGF0aCIsInN1YlBhdGgiLCJmdWxsUGF0aCIsImlzRXhpc3RzIiwiY2hlY2tFeGlzdHMiLCJlbnVtcyIsIm9wdGlvbnMiLCJlbnVtc0tleXMiLCJuYW1lIiwiY29uc3RhbnQiLCJyZXN1bHQiLCJ0cGwiLCJzdGFydHNXaXRoIiwiY29tcG9uZW50SWQiLCJwIiwiZm9ybSIsInRlbXBsYXRlT3B0aW9ucyIsIl9nZW5lcmF0ZU9wdGlvbnMiLCJpMThuQ29uZmlnIiwiaTE4biIsInRhcmdldExpc3QiLCJhcGlJMThuRGlyIiwiZGlyIiwic3luY0xvY2FsZUZpbGVzIiwic3VwcG9ydGVkTG9jYWxlcyIsImxvY2FsZXMiLCJ0YXJnZXRJMThuRGlyIiwibG9jYWxlIiwic291cmNlRmlsZSIsInRhcmdldEZpbGUiLCJzeW5jSGVhZGVyIiwiY3lhbiJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBU0EsR0FBRyxRQUFRLHVCQUF1QjtBQUMzQyxPQUFPQyxZQUFZLFNBQVM7QUFDNUIsT0FBT0MsV0FBVyxRQUFRO0FBQzFCLFNBQVNDLFlBQVksUUFBUSxTQUFTO0FBQ3RDLFNBQVNDLEtBQUssRUFBRUMsUUFBUSxFQUFFQyxTQUFTLFFBQVEsbUJBQWM7QUFDekQsT0FBT0MsZ0JB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
497
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zeW5jZXIvc3luY2VyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGhvdCB9IGZyb20gXCJAc29uYW11LWtpdC9obXItaG9va1wiO1xuaW1wb3J0IGFzc2VydCBmcm9tIFwiYXNzZXJ0XCI7XG5pbXBvcnQgY2hhbGsgZnJvbSBcImNoYWxrXCI7XG5pbXBvcnQgeyBFdmVudEVtaXR0ZXIgfSBmcm9tIFwiZXZlbnRzXCI7XG5pbXBvcnQgeyBta2RpciwgcmVhZEZpbGUsIHdyaXRlRmlsZSB9IGZyb20gXCJmcy9wcm9taXNlc1wiO1xuaW1wb3J0IGluZmxlY3Rpb24gZnJvbSBcImluZmxlY3Rpb25cIjtcbmltcG9ydCB7IG1pbmltYXRjaCB9IGZyb20gXCJtaW5pbWF0Y2hcIjtcbmltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgeyBncm91cCwgdW5pcXVlIH0gZnJvbSBcInJhZGFzaGlcIjtcbmltcG9ydCB0eXBlIHsgeiB9IGZyb20gXCJ6b2RcIjtcbmltcG9ydCB0eXBlIHsgV29ya2Zsb3dNZXRhZGF0YSB9IGZyb20gXCIuLlwiO1xuaW1wb3J0IHsgcmVnaXN0ZXJlZEFwaXMgfSBmcm9tIFwiLi4vYXBpL2RlY29yYXRvcnNcIjtcbmltcG9ydCB7IFNvbmFtdSB9IGZyb20gXCIuLi9hcGkvc29uYW11XCI7XG5pbXBvcnQgeyBFbnRpdHlNYW5hZ2VyLCB0eXBlIEVudGl0eU5hbWVzUmVjb3JkIH0gZnJvbSBcIi4uL2VudGl0eS9lbnRpdHktbWFuYWdlclwiO1xuaW1wb3J0IHsgQWxyZWFkeVByb2Nlc3NlZEV4Y2VwdGlvbiB9IGZyb20gXCIuLi9leGNlcHRpb25zL3NvLWV4Y2VwdGlvbnNcIjtcbmltcG9ydCB7IE5haXRlIH0gZnJvbSBcIi4uL25haXRlL25haXRlXCI7XG5pbXBvcnQgeyBUZW1wbGF0ZU1hbmFnZXIgfSBmcm9tIFwiLi4vdGVtcGxhdGUvdGVtcGxhdGUtbWFuYWdlclwiO1xuaW1wb3J0IHR5cGUgeyBHZW5lcmF0ZU9wdGlvbnMsIFBhdGhBbmRDb2RlIH0gZnJvbSBcIi4uL3R5cGVzL3R5cGVzXCI7XG5pbXBvcnQgeyBUZW1wbGF0ZUtleSwgdHlwZSBUZW1wbGF0ZU9wdGlvbnMgfSBmcm9tIFwiLi4vdHlwZXMvdHlwZXNcIjtcbmltcG9ydCB7IG1hcEFzeW5jLCByZWR1Y2VBc3luYyB9IGZyb20gXCIuLi91dGlscy9hc3luYy11dGlsc1wiO1xuaW1wb3J0IHsgY2VudGVyVGV4dCB9IGZyb20gXCIuLi91dGlscy9jb25zb2xlLXV0aWxcIjtcbmltcG9ydCB7IGlzVGVzdCB9IGZyb20gXCIuLi91dGlscy9jb250cm9sbGVyXCI7XG5pbXBvcnQgeyBjb3B5RmlsZVdpdGhSZXBsYWNlQ29yZVRvU2hhcmVkLCBleGlzdHMgfSBmcm9tIFwiLi4vdXRpbHMvZnMtdXRpbHNcIjtcbmltcG9ydCB0eXBlIHsgQWJzb2x1dGVQYXRoIH0gZnJvbSBcIi4uL3V0aWxzL3BhdGgtdXRpbHNcIjtcbmltcG9ydCB7IHJ1bldpdGhHcmFjZWZ1bFNodXRkb3duIH0gZnJvbSBcIi4uL3V0aWxzL3Byb2Nlc3MtdXRpbHNcIjtcbmltcG9ydCB7IGZpbmRDaGFuZ2VkRmlsZXNVc2luZ0NoZWNrc3VtcywgcmVuZXdDaGVja3N1bXMgfSBmcm9tIFwiLi9jaGVja3N1bVwiO1xuaW1wb3J0IHsgZ2VuZXJhdGVUZW1wbGF0ZSwgcmVuZGVyVGVtcGxhdGUgfSBmcm9tIFwiLi9jb2RlLWdlbmVyYXRvclwiO1xuaW1wb3J0IHsgY3JlYXRlRW50aXR5LCBkZWxFbnRpdHkgfSBmcm9tIFwiLi9lbnRpdHktb3BlcmF0aW9uc1wiO1xuaW1wb3J0IHtcbiAgY2hlY2tzdW1QYXR0ZXJuR3JvdXAsXG4gIHR5cGUgRmlsZVR5cGUsXG4gIGdldENoZWNrc3VtUGF0dGVybkdyb3VwSW5BYnNvbHV0ZVBhdGgsXG59IGZyb20gXCIuL2ZpbGUtcGF0dGVybnNcIjtcbmltcG9ydCB7XG4gIHR5cGUgTG9hZGVkQXBpcyxcbiAgdHlwZSBMb2FkZWRNb2RlbHMsXG4gIHR5cGUgTG9hZGVkVHlwZXMsXG4gIGxvYWRBcGlzLFxuICBsb2FkTW9kZWxzLFxuICBsb2FkVHlwZXMsXG4gIGxvYWRXb3JrZmxvd3MsXG59IGZyb20gXCIuL21vZHVsZS1sb2FkZXJcIjtcbmltcG9ydCAqIGFzIFN5bmNlckFjdGlvbnMgZnJvbSBcIi4vc3luY2VyLWFjdGlvbnNcIjtcblxudHlwZSBEaWZmR3JvdXBzID0ge1xuICBba2V5IGluIEZpbGVUeXBlXTogQWJzb2x1dGVQYXRoW107XG59O1xuXG5leHBvcnQgY2xhc3MgU3luY2VyIHtcbiAgYXBpczogTG9hZGVkQXBpcyA9IFtdO1xuICB0eXBlczogTG9hZGVkVHlwZXMgPSB7fTtcbiAgbW9kZWxzOiBMb2FkZWRNb2RlbHMgPSB7fTtcbiAgd29ya2Zsb3dzOiBNYXA8c3RyaW5nLCBXb3JrZmxvd01ldGFkYXRhW10+ID0gbmV3IE1hcCgpO1xuICBldmVudEVtaXR0ZXI6IEV2ZW50RW1pdHRlciA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAvKipcbiAgICog7LK07YGs7ISs7J20IOuzgOqyveuQnCDrtoDrtoTsl5Ag64yA7ZW0IOyLse2BrOulvCDsp4Ttlontlanri4jri6QuXG4gICAqIHNvbmFtdS5zaGFyZWQudHPripQg7YyM7J287J20IOyXhuydhCDrlYzrp4wgMe2ajCDsg53shLHtlZjqs6AsIOydtO2bhOyXkOuKlCDrja7slrTsk7Dsp4Ag7JWK7Iq164uI64ukLlxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgYXN5bmMgc3luYygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB7IHRhcmdldHMgfSA9IFNvbmFtdS5jb25maWcuc3luYztcblxuICAgIC8vIHNvbmFtdS5zaGFyZWQudHPripQg7YyM7J287J20IOyXhuydhCDrlYzrp4wgMe2ajCDsg53shLHtlanri4jri6QuXG4gICAgYXdhaXQgdGhpcy5jb3B5U2hhcmVkVG9UYXJnZXRzKHRhcmdldHMpO1xuXG4gICAgLy8g6re4IOuLpOydjOu2gO2EsOuKlCDrs4Dqsr3rkJwg7YyM7J287J2EIOywvuyVhOyEnCDrj5nquLDtmZQg7J6R7JeF7J2EIOyLpO2Wie2VqeuLiOuLpC5cbiAgICBjb25zdCBjaGFuZ2VkRmlsZXMgPSBhd2FpdCBmaW5kQ2hhbmdlZEZpbGVzVXNpbmdDaGVja3N1bXMoKTtcbiAgICBpZiAoY2hhbmdlZEZpbGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgY29uc29sZS5sb2coY2hhbGsuYmxhY2suYmdHcmVlbihjZW50ZXJUZXh0KFwiQWxsIGZpbGVzIGFyZSBzeW5jZWQhXCIpKSk7XG5cbiAgICAgIC8vIOuzgOqyveyCrO2VreydtCDsl4bslrTrj4QgU1NSIO2FnO2UjOumv+ydgCDsg53shLEgKOy0iOq4sCDshKTsoJUg7IucLCDsnbTrr7gg7KG07J6s7ZWY66m0IOyKpO2CtSlcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IGdlbmVyYXRlVGVtcGxhdGUoXCJxdWVyaWVzXCIsIHt9LCB7IG92ZXJ3cml0ZTogZmFsc2UgfSk7XG4gICAgICAgIGF3YWl0IGdlbmVyYXRlVGVtcGxhdGUoXCJlbnRyeV9zZXJ2ZXJcIiwge30sIHsgb3ZlcndyaXRlOiBmYWxzZSB9KTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgLy8g7YyM7J287J20IOydtOuvuCDsobTsnqztlZjrqbQg66y07IucXG4gICAgICAgIGlmICghKGUgaW5zdGFuY2VvZiBBbHJlYWR5UHJvY2Vzc2VkRXhjZXB0aW9uKSkge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJGYWlsZWQgdG8gZ2VuZXJhdGUgU1NSIHRlbXBsYXRlczpcIiwgZSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIOunjOyVvSDsi7Htgawg7KSR7JeQIO2UhOuhnOyEuOyKpOqwgCDso73snLzrqbQg6rys7Jes67KE66as6riwIOuVjOusuOyXkCxcbiAgICAvLyDsi5zqt7jrhJDsl5Drj4Qg7J6g7IucIOuyhO2LuCDsiJgg7J6I64qUIO2ZmOqyvSDsho3sl5DshJwg7Iux7YGs66W8IOyLpO2Wie2VqeuLiOuLpC5cbiAgICBhd2FpdCBydW5XaXRoR3JhY2VmdWxTaHV0ZG93bihcbiAgICAgIGFzeW5jICgpID0+IHtcbiAgICAgICAgLy8g7JaY6rCAIOyLse2BrCDsnpHsl4Ug7IiY7ZaJ7ZWY64qUIOuzuOyytOyeheuLiOuLpC5cbiAgICAgICAgYXdhaXQgdGhpcy5kb1N5bmNBY3Rpb25zKGNoYW5nZWRGaWxlcyk7XG5cbiAgICAgICAgLy8g7Iux7YGsIOyVoeyFmOydtCDrgZ3rgpjrqbQg7ZWt7IOBIOyytO2BrOyErOydhCDri6Tsi5wg6rCx7Iug7ZWp64uI64ukLlxuICAgICAgICBhd2FpdCByZW5ld0NoZWNrc3VtcygpO1xuICAgICAgfSxcbiAgICAgIHsgd2hlblRoaXNIYXBwZW5zOiBcIlNJR1VTUjJcIiwgd2FpdEZvclVwVG86IDIwMDAwIH0sXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXYXRjaGVy6rCAIOqwkOyngO2VnCDtjIzsnbwg67OA6rK9IOyCrO2VreyXkCDrjIDtlbQg7Iux7YGs66W8IOynhO2Wie2VqeuLiOuLpC5cbiAgICog7KO87Ja07KeEIOuzgOqyvSDtjIzsnbzrk6Qg7KSRIOyytO2BrOyErCDqtIDrpqwg64yA7IOB7J24IOqyg+uTpOunjCDqsIDsoLjri6TqsIAg7Iux7YGs66W8IOynhO2Wie2VqeuLiOuLpC5cbiAgICog7LK07YGs7ISsIO2MjOydvCDsl4XrjbDsnbTtirjripQg7Jes6riw7JeQ7IScIO2VmOyngCDslYrsirXri4jri6QuIO2YuOy2nOyekOqwgCDtlanri4jri6QuXG4gICAqIEBwYXJhbSBkaWZmRmlsZVBhdGggLSDrs4Dqsr0g7YyM7J2865OkLiDtlITroZzsoJ3tirgg66Oo7Yq467aA7YSwIFwic3JjL1wiIOuYkOuKlCBcImRpc3QvXCLroZwg7Iuc7J6R7ZWY64qUIOyDgeuMgCDqsr3roZzsnoXri4jri6QuIOyYiOyLnDogXCJzcmMvYXBwbGljYXRpb24vdXNlci91c2VyLm1vZGVsLnRzXCJcbiAgICovXG4gIGFzeW5jIHN5bmNGcm9tV2F0Y2hlcihldmVudDogc3RyaW5nLCBkaWZmRmlsZVBhdGg6IEFic29sdXRlUGF0aCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmIChldmVudCAhPT0gXCJjaGFuZ2VcIiAmJiBldmVudCAhPT0gXCJhZGRcIiAmJiBldmVudCAhPT0gXCJ1bmxpbmtcIikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFNTUiDshKTsoJUg7YyM7J28IOuzgOqyvSDqsJDsp4BcbiAgICBpZiAoZGlmZkZpbGVQYXRoLmluY2x1ZGVzKFwiL3NyYy9zc3IvXCIpKSB7XG4gICAgICBjb25zb2xlLmxvZyhjaGFsay5ib2xkLnllbGxvdyhcIlNTUiBjb25maWcgY2hhbmdlZCAtIHJlbG9hZGluZy4uLlwiKSk7XG4gICAgICAvLyBTU1Ig7YyM7J2864+EIGludmFsaWRhdGUg7ZuEIHJlbG9hZFxuICAgICAgaWYgKCFpc1Rlc3QoKSkge1xuICAgICAgICBhd2FpdCBob3QuaW52YWxpZGF0ZUZpbGUoZGlmZkZpbGVQYXRoLCBldmVudCk7XG4gICAgICB9XG4gICAgICBhd2FpdCB0aGlzLmF1dG9sb2FkU1NSUm91dGVzKCk7XG4gICAgICB0aGlzLmV2ZW50RW1pdHRlci5lbWl0KFwib25ITVJDb21wbGV0ZWRcIik7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8g7J2864uoIOuzgOqyveuQnCDtjIzsnbzqs7wgZGVwZW5kZW50IO2MjOydvOuTpOydhCBpbnZhbGlkYXRlIO2VqeuLiOuLpC5cbiAgICAvLyDtlZwg67KIIOydtOyDgSBpbXBvcnTrkJwg7Lmc6rWs65Ok7JeQIOuMgO2VtOyEnOunjCDsi6TsoJwg7J6R7JeF7J20IOydvOyWtOuCqeuLiOuLpC5cbiAgICAvLyDqt7jrn6zri4gg7JWI7Ius7ZWY6rOgIGludmFsaWRhdGUg7ZW064+EIOuQqeuLiOuLpC5cbiAgICAvLyDthYzsiqTtirgg7ZmY6rK97JeQ7ISc64qUIGhvdC5pbnZhbGlkYXRlRmlsZeyLnCDstIjquLAg7JeQ65+s6rCAIOuwnOyDne2VmOq4sCDrlYzrrLjsl5AgaW52YWxpZGF0ZSDtlZjsp4Ag7JWK7Iq164uI64ukLlxuICAgIGlmICghaXNUZXN0KCkpIHtcbiAgICAgIGNvbnN0IGludmFsaWRhdGVkUGF0aHMgPSAoYXdhaXQgaG90LmludmFsaWRhdGVGaWxlKGRpZmZGaWxlUGF0aCwgZXZlbnQpKSBhcyBBYnNvbHV0ZVBhdGhbXTtcblxuICAgICAgaWYgKGludmFsaWRhdGVkUGF0aHMubGVuZ3RoID4gMCkge1xuICAgICAgICBjb25zb2xlLmxvZyhjaGFsay5ib2xkKGDwn5SEIEludmFsaWRhdGVkOmApKTtcblxuICAgICAgICBmb3IgKGNvbnN0IGludmFsaWRhdGVkUGF0aCBvZiBpbnZhbGlkYXRlZFBhdGhzKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIOunjOyVvSBtb2RlbC50cyDtjIzsnbzsnbQg67OA6rK9KGludmFsaWRhdGUp65CY7JeI64ukPyDqt7jrn6zrqbQgcmVnaXN0ZXJlZEFwaXMg7KSR7JeQ7IScIOydtCDrqqjrjbjsl5Ag7ZW064u57ZWY64qUIGFwaeuTpOydgCDsp4Dsm4zspJjsmpQuXG4gICAgICAgICAgICAvLyByZWdpc3RlcmVkQXBpc+uKlCDthrXsnLzroZwg64ukIOuCoOugpOuyhOumtCDsiJgg7JeG7Iq164uI64ukLiByZWdpc3RlcmVkQXBpc+yXkCDsmKzrnbzsmKTripQg7Lmc6rWs65Ok7J2AIOy0iOq4sCDroZzrk5zsi5wg65iQ64qUIEhNUuyLnOyXkOunjCDrk7HroZ3rkJjquLAg65WM66y47J6F64uI64ukLlxuICAgICAgICAgICAgLy8g65Sw65287IScIG1vZGVsLnRzIO2MjOydvOydmCDrs4Dqsr3snLzroZwg64uk7J2M67KIIOyDiOuhnOyatCBldmFs7J20IOyYiOyDgeuQmOuKlCDsnbQg7Iuc7KCQ7JeQ7ISc66eMLCDsnbQg66qo64247JeQ7IScIOuCmOyYqCByZWdpc3RlcmVkQXBpc+uTpOydhCDsp4Dsm4zspIQg7IiYIOyeiOyKteuLiOuLpC5cbiAgICAgICAgICAgIGNvbnN0IHJlbW92ZWRBcGlzID0gdGhpcy5yZW1vdmVJbnZhbGlkYXRlZFJlZ2lzdGVyZWRBcGlzKGludmFsaWRhdGVkUGF0aCk7XG4gICAgICAgICAgICBpZiAocmVtb3ZlZEFwaXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgICAgICBjaGFsay5ibHVlKGAtICR7cGF0aC5yZWxhdGl2ZShTb25hbXUuYXBpUm9vdFBhdGgsIGludmFsaWRhdGVkUGF0aCl9YCksXG4gICAgICAgICAgICAgICAgY2hhbGsuZ3JheShgKHdpdGggJHtyZW1vdmVkQXBpcy5sZW5ndGh9IEFQSXMpYCksXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBjb25zb2xlLmxvZyhjaGFsay5ibHVlKGAtICR7cGF0aC5yZWxhdGl2ZShTb25hbXUuYXBpUm9vdFBhdGgsIGludmFsaWRhdGVkUGF0aCl9YCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICBjaGFsay5yZWQoYEZhaWxlZCB0byByZW1vdmUgaW52YWxpZGF0ZWQgcmVnaXN0ZXJlZCBBUElzIGZvciAke2ludmFsaWRhdGVkUGF0aH1gKSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gZGV2UnVubmVyIO2ZnOyEse2ZlCDsi5wsIOuzgOqyveuQnCDshozsiqQg7YyM7J287J2EIFZpdGVzdCDrqqjrk4gg6re4656Y7ZSE7JeQ7ISc64+EIOustO2aqO2ZlO2VqeuLiOuLpC5cbiAgICAvLyBWaXRl7J2YIG1vZHVsZUdyYXBoLmludmFsaWRhdGVNb2R1bGUoKeydtCBpbXBvcnRlciDrsKntlqXsnLzroZwg7J6s6reA7KCBIGNhc2NhZGXtlZjrr4DroZwsXG4gICAgLy8g7IaM7IqkIO2MjOydvCDtlZjrgpjrp4wg66y07Zqo7ZmU7ZWY66m0IOydtOulvCBpbXBvcnTtlZjripQg7YWM7Iqk7Yq4IO2MjOydvOuPhCDsnpDrj5nsnLzroZwg66y07Zqo7ZmU65Cp64uI64ukLlxuICAgIGlmICghaXNUZXN0KCkgJiYgU29uYW11LmNvbmZpZy50ZXN0Py5kZXZSdW5uZXI/LmVuYWJsZWQgJiYgU29uYW11LmRldlZpdGVzdE1hbmFnZXIpIHtcbiAgICAgIFNvbmFtdS5kZXZWaXRlc3RNYW5hZ2VyLmludmFsaWRhdGVGaWxlcyhbZGlmZkZpbGVQYXRoXSk7XG4gICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgY2hhbGsuZGltKGBUZXN0IGludmFsaWRhdGVkOiAke3BhdGgucmVsYXRpdmUoU29uYW11LmFwaVJvb3RQYXRoLCBkaWZmRmlsZVBhdGgpfWApLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBpc0luQ2hlY2tQYXR0ZXJuR3JvdXAgPSBPYmplY3QudmFsdWVzKGdldENoZWNrc3VtUGF0dGVybkdyb3VwSW5BYnNvbHV0ZVBhdGgoKSkuc29tZShcbiAgICAgIChwYXR0ZXJuKSA9PiBtaW5pbWF0Y2goZGlmZkZpbGVQYXRoLCBwYXR0ZXJuKSxcbiAgICApO1xuXG4gICAgLy8g7ZWgIOydvChzeW5jKeydtCDsnojsnLzrqbQg7ZWp64uI64ukLlxuICAgIGlmIChpc0luQ2hlY2tQYXR0ZXJuR3JvdXApIHtcbiAgICAgIGF3YWl0IHRoaXMuZG9TeW5jQWN0aW9ucyhbZGlmZkZpbGVQYXRoXSk7XG4gICAgfVxuXG4gICAgLy8g7Iux7YGsIOyekeyXheydtCDrgZ3rgpjrqbQg66qo65OgIOuqqOuTiOydhCDroZzrk5ztlanri4jri6QuXG4gICAgLy8gaG1yLWhvb2vsl5Ag7J2Y7ZW0IGludmFsaWRhdGXrkJwg67aA67aE65Ok7J20IOyVhOuLiOudvOuptCDsupDsi5wg6re464yA66GcIOycoOyngO2VqeuLiOuLpC5cbiAgICBhd2FpdCB0aGlzLmF1dG9sb2FkVHlwZXMoKTtcbiAgICBhd2FpdCB0aGlzLmF1dG9sb2FkTW9kZWxzKCk7XG4gICAgYXdhaXQgdGhpcy5hdXRvbG9hZEFwaXMoKTtcbiAgICBhd2FpdCB0aGlzLmF1dG9sb2FkV29ya2Zsb3dzKCk7XG5cbiAgICB0aGlzLmV2ZW50RW1pdHRlci5lbWl0KFwib25ITVJDb21wbGV0ZWRcIik7XG4gIH1cblxuICByZW1vdmVJbnZhbGlkYXRlZFJlZ2lzdGVyZWRBcGlzKFxuICAgIGludmFsaWRhdGVkUGF0aDogQWJzb2x1dGVQYXRoLFxuICApOiAodHlwZW9mIHJlZ2lzdGVyZWRBcGlzKVtudW1iZXJdW10ge1xuICAgIGlmICghaW52YWxpZGF0ZWRQYXRoLmVuZHNXaXRoKFwiLm1vZGVsLnRzXCIgLyrshozsiqQg7L2U65Oc66W8IOuLpOujqOuKlCDsg4HtmansnbTri4ggLnRzIOqyveuhnOuhnCDrtIXri4jri6QuKi8pKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgY29uc3QgZW50aXR5SWQgPSBFbnRpdHlNYW5hZ2VyLmdldEVudGl0eUlkRnJvbVBhdGgoaW52YWxpZGF0ZWRQYXRoKTtcbiAgICBjb25zdCB0b1JlbW92ZSA9IHJlZ2lzdGVyZWRBcGlzLmZpbHRlcigoYXBpKSA9PiBhcGkubW9kZWxOYW1lID09PSBgJHtlbnRpdHlJZH1Nb2RlbGApO1xuICAgIGZvciAoY29uc3QgYXBpIG9mIHRvUmVtb3ZlKSB7XG4gICAgICBjb25zdCBpZHggPSByZWdpc3RlcmVkQXBpcy5pbmRleE9mKGFwaSk7XG4gICAgICBpZiAoaWR4ICE9PSAtMSkge1xuICAgICAgICByZWdpc3RlcmVkQXBpcy5zcGxpY2UoaWR4LCAxKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdG9SZW1vdmU7XG4gIH1cblxuICBhc3luYyBjb3B5U2hhcmVkVG9UYXJnZXRzKHRhcmdldHM6IHN0cmluZ1tdKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gcGx1cmFsLnRzIOuCtOyaqeydhCDsnb3slrTshJwgc2hhcmVkIO2MjOydvOyXkCDsgr3snoXtlanri4jri6QuXG4gICAgY29uc3QgZGljdFV0aWxzUGF0aCA9IHBhdGguam9pbihcbiAgICAgIGltcG9ydC5tZXRhLmRpcm5hbWUucmVwbGFjZShcIi9kaXN0L1wiLCBcIi9zcmMvXCIpLFxuICAgICAgXCIuLi9kaWN0L3V0aWxzLnRzXCIsXG4gICAgKTtcbiAgICBjb25zdCBkaWN0VXRpbHNDb2RlID0gKGF3YWl0IGV4aXN0cyhkaWN0VXRpbHNQYXRoKSlcbiAgICAgID8gYXdhaXQgcmVhZEZpbGUoZGljdFV0aWxzUGF0aCwgXCJ1dGYtOFwiKVxuICAgICAgOiBcIlwiO1xuXG4gICAgLy8g7Yq57KCVIOuzgOyImCDsuZjtmZjsnYQg7JyE7ZW07IScIOyCrOyaqe2VqeuLiOuLpC5cbiAgICBjb25zdCBjb252ZXJ0TWFwID0ge1xuICAgICAgYmFzZVVybDpcbiAgICAgICAgU29uYW11LmNvbmZpZy5zZXJ2ZXIuYmFzZVVybCA/P1xuICAgICAgICBgaHR0cDovLyR7U29uYW11LmNvbmZpZy5zZXJ2ZXIubGlzdGVuPy5ob3N0ID8/IFwibG9jYWxob3N0XCJ9OiR7U29uYW11LmNvbmZpZy5zZXJ2ZXIubGlzdGVuPy5wb3J0ID8/IDMwMDB9YCxcbiAgICAgIGRpY3RVdGlsczogZGljdFV0aWxzQ29kZSxcbiAgICB9O1xuXG4gICAgZm9yIChjb25zdCB0YXJnZXQgb2YgdGFyZ2V0cykge1xuICAgICAgLy8g7KeA6riIIOqwgOyguOqwgOugpOuKlCDsnbQg7YyM7J287J2AIFNvbmFtdSDsvZTrk5zrsqDsnbTsiqTsnZgg7J2867aA7J6F64uI64ukLlxuICAgICAgLy8g6re465+w642wIGRpc3Qg7IaNIOu5jOuTnOuQnCDshozsiqQg7L2U65OcIO2MjOydvOydtCDtlYTsmpTtlZwg6rKD7J20IOyVhOuLiOqzoCwgc3Jj7JeQ66eMIOyeiOuKlCDthY3siqTtirgg7YyM7J287J20IO2VhOyalO2VqeuLiOuLpC5cbiAgICAgIC8vIOuUsOudvOyEnCAvc3JjL+yXkOyEnCDssL7sirXri4jri6QuXG4gICAgICBjb25zdCBzcmNQYXRoID0gcGF0aC5qb2luKFxuICAgICAgICBpbXBvcnQubWV0YS5kaXJuYW1lLnJlcGxhY2UoXCIvZGlzdC9cIiwgXCIvc3JjL1wiKSxcbiAgICAgICAgYC4uL3NoYXJlZC8ke3RhcmdldH0uc2hhcmVkLnRzLnR4dGAsXG4gICAgICApO1xuICAgICAgaWYgKCEoYXdhaXQgZXhpc3RzKHNyY1BhdGgpKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmICghKGF3YWl0IGV4aXN0cyhwYXRoLmpvaW4oU29uYW11LmFwcFJvb3RQYXRoLCB0YXJnZXQpKSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBUcmllZCB0byBjb3B5IHNvbmFtdS5zaGFyZWQudHMgdG8gdGFyZ2V0ICcke3RhcmdldH0nIGJ1dCB0aGUgdGFyZ2V0IGRpcmVjdG9yeSBkb2VzIG5vdCBleGlzdC4gUGxlYXNlIGNoZWNrIHlvdXIgcHJvamVjdCBkaXJlY3Rvcnkgc3RydWN0dXJlLmAsXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGZ1bGxUZXh0ID0gYXdhaXQgcmVhZEZpbGUoc3JjUGF0aCwgXCJ1dGYtOFwiKTtcbiAgICAgIGNvbnN0IGNvbnZlcnRlZFRleHQgPSBPYmplY3QuZW50cmllcyhjb252ZXJ0TWFwKS5yZWR1Y2UoXG4gICAgICAgIChhY2MsIFtrZXksIHZhbHVlXSkgPT4gYWNjLnJlcGxhY2UoYCRbWyR7a2V5fV1dYCwgdmFsdWUpLFxuICAgICAgICBmdWxsVGV4dCxcbiAgICAgICk7XG5cbiAgICAgIC8vIOydtOqxtCDtlITroZzsoJ3tirjsl5AgLnRzIOyGjOyKpCDsvZTrk5wg7YyM7J287J2EIOyDneyEse2VmOuKlCDqsoPsnbTrr4DroZwgc3Jj7J2YIC50cyDqsr3roZzroZwg6rCR64uI64ukLlxuICAgICAgY29uc3QgZGVzdFBhdGggPSBwYXRoLmpvaW4oU29uYW11LmFwcFJvb3RQYXRoLCB0YXJnZXQsIFwic3JjL3NlcnZpY2VzL3NvbmFtdS5zaGFyZWQudHNcIik7XG5cbiAgICAgIC8vIOygleunkCDtmLnsi5zrgpjsp4Drp4wgdGFyZ2V0IOuUlOugie2GoOumrOuKlCDsnojslrTrj4Qgc3JjL3NlcnZpY2VzIOuUlOugie2GoOumrOuKlCDsl4bsnYQg7IiYIOyeiOycvOuvgOuhnCDrr7jrpqwg7IOd7ISx7ZW07KSN64uI64ukLlxuICAgICAgaWYgKCEoYXdhaXQgZXhpc3RzKHBhdGguZGlybmFtZShkZXN0UGF0aCkpKSkge1xuICAgICAgICBhd2FpdCBta2RpcihwYXRoLmRpcm5hbWUoZGVzdFBhdGgpLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgICAgY29uc29sZS53YXJuKGBDcmVhdGVkIGRpcmVjdG9yeSAnJHtwYXRoLmRpcm5hbWUoZGVzdFBhdGgpfScgYmVjYXVzZSBpdCBkaWQgbm90IGV4aXN0LmApO1xuICAgICAgfVxuXG4gICAgICAvLyDtjIzsnbzsnbQg7J2066+4IOyhtOyerO2VmOuptCDqsbTrhIjrnIHri4jri6QuXG4gICAgICAvLyBzb25hbXUuc2hhcmVkLnRz64qUIO2UhOuhnOygne2KuOyXkOyEnCDsnpDsnKDroa3qsowg7Luk7Iqk7YSw66eI7J207KeV7ZWgIOyImCDsnojslrTslbwg7ZWY66+A66GcLFxuICAgICAgLy8g7LWc7LSIIDHtmozrp4wg7IOd7ISx7ZWY6rOgIOydtO2bhOyXkOuKlCDrja7slrTsk7Dsp4Ag7JWK7Iq164uI64ukLlxuICAgICAgLy8g7YWc7ZSM66a/IOuCtOyaqSgkW1tkaWN0VXRpbHNdXSDrk7Ep7J20IOuzgOqyveuQmOyXiOydhCDrlYwg67CY7JiB7J20IO2VhOyalO2VmOuptCxcbiAgICAgIC8vIO2VtOuLuSDtjIzsnbzsnYQg7IKt7KCc7ZWcIOuSpCBgcG5wbSBzb25hbXUgc3luY2DroZwg7J6s7IOd7ISx7ZWY66m0IOuQqeuLiOuLpC5cbiAgICAgIGlmIChhd2FpdCBleGlzdHMoZGVzdFBhdGgpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBhd2FpdCB3cml0ZUZpbGUoZGVzdFBhdGgsIGNvbnZlcnRlZFRleHQpO1xuICAgICAgIWlzVGVzdCgpICYmXG4gICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgIGNoYWxrLmJvbGQoXCJDb3BpZWQ6IFwiKSArIGNoYWxrLmJsdWUocGF0aC5yZWxhdGl2ZShTb25hbXUuYXBwUm9vdFBhdGgsIGRlc3RQYXRoKSksXG4gICAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgYXV0b2xvYWRUeXBlcygpIHtcbiAgICB0aGlzLnR5cGVzID0gYXdhaXQgbG9hZFR5cGVzKCk7XG4gIH1cblxuICBhc3luYyBhdXRvbG9hZE1vZGVscygpIHtcbiAgICB0aGlzLm1vZGVscyA9IGF3YWl0IGxvYWRNb2RlbHMoKTtcbiAgfVxuXG4gIGFzeW5jIGF1dG9sb2FkQXBpcygpIHtcbiAgICB0aGlzLmFwaXMgPSBhd2FpdCBsb2FkQXBpcygpO1xuICB9XG5cbiAgYXN5bmMgYXV0b2xvYWRXb3JrZmxvd3MoKSB7XG4gICAgdGhpcy53b3JrZmxvd3MgPSBhd2FpdCBsb2FkV29ya2Zsb3dzKCk7XG4gICAgYXdhaXQgU29uYW11LndvcmtmbG93cy5zeW5jaHJvbml6ZSh0aGlzLndvcmtmbG93cyk7XG4gIH1cblxuICBhc3luYyBhdXRvbG9hZFNTUlJvdXRlcygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBzc3JDb25maWdQYXRoID0gcGF0aC5qb2luKFNvbmFtdS5hcGlSb290UGF0aCwgXCJzcmMvc3NyXCIpO1xuXG4gICAgLy8g6riw7KG0IHJvdXRlcyDstIjquLDtmZRcbiAgICBjb25zdCB7IGNsZWFyU1NSUm91dGVzIH0gPSBhd2FpdCBpbXBvcnQoXCIuLi9zc3JcIik7XG4gICAgY2xlYXJTU1JSb3V0ZXMoKTtcblxuICAgIC8vIHNzciDtj7TrjZQg7JeG7Jy866m0IOyKpO2CtVxuICAgIGlmICghKGF3YWl0IGV4aXN0cyhzc3JDb25maWdQYXRoKSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBzc3Ig7Y+0642UIOyViOydmCDrqqjrk6AgLnRzIO2MjOydvCDroZzrk5xcbiAgICBjb25zdCB7IGdsb2JBc3luYyB9ID0gYXdhaXQgaW1wb3J0KFwiLi4vdXRpbHMvYXN5bmMtdXRpbHNcIik7XG4gICAgY29uc3QgeyBpbXBvcnRNZW1iZXJzIH0gPSBhd2FpdCBpbXBvcnQoXCIuLi91dGlscy9lc20tdXRpbHNcIik7XG4gICAgY29uc3QgeyBydW50aW1lUGF0aCB9ID0gYXdhaXQgaW1wb3J0KFwiLi4vdXRpbHMvcGF0aC11dGlsc1wiKTtcblxuICAgIC8vIHJ1bnRpbWVQYXRo66W8IOyCrOyaqe2VmOyXrCDqsJzrsJwv7ZSE66Gc642V7IWYIO2ZmOqyveyXkCDrp57ripQg7ZmV7J6l7J6QIOyymOumrFxuICAgIGNvbnN0IGZpbGVzID0gYXdhaXQgZ2xvYkFzeW5jKHBhdGguam9pbihzc3JDb25maWdQYXRoLCBydW50aW1lUGF0aChcIioqLyoudHNcIikpKTtcblxuICAgIGZvciAoY29uc3QgZmlsZSBvZiBmaWxlcykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgLy8gaW1wb3J0TWVtYmVyc+ulvCDsgqzsmqntlZjrqbQg7YyM7J287J2YIHNpZGUgZWZmZWN0KHJlZ2lzdGVyU1NSIO2YuOy2nCnqsIAg7Iuk7ZaJ65CoXG4gICAgICAgIGF3YWl0IGltcG9ydE1lbWJlcnMoZmlsZSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYEZhaWxlZCB0byBsb2FkIFNTUiByb3V0ZTogJHtmaWxlfWAsIGUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiDsi6TsoJwg7Iux7YGs66W8IOyImO2Wie2VmOuKlCDrs7jssrTsnoXri4jri6QuXG4gICAqIOuzgOqyveuQnCDtjIzsnbzrk6TsnYQg7YOA7J6F67OE66GcIOu2hOulmO2VmOqzoCDqsIEg7YOA7J6F7JeQIOunnuuKlCDslaHshZjsnYQg7Iuk7ZaJ7ZWp64uI64ukLlxuICAgKiBAcGFyYW0gZGlmZkZpbGVQYXRocyAtIOuzgOqyveuQnCDtjIzsnbzrk6TsnZgg7KCI64yAIOqyveuhnCDrqqnroZ1cbiAgICogQHJldHVybnMgZGlmZlR5cGVzIC0g67OA6rK965CcIO2MjOydvOydmCDtg4DsnoUg66qp66GdIChlbnRpdHksIHR5cGVzLCBtb2RlbCDrk7EpXG4gICAqL1xuICBhc3luYyBkb1N5bmNBY3Rpb25zKGRpZmZGaWxlUGF0aHM6IEFic29sdXRlUGF0aFtdKTogUHJvbWlzZTx7IGRpZmZUeXBlczogc3RyaW5nW10gfT4ge1xuICAgIGNvbnN0IGRpZmZHcm91cHMgPSB0aGlzLmNhbGN1bGF0ZURpZmZHcm91cHMoZGlmZkZpbGVQYXRocyk7XG4gICAgY29uc3QgZGlmZlR5cGVzID0gT2JqZWN0LmtleXMoZGlmZkdyb3VwcykgYXMgRmlsZVR5cGVbXTtcblxuICAgIC8vIFNpbmdsZSBzb3VyY2Ugb2YgdHJ1dGjqsIAg67OA6rK965CcIOqyveyasFxuICAgIGlmIChkaWZmVHlwZXMuaW5jbHVkZXMoXCJlbnRpdHlcIikgfHwgZGlmZlR5cGVzLmluY2x1ZGVzKFwidHlwZXNcIikpIHtcbiAgICAgIGF3YWl0IHRoaXMuaGFuZGxlVHJ1dGhTb3VyY2VDaGFuZ2VzKGRpZmZHcm91cHMsIGRpZmZUeXBlcyk7XG4gICAgfVxuXG4gICAgLy8g7YOA6rKf7Jy866GcIOuzteyCrOunjCDtlZjrqbQg65CY64qUIO2MjOydvOydtCDrs4Dqsr3rkJwg6rK97JqwXG4gICAgaWYgKFxuICAgICAgZGlmZlR5cGVzLmluY2x1ZGVzKFwidHlwZXNcIikgfHxcbiAgICAgIGRpZmZUeXBlcy5pbmNsdWRlcyhcImZ1bmN0aW9uc1wiKSB8fFxuICAgICAgZGlmZlR5cGVzLmluY2x1ZGVzKFwiZ2VuZXJhdGVkXCIpXG4gICAgKSB7XG4gICAgICBhd2FpdCB0aGlzLmhhbmRsZVN5bmNhYmxlRmlsZUNoYW5nZXMoZGlmZkdyb3Vwcyk7XG4gICAgfVxuXG4gICAgLy8g66qo6424L+2UhOugiOyehCDqtaztmITssrTqsIAg67OA6rK965CcIOqyveyasFxuICAgIGlmIChkaWZmVHlwZXMuaW5jbHVkZXMoXCJtb2RlbFwiKSB8fCBkaWZmVHlwZXMuaW5jbHVkZXMoXCJmcmFtZVwiKSkge1xuICAgICAgYXdhaXQgdGhpcy5oYW5kbGVJbXBsZW1lbnRhdGlvbkNoYW5nZXMoZGlmZkdyb3Vwcyk7XG4gICAgfVxuXG4gICAgLy8g7ISk7KCVIO2MjOydvOydtCDrs4Dqsr3rkJwg6rK97JqwXG4gICAgaWYgKGRpZmZUeXBlcy5pbmNsdWRlcyhcImNvbmZpZ1wiKSkge1xuICAgICAgYXdhaXQgU3luY2VyQWN0aW9ucy5hY3Rpb25TeW5jQ29uZmlnKCk7XG4gICAgfVxuXG4gICAgLy8g7JuM7YGs7ZSM66Gc7JqwIO2MjOydvOydtCDrs4Dqsr3rkJwg6rK97JqwXG4gICAgaWYgKGRpZmZUeXBlcy5pbmNsdWRlcyhcIndvcmtmbG93XCIpKSB7XG4gICAgICBhd2FpdCB0aGlzLmF1dG9sb2FkV29ya2Zsb3dzKCk7XG4gICAgfVxuXG4gICAgLy8gaTE4biDqtIDroKgg7YyM7J287J20IOuzgOqyveuQnCDqsr3smrBcbiAgICAvLyAtIGkxOG4vKi50czogbG9jYWxlIOuyiOyXrSDtjIzsnbxcbiAgICAvLyAtIGVudGl0eS5qc29uOiBlbnRpdHkgbGFiZWxzXG4gICAgLy8gLSBzb25hbXUuY29uZmlnLnRzOiBpMThuIOyEpOyglSAoZGVmYXVsdExvY2FsZSwgc3VwcG9ydGVkTG9jYWxlcylcbiAgICBpZiAoXG4gICAgICBkaWZmVHlwZXMuaW5jbHVkZXMoXCJpMThuXCIpIHx8XG4gICAgICBkaWZmVHlwZXMuaW5jbHVkZXMoXCJlbnRpdHlcIikgfHxcbiAgICAgIGRpZmZUeXBlcy5pbmNsdWRlcyhcImNvbmZpZ1wiKVxuICAgICkge1xuICAgICAgYXdhaXQgdGhpcy5zeW5jU0QoKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgZGlmZlR5cGVzLFxuICAgIH07XG4gIH1cblxuICBjYWxjdWxhdGVEaWZmR3JvdXBzKGRpZmZGaWxlczogQWJzb2x1dGVQYXRoW10pOiBEaWZmR3JvdXBzIHtcbiAgICBjb25zdCBmaWxlVHlwZXMgPSBPYmplY3Qua2V5cyhjaGVja3N1bVBhdHRlcm5Hcm91cCkgYXMgRmlsZVR5cGVbXTtcblxuICAgIHJldHVybiBncm91cChkaWZmRmlsZXMsIChmaWxlUGF0aCkgPT4ge1xuICAgICAgLy8g7KCI64yAIOqyveuhnOyXkOyEnCBzcmMv66GcIOyLnOyeke2VmOuKlCDsg4HrjIAg6rK966GcIOu2gOu2hOydhCDstpTstpztlanri4jri6QuXG4gICAgICBjb25zdCBzcmNJbmRleCA9IGZpbGVQYXRoLmluZGV4T2YoXCIvc3JjL1wiKTtcbiAgICAgIGlmIChzcmNJbmRleCA9PT0gLTEpIHJldHVybiBcInVua25vd25cIjtcbiAgICAgIGNvbnN0IHJlbGF0aXZlUGF0aCA9IGZpbGVQYXRoLnNsaWNlKHNyY0luZGV4ICsgMSk7IC8vIFwic3JjLy4uLlwiIO2Yle2DnFxuXG4gICAgICBmb3IgKGNvbnN0IGZpbGVUeXBlIG9mIGZpbGVUeXBlcykge1xuICAgICAgICBpZiAobWluaW1hdGNoKHJlbGF0aXZlUGF0aCwgY2hlY2tzdW1QYXR0ZXJuR3JvdXBbZmlsZVR5cGVdKSkge1xuICAgICAgICAgIHJldHVybiBmaWxlVHlwZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIFwidW5rbm93blwiO1xuICAgIH0pIGFzIHVua25vd24gYXMgRGlmZkdyb3VwcztcbiAgfVxuXG4gIGFzeW5jIGhhbmRsZVRydXRoU291cmNlQ2hhbmdlcyhkaWZmR3JvdXBzOiBEaWZmR3JvdXBzLCBkaWZmVHlwZXM6IHN0cmluZ1tdKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgTmFpdGUudChcImhhbmRsZVRydXRoU291cmNlQ2hhbmdlc1wiLCB7IGRpZmZHcm91cHMsIGRpZmZUeXBlcyB9KTtcblxuICAgIGF3YWl0IEVudGl0eU1hbmFnZXIucmVsb2FkKCk7XG5cbiAgICAvLyB0eXBlcyDsg53shLEoZW50aXR5IOyDiOuhnCDstpTqsIDrkJwg6rK97JqwKVxuICAgIC8vIHBhcmVudElk6rCAIOyXhuqzoCwgdHlwZXPqsIAg7JeG64qUIOqyveyasOyXkOunjCDsg53shLFcbiAgICBjb25zdCBlbnRpdHlQYXRoID0gZGlmZkdyb3Vwcy5lbnRpdHk/LmF0KDApO1xuICAgIGlmIChlbnRpdHlQYXRoICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IGVudGl0eUlkID0gRW50aXR5TWFuYWdlci5nZXRFbnRpdHlJZEZyb21QYXRoKGVudGl0eVBhdGgpO1xuICAgICAgY29uc3QgZW50aXR5ID0gRW50aXR5TWFuYWdlci5nZXQoZW50aXR5SWQpO1xuICAgICAgLy8g7ZSE66Gc7KCd7Yq47JeQIOyDneyEseuQmOyWtOyVvCDtlZjripQgLnRzIO2MjOydvOydmCDqsr3roZzsnoXri4jri6QuXG4gICAgICBjb25zdCB0eXBlRmlsZVBhdGggPSBwYXRoLmpvaW4oXG4gICAgICAgIFNvbmFtdS5hcGlSb290UGF0aCxcbiAgICAgICAgYHNyYy9hcHBsaWNhdGlvbi8ke2VudGl0eS5uYW1lcy5mc30vJHtlbnRpdHkubmFtZXMuZnN9LnR5cGVzLnRzYCxcbiAgICAgICk7XG4gICAgICBpZiAoZW50aXR5LnBhcmVudElkID09PSB1bmRlZmluZWQgJiYgIShhd2FpdCBleGlzdHModHlwZUZpbGVQYXRoKSkpIHtcbiAgICAgICAgYXdhaXQgZ2VuZXJhdGVUZW1wbGF0ZShcImluaXRfdHlwZXNcIiwgeyBlbnRpdHlJZCB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBhd2FpdCBTeW5jZXJBY3Rpb25zLmFjdGlvbkdlbmVyYXRlU2NoZW1hcygpO1xuXG4gICAgZGlmZkdyb3Vwcy5nZW5lcmF0ZWQgPSB1bmlxdWUoW1xuICAgICAgLi4uKGRpZmZHcm91cHMuZ2VuZXJhdGVkID8/IFtdKSxcbiAgICAgIHBhdGguam9pbihTb25hbXUuYXBpUm9vdFBhdGgsIFwic3JjL2FwcGxpY2F0aW9uL3NvbmFtdS5nZW5lcmF0ZWQudHNcIikgYXMgQWJzb2x1dGVQYXRoLFxuICAgIF0pO1xuICAgIGRpZmZUeXBlcy5wdXNoKFwiZ2VuZXJhdGVkXCIpO1xuICB9XG5cbiAgYXN5bmMgaGFuZGxlU3luY2FibGVGaWxlQ2hhbmdlcyhkaWZmR3JvdXBzOiBEaWZmR3JvdXBzKTogUHJvbWlzZTxGaWxlVHlwZVtdPiB7XG4gICAgY29uc3QgdHNQYXRocyA9IHVuaXF1ZShbXG4gICAgICAuLi4oZGlmZkdyb3Vwcy50eXBlcyA/PyBbXSksXG4gICAgICAuLi4oZGlmZkdyb3Vwcy5mdW5jdGlvbnMgPz8gW10pLFxuICAgICAgLi4uKGRpZmZHcm91cHMuZ2VuZXJhdGVkID8/IFtdKSxcbiAgICBdKTtcbiAgICBOYWl0ZS50KFwiaGFuZGxlU3luY2FibGVGaWxlQ2hhbmdlc1wiLCB7IGRpZmZHcm91cHMgfSk7XG5cbiAgICAvLyBjb25zb2xlLmxvZyhcbiAgICAvLyAgIGNoYWxrLmdyYXkoXG4gICAgLy8gICAgIGBbUHJvY2Vzc2luZ10gSGFuZGxpbmcgdHlwZXMvZnVuY3Rpb25zL2dlbmVyYXRlZCBjaGFuZ2VzOiAke3RzUGF0aHMubWFwKChwKSA9PiBwYXRoLnJlbGF0aXZlKFNvbmFtdS5hcGlSb290UGF0aCwgcCkpLmpvaW4oXCIsIFwiKX1gXG4gICAgLy8gICApXG4gICAgLy8gKTtcblxuICAgIGF3YWl0IFN5bmNlckFjdGlvbnMuYWN0aW9uU3luY0ZpbGVzVG9UYXJnZXRzKHRzUGF0aHMpO1xuXG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgYXN5bmMgaGFuZGxlSW1wbGVtZW50YXRpb25DaGFuZ2VzKGRpZmZHcm91cHM6IERpZmZHcm91cHMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBOYWl0ZS50KFwiaGFuZGxlSW1wbGVtZW50YXRpb25DaGFuZ2VzXCIsIHsgZGlmZkdyb3VwcyB9KTtcbiAgICBjb25zdCBtZXJnZWRHcm91cCA9IFsuLi4oZGlmZkdyb3Vwcy5tb2RlbCA/PyBbXSksIC4uLihkaWZmR3JvdXBzLmZyYW1lID8/IFtdKV07XG5cbiAgICAvLyBjb25zb2xlLmxvZyhcbiAgICAvLyAgIGNoYWxrLmdyYXkoXG4gICAgLy8gICAgIGBbUHJvY2Vzc2luZ10gSGFuZGxpbmcgbW9kZWwvZnJhbWUgY2hhbmdlczogJHttZXJnZWRHcm91cC5tYXAoKHApID0+IHBhdGgucmVsYXRpdmUoU29uYW11LmFwaVJvb3RQYXRoLCBwKSkuam9pbihcIiwgXCIpfWBcbiAgICAvLyAgIClcbiAgICAvLyApO1xuXG4gICAgLy8gZ2VuZXJhdGVkX2h0dHAudGVtcGxhdGUudHPsl5DshJwgc3luY2VyLnR5cGVz66W8IOyUgeuLiOuLpC5cbiAgICAvLyBzZXJ2aWNlLnRlbXBsYXRlLnRz7JeQ7IScIHN5bmNlci5hcGlz66W8IOyUgeuLiOuLpC5cbiAgICBhd2FpdCB0aGlzLmF1dG9sb2FkTW9kZWxzKCk7XG4gICAgYXdhaXQgdGhpcy5hdXRvbG9hZFR5cGVzKCk7XG4gICAgYXdhaXQgdGhpcy5hdXRvbG9hZEFwaXMoKTtcblxuICAgIGNvbnN0IHBhcmFtczoge1xuICAgICAgbmFtZXNSZWNvcmQ6IEVudGl0eU5hbWVzUmVjb3JkO1xuICAgIH1bXSA9IG1lcmdlZEdyb3VwLm1hcCgobW9kZWxQYXRoKSA9PiB7XG4gICAgICBpZiAobW9kZWxQYXRoLmVuZHNXaXRoKFwiLm1vZGVsLnRzXCIpKSB7XG4gICAgICAgIGNvbnN0IGVudGl0eUlkID0gRW50aXR5TWFuYWdlci5nZXRFbnRpdHlJZEZyb21QYXRoKG1vZGVsUGF0aCk7XG4gICAgICAgIGFzc2VydChlbnRpdHlJZCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbmFtZXNSZWNvcmQ6IEVudGl0eU1hbmFnZXIuZ2V0TmFtZXNGcm9tSWQoZW50aXR5SWQpLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgaWYgKG1vZGVsUGF0aC5lbmRzV2l0aChcIi5mcmFtZS50c1wiKSkge1xuICAgICAgICBjb25zdCBbLCBmcmFtZU5hbWVdID0gbW9kZWxQYXRoLm1hdGNoKC8uK1xcLyguKylcXC5mcmFtZVxcLnRzJC8pID8/IFtdO1xuICAgICAgICBhc3NlcnQoZnJhbWVOYW1lKTtcbiAgICAgICAgLy8gZnJhbWVOYW1l7J2EIFBhc2NhbENhc2XroZwg67OA7ZmYIChkYXNoYm9hcmQgLT4gRGFzaGJvYXJkKVxuICAgICAgICBjb25zdCBmcmFtZUlkID0gaW5mbGVjdGlvbi5jYW1lbGl6ZShmcmFtZU5hbWUpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG5hbWVzUmVjb3JkOiBFbnRpdHlNYW5hZ2VyLmdldE5hbWVzRnJvbUlkKGZyYW1lSWQpLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwibm90IHJlYWNoYWJsZVwiKTtcbiAgICB9KTtcblxuICAgIGF3YWl0IFN5bmNlckFjdGlvbnMuYWN0aW9uR2VuZXJhdGVTZXJ2aWNlcyhwYXJhbXMpO1xuICAgIGF3YWl0IFN5bmNlckFjdGlvbnMuYWN0aW9uR2VuZXJhdGVIdHRwcygpO1xuICAgIGF3YWl0IFN5bmNlckFjdGlvbnMuYWN0aW9uR2VuZXJhdGVTc3IoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiDso7zslrTsp4Qg7JeU7Yuw7Yuw7JmAIO2FnO2UjOumvyDtgqTsl5Ag64yA7ZW0LCDsg53shLHrkJwg7L2U65Oc6rCAIOyhtOyerO2VmOuKlOyngCDtmZXsnbjtlanri4jri6QuXG4gICAqIEBwYXJhbSBlbnRpdHlJZCDsl5Tti7Dti7AgSURcbiAgICogQHBhcmFtIHRlbXBsYXRlS2V5IO2FnO2UjOumvyDtgqRcbiAgICogQHBhcmFtIGVudW1JZCDsl7TqsbDtmJUgSURcbiAgICogQHJldHVybnMg7IOd7ISx65CcIOy9lOuTnOqwgCDsobTsnqztlZjripTsp4Ag7Jes67aAXG4gICAqL1xuICBhc3luYyBjaGVja0V4aXN0c0dlbkNvZGUoXG4gICAgZW50aXR5SWQ6IHN0cmluZyxcbiAgICB0ZW1wbGF0ZUtleTogVGVtcGxhdGVLZXksXG4gICAgZW51bUlkPzogc3RyaW5nLFxuICApOiBQcm9taXNlPHsgc3ViUGF0aDogc3RyaW5nOyBmdWxsUGF0aDogc3RyaW5nOyBpc0V4aXN0czogYm9vbGVhbiB9PiB7XG4gICAgY29uc3QgeyB0YXJnZXQsIHBhdGg6IGdlblBhdGggfSA9IFRlbXBsYXRlTWFuYWdlci5nZXQodGVtcGxhdGVLZXkpLmdldFRhcmdldEFuZFBhdGgoXG4gICAgICBFbnRpdHlNYW5hZ2VyLmdldE5hbWVzRnJvbUlkKGVudGl0eUlkKSxcbiAgICAgIGVudW1JZCxcbiAgICApO1xuXG4gICAgY29uc3Qgc3ViUGF0aCA9IHBhdGguam9pbih0YXJnZXQsIGdlblBhdGgpO1xuICAgIGNvbnN0IGZ1bGxQYXRoID0gcGF0aC5qb2luKFNvbmFtdS5hcHBSb290UGF0aCwgc3ViUGF0aCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN1YlBhdGgsXG4gICAgICBmdWxsUGF0aCxcbiAgICAgIGlzRXhpc3RzOiBhd2FpdCBleGlzdHMoZnVsbFBhdGgpLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICog7KO87Ja07KeEIOyXlO2LsO2LsOyZgCDsl7TqsbDtmJXsl5Ag64yA7ZW0LCDsg53shLHrkJwg7L2U65Oc6rCAIOyhtOyerO2VmOuKlOyngCDtmZXsnbjtlanri4jri6QuXG4gICAqIEBwYXJhbSBlbnRpdHlJZCDsl5Tti7Dti7AgSURcbiAgICogQHBhcmFtIGVudW1zIOyXtOqxsO2YlSDroIjsnbTruJRcbiAgICogQHJldHVybnMg7IOd7ISx65CcIOy9lOuTnOqwgCDsobTsnqztlZjripTsp4Ag7Jes67aAXG4gICAqL1xuICBhc3luYyBjaGVja0V4aXN0cyhcbiAgICBlbnRpdHlJZDogc3RyaW5nLFxuICAgIGVudW1zOiB7XG4gICAgICBbbmFtZTogc3RyaW5nXTogei5ab2RFbnVtPFJlYWRvbmx5PFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IG51bWJlcj4+PjtcbiAgICB9LFxuICApOiBQcm9taXNlPFJlY29yZDxgJHtUZW1wbGF0ZUtleX0ke3N0cmluZ31gLCBib29sZWFuPj4ge1xuICAgIGNvbnN0IGtleXM6IFRlbXBsYXRlS2V5W10gPSBUZW1wbGF0ZUtleS5vcHRpb25zO1xuICAgIGNvbnN0IG5hbWVzID0gRW50aXR5TWFuYWdlci5nZXROYW1lc0Zyb21JZChlbnRpdHlJZCk7XG4gICAgY29uc3QgZW51bXNLZXlzID0gT2JqZWN0LmtleXMoZW51bXMpLmZpbHRlcigobmFtZSkgPT4gbmFtZSAhPT0gbmFtZXMuY29uc3RhbnQpO1xuXG4gICAgcmV0dXJuIGF3YWl0IHJlZHVjZUFzeW5jKFxuICAgICAga2V5cyxcbiAgICAgIGFzeW5jIChyZXN1bHQsIGtleSkgPT4ge1xuICAgICAgICBjb25zdCB0cGwgPSBUZW1wbGF0ZU1hbmFnZXIuZ2V0KGtleSk7XG4gICAgICAgIGlmIChrZXkuc3RhcnRzV2l0aChcInZpZXdfZW51bXNcIikpIHtcbiAgICAgICAgICBhd2FpdCBtYXBBc3luYyhlbnVtc0tleXMsIGFzeW5jIChjb21wb25lbnRJZCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgeyB0YXJnZXQsIHBhdGg6IHAgfSA9IHRwbC5nZXRUYXJnZXRBbmRQYXRoKG5hbWVzLCBjb21wb25lbnRJZCk7XG4gICAgICAgICAgICByZXN1bHRbYCR7a2V5fV9fJHtjb21wb25lbnRJZH1gXSA9IGF3YWl0IGV4aXN0cyhcbiAgICAgICAgICAgICAgcGF0aC5qb2luKFNvbmFtdS5hcHBSb290UGF0aCwgdGFyZ2V0LCBwKSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHsgdGFyZ2V0LCBwYXRoOiBwIH0gPSB0cGwuZ2V0VGFyZ2V0QW5kUGF0aChuYW1lcyk7XG4gICAgICAgIGNvbnN0IHsgdGFyZ2V0cyB9ID0gU29uYW11LmNvbmZpZy5zeW5jO1xuICAgICAgICBpZiAodGFyZ2V0LmluY2x1ZGVzKFwiOnRhcmdldFwiKSkge1xuICAgICAgICAgIGF3YWl0IG1hcEFzeW5jKHRhcmdldHMsIGFzeW5jICh0KSA9PiB7XG4gICAgICAgICAgICByZXN1bHRbYCR7a2V5fV9fJHt0fWBdID0gYXdhaXQgZXhpc3RzKFxuICAgICAgICAgICAgICBwYXRoLmpvaW4oU29uYW11LmFwcFJvb3RQYXRoLCB0YXJnZXQucmVwbGFjZShcIjp0YXJnZXRcIiwgdCksIHApLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXN1bHRba2V5XSA9IGF3YWl0IGV4aXN0cyhwYXRoLmpvaW4oU29uYW11LmFwcFJvb3RQYXRoLCB0YXJnZXQsIHApKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9LFxuICAgICAge30gYXMgUmVjb3JkPGAke1RlbXBsYXRlS2V5fSR7c3RyaW5nfWAsIGJvb2xlYW4+LFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICog7ZWY7JyE7Zi47ZmY7JqpIO2UhOuhneyLnCDrqZTshozrk5zsnoXri4jri6QuXG4gICAqL1xuICBhc3luYyBjcmVhdGVFbnRpdHkoZm9ybTogVGVtcGxhdGVPcHRpb25zW1wiZW50aXR5XCJdKSB7XG4gICAgcmV0dXJuIGF3YWl0IGNyZWF0ZUVudGl0eShmb3JtKTtcbiAgfVxuXG4gIC8qKlxuICAgKiDtlZjsnITtmLjtmZjsmqkg7ZSE66Gd7IucIOuplOyGjOuTnOyeheuLiOuLpC5cbiAgICovXG4gIGFzeW5jIGRlbEVudGl0eShlbnRpdHlJZDogc3RyaW5nKTogUHJvbWlzZTx7IGRlbFBhdGhzOiBzdHJpbmdbXSB9PiB7XG4gICAgcmV0dXJuIGF3YWl0IGRlbEVudGl0eShlbnRpdHlJZCk7XG4gIH1cblxuICAvKipcbiAgICog7ZWY7JyE7Zi47ZmY7JqpIO2UhOuhneyLnCDrqZTshozrk5zsnoXri4jri6QuXG4gICAqL1xuICBhc3luYyBnZW5lcmF0ZVRlbXBsYXRlPFQgZXh0ZW5kcyBUZW1wbGF0ZUtleT4oXG4gICAga2V5OiBULFxuICAgIHRlbXBsYXRlT3B0aW9uczogVGVtcGxhdGVPcHRpb25zW1RdLFxuICAgIF9nZW5lcmF0ZU9wdGlvbnM/OiBHZW5lcmF0ZU9wdGlvbnMsXG4gICk6IFByb21pc2U8QWJzb2x1dGVQYXRoW10+IHtcbiAgICByZXR1cm4gYXdhaXQgZ2VuZXJhdGVUZW1wbGF0ZShrZXksIHRlbXBsYXRlT3B0aW9ucywgX2dlbmVyYXRlT3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICog7ZWY7JyE7Zi47ZmY7JqpIO2UhOuhneyLnCDrqZTshozrk5zsnoXri4jri6QuXG4gICAqL1xuICBhc3luYyByZW5kZXJUZW1wbGF0ZTxUIGV4dGVuZHMga2V5b2YgVGVtcGxhdGVPcHRpb25zPihcbiAgICBrZXk6IFQsXG4gICAgdGVtcGxhdGVPcHRpb25zOiBUZW1wbGF0ZU9wdGlvbnNbVF0sXG4gICk6IFByb21pc2U8UGF0aEFuZENvZGVbXT4ge1xuICAgIHJldHVybiBhd2FpdCByZW5kZXJUZW1wbGF0ZShrZXksIHRlbXBsYXRlT3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICog7ZWY7JyE7Zi47ZmY7JqpIO2UhOuhneyLnCDrqZTshozrk5zsnoXri4jri6QuXG4gICAqL1xuICBhc3luYyByZW5ld0NoZWNrc3VtcygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gYXdhaXQgcmVuZXdDaGVja3N1bXMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTRChTb25hbXUgRGljdGlvbmFyeSkg7YWc7ZSM66a/7J2EIOyDneyEse2VqeuLiOuLpC5cbiAgICovXG4gIGFzeW5jIHN5bmNTRCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB7IHRhcmdldHMgfSA9IFNvbmFtdS5jb25maWcuc3luYztcbiAgICBjb25zdCBpMThuQ29uZmlnID0gU29uYW11LmNvbmZpZy5pMThuO1xuXG4gICAgY29uc3QgdGFyZ2V0TGlzdCA9IFtcImFwaVwiLCAuLi50YXJnZXRzXSBhcyAoXCJhcGlcIiB8IFwid2ViXCIgfCBcImFwcFwiKVtdO1xuXG4gICAgY29uc3QgYXBpSTE4bkRpciA9IHBhdGguam9pbihTb25hbXUuYXBwUm9vdFBhdGgsIFNvbmFtdS5jb25maWcuYXBpLmRpciwgXCJzcmMvaTE4blwiKTtcblxuICAgIGZvciAoY29uc3QgdGFyZ2V0IG9mIHRhcmdldExpc3QpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIC8vIHdlYi9hcHDsnZgg6rK97JqwIGxvY2FsZSDtjIzsnbzrk6TsnYQgYXBp7JeQ7IScIOuzteyCrFxuICAgICAgICBpZiAodGFyZ2V0ICE9PSBcImFwaVwiKSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5zeW5jTG9jYWxlRmlsZXModGFyZ2V0LCBhcGlJMThuRGlyLCBpMThuQ29uZmlnLnN1cHBvcnRlZExvY2FsZXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgYXdhaXQgZ2VuZXJhdGVUZW1wbGF0ZShcInNkXCIsIHsgdGFyZ2V0IH0sIHsgb3ZlcndyaXRlOiB0cnVlIH0pO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKGBGYWlsZWQgdG8gZ2VuZXJhdGUgU0QgdGVtcGxhdGUgZm9yICR7dGFyZ2V0fTpgLCBlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogYXBp7J2YIGxvY2FsZSDtjIzsnbzsnYQgd2ViL2FwcOycvOuhnCDrs7Xsgqztlanri4jri6QuXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHN5bmNMb2NhbGVGaWxlcyhcbiAgICB0YXJnZXQ6IHN0cmluZyxcbiAgICBhcGlJMThuRGlyOiBzdHJpbmcsXG4gICAgbG9jYWxlczogc3RyaW5nW10sXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHRhcmdldEkxOG5EaXIgPSBwYXRoLmpvaW4oU29uYW11LmFwcFJvb3RQYXRoLCB0YXJnZXQsIFwic3JjL2kxOG5cIik7XG5cbiAgICAvLyDrlJTroInthqDrpqzqsIAg7JeG7Jy866m0IOyDneyEsVxuICAgIGF3YWl0IG1rZGlyKHRhcmdldEkxOG5EaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuXG4gICAgZm9yIChjb25zdCBsb2NhbGUgb2YgbG9jYWxlcykge1xuICAgICAgY29uc3Qgc291cmNlRmlsZSA9IHBhdGguam9pbihhcGlJMThuRGlyLCBgJHtsb2NhbGV9LnRzYCk7XG4gICAgICBjb25zdCB0YXJnZXRGaWxlID0gcGF0aC5qb2luKHRhcmdldEkxOG5EaXIsIGAke2xvY2FsZX0udHNgKTtcblxuICAgICAgY29uc3Qgc3luY0hlYWRlciA9IFtcbiAgICAgICAgXCIvKipcIixcbiAgICAgICAgXCIgKiBAZ2VuZXJhdGVkXCIsXG4gICAgICAgIFwiICogQVBJ7JeQ7IScIOuPmeq4sO2ZlOuQnCDtjIzsnbzsnoXri4jri6QuIOyngeygkSDsiJjsoJXtlZjsp4Ag66eI7IS47JqULlwiLFxuICAgICAgICBcIiAqL1wiLFxuICAgICAgXS5qb2luKFwiXFxuXCIpO1xuICAgICAgYXdhaXQgY29weUZpbGVXaXRoUmVwbGFjZUNvcmVUb1NoYXJlZChzb3VyY2VGaWxlLCB0YXJnZXRGaWxlLCBzeW5jSGVhZGVyKTtcbiAgICAgICFpc1Rlc3QoKSAmJlxuICAgICAgICBjb25zb2xlLmxvZyhjaGFsay5ib2xkKFwiQ29waWVkOiBcIikgKyBjaGFsay5jeWFuKGAke3RhcmdldH0vc3JjL2kxOG4vJHtsb2NhbGV9LnRzYCkpO1xuICAgIH1cbiAgfVxufVxuIl0sIm5hbWVzIjpbImhvdCIsImFzc2VydCIsImNoYWxrIiwiRXZlbnRFbWl0dGVyIiwibWtkaXIiLCJyZWFkRmlsZSIsIndyaXRlRmlsZSIsImluZmxlY3Rpb24iLCJtaW5pbWF0Y2giLCJwYXRoIiwiZ3JvdXAiLCJ1bmlxdWUiLCJyZWdpc3RlcmVkQXBpcyIsIlNvbmFtdSIsIkVudGl0eU1hbmFnZXIiLCJBbHJlYWR5UHJvY2Vzc2VkRXhjZXB0aW9uIiwiTmFpdGUiLCJUZW1wbGF0ZU1hbmFnZXIiLCJUZW1wbGF0ZUtleSIsIm1hcEFzeW5jIiwicmVkdWNlQXN5bmMiLCJjZW50ZXJUZXh0IiwiaXNUZXN0IiwiY29weUZpbGVXaXRoUmVwbGFjZUNvcmVUb1NoYXJlZCIsImV4aXN0cyIsInJ1bldpdGhHcmFjZWZ1bFNodXRkb3duIiwiZmluZENoYW5nZWRGaWxlc1VzaW5nQ2hlY2tzdW1zIiwicmVuZXdDaGVja3N1bXMiLCJnZW5lcmF0ZVRlbXBsYXRlIiwicmVuZGVyVGVtcGxhdGUiLCJjcmVhdGVFbnRpdHkiLCJkZWxFbnRpdHkiLCJjaGVja3N1bVBhdHRlcm5Hcm91cCIsImdldENoZWNrc3VtUGF0dGVybkdyb3VwSW5BYnNvbHV0ZVBhdGgiLCJsb2FkQXBpcyIsImxvYWRNb2RlbHMiLCJsb2FkVHlwZXMiLCJsb2FkV29ya2Zsb3dzIiwiU3luY2VyQWN0aW9ucyIsIlN5bmNlciIsImFwaXMiLCJ0eXBlcyIsIm1vZGVscyIsIndvcmtmbG93cyIsIk1hcCIsImV2ZW50RW1pdHRlciIsInN5bmMiLCJ0YXJnZXRzIiwiY29uZmlnIiwiY29weVNoYXJlZFRvVGFyZ2V0cyIsImNoYW5nZWRGaWxlcyIsImxlbmd0aCIsImNvbnNvbGUiLCJsb2ciLCJibGFjayIsImJnR3JlZW4iLCJvdmVyd3JpdGUiLCJlIiwiZXJyb3IiLCJkb1N5bmNBY3Rpb25zIiwid2hlblRoaXNIYXBwZW5zIiwid2FpdEZvclVwVG8iLCJzeW5jRnJvbVdhdGNoZXIiLCJldmVudCIsImRpZmZGaWxlUGF0aCIsImluY2x1ZGVzIiwiYm9sZCIsInllbGxvdyIsImludmFsaWRhdGVGaWxlIiwiYXV0b2xvYWRTU1JSb3V0ZXMiLCJlbWl0IiwiaW52YWxpZGF0ZWRQYXRocyIsImludmFsaWRhdGVkUGF0aCIsInJlbW92ZWRBcGlzIiwicmVtb3ZlSW52YWxpZGF0ZWRSZWdpc3RlcmVkQXBpcyIsImJsdWUiLCJyZWxhdGl2ZSIsImFwaVJvb3RQYXRoIiwiZ3JheSIsInJlZCIsInRlc3QiLCJkZXZSdW5uZXIiLCJlbmFibGVkIiwiZGV2Vml0ZXN0TWFuYWdlciIsImludmFsaWRhdGVGaWxlcyIsImRpbSIsImlzSW5DaGVja1BhdHRlcm5Hcm91cCIsIk9iamVjdCIsInZhbHVlcyIsInNvbWUiLCJwYXR0ZXJuIiwiYXV0b2xvYWRUeXBlcyIsImF1dG9sb2FkTW9kZWxzIiwiYXV0b2xvYWRBcGlzIiwiYXV0b2xvYWRXb3JrZmxvd3MiLCJlbmRzV2l0aCIsImVudGl0eUlkIiwiZ2V0RW50aXR5SWRGcm9tUGF0aCIsInRvUmVtb3ZlIiwiZmlsdGVyIiwiYXBpIiwibW9kZWxOYW1lIiwiaWR4IiwiaW5kZXhPZiIsInNwbGljZSIsImRpY3RVdGlsc1BhdGgiLCJqb2luIiwiZGlybmFtZSIsInJlcGxhY2UiLCJkaWN0VXRpbHNDb2RlIiwiY29udmVydE1hcCIsImJhc2VVcmwiLCJzZXJ2ZXIiLCJsaXN0ZW4iLCJob3N0IiwicG9ydCIsImRpY3RVdGlscyIsInRhcmdldCIsInNyY1BhdGgiLCJhcHBSb290UGF0aCIsIkVycm9yIiwiZnVsbFRleHQiLCJjb252ZXJ0ZWRUZXh0IiwiZW50cmllcyIsInJlZHVjZSIsImFjYyIsImtleSIsInZhbHVlIiwiZGVzdFBhdGgiLCJyZWN1cnNpdmUiLCJ3YXJuIiwic3luY2hyb25pemUiLCJzc3JDb25maWdQYXRoIiwiY2xlYXJTU1JSb3V0ZXMiLCJnbG9iQXN5bmMiLCJpbXBvcnRNZW1iZXJzIiwicnVudGltZVBhdGgiLCJmaWxlcyIsImZpbGUiLCJkaWZmRmlsZVBhdGhzIiwiZGlmZkdyb3VwcyIsImNhbGN1bGF0ZURpZmZHcm91cHMiLCJkaWZmVHlwZXMiLCJrZXlzIiwiaGFuZGxlVHJ1dGhTb3VyY2VDaGFuZ2VzIiwiaGFuZGxlU3luY2FibGVGaWxlQ2hhbmdlcyIsImhhbmRsZUltcGxlbWVudGF0aW9uQ2hhbmdlcyIsImFjdGlvblN5bmNDb25maWciLCJzeW5jU0QiLCJkaWZmRmlsZXMiLCJmaWxlVHlwZXMiLCJmaWxlUGF0aCIsInNyY0luZGV4IiwicmVsYXRpdmVQYXRoIiwic2xpY2UiLCJmaWxlVHlwZSIsInQiLCJyZWxvYWQiLCJlbnRpdHlQYXRoIiwiZW50aXR5IiwiYXQiLCJ1bmRlZmluZWQiLCJnZXQiLCJ0eXBlRmlsZVBhdGgiLCJuYW1lcyIsImZzIiwicGFyZW50SWQiLCJhY3Rpb25HZW5lcmF0ZVNjaGVtYXMiLCJnZW5lcmF0ZWQiLCJwdXNoIiwidHNQYXRocyIsImZ1bmN0aW9ucyIsImFjdGlvblN5bmNGaWxlc1RvVGFyZ2V0cyIsIm1lcmdlZEdyb3VwIiwibW9kZWwiLCJmcmFtZSIsInBhcmFtcyIsIm1hcCIsIm1vZGVsUGF0aCIsIm5hbWVzUmVjb3JkIiwiZ2V0TmFtZXNGcm9tSWQiLCJmcmFtZU5hbWUiLCJtYXRjaCIsImZyYW1lSWQiLCJjYW1lbGl6ZSIsImFjdGlvbkdlbmVyYXRlU2VydmljZXMiLCJhY3Rpb25HZW5lcmF0ZUh0dHBzIiwiYWN0aW9uR2VuZXJhdGVTc3IiLCJjaGVja0V4aXN0c0dlbkNvZGUiLCJ0ZW1wbGF0ZUtleSIsImVudW1JZCIsImdlblBhdGgiLCJnZXRUYXJnZXRBbmRQYXRoIiwic3ViUGF0aCIsImZ1bGxQYXRoIiwiaXNFeGlzdHMiLCJjaGVja0V4aXN0cyIsImVudW1zIiwib3B0aW9ucyIsImVudW1zS2V5cyIsIm5hbWUiLCJjb25zdGFudCIsInJlc3VsdCIsInRwbCIsInN0YXJ0c1dpdGgiLCJjb21wb25lbnRJZCIsInAiLCJmb3JtIiwidGVtcGxhdGVPcHRpb25zIiwiX2dlbmVyYXRlT3B0aW9ucyIsImkxOG5Db25maWciLCJpMThuIiwidGFyZ2V0TGlzdCIsImFwaUkxOG5EaXIiLCJkaXIiLCJzeW5jTG9jYWxlRmlsZXMiLCJzdXBwb3J0ZWRMb2NhbGVzIiwibG9jYWxlcyIsInRhcmdldEkxOG5EaXIiLCJsb2NhbGUiLCJzb3VyY2VGaWxlIiwidGFyZ2V0RmlsZSIsInN5bmNIZWFkZXIiLCJjeWFuIl0sIm1hcHBpbmdzIjoiQUFBQSxTQUFTQSxHQUFHLFFBQVEsdUJBQXVCO0FBQzNDLE9BQU9DLFlBQVksU0FBUztBQUM1QixPQUFPQyxXQUFXLFFBQVE7QUFDMUIsU0FBU0MsWUFBWSxRQUFRLFNBQVM7QUFDdEMsU0FBU0MsS0FBSyxFQUFFQyxRQUFRLEVBQUVDLFNBQVMsUUFBUSxtQkFBYztBQUN6RCxPQUFPQyxnQkFB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
@@ -1 +1 @@
1
- {"version":3,"file":"dev-test-routes.d.ts","sourceRoot":"","sources":["../../src/testing/dev-test-routes.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAE/C,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAqJ3D,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,eAAe,EACvB,MAAM,EAAE,qBAAqB,GAC5B,OAAO,CAAC,IAAI,CAAC,CA+Hf"}
1
+ {"version":3,"file":"dev-test-routes.d.ts","sourceRoot":"","sources":["../../src/testing/dev-test-routes.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAE/C,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAqJ3D,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,eAAe,EACvB,MAAM,EAAE,qBAAqB,GAC5B,OAAO,CAAC,IAAI,CAAC,CAkIf"}
@@ -175,7 +175,10 @@ export async function registerDevTestRoutes(server, config) {
175
175
  sse.publish(key, data);
176
176
  };
177
177
  manager.addEventListener(listener);
178
+ let cleaned = false;
178
179
  const cleanup = ()=>{
180
+ if (cleaned) return;
181
+ cleaned = true;
179
182
  clearInterval(heartbeatTimer);
180
183
  manager.removeEventListener(listener);
181
184
  };
@@ -256,4 +259,4 @@ export async function registerDevTestRoutes(server, config) {
256
259
  });
257
260
  }
258
261
 
259
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90ZXN0aW5nL2Rldi10ZXN0LXJvdXRlcy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyByYW5kb21VVUlEIH0gZnJvbSBcImNyeXB0b1wiO1xuaW1wb3J0IHR5cGUgeyBGYXN0aWZ5SW5zdGFuY2UgfSBmcm9tIFwiZmFzdGlmeVwiO1xuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIjtcbmltcG9ydCB0eXBlIHsgU29uYW11RGV2UnVubmVyQ29uZmlnIH0gZnJvbSBcIi4uL2FwaS9jb25maWdcIjtcbmltcG9ydCB7IFNvbmFtdSB9IGZyb20gXCIuLi9hcGkvc29uYW11XCI7XG5pbXBvcnQgdHlwZSB7IFNlcmlhbGl6ZWRUcmFjZSB9IGZyb20gXCIuLi9uYWl0ZS9uYWl0ZVwiO1xuaW1wb3J0IHsgY3JlYXRlU1NFRmFjdG9yeSwgdHlwZSBTU0VDb25uZWN0aW9uIH0gZnJvbSBcIi4uL3N0cmVhbS9zc2VcIjtcbmltcG9ydCB0eXBlIHsgTWFuYWdlclN0YXR1cywgUnVuUmVzdWx0LCBUZXN0Q2FzZVJlc3VsdCB9IGZyb20gXCIuL2Rldi12aXRlc3QtbWFuYWdlclwiO1xuaW1wb3J0IHsgRGV2Vml0ZXN0TWFuYWdlciB9IGZyb20gXCIuL2Rldi12aXRlc3QtbWFuYWdlclwiO1xuXG5jb25zdCBTQ0hFTUFfVkVSU0lPTiA9IDE7XG5jb25zdCBIRUFSVEJFQVRfSU5URVJWQUxfTVMgPSAzMF8wMDA7XG5cbmNvbnN0IFNlcmlhbGl6ZWRUcmFjZVNjaGVtYSA9IHoub2JqZWN0KHtcbiAga2V5OiB6LnN0cmluZygpLFxuICB2YWx1ZTogei51bmtub3duKCksXG4gIGZpbGVQYXRoOiB6LnN0cmluZygpLFxuICBsaW5lTnVtYmVyOiB6Lm51bWJlcigpLFxuICBhdDogei5zdHJpbmcoKSxcbn0pO1xuXG5jb25zdCBUZXN0Q2FzZVJlc3VsdFNjaGVtYTogei5ab2RUeXBlPFRlc3RDYXNlUmVzdWx0PiA9IHoubGF6eSgoKSA9PlxuICB6Lm9iamVjdCh7XG4gICAgaWQ6IHouc3RyaW5nKCksXG4gICAga2luZDogei5lbnVtKFtcImZpbGVcIiwgXCJzdWl0ZVwiLCBcInRlc3RcIl0pLFxuICAgIG5hbWU6IHouc3RyaW5nKCksXG4gICAgZnVsbE5hbWU6IHouc3RyaW5nKCksXG4gICAgZmlsZTogei5zdHJpbmcoKSxcbiAgICBzdGF0ZTogei5lbnVtKFtcInBhc3NlZFwiLCBcImZhaWxlZFwiLCBcInNraXBwZWRcIiwgXCJ0b2RvXCIsIFwicnVubmluZ1wiLCBcInVua25vd25cIl0pLFxuICAgIGR1cmF0aW9uTXM6IHoubnVtYmVyKCkubnVsbGFibGUoKSxcbiAgICBjb3VudHM6IHoub2JqZWN0KHtcbiAgICAgIHRvdGFsOiB6Lm51bWJlcigpLFxuICAgICAgcGFzc2VkOiB6Lm51bWJlcigpLFxuICAgICAgZmFpbGVkOiB6Lm51bWJlcigpLFxuICAgICAgc2tpcHBlZDogei5udW1iZXIoKSxcbiAgICB9KSxcbiAgICBlcnJvcjogelxuICAgICAgLm9iamVjdCh7XG4gICAgICAgIG1lc3NhZ2U6IHouc3RyaW5nKCksXG4gICAgICAgIHN0YWNrOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgICB9KVxuICAgICAgLm51bGxhYmxlKCksXG4gICAgdHJhY2VzOiB6LmFycmF5KFNlcmlhbGl6ZWRUcmFjZVNjaGVtYSksXG4gICAgY2hpbGRyZW46IHouYXJyYXkoVGVzdENhc2VSZXN1bHRTY2hlbWEpLFxuICB9KSxcbik7XG5cbmNvbnN0IFRlc3RFdmVudFNjaGVtYSA9IHoub2JqZWN0KHtcbiAgc25hcHNob3Q6IHoub2JqZWN0KHtcbiAgICBzY2hlbWFWZXJzaW9uOiB6Lm51bWJlcigpLFxuICAgIHNlcnZlclRpbWU6IHouc3RyaW5nKCksXG4gICAgc3RhdHVzOiB6Lm9iamVjdCh7XG4gICAgICByZWFkeTogei5ib29sZWFuKCksXG4gICAgICBydW5uaW5nOiB6LmJvb2xlYW4oKSxcbiAgICAgIGxhc3RSdW5BdDogei5zdHJpbmcoKS5udWxsYWJsZSgpLFxuICAgIH0pLFxuICB9KSxcbiAgcnVuUXVldWVkOiB6Lm9iamVjdCh7XG4gICAgc2NoZW1hVmVyc2lvbjogei5udW1iZXIoKSxcbiAgICBydW5JZDogei5zdHJpbmcoKSxcbiAgICBxdWV1ZWRBdDogei5zdHJpbmcoKSxcbiAgICByZXF1ZXN0OiB6Lm9iamVjdCh7XG4gICAgICBmaWxlczogei5hcnJheSh6LnN0cmluZygpKS5vcHRpb25hbCgpLFxuICAgICAgcGF0dGVybjogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIH0pLFxuICB9KSxcbiAgcnVuU3RhcnRlZDogei5vYmplY3Qoe1xuICAgIHNjaGVtYVZlcnNpb246IHoubnVtYmVyKCksXG4gICAgcnVuSWQ6IHouc3RyaW5nKCksXG4gICAgc3RhcnRlZEF0OiB6LnN0cmluZygpLFxuICB9KSxcbiAgcnVuQ29tcGxldGVkOiB6Lm9iamVjdCh7XG4gICAgc2NoZW1hVmVyc2lvbjogei5udW1iZXIoKSxcbiAgICBydW5JZDogei5zdHJpbmcoKSxcbiAgICBzdGFydGVkQXQ6IHouc3RyaW5nKCksXG4gICAgZmluaXNoZWRBdDogei5zdHJpbmcoKSxcbiAgICByZXN1bHQ6IHoucmVjb3JkKHouc3RyaW5nKCksIHoudW5rbm93bigpKSxcbiAgfSksXG4gIHJ1bkVycm9yZWQ6IHoub2JqZWN0KHtcbiAgICBzY2hlbWFWZXJzaW9uOiB6Lm51bWJlcigpLFxuICAgIHJ1bklkOiB6LnN0cmluZygpLFxuICAgIGZpbmlzaGVkQXQ6IHouc3RyaW5nKCksXG4gICAgZXJyb3I6IHoub2JqZWN0KHtcbiAgICAgIG1lc3NhZ2U6IHouc3RyaW5nKCksXG4gICAgICBzdGFjazogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIH0pLFxuICB9KSxcbiAgcnVuTm9kZVByb2dyZXNzOiB6Lm9iamVjdCh7XG4gICAgc2NoZW1hVmVyc2lvbjogei5saXRlcmFsKDEpLFxuICAgIHJ1bklkOiB6LnN0cmluZygpLFxuICAgIHN0YXJ0ZWRBdDogei5zdHJpbmcoKSxcbiAgICBhdDogei5zdHJpbmcoKSxcbiAgICBraW5kOiB6LmVudW0oW1wiZmlsZVwiLCBcInN1aXRlXCIsIFwidGVzdFwiXSksXG4gICAgcGhhc2U6IHouZW51bShbXCJyZWFkeVwiLCBcInJlc3VsdFwiXSksXG4gICAgZmlsZUlkOiB6LnN0cmluZygpLFxuICAgIG5vZGVJZDogei5zdHJpbmcoKSxcbiAgICBwYXJlbnRJZDogei5zdHJpbmcoKS5udWxsYWJsZSgpLFxuICAgIG5vZGU6IFRlc3RDYXNlUmVzdWx0U2NoZW1hLFxuICB9KSxcbiAgaGVhcnRiZWF0OiB6Lm9iamVjdCh7XG4gICAgc2NoZW1hVmVyc2lvbjogei5udW1iZXIoKSxcbiAgICBhdDogei5zdHJpbmcoKSxcbiAgfSksXG59KTtcblxudHlwZSBUZXN0RXZlbnRzID0gei5pbmZlcjx0eXBlb2YgVGVzdEV2ZW50U2NoZW1hPjtcblxuZnVuY3Rpb24gdG9QYXRoUHJlZml4KGJhc2VQYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gYmFzZVBhdGguZW5kc1dpdGgoXCIvXCIpID8gYmFzZVBhdGggOiBgJHtiYXNlUGF0aH0vYDtcbn1cblxuZnVuY3Rpb24gcmVsYXRpdml6ZVRyYWNlKHRyYWNlOiBTZXJpYWxpemVkVHJhY2UsIHByZWZpeDogc3RyaW5nKTogU2VyaWFsaXplZFRyYWNlIHtcbiAgcmV0dXJuIHsgLi4udHJhY2UsIGZpbGVQYXRoOiB0cmFjZS5maWxlUGF0aC5yZXBsYWNlKHByZWZpeCwgXCJcIikgfTtcbn1cblxuZnVuY3Rpb24gcmVsYXRpdml6ZU5vZGUobm9kZTogVGVzdENhc2VSZXN1bHQsIGJhc2VQYXRoOiBzdHJpbmcpOiBUZXN0Q2FzZVJlc3VsdCB7XG4gIGNvbnN0IHByZWZpeCA9IHRvUGF0aFByZWZpeChiYXNlUGF0aCk7XG4gIHJldHVybiB7XG4gICAgLi4ubm9kZSxcbiAgICBuYW1lOiBub2RlLm5hbWUucmVwbGFjZShwcmVmaXgsIFwiXCIpLFxuICAgIGZpbGU6IG5vZGUuZmlsZS5yZXBsYWNlKHByZWZpeCwgXCJcIiksXG4gICAgdHJhY2VzOiBub2RlLnRyYWNlcy5tYXAoKHQpID0+IHJlbGF0aXZpemVUcmFjZSh0LCBwcmVmaXgpKSxcbiAgICBjaGlsZHJlbjogbm9kZS5jaGlsZHJlbi5tYXAoKGMpID0+IHJlbGF0aXZpemVOb2RlKGMsIHByZWZpeCkpLFxuICB9O1xufVxuXG5mdW5jdGlvbiBpc1J1bk5vZGVQcm9ncmVzc0RhdGEoZGF0YTogdW5rbm93bik6IGRhdGEgaXMgVGVzdEV2ZW50c1tcInJ1bk5vZGVQcm9ncmVzc1wiXSB7XG4gIGlmICh0eXBlb2YgZGF0YSAhPT0gXCJvYmplY3RcIiB8fCBkYXRhID09PSBudWxsKSByZXR1cm4gZmFsc2U7XG4gIGNvbnN0IGQgPSBkYXRhIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICByZXR1cm4gKFxuICAgIGQuc2NoZW1hVmVyc2lvbiA9PT0gMSAmJlxuICAgIHR5cGVvZiBkLnJ1bklkID09PSBcInN0cmluZ1wiICYmXG4gICAgdHlwZW9mIGQuc3RhcnRlZEF0ID09PSBcInN0cmluZ1wiICYmXG4gICAgdHlwZW9mIGQuYXQgPT09IFwic3RyaW5nXCIgJiZcbiAgICAoZC5raW5kID09PSBcImZpbGVcIiB8fCBkLmtpbmQgPT09IFwic3VpdGVcIiB8fCBkLmtpbmQgPT09IFwidGVzdFwiKSAmJlxuICAgIChkLnBoYXNlID09PSBcInJlYWR5XCIgfHwgZC5waGFzZSA9PT0gXCJyZXN1bHRcIikgJiZcbiAgICB0eXBlb2YgZC5maWxlSWQgPT09IFwic3RyaW5nXCIgJiZcbiAgICB0eXBlb2YgZC5ub2RlSWQgPT09IFwic3RyaW5nXCIgJiZcbiAgICAoZC5wYXJlbnRJZCA9PT0gbnVsbCB8fCB0eXBlb2YgZC5wYXJlbnRJZCA9PT0gXCJzdHJpbmdcIikgJiZcbiAgICB0eXBlb2YgZC5ub2RlID09PSBcIm9iamVjdFwiICYmXG4gICAgZC5ub2RlICE9PSBudWxsXG4gICk7XG59XG5cbmZ1bmN0aW9uIHJlbGF0aXZpemVSZXN1bHQocmVzdWx0OiBSdW5SZXN1bHQsIGJhc2VQYXRoOiBzdHJpbmcpOiBSdW5SZXN1bHQge1xuICBjb25zdCBwcmVmaXggPSB0b1BhdGhQcmVmaXgoYmFzZVBhdGgpO1xuICByZXR1cm4ge1xuICAgIC4uLnJlc3VsdCxcbiAgICByZXN1bHRzOiByZXN1bHQucmVzdWx0cy5tYXAoKG4pID0+IHJlbGF0aXZpemVOb2RlKG4sIHByZWZpeCkpLFxuICB9O1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVnaXN0ZXJEZXZUZXN0Um91dGVzKFxuICBzZXJ2ZXI6IEZhc3RpZnlJbnN0YW5jZSxcbiAgY29uZmlnOiBTb25hbXVEZXZSdW5uZXJDb25maWcsXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgcHJlZml4ID0gY29uZmlnLnJvdXRlUHJlZml4ID8/IFwiL19fdGVzdF9fXCI7XG5cbiAgY29uc3QgbWFuYWdlciA9IG5ldyBEZXZWaXRlc3RNYW5hZ2VyKCk7XG4gIGF3YWl0IG1hbmFnZXIuc3RhcnQoY29uZmlnLnZpdGVzdENvbmZpZ1BhdGgpO1xuICBTb25hbXUuZGV2Vml0ZXN0TWFuYWdlciA9IG1hbmFnZXI7XG5cbiAgY29uc3Qgc3NlQXZhaWxhYmxlID0gISFTb25hbXUuY29uZmlnLnNlcnZlci5wbHVnaW5zPy5zc2U7XG5cbiAgaWYgKHNzZUF2YWlsYWJsZSkge1xuICAgIHNlcnZlci5nZXQoYCR7cHJlZml4fS9ldmVudHNgLCAocmVxdWVzdCwgcmVwbHkpOiB2b2lkID0+IHtcbiAgICAgIGNvbnN0IHNzZTogU1NFQ29ubmVjdGlvbjx0eXBlb2YgVGVzdEV2ZW50U2NoZW1hPiA9IGNyZWF0ZVNTRUZhY3RvcnkoXG4gICAgICAgIHJlcXVlc3Quc29ja2V0LFxuICAgICAgICByZXBseSxcbiAgICAgICAgVGVzdEV2ZW50U2NoZW1hLFxuICAgICAgKTtcblxuICAgICAgY29uc3Qgc3RhdHVzOiBNYW5hZ2VyU3RhdHVzID0gbWFuYWdlci5nZXRTdGF0dXMoKTtcbiAgICAgIHNzZS5wdWJsaXNoKFwic25hcHNob3RcIiwge1xuICAgICAgICBzY2hlbWFWZXJzaW9uOiBTQ0hFTUFfVkVSU0lPTixcbiAgICAgICAgc2VydmVyVGltZTogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgICBzdGF0dXMsXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgaGVhcnRiZWF0VGltZXIgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICAgIHNzZS5wdWJsaXNoKFwiaGVhcnRiZWF0XCIsIHtcbiAgICAgICAgICBzY2hlbWFWZXJzaW9uOiBTQ0hFTUFfVkVSU0lPTixcbiAgICAgICAgICBhdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgICB9KTtcbiAgICAgIH0sIEhFQVJUQkVBVF9JTlRFUlZBTF9NUyk7XG5cbiAgICAgIGNvbnN0IGJhc2VQYXRoID0gU29uYW11LmFwaVJvb3RQYXRoO1xuICAgICAgY29uc3QgbGlzdGVuZXIgPSAoZXZlbnQ6IHN0cmluZywgZGF0YTogdW5rbm93bikgPT4ge1xuICAgICAgICBjb25zdCBrZXkgPSBldmVudCBhcyBrZXlvZiBUZXN0RXZlbnRzO1xuICAgICAgICBpZiAoa2V5ID09PSBcInJ1bk5vZGVQcm9ncmVzc1wiKSB7XG4gICAgICAgICAgaWYgKCFpc1J1bk5vZGVQcm9ncmVzc0RhdGEoZGF0YSkpIHJldHVybjtcbiAgICAgICAgICBjb25zdCByZWxhdGl2aXplZCA9IHtcbiAgICAgICAgICAgIC4uLmRhdGEsXG4gICAgICAgICAgICBub2RlOiByZWxhdGl2aXplTm9kZShkYXRhLm5vZGUsIGJhc2VQYXRoKSxcbiAgICAgICAgICB9O1xuICAgICAgICAgIHNzZS5wdWJsaXNoKGtleSwgcmVsYXRpdml6ZWQpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBzc2UucHVibGlzaChrZXksIGRhdGEgYXMgVGVzdEV2ZW50c1t0eXBlb2Yga2V5XSk7XG4gICAgICB9O1xuICAgICAgbWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGxpc3RlbmVyKTtcblxuICAgICAgY29uc3QgY2xlYW51cCA9ICgpID0+IHtcbiAgICAgICAgY2xlYXJJbnRlcnZhbChoZWFydGJlYXRUaW1lcik7XG4gICAgICAgIG1hbmFnZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcihsaXN0ZW5lcik7XG4gICAgICB9O1xuICAgICAgcmVxdWVzdC5zb2NrZXQub24oXCJjbG9zZVwiLCBjbGVhbnVwKTtcbiAgICAgIHJlcXVlc3Quc29ja2V0Lm9uKFwiZXJyb3JcIiwgY2xlYW51cCk7XG4gICAgfSk7XG4gIH1cblxuICBzZXJ2ZXIucG9zdChgJHtwcmVmaXh9L3J1bmAsIGFzeW5jIChyZXF1ZXN0LCByZXBseSkgPT4ge1xuICAgIGlmICghU29uYW11LmRldlZpdGVzdE1hbmFnZXIpIHtcbiAgICAgIHJlcGx5LnN0YXR1cyg1MDMpO1xuICAgICAgcmV0dXJuIHsgb2s6IGZhbHNlLCBlcnJvcjogXCJEZXZWaXRlc3RNYW5hZ2VyIGlzIG5vdCBpbml0aWFsaXplZFwiIH07XG4gICAgfVxuXG4gICAgY29uc3QgcnVuSWQgPSByYW5kb21VVUlEKCk7XG4gICAgY29uc3QgYm9keSA9IHJlcXVlc3QuYm9keSBhcyB7IGZpbGVzPzogc3RyaW5nW107IHBhdHRlcm4/OiBzdHJpbmcgfSB8IG51bGw7XG4gICAgY29uc3QgcnVuUmVxdWVzdCA9IHtcbiAgICAgIGZpbGVzOiBib2R5Py5maWxlcyxcbiAgICAgIHBhdHRlcm46IGJvZHk/LnBhdHRlcm4sXG4gICAgfTtcblxuICAgIG1hbmFnZXIuZW1pdEV2ZW50KFwicnVuUXVldWVkXCIsIHtcbiAgICAgIHNjaGVtYVZlcnNpb246IFNDSEVNQV9WRVJTSU9OLFxuICAgICAgcnVuSWQsXG4gICAgICBxdWV1ZWRBdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgcmVxdWVzdDogcnVuUmVxdWVzdCxcbiAgICB9KTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBzdGFydGVkQXQgPSBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCk7XG4gICAgICBtYW5hZ2VyLmVtaXRFdmVudChcInJ1blN0YXJ0ZWRcIiwge1xuICAgICAgICBzY2hlbWFWZXJzaW9uOiBTQ0hFTUFfVkVSU0lPTixcbiAgICAgICAgcnVuSWQsXG4gICAgICAgIHN0YXJ0ZWRBdCxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCByYXdSZXN1bHQ6IFJ1blJlc3VsdCA9IGF3YWl0IFNvbmFtdS5kZXZWaXRlc3RNYW5hZ2VyLnJ1bihydW5SZXF1ZXN0LCBydW5JZCk7XG4gICAgICBjb25zdCByZXN1bHQgPSByZWxhdGl2aXplUmVzdWx0KHJhd1Jlc3VsdCwgU29uYW11LmFwaVJvb3RQYXRoKTtcblxuICAgICAgY29uc3QgZmluaXNoZWRBdCA9IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKTtcbiAgICAgIG1hbmFnZXIuZW1pdEV2ZW50KFwicnVuQ29tcGxldGVkXCIsIHtcbiAgICAgICAgc2NoZW1hVmVyc2lvbjogU0NIRU1BX1ZFUlNJT04sXG4gICAgICAgIHJ1bklkLFxuICAgICAgICBzdGFydGVkQXQsXG4gICAgICAgIGZpbmlzaGVkQXQsXG4gICAgICAgIHJlc3VsdCxcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY29uc3QgZmluaXNoZWRBdCA9IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKTtcbiAgICAgIG1hbmFnZXIuZW1pdEV2ZW50KFwicnVuRXJyb3JlZFwiLCB7XG4gICAgICAgIHNjaGVtYVZlcnNpb246IFNDSEVNQV9WRVJTSU9OLFxuICAgICAgICBydW5JZCxcbiAgICAgICAgZmluaXNoZWRBdCxcbiAgICAgICAgZXJyb3I6IHtcbiAgICAgICAgICBtZXNzYWdlOiBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogU3RyaW5nKGVyciksXG4gICAgICAgICAgc3RhY2s6IGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLnN0YWNrIDogdW5kZWZpbmVkLFxuICAgICAgICB9LFxuICAgICAgfSk7XG5cbiAgICAgIHJlcGx5LnN0YXR1cyg1MDApO1xuICAgICAgcmV0dXJuIHsgb2s6IGZhbHNlLCBlcnJvcjogZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IFN0cmluZyhlcnIpIH07XG4gICAgfVxuICB9KTtcblxuICBzZXJ2ZXIuZ2V0KGAke3ByZWZpeH0vc3RhdHVzYCwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHN0YXR1czogTWFuYWdlclN0YXR1cyA9IFNvbmFtdS5kZXZWaXRlc3RNYW5hZ2VyPy5nZXRTdGF0dXMoKSA/PyB7XG4gICAgICByZWFkeTogZmFsc2UsXG4gICAgICBydW5uaW5nOiBmYWxzZSxcbiAgICAgIGxhc3RSdW5BdDogbnVsbCxcbiAgICB9O1xuICAgIHJldHVybiB7IC4uLnN0YXR1cywgc3NlQXZhaWxhYmxlIH07XG4gIH0pO1xuXG4gIHNlcnZlci5hZGRIb29rKFwib25DbG9zZVwiLCBhc3luYyAoKSA9PiB7XG4gICAgYXdhaXQgU29uYW11LmRldlZpdGVzdE1hbmFnZXI/LnNodXRkb3duKCk7XG4gICAgU29uYW11LmRldlZpdGVzdE1hbmFnZXIgPSBudWxsO1xuICB9KTtcbn1cbiJdLCJuYW1lcyI6WyJyYW5kb21VVUlEIiwieiIsIlNvbmFtdSIsImNyZWF0ZVNTRUZhY3RvcnkiLCJEZXZWaXRlc3RNYW5hZ2VyIiwiU0NIRU1BX1ZFUlNJT04iLCJIRUFSVEJFQVRfSU5URVJWQUxfTVMiLCJTZXJpYWxpemVkVHJhY2VTY2hlbWEiLCJvYmplY3QiLCJrZXkiLCJzdHJpbmciLCJ2YWx1ZSIsInVua25vd24iLCJmaWxlUGF0aCIsImxpbmVOdW1iZXIiLCJudW1iZXIiLCJhdCIsIlRlc3RDYXNlUmVzdWx0U2NoZW1hIiwibGF6eSIsImlkIiwia2luZCIsImVudW0iLCJuYW1lIiwiZnVsbE5hbWUiLCJmaWxlIiwic3RhdGUiLCJkdXJhdGlvbk1zIiwibnVsbGFibGUiLCJjb3VudHMiLCJ0b3RhbCIsInBhc3NlZCIsImZhaWxlZCIsInNraXBwZWQiLCJlcnJvciIsIm1lc3NhZ2UiLCJzdGFjayIsIm9wdGlvbmFsIiwidHJhY2VzIiwiYXJyYXkiLCJjaGlsZHJlbiIsIlRlc3RFdmVudFNjaGVtYSIsInNuYXBzaG90Iiwic2NoZW1hVmVyc2lvbiIsInNlcnZlclRpbWUiLCJzdGF0dXMiLCJyZWFkeSIsImJvb2xlYW4iLCJydW5uaW5nIiwibGFzdFJ1bkF0IiwicnVuUXVldWVkIiwicnVuSWQiLCJxdWV1ZWRBdCIsInJlcXVlc3QiLCJmaWxlcyIsInBhdHRlcm4iLCJydW5TdGFydGVkIiwic3RhcnRlZEF0IiwicnVuQ29tcGxldGVkIiwiZmluaXNoZWRBdCIsInJlc3VsdCIsInJlY29yZCIsInJ1bkVycm9yZWQiLCJydW5Ob2RlUHJvZ3Jlc3MiLCJsaXRlcmFsIiwicGhhc2UiLCJmaWxlSWQiLCJub2RlSWQiLCJwYXJlbnRJZCIsIm5vZGUiLCJoZWFydGJlYXQiLCJ0b1BhdGhQcmVmaXgiLCJiYXNlUGF0aCIsImVuZHNXaXRoIiwicmVsYXRpdml6ZVRyYWNlIiwidHJhY2UiLCJwcmVmaXgiLCJyZXBsYWNlIiwicmVsYXRpdml6ZU5vZGUiLCJtYXAiLCJ0IiwiYyIsImlzUnVuTm9kZVByb2dyZXNzRGF0YSIsImRhdGEiLCJkIiwicmVsYXRpdml6ZVJlc3VsdCIsInJlc3VsdHMiLCJuIiwicmVnaXN0ZXJEZXZUZXN0Um91dGVzIiwic2VydmVyIiwiY29uZmlnIiwicm91dGVQcmVmaXgiLCJtYW5hZ2VyIiwic3RhcnQiLCJ2aXRlc3RDb25maWdQYXRoIiwiZGV2Vml0ZXN0TWFuYWdlciIsInNzZUF2YWlsYWJsZSIsInBsdWdpbnMiLCJzc2UiLCJnZXQiLCJyZXBseSIsInNvY2tldCIsImdldFN0YXR1cyIsInB1Ymxpc2giLCJEYXRlIiwidG9JU09TdHJpbmciLCJoZWFydGJlYXRUaW1lciIsInNldEludGVydmFsIiwiYXBpUm9vdFBhdGgiLCJsaXN0ZW5lciIsImV2ZW50IiwicmVsYXRpdml6ZWQiLCJhZGRFdmVudExpc3RlbmVyIiwiY2xlYW51cCIsImNsZWFySW50ZXJ2YWwiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwib24iLCJwb3N0Iiwib2siLCJib2R5IiwicnVuUmVxdWVzdCIsImVtaXRFdmVudCIsInJhd1Jlc3VsdCIsInJ1biIsImVyciIsIkVycm9yIiwiU3RyaW5nIiwidW5kZWZpbmVkIiwiYWRkSG9vayIsInNodXRkb3duIl0sIm1hcHBpbmdzIjoiQUFBQSxTQUFTQSxVQUFVLFFBQVEsU0FBUztBQUVwQyxTQUFTQyxDQUFDLFFBQVEsTUFBTTtBQUV4QixTQUFTQyxNQUFNLFFBQVEsbUJBQWdCO0FBRXZDLFNBQVNDLGdCQUFnQixRQUE0QixtQkFBZ0I7QUFFckUsU0FBU0MsZ0JBQWdCLFFBQVEsMEJBQXVCO0FBRXhELE1BQU1DLGlCQUFpQjtBQUN2QixNQUFNQyx3QkFBd0I7QUFFOUIsTUFBTUMsd0JBQXdCTixFQUFFTyxNQUFNLENBQUM7SUFDckNDLEtBQUtSLEVBQUVTLE1BQU07SUFDYkMsT0FBT1YsRUFBRVcsT0FBTztJQUNoQkMsVUFBVVosRUFBRVMsTUFBTTtJQUNsQkksWUFBWWIsRUFBRWMsTUFBTTtJQUNwQkMsSUFBSWYsRUFBRVMsTUFBTTtBQUNkO0FBRUEsTUFBTU8sdUJBQWtEaEIsRUFBRWlCLElBQUksQ0FBQyxJQUM3RGpCLEVBQUVPLE1BQU0sQ0FBQztRQUNQVyxJQUFJbEIsRUFBRVMsTUFBTTtRQUNaVSxNQUFNbkIsRUFBRW9CLElBQUksQ0FBQztZQUFDO1lBQVE7WUFBUztTQUFPO1FBQ3RDQyxNQUFNckIsRUFBRVMsTUFBTTtRQUNkYSxVQUFVdEIsRUFBRVMsTUFBTTtRQUNsQmMsTUFBTXZCLEVBQUVTLE1BQU07UUFDZGUsT0FBT3hCLEVBQUVvQixJQUFJLENBQUM7WUFBQztZQUFVO1lBQVU7WUFBVztZQUFRO1lBQVc7U0FBVTtRQUMzRUssWUFBWXpCLEVBQUVjLE1BQU0sR0FBR1ksUUFBUTtRQUMvQkMsUUFBUTNCLEVBQUVPLE1BQU0sQ0FBQztZQUNmcUIsT0FBTzVCLEVBQUVjLE1BQU07WUFDZmUsUUFBUTdCLEVBQUVjLE1BQU07WUFDaEJn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
262
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90ZXN0aW5nL2Rldi10ZXN0LXJvdXRlcy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyByYW5kb21VVUlEIH0gZnJvbSBcImNyeXB0b1wiO1xuaW1wb3J0IHR5cGUgeyBGYXN0aWZ5SW5zdGFuY2UgfSBmcm9tIFwiZmFzdGlmeVwiO1xuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIjtcbmltcG9ydCB0eXBlIHsgU29uYW11RGV2UnVubmVyQ29uZmlnIH0gZnJvbSBcIi4uL2FwaS9jb25maWdcIjtcbmltcG9ydCB7IFNvbmFtdSB9IGZyb20gXCIuLi9hcGkvc29uYW11XCI7XG5pbXBvcnQgdHlwZSB7IFNlcmlhbGl6ZWRUcmFjZSB9IGZyb20gXCIuLi9uYWl0ZS9uYWl0ZVwiO1xuaW1wb3J0IHsgY3JlYXRlU1NFRmFjdG9yeSwgdHlwZSBTU0VDb25uZWN0aW9uIH0gZnJvbSBcIi4uL3N0cmVhbS9zc2VcIjtcbmltcG9ydCB0eXBlIHsgTWFuYWdlclN0YXR1cywgUnVuUmVzdWx0LCBUZXN0Q2FzZVJlc3VsdCB9IGZyb20gXCIuL2Rldi12aXRlc3QtbWFuYWdlclwiO1xuaW1wb3J0IHsgRGV2Vml0ZXN0TWFuYWdlciB9IGZyb20gXCIuL2Rldi12aXRlc3QtbWFuYWdlclwiO1xuXG5jb25zdCBTQ0hFTUFfVkVSU0lPTiA9IDE7XG5jb25zdCBIRUFSVEJFQVRfSU5URVJWQUxfTVMgPSAzMF8wMDA7XG5cbmNvbnN0IFNlcmlhbGl6ZWRUcmFjZVNjaGVtYSA9IHoub2JqZWN0KHtcbiAga2V5OiB6LnN0cmluZygpLFxuICB2YWx1ZTogei51bmtub3duKCksXG4gIGZpbGVQYXRoOiB6LnN0cmluZygpLFxuICBsaW5lTnVtYmVyOiB6Lm51bWJlcigpLFxuICBhdDogei5zdHJpbmcoKSxcbn0pO1xuXG5jb25zdCBUZXN0Q2FzZVJlc3VsdFNjaGVtYTogei5ab2RUeXBlPFRlc3RDYXNlUmVzdWx0PiA9IHoubGF6eSgoKSA9PlxuICB6Lm9iamVjdCh7XG4gICAgaWQ6IHouc3RyaW5nKCksXG4gICAga2luZDogei5lbnVtKFtcImZpbGVcIiwgXCJzdWl0ZVwiLCBcInRlc3RcIl0pLFxuICAgIG5hbWU6IHouc3RyaW5nKCksXG4gICAgZnVsbE5hbWU6IHouc3RyaW5nKCksXG4gICAgZmlsZTogei5zdHJpbmcoKSxcbiAgICBzdGF0ZTogei5lbnVtKFtcInBhc3NlZFwiLCBcImZhaWxlZFwiLCBcInNraXBwZWRcIiwgXCJ0b2RvXCIsIFwicnVubmluZ1wiLCBcInVua25vd25cIl0pLFxuICAgIGR1cmF0aW9uTXM6IHoubnVtYmVyKCkubnVsbGFibGUoKSxcbiAgICBjb3VudHM6IHoub2JqZWN0KHtcbiAgICAgIHRvdGFsOiB6Lm51bWJlcigpLFxuICAgICAgcGFzc2VkOiB6Lm51bWJlcigpLFxuICAgICAgZmFpbGVkOiB6Lm51bWJlcigpLFxuICAgICAgc2tpcHBlZDogei5udW1iZXIoKSxcbiAgICB9KSxcbiAgICBlcnJvcjogelxuICAgICAgLm9iamVjdCh7XG4gICAgICAgIG1lc3NhZ2U6IHouc3RyaW5nKCksXG4gICAgICAgIHN0YWNrOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgICB9KVxuICAgICAgLm51bGxhYmxlKCksXG4gICAgdHJhY2VzOiB6LmFycmF5KFNlcmlhbGl6ZWRUcmFjZVNjaGVtYSksXG4gICAgY2hpbGRyZW46IHouYXJyYXkoVGVzdENhc2VSZXN1bHRTY2hlbWEpLFxuICB9KSxcbik7XG5cbmNvbnN0IFRlc3RFdmVudFNjaGVtYSA9IHoub2JqZWN0KHtcbiAgc25hcHNob3Q6IHoub2JqZWN0KHtcbiAgICBzY2hlbWFWZXJzaW9uOiB6Lm51bWJlcigpLFxuICAgIHNlcnZlclRpbWU6IHouc3RyaW5nKCksXG4gICAgc3RhdHVzOiB6Lm9iamVjdCh7XG4gICAgICByZWFkeTogei5ib29sZWFuKCksXG4gICAgICBydW5uaW5nOiB6LmJvb2xlYW4oKSxcbiAgICAgIGxhc3RSdW5BdDogei5zdHJpbmcoKS5udWxsYWJsZSgpLFxuICAgIH0pLFxuICB9KSxcbiAgcnVuUXVldWVkOiB6Lm9iamVjdCh7XG4gICAgc2NoZW1hVmVyc2lvbjogei5udW1iZXIoKSxcbiAgICBydW5JZDogei5zdHJpbmcoKSxcbiAgICBxdWV1ZWRBdDogei5zdHJpbmcoKSxcbiAgICByZXF1ZXN0OiB6Lm9iamVjdCh7XG4gICAgICBmaWxlczogei5hcnJheSh6LnN0cmluZygpKS5vcHRpb25hbCgpLFxuICAgICAgcGF0dGVybjogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIH0pLFxuICB9KSxcbiAgcnVuU3RhcnRlZDogei5vYmplY3Qoe1xuICAgIHNjaGVtYVZlcnNpb246IHoubnVtYmVyKCksXG4gICAgcnVuSWQ6IHouc3RyaW5nKCksXG4gICAgc3RhcnRlZEF0OiB6LnN0cmluZygpLFxuICB9KSxcbiAgcnVuQ29tcGxldGVkOiB6Lm9iamVjdCh7XG4gICAgc2NoZW1hVmVyc2lvbjogei5udW1iZXIoKSxcbiAgICBydW5JZDogei5zdHJpbmcoKSxcbiAgICBzdGFydGVkQXQ6IHouc3RyaW5nKCksXG4gICAgZmluaXNoZWRBdDogei5zdHJpbmcoKSxcbiAgICByZXN1bHQ6IHoucmVjb3JkKHouc3RyaW5nKCksIHoudW5rbm93bigpKSxcbiAgfSksXG4gIHJ1bkVycm9yZWQ6IHoub2JqZWN0KHtcbiAgICBzY2hlbWFWZXJzaW9uOiB6Lm51bWJlcigpLFxuICAgIHJ1bklkOiB6LnN0cmluZygpLFxuICAgIGZpbmlzaGVkQXQ6IHouc3RyaW5nKCksXG4gICAgZXJyb3I6IHoub2JqZWN0KHtcbiAgICAgIG1lc3NhZ2U6IHouc3RyaW5nKCksXG4gICAgICBzdGFjazogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIH0pLFxuICB9KSxcbiAgcnVuTm9kZVByb2dyZXNzOiB6Lm9iamVjdCh7XG4gICAgc2NoZW1hVmVyc2lvbjogei5saXRlcmFsKDEpLFxuICAgIHJ1bklkOiB6LnN0cmluZygpLFxuICAgIHN0YXJ0ZWRBdDogei5zdHJpbmcoKSxcbiAgICBhdDogei5zdHJpbmcoKSxcbiAgICBraW5kOiB6LmVudW0oW1wiZmlsZVwiLCBcInN1aXRlXCIsIFwidGVzdFwiXSksXG4gICAgcGhhc2U6IHouZW51bShbXCJyZWFkeVwiLCBcInJlc3VsdFwiXSksXG4gICAgZmlsZUlkOiB6LnN0cmluZygpLFxuICAgIG5vZGVJZDogei5zdHJpbmcoKSxcbiAgICBwYXJlbnRJZDogei5zdHJpbmcoKS5udWxsYWJsZSgpLFxuICAgIG5vZGU6IFRlc3RDYXNlUmVzdWx0U2NoZW1hLFxuICB9KSxcbiAgaGVhcnRiZWF0OiB6Lm9iamVjdCh7XG4gICAgc2NoZW1hVmVyc2lvbjogei5udW1iZXIoKSxcbiAgICBhdDogei5zdHJpbmcoKSxcbiAgfSksXG59KTtcblxudHlwZSBUZXN0RXZlbnRzID0gei5pbmZlcjx0eXBlb2YgVGVzdEV2ZW50U2NoZW1hPjtcblxuZnVuY3Rpb24gdG9QYXRoUHJlZml4KGJhc2VQYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gYmFzZVBhdGguZW5kc1dpdGgoXCIvXCIpID8gYmFzZVBhdGggOiBgJHtiYXNlUGF0aH0vYDtcbn1cblxuZnVuY3Rpb24gcmVsYXRpdml6ZVRyYWNlKHRyYWNlOiBTZXJpYWxpemVkVHJhY2UsIHByZWZpeDogc3RyaW5nKTogU2VyaWFsaXplZFRyYWNlIHtcbiAgcmV0dXJuIHsgLi4udHJhY2UsIGZpbGVQYXRoOiB0cmFjZS5maWxlUGF0aC5yZXBsYWNlKHByZWZpeCwgXCJcIikgfTtcbn1cblxuZnVuY3Rpb24gcmVsYXRpdml6ZU5vZGUobm9kZTogVGVzdENhc2VSZXN1bHQsIGJhc2VQYXRoOiBzdHJpbmcpOiBUZXN0Q2FzZVJlc3VsdCB7XG4gIGNvbnN0IHByZWZpeCA9IHRvUGF0aFByZWZpeChiYXNlUGF0aCk7XG4gIHJldHVybiB7XG4gICAgLi4ubm9kZSxcbiAgICBuYW1lOiBub2RlLm5hbWUucmVwbGFjZShwcmVmaXgsIFwiXCIpLFxuICAgIGZpbGU6IG5vZGUuZmlsZS5yZXBsYWNlKHByZWZpeCwgXCJcIiksXG4gICAgdHJhY2VzOiBub2RlLnRyYWNlcy5tYXAoKHQpID0+IHJlbGF0aXZpemVUcmFjZSh0LCBwcmVmaXgpKSxcbiAgICBjaGlsZHJlbjogbm9kZS5jaGlsZHJlbi5tYXAoKGMpID0+IHJlbGF0aXZpemVOb2RlKGMsIHByZWZpeCkpLFxuICB9O1xufVxuXG5mdW5jdGlvbiBpc1J1bk5vZGVQcm9ncmVzc0RhdGEoZGF0YTogdW5rbm93bik6IGRhdGEgaXMgVGVzdEV2ZW50c1tcInJ1bk5vZGVQcm9ncmVzc1wiXSB7XG4gIGlmICh0eXBlb2YgZGF0YSAhPT0gXCJvYmplY3RcIiB8fCBkYXRhID09PSBudWxsKSByZXR1cm4gZmFsc2U7XG4gIGNvbnN0IGQgPSBkYXRhIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICByZXR1cm4gKFxuICAgIGQuc2NoZW1hVmVyc2lvbiA9PT0gMSAmJlxuICAgIHR5cGVvZiBkLnJ1bklkID09PSBcInN0cmluZ1wiICYmXG4gICAgdHlwZW9mIGQuc3RhcnRlZEF0ID09PSBcInN0cmluZ1wiICYmXG4gICAgdHlwZW9mIGQuYXQgPT09IFwic3RyaW5nXCIgJiZcbiAgICAoZC5raW5kID09PSBcImZpbGVcIiB8fCBkLmtpbmQgPT09IFwic3VpdGVcIiB8fCBkLmtpbmQgPT09IFwidGVzdFwiKSAmJlxuICAgIChkLnBoYXNlID09PSBcInJlYWR5XCIgfHwgZC5waGFzZSA9PT0gXCJyZXN1bHRcIikgJiZcbiAgICB0eXBlb2YgZC5maWxlSWQgPT09IFwic3RyaW5nXCIgJiZcbiAgICB0eXBlb2YgZC5ub2RlSWQgPT09IFwic3RyaW5nXCIgJiZcbiAgICAoZC5wYXJlbnRJZCA9PT0gbnVsbCB8fCB0eXBlb2YgZC5wYXJlbnRJZCA9PT0gXCJzdHJpbmdcIikgJiZcbiAgICB0eXBlb2YgZC5ub2RlID09PSBcIm9iamVjdFwiICYmXG4gICAgZC5ub2RlICE9PSBudWxsXG4gICk7XG59XG5cbmZ1bmN0aW9uIHJlbGF0aXZpemVSZXN1bHQocmVzdWx0OiBSdW5SZXN1bHQsIGJhc2VQYXRoOiBzdHJpbmcpOiBSdW5SZXN1bHQge1xuICBjb25zdCBwcmVmaXggPSB0b1BhdGhQcmVmaXgoYmFzZVBhdGgpO1xuICByZXR1cm4ge1xuICAgIC4uLnJlc3VsdCxcbiAgICByZXN1bHRzOiByZXN1bHQucmVzdWx0cy5tYXAoKG4pID0+IHJlbGF0aXZpemVOb2RlKG4sIHByZWZpeCkpLFxuICB9O1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVnaXN0ZXJEZXZUZXN0Um91dGVzKFxuICBzZXJ2ZXI6IEZhc3RpZnlJbnN0YW5jZSxcbiAgY29uZmlnOiBTb25hbXVEZXZSdW5uZXJDb25maWcsXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgcHJlZml4ID0gY29uZmlnLnJvdXRlUHJlZml4ID8/IFwiL19fdGVzdF9fXCI7XG5cbiAgY29uc3QgbWFuYWdlciA9IG5ldyBEZXZWaXRlc3RNYW5hZ2VyKCk7XG4gIGF3YWl0IG1hbmFnZXIuc3RhcnQoY29uZmlnLnZpdGVzdENvbmZpZ1BhdGgpO1xuICBTb25hbXUuZGV2Vml0ZXN0TWFuYWdlciA9IG1hbmFnZXI7XG5cbiAgY29uc3Qgc3NlQXZhaWxhYmxlID0gISFTb25hbXUuY29uZmlnLnNlcnZlci5wbHVnaW5zPy5zc2U7XG5cbiAgaWYgKHNzZUF2YWlsYWJsZSkge1xuICAgIHNlcnZlci5nZXQoYCR7cHJlZml4fS9ldmVudHNgLCAocmVxdWVzdCwgcmVwbHkpOiB2b2lkID0+IHtcbiAgICAgIGNvbnN0IHNzZTogU1NFQ29ubmVjdGlvbjx0eXBlb2YgVGVzdEV2ZW50U2NoZW1hPiA9IGNyZWF0ZVNTRUZhY3RvcnkoXG4gICAgICAgIHJlcXVlc3Quc29ja2V0LFxuICAgICAgICByZXBseSxcbiAgICAgICAgVGVzdEV2ZW50U2NoZW1hLFxuICAgICAgKTtcblxuICAgICAgY29uc3Qgc3RhdHVzOiBNYW5hZ2VyU3RhdHVzID0gbWFuYWdlci5nZXRTdGF0dXMoKTtcbiAgICAgIHNzZS5wdWJsaXNoKFwic25hcHNob3RcIiwge1xuICAgICAgICBzY2hlbWFWZXJzaW9uOiBTQ0hFTUFfVkVSU0lPTixcbiAgICAgICAgc2VydmVyVGltZTogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgICBzdGF0dXMsXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgaGVhcnRiZWF0VGltZXIgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICAgIHNzZS5wdWJsaXNoKFwiaGVhcnRiZWF0XCIsIHtcbiAgICAgICAgICBzY2hlbWFWZXJzaW9uOiBTQ0hFTUFfVkVSU0lPTixcbiAgICAgICAgICBhdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgICB9KTtcbiAgICAgIH0sIEhFQVJUQkVBVF9JTlRFUlZBTF9NUyk7XG5cbiAgICAgIGNvbnN0IGJhc2VQYXRoID0gU29uYW11LmFwaVJvb3RQYXRoO1xuICAgICAgY29uc3QgbGlzdGVuZXIgPSAoZXZlbnQ6IHN0cmluZywgZGF0YTogdW5rbm93bikgPT4ge1xuICAgICAgICBjb25zdCBrZXkgPSBldmVudCBhcyBrZXlvZiBUZXN0RXZlbnRzO1xuICAgICAgICBpZiAoa2V5ID09PSBcInJ1bk5vZGVQcm9ncmVzc1wiKSB7XG4gICAgICAgICAgaWYgKCFpc1J1bk5vZGVQcm9ncmVzc0RhdGEoZGF0YSkpIHJldHVybjtcbiAgICAgICAgICBjb25zdCByZWxhdGl2aXplZCA9IHtcbiAgICAgICAgICAgIC4uLmRhdGEsXG4gICAgICAgICAgICBub2RlOiByZWxhdGl2aXplTm9kZShkYXRhLm5vZGUsIGJhc2VQYXRoKSxcbiAgICAgICAgICB9O1xuICAgICAgICAgIHNzZS5wdWJsaXNoKGtleSwgcmVsYXRpdml6ZWQpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBzc2UucHVibGlzaChrZXksIGRhdGEgYXMgVGVzdEV2ZW50c1t0eXBlb2Yga2V5XSk7XG4gICAgICB9O1xuICAgICAgbWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGxpc3RlbmVyKTtcblxuICAgICAgbGV0IGNsZWFuZWQgPSBmYWxzZTtcbiAgICAgIGNvbnN0IGNsZWFudXAgPSAoKSA9PiB7XG4gICAgICAgIGlmIChjbGVhbmVkKSByZXR1cm47XG4gICAgICAgIGNsZWFuZWQgPSB0cnVlO1xuICAgICAgICBjbGVhckludGVydmFsKGhlYXJ0YmVhdFRpbWVyKTtcbiAgICAgICAgbWFuYWdlci5yZW1vdmVFdmVudExpc3RlbmVyKGxpc3RlbmVyKTtcbiAgICAgIH07XG4gICAgICByZXF1ZXN0LnNvY2tldC5vbihcImNsb3NlXCIsIGNsZWFudXApO1xuICAgICAgcmVxdWVzdC5zb2NrZXQub24oXCJlcnJvclwiLCBjbGVhbnVwKTtcbiAgICB9KTtcbiAgfVxuXG4gIHNlcnZlci5wb3N0KGAke3ByZWZpeH0vcnVuYCwgYXN5bmMgKHJlcXVlc3QsIHJlcGx5KSA9PiB7XG4gICAgaWYgKCFTb25hbXUuZGV2Vml0ZXN0TWFuYWdlcikge1xuICAgICAgcmVwbHkuc3RhdHVzKDUwMyk7XG4gICAgICByZXR1cm4geyBvazogZmFsc2UsIGVycm9yOiBcIkRldlZpdGVzdE1hbmFnZXIgaXMgbm90IGluaXRpYWxpemVkXCIgfTtcbiAgICB9XG5cbiAgICBjb25zdCBydW5JZCA9IHJhbmRvbVVVSUQoKTtcbiAgICBjb25zdCBib2R5ID0gcmVxdWVzdC5ib2R5IGFzIHsgZmlsZXM/OiBzdHJpbmdbXTsgcGF0dGVybj86IHN0cmluZyB9IHwgbnVsbDtcbiAgICBjb25zdCBydW5SZXF1ZXN0ID0ge1xuICAgICAgZmlsZXM6IGJvZHk/LmZpbGVzLFxuICAgICAgcGF0dGVybjogYm9keT8ucGF0dGVybixcbiAgICB9O1xuXG4gICAgbWFuYWdlci5lbWl0RXZlbnQoXCJydW5RdWV1ZWRcIiwge1xuICAgICAgc2NoZW1hVmVyc2lvbjogU0NIRU1BX1ZFUlNJT04sXG4gICAgICBydW5JZCxcbiAgICAgIHF1ZXVlZEF0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICByZXF1ZXN0OiBydW5SZXF1ZXN0LFxuICAgIH0pO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHN0YXJ0ZWRBdCA9IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKTtcbiAgICAgIG1hbmFnZXIuZW1pdEV2ZW50KFwicnVuU3RhcnRlZFwiLCB7XG4gICAgICAgIHNjaGVtYVZlcnNpb246IFNDSEVNQV9WRVJTSU9OLFxuICAgICAgICBydW5JZCxcbiAgICAgICAgc3RhcnRlZEF0LFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHJhd1Jlc3VsdDogUnVuUmVzdWx0ID0gYXdhaXQgU29uYW11LmRldlZpdGVzdE1hbmFnZXIucnVuKHJ1blJlcXVlc3QsIHJ1bklkKTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHJlbGF0aXZpemVSZXN1bHQocmF3UmVzdWx0LCBTb25hbXUuYXBpUm9vdFBhdGgpO1xuXG4gICAgICBjb25zdCBmaW5pc2hlZEF0ID0gbmV3IERhdGUoKS50b0lTT1N0cmluZygpO1xuICAgICAgbWFuYWdlci5lbWl0RXZlbnQoXCJydW5Db21wbGV0ZWRcIiwge1xuICAgICAgICBzY2hlbWFWZXJzaW9uOiBTQ0hFTUFfVkVSU0lPTixcbiAgICAgICAgcnVuSWQsXG4gICAgICAgIHN0YXJ0ZWRBdCxcbiAgICAgICAgZmluaXNoZWRBdCxcbiAgICAgICAgcmVzdWx0LFxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zdCBmaW5pc2hlZEF0ID0gbmV3IERhdGUoKS50b0lTT1N0cmluZygpO1xuICAgICAgbWFuYWdlci5lbWl0RXZlbnQoXCJydW5FcnJvcmVkXCIsIHtcbiAgICAgICAgc2NoZW1hVmVyc2lvbjogU0NIRU1BX1ZFUlNJT04sXG4gICAgICAgIHJ1bklkLFxuICAgICAgICBmaW5pc2hlZEF0LFxuICAgICAgICBlcnJvcjoge1xuICAgICAgICAgIG1lc3NhZ2U6IGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiBTdHJpbmcoZXJyKSxcbiAgICAgICAgICBzdGFjazogZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIuc3RhY2sgOiB1bmRlZmluZWQsXG4gICAgICAgIH0sXG4gICAgICB9KTtcblxuICAgICAgcmVwbHkuc3RhdHVzKDUwMCk7XG4gICAgICByZXR1cm4geyBvazogZmFsc2UsIGVycm9yOiBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogU3RyaW5nKGVycikgfTtcbiAgICB9XG4gIH0pO1xuXG4gIHNlcnZlci5nZXQoYCR7cHJlZml4fS9zdGF0dXNgLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qgc3RhdHVzOiBNYW5hZ2VyU3RhdHVzID0gU29uYW11LmRldlZpdGVzdE1hbmFnZXI/LmdldFN0YXR1cygpID8/IHtcbiAgICAgIHJlYWR5OiBmYWxzZSxcbiAgICAgIHJ1bm5pbmc6IGZhbHNlLFxuICAgICAgbGFzdFJ1bkF0OiBudWxsLFxuICAgIH07XG4gICAgcmV0dXJuIHsgLi4uc3RhdHVzLCBzc2VBdmFpbGFibGUgfTtcbiAgfSk7XG5cbiAgc2VydmVyLmFkZEhvb2soXCJvbkNsb3NlXCIsIGFzeW5jICgpID0+IHtcbiAgICBhd2FpdCBTb25hbXUuZGV2Vml0ZXN0TWFuYWdlcj8uc2h1dGRvd24oKTtcbiAgICBTb25hbXUuZGV2Vml0ZXN0TWFuYWdlciA9IG51bGw7XG4gIH0pO1xufVxuIl0sIm5hbWVzIjpbInJhbmRvbVVVSUQiLCJ6IiwiU29uYW11IiwiY3JlYXRlU1NFRmFjdG9yeSIsIkRldlZpdGVzdE1hbmFnZXIiLCJTQ0hFTUFfVkVSU0lPTiIsIkhFQVJUQkVBVF9JTlRFUlZBTF9NUyIsIlNlcmlhbGl6ZWRUcmFjZVNjaGVtYSIsIm9iamVjdCIsImtleSIsInN0cmluZyIsInZhbHVlIiwidW5rbm93biIsImZpbGVQYXRoIiwibGluZU51bWJlciIsIm51bWJlciIsImF0IiwiVGVzdENhc2VSZXN1bHRTY2hlbWEiLCJsYXp5IiwiaWQiLCJraW5kIiwiZW51bSIsIm5hbWUiLCJmdWxsTmFtZSIsImZpbGUiLCJzdGF0ZSIsImR1cmF0aW9uTXMiLCJudWxsYWJsZSIsImNvdW50cyIsInRvdGFsIiwicGFzc2VkIiwiZmFpbGVkIiwic2tpcHBlZCIsImVycm9yIiwibWVzc2FnZSIsInN0YWNrIiwib3B0aW9uYWwiLCJ0cmFjZXMiLCJhcnJheSIsImNoaWxkcmVuIiwiVGVzdEV2ZW50U2NoZW1hIiwic25hcHNob3QiLCJzY2hlbWFWZXJzaW9uIiwic2VydmVyVGltZSIsInN0YXR1cyIsInJlYWR5IiwiYm9vbGVhbiIsInJ1bm5pbmciLCJsYXN0UnVuQXQiLCJydW5RdWV1ZWQiLCJydW5JZCIsInF1ZXVlZEF0IiwicmVxdWVzdCIsImZpbGVzIiwicGF0dGVybiIsInJ1blN0YXJ0ZWQiLCJzdGFydGVkQXQiLCJydW5Db21wbGV0ZWQiLCJmaW5pc2hlZEF0IiwicmVzdWx0IiwicmVjb3JkIiwicnVuRXJyb3JlZCIsInJ1bk5vZGVQcm9ncmVzcyIsImxpdGVyYWwiLCJwaGFzZSIsImZpbGVJZCIsIm5vZGVJZCIsInBhcmVudElkIiwibm9kZSIsImhlYXJ0YmVhdCIsInRvUGF0aFByZWZpeCIsImJhc2VQYXRoIiwiZW5kc1dpdGgiLCJyZWxhdGl2aXplVHJhY2UiLCJ0cmFjZSIsInByZWZpeCIsInJlcGxhY2UiLCJyZWxhdGl2aXplTm9kZSIsIm1hcCIsInQiLCJjIiwiaXNSdW5Ob2RlUHJvZ3Jlc3NEYXRhIiwiZGF0YSIsImQiLCJyZWxhdGl2aXplUmVzdWx0IiwicmVzdWx0cyIsIm4iLCJyZWdpc3RlckRldlRlc3RSb3V0ZXMiLCJzZXJ2ZXIiLCJjb25maWciLCJyb3V0ZVByZWZpeCIsIm1hbmFnZXIiLCJzdGFydCIsInZpdGVzdENvbmZpZ1BhdGgiLCJkZXZWaXRlc3RNYW5hZ2VyIiwic3NlQXZhaWxhYmxlIiwicGx1Z2lucyIsInNzZSIsImdldCIsInJlcGx5Iiwic29ja2V0IiwiZ2V0U3RhdHVzIiwicHVibGlzaCIsIkRhdGUiLCJ0b0lTT1N0cmluZyIsImhlYXJ0YmVhdFRpbWVyIiwic2V0SW50ZXJ2YWwiLCJhcGlSb290UGF0aCIsImxpc3RlbmVyIiwiZXZlbnQiLCJyZWxhdGl2aXplZCIsImFkZEV2ZW50TGlzdGVuZXIiLCJjbGVhbmVkIiwiY2xlYW51cCIsImNsZWFySW50ZXJ2YWwiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwib24iLCJwb3N0Iiwib2siLCJib2R5IiwicnVuUmVxdWVzdCIsImVtaXRFdmVudCIsInJhd1Jlc3VsdCIsInJ1biIsImVyciIsIkVycm9yIiwiU3RyaW5nIiwidW5kZWZpbmVkIiwiYWRkSG9vayIsInNodXRkb3duIl0sIm1hcHBpbmdzIjoiQUFBQSxTQUFTQSxVQUFVLFFBQVEsU0FBUztBQUVwQyxTQUFTQyxDQUFDLFFBQVEsTUFBTTtBQUV4QixTQUFTQyxNQUFNLFFBQVEsbUJBQWdCO0FBRXZDLFNBQVNDLGdCQUFnQixRQUE0QixtQkFBZ0I7QUFFckUsU0FBU0MsZ0JBQWdCLFFBQVEsMEJBQXVCO0FBRXhELE1BQU1DLGlCQUFpQjtBQUN2QixNQUFNQyx3QkFBd0I7QUFFOUIsTUFBTUMsd0JBQXdCTixFQUFFTyxNQUFNLENBQUM7SUFDckNDLEtBQUtSLEVBQUVTLE1BQU07SUFDYkMsT0FBT1YsRUFBRVcsT0FBTztJQUNoQkMsVUFBVVosRUFBRVMsTUFBTTtJQUNsQkksWUFBWWIsRUFBRWMsTUFBTTtJQUNwQkMsSUFBSWYsRUFBRVMsTUFBTTtBQUNkO0FBRUEsTUFBTU8sdUJBQWtEaEIsRUFBRWlCLElBQUksQ0FBQyxJQUM3RGpCLEVBQUVPLE1BQU0sQ0FBQztRQUNQVyxJQUFJbEIsRUFBRVMsTUFBTTtRQUNaVSxNQUFNbkIsRUFBRW9CLElBQUksQ0FBQztZQUFDO1lBQVE7WUFBUztTQUFPO1FBQ3RDQyxNQUFNckIsRUFBRVMsTUFBTTtRQUNkYSxVQUFVdEIsRUFBRVMsTUFBTTtRQUNsQmMsTUFBTXZCLEVBQUVTLE1BQU07UUFDZGUsT0FBT3hCLEVBQUVvQixJQUFJLENBQUM7WUFBQztZQUFVO1lBQVU7WUFBVztZQUFRO1lBQVc7U0FBVTtRQUMzRUssWUFBWXpCLEVBQUVjLE1BQU0sR0FB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
@@ -1 +1 @@
1
- {"version":3,"file":"global-setup.d.ts","sourceRoot":"","sources":["../../src/testing/global-setup.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,iBAAiB,uCAiChC;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,KAAK,oCAAsB,CAAC"}
1
+ {"version":3,"file":"global-setup.d.ts","sourceRoot":"","sources":["../../src/testing/global-setup.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,iBAAiB,uCA6BhC;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,KAAK,oCAAsB,CAAC"}
@@ -27,9 +27,6 @@ import { ParallelDBManager } from "./parallel-db-manager.js";
27
27
  // no-op
28
28
  };
29
29
  }
30
- if (!config.database) {
31
- throw new Error("database 설정이 필요합니다 (병렬 테스팅)");
32
- }
33
30
  const maxWorkers = config.test.maxWorkers ?? 4;
34
31
  const templateDb = `${config.database.name}_test`;
35
32
  const connectionConfig = {
@@ -54,4 +51,4 @@ import { ParallelDBManager } from "./parallel-db-manager.js";
54
51
  * ```
55
52
  */ export const setup = createGlobalSetup();
56
53
 
57
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90ZXN0aW5nL2dsb2JhbC1zZXR1cC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBsb2FkQ29uZmlnIH0gZnJvbSBcIi4uL2FwaS9jb25maWdcIjtcbmltcG9ydCB7IFBhcmFsbGVsREJNYW5hZ2VyIH0gZnJvbSBcIi4vcGFyYWxsZWwtZGItbWFuYWdlclwiO1xuXG4vKipcbiAqIHZpdGVzdCBnbG9iYWxTZXR1cCDtlajsiJjrpbwg7IOd7ISx7ZWp64uI64ukLlxuICogc29uYW11LmNvbmZpZy50c+ydmCB0ZXN0IOyEpOygleydhCDsnb3slrTshJwg67OR66CsIO2FjOyKpO2KuCDtmZjqsr3snYQg6rWs7ISx7ZWp64uI64ukLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiAvLyBzcmMvdGVzdGluZy9nbG9iYWwudHNcbiAqIGV4cG9ydCB7IHNldHVwIH0gZnJvbSBcInNvbmFtdS90ZXN0XCI7XG4gKiBgYGBcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogLy8gc3JjL3Rlc3RpbmcvZ2xvYmFsLnRzXG4gKiBpbXBvcnQgeyBjcmVhdGVHbG9iYWxTZXR1cCB9IGZyb20gXCJzb25hbXUvdGVzdFwiO1xuICogZXhwb3J0IGNvbnN0IHNldHVwID0gY3JlYXRlR2xvYmFsU2V0dXAoeyByb290UGF0aDogcHJvY2Vzcy5jd2QoKSB9KTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlR2xvYmFsU2V0dXAoKSB7XG4gIHJldHVybiBhc3luYyBmdW5jdGlvbiBzZXR1cCgpIHtcbiAgICBjb25zdCB7IGZpbmRBcGlSb290UGF0aCB9ID0gYXdhaXQgaW1wb3J0KFwiLi4vdXRpbHMvdXRpbHNcIik7XG4gICAgY29uc3Qgcm9vdFBhdGggPSBmaW5kQXBpUm9vdFBhdGgoKTtcbiAgICBjb25zdCBjb25maWcgPSBhd2FpdCBsb2FkQ29uZmlnKHJvb3RQYXRoKTtcblxuICAgIC8vIOuzkeugrCDthYzsiqTtirjqsIAg67mE7Zmc7ISx7ZmU65CcIOqyveyasCDslYTrrLTqsoPrj4Qg7ZWY7KeAIOyViuydjFxuICAgIGlmICghY29uZmlnLnRlc3Q/LnBhcmFsbGVsKSB7XG4gICAgICByZXR1cm4gYXN5bmMgZnVuY3Rpb24gdGVhcmRvd24oKSB7XG4gICAgICAgIC8vIG5vLW9wXG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmICghY29uZmlnLmRhdGFiYXNlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJkYXRhYmFzZSDshKTsoJXsnbQg7ZWE7JqU7ZWp64uI64ukICjrs5HroKwg7YWM7Iqk7YyFKVwiKTtcbiAgICB9XG5cbiAgICBjb25zdCBtYXhXb3JrZXJzID0gY29uZmlnLnRlc3QubWF4V29ya2VycyA/PyA0O1xuICAgIGNvbnN0IHRlbXBsYXRlRGIgPSBgJHtjb25maWcuZGF0YWJhc2UubmFtZX1fdGVzdGA7XG5cbiAgICBjb25zdCBjb25uZWN0aW9uQ29uZmlnID0ge1xuICAgICAgY2xpZW50OiBjb25maWcuZGF0YWJhc2UuZGF0YWJhc2UgPz8gKFwicGdcIiBhcyBjb25zdCksXG4gICAgICBjb25uZWN0aW9uOlxuICAgICAgICBjb25maWcuZGF0YWJhc2UuZW52aXJvbm1lbnRzPy50ZXN0Py5jb25uZWN0aW9uID8/IGNvbmZpZy5kYXRhYmFzZS5kZWZhdWx0T3B0aW9ucy5jb25uZWN0aW9uLFxuICAgIH07XG5cbiAgICBjb25zdCBtYW5hZ2VyID0gbmV3IFBhcmFsbGVsREJNYW5hZ2VyKG1heFdvcmtlcnMsIGNvbm5lY3Rpb25Db25maWcsIHRlbXBsYXRlRGIpO1xuICAgIGF3YWl0IG1hbmFnZXIuY3JlYXRlV29ya2VyRGF0YWJhc2VzKCk7XG5cbiAgICByZXR1cm4gYXN5bmMgZnVuY3Rpb24gdGVhcmRvd24oKSB7XG4gICAgICBhd2FpdCBtYW5hZ2VyLmRyb3BXb3JrZXJEYXRhYmFzZXMoKTtcbiAgICB9O1xuICB9O1xufVxuXG4vKipcbiAqIOq4sOuzuCBnbG9iYWxTZXR1cCDtlajsiJjsnoXri4jri6QuXG4gKiBzb25hbXUuY29uZmlnLnRz7J2YIHRlc3Qg7ISk7KCV7J2EIOydveyWtOyEnCDrs5HroKwg7YWM7Iqk7Yq4IO2ZmOqyveydhCDqtazshLHtlanri4jri6QuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIC8vIHNyYy90ZXN0aW5nL2dsb2JhbC50c1xuICogZXhwb3J0IHsgc2V0dXAgfSBmcm9tIFwic29uYW11L3Rlc3RcIjtcbiAqIGBgYFxuICovXG5leHBvcnQgY29uc3Qgc2V0dXAgPSBjcmVhdGVHbG9iYWxTZXR1cCgpO1xuIl0sIm5hbWVzIjpbImxvYWRDb25maWciLCJQYXJhbGxlbERCTWFuYWdlciIsImNyZWF0ZUdsb2JhbFNldHVwIiwic2V0dXAiLCJmaW5kQXBpUm9vdFBhdGgiLCJyb290UGF0aCIsImNvbmZpZyIsInRlc3QiLCJwYXJhbGxlbCIsInRlYXJkb3duIiwiZGF0YWJhc2UiLCJFcnJvciIsIm1heFdvcmtlcnMiLCJ0ZW1wbGF0ZURiIiwibmFtZSIsImNvbm5lY3Rpb25Db25maWciLCJjbGllbnQiLCJjb25uZWN0aW9uIiwiZW52aXJvbm1lbnRzIiwiZGVmYXVsdE9wdGlvbnMiLCJtYW5hZ2VyIiwiY3JlYXRlV29ya2VyRGF0YWJhc2VzIiwiZHJvcFdvcmtlckRhdGFiYXNlcyJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBU0EsVUFBVSxRQUFRLG1CQUFnQjtBQUMzQyxTQUFTQyxpQkFBaUIsUUFBUSwyQkFBd0I7QUFFMUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Q0FnQkMsR0FDRCxPQUFPLFNBQVNDO0lBQ2QsT0FBTyxlQUFlQztRQUNwQixNQUFNLEVBQUVDLGVBQWUsRUFBRSxHQUFHLE1BQU0sTUFBTSxDQUFDO1FBQ3pDLE1BQU1DLFdBQVdEO1FBQ2pCLE1BQU1FLFNBQVMsTUFBTU4sV0FBV0s7UUFFaEMsOEJBQThCO1FBQzlCLElBQUksQ0FBQ0MsT0FBT0MsSUFBSSxFQUFFQyxVQUFVO1lBQzFCLE9BQU8sZUFBZUM7WUFDcEIsUUFBUTtZQUNWO1FBQ0Y7UUFFQSxJQUFJLENBQUNILE9BQU9JLFFBQVEsRUFBRTtZQUNwQixNQUFNLElBQUlDLE1BQU07UUFDbEI7UUFFQSxNQUFNQyxhQUFhTixPQUFPQyxJQUFJLENBQUNLLFVBQVUsSUFBSTtRQUM3QyxNQUFNQyxhQUFhLEdBQUdQLE9BQU9JLFFBQVEsQ0FBQ0ksSUFBSSxDQUFDLEtBQUssQ0FBQztRQUVqRCxNQUFNQyxtQkFBbUI7WUFDdkJDLFFBQVFWLE9BQU9JLFFBQVEsQ0FBQ0EsUUFBUSxJQUFLO1lBQ3JDTyxZQUNFWCxPQUFPSSxRQUFRLENBQUNRLFlBQVksRUFBRVgsTUFBTVUsY0FBY1gsT0FBT0ksUUFBUSxDQUFDUyxjQUFjLENBQUNGLFVBQVU7UUFDL0Y7UUFFQSxNQUFNRyxVQUFVLElBQUluQixrQkFBa0JXLFlBQVlHLGtCQUFrQkY7UUFDcEUsTUFBTU8sUUFBUUMscUJBQXFCO1FBRW5DLE9BQU8sZUFBZVo7WUFDcEIsTUFBTVcsUUFBUUUsbUJBQW1CO1FBQ25DO0lBQ0Y7QUFDRjtBQUVBOzs7Ozs7Ozs7Q0FTQyxHQUNELE9BQU8sTUFBTW5CLFFBQVFELG9CQUFvQiJ9
54
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90ZXN0aW5nL2dsb2JhbC1zZXR1cC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBsb2FkQ29uZmlnIH0gZnJvbSBcIi4uL2FwaS9jb25maWdcIjtcbmltcG9ydCB7IFBhcmFsbGVsREJNYW5hZ2VyIH0gZnJvbSBcIi4vcGFyYWxsZWwtZGItbWFuYWdlclwiO1xuXG4vKipcbiAqIHZpdGVzdCBnbG9iYWxTZXR1cCDtlajsiJjrpbwg7IOd7ISx7ZWp64uI64ukLlxuICogc29uYW11LmNvbmZpZy50c+ydmCB0ZXN0IOyEpOygleydhCDsnb3slrTshJwg67OR66CsIO2FjOyKpO2KuCDtmZjqsr3snYQg6rWs7ISx7ZWp64uI64ukLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiAvLyBzcmMvdGVzdGluZy9nbG9iYWwudHNcbiAqIGV4cG9ydCB7IHNldHVwIH0gZnJvbSBcInNvbmFtdS90ZXN0XCI7XG4gKiBgYGBcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogLy8gc3JjL3Rlc3RpbmcvZ2xvYmFsLnRzXG4gKiBpbXBvcnQgeyBjcmVhdGVHbG9iYWxTZXR1cCB9IGZyb20gXCJzb25hbXUvdGVzdFwiO1xuICogZXhwb3J0IGNvbnN0IHNldHVwID0gY3JlYXRlR2xvYmFsU2V0dXAoeyByb290UGF0aDogcHJvY2Vzcy5jd2QoKSB9KTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlR2xvYmFsU2V0dXAoKSB7XG4gIHJldHVybiBhc3luYyBmdW5jdGlvbiBzZXR1cCgpIHtcbiAgICBjb25zdCB7IGZpbmRBcGlSb290UGF0aCB9ID0gYXdhaXQgaW1wb3J0KFwiLi4vdXRpbHMvdXRpbHNcIik7XG4gICAgY29uc3Qgcm9vdFBhdGggPSBmaW5kQXBpUm9vdFBhdGgoKTtcbiAgICBjb25zdCBjb25maWcgPSBhd2FpdCBsb2FkQ29uZmlnKHJvb3RQYXRoKTtcblxuICAgIC8vIOuzkeugrCDthYzsiqTtirjqsIAg67mE7Zmc7ISx7ZmU65CcIOqyveyasCDslYTrrLTqsoPrj4Qg7ZWY7KeAIOyViuydjFxuICAgIGlmICghY29uZmlnLnRlc3Q/LnBhcmFsbGVsKSB7XG4gICAgICByZXR1cm4gYXN5bmMgZnVuY3Rpb24gdGVhcmRvd24oKSB7XG4gICAgICAgIC8vIG5vLW9wXG4gICAgICB9O1xuICAgIH1cblxuICAgIGNvbnN0IG1heFdvcmtlcnMgPSBjb25maWcudGVzdC5tYXhXb3JrZXJzID8/IDQ7XG4gICAgY29uc3QgdGVtcGxhdGVEYiA9IGAke2NvbmZpZy5kYXRhYmFzZS5uYW1lfV90ZXN0YDtcblxuICAgIGNvbnN0IGNvbm5lY3Rpb25Db25maWcgPSB7XG4gICAgICBjbGllbnQ6IGNvbmZpZy5kYXRhYmFzZS5kYXRhYmFzZSA/PyAoXCJwZ1wiIGFzIGNvbnN0KSxcbiAgICAgIGNvbm5lY3Rpb246XG4gICAgICAgIGNvbmZpZy5kYXRhYmFzZS5lbnZpcm9ubWVudHM/LnRlc3Q/LmNvbm5lY3Rpb24gPz8gY29uZmlnLmRhdGFiYXNlLmRlZmF1bHRPcHRpb25zLmNvbm5lY3Rpb24sXG4gICAgfTtcblxuICAgIGNvbnN0IG1hbmFnZXIgPSBuZXcgUGFyYWxsZWxEQk1hbmFnZXIobWF4V29ya2VycywgY29ubmVjdGlvbkNvbmZpZywgdGVtcGxhdGVEYik7XG4gICAgYXdhaXQgbWFuYWdlci5jcmVhdGVXb3JrZXJEYXRhYmFzZXMoKTtcblxuICAgIHJldHVybiBhc3luYyBmdW5jdGlvbiB0ZWFyZG93bigpIHtcbiAgICAgIGF3YWl0IG1hbmFnZXIuZHJvcFdvcmtlckRhdGFiYXNlcygpO1xuICAgIH07XG4gIH07XG59XG5cbi8qKlxuICog6riw67O4IGdsb2JhbFNldHVwIO2VqOyImOyeheuLiOuLpC5cbiAqIHNvbmFtdS5jb25maWcudHPsnZggdGVzdCDshKTsoJXsnYQg7J297Ja07IScIOuzkeugrCDthYzsiqTtirgg7ZmY6rK97J2EIOq1rOyEse2VqeuLiOuLpC5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogLy8gc3JjL3Rlc3RpbmcvZ2xvYmFsLnRzXG4gKiBleHBvcnQgeyBzZXR1cCB9IGZyb20gXCJzb25hbXUvdGVzdFwiO1xuICogYGBgXG4gKi9cbmV4cG9ydCBjb25zdCBzZXR1cCA9IGNyZWF0ZUdsb2JhbFNldHVwKCk7XG4iXSwibmFtZXMiOlsibG9hZENvbmZpZyIsIlBhcmFsbGVsREJNYW5hZ2VyIiwiY3JlYXRlR2xvYmFsU2V0dXAiLCJzZXR1cCIsImZpbmRBcGlSb290UGF0aCIsInJvb3RQYXRoIiwiY29uZmlnIiwidGVzdCIsInBhcmFsbGVsIiwidGVhcmRvd24iLCJtYXhXb3JrZXJzIiwidGVtcGxhdGVEYiIsImRhdGFiYXNlIiwibmFtZSIsImNvbm5lY3Rpb25Db25maWciLCJjbGllbnQiLCJjb25uZWN0aW9uIiwiZW52aXJvbm1lbnRzIiwiZGVmYXVsdE9wdGlvbnMiLCJtYW5hZ2VyIiwiY3JlYXRlV29ya2VyRGF0YWJhc2VzIiwiZHJvcFdvcmtlckRhdGFiYXNlcyJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBU0EsVUFBVSxRQUFRLG1CQUFnQjtBQUMzQyxTQUFTQyxpQkFBaUIsUUFBUSwyQkFBd0I7QUFFMUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Q0FnQkMsR0FDRCxPQUFPLFNBQVNDO0lBQ2QsT0FBTyxlQUFlQztRQUNwQixNQUFNLEVBQUVDLGVBQWUsRUFBRSxHQUFHLE1BQU0sTUFBTSxDQUFDO1FBQ3pDLE1BQU1DLFdBQVdEO1FBQ2pCLE1BQU1FLFNBQVMsTUFBTU4sV0FBV0s7UUFFaEMsOEJBQThCO1FBQzlCLElBQUksQ0FBQ0MsT0FBT0MsSUFBSSxFQUFFQyxVQUFVO1lBQzFCLE9BQU8sZUFBZUM7WUFDcEIsUUFBUTtZQUNWO1FBQ0Y7UUFFQSxNQUFNQyxhQUFhSixPQUFPQyxJQUFJLENBQUNHLFVBQVUsSUFBSTtRQUM3QyxNQUFNQyxhQUFhLEdBQUdMLE9BQU9NLFFBQVEsQ0FBQ0MsSUFBSSxDQUFDLEtBQUssQ0FBQztRQUVqRCxNQUFNQyxtQkFBbUI7WUFDdkJDLFFBQVFULE9BQU9NLFFBQVEsQ0FBQ0EsUUFBUSxJQUFLO1lBQ3JDSSxZQUNFVixPQUFPTSxRQUFRLENBQUNLLFlBQVksRUFBRVYsTUFBTVMsY0FBY1YsT0FBT00sUUFBUSxDQUFDTSxjQUFjLENBQUNGLFVBQVU7UUFDL0Y7UUFFQSxNQUFNRyxVQUFVLElBQUlsQixrQkFBa0JTLFlBQVlJLGtCQUFrQkg7UUFDcEUsTUFBTVEsUUFBUUMscUJBQXFCO1FBRW5DLE9BQU8sZUFBZVg7WUFDcEIsTUFBTVUsUUFBUUUsbUJBQW1CO1FBQ25DO0lBQ0Y7QUFDRjtBQUVBOzs7Ozs7Ozs7Q0FTQyxHQUNELE9BQU8sTUFBTWxCLFFBQVFELG9CQUFvQiJ9
@@ -1 +1 @@
1
- {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/ui/api.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAiD/C,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,eAAe,iBAm5C/D"}
1
+ {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/ui/api.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAiD/C,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,eAAe,iBA04C/D"}