sonamu 0.8.25 → 0.8.27

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 (55) hide show
  1. package/dist/auth/knex-adapter.d.ts.map +1 -1
  2. package/dist/auth/knex-adapter.js +7 -3
  3. package/dist/cone/cone-generator.js +3 -3
  4. package/dist/database/base-model.d.ts.map +1 -1
  5. package/dist/database/base-model.js +3 -4
  6. package/dist/database/puri-subset.test-d.js +9 -1
  7. package/dist/database/puri-subset.types.d.ts +1 -1
  8. package/dist/database/puri-subset.types.d.ts.map +1 -1
  9. package/dist/database/puri-subset.types.js +1 -1
  10. package/dist/database/puri.d.ts +6 -6
  11. package/dist/database/puri.d.ts.map +1 -1
  12. package/dist/database/puri.js +1 -1
  13. package/dist/database/puri.types.d.ts +2 -1
  14. package/dist/database/puri.types.d.ts.map +1 -1
  15. package/dist/database/puri.types.js +1 -1
  16. package/dist/database/upsert-builder.js +4 -4
  17. package/dist/tasks/workflow-manager.d.ts.map +1 -1
  18. package/dist/tasks/workflow-manager.js +3 -5
  19. package/dist/testing/bootstrap.d.ts.map +1 -1
  20. package/dist/testing/bootstrap.js +4 -8
  21. package/dist/testing/fixture-generator.js +5 -5
  22. package/dist/ui/ai-client.js +2 -2
  23. package/dist/ui/api.d.ts.map +1 -1
  24. package/dist/ui/api.js +14 -14
  25. package/dist/ui/cdd-service.d.ts +15 -18
  26. package/dist/ui/cdd-service.d.ts.map +1 -1
  27. package/dist/ui/cdd-service.js +246 -222
  28. package/dist/ui/cdd-types.d.ts +41 -68
  29. package/dist/ui/cdd-types.d.ts.map +1 -1
  30. package/dist/ui/cdd-types.js +2 -2
  31. package/dist/ui-web/assets/index-CKo0Z2Iu.css +1 -0
  32. package/dist/ui-web/assets/{index-CxiydzeC.js → index-DK-2aacv.js} +83 -83
  33. package/dist/ui-web/index.html +2 -2
  34. package/dist/utils/utils.d.ts +0 -1
  35. package/dist/utils/utils.d.ts.map +1 -1
  36. package/dist/utils/utils.js +1 -6
  37. package/package.json +8 -4
  38. package/src/auth/knex-adapter.ts +3 -2
  39. package/src/cone/cone-generator.ts +2 -2
  40. package/src/database/base-model.ts +2 -3
  41. package/src/database/puri-subset.test-d.ts +102 -0
  42. package/src/database/puri-subset.types.ts +1 -1
  43. package/src/database/puri.ts +6 -6
  44. package/src/database/puri.types.ts +2 -1
  45. package/src/database/upsert-builder.ts +4 -4
  46. package/src/skills/sonamu/SKILL.md +43 -0
  47. package/src/tasks/workflow-manager.ts +3 -5
  48. package/src/testing/bootstrap.ts +2 -6
  49. package/src/testing/fixture-generator.ts +4 -4
  50. package/src/ui/ai-client.ts +1 -1
  51. package/src/ui/api.ts +18 -17
  52. package/src/ui/cdd-service.ts +264 -254
  53. package/src/ui/cdd-types.ts +40 -75
  54. package/src/utils/utils.ts +0 -5
  55. package/dist/ui-web/assets/index-BrQKU3j9.css +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"knex-adapter.d.ts","sourceRoot":"","sources":["../../src/auth/knex-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAMrD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAGjC,UAAU,YAAY;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,EAAE,GAAG,MAAM,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC;IACrE,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,SAwGpB,SAAS,iBAAiB,uDAInC,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,UAAU,CACxB,KAAK,EAAE,IAAI,CAAC,YAAY,EACxB,UAAU,EAAE,YAAY,EAAE,GACzB,IAAI,CAAC,YAAY,CAmBnB"}
