@tetacom/ng-components 1.0.37 → 1.0.40

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 (207) hide show
  1. package/component/dropdown/dropdown/dropdown.component.d.ts +1 -1
  2. package/component/file-upload/file-upload-area/file-upload-area.component.d.ts +3 -2
  3. package/component/resize-panel/resize-panel/resize-panel.component.d.ts +1 -0
  4. package/component/table/contract/head-dropdown-tab.d.ts +13 -0
  5. package/component/table/contract/public-api.d.ts +1 -0
  6. package/component/table/contract/table-column.d.ts +7 -3
  7. package/component/table/head-cell/head-cell.component.d.ts +7 -3
  8. package/component/table/head-cell-dropdown/head-cell-dropdown.component.d.ts +5 -43
  9. package/component/table/table/table.component.d.ts +1 -1
  10. package/component/table/table-head/filter-dropdown-tab/filter-dropdown-tab.component.d.ts +32 -0
  11. package/component/table/table-head/main-dropdown-tab/main-dropdown-tab.component.d.ts +41 -0
  12. package/component/table/table-head/visibility-dropdown-tab/visibility-dropdown-tab.component.d.ts +46 -0
  13. package/component/table/table.module.d.ts +23 -20
  14. package/directive/public-api.d.ts +1 -0
  15. package/directive/scroll-into-view/public-api.d.ts +2 -0
  16. package/directive/scroll-into-view/scroll-into-view.directive.d.ts +13 -0
  17. package/directive/scroll-into-view/scroll-into-view.module.d.ts +8 -0
  18. package/esm2020/common/service/click.service.mjs +3 -3
  19. package/esm2020/common/service/dynamic-component.service.mjs +3 -3
  20. package/esm2020/common/service/overlay-container.service.mjs +3 -3
  21. package/esm2020/component/accordion/accordion/accordion.component.mjs +3 -3
  22. package/esm2020/component/accordion/accordion-content.directive.mjs +3 -3
  23. package/esm2020/component/accordion/accordion-head/accordion-head.component.mjs +3 -3
  24. package/esm2020/component/accordion/accordion-item/accordion-item.component.mjs +3 -3
  25. package/esm2020/component/accordion/accordion.module.mjs +4 -4
  26. package/esm2020/component/button/button/button.component.mjs +3 -3
  27. package/esm2020/component/button/button.module.mjs +4 -4
  28. package/esm2020/component/chart-3d/chart-3d.module.mjs +4 -4
  29. package/esm2020/component/chart-3d/chart3d/chart3d.component.mjs +3 -3
  30. package/esm2020/component/checkbox/checkbox/checkbox.component.mjs +3 -3
  31. package/esm2020/component/checkbox/checkbox.module.mjs +4 -4
  32. package/esm2020/component/date-picker/date-picker/date-picker.component.mjs +5 -5
  33. package/esm2020/component/date-picker/date-picker.module.mjs +4 -4
  34. package/esm2020/component/date-picker/day-select/day-select.component.mjs +3 -3
  35. package/esm2020/component/date-picker/month-picker/month-picker.component.mjs +5 -5
  36. package/esm2020/component/date-picker/month-select/month-select.component.mjs +3 -3
  37. package/esm2020/component/date-picker/service/picker-touch.service.mjs +3 -3
  38. package/esm2020/component/date-picker/time-part-control/time-part-control.component.mjs +3 -3
  39. package/esm2020/component/date-picker/year-select/year-select.component.mjs +3 -3
  40. package/esm2020/component/delimiter/delimiter/delimiter.component.mjs +3 -3
  41. package/esm2020/component/delimiter/delimiter.module.mjs +4 -4
  42. package/esm2020/component/dropdown/dropdown/dropdown.component.mjs +5 -5
  43. package/esm2020/component/dropdown/dropdown-base.mjs +3 -3
  44. package/esm2020/component/dropdown/dropdown-content.directive.mjs +3 -3
  45. package/esm2020/component/dropdown/dropdown-head.directive.mjs +3 -3
  46. package/esm2020/component/dropdown/dropdown.directive.mjs +3 -3
  47. package/esm2020/component/dropdown/dropdown.module.mjs +4 -4
  48. package/esm2020/component/dynamic-component/dynamic-component.module.mjs +4 -4
  49. package/esm2020/component/dynamic-component/popup-content/popup-content.component.mjs +3 -3
  50. package/esm2020/component/expand-card/expand-card/expand-card.component.mjs +5 -5
  51. package/esm2020/component/expand-card/expand-card.module.mjs +4 -4
  52. package/esm2020/component/expand-panel/expand-panel/expand-panel.component.mjs +3 -3
  53. package/esm2020/component/expand-panel/expand-panel-content.directive.mjs +3 -3
  54. package/esm2020/component/expand-panel/expand-panel-head.directive.mjs +3 -3
  55. package/esm2020/component/expand-panel/expand-panel.module.mjs +4 -4
  56. package/esm2020/component/file-upload/file-item/file-item.component.mjs +3 -3
  57. package/esm2020/component/file-upload/file-upload-area/file-upload-area.component.mjs +11 -7
  58. package/esm2020/component/file-upload/file-upload.module.mjs +4 -4
  59. package/esm2020/component/filter/boolean-filter/boolean-filter.component.mjs +3 -3
  60. package/esm2020/component/filter/date-filter/date-filter.component.mjs +3 -3
  61. package/esm2020/component/filter/filter-host/filter-host.component.mjs +3 -3
  62. package/esm2020/component/filter/filter.module.mjs +4 -4
  63. package/esm2020/component/filter/list-filter/list-filter.component.mjs +3 -3
  64. package/esm2020/component/filter/numeric-filter/numeric-filter.component.mjs +3 -3
  65. package/esm2020/component/filter/string-filter/string-filter.component.mjs +3 -3
  66. package/esm2020/component/icon/icon/icon.component.mjs +3 -3
  67. package/esm2020/component/icon/icon-sprite.directive.mjs +3 -3
  68. package/esm2020/component/icon/icon.module.mjs +4 -4
  69. package/esm2020/component/icon/icon.service.mjs +3 -3
  70. package/esm2020/component/input/form-group-title/form-group-title.component.mjs +3 -3
  71. package/esm2020/component/input/input/input.component.mjs +3 -3
  72. package/esm2020/component/input/input.module.mjs +4 -4
  73. package/esm2020/component/input/text-field/text-field.component.mjs +3 -3
  74. package/esm2020/component/message/message/message.component.mjs +3 -3
  75. package/esm2020/component/message/message-host/message-host.component.mjs +3 -3
  76. package/esm2020/component/message/message.module.mjs +4 -4
  77. package/esm2020/component/message/message.service.mjs +3 -3
  78. package/esm2020/component/modal/dialog/dialog.component.mjs +3 -3
  79. package/esm2020/component/modal/dialog.service.mjs +3 -3
  80. package/esm2020/component/modal/modal-container/modal-container.component.mjs +3 -3
  81. package/esm2020/component/modal/modal.module.mjs +4 -4
  82. package/esm2020/component/modal/modal.service.mjs +3 -3
  83. package/esm2020/component/pager/pager/pager.component.mjs +3 -3
  84. package/esm2020/component/pager/pager.module.mjs +4 -4
  85. package/esm2020/component/panel/panel/panel.component.mjs +3 -3
  86. package/esm2020/component/panel/panel.module.mjs +4 -4
  87. package/esm2020/component/progress-bar/progress-bar/progress-bar.component.mjs +3 -3
  88. package/esm2020/component/progress-bar/progress-bar.module.mjs +4 -4
  89. package/esm2020/component/property-grid/default/date-item-default/date-item-default.component.mjs +3 -3
  90. package/esm2020/component/property-grid/default/list-item-default/list-item-default.component.mjs +3 -3
  91. package/esm2020/component/property-grid/default/numeric-item-default/numeric-item-default.component.mjs +3 -3
  92. package/esm2020/component/property-grid/default/string-item-default/string-item-default.component.mjs +3 -3
  93. package/esm2020/component/property-grid/property-grid/property-grid-group/property-grid-group.component.mjs +3 -3
  94. package/esm2020/component/property-grid/property-grid/property-grid-item/property-grid-item.component.mjs +3 -3
  95. package/esm2020/component/property-grid/property-grid/property-grid.component.mjs +3 -3
  96. package/esm2020/component/property-grid/property-grid.module.mjs +4 -4
  97. package/esm2020/component/radio/radio/radio.component.mjs +3 -3
  98. package/esm2020/component/radio/radio-button/radio-button.component.mjs +3 -3
  99. package/esm2020/component/radio/radio.module.mjs +4 -4
  100. package/esm2020/component/resize-panel/resize-panel/resize-panel.component.mjs +8 -5
  101. package/esm2020/component/resize-panel/resize-panel.module.mjs +4 -4
  102. package/esm2020/component/select/select/select.component.mjs +4 -4
  103. package/esm2020/component/select/select-option.directive.mjs +3 -3
  104. package/esm2020/component/select/select-value.directive.mjs +3 -3
  105. package/esm2020/component/select/select.module.mjs +4 -4
  106. package/esm2020/component/sidebar/sidebar/sidebar.component.mjs +3 -3
  107. package/esm2020/component/sidebar/sidebar.module.mjs +4 -4
  108. package/esm2020/component/switch/switch/switch.component.mjs +3 -3
  109. package/esm2020/component/switch/switch-button/switch-button.component.mjs +3 -3
  110. package/esm2020/component/switch/switch.module.mjs +4 -4
  111. package/esm2020/component/switch/switch.service.mjs +3 -3
  112. package/esm2020/component/table/base/cell-component-base.mjs +3 -3
  113. package/esm2020/component/table/base/head-cell-component-base.mjs +3 -3
  114. package/esm2020/component/table/cell/cell.component.mjs +3 -3
  115. package/esm2020/component/table/cell-host/cell-host.component.mjs +3 -3
  116. package/esm2020/component/table/contract/head-dropdown-tab.mjs +2 -0
  117. package/esm2020/component/table/contract/public-api.mjs +2 -1
  118. package/esm2020/component/table/contract/table-column.mjs +4 -2
  119. package/esm2020/component/table/default/boolean-cell/boolean-cell.component.mjs +3 -3
  120. package/esm2020/component/table/default/date-cell/date-cell.component.mjs +3 -3
  121. package/esm2020/component/table/default/date-time-cell/date-time-cell.component.mjs +3 -3
  122. package/esm2020/component/table/default/default-head-cell/default-head-cell.component.mjs +5 -5
  123. package/esm2020/component/table/default/group-row/group-row.component.mjs +3 -3
  124. package/esm2020/component/table/default/list-cell/list-cell.component.mjs +3 -3
  125. package/esm2020/component/table/default/numeric-cell/numeric-cell.component.mjs +3 -3
  126. package/esm2020/component/table/default/string-cell/string-cell.component.mjs +3 -3
  127. package/esm2020/component/table/head-cell/head-cell.component.mjs +59 -16
  128. package/esm2020/component/table/head-cell-dropdown/head-cell-dropdown.component.mjs +17 -180
  129. package/esm2020/component/table/head-cell-host/head-cell-host.component.mjs +3 -3
  130. package/esm2020/component/table/selection-cell/selection-cell.component.mjs +5 -5
  131. package/esm2020/component/table/selection-head-cell/selection-head-cell.component.mjs +3 -3
  132. package/esm2020/component/table/service/table.service.mjs +14 -5
  133. package/esm2020/component/table/table/table.component.mjs +12 -5
  134. package/esm2020/component/table/table-body/table-body.component.mjs +32 -28
  135. package/esm2020/component/table/table-head/filter-dropdown-tab/filter-dropdown-tab.component.mjs +55 -0
  136. package/esm2020/component/table/table-head/main-dropdown-tab/main-dropdown-tab.component.mjs +81 -0
  137. package/esm2020/component/table/table-head/table-head.component.mjs +22 -22
  138. package/esm2020/component/table/table-head/visibility-dropdown-tab/visibility-dropdown-tab.component.mjs +140 -0
  139. package/esm2020/component/table/table-head-group/table-head-group.component.mjs +3 -3
  140. package/esm2020/component/table/table.module.mjs +15 -6
  141. package/esm2020/component/tabs/tab/tab.component.mjs +3 -3
  142. package/esm2020/component/tabs/tab-content.directive.mjs +3 -3
  143. package/esm2020/component/tabs/tab-title.directive.mjs +3 -3
  144. package/esm2020/component/tabs/tabs/tabs.component.mjs +3 -3
  145. package/esm2020/component/tabs/tabs.module.mjs +4 -4
  146. package/esm2020/component/theme-switch/theme-switch/theme-switch.component.mjs +3 -3
  147. package/esm2020/component/theme-switch/theme-switch.module.mjs +4 -4
  148. package/esm2020/component/theme-switch/theme-switch.service.mjs +3 -3
  149. package/esm2020/component/toggle/toggle/toggle.component.mjs +3 -3
  150. package/esm2020/component/toggle/toggle.module.mjs +4 -4
  151. package/esm2020/component/toolbar/toolbar/toolbar.component.mjs +3 -3
  152. package/esm2020/component/toolbar/toolbar.module.mjs +4 -4
  153. package/esm2020/component/tree/tree/tree.component.mjs +3 -3
  154. package/esm2020/component/tree/tree-item/tree-item.component.mjs +3 -3
  155. package/esm2020/component/tree/tree-item-toggle/tree-item-toggle.component.mjs +3 -3
  156. package/esm2020/component/tree/tree.module.mjs +4 -4
  157. package/esm2020/component/tree/tree.service.mjs +3 -3
  158. package/esm2020/directive/click-outside/click-outside.directive.mjs +3 -3
  159. package/esm2020/directive/click-outside/click-outside.module.mjs +4 -4
  160. package/esm2020/directive/context-menu/context-menu.directive.mjs +3 -3
  161. package/esm2020/directive/context-menu/context-menu.module.mjs +4 -4
  162. package/esm2020/directive/disable-control/disable-control.directive.mjs +3 -3
  163. package/esm2020/directive/disable-control/disable-control.module.mjs +4 -4
  164. package/esm2020/directive/drag-drop/drag-container.directive.mjs +3 -3
  165. package/esm2020/directive/drag-drop/drag-drop.module.mjs +4 -4
  166. package/esm2020/directive/drag-drop/drag-drop.service.mjs +3 -3
  167. package/esm2020/directive/drag-drop/drag-placeholder.directive.mjs +3 -3
  168. package/esm2020/directive/drag-drop/drag-preview.directive.mjs +3 -3
  169. package/esm2020/directive/drag-drop/drag.directive.mjs +3 -3
  170. package/esm2020/directive/drag-sort/drag-sort-container.directive.mjs +3 -3
  171. package/esm2020/directive/drag-sort/drag-sort-item.directive.mjs +3 -3
  172. package/esm2020/directive/drag-sort/drag-sort.module.mjs +4 -4
  173. package/esm2020/directive/dynamic-content-base.directive.mjs +3 -3
  174. package/esm2020/directive/highlight/highlight.directive.mjs +3 -3
  175. package/esm2020/directive/highlight/highlight.module.mjs +4 -4
  176. package/esm2020/directive/hint/hint.directive.mjs +3 -3
  177. package/esm2020/directive/hint/hint.module.mjs +4 -4
  178. package/esm2020/directive/let/let.directive.mjs +3 -3
  179. package/esm2020/directive/let/let.module.mjs +4 -4
  180. package/esm2020/directive/loader/loader.directive.mjs +3 -3
  181. package/esm2020/directive/loader/loader.module.mjs +4 -4
  182. package/esm2020/directive/no-autofill/no-autofill.directive.mjs +3 -3
  183. package/esm2020/directive/no-autofill/no-autofill.module.mjs +4 -4
  184. package/esm2020/directive/only-number/only-number.directive.mjs +3 -3
  185. package/esm2020/directive/only-number/only-number.module.mjs +4 -4
  186. package/esm2020/directive/public-api.mjs +2 -1
  187. package/esm2020/directive/resize-drag/resize-drag.directive.mjs +3 -3
  188. package/esm2020/directive/resize-drag/resize-drag.module.mjs +4 -4
  189. package/esm2020/directive/scroll-into-view/public-api.mjs +3 -0
  190. package/esm2020/directive/scroll-into-view/scroll-into-view.directive.mjs +40 -0
  191. package/esm2020/directive/scroll-into-view/scroll-into-view.module.mjs +25 -0
  192. package/esm2020/directive/teta-template/teta-template.directive.mjs +3 -3
  193. package/esm2020/directive/teta-template/teta-template.module.mjs +4 -4
  194. package/esm2020/directive/tooltip/tooltip.directive.mjs +3 -3
  195. package/esm2020/directive/tooltip/tooltip.module.mjs +4 -4
  196. package/esm2020/locale/teta-config.service.mjs +3 -3
  197. package/esm2020/pipe/number-pipe/number-pipe.module.mjs +4 -4
  198. package/esm2020/pipe/number-pipe/number.pipe.mjs +3 -3
  199. package/esm2020/pipe/prepend-zero/prepend-zero.module.mjs +4 -4
  200. package/esm2020/pipe/prepend-zero/prepend-zero.pipe.mjs +3 -3
  201. package/fesm2015/tetacom-ng-components.mjs +945 -715
  202. package/fesm2015/tetacom-ng-components.mjs.map +1 -1
  203. package/fesm2020/tetacom-ng-components.mjs +940 -714
  204. package/fesm2020/tetacom-ng-components.mjs.map +1 -1
  205. package/package.json +1 -1
  206. package/style/layout.scss +2 -1
  207. package/style/table.scss +14 -1
@@ -32,15 +32,15 @@ export class SelectionCellComponent {
32
32
  this._alive = false;
33
33
  }
34
34
  }
