sonamu 0.8.13 → 0.8.14

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 (96) hide show
  1. package/dist/api/sonamu.d.ts.map +1 -1
  2. package/dist/api/sonamu.js +2 -3
  3. package/dist/auth/auth-generator.d.ts +8 -0
  4. package/dist/auth/auth-generator.d.ts.map +1 -1
  5. package/dist/auth/auth-generator.js +33 -1
  6. package/dist/auth/better-auth-entities.d.ts.map +1 -1
  7. package/dist/auth/better-auth-entities.js +12 -2
  8. package/dist/bin/cli.js +18 -3
  9. package/dist/cone/cone-generator.js +10 -4
  10. package/dist/database/knex.d.ts.map +1 -1
  11. package/dist/database/knex.js +64 -2
  12. package/dist/database/puri.d.ts +9 -1
  13. package/dist/database/puri.d.ts.map +1 -1
  14. package/dist/database/puri.js +42 -1
  15. package/dist/database/puri.types.d.ts +2 -0
  16. package/dist/database/puri.types.d.ts.map +1 -1
  17. package/dist/database/puri.types.js +6 -2
  18. package/dist/entity/entity-manager.d.ts +149 -1
  19. package/dist/entity/entity-manager.d.ts.map +1 -1
  20. package/dist/entity/entity-manager.js +68 -4
  21. package/dist/migration/__tests__/code-generation.search-text.test.js +435 -0
  22. package/dist/migration/code-generation.d.ts.map +1 -1
  23. package/dist/migration/code-generation.js +696 -32
  24. package/dist/migration/migration-set.js +3 -1
  25. package/dist/migration/postgresql-schema-reader.d.ts +16 -2
  26. package/dist/migration/postgresql-schema-reader.d.ts.map +1 -1
  27. package/dist/migration/postgresql-schema-reader.js +281 -7
  28. package/dist/stream/sse.js +5 -3
  29. package/dist/template/__tests__/generated.template.search-text.test.js +99 -0
  30. package/dist/template/generated.template.test-d.js +24 -0
  31. package/dist/template/implementations/generated.template.d.ts.map +1 -1
  32. package/dist/template/implementations/generated.template.js +2 -2
  33. package/dist/template/implementations/init_types.template.d.ts.map +1 -1
  34. package/dist/template/implementations/init_types.template.js +11 -3
  35. package/dist/template/zod-converter.d.ts.map +1 -1
  36. package/dist/template/zod-converter.js +6 -2
  37. package/dist/testing/dev-test-routes.d.ts.map +1 -1
  38. package/dist/testing/dev-test-routes.js +5 -3
  39. package/dist/testing/fixture-generator.d.ts +13 -0
  40. package/dist/testing/fixture-generator.d.ts.map +1 -1
  41. package/dist/testing/fixture-generator.js +105 -8
  42. package/dist/testing/fixture-manager.d.ts.map +1 -1
  43. package/dist/testing/fixture-manager.js +19 -2
  44. package/dist/types/__tests__/entity-json-schema-search-text.test.js +256 -0
  45. package/dist/types/types.d.ts +494 -1
  46. package/dist/types/types.d.ts.map +1 -1
  47. package/dist/types/types.js +117 -13
  48. package/dist/ui/api.d.ts.map +1 -1
  49. package/dist/ui/api.js +14 -2
  50. package/dist/ui/cdd-service.d.ts +16 -14
  51. package/dist/ui/cdd-service.d.ts.map +1 -1
  52. package/dist/ui/cdd-service.js +145 -37
  53. package/dist/ui/cdd-types.d.ts +60 -0
  54. package/dist/ui/cdd-types.d.ts.map +1 -0
  55. package/dist/ui/cdd-types.js +3 -0
  56. package/dist/ui-web/assets/index-D4XFBV-f.css +1 -0
  57. package/dist/ui-web/assets/{index-CQ_S40bD.js → index-D_19-Pi4.js} +87 -87
  58. package/dist/ui-web/index.html +2 -2
  59. package/package.json +7 -3
  60. package/src/api/sonamu.ts +1 -2
  61. package/src/auth/auth-generator.ts +38 -0
  62. package/src/auth/better-auth-entities.ts +18 -1
  63. package/src/bin/cli.ts +15 -1
  64. package/src/cone/cone-generator.ts +9 -3
  65. package/src/database/knex.ts +62 -4
  66. package/src/database/puri.ts +71 -0
  67. package/src/database/puri.types.ts +2 -0
  68. package/src/entity/entity-manager.ts +95 -3
  69. package/src/migration/__tests__/code-generation.search-text.test.ts +390 -0
  70. package/src/migration/code-generation.ts +848 -34
  71. package/src/migration/migration-set.ts +2 -0
  72. package/src/migration/postgresql-schema-reader.ts +366 -9
  73. package/src/skills/sonamu/auth-migration.md +80 -0
  74. package/src/skills/sonamu/cdd.md +148 -28
  75. package/src/skills/sonamu/cone.md +16 -0
  76. package/src/skills/sonamu/entity-relations.md +1 -1
  77. package/src/skills/sonamu/fixture-cli.md +4 -0
  78. package/src/skills/sonamu/frontend.md +65 -0
  79. package/src/skills/sonamu/migration.md +3 -1
  80. package/src/skills/sonamu/model.md +28 -0
  81. package/src/skills/sonamu/workflow.md +12 -5
  82. package/src/stream/sse.ts +4 -2
  83. package/src/template/__tests__/generated.template.search-text.test.ts +89 -0
  84. package/src/template/generated.template.test-d.ts +46 -0
  85. package/src/template/implementations/generated.template.ts +4 -1
  86. package/src/template/implementations/init_types.template.ts +20 -5
  87. package/src/template/zod-converter.ts +5 -0
  88. package/src/testing/dev-test-routes.ts +4 -2
  89. package/src/testing/fixture-generator.ts +157 -9
  90. package/src/testing/fixture-manager.ts +15 -1
  91. package/src/types/__tests__/entity-json-schema-search-text.test.ts +179 -0
  92. package/src/types/types.ts +168 -12
  93. package/src/ui/api.ts +24 -1
  94. package/src/ui/cdd-service.ts +195 -55
  95. package/src/ui/cdd-types.ts +73 -0
  96. package/dist/ui-web/assets/index-egkMxKos.css +0 -1
