sonamu 0.8.19 → 0.8.21

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 (51) 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/decorators.js +2 -2
  5. package/dist/api/sonamu.d.ts +1 -1
  6. package/dist/api/sonamu.d.ts.map +1 -1
  7. package/dist/api/sonamu.js +19 -14
  8. package/dist/bin/cli.js +30 -1
  9. package/dist/database/base-model.js +2 -2
  10. package/dist/database/db.d.ts +1 -1
  11. package/dist/database/db.d.ts.map +1 -1
  12. package/dist/database/db.js +1 -1
  13. package/dist/stream/sse.d.ts +2 -0
  14. package/dist/stream/sse.d.ts.map +1 -1
  15. package/dist/stream/sse.js +29 -6
  16. package/dist/syncer/syncer.js +2 -2
  17. package/dist/testing/global-setup.d.ts.map +1 -1
  18. package/dist/testing/global-setup.js +4 -1
  19. package/dist/ui/api.d.ts.map +1 -1
  20. package/dist/ui/api.js +15 -12
  21. package/dist/ui/cdd-service.d.ts +4 -2
  22. package/dist/ui/cdd-service.d.ts.map +1 -1
  23. package/dist/ui/cdd-service.js +99 -1
  24. package/dist/ui/cdd-types.d.ts +25 -0
  25. package/dist/ui/cdd-types.d.ts.map +1 -1
  26. package/dist/ui/cdd-types.js +1 -1
  27. package/dist/ui-web/assets/index-B7gc0Ygb.css +1 -0
  28. package/dist/ui-web/assets/{index-D_19-Pi4.js → index-DP968oXY.js} +71 -71
  29. package/dist/ui-web/index.html +2 -2
  30. package/package.json +3 -3
  31. package/src/api/config.ts +1 -1
  32. package/src/api/decorators.ts +1 -1
  33. package/src/api/sonamu.ts +20 -15
  34. package/src/bin/cli.ts +34 -0
  35. package/src/database/base-model.ts +1 -1
  36. package/src/database/db.ts +1 -1
  37. package/src/shared/app.shared.ts.txt +10 -1
  38. package/src/shared/web.shared.ts.txt +1 -1
  39. package/src/skills/AGENTS.md +10 -0
  40. package/src/skills/sonamu/auth.md +40 -1
  41. package/src/skills/sonamu/cdd.md +42 -0
  42. package/src/skills/sonamu/model.md +1 -1
  43. package/src/skills/sonamu/scaffolding.md +6 -0
  44. package/src/skills/sonamu/workflow.md +1 -1
  45. package/src/stream/sse.ts +34 -5
  46. package/src/syncer/syncer.ts +1 -1
  47. package/src/testing/global-setup.ts +4 -0
  48. package/src/ui/api.ts +20 -6
  49. package/src/ui/cdd-service.ts +106 -0
  50. package/src/ui/cdd-types.ts +28 -0
  51. package/dist/ui-web/assets/index-D4XFBV-f.css +0 -1
package/dist/bin/cli.js CHANGED
@@ -1019,6 +1019,35 @@ async function scaffold_model_test(entityId) {
1019
1019
  }
1020
1020
  }
1021
1021
  }
1022
+ // settings.local.json — project-local 모드에서만, 없을 때만 생성
1023
+ if (options.copyProjectTemplates) {
1024
+ const settingsLocalPath = path.join(claudeDir, "settings.local.json");
1025
+ if (!await exists(settingsLocalPath)) {
1026
+ try {
1027
+ const settingsContent = {
1028
+ hooks: {
1029
+ PostToolUse: [
1030
+ {
1031
+ matcher: "Edit|Write|MultiEdit",
1032
+ hooks: [
1033
+ {
1034
+ type: "command",
1035
+ command: "pnpm biome check --changed 2>&1 | head -60"
1036
+ }
1037
+ ]
1038
+ }
1039
+ ]
1040
+ }
1041
+ };
1042
+ await writeFile(settingsLocalPath, `${JSON.stringify(settingsContent, null, 2)}\n`);
1043
+ console.log(chalk.green(`✓ .claude/settings.local.json created`));
1044
+ } catch (error) {
1045
+ console.error(chalk.red(`✗ Failed to create settings.local.json: ${error instanceof Error ? error.message : String(error)}`));
1046
+ }
1047
+ } else {
1048
+ console.log(chalk.dim(`⏭ .claude/settings.local.json already exists (preserved)`));
1049
+ }
1050
+ }
1022
1051
  // CLAUDE.md 복사/업데이트
1023
1052
  if (await exists(sourceClaudeMd)) {
1024
1053
  try {
@@ -1241,4 +1270,4 @@ status: draft
1241
1270
  return findAppRootPath();
1242
1271
  }
1243
1272
 
1244
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9iaW4vY2xpLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjaGFsayBmcm9tIFwiY2hhbGtcIjtcbmltcG9ydCBkb3RlbnYgZnJvbSBcImRvdGVudlwiO1xuXG5kb3RlbnYuY29uZmlnKCk7XG5cbmltcG9ydCBhc3NlcnQgZnJvbSBcImFzc2VydFwiO1xuaW1wb3J0IHsgZXhlY1N5bmMsIHNwYXduIH0gZnJvbSBcImNoaWxkX3Byb2Nlc3NcIjtcbmltcG9ydCB7IGNwLCBta2RpciwgcmVhZGRpciwgcmVhZEZpbGUsIHJtLCBzeW1saW5rLCB3cml0ZUZpbGUgfSBmcm9tIFwiZnMvcHJvbWlzZXNcIjtcbmltcG9ydCBrbmV4LCB7IHR5cGUgS25leCB9IGZyb20gXCJrbmV4XCI7XG5pbXBvcnQgeyBjcmVhdGVSZXF1aXJlIH0gZnJvbSBcIm1vZHVsZVwiO1xuaW1wb3J0IG9zIGZyb20gXCJvc1wiO1xuaW1wb3J0IHBhdGggZnJvbSBcInBhdGhcIjtcbmltcG9ydCBwcm9jZXNzIGZyb20gXCJwcm9jZXNzXCI7XG5pbXBvcnQgeyB0c2ljbGkgfSBmcm9tIFwidHNpY2xpXCI7XG5pbXBvcnQgeyBTb25hbXUgfSBmcm9tIFwiLi4vYXBpXCI7XG5pbXBvcnQgeyBhZGRDb21wYW5pb25zVG9FbnRpdGllcywgZ2VuZXJhdGVCZXR0ZXJBdXRoRW50aXRpZXMgfSBmcm9tIFwiLi4vYXV0aC9hdXRoLWdlbmVyYXRvclwiO1xuaW1wb3J0IHtcbiAgdHlwZSBCZXR0ZXJBdXRoUGx1Z2luSWQsXG4gIGlzVmFsaWRQbHVnaW5JZCxcbiAgU1VQUE9SVEVEX1BMVUdJTl9JRFMsXG59IGZyb20gXCIuLi9hdXRoL3BsdWdpbnMvZW50aXR5LWRlZmluaXRpb25zXCI7XG5pbXBvcnQgdHlwZSB7IFNvbmFtdURCQ29uZmlnIH0gZnJvbSBcIi4uL2RhdGFiYXNlL2RiXCI7XG5pbXBvcnQgeyBFbnRpdHlNYW5hZ2VyIH0gZnJvbSBcIi4uL2VudGl0eS9lbnRpdHktbWFuYWdlclwiO1xuaW1wb3J0IHsgTWlncmF0b3IgfSBmcm9tIFwiLi4vbWlncmF0aW9uL21pZ3JhdG9yXCI7XG5pbXBvcnQgeyBGaXh0dXJlTWFuYWdlciB9IGZyb20gXCIuLi90ZXN0aW5nL2ZpeHR1cmUtbWFuYWdlclwiO1xuaW1wb3J0IHtcbiAgZXhlY1dpdGhMaW5lUHJlZml4LFxuICBwcmludEJ1aWxkU3VtbWFyeSxcbiAgcHJpbnRUYXNrRmFpbGVkLFxuICBwcmludFRhc2tIZWFkZXIsXG4gIHByaW50VGFza1N0YXJ0LFxuICBwcmludFRhc2tTdWNjZXNzLFxufSBmcm9tIFwiLi4vdXRpbHMvY29uc29sZS11dGlsXCI7XG5pbXBvcnQgeyBleGlzdHMgfSBmcm9tIFwiLi4vdXRpbHMvZnMtdXRpbHNcIjtcbmltcG9ydCB7IGZpbmRBcGlSb290UGF0aCwgZmluZEFwcFJvb3RQYXRoIH0gZnJvbSBcIi4uL3V0aWxzL3V0aWxzXCI7XG5pbXBvcnQgeyBBUElfQVJUSUZBQ1RTLCB0eXBlIEJ1aWxkQXJ0aWZhY3QsIFdFQl9BUlRJRkFDVFMgfSBmcm9tIFwiLi9idWlsZC1jb25maWdcIjtcbmltcG9ydCB7IGZpeHR1cmVFeHBsb3JlQ29tbWFuZCwgZml4dHVyZUZldGNoQ29tbWFuZCwgZml4dHVyZUdlbkNvbW1hbmQgfSBmcm9tIFwiLi9maXh0dXJlXCI7XG5pbXBvcnQgeyB0ZXN0Q29tbWFuZCB9IGZyb20gXCIuL3Rlc3QtY29tbWFuZFwiO1xuXG5sZXQgbWlncmF0b3I6IE1pZ3JhdG9yO1xuXG4vKipcbiAqIENMSSDsmLXshZjsnYQg7YyM7Iux7ZWY64qUIO2XrO2NvCDtlajsiJhcbiAqL1xuZnVuY3Rpb24gcGFyc2VDbGlPcHRpb25zKGFyZ3Y6IHN0cmluZ1tdID0gcHJvY2Vzcy5hcmd2KToge1xuICBmbGFnczogU2V0PHN0cmluZz47IC8vIC0tcmVnZW5lcmF0ZSwgLS1haSwgLS1uby1jb25lcyDrk7FcbiAgb3B0aW9uczogUmVjb3JkPHN0cmluZywgc3RyaW5nPjsgLy8gLS1sb2NhbGUga28g65OxXG59IHtcbiAgY29uc3QgZmxhZ3MgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgY29uc3Qgb3B0aW9uczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYXJndi5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGFyZyA9IGFyZ3ZbaV07XG4gICAgaWYgKCFhcmcuc3RhcnRzV2l0aChcIi0tXCIpKSBjb250aW51ZTtcblxuICAgIC8vIC0tb3B0aW9uPXZhbHVlIO2YleyLnVxuICAgIGlmIChhcmcuaW5jbHVkZXMoXCI9XCIpKSB7XG4gICAgICBjb25zdCBba2V5LCB2YWx1ZV0gPSBhcmcuc2xpY2UoMikuc3BsaXQoXCI9XCIpO1xuICAgICAgb3B0aW9uc1trZXldID0gdmFsdWU7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvLyAtLW9wdGlvbiB2YWx1ZSDtmJXsi53snbjsp4Ag7ZmV7J24XG4gICAgY29uc3QgbmV4dEFyZyA9IGFyZ3ZbaSArIDFdO1xuICAgIGlmIChuZXh0QXJnICYmICFuZXh0QXJnLnN0YXJ0c1dpdGgoXCItLVwiKSAmJiAhbmV4dEFyZy5zdGFydHNXaXRoKFwiLVwiKSkge1xuICAgICAgb3B0aW9uc1thcmcuc2xpY2UoMildID0gbmV4dEFyZztcbiAgICAgIGkrKzsgLy8g64uk7J2MIGFyZ+uKlCDqsJLsnbTrr4DroZwg7Iqk7YK1XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIC0tZmxhZyDtmJXsi51cbiAgICAgIGZsYWdzLmFkZChhcmcuc2xpY2UoMikpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7IGZsYWdzLCBvcHRpb25zIH07XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGJvb3RzdHJhcCgpIHtcbiAgY29uc3Qgbm90VG9Jbml0ID0gW1wiZGV2XCIsIFwiYnVpbGRcIiwgXCJzdGFydFwiLCBcInNraWxsc1wiLCBcInRlc3RcIl0uaW5jbHVkZXMocHJvY2Vzcy5hcmd2WzJdID8/IFwiXCIpO1xuICBpZiAoIW5vdFRvSW5pdCkge1xuICAgIGF3YWl0IFNvbmFtdS5pbml0KGZhbHNlLCBmYWxzZSk7XG4gIH1cblxuICB0cnkge1xuICAgIC8vIHRzaWNsaeuKlCDsoJXtmZXtlZwg66qF66C57Ja0IOunpOy5reunjCDsp4Dsm5DtlZjrr4DroZwsIC0t66GcIOyLnOyeke2VmOuKlCDsmLXshZjqs7wg6re4IOqwkuydhCDtlYTthLDrp4Htlanri4jri6QuXG4gICAgLy8g7Ji17IWYIO2MjOyLseydgCDqsIEgcnVubmVyIO2VqOyImOyXkOyEnCDsm5Drs7ggcHJvY2Vzcy5hcmd266W8IOyCrOyaqe2VmOyXrCDsiJjtlontlanri4jri6QuXG4gICAgLy8gXCItLVwiKGJhcmUgZG91YmxlIGRhc2gp64qUIHBhc3N0aHJvdWdoIOq1rOu2hOyekOydtOuvgOuhnCwg6re4IOuSpOydmCDrqqjrk6Ag7J247J6Q64+EIOygnOyZuO2VqeuLiOuLpC5cbiAgICBjb25zdCBmaWx0ZXJlZEFyZ3Y6IHN0cmluZ1tdID0gW107XG4gICAgbGV0IHNraXBOZXh0ID0gZmFsc2U7XG4gICAgbGV0IGFmdGVyRG91YmxlRGFzaCA9IGZhbHNlO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcHJvY2Vzcy5hcmd2Lmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBhcmcgPSBwcm9jZXNzLmFyZ3ZbaV07XG4gICAgICBpZiAoYXJnID09PSBcIi0tXCIpIHtcbiAgICAgICAgYWZ0ZXJEb3VibGVEYXNoID0gdHJ1ZTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAoYWZ0ZXJEb3VibGVEYXNoKSBjb250aW51ZTtcbiAgICAgIGlmIChza2lwTmV4dCkge1xuICAgICAgICBza2lwTmV4dCA9IGZhbHNlO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmIChhcmcuc3RhcnRzV2l0aChcIi0tXCIpKSB7XG4gICAgICAgIC8vIC0tb3B0aW9uPXZhbHVlIO2YleyLneydgCDsnbQgYXJn66eMIOyKpO2CtVxuICAgICAgICBpZiAoYXJnLmluY2x1ZGVzKFwiPVwiKSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIC8vIC0tb3B0aW9uIHZhbHVlIO2YleyLneyduOyngCDtmZXsnbg6IOuLpOydjCBhcmfqsIAgLS3roZwg7Iuc7J6R7ZWY7KeAIOyViuycvOuptCDqsJLsnbQg7J6I64qUIOqyg1xuICAgICAgICBjb25zdCBuZXh0QXJnID0gcHJvY2Vzcy5hcmd2W2kgKyAxXTtcbiAgICAgICAgaWYgKG5leHRBcmcgJiYgIW5leHRBcmcuc3RhcnRzV2l0aChcIi0tXCIpICYmICFuZXh0QXJnLnN0YXJ0c1dpdGgoXCItXCIpKSB7XG4gICAgICAgICAgc2tpcE5leHQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgZmlsdGVyZWRBcmd2LnB1c2goYXJnKTtcbiAgICB9XG5cbiAgICAvLyBidWlsZC9kZXYg66qF66C57Ja06rCAIOyEnOu4jOy7pOunqOuTnCDsl4bsnbQg7Zi47Lac65CgIOuVjCBcImFsbFwi7J2EIOq4sOuzuOqwkuycvOuhnCDstpTqsIDtlanri4jri6QuXG4gICAgLy8g7JiIOiBgc29uYW11IGJ1aWxkYCDihpIgYHNvbmFtdSBidWlsZCBhbGxgLCBgc29uYW11IGRldmAg4oaSIGBzb25hbXUgZGV2IGFsbGBcbiAgICBjb25zdCBjbWQgPSBmaWx0ZXJlZEFyZ3ZbMl07XG4gICAgaWYgKChjbWQgPT09IFwiYnVpbGRcIiB8fCBjbWQgPT09IFwiZGV2XCIpICYmIGZpbHRlcmVkQXJndi5sZW5ndGggPT09IDMpIHtcbiAgICAgIGZpbHRlcmVkQXJndi5wdXNoKFwiYWxsXCIpO1xuICAgIH1cblxuICAgIC8vIHRlc3Qg7Luk66eo65Oc64qUIOqwgOuzgCDsnbjsnpAo7YyM7J2866qFLCAtLXBhdHRlcm4g65OxKeulvCDrsJvsnLzrr4DroZwgdHNpY2xp66W8IOyasO2ajO2VqeuLiOuLpC5cbiAgICBpZiAoY21kID09PSBcInRlc3RcIikge1xuICAgICAgcmV0dXJuIHRlc3RDb21tYW5kKCk7XG4gICAgfVxuXG4gICAgYXdhaXQgdHNpY2xpKGZpbHRlcmVkQXJndiwge1xuICAgICAgdHlwZXM6IHtcbiAgICAgICAgXCIjZW50aXR5SWRcIjoge1xuICAgICAgICAgIHR5cGU6IFwiYXV0b2NvbXBsZXRlXCIsXG4gICAgICAgICAgbmFtZTogXCIjZW50aXR5SWRcIixcbiAgICAgICAgICBtZXNzYWdlOiBcIlBsZWFzZSBpbnB1dCAjZW50aXR5SWRcIixcbiAgICAgICAgICBjaG9pY2VzOiBFbnRpdHlNYW5hZ2VyLmdldEFsbFBhcmVudElkcygpLm1hcCgoZW50aXR5SWQpID0+ICh7XG4gICAgICAgICAgICB0aXRsZTogZW50aXR5SWQsXG4gICAgICAgICAgICB2YWx1ZTogZW50aXR5SWQsXG4gICAgICAgICAgfSkpLFxuICAgICAgICB9LFxuICAgICAgICBcIiNyZWNvcmRJZHNcIjogXCJudW1iZXJbXVwiLFxuICAgICAgICBcIiNuYW1lXCI6IFwic3RyaW5nXCIsXG4gICAgICAgIFwiI3RhcmdldHNcIjoge1xuICAgICAgICAgIHR5cGU6IFwibXVsdGlzZWxlY3RcIixcbiAgICAgICAgICBuYW1lOiBcIiN0YXJnZXRzXCIsXG4gICAgICAgICAgbWVzc2FnZTogXCJQbGVhc2UgaW5wdXQgI3RhcmdldHNcIixcbiAgICAgICAgICBjaG9pY2VzOiBbXG4gICAgICAgICAgICB7IHRpdGxlOiBcIkRldmVsb3BtZW50XCIsIHZhbHVlOiBcImRldmVsb3BtZW50X21hc3RlclwiIH0sXG4gICAgICAgICAgICB7IHRpdGxlOiBcIlByb2R1Y3Rpb25cIiwgdmFsdWU6IFwicHJvZHVjdGlvbl9tYXN0ZXJcIiB9LFxuICAgICAgICAgICAgeyB0aXRsZTogXCJGaXh0dXJlXCIsIHZhbHVlOiBcImZpeHR1cmVcIiB9LFxuICAgICAgICAgICAgeyB0aXRsZTogXCJUZXN0XCIsIHZhbHVlOiBcInRlc3RcIiB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgYXJnczogW1xuICAgICAgICBbXCJmaXh0dXJlXCIsIFwiaW5pdFwiXSxcbiAgICAgICAgW1wiZml4dHVyZVwiLCBcImltcG9ydFwiLCBcIiNlbnRpdHlJZFwiLCBcIiNyZWNvcmRJZHNcIl0sXG4gICAgICAgIFtcImZpeHR1cmVcIiwgXCJzeW5jXCJdLFxuICAgICAgICBbXCJmaXh0dXJlXCIsIFwiZ2VuXCJdLFxuICAgICAgICBbXCJmaXh0dXJlXCIsIFwiZmV0Y2hcIl0sXG4gICAgICAgIFtcImZpeHR1cmVcIiwgXCJleHBsb3JlXCJdLFxuICAgICAgICBbXCJtaWdyYXRlXCIsIFwicnVuXCJdLFxuICAgICAgICBbXCJtaWdyYXRlXCIsIFwiYXBwbHlcIiwgXCIjdGFyZ2V0c1wiXSxcbiAgICAgICAgW1wibWlncmF0ZVwiLCBcInN0YXR1c1wiXSxcbiAgICAgICAgW1wic3R1YlwiLCBcInByYWN0aWNlXCIsIFwiI25hbWVcIl0sXG4gICAgICAgIFtcInN0dWJcIiwgXCJlbnRpdHlcIiwgXCIjbmFtZVwiXSxcbiAgICAgICAgW1wic2NhZmZvbGRcIiwgXCJtb2RlbFwiLCBcIiNlbnRpdHlJZFwiXSxcbiAgICAgICAgW1wic2NhZmZvbGRcIiwgXCJtb2RlbF90ZXN0XCIsIFwiI2VudGl0eUlkXCJdLFxuICAgICAgICBbXCJzY2FmZm9sZFwiLCBcInZpZXdfbGlzdFwiLCBcIiNlbnRpdHlJZFwiXSxcbiAgICAgICAgW1wic2NhZmZvbGRcIiwgXCJ2aWV3X2Zvcm1cIiwgXCIjZW50aXR5SWRcIl0sXG4gICAgICAgIFtcImNvbmVcIiwgXCJnZW5cIiwgXCIjZW50aXR5SWRcIl0sXG4gICAgICAgIFtcInN5bmNcIl0sXG4gICAgICAgIFtcImJ1aWxkXCIsIFwiYWxsXCJdLFxuICAgICAgICBbXCJidWlsZFwiLCBcImFwaVwiXSxcbiAgICAgICAgW1wiYnVpbGRcIiwgXCJ3ZWJcIl0sXG4gICAgICAgIFtcImRldlwiLCBcImFsbFwiXSxcbiAgICAgICAgW1wiZGV2XCIsIFwiYXBpXCJdLFxuICAgICAgICBbXCJkZXZcIiwgXCJ3ZWJcIl0sXG4gICAgICAgIFtcInN0YXJ0XCJdLFxuICAgICAgICBbXCJza2lsbHNcIiwgXCJzeW5jXCJdLFxuICAgICAgICBbXCJza2lsbHNcIiwgXCJjcmVhdGVcIiwgXCIjbmFtZVwiXSxcbiAgICAgICAgW1widGVzdFwiXSxcbiAgICAgICAgW1wiYXV0aFwiLCBcImdlbmVyYXRlXCJdLFxuICAgICAgICBbXCJhdXRoXCIsIFwiYWRkLWNvbXBhbmlvbnNcIl0sXG4gICAgICBdLFxuICAgICAgcnVubmVyczoge1xuICAgICAgICBtaWdyYXRlX3N0YXR1cyxcbiAgICAgICAgbWlncmF0ZV9ydW4sXG4gICAgICAgIG1pZ3JhdGVfYXBwbHksXG4gICAgICAgIGZpeHR1cmVfaW5pdCxcbiAgICAgICAgZml4dHVyZV9pbXBvcnQsXG4gICAgICAgIGZpeHR1cmVfc3luYyxcbiAgICAgICAgZml4dHVyZV9nZW4sXG4gICAgICAgIGZpeHR1cmVfZmV0Y2gsXG4gICAgICAgIGZpeHR1cmVfZXhwbG9yZSxcbiAgICAgICAgc3R1Yl9wcmFjdGljZSxcbiAgICAgICAgc3R1Yl9lbnRpdHksXG4gICAgICAgIHNjYWZmb2xkX21vZGVsLFxuICAgICAgICBzY2FmZm9sZF9tb2RlbF90ZXN0LFxuICAgICAgICAvLyBzY2FmZm9sZF92aWV3X2xpc3QsXG4gICAgICAgIC8vIHNjYWZmb2xkX3ZpZXdfZm9ybSxcbiAgICAgICAgY29uZV9nZW4sXG4gICAgICAgIHN5bmMsXG4gICAgICAgIGJ1aWxkX2FsbCxcbiAgICAgICAgYnVpbGRfYXBpLFxuICAgICAgICBidWlsZF93ZWIsXG4gICAgICAgIGRldl9hbGwsXG4gICAgICAgIGRldl9hcGksXG4gICAgICAgIGRldl93ZWIsXG4gICAgICAgIHN0YXJ0LFxuICAgICAgICBza2lsbHNfc3luYyxcbiAgICAgICAgc2tpbGxzX2NyZWF0ZSxcbiAgICAgICAgdGVzdDogdGVzdENvbW1hbmQsXG4gICAgICAgIGF1dGhfZ2VuZXJhdGUsXG4gICAgICAgIFwiYXV0aF9hZGQtY29tcGFuaW9uc1wiOiBhdXRoX2FkZF9jb21wYW5pb25zLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfSBmaW5hbGx5IHtcbiAgICBhd2FpdCBTb25hbXUuZGVzdHJveSgpO1xuICB9XG59XG5cbmJvb3RzdHJhcCgpLmZpbmFsbHkoYXN5bmMgKCkgPT4ge1xuICBhd2FpdCBGaXh0dXJlTWFuYWdlci5kZXN0cm95KCk7XG59KTtcblxuLyoqXG4gKiBwbnBtIHN5bmMg7ZWY66m0IOyLpO2WieuQmOuKlCDtlajsiJjsnoXri4jri6QuXG4gKiDtlITroZzsoJ3tirjrpbwg7Iux7YGs7ZWp64uI64ukLlxuICovXG5hc3luYyBmdW5jdGlvbiBzeW5jKCkge1xuICBhd2FpdCBTb25hbXUuc3luY2VyLnN5bmMoKTtcbn1cblxuLyoqXG4gKiBBUEkg6rCc67CcIOyEnOuyhOulvCDsi6TtlontlZjripQg6rO17Ya1IOuhnOyngeyeheuLiOuLpC5cbiAqIGRldl9hbGzqs7wgZGV2X2FwaeyXkOyEnCDqs7XsnKDtlanri4jri6QuXG4gKlxuICogVHlwZVNjcmlwdOulvCDrsJTroZwg7Iuk7ZaJ7ZWgIOyImCDsnojrj4TroZ0gQHNvbmFtdS1raXQvdHMtbG9hZGVy66W8LFxuICogSE1S7J2EIOyngOybkO2VmOq4sCDsnITtlbQgQHNvbmFtdS1raXQvaG1yLWhvb2vsnYQgaW1wb3J07ZWY66mwLFxuICog7IaM7Iqk66e1IOyngOybkOydhCDsnITtlbQgLS1lbmFibGUtc291cmNlLW1hcHMg7ZSM656Y6re466W8IO2PrO2VqO2VmOyXrCDsi6Ttlontlanri4jri6QuXG4gKlxuICog7J2065WMIEBzb25hbXUta2l0L3RzLWxvYWRlcuyZgCBAc29uYW11LWtpdC9obXItaG9va+uKlCBzb25hbXXqsIAg7J6Q7LK07KCB7Jy866GcIOqwgOyngOqzoCDsnojripQgZGVwZW5kZW5jeeyeheuLiOuLpC5cbiAqIOuYkO2VnCDsi6Ttlonsl5Ag7IKs7Jqp7ZWY64qUIEBzb25hbXUta2l0L2htci1ydW5uZXLrj4Qg66eI7LCs6rCA7KeA66GcIHNvbmFtdeqwgCDsnpDssrTsoIHsnLzroZwg6rCA7KeA6rOgIOyeiOuKlCBkZXBlbmRlbmN57J6F64uI64ukLlxuICog65Sw65287IScIOyCrOyaqeyekCDtlITroZzsoJ3tirjsl5DshJzripQg7J20IOyEuCDtjKjtgqTsp4Drpbwg7KeB7KCRIOyEpOy5mO2VoCDtlYTsmpTqsIAg7JeG7Iq164uI64ukLlxuICovXG5mdW5jdGlvbiBzcGF3bkFwaURldlNlcnZlcihvcHRpb25zPzogeyBleHRyYUVudj86IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gfSkge1xuICBjb25zdCBhcGlSb290ID0gZmluZEFwaVJvb3RQYXRoKCk7XG4gIGNvbnN0IGVudHJ5UG9pbnQgPSBcInNyYy9pbmRleC50c1wiO1xuXG4gIC8vIOydtCBzb25hbXUg7Yyo7YKk7KeA6rCAIGRlcGVuZGVuY2llc+uhnCDqsIDsp4Dqs6Ag7J6I64qUIEBzb25hbXUta2l0L2htci1ydW5uZXLsnZggYmluL3J1bi5qc+ulvCDsgqzsmqntlanri4jri6QuXG4gIC8vIOydtCDqsr3roZwoL2Jpbi9ydW4uanMp64qUIEBzb25hbXUta2l0L2htci1ydW5uZXLsnZggcGFja2FnZS5qc29u7J2YIGJpbiDtlYTrk5zsl5Ag66qF7Iuc65CY7Ja0IOyeiOuKlCDqt7jqsoPqs7wg6rCZ7Iq164uI64ukLlxuICBjb25zdCBob3RSdW5uZXJCaW5QYXRoID0gY3JlYXRlUmVxdWlyZShpbXBvcnQubWV0YS51cmwpLnJlc29sdmUoXG4gICAgXCJAc29uYW11LWtpdC9obXItcnVubmVyL2Jpbi9ydW4uanNcIixcbiAgKTtcblxuICBjb25zdCBzZXJ2ZXJQcm9jZXNzID0gc3Bhd24oXG4gICAgcHJvY2Vzcy5leGVjUGF0aCwgLy8gbm9kZVxuICAgIFtcbiAgICAgIGhvdFJ1bm5lckJpblBhdGgsIC8vIOydtOugh+qyjCDtlbTshJwgaG90LXJ1bm5lcuulvCDsi6TtlontlZjqtazsmpRcbiAgICAgIFwiLS1jbGVhci1zY3JlZW49ZmFsc2VcIiwgLy8g7J207ZWYIGhvdC1ydW5uZXLsl5Dqsowg64SY6rKo7KSEIOyduOyekOuTpOyeheuLiOuLpC5cbiAgICAgIFwiLS1ub2RlLWFyZ3M9LS1pbXBvcnQ9c29uYW11L3RzLWxvYWRlci1yZWdpc3RlclwiLCAvLyBUeXBlU2NyaXB0IOyEnO2PrO2KuOulvCDsnITtlZwg66Gc642ULFxuICAgICAgXCItLW5vZGUtYXJncz0tLWltcG9ydD1zb25hbXUvaG1yLWhvb2stcmVnaXN0ZXJcIiwgLy8gSE1S7J2EIOyngOybkO2VmOq4sCDsnITtlZwgaG9vayxcbiAgICAgIFwiLS1ub2RlLWFyZ3M9LS1lbmFibGUtc291cmNlLW1hcHNcIiwgLy8g6re466as6rOgIOyGjOyKpOuntSDsp4Dsm5DsnYQg7JyE7ZWcIO2UjOuemOq3uOyeheuLiOuLpC5cbiAgICAgIFwiLS1vbi1rZXk9cjpyZXN0YXJ0OlJlc3RhcnQgc2VydmVyXCIsIC8vIHIg64iE66W066m0IOyEnOuyhCDsnqzsi5zsnpHtlZjqsowg7ZW07KSY7JqULlxuICAgICAgXCItLW9uLWtleT1jOmNsZWFyOkNsZWFyIHNjcmVlblwiLCAvLyBjIOuIhOultOuptCDthLDrr7jrhJAg7ZmU66m07J2EIOyngOybjOykmOyalC5cbiAgICAgIGAtLW9uLWtleT1mOnNoZWxsKHJtICR7cGF0aC5qb2luKGFwaVJvb3QsIFwic29uYW11LmxvY2tcIil9KTpyZXN0YXJ0OkZvcmNlIHJlc3RhcnRgLCAvLyBmIOuIhOultOuptCBzb25hbXUubG9jayDtjIzsnbzsnYQg7KeA7Jqw6rOgIOyEnOuyhCDsnqzsi5zsnpHtlZjqsowg7ZW07KSY7JqULlxuXG4gICAgICBcIi0tb24ta2V5PWVudGVyOnNoZWxsKGVjaG8gaGkpOktleSBiaW5kaW5nIHRlc3RcIiwgLy8gZW50ZXLrpbwga2V566GcIOyTuCDsiJgg7J6I7J2M7J2EIOuztOydtOq4sCDsnITtlZwg7YWM7Iqk7Yq47J6F64uI64ukLlxuICAgICAgXCItLW9uLWtleT1jdHJsK2YgY3RybCtmOnNoZWxsKGdpdCBwdWxsICYmIHBucG0gaW5zdGFsbCAmJiBwbnBtIC0tZmlsdGVyIHNvbmFtdSBidWlsZCAmJiBlY2hvICdTb25hbXUgaXMgbm93IHVwLXRvLWRhdGUhJyk6cmVzdGFydDpQdWxsICYgaW5zdGFsbCAmIGJ1aWxkICYgcmVzdGFydFwiLCAvLyBtb2RpZmllcuyZgOydmCDsobDtlaksIOq3uOumrOqzoCDrkZAg6rCc7J2YIGNob3Jk66W8IOyCrOyaqe2VoCDsiJgg7J6I7J2M7J2EIOuztOydtOq4sCDsnITtlZwg7YWM7Iqk7Yq47J6F64uI64ukLlxuICAgICAgZW50cnlQb2ludCwgLy8g66eI7KeA66eJ7Jy866GcIOyLpOygnCDsi6TtlontlaAg7Iqk7YGs66a97Yq47J2YIOqyveuhnOulvCDrhJjqsqjspI3ri4jri6QuXG4gICAgXSxcbiAgICB7XG4gICAgICBjd2Q6IGFwaVJvb3QsXG4gICAgICBzdGRpbzogXCJpbmhlcml0XCIsXG4gICAgICBlbnY6IHtcbiAgICAgICAgLi4ucHJvY2Vzcy5lbnYsXG4gICAgICAgIE5PREVfRU5WOiBcImRldmVsb3BtZW50XCIsXG4gICAgICAgIEhPVDogXCJ5ZXNcIiwgLy8g7JaY6rCAIOyeiOyWtOyVvCBITVLsnbQg7Zmc7ISx7ZmU65Cp64uI64ukLlxuICAgICAgICBBUElfUk9PVF9QQVRIOiBhcGlSb290LCAvLyDsnbQg6rK966Gc6rCAIGhtci1ob29r7J2YIOujqO2KuCDrlJTroInthqDrpqzqsIAg65Cp64uI64ukLlxuICAgICAgICAuLi5vcHRpb25zPy5leHRyYUVudixcbiAgICAgIH0sXG4gICAgfSxcbiAgKTtcblxuICAvLyDsooXro4wg7LKY66asXG4gIGNvbnN0IGNsZWFudXAgPSAoKSA9PiB7XG4gICAgY29uc29sZS5sb2coY2hhbGsueWVsbG93KFwiXFxuXFxu8J+RiyBTaHV0dGluZyBkb3duLi4uXCIpKTtcbiAgICBzZXJ2ZXJQcm9jZXNzLmtpbGwoXCJTSUdURVJNXCIpO1xuICAgIHByb2Nlc3MuZXhpdCgwKTtcbiAgfTtcblxuICBwcm9jZXNzLm9uKFwiU0lHSU5UXCIsIGNsZWFudXApO1xuICBwcm9jZXNzLm9uKFwiU0lHVEVSTVwiLCBjbGVhbnVwKTtcblxuICBzZXJ2ZXJQcm9jZXNzLm9uKFwiZXhpdFwiLCAoY29kZSkgPT4ge1xuICAgIGlmIChjb2RlICE9PSAwKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGNoYWxrLnJlZChgU2VydmVyIGV4aXRlZCB3aXRoIGNvZGUgJHtjb2RlfWApKTtcbiAgICAgIHByb2Nlc3MuZXhpdChjb2RlIHx8IDEpO1xuICAgIH1cbiAgfSk7XG59XG5cbi8qKlxuICogcG5wbSBkZXYgLyBwbnBtIGRldiBhbGwg7ZWY66m0IOyLpO2WieuQmOuKlCDtlajsiJjsnoXri4jri6QuXG4gKiDtlITroZzsoJ3tirjsl5Ag64yA7ZW0IEhNUiDsp4Dsm5DtlZjripQg6rCc67CcIOyEnOuyhOulvCDrnYTsm4zspI3ri4jri6QuXG4gKlxuICogU29uYW11LmluaXQg7JeG7J20IO2YuOy2nOuQoCDqsoPsnYQg7IOB7KCV7ZWY7JesIOq1rO2YhOuQmOyXiOyKteuLiOuLpC5cbiAqL1xuZnVuY3Rpb24gZGV2X2FsbCgpIHtcbiAgY29uc29sZS5sb2coY2hhbGsueWVsbG93LmJvbGQoXCJTdGFydGluZyBTb25hbXUgZGV2IHNlcnZlci4uLlxcblwiKSk7XG4gIHNwYXduQXBpRGV2U2VydmVyKCk7XG59XG5cbi8qKlxuICogcG5wbSBkZXYgYXBpIO2VmOuptCDsi6TtlonrkJjripQg7ZWo7IiY7J6F64uI64ukLlxuICogQVBJIOyghOyaqSDqsJzrsJwg7ISc67KE66W8IOudhOybgeuLiOuLpC5cbiAqIGRldl9hbGzqs7wg6rGw7J2YIOuPmeydvO2VmOuQmCwg7Ya17ZWpIOybuSDshJzrsoTrpbwg67mE7Zmc7ISx7ZmU7ZWp64uI64ukLlxuICpcbiAqIFNvbmFtdS5pbml0IOyXhuydtCDtmLjstpzrkKAg6rKD7J2EIOyDgeygle2VmOyXrCDqtaztmITrkJjsl4jsirXri4jri6QuXG4gKi9cbmZ1bmN0aW9uIGRldl9hcGkoKSB7XG4gIGNvbnNvbGUubG9nKGNoYWxrLnllbGxvdy5ib2xkKFwiU3RhcnRpbmcgU29uYW11IEFQSS1vbmx5IGRldiBzZXJ2ZXIuLi5cXG5cIikpO1xuICBzcGF3bkFwaURldlNlcnZlcih7XG4gICAgZXh0cmFFbnY6IHsgU09OQU1VX0RJU0FCTEVfSU5URUdSQVRFRF9XRUI6IFwieWVzXCIgfSxcbiAgfSk7XG59XG5cbi8qKlxuICogcG5wbSBkZXYgd2ViIO2VmOuptCDsi6TtlonrkJjripQg7ZWo7IiY7J6F64uI64ukLlxuICogVml0ZSDqsJzrsJwg7ISc67KE66W8IOuLqOuPheycvOuhnCDsi6Ttlontlanri4jri6QuXG4gKiAtLSDrkqTsnZgg7J247J6Q64qUIFZpdGXsl5Ag6re464yA66GcIOyghOuLrOuQqeuLiOuLpC5cbiAqXG4gKiBTb25hbXUuaW5pdCDsl4bsnbQg7Zi47Lac65CgIOqyg+ydhCDsg4HsoJXtlZjsl6wg6rWs7ZiE65CY7JeI7Iq164uI64ukLlxuICovXG5hc3luYyBmdW5jdGlvbiBkZXZfd2ViKCkge1xuICBjb25zdCBhcHBSb290ID0gZmluZEFwcFJvb3RQYXRoKCk7XG4gIGNvbnN0IHdlYlBhdGggPSBwYXRoLmpvaW4oYXBwUm9vdCwgXCJ3ZWJcIik7XG5cbiAgaWYgKCEoYXdhaXQgZXhpc3RzKHdlYlBhdGgpKSkge1xuICAgIGNvbnNvbGUuZXJyb3IoYHdlYiDrlJTroInthqDrpqzrpbwg7LC+7J2EIOyImCDsl4bsirXri4jri6Q6ICR7d2ViUGF0aH1gKTtcbiAgICBwcm9jZXNzLmV4aXQoMSk7XG4gIH1cblxuICAvLyAtLSDrkqTsnZgg7J247J6QIOy2lOy2nFxuICBjb25zdCBkb3VibGVEYXNoSW5kZXggPSBwcm9jZXNzLmFyZ3YuaW5kZXhPZihcIi0tXCIpO1xuICBjb25zdCBwYXNzdGhyb3VnaEFyZ3MgPSBkb3VibGVEYXNoSW5kZXggIT09IC0xID8gcHJvY2Vzcy5hcmd2LnNsaWNlKGRvdWJsZURhc2hJbmRleCArIDEpIDogW107XG5cbiAgY29uc3Qgdml0ZUFyZ3MgPSBbXCJleGVjXCIsIFwidml0ZVwiLCAuLi5wYXNzdGhyb3VnaEFyZ3NdO1xuXG4gIGNvbnNvbGUubG9nKGNoYWxrLnllbGxvdy5ib2xkKFwiU3RhcnRpbmcgVml0ZSBkZXYgc2VydmVyLi4uXFxuXCIpKTtcblxuICBjb25zdCB2aXRlUHJvY2VzcyA9IHNwYXduKFwicG5wbVwiLCB2aXRlQXJncywge1xuICAgIGN3ZDogd2ViUGF0aCxcbiAgICBzdGRpbzogXCJpbmhlcml0XCIsXG4gIH0pO1xuXG4gIHZpdGVQcm9jZXNzLm9uKFwiZXhpdFwiLCAoY29kZSkgPT4ge1xuICAgIHByb2Nlc3MuZXhpdChjb2RlID8/IDApO1xuICB9KTtcblxuICAvLyBTSUdJTlQvU0lHVEVSTSDsi5wgVml0ZSDtlITroZzshLjsiqTrpbwgZ3JhY2VmdWxseSDsooXro4ztlanri4jri6QuXG4gIGZvciAoY29uc3Qgc2lnbmFsIG9mIFtcIlNJR0lOVFwiLCBcIlNJR1RFUk1cIl0gYXMgY29uc3QpIHtcbiAgICBwcm9jZXNzLm9uKHNpZ25hbCwgKCkgPT4ge1xuICAgICAgdml0ZVByb2Nlc3Mua2lsbChzaWduYWwpO1xuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICogU1dDIOyEpOyglSDtjIzsnbwg6rK966Gc66W8IOqysOygle2VqeuLiOuLpC4gQVBJIOu5jOuTnChTV0Mp7JeQ7ISc66eMIOyCrOyaqeuQqeuLiOuLpC5cbiAqIO2UhOuhnOygne2KuCDro6jtirjsl5AgLnN3Y3Jj6rCAIOyeiOycvOuptCDqt7jqsoPsnYQsIOyXhuycvOuptCBzb25hbXUg6riw67O4IOyEpOygleydhCDsgqzsmqntlanri4jri6QuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHJlc29sdmVTd2NDb25maWdQYXRoKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGxldCBzd2NGaWxlUGF0aCA9IFwiLnN3Y3JjXCI7XG4gIHRyeSB7XG4gICAgaWYgKGF3YWl0IGV4aXN0cyhzd2NGaWxlUGF0aCkpIHtcbiAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmRpbShcIlVzaW5nIC5zd2NyYyBmcm9tIHByb2plY3Qgcm9vdC4uLlwiKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmRpbShcIlVzaW5nIGRlZmF1bHQgLnN3Y3JjIGZyb20gc29uYW11IHBhY2thZ2UuLi5cIikpO1xuICAgICAgc3djRmlsZVBhdGggPSBwYXRoLmpvaW4oaW1wb3J0Lm1ldGEuZGlybmFtZSwgXCIuLlwiLCBcIi4uXCIsIFwiLnN3Y3JjLnByb2plY3QtZGVmYXVsdFwiKTtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc29sZS5lcnJvcihjaGFsay5yZWQoXCJTZXR0aW5nIHVwIHN3YyBjb25maWcgZmlsZSBmYWlsZWQuXCIpLCBlcnJvcik7XG4gICAgcHJvY2Vzcy5leGl0KDEpO1xuICB9XG4gIHJldHVybiBzd2NGaWxlUGF0aDtcbn1cblxuLyoqXG4gKiBzb25hbXUgYnVpbGQgLyBzb25hbXUgYnVpbGQgYWxsIO2VmOuptCDsi6TtlonrkJjripQg7ZWo7IiY7J6F64uI64ukLlxuICogYnVpbGRfYXBpICsgYnVpbGRfd2Vi7J2YIO2VqeyEseyeheuLiOuLpC4gV2ViIOuUlOugie2GoOumrOqwgCDsl4bsnLzrqbQgV2ViIOu5jOuTnOulvCDsiqTtgrXtlanri4jri6QuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGJ1aWxkX2FsbCgpIHtcbiAgYXdhaXQgYnVpbGRfYXBpKCk7XG4gIGF3YWl0IGJ1aWxkX3dlYih7IHNraXBJZk1pc3Npbmc6IHRydWUgfSk7XG59XG5cbi8qKlxuICogcG5wbSBidWlsZCBhcGkg7ZWY66m0IOyLpO2WieuQmOuKlCDtlajsiJjsnoXri4jri6QuXG4gKiBBUEkg7ZSE66Gc7KCd7Yq466eMIOu5jOuTnO2VqeuLiOuLpC5cbiAqXG4gKiBTb25hbXUuaW5pdCDsl4bsnbQg7Zi47Lac65CgIOqyg+ydhCDsg4HsoJXtlZjsl6wg6rWs7ZiE65CY7JeI7Iq164uI64ukLlxuICovXG5hc3luYyBmdW5jdGlvbiBidWlsZF9hcGkoKSB7XG4gIGNvbnN0IGFwcFJvb3QgPSBmaW5kQXBwUm9vdFBhdGgoKTtcbiAgY29uc3Qgc3djRmlsZVBhdGggPSBhd2FpdCByZXNvbHZlU3djQ29uZmlnUGF0aCgpO1xuXG4gIGNvbnN0IGFwaVN0YXJ0ZWRBdCA9IERhdGUubm93KCk7XG4gIHRyeSB7XG4gICAgZm9yIChjb25zdCBhcnRpZmFjdCBvZiBBUElfQVJUSUZBQ1RTKSB7XG4gICAgICBjb25zdCBjd2QgPSBwYXRoLmpvaW4oYXBwUm9vdCwgYXJ0aWZhY3QucHJvamVjdFBhdGgpO1xuICAgICAgcHJpbnRUYXNrSGVhZGVyKGFydGlmYWN0Lm5hbWUsIGFydGlmYWN0LmRlc2NyaXB0aW9uLCBjd2QpO1xuXG4gICAgICBhd2FpdCBydW5CdWlsZFN0ZXBzKGFydGlmYWN0LCB7IGN3ZCwgYnVpbGRDb21tYW5kQXJnczogeyBjb25maWdGaWxlUGF0aDogc3djRmlsZVBhdGggfSB9KTtcbiAgICB9XG4gICAgcHJpbnRCdWlsZFN1bW1hcnkoXCJBUElcIiwgdHJ1ZSwgRGF0ZS5ub3coKSAtIGFwaVN0YXJ0ZWRBdCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBwcmludEJ1aWxkU3VtbWFyeShcIkFQSVwiLCBmYWxzZSwgRGF0ZS5ub3coKSAtIGFwaVN0YXJ0ZWRBdCk7XG4gICAgY29uc29sZS5lcnJvcihlKTtcbiAgICBwcm9jZXNzLmV4aXQoMSk7XG4gIH1cbn1cblxuLyoqXG4gKiBwbnBtIGJ1aWxkIHdlYiDtlZjrqbQg7Iuk7ZaJ65CY64qUIO2VqOyImOyeheuLiOuLpC5cbiAqIFdlYiDtlITroZzsoJ3tirjrp4wg67mM65Oc7ZWp64uI64ukLlxuICpcbiAqIFNvbmFtdS5pbml0IOyXhuydtCDtmLjstpzrkKAg6rKD7J2EIOyDgeygle2VmOyXrCDqtaztmITrkJjsl4jsirXri4jri6QuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGJ1aWxkX3dlYih7IHNraXBJZk1pc3NpbmcgPSBmYWxzZSB9ID0ge30pIHtcbiAgY29uc3QgYXBwUm9vdCA9IGZpbmRBcHBSb290UGF0aCgpO1xuICBjb25zdCB3ZWJQYXRoID0gcGF0aC5qb2luKGFwcFJvb3QsIFwid2ViXCIpO1xuXG4gIGlmICghKGF3YWl0IGV4aXN0cyh3ZWJQYXRoKSkpIHtcbiAgICBpZiAoc2tpcElmTWlzc2luZykge1xuICAgICAgY29uc29sZS5sb2coY2hhbGsuZ3JheShcIldlYiDrlJTroInthqDrpqzqsIAg7JeG7Jy866+A66GcIFdlYiDruYzrk5zrpbwg6rG064SI65yB64uI64ukLlwiKSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnNvbGUuZXJyb3IoYHdlYiDrlJTroInthqDrpqzrpbwg7LC+7J2EIOyImCDsl4bsirXri4jri6Q6ICR7d2ViUGF0aH1gKTtcbiAgICBwcm9jZXNzLmV4aXQoMSk7XG4gIH1cblxuICBjb25zdCB3ZWJTdGFydGVkQXQgPSBEYXRlLm5vdygpO1xuICB0cnkge1xuICAgIGZvciAoY29uc3QgYXJ0aWZhY3Qgb2YgV0VCX0FSVElGQUNUUykge1xuICAgICAgY29uc3QgY3dkID0gcGF0aC5qb2luKGFwcFJvb3QsIGFydGlmYWN0LnByb2plY3RQYXRoKTtcbiAgICAgIHByaW50VGFza0hlYWRlcihhcnRpZmFjdC5uYW1lLCBhcnRpZmFjdC5kZXNjcmlwdGlvbiwgY3dkKTtcblxuICAgICAgYXdhaXQgcnVuQnVpbGRTdGVwcyhhcnRpZmFjdCwgeyBjd2QsIGJ1aWxkQ29tbWFuZEFyZ3M6IHt9IH0pO1xuICAgIH1cbiAgICBwcmludEJ1aWxkU3VtbWFyeShcIldlYlwiLCB0cnVlLCBEYXRlLm5vdygpIC0gd2ViU3RhcnRlZEF0KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHByaW50QnVpbGRTdW1tYXJ5KFwiV2ViXCIsIGZhbHNlLCBEYXRlLm5vdygpIC0gd2ViU3RhcnRlZEF0KTtcbiAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgfVxufVxuXG4vKipcbiAqIHByZS1idWlsZCwgYnVpbGQsIHBvc3QtYnVpbGQg64uo6rOE66W8IOyInOywqOyggeycvOuhnCDsi6Ttlontlanri4jri6QuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHJ1bkJ1aWxkU3RlcHM8VD4oXG4gIGFydGlmYWN0OiBCdWlsZEFydGlmYWN0PFQ+LFxuICBvcHRpb25zOiB7IGN3ZDogc3RyaW5nOyBidWlsZENvbW1hbmRBcmdzOiBUIH0sXG4pIHtcbiAgY29uc3Qgc3RlcHMgPSBbXG4gICAgeyBuYW1lOiBcInByZS1idWlsZFwiLCBjbWQ6IGFydGlmYWN0LnByZUJ1aWxkQ29tbWFuZD8uKCkgfSxcbiAgICB7IG5hbWU6IFwiYnVpbGRcIiwgY21kOiBhcnRpZmFjdC5idWlsZENvbW1hbmQob3B0aW9ucy5idWlsZENvbW1hbmRBcmdzKSB9LFxuICAgIHsgbmFtZTogXCJwb3N0LWJ1aWxkXCIsIGNtZDogYXJ0aWZhY3QucG9zdEJ1aWxkQ29tbWFuZD8uKCkgfSxcbiAgXS5maWx0ZXIoKHN0ZXApID0+IHN0ZXAuY21kKTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IHN0ZXBzLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3Qgc3RlcCA9IHN0ZXBzW2ldO1xuICAgIGNvbnN0IGlzTGFzdCA9IGkgPT09IHN0ZXBzLmxlbmd0aCAtIDE7XG5cbiAgICB0cnkge1xuICAgICAgYXNzZXJ0KHN0ZXAuY21kKTtcbiAgICAgIHByaW50VGFza1N0YXJ0KHN0ZXAubmFtZSwgc3RlcC5jbWQsIGlzTGFzdCk7XG4gICAgICBhd2FpdCBleGVjV2l0aExpbmVQcmVmaXgoc3RlcC5jbWQsIHsgY3dkOiBvcHRpb25zLmN3ZCB9KTtcbiAgICAgIHByaW50VGFza1N1Y2Nlc3Moc3RlcC5uYW1lLCBpc0xhc3QpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHByaW50VGFza0ZhaWxlZChzdGVwLm5hbWUsIGlzTGFzdCk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7c3RlcC5uYW1lfSBmYWlsZWRgLCB7IGNhdXNlOiBlIH0pO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIHBucG0gc3RhcnQg7ZWY66m0IOyLpO2WieuQmOuKlCDtlajsiJjsnoXri4jri6QuXG4gKiDruYzrk5zrkJwg7ZSE66Gc7KCd7Yq466W8IOyLpO2Wie2VqeuLiOuLpC5cbiAqXG4gKiDruYzrk5zrkJwg6rKw6rO866y8KGRpc3Qg65SU66CJ7Yag66as7J2YIGluZGV4LmpzIOyXlO2KuOumrO2PrOyduO2KuCnsnbQg7JeG64uk66m0IOyLpO2WieydhCDspJHri6jtlanri4jri6QuXG4gKiDshozsiqTrp7Ug7KeA7JuQ6rO8IGRvdGVudiDsp4Dsm5DsnYQg7Y+s7ZWo7ZWY7JesIOyLpO2Wie2VqeuLiOuLpC5cbiAqXG4gKiBTb25hbXUuaW5pdCDsl4bsnbQg7Zi47Lac65CgIOqyg+ydhCDsg4HsoJXtlZjsl6wg6rWs7ZiE65CY7JeI7Iq164uI64ukLlxuICovXG5hc3luYyBmdW5jdGlvbiBzdGFydCgpIHtcbiAgY29uc3QgYXBpUm9vdCA9IGZpbmRBcGlSb290UGF0aCgpO1xuICBjb25zdCBlbnRyeVBvaW50ID0gXCJkaXN0L2luZGV4LmpzXCI7XG5cbiAgaWYgKCEoYXdhaXQgZXhpc3RzKGVudHJ5UG9pbnQpKSkge1xuICAgIGNvbnNvbGUubG9nKGNoYWxrLnJlZChgJHtlbnRyeVBvaW50fSBub3QgZm91bmQuIFBsZWFzZSBidWlsZCB5b3VyIHByb2plY3QgZmlyc3QuYCkpO1xuICAgIGNvbnNvbGUubG9nKGNoYWxrLmJsdWUoXCJSdW46IHBucG0gc29uYW11IGJ1aWxkXCIpKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCB7IHNwYXduIH0gPSBhd2FpdCBpbXBvcnQoXCJjaGlsZF9wcm9jZXNzXCIpO1xuICBjb25zdCBzZXJ2ZXJQcm9jZXNzID0gc3Bhd24oXG4gICAgcHJvY2Vzcy5leGVjUGF0aCxcbiAgICBbXCItLWVuYWJsZS1zb3VyY2UtbWFwc1wiLCBcIi1yXCIsIFwiZG90ZW52L2NvbmZpZ1wiLCBlbnRyeVBvaW50XSxcbiAgICB7XG4gICAgICBjd2Q6IGFwaVJvb3QsXG4gICAgICBzdGRpbzogXCJpbmhlcml0XCIsXG4gICAgfSxcbiAgKTtcblxuICBwcm9jZXNzLm9uKFwiU0lHSU5UXCIsICgpID0+IHtcbiAgICBzZXJ2ZXJQcm9jZXNzLmtpbGwoXCJTSUdURVJNXCIpO1xuICAgIHByb2Nlc3MuZXhpdCgwKTtcbiAgfSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHNldHVwTWlncmF0b3IoKSB7XG4gIC8vIG1pZ3JhdG9yXG4gIG1pZ3JhdG9yID0gbmV3IE1pZ3JhdG9yKCk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHNldHVwRml4dHVyZU1hbmFnZXIoKSB7XG4gIEZpeHR1cmVNYW5hZ2VyLmluaXQoKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gbWlncmF0ZV9hcHBseSh0YXJnZXRzOiAoa2V5b2YgU29uYW11REJDb25maWcpW10pIHtcbiAgYXdhaXQgc2V0dXBNaWdyYXRvcigpO1xuICBhd2FpdCBtaWdyYXRvci5ydW5BY3Rpb24oXCJhcHBseVwiLCB0YXJnZXRzKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gbWlncmF0ZV9ydW4oKSB7XG4gIGF3YWl0IHNldHVwTWlncmF0b3IoKTtcbiAgY29uc3QgbG9jYWxIb3N0cyA9IFtcImxvY2FsaG9zdFwiLCBcIjEyNy4wLjAuMVwiLCBcIjAuMC4wLjBcIiwgXCI6OjFcIl07XG4gIGNvbnN0IHRhcmdldHMgPSBPYmplY3Qua2V5cyhTb25hbXUuZGJDb25maWcpLmZpbHRlcigodGFyZ2V0KSA9PiB7XG4gICAgY29uc3QgdGFyZ2V0Q29uZmlnID0gU29uYW11LmRiQ29uZmlnW3RhcmdldCBhcyBrZXlvZiBTb25hbXVEQkNvbmZpZ107XG4gICAgY29uc3QgaG9zdCA9ICh0YXJnZXRDb25maWc/LmNvbm5lY3Rpb24gYXMgeyBob3N0Pzogc3RyaW5nIH0pPy5ob3N0ID8/IFwibG9jYWxob3N0XCI7XG4gICAgcmV0dXJuIGxvY2FsSG9zdHMuaW5jbHVkZXMoaG9zdC50b0xvd2VyQ2FzZSgpKTtcbiAgfSk7XG5cbiAgLy8g66Gc7LusIOuNsOydtO2EsOuyoOydtOyKpOyXkCDrjIDtlbTshJzrp4wg7KCE7LK0IOuniOydtOq3uOugiOydtOyFmOyXkOyEnCDrj5nsnpFcbiAgYXdhaXQgbWlncmF0b3IucnVuQWN0aW9uKFwiYXBwbHlcIiwgdGFyZ2V0cyBhcyAoa2V5b2YgU29uYW11REJDb25maWcpW10pO1xufVxuXG5hc3luYyBmdW5jdGlvbiBtaWdyYXRlX3N0YXR1cygpIHtcbiAgYXdhaXQgc2V0dXBNaWdyYXRvcigpO1xuXG4gIGNvbnN0IHN0YXR1cyA9IGF3YWl0IG1pZ3JhdG9yLmdldFN0YXR1cygpO1xuICAvLyBzdGF0dXM7XG4gIGNvbnNvbGUubG9nKHN0YXR1cyk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGZpeHR1cmVfaW5pdCgpIHtcbiAgY29uc3Qgc3JjQ29uZmlnID0gU29uYW11LmRiQ29uZmlnLmRldmVsb3BtZW50X21hc3RlcjtcbiAgY29uc3QgdGFyZ2V0cyA9IFtcbiAgICB7XG4gICAgICBsYWJlbDogXCIoUkVNT1RFKSBGaXh0dXJlIERCXCIsXG4gICAgICBjb25maWc6IFNvbmFtdS5kYkNvbmZpZy5maXh0dXJlLFxuICAgIH0sXG4gICAge1xuICAgICAgbGFiZWw6IFwiKExPQ0FMKSBUZXN0aW5nIERCXCIsXG4gICAgICBjb25maWc6IFNvbmFtdS5kYkNvbmZpZy50ZXN0LFxuICAgICAgdG9Ta2lwOiAoKCkgPT4ge1xuICAgICAgICBjb25zdCByZW1vdGVDb25uID0gU29uYW11LmRiQ29uZmlnLmZpeHR1cmUuY29ubmVjdGlvbiBhcyBLbmV4LkNvbm5lY3Rpb25Db25maWc7XG4gICAgICAgIGNvbnN0IGxvY2FsQ29ubiA9IFNvbmFtdS5kYkNvbmZpZy50ZXN0LmNvbm5lY3Rpb24gYXMgS25leC5Db25uZWN0aW9uQ29uZmlnO1xuICAgICAgICByZXR1cm4gcmVtb3RlQ29ubi5ob3N0ID09PSBsb2NhbENvbm4uaG9zdCAmJiByZW1vdGVDb25uLmRhdGFiYXNlID09PSBsb2NhbENvbm4uZGF0YWJhc2U7XG4gICAgICB9KSgpLFxuICAgIH0sXG4gIF0gYXMge1xuICAgIGxhYmVsOiBzdHJpbmc7XG4gICAgY29uZmlnOiBLbmV4LkNvbmZpZztcbiAgICB0b1NraXA/OiBib29sZWFuO1xuICB9W107XG5cbiAgLy8gMS4g6riw7KSAREIg7Iqk7YKk66eI66W8IOuNpO2UhFxuICBjb25zb2xlLmxvZyhcIkRVTVAuLi5cIik7XG4gIGNvbnN0IGR1bXBGaWxlbmFtZSA9IGAvdG1wL3NvbmFtdS1maXh0dXJlLWluaXQtJHtEYXRlLm5vdygpfS5zcWxgO1xuICBjb25zdCBzcmNDb25uID0gc3JjQ29uZmlnLmNvbm5lY3Rpb24gYXMgS25leC5Db25uZWN0aW9uQ29uZmlnO1xuICBjb25zdCBtaWdyYXRpb25zRHVtcCA9IGAvdG1wL3NvbmFtdS1maXh0dXJlLWluaXQtbWlncmF0aW9ucy0ke0RhdGUubm93KCl9LnNxbGA7XG4gIGV4ZWNTeW5jKFxuICAgIGBteXNxbGR1bXAgLWgke3NyY0Nvbm4uaG9zdH0gLXUke3NyY0Nvbm4udXNlcn0gLXAke3NyY0Nvbm4ucGFzc3dvcmR9IC0tc2luZ2xlLXRyYW5zYWN0aW9uIC1kIC0tbm8tY3JlYXRlLWRiIC0tdHJpZ2dlcnMgJHtzcmNDb25uLmRhdGFiYXNlfSA+ICR7ZHVtcEZpbGVuYW1lfWAsXG4gICk7XG4gIGNvbnN0IF9kYiA9IGtuZXgoc3JjQ29uZmlnKTtcbiAgY29uc3QgW1ttaWdyYXRpb25zXV0gPSBhd2FpdCBfZGIucmF3KFxuICAgIFwiU0VMRUNUIENPVU5UKCopIGFzIGNvdW50IEZST00gaW5mb3JtYXRpb25fc2NoZW1hLnRhYmxlcyBXSEVSRSB0YWJsZV9zY2hlbWEgPSA/IEFORCB0YWJsZV9uYW1lID0gJ2tuZXhfbWlncmF0aW9ucydcIixcbiAgICBbc3JjQ29ubi5kYXRhYmFzZV0sXG4gICk7XG4gIGlmIChtaWdyYXRpb25zLmNvdW50ID4gMCkge1xuICAgIGV4ZWNTeW5jKFxuICAgICAgYG15c3FsZHVtcCAtaCR7c3JjQ29ubi5ob3N0fSAtdSR7c3JjQ29ubi51c2VyfSAtcCR7c3JjQ29ubi5wYXNzd29yZH0gLS1zaW5nbGUtdHJhbnNhY3Rpb24gLS1uby1jcmVhdGUtZGIgLS10cmlnZ2VycyAke3NyY0Nvbm4uZGF0YWJhc2V9IGtuZXhfbWlncmF0aW9ucyBrbmV4X21pZ3JhdGlvbnNfbG9jayA+ICR7bWlncmF0aW9uc0R1bXB9YCxcbiAgICApO1xuICB9XG5cbiAgLy8gMi4g64yA7IOBREIg6rCB6rCB7JeQIOuMgO2VmOyXrCDsobTsnqzsl6zrtoAg7ZmV7J24IO2bhCDrtpPquLBcbiAgZm9yIGF3YWl0IChjb25zdCB7IGxhYmVsLCBjb25maWcsIHRvU2tpcCB9IG9mIHRhcmdldHMpIHtcbiAgICBjb25zdCBjb25uID0gY29uZmlnLmNvbm5lY3Rpb24gYXMgS25leC5Db25uZWN0aW9uQ29uZmlnO1xuXG4gICAgaWYgKHRvU2tpcCA9PT0gdHJ1ZSkge1xuICAgICAgY29uc29sZS5sb2coY2hhbGsucmVkKGAke2xhYmVsfTogU2tpcHBlZCFgKSk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBjb25zdCBkYiA9IGtuZXgoe1xuICAgICAgLi4uY29uZmlnLFxuICAgICAgY29ubmVjdGlvbjoge1xuICAgICAgICAuLi4oKGNvbmZpZy5jb25uZWN0aW9uID8/IHt9KSBhcyBLbmV4LkNvbm5lY3Rpb25Db25maWcpLFxuICAgICAgICBkYXRhYmFzZTogdW5kZWZpbmVkLFxuICAgICAgfSxcbiAgICB9KTtcbiAgICBjb25zdCBbW3Jvd11dID0gYXdhaXQgZGIucmF3KGBTSE9XIERBVEFCQVNFUyBMSUtFIFwiJHtjb25uLmRhdGFiYXNlfVwiYCk7XG4gICAgaWYgKHJvdykge1xuICAgICAgY29uc29sZS5sb2coY2hhbGsueWVsbG93KGAke2xhYmVsfTogRGF0YWJhc2UgXCIke2Nvbm4uZGF0YWJhc2V9XCIgQWxyZWFkeSBleGlzdHNgKSk7XG4gICAgICBhd2FpdCBkYi5kZXN0cm95KCk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBjb25zb2xlLmxvZyhgU1lOQyB0byAke2xhYmVsfS4uLmApO1xuICAgIGNvbnN0IG15c3FsQ21kID0gYG15c3FsIC1oJHtjb25uLmhvc3R9IC11JHtjb25uLnVzZXJ9IC1wJHtjb25uLnBhc3N3b3JkfWA7XG4gICAgZXhlY1N5bmMoYCR7bXlzcWxDbWR9IC1lICdEUk9QIERBVEFCQVNFIElGIEVYSVNUUyBcXGAke2Nvbm4uZGF0YWJhc2V9XFxgJ2ApO1xuICAgIGV4ZWNTeW5jKGAke215c3FsQ21kfSAtZSAnQ1JFQVRFIERBVEFCQVNFIFxcYCR7Y29ubi5kYXRhYmFzZX1cXGAnYCk7XG4gICAgZXhlY1N5bmMoYCR7bXlzcWxDbWR9ICR7Y29ubi5kYXRhYmFzZX0gPCAke2R1bXBGaWxlbmFtZX1gKTtcbiAgICBpZiAoYXdhaXQgZXhpc3RzKG1pZ3JhdGlvbnNEdW1wKSkge1xuICAgICAgZXhlY1N5bmMoYCR7bXlzcWxDbWR9ICR7Y29ubi5kYXRhYmFzZX0gPCAke21pZ3JhdGlvbnNEdW1wfWApO1xuICAgIH1cblxuICAgIGF3YWl0IGRiLmRlc3Ryb3koKTtcbiAgfVxuXG4gIGF3YWl0IF9kYi5kZXN0cm95KCk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGZpeHR1cmVfaW1wb3J0KGVudGl0eUlkOiBzdHJpbmcsIHJlY29yZElkczogbnVtYmVyW10pIHtcbiAgYXdhaXQgc2V0dXBGaXh0dXJlTWFuYWdlcigpO1xuXG4gIGF3YWl0IEZpeHR1cmVNYW5hZ2VyLmltcG9ydEZpeHR1cmUoZW50aXR5SWQsIHJlY29yZElkcyk7XG4gIGF3YWl0IEZpeHR1cmVNYW5hZ2VyLnN5bmMoKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZml4dHVyZV9zeW5jKCkge1xuICBhd2FpdCBzZXR1cEZpeHR1cmVNYW5hZ2VyKCk7XG5cbiAgYXdhaXQgRml4dHVyZU1hbmFnZXIuc3luYygpO1xufVxuXG4vKipcbiAqIGZpeHR1cmUgZ2VuIOuqheugueyWtFxuICog7Ji17IWY7J2EIHByb2Nlc3MuYXJnduyXkOyEnCDtjIzsi7FcbiAqL1xuYXN5bmMgZnVuY3Rpb24gZml4dHVyZV9nZW4oKSB7XG4gIGNvbnN0IG9wdGlvbnMgPSBwYXJzZU9wdGlvbnMocHJvY2Vzcy5hcmd2KTtcbiAgYXdhaXQgZml4dHVyZUdlbkNvbW1hbmQob3B0aW9ucyk7XG59XG5cbi8qKlxuICogZml4dHVyZSBmZXRjaCDrqoXroLnslrRcbiAqIOyYteyFmOydhCBwcm9jZXNzLmFyZ3bsl5DshJwg7YyM7IuxXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGZpeHR1cmVfZmV0Y2goKSB7XG4gIGNvbnN0IG9wdGlvbnMgPSBwYXJzZU9wdGlvbnMocHJvY2Vzcy5hcmd2KTtcbiAgYXdhaXQgZml4dHVyZUZldGNoQ29tbWFuZChvcHRpb25zKTtcbn1cblxuLyoqXG4gKiBmaXh0dXJlIGV4cGxvcmUg66qF66C57Ja0XG4gKiDsmLXshZjsnYQgcHJvY2Vzcy5hcmd27JeQ7IScIO2MjOyLsVxuICovXG5hc3luYyBmdW5jdGlvbiBmaXh0dXJlX2V4cGxvcmUoKSB7XG4gIGNvbnN0IG9wdGlvbnMgPSBwYXJzZU9wdGlvbnMocHJvY2Vzcy5hcmd2KTtcbiAgYXdhaXQgZml4dHVyZUV4cGxvcmVDb21tYW5kKG9wdGlvbnMpO1xufVxuXG4vKipcbiAqIOqwhOuLqO2VnCDsmLXshZgg7YyM7IScXG4gKi9cbmZ1bmN0aW9uIHBhcnNlT3B0aW9ucyhcbiAgYXJndjogc3RyaW5nW10sXG4pOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBib29sZWFuIHwgc3RyaW5nW10+ICYgeyBfOiBzdHJpbmdbXSB9IHtcbiAgY29uc3Qgb3B0aW9uczogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgYm9vbGVhbiB8IHN0cmluZ1tdPiAmIHsgXzogc3RyaW5nW10gfSA9IHsgXzogW10gfTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3YubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBhcmcgPSBhcmd2W2ldO1xuXG4gICAgaWYgKGFyZy5zdGFydHNXaXRoKFwiLS1cIikpIHtcbiAgICAgIGNvbnN0IGtleSA9IGFyZy5zbGljZSgyKTtcblxuICAgICAgaWYgKGtleS5pbmNsdWRlcyhcIj1cIikpIHtcbiAgICAgICAgY29uc3QgW2ssIHZdID0ga2V5LnNwbGl0KFwiPVwiKTtcbiAgICAgICAgb3B0aW9uc1trXSA9IHY7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBuZXh0ID0gYXJndltpICsgMV07XG4gICAgICAgIGlmIChuZXh0ICYmICFuZXh0LnN0YXJ0c1dpdGgoXCItLVwiKSkge1xuICAgICAgICAgIG9wdGlvbnNba2V5XSA9IG5leHQ7XG4gICAgICAgICAgaSsrO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG9wdGlvbnNba2V5XSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGFyZy5zdGFydHNXaXRoKFwiLVwiKSkge1xuICAgICAgY29uc3Qga2V5ID0gYXJnLnNsaWNlKDEpO1xuICAgICAgY29uc3QgbmV4dCA9IGFyZ3ZbaSArIDFdO1xuXG4gICAgICBpZiAobmV4dCAmJiAhbmV4dC5zdGFydHNXaXRoKFwiLVwiKSkge1xuICAgICAgICBvcHRpb25zW2tleV0gPSBuZXh0O1xuICAgICAgICBpKys7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvcHRpb25zW2tleV0gPSB0cnVlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBvcHRpb25zLl8ucHVzaChhcmcpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBvcHRpb25zO1xufVxuXG5hc3luYyBmdW5jdGlvbiBzdHViX3ByYWN0aWNlKG5hbWU6IHN0cmluZykge1xuICBjb25zdCBwcmFjdGljZURpciA9IHBhdGguam9pbihTb25hbXUuYXBpUm9vdFBhdGgsIFwic3JjXCIsIFwicHJhY3RpY2VzXCIpO1xuICBjb25zdCBmaWxlTmFtZXMgPSBhd2FpdCByZWFkZGlyKHByYWN0aWNlRGlyKTtcblxuICBjb25zdCBtYXhTZXFObyA9IGF3YWl0IChhc3luYyAoKSA9PiB7XG4gICAgaWYgKCEoYXdhaXQgZXhpc3RzKHByYWN0aWNlRGlyKSkpIHtcbiAgICAgIGF3YWl0IG1rZGlyKHByYWN0aWNlRGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICB9XG5cbiAgICBjb25zdCBmaWx0ZXJlZFNlcXMgPSBmaWxlTmFtZXNcbiAgICAgIC5maWx0ZXIoKGZpbGVOYW1lKSA9PiBmaWxlTmFtZS5zdGFydHNXaXRoKFwicFwiKSAmJiBmaWxlTmFtZS5lbmRzV2l0aChcIi50c1wiKSlcbiAgICAgIC5tYXAoKGZpbGVOYW1lKSA9PiB7XG4gICAgICAgIGNvbnN0IFssIHNlcU5vXSA9IGZpbGVOYW1lLm1hdGNoKC9ecChbMC05XSspLS8pID8/IFtcIjBcIiwgXCIwXCJdO1xuICAgICAgICByZXR1cm4gcGFyc2VJbnQoc2VxTm8pO1xuICAgICAgfSlcbiAgICAgIC5zb3J0KChhLCBiKSA9PiBiIC0gYSk7XG5cbiAgICBpZiAoZmlsdGVyZWRTZXFzLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiBmaWx0ZXJlZFNlcXNbMF07XG4gICAgfVxuXG4gICAgcmV0dXJuIDA7XG4gIH0pKCk7XG5cbiAgY29uc3QgY3VycmVudFNlcU5vID0gbWF4U2VxTm8gKyAxO1xuICBjb25zdCBmaWxlTmFtZSA9IGBwJHtjdXJyZW50U2VxTm99LSR7bmFtZX0udHNgO1xuICBjb25zdCBkc3RQYXRoID0gcGF0aC5qb2luKHByYWN0aWNlRGlyLCBmaWxlTmFtZSk7XG5cbiAgY29uc3QgY29kZSA9IFtcbiAgICBgaW1wb3J0IHsgU29uYW11IH0gZnJvbSBcInNvbmFtdVwiO2AsXG4gICAgXCJcIixcbiAgICBgY29uc29sZS5jbGVhcigpO2AsXG4gICAgYGNvbnNvbGUubG9nKFwiJHtmaWxlTmFtZX1cIik7YCxcbiAgICBcIlwiLFxuICAgIGBTb25hbXUucnVuU2NyaXB0KGFzeW5jICgpID0+IHtgLFxuICAgIGAgLy8gVE9ET2AsXG4gICAgYH0pO2AsXG4gICAgXCJcIixcbiAgXS5qb2luKFwiXFxuXCIpO1xuICBhd2FpdCB3cml0ZUZpbGUoZHN0UGF0aCwgY29kZSk7XG5cbiAgZXhlY1N5bmMoYGNvZGUgJHtkc3RQYXRofWApO1xuXG4gIGNvbnN0IHJ1bkNvZGUgPSBgeWFybiBub2RlIC1yIGRvdGVudi9jb25maWcgLS1lbmFibGUtc291cmNlLW1hcHMgZGlzdC9wcmFjdGljZXMvJHtmaWxlTmFtZS5yZXBsYWNlKFxuICAgIFwiLnRzXCIsXG4gICAgXCIuanNcIixcbiAgKX1gO1xuICBjb25zb2xlLmxvZyhgJHtjaGFsay5ibHVlKHJ1bkNvZGUpfSBjb3BpZWQgdG8gY2xpcGJvYXJkLmApO1xuICBleGVjU3luYyhgZWNobyBcIiR7cnVuQ29kZX1cIiB8IHBiY29weWApO1xufVxuXG5hc3luYyBmdW5jdGlvbiBzdHViX2VudGl0eShlbnRpdHlJZDogc3RyaW5nKSB7XG4gIGF3YWl0IFNvbmFtdS5zeW5jZXIuY3JlYXRlRW50aXR5KHsgZW50aXR5SWQsIHRpdGxlOiBlbnRpdHlJZCB9KTtcblxuICBjb25zdCB7IGZsYWdzIH0gPSBwYXJzZUNsaU9wdGlvbnMoKTtcbiAgY29uc3QgdXNlQUkgPSBmbGFncy5oYXMoXCJhaVwiKTtcbiAgY29uc3Qgbm9Db25lcyA9IGZsYWdzLmhhcyhcIm5vLWNvbmVzXCIpO1xuXG4gIC8vIC0tbm8tY29uZXM6IGNvbmUg7IOd7ISxIOyKpO2CtVxuICBpZiAobm9Db25lcykge1xuICAgIGNvbnNvbGUubG9nKGDinJMgRW50aXR5ICcke2VudGl0eUlkfScgY3JlYXRlZCB3aXRob3V0IGNvbmVzYCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgeyBFbnRpdHlNYW5hZ2VyIH0gPSBhd2FpdCBpbXBvcnQoXCIuLi9lbnRpdHkvZW50aXR5LW1hbmFnZXJcIik7XG4gIGNvbnN0IGVudGl0eSA9IEVudGl0eU1hbmFnZXIuZ2V0KGVudGl0eUlkKTtcbiAgaWYgKCFlbnRpdHkpIHtcbiAgICBjb25zb2xlLmVycm9yKGBFbnRpdHkgbm90IGZvdW5kOiAke2VudGl0eUlkfWApO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIC0tYWk6IExMTeycvOuhnCBjb25lIOyDneyEsVxuICBpZiAodXNlQUkpIHtcbiAgICBjb25zb2xlLmxvZyhg4pyTIEVudGl0eSAnJHtlbnRpdHlJZH0nIGNyZWF0ZWRgKTtcbiAgICBjb25zb2xlLmxvZyhg8J+MnyBHZW5lcmF0aW5nIEFJLXBvd2VyZWQgY29uZXMuLi5gKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgY29uZmlnTG9jYWxlID0gU29uYW11LmNvbmZpZy5pMThuPy5kZWZhdWx0TG9jYWxlO1xuICAgICAgY29uc3QgbG9jYWxlID1cbiAgICAgICAgY29uZmlnTG9jYWxlID09PSBcImtvXCIgfHwgY29uZmlnTG9jYWxlID09PSBcImVuXCIgfHwgY29uZmlnTG9jYWxlID09PSBcImphXCJcbiAgICAgICAgICA/IGNvbmZpZ0xvY2FsZVxuICAgICAgICAgIDogXCJrb1wiO1xuXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBlbnRpdHkuZ2VuZXJhdGVDb25lcyh7XG4gICAgICAgIHByZXNlcnZlRXhpc3Rpbmc6IGZhbHNlLFxuICAgICAgICBvbmx5RW1wdHk6IGZhbHNlLFxuICAgICAgICBsb2NhbGUsXG4gICAgICB9KTtcblxuICAgICAgY29uc29sZS5sb2coYOKchSBEb25lICgke3Jlc3VsdC50b2tlbnNVc2VkfSB0b2tlbnMpYCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yICYmIGVycm9yLm1lc3NhZ2UuaW5jbHVkZXMoXCJBTlRIUk9QSUNfQVBJX0tFWVwiKSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKGBcXG7inYwgJHtlcnJvci5tZXNzYWdlfWApO1xuICAgICAgICBjb25zb2xlLmVycm9yKGBcXG7wn5KhIFJlbW92ZSAtLWFpIGZsYWcgdG8gdXNlIHRlbXBsYXRlIGNvbmVzIGluc3RlYWRgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm47XG4gIH1cblxuICAvLyDquLDrs7g6IO2FnO2UjOumvyBjb25lIOyekOuPmSDsg53shLFcbiAgLy8gTExNIOyXhuydtCBmYWtlci1tYXBwaW5ncy50c+ulvCDtmZzsmqntlZjsl6wg6riw67O4IGNvbmUg66mU7YOA642w7J207YSw66W8IOyDneyEse2VqeuLiOuLpC5cbiAgLy8g7J2066W8IO2Gte2VtCBBTlRIUk9QSUNfQVBJX0tFWeqwgCDsl4bslrTrj4QgU29uYW1166W8IOyCrOyaqe2VoCDsiJgg7J6I7Jy866mwLFxuICAvLyDsg53shLHrkJwg7YWc7ZSM66a/IGNvbmXsnYAg64KY7KSR7JeQICdjb25lIGdlbicg66qF66C57Ja066GcIEFJ66W8IO2Gte2VtCDsl4Xqt7jroIjsnbTrk5ztlaAg7IiYIOyeiOyKteuLiOuLpC5cbiAgY29uc29sZS5sb2coYPCfjJ8gR2VuZXJhdGluZyB0ZW1wbGF0ZSBjb25lcy4uLmApO1xuICBhd2FpdCBlbnRpdHkuZ2VuZXJhdGVUZW1wbGF0ZUNvbmVzKCk7XG4gIGNvbnNvbGUubG9nKGDinJMgRW50aXR5ICcke2VudGl0eUlkfScgY3JlYXRlZCB3aXRoIHRlbXBsYXRlIGNvbmVzYCk7XG4gIGNvbnNvbGUubG9nKGDwn5KhIFRpcDogUnVuICdwbnBtIHNvbmFtdSBjb25lIGdlbiAke2VudGl0eUlkfScgdG8gaW1wcm92ZSB3aXRoIEFJYCk7XG59XG5cbi8qKlxuICogQUnrpbwg7IKs7Jqp7ZWY7JesIGVudGl0eeydmCBjb25lIOuplO2DgOuNsOydtO2EsOulvCDsg53shLHtlZjqsbDrgpgg7JeF6re466CI7J2065Oc7ZWp64uI64ukLlxuICpcbiAqIOyYteyFmDpcbiAqIC0gLS1yZWdlbmVyYXRlOiDsoITssrQg7J6s7IOd7ISxICjquLDsobQgY29uZSDrja7slrTsk7DquLApXG4gKiAtIC0tbG9jYWxlIDxrb3xlbnxqYT46IOyDneyEsSDslrjslrQg7KeA7KCVXG4gKiAtIOq4sOuzuDogb25seUVtcHR5IOuqqOuTnCAo6riw7KG0IGZpeHR1cmVIaW50IOuztOyhtClcbiAqXG4gKiBBTlRIUk9QSUNfQVBJX0tFWSDtlYTsmpQgKHNvbmFtdS5zZWNyZXQudHMg65iQ64qUIO2ZmOqyveuzgOyImClcbiAqL1xuYXN5bmMgZnVuY3Rpb24gY29uZV9nZW4oZW50aXR5SWQ6IHN0cmluZykge1xuICBjb25zdCB7IEVudGl0eU1hbmFnZXIgfSA9IGF3YWl0IGltcG9ydChcIi4uL2VudGl0eS9lbnRpdHktbWFuYWdlclwiKTtcbiAgY29uc3QgeyBmbGFncywgb3B0aW9ucyB9ID0gcGFyc2VDbGlPcHRpb25zKCk7XG5cbiAgLy8gLS1hbGwg7Ji17IWYOiDrqqjrk6AgZW50aXR5IGNvbmUg7IOd7ISxXG4gIGlmIChmbGFncy5oYXMoXCJhbGxcIikgfHwgZW50aXR5SWQgPT09IFwiYWxsXCIpIHtcbiAgICBjb25zdCBhbGxFbnRpdGllcyA9IEVudGl0eU1hbmFnZXIuZ2V0QWxsRW50aXRpZXMoKTtcbiAgICBjb25zb2xlLmxvZyhg8J+MnyBHZW5lcmF0aW5nIEFJLXBvd2VyZWQgY29uZXMgZm9yICR7YWxsRW50aXRpZXMubGVuZ3RofSBlbnRpdGllcy4uLlxcbmApO1xuXG4gICAgbGV0IHRvdGFsVG9rZW5zID0gMDtcbiAgICBjb25zdCBlcnJvcnM6IHN0cmluZ1tdID0gW107XG5cbiAgICBmb3IgKGNvbnN0IGVudGl0eSBvZiBhbGxFbnRpdGllcykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc29sZS5sb2coYFByb2Nlc3NpbmcgJHtlbnRpdHkuaWR9Li4uYCk7XG4gICAgICAgIGNvbnN0IGNvbmZpZ0xvY2FsZSA9IG9wdGlvbnMubG9jYWxlIHx8IFNvbmFtdS5jb25maWcuaTE4bj8uZGVmYXVsdExvY2FsZTtcbiAgICAgICAgY29uc3QgbG9jYWxlID1cbiAgICAgICAgICBjb25maWdMb2NhbGUgPT09IFwia29cIiB8fCBjb25maWdMb2NhbGUgPT09IFwiZW5cIiB8fCBjb25maWdMb2NhbGUgPT09IFwiamFcIlxuICAgICAgICAgICAgPyBjb25maWdMb2NhbGVcbiAgICAgICAgICAgIDogXCJrb1wiO1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGVudGl0eS5nZW5lcmF0ZUNvbmVzKHtcbiAgICAgICAgICBwcmVzZXJ2ZUV4aXN0aW5nOiAhZmxhZ3MuaGFzKFwicmVnZW5lcmF0ZVwiKSxcbiAgICAgICAgICBvbmx5RW1wdHk6ICFmbGFncy5oYXMoXCJyZWdlbmVyYXRlXCIpLFxuICAgICAgICAgIGxvY2FsZSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdG90YWxUb2tlbnMgKz0gcmVzdWx0LnRva2Vuc1VzZWQ7XG4gICAgICAgIGNvbnNvbGUubG9nKGAgIOKckyAke2VudGl0eS5pZH0gKCR7cmVzdWx0LnRva2Vuc1VzZWR9IHRva2VucylcXG5gKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFwiVW5rbm93biBlcnJvclwiO1xuICAgICAgICBlcnJvcnMucHVzaChgJHtlbnRpdHkuaWR9OiAke21lc3NhZ2V9YCk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYCAg4pyXICR7ZW50aXR5LmlkfTogJHttZXNzYWdlfVxcbmApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnNvbGUubG9nKGBcXG7inIUgRG9uZSEgVG90YWw6ICR7dG90YWxUb2tlbnN9IHRva2VucyB1c2VkYCk7XG4gICAgY29uc3QgZXN0aW1hdGVkQ29zdCA9ICh0b3RhbFRva2VucyAqIDkpIC8gMV8wMDBfMDAwO1xuICAgIGNvbnNvbGUubG9nKGDwn5KwIEVzdGltYXRlZCBjb3N0OiB+JCR7ZXN0aW1hdGVkQ29zdC50b0ZpeGVkKDQpfWApO1xuXG4gICAgaWYgKGVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGBcXG7inYwgRmFpbGVkIGVudGl0aWVzICgke2Vycm9ycy5sZW5ndGh9KTpgKTtcbiAgICAgIGZvciAoY29uc3QgZXJyIG9mIGVycm9ycykge1xuICAgICAgICBjb25zb2xlLmVycm9yKGAgIC0gJHtlcnJ9YCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIOuLqOydvCBlbnRpdHkgY29uZSDsg53shLFcbiAgY29uc3QgZW50aXR5ID0gRW50aXR5TWFuYWdlci5nZXQoZW50aXR5SWQpO1xuICBpZiAoIWVudGl0eSkge1xuICAgIGNvbnNvbGUuZXJyb3IoYEVudGl0eSBub3QgZm91bmQ6ICR7ZW50aXR5SWR9YCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgbW9kZSA9IGZsYWdzLmhhcyhcInJlZ2VuZXJhdGVcIikgPyBcInJlZ2VuZXJhdGluZ1wiIDogXCJnZW5lcmF0aW5nXCI7XG4gIGNvbnNvbGUubG9nKFxuICAgIGDwn4yfICR7bW9kZSA9PT0gXCJyZWdlbmVyYXRpbmdcIiA/IFwiUmVnZW5lcmF0aW5nXCIgOiBcIkdlbmVyYXRpbmdcIn0gQUktcG93ZXJlZCBjb25lcyBmb3IgJHtlbnRpdHlJZH0uLi5gLFxuICApO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgY29uZmlnTG9jYWxlID0gb3B0aW9ucy5sb2NhbGUgfHwgU29uYW11LmNvbmZpZy5pMThuPy5kZWZhdWx0TG9jYWxlO1xuICAgIGNvbnN0IGxvY2FsZSA9XG4gICAgICBjb25maWdMb2NhbGUgPT09IFwia29cIiB8fCBjb25maWdMb2NhbGUgPT09IFwiZW5cIiB8fCBjb25maWdMb2NhbGUgPT09IFwiamFcIiA/IGNvbmZpZ0xvY2FsZSA6IFwia29cIjtcblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGVudGl0eS5nZW5lcmF0ZUNvbmVzKHtcbiAgICAgIHByZXNlcnZlRXhpc3Rpbmc6ICFmbGFncy5oYXMoXCJyZWdlbmVyYXRlXCIpLFxuICAgICAgb25seUVtcHR5OiAhZmxhZ3MuaGFzKFwicmVnZW5lcmF0ZVwiKSxcbiAgICAgIGxvY2FsZSxcbiAgICB9KTtcblxuICAgIGNvbnNvbGUubG9nKGDinIUgRG9uZSEgKCR7cmVzdWx0LnRva2Vuc1VzZWR9IHRva2VucyB1c2VkKWApO1xuXG4gICAgLy8g7Yag7YGwIOu5hOyaqSDqs4TsgrAgKOuMgOueteyggeyduCDstpTsoJUpXG4gICAgLy8gQ2xhdWRlIFNvbm5ldCA0LjU6IGlucHV0ICQzL00gdG9rZW5zLCBvdXRwdXQgJDE1L00gdG9rZW5zXG4gICAgLy8g6rCE64uo7ZWY6rKMIO2Pieq3oCAkOS9NIHRva2Vuc+uhnCDqs4TsgrBcbiAgICBjb25zdCBlc3RpbWF0ZWRDb3N0ID0gKHJlc3VsdC50b2tlbnNVc2VkICogOSkgLyAxXzAwMF8wMDA7XG4gICAgY29uc29sZS5sb2coYPCfkrAgRXN0aW1hdGVkIGNvc3Q6IH4kJHtlc3RpbWF0ZWRDb3N0LnRvRml4ZWQoNCl9YCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgIGlmIChlcnJvci5tZXNzYWdlLmluY2x1ZGVzKFwiQU5USFJPUElDX0FQSV9LRVlcIikpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihgXFxu4p2MICR7ZXJyb3IubWVzc2FnZX1gKTtcbiAgICAgICAgY29uc29sZS5lcnJvcihgXFxu8J+SoSBUbyB1c2UgQUktcG93ZXJlZCBjb25lIGdlbmVyYXRpb246YCk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYCAgIDEuIEdldCBhbiBBUEkga2V5IGZyb20gaHR0cHM6Ly9jb25zb2xlLmFudGhyb3BpYy5jb20vYCk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgYCAgIDIuIEFkZCBpdCB0byBzb25hbXUuc2VjcmV0LnRzIG9yIHNldCBBTlRIUk9QSUNfQVBJX0tFWSBlbnZpcm9ubWVudCB2YXJpYWJsZWAsXG4gICAgICAgICk7XG4gICAgICB9IGVsc2UgaWYgKGVycm9yLm1lc3NhZ2UuaW5jbHVkZXMoXCJSYXRlIGxpbWl0XCIpKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYFxcbuKdjCAke2Vycm9yLm1lc3NhZ2V9YCk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYFxcbvCfkqEgUGxlYXNlIHdhaXQgYSBtb21lbnQgYW5kIHRyeSBhZ2Fpbi5gKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYFxcbuKdjCBGYWlsZWQgdG8gZ2VuZXJhdGUgY29uZXM6ICR7ZXJyb3IubWVzc2FnZX1gKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5lcnJvcihgXFxu4p2MIEZhaWxlZCB0byBnZW5lcmF0ZSBjb25lczogVW5rbm93biBlcnJvcmApO1xuICAgIH1cbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBzY2FmZm9sZF9tb2RlbChlbnRpdHlJZDogc3RyaW5nKSB7XG4gIGF3YWl0IFNvbmFtdS5zeW5jZXIuZ2VuZXJhdGVUZW1wbGF0ZShcIm1vZGVsXCIsIHtcbiAgICBlbnRpdHlJZCxcbiAgfSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHNjYWZmb2xkX21vZGVsX3Rlc3QoZW50aXR5SWQ6IHN0cmluZykge1xuICBhd2FpdCBTb25hbXUuc3luY2VyLmdlbmVyYXRlVGVtcGxhdGUoXCJtb2RlbF90ZXN0XCIsIHtcbiAgICBlbnRpdHlJZCxcbiAgfSk7XG59XG5cbi8qKlxuICogcG5wbSBzb25hbXUgc2tpbGxzIHN5bmMg7ZWY66m0IOyLpO2WieuQmOuKlCDtlajsiJjsnoXri4jri6QuXG4gKiDqs7Xsi50gU2tpbGxz66W8IOuhnOy7rCDtlITroZzsoJ3tirgg65iQ64qUIOq4gOuhnOuyjCB+Ly5jbGF1ZGUv66GcIOuPmeq4sO2ZlO2VqeuLiOuLpC5cbiAqXG4gKiAtLWdsb2JhbCDtlIzrnpjqt7g6IH4vLmNsYXVkZS/sl5Ag64+Z6riw7ZmUICjtlITroZzsoJ3tirgg7IOd7ISxIOyghCDsgqzsmqkg6rCA64qlKVxuICovXG5hc3luYyBmdW5jdGlvbiBza2lsbHNfc3luYygpIHtcbiAgY29uc3QgeyBmbGFncyB9ID0gcGFyc2VDbGlPcHRpb25zKCk7XG4gIGNvbnN0IGlzR2xvYmFsID0gZmxhZ3MuaGFzKFwiZ2xvYmFsXCIpO1xuXG4gIC8vIOqwnOuwnCDtmZjqsr0gLSBjbGkudHM6IHNvbmFtdS9tb2R1bGVzL3NvbmFtdS9zcmMvYmluL2NsaS50c1xuICAvLyDruYzrk5wg7ZuEIC0gY2xpLmpzOiBub2RlX21vZHVsZXMvc29uYW11L2Rpc3QvYmluL2NsaS5qcyAo7Iuk7KCcIOyLpO2WiSlcbiAgLy8gc2tpbGxzIOychOy5mDogbm9kZV9tb2R1bGVzL3NvbmFtdS9zcmMvc2tpbGxzIChucG0g67Cw7Y+sIOyLnClcbiAgY29uc3Qgc291cmNlQmFzZSA9IHBhdGgucmVzb2x2ZShpbXBvcnQubWV0YS5kaXJuYW1lLCBcIi4uXCIsIFwiLi5cIiwgXCJzcmNcIiwgXCJza2lsbHNcIik7XG4gIGNvbnN0IHNvdXJjZVNraWxsc0RpciA9IHBhdGguam9pbihzb3VyY2VCYXNlLCBcInNvbmFtdVwiKTtcbiAgY29uc3Qgc291cmNlQ2xhdWRlTWQgPSBwYXRoLmpvaW4oc291cmNlQmFzZSwgXCJDTEFVREUubWRcIik7XG5cbiAgaWYgKCEoYXdhaXQgZXhpc3RzKHNvdXJjZVNraWxsc0RpcikpKSB7XG4gICAgY29uc29sZS5sb2coY2hhbGsueWVsbG93KFwiU2tpbGxzIHNvdXJjZSBub3QgZm91bmQgaW4gc29uYW11IHBhY2thZ2UuXCIpKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoaXNHbG9iYWwpIHtcbiAgICBhd2FpdCBza2lsbHNfc3luY190byhwYXRoLmpvaW4ob3MuaG9tZWRpcigpLCBcIi5jbGF1ZGVcIiksIHNvdXJjZVNraWxsc0Rpciwgc291cmNlQ2xhdWRlTWQsIHtcbiAgICAgIHVzZVN5bWxpbms6IGZhbHNlLFxuICAgICAgY29weVByb2plY3RUZW1wbGF0ZXM6IGZhbHNlLFxuICAgICAgaXNHbG9iYWw6IHRydWUsXG4gICAgfSk7XG4gICAgY29uc29sZS5sb2coY2hhbGsuY3lhbihgXFxuICBHbG9iYWwgc3luYyBjb21wbGV0ZSDihpIgfi8uY2xhdWRlL3NraWxscy9zb25hbXUvYCkpO1xuICAgIGNvbnNvbGUubG9nKGNoYWxrLmRpbShgICBUaGVzZSBza2lsbHMgYXJlIGF2YWlsYWJsZSBpbiBhbGwgQ2xhdWRlIENvZGUgc2Vzc2lvbnMuYCkpO1xuICAgIGNvbnNvbGUubG9nKFxuICAgICAgY2hhbGsuZGltKFxuICAgICAgICBgICBPbmNlIGEgcHJvamVjdCBpcyBjcmVhdGVkLCBydW4gJ3BucG0gc29uYW11IHNraWxscyBzeW5jJyBmb3IgcHJvamVjdC1sb2NhbCBzeW5jLmAsXG4gICAgICApLFxuICAgICk7XG4gIH0gZWxzZSB7XG4gICAgY29uc3Qgd29ya3NwYWNlUm9vdCA9IGF3YWl0IGZpbmRXb3Jrc3BhY2VSb290KCk7XG4gICAgY29uc3QgY2xhdWRlRGlyID0gcGF0aC5qb2luKHdvcmtzcGFjZVJvb3QsIFwiLmNsYXVkZVwiKTtcbiAgICBhd2FpdCBza2lsbHNfc3luY190byhjbGF1ZGVEaXIsIHNvdXJjZVNraWxsc0Rpciwgc291cmNlQ2xhdWRlTWQsIHtcbiAgICAgIHVzZVN5bWxpbms6IHRydWUsXG4gICAgICBjb3B5UHJvamVjdFRlbXBsYXRlczogdHJ1ZSxcbiAgICAgIHNvdXJjZUJhc2UsXG4gICAgfSk7XG4gIH1cbn1cblxuLyoqXG4gKiBjbGF1ZGVEaXLroZwgc2tpbGxz66W8IOuPmeq4sO2ZlO2VmOuKlCDqs7XthrUg66Gc7KeB7J6F64uI64ukLlxuICovXG5hc3luYyBmdW5jdGlvbiBza2lsbHNfc3luY190byhcbiAgY2xhdWRlRGlyOiBzdHJpbmcsXG4gIHNvdXJjZVNraWxsc0Rpcjogc3RyaW5nLFxuICBzb3VyY2VDbGF1ZGVNZDogc3RyaW5nLFxuICBvcHRpb25zOiB7XG4gICAgdXNlU3ltbGluazogYm9vbGVhbjtcbiAgICBjb3B5UHJvamVjdFRlbXBsYXRlczogYm9vbGVhbjtcbiAgICBzb3VyY2VCYXNlPzogc3RyaW5nO1xuICAgIGlzR2xvYmFsPzogYm9vbGVhbjtcbiAgfSxcbikge1xuICBjb25zdCB0YXJnZXRTa2lsbHNEaXIgPSBwYXRoLmpvaW4oY2xhdWRlRGlyLCBcInNraWxsc1wiLCBcInNvbmFtdVwiKTtcblxuICAvLyDquLDsobQg65SU66CJ7Yag66asL3N5bWxpbmsg7IKt7KCcIO2bhCDsnqzsg53shLFcbiAgLy8gZXhpc3RzKCnripQgYnJva2VuIHN5bWxpbmvrpbwg6rCQ7KeA7ZWY7KeAIOuqu+2VmOuvgOuhnCBybeydhCDrrLTsobDqsbQg7Iuc64+E7ZWp64uI64ukXG4gIHRyeSB7XG4gICAgYXdhaXQgcm0odGFyZ2V0U2tpbGxzRGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSwgZm9yY2U6IHRydWUgfSk7XG4gIH0gY2F0Y2gge1xuICAgIC8vIO2MjOydvOydtCDsl4bsnLzrqbQg66y07IucXG4gIH1cblxuICBhd2FpdCBta2RpcihwYXRoLmRpcm5hbWUodGFyZ2V0U2tpbGxzRGlyKSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG5cbiAgaWYgKG9wdGlvbnMudXNlU3ltbGluaykge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBzeW1saW5rKHNvdXJjZVNraWxsc0RpciwgdGFyZ2V0U2tpbGxzRGlyLCBcImRpclwiKTtcbiAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyZWVuKGDinJMgU2tpbGxzIGxpbmtlZCAoc3ltbGluaylgKSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICBjaGFsay55ZWxsb3coYOKaoCBTeW1saW5rIGZhaWxlZDogJHtlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcil9YCksXG4gICAgICApO1xuICAgICAgY29uc29sZS5sb2coY2hhbGsueWVsbG93KGAgIEZhbGxpbmcgYmFjayB0byBjb3B5Li4uYCkpO1xuICAgICAgYXdhaXQgc2tpbGxzQ29weShzb3VyY2VTa2lsbHNEaXIsIHRhcmdldFNraWxsc0Rpcik7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGF3YWl0IHNraWxsc0NvcHkoc291cmNlU2tpbGxzRGlyLCB0YXJnZXRTa2lsbHNEaXIpO1xuICB9XG5cbiAgLy8gcHJvamVjdCDrlJTroInthqDrpqwg7LSI6riw7ZmUICjsl4bsnLzrqbQg7IOd7ISxLCDsnojsnLzrqbQg7Jyg7KeAKVxuICBpZiAob3B0aW9ucy5jb3B5UHJvamVjdFRlbXBsYXRlcyAmJiBvcHRpb25zLnNvdXJjZUJhc2UpIHtcbiAgICBjb25zdCBzb3VyY2VQcm9qZWN0RGlyID0gcGF0aC5qb2luKG9wdGlvbnMuc291cmNlQmFzZSwgXCJwcm9qZWN0XCIpO1xuICAgIGNvbnN0IHRhcmdldFByb2plY3REaXIgPSBwYXRoLmpvaW4oY2xhdWRlRGlyLCBcInNraWxsc1wiLCBcInByb2plY3RcIik7XG5cbiAgICBpZiAoYXdhaXQgZXhpc3RzKHNvdXJjZVByb2plY3REaXIpKSB7XG4gICAgICBpZiAoIShhd2FpdCBleGlzdHModGFyZ2V0UHJvamVjdERpcikpKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgY3Aoc291cmNlUHJvamVjdERpciwgdGFyZ2V0UHJvamVjdERpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgICAgICAgY29uc29sZS5sb2coY2hhbGsuZ3JlZW4oYOKckyBQcm9qZWN0IHRlbXBsYXRlcyBpbml0aWFsaXplZGApKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgY2hhbGsucmVkKFxuICAgICAgICAgICAgICBg4pyXIEZhaWxlZCB0byBpbml0aWFsaXplIHByb2plY3QgdGVtcGxhdGVzOiAke2Vycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKX1gLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLmxvZyhjaGFsay5kaW0oYOKPrSBQcm9qZWN0IHRlbXBsYXRlcyBhbHJlYWR5IGV4aXN0IChwcmVzZXJ2ZWQpYCkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIENMQVVERS5tZCDrs7Xsgqwv7JeF642w7J207Yq4XG4gIGlmIChhd2FpdCBleGlzdHMoc291cmNlQ2xhdWRlTWQpKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHRhcmdldENsYXVkZU1kID0gcGF0aC5qb2luKGNsYXVkZURpciwgXCJDTEFVREUubWRcIik7XG4gICAgICBjb25zdCByYXdDb250ZW50ID0gYXdhaXQgcmVhZEZpbGUoc291cmNlQ2xhdWRlTWQsIFwidXRmLThcIik7XG4gICAgICAvLyDquIDroZzrsowg66qo65Oc7JeQ7ISc64qUIOyDgeuMgCDqsr3roZzrpbwg7KCI64yAIOqyveuhnOuhnCDrs4DtmZjtlanri4jri6RcbiAgICAgIGNvbnN0IHNvdXJjZUNvbnRlbnQgPSBvcHRpb25zLmlzR2xvYmFsXG4gICAgICAgID8gcmF3Q29udGVudC5yZXBsYWNlQWxsKFwiLmNsYXVkZS9za2lsbHMvc29uYW11L1wiLCBcIn4vLmNsYXVkZS9za2lsbHMvc29uYW11L1wiKVxuICAgICAgICA6IHJhd0NvbnRlbnQ7XG5cbiAgICAgIGlmIChhd2FpdCBleGlzdHModGFyZ2V0Q2xhdWRlTWQpKSB7XG4gICAgICAgIGNvbnN0IHRhcmdldENvbnRlbnQgPSBhd2FpdCByZWFkRmlsZSh0YXJnZXRDbGF1ZGVNZCwgXCJ1dGYtOFwiKTtcbiAgICAgICAgY29uc3Qgc3RhcnRNYXJrZXIgPSBcIjwhLS0gU09OQU1VOlNUQVJUIC0tPlwiO1xuICAgICAgICBjb25zdCBlbmRNYXJrZXIgPSBcIjwhLS0gU09OQU1VOkVORCAtLT5cIjtcbiAgICAgICAgaWYgKHRhcmdldENvbnRlbnQuaW5jbHVkZXMoc3RhcnRNYXJrZXIpICYmIHRhcmdldENvbnRlbnQuaW5jbHVkZXMoZW5kTWFya2VyKSkge1xuICAgICAgICAgIGNvbnN0IHN0YXJ0SWR4ID0gdGFyZ2V0Q29udGVudC5pbmRleE9mKHN0YXJ0TWFya2VyKTtcbiAgICAgICAgICBjb25zdCBlbmRJZHggPSB0YXJnZXRDb250ZW50LmluZGV4T2YoZW5kTWFya2VyKTtcblxuICAgICAgICAgIGlmIChzdGFydElkeCAhPT0gLTEgJiYgZW5kSWR4ICE9PSAtMSAmJiBzdGFydElkeCA8IGVuZElkeCkge1xuICAgICAgICAgICAgY29uc3QgYmVmb3JlID0gdGFyZ2V0Q29udGVudC5zdWJzdHJpbmcoMCwgc3RhcnRJZHgpO1xuICAgICAgICAgICAgY29uc3QgYWZ0ZXIgPSB0YXJnZXRDb250ZW50LnN1YnN0cmluZyhlbmRJZHggKyBlbmRNYXJrZXIubGVuZ3RoKTtcbiAgICAgICAgICAgIGNvbnN0IG5ld0NvbnRlbnQgPSBgJHtiZWZvcmV9JHtzdGFydE1hcmtlcn1cXG4ke3NvdXJjZUNvbnRlbnR9XFxuJHtlbmRNYXJrZXJ9JHthZnRlcn1gO1xuICAgICAgICAgICAgYXdhaXQgd3JpdGVGaWxlKHRhcmdldENsYXVkZU1kLCBuZXdDb250ZW50KTtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyZWVuKGDinJMgQ0xBVURFLm1kIHVwZGF0ZWQgKG1hcmtlciByZWdpb24pYCkpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhjaGFsay55ZWxsb3coYOKPrSBDTEFVREUubWQgbWFya2VyIHBvc2l0aW9ucyBpbnZhbGlkLCBza2lwcGVkYCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyDrp4jsu6TqsIAg7JeG64qUIOq4sOyhtCBDTEFVREUubWTsl5AgU29uYW11IOyEueyFmOydhCDstpTqsIDtlanri4jri6RcbiAgICAgICAgICBjb25zdCBhcHBlbmRlZCA9IGAke3RhcmdldENvbnRlbnQudHJpbUVuZCgpfVxcblxcbjwhLS0gU09OQU1VOlNUQVJUIC0tPlxcbiR7c291cmNlQ29udGVudH1cXG48IS0tIFNPTkFNVTpFTkQgLS0+XFxuYDtcbiAgICAgICAgICBhd2FpdCB3cml0ZUZpbGUodGFyZ2V0Q2xhdWRlTWQsIGFwcGVuZGVkKTtcbiAgICAgICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmVlbihg4pyTIENMQVVERS5tZCB1cGRhdGVkIChhcHBlbmRlZCBTb25hbXUgc2VjdGlvbilgKSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHdpdGhNYXJrZXJzID0gYDwhLS0gU09OQU1VOlNUQVJUIC0tPlxcbiR7c291cmNlQ29udGVudH1cXG48IS0tIFNPTkFNVTpFTkQgLS0+XFxuYDtcbiAgICAgICAgYXdhaXQgd3JpdGVGaWxlKHRhcmdldENsYXVkZU1kLCB3aXRoTWFya2Vycyk7XG4gICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyZWVuKGDinJMgQ0xBVURFLm1kIGNyZWF0ZWRgKSk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgIGNoYWxrLnJlZChcbiAgICAgICAgICBg4pyXIEZhaWxlZCB0byB1cGRhdGUgQ0xBVURFLm1kOiAke2Vycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKX1gLFxuICAgICAgICApLFxuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gc2tpbGxzQ29weShzcmM6IHN0cmluZywgZGVzdDogc3RyaW5nKSB7XG4gIHRyeSB7XG4gICAgYXdhaXQgY3Aoc3JjLCBkZXN0LCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICBjb25zb2xlLmxvZyhjaGFsay5ncmVlbihg4pyTIFNraWxscyBjb3BpZWRgKSk7XG4gIH0gY2F0Y2ggKGNvcHlFcnJvcikge1xuICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICBjaGFsay5yZWQoXG4gICAgICAgIGDinJcgRmFpbGVkIHRvIGNvcHkgc2tpbGxzOiAke2NvcHlFcnJvciBpbnN0YW5jZW9mIEVycm9yID8gY29weUVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoY29weUVycm9yKX1gLFxuICAgICAgKSxcbiAgICApO1xuICAgIHRocm93IGNvcHlFcnJvcjtcbiAgfVxufVxuXG4vKipcbiAqIHBucG0gc29uYW11IHNraWxscyBjcmVhdGUgPG5hbWU+IO2VmOuptCDsi6TtlonrkJjripQg7ZWo7IiY7J6F64uI64ukLlxuICog66Gc7LusIHNraWxsIOy0iOyViOydhCDsg53shLHtlanri4jri6QuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHNraWxsc19jcmVhdGUobmFtZTogc3RyaW5nKSB7XG4gIGNvbnN0IHdvcmtzcGFjZVJvb3QgPSBhd2FpdCBmaW5kV29ya3NwYWNlUm9vdCgpO1xuICBjb25zdCBsb2NhbERpciA9IHBhdGguam9pbih3b3Jrc3BhY2VSb290LCBcIi5jbGF1ZGVcIiwgXCJza2lsbHNcIiwgXCJsb2NhbFwiKTtcblxuICAvLyA9PT0g7YyM7J2866qFIOqygOymnSDrsI8gU2FuaXRpemUgPT09XG4gIGlmICghbmFtZSB8fCBuYW1lLnRyaW0oKSA9PT0gXCJcIikge1xuICAgIGNvbnNvbGUuZXJyb3IoY2hhbGsucmVkKFwi4pyXIFNraWxsIG5hbWUgaXMgcmVxdWlyZWRcIikpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGxldCBzYW5pdGl6ZWQgPSBuYW1lXG4gICAgLy8g6rO167Cx7J2EIO2VmOydtO2UiOycvOuhnFxuICAgIC5yZXBsYWNlKC9cXHMrL2csIFwiLVwiKVxuICAgIC8vIOqyveuhnCDqtazrtoTsnpAg7KCc6rGwXG4gICAgLnJlcGxhY2UoL1svXFxcXF0vZywgXCItXCIpXG4gICAgLy8gUGF0aCB0cmF2ZXJzYWwg67Cp7KeAXG4gICAgLnJlcGxhY2UoL1xcLlxcLi9nLCBcIlwiKVxuICAgIC8vIFdpbmRvd3Mg6riI7KeAIOusuOyekCDsoJzqsbBcbiAgICAucmVwbGFjZSgvWzw+OlwifD8qXS9nLCBcIlwiKVxuICAgIC8vIOyLnOyekS/rgZ0g7KCQLCDtlZjsnbTtlIgsIOyWuOuNlOyKpOy9lOyWtCDsoJzqsbBcbiAgICAucmVwbGFjZSgvXlsuXFwtX10rfFsuXFwtX10rJC9nLCBcIlwiKVxuICAgIC8vIOyXsOyGjeuQnCDtlZjsnbTtlIjsnYQg7ZWY64KY66GcXG4gICAgLnJlcGxhY2UoLy0rL2csIFwiLVwiKVxuICAgIC8vIOyVjO2MjOuysywg7Iir7J6QLCDtlZjsnbTtlIgsIOyWuOuNlOyKpOy9lOyWtCwg7ZWc6riA66eMIO2XiOyaqVxuICAgIC5yZXBsYWNlKC9bXmEtekEtWjAtOS1f6rCALe2eo10vZywgXCJcIik7XG5cbiAgLy8g6ri47J20IOygnO2VnFxuICBjb25zdCBNQVhfTEVOR1RIID0gMTAwO1xuICBpZiAoc2FuaXRpemVkLmxlbmd0aCA+IE1BWF9MRU5HVEgpIHtcbiAgICBzYW5pdGl6ZWQgPSBzYW5pdGl6ZWQuc3Vic3RyaW5nKDAsIE1BWF9MRU5HVEgpO1xuICAgIGNvbnNvbGUubG9nKGNoYWxrLnllbGxvdyhg4pqgIE5hbWUgdHJ1bmNhdGVkIHRvICR7TUFYX0xFTkdUSH0gY2hhcmFjdGVyc2ApKTtcbiAgfVxuXG4gIC8vIFdpbmRvd3Mg7JiI7JW97Ja0IO2ZleyduFxuICBjb25zdCBSRVNFUlZFRF9OQU1FUyA9IFtcbiAgICBcIkNPTlwiLFxuICAgIFwiUFJOXCIsXG4gICAgXCJBVVhcIixcbiAgICBcIk5VTFwiLFxuICAgIFwiQ09NMVwiLFxuICAgIFwiQ09NMlwiLFxuICAgIFwiQ09NM1wiLFxuICAgIFwiQ09NNFwiLFxuICAgIFwiQ09NNVwiLFxuICAgIFwiQ09NNlwiLFxuICAgIFwiQ09NN1wiLFxuICAgIFwiQ09NOFwiLFxuICAgIFwiQ09NOVwiLFxuICAgIFwiTFBUMVwiLFxuICAgIFwiTFBUMlwiLFxuICAgIFwiTFBUM1wiLFxuICAgIFwiTFBUNFwiLFxuICAgIFwiTFBUNVwiLFxuICAgIFwiTFBUNlwiLFxuICAgIFwiTFBUN1wiLFxuICAgIFwiTFBUOFwiLFxuICAgIFwiTFBUOVwiLFxuICBdO1xuICBpZiAoUkVTRVJWRURfTkFNRVMuaW5jbHVkZXMoc2FuaXRpemVkLnRvVXBwZXJDYXNlKCkpKSB7XG4gICAgc2FuaXRpemVkID0gYHNraWxsLSR7c2FuaXRpemVkfWA7XG4gICAgY29uc29sZS5sb2coY2hhbGsueWVsbG93KGDimqAgUmVzZXJ2ZWQgbmFtZSBkZXRlY3RlZCwgcHJlZml4ZWQgd2l0aCBcInNraWxsLVwiYCkpO1xuICB9XG5cbiAgLy8g67mIIOusuOyekOyXtCDssrTtgaxcbiAgaWYgKHNhbml0aXplZCA9PT0gXCJcIikge1xuICAgIGNvbnNvbGUuZXJyb3IoY2hhbGsucmVkKFwi4pyXIEludmFsaWQgc2tpbGwgbmFtZSBhZnRlciBzYW5pdGl6YXRpb25cIikpO1xuICAgIGNvbnNvbGUubG9nKGNoYWxrLmRpbShgICBPcmlnaW5hbDogXCIke25hbWV9XCJgKSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8g67OA6rK9IOyVjOumvFxuICBpZiAoc2FuaXRpemVkICE9PSBuYW1lKSB7XG4gICAgY29uc29sZS5sb2coY2hhbGsueWVsbG93KGDimqAgTmFtZSBzYW5pdGl6ZWQ6IFwiJHtuYW1lfVwiIOKGkiBcIiR7c2FuaXRpemVkfVwiYCkpO1xuICB9XG5cbiAgY29uc3QgZmlsZVBhdGggPSBwYXRoLmpvaW4obG9jYWxEaXIsIGAke3Nhbml0aXplZH0ubWRgKTtcblxuICBpZiAoYXdhaXQgZXhpc3RzKGZpbGVQYXRoKSkge1xuICAgIGNvbnNvbGUubG9nKGNoYWxrLnllbGxvdyhgU2tpbGwgXCIke3Nhbml0aXplZH1cIiBhbHJlYWR5IGV4aXN0cy5gKSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgYXdhaXQgbWtkaXIobG9jYWxEaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuXG4gIGNvbnN0IHRlbXBsYXRlID0gYC0tLVxubmFtZTogJHtzYW5pdGl6ZWR9XG5jYXRlZ29yeTogb3RoZXJcbmNyZWF0ZWRfYXQ6ICR7bmV3IERhdGUoKS50b0lTT1N0cmluZygpLnNwbGl0KFwiVFwiKVswXX1cbnN0YXR1czogZHJhZnRcbi0tLVxuXG4jICR7c2FuaXRpemVkfVxuXG4jIyDsg4HtmalcblxuW+yWtOuWpCDrrLjsoJzsmIDripTsp4BdXG5cbiMjIO2VtOqysCDrsKnrspVcblxuW+yWtOuWu+qyjCDtlbTqsrDtlojripTsp4BdXG5cbiMjIOy9lOuTnCDsmIjsi5xcblxuXFxgXFxgXFxgdHlwZXNjcmlwdFxuLy8g7JiI7IucIOy9lOuTnFxuXFxgXFxgXFxgXG5gO1xuXG4gIGF3YWl0IHdyaXRlRmlsZShmaWxlUGF0aCwgdGVtcGxhdGUpO1xuICBjb25zb2xlLmxvZyhjaGFsay5ncmVlbihg4pyTIENyZWF0ZWQgLmNsYXVkZS9za2lsbHMvbG9jYWwvJHtzYW5pdGl6ZWR9Lm1kYCkpO1xufVxuXG4vKipcbiAqIHBucG0gc29uYW11IGF1dGggZ2VuZXJhdGUg7ZWY66m0IOyLpO2WieuQmOuKlCDtlajsiJjsnoXri4jri6QuXG4gKiBiZXR0ZXItYXV0aCDsl5Tti7Dti7Drk6QoVXNlciwgU2Vzc2lvbiwgQWNjb3VudCwgVmVyaWZpY2F0aW9uKeydhCDsg53shLHtlanri4jri6QuXG4gKlxuICog7Ji17IWYOlxuICogLS1wbHVnaW5zIHBob25lLW51bWJlciwyZmEgIO2UjOufrOq3uOyduCDsl5Tti7Dti7Drj4Qg7ZWo6ruYIOyDneyEsVxuICovXG5hc3luYyBmdW5jdGlvbiBhdXRoX2dlbmVyYXRlKCkge1xuICAvLyAtLXBsdWdpbnMg7Ji17IWYIO2MjOyLsVxuICBjb25zdCBwbHVnaW5zQXJnID0gcHJvY2Vzcy5hcmd2LmZpbmQoKGFyZykgPT4gYXJnLnN0YXJ0c1dpdGgoXCItLXBsdWdpbnNcIikpO1xuICBjb25zdCBwbHVnaW5zOiBCZXR0ZXJBdXRoUGx1Z2luSWRbXSA9IFtdO1xuXG4gIGlmIChwbHVnaW5zQXJnKSB7XG4gICAgY29uc3QgcGx1Z2luVmFsdWUgPSBwbHVnaW5zQXJnLmluY2x1ZGVzKFwiPVwiKVxuICAgICAgPyBwbHVnaW5zQXJnLnNwbGl0KFwiPVwiKVsxXVxuICAgICAgOiBwcm9jZXNzLmFyZ3ZbcHJvY2Vzcy5hcmd2LmluZGV4T2YocGx1Z2luc0FyZykgKyAxXTtcblxuICAgIGlmIChwbHVnaW5WYWx1ZSkge1xuICAgICAgY29uc3QgcGx1Z2luSWRzID0gcGx1Z2luVmFsdWUuc3BsaXQoXCIsXCIpLm1hcCgocCkgPT4gcC50cmltKCkpO1xuXG4gICAgICBmb3IgKGNvbnN0IGlkIG9mIHBsdWdpbklkcykge1xuICAgICAgICBpZiAoaXNWYWxpZFBsdWdpbklkKGlkKSkge1xuICAgICAgICAgIHBsdWdpbnMucHVzaChpZCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc29sZS5sb2coY2hhbGsueWVsbG93KGDimqAgVW5rbm93biBwbHVnaW46ICR7aWR9YCkpO1xuICAgICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmRpbShgICBTdXBwb3J0ZWQgcGx1Z2luczogJHtTVVBQT1JURURfUExVR0lOX0lEUy5qb2luKFwiLCBcIil9YCkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY29uc29sZS5sb2coY2hhbGsueWVsbG93LmJvbGQoXCLwn5SQIEdlbmVyYXRpbmcgYmV0dGVyLWF1dGggZW50aXRpZXMuLi5cXG5cIikpO1xuXG4gIGlmIChwbHVnaW5zLmxlbmd0aCA+IDApIHtcbiAgICBjb25zb2xlLmxvZyhjaGFsay5kaW0oYCAgUGx1Z2luczogJHtwbHVnaW5zLmpvaW4oXCIsIFwiKX1gKSk7XG4gIH1cblxuICBhd2FpdCBnZW5lcmF0ZUJldHRlckF1dGhFbnRpdGllcyh7IHBsdWdpbnMgfSk7XG59XG5cbi8qKlxuICogcG5wbSBzb25hbXUgYXV0aCBhZGQtY29tcGFuaW9ucyDtlZjrqbQg7Iuk7ZaJ65CY64qUIO2VqOyImOyeheuLiOuLpC5cbiAqIOq4sOyhtCDtlITroZzsoJ3tirjsnZggZW50aXR5Lmpzb27sl5AgZml4dHVyZUNvbXBhbmlvbnPrpbwg7IaM6riJIOy2lOqwgO2VqeuLiOuLpC5cbiAqXG4gKiDsnbTrr7ggZml4dHVyZUNvbXBhbmlvbnPqsIAg7J6I64qUIGVudGl0eeuKlCDsiqTtgrXtlanri4jri6QgKOuNruyWtOyTsOq4sCDsl4bsnYwpLlxuICovXG5hc3luYyBmdW5jdGlvbiBhdXRoX2FkZF9jb21wYW5pb25zKCkge1xuICBjb25zb2xlLmxvZyhjaGFsay55ZWxsb3cuYm9sZChcIvCflJAgQWRkaW5nIGZpeHR1cmVDb21wYW5pb25zIHRvIGJldHRlci1hdXRoIGVudGl0aWVzLi4uXFxuXCIpKTtcbiAgYXdhaXQgYWRkQ29tcGFuaW9uc1RvRW50aXRpZXMoKTtcbiAgY29uc29sZS5sb2coY2hhbGsuYm9sZChcIlxcbuKchSBEb25lIVwiKSk7XG59XG5cbi8qKlxuICog7JuM7YGs7Iqk7Y6Y7J207IqkIOujqO2KuOulvCDssL7sirXri4jri6QuXG4gKiDsmrDshKDsiJzsnIQ6IHBucG0td29ya3NwYWNlLnlhbWwgPiBDTEFVREUubWQgPiDro6jtirggcGFja2FnZS5qc29uICh3b3Jrc3BhY2VzIO2VhOuTnClcbiAqL1xuYXN5bmMgZnVuY3Rpb24gZmluZFdvcmtzcGFjZVJvb3QoKSB7XG4gIGxldCBkaXIgPSBwcm9jZXNzLmN3ZCgpO1xuXG4gIHdoaWxlIChkaXIgIT09IHBhdGguZGlybmFtZShkaXIpKSB7XG4gICAgLy8gMS4gcG5wbS13b3Jrc3BhY2UueWFtbCDtjIzsnbzsnbQg7J6I64qU7KeAIO2ZleyduC4g7J6I7Jy866m0IO2ZleyLpO2VnCBtb25vcmVwbyDro6jtirguXG4gICAgaWYgKGF3YWl0IGV4aXN0cyhwYXRoLmpvaW4oZGlyLCBcInBucG0td29ya3NwYWNlLnlhbWxcIikpKSB7XG4gICAgICByZXR1cm4gZGlyO1xuICAgIH1cblxuICAgIC8vIDIuIENMQVVERS5tZCDtjIzsnbzsnbQg7J6I64qU7KeAIO2ZleyduC4g7J6I7Jy866m0IO2UhOuhnOygne2KuCDro6jtirjroZwg6rCE7KO87ZWoLlxuICAgIGlmIChhd2FpdCBleGlzdHMocGF0aC5qb2luKGRpciwgXCJDTEFVREUubWRcIikpKSB7XG4gICAgICByZXR1cm4gZGlyO1xuICAgIH1cblxuICAgIC8vIDMuIHBhY2thZ2UuanNvbuyXkCB3b3Jrc3BhY2VzIO2VhOuTnOqwgCDsnojsnLzrqbQg66Oo7Yq4LlxuICAgIGNvbnN0IHBhY2thZ2VQYXRoID0gcGF0aC5qb2luKGRpciwgXCJwYWNrYWdlLmpzb25cIik7XG4gICAgaWYgKGF3YWl0IGV4aXN0cyhwYWNrYWdlUGF0aCkpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHBhY2thZ2VKc29uID0gSlNPTi5wYXJzZShhd2FpdCByZWFkRmlsZShwYWNrYWdlUGF0aCwgXCJ1dGYtOFwiKSk7XG4gICAgICAgIGlmIChwYWNrYWdlSnNvbi53b3Jrc3BhY2VzKSB7XG4gICAgICAgICAgcmV0dXJuIGRpcjtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIC8vIO2MjOyLsSDsi6TtjKjsi5wg66y07IucXG4gICAgICB9XG4gICAgfVxuICAgIGRpciA9IHBhdGguZGlybmFtZShkaXIpO1xuICB9XG5cbiAgLy8g7LC+7KeAIOuqu+2VmOuptCBhcGkg7Y+0642U7J2YIOu2gOuqqCDsgqzsmqlcbiAgcmV0dXJuIGZpbmRBcHBSb290UGF0aCgpO1xufVxuIl0sIm5hbWVzIjpbImNoYWxrIiwiZG90ZW52IiwiY29uZmlnIiwiYXNzZXJ0IiwiZXhlY1N5bmMiLCJzcGF3biIsImNwIiwibWtkaXIiLCJyZWFkZGlyIiwicmVhZEZpbGUiLCJybSIsInN5bWxpbmsiLCJ3cml0ZUZpbGUiLCJrbmV4IiwiY3JlYXRlUmVxdWlyZSIsIm9zIiwicGF0aCIsInByb2Nlc3MiLCJ0c2ljbGkiLCJTb25hbXUiLCJhZGRDb21wYW5pb25zVG9FbnRpdGllcyIsImdlbmVyYXRlQmV0dGVyQXV0aEVudGl0aWVzIiwiaXNWYWxpZFBsdWdpbklkIiwiU1VQUE9SVEVEX1BMVUdJTl9JRFMiLCJFbnRpdHlNYW5hZ2VyIiwiTWlncmF0b3IiLCJGaXh0dXJlTWFuYWdlciIsImV4ZWNXaXRoTGluZVByZWZpeCIsInByaW50QnVpbGRTdW1tYXJ5IiwicHJpbnRUYXNrRmFpbGVkIiwicHJpbnRUYXNrSGVhZGVyIiwicHJpbnRUYXNrU3RhcnQiLCJwcmludFRhc2tTdWNjZXNzIiwiZXhpc3RzIiwiZmluZEFwaVJvb3RQYXRoIiwiZmluZEFwcFJvb3RQYXRoIiwiQVBJX0FSVElGQUNUUyIsIldFQl9BUlRJRkFDVFMiLCJmaXh0dXJlRXhwbG9yZUNvbW1hbmQiLCJmaXh0dXJlRmV0Y2hDb21tYW5kIiwiZml4dHVyZUdlbkNvbW1hbmQiLCJ0ZXN0Q29tbWFuZCIsIm1pZ3JhdG9yIiwicGFyc2VDbGlPcHRpb25zIiwiYXJndiIsImZsYWdzIiwiU2V0Iiwib3B0aW9ucyIsImkiLCJsZW5ndGgiLCJhcmciLCJzdGFydHNXaXRoIiwiaW5jbHVkZXMiLCJrZXkiLCJ2YWx1ZSIsInNsaWNlIiwic3BsaXQiLCJuZXh0QXJnIiwiYWRkIiwiYm9vdHN0cmFwIiwibm90VG9Jbml0IiwiaW5pdCIsImZpbHRlcmVkQXJndiIsInNraXBOZXh0IiwiYWZ0ZXJEb3VibGVEYXNoIiwicHVzaCIsImNtZCIsInR5cGVzIiwidHlwZSIsIm5hbWUiLCJtZXNzYWdlIiwiY2hvaWNlcyIsImdldEFsbFBhcmVudElkcyIsIm1hcCIsImVudGl0eUlkIiwidGl0bGUiLCJhcmdzIiwicnVubmVycyIsIm1pZ3JhdGVfc3RhdHVzIiwibWlncmF0ZV9ydW4iLCJtaWdyYXRlX2FwcGx5IiwiZml4dHVyZV9pbml0IiwiZml4dHVyZV9pbXBvcnQiLCJmaXh0dXJlX3N5bmMiLCJmaXh0dXJlX2dlbiIsImZpeHR1cmVfZmV0Y2giLCJmaXh0dXJlX2V4cGxvcmUiLCJzdHViX3ByYWN0aWNlIiwic3R1Yl9lbnRpdHkiLCJzY2FmZm9sZF9tb2RlbCIsInNjYWZmb2xkX21vZGVsX3Rlc3QiLCJjb25lX2dlbiIsInN5bmMiLCJidWlsZF9hbGwiLCJidWlsZF9hcGkiLCJidWlsZF93ZWIiLCJkZXZfYWxsIiwiZGV2X2FwaSIsImRldl93ZWIiLCJzdGFydCIsInNraWxsc19zeW5jIiwic2tpbGxzX2NyZWF0ZSIsInRlc3QiLCJhdXRoX2dlbmVyYXRlIiwiYXV0aF9hZGRfY29tcGFuaW9ucyIsImRlc3Ryb3kiLCJmaW5hbGx5Iiwic3luY2VyIiwic3Bhd25BcGlEZXZTZXJ2ZXIiLCJhcGlSb290IiwiZW50cnlQb2ludCIsImhvdFJ1bm5lckJpblBhdGgiLCJ1cmwiLCJyZXNvbHZlIiwic2VydmVyUHJvY2VzcyIsImV4ZWNQYXRoIiwiam9pbiIsImN3ZCIsInN0ZGlvIiwiZW52IiwiTk9ERV9FTlYiLCJIT1QiLCJBUElfUk9PVF9QQVRIIiwiZXh0cmFFbnYiLCJjbGVhbnVwIiwiY29uc29sZSIsImxvZyIsInllbGxvdyIsImtpbGwiLCJleGl0Iiwib24iLCJjb2RlIiwiZXJyb3IiLCJyZWQiLCJib2xkIiwiU09OQU1VX0RJU0FCTEVfSU5URUdSQVRFRF9XRUIiLCJhcHBSb290Iiwid2ViUGF0aCIsImRvdWJsZURhc2hJbmRleCIsImluZGV4T2YiLCJwYXNzdGhyb3VnaEFyZ3MiLCJ2aXRlQXJncyIsInZpdGVQcm9jZXNzIiwic2lnbmFsIiwicmVzb2x2ZVN3Y0NvbmZpZ1BhdGgiLCJzd2NGaWxlUGF0aCIsImRpbSIsImRpcm5hbWUiLCJza2lwSWZNaXNzaW5nIiwiYXBpU3RhcnRlZEF0IiwiRGF0ZSIsIm5vdyIsImFydGlmYWN0IiwicHJvamVjdFBhdGgiLCJkZXNjcmlwdGlvbiIsInJ1bkJ1aWxkU3RlcHMiLCJidWlsZENvbW1hbmRBcmdzIiwiY29uZmlnRmlsZVBhdGgiLCJlIiwiZ3JheSIsIndlYlN0YXJ0ZWRBdCIsInN0ZXBzIiwicHJlQnVpbGRDb21tYW5kIiwiYnVpbGRDb21tYW5kIiwicG9zdEJ1aWxkQ29tbWFuZCIsImZpbHRlciIsInN0ZXAiLCJpc0xhc3QiLCJFcnJvciIsImNhdXNlIiwiYmx1ZSIsInNldHVwTWlncmF0b3IiLCJzZXR1cEZpeHR1cmVNYW5hZ2VyIiwidGFyZ2V0cyIsInJ1bkFjdGlvbiIsImxvY2FsSG9zdHMiLCJPYmplY3QiLCJrZXlzIiwiZGJDb25maWciLCJ0YXJnZXQiLCJ0YXJnZXRDb25maWciLCJob3N0IiwiY29ubmVjdGlvbiIsInRvTG93ZXJDYXNlIiwic3RhdHVzIiwiZ2V0U3RhdHVzIiwic3JjQ29uZmlnIiwiZGV2ZWxvcG1lbnRfbWFzdGVyIiwibGFiZWwiLCJmaXh0dXJlIiwidG9Ta2lwIiwicmVtb3RlQ29ubiIsImxvY2FsQ29ubiIsImRhdGFiYXNlIiwiZHVtcEZpbGVuYW1lIiwic3JjQ29ubiIsIm1pZ3JhdGlvbnNEdW1wIiwidXNlciIsInBhc3N3b3JkIiwiX2RiIiwibWlncmF0aW9ucyIsInJhdyIsImNvdW50IiwiY29ubiIsImRiIiwidW5kZWZpbmVkIiwicm93IiwibXlzcWxDbWQiLCJyZWNvcmRJZHMiLCJpbXBvcnRGaXh0dXJlIiwicGFyc2VPcHRpb25zIiwiXyIsImsiLCJ2IiwibmV4dCIsInByYWN0aWNlRGlyIiwiYXBpUm9vdFBhdGgiLCJmaWxlTmFtZXMiLCJtYXhTZXFObyIsInJlY3Vyc2l2ZSIsImZpbHRlcmVkU2VxcyIsImZpbGVOYW1lIiwiZW5kc1dpdGgiLCJzZXFObyIsIm1hdGNoIiwicGFyc2VJbnQiLCJzb3J0IiwiYSIsImIiLCJjdXJyZW50U2VxTm8iLCJkc3RQYXRoIiwicnVuQ29kZSIsInJlcGxhY2UiLCJjcmVhdGVFbnRpdHkiLCJ1c2VBSSIsImhhcyIsIm5vQ29uZXMiLCJlbnRpdHkiLCJnZXQiLCJjb25maWdMb2NhbGUiLCJpMThuIiwiZGVmYXVsdExvY2FsZSIsImxvY2FsZSIsInJlc3VsdCIsImdlbmVyYXRlQ29uZXMiLCJwcmVzZXJ2ZUV4aXN0aW5nIiwib25seUVtcHR5IiwidG9rZW5zVXNlZCIsImdlbmVyYXRlVGVtcGxhdGVDb25lcyIsImFsbEVudGl0aWVzIiwiZ2V0QWxsRW50aXRpZXMiLCJ0b3RhbFRva2VucyIsImVycm9ycyIsImlkIiwiZXN0aW1hdGVkQ29zdCIsInRvRml4ZWQiLCJlcnIiLCJtb2RlIiwiZ2VuZXJhdGVUZW1wbGF0ZSIsImlzR2xvYmFsIiwic291cmNlQmFzZSIsInNvdXJjZVNraWxsc0RpciIsInNvdXJjZUNsYXVkZU1kIiwic2tpbGxzX3N5bmNfdG8iLCJob21lZGlyIiwidXNlU3ltbGluayIsImNvcHlQcm9qZWN0VGVtcGxhdGVzIiwiY3lhbiIsIndvcmtzcGFjZVJvb3QiLCJmaW5kV29ya3NwYWNlUm9vdCIsImNsYXVkZURpciIsInRhcmdldFNraWxsc0RpciIsImZvcmNlIiwiZ3JlZW4iLCJTdHJpbmciLCJza2lsbHNDb3B5Iiwic291cmNlUHJvamVjdERpciIsInRhcmdldFByb2plY3REaXIiLCJ0YXJnZXRDbGF1ZGVNZCIsInJhd0NvbnRlbnQiLCJzb3VyY2VDb250ZW50IiwicmVwbGFjZUFsbCIsInRhcmdldENvbnRlbnQiLCJzdGFydE1hcmtlciIsImVuZE1hcmtlciIsInN0YXJ0SWR4IiwiZW5kSWR4IiwiYmVmb3JlIiwic3Vic3RyaW5nIiwiYWZ0ZXIiLCJuZXdDb250ZW50IiwiYXBwZW5kZWQiLCJ0cmltRW5kIiwid2l0aE1hcmtlcnMiLCJzcmMiLCJkZXN0IiwiY29weUVycm9yIiwibG9jYWxEaXIiLCJ0cmltIiwic2FuaXRpemVkIiwiTUFYX0xFTkdUSCIsIlJFU0VSVkVEX05BTUVTIiwidG9VcHBlckNhc2UiLCJmaWxlUGF0aCIsInRlbXBsYXRlIiwidG9JU09TdHJpbmciLCJwbHVnaW5zQXJnIiwiZmluZCIsInBsdWdpbnMiLCJwbHVnaW5WYWx1ZSIsInBsdWdpbklkcyIsInAiLCJkaXIiLCJwYWNrYWdlUGF0aCIsInBhY2thZ2VKc29uIiwiSlNPTiIsInBhcnNlIiwid29ya3NwYWNlcyJdLCJtYXBwaW5ncyI6IkFBQUEsT0FBT0EsV0FBVyxRQUFRO0FBQzFCLE9BQU9DLFlBQVksU0FBUztBQUU1QkEsT0FBT0MsTUFBTTtBQUViLE9BQU9DLFlBQVksU0FBUztBQUM1QixTQUFTQyxRQUFRLEVBQUVDLEtBQUssUUFBUSxnQkFBZ0I7QUFDaEQsU0FBU0MsRUFBRSxFQUFFQyxLQUFLLEVBQUVDLE9BQU8sRUFBRUMsUUFBUSxFQUFFQyxFQUFFLEVBQUVDLE9BQU8sRUFBRUMsU0FBUyxRQUFRLG1CQUFjO0FBQ25GLE9BQU9DLFVBQXlCLE9BQU87QUFDdkMsU0FBU0MsYUFBYSxRQUFRLFNBQVM7QUFDdkMsT0FBT0MsUUFBUSxLQUFLO0FBQ3BCLE9BQU9DLFVBQVUsT0FBTztBQUN4QixPQUFPQyxhQUFhLFVBQVU7QUFDOUIsU0FBU0MsTUFBTSxRQUFRLFNBQVM7QUFDaEMsU0FBU0MsTUFBTSxRQUFRLGtCQUFTO0FBQ2hDLFNBQVNDLHVCQUF1QixFQUFFQywwQkFBMEIsUUFBUSw0QkFBeUI7QUFDN0YsU0FFRUMsZUFBZSxFQUNmQyxvQkFBb0IsUUFDZiw4Q0FBcUM7QUFFNUMsU0FBU0MsYUFBYSxRQUFRLDhCQUEyQjtBQUN6RCxTQUFTQyxRQUFRLFFBQVEsMkJBQXdCO0FBQ2pELFNBQVNDLGNBQWMsUUFBUSxnQ0FBNkI7QUFDNUQsU0FDRUMsa0JBQWtCLEVBQ2xCQyxpQkFBaUIsRUFDakJDLGVBQWUsRUFDZkMsZUFBZSxFQUNmQyxjQUFjLEVBQ2RDLGdCQUFnQixRQUNYLDJCQUF3QjtBQUMvQixTQUFTQyxNQUFNLFFBQVEsdUJBQW9CO0FBQzNDLFNBQVNDLGVBQWUsRUFBRUMsZUFBZSxRQUFRLG9CQUFpQjtBQUNsRSxTQUFTQyxhQUFhLEVBQXNCQyxhQUFhLFFBQVEsb0JBQWlCO0FBQ2xGLFNBQVNDLHFCQUFxQixFQUFFQyxtQkFBbUIsRUFBRUMsaUJBQWlCLFFBQVEsZUFBWTtBQUMxRixTQUFTQyxXQUFXLFFBQVEsb0JBQWlCO0FBRTdDLElBQUlDO0FBRUo7O0NBRUMsR0FDRCxTQUFTQyxnQkFBZ0JDLE9BQWlCM0IsUUFBUTJCLElBQUk7SUFJcEQsTUFBTUMsUUFBUSxJQUFJQztJQUNsQixNQUFNQyxVQUFrQyxDQUFDO0lBRXpDLElBQUssSUFBSUMsSUFBSSxHQUFHQSxJQUFJSixLQUFLSyxNQUFNLEVBQUVELElBQUs7UUFDcEMsTUFBTUUsTUFBTU4sSUFBSSxDQUFDSSxFQUFFO1FBQ25CLElBQUksQ0FBQ0UsSUFBSUMsVUFBVSxDQUFDLE9BQU87UUFFM0Isb0JBQW9CO1FBQ3BCLElBQUlELElBQUlFLFFBQVEsQ0FBQyxNQUFNO1lBQ3JCLE1BQU0sQ0FBQ0MsS0FBS0MsTUFBTSxHQUFHSixJQUFJSyxLQUFLLENBQUMsR0FBR0MsS0FBSyxDQUFDO1lBQ3hDVCxPQUFPLENBQUNNLElBQUksR0FBR0M7WUFDZjtRQUNGO1FBRUEseUJBQXlCO1FBQ3pCLE1BQU1HLFVBQVViLElBQUksQ0FBQ0ksSUFBSSxFQUFFO1FBQzNCLElBQUlTLFdBQVcsQ0FBQ0EsUUFBUU4sVUFBVSxDQUFDLFNBQVMsQ0FBQ00sUUFBUU4sVUFBVSxDQUFDLE1BQU07WUFDcEVKLE9BQU8sQ0FBQ0csSUFBSUssS0FBSyxDQUFDLEdBQUcsR0FBR0U7WUFDeEJULEtBQUssa0JBQWtCO1FBQ3pCLE9BQU87WUFDTCxZQUFZO1lBQ1pILE1BQU1hLEdBQUcsQ0FBQ1IsSUFBSUssS0FBSyxDQUFDO1FBQ3RCO0lBQ0Y7SUFFQSxPQUFPO1FBQUVWO1FBQU9FO0lBQVE7QUFDMUI7QUFFQSxlQUFlWTtJQUNiLE1BQU1DLFlBQVk7UUFBQztRQUFPO1FBQVM7UUFBUztRQUFVO0tBQU8sQ0FBQ1IsUUFBUSxDQUFDbkMsUUFBUTJCLElBQUksQ0FBQyxFQUFFLElBQUk7SUFDMUYsSUFBSSxDQUFDZ0IsV0FBVztRQUNkLE1BQU16QyxPQUFPMEMsSUFBSSxDQUFDLE9BQU87SUFDM0I7SUFFQSxJQUFJO1FBQ0YsdURBQXVEO1FBQ3ZELG9EQUFvRDtRQUNwRCxpRUFBaUU7UUFDakUsTUFBTUMsZUFBeUIsRUFBRTtRQUNqQyxJQUFJQyxXQUFXO1FBQ2YsSUFBSUMsa0JBQWtCO1FBQ3RCLElBQUssSUFBSWhCLElBQUksR0FBR0EsSUFBSS9CLFFBQVEyQixJQUFJLENBQUNLLE1BQU0sRUFBRUQsSUFBSztZQUM1QyxNQUFNRSxNQUFNakMsUUFBUTJCLElBQUksQ0FBQ0ksRUFBRTtZQUMzQixJQUFJRSxRQUFRLE1BQU07Z0JBQ2hCYyxrQkFBa0I7Z0JBQ2xCO1lBQ0Y7WUFDQSxJQUFJQSxpQkFBaUI7WUFDckIsSUFBSUQsVUFBVTtnQkFDWkEsV0FBVztnQkFDWDtZQUNGO1lBQ0EsSUFBSWIsSUFBSUMsVUFBVSxDQUFDLE9BQU87Z0JBQ3hCLCtCQUErQjtnQkFDL0IsSUFBSUQsSUFBSUUsUUFBUSxDQUFDLE1BQU07b0JBQ3JCO2dCQUNGO2dCQUNBLHVEQUF1RDtnQkFDdkQsTUFBTUssVUFBVXhDLFFBQVEyQixJQUFJLENBQUNJLElBQUksRUFBRTtnQkFDbkMsSUFBSVMsV0FBVyxDQUFDQSxRQUFRTixVQUFVLENBQUMsU0FBUyxDQUFDTSxRQUFRTixVQUFVLENBQUMsTUFBTTtvQkFDcEVZLFdBQVc7Z0JBQ2I7Z0JBQ0E7WUFDRjtZQUNBRCxhQUFhRyxJQUFJLENBQUNmO1FBQ3BCO1FBRUEsb0RBQW9EO1FBQ3BELDBFQUEwRTtRQUMxRSxNQUFNZ0IsTUFBTUosWUFBWSxDQUFDLEVBQUU7UUFDM0IsSUFBSSxBQUFDSSxDQUFBQSxRQUFRLFdBQVdBLFFBQVEsS0FBSSxLQUFNSixhQUFhYixNQUFNLEtBQUssR0FBRztZQUNuRWEsYUFBYUcsSUFBSSxDQUFDO1FBQ3BCO1FBRUEseURBQXlEO1FBQ3pELElBQUlDLFFBQVEsUUFBUTtZQUNsQixPQUFPekI7UUFDVDtRQUVBLE1BQU12QixPQUFPNEMsY0FBYztZQUN6QkssT0FBTztnQkFDTCxhQUFhO29CQUNYQyxNQUFNO29CQUNOQyxNQUFNO29CQUNOQyxTQUFTO29CQUNUQyxTQUFTL0MsY0FBY2dELGVBQWUsR0FBR0MsR0FBRyxDQUFDLENBQUNDLFdBQWMsQ0FBQTs0QkFDMURDLE9BQU9EOzRCQUNQcEIsT0FBT29CO3dCQUNULENBQUE7Z0JBQ0Y7Z0JBQ0EsY0FBYztnQkFDZCxTQUFTO2dCQUNULFlBQVk7b0JBQ1ZOLE1BQU07b0JBQ05DLE1BQU07b0JBQ05DLFNBQVM7b0JBQ1RDLFNBQVM7d0JBQ1A7NEJBQUVJLE9BQU87NEJBQWVyQixPQUFPO3dCQUFxQjt3QkFDcEQ7NEJBQUVxQixPQUFPOzRCQUFjckIsT0FBTzt3QkFBb0I7d0JBQ2xEOzRCQUFFcUIsT0FBTzs0QkFBV3JCLE9BQU87d0JBQVU7d0JBQ3JDOzRCQUFFcUIsT0FBTzs0QkFBUXJCLE9BQU87d0JBQU87cUJBQ2hDO2dCQUNIO1lBQ0Y7WUFDQXNCLE1BQU07Z0JBQ0o7b0JBQUM7b0JBQVc7aUJBQU87Z0JBQ25CO29CQUFDO29CQUFXO29CQUFVO29CQUFhO2lCQUFhO2dCQUNoRDtvQkFBQztvQkFBVztpQkFBTztnQkFDbkI7b0JBQUM7b0JBQVc7aUJBQU07Z0JBQ2xCO29CQUFDO29CQUFXO2lCQUFRO2dCQUNwQjtvQkFBQztvQkFBVztpQkFBVTtnQkFDdEI7b0JBQUM7b0JBQVc7aUJBQU07Z0JBQ2xCO29CQUFDO29CQUFXO29CQUFTO2lCQUFXO2dCQUNoQztvQkFBQztvQkFBVztpQkFBUztnQkFDckI7b0JBQUM7b0JBQVE7b0JBQVk7aUJBQVE7Z0JBQzdCO29CQUFDO29CQUFRO29CQUFVO2lCQUFRO2dCQUMzQjtvQkFBQztvQkFBWTtvQkFBUztpQkFBWTtnQkFDbEM7b0JBQUM7b0JBQVk7b0JBQWM7aUJBQVk7Z0JBQ3ZDO29CQUFDO29CQUFZO29CQUFhO2lCQUFZO2dCQUN0QztvQkFBQztvQkFBWTtvQkFBYTtpQkFBWTtnQkFDdEM7b0JBQUM7b0JBQVE7b0JBQU87aUJBQVk7Z0JBQzVCO29CQUFDO2lCQUFPO2dCQUNSO29CQUFDO29CQUFTO2lCQUFNO2dCQUNoQjtvQkFBQztvQkFBUztpQkFBTTtnQkFDaEI7b0JBQUM7b0JBQVM7aUJBQU07Z0JBQ2hCO29CQUFDO29CQUFPO2lCQUFNO2dCQUNkO29CQUFDO29CQUFPO2lCQUFNO2dCQUNkO29CQUFDO29CQUFPO2lCQUFNO2dCQUNkO29CQUFDO2lCQUFRO2dCQUNUO29CQUFDO29CQUFVO2lCQUFPO2dCQUNsQjtvQkFBQztvQkFBVTtvQkFBVTtpQkFBUTtnQkFDN0I7b0JBQUM7aUJBQU87Z0JBQ1I7b0JBQUM7b0JBQVE7aUJBQVc7Z0JBQ3BCO29CQUFDO29CQUFRO2lCQUFpQjthQUMzQjtZQUNEQyxTQUFTO2dCQUNQQztnQkFDQUM7Z0JBQ0FDO2dCQUNBQztnQkFDQUM7Z0JBQ0FDO2dCQUNBQztnQkFDQUM7Z0JBQ0FDO2dCQUNBQztnQkFDQUM7Z0JBQ0FDO2dCQUNBQztnQkFDQSxzQkFBc0I7Z0JBQ3RCLHNCQUFzQjtnQkFDdEJDO2dCQUNBQztnQkFDQUM7Z0JBQ0FDO2dCQUNBQztnQkFDQUM7Z0JBQ0FDO2dCQUNBQztnQkFDQUM7Z0JBQ0FDO2dCQUNBQztnQkFDQUMsTUFBTTdEO2dCQUNOOEQ7Z0JBQ0EsdUJBQXVCQztZQUN6QjtRQUNGO0lBQ0YsU0FBVTtRQUNSLE1BQU1yRixPQUFPc0YsT0FBTztJQUN0QjtBQUNGO0FBRUE5QyxZQUFZK0MsT0FBTyxDQUFDO0lBQ2xCLE1BQU1oRixlQUFlK0UsT0FBTztBQUM5QjtBQUVBOzs7Q0FHQyxHQUNELGVBQWViO0lBQ2IsTUFBTXpFLE9BQU93RixNQUFNLENBQUNmLElBQUk7QUFDMUI7QUFFQTs7Ozs7Ozs7Ozs7Q0FXQyxHQUNELFNBQVNnQixrQkFBa0I3RCxPQUErQztJQUN4RSxNQUFNOEQsVUFBVTNFO0lBQ2hCLE1BQU00RSxhQUFhO0lBRW5CLGdGQUFnRjtJQUNoRixxRkFBcUY7SUFDckYsTUFBTUMsbUJBQW1CakcsY0FBYyxZQUFZa0csR0FBRyxFQUFFQyxPQUFPLENBQzdEO0lBR0YsTUFBTUMsZ0JBQWdCN0csTUFDcEJZLFFBQVFrRyxRQUFRLEVBQ2hCO1FBQ0VKO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0EsQ0FBQyxvQkFBb0IsRUFBRS9GLEtBQUtvRyxJQUFJLENBQUNQLFNBQVMsZUFBZSx1QkFBdUIsQ0FBQztRQUVqRjtRQUNBO1FBQ0FDO0tBQ0QsRUFDRDtRQUNFTyxLQUFLUjtRQUNMUyxPQUFPO1FBQ1BDLEtBQUs7WUFDSCxHQUFHdEcsUUFBUXNHLEdBQUc7WUFDZEMsVUFBVTtZQUNWQyxLQUFLO1lBQ0xDLGVBQWViO1lBQ2YsR0FBRzlELFNBQVM0RSxRQUFRO1FBQ3RCO0lBQ0Y7SUFHRixRQUFRO0lBQ1IsTUFBTUMsVUFBVTtRQUNkQyxRQUFRQyxHQUFHLENBQUM5SCxNQUFNK0gsTUFBTSxDQUFDO1FBQ3pCYixjQUFjYyxJQUFJLENBQUM7UUFDbkIvRyxRQUFRZ0gsSUFBSSxDQUFDO0lBQ2Y7SUFFQWhILFFBQVFpSCxFQUFFLENBQUMsVUFBVU47SUFDckIzRyxRQUFRaUgsRUFBRSxDQUFDLFdBQVdOO0lBRXRCVixjQUFjZ0IsRUFBRSxDQUFDLFFBQVEsQ0FBQ0M7UUFDeEIsSUFBSUEsU0FBUyxHQUFHO1lBQ2ROLFFBQVFPLEtBQUssQ0FBQ3BJLE1BQU1xSSxHQUFHLENBQUMsQ0FBQyx3QkFBd0IsRUFBRUYsTUFBTTtZQUN6RGxILFFBQVFnSCxJQUFJLENBQUNFLFFBQVE7UUFDdkI7SUFDRjtBQUNGO0FBRUE7Ozs7O0NBS0MsR0FDRCxTQUFTbkM7SUFDUDZCLFFBQVFDLEdBQUcsQ0FBQzlILE1BQU0rSCxNQUFNLENBQUNPLElBQUksQ0FBQztJQUM5QjFCO0FBQ0Y7QUFFQTs7Ozs7O0NBTUMsR0FDRCxTQUFTWDtJQUNQNEIsUUFBUUMsR0FBRyxDQUFDOUgsTUFBTStILE1BQU0sQ0FBQ08sSUFBSSxDQUFDO0lBQzlCMUIsa0JBQWtCO1FBQ2hCZSxVQUFVO1lBQUVZLCtCQUErQjtRQUFNO0lBQ25EO0FBQ0Y7QUFFQTs7Ozs7O0NBTUMsR0FDRCxlQUFlckM7SUFDYixNQUFNc0MsVUFBVXJHO0lBQ2hCLE1BQU1zRyxVQUFVekgsS0FBS29HLElBQUksQ0FBQ29CLFNBQVM7SUFFbkMsSUFBSSxDQUFFLE1BQU12RyxPQUFPd0csVUFBVztRQUM1QlosUUFBUU8sS0FBSyxDQUFDLENBQUMscUJBQXFCLEVBQUVLLFNBQVM7UUFDL0N4SCxRQUFRZ0gsSUFBSSxDQUFDO0lBQ2Y7SUFFQSxjQUFjO0lBQ2QsTUFBTVMsa0JBQWtCekgsUUFBUTJCLElBQUksQ0FBQytGLE9BQU8sQ0FBQztJQUM3QyxNQUFNQyxrQkFBa0JGLG9CQUFvQixDQUFDLElBQUl6SCxRQUFRMkIsSUFBSSxDQUFDVyxLQUFLLENBQUNtRixrQkFBa0IsS0FBSyxFQUFFO0lBRTdGLE1BQU1HLFdBQVc7UUFBQztRQUFRO1dBQVdEO0tBQWdCO0lBRXJEZixRQUFRQyxHQUFHLENBQUM5SCxNQUFNK0gsTUFBTSxDQUFDTyxJQUFJLENBQUM7SUFFOUIsTUFBTVEsY0FBY3pJLE1BQU0sUUFBUXdJLFVBQVU7UUFDMUN4QixLQUFLb0I7UUFDTG5CLE9BQU87SUFDVDtJQUVBd0IsWUFBWVosRUFBRSxDQUFDLFFBQVEsQ0FBQ0M7UUFDdEJsSCxRQUFRZ0gsSUFBSSxDQUFDRSxRQUFRO0lBQ3ZCO0lBRUEsZ0RBQWdEO0lBQ2hELEtBQUssTUFBTVksVUFBVTtRQUFDO1FBQVU7S0FBVSxDQUFXO1FBQ25EOUgsUUFBUWlILEVBQUUsQ0FBQ2EsUUFBUTtZQUNqQkQsWUFBWWQsSUFBSSxDQUFDZTtRQUNuQjtJQUNGO0FBQ0Y7QUFFQTs7O0NBR0MsR0FDRCxlQUFlQztJQUNiLElBQUlDLGNBQWM7SUFDbEIsSUFBSTtRQUNGLElBQUksTUFBTWhILE9BQU9nSCxjQUFjO1lBQzdCcEIsUUFBUUMsR0FBRyxDQUFDOUgsTUFBTWtKLEdBQUcsQ0FBQztRQUN4QixPQUFPO1lBQ0xyQixRQUFRQyxHQUFHLENBQUM5SCxNQUFNa0osR0FBRyxDQUFDO1lBQ3RCRCxjQUFjakksS0FBS29HLElBQUksQ0FBQyxZQUFZK0IsT0FBTyxFQUFFLE1BQU0sTUFBTTtRQUMzRDtJQUNGLEVBQUUsT0FBT2YsT0FBTztRQUNkUCxRQUFRTyxLQUFLLENBQUNwSSxNQUFNcUksR0FBRyxDQUFDLHVDQUF1Q0Q7UUFDL0RuSCxRQUFRZ0gsSUFBSSxDQUFDO0lBQ2Y7SUFDQSxPQUFPZ0I7QUFDVDtBQUVBOzs7Q0FHQyxHQUNELGVBQWVwRDtJQUNiLE1BQU1DO0lBQ04sTUFBTUMsVUFBVTtRQUFFcUQsZUFBZTtJQUFLO0FBQ3hDO0FBRUE7Ozs7O0NBS0MsR0FDRCxlQUFldEQ7SUFDYixNQUFNMEMsVUFBVXJHO0lBQ2hCLE1BQU04RyxjQUFjLE1BQU1EO0lBRTFCLE1BQU1LLGVBQWVDLEtBQUtDLEdBQUc7SUFDN0IsSUFBSTtRQUNGLEtBQUssTUFBTUMsWUFBWXBILGNBQWU7WUFDcEMsTUFBTWlGLE1BQU1yRyxLQUFLb0csSUFBSSxDQUFDb0IsU0FBU2dCLFNBQVNDLFdBQVc7WUFDbkQzSCxnQkFBZ0IwSCxTQUFTbkYsSUFBSSxFQUFFbUYsU0FBU0UsV0FBVyxFQUFFckM7WUFFckQsTUFBTXNDLGNBQWNILFVBQVU7Z0JBQUVuQztnQkFBS3VDLGtCQUFrQjtvQkFBRUMsZ0JBQWdCWjtnQkFBWTtZQUFFO1FBQ3pGO1FBQ0FySCxrQkFBa0IsT0FBTyxNQUFNMEgsS0FBS0MsR0FBRyxLQUFLRjtJQUM5QyxFQUFFLE9BQU9TLEdBQUc7UUFDVmxJLGtCQUFrQixPQUFPLE9BQU8wSCxLQUFLQyxHQUFHLEtBQUtGO1FBQzdDeEIsUUFBUU8sS0FBSyxDQUFDMEI7UUFDZDdJLFFBQVFnSCxJQUFJLENBQUM7SUFDZjtBQUNGO0FBRUE7Ozs7O0NBS0MsR0FDRCxlQUFlbEMsVUFBVSxFQUFFcUQsZ0JBQWdCLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNyRCxNQUFNWixVQUFVckc7SUFDaEIsTUFBTXNHLFVBQVV6SCxLQUFLb0csSUFBSSxDQUFDb0IsU0FBUztJQUVuQyxJQUFJLENBQUUsTUFBTXZHLE9BQU93RyxVQUFXO1FBQzVCLElBQUlXLGVBQWU7WUFDakJ2QixRQUFRQyxHQUFHLENBQUM5SCxNQUFNK0osSUFBSSxDQUFDO1lBQ3ZCO1FBQ0Y7UUFDQWxDLFFBQVFPLEtBQUssQ0FBQyxDQUFDLHFCQUFxQixFQUFFSyxTQUFTO1FBQy9DeEgsUUFBUWdILElBQUksQ0FBQztJQUNmO0lBRUEsTUFBTStCLGVBQWVWLEtBQUtDLEdBQUc7SUFDN0IsSUFBSTtRQUNGLEtBQUssTUFBTUMsWUFBWW5ILGNBQWU7WUFDcEMsTUFBTWdGLE1BQU1yRyxLQUFLb0csSUFBSSxDQUFDb0IsU0FBU2dCLFNBQVNDLFdBQVc7WUFDbkQzSCxnQkFBZ0IwSCxTQUFTbkYsSUFBSSxFQUFFbUYsU0FBU0UsV0FBVyxFQUFFckM7WUFFckQsTUFBTXNDLGNBQWNILFVBQVU7Z0JBQUVuQztnQkFBS3VDLGtCQUFrQixDQUFDO1lBQUU7UUFDNUQ7UUFDQWhJLGtCQUFrQixPQUFPLE1BQU0wSCxLQUFLQyxHQUFHLEtBQUtTO0lBQzlDLEVBQUUsT0FBT0YsR0FBRztRQUNWbEksa0JBQWtCLE9BQU8sT0FBTzBILEtBQUtDLEdBQUcsS0FBS1M7UUFDN0NuQyxRQUFRTyxLQUFLLENBQUMwQjtRQUNkN0ksUUFBUWdILElBQUksQ0FBQztJQUNmO0FBQ0Y7QUFFQTs7Q0FFQyxHQUNELGVBQWUwQixjQUNiSCxRQUEwQixFQUMxQnpHLE9BQTZDO0lBRTdDLE1BQU1rSCxRQUFRO1FBQ1o7WUFBRTVGLE1BQU07WUFBYUgsS0FBS3NGLFNBQVNVLGVBQWU7UUFBSztRQUN2RDtZQUFFN0YsTUFBTTtZQUFTSCxLQUFLc0YsU0FBU1csWUFBWSxDQUFDcEgsUUFBUTZHLGdCQUFnQjtRQUFFO1FBQ3RFO1lBQUV2RixNQUFNO1lBQWNILEtBQUtzRixTQUFTWSxnQkFBZ0I7UUFBSztLQUMxRCxDQUFDQyxNQUFNLENBQUMsQ0FBQ0MsT0FBU0EsS0FBS3BHLEdBQUc7SUFFM0IsSUFBSyxJQUFJbEIsSUFBSSxHQUFHQSxJQUFJaUgsTUFBTWhILE1BQU0sRUFBRUQsSUFBSztRQUNyQyxNQUFNc0gsT0FBT0wsS0FBSyxDQUFDakgsRUFBRTtRQUNyQixNQUFNdUgsU0FBU3ZILE1BQU1pSCxNQUFNaEgsTUFBTSxHQUFHO1FBRXBDLElBQUk7WUFDRjlDLE9BQU9tSyxLQUFLcEcsR0FBRztZQUNmbkMsZUFBZXVJLEtBQUtqRyxJQUFJLEVBQUVpRyxLQUFLcEcsR0FBRyxFQUFFcUc7WUFDcEMsTUFBTTVJLG1CQUFtQjJJLEtBQUtwRyxHQUFHLEVBQUU7Z0JBQUVtRCxLQUFLdEUsUUFBUXNFLEdBQUc7WUFBQztZQUN0RHJGLGlCQUFpQnNJLEtBQUtqRyxJQUFJLEVBQUVrRztRQUM5QixFQUFFLE9BQU9ULEdBQUc7WUFDVmpJLGdCQUFnQnlJLEtBQUtqRyxJQUFJLEVBQUVrRztZQUMzQixNQUFNLElBQUlDLE1BQU0sR0FBR0YsS0FBS2pHLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRTtnQkFBRW9HLE9BQU9YO1lBQUU7UUFDcEQ7SUFDRjtBQUNGO0FBRUE7Ozs7Ozs7O0NBUUMsR0FDRCxlQUFlM0Q7SUFDYixNQUFNVSxVQUFVM0U7SUFDaEIsTUFBTTRFLGFBQWE7SUFFbkIsSUFBSSxDQUFFLE1BQU03RSxPQUFPNkUsYUFBYztRQUMvQmUsUUFBUUMsR0FBRyxDQUFDOUgsTUFBTXFJLEdBQUcsQ0FBQyxHQUFHdkIsV0FBVyw0Q0FBNEMsQ0FBQztRQUNqRmUsUUFBUUMsR0FBRyxDQUFDOUgsTUFBTTBLLElBQUksQ0FBQztRQUN2QjtJQUNGO0lBRUEsTUFBTSxFQUFFckssS0FBSyxFQUFFLEdBQUcsTUFBTSxNQUFNLENBQUM7SUFDL0IsTUFBTTZHLGdCQUFnQjdHLE1BQ3BCWSxRQUFRa0csUUFBUSxFQUNoQjtRQUFDO1FBQXdCO1FBQU07UUFBaUJMO0tBQVcsRUFDM0Q7UUFDRU8sS0FBS1I7UUFDTFMsT0FBTztJQUNUO0lBR0ZyRyxRQUFRaUgsRUFBRSxDQUFDLFVBQVU7UUFDbkJoQixjQUFjYyxJQUFJLENBQUM7UUFDbkIvRyxRQUFRZ0gsSUFBSSxDQUFDO0lBQ2Y7QUFDRjtBQUVBLGVBQWUwQztJQUNiLFdBQVc7SUFDWGpJLFdBQVcsSUFBSWpCO0FBQ2pCO0FBRUEsZUFBZW1KO0lBQ2JsSixlQUFlbUMsSUFBSTtBQUNyQjtBQUVBLGVBQWVtQixjQUFjNkYsT0FBaUM7SUFDNUQsTUFBTUY7SUFDTixNQUFNakksU0FBU29JLFNBQVMsQ0FBQyxTQUFTRDtBQUNwQztBQUVBLGVBQWU5RjtJQUNiLE1BQU00RjtJQUNOLE1BQU1JLGFBQWE7UUFBQztRQUFhO1FBQWE7UUFBVztLQUFNO0lBQy9ELE1BQU1GLFVBQVVHLE9BQU9DLElBQUksQ0FBQzlKLE9BQU8rSixRQUFRLEVBQUViLE1BQU0sQ0FBQyxDQUFDYztRQUNuRCxNQUFNQyxlQUFlakssT0FBTytKLFFBQVEsQ0FBQ0MsT0FBK0I7UUFDcEUsTUFBTUUsT0FBTyxBQUFDRCxjQUFjRSxZQUFrQ0QsUUFBUTtRQUN0RSxPQUFPTixXQUFXM0gsUUFBUSxDQUFDaUksS0FBS0UsV0FBVztJQUM3QztJQUVBLGlDQUFpQztJQUNqQyxNQUFNN0ksU0FBU29JLFNBQVMsQ0FBQyxTQUFTRDtBQUNwQztBQUVBLGVBQWUvRjtJQUNiLE1BQU02RjtJQUVOLE1BQU1hLFNBQVMsTUFBTTlJLFNBQVMrSSxTQUFTO0lBQ3ZDLFVBQVU7SUFDVjVELFFBQVFDLEdBQUcsQ0FBQzBEO0FBQ2Q7QUFFQSxlQUFldkc7SUFDYixNQUFNeUcsWUFBWXZLLE9BQU8rSixRQUFRLENBQUNTLGtCQUFrQjtJQUNwRCxNQUFNZCxVQUFVO1FBQ2Q7WUFDRWUsT0FBTztZQUNQMUwsUUFBUWlCLE9BQU8rSixRQUFRLENBQUNXLE9BQU87UUFDakM7UUFDQTtZQUNFRCxPQUFPO1lBQ1AxTCxRQUFRaUIsT0FBTytKLFFBQVEsQ0FBQzVFLElBQUk7WUFDNUJ3RixRQUFRLEFBQUMsQ0FBQTtnQkFDUCxNQUFNQyxhQUFhNUssT0FBTytKLFFBQVEsQ0FBQ1csT0FBTyxDQUFDUCxVQUFVO2dCQUNyRCxNQUFNVSxZQUFZN0ssT0FBTytKLFFBQVEsQ0FBQzVFLElBQUksQ0FBQ2dGLFVBQVU7Z0JBQ2pELE9BQU9TLFdBQVdWLElBQUksS0FBS1csVUFBVVgsSUFBSSxJQUFJVSxXQUFXRSxRQUFRLEtBQUtELFVBQVVDLFFBQVE7WUFDekYsQ0FBQTtRQUNGO0tBQ0Q7SUFNRCxrQkFBa0I7SUFDbEJwRSxRQUFRQyxHQUFHLENBQUM7SUFDWixNQUFNb0UsZUFBZSxDQUFDLHlCQUF5QixFQUFFNUMsS0FBS0MsR0FBRyxHQUFHLElBQUksQ0FBQztJQUNqRSxNQUFNNEMsVUFBVVQsVUFBVUosVUFBVTtJQUNwQyxNQUFNYyxpQkFBaUIsQ0FBQyxvQ0FBb0MsRUFBRTlDLEtBQUtDLEdBQUcsR0FBRyxJQUFJLENBQUM7SUFDOUVuSixTQUNFLENBQUMsWUFBWSxFQUFFK0wsUUFBUWQsSUFBSSxDQUFDLEdBQUcsRUFBRWMsUUFBUUUsSUFBSSxDQUFDLEdBQUcsRUFBRUYsUUFBUUcsUUFBUSxDQUFDLG1EQUFtRCxFQUFFSCxRQUFRRixRQUFRLENBQUMsR0FBRyxFQUFFQyxjQUFjO0lBRS9KLE1BQU1LLE1BQU0xTCxLQUFLNks7SUFDakIsTUFBTSxDQUFDLENBQUNjLFdBQVcsQ0FBQyxHQUFHLE1BQU1ELElBQUlFLEdBQUcsQ0FDbEMscUhBQ0E7UUFBQ04sUUFBUUYsUUFBUTtLQUFDO0lBRXBCLElBQUlPLFdBQVdFLEtBQUssR0FBRyxHQUFHO1FBQ3hCdE0sU0FDRSxDQUFDLFlBQVksRUFBRStMLFFBQVFkLElBQUksQ0FBQyxHQUFHLEVBQUVjLFFBQVFFLElBQUksQ0FBQyxHQUFHLEVBQUVGLFFBQVFHLFFBQVEsQ0FBQyxnREFBZ0QsRUFBRUgsUUFBUUYsUUFBUSxDQUFDLHdDQUF3QyxFQUFFRyxnQkFBZ0I7SUFFck07SUFFQSwrQkFBK0I7SUFDL0IsV0FBVyxNQUFNLEVBQUVSLEtBQUssRUFBRTFMLE1BQU0sRUFBRTRMLE1BQU0sRUFBRSxJQUFJakIsUUFBUztRQUNyRCxNQUFNOEIsT0FBT3pNLE9BQU9vTCxVQUFVO1FBRTlCLElBQUlRLFdBQVcsTUFBTTtZQUNuQmpFLFFBQVFDLEdBQUcsQ0FBQzlILE1BQU1xSSxHQUFHLENBQUMsR0FBR3VELE1BQU0sVUFBVSxDQUFDO1lBQzFDO1FBQ0Y7UUFFQSxNQUFNZ0IsS0FBSy9MLEtBQUs7WUFDZCxHQUFHWCxNQUFNO1lBQ1RvTCxZQUFZO2dCQUNWLEdBQUtwTCxPQUFPb0wsVUFBVSxJQUFJLENBQUMsQ0FBQztnQkFDNUJXLFVBQVVZO1lBQ1o7UUFDRjtRQUNBLE1BQU0sQ0FBQyxDQUFDQyxJQUFJLENBQUMsR0FBRyxNQUFNRixHQUFHSCxHQUFHLENBQUMsQ0FBQyxxQkFBcUIsRUFBRUUsS0FBS1YsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUNyRSxJQUFJYSxLQUFLO1lBQ1BqRixRQUFRQyxHQUFHLENBQUM5SCxNQUFNK0gsTUFBTSxDQUFDLEdBQUc2RCxNQUFNLFlBQVksRUFBRWUsS0FBS1YsUUFBUSxDQUFDLGdCQUFnQixDQUFDO1lBQy9FLE1BQU1XLEdBQUduRyxPQUFPO1lBQ2hCO1FBQ0Y7UUFFQW9CLFFBQVFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRThELE1BQU0sR0FBRyxDQUFDO1FBQ2pDLE1BQU1tQixXQUFXLENBQUMsUUFBUSxFQUFFSixLQUFLdEIsSUFBSSxDQUFDLEdBQUcsRUFBRXNCLEtBQUtOLElBQUksQ0FBQyxHQUFHLEVBQUVNLEtBQUtMLFFBQVEsRUFBRTtRQUN6RWxNLFNBQVMsR0FBRzJNLFNBQVMsK0JBQStCLEVBQUVKLEtBQUtWLFFBQVEsQ0FBQyxHQUFHLENBQUM7UUFDeEU3TCxTQUFTLEdBQUcyTSxTQUFTLHVCQUF1QixFQUFFSixLQUFLVixRQUFRLENBQUMsR0FBRyxDQUFDO1FBQ2hFN0wsU0FBUyxHQUFHMk0sU0FBUyxDQUFDLEVBQUVKLEtBQUtWLFFBQVEsQ0FBQyxHQUFHLEVBQUVDLGNBQWM7UUFDekQsSUFBSSxNQUFNakssT0FBT21LLGlCQUFpQjtZQUNoQ2hNLFNBQVMsR0FBRzJNLFNBQVMsQ0FBQyxFQUFFSixLQUFLVixRQUFRLENBQUMsR0FBRyxFQUFFRyxnQkFBZ0I7UUFDN0Q7UUFFQSxNQUFNUSxHQUFHbkcsT0FBTztJQUNsQjtJQUVBLE1BQU04RixJQUFJOUYsT0FBTztBQUNuQjtBQUVBLGVBQWV2QixlQUFlUixRQUFnQixFQUFFc0ksU0FBbUI7SUFDakUsTUFBTXBDO0lBRU4sTUFBTWxKLGVBQWV1TCxhQUFhLENBQUN2SSxVQUFVc0k7SUFDN0MsTUFBTXRMLGVBQWVrRSxJQUFJO0FBQzNCO0FBRUEsZUFBZVQ7SUFDYixNQUFNeUY7SUFFTixNQUFNbEosZUFBZWtFLElBQUk7QUFDM0I7QUFFQTs7O0NBR0MsR0FDRCxlQUFlUjtJQUNiLE1BQU1yQyxVQUFVbUssYUFBYWpNLFFBQVEyQixJQUFJO0lBQ3pDLE1BQU1KLGtCQUFrQk87QUFDMUI7QUFFQTs7O0NBR0MsR0FDRCxlQUFlc0M7SUFDYixNQUFNdEMsVUFBVW1LLGFBQWFqTSxRQUFRMkIsSUFBSTtJQUN6QyxNQUFNTCxvQkFBb0JRO0FBQzVCO0FBRUE7OztDQUdDLEdBQ0QsZUFBZXVDO0lBQ2IsTUFBTXZDLFVBQVVtSyxhQUFhak0sUUFBUTJCLElBQUk7SUFDekMsTUFBTU4sc0JBQXNCUztBQUM5QjtBQUVBOztDQUVDLEdBQ0QsU0FBU21LLGFBQ1B0SyxJQUFjO0lBRWQsTUFBTUcsVUFBeUU7UUFBRW9LLEdBQUcsRUFBRTtJQUFDO0lBRXZGLElBQUssSUFBSW5LLElBQUksR0FBR0EsSUFBSUosS0FBS0ssTUFBTSxFQUFFRCxJQUFLO1FBQ3BDLE1BQU1FLE1BQU1OLElBQUksQ0FBQ0ksRUFBRTtRQUVuQixJQUFJRSxJQUFJQyxVQUFVLENBQUMsT0FBTztZQUN4QixNQUFNRSxNQUFNSCxJQUFJSyxLQUFLLENBQUM7WUFFdEIsSUFBSUYsSUFBSUQsUUFBUSxDQUFDLE1BQU07Z0JBQ3JCLE1BQU0sQ0FBQ2dLLEdBQUdDLEVBQUUsR0FBR2hLLElBQUlHLEtBQUssQ0FBQztnQkFDekJULE9BQU8sQ0FBQ3FLLEVBQUUsR0FBR0M7WUFDZixPQUFPO2dCQUNMLE1BQU1DLE9BQU8xSyxJQUFJLENBQUNJLElBQUksRUFBRTtnQkFDeEIsSUFBSXNLLFFBQVEsQ0FBQ0EsS0FBS25LLFVBQVUsQ0FBQyxPQUFPO29CQUNsQ0osT0FBTyxDQUFDTSxJQUFJLEdBQUdpSztvQkFDZnRLO2dCQUNGLE9BQU87b0JBQ0xELE9BQU8sQ0FBQ00sSUFBSSxHQUFHO2dCQUNqQjtZQUNGO1FBQ0YsT0FBTyxJQUFJSCxJQUFJQyxVQUFVLENBQUMsTUFBTTtZQUM5QixNQUFNRSxNQUFNSCxJQUFJSyxLQUFLLENBQUM7WUFDdEIsTUFBTStKLE9BQU8xSyxJQUFJLENBQUNJLElBQUksRUFBRTtZQUV4QixJQUFJc0ssUUFBUSxDQUFDQSxLQUFLbkssVUFBVSxDQUFDLE1BQU07Z0JBQ2pDSixPQUFPLENBQUNNLElBQUksR0FBR2lLO2dCQUNmdEs7WUFDRixPQUFPO2dCQUNMRCxPQUFPLENBQUNNLElBQUksR0FBRztZQUNqQjtRQUNGLE9BQU87WUFDTE4sUUFBUW9LLENBQUMsQ0FBQ2xKLElBQUksQ0FBQ2Y7UUFDakI7SUFDRjtJQUVBLE9BQU9IO0FBQ1Q7QUFFQSxlQUFld0MsY0FBY2xCLElBQVk7SUFDdkMsTUFBTWtKLGNBQWN2TSxLQUFLb0csSUFBSSxDQUFDakcsT0FBT3FNLFdBQVcsRUFBRSxPQUFPO0lBQ3pELE1BQU1DLFlBQVksTUFBTWpOLFFBQVErTTtJQUVoQyxNQUFNRyxXQUFXLE1BQU0sQUFBQyxDQUFBO1FBQ3RCLElBQUksQ0FBRSxNQUFNekwsT0FBT3NMLGNBQWU7WUFDaEMsTUFBTWhOLE1BQU1nTixhQUFhO2dCQUFFSSxXQUFXO1lBQUs7UUFDN0M7UUFFQSxNQUFNQyxlQUFlSCxVQUNsQnBELE1BQU0sQ0FBQyxDQUFDd0QsV0FBYUEsU0FBUzFLLFVBQVUsQ0FBQyxRQUFRMEssU0FBU0MsUUFBUSxDQUFDLFFBQ25FckosR0FBRyxDQUFDLENBQUNvSjtZQUNKLE1BQU0sR0FBR0UsTUFBTSxHQUFHRixTQUFTRyxLQUFLLENBQUMsa0JBQWtCO2dCQUFDO2dCQUFLO2FBQUk7WUFDN0QsT0FBT0MsU0FBU0Y7UUFDbEIsR0FDQ0csSUFBSSxDQUFDLENBQUNDLEdBQUdDLElBQU1BLElBQUlEO1FBRXRCLElBQUlQLGFBQWEzSyxNQUFNLEdBQUcsR0FBRztZQUMzQixPQUFPMkssWUFBWSxDQUFDLEVBQUU7UUFDeEI7UUFFQSxPQUFPO0lBQ1QsQ0FBQTtJQUVBLE1BQU1TLGVBQWVYLFdBQVc7SUFDaEMsTUFBTUcsV0FBVyxDQUFDLENBQUMsRUFBRVEsYUFBYSxDQUFDLEVBQUVoSyxLQUFLLEdBQUcsQ0FBQztJQUM5QyxNQUFNaUssVUFBVXROLEtBQUtvRyxJQUFJLENBQUNtRyxhQUFhTTtJQUV2QyxNQUFNMUYsT0FBTztRQUNYLENBQUMsZ0NBQWdDLENBQUM7UUFDbEM7UUFDQSxDQUFDLGdCQUFnQixDQUFDO1FBQ2xCLENBQUMsYUFBYSxFQUFFMEYsU0FBUyxHQUFHLENBQUM7UUFDN0I7UUFDQSxDQUFDLDhCQUE4QixDQUFDO1FBQ2hDLENBQUMsUUFBUSxDQUFDO1FBQ1YsQ0FBQyxHQUFHLENBQUM7UUFDTDtLQUNELENBQUN6RyxJQUFJLENBQUM7SUFDUCxNQUFNeEcsVUFBVTBOLFNBQVNuRztJQUV6Qi9ILFNBQVMsQ0FBQyxLQUFLLEVBQUVrTyxTQUFTO0lBRTFCLE1BQU1DLFVBQVUsQ0FBQywrREFBK0QsRUFBRVYsU0FBU1csT0FBTyxDQUNoRyxPQUNBLFFBQ0M7SUFDSDNHLFFBQVFDLEdBQUcsQ0FBQyxHQUFHOUgsTUFBTTBLLElBQUksQ0FBQzZELFNBQVMscUJBQXFCLENBQUM7SUFDekRuTyxTQUFTLENBQUMsTUFBTSxFQUFFbU8sUUFBUSxVQUFVLENBQUM7QUFDdkM7QUFFQSxlQUFlL0ksWUFBWWQsUUFBZ0I7SUFDekMsTUFBTXZELE9BQU93RixNQUFNLENBQUM4SCxZQUFZLENBQUM7UUFBRS9KO1FBQVVDLE9BQU9EO0lBQVM7SUFFN0QsTUFBTSxFQUFFN0IsS0FBSyxFQUFFLEdBQUdGO0lBQ2xCLE1BQU0rTCxRQUFRN0wsTUFBTThMLEdBQUcsQ0FBQztJQUN4QixNQUFNQyxVQUFVL0wsTUFBTThMLEdBQUcsQ0FBQztJQUUxQix5QkFBeUI7SUFDekIsSUFBSUMsU0FBUztRQUNYL0csUUFBUUMsR0FBRyxDQUFDLENBQUMsVUFBVSxFQUFFcEQsU0FBUyx1QkFBdUIsQ0FBQztRQUMxRDtJQUNGO0lBRUEsTUFBTSxFQUFFbEQsYUFBYSxFQUFFLEdBQUcsTUFBTSxNQUFNLENBQUM7SUFDdkMsTUFBTXFOLFNBQVNyTixjQUFjc04sR0FBRyxDQUFDcEs7SUFDakMsSUFBSSxDQUFDbUssUUFBUTtRQUNYaEgsUUFBUU8sS0FBSyxDQUFDLENBQUMsa0JBQWtCLEVBQUUxRCxVQUFVO1FBQzdDO0lBQ0Y7SUFFQSxzQkFBc0I7SUFDdEIsSUFBSWdLLE9BQU87UUFDVDdHLFFBQVFDLEdBQUcsQ0FBQyxDQUFDLFVBQVUsRUFBRXBELFNBQVMsU0FBUyxDQUFDO1FBQzVDbUQsUUFBUUMsR0FBRyxDQUFDLENBQUMsaUNBQWlDLENBQUM7UUFDL0MsSUFBSTtZQUNGLE1BQU1pSCxlQUFlNU4sT0FBT2pCLE1BQU0sQ0FBQzhPLElBQUksRUFBRUM7WUFDekMsTUFBTUMsU0FDSkgsaUJBQWlCLFFBQVFBLGlCQUFpQixRQUFRQSxpQkFBaUIsT0FDL0RBLGVBQ0E7WUFFTixNQUFNSSxTQUFTLE1BQU1OLE9BQU9PLGFBQWEsQ0FBQztnQkFDeENDLGtCQUFrQjtnQkFDbEJDLFdBQVc7Z0JBQ1hKO1lBQ0Y7WUFFQXJILFFBQVFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRXFILE9BQU9JLFVBQVUsQ0FBQyxRQUFRLENBQUM7UUFDcEQsRUFBRSxPQUFPbkgsT0FBTztZQUNkLElBQUlBLGlCQUFpQm9DLFNBQVNwQyxNQUFNOUQsT0FBTyxDQUFDbEIsUUFBUSxDQUFDLHNCQUFzQjtnQkFDekV5RSxRQUFRTyxLQUFLLENBQUMsQ0FBQyxJQUFJLEVBQUVBLE1BQU05RCxPQUFPLEVBQUU7Z0JBQ3BDdUQsUUFBUU8sS0FBSyxDQUFDLENBQUMsbURBQW1ELENBQUM7WUFDckUsT0FBTztnQkFDTCxNQUFNQTtZQUNSO1FBQ0Y7UUFDQTtJQUNGO0lBRUEscUJBQXFCO0lBQ3JCLHVEQUF1RDtJQUN2RCxrREFBa0Q7SUFDbEQsMERBQTBEO0lBQzFEUCxRQUFRQyxHQUFHLENBQUMsQ0FBQywrQkFBK0IsQ0FBQztJQUM3QyxNQUFNK0csT0FBT1cscUJBQXFCO0lBQ2xDM0gsUUFBUUMsR0FBRyxDQUFDLENBQUMsVUFBVSxFQUFFcEQsU0FBUyw2QkFBNkIsQ0FBQztJQUNoRW1ELFFBQVFDLEdBQUcsQ0FBQyxDQUFDLGtDQUFrQyxFQUFFcEQsU0FBUyxvQkFBb0IsQ0FBQztBQUNqRjtBQUVBOzs7Ozs7Ozs7Q0FTQyxHQUNELGVBQWVpQixTQUFTakIsUUFBZ0I7SUFDdEMsTUFBTSxFQUFFbEQsYUFBYSxFQUFFLEdBQUcsTUFBTSxNQUFNLENBQUM7SUFDdkMsTUFBTSxFQUFFcUIsS0FBSyxFQUFFRSxPQUFPLEVBQUUsR0FBR0o7SUFFM0IsOEJBQThCO0lBQzlCLElBQUlFLE1BQU04TCxHQUFHLENBQUMsVUFBVWpLLGFBQWEsT0FBTztRQUMxQyxNQUFNK0ssY0FBY2pPLGNBQWNrTyxjQUFjO1FBQ2hEN0gsUUFBUUMsR0FBRyxDQUFDLENBQUMsbUNBQW1DLEVBQUUySCxZQUFZeE0sTUFBTSxDQUFDLGNBQWMsQ0FBQztRQUVwRixJQUFJME0sY0FBYztRQUNsQixNQUFNQyxTQUFtQixFQUFFO1FBRTNCLEtBQUssTUFBTWYsVUFBVVksWUFBYTtZQUNoQyxJQUFJO2dCQUNGNUgsUUFBUUMsR0FBRyxDQUFDLENBQUMsV0FBVyxFQUFFK0csT0FBT2dCLEVBQUUsQ0FBQyxHQUFHLENBQUM7Z0JBQ3hDLE1BQU1kLGVBQWVoTSxRQUFRbU0sTUFBTSxJQUFJL04sT0FBT2pCLE1BQU0sQ0FBQzhPLElBQUksRUFBRUM7Z0JBQzNELE1BQU1DLFNBQ0pILGlCQUFpQixRQUFRQSxpQkFBaUIsUUFBUUEsaUJBQWlCLE9BQy9EQSxlQUNBO2dCQUVOLE1BQU1JLFNBQVMsTUFBTU4sT0FBT08sYUFBYSxDQUFDO29CQUN4Q0Msa0JBQWtCLENBQUN4TSxNQUFNOEwsR0FBRyxDQUFDO29CQUM3QlcsV0FBVyxDQUFDek0sTUFBTThMLEdBQUcsQ0FBQztvQkFDdEJPO2dCQUNGO2dCQUVBUyxlQUFlUixPQUFPSSxVQUFVO2dCQUNoQzFILFFBQVFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRStHLE9BQU9nQixFQUFFLENBQUMsRUFBRSxFQUFFVixPQUFPSSxVQUFVLENBQUMsVUFBVSxDQUFDO1lBQ2hFLEVBQUUsT0FBT25ILE9BQU87Z0JBQ2QsTUFBTTlELFVBQVU4RCxpQkFBaUJvQyxRQUFRcEMsTUFBTTlELE9BQU8sR0FBRztnQkFDekRzTCxPQUFPM0wsSUFBSSxDQUFDLEdBQUc0SyxPQUFPZ0IsRUFBRSxDQUFDLEVBQUUsRUFBRXZMLFNBQVM7Z0JBQ3RDdUQsUUFBUU8sS0FBSyxDQUFDLENBQUMsSUFBSSxFQUFFeUcsT0FBT2dCLEVBQUUsQ0FBQyxFQUFFLEVBQUV2TCxRQUFRLEVBQUUsQ0FBQztZQUNoRDtRQUNGO1FBRUF1RCxRQUFRQyxHQUFHLENBQUMsQ0FBQyxpQkFBaUIsRUFBRTZILFlBQVksWUFBWSxDQUFDO1FBQ3pELE1BQU1HLGdCQUFnQixBQUFDSCxjQUFjLElBQUs7UUFDMUM5SCxRQUFRQyxHQUFHLENBQUMsQ0FBQyxxQkFBcUIsRUFBRWdJLGNBQWNDLE9BQU8sQ0FBQyxJQUFJO1FBRTlELElBQUlILE9BQU8zTSxNQUFNLEdBQUcsR0FBRztZQUNyQjRFLFFBQVFPLEtBQUssQ0FBQyxDQUFDLHFCQUFxQixFQUFFd0gsT0FBTzNNLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDdkQsS0FBSyxNQUFNK00sT0FBT0osT0FBUTtnQkFDeEIvSCxRQUFRTyxLQUFLLENBQUMsQ0FBQyxJQUFJLEVBQUU0SCxLQUFLO1lBQzVCO1FBQ0Y7UUFDQTtJQUNGO0lBRUEsb0JBQW9CO0lBQ3BCLE1BQU1uQixTQUFTck4sY0FBY3NOLEdBQUcsQ0FBQ3BLO0lBQ2pDLElBQUksQ0FBQ21LLFFBQVE7UUFDWGhILFFBQVFPLEtBQUssQ0FBQyxDQUFDLGtCQUFrQixFQUFFMUQsVUFBVTtRQUM3QztJQUNGO0lBRUEsTUFBTXVMLE9BQU9wTixNQUFNOEwsR0FBRyxDQUFDLGdCQUFnQixpQkFBaUI7SUFDeEQ5RyxRQUFRQyxHQUFHLENBQ1QsQ0FBQyxHQUFHLEVBQUVtSSxTQUFTLGlCQUFpQixpQkFBaUIsYUFBYSxzQkFBc0IsRUFBRXZMLFNBQVMsR0FBRyxDQUFDO0lBR3JHLElBQUk7UUFDRixNQUFNcUssZUFBZWhNLFFBQVFtTSxNQUFNLElBQUkvTixPQUFPakIsTUFBTSxDQUFDOE8sSUFBSSxFQUFFQztRQUMzRCxNQUFNQyxTQUNKSCxpQkFBaUIsUUFBUUEsaUJBQWlCLFFBQVFBLGlCQUFpQixPQUFPQSxlQUFlO1FBRTNGLE1BQU1JLFNBQVMsTUFBTU4sT0FBT08sYUFBYSxDQUFDO1lBQ3hDQyxrQkFBa0IsQ0FBQ3hNLE1BQU04TCxHQUFHLENBQUM7WUFDN0JXLFdBQVcsQ0FBQ3pNLE1BQU04TCxHQUFHLENBQUM7WUFDdEJPO1FBQ0Y7UUFFQXJILFFBQVFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsRUFBRXFILE9BQU9JLFVBQVUsQ0FBQyxhQUFhLENBQUM7UUFFeEQscUJBQXFCO1FBQ3JCLDREQUE0RDtRQUM1RCwwQkFBMEI7UUFDMUIsTUFBTU8sZ0JBQWdCLEFBQUNYLE9BQU9JLFVBQVUsR0FBRyxJQUFLO1FBQ2hEMUgsUUFBUUMsR0FBRyxDQUFDLENBQUMscUJBQXFCLEVBQUVnSSxjQUFjQyxPQUFPLENBQUMsSUFBSTtJQUNoRSxFQUFFLE9BQU8zSCxPQUFPO1FBQ2QsSUFBSUEsaUJBQWlCb0MsT0FBTztZQUMxQixJQUFJcEMsTUFBTTlELE9BQU8sQ0FBQ2xCLFFBQVEsQ0FBQyxzQkFBc0I7Z0JBQy9DeUUsUUFBUU8sS0FBSyxDQUFDLENBQUMsSUFBSSxFQUFFQSxNQUFNOUQsT0FBTyxFQUFFO2dCQUNwQ3VELFFBQVFPLEtBQUssQ0FBQyxDQUFDLHVDQUF1QyxDQUFDO2dCQUN2RFAsUUFBUU8sS0FBSyxDQUFDLENBQUMsd0RBQXdELENBQUM7Z0JBQ3hFUCxRQUFRTyxLQUFLLENBQ1gsQ0FBQyw4RUFBOEUsQ0FBQztZQUVwRixPQUFPLElBQUlBLE1BQU05RCxPQUFPLENBQUNsQixRQUFRLENBQUMsZUFBZTtnQkFDL0N5RSxRQUFRTyxLQUFLLENBQUMsQ0FBQyxJQUFJLEVBQUVBLE1BQU05RCxPQUFPLEVBQUU7Z0JBQ3BDdUQsUUFBUU8sS0FBSyxDQUFDLENBQUMsd0NBQXdDLENBQUM7WUFDMUQsT0FBTztnQkFDTFAsUUFBUU8sS0FBSyxDQUFDLENBQUMsOEJBQThCLEVBQUVBLE1BQU05RCxPQUFPLEVBQUU7WUFDaEU7UUFDRixPQUFPO1lBQ0x1RCxRQUFRTyxLQUFLLENBQUMsQ0FBQywyQ0FBMkMsQ0FBQztRQUM3RDtJQUNGO0FBQ0Y7QUFFQSxlQUFlM0MsZUFBZWYsUUFBZ0I7SUFDNUMsTUFBTXZELE9BQU93RixNQUFNLENBQUN1SixnQkFBZ0IsQ0FBQyxTQUFTO1FBQzVDeEw7SUFDRjtBQUNGO0FBRUEsZUFBZWdCLG9CQUFvQmhCLFFBQWdCO0lBQ2pELE1BQU12RCxPQUFPd0YsTUFBTSxDQUFDdUosZ0JBQWdCLENBQUMsY0FBYztRQUNqRHhMO0lBQ0Y7QUFDRjtBQUVBOzs7OztDQUtDLEdBQ0QsZUFBZTBCO0lBQ2IsTUFBTSxFQUFFdkQsS0FBSyxFQUFFLEdBQUdGO0lBQ2xCLE1BQU13TixXQUFXdE4sTUFBTThMLEdBQUcsQ0FBQztJQUUzQix1REFBdUQ7SUFDdkQsNkRBQTZEO0lBQzdELHVEQUF1RDtJQUN2RCxNQUFNeUIsYUFBYXBQLEtBQUtpRyxPQUFPLENBQUMsWUFBWWtDLE9BQU8sRUFBRSxNQUFNLE1BQU0sT0FBTztJQUN4RSxNQUFNa0gsa0JBQWtCclAsS0FBS29HLElBQUksQ0FBQ2dKLFlBQVk7SUFDOUMsTUFBTUUsaUJBQWlCdFAsS0FBS29HLElBQUksQ0FBQ2dKLFlBQVk7SUFFN0MsSUFBSSxDQUFFLE1BQU1uTyxPQUFPb08sa0JBQW1CO1FBQ3BDeEksUUFBUUMsR0FBRyxDQUFDOUgsTUFBTStILE1BQU0sQ0FBQztRQUN6QjtJQUNGO0lBRUEsSUFBSW9JLFVBQVU7UUFDWixNQUFNSSxlQUFldlAsS0FBS29HLElBQUksQ0FBQ3JHLEdBQUd5UCxPQUFPLElBQUksWUFBWUgsaUJBQWlCQyxnQkFBZ0I7WUFDeEZHLFlBQVk7WUFDWkMsc0JBQXNCO1lBQ3RCUCxVQUFVO1FBQ1o7UUFDQXRJLFFBQVFDLEdBQUcsQ0FBQzlILE1BQU0yUSxJQUFJLENBQUMsQ0FBQyxtREFBbUQsQ0FBQztRQUM1RTlJLFFBQVFDLEdBQUcsQ0FBQzlILE1BQU1rSixHQUFHLENBQUMsQ0FBQyx5REFBeUQsQ0FBQztRQUNqRnJCLFFBQVFDLEdBQUcsQ0FDVDlILE1BQU1rSixHQUFHLENBQ1AsQ0FBQyxrRkFBa0YsQ0FBQztJQUcxRixPQUFPO1FBQ0wsTUFBTTBILGdCQUFnQixNQUFNQztRQUM1QixNQUFNQyxZQUFZOVAsS0FBS29HLElBQUksQ0FBQ3dKLGVBQWU7UUFDM0MsTUFBTUwsZUFBZU8sV0FBV1QsaUJBQWlCQyxnQkFBZ0I7WUFDL0RHLFlBQVk7WUFDWkMsc0JBQXNCO1lBQ3RCTjtRQUNGO0lBQ0Y7QUFDRjtBQUVBOztDQUVDLEdBQ0QsZUFBZUcsZUFDYk8sU0FBaUIsRUFDakJULGVBQXVCLEVBQ3ZCQyxjQUFzQixFQUN0QnZOLE9BS0M7SUFFRCxNQUFNZ08sa0JBQWtCL1AsS0FBS29HLElBQUksQ0FBQzBKLFdBQVcsVUFBVTtJQUV2RCwyQkFBMkI7SUFDM0Isb0RBQW9EO0lBQ3BELElBQUk7UUFDRixNQUFNcFEsR0FBR3FRLGlCQUFpQjtZQUFFcEQsV0FBVztZQUFNcUQsT0FBTztRQUFLO0lBQzNELEVBQUUsT0FBTTtJQUNOLGFBQWE7SUFDZjtJQUVBLE1BQU16USxNQUFNUyxLQUFLbUksT0FBTyxDQUFDNEgsa0JBQWtCO1FBQUVwRCxXQUFXO0lBQUs7SUFFN0QsSUFBSTVLLFFBQVEwTixVQUFVLEVBQUU7UUFDdEIsSUFBSTtZQUNGLE1BQU05UCxRQUFRMFAsaUJBQWlCVSxpQkFBaUI7WUFDaERsSixRQUFRQyxHQUFHLENBQUM5SCxNQUFNaVIsS0FBSyxDQUFDLENBQUMseUJBQXlCLENBQUM7UUFDckQsRUFBRSxPQUFPN0ksT0FBTztZQUNkUCxRQUFRQyxHQUFHLENBQ1Q5SCxNQUFNK0gsTUFBTSxDQUFDLENBQUMsa0JBQWtCLEVBQUVLLGlCQUFpQm9DLFFBQVFwQyxNQUFNOUQsT0FBTyxHQUFHNE0sT0FBTzlJLFFBQVE7WUFFNUZQLFFBQVFDLEdBQUcsQ0FBQzlILE1BQU0rSCxNQUFNLENBQUMsQ0FBQyx5QkFBeUIsQ0FBQztZQUNwRCxNQUFNb0osV0FBV2QsaUJBQWlCVTtRQUNwQztJQUNGLE9BQU87UUFDTCxNQUFNSSxXQUFXZCxpQkFBaUJVO0lBQ3BDO0lBRUEsb0NBQW9DO0lBQ3BDLElBQUloTyxRQUFRMk4sb0JBQW9CLElBQUkzTixRQUFRcU4sVUFBVSxFQUFFO1FBQ3RELE1BQU1nQixtQkFBbUJwUSxLQUFLb0csSUFBSSxDQUFDckUsUUFBUXFOLFVBQVUsRUFBRTtRQUN2RCxNQUFNaUIsbUJBQW1CclEsS0FBS29HLElBQUksQ0FBQzBKLFdBQVcsVUFBVTtRQUV4RCxJQUFJLE1BQU03TyxPQUFPbVAsbUJBQW1CO1lBQ2xDLElBQUksQ0FBRSxNQUFNblAsT0FBT29QLG1CQUFvQjtnQkFDckMsSUFBSTtvQkFDRixNQUFNL1EsR0FBRzhRLGtCQUFrQkMsa0JBQWtCO3dCQUFFMUQsV0FBVztvQkFBSztvQkFDL0Q5RixRQUFRQyxHQUFHLENBQUM5SCxNQUFNaVIsS0FBSyxDQUFDLENBQUMsK0JBQStCLENBQUM7Z0JBQzNELEVBQUUsT0FBTzdJLE9BQU87b0JBQ2RQLFFBQVFPLEtBQUssQ0FDWHBJLE1BQU1xSSxHQUFHLENBQ1AsQ0FBQywwQ0FBMEMsRUFBRUQsaUJBQWlCb0MsUUFBUXBDLE1BQU05RCxPQUFPLEdBQUc0TSxPQUFPOUksUUFBUTtnQkFHM0c7WUFDRixPQUFPO2dCQUNMUCxRQUFRQyxHQUFHLENBQUM5SCxNQUFNa0osR0FBRyxDQUFDLENBQUMsNkNBQTZDLENBQUM7WUFDdkU7UUFDRjtJQUNGO0lBRUEsb0JBQW9CO0lBQ3BCLElBQUksTUFBTWpILE9BQU9xTyxpQkFBaUI7UUFDaEMsSUFBSTtZQUNGLE1BQU1nQixpQkFBaUJ0USxLQUFLb0csSUFBSSxDQUFDMEosV0FBVztZQUM1QyxNQUFNUyxhQUFhLE1BQU05USxTQUFTNlAsZ0JBQWdCO1lBQ2xELGdDQUFnQztZQUNoQyxNQUFNa0IsZ0JBQWdCek8sUUFBUW9OLFFBQVEsR0FDbENvQixXQUFXRSxVQUFVLENBQUMsMEJBQTBCLDhCQUNoREY7WUFFSixJQUFJLE1BQU10UCxPQUFPcVAsaUJBQWlCO2dCQUNoQyxNQUFNSSxnQkFBZ0IsTUFBTWpSLFNBQVM2USxnQkFBZ0I7Z0JBQ3JELE1BQU1LLGNBQWM7Z0JBQ3BCLE1BQU1DLFlBQVk7Z0JBQ2xCLElBQUlGLGNBQWN0TyxRQUFRLENBQUN1TyxnQkFBZ0JELGNBQWN0TyxRQUFRLENBQUN3TyxZQUFZO29CQUM1RSxNQUFNQyxXQUFXSCxjQUFjL0ksT0FBTyxDQUFDZ0o7b0JBQ3ZDLE1BQU1HLFNBQVNKLGNBQWMvSSxPQUFPLENBQUNpSjtvQkFFckMsSUFBSUMsYUFBYSxDQUFDLEtBQUtDLFdBQVcsQ0FBQyxLQUFLRCxXQUFXQyxRQUFRO3dCQUN6RCxNQUFNQyxTQUFTTCxjQUFjTSxTQUFTLENBQUMsR0FBR0g7d0JBQzFDLE1BQU1JLFFBQVFQLGNBQWNNLFNBQVMsQ0FBQ0YsU0FBU0YsVUFBVTNPLE1BQU07d0JBQy9ELE1BQU1pUCxhQUFhLEdBQUdILFNBQVNKLFlBQVksRUFBRSxFQUFFSCxjQUFjLEVBQUUsRUFBRUksWUFBWUssT0FBTzt3QkFDcEYsTUFBTXJSLFVBQVUwUSxnQkFBZ0JZO3dCQUNoQ3JLLFFBQVFDLEdBQUcsQ0FBQzlILE1BQU1pUixLQUFLLENBQUMsQ0FBQyxtQ0FBbUMsQ0FBQztvQkFDL0QsT0FBTzt3QkFDTHBKLFFBQVFDLEdBQUcsQ0FBQzlILE1BQU0rSCxNQUFNLENBQUMsQ0FBQyw2Q0FBNkMsQ0FBQztvQkFDMUU7Z0JBQ0YsT0FBTztvQkFDTCx3Q0FBd0M7b0JBQ3hDLE1BQU1vSyxXQUFXLEdBQUdULGNBQWNVLE9BQU8sR0FBRywyQkFBMkIsRUFBRVosY0FBYyx1QkFBdUIsQ0FBQztvQkFDL0csTUFBTTVRLFVBQVUwUSxnQkFBZ0JhO29CQUNoQ3RLLFFBQVFDLEdBQUcsQ0FBQzlILE1BQU1pUixLQUFLLENBQUMsQ0FBQyw2Q0FBNkMsQ0FBQztnQkFDekU7WUFDRixPQUFPO2dCQUNMLE1BQU1vQixjQUFjLENBQUMsdUJBQXVCLEVBQUViLGNBQWMsdUJBQXVCLENBQUM7Z0JBQ3BGLE1BQU01USxVQUFVMFEsZ0JBQWdCZTtnQkFDaEN4SyxRQUFRQyxHQUFHLENBQUM5SCxNQUFNaVIsS0FBSyxDQUFDLENBQUMsbUJBQW1CLENBQUM7WUFDL0M7UUFDRixFQUFFLE9BQU83SSxPQUFPO1lBQ2RQLFFBQVFPLEtBQUssQ0FDWHBJLE1BQU1xSSxHQUFHLENBQ1AsQ0FBQyw4QkFBOEIsRUFBRUQsaUJBQWlCb0MsUUFBUXBDLE1BQU05RCxPQUFPLEdBQUc0TSxPQUFPOUksUUFBUTtRQUcvRjtJQUNGO0FBQ0Y7QUFFQSxlQUFlK0ksV0FBV21CLEdBQVcsRUFBRUMsSUFBWTtJQUNqRCxJQUFJO1FBQ0YsTUFBTWpTLEdBQUdnUyxLQUFLQyxNQUFNO1lBQUU1RSxXQUFXO1FBQUs7UUFDdEM5RixRQUFRQyxHQUFHLENBQUM5SCxNQUFNaVIsS0FBSyxDQUFDLENBQUMsZUFBZSxDQUFDO0lBQzNDLEVBQUUsT0FBT3VCLFdBQVc7UUFDbEIzSyxRQUFRTyxLQUFLLENBQ1hwSSxNQUFNcUksR0FBRyxDQUNQLENBQUMseUJBQXlCLEVBQUVtSyxxQkFBcUJoSSxRQUFRZ0ksVUFBVWxPLE9BQU8sR0FBRzRNLE9BQU9zQixZQUFZO1FBR3BHLE1BQU1BO0lBQ1I7QUFDRjtBQUVBOzs7Q0FHQyxHQUNELGVBQWVuTSxjQUFjaEMsSUFBWTtJQUN2QyxNQUFNdU0sZ0JBQWdCLE1BQU1DO0lBQzVCLE1BQU00QixXQUFXelIsS0FBS29HLElBQUksQ0FBQ3dKLGVBQWUsV0FBVyxVQUFVO0lBRS9ELDRCQUE0QjtJQUM1QixJQUFJLENBQUN2TSxRQUFRQSxLQUFLcU8sSUFBSSxPQUFPLElBQUk7UUFDL0I3SyxRQUFRTyxLQUFLLENBQUNwSSxNQUFNcUksR0FBRyxDQUFDO1FBQ3hCO0lBQ0Y7SUFFQSxJQUFJc0ssWUFBWXRPLElBQ2QsWUFBWTtLQUNYbUssT0FBTyxDQUFDLFFBQVEsSUFDakIsWUFBWTtLQUNYQSxPQUFPLENBQUMsVUFBVSxJQUNuQixvQkFBb0I7S0FDbkJBLE9BQU8sQ0FBQyxTQUFTLEdBQ2xCLG1CQUFtQjtLQUNsQkEsT0FBTyxDQUFDLGNBQWMsR0FDdkIsd0JBQXdCO0tBQ3ZCQSxPQUFPLENBQUMsc0JBQXNCLEdBQy9CLGVBQWU7S0FDZEEsT0FBTyxDQUFDLE9BQU8sSUFDaEIsOEJBQThCO0tBQzdCQSxPQUFPLENBQUMsc0JBQXNCO0lBRWpDLFFBQVE7SUFDUixNQUFNb0UsYUFBYTtJQUNuQixJQUFJRCxVQUFVMVAsTUFBTSxHQUFHMlAsWUFBWTtRQUNqQ0QsWUFBWUEsVUFBVVgsU0FBUyxDQUFDLEdBQUdZO1FBQ25DL0ssUUFBUUMsR0FBRyxDQUFDOUgsTUFBTStILE1BQU0sQ0FBQyxDQUFDLG9CQUFvQixFQUFFNkssV0FBVyxXQUFXLENBQUM7SUFDekU7SUFFQSxpQkFBaUI7SUFDakIsTUFBTUMsaUJBQWlCO1FBQ3JCO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO0tBQ0Q7SUFDRCxJQUFJQSxlQUFlelAsUUFBUSxDQUFDdVAsVUFBVUcsV0FBVyxLQUFLO1FBQ3BESCxZQUFZLENBQUMsTUFBTSxFQUFFQSxXQUFXO1FBQ2hDOUssUUFBUUMsR0FBRyxDQUFDOUgsTUFBTStILE1BQU0sQ0FBQyxDQUFDLGdEQUFnRCxDQUFDO0lBQzdFO0lBRUEsV0FBVztJQUNYLElBQUk0SyxjQUFjLElBQUk7UUFDcEI5SyxRQUFRTyxLQUFLLENBQUNwSSxNQUFNcUksR0FBRyxDQUFDO1FBQ3hCUixRQUFRQyxHQUFHLENBQUM5SCxNQUFNa0osR0FBRyxDQUFDLENBQUMsYUFBYSxFQUFFN0UsS0FBSyxDQUFDLENBQUM7UUFDN0M7SUFDRjtJQUVBLFFBQVE7SUFDUixJQUFJc08sY0FBY3RPLE1BQU07UUFDdEJ3RCxRQUFRQyxHQUFHLENBQUM5SCxNQUFNK0gsTUFBTSxDQUFDLENBQUMsbUJBQW1CLEVBQUUxRCxLQUFLLEtBQUssRUFBRXNPLFVBQVUsQ0FBQyxDQUFDO0lBQ3pFO0lBRUEsTUFBTUksV0FBVy9SLEtBQUtvRyxJQUFJLENBQUNxTCxVQUFVLEdBQUdFLFVBQVUsR0FBRyxDQUFDO0lBRXRELElBQUksTUFBTTFRLE9BQU84USxXQUFXO1FBQzFCbEwsUUFBUUMsR0FBRyxDQUFDOUgsTUFBTStILE1BQU0sQ0FBQyxDQUFDLE9BQU8sRUFBRTRLLFVBQVUsaUJBQWlCLENBQUM7UUFDL0Q7SUFDRjtJQUVBLE1BQU1wUyxNQUFNa1MsVUFBVTtRQUFFOUUsV0FBVztJQUFLO0lBRXhDLE1BQU1xRixXQUFXLENBQUM7TUFDZCxFQUFFTCxVQUFVOztZQUVOLEVBQUUsSUFBSXJKLE9BQU8ySixXQUFXLEdBQUd6UCxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQzs7OztFQUluRCxFQUFFbVAsVUFBVTs7Ozs7Ozs7Ozs7Ozs7O0FBZWQsQ0FBQztJQUVDLE1BQU0vUixVQUFVbVMsVUFBVUM7SUFDMUJuTCxRQUFRQyxHQUFHLENBQUM5SCxNQUFNaVIsS0FBSyxDQUFDLENBQUMsK0JBQStCLEVBQUUwQixVQUFVLEdBQUcsQ0FBQztBQUMxRTtBQUVBOzs7Ozs7Q0FNQyxHQUNELGVBQWVwTTtJQUNiLGtCQUFrQjtJQUNsQixNQUFNMk0sYUFBYWpTLFFBQVEyQixJQUFJLENBQUN1USxJQUFJLENBQUMsQ0FBQ2pRLE1BQVFBLElBQUlDLFVBQVUsQ0FBQztJQUM3RCxNQUFNaVEsVUFBZ0MsRUFBRTtJQUV4QyxJQUFJRixZQUFZO1FBQ2QsTUFBTUcsY0FBY0gsV0FBVzlQLFFBQVEsQ0FBQyxPQUNwQzhQLFdBQVcxUCxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FDeEJ2QyxRQUFRMkIsSUFBSSxDQUFDM0IsUUFBUTJCLElBQUksQ0FBQytGLE9BQU8sQ0FBQ3VLLGNBQWMsRUFBRTtRQUV0RCxJQUFJRyxhQUFhO1lBQ2YsTUFBTUMsWUFBWUQsWUFBWTdQLEtBQUssQ0FBQyxLQUFLaUIsR0FBRyxDQUFDLENBQUM4TyxJQUFNQSxFQUFFYixJQUFJO1lBRTFELEtBQUssTUFBTTdDLE1BQU15RCxVQUFXO2dCQUMxQixJQUFJaFMsZ0JBQWdCdU8sS0FBSztvQkFDdkJ1RCxRQUFRblAsSUFBSSxDQUFDNEw7Z0JBQ2YsT0FBTztvQkFDTGhJLFFBQVFDLEdBQUcsQ0FBQzlILE1BQU0rSCxNQUFNLENBQUMsQ0FBQyxrQkFBa0IsRUFBRThILElBQUk7b0JBQ2xEaEksUUFBUUMsR0FBRyxDQUFDOUgsTUFBTWtKLEdBQUcsQ0FBQyxDQUFDLHFCQUFxQixFQUFFM0gscUJBQXFCNkYsSUFBSSxDQUFDLE9BQU87Z0JBQ2pGO1lBQ0Y7UUFDRjtJQUNGO0lBRUFTLFFBQVFDLEdBQUcsQ0FBQzlILE1BQU0rSCxNQUFNLENBQUNPLElBQUksQ0FBQztJQUU5QixJQUFJOEssUUFBUW5RLE1BQU0sR0FBRyxHQUFHO1FBQ3RCNEUsUUFBUUMsR0FBRyxDQUFDOUgsTUFBTWtKLEdBQUcsQ0FBQyxDQUFDLFdBQVcsRUFBRWtLLFFBQVFoTSxJQUFJLENBQUMsT0FBTztJQUMxRDtJQUVBLE1BQU0vRiwyQkFBMkI7UUFBRStSO0lBQVE7QUFDN0M7QUFFQTs7Ozs7Q0FLQyxHQUNELGVBQWU1TTtJQUNicUIsUUFBUUMsR0FBRyxDQUFDOUgsTUFBTStILE1BQU0sQ0FBQ08sSUFBSSxDQUFDO0lBQzlCLE1BQU1sSDtJQUNOeUcsUUFBUUMsR0FBRyxDQUFDOUgsTUFBTXNJLElBQUksQ0FBQztBQUN6QjtBQUVBOzs7Q0FHQyxHQUNELGVBQWV1STtJQUNiLElBQUkyQyxNQUFNdlMsUUFBUW9HLEdBQUc7SUFFckIsTUFBT21NLFFBQVF4UyxLQUFLbUksT0FBTyxDQUFDcUssS0FBTTtRQUNoQywwREFBMEQ7UUFDMUQsSUFBSSxNQUFNdlIsT0FBT2pCLEtBQUtvRyxJQUFJLENBQUNvTSxLQUFLLHlCQUF5QjtZQUN2RCxPQUFPQTtRQUNUO1FBRUEsNkNBQTZDO1FBQzdDLElBQUksTUFBTXZSLE9BQU9qQixLQUFLb0csSUFBSSxDQUFDb00sS0FBSyxlQUFlO1lBQzdDLE9BQU9BO1FBQ1Q7UUFFQSwwQ0FBMEM7UUFDMUMsTUFBTUMsY0FBY3pTLEtBQUtvRyxJQUFJLENBQUNvTSxLQUFLO1FBQ25DLElBQUksTUFBTXZSLE9BQU93UixjQUFjO1lBQzdCLElBQUk7Z0JBQ0YsTUFBTUMsY0FBY0MsS0FBS0MsS0FBSyxDQUFDLE1BQU1uVCxTQUFTZ1QsYUFBYTtnQkFDM0QsSUFBSUMsWUFBWUcsVUFBVSxFQUFFO29CQUMxQixPQUFPTDtnQkFDVDtZQUNGLEVBQUUsT0FBTTtZQUNOLFlBQVk7WUFDZDtRQUNGO1FBQ0FBLE1BQU14UyxLQUFLbUksT0FBTyxDQUFDcUs7SUFDckI7SUFFQSx1QkFBdUI7SUFDdkIsT0FBT3JSO0FBQ1QifQ==
1273
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9iaW4vY2xpLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjaGFsayBmcm9tIFwiY2hhbGtcIjtcbmltcG9ydCBkb3RlbnYgZnJvbSBcImRvdGVudlwiO1xuXG5kb3RlbnYuY29uZmlnKCk7XG5cbmltcG9ydCBhc3NlcnQgZnJvbSBcImFzc2VydFwiO1xuaW1wb3J0IHsgZXhlY1N5bmMsIHNwYXduIH0gZnJvbSBcImNoaWxkX3Byb2Nlc3NcIjtcbmltcG9ydCB7IGNwLCBta2RpciwgcmVhZGRpciwgcmVhZEZpbGUsIHJtLCBzeW1saW5rLCB3cml0ZUZpbGUgfSBmcm9tIFwiZnMvcHJvbWlzZXNcIjtcbmltcG9ydCBrbmV4LCB7IHR5cGUgS25leCB9IGZyb20gXCJrbmV4XCI7XG5pbXBvcnQgeyBjcmVhdGVSZXF1aXJlIH0gZnJvbSBcIm1vZHVsZVwiO1xuaW1wb3J0IG9zIGZyb20gXCJvc1wiO1xuaW1wb3J0IHBhdGggZnJvbSBcInBhdGhcIjtcbmltcG9ydCBwcm9jZXNzIGZyb20gXCJwcm9jZXNzXCI7XG5pbXBvcnQgeyB0c2ljbGkgfSBmcm9tIFwidHNpY2xpXCI7XG5pbXBvcnQgeyBTb25hbXUgfSBmcm9tIFwiLi4vYXBpXCI7XG5pbXBvcnQgeyBhZGRDb21wYW5pb25zVG9FbnRpdGllcywgZ2VuZXJhdGVCZXR0ZXJBdXRoRW50aXRpZXMgfSBmcm9tIFwiLi4vYXV0aC9hdXRoLWdlbmVyYXRvclwiO1xuaW1wb3J0IHtcbiAgdHlwZSBCZXR0ZXJBdXRoUGx1Z2luSWQsXG4gIGlzVmFsaWRQbHVnaW5JZCxcbiAgU1VQUE9SVEVEX1BMVUdJTl9JRFMsXG59IGZyb20gXCIuLi9hdXRoL3BsdWdpbnMvZW50aXR5LWRlZmluaXRpb25zXCI7XG5pbXBvcnQgdHlwZSB7IFNvbmFtdURCQ29uZmlnIH0gZnJvbSBcIi4uL2RhdGFiYXNlL2RiXCI7XG5pbXBvcnQgeyBFbnRpdHlNYW5hZ2VyIH0gZnJvbSBcIi4uL2VudGl0eS9lbnRpdHktbWFuYWdlclwiO1xuaW1wb3J0IHsgTWlncmF0b3IgfSBmcm9tIFwiLi4vbWlncmF0aW9uL21pZ3JhdG9yXCI7XG5pbXBvcnQgeyBGaXh0dXJlTWFuYWdlciB9IGZyb20gXCIuLi90ZXN0aW5nL2ZpeHR1cmUtbWFuYWdlclwiO1xuaW1wb3J0IHtcbiAgZXhlY1dpdGhMaW5lUHJlZml4LFxuICBwcmludEJ1aWxkU3VtbWFyeSxcbiAgcHJpbnRUYXNrRmFpbGVkLFxuICBwcmludFRhc2tIZWFkZXIsXG4gIHByaW50VGFza1N0YXJ0LFxuICBwcmludFRhc2tTdWNjZXNzLFxufSBmcm9tIFwiLi4vdXRpbHMvY29uc29sZS11dGlsXCI7XG5pbXBvcnQgeyBleGlzdHMgfSBmcm9tIFwiLi4vdXRpbHMvZnMtdXRpbHNcIjtcbmltcG9ydCB7IGZpbmRBcGlSb290UGF0aCwgZmluZEFwcFJvb3RQYXRoIH0gZnJvbSBcIi4uL3V0aWxzL3V0aWxzXCI7XG5pbXBvcnQgeyBBUElfQVJUSUZBQ1RTLCB0eXBlIEJ1aWxkQXJ0aWZhY3QsIFdFQl9BUlRJRkFDVFMgfSBmcm9tIFwiLi9idWlsZC1jb25maWdcIjtcbmltcG9ydCB7IGZpeHR1cmVFeHBsb3JlQ29tbWFuZCwgZml4dHVyZUZldGNoQ29tbWFuZCwgZml4dHVyZUdlbkNvbW1hbmQgfSBmcm9tIFwiLi9maXh0dXJlXCI7XG5pbXBvcnQgeyB0ZXN0Q29tbWFuZCB9IGZyb20gXCIuL3Rlc3QtY29tbWFuZFwiO1xuXG5sZXQgbWlncmF0b3I6IE1pZ3JhdG9yO1xuXG4vKipcbiAqIENMSSDsmLXshZjsnYQg7YyM7Iux7ZWY64qUIO2XrO2NvCDtlajsiJhcbiAqL1xuZnVuY3Rpb24gcGFyc2VDbGlPcHRpb25zKGFyZ3Y6IHN0cmluZ1tdID0gcHJvY2Vzcy5hcmd2KToge1xuICBmbGFnczogU2V0PHN0cmluZz47IC8vIC0tcmVnZW5lcmF0ZSwgLS1haSwgLS1uby1jb25lcyDrk7FcbiAgb3B0aW9uczogUmVjb3JkPHN0cmluZywgc3RyaW5nPjsgLy8gLS1sb2NhbGUga28g65OxXG59IHtcbiAgY29uc3QgZmxhZ3MgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgY29uc3Qgb3B0aW9uczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYXJndi5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGFyZyA9IGFyZ3ZbaV07XG4gICAgaWYgKCFhcmcuc3RhcnRzV2l0aChcIi0tXCIpKSBjb250aW51ZTtcblxuICAgIC8vIC0tb3B0aW9uPXZhbHVlIO2YleyLnVxuICAgIGlmIChhcmcuaW5jbHVkZXMoXCI9XCIpKSB7XG4gICAgICBjb25zdCBba2V5LCB2YWx1ZV0gPSBhcmcuc2xpY2UoMikuc3BsaXQoXCI9XCIpO1xuICAgICAgb3B0aW9uc1trZXldID0gdmFsdWU7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvLyAtLW9wdGlvbiB2YWx1ZSDtmJXsi53snbjsp4Ag7ZmV7J24XG4gICAgY29uc3QgbmV4dEFyZyA9IGFyZ3ZbaSArIDFdO1xuICAgIGlmIChuZXh0QXJnICYmICFuZXh0QXJnLnN0YXJ0c1dpdGgoXCItLVwiKSAmJiAhbmV4dEFyZy5zdGFydHNXaXRoKFwiLVwiKSkge1xuICAgICAgb3B0aW9uc1thcmcuc2xpY2UoMildID0gbmV4dEFyZztcbiAgICAgIGkrKzsgLy8g64uk7J2MIGFyZ+uKlCDqsJLsnbTrr4DroZwg7Iqk7YK1XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIC0tZmxhZyDtmJXsi51cbiAgICAgIGZsYWdzLmFkZChhcmcuc2xpY2UoMikpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7IGZsYWdzLCBvcHRpb25zIH07XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGJvb3RzdHJhcCgpIHtcbiAgY29uc3Qgbm90VG9Jbml0ID0gW1wiZGV2XCIsIFwiYnVpbGRcIiwgXCJzdGFydFwiLCBcInNraWxsc1wiLCBcInRlc3RcIl0uaW5jbHVkZXMocHJvY2Vzcy5hcmd2WzJdID8/IFwiXCIpO1xuICBpZiAoIW5vdFRvSW5pdCkge1xuICAgIGF3YWl0IFNvbmFtdS5pbml0KGZhbHNlLCBmYWxzZSk7XG4gIH1cblxuICB0cnkge1xuICAgIC8vIHRzaWNsaeuKlCDsoJXtmZXtlZwg66qF66C57Ja0IOunpOy5reunjCDsp4Dsm5DtlZjrr4DroZwsIC0t66GcIOyLnOyeke2VmOuKlCDsmLXshZjqs7wg6re4IOqwkuydhCDtlYTthLDrp4Htlanri4jri6QuXG4gICAgLy8g7Ji17IWYIO2MjOyLseydgCDqsIEgcnVubmVyIO2VqOyImOyXkOyEnCDsm5Drs7ggcHJvY2Vzcy5hcmd266W8IOyCrOyaqe2VmOyXrCDsiJjtlontlanri4jri6QuXG4gICAgLy8gXCItLVwiKGJhcmUgZG91YmxlIGRhc2gp64qUIHBhc3N0aHJvdWdoIOq1rOu2hOyekOydtOuvgOuhnCwg6re4IOuSpOydmCDrqqjrk6Ag7J247J6Q64+EIOygnOyZuO2VqeuLiOuLpC5cbiAgICBjb25zdCBmaWx0ZXJlZEFyZ3Y6IHN0cmluZ1tdID0gW107XG4gICAgbGV0IHNraXBOZXh0ID0gZmFsc2U7XG4gICAgbGV0IGFmdGVyRG91YmxlRGFzaCA9IGZhbHNlO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcHJvY2Vzcy5hcmd2Lmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBhcmcgPSBwcm9jZXNzLmFyZ3ZbaV07XG4gICAgICBpZiAoYXJnID09PSBcIi0tXCIpIHtcbiAgICAgICAgYWZ0ZXJEb3VibGVEYXNoID0gdHJ1ZTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAoYWZ0ZXJEb3VibGVEYXNoKSBjb250aW51ZTtcbiAgICAgIGlmIChza2lwTmV4dCkge1xuICAgICAgICBza2lwTmV4dCA9IGZhbHNlO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmIChhcmcuc3RhcnRzV2l0aChcIi0tXCIpKSB7XG4gICAgICAgIC8vIC0tb3B0aW9uPXZhbHVlIO2YleyLneydgCDsnbQgYXJn66eMIOyKpO2CtVxuICAgICAgICBpZiAoYXJnLmluY2x1ZGVzKFwiPVwiKSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIC8vIC0tb3B0aW9uIHZhbHVlIO2YleyLneyduOyngCDtmZXsnbg6IOuLpOydjCBhcmfqsIAgLS3roZwg7Iuc7J6R7ZWY7KeAIOyViuycvOuptCDqsJLsnbQg7J6I64qUIOqyg1xuICAgICAgICBjb25zdCBuZXh0QXJnID0gcHJvY2Vzcy5hcmd2W2kgKyAxXTtcbiAgICAgICAgaWYgKG5leHRBcmcgJiYgIW5leHRBcmcuc3RhcnRzV2l0aChcIi0tXCIpICYmICFuZXh0QXJnLnN0YXJ0c1dpdGgoXCItXCIpKSB7XG4gICAgICAgICAgc2tpcE5leHQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgZmlsdGVyZWRBcmd2LnB1c2goYXJnKTtcbiAgICB9XG5cbiAgICAvLyBidWlsZC9kZXYg66qF66C57Ja06rCAIOyEnOu4jOy7pOunqOuTnCDsl4bsnbQg7Zi47Lac65CgIOuVjCBcImFsbFwi7J2EIOq4sOuzuOqwkuycvOuhnCDstpTqsIDtlanri4jri6QuXG4gICAgLy8g7JiIOiBgc29uYW11IGJ1aWxkYCDihpIgYHNvbmFtdSBidWlsZCBhbGxgLCBgc29uYW11IGRldmAg4oaSIGBzb25hbXUgZGV2IGFsbGBcbiAgICBjb25zdCBjbWQgPSBmaWx0ZXJlZEFyZ3ZbMl07XG4gICAgaWYgKChjbWQgPT09IFwiYnVpbGRcIiB8fCBjbWQgPT09IFwiZGV2XCIpICYmIGZpbHRlcmVkQXJndi5sZW5ndGggPT09IDMpIHtcbiAgICAgIGZpbHRlcmVkQXJndi5wdXNoKFwiYWxsXCIpO1xuICAgIH1cblxuICAgIC8vIHRlc3Qg7Luk66eo65Oc64qUIOqwgOuzgCDsnbjsnpAo7YyM7J2866qFLCAtLXBhdHRlcm4g65OxKeulvCDrsJvsnLzrr4DroZwgdHNpY2xp66W8IOyasO2ajO2VqeuLiOuLpC5cbiAgICBpZiAoY21kID09PSBcInRlc3RcIikge1xuICAgICAgcmV0dXJuIHRlc3RDb21tYW5kKCk7XG4gICAgfVxuXG4gICAgYXdhaXQgdHNpY2xpKGZpbHRlcmVkQXJndiwge1xuICAgICAgdHlwZXM6IHtcbiAgICAgICAgXCIjZW50aXR5SWRcIjoge1xuICAgICAgICAgIHR5cGU6IFwiYXV0b2NvbXBsZXRlXCIsXG4gICAgICAgICAgbmFtZTogXCIjZW50aXR5SWRcIixcbiAgICAgICAgICBtZXNzYWdlOiBcIlBsZWFzZSBpbnB1dCAjZW50aXR5SWRcIixcbiAgICAgICAgICBjaG9pY2VzOiBFbnRpdHlNYW5hZ2VyLmdldEFsbFBhcmVudElkcygpLm1hcCgoZW50aXR5SWQpID0+ICh7XG4gICAgICAgICAgICB0aXRsZTogZW50aXR5SWQsXG4gICAgICAgICAgICB2YWx1ZTogZW50aXR5SWQsXG4gICAgICAgICAgfSkpLFxuICAgICAgICB9LFxuICAgICAgICBcIiNyZWNvcmRJZHNcIjogXCJudW1iZXJbXVwiLFxuICAgICAgICBcIiNuYW1lXCI6IFwic3RyaW5nXCIsXG4gICAgICAgIFwiI3RhcmdldHNcIjoge1xuICAgICAgICAgIHR5cGU6IFwibXVsdGlzZWxlY3RcIixcbiAgICAgICAgICBuYW1lOiBcIiN0YXJnZXRzXCIsXG4gICAgICAgICAgbWVzc2FnZTogXCJQbGVhc2UgaW5wdXQgI3RhcmdldHNcIixcbiAgICAgICAgICBjaG9pY2VzOiBbXG4gICAgICAgICAgICB7IHRpdGxlOiBcIkRldmVsb3BtZW50XCIsIHZhbHVlOiBcImRldmVsb3BtZW50X21hc3RlclwiIH0sXG4gICAgICAgICAgICB7IHRpdGxlOiBcIlByb2R1Y3Rpb25cIiwgdmFsdWU6IFwicHJvZHVjdGlvbl9tYXN0ZXJcIiB9LFxuICAgICAgICAgICAgeyB0aXRsZTogXCJGaXh0dXJlXCIsIHZhbHVlOiBcImZpeHR1cmVcIiB9LFxuICAgICAgICAgICAgeyB0aXRsZTogXCJUZXN0XCIsIHZhbHVlOiBcInRlc3RcIiB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgYXJnczogW1xuICAgICAgICBbXCJmaXh0dXJlXCIsIFwiaW5pdFwiXSxcbiAgICAgICAgW1wiZml4dHVyZVwiLCBcImltcG9ydFwiLCBcIiNlbnRpdHlJZFwiLCBcIiNyZWNvcmRJZHNcIl0sXG4gICAgICAgIFtcImZpeHR1cmVcIiwgXCJzeW5jXCJdLFxuICAgICAgICBbXCJmaXh0dXJlXCIsIFwiZ2VuXCJdLFxuICAgICAgICBbXCJmaXh0dXJlXCIsIFwiZmV0Y2hcIl0sXG4gICAgICAgIFtcImZpeHR1cmVcIiwgXCJleHBsb3JlXCJdLFxuICAgICAgICBbXCJtaWdyYXRlXCIsIFwicnVuXCJdLFxuICAgICAgICBbXCJtaWdyYXRlXCIsIFwiYXBwbHlcIiwgXCIjdGFyZ2V0c1wiXSxcbiAgICAgICAgW1wibWlncmF0ZVwiLCBcInN0YXR1c1wiXSxcbiAgICAgICAgW1wic3R1YlwiLCBcInByYWN0aWNlXCIsIFwiI25hbWVcIl0sXG4gICAgICAgIFtcInN0dWJcIiwgXCJlbnRpdHlcIiwgXCIjbmFtZVwiXSxcbiAgICAgICAgW1wic2NhZmZvbGRcIiwgXCJtb2RlbFwiLCBcIiNlbnRpdHlJZFwiXSxcbiAgICAgICAgW1wic2NhZmZvbGRcIiwgXCJtb2RlbF90ZXN0XCIsIFwiI2VudGl0eUlkXCJdLFxuICAgICAgICBbXCJzY2FmZm9sZFwiLCBcInZpZXdfbGlzdFwiLCBcIiNlbnRpdHlJZFwiXSxcbiAgICAgICAgW1wic2NhZmZvbGRcIiwgXCJ2aWV3X2Zvcm1cIiwgXCIjZW50aXR5SWRcIl0sXG4gICAgICAgIFtcImNvbmVcIiwgXCJnZW5cIiwgXCIjZW50aXR5SWRcIl0sXG4gICAgICAgIFtcInN5bmNcIl0sXG4gICAgICAgIFtcImJ1aWxkXCIsIFwiYWxsXCJdLFxuICAgICAgICBbXCJidWlsZFwiLCBcImFwaVwiXSxcbiAgICAgICAgW1wiYnVpbGRcIiwgXCJ3ZWJcIl0sXG4gICAgICAgIFtcImRldlwiLCBcImFsbFwiXSxcbiAgICAgICAgW1wiZGV2XCIsIFwiYXBpXCJdLFxuICAgICAgICBbXCJkZXZcIiwgXCJ3ZWJcIl0sXG4gICAgICAgIFtcInN0YXJ0XCJdLFxuICAgICAgICBbXCJza2lsbHNcIiwgXCJzeW5jXCJdLFxuICAgICAgICBbXCJza2lsbHNcIiwgXCJjcmVhdGVcIiwgXCIjbmFtZVwiXSxcbiAgICAgICAgW1widGVzdFwiXSxcbiAgICAgICAgW1wiYXV0aFwiLCBcImdlbmVyYXRlXCJdLFxuICAgICAgICBbXCJhdXRoXCIsIFwiYWRkLWNvbXBhbmlvbnNcIl0sXG4gICAgICBdLFxuICAgICAgcnVubmVyczoge1xuICAgICAgICBtaWdyYXRlX3N0YXR1cyxcbiAgICAgICAgbWlncmF0ZV9ydW4sXG4gICAgICAgIG1pZ3JhdGVfYXBwbHksXG4gICAgICAgIGZpeHR1cmVfaW5pdCxcbiAgICAgICAgZml4dHVyZV9pbXBvcnQsXG4gICAgICAgIGZpeHR1cmVfc3luYyxcbiAgICAgICAgZml4dHVyZV9nZW4sXG4gICAgICAgIGZpeHR1cmVfZmV0Y2gsXG4gICAgICAgIGZpeHR1cmVfZXhwbG9yZSxcbiAgICAgICAgc3R1Yl9wcmFjdGljZSxcbiAgICAgICAgc3R1Yl9lbnRpdHksXG4gICAgICAgIHNjYWZmb2xkX21vZGVsLFxuICAgICAgICBzY2FmZm9sZF9tb2RlbF90ZXN0LFxuICAgICAgICAvLyBzY2FmZm9sZF92aWV3X2xpc3QsXG4gICAgICAgIC8vIHNjYWZmb2xkX3ZpZXdfZm9ybSxcbiAgICAgICAgY29uZV9nZW4sXG4gICAgICAgIHN5bmMsXG4gICAgICAgIGJ1aWxkX2FsbCxcbiAgICAgICAgYnVpbGRfYXBpLFxuICAgICAgICBidWlsZF93ZWIsXG4gICAgICAgIGRldl9hbGwsXG4gICAgICAgIGRldl9hcGksXG4gICAgICAgIGRldl93ZWIsXG4gICAgICAgIHN0YXJ0LFxuICAgICAgICBza2lsbHNfc3luYyxcbiAgICAgICAgc2tpbGxzX2NyZWF0ZSxcbiAgICAgICAgdGVzdDogdGVzdENvbW1hbmQsXG4gICAgICAgIGF1dGhfZ2VuZXJhdGUsXG4gICAgICAgIFwiYXV0aF9hZGQtY29tcGFuaW9uc1wiOiBhdXRoX2FkZF9jb21wYW5pb25zLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfSBmaW5hbGx5IHtcbiAgICBhd2FpdCBTb25hbXUuZGVzdHJveSgpO1xuICB9XG59XG5cbmJvb3RzdHJhcCgpLmZpbmFsbHkoYXN5bmMgKCkgPT4ge1xuICBhd2FpdCBGaXh0dXJlTWFuYWdlci5kZXN0cm95KCk7XG59KTtcblxuLyoqXG4gKiBwbnBtIHN5bmMg7ZWY66m0IOyLpO2WieuQmOuKlCDtlajsiJjsnoXri4jri6QuXG4gKiDtlITroZzsoJ3tirjrpbwg7Iux7YGs7ZWp64uI64ukLlxuICovXG5hc3luYyBmdW5jdGlvbiBzeW5jKCkge1xuICBhd2FpdCBTb25hbXUuc3luY2VyLnN5bmMoKTtcbn1cblxuLyoqXG4gKiBBUEkg6rCc67CcIOyEnOuyhOulvCDsi6TtlontlZjripQg6rO17Ya1IOuhnOyngeyeheuLiOuLpC5cbiAqIGRldl9hbGzqs7wgZGV2X2FwaeyXkOyEnCDqs7XsnKDtlanri4jri6QuXG4gKlxuICogVHlwZVNjcmlwdOulvCDrsJTroZwg7Iuk7ZaJ7ZWgIOyImCDsnojrj4TroZ0gQHNvbmFtdS1raXQvdHMtbG9hZGVy66W8LFxuICogSE1S7J2EIOyngOybkO2VmOq4sCDsnITtlbQgQHNvbmFtdS1raXQvaG1yLWhvb2vsnYQgaW1wb3J07ZWY66mwLFxuICog7IaM7Iqk66e1IOyngOybkOydhCDsnITtlbQgLS1lbmFibGUtc291cmNlLW1hcHMg7ZSM656Y6re466W8IO2PrO2VqO2VmOyXrCDsi6Ttlontlanri4jri6QuXG4gKlxuICog7J2065WMIEBzb25hbXUta2l0L3RzLWxvYWRlcuyZgCBAc29uYW11LWtpdC9obXItaG9va+uKlCBzb25hbXXqsIAg7J6Q7LK07KCB7Jy866GcIOqwgOyngOqzoCDsnojripQgZGVwZW5kZW5jeeyeheuLiOuLpC5cbiAqIOuYkO2VnCDsi6Ttlonsl5Ag7IKs7Jqp7ZWY64qUIEBzb25hbXUta2l0L2htci1ydW5uZXLrj4Qg66eI7LCs6rCA7KeA66GcIHNvbmFtdeqwgCDsnpDssrTsoIHsnLzroZwg6rCA7KeA6rOgIOyeiOuKlCBkZXBlbmRlbmN57J6F64uI64ukLlxuICog65Sw65287IScIOyCrOyaqeyekCDtlITroZzsoJ3tirjsl5DshJzripQg7J20IOyEuCDtjKjtgqTsp4Drpbwg7KeB7KCRIOyEpOy5mO2VoCDtlYTsmpTqsIAg7JeG7Iq164uI64ukLlxuICovXG5mdW5jdGlvbiBzcGF3bkFwaURldlNlcnZlcihvcHRpb25zPzogeyBleHRyYUVudj86IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gfSkge1xuICBjb25zdCBhcGlSb290ID0gZmluZEFwaVJvb3RQYXRoKCk7XG4gIGNvbnN0IGVudHJ5UG9pbnQgPSBcInNyYy9pbmRleC50c1wiO1xuXG4gIC8vIOydtCBzb25hbXUg7Yyo7YKk7KeA6rCAIGRlcGVuZGVuY2llc+uhnCDqsIDsp4Dqs6Ag7J6I64qUIEBzb25hbXUta2l0L2htci1ydW5uZXLsnZggYmluL3J1bi5qc+ulvCDsgqzsmqntlanri4jri6QuXG4gIC8vIOydtCDqsr3roZwoL2Jpbi9ydW4uanMp64qUIEBzb25hbXUta2l0L2htci1ydW5uZXLsnZggcGFja2FnZS5qc29u7J2YIGJpbiDtlYTrk5zsl5Ag66qF7Iuc65CY7Ja0IOyeiOuKlCDqt7jqsoPqs7wg6rCZ7Iq164uI64ukLlxuICBjb25zdCBob3RSdW5uZXJCaW5QYXRoID0gY3JlYXRlUmVxdWlyZShpbXBvcnQubWV0YS51cmwpLnJlc29sdmUoXG4gICAgXCJAc29uYW11LWtpdC9obXItcnVubmVyL2Jpbi9ydW4uanNcIixcbiAgKTtcblxuICBjb25zdCBzZXJ2ZXJQcm9jZXNzID0gc3Bhd24oXG4gICAgcHJvY2Vzcy5leGVjUGF0aCwgLy8gbm9kZVxuICAgIFtcbiAgICAgIGhvdFJ1bm5lckJpblBhdGgsIC8vIOydtOugh+qyjCDtlbTshJwgaG90LXJ1bm5lcuulvCDsi6TtlontlZjqtazsmpRcbiAgICAgIFwiLS1jbGVhci1zY3JlZW49ZmFsc2VcIiwgLy8g7J207ZWYIGhvdC1ydW5uZXLsl5Dqsowg64SY6rKo7KSEIOyduOyekOuTpOyeheuLiOuLpC5cbiAgICAgIFwiLS1ub2RlLWFyZ3M9LS1pbXBvcnQ9c29uYW11L3RzLWxvYWRlci1yZWdpc3RlclwiLCAvLyBUeXBlU2NyaXB0IOyEnO2PrO2KuOulvCDsnITtlZwg66Gc642ULFxuICAgICAgXCItLW5vZGUtYXJncz0tLWltcG9ydD1zb25hbXUvaG1yLWhvb2stcmVnaXN0ZXJcIiwgLy8gSE1S7J2EIOyngOybkO2VmOq4sCDsnITtlZwgaG9vayxcbiAgICAgIFwiLS1ub2RlLWFyZ3M9LS1lbmFibGUtc291cmNlLW1hcHNcIiwgLy8g6re466as6rOgIOyGjOyKpOuntSDsp4Dsm5DsnYQg7JyE7ZWcIO2UjOuemOq3uOyeheuLiOuLpC5cbiAgICAgIFwiLS1vbi1rZXk9cjpyZXN0YXJ0OlJlc3RhcnQgc2VydmVyXCIsIC8vIHIg64iE66W066m0IOyEnOuyhCDsnqzsi5zsnpHtlZjqsowg7ZW07KSY7JqULlxuICAgICAgXCItLW9uLWtleT1jOmNsZWFyOkNsZWFyIHNjcmVlblwiLCAvLyBjIOuIhOultOuptCDthLDrr7jrhJAg7ZmU66m07J2EIOyngOybjOykmOyalC5cbiAgICAgIGAtLW9uLWtleT1mOnNoZWxsKHJtICR7cGF0aC5qb2luKGFwaVJvb3QsIFwic29uYW11LmxvY2tcIil9KTpyZXN0YXJ0OkZvcmNlIHJlc3RhcnRgLCAvLyBmIOuIhOultOuptCBzb25hbXUubG9jayDtjIzsnbzsnYQg7KeA7Jqw6rOgIOyEnOuyhCDsnqzsi5zsnpHtlZjqsowg7ZW07KSY7JqULlxuXG4gICAgICBcIi0tb24ta2V5PWVudGVyOnNoZWxsKGVjaG8gaGkpOktleSBiaW5kaW5nIHRlc3RcIiwgLy8gZW50ZXLrpbwga2V566GcIOyTuCDsiJgg7J6I7J2M7J2EIOuztOydtOq4sCDsnITtlZwg7YWM7Iqk7Yq47J6F64uI64ukLlxuICAgICAgXCItLW9uLWtleT1jdHJsK2YgY3RybCtmOnNoZWxsKGdpdCBwdWxsICYmIHBucG0gaW5zdGFsbCAmJiBwbnBtIC0tZmlsdGVyIHNvbmFtdSBidWlsZCAmJiBlY2hvICdTb25hbXUgaXMgbm93IHVwLXRvLWRhdGUhJyk6cmVzdGFydDpQdWxsICYgaW5zdGFsbCAmIGJ1aWxkICYgcmVzdGFydFwiLCAvLyBtb2RpZmllcuyZgOydmCDsobDtlaksIOq3uOumrOqzoCDrkZAg6rCc7J2YIGNob3Jk66W8IOyCrOyaqe2VoCDsiJgg7J6I7J2M7J2EIOuztOydtOq4sCDsnITtlZwg7YWM7Iqk7Yq47J6F64uI64ukLlxuICAgICAgZW50cnlQb2ludCwgLy8g66eI7KeA66eJ7Jy866GcIOyLpOygnCDsi6TtlontlaAg7Iqk7YGs66a97Yq47J2YIOqyveuhnOulvCDrhJjqsqjspI3ri4jri6QuXG4gICAgXSxcbiAgICB7XG4gICAgICBjd2Q6IGFwaVJvb3QsXG4gICAgICBzdGRpbzogXCJpbmhlcml0XCIsXG4gICAgICBlbnY6IHtcbiAgICAgICAgLi4ucHJvY2Vzcy5lbnYsXG4gICAgICAgIE5PREVfRU5WOiBcImRldmVsb3BtZW50XCIsXG4gICAgICAgIEhPVDogXCJ5ZXNcIiwgLy8g7JaY6rCAIOyeiOyWtOyVvCBITVLsnbQg7Zmc7ISx7ZmU65Cp64uI64ukLlxuICAgICAgICBBUElfUk9PVF9QQVRIOiBhcGlSb290LCAvLyDsnbQg6rK966Gc6rCAIGhtci1ob29r7J2YIOujqO2KuCDrlJTroInthqDrpqzqsIAg65Cp64uI64ukLlxuICAgICAgICAuLi5vcHRpb25zPy5leHRyYUVudixcbiAgICAgIH0sXG4gICAgfSxcbiAgKTtcblxuICAvLyDsooXro4wg7LKY66asXG4gIGNvbnN0IGNsZWFudXAgPSAoKSA9PiB7XG4gICAgY29uc29sZS5sb2coY2hhbGsueWVsbG93KFwiXFxuXFxu8J+RiyBTaHV0dGluZyBkb3duLi4uXCIpKTtcbiAgICBzZXJ2ZXJQcm9jZXNzLmtpbGwoXCJTSUdURVJNXCIpO1xuICAgIHByb2Nlc3MuZXhpdCgwKTtcbiAgfTtcblxuICBwcm9jZXNzLm9uKFwiU0lHSU5UXCIsIGNsZWFudXApO1xuICBwcm9jZXNzLm9uKFwiU0lHVEVSTVwiLCBjbGVhbnVwKTtcblxuICBzZXJ2ZXJQcm9jZXNzLm9uKFwiZXhpdFwiLCAoY29kZSkgPT4ge1xuICAgIGlmIChjb2RlICE9PSAwKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGNoYWxrLnJlZChgU2VydmVyIGV4aXRlZCB3aXRoIGNvZGUgJHtjb2RlfWApKTtcbiAgICAgIHByb2Nlc3MuZXhpdChjb2RlIHx8IDEpO1xuICAgIH1cbiAgfSk7XG59XG5cbi8qKlxuICogcG5wbSBkZXYgLyBwbnBtIGRldiBhbGwg7ZWY66m0IOyLpO2WieuQmOuKlCDtlajsiJjsnoXri4jri6QuXG4gKiDtlITroZzsoJ3tirjsl5Ag64yA7ZW0IEhNUiDsp4Dsm5DtlZjripQg6rCc67CcIOyEnOuyhOulvCDrnYTsm4zspI3ri4jri6QuXG4gKlxuICogU29uYW11LmluaXQg7JeG7J20IO2YuOy2nOuQoCDqsoPsnYQg7IOB7KCV7ZWY7JesIOq1rO2YhOuQmOyXiOyKteuLiOuLpC5cbiAqL1xuZnVuY3Rpb24gZGV2X2FsbCgpIHtcbiAgY29uc29sZS5sb2coY2hhbGsueWVsbG93LmJvbGQoXCJTdGFydGluZyBTb25hbXUgZGV2IHNlcnZlci4uLlxcblwiKSk7XG4gIHNwYXduQXBpRGV2U2VydmVyKCk7XG59XG5cbi8qKlxuICogcG5wbSBkZXYgYXBpIO2VmOuptCDsi6TtlonrkJjripQg7ZWo7IiY7J6F64uI64ukLlxuICogQVBJIOyghOyaqSDqsJzrsJwg7ISc67KE66W8IOudhOybgeuLiOuLpC5cbiAqIGRldl9hbGzqs7wg6rGw7J2YIOuPmeydvO2VmOuQmCwg7Ya17ZWpIOybuSDshJzrsoTrpbwg67mE7Zmc7ISx7ZmU7ZWp64uI64ukLlxuICpcbiAqIFNvbmFtdS5pbml0IOyXhuydtCDtmLjstpzrkKAg6rKD7J2EIOyDgeygle2VmOyXrCDqtaztmITrkJjsl4jsirXri4jri6QuXG4gKi9cbmZ1bmN0aW9uIGRldl9hcGkoKSB7XG4gIGNvbnNvbGUubG9nKGNoYWxrLnllbGxvdy5ib2xkKFwiU3RhcnRpbmcgU29uYW11IEFQSS1vbmx5IGRldiBzZXJ2ZXIuLi5cXG5cIikpO1xuICBzcGF3bkFwaURldlNlcnZlcih7XG4gICAgZXh0cmFFbnY6IHsgU09OQU1VX0RJU0FCTEVfSU5URUdSQVRFRF9XRUI6IFwieWVzXCIgfSxcbiAgfSk7XG59XG5cbi8qKlxuICogcG5wbSBkZXYgd2ViIO2VmOuptCDsi6TtlonrkJjripQg7ZWo7IiY7J6F64uI64ukLlxuICogVml0ZSDqsJzrsJwg7ISc67KE66W8IOuLqOuPheycvOuhnCDsi6Ttlontlanri4jri6QuXG4gKiAtLSDrkqTsnZgg7J247J6Q64qUIFZpdGXsl5Ag6re464yA66GcIOyghOuLrOuQqeuLiOuLpC5cbiAqXG4gKiBTb25hbXUuaW5pdCDsl4bsnbQg7Zi47Lac65CgIOqyg+ydhCDsg4HsoJXtlZjsl6wg6rWs7ZiE65CY7JeI7Iq164uI64ukLlxuICovXG5hc3luYyBmdW5jdGlvbiBkZXZfd2ViKCkge1xuICBjb25zdCBhcHBSb290ID0gZmluZEFwcFJvb3RQYXRoKCk7XG4gIGNvbnN0IHdlYlBhdGggPSBwYXRoLmpvaW4oYXBwUm9vdCwgXCJ3ZWJcIik7XG5cbiAgaWYgKCEoYXdhaXQgZXhpc3RzKHdlYlBhdGgpKSkge1xuICAgIGNvbnNvbGUuZXJyb3IoYHdlYiDrlJTroInthqDrpqzrpbwg7LC+7J2EIOyImCDsl4bsirXri4jri6Q6ICR7d2ViUGF0aH1gKTtcbiAgICBwcm9jZXNzLmV4aXQoMSk7XG4gIH1cblxuICAvLyAtLSDrkqTsnZgg7J247J6QIOy2lOy2nFxuICBjb25zdCBkb3VibGVEYXNoSW5kZXggPSBwcm9jZXNzLmFyZ3YuaW5kZXhPZihcIi0tXCIpO1xuICBjb25zdCBwYXNzdGhyb3VnaEFyZ3MgPSBkb3VibGVEYXNoSW5kZXggIT09IC0xID8gcHJvY2Vzcy5hcmd2LnNsaWNlKGRvdWJsZURhc2hJbmRleCArIDEpIDogW107XG5cbiAgY29uc3Qgdml0ZUFyZ3MgPSBbXCJleGVjXCIsIFwidml0ZVwiLCAuLi5wYXNzdGhyb3VnaEFyZ3NdO1xuXG4gIGNvbnNvbGUubG9nKGNoYWxrLnllbGxvdy5ib2xkKFwiU3RhcnRpbmcgVml0ZSBkZXYgc2VydmVyLi4uXFxuXCIpKTtcblxuICBjb25zdCB2aXRlUHJvY2VzcyA9IHNwYXduKFwicG5wbVwiLCB2aXRlQXJncywge1xuICAgIGN3ZDogd2ViUGF0aCxcbiAgICBzdGRpbzogXCJpbmhlcml0XCIsXG4gIH0pO1xuXG4gIHZpdGVQcm9jZXNzLm9uKFwiZXhpdFwiLCAoY29kZSkgPT4ge1xuICAgIHByb2Nlc3MuZXhpdChjb2RlID8/IDApO1xuICB9KTtcblxuICAvLyBTSUdJTlQvU0lHVEVSTSDsi5wgVml0ZSDtlITroZzshLjsiqTrpbwgZ3JhY2VmdWxseSDsooXro4ztlanri4jri6QuXG4gIGZvciAoY29uc3Qgc2lnbmFsIG9mIFtcIlNJR0lOVFwiLCBcIlNJR1RFUk1cIl0gYXMgY29uc3QpIHtcbiAgICBwcm9jZXNzLm9uKHNpZ25hbCwgKCkgPT4ge1xuICAgICAgdml0ZVByb2Nlc3Mua2lsbChzaWduYWwpO1xuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICogU1dDIOyEpOyglSDtjIzsnbwg6rK966Gc66W8IOqysOygle2VqeuLiOuLpC4gQVBJIOu5jOuTnChTV0Mp7JeQ7ISc66eMIOyCrOyaqeuQqeuLiOuLpC5cbiAqIO2UhOuhnOygne2KuCDro6jtirjsl5AgLnN3Y3Jj6rCAIOyeiOycvOuptCDqt7jqsoPsnYQsIOyXhuycvOuptCBzb25hbXUg6riw67O4IOyEpOygleydhCDsgqzsmqntlanri4jri6QuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHJlc29sdmVTd2NDb25maWdQYXRoKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGxldCBzd2NGaWxlUGF0aCA9IFwiLnN3Y3JjXCI7XG4gIHRyeSB7XG4gICAgaWYgKGF3YWl0IGV4aXN0cyhzd2NGaWxlUGF0aCkpIHtcbiAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmRpbShcIlVzaW5nIC5zd2NyYyBmcm9tIHByb2plY3Qgcm9vdC4uLlwiKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmRpbShcIlVzaW5nIGRlZmF1bHQgLnN3Y3JjIGZyb20gc29uYW11IHBhY2thZ2UuLi5cIikpO1xuICAgICAgc3djRmlsZVBhdGggPSBwYXRoLmpvaW4oaW1wb3J0Lm1ldGEuZGlybmFtZSwgXCIuLlwiLCBcIi4uXCIsIFwiLnN3Y3JjLnByb2plY3QtZGVmYXVsdFwiKTtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc29sZS5lcnJvcihjaGFsay5yZWQoXCJTZXR0aW5nIHVwIHN3YyBjb25maWcgZmlsZSBmYWlsZWQuXCIpLCBlcnJvcik7XG4gICAgcHJvY2Vzcy5leGl0KDEpO1xuICB9XG4gIHJldHVybiBzd2NGaWxlUGF0aDtcbn1cblxuLyoqXG4gKiBzb25hbXUgYnVpbGQgLyBzb25hbXUgYnVpbGQgYWxsIO2VmOuptCDsi6TtlonrkJjripQg7ZWo7IiY7J6F64uI64ukLlxuICogYnVpbGRfYXBpICsgYnVpbGRfd2Vi7J2YIO2VqeyEseyeheuLiOuLpC4gV2ViIOuUlOugie2GoOumrOqwgCDsl4bsnLzrqbQgV2ViIOu5jOuTnOulvCDsiqTtgrXtlanri4jri6QuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGJ1aWxkX2FsbCgpIHtcbiAgYXdhaXQgYnVpbGRfYXBpKCk7XG4gIGF3YWl0IGJ1aWxkX3dlYih7IHNraXBJZk1pc3Npbmc6IHRydWUgfSk7XG59XG5cbi8qKlxuICogcG5wbSBidWlsZCBhcGkg7ZWY66m0IOyLpO2WieuQmOuKlCDtlajsiJjsnoXri4jri6QuXG4gKiBBUEkg7ZSE66Gc7KCd7Yq466eMIOu5jOuTnO2VqeuLiOuLpC5cbiAqXG4gKiBTb25hbXUuaW5pdCDsl4bsnbQg7Zi47Lac65CgIOqyg+ydhCDsg4HsoJXtlZjsl6wg6rWs7ZiE65CY7JeI7Iq164uI64ukLlxuICovXG5hc3luYyBmdW5jdGlvbiBidWlsZF9hcGkoKSB7XG4gIGNvbnN0IGFwcFJvb3QgPSBmaW5kQXBwUm9vdFBhdGgoKTtcbiAgY29uc3Qgc3djRmlsZVBhdGggPSBhd2FpdCByZXNvbHZlU3djQ29uZmlnUGF0aCgpO1xuXG4gIGNvbnN0IGFwaVN0YXJ0ZWRBdCA9IERhdGUubm93KCk7XG4gIHRyeSB7XG4gICAgZm9yIChjb25zdCBhcnRpZmFjdCBvZiBBUElfQVJUSUZBQ1RTKSB7XG4gICAgICBjb25zdCBjd2QgPSBwYXRoLmpvaW4oYXBwUm9vdCwgYXJ0aWZhY3QucHJvamVjdFBhdGgpO1xuICAgICAgcHJpbnRUYXNrSGVhZGVyKGFydGlmYWN0Lm5hbWUsIGFydGlmYWN0LmRlc2NyaXB0aW9uLCBjd2QpO1xuXG4gICAgICBhd2FpdCBydW5CdWlsZFN0ZXBzKGFydGlmYWN0LCB7IGN3ZCwgYnVpbGRDb21tYW5kQXJnczogeyBjb25maWdGaWxlUGF0aDogc3djRmlsZVBhdGggfSB9KTtcbiAgICB9XG4gICAgcHJpbnRCdWlsZFN1bW1hcnkoXCJBUElcIiwgdHJ1ZSwgRGF0ZS5ub3coKSAtIGFwaVN0YXJ0ZWRBdCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBwcmludEJ1aWxkU3VtbWFyeShcIkFQSVwiLCBmYWxzZSwgRGF0ZS5ub3coKSAtIGFwaVN0YXJ0ZWRBdCk7XG4gICAgY29uc29sZS5lcnJvcihlKTtcbiAgICBwcm9jZXNzLmV4aXQoMSk7XG4gIH1cbn1cblxuLyoqXG4gKiBwbnBtIGJ1aWxkIHdlYiDtlZjrqbQg7Iuk7ZaJ65CY64qUIO2VqOyImOyeheuLiOuLpC5cbiAqIFdlYiDtlITroZzsoJ3tirjrp4wg67mM65Oc7ZWp64uI64ukLlxuICpcbiAqIFNvbmFtdS5pbml0IOyXhuydtCDtmLjstpzrkKAg6rKD7J2EIOyDgeygle2VmOyXrCDqtaztmITrkJjsl4jsirXri4jri6QuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGJ1aWxkX3dlYih7IHNraXBJZk1pc3NpbmcgPSBmYWxzZSB9ID0ge30pIHtcbiAgY29uc3QgYXBwUm9vdCA9IGZpbmRBcHBSb290UGF0aCgpO1xuICBjb25zdCB3ZWJQYXRoID0gcGF0aC5qb2luKGFwcFJvb3QsIFwid2ViXCIpO1xuXG4gIGlmICghKGF3YWl0IGV4aXN0cyh3ZWJQYXRoKSkpIHtcbiAgICBpZiAoc2tpcElmTWlzc2luZykge1xuICAgICAgY29uc29sZS5sb2coY2hhbGsuZ3JheShcIldlYiDrlJTroInthqDrpqzqsIAg7JeG7Jy866+A66GcIFdlYiDruYzrk5zrpbwg6rG064SI65yB64uI64ukLlwiKSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnNvbGUuZXJyb3IoYHdlYiDrlJTroInthqDrpqzrpbwg7LC+7J2EIOyImCDsl4bsirXri4jri6Q6ICR7d2ViUGF0aH1gKTtcbiAgICBwcm9jZXNzLmV4aXQoMSk7XG4gIH1cblxuICBjb25zdCB3ZWJTdGFydGVkQXQgPSBEYXRlLm5vdygpO1xuICB0cnkge1xuICAgIGZvciAoY29uc3QgYXJ0aWZhY3Qgb2YgV0VCX0FSVElGQUNUUykge1xuICAgICAgY29uc3QgY3dkID0gcGF0aC5qb2luKGFwcFJvb3QsIGFydGlmYWN0LnByb2plY3RQYXRoKTtcbiAgICAgIHByaW50VGFza0hlYWRlcihhcnRpZmFjdC5uYW1lLCBhcnRpZmFjdC5kZXNjcmlwdGlvbiwgY3dkKTtcblxuICAgICAgYXdhaXQgcnVuQnVpbGRTdGVwcyhhcnRpZmFjdCwgeyBjd2QsIGJ1aWxkQ29tbWFuZEFyZ3M6IHt9IH0pO1xuICAgIH1cbiAgICBwcmludEJ1aWxkU3VtbWFyeShcIldlYlwiLCB0cnVlLCBEYXRlLm5vdygpIC0gd2ViU3RhcnRlZEF0KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHByaW50QnVpbGRTdW1tYXJ5KFwiV2ViXCIsIGZhbHNlLCBEYXRlLm5vdygpIC0gd2ViU3RhcnRlZEF0KTtcbiAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgfVxufVxuXG4vKipcbiAqIHByZS1idWlsZCwgYnVpbGQsIHBvc3QtYnVpbGQg64uo6rOE66W8IOyInOywqOyggeycvOuhnCDsi6Ttlontlanri4jri6QuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHJ1bkJ1aWxkU3RlcHM8VD4oXG4gIGFydGlmYWN0OiBCdWlsZEFydGlmYWN0PFQ+LFxuICBvcHRpb25zOiB7IGN3ZDogc3RyaW5nOyBidWlsZENvbW1hbmRBcmdzOiBUIH0sXG4pIHtcbiAgY29uc3Qgc3RlcHMgPSBbXG4gICAgeyBuYW1lOiBcInByZS1idWlsZFwiLCBjbWQ6IGFydGlmYWN0LnByZUJ1aWxkQ29tbWFuZD8uKCkgfSxcbiAgICB7IG5hbWU6IFwiYnVpbGRcIiwgY21kOiBhcnRpZmFjdC5idWlsZENvbW1hbmQob3B0aW9ucy5idWlsZENvbW1hbmRBcmdzKSB9LFxuICAgIHsgbmFtZTogXCJwb3N0LWJ1aWxkXCIsIGNtZDogYXJ0aWZhY3QucG9zdEJ1aWxkQ29tbWFuZD8uKCkgfSxcbiAgXS5maWx0ZXIoKHN0ZXApID0+IHN0ZXAuY21kKTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IHN0ZXBzLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3Qgc3RlcCA9IHN0ZXBzW2ldO1xuICAgIGNvbnN0IGlzTGFzdCA9IGkgPT09IHN0ZXBzLmxlbmd0aCAtIDE7XG5cbiAgICB0cnkge1xuICAgICAgYXNzZXJ0KHN0ZXAuY21kKTtcbiAgICAgIHByaW50VGFza1N0YXJ0KHN0ZXAubmFtZSwgc3RlcC5jbWQsIGlzTGFzdCk7XG4gICAgICBhd2FpdCBleGVjV2l0aExpbmVQcmVmaXgoc3RlcC5jbWQsIHsgY3dkOiBvcHRpb25zLmN3ZCB9KTtcbiAgICAgIHByaW50VGFza1N1Y2Nlc3Moc3RlcC5uYW1lLCBpc0xhc3QpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHByaW50VGFza0ZhaWxlZChzdGVwLm5hbWUsIGlzTGFzdCk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7c3RlcC5uYW1lfSBmYWlsZWRgLCB7IGNhdXNlOiBlIH0pO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIHBucG0gc3RhcnQg7ZWY66m0IOyLpO2WieuQmOuKlCDtlajsiJjsnoXri4jri6QuXG4gKiDruYzrk5zrkJwg7ZSE66Gc7KCd7Yq466W8IOyLpO2Wie2VqeuLiOuLpC5cbiAqXG4gKiDruYzrk5zrkJwg6rKw6rO866y8KGRpc3Qg65SU66CJ7Yag66as7J2YIGluZGV4LmpzIOyXlO2KuOumrO2PrOyduO2KuCnsnbQg7JeG64uk66m0IOyLpO2WieydhCDspJHri6jtlanri4jri6QuXG4gKiDshozsiqTrp7Ug7KeA7JuQ6rO8IGRvdGVudiDsp4Dsm5DsnYQg7Y+s7ZWo7ZWY7JesIOyLpO2Wie2VqeuLiOuLpC5cbiAqXG4gKiBTb25hbXUuaW5pdCDsl4bsnbQg7Zi47Lac65CgIOqyg+ydhCDsg4HsoJXtlZjsl6wg6rWs7ZiE65CY7JeI7Iq164uI64ukLlxuICovXG5hc3luYyBmdW5jdGlvbiBzdGFydCgpIHtcbiAgY29uc3QgYXBpUm9vdCA9IGZpbmRBcGlSb290UGF0aCgpO1xuICBjb25zdCBlbnRyeVBvaW50ID0gXCJkaXN0L2luZGV4LmpzXCI7XG5cbiAgaWYgKCEoYXdhaXQgZXhpc3RzKGVudHJ5UG9pbnQpKSkge1xuICAgIGNvbnNvbGUubG9nKGNoYWxrLnJlZChgJHtlbnRyeVBvaW50fSBub3QgZm91bmQuIFBsZWFzZSBidWlsZCB5b3VyIHByb2plY3QgZmlyc3QuYCkpO1xuICAgIGNvbnNvbGUubG9nKGNoYWxrLmJsdWUoXCJSdW46IHBucG0gc29uYW11IGJ1aWxkXCIpKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCB7IHNwYXduIH0gPSBhd2FpdCBpbXBvcnQoXCJjaGlsZF9wcm9jZXNzXCIpO1xuICBjb25zdCBzZXJ2ZXJQcm9jZXNzID0gc3Bhd24oXG4gICAgcHJvY2Vzcy5leGVjUGF0aCxcbiAgICBbXCItLWVuYWJsZS1zb3VyY2UtbWFwc1wiLCBcIi1yXCIsIFwiZG90ZW52L2NvbmZpZ1wiLCBlbnRyeVBvaW50XSxcbiAgICB7XG4gICAgICBjd2Q6IGFwaVJvb3QsXG4gICAgICBzdGRpbzogXCJpbmhlcml0XCIsXG4gICAgfSxcbiAgKTtcblxuICBwcm9jZXNzLm9uKFwiU0lHSU5UXCIsICgpID0+IHtcbiAgICBzZXJ2ZXJQcm9jZXNzLmtpbGwoXCJTSUdURVJNXCIpO1xuICAgIHByb2Nlc3MuZXhpdCgwKTtcbiAgfSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHNldHVwTWlncmF0b3IoKSB7XG4gIC8vIG1pZ3JhdG9yXG4gIG1pZ3JhdG9yID0gbmV3IE1pZ3JhdG9yKCk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHNldHVwRml4dHVyZU1hbmFnZXIoKSB7XG4gIEZpeHR1cmVNYW5hZ2VyLmluaXQoKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gbWlncmF0ZV9hcHBseSh0YXJnZXRzOiAoa2V5b2YgU29uYW11REJDb25maWcpW10pIHtcbiAgYXdhaXQgc2V0dXBNaWdyYXRvcigpO1xuICBhd2FpdCBtaWdyYXRvci5ydW5BY3Rpb24oXCJhcHBseVwiLCB0YXJnZXRzKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gbWlncmF0ZV9ydW4oKSB7XG4gIGF3YWl0IHNldHVwTWlncmF0b3IoKTtcbiAgY29uc3QgbG9jYWxIb3N0cyA9IFtcImxvY2FsaG9zdFwiLCBcIjEyNy4wLjAuMVwiLCBcIjAuMC4wLjBcIiwgXCI6OjFcIl07XG4gIGNvbnN0IHRhcmdldHMgPSBPYmplY3Qua2V5cyhTb25hbXUuZGJDb25maWcpLmZpbHRlcigodGFyZ2V0KSA9PiB7XG4gICAgY29uc3QgdGFyZ2V0Q29uZmlnID0gU29uYW11LmRiQ29uZmlnW3RhcmdldCBhcyBrZXlvZiBTb25hbXVEQkNvbmZpZ107XG4gICAgY29uc3QgaG9zdCA9ICh0YXJnZXRDb25maWc/LmNvbm5lY3Rpb24gYXMgeyBob3N0Pzogc3RyaW5nIH0pPy5ob3N0ID8/IFwibG9jYWxob3N0XCI7XG4gICAgcmV0dXJuIGxvY2FsSG9zdHMuaW5jbHVkZXMoaG9zdC50b0xvd2VyQ2FzZSgpKTtcbiAgfSk7XG5cbiAgLy8g66Gc7LusIOuNsOydtO2EsOuyoOydtOyKpOyXkCDrjIDtlbTshJzrp4wg7KCE7LK0IOuniOydtOq3uOugiOydtOyFmOyXkOyEnCDrj5nsnpFcbiAgYXdhaXQgbWlncmF0b3IucnVuQWN0aW9uKFwiYXBwbHlcIiwgdGFyZ2V0cyBhcyAoa2V5b2YgU29uYW11REJDb25maWcpW10pO1xufVxuXG5hc3luYyBmdW5jdGlvbiBtaWdyYXRlX3N0YXR1cygpIHtcbiAgYXdhaXQgc2V0dXBNaWdyYXRvcigpO1xuXG4gIGNvbnN0IHN0YXR1cyA9IGF3YWl0IG1pZ3JhdG9yLmdldFN0YXR1cygpO1xuICAvLyBzdGF0dXM7XG4gIGNvbnNvbGUubG9nKHN0YXR1cyk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGZpeHR1cmVfaW5pdCgpIHtcbiAgY29uc3Qgc3JjQ29uZmlnID0gU29uYW11LmRiQ29uZmlnLmRldmVsb3BtZW50X21hc3RlcjtcbiAgY29uc3QgdGFyZ2V0cyA9IFtcbiAgICB7XG4gICAgICBsYWJlbDogXCIoUkVNT1RFKSBGaXh0dXJlIERCXCIsXG4gICAgICBjb25maWc6IFNvbmFtdS5kYkNvbmZpZy5maXh0dXJlLFxuICAgIH0sXG4gICAge1xuICAgICAgbGFiZWw6IFwiKExPQ0FMKSBUZXN0aW5nIERCXCIsXG4gICAgICBjb25maWc6IFNvbmFtdS5kYkNvbmZpZy50ZXN0LFxuICAgICAgdG9Ta2lwOiAoKCkgPT4ge1xuICAgICAgICBjb25zdCByZW1vdGVDb25uID0gU29uYW11LmRiQ29uZmlnLmZpeHR1cmUuY29ubmVjdGlvbiBhcyBLbmV4LkNvbm5lY3Rpb25Db25maWc7XG4gICAgICAgIGNvbnN0IGxvY2FsQ29ubiA9IFNvbmFtdS5kYkNvbmZpZy50ZXN0LmNvbm5lY3Rpb24gYXMgS25leC5Db25uZWN0aW9uQ29uZmlnO1xuICAgICAgICByZXR1cm4gcmVtb3RlQ29ubi5ob3N0ID09PSBsb2NhbENvbm4uaG9zdCAmJiByZW1vdGVDb25uLmRhdGFiYXNlID09PSBsb2NhbENvbm4uZGF0YWJhc2U7XG4gICAgICB9KSgpLFxuICAgIH0sXG4gIF0gYXMge1xuICAgIGxhYmVsOiBzdHJpbmc7XG4gICAgY29uZmlnOiBLbmV4LkNvbmZpZztcbiAgICB0b1NraXA/OiBib29sZWFuO1xuICB9W107XG5cbiAgLy8gMS4g6riw7KSAREIg7Iqk7YKk66eI66W8IOuNpO2UhFxuICBjb25zb2xlLmxvZyhcIkRVTVAuLi5cIik7XG4gIGNvbnN0IGR1bXBGaWxlbmFtZSA9IGAvdG1wL3NvbmFtdS1maXh0dXJlLWluaXQtJHtEYXRlLm5vdygpfS5zcWxgO1xuICBjb25zdCBzcmNDb25uID0gc3JjQ29uZmlnLmNvbm5lY3Rpb24gYXMgS25leC5Db25uZWN0aW9uQ29uZmlnO1xuICBjb25zdCBtaWdyYXRpb25zRHVtcCA9IGAvdG1wL3NvbmFtdS1maXh0dXJlLWluaXQtbWlncmF0aW9ucy0ke0RhdGUubm93KCl9LnNxbGA7XG4gIGV4ZWNTeW5jKFxuICAgIGBteXNxbGR1bXAgLWgke3NyY0Nvbm4uaG9zdH0gLXUke3NyY0Nvbm4udXNlcn0gLXAke3NyY0Nvbm4ucGFzc3dvcmR9IC0tc2luZ2xlLXRyYW5zYWN0aW9uIC1kIC0tbm8tY3JlYXRlLWRiIC0tdHJpZ2dlcnMgJHtzcmNDb25uLmRhdGFiYXNlfSA+ICR7ZHVtcEZpbGVuYW1lfWAsXG4gICk7XG4gIGNvbnN0IF9kYiA9IGtuZXgoc3JjQ29uZmlnKTtcbiAgY29uc3QgW1ttaWdyYXRpb25zXV0gPSBhd2FpdCBfZGIucmF3KFxuICAgIFwiU0VMRUNUIENPVU5UKCopIGFzIGNvdW50IEZST00gaW5mb3JtYXRpb25fc2NoZW1hLnRhYmxlcyBXSEVSRSB0YWJsZV9zY2hlbWEgPSA/IEFORCB0YWJsZV9uYW1lID0gJ2tuZXhfbWlncmF0aW9ucydcIixcbiAgICBbc3JjQ29ubi5kYXRhYmFzZV0sXG4gICk7XG4gIGlmIChtaWdyYXRpb25zLmNvdW50ID4gMCkge1xuICAgIGV4ZWNTeW5jKFxuICAgICAgYG15c3FsZHVtcCAtaCR7c3JjQ29ubi5ob3N0fSAtdSR7c3JjQ29ubi51c2VyfSAtcCR7c3JjQ29ubi5wYXNzd29yZH0gLS1zaW5nbGUtdHJhbnNhY3Rpb24gLS1uby1jcmVhdGUtZGIgLS10cmlnZ2VycyAke3NyY0Nvbm4uZGF0YWJhc2V9IGtuZXhfbWlncmF0aW9ucyBrbmV4X21pZ3JhdGlvbnNfbG9jayA+ICR7bWlncmF0aW9uc0R1bXB9YCxcbiAgICApO1xuICB9XG5cbiAgLy8gMi4g64yA7IOBREIg6rCB6rCB7JeQIOuMgO2VmOyXrCDsobTsnqzsl6zrtoAg7ZmV7J24IO2bhCDrtpPquLBcbiAgZm9yIGF3YWl0IChjb25zdCB7IGxhYmVsLCBjb25maWcsIHRvU2tpcCB9IG9mIHRhcmdldHMpIHtcbiAgICBjb25zdCBjb25uID0gY29uZmlnLmNvbm5lY3Rpb24gYXMgS25leC5Db25uZWN0aW9uQ29uZmlnO1xuXG4gICAgaWYgKHRvU2tpcCA9PT0gdHJ1ZSkge1xuICAgICAgY29uc29sZS5sb2coY2hhbGsucmVkKGAke2xhYmVsfTogU2tpcHBlZCFgKSk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBjb25zdCBkYiA9IGtuZXgoe1xuICAgICAgLi4uY29uZmlnLFxuICAgICAgY29ubmVjdGlvbjoge1xuICAgICAgICAuLi4oKGNvbmZpZy5jb25uZWN0aW9uID8/IHt9KSBhcyBLbmV4LkNvbm5lY3Rpb25Db25maWcpLFxuICAgICAgICBkYXRhYmFzZTogdW5kZWZpbmVkLFxuICAgICAgfSxcbiAgICB9KTtcbiAgICBjb25zdCBbW3Jvd11dID0gYXdhaXQgZGIucmF3KGBTSE9XIERBVEFCQVNFUyBMSUtFIFwiJHtjb25uLmRhdGFiYXNlfVwiYCk7XG4gICAgaWYgKHJvdykge1xuICAgICAgY29uc29sZS5sb2coY2hhbGsueWVsbG93KGAke2xhYmVsfTogRGF0YWJhc2UgXCIke2Nvbm4uZGF0YWJhc2V9XCIgQWxyZWFkeSBleGlzdHNgKSk7XG4gICAgICBhd2FpdCBkYi5kZXN0cm95KCk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBjb25zb2xlLmxvZyhgU1lOQyB0byAke2xhYmVsfS4uLmApO1xuICAgIGNvbnN0IG15c3FsQ21kID0gYG15c3FsIC1oJHtjb25uLmhvc3R9IC11JHtjb25uLnVzZXJ9IC1wJHtjb25uLnBhc3N3b3JkfWA7XG4gICAgZXhlY1N5bmMoYCR7bXlzcWxDbWR9IC1lICdEUk9QIERBVEFCQVNFIElGIEVYSVNUUyBcXGAke2Nvbm4uZGF0YWJhc2V9XFxgJ2ApO1xuICAgIGV4ZWNTeW5jKGAke215c3FsQ21kfSAtZSAnQ1JFQVRFIERBVEFCQVNFIFxcYCR7Y29ubi5kYXRhYmFzZX1cXGAnYCk7XG4gICAgZXhlY1N5bmMoYCR7bXlzcWxDbWR9ICR7Y29ubi5kYXRhYmFzZX0gPCAke2R1bXBGaWxlbmFtZX1gKTtcbiAgICBpZiAoYXdhaXQgZXhpc3RzKG1pZ3JhdGlvbnNEdW1wKSkge1xuICAgICAgZXhlY1N5bmMoYCR7bXlzcWxDbWR9ICR7Y29ubi5kYXRhYmFzZX0gPCAke21pZ3JhdGlvbnNEdW1wfWApO1xuICAgIH1cblxuICAgIGF3YWl0IGRiLmRlc3Ryb3koKTtcbiAgfVxuXG4gIGF3YWl0IF9kYi5kZXN0cm95KCk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGZpeHR1cmVfaW1wb3J0KGVudGl0eUlkOiBzdHJpbmcsIHJlY29yZElkczogbnVtYmVyW10pIHtcbiAgYXdhaXQgc2V0dXBGaXh0dXJlTWFuYWdlcigpO1xuXG4gIGF3YWl0IEZpeHR1cmVNYW5hZ2VyLmltcG9ydEZpeHR1cmUoZW50aXR5SWQsIHJlY29yZElkcyk7XG4gIGF3YWl0IEZpeHR1cmVNYW5hZ2VyLnN5bmMoKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZml4dHVyZV9zeW5jKCkge1xuICBhd2FpdCBzZXR1cEZpeHR1cmVNYW5hZ2VyKCk7XG5cbiAgYXdhaXQgRml4dHVyZU1hbmFnZXIuc3luYygpO1xufVxuXG4vKipcbiAqIGZpeHR1cmUgZ2VuIOuqheugueyWtFxuICog7Ji17IWY7J2EIHByb2Nlc3MuYXJnduyXkOyEnCDtjIzsi7FcbiAqL1xuYXN5bmMgZnVuY3Rpb24gZml4dHVyZV9nZW4oKSB7XG4gIGNvbnN0IG9wdGlvbnMgPSBwYXJzZU9wdGlvbnMocHJvY2Vzcy5hcmd2KTtcbiAgYXdhaXQgZml4dHVyZUdlbkNvbW1hbmQob3B0aW9ucyk7XG59XG5cbi8qKlxuICogZml4dHVyZSBmZXRjaCDrqoXroLnslrRcbiAqIOyYteyFmOydhCBwcm9jZXNzLmFyZ3bsl5DshJwg7YyM7IuxXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGZpeHR1cmVfZmV0Y2goKSB7XG4gIGNvbnN0IG9wdGlvbnMgPSBwYXJzZU9wdGlvbnMocHJvY2Vzcy5hcmd2KTtcbiAgYXdhaXQgZml4dHVyZUZldGNoQ29tbWFuZChvcHRpb25zKTtcbn1cblxuLyoqXG4gKiBmaXh0dXJlIGV4cGxvcmUg66qF66C57Ja0XG4gKiDsmLXshZjsnYQgcHJvY2Vzcy5hcmd27JeQ7IScIO2MjOyLsVxuICovXG5hc3luYyBmdW5jdGlvbiBmaXh0dXJlX2V4cGxvcmUoKSB7XG4gIGNvbnN0IG9wdGlvbnMgPSBwYXJzZU9wdGlvbnMocHJvY2Vzcy5hcmd2KTtcbiAgYXdhaXQgZml4dHVyZUV4cGxvcmVDb21tYW5kKG9wdGlvbnMpO1xufVxuXG4vKipcbiAqIOqwhOuLqO2VnCDsmLXshZgg7YyM7IScXG4gKi9cbmZ1bmN0aW9uIHBhcnNlT3B0aW9ucyhcbiAgYXJndjogc3RyaW5nW10sXG4pOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBib29sZWFuIHwgc3RyaW5nW10+ICYgeyBfOiBzdHJpbmdbXSB9IHtcbiAgY29uc3Qgb3B0aW9uczogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgYm9vbGVhbiB8IHN0cmluZ1tdPiAmIHsgXzogc3RyaW5nW10gfSA9IHsgXzogW10gfTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3YubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBhcmcgPSBhcmd2W2ldO1xuXG4gICAgaWYgKGFyZy5zdGFydHNXaXRoKFwiLS1cIikpIHtcbiAgICAgIGNvbnN0IGtleSA9IGFyZy5zbGljZSgyKTtcblxuICAgICAgaWYgKGtleS5pbmNsdWRlcyhcIj1cIikpIHtcbiAgICAgICAgY29uc3QgW2ssIHZdID0ga2V5LnNwbGl0KFwiPVwiKTtcbiAgICAgICAgb3B0aW9uc1trXSA9IHY7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBuZXh0ID0gYXJndltpICsgMV07XG4gICAgICAgIGlmIChuZXh0ICYmICFuZXh0LnN0YXJ0c1dpdGgoXCItLVwiKSkge1xuICAgICAgICAgIG9wdGlvbnNba2V5XSA9IG5leHQ7XG4gICAgICAgICAgaSsrO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG9wdGlvbnNba2V5XSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGFyZy5zdGFydHNXaXRoKFwiLVwiKSkge1xuICAgICAgY29uc3Qga2V5ID0gYXJnLnNsaWNlKDEpO1xuICAgICAgY29uc3QgbmV4dCA9IGFyZ3ZbaSArIDFdO1xuXG4gICAgICBpZiAobmV4dCAmJiAhbmV4dC5zdGFydHNXaXRoKFwiLVwiKSkge1xuICAgICAgICBvcHRpb25zW2tleV0gPSBuZXh0O1xuICAgICAgICBpKys7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvcHRpb25zW2tleV0gPSB0cnVlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBvcHRpb25zLl8ucHVzaChhcmcpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBvcHRpb25zO1xufVxuXG5hc3luYyBmdW5jdGlvbiBzdHViX3ByYWN0aWNlKG5hbWU6IHN0cmluZykge1xuICBjb25zdCBwcmFjdGljZURpciA9IHBhdGguam9pbihTb25hbXUuYXBpUm9vdFBhdGgsIFwic3JjXCIsIFwicHJhY3RpY2VzXCIpO1xuICBjb25zdCBmaWxlTmFtZXMgPSBhd2FpdCByZWFkZGlyKHByYWN0aWNlRGlyKTtcblxuICBjb25zdCBtYXhTZXFObyA9IGF3YWl0IChhc3luYyAoKSA9PiB7XG4gICAgaWYgKCEoYXdhaXQgZXhpc3RzKHByYWN0aWNlRGlyKSkpIHtcbiAgICAgIGF3YWl0IG1rZGlyKHByYWN0aWNlRGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICB9XG5cbiAgICBjb25zdCBmaWx0ZXJlZFNlcXMgPSBmaWxlTmFtZXNcbiAgICAgIC5maWx0ZXIoKGZpbGVOYW1lKSA9PiBmaWxlTmFtZS5zdGFydHNXaXRoKFwicFwiKSAmJiBmaWxlTmFtZS5lbmRzV2l0aChcIi50c1wiKSlcbiAgICAgIC5tYXAoKGZpbGVOYW1lKSA9PiB7XG4gICAgICAgIGNvbnN0IFssIHNlcU5vXSA9IGZpbGVOYW1lLm1hdGNoKC9ecChbMC05XSspLS8pID8/IFtcIjBcIiwgXCIwXCJdO1xuICAgICAgICByZXR1cm4gcGFyc2VJbnQoc2VxTm8pO1xuICAgICAgfSlcbiAgICAgIC5zb3J0KChhLCBiKSA9PiBiIC0gYSk7XG5cbiAgICBpZiAoZmlsdGVyZWRTZXFzLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiBmaWx0ZXJlZFNlcXNbMF07XG4gICAgfVxuXG4gICAgcmV0dXJuIDA7XG4gIH0pKCk7XG5cbiAgY29uc3QgY3VycmVudFNlcU5vID0gbWF4U2VxTm8gKyAxO1xuICBjb25zdCBmaWxlTmFtZSA9IGBwJHtjdXJyZW50U2VxTm99LSR7bmFtZX0udHNgO1xuICBjb25zdCBkc3RQYXRoID0gcGF0aC5qb2luKHByYWN0aWNlRGlyLCBmaWxlTmFtZSk7XG5cbiAgY29uc3QgY29kZSA9IFtcbiAgICBgaW1wb3J0IHsgU29uYW11IH0gZnJvbSBcInNvbmFtdVwiO2AsXG4gICAgXCJcIixcbiAgICBgY29uc29sZS5jbGVhcigpO2AsXG4gICAgYGNvbnNvbGUubG9nKFwiJHtmaWxlTmFtZX1cIik7YCxcbiAgICBcIlwiLFxuICAgIGBTb25hbXUucnVuU2NyaXB0KGFzeW5jICgpID0+IHtgLFxuICAgIGAgLy8gVE9ET2AsXG4gICAgYH0pO2AsXG4gICAgXCJcIixcbiAgXS5qb2luKFwiXFxuXCIpO1xuICBhd2FpdCB3cml0ZUZpbGUoZHN0UGF0aCwgY29kZSk7XG5cbiAgZXhlY1N5bmMoYGNvZGUgJHtkc3RQYXRofWApO1xuXG4gIGNvbnN0IHJ1bkNvZGUgPSBgeWFybiBub2RlIC1yIGRvdGVudi9jb25maWcgLS1lbmFibGUtc291cmNlLW1hcHMgZGlzdC9wcmFjdGljZXMvJHtmaWxlTmFtZS5yZXBsYWNlKFxuICAgIFwiLnRzXCIsXG4gICAgXCIuanNcIixcbiAgKX1gO1xuICBjb25zb2xlLmxvZyhgJHtjaGFsay5ibHVlKHJ1bkNvZGUpfSBjb3BpZWQgdG8gY2xpcGJvYXJkLmApO1xuICBleGVjU3luYyhgZWNobyBcIiR7cnVuQ29kZX1cIiB8IHBiY29weWApO1xufVxuXG5hc3luYyBmdW5jdGlvbiBzdHViX2VudGl0eShlbnRpdHlJZDogc3RyaW5nKSB7XG4gIGF3YWl0IFNvbmFtdS5zeW5jZXIuY3JlYXRlRW50aXR5KHsgZW50aXR5SWQsIHRpdGxlOiBlbnRpdHlJZCB9KTtcblxuICBjb25zdCB7IGZsYWdzIH0gPSBwYXJzZUNsaU9wdGlvbnMoKTtcbiAgY29uc3QgdXNlQUkgPSBmbGFncy5oYXMoXCJhaVwiKTtcbiAgY29uc3Qgbm9Db25lcyA9IGZsYWdzLmhhcyhcIm5vLWNvbmVzXCIpO1xuXG4gIC8vIC0tbm8tY29uZXM6IGNvbmUg7IOd7ISxIOyKpO2CtVxuICBpZiAobm9Db25lcykge1xuICAgIGNvbnNvbGUubG9nKGDinJMgRW50aXR5ICcke2VudGl0eUlkfScgY3JlYXRlZCB3aXRob3V0IGNvbmVzYCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgeyBFbnRpdHlNYW5hZ2VyIH0gPSBhd2FpdCBpbXBvcnQoXCIuLi9lbnRpdHkvZW50aXR5LW1hbmFnZXJcIik7XG4gIGNvbnN0IGVudGl0eSA9IEVudGl0eU1hbmFnZXIuZ2V0KGVudGl0eUlkKTtcbiAgaWYgKCFlbnRpdHkpIHtcbiAgICBjb25zb2xlLmVycm9yKGBFbnRpdHkgbm90IGZvdW5kOiAke2VudGl0eUlkfWApO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIC0tYWk6IExMTeycvOuhnCBjb25lIOyDneyEsVxuICBpZiAodXNlQUkpIHtcbiAgICBjb25zb2xlLmxvZyhg4pyTIEVudGl0eSAnJHtlbnRpdHlJZH0nIGNyZWF0ZWRgKTtcbiAgICBjb25zb2xlLmxvZyhg8J+MnyBHZW5lcmF0aW5nIEFJLXBvd2VyZWQgY29uZXMuLi5gKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgY29uZmlnTG9jYWxlID0gU29uYW11LmNvbmZpZy5pMThuPy5kZWZhdWx0TG9jYWxlO1xuICAgICAgY29uc3QgbG9jYWxlID1cbiAgICAgICAgY29uZmlnTG9jYWxlID09PSBcImtvXCIgfHwgY29uZmlnTG9jYWxlID09PSBcImVuXCIgfHwgY29uZmlnTG9jYWxlID09PSBcImphXCJcbiAgICAgICAgICA/IGNvbmZpZ0xvY2FsZVxuICAgICAgICAgIDogXCJrb1wiO1xuXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBlbnRpdHkuZ2VuZXJhdGVDb25lcyh7XG4gICAgICAgIHByZXNlcnZlRXhpc3Rpbmc6IGZhbHNlLFxuICAgICAgICBvbmx5RW1wdHk6IGZhbHNlLFxuICAgICAgICBsb2NhbGUsXG4gICAgICB9KTtcblxuICAgICAgY29uc29sZS5sb2coYOKchSBEb25lICgke3Jlc3VsdC50b2tlbnNVc2VkfSB0b2tlbnMpYCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yICYmIGVycm9yLm1lc3NhZ2UuaW5jbHVkZXMoXCJBTlRIUk9QSUNfQVBJX0tFWVwiKSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKGBcXG7inYwgJHtlcnJvci5tZXNzYWdlfWApO1xuICAgICAgICBjb25zb2xlLmVycm9yKGBcXG7wn5KhIFJlbW92ZSAtLWFpIGZsYWcgdG8gdXNlIHRlbXBsYXRlIGNvbmVzIGluc3RlYWRgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm47XG4gIH1cblxuICAvLyDquLDrs7g6IO2FnO2UjOumvyBjb25lIOyekOuPmSDsg53shLFcbiAgLy8gTExNIOyXhuydtCBmYWtlci1tYXBwaW5ncy50c+ulvCDtmZzsmqntlZjsl6wg6riw67O4IGNvbmUg66mU7YOA642w7J207YSw66W8IOyDneyEse2VqeuLiOuLpC5cbiAgLy8g7J2066W8IO2Gte2VtCBBTlRIUk9QSUNfQVBJX0tFWeqwgCDsl4bslrTrj4QgU29uYW1166W8IOyCrOyaqe2VoCDsiJgg7J6I7Jy866mwLFxuICAvLyDsg53shLHrkJwg7YWc7ZSM66a/IGNvbmXsnYAg64KY7KSR7JeQICdjb25lIGdlbicg66qF66C57Ja066GcIEFJ66W8IO2Gte2VtCDsl4Xqt7jroIjsnbTrk5ztlaAg7IiYIOyeiOyKteuLiOuLpC5cbiAgY29uc29sZS5sb2coYPCfjJ8gR2VuZXJhdGluZyB0ZW1wbGF0ZSBjb25lcy4uLmApO1xuICBhd2FpdCBlbnRpdHkuZ2VuZXJhdGVUZW1wbGF0ZUNvbmVzKCk7XG4gIGNvbnNvbGUubG9nKGDinJMgRW50aXR5ICcke2VudGl0eUlkfScgY3JlYXRlZCB3aXRoIHRlbXBsYXRlIGNvbmVzYCk7XG4gIGNvbnNvbGUubG9nKGDwn5KhIFRpcDogUnVuICdwbnBtIHNvbmFtdSBjb25lIGdlbiAke2VudGl0eUlkfScgdG8gaW1wcm92ZSB3aXRoIEFJYCk7XG59XG5cbi8qKlxuICogQUnrpbwg7IKs7Jqp7ZWY7JesIGVudGl0eeydmCBjb25lIOuplO2DgOuNsOydtO2EsOulvCDsg53shLHtlZjqsbDrgpgg7JeF6re466CI7J2065Oc7ZWp64uI64ukLlxuICpcbiAqIOyYteyFmDpcbiAqIC0gLS1yZWdlbmVyYXRlOiDsoITssrQg7J6s7IOd7ISxICjquLDsobQgY29uZSDrja7slrTsk7DquLApXG4gKiAtIC0tbG9jYWxlIDxrb3xlbnxqYT46IOyDneyEsSDslrjslrQg7KeA7KCVXG4gKiAtIOq4sOuzuDogb25seUVtcHR5IOuqqOuTnCAo6riw7KG0IGZpeHR1cmVIaW50IOuztOyhtClcbiAqXG4gKiBBTlRIUk9QSUNfQVBJX0tFWSDtlYTsmpQgKHNvbmFtdS5zZWNyZXQudHMg65iQ64qUIO2ZmOqyveuzgOyImClcbiAqL1xuYXN5bmMgZnVuY3Rpb24gY29uZV9nZW4oZW50aXR5SWQ6IHN0cmluZykge1xuICBjb25zdCB7IEVudGl0eU1hbmFnZXIgfSA9IGF3YWl0IGltcG9ydChcIi4uL2VudGl0eS9lbnRpdHktbWFuYWdlclwiKTtcbiAgY29uc3QgeyBmbGFncywgb3B0aW9ucyB9ID0gcGFyc2VDbGlPcHRpb25zKCk7XG5cbiAgLy8gLS1hbGwg7Ji17IWYOiDrqqjrk6AgZW50aXR5IGNvbmUg7IOd7ISxXG4gIGlmIChmbGFncy5oYXMoXCJhbGxcIikgfHwgZW50aXR5SWQgPT09IFwiYWxsXCIpIHtcbiAgICBjb25zdCBhbGxFbnRpdGllcyA9IEVudGl0eU1hbmFnZXIuZ2V0QWxsRW50aXRpZXMoKTtcbiAgICBjb25zb2xlLmxvZyhg8J+MnyBHZW5lcmF0aW5nIEFJLXBvd2VyZWQgY29uZXMgZm9yICR7YWxsRW50aXRpZXMubGVuZ3RofSBlbnRpdGllcy4uLlxcbmApO1xuXG4gICAgbGV0IHRvdGFsVG9rZW5zID0gMDtcbiAgICBjb25zdCBlcnJvcnM6IHN0cmluZ1tdID0gW107XG5cbiAgICBmb3IgKGNvbnN0IGVudGl0eSBvZiBhbGxFbnRpdGllcykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc29sZS5sb2coYFByb2Nlc3NpbmcgJHtlbnRpdHkuaWR9Li4uYCk7XG4gICAgICAgIGNvbnN0IGNvbmZpZ0xvY2FsZSA9IG9wdGlvbnMubG9jYWxlIHx8IFNvbmFtdS5jb25maWcuaTE4bj8uZGVmYXVsdExvY2FsZTtcbiAgICAgICAgY29uc3QgbG9jYWxlID1cbiAgICAgICAgICBjb25maWdMb2NhbGUgPT09IFwia29cIiB8fCBjb25maWdMb2NhbGUgPT09IFwiZW5cIiB8fCBjb25maWdMb2NhbGUgPT09IFwiamFcIlxuICAgICAgICAgICAgPyBjb25maWdMb2NhbGVcbiAgICAgICAgICAgIDogXCJrb1wiO1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGVudGl0eS5nZW5lcmF0ZUNvbmVzKHtcbiAgICAgICAgICBwcmVzZXJ2ZUV4aXN0aW5nOiAhZmxhZ3MuaGFzKFwicmVnZW5lcmF0ZVwiKSxcbiAgICAgICAgICBvbmx5RW1wdHk6ICFmbGFncy5oYXMoXCJyZWdlbmVyYXRlXCIpLFxuICAgICAgICAgIGxvY2FsZSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdG90YWxUb2tlbnMgKz0gcmVzdWx0LnRva2Vuc1VzZWQ7XG4gICAgICAgIGNvbnNvbGUubG9nKGAgIOKckyAke2VudGl0eS5pZH0gKCR7cmVzdWx0LnRva2Vuc1VzZWR9IHRva2VucylcXG5gKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFwiVW5rbm93biBlcnJvclwiO1xuICAgICAgICBlcnJvcnMucHVzaChgJHtlbnRpdHkuaWR9OiAke21lc3NhZ2V9YCk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYCAg4pyXICR7ZW50aXR5LmlkfTogJHttZXNzYWdlfVxcbmApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnNvbGUubG9nKGBcXG7inIUgRG9uZSEgVG90YWw6ICR7dG90YWxUb2tlbnN9IHRva2VucyB1c2VkYCk7XG4gICAgY29uc3QgZXN0aW1hdGVkQ29zdCA9ICh0b3RhbFRva2VucyAqIDkpIC8gMV8wMDBfMDAwO1xuICAgIGNvbnNvbGUubG9nKGDwn5KwIEVzdGltYXRlZCBjb3N0OiB+JCR7ZXN0aW1hdGVkQ29zdC50b0ZpeGVkKDQpfWApO1xuXG4gICAgaWYgKGVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGBcXG7inYwgRmFpbGVkIGVudGl0aWVzICgke2Vycm9ycy5sZW5ndGh9KTpgKTtcbiAgICAgIGZvciAoY29uc3QgZXJyIG9mIGVycm9ycykge1xuICAgICAgICBjb25zb2xlLmVycm9yKGAgIC0gJHtlcnJ9YCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIOuLqOydvCBlbnRpdHkgY29uZSDsg53shLFcbiAgY29uc3QgZW50aXR5ID0gRW50aXR5TWFuYWdlci5nZXQoZW50aXR5SWQpO1xuICBpZiAoIWVudGl0eSkge1xuICAgIGNvbnNvbGUuZXJyb3IoYEVudGl0eSBub3QgZm91bmQ6ICR7ZW50aXR5SWR9YCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgbW9kZSA9IGZsYWdzLmhhcyhcInJlZ2VuZXJhdGVcIikgPyBcInJlZ2VuZXJhdGluZ1wiIDogXCJnZW5lcmF0aW5nXCI7XG4gIGNvbnNvbGUubG9nKFxuICAgIGDwn4yfICR7bW9kZSA9PT0gXCJyZWdlbmVyYXRpbmdcIiA/IFwiUmVnZW5lcmF0aW5nXCIgOiBcIkdlbmVyYXRpbmdcIn0gQUktcG93ZXJlZCBjb25lcyBmb3IgJHtlbnRpdHlJZH0uLi5gLFxuICApO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgY29uZmlnTG9jYWxlID0gb3B0aW9ucy5sb2NhbGUgfHwgU29uYW11LmNvbmZpZy5pMThuPy5kZWZhdWx0TG9jYWxlO1xuICAgIGNvbnN0IGxvY2FsZSA9XG4gICAgICBjb25maWdMb2NhbGUgPT09IFwia29cIiB8fCBjb25maWdMb2NhbGUgPT09IFwiZW5cIiB8fCBjb25maWdMb2NhbGUgPT09IFwiamFcIiA/IGNvbmZpZ0xvY2FsZSA6IFwia29cIjtcblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGVudGl0eS5nZW5lcmF0ZUNvbmVzKHtcbiAgICAgIHByZXNlcnZlRXhpc3Rpbmc6ICFmbGFncy5oYXMoXCJyZWdlbmVyYXRlXCIpLFxuICAgICAgb25seUVtcHR5OiAhZmxhZ3MuaGFzKFwicmVnZW5lcmF0ZVwiKSxcbiAgICAgIGxvY2FsZSxcbiAgICB9KTtcblxuICAgIGNvbnNvbGUubG9nKGDinIUgRG9uZSEgKCR7cmVzdWx0LnRva2Vuc1VzZWR9IHRva2VucyB1c2VkKWApO1xuXG4gICAgLy8g7Yag7YGwIOu5hOyaqSDqs4TsgrAgKOuMgOueteyggeyduCDstpTsoJUpXG4gICAgLy8gQ2xhdWRlIFNvbm5ldCA0LjU6IGlucHV0ICQzL00gdG9rZW5zLCBvdXRwdXQgJDE1L00gdG9rZW5zXG4gICAgLy8g6rCE64uo7ZWY6rKMIO2Pieq3oCAkOS9NIHRva2Vuc+uhnCDqs4TsgrBcbiAgICBjb25zdCBlc3RpbWF0ZWRDb3N0ID0gKHJlc3VsdC50b2tlbnNVc2VkICogOSkgLyAxXzAwMF8wMDA7XG4gICAgY29uc29sZS5sb2coYPCfkrAgRXN0aW1hdGVkIGNvc3Q6IH4kJHtlc3RpbWF0ZWRDb3N0LnRvRml4ZWQoNCl9YCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgIGlmIChlcnJvci5tZXNzYWdlLmluY2x1ZGVzKFwiQU5USFJPUElDX0FQSV9LRVlcIikpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihgXFxu4p2MICR7ZXJyb3IubWVzc2FnZX1gKTtcbiAgICAgICAgY29uc29sZS5lcnJvcihgXFxu8J+SoSBUbyB1c2UgQUktcG93ZXJlZCBjb25lIGdlbmVyYXRpb246YCk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYCAgIDEuIEdldCBhbiBBUEkga2V5IGZyb20gaHR0cHM6Ly9jb25zb2xlLmFudGhyb3BpYy5jb20vYCk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgYCAgIDIuIEFkZCBpdCB0byBzb25hbXUuc2VjcmV0LnRzIG9yIHNldCBBTlRIUk9QSUNfQVBJX0tFWSBlbnZpcm9ubWVudCB2YXJpYWJsZWAsXG4gICAgICAgICk7XG4gICAgICB9IGVsc2UgaWYgKGVycm9yLm1lc3NhZ2UuaW5jbHVkZXMoXCJSYXRlIGxpbWl0XCIpKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYFxcbuKdjCAke2Vycm9yLm1lc3NhZ2V9YCk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYFxcbvCfkqEgUGxlYXNlIHdhaXQgYSBtb21lbnQgYW5kIHRyeSBhZ2Fpbi5gKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYFxcbuKdjCBGYWlsZWQgdG8gZ2VuZXJhdGUgY29uZXM6ICR7ZXJyb3IubWVzc2FnZX1gKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5lcnJvcihgXFxu4p2MIEZhaWxlZCB0byBnZW5lcmF0ZSBjb25lczogVW5rbm93biBlcnJvcmApO1xuICAgIH1cbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBzY2FmZm9sZF9tb2RlbChlbnRpdHlJZDogc3RyaW5nKSB7XG4gIGF3YWl0IFNvbmFtdS5zeW5jZXIuZ2VuZXJhdGVUZW1wbGF0ZShcIm1vZGVsXCIsIHtcbiAgICBlbnRpdHlJZCxcbiAgfSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHNjYWZmb2xkX21vZGVsX3Rlc3QoZW50aXR5SWQ6IHN0cmluZykge1xuICBhd2FpdCBTb25hbXUuc3luY2VyLmdlbmVyYXRlVGVtcGxhdGUoXCJtb2RlbF90ZXN0XCIsIHtcbiAgICBlbnRpdHlJZCxcbiAgfSk7XG59XG5cbi8qKlxuICogcG5wbSBzb25hbXUgc2tpbGxzIHN5bmMg7ZWY66m0IOyLpO2WieuQmOuKlCDtlajsiJjsnoXri4jri6QuXG4gKiDqs7Xsi50gU2tpbGxz66W8IOuhnOy7rCDtlITroZzsoJ3tirgg65iQ64qUIOq4gOuhnOuyjCB+Ly5jbGF1ZGUv66GcIOuPmeq4sO2ZlO2VqeuLiOuLpC5cbiAqXG4gKiAtLWdsb2JhbCDtlIzrnpjqt7g6IH4vLmNsYXVkZS/sl5Ag64+Z6riw7ZmUICjtlITroZzsoJ3tirgg7IOd7ISxIOyghCDsgqzsmqkg6rCA64qlKVxuICovXG5hc3luYyBmdW5jdGlvbiBza2lsbHNfc3luYygpIHtcbiAgY29uc3QgeyBmbGFncyB9ID0gcGFyc2VDbGlPcHRpb25zKCk7XG4gIGNvbnN0IGlzR2xvYmFsID0gZmxhZ3MuaGFzKFwiZ2xvYmFsXCIpO1xuXG4gIC8vIOqwnOuwnCDtmZjqsr0gLSBjbGkudHM6IHNvbmFtdS9tb2R1bGVzL3NvbmFtdS9zcmMvYmluL2NsaS50c1xuICAvLyDruYzrk5wg7ZuEIC0gY2xpLmpzOiBub2RlX21vZHVsZXMvc29uYW11L2Rpc3QvYmluL2NsaS5qcyAo7Iuk7KCcIOyLpO2WiSlcbiAgLy8gc2tpbGxzIOychOy5mDogbm9kZV9tb2R1bGVzL3NvbmFtdS9zcmMvc2tpbGxzIChucG0g67Cw7Y+sIOyLnClcbiAgY29uc3Qgc291cmNlQmFzZSA9IHBhdGgucmVzb2x2ZShpbXBvcnQubWV0YS5kaXJuYW1lLCBcIi4uXCIsIFwiLi5cIiwgXCJzcmNcIiwgXCJza2lsbHNcIik7XG4gIGNvbnN0IHNvdXJjZVNraWxsc0RpciA9IHBhdGguam9pbihzb3VyY2VCYXNlLCBcInNvbmFtdVwiKTtcbiAgY29uc3Qgc291cmNlQ2xhdWRlTWQgPSBwYXRoLmpvaW4oc291cmNlQmFzZSwgXCJDTEFVREUubWRcIik7XG5cbiAgaWYgKCEoYXdhaXQgZXhpc3RzKHNvdXJjZVNraWxsc0RpcikpKSB7XG4gICAgY29uc29sZS5sb2coY2hhbGsueWVsbG93KFwiU2tpbGxzIHNvdXJjZSBub3QgZm91bmQgaW4gc29uYW11IHBhY2thZ2UuXCIpKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoaXNHbG9iYWwpIHtcbiAgICBhd2FpdCBza2lsbHNfc3luY190byhwYXRoLmpvaW4ob3MuaG9tZWRpcigpLCBcIi5jbGF1ZGVcIiksIHNvdXJjZVNraWxsc0Rpciwgc291cmNlQ2xhdWRlTWQsIHtcbiAgICAgIHVzZVN5bWxpbms6IGZhbHNlLFxuICAgICAgY29weVByb2plY3RUZW1wbGF0ZXM6IGZhbHNlLFxuICAgICAgaXNHbG9iYWw6IHRydWUsXG4gICAgfSk7XG4gICAgY29uc29sZS5sb2coY2hhbGsuY3lhbihgXFxuICBHbG9iYWwgc3luYyBjb21wbGV0ZSDihpIgfi8uY2xhdWRlL3NraWxscy9zb25hbXUvYCkpO1xuICAgIGNvbnNvbGUubG9nKGNoYWxrLmRpbShgICBUaGVzZSBza2lsbHMgYXJlIGF2YWlsYWJsZSBpbiBhbGwgQ2xhdWRlIENvZGUgc2Vzc2lvbnMuYCkpO1xuICAgIGNvbnNvbGUubG9nKFxuICAgICAgY2hhbGsuZGltKFxuICAgICAgICBgICBPbmNlIGEgcHJvamVjdCBpcyBjcmVhdGVkLCBydW4gJ3BucG0gc29uYW11IHNraWxscyBzeW5jJyBmb3IgcHJvamVjdC1sb2NhbCBzeW5jLmAsXG4gICAgICApLFxuICAgICk7XG4gIH0gZWxzZSB7XG4gICAgY29uc3Qgd29ya3NwYWNlUm9vdCA9IGF3YWl0IGZpbmRXb3Jrc3BhY2VSb290KCk7XG4gICAgY29uc3QgY2xhdWRlRGlyID0gcGF0aC5qb2luKHdvcmtzcGFjZVJvb3QsIFwiLmNsYXVkZVwiKTtcbiAgICBhd2FpdCBza2lsbHNfc3luY190byhjbGF1ZGVEaXIsIHNvdXJjZVNraWxsc0Rpciwgc291cmNlQ2xhdWRlTWQsIHtcbiAgICAgIHVzZVN5bWxpbms6IHRydWUsXG4gICAgICBjb3B5UHJvamVjdFRlbXBsYXRlczogdHJ1ZSxcbiAgICAgIHNvdXJjZUJhc2UsXG4gICAgfSk7XG4gIH1cbn1cblxuLyoqXG4gKiBjbGF1ZGVEaXLroZwgc2tpbGxz66W8IOuPmeq4sO2ZlO2VmOuKlCDqs7XthrUg66Gc7KeB7J6F64uI64ukLlxuICovXG5hc3luYyBmdW5jdGlvbiBza2lsbHNfc3luY190byhcbiAgY2xhdWRlRGlyOiBzdHJpbmcsXG4gIHNvdXJjZVNraWxsc0Rpcjogc3RyaW5nLFxuICBzb3VyY2VDbGF1ZGVNZDogc3RyaW5nLFxuICBvcHRpb25zOiB7XG4gICAgdXNlU3ltbGluazogYm9vbGVhbjtcbiAgICBjb3B5UHJvamVjdFRlbXBsYXRlczogYm9vbGVhbjtcbiAgICBzb3VyY2VCYXNlPzogc3RyaW5nO1xuICAgIGlzR2xvYmFsPzogYm9vbGVhbjtcbiAgfSxcbikge1xuICBjb25zdCB0YXJnZXRTa2lsbHNEaXIgPSBwYXRoLmpvaW4oY2xhdWRlRGlyLCBcInNraWxsc1wiLCBcInNvbmFtdVwiKTtcblxuICAvLyDquLDsobQg65SU66CJ7Yag66asL3N5bWxpbmsg7IKt7KCcIO2bhCDsnqzsg53shLFcbiAgLy8gZXhpc3RzKCnripQgYnJva2VuIHN5bWxpbmvrpbwg6rCQ7KeA7ZWY7KeAIOuqu+2VmOuvgOuhnCBybeydhCDrrLTsobDqsbQg7Iuc64+E7ZWp64uI64ukXG4gIHRyeSB7XG4gICAgYXdhaXQgcm0odGFyZ2V0U2tpbGxzRGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSwgZm9yY2U6IHRydWUgfSk7XG4gIH0gY2F0Y2gge1xuICAgIC8vIO2MjOydvOydtCDsl4bsnLzrqbQg66y07IucXG4gIH1cblxuICBhd2FpdCBta2RpcihwYXRoLmRpcm5hbWUodGFyZ2V0U2tpbGxzRGlyKSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG5cbiAgaWYgKG9wdGlvbnMudXNlU3ltbGluaykge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBzeW1saW5rKHNvdXJjZVNraWxsc0RpciwgdGFyZ2V0U2tpbGxzRGlyLCBcImRpclwiKTtcbiAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyZWVuKGDinJMgU2tpbGxzIGxpbmtlZCAoc3ltbGluaylgKSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICBjaGFsay55ZWxsb3coYOKaoCBTeW1saW5rIGZhaWxlZDogJHtlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcil9YCksXG4gICAgICApO1xuICAgICAgY29uc29sZS5sb2coY2hhbGsueWVsbG93KGAgIEZhbGxpbmcgYmFjayB0byBjb3B5Li4uYCkpO1xuICAgICAgYXdhaXQgc2tpbGxzQ29weShzb3VyY2VTa2lsbHNEaXIsIHRhcmdldFNraWxsc0Rpcik7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGF3YWl0IHNraWxsc0NvcHkoc291cmNlU2tpbGxzRGlyLCB0YXJnZXRTa2lsbHNEaXIpO1xuICB9XG5cbiAgLy8gcHJvamVjdCDrlJTroInthqDrpqwg7LSI6riw7ZmUICjsl4bsnLzrqbQg7IOd7ISxLCDsnojsnLzrqbQg7Jyg7KeAKVxuICBpZiAob3B0aW9ucy5jb3B5UHJvamVjdFRlbXBsYXRlcyAmJiBvcHRpb25zLnNvdXJjZUJhc2UpIHtcbiAgICBjb25zdCBzb3VyY2VQcm9qZWN0RGlyID0gcGF0aC5qb2luKG9wdGlvbnMuc291cmNlQmFzZSwgXCJwcm9qZWN0XCIpO1xuICAgIGNvbnN0IHRhcmdldFByb2plY3REaXIgPSBwYXRoLmpvaW4oY2xhdWRlRGlyLCBcInNraWxsc1wiLCBcInByb2plY3RcIik7XG5cbiAgICBpZiAoYXdhaXQgZXhpc3RzKHNvdXJjZVByb2plY3REaXIpKSB7XG4gICAgICBpZiAoIShhd2FpdCBleGlzdHModGFyZ2V0UHJvamVjdERpcikpKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgY3Aoc291cmNlUHJvamVjdERpciwgdGFyZ2V0UHJvamVjdERpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgICAgICAgY29uc29sZS5sb2coY2hhbGsuZ3JlZW4oYOKckyBQcm9qZWN0IHRlbXBsYXRlcyBpbml0aWFsaXplZGApKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgY2hhbGsucmVkKFxuICAgICAgICAgICAgICBg4pyXIEZhaWxlZCB0byBpbml0aWFsaXplIHByb2plY3QgdGVtcGxhdGVzOiAke2Vycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKX1gLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLmxvZyhjaGFsay5kaW0oYOKPrSBQcm9qZWN0IHRlbXBsYXRlcyBhbHJlYWR5IGV4aXN0IChwcmVzZXJ2ZWQpYCkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIHNldHRpbmdzLmxvY2FsLmpzb24g4oCUIHByb2plY3QtbG9jYWwg66qo65Oc7JeQ7ISc66eMLCDsl4bsnYQg65WM66eMIOyDneyEsVxuICBpZiAob3B0aW9ucy5jb3B5UHJvamVjdFRlbXBsYXRlcykge1xuICAgIGNvbnN0IHNldHRpbmdzTG9jYWxQYXRoID0gcGF0aC5qb2luKGNsYXVkZURpciwgXCJzZXR0aW5ncy5sb2NhbC5qc29uXCIpO1xuICAgIGlmICghKGF3YWl0IGV4aXN0cyhzZXR0aW5nc0xvY2FsUGF0aCkpKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBzZXR0aW5nc0NvbnRlbnQgPSB7XG4gICAgICAgICAgaG9va3M6IHtcbiAgICAgICAgICAgIFBvc3RUb29sVXNlOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBtYXRjaGVyOiBcIkVkaXR8V3JpdGV8TXVsdGlFZGl0XCIsXG4gICAgICAgICAgICAgICAgaG9va3M6IFtcbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJjb21tYW5kXCIsXG4gICAgICAgICAgICAgICAgICAgIGNvbW1hbmQ6IFwicG5wbSBiaW9tZSBjaGVjayAtLWNoYW5nZWQgMj4mMSB8IGhlYWQgLTYwXCIsXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBdLFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICAgIGF3YWl0IHdyaXRlRmlsZShzZXR0aW5nc0xvY2FsUGF0aCwgYCR7SlNPTi5zdHJpbmdpZnkoc2V0dGluZ3NDb250ZW50LCBudWxsLCAyKX1cXG5gKTtcbiAgICAgICAgY29uc29sZS5sb2coY2hhbGsuZ3JlZW4oYOKckyAuY2xhdWRlL3NldHRpbmdzLmxvY2FsLmpzb24gY3JlYXRlZGApKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgY2hhbGsucmVkKFxuICAgICAgICAgICAgYOKclyBGYWlsZWQgdG8gY3JlYXRlIHNldHRpbmdzLmxvY2FsLmpzb246ICR7ZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpfWAsXG4gICAgICAgICAgKSxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5sb2coY2hhbGsuZGltKGDij60gLmNsYXVkZS9zZXR0aW5ncy5sb2NhbC5qc29uIGFscmVhZHkgZXhpc3RzIChwcmVzZXJ2ZWQpYCkpO1xuICAgIH1cbiAgfVxuXG4gIC8vIENMQVVERS5tZCDrs7Xsgqwv7JeF642w7J207Yq4XG4gIGlmIChhd2FpdCBleGlzdHMoc291cmNlQ2xhdWRlTWQpKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHRhcmdldENsYXVkZU1kID0gcGF0aC5qb2luKGNsYXVkZURpciwgXCJDTEFVREUubWRcIik7XG4gICAgICBjb25zdCByYXdDb250ZW50ID0gYXdhaXQgcmVhZEZpbGUoc291cmNlQ2xhdWRlTWQsIFwidXRmLThcIik7XG4gICAgICAvLyDquIDroZzrsowg66qo65Oc7JeQ7ISc64qUIOyDgeuMgCDqsr3roZzrpbwg7KCI64yAIOqyveuhnOuhnCDrs4DtmZjtlanri4jri6RcbiAgICAgIGNvbnN0IHNvdXJjZUNvbnRlbnQgPSBvcHRpb25zLmlzR2xvYmFsXG4gICAgICAgID8gcmF3Q29udGVudC5yZXBsYWNlQWxsKFwiLmNsYXVkZS9za2lsbHMvc29uYW11L1wiLCBcIn4vLmNsYXVkZS9za2lsbHMvc29uYW11L1wiKVxuICAgICAgICA6IHJhd0NvbnRlbnQ7XG5cbiAgICAgIGlmIChhd2FpdCBleGlzdHModGFyZ2V0Q2xhdWRlTWQpKSB7XG4gICAgICAgIGNvbnN0IHRhcmdldENvbnRlbnQgPSBhd2FpdCByZWFkRmlsZSh0YXJnZXRDbGF1ZGVNZCwgXCJ1dGYtOFwiKTtcbiAgICAgICAgY29uc3Qgc3RhcnRNYXJrZXIgPSBcIjwhLS0gU09OQU1VOlNUQVJUIC0tPlwiO1xuICAgICAgICBjb25zdCBlbmRNYXJrZXIgPSBcIjwhLS0gU09OQU1VOkVORCAtLT5cIjtcbiAgICAgICAgaWYgKHRhcmdldENvbnRlbnQuaW5jbHVkZXMoc3RhcnRNYXJrZXIpICYmIHRhcmdldENvbnRlbnQuaW5jbHVkZXMoZW5kTWFya2VyKSkge1xuICAgICAgICAgIGNvbnN0IHN0YXJ0SWR4ID0gdGFyZ2V0Q29udGVudC5pbmRleE9mKHN0YXJ0TWFya2VyKTtcbiAgICAgICAgICBjb25zdCBlbmRJZHggPSB0YXJnZXRDb250ZW50LmluZGV4T2YoZW5kTWFya2VyKTtcblxuICAgICAgICAgIGlmIChzdGFydElkeCAhPT0gLTEgJiYgZW5kSWR4ICE9PSAtMSAmJiBzdGFydElkeCA8IGVuZElkeCkge1xuICAgICAgICAgICAgY29uc3QgYmVmb3JlID0gdGFyZ2V0Q29udGVudC5zdWJzdHJpbmcoMCwgc3RhcnRJZHgpO1xuICAgICAgICAgICAgY29uc3QgYWZ0ZXIgPSB0YXJnZXRDb250ZW50LnN1YnN0cmluZyhlbmRJZHggKyBlbmRNYXJrZXIubGVuZ3RoKTtcbiAgICAgICAgICAgIGNvbnN0IG5ld0NvbnRlbnQgPSBgJHtiZWZvcmV9JHtzdGFydE1hcmtlcn1cXG4ke3NvdXJjZUNvbnRlbnR9XFxuJHtlbmRNYXJrZXJ9JHthZnRlcn1gO1xuICAgICAgICAgICAgYXdhaXQgd3JpdGVGaWxlKHRhcmdldENsYXVkZU1kLCBuZXdDb250ZW50KTtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyZWVuKGDinJMgQ0xBVURFLm1kIHVwZGF0ZWQgKG1hcmtlciByZWdpb24pYCkpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhjaGFsay55ZWxsb3coYOKPrSBDTEFVREUubWQgbWFya2VyIHBvc2l0aW9ucyBpbnZhbGlkLCBza2lwcGVkYCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyDrp4jsu6TqsIAg7JeG64qUIOq4sOyhtCBDTEFVREUubWTsl5AgU29uYW11IOyEueyFmOydhCDstpTqsIDtlanri4jri6RcbiAgICAgICAgICBjb25zdCBhcHBlbmRlZCA9IGAke3RhcmdldENvbnRlbnQudHJpbUVuZCgpfVxcblxcbjwhLS0gU09OQU1VOlNUQVJUIC0tPlxcbiR7c291cmNlQ29udGVudH1cXG48IS0tIFNPTkFNVTpFTkQgLS0+XFxuYDtcbiAgICAgICAgICBhd2FpdCB3cml0ZUZpbGUodGFyZ2V0Q2xhdWRlTWQsIGFwcGVuZGVkKTtcbiAgICAgICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmVlbihg4pyTIENMQVVERS5tZCB1cGRhdGVkIChhcHBlbmRlZCBTb25hbXUgc2VjdGlvbilgKSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHdpdGhNYXJrZXJzID0gYDwhLS0gU09OQU1VOlNUQVJUIC0tPlxcbiR7c291cmNlQ29udGVudH1cXG48IS0tIFNPTkFNVTpFTkQgLS0+XFxuYDtcbiAgICAgICAgYXdhaXQgd3JpdGVGaWxlKHRhcmdldENsYXVkZU1kLCB3aXRoTWFya2Vycyk7XG4gICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyZWVuKGDinJMgQ0xBVURFLm1kIGNyZWF0ZWRgKSk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgIGNoYWxrLnJlZChcbiAgICAgICAgICBg4pyXIEZhaWxlZCB0byB1cGRhdGUgQ0xBVURFLm1kOiAke2Vycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKX1gLFxuICAgICAgICApLFxuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gc2tpbGxzQ29weShzcmM6IHN0cmluZywgZGVzdDogc3RyaW5nKSB7XG4gIHRyeSB7XG4gICAgYXdhaXQgY3Aoc3JjLCBkZXN0LCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICBjb25zb2xlLmxvZyhjaGFsay5ncmVlbihg4pyTIFNraWxscyBjb3BpZWRgKSk7XG4gIH0gY2F0Y2ggKGNvcHlFcnJvcikge1xuICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICBjaGFsay5yZWQoXG4gICAgICAgIGDinJcgRmFpbGVkIHRvIGNvcHkgc2tpbGxzOiAke2NvcHlFcnJvciBpbnN0YW5jZW9mIEVycm9yID8gY29weUVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoY29weUVycm9yKX1gLFxuICAgICAgKSxcbiAgICApO1xuICAgIHRocm93IGNvcHlFcnJvcjtcbiAgfVxufVxuXG4vKipcbiAqIHBucG0gc29uYW11IHNraWxscyBjcmVhdGUgPG5hbWU+IO2VmOuptCDsi6TtlonrkJjripQg7ZWo7IiY7J6F64uI64ukLlxuICog66Gc7LusIHNraWxsIOy0iOyViOydhCDsg53shLHtlanri4jri6QuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHNraWxsc19jcmVhdGUobmFtZTogc3RyaW5nKSB7XG4gIGNvbnN0IHdvcmtzcGFjZVJvb3QgPSBhd2FpdCBmaW5kV29ya3NwYWNlUm9vdCgpO1xuICBjb25zdCBsb2NhbERpciA9IHBhdGguam9pbih3b3Jrc3BhY2VSb290LCBcIi5jbGF1ZGVcIiwgXCJza2lsbHNcIiwgXCJsb2NhbFwiKTtcblxuICAvLyA9PT0g7YyM7J2866qFIOqygOymnSDrsI8gU2FuaXRpemUgPT09XG4gIGlmICghbmFtZSB8fCBuYW1lLnRyaW0oKSA9PT0gXCJcIikge1xuICAgIGNvbnNvbGUuZXJyb3IoY2hhbGsucmVkKFwi4pyXIFNraWxsIG5hbWUgaXMgcmVxdWlyZWRcIikpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGxldCBzYW5pdGl6ZWQgPSBuYW1lXG4gICAgLy8g6rO167Cx7J2EIO2VmOydtO2UiOycvOuhnFxuICAgIC5yZXBsYWNlKC9cXHMrL2csIFwiLVwiKVxuICAgIC8vIOqyveuhnCDqtazrtoTsnpAg7KCc6rGwXG4gICAgLnJlcGxhY2UoL1svXFxcXF0vZywgXCItXCIpXG4gICAgLy8gUGF0aCB0cmF2ZXJzYWwg67Cp7KeAXG4gICAgLnJlcGxhY2UoL1xcLlxcLi9nLCBcIlwiKVxuICAgIC8vIFdpbmRvd3Mg6riI7KeAIOusuOyekCDsoJzqsbBcbiAgICAucmVwbGFjZSgvWzw+OlwifD8qXS9nLCBcIlwiKVxuICAgIC8vIOyLnOyekS/rgZ0g7KCQLCDtlZjsnbTtlIgsIOyWuOuNlOyKpOy9lOyWtCDsoJzqsbBcbiAgICAucmVwbGFjZSgvXlsuXFwtX10rfFsuXFwtX10rJC9nLCBcIlwiKVxuICAgIC8vIOyXsOyGjeuQnCDtlZjsnbTtlIjsnYQg7ZWY64KY66GcXG4gICAgLnJlcGxhY2UoLy0rL2csIFwiLVwiKVxuICAgIC8vIOyVjO2MjOuysywg7Iir7J6QLCDtlZjsnbTtlIgsIOyWuOuNlOyKpOy9lOyWtCwg7ZWc6riA66eMIO2XiOyaqVxuICAgIC5yZXBsYWNlKC9bXmEtekEtWjAtOS1f6rCALe2eo10vZywgXCJcIik7XG5cbiAgLy8g6ri47J20IOygnO2VnFxuICBjb25zdCBNQVhfTEVOR1RIID0gMTAwO1xuICBpZiAoc2FuaXRpemVkLmxlbmd0aCA+IE1BWF9MRU5HVEgpIHtcbiAgICBzYW5pdGl6ZWQgPSBzYW5pdGl6ZWQuc3Vic3RyaW5nKDAsIE1BWF9MRU5HVEgpO1xuICAgIGNvbnNvbGUubG9nKGNoYWxrLnllbGxvdyhg4pqgIE5hbWUgdHJ1bmNhdGVkIHRvICR7TUFYX0xFTkdUSH0gY2hhcmFjdGVyc2ApKTtcbiAgfVxuXG4gIC8vIFdpbmRvd3Mg7JiI7JW97Ja0IO2ZleyduFxuICBjb25zdCBSRVNFUlZFRF9OQU1FUyA9IFtcbiAgICBcIkNPTlwiLFxuICAgIFwiUFJOXCIsXG4gICAgXCJBVVhcIixcbiAgICBcIk5VTFwiLFxuICAgIFwiQ09NMVwiLFxuICAgIFwiQ09NMlwiLFxuICAgIFwiQ09NM1wiLFxuICAgIFwiQ09NNFwiLFxuICAgIFwiQ09NNVwiLFxuICAgIFwiQ09NNlwiLFxuICAgIFwiQ09NN1wiLFxuICAgIFwiQ09NOFwiLFxuICAgIFwiQ09NOVwiLFxuICAgIFwiTFBUMVwiLFxuICAgIFwiTFBUMlwiLFxuICAgIFwiTFBUM1wiLFxuICAgIFwiTFBUNFwiLFxuICAgIFwiTFBUNVwiLFxuICAgIFwiTFBUNlwiLFxuICAgIFwiTFBUN1wiLFxuICAgIFwiTFBUOFwiLFxuICAgIFwiTFBUOVwiLFxuICBdO1xuICBpZiAoUkVTRVJWRURfTkFNRVMuaW5jbHVkZXMoc2FuaXRpemVkLnRvVXBwZXJDYXNlKCkpKSB7XG4gICAgc2FuaXRpemVkID0gYHNraWxsLSR7c2FuaXRpemVkfWA7XG4gICAgY29uc29sZS5sb2coY2hhbGsueWVsbG93KGDimqAgUmVzZXJ2ZWQgbmFtZSBkZXRlY3RlZCwgcHJlZml4ZWQgd2l0aCBcInNraWxsLVwiYCkpO1xuICB9XG5cbiAgLy8g67mIIOusuOyekOyXtCDssrTtgaxcbiAgaWYgKHNhbml0aXplZCA9PT0gXCJcIikge1xuICAgIGNvbnNvbGUuZXJyb3IoY2hhbGsucmVkKFwi4pyXIEludmFsaWQgc2tpbGwgbmFtZSBhZnRlciBzYW5pdGl6YXRpb25cIikpO1xuICAgIGNvbnNvbGUubG9nKGNoYWxrLmRpbShgICBPcmlnaW5hbDogXCIke25hbWV9XCJgKSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8g67OA6rK9IOyVjOumvFxuICBpZiAoc2FuaXRpemVkICE9PSBuYW1lKSB7XG4gICAgY29uc29sZS5sb2coY2hhbGsueWVsbG93KGDimqAgTmFtZSBzYW5pdGl6ZWQ6IFwiJHtuYW1lfVwiIOKGkiBcIiR7c2FuaXRpemVkfVwiYCkpO1xuICB9XG5cbiAgY29uc3QgZmlsZVBhdGggPSBwYXRoLmpvaW4obG9jYWxEaXIsIGAke3Nhbml0aXplZH0ubWRgKTtcblxuICBpZiAoYXdhaXQgZXhpc3RzKGZpbGVQYXRoKSkge1xuICAgIGNvbnNvbGUubG9nKGNoYWxrLnllbGxvdyhgU2tpbGwgXCIke3Nhbml0aXplZH1cIiBhbHJlYWR5IGV4aXN0cy5gKSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgYXdhaXQgbWtkaXIobG9jYWxEaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuXG4gIGNvbnN0IHRlbXBsYXRlID0gYC0tLVxubmFtZTogJHtzYW5pdGl6ZWR9XG5jYXRlZ29yeTogb3RoZXJcbmNyZWF0ZWRfYXQ6ICR7bmV3IERhdGUoKS50b0lTT1N0cmluZygpLnNwbGl0KFwiVFwiKVswXX1cbnN0YXR1czogZHJhZnRcbi0tLVxuXG4jICR7c2FuaXRpemVkfVxuXG4jIyDsg4HtmalcblxuW+yWtOuWpCDrrLjsoJzsmIDripTsp4BdXG5cbiMjIO2VtOqysCDrsKnrspVcblxuW+yWtOuWu+qyjCDtlbTqsrDtlojripTsp4BdXG5cbiMjIOy9lOuTnCDsmIjsi5xcblxuXFxgXFxgXFxgdHlwZXNjcmlwdFxuLy8g7JiI7IucIOy9lOuTnFxuXFxgXFxgXFxgXG5gO1xuXG4gIGF3YWl0IHdyaXRlRmlsZShmaWxlUGF0aCwgdGVtcGxhdGUpO1xuICBjb25zb2xlLmxvZyhjaGFsay5ncmVlbihg4pyTIENyZWF0ZWQgLmNsYXVkZS9za2lsbHMvbG9jYWwvJHtzYW5pdGl6ZWR9Lm1kYCkpO1xufVxuXG4vKipcbiAqIHBucG0gc29uYW11IGF1dGggZ2VuZXJhdGUg7ZWY66m0IOyLpO2WieuQmOuKlCDtlajsiJjsnoXri4jri6QuXG4gKiBiZXR0ZXItYXV0aCDsl5Tti7Dti7Drk6QoVXNlciwgU2Vzc2lvbiwgQWNjb3VudCwgVmVyaWZpY2F0aW9uKeydhCDsg53shLHtlanri4jri6QuXG4gKlxuICog7Ji17IWYOlxuICogLS1wbHVnaW5zIHBob25lLW51bWJlciwyZmEgIO2UjOufrOq3uOyduCDsl5Tti7Dti7Drj4Qg7ZWo6ruYIOyDneyEsVxuICovXG5hc3luYyBmdW5jdGlvbiBhdXRoX2dlbmVyYXRlKCkge1xuICAvLyAtLXBsdWdpbnMg7Ji17IWYIO2MjOyLsVxuICBjb25zdCBwbHVnaW5zQXJnID0gcHJvY2Vzcy5hcmd2LmZpbmQoKGFyZykgPT4gYXJnLnN0YXJ0c1dpdGgoXCItLXBsdWdpbnNcIikpO1xuICBjb25zdCBwbHVnaW5zOiBCZXR0ZXJBdXRoUGx1Z2luSWRbXSA9IFtdO1xuXG4gIGlmIChwbHVnaW5zQXJnKSB7XG4gICAgY29uc3QgcGx1Z2luVmFsdWUgPSBwbHVnaW5zQXJnLmluY2x1ZGVzKFwiPVwiKVxuICAgICAgPyBwbHVnaW5zQXJnLnNwbGl0KFwiPVwiKVsxXVxuICAgICAgOiBwcm9jZXNzLmFyZ3ZbcHJvY2Vzcy5hcmd2LmluZGV4T2YocGx1Z2luc0FyZykgKyAxXTtcblxuICAgIGlmIChwbHVnaW5WYWx1ZSkge1xuICAgICAgY29uc3QgcGx1Z2luSWRzID0gcGx1Z2luVmFsdWUuc3BsaXQoXCIsXCIpLm1hcCgocCkgPT4gcC50cmltKCkpO1xuXG4gICAgICBmb3IgKGNvbnN0IGlkIG9mIHBsdWdpbklkcykge1xuICAgICAgICBpZiAoaXNWYWxpZFBsdWdpbklkKGlkKSkge1xuICAgICAgICAgIHBsdWdpbnMucHVzaChpZCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc29sZS5sb2coY2hhbGsueWVsbG93KGDimqAgVW5rbm93biBwbHVnaW46ICR7aWR9YCkpO1xuICAgICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmRpbShgICBTdXBwb3J0ZWQgcGx1Z2luczogJHtTVVBQT1JURURfUExVR0lOX0lEUy5qb2luKFwiLCBcIil9YCkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY29uc29sZS5sb2coY2hhbGsueWVsbG93LmJvbGQoXCLwn5SQIEdlbmVyYXRpbmcgYmV0dGVyLWF1dGggZW50aXRpZXMuLi5cXG5cIikpO1xuXG4gIGlmIChwbHVnaW5zLmxlbmd0aCA+IDApIHtcbiAgICBjb25zb2xlLmxvZyhjaGFsay5kaW0oYCAgUGx1Z2luczogJHtwbHVnaW5zLmpvaW4oXCIsIFwiKX1gKSk7XG4gIH1cblxuICBhd2FpdCBnZW5lcmF0ZUJldHRlckF1dGhFbnRpdGllcyh7IHBsdWdpbnMgfSk7XG59XG5cbi8qKlxuICogcG5wbSBzb25hbXUgYXV0aCBhZGQtY29tcGFuaW9ucyDtlZjrqbQg7Iuk7ZaJ65CY64qUIO2VqOyImOyeheuLiOuLpC5cbiAqIOq4sOyhtCDtlITroZzsoJ3tirjsnZggZW50aXR5Lmpzb27sl5AgZml4dHVyZUNvbXBhbmlvbnPrpbwg7IaM6riJIOy2lOqwgO2VqeuLiOuLpC5cbiAqXG4gKiDsnbTrr7ggZml4dHVyZUNvbXBhbmlvbnPqsIAg7J6I64qUIGVudGl0eeuKlCDsiqTtgrXtlanri4jri6QgKOuNruyWtOyTsOq4sCDsl4bsnYwpLlxuICovXG5hc3luYyBmdW5jdGlvbiBhdXRoX2FkZF9jb21wYW5pb25zKCkge1xuICBjb25zb2xlLmxvZyhjaGFsay55ZWxsb3cuYm9sZChcIvCflJAgQWRkaW5nIGZpeHR1cmVDb21wYW5pb25zIHRvIGJldHRlci1hdXRoIGVudGl0aWVzLi4uXFxuXCIpKTtcbiAgYXdhaXQgYWRkQ29tcGFuaW9uc1RvRW50aXRpZXMoKTtcbiAgY29uc29sZS5sb2coY2hhbGsuYm9sZChcIlxcbuKchSBEb25lIVwiKSk7XG59XG5cbi8qKlxuICog7JuM7YGs7Iqk7Y6Y7J207IqkIOujqO2KuOulvCDssL7sirXri4jri6QuXG4gKiDsmrDshKDsiJzsnIQ6IHBucG0td29ya3NwYWNlLnlhbWwgPiBDTEFVREUubWQgPiDro6jtirggcGFja2FnZS5qc29uICh3b3Jrc3BhY2VzIO2VhOuTnClcbiAqL1xuYXN5bmMgZnVuY3Rpb24gZmluZFdvcmtzcGFjZVJvb3QoKSB7XG4gIGxldCBkaXIgPSBwcm9jZXNzLmN3ZCgpO1xuXG4gIHdoaWxlIChkaXIgIT09IHBhdGguZGlybmFtZShkaXIpKSB7XG4gICAgLy8gMS4gcG5wbS13b3Jrc3BhY2UueWFtbCDtjIzsnbzsnbQg7J6I64qU7KeAIO2ZleyduC4g7J6I7Jy866m0IO2ZleyLpO2VnCBtb25vcmVwbyDro6jtirguXG4gICAgaWYgKGF3YWl0IGV4aXN0cyhwYXRoLmpvaW4oZGlyLCBcInBucG0td29ya3NwYWNlLnlhbWxcIikpKSB7XG4gICAgICByZXR1cm4gZGlyO1xuICAgIH1cblxuICAgIC8vIDIuIENMQVVERS5tZCDtjIzsnbzsnbQg7J6I64qU7KeAIO2ZleyduC4g7J6I7Jy866m0IO2UhOuhnOygne2KuCDro6jtirjroZwg6rCE7KO87ZWoLlxuICAgIGlmIChhd2FpdCBleGlzdHMocGF0aC5qb2luKGRpciwgXCJDTEFVREUubWRcIikpKSB7XG4gICAgICByZXR1cm4gZGlyO1xuICAgIH1cblxuICAgIC8vIDMuIHBhY2thZ2UuanNvbuyXkCB3b3Jrc3BhY2VzIO2VhOuTnOqwgCDsnojsnLzrqbQg66Oo7Yq4LlxuICAgIGNvbnN0IHBhY2thZ2VQYXRoID0gcGF0aC5qb2luKGRpciwgXCJwYWNrYWdlLmpzb25cIik7XG4gICAgaWYgKGF3YWl0IGV4aXN0cyhwYWNrYWdlUGF0aCkpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHBhY2thZ2VKc29uID0gSlNPTi5wYXJzZShhd2FpdCByZWFkRmlsZShwYWNrYWdlUGF0aCwgXCJ1dGYtOFwiKSk7XG4gICAgICAgIGlmIChwYWNrYWdlSnNvbi53b3Jrc3BhY2VzKSB7XG4gICAgICAgICAgcmV0dXJuIGRpcjtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIC8vIO2MjOyLsSDsi6TtjKjsi5wg66y07IucXG4gICAgICB9XG4gICAgfVxuICAgIGRpciA9IHBhdGguZGlybmFtZShkaXIpO1xuICB9XG5cbiAgLy8g7LC+7KeAIOuqu+2VmOuptCBhcGkg7Y+0642U7J2YIOu2gOuqqCDsgqzsmqlcbiAgcmV0dXJuIGZpbmRBcHBSb290UGF0aCgpO1xufVxuIl0sIm5hbWVzIjpbImNoYWxrIiwiZG90ZW52IiwiY29uZmlnIiwiYXNzZXJ0IiwiZXhlY1N5bmMiLCJzcGF3biIsImNwIiwibWtkaXIiLCJyZWFkZGlyIiwicmVhZEZpbGUiLCJybSIsInN5bWxpbmsiLCJ3cml0ZUZpbGUiLCJrbmV4IiwiY3JlYXRlUmVxdWlyZSIsIm9zIiwicGF0aCIsInByb2Nlc3MiLCJ0c2ljbGkiLCJTb25hbXUiLCJhZGRDb21wYW5pb25zVG9FbnRpdGllcyIsImdlbmVyYXRlQmV0dGVyQXV0aEVudGl0aWVzIiwiaXNWYWxpZFBsdWdpbklkIiwiU1VQUE9SVEVEX1BMVUdJTl9JRFMiLCJFbnRpdHlNYW5hZ2VyIiwiTWlncmF0b3IiLCJGaXh0dXJlTWFuYWdlciIsImV4ZWNXaXRoTGluZVByZWZpeCIsInByaW50QnVpbGRTdW1tYXJ5IiwicHJpbnRUYXNrRmFpbGVkIiwicHJpbnRUYXNrSGVhZGVyIiwicHJpbnRUYXNrU3RhcnQiLCJwcmludFRhc2tTdWNjZXNzIiwiZXhpc3RzIiwiZmluZEFwaVJvb3RQYXRoIiwiZmluZEFwcFJvb3RQYXRoIiwiQVBJX0FSVElGQUNUUyIsIldFQl9BUlRJRkFDVFMiLCJmaXh0dXJlRXhwbG9yZUNvbW1hbmQiLCJmaXh0dXJlRmV0Y2hDb21tYW5kIiwiZml4dHVyZUdlbkNvbW1hbmQiLCJ0ZXN0Q29tbWFuZCIsIm1pZ3JhdG9yIiwicGFyc2VDbGlPcHRpb25zIiwiYXJndiIsImZsYWdzIiwiU2V0Iiwib3B0aW9ucyIsImkiLCJsZW5ndGgiLCJhcmciLCJzdGFydHNXaXRoIiwiaW5jbHVkZXMiLCJrZXkiLCJ2YWx1ZSIsInNsaWNlIiwic3BsaXQiLCJuZXh0QXJnIiwiYWRkIiwiYm9vdHN0cmFwIiwibm90VG9Jbml0IiwiaW5pdCIsImZpbHRlcmVkQXJndiIsInNraXBOZXh0IiwiYWZ0ZXJEb3VibGVEYXNoIiwicHVzaCIsImNtZCIsInR5cGVzIiwidHlwZSIsIm5hbWUiLCJtZXNzYWdlIiwiY2hvaWNlcyIsImdldEFsbFBhcmVudElkcyIsIm1hcCIsImVudGl0eUlkIiwidGl0bGUiLCJhcmdzIiwicnVubmVycyIsIm1pZ3JhdGVfc3RhdHVzIiwibWlncmF0ZV9ydW4iLCJtaWdyYXRlX2FwcGx5IiwiZml4dHVyZV9pbml0IiwiZml4dHVyZV9pbXBvcnQiLCJmaXh0dXJlX3N5bmMiLCJmaXh0dXJlX2dlbiIsImZpeHR1cmVfZmV0Y2giLCJmaXh0dXJlX2V4cGxvcmUiLCJzdHViX3ByYWN0aWNlIiwic3R1Yl9lbnRpdHkiLCJzY2FmZm9sZF9tb2RlbCIsInNjYWZmb2xkX21vZGVsX3Rlc3QiLCJjb25lX2dlbiIsInN5bmMiLCJidWlsZF9hbGwiLCJidWlsZF9hcGkiLCJidWlsZF93ZWIiLCJkZXZfYWxsIiwiZGV2X2FwaSIsImRldl93ZWIiLCJzdGFydCIsInNraWxsc19zeW5jIiwic2tpbGxzX2NyZWF0ZSIsInRlc3QiLCJhdXRoX2dlbmVyYXRlIiwiYXV0aF9hZGRfY29tcGFuaW9ucyIsImRlc3Ryb3kiLCJmaW5hbGx5Iiwic3luY2VyIiwic3Bhd25BcGlEZXZTZXJ2ZXIiLCJhcGlSb290IiwiZW50cnlQb2ludCIsImhvdFJ1bm5lckJpblBhdGgiLCJ1cmwiLCJyZXNvbHZlIiwic2VydmVyUHJvY2VzcyIsImV4ZWNQYXRoIiwiam9pbiIsImN3ZCIsInN0ZGlvIiwiZW52IiwiTk9ERV9FTlYiLCJIT1QiLCJBUElfUk9PVF9QQVRIIiwiZXh0cmFFbnYiLCJjbGVhbnVwIiwiY29uc29sZSIsImxvZyIsInllbGxvdyIsImtpbGwiLCJleGl0Iiwib24iLCJjb2RlIiwiZXJyb3IiLCJyZWQiLCJib2xkIiwiU09OQU1VX0RJU0FCTEVfSU5URUdSQVRFRF9XRUIiLCJhcHBSb290Iiwid2ViUGF0aCIsImRvdWJsZURhc2hJbmRleCIsImluZGV4T2YiLCJwYXNzdGhyb3VnaEFyZ3MiLCJ2aXRlQXJncyIsInZpdGVQcm9jZXNzIiwic2lnbmFsIiwicmVzb2x2ZVN3Y0NvbmZpZ1BhdGgiLCJzd2NGaWxlUGF0aCIsImRpbSIsImRpcm5hbWUiLCJza2lwSWZNaXNzaW5nIiwiYXBpU3RhcnRlZEF0IiwiRGF0ZSIsIm5vdyIsImFydGlmYWN0IiwicHJvamVjdFBhdGgiLCJkZXNjcmlwdGlvbiIsInJ1bkJ1aWxkU3RlcHMiLCJidWlsZENvbW1hbmRBcmdzIiwiY29uZmlnRmlsZVBhdGgiLCJlIiwiZ3JheSIsIndlYlN0YXJ0ZWRBdCIsInN0ZXBzIiwicHJlQnVpbGRDb21tYW5kIiwiYnVpbGRDb21tYW5kIiwicG9zdEJ1aWxkQ29tbWFuZCIsImZpbHRlciIsInN0ZXAiLCJpc0xhc3QiLCJFcnJvciIsImNhdXNlIiwiYmx1ZSIsInNldHVwTWlncmF0b3IiLCJzZXR1cEZpeHR1cmVNYW5hZ2VyIiwidGFyZ2V0cyIsInJ1bkFjdGlvbiIsImxvY2FsSG9zdHMiLCJPYmplY3QiLCJrZXlzIiwiZGJDb25maWciLCJ0YXJnZXQiLCJ0YXJnZXRDb25maWciLCJob3N0IiwiY29ubmVjdGlvbiIsInRvTG93ZXJDYXNlIiwic3RhdHVzIiwiZ2V0U3RhdHVzIiwic3JjQ29uZmlnIiwiZGV2ZWxvcG1lbnRfbWFzdGVyIiwibGFiZWwiLCJmaXh0dXJlIiwidG9Ta2lwIiwicmVtb3RlQ29ubiIsImxvY2FsQ29ubiIsImRhdGFiYXNlIiwiZHVtcEZpbGVuYW1lIiwic3JjQ29ubiIsIm1pZ3JhdGlvbnNEdW1wIiwidXNlciIsInBhc3N3b3JkIiwiX2RiIiwibWlncmF0aW9ucyIsInJhdyIsImNvdW50IiwiY29ubiIsImRiIiwidW5kZWZpbmVkIiwicm93IiwibXlzcWxDbWQiLCJyZWNvcmRJZHMiLCJpbXBvcnRGaXh0dXJlIiwicGFyc2VPcHRpb25zIiwiXyIsImsiLCJ2IiwibmV4dCIsInByYWN0aWNlRGlyIiwiYXBpUm9vdFBhdGgiLCJmaWxlTmFtZXMiLCJtYXhTZXFObyIsInJlY3Vyc2l2ZSIsImZpbHRlcmVkU2VxcyIsImZpbGVOYW1lIiwiZW5kc1dpdGgiLCJzZXFObyIsIm1hdGNoIiwicGFyc2VJbnQiLCJzb3J0IiwiYSIsImIiLCJjdXJyZW50U2VxTm8iLCJkc3RQYXRoIiwicnVuQ29kZSIsInJlcGxhY2UiLCJjcmVhdGVFbnRpdHkiLCJ1c2VBSSIsImhhcyIsIm5vQ29uZXMiLCJlbnRpdHkiLCJnZXQiLCJjb25maWdMb2NhbGUiLCJpMThuIiwiZGVmYXVsdExvY2FsZSIsImxvY2FsZSIsInJlc3VsdCIsImdlbmVyYXRlQ29uZXMiLCJwcmVzZXJ2ZUV4aXN0aW5nIiwib25seUVtcHR5IiwidG9rZW5zVXNlZCIsImdlbmVyYXRlVGVtcGxhdGVDb25lcyIsImFsbEVudGl0aWVzIiwiZ2V0QWxsRW50aXRpZXMiLCJ0b3RhbFRva2VucyIsImVycm9ycyIsImlkIiwiZXN0aW1hdGVkQ29zdCIsInRvRml4ZWQiLCJlcnIiLCJtb2RlIiwiZ2VuZXJhdGVUZW1wbGF0ZSIsImlzR2xvYmFsIiwic291cmNlQmFzZSIsInNvdXJjZVNraWxsc0RpciIsInNvdXJjZUNsYXVkZU1kIiwic2tpbGxzX3N5bmNfdG8iLCJob21lZGlyIiwidXNlU3ltbGluayIsImNvcHlQcm9qZWN0VGVtcGxhdGVzIiwiY3lhbiIsIndvcmtzcGFjZVJvb3QiLCJmaW5kV29ya3NwYWNlUm9vdCIsImNsYXVkZURpciIsInRhcmdldFNraWxsc0RpciIsImZvcmNlIiwiZ3JlZW4iLCJTdHJpbmciLCJza2lsbHNDb3B5Iiwic291cmNlUHJvamVjdERpciIsInRhcmdldFByb2plY3REaXIiLCJzZXR0aW5nc0xvY2FsUGF0aCIsInNldHRpbmdzQ29udGVudCIsImhvb2tzIiwiUG9zdFRvb2xVc2UiLCJtYXRjaGVyIiwiY29tbWFuZCIsIkpTT04iLCJzdHJpbmdpZnkiLCJ0YXJnZXRDbGF1ZGVNZCIsInJhd0NvbnRlbnQiLCJzb3VyY2VDb250ZW50IiwicmVwbGFjZUFsbCIsInRhcmdldENvbnRlbnQiLCJzdGFydE1hcmtlciIsImVuZE1hcmtlciIsInN0YXJ0SWR4IiwiZW5kSWR4IiwiYmVmb3JlIiwic3Vic3RyaW5nIiwiYWZ0ZXIiLCJuZXdDb250ZW50IiwiYXBwZW5kZWQiLCJ0cmltRW5kIiwid2l0aE1hcmtlcnMiLCJzcmMiLCJkZXN0IiwiY29weUVycm9yIiwibG9jYWxEaXIiLCJ0cmltIiwic2FuaXRpemVkIiwiTUFYX0xFTkdUSCIsIlJFU0VSVkVEX05BTUVTIiwidG9VcHBlckNhc2UiLCJmaWxlUGF0aCIsInRlbXBsYXRlIiwidG9JU09TdHJpbmciLCJwbHVnaW5zQXJnIiwiZmluZCIsInBsdWdpbnMiLCJwbHVnaW5WYWx1ZSIsInBsdWdpbklkcyIsInAiLCJkaXIiLCJwYWNrYWdl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