ids-enterprise-wc 1.15.9-patch.5 → 1.15.9-patch.7

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 (41) hide show
  1. package/chunks/ids-chunk-4MSGTAOV-full.js +12 -0
  2. package/chunks/ids-chunk-4MSGTAOV-full.js.map +7 -0
  3. package/chunks/{ids-chunk-7URDZKCS-full.js → ids-chunk-7IP7SLQZ-full.js} +28 -2
  4. package/chunks/ids-chunk-7IP7SLQZ-full.js.map +7 -0
  5. package/chunks/{ids-chunk-LZU34NYE-full.js → ids-chunk-CSOF2USI-full.js} +12 -2
  6. package/chunks/{ids-chunk-LZU34NYE-full.js.map → ids-chunk-CSOF2USI-full.js.map} +2 -2
  7. package/chunks/{ids-chunk-FW4DOBQU-full.js → ids-chunk-FPEINRXY-full.js} +6 -10
  8. package/chunks/ids-chunk-FPEINRXY-full.js.map +7 -0
  9. package/chunks/{ids-chunk-UEVOEMEM-full.js → ids-chunk-HZO4QUAW-full.js} +358 -34
  10. package/chunks/ids-chunk-HZO4QUAW-full.js.map +7 -0
  11. package/chunks/{ids-chunk-HGKIZXDQ-full.js → ids-chunk-RLOOHWYV-full.js} +2 -2
  12. package/components/ids-button/ids-button.css +392 -43
  13. package/components/ids-checkbox/ids-checkbox.css +7 -580
  14. package/components/ids-data-grid/ids-data-grid-cell.js +1 -1
  15. package/components/ids-data-grid/ids-data-grid-column.d.ts +1 -0
  16. package/components/ids-data-grid/ids-data-grid-column.js +7 -0
  17. package/components/ids-data-grid/ids-data-grid-filters.js +2 -2
  18. package/components/ids-data-grid/ids-data-grid-header.d.ts +6 -2
  19. package/components/ids-data-grid/ids-data-grid-header.js +1 -1
  20. package/components/ids-data-grid/ids-data-grid-row.d.ts +6 -0
  21. package/components/ids-data-grid/ids-data-grid-row.js +2 -2
  22. package/components/ids-data-grid/ids-data-grid.d.ts +18 -1
  23. package/components/ids-data-grid/ids-data-grid.js +6 -5
  24. package/components/ids-date-picker/ids-date-picker.css +31 -389
  25. package/components/ids-layout-grid/ids-layout-grid.css +10 -21300
  26. package/components/ids-list-box/ids-list-box.css +66 -98
  27. package/components/ids-menu/ids-menu.css +335 -11
  28. package/components/ids-module-nav/ids-module-nav.css +24 -2465
  29. package/components/ids-tag/ids-tag.css +8 -152
  30. package/components/ids-toolbar/ids-toolbar.css +12 -122
  31. package/components/ids-trigger-field/ids-trigger-field.css +1681 -1165
  32. package/custom-elements.json +2090 -1869
  33. package/enterprise-wc.all.iife.js +395 -39
  34. package/enterprise-wc.all.iife.js.map +3 -3
  35. package/enterprise-wc.js +6 -5
  36. package/package.json +1 -1
  37. package/vscode.html-custom-data.json +1 -1
  38. package/chunks/ids-chunk-7URDZKCS-full.js.map +0 -7
  39. package/chunks/ids-chunk-FW4DOBQU-full.js.map +0 -7
  40. package/chunks/ids-chunk-UEVOEMEM-full.js.map +0 -7
  41. /package/chunks/{ids-chunk-HGKIZXDQ-full.js.map → ids-chunk-RLOOHWYV-full.js.map} +0 -0