@@ -1,3 +1,7 @@
1
- /** biome-ignore-all lint/suspicious/noExplicitAny: Puri.types.ts는 다양한 타입을 사용하고 있습니다. */ export { };
1
+ /** biome-ignore-all lint/suspicious/noExplicitAny: Puri.types.ts는 다양한 타입을 사용하고 있습니다. */ export const FUZZY_OPERATORS = [
2
+ "<%",
3
+ "%",
4
+ "<<%"
5
+ ];
2
6
 
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kYXRhYmFzZS9wdXJpLnR5cGVzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKiBiaW9tZS1pZ25vcmUtYWxsIGxpbnQvc3VzcGljaW91cy9ub0V4cGxpY2l0QW55OiBQdXJpLnR5cGVzLnRz64qUIOuLpOyWke2VnCDtg4DsnoXsnYQg7IKs7Jqp7ZWY6rOgIOyeiOyKteuLiOuLpC4gKi9cblxuaW1wb3J0IHR5cGUgeyBRdWVyeVJlc3VsdCB9IGZyb20gXCJwZ1wiO1xuaW1wb3J0IHR5cGUgeyBEYXRhYmFzZUZvcmVpZ25LZXlzLCBEYXRhYmFzZVNjaGVtYUV4dGVuZCB9IGZyb20gXCIuLi90eXBlcy90eXBlc1wiO1xuaW1wb3J0IHR5cGUgeyBQdXJpIH0gZnJvbSBcIi4vcHVyaVwiO1xuaW1wb3J0IHR5cGUgeyBQdXJpU3Vic2V0Rm4gfSBmcm9tIFwiLi9wdXJpLXN1YnNldC50eXBlc1wiO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8g64K067aAIO2DgOyehSDtgqQgKOuplO2DgOuNsOydtO2EsClcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG50eXBlIEZ1bGx0ZXh0S2V5ID0gXCJfX2Z1bGx0ZXh0X19cIjtcbnR5cGUgVmlydHVhbEtleSA9IFwiX192aXJ0dWFsX19cIjtcbnR5cGUgTGVmdEpvaW5lZEtleSA9IFwiX19sZWZ0Sm9pbmVkX19cIjtcbnR5cGUgSGFzRGVmYXVsdCA9IFwiX19oYXNEZWZhdWx0X19cIjtcbnR5cGUgR2VuZXJhdGVkS2V5ID0gXCJfX2dlbmVyYXRlZF9fXCI7XG50eXBlIFZlY3RvcktleSA9IFwiX192ZWN0b3JfX1wiO1xudHlwZSBWaXJ0dWFsUXVlcnlLZXkgPSBcIl9fdmlydHVhbF9xdWVyeV9fXCI7XG5cbnR5cGUgSW50ZXJuYWxUeXBlS2V5cyA9XG4gIHwgRnVsbHRleHRLZXlcbiAgfCBWaXJ0dWFsS2V5XG4gIHwgTGVmdEpvaW5lZEtleVxuICB8IEhhc0RlZmF1bHRcbiAgfCBHZW5lcmF0ZWRLZXlcbiAgfCBWZWN0b3JLZXlcbiAgfCBWaXJ0dWFsUXVlcnlLZXk7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyDtg4DsnoUg7Jyg7Yu466as7YuwXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vLyBfX3ZlY3Rvcl9fIOuplO2DgOuNsOydtO2EsOyXkOyEnCDrsqHthLAg7Lus65+8IOy2lOy2nFxudHlwZSBWZWN0b3JDb2x1bW5LZXlzPFQ+ID0gVCBleHRlbmRzIHsgW0sgaW4gVmVjdG9yS2V5XTogcmVhZG9ubHkgKGluZmVyIFYpW10gfVxuICA/IFYgJiBzdHJpbmdcbiAgOiBuZXZlcjtcblxuZXhwb3J0IHR5cGUgVmVjdG9yQ29sdW1uczxUVGFibGVzIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgYW55Pj4gPVxuICB8IHtcbiAgICAgIFtUQWxpYXMgaW4ga2V5b2YgVFRhYmxlc106IGAke1RBbGlhcyAmIHN0cmluZ30uJHtWZWN0b3JDb2x1bW5LZXlzPFRUYWJsZXNbVEFsaWFzXT59YDtcbiAgICB9W2tleW9mIFRUYWJsZXNdXG4gIHwgKElzU2luZ2xlS2V5PFRUYWJsZXM+IGV4dGVuZHMgdHJ1ZSA/IFZlY3RvckNvbHVtbktleXM8VFRhYmxlc1trZXlvZiBUVGFibGVzXT4gOiBuZXZlcik7XG5cbi8vIO2FjOydtOu4lOuqhSDtg4DsnoVcbmV4cG9ydCB0eXBlIFRhYmxlTmFtZTxUU2NoZW1hPiA9IGtleW9mIFRTY2hlbWEgJiBzdHJpbmc7XG5cbi8vIO2FjOydtOu4lOydmCBpZChQSykg7YOA7J6F7J2EIOy2lOy2nFxuZXhwb3J0IHR5cGUgSWRUeXBlPFRTY2hlbWEsIFRUYWJsZSBleHRlbmRzIGtleW9mIFRTY2hlbWE+ID0gVFNjaGVtYVtUVGFibGVdIGV4dGVuZHMgeyBpZDogaW5mZXIgSSB9XG4gID8gSVxuICA6IG51bWJlcjtcblxuLy8gdmlydHVhbCDsu6zrn7wg7YOA7J6FIOy2lOy2nFxudHlwZSBWaXJ0dWFsS2V5czxUPiA9IFQgZXh0ZW5kcyB7IFtLIGluIFZpcnR1YWxLZXldOiByZWFkb25seSAoaW5mZXIgVilbXSB9ID8gViAmIHN0cmluZyA6IG5ldmVyO1xuXG4vLyB2aXJ0dWFsIOy7rOufvCDsoJzqsbBcbnR5cGUgU3RyaXBWaXJ0dWFsPFQ+ID0gT21pdDxULCBWaXJ0dWFsS2V5czxUPj47XG5cbi8vIExFRlQgSk9JTiDrp4jsu6QgLSBudWxsYWJsZSBGS+uhnCDsobDsnbjrkJwg7YWM7J2067iUXG4vLyDsnbQg66eI7Luk64qUIG51bGxhYmxlIEZLICsgbGVmdEpvaW4g7KGw7ZWp7JeQ7ISc66eMIOu2meyKteuLiOuLpC5cbi8vIGpvaW4gKyBGSyBudWxsYWJsZSAtPiDslYgg67aZ7J2MXG4vLyBqb2luICsgRksgbm9uLW51bGxhYmxlIC0+IOyViCDrtpnsnYxcbi8vIGxlZnRKb2luICsgRksgbm9uLW51bGxhYmxlIC0+IOyViCDrtpnsnYxcbi8vIGxlZnRKb2luICsgRksgbnVsbGFibGUgLT4g67aZ7J2MIVxuZXhwb3J0IHR5cGUgTGVmdEpvaW5lZE1hcmtlciA9IHsgW0sgaW4gTGVmdEpvaW5lZEtleV06IHRydWUgfTtcblxuLy8g66mU7YOA642w7J207YSwIO2VhOuTnCDsoJzsmbjtlZwg7Iuk7KCcIOyXlO2LsO2LsCDsu6zrn7xcbmV4cG9ydCB0eXBlIENvbHVtbktleXM8VD4gPSBFeGNsdWRlPGtleW9mIFN0cmlwVmlydHVhbDxUPiwgSW50ZXJuYWxUeXBlS2V5cz4gJiBzdHJpbmc7XG5cbi8vIHZpcnR1YWwg7Lus65+8IOygnOqxsCDtm4QgX19mdWxsdGV4dF9fIOycoOyngFxuZXhwb3J0IHR5cGUgUHVyaVRhYmxlPFQ+ID0gT21pdDxTdHJpcFZpcnR1YWw8VD4sIFZpcnR1YWxLZXk+O1xuXG4vLyDrgrTrtoAg7YOA7J6FIO2CpCDsoJzsmbggKOyLpOygnCDsu6zrn7zrp4wg64Ko6rmAKVxuZXhwb3J0IHR5cGUgT21pdEludGVybmFsVHlwZUtleXM8VD4gPSBPbWl0PFQsIEludGVybmFsVHlwZUtleXM+O1xuXG4vLyBUVGFibGVz7J2YIOuqqOuToCDthYzsnbTruJTsl5DshJwg7IKs7JqpIOqwgOuKpe2VnCDsu6zrn7wg6rK966GcXG5leHBvcnQgdHlwZSBBdmFpbGFibGVDb2x1bW5zPFRUYWJsZXMgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+PiA9XG4gIHwge1xuICAgICAgW1RBbGlhcyBpbiBrZXlvZiBUVGFibGVzXTogYCR7VEFsaWFzICYgc3RyaW5nfS4ke0NvbHVtbktleXM8VFRhYmxlc1tUQWxpYXNdPn1gO1xuICAgIH1ba2V5b2YgVFRhYmxlc11cbiAgfCAoSXNTaW5nbGVLZXk8VFRhYmxlcz4gZXh0ZW5kcyB0cnVlXG4gICAgICA/IENvbHVtbktleXM8VFRhYmxlc1trZXlvZiBUVGFibGVzXT4gLy8g64uo7J28IO2FjOydtOu4lOydtOuptCDsu6zrn7zrqoXrp4zrj4Qg7ZeI7JqpXG4gICAgICA6IG5ldmVyKTtcblxuLy8g7Iir7J6QIO2DgOyehSDsu6zrn7zrp4wg7LaU7Lac7ZWY64qUIOycoO2LuOumrO2LsCDtg4DsnoVcbnR5cGUgTnVtZXJpY0NvbHVtbktleXM8VD4gPSB7XG4gIFtLIGluIGtleW9mIFRdOiBUW0tdIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50IHwgbnVsbCB8IHVuZGVmaW5lZCA/IEsgOiBuZXZlcjtcbn1ba2V5b2YgVF0gJlxuICBzdHJpbmc7XG5cbi8vIFRUYWJsZXPsnZgg66qo65OgIO2FjOydtOu4lOyXkOyEnCDsiKvsnpAg7YOA7J6FIOy7rOufvOunjCDstpTstpxcbmV4cG9ydCB0eXBlIE51bWVyaWNDb2x1bW5zPFRUYWJsZXMgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+PiA9XG4gIHwge1xuICAgICAgW1RBbGlhcyBpbiBrZXlvZiBUVGFibGVzXTogYCR7VEFsaWFzICYgc3RyaW5nfS4ke051bWVyaWNDb2x1bW5LZXlzPFRUYWJsZXNbVEFsaWFzXT59YDtcbiAgICB9W2tleW9mIFRUYWJsZXNdXG4gIHwgKElzU2luZ2xlS2V5PFRUYWJsZXM+IGV4dGVuZHMgdHJ1ZVxuICAgICAgPyBOdW1lcmljQ29sdW1uS2V5czxUVGFibGVzW2tleW9mIFRUYWJsZXNdPiAvLyDri6jsnbwg7YWM7J2067iU7J2066m0IOy7rOufvOuqheunjOuPhCDtl4jsmqlcbiAgICAgIDogbmV2ZXIpO1xuXG4vLyBHcm91cCBCeSwgT3JkZXIgQnksIEhhdmluZyDrk7Hsl5DshJwg7ISg7YOdIOqwgOuKpe2VnCDsu6zrn7xcbmV4cG9ydCB0eXBlIFJlc3VsdEF2YWlsYWJsZUNvbHVtbnM8VFRhYmxlcyBleHRlbmRzIFJlY29yZDxzdHJpbmcsIGFueT4sIFRSZXN1bHQgPSBhbnk+ID1cbiAgfCBBdmFpbGFibGVDb2x1bW5zPFRUYWJsZXM+XG4gIHwgYCR7a2V5b2YgVFJlc3VsdCAmIHN0cmluZ31gO1xuXG4vLyBTZWxlY3Qg6rCSIO2DgOyehSDtmZXsnqUgKOuLqOydvCDsu6zrn7wg65iQ64qUIFNRTCDtkZztmITsi50pXG5leHBvcnQgdHlwZSBTZWxlY3RWYWx1ZTxUVGFibGVzIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgYW55Pj4gPVxuICB8IEF2YWlsYWJsZUNvbHVtbnM8VFRhYmxlcz5cbiAgfCBTcWxFeHByZXNzaW9uPFwic3RyaW5nXCIgfCBcIm51bWJlclwiIHwgXCJib29sZWFuXCIgfCBcImRhdGVcIiB8IFwic3RyaW5nW11cIj47XG5cbi8vIOykkeyyqSBTZWxlY3Qg6rCd7LK0IO2DgOyehSAo7J6s6reA7KCBKVxuLy8g7JiIOiB7IHBhcmVudDogeyBpZDogXCJwYXJlbnQuaWRcIiwgbmFtZTogXCJwYXJlbnQubmFtZVwiIH0gfVxuZXhwb3J0IHR5cGUgTmVzdGVkU2VsZWN0T2JqZWN0PFRUYWJsZXMgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+PiA9IHtcbiAgW2tleTogc3RyaW5nXTogU2VsZWN0VmFsdWU8VFRhYmxlcz4gfCBOZXN0ZWRTZWxlY3RPYmplY3Q8VFRhYmxlcz47XG59O1xuXG4vLyBTZWxlY3Qg6rCd7LK0IO2DgOyehSAoZmxhdCDrmJDripQg7KSR7LKpIO2XiOyaqSlcbmV4cG9ydCB0eXBlIFNlbGVjdE9iamVjdDxUVGFibGVzIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgYW55Pj4gPSBOZXN0ZWRTZWxlY3RPYmplY3Q8VFRhYmxlcz47XG5cbi8vIOqwkuydtCDspJHssqkg6rCd7LK07J247KeAIO2MkOuzhO2VmOuKlCDtl6ztjbwg7YOA7J6FXG50eXBlIElzTmVzdGVkT2JqZWN0PFQ+ID0gVCBleHRlbmRzIHN0cmluZ1xuICA/IGZhbHNlXG4gIDogVCBleHRlbmRzIFNxbEV4cHJlc3Npb248YW55PlxuICAgID8gZmFsc2VcbiAgICA6IFQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+XG4gICAgICA/IHRydWVcbiAgICAgIDogZmFsc2U7XG5cbi8vIOy7rOufvOydtCBudWxsYWJsZeyduOyngCDtmZXsnbggKOyKpO2CpOuniOyXkOyEnCDsp4HsoJEg7LaU7LacKVxuLy8g7JiIOiBJc051bGxhYmxlQ29sdW1uPFRUYWJsZXMsIFwiZW1wbG95ZWVzLmRlcGFydG1lbnRfaWRcIj4g4oaSIGRlcGFydG1lbnRfaWTqsIAgbnVtYmVyIHwgbnVsbOydtOuptCB0cnVlXG5leHBvcnQgdHlwZSBJc051bGxhYmxlQ29sdW1uPFxuICBUVGFibGVzLFxuICBQYXRoIGV4dGVuZHMgc3RyaW5nLFxuPiA9IFBhdGggZXh0ZW5kcyBgJHtpbmZlciBUQWxpYXN9LiR7aW5mZXIgVENvbHVtbn1gXG4gID8gVEFsaWFzIGV4dGVuZHMga2V5b2YgVFRhYmxlc1xuICAgID8gVENvbHVtbiBleHRlbmRzIGtleW9mIFRUYWJsZXNbVEFsaWFzXVxuICAgICAgPyBudWxsIGV4dGVuZHMgVFRhYmxlc1tUQWxpYXNdW1RDb2x1bW5dXG4gICAgICAgID8gdHJ1ZVxuICAgICAgICA6IGZhbHNlXG4gICAgICA6IGZhbHNlXG4gICAgOiBmYWxzZVxuICA6IGZhbHNlO1xuXG4vLyBGSyBudWxsYWJsZSDsl6zrtoDsl5Ag65Sw66W4IOuniOy7pCDtg4DsnoUg6rKw7KCVXG4vLyBudWxsYWJsZSBGS+uhnCBsZWZ0Sm9pbiDihpIgTGVmdEpvaW5lZE1hcmtlciAo6rCd7LK0IOyekOyytOqwgCBudWxs7J28IOyImCDsnojsnYwpXG4vLyBub24tbnVsbCBGS+uhnCBsZWZ0Sm9pbiDihpIg66eI7LukIOyXhuydjCAo67aA66qo6rCAIOyeiOycvOuptCDsnpDsi53rj4Qg67CY65Oc7IucIOyeiOydjClcbmV4cG9ydCB0eXBlIExlZnRKb2luTWFya2VyRm9yPFRUYWJsZXMsIFBhdGggZXh0ZW5kcyBzdHJpbmc+ID0gSXNOdWxsYWJsZUNvbHVtbjxcbiAgVFRhYmxlcyxcbiAgUGF0aFxuPiBleHRlbmRzIHRydWVcbiAgPyBMZWZ0Sm9pbmVkTWFya2VyXG4gIDoge307XG5cbi8vIOyjvOyWtOynhCDthYzsnbTruJTsnbQgRksgbnVsbGFibGXroZwgbGVmdEpvaW4g65CcIO2FjOydtOu4lOyduOyngCDtmZXsnbjtlanri4jri6QuXG4vLyDsgqzsi6QgTGVmdEpvaW5NYXJrZXLqsIAg67aZ7JeI64qU7KeAIO2ZleyduO2VmOuKlOqyjCDri6TsnoXri4jri6QuXG4vLyDsnbQg66eI7Luk64qUIEZLIG51bGxhYmxlICsgbGVmdEpvaW4g7KGw7ZWp7JeQ7ISc66eMIOu2meyKteuLiOuLpC5cbnR5cGUgSXNOdWxsYWJsZUpvaW5lZFRhYmxlPFRUYWJsZXMsIFRhYmxlS2V5PiA9IFRhYmxlS2V5IGV4dGVuZHMga2V5b2YgVFRhYmxlc1xuICA/IFRUYWJsZXNbVGFibGVLZXldIGV4dGVuZHMgTGVmdEpvaW5lZE1hcmtlclxuICAgID8gdHJ1ZSAvLyBMZWZ0Sm9pbmVkTWFya2Vy6rCAIOyeiOycvOuptCBudWxsYWJsZVxuICAgIDogZmFsc2VcbiAgOiBmYWxzZTtcblxuLy8g6rK966GcIOyhsO2VqSDtl6ztjbwgKHByZWZpeOqwgCDsl4bsnLzrqbQga2V566eMLCDsnojsnLzrqbQgcHJlZml4X19rZXkpXG50eXBlIEpvaW5QYXRoPFByZWZpeCBleHRlbmRzIHN0cmluZywgS2V5IGV4dGVuZHMgc3RyaW5nPiA9IFByZWZpeCBleHRlbmRzIFwiXCJcbiAgPyBLZXlcbiAgOiBgJHtQcmVmaXh9X18ke0tleX1gO1xuXG4vLyBTZWxlY3Qg6rKw6rO8IO2DgOyeheydhCDstpTroaDtlbTso7zripQg7Lmc6rWs7J6F64uI64ukLlxuLy8g7J20IO2DgOyeheydgCBQdXJp7J2YIHNlbGVjdCwgYXBwZW5kU2VsZWN07JeQ7IScIFRSZXN1bHTroZwg7IKs7Jqp65Cp64uI64ukLlxuLy9cbi8vIFNjaGVtYeulvCDsnb3slrTshJwgRkvsnZggbnVsbGFiaWxpdHnsl5Ag65Sw6528IGpvaW7rkJwg6rCd7LK07J2YIO2DgOyeheydhCDstpTroaDtlbTso7zripQg6riw64ql7J20IOyeiOyKteuLiOuLpC5cbi8vIOydtOqyjCDrrLTsiqgg7IaM66as64OQPyBGS+qwgCBudWxsYWJsZeyduOuNsCBsZWZ0Sm9pbuuQmOyXiOuLpOuptCwg7ZW064u5IOqwneyytOuKlCBudWxsYWJsZSDtlbTslbwg7ZWo7J2EIO2DgOyehSDstpTroaDsnLzroZwg67CY7JiB7ZW07KSA64uk64qUIOqyg+yeheuLiOuLpC5cbi8vIOuwmOuptCBGS+qwgCBub24tbnVsbGFibGXsnbTqsbDrgpgg6re464OlIGpvaW7snLzroZwg7J207Ja07KGM64uk66m0IO2VtOuLuSDqsJ3ssrTripQgbm9uLW51bGxhYmxl7ZWgIOqygeuLiOuLpC5cbi8vIOusvOuhoCDqsJ3ssrQg64K067aA7J2YIG51bGxhYmlsaXR564qUIOuYkCDrs4TqsJzroZwg7LaU66Gg65Cp64uI64ukLlxuLy9cbi8vIOyVhOuemOyXkOuPhCBQYXJzZVNlbGVjdE9iamVjdFdpdGhQYXRo66W8IOu5hOuhr+2VtCBFeHRyYWN0Q29sdW1uVHlwZSwgRXh0cmFjdENvbHVtblR5cGVSYXcg65Ox7J2YIO2DgOyeheydtCDsnojsirXri4jri6QuXG4vLyDsnbTrk6TsnZgg7Jet7ZWg7J2AIOuLpOydjOqzvCDqsJnsirXri4jri6Q6XG4vLyAtIFBhcnNlKjog6rCd7LK0IOugiOuyqOyXkOyEnCDspJHssqkg6rWs7KGw66W8IOyInO2ajO2VmOupsCDqsJ3ssrTsl5AgfCBudWxs7J2EIOu2meydvOyngCDqsrDsoJXtlanri4jri6QuXG4vLyAtIEV4dHJhY3QqOiDtlYTrk5wg66CI67Ko7JeQ7IScIFwidGFibGUuY29sdW1uXCIg6rK966Gc66Gc67aA7YSwIOyLpOygnCDtg4DsnoXsnYQg7LaU7Lac7ZWp64uI64ukLlxuLy9cbi8vIOyYiOyLnDpcbi8vIC5zZWxlY3Qoe1xuLy8gICBpZDogXCJ1c2Vycy5pZFwiLCAgICAgICAgICAgLy8g4oaQIEV4dHJhY3RDb2x1bW5UeXBl7J2YIOqysOqzvOuKlCBudW1iZXLsnoXri4jri6QuXG4vLyAgIGRlcGFydG1lbnQ6IHsgICAgICAgICAgICAgLy8g4oaQIFBhcnNlU2VsZWN0T2JqZWN0SW5uZXLsl5Ag7J2Y7ZW0IG51bGxhYmxlIOqwneyytOuhnCDstpTroaDrkKnri4jri6QuXG4vLyAgICAgaWQ6IFwiZGVwYXJ0bWVudC5pZFwiLCAgICAvLyDihpAgRXh0cmFjdENvbHVtblR5cGVSYXfsnZgg6rKw6rO864qUIG51bWJlcuyeheuLiOuLpC5cbi8vICAgICBuYW1lOiBcImRlcGFydG1lbnQubmFtZVwiIC8vIOKGkCBFeHRyYWN0Q29sdW1uVHlwZVJhd+ydmCDqsrDqs7zripQgc3RyaW5n7J6F64uI64ukLlxuLy8gICB9XG4vLyB9KVxuZXhwb3J0IHR5cGUgUGFyc2VTZWxlY3RPYmplY3Q8XG4gIFRUYWJsZXMgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxuICBUU2VsZWN0IGV4dGVuZHMgU2VsZWN0T2JqZWN0PFRUYWJsZXM+LFxuPiA9IFBhcnNlU2VsZWN0T2JqZWN0V2l0aFBhdGg8VFRhYmxlcywgVFNlbGVjdCwgXCJcIj47XG5cbi8vIOqyveuhnOulvCDstpTsoIHtlZjrqbTshJwgU2VsZWN0IOqysOqzvCDtg4DsnoXsnYQg7LaU66Gg7ZWp64uI64ukLlxudHlwZSBQYXJzZVNlbGVjdE9iamVjdFdpdGhQYXRoPFxuICBUVGFibGVzIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgYW55PixcbiAgVFNlbGVjdCBleHRlbmRzIFNlbGVjdE9iamVjdDxUVGFibGVzPixcbiAgUHJlZml4IGV4dGVuZHMgc3RyaW5nLFxuPiA9IEV4cGFuZDx7XG4gIFtLIGluIGtleW9mIFRTZWxlY3RdOiBUU2VsZWN0W0tdIGV4dGVuZHMgU3FsRXhwcmVzc2lvbjxpbmZlciBSPlxuICAgID8gUiBleHRlbmRzIFwic3RyaW5nXCJcbiAgICAgID8gc3RyaW5nXG4gICAgICA6IFIgZXh0ZW5kcyBcIm51bWJlclwiXG4gICAgICAgID8gbnVtYmVyXG4gICAgICAgIDogUiBleHRlbmRzIFwiYm9vbGVhblwiXG4gICAgICAgICAgPyBib29sZWFuXG4gICAgICAgICAgOiBSIGV4dGVuZHMgXCJkYXRlXCJcbiAgICAgICAgICAgID8gRGF0ZVxuICAgICAgICAgICAgOiBSIGV4dGVuZHMgXCJzdHJpbmdbXVwiXG4gICAgICAgICAgICAgID8gc3RyaW5nW11cbiAgICAgICAgICAgICAgOiBuZXZlclxuICAgIDogSXNOZXN0ZWRPYmplY3Q8VFNlbGVjdFtLXT4gZXh0ZW5kcyB0cnVlXG4gICAgICA/IFRTZWxlY3RbS10gZXh0ZW5kcyBOZXN0ZWRTZWxlY3RPYmplY3Q8VFRhYmxlcz5cbiAgICAgICAgPyBJc051bGxhYmxlSm9pbmVkVGFibGU8VFRhYmxlcywgSm9pblBhdGg8UHJlZml4LCBLICYgc3RyaW5nPj4gZXh0ZW5kcyB0cnVlIC8vIOyjvOyWtOynhCDthYzsnbTruJTsnbQgRksgbnVsbGFibGXsl5AgbGVmdEpvaW7rkJjsl4jripTsp4Ag7Jes67aA7JeQIOuUsOudvCBzZWxlY3Qg6rKw6rO8IOqwneyytOydmCDtg4DsnoXsnbQg64us65287KeR64uI64ukLlxuICAgICAgICAgID8gRXhwYW5kPFBhcnNlU2VsZWN0T2JqZWN0SW5uZXI8VFRhYmxlcywgVFNlbGVjdFtLXSwgSm9pblBhdGg8UHJlZml4LCBLICYgc3RyaW5nPj4+IHwgbnVsbCAvLyDrp4zslb0g7ZW064u57ZWc64uk66m0IO2VtOuLuSDqsJ3ssrQg7J6Q7LK064qUIG51bGxhYmxlIO2VmOupsCxcbiAgICAgICAgICA6IEV4cGFuZDxQYXJzZVNlbGVjdE9iamVjdElubmVyPFRUYWJsZXMsIFRTZWxlY3RbS10sIEpvaW5QYXRoPFByZWZpeCwgSyAmIHN0cmluZz4+PiAvLyDqt7jroIfsp4Ag7JWK64uk66m0IG5vbi1udWxsYWJsZSDtlanri4jri6QuXG4gICAgICAgIDogbmV2ZXJcbiAgICAgIDogRXh0cmFjdENvbHVtblR5cGU8VFRhYmxlcywgVFNlbGVjdFtLXSAmIHN0cmluZz47XG59PjtcblxuLy8g7KSR7LKpIOqwneyytCDrgrTrtoDsmqkgLSBsZWZ0Sm9pbiBudWxsYWJsZeydhCDqsJ3ssrQg66CI67Ko7JeQ7IScIOydtOuvuCDsspjrpqztlojsnLzrr4DroZwg7ZWE65Oc64qUIOybkOuzuCDtg4DsnoXsnYQg7IKs7Jqp7ZWp64uI64ukLlxuLy8gUGFyc2VTZWxlY3RPYmplY3RXaXRoUGF0aOyZgCDqsbDsnZgg64+Z7J287ZWY64KYLCDrp4jsp4Drp4nsl5AgRXh0cmFjdENvbHVtblR5cGUg64yA7IugIEV4dHJhY3RDb2x1bW5UeXBlUmF366W8IOyCrOyaqe2VmOyXrFxuLy8g7ZWE65OcIOugiOuyqOyXkOyEnCDspJHrs7XsnLzroZwgfCBudWxs7J20IOy2lOqwgOuQmOuKlCDqsoPsnYQg67Cp7KeA7ZWp64uI64ukLlxudHlwZSBQYXJzZVNlbGVjdE9iamVjdElubmVyPFxuICBUVGFibGVzIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgYW55PixcbiAgVFNlbGVjdCBleHRlbmRzIFNlbGVjdE9iamVjdDxUVGFibGVzPixcbiAgUHJlZml4IGV4dGVuZHMgc3RyaW5nLFxuPiA9IEV4cGFuZDx7XG4gIFtLIGluIGtleW9mIFRTZWxlY3RdOiBUU2VsZWN0W0tdIGV4dGVuZHMgU3FsRXhwcmVzc2lvbjxpbmZlciBSPlxuICAgID8gUiBleHRlbmRzIFwic3RyaW5nXCJcbiAgICAgID8gc3RyaW5nXG4gICAgICA6IFIgZXh0ZW5kcyBcIm51bWJlclwiXG4gICAgICAgID8gbnVtYmVyXG4gICAgICAgIDogUiBleHRlbmRzIFwiYm9vbGVhblwiXG4gICAgICAgICAgPyBib29sZWFuXG4gICAgICAgICAgOiBSIGV4dGVuZHMgXCJkYXRlXCJcbiAgICAgICAgICAgID8gRGF0ZVxuICAgICAgICAgICAgOiBSIGV4dGVuZHMgXCJzdHJpbmdbXVwiXG4gICAgICAgICAgICAgID8gc3RyaW5nW11cbiAgICAgICAgICAgICAgOiBuZXZlclxuICAgIDogSXNOZXN0ZWRPYmplY3Q8VFNlbGVjdFtLXT4gZXh0ZW5kcyB0cnVlXG4gICAgICA/IFRTZWxlY3RbS10gZXh0ZW5kcyBOZXN0ZWRTZWxlY3RPYmplY3Q8VFRhYmxlcz5cbiAgICAgICAgPyBJc051bGxhYmxlSm9pbmVkVGFibGU8VFRhYmxlcywgSm9pblBhdGg8UHJlZml4LCBLICYgc3RyaW5nPj4gZXh0ZW5kcyB0cnVlXG4gICAgICAgICAgPyBFeHBhbmQ8UGFyc2VTZWxlY3RPYmplY3RJbm5lcjxUVGFibGVzLCBUU2VsZWN0W0tdLCBKb2luUGF0aDxQcmVmaXgsIEsgJiBzdHJpbmc+Pj4gfCBudWxsXG4gICAgICAgICAgOiBFeHBhbmQ8UGFyc2VTZWxlY3RPYmplY3RJbm5lcjxUVGFibGVzLCBUU2VsZWN0W0tdLCBKb2luUGF0aDxQcmVmaXgsIEsgJiBzdHJpbmc+Pj5cbiAgICAgICAgOiBuZXZlclxuICAgICAgOiBFeHRyYWN0Q29sdW1uVHlwZVJhdzxUVGFibGVzLCBUU2VsZWN0W0tdICYgc3RyaW5nPjsgLy8gbGVmdEpvaW4gbnVsbGFibGUg66y07IucXG59PjtcblxuLy8g7Lus65+8IOqyveuhnOyXkOyEnCDtg4DsnoXsnYQg7LaU7Lac7ZWp64uI64ukLiBMZWZ0Sm9pbmVkTWFya2Vy6rCAIOyeiOycvOuptCB8IG51bGzsnYQg7LaU6rCA7ZWp64uI64ukLlxuLy8g7LWc7IOB7JyEIHNlbGVjdCDtlYTrk5zsl5DshJwg7IKs7Jqp65Cp64uI64ukLlxuZXhwb3J0IHR5cGUgRXh0cmFjdENvbHVtblR5cGU8XG4gIFRUYWJsZXMgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxuICBQYXRoIGV4dGVuZHMgc3RyaW5nLFxuPiA9IFBhdGggZXh0ZW5kcyBgJHtpbmZlciBUQWxpYXN9LiR7aW5mZXIgVENvbHVtbn1gXG4gID8gVEFsaWFzIGV4dGVuZHMga2V5b2YgVFRhYmxlc1xuICAgID8gVENvbHVtbiBleHRlbmRzIGtleW9mIFRUYWJsZXNbVEFsaWFzXVxuICAgICAgPyBUVGFibGVzW1RBbGlhc10gZXh0ZW5kcyBMZWZ0Sm9pbmVkTWFya2VyXG4gICAgICAgID8gVFRhYmxlc1tUQWxpYXNdW1RDb2x1bW5dIHwgbnVsbCAvLyBMRUZUIEpPSU4gKG51bGxhYmxlIEZLKSDihpIgbnVsbGFibGVcbiAgICAgICAgOiBUVGFibGVzW1RBbGlhc11bVENvbHVtbl0gLy8gSU5ORVIgSk9JTiDrmJDripQgbm9uLW51bGwgRksgbGVmdEpvaW4g4oaSIG5vbi1udWxsYWJsZVxuICAgICAgOiBuZXZlclxuICAgIDogbmV2ZXJcbiAgOiBJc1NpbmdsZUtleTxUVGFibGVzPiBleHRlbmRzIHRydWVcbiAgICA/IFBhdGggZXh0ZW5kcyBrZXlvZiBUVGFibGVzW2tleW9mIFRUYWJsZXNdXG4gICAgICA/IFRUYWJsZXNba2V5b2YgVFRhYmxlc11bUGF0aF1cbiAgICAgIDogbmV2ZXJcbiAgICA6IG5ldmVyO1xuXG4vLyDsu6zrn7wg6rK966Gc7JeQ7IScIO2DgOyeheydhCDstpTstpztlanri4jri6QuIGxlZnRKb2luIOyXrOu2gOyZgCDqtIDqs4Tsl4bsnbQg7JuQ67O4IO2DgOyeheydhCDrsJjtmZjtlanri4jri6QuXG4vLyDspJHssqkg6rCd7LK0IOuCtOu2gCDtlYTrk5zsl5DshJwg7IKs7Jqp65Cp64uI64ukLiAo6rCd7LK0IOugiOuyqOyXkOyEnCDsnbTrr7ggfCBudWxsIOyymOumrOqwgCDsmYTro4zrkJjsl4jsnLzrr4DroZwpXG50eXBlIEV4dHJhY3RDb2x1bW5UeXBlUmF3PFxuICBUVGFibGVzIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgYW55PixcbiAgUGF0aCBleHRlbmRzIHN0cmluZyxcbj4gPSBQYXRoIGV4dGVuZHMgYCR7aW5mZXIgVEFsaWFzfS4ke2luZmVyIFRDb2x1bW59YFxuICA/IFRBbGlhcyBleHRlbmRzIGtleW9mIFRUYWJsZXNcbiAgICA/IFRDb2x1bW4gZXh0ZW5kcyBrZXlvZiBUVGFibGVzW1RBbGlhc11cbiAgICAgID8gVFRhYmxlc1tUQWxpYXNdW1RDb2x1bW5dIC8vIGxlZnRKb2luIOyXrOu2gOyZgCDqtIDqs4Tsl4bsnbQg7JuQ67O4IO2DgOyehVxuICAgICAgOiBuZXZlclxuICAgIDogbmV2ZXJcbiAgOiBJc1NpbmdsZUtleTxUVGFibGVzPiBleHRlbmRzIHRydWVcbiAgICA/IFBhdGggZXh0ZW5kcyBrZXlvZiBUVGFibGVzW2tleW9mIFRUYWJsZXNdXG4gICAgICA/IFRUYWJsZXNba2V5b2YgVFRhYmxlc11bUGF0aF1cbiAgICAgIDogbmV2ZXJcbiAgICA6IG5ldmVyO1xuXG4vLyBXaGVyZSDsobDqsbQg6rCd7LK0IO2DgOyehVxuLy8g7JiIOiB7IFwidS5pZFwiOiAxLCBcInUuc3RhdHVzXCI6IFwiYWN0aXZlXCIgfVxuZXhwb3J0IHR5cGUgV2hlcmVDb25kaXRpb248VFRhYmxlcyBleHRlbmRzIFJlY29yZDxzdHJpbmcsIGFueT4+ID0ge1xuICBba2V5IGluIEF2YWlsYWJsZUNvbHVtbnM8VFRhYmxlcz5dPzogRXh0cmFjdENvbHVtblR5cGU8VFRhYmxlcywga2V5ICYgc3RyaW5nPjtcbn07XG5cbi8vIEZ1bGx0ZXh0IGluZGV4IOy7rOufvCDstpTstpwg7YOA7J6FXG5leHBvcnQgdHlwZSBGdWxsdGV4dENvbHVtbnM8VFRhYmxlcyBleHRlbmRzIFJlY29yZDxzdHJpbmcsIGFueT4+ID0ge1xuICBbVEFsaWFzIGluIGtleW9mIFRUYWJsZXNdOiBUVGFibGVzW1RBbGlhc10gZXh0ZW5kcyB7XG4gICAgW0sgaW4gRnVsbHRleHRLZXldOiByZWFkb25seSAoaW5mZXIgQ29sKVtdO1xuICB9XG4gICAgPyBDb2wgZXh0ZW5kcyBzdHJpbmdcbiAgICAgID8gYCR7VEFsaWFzICYgc3RyaW5nfS4ke0NvbH1gXG4gICAgICA6IG5ldmVyXG4gICAgOiBuZXZlcjtcbn1ba2V5b2YgVFRhYmxlc107XG5cbi8vIOu5hOq1kCDsl7DsgrDsnpBcbmV4cG9ydCB0eXBlIENvbXBhcmlzb25PcGVyYXRvciA9IFwiPVwiIHwgXCI+XCIgfCBcIj49XCIgfCBcIjxcIiB8IFwiPD1cIiB8IFwiPD5cIiB8IFwiIT1cIjtcbi8vIOyhsOqxtCDsl7DsgrDsnpA6IOu5hOq1kCDsl7DsgrDsnpAgKyDtjKjthLQg66ek7LmtIOyXsOyCsOyekFxuZXhwb3J0IHR5cGUgV2hlcmVPcGVyYXRvciA9IENvbXBhcmlzb25PcGVyYXRvciB8IFwibGlrZVwiIHwgXCJub3QgbGlrZVwiIHwgXCJpbGlrZVwiIHwgXCJub3QgaWxpa2VcIjtcblxuLy8gU1FMIEV4cHJlc3Npb24g7YOA7J6FIOygleydmFxuZXhwb3J0IHR5cGUgU3FsRXhwcmVzc2lvbjxUIGV4dGVuZHMgXCJzdHJpbmdcIiB8IFwibnVtYmVyXCIgfCBcImJvb2xlYW5cIiB8IFwiZGF0ZVwiIHwgXCJzdHJpbmdbXVwiPiA9IHtcbiAgX3R5cGU6IFwic3FsX2V4cHJlc3Npb25cIjsgLy8g65iQ64qUIFwiY29tcHV0ZWRfdmFsdWVcIlxuICBfcmV0dXJuOiBUO1xuICBfc3FsOiBzdHJpbmc7XG59O1xuXG4vLyDqsrDqs7wg7YOA7J6FIOqwgOuPheyEseydhCDsnITtlZwg7YOA7J6FIO2ZleyepVxuZXhwb3J0IHR5cGUgRXhwYW5kPFQ+ID0gVCBleHRlbmRzIGFueVtdXG4gID8geyBbSyBpbiBrZXlvZiBUWzBdXTogVFswXVtLXSB9W10gLy8g67Cw7Je07J2066m0IOyyqyDrsojsp7gg7JqU7IaM66W8IEV4cGFuZO2VmOqzoCDrsLDsl7TroZwg6rCQ7IyIXG4gIDogVCBleHRlbmRzIG9iamVjdFxuICAgID8geyBbSyBpbiBrZXlvZiBUXTogVFtLXSB9XG4gICAgOiBUO1xuXG50eXBlIElzU2luZ2xlS2V5PFRUYWJsZXMgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+PiA9IGtleW9mIFRUYWJsZXMgZXh0ZW5kcyBpbmZlciBLXG4gID8gSyBleHRlbmRzIGtleW9mIFRUYWJsZXNcbiAgICA/IGtleW9mIFRUYWJsZXMgZXh0ZW5kcyBLIC8vIOyXreuwqe2WpSDssrTtgazroZwg64uo7J28IO2CpCDtmZXsnbhcbiAgICAgID8gdHJ1ZVxuICAgICAgOiBmYWxzZVxuICAgIDogZmFsc2VcbiAgOiBmYWxzZTtcblxuZXhwb3J0IHR5cGUgU2luZ2xlVGFibGVWYWx1ZTxUVGFibGVzIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgYW55Pj4gPVxuICBJc1NpbmdsZUtleTxUVGFibGVzPiBleHRlbmRzIHRydWUgPyBUVGFibGVzW2tleW9mIFRUYWJsZXNdIDogbmV2ZXI7XG5cbi8vIF9faGFzRGVmYXVsdF9f7JeQIO2PrO2VqOuQnCDtgqTrk6TsnYQgUHVyaVRhYmxlPFQ+7J2YIO2CpOuhnCDsoJztlZxcbnR5cGUgSGFzRGVmYXVsdEtleXM8VD4gPSBUIGV4dGVuZHMgeyBfX2hhc0RlZmF1bHRfXzogcmVhZG9ubHkgKGluZmVyIEspW10gfVxuICA/IEV4dHJhY3Q8Sywga2V5b2YgUHVyaVRhYmxlPFQ+PlxuICA6IG5ldmVyO1xuXG4vLyBfX2dlbmVyYXRlZF9f7JeQIO2PrO2VqOuQnCDtgqTrk6QgKElOU0VSVCDsi5wg7KCc7Jm47ZW07JW8IO2VqClcbnR5cGUgR2VuZXJhdGVkS2V5czxUPiA9IFQgZXh0ZW5kcyB7IF9fZ2VuZXJhdGVkX186IHJlYWRvbmx5IChpbmZlciBLKVtdIH1cbiAgPyBFeHRyYWN0PEssIGtleW9mIFB1cmlUYWJsZTxUPj5cbiAgOiBuZXZlcjtcblxuLy8gSW5zZXJ0IO2DgOyehTog66mU7YOA642w7J207YSwIOygnOqxsCDtm4QsIF9faGFzRGVmYXVsdF9fIOy7rOufvOuTpOunjCBvcHRpb25hbOuhnCDsspjrpqwsIF9fZ2VuZXJhdGVkX18g7Lus65+87J2AIOyZhOyghO2eiCDsoJzsmbhcbmV4cG9ydCB0eXBlIEluc2VydERhdGE8VD4gPSBPbWl0PFxuICBQdXJpVGFibGU8VD4sXG4gIEludGVybmFsVHlwZUtleXMgfCBIYXNEZWZhdWx0S2V5czxUPiB8IEdlbmVyYXRlZEtleXM8VD5cbj4gJiB7XG4gIFtLIGluIEhhc0RlZmF1bHRLZXlzPFQ+XT86IFB1cmlUYWJsZTxUPltLXTtcbn07XG5cbi8vIEluc2VydCBSZXN1bHQg7YOA7J6FXG5leHBvcnQgdHlwZSBJbnNlcnRSZXN1bHQgPSBQaWNrPFF1ZXJ5UmVzdWx0PGFueT4sIFwiY29tbWFuZFwiIHwgXCJyb3dDb3VudFwiIHwgXCJyb3dzXCIgfCBcIm9pZFwiPjtcblxuLy8gU3Vic2V0UXVlcnnrpbwg7JyE7ZWcIO2DgOyehSDsnKDti7jrpqzti7BcbmV4cG9ydCB0eXBlIEV4dHJhY3RUVGFibGVzPFQgZXh0ZW5kcyBQdXJpPGFueSwgYW55LCBhbnk+PiA9XG4gIFQgZXh0ZW5kcyBQdXJpPGFueSwgaW5mZXIgVFRhYmxlcywgYW55PiA/IFRUYWJsZXMgOiBuZXZlcjtcbmV4cG9ydCB0eXBlIFVuaW9uRXh0cmFjdGVkVFRhYmxlczxcbiAgU3Vic2V0S2V5IGV4dGVuZHMgc3RyaW5nLFxuICBTdWJzZXRRdWVyaWVzIGV4dGVuZHMgUmVjb3JkPFN1YnNldEtleSwgUHVyaVN1YnNldEZuPixcbj4gPSB7XG4gIFtLIGluIFN1YnNldEtleV06IEV4dHJhY3RUVGFibGVzPFJldHVyblR5cGU8U3Vic2V0UXVlcmllc1tLXT4+O1xufVtTdWJzZXRLZXldO1xuXG4vLyBPTiBDT05GTElDVCDrjIDsg4Eg7YOA7J6FXG4vLyAtIOuLqOydvCDsu6zrn7w6IFwiZW1haWxcIlxuLy8gLSDrs7XsiJgg7Lus65+8OiBbXCJ1c2VyX2lkXCIsIFwicHJvZHVjdF9pZFwiXVxuZXhwb3J0IHR5cGUgT25Db25mbGljdFRhcmdldCA9IHN0cmluZyB8IHN0cmluZ1tdO1xuXG4vLyBPTiBDT05GTElDVCDslaHshZgg7YOA7J6FXG4vLyAtIFwibm90aGluZ1wiOiBETyBOT1RISU5HXG4vLyAtIHsgdXBkYXRlOiBbLi4uXSB9OiBETyBVUERBVEVcbmV4cG9ydCB0eXBlIE9uQ29uZmxpY3RBY3Rpb248VFRhYmxlcyBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHVua25vd24+PiA9XG4gIHwgXCJub3RoaW5nXCJcbiAgfCB7XG4gICAgICB1cGRhdGU6XG4gICAgICAgIHwgQXZhaWxhYmxlQ29sdW1uczxUVGFibGVzPltdIC8vIOuwsOyXtCDtmJXtg5wgLSBbXCJuYW1lXCIsIFwiZW1haWxcIl1cbiAgICAgICAgfCBXaGVyZUNvbmRpdGlvbjxUVGFibGVzPjsgLy8g6rCd7LK0IO2Yle2DnCAtIHsgbmFtZTogXCJKb2huXCIsIGNvdW50OiBQdXJpLnJhd051bWJlciguLi4pIH1cbiAgICB9O1xuXG4vLyBGSyDsu6zrn7zrqoUg7LaU7LacIOycoO2LuOumrO2LsCDtg4DsnoUgLSBEYXRhYmFzZUZvcmVpZ25LZXlzIO2ZnOyaqVxuZXhwb3J0IHR5cGUgRm9yZWlnbktleUNvbHVtbnM8VFRhYmxlIGV4dGVuZHMgVGFibGVOYW1lPERhdGFiYXNlU2NoZW1hRXh0ZW5kPj4gPVxuICBUVGFibGUgZXh0ZW5kcyBrZXlvZiBEYXRhYmFzZUZvcmVpZ25LZXlzID8gRGF0YWJhc2VGb3JlaWduS2V5c1tUVGFibGVdIDogbmV2ZXI7XG5cbi8vIFVuaW9u7J2EIEludGVyc2VjdGlvbuycvOuhnCDrs4DtmZjtlZjripQg7Jyg7Yu466as7YuwXG50eXBlIFVuaW9uVG9JbnRlcnNlY3Rpb248VT4gPSAoVSBleHRlbmRzIGFueSA/IChrOiBVKSA9PiB2b2lkIDogbmV2ZXIpIGV4dGVuZHMgKGs6IGluZmVyIEkpID0+IHZvaWRcbiAgPyBJXG4gIDogbmV2ZXI7XG5cbi8vIFNlbGVjdEFsbCDsi5wg66qo65OgIOyhsOyduOuQnCDthYzsnbTruJTsnZgg7Lus65+8IO2PrO2VqFxuZXhwb3J0IHR5cGUgU2VsZWN0QWxsUmVzdWx0PFRUYWJsZXMgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+PiA9IFVuaW9uVG9JbnRlcnNlY3Rpb248XG4gIHtcbiAgICBbSyBpbiBrZXlvZiBUVGFibGVzXTogVFRhYmxlc1tLXSBleHRlbmRzIGluZmVyIFRcbiAgICAgID8gVCBleHRlbmRzIExlZnRKb2luZWRNYXJrZXJcbiAgICAgICAgPyBQYXJ0aWFsPE9taXRJbnRlcm5hbFR5cGVLZXlzPFQ+PiAvLyBMRUZUIEpPSU7snYAgbnVsbGFibGUsIOuplO2DgOuNsOydtO2EsCDsoJzqsbBcbiAgICAgICAgOiBPbWl0SW50ZXJuYWxUeXBlS2V5czxUPiAvLyBJTk5FUiBKT0lO7J2AIG5vbi1udWxsYWJsZSwg66mU7YOA642w7J207YSwIOygnOqxsFxuICAgICAgOiBuZXZlcjtcbiAgfVtrZXlvZiBUVGFibGVzXVxuPjtcblxuLy8gRlRTIO2DgOyehVxudHlwZSBUc1F1ZXJ5UGFyc2VyID0gXCJ0b190c3F1ZXJ5XCIgfCBcInBsYWludG9fdHNxdWVyeVwiIHwgXCJwaHJhc2V0b190c3F1ZXJ5XCIgfCBcIndlYnNlYXJjaF90b190c3F1ZXJ5XCI7XG5leHBvcnQgdHlwZSBUc1F1ZXJ5Q29uZmlnID0gXCJzaW1wbGVcIiB8IFwiZW5nbGlzaFwiO1xuZXhwb3J0IHR5cGUgVHNRdWVyeU9wdGlvbnMgPSB7XG4gIHBhcnNlcj86IFRzUXVlcnlQYXJzZXI7XG4gIGNvbmZpZz86IFRzUXVlcnlDb25maWc7XG59O1xuXG5leHBvcnQgdHlwZSBUc0hpZ2hsaWdodE9wdGlvbnMgPSB7XG4gIC8qKiDsv7zrpqwg67OA7ZmYIO2VqOyImCAo6riw67O46rCSOiBcIndlYnNlYXJjaF90b190c3F1ZXJ5XCIpICovXG4gIHBhcnNlcj86IFRzUXVlcnlQYXJzZXI7XG4gIC8qKiDthY3siqTtirgg6rKA7IOJIOyEpOyglSAo6riw67O46rCSOiBcInNpbXBsZVwiKSAqL1xuICBjb25maWc/OiBUc1F1ZXJ5Q29uZmlnO1xuICAvKiog7LWc64yAIOuLqOyWtCDsiJggKOq4sOuzuOqwkjogMzUpICovXG4gIG1heFdvcmRzPzogbnVtYmVyO1xuICAvKiog7LWc7IaMIOuLqOyWtCDsiJggKOq4sOuzuOqwkjogMTUpICovXG4gIG1pbldvcmRzPzogbnVtYmVyO1xuICAvKiog7Zek65Oc65287J24IOyLnOyekS/rgZ3sl5DshJwg7KCc6rGw7ZWgIOynp+ydgCDri6jslrQg6ri47J20ICjquLDrs7jqsJI6IDMpICovXG4gIHNob3J0V29yZD86IG51bWJlcjtcbiAgLyoqIHRydWXrqbQg7KCE7LK0IOusuOyEnOulvCDtl6Trk5zrnbzsnbjsnLzroZwg7IKs7JqpICjquLDrs7jqsJI6IGZhbHNlKSAqL1xuICBoaWdobGlnaHRBbGw/OiBib29sZWFuO1xuICAvKiog7ZGc7Iuc7ZWgIOy1nOuMgCDthY3siqTtirgg7KGw6rCBIOyImCAo6riw67O46rCSOiAwLCDsobDqsIEg66+47IKs7JqpKSAqL1xuICBtYXhGcmFnbWVudHM/OiBudW1iZXI7XG4gIC8qKiDsv7zrpqwg64uo7Ja0IOyLnOyekSDqtazrtoTsnpAgKOq4sOuzuOqwkjogXCI8Yj5cIikgKi9cbiAgc3RhcnRTZWw/OiBzdHJpbmc7XG4gIC8qKiDsv7zrpqwg64uo7Ja0IOuBnSDqtazrtoTsnpAgKOq4sOuzuOqwkjogXCI8L2I+XCIpICovXG4gIHN0b3BTZWw/OiBzdHJpbmc7XG4gIC8qKiDsobDqsIEg6rWs67aE7J6QICjquLDrs7jqsJI6IFwiIC4uLiBcIikgKi9cbiAgZnJhZ21lbnREZWxpbWl0ZXI/OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBUc1JhbmtPcHRpb25zID0ge1xuICBwYXJzZXI/OiBUc1F1ZXJ5UGFyc2VyO1xuICBjb25maWc/OiBUc1F1ZXJ5Q29uZmlnO1xuICAvKiog6rCA7KSR7LmYIOuwsOyXtCBbRCwgQywgQiwgQV0gKOq4sOuzuOqwkjogWzAuMSwgMC4yLCAwLjQsIDEuMF0pICovXG4gIHdlaWdodHM/OiBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXTtcbiAgLyoqXG4gICAqIOygleq3nO2ZlCDsmLXshZhcbiAgICogMDog66y47IScIOq4uOydtCDrrLTsi5wgKOq4sOuzuOqwkilcbiAgICogMTogMSArIGxvZyjrrLjshJwg6ri47J20KeuhnCDrgpjriJRcbiAgICogMjog66y47IScIOq4uOydtOuhnCDrgpjriJRcbiAgICogNDog7Y+J6regIOyhsO2ZlCDqsbDrpqzroZwg64KY64iUICh0c19yYW5rX2Nk66eMKVxuICAgKiA4OiDqs6DsnKAg64uo7Ja0IOyImOuhnCDrgpjriJRcbiAgICogMTY6IDEgKyBsb2co6rOg7JygIOuLqOyWtCDsiJgp66GcIOuCmOuIlFxuICAgKiAzMjogcmFuay8ocmFuaysxKSAtPiAwfjEg7IKs7J207J2YIOqwkuycvOuhnCDsiqTsvIDsnbzrp4FcbiAgICpcbiAgICog67mE7Yq466eI7Iqk7YGs66W8IOyCrOyaqe2VmOyXrCDsmLXshZjsnYQg7KGw7ZWp7ZWgIOyImCDsnojsnYxcbiAgICog7JiIOiA4IHwgMzIgLT4g6rOg7JygIOuLqOyWtCDsiJjroZwg64KY64iE6rOgIDB+MSDsiqTsvIDsnbzrp4FcbiAgICovXG4gIG5vcm1hbGl6YXRpb24/OiBudW1iZXI7XG59O1xuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHNGQUFzRixHQTJhdEYsV0FtQkUifQ==
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kYXRhYmFzZS9wdXJpLnR5cGVzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKiBiaW9tZS1pZ25vcmUtYWxsIGxpbnQvc3VzcGljaW91cy9ub0V4cGxpY2l0QW55OiBQdXJpLnR5cGVzLnRz64qUIOuLpOyWke2VnCDtg4DsnoXsnYQg7IKs7Jqp7ZWY6rOgIOyeiOyKteuLiOuLpC4gKi9cblxuaW1wb3J0IHR5cGUgeyBRdWVyeVJlc3VsdCB9IGZyb20gXCJwZ1wiO1xuaW1wb3J0IHR5cGUgeyBEYXRhYmFzZUZvcmVpZ25LZXlzLCBEYXRhYmFzZVNjaGVtYUV4dGVuZCB9IGZyb20gXCIuLi90eXBlcy90eXBlc1wiO1xuaW1wb3J0IHR5cGUgeyBQdXJpIH0gZnJvbSBcIi4vcHVyaVwiO1xuaW1wb3J0IHR5cGUgeyBQdXJpU3Vic2V0Rm4gfSBmcm9tIFwiLi9wdXJpLXN1YnNldC50eXBlc1wiO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8g64K067aAIO2DgOyehSDtgqQgKOuplO2DgOuNsOydtO2EsClcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG50eXBlIEZ1bGx0ZXh0S2V5ID0gXCJfX2Z1bGx0ZXh0X19cIjtcbnR5cGUgVmlydHVhbEtleSA9IFwiX192aXJ0dWFsX19cIjtcbnR5cGUgTGVmdEpvaW5lZEtleSA9IFwiX19sZWZ0Sm9pbmVkX19cIjtcbnR5cGUgSGFzRGVmYXVsdCA9IFwiX19oYXNEZWZhdWx0X19cIjtcbnR5cGUgR2VuZXJhdGVkS2V5ID0gXCJfX2dlbmVyYXRlZF9fXCI7XG50eXBlIFZlY3RvcktleSA9IFwiX192ZWN0b3JfX1wiO1xudHlwZSBWaXJ0dWFsUXVlcnlLZXkgPSBcIl9fdmlydHVhbF9xdWVyeV9fXCI7XG5cbnR5cGUgSW50ZXJuYWxUeXBlS2V5cyA9XG4gIHwgRnVsbHRleHRLZXlcbiAgfCBWaXJ0dWFsS2V5XG4gIHwgTGVmdEpvaW5lZEtleVxuICB8IEhhc0RlZmF1bHRcbiAgfCBHZW5lcmF0ZWRLZXlcbiAgfCBWZWN0b3JLZXlcbiAgfCBWaXJ0dWFsUXVlcnlLZXk7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyDtg4DsnoUg7Jyg7Yu466as7YuwXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vLyBfX3ZlY3Rvcl9fIOuplO2DgOuNsOydtO2EsOyXkOyEnCDrsqHthLAg7Lus65+8IOy2lOy2nFxudHlwZSBWZWN0b3JDb2x1bW5LZXlzPFQ+ID0gVCBleHRlbmRzIHsgW0sgaW4gVmVjdG9yS2V5XTogcmVhZG9ubHkgKGluZmVyIFYpW10gfVxuICA/IFYgJiBzdHJpbmdcbiAgOiBuZXZlcjtcblxuZXhwb3J0IHR5cGUgVmVjdG9yQ29sdW1uczxUVGFibGVzIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgYW55Pj4gPVxuICB8IHtcbiAgICAgIFtUQWxpYXMgaW4ga2V5b2YgVFRhYmxlc106IGAke1RBbGlhcyAmIHN0cmluZ30uJHtWZWN0b3JDb2x1bW5LZXlzPFRUYWJsZXNbVEFsaWFzXT59YDtcbiAgICB9W2tleW9mIFRUYWJsZXNdXG4gIHwgKElzU2luZ2xlS2V5PFRUYWJsZXM+IGV4dGVuZHMgdHJ1ZSA/IFZlY3RvckNvbHVtbktleXM8VFRhYmxlc1trZXlvZiBUVGFibGVzXT4gOiBuZXZlcik7XG5cbi8vIO2FjOydtOu4lOuqhSDtg4DsnoVcbmV4cG9ydCB0eXBlIFRhYmxlTmFtZTxUU2NoZW1hPiA9IGtleW9mIFRTY2hlbWEgJiBzdHJpbmc7XG5cbi8vIO2FjOydtOu4lOydmCBpZChQSykg7YOA7J6F7J2EIOy2lOy2nFxuZXhwb3J0IHR5cGUgSWRUeXBlPFRTY2hlbWEsIFRUYWJsZSBleHRlbmRzIGtleW9mIFRTY2hlbWE+ID0gVFNjaGVtYVtUVGFibGVdIGV4dGVuZHMgeyBpZDogaW5mZXIgSSB9XG4gID8gSVxuICA6IG51bWJlcjtcblxuLy8gdmlydHVhbCDsu6zrn7wg7YOA7J6FIOy2lOy2nFxudHlwZSBWaXJ0dWFsS2V5czxUPiA9IFQgZXh0ZW5kcyB7IFtLIGluIFZpcnR1YWxLZXldOiByZWFkb25seSAoaW5mZXIgVilbXSB9ID8gViAmIHN0cmluZyA6IG5ldmVyO1xuXG4vLyB2aXJ0dWFsIOy7rOufvCDsoJzqsbBcbnR5cGUgU3RyaXBWaXJ0dWFsPFQ+ID0gT21pdDxULCBWaXJ0dWFsS2V5czxUPj47XG5cbi8vIExFRlQgSk9JTiDrp4jsu6QgLSBudWxsYWJsZSBGS+uhnCDsobDsnbjrkJwg7YWM7J2067iUXG4vLyDsnbQg66eI7Luk64qUIG51bGxhYmxlIEZLICsgbGVmdEpvaW4g7KGw7ZWp7JeQ7ISc66eMIOu2meyKteuLiOuLpC5cbi8vIGpvaW4gKyBGSyBudWxsYWJsZSAtPiDslYgg67aZ7J2MXG4vLyBqb2luICsgRksgbm9uLW51bGxhYmxlIC0+IOyViCDrtpnsnYxcbi8vIGxlZnRKb2luICsgRksgbm9uLW51bGxhYmxlIC0+IOyViCDrtpnsnYxcbi8vIGxlZnRKb2luICsgRksgbnVsbGFibGUgLT4g67aZ7J2MIVxuZXhwb3J0IHR5cGUgTGVmdEpvaW5lZE1hcmtlciA9IHsgW0sgaW4gTGVmdEpvaW5lZEtleV06IHRydWUgfTtcblxuLy8g66mU7YOA642w7J207YSwIO2VhOuTnCDsoJzsmbjtlZwg7Iuk7KCcIOyXlO2LsO2LsCDsu6zrn7xcbmV4cG9ydCB0eXBlIENvbHVtbktleXM8VD4gPSBFeGNsdWRlPGtleW9mIFN0cmlwVmlydHVhbDxUPiwgSW50ZXJuYWxUeXBlS2V5cz4gJiBzdHJpbmc7XG5cbi8vIHZpcnR1YWwg7Lus65+8IOygnOqxsCDtm4QgX19mdWxsdGV4dF9fIOycoOyngFxuZXhwb3J0IHR5cGUgUHVyaVRhYmxlPFQ+ID0gT21pdDxTdHJpcFZpcnR1YWw8VD4sIFZpcnR1YWxLZXk+O1xuXG4vLyDrgrTrtoAg7YOA7J6FIO2CpCDsoJzsmbggKOyLpOygnCDsu6zrn7zrp4wg64Ko6rmAKVxuZXhwb3J0IHR5cGUgT21pdEludGVybmFsVHlwZUtleXM8VD4gPSBPbWl0PFQsIEludGVybmFsVHlwZUtleXM+O1xuXG4vLyBUVGFibGVz7J2YIOuqqOuToCDthYzsnbTruJTsl5DshJwg7IKs7JqpIOqwgOuKpe2VnCDsu6zrn7wg6rK966GcXG5leHBvcnQgdHlwZSBBdmFpbGFibGVDb2x1bW5zPFRUYWJsZXMgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+PiA9XG4gIHwge1xuICAgICAgW1RBbGlhcyBpbiBrZXlvZiBUVGFibGVzXTogYCR7VEFsaWFzICYgc3RyaW5nfS4ke0NvbHVtbktleXM8VFRhYmxlc1tUQWxpYXNdPn1gO1xuICAgIH1ba2V5b2YgVFRhYmxlc11cbiAgfCAoSXNTaW5nbGVLZXk8VFRhYmxlcz4gZXh0ZW5kcyB0cnVlXG4gICAgICA/IENvbHVtbktleXM8VFRhYmxlc1trZXlvZiBUVGFibGVzXT4gLy8g64uo7J28IO2FjOydtOu4lOydtOuptCDsu6zrn7zrqoXrp4zrj4Qg7ZeI7JqpXG4gICAgICA6IG5ldmVyKTtcblxuLy8g7Iir7J6QIO2DgOyehSDsu6zrn7zrp4wg7LaU7Lac7ZWY64qUIOycoO2LuOumrO2LsCDtg4DsnoVcbnR5cGUgTnVtZXJpY0NvbHVtbktleXM8VD4gPSB7XG4gIFtLIGluIGtleW9mIFRdOiBUW0tdIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50IHwgbnVsbCB8IHVuZGVmaW5lZCA/IEsgOiBuZXZlcjtcbn1ba2V5b2YgVF0gJlxuICBzdHJpbmc7XG5cbi8vIFRUYWJsZXPsnZgg66qo65OgIO2FjOydtOu4lOyXkOyEnCDsiKvsnpAg7YOA7J6FIOy7rOufvOunjCDstpTstpxcbmV4cG9ydCB0eXBlIE51bWVyaWNDb2x1bW5zPFRUYWJsZXMgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+PiA9XG4gIHwge1xuICAgICAgW1RBbGlhcyBpbiBrZXlvZiBUVGFibGVzXTogYCR7VEFsaWFzICYgc3RyaW5nfS4ke051bWVyaWNDb2x1bW5LZXlzPFRUYWJsZXNbVEFsaWFzXT59YDtcbiAgICB9W2tleW9mIFRUYWJsZXNdXG4gIHwgKElzU2luZ2xlS2V5PFRUYWJsZXM+IGV4dGVuZHMgdHJ1ZVxuICAgICAgPyBOdW1lcmljQ29sdW1uS2V5czxUVGFibGVzW2tleW9mIFRUYWJsZXNdPiAvLyDri6jsnbwg7YWM7J2067iU7J2066m0IOy7rOufvOuqheunjOuPhCDtl4jsmqlcbiAgICAgIDogbmV2ZXIpO1xuXG4vLyBHcm91cCBCeSwgT3JkZXIgQnksIEhhdmluZyDrk7Hsl5DshJwg7ISg7YOdIOqwgOuKpe2VnCDsu6zrn7xcbmV4cG9ydCB0eXBlIFJlc3VsdEF2YWlsYWJsZUNvbHVtbnM8VFRhYmxlcyBleHRlbmRzIFJlY29yZDxzdHJpbmcsIGFueT4sIFRSZXN1bHQgPSBhbnk+ID1cbiAgfCBBdmFpbGFibGVDb2x1bW5zPFRUYWJsZXM+XG4gIHwgYCR7a2V5b2YgVFJlc3VsdCAmIHN0cmluZ31gO1xuXG4vLyBTZWxlY3Qg6rCSIO2DgOyehSDtmZXsnqUgKOuLqOydvCDsu6zrn7wg65iQ64qUIFNRTCDtkZztmITsi50pXG5leHBvcnQgdHlwZSBTZWxlY3RWYWx1ZTxUVGFibGVzIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgYW55Pj4gPVxuICB8IEF2YWlsYWJsZUNvbHVtbnM8VFRhYmxlcz5cbiAgfCBTcWxFeHByZXNzaW9uPFwic3RyaW5nXCIgfCBcIm51bWJlclwiIHwgXCJib29sZWFuXCIgfCBcImRhdGVcIiB8IFwic3RyaW5nW11cIj47XG5cbi8vIOykkeyyqSBTZWxlY3Qg6rCd7LK0IO2DgOyehSAo7J6s6reA7KCBKVxuLy8g7JiIOiB7IHBhcmVudDogeyBpZDogXCJwYXJlbnQuaWRcIiwgbmFtZTogXCJwYXJlbnQubmFtZVwiIH0gfVxuZXhwb3J0IHR5cGUgTmVzdGVkU2VsZWN0T2JqZWN0PFRUYWJsZXMgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+PiA9IHtcbiAgW2tleTogc3RyaW5nXTogU2VsZWN0VmFsdWU8VFRhYmxlcz4gfCBOZXN0ZWRTZWxlY3RPYmplY3Q8VFRhYmxlcz47XG59O1xuXG4vLyBTZWxlY3Qg6rCd7LK0IO2DgOyehSAoZmxhdCDrmJDripQg7KSR7LKpIO2XiOyaqSlcbmV4cG9ydCB0eXBlIFNlbGVjdE9iamVjdDxUVGFibGVzIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgYW55Pj4gPSBOZXN0ZWRTZWxlY3RPYmplY3Q8VFRhYmxlcz47XG5cbi8vIOqwkuydtCDspJHssqkg6rCd7LK07J247KeAIO2MkOuzhO2VmOuKlCDtl6ztjbwg7YOA7J6FXG50eXBlIElzTmVzdGVkT2JqZWN0PFQ+ID0gVCBleHRlbmRzIHN0cmluZ1xuICA/IGZhbHNlXG4gIDogVCBleHRlbmRzIFNxbEV4cHJlc3Npb248YW55PlxuICAgID8gZmFsc2VcbiAgICA6IFQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+XG4gICAgICA/IHRydWVcbiAgICAgIDogZmFsc2U7XG5cbi8vIOy7rOufvOydtCBudWxsYWJsZeyduOyngCDtmZXsnbggKOyKpO2CpOuniOyXkOyEnCDsp4HsoJEg7LaU7LacKVxuLy8g7JiIOiBJc051bGxhYmxlQ29sdW1uPFRUYWJsZXMsIFwiZW1wbG95ZWVzLmRlcGFydG1lbnRfaWRcIj4g4oaSIGRlcGFydG1lbnRfaWTqsIAgbnVtYmVyIHwgbnVsbOydtOuptCB0cnVlXG5leHBvcnQgdHlwZSBJc051bGxhYmxlQ29sdW1uPFxuICBUVGFibGVzLFxuICBQYXRoIGV4dGVuZHMgc3RyaW5nLFxuPiA9IFBhdGggZXh0ZW5kcyBgJHtpbmZlciBUQWxpYXN9LiR7aW5mZXIgVENvbHVtbn1gXG4gID8gVEFsaWFzIGV4dGVuZHMga2V5b2YgVFRhYmxlc1xuICAgID8gVENvbHVtbiBleHRlbmRzIGtleW9mIFRUYWJsZXNbVEFsaWFzXVxuICAgICAgPyBudWxsIGV4dGVuZHMgVFRhYmxlc1tUQWxpYXNdW1RDb2x1bW5dXG4gICAgICAgID8gdHJ1ZVxuICAgICAgICA6IGZhbHNlXG4gICAgICA6IGZhbHNlXG4gICAgOiBmYWxzZVxuICA6IGZhbHNlO1xuXG4vLyBGSyBudWxsYWJsZSDsl6zrtoDsl5Ag65Sw66W4IOuniOy7pCDtg4DsnoUg6rKw7KCVXG4vLyBudWxsYWJsZSBGS+uhnCBsZWZ0Sm9pbiDihpIgTGVmdEpvaW5lZE1hcmtlciAo6rCd7LK0IOyekOyytOqwgCBudWxs7J28IOyImCDsnojsnYwpXG4vLyBub24tbnVsbCBGS+uhnCBsZWZ0Sm9pbiDihpIg66eI7LukIOyXhuydjCAo67aA66qo6rCAIOyeiOycvOuptCDsnpDsi53rj4Qg67CY65Oc7IucIOyeiOydjClcbmV4cG9ydCB0eXBlIExlZnRKb2luTWFya2VyRm9yPFRUYWJsZXMsIFBhdGggZXh0ZW5kcyBzdHJpbmc+ID0gSXNOdWxsYWJsZUNvbHVtbjxcbiAgVFRhYmxlcyxcbiAgUGF0aFxuPiBleHRlbmRzIHRydWVcbiAgPyBMZWZ0Sm9pbmVkTWFya2VyXG4gIDoge307XG5cbi8vIOyjvOyWtOynhCDthYzsnbTruJTsnbQgRksgbnVsbGFibGXroZwgbGVmdEpvaW4g65CcIO2FjOydtOu4lOyduOyngCDtmZXsnbjtlanri4jri6QuXG4vLyDsgqzsi6QgTGVmdEpvaW5NYXJrZXLqsIAg67aZ7JeI64qU7KeAIO2ZleyduO2VmOuKlOqyjCDri6TsnoXri4jri6QuXG4vLyDsnbQg66eI7Luk64qUIEZLIG51bGxhYmxlICsgbGVmdEpvaW4g7KGw7ZWp7JeQ7ISc66eMIOu2meyKteuLiOuLpC5cbnR5cGUgSXNOdWxsYWJsZUpvaW5lZFRhYmxlPFRUYWJsZXMsIFRhYmxlS2V5PiA9IFRhYmxlS2V5IGV4dGVuZHMga2V5b2YgVFRhYmxlc1xuICA/IFRUYWJsZXNbVGFibGVLZXldIGV4dGVuZHMgTGVmdEpvaW5lZE1hcmtlclxuICAgID8gdHJ1ZSAvLyBMZWZ0Sm9pbmVkTWFya2Vy6rCAIOyeiOycvOuptCBudWxsYWJsZVxuICAgIDogZmFsc2VcbiAgOiBmYWxzZTtcblxuLy8g6rK966GcIOyhsO2VqSDtl6ztjbwgKHByZWZpeOqwgCDsl4bsnLzrqbQga2V566eMLCDsnojsnLzrqbQgcHJlZml4X19rZXkpXG50eXBlIEpvaW5QYXRoPFByZWZpeCBleHRlbmRzIHN0cmluZywgS2V5IGV4dGVuZHMgc3RyaW5nPiA9IFByZWZpeCBleHRlbmRzIFwiXCJcbiAgPyBLZXlcbiAgOiBgJHtQcmVmaXh9X18ke0tleX1gO1xuXG4vLyBTZWxlY3Qg6rKw6rO8IO2DgOyeheydhCDstpTroaDtlbTso7zripQg7Lmc6rWs7J6F64uI64ukLlxuLy8g7J20IO2DgOyeheydgCBQdXJp7J2YIHNlbGVjdCwgYXBwZW5kU2VsZWN07JeQ7IScIFRSZXN1bHTroZwg7IKs7Jqp65Cp64uI64ukLlxuLy9cbi8vIFNjaGVtYeulvCDsnb3slrTshJwgRkvsnZggbnVsbGFiaWxpdHnsl5Ag65Sw6528IGpvaW7rkJwg6rCd7LK07J2YIO2DgOyeheydhCDstpTroaDtlbTso7zripQg6riw64ql7J20IOyeiOyKteuLiOuLpC5cbi8vIOydtOqyjCDrrLTsiqgg7IaM66as64OQPyBGS+qwgCBudWxsYWJsZeyduOuNsCBsZWZ0Sm9pbuuQmOyXiOuLpOuptCwg7ZW064u5IOqwneyytOuKlCBudWxsYWJsZSDtlbTslbwg7ZWo7J2EIO2DgOyehSDstpTroaDsnLzroZwg67CY7JiB7ZW07KSA64uk64qUIOqyg+yeheuLiOuLpC5cbi8vIOuwmOuptCBGS+qwgCBub24tbnVsbGFibGXsnbTqsbDrgpgg6re464OlIGpvaW7snLzroZwg7J207Ja07KGM64uk66m0IO2VtOuLuSDqsJ3ssrTripQgbm9uLW51bGxhYmxl7ZWgIOqygeuLiOuLpC5cbi8vIOusvOuhoCDqsJ3ssrQg64K067aA7J2YIG51bGxhYmlsaXR564qUIOuYkCDrs4TqsJzroZwg7LaU66Gg65Cp64uI64ukLlxuLy9cbi8vIOyVhOuemOyXkOuPhCBQYXJzZVNlbGVjdE9iamVjdFdpdGhQYXRo66W8IOu5hOuhr+2VtCBFeHRyYWN0Q29sdW1uVHlwZSwgRXh0cmFjdENvbHVtblR5cGVSYXcg65Ox7J2YIO2DgOyeheydtCDsnojsirXri4jri6QuXG4vLyDsnbTrk6TsnZgg7Jet7ZWg7J2AIOuLpOydjOqzvCDqsJnsirXri4jri6Q6XG4vLyAtIFBhcnNlKjog6rCd7LK0IOugiOuyqOyXkOyEnCDspJHssqkg6rWs7KGw66W8IOyInO2ajO2VmOupsCDqsJ3ssrTsl5AgfCBudWxs7J2EIOu2meydvOyngCDqsrDsoJXtlanri4jri6QuXG4vLyAtIEV4dHJhY3QqOiDtlYTrk5wg66CI67Ko7JeQ7IScIFwidGFibGUuY29sdW1uXCIg6rK966Gc66Gc67aA7YSwIOyLpOygnCDtg4DsnoXsnYQg7LaU7Lac7ZWp64uI64ukLlxuLy9cbi8vIOyYiOyLnDpcbi8vIC5zZWxlY3Qoe1xuLy8gICBpZDogXCJ1c2Vycy5pZFwiLCAgICAgICAgICAgLy8g4oaQIEV4dHJhY3RDb2x1bW5UeXBl7J2YIOqysOqzvOuKlCBudW1iZXLsnoXri4jri6QuXG4vLyAgIGRlcGFydG1lbnQ6IHsgICAgICAgICAgICAgLy8g4oaQIFBhcnNlU2VsZWN0T2JqZWN0SW5uZXLsl5Ag7J2Y7ZW0IG51bGxhYmxlIOqwneyytOuhnCDstpTroaDrkKnri4jri6QuXG4vLyAgICAgaWQ6IFwiZGVwYXJ0bWVudC5pZFwiLCAgICAvLyDihpAgRXh0cmFjdENvbHVtblR5cGVSYXfsnZgg6rKw6rO864qUIG51bWJlcuyeheuLiOuLpC5cbi8vICAgICBuYW1lOiBcImRlcGFydG1lbnQubmFtZVwiIC8vIOKGkCBFeHRyYWN0Q29sdW1uVHlwZVJhd+ydmCDqsrDqs7zripQgc3RyaW5n7J6F64uI64ukLlxuLy8gICB9XG4vLyB9KVxuZXhwb3J0IHR5cGUgUGFyc2VTZWxlY3RPYmplY3Q8XG4gIFRUYWJsZXMgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxuICBUU2VsZWN0IGV4dGVuZHMgU2VsZWN0T2JqZWN0PFRUYWJsZXM+LFxuPiA9IFBhcnNlU2VsZWN0T2JqZWN0V2l0aFBhdGg8VFRhYmxlcywgVFNlbGVjdCwgXCJcIj47XG5cbi8vIOqyveuhnOulvCDstpTsoIHtlZjrqbTshJwgU2VsZWN0IOqysOqzvCDtg4DsnoXsnYQg7LaU66Gg7ZWp64uI64ukLlxudHlwZSBQYXJzZVNlbGVjdE9iamVjdFdpdGhQYXRoPFxuICBUVGFibGVzIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgYW55PixcbiAgVFNlbGVjdCBleHRlbmRzIFNlbGVjdE9iamVjdDxUVGFibGVzPixcbiAgUHJlZml4IGV4dGVuZHMgc3RyaW5nLFxuPiA9IEV4cGFuZDx7XG4gIFtLIGluIGtleW9mIFRTZWxlY3RdOiBUU2VsZWN0W0tdIGV4dGVuZHMgU3FsRXhwcmVzc2lvbjxpbmZlciBSPlxuICAgID8gUiBleHRlbmRzIFwic3RyaW5nXCJcbiAgICAgID8gc3RyaW5nXG4gICAgICA6IFIgZXh0ZW5kcyBcIm51bWJlclwiXG4gICAgICAgID8gbnVtYmVyXG4gICAgICAgIDogUiBleHRlbmRzIFwiYm9vbGVhblwiXG4gICAgICAgICAgPyBib29sZWFuXG4gICAgICAgICAgOiBSIGV4dGVuZHMgXCJkYXRlXCJcbiAgICAgICAgICAgID8gRGF0ZVxuICAgICAgICAgICAgOiBSIGV4dGVuZHMgXCJzdHJpbmdbXVwiXG4gICAgICAgICAgICAgID8gc3RyaW5nW11cbiAgICAgICAgICAgICAgOiBuZXZlclxuICAgIDogSXNOZXN0ZWRPYmplY3Q8VFNlbGVjdFtLXT4gZXh0ZW5kcyB0cnVlXG4gICAgICA/IFRTZWxlY3RbS10gZXh0ZW5kcyBOZXN0ZWRTZWxlY3RPYmplY3Q8VFRhYmxlcz5cbiAgICAgICAgPyBJc051bGxhYmxlSm9pbmVkVGFibGU8VFRhYmxlcywgSm9pblBhdGg8UHJlZml4LCBLICYgc3RyaW5nPj4gZXh0ZW5kcyB0cnVlIC8vIOyjvOyWtOynhCDthYzsnbTruJTsnbQgRksgbnVsbGFibGXsl5AgbGVmdEpvaW7rkJjsl4jripTsp4Ag7Jes67aA7JeQIOuUsOudvCBzZWxlY3Qg6rKw6rO8IOqwneyytOydmCDtg4DsnoXsnbQg64us65287KeR64uI64ukLlxuICAgICAgICAgID8gRXhwYW5kPFBhcnNlU2VsZWN0T2JqZWN0SW5uZXI8VFRhYmxlcywgVFNlbGVjdFtLXSwgSm9pblBhdGg8UHJlZml4LCBLICYgc3RyaW5nPj4+IHwgbnVsbCAvLyDrp4zslb0g7ZW064u57ZWc64uk66m0IO2VtOuLuSDqsJ3ssrQg7J6Q7LK064qUIG51bGxhYmxlIO2VmOupsCxcbiAgICAgICAgICA6IEV4cGFuZDxQYXJzZVNlbGVjdE9iamVjdElubmVyPFRUYWJsZXMsIFRTZWxlY3RbS10sIEpvaW5QYXRoPFByZWZpeCwgSyAmIHN0cmluZz4+PiAvLyDqt7jroIfsp4Ag7JWK64uk66m0IG5vbi1udWxsYWJsZSDtlanri4jri6QuXG4gICAgICAgIDogbmV2ZXJcbiAgICAgIDogRXh0cmFjdENvbHVtblR5cGU8VFRhYmxlcywgVFNlbGVjdFtLXSAmIHN0cmluZz47XG59PjtcblxuLy8g7KSR7LKpIOqwneyytCDrgrTrtoDsmqkgLSBsZWZ0Sm9pbiBudWxsYWJsZeydhCDqsJ3ssrQg66CI67Ko7JeQ7IScIOydtOuvuCDsspjrpqztlojsnLzrr4DroZwg7ZWE65Oc64qUIOybkOuzuCDtg4DsnoXsnYQg7IKs7Jqp7ZWp64uI64ukLlxuLy8gUGFyc2VTZWxlY3RPYmplY3RXaXRoUGF0aOyZgCDqsbDsnZgg64+Z7J287ZWY64KYLCDrp4jsp4Drp4nsl5AgRXh0cmFjdENvbHVtblR5cGUg64yA7IugIEV4dHJhY3RDb2x1bW5UeXBlUmF366W8IOyCrOyaqe2VmOyXrFxuLy8g7ZWE65OcIOugiOuyqOyXkOyEnCDspJHrs7XsnLzroZwgfCBudWxs7J20IOy2lOqwgOuQmOuKlCDqsoPsnYQg67Cp7KeA7ZWp64uI64ukLlxudHlwZSBQYXJzZVNlbGVjdE9iamVjdElubmVyPFxuICBUVGFibGVzIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgYW55PixcbiAgVFNlbGVjdCBleHRlbmRzIFNlbGVjdE9iamVjdDxUVGFibGVzPixcbiAgUHJlZml4IGV4dGVuZHMgc3RyaW5nLFxuPiA9IEV4cGFuZDx7XG4gIFtLIGluIGtleW9mIFRTZWxlY3RdOiBUU2VsZWN0W0tdIGV4dGVuZHMgU3FsRXhwcmVzc2lvbjxpbmZlciBSPlxuICAgID8gUiBleHRlbmRzIFwic3RyaW5nXCJcbiAgICAgID8gc3RyaW5nXG4gICAgICA6IFIgZXh0ZW5kcyBcIm51bWJlclwiXG4gICAgICAgID8gbnVtYmVyXG4gICAgICAgIDogUiBleHRlbmRzIFwiYm9vbGVhblwiXG4gICAgICAgICAgPyBib29sZWFuXG4gICAgICAgICAgOiBSIGV4dGVuZHMgXCJkYXRlXCJcbiAgICAgICAgICAgID8gRGF0ZVxuICAgICAgICAgICAgOiBSIGV4dGVuZHMgXCJzdHJpbmdbXVwiXG4gICAgICAgICAgICAgID8gc3RyaW5nW11cbiAgICAgICAgICAgICAgOiBuZXZlclxuICAgIDogSXNOZXN0ZWRPYmplY3Q8VFNlbGVjdFtLXT4gZXh0ZW5kcyB0cnVlXG4gICAgICA/IFRTZWxlY3RbS10gZXh0ZW5kcyBOZXN0ZWRTZWxlY3RPYmplY3Q8VFRhYmxlcz5cbiAgICAgICAgPyBJc051bGxhYmxlSm9pbmVkVGFibGU8VFRhYmxlcywgSm9pblBhdGg8UHJlZml4LCBLICYgc3RyaW5nPj4gZXh0ZW5kcyB0cnVlXG4gICAgICAgICAgPyBFeHBhbmQ8UGFyc2VTZWxlY3RPYmplY3RJbm5lcjxUVGFibGVzLCBUU2VsZWN0W0tdLCBKb2luUGF0aDxQcmVmaXgsIEsgJiBzdHJpbmc+Pj4gfCBudWxsXG4gICAgICAgICAgOiBFeHBhbmQ8UGFyc2VTZWxlY3RPYmplY3RJbm5lcjxUVGFibGVzLCBUU2VsZWN0W0tdLCBKb2luUGF0aDxQcmVmaXgsIEsgJiBzdHJpbmc+Pj5cbiAgICAgICAgOiBuZXZlclxuICAgICAgOiBFeHRyYWN0Q29sdW1uVHlwZVJhdzxUVGFibGVzLCBUU2VsZWN0W0tdICYgc3RyaW5nPjsgLy8gbGVmdEpvaW4gbnVsbGFibGUg66y07IucXG59PjtcblxuLy8g7Lus65+8IOqyveuhnOyXkOyEnCDtg4DsnoXsnYQg7LaU7Lac7ZWp64uI64ukLiBMZWZ0Sm9pbmVkTWFya2Vy6rCAIOyeiOycvOuptCB8IG51bGzsnYQg7LaU6rCA7ZWp64uI64ukLlxuLy8g7LWc7IOB7JyEIHNlbGVjdCDtlYTrk5zsl5DshJwg7IKs7Jqp65Cp64uI64ukLlxuZXhwb3J0IHR5cGUgRXh0cmFjdENvbHVtblR5cGU8XG4gIFRUYWJsZXMgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxuICBQYXRoIGV4dGVuZHMgc3RyaW5nLFxuPiA9IFBhdGggZXh0ZW5kcyBgJHtpbmZlciBUQWxpYXN9LiR7aW5mZXIgVENvbHVtbn1gXG4gID8gVEFsaWFzIGV4dGVuZHMga2V5b2YgVFRhYmxlc1xuICAgID8gVENvbHVtbiBleHRlbmRzIGtleW9mIFRUYWJsZXNbVEFsaWFzXVxuICAgICAgPyBUVGFibGVzW1RBbGlhc10gZXh0ZW5kcyBMZWZ0Sm9pbmVkTWFya2VyXG4gICAgICAgID8gVFRhYmxlc1tUQWxpYXNdW1RDb2x1bW5dIHwgbnVsbCAvLyBMRUZUIEpPSU4gKG51bGxhYmxlIEZLKSDihpIgbnVsbGFibGVcbiAgICAgICAgOiBUVGFibGVzW1RBbGlhc11bVENvbHVtbl0gLy8gSU5ORVIgSk9JTiDrmJDripQgbm9uLW51bGwgRksgbGVmdEpvaW4g4oaSIG5vbi1udWxsYWJsZVxuICAgICAgOiBuZXZlclxuICAgIDogbmV2ZXJcbiAgOiBJc1NpbmdsZUtleTxUVGFibGVzPiBleHRlbmRzIHRydWVcbiAgICA/IFBhdGggZXh0ZW5kcyBrZXlvZiBUVGFibGVzW2tleW9mIFRUYWJsZXNdXG4gICAgICA/IFRUYWJsZXNba2V5b2YgVFRhYmxlc11bUGF0aF1cbiAgICAgIDogbmV2ZXJcbiAgICA6IG5ldmVyO1xuXG4vLyDsu6zrn7wg6rK966Gc7JeQ7IScIO2DgOyeheydhCDstpTstpztlanri4jri6QuIGxlZnRKb2luIOyXrOu2gOyZgCDqtIDqs4Tsl4bsnbQg7JuQ67O4IO2DgOyeheydhCDrsJjtmZjtlanri4jri6QuXG4vLyDspJHssqkg6rCd7LK0IOuCtOu2gCDtlYTrk5zsl5DshJwg7IKs7Jqp65Cp64uI64ukLiAo6rCd7LK0IOugiOuyqOyXkOyEnCDsnbTrr7ggfCBudWxsIOyymOumrOqwgCDsmYTro4zrkJjsl4jsnLzrr4DroZwpXG50eXBlIEV4dHJhY3RDb2x1bW5UeXBlUmF3PFxuICBUVGFibGVzIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgYW55PixcbiAgUGF0aCBleHRlbmRzIHN0cmluZyxcbj4gPSBQYXRoIGV4dGVuZHMgYCR7aW5mZXIgVEFsaWFzfS4ke2luZmVyIFRDb2x1bW59YFxuICA/IFRBbGlhcyBleHRlbmRzIGtleW9mIFRUYWJsZXNcbiAgICA/IFRDb2x1bW4gZXh0ZW5kcyBrZXlvZiBUVGFibGVzW1RBbGlhc11cbiAgICAgID8gVFRhYmxlc1tUQWxpYXNdW1RDb2x1bW5dIC8vIGxlZnRKb2luIOyXrOu2gOyZgCDqtIDqs4Tsl4bsnbQg7JuQ67O4IO2DgOyehVxuICAgICAgOiBuZXZlclxuICAgIDogbmV2ZXJcbiAgOiBJc1NpbmdsZUtleTxUVGFibGVzPiBleHRlbmRzIHRydWVcbiAgICA/IFBhdGggZXh0ZW5kcyBrZXlvZiBUVGFibGVzW2tleW9mIFRUYWJsZXNdXG4gICAgICA/IFRUYWJsZXNba2V5b2YgVFRhYmxlc11bUGF0aF1cbiAgICAgIDogbmV2ZXJcbiAgICA6IG5ldmVyO1xuXG4vLyBXaGVyZSDsobDqsbQg6rCd7LK0IO2DgOyehVxuLy8g7JiIOiB7IFwidS5pZFwiOiAxLCBcInUuc3RhdHVzXCI6IFwiYWN0aXZlXCIgfVxuZXhwb3J0IHR5cGUgV2hlcmVDb25kaXRpb248VFRhYmxlcyBleHRlbmRzIFJlY29yZDxzdHJpbmcsIGFueT4+ID0ge1xuICBba2V5IGluIEF2YWlsYWJsZUNvbHVtbnM8VFRhYmxlcz5dPzogRXh0cmFjdENvbHVtblR5cGU8VFRhYmxlcywga2V5ICYgc3RyaW5nPjtcbn07XG5cbi8vIEZ1bGx0ZXh0IGluZGV4IOy7rOufvCDstpTstpwg7YOA7J6FXG5leHBvcnQgdHlwZSBGdWxsdGV4dENvbHVtbnM8VFRhYmxlcyBleHRlbmRzIFJlY29yZDxzdHJpbmcsIGFueT4+ID0ge1xuICBbVEFsaWFzIGluIGtleW9mIFRUYWJsZXNdOiBUVGFibGVzW1RBbGlhc10gZXh0ZW5kcyB7XG4gICAgW0sgaW4gRnVsbHRleHRLZXldOiByZWFkb25seSAoaW5mZXIgQ29sKVtdO1xuICB9XG4gICAgPyBDb2wgZXh0ZW5kcyBzdHJpbmdcbiAgICAgID8gYCR7VEFsaWFzICYgc3RyaW5nfS4ke0NvbH1gXG4gICAgICA6IG5ldmVyXG4gICAgOiBuZXZlcjtcbn1ba2V5b2YgVFRhYmxlc107XG5cbi8vIOu5hOq1kCDsl7DsgrDsnpBcbmV4cG9ydCB0eXBlIENvbXBhcmlzb25PcGVyYXRvciA9IFwiPVwiIHwgXCI+XCIgfCBcIj49XCIgfCBcIjxcIiB8IFwiPD1cIiB8IFwiPD5cIiB8IFwiIT1cIjtcbi8vIOyhsOqxtCDsl7DsgrDsnpA6IOu5hOq1kCDsl7DsgrDsnpAgKyDtjKjthLQg66ek7LmtIOyXsOyCsOyekFxuZXhwb3J0IHR5cGUgV2hlcmVPcGVyYXRvciA9IENvbXBhcmlzb25PcGVyYXRvciB8IFwibGlrZVwiIHwgXCJub3QgbGlrZVwiIHwgXCJpbGlrZVwiIHwgXCJub3QgaWxpa2VcIjtcbmV4cG9ydCBjb25zdCBGVVpaWV9PUEVSQVRPUlMgPSBbXCI8JVwiLCBcIiVcIiwgXCI8PCVcIl0gYXMgY29uc3Q7XG5leHBvcnQgdHlwZSBGdXp6eU9wZXJhdG9yID0gKHR5cGVvZiBGVVpaWV9PUEVSQVRPUlMpW251bWJlcl07XG5cbi8vIFNRTCBFeHByZXNzaW9uIO2DgOyehSDsoJXsnZhcbmV4cG9ydCB0eXBlIFNxbEV4cHJlc3Npb248VCBleHRlbmRzIFwic3RyaW5nXCIgfCBcIm51bWJlclwiIHwgXCJib29sZWFuXCIgfCBcImRhdGVcIiB8IFwic3RyaW5nW11cIj4gPSB7XG4gIF90eXBlOiBcInNxbF9leHByZXNzaW9uXCI7IC8vIOuYkOuKlCBcImNvbXB1dGVkX3ZhbHVlXCJcbiAgX3JldHVybjogVDtcbiAgX3NxbDogc3RyaW5nO1xufTtcblxuLy8g6rKw6rO8IO2DgOyehSDqsIDrj4XshLHsnYQg7JyE7ZWcIO2DgOyehSDtmZXsnqVcbmV4cG9ydCB0eXBlIEV4cGFuZDxUPiA9IFQgZXh0ZW5kcyBhbnlbXVxuICA/IHsgW0sgaW4ga2V5b2YgVFswXV06IFRbMF1bS10gfVtdIC8vIOuwsOyXtOydtOuptCDssqsg67KI7Ke4IOyalOyGjOulvCBFeHBhbmTtlZjqs6Ag67Cw7Je066GcIOqwkOyMiFxuICA6IFQgZXh0ZW5kcyBvYmplY3RcbiAgICA/IHsgW0sgaW4ga2V5b2YgVF06IFRbS10gfVxuICAgIDogVDtcblxudHlwZSBJc1NpbmdsZUtleTxUVGFibGVzIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgYW55Pj4gPSBrZXlvZiBUVGFibGVzIGV4dGVuZHMgaW5mZXIgS1xuICA/IEsgZXh0ZW5kcyBrZXlvZiBUVGFibGVzXG4gICAgPyBrZXlvZiBUVGFibGVzIGV4dGVuZHMgSyAvLyDsl63rsKntlqUg7LK07YGs66GcIOuLqOydvCDtgqQg7ZmV7J24XG4gICAgICA/IHRydWVcbiAgICAgIDogZmFsc2VcbiAgICA6IGZhbHNlXG4gIDogZmFsc2U7XG5cbmV4cG9ydCB0eXBlIFNpbmdsZVRhYmxlVmFsdWU8VFRhYmxlcyBleHRlbmRzIFJlY29yZDxzdHJpbmcsIGFueT4+ID1cbiAgSXNTaW5nbGVLZXk8VFRhYmxlcz4gZXh0ZW5kcyB0cnVlID8gVFRhYmxlc1trZXlvZiBUVGFibGVzXSA6IG5ldmVyO1xuXG4vLyBfX2hhc0RlZmF1bHRfX+yXkCDtj6ztlajrkJwg7YKk65Ok7J2EIFB1cmlUYWJsZTxUPuydmCDtgqTroZwg7KCc7ZWcXG50eXBlIEhhc0RlZmF1bHRLZXlzPFQ+ID0gVCBleHRlbmRzIHsgX19oYXNEZWZhdWx0X186IHJlYWRvbmx5IChpbmZlciBLKVtdIH1cbiAgPyBFeHRyYWN0PEssIGtleW9mIFB1cmlUYWJsZTxUPj5cbiAgOiBuZXZlcjtcblxuLy8gX19nZW5lcmF0ZWRfX+yXkCDtj6ztlajrkJwg7YKk65OkIChJTlNFUlQg7IucIOygnOyZuO2VtOyVvCDtlagpXG50eXBlIEdlbmVyYXRlZEtleXM8VD4gPSBUIGV4dGVuZHMgeyBfX2dlbmVyYXRlZF9fOiByZWFkb25seSAoaW5mZXIgSylbXSB9XG4gID8gRXh0cmFjdDxLLCBrZXlvZiBQdXJpVGFibGU8VD4+XG4gIDogbmV2ZXI7XG5cbi8vIEluc2VydCDtg4DsnoU6IOuplO2DgOuNsOydtO2EsCDsoJzqsbAg7ZuELCBfX2hhc0RlZmF1bHRfXyDsu6zrn7zrk6Trp4wgb3B0aW9uYWzroZwg7LKY66asLCBfX2dlbmVyYXRlZF9fIOy7rOufvOydgCDsmYTsoITtnogg7KCc7Jm4XG5leHBvcnQgdHlwZSBJbnNlcnREYXRhPFQ+ID0gT21pdDxcbiAgUHVyaVRhYmxlPFQ+LFxuICBJbnRlcm5hbFR5cGVLZXlzIHwgSGFzRGVmYXVsdEtleXM8VD4gfCBHZW5lcmF0ZWRLZXlzPFQ+XG4+ICYge1xuICBbSyBpbiBIYXNEZWZhdWx0S2V5czxUPl0/OiBQdXJpVGFibGU8VD5bS107XG59O1xuXG4vLyBJbnNlcnQgUmVzdWx0IO2DgOyehVxuZXhwb3J0IHR5cGUgSW5zZXJ0UmVzdWx0ID0gUGljazxRdWVyeVJlc3VsdDxhbnk+LCBcImNvbW1hbmRcIiB8IFwicm93Q291bnRcIiB8IFwicm93c1wiIHwgXCJvaWRcIj47XG5cbi8vIFN1YnNldFF1ZXJ566W8IOychO2VnCDtg4DsnoUg7Jyg7Yu466as7YuwXG5leHBvcnQgdHlwZSBFeHRyYWN0VFRhYmxlczxUIGV4dGVuZHMgUHVyaTxhbnksIGFueSwgYW55Pj4gPVxuICBUIGV4dGVuZHMgUHVyaTxhbnksIGluZmVyIFRUYWJsZXMsIGFueT4gPyBUVGFibGVzIDogbmV2ZXI7XG5leHBvcnQgdHlwZSBVbmlvbkV4dHJhY3RlZFRUYWJsZXM8XG4gIFN1YnNldEtleSBleHRlbmRzIHN0cmluZyxcbiAgU3Vic2V0UXVlcmllcyBleHRlbmRzIFJlY29yZDxTdWJzZXRLZXksIFB1cmlTdWJzZXRGbj4sXG4+ID0ge1xuICBbSyBpbiBTdWJzZXRLZXldOiBFeHRyYWN0VFRhYmxlczxSZXR1cm5UeXBlPFN1YnNldFF1ZXJpZXNbS10+Pjtcbn1bU3Vic2V0S2V5XTtcblxuLy8gT04gQ09ORkxJQ1Qg64yA7IOBIO2DgOyehVxuLy8gLSDri6jsnbwg7Lus65+8OiBcImVtYWlsXCJcbi8vIC0g67O17IiYIOy7rOufvDogW1widXNlcl9pZFwiLCBcInByb2R1Y3RfaWRcIl1cbmV4cG9ydCB0eXBlIE9uQ29uZmxpY3RUYXJnZXQgPSBzdHJpbmcgfCBzdHJpbmdbXTtcblxuLy8gT04gQ09ORkxJQ1Qg7JWh7IWYIO2DgOyehVxuLy8gLSBcIm5vdGhpbmdcIjogRE8gTk9USElOR1xuLy8gLSB7IHVwZGF0ZTogWy4uLl0gfTogRE8gVVBEQVRFXG5leHBvcnQgdHlwZSBPbkNvbmZsaWN0QWN0aW9uPFRUYWJsZXMgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4gPVxuICB8IFwibm90aGluZ1wiXG4gIHwge1xuICAgICAgdXBkYXRlOlxuICAgICAgICB8IEF2YWlsYWJsZUNvbHVtbnM8VFRhYmxlcz5bXSAvLyDrsLDsl7Qg7ZiV7YOcIC0gW1wibmFtZVwiLCBcImVtYWlsXCJdXG4gICAgICAgIHwgV2hlcmVDb25kaXRpb248VFRhYmxlcz47IC8vIOqwneyytCDtmJXtg5wgLSB7IG5hbWU6IFwiSm9oblwiLCBjb3VudDogUHVyaS5yYXdOdW1iZXIoLi4uKSB9XG4gICAgfTtcblxuLy8gRksg7Lus65+866qFIOy2lOy2nCDsnKDti7jrpqzti7Ag7YOA7J6FIC0gRGF0YWJhc2VGb3JlaWduS2V5cyDtmZzsmqlcbmV4cG9ydCB0eXBlIEZvcmVpZ25LZXlDb2x1bW5zPFRUYWJsZSBleHRlbmRzIFRhYmxlTmFtZTxEYXRhYmFzZVNjaGVtYUV4dGVuZD4+ID1cbiAgVFRhYmxlIGV4dGVuZHMga2V5b2YgRGF0YWJhc2VGb3JlaWduS2V5cyA/IERhdGFiYXNlRm9yZWlnbktleXNbVFRhYmxlXSA6IG5ldmVyO1xuXG4vLyBVbmlvbuydhCBJbnRlcnNlY3Rpb27snLzroZwg67OA7ZmY7ZWY64qUIOycoO2LuOumrO2LsFxudHlwZSBVbmlvblRvSW50ZXJzZWN0aW9uPFU+ID0gKFUgZXh0ZW5kcyBhbnkgPyAoazogVSkgPT4gdm9pZCA6IG5ldmVyKSBleHRlbmRzIChrOiBpbmZlciBJKSA9PiB2b2lkXG4gID8gSVxuICA6IG5ldmVyO1xuXG4vLyBTZWxlY3RBbGwg7IucIOuqqOuToCDsobDsnbjrkJwg7YWM7J2067iU7J2YIOy7rOufvCDtj6ztlahcbmV4cG9ydCB0eXBlIFNlbGVjdEFsbFJlc3VsdDxUVGFibGVzIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgYW55Pj4gPSBVbmlvblRvSW50ZXJzZWN0aW9uPFxuICB7XG4gICAgW0sgaW4ga2V5b2YgVFRhYmxlc106IFRUYWJsZXNbS10gZXh0ZW5kcyBpbmZlciBUXG4gICAgICA/IFQgZXh0ZW5kcyBMZWZ0Sm9pbmVkTWFya2VyXG4gICAgICAgID8gUGFydGlhbDxPbWl0SW50ZXJuYWxUeXBlS2V5czxUPj4gLy8gTEVGVCBKT0lO7J2AIG51bGxhYmxlLCDrqZTtg4DrjbDsnbTthLAg7KCc6rGwXG4gICAgICAgIDogT21pdEludGVybmFsVHlwZUtleXM8VD4gLy8gSU5ORVIgSk9JTuydgCBub24tbnVsbGFibGUsIOuplO2DgOuNsOydtO2EsCDsoJzqsbBcbiAgICAgIDogbmV2ZXI7XG4gIH1ba2V5b2YgVFRhYmxlc11cbj47XG5cbi8vIEZUUyDtg4DsnoVcbnR5cGUgVHNRdWVyeVBhcnNlciA9IFwidG9fdHNxdWVyeVwiIHwgXCJwbGFpbnRvX3RzcXVlcnlcIiB8IFwicGhyYXNldG9fdHNxdWVyeVwiIHwgXCJ3ZWJzZWFyY2hfdG9fdHNxdWVyeVwiO1xuZXhwb3J0IHR5cGUgVHNRdWVyeUNvbmZpZyA9IFwic2ltcGxlXCIgfCBcImVuZ2xpc2hcIjtcbmV4cG9ydCB0eXBlIFRzUXVlcnlPcHRpb25zID0ge1xuICBwYXJzZXI/OiBUc1F1ZXJ5UGFyc2VyO1xuICBjb25maWc/OiBUc1F1ZXJ5Q29uZmlnO1xufTtcblxuZXhwb3J0IHR5cGUgVHNIaWdobGlnaHRPcHRpb25zID0ge1xuICAvKiog7L+866asIOuzgO2ZmCDtlajsiJggKOq4sOuzuOqwkjogXCJ3ZWJzZWFyY2hfdG9fdHNxdWVyeVwiKSAqL1xuICBwYXJzZXI/OiBUc1F1ZXJ5UGFyc2VyO1xuICAvKiog7YWN7Iqk7Yq4IOqygOyDiSDshKTsoJUgKOq4sOuzuOqwkjogXCJzaW1wbGVcIikgKi9cbiAgY29uZmlnPzogVHNRdWVyeUNvbmZpZztcbiAgLyoqIOy1nOuMgCDri6jslrQg7IiYICjquLDrs7jqsJI6IDM1KSAqL1xuICBtYXhXb3Jkcz86IG51bWJlcjtcbiAgLyoqIOy1nOyGjCDri6jslrQg7IiYICjquLDrs7jqsJI6IDE1KSAqL1xuICBtaW5Xb3Jkcz86IG51bWJlcjtcbiAgLyoqIO2XpOuTnOudvOyduCDsi5zsnpEv64Gd7JeQ7IScIOygnOqxsO2VoCDsp6fsnYAg64uo7Ja0IOq4uOydtCAo6riw67O46rCSOiAzKSAqL1xuICBzaG9ydFdvcmQ/OiBudW1iZXI7XG4gIC8qKiB0cnVl66m0IOyghOyytCDrrLjshJzrpbwg7Zek65Oc65287J247Jy866GcIOyCrOyaqSAo6riw67O46rCSOiBmYWxzZSkgKi9cbiAgaGlnaGxpZ2h0QWxsPzogYm9vbGVhbjtcbiAgLyoqIO2RnOyLnO2VoCDstZzrjIAg7YWN7Iqk7Yq4IOyhsOqwgSDsiJggKOq4sOuzuOqwkjogMCwg7KGw6rCBIOuvuOyCrOyaqSkgKi9cbiAgbWF4RnJhZ21lbnRzPzogbnVtYmVyO1xuICAvKiog7L+866asIOuLqOyWtCDsi5zsnpEg6rWs67aE7J6QICjquLDrs7jqsJI6IFwiPGI+XCIpICovXG4gIHN0YXJ0U2VsPzogc3RyaW5nO1xuICAvKiog7L+866asIOuLqOyWtCDrgZ0g6rWs67aE7J6QICjquLDrs7jqsJI6IFwiPC9iPlwiKSAqL1xuICBzdG9wU2VsPzogc3RyaW5nO1xuICAvKiog7KGw6rCBIOq1rOu2hOyekCAo6riw67O46rCSOiBcIiAuLi4gXCIpICovXG4gIGZyYWdtZW50RGVsaW1pdGVyPzogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgVHNSYW5rT3B0aW9ucyA9IHtcbiAgcGFyc2VyPzogVHNRdWVyeVBhcnNlcjtcbiAgY29uZmlnPzogVHNRdWVyeUNvbmZpZztcbiAgLyoqIOqwgOykkey5mCDrsLDsl7QgW0QsIEMsIEIsIEFdICjquLDrs7jqsJI6IFswLjEsIDAuMiwgMC40LCAxLjBdKSAqL1xuICB3ZWlnaHRzPzogW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl07XG4gIC8qKlxuICAgKiDsoJXqt5ztmZQg7Ji17IWYXG4gICAqIDA6IOusuOyEnCDquLjsnbQg66y07IucICjquLDrs7jqsJIpXG4gICAqIDE6IDEgKyBsb2co66y47IScIOq4uOydtCnroZwg64KY64iUXG4gICAqIDI6IOusuOyEnCDquLjsnbTroZwg64KY64iUXG4gICAqIDQ6IO2Pieq3oCDsobDtmZQg6rGw66as66GcIOuCmOuIlCAodHNfcmFua19jZOunjClcbiAgICogODog6rOg7JygIOuLqOyWtCDsiJjroZwg64KY64iUXG4gICAqIDE2OiAxICsgbG9nKOqzoOycoCDri6jslrQg7IiYKeuhnCDrgpjriJRcbiAgICogMzI6IHJhbmsvKHJhbmsrMSkgLT4gMH4xIOyCrOydtOydmCDqsJLsnLzroZwg7Iqk7LyA7J2866eBXG4gICAqXG4gICAqIOu5hO2KuOuniOyKpO2BrOulvCDsgqzsmqntlZjsl6wg7Ji17IWY7J2EIOyhsO2Vqe2VoCDsiJgg7J6I7J2MXG4gICAqIOyYiDogOCB8IDMyIC0+IOqzoOycoCDri6jslrQg7IiY66GcIOuCmOuIhOqzoCAwfjEg7Iqk7LyA7J2866eBXG4gICAqL1xuICBub3JtYWxpemF0aW9uPzogbnVtYmVyO1xufTtcbiJdLCJuYW1lcyI6WyJGVVpaWV9PUEVSQVRPUlMiXSwibWFwcGluZ3MiOiJBQUFBLHNGQUFzRixHQStTdEYsT0FBTyxNQUFNQSxrQkFBa0I7SUFBQztJQUFNO0lBQUs7Q0FBTSxDQUFVIn0=
@@ -36,6 +36,11 @@ declare class EntityManagerClass {
36
36
  fixtureGenerator?: string | undefined;
37
37
  fixtureDefault?: unknown;
38
38
  fixtureStrategy?: "sequence" | undefined;
39
+ fixtureCompanions?: {
40
+ entity: string;
41
+ overrides?: Record<string, unknown> | undefined;
42
+ count?: number | undefined;
43
+ }[] | undefined;
39
44
  dataSource?: {
40
45
  strategy: "file" | "sample" | "ids" | "query" | "recent" | "random";
41
46
  config?: unknown;
@@ -61,6 +66,11 @@ declare class EntityManagerClass {
61
66
  fixtureGenerator?: string | undefined;
62
67
  fixtureDefault?: unknown;
63
68
  fixtureStrategy?: "sequence" | undefined;
69
+ fixtureCompanions?: {
70
+ entity: string;
71
+ overrides?: Record<string, unknown> | undefined;
72
+ count?: number | undefined;
73
+ }[] | undefined;
64
74
  dataSource?: {
65
75
  strategy: "file" | "sample" | "ids" | "query" | "recent" | "random";
66
76
  config?: unknown;
@@ -86,6 +96,11 @@ declare class EntityManagerClass {
86
96
  fixtureGenerator?: string | undefined;
87
97
  fixtureDefault?: unknown;
88
98
  fixtureStrategy?: "sequence" | undefined;
99
+ fixtureCompanions?: {
100
+ entity: string;
101
+ overrides?: Record<string, unknown> | undefined;
102
+ count?: number | undefined;
103
+ }[] | undefined;
89
104
  dataSource?: {
90
105
  strategy: "file" | "sample" | "ids" | "query" | "recent" | "random";
91
106
  config?: unknown;
@@ -111,6 +126,11 @@ declare class EntityManagerClass {
111
126
  fixtureGenerator?: string | undefined;
112
127
  fixtureDefault?: unknown;
113
128
  fixtureStrategy?: "sequence" | undefined;
129
+ fixtureCompanions?: {
130
+ entity: string;
131
+ overrides?: Record<string, unknown> | undefined;
132
+ count?: number | undefined;
133
+ }[] | undefined;
114
134
  dataSource?: {
115
135
  strategy: "file" | "sample" | "ids" | "query" | "recent" | "random";
116
136
  config?: unknown;
@@ -135,6 +155,11 @@ declare class EntityManagerClass {
135
155
  fixtureGenerator?: string | undefined;
136
156
  fixtureDefault?: unknown;
137
157
  fixtureStrategy?: "sequence" | undefined;
158
+ fixtureCompanions?: {
159
+ entity: string;
160
+ overrides?: Record<string, unknown> | undefined;
161
+ count?: number | undefined;
162
+ }[] | undefined;
138
163
  dataSource?: {
139
164
  strategy: "file" | "sample" | "ids" | "query" | "recent" | "random";
140
165
  config?: unknown;
@@ -161,6 +186,11 @@ declare class EntityManagerClass {
161
186
  fixtureGenerator?: string | undefined;
162
187
  fixtureDefault?: unknown;
163
188
  fixtureStrategy?: "sequence" | undefined;
189
+ fixtureCompanions?: {
190
+ entity: string;
191
+ overrides?: Record<string, unknown> | undefined;
192
+ count?: number | undefined;
193
+ }[] | undefined;
164
194
  dataSource?: {
165
195
  strategy: "file" | "sample" | "ids" | "query" | "recent" | "random";
166
196
  config?: unknown;
@@ -187,6 +217,11 @@ declare class EntityManagerClass {
187
217
  fixtureGenerator?: string | undefined;
188
218
  fixtureDefault?: unknown;
189
219
  fixtureStrategy?: "sequence" | undefined;
220
+ fixtureCompanions?: {
221
+ entity: string;
222
+ overrides?: Record<string, unknown> | undefined;
223
+ count?: number | undefined;
224
+ }[] | undefined;
190
225
  dataSource?: {
191
226
  strategy: "file" | "sample" | "ids" | "query" | "recent" | "random";
192
227
  config?: unknown;
@@ -211,6 +246,11 @@ declare class EntityManagerClass {
211
246
  fixtureGenerator?: string | undefined;
212
247
  fixtureDefault?: unknown;
213
248
  fixtureStrategy?: "sequence" | undefined;
249
+ fixtureCompanions?: {
250
+ entity: string;
251
+ overrides?: Record<string, unknown> | undefined;
252
+ count?: number | undefined;
253
+ }[] | undefined;
214
254
  dataSource?: {
215
255
  strategy: "file" | "sample" | "ids" | "query" | "recent" | "random";
216
256
  config?: unknown;
@@ -235,6 +275,11 @@ declare class EntityManagerClass {
235
275
  fixtureGenerator?: string | undefined;
236
276
  fixtureDefault?: unknown;
237
277
  fixtureStrategy?: "sequence" | undefined;
278
+ fixtureCompanions?: {
279
+ entity: string;
280
+ overrides?: Record<string, unknown> | undefined;
281
+ count?: number | undefined;
282
+ }[] | undefined;
238
283
  dataSource?: {
239
284
  strategy: "file" | "sample" | "ids" | "query" | "recent" | "random";
240
285
  config?: unknown;
@@ -260,6 +305,11 @@ declare class EntityManagerClass {
260
305
  fixtureGenerator?: string | undefined;
261
306
  fixtureDefault?: unknown;
262
307
  fixtureStrategy?: "sequence" | undefined;
308
+ fixtureCompanions?: {
309
+ entity: string;
310
+ overrides?: Record<string, unknown> | undefined;
311
+ count?: number | undefined;
312
+ }[] | undefined;
263
313
  dataSource?: {
264
314
  strategy: "file" | "sample" | "ids" | "query" | "recent" | "random";
265
315
  config?: unknown;
@@ -285,6 +335,11 @@ declare class EntityManagerClass {
285
335
  fixtureGenerator?: string | undefined;
286
336
  fixtureDefault?: unknown;
287
337
  fixtureStrategy?: "sequence" | undefined;
338
+ fixtureCompanions?: {
339
+ entity: string;
340
+ overrides?: Record<string, unknown> | undefined;
341
+ count?: number | undefined;
342
+ }[] | undefined;
288
343
  dataSource?: {
289
344
  strategy: "file" | "sample" | "ids" | "query" | "recent" | "random";
290
345
  config?: unknown;
@@ -309,6 +364,43 @@ declare class EntityManagerClass {
309
364
  fixtureGenerator?: string | undefined;
310
365
  fixtureDefault?: unknown;
311
366
  fixtureStrategy?: "sequence" | undefined;
367
+ fixtureCompanions?: {
368
+ entity: string;
369
+ overrides?: Record<string, unknown> | undefined;
370
+ count?: number | undefined;
371
+ }[] | undefined;
372
+ dataSource?: {
373
+ strategy: "file" | "sample" | "ids" | "query" | "recent" | "random";
374
+ config?: unknown;
375
+ } | undefined;
376
+ } | undefined;
377
+ } | {
378
+ type: "searchText";
379
+ sourceColumns: {
380
+ name: string;
381
+ caseInsensitive?: boolean | undefined;
382
+ }[];
383
+ name: string;
384
+ desc?: string | undefined;
385
+ nullable?: boolean | undefined;
386
+ toFilter?: boolean | undefined;
387
+ dbDefault?: string | number | boolean | undefined;
388
+ generated?: {
389
+ type: "STORED" | "VIRTUAL";
390
+ expression: string;
391
+ } | undefined;
392
+ cone?: {
393
+ [x: string]: unknown;
394
+ note?: string | undefined;
395
+ tags?: string[] | undefined;
396
+ fixtureGenerator?: string | undefined;
397
+ fixtureDefault?: unknown;
398
+ fixtureStrategy?: "sequence" | undefined;
399
+ fixtureCompanions?: {
400
+ entity: string;
401
+ overrides?: Record<string, unknown> | undefined;
402
+ count?: number | undefined;
403
+ }[] | undefined;
312
404
  dataSource?: {
313
405
  strategy: "file" | "sample" | "ids" | "query" | "recent" | "random";
314
406
  config?: unknown;
@@ -334,6 +426,11 @@ declare class EntityManagerClass {
334
426
  fixtureGenerator?: string | undefined;
335
427
  fixtureDefault?: unknown;
336
428
  fixtureStrategy?: "sequence" | undefined;
429
+ fixtureCompanions?: {
430
+ entity: string;
431
+ overrides?: Record<string, unknown> | undefined;
432
+ count?: number | undefined;
433
+ }[] | undefined;
337
434
  dataSource?: {
338
435
  strategy: "file" | "sample" | "ids" | "query" | "recent" | "random";
339
436
  config?: unknown;
@@ -358,6 +455,11 @@ declare class EntityManagerClass {
358
455
  fixtureGenerator?: string | undefined;
359
456
  fixtureDefault?: unknown;
360
457
  fixtureStrategy?: "sequence" | undefined;
458
+ fixtureCompanions?: {
459
+ entity: string;
460
+ overrides?: Record<string, unknown> | undefined;
461
+ count?: number | undefined;
462
+ }[] | undefined;
361
463
  dataSource?: {
362
464
  strategy: "file" | "sample" | "ids" | "query" | "recent" | "random";
363
465
  config?: unknown;
@@ -382,6 +484,11 @@ declare class EntityManagerClass {
382
484
  fixtureGenerator?: string | undefined;
383
485
  fixtureDefault?: unknown;
384
486
  fixtureStrategy?: "sequence" | undefined;
487
+ fixtureCompanions?: {
488
+ entity: string;
489
+ overrides?: Record<string, unknown> | undefined;
490
+ count?: number | undefined;
491
+ }[] | undefined;
385
492
  dataSource?: {
386
493
  strategy: "file" | "sample" | "ids" | "query" | "recent" | "random";
387
494
  config?: unknown;
@@ -411,6 +518,11 @@ declare class EntityManagerClass {
411
518
  fixtureGenerator?: string | undefined;
412
519
  fixtureDefault?: unknown;
413
520
  fixtureStrategy?: "sequence" | undefined;
521
+ fixtureCompanions?: {
522
+ entity: string;
523
+ overrides?: Record<string, unknown> | undefined;
524
+ count?: number | undefined;
525
+ }[] | undefined;
414
526
  dataSource?: {
415
527
  strategy: "file" | "sample" | "ids" | "query" | "recent" | "random";
416
528
  config?: unknown;
@@ -438,6 +550,11 @@ declare class EntityManagerClass {
438
550
  fixtureGenerator?: string | undefined;
439
551
  fixtureDefault?: unknown;
440
552
  fixtureStrategy?: "sequence" | undefined;
553
+ fixtureCompanions?: {
554
+ entity: string;
555
+ overrides?: Record<string, unknown> | undefined;
556
+ count?: number | undefined;
557
+ }[] | undefined;
441
558
  dataSource?: {
442
559
  strategy: "file" | "sample" | "ids" | "query" | "recent" | "random";
443
560
  config?: unknown;
@@ -466,6 +583,11 @@ declare class EntityManagerClass {
466
583
  fixtureGenerator?: string | undefined;
467
584
  fixtureDefault?: unknown;
468
585
  fixtureStrategy?: "sequence" | undefined;
586
+ fixtureCompanions?: {
587
+ entity: string;
588
+ overrides?: Record<string, unknown> | undefined;
589
+ count?: number | undefined;
590
+ }[] | undefined;
469
591
  dataSource?: {
470
592
  strategy: "file" | "sample" | "ids" | "query" | "recent" | "random";
471
593
  config?: unknown;
@@ -496,6 +618,11 @@ declare class EntityManagerClass {
496
618
  fixtureGenerator?: string | undefined;
497
619
  fixtureDefault?: unknown;
498
620
  fixtureStrategy?: "sequence" | undefined;
621
+ fixtureCompanions?: {
622
+ entity: string;
623
+ overrides?: Record<string, unknown> | undefined;
624
+ count?: number | undefined;
625
+ }[] | undefined;
499
626
  dataSource?: {
500
627
  strategy: "file" | "sample" | "ids" | "query" | "recent" | "random";
501
628
  config?: unknown;
@@ -509,6 +636,7 @@ declare class EntityManagerClass {
509
636
  nullsFirst?: boolean | undefined;
510
637
  sortOrder?: "ASC" | "DESC" | undefined;
511
638
  vectorOps?: "vector_cosine_ops" | "vector_ip_ops" | "vector_l2_ops" | undefined;
639
+ opclass?: string | undefined;
512
640
  }[];
513
641
  name: string;
514
642
  using?: "btree" | "hash" | "gin" | "gist" | "pgroonga" | undefined;
@@ -532,6 +660,11 @@ declare class EntityManagerClass {
532
660
  fixtureGenerator?: string | undefined;
533
661
  fixtureDefault?: unknown;
534
662
  fixtureStrategy?: "sequence" | undefined;
663
+ fixtureCompanions?: {
664
+ entity: string;
665
+ overrides?: Record<string, unknown> | undefined;
666
+ count?: number | undefined;
667
+ }[] | undefined;
535
668
  dataSource?: {
536
669
  strategy: "file" | "sample" | "ids" | "query" | "recent" | "random";
537
670
  config?: unknown;
@@ -547,6 +680,11 @@ declare class EntityManagerClass {
547
680
  fixtureGenerator?: string | undefined;
548
681
  fixtureDefault?: unknown;
549
682
  fixtureStrategy?: "sequence" | undefined;
683
+ fixtureCompanions?: {
684
+ entity: string;
685
+ overrides?: Record<string, unknown> | undefined;
686
+ count?: number | undefined;
687
+ }[] | undefined;
550
688
  dataSource?: {
551
689
  strategy: "file" | "sample" | "ids" | "query" | "recent" | "random";
552
690
  config?: unknown;
@@ -561,6 +699,11 @@ declare class EntityManagerClass {
561
699
  fixtureGenerator?: string | undefined;
562
700
  fixtureDefault?: unknown;
563
701
  fixtureStrategy?: "sequence" | undefined;
702
+ fixtureCompanions?: {
703
+ entity: string;
704
+ overrides?: Record<string, unknown> | undefined;
705
+ count?: number | undefined;
706
+ }[] | undefined;
564
707
  dataSource?: {
565
708
  strategy: "file" | "sample" | "ids" | "query" | "recent" | "random";
566
709
  config?: unknown;
@@ -568,7 +711,12 @@ declare class EntityManagerClass {
568
711
  } | undefined;
569
712
  }> | null;
570
713
  reload(doSilent?: boolean): Promise<void>;
571
- register(json: EntityJson): Promise<void>;
714
+ register(json: EntityJson, options?: {
715
+ deferSearchTextJsonSourceValidation?: boolean;
716
+ }): Promise<void>;
717
+ validateAllRegisteredSearchTextJsonSources(): Promise<void>;
718
+ private validateSearchTextJsonSources;
719
+ private resolveSearchTextJsonSourceType;
572
720
  get(entityId: string): Entity;
573
721
  getByTable(table: string): Entity;
574
722
  exists(entityId: string): boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"entity-manager.d.ts","sourceRoot":"","sources":["../../src/entity/entity-manager.ts"],"names":[],"mappings":"AAKA,OAAO,EAAiB,CAAC,EAAE,MAAM,KAAK,CAAC;AAEvC,OAAO,EAAE,KAAK,WAAW,EAAE,KAAK,UAAU,EAAoB,MAAM,gBAAgB,CAAC;AAGrF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAExD,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC,MAAM,MAAM,iBAAiB,GAAG,MAAM,CACpC,IAAI,GAAG,UAAU,GAAG,OAAO,GAAG,aAAa,GAAG,SAAS,GAAG,eAAe,GAAG,OAAO,GAAG,UAAU,EAChG,MAAM,CACP,CAAC;AACF,MAAM,MAAM,SAAS,GAAG;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,WAAW,EAAE,CAAC;IAC7B,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB,CAAC;AACF,cAAM,kBAAkB;IACtB,OAAO,CAAC,QAAQ,CAAkC;IAC3C,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAa;IACpD,OAAO,CAAC,UAAU,CAAqC;IAChD,YAAY,EAAE,OAAO,CAAS;IAG/B,QAAQ,CAAC,CAAC,GAAE,OAAe;IA2BjC,cAAc,CAAC,IAAI,EAAE,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAKtB,MAAM,CAAC,QAAQ,GAAE,OAAe;IAShC,QAAQ,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAO/C,GAAG,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;IAS7B,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IASjC,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAKjC,SAAS,IAAI,MAAM,EAAE;IAIrB,cAAc,IAAI,MAAM,EAAE;IAI1B,eAAe,IAAI,MAAM,EAAE;IAO3B,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE;IAO1C,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI;IAKpD,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IASlC,YAAY,CAAC,SAAS,EAAE,SAAS;IAIjC,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS;IASpC,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,iBAAiB;IAmBnD;;;;OAIG;IACH,mBAAmB,CAAC,QAAQ,EAAE,YAAY,GAAG,MAAM;YAMrC,gCAAgC;IAoB9C,OAAO,CAAC,6BAA6B;CAUtC;AAED,eAAO,MAAM,aAAa,oBAA2B,CAAC"}
1
+ {"version":3,"file":"entity-manager.d.ts","sourceRoot":"","sources":["../../src/entity/entity-manager.ts"],"names":[],"mappings":"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"}
@@ -5,7 +5,7 @@ import inflection from "inflection";
5
5
  import path from "path";
6
6
  import { prettifyError, z } from "zod";
7
7
  import { Sonamu } from "../api/sonamu.js";
8
- import { EntityJsonSchema } from "../types/types.js";
8
+ import { EntityJsonSchema, isSearchTextJsonSourceZodType, isSearchTextProp, SonamuFileArraySchema, SonamuFileSchema } from "../types/types.js";
9
9
  import { globAsync } from "../utils/async-utils.js";
10
10
  import { importMembers } from "../utils/esm-utils.js";
11
11
  import { runtimePath } from "../utils/path-utils.js";
@@ -30,9 +30,12 @@ class EntityManagerClass {
30
30
  const errorMessage = prettifyError(error);
31
31
  console.error(chalk.red(`Invalid entity.json schema: ${relativePath}\n${chalk.yellow(errorMessage)}`));
32
32
  }
33
- await this.register(json);
33
+ await this.register(json, {
34
+ deferSearchTextJsonSourceValidation: true
35
+ });
34
36
  }
35
37
  await this.registerNonEntityTypeModulePaths();
38
+ await this.validateAllRegisteredSearchTextJsonSources();
36
39
  this.isAutoloaded = true;
37
40
  }
38
41
  schemaValidate(json) {
@@ -46,12 +49,73 @@ class EntityManagerClass {
46
49
  this.isAutoloaded = false;
47
50
  return await this.autoload(doSilent);
48
51
  }
49
- async register(json) {
52
+ async register(json, options = {}) {
50
53
  const entity = new Entity(json);
51
54
  await entity.registerModulePaths();
55
+ if (!options.deferSearchTextJsonSourceValidation) {
56
+ await this.validateSearchTextJsonSources(entity);
57
+ }
52
58
  entity.registerTableSpecs();
53
59
  this.entities.set(json.id, entity);
54
60
  }
61
+ async validateAllRegisteredSearchTextJsonSources() {
62
+ for (const entity of this.entities.values()){
63
+ await this.validateSearchTextJsonSources(entity);
64
+ }
65
+ }
66
+ async validateSearchTextJsonSources(entity) {
67
+ const propsByName = new Map(entity.props.map((prop)=>[
68
+ prop.name,
69
+ prop
70
+ ]));
71
+ for (const prop of entity.props){
72
+ if (!isSearchTextProp(prop)) {
73
+ continue;
74
+ }
75
+ for (const source of prop.sourceColumns){
76
+ const sourceProp = propsByName.get(source.name);
77
+ if (!sourceProp || sourceProp.type !== "json") {
78
+ continue;
79
+ }
80
+ const zodType = await this.resolveSearchTextJsonSourceType(entity, sourceProp.id);
81
+ if (!zodType) {
82
+ throw new Error(`searchText source "${source.name}"의 json 타입 "${sourceProp.id}"을(를) 로드할 수 없습니다.`);
83
+ }
84
+ if (!isSearchTextJsonSourceZodType(zodType)) {
85
+ throw new Error(`searchText source "${source.name}"의 json 타입 "${sourceProp.id}"은(는) unwrap 후 z.array(z.string()) 이어야 합니다.`);
86
+ }
87
+ }
88
+ }
89
+ }
90
+ async resolveSearchTextJsonSourceType(entity, typeId) {
91
+ const localType = entity.types[typeId];
92
+ if (localType instanceof z.ZodType) {
93
+ return localType;
94
+ }
95
+ for (const registeredEntity of this.entities.values()){
96
+ const registeredType = registeredEntity.types[typeId];
97
+ if (registeredType instanceof z.ZodType) {
98
+ return registeredType;
99
+ }
100
+ }
101
+ if (typeId === "SonamuFile") {
102
+ return SonamuFileSchema;
103
+ }
104
+ if (typeId === "SonamuFile[]") {
105
+ return SonamuFileArraySchema;
106
+ }
107
+ const modulePath = this.modulePaths.get(typeId);
108
+ if (!modulePath) {
109
+ return null;
110
+ }
111
+ const moduleFilePath = path.join(Sonamu.apiRootPath, runtimePath(`dist/application/${modulePath}.js`));
112
+ const importedMembers = await importMembers(moduleFilePath);
113
+ const matched = importedMembers.find(({ name })=>name === typeId);
114
+ if (!matched || !(matched.value instanceof z.ZodType)) {
115
+ return null;
116
+ }
117
+ return matched.value;
118
+ }
55
119
  get(entityId) {
56
120
  const entity = this.entities.get(entityId);
57
121
  if (entity === undefined) {
@@ -159,4 +223,4 @@ class EntityManagerClass {
159
223
  }
160
224
  export const EntityManager = new EntityManagerClass();
161
225
 
162
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbnRpdHkvZW50aXR5LW1hbmFnZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFzc2VydCBmcm9tIFwiYXNzZXJ0XCI7XG5pbXBvcnQgY2hhbGsgZnJvbSBcImNoYWxrXCI7XG5pbXBvcnQgeyBnbG9iLCByZWFkRmlsZSB9IGZyb20gXCJmcy9wcm9taXNlc1wiO1xuaW1wb3J0IGluZmxlY3Rpb24gZnJvbSBcImluZmxlY3Rpb25cIjtcbmltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgeyBwcmV0dGlmeUVycm9yLCB6IH0gZnJvbSBcInpvZFwiO1xuaW1wb3J0IHsgU29uYW11IH0gZnJvbSBcIi4uL2FwaS9zb25hbXVcIjtcbmltcG9ydCB7IHR5cGUgRW50aXR5SW5kZXgsIHR5cGUgRW50aXR5SnNvbiwgRW50aXR5SnNvblNjaGVtYSB9IGZyb20gXCIuLi90eXBlcy90eXBlc1wiO1xuaW1wb3J0IHsgZ2xvYkFzeW5jIH0gZnJvbSBcIi4uL3V0aWxzL2FzeW5jLXV0aWxzXCI7XG5pbXBvcnQgeyBpbXBvcnRNZW1iZXJzIH0gZnJvbSBcIi4uL3V0aWxzL2VzbS11dGlsc1wiO1xuaW1wb3J0IHR5cGUgeyBBYnNvbHV0ZVBhdGggfSBmcm9tIFwiLi4vdXRpbHMvcGF0aC11dGlsc1wiO1xuaW1wb3J0IHsgcnVudGltZVBhdGggfSBmcm9tIFwiLi4vdXRpbHMvcGF0aC11dGlsc1wiO1xuaW1wb3J0IHsgRW50aXR5IH0gZnJvbSBcIi4vZW50aXR5XCI7XG5cbmV4cG9ydCB0eXBlIEVudGl0eU5hbWVzUmVjb3JkID0gUmVjb3JkPFxuICBcImZzXCIgfCBcImZzUGx1cmFsXCIgfCBcImNhbWVsXCIgfCBcImNhbWVsUGx1cmFsXCIgfCBcImNhcGl0YWxcIiB8IFwiY2FwaXRhbFBsdXJhbFwiIHwgXCJ1cHBlclwiIHwgXCJjb25zdGFudFwiLFxuICBzdHJpbmdcbj47XG5leHBvcnQgdHlwZSBUYWJsZVNwZWMgPSB7XG4gIG5hbWU6IHN0cmluZztcbiAgdW5pcXVlSW5kZXhlczogRW50aXR5SW5kZXhbXTtcbiAganNvbkNvbHVtbnM6IHN0cmluZ1tdO1xufTtcbmNsYXNzIEVudGl0eU1hbmFnZXJDbGFzcyB7XG4gIHByaXZhdGUgZW50aXRpZXM6IE1hcDxzdHJpbmcsIEVudGl0eT4gPSBuZXcgTWFwKCk7XG4gIHB1YmxpYyBtb2R1bGVQYXRoczogTWFwPHN0cmluZywgc3RyaW5nPiA9IG5ldyBNYXAoKTtcbiAgcHJpdmF0ZSB0YWJsZVNwZWNzOiBNYXA8c3RyaW5nLCBUYWJsZVNwZWM+ID0gbmV3IE1hcCgpO1xuICBwdWJsaWMgaXNBdXRvbG9hZGVkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLy8g6rK966GcIOyghOuLrOuwm+yVhCDrqqjrk6AgZW50aXR5Lmpzb24g7YyM7J28IOuhnOuTnFxuICBhc3luYyBhdXRvbG9hZChfOiBib29sZWFuID0gZmFsc2UpIHtcbiAgICBpZiAodGhpcy5pc0F1dG9sb2FkZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgcGF0aFBhdHRlcm4gPSBwYXRoLmpvaW4oU29uYW11LmFwaVJvb3RQYXRoLCBcIi9zcmMvYXBwbGljYXRpb24vKiovKi5lbnRpdHkuanNvblwiKTtcblxuICAgIGZvciBhd2FpdCAoY29uc3QgZmlsZSBvZiBnbG9iKHBhdGgucmVzb2x2ZShwYXRoUGF0dGVybikpKSB7XG4gICAgICBjb25zdCBqc29uID0gSlNPTi5wYXJzZSgoYXdhaXQgcmVhZEZpbGUoZmlsZSkpLnRvU3RyaW5nKCkpO1xuXG4gICAgICAvLyBlbnRpdHkuanNvbiDsiqTtgqTrp4gg6rKA7KadXG4gICAgICBjb25zdCBlcnJvciA9IHRoaXMuc2NoZW1hVmFsaWRhdGUoanNvbik7XG4gICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgY29uc3QgcmVsYXRpdmVQYXRoID0gcGF0aC5yZWxhdGl2ZShTb25hbXUuYXBpUm9vdFBhdGgsIGZpbGUpO1xuICAgICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBwcmV0dGlmeUVycm9yKGVycm9yKTtcbiAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICBjaGFsay5yZWQoYEludmFsaWQgZW50aXR5Lmpzb24gc2NoZW1hOiAke3JlbGF0aXZlUGF0aH1cXG4ke2NoYWxrLnllbGxvdyhlcnJvck1lc3NhZ2UpfWApLFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBhd2FpdCB0aGlzLnJlZ2lzdGVyKGpzb24pO1xuICAgIH1cblxuICAgIGF3YWl0IHRoaXMucmVnaXN0ZXJOb25FbnRpdHlUeXBlTW9kdWxlUGF0aHMoKTtcblxuICAgIHRoaXMuaXNBdXRvbG9hZGVkID0gdHJ1ZTtcbiAgfVxuXG4gIHNjaGVtYVZhbGlkYXRlKGpzb246IHVua25vd24pIHtcbiAgICBjb25zdCByZXN1bHQgPSBFbnRpdHlKc29uU2NoZW1hLnNhZmVQYXJzZShqc29uKTtcbiAgICByZXR1cm4gcmVzdWx0LnN1Y2Nlc3MgPyBudWxsIDogcmVzdWx0LmVycm9yO1xuICB9XG5cbiAgYXN5bmMgcmVsb2FkKGRvU2lsZW50OiBib29sZWFuID0gZmFsc2UpIHtcbiAgICB0aGlzLmVudGl0aWVzLmNsZWFyKCk7XG4gICAgdGhpcy5tb2R1bGVQYXRocy5jbGVhcigpO1xuICAgIHRoaXMudGFibGVTcGVjcy5jbGVhcigpO1xuICAgIHRoaXMuaXNBdXRvbG9hZGVkID0gZmFsc2U7XG5cbiAgICByZXR1cm4gYXdhaXQgdGhpcy5hdXRvbG9hZChkb1NpbGVudCk7XG4gIH1cblxuICBhc3luYyByZWdpc3Rlcihqc29uOiBFbnRpdHlKc29uKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgZW50aXR5ID0gbmV3IEVudGl0eShqc29uKTtcbiAgICBhd2FpdCBlbnRpdHkucmVnaXN0ZXJNb2R1bGVQYXRocygpO1xuICAgIGVudGl0eS5yZWdpc3RlclRhYmxlU3BlY3MoKTtcbiAgICB0aGlzLmVudGl0aWVzLnNldChqc29uLmlkLCBlbnRpdHkpO1xuICB9XG5cbiAgZ2V0KGVudGl0eUlkOiBzdHJpbmcpOiBFbnRpdHkge1xuICAgIGNvbnN0IGVudGl0eSA9IHRoaXMuZW50aXRpZXMuZ2V0KGVudGl0eUlkKTtcbiAgICBpZiAoZW50aXR5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihg7KG07J6s7ZWY7KeAIOyViuuKlCBFbnRpdHkg7JqU7LKtICR7ZW50aXR5SWR9YCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGVudGl0eTtcbiAgfVxuXG4gIGdldEJ5VGFibGUodGFibGU6IHN0cmluZyk6IEVudGl0eSB7XG4gICAgY29uc3QgZW50aXR5ID0gQXJyYXkuZnJvbSh0aGlzLmVudGl0aWVzLnZhbHVlcygpKS5maW5kKChlbnRpdHkpID0+IGVudGl0eS50YWJsZSA9PT0gdGFibGUpO1xuICAgIGlmIChlbnRpdHkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGDsobTsnqztlZjsp4Ag7JWK64qUIEVudGl0eSDsmpTssq0gJHt0YWJsZX1gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZW50aXR5O1xuICB9XG5cbiAgZXhpc3RzKGVudGl0eUlkOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBjb25zdCBlbnRpdHkgPSB0aGlzLmVudGl0aWVzLmdldChlbnRpdHlJZCk7XG4gICAgcmV0dXJuIGVudGl0eSAhPT0gdW5kZWZpbmVkO1xuICB9XG5cbiAgZ2V0QWxsSWRzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gQXJyYXkuZnJvbShFbnRpdHlNYW5hZ2VyLmVudGl0aWVzLmtleXMoKSkuc29ydCgpO1xuICB9XG5cbiAgZ2V0QWxsRW50aXRpZXMoKTogRW50aXR5W10ge1xuICAgIHJldHVybiBBcnJheS5mcm9tKHRoaXMuZW50aXRpZXMudmFsdWVzKCkpO1xuICB9XG5cbiAgZ2V0QWxsUGFyZW50SWRzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdGhpcy5nZXRBbGxJZHMoKS5maWx0ZXIoKGVudGl0eUlkKSA9PiB7XG4gICAgICBjb25zdCBlbnRpdHkgPSB0aGlzLmdldChlbnRpdHlJZCk7XG4gICAgICByZXR1cm4gZW50aXR5LnBhcmVudElkID09PSB1bmRlZmluZWQ7XG4gICAgfSk7XG4gIH1cblxuICBnZXRDaGlsZHJlbklkcyhwYXJlbnRJZDogc3RyaW5nKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLmdldEFsbElkcygpLmZpbHRlcigoZW50aXR5SWQpID0+IHtcbiAgICAgIGNvbnN0IGVudGl0eSA9IHRoaXMuZ2V0KGVudGl0eUlkKTtcbiAgICAgIHJldHVybiBlbnRpdHkucGFyZW50SWQgPT09IHBhcmVudElkO1xuICAgIH0pO1xuICB9XG5cbiAgc2V0TW9kdWxlUGF0aChrZXk6IHN0cmluZywgbW9kdWxlUGF0aDogc3RyaW5nKTogdm9pZCB7XG4gICAgLy8gY29uc29sZS5kZWJ1ZyhjaGFsay5jeWFuKGBzZXRNb2R1bGVQYXRoIDo6ICR7a2V5fSA6OiAke21vZHVsZVBhdGh9YCkpO1xuICAgIHRoaXMubW9kdWxlUGF0aHMuc2V0KGtleSwgbW9kdWxlUGF0aCk7XG4gIH1cblxuICBnZXRNb2R1bGVQYXRoKGtleTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBtb2R1bGVQYXRoID0gdGhpcy5tb2R1bGVQYXRocy5nZXQoa2V5KTtcbiAgICBpZiAobW9kdWxlUGF0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYOyhtOyerO2VmOyngCDslYrripQg66qo65OIIO2MqOyKpCDsmpTssq0gJHtrZXl9YCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1vZHVsZVBhdGg7XG4gIH1cblxuICBzZXRUYWJsZVNwZWModGFibGVTcGVjOiBUYWJsZVNwZWMpIHtcbiAgICB0aGlzLnRhYmxlU3BlY3Muc2V0KHRhYmxlU3BlYy5uYW1lLCB0YWJsZVNwZWMpO1xuICB9XG5cbiAgZ2V0VGFibGVTcGVjKGtleTogc3RyaW5nKTogVGFibGVTcGVjIHtcbiAgICBjb25zdCB0YWJsZVNwZWMgPSB0aGlzLnRhYmxlU3BlY3MuZ2V0KGtleSk7XG4gICAgaWYgKHRhYmxlU3BlYyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYOyhtOyerO2VmOyngCDslYrripQg7YWM7J2067iUIOyKpO2OmSDsmpTssq0gJHtrZXl9YCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRhYmxlU3BlYztcbiAgfVxuXG4gIGdldE5hbWVzRnJvbUlkKGVudGl0eUlkOiBzdHJpbmcpOiBFbnRpdHlOYW1lc1JlY29yZCB7XG4gICAgLy8gZW50aXR5SWTqsIAg64uo67O17IiYIOuPme2YlSDri6jslrTsnbgg6rK97JqwIExpc3Qg67aZ7Jes7IScIOyDneyEsVxuICAgIGNvbnN0IHBsdXJhbGl6ZWQgPVxuICAgICAgaW5mbGVjdGlvbi5wbHVyYWxpemUoZW50aXR5SWQpID09PSBlbnRpdHlJZFxuICAgICAgICA/IGAke2VudGl0eUlkfUxpc3RgXG4gICAgICAgIDogaW5mbGVjdGlvbi5wbHVyYWxpemUoZW50aXR5SWQpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGZzOiBpbmZsZWN0aW9uLmRhc2hlcml6ZShpbmZsZWN0aW9uLnVuZGVyc2NvcmUoZW50aXR5SWQpKS50b0xvd2VyQ2FzZSgpLFxuICAgICAgZnNQbHVyYWw6IGluZmxlY3Rpb24uZGFzaGVyaXplKGluZmxlY3Rpb24udW5kZXJzY29yZShwbHVyYWxpemVkKSkudG9Mb3dlckNhc2UoKSxcbiAgICAgIGNhbWVsOiBpbmZsZWN0aW9uLmNhbWVsaXplKGVudGl0eUlkLCB0cnVlKSxcbiAgICAgIGNhbWVsUGx1cmFsOiBpbmZsZWN0aW9uLmNhbWVsaXplKHBsdXJhbGl6ZWQsIHRydWUpLFxuICAgICAgY2FwaXRhbDogZW50aXR5SWQsXG4gICAgICBjYXBpdGFsUGx1cmFsOiBwbHVyYWxpemVkLFxuICAgICAgdXBwZXI6IGVudGl0eUlkLnRvVXBwZXJDYXNlKCksXG4gICAgICBjb25zdGFudDogaW5mbGVjdGlvbi51bmRlcnNjb3JlKGVudGl0eUlkKS50b1VwcGVyQ2FzZSgpLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogRW50aXR5SWTripQgTW9kZWzsnYQg7KCc7Jm47ZWcIFBhc2NhbENhc2Ug7J2066aE7J6F64uI64ukLiAoZXguIFwiVXNlclwiKVxuICAgKiBAcGFyYW0gZmlsZVBhdGhcbiAgICogQHJldHVybnNcbiAgICovXG4gIGdldEVudGl0eUlkRnJvbVBhdGgoZmlsZVBhdGg6IEFic29sdXRlUGF0aCk6IHN0cmluZyB7XG4gICAgY29uc3QgbWF0Y2hlZCA9IGZpbGVQYXRoLm1hdGNoKC9hcHBsaWNhdGlvblxcLyguKylcXC8vKTtcbiAgICBhc3NlcnQobWF0Y2hlZD8uWzFdKTtcbiAgICByZXR1cm4gaW5mbGVjdGlvbi5jYW1lbGl6ZShtYXRjaGVkWzFdLnJlcGxhY2UoLy0vZywgXCJfXCIpKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcmVnaXN0ZXJOb25FbnRpdHlUeXBlTW9kdWxlUGF0aHMoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgdHlwZVBhdGhzUGF0dGVybnMgPSBbXG4gICAgICBwYXRoLmpvaW4oU29uYW11LmFwaVJvb3RQYXRoLCBydW50aW1lUGF0aChcInNyYy9hcHBsaWNhdGlvbi8qKi8qLnR5cGVzLnRzXCIpKSxcbiAgICAgIHBhdGguam9pbihTb25hbXUuYXBpUm9vdFBhdGgsIHJ1bnRpbWVQYXRoKFwic3JjL2FwcGxpY2F0aW9uLyoqLyouZ2VuZXJhdGVkLnRzXCIpKSxcbiAgICBdO1xuICAgIGNvbnN0IHR5cGVQYXRocyA9IChcbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKHR5cGVQYXRoc1BhdHRlcm5zLm1hcCgocGF0dGVybikgPT4gZ2xvYkFzeW5jKHBhdHRlcm4pKSlcbiAgICApLmZsYXQoKTtcblxuICAgIGZvciAoY29uc3QgZmlsZVBhdGggb2YgdHlwZVBhdGhzKSB7XG4gICAgICBjb25zdCBtb2R1bGVQYXRoID0gdGhpcy5nZXRNb2R1bGVQYXRoRnJvbVR5cGVGaWxlUGF0aChmaWxlUGF0aCk7XG4gICAgICBjb25zdCBpbXBvcnRlZE1lbWJlcnMgPSBhd2FpdCBpbXBvcnRNZW1iZXJzPHVua25vd24+KGZpbGVQYXRoKTtcbiAgICAgIGZvciAoY29uc3QgeyBuYW1lLCB2YWx1ZSB9IG9mIGltcG9ydGVkTWVtYmVycykge1xuICAgICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiB6LlpvZFR5cGUpIHtcbiAgICAgICAgICB0aGlzLnNldE1vZHVsZVBhdGgobmFtZSwgbW9kdWxlUGF0aCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldE1vZHVsZVBhdGhGcm9tVHlwZUZpbGVQYXRoKGZpbGVQYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IG5vcm1hbGl6ZWRQYXRoID0gZmlsZVBhdGgucmVwbGFjZUFsbChcIlxcXFxcIiwgXCIvXCIpO1xuICAgIGNvbnN0IG1hdGNoZWQgPSBub3JtYWxpemVkUGF0aC5tYXRjaCgvXFwvKD86c3JjfGRpc3QpXFwvYXBwbGljYXRpb25cXC8oLispXFwuKD86dHN8anMpJC8pO1xuXG4gICAgaWYgKCFtYXRjaGVkPy5bMV0pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihg7YOA7J6FIO2MjOydvOydmCDrqqjrk4gg6rK966Gc66W8IOqzhOyCsO2VoCDsiJgg7JeG7Iq164uI64ukOiAke2ZpbGVQYXRofWApO1xuICAgIH1cblxuICAgIHJldHVybiBtYXRjaGVkWzFdO1xuICB9XG59XG5cbmV4cG9ydCBjb25zdCBFbnRpdHlNYW5hZ2VyID0gbmV3IEVudGl0eU1hbmFnZXJDbGFzcygpO1xuIl0sIm5hbWVzIjpbImFzc2VydCIsImNoYWxrIiwiZ2xvYiIsInJlYWRGaWxlIiwiaW5mbGVjdGlvbiIsInBhdGgiLCJwcmV0dGlmeUVycm9yIiwieiIsIlNvbmFtdSIsIkVudGl0eUpzb25TY2hlbWEiLCJnbG9iQXN5bmMiLCJpbXBvcnRNZW1iZXJzIiwicnVudGltZVBhdGgiLCJFbnRpdHkiLCJFbnRpdHlNYW5hZ2VyQ2xhc3MiLCJlbnRpdGllcyIsIk1hcCIsIm1vZHVsZVBhdGhzIiwidGFibGVTcGVjcyIsImlzQXV0b2xvYWRlZCIsImF1dG9sb2FkIiwiXyIsInBhdGhQYXR0ZXJuIiwiam9pbiIsImFwaVJvb3RQYXRoIiwiZmlsZSIsInJlc29sdmUiLCJqc29uIiwiSlNPTiIsInBhcnNlIiwidG9TdHJpbmciLCJlcnJvciIsInNjaGVtYVZhbGlkYXRlIiwicmVsYXRpdmVQYXRoIiwicmVsYXRpdmUiLCJlcnJvck1lc3NhZ2UiLCJjb25zb2xlIiwicmVkIiwieWVsbG93IiwicmVnaXN0ZXIiLCJyZWdpc3Rlck5vbkVudGl0eVR5cGVNb2R1bGVQYXRocyIsInJlc3VsdCIsInNhZmVQYXJzZSIsInN1Y2Nlc3MiLCJyZWxvYWQiLCJkb1NpbGVudCIsImNsZWFyIiwiZW50aXR5IiwicmVnaXN0ZXJNb2R1bGVQYXRocyIsInJlZ2lzdGVyVGFibGVTcGVjcyIsInNldCIsImlkIiwiZ2V0IiwiZW50aXR5SWQiLCJ1bmRlZmluZWQiLCJFcnJvciIsImdldEJ5VGFibGUiLCJ0YWJsZSIsIkFycmF5IiwiZnJvbSIsInZhbHVlcyIsImZpbmQiLCJleGlzdHMiLCJnZXRBbGxJZHMiLCJFbnRpdHlNYW5hZ2VyIiwia2V5cyIsInNvcnQiLCJnZXRBbGxFbnRpdGllcyIsImdldEFsbFBhcmVudElkcyIsImZpbHRlciIsInBhcmVudElkIiwiZ2V0Q2hpbGRyZW5JZHMiLCJzZXRNb2R1bGVQYXRoIiwia2V5IiwibW9kdWxlUGF0aCIsImdldE1vZHVsZVBhdGgiLCJzZXRUYWJsZVNwZWMiLCJ0YWJsZVNwZWMiLCJuYW1lIiwiZ2V0VGFibGVTcGVjIiwiZ2V0TmFtZXNGcm9tSWQiLCJwbHVyYWxpemVkIiwicGx1cmFsaXplIiwiZnMiLCJkYXNoZXJpemUiLCJ1bmRlcnNjb3JlIiwidG9Mb3dlckNhc2UiLCJmc1BsdXJhbCIsImNhbWVsIiwiY2FtZWxpemUiLCJjYW1lbFBsdXJhbCIsImNhcGl0YWwiLCJjYXBpdGFsUGx1cmFsIiwidXBwZXIiLCJ0b1VwcGVyQ2FzZSIsImNvbnN0YW50IiwiZ2V0RW50aXR5SWRGcm9tUGF0aCIsImZpbGVQYXRoIiwibWF0Y2hlZCIsIm1hdGNoIiwicmVwbGFjZSIsInR5cGVQYXRoc1BhdHRlcm5zIiwidHlwZVBhdGhzIiwiUHJvbWlzZSIsImFsbCIsIm1hcCIsInBhdHRlcm4iLCJmbGF0IiwiZ2V0TW9kdWxlUGF0aEZyb21UeXBlRmlsZVBhdGgiLCJpbXBvcnRlZE1lbWJlcnMiLCJ2YWx1ZSIsIlpvZFR5cGUiLCJub3JtYWxpemVkUGF0aCIsInJlcGxhY2VBbGwiXSwibWFwcGluZ3MiOiJBQUFBLE9BQU9BLFlBQVksU0FBUztBQUM1QixPQUFPQyxXQUFXLFFBQVE7QUFDMUIsU0FBU0MsSUFBSSxFQUFFQyxRQUFRLFFBQVEsbUJBQWM7QUFDN0MsT0FBT0MsZ0JBQWdCLGFBQWE7QUFDcEMsT0FBT0MsVUFBVSxPQUFPO0FBQ3hCLFNBQVNDLGFBQWEsRUFBRUMsQ0FBQyxRQUFRLE1BQU07QUFDdkMsU0FBU0MsTUFBTSxRQUFRLG1CQUFnQjtBQUN2QyxTQUE0Q0MsZ0JBQWdCLFFBQVEsb0JBQWlCO0FBQ3JGLFNBQVNDLFNBQVMsUUFBUSwwQkFBdUI7QUFDakQsU0FBU0MsYUFBYSxRQUFRLHdCQUFxQjtBQUVuRCxTQUFTQyxXQUFXLFFBQVEseUJBQXNCO0FBQ2xELFNBQVNDLE1BQU0sUUFBUSxjQUFXO0FBV2xDLE1BQU1DO0lBQ0lDLFdBQWdDLElBQUlDLE1BQU07SUFDM0NDLGNBQW1DLElBQUlELE1BQU07SUFDNUNFLGFBQXFDLElBQUlGLE1BQU07SUFDaERHLGVBQXdCLE1BQU07SUFFckMsK0JBQStCO0lBQy9CLE1BQU1DLFNBQVNDLElBQWEsS0FBSyxFQUFFO1FBQ2pDLElBQUksSUFBSSxDQUFDRixZQUFZLEVBQUU7WUFDckI7UUFDRjtRQUNBLE1BQU1HLGNBQWNqQixLQUFLa0IsSUFBSSxDQUFDZixPQUFPZ0IsV0FBVyxFQUFFO1FBRWxELFdBQVcsTUFBTUMsUUFBUXZCLEtBQUtHLEtBQUtxQixPQUFPLENBQUNKLGNBQWU7WUFDeEQsTUFBTUss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
226
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbnRpdHkvZW50aXR5LW1hbmFnZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFzc2VydCBmcm9tIFwiYXNzZXJ0XCI7XG5pbXBvcnQgY2hhbGsgZnJvbSBcImNoYWxrXCI7XG5pbXBvcnQgeyBnbG9iLCByZWFkRmlsZSB9IGZyb20gXCJmcy9wcm9taXNlc1wiO1xuaW1wb3J0IGluZmxlY3Rpb24gZnJvbSBcImluZmxlY3Rpb25cIjtcbmltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgeyBwcmV0dGlmeUVycm9yLCB6IH0gZnJvbSBcInpvZFwiO1xuaW1wb3J0IHsgU29uYW11IH0gZnJvbSBcIi4uL2FwaS9zb25hbXVcIjtcbmltcG9ydCB7XG4gIHR5cGUgRW50aXR5SW5kZXgsXG4gIHR5cGUgRW50aXR5SnNvbixcbiAgRW50aXR5SnNvblNjaGVtYSxcbiAgaXNTZWFyY2hUZXh0SnNvblNvdXJjZVpvZFR5cGUsXG4gIGlzU2VhcmNoVGV4dFByb3AsXG4gIFNvbmFtdUZpbGVBcnJheVNjaGVtYSxcbiAgU29uYW11RmlsZVNjaGVtYSxcbn0gZnJvbSBcIi4uL3R5cGVzL3R5cGVzXCI7XG5pbXBvcnQgeyBnbG9iQXN5bmMgfSBmcm9tIFwiLi4vdXRpbHMvYXN5bmMtdXRpbHNcIjtcbmltcG9ydCB7IGltcG9ydE1lbWJlcnMgfSBmcm9tIFwiLi4vdXRpbHMvZXNtLXV0aWxzXCI7XG5pbXBvcnQgdHlwZSB7IEFic29sdXRlUGF0aCB9IGZyb20gXCIuLi91dGlscy9wYXRoLXV0aWxzXCI7XG5pbXBvcnQgeyBydW50aW1lUGF0aCB9IGZyb20gXCIuLi91dGlscy9wYXRoLXV0aWxzXCI7XG5pbXBvcnQgeyBFbnRpdHkgfSBmcm9tIFwiLi9lbnRpdHlcIjtcblxuZXhwb3J0IHR5cGUgRW50aXR5TmFtZXNSZWNvcmQgPSBSZWNvcmQ8XG4gIFwiZnNcIiB8IFwiZnNQbHVyYWxcIiB8IFwiY2FtZWxcIiB8IFwiY2FtZWxQbHVyYWxcIiB8IFwiY2FwaXRhbFwiIHwgXCJjYXBpdGFsUGx1cmFsXCIgfCBcInVwcGVyXCIgfCBcImNvbnN0YW50XCIsXG4gIHN0cmluZ1xuPjtcbmV4cG9ydCB0eXBlIFRhYmxlU3BlYyA9IHtcbiAgbmFtZTogc3RyaW5nO1xuICB1bmlxdWVJbmRleGVzOiBFbnRpdHlJbmRleFtdO1xuICBqc29uQ29sdW1uczogc3RyaW5nW107XG59O1xuY2xhc3MgRW50aXR5TWFuYWdlckNsYXNzIHtcbiAgcHJpdmF0ZSBlbnRpdGllczogTWFwPHN0cmluZywgRW50aXR5PiA9IG5ldyBNYXAoKTtcbiAgcHVibGljIG1vZHVsZVBhdGhzOiBNYXA8c3RyaW5nLCBzdHJpbmc+ID0gbmV3IE1hcCgpO1xuICBwcml2YXRlIHRhYmxlU3BlY3M6IE1hcDxzdHJpbmcsIFRhYmxlU3BlYz4gPSBuZXcgTWFwKCk7XG4gIHB1YmxpYyBpc0F1dG9sb2FkZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvLyDqsr3roZwg7KCE64us67Cb7JWEIOuqqOuToCBlbnRpdHkuanNvbiDtjIzsnbwg66Gc65OcXG4gIGFzeW5jIGF1dG9sb2FkKF86IGJvb2xlYW4gPSBmYWxzZSkge1xuICAgIGlmICh0aGlzLmlzQXV0b2xvYWRlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBwYXRoUGF0dGVybiA9IHBhdGguam9pbihTb25hbXUuYXBpUm9vdFBhdGgsIFwiL3NyYy9hcHBsaWNhdGlvbi8qKi8qLmVudGl0eS5qc29uXCIpO1xuXG4gICAgZm9yIGF3YWl0IChjb25zdCBmaWxlIG9mIGdsb2IocGF0aC5yZXNvbHZlKHBhdGhQYXR0ZXJuKSkpIHtcbiAgICAgIGNvbnN0IGpzb24gPSBKU09OLnBhcnNlKChhd2FpdCByZWFkRmlsZShmaWxlKSkudG9TdHJpbmcoKSk7XG5cbiAgICAgIC8vIGVudGl0eS5qc29uIOyKpO2CpOuniCDqsoDspp1cbiAgICAgIGNvbnN0IGVycm9yID0gdGhpcy5zY2hlbWFWYWxpZGF0ZShqc29uKTtcbiAgICAgIGlmIChlcnJvcikge1xuICAgICAgICBjb25zdCByZWxhdGl2ZVBhdGggPSBwYXRoLnJlbGF0aXZlKFNvbmFtdS5hcGlSb290UGF0aCwgZmlsZSk7XG4gICAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IHByZXR0aWZ5RXJyb3IoZXJyb3IpO1xuICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgIGNoYWxrLnJlZChgSW52YWxpZCBlbnRpdHkuanNvbiBzY2hlbWE6ICR7cmVsYXRpdmVQYXRofVxcbiR7Y2hhbGsueWVsbG93KGVycm9yTWVzc2FnZSl9YCksXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGF3YWl0IHRoaXMucmVnaXN0ZXIoanNvbiwgeyBkZWZlclNlYXJjaFRleHRKc29uU291cmNlVmFsaWRhdGlvbjogdHJ1ZSB9KTtcbiAgICB9XG5cbiAgICBhd2FpdCB0aGlzLnJlZ2lzdGVyTm9uRW50aXR5VHlwZU1vZHVsZVBhdGhzKCk7XG4gICAgYXdhaXQgdGhpcy52YWxpZGF0ZUFsbFJlZ2lzdGVyZWRTZWFyY2hUZXh0SnNvblNvdXJjZXMoKTtcblxuICAgIHRoaXMuaXNBdXRvbG9hZGVkID0gdHJ1ZTtcbiAgfVxuXG4gIHNjaGVtYVZhbGlkYXRlKGpzb246IHVua25vd24pIHtcbiAgICBjb25zdCByZXN1bHQgPSBFbnRpdHlKc29uU2NoZW1hLnNhZmVQYXJzZShqc29uKTtcbiAgICByZXR1cm4gcmVzdWx0LnN1Y2Nlc3MgPyBudWxsIDogcmVzdWx0LmVycm9yO1xuICB9XG5cbiAgYXN5bmMgcmVsb2FkKGRvU2lsZW50OiBib29sZWFuID0gZmFsc2UpIHtcbiAgICB0aGlzLmVudGl0aWVzLmNsZWFyKCk7XG4gICAgdGhpcy5tb2R1bGVQYXRocy5jbGVhcigpO1xuICAgIHRoaXMudGFibGVTcGVjcy5jbGVhcigpO1xuICAgIHRoaXMuaXNBdXRvbG9hZGVkID0gZmFsc2U7XG5cbiAgICByZXR1cm4gYXdhaXQgdGhpcy5hdXRvbG9hZChkb1NpbGVudCk7XG4gIH1cblxuICBhc3luYyByZWdpc3RlcihcbiAgICBqc29uOiBFbnRpdHlKc29uLFxuICAgIG9wdGlvbnM6IHsgZGVmZXJTZWFyY2hUZXh0SnNvblNvdXJjZVZhbGlkYXRpb24/OiBib29sZWFuIH0gPSB7fSxcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgZW50aXR5ID0gbmV3IEVudGl0eShqc29uKTtcbiAgICBhd2FpdCBlbnRpdHkucmVnaXN0ZXJNb2R1bGVQYXRocygpO1xuICAgIGlmICghb3B0aW9ucy5kZWZlclNlYXJjaFRleHRKc29uU291cmNlVmFsaWRhdGlvbikge1xuICAgICAgYXdhaXQgdGhpcy52YWxpZGF0ZVNlYXJjaFRleHRKc29uU291cmNlcyhlbnRpdHkpO1xuICAgIH1cbiAgICBlbnRpdHkucmVnaXN0ZXJUYWJsZVNwZWNzKCk7XG4gICAgdGhpcy5lbnRpdGllcy5zZXQoanNvbi5pZCwgZW50aXR5KTtcbiAgfVxuXG4gIGFzeW5jIHZhbGlkYXRlQWxsUmVnaXN0ZXJlZFNlYXJjaFRleHRKc29uU291cmNlcygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBmb3IgKGNvbnN0IGVudGl0eSBvZiB0aGlzLmVudGl0aWVzLnZhbHVlcygpKSB7XG4gICAgICBhd2FpdCB0aGlzLnZhbGlkYXRlU2VhcmNoVGV4dEpzb25Tb3VyY2VzKGVudGl0eSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyB2YWxpZGF0ZVNlYXJjaFRleHRKc29uU291cmNlcyhlbnRpdHk6IEVudGl0eSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHByb3BzQnlOYW1lID0gbmV3IE1hcChlbnRpdHkucHJvcHMubWFwKChwcm9wKSA9PiBbcHJvcC5uYW1lLCBwcm9wXSkpO1xuXG4gICAgZm9yIChjb25zdCBwcm9wIG9mIGVudGl0eS5wcm9wcykge1xuICAgICAgaWYgKCFpc1NlYXJjaFRleHRQcm9wKHByb3ApKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBmb3IgKGNvbnN0IHNvdXJjZSBvZiBwcm9wLnNvdXJjZUNvbHVtbnMpIHtcbiAgICAgICAgY29uc3Qgc291cmNlUHJvcCA9IHByb3BzQnlOYW1lLmdldChzb3VyY2UubmFtZSk7XG4gICAgICAgIGlmICghc291cmNlUHJvcCB8fCBzb3VyY2VQcm9wLnR5cGUgIT09IFwianNvblwiKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB6b2RUeXBlID0gYXdhaXQgdGhpcy5yZXNvbHZlU2VhcmNoVGV4dEpzb25Tb3VyY2VUeXBlKGVudGl0eSwgc291cmNlUHJvcC5pZCk7XG4gICAgICAgIGlmICghem9kVHlwZSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIGBzZWFyY2hUZXh0IHNvdXJjZSBcIiR7c291cmNlLm5hbWV9XCLsnZgganNvbiDtg4DsnoUgXCIke3NvdXJjZVByb3AuaWR9XCLsnYQo66W8KSDroZzrk5ztlaAg7IiYIOyXhuyKteuLiOuLpC5gLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWlzU2VhcmNoVGV4dEpzb25Tb3VyY2Vab2RUeXBlKHpvZFR5cGUpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgYHNlYXJjaFRleHQgc291cmNlIFwiJHtzb3VyY2UubmFtZX1cIuydmCBqc29uIO2DgOyehSBcIiR7c291cmNlUHJvcC5pZH1cIuydgCjripQpIHVud3JhcCDtm4Qgei5hcnJheSh6LnN0cmluZygpKSDsnbTslrTslbwg7ZWp64uI64ukLmAsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcmVzb2x2ZVNlYXJjaFRleHRKc29uU291cmNlVHlwZShcbiAgICBlbnRpdHk6IEVudGl0eSxcbiAgICB0eXBlSWQ6IHN0cmluZyxcbiAgKTogUHJvbWlzZTx6LlpvZFR5cGVBbnkgfCBudWxsPiB7XG4gICAgY29uc3QgbG9jYWxUeXBlID0gZW50aXR5LnR5cGVzW3R5cGVJZF07XG4gICAgaWYgKGxvY2FsVHlwZSBpbnN0YW5jZW9mIHouWm9kVHlwZSkge1xuICAgICAgcmV0dXJuIGxvY2FsVHlwZTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IHJlZ2lzdGVyZWRFbnRpdHkgb2YgdGhpcy5lbnRpdGllcy52YWx1ZXMoKSkge1xuICAgICAgY29uc3QgcmVnaXN0ZXJlZFR5cGUgPSByZWdpc3RlcmVkRW50aXR5LnR5cGVzW3R5cGVJZF07XG4gICAgICBpZiAocmVnaXN0ZXJlZFR5cGUgaW5zdGFuY2VvZiB6LlpvZFR5cGUpIHtcbiAgICAgICAgcmV0dXJuIHJlZ2lzdGVyZWRUeXBlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0eXBlSWQgPT09IFwiU29uYW11RmlsZVwiKSB7XG4gICAgICByZXR1cm4gU29uYW11RmlsZVNjaGVtYTtcbiAgICB9XG4gICAgaWYgKHR5cGVJZCA9PT0gXCJTb25hbXVGaWxlW11cIikge1xuICAgICAgcmV0dXJuIFNvbmFtdUZpbGVBcnJheVNjaGVtYTtcbiAgICB9XG5cbiAgICBjb25zdCBtb2R1bGVQYXRoID0gdGhpcy5tb2R1bGVQYXRocy5nZXQodHlwZUlkKTtcbiAgICBpZiAoIW1vZHVsZVBhdGgpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IG1vZHVsZUZpbGVQYXRoID0gcGF0aC5qb2luKFxuICAgICAgU29uYW11LmFwaVJvb3RQYXRoLFxuICAgICAgcnVudGltZVBhdGgoYGRpc3QvYXBwbGljYXRpb24vJHttb2R1bGVQYXRofS5qc2ApLFxuICAgICk7XG4gICAgY29uc3QgaW1wb3J0ZWRNZW1iZXJzID0gYXdhaXQgaW1wb3J0TWVtYmVyczx1bmtub3duPihtb2R1bGVGaWxlUGF0aCk7XG4gICAgY29uc3QgbWF0Y2hlZCA9IGltcG9ydGVkTWVtYmVycy5maW5kKCh7IG5hbWUgfSkgPT4gbmFtZSA9PT0gdHlwZUlkKTtcbiAgICBpZiAoIW1hdGNoZWQgfHwgIShtYXRjaGVkLnZhbHVlIGluc3RhbmNlb2Ygei5ab2RUeXBlKSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1hdGNoZWQudmFsdWU7XG4gIH1cblxuICBnZXQoZW50aXR5SWQ6IHN0cmluZyk6IEVudGl0eSB7XG4gICAgY29uc3QgZW50aXR5ID0gdGhpcy5lbnRpdGllcy5nZXQoZW50aXR5SWQpO1xuICAgIGlmIChlbnRpdHkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGDsobTsnqztlZjsp4Ag7JWK64qUIEVudGl0eSDsmpTssq0gJHtlbnRpdHlJZH1gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZW50aXR5O1xuICB9XG5cbiAgZ2V0QnlUYWJsZSh0YWJsZTogc3RyaW5nKTogRW50aXR5IHtcbiAgICBjb25zdCBlbnRpdHkgPSBBcnJheS5mcm9tKHRoaXMuZW50aXRpZXMudmFsdWVzKCkpLmZpbmQoKGVudGl0eSkgPT4gZW50aXR5LnRhYmxlID09PSB0YWJsZSk7XG4gICAgaWYgKGVudGl0eSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYOyhtOyerO2VmOyngCDslYrripQgRW50aXR5IOyalOyyrSAke3RhYmxlfWApO1xuICAgIH1cblxuICAgIHJldHVybiBlbnRpdHk7XG4gIH1cblxuICBleGlzdHMoZW50aXR5SWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGVudGl0eSA9IHRoaXMuZW50aXRpZXMuZ2V0KGVudGl0eUlkKTtcbiAgICByZXR1cm4gZW50aXR5ICE9PSB1bmRlZmluZWQ7XG4gIH1cblxuICBnZXRBbGxJZHMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBBcnJheS5mcm9tKEVudGl0eU1hbmFnZXIuZW50aXRpZXMua2V5cygpKS5zb3J0KCk7XG4gIH1cblxuICBnZXRBbGxFbnRpdGllcygpOiBFbnRpdHlbXSB7XG4gICAgcmV0dXJuIEFycmF5LmZyb20odGhpcy5lbnRpdGllcy52YWx1ZXMoKSk7XG4gIH1cblxuICBnZXRBbGxQYXJlbnRJZHMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLmdldEFsbElkcygpLmZpbHRlcigoZW50aXR5SWQpID0+IHtcbiAgICAgIGNvbnN0IGVudGl0eSA9IHRoaXMuZ2V0KGVudGl0eUlkKTtcbiAgICAgIHJldHVybiBlbnRpdHkucGFyZW50SWQgPT09IHVuZGVmaW5lZDtcbiAgICB9KTtcbiAgfVxuXG4gIGdldENoaWxkcmVuSWRzKHBhcmVudElkOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0QWxsSWRzKCkuZmlsdGVyKChlbnRpdHlJZCkgPT4ge1xuICAgICAgY29uc3QgZW50aXR5ID0gdGhpcy5nZXQoZW50aXR5SWQpO1xuICAgICAgcmV0dXJuIGVudGl0eS5wYXJlbnRJZCA9PT0gcGFyZW50SWQ7XG4gICAgfSk7XG4gIH1cblxuICBzZXRNb2R1bGVQYXRoKGtleTogc3RyaW5nLCBtb2R1bGVQYXRoOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAvLyBjb25zb2xlLmRlYnVnKGNoYWxrLmN5YW4oYHNldE1vZHVsZVBhdGggOjogJHtrZXl9IDo6ICR7bW9kdWxlUGF0aH1gKSk7XG4gICAgdGhpcy5tb2R1bGVQYXRocy5zZXQoa2V5LCBtb2R1bGVQYXRoKTtcbiAgfVxuXG4gIGdldE1vZHVsZVBhdGgoa2V5OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IG1vZHVsZVBhdGggPSB0aGlzLm1vZHVsZVBhdGhzLmdldChrZXkpO1xuICAgIGlmIChtb2R1bGVQYXRoID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihg7KG07J6s7ZWY7KeAIOyViuuKlCDrqqjrk4gg7Yyo7IqkIOyalOyyrSAke2tleX1gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbW9kdWxlUGF0aDtcbiAgfVxuXG4gIHNldFRhYmxlU3BlYyh0YWJsZVNwZWM6IFRhYmxlU3BlYykge1xuICAgIHRoaXMudGFibGVTcGVjcy5zZXQodGFibGVTcGVjLm5hbWUsIHRhYmxlU3BlYyk7XG4gIH1cblxuICBnZXRUYWJsZVNwZWMoa2V5OiBzdHJpbmcpOiBUYWJsZVNwZWMge1xuICAgIGNvbnN0IHRhYmxlU3BlYyA9IHRoaXMudGFibGVTcGVjcy5nZXQoa2V5KTtcbiAgICBpZiAodGFibGVTcGVjID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihg7KG07J6s7ZWY7KeAIOyViuuKlCDthYzsnbTruJQg7Iqk7Y6ZIOyalOyyrSAke2tleX1gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGFibGVTcGVjO1xuICB9XG5cbiAgZ2V0TmFtZXNGcm9tSWQoZW50aXR5SWQ6IHN0cmluZyk6IEVudGl0eU5hbWVzUmVjb3JkIHtcbiAgICAvLyBlbnRpdHlJZOqwgCDri6jrs7XsiJgg64+Z7ZiVIOuLqOyWtOyduCDqsr3smrAgTGlzdCDrtpnsl6zshJwg7IOd7ISxXG4gICAgY29uc3QgcGx1cmFsaXplZCA9XG4gICAgICBpbmZsZWN0aW9uLnBsdXJhbGl6ZShlbnRpdHlJZCkgPT09IGVudGl0eUlkXG4gICAgICAgID8gYCR7ZW50aXR5SWR9TGlzdGBcbiAgICAgICAgOiBpbmZsZWN0aW9uLnBsdXJhbGl6ZShlbnRpdHlJZCk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgZnM6IGluZmxlY3Rpb24uZGFzaGVyaXplKGluZmxlY3Rpb24udW5kZXJzY29yZShlbnRpdHlJZCkpLnRvTG93ZXJDYXNlKCksXG4gICAgICBmc1BsdXJhbDogaW5mbGVjdGlvbi5kYXNoZXJpemUoaW5mbGVjdGlvbi51bmRlcnNjb3JlKHBsdXJhbGl6ZWQpKS50b0xvd2VyQ2FzZSgpLFxuICAgICAgY2FtZWw6IGluZmxlY3Rpb24uY2FtZWxpemUoZW50aXR5SWQsIHRydWUpLFxuICAgICAgY2FtZWxQbHVyYWw6IGluZmxlY3Rpb24uY2FtZWxpemUocGx1cmFsaXplZCwgdHJ1ZSksXG4gICAgICBjYXBpdGFsOiBlbnRpdHlJZCxcbiAgICAgIGNhcGl0YWxQbHVyYWw6IHBsdXJhbGl6ZWQsXG4gICAgICB1cHBlcjogZW50aXR5SWQudG9VcHBlckNhc2UoKSxcbiAgICAgIGNvbnN0YW50OiBpbmZsZWN0aW9uLnVuZGVyc2NvcmUoZW50aXR5SWQpLnRvVXBwZXJDYXNlKCksXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFbnRpdHlJZOuKlCBNb2RlbOydhCDsoJzsmbjtlZwgUGFzY2FsQ2FzZSDsnbTrpoTsnoXri4jri6QuIChleC4gXCJVc2VyXCIpXG4gICAqIEBwYXJhbSBmaWxlUGF0aFxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgZ2V0RW50aXR5SWRGcm9tUGF0aChmaWxlUGF0aDogQWJzb2x1dGVQYXRoKTogc3RyaW5nIHtcbiAgICBjb25zdCBtYXRjaGVkID0gZmlsZVBhdGgubWF0Y2goL2FwcGxpY2F0aW9uXFwvKC4rKVxcLy8pO1xuICAgIGFzc2VydChtYXRjaGVkPy5bMV0pO1xuICAgIHJldHVybiBpbmZsZWN0aW9uLmNhbWVsaXplKG1hdGNoZWRbMV0ucmVwbGFjZSgvLS9nLCBcIl9cIikpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyByZWdpc3Rlck5vbkVudGl0eVR5cGVNb2R1bGVQYXRocygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB0eXBlUGF0aHNQYXR0ZXJucyA9IFtcbiAgICAgIHBhdGguam9pbihTb25hbXUuYXBpUm9vdFBhdGgsIHJ1bnRpbWVQYXRoKFwic3JjL2FwcGxpY2F0aW9uLyoqLyoudHlwZXMudHNcIikpLFxuICAgICAgcGF0aC5qb2luKFNvbmFtdS5hcGlSb290UGF0aCwgcnVudGltZVBhdGgoXCJzcmMvYXBwbGljYXRpb24vKiovKi5nZW5lcmF0ZWQudHNcIikpLFxuICAgIF07XG4gICAgY29uc3QgdHlwZVBhdGhzID0gKFxuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwodHlwZVBhdGhzUGF0dGVybnMubWFwKChwYXR0ZXJuKSA9PiBnbG9iQXN5bmMocGF0dGVybikpKVxuICAgICkuZmxhdCgpO1xuXG4gICAgZm9yIChjb25zdCBmaWxlUGF0aCBvZiB0eXBlUGF0aHMpIHtcbiAgICAgIGNvbnN0IG1vZHVsZVBhdGggPSB0aGlzLmdldE1vZHVsZVBhdGhGcm9tVHlwZUZpbGVQYXRoKGZpbGVQYXRoKTtcbiAgICAgIGNvbnN0IGltcG9ydGVkTWVtYmVycyA9IGF3YWl0IGltcG9ydE1lbWJlcnM8dW5rbm93bj4oZmlsZVBhdGgpO1xuICAgICAgZm9yIChjb25zdCB7IG5hbWUsIHZhbHVlIH0gb2YgaW1wb3J0ZWRNZW1iZXJzKSB7XG4gICAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIHouWm9kVHlwZSkge1xuICAgICAgICAgIHRoaXMuc2V0TW9kdWxlUGF0aChuYW1lLCBtb2R1bGVQYXRoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0TW9kdWxlUGF0aEZyb21UeXBlRmlsZVBhdGgoZmlsZVBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3Qgbm9ybWFsaXplZFBhdGggPSBmaWxlUGF0aC5yZXBsYWNlQWxsKFwiXFxcXFwiLCBcIi9cIik7XG4gICAgY29uc3QgbWF0Y2hlZCA9IG5vcm1hbGl6ZWRQYXRoLm1hdGNoKC9cXC8oPzpzcmN8ZGlzdClcXC9hcHBsaWNhdGlvblxcLyguKylcXC4oPzp0c3xqcykkLyk7XG5cbiAgICBpZiAoIW1hdGNoZWQ/LlsxXSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGDtg4DsnoUg7YyM7J287J2YIOuqqOuTiCDqsr3roZzrpbwg6rOE7IKw7ZWgIOyImCDsl4bsirXri4jri6Q6ICR7ZmlsZVBhdGh9YCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1hdGNoZWRbMV07XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IEVudGl0eU1hbmFnZXIgPSBuZXcgRW50aXR5TWFuYWdlckNsYXNzKCk7XG4iXSwibmFtZXMiOlsiYXNzZXJ0IiwiY2hhbGsiLCJnbG9iIiwicmVhZEZpbGUiLCJpbmZsZWN0aW9uIiwicGF0aCIsInByZXR0aWZ5RXJyb3IiLCJ6IiwiU29uYW11IiwiRW50aXR5SnNvblNjaGVtYSIsImlzU2VhcmNoVGV4dEpzb25Tb3VyY2Vab2RUeXBlIiwiaXNTZWFyY2hUZXh0UHJvcCIsIlNvbmFtdUZpbGVBcnJheVNjaGVtYSIsIlNvbmFtdUZpbGVTY2hlbWEiLCJnbG9iQXN5bmMiLCJpbXBvcnRNZW1iZXJzIiwicnVudGltZVBhdGgiLCJFbnRpdHkiLCJFbnRpdHlNYW5hZ2VyQ2xhc3MiLCJlbnRpdGllcyIsIk1hcCIsIm1vZHVsZVBhdGhzIiwidGFibGVTcGVjcyIsImlzQXV0b2xvYWRlZCIsImF1dG9sb2FkIiwiXyIsInBhdGhQYXR0ZXJuIiwiam9pbiIsImFwaVJvb3RQYXRoIiwiZmlsZSIsInJlc29sdmUiLCJqc29uIiwiSlNPTiIsInBhcnNlIiwidG9TdHJpbmciLCJlcnJvciIsInNjaGVtYVZhbGlkYXRlIiwicmVsYXRpdmVQYXRoIiwicmVsYXRpdmUiLCJlcnJvck1lc3NhZ2UiLCJjb25zb2xlIiwicmVkIiwieWVsbG93IiwicmVnaXN0ZXIiLCJkZWZlclNlYXJjaFRleHRKc29uU291cmNlVmFsaWRhdGlvbiIsInJlZ2lzdGVyTm9uRW50aXR5VHlwZU1vZHVsZVBhdGhzIiwidmFsaWRhdGVBbGxSZWdpc3RlcmVkU2VhcmNoVGV4dEpzb25Tb3VyY2VzIiwicmVzdWx0Iiwic2FmZVBhcnNlIiwic3VjY2VzcyIsInJlbG9hZCIsImRvU2lsZW50IiwiY2xlYXIiLCJvcHRpb25zIiwiZW50aXR5IiwicmVnaXN0ZXJNb2R1bGVQYXRocyIsInZhbGlkYXRlU2VhcmNoVGV4dEpzb25Tb3VyY2VzIiwicmVnaXN0ZXJUYWJsZVNwZWNzIiwic2V0IiwiaWQiLCJ2YWx1ZXMiLCJwcm9wc0J5TmFtZSIsInByb3BzIiwibWFwIiwicHJvcCIsIm5hbWUiLCJzb3VyY2UiLCJzb3VyY2VDb2x1bW5zIiwic291cmNlUHJvcCIsImdldCIsInR5cGUiLCJ6b2RUeXBlIiwicmVzb2x2ZVNlYXJjaFRleHRKc29uU291cmNlVHlwZSIsIkVycm9yIiwidHlwZUlkIiwibG9jYWxUeXBlIiwidHlwZXMiLCJab2RUeXBlIiwicmVnaXN0ZXJlZEVudGl0eSIsInJlZ2lzdGVyZWRUeXBlIiwibW9kdWxlUGF0aCIsIm1vZHVsZUZpbGVQYXRoIiwiaW1wb3J0ZWRNZW1iZXJzIiwibWF0Y2hlZCIsImZpbmQiLCJ2YWx1ZSIsImVudGl0eUlkIiwidW5kZWZpbmVkIiwiZ2V0QnlUYWJsZSIsInRhYmxlIiwiQXJyYXkiLCJmcm9tIiwiZXhpc3RzIiwiZ2V0QWxsSWRzIiwiRW50aXR5TWFuYWdlciIsImtleXMiLCJzb3J0IiwiZ2V0QWxsRW50aXRpZXMiLCJnZXRBbGxQYXJlbnRJZHMiLCJmaWx0ZXIiLCJwYXJlbnRJZCIsImdldENoaWxkcmVuSWRzIiwic2V0TW9kdWxlUGF0aCIsImtleSIsImdldE1vZHVsZVBhdGgiLCJzZXRUYWJsZVNwZWMiLCJ0YWJsZVNwZWMiLCJnZXRUYWJsZVNwZWMiLCJnZXROYW1lc0Zyb21JZCIsInBsdXJhbGl6ZWQiLCJwbHVyYWxpemUiLCJmcyIsImRhc2hlcml6ZSIsInVuZGVyc2NvcmUiLCJ0b0xvd2VyQ2FzZSIsImZzUGx1cmFsIiwiY2FtZWwiLCJjYW1lbGl6ZSIsImNhbWVsUGx1cmFsIiwiY2FwaXRhbCIsImNhcGl0YWxQbHVyYWwiLCJ1cHBlciIsInRvVXBwZXJDYXNlIiwiY29uc3RhbnQiLCJnZXRFbnRpdHlJZEZyb21QYXRoIiwiZmlsZVBhdGgiLCJtYXRjaCIsInJlcGxhY2UiLCJ0eXBlUGF0aHNQYXR0ZXJucyIsInR5cGVQYXRocyIsIlByb21pc2UiLCJhbGwiLCJwYXR0ZXJuIiwiZmxhdCIsImdldE1vZHVsZVBhdGhGcm9tVHlwZUZpbGVQYXRoIiwibm9ybWFsaXplZFBhdGgiLCJyZXBsYWNlQWxsIl0sIm1hcHBpbmdzIjoiQUFBQSxPQUFPQSxZQUFZLFNBQVM7QUFDNUIsT0FBT0MsV0FBVyxRQUFRO0FBQzFCLFNBQVNDLElBQUksRUFBRUMsUUFBUSxRQUFRLG1CQUFjO0FBQzdDLE9BQU9DLGdCQUFnQixhQUFhO0FBQ3BD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