@firestitch/report 18.8.1 → 18.10.0

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 (208) hide show
  1. package/app/reports/anchor-at-point.d.ts +14 -0
  2. package/app/reports/canvas-landing-page.d.ts +2 -0
  3. package/app/reports/components/component-chart/component-chart.component.d.ts +18 -2
  4. package/app/reports/components/component-kpi/component-kpi.component.d.ts +4 -1
  5. package/app/reports/components/component-text/component-text.component.d.ts +47 -2
  6. package/app/reports/components/component-text/value-embed.plugin.d.ts +67 -0
  7. package/app/reports/components/report-canvas/report-canvas.component.d.ts +37 -9
  8. package/app/reports/components/report-component/report-component.component.d.ts +45 -2
  9. package/app/reports/components/report-view-picker/report-view-picker.component.d.ts +21 -0
  10. package/app/reports/data/report.data.d.ts +18 -2
  11. package/app/reports/dialogs/component-settings/component-settings.component.d.ts +25 -2
  12. package/app/reports/dialogs/report-settings/report-settings.component.d.ts +15 -6
  13. package/app/reports/dialogs/report-view/report-view-dialog.component.d.ts +13 -0
  14. package/app/reports/drill-crumbs.d.ts +12 -0
  15. package/app/reports/enums/report-value-formula.enum.d.ts +6 -0
  16. package/app/reports/export/report-export-collector.service.d.ts +35 -4
  17. package/app/reports/export/report-export.service.d.ts +3 -1
  18. package/app/reports/export/report-filter-lines.d.ts +18 -0
  19. package/app/reports/export/report-pdf.service.d.ts +18 -2
  20. package/app/reports/export/report-pptx.service.d.ts +15 -2
  21. package/app/reports/export/report-text-layout.service.d.ts +35 -0
  22. package/app/reports/filter-settings-rules.d.ts +33 -0
  23. package/app/reports/format.d.ts +2 -1
  24. package/app/reports/interfaces/canvas-landing-input.interface.d.ts +8 -0
  25. package/app/reports/interfaces/component-data-applied.interface.d.ts +13 -0
  26. package/app/reports/interfaces/component-data-drill.interface.d.ts +22 -0
  27. package/app/reports/interfaces/filter-bar-placement.type.d.ts +1 -0
  28. package/app/reports/interfaces/filter-component-toggle-state.interface.d.ts +4 -0
  29. package/app/reports/interfaces/filter-settings-option.interface.d.ts +4 -0
  30. package/app/reports/interfaces/filter-type-select-state.interface.d.ts +5 -0
  31. package/app/reports/interfaces/report-chart-hit.interface.d.ts +5 -0
  32. package/app/reports/interfaces/report-chat-viewer-cross-filter-field.interface.d.ts +4 -0
  33. package/app/reports/interfaces/report-chat-viewer-cross-filter.interface.d.ts +7 -0
  34. package/app/reports/interfaces/report-chat-viewer-detail.interface.d.ts +4 -0
  35. package/app/reports/interfaces/report-chat-viewer-drill-step.interface.d.ts +5 -0
  36. package/app/reports/interfaces/report-chat-viewer-drill.interface.d.ts +5 -0
  37. package/app/reports/interfaces/report-chat-viewer-filter.interface.d.ts +3 -0
  38. package/app/reports/interfaces/report-chat-viewer-selection.interface.d.ts +5 -0
  39. package/app/reports/interfaces/report-chat-viewer-state.interface.d.ts +12 -0
  40. package/app/reports/interfaces/report-drill-crumb.interface.d.ts +6 -0
  41. package/app/reports/interfaces/report-drill-refusal.type.d.ts +1 -0
  42. package/app/reports/interfaces/report-drill-step.interface.d.ts +5 -0
  43. package/app/reports/interfaces/report-export-line-kind.type.d.ts +1 -0
  44. package/app/reports/interfaces/report-export-line.interface.d.ts +8 -0
  45. package/app/reports/interfaces/report-export-lines-input.interface.d.ts +9 -0
  46. package/app/reports/interfaces/report-export-snapshot.interface.d.ts +15 -0
  47. package/app/reports/interfaces/report-filter-line-context.interface.d.ts +8 -0
  48. package/app/reports/interfaces/report-filter-line-form.type.d.ts +1 -0
  49. package/app/reports/interfaces/report-filter-match.type.d.ts +1 -0
  50. package/app/reports/interfaces/report-filter-option-pair.interface.d.ts +4 -0
  51. package/app/reports/interfaces/report-filter-options-ask.interface.d.ts +6 -0
  52. package/app/reports/interfaces/report-filter-options-list.interface.d.ts +7 -0
  53. package/app/reports/interfaces/report-filter-options-request.interface.d.ts +6 -0
  54. package/app/reports/interfaces/report-filter-options-stream.interface.d.ts +11 -0
  55. package/app/reports/interfaces/report-filter-options.interface.d.ts +7 -0
  56. package/app/reports/interfaces/report-filter-skip.type.d.ts +1 -0
  57. package/app/reports/interfaces/report-mark-action.type.d.ts +1 -0
  58. package/app/reports/interfaces/report-mark-click.interface.d.ts +13 -0
  59. package/app/reports/interfaces/report-mark-context.interface.d.ts +6 -0
  60. package/app/reports/interfaces/report-mark-decision.interface.d.ts +6 -0
  61. package/app/reports/interfaces/report-mark-event.interface.d.ts +11 -0
  62. package/app/reports/interfaces/report-mark-point.interface.d.ts +8 -0
  63. package/app/reports/interfaces/report-temporary-state.interface.d.ts +4 -0
  64. package/app/reports/interfaces/report-tile-state.interface.d.ts +8 -0
  65. package/app/reports/interfaces/report-url-link.interface.d.ts +4 -0
  66. package/app/reports/interfaces/report-url-value-name.type.d.ts +1 -0
  67. package/app/reports/interfaces/report-url-write.interface.d.ts +4 -0
  68. package/app/reports/interfaces/report-view-config.interface.d.ts +11 -0
  69. package/app/reports/interfaces/report-view-create.interface.d.ts +7 -0
  70. package/app/reports/interfaces/report-view-deleted.interface.d.ts +4 -0
  71. package/app/reports/interfaces/report-view-dialog-data.interface.d.ts +7 -0
  72. package/app/reports/interfaces/report-view-dropped.interface.d.ts +5 -0
  73. package/app/reports/interfaces/report-view-menu-item.interface.d.ts +10 -0
  74. package/app/reports/interfaces/report-view-summary.interface.d.ts +11 -0
  75. package/app/reports/interfaces/report-view.interface.d.ts +7 -0
  76. package/app/reports/interfaces/report-viewer-feature.type.d.ts +1 -0
  77. package/app/reports/interfaces/report-views.interface.d.ts +7 -0
  78. package/app/reports/interfaces/report.interface.d.ts +48 -5
  79. package/app/reports/interfaces/tile-load-result.interface.d.ts +4 -0
  80. package/app/reports/layout.d.ts +2 -0
  81. package/app/reports/mark-click.d.ts +20 -0
  82. package/app/reports/option-builder.d.ts +12 -1
  83. package/app/reports/report-chat-viewer-state.d.ts +8 -0
  84. package/app/reports/report-date-presets.d.ts +2 -0
  85. package/app/reports/report-filter-items.d.ts +27 -22
  86. package/app/reports/report-tile.d.ts +2 -0
  87. package/app/reports/report-url-state.d.ts +27 -10
  88. package/app/reports/report-view-config.d.ts +36 -0
  89. package/app/reports/report-view-menu.d.ts +15 -0
  90. package/app/reports/report-viewer-features.d.ts +5 -0
  91. package/app/reports/services/report-filter-options.service.d.ts +26 -0
  92. package/app/reports/services/report-filter-state.service.d.ts +65 -2
  93. package/app/reports/services/report-view.service.d.ts +51 -0
  94. package/app/reports/text.d.ts +50 -0
  95. package/app/reports/tile-data-state.d.ts +7 -0
  96. package/app/reports/tile-loads.d.ts +4 -0
  97. package/app/reports/values.d.ts +17 -0
  98. package/app/reports/views/report/fs-ai-report.component.d.ts +9 -1
  99. package/app/reports/views/report/report.component.d.ts +6 -0
  100. package/esm2022/app/reports/anchor-at-point.mjs +49 -0
  101. package/esm2022/app/reports/canvas-landing-page.mjs +25 -0
  102. package/esm2022/app/reports/components/component-chart/component-chart.component.mjs +97 -5
  103. package/esm2022/app/reports/components/component-kpi/component-kpi.component.mjs +11 -4
  104. package/esm2022/app/reports/components/component-list/component-list.component.mjs +7 -1
  105. package/esm2022/app/reports/components/component-text/component-text.component.mjs +213 -16
  106. package/esm2022/app/reports/components/component-text/value-embed.plugin.mjs +484 -0
  107. package/esm2022/app/reports/components/report-canvas/report-canvas.component.mjs +296 -55
  108. package/esm2022/app/reports/components/report-component/report-component.component.mjs +318 -76
  109. package/esm2022/app/reports/components/report-view-picker/report-view-picker.component.mjs +115 -0
  110. package/esm2022/app/reports/data/report.data.mjs +103 -8
  111. package/esm2022/app/reports/dialogs/component-settings/component-settings.component.mjs +210 -44
  112. package/esm2022/app/reports/dialogs/report-settings/report-settings.component.mjs +86 -90
  113. package/esm2022/app/reports/dialogs/report-view/report-view-dialog.component.mjs +52 -0
  114. package/esm2022/app/reports/drill-crumbs.mjs +73 -0
  115. package/esm2022/app/reports/enums/report-value-formula.enum.mjs +14 -0
  116. package/esm2022/app/reports/export/report-export-collector.service.mjs +299 -125
  117. package/esm2022/app/reports/export/report-export.service.mjs +57 -19
  118. package/esm2022/app/reports/export/report-filter-lines.mjs +235 -0
  119. package/esm2022/app/reports/export/report-pdf.service.mjs +315 -71
  120. package/esm2022/app/reports/export/report-pptx.service.mjs +293 -71
  121. package/esm2022/app/reports/export/report-text-layout.service.mjs +241 -0
  122. package/esm2022/app/reports/filter-settings-rules.mjs +283 -0
  123. package/esm2022/app/reports/format.mjs +13 -30
  124. package/esm2022/app/reports/interfaces/canvas-landing-input.interface.mjs +2 -0
  125. package/esm2022/app/reports/interfaces/component-data-applied.interface.mjs +2 -0
  126. package/esm2022/app/reports/interfaces/component-data-drill.interface.mjs +2 -0
  127. package/esm2022/app/reports/interfaces/filter-bar-placement.type.mjs +2 -0
  128. package/esm2022/app/reports/interfaces/filter-component-toggle-state.interface.mjs +2 -0
  129. package/esm2022/app/reports/interfaces/filter-settings-option.interface.mjs +2 -0
  130. package/esm2022/app/reports/interfaces/filter-type-select-state.interface.mjs +2 -0
  131. package/esm2022/app/reports/interfaces/report-chart-hit.interface.mjs +2 -0
  132. package/esm2022/app/reports/interfaces/report-chat-viewer-cross-filter-field.interface.mjs +2 -0
  133. package/esm2022/app/reports/interfaces/report-chat-viewer-cross-filter.interface.mjs +2 -0
  134. package/esm2022/app/reports/interfaces/report-chat-viewer-detail.interface.mjs +2 -0
  135. package/esm2022/app/reports/interfaces/report-chat-viewer-drill-step.interface.mjs +2 -0
  136. package/esm2022/app/reports/interfaces/report-chat-viewer-drill.interface.mjs +2 -0
  137. package/esm2022/app/reports/interfaces/report-chat-viewer-filter.interface.mjs +1 -1
  138. package/esm2022/app/reports/interfaces/report-chat-viewer-selection.interface.mjs +2 -0
  139. package/esm2022/app/reports/interfaces/report-chat-viewer-state.interface.mjs +1 -1
  140. package/esm2022/app/reports/interfaces/report-drill-crumb.interface.mjs +2 -0
  141. package/esm2022/app/reports/interfaces/report-drill-refusal.type.mjs +2 -0
  142. package/esm2022/app/reports/interfaces/report-drill-step.interface.mjs +2 -0
  143. package/esm2022/app/reports/interfaces/report-export-line-kind.type.mjs +2 -0
  144. package/esm2022/app/reports/interfaces/report-export-line.interface.mjs +2 -0
  145. package/esm2022/app/reports/interfaces/report-export-lines-input.interface.mjs +2 -0
  146. package/esm2022/app/reports/interfaces/report-export-snapshot.interface.mjs +2 -0
  147. package/esm2022/app/reports/interfaces/report-filter-line-context.interface.mjs +2 -0
  148. package/esm2022/app/reports/interfaces/report-filter-line-form.type.mjs +2 -0
  149. package/esm2022/app/reports/interfaces/report-filter-match.type.mjs +2 -0
  150. package/esm2022/app/reports/interfaces/report-filter-option-pair.interface.mjs +2 -0
  151. package/esm2022/app/reports/interfaces/report-filter-options-ask.interface.mjs +2 -0
  152. package/esm2022/app/reports/interfaces/report-filter-options-list.interface.mjs +2 -0
  153. package/esm2022/app/reports/interfaces/report-filter-options-request.interface.mjs +2 -0
  154. package/esm2022/app/reports/interfaces/report-filter-options-stream.interface.mjs +2 -0
  155. package/esm2022/app/reports/interfaces/report-filter-options.interface.mjs +2 -0
  156. package/esm2022/app/reports/interfaces/report-filter-skip.type.mjs +2 -0
  157. package/esm2022/app/reports/interfaces/report-mark-action.type.mjs +2 -0
  158. package/esm2022/app/reports/interfaces/report-mark-click.interface.mjs +2 -0
  159. package/esm2022/app/reports/interfaces/report-mark-context.interface.mjs +2 -0
  160. package/esm2022/app/reports/interfaces/report-mark-decision.interface.mjs +2 -0
  161. package/esm2022/app/reports/interfaces/report-mark-event.interface.mjs +2 -0
  162. package/esm2022/app/reports/interfaces/report-mark-point.interface.mjs +2 -0
  163. package/esm2022/app/reports/interfaces/report-temporary-state.interface.mjs +2 -0
  164. package/esm2022/app/reports/interfaces/report-tile-state.interface.mjs +2 -0
  165. package/esm2022/app/reports/interfaces/report-url-link.interface.mjs +2 -0
  166. package/esm2022/app/reports/interfaces/report-url-value-name.type.mjs +2 -0
  167. package/esm2022/app/reports/interfaces/report-url-write.interface.mjs +2 -0
  168. package/esm2022/app/reports/interfaces/report-view-config.interface.mjs +2 -0
  169. package/esm2022/app/reports/interfaces/report-view-create.interface.mjs +2 -0
  170. package/esm2022/app/reports/interfaces/report-view-deleted.interface.mjs +2 -0
  171. package/esm2022/app/reports/interfaces/report-view-dialog-data.interface.mjs +2 -0
  172. package/esm2022/app/reports/interfaces/report-view-dropped.interface.mjs +2 -0
  173. package/esm2022/app/reports/interfaces/report-view-menu-item.interface.mjs +2 -0
  174. package/esm2022/app/reports/interfaces/report-view-summary.interface.mjs +2 -0
  175. package/esm2022/app/reports/interfaces/report-view.interface.mjs +2 -0
  176. package/esm2022/app/reports/interfaces/report-viewer-feature.type.mjs +2 -0
  177. package/esm2022/app/reports/interfaces/report-views.interface.mjs +2 -0
  178. package/esm2022/app/reports/interfaces/report.interface.mjs +1 -1
  179. package/esm2022/app/reports/interfaces/tile-load-result.interface.mjs +2 -0
  180. package/esm2022/app/reports/layout.mjs +11 -1
  181. package/esm2022/app/reports/mark-click.mjs +193 -0
  182. package/esm2022/app/reports/option-builder.mjs +159 -15
  183. package/esm2022/app/reports/report-chat-viewer-state.mjs +34 -0
  184. package/esm2022/app/reports/report-date-presets.mjs +18 -0
  185. package/esm2022/app/reports/report-filter-items.mjs +343 -72
  186. package/esm2022/app/reports/report-tile.mjs +12 -0
  187. package/esm2022/app/reports/report-url-state.mjs +596 -108
  188. package/esm2022/app/reports/report-view-config.mjs +697 -0
  189. package/esm2022/app/reports/report-view-menu.mjs +119 -0
  190. package/esm2022/app/reports/report-viewer-features.mjs +42 -0
  191. package/esm2022/app/reports/services/report-filter-options.service.mjs +238 -0
  192. package/esm2022/app/reports/services/report-filter-state.service.mjs +715 -71
  193. package/esm2022/app/reports/services/report-view.service.mjs +358 -0
  194. package/esm2022/app/reports/text.mjs +293 -85
  195. package/esm2022/app/reports/tile-data-state.mjs +127 -0
  196. package/esm2022/app/reports/tile-loads.mjs +38 -0
  197. package/esm2022/app/reports/values.mjs +183 -0
  198. package/esm2022/app/reports/views/report/fs-ai-report.component.mjs +180 -46
  199. package/esm2022/app/reports/views/report/report.component.mjs +106 -23
  200. package/esm2022/public_api.mjs +24 -1
  201. package/fesm2022/{firestitch-report-echarts-CFnbJx44.mjs → firestitch-report-echarts-UBg8Wlhd.mjs} +2 -2
  202. package/fesm2022/{firestitch-report-echarts-CFnbJx44.mjs.map → firestitch-report-echarts-UBg8Wlhd.mjs.map} +1 -1
  203. package/fesm2022/{firestitch-report-firestitch-report-CSylkyko.mjs → firestitch-report-firestitch-report-B1keNrcK.mjs} +11315 -4201
  204. package/fesm2022/firestitch-report-firestitch-report-B1keNrcK.mjs.map +1 -0
  205. package/fesm2022/firestitch-report.mjs +1 -1
  206. package/package.json +1 -1
  207. package/public_api.d.ts +23 -0
  208. package/fesm2022/firestitch-report-firestitch-report-CSylkyko.mjs.map +0 -1
@@ -27,4 +27,4 @@ export var ReportState;
27
27
  ReportState["Active"] = "active";
28
28
  ReportState["Deleted"] = "deleted";
29
29
  })(ReportState || (ReportState = {}));
30
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0LmludGVyZmFjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvcmVwb3J0cy9pbnRlcmZhY2VzL3JlcG9ydC5pbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsNkVBQTZFO0FBQzdFLG1FQUFtRTtBQUNuRSwrRUFBK0U7QUFDL0UsNEVBQTRFO0FBQzVFLG1DQUFtQztBQWlQbkMsNEVBQTRFO0FBQzVFLDJFQUEyRTtBQUMzRSx1REFBdUQ7QUFDdkQsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQWdEO0lBQzlFLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFO0lBQzdCLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFO0lBQy9CLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFO0lBQ2pDLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFO0lBQ3JDLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO0NBQ3BDLENBQUM7QUF5ckJGLE1BQU0sQ0FBTixJQUFZLGNBR1g7QUFIRCxXQUFZLGNBQWM7SUFDeEIsbUNBQWlCLENBQUE7SUFDakIsbUNBQWlCLENBQUE7QUFDbkIsQ0FBQyxFQUhXLGNBQWMsS0FBZCxjQUFjLFFBR3pCO0FBdUJELGdGQUFnRjtBQUNoRixpRkFBaUY7QUFDakYsNkVBQTZFO0FBQzdFLDBFQUEwRTtBQUMxRSxNQUFNLENBQU4sSUFBWSxXQUdYO0FBSEQsV0FBWSxXQUFXO0lBQ3JCLGdDQUFpQixDQUFBO0lBQ2pCLGtDQUFtQixDQUFBO0FBQ3JCLENBQUMsRUFIVyxXQUFXLEtBQVgsV0FBVyxRQUd0QiIsInNvdXJjZXNDb250ZW50IjpbIi8vIFRoZSBhc3NlbWJsZWQgcmVwb3J0IHN0cnVjdHVyZSByZXR1cm5lZCBieSBHRVQgL2FwaS9yZXBvcnRzLzppZCDigJQgY29tcG9zZWRcbi8vIHNlcnZlci1zaWRlIGZyb20gdGhlIG5vcm1hbGl6ZWQgdGFibGVzIChyZXBvcnRzIOKGkiByZXBvcnRfcGFnZXMg4oaSXG4vLyByZXBvcnRfY29tcG9uZW50cyArIHJlcG9ydF9maWx0ZXJzLCBwbHVzIHJlcG9ydF9maWx0ZXJfZ3JvdXBzKS4gQWxsIGtleXMgYXJlXG4vLyBjYW1lbENhc2U7IGNvbXBvbmVudCBgY29uZmlnYCBpcyB0aGUgc3RhbmRhcmQgZm9ybWF0IHRoZSByZW5kZXJlciBtYXBzIHRvXG4vLyBFQ2hhcnRzIG9wdGlvbnMgLyBGc0xpc3QgY29uZmlnLlxuXG5pbXBvcnQgeyBSZXBvcnRDaGFuZ2VQb2xhcml0eSB9IGZyb20gJy4uL2VudW1zL3JlcG9ydC1jaGFuZ2UtcG9sYXJpdHkuZW51bSc7XG5pbXBvcnQgeyBSZXBvcnRDaGFydENvbG9yIH0gZnJvbSAnLi4vZW51bXMvcmVwb3J0LWNoYXJ0LWNvbG9yLmVudW0nO1xuaW1wb3J0IHsgUmVwb3J0Q2hhcnREYXRhTGFiZWxzIH0gZnJvbSAnLi4vZW51bXMvcmVwb3J0LWNoYXJ0LWRhdGEtbGFiZWxzLmVudW0nO1xuaW1wb3J0IHsgUmVwb3J0Q2hhcnREYXRlTGFiZWwgfSBmcm9tICcuLi9lbnVtcy9yZXBvcnQtY2hhcnQtZGF0ZS1sYWJlbC5lbnVtJztcbmltcG9ydCB7IFJlcG9ydENoYXJ0TGluZVN0eWxlIH0gZnJvbSAnLi4vZW51bXMvcmVwb3J0LWNoYXJ0LWxpbmUtc3R5bGUuZW51bSc7XG5pbXBvcnQgeyBSZXBvcnRDaGFydE1hcmtTdGF0IH0gZnJvbSAnLi4vZW51bXMvcmVwb3J0LWNoYXJ0LW1hcmstc3RhdC5lbnVtJztcbmltcG9ydCB7IFJlcG9ydExpc3RDb2x1bW5Gb3JtYXQgfSBmcm9tICcuLi9lbnVtcy9yZXBvcnQtbGlzdC1jb2x1bW4tZm9ybWF0LmVudW0nO1xuaW1wb3J0IHsgUmVwb3J0TnVtYmVyVW5pdHMgfSBmcm9tICcuLi9lbnVtcy9yZXBvcnQtbnVtYmVyLXVuaXRzLmVudW0nO1xuaW1wb3J0IHsgUmVwb3J0VmFsdWVGb3JtYXQgfSBmcm9tICcuLi9lbnVtcy9yZXBvcnQtdmFsdWUtZm9ybWF0LmVudW0nO1xuXG4vLyBBIEJDUCA0NyBsYW5ndWFnZSB0YWcgbmFtaW5nIGhvdyBudW1iZXJzIGFuZCBkYXRlcyBhcmUgd3JpdHRlbiwgZS5nLiAnZnItQ0EnLlxuLy8gVGhlIHNldCBpcyBvcGVuICh0aGUgc2VydmVyJ3MgcHJvdmlkZXIgZGVjaWRlcyB3aGljaCBpdCBvZmZlcnMpLCBzbyB0aGlzIGlzIGFcbi8vIG5hbWVkIGFsaWFzIHJhdGhlciB0aGFuIGEgdW5pb24uXG5leHBvcnQgdHlwZSBSZXBvcnRMb2NhbGVUYWcgPSBzdHJpbmc7XG5cbi8vIEFuIElTTyA0MjE3IGN1cnJlbmN5IGNvZGUsIGUuZy4gJ0NBRCcuIE9wZW4gZm9yIHRoZSBzYW1lIHJlYXNvbi5cbmV4cG9ydCB0eXBlIFJlcG9ydEN1cnJlbmN5Q29kZSA9IHN0cmluZztcblxuZXhwb3J0IGludGVyZmFjZSBSZXBvcnQge1xuICBpZDogbnVtYmVyO1xuICBuYW1lOiBzdHJpbmc7XG4gIC8vIFRoZSByZXBvcnQncyBvd24gc3RvcmVkIElBTkEgem9uZSAoZS5nLiBBbWVyaWNhL05ld19Zb3JrKS4gbnVsbCA9IHRoZVxuICAvLyByZXBvcnQgZm9sbG93cyB0aGUgYXBwbGljYXRpb24ncyBkZWZhdWx0IHJlcG9ydGluZyB6b25lLlxuICB0aW1lem9uZTogc3RyaW5nIHwgbnVsbDtcbiAgLy8gVGhlIHpvbmUgZXZlcnkgZGF0ZSBmaWx0ZXIsIHRpbWUgYnVja2V0IGFuZCBkYXRlIGNlbGwgb2YgdGhpcyByZXBvcnQgdXNlcy5cbiAgLy8gUmVzb2x2ZWQgc2VydmVyLXNpZGU7IHRoZSBzYW1lIGZvciBldmVyeSB2aWV3ZXIsIGV4cG9ydCBhbmQgdGhlIGFzc2lzdGFudC5cbiAgLy8gT3B0aW9uYWwgb25seSBiZWNhdXNlIG9sZGVyIHNlcnZlcnMgb21pdCBpdDsgcmVzb2x2ZVJlcG9ydFRpbWV6b25lKCkgdGhlblxuICAvLyBmYWxscyBiYWNrIHRvIHRoZSByZXBvcnQncyBvd24gYHRpbWV6b25lYCwgdGhlbiB0aGUgYnJvd3NlcidzIHpvbmUuIFJlc29sdmVcbiAgLy8gdGhlIHpvbmUgZm9yIHJlbmRlcmluZyB0aHJvdWdoIHJlc29sdmVSZXBvcnRUaW1lem9uZSgpIChmb3JtYXQudHMpOyByZWFkIHRoZVxuICAvLyBmaWVsZCBkaXJlY3RseSBvbmx5IHRvIGNoZWNrIHdoZXRoZXIgdGhlIHNlcnZlciBzZW50IGl0LlxuICBlZmZlY3RpdmVUaW1lem9uZT86IHN0cmluZztcbiAgLy8gVGhlIHJlcG9ydCdzIG93biBzdG9yZWQgbG9jYWxlLiBudWxsID0gdGhlIHJlcG9ydCBmb2xsb3dzIHRoZSBkZWZhdWx0LlxuICBsb2NhbGU/OiBSZXBvcnRMb2NhbGVUYWcgfCBudWxsO1xuICAvLyBUaGUgbG9jYWxlIGV2ZXJ5IG51bWJlciBhbmQgZGF0ZSBvZiB0aGlzIHJlcG9ydCBpcyB3cml0dGVuIGluLCByZXNvbHZlZFxuICAvLyBzZXJ2ZXItc2lkZSAodGhlIHJlcG9ydCdzIG93biwgZWxzZSB0aGUgYXBwbGljYXRpb24ncyBkZWZhdWx0LCBlbHNlXG4gIC8vIGVuLVVTKS4gQWJzZW50IG9uIG9sZGVyIHNlcnZlcnMsIHdob3NlIHJlcG9ydHMgdGhlbiByZWFkIGVuLVVTLiBSZXNvbHZlIGl0XG4gIC8vIGZvciByZW5kZXJpbmcgdGhyb3VnaCByZXNvbHZlRm9ybWF0Q29udGV4dCgpIChmb3JtYXQudHMpLCBuZXZlciBkaXJlY3RseS5cbiAgZWZmZWN0aXZlTG9jYWxlPzogUmVwb3J0TG9jYWxlVGFnO1xuICAvLyBUaGUgcmVwb3J0J3Mgb3duIHN0b3JlZCBjdXJyZW5jeS4gbnVsbCA9IHRoZSByZXBvcnQgZm9sbG93cyB0aGUgZGVmYXVsdC5cbiAgY3VycmVuY3k/OiBSZXBvcnRDdXJyZW5jeUNvZGUgfCBudWxsO1xuICAvLyBUaGUgY3VycmVuY3kgbW9uZXkgYW1vdW50cyBhcmUgbGFiZWxlZCBpbiwgcmVzb2x2ZWQgbGlrZSBlZmZlY3RpdmVMb2NhbGVcbiAgLy8gKGZhbGxpbmcgYmFjayB0byB0aGUgbG9jYWxlJ3Mgb3duIGN1cnJlbmN5LCB0aGVuIFVTRCkuIEEgbGFiZWwgb25seTpcbiAgLy8gYW1vdW50cyBhcmUgbmV2ZXIgY29udmVydGVkLlxuICBlZmZlY3RpdmVDdXJyZW5jeT86IFJlcG9ydEN1cnJlbmN5Q29kZTtcbiAgLy8gSG93IHRoZSBzZXJ2ZXIgc2VuZHMgYSBwZXJjZW50IG1lYXN1cmU6ICdyYXRpbycgPSBhIDAtMSByYXRpbyAoMC4zODUgcmVhZHNcbiAgLy8gMzguNSUpLiBBYnNlbnQgb24gb2xkZXIgc2VydmVycywgd2hvc2UgcGVyY2VudCB2YWx1ZXMgYXJlIGFscmVhZHkgeDEwMFxuICAvLyAoMzguNSByZWFkcyAzOC41JSkuXG4gIHBlcmNlbnRGb3JtYXQ/OiAncmF0aW8nO1xuICAvLyBSZXBvcnQtbGV2ZWwgY29uZmlnOiB0eXBvZ3JhcGhpYyBzdHlsZXMsIGV0Yy4gKGNhbWVsQ2FzZSBKU09OIGNvbHVtbikuXG4gIGNvbmZpZzogUmVwb3J0Q29uZmlnO1xuICAvLyBUaGUgcGFnZSBpbiBJTkNIRVMgKHRoZSByZXBvcnQncyBuYXRpdmUgdW5pdCDigJQgUERGcyBhbmQgUG93ZXJQb2ludCBhcmVcbiAgLy8gaW5jaC1iYXNlZCwgc28gZXhwb3J0cyBhcmUgZGltZW5zaW9uYWxseSBleGFjdCkuIE9yaWVudGF0aW9uIGlzIG5vdCBhIGZpZWxkXG4gIC8vIG9mIGl0cyBvd246IGEgcGFnZSB3aWRlciB0aGFuIGl0IGlzIHRhbGwgSVMgbGFuZHNjYXBlLlxuICBwYWdlV2lkdGg6IG51bWJlcjtcbiAgcGFnZUhlaWdodDogbnVtYmVyO1xuICBwYWdlczogUmVwb3J0UGFnZVtdO1xuICAvLyBUaGUgaGVhZGVyIGFuZCBmb290ZXI6IHRoZSByZXBvcnQncyBtYXN0ZXIgcGFnZSwgd2hvc2UgY29tcG9uZW50cyBkcmF3XG4gIC8vIHVuZGVyIGV2ZXJ5IHBhZ2UgdGhhdCBkb2VzIG5vdCBoaWRlIHRoZW0gKFBvd2VyUG9pbnQncyBzbGlkZSBtYXN0ZXIpLiBOdWxsXG4gIC8vIHVudGlsIGFueXRoaW5nIGhhcyBiZWVuIHBsYWNlZCBpbiB0aGVtLlxuICBtYXN0ZXI6IFJlcG9ydE1hc3RlciB8IG51bGw7XG4gIGZpbHRlckdyb3VwczogUmVwb3J0RmlsdGVyR3JvdXBbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZXBvcnRNYXN0ZXIge1xuICBpZDogbnVtYmVyO1xuICBjb21wb25lbnRzOiBSZXBvcnRDb21wb25lbnRbXTtcbn1cblxuLy8gSG93IHRoZSBvcGVuIHJlcG9ydCB3cml0ZXMgaXRzIG51bWJlcnMgYW5kIGRhdGVzLCByZXNvbHZlZCBvbmNlIHBlciByZXBvcnRcbi8vIChyZXNvbHZlRm9ybWF0Q29udGV4dCkgYW5kIHJlYWQgYnkgdGhlIHZpZXdlciwgdGhlIFBERiBhbmQgUG93ZXJQb2ludCBhbGlrZS5cbi8vIE5ldmVyIHRoZSBicm93c2VyJ3MgbG9jYWxlLlxuZXhwb3J0IGludGVyZmFjZSBSZXBvcnRGb3JtYXRDb250ZXh0IHtcbiAgbG9jYWxlOiBSZXBvcnRMb2NhbGVUYWc7XG4gIGN1cnJlbmN5OiBSZXBvcnRDdXJyZW5jeUNvZGU7XG4gIC8vIFdoZXRoZXIgYSBwZXJjZW50IG1lYXN1cmUgYXJyaXZlcyBhcyBhIDAtMSByYXRpbyAodGhlIHJlcG9ydCdzXG4gIC8vIHBlcmNlbnRGb3JtYXQpLiBBbiBvbGRlciBzZXJ2ZXIgc2VuZHMgaXQgYWxyZWFkeSB4MTAwLlxuICByYXRpb1BlcmNlbnQ6IGJvb2xlYW47XG59XG5cbi8vIE9uZSBsb2NhbGUgdGhlIHNlcnZlciBvZmZlcnMsIHdpdGggdGhlIGN1cnJlbmN5IGEgcmVwb3J0IGluIGl0IHVzZXMgd2hlbiBpdFxuLy8gbmFtZXMgbm9uZSBvZiBpdHMgb3duLlxuZXhwb3J0IGludGVyZmFjZSBSZXBvcnRMb2NhbGVPcHRpb24ge1xuICBsb2NhbGU6IFJlcG9ydExvY2FsZVRhZztcbiAgZGVmYXVsdEN1cnJlbmN5OiBSZXBvcnRDdXJyZW5jeUNvZGU7XG59XG5cbi8vIEdFVCByZXBvcnRzL2xvY2FsZXM6IHdoYXQgdGhlIHJlcG9ydCBzZXR0aW5ncycgTG9jYWxlIGFuZCBDdXJyZW5jeSBzZWxlY3RzXG4vLyBvZmZlci5cbmV4cG9ydCBpbnRlcmZhY2UgUmVwb3J0TG9jYWxlcyB7XG4gIGRlZmF1bHRMb2NhbGU6IFJlcG9ydExvY2FsZVRhZztcbiAgb3B0aW9uczogUmVwb3J0TG9jYWxlT3B0aW9uW107XG4gIGN1cnJlbmNpZXM6IFJlcG9ydEN1cnJlbmN5Q29kZVtdO1xufVxuXG4vLyBUaGUgZGVwdGggb2YgdGhlIGhlYWRlciBiYW5kICh0b3Agb2YgZXZlcnkgcGFnZSkgYW5kIHRoZSBmb290ZXIgYmFuZCAoYm90dG9tXG4vLyBvZiBldmVyeSBwYWdlKSwgaW4gSU5DSEVTLiBUaGUgYmFuZHMgaG9sZCBubyBjb250ZW50IG9mIHRoZWlyIG93biDigJQgdGhlXG4vLyBtYXN0ZXIncyBjb21wb25lbnRzIHNpdCBpbiB0aGVtIOKAlCB0aGV5IGFyZSB0aGUgcmVzZXJ2ZWQgbWFyZ2lucyB0aGUgZWRpdG9yXG4vLyBkcmF3cyBhcyBndWlkZXMgYW5kIHNuYXBzIHRvLiBBbHdheXMgYXJyaXZlcyByZXNvbHZlZCAoMCA9IG5vIGJhbmQpLlxuZXhwb3J0IGludGVyZmFjZSBSZXBvcnRIZWFkZXJGb290ZXIge1xuICBoZWFkZXJIZWlnaHQ6IG51bWJlcjtcbiAgZm9vdGVySGVpZ2h0OiBudW1iZXI7XG59XG5cbi8vIFJlcG9ydC1sZXZlbCBzdHlsaW5nLiBTaXplcyBhcmUgaW4gUE9JTlRTICgxLzcyXCIpIOKAlCB0aGUgcmVwb3J0J3MgdHlwb2dyYXBoeVxuLy8gbWFwcyAxOjEgdG8gUERGICg3MnB0L2luKSBhbmQgUG93ZXJQb2ludCAocG9pbnQgZm9udCBzaXplcyksIHNvIGEgcG9pbnRcbi8vIHZhbHVlIGlzIGRpbWVuc2lvbmFsbHkgZXhhY3Qgb24gc2NyZWVuIGFuZCBpbiBldmVyeSBleHBvcnQuXG5leHBvcnQgaW50ZXJmYWNlIFJlcG9ydENvbmZpZyB7XG4gIHN0eWxlcz86IFJlcG9ydFN0eWxlcztcbiAgLy8gVGhlIHJlcG9ydCdzIGdyb3VwLWJ5IGNvbnRyb2wuIE9wdGlvbmFsIG9uIHRoZSB0eXBlIGJlY2F1c2UgYSBSZXBvcnRDb25maWdcbiAgLy8gbGl0ZXJhbCBuZWVkIG5vdCBjYXJyeSBpdDsgdGhlIEFQSSBhbHdheXMgc2VuZHMgaXQsIHJlc29sdmVkLlxuICBncm91cEJ5PzogUmVwb3J0R3JvdXBCeTtcbiAgLy8gUmVzb2x2ZWQgYnkgdGhlIEFQSSBsaWtlIGdyb3VwQnkuXG4gIGhlYWRlckZvb3Rlcj86IFJlcG9ydEhlYWRlckZvb3Rlcjtcbn1cblxuLy8gVGhlIHJlcG9ydCdzIGdyb3VwLWJ5IGNvbnRyb2wg4oCUIHRoZSBvbmUgc3dpdGNoIHRoYXQgcmUtYnVja2V0cyBldmVyeVxuLy8gdGltZS1zZXJpZXMgY2hhcnQgb24gdGhlIHJlcG9ydCBiZXR3ZWVuIGRheSwgd2VlaywgbW9udGgsIHF1YXJ0ZXIgYW5kIHllYXIuXG4vL1xuLy8gSXQgaXMgTk9UIGEgZmlsdGVyOiBhIGZpbHRlciBuYXJyb3dzIHdoaWNoIHJvd3MgYXJlIGNvdW50ZWQsIHRoaXMgY2hhbmdlcyBob3dcbi8vIHRoZSBzdXJ2aXZpbmcgcm93cyBhcmUgYnVja2V0ZWQuIEl0IHNoYXJlcyB0aGUgcmVwb3J0J3MgZmlsdGVyIGJhciBiZWNhdXNlXG4vLyB0aGF0IGlzIHRoZSBvbmUgcm93IG9mIGNvbnRyb2xzIGEgdmlld2VyIHJlYWRzIGEgcmVwb3J0IHRocm91Z2gg4oCUIHRoZVxuLy8gc2VwYXJhdGlvbiB0aGF0IG1hdHRlcnMgaXMgaW4gdGhlIG1vZGVsLCBub3QgaW4gd2hlcmUgdGhlIGNvbnRyb2wgaXMgcGFpbnRlZC5cbi8vXG4vLyBBbHdheXMgYXJyaXZlcyBSRVNPTFZFRCAodGhlIGJhY2tlbmQgZmlsbHMgYW4gYWJzZW50IG9yIHBhcnRpYWwgc3RvcmVkIGJsb2NrXG4vLyBpbiBmcm9tIGl0cyBvd24gZGVmYXVsdHMpLCBzbyB0aGVyZSBpcyBub3RoaW5nIHRvIGRlZmF1bHQgaGVyZSDigJQgcmVuZGVyIHdoYXRcbi8vIHlvdSBhcmUgZ2l2ZW4uXG5leHBvcnQgaW50ZXJmYWNlIFJlcG9ydEdyb3VwQnkge1xuICBlbmFibGVkOiBib29sZWFuO1xuICBsYWJlbDogc3RyaW5nO1xuICBncmFudWxhcml0aWVzOiBDaGFydEdyYW51bGFyaXR5W107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVwb3J0U3R5bGVzIHtcbiAgaGVhZGluZz86IHsgc2l6ZT86IG51bWJlciB9O1xufVxuXG4vLyBDb250ZW50IHBhZGRpbmcgYXJvdW5kIGEgY29tcG9uZW50J3MgYm9keSwgaW4gSU5DSEVTICh0aGUgZ2VvbWV0cnkgdW5pdCkuXG5leHBvcnQgaW50ZXJmYWNlIENvbXBvbmVudFBhZGRpbmcge1xuICB0b3A/OiBudW1iZXI7XG4gIHJpZ2h0PzogbnVtYmVyO1xuICBib3R0b20/OiBudW1iZXI7XG4gIGxlZnQ/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVwb3J0UGFnZSB7XG4gIGlkOiBudW1iZXI7XG4gIG5hbWU6IHN0cmluZyB8IG51bGw7XG4gIG9yZGVyOiBudW1iZXI7XG4gIC8vIFRoZSBwYWdlIG9wdHMgb3V0IG9mIHRoZSByZXBvcnQncyBoZWFkZXIgYW5kIGZvb3RlciAoYSB0aXRsZSBwYWdlKS5cbiAgbWFzdGVySGlkZGVuOiBib29sZWFuO1xuICBjb21wb25lbnRzOiBSZXBvcnRDb21wb25lbnRbXTtcbn1cblxuLy8gJ3RleHQnIGlzIGF1dGhvcmVkIHJpY2ggdGV4dCB3aXRoIG5vIHF1ZXJ5IGJlaGluZCBpdCDigJQgaXQgbmV2ZXIgZmV0Y2hlcyBkYXRhLlxuZXhwb3J0IHR5cGUgUmVwb3J0Q29tcG9uZW50VHlwZSA9ICdjaGFydCcgfCAnbGlzdCcgfCAna3BpJyB8ICd0ZXh0JztcblxuZXhwb3J0IGludGVyZmFjZSBSZXBvcnRDb21wb25lbnQge1xuICBpZDogbnVtYmVyO1xuICB0eXBlOiBSZXBvcnRDb21wb25lbnRUeXBlO1xuICB0aXRsZTogc3RyaW5nIHwgbnVsbDtcbiAgLy8gR2VvbWV0cnkgaW4gSU5DSEVTOiBhYnNvbHV0ZSBwb3NpdGlvbiBvbiB0aGUgcGFnZSBjYW52YXMuXG4gIHg6IG51bWJlcjtcbiAgeTogbnVtYmVyO1xuICB3OiBudW1iZXI7XG4gIGg6IG51bWJlcjtcbiAgLy8gSGVpZ2h0IG1vZGUsIERFUklWRUQgZnJvbSB0eXBlIHNlcnZlci1zaWRlIChub3Qgc3RvcmVkLCByZWFkLW9ubHkpOiBsaXN0c1xuICAvLyBhbmQgS1BJIHRpbGVzIGFyZSBhdXRvICh0aGUgYm94IHNpemVzIHRvIGl0cyBjb250ZW50LCBgaGAgaWdub3JlZCk7IGNoYXJ0c1xuICAvLyBhcmUgYWx3YXlzIGZpeGVkICh1c2UgYGhgKSBzbyB0aGV5IGZpdCB0aGUgYm94IGFuZCBuZXZlciBvdmVyZmxvdy5cbiAgYXV0b0hlaWdodDogYm9vbGVhbjtcbiAgLy8gVGhlIHN0b3JlZCBTUUwgb2YgYSBsZWdhY3kgc3FsLW1vZGUgY29tcG9uZW50LiBOVUxMIGZvciBhIGRlcml2ZWQgb25lLFxuICAvLyB3aG9zZSBzdGF0ZW1lbnQgZG9lcyBub3QgZXhpc3QgdW50aWwgaXRzIGRvY3VtZW50IGlzIGNvbXBpbGVkIOKAlCB0aGUgU1FMIHRhYlxuICAvLyBmZXRjaGVzIHRoYXQgc2VwYXJhdGVseSAoc2VlIFJlcG9ydENvbXBvbmVudFNxbCkuXG4gIHNxbDogc3RyaW5nIHwgbnVsbDtcbiAgY29uZmlnOiBDaGFydENvbmZpZyAmIExpc3RDb25maWcgJiBLcGlDb25maWcgJiBUZXh0Q29uZmlnICYgQ29tcG9uZW50TGF5b3V0Q29uZmlnICYgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIGZpbHRlcnM6IFJlcG9ydEZpbHRlcltdO1xufVxuXG4vLyBXaGF0IHRoZSBTUUwgdGFiIGZldGNoZXM6IHRoZSBzdGF0ZW1lbnQgYSBjb21wb25lbnQgcnVucy5cbi8vXG4vLyBGb3IgYSBkZXJpdmVkIGNvbXBvbmVudCBgYmFzZWxpbmVgIGlzIHRydWUgYW5kIGBzcWxgIGlzIHdoYXQgaXRzIGRvY3VtZW50XG4vLyBjb21waWxlcyB0byB3aXRoIE5PIHZpZXdlciBzdGF0ZSDigJQgbm8gZmlsdGVycywgdGhlIGF1dGhvcmVkIGdyYWluLiBUaGVcbi8vIG51bWJlcnMgb24gc2NyZWVuIGNvbWUgZnJvbSB0aGF0IHN0YXRlbWVudCBwbHVzIHdoYXRldmVyIHRoZSB2aWV3ZXIgcGlja2VkLFxuLy8gc28gdGhlIHR3byBjYW4gbGVnaXRpbWF0ZWx5IGRpZmZlciBhbmQgdGhlIHRhYiBzYXlzIHNvIHJhdGhlciB0aGFuIGltcGx5aW5nXG4vLyB0aGV5IG1hdGNoLlxuLy9cbi8vIGB0aW1lem9uZWAgaXMgdGhlIElBTkEgem9uZSB0aGUgc3RhdGVtZW50IHdhcyBjb21waWxlZCBpbjogdGhlIHJlcG9ydCdzXG4vLyBlZmZlY3RpdmUgem9uZS4gT3B0aW9uYWwgYmVjYXVzZSBvbGRlciBzZXJ2ZXJzIG9taXQgaXQ7IHRoZXkgY29tcGlsZWQgaW4gVVRDLlxuLy9cbi8vIGBlcnJvcmAgaXMgbm90IGEgZmFpbHVyZSBvZiB0aGUgcmVxdWVzdDogYSBkb2N1bWVudCB0aGF0IG5vIGxvbmdlciBjb21waWxlc1xuLy8gaXMgcHJlY2lzZWx5IHdoYXQgc29tZW9uZSBvcGVucyB0aGlzIHRhYiB0byBkaXNjb3Zlciwgc28gaXQgYXJyaXZlcyBhcyBhXG4vLyBtZXNzYWdlIHRvIHJlbmRlciB3aXRoIGBlcnJvclR5cGVgIG5hbWluZyB3aGljaCBraW5kICgnc3RhbGUtcXVlcnknIG9yXG4vLyAnc2Vuc2l0aXZlLWNvbHVtbicpLCBhbmQgYHNxbGAgbnVsbC5cbmV4cG9ydCBpbnRlcmZhY2UgUmVwb3J0Q29tcG9uZW50U3FsIHtcbiAgc3FsOiBzdHJpbmcgfCBudWxsO1xuICBvcmlnaW46ICdzcWwnIHwgJ2RicScgfCAnZGVyaXZlZCc7XG4gIGJhc2VsaW5lOiBib29sZWFuO1xuICB0aW1lem9uZT86IHN0cmluZztcbiAgZXJyb3I6IHN0cmluZyB8IG51bGw7XG4gIGVycm9yVHlwZTogc3RyaW5nIHwgbnVsbDtcbn1cblxuLy8gQSB0ZXh0IGJsb2NrJ3MgY29udGVudDogYW4gaHRtbCBmcmFnbWVudCB0aGUgc2VydmVyIGhhcyBhbHJlYWR5IHJlYnVpbHQgZnJvbVxuLy8gYW4gYWxsb3dsaXN0LCB3aGljaCBtYXkgY2Fycnkge3twYWdlLm51bWJlcn19LCB7e3BhZ2UubmFtZX19IGFuZFxuLy8ge3tyZXBvcnQubmFtZX19IHRva2VucyAoc2VlIHRleHQudHMpLlxuZXhwb3J0IGludGVyZmFjZSBUZXh0Q29uZmlnIHtcbiAgaHRtbD86IHN0cmluZztcbn1cblxuLy8gQ3Jvc3MtdHlwZSBsYXlvdXQvc3R5bGUga2V5cyBjYXJyaWVkIGluIGEgY29tcG9uZW50J3MgY29uZmlnIChhbG9uZ3NpZGUgdGhlXG4vLyB0eXBlLXNwZWNpZmljIGNoYXJ0L2xpc3Qva3BpIGtleXMpLlxuZXhwb3J0IGludGVyZmFjZSBDb21wb25lbnRMYXlvdXRDb25maWcge1xuICBwYWRkaW5nPzogQ29tcG9uZW50UGFkZGluZztcbn1cblxuLy8gVGhlIHByZXNlbnRhdGlvbiBzZXR0aW5ncyBhIGNvbXBvbmVudCdzIHNldHRpbmdzIGRpYWxvZyBlZGl0cy4gVGl0bGUgYW5kXG4vLyBwYWRkaW5nIGFyZSBub3QgcGFydCBvZiB3aGF0IHRoZSBjb21wb25lbnQgcXVlcmllcywgc28gYSBjaGFuZ2UgdG8gdGhlbVxuLy8gcmVwYWludHMgd2l0aG91dCByZS1ydW5uaW5nIGFueXRoaW5nLiBBIGRlcml2ZWQgS1BJJ3MgY2FyZCBrZXlzIGFyZSBzZW50XG4vLyB0b286IHRoZSBzZXJ2ZXIgY29tcHV0ZXMgdGhlIHRhcmdldCdzIHByb2dyZXNzIGFuZCB0aGUgc3BhcmtsaW5lJ3MgcG9pbnRzXG4vLyB3aXRoIHRoZSBkYXRhLCBzbyBhIGNoYW5nZSB0byB0aGVtIHJlbG9hZHMgaXQuXG5leHBvcnQgaW50ZXJmYWNlIENvbXBvbmVudFNldHRpbmdzIHtcbiAgdGl0bGU6IHN0cmluZztcbiAgcGFkZGluZzogQ29tcG9uZW50UGFkZGluZztcbiAga3BpPzogS3BpQ2FyZFNldHRpbmdzO1xufVxuXG4vLyBBIEtQSSdzIGNhcmQga2V5cy4gVGhlIGRpYWxvZyBzZW5kcyB0aGVtIChudWxsIHJlbW92ZXMgYSBrZXksIGluY3JlYXNlSXNcbi8vIG51bGwgcmVhZHMgZ29vZCksIGFuZCBDb21wb25lbnRTZXR0aW5ncy5rcGkgY2FycmllcyB0aGVtIGFzIHRoZSBzZXJ2ZXJcbi8vIHNhdmVkIHRoZW0sIHJlYWQgYmFjayBmcm9tIHRoZSBjb25maWcgaXQgcmV0dXJucy5cbmV4cG9ydCBpbnRlcmZhY2UgS3BpQ2FyZFNldHRpbmdzIHtcbiAgaW5jcmVhc2VJczogUmVwb3J0Q2hhbmdlUG9sYXJpdHkgfCBudWxsO1xuICB0YXJnZXQ6IEtwaVRhcmdldENvbmZpZyB8IG51bGw7XG4gIHNwYXJrbGluZTogS3BpU3BhcmtsaW5lQ29uZmlnIHwgbnVsbDtcbn1cblxuLy8gV2hlcmUgYSBjaGFydCdzIGxlZ2VuZCBzaXRzIHJlbGF0aXZlIHRvIHRoZSBwbG90LCBvciAnaGlkZGVuJyB0byBkcm9wIGl0LlxuZXhwb3J0IHR5cGUgTGVnZW5kUG9zaXRpb24gPSAndG9wJyB8ICdib3R0b20nIHwgJ2xlZnQnIHwgJ3JpZ2h0JyB8ICdoaWRkZW4nO1xuXG5leHBvcnQgdHlwZSBDaGFydEdyYW51bGFyaXR5ID0gJ2RheScgfCAnd2VlaycgfCAnbW9udGgnIHwgJ3F1YXJ0ZXInIHwgJ3llYXInO1xuXG4vLyBIb3cgZWFjaCBncmFudWxhcml0eSByZWFkcyBpbiB0aGUgZ3JvdXAtYnkgY29udHJvbCBhbmQgb24gYW4gZXhwb3J0IGNvdmVyXG4vLyBzaGVldC4gV0hJQ0ggb2YgdGhlbSBhIGdpdmVuIHJlcG9ydCBvZmZlcnMgY29tZXMgZnJvbSBpdHMgUmVwb3J0R3JvdXBCeTtcbi8vIHRoaXMgaXMgb25seSB0aGUgbmFtaW5nLiAneWVhcicgcmVhZHMgYXMgXCJBbm51YWxseVwiLlxuZXhwb3J0IGNvbnN0IEdSQU5VTEFSSVRZX09QVElPTlM6IHsgdmFsdWU6IENoYXJ0R3JhbnVsYXJpdHk7IG5hbWU6IHN0cmluZyB9W10gPSBbXG4gIHsgdmFsdWU6ICdkYXknLCBuYW1lOiAnRGF5JyB9LFxuICB7IHZhbHVlOiAnd2VlaycsIG5hbWU6ICdXZWVrJyB9LFxuICB7IHZhbHVlOiAnbW9udGgnLCBuYW1lOiAnTW9udGgnIH0sXG4gIHsgdmFsdWU6ICdxdWFydGVyJywgbmFtZTogJ1F1YXJ0ZXInIH0sXG4gIHsgdmFsdWU6ICd5ZWFyJywgbmFtZTogJ0FubnVhbGx5JyB9LFxuXTtcblxuLy8gVGhlIGNoYXJ0IHR5cGVzIHRoYXQgcGxvdCBzZXJpZXMgYWdhaW5zdCBhIGNhdGVnb3J5IGFuZCBhIHZhbHVlIGF4aXMsIGFuZCBzb1xuLy8gdGhlIHR5cGVzIGEgbWVhc3VyZSdzIG93biBzZXJpZXMgY2FuIGJlIGRyYXduIGFzLiBBIHdhdGVyZmFsbCBoYXMgdGhlIHNhbWVcbi8vIGF4ZXMgYnV0IGlzIG5vdCBvbmUgb2YgdGhlbTogaXQgZHJhd3MgaXRzIG9uZSBtZWFzdXJlIGFzIGZsb2F0aW5nIHN0ZXBzLlxuZXhwb3J0IHR5cGUgQXhpc0NoYXJ0VHlwZSA9ICdiYXInIHwgJ2xpbmUnIHwgJ2FyZWEnO1xuXG4vLyBXaGF0IG9uZSBiYXIgb2YgYSB3YXRlcmZhbGwgZG9lcyB0byB0aGUgcnVubmluZyB0b3RhbCDigJQgZWFjaCBpcyBkcmF3biBpbiBpdHNcbi8vIG93biBjb2xvci4gVGhlIGNsb3NpbmcgdG90YWwgaXMgdGhlIGxhc3QgYmFyLCBzdGFuZGluZyBvbiB6ZXJvLlxuZXhwb3J0IHR5cGUgV2F0ZXJmYWxsU3RlcEtpbmQgPSAncmlzZScgfCAnZmFsbCcgfCAndG90YWwnO1xuXG5leHBvcnQgaW50ZXJmYWNlIENoYXJ0Q29uZmlnIHtcbiAgLy8gQSB3YXRlcmZhbGwgdGFrZXMgT05FIG1lYXN1cmUgd2hvc2UgdmFsdWUgcGVyIGNhdGVnb3J5IGlzIGhvdyBmYXIgdGhlXG4gIC8vIHJ1bm5pbmcgdG90YWwgbW92ZXMgdGhlcmU6IGVhY2ggYmFyIHN0YXJ0cyB3aGVyZSB0aGUgb25lIGJlZm9yZSBpdCBlbmRlZCxcbiAgLy8gYW5kIGEgY2xvc2luZyBUb3RhbCBiYXIgc2hvd3MgdGhlIHN1bS5cbiAgY2hhcnRUeXBlPzogQXhpc0NoYXJ0VHlwZSB8ICd3YXRlcmZhbGwnIHwgJ3BpZScgfCAnZG9udXQnO1xuICAvLyBGb3Iga2luZCAndGltZScsIHRoZSBzZXJ2ZXIgYnVja2V0cyB0aGUgcmF3IGRhdGV0aW1lIGNvbHVtbiB0byBgZ3JhbnVsYXJpdHlgXG4gIC8vIGluIHRoZSByZXBvcnQncyB0aW1lem9uZSAodGhlIFNRTCBleHBvc2VzIHRoZSByYXcgY29sdW1uLCB1bmJ1Y2tldGVkKS5cbiAgLy8gZGF0ZUxhYmVsIHdyaXRlcyBhIHRpbWUgYXhpcydzIHBlcmlvZCBsYWJlbHMgc2hvcnQgKCdNYXknLCB0aGUgZGVmYXVsdCksXG4gIC8vIGxvbmcgKCdNYXkgMjAyNicpIG9yIG51bWVyaWMgKCcyMDI2LTA1Jyk7IGEgY2F0ZWdvcnkgYXhpcyBpZ25vcmVzIGl0LlxuICB4QXhpcz86IHtcbiAgICBjb2x1bW46IHN0cmluZztcbiAgICBraW5kPzogJ2NhdGVnb3J5JyB8ICd0aW1lJztcbiAgICBncmFudWxhcml0eT86IENoYXJ0R3JhbnVsYXJpdHk7XG4gICAgbGFiZWw/OiBzdHJpbmc7XG4gICAgZGF0ZUxhYmVsPzogUmVwb3J0Q2hhcnREYXRlTGFiZWw7XG4gIH07XG4gIG1lYXN1cmVzPzogQ2hhcnRNZWFzdXJlW107XG4gIC8vIEVhY2ggdmFsdWUgb2YgdGhpcyBjb2x1bW4gYmVjb21lcyBpdHMgb3duIHNlcmllcy4gSXQgY2FycmllcyBubyBsYWJlbDogdGhlXG4gIC8vIGxlZ2VuZCBuYW1lcyB0aGUgdmFsdWVzIHRoZW1zZWx2ZXMuXG4gIHNwbGl0Qnk/OiB7IGNvbHVtbjogc3RyaW5nIH07XG4gIC8vIFNpbmdsZS1kaW1lbnNpb24gYmFyIGNoYXJ0cyBvbmx5OiBjb2xvciBlYWNoIGJhciBieSBpdHMgb3duIGNhdGVnb3J5IGFuZFxuICAvLyBzaG93IGEgbGVnZW5kLCBXSVRIT1VUIHNwbGl0dGluZyBpbnRvIG11bHRpcGxlIHNlcmllcyAod2hpY2ggc2xpdmVycyB0aGVcbiAgLy8gYmFycykuIHYxIGV4cGVjdHMgY29sb3JCeS5jb2x1bW4gPT09IHhBeGlzLmNvbHVtbi4gSWdub3JlZCB3aGVuIHNwbGl0QnkgaXNcbiAgLy8gc2V0IG9yIHRoZSBjaGFydCBpc24ndCBhIGJhciBjaGFydC5cbiAgY29sb3JCeT86IHsgY29sdW1uOiBzdHJpbmc7IGxhYmVsPzogc3RyaW5nIH07XG4gIG9yaWVudGF0aW9uPzogJ3ZlcnRpY2FsJyB8ICdob3Jpem9udGFsJztcbiAgc3RhY2tlZD86IGJvb2xlYW47XG4gIC8vIFN0YWNrcyB0aGUgcHJpbWFyeSBheGlzJ3MgYmFyIGFuZCBhcmVhIHNlcmllcyBhcyBzaGFyZXMgb2YgZWFjaFxuICAvLyBjYXRlZ29yeSdzIHRvdGFsLCBzbyBldmVyeSBzdGFjayByZWFjaGVzIDEwMCUuIFRoZSB2aWV3ZXIgY29tcHV0ZXMgdGhlXG4gIC8vIHNoYXJlcyBmcm9tIHRoZSByb3dzIGl0IHJlY2VpdmVzLCBhZnRlciB0aGUgZmlsdGVycyByYW47IHRoZSByb3dzIGFuZCB0aGVcbiAgLy8gQ1NWIGtlZXAgdGhlIHJhdyB2YWx1ZXMuIFRoZSB2YWx1ZSBheGlzIHRoZW4gYWx3YXlzIHJ1bnMgMCB0byAxMDAlIChmcm9tXG4gIC8vIC0xMDAlIHdoZW4gYSBzaGFyZSBpcyBuZWdhdGl2ZSkuXG4gIHBlcmNlbnRTdGFja2VkPzogYm9vbGVhbjtcbiAgLy8gVmFsdWVzIHByaW50ZWQgYmVzaWRlIHRoZSBwb2ludHMgb2YgYSBiYXIsIGxpbmUgb3IgYXJlYSBzZXJpZXM6IGV2ZXJ5XG4gIC8vIHBvaW50IChhbGwpLCBlYWNoIHNlcmllcycgbGF0ZXN0IHBvaW50IChsYXN0KSwgb3IgZXZlcnkgcG9pbnQgd2hvc2UgbGFiZWxcbiAgLy8gZml0cyB3aXRob3V0IG92ZXJsYXBwaW5nIGFub3RoZXIgKGF1dG8pLiBPbWl0dGVkIG9yIG5vbmUsIG5vIGxhYmVscy4gQVxuICAvLyBwaWUsIGEgZG9udXQgYW5kIGEgd2F0ZXJmYWxsIG5ldmVyIHByaW50IHRoZW0uXG4gIGRhdGFMYWJlbHM/OiBSZXBvcnRDaGFydERhdGFMYWJlbHM7XG4gIC8vIFRoZSBwcmltYXJ5IHZhbHVlIGF4aXMncyB0aXRsZSBhbmQgcmFuZ2UuIEV2ZXJ5IHNlcmllcyBpcyBwbG90dGVkIGFnYWluc3RcbiAgLy8gaXQgdW5sZXNzIGl0cyBtZWFzdXJlIGlzIHNlY29uZGFyeS5cbiAgdmFsdWVBeGlzPzogQ2hhcnRWYWx1ZUF4aXM7XG4gIC8vIFRoZSBzZWNvbmQgdmFsdWUgYXhpcywgb24gdGhlIHJpZ2h0LCB0aGF0IHNlY29uZGFyeSBtZWFzdXJlcyBwbG90IGFnYWluc3QuXG4gIHNlY29uZGFyeUF4aXM/OiBDaGFydFZhbHVlQXhpcztcbiAgLy8gTGFiZWxlZCBsaW5lcyBhY3Jvc3MgdGhlIHBsb3QgYXQgYSBjb25zdGFudCB2YWx1ZSwgb3IgYmFuZHMgYmV0d2VlbiB0d29cbiAgLy8gdmFsdWVzLCBhdCBtb3N0IDUuIFZlcnRpY2FsIGF4aXMgY2hhcnRzIGFuZCB3YXRlcmZhbGxzIG9ubHkuXG4gIHJlZmVyZW5jZXM/OiBDaGFydFJlZmVyZW5jZVtdO1xuICBsZWdlbmQ/OiBMZWdlbmRQb3NpdGlvbjtcbiAgc29ydD86IFJlcG9ydFNvcnQ7XG4gIGxpbWl0PzogbnVtYmVyO1xufVxuXG4vLyBBIHZhbHVlIGF4aXMncyB0aXRsZSBhbmQgcmFuZ2UuIEVhY2ggYm91bmQgbGVmdCBvdXQgaXMgcGlja2VkIGZyb20gdGhlIGRhdGEsXG4vLyBhbmQgdGhlIHRpY2sgc3RlcCB3aXRob3V0IGFuIGludGVydmFsLiBJdHMgdGlja3MgdGFrZSB0aGUgbnVtYmVyIGZvcm1hdCBvZlxuLy8gdGhlIG1lYXN1cmVzIHBsb3R0ZWQgYWdhaW5zdCBpdC5cbmV4cG9ydCBpbnRlcmZhY2UgQ2hhcnRWYWx1ZUF4aXMge1xuICBsYWJlbD86IHN0cmluZztcbiAgbWluPzogbnVtYmVyO1xuICBtYXg/OiBudW1iZXI7XG4gIGludGVydmFsPzogbnVtYmVyO1xufVxuXG4vLyBBIHJlZmVyZW5jZSBkcmF3biBhY3Jvc3MgYSBjaGFydCdzIHBsb3Q6IGEgbGluZSBhdCBgdmFsdWVgLCBvciB3aXRoIGB0b2AgYVxuLy8gYmFuZCBiZXR3ZWVuIHRoZSB0d28sIGxhYmVsZWQgd2l0aCBgbGFiZWxgLiBUaGUgdmFsdWUgaXMgb25lIHRoZSB1c2VyIG9yXG4vLyB0aGUgbW9kZWwgc3RhdGVzLCBuZXZlciBvbmUgcmVhZCBvZmYgdGhlIGRhdGEuIHNlY29uZGFyeSBwbG90cyBpdCBhZ2FpbnN0XG4vLyB0aGUgc2Vjb25kIHZhbHVlIGF4aXMsIHdoZW4gdGhlIGNoYXJ0IGhhcyBvbmUuXG5leHBvcnQgaW50ZXJmYWNlIENoYXJ0UmVmZXJlbmNlIHtcbiAgdmFsdWU6IG51bWJlcjtcbiAgbGFiZWw6IHN0cmluZztcbiAgdG8/OiBudW1iZXI7XG4gIHNlY29uZGFyeT86IGJvb2xlYW47XG59XG5cbi8vIEhvdyBvbmUgbnVtZXJpYyBzbG90IGlzIHNob3duOiBhIGNoYXJ0IG1lYXN1cmUsIGEgS1BJIG1lYXN1cmUsIGEgbGlzdCBjb2x1bW5cbi8vIG9yIGEgY3Jvc3MtdGFiJ3MgY2VsbHMuIFRoZSBkYXRhIHN0YXlzIHJhdyAoaXQgc29ydHMgYW5kIGV4cG9ydHMgYXMgYVxuLy8gbnVtYmVyKTsgb25seSB0aGUgcmVuZGVyZXJzIGZvcm1hdCBpdCwgdGhlIHNhbWUgd2F5IG9uIHNjcmVlbiwgaW4gdGhlIFBERlxuLy8gYW5kIGluIFBvd2VyUG9pbnQgKGZvcm1hdC50cykuIEFsbCB0aHJlZSBrZXlzIGFyZSBvcHRpb25hbCwgYW5kIHByZWNpc2lvbiBvclxuLy8gdW5pdHMgd2l0aG91dCBhIGZvcm1hdCBtZWFuIG51bWJlci5cbi8vXG4vLyBGb3JtYXR0aW5nIGlzIG9wdC1pbjogYSBsaXN0IGNvbHVtbiBvciBjcm9zcy10YWIgY2VsbCB3aXRob3V0IHRoZXNlIGtleXNcbi8vIHByaW50cyBpdHMgdmFsdWUgYXMgaXQgY2FtZSwgYW5kIGEgY2hhcnQgd2l0aG91dCB0aGVtIGtlZXBzIGl0cyBwbGFpblxuLy8gbG9jYWxlLWdyb3VwZWQgYXhpcyBhbmQgdG9vbHRpcHMuIEEgS1BJIHdpdGhvdXQgdGhlbSBwcmludHMgYSBwbGFpbiBudW1iZXIuXG5leHBvcnQgaW50ZXJmYWNlIE51bWJlckZvcm1hdFNwZWMge1xuICAvLyBwZXJjZW50IHRha2VzIGEgMC0xIHJhdGlvICgwLjMgcmVhZHMgMzAlKSB3aGVuIHRoZSByZXBvcnQncyBwZXJjZW50Rm9ybWF0XG4gIC8vIGlzICdyYXRpbyc7IGFuIG9sZGVyIHNlcnZlciBsZWF2ZXMgaXQgb3V0IGFuZCBzZW5kcyB4MTAwLiBjdXJyZW5jeSBsYWJlbHNcbiAgLy8gdGhlIGFtb3VudCBpbiB0aGUgcmVwb3J0J3MgY3VycmVuY3ksIHdyaXR0ZW4gaW4gaXRzIGxvY2FsZS5cbiAgZm9ybWF0PzogUmVwb3J0VmFsdWVGb3JtYXQgfCBSZXBvcnRMaXN0Q29sdW1uRm9ybWF0O1xuICAvLyBIb3cgbWFueSBkZWNpbWFsIHBsYWNlcyB0aGUgdmFsdWUgaXMgc2hvd24gdG8gKDAtNikuIEZpeGVkIHJhdGhlciB0aGFuXG4gIC8vIG1heGltdW06IGEgY29sdW1uIG9mIHJhdGVzIGlzIHVucmVhZGFibGUgd2hlbiBlYWNoIG9uZSBzaG93cyBhIGRpZmZlcmVudFxuICAvLyBudW1iZXIgb2YgZGVjaW1hbHMuIEZvciBwZXJjZW50IGl0IGNvdW50cyB0aGUgZGVjaW1hbHMgb2YgdGhlIHBlcmNlbnRhZ2VcbiAgLy8gKHByZWNpc2lvbiAxIHNob3dzIDAuMyBhcyAzMC4wJSkuIE9taXR0ZWQgbGVhdmVzIHRoZSBmb3JtYXQncyBvd24gZGVmYXVsdDpcbiAgLy8gYXQgbW9zdCBvbmUgZGVjaW1hbCBmb3IgcGVyY2VudCAoYW5kIGZvciBhbiBhYmJyZXZpYXRlZCAxLjJLKSwgd2hvbGUgdW5pdHNcbiAgLy8gZm9yIGN1cnJlbmN5LCB0aGUgbG9jYWxlJ3MgZGVmYXVsdCBmb3IgYSBudW1iZXIuXG4gIC8vXG4gIC8vIEl0IGNhbm5vdCBiZSBhcHBsaWVkIGluIHRoZSBTUUw6IHRoZSB2YWx1ZSBpcyBhZ2dyZWdhdGVkIGFmdGVyIHRoZSByZXBvcnQnc1xuICAvLyBmaWx0ZXJzIHJ1biwgc28gcHJlLXJvdW5kaW5nIHdvdWxkIGJyZWFrIGxpdmUgcmUtZmlsdGVyaW5nLlxuICBwcmVjaXNpb24/OiBudW1iZXI7XG4gIC8vIEFiYnJldmlhdGVzIHRvIHRob3VzYW5kcyAoMS4ySykgb3IgbWlsbGlvbnMgKDMuNE0pLCBvciBwaWNrcyBieSBzaXplLlxuICB1bml0cz86IFJlcG9ydE51bWJlclVuaXRzO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENoYXJ0TWVhc3VyZSBleHRlbmRzIE51bWJlckZvcm1hdFNwZWMge1xuICBjb2x1bW46IHN0cmluZztcbiAgYWdncmVnYXRpb24/OiAnc3VtJyB8ICdjb3VudCcgfCAnYXZnJyB8ICdtaW4nIHwgJ21heCc7XG4gIGxhYmVsPzogc3RyaW5nO1xuICAvLyBEcmF3cyB0aGlzIG1lYXN1cmUncyBzZXJpZXMgYXMgYSBkaWZmZXJlbnQgdHlwZSBmcm9tIHRoZSBjaGFydCdzIG93blxuICAvLyBjaGFydFR5cGUg4oCUIGNvdW50cyBhcyBiYXJzIHdpdGggYSByYXRlIGFzIGEgbGluZSBvdmVyIHRoZW0gaXMgYSBjb21ib1xuICAvLyBjaGFydC4gT21pdHRlZCwgdGhlIHNlcmllcyB0YWtlcyB0aGUgY2hhcnQncyB0eXBlLiBBeGlzIGNoYXJ0cyBvbmx5IChhIHBpZVxuICAvLyBpZ25vcmVzIGl0KS5cbiAgdHlwZT86IEF4aXNDaGFydFR5cGU7XG4gIC8vIEEgY2hhcnQgbWVhc3VyZSdzIGZvcm1hdCBzaG93cyBvbiBpdHMgdG9vbHRpcHMsIGFuZCBvbiB0aGUgdmFsdWUgYXhpc1xuICAvLyB3aGVuIGV2ZXJ5IG1lYXN1cmUgc2hhcmluZyB0aGUgYXhpcyBhZ3JlZXMgb24gaXQuIEEgS1BJJ3MgbWVhc3VyZSBmb3JtYXRzXG4gIC8vIGl0cyBvbmUgdmFsdWUuXG4gIGZvcm1hdD86IFJlcG9ydFZhbHVlRm9ybWF0O1xuICAvLyBQbG90cyB0aGlzIG1lYXN1cmUgYWdhaW5zdCB0aGUgc2Vjb25kIHZhbHVlIGF4aXMsIG9uIHRoZSByaWdodCwgZm9yIGFcbiAgLy8gcXVhbnRpdHkgb24gYW5vdGhlciBzY2FsZS4gT21pdHRlZCBvciBmYWxzZSwgaXQgc2hhcmVzIHRoZSBwcmltYXJ5IGF4aXMuXG4gIC8vIEEgdmVydGljYWwgYXhpcyBjaGFydCBvbmx5LCB3aXRoIGF0IGxlYXN0IG9uZSBtZWFzdXJlIGxlZnQgb24gdGhlIHByaW1hcnlcbiAgLy8gYXhpcy5cbiAgc2Vjb25kYXJ5PzogYm9vbGVhbjtcbiAgLy8gVGhlIHBhbGV0dGUgY29sb3IgdGhpcyBtZWFzdXJlJ3Mgc2VyaWVzIGlzIGRyYXduIGluLiBPbWl0dGVkLCB0aGUgc2VyaWVzXG4gIC8vIHRha2VzIHRoZSBwYWxldHRlIGNvbG9yIG9mIGl0cyBwb3NpdGlvbi4gQSBjb2xvciBvbiB0aGUgZmlyc3QgbWVhc3VyZVxuICAvLyB0dXJucyBvZmYgYSBjYXRlZ29yeSBiYXIgY2hhcnQncyBkZWZhdWx0IGNvbG9yIHBlciBiYXIgKGlzQ29sb3JCeSkuXG4gIGNvbG9yPzogUmVwb3J0Q2hhcnRDb2xvcjtcbiAgLy8gSG93IGEgbGluZSBzZXJpZXMnIGxpbmUgaXMgZHJhd24uIE9taXR0ZWQsIHNvbGlkLlxuICBsaW5lPzogUmVwb3J0Q2hhcnRMaW5lU3R5bGU7XG4gIC8vIFdoZXRoZXIgYSBsaW5lIG9yIGFyZWEgc2VyaWVzIGRyYXdzIGEgZG90IG9uIGVhY2ggcG9pbnQuIE9taXR0ZWQsIHRydWUuXG4gIG1hcmtlcnM/OiBib29sZWFuO1xuICAvLyBBIGxpbmUgYWNyb3NzIHRoZSBwbG90IGF0IHRoaXMgc2VyaWVzJyBhdmVyYWdlLCBtZWRpYW4sIGxvd2VzdCBvciBoaWdoZXN0XG4gIC8vIHZhbHVlIG92ZXIgdGhlIHBvaW50cyBvbiBzY3JlZW4uIFZlcnRpY2FsIGF4aXMgY2hhcnRzIG9ubHkuXG4gIG1hcmtMaW5lPzogUmVwb3J0Q2hhcnRNYXJrU3RhdDtcbn1cblxuLy8gT25lIGF1dGhvcmVkIGNvbHVtbiBvZiBhIHBsYWluIGxpc3QuXG5leHBvcnQgaW50ZXJmYWNlIExpc3RDb2x1bW4gZXh0ZW5kcyBOdW1iZXJGb3JtYXRTcGVjIHtcbiAgY29sdW1uOiBzdHJpbmc7XG4gIGxhYmVsPzogc3RyaW5nO1xuICAvLyBkYXRlIGtlZXBzIHRoZSBjb2x1bW4gYSBSQVcgdGltZXN0YW1wLCBzbyB0aGUgcmVwb3J0IHRpbWV6b25lIGFuZCBpdHNcbiAgLy8gZGF0ZVJhbmdlIGZpbHRlcnMga2VlcCB3b3JraW5nLCBhbmQgdGhlIHZpZXdlciByZW5kZXJzIGl0IGFzIGEgZGF5IGluIHRoZVxuICAvLyByZXBvcnQncyB6b25lIGFuZCBsb2NhbGUuIG51bWJlciwgcGVyY2VudCBhbmQgY3VycmVuY3kgZm9ybWF0IHRoZSB2YWx1ZSBhc1xuICAvLyBhIEtQSSBtZWFzdXJlIGRvZXMuIFdpdGhvdXQgYSBmb3JtYXQgdGhlIHZhbHVlIHByaW50cyBhcyBpdCBjYW1lLlxuICBmb3JtYXQ/OiBSZXBvcnRMaXN0Q29sdW1uRm9ybWF0O1xuICAvLyBBIGNvbHVtbiB0aGUgU1FMIGFscmVhZHkgZm9ybWF0dGVkIGlzIHRleHQsIHNvIGl0IG5hbWVzIGBzb3J0Q29sdW1uYDogdGhlXG4gIC8vIHJhdyBudW1lcmljIGFsaWFzIHRoZSBxdWVyeSBhbHNvIG91dHB1dHMsIHdoaWNoIHRoZSBzZXJ2ZXIgb3JkZXJzIGJ5XG4gIC8vIGluc3RlYWQuXG4gIHNvcnRDb2x1bW4/OiBzdHJpbmc7XG4gIC8vIGZhbHNlIGtlZXBzIHRoZSBjZWxsIG9uIG9uZSBsaW5lLiBPbWl0dGVkLCBhIGxvbmcgdmFsdWUgd3JhcHMuXG4gIHdyYXA/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIExpc3RDb25maWcge1xuICBjb2x1bW5zPzogTGlzdENvbHVtbltdO1xuICAvLyBBIGNyb3NzLXRhYjogYHJvd0J5YCBzdGF5cyBkb3duIHRoZSBzaWRlIGFuZCBldmVyeSB2YWx1ZSBvZiBgcGl2b3RCeWBcbiAgLy8gYmVjb21lcyBhIGNvbHVtbi4gVGhlIHR3byBhcmUgc2V0IHRvZ2V0aGVyLCBgY29sdW1uc2AgaXMgb21pdHRlZCAodGhlXG4gIC8vIGJhY2tlbmQgcmVqZWN0cyBhdXRob3JpbmcgYm90aCksIGFuZCB0aGUgY29sdW1uIHNldCBhcnJpdmVzIHdpdGggdGhlIHJvd3NcbiAgLy8gaW4gQ29tcG9uZW50RGF0YS5jb2x1bW5zIGJlY2F1c2Ugb25seSB0aGUgcmVzdWx0IGtub3dzIHRoZSBwaXZvdCB2YWx1ZXMuXG4gIC8vIHJvd0J5LmxhYmVsIGhlYWRzIHRoZSBzaWRlIGNvbHVtbiBvbiBzY3JlZW4gYW5kIGluIGV2ZXJ5IGV4cG9ydCwgYW5kXG4gIC8vIGRlZmF1bHRzIHRvIHRoZSBjb2x1bW4gbmFtZS4gcGl2b3RCeSBjYXJyaWVzIG5vIGxhYmVsOiBpdHMgdmFsdWVzIGFyZSB0aGVcbiAgLy8gaGVhZGluZ3MuXG4gIHJvd0J5PzogeyBjb2x1bW46IHN0cmluZzsgbGFiZWw/OiBzdHJpbmcgfTtcbiAgcGl2b3RCeT86IHsgY29sdW1uOiBzdHJpbmcgfTtcbiAgLy8gVGhlIGF1dGhvcmVkIG9yZGVyLCBtb3N0IGltcG9ydGFudCBmaXJzdC4gQSBsaXN0IHNhdmVkIGJlZm9yZSBtdWx0aS1rZXlcbiAgLy8gc29ydGluZyBzdG9yZXMgb25lIG9iamVjdCwgc28gcmVhZCBpdCB0aHJvdWdoIGxpc3RTb3J0VGVybXMoKSBvbmx5LlxuICBzb3J0PzogUmVwb3J0U29ydCB8IFJlcG9ydFNvcnRbXTtcbiAgLy8gSG93IG1hbnkgbGVhZGluZyBjb2x1bW5zIHN0YXkgaW4gdmlldyB3aGlsZSB0aGUgbGlzdCBzY3JvbGxzIHNpZGV3YXlzXG4gIC8vICgwLTMpLiBVbnNldCwgYSBjcm9zcy10YWIgcGlucyBpdHMgcm93LWtleSBjb2x1bW4gYW5kIGEgcGxhaW4gbGlzdCBub25lLlxuICBwaW5uZWRDb2x1bW5zPzogbnVtYmVyIHwgbnVsbDtcbiAgcGFnZVNpemU/OiBudW1iZXI7XG4gIC8vIHRydWUgYWRkcyBhIHRvdGFscyByb3cgdW5kZXIgdGhlIGxpc3Q6IHRoZSBzZXJ2ZXIgcnVucyB0aGUgbWVhc3VyZXMgYWdhaW5cbiAgLy8gb3ZlciBldmVyeSByb3cgdGhlIGZpbHRlcnMga2VlcCwgd2l0aG91dCBncm91cGluZywgYW5kIGEgY3Jvc3MtdGFiIHRvdGFsc1xuICAvLyBlYWNoIGNvbHVtbi5cbiAgdG90YWxzPzogYm9vbGVhbjtcbiAgLy8gQSBjcm9zcy10YWIgb25seTogaG93IGV2ZXJ5IGNlbGwgb2YgdGhlIGdyaWQgaXMgZm9ybWF0dGVkLCB3aXRoIGEgS1BJXG4gIC8vIG1lYXN1cmUncyBrZXlzLiBUaGUgcm93IGtleSBjb2x1bW4gc3RheXMgYXMgaXQgY2FtZS5cbiAgY2VsbEZvcm1hdD86IE51bWJlckZvcm1hdFNwZWMgJiB7IGZvcm1hdD86IFJlcG9ydFZhbHVlRm9ybWF0IH07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgS3BpQ29uZmlnIHtcbiAgbWVhc3VyZT86IENoYXJ0TWVhc3VyZTtcbiAgLy8gV2hldGhlciBhIHJpc2UgaW4gdGhlIHZhbHVlIGlzIGdvb2QgbmV3cywgYmFkIG5ld3Mgb3IgbmVpdGhlcjogaXQgcGlja3NcbiAgLy8gdGhlIGRlbHRhJ3MgY29sb3IgYW5kIGRlY2lkZXMgd2hlbiBhIHRhcmdldCBpcyBtZXQgKGdvb2Q6IGF0IG9yIGFib3ZlIGl0O1xuICAvLyBiYWQ6IGF0IG9yIGJlbG93IGl0OyBuZXV0cmFsOiBuZXZlciBqdWRnZWQpLiBPbWl0dGVkIG9yIG51bGwgcmVhZHMgZ29vZC5cbiAgaW5jcmVhc2VJcz86IFJlcG9ydENoYW5nZVBvbGFyaXR5IHwgbnVsbDtcbiAgLy8gQSBudW1iZXIgdGhlIHVzZXIgZ2F2ZSBmb3IgdGhlIHZhbHVlIHRvIHJlYWNoLCBuZXZlciBvbmUgcmVhZCBvZmYgdGhlXG4gIC8vIGRhdGEuIFRoZSBzZXJ2ZXIgc2VuZHMgdGhlIHByb2dyZXNzIHRvd2FyZCBpdCB3aXRoIHRoZSBkYXRhLlxuICB0YXJnZXQ/OiBLcGlUYXJnZXRDb25maWcgfCBudWxsO1xuICAvLyBBIHNtYWxsIHRyZW5kIGxpbmUgb2YgdGhlIHZhbHVlIG92ZXIgaXRzIGxhc3QgcGVyaW9kcywgZHJhd24gdW5kZXIgaXQuXG4gIHNwYXJrbGluZT86IEtwaVNwYXJrbGluZUNvbmZpZyB8IG51bGw7XG59XG5cbi8vIEEgS1BJJ3MgdGFyZ2V0OiB0aGUgdmFsdWUsIGFuZCBhbiBvcHRpb25hbCBjYXB0aW9uIGZvciBpdCAoJ0dvYWwnKS5cbmV4cG9ydCBpbnRlcmZhY2UgS3BpVGFyZ2V0Q29uZmlnIHtcbiAgdmFsdWU6IG51bWJlcjtcbiAgbGFiZWw/OiBzdHJpbmcgfCBudWxsO1xufVxuXG4vLyBBIEtQSSdzIHNwYXJrbGluZTogaG93IHdpZGUgZWFjaCBwb2ludCdzIHBlcmlvZCBpcyAobnVsbCByZWFkcyBtb250aCkgYW5kXG4vLyBob3cgbWFueSBwZXJpb2RzIGl0IGRyYXdzLCAyIHRvIDYwIChudWxsIHJlYWRzIDEyKS5cbmV4cG9ydCBpbnRlcmZhY2UgS3BpU3BhcmtsaW5lQ29uZmlnIHtcbiAgZ3JhbnVsYXJpdHk/OiBDaGFydEdyYW51bGFyaXR5IHwgbnVsbDtcbiAgcGVyaW9kcz86IG51bWJlciB8IG51bGw7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVwb3J0U29ydCB7XG4gIGNvbHVtbjogc3RyaW5nO1xuICBkaXJlY3Rpb24/OiAnYXNjJyB8ICdkZXNjJztcbn1cblxuZXhwb3J0IHR5cGUgUmVwb3J0RmlsdGVyVHlwZSA9ICdkYXRlUmFuZ2UnIHwgJ3NlbGVjdCcgfCAna2V5d29yZCc7XG5cbi8vIFdoZXJlIGEgZmlsdGVyIGdyb3VwJ3MgY29udHJvbCBpcyBleHBvc2VkLiBBIGdyb3VwIGNhbiBiZSBzaG93biBvbiBpdHNcbi8vIGNvbXBvbmVudHMsIGluIHRoZSByZXBvcnQgYmFyLCBvciBCT1RIIGF0IG9uY2UgKHRoZSB0d28gYXJlIGluZGVwZW5kZW50XG4vLyB0b2dnbGVzIGluIHRoZSBVSSk7IGEgY29sdW1uIHdpdGggbmVpdGhlciBleHBvc2VkIHNpbXBseSBoYXMgbm8gZmlsdGVyLlxuZXhwb3J0IHR5cGUgUmVwb3J0RmlsdGVyTGV2ZWwgPSAnY29tcG9uZW50JyB8ICdyZXBvcnQnIHwgJ2JvdGgnO1xuXG4vLyBPbmUgZmlsdGVyYWJsZSBvdXRwdXQgY29sdW1uIG9mIGEgY29tcG9uZW50J3MgU1FMLCB3aXRoIHRoZSBmaWx0ZXIgaW50ZXJmYWNlXG4vLyBJTkZFUlJFRCBmcm9tIGl0cyBkYXRhICh0aGUgaHVtYW4gbmV2ZXIgcGlja3MgdGhlIGludGVyZmFjZSDigJQgaXQgZm9sbG93cyB0aGVcbi8vIGNvbHVtbidzIHR5cGUpLiBEcml2ZXMgdGhlIEZpbHRlcnMgdGFiIGxpc3RpbmcuXG5leHBvcnQgaW50ZXJmYWNlIFJlcG9ydEZpbHRlcmFibGVDb2x1bW4ge1xuICBjb2x1bW46IHN0cmluZztcbiAgdHlwZTogUmVwb3J0RmlsdGVyVHlwZTtcbn1cblxuLy8gR3JvdW5kIHRydXRoOiBvbmUgZmlsdGVyYWJsZSBvdXRwdXQgY29sdW1uIE9OIG9uZSBjb21wb25lbnQncyBTUUwuIEFsd2F5cyBhXG4vLyBtZW1iZXIgb2YgYSBmaWx0ZXIgZ3JvdXAg4oCUIHRoZSB1bml0IHRoYXQgbGlua3MgZXF1aXZhbGVudCBmaWx0ZXJzIGFjcm9zc1xuLy8gY29tcG9uZW50cyBhbmQgZGVjaWRlcyB3aGVyZSB0aGUgY29udHJvbCByZW5kZXJzIChjb21wb25lbnQgdnMgcmVwb3J0IGJhcikuXG5leHBvcnQgaW50ZXJmYWNlIFJlcG9ydEZpbHRlciB7XG4gIGlkOiBudW1iZXI7XG4gIGNvbXBvbmVudElkOiBudW1iZXI7XG4gIGZpbHRlckdyb3VwSWQ6IG51bWJlcjtcbiAgZmlsdGVyQ29sdW1uOiBzdHJpbmc7XG4gIGxhYmVsOiBzdHJpbmcgfCBudWxsO1xuICBlbmFibGVkOiBib29sZWFuO1xuICBoYXNPcHRpb25zOiBib29sZWFuO1xuICBjb25maWc6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xufVxuXG4vLyBPbmUgY2hvaWNlIGluIGEgc2VsZWN0IGZpbHRlcidzIG9wdGlvbiBsaXN0LiBUaGUgdmFsdWUgaXMgd2hhdCB0aGUgZmlsdGVyXG4vLyBtYXRjaGVzIG9uIGFuZCBnZXRzIHN0b3JlZCBpbiBhIHNhdmVkIGRlZmF1bHQg4oCUIGZvciBhbiBlbnRpdHkgdGhhdCBpcyBpdHNcbi8vIHN0YWJsZSBpZCwgbmV2ZXIgaXRzIG5hbWUsIHNvIHJlbmFtaW5nIHRoZSBlbnRpdHkgbW92ZXMgdGhlIGxhYmVsIHdpdGhvdXRcbi8vIGJyZWFraW5nIHRoZSBkZWZhdWx0LiBUaGUgbGFiZWwgaXMgb25seSBldmVyIHdoYXQgdGhlIHZpZXdlciByZWFkcy5cbmV4cG9ydCBpbnRlcmZhY2UgUmVwb3J0RmlsdGVyT3B0aW9uIHtcbiAgdmFsdWU6IHVua25vd247XG4gIGxhYmVsOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVwb3J0RmlsdGVyR3JvdXAge1xuICBpZDogbnVtYmVyO1xuICBsYWJlbDogc3RyaW5nIHwgbnVsbDtcbiAgdHlwZTogUmVwb3J0RmlsdGVyVHlwZTtcbiAgbGV2ZWw6IFJlcG9ydEZpbHRlckxldmVsO1xuICBvcmRlcjogbnVtYmVyO1xuICBjb25maWc6IHsgZGVmYXVsdD86IEZpbHRlckdyb3VwRGVmYXVsdCB9ICYgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIGZpbHRlcnM6IFJlcG9ydEZpbHRlcltdO1xufVxuXG4vLyBBIGZpbHRlciBncm91cCdzIGF1dGhvcmVkIGRlZmF1bHQg4oCUIHRoZSB2YWx1ZSB0aGF0IHNlZWRzIHRoZSByZXBvcnQgYmFyIG9uXG4vLyBldmVyeSBvcGVuLiBTaGFwZSBmb2xsb3dzIHRoZSBncm91cCdzIHR5cGU6IGRhdGVSYW5nZSB1c2VzIHN0YXJ0L2VuZCAoYSBmaXhlZFxuLy8gY2FsZW5kYXItZGF5IHJhbmdlKSBvciBhIHJlbGF0aXZlIHByZXNldDsgc2VsZWN0IHVzZXMgdmFsdWVzOyBrZXl3b3JkIHVzZXNcbi8vIHZhbHVlLlxuZXhwb3J0IGludGVyZmFjZSBGaWx0ZXJHcm91cERlZmF1bHQge1xuICAvLyBkYXRlUmFuZ2UgcmVsYXRpdmUgcHJlc2V0LCByZXNvbHZlZCBvbiBldmVyeSBvcGVuIGFnYWluc3QgdG9kYXkgaW4gdGhlXG4gIC8vIHJlcG9ydCdzIGVmZmVjdGl2ZSB6b25lIChSZXBvcnQuZWZmZWN0aXZlVGltZXpvbmUpLiBPbmUgb2Y6IHRoaXNXZWVrLFxuICAvLyBsYXN0V2VlaywgbGFzdDdEYXlzLCBsYXN0MzBEYXlzLCBsYXN0M01vbnRocywgbGFzdDZNb250aHMsIGxhc3QxMk1vbnRocyxcbiAgLy8gdGhpc01vbnRoLCB0aGlzUXVhcnRlciwgdGhpc1llYXIveWVhclRvRGF0ZS4gV2Vla3MgcnVuIE1vbmRheSB0byBTdW5kYXksXG4gIC8vIHRoZSBzYW1lIHdlZWtzIHRoZSBzZXJ2ZXIncyB3ZWVrbHkgdGltZSBidWNrZXRzIHVzZS5cbiAgcmVsYXRpdmU/OiBzdHJpbmc7XG4gIHN0YXJ0Pzogc3RyaW5nOyAvLyBkYXRlUmFuZ2UgZml4ZWQgc3RhcnQgKHl5eXktTU0tZGQpXG4gIGVuZD86IHN0cmluZzsgLy8gZGF0ZVJhbmdlIGZpeGVkIGVuZCAoeXl5eS1NTS1kZClcbiAgdmFsdWVzPzogdW5rbm93bltdOyAvLyBzZWxlY3QgZGVmYXVsdCBwaWNrZWQgdmFsdWVzXG4gIHZhbHVlPzogc3RyaW5nOyAvLyBrZXl3b3JkIGRlZmF1bHQgdGV4dFxufVxuXG4vLyBUaGUgc2Vzc2lvbiB2YWx1ZSBvZiBhIGZpbHRlciBncm91cDogc2hhcGUgZGVwZW5kcyBvbiB0aGUgZ3JvdXAncyB0eXBlLiBOb3Rcbi8vIHN0b3JlZCBvbiB0aGUgc2VydmVyOyB0aGUgdmlld2VyJ3MgVVJMIGNhcnJpZXMgdGhlIHZhbHVlcyB0aGF0IGRpZmZlciBmcm9tXG4vLyB0aGUgZGVmYXVsdHMgKHJlcG9ydC11cmwtc3RhdGUudHMpLlxuZXhwb3J0IGludGVyZmFjZSBGaWx0ZXJHcm91cFZhbHVlIHtcbiAgc3RhcnQ/OiBEYXRlIHwgc3RyaW5nIHwgbnVsbDsgLy8gZGF0ZVJhbmdlXG4gIGVuZD86IERhdGUgfCBzdHJpbmcgfCBudWxsOyAvLyBkYXRlUmFuZ2VcbiAgdmFsdWVzPzogdW5rbm93bltdOyAvLyBzZWxlY3RcbiAgdmFsdWU/OiBzdHJpbmc7IC8vIGtleXdvcmRcbiAgLy8gZGF0ZVJhbmdlIG9ubHk6IHRoZSByZWxhdGl2ZSBwcmVzZXQgbmFtZSB0aGVzZSBkYXRlcyB3ZXJlIHJlc29sdmVkIGZyb21cbiAgLy8gKGEgRmlsdGVyR3JvdXBEZWZhdWx0LnJlbGF0aXZlIG5hbWUpLiBTZXQgb25seSB3aGVuIHRoZSB2YWx1ZSB3YXMgc2VlZGVkXG4gIC8vIGZyb20gdGhlIGdyb3VwJ3MgcmVsYXRpdmUgZGVmYXVsdCBvciByZWFkIGZyb20gYSBwcmVzZXQgbmFtZSBpbiB0aGUgVVJMLFxuICAvLyBzbyB0aGUgVVJMIGtlZXBzIHRoZSByYW5nZSByb2xsaW5nICgnbGFzdDMwRGF5cycpIGluc3RlYWQgb2YgZnJlZXppbmcgdHdvXG4gIC8vIGRhdGVzLCBhbmQgdGhlIGRhdGEgcmVxdWVzdCBuYW1lcyB0aGUgcGVyaW9kIGl0IGNvdmVycyAoc2VlXG4gIC8vIFJlc29sdmVkRmlsdGVyVmFsdWUucHJlc2V0KS4gQW55IGRhdGUgcGlja2VkIGJ5IHRoZSB2aWV3ZXIsIGEgcGlja2VyXG4gIC8vIHNob3J0Y3V0IGluY2x1ZGVkLCBpcyBzdG9yZWQgd2l0aG91dCBpdC5cbiAgcHJlc2V0Pzogc3RyaW5nO1xufVxuXG4vLyBBIHJlbGF0aXZlIGRhdGUgcmFuZ2UgdGhlIHNlcnZlciByZXNvbHZlcyBhZ2FpbnN0IHRvZGF5IGluIHRoZSByZXBvcnQnc1xuLy8gem9uZTogdGhlIG5hbWVzIGEgRmlsdGVyR3JvdXBEZWZhdWx0LnJlbGF0aXZlIGFuZCBhIHRpbWVmcmFtZSdzIHJhbmdlIHRha2UuXG4vLyBNaXJyb3JzIHRoZSBzZXJ2ZXIncyBSZXBvcnRSZWxhdGl2ZVJhbmdlRW51bSB2YWx1ZSBmb3IgdmFsdWVcbi8vIChSZXBvcnRSZWxhdGl2ZVJhbmdlRW51bVRlc3QgcGlucyB0aGUgZGF5cyBlYWNoIG9uZSBjb3ZlcnMpLlxuZXhwb3J0IHR5cGUgUmVwb3J0UmVsYXRpdmVSYW5nZSA9XG4gIHwgJ3RoaXNXZWVrJ1xuICB8ICdsYXN0V2VlaydcbiAgfCAnbGFzdDdEYXlzJ1xuICB8ICdsYXN0MzBEYXlzJ1xuICB8ICdsYXN0M01vbnRocydcbiAgfCAnbGFzdDZNb250aHMnXG4gIHwgJ2xhc3QxMk1vbnRocydcbiAgfCAndGhpc01vbnRoJ1xuICB8ICd0aGlzUXVhcnRlcidcbiAgfCAndGhpc1llYXInXG4gIHwgJ3llYXJUb0RhdGUnO1xuXG4vLyBUaGUgdmlld2VyLXN0YXRlIHF1ZXJ5IHBhcmFtcyBvZiBhIHJlcG9ydCBVUkwsIGFzIHJhdyBzdHJpbmdzLCBiZWZvcmUgdGhleVxuLy8gYXJlIGNoZWNrZWQgYWdhaW5zdCB0aGUgcmVwb3J0IChyZXBvcnQtdXJsLXN0YXRlLnRzIHJlYWRSZXBvcnRVcmxQYXJhbXMpLlxuZXhwb3J0IGludGVyZmFjZSBSZXBvcnRVcmxQYXJhbXMge1xuICAvLyBnPGdyb3VwSWQ+IC0+IHRoZSBlbmNvZGVkIGdyb3VwIHZhbHVlICgnJyA9IHRoZSB2aWV3ZXIgY2xlYXJlZCBpdCkuXG4gIGdyb3VwczogTWFwPG51bWJlciwgc3RyaW5nPjtcbiAgLy8gczxjb21wb25lbnRJZD4gLT4gdGhlIGVuY29kZWQgbGlzdCBzb3J0ICgnLWNvbHVtbicgPSBkZXNjZW5kaW5nKS5cbiAgbGlzdFNvcnRzOiBNYXA8bnVtYmVyLCBzdHJpbmc+O1xuICAvLyBxPGNvbXBvbmVudElkPiAtPiBhIGxpc3QncyBzZWFyY2ggYm94IHRleHQsIGFzIHR5cGVkLlxuICBsaXN0U2VhcmNoZXM6IE1hcDxudW1iZXIsIHN0cmluZz47XG4gIC8vIGg8Y29tcG9uZW50SWQ+IC0+IHRoZSBjb2x1bW5zIGEgdmlld2VyIGhpZCBvbiBhIGxpc3QsIHN0aWxsIGVuY29kZWRcbiAgLy8gKGRlY29kZUNvbHVtbkxpc3QpLlxuICBsaXN0SGlkZGVuOiBNYXA8bnVtYmVyLCBzdHJpbmc+O1xuICAvLyBUaGUgZ3JvdXAtYnkgZ3JhaW4sIG9yIG51bGwgd2hlbiB0aGUgVVJMIGhhcyBub25lLlxuICBncm91cEJ5OiBzdHJpbmcgfCBudWxsO1xufVxuXG4vLyBUaGUgdmlld2VyIHN0YXRlIHRoZSBVUkwgc2hvdWxkIGNhcnJ5OiBvbmx5IHdoYXQgZGlmZmVycyBmcm9tIHRoZSByZXBvcnQnc1xuLy8gYXV0aG9yZWQgZGVmYXVsdHMgKFJlcG9ydEZpbHRlclN0YXRlU2VydmljZS51cmxTbmFwc2hvdCkuXG5leHBvcnQgaW50ZXJmYWNlIFJlcG9ydFVybFNuYXBzaG90IHtcbiAgLy8gQSBncm91cCdzIHZhbHVlLCBvciBudWxsIHdoZW4gdGhlIHZpZXdlciBjbGVhcmVkIGEgZ3JvdXAgdGhhdCBoYXMgYSBkZWZhdWx0LlxuICBncm91cHM6IE1hcDxudW1iZXIsIEZpbHRlckdyb3VwVmFsdWUgfCBudWxsPjtcbiAgLy8gQSBsaXN0J3Mgc29ydCwgYnkgY29tcG9uZW50IGlkLCB3aGVuIGl0IGRpZmZlcnMgZnJvbSB0aGUgYXV0aG9yZWQgc29ydCdzXG4gIC8vIGZpcnN0IHRlcm0uXG4gIGxpc3RTb3J0czogTWFwPG51bWJlciwgUmVwb3J0U29ydD47XG4gIC8vIEEgbGlzdCdzIHNlYXJjaCBib3ggdGV4dCwgYnkgY29tcG9uZW50IGlkLiBBIGxpc3Qgd2l0aCBhbiBlbXB0eSBib3ggaXNcbiAgLy8gbGVmdCBvdXQuXG4gIGxpc3RTZWFyY2hlczogTWFwPG51bWJlciwgc3RyaW5nPjtcbiAgLy8gVGhlIGNvbmZpZyBjb2x1bW4gbmFtZXMgYSB2aWV3ZXIgaGlkIG9uIGEgcGxhaW4gbGlzdCwgYnkgY29tcG9uZW50IGlkLiBBXG4gIC8vIGxpc3Qgc2hvd2luZyBldmVyeSBjb2x1bW4gaXMgbGVmdCBvdXQuXG4gIGxpc3RIaWRkZW46IE1hcDxudW1iZXIsIHN0cmluZ1tdPjtcbiAgZnJlcXVlbmN5OiBDaGFydEdyYW51bGFyaXR5IHwgbnVsbDtcbn1cblxuLy8gT25lIHJlc29sdmVkIGZpbHRlciBzZW50IHdpdGggYSBjb21wb25lbnQncyBkYXRhIHJlcXVlc3QuXG5leHBvcnQgaW50ZXJmYWNlIFJlc29sdmVkRmlsdGVyVmFsdWUge1xuICBmaWx0ZXJJZDogbnVtYmVyO1xuICBzdGFydD86IHN0cmluZztcbiAgZW5kPzogc3RyaW5nO1xuICB2YWx1ZXM/OiB1bmtub3duW107XG4gIHZhbHVlPzogc3RyaW5nO1xuICAvLyBkYXRlUmFuZ2Ugb25seTogdGhlIHJlbGF0aXZlIHJhbmdlIHN0YXJ0IGFuZCBlbmQgc3RpbGwgYXJlLCBzZW50IG9ubHlcbiAgLy8gd2hpbGUgdGhleSBhcmUgZXhhY3RseSB0aGF0IHJhbmdlIHJlc29sdmVkIHRvZGF5IGluIHRoZSByZXBvcnQncyB6b25lLiBJdFxuICAvLyB0ZWxscyB0aGUgc2VydmVyIHdoaWNoIHBlcmlvZCB0aGUgZGF5cyBjb3ZlciAob24gdGhlIGZpcnN0IGRheXMgb2YgYVxuICAvLyBxdWFydGVyLCB0aGlzTW9udGggYW5kIHRoaXNRdWFydGVyIGFyZSB0aGUgc2FtZSBkYXlzKSwgc28gYSBjb21wYXJpc29uXG4gIC8vIHNoaWZ0cyBieSB0aGUgcmlnaHQgdW5pdC4gc3RhcnQgYW5kIGVuZCBzdGF5IHRoZSB3aW5kb3c7IGEgc2VydmVyIHRoYXRcbiAgLy8gZG9lcyBub3Qga25vdyB0aGUga2V5IGlnbm9yZXMgaXQuXG4gIHByZXNldD86IFJlcG9ydFJlbGF0aXZlUmFuZ2U7XG59XG5cbi8vIFBlci1jb21wb25lbnQgaW50ZXJhY3Rpb24gc3RhdGUgc2VudCB3aXRoIHRoZSBkYXRhIHJlcXVlc3Q6IGxpc3RzIHNlbmRcbi8vIHNvcnQvcGFnaW5nIGFuZCB0aGUgdGV4dCBpbiB0aGVpciBzZWFyY2ggYm94OyB0aW1lLXNlcmllcyBjaGFydHMgc2VuZCB0aGVcbi8vIGdyYWluIHBpY2tlZCBvbiB0aGUgcmVwb3J0J3MgZ3JvdXAtYnkgY29udHJvbCwgd2hpY2ggb3ZlcnJpZGVzIHRoZSBhdXRob3JlZFxuLy8gZ3JhbnVsYXJpdHkgZm9yIHRoYXQgcmVxdWVzdCBvbmx5LiBUaGUgd2lyZSBrZXkgc3RheXMgYGZyZXF1ZW5jeWAg4oCUIGl0IGlzIHRoZVxuLy8gYnVja2V0aW5nIGZyZXF1ZW5jeSB0aGUgc2VydmVyIGFwcGxpZXMuXG5leHBvcnQgaW50ZXJmYWNlIENvbXBvbmVudERhdGFTdGF0ZSB7XG4gIHNvcnQ/OiBSZXBvcnRTb3J0O1xuICBwYWdlPzogbnVtYmVyO1xuICBwYWdlU2l6ZT86IG51bWJlcjtcbiAgZnJlcXVlbmN5PzogQ2hhcnRHcmFudWxhcml0eTtcbiAgLy8gQSBsaXN0J3Mgc2VhcmNoIGJveCB0ZXh0LiBUaGUgc2VydmVyIHRyaW1zIGl0LCBjdXRzIGl0IHRvIGl0cyBvd24gbWF4aW11bVxuICAvLyBsZW5ndGggYW5kIG1hdGNoZXMgaXQgYWdhaW5zdCBldmVyeSB0ZXh0IGNvbHVtbiB0aGUgbGlzdCBzaG93cy5cbiAgc2VhcmNoPzogc3RyaW5nO1xuICAvLyBUaGUgY29uZmlnIGNvbHVtbiBuYW1lcyBhIHZpZXdlciBoaWQgb24gYSBwbGFpbiBsaXN0LiBTZW50IHdpdGggYSBDU1ZcbiAgLy8gZXhwb3J0IG9ubHkgKHRoZSBzY3JlZW4gaGlkZXMgdGhlbSBpdHNlbGYpOiB0aGUgZmlsZSBsZWF2ZXMgdGhlbSBvdXQuIFRoZVxuICAvLyBzZXJ2ZXIgaWdub3JlcyBpdCBvbiBhIGNyb3NzLXRhYiwgYW5kIHdoZW4gaXQgd291bGQgaGlkZSBldmVyeSBjb2x1bW4uXG4gIGhpZGRlbkNvbHVtbnM/OiBzdHJpbmdbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb21wb25lbnREYXRhIHtcbiAgY29sdW1uczogc3RyaW5nW107XG4gIHJvd3M6IFJlY29yZDxzdHJpbmcsIHVua25vd24+W107XG4gIHBhZ2luZz86IHsgdG90YWw6IG51bWJlcjsgcGFnZTogbnVtYmVyOyBwYWdlU2l6ZTogbnVtYmVyIH07XG4gIHRydW5jYXRlZDogYm9vbGVhbjtcbiAgLy8gVGhlIGVmZmVjdGl2ZSB0aW1lIGJ1Y2tldCB0aGUgcm93cyB3ZXJlIGdyb3VwZWQgaW50byAoYWZ0ZXIgYW55IGdyb3VwLWJ5XG4gIC8vIG92ZXJyaWRlKSwgb3IgbnVsbCBmb3IgYSBub24tdGltZSBheGlzLiBEcml2ZXMgdGhlIGNvbXBhY3QgeC1heGlzIGxhYmVscy5cbiAgZ3JhbnVsYXJpdHk/OiBDaGFydEdyYW51bGFyaXR5IHwgbnVsbDtcbiAgLy8gUGFnZSAxIG9mIGEgc2VhcmNoZWQgbGlzdCB3aG9zZSBzZWFyY2ggY291bGQgbm90IGFwcGx5ICh0aGUgbGlzdCBoYXMgbm9cbiAgLy8gdGV4dCBjb2x1bW4gdG8gc2VhcmNoKTogd2h5IHRoZSByb3dzIGFyZSBub3QgbmFycm93ZWQuIEFic2VudCBvdGhlcndpc2UuXG4gIHNlYXJjaE5vdGU/OiBzdHJpbmcgfCBudWxsO1xuICAvLyBQYWdlIDEgb2YgYSBsaXN0IHdpdGggY29uZmlnLnRvdGFscyBvbjogaXRzIHRvdGFscyByb3csIGFzIHJhdyB2YWx1ZXNcbiAgLy8ga2V5ZWQgbGlrZSB0aGUgY29sdW1ucyAoYSBwbGFpbiBsaXN0J3MgbWVhc3VyZSBhbGlhc2VzOyBhIGNyb3NzLXRhYidzXG4gIC8vIHBpdm90IGNlbGwgY29sdW1ucywgdGhlIHJvdy1rZXkgY29sdW1uIGFic2VudCksIG9yIG51bGwgd2l0aCB0b3RhbHNOb3RlXG4gIC8vIHNheWluZyB3aHkgdGhlcmUgaXMgbm9uZS4gQWJzZW50IG9uIGV2ZXJ5IG90aGVyIHBhZ2UgYW5kIGxpc3QuXG4gIHRvdGFscz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgbnVsbDtcbiAgdG90YWxzTm90ZT86IHN0cmluZyB8IG51bGw7XG4gIC8vIFRoZSB3aW5kb3cgb2YgZGF5cyB0aGUgY29tcG9uZW50IHJlYWRzLCB3aGVuIGl0cyBxdWVyeSBoYXMgYSB0aW1lZnJhbWUuXG4gIC8vIEFic2VudCBvdGhlcndpc2UsIGFuZCBmcm9tIG9sZGVyIHNlcnZlcnMuXG4gIHRpbWVmcmFtZT86IENvbXBvbmVudFRpbWVmcmFtZSB8IG51bGw7XG4gIC8vIFRoZSBjdXJyZW50IGFuZCBwcmlvciB3aW5kb3dzIG9mIGEgY29tcG9uZW50IHdob3NlIG1lYXN1cmVzIGNvbXBhcmVcbiAgLy8gYWdhaW5zdCBhbiBlYXJsaWVyIHBlcmlvZC4gQWJzZW50IHdoZW4gbm8gbWVhc3VyZSBjb21wYXJlcy4gU2VudCBvbiBldmVyeVxuICAvLyBsaXN0IHBhZ2UgYW5kIG9uIGNoYXJ0IGFuZCBLUEkgZGF0YS5cbiAgY29tcGFyaXNvbj86IENvbXBvbmVudENvbXBhcmlzb24gfCBudWxsO1xuICAvLyBXaGF0IGVhY2ggY29tcGFyZWQsIHdpbmRvd2VkLCByYW5rZWQgb3Igc2hhcmVkIG91dHB1dCBjb2x1bW4gaXMsIGJ5IGFsaWFzLlxuICAvLyBQbGFpbiBtZWFzdXJlIGNvbHVtbnMgYXJlIGxlZnQgb3V0LlxuICBvdXRwdXRzPzogUmVjb3JkPHN0cmluZywgT3V0cHV0TWV0YT47XG4gIC8vIEEgY3Jvc3MtdGFiIG9ubHk6IHRoZSBtZWFzdXJlIGFsaWFzIGVhY2ggcGl2b3QgY2VsbCBjb2x1bW4gaG9sZHMsIHNvIGFcbiAgLy8gY2VsbCB0YWtlcyBpdHMgbWVhc3VyZSdzIG91dHB1dCBtZWFuaW5nLiBOZXZlciBzZW50IGZvciBhIHNxbC1tb2RlIGxpc3QuXG4gIGNlbGxNZWFzdXJlcz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIC8vIEhvdyBlYWNoIHdpbmRvd2VkIG91dHB1dCBjb2x1bW4gKHJ1bm5pbmcsIHRvLWRhdGUgb3Igcm9sbGluZykgd2FzXG4gIC8vIGNvbXB1dGVkLCBieSBhbGlhcy5cbiAgd2luZG93cz86IFJlY29yZDxzdHJpbmcsIFdpbmRvd01ldGE+O1xuICAvLyBBIEtQSSB3aXRoIGEgY29tcGFyaXNvbiwgYSB0YXJnZXQgb3IgYSBzcGFya2xpbmU6IGV2ZXJ5IG51bWJlciB0aGUgY2FyZFxuICAvLyBzaG93cyBiZXNpZGUgaXRzIHZhbHVlLCBkZWNpZGVkIGJ5IHRoZSBzZXJ2ZXIuXG4gIGtwaT86IENvbXBvbmVudEtwaSB8IG51bGw7XG4gIC8vIFRoZSB0aW1lLWF4aXMgdmFsdWUgb2YgdGhlIGJ1Y2tldCBjb250YWluaW5nIHRvZGF5LCB3cml0dGVuIGFzIHRoZSByb3dzXG4gIC8vIHdyaXRlIGl0LCB3aGVuIHRoYXQgYnVja2V0IGlzIG5vdCBmaW5pc2hlZCB5ZXQ7IG51bGwgb3RoZXJ3aXNlLiBBIGNoYXJ0XG4gIC8vIG1hcmtzIGl0IGFzIHBhcnRpYWwuXG4gIHBhcnRpYWxQZXJpb2Q/OiBzdHJpbmcgfCBudWxsO1xufVxuXG4vLyBXaGVyZSBhIGNvbXBvbmVudCdzIHRpbWVmcmFtZSB3aW5kb3cgY2FtZSBmcm9tOiBhIHZpZXdlciBkYXRlUmFuZ2UgYm91bmQgdG9cbi8vIHRoZSB0aW1lZnJhbWUgY29sdW1uICh3aGljaCByZXBsYWNlcyB0aGUgYXV0aG9yZWQgcmFuZ2UsIG5ldmVyIG5hcnJvd3Ncbi8vIGl0KSwgdGhlIGF1dGhvcmVkIHJlbGF0aXZlIHJhbmdlLCB0aGUgYXV0aG9yZWQgZml4ZWQgZGF5cywgb3Igbm90aGluZyAoYW5cbi8vIG9wZW4gd2luZG93KS5cbmV4cG9ydCB0eXBlIFRpbWVmcmFtZVNvdXJjZSA9ICdmaWx0ZXInIHwgJ3JhbmdlJyB8ICdmaXhlZCcgfCAnbm9uZSc7XG5cbi8vIFRoZSB3aW5kb3cgYSBjb21wb25lbnQncyB0aW1lZnJhbWUgcmVzb2x2ZWQgdG8uIHN0YXJ0IGFuZCBlbmQgYXJlXG4vLyBpbmNsdXNpdmUgJ3l5eXktTU0tZGQnIGRheXMgaW4gdGhlIHJlcG9ydCdzIHpvbmUsIHdyaXR0ZW4gd2l0aG91dCBhIHpvbmUuXG4vLyB0aHJvdWdoIGlzIHRoZSBVVEMgJ3l5eXktTU0tZGQgSEg6bW06c3MnIGluc3RhbnQgYSB3aW5kb3cgb24gYSBkYXRldGltZVxuLy8gY29sdW1uIGlzIGN1dCBhdDsgaXQgcmVhZHMgYXMgYSB0aW1lIGluIHRoZSByZXBvcnQgem9uZS4gSXQgaXMgc2V0IG9ubHkgd2hlblxuLy8gYSBjb21wYXJpc29uIGN1dHMgYSB3aW5kb3cgdGhhdCBlbmRzIHRvZGF5OiBhIHRpbWVmcmFtZSBvbiBpdHMgb3duIHJlYWRzXG4vLyB3aG9sZSBkYXlzLCBzbyBhIHdpbmRvdyBlbmRpbmcgdG9kYXkgd2l0aG91dCBhIGNvbXBhcmlzb24gc2VuZHMgbnVsbC5cbmV4cG9ydCBpbnRlcmZhY2UgQ29tcG9uZW50VGltZWZyYW1lIHtcbiAgY29sdW1uOiBzdHJpbmc7XG4gIHN0YXJ0OiBzdHJpbmcgfCBudWxsO1xuICBlbmQ6IHN0cmluZyB8IG51bGw7XG4gIHRocm91Z2g6IHN0cmluZyB8IG51bGw7XG4gIHJhbmdlOiBSZXBvcnRSZWxhdGl2ZVJhbmdlIHwgbnVsbDtcbiAgc291cmNlOiBUaW1lZnJhbWVTb3VyY2U7XG59XG5cbi8vIEhvdyBhIGNvbXBhcmlzb24gaXMgbGFpZCBvdXQ6IG9uZSB2YWx1ZSBwZXIgd2luZG93IChyYW5nZSksIGEgcHJpb3Igc2VyaWVzXG4vLyBiZXNpZGUgYSB0aW1lIGF4aXMgKHNlcmllcyksIG9yIGVhY2ggcGVyaW9kJ3MgdmFsdWUgcmVhZCBhdCBpdHMgZW5kLCBzZXRcbi8vIGFnYWluc3QgdGhlIHZhbHVlIGF0IHRoZSBlbmQgb2YgYW4gZWFybGllciBwZXJpb2QgKHBlcmlvZF9lbmQpLlxuZXhwb3J0IHR5cGUgQ29tcGFyaXNvbk1vZGUgPSAncmFuZ2UnIHwgJ3NlcmllcycgfCAncGVyaW9kX2VuZCc7XG5cbi8vIHRvX2RhdGUgY29tcGFyZXMgbGlrZSB3aXRoIGxpa2UgKHRoZSBmaXJzdCAyIGRheXMgb2YgYSBtb250aCBhZ2FpbnN0IHRoZVxuLy8gZmlyc3QgMiBkYXlzIG9mIHRoZSBvbmUgYmVmb3JlKTsgZnVsbCBjb21wYXJlcyB3aG9sZSBwZXJpb2RzLlxuZXhwb3J0IHR5cGUgQ29tcGFyaXNvbkFsaWduID0gJ3RvX2RhdGUnIHwgJ2Z1bGwnO1xuXG4vLyBXaGF0IGEgbWVhc3VyZSBpcyBjb21wYXJlZCBhZ2FpbnN0LiBNaXJyb3JzIHRoZSBzZXJ2ZXInc1xuLy8gQ29tcGFyaXNvbkFnYWluc3RFbnVtIHZhbHVlIGZvciB2YWx1ZS5cbmV4cG9ydCB0eXBlIENvbXBhcmlzb25BZ2FpbnN0ID1cbiAgfCAncHJldmlvdXNfcGVyaW9kJ1xuICB8ICdwcmV2aW91c193ZWVrJ1xuICB8ICdwcmV2aW91c19tb250aCdcbiAgfCAncHJldmlvdXNfcXVhcnRlcidcbiAgfCAncHJldmlvdXNfeWVhcidcbiAgfCAncmFuZ2UnO1xuXG4vLyBXaHkgYSBjb21wYXJpc29uIHJlYWRzIGFzIGl0IGRvZXMuIFRoZSBzZXJ2ZXIgc2VuZHMgY29kZXMsIG5ldmVyXG4vLyBzZW50ZW5jZXM7IHRoZSB2aWV3ZXIgd29yZHMgdGhlbS5cbi8vIC0gbm9fd2luZG93OiBubyBkYXRlIHJhbmdlIHRvIGNvbXBhcmUgeWV0O1xuLy8gLSB1bml0X2luZmVycmVkOiB0aGUgcGVyaW9kIHVuaXQgd2FzIGluZmVycmVkIGZyb20gdGhlIGRheXMsIG5vdCBuYW1lZDtcbi8vIC0gd2luZG93X2luX2Z1dHVyZTogdGhlIHdpbmRvdyBzdGFydHMgYWZ0ZXIgdG9kYXk7XG4vLyAtIG90aGVyX2RhdGVfZmlsdGVyOiBhIGRhdGUgZmlsdGVyIG9uIGFub3RoZXIgY29sdW1uIGFsc28gYXBwbGllcztcbi8vIC0gZ3JhaW5fZm9sbG93ZWQ6IHRoZSBwcmlvciBmb2xsb3dzIHRoZSBncm91cC1ieSBncmFpbiBwaWNrZWQgb24gdGhlIHJlcG9ydC5cbmV4cG9ydCB0eXBlIENvbXBhcmlzb25Ob3RlQ29kZSA9XG4gIHwgJ25vX3dpbmRvdydcbiAgfCAndW5pdF9pbmZlcnJlZCdcbiAgfCAnd2luZG93X2luX2Z1dHVyZSdcbiAgfCAnb3RoZXJfZGF0ZV9maWx0ZXInXG4gIHwgJ2dyYWluX2ZvbGxvd2VkJztcblxuLy8gT25lIGNvbXBhcmlzb24gd2luZG93OiBpbmNsdXNpdmUgJ3l5eXktTU0tZGQnIGRheXMgaW4gdGhlIHJlcG9ydCdzIHpvbmUsXG4vLyBhbmQgdGhlIFVUQyBpbnN0YW50IGl0IGlzIGN1dCBhdCB3aGVuIGl0IGVuZHMgdG9kYXkgb24gYSBkYXRldGltZSBjb2x1bW4uXG4vLyBJbiBzZXJpZXMgbW9kZSBpdCBpcyB0aGUgc3BhbiB0aGUgY2hhcnQgc2hvd3MuXG5leHBvcnQgaW50ZXJmYWNlIENvbXBhcmlzb25XaW5kb3cge1xuICBzdGFydDogc3RyaW5nO1xuICBlbmQ6IHN0cmluZztcbiAgdGhyb3VnaDogc3RyaW5nIHwgbnVsbDtcbn1cblxuLy8gSG93IGZhciBiYWNrIG9uZSBwcmlvciBsYW5lIHNpdHMuIEEgY3VzdG9tIHJhbmdlIGhhcyBubyB1bml0IG9yIGNvdW50LCBhbmRcbi8vIG5laXRoZXIgZG9lcyBwcmV2aW91c19wZXJpb2Qgd2hlbiB0aGVyZSBpcyBubyBjdXJyZW50IHdpbmRvdyB0byBtZWFzdXJlXG4vLyAobm9fd2luZG93LCB3aW5kb3dfaW5fZnV0dXJlKTsgYSBzaGlmdCBieSB0aGUgd2luZG93J3MgbGVuZ3RoIGlzIHVuaXQgZGF5XG4vLyB3aXRoIHRoZSBsZW5ndGggYXMgdGhlIGNvdW50OyBhIHByZXZpb3VzIHllYXIgaXMgMzY0IGRheXMgb24gYSBkYXkgYXhpcyBhbmRcbi8vIDUyIHdlZWtzIG9uIGEgd2VlayBheGlzLlxuZXhwb3J0IGludGVyZmFjZSBDb21wYXJpc29uT2Zmc2V0IHtcbiAgYWdhaW5zdDogQ29tcGFyaXNvbkFnYWluc3Q7XG4gIHVuaXQ6IENoYXJ0R3JhbnVsYXJpdHkgfCBudWxsO1xuICBjb3VudDogbnVtYmVyIHwgbnVsbDtcbn1cblxuLy8gQSBjb21wb25lbnQncyBjb21wYXJpc29uOiB0aGUgem9uZSBpdHMgZGF5cyBhcmUgaW4sIHRoZSBjdXJyZW50IHdpbmRvd1xuLy8gKG51bGwgd2hlbiB0aGVyZSBpcyBubyB3aW5kb3cgdG8gY29tcGFyZSB5ZXQsIG9yIHdoZW4gYSB0aW1lIGF4aXMgcnVuc1xuLy8gb3ZlciBhbGwgdGhlIGRhdGEsIHdoaWNoIGhhcyBubyBmaXJzdCBkYXkgdG8gbmFtZSkgYW5kIHVwIHRvIDIgcHJpb3Jcbi8vIGxhbmVzOiBvZmZzZXRzW2ldIGRlc2NyaWJlcyBsYW5lIGkgKyAxLCBhbmQgcHJpb3JzW2ldIGl0cyB3aW5kb3cuIFdpdGggbm9cbi8vIGN1cnJlbnQgd2luZG93IHByaW9ycyBpcyBlbXB0eSwgd2hpbGUgb2Zmc2V0cyBzdGlsbCBuYW1lcyBldmVyeSBsYW5lLlxuLy8gZmxvb3IgaXMgdGhlICd5eXl5LU1NLWRkJyBkYXkgb2YgdGhlIGZpcnN0IHJvdyB0aGUgcXVlcnkncyBvd24gY29uZGl0aW9uc1xuLy8ga2VlcCAodmlld2VyIGZpbHRlcnMgYXNpZGUpOiBhIHByaW9yIHdpbmRvdyB3aG9sbHkgYmVmb3JlIGl0IGhhcyBubyBkYXRhXG4vLyByYXRoZXIgdGhhbiBhIHplcm8uXG5leHBvcnQgaW50ZXJmYWNlIENvbXBvbmVudENvbXBhcmlzb24ge1xuICBtb2RlOiBDb21wYXJpc29uTW9kZTtcbiAgdGltZXpvbmU6IHN0cmluZztcbiAgYWxpZ246IENvbXBhcmlzb25BbGlnbjtcbiAgY3VycmVudDogQ29tcGFyaXNvbldpbmRvdyB8IG51bGw7XG4gIHByaW9yczogQ29tcGFyaXNvbldpbmRvd1tdO1xuICBvZmZzZXRzOiBDb21wYXJpc29uT2Zmc2V0W107XG4gIGZsb29yOiBzdHJpbmcgfCBudWxsO1xuICBub3RlczogQ29tcGFyaXNvbk5vdGVDb2RlW107XG59XG5cbi8vIFdoYXQgYW4gb3V0cHV0IGNvbHVtbiBob2xkczogYSBtZWFzdXJlJ3MgdmFsdWUsIGl0cyByYW5rIG9yIGl0cyBzaGFyZS5cbmV4cG9ydCB0eXBlIE91dHB1dEtpbmQgPSAndmFsdWUnIHwgJ3JhbmsnIHwgJ3NoYXJlJztcblxuLy8gV2hpY2ggc2lkZSBvZiBhIGNvbXBhcmlzb24gYW4gb3V0cHV0IGNvbHVtbiBpczogdGhlIGN1cnJlbnQgdmFsdWUsIHRoZVxuLy8gcHJpb3Igb25lLCB0aGVpciBkaWZmZXJlbmNlLCBvciB0aGUgZGlmZmVyZW5jZSBhcyBhIDAtMSBmcmFjdGlvbiBvZiB0aGVcbi8vIHByaW9yLiBudWxsIGZvciBhbiBvdXRwdXQgdGhhdCBpcyBub3QgY29tcGFyZWQuXG5leHBvcnQgdHlwZSBPdXRwdXRSb2xlID0gJ2N1cnJlbnQnIHwgJ3ByaW9yJyB8ICdjaGFuZ2UnIHwgJ3BlcmNlbnRfY2hhbmdlJztcblxuLy8gSG93IHRpZWQgdmFsdWVzIHJhbms6IDEsIDEsIDMgKGNvbXBldGl0aW9uKSBvciAxLCAxLCAyIChkZW5zZSkuXG5leHBvcnQgdHlwZSBPdXRwdXRSYW5rTWV0aG9kID0gJ2NvbXBldGl0aW9uJyB8ICdkZW5zZSc7XG5cbi8vIEEgcmFuayBvdXRwdXQ6IGhvdyB0aWVzIHJhbmssIHdoaWNoIGVuZCByYW5rcyAxIChkZXNjOiB0aGUgbGFyZ2VzdCksIGFuZFxuLy8gdGhlIGRpbWVuc2lvbiBvdXRwdXRzIGl0IHJlc3RhcnRzIHdpdGhpbiAobm9uZTogdGhlIHdob2xlIHJlc3VsdCkuXG5leHBvcnQgaW50ZXJmYWNlIE91dHB1dFJhbmsge1xuICBtZXRob2Q6IE91dHB1dFJhbmtNZXRob2Q7XG4gIGRpcmVjdGlvbjogJ2FzYycgfCAnZGVzYyc7XG4gIHdpdGhpbjogc3RyaW5nW107XG59XG5cbi8vIEEgc2hhcmUgb3V0cHV0OiB0aGUgZGltZW5zaW9uIG91dHB1dHMgd2hvc2UgdG90YWwgaXQgaXMgYSBzaGFyZSBvZiAobm9uZTpcbi8vIHRoZSB3aG9sZSByZXN1bHQpLlxuZXhwb3J0IGludGVyZmFjZSBPdXRwdXRTaGFyZSB7XG4gIHdpdGhpbjogc3RyaW5nW107XG59XG5cbi8vIFRoZSBtZWFuaW5nIG9mIG9uZSBjb21wYXJlZCwgd2luZG93ZWQsIHJhbmtlZCBvciBzaGFyZWQgb3V0cHV0IGNvbHVtbi5cbi8vIG1lYXN1cmUgaXMgdGhlIHNvdXJjZSBtZWFzdXJlJ3MgYWxpYXMsIHdob3NlIGZvcm1hdCB0aGUgY29sdW1uIGluaGVyaXRzO1xuLy8gb2Zmc2V0IGlzIHRoZSBwcmlvciBsYW5lIGEgcHJpb3IsIGNoYW5nZSBvciBwZXJjZW50IGNoYW5nZSBiZWxvbmdzIHRvIChpdHNcbi8vIHdpbmRvdyBpcyBjb21wYXJpc29uLnByaW9yc1tvZmZzZXQgLSAxXSkuIFVubGVzcyB0aGUgY29uZmlnIGZvcm1hdHMgaXQsIGFcbi8vIHNoYXJlIHByaW50cyBhcyBhIHBlcmNlbnQgdG8gMSBkZWNpbWFsIGFuZCBhIHJhbmsgYXMgYSB3aG9sZSBudW1iZXIuXG5leHBvcnQgaW50ZXJmYWNlIE91dHB1dE1ldGEge1xuICBtZWFzdXJlOiBzdHJpbmc7XG4gIGtpbmQ6IE91dHB1dEtpbmQ7XG4gIHJvbGU6IE91dHB1dFJvbGUgfCBudWxsO1xuICBvZmZzZXQ6IG51bWJlciB8IG51bGw7XG4gIHdpbmRvdzogYm9vbGVhbjtcbiAgcmFuazogT3V0cHV0UmFuayB8IG51bGw7XG4gIHNoYXJlOiBPdXRwdXRTaGFyZSB8IG51bGw7XG59XG5cbi8vIEEgd2luZG93IG92ZXIgdGhlIHJvd3M6IGEgcnVubmluZyB0b3RhbCwgYSB0b3RhbCB0byBkYXRlIHdpdGhpbiBlYWNoXG4vLyBwZXJpb2QgKG1vbnRoIHRvIGRhdGUpLCBvciBhIHJvbGxpbmcgc3BhbiBvZiBwZXJpb2RzLlxuZXhwb3J0IHR5cGUgV2luZG93S2luZCA9ICdydW5uaW5nJyB8ICd0b19kYXRlJyB8ICdyb2xsaW5nJztcblxuLy8gV2h5IGEgd2luZG93IHJlYWRzIGFzIGl0IGRvZXMuIENvZGVzIG9ubHk7IHRoZSB2aWV3ZXIgd29yZHMgdGhlbS5cbmV4cG9ydCB0eXBlIFdpbmRvd05vdGVDb2RlID1cbiAgfCAnc25hcHBlZF9zdGFydCdcbiAgfCAnc3Bhbl9jb252ZXJ0ZWQnXG4gIHwgJ2dyYWluX3Rvb19jb2Fyc2UnXG4gIHwgJ2VxdWFsX2dyYWluX3BsYWluJ1xuICB8ICdvd25fZmlsdGVyX2NhcHNfbGVhZF9pbidcbiAgfCAnd2Vla19ieV9tb25kYXknXG4gIHwgJ2luY29tcGxldGVfaGVhZCc7XG5cbi8vIEhvdyBvbmUgd2luZG93ZWQgb3V0cHV0IGNvbHVtbiB3YXMgY29tcHV0ZWQuIHBlcmlvZHMgYW5kIHVuaXQgc2l6ZSBhXG4vLyByb2xsaW5nIHdpbmRvdyAoZHJhd25QZXJpb2RzIGlzIHRoYXQgc3BhbiBjb3VudGVkIGluIHRoZSBncmFpbiB0aGUgcm93c1xuLy8gYXJlIGRyYXduIGF0KTsgcmVzZXRFdmVyeSByZXN0YXJ0cyBhIHRvLWRhdGUgd2luZG93OyBhdmVyYWdlIG1ha2VzIHRoZVxuLy8gd2luZG93IGFuIGF2ZXJhZ2UgcmF0aGVyIHRoYW4gYSB0b3RhbDsgZnJvbUJlZ2lubmluZ1xuLy8gcnVucyBhIHRvdGFsIGZyb20gdGhlIGZpcnN0IHJvdyBldmVyIHJhdGhlciB0aGFuIGZyb20gdGhlIGZpcnN0IHJvdyBzaG93bi5cbi8vIHN0YXJ0LCBlbmQgYW5kIGxlYWRJbiBhcmUgJ3l5eXktTU0tZGQnIHJlcG9ydC16b25lIGRheXM6IHRoZSByb3dzIHNob3duLFxuLy8gYW5kIHRoZSBlYXJsaWVyIGRheSB0aGUgd2luZG93IHJlYWRzIGZyb20gc28gaXRzIGZpcnN0IHJvd3MgYXJlIHdob2xlLlxuLy8gZGVzY3JpcHRpb24gaXMgdGhlIHNlcnZlcidzIEVuZ2xpc2ggZm9yIHRoZSBhZ2VudCBhbmQgdGhlIGV4cG9ydHM7IHRoZVxuLy8gdmlld2VyIGNvbXBvc2VzIGl0cyBvd24gd29yZHMgZnJvbSB0aGUgZmllbGRzLlxuZXhwb3J0IGludGVyZmFjZSBXaW5kb3dNZXRhIHtcbiAga2luZDogV2luZG93S2luZDtcbiAgcGVyaW9kczogbnVtYmVyIHwgbnVsbDtcbiAgdW5pdDogQ2hhcnRHcmFudWxhcml0eSB8IG51bGw7XG4gIGRyYXduUGVyaW9kczogbnVtYmVyIHwgbnVsbDtcbiAgcmVzZXRFdmVyeTogQ2hhcnRHcmFudWxhcml0eSB8IG51bGw7XG4gIGF2ZXJhZ2U6IGJvb2xlYW47XG4gIGZyb21CZWdpbm5pbmc6IGJvb2xlYW47XG4gIGRhdGVDb2x1bW46IHN0cmluZyB8IG51bGw7XG4gIHN0YXJ0OiBzdHJpbmcgfCBudWxsO1xuICBlbmQ6IHN0cmluZyB8IG51bGw7XG4gIGxlYWRJbjogc3RyaW5nIHwgbnVsbDtcbiAgbm90ZXM6IFdpbmRvd05vdGVDb2RlW107XG4gIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG59XG5cbi8vIFdoaWNoIGRlbHRhIGEgS1BJIGNhcmQgc2hvd3M6IHRoZSBkaWZmZXJlbmNlLCBvciB0aGUgcGVyY2VudCBjaGFuZ2UuXG5leHBvcnQgdHlwZSBLcGlEZWx0YVNob3cgPSAnY2hhbmdlJyB8ICdwZXJjZW50X2NoYW5nZSc7XG5cbi8vIFdoeSBhIEtQSSdzIGRlbHRhIHJlYWRzIGFzIGl0IGRvZXM6XG4vLyAtIG5vX3ByaW9yX2RhdGE6IHRoZSBwcmlvciB3aW5kb3cgaGFzIG5vIHZhbHVlO1xuLy8gLSB1cF9mcm9tX3plcm86IHRoZSBwcmlvciB3YXMgMCwgc28gdGhlcmUgaXMgbm8gcGVyY2VudCBjaGFuZ2U7XG4vLyAtIG5vX2NoYW5nZTogYm90aCBhcmUgMDtcbi8vIC0gbm9fZGF0YV9laXRoZXI6IG5laXRoZXIgd2luZG93IGhhcyBhIHZhbHVlO1xuLy8gLSBzaWduX2NoYW5nZTogdGhlIHZhbHVlIGNyb3NzZWQgemVybywgc28gdGhlcmUgaXMgbm8gcGVyY2VudCBjaGFuZ2UuXG5leHBvcnQgdHlwZSBLcGlOb3RlQ29kZSA9XG4gIHwgJ25vX3ByaW9yX2RhdGEnXG4gIHwgJ3VwX2Zyb21femVybydcbiAgfCAnbm9fY2hhbmdlJ1xuICB8ICdub19kYXRhX2VpdGhlcidcbiAgfCAnc2lnbl9jaGFuZ2UnO1xuXG4vLyBBIEtQSSdzIHByb2dyZXNzIHRvd2FyZCBpdHMgY29uZmlndXJlZCB0YXJnZXQuIHByb2dyZXNzIGlzIHZhbHVlIC8gdGFyZ2V0XG4vLyAobnVsbCB3aGVuIHRoZSB0YXJnZXQgaXMgMCk7IG1ldCBmb2xsb3dzIHRoZSBjb25maWcncyBpbmNyZWFzZUlzIChudWxsXG4vLyB3aGVuIGl0IGlzIG5ldXRyYWwpLlxuZXhwb3J0IGludGVyZmFjZSBDb21wb25lbnRLcGlUYXJnZXQge1xuICB2YWx1ZTogbnVtYmVyO1xuICBsYWJlbDogc3RyaW5nIHwgbnVsbDtcbiAgcHJvZ3Jlc3M6IG51bWJlciB8IG51bGw7XG4gIG1ldDogYm9vbGVhbiB8IG51bGw7XG59XG5cbi8vIE9uZSBzcGFya2xpbmUgcG9pbnQ6IHRoZSBwZXJpb2QsIHdyaXR0ZW4gYXMgYSB0aW1lLWF4aXMgdmFsdWUsIGFuZCB0aGVcbi8vIHZhbHVlIGluIGl0IChudWxsIHdoZW4gYSBub24tYWRkaXRpdmUgbWVhc3VyZSBoYXMgbm8gcm93cyB0aGVyZSkuXG5leHBvcnQgaW50ZXJmYWNlIENvbXBvbmVudEtwaVNwYXJrbGluZVBvaW50IHtcbiAgcGVyaW9kOiBzdHJpbmc7XG4gIHZhbHVlOiBudW1iZXIgfCBudWxsO1xufVxuXG4vLyBBIEtQSSdzIHNwYXJrbGluZSBwb2ludHMsIG9sZGVzdCBmaXJzdC4gcGFydGlhbCBzYXlzIHRoZSBsYXN0IHBlcmlvZCBpc1xuLy8gbm90IGZpbmlzaGVkIHlldC5cbmV4cG9ydCBpbnRlcmZhY2UgQ29tcG9uZW50S3BpU3BhcmtsaW5lIHtcbiAgZ3JhbnVsYXJpdHk6IENoYXJ0R3JhbnVsYXJpdHk7XG4gIHBhcnRpYWw6IGJvb2xlYW47XG4gIHBvaW50czogQ29tcG9uZW50S3BpU3BhcmtsaW5lUG9pbnRbXTtcbn1cblxuLy8gRXZlcnkgbnVtYmVyIGEgS1BJIGNhcmQgc2hvd3MgYmVzaWRlIGl0cyB2YWx1ZS4gc2hvdyBuYW1lcyB0aGUgZGVsdGEgdG9cbi8vIHByaW50LCBkZWNpZGVkIGJ5IHRoZSBzZXJ2ZXIuIFdoZW4gdmFsdWUgaXMgbnVsbCB0aGUgY2FyZCBzaG93cyBhIGRhc2ggYW5kXG4vLyBubyBjb21wYXJpc29uLlxuZXhwb3J0IGludGVyZmFjZSBDb21wb25lbnRLcGkge1xuICB2YWx1ZTogbnVtYmVyIHwgbnVsbDtcbiAgcHJpb3I6IG51bWJlciB8IG51bGw7XG4gIGNoYW5nZTogbnVtYmVyIHwgbnVsbDtcbiAgcGVyY2VudENoYW5nZTogbnVtYmVyIHwgbnVsbDtcbiAgc2hvdzogS3BpRGVsdGFTaG93O1xuICBub3RlOiBLcGlOb3RlQ29kZSB8IG51bGw7XG4gIHRhcmdldDogQ29tcG9uZW50S3BpVGFyZ2V0IHwgbnVsbDtcbiAgc3BhcmtsaW5lOiBDb21wb25lbnRLcGlTcGFya2xpbmUgfCBudWxsO1xufVxuXG4vLyBBIGNvbXBvbmVudCdzIENTViBleHBvcnQ6IHRoZSBwcmVzaWduZWQgZG93bmxvYWQgVVJMLCBwbHVzIG9uZSBzZW50ZW5jZSBwZXJcbi8vIHdheSB0aGUgZmlsZSBmYWxscyBzaG9ydCBvZiB0aGUgZnVsbCByZXN1bHQgKGN1dCBhdCB0aGUgZXhwb3J0IGNlaWxpbmcsIG9yXG4vLyBjdXQgYXMgdGhlIGNoYXJ0IGl0c2VsZiBpcykuIEVtcHR5IHdoZW4gdGhlIGZpbGUgaXMgY29tcGxldGUuIE9wdGlvbmFsXG4vLyBiZWNhdXNlIGEgc2VydmVyIG9uIGFuIG9sZGVyIGZyYW1ld29yayBhbnN3ZXJzIHdpdGggdGhlIHVybCBhbG9uZS5cbmV4cG9ydCBpbnRlcmZhY2UgQ29tcG9uZW50RXhwb3J0UmVzcG9uc2Uge1xuICB1cmw6IHN0cmluZztcbiAgbm90ZXM/OiBzdHJpbmdbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZXBvcnRMaXN0SXRlbSB7XG4gIGlkOiBudW1iZXI7XG4gIG5hbWU6IHN0cmluZztcbiAgbW9kaWZ5RGF0ZTogc3RyaW5nO1xuICBzdGF0ZT86IFJlcG9ydFN0YXRlO1xuICAvLyBUaGUgZm9sZGVyIHRoZSByZXBvcnQgaXMgZmlsZWQgdW5kZXIuIG51bGwgaXMgYSByZWFsLCBjb21tb24gdmFsdWUg4oCUIHRoZVxuICAvLyByZXBvcnQgc2l0cyBhdCB0aGUgcm9vdCBvZiB0aGUgbGlzdGluZyB0cmVlIGFsb25nc2lkZSB0aGUgZm9sZGVycy5cbiAgLy9cbiAgLy8gT3B0aW9uYWwgbGlrZSBgc3RhdGVgIGJlc2lkZSBpdDogdGhlIGJhY2tlbmQgYWx3YXlzIHNlbmRzIGl0LCBidXQgbWFraW5nIGl0XG4gIC8vIHJlcXVpcmVkIGlzIGEgYnJlYWtpbmcgdHlwZSBjaGFuZ2UgZm9yIGV2ZXJ5IGNvbnN1bWVyIGhvbGRpbmcgYVxuICAvLyBSZXBvcnRMaXN0SXRlbSBsaXRlcmFsIChmaXh0dXJlcywgbW9ja3MpIGFuZCBidXlzIG5vdGhpbmcg4oCUIHRoZSBsaXN0aW5nXG4gIC8vIHJlYWRzIGl0IGFzIGA/PyBudWxsYCBlaXRoZXIgd2F5LlxuICByZXBvcnRGb2xkZXJJZD86IG51bWJlciB8IG51bGw7XG59XG5cbi8vIE9uZSBmb2xkZXIgaW4gdGhlIGxpc3RpbmcgdHJlZSDigJQgYW4gYXVkaWVuY2UgYnVja2V0IChcIk1hbmFnZW1lbnRcIixcbi8vIFwiT3BlcmF0aW9uc1wiKSByZXBvcnRzIGFyZSBmaWxlZCBpbnRvLiBGb2xkZXJzIG5lc3QgdmlhIHBhcmVudFJlcG9ydEZvbGRlcklkO1xuLy8gcmVwb3J0cyBuZXZlciBkbywgc28gdGhlIHRyZWUncyBvbmx5IGJyYW5jaCBub2RlcyBhcmUgZm9sZGVycy5cbi8vXG4vLyBgc3RhdGVgIGlzIHRoZSBmb2xkZXIncyBPV04gc3RhdGUuIERlbGV0aW5nIGEgZm9sZGVyIHdyaXRlcyBvbmx5IHRoYXQsIGFuZFxuLy8gZXZlcnl0aGluZyBiZWxvdyBpdCBjb3VudHMgYXMgZGVsZXRlZCBieSBwb3NpdGlvbiDigJQgc2VlIFJlcG9ydE5vZGUuZGVsZXRlZC5cbmV4cG9ydCBpbnRlcmZhY2UgUmVwb3J0Rm9sZGVyIHtcbiAgaWQ6IG51bWJlcjtcbiAgbmFtZTogc3RyaW5nO1xuICBwYXJlbnRSZXBvcnRGb2xkZXJJZDogbnVtYmVyIHwgbnVsbDtcbiAgc3RhdGU/OiBSZXBvcnRTdGF0ZTtcbn1cblxuLy8gR0VUIC9hcGkvcmVwb3J0cyByZXR1cm5zIGJvdGggaGFsdmVzIGZsYXQ7IHRoZSBsaXN0aW5nIG5lc3RzIHRoZW0gaXRzZWxmLlxuZXhwb3J0IGludGVyZmFjZSBSZXBvcnRUcmVlIHtcbiAgcmVwb3J0czogUmVwb3J0TGlzdEl0ZW1bXTtcbiAgZm9sZGVyczogUmVwb3J0Rm9sZGVyW107XG59XG5cbmV4cG9ydCBlbnVtIFJlcG9ydE5vZGVUeXBlIHtcbiAgRm9sZGVyID0gJ2ZvbGRlcicsXG4gIFJlcG9ydCA9ICdyZXBvcnQnLFxufVxuXG4vLyBPbmUgbm9kZSBhcyBmcy10cmVlIHNlZXMgaXQuIEZvbGRlcnMgYW5kIHJlcG9ydHMgc2hhcmUgb25lIGlkIHNwYWNlIGluIHRoZVxuLy8gdmlldywgc28gdGhlIGlkcyBhcmUgcHJlZml4ZWQgKCdmOjEyJyAvICdyOjM0Jykg4oCUIGBpZGAgaXMgdGhlIG9yaWdpbmFsLFxuLy8gcGVyLXRhYmxlIGlkIHRoYXQgdGhlIEFQSSBlbmRwb2ludHMgdGFrZS5cbmV4cG9ydCBpbnRlcmZhY2UgUmVwb3J0Tm9kZSB7XG4gIGtleTogc3RyaW5nO1xuICBpZDogbnVtYmVyO1xuICBuYW1lOiBzdHJpbmc7XG4gIHR5cGU6IFJlcG9ydE5vZGVUeXBlO1xuICAvLyBPbmx5IGV2ZXIgcG9wdWxhdGVkIG9uIGEgZm9sZGVyOyBhIHJlcG9ydCBpcyBhbHdheXMgYSBsZWFmLlxuICBjaGlsZHJlbjogUmVwb3J0Tm9kZVtdO1xuICAvLyBQcmVzZW50IG9uIHJlcG9ydCBub2RlcyBvbmx5LlxuICByZXBvcnQ/OiBSZXBvcnRMaXN0SXRlbTtcbiAgLy8gVGhlIG5vZGUncyBvd24gcm93IGlzIGRlbGV0ZWQuIFdoYXQgZWFybnMgdGhlIFwiRGVsZXRlZFwiIGNoaXAg4oCUIHRoaXMgaXNcbiAgLy8gd2hhdCBzb21lYm9keSBhY3R1YWxseSBkZWxldGVkLlxuICBzdGF0ZURlbGV0ZWQ6IGJvb2xlYW47XG4gIC8vIERlbGV0ZWQgaXRzZWxmIE9SIGFueXdoZXJlIGJlbG93IGEgZGVsZXRlZCBmb2xkZXIuIE9ubHkgZXZlciB0cnVlIGluIFNob3dcbiAgLy8gRGVsZXRlZCBtb2RlICh0aGUgZGVmYXVsdCBsaXN0aW5nIG5ldmVyIHJldHVybnMgc3VjaCBhIG5vZGUpLCBhbmQgaXQgaXMgd2hhdFxuICAvLyBzd2FwcyB0aGUgcm93J3MgYWN0aW9ucyBmb3IgUmVzdG9yZS5cbiAgZGVsZXRlZDogYm9vbGVhbjtcbn1cblxuLy8gUmVwb3J0cyBhbmQgZm9sZGVycyBhcmUgYm90aCBzb2Z0LWRlbGV0YWJsZS4gQSBkZWxldGVkIHJlcG9ydCBrZWVwcyBpdHMgcGFnZXNcbi8vIGFuZCBjb21wb25lbnRzOyBhIGRlbGV0ZWQgZm9sZGVyIGtlZXBzIGV2ZXJ5dGhpbmcgZmlsZWQgdW5kZXIgaXQsIHdoaWNoIGxlYXZlc1xuLy8gdGhlIGxpc3Rpbmcgd2l0aCBpdCBhbmQgY29tZXMgYmFjayB3aXRoIGl0LiBcIlNob3cgRGVsZXRlZFwiIHNob3dzIHRoZSB3aG9sZVxuLy8gdHJlZSwgbGl2ZSBhbmQgZGVsZXRlZCB0b2dldGhlciwgc28gYW55IG9mIGl0IGNhbiBiZSByZXN0b3JlZCBpbiBwbGFjZS5cbmV4cG9ydCBlbnVtIFJlcG9ydFN0YXRlIHtcbiAgQWN0aXZlID0gJ2FjdGl2ZScsXG4gIERlbGV0ZWQgPSAnZGVsZXRlZCcsXG59XG5cbi8vIFRoZSBjaGF0IHR1cm4gZmxhZ3MgdGhpcyBjb250ZXh0J3MgYmFja2VuZCBhZGRzIChSZXBvcnRzXFxBaVZpZXcpLlxuZXhwb3J0IGludGVyZmFjZSBSZXBvcnRDaGF0UmVzcG9uc2Uge1xuICByZXBvcnRDaGFuZ2VkPzogYm9vbGVhbjtcbiAgcmVwb3J0UmVuYW1lZD86IGJvb2xlYW47XG59XG5cbi8vIE9uZSB2ZXJzaW9uIG9mIHRoZSBnbG9iYWwgQUkga25vd2xlZGdlIGRvY3VtZW50IOKAlCB0aGUgb3BlcmF0b3ItYXV0aG9yZWRcbi8vIG1hcmtkb3duIGFwcGVuZGVkIHRvIHRoZSByZXBvcnQgYWdlbnQncyBzeXN0ZW0gaW5zdHJ1Y3Rpb25zIG9uIGV2ZXJ5IHR1cm4uXG5leHBvcnQgaW50ZXJmYWNlIFJlcG9ydEluc3RydWN0aW9uIHtcbiAgaWQ6IG51bWJlcjtcbiAgY29udGVudDogc3RyaW5nO1xuICBjdXJyZW50OiBib29sZWFuO1xuICBjcmVhdGVEYXRlOiBEYXRlO1xuICBtb2RpZnlEYXRlOiBEYXRlO1xuICBhY2NvdW50SWQ6IG51bWJlciB8IG51bGw7XG4gIGFjY291bnROYW1lOiBzdHJpbmcgfCBudWxsO1xufVxuXG4vLyBHRVQvUFVUIGluc3RydWN0aW9ucyBwYXlsb2FkOiB0aGUgY3VycmVudCB2ZXJzaW9uIChudWxsIHVudGlsIG9uZSBpc1xuLy8gYXV0aG9yZWQpIHBsdXMgdGhlIGZ1bGwgaGlzdG9yeSwgbmV3ZXN0IGZpcnN0LlxuZXhwb3J0IGludGVyZmFjZSBSZXBvcnRJbnN0cnVjdGlvbnMge1xuICBpbnN0cnVjdGlvbnM6IFJlcG9ydEluc3RydWN0aW9uIHwgbnVsbDtcbiAgdmVyc2lvbnM6IFJlcG9ydEluc3RydWN0aW9uW107XG59XG5cbi8vIFRoZSBsYXRlc3Qgc2VtYW50aWMtZGF0YWJhc2UgYnVpbGQgKGFuIGZmX3Byb2Nlc3NlcyByb3cpIOKAlCBlbm91Z2ggZm9yIHRoZVxuLy8gc2V0dGluZ3MgZGlhbG9nIHRvIHNheSB3aGF0IHN0YXRlIHRoZSBidWlsZCBpcyBpbiBhbmQgd2hlbiBpdCBsYXN0IHJhbi5cbmV4cG9ydCBpbnRlcmZhY2UgU2VtYW50aWNCdWlsZCB7XG4gIGlkOiBudW1iZXI7XG4gIHN0YXRlOiBzdHJpbmc7XG4gIHBlcmNlbnQ6IG51bWJlciB8IHN0cmluZztcbiAgbWVzc2FnZTogc3RyaW5nO1xuICBkdXJhdGlvbjogbnVtYmVyO1xuICBjcmVhdGVEYXRlOiBEYXRlO1xuICBzdGFydERhdGU6IERhdGU7XG4gIGVuZERhdGU6IERhdGU7XG59XG5cbi8vIEEgYnVpbGQgc3RhZ2UncyBzdGF0ZSBvbiB0aGUgZW50aXR5IHNjb3JlYm9hcmQ6ICdkb25lJyA9IGJ1aWx0LCAnbWlzc2luZycgPVxuLy8gc3RpbGwgbmVlZHMgYnVpbGRpbmcgKGEgbWlzc2luZyBzdGFnZSBpcyB1bmJ1aWx0IGNvbnRlbnQsIG5ldmVyIGFuIGVycm9yKS5cbmV4cG9ydCB0eXBlIFNlbWFudGljQnVpbGRTdGFnZSA9ICdkb25lJyB8ICdtaXNzaW5nJztcblxuLy8gT25lIGVudW0gY29sdW1uIG9mIGFuIGVudGl0eSwgd2l0aCB0aGUgYWxsb3dlZCB2YWx1ZXMgdGhlIGJ1aWxkIGlubGluZWQuXG5leHBvcnQgaW50ZXJmYWNlIFNlbWFudGljQnVpbGRFbnVtIHtcbiAgY29sdW1uOiBzdHJpbmc7XG4gIHZhbHVlczogc3RyaW5nW107XG59XG5cbi8vIE9uZSBlbnRpdHkgcm93IG9mIHRoZSBzY29yZWJvYXJkIChhbiBlbnRpdHkgPSBhIHRhYmxlICsgYSBtb2RlbCArIGFcbi8vIGhhbmRsZXIpOiBpdHMgdGFibGUvc2hhcGUgY291bnRzLCBpbmxpbmVkIGVudW0gdmFsdWVzLCBjb21wdXRlZCBmaWVsZHMsIGhvd1xuLy8gbWFueSBjb2RlIGZ1bmN0aW9ucyB3ZXJlIGNhY2hlZCAoc3BsaXQgbW9kZWwgdnMgaGFuZGxlciksIGFuZCB0aGUgcGVyLXN0YWdlXG4vLyBidWlsdC9taXNzaW5nIHN0YXRlLlxuLy9cbi8vIGBtb2RlbGAvYGhhbmRsZXJgIGFyZSB0aGUgY2xhc3NlcyB0aGUgZnVuY3Rpb25zIHdlcmUgcmVhZCBmcm9tIOKAlCB3aGF0IGFcbi8vIHJlYWRlciByZWNvZ25pemVzIHRoZSByb3cgYnksIHdoZXJlIGBrZXlgIGlzIHdoYXQgdGhlIHJlcG9ydCBBSSBhZGRyZXNzZXMgaXRcbi8vIGJ5IGluIGRlc2NyaWJlX2VudGl0eSAvIGNvbXBpbGVfcXVlcnkuXG5leHBvcnQgaW50ZXJmYWNlIFNlbWFudGljQnVpbGRFbnRpdHkge1xuICBrZXk6IHN0cmluZztcbiAgdGFibGU6IHN0cmluZztcbiAgbW9kZWw6IHN0cmluZyB8IG51bGw7XG4gIGhhbmRsZXI6IHN0cmluZyB8IG51bGw7XG4gIGNvbHVtbnM6IG51bWJlcjtcbiAgcmVsYXRpb25zaGlwczogbnVtYmVyO1xuICBlbnVtczogU2VtYW50aWNCdWlsZEVudW1bXTtcbiAgY29tcHV0ZWRGaWVsZHM6IHN0cmluZ1tdO1xuICBmdW5jdGlvbkNvdW50OiBudW1iZXI7XG4gIG1vZGVsRnVuY3Rpb25Db3VudDogbnVtYmVyO1xuICBoYW5kbGVyRnVuY3Rpb25Db3VudDogbnVtYmVyO1xuICBzdGFnZXM6IFJlY29yZDxzdHJpbmcsIFNlbWFudGljQnVpbGRTdGFnZT47XG59XG5cbi8vIE9uZSBzdGFuZGFsb25lIGNvZGUgY2xhc3MgdGhlIGJ1aWxkIHJlYWQ6IGRvbWFpbiBsb2dpYyB3aXRoIG5vIHRhYmxlIG9mIGl0c1xuLy8gb3duIChhIHN1bW1hcnkgbW9kZWwsIGEgY2FsY3VsYXRpb24gc2VydmljZSkuIFRoZSByZXBvcnQgQUkgcmVhZHMgaXRzIGNvZGVcbi8vIGV4YWN0bHkgbGlrZSBhbiBlbnRpdHkncywgYnV0IGl0IGNhbiBuZXZlciBiZSBxdWVyaWVkIOKAlCB0aGVyZSBpcyBub3RoaW5nIHRvXG4vLyBzZWxlY3QgZnJvbSDigJQgc28gaXQgY2FycmllcyBubyB0YWJsZSwgY29sdW1ucyBvciByZWxhdGlvbnNoaXBzLlxuZXhwb3J0IGludGVyZmFjZSBTZW1hbnRpY0J1aWxkQ2xhc3Mge1xuICBrZXk6IHN0cmluZztcbiAgbW9kZWw6IHN0cmluZyB8IG51bGw7XG4gIGZ1bmN0aW9uQ291bnQ6IG51bWJlcjtcbn1cblxuLy8gV2hhdCB0aGUgYnVpbGQgZGVjaWRlZCBhIHBoeXNpY2FsIHRhYmxlIGlzLiBFbnRpdHkgYW5kIGp1bmN0aW9uIGFyZSBib3RoXG4vLyByZWFjaGFibGUgYnkgdGhlIHJlcG9ydCBBSSDigJQgYW4gZW50aXR5IGRpcmVjdGx5LCBhIGp1bmN0aW9uIHRocm91Z2ggdGhlXG4vLyBtYW55LXRvLW1hbnkgaXQgYnJpZGdlcy4gRXhjbHVkZWQgaXMgbm90IHJlYWNoYWJsZSBhdCBhbGwuXG5leHBvcnQgdHlwZSBTZW1hbnRpY1RhYmxlQ2xhc3NpZmljYXRpb24gPSAnZW50aXR5JyB8ICdqdW5jdGlvbicgfCAnZXhjbHVkZWQnO1xuXG4vLyBPbmUgcGh5c2ljYWwgdGFibGUgYXMgdGhlIGJ1aWxkIGNsYXNzaWZpZWQgaXQuIGByZWFzb25gIGFuc3dlcnMgYSBzaW5nbGVcbi8vIHF1ZXN0aW9uIOKAlCB3aHkgY2FuJ3QgdGhlIHJlcG9ydCBBSSBzZWUgdGhpcyB0YWJsZT8g4oCUIGFuZCBpcyBudWxsIHdoZW4gaXQgY2FuLlxuLy8gQSBqdW5jdGlvbiB3aXRoIGEgcmVhc29uIGJyaWRnZWQgbm90aGluZywgc28gaXQgaXMganVzdCBhcyBpbnZpc2libGUgYXMgYW5cbi8vIGV4Y2x1ZGVkIHRhYmxlLlxuZXhwb3J0IGludGVyZmFjZSBTZW1hbnRpY0J1aWxkVGFibGUge1xuICB0YWJsZTogc3RyaW5nO1xuICBjbGFzc2lmaWNhdGlvbjogU2VtYW50aWNUYWJsZUNsYXNzaWZpY2F0aW9uO1xuICBtb2RlbDogc3RyaW5nIHwgbnVsbDtcbiAgcmVhc29uOiBzdHJpbmcgfCBudWxsO1xufVxuXG4vLyBUaGUgYnVpbGQgc2NvcmVib2FyZCBzaGlwcGVkIGFsb25nc2lkZSB0aGUgYnVpbGQgc3RhdHVzOiB0aGUgc3VtbWFyeSBjb3VudHMsXG4vLyB0aGUgZnVsbCBicmVha2Rvd24gdGhlIHNldHRpbmdzIGRpYWxvZyBkcmlsbHMgaW50byDigJQgQk9USCBraW5kcyBvZiB1bml0IHRoZVxuLy8gYnVpbGQgY2FjaGVzLCB0YWJsZS1iYWNrZWQgZW50aXRpZXMgYW5kIHN0YW5kYWxvbmUgY29kZSBjbGFzc2VzIOKAlCBhbmQgdGhlXG4vLyBjYXRhbG9nIG9mIGV2ZXJ5IHRhYmxlIHRoZSBidWlsZCBzYXcsIHNvIHRoZSB0YWIgY2FuIHNob3cgd2hhdCB0aGUgcmVwb3J0IEFJXG4vLyBjYW4ndCBzZWUsIG5vdCBqdXN0IHdoYXQgaXQgY2FuLlxuLy9cbi8vIGBmdW5jdGlvbkNvdW50YCBzcGFucyBlbnRpdGllcyBhbmQgY2xhc3NlcyBhbGlrZTogaXQgaXMgdGhlIHNhbWUgdG90YWwgdGhlXG4vLyBidWlsZCBpdHNlbGYgcmVwb3J0cyB3aGVuIGl0IGZpbmlzaGVzLlxuLy9cbi8vIGB0YWJsZXNgIGlzIGVtcHR5IGZvciBhbiBhcnRpZmFjdCBidWlsdCBiZWZvcmUgdGhlIGNhdGFsb2cgZXhpc3RlZC4gUmVhZCB0aGF0XG4vLyBhcyBcIm5vIGNhdGFsb2dcIiwgbmV2ZXIgYXMgXCJub3RoaW5nIHdhcyBleGNsdWRlZFwiLlxuZXhwb3J0IGludGVyZmFjZSBTZW1hbnRpY0J1aWxkRGV0YWlsIHtcbiAgLy8gV2hldGhlciB0aGUgYXJ0aWZhY3Qgd2FzIHByb2R1Y2VkIGJ5IGEgYnVpbGQgdGhhdCByYW4gdG8gdGhlIGVuZC4gUmVhZCBpdFxuICAvLyBiZXNpZGUgYGdlbmVyYXRlZEF0YCwgbmV2ZXIgaW5zdGVhZCBvZiBpdDogdGhlIHN0cnVjdHVyYWwgYXJ0aWZhY3QgaXNcbiAgLy8gcHVibGlzaGVkIEJFRk9SRSB0aGUgQUkgZnVuY3Rpb24gcGFzcywgc28gYSBidWlsZCB3aG9zZSBBSSBwYXNzIGZhaWxlZCBzdGlsbFxuICAvLyBjYXJyaWVzIGEgZGF0ZSBhbmQgYSBmdWxsIHNldCBvZiBjb3VudHMuIFRoZSBkYXRlIHNheXMgc29tZXRoaW5nIHdhc1xuICAvLyB3cml0dGVuOyBvbmx5IHRoaXMgc2F5cyB0aGUgYnVpbGQgZmluaXNoZWQgd3JpdGluZyBpdC5cbiAgY29tcGxldGU6IGJvb2xlYW47XG4gIGdlbmVyYXRlZEF0OiBEYXRlIHwgbnVsbDtcbiAgZW50aXR5Q291bnQ6IG51bWJlcjtcbiAgY2xhc3NDb3VudDogbnVtYmVyO1xuICBmdW5jdGlvbkNvdW50OiBudW1iZXI7XG4gIGVudGl0aWVzOiBTZW1hbnRpY0J1aWxkRW50aXR5W107XG4gIGNsYXNzZXM6IFNlbWFudGljQnVpbGRDbGFzc1tdO1xuICB0YWJsZUNvdW50OiBudW1iZXI7XG4gIGp1bmN0aW9uQ291bnQ6IG51bWJlcjtcbiAgdW5saW5rZWRKdW5jdGlvbkNvdW50OiBudW1iZXI7XG4gIGV4Y2x1ZGVkQ291bnQ6IG51bWJlcjtcbiAgdGFibGVzOiBTZW1hbnRpY0J1aWxkVGFibGVbXTtcbn1cblxuLy8gV2hpY2ggY2xhc3MgYSBjYWNoZWQgZnVuY3Rpb24gd2FzIHJlYWQgZnJvbS4gQW4gZW50aXR5J3MgY2FjaGUgc3BsaXRzIGludG9cbi8vICdtb2RlbCcgYW5kICdoYW5kbGVyJzsgYSBzdGFuZGFsb25lIGNvZGUgY2xhc3MgaGFzIG9uZSBncm91cCwgJ2NsYXNzJy5cbmV4cG9ydCB0eXBlIFNlbWFudGljRnVuY3Rpb25Tb3VyY2UgPSAnbW9kZWwnIHwgJ2hhbmRsZXInIHwgJ2NsYXNzJztcblxuLy8gT25lIEFJLWNsYXNzaWZpZWQgY29kZSBmdW5jdGlvbiBmcm9tIGEgbW9kZWwsIGhhbmRsZXIgb3Igc3RhbmRhbG9uZSBjbGFzczpcbi8vIHdoYXQga2luZCBvZiBsb2dpYyBpdCBpcywgd2hhdCBpdCBkb2VzLCBhbmQgd2hhdCBpdCBwcm9kdWNlcyDigJQgdGhlIGJ1aWxkJ3Ncbi8vIGNhY2hlZCBcIndoYXQgdGhlIGNvZGUgZG9lc1wiIGtub3dsZWRnZSBzaG93biBpbiB0aGUgZnVuY3Rpb25zIGRpYWxvZy5cbmV4cG9ydCBpbnRlcmZhY2UgU2VtYW50aWNFbnRpdHlGdW5jdGlvbiB7XG4gIGNsYXNzOiBzdHJpbmc7XG4gIG1ldGhvZDogc3RyaW5nO1xuICBzaWduYXR1cmU6IHN0cmluZztcbiAga2luZDogc3RyaW5nO1xuICBzdW1tYXJ5OiBzdHJpbmc7XG4gIHByb2R1Y2VzOiBzdHJpbmc7XG4gIHNvdXJjZTogU2VtYW50aWNGdW5jdGlvblNvdXJjZTtcbn1cblxuLy8gT25lIGVudGl0eSdzIGNhY2hlZCBjb2RlLWZ1bmN0aW9uIGtub3dsZWRnZSwgZmV0Y2hlZCB3aGVuIGEgZnVuY3Rpb25zIGRpYWxvZ1xuLy8gb3BlbnMgKHRoZSBmdWxsIHNldCBhY3Jvc3MgYWxsIGVudGl0aWVzIGlzIHRvbyBiaWcgdG8gc2hpcCB3aXRoIHRoZVxuLy8gc2NvcmVib2FyZCkuIE9uZSBwYXlsb2FkIHNlcnZlcyBib3RoIGRpYWxvZ3Mg4oCUIGNvbnN1bWVycyBmaWx0ZXIgYnkgc291cmNlLlxuZXhwb3J0IGludGVyZmFjZSBTZW1hbnRpY0VudGl0eUZ1bmN0aW9ucyB7XG4gIGVudGl0eTogc3RyaW5nO1xuICBnZW5lcmF0ZWRBdDogRGF0ZSB8IG51bGw7XG4gIG1vZGVsQ2xhc3M6IHN0cmluZyB8IG51bGw7XG4gIGhhbmRsZXJDbGFzczogc3RyaW5nIHwgbnVsbDtcbiAgZnVuY3Rpb25zOiBTZW1hbnRpY0VudGl0eUZ1bmN0aW9uW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2VtYW50aWNCdWlsZFN0YXR1cyB7XG4gIGJ1aWxkOiBTZW1hbnRpY0J1aWxkIHwgbnVsbDtcbiAgZGV0YWlsOiBTZW1hbnRpY0J1aWxkRGV0YWlsO1xufVxuXG4vLyBUaGUgcmVwb3J0IG1vZHVsZSdzIEdlbmVyYWwgc2V0dGluZ3MgKGEgc21hbGwgZ2xvYmFsIGtleS92YWx1ZSBzdG9yZSwgdGhlXG4vLyByZXBvcnRpbmcgY291bnRlcnBhcnQgb2YgdGhlIGFwcC13aWRlIHNldHRpbmdzKS4gRWFjaCB2YWx1ZSBzaGlwcyB3aXRoIHRoZVxuLy8gc2FmZSBiYW5kIGl0cyBlZGl0b3IgZmllbGQgaXMgYm91bmRlZCB0by5cbmV4cG9ydCBpbnRlcmZhY2UgUmVwb3J0U2V0dGluZ3Mge1xuICAvLyBIb3cgbWFueSBzdW1tYXJ5IGNhbGxzIHRoZSBzZW1hbnRpYyBidWlsZCBydW5zIGF0IG9uY2UuXG4gIHNlbWFudGljQnVpbGRDb25jdXJyZW5jeTogbnVtYmVyO1xuICBzZW1hbnRpY0J1aWxkQ29uY3VycmVuY3lNaW46IG51bWJlcjtcbiAgc2VtYW50aWNCdWlsZENvbmN1cnJlbmN5TWF4OiBudW1iZXI7XG59XG4iXX0=
30
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0LmludGVyZmFjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvcmVwb3J0cy9pbnRlcmZhY2VzL3JlcG9ydC5pbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsNkVBQTZFO0FBQzdFLG1FQUFtRTtBQUNuRSwrRUFBK0U7QUFDL0UsNEVBQTRFO0FBQzVFLG1DQUFtQztBQTBTbkMsNEVBQTRFO0FBQzVFLDJFQUEyRTtBQUMzRSx1REFBdUQ7QUFDdkQsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQWdEO0lBQzlFLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFO0lBQzdCLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFO0lBQy9CLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFO0lBQ2pDLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFO0lBQ3JDLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO0NBQ3BDLENBQUM7QUErdUJGLE1BQU0sQ0FBTixJQUFZLGNBR1g7QUFIRCxXQUFZLGNBQWM7SUFDeEIsbUNBQWlCLENBQUE7SUFDakIsbUNBQWlCLENBQUE7QUFDbkIsQ0FBQyxFQUhXLGNBQWMsS0FBZCxjQUFjLFFBR3pCO0FBdUJELGdGQUFnRjtBQUNoRixpRkFBaUY7QUFDakYsNkVBQTZFO0FBQzdFLDBFQUEwRTtBQUMxRSxNQUFNLENBQU4sSUFBWSxXQUdYO0FBSEQsV0FBWSxXQUFXO0lBQ3JCLGdDQUFpQixDQUFBO0lBQ2pCLGtDQUFtQixDQUFBO0FBQ3JCLENBQUMsRUFIVyxXQUFXLEtBQVgsV0FBVyxRQUd0QiIsInNvdXJjZXNDb250ZW50IjpbIi8vIFRoZSBhc3NlbWJsZWQgcmVwb3J0IHN0cnVjdHVyZSByZXR1cm5lZCBieSBHRVQgL2FwaS9yZXBvcnRzLzppZCDigJQgY29tcG9zZWRcbi8vIHNlcnZlci1zaWRlIGZyb20gdGhlIG5vcm1hbGl6ZWQgdGFibGVzIChyZXBvcnRzIOKGkiByZXBvcnRfcGFnZXMg4oaSXG4vLyByZXBvcnRfY29tcG9uZW50cyArIHJlcG9ydF9maWx0ZXJzLCBwbHVzIHJlcG9ydF9maWx0ZXJfZ3JvdXBzKS4gQWxsIGtleXMgYXJlXG4vLyBjYW1lbENhc2U7IGNvbXBvbmVudCBgY29uZmlnYCBpcyB0aGUgc3RhbmRhcmQgZm9ybWF0IHRoZSByZW5kZXJlciBtYXBzIHRvXG4vLyBFQ2hhcnRzIG9wdGlvbnMgLyBGc0xpc3QgY29uZmlnLlxuXG5pbXBvcnQgeyBSZXBvcnRDaGFuZ2VQb2xhcml0eSB9IGZyb20gJy4uL2VudW1zL3JlcG9ydC1jaGFuZ2UtcG9sYXJpdHkuZW51bSc7XG5pbXBvcnQgeyBSZXBvcnRDaGFydENvbG9yIH0gZnJvbSAnLi4vZW51bXMvcmVwb3J0LWNoYXJ0LWNvbG9yLmVudW0nO1xuaW1wb3J0IHsgUmVwb3J0Q2hhcnREYXRhTGFiZWxzIH0gZnJvbSAnLi4vZW51bXMvcmVwb3J0LWNoYXJ0LWRhdGEtbGFiZWxzLmVudW0nO1xuaW1wb3J0IHsgUmVwb3J0Q2hhcnREYXRlTGFiZWwgfSBmcm9tICcuLi9lbnVtcy9yZXBvcnQtY2hhcnQtZGF0ZS1sYWJlbC5lbnVtJztcbmltcG9ydCB7IFJlcG9ydENoYXJ0TGluZVN0eWxlIH0gZnJvbSAnLi4vZW51bXMvcmVwb3J0LWNoYXJ0LWxpbmUtc3R5bGUuZW51bSc7XG5pbXBvcnQgeyBSZXBvcnRDaGFydE1hcmtTdGF0IH0gZnJvbSAnLi4vZW51bXMvcmVwb3J0LWNoYXJ0LW1hcmstc3RhdC5lbnVtJztcbmltcG9ydCB7IFJlcG9ydExpc3RDb2x1bW5Gb3JtYXQgfSBmcm9tICcuLi9lbnVtcy9yZXBvcnQtbGlzdC1jb2x1bW4tZm9ybWF0LmVudW0nO1xuaW1wb3J0IHsgUmVwb3J0TnVtYmVyVW5pdHMgfSBmcm9tICcuLi9lbnVtcy9yZXBvcnQtbnVtYmVyLXVuaXRzLmVudW0nO1xuaW1wb3J0IHsgUmVwb3J0VmFsdWVGb3JtYXQgfSBmcm9tICcuLi9lbnVtcy9yZXBvcnQtdmFsdWUtZm9ybWF0LmVudW0nO1xuaW1wb3J0IHsgUmVwb3J0VmFsdWVGb3JtdWxhIH0gZnJvbSAnLi4vZW51bXMvcmVwb3J0LXZhbHVlLWZvcm11bGEuZW51bSc7XG5cbmltcG9ydCB7IENvbXBvbmVudERhdGFBcHBsaWVkIH0gZnJvbSAnLi9jb21wb25lbnQtZGF0YS1hcHBsaWVkLmludGVyZmFjZSc7XG5pbXBvcnQgeyBDb21wb25lbnREYXRhRHJpbGwgfSBmcm9tICcuL2NvbXBvbmVudC1kYXRhLWRyaWxsLmludGVyZmFjZSc7XG5pbXBvcnQgeyBSZXBvcnREcmlsbFN0ZXAgfSBmcm9tICcuL3JlcG9ydC1kcmlsbC1zdGVwLmludGVyZmFjZSc7XG5pbXBvcnQgeyBSZXBvcnRWaWV3ZXJGZWF0dXJlIH0gZnJvbSAnLi9yZXBvcnQtdmlld2VyLWZlYXR1cmUudHlwZSc7XG5cbi8vIEEgQkNQIDQ3IGxhbmd1YWdlIHRhZyBuYW1pbmcgaG93IG51bWJlcnMgYW5kIGRhdGVzIGFyZSB3cml0dGVuLCBlLmcuICdmci1DQScuXG4vLyBUaGUgc2V0IGlzIG9wZW4gKHRoZSBzZXJ2ZXIncyBwcm92aWRlciBkZWNpZGVzIHdoaWNoIGl0IG9mZmVycyksIHNvIHRoaXMgaXMgYVxuLy8gbmFtZWQgYWxpYXMgcmF0aGVyIHRoYW4gYSB1bmlvbi5cbmV4cG9ydCB0eXBlIFJlcG9ydExvY2FsZVRhZyA9IHN0cmluZztcblxuLy8gQW4gSVNPIDQyMTcgY3VycmVuY3kgY29kZSwgZS5nLiAnQ0FEJy4gT3BlbiBmb3IgdGhlIHNhbWUgcmVhc29uLlxuZXhwb3J0IHR5cGUgUmVwb3J0Q3VycmVuY3lDb2RlID0gc3RyaW5nO1xuXG5leHBvcnQgaW50ZXJmYWNlIFJlcG9ydCB7XG4gIGlkOiBudW1iZXI7XG4gIG5hbWU6IHN0cmluZztcbiAgLy8gVGhlIHJlcG9ydCdzIG93biBzdG9yZWQgSUFOQSB6b25lIChlLmcuIEFtZXJpY2EvTmV3X1lvcmspLiBudWxsID0gdGhlXG4gIC8vIHJlcG9ydCBmb2xsb3dzIHRoZSBhcHBsaWNhdGlvbidzIGRlZmF1bHQgcmVwb3J0aW5nIHpvbmUuXG4gIHRpbWV6b25lOiBzdHJpbmcgfCBudWxsO1xuICAvLyBUaGUgem9uZSBldmVyeSBkYXRlIGZpbHRlciwgdGltZSBidWNrZXQgYW5kIGRhdGUgY2VsbCBvZiB0aGlzIHJlcG9ydCB1c2VzLlxuICAvLyBSZXNvbHZlZCBzZXJ2ZXItc2lkZTsgdGhlIHNhbWUgZm9yIGV2ZXJ5IHZpZXdlciwgZXhwb3J0IGFuZCB0aGUgYXNzaXN0YW50LlxuICAvLyBPcHRpb25hbCBvbmx5IGJlY2F1c2Ugb2xkZXIgc2VydmVycyBvbWl0IGl0OyByZXNvbHZlUmVwb3J0VGltZXpvbmUoKSB0aGVuXG4gIC8vIGZhbGxzIGJhY2sgdG8gdGhlIHJlcG9ydCdzIG93biBgdGltZXpvbmVgLCB0aGVuIHRoZSBicm93c2VyJ3Mgem9uZS4gUmVzb2x2ZVxuICAvLyB0aGUgem9uZSBmb3IgcmVuZGVyaW5nIHRocm91Z2ggcmVzb2x2ZVJlcG9ydFRpbWV6b25lKCkgKGZvcm1hdC50cyk7IHJlYWQgdGhlXG4gIC8vIGZpZWxkIGRpcmVjdGx5IG9ubHkgdG8gY2hlY2sgd2hldGhlciB0aGUgc2VydmVyIHNlbnQgaXQuXG4gIGVmZmVjdGl2ZVRpbWV6b25lPzogc3RyaW5nO1xuICAvLyBUaGUgcmVwb3J0J3Mgb3duIHN0b3JlZCBsb2NhbGUuIG51bGwgPSB0aGUgcmVwb3J0IGZvbGxvd3MgdGhlIGRlZmF1bHQuXG4gIGxvY2FsZT86IFJlcG9ydExvY2FsZVRhZyB8IG51bGw7XG4gIC8vIFRoZSBsb2NhbGUgZXZlcnkgbnVtYmVyIGFuZCBkYXRlIG9mIHRoaXMgcmVwb3J0IGlzIHdyaXR0ZW4gaW4sIHJlc29sdmVkXG4gIC8vIHNlcnZlci1zaWRlICh0aGUgcmVwb3J0J3Mgb3duLCBlbHNlIHRoZSBhcHBsaWNhdGlvbidzIGRlZmF1bHQsIGVsc2VcbiAgLy8gZW4tVVMpLiBBYnNlbnQgb24gb2xkZXIgc2VydmVycywgd2hvc2UgcmVwb3J0cyB0aGVuIHJlYWQgZW4tVVMuIFJlc29sdmUgaXRcbiAgLy8gZm9yIHJlbmRlcmluZyB0aHJvdWdoIHJlc29sdmVGb3JtYXRDb250ZXh0KCkgKGZvcm1hdC50cyksIG5ldmVyIGRpcmVjdGx5LlxuICBlZmZlY3RpdmVMb2NhbGU/OiBSZXBvcnRMb2NhbGVUYWc7XG4gIC8vIFRoZSByZXBvcnQncyBvd24gc3RvcmVkIGN1cnJlbmN5LiBudWxsID0gdGhlIHJlcG9ydCBmb2xsb3dzIHRoZSBkZWZhdWx0LlxuICBjdXJyZW5jeT86IFJlcG9ydEN1cnJlbmN5Q29kZSB8IG51bGw7XG4gIC8vIFRoZSBjdXJyZW5jeSBtb25leSBhbW91bnRzIGFyZSBsYWJlbGVkIGluLCByZXNvbHZlZCBsaWtlIGVmZmVjdGl2ZUxvY2FsZVxuICAvLyAoZmFsbGluZyBiYWNrIHRvIHRoZSBsb2NhbGUncyBvd24gY3VycmVuY3ksIHRoZW4gVVNEKS4gQSBsYWJlbCBvbmx5OlxuICAvLyBhbW91bnRzIGFyZSBuZXZlciBjb252ZXJ0ZWQuXG4gIGVmZmVjdGl2ZUN1cnJlbmN5PzogUmVwb3J0Q3VycmVuY3lDb2RlO1xuICAvLyBIb3cgdGhlIHNlcnZlciBzZW5kcyBhIHBlcmNlbnQgbWVhc3VyZTogJ3JhdGlvJyA9IGEgMC0xIHJhdGlvICgwLjM4NSByZWFkc1xuICAvLyAzOC41JSkuIEFic2VudCBvbiBvbGRlciBzZXJ2ZXJzLCB3aG9zZSBwZXJjZW50IHZhbHVlcyBhcmUgYWxyZWFkeSB4MTAwXG4gIC8vICgzOC41IHJlYWRzIDM4LjUlKS5cbiAgcGVyY2VudEZvcm1hdD86ICdyYXRpbyc7XG4gIC8vIFJlcG9ydC1sZXZlbCBjb25maWc6IHR5cG9ncmFwaGljIHN0eWxlcywgZXRjLiAoY2FtZWxDYXNlIEpTT04gY29sdW1uKS5cbiAgY29uZmlnOiBSZXBvcnRDb25maWc7XG4gIC8vIFRoZSBwYWdlIGluIElOQ0hFUyAodGhlIHJlcG9ydCdzIG5hdGl2ZSB1bml0IOKAlCBQREZzIGFuZCBQb3dlclBvaW50IGFyZVxuICAvLyBpbmNoLWJhc2VkLCBzbyBleHBvcnRzIGFyZSBkaW1lbnNpb25hbGx5IGV4YWN0KS4gT3JpZW50YXRpb24gaXMgbm90IGEgZmllbGRcbiAgLy8gb2YgaXRzIG93bjogYSBwYWdlIHdpZGVyIHRoYW4gaXQgaXMgdGFsbCBJUyBsYW5kc2NhcGUuXG4gIHBhZ2VXaWR0aDogbnVtYmVyO1xuICBwYWdlSGVpZ2h0OiBudW1iZXI7XG4gIHBhZ2VzOiBSZXBvcnRQYWdlW107XG4gIC8vIFRoZSBoZWFkZXIgYW5kIGZvb3RlcjogdGhlIHJlcG9ydCdzIG1hc3RlciBwYWdlLCB3aG9zZSBjb21wb25lbnRzIGRyYXdcbiAgLy8gdW5kZXIgZXZlcnkgcGFnZSB0aGF0IGRvZXMgbm90IGhpZGUgdGhlbSAoUG93ZXJQb2ludCdzIHNsaWRlIG1hc3RlcikuIE51bGxcbiAgLy8gdW50aWwgYW55dGhpbmcgaGFzIGJlZW4gcGxhY2VkIGluIHRoZW0uXG4gIG1hc3RlcjogUmVwb3J0TWFzdGVyIHwgbnVsbDtcbiAgZmlsdGVyR3JvdXBzOiBSZXBvcnRGaWx0ZXJHcm91cFtdO1xuICAvLyBUaGUgdmlld2VyIGZlYXR1cmVzIHRoaXMgc2VydmVyIHNlcnZlcyBmb3IgdGhlIHJlcG9ydC4gVGhlIHZpZXdlciBvZmZlcnNcbiAgLy8gYSBjb250cm9sIG9ubHkgd2hlbiBpdHMgZmVhdHVyZSBpcyBsaXN0ZWQuIEFic2VudCBvbiBvbGRlciBzZXJ2ZXJzLCB3aGljaFxuICAvLyBzZXJ2ZSBub25lLlxuICB2aWV3ZXJGZWF0dXJlcz86IFJlcG9ydFZpZXdlckZlYXR1cmVbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZXBvcnRNYXN0ZXIge1xuICBpZDogbnVtYmVyO1xuICBjb21wb25lbnRzOiBSZXBvcnRDb21wb25lbnRbXTtcbiAgLy8gVGhlIHZhbHVlcyB0aGUgaGVhZGVyIGFuZCBmb290ZXIgdGV4dCBzaG93cywgYXMgUmVwb3J0UGFnZS52YWx1ZXMuXG4gIHZhbHVlcz86IFJlcG9ydENvbXBvbmVudFtdO1xufVxuXG4vLyBIb3cgdGhlIG9wZW4gcmVwb3J0IHdyaXRlcyBpdHMgbnVtYmVycyBhbmQgZGF0ZXMsIHJlc29sdmVkIG9uY2UgcGVyIHJlcG9ydFxuLy8gKHJlc29sdmVGb3JtYXRDb250ZXh0KSBhbmQgcmVhZCBieSB0aGUgdmlld2VyLCB0aGUgUERGIGFuZCBQb3dlclBvaW50IGFsaWtlLlxuLy8gTmV2ZXIgdGhlIGJyb3dzZXIncyBsb2NhbGUuXG5leHBvcnQgaW50ZXJmYWNlIFJlcG9ydEZvcm1hdENvbnRleHQge1xuICBsb2NhbGU6IFJlcG9ydExvY2FsZVRhZztcbiAgY3VycmVuY3k6IFJlcG9ydEN1cnJlbmN5Q29kZTtcbiAgLy8gV2hldGhlciBhIHBlcmNlbnQgbWVhc3VyZSBhcnJpdmVzIGFzIGEgMC0xIHJhdGlvICh0aGUgcmVwb3J0J3NcbiAgLy8gcGVyY2VudEZvcm1hdCkuIEFuIG9sZGVyIHNlcnZlciBzZW5kcyBpdCBhbHJlYWR5IHgxMDAuXG4gIHJhdGlvUGVyY2VudDogYm9vbGVhbjtcbn1cblxuLy8gT25lIGxvY2FsZSB0aGUgc2VydmVyIG9mZmVycywgd2l0aCB0aGUgY3VycmVuY3kgYSByZXBvcnQgaW4gaXQgdXNlcyB3aGVuIGl0XG4vLyBuYW1lcyBub25lIG9mIGl0cyBvd24uXG5leHBvcnQgaW50ZXJmYWNlIFJlcG9ydExvY2FsZU9wdGlvbiB7XG4gIGxvY2FsZTogUmVwb3J0TG9jYWxlVGFnO1xuICBkZWZhdWx0Q3VycmVuY3k6IFJlcG9ydEN1cnJlbmN5Q29kZTtcbn1cblxuLy8gR0VUIHJlcG9ydHMvbG9jYWxlczogd2hhdCB0aGUgcmVwb3J0IHNldHRpbmdzJyBMb2NhbGUgYW5kIEN1cnJlbmN5IHNlbGVjdHNcbi8vIG9mZmVyLlxuZXhwb3J0IGludGVyZmFjZSBSZXBvcnRMb2NhbGVzIHtcbiAgZGVmYXVsdExvY2FsZTogUmVwb3J0TG9jYWxlVGFnO1xuICBvcHRpb25zOiBSZXBvcnRMb2NhbGVPcHRpb25bXTtcbiAgY3VycmVuY2llczogUmVwb3J0Q3VycmVuY3lDb2RlW107XG59XG5cbi8vIFRoZSBkZXB0aCBvZiB0aGUgaGVhZGVyIGJhbmQgKHRvcCBvZiBldmVyeSBwYWdlKSBhbmQgdGhlIGZvb3RlciBiYW5kIChib3R0b21cbi8vIG9mIGV2ZXJ5IHBhZ2UpLCBpbiBJTkNIRVMuIFRoZSBiYW5kcyBob2xkIG5vIGNvbnRlbnQgb2YgdGhlaXIgb3duIOKAlCB0aGVcbi8vIG1hc3RlcidzIGNvbXBvbmVudHMgc2l0IGluIHRoZW0g4oCUIHRoZXkgYXJlIHRoZSByZXNlcnZlZCBtYXJnaW5zIHRoZSBlZGl0b3Jcbi8vIGRyYXdzIGFzIGd1aWRlcyBhbmQgc25hcHMgdG8uIEFsd2F5cyBhcnJpdmVzIHJlc29sdmVkICgwID0gbm8gYmFuZCkuXG5leHBvcnQgaW50ZXJmYWNlIFJlcG9ydEhlYWRlckZvb3RlciB7XG4gIGhlYWRlckhlaWdodDogbnVtYmVyO1xuICBmb290ZXJIZWlnaHQ6IG51bWJlcjtcbn1cblxuLy8gUmVwb3J0LWxldmVsIHN0eWxpbmcuIFNpemVzIGFyZSBpbiBQT0lOVFMgKDEvNzJcIikg4oCUIHRoZSByZXBvcnQncyB0eXBvZ3JhcGh5XG4vLyBtYXBzIDE6MSB0byBQREYgKDcycHQvaW4pIGFuZCBQb3dlclBvaW50IChwb2ludCBmb250IHNpemVzKSwgc28gYSBwb2ludFxuLy8gdmFsdWUgaXMgZGltZW5zaW9uYWxseSBleGFjdCBvbiBzY3JlZW4gYW5kIGluIGV2ZXJ5IGV4cG9ydC5cbmV4cG9ydCBpbnRlcmZhY2UgUmVwb3J0Q29uZmlnIHtcbiAgc3R5bGVzPzogUmVwb3J0U3R5bGVzO1xuICAvLyBUaGUgcmVwb3J0J3MgZ3JvdXAtYnkgY29udHJvbC4gT3B0aW9uYWwgb24gdGhlIHR5cGUgYmVjYXVzZSBhIFJlcG9ydENvbmZpZ1xuICAvLyBsaXRlcmFsIG5lZWQgbm90IGNhcnJ5IGl0OyB0aGUgQVBJIGFsd2F5cyBzZW5kcyBpdCwgcmVzb2x2ZWQuXG4gIGdyb3VwQnk/OiBSZXBvcnRHcm91cEJ5O1xuICAvLyBSZXNvbHZlZCBieSB0aGUgQVBJIGxpa2UgZ3JvdXBCeS5cbiAgaGVhZGVyRm9vdGVyPzogUmVwb3J0SGVhZGVyRm9vdGVyO1xufVxuXG4vLyBUaGUgcmVwb3J0J3MgZ3JvdXAtYnkgY29udHJvbCDigJQgdGhlIG9uZSBzd2l0Y2ggdGhhdCByZS1idWNrZXRzIGV2ZXJ5XG4vLyB0aW1lLXNlcmllcyBjaGFydCBvbiB0aGUgcmVwb3J0IGJldHdlZW4gZGF5LCB3ZWVrLCBtb250aCwgcXVhcnRlciBhbmQgeWVhci5cbi8vXG4vLyBJdCBpcyBOT1QgYSBmaWx0ZXI6IGEgZmlsdGVyIG5hcnJvd3Mgd2hpY2ggcm93cyBhcmUgY291bnRlZCwgdGhpcyBjaGFuZ2VzIGhvd1xuLy8gdGhlIHN1cnZpdmluZyByb3dzIGFyZSBidWNrZXRlZC4gSXQgc2hhcmVzIHRoZSByZXBvcnQncyBmaWx0ZXIgYmFyIGJlY2F1c2Vcbi8vIHRoYXQgaXMgdGhlIG9uZSByb3cgb2YgY29udHJvbHMgYSB2aWV3ZXIgcmVhZHMgYSByZXBvcnQgdGhyb3VnaCDigJQgdGhlXG4vLyBzZXBhcmF0aW9uIHRoYXQgbWF0dGVycyBpcyBpbiB0aGUgbW9kZWwsIG5vdCBpbiB3aGVyZSB0aGUgY29udHJvbCBpcyBwYWludGVkLlxuLy9cbi8vIEFsd2F5cyBhcnJpdmVzIFJFU09MVkVEICh0aGUgYmFja2VuZCBmaWxscyBhbiBhYnNlbnQgb3IgcGFydGlhbCBzdG9yZWQgYmxvY2tcbi8vIGluIGZyb20gaXRzIG93biBkZWZhdWx0cyksIHNvIHRoZXJlIGlzIG5vdGhpbmcgdG8gZGVmYXVsdCBoZXJlIOKAlCByZW5kZXIgd2hhdFxuLy8geW91IGFyZSBnaXZlbi5cbmV4cG9ydCBpbnRlcmZhY2UgUmVwb3J0R3JvdXBCeSB7XG4gIGVuYWJsZWQ6IGJvb2xlYW47XG4gIGxhYmVsOiBzdHJpbmc7XG4gIGdyYW51bGFyaXRpZXM6IENoYXJ0R3JhbnVsYXJpdHlbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZXBvcnRTdHlsZXMge1xuICBoZWFkaW5nPzogeyBzaXplPzogbnVtYmVyIH07XG59XG5cbi8vIENvbnRlbnQgcGFkZGluZyBhcm91bmQgYSBjb21wb25lbnQncyBib2R5LCBpbiBJTkNIRVMgKHRoZSBnZW9tZXRyeSB1bml0KS5cbmV4cG9ydCBpbnRlcmZhY2UgQ29tcG9uZW50UGFkZGluZyB7XG4gIHRvcD86IG51bWJlcjtcbiAgcmlnaHQ/OiBudW1iZXI7XG4gIGJvdHRvbT86IG51bWJlcjtcbiAgbGVmdD86IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZXBvcnRQYWdlIHtcbiAgaWQ6IG51bWJlcjtcbiAgbmFtZTogc3RyaW5nIHwgbnVsbDtcbiAgb3JkZXI6IG51bWJlcjtcbiAgLy8gVGhlIHBhZ2Ugb3B0cyBvdXQgb2YgdGhlIHJlcG9ydCdzIGhlYWRlciBhbmQgZm9vdGVyIChhIHRpdGxlIHBhZ2UpLlxuICBtYXN0ZXJIaWRkZW46IGJvb2xlYW47XG4gIGNvbXBvbmVudHM6IFJlcG9ydENvbXBvbmVudFtdO1xuICAvLyBFdmVyeSBhY3RpdmUgdmFsdWUgb2YgdGhlIHBhZ2UsIGluIGlkIG9yZGVyOiB0aG9zZSBpdHMgdGV4dCBzaG93cyBhbmRcbiAgLy8gdGhvc2Ugbm8gdGV4dCBzaG93cyBhbnkgbW9yZSAoa2VwdCB1bnRpbCBhIHRleHQsIHZhbHVlIG9yIHBhZ2UgZGVsZXRlLCBzb1xuICAvLyBhIGNoaXAgcGFzdGVkIGJhY2sgc3RpbGwgbmFtZXMgb25lKS4gTmV2ZXIgZHJhd24sIGFuZCBuZXZlciBpblxuICAvLyBgY29tcG9uZW50c2AuIE9wdGlvbmFsIGJlY2F1c2Ugb2xkZXIgc2VydmVycyBvbWl0IGl0LlxuICB2YWx1ZXM/OiBSZXBvcnRDb21wb25lbnRbXTtcbn1cblxuLy8gJ3RleHQnIGlzIGF1dGhvcmVkIHJpY2ggdGV4dCB3aXRoIG5vIHF1ZXJ5IGJlaGluZCBpdCDigJQgaXQgbmV2ZXIgZmV0Y2hlcyBkYXRhLlxuLy8gJ3ZhbHVlJyBpcyBvbmUgbnVtYmVyIHNob3duIGluc2lkZSBhIHRleHQgYmxvY2sncyB3b3JkcyAoe3t2YWx1ZS5rZXl9fSk7IGl0XG4vLyBoYXMgYSBxdWVyeSBidXQgbm8gcGxhY2Ugb2YgaXRzIG93biBvbiB0aGUgcGFnZS5cbmV4cG9ydCB0eXBlIFJlcG9ydENvbXBvbmVudFR5cGUgPSAnY2hhcnQnIHwgJ2xpc3QnIHwgJ2twaScgfCAndGV4dCcgfCAndmFsdWUnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFJlcG9ydENvbXBvbmVudCB7XG4gIGlkOiBudW1iZXI7XG4gIHR5cGU6IFJlcG9ydENvbXBvbmVudFR5cGU7XG4gIHRpdGxlOiBzdHJpbmcgfCBudWxsO1xuICAvLyBHZW9tZXRyeSBpbiBJTkNIRVM6IGFic29sdXRlIHBvc2l0aW9uIG9uIHRoZSBwYWdlIGNhbnZhcy5cbiAgeDogbnVtYmVyO1xuICB5OiBudW1iZXI7XG4gIHc6IG51bWJlcjtcbiAgaDogbnVtYmVyO1xuICAvLyBIZWlnaHQgbW9kZSwgREVSSVZFRCBmcm9tIHR5cGUgc2VydmVyLXNpZGUgKG5vdCBzdG9yZWQsIHJlYWQtb25seSk6IGxpc3RzXG4gIC8vIGFuZCBLUEkgdGlsZXMgYXJlIGF1dG8gKHRoZSBib3ggc2l6ZXMgdG8gaXRzIGNvbnRlbnQsIGBoYCBpZ25vcmVkKTsgY2hhcnRzXG4gIC8vIGFyZSBhbHdheXMgZml4ZWQgKHVzZSBgaGApIHNvIHRoZXkgZml0IHRoZSBib3ggYW5kIG5ldmVyIG92ZXJmbG93LlxuICBhdXRvSGVpZ2h0OiBib29sZWFuO1xuICAvLyBUaGUgc3RvcmVkIFNRTCBvZiBhIGxlZ2FjeSBzcWwtbW9kZSBjb21wb25lbnQuIE5VTEwgZm9yIGEgZGVyaXZlZCBvbmUsXG4gIC8vIHdob3NlIHN0YXRlbWVudCBkb2VzIG5vdCBleGlzdCB1bnRpbCBpdHMgZG9jdW1lbnQgaXMgY29tcGlsZWQg4oCUIHRoZSBTUUwgdGFiXG4gIC8vIGZldGNoZXMgdGhhdCBzZXBhcmF0ZWx5IChzZWUgUmVwb3J0Q29tcG9uZW50U3FsKS5cbiAgc3FsOiBzdHJpbmcgfCBudWxsO1xuICBjb25maWc6IENoYXJ0Q29uZmlnICYgTGlzdENvbmZpZyAmIEtwaUNvbmZpZyAmIFRleHRDb25maWcgJiBWYWx1ZUNvbmZpZyAmIENvbXBvbmVudExheW91dENvbmZpZ1xuICAgICYgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIGZpbHRlcnM6IFJlcG9ydEZpbHRlcltdO1xufVxuXG4vLyBXaGF0IHRoZSBTUUwgdGFiIGZldGNoZXM6IHRoZSBzdGF0ZW1lbnQgYSBjb21wb25lbnQgcnVucy5cbi8vXG4vLyBGb3IgYSBkZXJpdmVkIGNvbXBvbmVudCBgYmFzZWxpbmVgIGlzIHRydWUgYW5kIGBzcWxgIGlzIHdoYXQgaXRzIGRvY3VtZW50XG4vLyBjb21waWxlcyB0byB3aXRoIE5PIHZpZXdlciBzdGF0ZSDigJQgbm8gZmlsdGVycywgdGhlIGF1dGhvcmVkIGdyYWluLiBUaGVcbi8vIG51bWJlcnMgb24gc2NyZWVuIGNvbWUgZnJvbSB0aGF0IHN0YXRlbWVudCBwbHVzIHdoYXRldmVyIHRoZSB2aWV3ZXIgcGlja2VkLFxuLy8gc28gdGhlIHR3byBjYW4gbGVnaXRpbWF0ZWx5IGRpZmZlciBhbmQgdGhlIHRhYiBzYXlzIHNvIHJhdGhlciB0aGFuIGltcGx5aW5nXG4vLyB0aGV5IG1hdGNoLlxuLy9cbi8vIGB0aW1lem9uZWAgaXMgdGhlIElBTkEgem9uZSB0aGUgc3RhdGVtZW50IHdhcyBjb21waWxlZCBpbjogdGhlIHJlcG9ydCdzXG4vLyBlZmZlY3RpdmUgem9uZS4gT3B0aW9uYWwgYmVjYXVzZSBvbGRlciBzZXJ2ZXJzIG9taXQgaXQ7IHRoZXkgY29tcGlsZWQgaW4gVVRDLlxuLy9cbi8vIGBlcnJvcmAgaXMgbm90IGEgZmFpbHVyZSBvZiB0aGUgcmVxdWVzdDogYSBkb2N1bWVudCB0aGF0IG5vIGxvbmdlciBjb21waWxlc1xuLy8gaXMgcHJlY2lzZWx5IHdoYXQgc29tZW9uZSBvcGVucyB0aGlzIHRhYiB0byBkaXNjb3Zlciwgc28gaXQgYXJyaXZlcyBhcyBhXG4vLyBtZXNzYWdlIHRvIHJlbmRlciB3aXRoIGBlcnJvclR5cGVgIG5hbWluZyB3aGljaCBraW5kICgnc3RhbGUtcXVlcnknIG9yXG4vLyAnc2Vuc2l0aXZlLWNvbHVtbicpLCBhbmQgYHNxbGAgbnVsbC5cbmV4cG9ydCBpbnRlcmZhY2UgUmVwb3J0Q29tcG9uZW50U3FsIHtcbiAgc3FsOiBzdHJpbmcgfCBudWxsO1xuICBvcmlnaW46ICdzcWwnIHwgJ2RicScgfCAnZGVyaXZlZCc7XG4gIGJhc2VsaW5lOiBib29sZWFuO1xuICB0aW1lem9uZT86IHN0cmluZztcbiAgZXJyb3I6IHN0cmluZyB8IG51bGw7XG4gIGVycm9yVHlwZTogc3RyaW5nIHwgbnVsbDtcbn1cblxuLy8gQSB0ZXh0IGJsb2NrJ3MgY29udGVudDogYW4gaHRtbCBmcmFnbWVudCB0aGUgc2VydmVyIGhhcyBhbHJlYWR5IHJlYnVpbHQgZnJvbVxuLy8gYW4gYWxsb3dsaXN0LCB3aGljaCBtYXkgY2Fycnkge3twYWdlLm51bWJlcn19LCB7e3BhZ2UubmFtZX19IGFuZFxuLy8ge3tyZXBvcnQubmFtZX19IHRva2VucyAoc2VlIHRleHQudHMpLlxuZXhwb3J0IGludGVyZmFjZSBUZXh0Q29uZmlnIHtcbiAgaHRtbD86IHN0cmluZztcbn1cblxuLy8gQSB2YWx1ZSdzIGtleTogd2hhdCBpdHMgdG9rZW4gaW4gYSB0ZXh0IGJsb2NrJ3MgaHRtbCBuYW1lcywgdW5pcXVlIHdpdGhpblxuLy8gdGhlIHBhZ2UuIEl0cyBudW1iZXIgaXMgZm9ybWF0dGVkIGJ5IGNvbmZpZy5tZWFzdXJlIChLcGlDb25maWcpLCBhcyBvbiBhIEtQSS5cbi8vIEEgZm9ybXVsYSB2YWx1ZSBoYXMgbm8gcXVlcnk6IGBmb3JtdWxhYCBuYW1lcyB3aGF0IGl0IHdvcmtzIG91dCBvZiB0aGVcbi8vIHBhZ2UncyBxdWVyeSB2YWx1ZXMsIGFuZCBpdHMgbWVhc3VyZSBob2xkcyBvbmx5IHRoZSBmb3JtYXQga2V5cyBpdHMgYXV0aG9yXG4vLyBnYXZlIChmb3JtYXQsIHByZWNpc2lvbiwgdW5pdHMpLlxuZXhwb3J0IGludGVyZmFjZSBWYWx1ZUNvbmZpZyB7XG4gIGtleT86IHN0cmluZztcbiAgZm9ybXVsYT86IFZhbHVlRm9ybXVsYUNvbmZpZyB8IG51bGw7XG59XG5cbi8vIEEgZm9ybXVsYSB2YWx1ZSdzIG9wZXJhdGlvbiBhbmQgb3BlcmFuZHM6IGBvZmAgbmFtZXMgcXVlcnkgdmFsdWVzIG9uIHRoZVxuLy8gc2FtZSBwYWdlICh0aGUgbWFzdGVyIGZvciBhIGhlYWRlciBvciBmb290ZXIpIGJ5IGtleSwgMiBvZiB0aGVtLCBvciAyIHRvIDEwXG4vLyBmb3IgYSBzdW0uIGBzaWduZWRgIGFic2VudCByZWFkcyB0cnVlIGZvciBhIGNoYW5nZSBhbmQgYSBwZXJjZW50IGNoYW5nZSxcbi8vIGZhbHNlIGZvciBhIHJhdGlvIGFuZCBhIHN1bS5cbmV4cG9ydCBpbnRlcmZhY2UgVmFsdWVGb3JtdWxhQ29uZmlnIHtcbiAgb3A6IFJlcG9ydFZhbHVlRm9ybXVsYTtcbiAgb2Y6IHN0cmluZ1tdO1xuICBzaWduZWQ/OiBib29sZWFuIHwgbnVsbDtcbn1cblxuLy8gT25lIHJvdyBvZiBQT1NUIHBhZ2VzLzppZC92YWx1ZXM6IGEgdmFsdWUncyBudW1iZXIgZm9yIHRoZSBmaWx0ZXJzIHNlbnQuXG4vLyBUaGVyZSBpcyBvbmUgcm93IHBlciB2YWx1ZSB0aGUgbGF5ZXIgcmVhZHMsIGluIGlkIG9yZGVyOiBvbmUgc29tZSB0ZXh0IG9uXG4vLyB0aGF0IHBhZ2Ugc2hvd3MsIG9yIGFuIG9wZXJhbmQgb2YgYSBmb3JtdWxhIHNvbWUgdGV4dCBzaG93cy4gYHZhbHVlYCBpc1xuLy8gcmF3LCBhcyB0aGUgcXVlcnkgcmV0dXJuZWQgaXQgb3IgdGhlIHNlcnZlciB3b3JrZWQgaXQgb3V0IChudWxsIHdoZW4gdGhlcmVcbi8vIGlzIG5vIHJvdyBvciB0aGUgcmVzdWx0IGlzIG51bGwpOyBmb3JtYXR0aW5nIGlzIHRoZSB2aWV3ZXIncywgdGhyb3VnaCB0aGVcbi8vIHZhbHVlJ3MgbWVhc3VyZS4gYGVycm9yYCBpcyB0aGF0IHZhbHVlJ3Mgb3duIGZhaWx1cmUsIGFuZCB0aGUgcGFnZSdzIG90aGVyXG4vLyB2YWx1ZXMgYXJlIHJlYWQgcmVnYXJkbGVzcy5cbi8vIGByb2xlYCBpcyB0aGUgY29tcGFyaXNvbiByb2xlIHRoZSBudW1iZXIgcGxheXM6IGEgcXVlcnkgdmFsdWUncyBjb21wYXJpc29uXG4vLyBvdXRwdXQncywgY2hhbmdlIG9yIHBlcmNlbnRfY2hhbmdlIGZvciB0aG9zZSBmb3JtdWxhcywgZWxzZSBudWxsLlxuZXhwb3J0IGludGVyZmFjZSBSZXBvcnRQYWdlVmFsdWUge1xuICBpZDogbnVtYmVyO1xuICBrZXk6IHN0cmluZztcbiAgdmFsdWU6IG51bWJlciB8IHN0cmluZyB8IG51bGw7XG4gIGVycm9yOiBzdHJpbmcgfCBudWxsO1xuICByb2xlPzogT3V0cHV0Um9sZSB8IG51bGw7XG59XG5cbi8vIENyb3NzLXR5cGUgbGF5b3V0L3N0eWxlIGtleXMgY2FycmllZCBpbiBhIGNvbXBvbmVudCdzIGNvbmZpZyAoYWxvbmdzaWRlIHRoZVxuLy8gdHlwZS1zcGVjaWZpYyBjaGFydC9saXN0L2twaSBrZXlzKS5cbmV4cG9ydCBpbnRlcmZhY2UgQ29tcG9uZW50TGF5b3V0Q29uZmlnIHtcbiAgcGFkZGluZz86IENvbXBvbmVudFBhZGRpbmc7XG59XG5cbi8vIFRoZSBwcmVzZW50YXRpb24gc2V0dGluZ3MgYSBjb21wb25lbnQncyBzZXR0aW5ncyBkaWFsb2cgZWRpdHMuIFRpdGxlIGFuZFxuLy8gcGFkZGluZyBhcmUgbm90IHBhcnQgb2Ygd2hhdCB0aGUgY29tcG9uZW50IHF1ZXJpZXMsIHNvIGEgY2hhbmdlIHRvIHRoZW1cbi8vIHJlcGFpbnRzIHdpdGhvdXQgcmUtcnVubmluZyBhbnl0aGluZy4gQSBkZXJpdmVkIEtQSSdzIGNhcmQga2V5cyBhcmUgc2VudFxuLy8gdG9vOiB0aGUgc2VydmVyIGNvbXB1dGVzIHRoZSB0YXJnZXQncyBwcm9ncmVzcyBhbmQgdGhlIHNwYXJrbGluZSdzIHBvaW50c1xuLy8gd2l0aCB0aGUgZGF0YSwgc28gYSBjaGFuZ2UgdG8gdGhlbSByZWxvYWRzIGl0LlxuZXhwb3J0IGludGVyZmFjZSBDb21wb25lbnRTZXR0aW5ncyB7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIHBhZGRpbmc6IENvbXBvbmVudFBhZGRpbmc7XG4gIGtwaT86IEtwaUNhcmRTZXR0aW5ncztcbn1cblxuLy8gQSBLUEkncyBjYXJkIGtleXMuIFRoZSBkaWFsb2cgc2VuZHMgdGhlbSAobnVsbCByZW1vdmVzIGEga2V5LCBpbmNyZWFzZUlzXG4vLyBudWxsIHJlYWRzIGdvb2QpLCBhbmQgQ29tcG9uZW50U2V0dGluZ3Mua3BpIGNhcnJpZXMgdGhlbSBhcyB0aGUgc2VydmVyXG4vLyBzYXZlZCB0aGVtLCByZWFkIGJhY2sgZnJvbSB0aGUgY29uZmlnIGl0IHJldHVybnMuXG5leHBvcnQgaW50ZXJmYWNlIEtwaUNhcmRTZXR0aW5ncyB7XG4gIGluY3JlYXNlSXM6IFJlcG9ydENoYW5nZVBvbGFyaXR5IHwgbnVsbDtcbiAgdGFyZ2V0OiBLcGlUYXJnZXRDb25maWcgfCBudWxsO1xuICBzcGFya2xpbmU6IEtwaVNwYXJrbGluZUNvbmZpZyB8IG51bGw7XG59XG5cbi8vIFdoZXJlIGEgY2hhcnQncyBsZWdlbmQgc2l0cyByZWxhdGl2ZSB0byB0aGUgcGxvdCwgb3IgJ2hpZGRlbicgdG8gZHJvcCBpdC5cbmV4cG9ydCB0eXBlIExlZ2VuZFBvc2l0aW9uID0gJ3RvcCcgfCAnYm90dG9tJyB8ICdsZWZ0JyB8ICdyaWdodCcgfCAnaGlkZGVuJztcblxuZXhwb3J0IHR5cGUgQ2hhcnRHcmFudWxhcml0eSA9ICdkYXknIHwgJ3dlZWsnIHwgJ21vbnRoJyB8ICdxdWFydGVyJyB8ICd5ZWFyJztcblxuLy8gSG93IGVhY2ggZ3JhbnVsYXJpdHkgcmVhZHMgaW4gdGhlIGdyb3VwLWJ5IGNvbnRyb2wgYW5kIG9uIGFuIGV4cG9ydCBjb3ZlclxuLy8gc2hlZXQuIFdISUNIIG9mIHRoZW0gYSBnaXZlbiByZXBvcnQgb2ZmZXJzIGNvbWVzIGZyb20gaXRzIFJlcG9ydEdyb3VwQnk7XG4vLyB0aGlzIGlzIG9ubHkgdGhlIG5hbWluZy4gJ3llYXInIHJlYWRzIGFzIFwiQW5udWFsbHlcIi5cbmV4cG9ydCBjb25zdCBHUkFOVUxBUklUWV9PUFRJT05TOiB7IHZhbHVlOiBDaGFydEdyYW51bGFyaXR5OyBuYW1lOiBzdHJpbmcgfVtdID0gW1xuICB7IHZhbHVlOiAnZGF5JywgbmFtZTogJ0RheScgfSxcbiAgeyB2YWx1ZTogJ3dlZWsnLCBuYW1lOiAnV2VlaycgfSxcbiAgeyB2YWx1ZTogJ21vbnRoJywgbmFtZTogJ01vbnRoJyB9LFxuICB7IHZhbHVlOiAncXVhcnRlcicsIG5hbWU6ICdRdWFydGVyJyB9LFxuICB7IHZhbHVlOiAneWVhcicsIG5hbWU6ICdBbm51YWxseScgfSxcbl07XG5cbi8vIFRoZSBjaGFydCB0eXBlcyB0aGF0IHBsb3Qgc2VyaWVzIGFnYWluc3QgYSBjYXRlZ29yeSBhbmQgYSB2YWx1ZSBheGlzLCBhbmQgc29cbi8vIHRoZSB0eXBlcyBhIG1lYXN1cmUncyBvd24gc2VyaWVzIGNhbiBiZSBkcmF3biBhcy4gQSB3YXRlcmZhbGwgaGFzIHRoZSBzYW1lXG4vLyBheGVzIGJ1dCBpcyBub3Qgb25lIG9mIHRoZW06IGl0IGRyYXdzIGl0cyBvbmUgbWVhc3VyZSBhcyBmbG9hdGluZyBzdGVwcy5cbmV4cG9ydCB0eXBlIEF4aXNDaGFydFR5cGUgPSAnYmFyJyB8ICdsaW5lJyB8ICdhcmVhJztcblxuLy8gV2hhdCBvbmUgYmFyIG9mIGEgd2F0ZXJmYWxsIGRvZXMgdG8gdGhlIHJ1bm5pbmcgdG90YWwg4oCUIGVhY2ggaXMgZHJhd24gaW4gaXRzXG4vLyBvd24gY29sb3IuIFRoZSBjbG9zaW5nIHRvdGFsIGlzIHRoZSBsYXN0IGJhciwgc3RhbmRpbmcgb24gemVyby5cbmV4cG9ydCB0eXBlIFdhdGVyZmFsbFN0ZXBLaW5kID0gJ3Jpc2UnIHwgJ2ZhbGwnIHwgJ3RvdGFsJztcblxuZXhwb3J0IGludGVyZmFjZSBDaGFydENvbmZpZyB7XG4gIC8vIEEgd2F0ZXJmYWxsIHRha2VzIE9ORSBtZWFzdXJlIHdob3NlIHZhbHVlIHBlciBjYXRlZ29yeSBpcyBob3cgZmFyIHRoZVxuICAvLyBydW5uaW5nIHRvdGFsIG1vdmVzIHRoZXJlOiBlYWNoIGJhciBzdGFydHMgd2hlcmUgdGhlIG9uZSBiZWZvcmUgaXQgZW5kZWQsXG4gIC8vIGFuZCBhIGNsb3NpbmcgVG90YWwgYmFyIHNob3dzIHRoZSBzdW0uXG4gIGNoYXJ0VHlwZT86IEF4aXNDaGFydFR5cGUgfCAnd2F0ZXJmYWxsJyB8ICdwaWUnIHwgJ2RvbnV0JztcbiAgLy8gRm9yIGtpbmQgJ3RpbWUnLCB0aGUgc2VydmVyIGJ1Y2tldHMgdGhlIHJhdyBkYXRldGltZSBjb2x1bW4gdG8gYGdyYW51bGFyaXR5YFxuICAvLyBpbiB0aGUgcmVwb3J0J3MgdGltZXpvbmUgKHRoZSBTUUwgZXhwb3NlcyB0aGUgcmF3IGNvbHVtbiwgdW5idWNrZXRlZCkuXG4gIC8vIGRhdGVMYWJlbCB3cml0ZXMgYSB0aW1lIGF4aXMncyBwZXJpb2QgbGFiZWxzIHNob3J0ICgnTWF5JywgdGhlIGRlZmF1bHQpLFxuICAvLyBsb25nICgnTWF5IDIwMjYnKSBvciBudW1lcmljICgnMjAyNi0wNScpOyBhIGNhdGVnb3J5IGF4aXMgaWdub3JlcyBpdC5cbiAgeEF4aXM/OiB7XG4gICAgY29sdW1uOiBzdHJpbmc7XG4gICAga2luZD86ICdjYXRlZ29yeScgfCAndGltZSc7XG4gICAgZ3JhbnVsYXJpdHk/OiBDaGFydEdyYW51bGFyaXR5O1xuICAgIGxhYmVsPzogc3RyaW5nO1xuICAgIGRhdGVMYWJlbD86IFJlcG9ydENoYXJ0RGF0ZUxhYmVsO1xuICB9O1xuICBtZWFzdXJlcz86IENoYXJ0TWVhc3VyZVtdO1xuICAvLyBFYWNoIHZhbHVlIG9mIHRoaXMgY29sdW1uIGJlY29tZXMgaXRzIG93biBzZXJpZXMuIEl0IGNhcnJpZXMgbm8gbGFiZWw6IHRoZVxuICAvLyBsZWdlbmQgbmFtZXMgdGhlIHZhbHVlcyB0aGVtc2VsdmVzLlxuICBzcGxpdEJ5PzogeyBjb2x1bW46IHN0cmluZyB9O1xuICAvLyBTaW5nbGUtZGltZW5zaW9uIGJhciBjaGFydHMgb25seTogY29sb3IgZWFjaCBiYXIgYnkgaXRzIG93biBjYXRlZ29yeSBhbmRcbiAgLy8gc2hvdyBhIGxlZ2VuZCwgV0lUSE9VVCBzcGxpdHRpbmcgaW50byBtdWx0aXBsZSBzZXJpZXMgKHdoaWNoIHNsaXZlcnMgdGhlXG4gIC8vIGJhcnMpLiB2MSBleHBlY3RzIGNvbG9yQnkuY29sdW1uID09PSB4QXhpcy5jb2x1bW4uIElnbm9yZWQgd2hlbiBzcGxpdEJ5IGlzXG4gIC8vIHNldCBvciB0aGUgY2hhcnQgaXNuJ3QgYSBiYXIgY2hhcnQuXG4gIGNvbG9yQnk/OiB7IGNvbHVtbjogc3RyaW5nOyBsYWJlbD86IHN0cmluZyB9O1xuICBvcmllbnRhdGlvbj86ICd2ZXJ0aWNhbCcgfCAnaG9yaXpvbnRhbCc7XG4gIHN0YWNrZWQ/OiBib29sZWFuO1xuICAvLyBTdGFja3MgdGhlIHByaW1hcnkgYXhpcydzIGJhciBhbmQgYXJlYSBzZXJpZXMgYXMgc2hhcmVzIG9mIGVhY2hcbiAgLy8gY2F0ZWdvcnkncyB0b3RhbCwgc28gZXZlcnkgc3RhY2sgcmVhY2hlcyAxMDAlLiBUaGUgdmlld2VyIGNvbXB1dGVzIHRoZVxuICAvLyBzaGFyZXMgZnJvbSB0aGUgcm93cyBpdCByZWNlaXZlcywgYWZ0ZXIgdGhlIGZpbHRlcnMgcmFuOyB0aGUgcm93cyBhbmQgdGhlXG4gIC8vIENTViBrZWVwIHRoZSByYXcgdmFsdWVzLiBUaGUgdmFsdWUgYXhpcyB0aGVuIGFsd2F5cyBydW5zIDAgdG8gMTAwJSAoZnJvbVxuICAvLyAtMTAwJSB3aGVuIGEgc2hhcmUgaXMgbmVnYXRpdmUpLlxuICBwZXJjZW50U3RhY2tlZD86IGJvb2xlYW47XG4gIC8vIFZhbHVlcyBwcmludGVkIGJlc2lkZSB0aGUgcG9pbnRzIG9mIGEgYmFyLCBsaW5lIG9yIGFyZWEgc2VyaWVzOiBldmVyeVxuICAvLyBwb2ludCAoYWxsKSwgZWFjaCBzZXJpZXMnIGxhdGVzdCBwb2ludCAobGFzdCksIG9yIGV2ZXJ5IHBvaW50IHdob3NlIGxhYmVsXG4gIC8vIGZpdHMgd2l0aG91dCBvdmVybGFwcGluZyBhbm90aGVyIChhdXRvKS4gT21pdHRlZCBvciBub25lLCBubyBsYWJlbHMuIEFcbiAgLy8gcGllLCBhIGRvbnV0IGFuZCBhIHdhdGVyZmFsbCBuZXZlciBwcmludCB0aGVtLlxuICBkYXRhTGFiZWxzPzogUmVwb3J0Q2hhcnREYXRhTGFiZWxzO1xuICAvLyBUaGUgcHJpbWFyeSB2YWx1ZSBheGlzJ3MgdGl0bGUgYW5kIHJhbmdlLiBFdmVyeSBzZXJpZXMgaXMgcGxvdHRlZCBhZ2FpbnN0XG4gIC8vIGl0IHVubGVzcyBpdHMgbWVhc3VyZSBpcyBzZWNvbmRhcnkuXG4gIHZhbHVlQXhpcz86IENoYXJ0VmFsdWVBeGlzO1xuICAvLyBUaGUgc2Vjb25kIHZhbHVlIGF4aXMsIG9uIHRoZSByaWdodCwgdGhhdCBzZWNvbmRhcnkgbWVhc3VyZXMgcGxvdCBhZ2FpbnN0LlxuICBzZWNvbmRhcnlBeGlzPzogQ2hhcnRWYWx1ZUF4aXM7XG4gIC8vIExhYmVsZWQgbGluZXMgYWNyb3NzIHRoZSBwbG90IGF0IGEgY29uc3RhbnQgdmFsdWUsIG9yIGJhbmRzIGJldHdlZW4gdHdvXG4gIC8vIHZhbHVlcywgYXQgbW9zdCA1LiBWZXJ0aWNhbCBheGlzIGNoYXJ0cyBhbmQgd2F0ZXJmYWxscyBvbmx5LlxuICByZWZlcmVuY2VzPzogQ2hhcnRSZWZlcmVuY2VbXTtcbiAgbGVnZW5kPzogTGVnZW5kUG9zaXRpb247XG4gIHNvcnQ/OiBSZXBvcnRTb3J0O1xuICBsaW1pdD86IG51bWJlcjtcbn1cblxuLy8gQSB2YWx1ZSBheGlzJ3MgdGl0bGUgYW5kIHJhbmdlLiBFYWNoIGJvdW5kIGxlZnQgb3V0IGlzIHBpY2tlZCBmcm9tIHRoZSBkYXRhLFxuLy8gYW5kIHRoZSB0aWNrIHN0ZXAgd2l0aG91dCBhbiBpbnRlcnZhbC4gSXRzIHRpY2tzIHRha2UgdGhlIG51bWJlciBmb3JtYXQgb2Zcbi8vIHRoZSBtZWFzdXJlcyBwbG90dGVkIGFnYWluc3QgaXQuXG5leHBvcnQgaW50ZXJmYWNlIENoYXJ0VmFsdWVBeGlzIHtcbiAgbGFiZWw/OiBzdHJpbmc7XG4gIG1pbj86IG51bWJlcjtcbiAgbWF4PzogbnVtYmVyO1xuICBpbnRlcnZhbD86IG51bWJlcjtcbn1cblxuLy8gQSByZWZlcmVuY2UgZHJhd24gYWNyb3NzIGEgY2hhcnQncyBwbG90OiBhIGxpbmUgYXQgYHZhbHVlYCwgb3Igd2l0aCBgdG9gIGFcbi8vIGJhbmQgYmV0d2VlbiB0aGUgdHdvLCBsYWJlbGVkIHdpdGggYGxhYmVsYC4gVGhlIHZhbHVlIGlzIG9uZSB0aGUgdXNlciBvclxuLy8gdGhlIG1vZGVsIHN0YXRlcywgbmV2ZXIgb25lIHJlYWQgb2ZmIHRoZSBkYXRhLiBzZWNvbmRhcnkgcGxvdHMgaXQgYWdhaW5zdFxuLy8gdGhlIHNlY29uZCB2YWx1ZSBheGlzLCB3aGVuIHRoZSBjaGFydCBoYXMgb25lLlxuZXhwb3J0IGludGVyZmFjZSBDaGFydFJlZmVyZW5jZSB7XG4gIHZhbHVlOiBudW1iZXI7XG4gIGxhYmVsOiBzdHJpbmc7XG4gIHRvPzogbnVtYmVyO1xuICBzZWNvbmRhcnk/OiBib29sZWFuO1xufVxuXG4vLyBIb3cgb25lIG51bWVyaWMgc2xvdCBpcyBzaG93bjogYSBjaGFydCBtZWFzdXJlLCBhIEtQSSBtZWFzdXJlLCBhIGxpc3QgY29sdW1uXG4vLyBvciBhIGNyb3NzLXRhYidzIGNlbGxzLiBUaGUgZGF0YSBzdGF5cyByYXcgKGl0IHNvcnRzIGFuZCBleHBvcnRzIGFzIGFcbi8vIG51bWJlcik7IG9ubHkgdGhlIHJlbmRlcmVycyBmb3JtYXQgaXQsIHRoZSBzYW1lIHdheSBvbiBzY3JlZW4sIGluIHRoZSBQREZcbi8vIGFuZCBpbiBQb3dlclBvaW50IChmb3JtYXQudHMpLiBBbGwgdGhyZWUga2V5cyBhcmUgb3B0aW9uYWwsIGFuZCBwcmVjaXNpb24gb3Jcbi8vIHVuaXRzIHdpdGhvdXQgYSBmb3JtYXQgbWVhbiBudW1iZXIuXG4vL1xuLy8gRm9ybWF0dGluZyBpcyBvcHQtaW46IGEgbGlzdCBjb2x1bW4gb3IgY3Jvc3MtdGFiIGNlbGwgd2l0aG91dCB0aGVzZSBrZXlzXG4vLyBwcmludHMgaXRzIHZhbHVlIGFzIGl0IGNhbWUsIGFuZCBhIGNoYXJ0IHdpdGhvdXQgdGhlbSBrZWVwcyBpdHMgcGxhaW5cbi8vIGxvY2FsZS1ncm91cGVkIGF4aXMgYW5kIHRvb2x0aXBzLiBBIEtQSSB3aXRob3V0IHRoZW0gcHJpbnRzIGEgcGxhaW4gbnVtYmVyLlxuZXhwb3J0IGludGVyZmFjZSBOdW1iZXJGb3JtYXRTcGVjIHtcbiAgLy8gcGVyY2VudCB0YWtlcyBhIDAtMSByYXRpbyAoMC4zIHJlYWRzIDMwJSkgd2hlbiB0aGUgcmVwb3J0J3MgcGVyY2VudEZvcm1hdFxuICAvLyBpcyAncmF0aW8nOyBhbiBvbGRlciBzZXJ2ZXIgbGVhdmVzIGl0IG91dCBhbmQgc2VuZHMgeDEwMC4gY3VycmVuY3kgbGFiZWxzXG4gIC8vIHRoZSBhbW91bnQgaW4gdGhlIHJlcG9ydCdzIGN1cnJlbmN5LCB3cml0dGVuIGluIGl0cyBsb2NhbGUuXG4gIGZvcm1hdD86IFJlcG9ydFZhbHVlRm9ybWF0IHwgUmVwb3J0TGlzdENvbHVtbkZvcm1hdDtcbiAgLy8gSG93IG1hbnkgZGVjaW1hbCBwbGFjZXMgdGhlIHZhbHVlIGlzIHNob3duIHRvICgwLTYpLiBGaXhlZCByYXRoZXIgdGhhblxuICAvLyBtYXhpbXVtOiBhIGNvbHVtbiBvZiByYXRlcyBpcyB1bnJlYWRhYmxlIHdoZW4gZWFjaCBvbmUgc2hvd3MgYSBkaWZmZXJlbnRcbiAgLy8gbnVtYmVyIG9mIGRlY2ltYWxzLiBGb3IgcGVyY2VudCBpdCBjb3VudHMgdGhlIGRlY2ltYWxzIG9mIHRoZSBwZXJjZW50YWdlXG4gIC8vIChwcmVjaXNpb24gMSBzaG93cyAwLjMgYXMgMzAuMCUpLiBPbWl0dGVkIGxlYXZlcyB0aGUgZm9ybWF0J3Mgb3duIGRlZmF1bHQ6XG4gIC8vIGF0IG1vc3Qgb25lIGRlY2ltYWwgZm9yIHBlcmNlbnQgKGFuZCBmb3IgYW4gYWJicmV2aWF0ZWQgMS4ySyksIHdob2xlIHVuaXRzXG4gIC8vIGZvciBjdXJyZW5jeSwgdGhlIGxvY2FsZSdzIGRlZmF1bHQgZm9yIGEgbnVtYmVyLlxuICAvL1xuICAvLyBJdCBjYW5ub3QgYmUgYXBwbGllZCBpbiB0aGUgU1FMOiB0aGUgdmFsdWUgaXMgYWdncmVnYXRlZCBhZnRlciB0aGUgcmVwb3J0J3NcbiAgLy8gZmlsdGVycyBydW4sIHNvIHByZS1yb3VuZGluZyB3b3VsZCBicmVhayBsaXZlIHJlLWZpbHRlcmluZy5cbiAgcHJlY2lzaW9uPzogbnVtYmVyO1xuICAvLyBBYmJyZXZpYXRlcyB0byB0aG91c2FuZHMgKDEuMkspIG9yIG1pbGxpb25zICgzLjRNKSwgb3IgcGlja3MgYnkgc2l6ZS5cbiAgdW5pdHM/OiBSZXBvcnROdW1iZXJVbml0cztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDaGFydE1lYXN1cmUgZXh0ZW5kcyBOdW1iZXJGb3JtYXRTcGVjIHtcbiAgY29sdW1uOiBzdHJpbmc7XG4gIGFnZ3JlZ2F0aW9uPzogJ3N1bScgfCAnY291bnQnIHwgJ2F2ZycgfCAnbWluJyB8ICdtYXgnO1xuICBsYWJlbD86IHN0cmluZztcbiAgLy8gRHJhd3MgdGhpcyBtZWFzdXJlJ3Mgc2VyaWVzIGFzIGEgZGlmZmVyZW50IHR5cGUgZnJvbSB0aGUgY2hhcnQncyBvd25cbiAgLy8gY2hhcnRUeXBlIOKAlCBjb3VudHMgYXMgYmFycyB3aXRoIGEgcmF0ZSBhcyBhIGxpbmUgb3ZlciB0aGVtIGlzIGEgY29tYm9cbiAgLy8gY2hhcnQuIE9taXR0ZWQsIHRoZSBzZXJpZXMgdGFrZXMgdGhlIGNoYXJ0J3MgdHlwZS4gQXhpcyBjaGFydHMgb25seSAoYSBwaWVcbiAgLy8gaWdub3JlcyBpdCkuXG4gIHR5cGU/OiBBeGlzQ2hhcnRUeXBlO1xuICAvLyBBIGNoYXJ0IG1lYXN1cmUncyBmb3JtYXQgc2hvd3Mgb24gaXRzIHRvb2x0aXBzLCBhbmQgb24gdGhlIHZhbHVlIGF4aXNcbiAgLy8gd2hlbiBldmVyeSBtZWFzdXJlIHNoYXJpbmcgdGhlIGF4aXMgYWdyZWVzIG9uIGl0LiBBIEtQSSdzIG1lYXN1cmUgZm9ybWF0c1xuICAvLyBpdHMgb25lIHZhbHVlLlxuICBmb3JtYXQ/OiBSZXBvcnRWYWx1ZUZvcm1hdDtcbiAgLy8gUGxvdHMgdGhpcyBtZWFzdXJlIGFnYWluc3QgdGhlIHNlY29uZCB2YWx1ZSBheGlzLCBvbiB0aGUgcmlnaHQsIGZvciBhXG4gIC8vIHF1YW50aXR5IG9uIGFub3RoZXIgc2NhbGUuIE9taXR0ZWQgb3IgZmFsc2UsIGl0IHNoYXJlcyB0aGUgcHJpbWFyeSBheGlzLlxuICAvLyBBIHZlcnRpY2FsIGF4aXMgY2hhcnQgb25seSwgd2l0aCBhdCBsZWFzdCBvbmUgbWVhc3VyZSBsZWZ0IG9uIHRoZSBwcmltYXJ5XG4gIC8vIGF4aXMuXG4gIHNlY29uZGFyeT86IGJvb2xlYW47XG4gIC8vIFRoZSBwYWxldHRlIGNvbG9yIHRoaXMgbWVhc3VyZSdzIHNlcmllcyBpcyBkcmF3biBpbi4gT21pdHRlZCwgdGhlIHNlcmllc1xuICAvLyB0YWtlcyB0aGUgcGFsZXR0ZSBjb2xvciBvZiBpdHMgcG9zaXRpb24uIEEgY29sb3Igb24gdGhlIGZpcnN0IG1lYXN1cmVcbiAgLy8gdHVybnMgb2ZmIGEgY2F0ZWdvcnkgYmFyIGNoYXJ0J3MgZGVmYXVsdCBjb2xvciBwZXIgYmFyIChpc0NvbG9yQnkpLlxuICBjb2xvcj86IFJlcG9ydENoYXJ0Q29sb3I7XG4gIC8vIEhvdyBhIGxpbmUgc2VyaWVzJyBsaW5lIGlzIGRyYXduLiBPbWl0dGVkLCBzb2xpZC5cbiAgbGluZT86IFJlcG9ydENoYXJ0TGluZVN0eWxlO1xuICAvLyBXaGV0aGVyIGEgbGluZSBvciBhcmVhIHNlcmllcyBkcmF3cyBhIGRvdCBvbiBlYWNoIHBvaW50LiBPbWl0dGVkLCB0cnVlLlxuICBtYXJrZXJzPzogYm9vbGVhbjtcbiAgLy8gQSBsaW5lIGFjcm9zcyB0aGUgcGxvdCBhdCB0aGlzIHNlcmllcycgYXZlcmFnZSwgbWVkaWFuLCBsb3dlc3Qgb3IgaGlnaGVzdFxuICAvLyB2YWx1ZSBvdmVyIHRoZSBwb2ludHMgb24gc2NyZWVuLiBWZXJ0aWNhbCBheGlzIGNoYXJ0cyBvbmx5LlxuICBtYXJrTGluZT86IFJlcG9ydENoYXJ0TWFya1N0YXQ7XG59XG5cbi8vIE9uZSBhdXRob3JlZCBjb2x1bW4gb2YgYSBwbGFpbiBsaXN0LlxuZXhwb3J0IGludGVyZmFjZSBMaXN0Q29sdW1uIGV4dGVuZHMgTnVtYmVyRm9ybWF0U3BlYyB7XG4gIGNvbHVtbjogc3RyaW5nO1xuICBsYWJlbD86IHN0cmluZztcbiAgLy8gZGF0ZSBrZWVwcyB0aGUgY29sdW1uIGEgUkFXIHRpbWVzdGFtcCwgc28gdGhlIHJlcG9ydCB0aW1lem9uZSBhbmQgaXRzXG4gIC8vIGRhdGVSYW5nZSBmaWx0ZXJzIGtlZXAgd29ya2luZywgYW5kIHRoZSB2aWV3ZXIgcmVuZGVycyBpdCBhcyBhIGRheSBpbiB0aGVcbiAgLy8gcmVwb3J0J3Mgem9uZSBhbmQgbG9jYWxlLiBudW1iZXIsIHBlcmNlbnQgYW5kIGN1cnJlbmN5IGZvcm1hdCB0aGUgdmFsdWUgYXNcbiAgLy8gYSBLUEkgbWVhc3VyZSBkb2VzLiBXaXRob3V0IGEgZm9ybWF0IHRoZSB2YWx1ZSBwcmludHMgYXMgaXQgY2FtZS5cbiAgZm9ybWF0PzogUmVwb3J0TGlzdENvbHVtbkZvcm1hdDtcbiAgLy8gQSBjb2x1bW4gdGhlIFNRTCBhbHJlYWR5IGZvcm1hdHRlZCBpcyB0ZXh0LCBzbyBpdCBuYW1lcyBgc29ydENvbHVtbmA6IHRoZVxuICAvLyByYXcgbnVtZXJpYyBhbGlhcyB0aGUgcXVlcnkgYWxzbyBvdXRwdXRzLCB3aGljaCB0aGUgc2VydmVyIG9yZGVycyBieVxuICAvLyBpbnN0ZWFkLlxuICBzb3J0Q29sdW1uPzogc3RyaW5nO1xuICAvLyBmYWxzZSBrZWVwcyB0aGUgY2VsbCBvbiBvbmUgbGluZS4gT21pdHRlZCwgYSBsb25nIHZhbHVlIHdyYXBzLlxuICB3cmFwPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBMaXN0Q29uZmlnIHtcbiAgY29sdW1ucz86IExpc3RDb2x1bW5bXTtcbiAgLy8gQSBjcm9zcy10YWI6IGByb3dCeWAgc3RheXMgZG93biB0aGUgc2lkZSBhbmQgZXZlcnkgdmFsdWUgb2YgYHBpdm90QnlgXG4gIC8vIGJlY29tZXMgYSBjb2x1bW4uIFRoZSB0d28gYXJlIHNldCB0b2dldGhlciwgYGNvbHVtbnNgIGlzIG9taXR0ZWQgKHRoZVxuICAvLyBiYWNrZW5kIHJlamVjdHMgYXV0aG9yaW5nIGJvdGgpLCBhbmQgdGhlIGNvbHVtbiBzZXQgYXJyaXZlcyB3aXRoIHRoZSByb3dzXG4gIC8vIGluIENvbXBvbmVudERhdGEuY29sdW1ucyBiZWNhdXNlIG9ubHkgdGhlIHJlc3VsdCBrbm93cyB0aGUgcGl2b3QgdmFsdWVzLlxuICAvLyByb3dCeS5sYWJlbCBoZWFkcyB0aGUgc2lkZSBjb2x1bW4gb24gc2NyZWVuIGFuZCBpbiBldmVyeSBleHBvcnQsIGFuZFxuICAvLyBkZWZhdWx0cyB0byB0aGUgY29sdW1uIG5hbWUuIHBpdm90QnkgY2FycmllcyBubyBsYWJlbDogaXRzIHZhbHVlcyBhcmUgdGhlXG4gIC8vIGhlYWRpbmdzLlxuICByb3dCeT86IHsgY29sdW1uOiBzdHJpbmc7IGxhYmVsPzogc3RyaW5nIH07XG4gIHBpdm90Qnk/OiB7IGNvbHVtbjogc3RyaW5nIH07XG4gIC8vIFRoZSBhdXRob3JlZCBvcmRlciwgbW9zdCBpbXBvcnRhbnQgZmlyc3QuIEEgbGlzdCBzYXZlZCBiZWZvcmUgbXVsdGkta2V5XG4gIC8vIHNvcnRpbmcgc3RvcmVzIG9uZSBvYmplY3QsIHNvIHJlYWQgaXQgdGhyb3VnaCBsaXN0U29ydFRlcm1zKCkgb25seS5cbiAgc29ydD86IFJlcG9ydFNvcnQgfCBSZXBvcnRTb3J0W107XG4gIC8vIEhvdyBtYW55IGxlYWRpbmcgY29sdW1ucyBzdGF5IGluIHZpZXcgd2hpbGUgdGhlIGxpc3Qgc2Nyb2xscyBzaWRld2F5c1xuICAvLyAoMC0zKS4gVW5zZXQsIGEgY3Jvc3MtdGFiIHBpbnMgaXRzIHJvdy1rZXkgY29sdW1uIGFuZCBhIHBsYWluIGxpc3Qgbm9uZS5cbiAgcGlubmVkQ29sdW1ucz86IG51bWJlciB8IG51bGw7XG4gIHBhZ2VTaXplPzogbnVtYmVyO1xuICAvLyB0cnVlIGFkZHMgYSB0b3RhbHMgcm93IHVuZGVyIHRoZSBsaXN0OiB0aGUgc2VydmVyIHJ1bnMgdGhlIG1lYXN1cmVzIGFnYWluXG4gIC8vIG92ZXIgZXZlcnkgcm93IHRoZSBmaWx0ZXJzIGtlZXAsIHdpdGhvdXQgZ3JvdXBpbmcsIGFuZCBhIGNyb3NzLXRhYiB0b3RhbHNcbiAgLy8gZWFjaCBjb2x1bW4uXG4gIHRvdGFscz86IGJvb2xlYW47XG4gIC8vIEEgY3Jvc3MtdGFiIG9ubHk6IGhvdyBldmVyeSBjZWxsIG9mIHRoZSBncmlkIGlzIGZvcm1hdHRlZCwgd2l0aCBhIEtQSVxuICAvLyBtZWFzdXJlJ3Mga2V5cy4gVGhlIHJvdyBrZXkgY29sdW1uIHN0YXlzIGFzIGl0IGNhbWUuXG4gIGNlbGxGb3JtYXQ/OiBOdW1iZXJGb3JtYXRTcGVjICYgeyBmb3JtYXQ/OiBSZXBvcnRWYWx1ZUZvcm1hdCB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEtwaUNvbmZpZyB7XG4gIG1lYXN1cmU/OiBDaGFydE1lYXN1cmU7XG4gIC8vIFdoZXRoZXIgYSByaXNlIGluIHRoZSB2YWx1ZSBpcyBnb29kIG5ld3MsIGJhZCBuZXdzIG9yIG5laXRoZXI6IGl0IHBpY2tzXG4gIC8vIHRoZSBkZWx0YSdzIGNvbG9yIGFuZCBkZWNpZGVzIHdoZW4gYSB0YXJnZXQgaXMgbWV0IChnb29kOiBhdCBvciBhYm92ZSBpdDtcbiAgLy8gYmFkOiBhdCBvciBiZWxvdyBpdDsgbmV1dHJhbDogbmV2ZXIganVkZ2VkKS4gT21pdHRlZCBvciBudWxsIHJlYWRzIGdvb2QuXG4gIGluY3JlYXNlSXM/OiBSZXBvcnRDaGFuZ2VQb2xhcml0eSB8IG51bGw7XG4gIC8vIEEgbnVtYmVyIHRoZSB1c2VyIGdhdmUgZm9yIHRoZSB2YWx1ZSB0byByZWFjaCwgbmV2ZXIgb25lIHJlYWQgb2ZmIHRoZVxuICAvLyBkYXRhLiBUaGUgc2VydmVyIHNlbmRzIHRoZSBwcm9ncmVzcyB0b3dhcmQgaXQgd2l0aCB0aGUgZGF0YS5cbiAgdGFyZ2V0PzogS3BpVGFyZ2V0Q29uZmlnIHwgbnVsbDtcbiAgLy8gQSBzbWFsbCB0cmVuZCBsaW5lIG9mIHRoZSB2YWx1ZSBvdmVyIGl0cyBsYXN0IHBlcmlvZHMsIGRyYXduIHVuZGVyIGl0LlxuICBzcGFya2xpbmU/OiBLcGlTcGFya2xpbmVDb25maWcgfCBudWxsO1xufVxuXG4vLyBBIEtQSSdzIHRhcmdldDogdGhlIHZhbHVlLCBhbmQgYW4gb3B0aW9uYWwgY2FwdGlvbiBmb3IgaXQgKCdHb2FsJykuXG5leHBvcnQgaW50ZXJmYWNlIEtwaVRhcmdldENvbmZpZyB7XG4gIHZhbHVlOiBudW1iZXI7XG4gIGxhYmVsPzogc3RyaW5nIHwgbnVsbDtcbn1cblxuLy8gQSBLUEkncyBzcGFya2xpbmU6IGhvdyB3aWRlIGVhY2ggcG9pbnQncyBwZXJpb2QgaXMgKG51bGwgcmVhZHMgbW9udGgpIGFuZFxuLy8gaG93IG1hbnkgcGVyaW9kcyBpdCBkcmF3cywgMiB0byA2MCAobnVsbCByZWFkcyAxMikuXG5leHBvcnQgaW50ZXJmYWNlIEtwaVNwYXJrbGluZUNvbmZpZyB7XG4gIGdyYW51bGFyaXR5PzogQ2hhcnRHcmFudWxhcml0eSB8IG51bGw7XG4gIHBlcmlvZHM/OiBudW1iZXIgfCBudWxsO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlcG9ydFNvcnQge1xuICBjb2x1bW46IHN0cmluZztcbiAgZGlyZWN0aW9uPzogJ2FzYycgfCAnZGVzYyc7XG59XG5cbmV4cG9ydCB0eXBlIFJlcG9ydEZpbHRlclR5cGUgPSAnZGF0ZVJhbmdlJyB8ICdzZWxlY3QnIHwgJ2tleXdvcmQnIHwgJ251bWJlclJhbmdlJztcblxuLy8gV2hlcmUgYSBmaWx0ZXIgZ3JvdXAncyBjb250cm9sIGlzIGV4cG9zZWQuIEEgZ3JvdXAgY2FuIGJlIHNob3duIG9uIGl0c1xuLy8gY29tcG9uZW50cywgaW4gdGhlIHJlcG9ydCBiYXIsIG9yIEJPVEggYXQgb25jZSAodGhlIHR3byBhcmUgaW5kZXBlbmRlbnRcbi8vIHRvZ2dsZXMgaW4gdGhlIFVJKTsgYSBjb2x1bW4gd2l0aCBuZWl0aGVyIGV4cG9zZWQgc2ltcGx5IGhhcyBubyBmaWx0ZXIuXG4vLyAncGFnZScgc2hvd3MgaXQgaW4gdGhlIHJlcG9ydCBiYXIgb2Ygb25lIHBhZ2Ugb25seSAoUmVwb3J0RmlsdGVyR3JvdXAucGFnZUlkKS5cbmV4cG9ydCB0eXBlIFJlcG9ydEZpbHRlckxldmVsID0gJ2NvbXBvbmVudCcgfCAncmVwb3J0JyB8ICdib3RoJyB8ICdwYWdlJztcblxuLy8gT25lIGZpbHRlcmFibGUgb3V0cHV0IGNvbHVtbiBvZiBhIGNvbXBvbmVudCdzIFNRTCwgd2l0aCB0aGUgZmlsdGVyIGludGVyZmFjZVxuLy8gSU5GRVJSRUQgZnJvbSBpdHMgZGF0YSAodGhlIGh1bWFuIG5ldmVyIHBpY2tzIHRoZSBpbnRlcmZhY2Ug4oCUIGl0IGZvbGxvd3MgdGhlXG4vLyBjb2x1bW4ncyB0eXBlKS4gRHJpdmVzIHRoZSBGaWx0ZXJzIHRhYiBsaXN0aW5nLlxuZXhwb3J0IGludGVyZmFjZSBSZXBvcnRGaWx0ZXJhYmxlQ29sdW1uIHtcbiAgY29sdW1uOiBzdHJpbmc7XG4gIHR5cGU6IFJlcG9ydEZpbHRlclR5cGU7XG4gIC8vIEV2ZXJ5IGludGVyZmFjZSB0aGUgY29sdW1uIGNhbiB0YWtlLCB0aGUgaW5mZXJyZWQgb25lICh0eXBlKSBmaXJzdDogYVxuICAvLyBudW1lcmljIGNvbHVtbiB0YWtlcyBbJ3NlbGVjdCcsICdudW1iZXJSYW5nZSddLiBBYnNlbnQgb24gb2xkZXIgc2VydmVycy5cbiAgdHlwZXM/OiBSZXBvcnRGaWx0ZXJUeXBlW107XG59XG5cbi8vIEdyb3VuZCB0cnV0aDogb25lIGZpbHRlcmFibGUgb3V0cHV0IGNvbHVtbiBPTiBvbmUgY29tcG9uZW50J3MgU1FMLiBBbHdheXMgYVxuLy8gbWVtYmVyIG9mIGEgZmlsdGVyIGdyb3VwIOKAlCB0aGUgdW5pdCB0aGF0IGxpbmtzIGVxdWl2YWxlbnQgZmlsdGVycyBhY3Jvc3Ncbi8vIGNvbXBvbmVudHMgYW5kIGRlY2lkZXMgd2hlcmUgdGhlIGNvbnRyb2wgcmVuZGVycyAoY29tcG9uZW50IHZzIHJlcG9ydCBiYXIpLlxuZXhwb3J0IGludGVyZmFjZSBSZXBvcnRGaWx0ZXIge1xuICBpZDogbnVtYmVyO1xuICBjb21wb25lbnRJZDogbnVtYmVyO1xuICBmaWx0ZXJHcm91cElkOiBudW1iZXI7XG4gIGZpbHRlckNvbHVtbjogc3RyaW5nO1xuICBsYWJlbDogc3RyaW5nIHwgbnVsbDtcbiAgZW5hYmxlZDogYm9vbGVhbjtcbiAgaGFzT3B0aW9uczogYm9vbGVhbjtcbiAgY29uZmlnOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbn1cblxuLy8gT25lIGNob2ljZSBpbiBhIHNlbGVjdCBmaWx0ZXIncyBvcHRpb24gbGlzdC4gVGhlIHZhbHVlIGlzIHdoYXQgdGhlIGZpbHRlclxuLy8gbWF0Y2hlcyBvbiBhbmQgZ2V0cyBzdG9yZWQgaW4gYSBzYXZlZCBkZWZhdWx0IOKAlCBmb3IgYW4gZW50aXR5IHRoYXQgaXMgaXRzXG4vLyBzdGFibGUgaWQsIG5ldmVyIGl0cyBuYW1lLCBzbyByZW5hbWluZyB0aGUgZW50aXR5IG1vdmVzIHRoZSBsYWJlbCB3aXRob3V0XG4vLyBicmVha2luZyB0aGUgZGVmYXVsdC4gVGhlIGxhYmVsIGlzIG9ubHkgZXZlciB3aGF0IHRoZSB2aWV3ZXIgcmVhZHMuXG5leHBvcnQgaW50ZXJmYWNlIFJlcG9ydEZpbHRlck9wdGlvbiB7XG4gIHZhbHVlOiB1bmtub3duO1xuICBsYWJlbDogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlcG9ydEZpbHRlckdyb3VwIHtcbiAgaWQ6IG51bWJlcjtcbiAgbGFiZWw6IHN0cmluZyB8IG51bGw7XG4gIHR5cGU6IFJlcG9ydEZpbHRlclR5cGU7XG4gIGxldmVsOiBSZXBvcnRGaWx0ZXJMZXZlbDtcbiAgb3JkZXI6IG51bWJlcjtcbiAgY29uZmlnOiB7IGRlZmF1bHQ/OiBGaWx0ZXJHcm91cERlZmF1bHQgfSAmIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBmaWx0ZXJzOiBSZXBvcnRGaWx0ZXJbXTtcbiAgLy8gVGhlIHBhZ2Ugd2hvc2UgcmVwb3J0IGJhciBzaG93cyB0aGUgZ3JvdXA6IHNldCBvbmx5IHdoZW4gbGV2ZWwgaXMgJ3BhZ2UnLFxuICAvLyBudWxsIG90aGVyd2lzZS4gQWJzZW50IG9uIG9sZGVyIHNlcnZlcnMuXG4gIHBhZ2VJZD86IG51bWJlciB8IG51bGw7XG4gIC8vIFRoZSBjb21wb25lbnRzIG9mIHRoZSBncm91cCdzIGFjdGl2ZSwgZW5hYmxlZCBtZW1iZXJzIHRoYXQgYXJlIHRpbGVzXG4gIC8vIChjaGFydCwgbGlzdCwgS1BJKS4gQWJzZW50IG9uIG9sZGVyIHNlcnZlcnMuXG4gIGNvbXBvbmVudElkcz86IG51bWJlcltdO1xuICAvLyBUcnVlIHdoZW4gYW4gZW5hYmxlZCBtZW1iZXIgYmluZHMgc2V2ZXJhbCBjb2x1bW5zLCB3aGVyZSB2YWx1ZXMgY2Fubm90XG4gIC8vIGJlIGxlZnQgb3V0OiB0aGUgZ3JvdXAgb2ZmZXJzIG5vICdFeGNsdWRlIHRoZXNlJyAob2ZmZXJzRXhjbHVkZSkuIEFic2VudFxuICAvLyBvbiBvbGRlciBzZXJ2ZXJzLlxuICBtdWx0aUNvbHVtbj86IGJvb2xlYW47XG4gIC8vIEEgc2VsZWN0IGdyb3VwJ3MgbGFiZWwgZm9yIGEgYmxhbmsgcm93LCBudWxsIHdoZW4gYmxhbmsgcm93cyBoYXZlIG5vbmU6XG4gIC8vIGFuIGV4Y2x1ZGUgbGluZSBzYXlzIHdoZXRoZXIgdGhlIGJsYW5rIHJvd3MgYXJlIGtlcHQuIFNlbnQgZm9yIHNlbGVjdFxuICAvLyBncm91cHMgb25seSwgYW5kIGFic2VudCBvbiBvbGRlciBzZXJ2ZXJzLlxuICBibGFua0xhYmVsPzogc3RyaW5nIHwgbnVsbDtcbn1cblxuLy8gQSBmaWx0ZXIgZ3JvdXAncyB2YWx1ZSBpbiBpdHMgc3RvcmVkIHNoYXBlOiBpdHMgYXV0aG9yZWQgZGVmYXVsdCAodGhlIHZhbHVlXG4vLyB0aGF0IHNlZWRzIHRoZSByZXBvcnQgYmFyIG9uIGV2ZXJ5IG9wZW4pLCBhIHZhbHVlIHRoZSBhc3Npc3RhbnQgcnVucyBpdCBhdFxuLy8gYW5kIGl0cyB2YWx1ZSBpbiBhIHNhdmVkIHZpZXcuIFNoYXBlIGZvbGxvd3MgdGhlIGdyb3VwJ3MgdHlwZTogZGF0ZVJhbmdlXG4vLyB1c2VzIHN0YXJ0L2VuZCAoYSBmaXhlZCBjYWxlbmRhci1kYXkgcmFuZ2UpIG9yIGEgcmVsYXRpdmUgcHJlc2V0OyBzZWxlY3Rcbi8vIHVzZXMgdmFsdWVzIG9yIGV4Y2x1ZGVWYWx1ZXMsIG5ldmVyIGJvdGg7IGtleXdvcmQgdXNlcyB2YWx1ZTsgbnVtYmVyUmFuZ2Vcbi8vIHVzZXMgbWluIGFuZCBtYXguXG5leHBvcnQgaW50ZXJmYWNlIEZpbHRlckdyb3VwRGVmYXVsdCB7XG4gIC8vIGRhdGVSYW5nZSByZWxhdGl2ZSBwcmVzZXQsIHJlc29sdmVkIG9uIGV2ZXJ5IG9wZW4gYWdhaW5zdCB0b2RheSBpbiB0aGVcbiAgLy8gcmVwb3J0J3MgZWZmZWN0aXZlIHpvbmUgKFJlcG9ydC5lZmZlY3RpdmVUaW1lem9uZSkuIE9uZSBvZjogdGhpc1dlZWssXG4gIC8vIGxhc3RXZWVrLCBsYXN0N0RheXMsIGxhc3QzMERheXMsIGxhc3QzTW9udGhzLCBsYXN0Nk1vbnRocywgbGFzdDEyTW9udGhzLFxuICAvLyB0aGlzTW9udGgsIHRoaXNRdWFydGVyLCB0aGlzWWVhci95ZWFyVG9EYXRlLiBXZWVrcyBydW4gTW9uZGF5IHRvIFN1bmRheSxcbiAgLy8gdGhlIHNhbWUgd2Vla3MgdGhlIHNlcnZlcidzIHdlZWtseSB0aW1lIGJ1Y2tldHMgdXNlLlxuICByZWxhdGl2ZT86IHN0cmluZztcbiAgc3RhcnQ/OiBzdHJpbmc7IC8vIGRhdGVSYW5nZSBmaXhlZCBzdGFydCAoeXl5eS1NTS1kZClcbiAgZW5kPzogc3RyaW5nOyAvLyBkYXRlUmFuZ2UgZml4ZWQgZW5kICh5eXl5LU1NLWRkKVxuICB2YWx1ZXM/OiB1bmtub3duW107IC8vIHNlbGVjdCBkZWZhdWx0IHBpY2tlZCB2YWx1ZXNcbiAgdmFsdWU/OiBzdHJpbmc7IC8vIGtleXdvcmQgZGVmYXVsdCB0ZXh0XG4gIC8vIHNlbGVjdDogdGhlIHZhbHVlcyB0byBsZWF2ZSBvdXQgKHJvd3Mgd2l0aCBhIGJsYW5rIHZhbHVlIGFyZSBrZXB0KS5cbiAgZXhjbHVkZVZhbHVlcz86IHVua25vd25bXTtcbiAgLy8gbnVtYmVyUmFuZ2U6IHRoZSBsb3cgYW5kIGhpZ2ggZW5kcywgZWl0aGVyIG9uZSBvcGVuIChhYnNlbnQpLiAwIGlzIGFuXG4gIC8vIGVuZCBsaWtlIGFueSBvdGhlci5cbiAgbWluPzogbnVtYmVyO1xuICBtYXg/OiBudW1iZXI7XG59XG5cbi8vIFRoZSBzZXNzaW9uIHZhbHVlIG9mIGEgZmlsdGVyIGdyb3VwOiBzaGFwZSBkZXBlbmRzIG9uIHRoZSBncm91cCdzIHR5cGUuIE5vdFxuLy8gc3RvcmVkIG9uIHRoZSBzZXJ2ZXI7IHRoZSB2aWV3ZXIncyBVUkwgY2FycmllcyB0aGUgdmFsdWVzIHRoYXQgZGlmZmVyIGZyb21cbi8vIHRoZSBkZWZhdWx0cyAocmVwb3J0LXVybC1zdGF0ZS50cykuXG5leHBvcnQgaW50ZXJmYWNlIEZpbHRlckdyb3VwVmFsdWUge1xuICBzdGFydD86IERhdGUgfCBzdHJpbmcgfCBudWxsOyAvLyBkYXRlUmFuZ2VcbiAgZW5kPzogRGF0ZSB8IHN0cmluZyB8IG51bGw7IC8vIGRhdGVSYW5nZVxuICB2YWx1ZXM/OiB1bmtub3duW107IC8vIHNlbGVjdFxuICB2YWx1ZT86IHN0cmluZzsgLy8ga2V5d29yZFxuICAvLyBkYXRlUmFuZ2Ugb25seTogdGhlIHJlbGF0aXZlIHByZXNldCBuYW1lIHRoZXNlIGRhdGVzIHdlcmUgcmVzb2x2ZWQgZnJvbVxuICAvLyAoYSBGaWx0ZXJHcm91cERlZmF1bHQucmVsYXRpdmUgbmFtZSkuIFNldCBvbmx5IHdoZW4gdGhlIHZhbHVlIHdhcyBzZWVkZWRcbiAgLy8gZnJvbSB0aGUgZ3JvdXAncyByZWxhdGl2ZSBkZWZhdWx0IG9yIG9wZW5lZCBmcm9tIGEgdmlldyB0aGF0IGtlZXBzIG9uZSxcbiAgLy8gc28gdGhlIHJhbmdlIGtlZXBzIHJvbGxpbmcgKCdsYXN0MzBEYXlzJykgaW5zdGVhZCBvZiBmcmVlemluZyB0d28gZGF0ZXNcbiAgLy8gKGFuIHVudG91Y2hlZCBkZWZhdWx0IHN0YXlzIG91dCBvZiB0aGUgVVJMLCBhbmQgYSB2aWV3IHNhdmVkIHdpdGggaXQga2VlcHNcbiAgLy8gdGhlIG5hbWUpLCBhbmQgdGhlIGRhdGEgcmVxdWVzdCBuYW1lcyB0aGUgcGVyaW9kIGl0IGNvdmVycyAoc2VlXG4gIC8vIFJlc29sdmVkRmlsdGVyVmFsdWUucHJlc2V0KS4gQW55IGRhdGUgcGlja2VkIGJ5IHRoZSB2aWV3ZXIsIGEgZGF0ZSBwaWNrZXJcbiAgLy8gcHJlc2V0IGluY2x1ZGVkLCBpcyBzdG9yZWQgd2l0aG91dCBpdC5cbiAgcHJlc2V0Pzogc3RyaW5nO1xuICAvLyBzZWxlY3Q6IHRoZSB2YWx1ZXMgdG8gbGVhdmUgb3V0LiBTd2l0Y2hpbmcgYSBzZWxlY3QgYmV0d2VlbiBrZWVwaW5nIGFuZFxuICAvLyBsZWF2aW5nIG91dCBtb3ZlcyBpdHMgbGlzdCBmcm9tIHZhbHVlcyB0byBleGNsdWRlVmFsdWVzLlxuICBleGNsdWRlVmFsdWVzPzogdW5rbm93bltdO1xuICAvLyBudW1iZXJSYW5nZTogdGhlIGxvdyBhbmQgaGlnaCBlbmRzOyBudWxsIG9yIGFic2VudCA9IG9wZW4uXG4gIG1pbj86IG51bWJlciB8IG51bGw7XG4gIG1heD86IG51bWJlciB8IG51bGw7XG59XG5cbi8vIEEgcmVsYXRpdmUgZGF0ZSByYW5nZSB0aGUgc2VydmVyIHJlc29sdmVzIGFnYWluc3QgdG9kYXkgaW4gdGhlIHJlcG9ydCdzXG4vLyB6b25lOiB0aGUgbmFtZXMgYSBGaWx0ZXJHcm91cERlZmF1bHQucmVsYXRpdmUgYW5kIGEgdGltZWZyYW1lJ3MgcmFuZ2UgdGFrZS5cbi8vIE1pcnJvcnMgdGhlIHNlcnZlcidzIFJlcG9ydFJlbGF0aXZlUmFuZ2VFbnVtIHZhbHVlIGZvciB2YWx1ZVxuLy8gKFJlcG9ydFJlbGF0aXZlUmFuZ2VFbnVtVGVzdCBwaW5zIHRoZSBkYXlzIGVhY2ggb25lIGNvdmVycykuXG5leHBvcnQgdHlwZSBSZXBvcnRSZWxhdGl2ZVJhbmdlID1cbiAgfCAndGhpc1dlZWsnXG4gIHwgJ2xhc3RXZWVrJ1xuICB8ICdsYXN0N0RheXMnXG4gIHwgJ2xhc3QzMERheXMnXG4gIHwgJ2xhc3QzTW9udGhzJ1xuICB8ICdsYXN0Nk1vbnRocydcbiAgfCAnbGFzdDEyTW9udGhzJ1xuICB8ICd0aGlzTW9udGgnXG4gIHwgJ3RoaXNRdWFydGVyJ1xuICB8ICd0aGlzWWVhcidcbiAgfCAneWVhclRvRGF0ZSc7XG5cbi8vIFRoZSB2aWV3ZXItc3RhdGUgcXVlcnkgcGFyYW1zIG9mIGEgcmVwb3J0IFVSTCwgYmVmb3JlIHRoZXkgYXJlIGNoZWNrZWRcbi8vIGFnYWluc3QgdGhlIHJlcG9ydCAocmVwb3J0LXVybC1zdGF0ZS50cyByZWFkUmVwb3J0VXJsUGFyYW1zKS5cbmV4cG9ydCBpbnRlcmZhY2UgUmVwb3J0VXJsUGFyYW1zIHtcbiAgLy8gQSBncm91cCdzIHZhbHVlIGluIGl0cyBzdG9yZWQgc2hhcGUsIGJ5IGdyb3VwIGlkIChudWxsID0gdGhlIHZpZXdlclxuICAvLyBjbGVhcmVkIGl0KSwgcmVhZCB1bmRlciBpdHMgZnMtZmlsdGVyIGl0ZW0ncyBxdWVyeSBrZXlzIChyZWdpb249LFxuICAvLyBleGNsdWRlUmVnaW9uPSwgdW5pdHNNaW49LCBkYXRlRnJvbT0sIGRhdGVUbz0pLlxuICBncm91cHM6IE1hcDxudW1iZXIsIEZpbHRlckdyb3VwRGVmYXVsdCB8IG51bGw+O1xuICAvLyBzPGNvbXBvbmVudElkPiAtPiB0aGUgZW5jb2RlZCBsaXN0IHNvcnQgKCctY29sdW1uJyA9IGRlc2NlbmRpbmcpLlxuICBsaXN0U29ydHM6IE1hcDxudW1iZXIsIHN0cmluZz47XG4gIC8vIHE8Y29tcG9uZW50SWQ+IC0+IGEgbGlzdCdzIHNlYXJjaCBib3ggdGV4dCwgYXMgdHlwZWQuXG4gIGxpc3RTZWFyY2hlczogTWFwPG51bWJlciwgc3RyaW5nPjtcbiAgLy8gaDxjb21wb25lbnRJZD4gLT4gdGhlIGNvbHVtbnMgYSB2aWV3ZXIgaGlkIG9uIGEgbGlzdCwgc3RpbGwgZW5jb2RlZFxuICAvLyAoZGVjb2RlQ29sdW1uTGlzdCkuXG4gIGxpc3RIaWRkZW46IE1hcDxudW1iZXIsIHN0cmluZz47XG4gIC8vIFRoZSBncm91cC1ieSBncmFpbiwgb3IgbnVsbCB3aGVuIHRoZSBVUkwgaGFzIG5vbmUuXG4gIGdyb3VwQnk6IHN0cmluZyB8IG51bGw7XG59XG5cbi8vIFRoZSB2aWV3ZXIgc3RhdGUgdGhlIFVSTCBzaG91bGQgY2Fycnk6IG9ubHkgd2hhdCBkaWZmZXJzIGZyb20gdGhlIHJlcG9ydCdzXG4vLyBhdXRob3JlZCBkZWZhdWx0cyAoUmVwb3J0RmlsdGVyU3RhdGVTZXJ2aWNlLnVybFNuYXBzaG90KS5cbmV4cG9ydCBpbnRlcmZhY2UgUmVwb3J0VXJsU25hcHNob3Qge1xuICAvLyBBIGdyb3VwJ3MgdmFsdWUsIG9yIG51bGwgd2hlbiB0aGUgdmlld2VyIGNsZWFyZWQgYSBncm91cCB0aGF0IGhhcyBhIGRlZmF1bHQuXG4gIGdyb3VwczogTWFwPG51bWJlciwgRmlsdGVyR3JvdXBWYWx1ZSB8IG51bGw+O1xuICAvLyBBIGxpc3QncyBzb3J0LCBieSBjb21wb25lbnQgaWQsIHdoZW4gaXQgZGlmZmVycyBmcm9tIHRoZSBhdXRob3JlZCBzb3J0J3NcbiAgLy8gZmlyc3QgdGVybS5cbiAgbGlzdFNvcnRzOiBNYXA8bnVtYmVyLCBSZXBvcnRTb3J0PjtcbiAgLy8gQSBsaXN0J3Mgc2VhcmNoIGJveCB0ZXh0LCBieSBjb21wb25lbnQgaWQuIEEgbGlzdCB3aXRoIGFuIGVtcHR5IGJveCBpc1xuICAvLyBsZWZ0IG91dC5cbiAgbGlzdFNlYXJjaGVzOiBNYXA8bnVtYmVyLCBzdHJpbmc+O1xuICAvLyBUaGUgY29uZmlnIGNvbHVtbiBuYW1lcyBhIHZpZXdlciBoaWQgb24gYSBwbGFpbiBsaXN0LCBieSBjb21wb25lbnQgaWQuIEFcbiAgLy8gbGlzdCBzaG93aW5nIGV2ZXJ5IGNvbHVtbiBpcyBsZWZ0IG91dC5cbiAgbGlzdEhpZGRlbjogTWFwPG51bWJlciwgc3RyaW5nW10+O1xuICBmcmVxdWVuY3k6IENoYXJ0R3JhbnVsYXJpdHkgfCBudWxsO1xufVxuXG4vLyBPbmUgcmVzb2x2ZWQgZmlsdGVyIHNlbnQgd2l0aCBhIGNvbXBvbmVudCdzIGRhdGEgcmVxdWVzdC5cbmV4cG9ydCBpbnRlcmZhY2UgUmVzb2x2ZWRGaWx0ZXJWYWx1ZSB7XG4gIGZpbHRlcklkOiBudW1iZXI7XG4gIHN0YXJ0Pzogc3RyaW5nO1xuICBlbmQ/OiBzdHJpbmc7XG4gIHZhbHVlcz86IHVua25vd25bXTtcbiAgdmFsdWU/OiBzdHJpbmc7XG4gIC8vIGRhdGVSYW5nZSBvbmx5OiB0aGUgcmVsYXRpdmUgcmFuZ2Ugc3RhcnQgYW5kIGVuZCBzdGlsbCBhcmUsIHNlbnQgb25seVxuICAvLyB3aGlsZSB0aGV5IGFyZSBleGFjdGx5IHRoYXQgcmFuZ2UgcmVzb2x2ZWQgdG9kYXkgaW4gdGhlIHJlcG9ydCdzIHpvbmUuIEl0XG4gIC8vIHRlbGxzIHRoZSBzZXJ2ZXIgd2hpY2ggcGVyaW9kIHRoZSBkYXlzIGNvdmVyIChvbiB0aGUgZmlyc3QgZGF5cyBvZiBhXG4gIC8vIHF1YXJ0ZXIsIHRoaXNNb250aCBhbmQgdGhpc1F1YXJ0ZXIgYXJlIHRoZSBzYW1lIGRheXMpLCBzbyBhIGNvbXBhcmlzb25cbiAgLy8gc2hpZnRzIGJ5IHRoZSByaWdodCB1bml0LiBzdGFydCBhbmQgZW5kIHN0YXkgdGhlIHdpbmRvdzsgYSBzZXJ2ZXIgdGhhdFxuICAvLyBkb2VzIG5vdCBrbm93IHRoZSBrZXkgaWdub3JlcyBpdC5cbiAgcHJlc2V0PzogUmVwb3J0UmVsYXRpdmVSYW5nZTtcbiAgLy8gc2VsZWN0OiB0aGUgdmFsdWVzIHRvIGxlYXZlIG91dCAoc2VudCBpbnN0ZWFkIG9mIHZhbHVlcykuXG4gIGV4Y2x1ZGVWYWx1ZXM/OiB1bmtub3duW107XG4gIC8vIG51bWJlclJhbmdlOiB0aGUgbG93IGFuZCBoaWdoIGVuZHM7IGFuIG9wZW4gZW5kIGlzIGxlZnQgb3V0LCAwIGlzIHNlbnQuXG4gIG1pbj86IG51bWJlcjtcbiAgbWF4PzogbnVtYmVyO1xufVxuXG4vLyBQZXItY29tcG9uZW50IGludGVyYWN0aW9uIHN0YXRlIHNlbnQgd2l0aCB0aGUgZGF0YSByZXF1ZXN0OiBsaXN0cyBzZW5kXG4vLyBzb3J0L3BhZ2luZyBhbmQgdGhlIHRleHQgaW4gdGhlaXIgc2VhcmNoIGJveDsgdGltZS1zZXJpZXMgY2hhcnRzIHNlbmQgdGhlXG4vLyBncmFpbiBwaWNrZWQgb24gdGhlIHJlcG9ydCdzIGdyb3VwLWJ5IGNvbnRyb2wsIHdoaWNoIG92ZXJyaWRlcyB0aGUgYXV0aG9yZWRcbi8vIGdyYW51bGFyaXR5IGZvciB0aGF0IHJlcXVlc3Qgb25seS4gVGhlIHdpcmUga2V5IHN0YXlzIGBmcmVxdWVuY3lgIOKAlCBpdCBpcyB0aGVcbi8vIGJ1Y2tldGluZyBmcmVxdWVuY3kgdGhlIHNlcnZlciBhcHBsaWVzLlxuZXhwb3J0IGludGVyZmFjZSBDb21wb25lbnREYXRhU3RhdGUge1xuICBzb3J0PzogUmVwb3J0U29ydDtcbiAgcGFnZT86IG51bWJlcjtcbiAgcGFnZVNpemU/OiBudW1iZXI7XG4gIGZyZXF1ZW5jeT86IENoYXJ0R3JhbnVsYXJpdHk7XG4gIC8vIEEgbGlzdCdzIHNlYXJjaCBib3ggdGV4dC4gVGhlIHNlcnZlciB0cmltcyBpdCwgY3V0cyBpdCB0byBpdHMgb3duIG1heGltdW1cbiAgLy8gbGVuZ3RoIGFuZCBtYXRjaGVzIGl0IGFnYWluc3QgZXZlcnkgdGV4dCBjb2x1bW4gdGhlIGxpc3Qgc2hvd3MuXG4gIHNlYXJjaD86IHN0cmluZztcbiAgLy8gVGhlIGNvbmZpZyBjb2x1bW4gbmFtZXMgYSB2aWV3ZXIgaGlkIG9uIGEgcGxhaW4gbGlzdC4gU2VudCB3aXRoIGEgQ1NWXG4gIC8vIGV4cG9ydCBvbmx5ICh0aGUgc2NyZWVuIGhpZGVzIHRoZW0gaXRzZWxmKTogdGhlIGZpbGUgbGVhdmVzIHRoZW0gb3V0LiBUaGVcbiAgLy8gc2VydmVyIGlnbm9yZXMgaXQgb24gYSBjcm9zcy10YWIsIGFuZCB3aGVuIGl0IHdvdWxkIGhpZGUgZXZlcnkgY29sdW1uLlxuICBoaWRkZW5Db2x1bW5zPzogc3RyaW5nW107XG4gIC8vIEEgY2hhcnQncyBkcmlsbCBwYXRoLCB0b3AgZmlyc3QuIFRoZSBkcmlsbGVkIGxldmVsIHdpbnMgb3ZlciBmcmVxdWVuY3lcbiAgLy8gZm9yIHRoaXMgdGlsZS5cbiAgZHJpbGw/OiBSZXBvcnREcmlsbFN0ZXBbXTtcbiAgLy8gV2hpbGUgbWF0Y2ggaXMgYW55OiB0aGUgZWxpZ2libGUgZ3JvdXBzIHRoYXQgaGF2ZSBhIHZhbHVlLlxuICBtYXRjaEFueUdyb3VwSWRzPzogbnVtYmVyW107XG4gIC8vIFNldCBvbmx5IG9uIGEgcmVxdWVzdCBzZW50IGJlY2F1c2UgdGhlIGNyb3NzLWZpbHRlciBjaGFuZ2VkLCBmb3IgYSB0aWxlXG4gIC8vIHdob3NlIGxhc3QgcmVhZCBhcHBsaWVkIG5vIGNyb3NzIGVudHJ5OiB0aGUgc2VydmVyIG1heSBhbnN3ZXJcbiAgLy8gdW5jaGFuZ2VkIGluc3RlYWQgb2YgcmVhZGluZyB0aGUgcm93cyBhZ2Fpbi4gRXhwb3J0cyBuZXZlciBzZXQgaXQuXG4gIHVuY2hhbmdlZElmVW5yZWFjaGVkPzogdHJ1ZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb21wb25lbnREYXRhIHtcbiAgY29sdW1uczogc3RyaW5nW107XG4gIHJvd3M6IFJlY29yZDxzdHJpbmcsIHVua25vd24+W107XG4gIHBhZ2luZz86IHsgdG90YWw6IG51bWJlcjsgcGFnZTogbnVtYmVyOyBwYWdlU2l6ZTogbnVtYmVyIH07XG4gIHRydW5jYXRlZDogYm9vbGVhbjtcbiAgLy8gVGhlIGVmZmVjdGl2ZSB0aW1lIGJ1Y2tldCB0aGUgcm93cyB3ZXJlIGdyb3VwZWQgaW50byAoYWZ0ZXIgYW55IGdyb3VwLWJ5XG4gIC8vIG92ZXJyaWRlKSwgb3IgbnVsbCBmb3IgYSBub24tdGltZSBheGlzLiBEcml2ZXMgdGhlIGNvbXBhY3QgeC1heGlzIGxhYmVscy5cbiAgZ3JhbnVsYXJpdHk/OiBDaGFydEdyYW51bGFyaXR5IHwgbnVsbDtcbiAgLy8gUGFnZSAxIG9mIGEgc2VhcmNoZWQgbGlzdCB3aG9zZSBzZWFyY2ggY291bGQgbm90IGFwcGx5ICh0aGUgbGlzdCBoYXMgbm9cbiAgLy8gdGV4dCBjb2x1bW4gdG8gc2VhcmNoKTogd2h5IHRoZSByb3dzIGFyZSBub3QgbmFycm93ZWQuIEFic2VudCBvdGhlcndpc2UuXG4gIHNlYXJjaE5vdGU/OiBzdHJpbmcgfCBudWxsO1xuICAvLyBQYWdlIDEgb2YgYSBsaXN0IHdpdGggY29uZmlnLnRvdGFscyBvbjogaXRzIHRvdGFscyByb3csIGFzIHJhdyB2YWx1ZXNcbiAgLy8ga2V5ZWQgbGlrZSB0aGUgY29sdW1ucyAoYSBwbGFpbiBsaXN0J3MgbWVhc3VyZSBhbGlhc2VzOyBhIGNyb3NzLXRhYidzXG4gIC8vIHBpdm90IGNlbGwgY29sdW1ucywgdGhlIHJvdy1rZXkgY29sdW1uIGFic2VudCksIG9yIG51bGwgd2l0aCB0b3RhbHNOb3RlXG4gIC8vIHNheWluZyB3aHkgdGhlcmUgaXMgbm9uZS4gQWJzZW50IG9uIGV2ZXJ5IG90aGVyIHBhZ2UgYW5kIGxpc3QuXG4gIHRvdGFscz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgbnVsbDtcbiAgdG90YWxzTm90ZT86IHN0cmluZyB8IG51bGw7XG4gIC8vIFRoZSB3aW5kb3cgb2YgZGF5cyB0aGUgY29tcG9uZW50IHJlYWRzLCB3aGVuIGl0cyBxdWVyeSBoYXMgYSB0aW1lZnJhbWUuXG4gIC8vIEFic2VudCBvdGhlcndpc2UsIGFuZCBmcm9tIG9sZGVyIHNlcnZlcnMuXG4gIHRpbWVmcmFtZT86IENvbXBvbmVudFRpbWVmcmFtZSB8IG51bGw7XG4gIC8vIFRoZSBjdXJyZW50IGFuZCBwcmlvciB3aW5kb3dzIG9mIGEgY29tcG9uZW50IHdob3NlIG1lYXN1cmVzIGNvbXBhcmVcbiAgLy8gYWdhaW5zdCBhbiBlYXJsaWVyIHBlcmlvZC4gQWJzZW50IHdoZW4gbm8gbWVhc3VyZSBjb21wYXJlcy4gU2VudCBvbiBldmVyeVxuICAvLyBsaXN0IHBhZ2UgYW5kIG9uIGNoYXJ0IGFuZCBLUEkgZGF0YS5cbiAgY29tcGFyaXNvbj86IENvbXBvbmVudENvbXBhcmlzb24gfCBudWxsO1xuICAvLyBXaGF0IGVhY2ggY29tcGFyZWQsIHdpbmRvd2VkLCByYW5rZWQgb3Igc2hhcmVkIG91dHB1dCBjb2x1bW4gaXMsIGJ5IGFsaWFzLlxuICAvLyBQbGFpbiBtZWFzdXJlIGNvbHVtbnMgYXJlIGxlZnQgb3V0LlxuICBvdXRwdXRzPzogUmVjb3JkPHN0cmluZywgT3V0cHV0TWV0YT47XG4gIC8vIEEgY3Jvc3MtdGFiIG9ubHk6IHRoZSBtZWFzdXJlIGFsaWFzIGVhY2ggcGl2b3QgY2VsbCBjb2x1bW4gaG9sZHMsIHNvIGFcbiAgLy8gY2VsbCB0YWtlcyBpdHMgbWVhc3VyZSdzIG91dHB1dCBtZWFuaW5nLiBOZXZlciBzZW50IGZvciBhIHNxbC1tb2RlIGxpc3QuXG4gIGNlbGxNZWFzdXJlcz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIC8vIEhvdyBlYWNoIHdpbmRvd2VkIG91dHB1dCBjb2x1bW4gKHJ1bm5pbmcsIHRvLWRhdGUgb3Igcm9sbGluZykgd2FzXG4gIC8vIGNvbXB1dGVkLCBieSBhbGlhcy5cbiAgd2luZG93cz86IFJlY29yZDxzdHJpbmcsIFdpbmRvd01ldGE+O1xuICAvLyBBIEtQSSB3aXRoIGEgY29tcGFyaXNvbiwgYSB0YXJnZXQgb3IgYSBzcGFya2xpbmU6IGV2ZXJ5IG51bWJlciB0aGUgY2FyZFxuICAvLyBzaG93cyBiZXNpZGUgaXRzIHZhbHVlLCBkZWNpZGVkIGJ5IHRoZSBzZXJ2ZXIuXG4gIGtwaT86IENvbXBvbmVudEtwaSB8IG51bGw7XG4gIC8vIFRoZSB0aW1lLWF4aXMgdmFsdWUgb2YgdGhlIGJ1Y2tldCBjb250YWluaW5nIHRvZGF5LCB3cml0dGVuIGFzIHRoZSByb3dzXG4gIC8vIHdyaXRlIGl0LCB3aGVuIHRoYXQgYnVja2V0IGlzIG5vdCBmaW5pc2hlZCB5ZXQ7IG51bGwgb3RoZXJ3aXNlLiBBIGNoYXJ0XG4gIC8vIG1hcmtzIGl0IGFzIHBhcnRpYWwuXG4gIHBhcnRpYWxQZXJpb2Q/OiBzdHJpbmcgfCBudWxsO1xuICAvLyBXaGljaCBmaWx0ZXJzIHRoZSByZWFkIGFwcGxpZWQuIEFic2VudCBmcm9tIG9sZGVyIHNlcnZlcnMuXG4gIGFwcGxpZWQ/OiBDb21wb25lbnREYXRhQXBwbGllZDtcbiAgLy8gQSBkcmlsbGFibGUgY2hhcnQncyBkcmlsbCBzdGF0ZS4gQWJzZW50IG9uIGV2ZXJ5IG90aGVyIHRpbGUgYW5kIGZyb21cbiAgLy8gb2xkZXIgc2VydmVycy5cbiAgZHJpbGw/OiBDb21wb25lbnREYXRhRHJpbGw7XG59XG5cbi8vIFdoZXJlIGEgY29tcG9uZW50J3MgdGltZWZyYW1lIHdpbmRvdyBjYW1lIGZyb206IGEgdmlld2VyIGRhdGVSYW5nZSBib3VuZCB0b1xuLy8gdGhlIHRpbWVmcmFtZSBjb2x1bW4gKHdoaWNoIHJlcGxhY2VzIHRoZSBhdXRob3JlZCByYW5nZSwgbmV2ZXIgbmFycm93c1xuLy8gaXQpLCB0aGUgYXV0aG9yZWQgcmVsYXRpdmUgcmFuZ2UsIHRoZSBhdXRob3JlZCBmaXhlZCBkYXlzLCBvciBub3RoaW5nIChhblxuLy8gb3BlbiB3aW5kb3cpLlxuZXhwb3J0IHR5cGUgVGltZWZyYW1lU291cmNlID0gJ2ZpbHRlcicgfCAncmFuZ2UnIHwgJ2ZpeGVkJyB8ICdub25lJztcblxuLy8gVGhlIHdpbmRvdyBhIGNvbXBvbmVudCdzIHRpbWVmcmFtZSByZXNvbHZlZCB0by4gc3RhcnQgYW5kIGVuZCBhcmVcbi8vIGluY2x1c2l2ZSAneXl5eS1NTS1kZCcgZGF5cyBpbiB0aGUgcmVwb3J0J3Mgem9uZSwgd3JpdHRlbiB3aXRob3V0IGEgem9uZS5cbi8vIHRocm91Z2ggaXMgdGhlIFVUQyAneXl5eS1NTS1kZCBISDptbTpzcycgaW5zdGFudCBhIHdpbmRvdyBvbiBhIGRhdGV0aW1lXG4vLyBjb2x1bW4gaXMgY3V0IGF0OyBpdCByZWFkcyBhcyBhIHRpbWUgaW4gdGhlIHJlcG9ydCB6b25lLiBJdCBpcyBzZXQgb25seSB3aGVuXG4vLyBhIGNvbXBhcmlzb24gY3V0cyBhIHdpbmRvdyB0aGF0IGVuZHMgdG9kYXk6IGEgdGltZWZyYW1lIG9uIGl0cyBvd24gcmVhZHNcbi8vIHdob2xlIGRheXMsIHNvIGEgd2luZG93IGVuZGluZyB0b2RheSB3aXRob3V0IGEgY29tcGFyaXNvbiBzZW5kcyBudWxsLlxuZXhwb3J0IGludGVyZmFjZSBDb21wb25lbnRUaW1lZnJhbWUge1xuICBjb2x1bW46IHN0cmluZztcbiAgc3RhcnQ6IHN0cmluZyB8IG51bGw7XG4gIGVuZDogc3RyaW5nIHwgbnVsbDtcbiAgdGhyb3VnaDogc3RyaW5nIHwgbnVsbDtcbiAgcmFuZ2U6IFJlcG9ydFJlbGF0aXZlUmFuZ2UgfCBudWxsO1xuICBzb3VyY2U6IFRpbWVmcmFtZVNvdXJjZTtcbn1cblxuLy8gSG93IGEgY29tcGFyaXNvbiBpcyBsYWlkIG91dDogb25lIHZhbHVlIHBlciB3aW5kb3cgKHJhbmdlKSwgYSBwcmlvciBzZXJpZXNcbi8vIGJlc2lkZSBhIHRpbWUgYXhpcyAoc2VyaWVzKSwgb3IgZWFjaCBwZXJpb2QncyB2YWx1ZSByZWFkIGF0IGl0cyBlbmQsIHNldFxuLy8gYWdhaW5zdCB0aGUgdmFsdWUgYXQgdGhlIGVuZCBvZiBhbiBlYXJsaWVyIHBlcmlvZCAocGVyaW9kX2VuZCkuXG5leHBvcnQgdHlwZSBDb21wYXJpc29uTW9kZSA9ICdyYW5nZScgfCAnc2VyaWVzJyB8ICdwZXJpb2RfZW5kJztcblxuLy8gdG9fZGF0ZSBjb21wYXJlcyBsaWtlIHdpdGggbGlrZSAodGhlIGZpcnN0IDIgZGF5cyBvZiBhIG1vbnRoIGFnYWluc3QgdGhlXG4vLyBmaXJzdCAyIGRheXMgb2YgdGhlIG9uZSBiZWZvcmUpOyBmdWxsIGNvbXBhcmVzIHdob2xlIHBlcmlvZHMuXG5leHBvcnQgdHlwZSBDb21wYXJpc29uQWxpZ24gPSAndG9fZGF0ZScgfCAnZnVsbCc7XG5cbi8vIFdoYXQgYSBtZWFzdXJlIGlzIGNvbXBhcmVkIGFnYWluc3QuIE1pcnJvcnMgdGhlIHNlcnZlcidzXG4vLyBDb21wYXJpc29uQWdhaW5zdEVudW0gdmFsdWUgZm9yIHZhbHVlLlxuZXhwb3J0IHR5cGUgQ29tcGFyaXNvbkFnYWluc3QgPVxuICB8ICdwcmV2aW91c19wZXJpb2QnXG4gIHwgJ3ByZXZpb3VzX3dlZWsnXG4gIHwgJ3ByZXZpb3VzX21vbnRoJ1xuICB8ICdwcmV2aW91c19xdWFydGVyJ1xuICB8ICdwcmV2aW91c195ZWFyJ1xuICB8ICdyYW5nZSc7XG5cbi8vIFdoeSBhIGNvbXBhcmlzb24gcmVhZHMgYXMgaXQgZG9lcy4gVGhlIHNlcnZlciBzZW5kcyBjb2RlcywgbmV2ZXJcbi8vIHNlbnRlbmNlczsgdGhlIHZpZXdlciB3b3JkcyB0aGVtLlxuLy8gLSBub193aW5kb3c6IG5vIGRhdGUgcmFuZ2UgdG8gY29tcGFyZSB5ZXQ7XG4vLyAtIHVuaXRfaW5mZXJyZWQ6IHRoZSBwZXJpb2QgdW5pdCB3YXMgaW5mZXJyZWQgZnJvbSB0aGUgZGF5cywgbm90IG5hbWVkO1xuLy8gLSB3aW5kb3dfaW5fZnV0dXJlOiB0aGUgd2luZG93IHN0YXJ0cyBhZnRlciB0b2RheTtcbi8vIC0gb3RoZXJfZGF0ZV9maWx0ZXI6IGEgZGF0ZSBmaWx0ZXIgb24gYW5vdGhlciBjb2x1bW4gYWxzbyBhcHBsaWVzO1xuLy8gLSBncmFpbl9mb2xsb3dlZDogdGhlIHByaW9yIGZvbGxvd3MgdGhlIGdyb3VwLWJ5IGdyYWluIHBpY2tlZCBvbiB0aGUgcmVwb3J0LlxuZXhwb3J0IHR5cGUgQ29tcGFyaXNvbk5vdGVDb2RlID1cbiAgfCAnbm9fd2luZG93J1xuICB8ICd1bml0X2luZmVycmVkJ1xuICB8ICd3aW5kb3dfaW5fZnV0dXJlJ1xuICB8ICdvdGhlcl9kYXRlX2ZpbHRlcidcbiAgfCAnZ3JhaW5fZm9sbG93ZWQnO1xuXG4vLyBPbmUgY29tcGFyaXNvbiB3aW5kb3c6IGluY2x1c2l2ZSAneXl5eS1NTS1kZCcgZGF5cyBpbiB0aGUgcmVwb3J0J3Mgem9uZSxcbi8vIGFuZCB0aGUgVVRDIGluc3RhbnQgaXQgaXMgY3V0IGF0IHdoZW4gaXQgZW5kcyB0b2RheSBvbiBhIGRhdGV0aW1lIGNvbHVtbi5cbi8vIEluIHNlcmllcyBtb2RlIGl0IGlzIHRoZSBzcGFuIHRoZSBjaGFydCBzaG93cy5cbmV4cG9ydCBpbnRlcmZhY2UgQ29tcGFyaXNvbldpbmRvdyB7XG4gIHN0YXJ0OiBzdHJpbmc7XG4gIGVuZDogc3RyaW5nO1xuICB0aHJvdWdoOiBzdHJpbmcgfCBudWxsO1xufVxuXG4vLyBIb3cgZmFyIGJhY2sgb25lIHByaW9yIGxhbmUgc2l0cy4gQSBjdXN0b20gcmFuZ2UgaGFzIG5vIHVuaXQgb3IgY291bnQsIGFuZFxuLy8gbmVpdGhlciBkb2VzIHByZXZpb3VzX3BlcmlvZCB3aGVuIHRoZXJlIGlzIG5vIGN1cnJlbnQgd2luZG93IHRvIG1lYXN1cmVcbi8vIChub193aW5kb3csIHdpbmRvd19pbl9mdXR1cmUpOyBhIHNoaWZ0IGJ5IHRoZSB3aW5kb3cncyBsZW5ndGggaXMgdW5pdCBkYXlcbi8vIHdpdGggdGhlIGxlbmd0aCBhcyB0aGUgY291bnQ7IGEgcHJldmlvdXMgeWVhciBpcyAzNjQgZGF5cyBvbiBhIGRheSBheGlzIGFuZFxuLy8gNTIgd2Vla3Mgb24gYSB3ZWVrIGF4aXMuXG5leHBvcnQgaW50ZXJmYWNlIENvbXBhcmlzb25PZmZzZXQge1xuICBhZ2FpbnN0OiBDb21wYXJpc29uQWdhaW5zdDtcbiAgdW5pdDogQ2hhcnRHcmFudWxhcml0eSB8IG51bGw7XG4gIGNvdW50OiBudW1iZXIgfCBudWxsO1xufVxuXG4vLyBBIGNvbXBvbmVudCdzIGNvbXBhcmlzb246IHRoZSB6b25lIGl0cyBkYXlzIGFyZSBpbiwgdGhlIGN1cnJlbnQgd2luZG93XG4vLyAobnVsbCB3aGVuIHRoZXJlIGlzIG5vIHdpbmRvdyB0byBjb21wYXJlIHlldCwgb3Igd2hlbiBhIHRpbWUgYXhpcyBydW5zXG4vLyBvdmVyIGFsbCB0aGUgZGF0YSwgd2hpY2ggaGFzIG5vIGZpcnN0IGRheSB0byBuYW1lKSBhbmQgdXAgdG8gMiBwcmlvclxuLy8gbGFuZXM6IG9mZnNldHNbaV0gZGVzY3JpYmVzIGxhbmUgaSArIDEsIGFuZCBwcmlvcnNbaV0gaXRzIHdpbmRvdy4gV2l0aCBub1xuLy8gY3VycmVudCB3aW5kb3cgcHJpb3JzIGlzIGVtcHR5LCB3aGlsZSBvZmZzZXRzIHN0aWxsIG5hbWVzIGV2ZXJ5IGxhbmUuXG4vLyBmbG9vciBpcyB0aGUgJ3l5eXktTU0tZGQnIGRheSBvZiB0aGUgZmlyc3Qgcm93IHRoZSBxdWVyeSdzIG93biBjb25kaXRpb25zXG4vLyBrZWVwICh2aWV3ZXIgZmlsdGVycyBhc2lkZSk6IGEgcHJpb3Igd2luZG93IHdob2xseSBiZWZvcmUgaXQgaGFzIG5vIGRhdGFcbi8vIHJhdGhlciB0aGFuIGEgemVyby5cbmV4cG9ydCBpbnRlcmZhY2UgQ29tcG9uZW50Q29tcGFyaXNvbiB7XG4gIG1vZGU6IENvbXBhcmlzb25Nb2RlO1xuICB0aW1lem9uZTogc3RyaW5nO1xuICBhbGlnbjogQ29tcGFyaXNvbkFsaWduO1xuICBjdXJyZW50OiBDb21wYXJpc29uV2luZG93IHwgbnVsbDtcbiAgcHJpb3JzOiBDb21wYXJpc29uV2luZG93W107XG4gIG9mZnNldHM6IENvbXBhcmlzb25PZmZzZXRbXTtcbiAgZmxvb3I6IHN0cmluZyB8IG51bGw7XG4gIG5vdGVzOiBDb21wYXJpc29uTm90ZUNvZGVbXTtcbn1cblxuLy8gV2hhdCBhbiBvdXRwdXQgY29sdW1uIGhvbGRzOiBhIG1lYXN1cmUncyB2YWx1ZSwgaXRzIHJhbmsgb3IgaXRzIHNoYXJlLlxuZXhwb3J0IHR5cGUgT3V0cHV0S2luZCA9ICd2YWx1ZScgfCAncmFuaycgfCAnc2hhcmUnO1xuXG4vLyBXaGljaCBzaWRlIG9mIGEgY29tcGFyaXNvbiBhbiBvdXRwdXQgY29sdW1uIGlzOiB0aGUgY3VycmVudCB2YWx1ZSwgdGhlXG4vLyBwcmlvciBvbmUsIHRoZWlyIGRpZmZlcmVuY2UsIG9yIHRoZSBkaWZmZXJlbmNlIGFzIGEgMC0xIGZyYWN0aW9uIG9mIHRoZVxuLy8gcHJpb3IuIG51bGwgZm9yIGFuIG91dHB1dCB0aGF0IGlzIG5vdCBjb21wYXJlZC5cbmV4cG9ydCB0eXBlIE91dHB1dFJvbGUgPSAnY3VycmVudCcgfCAncHJpb3InIHwgJ2NoYW5nZScgfCAncGVyY2VudF9jaGFuZ2UnO1xuXG4vLyBIb3cgdGllZCB2YWx1ZXMgcmFuazogMSwgMSwgMyAoY29tcGV0aXRpb24pIG9yIDEsIDEsIDIgKGRlbnNlKS5cbmV4cG9ydCB0eXBlIE91dHB1dFJhbmtNZXRob2QgPSAnY29tcGV0aXRpb24nIHwgJ2RlbnNlJztcblxuLy8gQSByYW5rIG91dHB1dDogaG93IHRpZXMgcmFuaywgd2hpY2ggZW5kIHJhbmtzIDEgKGRlc2M6IHRoZSBsYXJnZXN0KSwgYW5kXG4vLyB0aGUgZGltZW5zaW9uIG91dHB1dHMgaXQgcmVzdGFydHMgd2l0aGluIChub25lOiB0aGUgd2hvbGUgcmVzdWx0KS5cbmV4cG9ydCBpbnRlcmZhY2UgT3V0cHV0UmFuayB7XG4gIG1ldGhvZDogT3V0cHV0UmFua01ldGhvZDtcbiAgZGlyZWN0aW9uOiAnYXNjJyB8ICdkZXNjJztcbiAgd2l0aGluOiBzdHJpbmdbXTtcbn1cblxuLy8gQSBzaGFyZSBvdXRwdXQ6IHRoZSBkaW1lbnNpb24gb3V0cHV0cyB3aG9zZSB0b3RhbCBpdCBpcyBhIHNoYXJlIG9mIChub25lOlxuLy8gdGhlIHdob2xlIHJlc3VsdCkuXG5leHBvcnQgaW50ZXJmYWNlIE91dHB1dFNoYXJlIHtcbiAgd2l0aGluOiBzdHJpbmdbXTtcbn1cblxuLy8gVGhlIG1lYW5pbmcgb2Ygb25lIGNvbXBhcmVkLCB3aW5kb3dlZCwgcmFua2VkIG9yIHNoYXJlZCBvdXRwdXQgY29sdW1uLlxuLy8gbWVhc3VyZSBpcyB0aGUgc291cmNlIG1lYXN1cmUncyBhbGlhcywgd2hvc2UgZm9ybWF0IHRoZSBjb2x1bW4gaW5oZXJpdHM7XG4vLyBvZmZzZXQgaXMgdGhlIHByaW9yIGxhbmUgYSBwcmlvciwgY2hhbmdlIG9yIHBlcmNlbnQgY2hhbmdlIGJlbG9uZ3MgdG8gKGl0c1xuLy8gd2luZG93IGlzIGNvbXBhcmlzb24ucHJpb3JzW29mZnNldCAtIDFdKS4gVW5sZXNzIHRoZSBjb25maWcgZm9ybWF0cyBpdCwgYVxuLy8gc2hhcmUgcHJpbnRzIGFzIGEgcGVyY2VudCB0byAxIGRlY2ltYWwgYW5kIGEgcmFuayBhcyBhIHdob2xlIG51bWJlci5cbmV4cG9ydCBpbnRlcmZhY2UgT3V0cHV0TWV0YSB7XG4gIG1lYXN1cmU6IHN0cmluZztcbiAga2luZDogT3V0cHV0S2luZDtcbiAgcm9sZTogT3V0cHV0Um9sZSB8IG51bGw7XG4gIG9mZnNldDogbnVtYmVyIHwgbnVsbDtcbiAgd2luZG93OiBib29sZWFuO1xuICByYW5rOiBPdXRwdXRSYW5rIHwgbnVsbDtcbiAgc2hhcmU6IE91dHB1dFNoYXJlIHwgbnVsbDtcbn1cblxuLy8gQSB3aW5kb3cgb3ZlciB0aGUgcm93czogYSBydW5uaW5nIHRvdGFsLCBhIHRvdGFsIHRvIGRhdGUgd2l0aGluIGVhY2hcbi8vIHBlcmlvZCAobW9udGggdG8gZGF0ZSksIG9yIGEgcm9sbGluZyBzcGFuIG9mIHBlcmlvZHMuXG5leHBvcnQgdHlwZSBXaW5kb3dLaW5kID0gJ3J1bm5pbmcnIHwgJ3RvX2RhdGUnIHwgJ3JvbGxpbmcnO1xuXG4vLyBXaHkgYSB3aW5kb3cgcmVhZHMgYXMgaXQgZG9lcy4gQ29kZXMgb25seTsgdGhlIHZpZXdlciB3b3JkcyB0aGVtLlxuZXhwb3J0IHR5cGUgV2luZG93Tm90ZUNvZGUgPVxuICB8ICdzbmFwcGVkX3N0YXJ0J1xuICB8ICdzcGFuX2NvbnZlcnRlZCdcbiAgfCAnZ3JhaW5fdG9vX2NvYXJzZSdcbiAgfCAnZXF1YWxfZ3JhaW5fcGxhaW4nXG4gIHwgJ293bl9maWx0ZXJfY2Fwc19sZWFkX2luJ1xuICB8ICd3ZWVrX2J5X21vbmRheSdcbiAgfCAnaW5jb21wbGV0ZV9oZWFkJztcblxuLy8gSG93IG9uZSB3aW5kb3dlZCBvdXRwdXQgY29sdW1uIHdhcyBjb21wdXRlZC4gcGVyaW9kcyBhbmQgdW5pdCBzaXplIGFcbi8vIHJvbGxpbmcgd2luZG93IChkcmF3blBlcmlvZHMgaXMgdGhhdCBzcGFuIGNvdW50ZWQgaW4gdGhlIGdyYWluIHRoZSByb3dzXG4vLyBhcmUgZHJhd24gYXQpOyByZXNldEV2ZXJ5IHJlc3RhcnRzIGEgdG8tZGF0ZSB3aW5kb3c7IGF2ZXJhZ2UgbWFrZXMgdGhlXG4vLyB3aW5kb3cgYW4gYXZlcmFnZSByYXRoZXIgdGhhbiBhIHRvdGFsOyBmcm9tQmVnaW5uaW5nXG4vLyBydW5zIGEgdG90YWwgZnJvbSB0aGUgZmlyc3Qgcm93IGV2ZXIgcmF0aGVyIHRoYW4gZnJvbSB0aGUgZmlyc3Qgcm93IHNob3duLlxuLy8gc3RhcnQsIGVuZCBhbmQgbGVhZEluIGFyZSAneXl5eS1NTS1kZCcgcmVwb3J0LXpvbmUgZGF5czogdGhlIHJvd3Mgc2hvd24sXG4vLyBhbmQgdGhlIGVhcmxpZXIgZGF5IHRoZSB3aW5kb3cgcmVhZHMgZnJvbSBzbyBpdHMgZmlyc3Qgcm93cyBhcmUgd2hvbGUuXG4vLyBkZXNjcmlwdGlvbiBpcyB0aGUgc2VydmVyJ3MgRW5nbGlzaCBmb3IgdGhlIGFnZW50IGFuZCB0aGUgZXhwb3J0czsgdGhlXG4vLyB2aWV3ZXIgY29tcG9zZXMgaXRzIG93biB3b3JkcyBmcm9tIHRoZSBmaWVsZHMuXG5leHBvcnQgaW50ZXJmYWNlIFdpbmRvd01ldGEge1xuICBraW5kOiBXaW5kb3dLaW5kO1xuICBwZXJpb2RzOiBudW1iZXIgfCBudWxsO1xuICB1bml0OiBDaGFydEdyYW51bGFyaXR5IHwgbnVsbDtcbiAgZHJhd25QZXJpb2RzOiBudW1iZXIgfCBudWxsO1xuICByZXNldEV2ZXJ5OiBDaGFydEdyYW51bGFyaXR5IHwgbnVsbDtcbiAgYXZlcmFnZTogYm9vbGVhbjtcbiAgZnJvbUJlZ2lubmluZzogYm9vbGVhbjtcbiAgZGF0ZUNvbHVtbjogc3RyaW5nIHwgbnVsbDtcbiAgc3RhcnQ6IHN0cmluZyB8IG51bGw7XG4gIGVuZDogc3RyaW5nIHwgbnVsbDtcbiAgbGVhZEluOiBzdHJpbmcgfCBudWxsO1xuICBub3RlczogV2luZG93Tm90ZUNvZGVbXTtcbiAgZGVzY3JpcHRpb246IHN0cmluZztcbn1cblxuLy8gV2hpY2ggZGVsdGEgYSBLUEkgY2FyZCBzaG93czogdGhlIGRpZmZlcmVuY2UsIG9yIHRoZSBwZXJjZW50IGNoYW5nZS5cbmV4cG9ydCB0eXBlIEtwaURlbHRhU2hvdyA9ICdjaGFuZ2UnIHwgJ3BlcmNlbnRfY2hhbmdlJztcblxuLy8gV2h5IGEgS1BJJ3MgZGVsdGEgcmVhZHMgYXMgaXQgZG9lczpcbi8vIC0gbm9fcHJpb3JfZGF0YTogdGhlIHByaW9yIHdpbmRvdyBoYXMgbm8gdmFsdWU7XG4vLyAtIHVwX2Zyb21femVybzogdGhlIHByaW9yIHdhcyAwLCBzbyB0aGVyZSBpcyBubyBwZXJjZW50IGNoYW5nZTtcbi8vIC0gbm9fY2hhbmdlOiBib3RoIGFyZSAwO1xuLy8gLSBub19kYXRhX2VpdGhlcjogbmVpdGhlciB3aW5kb3cgaGFzIGEgdmFsdWU7XG4vLyAtIHNpZ25fY2hhbmdlOiB0aGUgdmFsdWUgY3Jvc3NlZCB6ZXJvLCBzbyB0aGVyZSBpcyBubyBwZXJjZW50IGNoYW5nZS5cbmV4cG9ydCB0eXBlIEtwaU5vdGVDb2RlID1cbiAgfCAnbm9fcHJpb3JfZGF0YSdcbiAgfCAndXBfZnJvbV96ZXJvJ1xuICB8ICdub19jaGFuZ2UnXG4gIHwgJ25vX2RhdGFfZWl0aGVyJ1xuICB8ICdzaWduX2NoYW5nZSc7XG5cbi8vIEEgS1BJJ3MgcHJvZ3Jlc3MgdG93YXJkIGl0cyBjb25maWd1cmVkIHRhcmdldC4gcHJvZ3Jlc3MgaXMgdmFsdWUgLyB0YXJnZXRcbi8vIChudWxsIHdoZW4gdGhlIHRhcmdldCBpcyAwKTsgbWV0IGZvbGxvd3MgdGhlIGNvbmZpZydzIGluY3JlYXNlSXMgKG51bGxcbi8vIHdoZW4gaXQgaXMgbmV1dHJhbCkuXG5leHBvcnQgaW50ZXJmYWNlIENvbXBvbmVudEtwaVRhcmdldCB7XG4gIHZhbHVlOiBudW1iZXI7XG4gIGxhYmVsOiBzdHJpbmcgfCBudWxsO1xuICBwcm9ncmVzczogbnVtYmVyIHwgbnVsbDtcbiAgbWV0OiBib29sZWFuIHwgbnVsbDtcbn1cblxuLy8gT25lIHNwYXJrbGluZSBwb2ludDogdGhlIHBlcmlvZCwgd3JpdHRlbiBhcyBhIHRpbWUtYXhpcyB2YWx1ZSwgYW5kIHRoZVxuLy8gdmFsdWUgaW4gaXQgKG51bGwgd2hlbiBhIG5vbi1hZGRpdGl2ZSBtZWFzdXJlIGhhcyBubyByb3dzIHRoZXJlKS5cbmV4cG9ydCBpbnRlcmZhY2UgQ29tcG9uZW50S3BpU3BhcmtsaW5lUG9pbnQge1xuICBwZXJpb2Q6IHN0cmluZztcbiAgdmFsdWU6IG51bWJlciB8IG51bGw7XG59XG5cbi8vIEEgS1BJJ3Mgc3BhcmtsaW5lIHBvaW50cywgb2xkZXN0IGZpcnN0LiBwYXJ0aWFsIHNheXMgdGhlIGxhc3QgcGVyaW9kIGlzXG4vLyBub3QgZmluaXNoZWQgeWV0LlxuZXhwb3J0IGludGVyZmFjZSBDb21wb25lbnRLcGlTcGFya2xpbmUge1xuICBncmFudWxhcml0eTogQ2hhcnRHcmFudWxhcml0eTtcbiAgcGFydGlhbDogYm9vbGVhbjtcbiAgcG9pbnRzOiBDb21wb25lbnRLcGlTcGFya2xpbmVQb2ludFtdO1xufVxuXG4vLyBFdmVyeSBudW1iZXIgYSBLUEkgY2FyZCBzaG93cyBiZXNpZGUgaXRzIHZhbHVlLiBzaG93IG5hbWVzIHRoZSBkZWx0YSB0b1xuLy8gcHJpbnQsIGRlY2lkZWQgYnkgdGhlIHNlcnZlci4gV2hlbiB2YWx1ZSBpcyBudWxsIHRoZSBjYXJkIHNob3dzIGEgZGFzaCBhbmRcbi8vIG5vIGNvbXBhcmlzb24uXG5leHBvcnQgaW50ZXJmYWNlIENvbXBvbmVudEtwaSB7XG4gIHZhbHVlOiBudW1iZXIgfCBudWxsO1xuICBwcmlvcjogbnVtYmVyIHwgbnVsbDtcbiAgY2hhbmdlOiBudW1iZXIgfCBudWxsO1xuICBwZXJjZW50Q2hhbmdlOiBudW1iZXIgfCBudWxsO1xuICBzaG93OiBLcGlEZWx0YVNob3c7XG4gIG5vdGU6IEtwaU5vdGVDb2RlIHwgbnVsbDtcbiAgdGFyZ2V0OiBDb21wb25lbnRLcGlUYXJnZXQgfCBudWxsO1xuICBzcGFya2xpbmU6IENvbXBvbmVudEtwaVNwYXJrbGluZSB8IG51bGw7XG59XG5cbi8vIEEgY29tcG9uZW50J3MgQ1NWIGV4cG9ydDogdGhlIHByZXNpZ25lZCBkb3dubG9hZCBVUkwsIHBsdXMgb25lIHNlbnRlbmNlIHBlclxuLy8gd2F5IHRoZSBmaWxlIGZhbGxzIHNob3J0IG9mIHRoZSBmdWxsIHJlc3VsdCAoY3V0IGF0IHRoZSBleHBvcnQgY2VpbGluZywgb3Jcbi8vIGN1dCBhcyB0aGUgY2hhcnQgaXRzZWxmIGlzKS4gRW1wdHkgd2hlbiB0aGUgZmlsZSBpcyBjb21wbGV0ZS4gT3B0aW9uYWxcbi8vIGJlY2F1c2UgYSBzZXJ2ZXIgb24gYW4gb2xkZXIgZnJhbWV3b3JrIGFuc3dlcnMgd2l0aCB0aGUgdXJsIGFsb25lLlxuZXhwb3J0IGludGVyZmFjZSBDb21wb25lbnRFeHBvcnRSZXNwb25zZSB7XG4gIHVybDogc3RyaW5nO1xuICBub3Rlcz86IHN0cmluZ1tdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlcG9ydExpc3RJdGVtIHtcbiAgaWQ6IG51bWJlcjtcbiAgbmFtZTogc3RyaW5nO1xuICBtb2RpZnlEYXRlOiBzdHJpbmc7XG4gIHN0YXRlPzogUmVwb3J0U3RhdGU7XG4gIC8vIFRoZSBmb2xkZXIgdGhlIHJlcG9ydCBpcyBmaWxlZCB1bmRlci4gbnVsbCBpcyBhIHJlYWwsIGNvbW1vbiB2YWx1ZSDigJQgdGhlXG4gIC8vIHJlcG9ydCBzaXRzIGF0IHRoZSByb290IG9mIHRoZSBsaXN0aW5nIHRyZWUgYWxvbmdzaWRlIHRoZSBmb2xkZXJzLlxuICAvL1xuICAvLyBPcHRpb25hbCBsaWtlIGBzdGF0ZWAgYmVzaWRlIGl0OiB0aGUgYmFja2VuZCBhbHdheXMgc2VuZHMgaXQsIGJ1dCBtYWtpbmcgaXRcbiAgLy8gcmVxdWlyZWQgaXMgYSBicmVha2luZyB0eXBlIGNoYW5nZSBmb3IgZXZlcnkgY29uc3VtZXIgaG9sZGluZyBhXG4gIC8vIFJlcG9ydExpc3RJdGVtIGxpdGVyYWwgKGZpeHR1cmVzLCBtb2NrcykgYW5kIGJ1eXMgbm90aGluZyDigJQgdGhlIGxpc3RpbmdcbiAgLy8gcmVhZHMgaXQgYXMgYD8/IG51bGxgIGVpdGhlciB3YXkuXG4gIHJlcG9ydEZvbGRlcklkPzogbnVtYmVyIHwgbnVsbDtcbn1cblxuLy8gT25lIGZvbGRlciBpbiB0aGUgbGlzdGluZyB0cmVlIOKAlCBhbiBhdWRpZW5jZSBidWNrZXQgKFwiTWFuYWdlbWVudFwiLFxuLy8gXCJPcGVyYXRpb25zXCIpIHJlcG9ydHMgYXJlIGZpbGVkIGludG8uIEZvbGRlcnMgbmVzdCB2aWEgcGFyZW50UmVwb3J0Rm9sZGVySWQ7XG4vLyByZXBvcnRzIG5ldmVyIGRvLCBzbyB0aGUgdHJlZSdzIG9ubHkgYnJhbmNoIG5vZGVzIGFyZSBmb2xkZXJzLlxuLy9cbi8vIGBzdGF0ZWAgaXMgdGhlIGZvbGRlcidzIE9XTiBzdGF0ZS4gRGVsZXRpbmcgYSBmb2xkZXIgd3JpdGVzIG9ubHkgdGhhdCwgYW5kXG4vLyBldmVyeXRoaW5nIGJlbG93IGl0IGNvdW50cyBhcyBkZWxldGVkIGJ5IHBvc2l0aW9uIOKAlCBzZWUgUmVwb3J0Tm9kZS5kZWxldGVkLlxuZXhwb3J0IGludGVyZmFjZSBSZXBvcnRGb2xkZXIge1xuICBpZDogbnVtYmVyO1xuICBuYW1lOiBzdHJpbmc7XG4gIHBhcmVudFJlcG9ydEZvbGRlcklkOiBudW1iZXIgfCBudWxsO1xuICBzdGF0ZT86IFJlcG9ydFN0YXRlO1xufVxuXG4vLyBHRVQgL2FwaS9yZXBvcnRzIHJldHVybnMgYm90aCBoYWx2ZXMgZmxhdDsgdGhlIGxpc3RpbmcgbmVzdHMgdGhlbSBpdHNlbGYuXG5leHBvcnQgaW50ZXJmYWNlIFJlcG9ydFRyZWUge1xuICByZXBvcnRzOiBSZXBvcnRMaXN0SXRlbVtdO1xuICBmb2xkZXJzOiBSZXBvcnRGb2xkZXJbXTtcbn1cblxuZXhwb3J0IGVudW0gUmVwb3J0Tm9kZVR5cGUge1xuICBGb2xkZXIgPSAnZm9sZGVyJyxcbiAgUmVwb3J0ID0gJ3JlcG9ydCcsXG59XG5cbi8vIE9uZSBub2RlIGFzIGZzLXRyZWUgc2VlcyBpdC4gRm9sZGVycyBhbmQgcmVwb3J0cyBzaGFyZSBvbmUgaWQgc3BhY2UgaW4gdGhlXG4vLyB2aWV3LCBzbyB0aGUgaWRzIGFyZSBwcmVmaXhlZCAoJ2Y6MTInIC8gJ3I6MzQnKSDigJQgYGlkYCBpcyB0aGUgb3JpZ2luYWwsXG4vLyBwZXItdGFibGUgaWQgdGhhdCB0aGUgQVBJIGVuZHBvaW50cyB0YWtlLlxuZXhwb3J0IGludGVyZmFjZSBSZXBvcnROb2RlIHtcbiAga2V5OiBzdHJpbmc7XG4gIGlkOiBudW1iZXI7XG4gIG5hbWU6IHN0cmluZztcbiAgdHlwZTogUmVwb3J0Tm9kZVR5cGU7XG4gIC8vIE9ubHkgZXZlciBwb3B1bGF0ZWQgb24gYSBmb2xkZXI7IGEgcmVwb3J0IGlzIGFsd2F5cyBhIGxlYWYuXG4gIGNoaWxkcmVuOiBSZXBvcnROb2RlW107XG4gIC8vIFByZXNlbnQgb24gcmVwb3J0IG5vZGVzIG9ubHkuXG4gIHJlcG9ydD86IFJlcG9ydExpc3RJdGVtO1xuICAvLyBUaGUgbm9kZSdzIG93biByb3cgaXMgZGVsZXRlZC4gV2hhdCBlYXJucyB0aGUgXCJEZWxldGVkXCIgY2hpcCDigJQgdGhpcyBpc1xuICAvLyB3aGF0IHNvbWVib2R5IGFjdHVhbGx5IGRlbGV0ZWQuXG4gIHN0YXRlRGVsZXRlZDogYm9vbGVhbjtcbiAgLy8gRGVsZXRlZCBpdHNlbGYgT1IgYW55d2hlcmUgYmVsb3cgYSBkZWxldGVkIGZvbGRlci4gT25seSBldmVyIHRydWUgaW4gU2hvd1xuICAvLyBEZWxldGVkIG1vZGUgKHRoZSBkZWZhdWx0IGxpc3RpbmcgbmV2ZXIgcmV0dXJucyBzdWNoIGEgbm9kZSksIGFuZCBpdCBpcyB3aGF0XG4gIC8vIHN3YXBzIHRoZSByb3cncyBhY3Rpb25zIGZvciBSZXN0b3JlLlxuICBkZWxldGVkOiBib29sZWFuO1xufVxuXG4vLyBSZXBvcnRzIGFuZCBmb2xkZXJzIGFyZSBib3RoIHNvZnQtZGVsZXRhYmxlLiBBIGRlbGV0ZWQgcmVwb3J0IGtlZXBzIGl0cyBwYWdlc1xuLy8gYW5kIGNvbXBvbmVudHM7IGEgZGVsZXRlZCBmb2xkZXIga2VlcHMgZXZlcnl0aGluZyBmaWxlZCB1bmRlciBpdCwgd2hpY2ggbGVhdmVzXG4vLyB0aGUgbGlzdGluZyB3aXRoIGl0IGFuZCBjb21lcyBiYWNrIHdpdGggaXQuIFwiU2hvdyBEZWxldGVkXCIgc2hvd3MgdGhlIHdob2xlXG4vLyB0cmVlLCBsaXZlIGFuZCBkZWxldGVkIHRvZ2V0aGVyLCBzbyBhbnkgb2YgaXQgY2FuIGJlIHJlc3RvcmVkIGluIHBsYWNlLlxuZXhwb3J0IGVudW0gUmVwb3J0U3RhdGUge1xuICBBY3RpdmUgPSAnYWN0aXZlJyxcbiAgRGVsZXRlZCA9ICdkZWxldGVkJyxcbn1cblxuLy8gVGhlIGNoYXQgdHVybiBmbGFncyB0aGlzIGNvbnRleHQncyBiYWNrZW5kIGFkZHMgKFJlcG9ydHNcXEFpVmlldykuXG5leHBvcnQgaW50ZXJmYWNlIFJlcG9ydENoYXRSZXNwb25zZSB7XG4gIHJlcG9ydENoYW5nZWQ/OiBib29sZWFuO1xuICByZXBvcnRSZW5hbWVkPzogYm9vbGVhbjtcbn1cblxuLy8gT25lIHZlcnNpb24gb2YgdGhlIGdsb2JhbCBBSSBrbm93bGVkZ2UgZG9jdW1lbnQg4oCUIHRoZSBvcGVyYXRvci1hdXRob3JlZFxuLy8gbWFya2Rvd24gYXBwZW5kZWQgdG8gdGhlIHJlcG9ydCBhZ2VudCdzIHN5c3RlbSBpbnN0cnVjdGlvbnMgb24gZXZlcnkgdHVybi5cbmV4cG9ydCBpbnRlcmZhY2UgUmVwb3J0SW5zdHJ1Y3Rpb24ge1xuICBpZDogbnVtYmVyO1xuICBjb250ZW50OiBzdHJpbmc7XG4gIGN1cnJlbnQ6IGJvb2xlYW47XG4gIGNyZWF0ZURhdGU6IERhdGU7XG4gIG1vZGlmeURhdGU6IERhdGU7XG4gIGFjY291bnRJZDogbnVtYmVyIHwgbnVsbDtcbiAgYWNjb3VudE5hbWU6IHN0cmluZyB8IG51bGw7XG59XG5cbi8vIEdFVC9QVVQgaW5zdHJ1Y3Rpb25zIHBheWxvYWQ6IHRoZSBjdXJyZW50IHZlcnNpb24gKG51bGwgdW50aWwgb25lIGlzXG4vLyBhdXRob3JlZCkgcGx1cyB0aGUgZnVsbCBoaXN0b3J5LCBuZXdlc3QgZmlyc3QuXG5leHBvcnQgaW50ZXJmYWNlIFJlcG9ydEluc3RydWN0aW9ucyB7XG4gIGluc3RydWN0aW9uczogUmVwb3J0SW5zdHJ1Y3Rpb24gfCBudWxsO1xuICB2ZXJzaW9uczogUmVwb3J0SW5zdHJ1Y3Rpb25bXTtcbn1cblxuLy8gVGhlIGxhdGVzdCBzZW1hbnRpYy1kYXRhYmFzZSBidWlsZCAoYW4gZmZfcHJvY2Vzc2VzIHJvdykg4oCUIGVub3VnaCBmb3IgdGhlXG4vLyBzZXR0aW5ncyBkaWFsb2cgdG8gc2F5IHdoYXQgc3RhdGUgdGhlIGJ1aWxkIGlzIGluIGFuZCB3aGVuIGl0IGxhc3QgcmFuLlxuZXhwb3J0IGludGVyZmFjZSBTZW1hbnRpY0J1aWxkIHtcbiAgaWQ6IG51bWJlcjtcbiAgc3RhdGU6IHN0cmluZztcbiAgcGVyY2VudDogbnVtYmVyIHwgc3RyaW5nO1xuICBtZXNzYWdlOiBzdHJpbmc7XG4gIGR1cmF0aW9uOiBudW1iZXI7XG4gIGNyZWF0ZURhdGU6IERhdGU7XG4gIHN0YXJ0RGF0ZTogRGF0ZTtcbiAgZW5kRGF0ZTogRGF0ZTtcbn1cblxuLy8gQSBidWlsZCBzdGFnZSdzIHN0YXRlIG9uIHRoZSBlbnRpdHkgc2NvcmVib2FyZDogJ2RvbmUnID0gYnVpbHQsICdtaXNzaW5nJyA9XG4vLyBzdGlsbCBuZWVkcyBidWlsZGluZyAoYSBtaXNzaW5nIHN0YWdlIGlzIHVuYnVpbHQgY29udGVudCwgbmV2ZXIgYW4gZXJyb3IpLlxuZXhwb3J0IHR5cGUgU2VtYW50aWNCdWlsZFN0YWdlID0gJ2RvbmUnIHwgJ21pc3NpbmcnO1xuXG4vLyBPbmUgZW51bSBjb2x1bW4gb2YgYW4gZW50aXR5LCB3aXRoIHRoZSBhbGxvd2VkIHZhbHVlcyB0aGUgYnVpbGQgaW5saW5lZC5cbmV4cG9ydCBpbnRlcmZhY2UgU2VtYW50aWNCdWlsZEVudW0ge1xuICBjb2x1bW46IHN0cmluZztcbiAgdmFsdWVzOiBzdHJpbmdbXTtcbn1cblxuLy8gT25lIGVudGl0eSByb3cgb2YgdGhlIHNjb3JlYm9hcmQgKGFuIGVudGl0eSA9IGEgdGFibGUgKyBhIG1vZGVsICsgYVxuLy8gaGFuZGxlcik6IGl0cyB0YWJsZS9zaGFwZSBjb3VudHMsIGlubGluZWQgZW51bSB2YWx1ZXMsIGNvbXB1dGVkIGZpZWxkcywgaG93XG4vLyBtYW55IGNvZGUgZnVuY3Rpb25zIHdlcmUgY2FjaGVkIChzcGxpdCBtb2RlbCB2cyBoYW5kbGVyKSwgYW5kIHRoZSBwZXItc3RhZ2Vcbi8vIGJ1aWx0L21pc3Npbmcgc3RhdGUuXG4vL1xuLy8gYG1vZGVsYC9gaGFuZGxlcmAgYXJlIHRoZSBjbGFzc2VzIHRoZSBmdW5jdGlvbnMgd2VyZSByZWFkIGZyb20g4oCUIHdoYXQgYVxuLy8gcmVhZGVyIHJlY29nbml6ZXMgdGhlIHJvdyBieSwgd2hlcmUgYGtleWAgaXMgd2hhdCB0aGUgcmVwb3J0IEFJIGFkZHJlc3NlcyBpdFxuLy8gYnkgaW4gZGVzY3JpYmVfZW50aXR5IC8gY29tcGlsZV9xdWVyeS5cbmV4cG9ydCBpbnRlcmZhY2UgU2VtYW50aWNCdWlsZEVudGl0eSB7XG4gIGtleTogc3RyaW5nO1xuICB0YWJsZTogc3RyaW5nO1xuICBtb2RlbDogc3RyaW5nIHwgbnVsbDtcbiAgaGFuZGxlcjogc3RyaW5nIHwgbnVsbDtcbiAgY29sdW1uczogbnVtYmVyO1xuICByZWxhdGlvbnNoaXBzOiBudW1iZXI7XG4gIGVudW1zOiBTZW1hbnRpY0J1aWxkRW51bVtdO1xuICBjb21wdXRlZEZpZWxkczogc3RyaW5nW107XG4gIGZ1bmN0aW9uQ291bnQ6IG51bWJlcjtcbiAgbW9kZWxGdW5jdGlvbkNvdW50OiBudW1iZXI7XG4gIGhhbmRsZXJGdW5jdGlvbkNvdW50OiBudW1iZXI7XG4gIHN0YWdlczogUmVjb3JkPHN0cmluZywgU2VtYW50aWNCdWlsZFN0YWdlPjtcbn1cblxuLy8gT25lIHN0YW5kYWxvbmUgY29kZSBjbGFzcyB0aGUgYnVpbGQgcmVhZDogZG9tYWluIGxvZ2ljIHdpdGggbm8gdGFibGUgb2YgaXRzXG4vLyBvd24gKGEgc3VtbWFyeSBtb2RlbCwgYSBjYWxjdWxhdGlvbiBzZXJ2aWNlKS4gVGhlIHJlcG9ydCBBSSByZWFkcyBpdHMgY29kZVxuLy8gZXhhY3RseSBsaWtlIGFuIGVudGl0eSdzLCBidXQgaXQgY2FuIG5ldmVyIGJlIHF1ZXJpZWQg4oCUIHRoZXJlIGlzIG5vdGhpbmcgdG9cbi8vIHNlbGVjdCBmcm9tIOKAlCBzbyBpdCBjYXJyaWVzIG5vIHRhYmxlLCBjb2x1bW5zIG9yIHJlbGF0aW9uc2hpcHMuXG5leHBvcnQgaW50ZXJmYWNlIFNlbWFudGljQnVpbGRDbGFzcyB7XG4gIGtleTogc3RyaW5nO1xuICBtb2RlbDogc3RyaW5nIHwgbnVsbDtcbiAgZnVuY3Rpb25Db3VudDogbnVtYmVyO1xufVxuXG4vLyBXaGF0IHRoZSBidWlsZCBkZWNpZGVkIGEgcGh5c2ljYWwgdGFibGUgaXMuIEVudGl0eSBhbmQganVuY3Rpb24gYXJlIGJvdGhcbi8vIHJlYWNoYWJsZSBieSB0aGUgcmVwb3J0IEFJIOKAlCBhbiBlbnRpdHkgZGlyZWN0bHksIGEganVuY3Rpb24gdGhyb3VnaCB0aGVcbi8vIG1hbnktdG8tbWFueSBpdCBicmlkZ2VzLiBFeGNsdWRlZCBpcyBub3QgcmVhY2hhYmxlIGF0IGFsbC5cbmV4cG9ydCB0eXBlIFNlbWFudGljVGFibGVDbGFzc2lmaWNhdGlvbiA9ICdlbnRpdHknIHwgJ2p1bmN0aW9uJyB8ICdleGNsdWRlZCc7XG5cbi8vIE9uZSBwaHlzaWNhbCB0YWJsZSBhcyB0aGUgYnVpbGQgY2xhc3NpZmllZCBpdC4gYHJlYXNvbmAgYW5zd2VycyBhIHNpbmdsZVxuLy8gcXVlc3Rpb24g4oCUIHdoeSBjYW4ndCB0aGUgcmVwb3J0IEFJIHNlZSB0aGlzIHRhYmxlPyDigJQgYW5kIGlzIG51bGwgd2hlbiBpdCBjYW4uXG4vLyBBIGp1bmN0aW9uIHdpdGggYSByZWFzb24gYnJpZGdlZCBub3RoaW5nLCBzbyBpdCBpcyBqdXN0IGFzIGludmlzaWJsZSBhcyBhblxuLy8gZXhjbHVkZWQgdGFibGUuXG5leHBvcnQgaW50ZXJmYWNlIFNlbWFudGljQnVpbGRUYWJsZSB7XG4gIHRhYmxlOiBzdHJpbmc7XG4gIGNsYXNzaWZpY2F0aW9uOiBTZW1hbnRpY1RhYmxlQ2xhc3NpZmljYXRpb247XG4gIG1vZGVsOiBzdHJpbmcgfCBudWxsO1xuICByZWFzb246IHN0cmluZyB8IG51bGw7XG59XG5cbi8vIFRoZSBidWlsZCBzY29yZWJvYXJkIHNoaXBwZWQgYWxvbmdzaWRlIHRoZSBidWlsZCBzdGF0dXM6IHRoZSBzdW1tYXJ5IGNvdW50cyxcbi8vIHRoZSBmdWxsIGJyZWFrZG93biB0aGUgc2V0dGluZ3MgZGlhbG9nIGRyaWxscyBpbnRvIOKAlCBCT1RIIGtpbmRzIG9mIHVuaXQgdGhlXG4vLyBidWlsZCBjYWNoZXMsIHRhYmxlLWJhY2tlZCBlbnRpdGllcyBhbmQgc3RhbmRhbG9uZSBjb2RlIGNsYXNzZXMg4oCUIGFuZCB0aGVcbi8vIGNhdGFsb2cgb2YgZXZlcnkgdGFibGUgdGhlIGJ1aWxkIHNhdywgc28gdGhlIHRhYiBjYW4gc2hvdyB3aGF0IHRoZSByZXBvcnQgQUlcbi8vIGNhbid0IHNlZSwgbm90IGp1c3Qgd2hhdCBpdCBjYW4uXG4vL1xuLy8gYGZ1bmN0aW9uQ291bnRgIHNwYW5zIGVudGl0aWVzIGFuZCBjbGFzc2VzIGFsaWtlOiBpdCBpcyB0aGUgc2FtZSB0b3RhbCB0aGVcbi8vIGJ1aWxkIGl0c2VsZiByZXBvcnRzIHdoZW4gaXQgZmluaXNoZXMuXG4vL1xuLy8gYHRhYmxlc2AgaXMgZW1wdHkgZm9yIGFuIGFydGlmYWN0IGJ1aWx0IGJlZm9yZSB0aGUgY2F0YWxvZyBleGlzdGVkLiBSZWFkIHRoYXRcbi8vIGFzIFwibm8gY2F0YWxvZ1wiLCBuZXZlciBhcyBcIm5vdGhpbmcgd2FzIGV4Y2x1ZGVkXCIuXG5leHBvcnQgaW50ZXJmYWNlIFNlbWFudGljQnVpbGREZXRhaWwge1xuICAvLyBXaGV0aGVyIHRoZSBhcnRpZmFjdCB3YXMgcHJvZHVjZWQgYnkgYSBidWlsZCB0aGF0IHJhbiB0byB0aGUgZW5kLiBSZWFkIGl0XG4gIC8vIGJlc2lkZSBgZ2VuZXJhdGVkQXRgLCBuZXZlciBpbnN0ZWFkIG9mIGl0OiB0aGUgc3RydWN0dXJhbCBhcnRpZmFjdCBpc1xuICAvLyBwdWJsaXNoZWQgQkVGT1JFIHRoZSBBSSBmdW5jdGlvbiBwYXNzLCBzbyBhIGJ1aWxkIHdob3NlIEFJIHBhc3MgZmFpbGVkIHN0aWxsXG4gIC8vIGNhcnJpZXMgYSBkYXRlIGFuZCBhIGZ1bGwgc2V0IG9mIGNvdW50cy4gVGhlIGRhdGUgc2F5cyBzb21ldGhpbmcgd2FzXG4gIC8vIHdyaXR0ZW47IG9ubHkgdGhpcyBzYXlzIHRoZSBidWlsZCBmaW5pc2hlZCB3cml0aW5nIGl0LlxuICBjb21wbGV0ZTogYm9vbGVhbjtcbiAgZ2VuZXJhdGVkQXQ6IERhdGUgfCBudWxsO1xuICBlbnRpdHlDb3VudDogbnVtYmVyO1xuICBjbGFzc0NvdW50OiBudW1iZXI7XG4gIGZ1bmN0aW9uQ291bnQ6IG51bWJlcjtcbiAgZW50aXRpZXM6IFNlbWFudGljQnVpbGRFbnRpdHlbXTtcbiAgY2xhc3NlczogU2VtYW50aWNCdWlsZENsYXNzW107XG4gIHRhYmxlQ291bnQ6IG51bWJlcjtcbiAganVuY3Rpb25Db3VudDogbnVtYmVyO1xuICB1bmxpbmtlZEp1bmN0aW9uQ291bnQ6IG51bWJlcjtcbiAgZXhjbHVkZWRDb3VudDogbnVtYmVyO1xuICB0YWJsZXM6IFNlbWFudGljQnVpbGRUYWJsZVtdO1xufVxuXG4vLyBXaGljaCBjbGFzcyBhIGNhY2hlZCBmdW5jdGlvbiB3YXMgcmVhZCBmcm9tLiBBbiBlbnRpdHkncyBjYWNoZSBzcGxpdHMgaW50b1xuLy8gJ21vZGVsJyBhbmQgJ2hhbmRsZXInOyBhIHN0YW5kYWxvbmUgY29kZSBjbGFzcyBoYXMgb25lIGdyb3VwLCAnY2xhc3MnLlxuZXhwb3J0IHR5cGUgU2VtYW50aWNGdW5jdGlvblNvdXJjZSA9ICdtb2RlbCcgfCAnaGFuZGxlcicgfCAnY2xhc3MnO1xuXG4vLyBPbmUgQUktY2xhc3NpZmllZCBjb2RlIGZ1bmN0aW9uIGZyb20gYSBtb2RlbCwgaGFuZGxlciBvciBzdGFuZGFsb25lIGNsYXNzOlxuLy8gd2hhdCBraW5kIG9mIGxvZ2ljIGl0IGlzLCB3aGF0IGl0IGRvZXMsIGFuZCB3aGF0IGl0IHByb2R1Y2VzIOKAlCB0aGUgYnVpbGQnc1xuLy8gY2FjaGVkIFwid2hhdCB0aGUgY29kZSBkb2VzXCIga25vd2xlZGdlIHNob3duIGluIHRoZSBmdW5jdGlvbnMgZGlhbG9nLlxuZXhwb3J0IGludGVyZmFjZSBTZW1hbnRpY0VudGl0eUZ1bmN0aW9uIHtcbiAgY2xhc3M6IHN0cmluZztcbiAgbWV0aG9kOiBzdHJpbmc7XG4gIHNpZ25hdHVyZTogc3RyaW5nO1xuICBraW5kOiBzdHJpbmc7XG4gIHN1bW1hcnk6IHN0cmluZztcbiAgcHJvZHVjZXM6IHN0cmluZztcbiAgc291cmNlOiBTZW1hbnRpY0Z1bmN0aW9uU291cmNlO1xufVxuXG4vLyBPbmUgZW50aXR5J3MgY2FjaGVkIGNvZGUtZnVuY3Rpb24ga25vd2xlZGdlLCBmZXRjaGVkIHdoZW4gYSBmdW5jdGlvbnMgZGlhbG9nXG4vLyBvcGVucyAodGhlIGZ1bGwgc2V0IGFjcm9zcyBhbGwgZW50aXRpZXMgaXMgdG9vIGJpZyB0byBzaGlwIHdpdGggdGhlXG4vLyBzY29yZWJvYXJkKS4gT25lIHBheWxvYWQgc2VydmVzIGJvdGggZGlhbG9ncyDigJQgY29uc3VtZXJzIGZpbHRlciBieSBzb3VyY2UuXG5leHBvcnQgaW50ZXJmYWNlIFNlbWFudGljRW50aXR5RnVuY3Rpb25zIHtcbiAgZW50aXR5OiBzdHJpbmc7XG4gIGdlbmVyYXRlZEF0OiBEYXRlIHwgbnVsbDtcbiAgbW9kZWxDbGFzczogc3RyaW5nIHwgbnVsbDtcbiAgaGFuZGxlckNsYXNzOiBzdHJpbmcgfCBudWxsO1xuICBmdW5jdGlvbnM6IFNlbWFudGljRW50aXR5RnVuY3Rpb25bXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTZW1hbnRpY0J1aWxkU3RhdHVzIHtcbiAgYnVpbGQ6IFNlbWFudGljQnVpbGQgfCBudWxsO1xuICBkZXRhaWw6IFNlbWFudGljQnVpbGREZXRhaWw7XG59XG5cbi8vIFRoZSByZXBvcnQgbW9kdWxlJ3MgR2VuZXJhbCBzZXR0aW5ncyAoYSBzbWFsbCBnbG9iYWwga2V5L3ZhbHVlIHN0b3JlLCB0aGVcbi8vIHJlcG9ydGluZyBjb3VudGVycGFydCBvZiB0aGUgYXBwLXdpZGUgc2V0dGluZ3MpLiBFYWNoIHZhbHVlIHNoaXBzIHdpdGggdGhlXG4vLyBzYWZlIGJhbmQgaXRzIGVkaXRvciBmaWVsZCBpcyBib3VuZGVkIHRvLlxuZXhwb3J0IGludGVyZmFjZSBSZXBvcnRTZXR0aW5ncyB7XG4gIC8vIEhvdyBtYW55IHN1bW1hcnkgY2FsbHMgdGhlIHNlbWFudGljIGJ1aWxkIHJ1bnMgYXQgb25jZS5cbiAgc2VtYW50aWNCdWlsZENvbmN1cnJlbmN5OiBudW1iZXI7XG4gIHNlbWFudGljQnVpbGRDb25jdXJyZW5jeU1pbjogbnVtYmVyO1xuICBzZW1hbnRpY0J1aWxkQ29uY3VycmVuY3lNYXg6IG51bWJlcjtcbn1cbiJdfQ==
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGlsZS1sb2FkLXJlc3VsdC5pbnRlcmZhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvYXBwL3JlcG9ydHMvaW50ZXJmYWNlcy90aWxlLWxvYWQtcmVzdWx0LmludGVyZmFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiLy8gT25lIGFuc3dlciBhIHRpbGUncyBsb2FkIHN0cmVhbSBsZXRzIHRocm91Z2ggKHRpbGVMb2Fkcyk6IHRoZSBkYXRhIHRoZVxuLy8gcmVxdWVzdCByZXR1cm5lZCwgb3IsIHdoZW4gaXQgZmFpbGVkLCBudWxsIGRhdGEgYW5kIHRoZSBtZXNzYWdlIHRvIHNob3cuXG5leHBvcnQgaW50ZXJmYWNlIFRpbGVMb2FkUmVzdWx0PFQ+IHtcbiAgZGF0YTogVCB8IG51bGw7XG4gIGVycm9yOiBzdHJpbmcgfCBudWxsO1xufVxuIl19
@@ -1,5 +1,15 @@
1
1
  // Default content padding around a component's body, inches (1/8").
2
2
  export const DEFAULT_COMPONENT_PADDING = 0.125;
3
+ // A component's content padding as a CSS padding: each edge in inches (a CSS
4
+ // inch is 96px, the canvas's own), DEFAULT_COMPONENT_PADDING unless set. The
5
+ // canvas pads a component's body with it, and the export measure
6
+ // (ReportTextLayoutService) its offscreen copy of a text block, so the two
7
+ // boxes are one.
8
+ export function componentPaddingCss(component) {
9
+ const padding = component.config?.padding;
10
+ const edge = (value) => `${value ?? DEFAULT_COMPONENT_PADDING}in`;
11
+ return `${edge(padding?.top)} ${edge(padding?.right)} ${edge(padding?.bottom)} ${edge(padding?.left)}`;
12
+ }
3
13
  // Default report heading size, points (1/72"). Applies to component titles.
4
14
  export const DEFAULT_HEADING_SIZE = 16;
5
15
  // Bounds for a page dimension, in inches. Mirrors ReportModel::PAGE_DIMENSION_MIN
@@ -13,4 +23,4 @@ export const PAGE_DIMENSION_MAX = 50;
13
23
  // The deepest a header or footer band may be, in inches. Mirrors
14
24
  // ReportHeaderFooter::MAX_HEIGHT on the server, which clamps.
15
25
  export const HEADER_FOOTER_MAX = 3;
16
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF5b3V0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2FwcC9yZXBvcnRzL2xheW91dC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxvRUFBb0U7QUFDcEUsTUFBTSxDQUFDLE1BQU0seUJBQXlCLEdBQUcsS0FBSyxDQUFDO0FBRS9DLDRFQUE0RTtBQUM1RSxNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBRyxFQUFFLENBQUM7QUFFdkMsa0ZBQWtGO0FBQ2xGLGlGQUFpRjtBQUNqRixrRkFBa0Y7QUFDbEYsaUZBQWlGO0FBQ2pGLGtGQUFrRjtBQUNsRixzQkFBc0I7QUFDdEIsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsQ0FBQyxDQUFDO0FBQ3BDLE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLEVBQUUsQ0FBQztBQUVyQyxpRUFBaUU7QUFDakUsOERBQThEO0FBQzlELE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIERlZmF1bHQgY29udGVudCBwYWRkaW5nIGFyb3VuZCBhIGNvbXBvbmVudCdzIGJvZHksIGluY2hlcyAoMS84XCIpLlxuZXhwb3J0IGNvbnN0IERFRkFVTFRfQ09NUE9ORU5UX1BBRERJTkcgPSAwLjEyNTtcblxuLy8gRGVmYXVsdCByZXBvcnQgaGVhZGluZyBzaXplLCBwb2ludHMgKDEvNzJcIikuIEFwcGxpZXMgdG8gY29tcG9uZW50IHRpdGxlcy5cbmV4cG9ydCBjb25zdCBERUZBVUxUX0hFQURJTkdfU0laRSA9IDE2O1xuXG4vLyBCb3VuZHMgZm9yIGEgcGFnZSBkaW1lbnNpb24sIGluIGluY2hlcy4gTWlycm9ycyBSZXBvcnRNb2RlbDo6UEFHRV9ESU1FTlNJT05fTUlOXG4vLyAvIE1BWCBvbiB0aGUgc2VydmVyLCB3aGljaCBpcyB0aGUgZW5mb3JjaW5nIHNpZGUg4oCUIHRoZXNlIGRyaXZlIHRoZSBmaWVsZC1sZXZlbFxuLy8gbWVzc2FnZSBzbyB0aGUgb3BlcmF0b3Igc2VlcyB0aGUgbGltaXQgYmVmb3JlIHN1Ym1pdHRpbmcuIFRoZSBjZWlsaW5nIGlzIHNldCBieVxuLy8gUG93ZXJQb2ludCwgbm90IGJ5IHRoZSBjYW52YXM6IEVDTUEtMzc2IGNhcHMgYSBzbGlkZSBhdCA1NiBpbmNoZXMsIGFuZCBhIC5wcHR4XG4vLyBvdmVyIHRoYXQgaXMgcmVmdXNlZCBvbiBvcGVuLCBzbyBhIHBhZ2UgaXMgbm90IGFsbG93ZWQgdG8gYmUgc2l6ZWQgcGFzdCB3aGF0IGl0XG4vLyBjYW4gYmUgZXhwb3J0ZWQgYXMuXG5leHBvcnQgY29uc3QgUEFHRV9ESU1FTlNJT05fTUlOID0gMTtcbmV4cG9ydCBjb25zdCBQQUdFX0RJTUVOU0lPTl9NQVggPSA1MDtcblxuLy8gVGhlIGRlZXBlc3QgYSBoZWFkZXIgb3IgZm9vdGVyIGJhbmQgbWF5IGJlLCBpbiBpbmNoZXMuIE1pcnJvcnNcbi8vIFJlcG9ydEhlYWRlckZvb3Rlcjo6TUFYX0hFSUdIVCBvbiB0aGUgc2VydmVyLCB3aGljaCBjbGFtcHMuXG5leHBvcnQgY29uc3QgSEVBREVSX0ZPT1RFUl9NQVggPSAzO1xuIl19
26
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF5b3V0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2FwcC9yZXBvcnRzL2xheW91dC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxvRUFBb0U7QUFDcEUsTUFBTSxDQUFDLE1BQU0seUJBQXlCLEdBQUcsS0FBSyxDQUFDO0FBRS9DLDZFQUE2RTtBQUM3RSw2RUFBNkU7QUFDN0UsaUVBQWlFO0FBQ2pFLDJFQUEyRTtBQUMzRSxpQkFBaUI7QUFDakIsTUFBTSxVQUFVLG1CQUFtQixDQUFDLFNBQTBCO0lBQzVELE1BQU0sT0FBTyxHQUFHLFNBQVMsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDO0lBQzFDLE1BQU0sSUFBSSxHQUFHLENBQUMsS0FBeUIsRUFBRSxFQUFFLENBQUMsR0FBRyxLQUFLLElBQUkseUJBQXlCLElBQUksQ0FBQztJQUV0RixPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQ3pHLENBQUM7QUFFRCw0RUFBNEU7QUFDNUUsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsRUFBRSxDQUFDO0FBRXZDLGtGQUFrRjtBQUNsRixpRkFBaUY7QUFDakYsa0ZBQWtGO0FBQ2xGLGlGQUFpRjtBQUNqRixrRkFBa0Y7QUFDbEYsc0JBQXNCO0FBQ3RCLE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLENBQUMsQ0FBQztBQUNwQyxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxFQUFFLENBQUM7QUFFckMsaUVBQWlFO0FBQ2pFLDhEQUE4RDtBQUM5RCxNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBSZXBvcnRDb21wb25lbnQgfSBmcm9tICcuL2ludGVyZmFjZXMvcmVwb3J0LmludGVyZmFjZSc7XG5cblxuLy8gRGVmYXVsdCBjb250ZW50IHBhZGRpbmcgYXJvdW5kIGEgY29tcG9uZW50J3MgYm9keSwgaW5jaGVzICgxLzhcIikuXG5leHBvcnQgY29uc3QgREVGQVVMVF9DT01QT05FTlRfUEFERElORyA9IDAuMTI1O1xuXG4vLyBBIGNvbXBvbmVudCdzIGNvbnRlbnQgcGFkZGluZyBhcyBhIENTUyBwYWRkaW5nOiBlYWNoIGVkZ2UgaW4gaW5jaGVzIChhIENTU1xuLy8gaW5jaCBpcyA5NnB4LCB0aGUgY2FudmFzJ3Mgb3duKSwgREVGQVVMVF9DT01QT05FTlRfUEFERElORyB1bmxlc3Mgc2V0LiBUaGVcbi8vIGNhbnZhcyBwYWRzIGEgY29tcG9uZW50J3MgYm9keSB3aXRoIGl0LCBhbmQgdGhlIGV4cG9ydCBtZWFzdXJlXG4vLyAoUmVwb3J0VGV4dExheW91dFNlcnZpY2UpIGl0cyBvZmZzY3JlZW4gY29weSBvZiBhIHRleHQgYmxvY2ssIHNvIHRoZSB0d29cbi8vIGJveGVzIGFyZSBvbmUuXG5leHBvcnQgZnVuY3Rpb24gY29tcG9uZW50UGFkZGluZ0Nzcyhjb21wb25lbnQ6IFJlcG9ydENvbXBvbmVudCk6IHN0cmluZyB7XG4gIGNvbnN0IHBhZGRpbmcgPSBjb21wb25lbnQuY29uZmlnPy5wYWRkaW5nO1xuICBjb25zdCBlZGdlID0gKHZhbHVlOiBudW1iZXIgfCB1bmRlZmluZWQpID0+IGAke3ZhbHVlID8/IERFRkFVTFRfQ09NUE9ORU5UX1BBRERJTkd9aW5gO1xuXG4gIHJldHVybiBgJHtlZGdlKHBhZGRpbmc/LnRvcCl9ICR7ZWRnZShwYWRkaW5nPy5yaWdodCl9ICR7ZWRnZShwYWRkaW5nPy5ib3R0b20pfSAke2VkZ2UocGFkZGluZz8ubGVmdCl9YDtcbn1cblxuLy8gRGVmYXVsdCByZXBvcnQgaGVhZGluZyBzaXplLCBwb2ludHMgKDEvNzJcIikuIEFwcGxpZXMgdG8gY29tcG9uZW50IHRpdGxlcy5cbmV4cG9ydCBjb25zdCBERUZBVUxUX0hFQURJTkdfU0laRSA9IDE2O1xuXG4vLyBCb3VuZHMgZm9yIGEgcGFnZSBkaW1lbnNpb24sIGluIGluY2hlcy4gTWlycm9ycyBSZXBvcnRNb2RlbDo6UEFHRV9ESU1FTlNJT05fTUlOXG4vLyAvIE1BWCBvbiB0aGUgc2VydmVyLCB3aGljaCBpcyB0aGUgZW5mb3JjaW5nIHNpZGUg4oCUIHRoZXNlIGRyaXZlIHRoZSBmaWVsZC1sZXZlbFxuLy8gbWVzc2FnZSBzbyB0aGUgb3BlcmF0b3Igc2VlcyB0aGUgbGltaXQgYmVmb3JlIHN1Ym1pdHRpbmcuIFRoZSBjZWlsaW5nIGlzIHNldCBieVxuLy8gUG93ZXJQb2ludCwgbm90IGJ5IHRoZSBjYW52YXM6IEVDTUEtMzc2IGNhcHMgYSBzbGlkZSBhdCA1NiBpbmNoZXMsIGFuZCBhIC5wcHR4XG4vLyBvdmVyIHRoYXQgaXMgcmVmdXNlZCBvbiBvcGVuLCBzbyBhIHBhZ2UgaXMgbm90IGFsbG93ZWQgdG8gYmUgc2l6ZWQgcGFzdCB3aGF0IGl0XG4vLyBjYW4gYmUgZXhwb3J0ZWQgYXMuXG5leHBvcnQgY29uc3QgUEFHRV9ESU1FTlNJT05fTUlOID0gMTtcbmV4cG9ydCBjb25zdCBQQUdFX0RJTUVOU0lPTl9NQVggPSA1MDtcblxuLy8gVGhlIGRlZXBlc3QgYSBoZWFkZXIgb3IgZm9vdGVyIGJhbmQgbWF5IGJlLCBpbiBpbmNoZXMuIE1pcnJvcnNcbi8vIFJlcG9ydEhlYWRlckZvb3Rlcjo6TUFYX0hFSUdIVCBvbiB0aGUgc2VydmVyLCB3aGljaCBjbGFtcHMuXG5leHBvcnQgY29uc3QgSEVBREVSX0ZPT1RFUl9NQVggPSAzO1xuIl19