@@ -78111,32 +78111,28 @@ ids-trigger-button[slot=trigger-end] {
78111
78111
  * @returns {IdsDataGridCell | null} the cell above this cell
78112
78112
  */
78113
78113
  get cellAbove() {
78114
- return this.rowAbove?.cellByIndex(this.columnIndex) ?? null;
78114
+ return this.dataGrid?.findNextNavigableCell(this, "up" /* Up */) ?? null;
78115
78115
  }
78116
78116
  /**
78117
78117
  * Get the cell below this cell
78118
78118
  * @returns {IdsDataGridCell | null} the cell below this cell
78119
78119
  */
78120
78120
  get cellBelow() {
78121
- return this.rowBelow?.cellByIndex(this.columnIndex) ?? null;
78121
+ return this.dataGrid?.findNextNavigableCell(this, "down" /* Down */) ?? null;
78122
78122
  }
78123
78123
  /**
78124
78124
  * Get the cell to the left of this cell
78125
78125
  * @returns {IdsDataGridCell | null} the cell to the left of this cell
78126
78126
  */
78127
78127
  get cellLeft() {
78128
- const cellLeft = this.dataGrid?.rowByIndex(this.rowIndex)?.cellByIndex(this.columnIndex - 1);
78129
- if (cellLeft && cellLeft !== this) return cellLeft;
78130
- return this.rowAbove?.cellByIndex(this.dataGrid?.columns.length ?? 0) ?? null;
78128
+ return this.dataGrid?.findNextNavigableCell(this, "left" /* Left */) ?? null;
78131
78129
  }
78132
78130
  /**
78133
78131
  * Get the cell to the right of this cell
78134
78132
  * @returns {IdsDataGridCell | null} the cell to the right of this cell
78135
78133
  */
78136
78134
  get cellRight() {
78137
- const cellRight = this.dataGrid?.rowByIndex(this.rowIndex)?.cellByIndex(this.columnIndex + 1) ?? null;
78138
- if (cellRight && cellRight !== this) return cellRight;
78139
- return this.rowBelow?.cellByIndex(0) ?? null;
78135
+ return this.dataGrid?.findNextNavigableCell(this, "right" /* Right */) ?? null;
78140
78136
  }
78141
78137
  /**
78142
78138
  * Get the next editable cell to the left of this cell
@@ -78750,7 +78746,7 @@ ids-trigger-button[slot=trigger-end] {
78750
78746
  });
78751
78747
  }
78752
78748
  this.onEvent("keyup", this.editor?.input, () => {
78753
- this.dataGrid.updateActiveCellCache(this.row, this.columnIndex, this.editor?.input?.value || "");
78749
+ this.dataGrid.updateActiveCellCache(this.row, this.columnIndex, this.editor?.input?.value || "", true);
78754
78750
  });
78755
78751
  this.onEvent("keydown", this.editor?.input, (e) => {
78756
78752
  if (e.key === "Enter") {
@@ -80516,6 +80512,9 @@ ids-trigger-button[slot=trigger-end] {
80516
80512
  }
80517
80513
  }
80518
80514
 
80515
+ // src/components/ids-data-grid/ids-data-grid-column.ts
80516
+ var DEFAULT_COLUMN_MIN_WIDTH = 12;
80517
+
80519
80518
  // src/components/ids-data-grid/ids-data-grid-empty-message.ts
80520
80519
  function emptyMessageDefaults() {
80521
80520
  return {
@@ -83207,7 +83206,7 @@ ids-loading-indicator[stopped] {
83207
83206
  /*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VSb290IjoiL2J1aWxkcy9pbmZvci1kZXNpZ24vZW50ZXJwcmlzZS13Yy9zcmMvY29tcG9uZW50cy9pZHMtZGF0YS1ncmlkIiwic291cmNlcyI6WyJpZHMtZGF0YS1ncmlkLWZpbHRlcnMuc2NzcyIsImlkcy1kYXRhLWdyaWQtaGVhZGVyLnNjc3MiLCJpZHMtZGF0YS1ncmlkLXJvdy5zY3NzIiwiaWRzLWRhdGEtZ3JpZC1jZWxsLnNjc3MiLCIuLi8uLi90aGVtZXMvbWl4aW5zL2lkcy1oaWRlLW1peGluLnNjc3MiLCIuLi9pZHMtcG9wdXAtbWVudS9pZHMtcG9wdXAtbWVudS5zY3NzIiwiLi4vLi4vdGhlbWVzL21peGlucy9pZHMtY2hlY2tib3gtbWl4aW4uc2NzcyIsIi4uLy4uL3RoZW1lcy9taXhpbnMvaWRzLXJhZGlvLW1peGluLnNjc3MiLCJpZHMtZGF0YS1ncmlkLnNjc3MiLCIuLi8uLi90aGVtZXMvbWl4aW5zL2lkcy1jb3JlLW1peGlucy5zY3NzIiwiaWRzLWRhdGEtZ3JpZC1jb21tb24uc2NzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7QUFFQTtFQUNFO0VBRUE7O0FBR0Y7RUFJRTs7QUFHRjtFQUNFO0VBQ0E7RUFDQTs7QUFHRjtFQUNFO0VBQ0E7O0FBR0Y7RUFDRTtFQUNBO0VBQ0E7RUFDQTtFQUNBOztBQUVBO0VBQ0U7O0FBR0Y7RUFDRTtFQUNBOztBQU1BO0FBQUE7QUFBQTtFQUdFOztBQUtOO0VBQ0U7RUFDQTtFQUVBO0VBQ0E7O0FBRUE7RUFDRTtFQUNBOztBQUdGO0VBQ0U7OztBQ3hFTjtBQUNBO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7RUFXQTs7QUFUQTtFQUNFOztBQUdGO0VBQ0U7OztBQVFKO0VBQ0U7O0FBRUE7RUFDRTs7QUFHRjtFQUNFO0VBQ0E7O0FBSUY7RUFDRTtFQUNBOzs7QUFLSjtFQUNFO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7QUFFQTtFQUNFOztBQUVBO0VBQ0U7O0FBR0Y7RUFDRTs7QUFFQTtFQUNFOztBQUVBO0VBQ0U7O0FBSUo7QUFBQTtBQUFBO0VBR0U7O0FBTU47RUFDRTs7QUFHRjtFQUNFOztBQUdGO0VBRUU7O0FBR0Y7RUFFRTs7QUFHRjtFQUNFO0VBQ0E7O0FBSUE7RUFDRTs7QUFLSjtFQUNFO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7O0FBSUY7RUFDRTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBOztBQUVBO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7QUFJSjtFQUNFO0VBQ0E7O0FBR0Y7RUFDRTs7QUFHRjtFQUNFO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBOztBQUdGO0VBQ0U7O0FBRUE7RUFDRTs7QUFJSjtFQUNFOztBQUlGO0VBQ0U7RUFDQTtFQUNBOztBQUlGO0VBQ0U7O0FBRUE7RUFDRTs7QUFJSjtFQUNFO0VBQ0E7RUFDQTs7QUFJRTtFQUNFOztBQURGO0VBQ0U7O0FBREY7RUFDRTs7QUFERjtFQUNFOztBQURGO0VBQ0U7O0FBREY7RUFDRTs7QUFERjtFQUNFOztBQURGO0VBQ0U7O0FBREY7RUFDRTs7QUFLTjtFQUNFO0VBQ0E7O0FBR0E7RUFDRTs7O0FBS047RUFDRTs7O0FBR0Y7RUFDRTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7QUFFQTtFQUNFO0VBQ0E7OztBQUlKO0VBQ0U7RUFDQTtFQUNBOzs7QUFLQTtBQUFBO0VBRUU7RUFDQTtFQUNBOzs7QUFJSjtFQUNFO0VBQ0E7RUFDQTtFQUNBOzs7QUFJRjtFQUNFO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBOzs7QUFLQTtFQUNFO0VBQ0E7RUFDQTs7QUFFQTtFQUNFO0VBQ0E7RUFDQTs7QUFHRjtFQUNFO0VBQ0E7O0FBSUo7RUFDRTs7QUFFQTtFQUNFOzs7QUFLTjtFQUNFO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7O0FBRUE7RUFDRTs7O0FBSUo7RUFDRTs7O0FBR0Y7QUFBQTtFQUVFOzs7QUFHRjtFQUNFO0VBQ0E7OztBQUtBO0FBQUE7RUFDRTs7O0FBTUY7RUFDRTtFQUNBOztBQUdGO0VBQ0U7OztBQU1GO0VBQ0U7O0FBR0Y7RUFDRTtFQUNBOzs7QUFLSjtFQUNFO0VBQ0E7RUFDQTtFQUNBOztBQUVBO0VBRUU7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7QUFHRjtFQUNFO0VBQ0E7O0FBR0Y7RUFDRTtFQUNBOzs7QUFLSjtFQUNFOzs7QUFHRjtFQUNFOzs7QUFNQTtFQUNFO0VBQ0E7O0FBR0Y7RUFDRTs7QUFLQTtFQUNFOztBQUlKO0FBQUE7RUFFRTs7QUFLQTtFQUNFOzs7QUFNTjtFQUNFOzs7QUFNRTtFQUNFOztBQUdGO0VBQ0U7O0FBR0Y7RUFDRTs7QUFHRjtFQUNFOztBQUdGO0VBQ0U7O0FBS0Y7RUFDRTs7QUFHRjtFQUNFOztBQUdGO0VBQ0U7O0FBSUE7RUFDRTs7QUFHRjtFQUNFOztBQU1KO0VBQ0U7O0FBRUE7RUFDRTs7QUFJSjtFQUNFOztBQUdGO0VBQ0U7O0FBRUE7RUFDRTs7QUFHRjtFQUNFO0VBQ0E7O0FBSUo7RUFDRTs7QUFHRjtFQUNFOztBQUdGO0VBQ0U7RUFDQTtFQUNBOztBQUdGO0VBQ0U7O0FBR0Y7RUFDRTtFQUNBOztBQUtGO0VBQ0U7O0FBRUE7RUFDRTs7QUFJSjtFQUNFOztBQUdGO0VBQ0U7O0FBRUE7RUFDRTtFQUNBOztBQUdGO0VBQ0U7RUFDQTs7QUFJSjtFQUNFOztBQUdGO0VBQ0U7O0FBR0Y7RUFDRTtFQUNBO0VBQ0E7O0FBRUE7RUFDRTs7QUFHRjtFQUNFOztBQUlKO0VBQ0U7O0FBR0Y7RUFDRTs7QUFHRjtFQUNFO0VBQ0E7O0FBSUY7QUFBQTtBQUFBO0FBQUE7RUFJRTs7QUFHRjtFQUNFOztBQUdGO0VBQ0U7RUFDQTtFQUNBOzs7QUFPSjtFQUNFOztBQUVBO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7O0FBS0E7RUFDRTs7QUFLRjtFQUNFOztBQUtOO0VBQ0U7OztBQVFBO0VBQ0U7O0FBR0Y7RUFDRTs7QUFHRjtFQUNFO0VBQ0E7O0FBSUU7RUFDRTs7QUFERjtFQUNFOztBQURGO0VBQ0U7O0FBREY7RUFDRTs7QUFERjtFQUNFOztBQURGO0VBQ0U7O0FBREY7RUFDRTs7QUFERjtFQUNFOztBQURGO0VBQ0U7OztBQzlvQlY7QUFDQTtFQUNFO0VBQ0E7RUFDQTtFQUNBOztBQU1BO0VBRUU7RUFDQTs7QUFHRjtFQUVFOztBQUdGO0VBQ0U7O0FBS0U7RUFDRTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7QUFLTjtFQUNFOztBQUdFO0VBS0U7RUFDQTs7QUFMQTtFQUNJOztBQVNWO0VBQ0U7O0FBR0U7RUFLRTtFQUNBOztBQUxBO0VBQ0U7O0FBU1I7RUFDRTs7QUFHRTtFQUtFO0VBQ0E7O0FBTEE7RUFDRTs7O0FBV1Y7RUFDRTtFQUNBOztBQUdBO0VBQ0U7RUFDQTtFQUNBOztBQUdGO0VBQ0U7RUFDQTtFQUVBOzs7QUFRQTtFQUNFOztBQUVBO0FBQUE7RUFFRTtFQUNBOztBQUlKO0VBQ0U7RUFDQTs7QUFHRjtFQUNFOztBQUtGO0VBQ0U7O0FBRUE7QUFBQTtFQUVFO0VBQ0E7O0FBSUo7RUFDRTtFQUNBOztBQUdGO0VBQ0U7O0FBS0Y7RUFDRTtFQUNBOztBQUVBO0FBQUE7RUFFRTtFQUNBOztBQUlKO0VBQ0U7RUFDQTs7QUFHRjtFQUNFOztBQUtGO0VBQ0U7RUFDQTs7QUFFQTtBQUFBO0VBRUU7RUFDQTs7QUFNQTtFQUNFO0VBQ0E7O0FBS047RUFDRTtFQUNBOztBQUdGO0VBQ0U7OztBQU1OO0VBQ0U7OztBQUlGO0VBQ0U7RUFDQTtFQUNBOzs7QUFJRjtFQUNFO0VBQ0E7OztBQUtBO0VBQ0U7O0FBRUE7RUFDRTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7O0FBSUo7RUFDRTtFQUNBOztBQUlGO0FBQUE7RUFFRTs7O0FBU007RUFDSTs7QUFTSjtFQUNJOztBQVNKO0VBQ0k7OztBQ3BSZDtBQUdBO0FBYUE7RUFDRTs7O0FBR0Y7RUFDRTs7O0FBR0Y7RUFDRTs7O0FBR0Y7RUFDRTs7O0FBS0U7RUFDRTs7QUFHRjtFQUNFOzs7QUFLTjtFQUVFO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7O0FBR0E7RUFDRTs7QUFJRjtFQUNFO0VBQ0E7O0FBR0Y7RUFDRTtFQUNBOztBQUlGO0VBQ0U7O0FBR0Y7RUFDRTtFQUNBO0VBQ0E7RUFDQTtFQUNBOztBQUdGO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7O0FBSUY7RUFDRTs7QUFFQTtFQUNFO0VBQ0E7RUFDQTs7QUFNRjtFQUNFO0VBQ0E7O0FBS0Y7RUFDRTtFQUNBOztBQUdGO0VBQ0U7O0FBS0o7RUFDRTs7QUFFQTtFQUNFOztBQUlKO0VBQ0U7O0FBRUE7RUFDRTs7QUFJSjtFQUNFOztBQU9BO0VBQ0U7RUFDQTtFQUNBOztBQUtGO0VBQ0U7O0FBRUE7RUFDRTs7QUFJSjtFQUNFO0VBQ0E7RUFDQTs7QUFFQTtFQUNFOztBQUVBO0VBQ0U7O0FBT0o7RUFDRTs7QUFHRjtFQUNFOztBQUdGO0VBQ0U7O0FBT0Y7RUFDRTs7QUFNQTtFQUNFO0VBQ0E7O0FBR0Y7RUFDRTtFQUNBOztBQUdGO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7QUFHRjtFQUNFOztBQUlKO0VBQ0U7RUFDQTtFQUNBOztBQUVBO0VBQ0U7O0FBS047RUFHRTs7QUFFQTtFQUNFOztBQU1GO0VBQ0U7RUFDQTs7QUFLRjtFQUNFO0VBQ0E7RUFDQTs7QUFHRjtBQUFBO0VBRUU7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBOztBQUlKO0VBQ0U7RUFDQTtFQUNBOztBQUVBO0VBQ0U7O0FBRUE7RUFDRTs7QUFLTjtFQUNFOztBQU1BO0VBQ0U7O0FBR0Y7RUFDRTs7QUFJSjtFQUNFOztBQUVBO0VBQ0U7O0FBS047RUFDRTtFQUNBO0VBQ0E7RUFNQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7O0FBVEE7RUFDRTs7QUFZSjtFQUlFOztBQUdGO0VBQ0U7O0FBS0E7RUFDRTs7QUFHRjtFQUNFOztBQUtKO0VBQ0U7O0FBRUE7RUFDRTs7QUFLSjtFQUNFOztBQUdGO0VBQ0U7O0FBSUY7RUFDRTs7QUFFQTtBQUFBO0FBQUE7RUFHRTs7QUFLSjtFQUNFO0VBQ0E7O0FBSUY7RUFDRTs7QUFFQTtFQUNFOztBQUlKO0VBQ0U7RUFDQTs7QUFJRTtFQUNFOztBQURGO0VBQ0U7O0FBREY7RUFDRTs7QUFERjtFQUNFOztBQURGO0VBQ0U7O0FBREY7RUFDRTs7QUFERjtFQUNFOztBQURGO0VBQ0U7O0FBREY7RUFDRTs7QUFLTjtFQUNFO0VBQ0E7O0FBR0Y7RUEvWkE7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBOztBQTZaSTtFQUNFO0VBQ0E7O0FBR0Y7RUFDRTs7QUFFQTtFQTdhTjtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7O0FBMmFFO0VBQ0U7RUFDQTs7QUFJQTtFQUNFO0VBQ0E7O0FBS047RUFDRTtFQUNBOztBQUdGO0VBQ0U7O0FBR0Y7RUFDRTs7QUFHRjtFQUNFOztBQUdGO0VBQ0U7O0FBR0Y7RUFDRTs7QUFpQk07RUFDRTtFQUNBOztBQUZGO0VBQ0U7RUFDQTs7QUFGRjtFQUNFO0VBQ0E7O0FBRkY7RUFDRTtFQUNBOzs7QUFhUjtFQUNFOztBQUlKO0VBQ0U7RUFDQTtFQUNBOztBQUdGO0VBQ0U7RUFDQTs7QUFHRjtFQUNFOztBQUdGO0VBQ0U7O0FBR0Y7RUFDRTs7QUFHRjtBQUFBO0VBRUU7RUFDQTs7QUFJQTtFQUNFO0VBQ0E7O0FBR0Y7RUFDRTs7QUFLRjtFQUNFOztBQUtKO0VBQ0U7O0FBSUY7RUFDRTs7QUFHRjtFQUNFOztBQUdGO0VBQ0U7RUFFQTs7QUFJQTtFQUNFOztBQUdGO0VBQ0U7O0FBR0Y7RUFDRTs7O0FBV0Y7RUFDRTs7QUFJSjtFQUNFOztBQUdGO0VBQ0U7RUFDQTs7QUFHRjtFQUNFOztBQUdGO0VBQ0U7O0FBR0Y7RUFDRTs7QUFHRjtFQUNFOztBQUVBO0VBQ0U7RUFDQTs7QUFLSjtFQUNFOztBQUlGO0VBQ0U7O0FBR0Y7RUFDRTtFQUNBOztBQUdGO0VBQ0U7O0FBSUE7RUFDRTs7QUFHRjtFQUNFOzs7QUFXRjtFQUNFOztBQUlKO0VBQ0U7O0FBSUY7RUFDRTs7QUFJRjtFQUNFO0VBQ0E7O0FBR0Y7RUFDRTs7QUFJQTtFQUNFOztBQUdGO0VBQ0U7OztBQVdGO0VBQ0U7O0FBS0o7RUFDRTs7QUFHRjtFQUNFOztBQUdGO0VBQ0U7O0FBRUE7RUFDRTtFQUNBOztBQUtGO0VBQ0U7OztBQVdGO0VBQ0U7OztBQVFKO0VBQ0U7RUFDQTs7QUFFQTtFQUNFOztBQUdGO0VBQ0U7O0FBSUo7RUFDRTs7O0FBS0o7RUFDRTtFQUNBO0VBQ0E7OztBQU1FO0VBQ0U7O0FBTUY7RUFDRTtFQUNBOztBQUlFO0VBQ0U7O0FBREY7RUFDRTs7QUFERjtFQUNFOztBQURGO0VBQ0U7O0FBREY7RUFDRTs7QUFERjtFQUNFOztBQURGO0VBQ0U7O0FBREY7RUFDRTs7QUFERjtFQUNFOztBQUtOO0VBQ0U7O0FBSUE7RUFFRTs7QUFLRjtFQUNFOzs7QUFPUjtFQUNFOzs7QUNyekJGO0VBQ0U7OztBQUlBO0VBREY7SUFFSTs7OztBQVdGO0VBREY7SUFFSTs7OztBQVdGO0VBREY7SUFFSTs7OztBQVdGO0VBREY7SUFFSTs7OztBQVdGO0VBREY7SUFFSTs7OztBQVdGO0VBREY7SUFFSTs7OztBQVdGO0VBREY7SUFFSTs7OztBQVdGO0VBREY7SUFFSTs7OztBQVdGO0VBREY7SUFFSTs7OztBQVdGO0VBREY7SUFFSTs7OztBQVdGO0VBREY7SUFFSTs7OztBQVdGO0VBREY7SUFFSTs7OztBQS9CRjtFQzVHRjtJRDZHSTs7OztBQ3hHRjtFQUNFO0VBQ0E7OztBQ1RKO0FBQUE7QUFBQTtBQW9JQTtFQUNFO0lBQ0U7SUFDQTtJQUNBO0lBQ0E7O0VBR0Y7SUFDRTtJQUNBO0lBQ0E7SUFDQTs7RUFHRjtJQUNFO0lBQ0E7SUFDQTtJQUNBOzs7QUFJSjtFQUNFO0lBQ0U7O0VBR0Y7SUFDRTs7O0FDaktKO0FBQUE7QUFBQTtBQ1dBO0VBQ0U7RUFFQTtFQUNBOzs7QUFHRjtFQUVFO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFHQTtFQUNBO0VDckJBO0VBQ0E7RUR5QkE7RUFDQTs7QUFHQTtFQUNFO0VBQ0E7RUFDQTs7QUFLQTtBQUFBO0VBRUU7O0FBS0Y7RUFDRTs7QUFLRjtFQUNFOztBQUlKO0VGMURBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VFMkRFO0VBQ0E7RUFDQTtFQUNBOztBQVBBO0VBQ0U7O0FBUUY7RUZmRjtFQUNBO0VBQ0E7RUVnQkk7O0FBR0Y7RUY3REY7RUFDQTs7QUUrREk7RUYzREo7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFRW9ETTs7QUFHRjtFRnBCSjtFQUNBOztBRXdCRTtFRnZERjtFQUNBOztBRXlESTtFRnJESjtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VFOENNOztBQU1OO0VBQ0U7RUFDQTtFQUNBOztBQUdGO0VENUdBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUN3R0U7RUFDQTtFQUNBO0VBQ0E7O0FBRUE7RUR6R0Y7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7O0FDb0dFO0VEdkVGO0VBQ0E7RUFDQTtFQUNBOztBQ3dFRTtFRDNGRjtFQUNBOztBQzZGSTtFRHpGSjtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7QUN1Rkk7RURuRUo7RUFDQTtFQUNBOztBQ3dFQTtFQUNFO0VBQ0E7RUFDQTs7QUFFQTtFQUNFOztBQUdGO0VBQ0U7RUFDQTs7QUFHRjtFQUNFO0VBQ0E7RUFDQTtFQUNBOztBQUlBO0VBQ0U7O0FBS047RUFDRTtFQUNBOztBQStFVTtFQUNFO0VBQ0E7O0FBT0Y7RUFDRTtFQUNBOztBQVFOO0VFOVFSOztBQUVBO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBOztBRndRUTtFRW5SVjtFRnNSWTs7QUVwUlo7RUFDRTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7O0FGNlFVO0VBQ0U7O0FBUVY7RUFDRTs7QUFRSTtFQUNFOztBQUdGO0VBQ0U7O0FBR0Y7RUFDRTs7QUFvQkE7RUFDRTtFQUNBOztBQW5CSjtFQUNFOztBQUdGO0VBQ0U7O0FBR0Y7RUFDRTs7QUFRQTtFQUNFO0VBQ0E7O0FBbkJKO0VBQ0U7O0FBR0Y7RUFDRTs7QUFHRjtFQUNFOztBQVFBO0VBQ0U7RUFDQTs7QUFuQko7RUFDRTs7QUFHRjtFQUNFOztBQUdGO0VBQ0U7O0FBUUE7RUFDRTtFQUNBOztBQW5CSjtFQUNFOztBQUdGO0VBQ0U7O0FBR0Y7RUFDRTs7QUFRQTtFQUNFO0VBQ0E7O0FBbkJKO0VBQ0U7O0FBR0Y7RUFDRTs7QUFHRjtFQUNFOztBQVFBO0VBQ0U7RUFDQTs7QUFuQko7RUFDRTs7QUFHRjtFQUNFOztBQUdGO0VBQ0U7O0FBUUE7RUFDRTtFQUNBOztBQW5CSjtFQUNFOztBQUdGO0VBQ0U7O0FBR0Y7RUFDRTs7QUFRQTtFQUNFO0VBQ0E7O0FBOUVGO0VBQ0U7RUFDQTs7QUFPRjtFQUNFO0VBQ0E7O0FBUU47RUU5UVI7O0FBRUE7RUFDRTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7O0FGd1FRO0VFblJWO0VGc1JZOztBRXBSWjtFQUNFO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7QUY2UVU7RUFDRTs7QUFRVjtFQUNFOztBQVFJO0VBQ0U7O0FBR0Y7RUFDRTs7QUFHRjtFQUNFOztBQW9CQTtFQUNFO0VBQ0E7O0FBbkJKO0VBQ0U7O0FBR0Y7RUFDRTs7QUFHRjtFQUNFOztBQVFBO0VBQ0U7RUFDQTs7QUFuQko7RUFDRTs7QUFHRjtFQUNFOztBQUdGO0VBQ0U7O0FBUUE7RUFDRTtFQUNBOztBQW5CSjtFQUNFOztBQUdGO0VBQ0U7O0FBR0Y7RUFDRTs7QUFRQTtFQUNFO0VBQ0E7O0FBbkJKO0VBQ0U7O0FBR0Y7RUFDRTs7QUFHRjtFQUNFOztBQVFBO0VBQ0U7RUFDQTs7QUFuQko7RUFDRTs7QUFHRjtFQUNFOztBQUdGO0VBQ0U7O0FBUUE7RUFDRTtFQUNBOztBQW5CSjtFQUNFOztBQUdGO0VBQ0U7O0FBR0Y7RUFDRTs7QUFRQTtFQUNFO0VBQ0E7O0FBbkJKO0VBQ0U7O0FBR0Y7RUFDRTs7QUFHRjtFQUNFOztBQVFBO0VBQ0U7RUFDQTs7QUE5RUY7RUFDRTtFQUNBOztBQU9GO0VBQ0U7RUFDQTs7QUFRTjtFRTlRUjs7QUFFQTtFQUNFO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7QUZ3UVE7RUVuUlY7RUZzUlk7O0FFcFJaO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBOztBRjZRVTtFQUNFOztBQVFWO0VBQ0U7O0FBUUk7RUFDRTs7QUFHRjtFQUNFOztBQUdGO0VBQ0U7O0FBb0JBO0VBQ0U7RUFDQTs7QUFuQko7RUFDRTs7QUFHRjtFQUNFOztBQUdGO0VBQ0U7O0FBUUE7RUFDRTtFQUNBOztBQW5CSjtFQUNFOztBQUdGO0VBQ0U7O0FBR0Y7RUFDRTs7QUFRQTtFQUNFO0VBQ0E7O0FBbkJKO0VBQ0U7O0FBR0Y7RUFDRTs7QUFHRjtFQUNFOztBQVFBO0VBQ0U7RUFDQTs7QUFuQko7RUFDRTs7QUFHRjtFQUNFOztBQUdGO0VBQ0U7O0FBUUE7RUFDRTtFQUNBOztBQW5CSjtFQUNFOztBQUdGO0VBQ0U7O0FBR0Y7RUFDRTs7QUFRQTtFQUNFO0VBQ0E7O0FBbkJKO0VBQ0U7O0FBR0Y7RUFDRTs7QUFHRjtFQUNFOztBQVFBO0VBQ0U7RUFDQTs7QUFuQko7RUFDRTs7QUFHRjtFQUNFOztBQUdGO0VBQ0U7O0FBUUE7RUFDRTtFQUNBOztBQTlFRjtFQUNFO0VBQ0E7O0FBT0Y7RUFDRTtFQUNBOztBQVFOO0VFOVFSOztBQUVBO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBOztBRndRUTtFRW5SVjtFRnNSWTs7QUVwUlo7RUFDRTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7O0FGNlFVO0VBQ0U7O0FBUVY7RUFDRTs7QUFRSTtFQUNFOztBQUdGO0VBQ0U7O0FBR0Y7RUFDRTs7QUFvQkE7RUFDRTtFQUNBOztBQW5CSjtFQUNFOztBQUdGO0VBQ0U7O0FBR0Y7RUFDRTs7QUFRQTtFQUNFO0VBQ0E7O0FBbkJKO0VBQ0U7O0FBR0Y7RUFDRTs7QUFHRjtFQUNFOztBQVFBO0VBQ0U7RUFDQTs7QUFuQko7RUFDRTs7QUFHRjtFQUNFOztBQUdGO0VBQ0U7O0FBUUE7RUFDRTtFQUNBOztBQW5CSjtFQUNFOztBQUdGO0VBQ0U7O0FBR0Y7RUFDRTs7QUFRQTtFQUNFO0VBQ0E7O0FBbkJKO0VBQ0U7O0FBR0Y7RUFDRTs7QUFHRjtFQUNFOztBQVFBO0VBQ0U7RUFDQTs7QUFuQko7RUFDRTs7QUFHRjtFQUNFOztBQUdGO0VBQ0U7O0FBUUE7RUFDRTtFQUNBOztBQW5CSjtFQUNFOztBQUdGO0VBQ0U7O0FBR0Y7RUFDRTs7QUFRQTtFQUNFO0VBQ0E7O0FBOUVGO0VBQ0U7RUFDQTs7QUFPRjtFQUNFO0VBQ0E7O0FBUU47RUU5UVI7O0FBRUE7RUFDRTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7O0FGd1FRO0VFblJWO0VGc1JZOztBRXBSWjtFQUNFO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7QUY2UVU7RUFDRTs7QUFRVjtFQUNFOztBQVFJO0VBQ0U7O0FBR0Y7RUFDRTs7QUFHRjtFQUNFOztBQW9CQTtFQUNFO0VBQ0E7O0FBbkJKO0VBQ0U7O0FBR0Y7RUFDRTs7QUFHRjtFQUNFOztBQVFBO0VBQ0U7RUFDQTs7QUFuQko7RUFDRTs7QUFHRjtFQUNFOztBQUdGO0VBQ0U7O0FBUUE7RUFDRTtFQUNBOztBQW5CSjtFQUNFOztBQUdGO0VBQ0U7O0FBR0Y7RUFDRTs7QUFRQTtFQUNFO0VBQ0E7O0FBbkJKO0VBQ0U7O0FBR0Y7RUFDRTs7QUFHRjtFQUNFOztBQVFBO0VBQ0U7RUFDQTs7QUFuQko7RUFDRTs7QUFHRjtFQUNFOztBQUdGO0VBQ0U7O0FBUUE7RUFDRTtFQUNBOztBQW5CSjtFQUNFOztBQUdGO0VBQ0U7O0FBR0Y7RUFDRTs7QUFRQTtFQUNFO0VBQ0E7O0FBbkJKO0VBQ0U7O0FBR0Y7RUFDRTs7QUFHRjtFQUNFOztBQVFBO0VBQ0U7RUFDQTs7QUFZVjtFQUNFOztBQU1OO0VBQ0U7O0FBSUY7RUFDRTtFQUNBOztBQUVBO0VBQ0U7OztBQU1OO0VBQ0U7OztBQUlGO0VBQ0U7RUFDQTtFQUNBOzs7QUFJRjtFQUNFOztBQUVBO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7O0FBSUo7QUFBQTtFQUVFO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7O0FBS0E7RUFDRTs7QUFHRjtFQUNFOztBQUdGO0VBQ0U7O0FBR0Y7RUFDRTs7QUFHRjtFQUNFOztBQUdGO0VBQ0U7OztBQUlKO0VBQ0U7OztBQUdGO0VBQ0U7OztBQUlGO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7O0FBRUE7RUFDRTs7O0FBS0Y7QUFBQTtFQUVFOztBQUdGO0VBQ0U7O0FBR0Y7RUFDRTs7O0FBSUo7RUFDRTtFQUNBO0VBQ0E7O0FBRUE7RUFDRTtFQUNBO0VBRUE7RUFDQTs7QUFHRjtFQUNFO0VBQ0E7O0FBR0Y7RUFDRTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBRUE7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBOztBQUdGO0VBQ0U7O0FBR0Y7RUFDRTtFQUNBOztBQUdGO0VBQ0U7O0FBR0Y7RUFDRTtFQUVBO0VBQ0E7OztBQUtKO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBIiwic291cmNlc0NvbnRlbnQiOlsiLyogSWRzIERhdGEgR3JpZCBDb21wb25lbnQgLSBGaWx0ZXIgKi9cbi5pZHMtZGF0YS1ncmlkIHtcbiAgLS1pZHMtYnV0dG9uLWZvcm1hdHRlci1jb2xvci10ZXh0LWRlZmF1bHQ6IHZhcigtLWlkcy1kYXRhLWdyaWQtZmlsdGVyLWljb24tY29sb3IpO1xuICAtLWlkcy1idXR0b24tZm9ybWF0dGVyLWNvbG9yLWJhY2tncm91bmQtaG92ZXI6IHZhcigtLWlkcy1kYXRhLWdyaWQtZmlsdGVyLWljb24tY29sb3ItYmFja2dyb3VuZC1ob3Zlcik7XG4gIC0taWRzLWJ1dHRvbi1mb3JtYXR0ZXItY29sb3ItdGV4dC1ob3ZlcjogdmFyKC0taWRzLWRhdGEtZ3JpZC1maWx0ZXItaWNvbi1jb2xvci1ob3Zlcik7XG4gIC0taWRzLW1lbnUtaXRlbS13aWR0aC1taW46IDE5MHB4O1xuICAtLWlkcy10cmlnZ2VyLWZpZWxkLWJ1dHRvbi1pbnNldC1pbmxpbmUtc3RhcnQ6IDA7XG5cbiAgLmlkcy1kYXRhLWdyaWQtaGVhZGVyLWNlbGwtZmlsdGVyLXdyYXBwZXIgaWRzLWRyb3Bkb3duIHtcbiAgICAtLWlkcy10cmlnZ2VyLWZpZWxkLWJ1dHRvbi1pbnNldC1pbmxpbmUtc3RhcnQ6IC0xcHg7XG5cbiAgICBwYWRkaW5nLXRvcDogM3B4O1xuICB9XG5cbiAgJltkYXRhLXJvdy1oZWlnaHQ9J21kJ10gaWRzLWRyb3Bkb3duLFxuICAmW2RhdGEtcm93LWhlaWdodD0nc20nXSBpZHMtZHJvcGRvd24sXG4gICZbZGF0YS1yb3ctaGVpZ2h0PSd4cyddIGlkcy1kcm9wZG93bixcbiAgJltkYXRhLXJvdy1oZWlnaHQ9J3h4cyddIGlkcy1kcm9wZG93biB7XG4gICAgcGFkZGluZy10b3A6IDA7XG4gIH1cblxuICA6OnNsb3R0ZWQoW3Nsb3RePSdmaWx0ZXItJ10pIHtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB9XG5cbiAgLmlkcy1kYXRhLWdyaWQtaGVhZGVyLWNlbGwtY29udGVudC52ZXJ0aWNhbC1hbGlnbi1jZW50ZXIge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICB0b3A6IGNhbGMoNTAlIC0gdmFyKC0taWRzLXNwYWNlLXNtKSk7XG4gIH1cblxuICAuaWRzLWRhdGEtZ3JpZC1oZWFkZXItY2VsbC1maWx0ZXItd3JhcHBlciB7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBwYWRkaW5nLWlubGluZTogY2FsYyh2YXIoLS1pZHMtc3BhY2UteHMpICsgNHB4KTtcbiAgICBwYWRkaW5nLWJsb2NrLWVuZDogdmFyKC0taWRzLXNwYWNlLXhzKTtcblxuICAgICYuaGlkZGVuIHtcbiAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgfVxuXG4gICAgaWRzLWRyb3Bkb3duW2NvbXBhY3RdIGlkcy1saXN0LWJveC1vcHRpb24ge1xuICAgICAgZm9udC1zaXplOiB1bnNldDtcbiAgICAgIG1pbi1oZWlnaHQ6IHZhcigtLWlkcy1zaXplLTIwKTtcbiAgICB9XG4gIH1cblxuICAuaWRzLWRhdGEtZ3JpZC1oZWFkZXItY2VsbC5pcy11cHBlcmNhc2Uge1xuICAgIC5pZHMtZGF0YS1ncmlkLWhlYWRlci1jZWxsLWZpbHRlci13cmFwcGVyIHtcbiAgICAgIGlkcy1saXN0LWJveC1vcHRpb24sXG4gICAgICBpZHMtZHJvcGRvd246OnBhcnQodHJpZ2dlcmZpZWxkLWlucHV0KSxcbiAgICAgIGlkcy1pbnB1dDo6cGFydChpbnB1dCkge1xuICAgICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIFtkYXRhLWZpbHRlci1jb25kaXRpb25zLWJ1dHRvbl0ge1xuICAgIC0taWRzLWJ1dHRvbi1pY29uLWNvbXBhY3QtaGVpZ2h0OiAyMHB4O1xuICAgIC0taWRzLWJ1dHRvbi1pY29uLWNvbXBhY3Qtd2lkdGg6IDM2cHg7XG5cbiAgICBtYXJnaW4taW5saW5lLWVuZDogMnB4O1xuICAgIG1hcmdpbi1pbmxpbmUtc3RhcnQ6IDA7XG5cbiAgICBpZHMtaWNvbiB7XG4gICAgICBtYXJnaW4taW5saW5lLXN0YXJ0OiAzcHg7XG4gICAgICBtYXJnaW4taW5saW5lLWVuZDogLTNweDtcbiAgICB9XG5cbiAgICBpZHMtaWNvbi1idXR0b24ge1xuICAgICAgcGFkZGluZy1pbmxpbmUtc3RhcnQ6IDA7XG4gICAgfVxuICB9XG59XG4iLCIvKiBJZHMgRGF0YSBHcmlkIENvbXBvbmVudCAtIEhlYWRlciAqL1xuLmlkcy1kYXRhLWdyaWQtaGVhZGVyIHtcbiAgcG9zaXRpb246IHN0aWNreTtcbiAgdG9wOiB2YXIoLS1pZHMtc3BhY2Utbm9uZSk7XG4gIHotaW5kZXg6IDE7IC8vIEhpZ2hlciB0aGFuIGJvZHkgY29sdW1uczsgei1pbmRleCBoaWdoZXIgdGhhbiAyIHdpbGwgYnJlYWsgaWRzLWxvYWRpbmctaW5kaWNhdG9yJ3Mgb3ZlcmxheVxuICBoZWlnaHQ6IDM0cHg7XG5cbiAgJi5pcy1mcm96ZW4ge1xuICAgIHotaW5kZXg6IDI7XG4gIH1cblxuICAmOmhhcyguaWRzLWRhdGEtZ3JpZC1oZWFkZXItY2VsbC1maWx0ZXItd3JhcHBlcikge1xuICAgIGhlaWdodDogNjJweDtcbiAgfVxuXG4gIC8vIEZpbHRlciBidXR0b24gaGVpZ2h0XG4gIC0taWRzLWJ1dHRvbi1mb3JtYXR0ZXItc2l6ZTogMjhweDtcbn1cblxuLy8gSGVhZGVyIENoZWNrYm94XG4uaWRzLWRhdGEtZ3JpZC1oZWFkZXItdGV4dCAuaWRzLWRhdGEtZ3JpZC1jaGVja2JveC1jb250YWluZXIge1xuICB3aWR0aDogMjBweDtcblxuICAmW2Rpc2FibGVkPSd0cnVlJ10ge1xuICAgIGN1cnNvcjogZGVmYXVsdDtcbiAgfVxuXG4gIC5pZHMtZGF0YS1ncmlkLWNoZWNrYm94W2Rpc2FibGVkPSd0cnVlJ10ge1xuICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICAgIG9wYWNpdHk6IHZhcigtLWlkcy1kYXRhLWdyaWQtaGVhZGVyLWNoZWNrYm94LW9wYWNpdHktZGlzYWJsZWQpO1xuICB9XG5cblxuICAuaWRzLWRhdGEtZ3JpZC1jaGVja2JveDpub3QoLmNoZWNrZWQpOm5vdCguaW5kZXRlcm1pbmF0ZSkge1xuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWlkcy1kYXRhLWdyaWQtaGVhZGVyLWNoZWNrYm94LWNvbG9yLWJhY2tncm91bmQpO1xuICAgIGJvcmRlci1jb2xvcjogdmFyKC0taWRzLWRhdGEtZ3JpZC1oZWFkZXItY2hlY2tib3gtY29sb3ItYm9yZGVyKTtcbiAgfVxufVxuXG4vLyBIZWFkZXIgQ2VsbCBBcmVhXG4uaWRzLWRhdGEtZ3JpZC1oZWFkZXItY2VsbCB7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIGJvcmRlci1pbmxpbmUtc3RhcnQ6IDFweCBzb2xpZCB2YXIoLS1pZHMtZGF0YS1ncmlkLWhlYWRlci1jb2xvci1ib3JkZXIpO1xuICBib3JkZXItYmxvY2stZW5kOiAxcHggc29saWQgdmFyKC0taWRzLWRhdGEtZ3JpZC1oZWFkZXItY29sb3ItYm9yZGVyKTtcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0taWRzLWRhdGEtZ3JpZC1oZWFkZXItY29sb3ItYmFja2dyb3VuZC1kZWZhdWx0KTtcbiAgbWluLWhlaWdodDogMjhweDtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuXG4gICY6aGFzKC5pZHMtZGF0YS1ncmlkLWhlYWRlci1jZWxsLWZpbHRlci13cmFwcGVyKSB7XG4gICAgaGVpZ2h0OiA2MnB4O1xuXG4gICAgLmlkcy1kYXRhLWdyaWQtaGVhZGVyLXRleHQge1xuICAgICAgcGFkZGluZy1ibG9jay1lbmQ6IHZhcigtLWlkcy1zcGFjZS0yeHMpO1xuICAgIH1cblxuICAgIC5pZHMtZGF0YS1ncmlkLWhlYWRlci1jZWxsLWZpbHRlci13cmFwcGVyIHtcbiAgICAgIGhlaWdodDogdmFyKC0taWRzLWRhdGEtZ3JpZC1maWx0ZXItaGVpZ2h0KTtcblxuICAgICAgaWRzLW1lbnUtYnV0dG9uIHtcbiAgICAgICAgaGVpZ2h0OiB2YXIoLS1pZHMtZGF0YS1ncmlkLWZpbHRlci1oZWlnaHQpO1xuXG4gICAgICAgICY6OnBhcnQoYnV0dG9uKSB7XG4gICAgICAgICAgaGVpZ2h0OiBpbmhlcml0O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlkcy1kcm9wZG93bjo6cGFydCh0cmlnZ2VyZmllbGQtZmllbGQtY29udGFpbmVyKSxcbiAgICAgIGlkcy1pbnB1dDo6cGFydChmaWVsZC1jb250YWluZXIpLFxuICAgICAgaWRzLXRyaWdnZXItZmllbGQ6OnBhcnQoZmllbGQtY29udGFpbmVyKSB7XG4gICAgICAgIGhlaWdodDogdmFyKC0taWRzLWRhdGEtZ3JpZC1maWx0ZXItaGVpZ2h0KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBIaWRlIGZpcnN0IGJvcmRlclxuICAmOmZpcnN0LWNoaWxkIHtcbiAgICBib3JkZXItaW5saW5lLXN0YXJ0LXdpZHRoOiB2YXIoLS1pZHMtYm9yZGVyLXdpZHRoLW5vbmUpO1xuICB9XG5cbiAgJjpob3Zlci5pcy1hY3Rpb25hYmxlIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1pZHMtZGF0YS1ncmlkLWhlYWRlci1jb2xvci1iYWNrZ3JvdW5kLWhvdmVyKTtcbiAgfVxuXG4gICYuYWxpZ24tY2VudGVyIC5pZHMtZGF0YS1ncmlkLWhlYWRlci1jZWxsLWNvbnRlbnQsXG4gICYuYWxpZ24tY2VudGVyIC5pZHMtZGF0YS1ncmlkLWhlYWRlci1jZWxsLWZpbHRlci13cmFwcGVyIHtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgfVxuXG4gICYuYWxpZ24tcmlnaHQgLmlkcy1kYXRhLWdyaWQtaGVhZGVyLWNlbGwtY29udGVudCxcbiAgJi5hbGlnbi1yaWdodCAuaWRzLWRhdGEtZ3JpZC1oZWFkZXItY2VsbC1maWx0ZXItd3JhcHBlciB7XG4gICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDtcbiAgfVxuXG4gICYuYWxpZ24tcmlnaHQgLmlzLXNvcnRhYmxlIC5pZHMtZGF0YS1ncmlkLWhlYWRlci10ZXh0IHtcbiAgICBwYWRkaW5nLWlubGluZS1lbmQ6IHZhcigtLWlkcy1kYXRhLWdyaWQtcGFkZGluZy1sZyk7XG4gICAgcGFkZGluZy1pbmxpbmUtc3RhcnQ6IDVweDtcbiAgfVxuXG4gICYuYWxpZ24tcmlnaHQgLmlkcy1kYXRhLWdyaWQtaGVhZGVyLWNlbGwtZmlsdGVyLXdyYXBwZXIge1xuICAgIGlkcy1tZW51LWJ1dHRvbiB7XG4gICAgICBtYXJnaW4taW5saW5lLXN0YXJ0OiB2YXIoLS1pZHMtc3BhY2UtM3hzKTtcbiAgICB9XG4gIH1cblxuICAvLyBSZXNpemluZyBDZWxsc1xuICAucmVzaXplciB7XG4gICAgY3Vyc29yOiB2YXIoLS1pZHMtY3Vyc29yLXJlc2l6ZSk7XG4gICAgZGlzcGxheTogaW5saW5lO1xuICAgIGhlaWdodDogMTAwJTtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgbWFyZ2luLWlubGluZS1zdGFydDogY2FsYygxMDAlIC0gNHB4KTtcbiAgICB0b3A6IHZhcigtLWlkcy1zcGFjZS1ub25lKTtcbiAgICB3aWR0aDogNnB4O1xuICAgIHotaW5kZXg6IDI7XG4gIH1cblxuICAvLyBSZW9yZGVyYWJsZSBDZWxsc1xuICAucmVvcmRlcmVyIHtcbiAgICBjdXJzb3I6IHZhcigtLWlkcy1jdXJzb3ItbW92ZSk7XG4gICAgZGlzcGxheTogaW5saW5lO1xuICAgIGhlaWdodDogMzRweDtcbiAgICBvcGFjaXR5OiAwO1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICBpbnNldC1pbmxpbmUtc3RhcnQ6IHZhcigtLWlkcy1zcGFjZS14cyk7XG4gICAgdG9wOiB2YXIoLS1pZHMtc3BhY2Utbm9uZSk7XG4gICAgd2lkdGg6IHZhcigtLWlkcy1zcGFjZS0yeHMpO1xuXG4gICAgaWRzLWljb24ge1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgY29sb3I6IHZhcigtLWlkcy1kYXRhLWdyaWQtaGVhZGVyLWNvbG9yLWljb24pO1xuICAgICAgaW5zZXQtaW5saW5lLXN0YXJ0OiBjYWxjKC0xICogdmFyKC0taWRzLXNwYWNlLXhzKSk7XG4gICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICB0b3A6IGNhbGMoNTAlIC0gOXB4KTtcbiAgICB9XG4gIH1cblxuICAmLmFsaWduLXJpZ2h0IC5yZW9yZGVyZXIge1xuICAgIGluc2V0LWlubGluZS1lbmQ6IDVweDtcbiAgICBpbnNldC1pbmxpbmUtc3RhcnQ6IGluaXRpYWw7XG4gIH1cblxuICAmOmxhc3QtY2hpbGQgLnJlc2l6ZXIge1xuICAgIG1hcmdpbi1pbmxpbmUtc3RhcnQ6IGNhbGMoMTAwJSAtIDZweCk7IC8vIFByZXZlbnRzIHVubmVlZGVkIHNjcm9sbGJhclxuICB9XG5cbiAgJi5kcmFnZ2luZyB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0taWRzLWRhdGEtZ3JpZC1oZWFkZXItZHJhZy1iYWNrZ3JvdW5kLWNvbG9yKSAhaW1wb3J0YW50OyAvLyB0aGlzIGltcG9ydGFudCBpcyBuZWVkZWQgZm9yIGRyYWcgc3R5bGVzIHRvIHdvcmtcbiAgICBib3JkZXItaW5saW5lLXN0YXJ0OiB2YXIoLS1pZHMtc3BhY2Utbm9uZSk7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgbGVmdDogLTEwMDBweDtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiB2YXIoLS1pZHMtc3BhY2Utbm9uZSk7XG4gICAgd2lkdGg6IDExMHB4O1xuICB9XG5cbiAgJi5hY3RpdmUtZHJhZy1jb2x1bW4ge1xuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWlkcy1kYXRhLWdyaWQtaGVhZGVyLWNvbG9yLWJhY2tncm91bmQtZGVmYXVsdC1wbGFjZWhvbGRlci1kcmFnZ2luZyk7XG5cbiAgICAuc29ydC1pbmRpY2F0b3Ige1xuICAgICAgb3BhY2l0eTogMDtcbiAgICB9XG4gIH1cblxuICAmOmhvdmVyIC5yZW9yZGVyZXIge1xuICAgIG9wYWNpdHk6IDE7XG4gIH1cblxuICAvLyBSZW9yZGVyYWJsZSBDZWxsc1xuICAmLmZyb3plbiB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0taWRzLWRhdGEtZ3JpZC1oZWFkZXItY29sb3ItYmFja2dyb3VuZC1kZWZhdWx0KTtcbiAgICBwb3NpdGlvbjogc3RpY2t5O1xuICAgIHotaW5kZXg6IDM7XG4gIH1cblxuICAvLyBDaGFuZ2UgYm9yZGVycyBmb3IgZnJvemVuIGNvbHVtbiBzY3JvbGxpbmdcbiAgJi5mcm96ZW4tbGFzdCB7XG4gICAgYm9yZGVyLWlubGluZS1lbmQ6IDFweCBzb2xpZCB2YXIoLS1pZHMtZGF0YS1ncmlkLWhlYWRlci1jb2xvci1ib3JkZXIpO1xuXG4gICAgKyAuaWRzLWRhdGEtZ3JpZC1oZWFkZXItY2VsbCB7XG4gICAgICBib3JkZXItaW5saW5lLXN0YXJ0LXdpZHRoOiB2YXIoLS1pZHMtYm9yZGVyLXdpZHRoLW5vbmUpO1xuICAgIH1cbiAgfVxuXG4gICYuZnJvemVuLWxlZnQge1xuICAgIHBvc2l0aW9uOiBzdGlja3k7XG4gICAgbGVmdDogdmFyKC0taWRzLXNwYWNlLW5vbmUpO1xuICAgIHotaW5kZXg6IDI7XG5cbiAgICAvLyBEeW5hbWljYWxseSBhZGRlZCB3aWR0aHNcbiAgICBAZm9yICRpIGZyb20gMiB0aHJvdWdoIDEwIHtcbiAgICAgICY6bnRoLW9mLXR5cGUoI3skaX0pIHtcbiAgICAgICAgbGVmdDogdmFyKC0taWRzLWRhdGEtZ3JpZC1mcm96ZW4tY29sdW1uLWxlZnQtd2lkdGgtI3skaX0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gICYuZnJvemVuLXJpZ2h0IHtcbiAgICBwb3NpdGlvbjogc3RpY2t5O1xuICAgIHJpZ2h0OiB2YXIoLS1pZHMtc3BhY2Utbm9uZSk7XG5cbiAgICAvLyBXaWVyZCBjZW50ZXJpbmcgYnVnIChmcm96ZW4gcmlnaHQpXG4gICAgLmlkcy1kYXRhLWdyaWQtaGVhZGVyLWNlbGwtY29udGVudCB7XG4gICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgICB9XG4gIH1cbn1cblxuLmlkcy1kYXRhLWdyaWQtaGVhZGVyLWNlbGwtY29udGVudCB7XG4gIGRpc3BsYXk6IGZsZXg7XG59XG5cbi5pZHMtZGF0YS1ncmlkLWhlYWRlci10ZXh0IHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHBhZGRpbmc6IHZhcigtLWlkcy1kYXRhLWdyaWQtaGVhZGVyLWxnLXBhZGRpbmcpO1xuICBmb250LXdlaWdodDogdmFyKC0taWRzLWZvbnQtd2VpZ2h0LXNlbWlib2xkKTtcbiAgZm9udC1zaXplOiB2YXIoLS1pZHMtZGF0YS1ncmlkLWZvbnQtc2l6ZS1zbSk7XG4gIGNvbG9yOiB2YXIoLS1pZHMtZGF0YS1ncmlkLWhlYWRlci1jb2xvci10ZXh0KTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgdGV4dC1hbGlnbjogbGVmdDtcbiAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gIHVzZXItc2VsZWN0OiBub25lO1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuXG4gIHNtYWxsIHtcbiAgICBmb250LXdlaWdodDogdmFyKC0taWRzLWZvbnQtd2VpZ2h0LW5vcm1hbCk7XG4gICAgZm9udC1zaXplOiB2YXIoLS1pZHMtZGF0YS1ncmlkLWZvbnQtc2l6ZS1zbSk7XG4gIH1cbn1cblxuLmhlYWRlci10ZXh0LWNvbnRlbnQge1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbn1cblxuLy8gUmVxdWlyZWQgaW5kaWNhdG9yIHVzaW5nIENTUyBwc2V1ZG8tZWxlbWVudFxuLmlkcy1kYXRhLWdyaWQtaGVhZGVyLWNlbGwuaXMtcmVxdWlyZWQge1xuICAuaGVhZGVyLXRleHQtY29udGVudDo6YWZ0ZXIsXG4gIC5pZHMtY2hlY2tib3ggLmxhYmVsLXRleHQ6OmFmdGVyIHtcbiAgICBjb250ZW50OiAnKic7XG4gICAgY29sb3I6IHZhcigtLWlkcy1pbnB1dC1yZXF1aXJlZC1pbmRpY2F0b3ItY29sb3ItdGV4dC1kZWZhdWx0KTtcbiAgICBtYXJnaW4taW5saW5lLXN0YXJ0OiB2YXIoLS1pZHMtc3BhY2UtM3hzKTtcbiAgfVxufVxuXG4uaWRzLWRhdGEtZ3JpZC1oZWFkZXItaWNvbiB7XG4gIGFsaWduLXNlbGY6IGNlbnRlcjtcbiAgY29sb3I6IHZhcigtLWlkcy1kYXRhLWdyaWQtaGVhZGVyLWNvbG9yLXRleHQpO1xuICBtYXJnaW4taW5saW5lLXN0YXJ0OiB2YXIoLS1pZHMtc3BhY2UtMnhzKTtcbiAgbWFyZ2luLWJsb2NrLXN0YXJ0OiB2YXIoLS1pZHMtc3BhY2UtMnhzKTtcbn1cblxuLy8gSGVhZGVyIHNvcnQgc3R5bGVzXG4uc29ydC1pbmRpY2F0b3Ige1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBnYXA6IDRweDtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICBoZWlnaHQ6IGNhbGModmFyKC0taWRzLXNwYWNlLWxnKSAtIDJweCk7XG4gIHdpZHRoOiAxOHB4O1xufVxuXG4vLyBTb3J0IEhvdmVyIHN0YXRlc1xuLmlzLXNvcnRhYmxlIHtcbiAgLnNvcnQtaW5kaWNhdG9yIGlkcy1pY29uIHtcbiAgICBjb2xvcjogdmFyKC0taWRzLWRhdGEtZ3JpZC1oZWFkZXItY29sb3ItaWNvbi11bnNvcnRlZCk7XG4gICAgb3BhY2l0eTogMDtcbiAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuM3MgdmFyKC0taWRzLW1vdGlvbi1lYXNlKSAwcztcblxuICAgICY6Zmlyc3QtY2hpbGQge1xuICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgdG9wOiB2YXIoLS1pZHMtc3BhY2UtMnhzKTtcbiAgICAgIHRyYW5zZm9ybTogcm90YXRlKDE4MGRlZyk7XG4gICAgfVxuXG4gICAgJjpsYXN0LWNoaWxkIHtcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgIHRvcDogLTEwcHg7XG4gICAgfVxuICB9XG5cbiAgJjpob3ZlciB7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuXG4gICAgLnNvcnQtaW5kaWNhdG9yIGlkcy1pY29uIHtcbiAgICAgIG9wYWNpdHk6IDE7XG4gICAgfVxuICB9XG59XG5cbi5oZWFkZXItZXhwYW5kZXIge1xuICBkaXNwbGF5OiBub25lO1xuICBtYXgtaGVpZ2h0OiAxOHB4O1xuICBjdXJzb3I6IHZhcigtLWlkcy1jdXJzb3ItcG9pbnRlcik7XG4gIGNvbG9yOiB2YXIoLS1pZHMtZGF0YS1ncmlkLWhlYWRlci1leHBhbmRlci1jb2xvcik7XG4gIG1hcmdpbi1pbmxpbmUtc3RhcnQ6IHZhcigtLWlkcy1zcGFjZS0xMik7XG5cbiAgJjpob3ZlciB7XG4gICAgY29sb3I6IHZhcigtLWlkcy1kYXRhLWdyaWQtaGVhZGVyLWV4cGFuZGVyLWNvbG9yLWFjdGl2ZSk7XG4gIH1cbn1cblxuW2RhdGEtcm93LWhlaWdodD0neHhzJ10gLmhlYWRlci1leHBhbmRlciB7XG4gIHRvcDogdmFyKC0taWRzLXNwYWNlLTN4cyk7XG59XG5cbjpob3N0KFtzaG93LWhlYWRlci1leHBhbmRlcl0pIC5oZWFkZXItZXhwYW5kZXIsXG4uY29sdW1uLWhlYWRlci1leHBhbmRlciAuaGVhZGVyLWV4cGFuZGVyIHtcbiAgZGlzcGxheTogdW5zZXQ7XG59XG5cbi5oYXMtc2VsZWN0aW9uY2hlY2tib3ggLmlkcy1kYXRhLWdyaWQtaGVhZGVyLXRleHQge1xuICBwYWRkaW5nLWlubGluZS1zdGFydDogdmFyKC0taWRzLXNwYWNlLW5vbmUpO1xuICBwYWRkaW5nLWlubGluZS1lbmQ6IHZhcigtLWlkcy1zcGFjZS1ub25lKTtcbn1cblxuLmlzLXNvcnRhYmxlLFxuLmhhcy1oZWFkZXJpY29uIHtcbiAgLmlkcy1kYXRhLWdyaWQtaGVhZGVyLXRleHQge1xuICAgIHBhZGRpbmctaW5saW5lLWVuZDogdmFyKC0taWRzLXNwYWNlLW5vbmUpO1xuICB9XG59XG5cbi8vIEFzY2VuZGluZyBzb3J0XG5bYXJpYS1zb3J0PSdhc2NlbmRpbmcnXSAuaXMtc29ydGFibGUgLnNvcnQtaW5kaWNhdG9yIGlkcy1pY29uIHtcbiAgJjpmaXJzdC1jaGlsZCB7XG4gICAgY29sb3I6IHZhcigtLWlkcy1kYXRhLWdyaWQtaGVhZGVyLWNvbG9yLWljb24tc29ydGVkKTtcbiAgICBvcGFjaXR5OiAxO1xuICB9XG5cbiAgJjpsYXN0LWNoaWxkIHtcbiAgICBvcGFjaXR5OiAxO1xuICB9XG59XG5cbi8vIERlc2NlbmRpbmcgc29ydFxuW2FyaWEtc29ydD0nZGVzY2VuZGluZyddIC5pcy1zb3J0YWJsZSAuc29ydC1pbmRpY2F0b3IgaWRzLWljb24ge1xuICAmOmZpcnN0LWNoaWxkIHtcbiAgICBvcGFjaXR5OiAxO1xuICB9XG5cbiAgJjpsYXN0LWNoaWxkIHtcbiAgICBjb2xvcjogdmFyKC0taWRzLWRhdGEtZ3JpZC1oZWFkZXItY29sb3ItaWNvbi1zb3J0ZWQpO1xuICAgIG9wYWNpdHk6IDE7XG4gIH1cbn1cblxuLy8gRHJhZyBhcnJvd3MgZm9yIHNvcnRpbmdcbi5pZHMtZGF0YS1ncmlkLXNvcnQtYXJyb3dzIHtcbiAgZGlzcGxheTogbm9uZTtcbiAgaGVpZ2h0OiAzNHB4O1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHotaW5kZXg6IDE7XG5cbiAgJjo6YmVmb3JlLFxuICAmOjphZnRlciB7XG4gICAgYm9yZGVyLWxlZnQ6IDVweCBzb2xpZCB0cmFuc3BhcmVudDtcbiAgICBib3JkZXItcmlnaHQ6IDVweCBzb2xpZCB0cmFuc3BhcmVudDtcbiAgICBjb250ZW50OiAnJztcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgaGVpZ2h0OiAwO1xuICAgIGxlZnQ6IC01cHg7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHdpZHRoOiAwO1xuICB9XG5cbiAgJjo6YmVmb3JlIHtcbiAgICBib3JkZXItdG9wOiA1cHggc29saWQgdmFyKC0taWRzLWRhdGEtZ3JpZC1oZWFkZXItZHJhZy1hcnJvdy1jb2xvci1iYWNrZ3JvdW5kKTtcbiAgICB0b3A6IC02cHg7XG4gIH1cblxuICAmOjphZnRlciB7XG4gICAgYm9yZGVyLWJvdHRvbTogNXB4IHNvbGlkIHZhcigtLWlkcy1kYXRhLWdyaWQtaGVhZGVyLWRyYWctYXJyb3ctY29sb3ItYmFja2dyb3VuZCk7XG4gICAgYm90dG9tOiAtOXB4O1xuICB9XG59XG5cbi8vIFN0YW5kYWxvbmUgQ3NzXG50ci5pZHMtZGF0YS1ncmlkLWhlYWRlciB7XG4gIHBvc2l0aW9uOiBpbml0aWFsO1xufVxuXG50aC5pZHMtZGF0YS1ncmlkLWhlYWRlci1jZWxsIHtcbiAgZGlzcGxheTogdGFibGUtY2VsbDtcbn1cblxuLy8gTGlzdCBTdHlsZSBGZWF0dXJlXG4uaWRzLWRhdGEtZ3JpZC5pcy1saXN0LXN0eWxlIHtcbiAgLy8gQ2hhbmdlIEhlYWRlciBDb2xvclxuICAuaWRzLWRhdGEtZ3JpZC1oZWFkZXItY2VsbCB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0taWRzLWRhdGEtZ3JpZC1saXN0LWhlYWRlci1jb2xvci1iYWNrZ3JvdW5kKTtcbiAgICBib3JkZXItY29sb3I6IHZhcigtLWlkcy1kYXRhLWdyaWQtbGlzdC1oZWFkZXItY29sb3ItYm9yZGVyKTtcbiAgfVxuXG4gIC5pZHMtZGF0YS1ncmlkLWhlYWRlci10ZXh0IHtcbiAgICBjb2xvcjogdmFyKC0taWRzLWRhdGEtZ3JpZC1saXN0LWhlYWRlci1jb2xvci10ZXh0KTtcbiAgfVxuXG4gIC8vIENoYW5nZSBTb3J0IEljb24gQ29sb3JzXG4gIC5pcy1zb3J0YWJsZSB7XG4gICAgaWRzLWljb24ge1xuICAgICAgY29sb3I6IHZhcigtLWlkcy1kYXRhLWdyaWQtaGVhZGVyLWNvbG9yLWljb24tdW5zb3J0ZWQpO1xuICAgIH1cbiAgfVxuXG4gIFthcmlhLXNvcnQ9J2Rlc2NlbmRpbmcnXSAuaXMtc29ydGFibGUgaWRzLWljb246bGFzdC1jaGlsZCxcbiAgW2FyaWEtc29ydD0nYXNjZW5kaW5nJ10gLmlzLXNvcnRhYmxlIGlkcy1pY29uOmZpcnN0LWNoaWxkICB7XG4gICAgY29sb3I6IHZhcigtLWlkcy1kYXRhLWdyaWQtbGlzdC1oZWFkZXItY29sb3ItaWNvbi11bnNvcnRlZClcbiAgfVxuXG4gIC8vIENoYW5nZSBIZWFkZXIgQ2hlY2tib3hcbiAgLmlkcy1kYXRhLWdyaWQtaGVhZGVyLXRleHQgLmlkcy1kYXRhLWdyaWQtY2hlY2tib3gtY29udGFpbmVyIHtcbiAgICAuaWRzLWRhdGEtZ3JpZC1jaGVja2JveDpub3QoLmNoZWNrZWQpOm5vdCguaW5kZXRlcm1pbmF0ZSkge1xuICAgICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1pZHMtZGF0YS1ncmlkLWxpc3QtaGVhZGVyLWNoZWNrYm94LWNvbG9yLWJhY2tncm91bmQpO1xuICAgIH1cbiAgfVxufVxuXG4vLyBVc2VkIGZvciBGcm96ZW4gQ29sdW1uc1xuLmlkcy1kYXRhLWdyaWQtYm9keSB7XG4gIG1pbi13aWR0aDogZml0LWNvbnRlbnQ7XG59XG5cbi8vIEFkanVzdCBmb3IgUm93IEhlaWdodHMgKGxhcmdlIGlzIGRlZmF1bHQpXG4uaWRzLWRhdGEtZ3JpZCB7XG4gICZbZGF0YS1yb3ctaGVpZ2h0PSdtZCddIHtcbiAgICAuaWRzLWRhdGEtZ3JpZC1oZWFkZXItdGV4dCB7XG4gICAgICBwYWRkaW5nOiB2YXIoLS1pZHMtZGF0YS1ncmlkLWhlYWRlci1tZC1wYWRkaW5nKTtcbiAgICB9XG5cbiAgICAucmVvcmRlcmVyIGlkcy1pY29uIHtcbiAgICAgIGluc2V0LWlubGluZS1zdGFydDogLTExcHg7XG4gICAgfVxuXG4gICAgLnNvcnQtaW5kaWNhdG9yIHtcbiAgICAgIG1hcmdpbi1pbmxpbmUtc3RhcnQ6IC04cHg7XG4gICAgfVxuXG4gICAgLmlkcy1kYXRhLWdyaWQtaGVhZGVyLWNlbGwuYWxpZ24tcmlnaHQgLnJlb3JkZXJlciB7XG4gICAgICBpbnNldC1pbmxpbmUtZW5kOiAzcHg7XG4gICAgfVxuXG4gICAgLmlkcy1kYXRhLWdyaWQtaGVhZGVyLWNlbGw6aGFzKC5pZHMtZGF0YS1ncmlkLWhlYWRlci1jZWxsLWZpbHRlci13cmFwcGVyKSAuaWRzLWRhdGEtZ3JpZC1oZWFkZXItdGV4dCB7XG4gICAgICBwYWRkaW5nLWJsb2NrLWVuZDogdmFyKC0taWRzLXNwYWNlLTJ4cyk7XG4gICAgfVxuICB9XG5cbiAgJltkYXRhLXJvdy1oZWlnaHQ9J3NtJ10ge1xuICAgIC5pZHMtZGF0YS1ncmlkLWhlYWRlci10ZXh0IHtcbiAgICAgIHBhZGRpbmc6IHZhcigtLWlkcy1kYXRhLWdyaWQtaGVhZGVyLXNtLXBhZGRpbmcpO1xuICAgIH1cblxuICAgIC5yZW9yZGVyZXIge1xuICAgICAgZGlzcGxheTogbm9uZTtcbiAgICB9XG5cbiAgICAuc29ydC1pbmRpY2F0b3Ige1xuICAgICAgbWFyZ2luLWlubGluZS1zdGFydDogLTRweDtcbiAgICB9XG5cbiAgICAuaWRzLWRhdGEtZ3JpZC1oZWFkZXItY2VsbDpoYXMoLmlkcy1kYXRhLWdyaWQtaGVhZGVyLWNlbGwtZmlsdGVyLXdyYXBwZXIpIHtcbiAgICAgIC5pZHMtZGF0YS1ncmlkLWhlYWRlci10ZXh0IHtcbiAgICAgICAgcGFkZGluZy1ibG9jay1lbmQ6IHZhcigtLWlkcy1zcGFjZS0yeHMpO1xuICAgICAgfVxuXG4gICAgICAuaWRzLWRhdGEtZ3JpZC1oZWFkZXItY2VsbC1maWx0ZXItd3JhcHBlciB7XG4gICAgICAgIHBhZGRpbmctaW5saW5lOiB2YXIoLS1pZHMtc3BhY2UteHMpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgJltkYXRhLXJvdy1oZWlnaHQ9J3hzJ10ge1xuICAgIC5pZHMtZGF0YS1ncmlkLWhlYWRlciB7XG4gICAgICBoZWlnaHQ6IDMwcHg7XG5cbiAgICAgICY6aGFzKC5pZHMtZGF0YS1ncmlkLWhlYWRlci1jZWxsLWZpbHRlci13cmFwcGVyKSB7XG4gICAgICAgIGhlaWdodDogNThweDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAuaWRzLWRhdGEtZ3JpZC1oZWFkZXItY2VsbCB7XG4gICAgICBtaW4taGVpZ2h0OiAzMHB4O1xuICAgIH1cblxuICAgIC5pZHMtZGF0YS1ncmlkLWhlYWRlci1jZWxsOmhhcyguaWRzLWRhdGEtZ3JpZC1oZWFkZXItY2VsbC1maWx0ZXItd3JhcHBlcikge1xuICAgICAgaGVpZ2h0OiA1OHB4O1xuXG4gICAgICAuaWRzLWRhdGEtZ3JpZC1oZWFkZXItdGV4dCB7XG4gICAgICAgIHBhZGRpbmctYmxvY2stZW5kOiB2YXIoLS1pZHMtc3BhY2UtMnhzKTtcbiAgICAgIH1cblxuICAgICAgLmlkcy1kYXRhLWdyaWQtaGVhZGVyLWNlbGwtZmlsdGVyLXdyYXBwZXIge1xuICAgICAgICBwYWRkaW5nLWlubGluZTogdmFyKC0taWRzLXNwYWNlLTJ4cyk7XG4gICAgICAgIHBhZGRpbmctYmxvY2stZW5kOiA2cHg7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLmlkcy1kYXRhLWdyaWQtaGVhZGVyLXRleHQge1xuICAgICAgcGFkZGluZzogdmFyKC0taWRzLWRhdGEtZ3JpZC1oZWFkZXIteHMtcGFkZGluZyk7XG4gICAgfVxuXG4gICAgLnJlb3JkZXJlciB7XG4gICAgICBkaXNwbGF5OiBub25lO1xuICAgIH1cblxuICAgIC5zb3J0LWluZGljYXRvciB7XG4gICAgICBtYXJnaW4taW5saW5lLXN0YXJ0OiAtMnB4O1xuICAgICAgbWFyZ2luLWlubGluZS1lbmQ6IC0ycHg7XG4gICAgICBtYXJnaW4tYmxvY2stc3RhcnQ6IC0zcHg7XG4gICAgfVxuXG4gICAgLmlkcy1kYXRhLWdyaWQtY2hlY2tib3gtY29udGFpbmVyIHtcbiAgICAgIHBhZGRpbmctdG9wOiB2YXIoLS1pZHMtc3BhY2UtM3hzKTtcbiAgICB9XG5cbiAgICAuaWRzLWRhdGEtZ3JpZC1oZWFkZXItY2VsbC5hbGlnbi1yaWdodCAuaXMtc29ydGFibGUgLmlkcy1kYXRhLWdyaWQtaGVhZGVyLXRleHQge1xuICAgICAgcGFkZGluZy1pbmxpbmUtZW5kOiB2YXIoLS1pZHMtZGF0YS1ncmlkLXBhZGRpbmcteHMpO1xuICAgICAgcGFkZGluZy1pbmxpbmUtc3RhcnQ6IDVweDtcbiAgICB9XG4gIH1cblxuICAmW2RhdGEtcm93LWhlaWdodD0neHhzJ10ge1xuICAgIC5pZHMtZGF0YS1ncmlkLWhlYWRlciB7XG4gICAgICBoZWlnaHQ6IDMwcHg7XG5cbiAgICAgICY6aGFzKC5pZHMtZGF0YS1ncmlkLWhlYWRlci1jZWxsLWZpbHRlci13cmFwcGVyKSB7XG4gICAgICAgIGhlaWdodDogNThweDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAuaWRzLWRhdGEtZ3JpZC1oZWFkZXItY2VsbCB7XG4gICAgICBtaW4taGVpZ2h0OiAzMHB4O1xuICAgIH1cblxuICAgIC5pZHMtZGF0YS1ncmlkLWhlYWRlci1jZWxsOmhhcyguaWRzLWRhdGEtZ3JpZC1oZWFkZXItY2VsbC1maWx0ZXItd3JhcHBlcikge1xuICAgICAgaGVpZ2h0OiA1OHB4O1xuXG4gICAgICAuaWRzLWRhdGEtZ3JpZC1oZWFkZXItdGV4dCB7XG4gICAgICAgIHBhZGRpbmc6IHZhcigtLWlkcy1zcGFjZS0yeHMpO1xuICAgICAgICBwYWRkaW5nLWJsb2NrLXN0YXJ0OiA2cHg7XG4gICAgICB9XG5cbiAgICAgIC5pZHMtZGF0YS1ncmlkLWhlYWRlci1jZWxsLWZpbHRlci13cmFwcGVyIHtcbiAgICAgICAgcGFkZGluZy1pbmxpbmU6IHZhcigtLWlkcy1zcGFjZS0yeHMpO1xuICAgICAgICBwYWRkaW5nLWJsb2NrLWVuZDogNnB4O1xuICAgICAgfVxuICAgIH1cblxuICAgIC5pZHMtZGF0YS1ncmlkLWhlYWRlci10ZXh0IHtcbiAgICAgIHBhZGRpbmc6IHZhcigtLWlkcy1kYXRhLWdyaWQtaGVhZGVyLXh4cy1wYWRkaW5nKTtcbiAgICB9XG5cbiAgICAucmVvcmRlcmVyIHtcbiAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgfVxuXG4gICAgLnNvcnQtaW5kaWNhdG9yIHtcbiAgICAgIG1hcmdpbi1pbmxpbmUtc3RhcnQ6IHZhcigtLWlkcy1zcGFjZS1ub25lKTtcbiAgICAgIG1hcmdpbi1ibG9jay1zdGFydDogLTFweDtcbiAgICAgIGhlaWdodDogMjJweDtcblxuICAgICAgPiBpZHMtaWNvbjpmaXJzdC1jaGlsZCB7XG4gICAgICAgIHRvcDogM3B4O1xuICAgICAgfVxuXG4gICAgICBpZHMtaWNvbjpsYXN0LWNoaWxkIHtcbiAgICAgICAgdG9wOiAtMTFweDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAuYWxpZ24tcmlnaHQgLnNvcnQtaW5kaWNhdG9yIHtcbiAgICAgIG1hcmdpbi1pbmxpbmUtc3RhcnQ6IHZhcigtLWlkcy1zcGFjZS1ub25lKTtcbiAgICB9XG5cbiAgICAuaWRzLWRhdGEtZ3JpZC1oZWFkZXItdGV4dCAuaWRzLWRhdGEtZ3JpZC1jaGVja2JveC1jb250YWluZXIge1xuICAgICAgcGFkZGluZy10b3A6IDNweDtcbiAgICB9XG5cbiAgICAuaWRzLWRhdGEtZ3JpZC1oZWFkZXItY2VsbC5hbGlnbi1yaWdodCAuaXMtc29ydGFibGUgLmlkcy1kYXRhLWdyaWQtaGVhZGVyLXRleHQge1xuICAgICAgcGFkZGluZy1pbmxpbmUtZW5kOiAzcHg7XG4gICAgICBwYWRkaW5nLWlubGluZS1zdGFydDogM3B4O1xuICAgIH1cblxuICAgIC8vIEZpbHRlciBBZGp1c3RtZW50c1xuICAgIGlkcy1pbnB1dCxcbiAgICBpZHMtbWVudS1idXR0b24sXG4gICAgaWRzLXRyaWdnZXItZmllbGQsXG4gICAgaWRzLWRyb3Bkb3duIHtcbiAgICAgIC0taWRzLWlucHV0LWhlaWdodC0xMDogMjRweDtcbiAgICB9XG5cbiAgICBpZHMtZHJvcGRvd24ge1xuICAgICAgLS1pZHMtaW5wdXQtZm9udC1zaXplLXNtOiB2YXIoLS1pZHMtaW5wdXQtZm9udC1zaXplLXhzKTtcbiAgICB9XG5cbiAgICAuaWRzLWRhdGEtZ3JpZC1oZWFkZXItY2VsbC1maWx0ZXItd3JhcHBlciB7XG4gICAgICBwYWRkaW5nLWlubGluZS1zdGFydDogY2FsYyh2YXIoLS1pZHMtZGF0YS1ncmlkLXBhZGRpbmcteHhzKSArIDJweCk7XG4gICAgICBwYWRkaW5nLWlubGluZS1lbmQ6IGNhbGModmFyKC0taWRzLWRhdGEtZ3JpZC1wYWRkaW5nLXh4cykgKyAycHgpO1xuICAgICAgcGFkZGluZy1ibG9jay1lbmQ6IGNhbGModmFyKC0taWRzLWRhdGEtZ3JpZC1wYWRkaW5nLXh4cykgLSAxcHgpO1xuICAgIH1cbiAgfVxufVxuXG4vLyBDb2x1bW4gc2VsZWN0aW9uIGhlYWRlclxuLmlkcy1kYXRhLWdyaWQgLmhhcy1jb2wtc2VsZWN0aW9uIHtcbiAgLmlkcy1kYXRhLWdyaWQtaGVhZGVyLWNlbGw6bm90KFtjb2x1bW4taWQ9J3NlbGVjdGlvbkNoZWNrYm94J10pIC5pZHMtZGF0YS1ncmlkLWhlYWRlci1jZWxsLWNvbnRlbnQge1xuICAgIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDtcblxuICAgIC5pZHMtZGF0YS1ncmlkLWhlYWRlci10ZXh0IC5pZHMtY2hlY2tib3ggLmxhYmVsLXRleHQge1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuICAgICAgd2lkdGg6IDgwJTtcbiAgICB9XG5cbiAgICAmLmlzLXNvcnRhYmxlLFxuICAgICYuaXMtcmVvcmRlcmFibGUge1xuICAgICAgLmlkcy1kYXRhLWdyaWQtaGVhZGVyLXRleHQgLmlkcy1jaGVja2JveCAubGFiZWwtdGV4dCB7XG4gICAgICAgIHdpZHRoOiA3MCU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgJi5pcy1zb3J0YWJsZS5pcy1yZW9yZGVyYWJsZSB7XG4gICAgICAuaWRzLWRhdGEtZ3JpZC1oZWFkZXItdGV4dCAuaWRzLWNoZWNrYm94IC5sYWJlbC10ZXh0IHtcbiAgICAgICAgd2lkdGg6IDYwJTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAuc29ydC1pbmRpY2F0b3Ige1xuICAgIG1hcmdpbi1pbmxpbmUtc3RhcnQ6IGF1dG87XG4gIH1cbn1cblxuLy8gSGFuZGxlIFJUTFxuOmhvc3QoW2Rpcj0ncnRsJ10pIHtcbiAgLy8gTmVnYXRlIHJpZ2h0IGFsaWdubWVudFxuICAuaWRzLWRhdGEtZ3JpZC1oZWFkZXItY2VsbCB7XG4gICAgJi5hbGlnbi1yaWdodCAuaWRzLWRhdGEtZ3JpZC1oZWFkZXItY2VsbC1jb250ZW50IHtcbiAgICAgIGRpcmVjdGlvbjogbHRyO1xuICAgIH1cblxuICAgICY6bGFzdC1jaGlsZCB7XG4gICAgICBib3JkZXItaW5saW5lLWVuZC13aWR0aDogdmFyKC0taWRzLWJvcmRlci13aWR0aC1ub25lKTtcbiAgICB9XG5cbiAgICAmLmZyb3plbi1sZWZ0IHtcbiAgICAgIHBvc2l0aW9uOiBzdGlja3k7XG4gICAgICByaWdodDogdmFyKC0taWRzLXNwYWNlLW5vbmUpO1xuXG4gICAgICAvLyBEeW5hbWljYWxseSBhZGRlZCB3aWR0aHNcbiAgICAgIEBmb3IgJGkgZnJvbSAyIHRocm91Z2ggMTAge1xuICAgICAgICAmOm50aC1vZi10eXBlKCN7JGl9KSB7XG4gICAgICAgICAgcmlnaHQ6IHZhcigtLWlkcy1kYXRhLWdyaWQtZnJvemVuLWNvbHVtbi1sZWZ0LXdpZHRoLSN7JGl9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwiLyogSWRzIERhdGEgR3JpZCBDb21wb25lbnQgLSBSb3dzICovXG4uaWRzLWRhdGEtZ3JpZC1yb3cge1xuICBkaXNwbGF5OiBncmlkO1xuICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHZhcigtLWlkcy1kYXRhLWdyaWQtY29sdW1uLXdpZHRocyk7IC8vIEZpbGxlZCBpbiBkeW5hbWljYWxseVxuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiBpbmhlcml0O1xuXG4gICYuaXMtZHJhZy1zdGFydCB7XG4gICAgLy8gdmlzaWJpbGl0eTogaGlkZGVuO1xuICB9XG5cbiAgJi5pcy1kcmFnLXRhcmdldCB7XG4gICAgLy8gdmlzaWJpbGl0eTogaGlkZGVuO1xuICAgIG1hcmdpbi10b3A6IDUwcHg7XG4gICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIHZhcigtLWlkcy1kYXRhLWdyaWQtY2VsbC1jb2xvci1ib3JkZXIpO1xuICB9XG5cbiAgJi5zZWxlY3RlZDpub3QoLm1peGVkKSAuaWRzLWRhdGEtZ3JpZC1jZWxsLFxuICAmLmFjdGl2YXRlZCAuaWRzLWRhdGEtZ3JpZC1jZWxsIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1pZHMtZGF0YS1ncmlkLXJvdy1jb2xvci1iYWNrZ3JvdW5kLXNlbGVjdGVkKTtcbiAgfVxuXG4gICZbaGlkZGVuXSB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxuXG4gICZbcGFydCo9J3Jvdy0nXSB7XG4gICAgJjpub3QoLnNlbGVjdGVkKSB7XG4gICAgICAuaWRzLWRhdGEtZ3JpZC1jZWxsOmZpcnN0LWNoaWxkOjpiZWZvcmUge1xuICAgICAgICBib3JkZXItc3R5bGU6IHNvbGlkO1xuICAgICAgICBib3JkZXItd2lkdGg6IDVweDtcbiAgICAgICAgY29udGVudDogXCJcIjtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICB6LWluZGV4OiAxO1xuICAgICAgICBtYXJnaW46IDJweDtcbiAgICAgICAgdG9wOiAwO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gICZbcGFydD0ncm93LW5ldyddIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1pZHMtZGF0YS1ncmlkLXJvdy1jb2xvci1iYWNrZ3JvdW5kLW5ldyk7XG5cbiAgICAmOm5vdCguc2VsZWN0ZWQpIHtcbiAgICAgIC5pZHMtZGF0YS1ncmlkLWNlbGwge1xuICAgICAgICAmOmZpcnN0LWNoaWxkOjpiZWZvcmUge1xuICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1pZHMtZGF0YS1ncmlkLXJvdy1jb2xvci1ib3JkZXItbmV3KSB0cmFuc3BhcmVudCB0cmFuc3BhcmVudCB2YXIoLS1pZHMtZGF0YS1ncmlkLXJvdy1jb2xvci1ib3JkZXItbmV3KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWlkcy1kYXRhLWdyaWQtcm93LWNvbG9yLWJhY2tncm91bmQtbmV3KTtcbiAgICAgICAgY29sb3I6IHZhcigtLWlkcy1kYXRhLWdyaWQtY2VsbC1jb2xvci10ZXh0LXN0YXRlcy1kZWZhdWx0KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAmW3BhcnQ9J3Jvdy1yZW1vdmVkJ10ge1xuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWlkcy1kYXRhLWdyaWQtcm93LWNvbG9yLWJhY2tncm91bmQtcmVtb3ZlZCk7XG5cbiAgICAmOm5vdCguc2VsZWN0ZWQpIHtcbiAgICAgIC5pZHMtZGF0YS1ncmlkLWNlbGwge1xuICAgICAgICAmOmZpcnN0LWNoaWxkOjpiZWZvcmUge1xuICAgICAgICAgIGJvcmRlci1jb2xvcjogdmFyKC0taWRzLWRhdGEtZ3JpZC1yb3ctY29sb3ItYm9yZGVyLXJlbW92ZWQpIHRyYW5zcGFyZW50IHRyYW5zcGFyZW50IHZhcigtLWlkcy1kYXRhLWdyaWQtcm93LWNvbG9yLWJvcmRlci1yZW1vdmVkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWlkcy1kYXRhLWdyaWQtcm93LWNvbG9yLWJhY2tncm91bmQtcmVtb3ZlZCk7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1pZHMtZGF0YS1ncmlkLWNlbGwtY29sb3ItdGV4dC1zdGF0ZXMtZGVmYXVsdCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgJltwYXJ0PSdyb3ctZXJyb3InXSB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0taWRzLWRhdGEtZ3JpZC1yb3ctY29sb3ItYmFja2dyb3VuZC1lcnJvcik7XG5cbiAgICAmOm5vdCguc2VsZWN0ZWQpIHtcbiAgICAgIC5pZHMtZGF0YS1ncmlkLWNlbGwge1xuICAgICAgICAmOmZpcnN0LWNoaWxkOjpiZWZvcmUge1xuICAgICAgICAgIGJvcmRlci1jb2xvcjogdmFyKC0taWRzLWRhdGEtZ3JpZC1yb3ctY29sb3ItYm9yZGVyLWVycm9yKSB0cmFuc3BhcmVudCB0cmFuc3BhcmVudCB2YXIoLS1pZHMtZGF0YS1ncmlkLXJvdy1jb2xvci1ib3JkZXItZXJyb3IpO1xuICAgICAgICB9XG5cbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0taWRzLWRhdGEtZ3JpZC1yb3ctY29sb3ItYmFja2dyb3VuZC1lcnJvcik7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1pZHMtZGF0YS1ncmlkLWNlbGwtY29sb3ItdGV4dC1zdGF0ZXMtZGVmYXVsdCk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8vIEdyb3VwZWQgUm93c1xuLmlkcy1kYXRhLWdyaWQtcm93LmlzLWdyb3VwLXJvdyB7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWlkcy1kYXRhLWdyaWQtcm93LWdyb3VwZWQtY29sb3ItYmFja2dyb3VuZCk7XG4gIGdyaWQtdGVtcGxhdGUtY29sdW1uczogMTAwJTtcblxuXG4gIC5pZHMtZGF0YS1ncmlkLWNlbGwge1xuICAgIGNvbG9yOiB2YXIoLS1pZHMtZGF0YS1ncmlkLXJvdy1ncm91cGVkLWNvbG9yLXRleHQsIHJlZCk7XG4gICAgZm9udC13ZWlnaHQ6IHZhcigtLWlkcy1kYXRhLWdyaWQtcm93LWdyb3VwZWQtZm9udC13ZWlnaHQsIDYwMCk7XG4gICAgYm9yZGVyLWlubGluZS1zdGFydDogMDtcbiAgfVxuXG4gIGlkcy1idXR0b24ge1xuICAgIC0taWRzLWJ1dHRvbi10ZXJ0aWFyeS1jb2xvci1iYWNrZ3JvdW5kLWhvdmVyOiB0cmFuc3BhcmVudDtcbiAgICAtLWlkcy1idXR0b24tdGVydGlhcnktY29sb3ItYm9yZGVyLWhvdmVyOiB0cmFuc3BhcmVudDtcblxuICAgIHBhZGRpbmc6IDAgMnB4O1xuICB9XG59XG5cbi8vIFJvdyBIZWlnaHQgRmVhdHVyZSB3aXRoIEZvcm1hdHRlcnMgc3BhY2luZ1xuLmlkcy1kYXRhLWdyaWQge1xuICAvLyBMYXJnZSBieSBkZWZhdWx0XG4gICZbZGF0YS1yb3ctaGVpZ2h0PSdtZCddIHtcbiAgICAuaWRzLWRhdGEtZ3JpZC1jZWxsIHtcbiAgICAgIGhlaWdodDogdmFyKC0taWRzLWRhdGEtZ3JpZC1yb3ctaGVpZ2h0LW1kKTtcblxuICAgICAgLnRleHQtZWxsaXBzaXMsXG4gICAgICBpZHMtYmFkZ2Uge1xuICAgICAgICBwYWRkaW5nLWlubGluZS1zdGFydDogdmFyKC0taWRzLWRhdGEtZ3JpZC1wYWRkaW5nLW1kKTtcbiAgICAgICAgcGFkZGluZy1pbmxpbmUtZW5kOiB2YXIoLS1pZHMtZGF0YS1ncmlkLXBhZGRpbmctbWQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC5pZHMtZGF0YS1ncmlkLWNlbGw6bm90KC5hbGlnbi1jZW50ZXIpIC5pZHMtZGF0YS1ncmlkLWhlYWRlci1jZWxsLWNvbnRlbnQ6bm90KC52ZXJ0aWNhbC1hbGlnbi1jZW50ZXIpIC5pZHMtZGF0YS1ncmlkLWhlYWRlci10ZXh0IHtcbiAgICAgIHBhZGRpbmctaW5saW5lLXN0YXJ0OiB2YXIoLS1pZHMtZGF0YS1ncmlkLXBhZGRpbmctbWQpO1xuICAgICAgdHJhbnNpdGlvbjogcGFkZGluZyB2YXIoLS1pZHMtbW90aW9uLWR1cmF0aW9uKSB2YXIoLS1pZHMtbW90aW9uLWVhc2UpO1xuICAgIH1cblxuICAgIC5pZHMtZGF0YS1ncmlkLWNlbGw6bm90KC5hbGlnbi1jZW50ZXIpIC5pZHMtZGF0YS1ncmlkLWhlYWRlci1jZWxsOmhvdmVyIC5pZHMtZGF0YS1ncmlkLWhlYWRlci1jZWxsLWNvbnRlbnQ6bm90KC52ZXJ0aWNhbC1hbGlnbi1jZW50ZXIpLmlzLXJlb3JkZXJhYmxlIC5pZHMtZGF0YS1ncmlkLWhlYWRlci10ZXh0IHtcbiAgICAgIHBhZGRpbmctaW5saW5lLXN0YXJ0OiB2YXIoLS1pZHMtZGF0YS1ncmlkLXBhZGRpbmctbWQpO1xuICAgIH1cbiAgfVxuXG4gICZbZGF0YS1yb3ctaGVpZ2h0PSdzbSddIHtcbiAgICAuaWRzLWRhdGEtZ3JpZC1jZWxsIHtcbiAgICAgIGhlaWdodDogdmFyKC0taWRzLWRhdGEtZ3JpZC1yb3ctaGVpZ2h0LXNtKTtcblxuICAgICAgLnRleHQtZWxsaXBzaXMsXG4gICAgICBpZHMtYmFkZ2Uge1xuICAgICAgICBwYWRkaW5nLWlubGluZS1zdGFydDogdmFyKC0taWRzLWRhdGEtZ3JpZC1wYWRkaW5nLXNtKTtcbiAgICAgICAgcGFkZGluZy1pbmxpbmUtZW5kOiB2YXIoLS1pZHMtZGF0YS1ncmlkLXBhZGRpbmctc20pO1xuICAgICAgfVxuICAgIH1cblxuICAgIC5pZHMtZGF0YS1ncmlkLWNlbGw6bm90KC5hbGlnbi1jZW50ZXIpIC5pZHMtZGF0YS1ncmlkLWhlYWRlci1jZWxsLWNvbnRlbnQ6bm90KC52ZXJ0aWNhbC1hbGlnbi1jZW50ZXIpIC5pZHMtZGF0YS1ncmlkLWhlYWRlci10ZXh0IHtcbiAgICAgIHBhZGRpbmctaW5saW5lLXN0YXJ0OiB2YXIoLS1pZHMtZGF0YS1ncmlkLXBhZGRpbmctc20pO1xuICAgICAgdHJhbnNpdGlvbjogcGFkZGluZyB2YXIoLS1pZHMtbW90aW9uLWR1cmF0aW9uKSB2YXIoLS1pZHMtbW90aW9uLWVhc2UpO1xuICAgIH1cblxuICAgIC5pZHMtZGF0YS1ncmlkLWNlbGw6bm90KC5hbGlnbi1jZW50ZXIpIC5pZHMtZGF0YS1ncmlkLWhlYWRlci1jZWxsOmhvdmVyIC5pZHMtZGF0YS1ncmlkLWhlYWRlci1jZWxsLWNvbnRlbnQ6bm90KC52ZXJ0aWNhbC1hbGlnbi1jZW50ZXIpLmlzLXJlb3JkZXJhYmxlIC5pZHMtZGF0YS1ncmlkLWhlYWRlci10ZXh0IHtcbiAgICAgIHBhZGRpbmctaW5saW5lLXN0YXJ0OiB2YXIoLS1pZHMtZGF0YS1ncmlkLXBhZGRpbmctc20pO1xuICAgIH1cbiAgfVxuXG4gICZbZGF0YS1yb3ctaGVpZ2h0PSd4cyddIHtcbiAgICAuaWRzLWRhdGEtZ3JpZC1jZWxsIHtcbiAgICAgIGhlaWdodDogdmFyKC0taWRzLWRhdGEtZ3JpZC1yb3ctaGVpZ2h0LXhzKTtcbiAgICAgIGZvbnQtc2l6ZTogdmFyKC0taWRzLWRhdGEtZ3JpZC1mb250LXNpemUtc20pO1xuXG4gICAgICAudGV4dC1lbGxpcHNpcyxcbiAgICAgIGlkcy1iYWRnZSB7XG4gICAgICAgIHBhZGRpbmctaW5saW5lLXN0YXJ0OiB2YXIoLS1pZHMtZGF0YS1ncmlkLXBhZGRpbmcteHMpO1xuICAgICAgICBwYWRkaW5nLWlubGluZS1lbmQ6IHZhcigtLWlkcy1kYXRhLWdyaWQtcGFkZGluZy14cyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLmlkcy1kYXRhLWdyaWQtY2VsbDpub3QoLmFsaWduLWNlbnRlcikgLmlkcy1kYXRhLWdyaWQtaGVhZGVyLWNlbGwtY29udGVudDpub3QoLnZlcnRpY2FsLWFsaWduLWNlbnRlcikgLmlkcy1kYXRhLWdyaWQtaGVhZGVyLXRleHQge1xuICAgICAgcGFkZGluZy1pbmxpbmUtc3RhcnQ6IHZhcigtLWlkcy1kYXRhLWdyaWQtcGFkZGluZy14cyk7XG4gICAgICB0cmFuc2l0aW9uOiBwYWRkaW5nIHZhcigtLWlkcy1tb3Rpb24tZHVyYXRpb24pIHZhcigtLWlkcy1tb3Rpb24tZWFzZSk7XG4gICAgfVxuXG4gICAgLmlkcy1kYXRhLWdyaWQtY2VsbDpub3QoLmFsaWduLWNlbnRlcikgLmlkcy1kYXRhLWdyaWQtaGVhZGVyLWNlbGw6aG92ZXIgLmlkcy1kYXRhLWdyaWQtaGVhZGVyLWNlbGwtY29udGVudDpub3QoLnZlcnRpY2FsLWFsaWduLWNlbnRlcikuaXMtcmVvcmRlcmFibGUgLmlkcy1kYXRhLWdyaWQtaGVhZGVyLXRleHQge1xuICAgICAgcGFkZGluZy1pbmxpbmUtc3RhcnQ6IHZhcigtLWlkcy1kYXRhLWdyaWQtcGFkZGluZy14cyk7XG4gICAgfVxuICB9XG5cbiAgJltkYXRhLXJvdy1oZWlnaHQ9J3h4cyddIHtcbiAgICAuaWRzLWRhdGEtZ3JpZC1jZWxsIHtcbiAgICAgIGhlaWdodDogdmFyKC0taWRzLWRhdGEtZ3JpZC1yb3ctaGVpZ2h0LXh4cyk7XG4gICAgICBmb250LXNpemU6IHZhcigtLWlkcy1kYXRhLWdyaWQtZm9udC1zaXplLXNtKTtcblxuICAgICAgLnRleHQtZWxsaXBzaXMsXG4gICAgICBpZHMtYmFkZ2Uge1xuICAgICAgICBwYWRkaW5nLWlubGluZS1zdGFydDogdmFyKC0taWRzLWRhdGEtZ3JpZC1wYWRkaW5nLXh4cyk7XG4gICAgICAgIHBhZGRpbmctaW5saW5lLWVuZDogdmFyKC0taWRzLWRhdGEtZ3JpZC1wYWRkaW5nLXh4cyk7XG4gICAgICB9XG5cbiAgICAgIC8vIE9uICd4eHMnIHJvdyBoZWlnaHQsIGlubGluZS1lZGl0YWJsZSBjZWxscyBoYXZlIGEgc2xpZ2h0bHkgd2lkZXJcbiAgICAgIC8vIHBhZGRpbmcgYXBwZWFyYW5jZSB0byBhY2NvbW1vZGF0ZSB0aGUgaW5saW5lIGRpc3BsYXlcbiAgICAgICYuaXMtaW5saW5lIHtcbiAgICAgICAgLnRleHQtZWxsaXBzaXMge1xuICAgICAgICAgIHBhZGRpbmctaW5saW5lLXN0YXJ0OiB2YXIoLS1pZHMtZGF0YS1ncmlkLXBhZGRpbmcteHMpO1xuICAgICAgICAgIHBhZGRpbmctaW5saW5lLWVuZDogdmFyKC0taWRzLWRhdGEtZ3JpZC1wYWRkaW5nLXhzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC5pZHMtZGF0YS1ncmlkLWNlbGw6bm90KC5hbGlnbi1jZW50ZXIpIC5pZHMtZGF0YS1ncmlkLWhlYWRlci1jZWxsLWNvbnRlbnQ6bm90KC52ZXJ0aWNhbC1hbGlnbi1jZW50ZXIpIC5pZHMtZGF0YS1ncmlkLWhlYWRlci10ZXh0IHtcbiAgICAgIHBhZGRpbmctaW5saW5lLXN0YXJ0OiB2YXIoLS1pZHMtZGF0YS1ncmlkLXBhZGRpbmcteHhzKTtcbiAgICAgIHRyYW5zaXRpb246IHBhZGRpbmcgdmFyKC0taWRzLW1vdGlvbi1kdXJhdGlvbikgdmFyKC0taWRzLW1vdGlvbi1lYXNlKTtcbiAgICB9XG5cbiAgICAuaWRzLWRhdGEtZ3JpZC1jZWxsOm5vdCguYWxpZ24tY2VudGVyKSAuaWRzLWRhdGEtZ3JpZC1oZWFkZXItY2VsbDpob3ZlciAuaWRzLWRhdGEtZ3JpZC1oZWFkZXItY2VsbC1jb250ZW50Om5vdCgudmVydGljYWwtYWxpZ24tY2VudGVyKS5pcy1yZW9yZGVyYWJsZSAuaWRzLWRhdGEtZ3JpZC1oZWFkZXItdGV4dCB7XG4gICAgICBwYWRkaW5nLWlubGluZS1zdGFydDogdmFyKC0taWRzLWRhdGEtZ3JpZC1wYWRkaW5nLXh4cyk7XG4gICAgfVxuICB9XG59XG5cbi8vIFJvdyBBbHRlcm5hdGUgUm93IFNldHRpbmcgRmVhdHVyZVxuLmlkcy1kYXRhLWdyaWQuYWx0LXJvdy1zaGFkaW5nIGlkcy1kYXRhLWdyaWQtcm93Om50aC1jaGlsZChldmVuKSB7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWlkcy1kYXRhLWdyaWQtcm93LWFsdGVybmF0aW5nLWNvbG9yLWJhY2tncm91bmQpO1xufVxuXG4vLyBFeHBhbmRhYmxlIFJvd1xuLmlkcy1kYXRhLWdyaWQtZXhwYW5kYWJsZS1yb3cge1xuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0taWRzLWRhdGEtZ3JpZC1jZWxsLWNvbG9yLWJvcmRlcik7XG4gIGdyaWQtY29sdW1uOiAxIC8gLTE7XG4gIHBhZGRpbmc6IHZhcigtLWlkcy1zcGFjZS14cyk7XG59XG5cbi8vIFN0YW5kYWxvbmUgQ3NzXG50ci5pZHMtZGF0YS1ncmlkLXJvdyB7XG4gIGRpc3BsYXk6IHRhYmxlLXJvdztcbiAgaGVpZ2h0OiB2YXIoLS1pZHMtZGF0YS1ncmlkLXJvdy1oZWlnaHQtbGcpO1xufVxuXG4vLyBSb3cgTmF2aWdhdGlvbiBTdHlsZXNcbi5pZHMtZGF0YS1ncmlkLnJvdy1uYXZpZ2F0aW9uIC5pZHMtZGF0YS1ncmlkLWJvZHkgLmlkcy1kYXRhLWdyaWQtcm93IHtcbiAgJjpmb2N1cy13aXRoaW4ge1xuICAgIHRyYW5zZm9ybS1zdHlsZTogcHJlc2VydmUtM2Q7XG5cbiAgICAmOjphZnRlciB7XG4gICAgICBib3gtc2hhZG93OiB2YXIoLS1pZHMtZGF0YS1ncmlkLXJvdy1zaGFkb3ctZm9jdXMpO1xuICAgICAgY29udGVudDogJyAnO1xuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICBoZWlnaHQ6IGNhbGMoMTAwJSAtIDFweCk7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICB9XG4gIH1cblxuICAuaWRzLWRhdGEtZ3JpZC1jZWxsOmZvY3VzIHtcbiAgICBib3gtc2hhZG93OiBub25lO1xuICAgIG91dGxpbmU6IG5vbmU7XG4gIH1cblxuICAvLyBGaXhlcyBhbiBpc3N1ZSB3aGVyZSBoeXBlcmxpbmtzIGluIHJvdy1uYXZpZ2F0aW9uIG1vZGUgY2Fubm90IGJlIGRpcmVjdGx5IGNsaWNrZWRcbiAgaWRzLWh5cGVybGluayxcbiAgLmlkcy1oeXBlcmxpbmsge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWigxcHgpO1xuICB9XG59XG5cbjpob3N0KFtkaXI9J3J0bCddKSB7XG4gIC5pZHMtZGF0YS1ncmlkLXJvdyB7XG4gICAgJltwYXJ0PSdyb3ctbmV3J10ge1xuICAgICAgJjpub3QoLnNlbGVjdGVkKSB7XG4gICAgICAgIC5pZHMtZGF0YS1ncmlkLWNlbGwge1xuICAgICAgICAgICY6Zmlyc3QtY2hpbGQ6OmJlZm9yZSB7XG4gICAgICAgICAgICAgIGJvcmRlci1jb2xvcjogdmFyKC0taWRzLWRhdGEtZ3JpZC1yb3ctY29sb3ItYm9yZGVyLW5ldykgdmFyKC0taWRzLWRhdGEtZ3JpZC1yb3ctY29sb3ItYm9yZGVyLW5ldykgdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgJltwYXJ0PSdyb3ctcmVtb3ZlZCddIHtcbiAgICAgICY6bm90KC5zZWxlY3RlZCkge1xuICAgICAgICAuaWRzLWRhdGEtZ3JpZC1jZWxsIHtcbiAgICAgICAgICAmOmZpcnN0LWNoaWxkOjpiZWZvcmUge1xuICAgICAgICAgICAgICBib3JkZXItY29sb3I6IHZhcigtLWlkcy1kYXRhLWdyaWQtcm93LWNvbG9yLWJvcmRlci1yZW1vdmVkKSB2YXIoLS1pZHMtZGF0YS1ncmlkLXJvdy1jb2xvci1ib3JkZXItcmVtb3ZlZCkgdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgJltwYXJ0PSdyb3ctZXJyb3InXSB7XG4gICAgICAmOm5vdCguc2VsZWN0ZWQpIHtcbiAgICAgICAgLmlkcy1kYXRhLWdyaWQtY2VsbCB7XG4gICAgICAgICAgJjpmaXJzdC1jaGlsZDo6YmVmb3JlIHtcbiAgICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1pZHMtZGF0YS1ncmlkLXJvdy1jb2xvci1ib3JkZXItZXJyb3IpIHZhcigtLWlkcy1kYXRhLWdyaWQtcm93LWNvbG9yLWJvcmRlci1lcnJvcikgdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCIvKiBJZHMgRGF0YSBHcmlkIENvbXBvbmVudCAtIENlbGxzICovXG5AdXNlICdzYXNzOmxpc3QnO1xuXG4vKiBHZW5lcmF0ZXMgYSBwc2V1ZG8tZWxlbWVudCByZXByZXNlbnRpbmcgdGhlIGRpcnR5IHRyYWNrZXIgKi9cbkBtaXhpbiBpZHMtZGF0YS1ncmlkLWNlbGwtZGlydHktdHJhY2tlci1pY29uIHtcbiAgYm9yZGVyLWNvbG9yOiB2YXIoLS1pZHMtaW5wdXQtZGlydHktaW5kaWNhdG9yLWNvbG9yLWJhY2tncm91bmQtZGlydHkpIHRyYW5zcGFyZW50IHRyYW5zcGFyZW50IHZhcigtLWlkcy1pbnB1dC1kaXJ0eS1pbmRpY2F0b3ItY29sb3ItYmFja2dyb3VuZC1kaXJ0eSk7XG4gIGJvcmRlci1zdHlsZTogc29saWQ7XG4gIGJvcmRlci13aWR0aDogNXB4O1xuICBjb250ZW50OiAnJztcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBtYXJnaW4taW5saW5lOiB2YXIoLS1pZHMtc3BhY2UtM3hzKTtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBpbnNldC1ibG9jay1zdGFydDogdmFyKC0taWRzLXNwYWNlLTN4cyk7XG4gIHotaW5kZXg6IDE7XG59XG5cbmlkcy1kYXRhLWdyaWQtY2VsbFtjb2x1bW4tb25zY3JlZW5dIHtcbiAgdmlzaWJpbGl0eTogdmlzaWJsZTtcbn1cblxuaWRzLWRhdGEtZ3JpZC1jZWxsW2NvbHVtbi1vZmZzY3JlZW5dIHtcbiAgdmlzaWJpbGl0eTogdmlzaWJsZTtcbn1cblxuaWRzLWRhdGEtZ3JpZC1jZWxsW2NvbHVtbi1vZmZzY3JlZW4tbGVmdF0ge1xuICB2aXNpYmlsaXR5OiB2aXNpYmxlO1xufVxuXG5pZHMtZGF0YS1ncmlkLWNlbGxbY29sdW1uLW9mZnNjcmVlbi1yaWdodF0ge1xuICB2aXNpYmlsaXR5OiB2aXNpYmxlO1xufVxuXG4uaWRzLWRhdGEtZ3JpZC1yb3c6bm90KC5zZWxlY3RlZCk6bm90KFtwYXJ0Kj0ncm93LSddKSB7XG4gIC5pZHMtZGF0YS1ncmlkLWNlbGw6bm90KC5pcy1yZWFkb25seSkge1xuICAgICYuZnJvemVuLWxlZnQge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0taWRzLWRhdGEtZ3JpZC1jb2xvci1iYWNrZ3JvdW5kKTtcbiAgICB9XG5cbiAgICAmLmZyb3plbi1yaWdodCB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1pZHMtZGF0YS1ncmlkLWNvbG9yLWJhY2tncm91bmQpO1xuICAgIH1cbiAgfVxufVxuXG4uaWRzLWRhdGEtZ3JpZC1jZWxsIHtcbiAgLy8gQm9yZGVyIGFuZCBCYWNrZ3JvdW5kIGFuZCBTaXppbmdcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgYm9yZGVyLWlubGluZS1zdGFydDogMXB4IHNvbGlkO1xuICBib3JkZXItYmxvY2stZW5kOiAxcHggc29saWQ7XG4gIGJvcmRlci1jb2xvcjogdmFyKC0taWRzLWRhdGEtZ3JpZC1jZWxsLWNvbG9yLWJvcmRlcik7XG4gIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICBjb2xvcjogdmFyKC0taWRzLWRhdGEtZ3JpZC1jZWxsLWNvbG9yLXRleHQtZGVmYXVsdCk7XG4gIGhlaWdodDogNTBweDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuXG4gIC8vIEhpZGUgZmlyc3QvbGFzdCBib3JkZXJcbiAgJjpmaXJzdC1jaGlsZCB7XG4gICAgYm9yZGVyLWlubGluZS1zdGFydC13aWR0aDogdmFyKC0taWRzLWJvcmRlci13aWR0aC1ub25lKTtcbiAgfVxuXG4gIC8vIFJlc2V0IGJhZGdlIG1hcmdpbiB0byBjZW50ZXIgaXQgdmVydGljYWxseVxuICBpZHMtYmFkZ2U6OnBhcnQoYmFkZ2UpIHtcbiAgICBtYXJnaW4tYmxvY2stZW5kOiB2YXIoLS1pZHMtc3BhY2Utbm9uZSk7XG4gICAgbWFyZ2luLWlubGluZS1lbmQ6IHZhcigtLWlkcy1zcGFjZS1ub25lKTtcbiAgfVxuXG4gIGlkcy1iYWRnZSB7XG4gICAgcGFkZGluZy1pbmxpbmUtc3RhcnQ6IHZhcigtLWlkcy1zcGFjZS1zbSk7XG4gICAgcGFkZGluZy1pbmxpbmUtZW5kOiB2YXIoLS1pZHMtc3BhY2Utc20pO1xuICB9XG5cbiAgLy8gU28gdGhlIGNvbG9yIGlzIHRoZSBzYW1lIGFzIHRoZSBlZGl0b3JcbiAgaWRzLWljb25baWNvbj0nZHJvcGRvd24nXSB7XG4gICAgY29sb3I6IHZhcigtLWlkcy10cmlnZ2VyLWZpZWxkLWljb24tY29sb3IpXG4gIH1cblxuICBpZHMtaHlwZXJsaW5rIHtcbiAgICBtYXJnaW46IDA7XG4gICAgcGFkZGluZy1pbmxpbmU6IDEycHg7XG4gICAgd2lkdGg6IC1tb3otYXZhaWxhYmxlO1xuICAgIHdpZHRoOiAtd2Via2l0LWZpbGwtYXZhaWxhYmxlO1xuICAgIHdpZHRoOiBmaWxsLWF2YWlsYWJsZTtcbiAgfVxuXG4gIC50ZXh0LWVsbGlwc2lzIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgICBwYWRkaW5nLWlubGluZS1zdGFydDogY2FsYyh2YXIoLS1pZHMtc3BhY2UteHMpICsgNHB4KTtcbiAgICBwYWRkaW5nLWlubGluZS1lbmQ6IGNhbGModmFyKC0taWRzLXNwYWNlLXhzKSArIDRweCk7XG4gICAgaGVpZ2h0OiBhdXRvO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gIH1cblxuICAvLyBUZXh0IEFsaWdubWVudFxuICBpZHMtaWNvbiB7XG4gICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcblxuICAgICsgc3BhbiB7XG4gICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICAgICAgbGluZS1oZWlnaHQ6IDI1cHg7XG4gICAgICBwYWRkaW5nLWlubGluZTogdmFyKC0taWRzLXNwYWNlLTJ4cyk7XG4gICAgfVxuICB9XG5cbiAgLy8gVGV4dCBBbGlnbm1lbnRcbiAgJi5hbGlnbi1jZW50ZXIge1xuICAgICYgPiAqOmZpcnN0LWNoaWxkIHtcbiAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICAgICAgbWFyZ2luOiB2YXIoLS1pZHMtc3BhY2Utbm9uZSkgYXV0bztcbiAgICB9XG4gIH1cblxuICAmLmFsaWduLXJpZ2h0IHtcbiAgICAmID4gKjpmaXJzdC1jaGlsZCB7XG4gICAgICBtYXJnaW4taW5saW5lLXN0YXJ0OiBhdXRvO1xuICAgICAgbWFyZ2luLWlubGluZS1lbmQ6IHZhcigtLWlkcy1zcGFjZS1ub25lKTtcbiAgICB9XG5cbiAgICBpZHMtaW5wdXQge1xuICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7XG4gICAgfVxuICB9XG5cbiAgLy8gUmVhZG9ubHkgYW5kIGRpc2FibGVkIENlbGxzXG4gICYuaXMtcmVhZG9ubHk6bm90KC5leGNsdWRlLXJlYWRvbmx5LXN0eWxlKTpub3QoLnNlbGVjdGVkKSB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0taWRzLWRhdGEtZ3JpZC1jZWxsLWNvbG9yLWJhY2tncm91bmQtZnJvemVuLXJlYWRvbmx5KTtcblxuICAgIC5lZGl0b3ItY2VsbC1pY29uIHtcbiAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgfVxuICB9XG5cbiAgJi5pcy1kaXNhYmxlZCB7XG4gICAgY29sb3I6IHZhcigtLWlkcy1kYXRhLWdyaWQtY2VsbC1jb2xvci10ZXh0LWRpc2FibGVkKTtcblxuICAgIC5lZGl0b3ItY2VsbC1pY29uIHtcbiAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgfVxuICB9XG5cbiAgJi5pcy11cHBlcmNhc2Uge1xuICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gIH1cblxuICAvLyBGb2N1cyBTdGF0ZVxuICAmOmZvY3VzLFxuICAmLmlzLWVkaXRpbmc6bm90KC5pcy1pbmxpbmUpOmZvY3VzLXdpdGhpbixcbiAgJi5pcy1mb2N1c2VkIHtcbiAgICAmOm5vdCguc2VsZWN0ZWQpOm5vdChbdGFiaW5kZXg9Jy0xJ10pIHtcbiAgICAgIGJveC1zaGFkb3c6IHZhcigtLWlkcy1zaGFkb3ctMjApO1xuICAgICAgb3V0bGluZTogMXB4IHNvbGlkIHZhcigtLWlkcy1jb2xvci1ib3JkZXItZm9jdXMpO1xuICAgICAgb3V0bGluZS1vZmZzZXQ6IC0xcHg7XG4gICAgfVxuICB9XG5cbiAgJi5mb3JtYXR0ZXItdGV4dG1hc2sge1xuICAgICYuaXMtaG92ZXJhYmxlIHtcbiAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcblxuICAgICAgLnRleHQtZWxsaXBzaXMge1xuICAgICAgICBwYWRkaW5nLWlubGluZS1lbmQ6IHZhcigtLWlkcy1zcGFjZS1zbSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLmVkaXRvci1jZWxsLWljb24ge1xuICAgICAgbWFyZ2luLWlubGluZS1lbmQ6IDEwcHg7XG4gICAgICBtYXJnaW4tYmxvY2stc3RhcnQ6IHZhcigtLWlkcy1zcGFjZS0zeHMpO1xuICAgICAgZGlzcGxheTogbm9uZTtcblxuICAgICAgJi5zaG93LWNlbGwtaWNvbi1hbHdheXMge1xuICAgICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcblxuICAgICAgICAmOmhvdmVyIHtcbiAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAmOm5vdCguaXMtaW5saW5lKTpub3QoLmlzLWludmFsaWQpOmhvdmVyLFxuICAgICYuaXMtZWRpdGluZyB7XG4gICAgICAuZWRpdG9yLWNlbGwtaWNvbiB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICB9XG5cbiAgICAgIC50ZXh0LWVsbGlwc2lzIHtcbiAgICAgICAgcGFkZGluZy1pbmxpbmUtZW5kOiB2YXIoLS1pZHMtc3BhY2UtMDgpO1xuICAgICAgfVxuXG4gICAgICBpZHMtYWxlcnQge1xuICAgICAgICBtYXJnaW4taW5saW5lOiBjYWxjKDEwMCUgLSA0OHB4KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAmLmlzLWVkaXRhYmxlIHtcbiAgICAmLmlzLXJlYWRvbmx5Om5vdCguZXhjbHVkZS1yZWFkb25seS1zdHlsZSkge1xuICAgICAgLnRleHQtZWxsaXBzaXM6OmFmdGVyIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0taWRzLWRhdGEtZ3JpZC1jZWxsLWNvbG9yLWJhY2tncm91bmQtcmVhZG9ubHkpO1xuICAgICAgfVxuICAgIH1cblxuICAgICYuaXMtaW5saW5lIHtcbiAgICAgICYuZm9ybWF0dGVyLXRyZWUge1xuICAgICAgICAuaWRzLWRhdGEtZ3JpZC10cmVlLWNvbnRhaW5lciB7XG4gICAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICB9XG5cbiAgICAgICAgLmlkcy1kYXRhLWdyaWQtdHJlZS1maWVsZC1jb250YWluZXIge1xuICAgICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgfVxuXG4gICAgICAgIC50ZXh0LWVsbGlwc2lzIHtcbiAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgICAgIGp1c3RpZnktY29udGVudDogZW5kO1xuICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICB9XG5cbiAgICAgICAgLnRleHQtZWxsaXBzaXM6OmFmdGVyIHtcbiAgICAgICAgICBtYXJnaW4taW5saW5lLWVuZDogLThweDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZHMtaWNvbi5lZGl0b3ItY2VsbC1pY29uIHtcbiAgICAgICAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gICAgICAgIHZpc2liaWxpdHk6IHZpc2libGU7XG4gICAgICAgIG1hcmdpbi1pbmxpbmUtZW5kOiAxNXB4O1xuXG4gICAgICAgICZbaWNvbj0nZHJvcGRvd24nXSB7XG4gICAgICAgICAgbWFyZ2luLWlubGluZS1lbmQ6IDEycHg7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAmLmlzLWxvb2t1cCxcbiAgICAmLmlzLWRhdGVwaWNrZXIsXG4gICAgJi5pcy10aW1lcGlja2VyIHtcbiAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcblxuICAgICAgLnRleHQtZWxsaXBzaXMge1xuICAgICAgICBwYWRkaW5nLWlubGluZS1lbmQ6IHZhcigtLWlkcy1zcGFjZS1ub25lKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAmLmlzLWRhdGVwaWNrZXIsXG4gICAgJi5pcy10aW1lcGlja2VyIHtcbiAgICAgIGlkcy10cmlnZ2VyLWZpZWxkIHtcbiAgICAgICAgbWFyZ2luLWlubGluZS1zdGFydDogLTFweDtcbiAgICAgICAgbWFyZ2luLWJsb2NrLXN0YXJ0OiAxcHg7XG4gICAgICB9XG4gICAgfVxuXG4gICAgJi5pcy1sb29rdXAge1xuICAgICAgaWRzLWxvb2t1cCB7XG4gICAgICAgIGJvcmRlcjogMDtcbiAgICAgICAgb3V0bGluZTogbm9uZTtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICB9XG5cbiAgICAgIGlkcy1sb29rdXA6OnBhcnQoY29udGFpbmVyKSxcbiAgICAgIGlkcy1sb29rdXA6OnBhcnQoZmllbGQtY29udGFpbmVyKSB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWlkcy1jb2xvci10cmFuc3BhcmVudCk7XG4gICAgICAgIGJvcmRlcjogMDtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogMDtcbiAgICAgICAgYm94LXNoYWRvdzogbm9uZTtcbiAgICAgICAgb3V0bGluZTogbm9uZTtcbiAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgbWFyZ2luOiAwO1xuICAgICAgfVxuICAgIH1cblxuICAgIC5lZGl0b3ItY2VsbC1pY29uIHtcbiAgICAgIG1hcmdpbi1pbmxpbmUtZW5kOiAxMHB4O1xuICAgICAgbWFyZ2luLWJsb2NrLXN0YXJ0OiB2YXIoLS1pZHMtc3BhY2UtM3hzKTtcbiAgICAgIGRpc3BsYXk6IG5vbmU7XG5cbiAgICAgICYuc2hvdy1jZWxsLWljb24tYWx3YXlzIHtcbiAgICAgICAgZGlzcGxheTogaW5saW5lLWZsZXg7XG5cbiAgICAgICAgJjpob3ZlciB7XG4gICAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWRzLXRyaWdnZXItYnV0dG9uOjpwYXJ0KGJ1dHRvbikge1xuICAgICAgY29sb3I6IGluaGVyaXQ7XG4gICAgfVxuXG4gICAgLy8gaXMtYm9yZGVybGVzczpob3ZlclxuICAgICY6bm90KC5pcy1pbmxpbmUpOm5vdCguaXMtaW52YWxpZCk6bm90KC5pcy1yZWFkb25seSk6Zm9jdXMsXG4gICAgJjpub3QoLmlzLWlubGluZSk6bm90KC5pcy1pbnZhbGlkKTpub3QoLmlzLXJlYWRvbmx5KTpob3ZlciB7XG4gICAgICAuZWRpdG9yLWNlbGwtaWNvbiB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICB9XG5cbiAgICAgIGlkcy1hbGVydCB7XG4gICAgICAgIG1hcmdpbi1pbmxpbmU6IGNhbGMoMTAwJSAtIDQ4cHgpO1xuICAgICAgfVxuICAgIH1cblxuICAgICYuaXMtZWRpdGFibGUuaXMtaW52YWxpZCB7XG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG5cbiAgICAgIGlkcy1hbGVydCB7XG4gICAgICAgIG1hcmdpbi1pbmxpbmUtZW5kOiB2YXIoLS1pZHMtc3BhY2UteHMpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gICYuaXMtZWRpdGluZyBpZHMtY2hlY2tib3gge1xuICAgIC0taWRzLWNoZWNrYm94LW1hcmdpbi1pbmxpbmUtZW5kOiAwO1xuICAgIC0taWRzLWNoZWNrYm94LXNoYWRvdy1mb2N1czogMCAwIDAgMnB4IHRyYW5zcGFyZW50LCAwIDAgMCAzcHggdHJhbnNwYXJlbnQ7XG4gICAgLS1pZHMtY2hlY2tib3gtY29sb3ItYm9yZGVyLWZvY3VzOiB2YXIoLS1pZHMtY2hlY2tib3gtYm9yZGVyKTtcblxuICAgICZbY2hlY2tlZF0ge1xuICAgICAgLS1pZHMtY2hlY2tib3gtY29sb3ItYm9yZGVyLWZvY3VzOiB2YXIoLS1pZHMtY2hlY2tib3gtY29sb3ItYmFja2dyb3VuZC1zZWxlY3RlZCk7XG4gICAgfVxuXG4gICAgZGlzcGxheTogZmxleDtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgbGVmdDogNnB4O1xuICAgIHRvcDogM3B4O1xuICB9XG5cbiAgLy8gRWRpdGluZyB3aXRoIHBvcHVwc1xuICAmLmlzLWVkaXRpbmcuaXMtbG9va3VwLFxuICAmLmlzLWVkaXRpbmcuaXMtZGF0ZXBpY2tlcixcbiAgJi5pcy1lZGl0aW5nLmlzLXRpbWVwaWNrZXIsXG4gICYuaXMtZWRpdGluZy5pcy1wYXNzd29yZCB7XG4gICAgb3ZlcmZsb3c6IHZpc2libGU7XG4gIH1cblxuICAmLmlzLWVkaXRpbmcuaXMtaW5saW5lIGlkcy1pbnB1dCB7XG4gICAgei1pbmRleDogOTk7XG4gIH1cblxuICAvLyBEcm9wZG93biBFZGl0YWJsZSBDZWxsXG4gICYuaXMtZWRpdGFibGUuaXMtZHJvcGRvd24ge1xuICAgIC5kcm9wZG93bi1jZWxsLXZhbHVlIHtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgIH1cblxuICAgICYuaXMtZWRpdGluZzpub3QoLmlzLWlubGluZSkge1xuICAgICAgYm9yZGVyLWlubGluZS1zdGFydC13aWR0aDogMDtcbiAgICB9XG4gIH1cblxuICAvLyBEcm9wZG93biBFZGl0aW5nIElubGluZVxuICAmLmlzLWVkaXRpbmcuaXMtZHJvcGRvd24uaXMtaW5saW5lIHtcbiAgICBib3gtc2hhZG93OiBub25lO1xuXG4gICAgaWRzLWRyb3Bkb3duIHtcbiAgICAgIHBhZGRpbmc6IDAgdmFyKC0taWRzLXNwYWNlLTJ4cyk7XG4gICAgfVxuICB9XG5cbiAgLy8gVGV4dCBFZGl0YWJsZSBDZWxsXG4gICYuZm9ybWF0dGVyLXRleHQge1xuICAgIHdoaXRlLXNwYWNlOiBwcmU7XG4gIH1cblxuICAmLmZvcm1hdHRlci1yb3ctcmVvcmRlciB7XG4gICAgY3Vyc29yOiBtb3ZlO1xuICB9XG5cbiAgLy8gRWRpdGluZyBVcHBlcmNhc2VcbiAgJi5pcy1lZGl0aW5nLmlzLXVwcGVyY2FzZSB7XG4gICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcblxuICAgIGlkcy1saXN0LWJveC1vcHRpb24sXG4gICAgaWRzLWRyb3Bkb3duOjpwYXJ0KHRyaWdnZXJmaWVsZC1pbnB1dCksXG4gICAgaWRzLWlucHV0OjpwYXJ0KGlucHV0KSB7XG4gICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgIH1cbiAgfVxuXG4gIC8vIEZyb3plbiBDZWxsc1xuICAmLmZyb3plbiB7XG4gICAgcG9zaXRpb246IHN0aWNreTtcbiAgICB6LWluZGV4OiAxOyAvLyB6LWluZGV4IGhpZ2hlciB0aGFuIDIgd2lsbCBicmVhayBpZHMtbG9hZGluZy1pbmRpY2F0b3IncyBvdmVybGF5XG4gIH1cblxuICAvLyBDaGFuZ2UgYm9yZGVycyBmb3Igc2Nyb2xsaW5nXG4gICYuZnJvemVuLWxhc3Qge1xuICAgIGJvcmRlci1pbmxpbmUtZW5kOiAxcHggc29saWQgdmFyKC0taWRzLWRhdGEtZ3JpZC1jZWxsLWNvbG9yLWJvcmRlcik7XG5cbiAgICArIC5pZHMtZGF0YS1ncmlkLWNlbGwge1xuICAgICAgYm9yZGVyLWlubGluZS1zdGFydC13aWR0aDogdmFyKC0taWRzLWJvcmRlci13aWR0aC1ub25lKTtcbiAgICB9XG4gIH1cblxuICAmLmZyb3plbi1sZWZ0IHtcbiAgICBwb3NpdGlvbjogc3RpY2t5O1xuICAgIGxlZnQ6IHZhcigtLWlkcy1zcGFjZS1ub25lKTtcblxuICAgIC8vIER5bmFtaWNhbGx5IGFkZGVkIHdpZHRoc1xuICAgIEBmb3IgJGkgZnJvbSAyIHRocm91Z2ggMTAge1xuICAgICAgJjpudGgtb2YtdHlwZSgjeyRpfSkge1xuICAgICAgICBsZWZ0OiB2YXIoLS1pZHMtZGF0YS1ncmlkLWZyb3plbi1jb2x1bW4tbGVmdC13aWR0aC0jeyRpfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgJi5mcm96ZW4tcmlnaHQge1xuICAgIHBvc2l0aW9uOiBzdGlja3k7XG4gICAgcmlnaHQ6IHZhcigtLWlkcy1zcGFjZS1ub25lKTtcbiAgfVxuXG4gICYuaXMtZGlydHk6OmJlZm9yZSB7XG4gICAgQGluY2x1ZGUgaWRzLWRhdGEtZ3JpZC1jZWxsLWRpcnR5LXRyYWNrZXItaWNvbjtcbiAgfVxuXG4gICYuaXMtZGlydHkuaXMtaW5saW5lIHtcbiAgICAmLmZvcm1hdHRlci10cmVlIHtcbiAgICAgICY6OmJlZm9yZSB7XG4gICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICAgIGNvbnRlbnQ6IG5vbmU7XG4gICAgICB9XG5cbiAgICAgIC5pZHMtZGF0YS1ncmlkLXRyZWUtZmllbGQtY29udGFpbmVyIHtcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuXG4gICAgICAgICY6OmJlZm9yZSB7XG4gICAgICAgICAgQGluY2x1ZGUgaWRzLWRhdGEtZ3JpZC1jZWxsLWRpcnR5LXRyYWNrZXItaWNvbjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgICYuaXMtZHJvcGRvd246OmJlZm9yZSB7XG4gICAgICBtYXJnaW4taW5saW5lOiA2cHg7XG4gICAgICBpbnNldC1ibG9jay1zdGFydDogNnB4O1xuICAgIH1cblxuICAgIGlkcy1pbnB1dCB7XG4gICAgICAmOjpwYXJ0KGRpcnR5LXRyYWNrZXItaWNvbikge1xuICAgICAgICAtLWlkcy1pY29uLWhlaWdodC1kZWZhdWx0OiAxMnB4ICFpbXBvcnRhbnQ7XG4gICAgICAgIC0taWRzLWljb24td2lkdGgtZGVmYXVsdDogMTJweCAhaW1wb3J0YW50O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gICYuaXMtZGlydHkuaXMtZHJvcGRvd24uaXMtZWRpdGluZzpub3QoLmlzLWlubGluZSk6OmJlZm9yZSB7XG4gICAgaW5zZXQtYmxvY2stc3RhcnQ6IDNweDtcbiAgICBtYXJnaW4taW5saW5lOiAzcHg7XG4gIH1cblxuICAmLmlzLWludmFsaWQge1xuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWlkcy1kYXRhLWdyaWQtY2VsbC1jb2xvci1iYWNrZ3JvdW5kLWVycm9yKTtcbiAgfVxuXG4gICYuc2VsZWN0ZWQge1xuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWlkcy1kYXRhLWdyaWQtcm93LWNvbG9yLWJhY2tncm91bmQtc2VsZWN0ZWQpO1xuICB9XG5cbiAgaWRzLWFsZXJ0IHtcbiAgICBtYXJnaW4tdG9wOiAzcHg7XG4gIH1cblxuICBpZHMtdGFnIHtcbiAgICAtLWlkcy10YWctbWFyZ2luLWlubGluZS1lbmQ6IDA7XG4gIH1cblxuICBpZHMtcHJvZ3Jlc3MtYmFyIHtcbiAgICBtYXJnaW46IHZhcigtLWlkcy1wcm9ncmVzcy1iYXItZ3JpZC1jZWxsLW1hcmdpbik7XG4gIH1cblxuICAmLmlzLWVkaXRpbmcge1xuICAgICRpY29uLXN0eWxlczogKFxuICAgICAgJ3RpbWVwaWNrZXInOiAnY2xvY2snLFxuICAgICAgJ2RhdGVwaWNrZXInOiAnY2FsZW5kYXInXG4gICAgKTtcblxuICAgICRmaWVsZC1oZWlnaHRzOiAoXG4gICAgICAneHMnOiAoLTVweCwgMXB4KSxcbiAgICAgICdzbSc6ICh2YXIoLS1pZHMtc3BhY2UtM3hzKSwgMXB4KVxuICAgICk7XG5cbiAgICBAZWFjaCAkY2xhc3MsICRpY29uIGluICRpY29uLXN0eWxlcyB7XG4gICAgICAmLmlzLSN7JGNsYXNzfSB7XG4gICAgICAgIEBlYWNoICRoZWlnaHQsICR2YWx1ZXMgaW4gJGZpZWxkLWhlaWdodHMge1xuICAgICAgICAgIC5pZHMtdHJpZ2dlci1maWVsZC1zbG90LXRyaWdnZXItZW5kW2ljb249JyN7JGljb259J11bZmllbGQtaGVpZ2h0PScjeyRoZWlnaHR9J10ge1xuICAgICAgICAgICAgbWFyZ2luLWlubGluZS1lbmQ6IGxpc3QubnRoKCR2YWx1ZXMsIDEpO1xuICAgICAgICAgICAgbWFyZ2luLWJsb2NrLXN0YXJ0OiBsaXN0Lm50aCgkdmFsdWVzLCAyKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBSb3cgaGVpZ2h0OiAneHhzJ1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5bZGF0YS1yb3ctaGVpZ2h0PSd4eHMnXSB7XG4gIC5mb3JtYXR0ZXItcHJvZ3Jlc3Mge1xuICAgIGlkcy1wcm9ncmVzcy1iYXIge1xuICAgICAgbWFyZ2luOiB2YXIoLS1pZHMtZGF0YS1ncmlkLXBhZGRpbmcteHhzKTtcbiAgICB9XG4gIH1cblxuICAuaWRzLWRhdGEtZ3JpZC1jZWxsLmlzLWRpcnR5OjpiZWZvcmUge1xuICAgIGJvcmRlci13aWR0aDogNHB4O1xuICAgIGluc2V0LWJsb2NrLXN0YXJ0OiAxcHg7XG4gICAgaW5zZXQtaW5saW5lLXN0YXJ0OiAtMXB4O1xuICB9XG5cbiAgLmlkcy1kYXRhLWdyaWQtY2VsbC5pcy1kaXJ0eS5pcy1pbmxpbmU6OmJlZm9yZSB7XG4gICAgbWFyZ2luLWlubGluZTogM3B4O1xuICAgIHRvcDogM3B4O1xuICB9XG5cbiAgaWRzLWJ1dHRvbiB7XG4gICAgLS1pZHMtYnV0dG9uLWljb24tcGFkZGluZzogdmFyKC0taWRzLXNwYWNlLTN4cyk7XG4gIH1cblxuICBpZHMtYmFkZ2Uge1xuICAgIC0taWRzLWJhZGdlLWZvbnQtbGluZS1oZWlnaHQ6IGNhbGModmFyKC0taWRzLWRhdGEtZ3JpZC1yb3ctaGVpZ2h0LXh4cykgLSA4cHgpO1xuICB9XG5cbiAgaWRzLXRhZyB7XG4gICAgLS1pZHMtdGFnLWhlaWdodDogY2FsYyh2YXIoLS1pZHMtZGF0YS1ncmlkLXJvdy1oZWlnaHQteHhzKSAtIDZweCk7XG4gIH1cblxuICBpZHMtaW5wdXQsXG4gIGlkcy10cmlnZ2VyLWZpZWxkIHtcbiAgICAtLWlkcy1zcGFjZS0zeHM6IDA7XG4gICAgLS1pZHMtaW5wdXQtZm9udC1zaXplLXNtOiB2YXIoLS1pZHMtZGF0YS1ncmlkLWZvbnQtc2l6ZS1zbSk7XG4gIH1cblxuICBpZHMtaW5wdXQge1xuICAgICY6OnBhcnQoZGlydHktdHJhY2tlci1pY29uKSB7XG4gICAgICAtLWlkcy1pY29uLWhlaWdodC1kZWZhdWx0OiAxMHB4ICFpbXBvcnRhbnQ7XG4gICAgICAtLWlkcy1pY29uLXdpZHRoLWRlZmF1bHQ6IDEwcHggIWltcG9ydGFudDtcbiAgICB9XG5cbiAgICAmOjpwYXJ0KGlucHV0KSB7XG4gICAgICBoZWlnaHQ6IGNhbGModmFyKC0taWRzLWlucHV0LWhlaWdodC0xMCkpO1xuICAgIH1cbiAgfVxuXG4gIC5pZHMtZGF0YS1ncmlkLWNlbGwuaXMtZWRpdGluZyB7XG4gICAgaWRzLWlucHV0OjpwYXJ0KGlucHV0KSB7XG4gICAgICBoZWlnaHQ6IGNhbGModmFyKC0taWRzLWlucHV0LWhlaWdodC0xMCkgLSA0cHgpO1xuICAgIH1cbiAgfVxuXG4gIC8vIEFkanVzdCBub24gaW5saW5lIGVkaXRvclxuICAuaWRzLWRhdGEtZ3JpZC1jZWxsLmlzLWVkaXRhYmxlIC5lZGl0b3ItY2VsbC1pY29uIHtcbiAgICBtYXJnaW4taW5saW5lLWVuZDogdmFyKC0taWRzLXNwYWNlLTN4cyk7XG4gIH1cblxuICAvLyBBZGp1c3QgZHJvcGRvd24gZWRpdG9yXG4gIC5pZHMtZGF0YS1ncmlkLWNlbGwuaXMtZWRpdGFibGUuaXMtaW5saW5lIGlkcy1pY29uLmVkaXRvci1jZWxsLWljb24ge1xuICAgIG1hcmdpbi1pbmxpbmUtZW5kOiB2YXIoLS1pZHMtc3BhY2UtMnhzKTtcbiAgfVxuXG4gIC5pZHMtZGF0YS1ncmlkLWNlbGwuaXMtZWRpdGFibGUuaXMtaW5saW5lIHtcbiAgICAtLWlkcy1idXR0b24tdGVydGlhcnktY29sb3ItYmFja2dyb3VuZC1ob3ZlcjogdmFyKC0taWRzLWNvbG9yLXRyYW5zcGFyZW50KTtcbiAgfVxuXG4gIC5pZHMtZGF0YS1ncmlkLWNlbGwuaXMtZWRpdGluZy5pcy1kcm9wZG93bi5pcy1pbmxpbmUgaWRzLWRyb3Bkb3duIHtcbiAgICBwYWRkaW5nOiB2YXIoLS1pZHMtc3BhY2Utbm9uZSkgdmFyKC0taWRzLXNwYWNlLTR4cyk7XG5cbiAgICAtLWlkcy1pbnB1dC1mb250LXNpemUtc206IHZhcigtLWlkcy1kYXRhLWdyaWQtZm9udC1zaXplLXNtKTtcbiAgfVxuXG4gIC5pZHMtZGF0YS1ncmlkLWNlbGwge1xuICAgIC5pZHMtZGF0YS1ncmlkLWNoZWNrYm94LWNvbnRhaW5lcjpub3QoLmlzLXNlbGVjdGlvbi1jaGVja2JveCkge1xuICAgICAgcGFkZGluZy1pbmxpbmU6IHZhcigtLWlkcy1kYXRhLWdyaWQtcGFkZGluZy14eHMpO1xuICAgIH1cblxuICAgICYuaXMtZWRpdGFibGUuaXMtZWRpdGFibGUuaXMtaW52YWxpZCBpZHMtYWxlcnQge1xuICAgICAgbWFyZ2luLWlubGluZS1lbmQ6IHZhcigtLWlkcy1zcGFjZS00eHMpO1xuICAgIH1cblxuICAgIGlkcy1oeXBlcmxpbmsge1xuICAgICAgcGFkZGluZy1pbmxpbmU6IHZhcigtLWlkcy1zcGFjZS0yeHMpO1xuICAgIH1cbiAgfVxufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFJvdyBoZWlnaHQ6ICd4cydcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5bZGF0YS1yb3ctaGVpZ2h0PSd4cyddIHtcbiAgLmZvcm1hdHRlci1wcm9ncmVzcyB7XG4gICAgaWRzLXByb2dyZXNzLWJhciB7XG4gICAgICBtYXJnaW46IHZhcigtLWlkcy1kYXRhLWdyaWQtcGFkZGluZy14cyk7XG4gICAgfVxuICB9XG5cbiAgLmlkcy1kYXRhLWdyaWQtY2VsbC5pcy1kaXJ0eTo6YmVmb3JlIHtcbiAgICBib3JkZXItd2lkdGg6IDRweDtcbiAgfVxuXG4gIC5pZHMtZGF0YS1ncmlkLWNlbGwuaXMtZGlydHkuaXMtaW5saW5lOjpiZWZvcmUge1xuICAgIG1hcmdpbi1pbmxpbmU6IDNweDtcbiAgICB0b3A6IDNweDtcbiAgfVxuXG4gIGlkcy1idXR0b24ge1xuICAgIC0taWRzLWJ1dHRvbi1pY29uLXBhZGRpbmc6IDNweDtcbiAgfVxuXG4gIGlkcy1iYWRnZSB7XG4gICAgLS1pZHMtYmFkZ2UtZm9udC1saW5lLWhlaWdodDogY2FsYyh2YXIoLS1pZHMtZGF0YS1ncmlkLXJvdy1oZWlnaHQteHMpIC0gMTJweCk7XG4gIH1cblxuICBpZHMtdGFnIHtcbiAgICAtLWlkcy10YWctaGVpZ2h0OiBjYWxjKHZhcigtLWlkcy1kYXRhLWdyaWQtcm93LWhlaWdodC14eHMpIC0gNHB4KTtcbiAgfVxuXG4gIGlkcy1pbnB1dCB7XG4gICAgLS1pZHMtaW5wdXQtZm9udC1zaXplLXNtOiB2YXIoLS1pZHMtZGF0YS1ncmlkLWZvbnQtc2l6ZS1zbSk7XG5cbiAgICAmOjpwYXJ0KGRpcnR5LXRyYWNrZXItaWNvbikge1xuICAgICAgLS1pZHMtaWNvbi1oZWlnaHQtZGVmYXVsdDogMTJweCAhaW1wb3J0YW50O1xuICAgICAgLS1pZHMtaWNvbi13aWR0aC1kZWZhdWx0OiAxMnB4ICFpbXBvcnRhbnQ7XG4gICAgfVxuICB9XG5cbiAgLy8gQWRqdXN0IG5vbiBpbmxpbmUgZWRpdG9yXG4gIC5pZHMtZGF0YS1ncmlkLWNlbGwuaXMtZWRpdGFibGUgLmVkaXRvci1jZWxsLWljb24ge1xuICAgIG1hcmdpbi1pbmxpbmUtZW5kOiB2YXIoLS1pZHMtc3BhY2UtM3hzKTtcbiAgfVxuXG4gIC8vIEFkanVzdCBkcm9wZG93biBlZGl0b3JcbiAgLmlkcy1kYXRhLWdyaWQtY2VsbC5pcy1lZGl0YWJsZS5pcy1pbmxpbmUgaWRzLWljb24uZWRpdG9yLWNlbGwtaWNvbiB7XG4gICAgbWFyZ2luLWlubGluZS1lbmQ6IHZhcigtLWlkcy1zcGFjZS0yeHMpO1xuICB9XG5cbiAgLmlkcy1kYXRhLWdyaWQtY2VsbC5pcy1lZGl0YWJsZS5pcy1pbmxpbmUge1xuICAgIC0taWRzLWJ1dHRvbi10ZXJ0aWFyeS1jb2xvci1iYWNrZ3JvdW5kLWhvdmVyOiB2YXIoLS1pZHMtY29sb3ItdHJhbnNwYXJlbnQpO1xuICAgIC0taWRzLWlucHV0LWZvbnQtc2l6ZS1zbTogdmFyKC0taWRzLWRhdGEtZ3JpZC1mb250LXNpemUtc20pO1xuICB9XG5cbiAgLmlkcy1kYXRhLWdyaWQtY2VsbC5pcy1lZGl0aW5nLmlzLWRyb3Bkb3duLmlzLWlubGluZSBpZHMtZHJvcGRvd24ge1xuICAgIHBhZGRpbmc6IHZhcigtLWlkcy1zcGFjZS1ub25lKSB2YXIoLS1pZHMtc3BhY2UtM3hzKTtcbiAgfVxuXG4gIC5pZHMtZGF0YS1ncmlkLWNlbGwge1xuICAgIC5pZHMtZGF0YS1ncmlkLWNoZWNrYm94LWNvbnRhaW5lcjpub3QoLmlzLXNlbGVjdGlvbi1jaGVja2JveCkge1xuICAgICAgcGFkZGluZy1pbmxpbmU6IHZhcigtLWlkcy1kYXRhLWdyaWQtcGFkZGluZy14cyk7XG4gICAgfVxuXG4gICAgaWRzLWh5cGVybGluayB7XG4gICAgICBwYWRkaW5nLWlubGluZTogdmFyKC0taWRzLXNwYWNlLTJ4cyk7XG4gICAgfVxuICB9XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gUm93IGhlaWdodDogJ3NtJ1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbltkYXRhLXJvdy1oZWlnaHQ9J3NtJ10ge1xuICAuZm9ybWF0dGVyLXByb2dyZXNzIHtcbiAgICBpZHMtcHJvZ3Jlc3MtYmFyIHtcbiAgICAgIG1hcmdpbjogdmFyKC0taWRzLWRhdGEtZ3JpZC1wYWRkaW5nLXNtKTtcbiAgICB9XG4gIH1cblxuICBpZHMtYnV0dG9uIHtcbiAgICAtLWlkcy1idXR0b24taWNvbi1wYWRkaW5nOiB2YXIoLS1pZHMtc3BhY2UtMnhzKTtcbiAgfVxuXG4gIC8vIEFkanVzdCBub24gaW5saW5lIGVkaXRvclxuICAuaWRzLWRhdGEtZ3JpZC1jZWxsLmlzLWVkaXRhYmxlIC5lZGl0b3ItY2VsbC1pY29uIHtcbiAgICBtYXJnaW4taW5saW5lLWVuZDogNnB4O1xuICB9XG5cbiAgLy8gQWRqdXN0IGRyb3Bkb3duIGVkaXRvclxuICAuaWRzLWRhdGEtZ3JpZC1jZWxsLmlzLWVkaXRhYmxlLmlzLWlubGluZSBpZHMtaWNvbi5lZGl0b3ItY2VsbC1pY29uIHtcbiAgICBtYXJnaW4taW5saW5lLWVuZDogNXB4O1xuICAgIG1hcmdpbi1ibG9jay1zdGFydDogMDtcbiAgfVxuXG4gIC5pZHMtZGF0YS1ncmlkLWNlbGwuaXMtZWRpdGFibGUuaXMtaW5saW5lIHtcbiAgICAtLWlkcy1idXR0b24tdGVydGlhcnktY29sb3ItYmFja2dyb3VuZC1ob3ZlcjogdmFyKC0taWRzLWNvbG9yLXRyYW5zcGFyZW50KTtcbiAgfVxuXG4gIC5pZHMtZGF0YS1ncmlkLWNlbGwge1xuICAgIC5pZHMtZGF0YS1ncmlkLWNoZWNrYm94LWNvbnRhaW5lcjpub3QoLmlzLXNlbGVjdGlvbi1jaGVja2JveCkge1xuICAgICAgcGFkZGluZy1pbmxpbmU6IHZhcigtLWlkcy1kYXRhLWdyaWQtcGFkZGluZy1zbSk7XG4gICAgfVxuXG4gICAgaWRzLWh5cGVybGluayB7XG4gICAgICBwYWRkaW5nLWlubGluZTogdmFyKC0taWRzLXNwYWNlLXhzKTtcbiAgICB9XG4gIH1cbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBSb3cgaGVpZ2h0OiAnbWQnXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuW2RhdGEtcm93LWhlaWdodD0nbWQnXSB7XG4gIC5mb3JtYXR0ZXItcHJvZ3Jlc3Mge1xuICAgIGlkcy1wcm9ncmVzcy1iYXIge1xuICAgICAgbWFyZ2luOiB2YXIoLS1pZHMtZGF0YS1ncmlkLXBhZGRpbmctbWQpO1xuICAgIH1cbiAgfVxuXG4gIC8vIEFkanVzdCBkcm9wZG93biBlZGl0b3JcbiAgLmlkcy1kYXRhLWdyaWQtY2VsbC5pcy1lZGl0YWJsZSAuZWRpdG9yLWNlbGwtaWNvbiB7XG4gICAgbWFyZ2luLWlubGluZS1lbmQ6IDdweDtcbiAgfVxuXG4gIC5pZHMtZGF0YS1ncmlkLWNlbGwuaXMtZWRpdGFibGUuaXMtaW5saW5lIGlkcy1pY29uLmVkaXRvci1jZWxsLWljb24ge1xuICAgIG1hcmdpbi1pbmxpbmUtZW5kOiB2YXIoLS1pZHMtZGF0YS1ncmlkLXBhZGRpbmctc20pO1xuICB9XG5cbiAgLmlkcy1kYXRhLWdyaWQtY2VsbC5pcy1lZGl0YWJsZS5pcy1pbmxpbmUge1xuICAgIC0taWRzLWJ1dHRvbi10ZXJ0aWFyeS1jb2xvci1iYWNrZ3JvdW5kLWhvdmVyOiB2YXIoLS1pZHMtY29sb3ItdHJhbnNwYXJlbnQpO1xuXG4gICAgOjpzbG90dGVkKGlkcy10cmlnZ2VyLWJ1dHRvbikge1xuICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgdG9wOiAxMDBweDtcbiAgICB9XG4gIH1cblxuICAuaWRzLWRhdGEtZ3JpZC1jZWxsIHtcbiAgICAuaWRzLWRhdGEtZ3JpZC1jaGVja2JveC1jb250YWluZXI6bm90KC5pcy1zZWxlY3Rpb24tY2hlY2tib3gpIHtcbiAgICAgIHBhZGRpbmctaW5saW5lOiB2YXIoLS1pZHMtZGF0YS1ncmlkLXBhZGRpbmctbWQpO1xuICAgIH1cbiAgfVxufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFJvdyBoZWlnaHQ6ICdsZydcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5bZGF0YS1yb3ctaGVpZ2h0PSdsZyddIHtcbiAgLmlkcy1kYXRhLWdyaWQtY2VsbCB7XG4gICAgLmlkcy1kYXRhLWdyaWQtY2hlY2tib3gtY29udGFpbmVyOm5vdCguaXMtc2VsZWN0aW9uLWNoZWNrYm94KSB7XG4gICAgICBwYWRkaW5nLWlubGluZTogdmFyKC0taWRzLWRhdGEtZ3JpZC1wYWRkaW5nLWxnKTtcbiAgICB9XG4gIH1cbn1cblxuLy8gTGlzdCBTdHlsZSBGZWF0dXJlXG4uaWRzLWRhdGEtZ3JpZC5pcy1saXN0LXN0eWxlIHtcbiAgLy8gQ2hhbmdlIENlbGwgQm9yZGVycy9CR1xuICAuaWRzLWRhdGEtZ3JpZC1jZWxsIHtcbiAgICBib3JkZXItaW5saW5lLXN0YXJ0LXdpZHRoOiB2YXIoLS1pZHMtYm9yZGVyLXdpZHRoLW5vbmUpO1xuICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS1pZHMtZGF0YS1ncmlkLWxpc3QtY2VsbC1jb2xvci1ib3JkZXIpO1xuXG4gICAgJi5pcy1yZWFkb25seTpub3QoLmV4Y2x1ZGUtcmVhZG9ubHktc3R5bGUpIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWlkcy1kYXRhLWdyaWQtY2VsbC1jb2xvci1iYWNrZ3JvdW5kLXJlYWRvbmx5KVxuICAgIH1cblxuICAgICYuaXMtZGlzYWJsZWQge1xuICAgICAgY29sb3I6IHZhcigtLWlkcy1kYXRhLWdyaWQtY2VsbC1jb2xvci10ZXh0LWRpc2FibGVkKTtcbiAgICB9XG4gIH1cblxuICAuaWRzLWRhdGEtZ3JpZC1ib2R5IC5pZHMtZGF0YS1ncmlkLXJvdzpmaXJzdC1jaGlsZCAuaWRzLWRhdGEtZ3JpZC1jZWxsIHtcbiAgICBib3JkZXItdG9wOiAwO1xuICB9XG59XG5cbi8vIFN0YW5kYWxvbmUgQ3NzXG50ZC5pZHMtZGF0YS1ncmlkLWNlbGwge1xuICBkaXNwbGF5OiB0YWJsZS1jZWxsO1xuICBwYWRkaW5nLWlubGluZS1zdGFydDogdmFyKC0taWRzLXNwYWNlLXNtKTtcbiAgcGFkZGluZy1pbmxpbmUtZW5kOiB2YXIoLS1pZHMtc3BhY2Utc20pO1xufVxuXG4vLyBIYW5kbGUgUlRMXG46aG9zdChbZGlyPSdydGwnXSkge1xuICAuaWRzLWRhdGEtZ3JpZC5pcy1saXN0LXN0eWxlIHtcbiAgICAuaWRzLWRhdGEtZ3JpZC1jZWxsIHtcbiAgICAgIGJvcmRlci1pbmxpbmUtZW5kLXdpZHRoOiB2YXIoLS1pZHMtYm9yZGVyLXdpZHRoLW5vbmUpO1xuICAgIH1cbiAgfVxuXG4gIC8vIE5lZ2F0ZSBCb3JkZXJzXG4gIC5pZHMtZGF0YS1ncmlkLWNlbGwge1xuICAgICYuZnJvemVuLWxlZnQge1xuICAgICAgcG9zaXRpb246IHN0aWNreTtcbiAgICAgIHJpZ2h0OiB2YXIoLS1pZHMtc3BhY2Utbm9uZSk7XG5cbiAgICAgIC8vIER5bmFtaWNhbGx5IGFkZGVkIHdpZHRoc1xuICAgICAgQGZvciAkaSBmcm9tIDIgdGhyb3VnaCAxMCB7XG4gICAgICAgICY6bnRoLW9mLXR5cGUoI3skaX0pIHtcbiAgICAgICAgICByaWdodDogdmFyKC0taWRzLWRhdGEtZ3JpZC1mcm96ZW4tY29sdW1uLWxlZnQtd2lkdGgtI3skaX0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgJjpsYXN0LWNoaWxkIHtcbiAgICAgIGJvcmRlci1pbmxpbmUtZW5kLXdpZHRoOiB2YXIoLS1pZHMtYm9yZGVyLXdpZHRoLW5vbmUpO1xuICAgIH1cblxuICAgICYuaXMtZGlydHkge1xuICAgICAgLmlkcy1kYXRhLWdyaWQtdHJlZS1maWVsZC1jb250YWluZXI6OmJlZm9yZSxcbiAgICAgICY6OmJlZm9yZSB7XG4gICAgICAgIGJvcmRlci1jb2xvcjogdmFyKC0taWRzLWlucHV0LWRpcnR5LWluZGljYXRvci1jb2xvci1iYWNrZ3JvdW5kLWRpcnR5KSAgdmFyKC0taWRzLWlucHV0LWRpcnR5LWluZGljYXRvci1jb2xvci1iYWNrZ3JvdW5kLWRpcnR5KSB0cmFuc3BhcmVudCAgdHJhbnNwYXJlbnQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgJi5mb3JtYXR0ZXItdGV4dG1hc2sge1xuICAgICAgLmlzLXRleHRtYXNrIHtcbiAgICAgICAgdW5pY29kZS1iaWRpOiBwbGFpbnRleHQ7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8vIEZpeCBzbG90dGVkIHRyaWdnZXIgYnV0dG9uIG1hcmdpbnMgd2hlbiBuZXN0ZWQgd2l0aGluIGNlbGxzXG4uaWRzLXRyaWdnZXItZmllbGQtc2xvdC10cmlnZ2VyLWVuZCB7XG4gIG1hcmdpbi1pbmxpbmUtZW5kOiB2YXIoLS1pZHMtc3BhY2Utbm9uZSk7XG59XG4iLCJAdXNlICcuLi8uLi90aGVtZXMvbWl4aW5zL2lkcy1jb3JlLW1peGlucycgYXMgKjtcblxuLy8gSW5jbHVkZXMgSGlkZGVuIENsYXNzZXMgYW5kIE1peGlucyBmb3IgaGlkaW5nIGVsZW1lbnRzIGF0IGJyZWFrcG9pbnRzXG4uaGlkZSB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbi5oaWRlLXh4bC1kb3duIHtcbiAgQG1lZGlhIGFsbCBhbmQgKG1heC13aWR0aDogJGJyZWFrcG9pbnQteHhsKSB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxufVxuXG5AbWl4aW4gaGlkZS14eGwtZG93biB7XG4gIEBtZWRpYSBhbGwgYW5kIChtYXgtd2lkdGg6ICRicmVha3BvaW50LXh4bCkge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cbn1cblxuLmhpZGUteHhsLXVwIHtcbiAgQG1lZGlhIGFsbCBhbmQgKG1pbi13aWR0aDogJGJyZWFrcG9pbnQteHhsKSB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxufVxuXG5AbWl4aW4gaGlkZS14eGwtdXAge1xuICBAbWVkaWEgYWxsIGFuZCAobWluLXdpZHRoOiAkYnJlYWtwb2ludC14eGwpIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG59XG5cbi5oaWRlLXhsLWRvd24ge1xuICBAbWVkaWEgYWxsIGFuZCAobWF4LXdpZHRoOiAkYnJlYWtwb2ludC14bCkge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cbn1cblxuQG1peGluIGhpZGUteGwtZG93biB7XG4gIEBtZWRpYSBhbGwgYW5kIChtYXgtd2lkdGg6ICRicmVha3BvaW50LXhsKSB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxufVxuXG4uaGlkZS14bC11cCB7XG4gIEBtZWRpYSBhbGwgYW5kIChtaW4td2lkdGg6ICRicmVha3BvaW50LXhsKSB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxufVxuXG5AbWl4aW4gaGlkZS14bC11cCB7XG4gIEBtZWRpYSBhbGwgYW5kIChtaW4td2lkdGg6ICRicmVha3BvaW50LXhsKSB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxufVxuXG4uaGlkZS1sZy1kb3duIHtcbiAgQG1lZGlhIGFsbCBhbmQgKG1heC13aWR0aDogJGJyZWFrcG9pbnQtbGcpIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG59XG5cbkBtaXhpbiBoaWRlLWxnLWRvd24ge1xuICBAbWVkaWEgYWxsIGFuZCAobWF4LXdpZHRoOiAkYnJlYWtwb2ludC1sZykge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cbn1cblxuLmhpZGUtbGctdXAge1xuICBAbWVkaWEgYWxsIGFuZCAobWluLXdpZHRoOiAkYnJlYWtwb2ludC1sZykge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cbn1cblxuQG1peGluIGhpZGUtbGctdXAge1xuICBAbWVkaWEgYWxsIGFuZCAobWluLXdpZHRoOiAkYnJlYWtwb2ludC1sZykge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cbn1cblxuLmhpZGUtbWQtZG93biB7XG4gIEBtZWRpYSBhbGwgYW5kIChtYXgtd2lkdGg6ICRicmVha3BvaW50LW1kKSB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxufVxuXG5AbWl4aW4gaGlkZS1tZC1kb3duIHtcbiAgQG1lZGlhIGFsbCBhbmQgKG1heC13aWR0aDogJGJyZWFrcG9pbnQtbWQpIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG59XG5cbi5oaWRlLW1kLXVwIHtcbiAgQG1lZGlhIGFsbCBhbmQgKG1pbi13aWR0aDogJGJyZWFrcG9pbnQtbWQpIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG59XG5cbkBtaXhpbiBoaWRlLW1kLXVwIHtcbiAgQG1lZGlhIGFsbCBhbmQgKG1pbi13aWR0aDogJGJyZWFrcG9pbnQtbWQpIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG59XG5cbi5oaWRlLXNtLWRvd24ge1xuICBAbWVkaWEgYWxsIGFuZCAobWF4LXdpZHRoOiAkYnJlYWtwb2ludC1zbSkge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cbn1cblxuQG1peGluIGhpZGUtc20tZG93biB7XG4gIEBtZWRpYSBhbGwgYW5kIChtYXgtd2lkdGg6ICRicmVha3BvaW50LXNtKSB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxufVxuXG4uaGlkZS1zbS11cCB7XG4gIEBtZWRpYSBhbGwgYW5kIChtaW4td2lkdGg6ICRicmVha3BvaW50LXNtKSB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxufVxuXG5AbWl4aW4gaGlkZS1zbS11cCB7XG4gIEBtZWRpYSBhbGwgYW5kIChtaW4td2lkdGg6ICRicmVha3BvaW50LXNtKSB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxufVxuXG4uaGlkZS14cy1kb3duIHtcbiAgQG1lZGlhIGFsbCBhbmQgKG1heC13aWR0aDogJGJyZWFrcG9pbnQteHMpIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG59XG5cbkBtaXhpbiBoaWRlLXhzLWRvd24ge1xuICBAbWVkaWEgYWxsIGFuZCAobWF4LXdpZHRoOiAkYnJlYWtwb2ludC14cykge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cbn1cblxuLmhpZGUteHMtdXAge1xuICBAbWVkaWEgYWxsIGFuZCAobWluLXdpZHRoOiAkYnJlYWtwb2ludC14cykge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cbn1cblxuQG1peGluIGhpZGUteHMtdXAge1xuICBAbWVkaWEgYWxsIGFuZCAobWluLXdpZHRoOiAkYnJlYWtwb2ludC14cykge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cbn1cblxuQG1peGluIGJyZWFrcG9pbnQteHMtZG93biB7XG4gIEBtZWRpYSBhbGwgYW5kIChtYXgtd2lkdGg6ICRicmVha3BvaW50LXhzKSB7XG4gICAgQGNvbnRlbnQ7XG4gIH1cbn1cbiIsIkB1c2UgJy4uLy4uL3RoZW1lcy9taXhpbnMvaWRzLWhpZGUtbWl4aW4uc2NzcycgYXMgaGlkZTtcblxuOmhvc3QoLmhpZGUtc20tZG93bikge1xuICBAaW5jbHVkZSBoaWRlLmhpZGUtc20tZG93bigpO1xufVxuXG4uaWRzLXBvcHVwLW1lbnUge1xuICAmOm5vdChbaGlkZGVuXSkge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIHotaW5kZXg6IHZhcigtLWlkcy16LWluZGV4LTE2MCk7XG4gIH1cbn1cbiIsIi8qKlxuICogQ2hlY2tib3ggTWl4aW5zLlxuICovXG5AdXNlICdzYXNzOmxpc3QnO1xuQHVzZSAnLi4vLi4vdGhlbWVzL21peGlucy9pZHMtY29yZS1taXhpbnMnIGFzIG1peGlucztcblxuLy8gVW5jaGVja2VkXG5AbWl4aW4gY2hlY2tib3gtdW5jaGVja2VkKCkge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGJvcmRlcjogdmFyKC0taWRzLWNoZWNrYm94LWJvcmRlcik7XG4gIGJvcmRlci1yYWRpdXM6IHZhcigtLWlkcy1jaGVja2JveC1ib3JkZXItcmFkaXVzKTtcbiAgaGVpZ2h0OiAxNHB4O1xuICB3aWR0aDogMTRweDtcbiAgbGVmdDogMDtcbiAgdG9wOiAzcHg7XG59XG5cbkBtaXhpbiBjaGVja2JveC11bmNoZWNrZWQtZXJyb3Ige1xuICBib3JkZXItY29sb3I6IHZhcigtLWlkcy1jaGVja2JveC1jb2xvci1ib3JkZXItZXJyb3IpO1xufVxuXG4vLyBDaGVja2VkXG5AbWl4aW4gY2hlY2tib3gtY2hlY2tlZCgpIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0taWRzLWNoZWNrYm94LWNvbG9yLWJhY2tncm91bmQtc2VsZWN0ZWQpO1xuICBib3JkZXItY29sb3I6IHZhcigtLWlkcy1jaGVja2JveC1jb2xvci1ib3JkZXItc2VsZWN0ZWQpO1xufVxuXG5AbWl4aW4gY2hlY2tib3gtY2hlY2tlZC1hZnRlciB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgZGlzcGxheTogYmxvY2s7XG4gIGJvcmRlcjogdmFyKC0taWRzLWZvbnQtc2l6ZS0yeHMpIHNvbGlkIHZhcigtLWlkcy1jaGVja2JveC1jb2xvci1ib3JkZXItc2VsZWN0ZWQtYWZ0ZXIpO1xuICBib3JkZXItd2lkdGg6IHZhcigtLWlkcy1jaGVja2JveC1ib3JkZXItd2lkdGgtc2VsZWN0ZWQtYWZ0ZXIpO1xuICBhbmltYXRpb246IGNoZWNrIDAuMTVzO1xuICB0cmFuc2Zvcm06IHJvdGF0ZSg0NWRlZyk7XG4gIGNvbnRlbnQ6ICcnO1xuICBoZWlnaHQ6IDEwcHg7XG4gIGxlZnQ6IDRweDtcbiAgdG9wOiAwO1xuICB3aWR0aDogNHB4O1xufVxuXG4vLyBJbmRldGVybWluYXRlXG5AbWl4aW4gY2hlY2tib3gtaW5kZXRlcm1pbmF0ZSgpIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0taWRzLWNoZWNrYm94LWNvbG9yLWJhY2tncm91bmQtaW5kZXRlcm1pbmF0ZSk7XG4gIGJvcmRlci1jb2xvcjogdmFyKC0taWRzLWNoZWNrYm94LWNvbG9yLWJvcmRlci1pbmRldGVybWluYXRlKTtcbn1cblxuQG1peGluIGNoZWNrYm94LWluZGV0ZXJtaW5hdGUtYWZ0ZXIge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGFuaW1hdGlvbjogY2hlY2tpbmRldGVybWluYXRlIDAuMTVzO1xuICBkaXNwbGF5OiBibG9jaztcbiAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0taWRzLWNoZWNrYm94LWNvbG9yLWJvcmRlci1pbmRldGVybWluYXRlLWFmdGVyKTtcbiAgYm9yZGVyLXdpZHRoOiB2YXIoLS1pZHMtY2hlY2tib3gtYm9yZGVyLXdpZHRoLWluZGV0ZXJtaW5hdGUpO1xuICBjb250ZW50OiAnJztcbiAgaGVpZ2h0OiA2cHg7XG4gIGxlZnQ6IDJweDtcbiAgdG9wOiAwO1xuICB0cmFuc2Zvcm06IG5vbmU7XG4gIHdpZHRoOiAxMHB4O1xufVxuXG4vLyBEaXNhYmxlZFxuQG1peGluIGNoZWNrYm94LWRpc2FibGVkLXVuY2hlY2tlZCB7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWlkcy1jaGVja2JveC1jb2xvci1iYWNrZ3JvdW5kLWRpc2FibGVkKTtcbiAgYm9yZGVyLWNvbG9yOiB2YXIoLS1pZHMtY2hlY2tib3gtY29sb3ItYm9yZGVyLWRpc2FibGVkKTtcbiAgY3Vyc29yOiB2YXIoLS1pZHMtY3Vyc29yLWRlZmF1bHQpO1xufVxuXG5AbWl4aW4gY2hlY2tib3gtZGlzYWJsZWQtdW5jaGVja2VkLWVycm9yIHtcbiAgYm9yZGVyLWNvbG9yOiB2YXIoLS1pZHMtY2hlY2tib3gtY29sb3ItYm9yZGVyLWZvY3VzLWVycm9yKTtcbn1cblxuQG1peGluIGNoZWNrYm94LWRpc2FibGVkLWNoZWNrZWQoKSB7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWlkcy1jaGVja2JveC1jb2xvci1iYWNrZ3JvdW5kLXNlbGVjdGVkLWRpc2FibGVkKTtcbiAgYm9yZGVyLWNvbG9yOiB2YXIoLS1pZHMtY2hlY2tib3gtY29sb3ItYm9yZGVyLXNlbGVjdGVkLWRpc2FibGVkKTtcbn1cblxuQG1peGluIGNoZWNrYm94LWRpc2FibGVkLXRleHQge1xuICBjdXJzb3I6IHZhcigtLWlkcy1jdXJzb3ItZGVmYXVsdCk7XG4gIGNvbG9yOiB2YXIoLS1pZHMtY2hlY2tib3gtY29sb3ItdGV4dC1kaXNhYmxlZCk7XG59XG5cbi8vIEZvY3VzXG5AbWl4aW4gY2hlY2tib3gtZm9jdXMge1xuICBib3JkZXItY29sb3I6IHZhcigtLWlkcy1jaGVja2JveC1jb2xvci1ib3JkZXItZm9jdXMpO1xuICBib3gtc2hhZG93OiB2YXIoLS1pZHMtY2hlY2tib3gtc2hhZG93LWZvY3VzKTtcbn1cblxuQG1peGluIGNoZWNrYm94LWZvY3VzLWVycm9yIHtcbiAgYm9yZGVyLWNvbG9yOiB2YXIoLS1pZHMtY2hlY2tib3gtY29sb3ItYm9yZGVyLWZvY3VzLWVycm9yKTtcbiAgYm94LXNoYWRvdzogdmFyKC0taWRzLWNoZWNrYm94LXNoYWRvdy1mb2N1cy1lcnJvcik7XG59XG5cbi8vIENvbG9yZWRcbiRjb2xvci1uYW1lczogJ2dyZWVuJyAncHVycGxlJyAnYmx1ZScgJ29yYW5nZScgJ3JlZCc7XG4kY29sb3ItdmFyczogLS1pZHMtY29sb3ItZ3JlZW4tNzAgLS1pZHMtY29sb3ItcHVycGxlLTcwIC0taWRzLWNvbG9yLWJsdWUtNzAgLS1pZHMtY29sb3Itb3JhbmdlLTcwIC0taWRzLWNvbG9yLXJlZC03MDtcblxuQG1peGluIGNoZWNrYm94LWNvbG9yZWQoKSB7XG4gIEBlYWNoICRuYW1lIGluICRjb2xvci1uYW1lcyB7XG4gICAgJGk6IGxpc3QuaW5kZXgoJGNvbG9yLW5hbWVzLCAkbmFtZSk7XG4gICAgJGNvbG9yOiB2YXIoI3tsaXN0Lm50aCgkY29sb3ItdmFycywgJGkpfSk7XG5cbiAgICAmW2NvbG9yPScjeyRuYW1lfSddIGlucHV0W3R5cGU9J2NoZWNrYm94J10ge1xuICAgICAgfiAuY2hlY2ttYXJrIHtcbiAgICAgICAgQGluY2x1ZGUgY2hlY2tib3gtY29sb3JlZC1ib3goJGNvbG9yKTtcbiAgICAgIH1cblxuICAgICAgJjpkaXNhYmxlZCB+IC5jaGVja21hcmsge1xuICAgICAgICBAaW5jbHVkZSBjaGVja2JveC1kaXNhYmxlZC11bmNoZWNrZWQoKTtcbiAgICAgIH1cblxuICAgICAgJjpkaXNhYmxlZDpjaGVja2VkIH4gLmNoZWNrbWFyayB7XG4gICAgICAgIEBpbmNsdWRlIGNoZWNrYm94LWRpc2FibGVkLWNoZWNrZWQoKTtcbiAgICAgIH1cblxuICAgICAgJjpmb2N1cyB+IC5jaGVja21hcmsge1xuICAgICAgICBAaW5jbHVkZSBjaGVja2JveC1jb2xvcmVkLWJveC1mb2N1cygkY29sb3IpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5AbWl4aW4gY2hlY2tib3gtY29sb3JlZC1ib3goJGNvbG9yKSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICRjb2xvcjtcbiAgYm9yZGVyLWNvbG9yOiAkY29sb3I7XG59XG5cbkBtaXhpbiBjaGVja2JveC1jb2xvcmVkLWJveC1mb2N1cygkY29sb3IpIHtcbiAgYm9yZGVyLWNvbG9yOiAkY29sb3I7XG59XG5cbi8vIEFuaW1hdGlvbnNcbkBrZXlmcmFtZXMgY2hlY2sge1xuICAwJSB7XG4gICAgaGVpZ2h0OiAwO1xuICAgIGxlZnQ6IDA7XG4gICAgdG9wOiA4cHg7XG4gICAgd2lkdGg6IDA7XG4gIH1cblxuICA1MCUge1xuICAgIGhlaWdodDogMDtcbiAgICBsZWZ0OiAwO1xuICAgIHRvcDogOHB4O1xuICAgIHdpZHRoOiA0cHg7XG4gIH1cblxuICAxMDAlIHtcbiAgICBoZWlnaHQ6IDEwcHg7XG4gICAgbGVmdDogNHB4O1xuICAgIHRvcDogMDtcbiAgICB3aWR0aDogNHB4O1xuICB9XG59XG5cbkBrZXlmcmFtZXMgY2hlY2tpbmRldGVybWluYXRlIHtcbiAgMCUge1xuICAgIHdpZHRoOiAwO1xuICB9XG5cbiAgMTAwJSB7XG4gICAgd2lkdGg6IDEwcHg7XG4gIH1cbn1cbiIsIi8qKlxuICogUmFkaW8gTWl4aW5zLlxuICovXG5AdXNlICdzYXNzOmxpc3QnO1xuQHVzZSAnLi4vLi4vdGhlbWVzL21peGlucy9pZHMtY29yZS1taXhpbnMnIGFzIG1peGlucztcblxuLy8gVW5jaGVja2VkXG5AbWl4aW4gcmFkaW8tdW5jaGVja2VkIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1pZHMtcmFkaW8tY29sb3ItYm9yZGVyLWRlZmF1bHQpO1xuICBib3JkZXItcmFkaXVzOiB2YXIoLS1pZHMtcmFkaW8tYm9yZGVyLXJhZGl1cyk7XG4gIGhlaWdodDogMTRweDtcbiAgbGVmdDogMDtcbiAgdG9wOiAzcHg7XG4gIHRyYW5zaXRpb246IGJvcmRlci1jb2xvciB2YXIoLS1pZHMtbW90aW9uLWR1cmF0aW9uKSB2YXIoLS1pZHMtbW90aW9uLWVhc2UpO1xuICB3aWR0aDogMTRweDtcbn1cblxuQG1peGluIHJhZGlvLXVuY2hlY2tlZC1hZnRlciB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0taWRzLXJhZGlvLWNvbG9yLWJhY2tncm91bmQpO1xuICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1pZHMtcmFkaW8tY29sb3ItYmFja2dyb3VuZCk7XG4gIGJvcmRlci1yYWRpdXM6IHZhcigtLWlkcy1yYWRpby1ib3JkZXItcmFkaXVzKTtcbiAgY29udGVudDogJyc7XG4gIGhlaWdodDogMDtcbiAgbGVmdDogNnB4O1xuICB0b3A6IDZweDtcbiAgdHJhbnNpdGlvbjogYWxsIHZhcigtLWlkcy1tb3Rpb24tZHVyYXRpb24pIHZhcigtLWlkcy1tb3Rpb24tZWFzZSk7XG4gIHdpZHRoOiAwO1xufVxuXG5AbWl4aW4gcmFkaW8tdW5jaGVja2VkLWVycm9yLWNpcmNsZSB7XG4gIGJvcmRlci1jb2xvcjogdmFyKC0taWRzLWNvbG9yLWVycm9yLWRlZmF1bHQpO1xufVxuXG5AbWl4aW4gcmFkaW8tdW5jaGVja2VkLWVycm9yLWxhYmVsLXRleHQge1xuICBjb2xvcjogdmFyKC0taWRzLWNvbG9yLWVycm9yLWRlZmF1bHQpO1xufVxuXG4vLyBDaGVja2VkXG5AbWl4aW4gcmFkaW8tY2hlY2tlZCB7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWlkcy1yYWRpby1jb2xvci1iYWNrZ3JvdW5kLXNlbGVjdGVkKTtcbiAgYm9yZGVyLWNvbG9yOiB2YXIoLS1pZHMtcmFkaW8tY29sb3ItYm9yZGVyLXNlbGVjdGVkKTtcbn1cblxuQG1peGluIHJhZGlvLWNoZWNrZWQtYWZ0ZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1pZHMtcmFkaW8taW5uZXItY29sb3ItYmFja2dyb3VuZC1zZWxlY3RlZCk7XG4gIGJvcmRlci1jb2xvcjogdmFyKC0taWRzLXJhZGlvLWlubmVyLWNvbG9yLWJhY2tncm91bmQtc2VsZWN0ZWQpO1xuICBib3JkZXItd2lkdGg6IDJweDtcbiAgaGVpZ2h0OiA0cHg7XG4gIGxlZnQ6IDNweDtcbiAgdG9wOiAzcHg7XG4gIHdpZHRoOiA0cHg7XG59XG5cbi8vIERpc2FibGVkXG5AbWl4aW4gcmFkaW8tZGlzYWJsZWQtdW5jaGVja2VkIHtcbiAgYm9yZGVyLWNvbG9yOiB2YXIoLS1pZHMtcmFkaW8tY29sb3ItYm9yZGVyLWRpc2FibGVkKTtcbiAgY3Vyc29yOiB2YXIoLS1pZHMtY3Vyc29yLWRlZmF1bHQpO1xuICBib3gtc2hhZG93OiBub25lO1xuICBvcGFjaXR5OiB2YXIoLS1pZHMtcmFkaW8tZGlzYWJsZWQtb3BhY2l0eSk7XG59XG5cbkBtaXhpbiByYWRpby1kaXNhYmxlZC11bmNoZWNrZWQtZXJyb3ItY2lyY2xlIHtcbiAgYm9yZGVyLWNvbG9yOiB2YXIoLS1pZHMtcmFkaW8tY29sb3ItYm9yZGVyLWRpc2FibGVkKTtcbn1cblxuQG1peGluIHJhZGlvLWRpc2FibGVkLXVuY2hlY2tlZC1lcnJvci1sYWJlbC10ZXh0IHtcbiAgY29sb3I6IHZhcigtLWlkcy1yYWRpby1jb2xvci1ib3JkZXItZGlzYWJsZWQpO1xufVxuXG5AbWl4aW4gcmFkaW8tZGlzYWJsZWQtY2hlY2tlZCgpIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0taWRzLXJhZGlvLWNvbG9yLWJhY2tncm91bmQtc2VsZWN0ZWQtZGlzYWJsZWQpO1xuICBib3JkZXItY29sb3I6IHZhcigtLWlkcy1yYWRpby1jb2xvci1ib3JkZXItc2VsZWN0ZWQtZGlzYWJsZWQpO1xuICBvcGFjaXR5OiB2YXIoLS1pZHMtcmFkaW8tZGlzYWJsZWQtb3BhY2l0eSk7XG59XG5cbkBtaXhpbiByYWRpby1kaXNhYmxlZC10ZXh0IHtcbiAgY3Vyc29yOiB2YXIoLS1pZHMtY3Vyc29yLWRlZmF1bHQpO1xuICBjb2xvcjogdmFyKC0taWRzLXJhZGlvLWNvbG9yLXRleHQtZGlzYWJsZWQpO1xuICBvcGFjaXR5OiB2YXIoLS1pZHMtcmFkaW8tZGlzYWJsZWQtb3BhY2l0eSk7XG59XG5cbi8vIEZvY3VzXG5AbWl4aW4gcmFkaW8tZm9jdXMge1xuICBib3gtc2hhZG93OiB2YXIoLS1pZHMtcmFkaW8tc2hhZG93KTtcbn1cblxuQG1peGluIHJhZGlvLWZvY3VzLW5vdC1oaWRlLWZvY3VzIHtcbiAgYm94LXNoYWRvdzogdmFyKC0taWRzLXJhZGlvLXNoYWRvdy1mb2N1cyk7XG59XG4iLCJAdXNlICdzYXNzOm1hcCc7XG5AdXNlICcuLi8uLi90aGVtZXMvbWl4aW5zL2lkcy1jb3JlLW1peGlucycgYXMgbWl4aW5zO1xuQHVzZSAnLi9pZHMtZGF0YS1ncmlkLWNvbW1vbicgYXMgKjtcbkB1c2UgJy4vaWRzLWRhdGEtZ3JpZC1maWx0ZXJzJyBhcyAqO1xuQHVzZSAnLi9pZHMtZGF0YS1ncmlkLWhlYWRlcicgYXMgKjtcbkB1c2UgJy4vaWRzLWRhdGEtZ3JpZC1yb3cnIGFzICo7XG5AdXNlICcuL2lkcy1kYXRhLWdyaWQtY2VsbCcgYXMgKjtcbkB1c2UgJy4uLy4uL2NvbXBvbmVudHMvaWRzLXBvcHVwLW1lbnUvaWRzLXBvcHVwLW1lbnUnIGFzICo7XG5AdXNlICcuLi8uLi90aGVtZXMvbWl4aW5zL2lkcy1jaGVja2JveC1taXhpbicgYXMgKjtcbkB1c2UgJy4uLy4uL3RoZW1lcy9taXhpbnMvaWRzLXJhZGlvLW1peGluJyBhcyAqO1xuXG46aG9zdCB7XG4gIC0taWRzLWRhdGEtZ3JpZC1jb2x1bW4td2lkdGhzOiByZXBlYXQoMSwgbWlubWF4KDExMHB4LCAxZnIpKTtcblxuICBmb250LXdlaWdodDogbm9ybWFsO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG59XG5cbi5pZHMtZGF0YS1ncmlkIHtcbiAgLy8gT3V0c2lkZSBib3JkZXIgYW5kIEJhY2tncm91bmQgYW5kIHNpemluZ1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1pZHMtZGF0YS1ncmlkLWNvbG9yLWJhY2tncm91bmQpO1xuICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1pZHMtZGF0YS1ncmlkLWNlbGwtY29sb3ItYm9yZGVyKTtcbiAgYm9yZGVyLXJhZGl1czogdmFyKC0taWRzLWJvcmRlci1yYWRpdXMtMnhzKTtcbiAgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgb3ZlcmZsb3c6IGF1dG87XG4gIHdpZHRoOiAxMDAlO1xuICBvdXRsaW5lOiBub25lO1xuXG4gIC8vIE5lZWRlZCBzbyBzdGlja3kgaGVhZGVyIHdvcmtzIGluIHNhZmFyaVxuICBkaXNwbGF5OiBpbmxpbmUtZ3JpZDtcbiAgYWxpZ24tY29udGVudDogZmxleC1zdGFydDtcblxuICAvLyBGb250IEluZm9cbiAgQGluY2x1ZGUgbWl4aW5zLmFudGlhbGlhc2VkKCk7XG5cbiAgZm9udC1mYW1pbHk6IHZhcigtLWlkcy1mb250LWZhbWlseS1kZWZhdWx0KSwgdmFyKC0taWRzLWZvbnQtZmFtaWx5LXN5c3RlbS1zYW5zKTtcbiAgZm9udC1zaXplOiB2YXIoLS1pZHMtZm9udC1zaXplLXNtKTtcblxuICAvLyBTZWxlY3Rpb24gQ2hlY2tib3hcbiAgLmlkcy1kYXRhLWdyaWQtY2hlY2tib3gtY29udGFpbmVyIHtcbiAgICBjdXJzb3I6IHZhcigtLWlkcy1jdXJzb3ItcG9pbnRlcik7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICB3aWR0aDogMTAwJTtcbiAgfVxuXG4gIC8vIENoZWNrYm94IGFsaWdubWVudHNcbiAgLmlkcy1kYXRhLWdyaWQtY2VsbC5hbGlnbi1sZWZ0IHtcbiAgICAuaWRzLWRhdGEtZ3JpZC10cmVlLWNvbnRhaW5lcixcbiAgICAuaWRzLWRhdGEtZ3JpZC1jaGVja2JveC1jb250YWluZXIge1xuICAgICAganVzdGlmeS1jb250ZW50OiBzdGFydDtcbiAgICB9XG4gIH1cblxuICAuaWRzLWRhdGEtZ3JpZC1jZWxsLmFsaWduLWNlbnRlciB7XG4gICAgLmlkcy1kYXRhLWdyaWQtY2hlY2tib3gtY29udGFpbmVyIHtcbiAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgIH1cbiAgfVxuXG4gIC5pZHMtZGF0YS1ncmlkLWNlbGwuYWxpZ24tcmlnaHQge1xuICAgIC5pZHMtZGF0YS1ncmlkLWNoZWNrYm94LWNvbnRhaW5lciB7XG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGVuZDtcbiAgICB9XG4gIH1cblxuICAuaWRzLWRhdGEtZ3JpZC1jaGVja2JveCB7XG4gICAgQGluY2x1ZGUgY2hlY2tib3gtdW5jaGVja2VkKCk7XG5cbiAgICAmLmVkaXRhYmxlIHtcbiAgICAgIGN1cnNvcjogdmFyKC0taWRzLWN1cnNvci1wb2ludGVyKTtcbiAgICB9XG5cbiAgICBib3JkZXItY29sb3I6IHZhcigtLWlkcy1kYXRhLWdyaWQtY2VsbC1jaGVja2JveC1jb2xvci1ib3JkZXIpO1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBsZWZ0OiB2YXIoLS1pZHMtc3BhY2Utbm9uZSk7XG4gICAgdG9wOiB2YXIoLS1pZHMtc3BhY2Utbm9uZSk7XG5cbiAgICAmLmRpc2FibGVkIHtcbiAgICAgIEBpbmNsdWRlIGNoZWNrYm94LWRpc2FibGVkLXVuY2hlY2tlZCgpO1xuXG4gICAgICBvcGFjaXR5OiAwLjQ7XG4gICAgfVxuXG4gICAgJi5jaGVja2VkIHtcbiAgICAgIEBpbmNsdWRlIGNoZWNrYm94LWNoZWNrZWQoKTtcblxuICAgICAgJjo6YWZ0ZXIge1xuICAgICAgICBAaW5jbHVkZSBjaGVja2JveC1jaGVja2VkLWFmdGVyKCk7XG5cbiAgICAgICAgYW5pbWF0aW9uOiBub25lO1xuICAgICAgfVxuXG4gICAgICAmLmRpc2FibGVkIHtcbiAgICAgICAgQGluY2x1ZGUgY2hlY2tib3gtZGlzYWJsZWQtY2hlY2tlZCgpO1xuICAgICAgfVxuICAgIH1cblxuICAgICYuaW5kZXRlcm1pbmF0ZSB7XG4gICAgICBAaW5jbHVkZSBjaGVja2JveC1pbmRldGVybWluYXRlKCk7XG5cbiAgICAgICY6OmFmdGVyIHtcbiAgICAgICAgQGluY2x1ZGUgY2hlY2tib3gtaW5kZXRlcm1pbmF0ZS1hZnRlcigpO1xuXG4gICAgICAgIGFuaW1hdGlvbjogbm9uZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBTZWxlY3Rpb24gUmFkaW9cbiAgLmlkcy1kYXRhLWdyaWQtcmFkaW8tY29udGFpbmVyIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgIHdpZHRoOiAxMDAlO1xuICB9XG5cbiAgLmlkcy1kYXRhLWdyaWQtcmFkaW8ge1xuICAgIEBpbmNsdWRlIHJhZGlvLXVuY2hlY2tlZCgpO1xuXG4gICAgY3Vyc29yOiB2YXIoLS1pZHMtY3Vyc29yLXBvaW50ZXIpO1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBsZWZ0OiB2YXIoLS1pZHMtc3BhY2Utbm9uZSk7XG4gICAgdG9wOiB2YXIoLS1pZHMtc3BhY2Utbm9uZSk7XG5cbiAgICAmOjphZnRlciB7XG4gICAgICBAaW5jbHVkZSByYWRpby11bmNoZWNrZWQtYWZ0ZXIoKTtcbiAgICB9XG5cbiAgICAmLmRpc2FibGVkIHtcbiAgICAgIEBpbmNsdWRlIHJhZGlvLWRpc2FibGVkLXVuY2hlY2tlZCgpO1xuICAgIH1cblxuICAgICYuY2hlY2tlZCB7XG4gICAgICBAaW5jbHVkZSByYWRpby1jaGVja2VkKCk7XG5cbiAgICAgICY6OmFmdGVyIHtcbiAgICAgICAgQGluY2x1ZGUgcmFkaW8tY2hlY2tlZC1hZnRlcigpO1xuICAgICAgfVxuXG4gICAgICAmLmRpc2FibGVkIHtcbiAgICAgICAgQGluY2x1ZGUgcmFkaW8tZGlzYWJsZWQtY2hlY2tlZCgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIFRyZWUgR3JpZFxuICAuaWRzLWRhdGEtZ3JpZC1jZWxsIC5pZHMtZGF0YS1ncmlkLXRyZWUtY29udGFpbmVyIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcblxuICAgIGlkcy1idXR0b24gKyAuaWRzLWRhdGEtZ3JpZC10cmVlLWZpZWxkLWNvbnRhaW5lciAudGV4dC1lbGxpcHNpcyB7XG4gICAgICBtYXJnaW4taW5saW5lLXN0YXJ0OiB2YXIoLS1pZHMtc3BhY2Utbm9uZSk7XG4gICAgfVxuXG4gICAgaWRzLWJ1dHRvbiB7XG4gICAgICBwYWRkaW5nLWlubGluZS1zdGFydDogdmFyKC0taWRzLXNwYWNlLTJ4cyk7XG4gICAgICBwYWRkaW5nLWlubGluZS1lbmQ6IHZhcigtLWlkcy1zcGFjZS1ub25lKTtcbiAgICB9XG5cbiAgICBpZHMtYnV0dG9uLmV4cGFuZC1idXR0b24ge1xuICAgICAgLS1pZHMtYnV0dG9uLXRlcnRpYXJ5LWNvbG9yLWJhY2tncm91bmQtaG92ZXI6IHZhcigtLWlkcy1jb2xvci10cmFuc3BhcmVudCk7XG4gICAgICAtLWlkcy1idXR0b24tdGVydGlhcnktY29sb3ItYm9yZGVyLWhvdmVyOiB2YXIoLS1pZHMtY29sb3ItdHJhbnNwYXJlbnQpO1xuICAgICAgLS1pZHMtYnV0dG9uLXRlcnRpYXJ5LWNvbG9yLWJhY2tncm91bmQtcHJlc3NlZDogdmFyKC0taWRzLWNvbG9yLXRyYW5zcGFyZW50KTtcbiAgICAgIC0taWRzLWJ1dHRvbi10ZXJ0aWFyeS1jb2xvci1ib3JkZXItcHJlc3NlZDogdmFyKC0taWRzLWNvbG9yLXRyYW5zcGFyZW50KTtcbiAgICB9XG5cbiAgICAudGV4dC1lbGxpcHNpcyB7XG4gICAgICBpZHMtaHlwZXJsaW5rIHtcbiAgICAgICAgbWFyZ2luLWlubGluZS1zdGFydDogdmFyKC0taWRzLXNwYWNlLW5vbmUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC5pZHMtZGF0YS1ncmlkLWNlbGwgLmlkcy1kYXRhLWdyaWQtdHJlZS1maWVsZC1jb250YWluZXIge1xuICAgIGRpc3BsYXk6IGlubGluZS1ncmlkO1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIE1hcHMgdXNlZCBmb3IgYWx0ZXJpbmcgYWxpZ25tZW50cyBvZiBlZGl0YWJsZSBncmlkIGNlbGxzIGluIGRpZmZlcmVudCBzY2VuYXJpb3MuXG4gIC8vIFRoZXNlIHJ1bGVzIGFyZSBiYXNlZCBvbiByb3ctaGVpZ2h0LCB3aGljaCBpcyBkZWZpbmVkIGF0IHRoZSBgLmlkcy1kYXRhLWdyaWRgIGVsZW1lbnQgbGV2ZWwuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgJHJvdy1oZWlnaHQtaW5saW5lLXRyZWUtZ3JpZC1idXR0b24td2lkdGhzOiAoXG4gICAgJ3h4cyc6IDMwLFxuICAgICd4cyc6IDMyLFxuICAgICdzbSc6IDM0LFxuICAgICdtZCc6IDQwLFxuICAgICdsZyc6IDQwXG4gICk7XG5cbiAgJHJvdy1oZWlnaHQtcGFkZGluZy1vZmZzZXRzOiAoXG4gICAgJ3h4cyc6IDEyLFxuICAgICd4cyc6IDEwLFxuICAgICdzbSc6IDgsXG4gICAgJ21kJzogMyxcbiAgICAnbGcnOiAzXG4gICk7XG5cbiAgJHJvdy1oZWlnaHQtZGlydHktaW5kaWNhdG9yLW9mZnNldHM6IChcbiAgICAneHhzJzogMSxcbiAgICAneHMnOiAxLFxuICAgICdzbSc6IDEsXG4gICAgJ21kJzogMixcbiAgICAnbGcnOiAyXG4gICk7XG5cbiAgJHJvdy1oZWlnaHQtaW5saW5lLWRpcnR5LWluZGljYXRvci1vZmZzZXRzOiAoXG4gICAgJ3h4cyc6IDMsXG4gICAgJ3hzJzogNCxcbiAgICAnc20nOiA1LFxuICAgICdtZCc6IDYsXG4gICAgJ2xnJzogNlxuICApO1xuXG4gICRyb3ctaGVpZ2h0LWluZGVudHM6IChcbiAgICAneHhzJzogMTIsXG4gICAgJ3hzJzogMTMsXG4gICAgJ3NtJzogMTUsXG4gICAgJ21kJzogMTcsXG4gICAgJ2xnJzogMTdcbiAgKTtcblxuICAkcm93LWhlaWdodC1vdXRsaW5lLXBhZGRpbmc6IChcbiAgICAneHhzJzogMSxcbiAgICAneHMnOiAyLFxuICAgICdzbSc6IDMsXG4gICAgJ21kJzogNCxcbiAgICAnbGcnOiA0XG4gICk7XG5cbiAgJHJvdy1oZWlnaHQtb3V0bGluZS1vZmZzZXRzOiAoXG4gICAgJ3h4cyc6IDEsXG4gICAgJ3hzJzogMixcbiAgICAnc20nOiA1LFxuICAgICdtZCc6IDgsXG4gICAgJ2xnJzogMTJcbiAgKTtcblxuICBAZWFjaCAkcm93SGVpZ2h0LCAkb2Zmc2V0IGluICRyb3ctaGVpZ2h0LXBhZGRpbmctb2Zmc2V0cyB7XG4gICAgLy8gVGhlc2UgdmFsdWVzIGFyZSBkaWZmZXJlbnQgZm9yIGVhY2ggUm93IEhlaWdodFxuICAgICRidXR0b24td2lkdGg6IG1hcC5nZXQoJHJvdy1oZWlnaHQtaW5saW5lLXRyZWUtZ3JpZC1idXR0b24td2lkdGhzLCAkcm93SGVpZ2h0KTtcbiAgICAkaW5kZW50OiBtYXAuZ2V0KCRyb3ctaGVpZ2h0LWluZGVudHMsICRyb3dIZWlnaHQpO1xuICAgICRkaXJ0eS1pbmRpY2F0b3Itb2Zmc2V0OiBtYXAuZ2V0KCRyb3ctaGVpZ2h0LWRpcnR5LWluZGljYXRvci1vZmZzZXRzLCAkcm93SGVpZ2h0KTtcbiAgICAkaW5saW5lLWRpcnR5LWluZGljYXRvci1vZmZzZXQ6IG1hcC5nZXQoJHJvdy1oZWlnaHQtaW5saW5lLWRpcnR5LWluZGljYXRvci1vZmZzZXRzLCAkcm93SGVpZ2h0KTtcbiAgICAkb3V0bGluZS1vZmZzZXQ6IG1hcC5nZXQoJHJvdy1oZWlnaHQtb3V0bGluZS1vZmZzZXRzLCAkcm93SGVpZ2h0KTtcbiAgICAkb3V0bGluZS1wYWRkaW5nOiBtYXAuZ2V0KCRyb3ctaGVpZ2h0LW91dGxpbmUtcGFkZGluZywgJHJvd0hlaWdodCk7XG5cbiAgICAmW2RhdGEtcm93LWhlaWdodD0nI3skcm93SGVpZ2h0fSddIHtcbiAgICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgICAgLy8gVG9wLWxldmVsIGdyaWQgYWxpZ25tZW50cyB0aGF0IGRlcGVuZCBzb2xlbHkgb24gcm93IGhlaWdodFxuICAgICAgLmlkcy1kYXRhLWdyaWQtY2VsbCB7XG4gICAgICAgICYuaXMtZGlydHkge1xuICAgICAgICAgICY6bm90KC5pcy1pbmxpbmUpIHtcbiAgICAgICAgICAgICYuZm9ybWF0dGVyLXRleHQge1xuICAgICAgICAgICAgICAmOjpiZWZvcmUge1xuICAgICAgICAgICAgICAgIGluc2V0LWJsb2NrLXN0YXJ0OiAjeyRkaXJ0eS1pbmRpY2F0b3Itb2Zmc2V0fXB4O1xuICAgICAgICAgICAgICAgIG1hcmdpbi1pbmxpbmUtc3RhcnQ6ICN7JGRpcnR5LWluZGljYXRvci1vZmZzZXR9cHg7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICAmLmlzLWlubGluZSB7XG4gICAgICAgICAgICAmLmZvcm1hdHRlci10ZXh0IHtcbiAgICAgICAgICAgICAgJjo6YmVmb3JlIHtcbiAgICAgICAgICAgICAgICBpbnNldC1ibG9jay1zdGFydDogI3skaW5saW5lLWRpcnR5LWluZGljYXRvci1vZmZzZXR9cHg7XG4gICAgICAgICAgICAgICAgbWFyZ2luLWlubGluZS1zdGFydDogI3skaW5saW5lLWRpcnR5LWluZGljYXRvci1vZmZzZXR9cHg7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBEZWZpbmVzIHRoZSBwb3NpdGlvbiBvZiB0aGUgXCJpbmxpbmUtZWRpdFwiIHN0eWxlJ3Mgb3V0bGluZVxuICAgICAgICAmLmlzLWVkaXRhYmxlLmlzLWlubGluZSB7XG4gICAgICAgICAgJjpub3QoLmZvcm1hdHRlci10cmVlKSB7XG4gICAgICAgICAgICBAaW5jbHVkZSBpZHMtZGF0YS1ncmlkLWlubGluZS1lZGl0YWJsZS1vdXRsaW5lKCRvdXRsaW5lLXBhZGRpbmcpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgICYuZm9ybWF0dGVyLXRyZWUge1xuICAgICAgICAgICAgLnRleHQtZWxsaXBzaXMge1xuICAgICAgICAgICAgICBAaW5jbHVkZSBpZHMtZGF0YS1ncmlkLWlubGluZS1lZGl0YWJsZS1vdXRsaW5lKCRvdXRsaW5lLXBhZGRpbmcpO1xuXG4gICAgICAgICAgICAgIHdpZHRoOiBjYWxjKDEwMCUgLSAjeyRvdXRsaW5lLW9mZnNldCArIDR9cHgpO1xuXG4gICAgICAgICAgICAgICY6OmFmdGVyIHtcbiAgICAgICAgICAgICAgICBtYXJnaW4taW5saW5lLWVuZDogLSN7JG91dGxpbmUtb2Zmc2V0fXB4O1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFJlbW92ZSBzdGFydCBwYWRkaW5nIGZyb20gdHJlZS1ncmlkLWNvbnRhaW5lZCBgLnRleHQtZWxsaXBzaXNgIGVsZW1lbnRzXG4gICAgICAuaWRzLWRhdGEtZ3JpZC10cmVlLWZpZWxkLWNvbnRhaW5lciAudGV4dC1lbGxpcHNpcyB7XG4gICAgICAgIHBhZGRpbmctaW5saW5lLXN0YXJ0OiB2YXIoLS1pZHMtc3BhY2Utbm9uZSk7XG4gICAgICB9XG5cbiAgICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgICAgLy8gRXhwYW5kYWJsZSBncmlkL3RyZWUgZ3JpZCBuZXN0ZWQgYWxpZ25tZW50IHJ1bGVzXG4gICAgICBAZm9yICRpIGZyb20gMSB0aHJvdWdoIDgge1xuICAgICAgICBbYXJpYS1sZXZlbD0nI3skaX0nXSAuaWRzLWRhdGEtZ3JpZC1jZWxsIHtcbiAgICAgICAgICBAaWYgJGkgPT0gMSB7XG4gICAgICAgICAgICAuaWRzLWRhdGEtZ3JpZC10cmVlLWZpZWxkLWNvbnRhaW5lciB7XG4gICAgICAgICAgICAgIG1hcmdpbi1pbmxpbmUtc3RhcnQ6ICN7JGJ1dHRvbi13aWR0aH1weDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWRzLWJ1dHRvbiB7XG4gICAgICAgICAgICAgIG1hcmdpbi1pbmxpbmUtc3RhcnQ6IHZhcigtLWlkcy1zcGFjZS1ub25lKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWRzLWJ1dHRvbiArIC5pZHMtZGF0YS1ncmlkLXRyZWUtZmllbGQtY29udGFpbmVyIHtcbiAgICAgICAgICAgICAgbWFyZ2luLWlubGluZS1zdGFydDogdmFyKC0taWRzLXNwYWNlLW5vbmUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgLmlkcy1kYXRhLWdyaWQtdHJlZS1maWVsZC1jb250YWluZXIge1xuICAgICAgICAgICAgICBtYXJnaW4taW5saW5lLXN0YXJ0OiAjeyRidXR0b24td2lkdGggKyAoJGluZGVudCAqICgkaSAtIDEpKSArICgkb2Zmc2V0KX1weDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWRzLWJ1dHRvbiB7XG4gICAgICAgICAgICAgIG1hcmdpbi1pbmxpbmUtc3RhcnQ6ICN7KCRpbmRlbnQgKiAoJGkgLSAxKSkgKyAkb2Zmc2V0fXB4O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZHMtYnV0dG9uICsgLmlkcy1kYXRhLWdyaWQtdHJlZS1maWVsZC1jb250YWluZXIge1xuICAgICAgICAgICAgICBtYXJnaW4taW5saW5lLXN0YXJ0OiB2YXIoLS1pZHMtc3BhY2Utbm9uZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgICAgICAgLy8gRGlydHktdHJhY2tlciBydWxlcyBkZXBlbmRlbnQgb24gYGFyaWEtbGV2ZWxgIG5lc3RpbmdcbiAgICAgICAgICAmLmlzLWRpcnR5IHtcbiAgICAgICAgICAgICYuaXMtaW5saW5lIHtcbiAgICAgICAgICAgICAgLmlkcy1kYXRhLWdyaWQtdHJlZS1maWVsZC1jb250YWluZXI6OmJlZm9yZSB7XG4gICAgICAgICAgICAgICAgaW5zZXQtYmxvY2stc3RhcnQ6ICN7JGlubGluZS1kaXJ0eS1pbmRpY2F0b3Itb2Zmc2V0fXB4O1xuICAgICAgICAgICAgICAgIG1hcmdpbi1pbmxpbmUtc3RhcnQ6ICN7JGlubGluZS1kaXJ0eS1pbmRpY2F0b3Itb2Zmc2V0fXB4O1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gRml4IGZvciB4eHMgcm93IGhlaWdodCB0cmVlIGZvcm1hdHRlciBjZWxscyB3aXRoIGV4cGFuZCBpY29uc1xuICAmW2RhdGEtcm93LWhlaWdodD0neHhzJ10ge1xuICAgIC5pZHMtZGF0YS1ncmlkLWNlbGwuaXMtZWRpdGFibGUuaXMtaW5saW5lLmZvcm1hdHRlci10cmVlIHtcbiAgICAgIC50ZXh0LWVsbGlwc2lzOjphZnRlciB7XG4gICAgICAgIHdpZHRoOiBjYWxjKDEwMCUgLSAzcHgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIExpc3QgU3R5bGUgRmVhdHVyZVxuICAmLmlzLWxpc3Qtc3R5bGUge1xuICAgIGJvcmRlci13aWR0aDogdmFyKC0taWRzLWJvcmRlci13aWR0aC1ub25lKTtcbiAgfVxuXG4gIC8vIFVzZWQgZm9yIHJvdyBzdGFydFxuICAmLndhaXRpbmctbG9hZCB7XG4gICAgdmlzaWJpbGl0eTogaGlkZGVuO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG5cbiAgICAuaWRzLWRhdGEtZ3JpZC1ib2R5IHtcbiAgICAgIHZpc2liaWxpdHk6IGhpZGRlbjtcbiAgICB9XG4gIH1cbn1cblxuLy8gVXNlZCBmb3IgRnJvemVuIENvbHVtbnNcbi5pZHMtZGF0YS1ncmlkLWJvZHkge1xuICBtaW4td2lkdGg6IGZpdC1jb250ZW50O1xufVxuXG4vLyBTdGFuZGFsb25lIENzcyBCb3JkZXJzXG50YWJsZS5pZHMtZGF0YS1ncmlkIHtcbiAgZGlzcGxheTogdGFibGU7XG4gIG91dGxpbmU6IDFweCBzb2xpZCB2YXIoLS1pZHMtZGF0YS1ncmlkLWNlbGwtY29sb3ItYm9yZGVyKTtcbiAgb3V0bGluZS1vZmZzZXQ6IC0xcHg7XG59XG5cbi8vIEVtcHR5IE1lc3NhZ2Vcbi5pZHMtZGF0YS1ncmlkLXdyYXBwZXIge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG5cbiAgLmlkcy1kYXRhLWdyaWQtdG9vbGJhciB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBtYXJnaW46IDZweCB2YXIoLS1pZHMtc3BhY2Utbm9uZSk7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGVuZDtcbiAgfVxufVxuXG5pZHMtZW1wdHktbWVzc2FnZTpub3QoW2hpZGRlbl0pLFxuOjpzbG90dGVkKGlkcy1lbXB0eS1tZXNzYWdlOm5vdChbaGlkZGVuXSkpIHtcbiAgZGlzcGxheTogZmxleDtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgdG9wOiB2YXIoLS1pZHMtc3BhY2Utbm9uZSk7XG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICBtYXJnaW4tdG9wOiB2YXIoLS1pZHMtc3BhY2Utc20pO1xufVxuXG4vLyBBZGp1c3QgZm9yIGZpbHRlciByb3dcbmlkcy1lbXB0eS1tZXNzYWdlLmhhcy1maWx0ZXItcm93Om5vdChbaGlkZGVuXSkge1xuICAmLmZpbHRlci1yb3ctc2l6ZS14eHMge1xuICAgIG1hcmdpbi1ibG9jay1zdGFydDogMjRweDtcbiAgfVxuXG4gICYuZmlsdGVyLXJvdy1zaXplLXhzIHtcbiAgICBtYXJnaW4tYmxvY2stc3RhcnQ6IDM0cHg7XG4gIH1cblxuICAmLmZpbHRlci1yb3ctc2l6ZS1zbSB7XG4gICAgbWFyZ2luLWJsb2NrLXN0YXJ0OiAzNHB4O1xuICB9XG5cbiAgJi5maWx0ZXItcm93LXNpemUtbWQge1xuICAgIG1hcmdpbi1ibG9jay1zdGFydDogMzRweDtcbiAgfVxuXG4gICYuZmlsdGVyLXJvdy1zaXplLWxnIHtcbiAgICBtYXJnaW4tYmxvY2stc3RhcnQ6IDI2cHg7XG4gIH1cblxuICAmLmhhcy1wYWdlciB7XG4gICAgbWFyZ2luLWJsb2NrLXN0YXJ0OiAxNHB4O1xuICB9XG59XG5cbjo6c2xvdHRlZChpZHMtZW1wdHktbWVzc2FnZS5oYXMtZmlsdGVyLXJvdzpub3QoW2hpZGRlbl0pKSB7XG4gIG1hcmdpbi1ibG9jay1zdGFydDogMTRweDtcbn1cblxuLmhhcy1lbXB0eS1tZXNzYWdlIC5pZHMtZGF0YS1ncmlkIHtcbiAgbWluLWhlaWdodDogdmFyKC0taWRzLWRhdGEtZ3JpZC1oZWlnaHQtbWluKTtcbn1cblxuLy8gTG9hZGluZyBJbmRpY2F0b3Jcbmlkcy1sb2FkaW5nLWluZGljYXRvciB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDEwMCU7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIHRvcDogdmFyKC0taWRzLXNwYWNlLW5vbmUpO1xuXG4gICZbc3RvcHBlZF0ge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cbn1cblxuOmhvc3QoOm5vdChbZGlzYWJsZS1yb3ctaGlnaGxpZ2h0XSkpIGlkcy1kYXRhLWdyaWQtcm93OmhvdmVyOm5vdChbcGFydCo9J3Jvdy0nXSk6bm90KC5zZWxlY3RlZCkge1xuICBpZHMtZGF0YS1ncmlkLWNlbGwsXG4gIGlkcy1kYXRhLWdyaWQtY2VsbC5pcy1yZWFkb25seTpub3QoLmV4Y2x1ZGUtcmVhZG9ubHktc3R5bGUpIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1pZHMtZGF0YS1ncmlkLXJvdy1jb2xvci1iYWNrZ3JvdW5kLWhvdmVyKTtcbiAgfVxuXG4gIGlkcy1kYXRhLWdyaWQtY2VsbC5pcy1pbnZhbGlkIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1pZHMtZGF0YS1ncmlkLWNlbGwtY29sb3ItYmFja2dyb3VuZC1lcnJvci1ob3Zlcik7XG4gIH1cblxuICAuaWRzLWRhdGEtZ3JpZC1jZWxsLmZyb3plbiB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0taWRzLWRhdGEtZ3JpZC1yb3ctY29sb3ItYmFja2dyb3VuZC1ob3Zlcik7XG4gIH1cbn1cblxuI2RhdGFncmlkLW1vZGFsIHtcbiAgLS1pZHMtbW9kYWwtY29udGVudC1wYWRkaW5nOiB2YXIoLS1pZHMtc3BhY2Utbm9uZSk7XG4gIC0taWRzLW1vZGFsLWhlYWRlci1wYWRkaW5nOiB2YXIoLS1pZHMtc3BhY2Utc20pIHZhcigtLWlkcy1zcGFjZS1zbSkgdmFyKC0taWRzLXNwYWNlLXhzKSB2YXIoLS1pZHMtc3BhY2Utc20pO1xuICAtLWlkcy1wb3B1cC1maXQtaGVpZ2h0OiA0MDBweDtcblxuICBpZHMtc3dhcHBhYmxlLWl0ZW0ge1xuICAgIC0taWRzLXN3YXBwYWJsZS1pdGVtLWNvbG9yLWJhY2tncm91bmQtc2VsZWN0ZWQ6IHZhcigtLWlkcy1jb2xvci1hY2NlbnQtYmx1ZS13ZWFrZXN0KTtcbiAgICAtLWlkcy1zd2FwcGFibGUtaXRlbS1jb2xvci10ZXh0LXNlbGVjdGVkOiB2YXIoLS1pZHMtY29sb3ItZm9yZWdyb3VuZC1kZWZhdWx0LWRlZmF1bHQpO1xuXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBoZWlnaHQ6IHZhcigtLWlkcy1kYXRhLWdyaWQtbW9kYWwtcm93LWhlaWdodCk7XG4gIH1cblxuICAjZGF0YWdyaWQtbW9kYWwtdGl0bGUge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICB0b3A6IGNhbGModmFyKC0taWRzLXNwYWNlLTA0KSAqIC0xKTtcbiAgfVxuXG4gIGlkcy1zZWFyY2gtZmllbGQge1xuICAgIC0taWRzLWlucHV0LWNvbG9yLWJhY2tncm91bmQtZGVmYXVsdDogdmFyKC0taWRzLWNvbG9yLWFjY2VudC1uZXV0cmFsLXdlYWtlc3QpO1xuICAgIC0taWRzLXNlYXJjaC1maWVsZC1jb2xvci1iYWNrZ3JvdW5kLWRlZmF1bHQ6IHZhcigtLWlkcy1jb2xvci1hY2NlbnQtbmV1dHJhbC13ZWFrZXN0KTtcbiAgICAtLWlkcy1pbnB1dC1jb2xvci1ib3JkZXItZGVmYXVsdDogdmFyKC0taWRzLWNvbG9yLWFjY2VudC1uZXV0cmFsLXdlYWspO1xuICAgIC0taWRzLWlucHV0LWNvbG9yLWJvcmRlci1ob3ZlcjogdmFyKC0taWRzLWNvbG9yLWFjY2VudC1uZXV0cmFsLXdlYWspO1xuICAgIC0taWRzLWlucHV0LWNvbG9yLWJvcmRlci1mb2N1czogdmFyKC0taWRzLWNvbG9yLWFjY2VudC1uZXV0cmFsLXdlYWspO1xuICAgIC0taWRzLWlucHV0LWNvbG9yLWJvcmRlci1zaGFkb3c6IG5vbmU7XG4gICAgLS1pZHMtc2VhcmNoLWZpZWxkLWJvcmRlci1yYWRpdXM6IHZhcigtLWlkcy1ib3JkZXItcmFkaXVzLW5vbmUpO1xuICAgIC0taWRzLXNlYXJjaC1maWVsZC1ib3JkZXItd2lkdGg6IHZhcigtLWlkcy1ib3JkZXItd2lkdGgtc20pIHZhcigtLWlkcy1ib3JkZXItd2lkdGgtbm9uZSk7XG5cbiAgICBtYXJnaW4tYm90dG9tOiAtOHB4O1xuICAgIG1hcmdpbi10b3A6IGNhbGModmFyKC0taWRzLXNwYWNlLTA4KSAqIC0xKTtcbiAgICBtaW4td2lkdGg6IDMzMHB4O1xuICAgIHBvc2l0aW9uOiBzdGlja3k7XG4gICAgdG9wOiB2YXIoLS1pZHMtc3BhY2Utbm9uZSk7XG4gICAgei1pbmRleDogMTtcbiAgfVxuXG4gIGlkcy10ZXh0IHtcbiAgICB3aWR0aDogMTAwJTtcbiAgfVxuXG4gIGlkcy1zd2l0Y2gge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICB0b3A6IHZhcigtLWlkcy1zcGFjZS0zeHMpO1xuICB9XG5cbiAgaWRzLXN3YXBwYWJsZSB7XG4gICAgd2lkdGg6IDEwMCU7XG4gIH1cblxuICAuZGF0YWdyaWQtbW9kYWwtY29sdW1uLWxpc3Qge1xuICAgIC0taWRzLW1vZGFsLWNvbHVtbi1saXN0LWhlaWdodDogY2FsYygxMDAlIC0gMTRweCk7XG5cbiAgICBvdmVyZmxvdzogYXV0bztcbiAgICBtYXgtaGVpZ2h0OiB2YXIoLS1pZHMtbW9kYWwtY29sdW1uLWxpc3QtaGVpZ2h0KTtcbiAgfVxuXG59XG5cbi5zZWxlY3Rpb24tYm9yZGVyIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgYm9yZGVyOiAxLjVweCBzb2xpZCB2YXIoLS1pZHMtYnV0dG9uLXByaW1hcnktY29sb3ItYmFja2dyb3VuZC1kZWZhdWx0KTtcbiAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gIHotaW5kZXg6IDI7XG4gIHRyYW5zaXRpb246IGFsbCAwLjA1cyBlYXNlO1xufVxuIiwiLy8gQnJlYWtwb2ludHMgLSB0aGlzIGNhbnQgYmUgdG9rZW5zXG4kYnJlYWtwb2ludC14eGw6IDE0NDBweDtcbiRicmVha3BvaW50LXhsOiAxMjgwcHg7XG4kYnJlYWtwb2ludC1sZzogMTAyNHB4O1xuJGJyZWFrcG9pbnQtbWQ6IDg0MHB4O1xuJGJyZWFrcG9pbnQtc206IDYwMHB4O1xuJGJyZWFrcG9pbnQteHM6IDMyMHB4O1xuXG4vLyBTZXRzIFRleHQgQW50aWFsaWFzaW5nXG5AbWl4aW4gYW50aWFsaWFzZWQge1xuICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDtcbiAgLW1vei1vc3gtZm9udC1zbW9vdGhpbmc6IGdyYXlzY2FsZTtcbn1cblxuLy8gdmVuZG9yIHByZWZpeGVkIHRyYW5zaXRpb25zIGZvciByZWd1bGFyIGF0dHJpYnV0ZXMgKG5vbi12ZW5kb3IgcHJlZml4ZWQpXG5AbWl4aW4gdHJhbnNpdGlvbigkdHJhbnNpdGlvbnMtbGlzdC4uLikge1xuICBAZWFjaCAkcHJlZml4IGluICRwcmVmaXhlcyB7XG4gICAgI3skcHJlZml4fXRyYW5zaXRpb246ICR0cmFuc2l0aW9ucy1saXN0O1xuICB9XG59XG5cbi8vIG1ha2UgdGhlIHRleHQgaW52aXNpYmxlIHZpc3VhbGx5IGJ1dCByZWFkYWJsZSBieSBzY3JlZW4gcmVhZGVyc1xuQG1peGluIGF1ZGlibGUoKSB7XG4gIGNsaXA6IHJlY3QoMCwgMCwgMCwgMCk7XG4gIGhlaWdodDogMDtcbiAgbGluZS1oZWlnaHQ6IDA7XG4gIG1pbi1oZWlnaHQ6IDA7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIHBhZGRpbmc6IDA7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgd2lkdGg6IDFweDtcbn1cbiIsIi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gR2VuZXJhdGVzIGEgcHNldWRvLWVsZW1lbnQgaW4gdGhlIGZvcm0gb2YgYW4gXCJvdXRsaW5lXCJcbi8vIGluIGEgY2VsbCB0aGF0IHJlcHJlc2VudHMgdGhlIFwiaW5saW5lLCBlZGl0YWJsZVwiIHN0YXRlLlxuQG1peGluIGlkcy1kYXRhLWdyaWQtaW5saW5lLWVkaXRhYmxlLW91dGxpbmUoJG1hcmdpbikge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG5cbiAgJjo6YWZ0ZXIge1xuICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWlkcy1pbnB1dC1jb2xvci1ib3JkZXItZGVmYXVsdCk7XG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0taWRzLWJvcmRlci1yYWRpdXMtMnhzKTtcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIGNvbnRlbnQ6ICcnO1xuICAgIG1hcmdpbjogI3skbWFyZ2lufXB4O1xuICAgIGhlaWdodDogY2FsYygxMDAlIC0gI3skbWFyZ2luICogMn1weCk7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHdpZHRoOiBjYWxjKDEwMCUgLSAjeyRtYXJnaW4gKiAyfXB4KTtcbiAgfVxufVxuIl19 */`;
83208
83207
 
83209
83208
  // src/components/ids-data-grid/ids-data-grid-header.ts
83210
- var _columns, _IdsDataGridHeader_instances, attachEventHandlers_fn38, attachSortHandler_fn, attachSelectionHandler_fn, attachResizeHandlers_fn, attachReorderHandlers_fn, attachFilterBtnHandler_fn;
83209
+ var _activeColumn, _columns, _IdsDataGridHeader_instances, attachEventHandlers_fn38, attachSortHandler_fn, attachSelectionHandler_fn, attachResizeHandlers_fn, attachReorderHandlers_fn, attachFilterBtnHandler_fn, attachFocusHandlers_fn;
83211
83210
  var IdsDataGridHeader = class extends ids_events_mixin_default(IdsElement) {
83212
83211
  constructor() {
83213
83212
  super({ noShadowRoot: true });
@@ -83219,6 +83218,7 @@ ids-loading-indicator[stopped] {
83219
83218
  * Tracks the state of the header expander
83220
83219
  */
83221
83220
  __publicField(this, "isHeaderExpanderCollapsed", false);
83221
+ __privateAdd(this, _activeColumn, -1);
83222
83222
  /** @see IdsDataGridHeader.columns */
83223
83223
  __privateAdd(this, _columns);
83224
83224
  this.state = {
@@ -83241,6 +83241,13 @@ ids-loading-indicator[stopped] {
83241
83241
  get expanderIcons() {
83242
83242
  return [...this.querySelectorAll("ids-icon.header-expander")];
83243
83243
  }
83244
+ /**
83245
+ * Get the index of the active column.
83246
+ * @returns {number} the index of the active column. Returns -1 if there are none.
83247
+ */
83248
+ get activeColumn() {
83249
+ return __privateGet(this, _activeColumn);
83250
+ }
83244
83251
  /* Returns all the columns in the header */
83245
83252
  get columns() {
83246
83253
  if (!__privateGet(this, _columns)?.length) {
@@ -83542,6 +83549,7 @@ ids-loading-indicator[stopped] {
83542
83549
  return columnGroupHtml;
83543
83550
  }
83544
83551
  };
83552
+ _activeColumn = new WeakMap();
83545
83553
  _columns = new WeakMap();
83546
83554
  _IdsDataGridHeader_instances = new WeakSet();
83547
83555
  /**
@@ -83554,6 +83562,7 @@ ids-loading-indicator[stopped] {
83554
83562
  __privateMethod(this, _IdsDataGridHeader_instances, attachResizeHandlers_fn).call(this);
83555
83563
  __privateMethod(this, _IdsDataGridHeader_instances, attachReorderHandlers_fn).call(this);
83556
83564
  __privateMethod(this, _IdsDataGridHeader_instances, attachFilterBtnHandler_fn).call(this);
83565
+ __privateMethod(this, _IdsDataGridHeader_instances, attachFocusHandlers_fn).call(this);
83557
83566
  };
83558
83567
  /**
83559
83568
  * Attach handlers to sort via clicking the headers
@@ -83819,6 +83828,22 @@ ids-loading-indicator[stopped] {
83819
83828
  }
83820
83829
  });
83821
83830
  };
83831
+ /**
83832
+ * Attach focus handlers to manage keyboard-only focus outlines
83833
+ * @private
83834
+ */
83835
+ attachFocusHandlers_fn = function() {
83836
+ this.offEvent("focusout", this);
83837
+ this.onEvent("focusout", this, (e) => {
83838
+ const relatedTarget = e.relatedTarget;
83839
+ if (!relatedTarget || relatedTarget?.nodeName === "IDS-DATA-GRID-CELL") __privateSet(this, _activeColumn, -1);
83840
+ });
83841
+ this.offEvent("mousedown.focusin", this);
83842
+ this.onEvent("mousedown.focusin", this, (e) => {
83843
+ const headerCell = e.target.closest(".ids-data-grid-header-cell");
83844
+ __privateSet(this, _activeColumn, parseFloat(headerCell?.getAttribute("aria-colindex") || ""));
83845
+ });
83846
+ };
83822
83847
  IdsDataGridHeader = __decorateClass([
83823
83848
  customElement("ids-data-grid-header")
83824
83849
  ], IdsDataGridHeader);
@@ -84231,6 +84256,16 @@ ids-loading-indicator[stopped] {
84231
84256
  columnIndex = Math.min(columnIndex, maxColumnIndex);
84232
84257
  return cells[columnIndex] ?? null;
84233
84258
  }
84259
+ /**
84260
+ * Get the cell HTMLElement by logical column index (accounting for rowspan)
84261
+ * @param {number} logicalColumnIndex the zero-based logical column index
84262
+ * @returns {IdsDataGridCell} html element for cell
84263
+ */
84264
+ cellByLogicalIndex(logicalColumnIndex) {
84265
+ const columnId = this.dataGrid.visibleColumns[logicalColumnIndex]?.id;
84266
+ if (!columnId) return null;
84267
+ return this.querySelector(`ids-data-grid-cell[aria-colindex="${logicalColumnIndex + 1}"]`) ?? null;
84268
+ }
84234
84269
  /**
84235
84270
  * Is this row currently expanded
84236
84271
  * @returns {boolean} true if expanded
@@ -87902,7 +87937,7 @@ ids-icon {
87902
87937
  )
87903
87938
  )
87904
87939
  );
87905
- var _activeCellCache, _editedCellsCache, _startSelectionCell, _endSelectionCell, _currentScroll, _afterSetActiveCellFn, _header, _IdsDataGrid_instances, redrawBodyTemplate_fn, _lastSelectedRow, _initiallySelectedRow, _lastShiftedRow, resetLastSelectedRow_fn, resetInitiallySelectedRow_fn, resetLastShiftedRow_fn, toggleShiftSelectionInBetween_fn, getSelection_fn, attachEventHandlers_fn41, attachDragSelection_fn, createSelectionBorder_fn, updateSelectionBorder_fn, attachCopyPasteCellHandlers_fn, attachKeyboardListeners_fn9, setColumnWidths_fn, setFrozenColumnWidth_fn, calcMaxContentWidth_fn, reapplyDirtyStates_fn, setColumnGroupsWidth_fn, appendMissingRows_fn, _virtualScrollMaxRowsInDom, attachScrollEvents_fn, attachVirtualScrollEvent_fn, calculateColumnsOnscreen_fn, detachScrollEvents_fn, syncTreeHiddenStates_fn, handleTreeRowExpandCollapse_fn, recycleAllTreeRows_fn, handleVirtualScroll_fn, _customScrollEventCache, triggerCustomScrollEvent_fn, positionVirtualScrollWindow_fn, restoreScrollPosition_fn, scrollTo_fn, scrollToTreeRow_fn, scrollRowIntoView_fn, setVirtualScrollPaddingBottom_fn, scrollTreeRowIntoView_fn, recycleTreeRowsDown_fn, recycleTreeRowsUp_fn, recycleAllRows_fn, recycleTopRowsDown_fn, recycleBottomRowsUp_fn, saveCellOriginalValue_fn, updateCellDirtyState_fn, findParentRow_fn, findRootRow_fn, updateRowCount_fn, applyAutoFit_fn, removeAttachedMenus_fn, filterColumnList_fn, handleCopy_fn, handlePaste_fn, saveEditedCellsBeforeScroll_fn, restoreActiveCellAfterScroll_fn, restoreEditedCellsAfterScroll_fn;
87940
+ var _activeCellCache, _editedCellsCache, _startSelectionCell, _endSelectionCell, _currentScroll, _afterSetActiveCellFn, _header, _IdsDataGrid_instances, redrawBodyTemplate_fn, _lastSelectedRow, _initiallySelectedRow, _lastShiftedRow, resetLastSelectedRow_fn, resetInitiallySelectedRow_fn, resetLastShiftedRow_fn, toggleShiftSelectionInBetween_fn, getSelection_fn, attachEventHandlers_fn41, attachDragSelection_fn, createSelectionBorder_fn, updateSelectionBorder_fn, attachCopyPasteCellHandlers_fn, attachKeyboardListeners_fn9, setColumnWidths_fn, setFrozenColumnWidth_fn, calcMaxContentWidth_fn, reapplyDirtyStates_fn, setColumnGroupsWidth_fn, appendMissingRows_fn, _virtualScrollMaxRowsInDom, attachScrollEvents_fn, attachVirtualScrollEvent_fn, calculateColumnsOnscreen_fn, detachScrollEvents_fn, syncTreeHiddenStates_fn, handleTreeRowExpandCollapse_fn, recycleAllTreeRows_fn, handleVirtualScroll_fn, _customScrollEventCache, triggerCustomScrollEvent_fn, positionVirtualScrollWindow_fn, restoreScrollPosition_fn, scrollTo_fn, scrollToTreeRow_fn, scrollRowIntoView_fn, getVisibleRowIndex_fn, findNextVisibleRow_fn, scrollToActivateRow_fn, ensureRowInViewport_fn, setVirtualScrollPaddingBottom_fn, scrollTreeRowIntoView_fn, recycleTreeRowsDown_fn, recycleTreeRowsUp_fn, recycleAllRows_fn, recycleTopRowsDown_fn, recycleBottomRowsUp_fn, saveCellOriginalValue_fn, updateCellDirtyState_fn, findParentRow_fn, findRootRow_fn, updateRowCount_fn, applyAutoFit_fn, removeAttachedMenus_fn, filterColumnList_fn, handleCopy_fn, handlePaste_fn, saveEditedCellsBeforeScroll_fn, restoreActiveCellAfterScroll_fn, restoreEditedCellsAfterScroll_fn;
87906
87941
  var IdsDataGrid = class extends Base68 {
87907
87942
  constructor() {
87908
87943
  super();
@@ -88869,7 +88904,8 @@ ids-icon {
88869
88904
  if (this.activeCellEditor) {
88870
88905
  const rowIndex = this.activeCell.row;
88871
88906
  const cell = this.activeCell.cell;
88872
- this.updateActiveCellCache(rowIndex, cell, __privateGet(this, _activeCellCache)?.currentValue || "");
88907
+ const activeNode = this.activeCell.node;
88908
+ this.updateActiveCellCache(rowIndex, cell, __privateGet(this, _activeCellCache)?.currentValue || "", activeNode?.isEditing);
88873
88909
  }
88874
88910
  if (__privateGet(this, _activeCellCache)) {
88875
88911
  __privateGet(this, _activeCellCache).shouldReinstateCell = true;
@@ -88879,6 +88915,7 @@ ids-icon {
88879
88915
  this.resetCache();
88880
88916
  if (this.treeGrid) {
88881
88917
  __privateMethod(this, _IdsDataGrid_instances, recycleAllTreeRows_fn).call(this, Math.floor(this.container.scrollTop / this.virtualScrollSettings.ROW_HEIGHT));
88918
+ __privateMethod(this, _IdsDataGrid_instances, restoreActiveCellAfterScroll_fn).call(this);
88882
88919
  } else {
88883
88920
  __privateMethod(this, _IdsDataGrid_instances, appendMissingRows_fn).call(this);
88884
88921
  }
@@ -88886,6 +88923,82 @@ ids-icon {
88886
88923
  this.data = this.data.concat(value);
88887
88924
  }
88888
88925
  }
88926
+ /**
88927
+ * Find a cell by logical position, accounting for rowspan
88928
+ * @param {number} rowIndex the row index
88929
+ * @param {number} columnIndex the logical column index
88930
+ * @returns {IdsDataGridCell | null} the cell at the logical position
88931
+ */
88932
+ findCellByLogicalPosition(rowIndex, columnIndex) {
88933
+ if (rowIndex < 0 || rowIndex >= this.data.length) return null;
88934
+ if (columnIndex < 0 || columnIndex >= this.visibleColumns.length) return null;
88935
+ if (this.treeGrid && this.data[rowIndex]?.rowHidden) return null;
88936
+ const row = this.rowByIndex(rowIndex);
88937
+ if (!row) return null;
88938
+ const columnId = this.visibleColumns[columnIndex]?.id;
88939
+ if (!columnId) return null;
88940
+ return row.cellByLogicalIndex?.(columnIndex) ?? row.cellByIndex(columnIndex) ?? null;
88941
+ }
88942
+ /**
88943
+ * Find the next navigable cell in a given direction
88944
+ * @param {IdsDataGridCell} currentCell the current cell
88945
+ * @param {IdsDirection} direction the navigation direction
88946
+ * @returns {IdsDataGridCell | null} the next navigable cell
88947
+ */
88948
+ findNextNavigableCell(currentCell, direction) {
88949
+ const currentRowIndex = currentCell.rowIndex;
88950
+ const currentColumnIndex = currentCell.columnIndex;
88951
+ switch (direction) {
88952
+ case "up" /* Up */: {
88953
+ if (currentRowIndex === 0) return null;
88954
+ for (let targetRowIndex = currentRowIndex - 1; targetRowIndex >= 0; targetRowIndex--) {
88955
+ const cell = this.findCellByLogicalPosition(targetRowIndex, currentColumnIndex);
88956
+ if (cell) return cell;
88957
+ }
88958
+ return null;
88959
+ }
88960
+ case "down" /* Down */: {
88961
+ if (currentRowIndex >= this.data.length - 1) return null;
88962
+ const currentRowData = this.data[currentRowIndex];
88963
+ const columnId = this.visibleColumns[currentColumnIndex]?.id;
88964
+ const currentSpan = currentRowData?.rowspan?.[columnId] || 1;
88965
+ const startRowIndex = currentRowIndex + currentSpan;
88966
+ for (let targetRowIndex = startRowIndex; targetRowIndex < this.data.length; targetRowIndex++) {
88967
+ const cell = this.findCellByLogicalPosition(targetRowIndex, currentColumnIndex);
88968
+ if (cell) return cell;
88969
+ }
88970
+ return null;
88971
+ }
88972
+ case "left" /* Left */: {
88973
+ for (let colIndex = currentColumnIndex - 1; colIndex >= 0; colIndex--) {
88974
+ const cell = this.findCellByLogicalPosition(currentRowIndex, colIndex);
88975
+ if (cell && cell !== currentCell) return cell;
88976
+ }
88977
+ if (currentRowIndex > 0) {
88978
+ for (let colIndex = this.visibleColumns.length - 1; colIndex >= 0; colIndex--) {
88979
+ const cell = this.findCellByLogicalPosition(currentRowIndex - 1, colIndex);
88980
+ if (cell) return cell;
88981
+ }
88982
+ }
88983
+ return null;
88984
+ }
88985
+ case "right" /* Right */: {
88986
+ for (let colIndex = currentColumnIndex + 1; colIndex < this.visibleColumns.length; colIndex++) {
88987
+ const cell = this.findCellByLogicalPosition(currentRowIndex, colIndex);
88988
+ if (cell && cell !== currentCell) return cell;
88989
+ }
88990
+ if (currentRowIndex < this.data.length - 1) {
88991
+ for (let colIndex = 0; colIndex < this.visibleColumns.length; colIndex++) {
88992
+ const cell = this.findCellByLogicalPosition(currentRowIndex + 1, colIndex);
88993
+ if (cell) return cell;
88994
+ }
88995
+ }
88996
+ return null;
88997
+ }
88998
+ default:
88999
+ return null;
89000
+ }
89001
+ }
88889
89002
  /**
88890
89003
  * Set the data of the data grid
88891
89004
  * @param {Array} value The array to use
@@ -89977,7 +90090,11 @@ ids-icon {
89977
90090
  this.activeCell.cell = Number(cellNumber);
89978
90091
  this.activeCell.row = Number(rowIndex);
89979
90092
  const currentCell = this.cellByIndex(rowIndex, cellNumber);
89980
- this.updateActiveCellCache(rowIndex, cellNumber, currentCell?.value);
90093
+ if (reason === "redraw") {
90094
+ this.clearActiveCellCache();
90095
+ } else {
90096
+ this.updateActiveCellCache(rowIndex, cellNumber, currentCell?.value, true);
90097
+ }
89981
90098
  let rowNode = this.rowByIndex(rowIndex);
89982
90099
  if (!rowNode && this.virtualScroll) {
89983
90100
  const setActiveCellData = {
@@ -90531,15 +90648,20 @@ ids-icon {
90531
90648
  * @param {number} row - The row index
90532
90649
  * @param {number} cell - The cell index
90533
90650
  * @param {string} cellValue - The current cell value
90651
+ * @param {boolean} isEditing - Whether the cell is currently in edit mode
90534
90652
  */
90535
- updateActiveCellCache(row, cell, cellValue) {
90536
- __privateSet(this, _activeCellCache, {
90653
+ updateActiveCellCache(row, cell, cellValue, isEditing) {
90654
+ const cacheUpdate = {
90537
90655
  rowIndex: row,
90538
90656
  columnIndex: cell,
90539
90657
  currentValue: cellValue,
90540
90658
  hasLeaveViewport: false,
90541
90659
  shouldReinstateCell: true
90542
- });
90660
+ };
90661
+ if (isEditing !== void 0) {
90662
+ cacheUpdate.wasEditing = isEditing;
90663
+ }
90664
+ __privateSet(this, _activeCellCache, cacheUpdate);
90543
90665
  }
90544
90666
  /**
90545
90667
  * Clears the active cell cache, optionally checking if the cached row is within viewport
@@ -91030,7 +91152,13 @@ ids-icon {
91030
91152
  if (e.key === "ArrowDown") newRowIndex = 1;
91031
91153
  if (e.key === "ArrowRight") newColIndex = 1;
91032
91154
  if (e.key === "ArrowLeft") newColIndex = -1;
91033
- __privateGet(this, _activeCellCache).rowIndex = Math.max(__privateGet(this, _activeCellCache).rowIndex + newRowIndex, 0);
91155
+ if (this.treeGrid && newRowIndex !== 0) {
91156
+ const direction = newRowIndex === 1 ? "down" /* Down */ : "up" /* Up */;
91157
+ const nextRowIndex = __privateMethod(this, _IdsDataGrid_instances, findNextVisibleRow_fn).call(this, __privateGet(this, _activeCellCache).rowIndex, direction);
91158
+ __privateGet(this, _activeCellCache).rowIndex = nextRowIndex !== -1 ? nextRowIndex : __privateGet(this, _activeCellCache).rowIndex;
91159
+ } else {
91160
+ __privateGet(this, _activeCellCache).rowIndex = Math.max(__privateGet(this, _activeCellCache).rowIndex + newRowIndex, 0);
91161
+ }
91034
91162
  __privateGet(this, _activeCellCache).columnIndex = Math.max(__privateGet(this, _activeCellCache).columnIndex + newColIndex, 0);
91035
91163
  requestAnimationTimeout(() => {
91036
91164
  __privateMethod(this, _IdsDataGrid_instances, restoreActiveCellAfterScroll_fn).call(this);
@@ -91052,26 +91180,60 @@ ids-icon {
91052
91180
  e.preventDefault();
91053
91181
  e.stopPropagation();
91054
91182
  const previousActiveRow = Number(activeCell?.rowIndex || 0);
91055
- if (key === "ArrowUp") activeCell = activeCell?.cellAbove ?? null;
91056
- else if (key === "ArrowDown") activeCell = activeCell?.cellBelow ?? null;
91057
- else if (key === "ArrowLeft" && !e.metaKey) activeCell = activeCell?.cellLeft ?? null;
91058
- else if (key === "ArrowRight" && !e.metaKey) activeCell = activeCell?.cellRight ?? null;
91183
+ if (key === "ArrowUp") {
91184
+ if (activeCell?.rowIndex === 0) {
91185
+ const columnIndex = activeCell?.columnIndex ?? 0;
91186
+ const headerCell = this.header?.querySelector(`[aria-colindex="${columnIndex + 1}"][tabindex="0"]`);
91187
+ if (headerCell) {
91188
+ headerCell.setAttribute(attributes.TABINDEX, "0");
91189
+ this.header?.querySelectorAll(".ids-data-grid-header-cell").forEach((cell) => {
91190
+ cell.classList.remove("is-focused");
91191
+ });
91192
+ headerCell.focus();
91193
+ return;
91194
+ }
91195
+ }
91196
+ const prevCell = activeCell;
91197
+ activeCell = this.findNextNavigableCell(activeCell, "up" /* Up */);
91198
+ if (!activeCell && this.virtualScroll && prevCell && prevCell.rowIndex > 0) {
91199
+ const nextRowIndex = __privateMethod(this, _IdsDataGrid_instances, findNextVisibleRow_fn).call(this, prevCell.rowIndex, "up" /* Up */);
91200
+ if (nextRowIndex !== -1) {
91201
+ __privateMethod(this, _IdsDataGrid_instances, scrollToActivateRow_fn).call(this, nextRowIndex, prevCell.columnIndex, "up" /* Up */);
91202
+ return;
91203
+ }
91204
+ }
91205
+ if (this.virtualScroll && activeCell) {
91206
+ __privateMethod(this, _IdsDataGrid_instances, ensureRowInViewport_fn).call(this, activeCell.rowIndex, "up" /* Up */);
91207
+ }
91208
+ } else if (key === "ArrowDown") {
91209
+ const prevCell = activeCell;
91210
+ activeCell = this.findNextNavigableCell(activeCell, "down" /* Down */);
91211
+ if (!activeCell && this.virtualScroll && prevCell && prevCell.rowIndex < this.data.length - 1) {
91212
+ const nextRowIndex = __privateMethod(this, _IdsDataGrid_instances, findNextVisibleRow_fn).call(this, prevCell.rowIndex, "down" /* Down */);
91213
+ if (nextRowIndex !== -1) {
91214
+ __privateMethod(this, _IdsDataGrid_instances, scrollToActivateRow_fn).call(this, nextRowIndex, prevCell.columnIndex, "down" /* Down */);
91215
+ return;
91216
+ }
91217
+ }
91218
+ if (this.virtualScroll && activeCell) {
91219
+ __privateMethod(this, _IdsDataGrid_instances, ensureRowInViewport_fn).call(this, activeCell.rowIndex, "down" /* Down */);
91220
+ }
91221
+ } else if (key === "ArrowLeft" && !e.metaKey) activeCell = this.findNextNavigableCell(activeCell, "left" /* Left */);
91222
+ else if (key === "ArrowRight" && !e.metaKey) activeCell = this.findNextNavigableCell(activeCell, "right" /* Right */);
91059
91223
  else if (key === "PageUp") {
91060
- const firstRow = this.rowByIndex(0);
91061
91224
  const columnIndex = activeCell?.columnIndex ?? 0;
91062
- activeCell = firstRow?.cellByIndex(columnIndex) ?? null;
91225
+ activeCell = this.findCellByLogicalPosition(0, columnIndex);
91063
91226
  } else if (key === "PageDown") {
91064
91227
  const lastRowIndex = this.data.length - 1;
91065
- const lastRow = this.rowByIndex(lastRowIndex);
91066
91228
  const columnIndex = activeCell?.columnIndex ?? 0;
91067
- activeCell = lastRow?.cellByIndex(columnIndex) ?? null;
91229
+ activeCell = this.findCellByLogicalPosition(lastRowIndex, columnIndex);
91068
91230
  } else if (key === "Home" || key === "ArrowLeft" && e.metaKey) {
91069
- const currentRow = this.rowByIndex(activeCell?.rowIndex ?? 0);
91070
- activeCell = currentRow?.cellByIndex(0) ?? null;
91231
+ const currentRowIndex = activeCell?.rowIndex ?? 0;
91232
+ activeCell = this.findCellByLogicalPosition(currentRowIndex, 0);
91071
91233
  } else if (key === "End" || key === "ArrowRight" && e.metaKey) {
91072
- const currentRow = this.rowByIndex(activeCell?.rowIndex ?? 0);
91073
- const lastColumnIndex = this.columns.length - 1;
91074
- activeCell = currentRow?.cellByIndex(lastColumnIndex) ?? null;
91234
+ const currentRowIndex = activeCell?.rowIndex ?? 0;
91235
+ const lastColumnIndex = this.visibleColumns.length - 1;
91236
+ activeCell = this.findCellByLogicalPosition(currentRowIndex, lastColumnIndex);
91075
91237
  }
91076
91238
  const activeRowIndex = activeCell?.rowIndex ?? previousActiveRow;
91077
91239
  activeCell?.focus?.();
@@ -91177,8 +91339,44 @@ ids-icon {
91177
91339
  if (!this.isEditable) {
91178
91340
  return;
91179
91341
  }
91180
- const nextCell = e.shiftKey ? this.activeCell?.node?.cellLeftEditable : this.activeCell?.node?.cellRightEditable;
91342
+ let nextCell = e.shiftKey ? this.activeCell?.node?.cellLeftEditable : this.activeCell?.node?.cellRightEditable;
91343
+ while (nextCell && nextCell.hasAttribute?.("hidden")) {
91344
+ nextCell = e.shiftKey ? nextCell?.cellLeftEditable : nextCell?.cellRightEditable;
91345
+ }
91181
91346
  if (!nextCell) {
91347
+ if (!e.shiftKey && this.addNewAtEnd && this.activeCell?.node) {
91348
+ const currentRowIndex = this.activeCell.node.rowIndex;
91349
+ const isLastRow = currentRowIndex === this.data.length - 1;
91350
+ if (isLastRow) {
91351
+ e.stopImmediatePropagation();
91352
+ e.stopPropagation();
91353
+ e.preventDefault();
91354
+ const newRowData = {};
91355
+ this.visibleColumns.forEach((column) => {
91356
+ if (column.field && column.field !== "selectionCheckbox" && column.field !== "selectionRadio") {
91357
+ newRowData[column.field] = "";
91358
+ }
91359
+ });
91360
+ this.addRow(newRowData);
91361
+ requestAnimationFrame(() => {
91362
+ const newRowIndex = this.data.length - 1;
91363
+ const newRow = this.rowByIndex(newRowIndex);
91364
+ if (newRow) {
91365
+ const firstEditableCell = newRow.querySelector(".is-editable:not(.is-readonly):not(.is-disabled)");
91366
+ if (firstEditableCell) {
91367
+ const columnIndex = firstEditableCell.columnIndex;
91368
+ this.setActiveCell(columnIndex, newRowIndex, false, "keyboard");
91369
+ if (this.editNextOnEnterPress) {
91370
+ firstEditableCell.startCellEdit?.();
91371
+ } else {
91372
+ firstEditableCell.focus?.();
91373
+ }
91374
+ }
91375
+ }
91376
+ });
91377
+ return;
91378
+ }
91379
+ }
91182
91380
  return;
91183
91381
  }
91184
91382
  e.stopImmediatePropagation();
@@ -91210,7 +91408,98 @@ ids-icon {
91210
91408
  }
91211
91409
  });
91212
91410
  this.offEvent("keydown.body", this.header);
91213
- this.onEvent("keydown.body", this.header, () => {
91411
+ this.onEvent("keydown.body", this.header, (e) => {
91412
+ if (e.key === "ArrowUp") {
91413
+ e.preventDefault();
91414
+ e.stopPropagation();
91415
+ return;
91416
+ }
91417
+ if (e.key === "ArrowDown") {
91418
+ e.preventDefault();
91419
+ e.stopPropagation();
91420
+ const focusedHeaderCell = e.target;
91421
+ const columnIndexAttr = focusedHeaderCell.getAttribute("aria-colindex");
91422
+ if (columnIndexAttr) {
91423
+ const columnIndex = parseInt(columnIndexAttr) - 1;
91424
+ const firstRow = this.rowByIndex(0);
91425
+ if (firstRow) {
91426
+ const targetCell = firstRow.cellByIndex(columnIndex);
91427
+ if (targetCell) {
91428
+ this.setActiveCell(columnIndex, 0, false, "keyboard");
91429
+ targetCell.focus();
91430
+ return;
91431
+ }
91432
+ }
91433
+ }
91434
+ }
91435
+ if (e.key === "ArrowLeft" || e.key === "ArrowRight") {
91436
+ const focusedHeaderCell = e.target;
91437
+ const columnIndexAttr = focusedHeaderCell.getAttribute("aria-colindex");
91438
+ if (e.shiftKey && columnIndexAttr) {
91439
+ e.preventDefault();
91440
+ e.stopPropagation();
91441
+ const columnId = focusedHeaderCell.getAttribute("column-id");
91442
+ if (columnId) {
91443
+ const column = this.columnDataById(columnId);
91444
+ if (column && column.resizable) {
91445
+ const RESIZE_INCREMENT = 5;
91446
+ const DEFAULT_COLUMNSIZE = 110;
91447
+ const currentWidth = typeof column.width === "number" ? column.width : DEFAULT_COLUMNSIZE;
91448
+ const proposedWidth = e.key === "ArrowRight" ? currentWidth + RESIZE_INCREMENT : currentWidth - RESIZE_INCREMENT;
91449
+ const minWidth = column.minWidth || DEFAULT_COLUMN_MIN_WIDTH;
91450
+ const maxWidth = column.maxWidth || Number.MAX_SAFE_INTEGER;
91451
+ const newWidth = Math.max(minWidth, Math.min(maxWidth, proposedWidth));
91452
+ if (newWidth !== currentWidth) {
91453
+ this.setColumnWidth(columnId, newWidth);
91454
+ let columnText = this.localeAPI?.translate("ColumnResizeAria");
91455
+ columnText = columnText.replace("{0}", column.name).replace("{1}", newWidth);
91456
+ focusedHeaderCell.setAttribute("aria-label", columnText);
91457
+ }
91458
+ }
91459
+ }
91460
+ return;
91461
+ }
91462
+ e.preventDefault();
91463
+ e.stopPropagation();
91464
+ if (columnIndexAttr) {
91465
+ const currentColumnIndex = parseInt(columnIndexAttr) - 1;
91466
+ const nextColumnIndex = e.key === "ArrowRight" ? currentColumnIndex + 1 : currentColumnIndex - 1;
91467
+ if (nextColumnIndex >= 0 && nextColumnIndex < this.visibleColumns.length) {
91468
+ const nextHeaderCell = this.header?.querySelector(`[aria-colindex="${nextColumnIndex + 1}"][tabindex="0"]`);
91469
+ if (nextHeaderCell) {
91470
+ nextHeaderCell.focus();
91471
+ return;
91472
+ }
91473
+ }
91474
+ }
91475
+ }
91476
+ if (e.key === " " || e.key === "Space") {
91477
+ const focusedHeaderCell = e.target;
91478
+ if (focusedHeaderCell.hasAttribute("tabindex") && focusedHeaderCell.classList.contains("ids-data-grid-header-cell")) {
91479
+ e.preventDefault();
91480
+ e.stopPropagation();
91481
+ const headerCheckbox = focusedHeaderCell.querySelector(".ids-data-grid-checkbox");
91482
+ if (headerCheckbox) {
91483
+ if (headerCheckbox.classList.contains("checked") || headerCheckbox.classList.contains("indeterminate")) {
91484
+ this.deSelectAllRows();
91485
+ } else {
91486
+ this.selectAllRows();
91487
+ }
91488
+ }
91489
+ const columnCheckbox = focusedHeaderCell.querySelector(".ids-checkbox input");
91490
+ if (columnCheckbox) {
91491
+ const checkbox = columnCheckbox;
91492
+ checkbox.checked = !checkbox.checked;
91493
+ const columnIndex = parseInt(focusedHeaderCell.getAttribute("aria-colindex") || "1") - 1;
91494
+ if (checkbox.checked) {
91495
+ this.selectColumn(columnIndex);
91496
+ } else {
91497
+ this.deSelectColumn(columnIndex);
91498
+ }
91499
+ }
91500
+ return;
91501
+ }
91502
+ }
91214
91503
  this.activeCell = {};
91215
91504
  });
91216
91505
  this.offEvent("keydown.body", this);
@@ -91754,6 +92043,73 @@ ids-icon {
91754
92043
  __privateMethod(this, _IdsDataGrid_instances, restoreEditedCellsAfterScroll_fn).call(this);
91755
92044
  }
91756
92045
  };
92046
+ /**
92047
+ * Convert data row index to visible row index for tree grids
92048
+ * @param {number} rowIndex - The data row index
92049
+ * @returns {number} The visible row index, or -1 if row is hidden
92050
+ * @private
92051
+ */
92052
+ getVisibleRowIndex_fn = function(rowIndex) {
92053
+ if (!this.treeGrid) return rowIndex;
92054
+ return this.virtualRows.findIndex((row) => row === this.data[rowIndex]);
92055
+ };
92056
+ /**
92057
+ * Find the next non-hidden row index in the specified direction
92058
+ * @param {number} startRowIndex - The starting data row index
92059
+ * @param {IdsDirection} direction - The navigation direction (Up or Down)
92060
+ * @returns {number} The next non-hidden row index, or -1 if none found
92061
+ * @private
92062
+ */
92063
+ findNextVisibleRow_fn = function(startRowIndex, direction) {
92064
+ const step = direction === "down" /* Down */ ? 1 : -1;
92065
+ let nextRowIndex = startRowIndex + step;
92066
+ while (nextRowIndex >= 0 && nextRowIndex < this.data.length && this.treeGrid && this.data[nextRowIndex]?.rowHidden) {
92067
+ nextRowIndex += step;
92068
+ }
92069
+ return nextRowIndex >= 0 && nextRowIndex < this.data.length ? nextRowIndex : -1;
92070
+ };
92071
+ /**
92072
+ * Scroll to bring a row into view and activate its cell
92073
+ * @param {number} nextRowIndex - The data row index to bring into view
92074
+ * @param {number} columnIndex - The column index of the cell to activate
92075
+ * @param {IdsDirection} direction - The navigation direction (Up or Down)
92076
+ * @private
92077
+ */
92078
+ scrollToActivateRow_fn = function(nextRowIndex, columnIndex, direction) {
92079
+ if (nextRowIndex < 0 || nextRowIndex >= this.data.length) return;
92080
+ const visibleRowIndex = __privateMethod(this, _IdsDataGrid_instances, getVisibleRowIndex_fn).call(this, nextRowIndex);
92081
+ if (visibleRowIndex === -1) return;
92082
+ const { ROW_HEIGHT } = this.virtualScrollSettings;
92083
+ const containerHeight = this.container.clientHeight;
92084
+ const headerHeight = this.header?.clientHeight ?? 0;
92085
+ const targetScrollTop = direction === "down" /* Down */ ? (visibleRowIndex + 1) * ROW_HEIGHT - containerHeight + headerHeight : visibleRowIndex * ROW_HEIGHT;
92086
+ this.container.scrollTop = Math.max(targetScrollTop, 0);
92087
+ requestAnimationFrame(() => {
92088
+ const activeCell = this.findCellByLogicalPosition(nextRowIndex, columnIndex);
92089
+ if (activeCell) {
92090
+ activeCell.focus();
92091
+ this.setActiveCell(activeCell.columnIndex, activeCell.rowIndex, false, "keyboard");
92092
+ }
92093
+ });
92094
+ };
92095
+ ensureRowInViewport_fn = function(rowIndex, direction) {
92096
+ if (!this.virtualScroll || !this.container) return;
92097
+ const { ROW_HEIGHT } = this.virtualScrollSettings;
92098
+ const containerHeight = this.container.clientHeight;
92099
+ const headerHeight = this.header?.clientHeight ?? 0;
92100
+ const scrollTop = this.container.scrollTop;
92101
+ const viewportTop = scrollTop;
92102
+ const viewportBottom = scrollTop + containerHeight - headerHeight;
92103
+ const effectiveRowIndex = __privateMethod(this, _IdsDataGrid_instances, getVisibleRowIndex_fn).call(this, rowIndex);
92104
+ if (effectiveRowIndex === -1) return;
92105
+ const rowTop = effectiveRowIndex * ROW_HEIGHT;
92106
+ const rowBottom = rowTop + ROW_HEIGHT;
92107
+ if (direction === "up" /* Up */ && rowTop < viewportTop) {
92108
+ this.container.scrollTop = rowTop;
92109
+ } else if (direction === "down" /* Down */ && rowBottom > viewportBottom) {
92110
+ this.container.scrollTop = rowBottom - containerHeight + headerHeight;
92111
+ }
92112
+ };
91757
92113
  setVirtualScrollPaddingBottom_fn = function(settings, totalRows, offsetTop) {
91758
92114
  const maxHeight = totalRows * settings.ROW_HEIGHT;
91759
92115
  const paddingBottom = maxHeight - settings.MAX_ROWS_IN_DOM * settings.ROW_HEIGHT - offsetTop;
@@ -92123,7 +92479,7 @@ ids-icon {
92123
92479
  editedCells.push(this.activeCell?.node);
92124
92480
  const activeCell = this.activeCell.node;
92125
92481
  const currentValue = activeCell.editor?.input?.value || "";
92126
- this.updateActiveCellCache(this.activeCell.row, this.activeCell.cell, currentValue);
92482
+ this.updateActiveCellCache(this.activeCell.row, this.activeCell.cell, currentValue, true);
92127
92483
  __privateGet(this, _activeCellCache).shouldReinstateCell = true;
92128
92484
  this.commitCellEdit();
92129
92485
  }
@@ -92162,7 +92518,8 @@ ids-icon {
92162
92518
  const {
92163
92519
  rowIndex,
92164
92520
  columnIndex,
92165
- currentValue
92521
+ currentValue,
92522
+ wasEditing
92166
92523
  } = __privateGet(this, _activeCellCache);
92167
92524
  if (rowIndex < 0 || rowIndex >= this.data.length || columnIndex < 0 || columnIndex >= this.visibleColumns.length) {
92168
92525
  return;
@@ -92174,7 +92531,9 @@ ids-icon {
92174
92531
  const scrollTop = this.container?.scrollTop || 0;
92175
92532
  const containerHeight = this.container?.clientHeight || 0;
92176
92533
  const rowHeight = this.virtualScrollSettings.ROW_HEIGHT;
92177
- const rowTop = rowIndex * rowHeight;
92534
+ const effectiveRowIndex = __privateMethod(this, _IdsDataGrid_instances, getVisibleRowIndex_fn).call(this, rowIndex);
92535
+ if (effectiveRowIndex === -1) return;
92536
+ const rowTop = effectiveRowIndex * rowHeight;
92178
92537
  const rowBottom = rowTop + rowHeight;
92179
92538
  const viewportTop = scrollTop;
92180
92539
  const viewportBottom = scrollTop + containerHeight;
@@ -92183,15 +92542,12 @@ ids-icon {
92183
92542
  __privateGet(this, _activeCellCache).hasLeaveViewport = true;
92184
92543
  return;
92185
92544
  }
92186
- if (!__privateGet(this, _activeCellCache).hasLeaveViewport) {
92187
- return;
92188
- }
92189
92545
  const cellElement = this.cellByIndex(rowIndex, columnIndex);
92190
92546
  if (!cellElement) {
92191
92547
  return;
92192
92548
  }
92193
92549
  this.setActiveCell(columnIndex, rowIndex, false, "internal");
92194
- if (cellElement.column?.editor) {
92550
+ if (wasEditing === true && cellElement.column?.editor) {
92195
92551
  cellElement.startCellEdit();
92196
92552
  if (cellElement.editor?.input) {
92197
92553
  cellElement.editor.input.value = currentValue;