sonamu 0.7.21 → 0.7.23

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (200) hide show
  1. package/dist/ai/agents/agent.d.ts +6 -1
  2. package/dist/ai/agents/agent.d.ts.map +1 -1
  3. package/dist/ai/agents/agent.js +20 -5
  4. package/dist/api/base-frame.d.ts +4 -0
  5. package/dist/api/base-frame.d.ts.map +1 -1
  6. package/dist/api/base-frame.js +9 -1
  7. package/dist/api/caster.d.ts.map +1 -1
  8. package/dist/api/caster.js +2 -2
  9. package/dist/api/config.d.ts +35 -3
  10. package/dist/api/config.d.ts.map +1 -1
  11. package/dist/api/config.js +1 -1
  12. package/dist/api/decorators.d.ts +4 -4
  13. package/dist/api/decorators.d.ts.map +1 -1
  14. package/dist/api/decorators.js +80 -18
  15. package/dist/api/index.d.ts +1 -0
  16. package/dist/api/index.d.ts.map +1 -1
  17. package/dist/api/index.js +2 -1
  18. package/dist/api/secret.d.ts +7 -0
  19. package/dist/api/secret.d.ts.map +1 -0
  20. package/dist/api/secret.js +17 -0
  21. package/dist/api/sonamu.d.ts +17 -8
  22. package/dist/api/sonamu.d.ts.map +1 -1
  23. package/dist/api/sonamu.js +265 -47
  24. package/dist/cache/cache-manager.d.ts +11 -0
  25. package/dist/cache/cache-manager.d.ts.map +1 -0
  26. package/dist/cache/cache-manager.js +22 -0
  27. package/dist/cache/decorator.d.ts +31 -0
  28. package/dist/cache/decorator.d.ts.map +1 -0
  29. package/dist/cache/decorator.js +86 -0
  30. package/dist/cache/drivers.d.ts +33 -0
  31. package/dist/cache/drivers.d.ts.map +1 -0
  32. package/dist/cache/drivers.js +36 -0
  33. package/dist/cache/index.d.ts +4 -0
  34. package/dist/cache/index.d.ts.map +1 -0
  35. package/dist/cache/index.js +8 -0
  36. package/dist/cache/types.d.ts +28 -0
  37. package/dist/cache/types.d.ts.map +1 -0
  38. package/dist/cache/types.js +6 -0
  39. package/dist/database/base-model.d.ts +4 -2
  40. package/dist/database/base-model.d.ts.map +1 -1
  41. package/dist/database/base-model.js +9 -4
  42. package/dist/database/code-generator.d.ts +3 -1
  43. package/dist/database/code-generator.d.ts.map +1 -1
  44. package/dist/database/code-generator.js +3 -2
  45. package/dist/database/db.d.ts +1 -1
  46. package/dist/database/db.d.ts.map +1 -1
  47. package/dist/database/db.js +5 -5
  48. package/dist/database/knex.d.ts +3 -0
  49. package/dist/database/knex.d.ts.map +1 -0
  50. package/dist/database/knex.js +29 -0
  51. package/dist/database/puri.types.d.ts.map +1 -1
  52. package/dist/database/puri.types.js +1 -1
  53. package/dist/database/upsert-builder.d.ts.map +1 -1
  54. package/dist/database/upsert-builder.js +49 -5
  55. package/dist/index.d.ts +4 -0
  56. package/dist/index.d.ts.map +1 -1
  57. package/dist/index.js +4 -1
  58. package/dist/logger/category.d.ts +4 -0
  59. package/dist/logger/category.d.ts.map +1 -0
  60. package/dist/logger/category.js +34 -0
  61. package/dist/logger/configure.d.ts +9 -0
  62. package/dist/logger/configure.d.ts.map +1 -0
  63. package/dist/logger/configure.js +115 -0
  64. package/dist/migration/code-generation.d.ts +5 -1
  65. package/dist/migration/code-generation.d.ts.map +1 -1
  66. package/dist/migration/code-generation.js +13 -7
  67. package/dist/migration/migrator.d.ts +1 -1
  68. package/dist/migration/migrator.d.ts.map +1 -1
  69. package/dist/migration/migrator.js +7 -7
  70. package/dist/migration/postgresql-schema-reader.d.ts.map +1 -1
  71. package/dist/migration/postgresql-schema-reader.js +5 -3
  72. package/dist/naite/naite.d.ts +0 -4
  73. package/dist/naite/naite.d.ts.map +1 -1
  74. package/dist/naite/naite.js +11 -19
  75. package/dist/ssr/index.d.ts +4 -0
  76. package/dist/ssr/index.d.ts.map +1 -0
  77. package/dist/ssr/index.js +4 -0
  78. package/dist/ssr/registry.d.ts +10 -0
  79. package/dist/ssr/registry.d.ts.map +1 -0
  80. package/dist/ssr/registry.js +43 -0
  81. package/dist/ssr/renderer.d.ts +6 -0
  82. package/dist/ssr/renderer.d.ts.map +1 -0
  83. package/dist/ssr/renderer.js +70 -0
  84. package/dist/ssr/types.d.ts +19 -0
  85. package/dist/ssr/types.d.ts.map +1 -0
  86. package/dist/ssr/types.js +4 -0
  87. package/dist/syncer/syncer.d.ts +1 -0
  88. package/dist/syncer/syncer.d.ts.map +1 -1
  89. package/dist/syncer/syncer.js +58 -1
  90. package/dist/tasks/decorator.d.ts +1 -0
  91. package/dist/tasks/decorator.d.ts.map +1 -1
  92. package/dist/tasks/decorator.js +9 -7
  93. package/dist/tasks/step-wrapper.d.ts +5 -0
  94. package/dist/tasks/step-wrapper.d.ts.map +1 -1
  95. package/dist/tasks/step-wrapper.js +11 -6
  96. package/dist/tasks/workflow-manager.d.ts +2 -0
  97. package/dist/tasks/workflow-manager.d.ts.map +1 -1
  98. package/dist/tasks/workflow-manager.js +5 -2
  99. package/dist/template/implementations/entry-server.template.d.ts +17 -0
  100. package/dist/template/implementations/entry-server.template.d.ts.map +1 -0
  101. package/dist/template/implementations/entry-server.template.js +78 -0
  102. package/dist/template/implementations/model.template.d.ts.map +1 -1
  103. package/dist/template/implementations/model.template.js +5 -3
  104. package/dist/template/implementations/queries.template.d.ts +17 -0
  105. package/dist/template/implementations/queries.template.d.ts.map +1 -0
  106. package/dist/template/implementations/queries.template.js +83 -0
  107. package/dist/template/implementations/view_enums_select.template.d.ts.map +1 -1
  108. package/dist/template/implementations/view_enums_select.template.js +34 -20
  109. package/dist/template/implementations/view_form.template.d.ts +2 -1
  110. package/dist/template/implementations/view_form.template.d.ts.map +1 -1
  111. package/dist/template/implementations/view_form.template.js +301 -129
  112. package/dist/template/implementations/view_id_async_select.template.d.ts.map +1 -1
  113. package/dist/template/implementations/view_id_async_select.template.js +136 -57
  114. package/dist/template/implementations/view_list.template.d.ts +2 -0
  115. package/dist/template/implementations/view_list.template.d.ts.map +1 -1
  116. package/dist/template/implementations/view_list.template.js +392 -227
  117. package/dist/template/implementations/view_search_input.template.d.ts.map +1 -1
  118. package/dist/template/implementations/view_search_input.template.js +46 -30
  119. package/dist/template/zod-converter.d.ts.map +1 -1
  120. package/dist/template/zod-converter.js +2 -2
  121. package/dist/testing/bootstrap.d.ts +28 -0
  122. package/dist/testing/bootstrap.d.ts.map +1 -0
  123. package/dist/testing/bootstrap.js +120 -0
  124. package/dist/testing/fixture-loader.d.ts +21 -0
  125. package/dist/testing/fixture-loader.d.ts.map +1 -0
  126. package/dist/testing/fixture-loader.js +28 -0
  127. package/dist/testing/fixture-manager.d.ts +1 -1
  128. package/dist/testing/fixture-manager.d.ts.map +1 -1
  129. package/dist/testing/fixture-manager.js +7 -7
  130. package/dist/testing/index.d.ts +4 -0
  131. package/dist/testing/index.d.ts.map +1 -0
  132. package/dist/testing/index.js +5 -0
  133. package/dist/testing/naite-vitest-reporter.d.ts +12 -0
  134. package/dist/testing/naite-vitest-reporter.d.ts.map +1 -0
  135. package/dist/testing/naite-vitest-reporter.js +17 -0
  136. package/dist/types/types.d.ts +5 -6
  137. package/dist/types/types.d.ts.map +1 -1
  138. package/dist/types/types.js +7 -8
  139. package/dist/ui/ai-client.d.ts +3 -1
  140. package/dist/ui/ai-client.d.ts.map +1 -1
  141. package/dist/ui/ai-client.js +27 -8
  142. package/dist/ui-web/assets/index-CTYv3qL6.js +92 -0
  143. package/dist/ui-web/index.html +1 -1
  144. package/package.json +43 -20
  145. package/src/ai/agents/agent.ts +38 -19
  146. package/src/api/base-frame.ts +8 -0
  147. package/src/api/caster.ts +6 -1
  148. package/src/api/config.ts +38 -4
  149. package/src/api/decorators.ts +106 -20
  150. package/src/api/index.ts +1 -0
  151. package/src/api/secret.ts +23 -0
  152. package/src/api/sonamu.ts +334 -61
  153. package/src/cache/cache-manager.ts +23 -0
  154. package/src/cache/decorator.ts +116 -0
  155. package/src/cache/drivers.ts +42 -0
  156. package/src/cache/index.ts +16 -0
  157. package/src/cache/types.ts +32 -0
  158. package/src/database/base-model.ts +7 -3
  159. package/src/database/code-generator.ts +3 -1
  160. package/src/database/db.ts +5 -5
  161. package/src/database/knex.ts +34 -0
  162. package/src/database/puri.types.ts +2 -3
  163. package/src/database/upsert-builder.ts +58 -4
  164. package/src/index.ts +4 -0
  165. package/src/logger/category.ts +42 -0
  166. package/src/logger/configure.ts +132 -0
  167. package/src/migration/code-generation.ts +19 -6
  168. package/src/migration/migrator.ts +7 -6
  169. package/src/migration/postgresql-schema-reader.ts +7 -2
  170. package/src/naite/naite.ts +10 -18
  171. package/src/shared/web.shared.ts.txt +1 -1
  172. package/src/ssr/index.ts +13 -0
  173. package/src/ssr/registry.ts +52 -0
  174. package/src/ssr/renderer.ts +105 -0
  175. package/src/ssr/types.ts +20 -0
  176. package/src/syncer/syncer.ts +59 -0
  177. package/src/tasks/decorator.ts +20 -4
  178. package/src/tasks/step-wrapper.ts +14 -5
  179. package/src/tasks/workflow-manager.ts +9 -1
  180. package/src/template/implementations/entry-server.template.ts +81 -0
  181. package/src/template/implementations/model.template.ts +4 -2
  182. package/src/template/implementations/queries.template.ts +111 -0
  183. package/src/template/implementations/view_enums_select.template.ts +33 -19
  184. package/src/template/implementations/view_form.template.ts +324 -145
  185. package/src/template/implementations/view_id_async_select.template.ts +145 -56
  186. package/src/template/implementations/view_list.template.ts +446 -236
  187. package/src/template/implementations/view_search_input.template.ts +45 -29
  188. package/src/template/zod-converter.ts +4 -1
  189. package/src/testing/bootstrap.ts +176 -0
  190. package/src/testing/fixture-loader.ts +28 -0
  191. package/src/testing/fixture-manager.ts +7 -6
  192. package/src/testing/index.ts +3 -0
  193. package/src/testing/naite-vitest-reporter.ts +18 -0
  194. package/src/types/types.ts +4 -5
  195. package/src/ui/ai-client.ts +82 -50
  196. package/dist/template/implementations/view_enums_dropdown.template.d.ts +0 -17
  197. package/dist/template/implementations/view_enums_dropdown.template.d.ts.map +0 -1
  198. package/dist/template/implementations/view_enums_dropdown.template.js +0 -50
  199. package/dist/ui-web/assets/index-B87IyofX.js +0 -92
  200. package/src/template/implementations/view_enums_dropdown.template.ts +0 -53
@@ -640,14 +640,12 @@ export const TemplateOptions = z.object({
640
640
  entityId: z.string(),
641
641
  enumId: z.string()
642
642
  }),
643
- view_enums_dropdown: z.object({
644
- entityId: z.string(),
645
- enumId: z.string()
646
- }),
647
643
  view_enums_buttonset: z.object({
648
644
  entityId: z.string(),
649
645
  enumId: z.string()
650
- })
646
+ }),
647
+ queries: z.object({}),
648
+ entry_server: z.object({})
651
649
  });
652
650
  export const TemplateKey = z.enum([
653
651
  "entity",
@@ -666,8 +664,9 @@ export const TemplateKey = z.enum([
666
664
  "view_id_all_select",
667
665
  "view_id_async_select",
668
666
  "view_enums_select",
669
- "view_enums_dropdown",
670
- "view_enums_buttonset"
667
+ "view_enums_buttonset",
668
+ "queries",
669
+ "entry_server"
671
670
  ]);
672
671
  export const GenerateOptions = z.object({
673
672
  overwrite: z.boolean().optional()
@@ -678,4 +677,4 @@ export const PathAndCode = z.object({
678
677
  });
679
678
  export var ApiParamType;
680
679
 
681
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90eXBlcy90eXBlcy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEZhc3RpZnlSZXBseSwgRmFzdGlmeVJlcXVlc3QgfSBmcm9tIFwiZmFzdGlmeVwiO1xuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIjtcbmltcG9ydCB0eXBlIHsgQXBpRGVjb3JhdG9yT3B0aW9ucywgQXV0aENvbnRleHQsIENvbnRleHQgfSBmcm9tIFwiLi4vYXBpXCI7XG5pbXBvcnQgdHlwZSB7IEd1YXJkS2V5IH0gZnJvbSBcIi4vLi4vYXBpL2RlY29yYXRvcnNcIjtcblxuLypcbiAgVXRpbGl0eSBUeXBlc1xuKi9cbmV4cG9ydCBmdW5jdGlvbiB6QXJyYXlhYmxlPFQgZXh0ZW5kcyB6LlpvZFR5cGVBbnk+KHNoYXBlOiBUKTogei5ab2RVbmlvbjxbVCwgei5ab2RBcnJheTxUPl0+IHtcbiAgcmV0dXJuIHoudW5pb24oW3NoYXBlLCBzaGFwZS5hcnJheSgpXSk7XG59XG4vLyBiaW9tZS1pZ25vcmUgbGludC9zdXNwaWNpb3VzL25vRXhwbGljaXRBbnk6IGFueSBpcyB1c2VkIHRvIG1ha2UgdGhlIHR5cGUgZGlzdHJpYnV0aXZlXG5leHBvcnQgdHlwZSBEaXN0cmlidXRpdmVPbWl0PFQsIEsgZXh0ZW5kcyBrZXlvZiBhbnk+ID0gVCBleHRlbmRzIGFueSA/IE9taXQ8VCwgSz4gOiBuZXZlcjtcblxuLypcbiAgTW9kZWwtRGVmaW5pdGlvblxuKi9cbmV4cG9ydCB0eXBlIEdlbmVyYXRlZENvbHVtblR5cGUgPSBcIlNUT1JFRFwiIHwgXCJWSVJUVUFMXCI7XG5leHBvcnQgdHlwZSBHZW5lcmF0ZWRDb2x1bW4gPSB7XG4gIHR5cGU6IEdlbmVyYXRlZENvbHVtblR5cGU7XG4gIGV4cHJlc3Npb246IHN0cmluZztcbn07XG5leHBvcnQgdHlwZSBDb21tb25Qcm9wID0ge1xuICBuYW1lOiBzdHJpbmc7XG4gIG51bGxhYmxlPzogYm9vbGVhbjtcbiAgdG9GaWx0ZXI/OiB0cnVlO1xuICBkZXNjPzogc3RyaW5nO1xuICBkYkRlZmF1bHQ/OiBzdHJpbmc7XG4gIGdlbmVyYXRlZD86IEdlbmVyYXRlZENvbHVtbjtcbn07XG5leHBvcnQgdHlwZSBJbnRlZ2VyUHJvcCA9IENvbW1vblByb3AgJiB7XG4gIHR5cGU6IFwiaW50ZWdlclwiO1xufTsgLy8gUEc6IGludGVnZXIgLyBUUzogbnVtYmVyIC8gSlNPTjogbnVtYmVyXG5leHBvcnQgdHlwZSBJbnRlZ2VyQXJyYXlQcm9wID0gQ29tbW9uUHJvcCAmIHtcbiAgdHlwZTogXCJpbnRlZ2VyW11cIjtcbn07IC8vIFBHOiBpbnRlZ2VyW10gLyBUUzogbnVtYmVyW10gLyBKU09OOiBudW1iZXJbXVxuZXhwb3J0IHR5cGUgQmlnSW50ZWdlclByb3AgPSBDb21tb25Qcm9wICYge1xuICB0eXBlOiBcImJpZ0ludGVnZXJcIjtcbn07IC8vIFBHOiBiaWdpbnQgLyBUUzogYmlnaW50IC8gSlNPTjogYmlnaW50XG5leHBvcnQgdHlwZSBCaWdJbnRlZ2VyQXJyYXlQcm9wID0gQ29tbW9uUHJvcCAmIHtcbiAgdHlwZTogXCJiaWdJbnRlZ2VyW11cIjtcbn07IC8vIFBHOiBiaWdpbnRbXSAvIFRTOiBiaWdpbnRbXSAvIEpTT046IGJpZ2ludFtdXG5leHBvcnQgdHlwZSBTdHJpbmdQcm9wID0gQ29tbW9uUHJvcCAmIHtcbiAgdHlwZTogXCJzdHJpbmdcIjtcbiAgbGVuZ3RoPzogbnVtYmVyOyAvLyBQRzogdmFyY2hhcihuKSwgdGV4dCAvIFRTOiBzdHJpbmcgLyBKU09OOiBzdHJpbmdcbn07IC8vIFBHOiB0ZXh0IC8gVFM6IHN0cmluZyAvIEpTT046IHN0cmluZ1xuZXhwb3J0IHR5cGUgU3RyaW5nQXJyYXlQcm9wID0gQ29tbW9uUHJvcCAmIHtcbiAgdHlwZTogXCJzdHJpbmdbXVwiO1xuICBsZW5ndGg/OiBudW1iZXI7IC8vIFBHOiB2YXJjaGFyKG4pW10sIHRleHRbXSAvIFRTOiBzdHJpbmdbXSAvIEpTT046IHN0cmluZ1tdXG59OyAvLyBQRzogdmFyY2hhcihuKVtdLCB0ZXh0W10gLyBUUzogc3RyaW5nW10gLyBKU09OOiBzdHJpbmdbXVxuZXhwb3J0IHR5cGUgRW51bVByb3AgPSBDb21tb25Qcm9wICYge1xuICB0eXBlOiBcImVudW1cIjtcbiAgaWQ6IHN0cmluZztcbiAgbGVuZ3RoPzogbnVtYmVyO1xufTsgLy8gUEc6IHRleHQgLyBUUzogc3RyaW5nIC8gSlNPTjogc3RyaW5nXG5leHBvcnQgdHlwZSBFbnVtQXJyYXlQcm9wID0gQ29tbW9uUHJvcCAmIHtcbiAgdHlwZTogXCJlbnVtW11cIjtcbiAgaWQ6IHN0cmluZztcbn07IC8vIFBHOiB0ZXh0W10gLyBUUzogc3RyaW5nW10gLyBKU09OOiBzdHJpbmdbXVxuZXhwb3J0IHR5cGUgTnVtYmVyUHJvcCA9IENvbW1vblByb3AgJiB7XG4gIHR5cGU6IFwibnVtYmVyXCI7XG4gIHByZWNpc2lvbj86IG51bWJlcjsgLy8gUEc6IG51bWVyaWMocCwgcykgLyBUUzogbnVtYmVyIC8gSlNPTjogbnVtYmVyXG4gIHNjYWxlPzogbnVtYmVyOyAvLyBQRzogbnVtZXJpYyhwLCBzKSAvIFRTOiBudW1iZXIgLyBKU09OOiBudW1iZXJcbiAgbnVtYmVyVHlwZT86IFwicmVhbFwiIHwgXCJkb3VibGUgcHJlY2lzaW9uXCIgfCBcIm51bWVyaWNcIjsgLy8g6riw67O46rCSOiBudW1lcmljXG59OyAvLyBQRzogbnVtZXJpYyhwLCBzKSAvIFRTOiBudW1iZXIgLyBKU09OOiBudW1iZXJcbmV4cG9ydCB0eXBlIE51bWJlckFycmF5UHJvcCA9IENvbW1vblByb3AgJiB7XG4gIHR5cGU6IFwibnVtYmVyW11cIjtcbiAgcHJlY2lzaW9uPzogbnVtYmVyO1xuICBzY2FsZT86IG51bWJlcjtcbiAgbnVtYmVyVHlwZT86IFwicmVhbFwiIHwgXCJkb3VibGUgcHJlY2lzaW9uXCIgfCBcIm51bWVyaWNcIjsgLy8g6riw67O46rCSOiBudW1lcmljXG59OyAvLyBQRzogbnVtZXJpYyhwLCBzKVtdIC8gVFM6IG51bWJlcltdIC8gSlNPTjogbnVtYmVyW11cbmV4cG9ydCB0eXBlIE51bWVyaWNQcm9wID0gQ29tbW9uUHJvcCAmIHtcbiAgdHlwZTogXCJudW1lcmljXCI7XG4gIHByZWNpc2lvbj86IG51bWJlcjtcbiAgc2NhbGU/OiBudW1iZXI7XG59OyAvLyBQRzogbnVtZXJpYyhwLCBzKSAvIFRTOiBzdHJpbmcgLyBKU09OOiBzdHJpbmdcbmV4cG9ydCB0eXBlIE51bWVyaWNBcnJheVByb3AgPSBDb21tb25Qcm9wICYge1xuICB0eXBlOiBcIm51bWVyaWNbXVwiO1xuICBwcmVjaXNpb24/OiBudW1iZXI7XG4gIHNjYWxlPzogbnVtYmVyO1xufTsgLy8gUEc6IG51bWVyaWMocCwgcylbXSAvIFRTOiBzdHJpbmdbXSAvIEpTT046IHN0cmluZ1tdXG5leHBvcnQgdHlwZSBCb29sZWFuUHJvcCA9IENvbW1vblByb3AgJiB7XG4gIHR5cGU6IFwiYm9vbGVhblwiO1xufTsgLy8gUEc6IGJvb2xlYW4gLyBUUzogYm9vbGVhbiAvIEpTT046IGJvb2xlYW5cbmV4cG9ydCB0eXBlIEJvb2xlYW5BcnJheVByb3AgPSBDb21tb25Qcm9wICYge1xuICB0eXBlOiBcImJvb2xlYW5bXVwiO1xufTsgLy8gUEc6IGJvb2xlYW5bXSAvIFRTOiBib29sZWFuW10gLyBKU09OOiBib29sZWFuW11cbmV4cG9ydCB0eXBlIERhdGVQcm9wID0gQ29tbW9uUHJvcCAmIHtcbiAgdHlwZTogXCJkYXRlXCI7XG59OyAvLyBQRzogdGltZXN0YW1weiAvIFRTOiBEYXRlIC8gSlNPTjogc3RyaW5nKElTT1N0cmluZylcbmV4cG9ydCB0eXBlIERhdGVBcnJheVByb3AgPSBDb21tb25Qcm9wICYge1xuICB0eXBlOiBcImRhdGVbXVwiO1xufTsgLy8gUEc6IHRpbWVzdGFtcHR6W10gLyBUUzogRGF0ZVtdIC8gSlNPTjogc3RyaW5nW11cbmV4cG9ydCB0eXBlIEpzb25Qcm9wID0gQ29tbW9uUHJvcCAmIHtcbiAgdHlwZTogXCJqc29uXCI7XG4gIGlkOiBzdHJpbmc7XG59OyAvLyBQRzoganNvbiAvIFRTOiBhbnkoaWQpIC8gSlNPTjogYW55XG5leHBvcnQgdHlwZSBVdWlkUHJvcCA9IENvbW1vblByb3AgJiB7XG4gIHR5cGU6IFwidXVpZFwiO1xufTsgLy8gUEc6IHV1aWQgLyBUUzogc3RyaW5nIC8gSlNPTjogc3RyaW5nXG5leHBvcnQgdHlwZSBVdWlkQXJyYXlQcm9wID0gQ29tbW9uUHJvcCAmIHtcbiAgdHlwZTogXCJ1dWlkW11cIjtcbn07IC8vIFBHOiB1dWlkW10gLyBUUzogc3RyaW5nW10gLyBKU09OOiBzdHJpbmdbXVxuZXhwb3J0IHR5cGUgVmlydHVhbFByb3AgPSBDb21tb25Qcm9wICYge1xuICB0eXBlOiBcInZpcnR1YWxcIjtcbiAgaWQ6IHN0cmluZztcbiAgdmlydHVhbFR5cGU/OiBcInF1ZXJ5XCIgfCBcImNvZGVcIjsgLy8gZGVmYXVsdDogXCJjb2RlXCJcbn07IC8vIFBHOiBub25lIC8gVFM6IGFueShpZCkgLyBKU09OOiBhbnlcbmV4cG9ydCB0eXBlIFZlY3RvclByb3AgPSBDb21tb25Qcm9wICYge1xuICB0eXBlOiBcInZlY3RvclwiO1xuICBkaW1lbnNpb25zOiBudW1iZXI7XG59O1xuZXhwb3J0IHR5cGUgVmVjdG9yQXJyYXlQcm9wID0gQ29tbW9uUHJvcCAmIHtcbiAgdHlwZTogXCJ2ZWN0b3JbXVwiO1xuICBkaW1lbnNpb25zOiBudW1iZXI7XG59O1xuZXhwb3J0IHR5cGUgVHNWZWN0b3JQcm9wID0gQ29tbW9uUHJvcCAmIHtcbiAgdHlwZTogXCJ0c3ZlY3RvclwiO1xufTtcbmV4cG9ydCB0eXBlIFJlbGF0aW9uVHlwZSA9IFwiSGFzTWFueVwiIHwgXCJCZWxvbmdzVG9PbmVcIiB8IFwiTWFueVRvTWFueVwiIHwgXCJPbmVUb09uZVwiO1xuZXhwb3J0IHR5cGUgUmVsYXRpb25PbiA9IFwiQ0FTQ0FERVwiIHwgXCJTRVQgTlVMTFwiIHwgXCJOTyBBQ1RJT05cIiB8IFwiU0VUIERFRkFVTFRcIiB8IFwiUkVTVFJJQ1RcIjtcbnR5cGUgX1JlbGF0aW9uUHJvcCA9IHtcbiAgdHlwZTogXCJyZWxhdGlvblwiO1xuICBuYW1lOiBzdHJpbmc7XG4gIHdpdGg6IHN0cmluZztcbiAgbnVsbGFibGU/OiBib29sZWFuOyAvLyBERUZBVUxUOiBmYWxzZVxuICB0b0ZpbHRlcj86IHRydWU7IC8vIERFRkFVTFQ6IGZhbHNlXG4gIGRlc2M/OiBzdHJpbmc7XG59O1xuZXhwb3J0IHR5cGUgT25lVG9PbmVSZWxhdGlvblByb3AgPSBfUmVsYXRpb25Qcm9wICYge1xuICByZWxhdGlvblR5cGU6IFwiT25lVG9PbmVcIjtcbiAgY3VzdG9tSm9pbkNsYXVzZT86IHN0cmluZztcbn0gJiAoXG4gICAgfCB7XG4gICAgICAgIGhhc0pvaW5Db2x1bW46IHRydWU7XG4gICAgICAgIHVzZUNvbnN0cmFpbnQ/OiBib29sZWFuOyAvLyBERUZBVUxUOiB0cnVlXG4gICAgICAgIG9uVXBkYXRlPzogUmVsYXRpb25PbjsgLy8gREVGQVVMVDogUkVTVFJJQ1RcbiAgICAgICAgb25EZWxldGU/OiBSZWxhdGlvbk9uOyAvLyBERUZBVUxUOiBSRVNUUklDVFxuICAgICAgfVxuICAgIHwge1xuICAgICAgICBoYXNKb2luQ29sdW1uOiBmYWxzZTtcbiAgICAgIH1cbiAgKTtcbmV4cG9ydCB0eXBlIEJlbG9uZ3NUb09uZVJlbGF0aW9uUHJvcCA9IF9SZWxhdGlvblByb3AgJiB7XG4gIHJlbGF0aW9uVHlwZTogXCJCZWxvbmdzVG9PbmVcIjtcbiAgY3VzdG9tSm9pbkNsYXVzZT86IHN0cmluZztcbiAgdXNlQ29uc3RyYWludD86IGJvb2xlYW47IC8vIERFRkFVTFQ6IHRydWVcbiAgb25VcGRhdGU/OiBSZWxhdGlvbk9uOyAvLyBERUZBVUxUOiBSRVNUUklDVFxuICBvbkRlbGV0ZT86IFJlbGF0aW9uT247IC8vIERFRkFVTFQ6IFJFU1RSSUNUXG59O1xuZXhwb3J0IHR5cGUgSGFzTWFueVJlbGF0aW9uUHJvcCA9IF9SZWxhdGlvblByb3AgJiB7XG4gIHJlbGF0aW9uVHlwZTogXCJIYXNNYW55XCI7XG4gIGpvaW5Db2x1bW46IHN0cmluZztcbiAgZnJvbUNvbHVtbj86IHN0cmluZztcbn07XG5leHBvcnQgdHlwZSBNYW55VG9NYW55UmVsYXRpb25Qcm9wID0gX1JlbGF0aW9uUHJvcCAmIHtcbiAgcmVsYXRpb25UeXBlOiBcIk1hbnlUb01hbnlcIjtcbiAgam9pblRhYmxlOiBgJHtzdHJpbmd9X18ke3N0cmluZ31gO1xuICBvblVwZGF0ZTogUmVsYXRpb25PbjtcbiAgb25EZWxldGU6IFJlbGF0aW9uT247XG59O1xuZXhwb3J0IHR5cGUgUmVsYXRpb25Qcm9wID1cbiAgfCBPbmVUb09uZVJlbGF0aW9uUHJvcFxuICB8IEJlbG9uZ3NUb09uZVJlbGF0aW9uUHJvcFxuICB8IEhhc01hbnlSZWxhdGlvblByb3BcbiAgfCBNYW55VG9NYW55UmVsYXRpb25Qcm9wO1xuXG5leHBvcnQgdHlwZSBFbnRpdHlQcm9wID1cbiAgfCBJbnRlZ2VyUHJvcFxuICB8IEludGVnZXJBcnJheVByb3BcbiAgfCBCaWdJbnRlZ2VyUHJvcFxuICB8IEJpZ0ludGVnZXJBcnJheVByb3BcbiAgfCBTdHJpbmdQcm9wXG4gIHwgU3RyaW5nQXJyYXlQcm9wXG4gIHwgRW51bVByb3BcbiAgfCBFbnVtQXJyYXlQcm9wXG4gIHwgTnVtYmVyUHJvcFxuICB8IE51bWJlckFycmF5UHJvcFxuICB8IE51bWVyaWNQcm9wXG4gIHwgTnVtZXJpY0FycmF5UHJvcFxuICB8IE51bWVyaWNQcm9wXG4gIHwgQm9vbGVhblByb3BcbiAgfCBCb29sZWFuQXJyYXlQcm9wXG4gIHwgRGF0ZVByb3BcbiAgfCBEYXRlQXJyYXlQcm9wXG4gIHwgVXVpZFByb3BcbiAgfCBVdWlkQXJyYXlQcm9wXG4gIHwgSnNvblByb3BcbiAgfCBWaXJ0dWFsUHJvcFxuICB8IFZlY3RvclByb3BcbiAgfCBWZWN0b3JBcnJheVByb3BcbiAgfCBUc1ZlY3RvclByb3BcbiAgfCBSZWxhdGlvblByb3A7XG5cbi8qKlxuICogcGd2ZWN0b3Ig6rGw66asIOyXsOyCsOyekCDtgbTrnpjsiqRcbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIC0gYHZlY3Rvcl9jb3NpbmVfb3BzYDog7L2U7IKs7J24IOqxsOumrCAoQ29zaW5lIERpc3RhbmNlKSAtIOq2jOyepVxuICogICAtIFNRTCDsl7DsgrDsnpA6IGA8PT5gXG4gKiAgIC0g67Kh7YSw7J2YIOuwqe2WpeunjCDruYTqtZAgKO2BrOq4sCDrrLTsi5wpLCAxIC0gY29zaW5lX3NpbWlsYXJpdHlcbiAqICAgLSDthY3siqTtirgg7J6E67Kg65SpLCDsi5zrp6jti7Eg6rKA7IOJ7JeQIOqwgOyepSDsnbzrsJjsoIHsnLzroZwg7IKs7JqpXG4gKiAgIC0g7IKs7JqpIOyYiDogT3BlbkFJLCBWb3lhZ2Ug65OxIOuMgOu2gOu2hOydmCDsnoTrsqDrlKkg66qo64247JeQIOq2jOyepVxuICpcbiAqIC0gYHZlY3Rvcl9pcF9vcHNgOiDrgrTsoIEgKElubmVyIFByb2R1Y3QpXG4gKiAgIC0gU1FMIOyXsOyCsOyekDogYDwjPmBcbiAqICAgLSDrkZAg67Kh7YSw7J2YIOuCtOyggeydhCDqs4TsgrAgKHN1bShhW2ldICogYltpXSkpXG4gKiAgIC0g7KCV6rec7ZmU65CcIOuyoe2EsOyXkOyEnCDsvZTsgqzsnbgg7Jyg7IKs64+E7JmAIOuPmeydvO2VnCDqsrDqs7xcbiAqICAgLSDqsJLsnbQg7YG07IiY66GdIOycoOyCrCAo7J2M7IiYIOyXsOyCsOyekOydtOuvgOuhnCBPUkRFUiBCWeyXkOyEnCDso7zsnZgpXG4gKiAgIC0g7IKs7JqpIOyYiDog7J2066+4IOygleq3nO2ZlOuQnCDsnoTrsqDrlKnsl5DshJwg6rCA7J6lIOu5oOuluCDshLHriqVcbiAqXG4gKiAtIGB2ZWN0b3JfbDJfb3BzYDog7Jyg7YG066as65OcIOqxsOumrCAoTDIgRGlzdGFuY2UpXG4gKiAgIC0gU1FMIOyXsOyCsOyekDogYDwtPmBcbiAqICAgLSDrkZAg67Kh7YSwIOqwhOydmCDsp4HshKAg6rGw66as66W8IOqzhOyCsCAoc3FydChzdW0oKGFbaV0gLSBiW2ldKV4yKSkpXG4gKiAgIC0g67Kh7YSw7J2YIO2BrOq4sChtYWduaXR1ZGUp6rCAIOykkeyalO2VoCDrlYwg7IKs7JqpXG4gKiAgIC0g7IKs7JqpIOyYiDog7J2066+47KeAIOycoOyCrOuPhCwg7KCI64yA7KCBIOqxsOumrCDsuKHsoJXsnbQg7ZWE7JqU7ZWcIOqyveyasFxuICovXG5leHBvcnQgdHlwZSBWZWN0b3JPcHMgPSBcInZlY3Rvcl9jb3NpbmVfb3BzXCIgfCBcInZlY3Rvcl9pcF9vcHNcIiB8IFwidmVjdG9yX2wyX29wc1wiO1xuXG50eXBlIEVudGl0eUluZGV4Q29sdW1uID0ge1xuICBuYW1lOiBzdHJpbmc7XG4gIG51bGxzRmlyc3Q/OiBib29sZWFuO1xuICBzb3J0T3JkZXI/OiBcIkFTQ1wiIHwgXCJERVNDXCI7XG4gIC8qKiBwZ3ZlY3RvciDsnbjrjbHsiqTsl5DshJwg7IKs7Jqp7ZWgIOqxsOumrCDsl7DsgrDsnpAgKHZlY3RvciDsu6zrn7zsl5Drp4wg7KCB7JqpKSAqL1xuICB2ZWN0b3JPcHM/OiBWZWN0b3JPcHM7XG59O1xuZXhwb3J0IHR5cGUgRW50aXR5SW5kZXggPSB7XG4gIHR5cGU6IFwiaW5kZXhcIiB8IFwidW5pcXVlXCIgfCBcImhuc3dcIiB8IFwiaXZmZmxhdFwiO1xuICBjb2x1bW5zOiBFbnRpdHlJbmRleENvbHVtbltdO1xuICBuYW1lOiBzdHJpbmc7XG4gIHVzaW5nPzogXCJidHJlZVwiIHwgXCJoYXNoXCIgfCBcImdpblwiIHwgXCJnaXN0XCIgfCBcInBncm9vbmdhXCI7XG4gIG51bGxzTm90RGlzdGluY3Q/OiBib29sZWFuOyAvLyB1bmlxdWUgaW5kZXggb25seVxuICAvKipcbiAgICogSE5TVyAoSGllcmFyY2hpY2FsIE5hdmlnYWJsZSBTbWFsbCBXb3JsZCkg7J24642x7IqkOiDqsIEg64W465Oc7J2YIOy1nOuMgCDsl7DqsrAg7IiYXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiDqt7jrnpjtlITsl5DshJwg6rCBIOuFuOuTnOqwgCDqsIDsp4gg7IiYIOyeiOuKlCDstZzrjIAg7Jew6rKwIOyImOyeheuLiOuLpC5cbiAgICogSE5TV+uKlCDruaDrpbgg6rKA7IOJIOyGjeuPhOyZgCDrhpLsnYAg7KCV7ZmV64+E66W8IOygnOqzte2VmOuvgOuhnCDqtozsnqXrkKnri4jri6QuXG4gICAqIC0g6riw67O46rCSOiAxNlxuICAgKiAtIOuylOychDogMiB+IDEwMFxuICAgKiAtIOuGkuydhOyImOuhnTog7KCV7ZmV64+E4oaRLCDruYzrk5wg7Iuc6rCE4oaRLCDrqZTrqqjrpqzihpFcbiAgICogLSDqtozsnqU6IOu5oOuluCDruYzrk5woOCksIOq3oO2YlSgxNiksIOuGkuydgCDsoJXtmZXrj4QoMzIpLCDstZzqs6Ag7KCV7ZmV64+EKDY0KVxuICAgKi9cbiAgbT86IG51bWJlcjtcbiAgLyoqXG4gICAqIEhOU1cgKEhpZXJhcmNoaWNhbCBOYXZpZ2FibGUgU21hbGwgV29ybGQpIOyduOuNseyKpDog6rWs7ISxIOyLnCDtg5Dsg4kg67KU7JyEXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiDsnbjrjbHsiqQg6rWs7ISxIOyLnCDqsIEg64W465Oc7JeQ7IScIO2DkOyDie2VoCDrspTsnITsnoXri4jri6QuXG4gICAqIC0g6riw67O46rCSOiA2NFxuICAgKiAtIOuylOychDogNCB+IDEwMDBcbiAgICogLSDrhpLsnYTsiJjroZ06IOygle2ZleuPhOKGkSwg67mM65OcIOyLnOqwhOKGkVxuICAgKiAtIOq2jOyepTog67mg66W4IOu5jOuTnCgzMiksIOq3oO2YlSg2NCksIOuGkuydgCDsoJXtmZXrj4QoMTI4KSwg7LWc6rOgIOygle2ZleuPhCgyNTYpXG4gICAqL1xuICBlZkNvbnN0cnVjdGlvbj86IG51bWJlcjtcbiAgLyoqXG4gICAqIElWRkZsYXQgKEludmVydGVkIEZpbGUgd2l0aCBGbGF0IENvbXByZXNzaW9uKSDsnbjrjbHsiqQ6IO2BtOufrOyKpO2EsOungSDrpqzsiqTtirgg7IiYXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiDrsqHthLDrpbwg7YG065+s7Iqk7YSw66eB7ZWgIOuyhO2CtyDsiJjrpbwg7KeA7KCV7ZWp64uI64ukLlxuICAgKiBJVkZGbGF07J2AIOu5oOuluCDruYzrk5zsmYAg64Ku7J2AIOuplOuqqOumrCDsgqzsmqnsnbQg7ZWE7JqU7ZWgIOuVjCDsgqzsmqntlanri4jri6QuXG4gICAqIC0g6raM7J6l6rCSOiBzcXJ0KHJvd19jb3VudCkgfiByb3dfY291bnQgLyAxMDAwXG4gICAqIC0g7JiI7IucOiAxMCwwMDDtlokg4oaSIDEwMCwgMTAwLDAwMO2WiSDihpIgMzAwLCAxLDAwMCwwMDDtlokg4oaSIDEwMDBcbiAgICogLSDrp47snYTsiJjroZ0g7KCV7ZmV64+E4oaRLCDqsoDsg4kg7IaN64+E4oaTXG4gICAqL1xuICBsaXN0cz86IG51bWJlcjtcbn07XG5cbi8vIFN1YnNldEZpZWxkIO2DgOyehTogc3RyaW5nIOuYkOuKlCBpbnRlcm5hbCDsmLXshZjsnbQg7J6I64qUIOqwneyytFxuZXhwb3J0IHR5cGUgU3Vic2V0RmllbGQgPSBzdHJpbmcgfCB7IGZpZWxkOiBzdHJpbmc7IGludGVybmFsPzogYm9vbGVhbiB9O1xuXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplU3Vic2V0RmllbGQoZjogU3Vic2V0RmllbGQpOiBzdHJpbmcge1xuICByZXR1cm4gdHlwZW9mIGYgPT09IFwic3RyaW5nXCIgPyBmIDogZi5maWVsZDtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc0ludGVybmFsU3Vic2V0RmllbGQoZjogU3Vic2V0RmllbGQpOiBib29sZWFuIHtcbiAgcmV0dXJuIHR5cGVvZiBmICE9PSBcInN0cmluZ1wiICYmIGYuaW50ZXJuYWwgPT09IHRydWU7XG59XG5cbmV4cG9ydCB0eXBlIEVudGl0eUpzb24gPSB7XG4gIGlkOiBzdHJpbmc7XG4gIHBhcmVudElkPzogc3RyaW5nO1xuICB0YWJsZTogc3RyaW5nO1xuICB0aXRsZT86IHN0cmluZztcbiAgcHJvcHM6IEVudGl0eVByb3BbXTtcbiAgaW5kZXhlczogRW50aXR5SW5kZXhbXTtcbiAgc3Vic2V0czoge1xuICAgIFtzdWJzZXQ6IHN0cmluZ106IFN1YnNldEZpZWxkW107XG4gIH07XG4gIGVudW1zOiB7XG4gICAgW2VudW1JZDogc3RyaW5nXToge1xuICAgICAgW2tleTogc3RyaW5nXTogc3RyaW5nO1xuICAgIH07XG4gIH07XG59O1xuZXhwb3J0IHR5cGUgRW50aXR5U3Vic2V0Um93ID0ge1xuICBmaWVsZDogc3RyaW5nO1xuICBoYXM6IHtcbiAgICBba2V5OiBzdHJpbmddOiBib29sZWFuO1xuICB9O1xuICBpc0ludGVybmFsOiB7XG4gICAgW2tleTogc3RyaW5nXTogYm9vbGVhbjtcbiAgfTtcbiAgY2hpbGRyZW46IEVudGl0eVN1YnNldFJvd1tdO1xuICBwcmVmaXhlczogc3RyaW5nW107XG4gIHJlbGF0aW9uRW50aXR5Pzogc3RyaW5nO1xuICBpc09wZW4/OiBib29sZWFuO1xufTtcbmV4cG9ydCB0eXBlIEZsYXR0ZW5TdWJzZXRSb3cgPSBPbWl0PEVudGl0eVN1YnNldFJvdywgXCJjaGlsZHJlblwiPjtcblxuLypcbiAgUHJvcE5vZGVcbiovXG5cbi8qKlxuICog7JeU7Yuw7Yuw7J2YIO2VhOuTnCDqtazsobDrpbwg7Yq466asIO2Yle2DnOuhnCDtkZztmITtlZjripQg7KSR6rCEIOuFuOuTnOyeheuLiOuLpC5cbiAqXG4gKiAqKuuqqeyggSoqOiBFbnRpdHnsnZggc3Vic2V0IO2VhOuTnCDtkZztmITsi50o7JiIOiBcImlkXCIsIFwidXNlci5uYW1lXCIsIFwidGFnc1tdXCIp7J2EXG4gKiDsnqzqt4DsoIHsnbgg7Yq466asIOq1rOyhsOuhnCDtjIzsi7HtlZjsl6wgWm9kIOyKpO2CpOuniCDsg53shLHsnZgg7KSR6rCEIOuLqOqzhOuhnCDsgqzsmqntlanri4jri6QuXG4gKlxuICogKirrs4DtmZgg7Z2Q66aEKio6XG4gKiBFbnRpdHkgc3Vic2V0IOKGkiBFbnRpdHlQcm9wTm9kZSAo7Yq466asIOq1rOyhsCkg4oaSIFpvZCDsiqTtgqTrp4gg4oaSIFJlbmRlcmluZ05vZGUgKFVJ7JqpKVxuICpcbiAqICoqbm9kZVR5cGUqKjpcbiAqIC0gXCJwbGFpblwiOiDri6jsnbwg7ZWE65OcICjsmIg6IFwiaWRcIiwgXCJuYW1lXCIpXG4gKiAtIFwib2JqZWN0XCI6IOykkeyyqSDqsJ3ssrQgKOyYiDogXCJ1c2VyLm5hbWVcIiDihpIgdXNlciDqsJ3ssrQpXG4gKiAtIFwiYXJyYXlcIjog67Cw7Je0ICjsmIg6IFwidGFnc1tdXCIg4oaSIHRhZ3Mg67Cw7Je0KVxuICpcbiAqICoq7IKs7JqpIOychOy5mCoqOiBlbnRpdHktY29udmVydGVyLnRz7J2YIHByb3BOb2RlVG9ab2RUeXBlKClcbiAqL1xuZXhwb3J0IHR5cGUgRW50aXR5UHJvcE5vZGUgPVxuICB8IHtcbiAgICAgIG5vZGVUeXBlOiBcInBsYWluXCI7XG4gICAgICBwcm9wOiBFbnRpdHlQcm9wO1xuICAgIH1cbiAgfCB7XG4gICAgICBub2RlVHlwZTogXCJvYmplY3RcIiB8IFwiYXJyYXlcIjtcbiAgICAgIHByb3A/OiBFbnRpdHlQcm9wO1xuICAgICAgY2hpbGRyZW46IEVudGl0eVByb3BOb2RlW107XG4gICAgfTtcblxuLypcbiAgUHJvcCBUeXBlIEd1YXJkc1xuKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0ludGVnZXJTaW5nbGVQcm9wKHA6IHVua25vd24pOiBwIGlzIEludGVnZXJQcm9wIHtcbiAgcmV0dXJuIChwIGFzIEludGVnZXJQcm9wKT8udHlwZSA9PT0gXCJpbnRlZ2VyXCI7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNJbnRlZ2VyQXJyYXlQcm9wKHA6IHVua25vd24pOiBwIGlzIEludGVnZXJBcnJheVByb3Age1xuICByZXR1cm4gKHAgYXMgSW50ZWdlckFycmF5UHJvcCk/LnR5cGUgPT09IFwiaW50ZWdlcltdXCI7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNJbnRlZ2VyUHJvcChwOiB1bmtub3duKTogcCBpcyBJbnRlZ2VyUHJvcCB8IEludGVnZXJBcnJheVByb3Age1xuICByZXR1cm4gaXNJbnRlZ2VyU2luZ2xlUHJvcChwKSB8fCBpc0ludGVnZXJBcnJheVByb3AocCk7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNCaWdJbnRlZ2VyU2luZ2xlUHJvcChwOiB1bmtub3duKTogcCBpcyBCaWdJbnRlZ2VyUHJvcCB7XG4gIHJldHVybiAocCBhcyBCaWdJbnRlZ2VyUHJvcCk/LnR5cGUgPT09IFwiYmlnSW50ZWdlclwiO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzQmlnSW50ZWdlckFycmF5UHJvcChwOiB1bmtub3duKTogcCBpcyBCaWdJbnRlZ2VyQXJyYXlQcm9wIHtcbiAgcmV0dXJuIChwIGFzIEJpZ0ludGVnZXJBcnJheVByb3ApPy50eXBlID09PSBcImJpZ0ludGVnZXJbXVwiO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzQmlnSW50ZWdlclByb3AocDogdW5rbm93bik6IHAgaXMgQmlnSW50ZWdlclByb3AgfCBCaWdJbnRlZ2VyQXJyYXlQcm9wIHtcbiAgcmV0dXJuIGlzQmlnSW50ZWdlclNpbmdsZVByb3AocCkgfHwgaXNCaWdJbnRlZ2VyQXJyYXlQcm9wKHApO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzU3RyaW5nU2luZ2xlUHJvcChwOiB1bmtub3duKTogcCBpcyBTdHJpbmdQcm9wIHtcbiAgcmV0dXJuIChwIGFzIFN0cmluZ1Byb3ApPy50eXBlID09PSBcInN0cmluZ1wiO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzU3RyaW5nQXJyYXlQcm9wKHA6IHVua25vd24pOiBwIGlzIFN0cmluZ0FycmF5UHJvcCB7XG4gIHJldHVybiAocCBhcyBTdHJpbmdBcnJheVByb3ApPy50eXBlID09PSBcInN0cmluZ1tdXCI7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNTdHJpbmdQcm9wKHA6IHVua25vd24pOiBwIGlzIFN0cmluZ1Byb3AgfCBTdHJpbmdBcnJheVByb3Age1xuICByZXR1cm4gaXNTdHJpbmdTaW5nbGVQcm9wKHApIHx8IGlzU3RyaW5nQXJyYXlQcm9wKHApO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzRW51bVNpbmdsZVByb3AocDogdW5rbm93bik6IHAgaXMgRW51bVByb3Age1xuICByZXR1cm4gKHAgYXMgRW51bVByb3ApPy50eXBlID09PSBcImVudW1cIjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc0VudW1BcnJheVByb3AocDogdW5rbm93bik6IHAgaXMgRW51bUFycmF5UHJvcCB7XG4gIHJldHVybiAocCBhcyBFbnVtQXJyYXlQcm9wKT8udHlwZSA9PT0gXCJlbnVtW11cIjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc0VudW1Qcm9wKHA6IHVua25vd24pOiBwIGlzIEVudW1Qcm9wIHwgRW51bUFycmF5UHJvcCB7XG4gIHJldHVybiBpc0VudW1TaW5nbGVQcm9wKHApIHx8IGlzRW51bUFycmF5UHJvcChwKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc051bWJlclNpbmdsZVByb3AocDogdW5rbm93bik6IHAgaXMgTnVtYmVyUHJvcCB7XG4gIHJldHVybiAocCBhcyBOdW1iZXJQcm9wKT8udHlwZSA9PT0gXCJudW1iZXJcIjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc051bWJlckFycmF5UHJvcChwOiB1bmtub3duKTogcCBpcyBOdW1iZXJBcnJheVByb3Age1xuICByZXR1cm4gKHAgYXMgTnVtYmVyQXJyYXlQcm9wKT8udHlwZSA9PT0gXCJudW1iZXJbXVwiO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzTnVtYmVyUHJvcChwOiB1bmtub3duKTogcCBpcyBOdW1iZXJQcm9wIHwgTnVtYmVyQXJyYXlQcm9wIHtcbiAgcmV0dXJuIGlzTnVtYmVyU2luZ2xlUHJvcChwKSB8fCBpc051bWJlckFycmF5UHJvcChwKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc051bWVyaWNTaW5nbGVQcm9wKHA6IHVua25vd24pOiBwIGlzIE51bWVyaWNQcm9wIHtcbiAgcmV0dXJuIChwIGFzIE51bWVyaWNQcm9wKT8udHlwZSA9PT0gXCJudW1lcmljXCI7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNOdW1lcmljQXJyYXlQcm9wKHA6IHVua25vd24pOiBwIGlzIE51bWVyaWNBcnJheVByb3Age1xuICByZXR1cm4gKHAgYXMgTnVtZXJpY0FycmF5UHJvcCk/LnR5cGUgPT09IFwibnVtZXJpY1tdXCI7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNOdW1lcmljUHJvcChwOiB1bmtub3duKTogcCBpcyBOdW1lcmljUHJvcCB8IE51bWVyaWNBcnJheVByb3Age1xuICByZXR1cm4gaXNOdW1lcmljU2luZ2xlUHJvcChwKSB8fCBpc051bWVyaWNBcnJheVByb3AocCk7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNCb29sZWFuU2luZ2xlUHJvcChwOiB1bmtub3duKTogcCBpcyBCb29sZWFuUHJvcCB7XG4gIHJldHVybiAocCBhcyBCb29sZWFuUHJvcCk/LnR5cGUgPT09IFwiYm9vbGVhblwiO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzQm9vbGVhbkFycmF5UHJvcChwOiB1bmtub3duKTogcCBpcyBCb29sZWFuQXJyYXlQcm9wIHtcbiAgcmV0dXJuIChwIGFzIEJvb2xlYW5BcnJheVByb3ApPy50eXBlID09PSBcImJvb2xlYW5bXVwiO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzQm9vbGVhblByb3AocDogdW5rbm93bik6IHAgaXMgQm9vbGVhblByb3AgfCBCb29sZWFuQXJyYXlQcm9wIHtcbiAgcmV0dXJuIGlzQm9vbGVhblNpbmdsZVByb3AocCkgfHwgaXNCb29sZWFuQXJyYXlQcm9wKHApO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzRGF0ZVNpbmdsZVByb3AocDogdW5rbm93bik6IHAgaXMgRGF0ZVByb3Age1xuICByZXR1cm4gKHAgYXMgRGF0ZVByb3ApPy50eXBlID09PSBcImRhdGVcIjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc0RhdGVBcnJheVByb3AocDogdW5rbm93bik6IHAgaXMgRGF0ZUFycmF5UHJvcCB7XG4gIHJldHVybiAocCBhcyBEYXRlQXJyYXlQcm9wKT8udHlwZSA9PT0gXCJkYXRlW11cIjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc0RhdGVQcm9wKHA6IHVua25vd24pOiBwIGlzIERhdGVQcm9wIHwgRGF0ZUFycmF5UHJvcCB7XG4gIHJldHVybiBpc0RhdGVTaW5nbGVQcm9wKHApIHx8IGlzRGF0ZUFycmF5UHJvcChwKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc1V1aWRTaW5nbGVQcm9wKHA6IHVua25vd24pOiBwIGlzIFV1aWRQcm9wIHtcbiAgcmV0dXJuIChwIGFzIFV1aWRQcm9wKT8udHlwZSA9PT0gXCJ1dWlkXCI7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNVdWlkQXJyYXlQcm9wKHA6IHVua25vd24pOiBwIGlzIFV1aWRBcnJheVByb3Age1xuICByZXR1cm4gKHAgYXMgVXVpZEFycmF5UHJvcCk/LnR5cGUgPT09IFwidXVpZFtdXCI7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNVdWlkUHJvcChwOiB1bmtub3duKTogcCBpcyBVdWlkUHJvcCB8IFV1aWRBcnJheVByb3Age1xuICByZXR1cm4gaXNVdWlkU2luZ2xlUHJvcChwKSB8fCBpc1V1aWRBcnJheVByb3AocCk7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNKc29uUHJvcChwOiB1bmtub3duKTogcCBpcyBKc29uUHJvcCB7XG4gIHJldHVybiAocCBhcyBKc29uUHJvcCk/LnR5cGUgPT09IFwianNvblwiO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzVmlydHVhbFByb3AocDogdW5rbm93bik6IHAgaXMgVmlydHVhbFByb3Age1xuICByZXR1cm4gKHAgYXMgVmlydHVhbFByb3ApPy50eXBlID09PSBcInZpcnR1YWxcIjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc1ZpcnR1YWxDb2RlUHJvcChwOiB1bmtub3duKTogcCBpcyBWaXJ0dWFsUHJvcCB7XG4gIGlmICghaXNWaXJ0dWFsUHJvcChwKSkgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gcC52aXJ0dWFsVHlwZSAhPT0gXCJxdWVyeVwiOyAvLyB1bmRlZmluZWTrj4QgXCJjb2RlXCLroZwg7Leo6riJXG59XG5leHBvcnQgZnVuY3Rpb24gaXNWaXJ0dWFsUXVlcnlQcm9wKHA6IHVua25vd24pOiBwIGlzIFZpcnR1YWxQcm9wIHtcbiAgaWYgKCFpc1ZpcnR1YWxQcm9wKHApKSByZXR1cm4gZmFsc2U7XG4gIHJldHVybiBwLnZpcnR1YWxUeXBlID09PSBcInF1ZXJ5XCI7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNWZWN0b3JTaW5nbGVQcm9wKHA6IHVua25vd24pOiBwIGlzIFZlY3RvclByb3Age1xuICByZXR1cm4gKHAgYXMgVmVjdG9yUHJvcCk/LnR5cGUgPT09IFwidmVjdG9yXCI7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNWZWN0b3JBcnJheVByb3AocDogdW5rbm93bik6IHAgaXMgVmVjdG9yQXJyYXlQcm9wIHtcbiAgcmV0dXJuIChwIGFzIFZlY3RvckFycmF5UHJvcCk/LnR5cGUgPT09IFwidmVjdG9yW11cIjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc1ZlY3RvclByb3AocDogdW5rbm93bik6IHAgaXMgVmVjdG9yUHJvcCB8IFZlY3RvckFycmF5UHJvcCB7XG4gIHJldHVybiBpc1ZlY3RvclNpbmdsZVByb3AocCkgfHwgaXNWZWN0b3JBcnJheVByb3AocCk7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNUc1ZlY3RvclByb3AocDogdW5rbm93bik6IHAgaXMgVHNWZWN0b3JQcm9wIHtcbiAgcmV0dXJuIChwIGFzIFRzVmVjdG9yUHJvcCk/LnR5cGUgPT09IFwidHN2ZWN0b3JcIjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc1JlbGF0aW9uUHJvcChwOiB1bmtub3duKTogcCBpcyBSZWxhdGlvblByb3Age1xuICByZXR1cm4gKHAgYXMgUmVsYXRpb25Qcm9wKT8udHlwZSA9PT0gXCJyZWxhdGlvblwiO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzT25lVG9PbmVSZWxhdGlvblByb3AocDogdW5rbm93bik6IHAgaXMgT25lVG9PbmVSZWxhdGlvblByb3Age1xuICByZXR1cm4gKHAgYXMgT25lVG9PbmVSZWxhdGlvblByb3ApPy5yZWxhdGlvblR5cGUgPT09IFwiT25lVG9PbmVcIjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc0JlbG9uZ3NUb09uZVJlbGF0aW9uUHJvcChwOiB1bmtub3duKTogcCBpcyBCZWxvbmdzVG9PbmVSZWxhdGlvblByb3Age1xuICByZXR1cm4gKHAgYXMgQmVsb25nc1RvT25lUmVsYXRpb25Qcm9wKT8ucmVsYXRpb25UeXBlID09PSBcIkJlbG9uZ3NUb09uZVwiO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzSGFzTWFueVJlbGF0aW9uUHJvcChwOiB1bmtub3duKTogcCBpcyBIYXNNYW55UmVsYXRpb25Qcm9wIHtcbiAgcmV0dXJuIChwIGFzIEhhc01hbnlSZWxhdGlvblByb3ApPy5yZWxhdGlvblR5cGUgPT09IFwiSGFzTWFueVwiO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzTWFueVRvTWFueVJlbGF0aW9uUHJvcChwOiB1bmtub3duKTogcCBpcyBNYW55VG9NYW55UmVsYXRpb25Qcm9wIHtcbiAgcmV0dXJuIChwIGFzIE1hbnlUb01hbnlSZWxhdGlvblByb3ApPy5yZWxhdGlvblR5cGUgPT09IFwiTWFueVRvTWFueVwiO1xufVxuXG50eXBlIEpvaW5DbGF1c2UgPVxuICB8IHtcbiAgICAgIGZyb206IHN0cmluZztcbiAgICAgIHRvOiBzdHJpbmc7XG4gICAgfVxuICB8IHtcbiAgICAgIGN1c3RvbTogc3RyaW5nO1xuICAgIH07XG5leHBvcnQgZnVuY3Rpb24gaXNDdXN0b21Kb2luQ2xhdXNlKHA6IHVua25vd24pOiBwIGlzIHsgY3VzdG9tOiBzdHJpbmcgfSB7XG4gIHJldHVybiAhIShwIGFzIHsgY3VzdG9tOiBzdHJpbmcgfSk/LmN1c3RvbTtcbn1cblxudHlwZSBTdWJzZXRMb2FkZXIgPSB7XG4gIGFzOiBzdHJpbmc7XG4gIHRhYmxlOiBzdHJpbmc7XG4gIG1hbnlKb2luOiB7XG4gICAgZnJvbVRhYmxlOiBzdHJpbmc7XG4gICAgZnJvbUNvbDogc3RyaW5nO1xuICAgIGlkRmllbGQ6IHN0cmluZztcbiAgICB0b1RhYmxlOiBzdHJpbmc7XG4gICAgdG9Db2w6IHN0cmluZztcbiAgICB0aHJvdWdoPzoge1xuICAgICAgdGFibGU6IHN0cmluZztcbiAgICAgIGZyb21Db2w6IHN0cmluZztcbiAgICAgIHRvQ29sOiBzdHJpbmc7XG4gICAgfTtcbiAgfTtcbiAgb25lSm9pbnM6ICh7XG4gICAgYXM6IHN0cmluZztcbiAgICBqb2luOiBcImlubmVyXCIgfCBcIm91dGVyXCI7XG4gICAgdGFibGU6IHN0cmluZztcbiAgfSAmIEpvaW5DbGF1c2UpW107XG4gIHNlbGVjdDogc3RyaW5nW107XG4gIGxvYWRlcnM/OiBTdWJzZXRMb2FkZXJbXTtcbn07XG5cbmV4cG9ydCB0eXBlIFN1YnNldFF1ZXJ5ID0ge1xuICBzZWxlY3Q6IHN0cmluZ1tdO1xuICB2aXJ0dWFsOiBzdHJpbmdbXTtcbiAgam9pbnM6ICh7XG4gICAgYXM6IHN0cmluZztcbiAgICBqb2luOiBcImlubmVyXCIgfCBcIm91dGVyXCI7XG4gICAgdGFibGU6IHN0cmluZztcbiAgfSAmIEpvaW5DbGF1c2UpW107XG4gIGxvYWRlcnM6IFN1YnNldExvYWRlcltdO1xufTtcblxuLyogQmFzZU1vZGVsICovXG5leHBvcnQgY29uc3QgU29uYW11UXVlcnlNb2RlID0gei5lbnVtKFtcImJvdGhcIiwgXCJsaXN0XCIsIFwiY291bnRcIl0pO1xuZXhwb3J0IHR5cGUgU29uYW11UXVlcnlNb2RlID0gei5pbmZlcjx0eXBlb2YgU29uYW11UXVlcnlNb2RlPjtcblxuLyogU2VtYW50aWMgUXVlcnkgKi9cbmV4cG9ydCBjb25zdCBTb25hbXVTZW1hbnRpY1BhcmFtcyA9IHoub2JqZWN0KHtcbiAgc2VtYW50aWNRdWVyeTogei5vYmplY3Qoe1xuICAgIGVtYmVkZGluZzogei5hcnJheSh6Lm51bWJlcigpKS5taW4oMTAyNCkubWF4KDEwMjQpLFxuICAgIHRocmVzaG9sZDogei5udW1iZXIoKS5vcHRpb25hbCgpLFxuICAgIG1ldGhvZDogei5lbnVtKFtcImNvc2luZVwiLCBcImwyXCIsIFwiaW5uZXJfcHJvZHVjdFwiXSkub3B0aW9uYWwoKSxcbiAgfSksXG4gIHdoaWNoOiB6LnN0cmluZygpLFxufSk7XG5leHBvcnQgdHlwZSBTb25hbXVTZW1hbnRpY1BhcmFtcyA9IHouaW5mZXI8dHlwZW9mIFNvbmFtdVNlbWFudGljUGFyYW1zPjtcblxuLyogS25leCBNaWdyYXRpb24gKi9cbmV4cG9ydCB0eXBlIEtuZXhFcnJvciA9IHtcbiAgY29kZTogc3RyaW5nO1xuICBlcnJubzogbnVtYmVyO1xuICBzcWw6IHN0cmluZztcbiAgc3FsTWVzc2FnZTogc3RyaW5nO1xuICBzcWxTdGF0ZTogc3RyaW5nO1xufTtcbmV4cG9ydCBmdW5jdGlvbiBpc0tuZXhFcnJvcihlOiB1bmtub3duKTogZSBpcyBLbmV4RXJyb3Ige1xuICByZXR1cm4gISEoZSBhcyBLbmV4RXJyb3IpPy5jb2RlICYmICEhKGUgYXMgS25leEVycm9yKT8uc3FsTWVzc2FnZSAmJiAhIShlIGFzIEtuZXhFcnJvcik/LnNxbFN0YXRlO1xufVxuXG5leHBvcnQgdHlwZSBLbmV4Q29sdW1uVHlwZSA9XG4gIHwgXCJzdHJpbmdcIlxuICB8IFwidGV4dFwiXG4gIHwgXCJzbWFsbHRleHRcIlxuICB8IFwibWVkaXVtdGV4dFwiXG4gIHwgXCJsb25ndGV4dFwiXG4gIHwgXCJpbnRlZ2VyXCJcbiAgfCBcImJpZ0ludGVnZXJcIlxuICB8IFwiZGVjaW1hbFwiXG4gIHwgXCJ0aW1lc3RhbXBcIlxuICB8IFwiYm9vbGVhblwiXG4gIHwgXCJmb3JlaWduXCJcbiAgfCBcInV1aWRcIlxuICB8IFwianNvblwiXG4gIHwgXCJmbG9hdFwiXG4gIHwgXCJkYXRlXCJcbiAgfCBcInRpbWVcIlxuICB8IFwiZGF0ZXRpbWVcIjtcbmV4cG9ydCB0eXBlIE1pZ3JhdGlvbkNvbHVtblR5cGUgPVxuICB8IFwic3RyaW5nXCJcbiAgfCBcInN0cmluZ1tdXCJcbiAgfCBcImludGVnZXJcIlxuICB8IFwiaW50ZWdlcltdXCJcbiAgfCBcImJpZ0ludGVnZXJcIlxuICB8IFwiYmlnSW50ZWdlcltdXCJcbiAgfCBcIm51bWJlck9yTnVtZXJpY1wiXG4gIHwgXCJudW1iZXJPck51bWVyaWNbXVwiXG4gIHwgXCJib29sZWFuXCJcbiAgfCBcImJvb2xlYW5bXVwiXG4gIHwgXCJkYXRlXCJcbiAgfCBcImRhdGVbXVwiXG4gIHwgXCJ1dWlkXCJcbiAgfCBcInV1aWRbXVwiXG4gIHwgXCJqc29uXCJcbiAgfCBcInZlY3RvclwiXG4gIHwgXCJ2ZWN0b3JbXVwiXG4gIHwgXCJ0c3ZlY3RvclwiO1xuZXhwb3J0IHR5cGUgTWlncmF0aW9uQ29sdW1uID0ge1xuICBuYW1lOiBzdHJpbmc7XG4gIHR5cGU6IE1pZ3JhdGlvbkNvbHVtblR5cGU7XG4gIG51bGxhYmxlOiBib29sZWFuO1xuICBudW1iZXJUeXBlPzogXCJyZWFsXCIgfCBcImRvdWJsZSBwcmVjaXNpb25cIiB8IFwibnVtZXJpY1wiO1xuICBsZW5ndGg/OiBudW1iZXI7XG4gIGRlZmF1bHRUbz86IHN0cmluZztcbiAgcHJlY2lzaW9uPzogbnVtYmVyO1xuICBzY2FsZT86IG51bWJlcjtcbiAgZGltZW5zaW9ucz86IG51bWJlcjtcbiAgZ2VuZXJhdGVkPzogR2VuZXJhdGVkQ29sdW1uO1xufTtcbmV4cG9ydCB0eXBlIE1pZ3JhdGlvbkluZGV4ID0ge1xuICB0eXBlOiBcInVuaXF1ZVwiIHwgXCJpbmRleFwiIHwgXCJobnN3XCIgfCBcIml2ZmZsYXRcIjtcbiAgY29sdW1uczogRW50aXR5SW5kZXhDb2x1bW5bXTtcbiAgbmFtZTogc3RyaW5nO1xuICB1c2luZz86IFwiYnRyZWVcIiB8IFwiaGFzaFwiIHwgXCJnaW5cIiB8IFwiZ2lzdFwiIHwgXCJwZ3Jvb25nYVwiO1xuICBudWxsc05vdERpc3RpbmN0PzogYm9vbGVhbjtcbiAgLyoqIEhOU1cgKEhpZXJhcmNoaWNhbCBOYXZpZ2FibGUgU21hbGwgV29ybGQpOiDqsIEg64W465Oc7J2YIOy1nOuMgCDsl7DqsrAg7IiYICovXG4gIG0/OiBudW1iZXI7XG4gIC8qKiBITlNXIChIaWVyYXJjaGljYWwgTmF2aWdhYmxlIFNtYWxsIFdvcmxkKTog6rWs7ISxIOyLnCDtg5Dsg4kg67KU7JyEICovXG4gIGVmQ29uc3RydWN0aW9uPzogbnVtYmVyO1xuICAvKiogSVZGRmxhdCAoSW52ZXJ0ZWQgRmlsZSB3aXRoIEZsYXQgQ29tcHJlc3Npb24pOiDtgbTrn6zsiqTthLDrp4Eg66as7Iqk7Yq4IOyImCAqL1xuICBsaXN0cz86IG51bWJlcjtcbn07XG5leHBvcnQgdHlwZSBNaWdyYXRpb25Gb3JlaWduID0ge1xuICBjb2x1bW5zOiBzdHJpbmdbXTtcbiAgdG86IHN0cmluZztcbiAgb25VcGRhdGU6IFJlbGF0aW9uT247XG4gIG9uRGVsZXRlOiBSZWxhdGlvbk9uO1xufTtcbmV4cG9ydCB0eXBlIE1pZ3JhdGlvbkpvaW5UYWJsZSA9IHtcbiAgdGFibGU6IHN0cmluZztcbiAgaW5kZXhlczogTWlncmF0aW9uSW5kZXhbXTtcbiAgY29sdW1uczogTWlncmF0aW9uQ29sdW1uW107XG4gIGZvcmVpZ25zOiBNaWdyYXRpb25Gb3JlaWduW107XG59O1xuZXhwb3J0IHR5cGUgTWlncmF0aW9uU2V0ID0ge1xuICB0YWJsZTogc3RyaW5nO1xuICBjb2x1bW5zOiBNaWdyYXRpb25Db2x1bW5bXTtcbiAgaW5kZXhlczogTWlncmF0aW9uSW5kZXhbXTtcbiAgZm9yZWlnbnM6IE1pZ3JhdGlvbkZvcmVpZ25bXTtcbn07XG5leHBvcnQgdHlwZSBNaWdyYXRpb25TZXRBbmRKb2luVGFibGUgPSBNaWdyYXRpb25TZXQgJiB7XG4gIGpvaW5UYWJsZXM6IE1pZ3JhdGlvbkpvaW5UYWJsZVtdO1xufTtcbmV4cG9ydCB0eXBlIEdlbk1pZ3JhdGlvbkNvZGUgPSB7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIHRhYmxlOiBzdHJpbmc7XG4gIHR5cGU6IFwibm9ybWFsXCIgfCBcImZvcmVpZ25cIjtcbiAgZm9ybWF0dGVkOiBzdHJpbmcgfCBudWxsO1xufTtcblxuLyogQXBpICovXG5leHBvcnQgdHlwZSBBcGlQYXJhbSA9IHtcbiAgbmFtZTogc3RyaW5nO1xuICB0eXBlOiBBcGlQYXJhbVR5cGU7XG4gIG9wdGlvbmFsOiBib29sZWFuO1xuICBkZWZhdWx0RGVmPzogc3RyaW5nO1xufTtcbmV4cG9ydCBuYW1lc3BhY2UgQXBpUGFyYW1UeXBlIHtcbiAgZXhwb3J0IHR5cGUgT2JqZWN0ID0ge1xuICAgIHQ6IFwib2JqZWN0XCI7XG4gICAgcHJvcHM6IEFwaVBhcmFtW107XG4gIH07XG4gIGV4cG9ydCB0eXBlIFVuaW9uID0ge1xuICAgIHQ6IFwidW5pb25cIjtcbiAgICB0eXBlczogQXBpUGFyYW1UeXBlW107XG4gIH07XG4gIGV4cG9ydCB0eXBlIEludGVyc2VjdGlvbiA9IHtcbiAgICB0OiBcImludGVyc2VjdGlvblwiO1xuICAgIHR5cGVzOiBBcGlQYXJhbVR5cGVbXTtcbiAgfTtcbiAgZXhwb3J0IHR5cGUgU3RyaW5nTGl0ZXJhbCA9IHtcbiAgICB0OiBcInN0cmluZy1saXRlcmFsXCI7XG4gICAgdmFsdWU6IHN0cmluZztcbiAgfTtcbiAgZXhwb3J0IHR5cGUgTnVtZXJpY0xpdGVyYWwgPSB7XG4gICAgdDogXCJudW1lcmljLWxpdGVyYWxcIjtcbiAgICB2YWx1ZTogbnVtYmVyO1xuICB9O1xuICBleHBvcnQgdHlwZSBBcnJheSA9IHtcbiAgICB0OiBcImFycmF5XCI7XG4gICAgZWxlbWVudHNUeXBlOiBBcGlQYXJhbVR5cGU7XG4gIH07XG4gIGV4cG9ydCB0eXBlIFJlZiA9IHtcbiAgICB0OiBcInJlZlwiO1xuICAgIGlkOiBzdHJpbmc7XG4gICAgYXJncz86IEFwaVBhcmFtVHlwZVtdO1xuICB9O1xuICBleHBvcnQgdHlwZSBJbmRleGVkQWNjZXNzID0ge1xuICAgIHQ6IFwiaW5kZXhlZC1hY2Nlc3NcIjtcbiAgICBvYmplY3Q6IEFwaVBhcmFtVHlwZTtcbiAgICBpbmRleDogQXBpUGFyYW1UeXBlO1xuICB9O1xuICBleHBvcnQgdHlwZSBUdXBsZVR5cGUgPSB7XG4gICAgdDogXCJ0dXBsZS10eXBlXCI7XG4gICAgZWxlbWVudHM6IEFwaVBhcmFtVHlwZVtdO1xuICB9O1xuICBleHBvcnQgdHlwZSBQaWNrID0gUmVmICYge1xuICAgIHQ6IFwicmVmXCI7XG4gICAgaWQ6IFwiUGlja1wiO1xuICB9O1xuICBleHBvcnQgdHlwZSBPbWl0ID0gUmVmICYge1xuICAgIHQ6IFwicmVmXCI7XG4gICAgaWQ6IFwiT21pdFwiO1xuICB9O1xuICBleHBvcnQgdHlwZSBQYXJ0aWFsID0gUmVmICYge1xuICAgIHQ6IFwicmVmXCI7XG4gICAgaWQ6IFwiUGFydGlhbFwiO1xuICB9O1xuICBleHBvcnQgdHlwZSBQcm9taXNlID0gUmVmICYge1xuICAgIHQ6IFwicmVmXCI7XG4gICAgaWQ6IFwiUHJvbWlzZVwiO1xuICB9O1xuICBleHBvcnQgdHlwZSBDb250ZXh0ID0gUmVmICYge1xuICAgIHQ6IFwicmVmXCI7XG4gICAgaWQ6IFwiQ29udGV4dFwiO1xuICB9O1xuICBleHBvcnQgdHlwZSBUeXBlUGFyYW0gPSB7XG4gICAgdDogXCJ0eXBlLXBhcmFtXCI7XG4gICAgaWQ6IHN0cmluZztcbiAgICBjb25zdHJhaW50PzogQXBpUGFyYW1UeXBlO1xuICB9O1xuXG4gIGV4cG9ydCBmdW5jdGlvbiBpc09iamVjdCh2OiB1bmtub3duKTogdiBpcyBBcGlQYXJhbVR5cGUuT2JqZWN0IHtcbiAgICByZXR1cm4gKHYgYXMgQXBpUGFyYW1UeXBlLk9iamVjdCk/LnQgPT09IFwib2JqZWN0XCI7XG4gIH1cbiAgZXhwb3J0IGZ1bmN0aW9uIGlzVW5pb24odjogdW5rbm93bik6IHYgaXMgQXBpUGFyYW1UeXBlLlVuaW9uIHtcbiAgICByZXR1cm4gKHYgYXMgQXBpUGFyYW1UeXBlLlVuaW9uKT8udCA9PT0gXCJ1bmlvblwiO1xuICB9XG4gIGV4cG9ydCBmdW5jdGlvbiBpc0ludGVyc2VjdGlvbih2OiB1bmtub3duKTogdiBpcyBBcGlQYXJhbVR5cGUuSW50ZXJzZWN0aW9uIHtcbiAgICByZXR1cm4gKHYgYXMgQXBpUGFyYW1UeXBlLkludGVyc2VjdGlvbik/LnQgPT09IFwiaW50ZXJzZWN0aW9uXCI7XG4gIH1cbiAgZXhwb3J0IGZ1bmN0aW9uIGlzU3RyaW5nTGl0ZXJhbCh2OiB1bmtub3duKTogdiBpcyBBcGlQYXJhbVR5cGUuU3RyaW5nTGl0ZXJhbCB7XG4gICAgcmV0dXJuICh2IGFzIEFwaVBhcmFtVHlwZS5TdHJpbmdMaXRlcmFsKT8udCA9PT0gXCJzdHJpbmctbGl0ZXJhbFwiO1xuICB9XG4gIGV4cG9ydCBmdW5jdGlvbiBpc051bWVyaWNMaXRlcmFsKHY6IHVua25vd24pOiB2IGlzIEFwaVBhcmFtVHlwZS5OdW1lcmljTGl0ZXJhbCB7XG4gICAgcmV0dXJuICh2IGFzIEFwaVBhcmFtVHlwZS5OdW1lcmljTGl0ZXJhbCk/LnQgPT09IFwibnVtZXJpYy1saXRlcmFsXCI7XG4gIH1cbiAgZXhwb3J0IGZ1bmN0aW9uIGlzQXJyYXkodjogdW5rbm93bik6IHYgaXMgQXBpUGFyYW1UeXBlLkFycmF5IHtcbiAgICByZXR1cm4gKHYgYXMgQXBpUGFyYW1UeXBlLkFycmF5KT8udCA9PT0gXCJhcnJheVwiO1xuICB9XG4gIGV4cG9ydCBmdW5jdGlvbiBpc1JlZih2OiB1bmtub3duKTogdiBpcyBBcGlQYXJhbVR5cGUuUmVmIHtcbiAgICByZXR1cm4gdHlwZW9mIHYgPT09IFwib2JqZWN0XCIgJiYgdiAhPT0gbnVsbCAmJiAodiBhcyB7IHQ/OiB1bmtub3duIH0pLnQgPT09IFwicmVmXCI7XG4gIH1cbiAgZXhwb3J0IGZ1bmN0aW9uIGlzSW5kZXhlZEFjY2Vzcyh2OiB1bmtub3duKTogdiBpcyBBcGlQYXJhbVR5cGUuSW5kZXhlZEFjY2VzcyB7XG4gICAgcmV0dXJuIHR5cGVvZiB2ID09PSBcIm9iamVjdFwiICYmIHYgIT09IG51bGwgJiYgKHYgYXMgeyB0PzogdW5rbm93biB9KS50ID09PSBcImluZGV4ZWQtYWNjZXNzXCI7XG4gIH1cbiAgZXhwb3J0IGZ1bmN0aW9uIGlzVHVwbGVUeXBlKHY6IHVua25vd24pOiB2IGlzIEFwaVBhcmFtVHlwZS5UdXBsZVR5cGUge1xuICAgIHJldHVybiB0eXBlb2YgdiA9PT0gXCJvYmplY3RcIiAmJiB2ICE9PSBudWxsICYmICh2IGFzIHsgdD86IHVua25vd24gfSkudCA9PT0gXCJ0dXBsZS10eXBlXCI7XG4gIH1cbiAgZXhwb3J0IGZ1bmN0aW9uIGlzUGljayh2OiB1bmtub3duKTogdiBpcyBBcGlQYXJhbVR5cGUuUGljayB7XG4gICAgcmV0dXJuIChcbiAgICAgIHR5cGVvZiB2ID09PSBcIm9iamVjdFwiICYmXG4gICAgICB2ICE9PSBudWxsICYmXG4gICAgICAodiBhcyB7IHQ/OiB1bmtub3duIH0pLnQgPT09IFwicmVmXCIgJiZcbiAgICAgICh2IGFzIHsgaWQ/OiB1bmtub3duIH0pLmlkID09PSBcIlBpY2tcIlxuICAgICk7XG4gIH1cbiAgZXhwb3J0IGZ1bmN0aW9uIGlzT21pdCh2OiB1bmtub3duKTogdiBpcyBBcGlQYXJhbVR5cGUuT21pdCB7XG4gICAgcmV0dXJuIChcbiAgICAgIHR5cGVvZiB2ID09PSBcIm9iamVjdFwiICYmXG4gICAgICB2ICE9PSBudWxsICYmXG4gICAgICAodiBhcyB7IHQ/OiB1bmtub3duIH0pLnQgPT09IFwicmVmXCIgJiZcbiAgICAgICh2IGFzIHsgaWQ/OiB1bmtub3duIH0pLmlkID09PSBcIk9taXRcIlxuICAgICk7XG4gIH1cbiAgZXhwb3J0IGZ1bmN0aW9uIGlzUGFydGlhbCh2OiB1bmtub3duKTogdiBpcyBBcGlQYXJhbVR5cGUuUGFydGlhbCB7XG4gICAgcmV0dXJuIChcbiAgICAgIHR5cGVvZiB2ID09PSBcIm9iamVjdFwiICYmXG4gICAgICB2ICE9PSBudWxsICYmXG4gICAgICAodiBhcyB7IHQ/OiB1bmtub3duIH0pLnQgPT09IFwicmVmXCIgJiZcbiAgICAgICh2IGFzIHsgaWQ/OiB1bmtub3duIH0pLmlkID09PSBcIlBhcnRpYWxcIlxuICAgICk7XG4gIH1cbiAgZXhwb3J0IGZ1bmN0aW9uIGlzUHJvbWlzZSh2OiB1bmtub3duKTogdiBpcyBBcGlQYXJhbVR5cGUuUHJvbWlzZSB7XG4gICAgcmV0dXJuIChcbiAgICAgIHR5cGVvZiB2ID09PSBcIm9iamVjdFwiICYmXG4gICAgICB2ICE9PSBudWxsICYmXG4gICAgICAodiBhcyB7IHQ/OiB1bmtub3duIH0pLnQgPT09IFwicmVmXCIgJiZcbiAgICAgICh2IGFzIHsgaWQ/OiB1bmtub3duIH0pLmlkID09PSBcIlByb21pc2VcIlxuICAgICk7XG4gIH1cbiAgZXhwb3J0IGZ1bmN0aW9uIGlzQ29udGV4dCh2OiB1bmtub3duKTogdiBpcyBBcGlQYXJhbVR5cGUuQ29udGV4dCB7XG4gICAgcmV0dXJuIChcbiAgICAgIHR5cGVvZiB2ID09PSBcIm9iamVjdFwiICYmXG4gICAgICB2ICE9PSBudWxsICYmXG4gICAgICAodiBhcyB7IHQ/OiB1bmtub3duIH0pLnQgPT09IFwicmVmXCIgJiZcbiAgICAgICh2IGFzIHsgaWQ/OiB1bmtub3duIH0pLmlkID09PSBcIkNvbnRleHRcIlxuICAgICk7XG4gIH1cbiAgZXhwb3J0IGZ1bmN0aW9uIGlzUmVmS25leCh2OiB1bmtub3duKTogdiBpcyBBcGlQYXJhbVR5cGUuUmVmIHtcbiAgICByZXR1cm4gKFxuICAgICAgdHlwZW9mIHYgPT09IFwib2JqZWN0XCIgJiZcbiAgICAgIHYgIT09IG51bGwgJiZcbiAgICAgICh2IGFzIHsgdD86IHVua25vd24gfSkudCA9PT0gXCJyZWZcIiAmJlxuICAgICAgKHYgYXMgeyBpZD86IHVua25vd24gfSkuaWQgPT09IFwiS25leFwiXG4gICAgKTtcbiAgfVxuICBleHBvcnQgZnVuY3Rpb24gaXNUeXBlUGFyYW0odjogdW5rbm93bik6IHYgaXMgQXBpUGFyYW1UeXBlLlR5cGVQYXJhbSB7XG4gICAgcmV0dXJuIHR5cGVvZiB2ID09PSBcIm9iamVjdFwiICYmIHYgIT09IG51bGwgJiYgKHYgYXMgeyB0PzogdW5rbm93biB9KS50ID09PSBcInR5cGUtcGFyYW1cIjtcbiAgfVxufVxuZXhwb3J0IHR5cGUgQXBpUGFyYW1UeXBlID1cbiAgfCBcInN0cmluZ1wiXG4gIHwgXCJudW1iZXJcIlxuICB8IFwiYm9vbGVhblwiXG4gIHwgXCJudWxsXCJcbiAgfCBcInVuZGVmaW5lZFwiXG4gIHwgXCJ2b2lkXCJcbiAgfCBcImFueVwiXG4gIHwgXCJ1bmtub3duXCJcbiAgfCBcInRydWVcIlxuICB8IFwiZmFsc2VcIlxuICB8IEFwaVBhcmFtVHlwZS5TdHJpbmdMaXRlcmFsXG4gIHwgQXBpUGFyYW1UeXBlLk51bWVyaWNMaXRlcmFsXG4gIHwgQXBpUGFyYW1UeXBlLk9iamVjdFxuICB8IEFwaVBhcmFtVHlwZS5VbmlvblxuICB8IEFwaVBhcmFtVHlwZS5JbnRlcnNlY3Rpb25cbiAgfCBBcGlQYXJhbVR5cGUuQXJyYXlcbiAgfCBBcGlQYXJhbVR5cGUuUmVmXG4gIHwgQXBpUGFyYW1UeXBlLkluZGV4ZWRBY2Nlc3NcbiAgfCBBcGlQYXJhbVR5cGUuVHlwZVBhcmFtXG4gIHwgQXBpUGFyYW1UeXBlLlR1cGxlVHlwZTtcblxuLyogVGVtcGxhdGUgKi9cbi8qKlxuICogVUkg7Lu07Y+s64SM7Yq4IOugjOuNlOungeydhCDsnITtlZwg66mU7YOA642w7J207YSwIOuFuOuTnOyeheuLiOuLpC5cbiAqXG4gKiAqKuuqqeyggSoqOiBab2Qg7Iqk7YKk66eI66Gc67aA7YSwIO2UhOuhoO2KuOyXlOuTnCBVSSDsu7Ttj6zrhIztirjrpbwg7J6Q64+ZIOyDneyEse2VmOq4sCDsnITtlZxcbiAqIOugjOuNlOungSDsoJXrs7Trpbwg64u07J2AIO2KuOumrCDqtazsobDsnoXri4jri6QuIOqwgSDtlYTrk5zqsIAg7Ja065akIFVJIOy7tO2PrOuEjO2KuOuhnFxuICog7ZGc7ZiE65CY7Ja07JW8IO2VmOuKlOyngCjthY3siqTtirgsIOydtOuvuOyngCwg64Kg7KecLCBFbnVtIOyEoO2DnSDrk7Ep66W8IOuqheyLnO2VqeuLiOuLpC5cbiAqXG4gKiAqKuuzgO2ZmCDtnZDrpoQqKjpcbiAqIEVudGl0eSBzdWJzZXQg4oaSIEVudGl0eVByb3BOb2RlIOKGkiBab2Qg7Iqk7YKk66eIIOKGkiBSZW5kZXJpbmdOb2RlIChVSeyaqSkg4oaSIFJlYWN0IOy7tO2PrOuEjO2KuCDsvZTrk5wg7IOd7ISxXG4gKlxuICogKirso7zsmpQg7ZWE65OcKio6XG4gKiAtIGByZW5kZXJUeXBlYDogVUkg7Lu07Y+s64SM7Yq4IOycoO2YlSAoc3RyaW5nLXBsYWluLCBudW1iZXItZmtfaWQsIGVudW1zLCBhcnJheSDrk7EpXG4gKiAtIGB6b2RUeXBlYDog7JuQ67O4IFpvZCDsiqTtgqTrp4ggKHZhbGlkYXRpb24g7JqpKVxuICogLSBgY2hpbGRyZW5gOiDspJHssqnrkJwg6rCd7LK0IO2VhOuTnOuTpCAob2JqZWN07J28IOuVjClcbiAqIC0gYGVsZW1lbnRgOiDrsLDsl7Qg7JqU7IaMIO2DgOyehSAoYXJyYXnsnbwg65WMKVxuICpcbiAqICoq7IKs7JqpIOychOy5mCoqOlxuICogLSB6b2QtY29udmVydGVyLnRz7J2YIHpvZFR5cGVUb1JlbmRlcmluZ05vZGUoKeyXkOyEnCDsg53shLFcbiAqIC0gdmlld19mb3JtLnRlbXBsYXRlLnRzLCB2aWV3X2xpc3QudGVtcGxhdGUudHMg65Ox7JeQ7IScIFJlYWN0IOy7tO2PrOuEjO2KuCDsvZTrk5wg7IOd7ISx7JeQIOyCrOyaqVxuICovXG4vLyDshYDtlIQg7LC47KGwIO2DgOyeheydtOuvgOuhnCBab2Qg7IOd65617ZWY6rOgIOyngeygkSDsoJXsnZhcbmV4cG9ydCBjb25zdCBSZW5kZXJpbmdOb2RlID0gei5hbnkoKTtcbmV4cG9ydCB0eXBlIFJlbmRlcmluZ05vZGUgPSB7XG4gIG5hbWU6IHN0cmluZztcbiAgbGFiZWw6IHN0cmluZztcbiAgcmVuZGVyVHlwZTpcbiAgICB8IFwic3RyaW5nLXBsYWluXCJcbiAgICB8IFwic3RyaW5nLWltYWdlXCJcbiAgICB8IFwic3RyaW5nLWRhdGV0aW1lXCJcbiAgICB8IFwic3RyaW5nLWRhdGVcIlxuICAgIHwgXCJkYXRldGltZVwiXG4gICAgfCBcIm51bWJlci1wbGFpblwiXG4gICAgfCBcIm51bWJlci1pZFwiXG4gICAgfCBcIm51bWJlci1ma19pZFwiXG4gICAgfCBcImJvb2xlYW5cIlxuICAgIHwgXCJlbnVtc1wiXG4gICAgfCBcImFycmF5XCJcbiAgICB8IFwiYXJyYXktaW1hZ2VzXCJcbiAgICB8IFwib2JqZWN0XCJcbiAgICB8IFwib2JqZWN0LXBpY2tcIlxuICAgIHwgXCJyZWNvcmRcIlxuICAgIHwgXCJ2ZWN0b3JcIjtcbiAgem9kVHlwZTogei5ab2RUeXBlQW55O1xuICBlbGVtZW50PzogUmVuZGVyaW5nTm9kZTtcbiAgY2hpbGRyZW4/OiBSZW5kZXJpbmdOb2RlW107XG4gIGNvbmZpZz86IHtcbiAgICBwaWNrZWQ6IHN0cmluZztcbiAgfTtcbiAgb3B0aW9uYWw/OiBib29sZWFuO1xuICBudWxsYWJsZT86IGJvb2xlYW47XG59O1xuXG5jb25zdCBHZW5lcmF0ZWRDb2x1bW5TY2hlbWEgPSB6Lm9iamVjdCh7XG4gIHR5cGU6IHouZW51bShbXCJTVE9SRURcIiwgXCJWSVJUVUFMXCJdKSxcbiAgZXhwcmVzc2lvbjogei5zdHJpbmcoKSxcbn0pO1xuXG5jb25zdCBCYXNlUHJvcEZpZWxkcyA9IHtcbiAgbmFtZTogei5zdHJpbmcoKSxcbiAgZGVzYzogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBudWxsYWJsZTogei5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgdG9GaWx0ZXI6IHouYm9vbGVhbigpLmRlZmF1bHQoZmFsc2UpLm9wdGlvbmFsKCksXG4gIGRiRGVmYXVsdDogei51bmlvbihbei5zdHJpbmcoKSwgei5udW1iZXIoKSwgei5ib29sZWFuKCldKS5vcHRpb25hbCgpLFxuICBnZW5lcmF0ZWQ6IEdlbmVyYXRlZENvbHVtblNjaGVtYS5vcHRpb25hbCgpLFxufTtcblxuLy8g67aA6rCAIO2VhOuTnOqwgCDtlYTsmpTsl4bripQgcHJvcFxuY29uc3QgQmFzZVByb3BGaWVsZHNXaXRob3V0QWRkaXRpb25hbCA9IHpcbiAgLm9iamVjdCh7XG4gICAgLi4uQmFzZVByb3BGaWVsZHMsXG4gICAgdHlwZTogei51bmlvbihbXG4gICAgICB6LmxpdGVyYWwoXCJpbnRlZ2VyXCIpLFxuICAgICAgei5saXRlcmFsKFwiaW50ZWdlcltdXCIpLFxuICAgICAgei5saXRlcmFsKFwiYmlnSW50ZWdlclwiKSxcbiAgICAgIHoubGl0ZXJhbChcImJpZ0ludGVnZXJbXVwiKSxcbiAgICAgIHoubGl0ZXJhbChcImJvb2xlYW5cIiksXG4gICAgICB6LmxpdGVyYWwoXCJib29sZWFuW11cIiksXG4gICAgICB6LmxpdGVyYWwoXCJkYXRlXCIpLFxuICAgICAgei5saXRlcmFsKFwiZGF0ZVtdXCIpLFxuICAgICAgei5saXRlcmFsKFwidXVpZFwiKSxcbiAgICAgIHoubGl0ZXJhbChcInV1aWRbXVwiKSxcbiAgICAgIHoubGl0ZXJhbChcInRzdmVjdG9yXCIpLFxuICAgIF0pLFxuICB9KVxuICAuc3RyaWN0KCk7XG5cbi8vIHByZWNpc2lvbi9zY2FsZSDtlYTrk5xcbmNvbnN0IFByZWNpc2lvblNjYWxlRmllbGRzID0ge1xuICBwcmVjaXNpb246IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgc2NhbGU6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbn07XG5cbi8vIOqwgSDtg4DsnoXrs4Qg7Iqk7YKk66eIIOygleydmFxuXG5jb25zdCBTdHJpbmdQcm9wU2NoZW1hID0gelxuICAub2JqZWN0KHtcbiAgICAuLi5CYXNlUHJvcEZpZWxkcyxcbiAgICB0eXBlOiB6LmxpdGVyYWwoXCJzdHJpbmdcIiksXG4gICAgbGVuZ3RoOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gIH0pXG4gIC5zdHJpY3QoKTtcbmNvbnN0IFN0cmluZ0FycmF5UHJvcFNjaGVtYSA9IHpcbiAgLm9iamVjdCh7XG4gICAgLi4uQmFzZVByb3BGaWVsZHMsXG4gICAgdHlwZTogei5saXRlcmFsKFwic3RyaW5nW11cIiksXG4gICAgbGVuZ3RoOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gIH0pXG4gIC5zdHJpY3QoKTtcblxuY29uc3QgRW51bVByb3BTY2hlbWEgPSB6XG4gIC5vYmplY3Qoe1xuICAgIC4uLkJhc2VQcm9wRmllbGRzLFxuICAgIHR5cGU6IHoubGl0ZXJhbChcImVudW1cIiksXG4gICAgaWQ6IHouc3RyaW5nKCksXG4gICAgbGVuZ3RoOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gIH0pXG4gIC5zdHJpY3QoKTtcbmNvbnN0IEVudW1BcnJheVByb3BTY2hlbWEgPSB6XG4gIC5vYmplY3Qoe1xuICAgIC4uLkJhc2VQcm9wRmllbGRzLFxuICAgIHR5cGU6IHoubGl0ZXJhbChcImVudW1bXVwiKSxcbiAgICBpZDogei5zdHJpbmcoKSxcbiAgfSlcbiAgLnN0cmljdCgpO1xuXG5jb25zdCBOdW1iZXJQcm9wU2NoZW1hID0gelxuICAub2JqZWN0KHtcbiAgICAuLi5CYXNlUHJvcEZpZWxkcyxcbiAgICB0eXBlOiB6LmxpdGVyYWwoXCJudW1iZXJcIiksXG4gICAgLi4uUHJlY2lzaW9uU2NhbGVGaWVsZHMsXG4gICAgbnVtYmVyVHlwZTogei5lbnVtKFtcInJlYWxcIiwgXCJkb3VibGUgcHJlY2lzaW9uXCIsIFwibnVtZXJpY1wiXSkub3B0aW9uYWwoKSxcbiAgfSlcbiAgLnN0cmljdCgpO1xuY29uc3QgTnVtYmVyQXJyYXlQcm9wU2NoZW1hID0gelxuICAub2JqZWN0KHtcbiAgICAuLi5CYXNlUHJvcEZpZWxkcyxcbiAgICB0eXBlOiB6LmxpdGVyYWwoXCJudW1iZXJbXVwiKSxcbiAgICAuLi5QcmVjaXNpb25TY2FsZUZpZWxkcyxcbiAgICBudW1iZXJUeXBlOiB6LmVudW0oW1wicmVhbFwiLCBcImRvdWJsZSBwcmVjaXNpb25cIiwgXCJudW1lcmljXCJdKS5vcHRpb25hbCgpLFxuICB9KVxuICAuc3RyaWN0KCk7XG5cbmNvbnN0IE51bWVyaWNQcm9wU2NoZW1hID0gelxuICAub2JqZWN0KHtcbiAgICAuLi5CYXNlUHJvcEZpZWxkcyxcbiAgICB0eXBlOiB6LmxpdGVyYWwoXCJudW1lcmljXCIpLFxuICAgIC4uLlByZWNpc2lvblNjYWxlRmllbGRzLFxuICB9KVxuICAuc3RyaWN0KCk7XG5jb25zdCBOdW1lcmljQXJyYXlQcm9wU2NoZW1hID0gelxuICAub2JqZWN0KHtcbiAgICAuLi5CYXNlUHJvcEZpZWxkcyxcbiAgICB0eXBlOiB6LmxpdGVyYWwoXCJudW1lcmljW11cIiksXG4gICAgLi4uUHJlY2lzaW9uU2NhbGVGaWVsZHMsXG4gIH0pXG4gIC5zdHJpY3QoKTtcblxuY29uc3QgSnNvblByb3BTY2hlbWEgPSB6XG4gIC5vYmplY3Qoe1xuICAgIC4uLkJhc2VQcm9wRmllbGRzLFxuICAgIHR5cGU6IHoubGl0ZXJhbChcImpzb25cIiksXG4gICAgaWQ6IHouc3RyaW5nKCksXG4gIH0pXG4gIC5zdHJpY3QoKTtcblxuY29uc3QgVmlydHVhbFByb3BTY2hlbWEgPSB6XG4gIC5vYmplY3Qoe1xuICAgIC4uLkJhc2VQcm9wRmllbGRzLFxuICAgIHR5cGU6IHoubGl0ZXJhbChcInZpcnR1YWxcIiksXG4gICAgaWQ6IHouc3RyaW5nKCksXG4gICAgdmlydHVhbFR5cGU6IHouZW51bShbXCJxdWVyeVwiLCBcImNvZGVcIl0pLm9wdGlvbmFsKCksXG4gIH0pXG4gIC5zdHJpY3QoKTtcblxuY29uc3QgVmVjdG9yUHJvcFNjaGVtYSA9IHpcbiAgLm9iamVjdCh7XG4gICAgLi4uQmFzZVByb3BGaWVsZHMsXG4gICAgdHlwZTogei5saXRlcmFsKFwidmVjdG9yXCIpLFxuICAgIGRpbWVuc2lvbnM6IHoubnVtYmVyKCksXG4gIH0pXG4gIC5zdHJpY3QoKTtcbmNvbnN0IFZlY3RvckFycmF5UHJvcFNjaGVtYSA9IHpcbiAgLm9iamVjdCh7XG4gICAgLi4uQmFzZVByb3BGaWVsZHMsXG4gICAgdHlwZTogei5saXRlcmFsKFwidmVjdG9yW11cIiksXG4gICAgZGltZW5zaW9uczogei5udW1iZXIoKSxcbiAgfSlcbiAgLnN0cmljdCgpO1xuXG4vLyBSZWxhdGlvbiDtg4DsnoXsnYAgcmVsYXRpb25UeXBl7JeQIOuUsOudvCDshLjrtoTtmZRcbmNvbnN0IEJhc2VSZWxhdGlvbkZpZWxkcyA9IHtcbiAgLi4uQmFzZVByb3BGaWVsZHMsXG4gIHR5cGU6IHoubGl0ZXJhbChcInJlbGF0aW9uXCIpLFxuICB3aXRoOiB6LnN0cmluZygpLFxufTtcblxuLy8gUmVsYXRpb25PbiDtg4DsnoVcbmNvbnN0IFJlbGF0aW9uT25TY2hlbWEgPSB6LmVudW0oW1wiQ0FTQ0FERVwiLCBcIlNFVCBOVUxMXCIsIFwiTk8gQUNUSU9OXCIsIFwiU0VUIERFRkFVTFRcIiwgXCJSRVNUUklDVFwiXSk7XG5cbmNvbnN0IEJlbG9uZ3NUb09uZVJlbGF0aW9uUHJvcFNjaGVtYSA9IHpcbiAgLm9iamVjdCh7XG4gICAgLi4uQmFzZVJlbGF0aW9uRmllbGRzLFxuICAgIHJlbGF0aW9uVHlwZTogei5saXRlcmFsKFwiQmVsb25nc1RvT25lXCIpLFxuICAgIGN1c3RvbUpvaW5DbGF1c2U6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICB1c2VDb25zdHJhaW50OiB6LmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICAgIG9uVXBkYXRlOiBSZWxhdGlvbk9uU2NoZW1hLm9wdGlvbmFsKCksXG4gICAgb25EZWxldGU6IFJlbGF0aW9uT25TY2hlbWEub3B0aW9uYWwoKSxcbiAgfSlcbiAgLnN0cmljdCgpO1xuXG5jb25zdCBIYXNNYW55UmVsYXRpb25Qcm9wU2NoZW1hID0gelxuICAub2JqZWN0KHtcbiAgICAuLi5CYXNlUmVsYXRpb25GaWVsZHMsXG4gICAgcmVsYXRpb25UeXBlOiB6LmxpdGVyYWwoXCJIYXNNYW55XCIpLFxuICAgIGpvaW5Db2x1bW46IHouc3RyaW5nKCksXG4gICAgZnJvbUNvbHVtbjogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB9KVxuICAuc3RyaWN0KCk7XG5cbmNvbnN0IE1hbnlUb01hbnlSZWxhdGlvblByb3BTY2hlbWEgPSB6XG4gIC5vYmplY3Qoe1xuICAgIC4uLkJhc2VSZWxhdGlvbkZpZWxkcyxcbiAgICByZWxhdGlvblR5cGU6IHoubGl0ZXJhbChcIk1hbnlUb01hbnlcIiksXG4gICAgam9pblRhYmxlOiB6LnN0cmluZygpLFxuICAgIG9uVXBkYXRlOiBSZWxhdGlvbk9uU2NoZW1hLFxuICAgIG9uRGVsZXRlOiBSZWxhdGlvbk9uU2NoZW1hLFxuICB9KVxuICAuc3RyaWN0KCk7XG5cbmNvbnN0IE9uZVRvT25lUmVsYXRpb25Qcm9wU2NoZW1hID0gelxuICAub2JqZWN0KHtcbiAgICAuLi5CYXNlUmVsYXRpb25GaWVsZHMsXG4gICAgcmVsYXRpb25UeXBlOiB6LmxpdGVyYWwoXCJPbmVUb09uZVwiKSxcbiAgICBjdXN0b21Kb2luQ2xhdXNlOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgaGFzSm9pbkNvbHVtbjogei5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgICB1c2VDb25zdHJhaW50OiB6LmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICAgIG9uVXBkYXRlOiBSZWxhdGlvbk9uU2NoZW1hLm9wdGlvbmFsKCksXG4gICAgb25EZWxldGU6IFJlbGF0aW9uT25TY2hlbWEub3B0aW9uYWwoKSxcbiAgfSlcbiAgLnN0cmljdCgpO1xuXG5jb25zdCBSZWxhdGlvblR5cGVzID0gW1wiQmVsb25nc1RvT25lXCIsIFwiSGFzTWFueVwiLCBcIk1hbnlUb01hbnlcIiwgXCJPbmVUb09uZVwiXSBhcyBjb25zdDtcbmV4cG9ydCBjb25zdCBSZWxhdGlvblByb3BTY2hlbWEgPSB6LmRpc2NyaW1pbmF0ZWRVbmlvbihcbiAgXCJyZWxhdGlvblR5cGVcIixcbiAgW1xuICAgIEJlbG9uZ3NUb09uZVJlbGF0aW9uUHJvcFNjaGVtYSxcbiAgICBIYXNNYW55UmVsYXRpb25Qcm9wU2NoZW1hLFxuICAgIE1hbnlUb01hbnlSZWxhdGlvblByb3BTY2hlbWEsXG4gICAgT25lVG9PbmVSZWxhdGlvblByb3BTY2hlbWEsXG4gIF0sXG4gIHtcbiAgICBlcnJvcjogKGlzcykgPT5cbiAgICAgIGByZWxhdGlvblR5cGXsnYAgJHtSZWxhdGlvblR5cGVzLm1hcCgodCkgPT4gYCcke3R9J2ApLmpvaW4oXCIsIFwiKX0g7KSRIO2VmOuCmOyXrOyVvCDtlanri4jri6QuIOyeheugpeqwkjogXCIkeyhpc3MuaW5wdXQgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pPy5yZWxhdGlvblR5cGV9XCJgLFxuICB9LFxuKTtcblxuY29uc3QgTm9ybWFsUHJvcFR5cGVzID0gW1xuICBcImludGVnZXJcIixcbiAgXCJpbnRlZ2VyW11cIixcbiAgXCJiaWdJbnRlZ2VyXCIsXG4gIFwiYmlnSW50ZWdlcltdXCIsXG4gIFwic3RyaW5nXCIsXG4gIFwic3RyaW5nW11cIixcbiAgXCJlbnVtXCIsXG4gIFwiZW51bVtdXCIsXG4gIFwibnVtYmVyXCIsXG4gIFwibnVtYmVyW11cIixcbiAgXCJudW1lcmljXCIsXG4gIFwibnVtZXJpY1tdXCIsXG4gIFwiYm9vbGVhblwiLFxuICBcImJvb2xlYW5bXVwiLFxuICBcImRhdGVcIixcbiAgXCJkYXRlW11cIixcbiAgXCJ1dWlkXCIsXG4gIFwidXVpZFtdXCIsXG4gIFwianNvblwiLFxuICBcInZpcnR1YWxcIixcbiAgXCJ2ZWN0b3JcIixcbiAgXCJ2ZWN0b3JbXVwiLFxuICBcInRzdmVjdG9yXCIsXG5dIGFzIGNvbnN0O1xuXG4vLyBWSVJUVUFMIEdlbmVyYXRlZCBDb2x1bW7sl5DshJwg7IKs7JqpIOu2iOqwgOuKpe2VnCDtg4DsnoXrk6RcbmNvbnN0IFZpcnR1YWxHZW5lcmF0ZWREaXNhbGxvd2VkVHlwZXMgPSBbXG4gIFwianNvblwiLFxuICBcInZlY3RvclwiLFxuICBcInZlY3RvcltdXCIsXG4gIFwic3RyaW5nW11cIixcbiAgXCJpbnRlZ2VyW11cIixcbiAgXCJiaWdJbnRlZ2VyW11cIixcbiAgXCJib29sZWFuW11cIixcbiAgXCJkYXRlW11cIixcbiAgXCJ1dWlkW11cIixcbiAgXCJudW1iZXJbXVwiLFxuICBcIm51bWVyaWNbXVwiLFxuICBcImVudW1bXVwiLFxuXSBhcyBjb25zdDtcblxuZXhwb3J0IGNvbnN0IE5vcm1hbFByb3BTY2hlbWEgPSB6XG4gIC5kaXNjcmltaW5hdGVkVW5pb24oXG4gICAgXCJ0eXBlXCIsXG4gICAgW1xuICAgICAgQmFzZVByb3BGaWVsZHNXaXRob3V0QWRkaXRpb25hbCxcbiAgICAgIFN0cmluZ1Byb3BTY2hlbWEsXG4gICAgICBTdHJpbmdBcnJheVByb3BTY2hlbWEsXG4gICAgICBFbnVtUHJvcFNjaGVtYSxcbiAgICAgIEVudW1BcnJheVByb3BTY2hlbWEsXG4gICAgICBOdW1iZXJQcm9wU2NoZW1hLFxuICAgICAgTnVtYmVyQXJyYXlQcm9wU2NoZW1hLFxuICAgICAgTnVtZXJpY1Byb3BTY2hlbWEsXG4gICAgICBOdW1lcmljQXJyYXlQcm9wU2NoZW1hLFxuICAgICAgSnNvblByb3BTY2hlbWEsXG4gICAgICBWaXJ0dWFsUHJvcFNjaGVtYSxcbiAgICAgIFZlY3RvclByb3BTY2hlbWEsXG4gICAgICBWZWN0b3JBcnJheVByb3BTY2hlbWEsXG4gICAgXSxcbiAgICB7XG4gICAgICBlcnJvcjogKGlzcykgPT5cbiAgICAgICAgYHR5cGXsnYAgJHtOb3JtYWxQcm9wVHlwZXMubWFwKCh0KSA9PiBgJyR7dH0nYCkuam9pbihcIiwgXCIpfSDspJEg7ZWY64KY7Jes7JW8IO2VqeuLiOuLpC4g7J6F66Cl6rCSOiBcIiR7KGlzcy5pbnB1dCBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik/LnR5cGV9XCJgLFxuICAgIH0sXG4gIClcbiAgLnN1cGVyUmVmaW5lKChkYXRhLCBjdHgpID0+IHtcbiAgICBpZiAoIWRhdGEuZ2VuZXJhdGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gZGJEZWZhdWx07JmAIGdlbmVyYXRlZCDrj5nsi5wg7IKs7JqpIOu2iOqwgFxuICAgIGlmIChkYXRhLmRiRGVmYXVsdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjdHguYWRkSXNzdWUoe1xuICAgICAgICBjb2RlOiBcImN1c3RvbVwiLFxuICAgICAgICBtZXNzYWdlOiBcImRiRGVmYXVsdOyZgCBnZW5lcmF0ZWTripQg7ZWo6ruYIOyCrOyaqe2VoCDsiJgg7JeG7Iq164uI64ukXCIsXG4gICAgICAgIHBhdGg6IFtcImdlbmVyYXRlZFwiXSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIHZpcnR1YWwg7YOA7J6F7J2AIGdlbmVyYXRlZCDrtojqsIBcbiAgICBpZiAoZGF0YS50eXBlID09PSBcInZpcnR1YWxcIikge1xuICAgICAgY3R4LmFkZElzc3VlKHtcbiAgICAgICAgY29kZTogXCJjdXN0b21cIixcbiAgICAgICAgbWVzc2FnZTogXCJ2aXJ0dWFsIO2DgOyeheydgCBnZW5lcmF0ZWQgY29sdW1u7J2EIOyngOybkO2VmOyngCDslYrsirXri4jri6RcIixcbiAgICAgICAgcGF0aDogW1wiZ2VuZXJhdGVkXCJdLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gVklSVFVBTCBHZW5lcmF0ZWQgQ29sdW1uIO2DgOyehSDsoJztlZwg6rKA7KadXG4gICAgaWYgKGRhdGEuZ2VuZXJhdGVkLnR5cGUgPT09IFwiVklSVFVBTFwiKSB7XG4gICAgICBpZiAoKFZpcnR1YWxHZW5lcmF0ZWREaXNhbGxvd2VkVHlwZXMgYXMgcmVhZG9ubHkgc3RyaW5nW10pLmluY2x1ZGVzKGRhdGEudHlwZSkpIHtcbiAgICAgICAgY3R4LmFkZElzc3VlKHtcbiAgICAgICAgICBjb2RlOiBcImN1c3RvbVwiLFxuICAgICAgICAgIG1lc3NhZ2U6IGBWSVJUVUFMIGdlbmVyYXRlZCBjb2x1bW7snYAgJHtkYXRhLnR5cGV9IO2DgOyeheydhCDsp4Dsm5DtlZjsp4Ag7JWK7Iq164uI64ukLiBTVE9SRUTrpbwg7IKs7Jqp7ZWY7IS47JqULmAsXG4gICAgICAgICAgcGF0aDogW1wiZ2VuZXJhdGVkXCIsIFwidHlwZVwiXSxcbiAgICAgICAgICBmYXRhbDogdHJ1ZSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9KTtcblxuY29uc3QgQWxsUHJvcFR5cGVzID0gWy4uLk5vcm1hbFByb3BUeXBlcywgXCJyZWxhdGlvblwiXSBhcyBjb25zdDtcbmNvbnN0IEVudGl0eVByb3BTY2hlbWEgPSB6LmRpc2NyaW1pbmF0ZWRVbmlvbihcInR5cGVcIiwgW05vcm1hbFByb3BTY2hlbWEsIFJlbGF0aW9uUHJvcFNjaGVtYV0sIHtcbiAgZXJyb3I6IChpc3MpID0+XG4gICAgYHR5cGXsnYAgJHtBbGxQcm9wVHlwZXMubWFwKCh0KSA9PiBgJyR7dH0nYCkuam9pbihcIiwgXCIpfSDspJEg7ZWY64KY7Jes7JW8IO2VqeuLiOuLpC4g7J6F66Cl6rCSOiBcIiR7KGlzcy5pbnB1dCBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik/LnR5cGV9XCJgLFxufSk7XG5cbmNvbnN0IEVudGl0eUluZGV4Q29sdW1uU2NoZW1hID0gei5vYmplY3Qoe1xuICBuYW1lOiB6LnN0cmluZygpLFxuICBudWxsc0ZpcnN0OiB6LmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICBzb3J0T3JkZXI6IHouZW51bShbXCJBU0NcIiwgXCJERVNDXCJdKS5vcHRpb25hbCgpLFxuICB2ZWN0b3JPcHM6IHouZW51bShbXCJ2ZWN0b3JfY29zaW5lX29wc1wiLCBcInZlY3Rvcl9pcF9vcHNcIiwgXCJ2ZWN0b3JfbDJfb3BzXCJdKS5vcHRpb25hbCgpLFxufSk7XG5cbi8vIEVudGl0eUluZGV4IOyKpO2CpOuniCDsoJXsnZhcbmNvbnN0IEVudGl0eUluZGV4U2NoZW1hID0gelxuICAub2JqZWN0KHtcbiAgICB0eXBlOiB6LmVudW0oW1wiaW5kZXhcIiwgXCJ1bmlxdWVcIiwgXCJobnN3XCIsIFwiaXZmZmxhdFwiXSksXG4gICAgY29sdW1uczogei5hcnJheShFbnRpdHlJbmRleENvbHVtblNjaGVtYSksXG4gICAgbmFtZTogei5zdHJpbmcoKS5taW4oMSkubWF4KDYzKSxcbiAgICB1c2luZzogei5lbnVtKFtcImJ0cmVlXCIsIFwiaGFzaFwiLCBcImdpblwiLCBcImdpc3RcIiwgXCJwZ3Jvb25nYVwiXSkub3B0aW9uYWwoKSxcbiAgICBudWxsc05vdERpc3RpbmN0OiB6LmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICAgIG06IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgICBlZkNvbnN0cnVjdGlvbjogei5udW1iZXIoKS5vcHRpb25hbCgpLFxuICAgIGxpc3RzOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gIH0pXG4gIC5zdHJpY3QoKTtcblxuZXhwb3J0IGNvbnN0IEVudGl0eUpzb25TY2hlbWEgPSB6XG4gIC5vYmplY3Qoe1xuICAgIGlkOiB6LnN0cmluZygpLmRlc2NyaWJlKFwiUGFzY2FsQ2FzZeuhnCDrkJwgRW50aXR5IElEXCIpLFxuICAgIHRpdGxlOiB6LnN0cmluZygpLmRlc2NyaWJlKFwiRW50aXR5IOydtOumhFwiKSxcbiAgICB0YWJsZTogei5zdHJpbmcoKS5kZXNjcmliZShcInNuYWtlX2Nhc2XroZwg65CcIO2FjOydtOu4lOuqhVwiKSxcbiAgICBwYXJlbnRJZDogei5zdHJpbmcoKS5vcHRpb25hbCgpLmRlc2NyaWJlKFwi67aA66qoIEVudGl0eSBJRFwiKSxcbiAgICBwcm9wczogei5hcnJheShFbnRpdHlQcm9wU2NoZW1hKSxcbiAgICBpbmRleGVzOiB6LmFycmF5KEVudGl0eUluZGV4U2NoZW1hKSxcbiAgICBzdWJzZXRzOiB6LnJlY29yZChcbiAgICAgIHouc3RyaW5nKCksXG4gICAgICB6LmFycmF5KFxuICAgICAgICB6LnVuaW9uKFt6LnN0cmluZygpLCB6Lm9iamVjdCh7IGZpZWxkOiB6LnN0cmluZygpLCBpbnRlcm5hbDogei5ib29sZWFuKCkub3B0aW9uYWwoKSB9KV0pLFxuICAgICAgKSxcbiAgICApLFxuICAgIGVudW1zOiB6LnJlY29yZCh6LnN0cmluZygpLCB6LnJlY29yZCh6LnN0cmluZygpLCB6LnN0cmluZygpKSksXG4gIH0pXG4gIC5zdHJpY3QoKTtcblxuZXhwb3J0IGNvbnN0IFRlbXBsYXRlT3B0aW9ucyA9IHoub2JqZWN0KHtcbiAgZW50aXR5OiBFbnRpdHlKc29uU2NoZW1hLm9taXQoeyBpZDogdHJ1ZSB9KVxuICAgIC5leHRlbmQoe1xuICAgICAgZW50aXR5SWQ6IHouc3RyaW5nKCksXG4gICAgfSlcbiAgICAucGFydGlhbCh7XG4gICAgICB0YWJsZTogdHJ1ZSxcbiAgICAgIHByb3BzOiB0cnVlLFxuICAgICAgaW5kZXhlczogdHJ1ZSxcbiAgICAgIHN1YnNldHM6IHRydWUsXG4gICAgICBlbnVtczogdHJ1ZSxcbiAgICB9KSxcbiAgaW5pdF90eXBlczogei5vYmplY3Qoe1xuICAgIGVudGl0eUlkOiB6LnN0cmluZygpLFxuICB9KSxcbiAgZ2VuZXJhdGVkOiB6Lm9iamVjdCh7fSksXG4gIGdlbmVyYXRlZF9zc286IHoub2JqZWN0KHt9KSxcbiAgZ2VuZXJhdGVkX2h0dHA6IHoub2JqZWN0KHtcbiAgICBlbnRpdHlJZDogei5zdHJpbmcoKSxcbiAgfSksXG4gIG1vZGVsOiB6Lm9iamVjdCh7XG4gICAgZW50aXR5SWQ6IHouc3RyaW5nKCksXG4gICAgZGVmYXVsdFNlYXJjaEZpZWxkOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgZGVmYXVsdE9yZGVyQnk6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgfSksXG4gIG1vZGVsX3Rlc3Q6IHoub2JqZWN0KHtcbiAgICBlbnRpdHlJZDogei5zdHJpbmcoKSxcbiAgfSksXG4gIGJyaWRnZTogei5vYmplY3Qoe1xuICAgIGVudGl0eUlkOiB6LnN0cmluZygpLFxuICB9KSxcbiAgc2VydmljZXM6IHoub2JqZWN0KHt9KSxcbiAgdmlld19saXN0OiB6Lm9iamVjdCh7XG4gICAgZW50aXR5SWQ6IHouc3RyaW5nKCksXG4gICAgZXh0cmE6IHoudW5rbm93bigpLFxuICB9KSxcbiAgdmlld19saXN0X2NvbHVtbnM6IHoub2JqZWN0KHtcbiAgICBlbnRpdHlJZDogei5zdHJpbmcoKSxcbiAgICBjb2x1bW5zOiB6XG4gICAgICAub2JqZWN0KHtcbiAgICAgICAgbmFtZTogei5zdHJpbmcoKSxcbiAgICAgICAgbGFiZWw6IHouc3RyaW5nKCksXG4gICAgICAgIHRjOiB6LnN0cmluZygpLFxuICAgICAgfSlcbiAgICAgIC5hcnJheSgpLFxuICAgIGNvbHVtbkltcG9ydHM6IHouc3RyaW5nKCksXG4gIH0pLFxuICB2aWV3X3NlYXJjaF9pbnB1dDogei5vYmplY3Qoe1xuICAgIGVudGl0eUlkOiB6LnN0cmluZygpLFxuICB9KSxcbiAgdmlld19mb3JtOiB6Lm9iamVjdCh7XG4gICAgZW50aXR5SWQ6IHouc3RyaW5nKCksXG4gIH0pLFxuICB2aWV3X2lkX2FsbF9zZWxlY3Q6IHoub2JqZWN0KHtcbiAgICBlbnRpdHlJZDogei5zdHJpbmcoKSxcbiAgfSksXG4gIHZpZXdfaWRfYXN5bmNfc2VsZWN0OiB6Lm9iamVjdCh7XG4gICAgZW50aXR5SWQ6IHouc3RyaW5nKCksXG4gICAgdGV4dEZpZWxkOiB6LnN0cmluZygpLFxuICB9KSxcbiAgdmlld19lbnVtc19zZWxlY3Q6IHoub2JqZWN0KHtcbiAgICBlbnRpdHlJZDogei5zdHJpbmcoKSxcbiAgICBlbnVtSWQ6IHouc3RyaW5nKCksXG4gIH0pLFxuICB2aWV3X2VudW1zX2Ryb3Bkb3duOiB6Lm9iamVjdCh7XG4gICAgZW50aXR5SWQ6IHouc3RyaW5nKCksXG4gICAgZW51bUlkOiB6LnN0cmluZygpLFxuICB9KSxcbiAgdmlld19lbnVtc19idXR0b25zZXQ6IHoub2JqZWN0KHtcbiAgICBlbnRpdHlJZDogei5zdHJpbmcoKSxcbiAgICBlbnVtSWQ6IHouc3RyaW5nKCksXG4gIH0pLFxufSk7XG5leHBvcnQgdHlwZSBUZW1wbGF0ZU9wdGlvbnMgPSB6LmluZmVyPHR5cGVvZiBUZW1wbGF0ZU9wdGlvbnM+O1xuXG5leHBvcnQgY29uc3QgVGVtcGxhdGVLZXkgPSB6LmVudW0oW1xuICBcImVudGl0eVwiLFxuICBcImluaXRfdHlwZXNcIixcbiAgXCJnZW5lcmF0ZWRcIixcbiAgXCJnZW5lcmF0ZWRfc3NvXCIsXG4gIFwiZ2VuZXJhdGVkX2h0dHBcIixcbiAgXCJtb2RlbFwiLFxuICBcIm1vZGVsX3Rlc3RcIixcbiAgXCJicmlkZ2VcIixcbiAgXCJzZXJ2aWNlc1wiLFxuICBcInZpZXdfbGlzdFwiLFxuICBcInZpZXdfbGlzdF9jb2x1bW5zXCIsXG4gIFwidmlld19zZWFyY2hfaW5wdXRcIixcbiAgXCJ2aWV3X2Zvcm1cIixcbiAgXCJ2aWV3X2lkX2FsbF9zZWxlY3RcIixcbiAgXCJ2aWV3X2lkX2FzeW5jX3NlbGVjdFwiLFxuICBcInZpZXdfZW51bXNfc2VsZWN0XCIsXG4gIFwidmlld19lbnVtc19kcm9wZG93blwiLFxuICBcInZpZXdfZW51bXNfYnV0dG9uc2V0XCIsXG5dKTtcbmV4cG9ydCB0eXBlIFRlbXBsYXRlS2V5ID0gei5pbmZlcjx0eXBlb2YgVGVtcGxhdGVLZXk+O1xuXG5leHBvcnQgY29uc3QgR2VuZXJhdGVPcHRpb25zID0gei5vYmplY3Qoe1xuICBvdmVyd3JpdGU6IHouYm9vbGVhbigpLm9wdGlvbmFsKCksXG59KTtcbmV4cG9ydCB0eXBlIEdlbmVyYXRlT3B0aW9ucyA9IHouaW5mZXI8dHlwZW9mIEdlbmVyYXRlT3B0aW9ucz47XG5cbmV4cG9ydCBjb25zdCBQYXRoQW5kQ29kZSA9IHoub2JqZWN0KHtcbiAgcGF0aDogei5zdHJpbmcoKSxcbiAgY29kZTogei5zdHJpbmcoKSxcbn0pO1xuZXhwb3J0IHR5cGUgUGF0aEFuZENvZGUgPSB6LmluZmVyPHR5cGVvZiBQYXRoQW5kQ29kZT47XG5cbmV4cG9ydCB0eXBlIEZpeHR1cmVTZWFyY2hPcHRpb25zID0ge1xuICBlbnRpdHlJZDogc3RyaW5nO1xuICBmaWVsZDogc3RyaW5nO1xuICB2YWx1ZTogc3RyaW5nO1xuICBzZWFyY2hUeXBlOiBcImVxdWFsc1wiIHwgXCJsaWtlXCI7XG59O1xuXG50eXBlIENvbHVtblZhbHVlID0gc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IERhdGUgfCBudWxsO1xuZXhwb3J0IHR5cGUgRml4dHVyZVJlY29yZCA9IHtcbiAgZml4dHVyZUlkOiBzdHJpbmc7XG4gIGVudGl0eUlkOiBzdHJpbmc7XG4gIGlkOiBudW1iZXI7XG4gIGNvbHVtbnM6IHtcbiAgICBba2V5OiBzdHJpbmddOiB7XG4gICAgICBwcm9wOiBFbnRpdHlQcm9wO1xuICAgICAgdmFsdWU6IENvbHVtblZhbHVlIHwgQ29sdW1uVmFsdWVbXTtcbiAgICB9O1xuICB9O1xuICBmZXRjaGVkUmVjb3Jkczogc3RyaW5nW107XG4gIGJlbG9uZ3NSZWNvcmRzOiBzdHJpbmdbXTtcbiAgdGFyZ2V0PzogRml4dHVyZVJlY29yZDsgLy8gSW1wb3J0IOuMgOyDgSBEQiDroIjsvZTrk5woaWTqsIAg6rCZ7J2AKVxuICB1bmlxdWU/OiBGaXh0dXJlUmVjb3JkOyAvLyBJbXBvcnQg64yA7IOBIERCIOugiOy9lOuTnCh1bmlxdWUga2V56rCAIOqwmeydgClcbiAgb3ZlcnJpZGU/OiBib29sZWFuO1xufTtcblxuZXhwb3J0IHR5cGUgRml4dHVyZUltcG9ydFJlc3VsdCA9IHtcbiAgZW50aXR5SWQ6IHN0cmluZztcbiAgZGF0YToge1xuICAgIFtrZXk6IHN0cmluZ106IENvbHVtblZhbHVlO1xuICB9O1xufTtcblxuZXhwb3J0IHR5cGUgUmVsYXRpb25Ob2RlID0ge1xuICBmaXh0dXJlSWQ6IHN0cmluZztcbiAgZW50aXR5SWQ6IHN0cmluZztcbiAgcmVsYXRlZDogU2V0PHN0cmluZz47XG59O1xuXG4vLyBiaW9tZS1pZ25vcmUgbGludC9zdXNwaWNpb3VzL25vRW1wdHlJbnRlcmZhY2U6IHNvbmFtdS5nZW5lcmF0ZWQuc3NvIOyXkOyEnCDtmZXsnqXsnYQg7JyE7ZW0IOykgOu5hOuQnCDruYgg7J247YSw7Y6Y7J207IqkXG5leHBvcnQgaW50ZXJmYWNlIERhdGFiYXNlU2NoZW1hRXh0ZW5kIHt9XG4vLyBiaW9tZS1pZ25vcmUgbGludC9zdXNwaWNpb3VzL25vRW1wdHlJbnRlcmZhY2U6IHNvbmFtdS5nZW5lcmF0ZWQuc3NvIOyXkOyEnCDtmZXsnqXsnYQg7JyE7ZW0IOykgOu5hOuQnCDruYgg7J247YSw7Y6Y7J207IqkXG5leHBvcnQgaW50ZXJmYWNlIERhdGFiYXNlRm9yZWlnbktleXMge31cbmV4cG9ydCB0eXBlIE1hbnlUb01hbnlCYXNlU2NoZW1hPEZyb21JZEtleSBleHRlbmRzIHN0cmluZywgVG9JZEtleSBleHRlbmRzIHN0cmluZz4gPSB7XG4gIGlkOiBudW1iZXI7XG59ICYge1xuICBbSyBpbiBgJHtGcm9tSWRLZXl9X2lkYF06IG51bWJlcjtcbn0gJiB7XG4gIFtLIGluIGAke1RvSWRLZXl9X2lkYF06IG51bWJlcjtcbn07XG5cbi8vIOqwneyytCwg7ZWo7IiYLCDruYTrj5nquLAg7ZWo7IiY66W8IOuqqOuRkCDtj6zqtITtlZjripQg7YOA7J6FXG5leHBvcnQgdHlwZSBFeGVjdXRhYmxlPFQ+ID0gVCB8IFByb21pc2U8VD4gfCAoKCkgPT4gVCkgfCAoKCkgPT4gUHJvbWlzZTxUPik7XG5cbmV4cG9ydCB0eXBlIFNvbmFtdUZhc3RpZnlDb25maWcgPSB7XG4gIGNvbnRleHRQcm92aWRlcjogKFxuICAgIGRlZmF1bHRDb250ZXh0OiBQaWNrPENvbnRleHQsIFwicmVxdWVzdFwiIHwgXCJyZXBseVwiIHwgXCJoZWFkZXJzXCIgfCBcImNyZWF0ZVNTRVwiIHwgXCJuYWl0ZVN0b3JlXCI+ICZcbiAgICAgIEF1dGhDb250ZXh0LFxuICAgIHJlcXVlc3Q6IEZhc3RpZnlSZXF1ZXN0LFxuICAgIHJlcGx5OiBGYXN0aWZ5UmVwbHksXG4gICkgPT4gQ29udGV4dCB8IFByb21pc2U8Q29udGV4dD47XG4gIGd1YXJkSGFuZGxlcjogKFxuICAgIGd1YXJkOiBHdWFyZEtleSxcbiAgICByZXF1ZXN0OiBGYXN0aWZ5UmVxdWVzdCxcbiAgICBhcGk6IHtcbiAgICAgIHR5cGVQYXJhbWV0ZXJzOiBBcGlQYXJhbVR5cGUuVHlwZVBhcmFtW107XG4gICAgICBwYXJhbWV0ZXJzOiBBcGlQYXJhbVtdO1xuICAgICAgcmV0dXJuVHlwZTogQXBpUGFyYW1UeXBlO1xuICAgICAgbW9kZWxOYW1lOiBzdHJpbmc7XG4gICAgICBtZXRob2ROYW1lOiBzdHJpbmc7XG4gICAgICBwYXRoOiBzdHJpbmc7XG4gICAgICBvcHRpb25zOiBBcGlEZWNvcmF0b3JPcHRpb25zO1xuICAgIH0sXG4gICkgPT4gdm9pZDtcbn07XG4iXSwibmFtZXMiOlsieiIsInpBcnJheWFibGUiLCJzaGFwZSIsInVuaW9uIiwiYXJyYXkiLCJub3JtYWxpemVTdWJzZXRGaWVsZCIsImYiLCJmaWVsZCIsImlzSW50ZXJuYWxTdWJzZXRGaWVsZCIsImludGVybmFsIiwiaXNJbnRlZ2VyU2luZ2xlUHJvcCIsInAiLCJ0eXBlIiwiaXNJbnRlZ2VyQXJyYXlQcm9wIiwiaXNJbnRlZ2VyUHJvcCIsImlzQmlnSW50ZWdlclNpbmdsZVByb3AiLCJpc0JpZ0ludGVnZXJBcnJheVByb3AiLCJpc0JpZ0ludGVnZXJQcm9wIiwiaXNTdHJpbmdTaW5nbGVQcm9wIiwiaXNTdHJpbmdBcnJheVByb3AiLCJpc1N0cmluZ1Byb3AiLCJpc0VudW1TaW5nbGVQcm9wIiwiaXNFbnVtQXJyYXlQcm9wIiwiaXNFbnVtUHJvcCIsImlzTnVtYmVyU2luZ2xlUHJvcCIsImlzTnVtYmVyQXJyYXlQcm9wIiwiaXNOdW1iZXJQcm9wIiwiaXNOdW1lcmljU2luZ2xlUHJvcCIsImlzTnVtZXJpY0FycmF5UHJvcCIsImlzTnVtZXJpY1Byb3AiLCJpc0Jvb2xlYW5TaW5nbGVQcm9wIiwiaXNCb29sZWFuQXJyYXlQcm9wIiwiaXNCb29sZWFuUHJvcCIsImlzRGF0ZVNpbmdsZVByb3AiLCJpc0RhdGVBcnJheVByb3AiLCJpc0RhdGVQcm9wIiwiaXNVdWlkU2luZ2xlUHJvcCIsImlzVXVpZEFycmF5UHJvcCIsImlzVXVpZFByb3AiLCJpc0pzb25Qcm9wIiwiaXNWaXJ0dWFsUHJvcCIsImlzVmlydHVhbENvZGVQcm9wIiwidmlydHVhbFR5cGUiLCJpc1ZpcnR1YWxRdWVyeVByb3AiLCJpc1ZlY3RvclNpbmdsZVByb3AiLCJpc1ZlY3RvckFycmF5UHJvcCIsImlzVmVjdG9yUHJvcCIsImlzVHNWZWN0b3JQcm9wIiwiaXNSZWxhdGlvblByb3AiLCJpc09uZVRvT25lUmVsYXRpb25Qcm9wIiwicmVsYXRpb25UeXBlIiwiaXNCZWxvbmdzVG9PbmVSZWxhdGlvblByb3AiLCJpc0hhc01hbnlSZWxhdGlvblByb3AiLCJpc01hbnlUb01hbnlSZWxhdGlvblByb3AiLCJpc0N1c3RvbUpvaW5DbGF1c2UiLCJjdXN0b20iLCJTb25hbXVRdWVyeU1vZGUiLCJlbnVtIiwiU29uYW11U2VtYW50aWNQYXJhbXMiLCJvYmplY3QiLCJzZW1hbnRpY1F1ZXJ5IiwiZW1iZWRkaW5nIiwibnVtYmVyIiwibWluIiwibWF4IiwidGhyZXNob2xkIiwib3B0aW9uYWwiLCJtZXRob2QiLCJ3aGljaCIsInN0cmluZyIsImlzS25leEVycm9yIiwiZSIsImNvZGUiLCJzcWxNZXNzYWdlIiwic3FsU3RhdGUiLCJBcGlQYXJhbVR5cGUiLCJpc09iamVjdCIsInYiLCJ0IiwiaXNVbmlvbiIsImlzSW50ZXJzZWN0aW9uIiwiaXNTdHJpbmdMaXRlcmFsIiwiaXNOdW1lcmljTGl0ZXJhbCIsImlzQXJyYXkiLCJpc1JlZiIsImlzSW5kZXhlZEFjY2VzcyIsImlzVHVwbGVUeXBlIiwiaXNQaWNrIiwiaWQiLCJpc09taXQiLCJpc1BhcnRpYWwiLCJpc1Byb21pc2UiLCJpc0NvbnRleHQiLCJpc1JlZktuZXgiLCJpc1R5cGVQYXJhbSIsIlJlbmRlcmluZ05vZGUiLCJhbnkiLCJHZW5lcmF0ZWRDb2x1bW5TY2hlbWEiLCJleHByZXNzaW9uIiwiQmFzZVByb3BGaWVsZHMiLCJuYW1lIiwiZGVzYyIsIm51bGxhYmxlIiwiYm9vbGVhbiIsInRvRmlsdGVyIiwiZGVmYXVsdCIsImRiRGVmYXVsdCIsImdlbmVyYXRlZCIsIkJhc2VQcm9wRmllbGRzV2l0aG91dEFkZGl0aW9uYWwiLCJsaXRlcmFsIiwic3RyaWN0IiwiUHJlY2lzaW9uU2NhbGVGaWVsZHMiLCJwcmVjaXNpb24iLCJzY2FsZSIsIlN0cmluZ1Byb3BTY2hlbWEiLCJsZW5ndGgiLCJTdHJpbmdBcnJheVByb3BTY2hlbWEiLCJFbnVtUHJvcFNjaGVtYSIsIkVudW1BcnJheVByb3BTY2hlbWEiLCJOdW1iZXJQcm9wU2NoZW1hIiwibnVtYmVyVHlwZSIsIk51bWJlckFycmF5UHJvcFNjaGVtYSIsIk51bWVyaWNQcm9wU2NoZW1hIiwiTnVtZXJpY0FycmF5UHJvcFNjaGVtYSIsIkpzb25Qcm9wU2NoZW1hIiwiVmlydHVhbFByb3BTY2hlbWEiLCJWZWN0b3JQcm9wU2NoZW1hIiwiZGltZW5zaW9ucyIsIlZlY3RvckFycmF5UHJvcFNjaGVtYSIsIkJhc2VSZWxhdGlvbkZpZWxkcyIsIndpdGgiLCJSZWxhdGlvbk9uU2NoZW1hIiwiQmVsb25nc1RvT25lUmVsYXRpb25Qcm9wU2NoZW1hIiwiY3VzdG9tSm9pbkNsYXVzZSIsInVzZUNvbnN0cmFpbnQiLCJvblVwZGF0ZSIsIm9uRGVsZXRlIiwiSGFzTWFueVJlbGF0aW9uUHJvcFNjaGVtYSIsImpvaW5Db2x1bW4iLCJmcm9tQ29sdW1uIiwiTWFueVRvTWFueVJlbGF0aW9uUHJvcFNjaGVtYSIsImpvaW5UYWJsZSIsIk9uZVRvT25lUmVsYXRpb25Qcm9wU2NoZW1hIiwiaGFzSm9pbkNvbHVtbiIsIlJlbGF0aW9uVHlwZXMiLCJSZWxhdGlvblByb3BTY2hlbWEiLCJkaXNjcmltaW5hdGVkVW5pb24iLCJlcnJvciIsImlzcyIsIm1hcCIsImpvaW4iLCJpbnB1dCIsIk5vcm1hbFByb3BUeXBlcyIsIlZpcnR1YWxHZW5lcmF0ZWREaXNhbGxvd2VkVHlwZXMiLCJOb3JtYWxQcm9wU2NoZW1hIiwic3VwZXJSZWZpbmUiLCJkYXRhIiwiY3R4IiwidW5kZWZpbmVkIiwiYWRkSXNzdWUiLCJtZXNzYWdlIiwicGF0aCIsImluY2x1ZGVzIiwiZmF0YWwiLCJBbGxQcm9wVHlwZXMiLCJFbnRpdHlQcm9wU2NoZW1hIiwiRW50aXR5SW5kZXhDb2x1bW5TY2hlbWEiLCJudWxsc0ZpcnN0Iiwic29ydE9yZGVyIiwidmVjdG9yT3BzIiwiRW50aXR5SW5kZXhTY2hlbWEiLCJjb2x1bW5zIiwidXNpbmciLCJudWxsc05vdERpc3RpbmN0IiwibSIsImVmQ29uc3RydWN0aW9uIiwibGlzdHMiLCJFbnRpdHlKc29uU2NoZW1hIiwiZGVzY3JpYmUiLCJ0aXRsZSIsInRhYmxlIiwicGFyZW50SWQiLCJwcm9wcyIsImluZGV4ZXMiLCJzdWJzZXRzIiwicmVjb3JkIiwiZW51bXMiLCJUZW1wbGF0ZU9wdGlvbnMiLCJlbnRpdHkiLCJvbWl0IiwiZXh0ZW5kIiwiZW50aXR5SWQiLCJwYXJ0aWFsIiwiaW5pdF90eXBlcyIsImdlbmVyYXRlZF9zc28iLCJnZW5lcmF0ZWRfaHR0cCIsIm1vZGVsIiwiZGVmYXVsdFNlYXJjaEZpZWxkIiwiZGVmYXVsdE9yZGVyQnkiLCJtb2RlbF90ZXN0IiwiYnJpZGdlIiwic2VydmljZXMiLCJ2aWV3X2xpc3QiLCJleHRyYSIsInVua25vd24iLCJ2aWV3X2xpc3RfY29sdW1ucyIsImxhYmVsIiwidGMiLCJjb2x1bW5JbXBvcnRzIiwidmlld19zZWFyY2hfaW5wdXQiLCJ2aWV3X2Zvcm0iLCJ2aWV3X2lkX2FsbF9zZWxlY3QiLCJ2aWV3X2lkX2FzeW5jX3NlbGVjdCIsInRleHRGaWVsZCIsInZpZXdfZW51bXNfc2VsZWN0IiwiZW51bUlkIiwidmlld19lbnVtc19kcm9wZG93biIsInZpZXdfZW51bXNfYnV0dG9uc2V0IiwiVGVtcGxhdGVLZXkiLCJHZW5lcmF0ZU9wdGlvbnMiLCJvdmVyd3JpdGUiLCJQYXRoQW5kQ29kZSJdLCJtYXBwaW5ncyI6IkFBQ0EsU0FBU0EsQ0FBQyxRQUFRLE1BQU07QUFJeEI7O0FBRUEsR0FDQSxPQUFPLFNBQVNDLFdBQW1DQyxLQUFRO0lBQ3pELE9BQU9GLEVBQUVHLEtBQUssQ0FBQztRQUFDRDtRQUFPQSxNQUFNRSxLQUFLO0tBQUc7QUFDdkM7QUFxUUEsT0FBTyxTQUFTQyxxQkFBcUJDLENBQWM7SUFDakQsT0FBTyxPQUFPQSxNQUFNLFdBQVdBLElBQUlBLEVBQUVDLEtBQUs7QUFDNUM7QUFDQSxPQUFPLFNBQVNDLHNCQUFzQkYsQ0FBYztJQUNsRCxPQUFPLE9BQU9BLE1BQU0sWUFBWUEsRUFBRUcsUUFBUSxLQUFLO0FBQ2pEO0FBZ0VBOztBQUVBLEdBQ0EsT0FBTyxTQUFTQyxvQkFBb0JDLENBQVU7SUFDNUMsT0FBTyxBQUFDQSxHQUFtQkMsU0FBUztBQUN0QztBQUNBLE9BQU8sU0FBU0MsbUJBQW1CRixDQUFVO0lBQzNDLE9BQU8sQUFBQ0EsR0FBd0JDLFNBQVM7QUFDM0M7QUFDQSxPQUFPLFNBQVNFLGNBQWNILENBQVU7SUFDdEMsT0FBT0Qsb0JBQW9CQyxNQUFNRSxtQkFBbUJGO0FBQ3REO0FBQ0EsT0FBTyxTQUFTSSx1QkFBdUJKLENBQVU7SUFDL0MsT0FBTyxBQUFDQSxHQUFzQkMsU0FBUztBQUN6QztBQUNBLE9BQU8sU0FBU0ksc0JBQXNCTCxDQUFVO0lBQzlDLE9BQU8sQUFBQ0EsR0FBMkJDLFNBQVM7QUFDOUM7QUFDQSxPQUFPLFNBQVNLLGlCQUFpQk4sQ0FBVTtJQUN6QyxPQUFPSSx1QkFBdUJKLE1BQU1LLHNCQUFzQkw7QUFDNUQ7QUFDQSxPQUFPLFNBQVNPLG1CQUFtQlAsQ0FBVTtJQUMzQyxPQUFPLEFBQUNBLEdBQWtCQyxTQUFTO0FBQ3JDO0FBQ0EsT0FBTyxTQUFTTyxrQkFBa0JSLENBQVU7SUFDMUMsT0FBTyxBQUFDQSxHQUF1QkMsU0FBUztBQUMxQztBQUNBLE9BQU8sU0FBU1EsYUFBYVQsQ0FBVTtJQUNyQyxPQUFPTyxtQkFBbUJQLE1BQU1RLGtCQUFrQlI7QUFDcEQ7QUFDQSxPQUFPLFNBQVNVLGlCQUFpQlYsQ0FBVTtJQUN6QyxPQUFPLEFBQUNBLEdBQWdCQyxTQUFTO0FBQ25DO0FBQ0EsT0FBTyxTQUFTVSxnQkFBZ0JYLENBQVU7SUFDeEMsT0FBTyxBQUFDQSxHQUFxQkMsU0FBUztBQUN4QztBQUNBLE9BQU8sU0FBU1csV0FBV1osQ0FBVTtJQUNuQyxPQUFPVSxpQkFBaUJWLE1BQU1XLGdCQUFnQlg7QUFDaEQ7QUFDQSxPQUFPLFNBQVNhLG1CQUFtQmIsQ0FBVTtJQUMzQyxPQUFPLEFBQUNBLEdBQWtCQyxTQUFTO0FBQ3JDO0FBQ0EsT0FBTyxTQUFTYSxrQkFBa0JkLENBQVU7SUFDMUMsT0FBTyxBQUFDQSxHQUF1QkMsU0FBUztBQUMxQztBQUNBLE9BQU8sU0FBU2MsYUFBYWYsQ0FBVTtJQUNyQyxPQUFPYSxtQkFBbUJiLE1BQU1jLGtCQUFrQmQ7QUFDcEQ7QUFDQSxPQUFPLFNBQVNnQixvQkFBb0JoQixDQUFVO0lBQzVDLE9BQU8sQUFBQ0EsR0FBbUJDLFNBQVM7QUFDdEM7QUFDQSxPQUFPLFNBQVNnQixtQkFBbUJqQixDQUFVO0lBQzNDLE9BQU8sQUFBQ0EsR0FBd0JDLFNBQVM7QUFDM0M7QUFDQSxPQUFPLFNBQVNpQixjQUFjbEIsQ0FBVTtJQUN0QyxPQUFPZ0Isb0JBQW9CaEIsTUFBTWlCLG1CQUFtQmpCO0FBQ3REO0FBQ0EsT0FBTyxTQUFTbUIsb0JBQW9CbkIsQ0FBVTtJQUM1QyxPQUFPLEFBQUNBLEdBQW1CQyxTQUFTO0FBQ3RDO0FBQ0EsT0FBTyxTQUFTbUIsbUJBQW1CcEIsQ0FBVTtJQUMzQyxPQUFPLEFBQUNBLEdBQXdCQyxTQUFTO0FBQzNDO0FBQ0EsT0FBTyxTQUFTb0IsY0FBY3JCLENBQVU7SUFDdEMsT0FBT21CLG9CQUFvQm5CLE1BQU1vQixtQkFBbUJwQjtBQUN0RDtBQUNBLE9BQU8sU0FBU3NCLGlCQUFpQnRCLENBQVU7SUFDekMsT0FBTyxBQUFDQSxHQUFnQkMsU0FBUztBQUNuQztBQUNBLE9BQU8sU0FBU3NCLGdCQUFnQnZCLENBQVU7SUFDeEMsT0FBTyxBQUFDQSxHQUFxQkMsU0FBUztBQUN4QztBQUNBLE9BQU8sU0FBU3VCLFdBQVd4QixDQUFVO0lBQ25DLE9BQU9zQixpQkFBaUJ0QixNQUFNdUIsZ0JBQWdCdkI7QUFDaEQ7QUFDQSxPQUFPLFNBQVN5QixpQkFBaUJ6QixDQUFVO0lBQ3pDLE9BQU8sQUFBQ0EsR0FBZ0JDLFNBQVM7QUFDbkM7QUFDQSxPQUFPLFNBQVN5QixnQkFBZ0IxQixDQUFVO0lBQ3hDLE9BQU8sQUFBQ0EsR0FBcUJDLFNBQVM7QUFDeEM7QUFDQSxPQUFPLFNBQVMwQixXQUFXM0IsQ0FBVTtJQUNuQyxPQUFPeUIsaUJBQWlCekIsTUFBTTBCLGdCQUFnQjFCO0FBQ2hEO0FBQ0EsT0FBTyxTQUFTNEIsV0FBVzVCLENBQVU7SUFDbkMsT0FBTyxBQUFDQSxHQUFnQkMsU0FBUztBQUNuQztBQUNBLE9BQU8sU0FBUzRCLGNBQWM3QixDQUFVO0lBQ3RDLE9BQU8sQUFBQ0EsR0FBbUJDLFNBQVM7QUFDdEM7QUFDQSxPQUFPLFNBQVM2QixrQkFBa0I5QixDQUFVO0lBQzFDLElBQUksQ0FBQzZCLGNBQWM3QixJQUFJLE9BQU87SUFDOUIsT0FBT0EsRUFBRStCLFdBQVcsS0FBSyxTQUFTLHdCQUF3QjtBQUM1RDtBQUNBLE9BQU8sU0FBU0MsbUJBQW1CaEMsQ0FBVTtJQUMzQyxJQUFJLENBQUM2QixjQUFjN0IsSUFBSSxPQUFPO0lBQzlCLE9BQU9BLEVBQUUrQixXQUFXLEtBQUs7QUFDM0I7QUFDQSxPQUFPLFNBQVNFLG1CQUFtQmpDLENBQVU7SUFDM0MsT0FBTyxBQUFDQSxHQUFrQkMsU0FBUztBQUNyQztBQUNBLE9BQU8sU0FBU2lDLGtCQUFrQmxDLENBQVU7SUFDMUMsT0FBTyxBQUFDQSxHQUF1QkMsU0FBUztBQUMxQztBQUNBLE9BQU8sU0FBU2tDLGFBQWFuQyxDQUFVO0lBQ3JDLE9BQU9pQyxtQkFBbUJqQyxNQUFNa0Msa0JBQWtCbEM7QUFDcEQ7QUFDQSxPQUFPLFNBQVNvQyxlQUFlcEMsQ0FBVTtJQUN2QyxPQUFPLEFBQUNBLEdBQW9CQyxTQUFTO0FBQ3ZDO0FBQ0EsT0FBTyxTQUFTb0MsZUFBZXJDLENBQVU7SUFDdkMsT0FBTyxBQUFDQSxHQUFvQkMsU0FBUztBQUN2QztBQUNBLE9BQU8sU0FBU3FDLHVCQUF1QnRDLENBQVU7SUFDL0MsT0FBTyxBQUFDQSxHQUE0QnVDLGlCQUFpQjtBQUN2RDtBQUNBLE9BQU8sU0FBU0MsMkJBQTJCeEMsQ0FBVTtJQUNuRCxPQUFPLEFBQUNBLEdBQWdDdUMsaUJBQWlCO0FBQzNEO0FBQ0EsT0FBTyxTQUFTRSxzQkFBc0J6QyxDQUFVO0lBQzlDLE9BQU8sQUFBQ0EsR0FBMkJ1QyxpQkFBaUI7QUFDdEQ7QUFDQSxPQUFPLFNBQVNHLHlCQUF5QjFDLENBQVU7SUFDakQsT0FBTyxBQUFDQSxHQUE4QnVDLGlCQUFpQjtBQUN6RDtBQVVBLE9BQU8sU0FBU0ksbUJBQW1CM0MsQ0FBVTtJQUMzQyxPQUFPLENBQUMsQ0FBRUEsR0FBMEI0QztBQUN0QztBQXFDQSxhQUFhLEdBQ2IsT0FBTyxNQUFNQyxrQkFBa0J4RCxFQUFFeUQsSUFBSSxDQUFDO0lBQUM7SUFBUTtJQUFRO0NBQVEsRUFBRTtBQUdqRSxrQkFBa0IsR0FDbEIsT0FBTyxNQUFNQyx1QkFBdUIxRCxFQUFFMkQsTUFBTSxDQUFDO0lBQzNDQyxlQUFlNUQsRUFBRTJELE1BQU0sQ0FBQztRQUN0QkUsV0FBVzdELEVBQUVJLEtBQUssQ0FBQ0osRUFBRThELE1BQU0sSUFBSUMsR0FBRyxDQUFDLE1BQU1DLEdBQUcsQ0FBQztRQUM3Q0MsV0FBV2pFLEVBQUU4RCxNQUFNLEdBQUdJLFFBQVE7UUFDOUJDLFFBQVFuRSxFQUFFeUQsSUFBSSxDQUFDO1lBQUM7WUFBVTtZQUFNO1NBQWdCLEVBQUVTLFFBQVE7SUFDNUQ7SUFDQUUsT0FBT3BFLEVBQUVxRSxNQUFNO0FBQ2pCLEdBQUc7QUFXSCxPQUFPLFNBQVNDLFlBQVlDLENBQVU7SUFDcEMsT0FBTyxDQUFDLENBQUVBLEdBQWlCQyxRQUFRLENBQUMsQ0FBRUQsR0FBaUJFLGNBQWMsQ0FBQyxDQUFFRixHQUFpQkc7QUFDM0Y7VUFtR2lCQztJQWlFUixTQUFTQyxTQUFTQyxDQUFVO1FBQ2pDLE9BQU8sQUFBQ0EsR0FBMkJDLE1BQU07SUFDM0M7aUJBRmdCRixXQUFBQTtJQUdULFNBQVNHLFFBQVFGLENBQVU7UUFDaEMsT0FBTyxBQUFDQSxHQUEwQkMsTUFBTTtJQUMxQztpQkFGZ0JDLFVBQUFBO0lBR1QsU0FBU0MsZUFBZUgsQ0FBVTtRQUN2QyxPQUFPLEFBQUNBLEdBQWlDQyxNQUFNO0lBQ2pEO2lCQUZnQkUsaUJBQUFBO0lBR1QsU0FBU0MsZ0JBQWdCSixDQUFVO1FBQ3hDLE9BQU8sQUFBQ0EsR0FBa0NDLE1BQU07SUFDbEQ7aUJBRmdCRyxrQkFBQUE7SUFHVCxTQUFTQyxpQkFBaUJMLENBQVU7UUFDekMsT0FBTyxBQUFDQSxHQUFtQ0MsTUFBTTtJQUNuRDtpQkFGZ0JJLG1CQUFBQTtJQUdULFNBQVNDLFFBQVFOLENBQVU7UUFDaEMsT0FBTyxBQUFDQSxHQUEwQkMsTUFBTTtJQUMxQztpQkFGZ0JLLFVBQUFBO0lBR1QsU0FBU0MsTUFBTVAsQ0FBVTtRQUM5QixPQUFPLE9BQU9BLE1BQU0sWUFBWUEsTUFBTSxRQUFRLEFBQUNBLEVBQXNCQyxDQUFDLEtBQUs7SUFDN0U7aUJBRmdCTSxRQUFBQTtJQUdULFNBQVNDLGdCQUFnQlIsQ0FBVTtRQUN4QyxPQUFPLE9BQU9BLE1BQU0sWUFBWUEsTUFBTSxRQUFRLEFBQUNBLEVBQXNCQyxDQUFDLEtBQUs7SUFDN0U7aUJBRmdCTyxrQkFBQUE7SUFHVCxTQUFTQyxZQUFZVCxDQUFVO1FBQ3BDLE9BQU8sT0FBT0EsTUFBTSxZQUFZQSxNQUFNLFFBQVEsQUFBQ0EsRUFBc0JDLENBQUMsS0FBSztJQUM3RTtpQkFGZ0JRLGNBQUFBO0lBR1QsU0FBU0MsT0FBT1YsQ0FBVTtRQUMvQixPQUNFLE9BQU9BLE1BQU0sWUFDYkEsTUFBTSxRQUNOLEFBQUNBLEVBQXNCQyxDQUFDLEtBQUssU0FDN0IsQUFBQ0QsRUFBdUJXLEVBQUUsS0FBSztJQUVuQztpQkFQZ0JELFNBQUFBO0lBUVQsU0FBU0UsT0FBT1osQ0FBVTtRQUMvQixPQUNFLE9BQU9BLE1BQU0sWUFDYkEsTUFBTSxRQUNOLEFBQUNBLEVBQXNCQyxDQUFDLEtBQUssU0FDN0IsQUFBQ0QsRUFBdUJXLEVBQUUsS0FBSztJQUVuQztpQkFQZ0JDLFNBQUFBO0lBUVQsU0FBU0MsVUFBVWIsQ0FBVTtRQUNsQyxPQUNFLE9BQU9BLE1BQU0sWUFDYkEsTUFBTSxRQUNOLEFBQUNBLEVBQXNCQyxDQUFDLEtBQUssU0FDN0IsQUFBQ0QsRUFBdUJXLEVBQUUsS0FBSztJQUVuQztpQkFQZ0JFLFlBQUFBO0lBUVQsU0FBU0MsVUFBVWQsQ0FBVTtRQUNsQyxPQUNFLE9BQU9BLE1BQU0sWUFDYkEsTUFBTSxRQUNOLEFBQUNBLEVBQXNCQyxDQUFDLEtBQUssU0FDN0IsQUFBQ0QsRUFBdUJXLEVBQUUsS0FBSztJQUVuQztpQkFQZ0JHLFlBQUFBO0lBUVQsU0FBU0MsVUFBVWYsQ0FBVTtRQUNsQyxPQUNFLE9BQU9BLE1BQU0sWUFDYkEsTUFBTSxRQUNOLEFBQUNBLEVBQXNCQyxDQUFDLEtBQUssU0FDN0IsQUFBQ0QsRUFBdUJXLEVBQUUsS0FBSztJQUVuQztpQkFQZ0JJLFlBQUFBO0lBUVQsU0FBU0MsVUFBVWhCLENBQVU7UUFDbEMsT0FDRSxPQUFPQSxNQUFNLFlBQ2JBLE1BQU0sUUFDTixBQUFDQSxFQUFzQkMsQ0FBQyxLQUFLLFNBQzdCLEFBQUNELEVBQXVCVyxFQUFFLEtBQUs7SUFFbkM7aUJBUGdCSyxZQUFBQTtJQVFULFNBQVNDLFlBQVlqQixDQUFVO1FBQ3BDLE9BQU8sT0FBT0EsTUFBTSxZQUFZQSxNQUFNLFFBQVEsQUFBQ0EsRUFBc0JDLENBQUMsS0FBSztJQUM3RTtpQkFGZ0JnQixjQUFBQTtBQUdsQixHQS9JaUJuQixpQkFBQUE7QUFzS2pCLFlBQVksR0FDWjs7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQW1CQyxHQUNELDZCQUE2QjtBQUM3QixPQUFPLE1BQU1vQixnQkFBZ0IvRixFQUFFZ0csR0FBRyxHQUFHO0FBK0JyQyxNQUFNQyx3QkFBd0JqRyxFQUFFMkQsTUFBTSxDQUFDO0lBQ3JDL0MsTUFBTVosRUFBRXlELElBQUksQ0FBQztRQUFDO1FBQVU7S0FBVTtJQUNsQ3lDLFlBQVlsRyxFQUFFcUUsTUFBTTtBQUN0QjtBQUVBLE1BQU04QixpQkFBaUI7SUFDckJDLE1BQU1wRyxFQUFFcUUsTUFBTTtJQUNkZ0MsTUFBTXJHLEVBQUVxRSxNQUFNLEdBQUdILFFBQVE7SUFDekJvQyxVQUFVdEcsRUFBRXVHLE9BQU8sR0FBR3JDLFFBQVE7SUFDOUJzQyxVQUFVeEcsRUFBRXVHLE9BQU8sR0FBR0UsT0FBTyxDQUFDLE9BQU92QyxRQUFRO0lBQzdDd0MsV0FBVzFHLEVBQUVHLEtBQUssQ0FBQztRQUFDSCxFQUFFcUUsTUFBTTtRQUFJckUsRUFBRThELE1BQU07UUFBSTlELEVBQUV1RyxPQUFPO0tBQUcsRUFBRXJDLFFBQVE7SUFDbEV5QyxXQUFXVixzQkFBc0IvQixRQUFRO0FBQzNDO0FBRUEsbUJBQW1CO0FBQ25CLE1BQU0wQyxrQ0FBa0M1RyxFQUNyQzJELE1BQU0sQ0FBQztJQUNOLEdBQUd3QyxjQUFjO0lBQ2pCdkYsTUFBTVosRUFBRUcsS0FBSyxDQUFDO1FBQ1pILEVBQUU2RyxPQUFPLENBQUM7UUFDVjdHLEVBQUU2RyxPQUFPLENBQUM7UUFDVjdHLEVBQUU2RyxPQUFPLENBQUM7UUFDVjdHLEVBQUU2RyxPQUFPLENBQUM7UUFDVjdHLEVBQUU2RyxPQUFPLENBQUM7UUFDVjdHLEVBQUU2RyxPQUFPLENBQUM7UUFDVjdHLEVBQUU2RyxPQUFPLENBQUM7UUFDVjdHLEVBQUU2RyxPQUFPLENBQUM7UUFDVjdHLEVBQUU2RyxPQUFPLENBQUM7UUFDVjdHLEVBQUU2RyxPQUFPLENBQUM7UUFDVjdHLEVBQUU2RyxPQUFPLENBQUM7S0FDWDtBQUNILEdBQ0NDLE1BQU07QUFFVCxxQkFBcUI7QUFDckIsTUFBTUMsdUJBQXVCO0lBQzNCQyxXQUFXaEgsRUFBRThELE1BQU0sR0FBR0ksUUFBUTtJQUM5QitDLE9BQU9qSCxFQUFFOEQsTUFBTSxHQUFHSSxRQUFRO0FBQzVCO0FBRUEsZUFBZTtBQUVmLE1BQU1nRCxtQkFBbUJsSCxFQUN0QjJELE1BQU0sQ0FBQztJQUNOLEdBQUd3QyxjQUFjO0lBQ2pCdkYsTUFBTVosRUFBRTZHLE9BQU8sQ0FBQztJQUNoQk0sUUFBUW5ILEVBQUU4RCxNQUFNLEdBQUdJLFFBQVE7QUFDN0IsR0FDQzRDLE1BQU07QUFDVCxNQUFNTSx3QkFBd0JwSCxFQUMzQjJELE1BQU0sQ0FBQztJQUNOLEdBQUd3QyxjQUFjO0lBQ2pCdkYsTUFBTVosRUFBRTZHLE9BQU8sQ0FBQztJQUNoQk0sUUFBUW5ILEVBQUU4RCxNQUFNLEdBQUdJLFFBQVE7QUFDN0IsR0FDQzRDLE1BQU07QUFFVCxNQUFNTyxpQkFBaUJySCxFQUNwQjJELE1BQU0sQ0FBQztJQUNOLEdBQUd3QyxjQUFjO0lBQ2pCdkYsTUFBTVosRUFBRTZHLE9BQU8sQ0FBQztJQUNoQnJCLElBQUl4RixFQUFFcUUsTUFBTTtJQUNaOEMsUUFBUW5ILEVBQUU4RCxNQUFNLEdBQUdJLFFBQVE7QUFDN0IsR0FDQzRDLE1BQU07QUFDVCxNQUFNUSxzQkFBc0J0SCxFQUN6QjJELE1BQU0sQ0FBQztJQUNOLEdBQUd3QyxjQUFjO0lBQ2pCdkYsTUFBTVosRUFBRTZHLE9BQU8sQ0FBQztJQUNoQnJCLElBQUl4RixFQUFFcUUsTUFBTTtBQUNkLEdBQ0N5QyxNQUFNO0FBRVQsTUFBTVMsbUJBQW1CdkgsRUFDdEIyRCxNQUFNLENBQUM7SUFDTixHQUFHd0MsY0FBYztJQUNqQnZGLE1BQU1aLEVBQUU2RyxPQUFPLENBQUM7SUFDaEIsR0FBR0Usb0JBQW9CO0lBQ3ZCUyxZQUFZeEgsRUFBRXlELElBQUksQ0FBQztRQUFDO1FBQVE7UUFBb0I7S0FBVSxFQUFFUyxRQUFRO0FBQ3RFLEdBQ0M0QyxNQUFNO0FBQ1QsTUFBTVcsd0JBQXdCekgsRUFDM0IyRCxNQUFNLENBQUM7SUFDTixHQUFHd0MsY0FBYztJQUNqQnZGLE1BQU1aLEVBQUU2RyxPQUFPLENBQUM7SUFDaEIsR0FBR0Usb0JBQW9CO0lBQ3ZCUyxZQUFZeEgsRUFBRXlELElBQUksQ0FBQztRQUFDO1FBQVE7UUFBb0I7S0FBVSxFQUFFUyxRQUFRO0FBQ3RFLEdBQ0M0QyxNQUFNO0FBRVQsTUFBTVksb0JBQW9CMUgsRUFDdkIyRCxNQUFNLENBQUM7SUFDTixHQUFHd0MsY0FBYztJQUNqQnZGLE1BQU1aLEVBQUU2RyxPQUFPLENBQUM7SUFDaEIsR0FBR0Usb0JBQW9CO0FBQ3pCLEdBQ0NELE1BQU07QUFDVCxNQUFNYSx5QkFBeUIzSCxFQUM1QjJELE1BQU0sQ0FBQztJQUNOLEdBQUd3QyxjQUFjO0lBQ2pCdkYsTUFBTVosRUFBRTZHLE9BQU8sQ0FBQztJQUNoQixHQUFHRSxvQkFBb0I7QUFDekIsR0FDQ0QsTUFBTTtBQUVULE1BQU1jLGlCQUFpQjVILEVBQ3BCMkQsTUFBTSxDQUFDO0lBQ04sR0FBR3dDLGNBQWM7SUFDakJ2RixNQUFNWixFQUFFNkcsT0FBTyxDQUFDO0lBQ2hCckIsSUFBSXhGLEVBQUVxRSxNQUFNO0FBQ2QsR0FDQ3lDLE1BQU07QUFFVCxNQUFNZSxvQkFBb0I3SCxFQUN2QjJELE1BQU0sQ0FBQztJQUNOLEdBQUd3QyxjQUFjO0lBQ2pCdkYsTUFBTVosRUFBRTZHLE9BQU8sQ0FBQztJQUNoQnJCLElBQUl4RixFQUFFcUUsTUFBTTtJQUNaM0IsYUFBYTFDLEVBQUV5RCxJQUFJLENBQUM7UUFBQztRQUFTO0tBQU8sRUFBRVMsUUFBUTtBQUNqRCxHQUNDNEMsTUFBTTtBQUVULE1BQU1nQixtQkFBbUI5SCxFQUN0QjJELE1BQU0sQ0FBQztJQUNOLEdBQUd3QyxjQUFjO0lBQ2pCdkYsTUFBTVosRUFBRTZHLE9BQU8sQ0FBQztJQUNoQmtCLFlBQVkvSCxFQUFFOEQsTUFBTTtBQUN0QixHQUNDZ0QsTUFBTTtBQUNULE1BQU1rQix3QkFBd0JoSSxFQUMzQjJELE1BQU0sQ0FBQztJQUNOLEdBQUd3QyxjQUFjO0lBQ2pCdkYsTUFBTVosRUFBRTZHLE9BQU8sQ0FBQztJQUNoQmtCLFlBQVkvSCxFQUFFOEQsTUFBTTtBQUN0QixHQUNDZ0QsTUFBTTtBQUVULG9DQUFvQztBQUNwQyxNQUFNbUIscUJBQXFCO0lBQ3pCLEdBQUc5QixjQUFjO0lBQ2pCdkYsTUFBTVosRUFBRTZHLE9BQU8sQ0FBQztJQUNoQnFCLE1BQU1sSSxFQUFFcUUsTUFBTTtBQUNoQjtBQUVBLGdCQUFnQjtBQUNoQixNQUFNOEQsbUJBQW1CbkksRUFBRXlELElBQUksQ0FBQztJQUFDO0lBQVc7SUFBWTtJQUFhO0lBQWU7Q0FBVztBQUUvRixNQUFNMkUsaUNBQWlDcEksRUFDcEMyRCxNQUFNLENBQUM7SUFDTixHQUFHc0Usa0JBQWtCO0lBQ3JCL0UsY0FBY2xELEVBQUU2RyxPQUFPLENBQUM7SUFDeEJ3QixrQkFBa0JySSxFQUFFcUUsTUFBTSxHQUFHSCxRQUFRO0lBQ3JDb0UsZUFBZXRJLEVBQUV1RyxPQUFPLEdBQUdyQyxRQUFRO0lBQ25DcUUsVUFBVUosaUJBQWlCakUsUUFBUTtJQUNuQ3NFLFVBQVVMLGlCQUFpQmpFLFFBQVE7QUFDckMsR0FDQzRDLE1BQU07QUFFVCxNQUFNMkIsNEJBQTRCekksRUFDL0IyRCxNQUFNLENBQUM7SUFDTixHQUFHc0Usa0JBQWtCO0lBQ3JCL0UsY0FBY2xELEVBQUU2RyxPQUFPLENBQUM7SUFDeEI2QixZQUFZMUksRUFBRXFFLE1BQU07SUFDcEJzRSxZQUFZM0ksRUFBRXFFLE1BQU0sR0FBR0gsUUFBUTtBQUNqQyxHQUNDNEMsTUFBTTtBQUVULE1BQU04QiwrQkFBK0I1SSxFQUNsQzJELE1BQU0sQ0FBQztJQUNOLEdBQUdzRSxrQkFBa0I7SUFDckIvRSxjQUFjbEQsRUFBRTZHLE9BQU8sQ0FBQztJQUN4QmdDLFdBQVc3SSxFQUFFcUUsTUFBTTtJQUNuQmtFLFVBQVVKO0lBQ1ZLLFVBQVVMO0FBQ1osR0FDQ3JCLE1BQU07QUFFVCxNQUFNZ0MsNkJBQTZCOUksRUFDaEMyRCxNQUFNLENBQUM7SUFDTixHQUFHc0Usa0JBQWtCO0lBQ3JCL0UsY0FBY2xELEVBQUU2RyxPQUFPLENBQUM7SUFDeEJ3QixrQkFBa0JySSxFQUFFcUUsTUFBTSxHQUFHSCxRQUFRO0lBQ3JDNkUsZUFBZS9JLEVBQUV1RyxPQUFPLEdBQUdyQyxRQUFRO0lBQ25Db0UsZUFBZXRJLEVBQUV1RyxPQUFPLEdBQUdyQyxRQUFRO0lBQ25DcUUsVUFBVUosaUJBQWlCakUsUUFBUTtJQUNuQ3NFLFVBQVVMLGlCQUFpQmpFLFFBQVE7QUFDckMsR0FDQzRDLE1BQU07QUFFVCxNQUFNa0MsZ0JBQWdCO0lBQUM7SUFBZ0I7SUFBVztJQUFjO0NBQVc7QUFDM0UsT0FBTyxNQUFNQyxxQkFBcUJqSixFQUFFa0osa0JBQWtCLENBQ3BELGdCQUNBO0lBQ0VkO0lBQ0FLO0lBQ0FHO0lBQ0FFO0NBQ0QsRUFDRDtJQUNFSyxPQUFPLENBQUNDLE1BQ04sQ0FBQyxjQUFjLEVBQUVKLGNBQWNLLEdBQUcsQ0FBQyxDQUFDdkUsSUFBTSxDQUFDLENBQUMsRUFBRUEsRUFBRSxDQUFDLENBQUMsRUFBRXdFLElBQUksQ0FBQyxNQUFNLG1CQUFtQixFQUFHRixJQUFJRyxLQUFLLEVBQThCckcsYUFBYSxDQUFDLENBQUM7QUFDL0ksR0FDQTtBQUVGLE1BQU1zRyxrQkFBa0I7SUFDdEI7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtDQUNEO0FBRUQseUNBQXlDO0FBQ3pDLE1BQU1DLGtDQUFrQztJQUN0QztJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7Q0FDRDtBQUVELE9BQU8sTUFBTUMsbUJBQW1CMUosRUFDN0JrSixrQkFBa0IsQ0FDakIsUUFDQTtJQUNFdEM7SUFDQU07SUFDQUU7SUFDQUM7SUFDQUM7SUFDQUM7SUFDQUU7SUFDQUM7SUFDQUM7SUFDQUM7SUFDQUM7SUFDQUM7SUFDQUU7Q0FDRCxFQUNEO0lBQ0VtQixPQUFPLENBQUNDLE1BQ04sQ0FBQyxNQUFNLEVBQUVJLGdCQUFnQkgsR0FBRyxDQUFDLENBQUN2RSxJQUFNLENBQUMsQ0FBQyxFQUFFQSxFQUFFLENBQUMsQ0FBQyxFQUFFd0UsSUFBSSxDQUFDLE1BQU0sbUJBQW1CLEVBQUdGLElBQUlHLEtBQUssRUFBOEIzSSxLQUFLLENBQUMsQ0FBQztBQUNqSSxHQUVEK0ksV0FBVyxDQUFDLENBQUNDLE1BQU1DO0lBQ2xCLElBQUksQ0FBQ0QsS0FBS2pELFNBQVMsRUFBRTtRQUNuQjtJQUNGO0lBRUEsZ0NBQWdDO0lBQ2hDLElBQUlpRCxLQUFLbEQsU0FBUyxLQUFLb0QsV0FBVztRQUNoQ0QsSUFBSUUsUUFBUSxDQUFDO1lBQ1h2RixNQUFNO1lBQ053RixTQUFTO1lBQ1RDLE1BQU07Z0JBQUM7YUFBWTtRQUNyQjtJQUNGO0lBRUEsMkJBQTJCO0lBQzNCLElBQUlMLEtBQUtoSixJQUFJLEtBQUssV0FBVztRQUMzQmlKLElBQUlFLFFBQVEsQ0FBQztZQUNYdkYsTUFBTTtZQUNOd0YsU0FBUztZQUNUQyxNQUFNO2dCQUFDO2FBQVk7UUFDckI7SUFDRjtJQUVBLG9DQUFvQztJQUNwQyxJQUFJTCxLQUFLakQsU0FBUyxDQUFDL0YsSUFBSSxLQUFLLFdBQVc7UUFDckMsSUFBSSxBQUFDNkksZ0NBQXNEUyxRQUFRLENBQUNOLEtBQUtoSixJQUFJLEdBQUc7WUFDOUVpSixJQUFJRSxRQUFRLENBQUM7Z0JBQ1h2RixNQUFNO2dCQUNOd0YsU0FBUyxDQUFDLDBCQUEwQixFQUFFSixLQUFLaEosSUFBSSxDQUFDLDhCQUE4QixDQUFDO2dCQUMvRXFKLE1BQU07b0JBQUM7b0JBQWE7aUJBQU87Z0JBQzNCRSxPQUFPO1lBQ1Q7UUFDRjtJQUNGO0FBQ0YsR0FBRztBQUVMLE1BQU1DLGVBQWU7T0FBSVo7SUFBaUI7Q0FBVztBQUNyRCxNQUFNYSxtQkFBbUJySyxFQUFFa0osa0JBQWtCLENBQUMsUUFBUTtJQUFDUTtJQUFrQlQ7Q0FBbUIsRUFBRTtJQUM1RkUsT0FBTyxDQUFDQyxNQUNOLENBQUMsTUFBTSxFQUFFZ0IsYUFBYWYsR0FBRyxDQUFDLENBQUN2RSxJQUFNLENBQUMsQ0FBQyxFQUFFQSxFQUFFLENBQUMsQ0FBQyxFQUFFd0UsSUFBSSxDQUFDLE1BQU0sbUJBQW1CLEVBQUdGLElBQUlHLEtBQUssRUFBOEIzSSxLQUFLLENBQUMsQ0FBQztBQUM5SDtBQUVBLE1BQU0wSiwwQkFBMEJ0SyxFQUFFMkQsTUFBTSxDQUFDO0lBQ3ZDeUMsTUFBTXBHLEVBQUVxRSxNQUFNO0lBQ2RrRyxZQUFZdkssRUFBRXVHLE9BQU8sR0FBR3JDLFFBQVE7SUFDaENzRyxXQUFXeEssRUFBRXlELElBQUksQ0FBQztRQUFDO1FBQU87S0FBTyxFQUFFUyxRQUFRO0lBQzNDdUcsV0FBV3pLLEVBQUV5RCxJQUFJLENBQUM7UUFBQztRQUFxQjtRQUFpQjtLQUFnQixFQUFFUyxRQUFRO0FBQ3JGO0FBRUEscUJBQXFCO0FBQ3JCLE1BQU13RyxvQkFBb0IxSyxFQUN2QjJELE1BQU0sQ0FBQztJQUNOL0MsTUFBTVosRUFBRXlELElBQUksQ0FBQztRQUFDO1FBQVM7UUFBVTtRQUFRO0tBQVU7SUFDbkRrSCxTQUFTM0ssRUFBRUksS0FBSyxDQUFDa0s7SUFDakJsRSxNQUFNcEcsRUFBRXFFLE1BQU0sR0FBR04sR0FBRyxDQUFDLEdBQUdDLEdBQUcsQ0FBQztJQUM1QjRHLE9BQU81SyxFQUFFeUQsSUFBSSxDQUFDO1FBQUM7UUFBUztRQUFRO1FBQU87UUFBUTtLQUFXLEVBQUVTLFFBQVE7SUFDcEUyRyxrQkFBa0I3SyxFQUFFdUcsT0FBTyxHQUFHckMsUUFBUTtJQUN0QzRHLEdBQUc5SyxFQUFFOEQsTUFBTSxHQUFHSSxRQUFRO0lBQ3RCNkcsZ0JBQWdCL0ssRUFBRThELE1BQU0sR0FBR0ksUUFBUTtJQUNuQzhHLE9BQU9oTCxFQUFFOEQsTUFBTSxHQUFHSSxRQUFRO0FBQzVCLEdBQ0M0QyxNQUFNO0FBRVQsT0FBTyxNQUFNbUUsbUJBQW1CakwsRUFDN0IyRCxNQUFNLENBQUM7SUFDTjZCLElBQUl4RixFQUFFcUUsTUFBTSxHQUFHNkcsUUFBUSxDQUFDO0lBQ3hCQyxPQUFPbkwsRUFBRXFFLE1BQU0sR0FBRzZHLFFBQVEsQ0FBQztJQUMzQkUsT0FBT3BMLEVBQUVxRSxNQUFNLEdBQUc2RyxRQUFRLENBQUM7SUFDM0JHLFVBQVVyTCxFQUFFcUUsTUFBTSxHQUFHSCxRQUFRLEdBQUdnSCxRQUFRLENBQUM7SUFDekNJLE9BQU90TCxFQUFFSSxLQUFLLENBQUNpSztJQUNma0IsU0FBU3ZMLEVBQUVJLEtBQUssQ0FBQ3NLO0lBQ2pCYyxTQUFTeEwsRUFBRXlMLE1BQU0sQ0FDZnpMLEVBQUVxRSxNQUFNLElBQ1JyRSxFQUFFSSxLQUFLLENBQ0xKLEVBQUVHLEtBQUssQ0FBQztRQUFDSCxFQUFFcUUsTUFBTTtRQUFJckUsRUFBRTJELE1BQU0sQ0FBQztZQUFFcEQsT0FBT1AsRUFBRXFFLE1BQU07WUFBSTVELFVBQVVULEVBQUV1RyxPQUFPLEdBQUdyQyxRQUFRO1FBQUc7S0FBRztJQUczRndILE9BQU8xTCxFQUFFeUwsTUFBTSxDQUFDekwsRUFBRXFFLE1BQU0sSUFBSXJFLEVBQUV5TCxNQUFNLENBQUN6TCxFQUFFcUUsTUFBTSxJQUFJckUsRUFBRXFFLE1BQU07QUFDM0QsR0FDQ3lDLE1BQU0sR0FBRztBQUVaLE9BQU8sTUFBTTZFLGtCQUFrQjNMLEVBQUUyRCxNQUFNLENBQUM7SUFDdENpSSxRQUFRWCxpQkFBaUJZLElBQUksQ0FBQztRQUFFckcsSUFBSTtJQUFLLEdBQ3RDc0csTUFBTSxDQUFDO1FBQ05DLFVBQVUvTCxFQUFFcUUsTUFBTTtJQUNwQixHQUNDMkgsT0FBTyxDQUFDO1FBQ1BaLE9BQU87UUFDUEUsT0FBTztRQUNQQyxTQUFTO1FBQ1RDLFNBQVM7UUFDVEUsT0FBTztJQUNUO0lBQ0ZPLFlBQVlqTSxFQUFFMkQsTUFBTSxDQUFDO1FBQ25Cb0ksVUFBVS9MLEVBQUVxRSxNQUFNO0lBQ3BCO0lBQ0FzQyxXQUFXM0csRUFBRTJELE1BQU0sQ0FBQyxDQUFDO0lBQ3JCdUksZUFBZWxNLEVBQUUyRCxNQUFNLENBQUMsQ0FBQztJQUN6QndJLGdCQUFnQm5NLEVBQUUyRCxNQUFNLENBQUM7UUFDdkJvSSxVQUFVL0wsRUFBRXFFLE1BQU07SUFDcEI7SUFDQStILE9BQU9wTSxFQUFFMkQsTUFBTSxDQUFDO1FBQ2RvSSxVQUFVL0wsRUFBRXFFLE1BQU07UUFDbEJnSSxvQkFBb0JyTSxFQUFFcUUsTUFBTSxHQUFHSCxRQUFRO1FBQ3ZDb0ksZ0JBQWdCdE0sRUFBRXFFLE1BQU0sR0FBR0gsUUFBUTtJQUNyQztJQUNBcUksWUFBWXZNLEVBQUUyRCxNQUFNLENBQUM7UUFDbkJvSSxVQUFVL0wsRUFBRXFFLE1BQU07SUFDcEI7SUFDQW1JLFFBQVF4TSxFQUFFMkQsTUFBTSxDQUFDO1FBQ2ZvSSxVQUFVL0wsRUFBRXFFLE1BQU07SUFDcEI7SUFDQW9JLFVBQVV6TSxFQUFFMkQsTUFBTSxDQUFDLENBQUM7SUFDcEIrSSxXQUFXMU0sRUFBRTJELE1BQU0sQ0FBQztRQUNsQm9JLFVBQVUvTCxFQUFFcUUsTUFBTTtRQUNsQnNJLE9BQU8zTSxFQUFFNE0sT0FBTztJQUNsQjtJQUNBQyxtQkFBbUI3TSxFQUFFMkQsTUFBTSxDQUFDO1FBQzFCb0ksVUFBVS9MLEVBQUVxRSxNQUFNO1FBQ2xCc0csU0FBUzNLLEVBQ04yRCxNQUFNLENBQUM7WUFDTnlDLE1BQU1wRyxFQUFFcUUsTUFBTTtZQUNkeUksT0FBTzlNLEVBQUVxRSxNQUFNO1lBQ2YwSSxJQUFJL00sRUFBRXFFLE1BQU07UUFDZCxHQUNDakUsS0FBSztRQUNSNE0sZUFBZWhOLEVBQUVxRSxNQUFNO0lBQ3pCO0lBQ0E0SSxtQkFBbUJqTixFQUFFMkQsTUFBTSxDQUFDO1FBQzFCb0ksVUFBVS9MLEVBQUVxRSxNQUFNO0lBQ3BCO0lBQ0E2SSxXQUFXbE4sRUFBRTJELE1BQU0sQ0FBQztRQUNsQm9JLFVBQVUvTCxFQUFFcUUsTUFBTTtJQUNwQjtJQUNBOEksb0JBQW9Cbk4sRUFBRTJELE1BQU0sQ0FBQztRQUMzQm9JLFVBQVUvTCxFQUFFcUUsTUFBTTtJQUNwQjtJQUNBK0ksc0JBQXNCcE4sRUFBRTJELE1BQU0sQ0FBQztRQUM3Qm9JLFVBQVUvTCxFQUFFcUUsTUFBTTtRQUNsQmdKLFdBQVdyTixFQUFFcUUsTUFBTTtJQUNyQjtJQUNBaUosbUJBQW1CdE4sRUFBRTJELE1BQU0sQ0FBQztRQUMxQm9JLFVBQVUvTCxFQUFFcUUsTUFBTTtRQUNsQmtKLFFBQVF2TixFQUFFcUUsTUFBTTtJQUNsQjtJQUNBbUoscUJBQXFCeE4sRUFBRTJELE1BQU0sQ0FBQztRQUM1Qm9JLFVBQVUvTCxFQUFFcUUsTUFBTTtRQUNsQmtKLFFBQVF2TixFQUFFcUUsTUFBTTtJQUNsQjtJQUNBb0osc0JBQXNCek4sRUFBRTJELE1BQU0sQ0FBQztRQUM3Qm9JLFVBQVUvTCxFQUFFcUUsTUFBTTtRQUNsQmtKLFFBQVF2TixFQUFFcUUsTUFBTTtJQUNsQjtBQUNGLEdBQUc7QUFHSCxPQUFPLE1BQU1xSixjQUFjMU4sRUFBRXlELElBQUksQ0FBQztJQUNoQztJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7Q0FDRCxFQUFFO0FBR0gsT0FBTyxNQUFNa0ssa0JBQWtCM04sRUFBRTJELE1BQU0sQ0FBQztJQUN0Q2lLLFdBQVc1TixFQUFFdUcsT0FBTyxHQUFHckMsUUFBUTtBQUNqQyxHQUFHO0FBR0gsT0FBTyxNQUFNMkosY0FBYzdOLEVBQUUyRCxNQUFNLENBQUM7SUFDbENzRyxNQUFNakssRUFBRXFFLE1BQU07SUFDZEcsTUFBTXhFLEVBQUVxRSxNQUFNO0FBQ2hCLEdBQUcifQ==
680
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90eXBlcy90eXBlcy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEZhc3RpZnlSZXBseSwgRmFzdGlmeVJlcXVlc3QgfSBmcm9tIFwiZmFzdGlmeVwiO1xuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIjtcbmltcG9ydCB0eXBlIHsgQXBpRGVjb3JhdG9yT3B0aW9ucywgQXV0aENvbnRleHQsIENvbnRleHQgfSBmcm9tIFwiLi4vYXBpXCI7XG5pbXBvcnQgdHlwZSB7IEd1YXJkS2V5IH0gZnJvbSBcIi4vLi4vYXBpL2RlY29yYXRvcnNcIjtcblxuLypcbiAgVXRpbGl0eSBUeXBlc1xuKi9cbmV4cG9ydCBmdW5jdGlvbiB6QXJyYXlhYmxlPFQgZXh0ZW5kcyB6LlpvZFR5cGVBbnk+KHNoYXBlOiBUKTogei5ab2RVbmlvbjxbVCwgei5ab2RBcnJheTxUPl0+IHtcbiAgcmV0dXJuIHoudW5pb24oW3NoYXBlLCBzaGFwZS5hcnJheSgpXSk7XG59XG4vLyBiaW9tZS1pZ25vcmUgbGludC9zdXNwaWNpb3VzL25vRXhwbGljaXRBbnk6IGFueSBpcyB1c2VkIHRvIG1ha2UgdGhlIHR5cGUgZGlzdHJpYnV0aXZlXG5leHBvcnQgdHlwZSBEaXN0cmlidXRpdmVPbWl0PFQsIEsgZXh0ZW5kcyBrZXlvZiBhbnk+ID0gVCBleHRlbmRzIGFueSA/IE9taXQ8VCwgSz4gOiBuZXZlcjtcblxuLypcbiAgTW9kZWwtRGVmaW5pdGlvblxuKi9cbmV4cG9ydCB0eXBlIEdlbmVyYXRlZENvbHVtblR5cGUgPSBcIlNUT1JFRFwiIHwgXCJWSVJUVUFMXCI7XG5leHBvcnQgdHlwZSBHZW5lcmF0ZWRDb2x1bW4gPSB7XG4gIHR5cGU6IEdlbmVyYXRlZENvbHVtblR5cGU7XG4gIGV4cHJlc3Npb246IHN0cmluZztcbn07XG5leHBvcnQgdHlwZSBDb21tb25Qcm9wID0ge1xuICBuYW1lOiBzdHJpbmc7XG4gIG51bGxhYmxlPzogYm9vbGVhbjtcbiAgdG9GaWx0ZXI/OiB0cnVlO1xuICBkZXNjPzogc3RyaW5nO1xuICBkYkRlZmF1bHQ/OiBzdHJpbmc7XG4gIGdlbmVyYXRlZD86IEdlbmVyYXRlZENvbHVtbjtcbn07XG5leHBvcnQgdHlwZSBJbnRlZ2VyUHJvcCA9IENvbW1vblByb3AgJiB7XG4gIHR5cGU6IFwiaW50ZWdlclwiO1xufTsgLy8gUEc6IGludGVnZXIgLyBUUzogbnVtYmVyIC8gSlNPTjogbnVtYmVyXG5leHBvcnQgdHlwZSBJbnRlZ2VyQXJyYXlQcm9wID0gQ29tbW9uUHJvcCAmIHtcbiAgdHlwZTogXCJpbnRlZ2VyW11cIjtcbn07IC8vIFBHOiBpbnRlZ2VyW10gLyBUUzogbnVtYmVyW10gLyBKU09OOiBudW1iZXJbXVxuZXhwb3J0IHR5cGUgQmlnSW50ZWdlclByb3AgPSBDb21tb25Qcm9wICYge1xuICB0eXBlOiBcImJpZ0ludGVnZXJcIjtcbn07IC8vIFBHOiBiaWdpbnQgLyBUUzogYmlnaW50IC8gSlNPTjogYmlnaW50XG5leHBvcnQgdHlwZSBCaWdJbnRlZ2VyQXJyYXlQcm9wID0gQ29tbW9uUHJvcCAmIHtcbiAgdHlwZTogXCJiaWdJbnRlZ2VyW11cIjtcbn07IC8vIFBHOiBiaWdpbnRbXSAvIFRTOiBiaWdpbnRbXSAvIEpTT046IGJpZ2ludFtdXG5leHBvcnQgdHlwZSBTdHJpbmdQcm9wID0gQ29tbW9uUHJvcCAmIHtcbiAgdHlwZTogXCJzdHJpbmdcIjtcbiAgbGVuZ3RoPzogbnVtYmVyOyAvLyBQRzogdmFyY2hhcihuKSwgdGV4dCAvIFRTOiBzdHJpbmcgLyBKU09OOiBzdHJpbmdcbn07IC8vIFBHOiB0ZXh0IC8gVFM6IHN0cmluZyAvIEpTT046IHN0cmluZ1xuZXhwb3J0IHR5cGUgU3RyaW5nQXJyYXlQcm9wID0gQ29tbW9uUHJvcCAmIHtcbiAgdHlwZTogXCJzdHJpbmdbXVwiO1xuICBsZW5ndGg/OiBudW1iZXI7IC8vIFBHOiB2YXJjaGFyKG4pW10sIHRleHRbXSAvIFRTOiBzdHJpbmdbXSAvIEpTT046IHN0cmluZ1tdXG59OyAvLyBQRzogdmFyY2hhcihuKVtdLCB0ZXh0W10gLyBUUzogc3RyaW5nW10gLyBKU09OOiBzdHJpbmdbXVxuZXhwb3J0IHR5cGUgRW51bVByb3AgPSBDb21tb25Qcm9wICYge1xuICB0eXBlOiBcImVudW1cIjtcbiAgaWQ6IHN0cmluZztcbiAgbGVuZ3RoPzogbnVtYmVyO1xufTsgLy8gUEc6IHRleHQgLyBUUzogc3RyaW5nIC8gSlNPTjogc3RyaW5nXG5leHBvcnQgdHlwZSBFbnVtQXJyYXlQcm9wID0gQ29tbW9uUHJvcCAmIHtcbiAgdHlwZTogXCJlbnVtW11cIjtcbiAgaWQ6IHN0cmluZztcbn07IC8vIFBHOiB0ZXh0W10gLyBUUzogc3RyaW5nW10gLyBKU09OOiBzdHJpbmdbXVxuZXhwb3J0IHR5cGUgTnVtYmVyUHJvcCA9IENvbW1vblByb3AgJiB7XG4gIHR5cGU6IFwibnVtYmVyXCI7XG4gIHByZWNpc2lvbj86IG51bWJlcjsgLy8gUEc6IG51bWVyaWMocCwgcykgLyBUUzogbnVtYmVyIC8gSlNPTjogbnVtYmVyXG4gIHNjYWxlPzogbnVtYmVyOyAvLyBQRzogbnVtZXJpYyhwLCBzKSAvIFRTOiBudW1iZXIgLyBKU09OOiBudW1iZXJcbiAgbnVtYmVyVHlwZT86IFwicmVhbFwiIHwgXCJkb3VibGUgcHJlY2lzaW9uXCIgfCBcIm51bWVyaWNcIjsgLy8g6riw67O46rCSOiBudW1lcmljXG59OyAvLyBQRzogbnVtZXJpYyhwLCBzKSAvIFRTOiBudW1iZXIgLyBKU09OOiBudW1iZXJcbmV4cG9ydCB0eXBlIE51bWJlckFycmF5UHJvcCA9IENvbW1vblByb3AgJiB7XG4gIHR5cGU6IFwibnVtYmVyW11cIjtcbiAgcHJlY2lzaW9uPzogbnVtYmVyO1xuICBzY2FsZT86IG51bWJlcjtcbiAgbnVtYmVyVHlwZT86IFwicmVhbFwiIHwgXCJkb3VibGUgcHJlY2lzaW9uXCIgfCBcIm51bWVyaWNcIjsgLy8g6riw67O46rCSOiBudW1lcmljXG59OyAvLyBQRzogbnVtZXJpYyhwLCBzKVtdIC8gVFM6IG51bWJlcltdIC8gSlNPTjogbnVtYmVyW11cbmV4cG9ydCB0eXBlIE51bWVyaWNQcm9wID0gQ29tbW9uUHJvcCAmIHtcbiAgdHlwZTogXCJudW1lcmljXCI7XG4gIHByZWNpc2lvbj86IG51bWJlcjtcbiAgc2NhbGU/OiBudW1iZXI7XG59OyAvLyBQRzogbnVtZXJpYyhwLCBzKSAvIFRTOiBzdHJpbmcgLyBKU09OOiBzdHJpbmdcbmV4cG9ydCB0eXBlIE51bWVyaWNBcnJheVByb3AgPSBDb21tb25Qcm9wICYge1xuICB0eXBlOiBcIm51bWVyaWNbXVwiO1xuICBwcmVjaXNpb24/OiBudW1iZXI7XG4gIHNjYWxlPzogbnVtYmVyO1xufTsgLy8gUEc6IG51bWVyaWMocCwgcylbXSAvIFRTOiBzdHJpbmdbXSAvIEpTT046IHN0cmluZ1tdXG5leHBvcnQgdHlwZSBCb29sZWFuUHJvcCA9IENvbW1vblByb3AgJiB7XG4gIHR5cGU6IFwiYm9vbGVhblwiO1xufTsgLy8gUEc6IGJvb2xlYW4gLyBUUzogYm9vbGVhbiAvIEpTT046IGJvb2xlYW5cbmV4cG9ydCB0eXBlIEJvb2xlYW5BcnJheVByb3AgPSBDb21tb25Qcm9wICYge1xuICB0eXBlOiBcImJvb2xlYW5bXVwiO1xufTsgLy8gUEc6IGJvb2xlYW5bXSAvIFRTOiBib29sZWFuW10gLyBKU09OOiBib29sZWFuW11cbmV4cG9ydCB0eXBlIERhdGVQcm9wID0gQ29tbW9uUHJvcCAmIHtcbiAgdHlwZTogXCJkYXRlXCI7XG59OyAvLyBQRzogdGltZXN0YW1weiAvIFRTOiBEYXRlIC8gSlNPTjogc3RyaW5nKElTT1N0cmluZylcbmV4cG9ydCB0eXBlIERhdGVBcnJheVByb3AgPSBDb21tb25Qcm9wICYge1xuICB0eXBlOiBcImRhdGVbXVwiO1xufTsgLy8gUEc6IHRpbWVzdGFtcHR6W10gLyBUUzogRGF0ZVtdIC8gSlNPTjogc3RyaW5nW11cbmV4cG9ydCB0eXBlIEpzb25Qcm9wID0gQ29tbW9uUHJvcCAmIHtcbiAgdHlwZTogXCJqc29uXCI7XG4gIGlkOiBzdHJpbmc7XG59OyAvLyBQRzoganNvbiAvIFRTOiBhbnkoaWQpIC8gSlNPTjogYW55XG5leHBvcnQgdHlwZSBVdWlkUHJvcCA9IENvbW1vblByb3AgJiB7XG4gIHR5cGU6IFwidXVpZFwiO1xufTsgLy8gUEc6IHV1aWQgLyBUUzogc3RyaW5nIC8gSlNPTjogc3RyaW5nXG5leHBvcnQgdHlwZSBVdWlkQXJyYXlQcm9wID0gQ29tbW9uUHJvcCAmIHtcbiAgdHlwZTogXCJ1dWlkW11cIjtcbn07IC8vIFBHOiB1dWlkW10gLyBUUzogc3RyaW5nW10gLyBKU09OOiBzdHJpbmdbXVxuZXhwb3J0IHR5cGUgVmlydHVhbFByb3AgPSBDb21tb25Qcm9wICYge1xuICB0eXBlOiBcInZpcnR1YWxcIjtcbiAgaWQ6IHN0cmluZztcbiAgdmlydHVhbFR5cGU/OiBcInF1ZXJ5XCIgfCBcImNvZGVcIjsgLy8gZGVmYXVsdDogXCJjb2RlXCJcbn07IC8vIFBHOiBub25lIC8gVFM6IGFueShpZCkgLyBKU09OOiBhbnlcbmV4cG9ydCB0eXBlIFZlY3RvclByb3AgPSBDb21tb25Qcm9wICYge1xuICB0eXBlOiBcInZlY3RvclwiO1xuICBkaW1lbnNpb25zOiBudW1iZXI7XG59O1xuZXhwb3J0IHR5cGUgVmVjdG9yQXJyYXlQcm9wID0gQ29tbW9uUHJvcCAmIHtcbiAgdHlwZTogXCJ2ZWN0b3JbXVwiO1xuICBkaW1lbnNpb25zOiBudW1iZXI7XG59O1xuZXhwb3J0IHR5cGUgVHNWZWN0b3JQcm9wID0gQ29tbW9uUHJvcCAmIHtcbiAgdHlwZTogXCJ0c3ZlY3RvclwiO1xufTtcbmV4cG9ydCB0eXBlIFJlbGF0aW9uVHlwZSA9IFwiSGFzTWFueVwiIHwgXCJCZWxvbmdzVG9PbmVcIiB8IFwiTWFueVRvTWFueVwiIHwgXCJPbmVUb09uZVwiO1xuZXhwb3J0IHR5cGUgUmVsYXRpb25PbiA9IFwiQ0FTQ0FERVwiIHwgXCJTRVQgTlVMTFwiIHwgXCJOTyBBQ1RJT05cIiB8IFwiU0VUIERFRkFVTFRcIiB8IFwiUkVTVFJJQ1RcIjtcbnR5cGUgX1JlbGF0aW9uUHJvcCA9IHtcbiAgdHlwZTogXCJyZWxhdGlvblwiO1xuICBuYW1lOiBzdHJpbmc7XG4gIHdpdGg6IHN0cmluZztcbiAgbnVsbGFibGU/OiBib29sZWFuOyAvLyBERUZBVUxUOiBmYWxzZVxuICB0b0ZpbHRlcj86IHRydWU7IC8vIERFRkFVTFQ6IGZhbHNlXG4gIGRlc2M/OiBzdHJpbmc7XG59O1xuZXhwb3J0IHR5cGUgT25lVG9PbmVSZWxhdGlvblByb3AgPSBfUmVsYXRpb25Qcm9wICYge1xuICByZWxhdGlvblR5cGU6IFwiT25lVG9PbmVcIjtcbiAgY3VzdG9tSm9pbkNsYXVzZT86IHN0cmluZztcbn0gJiAoXG4gICAgfCB7XG4gICAgICAgIGhhc0pvaW5Db2x1bW46IHRydWU7XG4gICAgICAgIHVzZUNvbnN0cmFpbnQ/OiBib29sZWFuOyAvLyBERUZBVUxUOiB0cnVlXG4gICAgICAgIG9uVXBkYXRlPzogUmVsYXRpb25PbjsgLy8gREVGQVVMVDogUkVTVFJJQ1RcbiAgICAgICAgb25EZWxldGU/OiBSZWxhdGlvbk9uOyAvLyBERUZBVUxUOiBSRVNUUklDVFxuICAgICAgfVxuICAgIHwge1xuICAgICAgICBoYXNKb2luQ29sdW1uOiBmYWxzZTtcbiAgICAgIH1cbiAgKTtcbmV4cG9ydCB0eXBlIEJlbG9uZ3NUb09uZVJlbGF0aW9uUHJvcCA9IF9SZWxhdGlvblByb3AgJiB7XG4gIHJlbGF0aW9uVHlwZTogXCJCZWxvbmdzVG9PbmVcIjtcbiAgY3VzdG9tSm9pbkNsYXVzZT86IHN0cmluZztcbiAgdXNlQ29uc3RyYWludD86IGJvb2xlYW47IC8vIERFRkFVTFQ6IHRydWVcbiAgb25VcGRhdGU/OiBSZWxhdGlvbk9uOyAvLyBERUZBVUxUOiBSRVNUUklDVFxuICBvbkRlbGV0ZT86IFJlbGF0aW9uT247IC8vIERFRkFVTFQ6IFJFU1RSSUNUXG59O1xuZXhwb3J0IHR5cGUgSGFzTWFueVJlbGF0aW9uUHJvcCA9IF9SZWxhdGlvblByb3AgJiB7XG4gIHJlbGF0aW9uVHlwZTogXCJIYXNNYW55XCI7XG4gIGpvaW5Db2x1bW46IHN0cmluZztcbiAgZnJvbUNvbHVtbj86IHN0cmluZztcbn07XG5leHBvcnQgdHlwZSBNYW55VG9NYW55UmVsYXRpb25Qcm9wID0gX1JlbGF0aW9uUHJvcCAmIHtcbiAgcmVsYXRpb25UeXBlOiBcIk1hbnlUb01hbnlcIjtcbiAgam9pblRhYmxlOiBgJHtzdHJpbmd9X18ke3N0cmluZ31gO1xuICBvblVwZGF0ZTogUmVsYXRpb25PbjtcbiAgb25EZWxldGU6IFJlbGF0aW9uT247XG59O1xuZXhwb3J0IHR5cGUgUmVsYXRpb25Qcm9wID1cbiAgfCBPbmVUb09uZVJlbGF0aW9uUHJvcFxuICB8IEJlbG9uZ3NUb09uZVJlbGF0aW9uUHJvcFxuICB8IEhhc01hbnlSZWxhdGlvblByb3BcbiAgfCBNYW55VG9NYW55UmVsYXRpb25Qcm9wO1xuXG5leHBvcnQgdHlwZSBFbnRpdHlQcm9wID1cbiAgfCBJbnRlZ2VyUHJvcFxuICB8IEludGVnZXJBcnJheVByb3BcbiAgfCBCaWdJbnRlZ2VyUHJvcFxuICB8IEJpZ0ludGVnZXJBcnJheVByb3BcbiAgfCBTdHJpbmdQcm9wXG4gIHwgU3RyaW5nQXJyYXlQcm9wXG4gIHwgRW51bVByb3BcbiAgfCBFbnVtQXJyYXlQcm9wXG4gIHwgTnVtYmVyUHJvcFxuICB8IE51bWJlckFycmF5UHJvcFxuICB8IE51bWVyaWNQcm9wXG4gIHwgTnVtZXJpY0FycmF5UHJvcFxuICB8IE51bWVyaWNQcm9wXG4gIHwgQm9vbGVhblByb3BcbiAgfCBCb29sZWFuQXJyYXlQcm9wXG4gIHwgRGF0ZVByb3BcbiAgfCBEYXRlQXJyYXlQcm9wXG4gIHwgVXVpZFByb3BcbiAgfCBVdWlkQXJyYXlQcm9wXG4gIHwgSnNvblByb3BcbiAgfCBWaXJ0dWFsUHJvcFxuICB8IFZlY3RvclByb3BcbiAgfCBWZWN0b3JBcnJheVByb3BcbiAgfCBUc1ZlY3RvclByb3BcbiAgfCBSZWxhdGlvblByb3A7XG5cbi8qKlxuICogcGd2ZWN0b3Ig6rGw66asIOyXsOyCsOyekCDtgbTrnpjsiqRcbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIC0gYHZlY3Rvcl9jb3NpbmVfb3BzYDog7L2U7IKs7J24IOqxsOumrCAoQ29zaW5lIERpc3RhbmNlKSAtIOq2jOyepVxuICogICAtIFNRTCDsl7DsgrDsnpA6IGA8PT5gXG4gKiAgIC0g67Kh7YSw7J2YIOuwqe2WpeunjCDruYTqtZAgKO2BrOq4sCDrrLTsi5wpLCAxIC0gY29zaW5lX3NpbWlsYXJpdHlcbiAqICAgLSDthY3siqTtirgg7J6E67Kg65SpLCDsi5zrp6jti7Eg6rKA7IOJ7JeQIOqwgOyepSDsnbzrsJjsoIHsnLzroZwg7IKs7JqpXG4gKiAgIC0g7IKs7JqpIOyYiDogT3BlbkFJLCBWb3lhZ2Ug65OxIOuMgOu2gOu2hOydmCDsnoTrsqDrlKkg66qo64247JeQIOq2jOyepVxuICpcbiAqIC0gYHZlY3Rvcl9pcF9vcHNgOiDrgrTsoIEgKElubmVyIFByb2R1Y3QpXG4gKiAgIC0gU1FMIOyXsOyCsOyekDogYDwjPmBcbiAqICAgLSDrkZAg67Kh7YSw7J2YIOuCtOyggeydhCDqs4TsgrAgKHN1bShhW2ldICogYltpXSkpXG4gKiAgIC0g7KCV6rec7ZmU65CcIOuyoe2EsOyXkOyEnCDsvZTsgqzsnbgg7Jyg7IKs64+E7JmAIOuPmeydvO2VnCDqsrDqs7xcbiAqICAgLSDqsJLsnbQg7YG07IiY66GdIOycoOyCrCAo7J2M7IiYIOyXsOyCsOyekOydtOuvgOuhnCBPUkRFUiBCWeyXkOyEnCDso7zsnZgpXG4gKiAgIC0g7IKs7JqpIOyYiDog7J2066+4IOygleq3nO2ZlOuQnCDsnoTrsqDrlKnsl5DshJwg6rCA7J6lIOu5oOuluCDshLHriqVcbiAqXG4gKiAtIGB2ZWN0b3JfbDJfb3BzYDog7Jyg7YG066as65OcIOqxsOumrCAoTDIgRGlzdGFuY2UpXG4gKiAgIC0gU1FMIOyXsOyCsOyekDogYDwtPmBcbiAqICAgLSDrkZAg67Kh7YSwIOqwhOydmCDsp4HshKAg6rGw66as66W8IOqzhOyCsCAoc3FydChzdW0oKGFbaV0gLSBiW2ldKV4yKSkpXG4gKiAgIC0g67Kh7YSw7J2YIO2BrOq4sChtYWduaXR1ZGUp6rCAIOykkeyalO2VoCDrlYwg7IKs7JqpXG4gKiAgIC0g7IKs7JqpIOyYiDog7J2066+47KeAIOycoOyCrOuPhCwg7KCI64yA7KCBIOqxsOumrCDsuKHsoJXsnbQg7ZWE7JqU7ZWcIOqyveyasFxuICovXG5leHBvcnQgdHlwZSBWZWN0b3JPcHMgPSBcInZlY3Rvcl9jb3NpbmVfb3BzXCIgfCBcInZlY3Rvcl9pcF9vcHNcIiB8IFwidmVjdG9yX2wyX29wc1wiO1xuXG50eXBlIEVudGl0eUluZGV4Q29sdW1uID0ge1xuICBuYW1lOiBzdHJpbmc7XG4gIG51bGxzRmlyc3Q/OiBib29sZWFuO1xuICBzb3J0T3JkZXI/OiBcIkFTQ1wiIHwgXCJERVNDXCI7XG4gIC8qKiBwZ3ZlY3RvciDsnbjrjbHsiqTsl5DshJwg7IKs7Jqp7ZWgIOqxsOumrCDsl7DsgrDsnpAgKHZlY3RvciDsu6zrn7zsl5Drp4wg7KCB7JqpKSAqL1xuICB2ZWN0b3JPcHM/OiBWZWN0b3JPcHM7XG59O1xuZXhwb3J0IHR5cGUgRW50aXR5SW5kZXggPSB7XG4gIHR5cGU6IFwiaW5kZXhcIiB8IFwidW5pcXVlXCIgfCBcImhuc3dcIiB8IFwiaXZmZmxhdFwiO1xuICBjb2x1bW5zOiBFbnRpdHlJbmRleENvbHVtbltdO1xuICBuYW1lOiBzdHJpbmc7XG4gIHVzaW5nPzogXCJidHJlZVwiIHwgXCJoYXNoXCIgfCBcImdpblwiIHwgXCJnaXN0XCIgfCBcInBncm9vbmdhXCI7XG4gIG51bGxzTm90RGlzdGluY3Q/OiBib29sZWFuOyAvLyB1bmlxdWUgaW5kZXggb25seVxuICAvKipcbiAgICogSE5TVyAoSGllcmFyY2hpY2FsIE5hdmlnYWJsZSBTbWFsbCBXb3JsZCkg7J24642x7IqkOiDqsIEg64W465Oc7J2YIOy1nOuMgCDsl7DqsrAg7IiYXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiDqt7jrnpjtlITsl5DshJwg6rCBIOuFuOuTnOqwgCDqsIDsp4gg7IiYIOyeiOuKlCDstZzrjIAg7Jew6rKwIOyImOyeheuLiOuLpC5cbiAgICogSE5TV+uKlCDruaDrpbgg6rKA7IOJIOyGjeuPhOyZgCDrhpLsnYAg7KCV7ZmV64+E66W8IOygnOqzte2VmOuvgOuhnCDqtozsnqXrkKnri4jri6QuXG4gICAqIC0g6riw67O46rCSOiAxNlxuICAgKiAtIOuylOychDogMiB+IDEwMFxuICAgKiAtIOuGkuydhOyImOuhnTog7KCV7ZmV64+E4oaRLCDruYzrk5wg7Iuc6rCE4oaRLCDrqZTrqqjrpqzihpFcbiAgICogLSDqtozsnqU6IOu5oOuluCDruYzrk5woOCksIOq3oO2YlSgxNiksIOuGkuydgCDsoJXtmZXrj4QoMzIpLCDstZzqs6Ag7KCV7ZmV64+EKDY0KVxuICAgKi9cbiAgbT86IG51bWJlcjtcbiAgLyoqXG4gICAqIEhOU1cgKEhpZXJhcmNoaWNhbCBOYXZpZ2FibGUgU21hbGwgV29ybGQpIOyduOuNseyKpDog6rWs7ISxIOyLnCDtg5Dsg4kg67KU7JyEXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiDsnbjrjbHsiqQg6rWs7ISxIOyLnCDqsIEg64W465Oc7JeQ7IScIO2DkOyDie2VoCDrspTsnITsnoXri4jri6QuXG4gICAqIC0g6riw67O46rCSOiA2NFxuICAgKiAtIOuylOychDogNCB+IDEwMDBcbiAgICogLSDrhpLsnYTsiJjroZ06IOygle2ZleuPhOKGkSwg67mM65OcIOyLnOqwhOKGkVxuICAgKiAtIOq2jOyepTog67mg66W4IOu5jOuTnCgzMiksIOq3oO2YlSg2NCksIOuGkuydgCDsoJXtmZXrj4QoMTI4KSwg7LWc6rOgIOygle2ZleuPhCgyNTYpXG4gICAqL1xuICBlZkNvbnN0cnVjdGlvbj86IG51bWJlcjtcbiAgLyoqXG4gICAqIElWRkZsYXQgKEludmVydGVkIEZpbGUgd2l0aCBGbGF0IENvbXByZXNzaW9uKSDsnbjrjbHsiqQ6IO2BtOufrOyKpO2EsOungSDrpqzsiqTtirgg7IiYXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiDrsqHthLDrpbwg7YG065+s7Iqk7YSw66eB7ZWgIOuyhO2CtyDsiJjrpbwg7KeA7KCV7ZWp64uI64ukLlxuICAgKiBJVkZGbGF07J2AIOu5oOuluCDruYzrk5zsmYAg64Ku7J2AIOuplOuqqOumrCDsgqzsmqnsnbQg7ZWE7JqU7ZWgIOuVjCDsgqzsmqntlanri4jri6QuXG4gICAqIC0g6raM7J6l6rCSOiBzcXJ0KHJvd19jb3VudCkgfiByb3dfY291bnQgLyAxMDAwXG4gICAqIC0g7JiI7IucOiAxMCwwMDDtlokg4oaSIDEwMCwgMTAwLDAwMO2WiSDihpIgMzAwLCAxLDAwMCwwMDDtlokg4oaSIDEwMDBcbiAgICogLSDrp47snYTsiJjroZ0g7KCV7ZmV64+E4oaRLCDqsoDsg4kg7IaN64+E4oaTXG4gICAqL1xuICBsaXN0cz86IG51bWJlcjtcbn07XG5cbi8vIFN1YnNldEZpZWxkIO2DgOyehTogc3RyaW5nIOuYkOuKlCBpbnRlcm5hbCDsmLXshZjsnbQg7J6I64qUIOqwneyytFxuZXhwb3J0IHR5cGUgU3Vic2V0RmllbGQgPSBzdHJpbmcgfCB7IGZpZWxkOiBzdHJpbmc7IGludGVybmFsPzogYm9vbGVhbiB9O1xuXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplU3Vic2V0RmllbGQoZjogU3Vic2V0RmllbGQpOiBzdHJpbmcge1xuICByZXR1cm4gdHlwZW9mIGYgPT09IFwic3RyaW5nXCIgPyBmIDogZi5maWVsZDtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc0ludGVybmFsU3Vic2V0RmllbGQoZjogU3Vic2V0RmllbGQpOiBib29sZWFuIHtcbiAgcmV0dXJuIHR5cGVvZiBmICE9PSBcInN0cmluZ1wiICYmIGYuaW50ZXJuYWwgPT09IHRydWU7XG59XG5cbmV4cG9ydCB0eXBlIEVudGl0eUpzb24gPSB7XG4gIGlkOiBzdHJpbmc7XG4gIHBhcmVudElkPzogc3RyaW5nO1xuICB0YWJsZTogc3RyaW5nO1xuICB0aXRsZT86IHN0cmluZztcbiAgcHJvcHM6IEVudGl0eVByb3BbXTtcbiAgaW5kZXhlczogRW50aXR5SW5kZXhbXTtcbiAgc3Vic2V0czoge1xuICAgIFtzdWJzZXQ6IHN0cmluZ106IFN1YnNldEZpZWxkW107XG4gIH07XG4gIGVudW1zOiB7XG4gICAgW2VudW1JZDogc3RyaW5nXToge1xuICAgICAgW2tleTogc3RyaW5nXTogc3RyaW5nO1xuICAgIH07XG4gIH07XG59O1xuZXhwb3J0IHR5cGUgRW50aXR5U3Vic2V0Um93ID0ge1xuICBmaWVsZDogc3RyaW5nO1xuICBoYXM6IHtcbiAgICBba2V5OiBzdHJpbmddOiBib29sZWFuO1xuICB9O1xuICBpc0ludGVybmFsOiB7XG4gICAgW2tleTogc3RyaW5nXTogYm9vbGVhbjtcbiAgfTtcbiAgY2hpbGRyZW46IEVudGl0eVN1YnNldFJvd1tdO1xuICBwcmVmaXhlczogc3RyaW5nW107XG4gIHJlbGF0aW9uRW50aXR5Pzogc3RyaW5nO1xuICBpc09wZW4/OiBib29sZWFuO1xufTtcbmV4cG9ydCB0eXBlIEZsYXR0ZW5TdWJzZXRSb3cgPSBPbWl0PEVudGl0eVN1YnNldFJvdywgXCJjaGlsZHJlblwiPjtcblxuLypcbiAgUHJvcE5vZGVcbiovXG5cbi8qKlxuICog7JeU7Yuw7Yuw7J2YIO2VhOuTnCDqtazsobDrpbwg7Yq466asIO2Yle2DnOuhnCDtkZztmITtlZjripQg7KSR6rCEIOuFuOuTnOyeheuLiOuLpC5cbiAqXG4gKiAqKuuqqeyggSoqOiBFbnRpdHnsnZggc3Vic2V0IO2VhOuTnCDtkZztmITsi50o7JiIOiBcImlkXCIsIFwidXNlci5uYW1lXCIsIFwidGFnc1tdXCIp7J2EXG4gKiDsnqzqt4DsoIHsnbgg7Yq466asIOq1rOyhsOuhnCDtjIzsi7HtlZjsl6wgWm9kIOyKpO2CpOuniCDsg53shLHsnZgg7KSR6rCEIOuLqOqzhOuhnCDsgqzsmqntlanri4jri6QuXG4gKlxuICogKirrs4DtmZgg7Z2Q66aEKio6XG4gKiBFbnRpdHkgc3Vic2V0IOKGkiBFbnRpdHlQcm9wTm9kZSAo7Yq466asIOq1rOyhsCkg4oaSIFpvZCDsiqTtgqTrp4gg4oaSIFJlbmRlcmluZ05vZGUgKFVJ7JqpKVxuICpcbiAqICoqbm9kZVR5cGUqKjpcbiAqIC0gXCJwbGFpblwiOiDri6jsnbwg7ZWE65OcICjsmIg6IFwiaWRcIiwgXCJuYW1lXCIpXG4gKiAtIFwib2JqZWN0XCI6IOykkeyyqSDqsJ3ssrQgKOyYiDogXCJ1c2VyLm5hbWVcIiDihpIgdXNlciDqsJ3ssrQpXG4gKiAtIFwiYXJyYXlcIjog67Cw7Je0ICjsmIg6IFwidGFnc1tdXCIg4oaSIHRhZ3Mg67Cw7Je0KVxuICpcbiAqICoq7IKs7JqpIOychOy5mCoqOiBlbnRpdHktY29udmVydGVyLnRz7J2YIHByb3BOb2RlVG9ab2RUeXBlKClcbiAqL1xuZXhwb3J0IHR5cGUgRW50aXR5UHJvcE5vZGUgPVxuICB8IHtcbiAgICAgIG5vZGVUeXBlOiBcInBsYWluXCI7XG4gICAgICBwcm9wOiBFbnRpdHlQcm9wO1xuICAgIH1cbiAgfCB7XG4gICAgICBub2RlVHlwZTogXCJvYmplY3RcIiB8IFwiYXJyYXlcIjtcbiAgICAgIHByb3A/OiBFbnRpdHlQcm9wO1xuICAgICAgY2hpbGRyZW46IEVudGl0eVByb3BOb2RlW107XG4gICAgfTtcblxuLypcbiAgUHJvcCBUeXBlIEd1YXJkc1xuKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0ludGVnZXJTaW5nbGVQcm9wKHA6IHVua25vd24pOiBwIGlzIEludGVnZXJQcm9wIHtcbiAgcmV0dXJuIChwIGFzIEludGVnZXJQcm9wKT8udHlwZSA9PT0gXCJpbnRlZ2VyXCI7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNJbnRlZ2VyQXJyYXlQcm9wKHA6IHVua25vd24pOiBwIGlzIEludGVnZXJBcnJheVByb3Age1xuICByZXR1cm4gKHAgYXMgSW50ZWdlckFycmF5UHJvcCk/LnR5cGUgPT09IFwiaW50ZWdlcltdXCI7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNJbnRlZ2VyUHJvcChwOiB1bmtub3duKTogcCBpcyBJbnRlZ2VyUHJvcCB8IEludGVnZXJBcnJheVByb3Age1xuICByZXR1cm4gaXNJbnRlZ2VyU2luZ2xlUHJvcChwKSB8fCBpc0ludGVnZXJBcnJheVByb3AocCk7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNCaWdJbnRlZ2VyU2luZ2xlUHJvcChwOiB1bmtub3duKTogcCBpcyBCaWdJbnRlZ2VyUHJvcCB7XG4gIHJldHVybiAocCBhcyBCaWdJbnRlZ2VyUHJvcCk/LnR5cGUgPT09IFwiYmlnSW50ZWdlclwiO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzQmlnSW50ZWdlckFycmF5UHJvcChwOiB1bmtub3duKTogcCBpcyBCaWdJbnRlZ2VyQXJyYXlQcm9wIHtcbiAgcmV0dXJuIChwIGFzIEJpZ0ludGVnZXJBcnJheVByb3ApPy50eXBlID09PSBcImJpZ0ludGVnZXJbXVwiO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzQmlnSW50ZWdlclByb3AocDogdW5rbm93bik6IHAgaXMgQmlnSW50ZWdlclByb3AgfCBCaWdJbnRlZ2VyQXJyYXlQcm9wIHtcbiAgcmV0dXJuIGlzQmlnSW50ZWdlclNpbmdsZVByb3AocCkgfHwgaXNCaWdJbnRlZ2VyQXJyYXlQcm9wKHApO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzU3RyaW5nU2luZ2xlUHJvcChwOiB1bmtub3duKTogcCBpcyBTdHJpbmdQcm9wIHtcbiAgcmV0dXJuIChwIGFzIFN0cmluZ1Byb3ApPy50eXBlID09PSBcInN0cmluZ1wiO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzU3RyaW5nQXJyYXlQcm9wKHA6IHVua25vd24pOiBwIGlzIFN0cmluZ0FycmF5UHJvcCB7XG4gIHJldHVybiAocCBhcyBTdHJpbmdBcnJheVByb3ApPy50eXBlID09PSBcInN0cmluZ1tdXCI7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNTdHJpbmdQcm9wKHA6IHVua25vd24pOiBwIGlzIFN0cmluZ1Byb3AgfCBTdHJpbmdBcnJheVByb3Age1xuICByZXR1cm4gaXNTdHJpbmdTaW5nbGVQcm9wKHApIHx8IGlzU3RyaW5nQXJyYXlQcm9wKHApO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzRW51bVNpbmdsZVByb3AocDogdW5rbm93bik6IHAgaXMgRW51bVByb3Age1xuICByZXR1cm4gKHAgYXMgRW51bVByb3ApPy50eXBlID09PSBcImVudW1cIjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc0VudW1BcnJheVByb3AocDogdW5rbm93bik6IHAgaXMgRW51bUFycmF5UHJvcCB7XG4gIHJldHVybiAocCBhcyBFbnVtQXJyYXlQcm9wKT8udHlwZSA9PT0gXCJlbnVtW11cIjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc0VudW1Qcm9wKHA6IHVua25vd24pOiBwIGlzIEVudW1Qcm9wIHwgRW51bUFycmF5UHJvcCB7XG4gIHJldHVybiBpc0VudW1TaW5nbGVQcm9wKHApIHx8IGlzRW51bUFycmF5UHJvcChwKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc051bWJlclNpbmdsZVByb3AocDogdW5rbm93bik6IHAgaXMgTnVtYmVyUHJvcCB7XG4gIHJldHVybiAocCBhcyBOdW1iZXJQcm9wKT8udHlwZSA9PT0gXCJudW1iZXJcIjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc051bWJlckFycmF5UHJvcChwOiB1bmtub3duKTogcCBpcyBOdW1iZXJBcnJheVByb3Age1xuICByZXR1cm4gKHAgYXMgTnVtYmVyQXJyYXlQcm9wKT8udHlwZSA9PT0gXCJudW1iZXJbXVwiO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzTnVtYmVyUHJvcChwOiB1bmtub3duKTogcCBpcyBOdW1iZXJQcm9wIHwgTnVtYmVyQXJyYXlQcm9wIHtcbiAgcmV0dXJuIGlzTnVtYmVyU2luZ2xlUHJvcChwKSB8fCBpc051bWJlckFycmF5UHJvcChwKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc051bWVyaWNTaW5nbGVQcm9wKHA6IHVua25vd24pOiBwIGlzIE51bWVyaWNQcm9wIHtcbiAgcmV0dXJuIChwIGFzIE51bWVyaWNQcm9wKT8udHlwZSA9PT0gXCJudW1lcmljXCI7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNOdW1lcmljQXJyYXlQcm9wKHA6IHVua25vd24pOiBwIGlzIE51bWVyaWNBcnJheVByb3Age1xuICByZXR1cm4gKHAgYXMgTnVtZXJpY0FycmF5UHJvcCk/LnR5cGUgPT09IFwibnVtZXJpY1tdXCI7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNOdW1lcmljUHJvcChwOiB1bmtub3duKTogcCBpcyBOdW1lcmljUHJvcCB8IE51bWVyaWNBcnJheVByb3Age1xuICByZXR1cm4gaXNOdW1lcmljU2luZ2xlUHJvcChwKSB8fCBpc051bWVyaWNBcnJheVByb3AocCk7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNCb29sZWFuU2luZ2xlUHJvcChwOiB1bmtub3duKTogcCBpcyBCb29sZWFuUHJvcCB7XG4gIHJldHVybiAocCBhcyBCb29sZWFuUHJvcCk/LnR5cGUgPT09IFwiYm9vbGVhblwiO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzQm9vbGVhbkFycmF5UHJvcChwOiB1bmtub3duKTogcCBpcyBCb29sZWFuQXJyYXlQcm9wIHtcbiAgcmV0dXJuIChwIGFzIEJvb2xlYW5BcnJheVByb3ApPy50eXBlID09PSBcImJvb2xlYW5bXVwiO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzQm9vbGVhblByb3AocDogdW5rbm93bik6IHAgaXMgQm9vbGVhblByb3AgfCBCb29sZWFuQXJyYXlQcm9wIHtcbiAgcmV0dXJuIGlzQm9vbGVhblNpbmdsZVByb3AocCkgfHwgaXNCb29sZWFuQXJyYXlQcm9wKHApO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzRGF0ZVNpbmdsZVByb3AocDogdW5rbm93bik6IHAgaXMgRGF0ZVByb3Age1xuICByZXR1cm4gKHAgYXMgRGF0ZVByb3ApPy50eXBlID09PSBcImRhdGVcIjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc0RhdGVBcnJheVByb3AocDogdW5rbm93bik6IHAgaXMgRGF0ZUFycmF5UHJvcCB7XG4gIHJldHVybiAocCBhcyBEYXRlQXJyYXlQcm9wKT8udHlwZSA9PT0gXCJkYXRlW11cIjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc0RhdGVQcm9wKHA6IHVua25vd24pOiBwIGlzIERhdGVQcm9wIHwgRGF0ZUFycmF5UHJvcCB7XG4gIHJldHVybiBpc0RhdGVTaW5nbGVQcm9wKHApIHx8IGlzRGF0ZUFycmF5UHJvcChwKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc1V1aWRTaW5nbGVQcm9wKHA6IHVua25vd24pOiBwIGlzIFV1aWRQcm9wIHtcbiAgcmV0dXJuIChwIGFzIFV1aWRQcm9wKT8udHlwZSA9PT0gXCJ1dWlkXCI7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNVdWlkQXJyYXlQcm9wKHA6IHVua25vd24pOiBwIGlzIFV1aWRBcnJheVByb3Age1xuICByZXR1cm4gKHAgYXMgVXVpZEFycmF5UHJvcCk/LnR5cGUgPT09IFwidXVpZFtdXCI7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNVdWlkUHJvcChwOiB1bmtub3duKTogcCBpcyBVdWlkUHJvcCB8IFV1aWRBcnJheVByb3Age1xuICByZXR1cm4gaXNVdWlkU2luZ2xlUHJvcChwKSB8fCBpc1V1aWRBcnJheVByb3AocCk7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNKc29uUHJvcChwOiB1bmtub3duKTogcCBpcyBKc29uUHJvcCB7XG4gIHJldHVybiAocCBhcyBKc29uUHJvcCk/LnR5cGUgPT09IFwianNvblwiO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzVmlydHVhbFByb3AocDogdW5rbm93bik6IHAgaXMgVmlydHVhbFByb3Age1xuICByZXR1cm4gKHAgYXMgVmlydHVhbFByb3ApPy50eXBlID09PSBcInZpcnR1YWxcIjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc1ZpcnR1YWxDb2RlUHJvcChwOiB1bmtub3duKTogcCBpcyBWaXJ0dWFsUHJvcCB7XG4gIGlmICghaXNWaXJ0dWFsUHJvcChwKSkgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gcC52aXJ0dWFsVHlwZSAhPT0gXCJxdWVyeVwiOyAvLyB1bmRlZmluZWTrj4QgXCJjb2RlXCLroZwg7Leo6riJXG59XG5leHBvcnQgZnVuY3Rpb24gaXNWaXJ0dWFsUXVlcnlQcm9wKHA6IHVua25vd24pOiBwIGlzIFZpcnR1YWxQcm9wIHtcbiAgaWYgKCFpc1ZpcnR1YWxQcm9wKHApKSByZXR1cm4gZmFsc2U7XG4gIHJldHVybiBwLnZpcnR1YWxUeXBlID09PSBcInF1ZXJ5XCI7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNWZWN0b3JTaW5nbGVQcm9wKHA6IHVua25vd24pOiBwIGlzIFZlY3RvclByb3Age1xuICByZXR1cm4gKHAgYXMgVmVjdG9yUHJvcCk/LnR5cGUgPT09IFwidmVjdG9yXCI7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNWZWN0b3JBcnJheVByb3AocDogdW5rbm93bik6IHAgaXMgVmVjdG9yQXJyYXlQcm9wIHtcbiAgcmV0dXJuIChwIGFzIFZlY3RvckFycmF5UHJvcCk/LnR5cGUgPT09IFwidmVjdG9yW11cIjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc1ZlY3RvclByb3AocDogdW5rbm93bik6IHAgaXMgVmVjdG9yUHJvcCB8IFZlY3RvckFycmF5UHJvcCB7XG4gIHJldHVybiBpc1ZlY3RvclNpbmdsZVByb3AocCkgfHwgaXNWZWN0b3JBcnJheVByb3AocCk7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNUc1ZlY3RvclByb3AocDogdW5rbm93bik6IHAgaXMgVHNWZWN0b3JQcm9wIHtcbiAgcmV0dXJuIChwIGFzIFRzVmVjdG9yUHJvcCk/LnR5cGUgPT09IFwidHN2ZWN0b3JcIjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc1JlbGF0aW9uUHJvcChwOiB1bmtub3duKTogcCBpcyBSZWxhdGlvblByb3Age1xuICByZXR1cm4gKHAgYXMgUmVsYXRpb25Qcm9wKT8udHlwZSA9PT0gXCJyZWxhdGlvblwiO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzT25lVG9PbmVSZWxhdGlvblByb3AocDogdW5rbm93bik6IHAgaXMgT25lVG9PbmVSZWxhdGlvblByb3Age1xuICByZXR1cm4gKHAgYXMgT25lVG9PbmVSZWxhdGlvblByb3ApPy5yZWxhdGlvblR5cGUgPT09IFwiT25lVG9PbmVcIjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc0JlbG9uZ3NUb09uZVJlbGF0aW9uUHJvcChwOiB1bmtub3duKTogcCBpcyBCZWxvbmdzVG9PbmVSZWxhdGlvblByb3Age1xuICByZXR1cm4gKHAgYXMgQmVsb25nc1RvT25lUmVsYXRpb25Qcm9wKT8ucmVsYXRpb25UeXBlID09PSBcIkJlbG9uZ3NUb09uZVwiO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzSGFzTWFueVJlbGF0aW9uUHJvcChwOiB1bmtub3duKTogcCBpcyBIYXNNYW55UmVsYXRpb25Qcm9wIHtcbiAgcmV0dXJuIChwIGFzIEhhc01hbnlSZWxhdGlvblByb3ApPy5yZWxhdGlvblR5cGUgPT09IFwiSGFzTWFueVwiO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzTWFueVRvTWFueVJlbGF0aW9uUHJvcChwOiB1bmtub3duKTogcCBpcyBNYW55VG9NYW55UmVsYXRpb25Qcm9wIHtcbiAgcmV0dXJuIChwIGFzIE1hbnlUb01hbnlSZWxhdGlvblByb3ApPy5yZWxhdGlvblR5cGUgPT09IFwiTWFueVRvTWFueVwiO1xufVxuXG50eXBlIEpvaW5DbGF1c2UgPVxuICB8IHtcbiAgICAgIGZyb206IHN0cmluZztcbiAgICAgIHRvOiBzdHJpbmc7XG4gICAgfVxuICB8IHtcbiAgICAgIGN1c3RvbTogc3RyaW5nO1xuICAgIH07XG5leHBvcnQgZnVuY3Rpb24gaXNDdXN0b21Kb2luQ2xhdXNlKHA6IHVua25vd24pOiBwIGlzIHsgY3VzdG9tOiBzdHJpbmcgfSB7XG4gIHJldHVybiAhIShwIGFzIHsgY3VzdG9tOiBzdHJpbmcgfSk/LmN1c3RvbTtcbn1cblxudHlwZSBTdWJzZXRMb2FkZXIgPSB7XG4gIGFzOiBzdHJpbmc7XG4gIHRhYmxlOiBzdHJpbmc7XG4gIG1hbnlKb2luOiB7XG4gICAgZnJvbVRhYmxlOiBzdHJpbmc7XG4gICAgZnJvbUNvbDogc3RyaW5nO1xuICAgIGlkRmllbGQ6IHN0cmluZztcbiAgICB0b1RhYmxlOiBzdHJpbmc7XG4gICAgdG9Db2w6IHN0cmluZztcbiAgICB0aHJvdWdoPzoge1xuICAgICAgdGFibGU6IHN0cmluZztcbiAgICAgIGZyb21Db2w6IHN0cmluZztcbiAgICAgIHRvQ29sOiBzdHJpbmc7XG4gICAgfTtcbiAgfTtcbiAgb25lSm9pbnM6ICh7XG4gICAgYXM6IHN0cmluZztcbiAgICBqb2luOiBcImlubmVyXCIgfCBcIm91dGVyXCI7XG4gICAgdGFibGU6IHN0cmluZztcbiAgfSAmIEpvaW5DbGF1c2UpW107XG4gIHNlbGVjdDogc3RyaW5nW107XG4gIGxvYWRlcnM/OiBTdWJzZXRMb2FkZXJbXTtcbn07XG5cbmV4cG9ydCB0eXBlIFN1YnNldFF1ZXJ5ID0ge1xuICBzZWxlY3Q6IHN0cmluZ1tdO1xuICB2aXJ0dWFsOiBzdHJpbmdbXTtcbiAgam9pbnM6ICh7XG4gICAgYXM6IHN0cmluZztcbiAgICBqb2luOiBcImlubmVyXCIgfCBcIm91dGVyXCI7XG4gICAgdGFibGU6IHN0cmluZztcbiAgfSAmIEpvaW5DbGF1c2UpW107XG4gIGxvYWRlcnM6IFN1YnNldExvYWRlcltdO1xufTtcblxuLyogQmFzZU1vZGVsICovXG5leHBvcnQgY29uc3QgU29uYW11UXVlcnlNb2RlID0gei5lbnVtKFtcImJvdGhcIiwgXCJsaXN0XCIsIFwiY291bnRcIl0pO1xuZXhwb3J0IHR5cGUgU29uYW11UXVlcnlNb2RlID0gei5pbmZlcjx0eXBlb2YgU29uYW11UXVlcnlNb2RlPjtcblxuLyogU2VtYW50aWMgUXVlcnkgKi9cbmV4cG9ydCBjb25zdCBTb25hbXVTZW1hbnRpY1BhcmFtcyA9IHoub2JqZWN0KHtcbiAgc2VtYW50aWNRdWVyeTogei5vYmplY3Qoe1xuICAgIGVtYmVkZGluZzogei5hcnJheSh6Lm51bWJlcigpKS5taW4oMTAyNCkubWF4KDEwMjQpLFxuICAgIHRocmVzaG9sZDogei5udW1iZXIoKS5vcHRpb25hbCgpLFxuICAgIG1ldGhvZDogei5lbnVtKFtcImNvc2luZVwiLCBcImwyXCIsIFwiaW5uZXJfcHJvZHVjdFwiXSkub3B0aW9uYWwoKSxcbiAgfSksXG4gIHdoaWNoOiB6LnN0cmluZygpLFxufSk7XG5leHBvcnQgdHlwZSBTb25hbXVTZW1hbnRpY1BhcmFtcyA9IHouaW5mZXI8dHlwZW9mIFNvbmFtdVNlbWFudGljUGFyYW1zPjtcblxuLyogS25leCBNaWdyYXRpb24gKi9cbmV4cG9ydCB0eXBlIEtuZXhFcnJvciA9IHtcbiAgY29kZTogc3RyaW5nO1xuICBlcnJubzogbnVtYmVyO1xuICBzcWw6IHN0cmluZztcbiAgc3FsTWVzc2FnZTogc3RyaW5nO1xuICBzcWxTdGF0ZTogc3RyaW5nO1xufTtcbmV4cG9ydCBmdW5jdGlvbiBpc0tuZXhFcnJvcihlOiB1bmtub3duKTogZSBpcyBLbmV4RXJyb3Ige1xuICByZXR1cm4gISEoZSBhcyBLbmV4RXJyb3IpPy5jb2RlICYmICEhKGUgYXMgS25leEVycm9yKT8uc3FsTWVzc2FnZSAmJiAhIShlIGFzIEtuZXhFcnJvcik/LnNxbFN0YXRlO1xufVxuXG5leHBvcnQgdHlwZSBLbmV4Q29sdW1uVHlwZSA9XG4gIHwgXCJzdHJpbmdcIlxuICB8IFwidGV4dFwiXG4gIHwgXCJzbWFsbHRleHRcIlxuICB8IFwibWVkaXVtdGV4dFwiXG4gIHwgXCJsb25ndGV4dFwiXG4gIHwgXCJpbnRlZ2VyXCJcbiAgfCBcImJpZ0ludGVnZXJcIlxuICB8IFwiZGVjaW1hbFwiXG4gIHwgXCJ0aW1lc3RhbXBcIlxuICB8IFwiYm9vbGVhblwiXG4gIHwgXCJmb3JlaWduXCJcbiAgfCBcInV1aWRcIlxuICB8IFwianNvblwiXG4gIHwgXCJmbG9hdFwiXG4gIHwgXCJkYXRlXCJcbiAgfCBcInRpbWVcIlxuICB8IFwiZGF0ZXRpbWVcIjtcbmV4cG9ydCB0eXBlIE1pZ3JhdGlvbkNvbHVtblR5cGUgPVxuICB8IFwic3RyaW5nXCJcbiAgfCBcInN0cmluZ1tdXCJcbiAgfCBcImludGVnZXJcIlxuICB8IFwiaW50ZWdlcltdXCJcbiAgfCBcImJpZ0ludGVnZXJcIlxuICB8IFwiYmlnSW50ZWdlcltdXCJcbiAgfCBcIm51bWJlck9yTnVtZXJpY1wiXG4gIHwgXCJudW1iZXJPck51bWVyaWNbXVwiXG4gIHwgXCJib29sZWFuXCJcbiAgfCBcImJvb2xlYW5bXVwiXG4gIHwgXCJkYXRlXCJcbiAgfCBcImRhdGVbXVwiXG4gIHwgXCJ1dWlkXCJcbiAgfCBcInV1aWRbXVwiXG4gIHwgXCJqc29uXCJcbiAgfCBcInZlY3RvclwiXG4gIHwgXCJ2ZWN0b3JbXVwiXG4gIHwgXCJ0c3ZlY3RvclwiO1xuZXhwb3J0IHR5cGUgTWlncmF0aW9uQ29sdW1uID0ge1xuICBuYW1lOiBzdHJpbmc7XG4gIHR5cGU6IE1pZ3JhdGlvbkNvbHVtblR5cGU7XG4gIG51bGxhYmxlOiBib29sZWFuO1xuICBudW1iZXJUeXBlPzogXCJyZWFsXCIgfCBcImRvdWJsZSBwcmVjaXNpb25cIiB8IFwibnVtZXJpY1wiO1xuICBsZW5ndGg/OiBudW1iZXI7XG4gIGRlZmF1bHRUbz86IHN0cmluZztcbiAgcHJlY2lzaW9uPzogbnVtYmVyO1xuICBzY2FsZT86IG51bWJlcjtcbiAgZGltZW5zaW9ucz86IG51bWJlcjtcbiAgZ2VuZXJhdGVkPzogR2VuZXJhdGVkQ29sdW1uO1xufTtcbmV4cG9ydCB0eXBlIE1pZ3JhdGlvbkluZGV4ID0ge1xuICB0eXBlOiBcInVuaXF1ZVwiIHwgXCJpbmRleFwiIHwgXCJobnN3XCIgfCBcIml2ZmZsYXRcIjtcbiAgY29sdW1uczogRW50aXR5SW5kZXhDb2x1bW5bXTtcbiAgbmFtZTogc3RyaW5nO1xuICB1c2luZz86IFwiYnRyZWVcIiB8IFwiaGFzaFwiIHwgXCJnaW5cIiB8IFwiZ2lzdFwiIHwgXCJwZ3Jvb25nYVwiO1xuICBudWxsc05vdERpc3RpbmN0PzogYm9vbGVhbjtcbiAgLyoqIEhOU1cgKEhpZXJhcmNoaWNhbCBOYXZpZ2FibGUgU21hbGwgV29ybGQpOiDqsIEg64W465Oc7J2YIOy1nOuMgCDsl7DqsrAg7IiYICovXG4gIG0/OiBudW1iZXI7XG4gIC8qKiBITlNXIChIaWVyYXJjaGljYWwgTmF2aWdhYmxlIFNtYWxsIFdvcmxkKTog6rWs7ISxIOyLnCDtg5Dsg4kg67KU7JyEICovXG4gIGVmQ29uc3RydWN0aW9uPzogbnVtYmVyO1xuICAvKiogSVZGRmxhdCAoSW52ZXJ0ZWQgRmlsZSB3aXRoIEZsYXQgQ29tcHJlc3Npb24pOiDtgbTrn6zsiqTthLDrp4Eg66as7Iqk7Yq4IOyImCAqL1xuICBsaXN0cz86IG51bWJlcjtcbn07XG5leHBvcnQgdHlwZSBNaWdyYXRpb25Gb3JlaWduID0ge1xuICBjb2x1bW5zOiBzdHJpbmdbXTtcbiAgdG86IHN0cmluZztcbiAgb25VcGRhdGU6IFJlbGF0aW9uT247XG4gIG9uRGVsZXRlOiBSZWxhdGlvbk9uO1xufTtcbmV4cG9ydCB0eXBlIE1pZ3JhdGlvbkpvaW5UYWJsZSA9IHtcbiAgdGFibGU6IHN0cmluZztcbiAgaW5kZXhlczogTWlncmF0aW9uSW5kZXhbXTtcbiAgY29sdW1uczogTWlncmF0aW9uQ29sdW1uW107XG4gIGZvcmVpZ25zOiBNaWdyYXRpb25Gb3JlaWduW107XG59O1xuZXhwb3J0IHR5cGUgTWlncmF0aW9uU2V0ID0ge1xuICB0YWJsZTogc3RyaW5nO1xuICBjb2x1bW5zOiBNaWdyYXRpb25Db2x1bW5bXTtcbiAgaW5kZXhlczogTWlncmF0aW9uSW5kZXhbXTtcbiAgZm9yZWlnbnM6IE1pZ3JhdGlvbkZvcmVpZ25bXTtcbn07XG5leHBvcnQgdHlwZSBNaWdyYXRpb25TZXRBbmRKb2luVGFibGUgPSBNaWdyYXRpb25TZXQgJiB7XG4gIGpvaW5UYWJsZXM6IE1pZ3JhdGlvbkpvaW5UYWJsZVtdO1xufTtcbmV4cG9ydCB0eXBlIEdlbk1pZ3JhdGlvbkNvZGUgPSB7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIHRhYmxlOiBzdHJpbmc7XG4gIHR5cGU6IFwibm9ybWFsXCIgfCBcImZvcmVpZ25cIjtcbiAgZm9ybWF0dGVkOiBzdHJpbmcgfCBudWxsO1xufTtcblxuLyogQXBpICovXG5leHBvcnQgdHlwZSBBcGlQYXJhbSA9IHtcbiAgbmFtZTogc3RyaW5nO1xuICB0eXBlOiBBcGlQYXJhbVR5cGU7XG4gIG9wdGlvbmFsOiBib29sZWFuO1xuICBkZWZhdWx0RGVmPzogc3RyaW5nO1xufTtcbmV4cG9ydCBuYW1lc3BhY2UgQXBpUGFyYW1UeXBlIHtcbiAgZXhwb3J0IHR5cGUgT2JqZWN0ID0ge1xuICAgIHQ6IFwib2JqZWN0XCI7XG4gICAgcHJvcHM6IEFwaVBhcmFtW107XG4gIH07XG4gIGV4cG9ydCB0eXBlIFVuaW9uID0ge1xuICAgIHQ6IFwidW5pb25cIjtcbiAgICB0eXBlczogQXBpUGFyYW1UeXBlW107XG4gIH07XG4gIGV4cG9ydCB0eXBlIEludGVyc2VjdGlvbiA9IHtcbiAgICB0OiBcImludGVyc2VjdGlvblwiO1xuICAgIHR5cGVzOiBBcGlQYXJhbVR5cGVbXTtcbiAgfTtcbiAgZXhwb3J0IHR5cGUgU3RyaW5nTGl0ZXJhbCA9IHtcbiAgICB0OiBcInN0cmluZy1saXRlcmFsXCI7XG4gICAgdmFsdWU6IHN0cmluZztcbiAgfTtcbiAgZXhwb3J0IHR5cGUgTnVtZXJpY0xpdGVyYWwgPSB7XG4gICAgdDogXCJudW1lcmljLWxpdGVyYWxcIjtcbiAgICB2YWx1ZTogbnVtYmVyO1xuICB9O1xuICBleHBvcnQgdHlwZSBBcnJheSA9IHtcbiAgICB0OiBcImFycmF5XCI7XG4gICAgZWxlbWVudHNUeXBlOiBBcGlQYXJhbVR5cGU7XG4gIH07XG4gIGV4cG9ydCB0eXBlIFJlZiA9IHtcbiAgICB0OiBcInJlZlwiO1xuICAgIGlkOiBzdHJpbmc7XG4gICAgYXJncz86IEFwaVBhcmFtVHlwZVtdO1xuICB9O1xuICBleHBvcnQgdHlwZSBJbmRleGVkQWNjZXNzID0ge1xuICAgIHQ6IFwiaW5kZXhlZC1hY2Nlc3NcIjtcbiAgICBvYmplY3Q6IEFwaVBhcmFtVHlwZTtcbiAgICBpbmRleDogQXBpUGFyYW1UeXBlO1xuICB9O1xuICBleHBvcnQgdHlwZSBUdXBsZVR5cGUgPSB7XG4gICAgdDogXCJ0dXBsZS10eXBlXCI7XG4gICAgZWxlbWVudHM6IEFwaVBhcmFtVHlwZVtdO1xuICB9O1xuICBleHBvcnQgdHlwZSBQaWNrID0gUmVmICYge1xuICAgIHQ6IFwicmVmXCI7XG4gICAgaWQ6IFwiUGlja1wiO1xuICB9O1xuICBleHBvcnQgdHlwZSBPbWl0ID0gUmVmICYge1xuICAgIHQ6IFwicmVmXCI7XG4gICAgaWQ6IFwiT21pdFwiO1xuICB9O1xuICBleHBvcnQgdHlwZSBQYXJ0aWFsID0gUmVmICYge1xuICAgIHQ6IFwicmVmXCI7XG4gICAgaWQ6IFwiUGFydGlhbFwiO1xuICB9O1xuICBleHBvcnQgdHlwZSBQcm9taXNlID0gUmVmICYge1xuICAgIHQ6IFwicmVmXCI7XG4gICAgaWQ6IFwiUHJvbWlzZVwiO1xuICB9O1xuICBleHBvcnQgdHlwZSBDb250ZXh0ID0gUmVmICYge1xuICAgIHQ6IFwicmVmXCI7XG4gICAgaWQ6IFwiQ29udGV4dFwiO1xuICB9O1xuICBleHBvcnQgdHlwZSBUeXBlUGFyYW0gPSB7XG4gICAgdDogXCJ0eXBlLXBhcmFtXCI7XG4gICAgaWQ6IHN0cmluZztcbiAgICBjb25zdHJhaW50PzogQXBpUGFyYW1UeXBlO1xuICB9O1xuXG4gIGV4cG9ydCBmdW5jdGlvbiBpc09iamVjdCh2OiB1bmtub3duKTogdiBpcyBBcGlQYXJhbVR5cGUuT2JqZWN0IHtcbiAgICByZXR1cm4gKHYgYXMgQXBpUGFyYW1UeXBlLk9iamVjdCk/LnQgPT09IFwib2JqZWN0XCI7XG4gIH1cbiAgZXhwb3J0IGZ1bmN0aW9uIGlzVW5pb24odjogdW5rbm93bik6IHYgaXMgQXBpUGFyYW1UeXBlLlVuaW9uIHtcbiAgICByZXR1cm4gKHYgYXMgQXBpUGFyYW1UeXBlLlVuaW9uKT8udCA9PT0gXCJ1bmlvblwiO1xuICB9XG4gIGV4cG9ydCBmdW5jdGlvbiBpc0ludGVyc2VjdGlvbih2OiB1bmtub3duKTogdiBpcyBBcGlQYXJhbVR5cGUuSW50ZXJzZWN0aW9uIHtcbiAgICByZXR1cm4gKHYgYXMgQXBpUGFyYW1UeXBlLkludGVyc2VjdGlvbik/LnQgPT09IFwiaW50ZXJzZWN0aW9uXCI7XG4gIH1cbiAgZXhwb3J0IGZ1bmN0aW9uIGlzU3RyaW5nTGl0ZXJhbCh2OiB1bmtub3duKTogdiBpcyBBcGlQYXJhbVR5cGUuU3RyaW5nTGl0ZXJhbCB7XG4gICAgcmV0dXJuICh2IGFzIEFwaVBhcmFtVHlwZS5TdHJpbmdMaXRlcmFsKT8udCA9PT0gXCJzdHJpbmctbGl0ZXJhbFwiO1xuICB9XG4gIGV4cG9ydCBmdW5jdGlvbiBpc051bWVyaWNMaXRlcmFsKHY6IHVua25vd24pOiB2IGlzIEFwaVBhcmFtVHlwZS5OdW1lcmljTGl0ZXJhbCB7XG4gICAgcmV0dXJuICh2IGFzIEFwaVBhcmFtVHlwZS5OdW1lcmljTGl0ZXJhbCk/LnQgPT09IFwibnVtZXJpYy1saXRlcmFsXCI7XG4gIH1cbiAgZXhwb3J0IGZ1bmN0aW9uIGlzQXJyYXkodjogdW5rbm93bik6IHYgaXMgQXBpUGFyYW1UeXBlLkFycmF5IHtcbiAgICByZXR1cm4gKHYgYXMgQXBpUGFyYW1UeXBlLkFycmF5KT8udCA9PT0gXCJhcnJheVwiO1xuICB9XG4gIGV4cG9ydCBmdW5jdGlvbiBpc1JlZih2OiB1bmtub3duKTogdiBpcyBBcGlQYXJhbVR5cGUuUmVmIHtcbiAgICByZXR1cm4gdHlwZW9mIHYgPT09IFwib2JqZWN0XCIgJiYgdiAhPT0gbnVsbCAmJiAodiBhcyB7IHQ/OiB1bmtub3duIH0pLnQgPT09IFwicmVmXCI7XG4gIH1cbiAgZXhwb3J0IGZ1bmN0aW9uIGlzSW5kZXhlZEFjY2Vzcyh2OiB1bmtub3duKTogdiBpcyBBcGlQYXJhbVR5cGUuSW5kZXhlZEFjY2VzcyB7XG4gICAgcmV0dXJuIHR5cGVvZiB2ID09PSBcIm9iamVjdFwiICYmIHYgIT09IG51bGwgJiYgKHYgYXMgeyB0PzogdW5rbm93biB9KS50ID09PSBcImluZGV4ZWQtYWNjZXNzXCI7XG4gIH1cbiAgZXhwb3J0IGZ1bmN0aW9uIGlzVHVwbGVUeXBlKHY6IHVua25vd24pOiB2IGlzIEFwaVBhcmFtVHlwZS5UdXBsZVR5cGUge1xuICAgIHJldHVybiB0eXBlb2YgdiA9PT0gXCJvYmplY3RcIiAmJiB2ICE9PSBudWxsICYmICh2IGFzIHsgdD86IHVua25vd24gfSkudCA9PT0gXCJ0dXBsZS10eXBlXCI7XG4gIH1cbiAgZXhwb3J0IGZ1bmN0aW9uIGlzUGljayh2OiB1bmtub3duKTogdiBpcyBBcGlQYXJhbVR5cGUuUGljayB7XG4gICAgcmV0dXJuIChcbiAgICAgIHR5cGVvZiB2ID09PSBcIm9iamVjdFwiICYmXG4gICAgICB2ICE9PSBudWxsICYmXG4gICAgICAodiBhcyB7IHQ/OiB1bmtub3duIH0pLnQgPT09IFwicmVmXCIgJiZcbiAgICAgICh2IGFzIHsgaWQ/OiB1bmtub3duIH0pLmlkID09PSBcIlBpY2tcIlxuICAgICk7XG4gIH1cbiAgZXhwb3J0IGZ1bmN0aW9uIGlzT21pdCh2OiB1bmtub3duKTogdiBpcyBBcGlQYXJhbVR5cGUuT21pdCB7XG4gICAgcmV0dXJuIChcbiAgICAgIHR5cGVvZiB2ID09PSBcIm9iamVjdFwiICYmXG4gICAgICB2ICE9PSBudWxsICYmXG4gICAgICAodiBhcyB7IHQ/OiB1bmtub3duIH0pLnQgPT09IFwicmVmXCIgJiZcbiAgICAgICh2IGFzIHsgaWQ/OiB1bmtub3duIH0pLmlkID09PSBcIk9taXRcIlxuICAgICk7XG4gIH1cbiAgZXhwb3J0IGZ1bmN0aW9uIGlzUGFydGlhbCh2OiB1bmtub3duKTogdiBpcyBBcGlQYXJhbVR5cGUuUGFydGlhbCB7XG4gICAgcmV0dXJuIChcbiAgICAgIHR5cGVvZiB2ID09PSBcIm9iamVjdFwiICYmXG4gICAgICB2ICE9PSBudWxsICYmXG4gICAgICAodiBhcyB7IHQ/OiB1bmtub3duIH0pLnQgPT09IFwicmVmXCIgJiZcbiAgICAgICh2IGFzIHsgaWQ/OiB1bmtub3duIH0pLmlkID09PSBcIlBhcnRpYWxcIlxuICAgICk7XG4gIH1cbiAgZXhwb3J0IGZ1bmN0aW9uIGlzUHJvbWlzZSh2OiB1bmtub3duKTogdiBpcyBBcGlQYXJhbVR5cGUuUHJvbWlzZSB7XG4gICAgcmV0dXJuIChcbiAgICAgIHR5cGVvZiB2ID09PSBcIm9iamVjdFwiICYmXG4gICAgICB2ICE9PSBudWxsICYmXG4gICAgICAodiBhcyB7IHQ/OiB1bmtub3duIH0pLnQgPT09IFwicmVmXCIgJiZcbiAgICAgICh2IGFzIHsgaWQ/OiB1bmtub3duIH0pLmlkID09PSBcIlByb21pc2VcIlxuICAgICk7XG4gIH1cbiAgZXhwb3J0IGZ1bmN0aW9uIGlzQ29udGV4dCh2OiB1bmtub3duKTogdiBpcyBBcGlQYXJhbVR5cGUuQ29udGV4dCB7XG4gICAgcmV0dXJuIChcbiAgICAgIHR5cGVvZiB2ID09PSBcIm9iamVjdFwiICYmXG4gICAgICB2ICE9PSBudWxsICYmXG4gICAgICAodiBhcyB7IHQ/OiB1bmtub3duIH0pLnQgPT09IFwicmVmXCIgJiZcbiAgICAgICh2IGFzIHsgaWQ/OiB1bmtub3duIH0pLmlkID09PSBcIkNvbnRleHRcIlxuICAgICk7XG4gIH1cbiAgZXhwb3J0IGZ1bmN0aW9uIGlzUmVmS25leCh2OiB1bmtub3duKTogdiBpcyBBcGlQYXJhbVR5cGUuUmVmIHtcbiAgICByZXR1cm4gKFxuICAgICAgdHlwZW9mIHYgPT09IFwib2JqZWN0XCIgJiZcbiAgICAgIHYgIT09IG51bGwgJiZcbiAgICAgICh2IGFzIHsgdD86IHVua25vd24gfSkudCA9PT0gXCJyZWZcIiAmJlxuICAgICAgKHYgYXMgeyBpZD86IHVua25vd24gfSkuaWQgPT09IFwiS25leFwiXG4gICAgKTtcbiAgfVxuICBleHBvcnQgZnVuY3Rpb24gaXNUeXBlUGFyYW0odjogdW5rbm93bik6IHYgaXMgQXBpUGFyYW1UeXBlLlR5cGVQYXJhbSB7XG4gICAgcmV0dXJuIHR5cGVvZiB2ID09PSBcIm9iamVjdFwiICYmIHYgIT09IG51bGwgJiYgKHYgYXMgeyB0PzogdW5rbm93biB9KS50ID09PSBcInR5cGUtcGFyYW1cIjtcbiAgfVxufVxuZXhwb3J0IHR5cGUgQXBpUGFyYW1UeXBlID1cbiAgfCBcInN0cmluZ1wiXG4gIHwgXCJudW1iZXJcIlxuICB8IFwiYm9vbGVhblwiXG4gIHwgXCJudWxsXCJcbiAgfCBcInVuZGVmaW5lZFwiXG4gIHwgXCJ2b2lkXCJcbiAgfCBcImFueVwiXG4gIHwgXCJ1bmtub3duXCJcbiAgfCBcInRydWVcIlxuICB8IFwiZmFsc2VcIlxuICB8IEFwaVBhcmFtVHlwZS5TdHJpbmdMaXRlcmFsXG4gIHwgQXBpUGFyYW1UeXBlLk51bWVyaWNMaXRlcmFsXG4gIHwgQXBpUGFyYW1UeXBlLk9iamVjdFxuICB8IEFwaVBhcmFtVHlwZS5VbmlvblxuICB8IEFwaVBhcmFtVHlwZS5JbnRlcnNlY3Rpb25cbiAgfCBBcGlQYXJhbVR5cGUuQXJyYXlcbiAgfCBBcGlQYXJhbVR5cGUuUmVmXG4gIHwgQXBpUGFyYW1UeXBlLkluZGV4ZWRBY2Nlc3NcbiAgfCBBcGlQYXJhbVR5cGUuVHlwZVBhcmFtXG4gIHwgQXBpUGFyYW1UeXBlLlR1cGxlVHlwZTtcblxuLyogVGVtcGxhdGUgKi9cbi8qKlxuICogVUkg7Lu07Y+s64SM7Yq4IOugjOuNlOungeydhCDsnITtlZwg66mU7YOA642w7J207YSwIOuFuOuTnOyeheuLiOuLpC5cbiAqXG4gKiAqKuuqqeyggSoqOiBab2Qg7Iqk7YKk66eI66Gc67aA7YSwIO2UhOuhoO2KuOyXlOuTnCBVSSDsu7Ttj6zrhIztirjrpbwg7J6Q64+ZIOyDneyEse2VmOq4sCDsnITtlZxcbiAqIOugjOuNlOungSDsoJXrs7Trpbwg64u07J2AIO2KuOumrCDqtazsobDsnoXri4jri6QuIOqwgSDtlYTrk5zqsIAg7Ja065akIFVJIOy7tO2PrOuEjO2KuOuhnFxuICog7ZGc7ZiE65CY7Ja07JW8IO2VmOuKlOyngCjthY3siqTtirgsIOydtOuvuOyngCwg64Kg7KecLCBFbnVtIOyEoO2DnSDrk7Ep66W8IOuqheyLnO2VqeuLiOuLpC5cbiAqXG4gKiAqKuuzgO2ZmCDtnZDrpoQqKjpcbiAqIEVudGl0eSBzdWJzZXQg4oaSIEVudGl0eVByb3BOb2RlIOKGkiBab2Qg7Iqk7YKk66eIIOKGkiBSZW5kZXJpbmdOb2RlIChVSeyaqSkg4oaSIFJlYWN0IOy7tO2PrOuEjO2KuCDsvZTrk5wg7IOd7ISxXG4gKlxuICogKirso7zsmpQg7ZWE65OcKio6XG4gKiAtIGByZW5kZXJUeXBlYDogVUkg7Lu07Y+s64SM7Yq4IOycoO2YlSAoc3RyaW5nLXBsYWluLCBudW1iZXItZmtfaWQsIGVudW1zLCBhcnJheSDrk7EpXG4gKiAtIGB6b2RUeXBlYDog7JuQ67O4IFpvZCDsiqTtgqTrp4ggKHZhbGlkYXRpb24g7JqpKVxuICogLSBgY2hpbGRyZW5gOiDspJHssqnrkJwg6rCd7LK0IO2VhOuTnOuTpCAob2JqZWN07J28IOuVjClcbiAqIC0gYGVsZW1lbnRgOiDrsLDsl7Qg7JqU7IaMIO2DgOyehSAoYXJyYXnsnbwg65WMKVxuICpcbiAqICoq7IKs7JqpIOychOy5mCoqOlxuICogLSB6b2QtY29udmVydGVyLnRz7J2YIHpvZFR5cGVUb1JlbmRlcmluZ05vZGUoKeyXkOyEnCDsg53shLFcbiAqIC0gdmlld19mb3JtLnRlbXBsYXRlLnRzLCB2aWV3X2xpc3QudGVtcGxhdGUudHMg65Ox7JeQ7IScIFJlYWN0IOy7tO2PrOuEjO2KuCDsvZTrk5wg7IOd7ISx7JeQIOyCrOyaqVxuICovXG4vLyDshYDtlIQg7LC47KGwIO2DgOyeheydtOuvgOuhnCBab2Qg7IOd65617ZWY6rOgIOyngeygkSDsoJXsnZhcbmV4cG9ydCBjb25zdCBSZW5kZXJpbmdOb2RlID0gei5hbnkoKTtcbmV4cG9ydCB0eXBlIFJlbmRlcmluZ05vZGUgPSB7XG4gIG5hbWU6IHN0cmluZztcbiAgbGFiZWw6IHN0cmluZztcbiAgcmVuZGVyVHlwZTpcbiAgICB8IFwic3RyaW5nLXBsYWluXCJcbiAgICB8IFwic3RyaW5nLWltYWdlXCJcbiAgICB8IFwic3RyaW5nLWRhdGV0aW1lXCJcbiAgICB8IFwic3RyaW5nLWRhdGVcIlxuICAgIHwgXCJkYXRldGltZVwiXG4gICAgfCBcIm51bWJlci1wbGFpblwiXG4gICAgfCBcIm51bWJlci1pZFwiXG4gICAgfCBcIm51bWJlci1ma19pZFwiXG4gICAgfCBcImJvb2xlYW5cIlxuICAgIHwgXCJlbnVtc1wiXG4gICAgfCBcImFycmF5XCJcbiAgICB8IFwiYXJyYXktaW1hZ2VzXCJcbiAgICB8IFwib2JqZWN0XCJcbiAgICB8IFwib2JqZWN0LXBpY2tcIlxuICAgIHwgXCJyZWNvcmRcIlxuICAgIHwgXCJ2ZWN0b3JcIjtcbiAgem9kVHlwZTogei5ab2RUeXBlQW55O1xuICBlbGVtZW50PzogUmVuZGVyaW5nTm9kZTtcbiAgY2hpbGRyZW4/OiBSZW5kZXJpbmdOb2RlW107XG4gIGNvbmZpZz86IHtcbiAgICBwaWNrZWQ6IHN0cmluZztcbiAgfTtcbiAgb3B0aW9uYWw/OiBib29sZWFuO1xuICBudWxsYWJsZT86IGJvb2xlYW47XG59O1xuXG5jb25zdCBHZW5lcmF0ZWRDb2x1bW5TY2hlbWEgPSB6Lm9iamVjdCh7XG4gIHR5cGU6IHouZW51bShbXCJTVE9SRURcIiwgXCJWSVJUVUFMXCJdKSxcbiAgZXhwcmVzc2lvbjogei5zdHJpbmcoKSxcbn0pO1xuXG5jb25zdCBCYXNlUHJvcEZpZWxkcyA9IHtcbiAgbmFtZTogei5zdHJpbmcoKSxcbiAgZGVzYzogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBudWxsYWJsZTogei5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgdG9GaWx0ZXI6IHouYm9vbGVhbigpLmRlZmF1bHQoZmFsc2UpLm9wdGlvbmFsKCksXG4gIGRiRGVmYXVsdDogei51bmlvbihbei5zdHJpbmcoKSwgei5udW1iZXIoKSwgei5ib29sZWFuKCldKS5vcHRpb25hbCgpLFxuICBnZW5lcmF0ZWQ6IEdlbmVyYXRlZENvbHVtblNjaGVtYS5vcHRpb25hbCgpLFxufTtcblxuLy8g67aA6rCAIO2VhOuTnOqwgCDtlYTsmpTsl4bripQgcHJvcFxuY29uc3QgQmFzZVByb3BGaWVsZHNXaXRob3V0QWRkaXRpb25hbCA9IHpcbiAgLm9iamVjdCh7XG4gICAgLi4uQmFzZVByb3BGaWVsZHMsXG4gICAgdHlwZTogei51bmlvbihbXG4gICAgICB6LmxpdGVyYWwoXCJpbnRlZ2VyXCIpLFxuICAgICAgei5saXRlcmFsKFwiaW50ZWdlcltdXCIpLFxuICAgICAgei5saXRlcmFsKFwiYmlnSW50ZWdlclwiKSxcbiAgICAgIHoubGl0ZXJhbChcImJpZ0ludGVnZXJbXVwiKSxcbiAgICAgIHoubGl0ZXJhbChcImJvb2xlYW5cIiksXG4gICAgICB6LmxpdGVyYWwoXCJib29sZWFuW11cIiksXG4gICAgICB6LmxpdGVyYWwoXCJkYXRlXCIpLFxuICAgICAgei5saXRlcmFsKFwiZGF0ZVtdXCIpLFxuICAgICAgei5saXRlcmFsKFwidXVpZFwiKSxcbiAgICAgIHoubGl0ZXJhbChcInV1aWRbXVwiKSxcbiAgICAgIHoubGl0ZXJhbChcInRzdmVjdG9yXCIpLFxuICAgIF0pLFxuICB9KVxuICAuc3RyaWN0KCk7XG5cbi8vIHByZWNpc2lvbi9zY2FsZSDtlYTrk5xcbmNvbnN0IFByZWNpc2lvblNjYWxlRmllbGRzID0ge1xuICBwcmVjaXNpb246IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgc2NhbGU6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbn07XG5cbi8vIOqwgSDtg4DsnoXrs4Qg7Iqk7YKk66eIIOygleydmFxuXG5jb25zdCBTdHJpbmdQcm9wU2NoZW1hID0gelxuICAub2JqZWN0KHtcbiAgICAuLi5CYXNlUHJvcEZpZWxkcyxcbiAgICB0eXBlOiB6LmxpdGVyYWwoXCJzdHJpbmdcIiksXG4gICAgbGVuZ3RoOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gIH0pXG4gIC5zdHJpY3QoKTtcbmNvbnN0IFN0cmluZ0FycmF5UHJvcFNjaGVtYSA9IHpcbiAgLm9iamVjdCh7XG4gICAgLi4uQmFzZVByb3BGaWVsZHMsXG4gICAgdHlwZTogei5saXRlcmFsKFwic3RyaW5nW11cIiksXG4gICAgbGVuZ3RoOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gIH0pXG4gIC5zdHJpY3QoKTtcblxuY29uc3QgRW51bVByb3BTY2hlbWEgPSB6XG4gIC5vYmplY3Qoe1xuICAgIC4uLkJhc2VQcm9wRmllbGRzLFxuICAgIHR5cGU6IHoubGl0ZXJhbChcImVudW1cIiksXG4gICAgaWQ6IHouc3RyaW5nKCksXG4gICAgbGVuZ3RoOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gIH0pXG4gIC5zdHJpY3QoKTtcbmNvbnN0IEVudW1BcnJheVByb3BTY2hlbWEgPSB6XG4gIC5vYmplY3Qoe1xuICAgIC4uLkJhc2VQcm9wRmllbGRzLFxuICAgIHR5cGU6IHoubGl0ZXJhbChcImVudW1bXVwiKSxcbiAgICBpZDogei5zdHJpbmcoKSxcbiAgfSlcbiAgLnN0cmljdCgpO1xuXG5jb25zdCBOdW1iZXJQcm9wU2NoZW1hID0gelxuICAub2JqZWN0KHtcbiAgICAuLi5CYXNlUHJvcEZpZWxkcyxcbiAgICB0eXBlOiB6LmxpdGVyYWwoXCJudW1iZXJcIiksXG4gICAgLi4uUHJlY2lzaW9uU2NhbGVGaWVsZHMsXG4gICAgbnVtYmVyVHlwZTogei5lbnVtKFtcInJlYWxcIiwgXCJkb3VibGUgcHJlY2lzaW9uXCIsIFwibnVtZXJpY1wiXSkub3B0aW9uYWwoKSxcbiAgfSlcbiAgLnN0cmljdCgpO1xuY29uc3QgTnVtYmVyQXJyYXlQcm9wU2NoZW1hID0gelxuICAub2JqZWN0KHtcbiAgICAuLi5CYXNlUHJvcEZpZWxkcyxcbiAgICB0eXBlOiB6LmxpdGVyYWwoXCJudW1iZXJbXVwiKSxcbiAgICAuLi5QcmVjaXNpb25TY2FsZUZpZWxkcyxcbiAgICBudW1iZXJUeXBlOiB6LmVudW0oW1wicmVhbFwiLCBcImRvdWJsZSBwcmVjaXNpb25cIiwgXCJudW1lcmljXCJdKS5vcHRpb25hbCgpLFxuICB9KVxuICAuc3RyaWN0KCk7XG5cbmNvbnN0IE51bWVyaWNQcm9wU2NoZW1hID0gelxuICAub2JqZWN0KHtcbiAgICAuLi5CYXNlUHJvcEZpZWxkcyxcbiAgICB0eXBlOiB6LmxpdGVyYWwoXCJudW1lcmljXCIpLFxuICAgIC4uLlByZWNpc2lvblNjYWxlRmllbGRzLFxuICB9KVxuICAuc3RyaWN0KCk7XG5jb25zdCBOdW1lcmljQXJyYXlQcm9wU2NoZW1hID0gelxuICAub2JqZWN0KHtcbiAgICAuLi5CYXNlUHJvcEZpZWxkcyxcbiAgICB0eXBlOiB6LmxpdGVyYWwoXCJudW1lcmljW11cIiksXG4gICAgLi4uUHJlY2lzaW9uU2NhbGVGaWVsZHMsXG4gIH0pXG4gIC5zdHJpY3QoKTtcblxuY29uc3QgSnNvblByb3BTY2hlbWEgPSB6XG4gIC5vYmplY3Qoe1xuICAgIC4uLkJhc2VQcm9wRmllbGRzLFxuICAgIHR5cGU6IHoubGl0ZXJhbChcImpzb25cIiksXG4gICAgaWQ6IHouc3RyaW5nKCksXG4gIH0pXG4gIC5zdHJpY3QoKTtcblxuY29uc3QgVmlydHVhbFByb3BTY2hlbWEgPSB6XG4gIC5vYmplY3Qoe1xuICAgIC4uLkJhc2VQcm9wRmllbGRzLFxuICAgIHR5cGU6IHoubGl0ZXJhbChcInZpcnR1YWxcIiksXG4gICAgaWQ6IHouc3RyaW5nKCksXG4gICAgdmlydHVhbFR5cGU6IHouZW51bShbXCJxdWVyeVwiLCBcImNvZGVcIl0pLm9wdGlvbmFsKCksXG4gIH0pXG4gIC5zdHJpY3QoKTtcblxuY29uc3QgVmVjdG9yUHJvcFNjaGVtYSA9IHpcbiAgLm9iamVjdCh7XG4gICAgLi4uQmFzZVByb3BGaWVsZHMsXG4gICAgdHlwZTogei5saXRlcmFsKFwidmVjdG9yXCIpLFxuICAgIGRpbWVuc2lvbnM6IHoubnVtYmVyKCksXG4gIH0pXG4gIC5zdHJpY3QoKTtcbmNvbnN0IFZlY3RvckFycmF5UHJvcFNjaGVtYSA9IHpcbiAgLm9iamVjdCh7XG4gICAgLi4uQmFzZVByb3BGaWVsZHMsXG4gICAgdHlwZTogei5saXRlcmFsKFwidmVjdG9yW11cIiksXG4gICAgZGltZW5zaW9uczogei5udW1iZXIoKSxcbiAgfSlcbiAgLnN0cmljdCgpO1xuXG4vLyBSZWxhdGlvbiDtg4DsnoXsnYAgcmVsYXRpb25UeXBl7JeQIOuUsOudvCDshLjrtoTtmZRcbmNvbnN0IEJhc2VSZWxhdGlvbkZpZWxkcyA9IHtcbiAgLi4uQmFzZVByb3BGaWVsZHMsXG4gIHR5cGU6IHoubGl0ZXJhbChcInJlbGF0aW9uXCIpLFxuICB3aXRoOiB6LnN0cmluZygpLFxufTtcblxuLy8gUmVsYXRpb25PbiDtg4DsnoVcbmNvbnN0IFJlbGF0aW9uT25TY2hlbWEgPSB6LmVudW0oW1wiQ0FTQ0FERVwiLCBcIlNFVCBOVUxMXCIsIFwiTk8gQUNUSU9OXCIsIFwiU0VUIERFRkFVTFRcIiwgXCJSRVNUUklDVFwiXSk7XG5cbmNvbnN0IEJlbG9uZ3NUb09uZVJlbGF0aW9uUHJvcFNjaGVtYSA9IHpcbiAgLm9iamVjdCh7XG4gICAgLi4uQmFzZVJlbGF0aW9uRmllbGRzLFxuICAgIHJlbGF0aW9uVHlwZTogei5saXRlcmFsKFwiQmVsb25nc1RvT25lXCIpLFxuICAgIGN1c3RvbUpvaW5DbGF1c2U6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICB1c2VDb25zdHJhaW50OiB6LmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICAgIG9uVXBkYXRlOiBSZWxhdGlvbk9uU2NoZW1hLm9wdGlvbmFsKCksXG4gICAgb25EZWxldGU6IFJlbGF0aW9uT25TY2hlbWEub3B0aW9uYWwoKSxcbiAgfSlcbiAgLnN0cmljdCgpO1xuXG5jb25zdCBIYXNNYW55UmVsYXRpb25Qcm9wU2NoZW1hID0gelxuICAub2JqZWN0KHtcbiAgICAuLi5CYXNlUmVsYXRpb25GaWVsZHMsXG4gICAgcmVsYXRpb25UeXBlOiB6LmxpdGVyYWwoXCJIYXNNYW55XCIpLFxuICAgIGpvaW5Db2x1bW46IHouc3RyaW5nKCksXG4gICAgZnJvbUNvbHVtbjogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB9KVxuICAuc3RyaWN0KCk7XG5cbmNvbnN0IE1hbnlUb01hbnlSZWxhdGlvblByb3BTY2hlbWEgPSB6XG4gIC5vYmplY3Qoe1xuICAgIC4uLkJhc2VSZWxhdGlvbkZpZWxkcyxcbiAgICByZWxhdGlvblR5cGU6IHoubGl0ZXJhbChcIk1hbnlUb01hbnlcIiksXG4gICAgam9pblRhYmxlOiB6LnN0cmluZygpLFxuICAgIG9uVXBkYXRlOiBSZWxhdGlvbk9uU2NoZW1hLFxuICAgIG9uRGVsZXRlOiBSZWxhdGlvbk9uU2NoZW1hLFxuICB9KVxuICAuc3RyaWN0KCk7XG5cbmNvbnN0IE9uZVRvT25lUmVsYXRpb25Qcm9wU2NoZW1hID0gelxuICAub2JqZWN0KHtcbiAgICAuLi5CYXNlUmVsYXRpb25GaWVsZHMsXG4gICAgcmVsYXRpb25UeXBlOiB6LmxpdGVyYWwoXCJPbmVUb09uZVwiKSxcbiAgICBjdXN0b21Kb2luQ2xhdXNlOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgaGFzSm9pbkNvbHVtbjogei5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgICB1c2VDb25zdHJhaW50OiB6LmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICAgIG9uVXBkYXRlOiBSZWxhdGlvbk9uU2NoZW1hLm9wdGlvbmFsKCksXG4gICAgb25EZWxldGU6IFJlbGF0aW9uT25TY2hlbWEub3B0aW9uYWwoKSxcbiAgfSlcbiAgLnN0cmljdCgpO1xuXG5jb25zdCBSZWxhdGlvblR5cGVzID0gW1wiQmVsb25nc1RvT25lXCIsIFwiSGFzTWFueVwiLCBcIk1hbnlUb01hbnlcIiwgXCJPbmVUb09uZVwiXSBhcyBjb25zdDtcbmV4cG9ydCBjb25zdCBSZWxhdGlvblByb3BTY2hlbWEgPSB6LmRpc2NyaW1pbmF0ZWRVbmlvbihcbiAgXCJyZWxhdGlvblR5cGVcIixcbiAgW1xuICAgIEJlbG9uZ3NUb09uZVJlbGF0aW9uUHJvcFNjaGVtYSxcbiAgICBIYXNNYW55UmVsYXRpb25Qcm9wU2NoZW1hLFxuICAgIE1hbnlUb01hbnlSZWxhdGlvblByb3BTY2hlbWEsXG4gICAgT25lVG9PbmVSZWxhdGlvblByb3BTY2hlbWEsXG4gIF0sXG4gIHtcbiAgICBlcnJvcjogKGlzcykgPT5cbiAgICAgIGByZWxhdGlvblR5cGXsnYAgJHtSZWxhdGlvblR5cGVzLm1hcCgodCkgPT4gYCcke3R9J2ApLmpvaW4oXCIsIFwiKX0g7KSRIO2VmOuCmOyXrOyVvCDtlanri4jri6QuIOyeheugpeqwkjogXCIkeyhpc3MuaW5wdXQgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pPy5yZWxhdGlvblR5cGV9XCJgLFxuICB9LFxuKTtcblxuY29uc3QgTm9ybWFsUHJvcFR5cGVzID0gW1xuICBcImludGVnZXJcIixcbiAgXCJpbnRlZ2VyW11cIixcbiAgXCJiaWdJbnRlZ2VyXCIsXG4gIFwiYmlnSW50ZWdlcltdXCIsXG4gIFwic3RyaW5nXCIsXG4gIFwic3RyaW5nW11cIixcbiAgXCJlbnVtXCIsXG4gIFwiZW51bVtdXCIsXG4gIFwibnVtYmVyXCIsXG4gIFwibnVtYmVyW11cIixcbiAgXCJudW1lcmljXCIsXG4gIFwibnVtZXJpY1tdXCIsXG4gIFwiYm9vbGVhblwiLFxuICBcImJvb2xlYW5bXVwiLFxuICBcImRhdGVcIixcbiAgXCJkYXRlW11cIixcbiAgXCJ1dWlkXCIsXG4gIFwidXVpZFtdXCIsXG4gIFwianNvblwiLFxuICBcInZpcnR1YWxcIixcbiAgXCJ2ZWN0b3JcIixcbiAgXCJ2ZWN0b3JbXVwiLFxuICBcInRzdmVjdG9yXCIsXG5dIGFzIGNvbnN0O1xuXG4vLyBWSVJUVUFMIEdlbmVyYXRlZCBDb2x1bW7sl5DshJwg7IKs7JqpIOu2iOqwgOuKpe2VnCDtg4DsnoXrk6RcbmNvbnN0IFZpcnR1YWxHZW5lcmF0ZWREaXNhbGxvd2VkVHlwZXMgPSBbXG4gIFwianNvblwiLFxuICBcInZlY3RvclwiLFxuICBcInZlY3RvcltdXCIsXG4gIFwic3RyaW5nW11cIixcbiAgXCJpbnRlZ2VyW11cIixcbiAgXCJiaWdJbnRlZ2VyW11cIixcbiAgXCJib29sZWFuW11cIixcbiAgXCJkYXRlW11cIixcbiAgXCJ1dWlkW11cIixcbiAgXCJudW1iZXJbXVwiLFxuICBcIm51bWVyaWNbXVwiLFxuICBcImVudW1bXVwiLFxuXSBhcyBjb25zdDtcblxuZXhwb3J0IGNvbnN0IE5vcm1hbFByb3BTY2hlbWEgPSB6XG4gIC5kaXNjcmltaW5hdGVkVW5pb24oXG4gICAgXCJ0eXBlXCIsXG4gICAgW1xuICAgICAgQmFzZVByb3BGaWVsZHNXaXRob3V0QWRkaXRpb25hbCxcbiAgICAgIFN0cmluZ1Byb3BTY2hlbWEsXG4gICAgICBTdHJpbmdBcnJheVByb3BTY2hlbWEsXG4gICAgICBFbnVtUHJvcFNjaGVtYSxcbiAgICAgIEVudW1BcnJheVByb3BTY2hlbWEsXG4gICAgICBOdW1iZXJQcm9wU2NoZW1hLFxuICAgICAgTnVtYmVyQXJyYXlQcm9wU2NoZW1hLFxuICAgICAgTnVtZXJpY1Byb3BTY2hlbWEsXG4gICAgICBOdW1lcmljQXJyYXlQcm9wU2NoZW1hLFxuICAgICAgSnNvblByb3BTY2hlbWEsXG4gICAgICBWaXJ0dWFsUHJvcFNjaGVtYSxcbiAgICAgIFZlY3RvclByb3BTY2hlbWEsXG4gICAgICBWZWN0b3JBcnJheVByb3BTY2hlbWEsXG4gICAgXSxcbiAgICB7XG4gICAgICBlcnJvcjogKGlzcykgPT5cbiAgICAgICAgYHR5cGXsnYAgJHtOb3JtYWxQcm9wVHlwZXMubWFwKCh0KSA9PiBgJyR7dH0nYCkuam9pbihcIiwgXCIpfSDspJEg7ZWY64KY7Jes7JW8IO2VqeuLiOuLpC4g7J6F66Cl6rCSOiBcIiR7KGlzcy5pbnB1dCBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik/LnR5cGV9XCJgLFxuICAgIH0sXG4gIClcbiAgLnN1cGVyUmVmaW5lKChkYXRhLCBjdHgpID0+IHtcbiAgICBpZiAoIWRhdGEuZ2VuZXJhdGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gZGJEZWZhdWx07JmAIGdlbmVyYXRlZCDrj5nsi5wg7IKs7JqpIOu2iOqwgFxuICAgIGlmIChkYXRhLmRiRGVmYXVsdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjdHguYWRkSXNzdWUoe1xuICAgICAgICBjb2RlOiBcImN1c3RvbVwiLFxuICAgICAgICBtZXNzYWdlOiBcImRiRGVmYXVsdOyZgCBnZW5lcmF0ZWTripQg7ZWo6ruYIOyCrOyaqe2VoCDsiJgg7JeG7Iq164uI64ukXCIsXG4gICAgICAgIHBhdGg6IFtcImdlbmVyYXRlZFwiXSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIHZpcnR1YWwg7YOA7J6F7J2AIGdlbmVyYXRlZCDrtojqsIBcbiAgICBpZiAoZGF0YS50eXBlID09PSBcInZpcnR1YWxcIikge1xuICAgICAgY3R4LmFkZElzc3VlKHtcbiAgICAgICAgY29kZTogXCJjdXN0b21cIixcbiAgICAgICAgbWVzc2FnZTogXCJ2aXJ0dWFsIO2DgOyeheydgCBnZW5lcmF0ZWQgY29sdW1u7J2EIOyngOybkO2VmOyngCDslYrsirXri4jri6RcIixcbiAgICAgICAgcGF0aDogW1wiZ2VuZXJhdGVkXCJdLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gVklSVFVBTCBHZW5lcmF0ZWQgQ29sdW1uIO2DgOyehSDsoJztlZwg6rKA7KadXG4gICAgaWYgKGRhdGEuZ2VuZXJhdGVkLnR5cGUgPT09IFwiVklSVFVBTFwiKSB7XG4gICAgICBpZiAoKFZpcnR1YWxHZW5lcmF0ZWREaXNhbGxvd2VkVHlwZXMgYXMgcmVhZG9ubHkgc3RyaW5nW10pLmluY2x1ZGVzKGRhdGEudHlwZSkpIHtcbiAgICAgICAgY3R4LmFkZElzc3VlKHtcbiAgICAgICAgICBjb2RlOiBcImN1c3RvbVwiLFxuICAgICAgICAgIG1lc3NhZ2U6IGBWSVJUVUFMIGdlbmVyYXRlZCBjb2x1bW7snYAgJHtkYXRhLnR5cGV9IO2DgOyeheydhCDsp4Dsm5DtlZjsp4Ag7JWK7Iq164uI64ukLiBTVE9SRUTrpbwg7IKs7Jqp7ZWY7IS47JqULmAsXG4gICAgICAgICAgcGF0aDogW1wiZ2VuZXJhdGVkXCIsIFwidHlwZVwiXSxcbiAgICAgICAgICBmYXRhbDogdHJ1ZSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9KTtcblxuY29uc3QgQWxsUHJvcFR5cGVzID0gWy4uLk5vcm1hbFByb3BUeXBlcywgXCJyZWxhdGlvblwiXSBhcyBjb25zdDtcbmNvbnN0IEVudGl0eVByb3BTY2hlbWEgPSB6LmRpc2NyaW1pbmF0ZWRVbmlvbihcInR5cGVcIiwgW05vcm1hbFByb3BTY2hlbWEsIFJlbGF0aW9uUHJvcFNjaGVtYV0sIHtcbiAgZXJyb3I6IChpc3MpID0+XG4gICAgYHR5cGXsnYAgJHtBbGxQcm9wVHlwZXMubWFwKCh0KSA9PiBgJyR7dH0nYCkuam9pbihcIiwgXCIpfSDspJEg7ZWY64KY7Jes7JW8IO2VqeuLiOuLpC4g7J6F66Cl6rCSOiBcIiR7KGlzcy5pbnB1dCBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik/LnR5cGV9XCJgLFxufSk7XG5cbmNvbnN0IEVudGl0eUluZGV4Q29sdW1uU2NoZW1hID0gei5vYmplY3Qoe1xuICBuYW1lOiB6LnN0cmluZygpLFxuICBudWxsc0ZpcnN0OiB6LmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICBzb3J0T3JkZXI6IHouZW51bShbXCJBU0NcIiwgXCJERVNDXCJdKS5vcHRpb25hbCgpLFxuICB2ZWN0b3JPcHM6IHouZW51bShbXCJ2ZWN0b3JfY29zaW5lX29wc1wiLCBcInZlY3Rvcl9pcF9vcHNcIiwgXCJ2ZWN0b3JfbDJfb3BzXCJdKS5vcHRpb25hbCgpLFxufSk7XG5cbi8vIEVudGl0eUluZGV4IOyKpO2CpOuniCDsoJXsnZhcbmNvbnN0IEVudGl0eUluZGV4U2NoZW1hID0gelxuICAub2JqZWN0KHtcbiAgICB0eXBlOiB6LmVudW0oW1wiaW5kZXhcIiwgXCJ1bmlxdWVcIiwgXCJobnN3XCIsIFwiaXZmZmxhdFwiXSksXG4gICAgY29sdW1uczogei5hcnJheShFbnRpdHlJbmRleENvbHVtblNjaGVtYSksXG4gICAgbmFtZTogei5zdHJpbmcoKS5taW4oMSkubWF4KDYzKSxcbiAgICB1c2luZzogei5lbnVtKFtcImJ0cmVlXCIsIFwiaGFzaFwiLCBcImdpblwiLCBcImdpc3RcIiwgXCJwZ3Jvb25nYVwiXSkub3B0aW9uYWwoKSxcbiAgICBudWxsc05vdERpc3RpbmN0OiB6LmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICAgIG06IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgICBlZkNvbnN0cnVjdGlvbjogei5udW1iZXIoKS5vcHRpb25hbCgpLFxuICAgIGxpc3RzOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gIH0pXG4gIC5zdHJpY3QoKTtcblxuZXhwb3J0IGNvbnN0IEVudGl0eUpzb25TY2hlbWEgPSB6XG4gIC5vYmplY3Qoe1xuICAgIGlkOiB6LnN0cmluZygpLmRlc2NyaWJlKFwiUGFzY2FsQ2FzZeuhnCDrkJwgRW50aXR5IElEXCIpLFxuICAgIHRpdGxlOiB6LnN0cmluZygpLmRlc2NyaWJlKFwiRW50aXR5IOydtOumhFwiKSxcbiAgICB0YWJsZTogei5zdHJpbmcoKS5kZXNjcmliZShcInNuYWtlX2Nhc2XroZwg65CcIO2FjOydtOu4lOuqhVwiKSxcbiAgICBwYXJlbnRJZDogei5zdHJpbmcoKS5vcHRpb25hbCgpLmRlc2NyaWJlKFwi67aA66qoIEVudGl0eSBJRFwiKSxcbiAgICBwcm9wczogei5hcnJheShFbnRpdHlQcm9wU2NoZW1hKSxcbiAgICBpbmRleGVzOiB6LmFycmF5KEVudGl0eUluZGV4U2NoZW1hKSxcbiAgICBzdWJzZXRzOiB6LnJlY29yZChcbiAgICAgIHouc3RyaW5nKCksXG4gICAgICB6LmFycmF5KFxuICAgICAgICB6LnVuaW9uKFt6LnN0cmluZygpLCB6Lm9iamVjdCh7IGZpZWxkOiB6LnN0cmluZygpLCBpbnRlcm5hbDogei5ib29sZWFuKCkub3B0aW9uYWwoKSB9KV0pLFxuICAgICAgKSxcbiAgICApLFxuICAgIGVudW1zOiB6LnJlY29yZCh6LnN0cmluZygpLCB6LnJlY29yZCh6LnN0cmluZygpLCB6LnN0cmluZygpKSksXG4gIH0pXG4gIC5zdHJpY3QoKTtcblxuZXhwb3J0IGNvbnN0IFRlbXBsYXRlT3B0aW9ucyA9IHoub2JqZWN0KHtcbiAgZW50aXR5OiBFbnRpdHlKc29uU2NoZW1hLm9taXQoeyBpZDogdHJ1ZSB9KVxuICAgIC5leHRlbmQoe1xuICAgICAgZW50aXR5SWQ6IHouc3RyaW5nKCksXG4gICAgfSlcbiAgICAucGFydGlhbCh7XG4gICAgICB0YWJsZTogdHJ1ZSxcbiAgICAgIHByb3BzOiB0cnVlLFxuICAgICAgaW5kZXhlczogdHJ1ZSxcbiAgICAgIHN1YnNldHM6IHRydWUsXG4gICAgICBlbnVtczogdHJ1ZSxcbiAgICB9KSxcbiAgaW5pdF90eXBlczogei5vYmplY3Qoe1xuICAgIGVudGl0eUlkOiB6LnN0cmluZygpLFxuICB9KSxcbiAgZ2VuZXJhdGVkOiB6Lm9iamVjdCh7fSksXG4gIGdlbmVyYXRlZF9zc286IHoub2JqZWN0KHt9KSxcbiAgZ2VuZXJhdGVkX2h0dHA6IHoub2JqZWN0KHtcbiAgICBlbnRpdHlJZDogei5zdHJpbmcoKSxcbiAgfSksXG4gIG1vZGVsOiB6Lm9iamVjdCh7XG4gICAgZW50aXR5SWQ6IHouc3RyaW5nKCksXG4gICAgZGVmYXVsdFNlYXJjaEZpZWxkOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgZGVmYXVsdE9yZGVyQnk6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgfSksXG4gIG1vZGVsX3Rlc3Q6IHoub2JqZWN0KHtcbiAgICBlbnRpdHlJZDogei5zdHJpbmcoKSxcbiAgfSksXG4gIGJyaWRnZTogei5vYmplY3Qoe1xuICAgIGVudGl0eUlkOiB6LnN0cmluZygpLFxuICB9KSxcbiAgc2VydmljZXM6IHoub2JqZWN0KHt9KSxcbiAgdmlld19saXN0OiB6Lm9iamVjdCh7XG4gICAgZW50aXR5SWQ6IHouc3RyaW5nKCksXG4gICAgZXh0cmE6IHoudW5rbm93bigpLFxuICB9KSxcbiAgdmlld19saXN0X2NvbHVtbnM6IHoub2JqZWN0KHtcbiAgICBlbnRpdHlJZDogei5zdHJpbmcoKSxcbiAgICBjb2x1bW5zOiB6XG4gICAgICAub2JqZWN0KHtcbiAgICAgICAgbmFtZTogei5zdHJpbmcoKSxcbiAgICAgICAgbGFiZWw6IHouc3RyaW5nKCksXG4gICAgICAgIHRjOiB6LnN0cmluZygpLFxuICAgICAgfSlcbiAgICAgIC5hcnJheSgpLFxuICAgIGNvbHVtbkltcG9ydHM6IHouc3RyaW5nKCksXG4gIH0pLFxuICB2aWV3X3NlYXJjaF9pbnB1dDogei5vYmplY3Qoe1xuICAgIGVudGl0eUlkOiB6LnN0cmluZygpLFxuICB9KSxcbiAgdmlld19mb3JtOiB6Lm9iamVjdCh7XG4gICAgZW50aXR5SWQ6IHouc3RyaW5nKCksXG4gIH0pLFxuICB2aWV3X2lkX2FsbF9zZWxlY3Q6IHoub2JqZWN0KHtcbiAgICBlbnRpdHlJZDogei5zdHJpbmcoKSxcbiAgfSksXG4gIHZpZXdfaWRfYXN5bmNfc2VsZWN0OiB6Lm9iamVjdCh7XG4gICAgZW50aXR5SWQ6IHouc3RyaW5nKCksXG4gICAgdGV4dEZpZWxkOiB6LnN0cmluZygpLFxuICB9KSxcbiAgdmlld19lbnVtc19zZWxlY3Q6IHoub2JqZWN0KHtcbiAgICBlbnRpdHlJZDogei5zdHJpbmcoKSxcbiAgICBlbnVtSWQ6IHouc3RyaW5nKCksXG4gIH0pLFxuICB2aWV3X2VudW1zX2J1dHRvbnNldDogei5vYmplY3Qoe1xuICAgIGVudGl0eUlkOiB6LnN0cmluZygpLFxuICAgIGVudW1JZDogei5zdHJpbmcoKSxcbiAgfSksXG4gIHF1ZXJpZXM6IHoub2JqZWN0KHt9KSxcbiAgZW50cnlfc2VydmVyOiB6Lm9iamVjdCh7fSksXG59KTtcbmV4cG9ydCB0eXBlIFRlbXBsYXRlT3B0aW9ucyA9IHouaW5mZXI8dHlwZW9mIFRlbXBsYXRlT3B0aW9ucz47XG5cbmV4cG9ydCBjb25zdCBUZW1wbGF0ZUtleSA9IHouZW51bShbXG4gIFwiZW50aXR5XCIsXG4gIFwiaW5pdF90eXBlc1wiLFxuICBcImdlbmVyYXRlZFwiLFxuICBcImdlbmVyYXRlZF9zc29cIixcbiAgXCJnZW5lcmF0ZWRfaHR0cFwiLFxuICBcIm1vZGVsXCIsXG4gIFwibW9kZWxfdGVzdFwiLFxuICBcImJyaWRnZVwiLFxuICBcInNlcnZpY2VzXCIsXG4gIFwidmlld19saXN0XCIsXG4gIFwidmlld19saXN0X2NvbHVtbnNcIixcbiAgXCJ2aWV3X3NlYXJjaF9pbnB1dFwiLFxuICBcInZpZXdfZm9ybVwiLFxuICBcInZpZXdfaWRfYWxsX3NlbGVjdFwiLFxuICBcInZpZXdfaWRfYXN5bmNfc2VsZWN0XCIsXG4gIFwidmlld19lbnVtc19zZWxlY3RcIixcbiAgXCJ2aWV3X2VudW1zX2J1dHRvbnNldFwiLFxuICBcInF1ZXJpZXNcIixcbiAgXCJlbnRyeV9zZXJ2ZXJcIixcbl0pO1xuZXhwb3J0IHR5cGUgVGVtcGxhdGVLZXkgPSB6LmluZmVyPHR5cGVvZiBUZW1wbGF0ZUtleT47XG5cbmV4cG9ydCBjb25zdCBHZW5lcmF0ZU9wdGlvbnMgPSB6Lm9iamVjdCh7XG4gIG92ZXJ3cml0ZTogei5ib29sZWFuKCkub3B0aW9uYWwoKSxcbn0pO1xuZXhwb3J0IHR5cGUgR2VuZXJhdGVPcHRpb25zID0gei5pbmZlcjx0eXBlb2YgR2VuZXJhdGVPcHRpb25zPjtcblxuZXhwb3J0IGNvbnN0IFBhdGhBbmRDb2RlID0gei5vYmplY3Qoe1xuICBwYXRoOiB6LnN0cmluZygpLFxuICBjb2RlOiB6LnN0cmluZygpLFxufSk7XG5leHBvcnQgdHlwZSBQYXRoQW5kQ29kZSA9IHouaW5mZXI8dHlwZW9mIFBhdGhBbmRDb2RlPjtcblxuZXhwb3J0IHR5cGUgRml4dHVyZVNlYXJjaE9wdGlvbnMgPSB7XG4gIGVudGl0eUlkOiBzdHJpbmc7XG4gIGZpZWxkOiBzdHJpbmc7XG4gIHZhbHVlOiBzdHJpbmc7XG4gIHNlYXJjaFR5cGU6IFwiZXF1YWxzXCIgfCBcImxpa2VcIjtcbn07XG5cbnR5cGUgQ29sdW1uVmFsdWUgPSBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgRGF0ZSB8IG51bGw7XG5leHBvcnQgdHlwZSBGaXh0dXJlUmVjb3JkID0ge1xuICBmaXh0dXJlSWQ6IHN0cmluZztcbiAgZW50aXR5SWQ6IHN0cmluZztcbiAgaWQ6IG51bWJlcjtcbiAgY29sdW1uczoge1xuICAgIFtrZXk6IHN0cmluZ106IHtcbiAgICAgIHByb3A6IEVudGl0eVByb3A7XG4gICAgICB2YWx1ZTogQ29sdW1uVmFsdWUgfCBDb2x1bW5WYWx1ZVtdO1xuICAgIH07XG4gIH07XG4gIGZldGNoZWRSZWNvcmRzOiBzdHJpbmdbXTtcbiAgYmVsb25nc1JlY29yZHM6IHN0cmluZ1tdO1xuICB0YXJnZXQ/OiBGaXh0dXJlUmVjb3JkOyAvLyBJbXBvcnQg64yA7IOBIERCIOugiOy9lOuTnChpZOqwgCDqsJnsnYApXG4gIHVuaXF1ZT86IEZpeHR1cmVSZWNvcmQ7IC8vIEltcG9ydCDrjIDsg4EgREIg66CI7L2U65OcKHVuaXF1ZSBrZXnqsIAg6rCZ7J2AKVxuICBvdmVycmlkZT86IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBGaXh0dXJlSW1wb3J0UmVzdWx0ID0ge1xuICBlbnRpdHlJZDogc3RyaW5nO1xuICBkYXRhOiB7XG4gICAgW2tleTogc3RyaW5nXTogQ29sdW1uVmFsdWU7XG4gIH07XG59O1xuXG5leHBvcnQgdHlwZSBSZWxhdGlvbk5vZGUgPSB7XG4gIGZpeHR1cmVJZDogc3RyaW5nO1xuICBlbnRpdHlJZDogc3RyaW5nO1xuICByZWxhdGVkOiBTZXQ8c3RyaW5nPjtcbn07XG5cbi8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvbm9FbXB0eUludGVyZmFjZTogc29uYW11LmdlbmVyYXRlZC5zc28g7JeQ7IScIO2ZleyepeydhCDsnITtlbQg7KSA67mE65CcIOu5iCDsnbjthLDtjpjsnbTsiqRcbmV4cG9ydCBpbnRlcmZhY2UgRGF0YWJhc2VTY2hlbWFFeHRlbmQge31cbi8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvbm9FbXB0eUludGVyZmFjZTogc29uYW11LmdlbmVyYXRlZC5zc28g7JeQ7IScIO2ZleyepeydhCDsnITtlbQg7KSA67mE65CcIOu5iCDsnbjthLDtjpjsnbTsiqRcbmV4cG9ydCBpbnRlcmZhY2UgRGF0YWJhc2VGb3JlaWduS2V5cyB7fVxuZXhwb3J0IHR5cGUgTWFueVRvTWFueUJhc2VTY2hlbWE8RnJvbUlkS2V5IGV4dGVuZHMgc3RyaW5nLCBUb0lkS2V5IGV4dGVuZHMgc3RyaW5nPiA9IHtcbiAgaWQ6IG51bWJlcjtcbn0gJiB7XG4gIFtLIGluIGAke0Zyb21JZEtleX1faWRgXTogbnVtYmVyO1xufSAmIHtcbiAgW0sgaW4gYCR7VG9JZEtleX1faWRgXTogbnVtYmVyO1xufTtcblxuLy8g6rCd7LK0LCDtlajsiJgsIOu5hOuPmeq4sCDtlajsiJjrpbwg66qo65GQIO2PrOq0hO2VmOuKlCDtg4DsnoVcbmV4cG9ydCB0eXBlIEV4ZWN1dGFibGU8VD4gPSBUIHwgUHJvbWlzZTxUPiB8ICgoKSA9PiBUKSB8ICgoKSA9PiBQcm9taXNlPFQ+KTtcblxuZXhwb3J0IHR5cGUgU29uYW11RmFzdGlmeUNvbmZpZyA9IHtcbiAgY29udGV4dFByb3ZpZGVyOiAoXG4gICAgZGVmYXVsdENvbnRleHQ6IFBpY2s8Q29udGV4dCwgXCJyZXF1ZXN0XCIgfCBcInJlcGx5XCIgfCBcImhlYWRlcnNcIiB8IFwiY3JlYXRlU1NFXCIgfCBcIm5haXRlU3RvcmVcIj4gJlxuICAgICAgQXV0aENvbnRleHQsXG4gICAgcmVxdWVzdDogRmFzdGlmeVJlcXVlc3QsXG4gICAgcmVwbHk6IEZhc3RpZnlSZXBseSxcbiAgKSA9PiBDb250ZXh0IHwgUHJvbWlzZTxDb250ZXh0PjtcbiAgZ3VhcmRIYW5kbGVyOiAoXG4gICAgZ3VhcmQ6IEd1YXJkS2V5LFxuICAgIHJlcXVlc3Q6IEZhc3RpZnlSZXF1ZXN0LFxuICAgIGFwaToge1xuICAgICAgdHlwZVBhcmFtZXRlcnM6IEFwaVBhcmFtVHlwZS5UeXBlUGFyYW1bXTtcbiAgICAgIHBhcmFtZXRlcnM6IEFwaVBhcmFtW107XG4gICAgICByZXR1cm5UeXBlOiBBcGlQYXJhbVR5cGU7XG4gICAgICBtb2RlbE5hbWU6IHN0cmluZztcbiAgICAgIG1ldGhvZE5hbWU6IHN0cmluZztcbiAgICAgIHBhdGg6IHN0cmluZztcbiAgICAgIG9wdGlvbnM6IEFwaURlY29yYXRvck9wdGlvbnM7XG4gICAgfSxcbiAgKSA9PiB2b2lkO1xufTtcbiJdLCJuYW1lcyI6WyJ6IiwiekFycmF5YWJsZSIsInNoYXBlIiwidW5pb24iLCJhcnJheSIsIm5vcm1hbGl6ZVN1YnNldEZpZWxkIiwiZiIsImZpZWxkIiwiaXNJbnRlcm5hbFN1YnNldEZpZWxkIiwiaW50ZXJuYWwiLCJpc0ludGVnZXJTaW5nbGVQcm9wIiwicCIsInR5cGUiLCJpc0ludGVnZXJBcnJheVByb3AiLCJpc0ludGVnZXJQcm9wIiwiaXNCaWdJbnRlZ2VyU2luZ2xlUHJvcCIsImlzQmlnSW50ZWdlckFycmF5UHJvcCIsImlzQmlnSW50ZWdlclByb3AiLCJpc1N0cmluZ1NpbmdsZVByb3AiLCJpc1N0cmluZ0FycmF5UHJvcCIsImlzU3RyaW5nUHJvcCIsImlzRW51bVNpbmdsZVByb3AiLCJpc0VudW1BcnJheVByb3AiLCJpc0VudW1Qcm9wIiwiaXNOdW1iZXJTaW5nbGVQcm9wIiwiaXNOdW1iZXJBcnJheVByb3AiLCJpc051bWJlclByb3AiLCJpc051bWVyaWNTaW5nbGVQcm9wIiwiaXNOdW1lcmljQXJyYXlQcm9wIiwiaXNOdW1lcmljUHJvcCIsImlzQm9vbGVhblNpbmdsZVByb3AiLCJpc0Jvb2xlYW5BcnJheVByb3AiLCJpc0Jvb2xlYW5Qcm9wIiwiaXNEYXRlU2luZ2xlUHJvcCIsImlzRGF0ZUFycmF5UHJvcCIsImlzRGF0ZVByb3AiLCJpc1V1aWRTaW5nbGVQcm9wIiwiaXNVdWlkQXJyYXlQcm9wIiwiaXNVdWlkUHJvcCIsImlzSnNvblByb3AiLCJpc1ZpcnR1YWxQcm9wIiwiaXNWaXJ0dWFsQ29kZVByb3AiLCJ2aXJ0dWFsVHlwZSIsImlzVmlydHVhbFF1ZXJ5UHJvcCIsImlzVmVjdG9yU2luZ2xlUHJvcCIsImlzVmVjdG9yQXJyYXlQcm9wIiwiaXNWZWN0b3JQcm9wIiwiaXNUc1ZlY3RvclByb3AiLCJpc1JlbGF0aW9uUHJvcCIsImlzT25lVG9PbmVSZWxhdGlvblByb3AiLCJyZWxhdGlvblR5cGUiLCJpc0JlbG9uZ3NUb09uZVJlbGF0aW9uUHJvcCIsImlzSGFzTWFueVJlbGF0aW9uUHJvcCIsImlzTWFueVRvTWFueVJlbGF0aW9uUHJvcCIsImlzQ3VzdG9tSm9pbkNsYXVzZSIsImN1c3RvbSIsIlNvbmFtdVF1ZXJ5TW9kZSIsImVudW0iLCJTb25hbXVTZW1hbnRpY1BhcmFtcyIsIm9iamVjdCIsInNlbWFudGljUXVlcnkiLCJlbWJlZGRpbmciLCJudW1iZXIiLCJtaW4iLCJtYXgiLCJ0aHJlc2hvbGQiLCJvcHRpb25hbCIsIm1ldGhvZCIsIndoaWNoIiwic3RyaW5nIiwiaXNLbmV4RXJyb3IiLCJlIiwiY29kZSIsInNxbE1lc3NhZ2UiLCJzcWxTdGF0ZSIsIkFwaVBhcmFtVHlwZSIsImlzT2JqZWN0IiwidiIsInQiLCJpc1VuaW9uIiwiaXNJbnRlcnNlY3Rpb24iLCJpc1N0cmluZ0xpdGVyYWwiLCJpc051bWVyaWNMaXRlcmFsIiwiaXNBcnJheSIsImlzUmVmIiwiaXNJbmRleGVkQWNjZXNzIiwiaXNUdXBsZVR5cGUiLCJpc1BpY2siLCJpZCIsImlzT21pdCIsImlzUGFydGlhbCIsImlzUHJvbWlzZSIsImlzQ29udGV4dCIsImlzUmVmS25leCIsImlzVHlwZVBhcmFtIiwiUmVuZGVyaW5nTm9kZSIsImFueSIsIkdlbmVyYXRlZENvbHVtblNjaGVtYSIsImV4cHJlc3Npb24iLCJCYXNlUHJvcEZpZWxkcyIsIm5hbWUiLCJkZXNjIiwibnVsbGFibGUiLCJib29sZWFuIiwidG9GaWx0ZXIiLCJkZWZhdWx0IiwiZGJEZWZhdWx0IiwiZ2VuZXJhdGVkIiwiQmFzZVByb3BGaWVsZHNXaXRob3V0QWRkaXRpb25hbCIsImxpdGVyYWwiLCJzdHJpY3QiLCJQcmVjaXNpb25TY2FsZUZpZWxkcyIsInByZWNpc2lvbiIsInNjYWxlIiwiU3RyaW5nUHJvcFNjaGVtYSIsImxlbmd0aCIsIlN0cmluZ0FycmF5UHJvcFNjaGVtYSIsIkVudW1Qcm9wU2NoZW1hIiwiRW51bUFycmF5UHJvcFNjaGVtYSIsIk51bWJlclByb3BTY2hlbWEiLCJudW1iZXJUeXBlIiwiTnVtYmVyQXJyYXlQcm9wU2NoZW1hIiwiTnVtZXJpY1Byb3BTY2hlbWEiLCJOdW1lcmljQXJyYXlQcm9wU2NoZW1hIiwiSnNvblByb3BTY2hlbWEiLCJWaXJ0dWFsUHJvcFNjaGVtYSIsIlZlY3RvclByb3BTY2hlbWEiLCJkaW1lbnNpb25zIiwiVmVjdG9yQXJyYXlQcm9wU2NoZW1hIiwiQmFzZVJlbGF0aW9uRmllbGRzIiwid2l0aCIsIlJlbGF0aW9uT25TY2hlbWEiLCJCZWxvbmdzVG9PbmVSZWxhdGlvblByb3BTY2hlbWEiLCJjdXN0b21Kb2luQ2xhdXNlIiwidXNlQ29uc3RyYWludCIsIm9uVXBkYXRlIiwib25EZWxldGUiLCJIYXNNYW55UmVsYXRpb25Qcm9wU2NoZW1hIiwiam9pbkNvbHVtbiIsImZyb21Db2x1bW4iLCJNYW55VG9NYW55UmVsYXRpb25Qcm9wU2NoZW1hIiwiam9pblRhYmxlIiwiT25lVG9PbmVSZWxhdGlvblByb3BTY2hlbWEiLCJoYXNKb2luQ29sdW1uIiwiUmVsYXRpb25UeXBlcyIsIlJlbGF0aW9uUHJvcFNjaGVtYSIsImRpc2NyaW1pbmF0ZWRVbmlvbiIsImVycm9yIiwiaXNzIiwibWFwIiwiam9pbiIsImlucHV0IiwiTm9ybWFsUHJvcFR5cGVzIiwiVmlydHVhbEdlbmVyYXRlZERpc2FsbG93ZWRUeXBlcyIsIk5vcm1hbFByb3BTY2hlbWEiLCJzdXBlclJlZmluZSIsImRhdGEiLCJjdHgiLCJ1bmRlZmluZWQiLCJhZGRJc3N1ZSIsIm1lc3NhZ2UiLCJwYXRoIiwiaW5jbHVkZXMiLCJmYXRhbCIsIkFsbFByb3BUeXBlcyIsIkVudGl0eVByb3BTY2hlbWEiLCJFbnRpdHlJbmRleENvbHVtblNjaGVtYSIsIm51bGxzRmlyc3QiLCJzb3J0T3JkZXIiLCJ2ZWN0b3JPcHMiLCJFbnRpdHlJbmRleFNjaGVtYSIsImNvbHVtbnMiLCJ1c2luZyIsIm51bGxzTm90RGlzdGluY3QiLCJtIiwiZWZDb25zdHJ1Y3Rpb24iLCJsaXN0cyIsIkVudGl0eUpzb25TY2hlbWEiLCJkZXNjcmliZSIsInRpdGxlIiwidGFibGUiLCJwYXJlbnRJZCIsInByb3BzIiwiaW5kZXhlcyIsInN1YnNldHMiLCJyZWNvcmQiLCJlbnVtcyIsIlRlbXBsYXRlT3B0aW9ucyIsImVudGl0eSIsIm9taXQiLCJleHRlbmQiLCJlbnRpdHlJZCIsInBhcnRpYWwiLCJpbml0X3R5cGVzIiwiZ2VuZXJhdGVkX3NzbyIsImdlbmVyYXRlZF9odHRwIiwibW9kZWwiLCJkZWZhdWx0U2VhcmNoRmllbGQiLCJkZWZhdWx0T3JkZXJCeSIsIm1vZGVsX3Rlc3QiLCJicmlkZ2UiLCJzZXJ2aWNlcyIsInZpZXdfbGlzdCIsImV4dHJhIiwidW5rbm93biIsInZpZXdfbGlzdF9jb2x1bW5zIiwibGFiZWwiLCJ0YyIsImNvbHVtbkltcG9ydHMiLCJ2aWV3X3NlYXJjaF9pbnB1dCIsInZpZXdfZm9ybSIsInZpZXdfaWRfYWxsX3NlbGVjdCIsInZpZXdfaWRfYXN5bmNfc2VsZWN0IiwidGV4dEZpZWxkIiwidmlld19lbnVtc19zZWxlY3QiLCJlbnVtSWQiLCJ2aWV3X2VudW1zX2J1dHRvbnNldCIsInF1ZXJpZXMiLCJlbnRyeV9zZXJ2ZXIiLCJUZW1wbGF0ZUtleSIsIkdlbmVyYXRlT3B0aW9ucyIsIm92ZXJ3cml0ZSIsIlBhdGhBbmRDb2RlIl0sIm1hcHBpbmdzIjoiQUFDQSxTQUFTQSxDQUFDLFFBQVEsTUFBTTtBQUl4Qjs7QUFFQSxHQUNBLE9BQU8sU0FBU0MsV0FBbUNDLEtBQVE7SUFDekQsT0FBT0YsRUFBRUcsS0FBSyxDQUFDO1FBQUNEO1FBQU9BLE1BQU1FLEtBQUs7S0FBRztBQUN2QztBQXFRQSxPQUFPLFNBQVNDLHFCQUFxQkMsQ0FBYztJQUNqRCxPQUFPLE9BQU9BLE1BQU0sV0FBV0EsSUFBSUEsRUFBRUMsS0FBSztBQUM1QztBQUNBLE9BQU8sU0FBU0Msc0JBQXNCRixDQUFjO0lBQ2xELE9BQU8sT0FBT0EsTUFBTSxZQUFZQSxFQUFFRyxRQUFRLEtBQUs7QUFDakQ7QUFnRUE7O0FBRUEsR0FDQSxPQUFPLFNBQVNDLG9CQUFvQkMsQ0FBVTtJQUM1QyxPQUFPLEFBQUNBLEdBQW1CQyxTQUFTO0FBQ3RDO0FBQ0EsT0FBTyxTQUFTQyxtQkFBbUJGLENB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
@@ -1,7 +1,9 @@
1
- import { type ModelMessage, type StreamTextResult } from "ai";
1
+ /** biome-ignore-all lint/suspicious/noExplicitAny: AI SDK의 타입이 명확하지 않아 any를 허용함 */
2
+ import type { ModelMessage, StreamTextResult } from "ai";
2
3
  import { type FixtureRecord } from "../types/types";
3
4
  declare class AIClient {
4
5
  private model;
6
+ private aiSdk;
5
7
  init(): Promise<void>;
6
8
  handleFixture(messages: ModelMessage[], fixtureRecords: FixtureRecord[]): StreamTextResult<any, any>;
7
9
  handleEntity(messages: ModelMessage[]): StreamTextResult<any, any>;
@@ -1 +1 @@
1
- {"version":3,"file":"ai-client.d.ts","sourceRoot":"","sources":["../../src/ui/ai-client.ts"],"names":[],"mappings":"AAEA,OAAO,EAEL,KAAK,YAAY,EACjB,KAAK,gBAAgB,EAItB,MAAM,IAAI,CAAC;AAOZ,OAAO,EAEL,KAAK,aAAa,EAInB,MAAM,gBAAgB,CAAC;AAQxB,cAAM,QAAQ;IACZ,OAAO,CAAC,KAAK,CAAkC;IAEzC,IAAI;IAIV,aAAa,CACX,QAAQ,EAAE,YAAY,EAAE,EACxB,cAAc,EAAE,aAAa,EAAE,GAC9B,gBAAgB,CAAC,GAAG,EAAE,GAAG,CAAC;IAiM7B,YAAY,CAAC,QAAQ,EAAE,YAAY,EAAE,GAAG,gBAAgB,CAAC,GAAG,EAAE,GAAG,CAAC;CA4PnE;AAiDD,eAAO,MAAM,QAAQ,UAAiB,CAAC"}
1
+ {"version":3,"file":"ai-client.d.ts","sourceRoot":"","sources":["../../src/ui/ai-client.ts"],"names":[],"mappings":"AAAA,mFAAmF;AACnF,OAAO,KAAK,EAAiB,YAAY,EAAE,gBAAgB,EAAE,MAAM,IAAI,CAAC;AAOxE,OAAO,EAEL,KAAK,aAAa,EAInB,MAAM,gBAAgB,CAAC;AAQxB,cAAM,QAAQ;IACZ,OAAO,CAAC,KAAK,CAA8B;IAC3C,OAAO,CAAC,KAAK,CAIG;IAEV,IAAI;IAcV,aAAa,CACX,QAAQ,EAAE,YAAY,EAAE,EACxB,cAAc,EAAE,aAAa,EAAE,GAC9B,gBAAgB,CAAC,GAAG,EAAE,GAAG,CAAC;IA+M7B,YAAY,CAAC,QAAQ,EAAE,YAAY,EAAE,GAAG,gBAAgB,CAAC,GAAG,EAAE,GAAG,CAAC;CAuQnE;AAiDD,eAAO,MAAM,QAAQ,UAAiB,CAAC"}