1
+ {"version":3,"file":"knex-adapter.d.ts","sourceRoot":"","sources":["../../src/auth/knex-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAMrD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAGjC,UAAU,YAAY;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,EAAE,GAAG,MAAM,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC;IACrE,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,SAyGpB,SAAS,iBAAiB,uDAInC,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,UAAU,CACxB,KAAK,EAAE,IAAI,CAAC,YAAY,EACxB,UAAU,EAAE,YAAY,EAAE,GACzB,IAAI,CAAC,YAAY,CAmBnB"}
@@ -8,7 +8,7 @@ import { DB } from "../database/db.js";
8
8
  */ export const sonamuKnexAdapter = ()=>{
9
9
  let lazyOptions = null;
10
10
  const createCustomAdapter = (getDb)=>{
11
- return ()=>({
11
+ return ({ getFieldName })=>({
12
12
  create: async ({ model, data })=>{
13
13
  const [row] = await getDb()(model).insert(data).returning("*");
14
14
  return row;
@@ -25,7 +25,11 @@ import { DB } from "../database/db.js";
25
25
  query = applyWhere(query, where);
26
26
  }
27
27
  if (sortBy) {
28
- query = query.orderBy(sortBy.field, sortBy.direction);
28
+ const dbField = getFieldName({
29
+ model,
30
+ field: sortBy.field
31
+ });
32
+ query = query.orderBy(dbField, sortBy.direction);
29
33
  }
30
34
  if (limit) {
31
35
  query = query.limit(limit);
@@ -156,4 +160,4 @@ function applyCondition(query, condition, method) {
156
160
  }
157
161
  }
158
162
 
159
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hdXRoL2tuZXgtYWRhcHRlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEJldHRlckF1dGhPcHRpb25zIH0gZnJvbSBcImJldHRlci1hdXRoXCI7XG5pbXBvcnQgdHlwZSB7XG4gIEFkYXB0ZXJGYWN0b3J5Q3VzdG9taXplQWRhcHRlckNyZWF0b3IsXG4gIERCVHJhbnNhY3Rpb25BZGFwdGVyLFxufSBmcm9tIFwiYmV0dGVyLWF1dGgvYWRhcHRlcnNcIjtcbmltcG9ydCB7IGNyZWF0ZUFkYXB0ZXJGYWN0b3J5IH0gZnJvbSBcImJldHRlci1hdXRoL2FkYXB0ZXJzXCI7XG5pbXBvcnQgdHlwZSB7IEtuZXggfSBmcm9tIFwia25leFwiO1xuaW1wb3J0IHsgREIgfSBmcm9tIFwiLi4vZGF0YWJhc2UvZGJcIjtcblxuaW50ZXJmYWNlIENsZWFuZWRXaGVyZSB7XG4gIGZpZWxkOiBzdHJpbmc7XG4gIHZhbHVlOiBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgc3RyaW5nW10gfCBudW1iZXJbXSB8IERhdGUgfCBudWxsO1xuICBvcGVyYXRvcjogc3RyaW5nO1xuICBjb25uZWN0b3I6IHN0cmluZztcbn1cblxuLyoqXG4gKiBiZXR0ZXItYXV0aOyaqSBTb25hbXUga25leCDslrTrjJHthLBcbiAqXG4gKiBiZXR0ZXItYXV0aOydmCDrqqjrk6Ag7L+866as66W8IERCLmdldERCKCnrpbwg7Ya17ZW0IOyLpO2Wie2VmOyXrFxuICogU29uYW11IO2FjOyKpO2KuCDtirjrnpzsnq3shZjqs7wg64+Z7J287ZWcIOy7pOuEpeyFmOydhCDqs7XsnKDtlanri4jri6QuXG4gKi9cbmV4cG9ydCBjb25zdCBzb25hbXVLbmV4QWRhcHRlciA9ICgpID0+IHtcbiAgbGV0IGxhenlPcHRpb25zOiBCZXR0ZXJBdXRoT3B0aW9ucyB8IG51bGwgPSBudWxsO1xuXG4gIGNvbnN0IGNyZWF0ZUN1c3RvbUFkYXB0ZXIgPSAoXG4gICAgZ2V0RGI6ICgpID0+IEtuZXggfCBLbmV4LlRyYW5zYWN0aW9uLFxuICApOiBBZGFwdGVyRmFjdG9yeUN1c3RvbWl6ZUFkYXB0ZXJDcmVhdG9yID0+IHtcbiAgICByZXR1cm4gKCkgPT4gKHtcbiAgICAgIGNyZWF0ZTogYXN5bmMgKHsgbW9kZWwsIGRhdGEgfSkgPT4ge1xuICAgICAgICBjb25zdCBbcm93XSA9IGF3YWl0IGdldERiKCkobW9kZWwpLmluc2VydChkYXRhKS5yZXR1cm5pbmcoXCIqXCIpO1xuICAgICAgICByZXR1cm4gcm93O1xuICAgICAgfSxcblxuICAgICAgZmluZE9uZTogYXN5bmMgKHsgbW9kZWwsIHdoZXJlIH0pID0+IHtcbiAgICAgICAgbGV0IHF1ZXJ5ID0gZ2V0RGIoKShtb2RlbCk7XG4gICAgICAgIHF1ZXJ5ID0gYXBwbHlXaGVyZShxdWVyeSwgd2hlcmUpO1xuICAgICAgICBjb25zdCByb3cgPSBhd2FpdCBxdWVyeS5maXJzdCgpO1xuICAgICAgICByZXR1cm4gcm93ID8/IG51bGw7XG4gICAgICB9LFxuXG4gICAgICBmaW5kTWFueTogYXN5bmMgKHsgbW9kZWwsIHdoZXJlLCBsaW1pdCwgb2Zmc2V0LCBzb3J0QnkgfSkgPT4ge1xuICAgICAgICBsZXQgcXVlcnkgPSBnZXREYigpKG1vZGVsKTtcbiAgICAgICAgaWYgKHdoZXJlKSB7XG4gICAgICAgICAgcXVlcnkgPSBhcHBseVdoZXJlKHF1ZXJ5LCB3aGVyZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNvcnRCeSkge1xuICAgICAgICAgIHF1ZXJ5ID0gcXVlcnkub3JkZXJCeShzb3J0QnkuZmllbGQsIHNvcnRCeS5kaXJlY3Rpb24pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsaW1pdCkge1xuICAgICAgICAgIHF1ZXJ5ID0gcXVlcnkubGltaXQobGltaXQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvZmZzZXQpIHtcbiAgICAgICAgICBxdWVyeSA9IHF1ZXJ5Lm9mZnNldChvZmZzZXQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhd2FpdCBxdWVyeTtcbiAgICAgIH0sXG5cbiAgICAgIHVwZGF0ZTogYXN5bmMgKHsgbW9kZWwsIHdoZXJlLCB1cGRhdGUgfSkgPT4ge1xuICAgICAgICBsZXQgcXVlcnkgPSBnZXREYigpKG1vZGVsKTtcbiAgICAgICAgcXVlcnkgPSBhcHBseVdoZXJlKHF1ZXJ5LCB3aGVyZSk7XG4gICAgICAgIGNvbnN0IFtyb3ddID0gYXdhaXQgcXVlcnkudXBkYXRlKHVwZGF0ZSkucmV0dXJuaW5nKFwiKlwiKTtcbiAgICAgICAgcmV0dXJuIHJvdyA/PyBudWxsO1xuICAgICAgfSxcblxuICAgICAgdXBkYXRlTWFueTogYXN5bmMgKHsgbW9kZWwsIHdoZXJlLCB1cGRhdGUgfSkgPT4ge1xuICAgICAgICBsZXQgcXVlcnkgPSBnZXREYigpKG1vZGVsKTtcbiAgICAgICAgcXVlcnkgPSBhcHBseVdoZXJlKHF1ZXJ5LCB3aGVyZSk7XG4gICAgICAgIGNvbnN0IGNvdW50ID0gYXdhaXQgcXVlcnkudXBkYXRlKHVwZGF0ZSk7XG4gICAgICAgIHJldHVybiBjb3VudDtcbiAgICAgIH0sXG5cbiAgICAgIGRlbGV0ZTogYXN5bmMgKHsgbW9kZWwsIHdoZXJlIH0pID0+IHtcbiAgICAgICAgbGV0IHF1ZXJ5ID0gZ2V0RGIoKShtb2RlbCk7XG4gICAgICAgIHF1ZXJ5ID0gYXBwbHlXaGVyZShxdWVyeSwgd2hlcmUpO1xuICAgICAgICBhd2FpdCBxdWVyeS5kZWwoKTtcbiAgICAgIH0sXG5cbiAgICAgIGRlbGV0ZU1hbnk6IGFzeW5jICh7IG1vZGVsLCB3aGVyZSB9KSA9PiB7XG4gICAgICAgIGxldCBxdWVyeSA9IGdldERiKCkobW9kZWwpO1xuICAgICAgICBxdWVyeSA9IGFwcGx5V2hlcmUocXVlcnksIHdoZXJlKTtcbiAgICAgICAgY29uc3QgY291bnQgPSBhd2FpdCBxdWVyeS5kZWwoKTtcbiAgICAgICAgcmV0dXJuIGNvdW50O1xuICAgICAgfSxcblxuICAgICAgY291bnQ6IGFzeW5jICh7IG1vZGVsLCB3aGVyZSB9KSA9PiB7XG4gICAgICAgIGxldCBxdWVyeSA9IGdldERiKCkobW9kZWwpO1xuICAgICAgICBpZiAod2hlcmUpIHtcbiAgICAgICAgICBxdWVyeSA9IGFwcGx5V2hlcmUocXVlcnksIHdoZXJlKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBbeyBjb3VudCB9XSA9IGF3YWl0IHF1ZXJ5LmNvdW50KFwiKiBhcyBjb3VudFwiKTtcbiAgICAgICAgcmV0dXJuIE51bWJlcihjb3VudCk7XG4gICAgICB9LFxuICAgIH0pO1xuICB9O1xuXG4gIGNvbnN0IGFkYXB0ZXJDb25maWcgPSB7XG4gICAgYWRhcHRlcklkOiBcInNvbmFtdS1rbmV4XCIsXG4gICAgYWRhcHRlck5hbWU6IFwiU29uYW11IEtuZXggQWRhcHRlclwiLFxuICAgIHVzZVBsdXJhbDogZmFsc2UsXG4gICAgc3VwcG9ydHNKU09OOiB0cnVlLFxuICAgIHN1cHBvcnRzRGF0ZXM6IHRydWUsXG4gICAgc3VwcG9ydHNCb29sZWFuczogdHJ1ZSxcbiAgICBzdXBwb3J0c051bWVyaWNJZHM6IGZhbHNlLFxuICAgIHRyYW5zYWN0aW9uOiBhc3luYyA8Uj4oY2I6ICh0cng6IERCVHJhbnNhY3Rpb25BZGFwdGVyKSA9PiBQcm9taXNlPFI+KTogUHJvbWlzZTxSPiA9PiB7XG4gICAgICBjb25zdCBkYiA9IERCLmdldERCKFwid1wiKTtcbiAgICAgIHJldHVybiBkYi50cmFuc2FjdGlvbihhc3luYyAodHJ4KSA9PiB7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSBsYXp5T3B0aW9ucztcbiAgICAgICAgaWYgKCFvcHRpb25zKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwic29uYW11S25leEFkYXB0ZXI6IG9wdGlvbnMgbm90IGluaXRpYWxpemVkXCIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjYihcbiAgICAgICAgICBjcmVhdGVBZGFwdGVyRmFjdG9yeSh7XG4gICAgICAgICAgICBjb25maWc6IGFkYXB0ZXJDb25maWcsXG4gICAgICAgICAgICBhZGFwdGVyOiBjcmVhdGVDdXN0b21BZGFwdGVyKCgpID0+IHRyeCksXG4gICAgICAgICAgfSkob3B0aW9ucyksXG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICB9LFxuICB9O1xuXG4gIGNvbnN0IGFkYXB0ZXJDcmVhdG9yID0gY3JlYXRlQWRhcHRlckZhY3Rvcnkoe1xuICAgIGNvbmZpZzogYWRhcHRlckNvbmZpZyxcbiAgICBhZGFwdGVyOiBjcmVhdGVDdXN0b21BZGFwdGVyKCgpID0+IERCLmdldERCKFwid1wiKSksXG4gIH0pO1xuXG4gIHJldHVybiAob3B0aW9uczogQmV0dGVyQXV0aE9wdGlvbnMpID0+IHtcbiAgICBsYXp5T3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgcmV0dXJuIGFkYXB0ZXJDcmVhdG9yKG9wdGlvbnMpO1xuICB9O1xufTtcblxuLyoqXG4gKiBCZXR0ZXIgQXV0aOydmCDqs7Xsi50g7Ja064yR7YSwKEt5c2VseSwgRHJpenpsZSwgUHJpc21hLCBNb25nb0RCKSDtjKjthLTsl5Ag66ee7LawXG4gKiBBTkQg6re466O56rO8IE9SIOq3uOujueydhCDrtoTrpqztlZwg65KkIHRvcC1sZXZlbCBBTkTroZwg6rKw7ZWp7ZWp64uI64ukLlxuICog6rKw6rO8OiAoQSBBTkQgQiBBTkQgLi4uKSBBTkQgKEMgT1IgRCBPUiAuLi4pXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhcHBseVdoZXJlKFxuICBxdWVyeTogS25leC5RdWVyeUJ1aWxkZXIsXG4gIGNvbmRpdGlvbnM6IENsZWFuZWRXaGVyZVtdLFxuKTogS25leC5RdWVyeUJ1aWxkZXIge1xuICBjb25zdCBhbmRHcm91cCA9IGNvbmRpdGlvbnMuZmlsdGVyKChjKSA9PiBjLmNvbm5lY3RvciAhPT0gXCJPUlwiKTtcbiAgY29uc3Qgb3JHcm91cCA9IGNvbmRpdGlvbnMuZmlsdGVyKChjKSA9PiBjLmNvbm5lY3RvciA9PT0gXCJPUlwiKTtcblxuICBpZiAoYW5kR3JvdXAubGVuZ3RoID4gMCkge1xuICAgIGZvciAoY29uc3QgY29uZGl0aW9uIG9mIGFuZEdyb3VwKSB7XG4gICAgICBxdWVyeSA9IGFwcGx5Q29uZGl0aW9uKHF1ZXJ5LCBjb25kaXRpb24sIFwid2hlcmVcIik7XG4gICAgfVxuICB9XG5cbiAgaWYgKG9yR3JvdXAubGVuZ3RoID4gMCkge1xuICAgIHF1ZXJ5ID0gcXVlcnkud2hlcmUoZnVuY3Rpb24gKHRoaXM6IEtuZXguUXVlcnlCdWlsZGVyKSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9yR3JvdXAubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgYXBwbHlDb25kaXRpb24odGhpcywgb3JHcm91cFtpXSwgaSA9PT0gMCA/IFwid2hlcmVcIiA6IFwib3JXaGVyZVwiKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBxdWVyeTtcbn1cblxuZnVuY3Rpb24gYXBwbHlDb25kaXRpb24oXG4gIHF1ZXJ5OiBLbmV4LlF1ZXJ5QnVpbGRlcixcbiAgY29uZGl0aW9uOiBDbGVhbmVkV2hlcmUsXG4gIG1ldGhvZDogXCJ3aGVyZVwiIHwgXCJvcldoZXJlXCIsXG4pOiBLbmV4LlF1ZXJ5QnVpbGRlciB7XG4gIGNvbnN0IHsgZmllbGQsIHZhbHVlLCBvcGVyYXRvciB9ID0gY29uZGl0aW9uO1xuXG4gIHN3aXRjaCAob3BlcmF0b3IpIHtcbiAgICBjYXNlIFwiZXFcIjpcbiAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gcXVlcnlbbWV0aG9kID09PSBcIm9yV2hlcmVcIiA/IFwib3JXaGVyZU51bGxcIiA6IFwid2hlcmVOdWxsXCJdKGZpZWxkKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBxdWVyeVttZXRob2RdKGZpZWxkLCBcIj1cIiwgdmFsdWUpO1xuICAgIGNhc2UgXCJuZVwiOlxuICAgICAgaWYgKHZhbHVlID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBxdWVyeVttZXRob2QgPT09IFwib3JXaGVyZVwiID8gXCJvcldoZXJlTm90TnVsbFwiIDogXCJ3aGVyZU5vdE51bGxcIl0oZmllbGQpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHF1ZXJ5W21ldGhvZF0oZmllbGQsIFwiIT1cIiwgdmFsdWUpO1xuICAgIGNhc2UgXCJsdFwiOlxuICAgICAgcmV0dXJuIHF1ZXJ5W21ldGhvZF0oZmllbGQsIFwiPFwiLCB2YWx1ZSk7XG4gICAgY2FzZSBcImx0ZVwiOlxuICAgICAgcmV0dXJuIHF1ZXJ5W21ldGhvZF0oZmllbGQsIFwiPD1cIiwgdmFsdWUpO1xuICAgIGNhc2UgXCJndFwiOlxuICAgICAgcmV0dXJuIHF1ZXJ5W21ldGhvZF0oZmllbGQsIFwiPlwiLCB2YWx1ZSk7XG4gICAgY2FzZSBcImd0ZVwiOlxuICAgICAgcmV0dXJuIHF1ZXJ5W21ldGhvZF0oZmllbGQsIFwiPj1cIiwgdmFsdWUpO1xuICAgIGNhc2UgXCJpblwiOlxuICAgICAgcmV0dXJuIHF1ZXJ5W21ldGhvZCA9PT0gXCJvcldoZXJlXCIgPyBcIm9yV2hlcmVJblwiIDogXCJ3aGVyZUluXCJdKFxuICAgICAgICBmaWVsZCxcbiAgICAgICAgdmFsdWUgYXMgKHN0cmluZyB8IG51bWJlcilbXSxcbiAgICAgICk7XG4gICAgY2FzZSBcIm5vdF9pblwiOlxuICAgICAgcmV0dXJuIHF1ZXJ5W21ldGhvZCA9PT0gXCJvcldoZXJlXCIgPyBcIm9yV2hlcmVOb3RJblwiIDogXCJ3aGVyZU5vdEluXCJdKFxuICAgICAgICBmaWVsZCxcbiAgICAgICAgdmFsdWUgYXMgKHN0cmluZyB8IG51bWJlcilbXSxcbiAgICAgICk7XG4gICAgY2FzZSBcImNvbnRhaW5zXCI6XG4gICAgICByZXR1cm4gcXVlcnlbbWV0aG9kXShmaWVsZCwgXCJsaWtlXCIsIGAlJHt2YWx1ZX0lYCk7XG4gICAgY2FzZSBcInN0YXJ0c193aXRoXCI6XG4gICAgICByZXR1cm4gcXVlcnlbbWV0aG9kXShmaWVsZCwgXCJsaWtlXCIsIGAke3ZhbHVlfSVgKTtcbiAgICBjYXNlIFwiZW5kc193aXRoXCI6XG4gICAgICByZXR1cm4gcXVlcnlbbWV0aG9kXShmaWVsZCwgXCJsaWtlXCIsIGAlJHt2YWx1ZX1gKTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIHF1ZXJ5O1xuICB9XG59XG4iXSwibmFtZXMiOlsiY3JlYXRlQWRhcHRlckZhY3RvcnkiLCJEQiIsInNvbmFtdUtuZXhBZGFwdGVyIiwibGF6eU9wdGlvbnMiLCJjcmVhdGVDdXN0b21BZGFwdGVyIiwiZ2V0RGIiLCJjcmVhdGUiLCJtb2RlbCIsImRhdGEiLCJyb3ciLCJpbnNlcnQiLCJyZXR1cm5pbmciLCJmaW5kT25lIiwid2hlcmUiLCJxdWVyeSIsImFwcGx5V2hlcmUiLCJmaXJzdCIsImZpbmRNYW55IiwibGltaXQiLCJvZmZzZXQiLCJzb3J0QnkiLCJvcmRlckJ5IiwiZmllbGQiLCJkaXJlY3Rpb24iLCJ1cGRhdGUiLCJ1cGRhdGVNYW55IiwiY291bnQiLCJkZWxldGUiLCJkZWwiLCJkZWxldGVNYW55IiwiTnVtYmVyIiwiYWRhcHRlckNvbmZpZyIsImFkYXB0ZXJJZCIsImFkYXB0ZXJOYW1lIiwidXNlUGx1cmFsIiwic3VwcG9ydHNKU09OIiwic3VwcG9ydHNEYXRlcyIsInN1cHBvcnRzQm9vbGVhbnMiLCJzdXBwb3J0c051bWVyaWNJZHMiLCJ0cmFuc2FjdGlvbiIsImNiIiwiZGIiLCJnZXREQiIsInRyeCIsIm9wdGlvbnMiLCJFcnJvciIsImNvbmZpZyIsImFkYXB0ZXIiLCJhZGFwdGVyQ3JlYXRvciIsImNvbmRpdGlvbnMiLCJhbmRHcm91cCIsImZpbHRlciIsImMiLCJjb25uZWN0b3IiLCJvckdyb3VwIiwibGVuZ3RoIiwiY29uZGl0aW9uIiwiYXBwbHlDb25kaXRpb24iLCJpIiwibWV0aG9kIiwidmFsdWUiLCJvcGVyYXRvciJdLCJtYXBwaW5ncyI6IkFBS0EsU0FBU0Esb0JBQW9CLFFBQVEsdUJBQXVCO0FBRTVELFNBQVNDLEVBQUUsUUFBUSxvQkFBaUI7QUFTcEM7Ozs7O0NBS0MsR0FDRCxPQUFPLE1BQU1DLG9CQUFvQjtJQUMvQixJQUFJQyxjQUF3QztJQUU1QyxNQUFNQyxzQkFBc0IsQ0FDMUJDO1FBRUEsT0FBTyxJQUFPLENBQUE7Z0JBQ1pDLFFBQVEsT0FBTyxFQUFFQyxLQUFLLEVBQUVDLElBQUksRUFBRTtvQkFDNUIsTUFBTSxDQUFDQyxJQUFJLEdBQUcsTUFBTUosUUFBUUUsT0FBT0csTUFBTSxDQUFDRixNQUFNRyxTQUFTLENBQUM7b0JBQzFELE9BQU9GO2dCQUNUO2dCQUVBRyxTQUFTLE9BQU8sRUFBRUwsS0FBSyxFQUFFTSxLQUFLLEVBQUU7b0JBQzlCLElBQUlDLFFBQVFULFFBQVFFO29CQUNwQk8sUUFBUUMsV0FBV0QsT0FBT0Q7b0JBQzFCLE1BQU1KLE1BQU0sTUFBTUssTUFBTUUsS0FBSztvQkFDN0IsT0FBT1AsT0FBTztnQkFDaEI7Z0JBRUFRLFVBQVUsT0FBTyxFQUFFVixLQUFLLEVBQUVNLEtBQUssRUFBRUssS0FBSyxFQUFFQyxNQUFNLEVBQUVDLE1BQU0sRUFBRTtvQkFDdEQsSUFBSU4sUUFBUVQsUUFBUUU7b0JBQ3BCLElBQUlNLE9BQU87d0JBQ1RDLFFBQVFDLFdBQVdELE9BQU9EO29CQUM1QjtvQkFDQSxJQUFJTyxRQUFRO3dCQUNWTixRQUFRQSxNQUFNTyxPQUFPLENBQUNELE9BQU9FLEtBQUssRUFBRUYsT0FBT0csU0FBUztvQkFDdEQ7b0JBQ0EsSUFBSUwsT0FBTzt3QkFDVEosUUFBUUEsTUFBTUksS0FBSyxDQUFDQTtvQkFDdEI7b0JBQ0EsSUFBSUMsUUFBUTt3QkFDVkwsUUFBUUEsTUFBTUssTUFBTSxDQUFDQTtvQkFDdkI7b0JBQ0EsT0FBTyxNQUFNTDtnQkFDZjtnQkFFQVUsUUFBUSxPQUFPLEVBQUVqQixLQUFLLEVBQUVNLEtBQUssRUFBRVcsTUFBTSxFQUFFO29CQUNyQyxJQUFJVixRQUFRVCxRQUFRRTtvQkFDcEJPLFFBQVFDLFdBQVdELE9BQU9EO29CQUMxQixNQUFNLENBQUNKLElBQUksR0FBRyxNQUFNSyxNQUFNVSxNQUFNLENBQUNBLFFBQVFiLFNBQVMsQ0FBQztvQkFDbkQsT0FBT0YsT0FBTztnQkFDaEI7Z0JBRUFnQixZQUFZLE9BQU8sRUFBRWxCLEtBQUssRUFBRU0sS0FBSyxFQUFFVyxNQUFNLEVBQUU7b0JBQ3pDLElBQUlWLFFBQVFULFFBQVFFO29CQUNwQk8sUUFBUUMsV0FBV0QsT0FBT0Q7b0JBQzFCLE1BQU1hLFFBQVEsTUFBTVosTUFBTVUsTUFBTSxDQUFDQTtvQkFDakMsT0FBT0U7Z0JBQ1Q7Z0JBRUFDLFFBQVEsT0FBTyxFQUFFcEIsS0FBSyxFQUFFTSxLQUFLLEVBQUU7b0JBQzdCLElBQUlDLFFBQVFULFFBQVFFO29CQUNwQk8sUUFBUUMsV0FBV0QsT0FBT0Q7b0JBQzFCLE1BQU1DLE1BQU1jLEdBQUc7Z0JBQ2pCO2dCQUVBQyxZQUFZLE9BQU8sRUFBRXRCLEtBQUssRUFBRU0sS0FBSyxFQUFFO29CQUNqQyxJQUFJQyxRQUFRVCxRQUFRRTtvQkFDcEJPLFFBQVFDLFdBQVdELE9BQU9EO29CQUMxQixNQUFNYSxRQUFRLE1BQU1aLE1BQU1jLEdBQUc7b0JBQzdCLE9BQU9GO2dCQUNUO2dCQUVBQSxPQUFPLE9BQU8sRUFBRW5CLEtBQUssRUFBRU0sS0FBSyxFQUFFO29CQUM1QixJQUFJQyxRQUFRVCxRQUFRRTtvQkFDcEIsSUFBSU0sT0FBTzt3QkFDVEMsUUFBUUMsV0FBV0QsT0FBT0Q7b0JBQzVCO29CQUNBLE1BQU0sQ0FBQyxFQUFFYSxLQUFLLEVBQUUsQ0FBQyxHQUFHLE1BQU1aLE1BQU1ZLEtBQUssQ0FBQztvQkFDdEMsT0FBT0ksT0FBT0o7Z0JBQ2hCO1lBQ0YsQ0FBQTtJQUNGO0lBRUEsTUFBTUssZ0JBQWdCO1FBQ3BCQyxXQUFXO1FBQ1hDLGFBQWE7UUFDYkMsV0FBVztRQUNYQyxjQUFjO1FBQ2RDLGVBQWU7UUFDZkMsa0JBQWtCO1FBQ2xCQyxvQkFBb0I7UUFDcEJDLGFBQWEsT0FBVUM7WUFDckIsTUFBTUMsS0FBS3hDLEdBQUd5QyxLQUFLLENBQUM7WUFDcEIsT0FBT0QsR0FBR0YsV0FBVyxDQUFDLE9BQU9JO2dCQUMzQixNQUFNQyxVQUFVekM7Z0JBQ2hCLElBQUksQ0FBQ3lDLFNBQVM7b0JBQ1osTUFBTSxJQUFJQyxNQUFNO2dCQUNsQjtnQkFDQSxPQUFPTCxHQUNMeEMscUJBQXFCO29CQUNuQjhDLFFBQVFmO29CQUNSZ0IsU0FBUzNDLG9CQUFvQixJQUFNdUM7Z0JBQ3JDLEdBQUdDO1lBRVA7UUFDRjtJQUNGO0lBRUEsTUFBTUksaUJBQWlCaEQscUJBQXFCO1FBQzFDOEMsUUFBUWY7UUFDUmdCLFNBQVMzQyxvQkFBb0IsSUFBTUgsR0FBR3lDLEtBQUssQ0FBQztJQUM5QztJQUVBLE9BQU8sQ0FBQ0U7UUFDTnpDLGNBQWN5QztRQUNkLE9BQU9JLGVBQWVKO0lBQ3hCO0FBQ0YsRUFBRTtBQUVGOzs7O0NBSUMsR0FDRCxPQUFPLFNBQVM3QixXQUNkRCxLQUF3QixFQUN4Qm1DLFVBQTBCO0lBRTFCLE1BQU1DLFdBQVdELFdBQVdFLE1BQU0sQ0FBQyxDQUFDQyxJQUFNQSxFQUFFQyxTQUFTLEtBQUs7SUFDMUQsTUFBTUMsVUFBVUwsV0FBV0UsTUFBTSxDQUFDLENBQUNDLElBQU1BLEVBQUVDLFNBQVMsS0FBSztJQUV6RCxJQUFJSCxTQUFTSyxNQUFNLEdBQUcsR0FBRztRQUN2QixLQUFLLE1BQU1DLGFBQWFOLFNBQVU7WUFDaENwQyxRQUFRMkMsZUFBZTNDLE9BQU8wQyxXQUFXO1FBQzNDO0lBQ0Y7SUFFQSxJQUFJRixRQUFRQyxNQUFNLEdBQUcsR0FBRztRQUN0QnpDLFFBQVFBLE1BQU1ELEtBQUssQ0FBQztZQUNsQixJQUFLLElBQUk2QyxJQUFJLEdBQUdBLElBQUlKLFFBQVFDLE1BQU0sRUFBRUcsSUFBSztnQkFDdkNELGVBQWUsSUFBSSxFQUFFSCxPQUFPLENBQUNJLEVBQUUsRUFBRUEsTUFBTSxJQUFJLFVBQVU7WUFDdkQ7UUFDRjtJQUNGO0lBRUEsT0FBTzVDO0FBQ1Q7QUFFQSxTQUFTMkMsZUFDUDNDLEtBQXdCLEVBQ3hCMEMsU0FBdUIsRUFDdkJHLE1BQTJCO0lBRTNCLE1BQU0sRUFBRXJDLEtBQUssRUFBRXNDLEtBQUssRUFBRUMsUUFBUSxFQUFFLEdBQUdMO0lBRW5DLE9BQVFLO1FBQ04sS0FBSztZQUNILElBQUlELFVBQVUsTUFBTTtnQkFDbEIsT0FBTzlDLEtBQUssQ0FBQzZDLFdBQVcsWUFBWSxnQkFBZ0IsWUFBWSxDQUFDckM7WUFDbkU7WUFDQSxPQUFPUixLQUFLLENBQUM2QyxPQUFPLENBQUNyQyxPQUFPLEtBQUtzQztRQUNuQyxLQUFLO1lBQ0gsSUFBSUEsVUFBVSxNQUFNO2dCQUNsQixPQUFPOUMsS0FBSyxDQUFDNkMsV0FBVyxZQUFZLG1CQUFtQixlQUFlLENBQUNyQztZQUN6RTtZQUNBLE9BQU9SLEtBQUssQ0FBQzZDLE9BQU8sQ0FBQ3JDLE9BQU8sTUFBTXNDO1FBQ3BDLEtBQUs7WUFDSCxPQUFPOUMsS0FBSyxDQUFDNkMsT0FBTyxDQUFDckMsT0FBTyxLQUFLc0M7UUFDbkMsS0FBSztZQUNILE9BQU85QyxLQUFLLENBQUM2QyxPQUFPLENBQUNyQyxPQUFPLE1BQU1zQztRQUNwQyxLQUFLO1lBQ0gsT0FBTzlDLEtBQUssQ0FBQzZDLE9BQU8sQ0FBQ3JDLE9BQU8sS0FBS3NDO1FBQ25DLEtBQUs7WUFDSCxPQUFPOUMsS0FBSyxDQUFDNkMsT0FBTyxDQUFDckMsT0FBTyxNQUFNc0M7UUFDcEMsS0FBSztZQUNILE9BQU85QyxLQUFLLENBQUM2QyxXQUFXLFlBQVksY0FBYyxVQUFVLENBQzFEckMsT0FDQXNDO1FBRUosS0FBSztZQUNILE9BQU85QyxLQUFLLENBQUM2QyxXQUFXLFlBQVksaUJBQWlCLGFBQWEsQ0FDaEVyQyxPQUNBc0M7UUFFSixLQUFLO1lBQ0gsT0FBTzlDLEtBQUssQ0FBQzZDLE9BQU8sQ0FBQ3JDLE9BQU8sUUFBUSxDQUFDLENBQUMsRUFBRXNDLE1BQU0sQ0FBQyxDQUFDO1FBQ2xELEtBQUs7WUFDSCxPQUFPOUMsS0FBSyxDQUFDNkMsT0FBTyxDQUFDckMsT0FBTyxRQUFRLEdBQUdzQyxNQUFNLENBQUMsQ0FBQztRQUNqRCxLQUFLO1lBQ0gsT0FBTzlDLEtBQUssQ0FBQzZDLE9BQU8sQ0FBQ3JDLE9BQU8sUUFBUSxDQUFDLENBQUMsRUFBRXNDLE9BQU87UUFDakQ7WUFDRSxPQUFPOUM7SUFDWDtBQUNGIn0=
163
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hdXRoL2tuZXgtYWRhcHRlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEJldHRlckF1dGhPcHRpb25zIH0gZnJvbSBcImJldHRlci1hdXRoXCI7XG5pbXBvcnQgdHlwZSB7XG4gIEFkYXB0ZXJGYWN0b3J5Q3VzdG9taXplQWRhcHRlckNyZWF0b3IsXG4gIERCVHJhbnNhY3Rpb25BZGFwdGVyLFxufSBmcm9tIFwiYmV0dGVyLWF1dGgvYWRhcHRlcnNcIjtcbmltcG9ydCB7IGNyZWF0ZUFkYXB0ZXJGYWN0b3J5IH0gZnJvbSBcImJldHRlci1hdXRoL2FkYXB0ZXJzXCI7XG5pbXBvcnQgdHlwZSB7IEtuZXggfSBmcm9tIFwia25leFwiO1xuaW1wb3J0IHsgREIgfSBmcm9tIFwiLi4vZGF0YWJhc2UvZGJcIjtcblxuaW50ZXJmYWNlIENsZWFuZWRXaGVyZSB7XG4gIGZpZWxkOiBzdHJpbmc7XG4gIHZhbHVlOiBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgc3RyaW5nW10gfCBudW1iZXJbXSB8IERhdGUgfCBudWxsO1xuICBvcGVyYXRvcjogc3RyaW5nO1xuICBjb25uZWN0b3I6IHN0cmluZztcbn1cblxuLyoqXG4gKiBiZXR0ZXItYXV0aOyaqSBTb25hbXUga25leCDslrTrjJHthLBcbiAqXG4gKiBiZXR0ZXItYXV0aOydmCDrqqjrk6Ag7L+866as66W8IERCLmdldERCKCnrpbwg7Ya17ZW0IOyLpO2Wie2VmOyXrFxuICogU29uYW11IO2FjOyKpO2KuCDtirjrnpzsnq3shZjqs7wg64+Z7J287ZWcIOy7pOuEpeyFmOydhCDqs7XsnKDtlanri4jri6QuXG4gKi9cbmV4cG9ydCBjb25zdCBzb25hbXVLbmV4QWRhcHRlciA9ICgpID0+IHtcbiAgbGV0IGxhenlPcHRpb25zOiBCZXR0ZXJBdXRoT3B0aW9ucyB8IG51bGwgPSBudWxsO1xuXG4gIGNvbnN0IGNyZWF0ZUN1c3RvbUFkYXB0ZXIgPSAoXG4gICAgZ2V0RGI6ICgpID0+IEtuZXggfCBLbmV4LlRyYW5zYWN0aW9uLFxuICApOiBBZGFwdGVyRmFjdG9yeUN1c3RvbWl6ZUFkYXB0ZXJDcmVhdG9yID0+IHtcbiAgICByZXR1cm4gKHsgZ2V0RmllbGROYW1lIH0pID0+ICh7XG4gICAgICBjcmVhdGU6IGFzeW5jICh7IG1vZGVsLCBkYXRhIH0pID0+IHtcbiAgICAgICAgY29uc3QgW3Jvd10gPSBhd2FpdCBnZXREYigpKG1vZGVsKS5pbnNlcnQoZGF0YSkucmV0dXJuaW5nKFwiKlwiKTtcbiAgICAgICAgcmV0dXJuIHJvdztcbiAgICAgIH0sXG5cbiAgICAgIGZpbmRPbmU6IGFzeW5jICh7IG1vZGVsLCB3aGVyZSB9KSA9PiB7XG4gICAgICAgIGxldCBxdWVyeSA9IGdldERiKCkobW9kZWwpO1xuICAgICAgICBxdWVyeSA9IGFwcGx5V2hlcmUocXVlcnksIHdoZXJlKTtcbiAgICAgICAgY29uc3Qgcm93ID0gYXdhaXQgcXVlcnkuZmlyc3QoKTtcbiAgICAgICAgcmV0dXJuIHJvdyA/PyBudWxsO1xuICAgICAgfSxcblxuICAgICAgZmluZE1hbnk6IGFzeW5jICh7IG1vZGVsLCB3aGVyZSwgbGltaXQsIG9mZnNldCwgc29ydEJ5IH0pID0+IHtcbiAgICAgICAgbGV0IHF1ZXJ5ID0gZ2V0RGIoKShtb2RlbCk7XG4gICAgICAgIGlmICh3aGVyZSkge1xuICAgICAgICAgIHF1ZXJ5ID0gYXBwbHlXaGVyZShxdWVyeSwgd2hlcmUpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzb3J0QnkpIHtcbiAgICAgICAgICBjb25zdCBkYkZpZWxkID0gZ2V0RmllbGROYW1lKHsgbW9kZWwsIGZpZWxkOiBzb3J0QnkuZmllbGQgfSk7XG4gICAgICAgICAgcXVlcnkgPSBxdWVyeS5vcmRlckJ5KGRiRmllbGQsIHNvcnRCeS5kaXJlY3Rpb24pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsaW1pdCkge1xuICAgICAgICAgIHF1ZXJ5ID0gcXVlcnkubGltaXQobGltaXQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvZmZzZXQpIHtcbiAgICAgICAgICBxdWVyeSA9IHF1ZXJ5Lm9mZnNldChvZmZzZXQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhd2FpdCBxdWVyeTtcbiAgICAgIH0sXG5cbiAgICAgIHVwZGF0ZTogYXN5bmMgKHsgbW9kZWwsIHdoZXJlLCB1cGRhdGUgfSkgPT4ge1xuICAgICAgICBsZXQgcXVlcnkgPSBnZXREYigpKG1vZGVsKTtcbiAgICAgICAgcXVlcnkgPSBhcHBseVdoZXJlKHF1ZXJ5LCB3aGVyZSk7XG4gICAgICAgIGNvbnN0IFtyb3ddID0gYXdhaXQgcXVlcnkudXBkYXRlKHVwZGF0ZSkucmV0dXJuaW5nKFwiKlwiKTtcbiAgICAgICAgcmV0dXJuIHJvdyA/PyBudWxsO1xuICAgICAgfSxcblxuICAgICAgdXBkYXRlTWFueTogYXN5bmMgKHsgbW9kZWwsIHdoZXJlLCB1cGRhdGUgfSkgPT4ge1xuICAgICAgICBsZXQgcXVlcnkgPSBnZXREYigpKG1vZGVsKTtcbiAgICAgICAgcXVlcnkgPSBhcHBseVdoZXJlKHF1ZXJ5LCB3aGVyZSk7XG4gICAgICAgIGNvbnN0IGNvdW50ID0gYXdhaXQgcXVlcnkudXBkYXRlKHVwZGF0ZSk7XG4gICAgICAgIHJldHVybiBjb3VudDtcbiAgICAgIH0sXG5cbiAgICAgIGRlbGV0ZTogYXN5bmMgKHsgbW9kZWwsIHdoZXJlIH0pID0+IHtcbiAgICAgICAgbGV0IHF1ZXJ5ID0gZ2V0RGIoKShtb2RlbCk7XG4gICAgICAgIHF1ZXJ5ID0gYXBwbHlXaGVyZShxdWVyeSwgd2hlcmUpO1xuICAgICAgICBhd2FpdCBxdWVyeS5kZWwoKTtcbiAgICAgIH0sXG5cbiAgICAgIGRlbGV0ZU1hbnk6IGFzeW5jICh7IG1vZGVsLCB3aGVyZSB9KSA9PiB7XG4gICAgICAgIGxldCBxdWVyeSA9IGdldERiKCkobW9kZWwpO1xuICAgICAgICBxdWVyeSA9IGFwcGx5V2hlcmUocXVlcnksIHdoZXJlKTtcbiAgICAgICAgY29uc3QgY291bnQgPSBhd2FpdCBxdWVyeS5kZWwoKTtcbiAgICAgICAgcmV0dXJuIGNvdW50O1xuICAgICAgfSxcblxuICAgICAgY291bnQ6IGFzeW5jICh7IG1vZGVsLCB3aGVyZSB9KSA9PiB7XG4gICAgICAgIGxldCBxdWVyeSA9IGdldERiKCkobW9kZWwpO1xuICAgICAgICBpZiAod2hlcmUpIHtcbiAgICAgICAgICBxdWVyeSA9IGFwcGx5V2hlcmUocXVlcnksIHdoZXJlKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBbeyBjb3VudCB9XSA9IGF3YWl0IHF1ZXJ5LmNvdW50KFwiKiBhcyBjb3VudFwiKTtcbiAgICAgICAgcmV0dXJuIE51bWJlcihjb3VudCk7XG4gICAgICB9LFxuICAgIH0pO1xuICB9O1xuXG4gIGNvbnN0IGFkYXB0ZXJDb25maWcgPSB7XG4gICAgYWRhcHRlcklkOiBcInNvbmFtdS1rbmV4XCIsXG4gICAgYWRhcHRlck5hbWU6IFwiU29uYW11IEtuZXggQWRhcHRlclwiLFxuICAgIHVzZVBsdXJhbDogZmFsc2UsXG4gICAgc3VwcG9ydHNKU09OOiB0cnVlLFxuICAgIHN1cHBvcnRzRGF0ZXM6IHRydWUsXG4gICAgc3VwcG9ydHNCb29sZWFuczogdHJ1ZSxcbiAgICBzdXBwb3J0c051bWVyaWNJZHM6IGZhbHNlLFxuICAgIHRyYW5zYWN0aW9uOiBhc3luYyA8Uj4oY2I6ICh0cng6IERCVHJhbnNhY3Rpb25BZGFwdGVyKSA9PiBQcm9taXNlPFI+KTogUHJvbWlzZTxSPiA9PiB7XG4gICAgICBjb25zdCBkYiA9IERCLmdldERCKFwid1wiKTtcbiAgICAgIHJldHVybiBkYi50cmFuc2FjdGlvbihhc3luYyAodHJ4KSA9PiB7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSBsYXp5T3B0aW9ucztcbiAgICAgICAgaWYgKCFvcHRpb25zKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwic29uYW11S25leEFkYXB0ZXI6IG9wdGlvbnMgbm90IGluaXRpYWxpemVkXCIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjYihcbiAgICAgICAgICBjcmVhdGVBZGFwdGVyRmFjdG9yeSh7XG4gICAgICAgICAgICBjb25maWc6IGFkYXB0ZXJDb25maWcsXG4gICAgICAgICAgICBhZGFwdGVyOiBjcmVhdGVDdXN0b21BZGFwdGVyKCgpID0+IHRyeCksXG4gICAgICAgICAgfSkob3B0aW9ucyksXG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICB9LFxuICB9O1xuXG4gIGNvbnN0IGFkYXB0ZXJDcmVhdG9yID0gY3JlYXRlQWRhcHRlckZhY3Rvcnkoe1xuICAgIGNvbmZpZzogYWRhcHRlckNvbmZpZyxcbiAgICBhZGFwdGVyOiBjcmVhdGVDdXN0b21BZGFwdGVyKCgpID0+IERCLmdldERCKFwid1wiKSksXG4gIH0pO1xuXG4gIHJldHVybiAob3B0aW9uczogQmV0dGVyQXV0aE9wdGlvbnMpID0+IHtcbiAgICBsYXp5T3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgcmV0dXJuIGFkYXB0ZXJDcmVhdG9yKG9wdGlvbnMpO1xuICB9O1xufTtcblxuLyoqXG4gKiBCZXR0ZXIgQXV0aOydmCDqs7Xsi50g7Ja064yR7YSwKEt5c2VseSwgRHJpenpsZSwgUHJpc21hLCBNb25nb0RCKSDtjKjthLTsl5Ag66ee7LawXG4gKiBBTkQg6re466O56rO8IE9SIOq3uOujueydhCDrtoTrpqztlZwg65KkIHRvcC1sZXZlbCBBTkTroZwg6rKw7ZWp7ZWp64uI64ukLlxuICog6rKw6rO8OiAoQSBBTkQgQiBBTkQgLi4uKSBBTkQgKEMgT1IgRCBPUiAuLi4pXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhcHBseVdoZXJlKFxuICBxdWVyeTogS25leC5RdWVyeUJ1aWxkZXIsXG4gIGNvbmRpdGlvbnM6IENsZWFuZWRXaGVyZVtdLFxuKTogS25leC5RdWVyeUJ1aWxkZXIge1xuICBjb25zdCBhbmRHcm91cCA9IGNvbmRpdGlvbnMuZmlsdGVyKChjKSA9PiBjLmNvbm5lY3RvciAhPT0gXCJPUlwiKTtcbiAgY29uc3Qgb3JHcm91cCA9IGNvbmRpdGlvbnMuZmlsdGVyKChjKSA9PiBjLmNvbm5lY3RvciA9PT0gXCJPUlwiKTtcblxuICBpZiAoYW5kR3JvdXAubGVuZ3RoID4gMCkge1xuICAgIGZvciAoY29uc3QgY29uZGl0aW9uIG9mIGFuZEdyb3VwKSB7XG4gICAgICBxdWVyeSA9IGFwcGx5Q29uZGl0aW9uKHF1ZXJ5LCBjb25kaXRpb24sIFwid2hlcmVcIik7XG4gICAgfVxuICB9XG5cbiAgaWYgKG9yR3JvdXAubGVuZ3RoID4gMCkge1xuICAgIHF1ZXJ5ID0gcXVlcnkud2hlcmUoZnVuY3Rpb24gKHRoaXM6IEtuZXguUXVlcnlCdWlsZGVyKSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9yR3JvdXAubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgYXBwbHlDb25kaXRpb24odGhpcywgb3JHcm91cFtpXSwgaSA9PT0gMCA/IFwid2hlcmVcIiA6IFwib3JXaGVyZVwiKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBxdWVyeTtcbn1cblxuZnVuY3Rpb24gYXBwbHlDb25kaXRpb24oXG4gIHF1ZXJ5OiBLbmV4LlF1ZXJ5QnVpbGRlcixcbiAgY29uZGl0aW9uOiBDbGVhbmVkV2hlcmUsXG4gIG1ldGhvZDogXCJ3aGVyZVwiIHwgXCJvcldoZXJlXCIsXG4pOiBLbmV4LlF1ZXJ5QnVpbGRlciB7XG4gIGNvbnN0IHsgZmllbGQsIHZhbHVlLCBvcGVyYXRvciB9ID0gY29uZGl0aW9uO1xuXG4gIHN3aXRjaCAob3BlcmF0b3IpIHtcbiAgICBjYXNlIFwiZXFcIjpcbiAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gcXVlcnlbbWV0aG9kID09PSBcIm9yV2hlcmVcIiA/IFwib3JXaGVyZU51bGxcIiA6IFwid2hlcmVOdWxsXCJdKGZpZWxkKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBxdWVyeVttZXRob2RdKGZpZWxkLCBcIj1cIiwgdmFsdWUpO1xuICAgIGNhc2UgXCJuZVwiOlxuICAgICAgaWYgKHZhbHVlID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBxdWVyeVttZXRob2QgPT09IFwib3JXaGVyZVwiID8gXCJvcldoZXJlTm90TnVsbFwiIDogXCJ3aGVyZU5vdE51bGxcIl0oZmllbGQpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHF1ZXJ5W21ldGhvZF0oZmllbGQsIFwiIT1cIiwgdmFsdWUpO1xuICAgIGNhc2UgXCJsdFwiOlxuICAgICAgcmV0dXJuIHF1ZXJ5W21ldGhvZF0oZmllbGQsIFwiPFwiLCB2YWx1ZSk7XG4gICAgY2FzZSBcImx0ZVwiOlxuICAgICAgcmV0dXJuIHF1ZXJ5W21ldGhvZF0oZmllbGQsIFwiPD1cIiwgdmFsdWUpO1xuICAgIGNhc2UgXCJndFwiOlxuICAgICAgcmV0dXJuIHF1ZXJ5W21ldGhvZF0oZmllbGQsIFwiPlwiLCB2YWx1ZSk7XG4gICAgY2FzZSBcImd0ZVwiOlxuICAgICAgcmV0dXJuIHF1ZXJ5W21ldGhvZF0oZmllbGQsIFwiPj1cIiwgdmFsdWUpO1xuICAgIGNhc2UgXCJpblwiOlxuICAgICAgcmV0dXJuIHF1ZXJ5W21ldGhvZCA9PT0gXCJvcldoZXJlXCIgPyBcIm9yV2hlcmVJblwiIDogXCJ3aGVyZUluXCJdKFxuICAgICAgICBmaWVsZCxcbiAgICAgICAgdmFsdWUgYXMgKHN0cmluZyB8IG51bWJlcilbXSxcbiAgICAgICk7XG4gICAgY2FzZSBcIm5vdF9pblwiOlxuICAgICAgcmV0dXJuIHF1ZXJ5W21ldGhvZCA9PT0gXCJvcldoZXJlXCIgPyBcIm9yV2hlcmVOb3RJblwiIDogXCJ3aGVyZU5vdEluXCJdKFxuICAgICAgICBmaWVsZCxcbiAgICAgICAgdmFsdWUgYXMgKHN0cmluZyB8IG51bWJlcilbXSxcbiAgICAgICk7XG4gICAgY2FzZSBcImNvbnRhaW5zXCI6XG4gICAgICByZXR1cm4gcXVlcnlbbWV0aG9kXShmaWVsZCwgXCJsaWtlXCIsIGAlJHt2YWx1ZX0lYCk7XG4gICAgY2FzZSBcInN0YXJ0c193aXRoXCI6XG4gICAgICByZXR1cm4gcXVlcnlbbWV0aG9kXShmaWVsZCwgXCJsaWtlXCIsIGAke3ZhbHVlfSVgKTtcbiAgICBjYXNlIFwiZW5kc193aXRoXCI6XG4gICAgICByZXR1cm4gcXVlcnlbbWV0aG9kXShmaWVsZCwgXCJsaWtlXCIsIGAlJHt2YWx1ZX1gKTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIHF1ZXJ5O1xuICB9XG59XG4iXSwibmFtZXMiOlsiY3JlYXRlQWRhcHRlckZhY3RvcnkiLCJEQiIsInNvbmFtdUtuZXhBZGFwdGVyIiwibGF6eU9wdGlvbnMiLCJjcmVhdGVDdXN0b21BZGFwdGVyIiwiZ2V0RGIiLCJnZXRGaWVsZE5hbWUiLCJjcmVhdGUiLCJtb2RlbCIsImRhdGEiLCJyb3ciLCJpbnNlcnQiLCJyZXR1cm5pbmciLCJmaW5kT25lIiwid2hlcmUiLCJxdWVyeSIsImFwcGx5V2hlcmUiLCJmaXJzdCIsImZpbmRNYW55IiwibGltaXQiLCJvZmZzZXQiLCJzb3J0QnkiLCJkYkZpZWxkIiwiZmllbGQiLCJvcmRlckJ5IiwiZGlyZWN0aW9uIiwidXBkYXRlIiwidXBkYXRlTWFueSIsImNvdW50IiwiZGVsZXRlIiwiZGVsIiwiZGVsZXRlTWFueSIsIk51bWJlciIsImFkYXB0ZXJDb25maWciLCJhZGFwdGVySWQiLCJhZGFwdGVyTmFtZSIsInVzZVBsdXJhbCIsInN1cHBvcnRzSlNPTiIsInN1cHBvcnRzRGF0ZXMiLCJzdXBwb3J0c0Jvb2xlYW5zIiwic3VwcG9ydHNOdW1lcmljSWRzIiwidHJhbnNhY3Rpb24iLCJjYiIsImRiIiwiZ2V0REIiLCJ0cngiLCJvcHRpb25zIiwiRXJyb3IiLCJjb25maWciLCJhZGFwdGVyIiwiYWRhcHRlckNyZWF0b3IiLCJjb25kaXRpb25zIiwiYW5kR3JvdXAiLCJmaWx0ZXIiLCJjIiwiY29ubmVjdG9yIiwib3JHcm91cCIsImxlbmd0aCIsImNvbmRpdGlvbiIsImFwcGx5Q29uZGl0aW9uIiwiaSIsIm1ldGhvZCIsInZhbHVlIiwib3BlcmF0b3IiXSwibWFwcGluZ3MiOiJBQUtBLFNB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
@@ -29,7 +29,7 @@ import * as path from "node:path";
29
29
  try {
30
30
  // Sonamu가 초기화되어 있는 경우
31
31
  const { Sonamu } = require("../api");
32
- apiKey = Sonamu.secret?.anthropic_api_key;
32
+ apiKey = Sonamu.secrets?.anthropic_api_key;
33
33
  } catch {
34
34
  // Sonamu가 초기화되지 않은 경우 (테스트 등)
35
35
  apiKey = undefined;
@@ -221,7 +221,7 @@ IMPORTANT: Return pure JSON only. Do NOT wrap in markdown code blocks.`;
221
221
  apiKey
222
222
  });
223
223
  const { text, usage } = await generateText({
224
- model: anthropic("claude-sonnet-4-5"),
224
+ model: anthropic("claude-sonnet-4-6"),
225
225
  prompt
226
226
  });
227
227
  const tokensUsed = usage?.totalTokens || 0;
@@ -338,4 +338,4 @@ IMPORTANT: Return pure JSON only. Do NOT wrap in markdown code blocks.`;
338
338
  return result;
339
339
  }
340
340
 
341
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb25lL2NvbmUtZ2VuZXJhdG9yLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGZzIGZyb20gXCJub2RlOmZzXCI7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gXCJub2RlOnBhdGhcIjtcbmltcG9ydCB0eXBlIHsgQ29uZSwgRW50aXR5SnNvbiB9IGZyb20gXCIuLi90eXBlcy90eXBlc1wiO1xuXG4vKipcbiAqIENvbmUg7IOd7ISxIOy7qO2FjeyKpO2KuFxuICpcbiAqIEVudGl0eSDsoJXrs7TsmYAg7IOd7ISxIOyYteyFmOydhCDri7Tqs6Ag7J6I7Iq164uI64ukLlxuICovXG5leHBvcnQgdHlwZSBDb25lR2VuZXJhdGlvbkNvbnRleHQgPSB7XG4gIGVudGl0eTogRW50aXR5SnNvbjtcbiAgbG9jYWxlPzogXCJrb1wiIHwgXCJlblwiIHwgXCJqYVwiO1xuICBleGlzdGluZ0NvbmVzPzogUmVjb3JkPHN0cmluZywgQ29uZT47XG4gIC8qKiB0cnVl7J24IOqyveyasCBub3Rl6rCAIOyXhuuKlCBjb25l66eMIOyDneyEsSAqL1xuICBvbmx5RW1wdHk/OiBib29sZWFuO1xufTtcblxuLyoqXG4gKiBDb25lIOyDneyEsSDqsrDqs7xcbiAqXG4gKiBFbnRpdHksIFByb3BzLCBTdWJzZXRzLCBFbnVtc+ydmCBjb25lIOuplO2DgOuNsOydtO2EsOulvCDri7Tqs6Ag7J6I7Iq164uI64ukLlxuICovXG5leHBvcnQgdHlwZSBDb25lR2VuZXJhdGlvblJlc3VsdCA9IHtcbiAgZW50aXR5Q29uZT86IENvbmU7XG4gIHByb3BDb25lczogUmVjb3JkPHN0cmluZywgQ29uZT47XG4gIHN1YnNldENvbmVzOiBSZWNvcmQ8c3RyaW5nLCBDb25lPjtcbiAgZW51bUNvbmVzOiBSZWNvcmQ8c3RyaW5nLCBDb25lPjtcbiAgdG9rZW5zVXNlZDogbnVtYmVyO1xufTtcblxuLyoqXG4gKiBMTE3snYQg7IKs7Jqp7ZWY7JesIEVudGl0eeydmCBjb25lIOuplO2DgOuNsOydtO2EsOulvCDsg53shLHtlanri4jri6QuXG4gKlxuICogQHBhcmFtIGNvbnRleHQgLSBFbnRpdHkg7KCV67O07JmAIOyDneyEsSDsmLXshZhcbiAqIEByZXR1cm5zIOyDneyEseuQnCBjb25lIOuplO2DgOuNsOydtO2EsFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2VuZXJhdGVDb25lcyhjb250ZXh0OiBDb25lR2VuZXJhdGlvbkNvbnRleHQpOiBQcm9taXNlPENvbmVHZW5lcmF0aW9uUmVzdWx0PiB7XG4gIGNvbnN0IGFwaUtleSA9IGdldEFwaUtleSgpO1xuICBjb25zdCBwcm9tcHQgPSBidWlsZFByb21wdChjb250ZXh0KTtcbiAgY29uc3QgeyB0ZXh0OiByZXNwb25zZVRleHQsIHRva2Vuc1VzZWQgfSA9IGF3YWl0IGNhbGxBbnRocm9waWNBUEkocHJvbXB0LCBhcGlLZXkpO1xuICBjb25zdCByZXN1bHQgPSBwYXJzZUNvbmVSZXNwb25zZShyZXNwb25zZVRleHQpO1xuICByZXN1bHQudG9rZW5zVXNlZCA9IHRva2Vuc1VzZWQ7XG5cbiAgaWYgKGNvbnRleHQuZXhpc3RpbmdDb25lcykge1xuICAgIGlmIChjb250ZXh0Lm9ubHlFbXB0eSkge1xuICAgICAgcmV0dXJuIG1lcmdlT25seUVtcHR5KHJlc3VsdCwgY29udGV4dC5leGlzdGluZ0NvbmVzKTtcbiAgICB9XG4gICAgcmV0dXJuIG1lcmdlV2l0aEV4aXN0aW5nKHJlc3VsdCwgY29udGV4dC5leGlzdGluZ0NvbmVzKTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogQVBJIO2CpOulvCDqsIDsoLjsmLXri4jri6QuXG4gKlxuICogU29uYW11LnNlY3JldCDrmJDripQg7ZmY6rK967OA7IiY7JeQ7IScIOqwgOyguOyYteuLiOuLpC5cbiAqL1xuZnVuY3Rpb24gZ2V0QXBpS2V5KCk6IHN0cmluZyB7XG4gIC8vIFNvbmFtdS5zZWNyZXTsnYAg65+w7YOA7J6E7JeQIOuhnOuTnOuQmOuvgOuhnCDrj5nsoIHsnLzroZwgaW1wb3J0XG4gIGxldCBhcGlLZXk6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICB0cnkge1xuICAgIC8vIFNvbmFtdeqwgCDstIjquLDtmZTrkJjslrQg7J6I64qUIOqyveyasFxuICAgIGNvbnN0IHsgU29uYW11IH0gPSByZXF1aXJlKFwiLi4vYXBpXCIpO1xuICAgIGFwaUtleSA9IFNvbmFtdS5zZWNyZXQ/LmFudGhyb3BpY19hcGlfa2V5O1xuICB9IGNhdGNoIHtcbiAgICAvLyBTb25hbXXqsIAg7LSI6riw7ZmU65CY7KeAIOyViuydgCDqsr3smrAgKO2FjOyKpO2KuCDrk7EpXG4gICAgYXBpS2V5ID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgaWYgKCFhcGlLZXkpIHtcbiAgICBhcGlLZXkgPSBwcm9jZXNzLmVudi5BTlRIUk9QSUNfQVBJX0tFWTtcbiAgfVxuXG4gIGlmICghYXBpS2V5KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgXCJBTlRIUk9QSUNfQVBJX0tFWSBub3QgZm91bmQuIFwiICtcbiAgICAgICAgXCJTZXQgQU5USFJPUElDX0FQSV9LRVkgZW52aXJvbm1lbnQgdmFyaWFibGUgb3IgYWRkIGl0IHRvIHNvbmFtdS5zZWNyZXQudHNcIixcbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIGFwaUtleTtcbn1cblxuLyoqXG4gKiDrj4TrqZTsnbjrs4Qge2RvbWFpbn0uY29udHJhY3QubWTsmYAgYXJjaGl0ZWN0dXJlLm1k66W8IOydveyWtCDsu6jthY3siqTtirjroZwg67CY7ZmY7ZWp64uI64ukLlxuICpcbiAqIC0gY29udHJhY3Qve2RvbWFpbn0ve2RvbWFpbn0uY29udHJhY3QubWQ6IOuPhOuplOyduCDqt5zsuZnqs7wg6rKw7KCVIOq3vOqxsCAo7KO8IOywuOyhsCDrjIDsg4EpXG4gKiAtIC5jbGF1ZGUvc2tpbGxzL3Byb2plY3QvYXJjaGl0ZWN0dXJlLm1kOiDsl5Tti7Dti7Ag7ISk6rOEIOq1rOyhsCAo67O07KGwIOywuOyhsClcbiAqXG4gKiBjb25lIOyDneyEsSDsi5wgTExN7JeQ6rKMIOyghOuLrO2VmOyXrCDrj4TrqZTsnbgg66el65297JeQIOunnuuKlCDrqZTtg4DrjbDsnbTthLDrpbwg7IOd7ISx7ZWY64+E66GdIO2VqeuLiOuLpC5cbiAqL1xuZnVuY3Rpb24gcmVhZFByb2plY3RTa2lsbHMoKTogc3RyaW5nIHtcbiAgdHJ5IHtcbiAgICBjb25zdCB7IFNvbmFtdSB9ID0gcmVxdWlyZShcIi4uL2FwaVwiKTtcbiAgICBjb25zdCBwcm9qZWN0Um9vdCA9IFNvbmFtdS5hcHBSb290UGF0aDtcbiAgICBjb25zdCBjb250ZW50czogc3RyaW5nW10gPSBbXTtcblxuICAgIC8vIGNvbnRyYWN0LyoqLyouY29udHJhY3QubWQg7IiY7KeRXG4gICAgY29uc3QgY29udHJhY3REaXIgPSBwYXRoLmpvaW4ocHJvamVjdFJvb3QsIFwiY29udHJhY3RcIik7XG4gICAgaWYgKGZzLmV4aXN0c1N5bmMoY29udHJhY3REaXIpKSB7XG4gICAgICBjb25zdCBkb21haW5zID0gZnNcbiAgICAgICAgLnJlYWRkaXJTeW5jKGNvbnRyYWN0RGlyLCB7IHdpdGhGaWxlVHlwZXM6IHRydWUgfSlcbiAgICAgICAgLmZpbHRlcigoZCkgPT4gZC5pc0RpcmVjdG9yeSgpKVxuICAgICAgICAubWFwKChkKSA9PiBkLm5hbWUpO1xuXG4gICAgICBmb3IgKGNvbnN0IGRvbWFpbiBvZiBkb21haW5zKSB7XG4gICAgICAgIGNvbnN0IGRvbWFpbkRpciA9IHBhdGguam9pbihjb250cmFjdERpciwgZG9tYWluKTtcbiAgICAgICAgY29uc3QgY29udHJhY3RGaWxlcyA9IGZzXG4gICAgICAgICAgLnJlYWRkaXJTeW5jKGRvbWFpbkRpcilcbiAgICAgICAgICAuZmlsdGVyKChmOiBzdHJpbmcpID0+IGYuZW5kc1dpdGgoXCIuY29udHJhY3QubWRcIikpO1xuXG4gICAgICAgIGZvciAoY29uc3QgZmlsZSBvZiBjb250cmFjdEZpbGVzKSB7XG4gICAgICAgICAgY29uc3QgZmlsZVBhdGggPSBwYXRoLmpvaW4oZG9tYWluRGlyLCBmaWxlKTtcbiAgICAgICAgICBjb25zdCBjb250ZW50ID0gZnMucmVhZEZpbGVTeW5jKGZpbGVQYXRoLCBcInV0Zi04XCIpLnRyaW0oKTtcbiAgICAgICAgICBpZiAoY29udGVudCkge1xuICAgICAgICAgICAgY29udGVudHMucHVzaChgLS0tIGNvbnRyYWN0LyR7ZG9tYWlufS8ke2ZpbGV9IC0tLVxcbiR7Y29udGVudH1gKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyAuY2xhdWRlL3NraWxscy9wcm9qZWN0L2FyY2hpdGVjdHVyZS5tZCDrs7TsobAg7LC47KGwXG4gICAgY29uc3QgYXJjaGl0ZWN0dXJlUGF0aCA9IHBhdGguam9pbihcbiAgICAgIHByb2plY3RSb290LFxuICAgICAgXCIuY2xhdWRlXCIsXG4gICAgICBcInNraWxsc1wiLFxuICAgICAgXCJwcm9qZWN0XCIsXG4gICAgICBcImFyY2hpdGVjdHVyZS5tZFwiLFxuICAgICk7XG4gICAgaWYgKGZzLmV4aXN0c1N5bmMoYXJjaGl0ZWN0dXJlUGF0aCkpIHtcbiAgICAgIGNvbnN0IGNvbnRlbnQgPSBmcy5yZWFkRmlsZVN5bmMoYXJjaGl0ZWN0dXJlUGF0aCwgXCJ1dGYtOFwiKS50cmltKCk7XG4gICAgICBpZiAoY29udGVudCkge1xuICAgICAgICBjb250ZW50cy5wdXNoKGAtLS0gYXJjaGl0ZWN0dXJlLm1kIC0tLVxcbiR7Y29udGVudH1gKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gY29udGVudHMuam9pbihcIlxcblxcblwiKTtcbiAgfSBjYXRjaCB7XG4gICAgLy8gU29uYW11IOuvuOy0iOq4sO2ZlCDrmJDripQg7YyM7J28IOygkeq3vCDsmKTrpZgg7IucIOu5iCDrrLjsnpDsl7Qg67CY7ZmYXG4gICAgcmV0dXJuIFwiXCI7XG4gIH1cbn1cblxuLyoqXG4gKiBMTE0g7ZSE66Gs7ZSE7Yq466W8IOyDneyEse2VqeuLiOuLpC5cbiAqXG4gKiBhaS1jbGllbnQudHMg7Yyo7YS07J2EIOywuOqzoO2VmOyXrCDrqoXtmZXtlZwg7KeA7Iuc7IKs7ZWt6rO8IOy2nOugpSDtmJXsi53snYQg7KCc6rO17ZWp64uI64ukLlxuICovXG5mdW5jdGlvbiBidWlsZFByb21wdChjb250ZXh0OiBDb25lR2VuZXJhdGlvbkNvbnRleHQpOiBzdHJpbmcge1xuICBjb25zdCBsb2NhbGUgPSBjb250ZXh0LmxvY2FsZSB8fCBcImtvXCI7XG4gIGNvbnN0IGxvY2FsZURlc2MgPSB7XG4gICAga286IFwiS29yZWFuXCIsXG4gICAgZW46IFwiRW5nbGlzaFwiLFxuICAgIGphOiBcIkphcGFuZXNlXCIsXG4gIH1bbG9jYWxlXTtcblxuICBjb25zdCBwcm9qZWN0Q29udGV4dCA9IHJlYWRQcm9qZWN0U2tpbGxzKCk7XG4gIGNvbnN0IHByb2plY3RTZWN0aW9uID0gcHJvamVjdENvbnRleHRcbiAgICA/IGBcXG5QUk9KRUNUIENPTlRFWFQgKGJ1c2luZXNzIHJlcXVpcmVtZW50cyBhbmQgZG9tYWluIGtub3dsZWRnZSk6XFxuJHtwcm9qZWN0Q29udGV4dH1cXG5cXG5Vc2UgdGhlIGFib3ZlIHByb2plY3QgY29udGV4dCB0byB1bmRlcnN0YW5kIHRoZSBidXNpbmVzcyBkb21haW4sIGVudGl0eSBwdXJwb3NlcywgZmllbGQgbWVhbmluZ3MsIGFuZCByZWxhdGlvbnNoaXBzLiBHZW5lcmF0ZSBjb25lIG1ldGFkYXRhIHRoYXQgcmVmbGVjdHMgdGhpcyBwcm9qZWN0J3MgYWN0dWFsIHJlcXVpcmVtZW50cywgbm90IGdlbmVyaWMgYXNzdW1wdGlvbnMuXFxuYFxuICAgIDogXCJcIjtcblxuICByZXR1cm4gYFlvdSBhcmUgYSBTb25hbXUgZnJhbWV3b3JrIGV4cGVydC4gR2VuZXJhdGUgY29uZSBtZXRhZGF0YSBmb3IgZGF0YWJhc2UgZW50aXR5IGZpeHR1cmUgZ2VuZXJhdGlvbi5cblxuQ1JJVElDQUwgUFJJT1JJVFkgUlVMRTpcblRoZSBcIm5vdGVcIiBmaWVsZCBpcyB0aGUgUFJJTUFSWSBzb3VyY2UgZm9yIGZpeHR1cmUgZGF0YSBnZW5lcmF0aW9uLiBXaGVuIC0tdXNlLWxsbSBpcyBlbmFibGVkLCB0aGUgZml4dHVyZSBnZW5lcmF0b3IgcmVhZHMgY29uZS5ub3RlIGFuZCBhc2tzIExMTSB0byBnZW5lcmF0ZSBjb250ZXh0dWFsbHkgYXBwcm9wcmlhdGUgZGF0YSBCRUZPUkUgZmFsbGluZyBiYWNrIHRvIGZpeHR1cmVHZW5lcmF0b3IuXG5UaGVyZWZvcmUsIGNvbmUubm90ZSBtdXN0IGFsd2F5cyBjb250YWluIHJpY2gsIGRvbWFpbi1zcGVjaWZpYyBkZXNjcmlwdGlvbnMgd2l0aCBjb25jcmV0ZSBleGFtcGxlcyBhbmQgdmFsdWUgcmFuZ2VzLlxuZml4dHVyZUdlbmVyYXRvciBpcyBvbmx5IGEgRkFMTEJBQ0sgZm9yIHdoZW4gTExNIGlzIHVuYXZhaWxhYmxlIChubyBBUEkga2V5KS4gV3JpdGUgaXQgYXMgYSBiZXN0LWVmZm9ydCBhcHByb3hpbWF0aW9uLCBidXQgbmV2ZXIgcmVseSBvbiBpdCBhcyB0aGUgcHJpbWFyeSBnZW5lcmF0aW9uIG1ldGhvZC5cbiR7cHJvamVjdFNlY3Rpb259XG5FTlRJVFkgU1RSVUNUVVJFOlxuJHtKU09OLnN0cmluZ2lmeShjb250ZXh0LmVudGl0eSwgbnVsbCwgMil9XG5cbkxPQ0FMRTogJHtsb2NhbGV9ICgke2xvY2FsZURlc2N9KVxuXG5JTlNUUlVDVElPTlM6XG4xLiBFbnRpdHkgY29uZSBtZXRhZGF0YTpcbiAgIC0gbm90ZTogRGVzY3JpYmUgd2hhdCB0aGlzIGVudGl0eSByZXByZXNlbnRzLCBpdHMgcHVycG9zZSwgcmVsYXRpb25zaGlwcywgYnVzaW5lc3MgY29udGV4dCwgYW5kIG92ZXJhbGwgZ3VpZGFuY2UgZm9yIGdlbmVyYXRpbmcgdGVzdCBkYXRhLiBDb21iaW5lIGFsbCByZWxldmFudCBpbmZvcm1hdGlvbiBpbnRvIG9uZSBjb2hlcmVudCBkZXNjcmlwdGlvbi5cbiAgIC0gdGFnczogUmVsZXZhbnQgY2F0ZWdvcml6YXRpb24gdGFnc1xuXG4yLiBGb3IgZWFjaCBwcm9wLCBnZW5lcmF0ZSBhcHByb3ByaWF0ZSBjb25lIG1ldGFkYXRhOlxuICAgLSBub3RlIChNT1NUIElNUE9SVEFOVCk6IERlc2NyaWJlIHdoYXQgdGhpcyBmaWVsZCByZXByZXNlbnRzIGluIGJ1c2luZXNzIHRlcm1zLCBhbmQgcHJvdmlkZSBkZXRhaWxlZCBndWlkYW5jZSBmb3IgcmVhbGlzdGljIHRlc3QgZGF0YSBnZW5lcmF0aW9uLiBJbmNsdWRlIGNvbmNyZXRlIGV4YW1wbGVzLCB2YWx1ZSByYW5nZXMsIGZvcm1hdHRpbmcgcnVsZXMsIGFuZCBkb21haW4gY29uc3RyYWludHMuIFRoaXMgaXMgdGhlIHByaW1hcnkgaW5wdXQgTExNIHVzZXMgdG8gZ2VuZXJhdGUgZml4dHVyZSBkYXRhLlxuICAgLSBmaXh0dXJlR2VuZXJhdG9yOiBmYWtlci5qcyBleHByZXNzaW9uIGFzIEZBTExCQUNLIG9ubHkgKHNlZSBydWxlIDkgZm9yIGV4Y2VwdGlvbnMpLiBGb3IgZnJlZS10ZXh0IGZpZWxkcyB3aGVyZSBmYWtlciBjYW5ub3QgcHJvZHVjZSBkb21haW4tYXBwcm9wcmlhdGUgY29udGVudCAoZGVzY3JpcHRpb24sIHN1bW1hcnksIG5vdGUsIHJlYXNvbiwgdGl0bGUsIGV0Yy4pLCBwcmVmZXIgdXNpbmcgZmFrZXIuaGVscGVycy5hcnJheUVsZW1lbnQoWy4uLl0pIHdpdGggNS0xMCBkb21haW4tc3BlY2lmaWMgZXhhbXBsZSB2YWx1ZXMgcmF0aGVyIHRoYW4gZmFrZXIubG9yZW0uKi5cblxuMy4gRmllbGQgdHlwZSDihpIgZmFrZXIuanMgbWFwcGluZzpcbiAgIC0gZW1haWwg4oaSIGZha2VyLmludGVybmV0LmVtYWlsKClcbiAgIC0gcGhvbmUg4oaSIGZha2VyLnBob25lLm51bWJlcigpXG4gICAtIG5hbWUvdXNlcm5hbWUg4oaSIGZha2VyLnBlcnNvbi5mdWxsTmFtZSgpICh3aXRoIGxvY2FsZSlcbiAgIC0gYmlydGhfZGF0ZSDihpIgZmFrZXIuZGF0ZS5iaXJ0aGRhdGUoeyBtaW46IDE4LCBtYXg6IDY1LCBtb2RlOiAnYWdlJyB9KVxuICAgLSBzYWxhcnkg4oaSIGZha2VyLm51bWJlci5pbnQoeyBtaW46IDMwXzAwMF8wMDAsIG1heDogMTUwXzAwMF8wMDAgfSkgZm9yIGtvIGxvY2FsZVxuICAgLSBjb21wYW55X25hbWUg4oaSIGZha2VyLmNvbXBhbnkubmFtZSgpXG4gICAtIGFkZHJlc3Mg4oaSIGZha2VyLmxvY2F0aW9uLnN0cmVldEFkZHJlc3MoKVxuXG40LiBSZWxhdGlvbiBmaWVsZHMgKEJlbG9uZ3NUb09uZSwgT25lVG9PbmUgd2l0aCBoYXNKb2luQ29sdW1uKTpcbiAgIC0gQWx3YXlzIGFkZCBkYXRhU291cmNlOiB7IHN0cmF0ZWd5OiBcInJlY2VudFwiLCBjb25maWc6IHsgbGltaXQ6IDMtNSB9IH1cbiAgIC0gbm90ZTogRXhwbGFpbiB3aGF0IHRoaXMgcmVsYXRpb24gcmVwcmVzZW50cyBhbmQgdGhhdCBpdCByZWZlcmVuY2VzIGV4aXN0aW5nIGRhdGFcblxuNS4gU3Vic2V0cyBjb25lIG1ldGFkYXRhIChJTVBPUlRBTlQgLSBnZW5lcmF0ZSBmb3IgQUxMIHN1YnNldHMpOlxuICAgLSBub3RlOiBEZXNjcmliZSB3aGF0IHRoaXMgc3Vic2V0IHJlcHJlc2VudHMsIHdoYXQgZmllbGRzIGl0IGluY2x1ZGVzLCBhbmQgd2hlbiB0byB1c2UgaXRcblxuNi4gRW51bXMgY29uZSBtZXRhZGF0YSAoSU1QT1JUQU5UIC0gZ2VuZXJhdGUgZm9yIEFMTCBlbnVtcyk6XG4gICAtIG5vdGU6IERlc2NyaWJlIHdoYXQgdGhpcyBlbnVtIHJlcHJlc2VudHMuIElmIGFueSBwcm9wIHVzZXMgdGhpcyBlbnVtIHR5cGUsIGluY2x1ZGUgdGhlIHNhbWUgZ3VpZGFuY2UgZnJvbSB0aGF0IHByb3AncyBub3RlLlxuICAgLSBGb3IgZWFjaCBlbnVtIHZhbHVlLCBwcm92aWRlIG5vdGUgZXhwbGFpbmluZyB3aGF0IHRoYXQgc3BlY2lmaWMgdmFsdWUgbWVhbnNcblxuNy4gS29yZWFuIGZpZWxkIG5hbWVzIChsb2NhbGU9a28pOlxuICAgLSBJbmZlciBtZWFuaW5nIGFuZCBnZW5lcmF0ZSBhcHByb3ByaWF0ZSBmYWtlclxuICAgLSBcIuydtOumhFwiIOKGkiBmYWtlci5wZXJzb24uZnVsbE5hbWUoKVxuICAgLSBcIuyDneuFhOyblOydvFwiIOKGkiBmYWtlci5kYXRlLmJpcnRoZGF0ZSgpXG4gICAtIFwi7KO87IaMXCIg4oaSIGZha2VyLmxvY2F0aW9uLnN0cmVldEFkZHJlc3MoKVxuXG44LiBMb2NhbGUtc3BlY2lmaWMgdmFsdWVzOlxuICAgLSBrbzogS29yZWFuIG5hbWVzLCBhZGRyZXNzZXMsIHBob25lIG51bWJlcnMgKDAxMC1YWFhYLVhYWFggZm9ybWF0KVxuICAgLSBlbjogRW5nbGlzaCBuYW1lcywgVVMgYWRkcmVzc2VzXG4gICAtIGphOiBKYXBhbmVzZSBuYW1lcywgYWRkcmVzc2VzXG5cbjkuIENvcnJlbGF0ZWQgZmllbGRzIChJTVBPUlRBTlQgLSBkbyBOT1QgdXNlIGZpeHR1cmVHZW5lcmF0b3IgZm9yIHRoZXNlKTpcbiAgIElmIG11bHRpcGxlIHByb3BzIGFyZSBzZW1hbnRpY2FsbHkgcmVsYXRlZCBhbmQgbXVzdCBiZSBjb25zaXN0ZW50IHdpdGggZWFjaCBvdGhlciAoZS5nLiBuYW1lICsgbmFtZV9lbiwgbmFtZSArIG5hbWVfamEsIHRpdGxlICsgdGl0bGVfZW4pLCBkbyBOT1Qgc2V0IGZpeHR1cmVHZW5lcmF0b3Igb24gYW55IG9mIHRoZW0uXG4gICBJbnN0ZWFkLCBzZXQgb25seSBub3RlIHdpdGggYSBjbGVhciBkZXNjcmlwdGlvbiB0aGF0IGV4cGxhaW5zIHRoZSByZWxhdGlvbnNoaXAuXG4gICBFeGFtcGxlOiBpZiBuYW1lIGlzIGEgS29yZWFuIGZ1bGwgbmFtZSBsaWtlIFwi6rmA66+87IiYXCIsIHRoZW4gbmFtZV9lbiBtdXN0IGJlIGl0cyByb21hbml6ZWQgZm9ybSBcIktpbSBNaW5zdVwiLlxuICAgVGhlIGZpeHR1cmUgZ2VuZXJhdG9yIHdpbGwgcGFzcyBhbGwgc3VjaCBwcm9wcyB0b2dldGhlciB0byBMTE0gaW4gYSBzaW5nbGUgY2FsbCB0byBlbnN1cmUgY29uc2lzdGVuY3kuXG4gICBEZXRlY3Rpb24gcnVsZTogaWYgYSBwcm9wIG5hbWUgbWF0Y2hlcyBhbm90aGVyIHByb3AgbmFtZSB3aXRoIGEgbG9jYWxlIHN1ZmZpeCAoX2VuLCBfa28sIF9qYSwgX2NuKSBvciB2aWNlIHZlcnNhLCB0cmVhdCB0aGVtIGFzIGNvcnJlbGF0ZWQuXG5cbjEwLiBTdHJpbmcgUEsg4oCUIHNlcXVlbmNlIHZzIFVVSUQ6XG4gICAtIERCIHNlcXVlbmNlIGlkOiBJZiBhIHByb3AgbmFtZWQgXCJpZFwiIGhhcyB0eXBlIFwic3RyaW5nXCIgYW5kIHVzZXMgYSBEQiBzZXF1ZW5jZSAoaW5kaWNhdGVkIGJ5IGRiRGVmYXVsdCBjb250YWluaW5nIFwibmV4dHZhbFwiKSwgc2V0IGZpeHR1cmVTdHJhdGVneTogXCJzZXF1ZW5jZVwiIGFuZCBkbyBOT1Qgc2V0IGZpeHR1cmVHZW5lcmF0b3IuIG5vdGUgc2hvdWxkIG1lbnRpb24gc2VxdWVudGlhbCBudW1iZXIgc3RvcmVkIGFzIHN0cmluZy5cbiAgIC0gYmV0dGVyLWF1dGggZW50aXR5IGlkOiBBY2NvdW50LCBTZXNzaW9uLCBWZXJpZmljYXRpb24g7JeU7Yuw7Yuw7J2YIGlk64qUIGJldHRlci1hdXRo6rCAIGNyeXB0by5yYW5kb21VVUlEKCnroZwg7IOd7ISx7ZWY64qUIFVVSUTri6QuIGZpeHR1cmVTdHJhdGVneTogXCJzZXF1ZW5jZVwi66W8IOygiOuMgCDsgqzsmqntlZjsp4Ag66eQ6rOgLCBmaXh0dXJlR2VuZXJhdG9yOiBcImZha2VyLnN0cmluZy51dWlkKClcIuulvCDsgqzsmqntlZzri6QuXG5cbjExLiBmaXh0dXJlQ29tcGFuaW9ucyAoSU1QT1JUQU5UIC0gbmV2ZXIgZ2VuZXJhdGUgb3IgbW9kaWZ5KTpcbiAgIC0gZml4dHVyZUNvbXBhbmlvbnMgaXMgdXNlci1kZWNsYXJlZCBtZXRhZGF0YSB0aGF0IHRyaWdnZXJzIGF1dG9tYXRpYyBjb21wYW5pb24gZml4dHVyZSBjcmVhdGlvbiB3aGVuIGEgcGFyZW50IGZpeHR1cmUgaXMgZ2VuZXJhdGVkLlxuICAgLSBEbyBOT1QgZ2VuZXJhdGUgb3Igc3VnZ2VzdCBmaXh0dXJlQ29tcGFuaW9ucyBmb3IgYW55IHByb3AuIE9ubHkgdXNlcnMgZGVjbGFyZSB0aGlzIGludGVudGlvbmFsbHkuXG4gICAtIElmIGEgcHJvcCdzIGV4aXN0aW5nIGNvbmUgYWxyZWFkeSBjb250YWlucyBmaXh0dXJlQ29tcGFuaW9ucywgcHJlc2VydmUgaXQgZXhhY3RseSBhcy1pcyBpbiB0aGUgcHJvcENvbmVzIG91dHB1dC4gRG8gbm90IHJlbW92ZSwgYWx0ZXIsIG9yIG9taXQgaXQuXG4gICAtIEV4YW1wbGU6IGlmIFVzZXIgZW50aXR5J3MgXCJpZFwiIHByb3AgY29uZSBoYXMgZml4dHVyZUNvbXBhbmlvbnMsIGluY2x1ZGUgaXQgdW5jaGFuZ2VkIGluIHByb3BDb25lc1tcImlkXCJdLlxuXG4ke1xuICBjb250ZXh0LmV4aXN0aW5nQ29uZXNcbiAgICA/IGBcbkVYSVNUSU5HIENPTkVTIChwcmVzZXJ2ZSB0aGVzZSBpZiBwcmVzZW50KTpcbiR7SlNPTi5zdHJpbmdpZnkoY29udGV4dC5leGlzdGluZ0NvbmVzLCBudWxsLCAyKX1cbmBcbiAgICA6IFwiXCJcbn1cblxuT1VUUFVUIEZPUk1BVDpcblJldHVybiBPTkxZIHZhbGlkIEpTT04gKG5vIG1hcmtkb3duLCBubyBjb2RlIGJsb2NrcykuIFVzZSB0aGlzIGV4YWN0IHN0cnVjdHVyZTpcbntcbiAgXCJlbnRpdHlDb25lXCI6IHtcbiAgICBcIm5vdGVcIjogXCJEZXNjcmlwdGlvbiBvZiB0aGUgZW50aXR5LCBpdHMgcHVycG9zZSwgYW5kIGd1aWRhbmNlIGZvciBmaXh0dXJlIGdlbmVyYXRpb25cIixcbiAgICBcInRhZ3NcIjogW1wib3B0aW9uYWxcIiwgXCJ0YWdzXCJdXG4gIH0sXG4gIFwicHJvcENvbmVzXCI6IHtcbiAgICBcInByb3BfbmFtZVwiOiB7XG4gICAgICBcIm5vdGVcIjogXCJEZXNjcmlwdGlvbiBvZiB0aGlzIGZpZWxkIGFuZCBndWlkYW5jZSBmb3IgcmVhbGlzdGljIHRlc3QgZGF0YSBnZW5lcmF0aW9uXCIsXG4gICAgICBcImZpeHR1cmVHZW5lcmF0b3JcIjogXCJmYWtlci54eHgueXl5KClcIixcbiAgICAgIFwiZGF0YVNvdXJjZVwiOiB7IFwic3RyYXRlZ3lcIjogXCJyZWNlbnRcIiwgXCJjb25maWdcIjogeyBcImxpbWl0XCI6IDUgfSB9XG4gICAgfVxuICB9LFxuICBcInN1YnNldENvbmVzXCI6IHtcbiAgICBcIkFcIjoge1xuICAgICAgXCJub3RlXCI6IFwiRGVzY3JpcHRpb24gb2Ygc3Vic2V0IEEsIHdoYXQgZmllbGRzIGl0IGluY2x1ZGVzLCBhbmQgd2hlbiB0byB1c2UgaXRcIlxuICAgIH1cbiAgfSxcbiAgXCJlbnVtQ29uZXNcIjoge1xuICAgIFwiRW51bU5hbWVcIjoge1xuICAgICAgXCJub3RlXCI6IFwiRGVzY3JpcHRpb24gb2YgdGhlIGVudW0gYW5kIGd1aWRhbmNlIGZvciBnZW5lcmF0aW5nIHZhbHVlc1wiLFxuICAgICAgXCJ2YWx1ZXNcIjoge1xuICAgICAgICBcIlZBTFVFX0tFWVwiOiB7XG4gICAgICAgICAgXCJub3RlXCI6IFwiJHtsb2NhbGVEZXNjfSBkZXNjcmlwdGlvbiBvZiB0aGlzIGVudW0gdmFsdWVcIlxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbklNUE9SVEFOVDogUmV0dXJuIHB1cmUgSlNPTiBvbmx5LiBEbyBOT1Qgd3JhcCBpbiBtYXJrZG93biBjb2RlIGJsb2Nrcy5gO1xufVxuXG4vKipcbiAqIEFudGhyb3BpYyBBUEnrpbwg7Zi47Lac7ZWY7JesIExMTSDsnZHri7XsnYQg67Cb7Iq164uI64ukLlxuICpcbiAqIEBwYXJhbSBwcm9tcHQgLSDsg53shLHtlaAg7ZSE66Gs7ZSE7Yq4XG4gKiBAcGFyYW0gYXBpS2V5IC0gQW50aHJvcGljIEFQSSDtgqRcbiAqIEByZXR1cm5zIExMTSDsnZHri7Ug7YWN7Iqk7Yq4IOuwjyDthqDtgbAg7IKs7Jqp65+JXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGNhbGxBbnRocm9waWNBUEkoXG4gIHByb21wdDogc3RyaW5nLFxuICBhcGlLZXk6IHN0cmluZyxcbik6IFByb21pc2U8eyB0ZXh0OiBzdHJpbmc7IHRva2Vuc1VzZWQ6IG51bWJlciB9PiB7XG4gIHRyeSB7XG4gICAgLy8gQGFpLXNkay9hbnRocm9waWPqs7wgYWkg7Yyo7YKk7KeA64qUIG9wdGlvbmFsIGRlcGVuZGVuY3nsnbTrr4DroZwg64+Z7KCBIGltcG9ydFxuICAgIGNvbnN0IHsgY3JlYXRlQW50aHJvcGljIH0gPSBhd2FpdCBpbXBvcnQoXCJAYWktc2RrL2FudGhyb3BpY1wiKTtcbiAgICBjb25zdCB7IGdlbmVyYXRlVGV4dCB9ID0gYXdhaXQgaW1wb3J0KFwiYWlcIik7XG5cbiAgICBjb25zdCBhbnRocm9waWMgPSBjcmVhdGVBbnRocm9waWMoe1xuICAgICAgYXBpS2V5LFxuICAgIH0pO1xuXG4gICAgY29uc3QgeyB0ZXh0LCB1c2FnZSB9ID0gYXdhaXQgZ2VuZXJhdGVUZXh0KHtcbiAgICAgIG1vZGVsOiBhbnRocm9waWMoXCJjbGF1ZGUtc29ubmV0LTQtNVwiKSxcbiAgICAgIHByb21wdCxcbiAgICB9KTtcblxuICAgIGNvbnN0IHRva2Vuc1VzZWQgPSB1c2FnZT8udG90YWxUb2tlbnMgfHwgMDtcbiAgICBpZiAodXNhZ2UpIHtcbiAgICAgIGNvbnNvbGUubG9nKGBbQ29uZSBHZW5lcmF0b3JdIFRva2VucyB1c2VkOiAke3Rva2Vuc1VzZWR9YCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgdGV4dCwgdG9rZW5zVXNlZCB9O1xuICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgIGlmIChlcnJvciAmJiB0eXBlb2YgZXJyb3IgPT09IFwib2JqZWN0XCIgJiYgXCJzdGF0dXNDb2RlXCIgaW4gZXJyb3IpIHtcbiAgICAgIGNvbnN0IHN0YXR1c0NvZGUgPSAoZXJyb3IgYXMgeyBzdGF0dXNDb2RlOiBudW1iZXIgfSkuc3RhdHVzQ29kZTtcbiAgICAgIGlmIChzdGF0dXNDb2RlID09PSA0MjkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUmF0ZSBsaW1pdCBleGNlZWRlZC4gUGxlYXNlIHRyeSBhZ2FpbiBsYXRlci5cIik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgbWVzc2FnZSA9IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogXCJVbmtub3duIGVycm9yXCI7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBMTE0gQVBJIGZhaWxlZDogJHttZXNzYWdlfWApO1xuICB9XG59XG5cbi8qKlxuICogTExNIOydkeuLteydhCDtjIzsi7HtlZjsl6wgQ29uZUdlbmVyYXRpb25SZXN1bHTroZwg67OA7ZmY7ZWp64uI64ukLlxuICpcbiAqIE1hcmtkb3duIOy9lOuTnCDruJTroZ3snbQg7Y+s7ZWo65CY7Ja0IOyeiOycvOuptCDsoJzqsbDtlanri4jri6QuXG4gKi9cbmZ1bmN0aW9uIHBhcnNlQ29uZVJlc3BvbnNlKHRleHQ6IHN0cmluZyk6IENvbmVHZW5lcmF0aW9uUmVzdWx0IHtcbiAgbGV0IGpzb25UZXh0ID0gdGV4dC50cmltKCk7XG4gIGpzb25UZXh0ID0ganNvblRleHQucmVwbGFjZSgvXmBgYGpzb25cXHMqL2ksIFwiXCIpO1xuICBqc29uVGV4dCA9IGpzb25UZXh0LnJlcGxhY2UoL2BgYFxccyokLywgXCJcIik7XG4gIGpzb25UZXh0ID0ganNvblRleHQudHJpbSgpO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgcGFyc2VkID0gSlNPTi5wYXJzZShqc29uVGV4dCk7XG5cbiAgICBpZiAoIXBhcnNlZC5wcm9wQ29uZXMgfHwgdHlwZW9mIHBhcnNlZC5wcm9wQ29uZXMgIT09IFwib2JqZWN0XCIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgcmVzcG9uc2U6IHByb3BDb25lcyBpcyByZXF1aXJlZCBhbmQgbXVzdCBiZSBhbiBvYmplY3RcIik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGVudGl0eUNvbmU6IHBhcnNlZC5lbnRpdHlDb25lLFxuICAgICAgcHJvcENvbmVzOiBwYXJzZWQucHJvcENvbmVzLFxuICAgICAgc3Vic2V0Q29uZXM6IHBhcnNlZC5zdWJzZXRDb25lcyB8fCB7fSxcbiAgICAgIGVudW1Db25lczogcGFyc2VkLmVudW1Db25lcyB8fCB7fSxcbiAgICAgIHRva2Vuc1VzZWQ6IDAsXG4gICAgfTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBjb25zdCBtZXNzYWdlID0gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBcIlVua25vd24gZXJyb3JcIjtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgRmFpbGVkIHRvIHBhcnNlIExMTSByZXNwb25zZTogJHttZXNzYWdlfVxcblxcbmAgK1xuICAgICAgICBgT3JpZ2luYWwgcmVzcG9uc2U6XFxuJHt0ZXh0fVxcblxcbmAgK1xuICAgICAgICBgQ2xlYW5lZCBKU09OOlxcbiR7anNvblRleHR9YCxcbiAgICApO1xuICB9XG59XG5cbi8qKlxuICog7IOd7ISx65CcIGNvbmXsnYQg6riw7KG0IGNvbmXqs7wg67OR7ZWp7ZWp64uI64ukLlxuICpcbiAqIOq4sOyhtCBjb25l7J20IOyeiOycvOuptCDrs7TsobTtlZjqs6AsIOyXhuuKlCDqsr3smrDsl5Drp4wg7IOd7ISx65CcIGNvbmXsnYQg7IKs7Jqp7ZWp64uI64ukLlxuICovXG5mdW5jdGlvbiBtZXJnZVdpdGhFeGlzdGluZyhcbiAgZ2VuZXJhdGVkOiBDb25lR2VuZXJhdGlvblJlc3VsdCxcbiAgZXhpc3Rpbmc6IFJlY29yZDxzdHJpbmcsIENvbmU+LFxuKTogQ29uZUdlbmVyYXRpb25SZXN1bHQge1xuICBjb25zdCByZXN1bHQgPSB7IC4uLmdlbmVyYXRlZCB9O1xuXG4gIGNvbnN0IGVudGl0eUtleSA9IGBlbnRpdHk6JHtnZW5lcmF0ZWQuZW50aXR5Q29uZSA/IFwicHJlc2VudFwiIDogXCJtaXNzaW5nXCJ9YDtcbiAgaWYgKGV4aXN0aW5nW2VudGl0eUtleV0pIHtcbiAgICByZXN1bHQuZW50aXR5Q29uZSA9IGV4aXN0aW5nW2VudGl0eUtleV07XG4gIH1cblxuICBmb3IgKGNvbnN0IHByb3BOYW1lIG9mIE9iamVjdC5rZXlzKGdlbmVyYXRlZC5wcm9wQ29uZXMpKSB7XG4gICAgY29uc3Qga2V5ID0gYHByb3A6JHtwcm9wTmFtZX1gO1xuICAgIGlmIChleGlzdGluZ1trZXldKSB7XG4gICAgICByZXN1bHQucHJvcENvbmVzW3Byb3BOYW1lXSA9IGV4aXN0aW5nW2tleV07XG4gICAgfVxuICB9XG5cbiAgZm9yIChjb25zdCBlbnVtSWQgb2YgT2JqZWN0LmtleXMoZ2VuZXJhdGVkLmVudW1Db25lcykpIHtcbiAgICBjb25zdCBrZXkgPSBgZW51bToke2VudW1JZH1gO1xuICAgIGlmIChleGlzdGluZ1trZXldKSB7XG4gICAgICByZXN1bHQuZW51bUNvbmVzW2VudW1JZF0gPSBleGlzdGluZ1trZXldO1xuICAgIH1cbiAgfVxuXG4gIGZvciAoY29uc3Qgc3Vic2V0S2V5IG9mIE9iamVjdC5rZXlzKGdlbmVyYXRlZC5zdWJzZXRDb25lcykpIHtcbiAgICBjb25zdCBrZXkgPSBgc3Vic2V0OiR7c3Vic2V0S2V5fWA7XG4gICAgaWYgKGV4aXN0aW5nW2tleV0pIHtcbiAgICAgIHJlc3VsdC5zdWJzZXRDb25lc1tzdWJzZXRLZXldID0gZXhpc3Rpbmdba2V5XTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIG5vdGXqsIAg7JeG64qUIGNvbmXrp4wg7IOd7ISx7ZWY6rOgIOuCmOuouOyngOuKlCDrs7TsobTtlanri4jri6QuXG4gKlxuICog6riw7KG0IGNvbmXsl5Agbm90ZeqwgCDsnojsnLzrqbQg67O07KG07ZWY6rOgLCDsl4bsnLzrqbQg7IOI66GcIOyDneyEseuQnCBjb25l7J2EIOyCrOyaqe2VqeuLiOuLpC5cbiAqL1xuZnVuY3Rpb24gbWVyZ2VPbmx5RW1wdHkoXG4gIGdlbmVyYXRlZDogQ29uZUdlbmVyYXRpb25SZXN1bHQsXG4gIGV4aXN0aW5nOiBSZWNvcmQ8c3RyaW5nLCBDb25lPixcbik6IENvbmVHZW5lcmF0aW9uUmVzdWx0IHtcbiAgY29uc3QgcmVzdWx0ID0geyAuLi5nZW5lcmF0ZWQgfTtcblxuICAvLyBFbnRpdHkgY29uZTogc2NhbGXsnbQg7J6I7Jy866m0IOuztOyhtFxuICBjb25zdCBlbnRpdHlLZXkgPSBgZW50aXR5OiR7Z2VuZXJhdGVkLmVudGl0eUNvbmUgPyBcInByZXNlbnRcIiA6IFwibWlzc2luZ1wifWA7XG4gIGlmIChleGlzdGluZ1tlbnRpdHlLZXldPy5ub3RlKSB7XG4gICAgcmVzdWx0LmVudGl0eUNvbmUgPSBleGlzdGluZ1tlbnRpdHlLZXldO1xuICB9XG5cbiAgLy8gUHJvcCBjb25lczogc2NhbGXsnbQg7J6I7Jy866m0IOuztOyhtFxuICBmb3IgKGNvbnN0IHByb3BOYW1lIG9mIE9iamVjdC5rZXlzKGdlbmVyYXRlZC5wcm9wQ29uZXMpKSB7XG4gICAgY29uc3Qga2V5ID0gYHByb3A6JHtwcm9wTmFtZX1gO1xuICAgIGlmIChleGlzdGluZ1trZXldPy5ub3RlKSB7XG4gICAgICByZXN1bHQucHJvcENvbmVzW3Byb3BOYW1lXSA9IGV4aXN0aW5nW2tleV07XG4gICAgfVxuICB9XG5cbiAgLy8gRW51bSBjb25lczogc2NhbGXsnbQg7J6I7Jy866m0IOuztOyhtFxuICBmb3IgKGNvbnN0IGVudW1JZCBvZiBPYmplY3Qua2V5cyhnZW5lcmF0ZWQuZW51bUNvbmVzKSkge1xuICAgIGNvbnN0IGtleSA9IGBlbnVtOiR7ZW51bUlkfWA7XG4gICAgaWYgKGV4aXN0aW5nW2tleV0/Lm5vdGUpIHtcbiAgICAgIHJlc3VsdC5lbnVtQ29uZXNbZW51bUlkXSA9IGV4aXN0aW5nW2tleV07XG4gICAgfVxuICB9XG5cbiAgLy8gU3Vic2V0IGNvbmVzOiBzY2FsZeydtCDsnojsnLzrqbQg67O07KG0XG4gIGZvciAoY29uc3Qgc3Vic2V0S2V5IG9mIE9iamVjdC5rZXlzKGdlbmVyYXRlZC5zdWJzZXRDb25lcykpIHtcbiAgICBjb25zdCBrZXkgPSBgc3Vic2V0OiR7c3Vic2V0S2V5fWA7XG4gICAgaWYgKGV4aXN0aW5nW2tleV0/Lm5vdGUpIHtcbiAgICAgIHJlc3VsdC5zdWJzZXRDb25lc1tzdWJzZXRLZXldID0gZXhpc3Rpbmdba2V5XTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuIl0sIm5hbWVzIjpbImZzIiwicGF0aCIsImdlbmVyYXRlQ29uZXMiLCJjb250ZXh0IiwiYXBpS2V5IiwiZ2V0QXBpS2V5IiwicHJvbXB0IiwiYnVpbGRQcm9tcHQiLCJ0ZXh0IiwicmVzcG9uc2VUZXh0IiwidG9rZW5zVXNlZCIsImNhbGxBbnRocm9waWNBUEkiLCJyZXN1bHQiLCJwYXJzZUNvbmVSZXNwb25zZSIsImV4aXN0aW5nQ29uZXMiLCJvbmx5RW1wdHkiLCJtZXJnZU9ubHlFbXB0eSIsIm1lcmdlV2l0aEV4aXN0aW5nIiwiU29uYW11IiwicmVxdWlyZSIsInNlY3JldCIsImFudGhyb3BpY19hcGlfa2V5IiwidW5kZWZpbmVkIiwicHJvY2VzcyIsImVudiIsIkFOVEhST1BJQ19BUElfS0VZIiwiRXJyb3IiLCJyZWFkUHJvamVjdFNraWxscyIsInByb2plY3RSb290IiwiYXBwUm9vdFBhdGgiLCJjb250ZW50cyIsImNvbnRyYWN0RGlyIiwiam9pbiIsImV4aXN0c1N5bmMiLCJkb21haW5zIiwicmVhZGRpclN5bmMiLCJ3aXRoRmlsZVR5cGVzIiwiZmlsdGVyIiwiZCIsImlzRGlyZWN0b3J5IiwibWFwIiwibmFtZSIsImRvbWFpbiIsImRvbWFpbkRpciIsImNvbnRyYWN0RmlsZXMiLCJmIiwiZW5kc1dpdGgiLCJmaWxlIiwiZmlsZVBhdGgiLCJjb250ZW50IiwicmVhZEZpbGVTeW5jIiwidHJpbSIsInB1c2giLCJhcmNoaXRlY3R1cmVQYXRoIiwibG9jYWxlIiwibG9jYWxlRGVzYyIsImtvIiwiZW4iLCJqYSIsInByb2plY3RDb250ZXh0IiwicHJvamVjdFNlY3Rpb24iLCJKU09OIiwic3RyaW5naWZ5IiwiZW50aXR5IiwiY3JlYXRlQW50aHJvcGljIiwiZ2VuZXJhdGVUZXh0IiwiYW50aHJvcGljIiwidXNhZ2UiLCJtb2RlbCIsInRvdGFsVG9rZW5zIiwiY29uc29sZSIsImxvZyIsImVycm9yIiwic3RhdHVzQ29kZSIsIm1lc3NhZ2UiLCJqc29uVGV4dCIsInJlcGxhY2UiLCJwYXJzZWQiLCJwYXJzZSIsInByb3BDb25lcyIsImVudGl0eUNvbmUiLCJzdWJzZXRDb25lcyIsImVudW1Db25lcyIsImdlbmVyYXRlZCIsImV4aXN0aW5nIiwiZW50aXR5S2V5IiwicHJvcE5hbWUiLCJPYmplY3QiLCJrZXlzIiwia2V5IiwiZW51bUlkIiwic3Vic2V0S2V5Iiwibm90ZSJdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWUEsUUFBUSxVQUFVO0FBQzlCLFlBQVlDLFVBQVUsWUFBWTtBQTZCbEM7Ozs7O0NBS0MsR0FDRCxPQUFPLGVBQWVDLGNBQWNDLE9BQThCO0lBQ2hFLE1BQU1DLFNBQVNDO0lBQ2YsTUFBTUMsU0FBU0MsWUFBWUo7SUFDM0IsTUFBTSxFQUFFSyxNQUFNQyxZQUFZLEVBQUVDLFVBQVUsRUFBRSxHQUFHLE1BQU1DLGlCQUFpQkwsUUFBUUY7SUFDMUUsTUFBTVEsU0FBU0Msa0JBQWtCSjtJQUNqQ0csT0FBT0YsVUFBVSxHQUFHQTtJQUVwQixJQUFJUCxRQUFRVyxhQUFhLEVBQUU7UUFDekIsSUFBSVgsUUFBUVksU0FBUyxFQUFFO1lBQ3JCLE9BQU9DLGVBQWVKLFFBQVFULFFBQVFXLGFBQWE7UUFDckQ7UUFDQSxPQUFPRyxrQkFBa0JMLFFBQVFULFFBQVFXLGFBQWE7SUFDeEQ7SUFFQSxPQUFPRjtBQUNUO0FBRUE7Ozs7Q0FJQyxHQUNELFNBQVNQO0lBQ1Asd0NBQXdDO0lBQ3hDLElBQUlEO0lBRUosSUFBSTtRQUNGLHNCQUFzQjtRQUN0QixNQUFNLEVBQUVjLE1B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
341
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb25lL2NvbmUtZ2VuZXJhdG9yLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGZzIGZyb20gXCJub2RlOmZzXCI7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gXCJub2RlOnBhdGhcIjtcbmltcG9ydCB0eXBlIHsgQ29uZSwgRW50aXR5SnNvbiB9IGZyb20gXCIuLi90eXBlcy90eXBlc1wiO1xuXG4vKipcbiAqIENvbmUg7IOd7ISxIOy7qO2FjeyKpO2KuFxuICpcbiAqIEVudGl0eSDsoJXrs7TsmYAg7IOd7ISxIOyYteyFmOydhCDri7Tqs6Ag7J6I7Iq164uI64ukLlxuICovXG5leHBvcnQgdHlwZSBDb25lR2VuZXJhdGlvbkNvbnRleHQgPSB7XG4gIGVudGl0eTogRW50aXR5SnNvbjtcbiAgbG9jYWxlPzogXCJrb1wiIHwgXCJlblwiIHwgXCJqYVwiO1xuICBleGlzdGluZ0NvbmVzPzogUmVjb3JkPHN0cmluZywgQ29uZT47XG4gIC8qKiB0cnVl7J24IOqyveyasCBub3Rl6rCAIOyXhuuKlCBjb25l66eMIOyDneyEsSAqL1xuICBvbmx5RW1wdHk/OiBib29sZWFuO1xufTtcblxuLyoqXG4gKiBDb25lIOyDneyEsSDqsrDqs7xcbiAqXG4gKiBFbnRpdHksIFByb3BzLCBTdWJzZXRzLCBFbnVtc+ydmCBjb25lIOuplO2DgOuNsOydtO2EsOulvCDri7Tqs6Ag7J6I7Iq164uI64ukLlxuICovXG5leHBvcnQgdHlwZSBDb25lR2VuZXJhdGlvblJlc3VsdCA9IHtcbiAgZW50aXR5Q29uZT86IENvbmU7XG4gIHByb3BDb25lczogUmVjb3JkPHN0cmluZywgQ29uZT47XG4gIHN1YnNldENvbmVzOiBSZWNvcmQ8c3RyaW5nLCBDb25lPjtcbiAgZW51bUNvbmVzOiBSZWNvcmQ8c3RyaW5nLCBDb25lPjtcbiAgdG9rZW5zVXNlZDogbnVtYmVyO1xufTtcblxuLyoqXG4gKiBMTE3snYQg7IKs7Jqp7ZWY7JesIEVudGl0eeydmCBjb25lIOuplO2DgOuNsOydtO2EsOulvCDsg53shLHtlanri4jri6QuXG4gKlxuICogQHBhcmFtIGNvbnRleHQgLSBFbnRpdHkg7KCV67O07JmAIOyDneyEsSDsmLXshZhcbiAqIEByZXR1cm5zIOyDneyEseuQnCBjb25lIOuplO2DgOuNsOydtO2EsFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2VuZXJhdGVDb25lcyhjb250ZXh0OiBDb25lR2VuZXJhdGlvbkNvbnRleHQpOiBQcm9taXNlPENvbmVHZW5lcmF0aW9uUmVzdWx0PiB7XG4gIGNvbnN0IGFwaUtleSA9IGdldEFwaUtleSgpO1xuICBjb25zdCBwcm9tcHQgPSBidWlsZFByb21wdChjb250ZXh0KTtcbiAgY29uc3QgeyB0ZXh0OiByZXNwb25zZVRleHQsIHRva2Vuc1VzZWQgfSA9IGF3YWl0IGNhbGxBbnRocm9waWNBUEkocHJvbXB0LCBhcGlLZXkpO1xuICBjb25zdCByZXN1bHQgPSBwYXJzZUNvbmVSZXNwb25zZShyZXNwb25zZVRleHQpO1xuICByZXN1bHQudG9rZW5zVXNlZCA9IHRva2Vuc1VzZWQ7XG5cbiAgaWYgKGNvbnRleHQuZXhpc3RpbmdDb25lcykge1xuICAgIGlmIChjb250ZXh0Lm9ubHlFbXB0eSkge1xuICAgICAgcmV0dXJuIG1lcmdlT25seUVtcHR5KHJlc3VsdCwgY29udGV4dC5leGlzdGluZ0NvbmVzKTtcbiAgICB9XG4gICAgcmV0dXJuIG1lcmdlV2l0aEV4aXN0aW5nKHJlc3VsdCwgY29udGV4dC5leGlzdGluZ0NvbmVzKTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogQVBJIO2CpOulvCDqsIDsoLjsmLXri4jri6QuXG4gKlxuICogU29uYW11LnNlY3JldCDrmJDripQg7ZmY6rK967OA7IiY7JeQ7IScIOqwgOyguOyYteuLiOuLpC5cbiAqL1xuZnVuY3Rpb24gZ2V0QXBpS2V5KCk6IHN0cmluZyB7XG4gIC8vIFNvbmFtdS5zZWNyZXTsnYAg65+w7YOA7J6E7JeQIOuhnOuTnOuQmOuvgOuhnCDrj5nsoIHsnLzroZwgaW1wb3J0XG4gIGxldCBhcGlLZXk6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICB0cnkge1xuICAgIC8vIFNvbmFtdeqwgCDstIjquLDtmZTrkJjslrQg7J6I64qUIOqyveyasFxuICAgIGNvbnN0IHsgU29uYW11IH0gPSByZXF1aXJlKFwiLi4vYXBpXCIpO1xuICAgIGFwaUtleSA9IFNvbmFtdS5zZWNyZXRzPy5hbnRocm9waWNfYXBpX2tleTtcbiAgfSBjYXRjaCB7XG4gICAgLy8gU29uYW116rCAIOy0iOq4sO2ZlOuQmOyngCDslYrsnYAg6rK97JqwICjthYzsiqTtirgg65OxKVxuICAgIGFwaUtleSA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGlmICghYXBpS2V5KSB7XG4gICAgYXBpS2V5ID0gcHJvY2Vzcy5lbnYuQU5USFJPUElDX0FQSV9LRVk7XG4gIH1cblxuICBpZiAoIWFwaUtleSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIFwiQU5USFJPUElDX0FQSV9LRVkgbm90IGZvdW5kLiBcIiArXG4gICAgICAgIFwiU2V0IEFOVEhST1BJQ19BUElfS0VZIGVudmlyb25tZW50IHZhcmlhYmxlIG9yIGFkZCBpdCB0byBzb25hbXUuc2VjcmV0LnRzXCIsXG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiBhcGlLZXk7XG59XG5cbi8qKlxuICog64+E66mU7J2467OEIHtkb21haW59LmNvbnRyYWN0Lm1k7JmAIGFyY2hpdGVjdHVyZS5tZOulvCDsnb3slrQg7Luo7YWN7Iqk7Yq466GcIOuwmO2ZmO2VqeuLiOuLpC5cbiAqXG4gKiAtIGNvbnRyYWN0L3tkb21haW59L3tkb21haW59LmNvbnRyYWN0Lm1kOiDrj4TrqZTsnbgg6rec7LmZ6rO8IOqysOyglSDqt7zqsbAgKOyjvCDssLjsobAg64yA7IOBKVxuICogLSAuY2xhdWRlL3NraWxscy9wcm9qZWN0L2FyY2hpdGVjdHVyZS5tZDog7JeU7Yuw7YuwIOyEpOqzhCDqtazsobAgKOuztOyhsCDssLjsobApXG4gKlxuICogY29uZSDsg53shLEg7IucIExMTeyXkOqyjCDsoITri6ztlZjsl6wg64+E66mU7J24IOunpeudveyXkCDrp57ripQg66mU7YOA642w7J207YSw66W8IOyDneyEse2VmOuPhOuhnSDtlanri4jri6QuXG4gKi9cbmZ1bmN0aW9uIHJlYWRQcm9qZWN0U2tpbGxzKCk6IHN0cmluZyB7XG4gIHRyeSB7XG4gICAgY29uc3QgeyBTb25hbXUgfSA9IHJlcXVpcmUoXCIuLi9hcGlcIik7XG4gICAgY29uc3QgcHJvamVjdFJvb3QgPSBTb25hbXUuYXBwUm9vdFBhdGg7XG4gICAgY29uc3QgY29udGVudHM6IHN0cmluZ1tdID0gW107XG5cbiAgICAvLyBjb250cmFjdC8qKi8qLmNvbnRyYWN0Lm1kIOyImOynkVxuICAgIGNvbnN0IGNvbnRyYWN0RGlyID0gcGF0aC5qb2luKHByb2plY3RSb290LCBcImNvbnRyYWN0XCIpO1xuICAgIGlmIChmcy5leGlzdHNTeW5jKGNvbnRyYWN0RGlyKSkge1xuICAgICAgY29uc3QgZG9tYWlucyA9IGZzXG4gICAgICAgIC5yZWFkZGlyU3luYyhjb250cmFjdERpciwgeyB3aXRoRmlsZVR5cGVzOiB0cnVlIH0pXG4gICAgICAgIC5maWx0ZXIoKGQpID0+IGQuaXNEaXJlY3RvcnkoKSlcbiAgICAgICAgLm1hcCgoZCkgPT4gZC5uYW1lKTtcblxuICAgICAgZm9yIChjb25zdCBkb21haW4gb2YgZG9tYWlucykge1xuICAgICAgICBjb25zdCBkb21haW5EaXIgPSBwYXRoLmpvaW4oY29udHJhY3REaXIsIGRvbWFpbik7XG4gICAgICAgIGNvbnN0IGNvbnRyYWN0RmlsZXMgPSBmc1xuICAgICAgICAgIC5yZWFkZGlyU3luYyhkb21haW5EaXIpXG4gICAgICAgICAgLmZpbHRlcigoZjogc3RyaW5nKSA9PiBmLmVuZHNXaXRoKFwiLmNvbnRyYWN0Lm1kXCIpKTtcblxuICAgICAgICBmb3IgKGNvbnN0IGZpbGUgb2YgY29udHJhY3RGaWxlcykge1xuICAgICAgICAgIGNvbnN0IGZpbGVQYXRoID0gcGF0aC5qb2luKGRvbWFpbkRpciwgZmlsZSk7XG4gICAgICAgICAgY29uc3QgY29udGVudCA9IGZzLnJlYWRGaWxlU3luYyhmaWxlUGF0aCwgXCJ1dGYtOFwiKS50cmltKCk7XG4gICAgICAgICAgaWYgKGNvbnRlbnQpIHtcbiAgICAgICAgICAgIGNvbnRlbnRzLnB1c2goYC0tLSBjb250cmFjdC8ke2RvbWFpbn0vJHtmaWxlfSAtLS1cXG4ke2NvbnRlbnR9YCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gLmNsYXVkZS9za2lsbHMvcHJvamVjdC9hcmNoaXRlY3R1cmUubWQg67O07KGwIOywuOyhsFxuICAgIGNvbnN0IGFyY2hpdGVjdHVyZVBhdGggPSBwYXRoLmpvaW4oXG4gICAgICBwcm9qZWN0Um9vdCxcbiAgICAgIFwiLmNsYXVkZVwiLFxuICAgICAgXCJza2lsbHNcIixcbiAgICAgIFwicHJvamVjdFwiLFxuICAgICAgXCJhcmNoaXRlY3R1cmUubWRcIixcbiAgICApO1xuICAgIGlmIChmcy5leGlzdHNTeW5jKGFyY2hpdGVjdHVyZVBhdGgpKSB7XG4gICAgICBjb25zdCBjb250ZW50ID0gZnMucmVhZEZpbGVTeW5jKGFyY2hpdGVjdHVyZVBhdGgsIFwidXRmLThcIikudHJpbSgpO1xuICAgICAgaWYgKGNvbnRlbnQpIHtcbiAgICAgICAgY29udGVudHMucHVzaChgLS0tIGFyY2hpdGVjdHVyZS5tZCAtLS1cXG4ke2NvbnRlbnR9YCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbnRlbnRzLmpvaW4oXCJcXG5cXG5cIik7XG4gIH0gY2F0Y2gge1xuICAgIC8vIFNvbmFtdSDrr7jstIjquLDtmZQg65iQ64qUIO2MjOydvCDsoJHqt7wg7Jik66WYIOyLnCDruYgg66y47J6Q7Je0IOuwmO2ZmFxuICAgIHJldHVybiBcIlwiO1xuICB9XG59XG5cbi8qKlxuICogTExNIO2UhOuhrO2UhO2KuOulvCDsg53shLHtlanri4jri6QuXG4gKlxuICogYWktY2xpZW50LnRzIO2MqO2EtOydhCDssLjqs6DtlZjsl6wg66qF7ZmV7ZWcIOyngOyLnOyCrO2VreqzvCDstpzroKUg7ZiV7Iud7J2EIOygnOqzte2VqeuLiOuLpC5cbiAqL1xuZnVuY3Rpb24gYnVpbGRQcm9tcHQoY29udGV4dDogQ29uZUdlbmVyYXRpb25Db250ZXh0KTogc3RyaW5nIHtcbiAgY29uc3QgbG9jYWxlID0gY29udGV4dC5sb2NhbGUgfHwgXCJrb1wiO1xuICBjb25zdCBsb2NhbGVEZXNjID0ge1xuICAgIGtvOiBcIktvcmVhblwiLFxuICAgIGVuOiBcIkVuZ2xpc2hcIixcbiAgICBqYTogXCJKYXBhbmVzZVwiLFxuICB9W2xvY2FsZV07XG5cbiAgY29uc3QgcHJvamVjdENvbnRleHQgPSByZWFkUHJvamVjdFNraWxscygpO1xuICBjb25zdCBwcm9qZWN0U2VjdGlvbiA9IHByb2plY3RDb250ZXh0XG4gICAgPyBgXFxuUFJPSkVDVCBDT05URVhUIChidXNpbmVzcyByZXF1aXJlbWVudHMgYW5kIGRvbWFpbiBrbm93bGVkZ2UpOlxcbiR7cHJvamVjdENvbnRleHR9XFxuXFxuVXNlIHRoZSBhYm92ZSBwcm9qZWN0IGNvbnRleHQgdG8gdW5kZXJzdGFuZCB0aGUgYnVzaW5lc3MgZG9tYWluLCBlbnRpdHkgcHVycG9zZXMsIGZpZWxkIG1lYW5pbmdzLCBhbmQgcmVsYXRpb25zaGlwcy4gR2VuZXJhdGUgY29uZSBtZXRhZGF0YSB0aGF0IHJlZmxlY3RzIHRoaXMgcHJvamVjdCdzIGFjdHVhbCByZXF1aXJlbWVudHMsIG5vdCBnZW5lcmljIGFzc3VtcHRpb25zLlxcbmBcbiAgICA6IFwiXCI7XG5cbiAgcmV0dXJuIGBZb3UgYXJlIGEgU29uYW11IGZyYW1ld29yayBleHBlcnQuIEdlbmVyYXRlIGNvbmUgbWV0YWRhdGEgZm9yIGRhdGFiYXNlIGVudGl0eSBmaXh0dXJlIGdlbmVyYXRpb24uXG5cbkNSSVRJQ0FMIFBSSU9SSVRZIFJVTEU6XG5UaGUgXCJub3RlXCIgZmllbGQgaXMgdGhlIFBSSU1BUlkgc291cmNlIGZvciBmaXh0dXJlIGRhdGEgZ2VuZXJhdGlvbi4gV2hlbiAtLXVzZS1sbG0gaXMgZW5hYmxlZCwgdGhlIGZpeHR1cmUgZ2VuZXJhdG9yIHJlYWRzIGNvbmUubm90ZSBhbmQgYXNrcyBMTE0gdG8gZ2VuZXJhdGUgY29udGV4dHVhbGx5IGFwcHJvcHJpYXRlIGRhdGEgQkVGT1JFIGZhbGxpbmcgYmFjayB0byBmaXh0dXJlR2VuZXJhdG9yLlxuVGhlcmVmb3JlLCBjb25lLm5vdGUgbXVzdCBhbHdheXMgY29udGFpbiByaWNoLCBkb21haW4tc3BlY2lmaWMgZGVzY3JpcHRpb25zIHdpdGggY29uY3JldGUgZXhhbXBsZXMgYW5kIHZhbHVlIHJhbmdlcy5cbmZpeHR1cmVHZW5lcmF0b3IgaXMgb25seSBhIEZBTExCQUNLIGZvciB3aGVuIExMTSBpcyB1bmF2YWlsYWJsZSAobm8gQVBJIGtleSkuIFdyaXRlIGl0IGFzIGEgYmVzdC1lZmZvcnQgYXBwcm94aW1hdGlvbiwgYnV0IG5ldmVyIHJlbHkgb24gaXQgYXMgdGhlIHByaW1hcnkgZ2VuZXJhdGlvbiBtZXRob2QuXG4ke3Byb2plY3RTZWN0aW9ufVxuRU5USVRZIFNUUlVDVFVSRTpcbiR7SlNPTi5zdHJpbmdpZnkoY29udGV4dC5lbnRpdHksIG51bGwsIDIpfVxuXG5MT0NBTEU6ICR7bG9jYWxlfSAoJHtsb2NhbGVEZXNjfSlcblxuSU5TVFJVQ1RJT05TOlxuMS4gRW50aXR5IGNvbmUgbWV0YWRhdGE6XG4gICAtIG5vdGU6IERlc2NyaWJlIHdoYXQgdGhpcyBlbnRpdHkgcmVwcmVzZW50cywgaXRzIHB1cnBvc2UsIHJlbGF0aW9uc2hpcHMsIGJ1c2luZXNzIGNvbnRleHQsIGFuZCBvdmVyYWxsIGd1aWRhbmNlIGZvciBnZW5lcmF0aW5nIHRlc3QgZGF0YS4gQ29tYmluZSBhbGwgcmVsZXZhbnQgaW5mb3JtYXRpb24gaW50byBvbmUgY29oZXJlbnQgZGVzY3JpcHRpb24uXG4gICAtIHRhZ3M6IFJlbGV2YW50IGNhdGVnb3JpemF0aW9uIHRhZ3NcblxuMi4gRm9yIGVhY2ggcHJvcCwgZ2VuZXJhdGUgYXBwcm9wcmlhdGUgY29uZSBtZXRhZGF0YTpcbiAgIC0gbm90ZSAoTU9TVCBJTVBPUlRBTlQpOiBEZXNjcmliZSB3aGF0IHRoaXMgZmllbGQgcmVwcmVzZW50cyBpbiBidXNpbmVzcyB0ZXJtcywgYW5kIHByb3ZpZGUgZGV0YWlsZWQgZ3VpZGFuY2UgZm9yIHJlYWxpc3RpYyB0ZXN0IGRhdGEgZ2VuZXJhdGlvbi4gSW5jbHVkZSBjb25jcmV0ZSBleGFtcGxlcywgdmFsdWUgcmFuZ2VzLCBmb3JtYXR0aW5nIHJ1bGVzLCBhbmQgZG9tYWluIGNvbnN0cmFpbnRzLiBUaGlzIGlzIHRoZSBwcmltYXJ5IGlucHV0IExMTSB1c2VzIHRvIGdlbmVyYXRlIGZpeHR1cmUgZGF0YS5cbiAgIC0gZml4dHVyZUdlbmVyYXRvcjogZmFrZXIuanMgZXhwcmVzc2lvbiBhcyBGQUxMQkFDSyBvbmx5IChzZWUgcnVsZSA5IGZvciBleGNlcHRpb25zKS4gRm9yIGZyZWUtdGV4dCBmaWVsZHMgd2hlcmUgZmFrZXIgY2Fubm90IHByb2R1Y2UgZG9tYWluLWFwcHJvcHJpYXRlIGNvbnRlbnQgKGRlc2NyaXB0aW9uLCBzdW1tYXJ5LCBub3RlLCByZWFzb24sIHRpdGxlLCBldGMuKSwgcHJlZmVyIHVzaW5nIGZha2VyLmhlbHBlcnMuYXJyYXlFbGVtZW50KFsuLi5dKSB3aXRoIDUtMTAgZG9tYWluLXNwZWNpZmljIGV4YW1wbGUgdmFsdWVzIHJhdGhlciB0aGFuIGZha2VyLmxvcmVtLiouXG5cbjMuIEZpZWxkIHR5cGUg4oaSIGZha2VyLmpzIG1hcHBpbmc6XG4gICAtIGVtYWlsIOKGkiBmYWtlci5pbnRlcm5ldC5lbWFpbCgpXG4gICAtIHBob25lIOKGkiBmYWtlci5waG9uZS5udW1iZXIoKVxuICAgLSBuYW1lL3VzZXJuYW1lIOKGkiBmYWtlci5wZXJzb24uZnVsbE5hbWUoKSAod2l0aCBsb2NhbGUpXG4gICAtIGJpcnRoX2RhdGUg4oaSIGZha2VyLmRhdGUuYmlydGhkYXRlKHsgbWluOiAxOCwgbWF4OiA2NSwgbW9kZTogJ2FnZScgfSlcbiAgIC0gc2FsYXJ5IOKGkiBmYWtlci5udW1iZXIuaW50KHsgbWluOiAzMF8wMDBfMDAwLCBtYXg6IDE1MF8wMDBfMDAwIH0pIGZvciBrbyBsb2NhbGVcbiAgIC0gY29tcGFueV9uYW1lIOKGkiBmYWtlci5jb21wYW55Lm5hbWUoKVxuICAgLSBhZGRyZXNzIOKGkiBmYWtlci5sb2NhdGlvbi5zdHJlZXRBZGRyZXNzKClcblxuNC4gUmVsYXRpb24gZmllbGRzIChCZWxvbmdzVG9PbmUsIE9uZVRvT25lIHdpdGggaGFzSm9pbkNvbHVtbik6XG4gICAtIEFsd2F5cyBhZGQgZGF0YVNvdXJjZTogeyBzdHJhdGVneTogXCJyZWNlbnRcIiwgY29uZmlnOiB7IGxpbWl0OiAzLTUgfSB9XG4gICAtIG5vdGU6IEV4cGxhaW4gd2hhdCB0aGlzIHJlbGF0aW9uIHJlcHJlc2VudHMgYW5kIHRoYXQgaXQgcmVmZXJlbmNlcyBleGlzdGluZyBkYXRhXG5cbjUuIFN1YnNldHMgY29uZSBtZXRhZGF0YSAoSU1QT1JUQU5UIC0gZ2VuZXJhdGUgZm9yIEFMTCBzdWJzZXRzKTpcbiAgIC0gbm90ZTogRGVzY3JpYmUgd2hhdCB0aGlzIHN1YnNldCByZXByZXNlbnRzLCB3aGF0IGZpZWxkcyBpdCBpbmNsdWRlcywgYW5kIHdoZW4gdG8gdXNlIGl0XG5cbjYuIEVudW1zIGNvbmUgbWV0YWRhdGEgKElNUE9SVEFOVCAtIGdlbmVyYXRlIGZvciBBTEwgZW51bXMpOlxuICAgLSBub3RlOiBEZXNjcmliZSB3aGF0IHRoaXMgZW51bSByZXByZXNlbnRzLiBJZiBhbnkgcHJvcCB1c2VzIHRoaXMgZW51bSB0eXBlLCBpbmNsdWRlIHRoZSBzYW1lIGd1aWRhbmNlIGZyb20gdGhhdCBwcm9wJ3Mgbm90ZS5cbiAgIC0gRm9yIGVhY2ggZW51bSB2YWx1ZSwgcHJvdmlkZSBub3RlIGV4cGxhaW5pbmcgd2hhdCB0aGF0IHNwZWNpZmljIHZhbHVlIG1lYW5zXG5cbjcuIEtvcmVhbiBmaWVsZCBuYW1lcyAobG9jYWxlPWtvKTpcbiAgIC0gSW5mZXIgbWVhbmluZyBhbmQgZ2VuZXJhdGUgYXBwcm9wcmlhdGUgZmFrZXJcbiAgIC0gXCLsnbTrpoRcIiDihpIgZmFrZXIucGVyc29uLmZ1bGxOYW1lKClcbiAgIC0gXCLsg53rhYTsm5TsnbxcIiDihpIgZmFrZXIuZGF0ZS5iaXJ0aGRhdGUoKVxuICAgLSBcIuyjvOyGjFwiIOKGkiBmYWtlci5sb2NhdGlvbi5zdHJlZXRBZGRyZXNzKClcblxuOC4gTG9jYWxlLXNwZWNpZmljIHZhbHVlczpcbiAgIC0ga286IEtvcmVhbiBuYW1lcywgYWRkcmVzc2VzLCBwaG9uZSBudW1iZXJzICgwMTAtWFhYWC1YWFhYIGZvcm1hdClcbiAgIC0gZW46IEVuZ2xpc2ggbmFtZXMsIFVTIGFkZHJlc3Nlc1xuICAgLSBqYTogSmFwYW5lc2UgbmFtZXMsIGFkZHJlc3Nlc1xuXG45LiBDb3JyZWxhdGVkIGZpZWxkcyAoSU1QT1JUQU5UIC0gZG8gTk9UIHVzZSBmaXh0dXJlR2VuZXJhdG9yIGZvciB0aGVzZSk6XG4gICBJZiBtdWx0aXBsZSBwcm9wcyBhcmUgc2VtYW50aWNhbGx5IHJlbGF0ZWQgYW5kIG11c3QgYmUgY29uc2lzdGVudCB3aXRoIGVhY2ggb3RoZXIgKGUuZy4gbmFtZSArIG5hbWVfZW4sIG5hbWUgKyBuYW1lX2phLCB0aXRsZSArIHRpdGxlX2VuKSwgZG8gTk9UIHNldCBmaXh0dXJlR2VuZXJhdG9yIG9uIGFueSBvZiB0aGVtLlxuICAgSW5zdGVhZCwgc2V0IG9ubHkgbm90ZSB3aXRoIGEgY2xlYXIgZGVzY3JpcHRpb24gdGhhdCBleHBsYWlucyB0aGUgcmVsYXRpb25zaGlwLlxuICAgRXhhbXBsZTogaWYgbmFtZSBpcyBhIEtvcmVhbiBmdWxsIG5hbWUgbGlrZSBcIuq5gOuvvOyImFwiLCB0aGVuIG5hbWVfZW4gbXVzdCBiZSBpdHMgcm9tYW5pemVkIGZvcm0gXCJLaW0gTWluc3VcIi5cbiAgIFRoZSBmaXh0dXJlIGdlbmVyYXRvciB3aWxsIHBhc3MgYWxsIHN1Y2ggcHJvcHMgdG9nZXRoZXIgdG8gTExNIGluIGEgc2luZ2xlIGNhbGwgdG8gZW5zdXJlIGNvbnNpc3RlbmN5LlxuICAgRGV0ZWN0aW9uIHJ1bGU6IGlmIGEgcHJvcCBuYW1lIG1hdGNoZXMgYW5vdGhlciBwcm9wIG5hbWUgd2l0aCBhIGxvY2FsZSBzdWZmaXggKF9lbiwgX2tvLCBfamEsIF9jbikgb3IgdmljZSB2ZXJzYSwgdHJlYXQgdGhlbSBhcyBjb3JyZWxhdGVkLlxuXG4xMC4gU3RyaW5nIFBLIOKAlCBzZXF1ZW5jZSB2cyBVVUlEOlxuICAgLSBEQiBzZXF1ZW5jZSBpZDogSWYgYSBwcm9wIG5hbWVkIFwiaWRcIiBoYXMgdHlwZSBcInN0cmluZ1wiIGFuZCB1c2VzIGEgREIgc2VxdWVuY2UgKGluZGljYXRlZCBieSBkYkRlZmF1bHQgY29udGFpbmluZyBcIm5leHR2YWxcIiksIHNldCBmaXh0dXJlU3RyYXRlZ3k6IFwic2VxdWVuY2VcIiBhbmQgZG8gTk9UIHNldCBmaXh0dXJlR2VuZXJhdG9yLiBub3RlIHNob3VsZCBtZW50aW9uIHNlcXVlbnRpYWwgbnVtYmVyIHN0b3JlZCBhcyBzdHJpbmcuXG4gICAtIGJldHRlci1hdXRoIGVudGl0eSBpZDogQWNjb3VudCwgU2Vzc2lvbiwgVmVyaWZpY2F0aW9uIOyXlO2LsO2LsOydmCBpZOuKlCBiZXR0ZXItYXV0aOqwgCBjcnlwdG8ucmFuZG9tVVVJRCgp66GcIOyDneyEse2VmOuKlCBVVUlE64ukLiBmaXh0dXJlU3RyYXRlZ3k6IFwic2VxdWVuY2VcIuulvCDsoIjrjIAg7IKs7Jqp7ZWY7KeAIOunkOqzoCwgZml4dHVyZUdlbmVyYXRvcjogXCJmYWtlci5zdHJpbmcudXVpZCgpXCLrpbwg7IKs7Jqp7ZWc64ukLlxuXG4xMS4gZml4dHVyZUNvbXBhbmlvbnMgKElNUE9SVEFOVCAtIG5ldmVyIGdlbmVyYXRlIG9yIG1vZGlmeSk6XG4gICAtIGZpeHR1cmVDb21wYW5pb25zIGlzIHVzZXItZGVjbGFyZWQgbWV0YWRhdGEgdGhhdCB0cmlnZ2VycyBhdXRvbWF0aWMgY29tcGFuaW9uIGZpeHR1cmUgY3JlYXRpb24gd2hlbiBhIHBhcmVudCBmaXh0dXJlIGlzIGdlbmVyYXRlZC5cbiAgIC0gRG8gTk9UIGdlbmVyYXRlIG9yIHN1Z2dlc3QgZml4dHVyZUNvbXBhbmlvbnMgZm9yIGFueSBwcm9wLiBPbmx5IHVzZXJzIGRlY2xhcmUgdGhpcyBpbnRlbnRpb25hbGx5LlxuICAgLSBJZiBhIHByb3AncyBleGlzdGluZyBjb25lIGFscmVhZHkgY29udGFpbnMgZml4dHVyZUNvbXBhbmlvbnMsIHByZXNlcnZlIGl0IGV4YWN0bHkgYXMtaXMgaW4gdGhlIHByb3BDb25lcyBvdXRwdXQuIERvIG5vdCByZW1vdmUsIGFsdGVyLCBvciBvbWl0IGl0LlxuICAgLSBFeGFtcGxlOiBpZiBVc2VyIGVudGl0eSdzIFwiaWRcIiBwcm9wIGNvbmUgaGFzIGZpeHR1cmVDb21wYW5pb25zLCBpbmNsdWRlIGl0IHVuY2hhbmdlZCBpbiBwcm9wQ29uZXNbXCJpZFwiXS5cblxuJHtcbiAgY29udGV4dC5leGlzdGluZ0NvbmVzXG4gICAgPyBgXG5FWElTVElORyBDT05FUyAocHJlc2VydmUgdGhlc2UgaWYgcHJlc2VudCk6XG4ke0pTT04uc3RyaW5naWZ5KGNvbnRleHQuZXhpc3RpbmdDb25lcywgbnVsbCwgMil9XG5gXG4gICAgOiBcIlwiXG59XG5cbk9VVFBVVCBGT1JNQVQ6XG5SZXR1cm4gT05MWSB2YWxpZCBKU09OIChubyBtYXJrZG93biwgbm8gY29kZSBibG9ja3MpLiBVc2UgdGhpcyBleGFjdCBzdHJ1Y3R1cmU6XG57XG4gIFwiZW50aXR5Q29uZVwiOiB7XG4gICAgXCJub3RlXCI6IFwiRGVzY3JpcHRpb24gb2YgdGhlIGVudGl0eSwgaXRzIHB1cnBvc2UsIGFuZCBndWlkYW5jZSBmb3IgZml4dHVyZSBnZW5lcmF0aW9uXCIsXG4gICAgXCJ0YWdzXCI6IFtcIm9wdGlvbmFsXCIsIFwidGFnc1wiXVxuICB9LFxuICBcInByb3BDb25lc1wiOiB7XG4gICAgXCJwcm9wX25hbWVcIjoge1xuICAgICAgXCJub3RlXCI6IFwiRGVzY3JpcHRpb24gb2YgdGhpcyBmaWVsZCBhbmQgZ3VpZGFuY2UgZm9yIHJlYWxpc3RpYyB0ZXN0IGRhdGEgZ2VuZXJhdGlvblwiLFxuICAgICAgXCJmaXh0dXJlR2VuZXJhdG9yXCI6IFwiZmFrZXIueHh4Lnl5eSgpXCIsXG4gICAgICBcImRhdGFTb3VyY2VcIjogeyBcInN0cmF0ZWd5XCI6IFwicmVjZW50XCIsIFwiY29uZmlnXCI6IHsgXCJsaW1pdFwiOiA1IH0gfVxuICAgIH1cbiAgfSxcbiAgXCJzdWJzZXRDb25lc1wiOiB7XG4gICAgXCJBXCI6IHtcbiAgICAgIFwibm90ZVwiOiBcIkRlc2NyaXB0aW9uIG9mIHN1YnNldCBBLCB3aGF0IGZpZWxkcyBpdCBpbmNsdWRlcywgYW5kIHdoZW4gdG8gdXNlIGl0XCJcbiAgICB9XG4gIH0sXG4gIFwiZW51bUNvbmVzXCI6IHtcbiAgICBcIkVudW1OYW1lXCI6IHtcbiAgICAgIFwibm90ZVwiOiBcIkRlc2NyaXB0aW9uIG9mIHRoZSBlbnVtIGFuZCBndWlkYW5jZSBmb3IgZ2VuZXJhdGluZyB2YWx1ZXNcIixcbiAgICAgIFwidmFsdWVzXCI6IHtcbiAgICAgICAgXCJWQUxVRV9LRVlcIjoge1xuICAgICAgICAgIFwibm90ZVwiOiBcIiR7bG9jYWxlRGVzY30gZGVzY3JpcHRpb24gb2YgdGhpcyBlbnVtIHZhbHVlXCJcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5JTVBPUlRBTlQ6IFJldHVybiBwdXJlIEpTT04gb25seS4gRG8gTk9UIHdyYXAgaW4gbWFya2Rvd24gY29kZSBibG9ja3MuYDtcbn1cblxuLyoqXG4gKiBBbnRocm9waWMgQVBJ66W8IO2YuOy2nO2VmOyXrCBMTE0g7J2R64u17J2EIOuwm+yKteuLiOuLpC5cbiAqXG4gKiBAcGFyYW0gcHJvbXB0IC0g7IOd7ISx7ZWgIO2UhOuhrO2UhO2KuFxuICogQHBhcmFtIGFwaUtleSAtIEFudGhyb3BpYyBBUEkg7YKkXG4gKiBAcmV0dXJucyBMTE0g7J2R64u1IO2FjeyKpO2KuCDrsI8g7Yag7YGwIOyCrOyaqeufiVxuICovXG5hc3luYyBmdW5jdGlvbiBjYWxsQW50aHJvcGljQVBJKFxuICBwcm9tcHQ6IHN0cmluZyxcbiAgYXBpS2V5OiBzdHJpbmcsXG4pOiBQcm9taXNlPHsgdGV4dDogc3RyaW5nOyB0b2tlbnNVc2VkOiBudW1iZXIgfT4ge1xuICB0cnkge1xuICAgIC8vIEBhaS1zZGsvYW50aHJvcGlj6rO8IGFpIO2MqO2CpOyngOuKlCBvcHRpb25hbCBkZXBlbmRlbmN57J2066+A66GcIOuPmeyggSBpbXBvcnRcbiAgICBjb25zdCB7IGNyZWF0ZUFudGhyb3BpYyB9ID0gYXdhaXQgaW1wb3J0KFwiQGFpLXNkay9hbnRocm9waWNcIik7XG4gICAgY29uc3QgeyBnZW5lcmF0ZVRleHQgfSA9IGF3YWl0IGltcG9ydChcImFpXCIpO1xuXG4gICAgY29uc3QgYW50aHJvcGljID0gY3JlYXRlQW50aHJvcGljKHtcbiAgICAgIGFwaUtleSxcbiAgICB9KTtcblxuICAgIGNvbnN0IHsgdGV4dCwgdXNhZ2UgfSA9IGF3YWl0IGdlbmVyYXRlVGV4dCh7XG4gICAgICBtb2RlbDogYW50aHJvcGljKFwiY2xhdWRlLXNvbm5ldC00LTZcIiksXG4gICAgICBwcm9tcHQsXG4gICAgfSk7XG5cbiAgICBjb25zdCB0b2tlbnNVc2VkID0gdXNhZ2U/LnRvdGFsVG9rZW5zIHx8IDA7XG4gICAgaWYgKHVzYWdlKSB7XG4gICAgICBjb25zb2xlLmxvZyhgW0NvbmUgR2VuZXJhdG9yXSBUb2tlbnMgdXNlZDogJHt0b2tlbnNVc2VkfWApO1xuICAgIH1cblxuICAgIHJldHVybiB7IHRleHQsIHRva2Vuc1VzZWQgfTtcbiAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICBpZiAoZXJyb3IgJiYgdHlwZW9mIGVycm9yID09PSBcIm9iamVjdFwiICYmIFwic3RhdHVzQ29kZVwiIGluIGVycm9yKSB7XG4gICAgICBjb25zdCBzdGF0dXNDb2RlID0gKGVycm9yIGFzIHsgc3RhdHVzQ29kZTogbnVtYmVyIH0pLnN0YXR1c0NvZGU7XG4gICAgICBpZiAoc3RhdHVzQ29kZSA9PT0gNDI5KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlJhdGUgbGltaXQgZXhjZWVkZWQuIFBsZWFzZSB0cnkgYWdhaW4gbGF0ZXIuXCIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IG1lc3NhZ2UgPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFwiVW5rbm93biBlcnJvclwiO1xuICAgIHRocm93IG5ldyBFcnJvcihgTExNIEFQSSBmYWlsZWQ6ICR7bWVzc2FnZX1gKTtcbiAgfVxufVxuXG4vKipcbiAqIExMTSDsnZHri7XsnYQg7YyM7Iux7ZWY7JesIENvbmVHZW5lcmF0aW9uUmVzdWx066GcIOuzgO2ZmO2VqeuLiOuLpC5cbiAqXG4gKiBNYXJrZG93biDsvZTrk5wg67iU66Gd7J20IO2PrO2VqOuQmOyWtCDsnojsnLzrqbQg7KCc6rGw7ZWp64uI64ukLlxuICovXG5mdW5jdGlvbiBwYXJzZUNvbmVSZXNwb25zZSh0ZXh0OiBzdHJpbmcpOiBDb25lR2VuZXJhdGlvblJlc3VsdCB7XG4gIGxldCBqc29uVGV4dCA9IHRleHQudHJpbSgpO1xuICBqc29uVGV4dCA9IGpzb25UZXh0LnJlcGxhY2UoL15gYGBqc29uXFxzKi9pLCBcIlwiKTtcbiAganNvblRleHQgPSBqc29uVGV4dC5yZXBsYWNlKC9gYGBcXHMqJC8sIFwiXCIpO1xuICBqc29uVGV4dCA9IGpzb25UZXh0LnRyaW0oKTtcblxuICB0cnkge1xuICAgIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2UoanNvblRleHQpO1xuXG4gICAgaWYgKCFwYXJzZWQucHJvcENvbmVzIHx8IHR5cGVvZiBwYXJzZWQucHJvcENvbmVzICE9PSBcIm9iamVjdFwiKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHJlc3BvbnNlOiBwcm9wQ29uZXMgaXMgcmVxdWlyZWQgYW5kIG11c3QgYmUgYW4gb2JqZWN0XCIpO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBlbnRpdHlDb25lOiBwYXJzZWQuZW50aXR5Q29uZSxcbiAgICAgIHByb3BDb25lczogcGFyc2VkLnByb3BDb25lcyxcbiAgICAgIHN1YnNldENvbmVzOiBwYXJzZWQuc3Vic2V0Q29uZXMgfHwge30sXG4gICAgICBlbnVtQ29uZXM6IHBhcnNlZC5lbnVtQ29uZXMgfHwge30sXG4gICAgICB0b2tlbnNVc2VkOiAwLFxuICAgIH07XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc3QgbWVzc2FnZSA9IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogXCJVbmtub3duIGVycm9yXCI7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYEZhaWxlZCB0byBwYXJzZSBMTE0gcmVzcG9uc2U6ICR7bWVzc2FnZX1cXG5cXG5gICtcbiAgICAgICAgYE9yaWdpbmFsIHJlc3BvbnNlOlxcbiR7dGV4dH1cXG5cXG5gICtcbiAgICAgICAgYENsZWFuZWQgSlNPTjpcXG4ke2pzb25UZXh0fWAsXG4gICAgKTtcbiAgfVxufVxuXG4vKipcbiAqIOyDneyEseuQnCBjb25l7J2EIOq4sOyhtCBjb25l6rO8IOuzke2Vqe2VqeuLiOuLpC5cbiAqXG4gKiDquLDsobQgY29uZeydtCDsnojsnLzrqbQg67O07KG07ZWY6rOgLCDsl4bripQg6rK97Jqw7JeQ66eMIOyDneyEseuQnCBjb25l7J2EIOyCrOyaqe2VqeuLiOuLpC5cbiAqL1xuZnVuY3Rpb24gbWVyZ2VXaXRoRXhpc3RpbmcoXG4gIGdlbmVyYXRlZDogQ29uZUdlbmVyYXRpb25SZXN1bHQsXG4gIGV4aXN0aW5nOiBSZWNvcmQ8c3RyaW5nLCBDb25lPixcbik6IENvbmVHZW5lcmF0aW9uUmVzdWx0IHtcbiAgY29uc3QgcmVzdWx0ID0geyAuLi5nZW5lcmF0ZWQgfTtcblxuICBjb25zdCBlbnRpdHlLZXkgPSBgZW50aXR5OiR7Z2VuZXJhdGVkLmVudGl0eUNvbmUgPyBcInByZXNlbnRcIiA6IFwibWlzc2luZ1wifWA7XG4gIGlmIChleGlzdGluZ1tlbnRpdHlLZXldKSB7XG4gICAgcmVzdWx0LmVudGl0eUNvbmUgPSBleGlzdGluZ1tlbnRpdHlLZXldO1xuICB9XG5cbiAgZm9yIChjb25zdCBwcm9wTmFtZSBvZiBPYmplY3Qua2V5cyhnZW5lcmF0ZWQucHJvcENvbmVzKSkge1xuICAgIGNvbnN0IGtleSA9IGBwcm9wOiR7cHJvcE5hbWV9YDtcbiAgICBpZiAoZXhpc3Rpbmdba2V5XSkge1xuICAgICAgcmVzdWx0LnByb3BDb25lc1twcm9wTmFtZV0gPSBleGlzdGluZ1trZXldO1xuICAgIH1cbiAgfVxuXG4gIGZvciAoY29uc3QgZW51bUlkIG9mIE9iamVjdC5rZXlzKGdlbmVyYXRlZC5lbnVtQ29uZXMpKSB7XG4gICAgY29uc3Qga2V5ID0gYGVudW06JHtlbnVtSWR9YDtcbiAgICBpZiAoZXhpc3Rpbmdba2V5XSkge1xuICAgICAgcmVzdWx0LmVudW1Db25lc1tlbnVtSWRdID0gZXhpc3Rpbmdba2V5XTtcbiAgICB9XG4gIH1cblxuICBmb3IgKGNvbnN0IHN1YnNldEtleSBvZiBPYmplY3Qua2V5cyhnZW5lcmF0ZWQuc3Vic2V0Q29uZXMpKSB7XG4gICAgY29uc3Qga2V5ID0gYHN1YnNldDoke3N1YnNldEtleX1gO1xuICAgIGlmIChleGlzdGluZ1trZXldKSB7XG4gICAgICByZXN1bHQuc3Vic2V0Q29uZXNbc3Vic2V0S2V5XSA9IGV4aXN0aW5nW2tleV07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBub3Rl6rCAIOyXhuuKlCBjb25l66eMIOyDneyEse2VmOqzoCDrgpjrqLjsp4DripQg67O07KG07ZWp64uI64ukLlxuICpcbiAqIOq4sOyhtCBjb25l7JeQIG5vdGXqsIAg7J6I7Jy866m0IOuztOyhtO2VmOqzoCwg7JeG7Jy866m0IOyDiOuhnCDsg53shLHrkJwgY29uZeydhCDsgqzsmqntlanri4jri6QuXG4gKi9cbmZ1bmN0aW9uIG1lcmdlT25seUVtcHR5KFxuICBnZW5lcmF0ZWQ6IENvbmVHZW5lcmF0aW9uUmVzdWx0LFxuICBleGlzdGluZzogUmVjb3JkPHN0cmluZywgQ29uZT4sXG4pOiBDb25lR2VuZXJhdGlvblJlc3VsdCB7XG4gIGNvbnN0IHJlc3VsdCA9IHsgLi4uZ2VuZXJhdGVkIH07XG5cbiAgLy8gRW50aXR5IGNvbmU6IHNjYWxl7J20IOyeiOycvOuptCDrs7TsobRcbiAgY29uc3QgZW50aXR5S2V5ID0gYGVudGl0eToke2dlbmVyYXRlZC5lbnRpdHlDb25lID8gXCJwcmVzZW50XCIgOiBcIm1pc3NpbmdcIn1gO1xuICBpZiAoZXhpc3RpbmdbZW50aXR5S2V5XT8ubm90ZSkge1xuICAgIHJlc3VsdC5lbnRpdHlDb25lID0gZXhpc3RpbmdbZW50aXR5S2V5XTtcbiAgfVxuXG4gIC8vIFByb3AgY29uZXM6IHNjYWxl7J20IOyeiOycvOuptCDrs7TsobRcbiAgZm9yIChjb25zdCBwcm9wTmFtZSBvZiBPYmplY3Qua2V5cyhnZW5lcmF0ZWQucHJvcENvbmVzKSkge1xuICAgIGNvbnN0IGtleSA9IGBwcm9wOiR7cHJvcE5hbWV9YDtcbiAgICBpZiAoZXhpc3Rpbmdba2V5XT8ubm90ZSkge1xuICAgICAgcmVzdWx0LnByb3BDb25lc1twcm9wTmFtZV0gPSBleGlzdGluZ1trZXldO1xuICAgIH1cbiAgfVxuXG4gIC8vIEVudW0gY29uZXM6IHNjYWxl7J20IOyeiOycvOuptCDrs7TsobRcbiAgZm9yIChjb25zdCBlbnVtSWQgb2YgT2JqZWN0LmtleXMoZ2VuZXJhdGVkLmVudW1Db25lcykpIHtcbiAgICBjb25zdCBrZXkgPSBgZW51bToke2VudW1JZH1gO1xuICAgIGlmIChleGlzdGluZ1trZXldPy5ub3RlKSB7XG4gICAgICByZXN1bHQuZW51bUNvbmVzW2VudW1JZF0gPSBleGlzdGluZ1trZXldO1xuICAgIH1cbiAgfVxuXG4gIC8vIFN1YnNldCBjb25lczogc2NhbGXsnbQg7J6I7Jy866m0IOuztOyhtFxuICBmb3IgKGNvbnN0IHN1YnNldEtleSBvZiBPYmplY3Qua2V5cyhnZW5lcmF0ZWQuc3Vic2V0Q29uZXMpKSB7XG4gICAgY29uc3Qga2V5ID0gYHN1YnNldDoke3N1YnNldEtleX1gO1xuICAgIGlmIChleGlzdGluZ1trZXldPy5ub3RlKSB7XG4gICAgICByZXN1bHQuc3Vic2V0Q29uZXNbc3Vic2V0S2V5XSA9IGV4aXN0aW5nW2tleV07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cbiJdLCJuYW1lcyI6WyJmcyIsInBhdGgiLCJnZW5lcmF0ZUNvbmVzIiwiY29udGV4dCIsImFwaUtleSIsImdldEFwaUtleSIsInByb21wdCIsImJ1aWxkUHJvbXB0IiwidGV4dCIsInJlc3BvbnNlVGV4dCIsInRva2Vuc1VzZWQiLCJjYWxsQW50aHJvcGljQVBJIiwicmVzdWx0IiwicGFyc2VDb25lUmVzcG9uc2UiLCJleGlzdGluZ0NvbmVzIiwib25seUVtcHR5IiwibWVyZ2VPbmx5RW1wdHkiLCJtZXJnZVdpdGhFeGlzdGluZyIsIlNvbmFtdSIsInJlcXVpcmUiLCJzZWNyZXRzIiwiYW50aHJvcGljX2FwaV9rZXkiLCJ1bmRlZmluZWQiLCJwcm9jZXNzIiwiZW52IiwiQU5USFJPUElDX0FQSV9LRVkiLCJFcnJvciIsInJlYWRQcm9qZWN0U2tpbGxzIiwicHJvamVjdFJvb3QiLCJhcHBSb290UGF0aCIsImNvbnRlbnRzIiwiY29udHJhY3REaXIiLCJqb2luIiwiZXhpc3RzU3luYyIsImRvbWFpbnMiLCJyZWFkZGlyU3luYyIsIndpdGhGaWxlVHlwZXMiLCJmaWx0ZXIiLCJkIiwiaXNEaXJlY3RvcnkiLCJtYXAiLCJuYW1lIiwiZG9tYWluIiwiZG9tYWluRGlyIiwiY29udHJhY3RGaWxlcyIsImYiLCJlbmRzV2l0aCIsImZpbGUiLCJmaWxlUGF0aCIsImNvbnRlbnQiLCJyZWFkRmlsZVN5bmMiLCJ0cmltIiwicHVzaCIsImFyY2hpdGVjdHVyZVBhdGgiLCJsb2NhbGUiLCJsb2NhbGVEZXNjIiwia28iLCJlbiIsImphIiwicHJvamVjdENvbnRleHQiLCJwcm9qZWN0U2VjdGlvbiIsIkpTT04iLCJzdHJpbmdpZnkiLCJlbnRpdHkiLCJjcmVhdGVBbnRocm9waWMiLCJnZW5lcmF0ZVRleHQiLCJhbnRocm9waWMiLCJ1c2FnZSIsIm1vZGVsIiwidG90YWxUb2tlbnMiLCJjb25zb2xlIiwibG9nIiwiZXJyb3IiLCJzdGF0dXNDb2RlIiwibWVzc2FnZSIsImpzb25UZXh0IiwicmVwbGFjZSIsInBhcnNlZCIsInBhcnNlIiwicHJvcENvbmVzIiwiZW50aXR5Q29uZSIsInN1YnNldENvbmVzIiwiZW51bUNvbmVzIiwiZ2VuZXJhdGVkIiwiZXhpc3RpbmciLCJlbnRpdHlLZXkiLCJwcm9wTmFtZSIsIk9iamVjdCIsImtleXMiLCJrZXkiLCJlbnVtSWQiLCJzdWJzZXRLZXkiLCJub3RlIl0sIm1hcHBpbmdzIjoiQUFBQSxZQUFZQSxRQUFRLFVBQVU7QUFDOUIsWUFBWUMsVUFBVSxZQUFZO0FBNkJsQzs7Ozs7Q0FLQyxHQUNELE9BQU8sZUFBZUMsY0FBY0MsT0FBOEI7SUFDaEUsTUFBTUMsU0FBU0M7SUFDZixNQUFNQyxTQUFTQyxZQUFZSjtJQUMzQixNQUFNLEVBQUVLLE1BQU1DLFlBQVksRUFBRUMsVUFBVSxFQUFFLEdBQUcsTUFBTUMsaUJBQWlCTCxRQUFRRjtJQUMxRSxNQUFNUSxTQUFTQyxrQkFBa0JKO0lBQ2pDRyxPQUFPRixVQUFVLEdBQUdBO0lBRXBCLElBQUlQLFFBQVFXLGFBQWEsRUFBRTtRQUN6QixJQUFJWCxRQUFRWSxTQUFTLEVBQUU7WUFDckIsT0FBT0MsZUFBZUosUUFBUVQsUUFBUVcsYUFBYTtRQUNyRDtRQUNBLE9BQU9HLGtCQUFrQkwsUUFBUVQsUUFBUVcsYUFBYTtJQUN4RDtJQUVBLE9BQU9GO0FBQ1Q7QUFFQTs7OztDQUlDLEdBQ0QsU0FBU1A7SUFDUCx3Q0FBd0M7SUFDeEMsSUFBSUQ7SUFFSixJQUFJO1FBQ0Ysc0JBQXNCO1FBQ3RCLE1BQU0sRUFBRWMs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
@@ -1 +1 @@
1
- {"version":3,"file":"base-model.d.ts","sourceRoot":"","sources":["../../src/database/base-model.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"base-model.d.ts","sourceRoot":"","sources":["../../src/database/base-model.ts"],"names":[],"mappings":"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"}
@@ -1,11 +1,10 @@
1
1
  /** biome-ignore-all lint/suspicious/noExplicitAny: Puri의 타입은 개별 모델에서 확정되므로 BaseModel에서는 any를 허용함 */ import { getLogger } from "@logtape/logtape";
2
- import { cloneDeep, group, isObject, omit, set } from "radashi";
2
+ import { cloneDeep, cluster, group, isObject, omit, set } from "radashi";
3
3
  import { normalizeFilterQuery, validateSonamuFilters } from "../index.js";
4
4
  import { Sonamu } from "../api/index.js";
5
5
  import { EntityManager } from "../entity/entity-manager.js";
6
6
  import { convertDomainToCategory } from "../logger/category.js";
7
7
  import { getJoinTables, getTableNamesFromWhere } from "../utils/sql-parser.js";
8
- import { chunk } from "../utils/utils.js";
9
8
  import { DB } from "./db.js";
10
9
  import { Puri } from "./puri.js";
11
10
  import { PuriWrapper } from "./puri-wrapper.js";
@@ -61,7 +60,7 @@ import { UpsertBuilder } from "./upsert-builder.js";
61
60
  unqKeys = rows.map((row)=>row[unqKeyFields[0]]);
62
61
  }
63
62
  let resultIds = [];
64
- for (const items of chunk(unqKeys, chunkSize)){
63
+ for (const items of cluster(unqKeys, chunkSize)){
65
64
  const dbRows = await wdb(tableName).select("id", wdb.raw(selectField)).whereIn(whereInField, items);
66
65
  resultIds = resultIds.concat(dbRows.map((dbRow)=>parseInt(String(dbRow.id))));
67
66
  }
@@ -390,4 +389,4 @@ import { UpsertBuilder } from "./upsert-builder.js";
390
389
  }
391
390
  export const BaseModel = new BaseModelClass();
392
391
 
393
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kYXRhYmFzZS9iYXNlLW1vZGVsLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKiBiaW9tZS1pZ25vcmUtYWxsIGxpbnQvc3VzcGljaW91cy9ub0V4cGxpY2l0QW55OiBQdXJp7J2YIO2DgOyeheydgCDqsJzrs4Qg66qo64247JeQ7IScIO2ZleygleuQmOuvgOuhnCBCYXNlTW9kZWzsl5DshJzripQgYW5566W8IO2XiOyaqe2VqCAqL1xuaW1wb3J0IHsgZ2V0TG9nZ2VyLCB0eXBlIExvZ2dlciB9IGZyb20gXCJAbG9ndGFwZS9sb2d0YXBlXCI7XG5pbXBvcnQgdHlwZSB7IEtuZXggfSBmcm9tIFwia25leFwiO1xuaW1wb3J0IHsgY2xvbmVEZWVwLCBncm91cCwgaXNPYmplY3QsIG9taXQsIHNldCB9IGZyb20gXCJyYWRhc2hpXCI7XG5pbXBvcnQgeyB0eXBlIExpc3RSZXN1bHQsIG5vcm1hbGl6ZUZpbHRlclF1ZXJ5LCB2YWxpZGF0ZVNvbmFtdUZpbHRlcnMgfSBmcm9tIFwiLi5cIjtcbmltcG9ydCB7IFNvbmFtdSB9IGZyb20gXCIuLi9hcGlcIjtcbmltcG9ydCB7IEVudGl0eU1hbmFnZXIgfSBmcm9tIFwiLi4vZW50aXR5L2VudGl0eS1tYW5hZ2VyXCI7XG5pbXBvcnQgdHlwZSB7IEZpbHRlck9wZXJhdG9yLCBGaWx0ZXJRdWVyeSB9IGZyb20gXCIuLi9maWx0ZXIvdHlwZXNcIjtcbmltcG9ydCB7IGNvbnZlcnREb21haW5Ub0NhdGVnb3J5IH0gZnJvbSBcIi4uL2xvZ2dlci9jYXRlZ29yeVwiO1xuaW1wb3J0IHR5cGUgeyBEYXRhYmFzZVNjaGVtYUV4dGVuZCwgU29uYW11UXVlcnlNb2RlIH0gZnJvbSBcIi4uL3R5cGVzL3R5cGVzXCI7XG5pbXBvcnQgeyBnZXRKb2luVGFibGVzLCBnZXRUYWJsZU5hbWVzRnJvbVdoZXJlIH0gZnJvbSBcIi4uL3V0aWxzL3NxbC1wYXJzZXJcIjtcbmltcG9ydCB7IGNodW5rIH0gZnJvbSBcIi4uL3V0aWxzL3V0aWxzXCI7XG5pbXBvcnQgdHlwZSB7IEVuaGFuY2VyTWFwLCBSZXNvbHZlU3Vic2V0SW50ZXJzZWN0aW9uIH0gZnJvbSBcIi4vYmFzZS1tb2RlbC50eXBlc1wiO1xuaW1wb3J0IHR5cGUgeyBEQlByZXNldCB9IGZyb20gXCIuL2RiXCI7XG5pbXBvcnQgeyBEQiB9IGZyb20gXCIuL2RiXCI7XG5pbXBvcnQgeyBQdXJpIH0gZnJvbSBcIi4vcHVyaVwiO1xuaW1wb3J0IHR5cGUgeyBVbmlvbkV4dHJhY3RlZFRUYWJsZXMgfSBmcm9tIFwiLi9wdXJpLnR5cGVzXCI7XG5pbXBvcnQgdHlwZSB7IEluZmVyQWxsU3Vic2V0cywgUHVyaUxvYWRlclF1ZXJpZXMsIFB1cmlTdWJzZXRGbiB9IGZyb20gXCIuL3B1cmktc3Vic2V0LnR5cGVzXCI7XG5pbXBvcnQgeyBQdXJpV3JhcHBlciB9IGZyb20gXCIuL3B1cmktd3JhcHBlclwiO1xuaW1wb3J0IHsgVXBzZXJ0QnVpbGRlciB9IGZyb20gXCIuL3Vwc2VydC1idWlsZGVyXCI7XG5cbnR5cGUgVW5rbm93bkRCUmVjb3JkID0gUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cbi8qKlxuICog66qo65OgIE1vZGVsIO2BtOuemOyKpOydmCDquLDrs7gg7YG0656Y7IqkXG4gKlxuICogQHRlbXBsYXRlIFRTdWJzZXRLZXkgLSDshJzruIzshYsg7YKkIOycoOuLiOyYqCAo7JiIOiBcIkFcIiB8IFwiUFwiIHwgXCJTU1wiKVxuICogQHRlbXBsYXRlIFRTdWJzZXRNYXBwaW5nIC0g7ISc67iM7IWL67OEIOy1nOyihSDqsrDqs7wg7YOA7J6FIOunpO2VkVxuICogQHRlbXBsYXRlIFRTdWJzZXRRdWVyaWVzIC0g7ISc67iM7IWLIOy/vOumrCDtlajsiJgg6rCd7LK0XG4gKiBAdGVtcGxhdGUgVExvYWRlclF1ZXJpZXMgLSDshJzruIzshYvrs4Qg66Gc642UIOy/vOumrCDrsLDsl7Qg6rCd7LK0XG4gKi9cbmV4cG9ydCBjbGFzcyBCYXNlTW9kZWxDbGFzczxcbiAgVFN1YnNldEtleSBleHRlbmRzIHN0cmluZyA9IG5ldmVyLFxuICBUU3Vic2V0TWFwcGluZyBleHRlbmRzIFJlY29yZDxzdHJpbmcsIGFueT4gPSBuZXZlcixcbiAgVFN1YnNldFF1ZXJpZXMgZXh0ZW5kcyBSZWNvcmQ8VFN1YnNldEtleSwgUHVyaVN1YnNldEZuPiA9IG5ldmVyLFxuICBUTG9hZGVyUXVlcmllcyBleHRlbmRzIFB1cmlMb2FkZXJRdWVyaWVzPFRTdWJzZXRLZXk+ID0gbmV2ZXIsXG4+IHtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGxvZ2dlcjogTG9nZ2VyO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyByZWFkb25seSBtb2RlbE5hbWU6IHN0cmluZyA9IHRoaXMuY29uc3RydWN0b3IubmFtZSxcbiAgICBwcm90ZWN0ZWQgc3Vic2V0UXVlcmllcz86IFRTdWJzZXRRdWVyaWVzLFxuICAgIHByb3RlY3RlZCBsb2FkZXJRdWVyaWVzPzogVExvYWRlclF1ZXJpZXMsXG4gICkge1xuICAgIHRoaXMubG9nZ2VyID0gZ2V0TG9nZ2VyKGNvbnZlcnREb21haW5Ub0NhdGVnb3J5KHRoaXMubW9kZWxOYW1lLCBcIm1vZGVsXCIpKTtcbiAgfVxuXG4gIGdldERCKHdoaWNoOiBEQlByZXNldCk6IEtuZXgge1xuICAgIHJldHVybiBEQi5nZXREQih3aGljaCk7XG4gIH1cblxuICBnZXRQdXJpKHdoaWNoOiBEQlByZXNldCk6IFB1cmlXcmFwcGVyIHtcbiAgICAvLyDtirjrnpzsnq3shZgg7Luo7YWN7Iqk7Yq47JeQ7IScIO2KuOuenOyereyFmCDtmo3rk51cbiAgICBjb25zdCB0cnggPSBEQi5nZXRUcmFuc2FjdGlvbkNvbnRleHQoKS5nZXRUcmFuc2FjdGlvbih3aGljaCk7XG4gICAgaWYgKHRyeCkge1xuICAgICAgcmV0dXJuIHRyeDtcbiAgICB9XG5cbiAgICAvLyDtirjrnpzsnq3shZjsnbQg7JeG7Jy866m0IOyDiOuhnOyatCBQdXJpV3JhcHBlciDrsJjtmZhcbiAgICBjb25zdCBkYiA9IHRoaXMuZ2V0REIod2hpY2gpO1xuICAgIHJldHVybiBuZXcgUHVyaVdyYXBwZXIoZGIsIG5ldyBVcHNlcnRCdWlsZGVyKCkpO1xuICB9XG5cbiAgYXN5bmMgZGVzdHJveSgpIHtcbiAgICByZXR1cm4gREIuZGVzdHJveSgpO1xuICB9XG5cbiAgYXN5bmMgZ2V0SW5zZXJ0ZWRJZHMoXG4gICAgd2RiOiBLbmV4LFxuICAgIHJvd3M6IFVua25vd25EQlJlY29yZFtdLFxuICAgIHRhYmxlTmFtZTogc3RyaW5nLFxuICAgIHVucUtleUZpZWxkczogc3RyaW5nW10sXG4gICAgY2h1bmtTaXplOiBudW1iZXIgPSA1MDAsXG4gICkge1xuICAgIGlmICghd2RiKSB7XG4gICAgICB3ZGIgPSB0aGlzLmdldERCKFwid1wiKTtcbiAgICB9XG5cbiAgICBsZXQgdW5xS2V5czogc3RyaW5nW107XG4gICAgbGV0IHdoZXJlSW5GaWVsZDogc3RyaW5nIHwgS25leC5SYXc7XG4gICAgbGV0IHNlbGVjdEZpZWxkOiBzdHJpbmc7XG5cbiAgICBpZiAodW5xS2V5RmllbGRzLmxlbmd0aCA+IDEpIHtcbiAgICAgIHdoZXJlSW5GaWVsZCA9IHdkYi5yYXcoYENPTkNBVF9XUygnXycsICcke3VucUtleUZpZWxkcy5qb2luKFwiLFwiKX0nKWApO1xuICAgICAgc2VsZWN0RmllbGQgPSBgJHt3aGVyZUluRmllbGR9IGFzIHRtcFVpZGA7XG4gICAgICB1bnFLZXlzID0gcm93cy5tYXAoKHJvdykgPT4gdW5xS2V5RmllbGRzLm1hcCgoZmllbGQpID0+IHJvd1tmaWVsZF0pLmpvaW4oXCJfXCIpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgd2hlcmVJbkZpZWxkID0gdW5xS2V5RmllbGRzWzBdO1xuICAgICAgc2VsZWN0RmllbGQgPSB1bnFLZXlGaWVsZHNbMF07XG4gICAgICB1bnFLZXlzID0gcm93cy5tYXAoKHJvdykgPT4gcm93W3VucUtleUZpZWxkc1swXV0gYXMgc3RyaW5nKTtcbiAgICB9XG5cbiAgICBsZXQgcmVzdWx0SWRzOiBudW1iZXJbXSA9IFtdO1xuICAgIGZvciAoY29uc3QgaXRlbXMgb2YgY2h1bmsodW5xS2V5cywgY2h1bmtTaXplKSkge1xuICAgICAgY29uc3QgZGJSb3dzID0gYXdhaXQgd2RiKHRhYmxlTmFtZSlcbiAgICAgICAgLnNlbGVjdChcImlkXCIsIHdkYi5yYXcoc2VsZWN0RmllbGQpKVxuICAgICAgICAud2hlcmVJbih3aGVyZUluRmllbGQgYXMgc3RyaW5nLCBpdGVtcyk7XG4gICAgICByZXN1bHRJZHMgPSByZXN1bHRJZHMuY29uY2F0KFxuICAgICAgICBkYlJvd3MubWFwKChkYlJvdzogVW5rbm93bkRCUmVjb3JkKSA9PiBwYXJzZUludChTdHJpbmcoZGJSb3cuaWQpKSksXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHRJZHM7XG4gIH1cblxuICAvKipcbiAgICog7Yq57KCVIOyEnOu4jOyFi+yXkCDrjIDtlZwg7L+866asIOu5jOuNlCDtmo3rk51cbiAgICpcbiAgICogQHJldHVybnMgcWIgLSDsv7zrpqwg67mM642UICjsobDqsbQg7LaU6rCA7JqpKVxuICAgKiBAcmV0dXJucyBvblN1YnNldCAtIO2KueyglSDshJzruIzshYsg7KCE7JqpIO2DgOyeheydtCDtlYTsmpTtlaAg65WMIOyCrOyaqVxuICAgKi9cbiAgZ2V0U3Vic2V0UXVlcmllczxUIGV4dGVuZHMgVFN1YnNldEtleT4oc3Vic2V0OiBUKSB7XG4gICAgaWYgKCF0aGlzLnN1YnNldFF1ZXJpZXMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcInN1YnNldFF1ZXJpZXMgaXMgbm90IGRlZmluZWRcIik7XG4gICAgfVxuXG4gICAgY29uc3QgcHVyaVdyYXBwZXIgPSBuZXcgUHVyaVdyYXBwZXIodGhpcy5nZXREQihcInJcIiksIG5ldyBVcHNlcnRCdWlsZGVyKCkpO1xuICAgIGNvbnN0IHFiID0gdGhpcy5zdWJzZXRRdWVyaWVzW3N1YnNldF0/LihwdXJpV3JhcHBlcik7XG5cbiAgICAvLyBOb25BbGxvd2VkQXNTaW5nbGVUYWJsZTog64uo7J28IO2FjOydtOu4lCDsu6zrn7wg7KCR6re8IOuwqeyngOyaqSDrp4jsu6RcbiAgICB0eXBlIFFCVGFibGVzID0gVW5pb25FeHRyYWN0ZWRUVGFibGVzPFRTdWJzZXRLZXksIFRTdWJzZXRRdWVyaWVzPiAmIHtcbiAgICAgIE5vbkFsbG93ZWRBc1NpbmdsZVRhYmxlOiB7IF9fZnVsbHRleHRfXzogdHJ1ZSB9O1xuICAgIH07XG5cbiAgICByZXR1cm4ge1xuICAgICAgcWI6IHFiIGFzIHVua25vd24gYXMgUHVyaTxEYXRhYmFzZVNjaGVtYUV4dGVuZCwgUUJUYWJsZXMsIHt9PixcbiAgICAgIG9uU3Vic2V0OiAoKF9zdWJzZXQ6IFRTdWJzZXRLZXkgfCByZWFkb25seSBUU3Vic2V0S2V5W10pID0+IHFiKSBhcyB7XG4gICAgICAgIC8vIOuLqOydvCDtgqRcbiAgICAgICAgPFMgZXh0ZW5kcyBUU3Vic2V0S2V5PihzdWJzZXQ6IFMpOiBSZXR1cm5UeXBlPFRTdWJzZXRRdWVyaWVzW1NdPjtcbiAgICAgICAgLy8g7YKkIOuwsOyXtCAtPiDqtZDsp5Htlakg67CY7ZmYXG4gICAgICAgIDxBcnIgZXh0ZW5kcyByZWFkb25seSBUU3Vic2V0S2V5W10+KFxuICAgICAgICAgIHN1YnNldHM6IFsuLi5BcnJdLFxuICAgICAgICApOiBSZXNvbHZlU3Vic2V0SW50ZXJzZWN0aW9uPEFyciwgVFN1YnNldFF1ZXJpZXM+O1xuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEVuaGFuY2VyIOqwneyytCDsg53shLEg7Zes7Y28XG4gICAqIO2DgOyehSDqsoDspp0g67CPIOy2lOuhoOydhCDrj4TsmYDspIxcbiAgICovXG4gIGNyZWF0ZUVuaGFuY2VyczxUIGV4dGVuZHMgVFN1YnNldEtleT4oXG4gICAgZW5oYW5jZXJzOiBFbmhhbmNlck1hcDxcbiAgICAgIFQsXG4gICAgICBJbmZlckFsbFN1YnNldHM8VFN1YnNldFF1ZXJpZXMsIFRMb2FkZXJRdWVyaWVzPixcbiAgICAgIFRTdWJzZXRNYXBwaW5nLFxuICAgICAgVFN1YnNldFF1ZXJpZXNcbiAgICA+LFxuICApIHtcbiAgICByZXR1cm4gZW5oYW5jZXJzO1xuICB9XG5cbiAgLyoqXG4gICAqIOyEnOu4jOyFiyDsv7zrpqwg7Iuk7ZaJXG4gICAqXG4gICAqIDEuIFNvbmFtdSDtlYTthLAg7KCB7JqpICjtg4DsnoUg67OA7ZmYIO2PrO2VqClcbiAgICogMi4g7L+866asIOyLpO2WiSAocGFnaW5hdGlvbiDsoIHsmqkpXG4gICAqIDMuIOuhnOuNlCDsi6TtlokgKDE6TiwgTjpNIOq0gOqzhCDrjbDsnbTthLAg66Gc65SpKVxuICAgKiA0LiBIeWRyYXRlIChmbGF0IOKGkiDspJHssqkg6rCd7LK0KVxuICAgKiA1LiBFbmhhbmNlciDsoIHsmqkgKHZpcnR1YWwg7ZWE65OcIOqzhOyCsClcbiAgICovXG4gIGFzeW5jIGV4ZWN1dGVTdWJzZXRRdWVyeTxcbiAgICBUIGV4dGVuZHMgVFN1YnNldEtleSxcbiAgICBUQ29tcHV0ZWRSZXN1bHRzIGV4dGVuZHMgSW5mZXJBbGxTdWJzZXRzPFRTdWJzZXRRdWVyaWVzLCBUTG9hZGVyUXVlcmllcz4sXG4gICAgTFAgZXh0ZW5kcyB7XG4gICAgICBudW0/OiBudW1iZXI7XG4gICAgICBwYWdlPzogbnVtYmVyO1xuICAgICAgcXVlcnlNb2RlPzogU29uYW11UXVlcnlNb2RlO1xuICAgICAgc29uYW11RmlsdGVyPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgfSxcbiAgPihcbiAgICBwYXJhbXM6IHtcbiAgICAgIHN1YnNldDogVDtcbiAgICAgIHFiOiBQdXJpPGFueSwgYW55LCBhbnk+O1xuICAgICAgcGFyYW1zOiB7XG4gICAgICAgIG51bTogbnVtYmVyO1xuICAgICAgICBwYWdlOiBudW1iZXI7XG4gICAgICAgIHF1ZXJ5TW9kZT86IFNvbmFtdVF1ZXJ5TW9kZTtcbiAgICAgICAgc29uYW11RmlsdGVyPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgICB9O1xuICAgICAgZGVidWc/OiBib29sZWFuO1xuICAgICAgb3B0aW1pemVDb3VudFF1ZXJ5PzogYm9vbGVhbjtcbiAgICB9ICYgRW5oYW5jZXJQYXJhbTxUU3Vic2V0S2V5LCBUQ29tcHV0ZWRSZXN1bHRzLCBUU3Vic2V0TWFwcGluZywgVFN1YnNldFF1ZXJpZXM+LFxuICApOiBQcm9taXNlPExpc3RSZXN1bHQ8TFAsIFRTdWJzZXRNYXBwaW5nW1RdPj4ge1xuICAgIGNvbnN0IHsgc3Vic2V0LCBxYiwgcGFyYW1zOiBxdWVyeVBhcmFtcywgZGVidWcgPSBmYWxzZSwgb3B0aW1pemVDb3VudFF1ZXJ5ID0gZmFsc2UgfSA9IHBhcmFtcztcblxuICAgIGlmICghdGhpcy5sb2FkZXJRdWVyaWVzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJsb2FkZXJRdWVyaWVzIGlzIG5vdCBkZWZpbmVkXCIpO1xuICAgIH1cblxuICAgIC8vIFNvbmFtdSBGaWx0ZXIg7KCB7JqpXG4gICAgaWYgKHF1ZXJ5UGFyYW1zLnNvbmFtdUZpbHRlcikge1xuICAgICAgY29uc3Qgbm9ybWFsaXplZEZpbHRlciA9IG5vcm1hbGl6ZUZpbHRlclF1ZXJ5KHF1ZXJ5UGFyYW1zLnNvbmFtdUZpbHRlcik7XG4gICAgICB0aGlzLmFwcGx5U29uYW11RmlsdGVycyhxYiwgbm9ybWFsaXplZEZpbHRlcik7XG4gICAgfVxuXG4gICAgY29uc3QgeyBudW0sIHBhZ2UgfSA9IHF1ZXJ5UGFyYW1zO1xuXG4gICAgLy8gQ09VTlQg7L+866asIOyLpO2WiSAocXVlcnlNb2RlOiBsaXN07J28IOuVjOuKlCAwIOumrO2EtClcbiAgICBjb25zdCB0b3RhbCA9IGF3YWl0IHRoaXMuZXhlY3V0ZUNvdW50UXVlcnkocWIsIHF1ZXJ5UGFyYW1zLCBkZWJ1Zywgb3B0aW1pemVDb3VudFF1ZXJ5KTtcblxuICAgIGlmIChxdWVyeVBhcmFtcz8ucXVlcnlNb2RlID09PSBcImNvdW50XCIpIHtcbiAgICAgIHJldHVybiB7IHRvdGFsIH0gYXMgTGlzdFJlc3VsdDxMUCwgVFN1YnNldE1hcHBpbmdbVF0+O1xuICAgIH1cblxuICAgIC8vIExJU1Qg7L+866asIOyLpO2WiVxuICAgIGNvbnN0IGNvbXB1dGVkUm93cyA9IGF3YWl0IHRoaXMuZXhlY3V0ZUxpc3RRdWVyeShzdWJzZXQsIHFiLCBxdWVyeVBhcmFtcywgbnVtLCBwYWdlLCBkZWJ1Zyk7XG5cbiAgICAvLyBFbmhhbmNlciDsoIHsmqlcbiAgICBjb25zdCBlbmhhbmNlciA9IChwYXJhbXMgYXMgYW55KS5lbmhhbmNlcnM/LltzdWJzZXRdO1xuICAgIGNvbnN0IGVuaGFuY2VkUm93cyA9IChhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIGNvbXB1dGVkUm93cy5tYXAoKHJvdykgPT4gZW5oYW5jZXI/Lihyb3cpID8/IHJvdyksXG4gICAgKSkgYXMgVFN1YnNldE1hcHBpbmdbVF1bXTtcblxuICAgIC8vIEludGVybmFsIO2VhOuTnCDsoJzqsbBcbiAgICBjb25zdCBlbnRpdHkgPSBFbnRpdHlNYW5hZ2VyLmdldCh0aGlzLm1vZGVsTmFtZSk7XG4gICAgY29uc3QgaW50ZXJuYWxGaWVsZHMgPSBlbnRpdHkuc3Vic2V0c0ludGVybmFsW3N1YnNldF0gPz8gW107XG4gICAgY29uc3Qgcm93cyA9XG4gICAgICBpbnRlcm5hbEZpZWxkcy5sZW5ndGggPiAwXG4gICAgICAgID8gZW5oYW5jZWRSb3dzLm1hcCgocm93KSA9PiB0aGlzLm9taXRJbnRlcm5hbEZpZWxkcyhyb3csIGludGVybmFsRmllbGRzKSlcbiAgICAgICAgOiBlbmhhbmNlZFJvd3M7XG5cbiAgICBpZiAocXVlcnlQYXJhbXMucXVlcnlNb2RlID09PSBcImxpc3RcIikge1xuICAgICAgLy8g66as7Iqk7Yq466eMIOumrO2EtFxuICAgICAgcmV0dXJuIHsgcm93cyB9IGFzIExpc3RSZXN1bHQ8TFAsIFRTdWJzZXRNYXBwaW5nW1RdPjtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8g65GY64ukIOumrO2EtFxuICAgICAgcmV0dXJuIHsgcm93cywgdG90YWwgfSBhcyBMaXN0UmVzdWx0PExQLCBUU3Vic2V0TWFwcGluZ1tUXT47XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIOqwneyytOyXkOyEnCBpbnRlcm5hbCDtlYTrk5wg7KCc6rGwXG4gICAqIOykkeyyqSDtlYTrk5wo7JiIOiBcInVzZXIuZW1haWxcIikg67CPIOuwsOyXtCjsmIg6IFwiZW1wbG95ZWVzLnNhbGFyeVwiKeuPhCDsspjrpqxcbiAgICovXG4gIG9taXRJbnRlcm5hbEZpZWxkczxUIGV4dGVuZHMgb2JqZWN0Pihyb3c6IFQsIGZpZWxkczogc3RyaW5nW10pOiBUIHtcbiAgICBjb25zdCByZXN1bHQgPSBjbG9uZURlZXAocm93KTtcbiAgICBmb3IgKGNvbnN0IGZpZWxkIG9mIGZpZWxkcykge1xuICAgICAgdGhpcy5kZWxldGVGaWVsZChyZXN1bHQsIGZpZWxkLnNwbGl0KFwiLlwiKSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogRmlsdGVyUXVlcnnrpbwgUHVyaSBRdWVyeUJ1aWxkZXLsl5Ag7KCB7JqpXG4gICAqXG4gICAqIEBwYXJhbSBxYiBQdXJpIFF1ZXJ5QnVpbGRlciDsnbjsiqTthLTsiqRcbiAgICogQHBhcmFtIGZpbHRlcnMgRmlsdGVyUXVlcnkg6rCd7LK0XG4gICAqL1xuICBwcm90ZWN0ZWQgYXBwbHlTb25hbXVGaWx0ZXJzPFRFbnRpdHkgPSBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4oXG4gICAgcWI6IFB1cmk8YW55LCBhbnksIGFueT4sXG4gICAgZmlsdGVycz86IEZpbHRlclF1ZXJ5PFRFbnRpdHk+LFxuICApOiB2b2lkIHtcbiAgICBpZiAoIWZpbHRlcnMpIHJldHVybjtcblxuICAgIGNvbnN0IGVudGl0eSA9IEVudGl0eU1hbmFnZXIuZ2V0KHRoaXMubW9kZWxOYW1lKTtcblxuICAgIC8vIDEuIO2VhO2EsCDqsoDspp0gKEVudGl0eSDquLDrsJgpXG4gICAgdmFsaWRhdGVTb25hbXVGaWx0ZXJzKGZpbHRlcnMsIGVudGl0eSk7XG5cbiAgICAvLyAyLiDqsoDspp3rkJwg7ZWE7YSwIOyggeyaqVxuICAgIGNvbnN0IHB1cmkgPSBxYiBhcyBhbnk7XG5cbiAgICBmb3IgKGNvbnN0IFtmaWVsZCwgY29uZGl0aW9uXSBvZiBPYmplY3QuZW50cmllcyhmaWx0ZXJzKSkge1xuICAgICAgaWYgKGNvbmRpdGlvbiA9PT0gdW5kZWZpbmVkIHx8IGNvbmRpdGlvbiA9PT0gbnVsbCkgY29udGludWU7XG5cbiAgICAgIC8vIO2FjOydtOu4lOuqhS7tlYTrk5zrqoUg7ZiV7Iud7Jy866GcIOuzgO2ZmFxuICAgICAgY29uc3QgZnVsbEZpZWxkID0gZW50aXR5LmdldEZ1bGxGaWVsZE5hbWUoZmllbGQpO1xuXG4gICAgICAvLyDsp4HsoJEg6rCSIChlceyZgCDrj5nsnbwpXG4gICAgICBpZiAodHlwZW9mIGNvbmRpdGlvbiAhPT0gXCJvYmplY3RcIiB8fCBBcnJheS5pc0FycmF5KGNvbmRpdGlvbikpIHtcbiAgICAgICAgcHVyaS53aGVyZShmdWxsRmllbGQsIGNvbmRpdGlvbik7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICAvLyDsl7DsgrDsnpAg6rCd7LK0XG4gICAgICBmb3IgKGNvbnN0IFtvcGVyYXRvciwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGNvbmRpdGlvbikpIHtcbiAgICAgICAgdGhpcy5hcHBseU9wZXJhdG9yKHFiLCBmdWxsRmllbGQsIG9wZXJhdG9yIGFzIEZpbHRlck9wZXJhdG9yLCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIOuLqOydvCDsl7DsgrDsnpDrpbwgUXVlcnlCdWlsZGVy7JeQIOyggeyaqVxuICAgKi9cbiAgcHJpdmF0ZSBhcHBseU9wZXJhdG9yKFxuICAgIHFiOiBQdXJpPGFueSwgYW55LCBhbnk+LFxuICAgIGZpZWxkOiBzdHJpbmcsXG4gICAgb3BlcmF0b3I6IEZpbHRlck9wZXJhdG9yLFxuICAgIHZhbHVlOiB1bmtub3duLFxuICApOiB2b2lkIHtcbiAgICBjb25zdCBwdXJpID0gcWIgYXMgYW55O1xuXG4gICAgc3dpdGNoIChvcGVyYXRvcikge1xuICAgICAgY2FzZSBcImVxXCI6XG4gICAgICAgIHB1cmkud2hlcmUoZmllbGQsIHZhbHVlKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgXCJuZVwiOlxuICAgICAgICBwdXJpLndoZXJlKGZpZWxkLCBcIiE9XCIsIHZhbHVlKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgXCJndFwiOlxuICAgICAgICBwdXJpLndoZXJlKGZpZWxkLCBcIj5cIiwgdmFsdWUpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBcImd0ZVwiOlxuICAgICAgICBwdXJpLndoZXJlKGZpZWxkLCBcIj49XCIsIHZhbHVlKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgXCJsdFwiOlxuICAgICAgICBwdXJpLndoZXJlKGZpZWxkLCBcIjxcIiwgdmFsdWUpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBcImx0ZVwiOlxuICAgICAgICBwdXJpLndoZXJlKGZpZWxkLCBcIjw9XCIsIHZhbHVlKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgXCJpblwiOlxuICAgICAgICBwdXJpLndoZXJlSW4oZmllbGQsIHZhbHVlKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgXCJub3RJblwiOlxuICAgICAgICBwdXJpLndoZXJlTm90SW4oZmllbGQsIHZhbHVlKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgXCJjb250YWluc1wiOlxuICAgICAgICBwdXJpLndoZXJlKGZpZWxkLCBcImxpa2VcIiwgYCUke3ZhbHVlfSVgKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgXCJzdGFydHNXaXRoXCI6XG4gICAgICAgIHB1cmkud2hlcmUoZmllbGQsIFwibGlrZVwiLCBgJHt2YWx1ZX0lYCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFwiZW5kc1dpdGhcIjpcbiAgICAgICAgcHVyaS53aGVyZShmaWVsZCwgXCJsaWtlXCIsIGAlJHt2YWx1ZX1gKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgXCJpc051bGxcIjpcbiAgICAgICAgcHVyaS53aGVyZShmaWVsZCwgbnVsbCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFwiaXNOb3ROdWxsXCI6XG4gICAgICAgIHB1cmkud2hlcmUoZmllbGQsIFwiIT1cIiwgbnVsbCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFwiYmVmb3JlXCI6XG4gICAgICAgIHB1cmkud2hlcmUoZmllbGQsIFwiPFwiLCB2YWx1ZSk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFwiYWZ0ZXJcIjpcbiAgICAgICAgcHVyaS53aGVyZShmaWVsZCwgXCI+XCIsIHZhbHVlKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgXCJiZXR3ZWVuXCI6IHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpICYmIHZhbHVlLmxlbmd0aCA9PT0gMikge1xuICAgICAgICAgIGNvbnN0IFttaW4sIG1heF0gPSB2YWx1ZTtcbiAgICAgICAgICBwdXJpLndoZXJlKGZpZWxkLCBcIj49XCIsIG1pbikud2hlcmUoZmllbGQsIFwiPD1cIiwgbWF4KTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgY29uc29sZS53YXJuKGBVbnN1cHBvcnRlZCBvcGVyYXRvcjogJHtvcGVyYXRvcn1gKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICog7KSR7LKpIO2VhOuTnCDsgq3soJwgKOuwsOyXtCDrgrQg6rCd7LK064+EIOyymOumrClcbiAgICovXG4gIGRlbGV0ZUZpZWxkKG9iajogYW55LCBwYXJ0czogc3RyaW5nW10pOiB2b2lkIHtcbiAgICBpZiAoIW9iaiB8fCB0eXBlb2Ygb2JqICE9PSBcIm9iamVjdFwiKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHBhcnRzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkob2JqKSkge1xuICAgICAgICBvYmouZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICAgIGlmIChpdGVtICYmIHR5cGVvZiBpdGVtID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgICBkZWxldGUgaXRlbVtwYXJ0c1swXV07XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRlbGV0ZSBvYmpbcGFydHNbMF1dO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IFtmaXJzdCwgLi4ucmVzdF0gPSBwYXJ0cztcbiAgICBjb25zdCBuZXh0ID0gb2JqW2ZpcnN0XTtcblxuICAgIGlmIChBcnJheS5pc0FycmF5KG5leHQpKSB7XG4gICAgICBuZXh0Lm1hcCgoaXRlbSkgPT4gdGhpcy5kZWxldGVGaWVsZChpdGVtLCByZXN0KSk7XG4gICAgfSBlbHNlIGlmIChuZXh0ICYmIHR5cGVvZiBuZXh0ID09PSBcIm9iamVjdFwiKSB7XG4gICAgICB0aGlzLmRlbGV0ZUZpZWxkKG5leHQsIHJlc3QpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDT1VOVCDsv7zrpqwg7Iuk7ZaJICjrgrTrtoAg66mU7ISc65OcKVxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBleGVjdXRlQ291bnRRdWVyeShcbiAgICBxYjogUHVyaTxhbnksIGFueSwgYW55PixcbiAgICBwYXJhbXM6IHsgcXVlcnlNb2RlPzogXCJsaXN0XCIgfCBcImNvdW50XCIgfCBcImJvdGhcIiB9LFxuICAgIGRlYnVnOiBib29sZWFuLFxuICAgIG9wdGltaXplQ291bnRRdWVyeTogYm9vbGVhbixcbiAgKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICBpZiAocGFyYW1zLnF1ZXJ5TW9kZSA9PT0gXCJsaXN0XCIpIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cblxuICAgIGNvbnN0IGNvdW50UHVyaSA9IHFiLmNsb25lKCkuY2xlYXIoXCJvcmRlclwiKS5jbGVhcihcImxpbWl0XCIpLmNsZWFyKFwib2Zmc2V0XCIpO1xuXG4gICAgaWYgKG9wdGltaXplQ291bnRRdWVyeSkge1xuICAgICAgY29uc3QgeyBkZWZhdWx0OiBTcWxQYXJzZXIgfSA9IGF3YWl0IGltcG9ydChcIm5vZGUtc3FsLXBhcnNlclwiKTtcbiAgICAgIGNvbnN0IHBhcnNlciA9IG5ldyBTcWxQYXJzZXIuUGFyc2VyKCk7XG4gICAgICBjb25zdCBwYXJzZWRRdWVyeSA9IHBhcnNlci5hc3RpZnkoY291bnRQdXJpLnRvUXVlcnkoKSwge1xuICAgICAgICBkYXRhYmFzZTogU29uYW11LmNvbmZpZy5kYXRhYmFzZS5kYXRhYmFzZSxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBsZWZ0Sm9pblRhYmxlcyA9IGdldEpvaW5UYWJsZXMocGFyc2VkUXVlcnksIFtcIkxFRlQgSk9JTlwiXSk7XG4gICAgICBjb25zdCB3aGVyZVRhYmxlcyA9IGdldFRhYmxlTmFtZXNGcm9tV2hlcmUocGFyc2VkUXVlcnkpO1xuXG4gICAgICBjb25zdCB0YWJsZXNUb1JlbW92ZSA9IGxlZnRKb2luVGFibGVzLmZpbHRlcigoaikgPT4gIXdoZXJlVGFibGVzLmluY2x1ZGVzKGopKTtcbiAgICAgIHRhYmxlc1RvUmVtb3ZlLmZvckVhY2goKHRhYmxlKSA9PiB7XG4gICAgICAgIGNvdW50UHVyaS5jbGVhckpvaW4odGFibGUpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gQ09VTlQoKinroZwg7KCE7LK0IOugiOy9lOuTnCDsiJjrpbwg6rOE7IKwXG4gICAgLy8gVE9ETzogcWLsnZggRElTVElOQ1TqsIAg7J6I64qUIOqyveyasCDsspjrpqztlbTslbwg7ZWoXG4gICAgY29uc3QgY291bnRSZXN1bHQ6IHsgdG90YWw/OiBudW1iZXIgfSA9IGF3YWl0IGNvdW50UHVyaVxuICAgICAgLmNsZWFyKFwic2VsZWN0XCIpXG4gICAgICAuc2VsZWN0KHsgdG90YWw6IFB1cmkucmF3TnVtYmVyKGBDT1VOVCgqKTo6aW50ZWdlcmApIH0pXG4gICAgICAuZmlyc3QoKTtcblxuICAgIGlmIChkZWJ1Zykge1xuICAgICAgY291bnRQdXJpLmRlYnVnKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvdW50UmVzdWx0Py50b3RhbCA/PyAwO1xuICB9XG5cbiAgLyoqXG4gICAqIExJU1Qg7L+866asIOyLpO2WiSAo64K067aAIOuplOyEnOuTnClcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgZXhlY3V0ZUxpc3RRdWVyeTxUIGV4dGVuZHMgVFN1YnNldEtleT4oXG4gICAgc3Vic2V0OiBULFxuICAgIHFiOiBQdXJpPGFueSwgYW55LCBhbnk+LFxuICAgIHBhcmFtczogeyBxdWVyeU1vZGU/OiBcImxpc3RcIiB8IFwiY291bnRcIiB8IFwiYm90aFwiIH0sXG4gICAgbnVtOiBudW1iZXIsXG4gICAgcGFnZTogbnVtYmVyLFxuICAgIGRlYnVnOiBib29sZWFuLFxuICApOiBQcm9taXNlPGFueVtdPiB7XG4gICAgaWYgKHBhcmFtcy5xdWVyeU1vZGUgPT09IFwiY291bnRcIikge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIGNvbnN0IGxpbWl0ZWRRYiA9ICgoKSA9PiB7XG4gICAgICBpZiAobnVtID09PSAwKSB7XG4gICAgICAgIHJldHVybiBxYjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBxYi5saW1pdChudW0pLm9mZnNldChudW0gKiAocGFnZSAtIDEpKTtcbiAgICAgIH1cbiAgICB9KSgpO1xuICAgIGxldCB1bmxvYWRlZFJvd3MgPSAoYXdhaXQgbGltaXRlZFFiKSBhcyBhbnlbXTtcblxuICAgIGlmIChkZWJ1Zykge1xuICAgICAgcWIuZGVidWcoKTtcbiAgICB9XG5cbiAgICAvLyDroZzrjZQg7LKY66asXG4gICAgY29uc3QgbG9hZGVycyA9ICh0aGlzLmxvYWRlclF1ZXJpZXMgYXMgYW55KVtzdWJzZXRdO1xuICAgIGlmIChsb2FkZXJzICYmIEFycmF5LmlzQXJyYXkobG9hZGVycykpIHtcbiAgICAgIHVubG9hZGVkUm93cyA9IGF3YWl0IHRoaXMucHJvY2Vzc0xvYWRlcnModW5sb2FkZWRSb3dzLCBsb2FkZXJzLCBkZWJ1Zyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuaHlkcmF0ZSh1bmxvYWRlZFJvd3MpO1xuICB9XG5cbiAgLyoqXG4gICAqIOyerOq3gOyggSDroZzrjZQg7LKY66asXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHByb2Nlc3NMb2FkZXJzKHJvd3M6IGFueVtdLCBsb2FkZXJzOiBhbnlbXSwgZGVidWc6IGJvb2xlYW4pOiBQcm9taXNlPGFueVtdPiB7XG4gICAgZm9yIChjb25zdCByZXNvbHZlTG9hZGVyIG9mIGxvYWRlcnMpIHtcbiAgICAgIGNvbnN0IHsgYXMsIHJlZklkLCBxYjogcmVzb2x2ZUxvYWRlclFiRm4sIGxvYWRlcnM6IG5lc3RlZExvYWRlcnMgfSA9IHJlc29sdmVMb2FkZXI7XG5cbiAgICAgIGNvbnN0IHJlc29sdmVMb2FkZXJRYiA9IHJlc29sdmVMb2FkZXJRYkZuKFxuICAgICAgICBuZXcgUHVyaVdyYXBwZXIodGhpcy5nZXREQihcInJcIiksIG5ldyBVcHNlcnRCdWlsZGVyKCkpLFxuICAgICAgICByb3dzLm1hcCgocm93KSA9PiByb3dbcmVmSWRdKSxcbiAgICAgICk7XG5cbiAgICAgIGlmIChkZWJ1Zykge1xuICAgICAgICByZXNvbHZlTG9hZGVyUWIuZGVidWcoKTtcbiAgICAgIH1cblxuICAgICAgbGV0IGxvYWRlZFJvd3MgPSAoYXdhaXQgcmVzb2x2ZUxvYWRlclFiKSBhcyBhbnlbXTtcblxuICAgICAgLy8g7KSR7LKpIGxvYWRlcnPqsIAg7J6I7Jy866m0IOyerOq3gCDsspjrpqxcbiAgICAgIGlmIChuZXN0ZWRMb2FkZXJzICYmIG5lc3RlZExvYWRlcnMubGVuZ3RoID4gMCkge1xuICAgICAgICBsb2FkZWRSb3dzID0gYXdhaXQgdGhpcy5wcm9jZXNzTG9hZGVycyhsb2FkZWRSb3dzLCBuZXN0ZWRMb2FkZXJzLCBkZWJ1Zyk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHN1YlJvd0dyb3VwcyA9IGdyb3VwKGxvYWRlZFJvd3MsIChyb3cpID0+IHJvdy5yZWZJZCk7XG5cbiAgICAgIHJvd3MgPSByb3dzLm1hcCgocm93KSA9PiB7XG4gICAgICAgIHJvd1thc10gPSAoc3ViUm93R3JvdXBzW3Jvd1tyZWZJZF1dID8/IFtdKS5tYXAoKHIpID0+IG9taXQociwgW1wicmVmSWRcIl0pKTtcbiAgICAgICAgcmV0dXJuIHJvdztcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiByb3dzO1xuICB9XG5cbiAgLyoqXG4gICAqIEZsYXQg66CI7L2U65Oc66W8IOykkeyyqSDqsJ3ssrTroZwg67OA7ZmYXG4gICAqXG4gICAqIC0gYHVzZXJfX25hbWVgIOKGkiBgeyB1c2VyOiB7IG5hbWUgfSB9YFxuICAgKiAtIG51bGxhYmxlIHJlbGF0aW9u7J2YIOqyveyasCBpZCDtlYTrk5zqsIAgbnVsbOydtOuptCDqsJ3ssrQg7J6Q7LK066W8IG51bGzroZxcbiAgICovXG4gIGh5ZHJhdGU8VCBleHRlbmRzIFVua25vd25EQlJlY29yZD4ocm93czogVFtdKTogVFtdIHtcbiAgICByZXR1cm4gcm93cy5tYXAoKHJvdzogVCkgPT4ge1xuICAgICAgLy8gbnVsbGFibGUgcmVsYXRpb24g7LKY66asOiDqt7jro7nsnZggaWQg7ZWE65Oc6rCAIG51bGzsnbTrqbQg6rCd7LK0IOyghOyytOulvCBudWxs66GcXG4gICAgICBjb25zdCBuZXN0ZWRLZXlzID0gT2JqZWN0LmtleXMocm93KS5maWx0ZXIoKGtleSkgPT4ga2V5LmluY2x1ZGVzKFwiX19cIikpO1xuICAgICAgY29uc3QgZ3JvdXBzID0gT2JqZWN0Lmdyb3VwQnkobmVzdGVkS2V5cywgKGtleSkgPT4ga2V5LnNwbGl0KFwiX19cIilbMF0pO1xuXG4gICAgICAvLyBpZCDtlYTrk5zqsIAgbnVsbOyduCDqt7jro7kg7LC+6riwICjsmIg6IHBhcmVudF9faWTqsIAgbnVsbOydtOuptCBwYXJlbnQg6re466O5IOyghOyytOqwgCBudWxsKVxuICAgICAgY29uc3QgbnVsbEtleXMgPSBPYmplY3QuZW50cmllcyhncm91cHMpXG4gICAgICAgIC5maWx0ZXIoKFtncm91cEtleSwgZmllbGRzXSkgPT4ge1xuICAgICAgICAgIGlmICghZmllbGRzIHx8IGZpZWxkcy5sZW5ndGggPT09IDApIHJldHVybiBmYWxzZTtcblxuICAgICAgICAgIC8vIOq3uOujueydmCBpZCDtlYTrk5wg7LC+6riwICjsmIg6IFwicGFyZW50X19pZFwiKVxuICAgICAgICAgIGNvbnN0IGlkRmllbGQgPSBgJHtncm91cEtleX1fX2lkYDtcbiAgICAgICAgICBpZiAoaWRGaWVsZCBpbiByb3cpIHtcbiAgICAgICAgICAgIC8vIGlkIO2VhOuTnOqwgCBudWxs7J2066m0IOqwneyytCDsoITssrTqsIAgbnVsbFxuICAgICAgICAgICAgcmV0dXJuIHJvd1tpZEZpZWxkXSA9PT0gbnVsbDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBpZCDtlYTrk5zqsIAg7JeG7Jy866m0IOq4sOyhtCDroZzsp4E6IOuqqOuToCDtlYTrk5zqsIAgbnVsbOyduOyngCDtmZXsnbhcbiAgICAgICAgICByZXR1cm4gZmllbGRzLmV2ZXJ5KFxuICAgICAgICAgICAgKGZpZWxkKSA9PlxuICAgICAgICAgICAgICByb3dbZmllbGRdID09PSBudWxsIHx8IChBcnJheS5pc0FycmF5KHJvd1tmaWVsZF0pICYmIHJvd1tmaWVsZF0ubGVuZ3RoID09PSAwKSxcbiAgICAgICAgICApO1xuICAgICAgICB9KVxuICAgICAgICAubWFwKChba2V5XSkgPT4ga2V5KTtcblxuICAgICAgY29uc3QgaHlkcmF0ZWQgPSBPYmplY3Qua2V5cyhyb3cpLnJlZHVjZSgociwgZmllbGQpID0+IHtcbiAgICAgICAgaWYgKCFmaWVsZC5pbmNsdWRlcyhcIl9fXCIpKSB7XG4gICAgICAgICAgLy8g7J2867CYIO2VhOuTnDog67Cw7Je0IOuCtCDqsJ3ssrTrqbQg7J6s6reAIGh5ZHJhdGVcbiAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShyb3dbZmllbGRdKSAmJiBpc09iamVjdChyb3dbZmllbGRdWzBdKSkge1xuICAgICAgICAgICAgcltmaWVsZF0gPSB0aGlzLmh5ZHJhdGUocm93W2ZpZWxkXSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJbZmllbGRdID0gcm93W2ZpZWxkXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHI7XG4gICAgICAgIH1cblxuICAgICAgICAvLyDspJHssqkg7ZWE65OcIOyymOumrDogdXNlcl9fbmFtZSDihpIgdXNlcltuYW1lXVxuICAgICAgICBjb25zdCBwYXJ0cyA9IGZpZWxkLnNwbGl0KFwiX19cIik7XG4gICAgICAgIGNvbnN0IG9ialBhdGggPVxuICAgICAgICAgIHBhcnRzWzBdICtcbiAgICAgICAgICBwYXJ0c1xuICAgICAgICAgICAgLnNsaWNlKDEpXG4gICAgICAgICAgICAubWFwKChwYXJ0KSA9PiBgWyR7cGFydH1dYClcbiAgICAgICAgICAgIC5qb2luKFwiXCIpO1xuXG4gICAgICAgIHIgPSBzZXQoXG4gICAgICAgICAgcixcbiAgICAgICAgICBvYmpQYXRoLFxuICAgICAgICAgIHJvd1tmaWVsZF0gJiYgQXJyYXkuaXNBcnJheShyb3dbZmllbGRdKSAmJiBpc09iamVjdChyb3dbZmllbGRdWzBdKVxuICAgICAgICAgICAgPyB0aGlzLmh5ZHJhdGUocm93W2ZpZWxkXSlcbiAgICAgICAgICAgIDogcm93W2ZpZWxkXSxcbiAgICAgICAgKTtcblxuICAgICAgICByZXR1cm4gcjtcbiAgICAgIH0sIHt9IGFzIFVua25vd25EQlJlY29yZCk7XG5cbiAgICAgIC8vIG51bGwgcmVsYXRpb24g7LKY66asXG4gICAgICBudWxsS2V5cy5mb3JFYWNoKChudWxsS2V5KSA9PiB7XG4gICAgICAgIGh5ZHJhdGVkW251bGxLZXldID0gbnVsbDtcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gaHlkcmF0ZWQ7XG4gICAgfSkgYXMgVFtdO1xuICB9XG59XG5cbi8qKlxuICogRW5oYW5jZXIg7YyM652866+47YSwIOyhsOqxtOu2gCDtg4DsnoVcbiAqIFJlcXVpcmVkRW5oYW5jZXJLZXlz6rCAIOyXhuycvOuptCBlbmhhbmNlcnMg7ISg7YOd7KCBLCDsnojsnLzrqbQg7ZWE7IiYXG4gKi9cbnR5cGUgRW5oYW5jZXJQYXJhbTxcbiAgVFN1YnNldEtleSBleHRlbmRzIHN0cmluZyxcbiAgVENvbXB1dGVkUmVzdWx0cyBleHRlbmRzIFJlY29yZDxUU3Vic2V0S2V5LCBhbnk+LFxuICBUU3Vic2V0TWFwcGluZyBleHRlbmRzIFJlY29yZDxUU3Vic2V0S2V5LCBhbnk+LFxuICBUU3Vic2V0UXVlcmllcyBleHRlbmRzIFJlY29yZDxUU3Vic2V0S2V5LCBQdXJpU3Vic2V0Rm4+LFxuPiA9IFtSZXF1aXJlZEVuaGFuY2VyS2V5czxUU3Vic2V0S2V5LCBUQ29tcHV0ZWRSZXN1bHRzLCBUU3Vic2V0TWFwcGluZz5dIGV4dGVuZHMgW25ldmVyXVxuICA/IHsgZW5oYW5jZXJzPzogRW5oYW5jZXJNYXA8VFN1YnNldEtleSwgVENvbXB1dGVkUmVzdWx0cywgVFN1YnNldE1hcHBpbmcsIFRTdWJzZXRRdWVyaWVzPiB9XG4gIDogeyBlbmhhbmNlcnM6IEVuaGFuY2VyTWFwPFRTdWJzZXRLZXksIFRDb21wdXRlZFJlc3VsdHMsIFRTdWJzZXRNYXBwaW5nLCBUU3Vic2V0UXVlcmllcz4gfTtcblxudHlwZSBSZXF1aXJlZEVuaGFuY2VyS2V5czxcbiAgVFN1YnNldEtleSBleHRlbmRzIHN0cmluZyxcbiAgVENvbXB1dGVkUmVzdWx0cyBleHRlbmRzIFJlY29yZDxUU3Vic2V0S2V5LCBhbnk+LFxuICBUU3Vic2V0TWFwcGluZyBleHRlbmRzIFJlY29yZDxUU3Vic2V0S2V5LCBhbnk+LFxuPiA9IHtcbiAgW0sgaW4gVFN1YnNldEtleV06IFRDb21wdXRlZFJlc3VsdHNbS10gZXh0ZW5kcyBUU3Vic2V0TWFwcGluZ1tLXSA/IG5ldmVyIDogSztcbn1bVFN1YnNldEtleV07XG5cbmV4cG9ydCBjb25zdCBCYXNlTW9kZWwgPSBuZXcgQmFzZU1vZGVsQ2xhc3MoKTtcbiJdLCJuYW1lcyI6WyJnZXRMb2dnZXIiLCJjbG9uZURlZXAiLCJncm91cCIsImlzT2JqZWN0Iiwib21pdCIsInNldCIsIm5vcm1hbGl6ZUZpbHRlclF1ZXJ5IiwidmFsaWRhdGVTb25hbXVGaWx0ZXJzIiwiU29uYW11IiwiRW50aXR5TWFuYWdlciIsImNvbnZlcnREb21haW5Ub0NhdGVnb3J5IiwiZ2V0Sm9pblRhYmxlcyIsImdldFRhYmxlTmFtZXNGcm9tV2hlcmUiLCJjaHVuayIsIkRCIiwiUHVyaSIsIlB1cmlXcmFwcGVyIiwiVXBzZXJ0QnVpbGRlciIsIkJhc2VNb2RlbENsYXNzIiwibG9nZ2VyIiwibW9kZWxOYW1lIiwibmFtZSIsInN1YnNldFF1ZXJpZXMiLCJsb2FkZXJRdWVyaWVzIiwiZ2V0REIiLCJ3aGljaCIsImdldFB1cmkiLCJ0cngiLCJnZXRUcmFuc2FjdGlvbkNvbnRleHQiLCJnZXRUcmFuc2FjdGlvbiIsImRiIiwiZGVzdHJveSIsImdldEluc2VydGVkSWRzIiwid2RiIiwicm93cyIsInRhYmxlTmFtZSIsInVucUtleUZpZWxkcyIsImNodW5rU2l6ZSIsInVucUtleXMiLCJ3aGVyZUluRmllbGQiLCJzZWxlY3RGaWVsZCIsImxlbmd0aCIsInJhdyIsImpvaW4iLCJtYXAiLCJyb3ciLCJmaWVsZCIsInJlc3VsdElkcyIsIml0ZW1zIiwiZGJSb3dzIiwic2VsZWN0Iiwid2hlcmVJbiIsImNvbmNhdCIsImRiUm93IiwicGFyc2VJbnQiLCJTdHJpbmciLCJpZCIsImdldFN1YnNldFF1ZXJpZXMiLCJzdWJzZXQiLCJFcnJvciIsInB1cmlXcmFwcGVyIiwicWIiLCJvblN1YnNldCIsIl9zdWJzZXQiLCJjcmVhdGVFbmhhbmNlcnMiLCJlbmhhbmNlcnMiLCJleGVjdXRlU3Vic2V0UXVlcnkiLCJwYXJhbXMiLCJxdWVyeVBhcmFtcyIsImRlYnVnIiwib3B0aW1pemVDb3VudFF1ZXJ5Iiwic29uYW11RmlsdGVyIiwibm9ybWFsaXplZEZpbHRlciIsImFwcGx5U29uYW11RmlsdGVycyIsIm51bSIsInBhZ2UiLCJ0b3RhbCIsImV4ZWN1dGVDb3VudFF1ZXJ5IiwicXVlcnlNb2RlIiwiY29tcHV0ZWRSb3dzIiwiZXhlY3V0ZUxpc3RRdWVyeSIsImVuaGFuY2VyIiwiZW5oYW5jZWRSb3dzIiwiUHJvbWlzZSIsImFsbCIsImVudGl0eSIsImdldCIsImludGVybmFsRmllbGRzIiwic3Vic2V0c0ludGVybmFsIiwib21pdEludGVybmFsRmllbGRzIiwiZmllbGRzIiwicmVzdWx0IiwiZGVsZXRlRmllbGQiLCJzcGxpdCIsImZpbHRlcnMiLCJwdXJpIiwiY29uZGl0aW9uIiwiT2JqZWN0IiwiZW50cmllcyIsInVuZGVmaW5lZCIsImZ1bGxGaWVsZCIsImdldEZ1bGxGaWVsZE5hbWUiLCJBcnJheSIsImlzQXJyYXkiLCJ3aGVyZSIsIm9wZXJhdG9yIiwidmFsdWUiLCJhcHBseU9wZXJhdG9yIiwid2hlcmVOb3RJbiIsIm1pbiIsIm1heCIsImNvbnNvbGUiLCJ3YXJuIiwib2JqIiwicGFydHMiLCJmb3JFYWNoIiwiaXRlbSIsImZpcnN0IiwicmVzdCIsIm5leHQiLCJjb3VudFB1cmkiLCJjbG9uZSIsImNsZWFyIiwiZGVmYXVsdCIsIlNxbFBhcnNlciIsInBhcnNlciIsIlBhcnNlciIsInBhcnNlZFF1ZXJ5IiwiYXN0aWZ5IiwidG9RdWVyeSIsImRhdGFiYXNlIiwiY29uZmlnIiwibGVmdEpvaW5UYWJsZXMiLCJ3aGVyZVRhYmxlcyIsInRhYmxlc1RvUmVtb3ZlIiwiZmlsdGVyIiwiaiIsImluY2x1ZGVzIiwidGFibGUiLCJjbGVhckpvaW4iLCJjb3VudFJlc3VsdCIsInJhd051bWJlciIsImxpbWl0ZWRRYiIsImxpbWl0Iiwib2Zmc2V0IiwidW5sb2FkZWRSb3dzIiwibG9hZGVycyIsInByb2Nlc3NMb2FkZXJzIiwiaHlkcmF0ZSIsInJlc29sdmVMb2FkZXIiLCJhcyIsInJlZklkIiwicmVzb2x2ZUxvYWRlclFiRm4iLCJuZXN0ZWRMb2FkZXJzIiwicmVzb2x2ZUxvYWRlclFiIiwibG9hZGVkUm93cyIsInN1YlJvd0dyb3VwcyIsInIiLCJuZXN0ZWRLZXlzIiwia2V5cyIsImtleSIsImdyb3VwcyIsImdyb3VwQnkiLCJudWxsS2V5cyIsImdyb3VwS2V5IiwiaWRGaWVsZCIsImV2ZXJ5IiwiaHlkcmF0ZWQiLCJyZWR1Y2UiLCJvYmpQYXRoIiwic2xpY2UiLCJwYXJ0IiwibnVsbEtleSIsIkJhc2VNb2RlbCJdLCJtYXBwaW5ncyI6IkFBQUEsa0dBQWtHLEdBQ2xHLFNBQVNBLFNBQVMsUUFBcUIsbUJBQW1CO0FBRTFELFNBQVNDLFNBQVMsRUFBRUMsS0FBSyxFQUFFQyxRQUFRLEVBQUVDLElBQUksRUFBRUMsR0FBRyxRQUFRLFVBQVU7QUFDaEUsU0FBMEJDLG9CQUFvQixFQUFFQyxxQkFBcUIsUUFBUSxjQUFLO0FBQ2xGLFNBQVNDLE1BQU0sUUFBUSxrQkFBUztBQUNoQyxTQUFTQyxhQUFhLFFBQVEsOEJBQTJCO0FBRXpELFNBQVNDLHVCQUF1QixRQUFRLHdCQUFxQjtBQUU3RCxTQUFTQyxhQUFhLEVBQUVDLHNCQUFzQixRQUFRLHlCQUFzQjtBQUM1RSxTQUFTQyxLQUFLLFFBQVEsb0JBQWlCO0FBR3ZDLFNBQVNDLEVBQUUsUUFBUSxVQUFPO0FBQzFCLFNBQVNDLElBQUksUUFBUSxZQUFTO0FBRzlCLFNBQVNDLFdBQVcsUUFBUSxvQkFBaUI7QUFDN0MsU0FBU0MsYUFBYSxRQUFRLHNCQUFtQjtBQUlqRDs7Ozs7OztDQU9DLEdBQ0QsT0FBTyxNQUFNQzs7OztJQU1RQyxPQUFlO0lBRWxDLFlBQ0UsQUFBZ0JDLFlBQW9CLElBQUksQ0FBQyxXQUFXLENBQUNDLElBQUksRUFDekQsQUFBVUMsYUFBOEIsRUFDeEMsQUFBVUMsYUFBOEIsQ0FDeEM7YUFIZ0JILFlBQUFBO2FBQ05FLGdCQUFBQTthQUNBQyxnQkFBQUE7UUFFVixJQUFJLENBQUNK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
392
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kYXRhYmFzZS9iYXNlLW1vZGVsLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKiBiaW9tZS1pZ25vcmUtYWxsIGxpbnQvc3VzcGljaW91cy9ub0V4cGxpY2l0QW55OiBQdXJp7J2YIO2DgOyeheydgCDqsJzrs4Qg66qo64247JeQ7IScIO2ZleygleuQmOuvgOuhnCBCYXNlTW9kZWzsl5DshJzripQgYW5566W8IO2XiOyaqe2VqCAqL1xuaW1wb3J0IHsgZ2V0TG9nZ2VyLCB0eXBlIExvZ2dlciB9IGZyb20gXCJAbG9ndGFwZS9sb2d0YXBlXCI7XG5pbXBvcnQgdHlwZSB7IEtuZXggfSBmcm9tIFwia25leFwiO1xuaW1wb3J0IHsgY2xvbmVEZWVwLCBjbHVzdGVyLCBncm91cCwgaXNPYmplY3QsIG9taXQsIHNldCB9IGZyb20gXCJyYWRhc2hpXCI7XG5pbXBvcnQgeyB0eXBlIExpc3RSZXN1bHQsIG5vcm1hbGl6ZUZpbHRlclF1ZXJ5LCB2YWxpZGF0ZVNvbmFtdUZpbHRlcnMgfSBmcm9tIFwiLi5cIjtcbmltcG9ydCB7IFNvbmFtdSB9IGZyb20gXCIuLi9hcGlcIjtcbmltcG9ydCB7IEVudGl0eU1hbmFnZXIgfSBmcm9tIFwiLi4vZW50aXR5L2VudGl0eS1tYW5hZ2VyXCI7XG5pbXBvcnQgdHlwZSB7IEZpbHRlck9wZXJhdG9yLCBGaWx0ZXJRdWVyeSB9IGZyb20gXCIuLi9maWx0ZXIvdHlwZXNcIjtcbmltcG9ydCB7IGNvbnZlcnREb21haW5Ub0NhdGVnb3J5IH0gZnJvbSBcIi4uL2xvZ2dlci9jYXRlZ29yeVwiO1xuaW1wb3J0IHR5cGUgeyBEYXRhYmFzZVNjaGVtYUV4dGVuZCwgU29uYW11UXVlcnlNb2RlIH0gZnJvbSBcIi4uL3R5cGVzL3R5cGVzXCI7XG5pbXBvcnQgeyBnZXRKb2luVGFibGVzLCBnZXRUYWJsZU5hbWVzRnJvbVdoZXJlIH0gZnJvbSBcIi4uL3V0aWxzL3NxbC1wYXJzZXJcIjtcbmltcG9ydCB0eXBlIHsgRW5oYW5jZXJNYXAsIFJlc29sdmVTdWJzZXRJbnRlcnNlY3Rpb24gfSBmcm9tIFwiLi9iYXNlLW1vZGVsLnR5cGVzXCI7XG5pbXBvcnQgdHlwZSB7IERCUHJlc2V0IH0gZnJvbSBcIi4vZGJcIjtcbmltcG9ydCB7IERCIH0gZnJvbSBcIi4vZGJcIjtcbmltcG9ydCB7IFB1cmkgfSBmcm9tIFwiLi9wdXJpXCI7XG5pbXBvcnQgdHlwZSB7IFVuaW9uRXh0cmFjdGVkVFRhYmxlcyB9IGZyb20gXCIuL3B1cmkudHlwZXNcIjtcbmltcG9ydCB0eXBlIHsgSW5mZXJBbGxTdWJzZXRzLCBQdXJpTG9hZGVyUXVlcmllcywgUHVyaVN1YnNldEZuIH0gZnJvbSBcIi4vcHVyaS1zdWJzZXQudHlwZXNcIjtcbmltcG9ydCB7IFB1cmlXcmFwcGVyIH0gZnJvbSBcIi4vcHVyaS13cmFwcGVyXCI7XG5pbXBvcnQgeyBVcHNlcnRCdWlsZGVyIH0gZnJvbSBcIi4vdXBzZXJ0LWJ1aWxkZXJcIjtcblxudHlwZSBVbmtub3duREJSZWNvcmQgPSBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblxuLyoqXG4gKiDrqqjrk6AgTW9kZWwg7YG0656Y7Iqk7J2YIOq4sOuzuCDtgbTrnpjsiqRcbiAqXG4gKiBAdGVtcGxhdGUgVFN1YnNldEtleSAtIOyEnOu4jOyFiyDtgqQg7Jyg64uI7JioICjsmIg6IFwiQVwiIHwgXCJQXCIgfCBcIlNTXCIpXG4gKiBAdGVtcGxhdGUgVFN1YnNldE1hcHBpbmcgLSDshJzruIzshYvrs4Qg7LWc7KKFIOqysOqzvCDtg4DsnoUg66ek7ZWRXG4gKiBAdGVtcGxhdGUgVFN1YnNldFF1ZXJpZXMgLSDshJzruIzshYsg7L+866asIO2VqOyImCDqsJ3ssrRcbiAqIEB0ZW1wbGF0ZSBUTG9hZGVyUXVlcmllcyAtIOyEnOu4jOyFi+uzhCDroZzrjZQg7L+866asIOuwsOyXtCDqsJ3ssrRcbiAqL1xuZXhwb3J0IGNsYXNzIEJhc2VNb2RlbENsYXNzPFxuICBUU3Vic2V0S2V5IGV4dGVuZHMgc3RyaW5nID0gbmV2ZXIsXG4gIFRTdWJzZXRNYXBwaW5nIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgYW55PiA9IG5ldmVyLFxuICBUU3Vic2V0UXVlcmllcyBleHRlbmRzIFJlY29yZDxUU3Vic2V0S2V5LCBQdXJpU3Vic2V0Rm4+ID0gbmV2ZXIsXG4gIFRMb2FkZXJRdWVyaWVzIGV4dGVuZHMgUHVyaUxvYWRlclF1ZXJpZXM8VFN1YnNldEtleT4gPSBuZXZlcixcbj4ge1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgbG9nZ2VyOiBMb2dnZXI7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHJlYWRvbmx5IG1vZGVsTmFtZTogc3RyaW5nID0gdGhpcy5jb25zdHJ1Y3Rvci5uYW1lLFxuICAgIHByb3RlY3RlZCBzdWJzZXRRdWVyaWVzPzogVFN1YnNldFF1ZXJpZXMsXG4gICAgcHJvdGVjdGVkIGxvYWRlclF1ZXJpZXM/OiBUTG9hZGVyUXVlcmllcyxcbiAgKSB7XG4gICAgdGhpcy5sb2dnZXIgPSBnZXRMb2dnZXIoY29udmVydERvbWFpblRvQ2F0ZWdvcnkodGhpcy5tb2RlbE5hbWUsIFwibW9kZWxcIikpO1xuICB9XG5cbiAgZ2V0REIod2hpY2g6IERCUHJlc2V0KTogS25leCB7XG4gICAgcmV0dXJuIERCLmdldERCKHdoaWNoKTtcbiAgfVxuXG4gIGdldFB1cmkod2hpY2g6IERCUHJlc2V0KTogUHVyaVdyYXBwZXIge1xuICAgIC8vIO2KuOuenOyereyFmCDsu6jthY3siqTtirjsl5DshJwg7Yq4656c7J6t7IWYIO2ajeuTnVxuICAgIGNvbnN0IHRyeCA9IERCLmdldFRyYW5zYWN0aW9uQ29udGV4dCgpLmdldFRyYW5zYWN0aW9uKHdoaWNoKTtcbiAgICBpZiAodHJ4KSB7XG4gICAgICByZXR1cm4gdHJ4O1xuICAgIH1cblxuICAgIC8vIO2KuOuenOyereyFmOydtCDsl4bsnLzrqbQg7IOI66Gc7Jq0IFB1cmlXcmFwcGVyIOuwmO2ZmFxuICAgIGNvbnN0IGRiID0gdGhpcy5nZXREQih3aGljaCk7XG4gICAgcmV0dXJuIG5ldyBQdXJpV3JhcHBlcihkYiwgbmV3IFVwc2VydEJ1aWxkZXIoKSk7XG4gIH1cblxuICBhc3luYyBkZXN0cm95KCkge1xuICAgIHJldHVybiBEQi5kZXN0cm95KCk7XG4gIH1cblxuICBhc3luYyBnZXRJbnNlcnRlZElkcyhcbiAgICB3ZGI6IEtuZXgsXG4gICAgcm93czogVW5rbm93bkRCUmVjb3JkW10sXG4gICAgdGFibGVOYW1lOiBzdHJpbmcsXG4gICAgdW5xS2V5RmllbGRzOiBzdHJpbmdbXSxcbiAgICBjaHVua1NpemU6IG51bWJlciA9IDUwMCxcbiAgKSB7XG4gICAgaWYgKCF3ZGIpIHtcbiAgICAgIHdkYiA9IHRoaXMuZ2V0REIoXCJ3XCIpO1xuICAgIH1cblxuICAgIGxldCB1bnFLZXlzOiBzdHJpbmdbXTtcbiAgICBsZXQgd2hlcmVJbkZpZWxkOiBzdHJpbmcgfCBLbmV4LlJhdztcbiAgICBsZXQgc2VsZWN0RmllbGQ6IHN0cmluZztcblxuICAgIGlmICh1bnFLZXlGaWVsZHMubGVuZ3RoID4gMSkge1xuICAgICAgd2hlcmVJbkZpZWxkID0gd2RiLnJhdyhgQ09OQ0FUX1dTKCdfJywgJyR7dW5xS2V5RmllbGRzLmpvaW4oXCIsXCIpfScpYCk7XG4gICAgICBzZWxlY3RGaWVsZCA9IGAke3doZXJlSW5GaWVsZH0gYXMgdG1wVWlkYDtcbiAgICAgIHVucUtleXMgPSByb3dzLm1hcCgocm93KSA9PiB1bnFLZXlGaWVsZHMubWFwKChmaWVsZCkgPT4gcm93W2ZpZWxkXSkuam9pbihcIl9cIikpO1xuICAgIH0gZWxzZSB7XG4gICAgICB3aGVyZUluRmllbGQgPSB1bnFLZXlGaWVsZHNbMF07XG4gICAgICBzZWxlY3RGaWVsZCA9IHVucUtleUZpZWxkc1swXTtcbiAgICAgIHVucUtleXMgPSByb3dzLm1hcCgocm93KSA9PiByb3dbdW5xS2V5RmllbGRzWzBdXSBhcyBzdHJpbmcpO1xuICAgIH1cblxuICAgIGxldCByZXN1bHRJZHM6IG51bWJlcltdID0gW107XG4gICAgZm9yIChjb25zdCBpdGVtcyBvZiBjbHVzdGVyKHVucUtleXMsIGNodW5rU2l6ZSkpIHtcbiAgICAgIGNvbnN0IGRiUm93cyA9IGF3YWl0IHdkYih0YWJsZU5hbWUpXG4gICAgICAgIC5zZWxlY3QoXCJpZFwiLCB3ZGIucmF3KHNlbGVjdEZpZWxkKSlcbiAgICAgICAgLndoZXJlSW4od2hlcmVJbkZpZWxkIGFzIHN0cmluZywgaXRlbXMpO1xuICAgICAgcmVzdWx0SWRzID0gcmVzdWx0SWRzLmNvbmNhdChcbiAgICAgICAgZGJSb3dzLm1hcCgoZGJSb3c6IFVua25vd25EQlJlY29yZCkgPT4gcGFyc2VJbnQoU3RyaW5nKGRiUm93LmlkKSkpLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0SWRzO1xuICB9XG5cbiAgLyoqXG4gICAqIO2KueyglSDshJzruIzshYvsl5Ag64yA7ZWcIOy/vOumrCDruYzrjZQg7ZqN65OdXG4gICAqXG4gICAqIEByZXR1cm5zIHFiIC0g7L+866asIOu5jOuNlCAo7KGw6rG0IOy2lOqwgOyaqSlcbiAgICogQHJldHVybnMgb25TdWJzZXQgLSDtirnsoJUg7ISc67iM7IWLIOyghOyaqSDtg4DsnoXsnbQg7ZWE7JqU7ZWgIOuVjCDsgqzsmqlcbiAgICovXG4gIGdldFN1YnNldFF1ZXJpZXM8VCBleHRlbmRzIFRTdWJzZXRLZXk+KHN1YnNldDogVCkge1xuICAgIGlmICghdGhpcy5zdWJzZXRRdWVyaWVzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJzdWJzZXRRdWVyaWVzIGlzIG5vdCBkZWZpbmVkXCIpO1xuICAgIH1cblxuICAgIGNvbnN0IHB1cmlXcmFwcGVyID0gbmV3IFB1cmlXcmFwcGVyKHRoaXMuZ2V0REIoXCJyXCIpLCBuZXcgVXBzZXJ0QnVpbGRlcigpKTtcbiAgICBjb25zdCBxYiA9IHRoaXMuc3Vic2V0UXVlcmllc1tzdWJzZXRdPy4ocHVyaVdyYXBwZXIpO1xuXG4gICAgLy8gTm9uQWxsb3dlZEFzU2luZ2xlVGFibGU6IOuLqOydvCDthYzsnbTruJQg7Lus65+8IOygkeq3vCDrsKnsp4Dsmqkg66eI7LukXG4gICAgdHlwZSBRQlRhYmxlcyA9IFVuaW9uRXh0cmFjdGVkVFRhYmxlczxUU3Vic2V0S2V5LCBUU3Vic2V0UXVlcmllcz4gJiB7XG4gICAgICBOb25BbGxvd2VkQXNTaW5nbGVUYWJsZTogeyBfX2Z1bGx0ZXh0X186IHRydWUgfTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHFiOiBxYiBhcyB1bmtub3duIGFzIFB1cmk8RGF0YWJhc2VTY2hlbWFFeHRlbmQsIFFCVGFibGVzLCB7fT4sXG4gICAgICBvblN1YnNldDogKChfc3Vic2V0OiBUU3Vic2V0S2V5IHwgcmVhZG9ubHkgVFN1YnNldEtleVtdKSA9PiBxYikgYXMge1xuICAgICAgICAvLyDri6jsnbwg7YKkXG4gICAgICAgIDxTIGV4dGVuZHMgVFN1YnNldEtleT4oc3Vic2V0OiBTKTogUmV0dXJuVHlwZTxUU3Vic2V0UXVlcmllc1tTXT47XG4gICAgICAgIC8vIO2CpCDrsLDsl7QgLT4g6rWQ7KeR7ZWpIOuwmO2ZmFxuICAgICAgICA8QXJyIGV4dGVuZHMgcmVhZG9ubHkgVFN1YnNldEtleVtdPihcbiAgICAgICAgICBzdWJzZXRzOiBbLi4uQXJyXSxcbiAgICAgICAgKTogUmVzb2x2ZVN1YnNldEludGVyc2VjdGlvbjxBcnIsIFRTdWJzZXRRdWVyaWVzPjtcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFbmhhbmNlciDqsJ3ssrQg7IOd7ISxIO2XrO2NvFxuICAgKiDtg4DsnoUg6rKA7KadIOuwjyDstpTroaDsnYQg64+E7JmA7KSMXG4gICAqL1xuICBjcmVhdGVFbmhhbmNlcnM8VCBleHRlbmRzIFRTdWJzZXRLZXk+KFxuICAgIGVuaGFuY2VyczogRW5oYW5jZXJNYXA8XG4gICAgICBULFxuICAgICAgSW5mZXJBbGxTdWJzZXRzPFRTdWJzZXRRdWVyaWVzLCBUTG9hZGVyUXVlcmllcz4sXG4gICAgICBUU3Vic2V0TWFwcGluZyxcbiAgICAgIFRTdWJzZXRRdWVyaWVzXG4gICAgPixcbiAgKSB7XG4gICAgcmV0dXJuIGVuaGFuY2VycztcbiAgfVxuXG4gIC8qKlxuICAgKiDshJzruIzshYsg7L+866asIOyLpO2WiVxuICAgKlxuICAgKiAxLiBTb25hbXUg7ZWE7YSwIOyggeyaqSAo7YOA7J6FIOuzgO2ZmCDtj6ztlagpXG4gICAqIDIuIOy/vOumrCDsi6TtlokgKHBhZ2luYXRpb24g7KCB7JqpKVxuICAgKiAzLiDroZzrjZQg7Iuk7ZaJICgxOk4sIE46TSDqtIDqs4Qg642w7J207YSwIOuhnOuUqSlcbiAgICogNC4gSHlkcmF0ZSAoZmxhdCDihpIg7KSR7LKpIOqwneyytClcbiAgICogNS4gRW5oYW5jZXIg7KCB7JqpICh2aXJ0dWFsIO2VhOuTnCDqs4TsgrApXG4gICAqL1xuICBhc3luYyBleGVjdXRlU3Vic2V0UXVlcnk8XG4gICAgVCBleHRlbmRzIFRTdWJzZXRLZXksXG4gICAgVENvbXB1dGVkUmVzdWx0cyBleHRlbmRzIEluZmVyQWxsU3Vic2V0czxUU3Vic2V0UXVlcmllcywgVExvYWRlclF1ZXJpZXM+LFxuICAgIExQIGV4dGVuZHMge1xuICAgICAgbnVtPzogbnVtYmVyO1xuICAgICAgcGFnZT86IG51bWJlcjtcbiAgICAgIHF1ZXJ5TW9kZT86IFNvbmFtdVF1ZXJ5TW9kZTtcbiAgICAgIHNvbmFtdUZpbHRlcj86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIH0sXG4gID4oXG4gICAgcGFyYW1zOiB7XG4gICAgICBzdWJzZXQ6IFQ7XG4gICAgICBxYjogUHVyaTxhbnksIGFueSwgYW55PjtcbiAgICAgIHBhcmFtczoge1xuICAgICAgICBudW06IG51bWJlcjtcbiAgICAgICAgcGFnZTogbnVtYmVyO1xuICAgICAgICBxdWVyeU1vZGU/OiBTb25hbXVRdWVyeU1vZGU7XG4gICAgICAgIHNvbmFtdUZpbHRlcj86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgICAgfTtcbiAgICAgIGRlYnVnPzogYm9vbGVhbjtcbiAgICAgIG9wdGltaXplQ291bnRRdWVyeT86IGJvb2xlYW47XG4gICAgfSAmIEVuaGFuY2VyUGFyYW08VFN1YnNldEtleSwgVENvbXB1dGVkUmVzdWx0cywgVFN1YnNldE1hcHBpbmcsIFRTdWJzZXRRdWVyaWVzPixcbiAgKTogUHJvbWlzZTxMaXN0UmVzdWx0PExQLCBUU3Vic2V0TWFwcGluZ1tUXT4+IHtcbiAgICBjb25zdCB7IHN1YnNldCwgcWIsIHBhcmFtczogcXVlcnlQYXJhbXMsIGRlYnVnID0gZmFsc2UsIG9wdGltaXplQ291bnRRdWVyeSA9IGZhbHNlIH0gPSBwYXJhbXM7XG5cbiAgICBpZiAoIXRoaXMubG9hZGVyUXVlcmllcykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwibG9hZGVyUXVlcmllcyBpcyBub3QgZGVmaW5lZFwiKTtcbiAgICB9XG5cbiAgICAvLyBTb25hbXUgRmlsdGVyIOyggeyaqVxuICAgIGlmIChxdWVyeVBhcmFtcy5zb25hbXVGaWx0ZXIpIHtcbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWRGaWx0ZXIgPSBub3JtYWxpemVGaWx0ZXJRdWVyeShxdWVyeVBhcmFtcy5zb25hbXVGaWx0ZXIpO1xuICAgICAgdGhpcy5hcHBseVNvbmFtdUZpbHRlcnMocWIsIG5vcm1hbGl6ZWRGaWx0ZXIpO1xuICAgIH1cblxuICAgIGNvbnN0IHsgbnVtLCBwYWdlIH0gPSBxdWVyeVBhcmFtcztcblxuICAgIC8vIENPVU5UIOy/vOumrCDsi6TtlokgKHF1ZXJ5TW9kZTogbGlzdOydvCDrlYzripQgMCDrpqzthLQpXG4gICAgY29uc3QgdG90YWwgPSBhd2FpdCB0aGlzLmV4ZWN1dGVDb3VudFF1ZXJ5KHFiLCBxdWVyeVBhcmFtcywgZGVidWcsIG9wdGltaXplQ291bnRRdWVyeSk7XG5cbiAgICBpZiAocXVlcnlQYXJhbXM/LnF1ZXJ5TW9kZSA9PT0gXCJjb3VudFwiKSB7XG4gICAgICByZXR1cm4geyB0b3RhbCB9IGFzIExpc3RSZXN1bHQ8TFAsIFRTdWJzZXRNYXBwaW5nW1RdPjtcbiAgICB9XG5cbiAgICAvLyBMSVNUIOy/vOumrCDsi6TtlolcbiAgICBjb25zdCBjb21wdXRlZFJvd3MgPSBhd2FpdCB0aGlzLmV4ZWN1dGVMaXN0UXVlcnkoc3Vic2V0LCBxYiwgcXVlcnlQYXJhbXMsIG51bSwgcGFnZSwgZGVidWcpO1xuXG4gICAgLy8gRW5oYW5jZXIg7KCB7JqpXG4gICAgY29uc3QgZW5oYW5jZXIgPSAocGFyYW1zIGFzIGFueSkuZW5oYW5jZXJzPy5bc3Vic2V0XTtcbiAgICBjb25zdCBlbmhhbmNlZFJvd3MgPSAoYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICBjb21wdXRlZFJvd3MubWFwKChyb3cpID0+IGVuaGFuY2VyPy4ocm93KSA/PyByb3cpLFxuICAgICkpIGFzIFRTdWJzZXRNYXBwaW5nW1RdW107XG5cbiAgICAvLyBJbnRlcm5hbCDtlYTrk5wg7KCc6rGwXG4gICAgY29uc3QgZW50aXR5ID0gRW50aXR5TWFuYWdlci5nZXQodGhpcy5tb2RlbE5hbWUpO1xuICAgIGNvbnN0IGludGVybmFsRmllbGRzID0gZW50aXR5LnN1YnNldHNJbnRlcm5hbFtzdWJzZXRdID8/IFtdO1xuICAgIGNvbnN0IHJvd3MgPVxuICAgICAgaW50ZXJuYWxGaWVsZHMubGVuZ3RoID4gMFxuICAgICAgICA/IGVuaGFuY2VkUm93cy5tYXAoKHJvdykgPT4gdGhpcy5vbWl0SW50ZXJuYWxGaWVsZHMocm93LCBpbnRlcm5hbEZpZWxkcykpXG4gICAgICAgIDogZW5oYW5jZWRSb3dzO1xuXG4gICAgaWYgKHF1ZXJ5UGFyYW1zLnF1ZXJ5TW9kZSA9PT0gXCJsaXN0XCIpIHtcbiAgICAgIC8vIOumrOyKpO2KuOunjCDrpqzthLRcbiAgICAgIHJldHVybiB7IHJvd3MgfSBhcyBMaXN0UmVzdWx0PExQLCBUU3Vic2V0TWFwcGluZ1tUXT47XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIOuRmOuLpCDrpqzthLRcbiAgICAgIHJldHVybiB7IHJvd3MsIHRvdGFsIH0gYXMgTGlzdFJlc3VsdDxMUCwgVFN1YnNldE1hcHBpbmdbVF0+O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiDqsJ3ssrTsl5DshJwgaW50ZXJuYWwg7ZWE65OcIOygnOqxsFxuICAgKiDspJHssqkg7ZWE65OcKOyYiDogXCJ1c2VyLmVtYWlsXCIpIOuwjyDrsLDsl7Qo7JiIOiBcImVtcGxveWVlcy5zYWxhcnlcIinrj4Qg7LKY66asXG4gICAqL1xuICBvbWl0SW50ZXJuYWxGaWVsZHM8VCBleHRlbmRzIG9iamVjdD4ocm93OiBULCBmaWVsZHM6IHN0cmluZ1tdKTogVCB7XG4gICAgY29uc3QgcmVzdWx0ID0gY2xvbmVEZWVwKHJvdyk7XG4gICAgZm9yIChjb25zdCBmaWVsZCBvZiBmaWVsZHMpIHtcbiAgICAgIHRoaXMuZGVsZXRlRmllbGQocmVzdWx0LCBmaWVsZC5zcGxpdChcIi5cIikpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbHRlclF1ZXJ566W8IFB1cmkgUXVlcnlCdWlsZGVy7JeQIOyggeyaqVxuICAgKlxuICAgKiBAcGFyYW0gcWIgUHVyaSBRdWVyeUJ1aWxkZXIg7J247Iqk7YS07IqkXG4gICAqIEBwYXJhbSBmaWx0ZXJzIEZpbHRlclF1ZXJ5IOqwneyytFxuICAgKi9cbiAgcHJvdGVjdGVkIGFwcGx5U29uYW11RmlsdGVyczxURW50aXR5ID0gUmVjb3JkPHN0cmluZywgdW5rbm93bj4+KFxuICAgIHFiOiBQdXJpPGFueSwgYW55LCBhbnk+LFxuICAgIGZpbHRlcnM/OiBGaWx0ZXJRdWVyeTxURW50aXR5PixcbiAgKTogdm9pZCB7XG4gICAgaWYgKCFmaWx0ZXJzKSByZXR1cm47XG5cbiAgICBjb25zdCBlbnRpdHkgPSBFbnRpdHlNYW5hZ2VyLmdldCh0aGlzLm1vZGVsTmFtZSk7XG5cbiAgICAvLyAxLiDtlYTthLAg6rKA7KadIChFbnRpdHkg6riw67CYKVxuICAgIHZhbGlkYXRlU29uYW11RmlsdGVycyhmaWx0ZXJzLCBlbnRpdHkpO1xuXG4gICAgLy8gMi4g6rKA7Kad65CcIO2VhO2EsCDsoIHsmqlcbiAgICBjb25zdCBwdXJpID0gcWIgYXMgYW55O1xuXG4gICAgZm9yIChjb25zdCBbZmllbGQsIGNvbmRpdGlvbl0gb2YgT2JqZWN0LmVudHJpZXMoZmlsdGVycykpIHtcbiAgICAgIGlmIChjb25kaXRpb24gPT09IHVuZGVmaW5lZCB8fCBjb25kaXRpb24gPT09IG51bGwpIGNvbnRpbnVlO1xuXG4gICAgICAvLyDthYzsnbTruJTrqoUu7ZWE65Oc66qFIO2YleyLneycvOuhnCDrs4DtmZhcbiAgICAgIGNvbnN0IGZ1bGxGaWVsZCA9IGVudGl0eS5nZXRGdWxsRmllbGROYW1lKGZpZWxkKTtcblxuICAgICAgLy8g7KeB7KCRIOqwkiAoZXHsmYAg64+Z7J28KVxuICAgICAgaWYgKHR5cGVvZiBjb25kaXRpb24gIT09IFwib2JqZWN0XCIgfHwgQXJyYXkuaXNBcnJheShjb25kaXRpb24pKSB7XG4gICAgICAgIHB1cmkud2hlcmUoZnVsbEZpZWxkLCBjb25kaXRpb24pO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgLy8g7Jew7IKw7J6QIOqwneyytFxuICAgICAgZm9yIChjb25zdCBbb3BlcmF0b3IsIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhjb25kaXRpb24pKSB7XG4gICAgICAgIHRoaXMuYXBwbHlPcGVyYXRvcihxYiwgZnVsbEZpZWxkLCBvcGVyYXRvciBhcyBGaWx0ZXJPcGVyYXRvciwgdmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiDri6jsnbwg7Jew7IKw7J6Q66W8IFF1ZXJ5QnVpbGRlcuyXkCDsoIHsmqlcbiAgICovXG4gIHByaXZhdGUgYXBwbHlPcGVyYXRvcihcbiAgICBxYjogUHVyaTxhbnksIGFueSwgYW55PixcbiAgICBmaWVsZDogc3RyaW5nLFxuICAgIG9wZXJhdG9yOiBGaWx0ZXJPcGVyYXRvcixcbiAgICB2YWx1ZTogdW5rbm93bixcbiAgKTogdm9pZCB7XG4gICAgY29uc3QgcHVyaSA9IHFiIGFzIGFueTtcblxuICAgIHN3aXRjaCAob3BlcmF0b3IpIHtcbiAgICAgIGNhc2UgXCJlcVwiOlxuICAgICAgICBwdXJpLndoZXJlKGZpZWxkLCB2YWx1ZSk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFwibmVcIjpcbiAgICAgICAgcHVyaS53aGVyZShmaWVsZCwgXCIhPVwiLCB2YWx1ZSk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFwiZ3RcIjpcbiAgICAgICAgcHVyaS53aGVyZShmaWVsZCwgXCI+XCIsIHZhbHVlKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgXCJndGVcIjpcbiAgICAgICAgcHVyaS53aGVyZShmaWVsZCwgXCI+PVwiLCB2YWx1ZSk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFwibHRcIjpcbiAgICAgICAgcHVyaS53aGVyZShmaWVsZCwgXCI8XCIsIHZhbHVlKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgXCJsdGVcIjpcbiAgICAgICAgcHVyaS53aGVyZShmaWVsZCwgXCI8PVwiLCB2YWx1ZSk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFwiaW5cIjpcbiAgICAgICAgcHVyaS53aGVyZUluKGZpZWxkLCB2YWx1ZSk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFwibm90SW5cIjpcbiAgICAgICAgcHVyaS53aGVyZU5vdEluKGZpZWxkLCB2YWx1ZSk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFwiY29udGFpbnNcIjpcbiAgICAgICAgcHVyaS53aGVyZShmaWVsZCwgXCJsaWtlXCIsIGAlJHt2YWx1ZX0lYCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFwic3RhcnRzV2l0aFwiOlxuICAgICAgICBwdXJpLndoZXJlKGZpZWxkLCBcImxpa2VcIiwgYCR7dmFsdWV9JWApO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBcImVuZHNXaXRoXCI6XG4gICAgICAgIHB1cmkud2hlcmUoZmllbGQsIFwibGlrZVwiLCBgJSR7dmFsdWV9YCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFwiaXNOdWxsXCI6XG4gICAgICAgIHB1cmkud2hlcmUoZmllbGQsIG51bGwpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBcImlzTm90TnVsbFwiOlxuICAgICAgICBwdXJpLndoZXJlKGZpZWxkLCBcIiE9XCIsIG51bGwpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBcImJlZm9yZVwiOlxuICAgICAgICBwdXJpLndoZXJlKGZpZWxkLCBcIjxcIiwgdmFsdWUpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBcImFmdGVyXCI6XG4gICAgICAgIHB1cmkud2hlcmUoZmllbGQsIFwiPlwiLCB2YWx1ZSk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFwiYmV0d2VlblwiOiB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSAmJiB2YWx1ZS5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgICBjb25zdCBbbWluLCBtYXhdID0gdmFsdWU7XG4gICAgICAgICAgcHVyaS53aGVyZShmaWVsZCwgXCI+PVwiLCBtaW4pLndoZXJlKGZpZWxkLCBcIjw9XCIsIG1heCk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGNvbnNvbGUud2FybihgVW5zdXBwb3J0ZWQgb3BlcmF0b3I6ICR7b3BlcmF0b3J9YCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIOykkeyyqSDtlYTrk5wg7IKt7KCcICjrsLDsl7Qg64K0IOqwneyytOuPhCDsspjrpqwpXG4gICAqL1xuICBkZWxldGVGaWVsZChvYmo6IGFueSwgcGFydHM6IHN0cmluZ1tdKTogdm9pZCB7XG4gICAgaWYgKCFvYmogfHwgdHlwZW9mIG9iaiAhPT0gXCJvYmplY3RcIikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChwYXJ0cy5sZW5ndGggPT09IDEpIHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KG9iaikpIHtcbiAgICAgICAgb2JqLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgICBpZiAoaXRlbSAmJiB0eXBlb2YgaXRlbSA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgZGVsZXRlIGl0ZW1bcGFydHNbMF1dO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkZWxldGUgb2JqW3BhcnRzWzBdXTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBbZmlyc3QsIC4uLnJlc3RdID0gcGFydHM7XG4gICAgY29uc3QgbmV4dCA9IG9ialtmaXJzdF07XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheShuZXh0KSkge1xuICAgICAgbmV4dC5tYXAoKGl0ZW0pID0+IHRoaXMuZGVsZXRlRmllbGQoaXRlbSwgcmVzdCkpO1xuICAgIH0gZWxzZSBpZiAobmV4dCAmJiB0eXBlb2YgbmV4dCA9PT0gXCJvYmplY3RcIikge1xuICAgICAgdGhpcy5kZWxldGVGaWVsZChuZXh0LCByZXN0KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ09VTlQg7L+866asIOyLpO2WiSAo64K067aAIOuplOyEnOuTnClcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgZXhlY3V0ZUNvdW50UXVlcnkoXG4gICAgcWI6IFB1cmk8YW55LCBhbnksIGFueT4sXG4gICAgcGFyYW1zOiB7IHF1ZXJ5TW9kZT86IFwibGlzdFwiIHwgXCJjb3VudFwiIHwgXCJib3RoXCIgfSxcbiAgICBkZWJ1ZzogYm9vbGVhbixcbiAgICBvcHRpbWl6ZUNvdW50UXVlcnk6IGJvb2xlYW4sXG4gICk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgaWYgKHBhcmFtcy5xdWVyeU1vZGUgPT09IFwibGlzdFwiKSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG5cbiAgICBjb25zdCBjb3VudFB1cmkgPSBxYi5jbG9uZSgpLmNsZWFyKFwib3JkZXJcIikuY2xlYXIoXCJsaW1pdFwiKS5jbGVhcihcIm9mZnNldFwiKTtcblxuICAgIGlmIChvcHRpbWl6ZUNvdW50UXVlcnkpIHtcbiAgICAgIGNvbnN0IHsgZGVmYXVsdDogU3FsUGFyc2VyIH0gPSBhd2FpdCBpbXBvcnQoXCJub2RlLXNxbC1wYXJzZXJcIik7XG4gICAgICBjb25zdCBwYXJzZXIgPSBuZXcgU3FsUGFyc2VyLlBhcnNlcigpO1xuICAgICAgY29uc3QgcGFyc2VkUXVlcnkgPSBwYXJzZXIuYXN0aWZ5KGNvdW50UHVyaS50b1F1ZXJ5KCksIHtcbiAgICAgICAgZGF0YWJhc2U6IFNvbmFtdS5jb25maWcuZGF0YWJhc2UuZGF0YWJhc2UsXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgbGVmdEpvaW5UYWJsZXMgPSBnZXRKb2luVGFibGVzKHBhcnNlZFF1ZXJ5LCBbXCJMRUZUIEpPSU5cIl0pO1xuICAgICAgY29uc3Qgd2hlcmVUYWJsZXMgPSBnZXRUYWJsZU5hbWVzRnJvbVdoZXJlKHBhcnNlZFF1ZXJ5KTtcblxuICAgICAgY29uc3QgdGFibGVzVG9SZW1vdmUgPSBsZWZ0Sm9pblRhYmxlcy5maWx0ZXIoKGopID0+ICF3aGVyZVRhYmxlcy5pbmNsdWRlcyhqKSk7XG4gICAgICB0YWJsZXNUb1JlbW92ZS5mb3JFYWNoKCh0YWJsZSkgPT4ge1xuICAgICAgICBjb3VudFB1cmkuY2xlYXJKb2luKHRhYmxlKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIENPVU5UKCop66GcIOyghOyytCDroIjsvZTrk5wg7IiY66W8IOqzhOyCsFxuICAgIC8vIFRPRE86IHFi7J2YIERJU1RJTkNU6rCAIOyeiOuKlCDqsr3smrAg7LKY66as7ZW07JW8IO2VqFxuICAgIGNvbnN0IGNvdW50UmVzdWx0OiB7IHRvdGFsPzogbnVtYmVyIH0gPSBhd2FpdCBjb3VudFB1cmlcbiAgICAgIC5jbGVhcihcInNlbGVjdFwiKVxuICAgICAgLnNlbGVjdCh7IHRvdGFsOiBQdXJpLnJhd051bWJlcihgQ09VTlQoKik6OmludGVnZXJgKSB9KVxuICAgICAgLmZpcnN0KCk7XG5cbiAgICBpZiAoZGVidWcpIHtcbiAgICAgIGNvdW50UHVyaS5kZWJ1ZygpO1xuICAgIH1cblxuICAgIHJldHVybiBjb3VudFJlc3VsdD8udG90YWwgPz8gMDtcbiAgfVxuXG4gIC8qKlxuICAgKiBMSVNUIOy/vOumrCDsi6TtlokgKOuCtOu2gCDrqZTshJzrk5wpXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGV4ZWN1dGVMaXN0UXVlcnk8VCBleHRlbmRzIFRTdWJzZXRLZXk+KFxuICAgIHN1YnNldDogVCxcbiAgICBxYjogUHVyaTxhbnksIGFueSwgYW55PixcbiAgICBwYXJhbXM6IHsgcXVlcnlNb2RlPzogXCJsaXN0XCIgfCBcImNvdW50XCIgfCBcImJvdGhcIiB9LFxuICAgIG51bTogbnVtYmVyLFxuICAgIHBhZ2U6IG51bWJlcixcbiAgICBkZWJ1ZzogYm9vbGVhbixcbiAgKTogUHJvbWlzZTxhbnlbXT4ge1xuICAgIGlmIChwYXJhbXMucXVlcnlNb2RlID09PSBcImNvdW50XCIpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICBjb25zdCBsaW1pdGVkUWIgPSAoKCkgPT4ge1xuICAgICAgaWYgKG51bSA9PT0gMCkge1xuICAgICAgICByZXR1cm4gcWI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gcWIubGltaXQobnVtKS5vZmZzZXQobnVtICogKHBhZ2UgLSAxKSk7XG4gICAgICB9XG4gICAgfSkoKTtcbiAgICBsZXQgdW5sb2FkZWRSb3dzID0gKGF3YWl0IGxpbWl0ZWRRYikgYXMgYW55W107XG5cbiAgICBpZiAoZGVidWcpIHtcbiAgICAgIHFiLmRlYnVnKCk7XG4gICAgfVxuXG4gICAgLy8g66Gc642UIOyymOumrFxuICAgIGNvbnN0IGxvYWRlcnMgPSAodGhpcy5sb2FkZXJRdWVyaWVzIGFzIGFueSlbc3Vic2V0XTtcbiAgICBpZiAobG9hZGVycyAmJiBBcnJheS5pc0FycmF5KGxvYWRlcnMpKSB7XG4gICAgICB1bmxvYWRlZFJvd3MgPSBhd2FpdCB0aGlzLnByb2Nlc3NMb2FkZXJzKHVubG9hZGVkUm93cywgbG9hZGVycywgZGVidWcpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmh5ZHJhdGUodW5sb2FkZWRSb3dzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiDsnqzqt4DsoIEg66Gc642UIOyymOumrFxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBwcm9jZXNzTG9hZGVycyhyb3dzOiBhbnlbXSwgbG9hZGVyczogYW55W10sIGRlYnVnOiBib29sZWFuKTogUHJvbWlzZTxhbnlbXT4ge1xuICAgIGZvciAoY29uc3QgcmVzb2x2ZUxvYWRlciBvZiBsb2FkZXJzKSB7XG4gICAgICBjb25zdCB7IGFzLCByZWZJZCwgcWI6IHJlc29sdmVMb2FkZXJRYkZuLCBsb2FkZXJzOiBuZXN0ZWRMb2FkZXJzIH0gPSByZXNvbHZlTG9hZGVyO1xuXG4gICAgICBjb25zdCByZXNvbHZlTG9hZGVyUWIgPSByZXNvbHZlTG9hZGVyUWJGbihcbiAgICAgICAgbmV3IFB1cmlXcmFwcGVyKHRoaXMuZ2V0REIoXCJyXCIpLCBuZXcgVXBzZXJ0QnVpbGRlcigpKSxcbiAgICAgICAgcm93cy5tYXAoKHJvdykgPT4gcm93W3JlZklkXSksXG4gICAgICApO1xuXG4gICAgICBpZiAoZGVidWcpIHtcbiAgICAgICAgcmVzb2x2ZUxvYWRlclFiLmRlYnVnKCk7XG4gICAgICB9XG5cbiAgICAgIGxldCBsb2FkZWRSb3dzID0gKGF3YWl0IHJlc29sdmVMb2FkZXJRYikgYXMgYW55W107XG5cbiAgICAgIC8vIOykkeyyqSBsb2FkZXJz6rCAIOyeiOycvOuptCDsnqzqt4Ag7LKY66asXG4gICAgICBpZiAobmVzdGVkTG9hZGVycyAmJiBuZXN0ZWRMb2FkZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgbG9hZGVkUm93cyA9IGF3YWl0IHRoaXMucHJvY2Vzc0xvYWRlcnMobG9hZGVkUm93cywgbmVzdGVkTG9hZGVycywgZGVidWcpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBzdWJSb3dHcm91cHMgPSBncm91cChsb2FkZWRSb3dzLCAocm93KSA9PiByb3cucmVmSWQpO1xuXG4gICAgICByb3dzID0gcm93cy5tYXAoKHJvdykgPT4ge1xuICAgICAgICByb3dbYXNdID0gKHN1YlJvd0dyb3Vwc1tyb3dbcmVmSWRdXSA/PyBbXSkubWFwKChyKSA9PiBvbWl0KHIsIFtcInJlZklkXCJdKSk7XG4gICAgICAgIHJldHVybiByb3c7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcm93cztcbiAgfVxuXG4gIC8qKlxuICAgKiBGbGF0IOugiOy9lOuTnOulvCDspJHssqkg6rCd7LK066GcIOuzgO2ZmFxuICAgKlxuICAgKiAtIGB1c2VyX19uYW1lYCDihpIgYHsgdXNlcjogeyBuYW1lIH0gfWBcbiAgICogLSBudWxsYWJsZSByZWxhdGlvbuydmCDqsr3smrAgaWQg7ZWE65Oc6rCAIG51bGzsnbTrqbQg6rCd7LK0IOyekOyytOulvCBudWxs66GcXG4gICAqL1xuICBoeWRyYXRlPFQgZXh0ZW5kcyBVbmtub3duREJSZWNvcmQ+KHJvd3M6IFRbXSk6IFRbXSB7XG4gICAgcmV0dXJuIHJvd3MubWFwKChyb3c6IFQpID0+IHtcbiAgICAgIC8vIG51bGxhYmxlIHJlbGF0aW9uIOyymOumrDog6re466O57J2YIGlkIO2VhOuTnOqwgCBudWxs7J2066m0IOqwneyytCDsoITssrTrpbwgbnVsbOuhnFxuICAgICAgY29uc3QgbmVzdGVkS2V5cyA9IE9iamVjdC5rZXlzKHJvdykuZmlsdGVyKChrZXkpID0+IGtleS5pbmNsdWRlcyhcIl9fXCIpKTtcbiAgICAgIGNvbnN0IGdyb3VwcyA9IE9iamVjdC5ncm91cEJ5KG5lc3RlZEtleXMsIChrZXkpID0+IGtleS5zcGxpdChcIl9fXCIpWzBdKTtcblxuICAgICAgLy8gaWQg7ZWE65Oc6rCAIG51bGzsnbgg6re466O5IOywvuq4sCAo7JiIOiBwYXJlbnRfX2lk6rCAIG51bGzsnbTrqbQgcGFyZW50IOq3uOujuSDsoITssrTqsIAgbnVsbClcbiAgICAgIGNvbnN0IG51bGxLZXlzID0gT2JqZWN0LmVudHJpZXMoZ3JvdXBzKVxuICAgICAgICAuZmlsdGVyKChbZ3JvdXBLZXksIGZpZWxkc10pID0+IHtcbiAgICAgICAgICBpZiAoIWZpZWxkcyB8fCBmaWVsZHMubGVuZ3RoID09PSAwKSByZXR1cm4gZmFsc2U7XG5cbiAgICAgICAgICAvLyDqt7jro7nsnZggaWQg7ZWE65OcIOywvuq4sCAo7JiIOiBcInBhcmVudF9faWRcIilcbiAgICAgICAgICBjb25zdCBpZEZpZWxkID0gYCR7Z3JvdXBLZXl9X19pZGA7XG4gICAgICAgICAgaWYgKGlkRmllbGQgaW4gcm93KSB7XG4gICAgICAgICAgICAvLyBpZCDtlYTrk5zqsIAgbnVsbOydtOuptCDqsJ3ssrQg7KCE7LK06rCAIG51bGxcbiAgICAgICAgICAgIHJldHVybiByb3dbaWRGaWVsZF0gPT09IG51bGw7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gaWQg7ZWE65Oc6rCAIOyXhuycvOuptCDquLDsobQg66Gc7KeBOiDrqqjrk6Ag7ZWE65Oc6rCAIG51bGzsnbjsp4Ag7ZmV7J24XG4gICAgICAgICAgcmV0dXJuIGZpZWxkcy5ldmVyeShcbiAgICAgICAgICAgIChmaWVsZCkgPT5cbiAgICAgICAgICAgICAgcm93W2ZpZWxkXSA9PT0gbnVsbCB8fCAoQXJyYXkuaXNBcnJheShyb3dbZmllbGRdKSAmJiByb3dbZmllbGRdLmxlbmd0aCA9PT0gMCksXG4gICAgICAgICAgKTtcbiAgICAgICAgfSlcbiAgICAgICAgLm1hcCgoW2tleV0pID0+IGtleSk7XG5cbiAgICAgIGNvbnN0IGh5ZHJhdGVkID0gT2JqZWN0LmtleXMocm93KS5yZWR1Y2UoKHIsIGZpZWxkKSA9PiB7XG4gICAgICAgIGlmICghZmllbGQuaW5jbHVkZXMoXCJfX1wiKSkge1xuICAgICAgICAgIC8vIOydvOuwmCDtlYTrk5w6IOuwsOyXtCDrgrQg6rCd7LK066m0IOyerOq3gCBoeWRyYXRlXG4gICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocm93W2ZpZWxkXSkgJiYgaXNPYmplY3Qocm93W2ZpZWxkXVswXSkpIHtcbiAgICAgICAgICAgIHJbZmllbGRdID0gdGhpcy5oeWRyYXRlKHJvd1tmaWVsZF0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByW2ZpZWxkXSA9IHJvd1tmaWVsZF07XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiByO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8g7KSR7LKpIO2VhOuTnCDsspjrpqw6IHVzZXJfX25hbWUg4oaSIHVzZXJbbmFtZV1cbiAgICAgICAgY29uc3QgcGFydHMgPSBmaWVsZC5zcGxpdChcIl9fXCIpO1xuICAgICAgICBjb25zdCBvYmpQYXRoID1cbiAgICAgICAgICBwYXJ0c1swXSArXG4gICAgICAgICAgcGFydHNcbiAgICAgICAgICAgIC5zbGljZSgxKVxuICAgICAgICAgICAgLm1hcCgocGFydCkgPT4gYFske3BhcnR9XWApXG4gICAgICAgICAgICAuam9pbihcIlwiKTtcblxuICAgICAgICByID0gc2V0KFxuICAgICAgICAgIHIsXG4gICAgICAgICAgb2JqUGF0aCxcbiAgICAgICAgICByb3dbZmllbGRdICYmIEFycmF5LmlzQXJyYXkocm93W2ZpZWxkXSkgJiYgaXNPYmplY3Qocm93W2ZpZWxkXVswXSlcbiAgICAgICAgICAgID8gdGhpcy5oeWRyYXRlKHJvd1tmaWVsZF0pXG4gICAgICAgICAgICA6IHJvd1tmaWVsZF0sXG4gICAgICAgICk7XG5cbiAgICAgICAgcmV0dXJuIHI7XG4gICAgICB9LCB7fSBhcyBVbmtub3duREJSZWNvcmQpO1xuXG4gICAgICAvLyBudWxsIHJlbGF0aW9uIOyymOumrFxuICAgICAgbnVsbEtleXMuZm9yRWFjaCgobnVsbEtleSkgPT4ge1xuICAgICAgICBoeWRyYXRlZFtudWxsS2V5XSA9IG51bGw7XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIGh5ZHJhdGVkO1xuICAgIH0pIGFzIFRbXTtcbiAgfVxufVxuXG4vKipcbiAqIEVuaGFuY2VyIO2MjOudvOuvuO2EsCDsobDqsbTrtoAg7YOA7J6FXG4gKiBSZXF1aXJlZEVuaGFuY2VyS2V5c+qwgCDsl4bsnLzrqbQgZW5oYW5jZXJzIOyEoO2DneyggSwg7J6I7Jy866m0IO2VhOyImFxuICovXG50eXBlIEVuaGFuY2VyUGFyYW08XG4gIFRTdWJzZXRLZXkgZXh0ZW5kcyBzdHJpbmcsXG4gIFRDb21wdXRlZFJlc3VsdHMgZXh0ZW5kcyBSZWNvcmQ8VFN1YnNldEtleSwgYW55PixcbiAgVFN1YnNldE1hcHBpbmcgZXh0ZW5kcyBSZWNvcmQ8VFN1YnNldEtleSwgYW55PixcbiAgVFN1YnNldFF1ZXJpZXMgZXh0ZW5kcyBSZWNvcmQ8VFN1YnNldEtleSwgUHVyaVN1YnNldEZuPixcbj4gPSBbUmVxdWlyZWRFbmhhbmNlcktleXM8VFN1YnNldEtleSwgVENvbXB1dGVkUmVzdWx0cywgVFN1YnNldE1hcHBpbmc+XSBleHRlbmRzIFtuZXZlcl1cbiAgPyB7IGVuaGFuY2Vycz86IEVuaGFuY2VyTWFwPFRTdWJzZXRLZXksIFRDb21wdXRlZFJlc3VsdHMsIFRTdWJzZXRNYXBwaW5nLCBUU3Vic2V0UXVlcmllcz4gfVxuICA6IHsgZW5oYW5jZXJzOiBFbmhhbmNlck1hcDxUU3Vic2V0S2V5LCBUQ29tcHV0ZWRSZXN1bHRzLCBUU3Vic2V0TWFwcGluZywgVFN1YnNldFF1ZXJpZXM+IH07XG5cbnR5cGUgUmVxdWlyZWRFbmhhbmNlcktleXM8XG4gIFRTdWJzZXRLZXkgZXh0ZW5kcyBzdHJpbmcsXG4gIFRDb21wdXRlZFJlc3VsdHMgZXh0ZW5kcyBSZWNvcmQ8VFN1YnNldEtleSwgYW55PixcbiAgVFN1YnNldE1hcHBpbmcgZXh0ZW5kcyBSZWNvcmQ8VFN1YnNldEtleSwgYW55Pixcbj4gPSB7XG4gIFtLIGluIFRTdWJzZXRLZXldOiBUQ29tcHV0ZWRSZXN1bHRzW0tdIGV4dGVuZHMgVFN1YnNldE1hcHBpbmdbS10gPyBuZXZlciA6IEs7XG59W1RTdWJzZXRLZXldO1xuXG5leHBvcnQgY29uc3QgQmFzZU1vZGVsID0gbmV3IEJhc2VNb2RlbENsYXNzKCk7XG4iXSwibmFtZXMiOlsiZ2V0TG9nZ2VyIiwiY2xvbmVEZWVwIiwiY2x1c3RlciIsImdyb3VwIiwiaXNPYmplY3QiLCJvbWl0Iiwic2V0Iiwibm9ybWFsaXplRmlsdGVyUXVlcnkiLCJ2YWxpZGF0ZVNvbmFtdUZpbHRlcnMiLCJTb25hbXUiLCJFbnRpdHlNYW5hZ2VyIiwiY29udmVydERvbWFpblRvQ2F0ZWdvcnkiLCJnZXRKb2luVGFibGVzIiwiZ2V0VGFibGVOYW1lc0Zyb21XaGVyZSIsIkRCIiwiUHVyaSIsIlB1cmlXcmFwcGVyIiwiVXBzZXJ0QnVpbGRlciIsIkJhc2VNb2RlbENsYXNzIiwibG9nZ2VyIiwibW9kZWxOYW1lIiwibmFtZSIsInN1YnNldFF1ZXJpZXMiLCJsb2FkZXJRdWVyaWVzIiwiZ2V0REIiLCJ3aGljaCIsImdldFB1cmkiLCJ0cngiLCJnZXRUcmFuc2FjdGlvbkNvbnRleHQiLCJnZXRUcmFuc2FjdGlvbiIsImRiIiwiZGVzdHJveSIsImdldEluc2VydGVkSWRzIiwid2RiIiwicm93cyIsInRhYmxlTmFtZSIsInVucUtleUZpZWxkcyIsImNodW5rU2l6ZSIsInVucUtleXMiLCJ3aGVyZUluRmllbGQiLCJzZWxlY3RGaWVsZCIsImxlbmd0aCIsInJhdyIsImpvaW4iLCJtYXAiLCJyb3ciLCJmaWVsZCIsInJlc3VsdElkcyIsIml0ZW1zIiwiZGJSb3dzIiwic2VsZWN0Iiwid2hlcmVJbiIsImNvbmNhdCIsImRiUm93IiwicGFyc2VJbnQiLCJTdHJpbmciLCJpZCIsImdldFN1YnNldFF1ZXJpZXMiLCJzdWJzZXQiLCJFcnJvciIsInB1cmlXcmFwcGVyIiwicWIiLCJvblN1YnNldCIsIl9zdWJzZXQiLCJjcmVhdGVFbmhhbmNlcnMiLCJlbmhhbmNlcnMiLCJleGVjdXRlU3Vic2V0UXVlcnkiLCJwYXJhbXMiLCJxdWVyeVBhcmFtcyIsImRlYnVnIiwib3B0aW1pemVDb3VudFF1ZXJ5Iiwic29uYW11RmlsdGVyIiwibm9ybWFsaXplZEZpbHRlciIsImFwcGx5U29uYW11RmlsdGVycyIsIm51bSIsInBhZ2UiLCJ0b3RhbCIsImV4ZWN1dGVDb3VudFF1ZXJ5IiwicXVlcnlNb2RlIiwiY29tcHV0ZWRSb3dzIiwiZXhlY3V0ZUxpc3RRdWVyeSIsImVuaGFuY2VyIiwiZW5oYW5jZWRSb3dzIiwiUHJvbWlzZSIsImFsbCIsImVudGl0eSIsImdldCIsImludGVybmFsRmllbGRzIiwic3Vic2V0c0ludGVybmFsIiwib21pdEludGVybmFsRmllbGRzIiwiZmllbGRzIiwicmVzdWx0IiwiZGVsZXRlRmllbGQiLCJzcGxpdCIsImZpbHRlcnMiLCJwdXJpIiwiY29uZGl0aW9uIiwiT2JqZWN0IiwiZW50cmllcyIsInVuZGVmaW5lZCIsImZ1bGxGaWVsZCIsImdldEZ1bGxGaWVsZE5hbWUiLCJBcnJheSIsImlzQXJyYXkiLCJ3aGVyZSIsIm9wZXJhdG9yIiwidmFsdWUiLCJhcHBseU9wZXJhdG9yIiwid2hlcmVOb3RJbiIsIm1pbiIsIm1heCIsImNvbnNvbGUiLCJ3YXJuIiwib2JqIiwicGFydHMiLCJmb3JFYWNoIiwiaXRlbSIsImZpcnN0IiwicmVzdCIsIm5leHQiLCJjb3VudFB1cmkiLCJjbG9uZSIsImNsZWFyIiwiZGVmYXVsdCIsIlNxbFBhcnNlciIsInBhcnNlciIsIlBhcnNlciIsInBhcnNlZFF1ZXJ5IiwiYXN0aWZ5IiwidG9RdWVyeSIsImRhdGFiYXNlIiwiY29uZmlnIiwibGVmdEpvaW5UYWJsZXMiLCJ3aGVyZVRhYmxlcyIsInRhYmxlc1RvUmVtb3ZlIiwiZmlsdGVyIiwiaiIsImluY2x1ZGVzIiwidGFibGUiLCJjbGVhckpvaW4iLCJjb3VudFJlc3VsdCIsInJhd051bWJlciIsImxpbWl0ZWRRYiIsImxpbWl0Iiwib2Zmc2V0IiwidW5sb2FkZWRSb3dzIiwibG9hZGVycyIsInByb2Nlc3NMb2FkZXJzIiwiaHlkcmF0ZSIsInJlc29sdmVMb2FkZXIiLCJhcyIsInJlZklkIiwicmVzb2x2ZUxvYWRlclFiRm4iLCJuZXN0ZWRMb2FkZXJzIiwicmVzb2x2ZUxvYWRlclFiIiwibG9hZGVkUm93cyIsInN1YlJvd0dyb3VwcyIsInIiLCJuZXN0ZWRLZXlzIiwia2V5cyIsImtleSIsImdyb3VwcyIsImdyb3VwQnkiLCJudWxsS2V5cyIsImdyb3VwS2V5IiwiaWRGaWVsZCIsImV2ZXJ5IiwiaHlkcmF0ZWQiLCJyZWR1Y2UiLCJvYmpQYXRoIiwic2xpY2UiLCJwYXJ0IiwibnVsbEtleSIsIkJhc2VNb2RlbCJdLCJtYXBwaW5ncyI6IkFBQUEsa0dBQWtHLEdBQ2xHLFNBQVNBLFNBQVMsUUFBcUIsbUJBQW1CO0FBRTFELFNBQVNDLFNBQVMsRUFBRUMsT0FBTyxFQUFFQyxLQUFLLEVBQUVDLFFBQVEsRUFBRUMsSUFBSSxFQUFFQyxHQUFHLFFBQVEsVUFBVTtBQUN6RSxTQUEwQkMsb0JBQW9CLEVBQUVDLHFCQUFxQixRQUFRLGNBQUs7QUFDbEYsU0FBU0MsTUFBTSxRQUFRLGtCQUFTO0FBQ2hDLFNBQVNDLGFBQWEsUUFBUSw4QkFBMkI7QUFFekQsU0FBU0MsdUJBQXVCLFFBQVEsd0JBQXFCO0FBRTdELFNBQVNDLGFBQWEsRUFBRUMsc0JBQXNCLFFBQVEseUJBQXNCO0FBRzVFLFNBQVNDLEVBQUUsUUFBUSxVQUFPO0FBQzFCLFNBQVNDLElBQUksUUFBUSxZQUFTO0FBRzlCLFNBQVNDLFdBQVcsUUFBUSxvQkFBaUI7QUFDN0MsU0FBU0MsYUFBYSxRQUFRLHNCQUFtQjtBQUlqRDs7Ozs7OztDQU9DLEdBQ0QsT0FBTyxNQUFNQzs7OztJQU1RQyxPQUFlO0lBRWxDLFlBQ0UsQUFBZ0JDLFlBQW9CLElBQUksQ0FBQyxXQUFXLENBQUNDLElBQUksRUFDekQsQUFBVUMsYUFBOEIsRUFDeEMsQUFBVUMsYUFBOEIsQ0FDeEM7YUFIZ0JILFlBQUFBO2FBQ05FLGdCQUFBQTthQUNBQyxnQkFBQUE7UUFFVixJQUFJLENBQUNKLE1BQU0sR0FBR25CLFVBQVVXLHdCQUF3QixJQUFJLENBQUNTLFNBQVMsRUFBRTtJQUNsRTtJQUVBSSxNQUFNQyxLQUFlLEVBQVE7UUFDM0IsT0FBT1gsR0FBR1UsS0FBSyxDQUFDQztJQUNsQjtJQUVBQyxRQUFRRCxLQUFlLEVBQWU7UUFDcEMsc0JBQXNCO1FBQ3RCLE1BQU1FLE1BQU1iLEdBQUdjLHFCQUFxQixHQUFHQyxjQUFjLENBQUNKO1FBQ3RELElBQUlFLEtBQUs7WUFDUCxPQUFPQTtRQUNUO1FBRUEsK0JBQStCO1FBQy9CLE1BQU1HLEtBQUssSUFBSSxDQUFDTixLQUFLLENBQUNDO1FBQ3RCLE9BQU8sSUFBSVQsWUFBWWMsSUFBSSxJQUFJYjtJQUNqQztJQUVBLE1BQU1jLFVBQVU7UUFDZCxPQUFPakIsR0FBR2lCLE9BQU87SUFDbkI7SUFFQSxNQUFNQyxlQUNKQyxHQUFTLEVBQ1RDLElBQXVCLEVBQ3ZCQyxTQUFpQixFQUNqQkMsWUFBc0IsRUFDdEJDLFlBQW9CLEdBQUcsRUFDdkI7UUFDQSxJQUFJLENBQUNKLEtBQUs7WUFDUkEsTUFBTSxJQUFJLENBQUNULEtBQUssQ0FBQztRQUNuQjtRQUVBLElBQUljO1FBQ0osSUFBSUM7UUFDSixJQUFJQztRQUVKLElBQUlKLGFBQWFLLE1BQU0sR0FBRyxHQUFHO1lBQzNCRixlQUFlTixJQUFJUyxHQUFHLENBQUMsQ0FBQyxnQkFBZ0IsRUFBRU4sYUFBYU8sSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ3BFSCxjQUFjLEdBQUdELGFBQWEsVUFBVSxDQUFDO1lBQ3pDRCxVQUFVSixLQUFLVSxHQUFHLENBQUMsQ0FBQ0MsTUFBUVQsYUFBYVEsR0FBRyxDQUFDLENBQUNFLFFBQVVELEdBQUcsQ0FBQ0MsTUFBTSxFQUFFSCxJQUFJLENBQUM7UUFDM0UsT0FBTztZQUNMSixlQUFlSCxZQUFZLENBQUMsRUFBRTtZQUM5QkksY0FBY0osWUFBWSxDQUFDLEVBQUU7WUFDN0JFLFVBQVVKLEtBQUtVLEdBQUcsQ0FBQyxDQUFDQyxNQUFRQSxHQUFHLENBQUNULFlBQVksQ0FBQyxFQUFFLENBQUM7UUFDbEQ7UUFFQSxJQUFJVyxZQUFzQixFQUFFO1FBQzVCLEtBQUssTUFBTUMsU0FBUzlDLFFBQVFvQyxTQUFTRCxXQUFZO1lBQy9DLE1BQU1ZLFNBQVMsTUFBTWhCLElBQUlFLFdBQ3RCZSxNQUFNLENBQUMsTUFBTWpCLElBQUlTLEdBQUcsQ0FBQ0YsY0FDckJXLE9BQU8sQ0FBQ1osY0FBd0JTO1lBQ25DRCxZQUFZQSxVQUFVSyxNQUFNLENBQzFCSCxPQUFPTCxHQUFHLENBQUMsQ0FBQ1MsUUFBMkJDLFNBQVNDLE9BQU9GLE1BQU1HLEVBQUU7UUFFbkU7UUFFQSxPQUFPVDtJQUNUO0lBRUE7Ozs7O0dBS0MsR0FDRFUsaUJBQXVDQyxNQUFTLEVBQUU7UUFDaEQsSUFBSSxDQUFDLElBQUksQ0FBQ3BDLGFBQWEsRUFBRTtZQUN2QixNQUFNLElBQUlxQyxNQUFNO1FBQ2xCO1FBRUEsTUFBTUMsY0FBYyxJQUFJNUMsWUFBWSxJQUFJLENBQUNRLEtBQUssQ0FBQyxNQUFNLElBQUlQO1FBQ3pELE1BQU00QyxLQUFLLElBQUksQ0FBQ3ZDLGFBQWEsQ0FBQ29DLE9BQU8sR0FBR0U7UUFPeEMsT0FBTztZQUNMQyxJQUFJQTtZQUNKQyxVQUFXLENBQUNDLFVBQWdERjtRQVE5RDtJQUNGO0lBRUE7OztHQUdDLEdBQ0RHLGdCQUNFQyxTQUtDLEVBQ0Q7UUFDQSxPQUFPQTtJQUNUO0lBRUE7Ozs7Ozs7O0dBUUMsR0FDRCxNQUFNQyxtQkFVSkMsTUFXK0UsRUFDbkM7UUFDNUMsTUFBTSxFQUFFVCxNQUFNLEVBQUVHLEVBQUUsRUFBRU0sUUFBUUMsV0FBVyxFQUFFQyxRQUFRLEtBQUssRUFBRUMscUJBQXFCLEtBQUssRUFBRSxHQUFHSDtRQUV2RixJQUFJLENBQUMsSUFBSSxDQUFDNUMsYUFBYSxFQUFFO1lBQ3ZCLE1BQU0sSUFBSW9DLE1BQU07UUFDbEI7UUFFQSxtQkFBbUI7UUFDbkIsSUFBSVMsWUFBWUcsWUFBWSxFQUFFO1lBQzVCLE1BQU1DLG1CQUFtQmpFLHFCQUFxQjZELFlBQVlHLFlBQVk7WUFDdEUsSUFBSSxDQUFDRSxrQkFBa0IsQ0FBQ1osSUFBSVc7UUFDOUI7UUFFQSxNQUFNLEVBQUVFLEdBQUcsRUFBRUMsSUFBSSxFQUFFLEdBQUdQO1FBRXRCLHlDQUF5QztRQUN6QyxNQUFNUSxRQUFRLE1BQU0sSUFBSSxDQUFDQyxpQkFBaUIsQ0FBQ2hCLElBQUlPLGFBQWFDLE9BQU9DO1FBRW5FLElBQUlGLGFBQWFVLGNBQWMsU0FBUztZQUN0QyxPQUFPO2dCQUFFRjtZQUFNO1FBQ2pCO1FBRUEsYUFBYTtRQUNiLE1BQU1HLGVBQWUsTUFBTSxJQUFJLENBQUNDLGdCQUFnQixDQUFDdEIsUUFBUUcsSUFBSU8sYUFBYU0sS0FBS0MsTUFBTU47UUFFckYsY0FBYztRQUNkLE1BQU1ZLFdBQVcsQUFBQ2QsT0FBZUYsU0FBUyxFQUFFLENBQUNQLE9BQU87UUFDcEQsTUFBTXdCLGVBQWdCLE1BQU1DLFFBQVFDLEdBQUcsQ0FDckNMLGFBQWFuQyxHQUFHLENBQUMsQ0FBQ0MsTUFBUW9DLFdBQVdwQyxRQUFRQTtRQUcvQyxpQkFBaUI7UUFDakIsTUFBTXdDLFNBQVMzRSxjQUFjNEUsR0FBRyxDQUFDLElBQUksQ0FBQ2xFLFNBQVM7UUFDL0MsTUFBTW1FLGlCQUFpQkYsT0FBT0csZUFBZSxDQUFDOUIsT0FBTyxJQUFJLEVBQUU7UUFDM0QsTUFBTXhCLE9BQ0pxRCxlQUFlOUMsTUFBTSxHQUFHLElBQ3BCeUMsYUFBYXRDLEdBQUcsQ0FBQyxDQUFDQyxNQUFRLElBQUksQ0FBQzRDLGtCQUFrQixDQUFDNUMsS0FBSzBDLG1CQUN2REw7UUFFTixJQUFJZCxZQUFZVSxTQUFTLEtBQUssUUFBUTtZQUNwQyxVQUFVO1lBQ1YsT0FBTztnQkFBRTVDO1lBQUs7UUFDaEIsT0FBTztZQUNMLFFBQVE7WUFDUixPQUFPO2dCQUFFQTtnQkFBTTBDO1lBQU07UUFDdkI7SUFDRjtJQUVBOzs7R0FHQyxHQUNEYSxtQkFBcUM1QyxHQUFNLEVBQUU2QyxNQUFnQixFQUFLO1FBQ2hFLE1BQU1DLFNBQVMxRixVQUFVNEM7UUFDekIsS0FBSyxNQUFNQyxTQUFTNEMsT0FBUTtZQUMxQixJQUFJLENBQUNFLFdBQVcsQ0FBQ0QsUUFBUTdDLE1BQU0rQyxLQUFLLENBQUM7UUFDdkM7UUFDQSxPQUFPRjtJQUNUO0lBRUE7Ozs7O0dBS0MsR0FDRCxBQUFVbEIsbUJBQ1JaLEVBQXVCLEVBQ3ZCaUMsT0FBOEIsRUFDeEI7UUFDTixJQUFJLENBQUNBLFNBQVM7UUFFZCxNQUFNVCxTQUFTM0UsY0FBYzRFLEdBQUcsQ0FBQyxJQUFJLENBQUNsRSxTQUFTO1FBRS9DLHVCQUF1QjtRQUN2Qlosc0JBQXNCc0YsU0FBU1Q7UUFFL0IsZUFBZTtRQUNmLE1BQU1VLE9BQU9sQztRQUViLEtBQUssTUFBTSxDQUFDZixPQUFPa0QsVUFBVSxJQUFJQyxPQUFPQyxPQUFPLENBQUNKLFNBQVU7WUFDeEQsSUFBSUUsY0FBY0csYUFBYUgsY0FBYyxNQUFNO1lBRW5ELG1CQUFtQjtZQUNuQixNQUFNSSxZQUFZZixPQUFPZ0IsZ0JBQWdCLENBQUN2RDtZQUUxQyxnQkFBZ0I7WUFDaEIsSUFBSSxPQUFPa0QsY0FBYyxZQUFZTSxNQUFNQyxPQUFPLENBQUNQLFlBQVk7Z0JBQzdERCxLQUFLUyxLQUFLLENBQUNKLFdBQVdKO2dCQUN0QjtZQUNGO1lBRUEsU0FBUztZQUNULEtBQUssTUFBTSxDQUFDUyxVQUFVQyxNQUFNLElBQUlULE9BQU9DLE9BQU8sQ0FBQ0YsV0FBWTtnQkFDekQsSUFBSSxDQUFDVyxhQUFhLENBQUM5QyxJQUFJdUMsV0FBV0ssVUFBNEJDO1lBQ2hFO1FBQ0Y7SUFDRjtJQUVBOztHQUVDLEdBQ0QsQUFBUUMsY0FDTjlDLEVBQXVCLEVBQ3ZCZixLQUFhLEVBQ2IyRCxRQUF3QixFQUN4QkMsS0FBYyxFQUNSO1FBQ04sTUFBTVgsT0FBT2xDO1FBRWIsT0FBUTRDO1lBQ04sS0FBSztnQkFDSFYsS0FBS1MsS0FBSyxDQUFDMUQsT0FBTzREO2dCQUNsQjtZQUVGLEtBQUs7Z0JBQ0hYLEtBQUtTLEtBQUssQ0FBQzFELE9BQU8sTUFBTTREO2dCQUN4QjtZQUVGLEtBQUs7Z0JBQ0hYLEtBQUtTLEtBQUssQ0FBQzFELE9BQU8sS0FBSzREO2dCQUN2QjtZQUVGLEtBQUs7Z0JBQ0hYLEtBQUtTLEtBQUssQ0FBQzFELE9BQU8sTUFBTTREO2dCQUN4QjtZQUVGLEtBQUs7Z0JBQ0hYLEtBQUtTLEtBQUssQ0FBQzFELE9BQU8sS0FBSzREO2dCQUN2QjtZQUVGLEtBQUs7Z0JBQ0hYLEtBQUtTLEtBQUssQ0FBQzFELE9BQU8sTUFBTTREO2dCQUN4QjtZQUVGLEtBQUs7Z0JBQ0hYLEtBQUs1QyxPQUFPLENBQUNMLE9BQU80RDtnQkFDcEI7WUFFRixLQUFLO2dCQUNIWCxLQUFLYSxVQUFVLENBQUM5RCxPQUFPNEQ7Z0JBQ3ZCO1lBRUYsS0FBSztnQkFDSFgsS0FBS1MsS0FBSyxDQUFDMUQsT0FBTyxRQUFRLENBQUMsQ0FBQyxFQUFFNEQsTUFBTSxDQUFDLENBQUM7Z0JBQ3RDO1lBRUYsS0FBSztnQkFDSFgsS0FBS1MsS0FBSyxDQUFDMUQsT0FBTyxRQUFRLEdBQUc0RCxNQUFNLENBQUMsQ0FBQztnQkFDckM7WUFFRixLQUFLO2dCQUNIWCxLQUFLUyxLQUFLLENBQUMxRCxPQUFPLFFBQVEsQ0FBQyxDQUFDLEVBQUU0RCxPQUFPO2dCQUNyQztZQUVGLEtBQUs7Z0JBQ0hYLEtBQUtTLEtBQUssQ0FBQzFELE9BQU87Z0JBQ2xCO1lBRUYsS0FBSztnQkFDSGlELEtBQUtTLEtBQUssQ0FBQzFELE9BQU8sTUFBTTtnQkFDeEI7WUFFRixLQUFLO2dCQUNIaUQsS0FBS1MsS0FBSyxDQUFDMUQsT0FBTyxLQUFLNEQ7Z0JBQ3ZCO1lBRUYsS0FBSztnQkFDSFgsS0FBS1MsS0FBSyxDQUFDMUQsT0FBTyxLQUFLNEQ7Z0JBQ3ZCO1lBRUYsS0FBSztnQkFBVztvQkFDZCxJQUFJSixNQUFNQyxPQUFPLENBQUNHLFVBQVVBLE1BQU1qRSxNQUFNLEtBQUssR0FBRzt3QkFDOUMsTUFBTSxDQUFDb0UsS0FBS0MsSUFBSSxHQUFHSjt3QkFDbkJYLEtBQUtTLEtBQUssQ0FBQzFELE9BQU8sTUFBTStELEtBQUtMLEtBQUssQ0FBQzFELE9BQU8sTUFBTWdFO29CQUNsRDtvQkFDQTtnQkFDRjtZQUVBO2dCQUNFQyxRQUFRQyxJQUFJLENBQUMsQ0FBQyxzQkFBc0IsRUFBRVAsVUFBVTtRQUNwRDtJQUNGO0lBRUE7O0dBRUMsR0FDRGIsWUFBWXFCLEdBQVEsRUFBRUMsS0FBZSxFQUFRO1FBQzNDLElBQUksQ0FBQ0QsT0FBTyxPQUFPQSxRQUFRLFVBQVU7WUFDbkM7UUFDRjtRQUVBLElBQUlDLE1BQU16RSxNQUFNLEtBQUssR0FBRztZQUN0QixJQUFJNkQsTUFBTUMsT0FBTyxDQUFDVSxNQUFNO2dCQUN0QkEsSUFBSUUsT0FBTyxDQUFDLENBQUNDO29CQUNYLElBQUlBLFFBQVEsT0FBT0EsU0FBUyxVQUFVO3dCQUNwQyxPQUFPQSxJQUFJLENBQUNGLEtBQUssQ0FBQyxFQUFFLENBQUM7b0JBQ3ZCO2dCQUNGO1lBQ0YsT0FBTztnQkFDTCxPQUFPRCxHQUFHLENBQUNDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDdEI7WUFDQTtRQUNGO1FBRUEsTUFBTSxDQUFDRyxPQUFPLEdBQUdDLEtBQUssR0FBR0o7UUFDekIsTUFBTUssT0FBT04sR0FBRyxDQUFDSSxNQUFNO1FBRXZCLElBQUlmLE1BQU1DLE9BQU8sQ0FBQ2dCLE9BQU87WUFDdkJBLEtBQUszRSxHQUFHLENBQUMsQ0FBQ3dFLE9BQVMsSUFBSSxDQUFDeEIsV0FBVyxDQUFDd0IsTUFBTUU7UUFDNUMsT0FBTyxJQUFJQyxRQUFRLE9BQU9BLFNBQVMsVUFBVTtZQUMzQyxJQUFJLENBQUMzQixXQUFXLENBQUMyQixNQUFNRDtRQUN6QjtJQUNGO0lBRUE7O0dBRUMsR0FDRCxNQUFjekMsa0JBQ1poQixFQUF1QixFQUN2Qk0sTUFBaUQsRUFDakRFLEtBQWMsRUFDZEMsa0JBQTJCLEVBQ1Y7UUFDakIsSUFBSUgsT0FBT1csU0FBUyxLQUFLLFFBQVE7WUFDL0IsT0FBTztRQUNUO1FBRUEsTUFBTTBDLFlBQVkzRCxHQUFHNEQsS0FBSyxHQUFHQyxLQUFLLENBQUMsU0FBU0EsS0FBSyxDQUFDLFNBQVNBLEtBQUssQ0FBQztRQUVqRSxJQUFJcEQsb0JBQW9CO1lBQ3RCLE1BQU0sRUFBRXFELFNBQVNDLFNBQVMsRUFBRSxHQUFHLE1BQU0sTUFBTSxDQUFDO1lBQzVDLE1BQU1DLFNBQVMsSUFBSUQsVUFBVUUsTUFBTTtZQUNuQyxNQUFNQyxjQUFjRixPQUFPRyxNQUFNLENBQUNSLFVBQVVTLE9BQU8sSUFBSTtnQkFDckRDLFVBQVV6SCxPQUFPMEgsTUFBTSxDQUFDRCxRQUFRLENBQUNBLFFBQVE7WUFDM0M7WUFFQSxNQUFNRSxpQkFBaUJ4SCxjQUFjbUgsYUFBYTtnQkFBQzthQUFZO1lBQy9ELE1BQU1NLGNBQWN4SCx1QkFBdUJrSDtZQUUzQyxNQUFNTyxpQkFBaUJGLGVBQWVHLE1BQU0sQ0FBQyxDQUFDQyxJQUFNLENBQUNILFlBQVlJLFFBQVEsQ0FBQ0Q7WUFDMUVGLGVBQWVuQixPQUFPLENBQUMsQ0FBQ3VCO2dCQUN0QmxCLFVBQVVtQixTQUFTLENBQUNEO1lBQ3RCO1FBQ0Y7UUFFQSx5QkFBeUI7UUFDekIsbUNBQW1DO1FBQ25DLE1BQU1FLGNBQWtDLE1BQU1wQixVQUMzQ0UsS0FBSyxDQUFDLFVBQ054RSxNQUFNLENBQUM7WUFBRTBCLE9BQU83RCxLQUFLOEgsU0FBUyxDQUFDLENBQUMsaUJBQWlCLENBQUM7UUFBRSxHQUNwRHhCLEtBQUs7UUFFUixJQUFJaEQsT0FBTztZQUNUbUQsVUFBVW5ELEtBQUs7UUFDakI7UUFFQSxPQUFPdUUsYUFBYWhFLFNBQVM7SUFDL0I7SUFFQTs7R0FFQyxHQUNELE1BQWNJLGlCQUNadEIsTUFBUyxFQUNURyxFQUF1QixFQUN2Qk0sTUFBaUQsRUFDakRPLEdBQVcsRUFDWEMsSUFBWSxFQUNaTixLQUFjLEVBQ0U7UUFDaEIsSUFBSUYsT0FBT1csU0FBUyxLQUFLLFNBQVM7WUFDaEMsT0FBTyxFQUFFO1FBQ1g7UUFFQSxNQUFNZ0UsWUFBWSxBQUFDLENBQUE7WUFDakIsSUFBSXBFLFFBQVEsR0FBRztnQkFDYixPQUFPYjtZQUNULE9BQU87Z0JBQ0wsT0FBT0EsR0FBR2tGLEtBQUssQ0FBQ3JFLEtBQUtzRSxNQUFNLENBQUN0RSxNQUFPQyxDQUFBQSxPQUFPLENBQUE7WUFDNUM7UUFDRixDQUFBO1FBQ0EsSUFBSXNFLGVBQWdCLE1BQU1IO1FBRTFCLElBQUl6RSxPQUFPO1lBQ1RSLEdBQUdRLEtBQUs7UUFDVjtRQUVBLFFBQVE7UUFDUixNQUFNNkUsVUFBVSxBQUFDLElBQUksQ0FBQzNILGFBQWEsQUFBUSxDQUFDbUMsT0FBTztRQUNuRCxJQUFJd0YsV0FBVzVDLE1BQU1DLE9BQU8sQ0FBQzJDLFVBQVU7WUFDckNELGVBQWUsTUFBTSxJQUFJLENBQUNFLGNBQWMsQ0FBQ0YsY0FBY0MsU0FBUzdFO1FBQ2xFO1FBRUEsT0FBTyxJQUFJLENBQUMrRSxPQUFPLENBQUNIO0lBQ3RCO0lBRUE7O0dBRUMsR0FDRCxNQUFjRSxlQUFlakgsSUFBVyxFQUFFZ0gsT0FBYyxFQUFFN0UsS0FBYyxFQUFrQjtRQUN4RixLQUFLLE1BQU1nRixpQkFBaUJILFFBQVM7WUFDbkMsTUFBTSxFQUFFSSxFQUFFLEVBQUVDLEtBQUssRUFBRTFGLElBQUkyRixpQkFBaUIsRUFBRU4sU0FBU08sYUFBYSxFQUFFLEdBQUdKO1lBRXJFLE1BQU1LLGtCQUFrQkYsa0JBQ3RCLElBQUl4SSxZQUFZLElBQUksQ0FBQ1EsS0FBSyxDQUFDLE1BQU0sSUFBSVAsa0JBQ3JDaUIsS0FBS1UsR0FBRyxDQUFDLENBQUNDLE1BQVFBLEdBQUcsQ0FBQzBHLE1BQU07WUFHOUIsSUFBSWxGLE9BQU87Z0JBQ1RxRixnQkFBZ0JyRixLQUFLO1lBQ3ZCO1lBRUEsSUFBSXNGLGFBQWMsTUFBTUQ7WUFFeEIsd0JBQXdCO1lBQ3hCLElBQUlELGlCQUFpQkEsY0FBY2hILE1BQU0sR0FBRyxHQUFHO2dCQUM3Q2tILGFBQWEsTUFBTSxJQUFJLENBQUNSLGNBQWMsQ0FBQ1EsWUFBWUYsZUFBZXBGO1lBQ3BFO1lBRUEsTUFBTXVGLGVBQWV6SixNQUFNd0osWUFBWSxDQUFDOUcsTUFBUUEsSUFBSTBHLEtBQUs7WUFFekRySCxPQUFPQSxLQUFLVSxHQUFHLENBQUMsQ0FBQ0M7Z0JBQ2ZBLEdBQUcsQ0FBQ3lHLEdBQUcsR0FBRyxBQUFDTSxDQUFBQSxZQUFZLENBQUMvRyxHQUFHLENBQUMwRyxNQUFNLENBQUMsSUFBSSxFQUFFLEFBQUQsRUFBRzNHLEdBQUcsQ0FBQyxDQUFDaUgsSUFBTXhKLEtBQUt3SixHQUFHO3dCQUFDO3FCQUFRO2dCQUN2RSxPQUFPaEg7WUFDVDtRQUNGO1FBRUEsT0FBT1g7SUFDVDtJQUVBOzs7OztHQUtDLEdBQ0RrSCxRQUFtQ2xILElBQVMsRUFBTztRQUNqRCxPQUFPQSxLQUFLVSxHQUFHLENBQUMsQ0FBQ0M7WUFDZix1REFBdUQ7WUFDdkQsTUFBTWlILGFBQWE3RCxPQUFPOEQsSUFBSSxDQUFDbEgsS0FBSzBGLE1BQU0sQ0FBQyxDQUFDeUIsTUFBUUEsSUFBSXZCLFFBQVEsQ0FBQztZQUNqRSxNQUFNd0IsU0FBU2hFLE9BQU9pRSxPQUFPLENBQUNKLFlBQVksQ0FBQ0UsTUFBUUEsSUFBSW5FLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUVyRSxnRUFBZ0U7WUFDaEUsTUFBTXNFLFdBQVdsRSxPQUFPQyxPQUFPLENBQUMrRCxRQUM3QjFCLE1BQU0sQ0FBQyxDQUFDLENBQUM2QixVQUFVMUUsT0FBTztnQkFDekIsSUFBSSxDQUFDQSxVQUFVQSxPQUFPakQsTUFBTSxLQUFLLEdBQUcsT0FBTztnQkFFM0MsaUNBQWlDO2dCQUNqQyxNQUFNNEgsVUFBVSxHQUFHRCxTQUFTLElBQUksQ0FBQztnQkFDakMsSUFBSUMsV0FBV3hILEtBQUs7b0JBQ2xCLDRCQUE0QjtvQkFDNUIsT0FBT0EsR0FBRyxDQUFDd0gsUUFBUSxLQUFLO2dCQUMxQjtnQkFFQSxxQ0FBcUM7Z0JBQ3JDLE9BQU8zRSxPQUFPNEUsS0FBSyxDQUNqQixDQUFDeEgsUUFDQ0QsR0FBRyxDQUFDQyxNQUFNLEtBQUssUUFBU3dELE1BQU1DLE9BQU8sQ0FBQzFELEdBQUcsQ0FBQ0MsTUFBTSxLQUFLRCxHQUFHLENBQUNDLE1BQU0sQ0FBQ0wsTUFBTSxLQUFLO1lBRWpGLEdBQ0NHLEdBQUcsQ0FBQyxDQUFDLENBQUNvSCxJQUFJLEdBQUtBO1lBRWxCLE1BQU1PLFdBQVd0RSxPQUFPOEQsSUFBSSxDQUFDbEgsS0FBSzJILE1BQU0sQ0FBQyxDQUFDWCxHQUFHL0c7Z0JBQzNDLElBQUksQ0FBQ0EsTUFBTTJGLFFBQVEsQ0FBQyxPQUFPO29CQUN6Qiw2QkFBNkI7b0JBQzdCLElBQUluQyxNQUFNQyxPQUFPLENBQUMxRCxHQUFHLENBQUNDLE1BQU0sS0FBSzFDLFNBQVN5QyxHQUFHLENBQUNDLE1BQU0sQ0FBQyxFQUFFLEdBQUc7d0JBQ3hEK0csQ0FBQyxDQUFDL0csTUFBTSxHQUFHLElBQUksQ0FBQ3NHLE9BQU8sQ0FBQ3ZHLEdBQUcsQ0FBQ0MsTUFBTTtvQkFDcEMsT0FBTzt3QkFDTCtHLENBQUMsQ0FBQy9HLE1BQU0sR0FBR0QsR0FBRyxDQUFDQyxNQUFNO29CQUN2QjtvQkFDQSxPQUFPK0c7Z0JBQ1Q7Z0JBRUEsb0NBQW9DO2dCQUNwQyxNQUFNM0MsUUFBUXBFLE1BQU0rQyxLQUFLLENBQUM7Z0JBQzFCLE1BQU00RSxVQUNKdkQsS0FBSyxDQUFDLEVBQUUsR0FDUkEsTUFDR3dELEtBQUssQ0FBQyxHQUNOOUgsR0FBRyxDQUFDLENBQUMrSCxPQUFTLENBQUMsQ0FBQyxFQUFFQSxLQUFLLENBQUMsQ0FBQyxFQUN6QmhJLElBQUksQ0FBQztnQkFFVmtILElBQUl2SixJQUNGdUosR0FDQVksU0FDQTVILEdBQUcsQ0FBQ0MsTUFBTSxJQUFJd0QsTUFBTUMsT0FBTyxDQUFDMUQsR0FBRyxDQUFDQyxNQUFNLEtBQUsxQyxTQUFTeUMsR0FBRyxDQUFDQyxNQUFNLENBQUMsRUFBRSxJQUM3RCxJQUFJLENBQUNzRyxPQUFPLENBQUN2RyxHQUFHLENBQUNDLE1BQU0sSUFDdkJELEdBQUcsQ0FBQ0MsTUFBTTtnQkFHaEIsT0FBTytHO1lBQ1QsR0FBRyxDQUFDO1lBRUosbUJBQW1CO1lBQ25CTSxTQUFTaEQsT0FBTyxDQUFDLENBQUN5RDtnQkFDaEJMLFFBQVEsQ0FBQ0ssUUFBUSxHQUFHO1lBQ3RCO1lBRUEsT0FBT0w7UUFDVDtJQUNGO0FBQ0Y7QUF1QkEsT0FBTyxNQUFNTSxZQUFZLElBQUkzSixpQkFBaUIifQ==