35
- SelectionCellComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.1", ngImport: i0, type: SelectionCellComponent, deps: [{ token: i1.TableService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
36
- SelectionCellComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.1", type: SelectionCellComponent, selector: "teta-selection-cell", inputs: { row: "row" }, host: { properties: { "class.cell": "this.tableCellClass" } }, ngImport: i0, template: "<teta-checkbox [binary]=\"true\"\n [noLabel]=\"true\"\n [ngModel]=\"selectedRows?.indexOf(row) >= 0\"\n (ngModelChange)=\"selectRow($event)\"></teta-checkbox>\n", styles: [":host{display:flex;align-items:center;justify-content:center}\n"], components: [{ type: i2.CheckboxComponent, selector: "teta-checkbox", inputs: ["class", "palette", "noLabel", "disabled", "value", "binary", "allowNull"] }], directives: [{ type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
37
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.1", ngImport: i0, type: SelectionCellComponent, decorators: [{
35
+ SelectionCellComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.3", ngImport: i0, type: SelectionCellComponent, deps: [{ token: i1.TableService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
36
+ SelectionCellComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.3", type: SelectionCellComponent, selector: "teta-selection-cell", inputs: { row: "row" }, host: { properties: { "class.cell": "this.tableCellClass" } }, ngImport: i0, template: "<teta-checkbox [binary]=\"true\"\n [noLabel]=\"true\"\n [ngModel]=\"selectedRows?.indexOf(row) >= 0\"\n (ngModelChange)=\"selectRow($event)\"\n (click)=\"$event.stopPropagation()\"></teta-checkbox>\n", styles: [":host{display:flex;align-items:center;justify-content:center}\n"], components: [{ type: i2.CheckboxComponent, selector: "teta-checkbox", inputs: ["class", "palette", "noLabel", "disabled", "value", "binary", "allowNull"] }], directives: [{ type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
37
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.3", ngImport: i0, type: SelectionCellComponent, decorators: [{
38
38
  type: Component,
39
- args: [{ selector: 'teta-selection-cell', changeDetection: ChangeDetectionStrategy.OnPush, template: "<teta-checkbox [binary]=\"true\"\n [noLabel]=\"true\"\n [ngModel]=\"selectedRows?.indexOf(row) >= 0\"\n (ngModelChange)=\"selectRow($event)\"></teta-checkbox>\n", styles: [":host{display:flex;align-items:center;justify-content:center}\n"] }]
39
+ args: [{ selector: 'teta-selection-cell', changeDetection: ChangeDetectionStrategy.OnPush, template: "<teta-checkbox [binary]=\"true\"\n [noLabel]=\"true\"\n [ngModel]=\"selectedRows?.indexOf(row) >= 0\"\n (ngModelChange)=\"selectRow($event)\"\n (click)=\"$event.stopPropagation()\"></teta-checkbox>\n", styles: [":host{display:flex;align-items:center;justify-content:center}\n"] }]
40
40
  }], ctorParameters: function () { return [{ type: i1.TableService }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { row: [{
41
41
  type: Input
42
42
  }], tableCellClass: [{
43
43
  type: HostBinding,
44
44
  args: ['class.cell']
45
45
  }] } });
46
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0aW9uLWNlbGwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudC90YWJsZS9zZWxlY3Rpb24tY2VsbC9zZWxlY3Rpb24tY2VsbC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50L3RhYmxlL3NlbGVjdGlvbi1jZWxsL3NlbGVjdGlvbi1jZWxsLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFFdkIsU0FBUyxFQUNULFdBQVcsRUFDWCxLQUFLLEdBR04sTUFBTSxlQUFlLENBQUM7QUFHdkIsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7OztBQVEzQyxNQUFNLE9BQU8sc0JBQXNCO0lBUWpDLFlBQW9CLElBQXFCLEVBQVUsSUFBdUI7UUFBdEQsU0FBSSxHQUFKLElBQUksQ0FBaUI7UUFBVSxTQUFJLEdBQUosSUFBSSxDQUFtQjtRQUw5QixtQkFBYyxHQUFHLElBQUksQ0FBQztRQUNsRSxpQkFBWSxHQUFrQixFQUFFLENBQUM7UUFFekIsV0FBTSxHQUFHLElBQUksQ0FBQztJQUV1RCxDQUFDO0lBRTlFLFNBQVMsQ0FBQyxLQUFjO1FBQ3RCLElBQUksS0FBSyxFQUFFO1lBQ1QsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQy9CO2FBQU07WUFDTCxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDakM7SUFDSCxDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWTthQUNuQixJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7YUFDbkMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7WUFDZixJQUFJLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQztZQUN0QixJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQzNCLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztJQUN0QixDQUFDOzttSEE3QlUsc0JBQXNCO3VHQUF0QixzQkFBc0Isa0pDbkJuQyw0TUFJQTsyRkRlYSxzQkFBc0I7a0JBTmxDLFNBQVM7K0JBQ0UscUJBQXFCLG1CQUdkLHVCQUF1QixDQUFDLE1BQU07bUlBR3RDLEdBQUc7c0JBQVgsS0FBSztnQkFFc0MsY0FBYztzQkFBekQsV0FBVzt1QkFBQyxZQUFZIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEhvc3RCaW5kaW5nLFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVGFibGVTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZS90YWJsZS5zZXJ2aWNlJztcbmltcG9ydCB7IFRhYmxlUm93IH0gZnJvbSAnLi4vY29udHJhY3QvdGFibGUtcm93JztcbmltcG9ydCB7IHRha2VXaGlsZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndGV0YS1zZWxlY3Rpb24tY2VsbCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9zZWxlY3Rpb24tY2VsbC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3NlbGVjdGlvbi1jZWxsLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBTZWxlY3Rpb25DZWxsQ29tcG9uZW50PFQ+IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBASW5wdXQoKSByb3c6IFRhYmxlUm93PFQ+O1xuXG4gIEBIb3N0QmluZGluZygnY2xhc3MuY2VsbCcpIHByaXZhdGUgcmVhZG9ubHkgdGFibGVDZWxsQ2xhc3MgPSB0cnVlO1xuICBzZWxlY3RlZFJvd3M6IFRhYmxlUm93PFQ+W10gPSBbXTtcblxuICBwcml2YXRlIF9hbGl2ZSA9IHRydWU7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBfc3ZjOiBUYWJsZVNlcnZpY2U8VD4sIHByaXZhdGUgX2NkcjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHt9XG5cbiAgc2VsZWN0Um93KHZhbHVlOiBib29sZWFuKSB7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICB0aGlzLl9zdmMuc2VsZWN0Um93KHRoaXMucm93KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fc3ZjLmRlc2VsZWN0Um93KHRoaXMucm93KTtcbiAgICB9XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLl9zdmMuc2VsZWN0ZWRSb3dzXG4gICAgICAucGlwZSh0YWtlV2hpbGUoKF8pID0+IHRoaXMuX2FsaXZlKSlcbiAgICAgIC5zdWJzY3JpYmUoKF8pID0+IHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFJvd3MgPSBfO1xuICAgICAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuX2FsaXZlID0gZmFsc2U7XG4gIH1cbn1cbiIsIjx0ZXRhLWNoZWNrYm94IFtiaW5hcnldPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICBbbm9MYWJlbF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cInNlbGVjdGVkUm93cz8uaW5kZXhPZihyb3cpID49IDBcIlxuICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwic2VsZWN0Um93KCRldmVudClcIj48L3RldGEtY2hlY2tib3g+XG4iXX0=
46
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0aW9uLWNlbGwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudC90YWJsZS9zZWxlY3Rpb24tY2VsbC9zZWxlY3Rpb24tY2VsbC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50L3RhYmxlL3NlbGVjdGlvbi1jZWxsL3NlbGVjdGlvbi1jZWxsLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFFdkIsU0FBUyxFQUNULFdBQVcsRUFDWCxLQUFLLEdBR04sTUFBTSxlQUFlLENBQUM7QUFHdkIsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7OztBQVEzQyxNQUFNLE9BQU8sc0JBQXNCO0lBUWpDLFlBQW9CLElBQXFCLEVBQVUsSUFBdUI7UUFBdEQsU0FBSSxHQUFKLElBQUksQ0FBaUI7UUFBVSxTQUFJLEdBQUosSUFBSSxDQUFtQjtRQUw5QixtQkFBYyxHQUFHLElBQUksQ0FBQztRQUNsRSxpQkFBWSxHQUFrQixFQUFFLENBQUM7UUFFekIsV0FBTSxHQUFHLElBQUksQ0FBQztJQUV1RCxDQUFDO0lBRTlFLFNBQVMsQ0FBQyxLQUFjO1FBQ3RCLElBQUksS0FBSyxFQUFFO1lBQ1QsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQy9CO2FBQU07WUFDTCxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDakM7SUFDSCxDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWTthQUNuQixJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7YUFDbkMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7WUFDZixJQUFJLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQztZQUN0QixJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQzNCLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztJQUN0QixDQUFDOzttSEE3QlUsc0JBQXNCO3VHQUF0QixzQkFBc0Isa0pDbkJuQyxpUUFLQTsyRkRjYSxzQkFBc0I7a0JBTmxDLFNBQVM7K0JBQ0UscUJBQXFCLG1CQUdkLHVCQUF1QixDQUFDLE1BQU07bUlBR3RDLEdBQUc7c0JBQVgsS0FBSztnQkFFc0MsY0FBYztzQkFBekQsV0FBVzt1QkFBQyxZQUFZIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEhvc3RCaW5kaW5nLFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVGFibGVTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZS90YWJsZS5zZXJ2aWNlJztcbmltcG9ydCB7IFRhYmxlUm93IH0gZnJvbSAnLi4vY29udHJhY3QvdGFibGUtcm93JztcbmltcG9ydCB7IHRha2VXaGlsZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndGV0YS1zZWxlY3Rpb24tY2VsbCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9zZWxlY3Rpb24tY2VsbC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3NlbGVjdGlvbi1jZWxsLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBTZWxlY3Rpb25DZWxsQ29tcG9uZW50PFQ+IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBASW5wdXQoKSByb3c6IFRhYmxlUm93PFQ+O1xuXG4gIEBIb3N0QmluZGluZygnY2xhc3MuY2VsbCcpIHByaXZhdGUgcmVhZG9ubHkgdGFibGVDZWxsQ2xhc3MgPSB0cnVlO1xuICBzZWxlY3RlZFJvd3M6IFRhYmxlUm93PFQ+W10gPSBbXTtcblxuICBwcml2YXRlIF9hbGl2ZSA9IHRydWU7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBfc3ZjOiBUYWJsZVNlcnZpY2U8VD4sIHByaXZhdGUgX2NkcjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHt9XG5cbiAgc2VsZWN0Um93KHZhbHVlOiBib29sZWFuKSB7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICB0aGlzLl9zdmMuc2VsZWN0Um93KHRoaXMucm93KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fc3ZjLmRlc2VsZWN0Um93KHRoaXMucm93KTtcbiAgICB9XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLl9zdmMuc2VsZWN0ZWRSb3dzXG4gICAgICAucGlwZSh0YWtlV2hpbGUoKF8pID0+IHRoaXMuX2FsaXZlKSlcbiAgICAgIC5zdWJzY3JpYmUoKF8pID0+IHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFJvd3MgPSBfO1xuICAgICAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuX2FsaXZlID0gZmFsc2U7XG4gIH1cbn1cbiIsIjx0ZXRhLWNoZWNrYm94IFtiaW5hcnldPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICBbbm9MYWJlbF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cInNlbGVjdGVkUm93cz8uaW5kZXhPZihyb3cpID49IDBcIlxuICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwic2VsZWN0Um93KCRldmVudClcIlxuICAgICAgICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiPjwvdGV0YS1jaGVja2JveD5cbiJdfQ==
@@ -33,9 +33,9 @@ export class SelectionHeadCellComponent {
33
33
  this._alive = false;
34
34
  }
35
35
  }
36
- SelectionHeadCellComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.1", ngImport: i0, type: SelectionHeadCellComponent, deps: [{ token: i1.TableService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
37
- SelectionHeadCellComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.1", type: SelectionHeadCellComponent, selector: "teta-selection-head-cell", host: { properties: { "class.table-head__group": "this.tableCellClass" } }, ngImport: i0, template: "<teta-checkbox [binary]=\"true\"\n [allowNull]=\"true\"\n [noLabel]=\"true\"\n [ngModel]=\"allSelected()\"\n (ngModelChange)=\"selectAll($event)\"></teta-checkbox>\n", styles: [":host{display:flex;align-items:center;justify-content:center}\n"], components: [{ type: i2.CheckboxComponent, selector: "teta-checkbox", inputs: ["class", "palette", "noLabel", "disabled", "value", "binary", "allowNull"] }], directives: [{ type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
38
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.1", ngImport: i0, type: SelectionHeadCellComponent, decorators: [{
36
+ SelectionHeadCellComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.3", ngImport: i0, type: SelectionHeadCellComponent, deps: [{ token: i1.TableService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
37
+ SelectionHeadCellComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.3", type: SelectionHeadCellComponent, selector: "teta-selection-head-cell", host: { properties: { "class.table-head__group": "this.tableCellClass" } }, ngImport: i0, template: "<teta-checkbox [binary]=\"true\"\n [allowNull]=\"true\"\n [noLabel]=\"true\"\n [ngModel]=\"allSelected()\"\n (ngModelChange)=\"selectAll($event)\"></teta-checkbox>\n", styles: [":host{display:flex;align-items:center;justify-content:center}\n"], components: [{ type: i2.CheckboxComponent, selector: "teta-checkbox", inputs: ["class", "palette", "noLabel", "disabled", "value", "binary", "allowNull"] }], directives: [{ type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
38
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.3", ngImport: i0, type: SelectionHeadCellComponent, decorators: [{
39
39
  type: Component,
40
40
  args: [{ selector: 'teta-selection-head-cell', changeDetection: ChangeDetectionStrategy.OnPush, template: "<teta-checkbox [binary]=\"true\"\n [allowNull]=\"true\"\n [noLabel]=\"true\"\n [ngModel]=\"allSelected()\"\n (ngModelChange)=\"selectAll($event)\"></teta-checkbox>\n", styles: [":host{display:flex;align-items:center;justify-content:center}\n"] }]
41
41
  }], ctorParameters: function () { return [{ type: i1.TableService }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { tableCellClass: [{
@@ -83,10 +83,19 @@ export class TableService {
83
83
  }
84
84
  setColumns(columns) {
85
85
  this.initialColumns = columns ? columns.map((_) => new TableColumn(_)) : [];
86
+ const excludeKeys = [
87
+ 'editable',
88
+ 'cellComponent',
89
+ 'headCellComponent',
90
+ 'headDropdownConfig',
91
+ 'groupByFn',
92
+ ];
86
93
  this.initialColumnsHash = objectHash(this.initialColumns, {
87
94
  algorithm: 'sha1',
88
95
  ignoreUnknown: true,
89
- excludeKeys: key => key === 'headDropdownTemplate',
96
+ excludeKeys: (key) => {
97
+ return excludeKeys.indexOf(key) >= 0;
98
+ },
90
99
  });
91
100
  const restored = this.restoreColumns();
92
101
  if (restored) {
@@ -595,12 +604,12 @@ export class TableService {
595
604
  });
596
605
  }
597
606
  }
598
- TableService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.1", ngImport: i0, type: TableService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
599
- TableService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.0.1", ngImport: i0, type: TableService, providedIn: 'root' });
600
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.1", ngImport: i0, type: TableService, decorators: [{
607
+ TableService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.3", ngImport: i0, type: TableService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
608
+ TableService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.0.3", ngImport: i0, type: TableService, providedIn: 'root' });
609
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.3", ngImport: i0, type: TableService, decorators: [{
601
610
  type: Injectable,
602
611
  args: [{
603
612
  providedIn: 'root',
604
613
  }]
605
614
  }], ctorParameters: function () { return []; } });
606
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnQvdGFibGUvc2VydmljZS90YWJsZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBRS9DLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQztBQUNyRCxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sb0NBQW9DLENBQUM7QUFDL0QsT0FBTyxFQUFDLGVBQWUsRUFBYyxPQUFPLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFFMUQsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sa0NBQWtDLENBQUM7QUFFcEUsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLGlDQUFpQyxDQUFDO0FBQzFELE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUM3QyxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sMEJBQTBCLENBQUM7QUFDcEQsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBQ2hELE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQztBQUNsRCxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0seUNBQXlDLENBQUM7QUFDdkUsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLG1DQUFtQyxDQUFDO0FBQzdELE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxvQ0FBb0MsQ0FBQztBQUM5RCxPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSw0Q0FBNEMsQ0FBQztBQUM5RSxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sc0NBQXNDLENBQUM7QUFDbkUsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLHFDQUFxQyxDQUFDO0FBQ2pFLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSx5Q0FBeUMsQ0FBQztBQUN4RSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sbUNBQW1DLENBQUM7QUFHN0QsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLHlCQUF5QixDQUFDO0FBQ2pELE9BQU8sVUFBVSxNQUFNLGFBQWEsQ0FBQztBQUNyQyxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxnQ0FBZ0MsQ0FBQzs7QUFRaEUsTUFBTSxPQUFPLFlBQVk7SUFpRXZCO1FBM0RBLGVBQVUsR0FBZSxVQUFVLENBQUMsS0FBSyxDQUFDO1FBZTFDLGFBQVEsR0FBYSxRQUFRLENBQUMsSUFBSSxDQUFDO1FBQ25DLGNBQVMsR0FBYyxTQUFTLENBQUMsV0FBVyxDQUFDO1FBRTdDLGFBQVEsR0FBNkMsQ0FBQyxLQUFhLEVBQUUsR0FBZ0IsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDO1FBT3hGLG1CQUFjLEdBQWtCLEVBQUUsQ0FBQztRQUNuQyxtQkFBYyxHQUFrQixFQUFFLENBQUM7UUFDbkMsYUFBUSxHQUFtQyxJQUFJLGVBQWUsQ0FBZ0IsRUFBRSxDQUFDLENBQUM7UUFDbEYsbUJBQWMsR0FBRyxJQUFJLGVBQWUsQ0FBVyxFQUFFLENBQUMsQ0FBQztRQUNuRCxpQkFBWSxHQUFtQyxJQUFJLGVBQWUsQ0FBZ0IsRUFBRSxDQUFDLENBQUM7UUFDdEYsVUFBSyxHQUNYLElBQUksZUFBZSxDQUE4QixFQUFFLENBQUMsQ0FBQztRQUMvQyxtQkFBYyxHQUNwQixJQUFJLGVBQWUsQ0FBOEIsRUFBRSxDQUFDLENBQUM7UUFDL0MsV0FBTSxHQUNaLElBQUksZUFBZSxDQUFjLElBQUksV0FBVyxFQUFFLENBQUMsQ0FBQztRQUk5QyxrQkFBYSxHQUFHLElBQUksT0FBTyxFQUFxQixDQUFDO1FBQ2pELGlCQUFZLEdBQUcsSUFBSSxPQUFPLEVBQTJCLENBQUM7UUFDdEQsbUJBQWMsR0FBRyxJQUFJLE9BQU8sRUFBcUIsQ0FBQztRQUNsRCxrQkFBYSxHQUFHLElBQUksT0FBTyxFQUEyQixDQUFDO1FBQ3ZELGtCQUFhLEdBQUcsSUFBSSxPQUFPLEVBQTJCLENBQUM7UUFDdkQsY0FBUyxHQUFHLElBQUksT0FBTyxFQUFjLENBQUM7UUFDdEMsa0JBQWEsR0FBRyxJQUFJLE9BQU8sRUFBZSxDQUFDO1FBQzNDLGlCQUFZLEdBQUcsSUFBSSxPQUFPLEVBQWUsQ0FBQztRQUUxQyxpQkFBWSxHQUFHLElBQUksT0FBTyxFQUFlLENBQUM7UUFDMUMsa0JBQWEsR0FBRyxJQUFJLGVBQWUsQ0FBZ0IsRUFBRSxDQUFDLENBQUM7UUFDdkQsZUFBVSxHQUFHLElBQUksZUFBZSxDQUFjLElBQUksQ0FBQyxDQUFDO1FBQ3BELGlCQUFZLEdBQUcsSUFBSSxPQUFPLEVBQVUsQ0FBQztRQVMzQyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDNUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3BELElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUN0QyxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDeEQsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3hDLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUN0RCxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDcEQsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3hELElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUN0RCxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDdEQsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQzlDLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUN0RCxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDcEQsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3BELElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUN0RCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDaEQsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3hELElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN0RCxDQUFDO0lBMURELElBQUksVUFBVTtRQUNaLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQztJQUMxQixDQUFDO0lBaUNELElBQUksZUFBZTtRQUNqQixPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztJQUMvQixDQUFDO0lBdUJELE9BQU8sQ0FBQyxJQUFTO1FBQ2YsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxRQUFRLENBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQy9ELENBQUM7SUFFRCxPQUFPLENBQUMsSUFBaUM7UUFDdkMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDeEIsQ0FBQztJQUVELGdCQUFnQixDQUFDLGFBQTBDO1FBQ3pELElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFFRCxVQUFVLENBQUMsT0FBc0I7UUFDL0IsSUFBSSxDQUFDLGNBQWMsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUM1RSxJQUFJLENBQUMsa0JBQWtCLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUU7WUFDeEQsU0FBUyxFQUFFLE1BQU07WUFDakIsYUFBYSxFQUFFLElBQUk7WUFDbkIsV0FBVyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLHNCQUFzQjtTQUNuRCxDQUFDLENBQUM7UUFDSCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFFdkMsSUFBSSxRQUFRLEVBQUU7WUFDWixJQUFJLENBQUMsaUJBQWlCLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDbEM7YUFBTTtZQUNMLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7U0FDN0M7SUFDSCxDQUFDO0lBRUQscUJBQXFCO1FBQ25CLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDNUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVELGFBQWEsQ0FBQyxPQUFzQjtRQUNsQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDaEMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUVELGdCQUFnQjtRQUNkLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUNwQixZQUFZLENBQUMsT0FBTyxDQUNsQixJQUFJLENBQUMsa0JBQWtCLEVBQ3ZCLElBQUksQ0FBQyxTQUFTLENBQUM7Z0JBQ2IsSUFBSSxFQUFFLElBQUksQ0FBQyxrQkFBa0I7Z0JBQzdCLE9BQU8sRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUNqRSxDQUFDLENBQ0gsQ0FBQztTQUNIO0lBQ0gsQ0FBQztJQUVELGlCQUFpQjtRQUNmLFlBQVksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUM7SUFDbkQsQ0FBQztJQUVELGlCQUFpQixDQUFDLE9BQXNCO1FBQ3RDLElBQUksQ0FBQyxjQUFjLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDNUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFFRCxjQUFjO1FBQ1osTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FDN0IsWUFBWSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FDOUMsQ0FBQztRQUNGLElBQUksWUFBWSxJQUFJLFlBQVksQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLGtCQUFrQixFQUFFO1lBQ2pFLE9BQU8sSUFBSSxDQUFDLG1CQUFtQixDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUN2RDtRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELG1CQUFtQixDQUFDLE9BQTJCO1FBQzdDLE9BQU8sT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQXdCLEVBQUUsRUFBRTtZQUM5QyxNQUFNLEtBQUssR0FBRyxTQUFTLENBQUMsYUFBYSxDQUNuQyxJQUFJLENBQUMsY0FBYyxFQUNuQixDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksS0FBSyxNQUFNLENBQUMsSUFBSSxFQUNuQyxTQUFTLENBQ1YsQ0FBQztZQUNGLE1BQU0sWUFBWSxHQUFHLElBQUksV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzVDLFlBQVksQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQztZQUNsQyxZQUFZLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUM7WUFDaEMsWUFBWSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO1lBQ3BDLElBQUksTUFBTSxDQUFDLE9BQU8sRUFBRSxNQUFNLEdBQUcsQ0FBQyxFQUFFO2dCQUM5QixZQUFZLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7YUFDakU7WUFDRCxPQUFPLFlBQVksQ0FBQztRQUN0QixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxRQUFRLENBQUMsS0FBa0I7UUFDekIsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDN0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDMUIsQ0FBQztJQUVELGFBQWEsQ0FBQyxJQUFZO1FBQ3hCLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxHQUFHLElBQUksQ0FBQyxXQUFXLGlCQUFpQixDQUFDO1FBQzlELElBQUksQ0FBQyxrQkFBa0IsR0FBRyxHQUFHLElBQUksQ0FBQyxXQUFXLFVBQVUsQ0FBQztJQUMxRCxDQUFDO0lBRUQsWUFBWTtRQUNWLElBQUksS0FBa0IsQ0FBQztRQUN2QixJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsTUFBTSxHQUFHLENBQUMsSUFBSSxXQUFXLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsRUFBRTtZQUN6RSxJQUFJLFFBQVEsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUMxQixJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssRUFDakIsV0FBVyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQ3RDLENBQUM7WUFDRixRQUFRLEdBQUcsUUFBUSxDQUFDLHlCQUF5QixDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3hELEtBQUssR0FBRyxJQUFJLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUNuQzthQUFNO1lBQ0wsS0FBSyxHQUFHLElBQUksV0FBVyxFQUFFLENBQUM7U0FDM0I7UUFDRCxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxhQUF1QjtRQUN2QyxZQUFZLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7SUFDOUUsQ0FBQztJQUVELG9CQUFvQjtRQUNsQixNQUFNLGFBQWEsR0FBRyxZQUFZLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLElBQUksQ0FBQztRQUMzRSxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7SUFDdEQsQ0FBQztJQUVELE9BQU8sQ0FBQyxTQUFvQjtRQUMxQixJQUFJLFNBQVMsQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFO1lBQzdCLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1NBQ2hFO0lBQ0gsQ0FBQztJQUVELFFBQVEsQ0FBQyxTQUFvQjtRQUMzQixJQUFJLFNBQVMsQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFO1lBQzdCLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1NBQ2pFO0lBQ0gsQ0FBQztJQUVELFNBQVMsQ0FBQyxNQUFtQjtRQUMzQixJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUNoRSxDQUFDO0lBRUQsWUFBWTtRQUNWLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDM0QsQ0FBQztJQUVELFdBQVcsQ0FBQyxNQUFtQjtRQUM3QixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztRQUNoQyxJQUFJLE1BQU0sS0FBSyxJQUFJLElBQUksTUFBTSxLQUFLLFNBQVMsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFO1lBQ2hFLFFBQVEsTUFBTSxDQUFDLFVBQVUsRUFBRTtnQkFDekIsS0FBSyxVQUFVLENBQUMsSUFBSTtvQkFDbEIsS0FBSyxDQUFDLGFBQWEsQ0FDakIsSUFBSSxVQUFVLENBQUM7d0JBQ2IsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJO3dCQUNqQixLQUFLLEVBQUUsTUFBTSxDQUFDLFdBQVc7d0JBQ3pCLEtBQUssRUFBRSxJQUFJLGVBQWUsRUFBRTtxQkFDN0IsQ0FBQyxDQUNILENBQUM7b0JBQ0YsTUFBTTtnQkFDUixLQUFLLFVBQVUsQ0FBQyxNQUFNO29CQUNwQixLQUFLLENBQUMsZUFBZSxDQUNuQixJQUFJLFlBQVksQ0FBQzt3QkFDZixJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUk7d0JBQ2pCLEtBQUssRUFBRSxNQUFNLENBQUMsV0FBVzt3QkFDekIsS0FBSyxFQUFFLEVBQUU7cUJBQ1YsQ0FBQyxDQUNILENBQUM7b0JBQ0YsTUFBTTtnQkFDUixLQUFLLFVBQVUsQ0FBQyxNQUFNO29CQUNwQixLQUFLLENBQUMsZ0JBQWdCLENBQ3BCLElBQUksYUFBYSxDQUFDO3dCQUNoQixJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUk7d0JBQ2pCLEtBQUssRUFBRSxNQUFNLENBQUMsV0FBVzt3QkFDekIsS0FBSyxFQUFFLElBQUksa0JBQWtCLEVBQUU7cUJBQ2hDLENBQUMsQ0FDSCxDQUFDO29CQUNGLE1BQU07Z0JBQ1IsS0FBSyxVQUFVLENBQUMsSUFBSTtvQkFDbEIsS0FBSyxDQUFDLGFBQWEsQ0FDakIsSUFBSSxVQUFVLENBQUM7d0JBQ2IsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJO3dCQUNqQixLQUFLLEVBQUUsTUFBTSxDQUFDLFdBQVc7d0JBQ3pCLEtBQUssRUFBRSxFQUFFO3dCQUNULElBQUksRUFBRSxjQUFjLENBQUMsSUFBSTtxQkFDMUIsQ0FBQyxDQUNILENBQUM7b0JBQ0YsTUFBTTthQUNUO1lBQ0QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1NBQ3ZDO0lBQ0gsQ0FBQztJQUVELGVBQWU7UUFDYixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztRQUNoQyxLQUFLLENBQUMsYUFBYSxHQUFHLEVBQUUsQ0FBQztRQUN6QixLQUFLLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztRQUN2QixLQUFLLENBQUMsY0FBYyxHQUFHLEVBQUUsQ0FBQztRQUMxQixLQUFLLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztRQUN2QixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUVELFNBQVMsQ0FBQyxNQUFtQjtRQUMzQixJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQWdCLEVBQUUsRUFBRTtZQUMvQyxJQUFJLEdBQUcsQ0FBQyxJQUFJLEtBQUssTUFBTSxDQUFDLElBQUksRUFBRTtnQkFDNUIsR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUM7YUFDMUI7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFFRCxTQUFTLENBQUMsTUFBbUI7UUFDM0IsSUFBSSxDQUFDLFdBQVcsR0FBRyxNQUFNLENBQUM7SUFDNUIsQ0FBQztJQUVELG1CQUFtQixDQUFDLE1BQW1CLEVBQUUsT0FBb0I7UUFDM0QsTUFBTSxJQUFJLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQ3ZFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUM5QyxDQUFDO1FBQ0YsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNuQyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDaEUsSUFBSSxRQUFRLEVBQUUsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUN4QixNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ25ELFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFpQixFQUFFLEVBQUU7Z0JBQ3JDLE1BQU0sT0FBTyxHQUFHLFlBQVksQ0FBQyxhQUFhLENBQ3hDLDhCQUE4QixJQUFJLENBQUMsSUFBSSxHQUFHLENBQzVCLENBQUM7Z0JBQ2pCLElBQUksT0FBTyxFQUFFO29CQUNYLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO29CQUNkLElBQUksQ0FBQyxLQUFLLEdBQUcsT0FBTyxDQUFDLFdBQVcsQ0FBQztpQkFDbEM7WUFDSCxDQUFDLENBQUMsQ0FBQztTQUNKO0lBQ0gsQ0FBQztJQUVELFlBQVksQ0FBQyxLQUF3QjtRQUNuQyxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssSUFBSSxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssU0FBUyxFQUFFO1lBQ3ZELEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUM7WUFDL0QsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO1NBQ3ZCO1FBQ0QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ3hDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFRCxjQUFjLENBQUMsTUFBbUIsRUFBRSxNQUFtQjtRQUNyRCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2xELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLEVBQUUsWUFBMkIsQ0FBQyxDQUFDO1FBQzdELElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUN4QyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRUQsa0JBQWtCLENBQUMsTUFBbUI7UUFDcEMsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNsRCxNQUFNLElBQUksR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3JFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUNuQixJQUFJLENBQUMsa0JBQWtCLENBQUMsR0FBRyxFQUFFLFlBQTJCLENBQUMsQ0FDMUQsQ0FBQztRQUNGLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUN4QyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRUQsYUFBYSxDQUFDLE1BQW1CLEVBQUUsWUFBcUI7UUFDdEQsTUFBTSxLQUFLLEdBQUcsSUFBSSxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQy9ELElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxLQUFLLENBQUMsTUFBTSxFQUFFO1lBQ2pDLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7WUFDeEUsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUV4RSxJQUFJLFlBQVksSUFBSSxZQUFZLEVBQUU7Z0JBQ2hDLE1BQU0sV0FBVyxHQUFHLFlBQVksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUN2RCxZQUFZLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDcEMsSUFBSSxXQUFXLEdBQUcsWUFBWSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQ3JELElBQUksQ0FBQyxZQUFZLEVBQUU7b0JBQ2pCLFdBQVcsR0FBRyxXQUFXLEdBQUcsQ0FBQyxDQUFDO2lCQUMvQjtnQkFDRCxZQUFZLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUNsRCxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztnQkFFMUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7YUFDekM7U0FDRjtJQUNILENBQUM7SUFFRCxZQUFZLENBQUMsU0FBcUI7UUFDaEMsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsR0FBRyxLQUFLLFNBQVMsRUFBRSxHQUFHLEVBQUU7WUFDakQsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLElBQUksSUFBSSxFQUFFO2dCQUNqQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQzthQUMvQztZQUNELElBQUksU0FBUyxLQUFLLElBQUksRUFBRTtnQkFDdEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQ25DLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxTQUFTLENBQUM7YUFDbkM7aUJBQU07Z0JBQ0wsSUFDRSxJQUFJLENBQUMsa0JBQWtCLENBQWMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUNwRCxJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUMsQ0FDbkMsRUFDRDtvQkFDQSxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztvQkFDbkMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLFNBQVMsQ0FBQztpQkFDbkM7YUFDRjtTQUNGO0lBQ0gsQ0FBQztJQUVELGFBQWEsQ0FBQyxTQUFxQjtRQUNqQyxJQUNFLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxNQUFNLEtBQUssU0FBUyxFQUFFLE1BQU07WUFDbkQsSUFBSSxDQUFDLGdCQUFnQixFQUFFLEdBQUcsS0FBSyxTQUFTLEVBQUUsR0FBRyxFQUM3QztZQUNBLElBQUksSUFBSSxDQUFDLGdCQUFnQixJQUFJLElBQUksRUFBRTtnQkFDakMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7YUFDaEQ7WUFDRCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQztZQUN2RCxJQUNFLElBQUksQ0FBQyxrQkFBa0IsQ0FBbUIsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDO2dCQUMxRCxHQUFHLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDO2dCQUN2QyxNQUFNLEVBQUUsTUFBTTthQUNmLENBQUMsRUFDRjtnQkFDQSxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztnQkFDcEMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLFNBQVMsQ0FBQztnQkFDbEMsTUFBTSxHQUFHLEdBQUksU0FBUyxFQUFFLEtBQXVCLEVBQUUsR0FBRyxDQUFDO2dCQUNyRCxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxLQUFLLFFBQVEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFO29CQUN2RSxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDO2lCQUM1QjthQUNGO1NBQ0Y7SUFDSCxDQUFDO0lBRUQsWUFBWSxDQUFDLEdBQWdCO1FBQzNCLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzVCLENBQUM7SUFFRCxVQUFVLENBQUMsSUFBbUI7UUFDNUIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVELG1CQUFtQixDQUFDLEdBQWdCO1FBQ2xDLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUM5QyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FDckIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQ2xELENBQUM7U0FDSDthQUFNO1lBQ0wsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7U0FDN0Q7SUFDSCxDQUFDO0lBRUQsV0FBVyxDQUFDLEdBQWdCO1FBQzFCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNuRCxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLEVBQUU7WUFDNUQsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3ZELElBQUksUUFBUSxHQUFHLElBQUksRUFBRTtnQkFDbkIsT0FBTyxRQUFRLENBQUM7YUFDakI7WUFDRCxPQUFPLElBQUksQ0FBQztRQUNkLENBQUMsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNuQyxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLEVBQUU7WUFDNUQsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3ZELElBQUksUUFBUSxHQUFHLElBQUksRUFBRTtnQkFDbkIsT0FBTyxRQUFRLENBQUM7YUFDakI7WUFDRCxPQUFPLElBQUksQ0FBQztRQUNkLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNOLElBQUksS0FBSyxHQUFHLFFBQVEsRUFBRTtZQUNwQixRQUFRLEdBQUcsS0FBSyxDQUFDO1NBQ2xCO1FBQ0QsSUFBSSxLQUFLLEdBQUcsUUFBUSxFQUFFO1lBQ3BCLFFBQVEsR0FBRyxLQUFLLENBQUM7U0FDbEI7UUFDRCxJQUFJLFFBQVEsR0FBRyxLQUFLLElBQUksS0FBSyxHQUFHLFFBQVEsRUFBRTtZQUN4QyxRQUFRLEdBQUcsS0FBSyxDQUFDO1NBQ2xCO1FBQ0QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsUUFBUSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN0RixDQUFDO0lBRUQsU0FBUyxDQUFDLEdBQWdCO1FBQ3hCLElBQUksSUFBSSxDQUFDLFVBQVUsS0FBSyxVQUFVLENBQUMsSUFBSSxFQUFFO1lBQ3ZDLE9BQU87U0FDUjtRQUNELElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzlELENBQUM7SUFFRCxXQUFXLENBQUMsR0FBZ0I7UUFDMUIsSUFBSSxJQUFJLENBQUMsVUFBVSxLQUFLLFVBQVUsQ0FBQyxJQUFJLEVBQUU7WUFDdkMsT0FBTztTQUNSO1FBQ0QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQ3JCLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUNsRCxDQUFDO0lBQ0osQ0FBQztJQUVELFNBQVM7UUFDUCxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDOUIsQ0FBQztJQUVELGVBQWU7UUFDYixJQUNFLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLE1BQU07WUFDL0IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsTUFBTTtZQUNoQyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQzNCLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUNoRCxFQUNEO1lBQ0EsT0FBTyxJQUFJLENBQUM7U0FDYjthQUFNLElBQ0wsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLElBQUksSUFBSTtZQUNoQyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUNyQztZQUNBLE9BQU8sS0FBSyxDQUFDO1NBQ2Q7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxLQUFlO1FBQzlCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM5QixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRUQsY0FBYyxDQUFDLE1BQW1CO1FBQ2hDLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDN0QsQ0FBQztJQUVELFdBQVcsQ0FBQyxHQUFnQjtRQUMxQixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBRUQsV0FBVyxDQUFDLFdBQTZCO1FBQ3ZDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFJRCxRQUFRLENBQUMsU0FBNkM7UUFDcEQsSUFBSSxLQUFpQixDQUFDO1FBQ3RCLElBQUksT0FBTyxTQUFTLENBQUMsR0FBRyxLQUFLLFFBQVEsSUFBSSxPQUFPLFNBQVMsQ0FBQyxNQUFNLEtBQUssUUFBUSxFQUFFO1lBQzdFLEtBQUssR0FBRztnQkFDTixHQUFHLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDO2dCQUNwQyxNQUFNLEVBQUUsU0FBUyxDQUFDLE1BQU0sQ0FBQyxJQUFJO2dCQUM3QixLQUFLLEVBQUUsU0FBUyxDQUFDLEtBQUs7YUFDdkIsQ0FBQztTQUNIO2FBQU07WUFDTCxLQUFLLEdBQUcsU0FBdUIsQ0FBQztTQUNqQztRQUNELElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFFRCxhQUFhLENBQUMsUUFBZ0I7UUFDNUIsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBRUQsV0FBVyxDQUFDLEdBQWdCO1FBQzFCLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFFRCxtQkFBbUIsQ0FBQyxNQUF3QjtRQUMxQyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzFDLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDYixPQUFPLElBQUksQ0FBQztTQUNiO1FBQ0QsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDdEQsSUFBSSxJQUFJLENBQUMsa0JBQWtCLENBQW1CLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUM3RCxHQUFHLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDO1lBQ3JDLE1BQU07U0FDUCxDQUFDLEVBQUU7WUFDRixPQUFPLFFBQVEsQ0FBQztTQUNqQjtRQUNELE9BQU8sSUFBSSxDQUFDLG1CQUFtQixDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUFFRCx1QkFBdUIsQ0FBQyxNQUF3QjtRQUM5QyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzlDLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDYixPQUFPLElBQUksQ0FBQztTQUNiO1FBQ0QsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDdEQsSUFBSSxJQUFJLENBQUMsa0JBQWtCLENBQW1CLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUM3RCxHQUFHLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDO1lBQ3JDLE1BQU07U0FDUCxDQUFDLEVBQUU7WUFDRixPQUFPLFFBQVEsQ0FBQztTQUNqQjtRQUNELE9BQU8sSUFBSSxDQUFDLHVCQUF1QixDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFFRCxXQUFXLENBQUMsTUFBd0I7UUFDbEMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3RDLElBQUksUUFBUSxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFnQixFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxLQUFLLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztRQUNwRixJQUFJLFFBQVEsR0FBRyxNQUFNLEVBQUUsR0FBRyxDQUFDO1FBQzNCLElBQUksUUFBUSxJQUFJLENBQUMsSUFBSSxRQUFRLElBQUksQ0FBQyxFQUFFO1lBQ2xDLElBQUksUUFBUSxLQUFLLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO2dCQUNuQyxRQUFRLEdBQUcsQ0FBQyxDQUFDO2dCQUNiLFFBQVEsR0FBRyxRQUFRLEdBQUcsQ0FBQyxDQUFDO2FBQ3pCO2lCQUFNO2dCQUNMLFFBQVEsR0FBRyxRQUFRLEdBQUcsQ0FBQyxDQUFDO2FBQ3pCO1lBQ0QsT0FBTztnQkFDTCxNQUFNLEVBQUUsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFLElBQUk7Z0JBQy9CLEdBQUcsRUFBRSxRQUFRO2FBQ2QsQ0FBQztTQUNIO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsZUFBZSxDQUFDLE1BQXdCO1FBQ3RDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN0QyxJQUFJLFFBQVEsR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBZ0IsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDcEYsSUFBSSxRQUFRLEdBQUcsTUFBTSxFQUFFLEdBQUcsQ0FBQztRQUMzQixJQUFJLFFBQVEsSUFBSSxDQUFDLElBQUksUUFBUSxJQUFJLENBQUMsRUFBRTtZQUNsQyxJQUFJLFFBQVEsS0FBSyxDQUFDLEVBQUU7Z0JBQ2xCLFFBQVEsR0FBRyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztnQkFDOUIsUUFBUSxHQUFHLFFBQVEsR0FBRyxDQUFDLENBQUM7YUFDekI7aUJBQU07Z0JBQ0wsUUFBUSxHQUFHLFFBQVEsR0FBRyxDQUFDLENBQUM7YUFDekI7WUFDRCxPQUFPO2dCQUNMLE1BQU0sRUFBRSxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUUsSUFBSTtnQkFDL0IsR0FBRyxFQUFFLFFBQVE7YUFDZCxDQUFDO1NBQ0g7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxjQUFjLENBQUMsTUFBd0I7UUFDckMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3RDLElBQUksUUFBUSxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFnQixFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxLQUFLLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztRQUNwRixJQUFJLFFBQVEsR0FBRyxNQUFNLEVBQUUsR0FBRyxDQUFDO1FBQzNCLElBQUksUUFBUSxJQUFJLENBQUMsSUFBSSxRQUFRLElBQUksQ0FBQyxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ25GLE9BQU87Z0JBQ0wsTUFBTSxFQUFFLE9BQU8sQ0FBQyxRQUFRLENBQUMsRUFBRSxJQUFJO2dCQUMvQixHQUFHLEVBQUUsUUFBUSxHQUFHLENBQUM7YUFDbEIsQ0FBQztTQUNIO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsa0JBQWtCLENBQUMsTUFBd0I7UUFDekMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3RDLElBQUksUUFBUSxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFnQixFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxLQUFLLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztRQUNwRixJQUFJLFFBQVEsR0FBRyxNQUFNLEVBQUUsR0FBRyxDQUFDO1FBQzNCLElBQUksUUFBUSxJQUFJLENBQUMsSUFBSSxRQUFRLEdBQUcsQ0FBQyxFQUFFO1lBQ2pDLE9BQU87Z0JBQ0wsTUFBTSxFQUFFLE9BQU8sQ0FBQyxRQUFRLENBQUMsRUFBRSxJQUFJO2dCQUMvQixHQUFHLEVBQUUsUUFBUSxHQUFHLENBQUM7YUFDbEIsQ0FBQztTQUNIO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsZUFBZSxDQUFDLFVBQWtCO1FBQ2hDLE9BQU8sU0FBUyxDQUFDLGFBQWEsQ0FDNUIsSUFBSSxDQUFDLGNBQWMsRUFDbkIsQ0FBQyxZQUFZLEVBQUUsRUFBRSxDQUFDLFVBQVUsS0FBSyxZQUFZLENBQUMsSUFBSSxFQUNsRCxTQUFTLENBQ1YsQ0FBQztJQUNKLENBQUM7SUFFRCxhQUFhLENBQUMsS0FBYTtRQUN6QixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM3QixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRUQsa0JBQWtCLENBQUksUUFBeUM7UUFDN0QsT0FBTyxDQUFDLElBQU8sRUFBRSxFQUFFO1lBQ2pCLElBQUksT0FBTyxRQUFRLEtBQUssU0FBUyxFQUFFO2dCQUNqQyxPQUFPLFFBQVEsQ0FBQzthQUNqQjtpQkFBTSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLEVBQUU7Z0JBQ3BDLE9BQVEsUUFBZ0MsQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUNoRDtZQUNELE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQyxDQUFDO0lBQ0osQ0FBQztJQUVELGlCQUFpQjtRQUNmLE1BQU0sT0FBTyxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FDNUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUNyRCxDQUFDO1FBQ0YsT0FBTyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDckUsQ0FBQztJQUVELGVBQWUsQ0FBQyxNQUF3QjtRQUN0QyxPQUFPLE1BQU0sQ0FBQyxDQUFDLENBQUM7WUFDZCxHQUFHLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDO1lBQ25DLE1BQU0sRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7U0FDNUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQ1gsQ0FBQztJQUVPLGNBQWM7UUFDcEIsT0FBTyxTQUFTLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDLElBQUksQ0FDakUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQzlDLENBQUM7SUFDSixDQUFDO0lBRU8sVUFBVSxDQUNoQixNQUFtQixFQUNuQixPQUFzQjtRQUV0QixNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMxRCxJQUFJLEtBQUssS0FBSyxJQUFJLElBQUksS0FBSyxLQUFLLFNBQVMsRUFBRTtZQUN6QyxPQUFPLE9BQU8sQ0FBQztTQUNoQjtRQUNELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDOUMsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3ZCLElBQUksR0FBRyxDQUFDLE9BQU8sSUFBSSxHQUFHLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRTtnQkFDckMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUNwRCxJQUFJLE1BQU0sS0FBSyxJQUFJLElBQUksTUFBTSxLQUFLLFNBQVMsRUFBRTtvQkFDM0MsT0FBTyxNQUFNLENBQUM7aUJBQ2Y7YUFDRjtTQUNGO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRU8sZUFBZSxDQUFDLE9BQW9CO1FBQzFDLE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRU8sVUFBVSxDQUFDLEdBQVE7UUFDekIsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxFQUFFLFdBQVcsSUFBSSxHQUFHLEVBQUUsSUFBSSxJQUFJLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNoRSxDQUFDO0lBRU8sa0JBQWtCLENBQUMsTUFBbUIsRUFBRSxLQUFrQjtRQUNoRSxNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsZ0JBQWdCLENBQ2xDLHlCQUF5QixNQUFNLENBQUMsSUFBSSxjQUFjLENBQ25ELENBQUM7UUFDRixJQUFJLFFBQVEsR0FBRyxDQUFDLENBQUM7UUFDakIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1lBQ3JCLElBQUksSUFBSSxDQUFDLFdBQVcsR0FBRyxRQUFRLEVBQUU7Z0JBQy9CLFFBQVEsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO2FBQzdCO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDSCxNQUFNLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztRQUNoQixNQUFNLENBQUMsS0FBSyxHQUFHLFFBQVEsR0FBRyxFQUFFLENBQUM7SUFDL0IsQ0FBQztJQUVPLFVBQVUsQ0FBQyxLQUFpQjtRQUNsQyxJQUFJLENBQUMsUUFBUSxDQUFDO1lBQ1osR0FBRyxLQUFLO1lBQ1IsS0FBSyxFQUFFLElBQUk7U0FDWixDQUFDLENBQUM7SUFDTCxDQUFDOzt5R0FudEJVLFlBQVk7NkdBQVosWUFBWSxjQUZYLE1BQU07MkZBRVAsWUFBWTtrQkFIeEIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtUYWJsZVJvd30gZnJvbSAnLi4vY29udHJhY3QvdGFibGUtcm93JztcbmltcG9ydCB7SUNlbGxDb29yZGluYXRlc30gZnJvbSAnLi4vY29udHJhY3QvaS1jZWxsLWNvb3JkaW5hdGVzJztcbmltcG9ydCB7VGFibGVDb2x1bW59IGZyb20gJy4uL2NvbnRyYWN0L3RhYmxlLWNvbHVtbic7XG5pbXBvcnQge0ZpbHRlclN0YXRlfSBmcm9tICcuLi8uLi9maWx0ZXIvY29udGFyY3QvZmlsdGVyLXN0YXRlJztcbmltcG9ydCB7QmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlLCBTdWJqZWN0fSBmcm9tICdyeGpzJztcbmltcG9ydCB7Q29sdW1uUmVzaXplRXZlbnR9IGZyb20gJy4uL2NvbnRyYWN0L2NvbHVtbi1yZXNpemUtZXZlbnQnO1xuaW1wb3J0IHtDb2x1bW5SZW9yZGVyRXZlbnR9IGZyb20gJy4uL2NvbnRyYWN0L2NvbHVtbi1yZW9yZGVyLWV2ZW50JztcbmltcG9ydCB7U29ydEV2ZW50fSBmcm9tICcuLi9jb250cmFjdC9zb3J0LWV2ZW50JztcbmltcG9ydCB7QXJyYXlVdGlsfSBmcm9tICcuLi8uLi8uLi9jb21tb24vdXRpbC9hcnJheS11dGlsJztcbmltcG9ydCB7U3RhdGVVdGlsfSBmcm9tICcuLi91dGlsL3N0YXRlLXV0aWwnO1xuaW1wb3J0IHtTZWxlY3RUeXBlfSBmcm9tICcuLi9lbnVtL3NlbGVjdC10eXBlLmVudW0nO1xuaW1wb3J0IHtFZGl0VHlwZX0gZnJvbSAnLi4vZW51bS9lZGl0LXR5cGUuZW51bSc7XG5pbXBvcnQge0VkaXRFdmVudH0gZnJvbSAnLi4vZW51bS9lZGl0LWV2ZW50LmVudW0nO1xuaW1wb3J0IHtMaXN0RmlsdGVyVHlwZX0gZnJvbSAnLi4vLi4vZmlsdGVyL2VudW0vbGlzdC1maWx0ZXItdHlwZS5lbnVtJztcbmltcG9ydCB7TGlzdEZpbHRlcn0gZnJvbSAnLi4vLi4vZmlsdGVyL2NvbnRhcmN0L2xpc3QtZmlsdGVyJztcbmltcG9ydCB7RmlsdGVyVHlwZX0gZnJvbSAnLi4vLi4vZmlsdGVyL2VudW0vZmlsdGVyLXR5cGUuZW51bSc7XG5pbXBvcnQge051bWVyaWNGaWx0ZXJWYWx1ZX0gZnJvbSAnLi4vLi4vZmlsdGVyL2NvbnRhcmN0L251bWVyaWMtZmlsdGVyLXZhbHVlJztcbmltcG9ydCB7TnVtZXJpY0ZpbHRlcn0gZnJvbSAnLi4vLi4vZmlsdGVyL2NvbnRhcmN0L251bWVyaWMtZmlsdGVyJztcbmltcG9ydCB7U3RyaW5nRmlsdGVyfSBmcm9tICcuLi8uLi9maWx0ZXIvY29udGFyY3Qvc3RyaW5nLWZpbHRlcic7XG5pbXBvcnQge0RhdGVGaWx0ZXJWYWx1ZX0gZnJvbSAnLi4vLi4vZmlsdGVyL2NvbnRhcmN0L2RhdGUtZmlsdGVyLXZhbHVlJztcbmltcG9ydCB7RGF0ZUZpbHRlcn0gZnJvbSAnLi4vLi4vZmlsdGVyL2NvbnRhcmN0L2RhdGUtZmlsdGVyJztcbmltcG9ydCB7SURpY3Rpb25hcnl9IGZyb20gJy4uLy4uLy4uL2NvbW1vbi9jb250cmFjdC9pLWRpY3Rpb25hcnknO1xuaW1wb3J0IHtJSWROYW1lfSBmcm9tICcuLi8uLi8uLi9jb21tb24vY29udHJhY3QvaS1pZC1uYW1lJztcbmltcG9ydCB7RGF0ZVV0aWx9IGZyb20gJy4uLy4uLy4uL3V0aWwvZGF0ZS11dGlsJztcbmltcG9ydCBvYmplY3RIYXNoIGZyb20gJ29iamVjdC1oYXNoJztcbmltcG9ydCB7VGFibGVDb2x1bW5TdG9yZX0gZnJvbSAnLi4vY29udHJhY3QvdGFibGUtY29sdW1uLXN0b3JlJztcbmltcG9ydCB7SUNlbGxWYWx1ZX0gZnJvbSAnLi4vY29udHJhY3QvaS1jZWxsLXZhbHVlJztcbmltcG9ydCB7SUNlbGxFdmVudH0gZnJvbSAnLi4vY29udHJhY3QvaS1jZWxsLWV2ZW50JztcbmltcG9ydCB7SUNlbGxJbnN0YW5jZSwgSUNlbGxJbnN0YW5jZVZhbHVlfSBmcm9tICcuLi9jb250cmFjdC9pLWNlbGwtaW5zdGFuY2UnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgVGFibGVTZXJ2aWNlPFQ+IHtcbiAgY29sdW1uczogT2JzZXJ2YWJsZTxUYWJsZUNvbHVtbltdPjtcbiAgZGlzcGxheURhdGE6IE9ic2VydmFibGU8VGFibGVSb3c8VD5bXT47XG4gIGRpY3Q6IE9ic2VydmFibGU8SURpY3Rpb25hcnk8SUlkTmFtZTxhbnk+W10+PjtcbiAgZmlsdGVyT3B0aW9uczogT2JzZXJ2YWJsZTxJRGljdGlvbmFyeTxJSWROYW1lPGFueT5bXT4+O1xuICBzdGF0ZTogT2JzZXJ2YWJsZTxGaWx0ZXJTdGF0ZT47XG4gIHNlbGVjdFR5cGU6IFNlbGVjdFR5cGUgPSBTZWxlY3RUeXBlLm1vdXNlO1xuICBlZGl0Um93U3RhcnQ6IE9ic2VydmFibGU8SUNlbGxFdmVudD47XG4gIGVkaXRSb3dTdG9wOiBPYnNlcnZhYmxlPElDZWxsQ29vcmRpbmF0ZXM+O1xuICBlZGl0Q2VsbFN0YXJ0OiBPYnNlcnZhYmxlPElDZWxsRXZlbnQ+O1xuICBlZGl0Q2VsbFN0b3A6IE9ic2VydmFibGU8SUNlbGxDb29yZGluYXRlcz47XG4gIHZhbHVlQ2hhbmdlZDogT2JzZXJ2YWJsZTxJQ2VsbENvb3JkaW5hdGVzPjtcbiAgdmFsdWVTZXQ6IE9ic2VydmFibGU8SUNlbGxWYWx1ZT47XG4gIHN0YXRlQ2hhbmdlZDogT2JzZXJ2YWJsZTxGaWx0ZXJTdGF0ZT47XG4gIGZpbHRlckNsZWFyOiBPYnNlcnZhYmxlPFRhYmxlQ29sdW1uPjtcbiAgZ3JvdXBUb2dnbGU6IE9ic2VydmFibGU8VGFibGVSb3c8VD4+O1xuICBzZWxlY3RlZFJvd3M6IE9ic2VydmFibGU8VGFibGVSb3c8VD5bXT47XG4gIGFjdGl2ZVJvdzogT2JzZXJ2YWJsZTxUYWJsZVJvdzxUPj47XG4gIGhpZGRlbkNvbHVtbnM6IE9ic2VydmFibGU8c3RyaW5nW10+O1xuICBzY3JvbGxJbmRleDogT2JzZXJ2YWJsZTxudW1iZXI+O1xuXG4gIGVkaXRUeXBlOiBFZGl0VHlwZSA9IEVkaXRUeXBlLmNlbGw7XG4gIGVkaXRFdmVudDogRWRpdEV2ZW50ID0gRWRpdEV2ZW50LmRvdWJsZUNsaWNrO1xuICByb3dFZGl0YWJsZTogYm9vbGVhbiB8ICgocm93OiBUYWJsZVJvdzxUPikgPT4gYm9vbGVhbik7XG4gIHRyYWNrUm93OiAoaW5kZXg6IG51bWJlciwgcm93OiBUYWJsZVJvdzxUPikgPT4gYW55ID0gKGluZGV4OiBudW1iZXIsIHJvdzogVGFibGVSb3c8VD4pID0+IGluZGV4O1xuXG4gIGdldCBkcmFnU291cmNlKCkge1xuICAgIHJldHVybiB0aGlzLl9kcmFnU291cmNlO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0aWFsQ29sdW1uc0hhc2g6IHN0cmluZztcbiAgcHJpdmF0ZSBpbml0aWFsQ29sdW1uczogVGFibGVDb2x1bW5bXSA9IFtdO1xuICBwcml2YXRlIGRpc3BsYXlDb2x1bW5zOiBUYWJsZUNvbHVtbltdID0gW107XG4gIHByaXZhdGUgX2NvbHVtbnM6IEJlaGF2aW9yU3ViamVjdDxUYWJsZUNvbHVtbltdPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8VGFibGVDb2x1bW5bXT4oW10pO1xuICBwcml2YXRlIF9oaWRkZW5Db2x1bW5zID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmdbXT4oW10pO1xuICBwcml2YXRlIF9kaXNwbGF5RGF0YTogQmVoYXZpb3JTdWJqZWN0PFRhYmxlUm93PFQ+W10+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxUYWJsZVJvdzxUPltdPihbXSk7XG4gIHByaXZhdGUgX2RpY3Q6IEJlaGF2aW9yU3ViamVjdDxJRGljdGlvbmFyeTxJSWROYW1lPGFueT5bXT4+ID1cbiAgICBuZXcgQmVoYXZpb3JTdWJqZWN0PElEaWN0aW9uYXJ5PElJZE5hbWU8YW55PltdPj4oe30pO1xuICBwcml2YXRlIF9maWx0ZXJPcHRpb25zOiBCZWhhdmlvclN1YmplY3Q8SURpY3Rpb25hcnk8SUlkTmFtZTxhbnk+W10+PiA9XG4gICAgbmV3IEJlaGF2aW9yU3ViamVjdDxJRGljdGlvbmFyeTxJSWROYW1lPGFueT5bXT4+KHt9KTtcbiAgcHJpdmF0ZSBfc3RhdGU6IEJlaGF2aW9yU3ViamVjdDxGaWx0ZXJTdGF0ZT4gPVxuICAgIG5ldyBCZWhhdmlvclN1YmplY3Q8RmlsdGVyU3RhdGU+KG5ldyBGaWx0ZXJTdGF0ZSgpKTtcbiAgcHJpdmF0ZSBfY29va2llTmFtZTogc3RyaW5nO1xuICBwcml2YXRlIF9oaWRkZW5Db29raWVOYW1lOiBzdHJpbmc7XG4gIHByaXZhdGUgX2NvbHVtbnNDb29raWVOYW1lOiBzdHJpbmc7XG4gIHByaXZhdGUgX2VkaXRSb3dTdGFydCA9IG5ldyBTdWJqZWN0PElDZWxsRXZlbnQgfCBudWxsPigpO1xuICBwcml2YXRlIF9lZGl0Um93U3RvcCA9IG5ldyBTdWJqZWN0PElDZWxsQ29vcmRpbmF0ZXMgfCBudWxsPigpO1xuICBwcml2YXRlIF9lZGl0Q2VsbFN0YXJ0ID0gbmV3IFN1YmplY3Q8SUNlbGxFdmVudCB8IG51bGw+KCk7XG4gIHByaXZhdGUgX2VkaXRDZWxsU3RvcCA9IG5ldyBTdWJqZWN0PElDZWxsQ29vcmRpbmF0ZXMgfCBudWxsPigpO1xuICBwcml2YXRlIF92YWx1ZUNoYW5nZWQgPSBuZXcgU3ViamVjdDxJQ2VsbENvb3JkaW5hdGVzIHwgbnVsbD4oKTtcbiAgcHJpdmF0ZSBfdmFsdWVTZXQgPSBuZXcgU3ViamVjdDxJQ2VsbFZhbHVlPigpO1xuICBwcml2YXRlIF9zdGF0ZUNoYW5nZWQgPSBuZXcgU3ViamVjdDxGaWx0ZXJTdGF0ZT4oKTtcbiAgcHJpdmF0ZSBfZmlsdGVyQ2xlYXIgPSBuZXcgU3ViamVjdDxUYWJsZUNvbHVtbj4oKTtcbiAgcHJpdmF0ZSBfZHJhZ1NvdXJjZTogVGFibGVDb2x1bW47XG4gIHByaXZhdGUgX2dyb3VwVG9nZ2xlID0gbmV3IFN1YmplY3Q8VGFibGVSb3c8VD4+KCk7XG4gIHByaXZhdGUgX3NlbGVjdGVkUm93cyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8VGFibGVSb3c8VD5bXT4oW10pO1xuICBwcml2YXRlIF9hY3RpdmVSb3cgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFRhYmxlUm93PFQ+PihudWxsKTtcbiAgcHJpdmF0ZSBfc2Nyb2xsSW5kZXggPSBuZXcgU3ViamVjdDxudW1iZXI+KCk7XG5cbiAgcHJpdmF0ZSBfY3VycmVudEVkaXRDZWxsOiBJQ2VsbENvb3JkaW5hdGVzO1xuXG4gIGdldCBjdXJyZW50RWRpdENlbGwoKTogSUNlbGxDb29yZGluYXRlcyB7XG4gICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRFZGl0Q2VsbDtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuY29sdW1ucyA9IHRoaXMuX2NvbHVtbnMuYXNPYnNlcnZhYmxlKCk7XG4gICAgdGhpcy5kaXNwbGF5RGF0YSA9IHRoaXMuX2Rpc3BsYXlEYXRhLmFzT2JzZXJ2YWJsZSgpO1xuICAgIHRoaXMuZGljdCA9IHRoaXMuX2RpY3QuYXNPYnNlcnZhYmxlKCk7XG4gICAgdGhpcy5maWx0ZXJPcHRpb25zID0gdGhpcy5fZmlsdGVyT3B0aW9ucy5hc09ic2VydmFibGUoKTtcbiAgICB0aGlzLnN0YXRlID0gdGhpcy5fc3RhdGUuYXNPYnNlcnZhYmxlKCk7XG4gICAgdGhpcy5lZGl0Um93U3RhcnQgPSB0aGlzLl9lZGl0Um93U3RhcnQuYXNPYnNlcnZhYmxlKCk7XG4gICAgdGhpcy5lZGl0Um93U3RvcCA9IHRoaXMuX2VkaXRSb3dTdG9wLmFzT2JzZXJ2YWJsZSgpO1xuICAgIHRoaXMuZWRpdENlbGxTdGFydCA9IHRoaXMuX2VkaXRDZWxsU3RhcnQuYXNPYnNlcnZhYmxlKCk7XG4gICAgdGhpcy5lZGl0Q2VsbFN0b3AgPSB0aGlzLl9lZGl0Q2VsbFN0b3AuYXNPYnNlcnZhYmxlKCk7XG4gICAgdGhpcy52YWx1ZUNoYW5nZWQgPSB0aGlzLl92YWx1ZUNoYW5nZWQuYXNPYnNlcnZhYmxlKCk7XG4gICAgdGhpcy52YWx1ZVNldCA9IHRoaXMuX3ZhbHVlU2V0LmFzT2JzZXJ2YWJsZSgpO1xuICAgIHRoaXMuc3RhdGVDaGFuZ2VkID0gdGhpcy5fc3RhdGVDaGFuZ2VkLmFzT2JzZXJ2YWJsZSgpO1xuICAgIHRoaXMuZmlsdGVyQ2xlYXIgPSB0aGlzLl9maWx0ZXJDbGVhci5hc09ic2VydmFibGUoKTtcbiAgICB0aGlzLmdyb3VwVG9nZ2xlID0gdGhpcy5fZ3JvdXBUb2dnbGUuYXNPYnNlcnZhYmxlKCk7XG4gICAgdGhpcy5zZWxlY3RlZFJvd3MgPSB0aGlzLl9zZWxlY3RlZFJvd3MuYXNPYnNlcnZhYmxlKCk7XG4gICAgdGhpcy5hY3RpdmVSb3cgPSB0aGlzLl9hY3RpdmVSb3cuYXNPYnNlcnZhYmxlKCk7XG4gICAgdGhpcy5oaWRkZW5Db2x1bW5zID0gdGhpcy5faGlkZGVuQ29sdW1ucy5hc09ic2VydmFibGUoKTtcbiAgICB0aGlzLnNjcm9sbEluZGV4ID0gdGhpcy5fc2Nyb2xsSW5kZXguYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBzZXREYXRhKGRhdGE6IFRbXSk6IHZvaWQge1xuICAgIHRoaXMuX2Rpc3BsYXlEYXRhLm5leHQoZGF0YT8ubWFwKChfKSA9PiBuZXcgVGFibGVSb3c8VD4oXykpKTtcbiAgfVxuXG4gIHNldERpY3QoZGljdDogSURpY3Rpb25hcnk8SUlkTmFtZTxhbnk+W10+KTogdm9pZCB7XG4gICAgdGhpcy5fZGljdC5uZXh0KGRpY3QpO1xuICB9XG5cbiAgc2V0RmlsdGVyT3B0aW9ucyhmaWx0ZXJPcHRpb25zOiBJRGljdGlvbmFyeTxJSWROYW1lPGFueT5bXT4pOiB2b2lkIHtcbiAgICB0aGlzLl9maWx0ZXJPcHRpb25zLm5leHQoZmlsdGVyT3B0aW9ucyk7XG4gIH1cblxuICBzZXRDb2x1bW5zKGNvbHVtbnM6IFRhYmxlQ29sdW1uW10pOiB2b2lkIHtcbiAgICB0aGlzLmluaXRpYWxDb2x1bW5zID0gY29sdW1ucyA/IGNvbHVtbnMubWFwKChfKSA9PiBuZXcgVGFibGVDb2x1bW4oXykpIDogW107XG4gICAgdGhpcy5pbml0aWFsQ29sdW1uc0hhc2ggPSBvYmplY3RIYXNoKHRoaXMuaW5pdGlhbENvbHVtbnMsIHtcbiAgICAgIGFsZ29yaXRobTogJ3NoYTEnLFxuICAgICAgaWdub3JlVW5rbm93bjogdHJ1ZSxcbiAgICAgIGV4Y2x1ZGVLZXlzOiBrZXkgPT4ga2V5ID09PSAnaGVhZERyb3Bkb3duVGVtcGxhdGUnLFxuICAgIH0pO1xuICAgIGNvbnN0IHJlc3RvcmVkID0gdGhpcy5yZXN0b3JlQ29sdW1ucygpO1xuXG4gICAgaWYgKHJlc3RvcmVkKSB7XG4gICAgICB0aGlzLnNldERpc3BsYXlDb2x1bW5zKHJlc3RvcmVkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZXREaXNwbGF5Q29sdW1ucyh0aGlzLmluaXRpYWxDb2x1bW5zKTtcbiAgICB9XG4gIH1cblxuICByZXN0b3JlRGVmYXVsdENvbHVtbnMoKSB7XG4gICAgdGhpcy5zZXREaXNwbGF5Q29sdW1ucyh0aGlzLmluaXRpYWxDb2x1bW5zKTtcbiAgICB0aGlzLmNsZWFyQ29sdW1uc1N0YXRlKCk7XG4gIH1cblxuICB1cGRhdGVDb2x1bW5zKGNvbHVtbnM6IFRhYmxlQ29sdW1uW10pOiB2b2lkIHtcbiAgICB0aGlzLnNldERpc3BsYXlDb2x1bW5zKGNvbHVtbnMpO1xuICAgIHRoaXMuc2F2ZUNvbHVtbnNTdGF0ZSgpO1xuICB9XG5cbiAgc2F2ZUNvbHVtbnNTdGF0ZSgpIHtcbiAgICBpZiAodGhpcy5fY29va2llTmFtZSkge1xuICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oXG4gICAgICAgIHRoaXMuX2NvbHVtbnNDb29raWVOYW1lLFxuICAgICAgICBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgaGFzaDogdGhpcy5pbml0aWFsQ29sdW1uc0hhc2gsXG4gICAgICAgICAgY29sdW1uczogdGhpcy5kaXNwbGF5Q29sdW1ucy5tYXAoKF8pID0+IG5ldyBUYWJsZUNvbHVtblN0b3JlKF8pKSxcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgY2xlYXJDb2x1bW5zU3RhdGUoKSB7XG4gICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0odGhpcy5fY29sdW1uc0Nvb2tpZU5hbWUpO1xuICB9XG5cbiAgc2V0RGlzcGxheUNvbHVtbnMoY29sdW1uczogVGFibGVDb2x1bW5bXSk6IHZvaWQge1xuICAgIHRoaXMuZGlzcGxheUNvbHVtbnMgPSBjb2x1bW5zID8gY29sdW1ucy5tYXAoKF8pID0+IG5ldyBUYWJsZUNvbHVtbihfKSkgOiBbXTtcbiAgICB0aGlzLl9jb2x1bW5zLm5leHQodGhpcy5kaXNwbGF5Q29sdW1ucyk7XG4gIH1cblxuICByZXN0b3JlQ29sdW1ucygpIHtcbiAgICBjb25zdCBzYXZlZENvbHVtbnMgPSBKU09OLnBhcnNlKFxuICAgICAgbG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5fY29sdW1uc0Nvb2tpZU5hbWUpXG4gICAgKTtcbiAgICBpZiAoc2F2ZWRDb2x1bW5zICYmIHNhdmVkQ29sdW1ucy5oYXNoID09PSB0aGlzLmluaXRpYWxDb2x1bW5zSGFzaCkge1xuICAgICAgcmV0dXJuIHRoaXMucmVzdG9yZUNvbHVtbnNTdGF0ZShzYXZlZENvbHVtbnMuY29sdW1ucyk7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmVzdG9yZUNvbHVtbnNTdGF0ZShjb2x1bW5zOiBUYWJsZUNvbHVtblN0b3JlW10pIHtcbiAgICByZXR1cm4gY29sdW1ucy5tYXAoKGNvbHVtbjogVGFibGVDb2x1bW5TdG9yZSkgPT4ge1xuICAgICAgY29uc3QgZm91bmQgPSBBcnJheVV0aWwuZmluZFJlY3Vyc2l2ZShcbiAgICAgICAgdGhpcy5pbml0aWFsQ29sdW1ucyxcbiAgICAgICAgKGl0ZW0pID0+IGl0ZW0ubmFtZSA9PT0gY29sdW1uLm5hbWUsXG4gICAgICAgICdjb2x1bW5zJ1xuICAgICAgKTtcbiAgICAgIGNvbnN0IHJlc3VsdENvbHVtbiA9IG5ldyBUYWJsZUNvbHVtbihmb3VuZCk7XG4gICAgICByZXN1bHRDb2x1bW4ud2lkdGggPSBjb2x1bW4ud2lkdGg7XG4gICAgICByZXN1bHRDb2x1bW4uZmxleCA9IGNvbHVtbi5mbGV4O1xuICAgICAgcmVzdWx0Q29sdW1uLmxvY2tlZCA9IGNvbHVtbi5sb2NrZWQ7XG4gICAgICBpZiAoY29sdW1uLmNvbHVtbnM/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgcmVzdWx0Q29sdW1uLmNvbHVtbnMgPSB0aGlzLnJlc3RvcmVDb2x1bW5zU3RhdGUoY29sdW1uLmNvbHVtbnMpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdENvbHVtbjtcbiAgICB9KTtcbiAgfVxuXG4gIHNldFN0YXRlKHN0YXRlOiBGaWx0ZXJTdGF0ZSk6IHZvaWQge1xuICAgIHN0YXRlLnNhdmUodGhpcy5fY29va2llTmFtZSk7XG4gICAgdGhpcy5fc3RhdGUubmV4dChzdGF0ZSk7XG4gIH1cblxuICBzZXRDb29raWVOYW1lKG5hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuX2Nvb2tpZU5hbWUgPSBuYW1lO1xuICAgIHRoaXMuX2hpZGRlbkNvb2tpZU5hbWUgPSBgJHt0aGlzLl9jb29raWVOYW1lfV9oaWRkZW5fY29sdW1uc2A7XG4gICAgdGhpcy5fY29sdW1uc0Nvb2tpZU5hbWUgPSBgJHt0aGlzLl9jb29raWVOYW1lfV9jb2x1bW5zYDtcbiAgfVxuXG4gIHJlc3RvcmVTdGF0ZSgpOiB2b2lkIHtcbiAgICBsZXQgc3RhdGU6IEZpbHRlclN0YXRlO1xuICAgIGlmICh0aGlzLl9jb29raWVOYW1lPy5sZW5ndGggPiAwICYmIEZpbHRlclN0YXRlLnJlc3RvcmUodGhpcy5fY29va2llTmFtZSkpIHtcbiAgICAgIGxldCBuZXdTdGF0ZSA9IE9iamVjdC5hc3NpZ24oXG4gICAgICAgIHRoaXMuX3N0YXRlLnZhbHVlLFxuICAgICAgICBGaWx0ZXJTdGF0ZS5yZXN0b3JlKHRoaXMuX2Nvb2tpZU5hbWUpXG4gICAgICApO1xuICAgICAgbmV3U3RhdGUgPSBEYXRlVXRpbC5jb252ZXJ0RGF0ZVN0cmluZ3NUb0RhdGVzKG5ld1N0YXRlKTtcbiAgICAgIHN0YXRlID0gbmV3IEZpbHRlclN0YXRlKG5ld1N0YXRlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RhdGUgPSBuZXcgRmlsdGVyU3RhdGUoKTtcbiAgICB9XG4gICAgdGhpcy5zZXRTdGF0ZShzdGF0ZSk7XG4gIH1cblxuICBzYXZlSGlkZGVuQ29sdW1ucyhoaWRkZW5Db2x1bW5zOiBzdHJpbmdbXSk6IHZvaWQge1xuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKHRoaXMuX2hpZGRlbkNvb2tpZU5hbWUsIEpTT04uc3RyaW5naWZ5KGhpZGRlbkNvbHVtbnMpKTtcbiAgfVxuXG4gIHJlc3RvcmVIaWRkZW5Db2x1bW5zKCk6IHZvaWQge1xuICAgIGNvbnN0IGhpZGRlbkNvbHVtbnMgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLl9oaWRkZW5Db29raWVOYW1lKSB8fCAnW10nO1xuICAgIHRoaXMuX2hpZGRlbkNvbHVtbnMubmV4dChKU09OLnBhcnNlKGhpZGRlbkNvbHVtbnMpKTtcbiAgfVxuXG4gIHNvcnRBc2Moc29ydEV2ZW50OiBTb3J0RXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoc29ydEV2ZW50LmNvbHVtbi5zb3J0YWJsZSkge1xuICAgICAgdGhpcy5zZXRTdGF0ZShTdGF0ZVV0aWwuc29ydEFzYyhzb3J0RXZlbnQsIHRoaXMuX3N0YXRlLnZhbHVlKSk7XG4gICAgfVxuICB9XG5cbiAgc29ydERlc2Moc29ydEV2ZW50OiBTb3J0RXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoc29ydEV2ZW50LmNvbHVtbi5zb3J0YWJsZSkge1xuICAgICAgdGhpcy5zZXRTdGF0ZShTdGF0ZVV0aWwuc29ydERlc2Moc29ydEV2ZW50LCB0aGlzLl9zdGF0ZS52YWx1ZSkpO1xuICAgIH1cbiAgfVxuXG4gIGNsZWFyU29ydChjb2x1bW46IFRhYmxlQ29sdW1uKTogdm9pZCB7XG4gICAgdGhpcy5zZXRTdGF0ZShTdGF0ZVV0aWwuY2xlYXJTb3J0KGNvbHVtbiwgdGhpcy5fc3RhdGUudmFsdWUpKTtcbiAgfVxuXG4gIGNsZWFyQWxsU29ydCgpOiB2b2lkIHtcbiAgICB0aGlzLnNldFN0YXRlKFN0YXRlVXRpbC5jbGVhckFsbFNvcnQodGhpcy5fc3RhdGUudmFsdWUpKTtcbiAgfVxuXG4gIGNsZWFyRmlsdGVyKGNvbHVtbjogVGFibGVDb2x1bW4pIHtcbiAgICBjb25zdCBzdGF0ZSA9IHRoaXMuX3N0YXRlLnZhbHVlO1xuICAgIGlmIChjb2x1bW4gIT09IG51bGwgJiYgY29sdW1uICE9PSB1bmRlZmluZWQgJiYgY29sdW1uLmZpbHRlcmFibGUpIHtcbiAgICAgIHN3aXRjaCAoY29sdW1uLmZpbHRlclR5cGUpIHtcbiAgICAgICAgY2FzZSBGaWx0ZXJUeXBlLmRhdGU6XG4gICAgICAgICAgc3RhdGUuYWRkRGF0ZUZpbHRlcihcbiAgICAgICAgICAgIG5ldyBEYXRlRmlsdGVyKHtcbiAgICAgICAgICAgICAgbmFtZTogY29sdW1uLm5hbWUsXG4gICAgICAgICAgICAgIGZpZWxkOiBjb2x1bW4uZmlsdGVyRmllbGQsXG4gICAgICAgICAgICAgIHZhbHVlOiBuZXcgRGF0ZUZpbHRlclZhbHVlKCksXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgRmlsdGVyVHlwZS5zdHJpbmc6XG4gICAgICAgICAgc3RhdGUuYWRkU3RyaW5nRmlsdGVyKFxuICAgICAgICAgICAgbmV3IFN0cmluZ0ZpbHRlcih7XG4gICAgICAgICAgICAgIG5hbWU6IGNvbHVtbi5uYW1lLFxuICAgICAgICAgICAgICBmaWVsZDogY29sdW1uLmZpbHRlckZpZWxkLFxuICAgICAgICAgICAgICB2YWx1ZTogJycsXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgRmlsdGVyVHlwZS5udW1iZXI6XG4gICAgICAgICAgc3RhdGUuYWRkTnVtZXJpY0ZpbHRlcihcbiAgICAgICAgICAgIG5ldyBOdW1lcmljRmlsdGVyKHtcbiAgICAgICAgICAgICAgbmFtZTogY29sdW1uLm5hbWUsXG4gICAgICAgICAgICAgIGZpZWxkOiBjb2x1bW4uZmlsdGVyRmllbGQsXG4gICAgICAgICAgICAgIHZhbHVlOiBuZXcgTnVtZXJpY0ZpbHRlclZhbHVlKCksXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgRmlsdGVyVHlwZS5saXN0OlxuICAgICAgICAgIHN0YXRlLmFkZExpc3RGaWx0ZXIoXG4gICAgICAgICAgICBuZXcgTGlzdEZpbHRlcih7XG4gICAgICAgICAgICAgIG5hbWU6IGNvbHVtbi5uYW1lLFxuICAgICAgICAgICAgICBmaWVsZDogY29sdW1uLmZpbHRlckZpZWxkLFxuICAgICAgICAgICAgICB2YWx1ZTogW10sXG4gICAgICAgICAgICAgIHR5cGU6IExpc3RGaWx0ZXJUeXBlLk5vbmUsXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICB0aGlzLnNldFN0YXRlKG5ldyBGaWx0ZXJTdGF0ZShzdGF0ZSkpO1xuICAgIH1cbiAgfVxuXG4gIGNsZWFyQWxsRmlsdGVycygpIHtcbiAgICBjb25zdCBzdGF0ZSA9IHRoaXMuX3N0YXRlLnZhbHVlO1xuICAgIHN0YXRlLnN0cmluZ0ZpbHRlcnMgPSBbXTtcbiAgICBzdGF0ZS5saXN0RmlsdGVycyA9IFtdO1xuICAgIHN0YXRlLm51bWVyaWNGaWx0ZXJzID0gW107XG4gICAgc3RhdGUuZGF0ZUZpbHRlcnMgPSBbXTtcbiAgICB0aGlzLnNldFN0YXRlKG5ldyBGaWx0ZXJTdGF0ZShzdGF0ZSkpO1xuICB9XG5cbiAgcGluQ29sdW1uKGNvbHVtbjogVGFibGVDb2x1bW4pOiB2b2lkIHtcbiAgICB0aGlzLmRpc3BsYXlDb2x1bW5zLmZvckVhY2goKGNvbDogVGFibGVDb2x1bW4pID0+IHtcbiAgICAgIGlmIChjb2wubmFtZSA9PT0gY29sdW1uLm5hbWUpIHtcbiAgICAgICAgY29sLmxvY2tlZCA9ICFjb2wubG9ja2VkO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMudXBkYXRlQ29sdW1ucyh0aGlzLmRpc3BsYXlDb2x1bW5zKTtcbiAgfVxuXG4gIGRyYWdTdGFydChjb2x1bW46IFRhYmxlQ29sdW1uKTogdm9pZCB7XG4gICAgdGhpcy5fZHJhZ1NvdXJjZSA9IGNvbHVtbjtcbiAgfVxuXG4gIGxvY2tQcmV2aW91c0NvbHVtbnMoY29sdW1uOiBUYWJsZUNvbHVtbiwgZWxlbWVudDogSFRNTEVsZW1lbnQpIHtcbiAgICBjb25zdCBmbGF0ID0gQXJyYXlVdGlsLmZsYXR0ZW4odGhpcy5kaXNwbGF5Q29sdW1ucywgJ2NvbHVtbnMnLCB0cnVlKS5zb3J0KFxuICAgICAgKGEsIGIpID0+IE51bWJlcihiLmxvY2tlZCkgLSBOdW1iZXIoYS5sb2NrZWQpXG4gICAgKTtcbiAgICBjb25zdCBpbmRleCA9IGZsYXQuaW5kZXhPZihjb2x1bW4pO1xuICAgIGNvbnN0IHByZXZpb3VzID0gZmxhdC5zbGljZSgwLCBpbmRleCkuZmlsdGVyKChfKSA9PiBfLmZsZXggPiAwKTtcbiAgICBpZiAocHJldmlvdXM/Lmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IHRhYmxlRWxlbWVudCA9IHRoaXMuZ2V0VGFibGVFbGVtZW50KGVsZW1lbnQpO1xuICAgICAgcHJldmlvdXMuZm9yRWFjaCgoaXRlbTogVGFibGVDb2x1bW4pID0+IHtcbiAgICAgICAgY29uc3QgaXRlbUNvbCA9IHRhYmxlRWxlbWVudC5xdWVyeVNlbGVjdG9yKFxuICAgICAgICAgIGB0ZXRhLWhlYWQtY2VsbFtkYXRhLWNvbHVtbj0ke2l0ZW0ubmFtZX1dYFxuICAgICAgICApIGFzIEhUTUxFbGVtZW50O1xuICAgICAgICBpZiAoaXRlbUNvbCkge1xuICAgICAgICAgIGl0ZW0uZmxleCA9IDA7XG4gICAgICAgICAgaXRlbS53aWR0aCA9IGl0ZW1Db2wuY2xpZW50V2lkdGg7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHJlc2l6ZUNvbHVtbihldmVudDogQ29sdW1uUmVzaXplRXZlbnQpIHtcbiAgICBpZiAoZXZlbnQuY29sdW1uICE9PSBudWxsICYmIGV2ZW50LmNvbHVtbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBldmVudC5jb2x1bW4ud2lkdGggPSBldmVudC5uZXdXaWR0aCA8IDUwID8gNTAgOiBldmVudC5uZXdXaWR0aDtcbiAgICAgIGV2ZW50LmNvbHVtbi5mbGV4ID0gMDtcbiAgICB9XG4gICAgdGhpcy5fY29sdW1ucy5uZXh0KHRoaXMuZGlzcGxheUNvbHVtbnMpO1xuICAgIHRoaXMuc2F2ZUNvbHVtbnNTdGF0ZSgpO1xuICB9XG5cbiAgYXV0b3NpemVDb2x1bW4oY29sdW1uOiBUYWJsZUNvbHVtbiwgdGFyZ2V0OiBIVE1MRWxlbWVudCkge1xuICAgIGNvbnN0IHRhYmxlRWxlbWVudCA9IHRoaXMuZ2V0VGFibGVFbGVtZW50KHRhcmdldCk7XG4gICAgdGhpcy5zZXRDb2x1bW5BdXRvV2lkdGgoY29sdW1uLCB0YWJsZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQpO1xuICAgIHRoaXMuX2NvbHVtbnMubmV4dCh0aGlzLmRpc3BsYXlDb2x1bW5zKTtcbiAgICB0aGlzLnNhdmVDb2x1bW5zU3RhdGUoKTtcbiAgfVxuXG4gIGF1dG9zaXplQWxsQ29sdW1ucyh0YXJnZXQ6IEhUTUxFbGVtZW50KSB7XG4gICAgY29uc3QgdGFibGVFbGVtZW50ID0gdGhpcy5nZXRUYWJsZUVsZW1lbnQodGFyZ2V0KTtcbiAgICBjb25zdCBmbGF0ID0gQXJyYXlVdGlsLmZsYXR0ZW4odGhpcy5kaXNwbGF5Q29sdW1ucywgJ2NvbHVtbnMnLCB0cnVlKTtcbiAgICBmbGF0LmZvckVhY2goKGNvbCkgPT5cbiAgICAgIHRoaXMuc2V0Q29sdW1uQXV0b1dpZHRoKGNvbCwgdGFibGVFbGVtZW50IGFzIEhUTUxFbGVtZW50KVxuICAgICk7XG4gICAgdGhpcy5fY29sdW1ucy5uZXh0KHRoaXMuZGlzcGxheUNvbHVtbnMpO1xuICAgIHRoaXMuc2F2ZUNvbHVtbnNTdGF0ZSgpO1xuICB9XG5cbiAgcmVvcmRlckNvbHVtbihjb2x1bW46IFRhYmxlQ29sdW1uLCBpbnNlcnRCZWZvcmU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBjb25zdCBldmVudCA9IG5ldyBDb2x1bW5SZW9yZGVyRXZlbnQodGhpcy5fZHJhZ1NvdXJjZSwgY29sdW1uKTtcbiAgICBpZiAoZXZlbnQuc291cmNlICE9PSBldmVudC50YXJnZXQpIHtcbiAgICAgIGNvbnN0IHNvdXJjZVBhcmVudCA9IHRoaXMuZmluZFBhcmVudChldmVudC5zb3VyY2UsIHRoaXMuZGlzcGxheUNvbHVtbnMpO1xuICAgICAgY29uc3QgdGFyZ2V0UGFyZW50ID0gdGhpcy5maW5kUGFyZW50KGV2ZW50LnRhcmdldCwgdGhpcy5kaXNwbGF5Q29sdW1ucyk7XG5cbiAgICAgIGlmIChzb3VyY2VQYXJlbnQgJiYgdGFyZ2V0UGFyZW50KSB7XG4gICAgICAgIGNvbnN0IHNvdXJjZUluZGV4ID0gc291cmNlUGFyZW50LmluZGV4T2YoZXZlbnQuc291cmNlKTtcbiAgICAgICAgc291cmNlUGFyZW50LnNwbGljZShzb3VyY2VJbmRleCwgMSk7XG4gICAgICAgIGxldCB0YXJnZXRJbmRleCA9IHRhcmdldFBhcmVudC5pbmRleE9mKGV2ZW50LnRhcmdldCk7XG4gICAgICAgIGlmICghaW5zZXJ0QmVmb3JlKSB7XG4gICAgICAgICAgdGFyZ2V0SW5kZXggPSB0YXJnZXRJbmRleCArIDE7XG4gICAgICAgIH1cbiAgICAgICAgdGFyZ2V0UGFyZW50LnNwbGljZSh0YXJnZXRJbmRleCwgMCwgZXZlbnQuc291cmNlKTtcbiAgICAgICAgZXZlbnQuc291cmNlLmxvY2tlZCA9IGV2ZW50LnRhcmdldC5sb2NrZWQ7XG5cbiAgICAgICAgdGhpcy51cGRhdGVDb2x1bW5zKHRoaXMuZGlzcGxheUNvbHVtbnMpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHN0YXJ0RWRpdFJvdyhjZWxsRXZlbnQ6IElDZWxsRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fY3VycmVudEVkaXRDZWxsPy5yb3cgIT09IGNlbGxFdmVudD8ucm93KSB7XG4gICAgICBpZiAodGhpcy5fY3VycmVudEVkaXRDZWxsICE9IG51bGwpIHtcbiAgICAgICAgdGhpcy5fZWRpdFJvd1N0b3AubmV4dCh0aGlzLl9jdXJyZW50RWRpdENlbGwpO1xuICAgICAgfVxuICAgICAgaWYgKGNlbGxFdmVudCA9PT0gbnVsbCkge1xuICAgICAgICB0aGlzLl9lZGl0Um93U3RhcnQubmV4dChjZWxsRXZlbnQpO1xuICAgICAgICB0aGlzLl9jdXJyZW50RWRpdENlbGwgPSBjZWxsRXZlbnQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgdGhpcy5ib29sT3JGdW5jQ2FsbGJhY2s8VGFibGVSb3c8VD4+KHRoaXMucm93RWRpdGFibGUpKFxuICAgICAgICAgICAgdGhpcy5nZXRSb3dCeUluZGV4KGNlbGxFdmVudD8ucm93KVxuICAgICAgICAgIClcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhpcy5fZWRpdFJvd1N0YXJ0Lm5leHQoY2VsbEV2ZW50KTtcbiAgICAgICAgICB0aGlzLl9jdXJyZW50RWRpdENlbGwgPSBjZWxsRXZlbnQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBzdGFydEVkaXRDZWxsKGNlbGxFdmVudDogSUNlbGxFdmVudCk6IHZvaWQge1xuICAgIGlmIChcbiAgICAgIHRoaXMuX2N1cnJlbnRFZGl0Q2VsbD8uY29sdW1uICE9PSBjZWxsRXZlbnQ/LmNvbHVtbiB8fFxuICAgICAgdGhpcy5fY3VycmVudEVkaXRDZWxsPy5yb3cgIT09IGNlbGxFdmVudD8ucm93XG4gICAgKSB7XG4gICAgICBpZiAodGhpcy5fY3VycmVudEVkaXRDZWxsICE9IG51bGwpIHtcbiAgICAgICAgdGhpcy5fZWRpdENlbGxTdG9wLm5leHQodGhpcy5fY3VycmVudEVkaXRDZWxsKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGNvbHVtbiA9IHRoaXMuZ2V0Q29sdW1uQnlOYW1lKGNlbGxFdmVudD8uY29sdW1uKTtcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5ib29sT3JGdW5jQ2FsbGJhY2s8SUNlbGxJbnN0YW5jZTxUPj4oY29sdW1uPy5lZGl0YWJsZSkoe1xuICAgICAgICAgIHJvdzogdGhpcy5nZXRSb3dCeUluZGV4KGNlbGxFdmVudD8ucm93KSxcbiAgICAgICAgICBjb2x1bW46IGNvbHVtblxuICAgICAgICB9KVxuICAgICAgKSB7XG4gICAgICAgIHRoaXMuX2VkaXRDZWxsU3RhcnQubmV4dChjZWxsRXZlbnQpO1xuICAgICAgICB0aGlzLl9jdXJyZW50RWRpdENlbGwgPSBjZWxsRXZlbnQ7XG4gICAgICAgIGNvbnN0IGtleSA9IChjZWxsRXZlbnQ/LmV2ZW50IGFzIEtleWJvYXJkRXZlbnQpPy5rZXk7XG4gICAgICAgIGlmIChrZXkgJiYgKGtleS5sZW5ndGggPT09IDEgfHwgKGtleSA9PT0gJ0RlbGV0ZScgJiYgIWNvbHVtbi5yZXF1aXJlZCkpKSB7XG4gICAgICAgICAgdGhpcy5jbGVhclZhbHVlKGNlbGxFdmVudCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBzZXRBY3RpdmVSb3cocm93OiBUYWJsZVJvdzxUPik6IHZvaWQge1xuICAgIHRoaXMuX2FjdGl2ZVJvdy5uZXh0KHJvdyk7XG4gIH1cblxuICBzZWxlY3RSb3dzKHJvd3M6IFRhYmxlUm93PFQ+W10pOiB2b2lkIHtcbiAgICB0aGlzLl9zZWxlY3RlZFJvd3MubmV4dChyb3dzKTtcbiAgfVxuXG4gIHNlbGVjdE9yRGVzZWxlY3RSb3cocm93OiBUYWJsZVJvdzxUPik6IHZvaWQge1xuICAgIGlmICh0aGlzLl9zZWxlY3RlZFJvd3MudmFsdWUuaW5kZXhPZihyb3cpID49IDApIHtcbiAgICAgIHRoaXMuX3NlbGVjdGVkUm93cy5uZXh0KFxuICAgICAgICB0aGlzLl9zZWxlY3RlZFJvd3MudmFsdWUuZmlsdGVyKChfKSA9PiBfICE9PSByb3cpXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9zZWxlY3RlZFJvd3MubmV4dChbLi4udGhpcy5fc2VsZWN0ZWRSb3dzLnZhbHVlLCByb3ddKTtcbiAgICB9XG4gIH1cblxuICBzZWxlY3RSYW5nZShyb3c6IFRhYmxlUm93PFQ+KTogdm9pZCB7XG4gICAgY29uc3QgaW5kZXggPSB0aGlzLl9kaXNwbGF5RGF0YS52YWx1ZS5pbmRleE9mKHJvdyk7XG4gICAgbGV0IG1pbkluZGV4ID0gdGhpcy5fc2VsZWN0ZWRSb3dzLnZhbHVlLnJlZHVjZSgocHJldiwgY3VycikgPT4ge1xuICAgICAgY29uc3QgbmV3SW5kZXggPSB0aGlzLl9kaXNwbGF5RGF0YS52YWx1ZS5pbmRleE9mKGN1cnIpO1xuICAgICAgaWYgKG5ld0luZGV4IDwgcHJldikge1xuICAgICAgICByZXR1cm4gbmV3SW5kZXg7XG4gICAgICB9XG4gICAgICByZXR1cm4gcHJldjtcbiAgICB9LCB0aGlzLl9kaXNwbGF5RGF0YS52YWx1ZS5sZW5ndGgpO1xuICAgIGxldCBtYXhJbmRleCA9IHRoaXMuX3NlbGVjdGVkUm93cy52YWx1ZS5yZWR1Y2UoKHByZXYsIGN1cnIpID0+IHtcbiAgICAgIGNvbnN0IG5ld0luZGV4ID0gdGhpcy5fZGlzcGxheURhdGEudmFsdWUuaW5kZXhPZihjdXJyKTtcbiAgICAgIGlmIChuZXdJbmRleCA+IHByZXYpIHtcbiAgICAgICAgcmV0dXJuIG5ld0luZGV4O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHByZXY7XG4gICAgfSwgMCk7XG4gICAgaWYgKGluZGV4ID4gbWF4SW5kZXgpIHtcbiAgICAgIG1heEluZGV4ID0gaW5kZXg7XG4gICAgfVxuICAgIGlmIChpbmRleCA8IG1pbkluZGV4KSB7XG4gICAgICBtaW5JbmRleCA9IGluZGV4O1xuICAgIH1cbiAgICBpZiAobWluSW5kZXggPCBpbmRleCAmJiBpbmRleCA8IG1heEluZGV4KSB7XG4gICAgICBtYXhJbmRleCA9IGluZGV4O1xuICAgIH1cbiAgICB0aGlzLl9zZWxlY3RlZFJvd3MubmV4dChbLi4udGhpcy5fZGlzcGxheURhdGEudmFsdWUuc2xpY2UobWluSW5kZXgsIG1heEluZGV4ICsgMSldKTtcbiAgfVxuXG4gIHNlbGVjdFJvdyhyb3c6IFRhYmxlUm93PFQ+KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc2VsZWN0VHlwZSA9PT0gU2VsZWN0VHlwZS5ub25lKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuX3NlbGVjdGVkUm93cy5uZXh0KFsuLi50aGlzLl9zZWxlY3RlZFJvd3MudmFsdWUsIHJvd10pO1xuICB9XG5cbiAgZGVzZWxlY3RSb3cocm93OiBUYWJsZVJvdzxUPik6IHZvaWQge1xuICAgIGlmICh0aGlzLnNlbGVjdFR5cGUgPT09IFNlbGVjdFR5cGUubm9uZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLl9zZWxlY3RlZFJvd3MubmV4dChcbiAgICAgIHRoaXMuX3NlbGVjdGVkUm93cy52YWx1ZS5maWx0ZXIoKF8pID0+IF8gIT09IHJvdylcbiAgICApO1xuICB9XG5cbiAgc2VsZWN0QWxsKCkge1xuICAgIHRoaXMuX3NlbGVjdGVkUm93cy5uZXh0KHRoaXMuX2Rpc3BsYXlEYXRhLnZhbHVlKTtcbiAgfVxuXG4gIGRlc2VsZWN0QWxsKCkge1xuICAgIHRoaXMuX3NlbGVjdGVkUm93cy5uZXh0KFtdKTtcbiAgfVxuXG4gIGFsbFJvd3NTZWxlY3RlZCgpOiBib29sZWFuIHwgbnVsbCB7XG4gICAgaWYgKFxuICAgICAgdGhpcy5fZGlzcGxheURhdGEudmFsdWU/Lmxlbmd0aCAmJlxuICAgICAgdGhpcy5fc2VsZWN0ZWRSb3dzLnZhbHVlPy5sZW5ndGggJiZcbiAgICAgIHRoaXMuX2Rpc3BsYXlEYXRhLnZhbHVlLmV2ZXJ5KFxuICAgICAgICAoXykgPT4gdGhpcy5fc2VsZWN0ZWRSb3dzLnZhbHVlLmluZGV4T2YoXykgPj0gMFxuICAgICAgKVxuICAgICkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIHRoaXMuX3NlbGVjdGVkUm93cy52YWx1ZSA9PSBudWxsIHx8XG4gICAgICB0aGlzLl9zZWxlY3RlZFJvd3MudmFsdWUubGVuZ3RoID09PSAwXG4gICAgKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgc2V0SGlkZGVuQ29sdW1ucyh2YWx1ZTogc3RyaW5nW10pIHtcbiAgICB0aGlzLnNhdmVIaWRkZW5Db2x1bW5zKHZhbHVlKTtcbiAgICB0aGlzLl9oaWRkZW5Db2x1bW5zLm5leHQodmFsdWUpO1xuICB9XG5cbiAgY29sdW1uSXNIaWRkZW4oY29sdW1uOiBUYWJsZUNvbHVtbikge1xuICAgIHJldHVybiB0aGlzLl9oaWRkZW5Db2x1bW5zLnZhbHVlLmluZGV4T2YoY29sdW1uLm5hbWUpID49IDA7XG4gIH1cblxuICB0b2dnbGVHcm91cChyb3c6IFRhYmxlUm93PFQ+KTogdm9pZCB7XG4gICAgdGhpcy5fZ3JvdXBUb2dnbGUubmV4dChyb3cpO1xuICB9XG5cbiAgY2hhbmdlVmFsdWUoY29vcmRpbmF0ZXM6IElDZWxsQ29vcmRpbmF0ZXMpOiB2b2lkIHtcbiAgICB0aGlzLl92YWx1ZUNoYW5nZWQubmV4dChjb29yZGluYXRlcyk7XG4gIH1cblxuICBzZXRWYWx1ZShjZWxsVmFsdWU6IElDZWxsVmFsdWUpOiB2b2lkO1xuICBzZXRWYWx1ZShjZWxsVmFsdWU6IElDZWxsSW5zdGFuY2VWYWx1ZTxUPik6IHZvaWQ7XG4gIHNldFZhbHVlKGNlbGxWYWx1ZTogSUNlbGxWYWx1ZSB8IElDZWxsSW5zdGFuY2VWYWx1ZTxUPik6IHZvaWQge1xuICAgIGxldCB2YWx1ZTogSUNlbGxWYWx1ZTtcbiAgICBpZiAodHlwZW9mIGNlbGxWYWx1ZS5yb3cgPT09ICdvYmplY3QnICYmIHR5cGVvZiBjZWxsVmFsdWUuY29sdW1uID09PSAnb2JqZWN0Jykge1xuICAgICAgdmFsdWUgPSB7XG4gICAgICAgIHJvdzogdGhpcy5nZXRSb3dJbmRleChjZWxsVmFsdWUucm93KSxcbiAgICAgICAgY29sdW1uOiBjZWxsVmFsdWUuY29sdW1uLm5hbWUsXG4gICAgICAgIHZhbHVlOiBjZWxsVmFsdWUudmFsdWVcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhbHVlID0gY2VsbFZhbHVlIGFzIElDZWxsVmFsdWU7XG4gICAgfVxuICAgIHRoaXMuX3ZhbHVlU2V0Lm5leHQodmFsdWUpO1xuICB9XG5cbiAgZ2V0Um93QnlJbmRleChyb3dJbmRleDogbnVtYmVyKSB7XG4gICAgcmV0dXJuIHRoaXMuX2Rpc3BsYXlEYXRhLnZhbHVlW3Jvd0luZGV4XTtcbiAgfVxuXG4gIGdldFJvd0luZGV4KHJvdzogVGFibGVSb3c8VD4pIHtcbiAgICByZXR1cm4gdGhpcy5fZGlzcGxheURhdGEudmFsdWUuaW5kZXhPZihyb3cpO1xuICB9XG5cbiAgZ2V0TmV4dEVkaXRhYmxlQ2VsbChjb29yZHM6IElDZWxsQ29vcmRpbmF0ZXMpOiBJQ2VsbENvb3JkaW5hdGVzIHtcbiAgICBjb25zdCBuZXh0Q2VsbCA9IHRoaXMuZ2V0TmV4dENlbGwoY29vcmRzKTtcbiAgICBpZiAoIW5leHRDZWxsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgY29uc3QgY29sdW1uID0gdGhpcy5nZXRDb2x1bW5CeU5hbWUobmV4dENlbGw/LmNvbHVtbik7XG4gICAgaWYgKHRoaXMuYm9vbE9yRnVuY0NhbGxiYWNrPElDZWxsSW5zdGFuY2U8VD4+KGNvbHVtbi5lZGl0YWJsZSkoe1xuICAgICAgcm93OiB0aGlzLmdldFJvd0J5SW5kZXgobmV4dENlbGwucm93KSxcbiAgICAgIGNvbHVtblxuICAgIH0pKSB7XG4gICAgICByZXR1cm4gbmV4dENlbGw7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmdldE5leHRFZGl0YWJsZUNlbGwobmV4dENlbGwpO1xuICB9XG5cbiAgZ2V0UHJldmlvdXNFZGl0YWJsZUNlbGwoY29vcmRzOiBJQ2VsbENvb3JkaW5hdGVzKTogSUNlbGxDb29yZGluYXRlcyB7XG4gICAgY29uc3QgcHJldkNlbGwgPSB0aGlzLmdldFByZXZpb3VzQ2VsbChjb29yZHMpO1xuICAgIGlmICghcHJldkNlbGwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCBjb2x1bW4gPSB0aGlzLmdldENvbHVtbkJ5TmFtZShwcmV2Q2VsbD8uY29sdW1uKTtcbiAgICBpZiAodGhpcy5ib29sT3JGdW5jQ2FsbGJhY2s8SUNlbGxJbnN0YW5jZTxUPj4oY29sdW1uLmVkaXRhYmxlKSh7XG4gICAgICByb3c6IHRoaXMuZ2V0Um93QnlJbmRleChwcmV2Q2VsbC5yb3cpLFxuICAgICAgY29sdW1uXG4gICAgfSkpIHtcbiAgICAgIHJldHVybiBwcmV2Q2VsbDtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJldmlvdXNFZGl0YWJsZUNlbGwocHJldkNlbGwpO1xuICB9XG5cbiAgZ2V0TmV4dENlbGwoY29vcmRzOiBJQ2VsbENvb3JkaW5hdGVzKTogSUNlbGxDb29yZGluYXRlcyB7XG4gICAgY29uc3QgY29sdW1ucyA9IHRoaXMuZ2V0RmxhdENvbHVtbnMoKTtcbiAgICBsZXQgY29sSW5kZXggPSBjb2x1bW5zLmZpbmRJbmRleCgoY29sOiBUYWJsZUNvbHVtbikgPT4gY29sLm5hbWUgPT09IGNvb3Jkcz8uY29sdW1uKTtcbiAgICBsZXQgcm93SW5kZXggPSBjb29yZHM/LnJvdztcbiAgICBpZiAoY29sSW5kZXggPj0gMCAmJiByb3dJbmRleCA+PSAwKSB7XG4gICAgICBpZiAoY29sSW5kZXggPT09IGNvbHVtbnMubGVuZ3RoIC0gMSkge1xuICAgICAgICBjb2xJbmRleCA9IDA7XG4gICAgICAgIHJvd0luZGV4ID0gcm93SW5kZXggKyAxO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29sSW5kZXggPSBjb2xJbmRleCArIDE7XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb2x1bW46IGNvbHVtbnNbY29sSW5kZXhdPy5uYW1lLFxuICAgICAgICByb3c6IHJvd0luZGV4XG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGdldFByZXZpb3VzQ2VsbChjb29yZHM6IElDZWxsQ29vcmRpbmF0ZXMpOiBJQ2VsbENvb3JkaW5hdGVzIHtcbiAgICBjb25zdCBjb2x1bW5zID0gdGhpcy5nZXRGbGF0Q29sdW1ucygpO1xuICAgIGxldCBjb2xJbmRleCA9IGNvbHVtbnMuZmluZEluZGV4KChjb2w6IFRhYmxlQ29sdW1uKSA9PiBjb2wubmFtZSA9PT0gY29vcmRzPy5jb2x1bW4pO1xuICAgIGxldCByb3dJbmRleCA9IGNvb3Jkcz8ucm93O1xuICAgIGlmIChjb2xJbmRleCA+PSAwICYmIHJvd0luZGV4ID49IDApIHtcbiAgICAgIGlmIChjb2xJbmRleCA9PT0gMCkge1xuICAgICAgICBjb2xJbmRleCA9IGNvbHVtbnMubGVuZ3RoIC0gMTtcbiAgICAgICAgcm93SW5kZXggPSByb3dJbmRleCAtIDE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb2xJbmRleCA9IGNvbEluZGV4IC0gMTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbHVtbjogY29sdW1uc1tjb2xJbmRleF0/Lm5hbWUsXG4gICAgICAgIHJvdzogcm93SW5kZXhcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgZ2V0TmV4dFJvd0NlbGwoY29vcmRzOiBJQ2VsbENvb3JkaW5hdGVzKTogSUNlbGxDb29yZGluYXRlcyB7XG4gICAgY29uc3QgY29sdW1ucyA9IHRoaXMuZ2V0RmxhdENvbHVtbnMoKTtcbiAgICBsZXQgY29sSW5kZXggPSBjb2x1bW5zLmZpbmRJbmRleCgoY29sOiBUYWJsZUNvbHVtbikgPT4gY29sLm5hbWUgPT09IGNvb3Jkcz8uY29sdW1uKTtcbiAgICBsZXQgcm93SW5kZXggPSBjb29yZHM/LnJvdztcbiAgICBpZiAoY29sSW5kZXggPj0gMCAmJiByb3dJbmRleCA+PSAwICYmIHJvd0luZGV4IDwgdGhpcy5fZGlzcGxheURhdGEudmFsdWUubGVuZ3RoIC0gMSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29sdW1uOiBjb2x1bW5zW2NvbEluZGV4XT8ubmFtZSxcbiAgICAgICAgcm93OiByb3dJbmRleCArIDFcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgZ2V0UHJldmlvdXNSb3dDZWxsKGNvb3JkczogSUNlbGxDb29yZGluYXRlcykge1xuICAgIGNvbnN0IGNvbHVtbnMgPSB0aGlzLmdldEZsYXRDb2x1bW5zKCk7XG4gICAgbGV0IGNvbEluZGV4ID0gY29sdW1ucy5maW5kSW5kZXgoKGNvbDogVGFibGVDb2x1bW4pID0+IGNvbC5uYW1lID09PSBjb29yZHM/LmNvbHVtbik7XG4gICAgbGV0IHJvd0luZGV4ID0gY29vcmRzPy5yb3c7XG4gICAgaWYgKGNvbEluZGV4ID49IDAgJiYgcm93SW5kZXggPiAxKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb2x1bW46IGNvbHVtbnNbY29sSW5kZXhdPy5uYW1lLFxuICAgICAgICByb3c6IHJvd0luZGV4IC0gMVxuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBnZXRDb2x1bW5CeU5hbWUoY29sdW1uTmFtZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIEFycmF5VXRpbC5maW5kUmVjdXJzaXZlKFxuICAgICAgdGhpcy5kaXNwbGF5Q29sdW1ucyxcbiAgICAgIChpdGVyYWJsZU5vZGUpID0+IGNvbHVtbk5hbWUgPT09IGl0ZXJhYmxlTm9kZS5uYW1lLFxuICAgICAgJ2NvbHVtbnMnXG4gICAgKTtcbiAgfVxuXG4gIHNjcm9sbFRvSW5kZXgoaW5kZXg6IG51bWJlcikge1xuICAgIHRoaXMuX3Njcm9sbEluZGV4Lm5leHQobnVsbCk7XG4gICAgdGhpcy5fc2Nyb2xsSW5kZXgubmV4dChpbmRleCk7XG4gIH1cblxuICBib29sT3JGdW5jQ2FsbGJhY2s8TT4odmFyaWFibGU6IGJvb2xlYW4gfCAoKHJvdzogTSkgPT4gYm9vbGVhbikpIHtcbiAgICByZXR1cm4gKGFyZ3M6IE0pID0+IHtcbiAgICAgIGlmICh0eXBlb2YgdmFyaWFibGUgPT09ICdib29sZWFuJykge1xuICAgICAgICByZXR1cm4gdmFyaWFibGU7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuaXNGdW5jdGlvbih2YXJpYWJsZSkpIHtcbiAgICAgICAgcmV0dXJuICh2YXJpYWJsZSBhcyAocm93OiBNKSA9PiBib29sZWFuKShhcmdzKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH07XG4gIH1cblxuICBnZXRWaXNpYmxlQ29sdW1ucygpIHtcbiAgICBjb25zdCB2aXNpYmxlID0gQXJyYXlVdGlsLmZsYXR0ZW4odGhpcy5fY29sdW1ucy52YWx1ZSwgJ2NvbHVtbnMnLCB0cnVlKS5maWx0ZXIoXG4gICAgICAoXykgPT4gdGhpcy5faGlkZGVuQ29sdW1ucy52YWx1ZS5pbmRleE9mKF8ubmFtZSkgPCAwXG4gICAgKTtcbiAgICByZXR1cm4gdmlzaWJsZS5zb3J0KChhLCBiKSA9PiBOdW1iZXIoYi5sb2NrZWQpIC0gTnVtYmVyKGEubG9ja2VkKSk7XG4gIH1cblxuICBnZXRDZWxsSW5zdGFuY2UoY29vcmRzOiBJQ2VsbENvb3JkaW5hdGVzKTogSUNlbGxJbnN0YW5jZTxUPiB7XG4gICAgcmV0dXJuIGNvb3JkcyA/IHtcbiAgICAgIHJvdzogdGhpcy5nZXRSb3dCeUluZGV4KGNvb3Jkcy5yb3cpLFxuICAgICAgY29sdW1uOiB0aGlzLmdldENvbHVtbkJ5TmFtZShjb29yZHMuY29sdW1uKVxuICAgIH0gOiBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRGbGF0Q29sdW1ucygpIHtcbiAgICByZXR1cm4gQXJyYXlVdGlsLmZsYXR0ZW4odGhpcy5kaXNwbGF5Q29sdW1ucywgJ2NvbHVtbnMnLCB0cnVlKS5zb3J0KFxuICAgICAgKGEsIGIpID0+IE51bWJlcihiLmxvY2tlZCkgLSBOdW1iZXIoYS5sb2NrZWQpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZmluZFBhcmVudChcbiAgICBjb2x1bW46IFRhYmxlQ29sdW1uLFxuICAgIGNvbHVtbnM6IFRhYmxlQ29sdW1uW11cbiAgKTogVGFibGVDb2x1bW5bXSB8IG51bGwge1xuICAgIGNvbnN0IGZvdW5kID0gY29sdW1ucy5maW5kKCh4KSA9PiB4Lm5hbWUgPT09IGNvbHVtbi5uYW1lKTtcbiAgICBpZiAoZm91bmQgIT09IG51bGwgJiYgZm91bmQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGNvbHVtbnM7XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSAwLCBsID0gY29sdW1ucy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgIGNvbnN0IGNvbCA9IGNvbHVtbnNbaV07XG4gICAgICBpZiAoY29sLmNvbHVtbnMgJiYgY29sLmNvbHVtbnMubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuZmluZFBhcmVudChjb2x1bW4sIGNvbC5jb2x1bW5zKTtcbiAgICAgICAgaWYgKHJlc3VsdCAhPT0gbnVsbCAmJiByZXN1bHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBwcml2YXRlIGdldFRhYmxlRWxlbWVudChlbGVtZW50OiBIVE1MRWxlbWVudCkge1xuICAgIHJldHVybiBlbGVtZW50LmNsb3Nlc3QoJ3RldGEtdGFibGUnKTtcbiAgfVxuXG4gIHByaXZhdGUgaXNGdW5jdGlvbihvYmo6IGFueSkge1xuICAgIHJldHVybiAhIShvYmogJiYgb2JqPy5jb25zdHJ1Y3RvciAmJiBvYmo/LmNhbGwgJiYgb2JqPy5hcHBseSk7XG4gIH1cblxuICBwcml2YXRlIHNldENvbHVtbkF1dG9XaWR0aChjb2x1bW46IFRhYmxlQ29sdW1uLCB0YWJsZTogSFRNTEVsZW1lbnQpIHtcbiAgICBjb25zdCBjZWxscyA9IHRhYmxlLnF1ZXJ5U2VsZWN0b3JBbGwoXG4gICAgICBgdGV0YS1jZWxsW2RhdGEtY29sdW1uPSR7Y29sdW1uLm5hbWV9XSAuY2VsbC10ZXh0YFxuICAgICk7XG4gICAgbGV0IG1heFdpZHRoID0gMDtcbiAgICBjZWxscy5mb3JFYWNoKChjZWxsKSA9PiB7XG4gICAgICBpZiAoY2VsbC5zY3JvbGxXaWR0aCA+IG1heFdpZHRoKSB7XG4gICAgICAgIG1heFdpZHRoID0gY2VsbC5zY3JvbGxXaWR0aDtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb2x1bW4uZmxleCA9IDA7XG4gICAgY29sdW1uLndpZHRoID0gbWF4V2lkdGggKyAyMDtcbiAgfVxuXG4gIHByaXZhdGUgY2xlYXJWYWx1ZShldmVudDogSUNlbGxFdmVudCkge1xuICAgIHRoaXMuc2V0VmFsdWUoe1xuICAgICAgLi4uZXZlbnQsXG4gICAgICB2YWx1ZTogbnVsbFxuICAgIH0pO1xuICB9XG59XG4iXX0=
615
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnQvdGFibGUvc2VydmljZS90YWJsZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBRS9DLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQztBQUNyRCxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sb0NBQW9DLENBQUM7QUFDL0QsT0FBTyxFQUFDLGVBQWUsRUFBYyxPQUFPLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFFMUQsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sa0NBQWtDLENBQUM7QUFFcEUsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLGlDQUFpQyxDQUFDO0FBQzFELE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUM3QyxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sMEJBQTBCLENBQUM7QUFDcEQsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBQ2hELE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQztBQUNsRCxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0seUNBQXlDLENBQUM7QUFDdkUsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLG1DQUFtQyxDQUFDO0FBQzdELE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxvQ0FBb0MsQ0FBQztBQUM5RCxPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSw0Q0FBNEMsQ0FBQztBQUM5RSxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sc0NBQXNDLENBQUM7QUFDbkUsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLHFDQUFxQyxDQUFDO0FBQ2pFLE9B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LElBQUksQ0FBQztJQUNkLENBQUM7SUFFTyxlQUFlLENBQUMsT0FBb0I7UUFDMUMsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFFTyxVQUFVLENBQUMsR0FBUTtRQUN6QixPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLEVBQUUsV0FBVyxJQUFJLEdBQUcsRUFBRSxJQUFJLElBQUksR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ2hFLENBQUM7SUFFTyxrQkFBa0IsQ0FBQyxNQUFtQixFQUFFLEtBQWtCO1FBQ2hFLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxnQkFBZ0IsQ0FDbEMseUJBQXlCLE1BQU0sQ0FBQyxJQUFJLGNBQWMsQ0FDbkQsQ0FBQztRQUNGLElBQUksUUFBUSxHQUFHLENBQUMsQ0FBQztRQUNqQixLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDckIsSUFBSSxJQUFJLENBQUMsV0FBVyxHQUFHLFFBQVEsRUFBRTtnQkFDL0IsUUFBUSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7YUFDN0I7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUNILE1BQU0sQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO1FBQ2hCLE1BQU0sQ0FBQyxLQUFLLEdBQUcsUUFBUSxHQUFHLEVBQUUsQ0FBQztJQUMvQixDQUFDO0lBRU8sVUFBVSxDQUFDLEtBQWlCO1FBQ2xDLElBQUksQ0FBQyxRQUFRLENBQUM7WUFDWixHQUFHLEtBQUs7WUFDUixLQUFLLEVBQUUsSUFBSTtTQUNaLENBQUMsQ0FBQztJQUNMLENBQUM7O3lHQTV0QlUsWUFBWTs2R0FBWixZQUFZLGNBRlgsTUFBTTsyRkFFUCxZQUFZO2tCQUh4QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1RhYmxlUm93fSBmcm9tICcuLi9jb250cmFjdC90YWJsZS1yb3cnO1xuaW1wb3J0IHtJQ2VsbENvb3JkaW5hdGVzfSBmcm9tICcuLi9jb250cmFjdC9pLWNlbGwtY29vcmRpbmF0ZXMnO1xuaW1wb3J0IHtUYWJsZUNvbHVtbn0gZnJvbSAnLi4vY29udHJhY3QvdGFibGUtY29sdW1uJztcbmltcG9ydCB7RmlsdGVyU3RhdGV9IGZyb20gJy4uLy4uL2ZpbHRlci9jb250YXJjdC9maWx0ZXItc3RhdGUnO1xuaW1wb3J0IHtCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIFN1YmplY3R9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtDb2x1bW5SZXNpemVFdmVudH0gZnJvbSAnLi4vY29udHJhY3QvY29sdW1uLXJlc2l6ZS1ldmVudCc7XG5pbXBvcnQge0NvbHVtblJlb3JkZXJFdmVudH0gZnJvbSAnLi4vY29udHJhY3QvY29sdW1uLXJlb3JkZXItZXZlbnQnO1xuaW1wb3J0IHtTb3J0RXZlbnR9IGZyb20gJy4uL2NvbnRyYWN0L3NvcnQtZXZlbnQnO1xuaW1wb3J0IHtBcnJheVV0aWx9IGZyb20gJy4uLy4uLy4uL2NvbW1vbi91dGlsL2FycmF5LXV0aWwnO1xuaW1wb3J0IHtTdGF0ZVV0aWx9IGZyb20gJy4uL3V0aWwvc3RhdGUtdXRpbCc7XG5pbXBvcnQge1NlbGVjdFR5cGV9IGZyb20gJy4uL2VudW0vc2VsZWN0LXR5cGUuZW51bSc7XG5pbXBvcnQge0VkaXRUeXBlfSBmcm9tICcuLi9lbnVtL2VkaXQtdHlwZS5lbnVtJztcbmltcG9ydCB7RWRpdEV2ZW50fSBmcm9tICcuLi9lbnVtL2VkaXQtZXZlbnQuZW51bSc7XG5pbXBvcnQge0xpc3RGaWx0ZXJUeXBlfSBmcm9tICcuLi8uLi9maWx0ZXIvZW51bS9saXN0LWZpbHRlci10eXBlLmVudW0nO1xuaW1wb3J0IHtMaXN0RmlsdGVyfSBmcm9tICcuLi8uLi9maWx0ZXIvY29udGFyY3QvbGlzdC1maWx0ZXInO1xuaW1wb3J0IHtGaWx0ZXJUeXBlfSBmcm9tICcuLi8uLi9maWx0ZXIvZW51bS9maWx0ZXItdHlwZS5lbnVtJztcbmltcG9ydCB7TnVtZXJpY0ZpbHRlclZhbHVlfSBmcm9tICcuLi8uLi9maWx0ZXIvY29udGFyY3QvbnVtZXJpYy1maWx0ZXItdmFsdWUnO1xuaW1wb3J0IHtOdW1lcmljRmlsdGVyfSBmcm9tICcuLi8uLi9maWx0ZXIvY29udGFyY3QvbnVtZXJpYy1maWx0ZXInO1xuaW1wb3J0IHtTdHJpbmdGaWx0ZXJ9IGZyb20gJy4uLy4uL2ZpbHRlci9jb250YXJjdC9zdHJpbmctZmlsdGVyJztcbmltcG9ydCB7RGF0ZUZpbHRlclZhbHVlfSBmcm9tICcuLi8uLi9maWx0ZXIvY29udGFyY3QvZGF0ZS1maWx0ZXItdmFsdWUnO1xuaW1wb3J0IHtEYXRlRmlsdGVyfSBmcm9tICcuLi8uLi9maWx0ZXIvY29udGFyY3QvZGF0ZS1maWx0ZXInO1xuaW1wb3J0IHtJRGljdGlvbmFyeX0gZnJvbSAnLi4vLi4vLi4vY29tbW9uL2NvbnRyYWN0L2ktZGljdGlvbmFyeSc7XG5pbXBvcnQge0lJZE5hbWV9IGZyb20gJy4uLy4uLy4uL2NvbW1vbi9jb250cmFjdC9pLWlkLW5hbWUnO1xuaW1wb3J0IHtEYXRlVXRpbH0gZnJvbSAnLi4vLi4vLi4vdXRpbC9kYXRlLXV0aWwnO1xuaW1wb3J0IG9iamVjdEhhc2ggZnJvbSAnb2JqZWN0LWhhc2gnO1xuaW1wb3J0IHtUYWJsZUNvbHVtblN0b3JlfSBmcm9tICcuLi9jb250cmFjdC90YWJsZS1jb2x1bW4tc3RvcmUnO1xuaW1wb3J0IHtJQ2VsbFZhbHVlfSBmcm9tICcuLi9jb250cmFjdC9pLWNlbGwtdmFsdWUnO1xuaW1wb3J0IHtJQ2VsbEV2ZW50fSBmcm9tICcuLi9jb250cmFjdC9pLWNlbGwtZXZlbnQnO1xuaW1wb3J0IHtJQ2VsbEluc3RhbmNlLCBJQ2VsbEluc3RhbmNlVmFsdWV9IGZyb20gJy4uL2NvbnRyYWN0L2ktY2VsbC1pbnN0YW5jZSc7XG5pbXBvcnQge0hlYWREcm9wZG93blRhYkNvbmZpZ30gZnJvbSAnLi4vY29udHJhY3QvaGVhZC1kcm9wZG93bi10YWInO1xuaW1wb3J0IHtBZ2dyZWdhdGlvblR5cGV9IGZyb20gJy4uL2VudW0vYWdncmVnYXRpb24tdHlwZS5lbnVtJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIFRhYmxlU2VydmljZTxUPiB7XG4gIGNvbHVtbnM6IE9ic2VydmFibGU8VGFibGVDb2x1bW5bXT47XG4gIGRpc3BsYXlEYXRhOiBPYnNlcnZhYmxlPFRhYmxlUm93PFQ+W10+O1xuICBkaWN0OiBPYnNlcnZhYmxlPElEaWN0aW9uYXJ5PElJZE5hbWU8YW55PltdPj47XG4gIGZpbHRlck9wdGlvbnM6IE9ic2VydmFibGU8SURpY3Rpb25hcnk8SUlkTmFtZTxhbnk+W10+PjtcbiAgc3RhdGU6IE9ic2VydmFibGU8RmlsdGVyU3RhdGU+O1xuICBzZWxlY3RUeXBlOiBTZWxlY3RUeXBlID0gU2VsZWN0VHlwZS5tb3VzZTtcbiAgZWRpdFJvd1N0YXJ0OiBPYnNlcnZhYmxlPElDZWxsRXZlbnQ+O1xuICBlZGl0Um93U3RvcDogT2JzZXJ2YWJsZTxJQ2VsbENvb3JkaW5hdGVzPjtcbiAgZWRpdENlbGxTdGFydDogT2JzZXJ2YWJsZTxJQ2VsbEV2ZW50PjtcbiAgZWRpdENlbGxTdG9wOiBPYnNlcnZhYmxlPElDZWxsQ29vcmRpbmF0ZXM+O1xuICB2YWx1ZUNoYW5nZWQ6IE9ic2VydmFibGU8SUNlbGxDb29yZGluYXRlcz47XG4gIHZhbHVlU2V0OiBPYnNlcnZhYmxlPElDZWxsVmFsdWU+O1xuICBzdGF0ZUNoYW5nZWQ6IE9ic2VydmFibGU8RmlsdGVyU3RhdGU+O1xuICBmaWx0ZXJDbGVhcjogT2JzZXJ2YWJsZTxUYWJsZUNvbHVtbj47XG4gIGdyb3VwVG9nZ2xlOiBPYnNlcnZhYmxlPFRhYmxlUm93PFQ+PjtcbiAgc2VsZWN0ZWRSb3dzOiBPYnNlcnZhYmxlPFRhYmxlUm93PFQ+W10+O1xuICBhY3RpdmVSb3c6IE9ic2VydmFibGU8VGFibGVSb3c8VD4+O1xuICBoaWRkZW5Db2x1bW5zOiBPYnNlcnZhYmxlPHN0cmluZ1tdPjtcbiAgc2Nyb2xsSW5kZXg6IE9ic2VydmFibGU8bnVtYmVyPjtcblxuICBlZGl0VHlwZTogRWRpdFR5cGUgPSBFZGl0VHlwZS5jZWxsO1xuICBlZGl0RXZlbnQ6IEVkaXRFdmVudCA9IEVkaXRFdmVudC5kb3VibGVDbGljaztcbiAgcm93RWRpdGFibGU6IGJvb2xlYW4gfCAoKHJvdzogVGFibGVSb3c8VD4pID0+IGJvb2xlYW4pO1xuICB0cmFja1JvdzogKGluZGV4OiBudW1iZXIsIHJvdzogVGFibGVSb3c8VD4pID0+IGFueSA9IChpbmRleDogbnVtYmVyLCByb3c6IFRhYmxlUm93PFQ+KSA9PiBpbmRleDtcblxuICBnZXQgZHJhZ1NvdXJjZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fZHJhZ1NvdXJjZTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdGlhbENvbHVtbnNIYXNoOiBzdHJpbmc7XG4gIHByaXZhdGUgaW5pdGlhbENvbHVtbnM6IFRhYmxlQ29sdW1uW10gPSBbXTtcbiAgcHJpdmF0ZSBkaXNwbGF5Q29sdW1uczogVGFibGVDb2x1bW5bXSA9IFtdO1xuICBwcml2YXRlIF9jb2x1bW5zOiBCZWhhdmlvclN1YmplY3Q8VGFibGVDb2x1bW5bXT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFRhYmxlQ29sdW1uW10+KFtdKTtcbiAgcHJpdmF0ZSBfaGlkZGVuQ29sdW1ucyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nW10+KFtdKTtcbiAgcHJpdmF0ZSBfZGlzcGxheURhdGE6IEJlaGF2aW9yU3ViamVjdDxUYWJsZVJvdzxUPltdPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8VGFibGVSb3c8VD5bXT4oW10pO1xuICBwcml2YXRlIF9kaWN0OiBCZWhhdmlvclN1YmplY3Q8SURpY3Rpb25hcnk8SUlkTmFtZTxhbnk+W10+PiA9XG4gICAgbmV3IEJlaGF2aW9yU3ViamVjdDxJRGljdGlvbmFyeTxJSWROYW1lPGFueT5bXT4+KHt9KTtcbiAgcHJpdmF0ZSBfZmlsdGVyT3B0aW9uczogQmVoYXZpb3JTdWJqZWN0PElEaWN0aW9uYXJ5PElJZE5hbWU8YW55PltdPj4gPVxuICAgIG5ldyBCZWhhdmlvclN1YmplY3Q8SURpY3Rpb25hcnk8SUlkTmFtZTxhbnk+W10+Pih7fSk7XG4gIHByaXZhdGUgX3N0YXRlOiBCZWhhdmlvclN1YmplY3Q8RmlsdGVyU3RhdGU+ID1cbiAgICBuZXcgQmVoYXZpb3JTdWJqZWN0PEZpbHRlclN0YXRlPihuZXcgRmlsdGVyU3RhdGUoKSk7XG4gIHByaXZhdGUgX2Nvb2tpZU5hbWU6IHN0cmluZztcbiAgcHJpdmF0ZSBfaGlkZGVuQ29va2llTmFtZTogc3RyaW5nO1xuICBwcml2YXRlIF9jb2x1bW5zQ29va2llTmFtZTogc3RyaW5nO1xuICBwcml2YXRlIF9lZGl0Um93U3RhcnQgPSBuZXcgU3ViamVjdDxJQ2VsbEV2ZW50IHwgbnVsbD4oKTtcbiAgcHJpdmF0ZSBfZWRpdFJvd1N0b3AgPSBuZXcgU3ViamVjdDxJQ2VsbENvb3JkaW5hdGVzIHwgbnVsbD4oKTtcbiAgcHJpdmF0ZSBfZWRpdENlbGxTdGFydCA9IG5ldyBTdWJqZWN0PElDZWxsRXZlbnQgfCBudWxsPigpO1xuICBwcml2YXRlIF9lZGl0Q2VsbFN0b3AgPSBuZXcgU3ViamVjdDxJQ2VsbENvb3JkaW5hdGVzIHwgbnVsbD4oKTtcbiAgcHJpdmF0ZSBfdmFsdWVDaGFuZ2VkID0gbmV3IFN1YmplY3Q8SUNlbGxDb29yZGluYXRlcyB8IG51bGw+KCk7XG4gIHByaXZhdGUgX3ZhbHVlU2V0ID0gbmV3IFN1YmplY3Q8SUNlbGxWYWx1ZT4oKTtcbiAgcHJpdmF0ZSBfc3RhdGVDaGFuZ2VkID0gbmV3IFN1YmplY3Q8RmlsdGVyU3RhdGU+KCk7XG4gIHByaXZhdGUgX2ZpbHRlckNsZWFyID0gbmV3IFN1YmplY3Q8VGFibGVDb2x1bW4+KCk7XG4gIHByaXZhdGUgX2RyYWdTb3VyY2U6IFRhYmxlQ29sdW1uO1xuICBwcml2YXRlIF9ncm91cFRvZ2dsZSA9IG5ldyBTdWJqZWN0PFRhYmxlUm93PFQ+PigpO1xuICBwcml2YXRlIF9zZWxlY3RlZFJvd3MgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFRhYmxlUm93PFQ+W10+KFtdKTtcbiAgcHJpdmF0ZSBfYWN0aXZlUm93ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxUYWJsZVJvdzxUPj4obnVsbCk7XG4gIHByaXZhdGUgX3Njcm9sbEluZGV4ID0gbmV3IFN1YmplY3Q8bnVtYmVyPigpO1xuXG4gIHByaXZhdGUgX2N1cnJlbnRFZGl0Q2VsbDogSUNlbGxDb29yZGluYXRlcztcblxuICBnZXQgY3VycmVudEVkaXRDZWxsKCk6IElDZWxsQ29vcmRpbmF0ZXMge1xuICAgIHJldHVybiB0aGlzLl9jdXJyZW50RWRpdENlbGw7XG4gIH1cblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmNvbHVtbnMgPSB0aGlzLl9jb2x1bW5zLmFzT2JzZXJ2YWJsZSgpO1xuICAgIHRoaXMuZGlzcGxheURhdGEgPSB0aGlzLl9kaXNwbGF5RGF0YS5hc09ic2VydmFibGUoKTtcbiAgICB0aGlzLmRpY3QgPSB0aGlzLl9kaWN0LmFzT2JzZXJ2YWJsZSgpO1xuICAgIHRoaXMuZmlsdGVyT3B0aW9ucyA9IHRoaXMuX2ZpbHRlck9wdGlvbnMuYXNPYnNlcnZhYmxlKCk7XG4gICAgdGhpcy5zdGF0ZSA9IHRoaXMuX3N0YXRlLmFzT2JzZXJ2YWJsZSgpO1xuICAgIHRoaXMuZWRpdFJvd1N0YXJ0ID0gdGhpcy5fZWRpdFJvd1N0YXJ0LmFzT2JzZXJ2YWJsZSgpO1xuICAgIHRoaXMuZWRpdFJvd1N0b3AgPSB0aGlzLl9lZGl0Um93U3RvcC5hc09ic2VydmFibGUoKTtcbiAgICB0aGlzLmVkaXRDZWxsU3RhcnQgPSB0aGlzLl9lZGl0Q2VsbFN0YXJ0LmFzT2JzZXJ2YWJsZSgpO1xuICAgIHRoaXMuZWRpdENlbGxTdG9wID0gdGhpcy5fZWRpdENlbGxTdG9wLmFzT2JzZXJ2YWJsZSgpO1xuICAgIHRoaXMudmFsdWVDaGFuZ2VkID0gdGhpcy5fdmFsdWVDaGFuZ2VkLmFzT2JzZXJ2YWJsZSgpO1xuICAgIHRoaXMudmFsdWVTZXQgPSB0aGlzLl92YWx1ZVNldC5hc09ic2VydmFibGUoKTtcbiAgICB0aGlzLnN0YXRlQ2hhbmdlZCA9IHRoaXMuX3N0YXRlQ2hhbmdlZC5hc09ic2VydmFibGUoKTtcbiAgICB0aGlzLmZpbHRlckNsZWFyID0gdGhpcy5fZmlsdGVyQ2xlYXIuYXNPYnNlcnZhYmxlKCk7XG4gICAgdGhpcy5ncm91cFRvZ2dsZSA9IHRoaXMuX2dyb3VwVG9nZ2xlLmFzT2JzZXJ2YWJsZSgpO1xuICAgIHRoaXMuc2VsZWN0ZWRSb3dzID0gdGhpcy5fc2VsZWN0ZWRSb3dzLmFzT2JzZXJ2YWJsZSgpO1xuICAgIHRoaXMuYWN0aXZlUm93ID0gdGhpcy5fYWN0aXZlUm93LmFzT2JzZXJ2YWJsZSgpO1xuICAgIHRoaXMuaGlkZGVuQ29sdW1ucyA9IHRoaXMuX2hpZGRlbkNvbHVtbnMuYXNPYnNlcnZhYmxlKCk7XG4gICAgdGhpcy5zY3JvbGxJbmRleCA9IHRoaXMuX3Njcm9sbEluZGV4LmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgc2V0RGF0YShkYXRhOiBUW10pOiB2b2lkIHtcbiAgICB0aGlzLl9kaXNwbGF5RGF0YS5uZXh0KGRhdGE/Lm1hcCgoXykgPT4gbmV3IFRhYmxlUm93PFQ+KF8pKSk7XG4gIH1cblxuICBzZXREaWN0KGRpY3Q6IElEaWN0aW9uYXJ5PElJZE5hbWU8YW55PltdPik6IHZvaWQge1xuICAgIHRoaXMuX2RpY3QubmV4dChkaWN0KTtcbiAgfVxuXG4gIHNldEZpbHRlck9wdGlvbnMoZmlsdGVyT3B0aW9uczogSURpY3Rpb25hcnk8SUlkTmFtZTxhbnk+W10+KTogdm9pZCB7XG4gICAgdGhpcy5fZmlsdGVyT3B0aW9ucy5uZXh0KGZpbHRlck9wdGlvbnMpO1xuICB9XG5cbiAgc2V0Q29sdW1ucyhjb2x1bW5zOiBUYWJsZUNvbHVtbltdKTogdm9pZCB7XG4gICAgdGhpcy5pbml0aWFsQ29sdW1ucyA9IGNvbHVtbnMgPyBjb2x1bW5zLm1hcCgoXykgPT4gbmV3IFRhYmxlQ29sdW1uKF8pKSA6IFtdO1xuICAgIGNvbnN0IGV4Y2x1ZGVLZXlzID0gW1xuICAgICAgJ2VkaXRhYmxlJyxcbiAgICAgICdjZWxsQ29tcG9uZW50JyxcbiAgICAgICdoZWFkQ2VsbENvbXBvbmVudCcsXG4gICAgICAnaGVhZERyb3Bkb3duQ29uZmlnJyxcbiAgICAgICdncm91cEJ5Rm4nLFxuICAgIF07XG4gICAgdGhpcy5pbml0aWFsQ29sdW1uc0hhc2ggPSBvYmplY3RIYXNoKHRoaXMuaW5pdGlhbENvbHVtbnMsIHtcbiAgICAgIGFsZ29yaXRobTogJ3NoYTEnLFxuICAgICAgaWdub3JlVW5rbm93bjogdHJ1ZSxcbiAgICAgIGV4Y2x1ZGVLZXlzOiAoa2V5KSA9PiB7XG4gICAgICAgIHJldHVybiBleGNsdWRlS2V5cy5pbmRleE9mKGtleSkgPj0gMDtcbiAgICAgIH0sXG4gICAgfSk7XG4gICAgY29uc3QgcmVzdG9yZWQgPSB0aGlzLnJlc3RvcmVDb2x1bW5zKCk7XG5cbiAgICBpZiAocmVzdG9yZWQpIHtcbiAgICAgIHRoaXMuc2V0RGlzcGxheUNvbHVtbnMocmVzdG9yZWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNldERpc3BsYXlDb2x1bW5zKHRoaXMuaW5pdGlhbENvbHVtbnMpO1xuICAgIH1cbiAgfVxuXG4gIHJlc3RvcmVEZWZhdWx0Q29sdW1ucygpIHtcbiAgICB0aGlzLnNldERpc3BsYXlDb2x1bW5zKHRoaXMuaW5pdGlhbENvbHVtbnMpO1xuICAgIHRoaXMuY2xlYXJDb2x1bW5zU3RhdGUoKTtcbiAgfVxuXG4gIHVwZGF0ZUNvbHVtbnMoY29sdW1uczogVGFibGVDb2x1bW5bXSk6IHZvaWQge1xuICAgIHRoaXMuc2V0RGlzcGxheUNvbHVtbnMoY29sdW1ucyk7XG4gICAgdGhpcy5zYXZlQ29sdW1uc1N0YXRlKCk7XG4gIH1cblxuICBzYXZlQ29sdW1uc1N0YXRlKCkge1xuICAgIGlmICh0aGlzLl9jb29raWVOYW1lKSB7XG4gICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShcbiAgICAgICAgdGhpcy5fY29sdW1uc0Nvb2tpZU5hbWUsXG4gICAgICAgIEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICBoYXNoOiB0aGlzLmluaXRpYWxDb2x1bW5zSGFzaCxcbiAgICAgICAgICBjb2x1bW5zOiB0aGlzLmRpc3BsYXlDb2x1bW5zLm1hcCgoXykgPT4gbmV3IFRhYmxlQ29sdW1uU3RvcmUoXykpLFxuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBjbGVhckNvbHVtbnNTdGF0ZSgpIHtcbiAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSh0aGlzLl9jb2x1bW5zQ29va2llTmFtZSk7XG4gIH1cblxuICBzZXREaXNwbGF5Q29sdW1ucyhjb2x1bW5zOiBUYWJsZUNvbHVtbltdKTogdm9pZCB7XG4gICAgdGhpcy5kaXNwbGF5Q29sdW1ucyA9IGNvbHVtbnMgPyBjb2x1bW5zLm1hcCgoXykgPT4gbmV3IFRhYmxlQ29sdW1uKF8pKSA6IFtdO1xuICAgIHRoaXMuX2NvbHVtbnMubmV4dCh0aGlzLmRpc3BsYXlDb2x1bW5zKTtcbiAgfVxuXG4gIHJlc3RvcmVDb2x1bW5zKCkge1xuICAgIGNvbnN0IHNhdmVkQ29sdW1ucyA9IEpTT04ucGFyc2UoXG4gICAgICBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLl9jb2x1bW5zQ29va2llTmFtZSlcbiAgICApO1xuICAgIGlmIChzYXZlZENvbHVtbnMgJiYgc2F2ZWRDb2x1bW5zLmhhc2ggPT09IHRoaXMuaW5pdGlhbENvbHVtbnNIYXNoKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZXN0b3JlQ29sdW1uc1N0YXRlKHNhdmVkQ29sdW1ucy5jb2x1bW5zKTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXN0b3JlQ29sdW1uc1N0YXRlKGNvbHVtbnM6IFRhYmxlQ29sdW1uU3RvcmVbXSkge1xuICAgIHJldHVybiBjb2x1bW5zLm1hcCgoY29sdW1uOiBUYWJsZUNvbHVtblN0b3JlKSA9PiB7XG4gICAgICBjb25zdCBmb3VuZCA9IEFycmF5VXRpbC5maW5kUmVjdXJzaXZlKFxuICAgICAgICB0aGlzLmluaXRpYWxDb2x1bW5zLFxuICAgICAgICAoaXRlbSkgPT4gaXRlbS5uYW1lID09PSBjb2x1bW4ubmFtZSxcbiAgICAgICAgJ2NvbHVtbnMnXG4gICAgICApO1xuICAgICAgY29uc3QgcmVzdWx0Q29sdW1uID0gbmV3IFRhYmxlQ29sdW1uKGZvdW5kKTtcbiAgICAgIHJlc3VsdENvbHVtbi53aWR0aCA9IGNvbHVtbi53aWR0aDtcbiAgICAgIHJlc3VsdENvbHVtbi5mbGV4ID0gY29sdW1uLmZsZXg7XG4gICAgICByZXN1bHRDb2x1bW4ubG9ja2VkID0gY29sdW1uLmxvY2tlZDtcbiAgICAgIGlmIChjb2x1bW4uY29sdW1ucz8ubGVuZ3RoID4gMCkge1xuICAgICAgICByZXN1bHRDb2x1bW4uY29sdW1ucyA9IHRoaXMucmVzdG9yZUNvbHVtbnNTdGF0ZShjb2x1bW4uY29sdW1ucyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0Q29sdW1uO1xuICAgIH0pO1xuICB9XG5cbiAgc2V0U3RhdGUoc3RhdGU6IEZpbHRlclN0YXRlKTogdm9pZCB7XG4gICAgc3RhdGUuc2F2ZSh0aGlzLl9jb29raWVOYW1lKTtcbiAgICB0aGlzLl9zdGF0ZS5uZXh0KHN0YXRlKTtcbiAgfVxuXG4gIHNldENvb2tpZU5hbWUobmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5fY29va2llTmFtZSA9IG5hbWU7XG4gICAgdGhpcy5faGlkZGVuQ29va2llTmFtZSA9IGAke3RoaXMuX2Nvb2tpZU5hbWV9X2hpZGRlbl9jb2x1bW5zYDtcbiAgICB0aGlzLl9jb2x1bW5zQ29va2llTmFtZSA9IGAke3RoaXMuX2Nvb2tpZU5hbWV9X2NvbHVtbnNgO1xuICB9XG5cbiAgcmVzdG9yZVN0YXRlKCk6IHZvaWQge1xuICAgIGxldCBzdGF0ZTogRmlsdGVyU3RhdGU7XG4gICAgaWYgKHRoaXMuX2Nvb2tpZU5hbWU/Lmxlbmd0aCA+IDAgJiYgRmlsdGVyU3RhdGUucmVzdG9yZSh0aGlzLl9jb29raWVOYW1lKSkge1xuICAgICAgbGV0IG5ld1N0YXRlID0gT2JqZWN0LmFzc2lnbihcbiAgICAgICAgdGhpcy5fc3RhdGUudmFsdWUsXG4gICAgICAgIEZpbHRlclN0YXRlLnJlc3RvcmUodGhpcy5fY29va2llTmFtZSlcbiAgICAgICk7XG4gICAgICBuZXdTdGF0ZSA9IERhdGVVdGlsLmNvbnZlcnREYXRlU3RyaW5nc1RvRGF0ZXMobmV3U3RhdGUpO1xuICAgICAgc3RhdGUgPSBuZXcgRmlsdGVyU3RhdGUobmV3U3RhdGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdGF0ZSA9IG5ldyBGaWx0ZXJTdGF0ZSgpO1xuICAgIH1cbiAgICB0aGlzLnNldFN0YXRlKHN0YXRlKTtcbiAgfVxuXG4gIHNhdmVIaWRkZW5Db2x1bW5zKGhpZGRlbkNvbHVtbnM6IHN0cmluZ1tdKTogdm9pZCB7XG4gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0odGhpcy5faGlkZGVuQ29va2llTmFtZSwgSlNPTi5zdHJpbmdpZnkoaGlkZGVuQ29sdW1ucykpO1xuICB9XG5cbiAgcmVzdG9yZUhpZGRlbkNvbHVtbnMoKTogdm9pZCB7XG4gICAgY29uc3QgaGlkZGVuQ29sdW1ucyA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMuX2hpZGRlbkNvb2tpZU5hbWUpIHx8ICdbXSc7XG4gICAgdGhpcy5faGlkZGVuQ29sdW1ucy5uZXh0KEpTT04ucGFyc2UoaGlkZGVuQ29sdW1ucykpO1xuICB9XG5cbiAgc29ydEFzYyhzb3J0RXZlbnQ6IFNvcnRFdmVudCk6IHZvaWQge1xuICAgIGlmIChzb3J0RXZlbnQuY29sdW1uLnNvcnRhYmxlKSB7XG4gICAgICB0aGlzLnNldFN0YXRlKFN0YXRlVXRpbC5zb3J0QXNjKHNvcnRFdmVudCwgdGhpcy5fc3RhdGUudmFsdWUpKTtcbiAgICB9XG4gIH1cblxuICBzb3J0RGVzYyhzb3J0RXZlbnQ6IFNvcnRFdmVudCk6IHZvaWQge1xuICAgIGlmIChzb3J0RXZlbnQuY29sdW1uLnNvcnRhYmxlKSB7XG4gICAgICB0aGlzLnNldFN0YXRlKFN0YXRlVXRpbC5zb3J0RGVzYyhzb3J0RXZlbnQsIHRoaXMuX3N0YXRlLnZhbHVlKSk7XG4gICAgfVxuICB9XG5cbiAgY2xlYXJTb3J0KGNvbHVtbjogVGFibGVDb2x1bW4pOiB2b2lkIHtcbiAgICB0aGlzLnNldFN0YXRlKFN0YXRlVXRpbC5jbGVhclNvcnQoY29sdW1uLCB0aGlzLl9zdGF0ZS52YWx1ZSkpO1xuICB9XG5cbiAgY2xlYXJBbGxTb3J0KCk6IHZvaWQge1xuICAgIHRoaXMuc2V0U3RhdGUoU3RhdGVVdGlsLmNsZWFyQWxsU29ydCh0aGlzLl9zdGF0ZS52YWx1ZSkpO1xuICB9XG5cbiAgY2xlYXJGaWx0ZXIoY29sdW1uOiBUYWJsZUNvbHVtbikge1xuICAgIGNvbnN0IHN0YXRlID0gdGhpcy5fc3RhdGUudmFsdWU7XG4gICAgaWYgKGNvbHVtbiAhPT0gbnVsbCAmJiBjb2x1bW4gIT09IHVuZGVmaW5lZCAmJiBjb2x1bW4uZmlsdGVyYWJsZSkge1xuICAgICAgc3dpdGNoIChjb2x1bW4uZmlsdGVyVHlwZSkge1xuICAgICAgICBjYXNlIEZpbHRlclR5cGUuZGF0ZTpcbiAgICAgICAgICBzdGF0ZS5hZGREYXRlRmlsdGVyKFxuICAgICAgICAgICAgbmV3IERhdGVGaWx0ZXIoe1xuICAgICAgICAgICAgICBuYW1lOiBjb2x1bW4ubmFtZSxcbiAgICAgICAgICAgICAgZmllbGQ6IGNvbHVtbi5maWx0ZXJGaWVsZCxcbiAgICAgICAgICAgICAgdmFsdWU6IG5ldyBEYXRlRmlsdGVyVmFsdWUoKSxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBGaWx0ZXJUeXBlLnN0cmluZzpcbiAgICAgICAgICBzdGF0ZS5hZGRTdHJpbmdGaWx0ZXIoXG4gICAgICAgICAgICBuZXcgU3RyaW5nRmlsdGVyKHtcbiAgICAgICAgICAgICAgbmFtZTogY29sdW1uLm5hbWUsXG4gICAgICAgICAgICAgIGZpZWxkOiBjb2x1bW4uZmlsdGVyRmllbGQsXG4gICAgICAgICAgICAgIHZhbHVlOiAnJyxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBGaWx0ZXJUeXBlLm51bWJlcjpcbiAgICAgICAgICBzdGF0ZS5hZGROdW1lcmljRmlsdGVyKFxuICAgICAgICAgICAgbmV3IE51bWVyaWNGaWx0ZXIoe1xuICAgICAgICAgICAgICBuYW1lOiBjb2x1bW4ubmFtZSxcbiAgICAgICAgICAgICAgZmllbGQ6IGNvbHVtbi5maWx0ZXJGaWVsZCxcbiAgICAgICAgICAgICAgdmFsdWU6IG5ldyBOdW1lcmljRmlsdGVyVmFsdWUoKSxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBGaWx0ZXJUeXBlLmxpc3Q6XG4gICAgICAgICAgc3RhdGUuYWRkTGlzdEZpbHRlcihcbiAgICAgICAgICAgIG5ldyBMaXN0RmlsdGVyKHtcbiAgICAgICAgICAgICAgbmFtZTogY29sdW1uLm5hbWUsXG4gICAgICAgICAgICAgIGZpZWxkOiBjb2x1bW4uZmlsdGVyRmllbGQsXG4gICAgICAgICAgICAgIHZhbHVlOiBbXSxcbiAgICAgICAgICAgICAgdHlwZTogTGlzdEZpbHRlclR5cGUuTm9uZSxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIHRoaXMuc2V0U3RhdGUobmV3IEZpbHRlclN0YXRlKHN0YXRlKSk7XG4gICAgfVxuICB9XG5cbiAgY2xlYXJBbGxGaWx0ZXJzKCkge1xuICAgIGNvbnN0IHN0YXRlID0gdGhpcy5fc3RhdGUudmFsdWU7XG4gICAgc3RhdGUuc3RyaW5nRmlsdGVycyA9IFtdO1xuICAgIHN0YXRlLmxpc3RGaWx0ZXJzID0gW107XG4gICAgc3RhdGUubnVtZXJpY0ZpbHRlcnMgPSBbXTtcbiAgICBzdGF0ZS5kYXRlRmlsdGVycyA9IFtdO1xuICAgIHRoaXMuc2V0U3RhdGUobmV3IEZpbHRlclN0YXRlKHN0YXRlKSk7XG4gIH1cblxuICBwaW5Db2x1bW4oY29sdW1uOiBUYWJsZUNvbHVtbik6IHZvaWQge1xuICAgIHRoaXMuZGlzcGxheUNvbHVtbnMuZm9yRWFjaCgoY29sOiBUYWJsZUNvbHVtbikgPT4ge1xuICAgICAgaWYgKGNvbC5uYW1lID09PSBjb2x1bW4ubmFtZSkge1xuICAgICAgICBjb2wubG9ja2VkID0gIWNvbC5sb2NrZWQ7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy51cGRhdGVDb2x1bW5zKHRoaXMuZGlzcGxheUNvbHVtbnMpO1xuICB9XG5cbiAgZHJhZ1N0YXJ0KGNvbHVtbjogVGFibGVDb2x1bW4pOiB2b2lkIHtcbiAgICB0aGlzLl9kcmFnU291cmNlID0gY29sdW1uO1xuICB9XG5cbiAgbG9ja1ByZXZpb3VzQ29sdW1ucyhjb2x1bW46IFRhYmxlQ29sdW1uLCBlbGVtZW50OiBIVE1MRWxlbWVudCkge1xuICAgIGNvbnN0IGZsYXQgPSBBcnJheVV0aWwuZmxhdHRlbih0aGlzLmRpc3BsYXlDb2x1bW5zLCAnY29sdW1ucycsIHRydWUpLnNvcnQoXG4gICAgICAoYSwgYikgPT4gTnVtYmVyKGIubG9ja2VkKSAtIE51bWJlcihhLmxvY2tlZClcbiAgICApO1xuICAgIGNvbnN0IGluZGV4ID0gZmxhdC5pbmRleE9mKGNvbHVtbik7XG4gICAgY29uc3QgcHJldmlvdXMgPSBmbGF0LnNsaWNlKDAsIGluZGV4KS5maWx0ZXIoKF8pID0+IF8uZmxleCA+IDApO1xuICAgIGlmIChwcmV2aW91cz8ubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgdGFibGVFbGVtZW50ID0gdGhpcy5nZXRUYWJsZUVsZW1lbnQoZWxlbWVudCk7XG4gICAgICBwcmV2aW91cy5mb3JFYWNoKChpdGVtOiBUYWJsZUNvbHVtbikgPT4ge1xuICAgICAgICBjb25zdCBpdGVtQ29sID0gdGFibGVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXG4gICAgICAgICAgYHRldGEtaGVhZC1jZWxsW2RhdGEtY29sdW1uPSR7aXRlbS5uYW1lfV1gXG4gICAgICAgICkgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgIGlmIChpdGVtQ29sKSB7XG4gICAgICAgICAgaXRlbS5mbGV4ID0gMDtcbiAgICAgICAgICBpdGVtLndpZHRoID0gaXRlbUNvbC5jbGllbnRXaWR0aDtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcmVzaXplQ29sdW1uKGV2ZW50OiBDb2x1bW5SZXNpemVFdmVudCkge1xuICAgIGlmIChldmVudC5jb2x1bW4gIT09IG51bGwgJiYgZXZlbnQuY29sdW1uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGV2ZW50LmNvbHVtbi53aWR0aCA9IGV2ZW50Lm5ld1dpZHRoIDwgNTAgPyA1MCA6IGV2ZW50Lm5ld1dpZHRoO1xuICAgICAgZXZlbnQuY29sdW1uLmZsZXggPSAwO1xuICAgIH1cbiAgICB0aGlzLl9jb2x1bW5zLm5leHQodGhpcy5kaXNwbGF5Q29sdW1ucyk7XG4gICAgdGhpcy5zYXZlQ29sdW1uc1N0YXRlKCk7XG4gIH1cblxuICBhdXRvc2l6ZUNvbHVtbihjb2x1bW46IFRhYmxlQ29sdW1uLCB0YXJnZXQ6IEhUTUxFbGVtZW50KSB7XG4gICAgY29uc3QgdGFibGVFbGVtZW50ID0gdGhpcy5nZXRUYWJsZUVsZW1lbnQodGFyZ2V0KTtcbiAgICB0aGlzLnNldENvbHVtbkF1dG9XaWR0aChjb2x1bW4sIHRhYmxlRWxlbWVudCBhcyBIVE1MRWxlbWVudCk7XG4gICAgdGhpcy5fY29sdW1ucy5uZXh0KHRoaXMuZGlzcGxheUNvbHVtbnMpO1xuICAgIHRoaXMuc2F2ZUNvbHVtbnNTdGF0ZSgpO1xuICB9XG5cbiAgYXV0b3NpemVBbGxDb2x1bW5zKHRhcmdldDogSFRNTEVsZW1lbnQpIHtcbiAgICBjb25zdCB0YWJsZUVsZW1lbnQgPSB0aGlzLmdldFRhYmxlRWxlbWVudCh0YXJnZXQpO1xuICAgIGNvbnN0IGZsYXQgPSBBcnJheVV0aWwuZmxhdHRlbih0aGlzLmRpc3BsYXlDb2x1bW5zLCAnY29sdW1ucycsIHRydWUpO1xuICAgIGZsYXQuZm9yRWFjaCgoY29sKSA9PlxuICAgICAgdGhpcy5zZXRDb2x1bW5BdXRvV2lkdGgoY29sLCB0YWJsZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQpXG4gICAgKTtcbiAgICB0aGlzLl9jb2x1bW5zLm5leHQodGhpcy5kaXNwbGF5Q29sdW1ucyk7XG4gICAgdGhpcy5zYXZlQ29sdW1uc1N0YXRlKCk7XG4gIH1cblxuICByZW9yZGVyQ29sdW1uKGNvbHVtbjogVGFibGVDb2x1bW4sIGluc2VydEJlZm9yZTogYm9vbGVhbik6IHZvaWQge1xuICAgIGNvbnN0IGV2ZW50ID0gbmV3IENvbHVtblJlb3JkZXJFdmVudCh0aGlzLl9kcmFnU291cmNlLCBjb2x1bW4pO1xuICAgIGlmIChldmVudC5zb3VyY2UgIT09IGV2ZW50LnRhcmdldCkge1xuICAgICAgY29uc3Qgc291cmNlUGFyZW50ID0gdGhpcy5maW5kUGFyZW50KGV2ZW50LnNvdXJjZSwgdGhpcy5kaXNwbGF5Q29sdW1ucyk7XG4gICAgICBjb25zdCB0YXJnZXRQYXJlbnQgPSB0aGlzLmZpbmRQYXJlbnQoZXZlbnQudGFyZ2V0LCB0aGlzLmRpc3BsYXlDb2x1bW5zKTtcblxuICAgICAgaWYgKHNvdXJjZVBhcmVudCAmJiB0YXJnZXRQYXJlbnQpIHtcbiAgICAgICAgY29uc3Qgc291cmNlSW5kZXggPSBzb3VyY2VQYXJlbnQuaW5kZXhPZihldmVudC5zb3VyY2UpO1xuICAgICAgICBzb3VyY2VQYXJlbnQuc3BsaWNlKHNvdXJjZUluZGV4LCAxKTtcbiAgICAgICAgbGV0IHRhcmdldEluZGV4ID0gdGFyZ2V0UGFyZW50LmluZGV4T2YoZXZlbnQudGFyZ2V0KTtcbiAgICAgICAgaWYgKCFpbnNlcnRCZWZvcmUpIHtcbiAgICAgICAgICB0YXJnZXRJbmRleCA9IHRhcmdldEluZGV4ICsgMTtcbiAgICAgICAgfVxuICAgICAgICB0YXJnZXRQYXJlbnQuc3BsaWNlKHRhcmdldEluZGV4LCAwLCBldmVudC5zb3VyY2UpO1xuICAgICAgICBldmVudC5zb3VyY2UubG9ja2VkID0gZXZlbnQudGFyZ2V0LmxvY2tlZDtcblxuICAgICAgICB0aGlzLnVwZGF0ZUNvbHVtbnModGhpcy5kaXNwbGF5Q29sdW1ucyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgc3RhcnRFZGl0Um93KGNlbGxFdmVudDogSUNlbGxFdmVudCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9jdXJyZW50RWRpdENlbGw/LnJvdyAhPT0gY2VsbEV2ZW50Py5yb3cpIHtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50RWRpdENlbGwgIT0gbnVsbCkge1xuICAgICAgICB0aGlzLl9lZGl0Um93U3RvcC5uZXh0KHRoaXMuX2N1cnJlbnRFZGl0Q2VsbCk7XG4gICAgICB9XG4gICAgICBpZiAoY2VsbEV2ZW50ID09PSBudWxsKSB7XG4gICAgICAgIHRoaXMuX2VkaXRSb3dTdGFydC5uZXh0KGNlbGxFdmVudCk7XG4gICAgICAgIHRoaXMuX2N1cnJlbnRFZGl0Q2VsbCA9IGNlbGxFdmVudDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICB0aGlzLmJvb2xPckZ1bmNDYWxsYmFjazxUYWJsZVJvdzxUPj4odGhpcy5yb3dFZGl0YWJsZSkoXG4gICAgICAgICAgICB0aGlzLmdldFJvd0J5SW5kZXgoY2VsbEV2ZW50Py5yb3cpXG4gICAgICAgICAgKVxuICAgICAgICApIHtcbiAgICAgICAgICB0aGlzLl9lZGl0Um93U3RhcnQubmV4dChjZWxsRXZlbnQpO1xuICAgICAgICAgIHRoaXMuX2N1cnJlbnRFZGl0Q2VsbCA9IGNlbGxFdmVudDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHN0YXJ0RWRpdENlbGwoY2VsbEV2ZW50OiBJQ2VsbEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKFxuICAgICAgdGhpcy5fY3VycmVudEVkaXRDZWxsPy5jb2x1bW4gIT09IGNlbGxFdmVudD8uY29sdW1uIHx8XG4gICAgICB0aGlzLl9jdXJyZW50RWRpdENlbGw/LnJvdyAhPT0gY2VsbEV2ZW50Py5yb3dcbiAgICApIHtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50RWRpdENlbGwgIT0gbnVsbCkge1xuICAgICAgICB0aGlzLl9lZGl0Q2VsbFN0b3AubmV4dCh0aGlzLl9jdXJyZW50RWRpdENlbGwpO1xuICAgICAgfVxuICAgICAgY29uc3QgY29sdW1uID0gdGhpcy5nZXRDb2x1bW5CeU5hbWUoY2VsbEV2ZW50Py5jb2x1bW4pO1xuICAgICAgaWYgKFxuICAgICAgICB0aGlzLmJvb2xPckZ1bmNDYWxsYmFjazxJQ2VsbEluc3RhbmNlPFQ+Pihjb2x1bW4/LmVkaXRhYmxlKSh7XG4gICAgICAgICAgcm93OiB0aGlzLmdldFJvd0J5SW5kZXgoY2VsbEV2ZW50Py5yb3cpLFxuICAgICAgICAgIGNvbHVtbjogY29sdW1uXG4gICAgICAgIH0pXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5fZWRpdENlbGxTdGFydC5uZXh0KGNlbGxFdmVudCk7XG4gICAgICAgIHRoaXMuX2N1cnJlbnRFZGl0Q2VsbCA9IGNlbGxFdmVudDtcbiAgICAgICAgY29uc3Qga2V5ID0gKGNlbGxFdmVudD8uZXZlbnQgYXMgS2V5Ym9hcmRFdmVudCk/LmtleTtcbiAgICAgICAgaWYgKGtleSAmJiAoa2V5Lmxlbmd0aCA9PT0gMSB8fCAoa2V5ID09PSAnRGVsZXRlJyAmJiAhY29sdW1uLnJlcXVpcmVkKSkpIHtcbiAgICAgICAgICB0aGlzLmNsZWFyVmFsdWUoY2VsbEV2ZW50KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHNldEFjdGl2ZVJvdyhyb3c6IFRhYmxlUm93PFQ+KTogdm9pZCB7XG4gICAgdGhpcy5fYWN0aXZlUm93Lm5leHQocm93KTtcbiAgfVxuXG4gIHNlbGVjdFJvd3Mocm93czogVGFibGVSb3c8VD5bXSk6IHZvaWQge1xuICAgIHRoaXMuX3NlbGVjdGVkUm93cy5uZXh0KHJvd3MpO1xuICB9XG5cbiAgc2VsZWN0T3JEZXNlbGVjdFJvdyhyb3c6IFRhYmxlUm93PFQ+KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX3NlbGVjdGVkUm93cy52YWx1ZS5pbmRleE9mKHJvdykgPj0gMCkge1xuICAgICAgdGhpcy5fc2VsZWN0ZWRSb3dzLm5leHQoXG4gICAgICAgIHRoaXMuX3NlbGVjdGVkUm93cy52YWx1ZS5maWx0ZXIoKF8pID0+IF8gIT09IHJvdylcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX3NlbGVjdGVkUm93cy5uZXh0KFsuLi50aGlzLl9zZWxlY3RlZFJvd3MudmFsdWUsIHJvd10pO1xuICAgIH1cbiAgfVxuXG4gIHNlbGVjdFJhbmdlKHJvdzogVGFibGVSb3c8VD4pOiB2b2lkIHtcbiAgICBjb25zdCBpbmRleCA9IHRoaXMuX2Rpc3BsYXlEYXRhLnZhbHVlLmluZGV4T2Yocm93KTtcbiAgICBsZXQgbWluSW5kZXggPSB0aGlzLl9zZWxlY3RlZFJvd3MudmFsdWUucmVkdWNlKChwcmV2LCBjdXJyKSA9PiB7XG4gICAgICBjb25zdCBuZXdJbmRleCA9IHRoaXMuX2Rpc3BsYXlEYXRhLnZhbHVlLmluZGV4T2YoY3Vycik7XG4gICAgICBpZiAobmV3SW5kZXggPCBwcmV2KSB7XG4gICAgICAgIHJldHVybiBuZXdJbmRleDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBwcmV2O1xuICAgIH0sIHRoaXMuX2Rpc3BsYXlEYXRhLnZhbHVlLmxlbmd0aCk7XG4gICAgbGV0IG1heEluZGV4ID0gdGhpcy5fc2VsZWN0ZWRSb3dzLnZhbHVlLnJlZHVjZSgocHJldiwgY3VycikgPT4ge1xuICAgICAgY29uc3QgbmV3SW5kZXggPSB0aGlzLl9kaXNwbGF5RGF0YS52YWx1ZS5pbmRleE9mKGN1cnIpO1xuICAgICAgaWYgKG5ld0luZGV4ID4gcHJldikge1xuICAgICAgICByZXR1cm4gbmV3SW5kZXg7XG4gICAgICB9XG4gICAgICByZXR1cm4gcHJldjtcbiAgICB9LCAwKTtcbiAgICBpZiAoaW5kZXggPiBtYXhJbmRleCkge1xuICAgICAgbWF4SW5kZXggPSBpbmRleDtcbiAgICB9XG4gICAgaWYgKGluZGV4IDwgbWluSW5kZXgpIHtcbiAgICAgIG1pbkluZGV4ID0gaW5kZXg7XG4gICAgfVxuICAgIGlmIChtaW5JbmRleCA8IGluZGV4ICYmIGluZGV4IDwgbWF4SW5kZXgpIHtcbiAgICAgIG1heEluZGV4ID0gaW5kZXg7XG4gICAgfVxuICAgIHRoaXMuX3NlbGVjdGVkUm93cy5uZXh0KFsuLi50aGlzLl9kaXNwbGF5RGF0YS52YWx1ZS5zbGljZShtaW5JbmRleCwgbWF4SW5kZXggKyAxKV0pO1xuICB9XG5cbiAgc2VsZWN0Um93KHJvdzogVGFibGVSb3c8VD4pOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zZWxlY3RUeXBlID09PSBTZWxlY3RUeXBlLm5vbmUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5fc2VsZWN0ZWRSb3dzLm5leHQoWy4uLnRoaXMuX3NlbGVjdGVkUm93cy52YWx1ZSwgcm93XSk7XG4gIH1cblxuICBkZXNlbGVjdFJvdyhyb3c6IFRhYmxlUm93PFQ+KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc2VsZWN0VHlwZSA9PT0gU2VsZWN0VHlwZS5ub25lKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuX3NlbGVjdGVkUm93cy5uZXh0KFxuICAgICAgdGhpcy5fc2VsZWN0ZWRSb3dzLnZhbHVlLmZpbHRlcigoXykgPT4gXyAhPT0gcm93KVxuICAgICk7XG4gIH1cblxuICBzZWxlY3RBbGwoKSB7XG4gICAgdGhpcy5fc2VsZWN0ZWRSb3dzLm5leHQodGhpcy5fZGlzcGxheURhdGEudmFsdWUpO1xuICB9XG5cbiAgZGVzZWxlY3RBbGwoKSB7XG4gICAgdGhpcy5fc2VsZWN0ZWRSb3dzLm5leHQoW10pO1xuICB9XG5cbiAgYWxsUm93c1NlbGVjdGVkKCk6IGJvb2xlYW4gfCBudWxsIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLl9kaXNwbGF5RGF0YS52YWx1ZT8ubGVuZ3RoICYmXG4gICAgICB0aGlzLl9zZWxlY3RlZFJvd3MudmFsdWU/Lmxlbmd0aCAmJlxuICAgICAgdGhpcy5fZGlzcGxheURhdGEudmFsdWUuZXZlcnkoXG4gICAgICAgIChfKSA9PiB0aGlzLl9zZWxlY3RlZFJvd3MudmFsdWUuaW5kZXhPZihfKSA+PSAwXG4gICAgICApXG4gICAgKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgdGhpcy5fc2VsZWN0ZWRSb3dzLnZhbHVlID09IG51bGwgfHxcbiAgICAgIHRoaXMuX3NlbGVjdGVkUm93cy52YWx1ZS5sZW5ndGggPT09IDBcbiAgICApIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBzZXRIaWRkZW5Db2x1bW5zKHZhbHVlOiBzdHJpbmdbXSkge1xuICAgIHRoaXMuc2F2ZUhpZGRlbkNvbHVtbnModmFsdWUpO1xuICAgIHRoaXMuX2hpZGRlbkNvbHVtbnMubmV4dCh2YWx1ZSk7XG4gIH1cblxuICBjb2x1bW5Jc0hpZGRlbihjb2x1bW46IFRhYmxlQ29sdW1uKSB7XG4gICAgcmV0dXJuIHRoaXMuX2hpZGRlbkNvbHVtbnMudmFsdWUuaW5kZXhPZihjb2x1bW4ubmFtZSkgPj0gMDtcbiAgfVxuXG4gIHRvZ2dsZUdyb3VwKHJvdzogVGFibGVSb3c8VD4pOiB2b2lkIHtcbiAgICB0aGlzLl9ncm91cFRvZ2dsZS5uZXh0KHJvdyk7XG4gIH1cblxuICBjaGFuZ2VWYWx1ZShjb29yZGluYXRlczogSUNlbGxDb29yZGluYXRlcyk6IHZvaWQge1xuICAgIHRoaXMuX3ZhbHVlQ2hhbmdlZC5uZXh0KGNvb3JkaW5hdGVzKTtcbiAgfVxuXG4gIHNldFZhbHVlKGNlbGxWYWx1ZTogSUNlbGxWYWx1ZSk6IHZvaWQ7XG4gIHNldFZhbHVlKGNlbGxWYWx1ZTogSUNlbGxJbnN0YW5jZVZhbHVlPFQ+KTogdm9pZDtcbiAgc2V0VmFsdWUoY2VsbFZhbHVlOiBJQ2VsbFZhbHVlIHwgSUNlbGxJbnN0YW5jZVZhbHVlPFQ+KTogdm9pZCB7XG4gICAgbGV0IHZhbHVlOiBJQ2VsbFZhbHVlO1xuICAgIGlmICh0eXBlb2YgY2VsbFZhbHVlLnJvdyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIGNlbGxWYWx1ZS5jb2x1bW4gPT09ICdvYmplY3QnKSB7XG4gICAgICB2YWx1ZSA9IHtcbiAgICAgICAgcm93OiB0aGlzLmdldFJvd0luZGV4KGNlbGxWYWx1ZS5yb3cpLFxuICAgICAgICBjb2x1bW46IGNlbGxWYWx1ZS5jb2x1bW4ubmFtZSxcbiAgICAgICAgdmFsdWU6IGNlbGxWYWx1ZS52YWx1ZVxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFsdWUgPSBjZWxsVmFsdWUgYXMgSUNlbGxWYWx1ZTtcbiAgICB9XG4gICAgdGhpcy5fdmFsdWVTZXQubmV4dCh2YWx1ZSk7XG4gIH1cblxuICBnZXRSb3dCeUluZGV4KHJvd0luZGV4OiBudW1iZXIpIHtcbiAgICByZXR1cm4gdGhpcy5fZGlzcGxheURhdGEudmFsdWVbcm93SW5kZXhdO1xuICB9XG5cbiAgZ2V0Um93SW5kZXgocm93OiBUYWJsZVJvdzxUPikge1xuICAgIHJldHVybiB0aGlzLl9kaXNwbGF5RGF0YS52YWx1ZS5pbmRleE9mKHJvdyk7XG4gIH1cblxuICBnZXROZXh0RWRpdGFibGVDZWxsKGNvb3JkczogSUNlbGxDb29yZGluYXRlcyk6IElDZWxsQ29vcmRpbmF0ZXMge1xuICAgIGNvbnN0IG5leHRDZWxsID0gdGhpcy5nZXROZXh0Q2VsbChjb29yZHMpO1xuICAgIGlmICghbmV4dENlbGwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCBjb2x1bW4gPSB0aGlzLmdldENvbHVtbkJ5TmFtZShuZXh0Q2VsbD8uY29sdW1uKTtcbiAgICBpZiAodGhpcy5ib29sT3JGdW5jQ2FsbGJhY2s8SUNlbGxJbnN0YW5jZTxUPj4oY29sdW1uLmVkaXRhYmxlKSh7XG4gICAgICByb3c6IHRoaXMuZ2V0Um93QnlJbmRleChuZXh0Q2VsbC5yb3cpLFxuICAgICAgY29sdW1uXG4gICAgfSkpIHtcbiAgICAgIHJldHVybiBuZXh0Q2VsbDtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZ2V0TmV4dEVkaXRhYmxlQ2VsbChuZXh0Q2VsbCk7XG4gIH1cblxuICBnZXRQcmV2aW91c0VkaXRhYmxlQ2VsbChjb29yZHM6IElDZWxsQ29vcmRpbmF0ZXMpOiBJQ2VsbENvb3JkaW5hdGVzIHtcbiAgICBjb25zdCBwcmV2Q2VsbCA9IHRoaXMuZ2V0UHJldmlvdXNDZWxsKGNvb3Jkcyk7XG4gICAgaWYgKCFwcmV2Q2VsbCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNvbnN0IGNvbHVtbiA9IHRoaXMuZ2V0Q29sdW1uQnlOYW1lKHByZXZDZWxsPy5jb2x1bW4pO1xuICAgIGlmICh0aGlzLmJvb2xPckZ1bmNDYWxsYmFjazxJQ2VsbEluc3RhbmNlPFQ+Pihjb2x1bW4uZWRpdGFibGUpKHtcbiAgICAgIHJvdzogdGhpcy5nZXRSb3dCeUluZGV4KHByZXZDZWxsLnJvdyksXG4gICAgICBjb2x1bW5cbiAgICB9KSkge1xuICAgICAgcmV0dXJuIHByZXZDZWxsO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5nZXRQcmV2aW91c0VkaXRhYmxlQ2VsbChwcmV2Q2VsbCk7XG4gIH1cblxuICBnZXROZXh0Q2VsbChjb29yZHM6IElDZWxsQ29vcmRpbmF0ZXMpOiBJQ2VsbENvb3JkaW5hdGVzIHtcbiAgICBjb25zdCBjb2x1bW5zID0gdGhpcy5nZXRGbGF0Q29sdW1ucygpO1xuICAgIGxldCBjb2xJbmRleCA9IGNvbHVtbnMuZmluZEluZGV4KChjb2w6IFRhYmxlQ29sdW1uKSA9PiBjb2wubmFtZSA9PT0gY29vcmRzPy5jb2x1bW4pO1xuICAgIGxldCByb3dJbmRleCA9IGNvb3Jkcz8ucm93O1xuICAgIGlmIChjb2xJbmRleCA+PSAwICYmIHJvd0luZGV4ID49IDApIHtcbiAgICAgIGlmIChjb2xJbmRleCA9PT0gY29sdW1ucy5sZW5ndGggLSAxKSB7XG4gICAgICAgIGNvbEluZGV4ID0gMDtcbiAgICAgICAgcm93SW5kZXggPSByb3dJbmRleCArIDE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb2xJbmRleCA9IGNvbEluZGV4ICsgMTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbHVtbjogY29sdW1uc1tjb2xJbmRleF0/Lm5hbWUsXG4gICAgICAgIHJvdzogcm93SW5kZXhcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgZ2V0UHJldmlvdXNDZWxsKGNvb3JkczogSUNlbGxDb29yZGluYXRlcyk6IElDZWxsQ29vcmRpbmF0ZXMge1xuICAgIGNvbnN0IGNvbHVtbnMgPSB0aGlzLmdldEZsYXRDb2x1bW5zKCk7XG4gICAgbGV0IGNvbEluZGV4ID0gY29sdW1ucy5maW5kSW5kZXgoKGNvbDogVGFibGVDb2x1bW4pID0+IGNvbC5uYW1lID09PSBjb29yZHM/LmNvbHVtbik7XG4gICAgbGV0IHJvd0luZGV4ID0gY29vcmRzPy5yb3c7XG4gICAgaWYgKGNvbEluZGV4ID49IDAgJiYgcm93SW5kZXggPj0gMCkge1xuICAgICAgaWYgKGNvbEluZGV4ID09PSAwKSB7XG4gICAgICAgIGNvbEluZGV4ID0gY29sdW1ucy5sZW5ndGggLSAxO1xuICAgICAgICByb3dJbmRleCA9IHJvd0luZGV4IC0gMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbEluZGV4ID0gY29sSW5kZXggLSAxO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29sdW1uOiBjb2x1bW5zW2NvbEluZGV4XT8ubmFtZSxcbiAgICAgICAgcm93OiByb3dJbmRleFxuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBnZXROZXh0Um93Q2VsbChjb29yZHM6IElDZWxsQ29vcmRpbmF0ZXMpOiBJQ2VsbENvb3JkaW5hdGVzIHtcbiAgICBjb25zdCBjb2x1bW5zID0gdGhpcy5nZXRGbGF0Q29sdW1ucygpO1xuICAgIGxldCBjb2xJbmRleCA9IGNvbHVtbnMuZmluZEluZGV4KChjb2w6IFRhYmxlQ29sdW1uKSA9PiBjb2wubmFtZSA9PT0gY29vcmRzPy5jb2x1bW4pO1xuICAgIGxldCByb3dJbmRleCA9IGNvb3Jkcz8ucm93O1xuICAgIGlmIChjb2xJbmRleCA+PSAwICYmIHJvd0luZGV4ID49IDAgJiYgcm93SW5kZXggPCB0aGlzLl9kaXNwbGF5RGF0YS52YWx1ZS5sZW5ndGggLSAxKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb2x1bW46IGNvbHVtbnNbY29sSW5kZXhdPy5uYW1lLFxuICAgICAgICByb3c6IHJvd0luZGV4ICsgMVxuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBnZXRQcmV2aW91c1Jvd0NlbGwoY29vcmRzOiBJQ2VsbENvb3JkaW5hdGVzKSB7XG4gICAgY29uc3QgY29sdW1ucyA9IHRoaXMuZ2V0RmxhdENvbHVtbnMoKTtcbiAgICBsZXQgY29sSW5kZXggPSBjb2x1bW5zLmZpbmRJbmRleCgoY29sOiBUYWJsZUNvbHVtbikgPT4gY29sLm5hbWUgPT09IGNvb3Jkcz8uY29sdW1uKTtcbiAgICBsZXQgcm93SW5kZXggPSBjb29yZHM/LnJvdztcbiAgICBpZiAoY29sSW5kZXggPj0gMCAmJiByb3dJbmRleCA+IDEpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbHVtbjogY29sdW1uc1tjb2xJbmRleF0/Lm5hbWUsXG4gICAgICAgIHJvdzogcm93SW5kZXggLSAxXG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGdldENvbHVtbkJ5TmFtZShjb2x1bW5OYW1lOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gQXJyYXlVdGlsLmZpbmRSZWN1cnNpdmUoXG4gICAgICB0aGlzLmRpc3BsYXlDb2x1bW5zLFxuICAgICAgKGl0ZXJhYmxlTm9kZSkgPT4gY29sdW1uTmFtZSA9PT0gaXRlcmFibGVOb2RlLm5hbWUsXG4gICAgICAnY29sdW1ucydcbiAgICApO1xuICB9XG5cbiAgc2Nyb2xsVG9JbmRleChpbmRleDogbnVtYmVyKSB7XG4gICAgdGhpcy5fc2Nyb2xsSW5kZXgubmV4dChudWxsKTtcbiAgICB0aGlzLl9zY3JvbGxJbmRleC5uZXh0KGluZGV4KTtcbiAgfVxuXG4gIGJvb2xPckZ1bmNDYWxsYmFjazxNPih2YXJpYWJsZTogYm9vbGVhbiB8ICgocm93OiBNKSA9PiBib29sZWFuKSkge1xuICAgIHJldHVybiAoYXJnczogTSkgPT4ge1xuICAgICAgaWYgKHR5cGVvZiB2YXJpYWJsZSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgIHJldHVybiB2YXJpYWJsZTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5pc0Z1bmN0aW9uKHZhcmlhYmxlKSkge1xuICAgICAgICByZXR1cm4gKHZhcmlhYmxlIGFzIChyb3c6IE0pID0+IGJvb2xlYW4pKGFyZ3MpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfTtcbiAgfVxuXG4gIGdldFZpc2libGVDb2x1bW5zKCkge1xuICAgIGNvbnN0IHZpc2libGUgPSBBcnJheVV0aWwuZmxhdHRlbih0aGlzLl9jb2x1bW5zLnZhbHVlLCAnY29sdW1ucycsIHRydWUpLmZpbHRlcihcbiAgICAgIChfKSA9PiB0aGlzLl9oaWRkZW5Db2x1bW5zLnZhbHVlLmluZGV4T2YoXy5uYW1lKSA8IDBcbiAgICApO1xuICAgIHJldHVybiB2aXNpYmxlLnNvcnQoKGEsIGIpID0+IE51bWJlcihiLmxvY2tlZCkgLSBOdW1iZXIoYS5sb2NrZWQpKTtcbiAgfVxuXG4gIGdldENlbGxJbnN0YW5jZShjb29yZHM6IElDZWxsQ29vcmRpbmF0ZXMpOiBJQ2VsbEluc3RhbmNlPFQ+IHtcbiAgICByZXR1cm4gY29vcmRzID8ge1xuICAgICAgcm93OiB0aGlzLmdldFJvd0J5SW5kZXgoY29vcmRzLnJvdyksXG4gICAgICBjb2x1bW46IHRoaXMuZ2V0Q29sdW1uQnlOYW1lKGNvb3Jkcy5jb2x1bW4pXG4gICAgfSA6IG51bGw7XG4gIH1cblxuICBwcml2YXRlIGdldEZsYXRDb2x1bW5zKCkge1xuICAgIHJldHVybiBBcnJheVV0aWwuZmxhdHRlbih0aGlzLmRpc3BsYXlDb2x1bW5zLCAnY29sdW1ucycsIHRydWUpLnNvcnQoXG4gICAgICAoYSwgYikgPT4gTnVtYmVyKGIubG9ja2VkKSAtIE51bWJlcihhLmxvY2tlZClcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBmaW5kUGFyZW50KFxuICAgIGNvbHVtbjogVGFibGVDb2x1bW4sXG4gICAgY29sdW1uczogVGFibGVDb2x1bW5bXVxuICApOiBUYWJsZUNvbHVtbltdIHwgbnVsbCB7XG4gICAgY29uc3QgZm91bmQgPSBjb2x1bW5zLmZpbmQoKHgpID0+IHgubmFtZSA9PT0gY29sdW1uLm5hbWUpO1xuICAgIGlmIChmb3VuZCAhPT0gbnVsbCAmJiBmb3VuZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gY29sdW1ucztcbiAgICB9XG4gICAgZm9yIChsZXQgaSA9IDAsIGwgPSBjb2x1bW5zLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgY29uc3QgY29sID0gY29sdW1uc1tpXTtcbiAgICAgIGlmIChjb2wuY29sdW1ucyAmJiBjb2wuY29sdW1ucy5sZW5ndGgpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5maW5kUGFyZW50KGNvbHVtbiwgY29sLmNvbHVtbnMpO1xuICAgICAgICBpZiAocmVzdWx0ICE9PSBudWxsICYmIHJlc3VsdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0VGFibGVFbGVtZW50KGVsZW1lbnQ6IEhUTUxFbGVtZW50KSB7XG4gICAgcmV0dXJuIGVsZW1lbnQuY2xvc2VzdCgndGV0YS10YWJsZScpO1xuICB9XG5cbiAgcHJpdmF0ZSBpc0Z1bmN0aW9uKG9iajogYW55KSB7XG4gICAgcmV0dXJuICEhKG9iaiAmJiBvYmo/LmNvbnN0cnVjdG9yICYmIG9iaj8uY2FsbCAmJiBvYmo/LmFwcGx5KTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0Q29sdW1uQXV0b1dpZHRoKGNvbHVtbjogVGFibGVDb2x1bW4sIHRhYmxlOiBIVE1MRWxlbWVudCkge1xuICAgIGNvbnN0IGNlbGxzID0gdGFibGUucXVlcnlTZWxlY3RvckFsbChcbiAgICAgIGB0ZXRhLWNlbGxbZGF0YS1jb2x1bW49JHtjb2x1bW4ubmFtZX1dIC5jZWxsLXRleHRgXG4gICAgKTtcbiAgICBsZXQgbWF4V2lkdGggPSAwO1xuICAgIGNlbGxzLmZvckVhY2goKGNlbGwpID0+IHtcbiAgICAgIGlmIChjZWxsLnNjcm9sbFdpZHRoID4gbWF4V2lkdGgpIHtcbiAgICAgICAgbWF4V2lkdGggPSBjZWxsLnNjcm9sbFdpZHRoO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbHVtbi5mbGV4ID0gMDtcbiAgICBjb2x1bW4ud2lkdGggPSBtYXhXaWR0aCArIDIwO1xuICB9XG5cbiAgcHJpdmF0ZSBjbGVhclZhbHVlKGV2ZW50OiBJQ2VsbEV2ZW50KSB7XG4gICAgdGhpcy5zZXRWYWx1ZSh7XG4gICAgICAuLi5ldmVudCxcbiAgICAgIHZhbHVlOiBudWxsXG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==