@fundamental-ngx/core 0.44.0-rc.2 → 0.44.0-rc.4

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 (203) hide show
  1. package/avatar/avatar.component.d.ts +0 -1
  2. package/bar/directives/bar-element.directive.d.ts +6 -3
  3. package/breadcrumb/breadcrumb.component.d.ts +4 -4
  4. package/carousel/carousel.component.d.ts +8 -2
  5. package/content-density/providers/content-density-observer-providers.d.ts +1 -1
  6. package/content-density/services/content-density-observer.service.d.ts +3 -3
  7. package/date-picker/date-picker.component.d.ts +30 -9
  8. package/datetime-picker/datetime-picker.component.d.ts +28 -10
  9. package/dialog/dialog-container/dialog-container.component.d.ts +4 -4
  10. package/dialog/dialog-footer-button/dialog-footer-button.component.d.ts +2 -0
  11. package/dialog/directives/dialog-decisive-button.directive.d.ts +2 -0
  12. package/dialog/utils/dialog-config.class.d.ts +1 -1
  13. package/esm2022/action-bar/action-bar.component.mjs +10 -3
  14. package/esm2022/alert/alert-service/alert.service.mjs +12 -3
  15. package/esm2022/alert/alert-utils/alert-config.mjs +11 -3
  16. package/esm2022/alert/alert-utils/alert-container.component.mjs +11 -3
  17. package/esm2022/alert/alert-utils/alert-ref.mjs +11 -3
  18. package/esm2022/alert/alert.component.mjs +17 -3
  19. package/esm2022/alert/alert.module.mjs +11 -3
  20. package/esm2022/avatar/avatar.component.mjs +2 -2
  21. package/esm2022/bar/directives/bar-element.directive.mjs +15 -7
  22. package/esm2022/breadcrumb/breadcrumb.component.mjs +9 -11
  23. package/esm2022/carousel/carousel.component.mjs +34 -5
  24. package/esm2022/combobox/combobox-mobile/combobox-mobile.component.mjs +1 -1
  25. package/esm2022/content-density/providers/content-density-observer-providers.mjs +4 -4
  26. package/esm2022/content-density/services/content-density-observer.service.mjs +13 -13
  27. package/esm2022/date-picker/date-picker.component.mjs +103 -10
  28. package/esm2022/datetime-picker/datetime-picker.component.mjs +78 -8
  29. package/esm2022/dialog/dialog-container/dialog-container.component.mjs +12 -13
  30. package/esm2022/dialog/dialog-footer-button/dialog-footer-button.component.mjs +8 -3
  31. package/esm2022/dialog/dialog-header/dialog-header.component.mjs +1 -1
  32. package/esm2022/dialog/directives/dialog-decisive-button.directive.mjs +6 -2
  33. package/esm2022/dialog/utils/dialog-config.class.mjs +1 -1
  34. package/esm2022/feed-list-item/components/item/feed-list-item.component.mjs +23 -1
  35. package/esm2022/form/form-label/form-label.component.mjs +21 -5
  36. package/esm2022/list/list-item/list-item.component.mjs +36 -1
  37. package/esm2022/menu/menu-mobile/menu-mobile.component.mjs +1 -1
  38. package/esm2022/message-box/directives/message-box-decisive-button.directive.mjs +6 -2
  39. package/esm2022/message-box/message-box-container/message-box-container.component.mjs +12 -15
  40. package/esm2022/message-box/message-box-footer-button/message-box-footer-button.component.mjs +8 -3
  41. package/esm2022/message-box/message-box-header/message-box-header.component.mjs +1 -1
  42. package/esm2022/message-strip/alert/message-strip-alert-container-footer/message-strip-alert-container-footer.component.mjs +8 -9
  43. package/esm2022/message-strip/auto-dismiss-message-strip.directive.mjs +10 -9
  44. package/esm2022/message-strip/message-strip.component.mjs +12 -1
  45. package/esm2022/multi-combobox/base-multi-combobox.class.mjs +17 -14
  46. package/esm2022/multi-combobox/mobile/mobile-multi-combobox.component.mjs +1 -1
  47. package/esm2022/multi-combobox/multi-combobox.component.mjs +44 -45
  48. package/esm2022/multi-combobox/select-all-toggler/select-all-toggler.component.mjs +8 -10
  49. package/esm2022/multi-input/multi-input-mobile/multi-input-mobile.component.mjs +1 -1
  50. package/esm2022/overflow-layout/directives/overflow-layout-popover-content.directive.mjs +9 -11
  51. package/esm2022/pagination/pagination.component.mjs +140 -2
  52. package/esm2022/popover/base/base-popover.class.mjs +25 -1
  53. package/esm2022/popover/popover.component.mjs +28 -17
  54. package/esm2022/product-switch/product-switch/product-switch.component.mjs +11 -1
  55. package/esm2022/quick-view/quick-view-title/quick-view-title.component.mjs +1 -1
  56. package/esm2022/segmented-button/segmented-button.component.mjs +19 -21
  57. package/esm2022/select/select.component.mjs +17 -10
  58. package/esm2022/shellbar/shellbar-actions/shellbar-actions.component.mjs +12 -1
  59. package/esm2022/shellbar/shellbar.component.mjs +12 -11
  60. package/esm2022/side-navigation/side-navigation.component.mjs +12 -3
  61. package/esm2022/slider/slider.component.mjs +83 -13
  62. package/esm2022/split-button/split-button.component.mjs +34 -16
  63. package/esm2022/splitter/splitter-pagination/splitter-pagination.component.mjs +9 -2
  64. package/esm2022/splitter/splitter.component.mjs +16 -5
  65. package/esm2022/step-input/step-input.component.mjs +46 -24
  66. package/esm2022/switch/switch.component.mjs +25 -3
  67. package/esm2022/table/directives/table-cell.directive.mjs +5 -7
  68. package/esm2022/table/directives/table-row.directive.mjs +17 -20
  69. package/esm2022/table/table.component.mjs +10 -9
  70. package/esm2022/tabs/tab-item-expand/tab-item-expand.component.mjs +11 -1
  71. package/esm2022/tabs/tab-list.component.mjs +40 -31
  72. package/esm2022/text/text.component.mjs +23 -1
  73. package/esm2022/time/i18n/time-i18n.mjs +2 -2
  74. package/esm2022/token/token.component.mjs +36 -14
  75. package/esm2022/toolbar/toolbar.component.mjs +33 -26
  76. package/esm2022/tree/components/tree-item/tree-item.component.mjs +21 -21
  77. package/esm2022/tree/tree.component.mjs +23 -22
  78. package/esm2022/upload-collection/upload-collection-button-group/upload-collection-button-group.component.mjs +67 -1
  79. package/esm2022/upload-collection/upload-collection-form-item/upload-collection-form-item.component.mjs +12 -1
  80. package/feed-list-item/components/item/feed-list-item.component.d.ts +8 -2
  81. package/fesm2022/fundamental-ngx-core-action-bar.mjs +9 -2
  82. package/fesm2022/fundamental-ngx-core-action-bar.mjs.map +1 -1
  83. package/fesm2022/fundamental-ngx-core-alert.mjs +58 -13
  84. package/fesm2022/fundamental-ngx-core-alert.mjs.map +1 -1
  85. package/fesm2022/fundamental-ngx-core-avatar.mjs +1 -1
  86. package/fesm2022/fundamental-ngx-core-avatar.mjs.map +1 -1
  87. package/fesm2022/fundamental-ngx-core-bar.mjs +14 -6
  88. package/fesm2022/fundamental-ngx-core-bar.mjs.map +1 -1
  89. package/fesm2022/fundamental-ngx-core-breadcrumb.mjs +9 -10
  90. package/fesm2022/fundamental-ngx-core-breadcrumb.mjs.map +1 -1
  91. package/fesm2022/fundamental-ngx-core-carousel.mjs +32 -3
  92. package/fesm2022/fundamental-ngx-core-carousel.mjs.map +1 -1
  93. package/fesm2022/fundamental-ngx-core-combobox.mjs +1 -1
  94. package/fesm2022/fundamental-ngx-core-combobox.mjs.map +1 -1
  95. package/fesm2022/fundamental-ngx-core-content-density.mjs +15 -14
  96. package/fesm2022/fundamental-ngx-core-content-density.mjs.map +1 -1
  97. package/fesm2022/fundamental-ngx-core-date-picker.mjs +102 -9
  98. package/fesm2022/fundamental-ngx-core-date-picker.mjs.map +1 -1
  99. package/fesm2022/fundamental-ngx-core-datetime-picker.mjs +77 -7
  100. package/fesm2022/fundamental-ngx-core-datetime-picker.mjs.map +1 -1
  101. package/fesm2022/fundamental-ngx-core-dialog.mjs +23 -13
  102. package/fesm2022/fundamental-ngx-core-dialog.mjs.map +1 -1
  103. package/fesm2022/fundamental-ngx-core-feed-list-item.mjs +22 -0
  104. package/fesm2022/fundamental-ngx-core-feed-list-item.mjs.map +1 -1
  105. package/fesm2022/fundamental-ngx-core-form.mjs +20 -4
  106. package/fesm2022/fundamental-ngx-core-form.mjs.map +1 -1
  107. package/fesm2022/fundamental-ngx-core-list.mjs +35 -0
  108. package/fesm2022/fundamental-ngx-core-list.mjs.map +1 -1
  109. package/fesm2022/fundamental-ngx-core-menu.mjs +1 -1
  110. package/fesm2022/fundamental-ngx-core-menu.mjs.map +1 -1
  111. package/fesm2022/fundamental-ngx-core-message-box.mjs +24 -15
  112. package/fesm2022/fundamental-ngx-core-message-box.mjs.map +1 -1
  113. package/fesm2022/fundamental-ngx-core-message-strip.mjs +27 -14
  114. package/fesm2022/fundamental-ngx-core-message-strip.mjs.map +1 -1
  115. package/fesm2022/fundamental-ngx-core-multi-combobox.mjs +63 -64
  116. package/fesm2022/fundamental-ngx-core-multi-combobox.mjs.map +1 -1
  117. package/fesm2022/fundamental-ngx-core-multi-input.mjs +1 -1
  118. package/fesm2022/fundamental-ngx-core-multi-input.mjs.map +1 -1
  119. package/fesm2022/fundamental-ngx-core-overflow-layout.mjs +9 -10
  120. package/fesm2022/fundamental-ngx-core-overflow-layout.mjs.map +1 -1
  121. package/fesm2022/fundamental-ngx-core-pagination.mjs +139 -1
  122. package/fesm2022/fundamental-ngx-core-pagination.mjs.map +1 -1
  123. package/fesm2022/fundamental-ngx-core-popover.mjs +51 -16
  124. package/fesm2022/fundamental-ngx-core-popover.mjs.map +1 -1
  125. package/fesm2022/fundamental-ngx-core-product-switch.mjs +10 -0
  126. package/fesm2022/fundamental-ngx-core-product-switch.mjs.map +1 -1
  127. package/fesm2022/fundamental-ngx-core-quick-view.mjs +1 -1
  128. package/fesm2022/fundamental-ngx-core-quick-view.mjs.map +1 -1
  129. package/fesm2022/fundamental-ngx-core-segmented-button.mjs +17 -19
  130. package/fesm2022/fundamental-ngx-core-segmented-button.mjs.map +1 -1
  131. package/fesm2022/fundamental-ngx-core-select.mjs +16 -9
  132. package/fesm2022/fundamental-ngx-core-select.mjs.map +1 -1
  133. package/fesm2022/fundamental-ngx-core-shellbar.mjs +22 -10
  134. package/fesm2022/fundamental-ngx-core-shellbar.mjs.map +1 -1
  135. package/fesm2022/fundamental-ngx-core-side-navigation.mjs +11 -2
  136. package/fesm2022/fundamental-ngx-core-side-navigation.mjs.map +1 -1
  137. package/fesm2022/fundamental-ngx-core-slider.mjs +82 -12
  138. package/fesm2022/fundamental-ngx-core-slider.mjs.map +1 -1
  139. package/fesm2022/fundamental-ngx-core-split-button.mjs +32 -13
  140. package/fesm2022/fundamental-ngx-core-split-button.mjs.map +1 -1
  141. package/fesm2022/fundamental-ngx-core-splitter.mjs +23 -5
  142. package/fesm2022/fundamental-ngx-core-splitter.mjs.map +1 -1
  143. package/fesm2022/fundamental-ngx-core-step-input.mjs +45 -23
  144. package/fesm2022/fundamental-ngx-core-step-input.mjs.map +1 -1
  145. package/fesm2022/fundamental-ngx-core-switch.mjs +24 -2
  146. package/fesm2022/fundamental-ngx-core-switch.mjs.map +1 -1
  147. package/fesm2022/fundamental-ngx-core-table.mjs +26 -30
  148. package/fesm2022/fundamental-ngx-core-table.mjs.map +1 -1
  149. package/fesm2022/fundamental-ngx-core-tabs.mjs +51 -31
  150. package/fesm2022/fundamental-ngx-core-tabs.mjs.map +1 -1
  151. package/fesm2022/fundamental-ngx-core-text.mjs +22 -0
  152. package/fesm2022/fundamental-ngx-core-text.mjs.map +1 -1
  153. package/fesm2022/fundamental-ngx-core-time.mjs +1 -1
  154. package/fesm2022/fundamental-ngx-core-time.mjs.map +1 -1
  155. package/fesm2022/fundamental-ngx-core-token.mjs +36 -13
  156. package/fesm2022/fundamental-ngx-core-token.mjs.map +1 -1
  157. package/fesm2022/fundamental-ngx-core-toolbar.mjs +31 -24
  158. package/fesm2022/fundamental-ngx-core-toolbar.mjs.map +1 -1
  159. package/fesm2022/fundamental-ngx-core-tree.mjs +38 -38
  160. package/fesm2022/fundamental-ngx-core-tree.mjs.map +1 -1
  161. package/fesm2022/fundamental-ngx-core-upload-collection.mjs +77 -0
  162. package/fesm2022/fundamental-ngx-core-upload-collection.mjs.map +1 -1
  163. package/form/form-label/form-label.component.d.ts +8 -2
  164. package/fundamental-ngx-core-v0.44.0-rc.4.tgz +0 -0
  165. package/list/list-item/list-item.component.d.ts +16 -4
  166. package/message-box/directives/message-box-decisive-button.directive.d.ts +2 -0
  167. package/message-box/message-box-container/message-box-container.component.d.ts +4 -6
  168. package/message-box/message-box-footer-button/message-box-footer-button.component.d.ts +2 -0
  169. package/message-strip/alert/message-strip-alert-container-footer/message-strip-alert-container-footer.component.d.ts +1 -1
  170. package/message-strip/auto-dismiss-message-strip.directive.d.ts +3 -3
  171. package/message-strip/message-strip.component.d.ts +4 -1
  172. package/multi-combobox/base-multi-combobox.class.d.ts +30 -30
  173. package/multi-combobox/multi-combobox.component.d.ts +17 -18
  174. package/multi-combobox/select-all-toggler/select-all-toggler.component.d.ts +1 -1
  175. package/overflow-layout/directives/overflow-layout-popover-content.directive.d.ts +5 -6
  176. package/package.json +3 -3
  177. package/pagination/pagination.component.d.ts +44 -11
  178. package/popover/base/base-popover.class.d.ts +12 -3
  179. package/popover/popover.component.d.ts +8 -5
  180. package/product-switch/product-switch/product-switch.component.d.ts +4 -1
  181. package/schematics/add-dependencies/index.js +4 -4
  182. package/segmented-button/segmented-button.component.d.ts +6 -7
  183. package/select/select.component.d.ts +9 -6
  184. package/shellbar/shellbar-actions/shellbar-actions.component.d.ts +6 -3
  185. package/shellbar/shellbar.component.d.ts +1 -1
  186. package/slider/slider.component.d.ts +13 -4
  187. package/split-button/split-button.component.d.ts +11 -6
  188. package/splitter/splitter.component.d.ts +5 -2
  189. package/step-input/step-input.component.d.ts +12 -6
  190. package/switch/switch.component.d.ts +10 -4
  191. package/table/directives/table-row.directive.d.ts +2 -4
  192. package/table/table.component.d.ts +3 -4
  193. package/tabs/tab-item-expand/tab-item-expand.component.d.ts +4 -1
  194. package/tabs/tab-list.component.d.ts +10 -8
  195. package/text/text.component.d.ts +8 -2
  196. package/time/i18n/time-i18n.d.ts +2 -2
  197. package/token/token.component.d.ts +13 -7
  198. package/toolbar/toolbar.component.d.ts +10 -7
  199. package/tree/components/tree-item/tree-item.component.d.ts +28 -28
  200. package/tree/tree.component.d.ts +7 -7
  201. package/upload-collection/upload-collection-button-group/upload-collection-button-group.component.d.ts +24 -6
  202. package/upload-collection/upload-collection-form-item/upload-collection-form-item.component.d.ts +6 -3
  203. package/fundamental-ngx-core-v0.44.0-rc.2.tgz +0 -0
@@ -17,6 +17,28 @@ import * as i5 from "@fundamental-ngx/core/form";
17
17
  import * as i6 from "@fundamental-ngx/i18n";
18
18
  let stepInputUniqueId = 0;
19
19
  export class StepInputComponent {
20
+ /**
21
+ * @deprecated use i18n capabilities instead
22
+ * Sets Increment Button title attribute
23
+ */
24
+ set incrementButtonTitle(value) {
25
+ console.warn("Property incrementButtonTitle is deprecated. Use i18n capabilities 'coreStepInput.incrementButtonTitle' key instead.");
26
+ this._incrementButtonTitle = value;
27
+ }
28
+ get incrementButtonTitle() {
29
+ return this._incrementButtonTitle;
30
+ }
31
+ /**
32
+ * @deprecated use i18n capabilities instead
33
+ * Sets Decrement Button title attribute
34
+ */
35
+ set decrementButtonTitle(value) {
36
+ console.warn("Property decrementButtonTitle is deprecated. Use i18n capabilities 'coreStepInput.decrementButtonTitle' key instead.");
37
+ this._decrementButtonTitle = value;
38
+ }
39
+ get decrementButtonTitle() {
40
+ return this._decrementButtonTitle;
41
+ }
20
42
  /** Set control value */
21
43
  set value(value) {
22
44
  if (value == null) {
@@ -134,29 +156,6 @@ export class StepInputComponent {
134
156
  this._incrementOrDecrement('decrement');
135
157
  }
136
158
  /** @hidden */
137
- _incrementOrDecrement(direction) {
138
- if ((direction === 'increment' && this.canIncrement) || (direction === 'decrement' && this.canDecrement)) {
139
- let _shouldChange = true;
140
- if (this.value == null && this._firstEmittedValue) {
141
- this._value = this._firstEmittedValue;
142
- let _limit;
143
- direction === 'increment' ? (_limit = this.max) : (_limit = this.min);
144
- if (this._firstEmittedValue === _limit) {
145
- this._value = _limit;
146
- _shouldChange = false;
147
- }
148
- }
149
- if (_shouldChange) {
150
- this._value =
151
- direction === 'increment'
152
- ? this._cutFloatingNumberDistortion(this.value, this.step)
153
- : this._cutFloatingNumberDistortion(this.value, -this.step);
154
- }
155
- this._emitChangedValue();
156
- this._updateViewValue();
157
- }
158
- }
159
- /** @hidden */
160
159
  handleKeyDown(event) {
161
160
  const muteEvent = (evnt) => {
162
161
  evnt.stopPropagation();
@@ -213,6 +212,29 @@ export class StepInputComponent {
213
212
  this._value = parsedValue != null ? this._checkValueLimits(parsedValue) : null;
214
213
  }
215
214
  /** @hidden */
215
+ _incrementOrDecrement(direction) {
216
+ if ((direction === 'increment' && this.canIncrement) || (direction === 'decrement' && this.canDecrement)) {
217
+ let _shouldChange = true;
218
+ if (this.value == null && this._firstEmittedValue) {
219
+ this._value = this._firstEmittedValue;
220
+ let _limit;
221
+ direction === 'increment' ? (_limit = this.max) : (_limit = this.min);
222
+ if (this._firstEmittedValue === _limit) {
223
+ this._value = _limit;
224
+ _shouldChange = false;
225
+ }
226
+ }
227
+ if (_shouldChange) {
228
+ this._value =
229
+ direction === 'increment'
230
+ ? this._cutFloatingNumberDistortion(this.value, this.step)
231
+ : this._cutFloatingNumberDistortion(this.value, -this.step);
232
+ }
233
+ this._emitChangedValue();
234
+ this._updateViewValue();
235
+ }
236
+ }
237
+ /** @hidden */
216
238
  get _canChangeValue() {
217
239
  return !(this.disabled || this.readonly);
218
240
  }
@@ -498,4 +520,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.0", ngImpor
498
520
  type: ViewChild,
499
521
  args: ['inputElement', { read: ElementRef, static: true }]
500
522
  }] } });
501
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RlcC1pbnB1dC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvc3JjL2xpYi9zdGVwLWlucHV0L3N0ZXAtaW5wdXQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvc3RlcC1pbnB1dC9zdGVwLWlucHV0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFSCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLFVBQVUsRUFDVixNQUFNLEVBQ04sS0FBSyxFQUNMLFNBQVMsRUFDVCxTQUFTLEVBR1QsTUFBTSxFQUNOLFNBQVMsRUFDVCxpQkFBaUIsRUFDcEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUF3QixpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQWMsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMxRixPQUFPLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5RCxPQUFPLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDM0UsT0FBTyxFQUFFLE9BQU8sRUFBWSxNQUFNLDRCQUE0QixDQUFDO0FBRS9ELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNsRCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsK0JBQStCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUNoSCxPQUFPLEVBQW1CLHVCQUF1QixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDdEYsSUFBTyxZQUFZLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQzs7Ozs7Ozs7QUFHeEMsSUFBSSxpQkFBaUIsR0FBRyxDQUFDLENBQUM7QUFzQjFCLE1BQU0sT0FBTyxrQkFBa0I7SUErRDNCLHdCQUF3QjtJQUN4QixJQUNJLEtBQUssQ0FBQyxLQUF1QjtRQUM3QixJQUFJLEtBQUssSUFBSSxJQUFJLEVBQUU7WUFDZixtQ0FBbUM7WUFDbkMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7U0FDdEI7YUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ3RCLEtBQUssR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDdEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDL0M7UUFDRCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUNwQyxJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDekMsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7U0FDekM7UUFDRCxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUU7WUFDcEIsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7U0FDM0I7SUFDTCxDQUFDO0lBRUQsb0JBQW9CO0lBQ3BCLElBQUksS0FBSztRQUNMLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUN2QixDQUFDO0lBNklELGNBQWM7SUFDZCxZQUN1QixNQUFNLEVBQ2pCLGtCQUFxQyxFQUM1QixjQUE2QixFQUNyQyx1QkFBK0MsRUFDdkMsV0FBdUI7UUFIaEMsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFtQjtRQUM1QixtQkFBYyxHQUFkLGNBQWMsQ0FBZTtRQUNyQyw0QkFBdUIsR0FBdkIsdUJBQXVCLENBQXdCO1FBQ3ZDLGdCQUFXLEdBQVgsV0FBVyxDQUFZO1FBM041QywrQkFBK0I7UUFFL0IsYUFBUSxHQUFHLEtBQUssQ0FBQztRQVVqQiw4Q0FBOEM7UUFFOUMsd0JBQW1CLEdBQUcsS0FBSyxDQUFDO1FBRTVCLDhDQUE4QztRQUU5Qyx3QkFBbUIsR0FBRyxNQUFNLENBQUM7UUE0QjdCLG9CQUFvQjtRQUVwQixZQUFPLEdBQUcsaUJBQWlCLGlCQUFpQixFQUFFLEVBQUUsQ0FBQztRQWtDakQsNEJBQTRCO1FBRTVCLFNBQUksR0FBRyxDQUFDLENBQUM7UUFNVCxpQ0FBaUM7UUFFakMsZUFBVSxHQUFHLEVBQUUsQ0FBQztRQUVoQiwyQkFBMkI7UUFFM0IsU0FBSSxHQUEyQixTQUFTLENBQUM7UUFFekMsMkdBQTJHO1FBRTNHLFVBQUssR0FBZSxTQUFTLENBQUM7UUFVOUIsb0RBQW9EO1FBRXBELGdCQUFXLEdBQUcsSUFBSSxDQUFDO1FBa0JuQixpRUFBaUU7UUFFakUsbUJBQWMsR0FBRyxJQUFJLENBQUM7UUFNdEIsMkRBQTJEO1FBRTNELGdCQUFXLEdBQUcsRUFBRSxDQUFDO1FBRWpCLDBDQUEwQztRQUcxQyxjQUFTLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUVyQyx5Q0FBeUM7UUFHekMsZUFBVSxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7UUFFdEMscURBQXFEO1FBRXJELGdCQUFXLEdBQUcsSUFBSSxZQUFZLEVBQWlCLENBQUM7UUF1QmhELGNBQWM7UUFDTixXQUFNLEdBQWtCLElBQUksQ0FBQztRQW9CckMsY0FBYztRQUNOLG1CQUFjLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQVE1QyxjQUFjO1FBQ2QsYUFBUSxHQUFzQyxHQUFHLEVBQUUsR0FBRSxDQUFDLENBQUM7UUFFdkQsY0FBYztRQUNkLGNBQVMsR0FBRyxHQUFTLEVBQUUsR0FBRSxDQUFDLENBQUM7UUFVdkIsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7SUFDekIsQ0FBQztJQUVELGNBQWM7SUFDZCxRQUFRO1FBQ0osSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUM3QyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDekIsQ0FBQztJQUVELGNBQWM7SUFDZCxlQUFlO1FBQ1gsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7SUFDakMsQ0FBQztJQUVELGNBQWM7SUFDZCxXQUFXO1FBQ1AsSUFBSSxDQUFDLGNBQWMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUN0QyxDQUFDO0lBRUQsY0FBYztJQUNkLGdCQUFnQixDQUFDLEVBQXFDO1FBQ2xELElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxjQUFjO0lBQ2QsaUJBQWlCLENBQUMsRUFBYztRQUM1QixJQUFJLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQztJQUN4QixDQUFDO0lBRUQsY0FBYztJQUNkLFVBQVUsQ0FBQyxLQUFvQjtRQUMzQixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztJQUN2QixDQUFDO0lBRUQsY0FBYztJQUNkLGdCQUFnQixDQUFDLFVBQW1CO1FBQ2hDLElBQUksQ0FBQyxRQUFRLEdBQUcsVUFBVSxDQUFDO0lBQy9CLENBQUM7SUFFRCxjQUFjO0lBQ2QsSUFBSSxZQUFZO1FBQ1osT0FBTyxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQztJQUNyRSxDQUFDO0lBRUQsY0FBYztJQUNkLElBQUksWUFBWTtRQUNaLE9BQU8sSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDckUsQ0FBQztJQUVELGNBQWM7SUFDZCxJQUFJLGVBQWU7UUFDZixPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQzlDLENBQUM7SUFFRCwwQ0FBMEM7SUFDMUMsU0FBUztRQUNMLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBRUQsMENBQTBDO0lBQzFDLFNBQVM7UUFDTCxJQUFJLENBQUMscUJBQXFCLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUVELGNBQWM7SUFDTixxQkFBcUIsQ0FBQyxTQUFvQztRQUM5RCxJQUFJLENBQUMsU0FBUyxLQUFLLFdBQVcsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxTQUFTLEtBQUssV0FBVyxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsRUFBRTtZQUN0RyxJQUFJLGFBQWEsR0FBRyxJQUFJLENBQUM7WUFDekIsSUFBSSxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsa0JBQWtCLEVBQUU7Z0JBQy9DLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDO2dCQUN0QyxJQUFJLE1BQWMsQ0FBQztnQkFDbkIsU0FBUyxLQUFLLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ3RFLElBQUksSUFBSSxDQUFDLGtCQUFrQixLQUFLLE1BQU0sRUFBRTtvQkFDcEMsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7b0JBQ3JCLGFBQWEsR0FBRyxLQUFLLENBQUM7aUJBQ3pCO2FBQ0o7WUFDRCxJQUFJLGFBQWEsRUFBRTtnQkFDZixJQUFJLENBQUMsTUFBTTtvQkFDUCxTQUFTLEtBQUssV0FBVzt3QkFDckIsQ0FBQyxDQUFDLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxJQUFJLENBQUMsS0FBTSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUM7d0JBQzNELENBQUMsQ0FBQyxJQUFJLENBQUMsNEJBQTRCLENBQUMsSUFBSSxDQUFDLEtBQU0sRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUN4RTtZQUNELElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBQ3pCLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1NBQzNCO0lBQ0wsQ0FBQztJQUVELGNBQWM7SUFDZCxhQUFhLENBQUMsS0FBb0I7UUFDOUIsTUFBTSxTQUFTLEdBQUcsQ0FBQyxJQUFXLEVBQVEsRUFBRTtZQUNwQyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDdkIsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQzFCLENBQUMsQ0FBQztRQUVGLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFO1lBQ3ZCLE9BQU87U0FDVjtRQUVELElBQUksT0FBTyxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLEVBQUU7WUFDcEMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ2pCLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUNwQjthQUFNLElBQUksT0FBTyxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsVUFBVSxDQUFDLEVBQUU7WUFDN0MsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ2pCLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUNwQjtJQUNMLENBQUM7SUFFRCxjQUFjO0lBQ2QsYUFBYTtRQUNULElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1FBQ3BCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUVELGNBQWM7SUFDZCxjQUFjLENBQUMsS0FBaUI7UUFDNUIsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7UUFDckIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN2QixJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsRUFBRTtZQUMvRCxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7U0FDcEI7SUFDTCxDQUFDO0lBRUQsY0FBYztJQUNkLFlBQVksQ0FBQyxLQUFpQjtRQUMxQixJQUFJLElBQUksQ0FBQyxlQUFlLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUN0QyxJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO2dCQUNsQixJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7YUFDcEI7aUJBQU07Z0JBQ0gsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO2FBQ3BCO1lBQ0QsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1NBQzFCO0lBQ0wsQ0FBQztJQUVEO2tGQUM4RTtJQUM5RSxvQkFBb0I7UUFDaEIsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLElBQUksQ0FBQyxnQkFBZ0IsRUFBRTtZQUN0QyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztTQUM1QjtRQUNELElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0lBQzVCLENBQUM7SUFFRCwrRUFBK0U7SUFDL0UsZUFBZSxDQUFDLEtBQVU7UUFDdEIsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3pELElBQUksQ0FBQyxNQUFNLEdBQUcsV0FBVyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDbkYsQ0FBQztJQUVELGNBQWM7SUFDZCxJQUFZLGVBQWU7UUFDdkIsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUVELGNBQWM7SUFDTiw0QkFBNEIsQ0FBQyxLQUFhLEVBQUUsSUFBWTtRQUM1RCxNQUFNLFlBQVksR0FBRyxHQUFHLElBQUksRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM3QyxNQUFNLGFBQWEsR0FBRyxHQUFHLEtBQUssRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMvQyxNQUFNLGtCQUFrQixHQUFHLFlBQVksQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2xFLE1BQU0sbUJBQW1CLEdBQUcsYUFBYSxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDckUsTUFBTSxjQUFjLEdBQUcsbUJBQW1CLEdBQUcsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQztRQUUzRyxPQUFPLE1BQU0sQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBRUQsY0FBYztJQUNOLGlCQUFpQixDQUFDLEtBQWE7UUFDbkMsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRTtZQUNuQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUM7U0FDcEI7UUFDRCxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFO1lBQ25CLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQztTQUNwQjtRQUNELElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEVBQUU7WUFDaEMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUM7U0FDekQ7UUFDRCxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFO1lBQ2hDLEtBQUssR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDO1NBQ3pEO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDakIsQ0FBQztJQUVELGNBQWM7SUFDTixpQkFBaUI7UUFDckIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7UUFDbkMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFFRCxjQUFjO0lBQ2QsSUFBWSxJQUFJO1FBQ1osT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUM7SUFDMUQsQ0FBQztJQUVELGNBQWM7SUFDZCxJQUFZLElBQUk7UUFDWixPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDO0lBQzNELENBQUM7SUFFRCxjQUFjO0lBQ04sZ0JBQWdCO1FBQ3BCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbEQsSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUM5QyxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBRUQsY0FBYztJQUNOLHFCQUFxQjtRQUN6QixJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUU7WUFDckIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQ25CLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtnQkFDM0QsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO2dCQUNqQixJQUFJLENBQUMsa0JBQWtCLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDNUMsQ0FBQyxDQUFDLENBQ0wsQ0FBQztZQUVGLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUNuQixJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7Z0JBQzNELElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztnQkFDakIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQzVDLENBQUMsQ0FBQyxDQUNMLENBQUM7U0FDTDtJQUNMLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNLLG9CQUFvQixDQUFDLFVBQXNCO1FBQy9DLE1BQU0sWUFBWSxHQUFHLFNBQVMsQ0FBQyxVQUFVLENBQUMsYUFBYSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQ3RFLE1BQU0sVUFBVSxHQUFHLFNBQVMsQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDaEQsTUFBTSxVQUFVLEdBQUcsU0FBUyxDQUFnQixVQUFVLENBQUMsYUFBYSxFQUFFLFNBQVMsQ0FBQyxDQUFDLElBQUksQ0FDakYsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQzlELENBQUM7UUFFRixNQUFNLGFBQWEsR0FBRyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQzdCLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQ1gsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUM3QixTQUFTLENBQUMsVUFBVSxDQUFDLENBQ3hCLENBQ0osQ0FBQztRQUVGLE9BQU8sS0FBSyxDQUNSLFlBQVksRUFDWixZQUFZLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUNqRCxpR0FBaUc7UUFDakcsVUFBVSxDQUNiLENBQUM7SUFDTixDQUFDO0lBRUQsY0FBYztJQUNOLFdBQVcsQ0FBQyxJQUFZO1FBQzVCLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUVoQyxJQUFJLFdBQVcsS0FBSyxFQUFFLEVBQUU7WUFDcEIsT0FBTyxJQUFJLENBQUM7U0FDZjtRQUVELE1BQU0sWUFBWSxHQUFHLFdBQVc7YUFDM0IsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUM7YUFDbEIsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDO2FBQzNCLE9BQU8sQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLEVBQUUsQ0FBQzthQUNqQyxPQUFPLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxHQUFHLENBQUM7YUFDN0IsT0FBTyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxHQUFHLENBQUM7YUFDcEMsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRTFDLElBQUksWUFBWSxFQUFFO1lBQ2QsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQ3pDLE9BQU8sS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQztTQUNuRTtRQUVELE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxjQUFjO0lBQ04sZ0JBQWdCO1FBQ3BCLElBQUksU0FBUyxFQUFFLElBQUksSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxpQkFBaUIsRUFBRTtZQUNoRSxNQUFNLElBQUksS0FBSyxDQUFDLHdFQUF3RSxDQUFDLENBQUM7U0FDN0Y7UUFFRCxPQUFPLElBQUksWUFBWSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDakMsYUFBYSxFQUFFLElBQUksQ0FBQyxhQUFhLElBQUksU0FBUztZQUM5QyxLQUFLLEVBQUUsSUFBSSxDQUFDLElBQUk7WUFDaEIsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO1lBQ3ZCLHFDQUFxQztZQUNyQyxDQUFDLGlCQUF3QixDQUFDLEVBQUUsSUFBSSxDQUFDLGVBQWU7WUFDaEQsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXO1lBQzdCLHFCQUFxQixFQUFFLElBQUksQ0FBQyxpQkFBaUI7WUFDN0MscUJBQXFCLEVBQUUsSUFBSSxDQUFDLGlCQUFpQjtTQUNoRCxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsY0FBYztJQUNOLHVCQUF1QjtRQUMzQixNQUFNLFFBQVEsR0FBRztZQUNiLEdBQUcsSUFBSSxZQUFZLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1NBQ3hGLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDWixNQUFNLEtBQUssR0FBRyxJQUFJLEdBQUcsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RELElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFbEMsT0FBTyxJQUFJLE1BQU0sQ0FBQyxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNyRCxDQUFDO0lBRUQsY0FBYztJQUNOLG9CQUFvQjtRQUN4QixNQUFNLFNBQVMsR0FBRyxJQUFJLFlBQVksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDeEUsT0FBTyxJQUFJLE1BQU0sQ0FBQyxJQUFJLFNBQVMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUM1RixDQUFDO0lBRUQsY0FBYztJQUNOLHFCQUFxQjtRQUN6QixNQUFNLFNBQVMsR0FBRyxJQUFJLFlBQVksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFDdkUsT0FBTyxJQUFJLE1BQU0sQ0FBQyxJQUFJLFNBQVMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUM3RixDQUFDO0lBRUQsY0FBYztJQUNOLHVCQUF1QjtRQUMzQixNQUFNLFNBQVMsR0FBRyxJQUFJLFlBQVksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDeEUsT0FBTyxJQUFJLE1BQU0sQ0FBQyxJQUFJLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQzNGLENBQUM7SUFFRCxjQUFjO0lBQ04sc0JBQXNCO1FBQzFCLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNmLE1BQU0sU0FBUyxHQUFHLElBQUksWUFBWSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUU7Z0JBQzVDLEtBQUssRUFBRSxVQUFVO2dCQUNqQixRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7Z0JBQ3ZCLHFDQUFxQztnQkFDckMsQ0FBQyxpQkFBd0IsQ0FBQyxFQUFFLElBQUksQ0FBQyxlQUFlO2FBQ25ELENBQUMsQ0FBQztZQUNILElBQUksQ0FBQyxZQUFZLEdBQUcsR0FBRyxTQUFTO2lCQUMzQixNQUFNLENBQUMsQ0FBQyxDQUFDO2lCQUNULE9BQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDO2lCQUNsQixPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUM7aUJBQzNCLE9BQU8sQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsRUFBRSxDQUFDO2lCQUNuQyxPQUFPLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDO1lBRXpDLE9BQU8sSUFBSSxNQUFNLENBQUMsSUFBSSxJQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7U0FDcEQ7UUFFRCxPQUFPLElBQUksTUFBTSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRUQsY0FBYztJQUNOLGFBQWE7UUFDakIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztRQUNoRCxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7UUFDckQsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztRQUNqRCxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBQ3BELElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7SUFDbkQsQ0FBQztJQUVELGNBQWM7SUFDTixrQkFBa0IsQ0FBQyxNQUF3QjtRQUMvQyxJQUFJLE1BQU0sSUFBSSxJQUFJLEVBQUU7WUFDaEIsT0FBTyxFQUFFLENBQUM7U0FDYjthQUFNO1lBQ0gsT0FBTyxJQUFJLENBQUMsUUFBUTtnQkFDaEIsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQztnQkFDL0QsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQzNDO0lBQ0wsQ0FBQzs4R0F4bEJRLGtCQUFrQixrQkFvT2YsU0FBUztrR0FwT1osa0JBQWtCLG9sQ0FkaEI7WUFDUDtnQkFDSSxPQUFPLEVBQUUsaUJBQWlCO2dCQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLGtCQUFrQixDQUFDO2dCQUNqRCxLQUFLLEVBQUUsSUFBSTthQUNkO1lBQ0QsK0JBQStCLEVBQUU7WUFDakMsdUJBQXVCLENBQUMsa0JBQWtCLENBQUM7U0FDOUMsc0hBZ0xrQyxVQUFVLDBHQUlWLFVBQVUsdUdBSVYsVUFBVSwyQ0N0T2pELDZpR0F5RUE7OzJGRHJCYSxrQkFBa0I7a0JBcEI5QixTQUFTOytCQUNJLGVBQWUsaUJBR1YsaUJBQWlCLENBQUMsSUFBSSxtQkFDcEIsdUJBQXVCLENBQUMsTUFBTSxhQUNwQzt3QkFDUDs0QkFDSSxPQUFPLEVBQUUsaUJBQWlCOzRCQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxtQkFBbUIsQ0FBQzs0QkFDakQsS0FBSyxFQUFFLElBQUk7eUJBQ2Q7d0JBQ0QsK0JBQStCLEVBQUU7d0JBQ2pDLHVCQUF1QixvQkFBb0I7cUJBQzlDLFFBQ0s7d0JBQ0YsS0FBSyxFQUFFLDBCQUEwQjt3QkFDakMsWUFBWSxFQUFFLHdCQUF3QjtxQkFDekM7OzBCQXNPSSxNQUFNOzJCQUFDLFNBQVM7c0tBak9yQixPQUFPO3NCQUROLEtBQUs7Z0JBS04sUUFBUTtzQkFEUCxLQUFLO2dCQUtOLFFBQVE7c0JBRFAsS0FBSztnQkFLTixRQUFRO3NCQURQLEtBQUs7Z0JBS04sTUFBTTtzQkFETCxLQUFLO2dCQUtOLGFBQWE7c0JBRFosS0FBSztnQkFLTixtQkFBbUI7c0JBRGxCLEtBQUs7Z0JBS04sbUJBQW1CO3NCQURsQixLQUFLO2dCQVFOLG9CQUFvQjtzQkFEbkIsS0FBSztnQkFRTixvQkFBb0I7c0JBRG5CLEtBQUs7Z0JBS04sU0FBUztzQkFEUixLQUFLO2dCQUtOLGNBQWM7c0JBRGIsS0FBSztnQkFLTixtQkFBbUI7c0JBRGxCLEtBQUs7Z0JBS04sT0FBTztzQkFETixLQUFLO2dCQUtGLEtBQUs7c0JBRFIsS0FBSztnQkF5Qk4sR0FBRztzQkFERixLQUFLO2dCQUtOLEdBQUc7c0JBREYsS0FBSztnQkFLTixJQUFJO3NCQURILEtBQUs7Z0JBS04sSUFBSTtzQkFESCxLQUFLO2dCQUtOLFVBQVU7c0JBRFQsS0FBSztnQkFLTixJQUFJO3NCQURILEtBQUs7Z0JBS04sS0FBSztzQkFESixLQUFLO2dCQUtOLFlBQVk7c0JBRFgsS0FBSztnQkFLTixJQUFJO3NCQURILEtBQUs7Z0JBS04sV0FBVztzQkFEVixLQUFLO2dCQUtOLGlCQUFpQjtzQkFEaEIsS0FBSztnQkFLTixpQkFBaUI7c0JBRGhCLEtBQUs7Z0JBS04sUUFBUTtzQkFEUCxLQUFLO2dCQUtOLGVBQWU7c0JBRGQsS0FBSztnQkFLTixjQUFjO3NCQURiLEtBQUs7Z0JBS04sU0FBUztzQkFEUixLQUFLO2dCQUtOLFdBQVc7c0JBRFYsS0FBSzs7UUFLTiwrREFBK0Q7UUFDL0QsU0FBUztzQkFGUixNQUFNOztRQU1QLCtEQUErRDtRQUMvRCxVQUFVO3NCQUZULE1BQU07Z0JBTVAsV0FBVztzQkFEVixNQUFNO2dCQUtQLGVBQWU7c0JBRGQsU0FBUzt1QkFBQyxjQUFjLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO2dCQUsvQyxlQUFlO3NCQURkLFNBQVM7dUJBQUMsY0FBYyxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRTtnQkFLL0MsWUFBWTtzQkFEWCxTQUFTO3VCQUFDLGNBQWMsRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgZm9yd2FyZFJlZixcbiAgICBJbmplY3QsXG4gICAgSW5wdXQsXG4gICAgaXNEZXZNb2RlLFxuICAgIExPQ0FMRV9JRCxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIE91dHB1dCxcbiAgICBWaWV3Q2hpbGQsXG4gICAgVmlld0VuY2Fwc3VsYXRpb25cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBkZWZlciwgZnJvbUV2ZW50LCBpbnRlcnZhbCwgbWVyZ2UsIE9ic2VydmFibGUsIFN1YnNjcmlwdGlvbiwgdGltZXIgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGZpbHRlciwgc3dpdGNoTWFwLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBET1dOX0FSUk9XLCBFTlRFUiwgU1BBQ0UsIFVQX0FSUk9XIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2tleWNvZGVzJztcbmltcG9ydCB7IEtleVV0aWwsIE51bGxhYmxlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jZGsvdXRpbHMnO1xuaW1wb3J0IHsgU2FmZUh0bWwgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcbmltcG9ydCB7IExpdmVBbm5vdW5jZXIgfSBmcm9tICdAYW5ndWxhci9jZGsvYTExeSc7XG5pbXBvcnQgeyBDb250ZW50RGVuc2l0eU9ic2VydmVyLCBjb250ZW50RGVuc2l0eU9ic2VydmVyUHJvdmlkZXJzIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2NvbnRlbnQtZGVuc2l0eSc7XG5pbXBvcnQgeyBGb3JtSXRlbUNvbnRyb2wsIHJlZ2lzdGVyRm9ybUl0ZW1Db250cm9sIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2Zvcm0nO1xuaW1wb3J0IE51bWJlckZvcm1hdCA9IEludGwuTnVtYmVyRm9ybWF0O1xuaW1wb3J0IHsgRm9ybVN0YXRlcyB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY2RrL2Zvcm1zJztcblxubGV0IHN0ZXBJbnB1dFVuaXF1ZUlkID0gMDtcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdmZC1zdGVwLWlucHV0JyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vc3RlcC1pbnB1dC5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vc3RlcC1pbnB1dC5jb21wb25lbnQuc2NzcyddLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gU3RlcElucHV0Q29tcG9uZW50KSxcbiAgICAgICAgICAgIG11bHRpOiB0cnVlXG4gICAgICAgIH0sXG4gICAgICAgIGNvbnRlbnREZW5zaXR5T2JzZXJ2ZXJQcm92aWRlcnMoKSxcbiAgICAgICAgcmVnaXN0ZXJGb3JtSXRlbUNvbnRyb2woU3RlcElucHV0Q29tcG9uZW50KVxuICAgIF0sXG4gICAgaG9zdDoge1xuICAgICAgICBjbGFzczogJ2ZkLXN0ZXAtaW5wdXRfX2NvbnRhaW5lcicsXG4gICAgICAgICcoZm9jdXNvdXQpJzogJ2hhbmRsZUZvY3VzT3V0KCRldmVudCknXG4gICAgfVxufSlcbmV4cG9ydCBjbGFzcyBTdGVwSW5wdXRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSwgQ29udHJvbFZhbHVlQWNjZXNzb3IsIEZvcm1JdGVtQ29udHJvbCB7XG4gICAgLyoqIFNldHMgY29tcGFjdCBtb2RlICovXG4gICAgQElucHV0KClcbiAgICBjb21wYWN0PzogYm9vbGVhbjtcblxuICAgIC8qKiBTZXRzIGNvbnRyb2wgaW4gcmVhZG9ubHkgbW9kZSAqL1xuICAgIEBJbnB1dCgpXG4gICAgcmVhZG9ubHk6IGJvb2xlYW47XG5cbiAgICAvKiogU2V0cyBjb250cm9sIGluIGRpc2FibGVkIG1vZGUgKi9cbiAgICBASW5wdXQoKVxuICAgIGRpc2FibGVkOiBib29sZWFuO1xuXG4gICAgLyoqIElmIGl0IGlzIG1hbmRhdG9yeSBmaWVsZCAqL1xuICAgIEBJbnB1dCgpXG4gICAgcmVxdWlyZWQgPSBmYWxzZTtcblxuICAgIC8qKiBTZXRzIGxvY2FsZSB1c2VkIHRvIGZvcm1hdCBudW1lcmljIHZhbHVlICovXG4gICAgQElucHV0KClcbiAgICBsb2NhbGU6IHN0cmluZztcblxuICAgIC8qKiBTcGVjaWZpZXMgYWxnb3JpdGhtIHVzZWQgdG8gbWF0Y2ggbG9jYWxlLiBDaGVjayBJbnRsLk51bWJlckZvcm1hdCBkb2N1bWVudGF0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uICovXG4gICAgQElucHV0KClcbiAgICBsb2NhbGVNYXRjaGVyOiBOdWxsYWJsZTxzdHJpbmc+O1xuXG4gICAgLyoqIFNldHMgaWNvbiBkaXNwbGF5ZWQgaW4gSW5jcmVtZW50IEJ1dHRvbiAqL1xuICAgIEBJbnB1dCgpXG4gICAgaW5jcmVtZW50QnV0dG9uSWNvbiA9ICdhZGQnO1xuXG4gICAgLyoqIFNldHMgaWNvbiBkaXNwbGF5ZWQgaW4gRGVjcmVtZW50IEJ1dHRvbiAqL1xuICAgIEBJbnB1dCgpXG4gICAgZGVjcmVtZW50QnV0dG9uSWNvbiA9ICdsZXNzJztcblxuICAgIC8qKlxuICAgICAqIEBkZXByZWNhdGVkIHVzZSBpMThuIGNhcGFiaWxpdGllcyBpbnN0ZWFkXG4gICAgICogU2V0cyBJbmNyZW1lbnQgQnV0dG9uIHRpdGxlIGF0dHJpYnV0ZVxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgaW5jcmVtZW50QnV0dG9uVGl0bGU6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIEBkZXByZWNhdGVkIHVzZSBpMThuIGNhcGFiaWxpdGllcyBpbnN0ZWFkXG4gICAgICogU2V0cyBEZWNyZW1lbnQgQnV0dG9uIHRpdGxlIGF0dHJpYnV0ZVxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgZGVjcmVtZW50QnV0dG9uVGl0bGU6IHN0cmluZztcblxuICAgIC8qKiBTZXRzIGlucHV0IGFyaWEtbGFiZWwgYXR0cmlidXRlICovXG4gICAgQElucHV0KClcbiAgICBhcmlhTGFiZWw6IE51bGxhYmxlPHN0cmluZz47XG5cbiAgICAvKiogU2V0cyBpbnB1dCBhcmlhLWxhYmVsbGVkYnkgYXR0cmlidXRlICovXG4gICAgQElucHV0KClcbiAgICBhcmlhTGFiZWxsZWRCeTogTnVsbGFibGU8c3RyaW5nPjtcblxuICAgIC8qKiBBcmlhIGRlZmluZXMgcm9sZSBkZXNjcmlwdGlvbiBmb3IgdGhlIFN0ZXAgSW5wdXQuICovXG4gICAgQElucHV0KClcbiAgICBhcmlhUm9sZURlc2NyaXB0aW9uOiBzdHJpbmc7XG5cbiAgICAvKiogU2V0cyBpbnB1dCBpZCAqL1xuICAgIEBJbnB1dCgpXG4gICAgaW5wdXRJZCA9IGBmZC1zdGVwLWlucHV0LSR7c3RlcElucHV0VW5pcXVlSWQrK31gO1xuXG4gICAgLyoqIFNldCBjb250cm9sIHZhbHVlICovXG4gICAgQElucHV0KClcbiAgICBzZXQgdmFsdWUodmFsdWU6IE51bGxhYmxlPG51bWJlcj4pIHtcbiAgICAgICAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICAgICAgICAgIC8vIGNhc3QgbnVsbCBvciB1bmRlZmluZWQgdG8gXCJudWxsXCJcbiAgICAgICAgICAgIHRoaXMuX3ZhbHVlID0gbnVsbDtcbiAgICAgICAgfSBlbHNlIGlmICghaXNOYU4odmFsdWUpKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IE51bWJlcih2YWx1ZSk7XG4gICAgICAgICAgICB0aGlzLl92YWx1ZSA9IHRoaXMuX2NoZWNrVmFsdWVMaW1pdHModmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubGFzdEVtaXR0ZWRWYWx1ZSA9IHRoaXMuX3ZhbHVlO1xuICAgICAgICBpZiAoIXRoaXMuX2ZpcnN0RW1pdHRlZFZhbHVlICYmIHRoaXMuX3ZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLl9maXJzdEVtaXR0ZWRWYWx1ZSA9IHRoaXMuX3ZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9udW1iZXJGb3JtYXQpIHtcbiAgICAgICAgICAgIHRoaXMuX3VwZGF0ZVZpZXdWYWx1ZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIENvbnRyb2wgdmFsdWUgKi9cbiAgICBnZXQgdmFsdWUoKTogbnVtYmVyIHwgbnVsbCB7XG4gICAgICAgIHJldHVybiB0aGlzLl92YWx1ZTtcbiAgICB9XG5cbiAgICAvKiogU2V0cyBtaW5pbXVtIHZhbHVlIGJvdW5kYXJ5ICovXG4gICAgQElucHV0KClcbiAgICBtaW46IG51bWJlcjtcblxuICAgIC8qKiBTZXRzIG1heGltdW0gdmFsdWUgYm91bmRhcnkgKi9cbiAgICBASW5wdXQoKVxuICAgIG1heDogbnVtYmVyO1xuXG4gICAgLyoqIFNldHMgaW5wdXQgc3RlcCB2YWx1ZSAqL1xuICAgIEBJbnB1dCgpXG4gICAgc3RlcCA9IDE7XG5cbiAgICAvKiogU2V0cyBpbnB1dCBuYW1lIGF0dHJpYnV0ZSAqL1xuICAgIEBJbnB1dCgpXG4gICAgbmFtZTogTnVsbGFibGU8c3RyaW5nPjtcblxuICAgIC8qKiBTZXRzIGlucHV0IHRpdGxlIGF0dHJpYnV0ZSAqL1xuICAgIEBJbnB1dCgpXG4gICAgaW5wdXRUaXRsZSA9ICcnO1xuXG4gICAgLyoqIFNldHMgZm9ybWF0dGluZyBtb2RlICovXG4gICAgQElucHV0KClcbiAgICBtb2RlOiAnZGVjaW1hbCcgfCAnY3VycmVuY3knID0gJ2RlY2ltYWwnO1xuXG4gICAgLyoqIFNldHMgc3RhdGUgb2YgdGhlIGNvbnRyb2wuIENhbiBiZSBgc3VjY2Vzc2AsIGBlcnJvcmAsIGB3YXJuaW5nYCwgYGluZm9ybWF0aW9uYCBvciBibGFuayBmb3IgZGVmYXVsdC4gKi9cbiAgICBASW5wdXQoKVxuICAgIHN0YXRlOiBGb3JtU3RhdGVzID0gJ2RlZmF1bHQnO1xuXG4gICAgLyoqIEhvbGRzIHRoZSBtZXNzYWdlIHdpdGggcmVzcGVjdCB0byBzdGF0ZSAqL1xuICAgIEBJbnB1dCgpXG4gICAgc3RhdGVNZXNzYWdlOiBzdHJpbmcgfCBTYWZlSHRtbDtcblxuICAgIC8qKiBDdXN0b20gdW5pdCBkaXNwbGF5ZWQgYXMgYSBsYWJlbCBuZXh0IHRvIHRoZSBpbnB1dCAqL1xuICAgIEBJbnB1dCgpXG4gICAgdW5pdDogc3RyaW5nO1xuXG4gICAgLyoqIFdoZXRoZXIgdG8gdXNlIGdyb3VwaW5nIHdoZW4gZm9ybWF0dGluZyB2YWx1ZSAqL1xuICAgIEBJbnB1dCgpXG4gICAgdXNlR3JvdXBpbmcgPSB0cnVlO1xuXG4gICAgLyoqIERlZmluZXMgbWluaW1hbCBudW1iZXIgb2YgZnJhY3Rpb25hbCBkaWdpdHMgZm9yIGNvbnRyb2wgdmFsdWUgKi9cbiAgICBASW5wdXQoKVxuICAgIG1pbkZyYWN0aW9uRGlnaXRzOiBudW1iZXI7XG5cbiAgICAvKiogRGVmaW5lcyBtYXhpbWFsIG51bWJlciBvZiBmcmFjdGlvbmFsIGRpZ2l0cyBmb3IgY29udHJvbCB2YWx1ZSAqL1xuICAgIEBJbnB1dCgpXG4gICAgbWF4RnJhY3Rpb25EaWdpdHM6IG51bWJlcjtcblxuICAgIC8qKiBDdXJyZW5jeSB1c2VkIHRvIGZvcm1hdCB2YWx1ZS4gQ2hlY2sgSW50bC5OdW1iZXJGb3JtYXQgZG9jdW1lbnRhdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbiovXG4gICAgQElucHV0KClcbiAgICBjdXJyZW5jeTogc3RyaW5nO1xuXG4gICAgLyoqIEN1cnJlbmN5IHVzZWQgdG8gZm9ybWF0IHZhbHVlLiBDaGVjayBJbnRsLk51bWJlckZvcm1hdCBkb2N1bWVudGF0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uICovXG4gICAgQElucHV0KClcbiAgICBjdXJyZW5jeURpc3BsYXk6IHN0cmluZztcblxuICAgIC8qKiBXaGV0aGVyIFN0ZXBJbnB1dCBzaG91bGQgZGlzcGxheSBJbmNyZWFzZS9EZWNyZWFzZSBidXR0b25zICovXG4gICAgQElucHV0KClcbiAgICBoYXNTdGVwQnV0dG9ucyA9IHRydWU7XG5cbiAgICAvKiogSG9yaXpvbnRhbGx5IGFsaWducyB2YWx1ZSBpbnNpZGUgaW5wdXQgKi9cbiAgICBASW5wdXQoKVxuICAgIHRleHRBbGlnbjogJ2xlZnQnIHwgJ2NlbnRlcicgfCAncmlnaHQnO1xuXG4gICAgLyoqIEhpbnQgZGlzcGxheWVkIGluc2lkZSBpbnB1dCBiZWZvcmUgdXNlciB3cml0ZXMgdmFsdWUgKi9cbiAgICBASW5wdXQoKVxuICAgIHBsYWNlaG9sZGVyID0gJyc7XG5cbiAgICAvKiogRW1pdHMgZXZlbnQgd2hlbiBpbnB1dCBnZXRzIGZvY3VzZWQgKi9cbiAgICBAT3V0cHV0KClcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L25vLW91dHB1dC1vbi1wcmVmaXhcbiAgICBvbkZvY3VzSW4gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgICAvKiogRW1pdHMgZXZlbnQgd2hlbiBpbnB1dCBsb3NlcyBmb2N1cyAqL1xuICAgIEBPdXRwdXQoKVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvbm8tb3V0cHV0LW9uLXByZWZpeFxuICAgIG9uRm9jdXNPdXQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgICAvKiogRW1pdHMgbmV3IHZhbHVlIHdoZW4gY29udHJvbCB2YWx1ZSBoYXMgY2hhbmdlZCAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHZhbHVlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXIgfCBudWxsPigpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAVmlld0NoaWxkKCdpbmNyZW1lbnRCdG4nLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSlcbiAgICBpbmNyZW1lbnRCdXR0b246IEVsZW1lbnRSZWY8SFRNTEJ1dHRvbkVsZW1lbnQ+O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAVmlld0NoaWxkKCdkZWNyZW1lbnRCdG4nLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSlcbiAgICBkZWNyZW1lbnRCdXR0b246IEVsZW1lbnRSZWY8SFRNTEJ1dHRvbkVsZW1lbnQ+O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAVmlld0NoaWxkKCdpbnB1dEVsZW1lbnQnLCB7IHJlYWQ6IEVsZW1lbnRSZWYsIHN0YXRpYzogdHJ1ZSB9KVxuICAgIGlucHV0RWxlbWVudDogRWxlbWVudFJlZjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbGFzdEVtaXR0ZWRWYWx1ZTogTnVsbGFibGU8bnVtYmVyPjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgY3VycmVuY3lTaWduOiBzdHJpbmc7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGZvY3VzZWQ6IGJvb2xlYW47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3ZhbHVlOiBudW1iZXIgfCBudWxsID0gbnVsbDtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfbnVtZXJhbHM6IFJlZ0V4cDtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZGVjaW1hbFNlcGFyYXRvcjogUmVnRXhwO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9jdXJyZW5jeTogUmVnRXhwO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9taW51c1NpZ246IFJlZ0V4cDtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZ3JvdXBTZXBhcmF0b3I6IFJlZ0V4cDtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfbnVtYmVyRm9ybWF0OiBOdW1iZXJGb3JtYXQ7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3N1YnNjcmlwdGlvbnMgPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2luZGV4OiBhbnk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2ZpcnN0RW1pdHRlZFZhbHVlOiBudW1iZXI7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG9uQ2hhbmdlOiAodmFsdWU6IE51bGxhYmxlPG51bWJlcj4pID0+IHZvaWQgPSAoKSA9PiB7fTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgb25Ub3VjaGVkID0gKCk6IHZvaWQgPT4ge307XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBASW5qZWN0KExPQ0FMRV9JRCkgbG9jYWxlLFxuICAgICAgICBwcml2YXRlIF9jaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgX2xpdmVBbm5vdW5jZXI6IExpdmVBbm5vdW5jZXIsXG4gICAgICAgIHJlYWRvbmx5IF9jb250ZW50RGVuc2l0eU9ic2VydmVyOiBDb250ZW50RGVuc2l0eU9ic2VydmVyLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IF9lbGVtZW50UmVmOiBFbGVtZW50UmVmXG4gICAgKSB7XG4gICAgICAgIHRoaXMubG9jYWxlID0gbG9jYWxlO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX251bWJlckZvcm1hdCA9IHRoaXMuX2dldE51bWJlckZvcm1hdCgpO1xuICAgICAgICB0aGlzLl9idWlsZFJlZ0V4cHMoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdXBkYXRlVmlld1ZhbHVlKCk7XG4gICAgICAgIHRoaXMuX2xpc3Rlbk9uQnV0dG9uc0NsaWNrKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fc3Vic2NyaXB0aW9ucy51bnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcmVnaXN0ZXJPbkNoYW5nZShmbjogKHZhbHVlOiBOdWxsYWJsZTxudW1iZXI+KSA9PiB2b2lkKTogdm9pZCB7XG4gICAgICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiAoKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgICAgIHRoaXMub25Ub3VjaGVkID0gZm47XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICB3cml0ZVZhbHVlKHZhbHVlOiBudW1iZXIgfCBudWxsKTogdm9pZCB7XG4gICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICB0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGdldCBjYW5JbmNyZW1lbnQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlID09IG51bGwgfHwgdGhpcy52YWx1ZSArIHRoaXMuc3RlcCA8PSB0aGlzLl9tYXg7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBnZXQgY2FuRGVjcmVtZW50KCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZSA9PSBudWxsIHx8IHRoaXMudmFsdWUgLSB0aGlzLnN0ZXAgPj0gdGhpcy5fbWluO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgZ2V0IGNhbkRpc3BsYXlMYWJlbCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy51bml0IHx8ICEhdGhpcy5jdXJyZW5jeVNpZ247XG4gICAgfVxuXG4gICAgLyoqIEluY3JlbWVudCBpbnB1dCB2YWx1ZSBieSBzdGVwIHZhbHVlICovXG4gICAgaW5jcmVtZW50KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9pbmNyZW1lbnRPckRlY3JlbWVudCgnaW5jcmVtZW50Jyk7XG4gICAgfVxuXG4gICAgLyoqIERlY3JlbWVudCBpbnB1dCB2YWx1ZSBieSBzdGVwIHZhbHVlICovXG4gICAgZGVjcmVtZW50KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9pbmNyZW1lbnRPckRlY3JlbWVudCgnZGVjcmVtZW50Jyk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9pbmNyZW1lbnRPckRlY3JlbWVudChkaXJlY3Rpb246ICdpbmNyZW1lbnQnIHwgJ2RlY3JlbWVudCcpOiB2b2lkIHtcbiAgICAgICAgaWYgKChkaXJlY3Rpb24gPT09ICdpbmNyZW1lbnQnICYmIHRoaXMuY2FuSW5jcmVtZW50KSB8fCAoZGlyZWN0aW9uID09PSAnZGVjcmVtZW50JyAmJiB0aGlzLmNhbkRlY3JlbWVudCkpIHtcbiAgICAgICAgICAgIGxldCBfc2hvdWxkQ2hhbmdlID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmICh0aGlzLnZhbHVlID09IG51bGwgJiYgdGhpcy5fZmlyc3RFbWl0dGVkVmFsdWUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl92YWx1ZSA9IHRoaXMuX2ZpcnN0RW1pdHRlZFZhbHVlO1xuICAgICAgICAgICAgICAgIGxldCBfbGltaXQ6IG51bWJlcjtcbiAgICAgICAgICAgICAgICBkaXJlY3Rpb24gPT09ICdpbmNyZW1lbnQnID8gKF9saW1pdCA9IHRoaXMubWF4KSA6IChfbGltaXQgPSB0aGlzLm1pbik7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX2ZpcnN0RW1pdHRlZFZhbHVlID09PSBfbGltaXQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fdmFsdWUgPSBfbGltaXQ7XG4gICAgICAgICAgICAgICAgICAgIF9zaG91bGRDaGFuZ2UgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoX3Nob3VsZENoYW5nZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3ZhbHVlID1cbiAgICAgICAgICAgICAgICAgICAgZGlyZWN0aW9uID09PSAnaW5jcmVtZW50J1xuICAgICAgICAgICAgICAgICAgICAgICAgPyB0aGlzLl9jdXRGbG9hdGluZ051bWJlckRpc3RvcnRpb24odGhpcy52YWx1ZSEsIHRoaXMuc3RlcClcbiAgICAgICAgICAgICAgICAgICAgICAgIDogdGhpcy5fY3V0RmxvYXRpbmdOdW1iZXJEaXN0b3J0aW9uKHRoaXMudmFsdWUhLCAtdGhpcy5zdGVwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX2VtaXRDaGFuZ2VkVmFsdWUoKTtcbiAgICAgICAgICAgIHRoaXMuX3VwZGF0ZVZpZXdWYWx1ZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBoYW5kbGVLZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IG11dGVFdmVudCA9IChldm50OiBFdmVudCk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgZXZudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgIGV2bnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAoIXRoaXMuX2NhbkNoYW5nZVZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIFVQX0FSUk9XKSkge1xuICAgICAgICAgICAgdGhpcy5pbmNyZW1lbnQoKTtcbiAgICAgICAgICAgIG11dGVFdmVudChldmVudCk7XG4gICAgICAgIH0gZWxzZSBpZiAoS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIERPV05fQVJST1cpKSB7XG4gICAgICAgICAgICB0aGlzLmRlY3JlbWVudCgpO1xuICAgICAgICAgICAgbXV0ZUV2ZW50KGV2ZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgaGFuZGxlRm9jdXNJbigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5mb2N1c2VkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5vbkZvY3VzSW4uZW1pdCgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgaGFuZGxlRm9jdXNPdXQoZXZlbnQ6IEZvY3VzRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5mb2N1c2VkID0gZmFsc2U7XG4gICAgICAgIHRoaXMub25Gb2N1c091dC5lbWl0KCk7XG4gICAgICAgIGlmICghdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGV2ZW50LnJlbGF0ZWRUYXJnZXQpKSB7XG4gICAgICAgICAgICB0aGlzLm9uVG91Y2hlZCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBoYW5kbGVTY3JvbGwoZXZlbnQ6IFdoZWVsRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuX2NhbkNoYW5nZVZhbHVlICYmIHRoaXMuZm9jdXNlZCkge1xuICAgICAgICAgICAgaWYgKGV2ZW50LmRlbHRhWSA+IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRlY3JlbWVudCgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmluY3JlbWVudCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIFVwZGF0ZXMgdmlld1ZhbHVlIGFuZCBjb25kaXRpb25hbGx5IGVtaXRzIG5ldyB2YWx1ZS5cbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgb24gKGNoYW5nZSkgZXZlbnQsIHdoZW4gdXNlciBsZWF2ZXMgaW5wdXQgY29udHJvbC4gKi9cbiAgICB1cGRhdGVPbklucHV0Q2hhbmdlZCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMudmFsdWUgIT09IHRoaXMubGFzdEVtaXR0ZWRWYWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5fZW1pdENoYW5nZWRWYWx1ZSgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3VwZGF0ZVZpZXdWYWx1ZSgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIFRyYWNrIHBhcnNlZCB2YWx1ZSB3aGVuIHVzZXIgY2hhbmdlcyB2YWx1ZSBvZiB0aGUgaW5wdXQgY29udHJvbC4gKi9cbiAgICB0cmFja0lucHV0VmFsdWUoZXZlbnQ6IGFueSk6IHZvaWQge1xuICAgICAgICBjb25zdCBwYXJzZWRWYWx1ZSA9IHRoaXMuX3BhcnNlVmFsdWUoZXZlbnQudGFyZ2V0LnZhbHVlKTtcbiAgICAgICAgdGhpcy5fdmFsdWUgPSBwYXJzZWRWYWx1ZSAhPSBudWxsID8gdGhpcy5fY2hlY2tWYWx1ZUxpbWl0cyhwYXJzZWRWYWx1ZSkgOiBudWxsO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBnZXQgX2NhbkNoYW5nZVZhbHVlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gISh0aGlzLmRpc2FibGVkIHx8IHRoaXMucmVhZG9ubHkpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfY3V0RmxvYXRpbmdOdW1iZXJEaXN0b3J0aW9uKHZhbHVlOiBudW1iZXIsIHN0ZXA6IG51bWJlcik6IG51bWJlciB7XG4gICAgICAgIGNvbnN0IHN0ZXBEZWNpbWFscyA9IGAke3N0ZXB9YC5zcGxpdCgnLicpWzFdO1xuICAgICAgICBjb25zdCB2YWx1ZURlY2ltYWxzID0gYCR7dmFsdWV9YC5zcGxpdCgnLicpWzFdO1xuICAgICAgICBjb25zdCBzdGVwRGVjaW1hbHNMZW5ndGggPSBzdGVwRGVjaW1hbHMgPyBzdGVwRGVjaW1hbHMubGVuZ3RoIDogMDtcbiAgICAgICAgY29uc3QgdmFsdWVEZWNpbWFsc0xlbmd0aCA9IHZhbHVlRGVjaW1hbHMgPyB2YWx1ZURlY2ltYWxzLmxlbmd0aCA6IDA7XG4gICAgICAgIGNvbnN0IGxvbmdlc3REZWNpbWFsID0gdmFsdWVEZWNpbWFsc0xlbmd0aCA+IHN0ZXBEZWNpbWFsc0xlbmd0aCA/IHZhbHVlRGVjaW1hbHNMZW5ndGggOiBzdGVwRGVjaW1hbHNMZW5ndGg7XG5cbiAgICAgICAgcmV0dXJuIE51bWJlcigodmFsdWUgKyBzdGVwKS50b0ZpeGVkKGxvbmdlc3REZWNpbWFsKSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9jaGVja1ZhbHVlTGltaXRzKHZhbHVlOiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgICBpZiAodmFsdWUgPiB0aGlzLl9tYXgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9tYXg7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHZhbHVlIDwgdGhpcy5fbWluKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fbWluO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNOYU4odGhpcy5tYXhGcmFjdGlvbkRpZ2l0cykpIHtcbiAgICAgICAgICAgIHZhbHVlID0gTnVtYmVyKHZhbHVlLnRvRml4ZWQodGhpcy5tYXhGcmFjdGlvbkRpZ2l0cykpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNOYU4odGhpcy5taW5GcmFjdGlvbkRpZ2l0cykpIHtcbiAgICAgICAgICAgIHZhbHVlID0gTnVtYmVyKHZhbHVlLnRvRml4ZWQodGhpcy5taW5GcmFjdGlvbkRpZ2l0cykpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2VtaXRDaGFuZ2VkVmFsdWUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMubGFzdEVtaXR0ZWRWYWx1ZSA9IHRoaXMudmFsdWU7XG4gICAgICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh0aGlzLnZhbHVlKTtcbiAgICAgICAgdGhpcy5vbkNoYW5nZSh0aGlzLnZhbHVlKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgZ2V0IF9tYXgoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuICFpc05hTih0aGlzLm1heCkgPyB0aGlzLm1heCA6IE51bWJlci5NQVhfVkFMVUU7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIGdldCBfbWluKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiAhaXNOYU4odGhpcy5taW4pID8gdGhpcy5taW4gOiAtTnVtYmVyLk1BWF9WQUxVRTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3VwZGF0ZVZpZXdWYWx1ZSgpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLl9mb3JtYXRUb1ZpZXdWYWx1ZSh0aGlzLnZhbHVlKTtcbiAgICAgICAgdGhpcy5pbnB1dEVsZW1lbnQubmF0aXZlRWxlbWVudC52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB0aGlzLl9saXZlQW5ub3VuY2VyLmFubm91bmNlKHZhbHVlKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2xpc3Rlbk9uQnV0dG9uc0NsaWNrKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5oYXNTdGVwQnV0dG9ucykge1xuICAgICAgICAgICAgdGhpcy5fc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICAgICAgICAgICAgdGhpcy5fc2V0dXBCdXR0b25MaXN0ZW5lcih0aGlzLmluY3JlbWVudEJ1dHRvbikuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbmNyZW1lbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgICAgICAgICAgICB0aGlzLl9zZXR1cEJ1dHRvbkxpc3RlbmVyKHRoaXMuZGVjcmVtZW50QnV0dG9uKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRlY3JlbWVudCgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogTGlzdGVucyBmb3IgY2xpY2sgb3Igc3BhY2UvZW50ZXIga2V5ZG93biBldmVudHMuXG4gICAgICpcbiAgICAgKiBGb3IgbG9uZyBjbGlja3Mgd2lsbCBjb250aW51b3VzbHkgZW1pdCBldmVudCB1bnRpbCBcIm1vdXNldXBcIiBldmVudCBpcyBkZXRlY3RlZFxuICAgICAqL1xuICAgIHByaXZhdGUgX3NldHVwQnV0dG9uTGlzdGVuZXIoZWxlbWVudFJlZjogRWxlbWVudFJlZik6IE9ic2VydmFibGU8YW55PiB7XG4gICAgICAgIGNvbnN0IG9uTW91c2VEb3duJCA9IGZyb21FdmVudChlbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsICdtb3VzZWRvd24nKTtcbiAgICAgICAgY29uc3Qgb25Nb3VzZVVwJCA9IGZyb21FdmVudCh3aW5kb3csICdtb3VzZXVwJyk7XG4gICAgICAgIGNvbnN0IG9uS2V5RG93biQgPSBmcm9tRXZlbnQ8S2V5Ym9hcmRFdmVudD4oZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCAna2V5ZG93bicpLnBpcGUoXG4gICAgICAgICAgICBmaWx0ZXIoKGV2ZW50KSA9PiBLZXlVdGlsLmlzS2V5Q29kZShldmVudCwgW1NQQUNFLCBFTlRFUl0pKVxuICAgICAgICApO1xuXG4gICAgICAgIGNvbnN0IHRpbWVyRmFjdG9yeSQgPSBkZWZlcigoKSA9PlxuICAgICAgICAgICAgdGltZXIoNTAwKS5waXBlKFxuICAgICAgICAgICAgICAgIHN3aXRjaE1hcCgoKSA9PiBpbnRlcnZhbCg0MCkpLFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbChvbk1vdXNlVXAkKVxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuXG4gICAgICAgIHJldHVybiBtZXJnZShcbiAgICAgICAgICAgIG9uTW91c2VEb3duJCxcbiAgICAgICAgICAgIG9uTW91c2VEb3duJC5waXBlKHN3aXRjaE1hcCgoKSA9PiB0aW1lckZhY3RvcnkkKSksXG4gICAgICAgICAgICAvLyB3aGlsZSBrZXkgaXMgcHJlc3NlZCwgZXZlbnQgd2lsbCBiZSBlbWl0dGVkIGNvbnRpbnVvdXNseSwgc28gdGhlcmUncyBubyBuZWVkIGZvciB0aW1lckZhY3RvcnkkXG4gICAgICAgICAgICBvbktleURvd24kXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9wYXJzZVZhbHVlKHRleHQ6IHN0cmluZyk6IE51bGxhYmxlPG51bWJlcj4ge1xuICAgICAgICBjb25zdCB0cmltbWVkVGV4dCA9IHRleHQudHJpbSgpO1xuXG4gICAgICAgIGlmICh0cmltbWVkVGV4dCA9PT0gJycpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZmlsdGVyZWRUZXh0ID0gdHJpbW1lZFRleHRcbiAgICAgICAgICAgIC5yZXBsYWNlKC9cXHMvZywgJycpXG4gICAgICAgICAgICAucmVwbGFjZSh0aGlzLl9jdXJyZW5jeSwgJycpXG4gICAgICAgICAgICAucmVwbGFjZSh0aGlzLl9ncm91cFNlcGFyYXRvciwgJycpXG4gICAgICAgICAgICAucmVwbGFjZSh0aGlzLl9taW51c1NpZ24sICctJylcbiAgICAgICAgICAgIC5yZXBsYWNlKHRoaXMuX2RlY2ltYWxTZXBhcmF0b3IsICcuJylcbiAgICAgICAgICAgIC5yZXBsYWNlKHRoaXMuX251bWVyYWxzLCB0aGlzLl9pbmRleCk7XG5cbiAgICAgICAgaWYgKGZpbHRlcmVkVGV4dCkge1xuICAgICAgICAgICAgY29uc3QgcGFyc2VkVmFsdWUgPSBOdW1iZXIoZmlsdGVyZWRUZXh0KTtcbiAgICAgICAgICAgIHJldHVybiBpc05hTihwYXJzZWRWYWx1ZSkgPyB0aGlzLmxhc3RFbWl0dGVkVmFsdWUgOiBwYXJzZWRWYWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZ2V0TnVtYmVyRm9ybWF0KCk6IE51bWJlckZvcm1hdCB7XG4gICAgICAgIGlmIChpc0Rldk1vZGUoKSAmJiB0aGlzLm1pbkZyYWN0aW9uRGlnaXRzID4gdGhpcy5tYXhGcmFjdGlvbkRpZ2l0cykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUmFuZ2UgZXJyb3IgLSBtaW5GcmFjdGlvbkRpZ2l0cyBjYW4ndCBiZSBiaWdnZXIgdGhhbiBtYXhGcmFjdGlvbkRpZ2l0c1wiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXcgTnVtYmVyRm9ybWF0KHRoaXMubG9jYWxlLCB7XG4gICAgICAgICAgICBsb2NhbGVNYXRjaGVyOiB0aGlzLmxvY2FsZU1hdGNoZXIgPz8gdW5kZWZpbmVkLFxuICAgICAgICAgICAgc3R5bGU6IHRoaXMubW9kZSxcbiAgICAgICAgICAgIGN1cnJlbmN5OiB0aGlzLmN1cnJlbmN5LFxuICAgICAgICAgICAgLy8gb25seSBhdmFpbGFibGUgaW4gRVMyMDIwIGFuZCBsYXRlclxuICAgICAgICAgICAgWydjdXJyZW5jeURpc3BsYXknIGFzIGFueV06IHRoaXMuY3VycmVuY3lEaXNwbGF5LFxuICAgICAgICAgICAgdXNlR3JvdXBpbmc6IHRoaXMudXNlR3JvdXBpbmcsXG4gICAgICAgICAgICBtaW5pbXVtRnJhY3Rpb25EaWdpdHM6IHRoaXMubWluRnJhY3Rpb25EaWdpdHMsXG4gICAgICAgICAgICBtYXhpbXVtRnJhY3Rpb25EaWdpdHM6IHRoaXMubWF4RnJhY3Rpb25EaWdpdHNcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9nZXROdW1lcmFsc0V4cHJlc3Npb25zKCk6IFJlZ0V4cCB7XG4gICAgICAgIGNvbnN0IG51bWVyYWxzID0gW1xuICAgICAgICAgICAgLi4ubmV3IE51bWJlckZvcm1hdCh0aGlzLmxvY2FsZSwgeyB1c2VHcm91cGluZzogZmFsc2UgfSkuZm9ybWF0KDk4NzY1NDMyMTApLnNwbGl0KCcnKVxuICAgICAgICBdLnJldmVyc2UoKTtcbiAgICAgICAgY29uc3QgaW5kZXggPSBuZXcgTWFwKG51bWVyYWxzLm1hcCgoZCwgaSkgPT4gW2QsIGldKSk7XG4gICAgICAgIHRoaXMuX2luZGV4ID0gKGQpID0+IGluZGV4LmdldChkKTtcblxuICAgICAgICByZXR1cm4gbmV3IFJlZ0V4cChgWyR7bnVtZXJhbHMuam9pbignJyl9XWAsICdnJyk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9nZXREZWNpbWFsU2VwYXJhdG9yKCk6IFJlZ0V4cCB7XG4gICAgICAgIGNvbnN0IGZvcm1hdHRlciA9IG5ldyBOdW1iZXJGb3JtYXQodGhpcy5sb2NhbGUsIHsgdXNlR3JvdXBpbmc6IGZhbHNlIH0pO1xuICAgICAgICByZXR1cm4gbmV3IFJlZ0V4cChgWyR7Zm9ybWF0dGVyLmZvcm1hdCgxLjEpLnRyaW0oKS5yZXBsYWNlKHRoaXMuX251bWVyYWxzLCAnJyl9XWAsICdnJyk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9nZXRHcm91cGluZ1NlcGFyYXRvcigpOiBSZWdFeHAge1xuICAgICAgICBjb25zdCBmb3JtYXR0ZXIgPSBuZXcgTnVtYmVyRm9ybWF0KHRoaXMubG9jYWxlLCB7IHVzZUdyb3VwaW5nOiB0cnVlIH0pO1xuICAgICAgICByZXR1cm4gbmV3IFJlZ0V4cChgWyR7Zm9ybWF0dGVyLmZvcm1hdCgxMDAwKS50cmltKCkucmVwbGFjZSh0aGlzLl9udW1lcmFscywgJycpfV1gLCAnZycpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZ2V0TWludXNTaWduRXhwcmVzc2lvbigpOiBSZWdFeHAge1xuICAgICAgICBjb25zdCBmb3JtYXR0ZXIgPSBuZXcgTnVtYmVyRm9ybWF0KHRoaXMubG9jYWxlLCB7IHVzZUdyb3VwaW5nOiBmYWxzZSB9KTtcbiAgICAgICAgcmV0dXJuIG5ldyBSZWdFeHAoYFske2Zvcm1hdHRlci5mb3JtYXQoLTEpLnRyaW0oKS5yZXBsYWNlKHRoaXMuX251bWVyYWxzLCAnJyl9XWAsICdnJyk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9nZXRDdXJyZW5jeUV4cHJlc3Npb24oKTogUmVnRXhwIHtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVuY3kpIHtcbiAgICAgICAgICAgIGNvbnN0IGZvcm1hdHRlciA9IG5ldyBOdW1iZXJGb3JtYXQodGhpcy5sb2NhbGUsIHtcbiAgICAgICAgICAgICAgICBzdHlsZTogJ2N1cnJlbmN5JyxcbiAgICAgICAgICAgICAgICBjdXJyZW5jeTogdGhpcy5jdXJyZW5jeSxcbiAgICAgICAgICAgICAgICAvLyBvbmx5IGF2YWlsYWJsZSBpbiBFUzIwMjAgYW5kIGxhdGVyXG4gICAgICAgICAgICAgICAgWydjdXJyZW5jeURpc3BsYXknIGFzIGFueV06IHRoaXMuY3VycmVuY3lEaXNwbGF5XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuY3VycmVuY3lTaWduID0gYCR7Zm9ybWF0dGVyXG4gICAgICAgICAgICAgICAgLmZvcm1hdCgxKVxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9cXHMvZywgJycpXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UodGhpcy5fbnVtZXJhbHMsICcnKVxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKHRoaXMuX2RlY2ltYWxTZXBhcmF0b3IsICcnKVxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKHRoaXMuX2dyb3VwU2VwYXJhdG9yLCAnJyl9YDtcblxuICAgICAgICAgICAgcmV0dXJuIG5ldyBSZWdFeHAoYFske3RoaXMuY3VycmVuY3lTaWdufV1gLCAnZycpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5ldyBSZWdFeHAoYFtdYCwgJ2cnKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2J1aWxkUmVnRXhwcygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fbnVtZXJhbHMgPSB0aGlzLl9nZXROdW1lcmFsc0V4cHJlc3Npb25zKCk7XG4gICAgICAgIHRoaXMuX2RlY2ltYWxTZXBhcmF0b3IgPSB0aGlzLl9nZXREZWNpbWFsU2VwYXJhdG9yKCk7XG4gICAgICAgIHRoaXMuX21pbnVzU2lnbiA9IHRoaXMuX2dldE1pbnVzU2lnbkV4cHJlc3Npb24oKTtcbiAgICAgICAgdGhpcy5fZ3JvdXBTZXBhcmF0b3IgPSB0aGlzLl9nZXRHcm91cGluZ1NlcGFyYXRvcigpO1xuICAgICAgICB0aGlzLl9jdXJyZW5jeSA9IHRoaXMuX2dldEN1cnJlbmN5RXhwcmVzc2lvbigpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZm9ybWF0VG9WaWV3VmFsdWUobnVtYmVyOiBOdWxsYWJsZTxudW1iZXI+KTogc3RyaW5nIHtcbiAgICAgICAgaWYgKG51bWJlciA9PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW5jeVxuICAgICAgICAgICAgICAgID8gdGhpcy5fbnVtYmVyRm9ybWF0LmZvcm1hdChudW1iZXIpLnJlcGxhY2UodGhpcy5fY3VycmVuY3ksICcnKVxuICAgICAgICAgICAgICAgIDogdGhpcy5fbnVtYmVyRm9ybWF0LmZvcm1hdChudW1iZXIpO1xuICAgICAgICB9XG4gICAgfVxufVxuIiwiPGZkLWZvcm0taW5wdXQtbWVzc2FnZS1ncm91cD5cbiAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwiZmQtc3RlcC1pbnB1dFwiXG4gICAgICAgIFtjbGFzc109XCJzdGF0ZSA/ICdpcy0nICsgc3RhdGUgOiAnJ1wiXG4gICAgICAgIFtjbGFzcy5pcy1mb2N1c109XCJmb2N1c2VkXCJcbiAgICAgICAgW2NsYXNzLmlzLXJlYWRvbmx5XT1cInJlYWRvbmx5XCJcbiAgICAgICAgW2NsYXNzLmlzLWRpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgW2NsYXNzLmZkLXN0ZXAtaW5wdXQtLXdpdGhvdXQtYnV0dG9uc109XCIhaGFzU3RlcEJ1dHRvbnNcIlxuICAgID5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgKm5nSWY9XCJoYXNTdGVwQnV0dG9uc1wiXG4gICAgICAgICAgICBmZC1idXR0b25cbiAgICAgICAgICAgICNkZWNyZW1lbnRCdG5cbiAgICAgICAgICAgIGZkVHlwZT1cInRyYW5zcGFyZW50XCJcbiAgICAgICAgICAgIGNsYXNzPVwiZmQtc3RlcC1pbnB1dF9fYnV0dG9uXCJcbiAgICAgICAgICAgIHRhYmluZGV4PVwiLTFcIlxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiIWNhbkRlY3JlbWVudFwiXG4gICAgICAgICAgICBbdGl0bGVdPVwiZGVjcmVtZW50QnV0dG9uVGl0bGUgfHwgKCdjb3JlU3RlcElucHV0LmRlY3JlbWVudEJ1dHRvblRpdGxlJyB8IGZkVHJhbnNsYXRlKVwiXG4gICAgICAgICAgICBbZ2x5cGhdPVwiZGVjcmVtZW50QnV0dG9uSWNvblwiXG4gICAgICAgICAgICAoYmx1cik9XCJvblRvdWNoZWQoKVwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImRlY3JlbWVudEJ1dHRvblRpdGxlIHx8ICgnY29yZVN0ZXBJbnB1dC5kZWNyZW1lbnRCdXR0b25UaXRsZScgfCBmZFRyYW5zbGF0ZSlcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1jb250cm9sc109XCJpbnB1dElkXCJcbiAgICAgICAgPjwvYnV0dG9uPlxuICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICNpbnB1dEVsZW1lbnRcbiAgICAgICAgICAgIFtuYW1lXT1cIm5hbWVcIlxuICAgICAgICAgICAgW2lkXT1cImlucHV0SWRcIlxuICAgICAgICAgICAgW3RpdGxlXT1cImlucHV0VGl0bGVcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgICAgIFtyZWFkT25seV09XCJyZWFkb25seVwiXG4gICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXJcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJhcmlhTGFiZWxcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbGxlZGJ5XT1cImFyaWFMYWJlbGxlZEJ5XCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtdmFsdWVub3ddPVwidmFsdWVcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS12YWx1ZW1heF09XCJtYXhcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS12YWx1ZW1pbl09XCJtaW5cIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1kZXNjcmliZWRieV09XCJjYW5EaXNwbGF5TGFiZWwgPyBpbnB1dElkICsgJ19fZGVzY3JpcHRpb24nIDogJydcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1yZXF1aXJlZF09XCJyZXF1aXJlZFwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLXJvbGVkZXNjcmlwdGlvbl09XCJhcmlhUm9sZURlc2NyaXB0aW9uIHx8ICgnY29yZVN0ZXBJbnB1dC5hcmlhUm9sZURlc2NyaXB0aW9uJyB8IGZkVHJhbnNsYXRlKVwiXG4gICAgICAgICAgICAoZm9jdXNpbik9XCJoYW5kbGVGb2N1c0luKClcIlxuICAgICAgICAgICAgKHdoZWVsKT1cImhhbmRsZVNjcm9sbCgkZXZlbnQpXCJcbiAgICAgICAgICAgIChrZXlkb3duKT1cImhhbmRsZUtleURvd24oJGV2ZW50KVwiXG4gICAgICAgICAgICAoaW5wdXQpPVwidHJhY2tJbnB1dFZhbHVlKCRldmVudClcIlxuICAgICAgICAgICAgKGNoYW5nZSk9XCJ1cGRhdGVPbklucHV0Q2hhbmdlZCgpXCJcbiAgICAgICAgICAgIFtzdHlsZS50ZXh0QWxpZ25dPVwidGV4dEFsaWduXCJcbiAgICAgICAgICAgIGNsYXNzPVwiZmQtaW5wdXQgZmQtaW5wdXQtLW5vLW51bWJlci1zcGlubmVyIGZkLXN0ZXAtaW5wdXRfX2lucHV0XCJcbiAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgIGlucHV0bW9kZT1cIm51bWVyaWNcIlxuICAgICAgICAvPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAqbmdJZj1cImhhc1N0ZXBCdXR0b25zXCJcbiAgICAgICAgICAgIGZkLWJ1dHRvblxuICAgICAgICAgICAgI2luY3JlbWVudEJ0blxuICAgICAgICAgICAgZmRUeXBlPVwidHJhbnNwYXJlbnRcIlxuICAgICAgICAgICAgY2xhc3M9XCJmZC1zdGVwLWlucHV0X19idXR0b25cIlxuICAgICAgICAgICAgdGFiaW5kZXg9XCItMVwiXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhY2FuSW5jcmVtZW50XCJcbiAgICAgICAgICAgIFt0aXRsZV09XCJpbmNyZW1lbnRCdXR0b25UaXRsZSB8fCAoJ2NvcmVTdGVwSW5wdXQuaW5jcmVtZW50QnV0dG9uVGl0bGUnIHwgZmRUcmFuc2xhdGUpXCJcbiAgICAgICAgICAgIFtnbHlwaF09XCJpbmNyZW1lbnRCdXR0b25JY29uXCJcbiAgICAgICAgICAgIChibHVyKT1cIm9uVG91Y2hlZCgpXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiaW5jcmVtZW50QnV0dG9uVGl0bGUgfHwgKCdjb3JlU3RlcElucHV0LmluY3JlbWVudEJ1dHRvblRpdGxlJyB8IGZkVHJhbnNsYXRlKVwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWNvbnRyb2xzXT1cImlucHV0SWRcIlxuICAgICAgICA+PC9idXR0b24+XG4gICAgPC9kaXY+XG5cbiAgICA8ZmQtZm9ybS1tZXNzYWdlICpuZ0lmPVwiISFzdGF0ZU1lc3NhZ2VcIiBbdHlwZV09XCJzdGF0ZVwiIFtpbm5lckhUTUxdPVwic3RhdGVNZXNzYWdlXCI+PC9mZC1mb3JtLW1lc3NhZ2U+XG48L2ZkLWZvcm0taW5wdXQtbWVzc2FnZS1ncm91cD5cblxuPHNwYW4gKm5nSWY9XCJjYW5EaXNwbGF5TGFiZWxcIiBbaWRdPVwiaW5wdXRJZCArICdfX2Rlc2NyaXB0aW9uJ1wiIGNsYXNzPVwiZmQtZm9ybS1sYWJlbCBmZC1mb3JtLWxhYmVsLS11bml0LWRlc2NyaXB0aW9uXCI+XG4gICAge3sgdW5pdCB8fCBjdXJyZW5jeVNpZ24gfX1cbjwvc3Bhbj5cbiJdfQ==
523
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RlcC1pbnB1dC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvc3JjL2xpYi9zdGVwLWlucHV0L3N0ZXAtaW5wdXQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvc3RlcC1pbnB1dC9zdGVwLWlucHV0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFSCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLFVBQVUsRUFDVixNQUFNLEVBQ04sS0FBSyxFQUNMLFNBQVMsRUFDVCxTQUFTLEVBR1QsTUFBTSxFQUNOLFNBQVMsRUFDVCxpQkFBaUIsRUFDcEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUF3QixpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQWMsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMxRixPQUFPLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5RCxPQUFPLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDM0UsT0FBTyxFQUFFLE9BQU8sRUFBWSxNQUFNLDRCQUE0QixDQUFDO0FBRS9ELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNsRCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsK0JBQStCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUNoSCxPQUFPLEVBQW1CLHVCQUF1QixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDdEYsSUFBTyxZQUFZLEdBQUcsSUFBSSxDQUFD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QUFNOztRQU1QLCtEQUErRDtRQUMvRCxVQUFVO3NCQUZULE1BQU07Z0JBTVAsV0FBVztzQkFEVixNQUFNO2dCQUtQLGVBQWU7c0JBRGQsU0FBUzt1QkFBQyxjQUFjLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO2dCQUsvQyxlQUFlO3NCQURkLFNBQVM7dUJBQUMsY0FBYyxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRTtnQkFLL0MsWUFBWTtzQkFEWCxTQUFTO3VCQUFDLGNBQWMsRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgZm9yd2FyZFJlZixcbiAgICBJbmplY3QsXG4gICAgSW5wdXQsXG4gICAgaXNEZXZNb2RlLFxuICAgIExPQ0FMRV9JRCxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIE91dHB1dCxcbiAgICBWaWV3Q2hpbGQsXG4gICAgVmlld0VuY2Fwc3VsYXRpb25cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBkZWZlciwgZnJvbUV2ZW50LCBpbnRlcnZhbCwgbWVyZ2UsIE9ic2VydmFibGUsIFN1YnNjcmlwdGlvbiwgdGltZXIgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGZpbHRlciwgc3dpdGNoTWFwLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBET1dOX0FSUk9XLCBFTlRFUiwgU1BBQ0UsIFVQX0FSUk9XIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2tleWNvZGVzJztcbmltcG9ydCB7IEtleVV0aWwsIE51bGxhYmxlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jZGsvdXRpbHMnO1xuaW1wb3J0IHsgU2FmZUh0bWwgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcbmltcG9ydCB7IExpdmVBbm5vdW5jZXIgfSBmcm9tICdAYW5ndWxhci9jZGsvYTExeSc7XG5pbXBvcnQgeyBDb250ZW50RGVuc2l0eU9ic2VydmVyLCBjb250ZW50RGVuc2l0eU9ic2VydmVyUHJvdmlkZXJzIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2NvbnRlbnQtZGVuc2l0eSc7XG5pbXBvcnQgeyBGb3JtSXRlbUNvbnRyb2wsIHJlZ2lzdGVyRm9ybUl0ZW1Db250cm9sIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2Zvcm0nO1xuaW1wb3J0IE51bWJlckZvcm1hdCA9IEludGwuTnVtYmVyRm9ybWF0O1xuaW1wb3J0IHsgRm9ybVN0YXRlcyB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY2RrL2Zvcm1zJztcblxubGV0IHN0ZXBJbnB1dFVuaXF1ZUlkID0gMDtcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdmZC1zdGVwLWlucHV0JyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vc3RlcC1pbnB1dC5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vc3RlcC1pbnB1dC5jb21wb25lbnQuc2NzcyddLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gU3RlcElucHV0Q29tcG9uZW50KSxcbiAgICAgICAgICAgIG11bHRpOiB0cnVlXG4gICAgICAgIH0sXG4gICAgICAgIGNvbnRlbnREZW5zaXR5T2JzZXJ2ZXJQcm92aWRlcnMoKSxcbiAgICAgICAgcmVnaXN0ZXJGb3JtSXRlbUNvbnRyb2woU3RlcElucHV0Q29tcG9uZW50KVxuICAgIF0sXG4gICAgaG9zdDoge1xuICAgICAgICBjbGFzczogJ2ZkLXN0ZXAtaW5wdXRfX2NvbnRhaW5lcicsXG4gICAgICAgICcoZm9jdXNvdXQpJzogJ2hhbmRsZUZvY3VzT3V0KCRldmVudCknXG4gICAgfVxufSlcbmV4cG9ydCBjbGFzcyBTdGVwSW5wdXRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSwgQ29udHJvbFZhbHVlQWNjZXNzb3IsIEZvcm1JdGVtQ29udHJvbCB7XG4gICAgLyoqIFNldHMgY29tcGFjdCBtb2RlICovXG4gICAgQElucHV0KClcbiAgICBjb21wYWN0PzogYm9vbGVhbjtcblxuICAgIC8qKiBTZXRzIGNvbnRyb2wgaW4gcmVhZG9ubHkgbW9kZSAqL1xuICAgIEBJbnB1dCgpXG4gICAgcmVhZG9ubHk6IGJvb2xlYW47XG5cbiAgICAvKiogU2V0cyBjb250cm9sIGluIGRpc2FibGVkIG1vZGUgKi9cbiAgICBASW5wdXQoKVxuICAgIGRpc2FibGVkOiBib29sZWFuO1xuXG4gICAgLyoqIElmIGl0IGlzIG1hbmRhdG9yeSBmaWVsZCAqL1xuICAgIEBJbnB1dCgpXG4gICAgcmVxdWlyZWQgPSBmYWxzZTtcblxuICAgIC8qKiBTZXRzIGxvY2FsZSB1c2VkIHRvIGZvcm1hdCBudW1lcmljIHZhbHVlICovXG4gICAgQElucHV0KClcbiAgICBsb2NhbGU6IHN0cmluZztcblxuICAgIC8qKiBTcGVjaWZpZXMgYWxnb3JpdGhtIHVzZWQgdG8gbWF0Y2ggbG9jYWxlLiBDaGVjayBJbnRsLk51bWJlckZvcm1hdCBkb2N1bWVudGF0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uICovXG4gICAgQElucHV0KClcbiAgICBsb2NhbGVNYXRjaGVyOiBOdWxsYWJsZTxzdHJpbmc+O1xuXG4gICAgLyoqIFNldHMgaWNvbiBkaXNwbGF5ZWQgaW4gSW5jcmVtZW50IEJ1dHRvbiAqL1xuICAgIEBJbnB1dCgpXG4gICAgaW5jcmVtZW50QnV0dG9uSWNvbiA9ICdhZGQnO1xuXG4gICAgLyoqIFNldHMgaWNvbiBkaXNwbGF5ZWQgaW4gRGVjcmVtZW50IEJ1dHRvbiAqL1xuICAgIEBJbnB1dCgpXG4gICAgZGVjcmVtZW50QnV0dG9uSWNvbiA9ICdsZXNzJztcblxuICAgIC8qKlxuICAgICAqIEBkZXByZWNhdGVkIHVzZSBpMThuIGNhcGFiaWxpdGllcyBpbnN0ZWFkXG4gICAgICogU2V0cyBJbmNyZW1lbnQgQnV0dG9uIHRpdGxlIGF0dHJpYnV0ZVxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IGluY3JlbWVudEJ1dHRvblRpdGxlKHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICAgXCJQcm9wZXJ0eSBpbmNyZW1lbnRCdXR0b25UaXRsZSBpcyBkZXByZWNhdGVkLiBVc2UgaTE4biBjYXBhYmlsaXRpZXMgJ2NvcmVTdGVwSW5wdXQuaW5jcmVtZW50QnV0dG9uVGl0bGUnIGtleSBpbnN0ZWFkLlwiXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuX2luY3JlbWVudEJ1dHRvblRpdGxlID0gdmFsdWU7XG4gICAgfVxuXG4gICAgZ2V0IGluY3JlbWVudEJ1dHRvblRpdGxlKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pbmNyZW1lbnRCdXR0b25UaXRsZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAZGVwcmVjYXRlZCB1c2UgaTE4biBjYXBhYmlsaXRpZXMgaW5zdGVhZFxuICAgICAqIFNldHMgRGVjcmVtZW50IEJ1dHRvbiB0aXRsZSBhdHRyaWJ1dGVcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBkZWNyZW1lbnRCdXR0b25UaXRsZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAgIFwiUHJvcGVydHkgZGVjcmVtZW50QnV0dG9uVGl0bGUgaXMgZGVwcmVjYXRlZC4gVXNlIGkxOG4gY2FwYWJpbGl0aWVzICdjb3JlU3RlcElucHV0LmRlY3JlbWVudEJ1dHRvblRpdGxlJyBrZXkgaW5zdGVhZC5cIlxuICAgICAgICApO1xuICAgICAgICB0aGlzLl9kZWNyZW1lbnRCdXR0b25UaXRsZSA9IHZhbHVlO1xuICAgIH1cblxuICAgIGdldCBkZWNyZW1lbnRCdXR0b25UaXRsZSgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVjcmVtZW50QnV0dG9uVGl0bGU7XG4gICAgfVxuXG4gICAgLyoqIFNldHMgaW5wdXQgYXJpYS1sYWJlbCBhdHRyaWJ1dGUgKi9cbiAgICBASW5wdXQoKVxuICAgIGFyaWFMYWJlbDogTnVsbGFibGU8c3RyaW5nPjtcblxuICAgIC8qKiBTZXRzIGlucHV0IGFyaWEtbGFiZWxsZWRieSBhdHRyaWJ1dGUgKi9cbiAgICBASW5wdXQoKVxuICAgIGFyaWFMYWJlbGxlZEJ5OiBOdWxsYWJsZTxzdHJpbmc+O1xuXG4gICAgLyoqIEFyaWEgZGVmaW5lcyByb2xlIGRlc2NyaXB0aW9uIGZvciB0aGUgU3RlcCBJbnB1dC4gKi9cbiAgICBASW5wdXQoKVxuICAgIGFyaWFSb2xlRGVzY3JpcHRpb246IHN0cmluZztcblxuICAgIC8qKiBTZXRzIGlucHV0IGlkICovXG4gICAgQElucHV0KClcbiAgICBpbnB1dElkID0gYGZkLXN0ZXAtaW5wdXQtJHtzdGVwSW5wdXRVbmlxdWVJZCsrfWA7XG5cbiAgICAvKiogU2V0IGNvbnRyb2wgdmFsdWUgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCB2YWx1ZSh2YWx1ZTogTnVsbGFibGU8bnVtYmVyPikge1xuICAgICAgICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gY2FzdCBudWxsIG9yIHVuZGVmaW5lZCB0byBcIm51bGxcIlxuICAgICAgICAgICAgdGhpcy5fdmFsdWUgPSBudWxsO1xuICAgICAgICB9IGVsc2UgaWYgKCFpc05hTih2YWx1ZSkpIHtcbiAgICAgICAgICAgIHZhbHVlID0gTnVtYmVyKHZhbHVlKTtcbiAgICAgICAgICAgIHRoaXMuX3ZhbHVlID0gdGhpcy5fY2hlY2tWYWx1ZUxpbWl0cyh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5sYXN0RW1pdHRlZFZhbHVlID0gdGhpcy5fdmFsdWU7XG4gICAgICAgIGlmICghdGhpcy5fZmlyc3RFbWl0dGVkVmFsdWUgJiYgdGhpcy5fdmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuX2ZpcnN0RW1pdHRlZFZhbHVlID0gdGhpcy5fdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX251bWJlckZvcm1hdCkge1xuICAgICAgICAgICAgdGhpcy5fdXBkYXRlVmlld1ZhbHVlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQ29udHJvbCB2YWx1ZSAqL1xuICAgIGdldCB2YWx1ZSgpOiBudW1iZXIgfCBudWxsIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xuICAgIH1cblxuICAgIC8qKiBTZXRzIG1pbmltdW0gdmFsdWUgYm91bmRhcnkgKi9cbiAgICBASW5wdXQoKVxuICAgIG1pbjogbnVtYmVyO1xuXG4gICAgLyoqIFNldHMgbWF4aW11bSB2YWx1ZSBib3VuZGFyeSAqL1xuICAgIEBJbnB1dCgpXG4gICAgbWF4OiBudW1iZXI7XG5cbiAgICAvKiogU2V0cyBpbnB1dCBzdGVwIHZhbHVlICovXG4gICAgQElucHV0KClcbiAgICBzdGVwID0gMTtcblxuICAgIC8qKiBTZXRzIGlucHV0IG5hbWUgYXR0cmlidXRlICovXG4gICAgQElucHV0KClcbiAgICBuYW1lOiBOdWxsYWJsZTxzdHJpbmc+O1xuXG4gICAgLyoqIFNldHMgaW5wdXQgdGl0bGUgYXR0cmlidXRlICovXG4gICAgQElucHV0KClcbiAgICBpbnB1dFRpdGxlID0gJyc7XG5cbiAgICAvKiogU2V0cyBmb3JtYXR0aW5nIG1vZGUgKi9cbiAgICBASW5wdXQoKVxuICAgIG1vZGU6ICdkZWNpbWFsJyB8ICdjdXJyZW5jeScgPSAnZGVjaW1hbCc7XG5cbiAgICAvKiogU2V0cyBzdGF0ZSBvZiB0aGUgY29udHJvbC4gQ2FuIGJlIGBzdWNjZXNzYCwgYGVycm9yYCwgYHdhcm5pbmdgLCBgaW5mb3JtYXRpb25gIG9yIGJsYW5rIGZvciBkZWZhdWx0LiAqL1xuICAgIEBJbnB1dCgpXG4gICAgc3RhdGU6IEZvcm1TdGF0ZXMgPSAnZGVmYXVsdCc7XG5cbiAgICAvKiogSG9sZHMgdGhlIG1lc3NhZ2Ugd2l0aCByZXNwZWN0IHRvIHN0YXRlICovXG4gICAgQElucHV0KClcbiAgICBzdGF0ZU1lc3NhZ2U6IHN0cmluZyB8IFNhZmVIdG1sO1xuXG4gICAgLyoqIEN1c3RvbSB1bml0IGRpc3BsYXllZCBhcyBhIGxhYmVsIG5leHQgdG8gdGhlIGlucHV0ICovXG4gICAgQElucHV0KClcbiAgICB1bml0OiBzdHJpbmc7XG5cbiAgICAvKiogV2hldGhlciB0byB1c2UgZ3JvdXBpbmcgd2hlbiBmb3JtYXR0aW5nIHZhbHVlICovXG4gICAgQElucHV0KClcbiAgICB1c2VHcm91cGluZyA9IHRydWU7XG5cbiAgICAvKiogRGVmaW5lcyBtaW5pbWFsIG51bWJlciBvZiBmcmFjdGlvbmFsIGRpZ2l0cyBmb3IgY29udHJvbCB2YWx1ZSAqL1xuICAgIEBJbnB1dCgpXG4gICAgbWluRnJhY3Rpb25EaWdpdHM6IG51bWJlcjtcblxuICAgIC8qKiBEZWZpbmVzIG1heGltYWwgbnVtYmVyIG9mIGZyYWN0aW9uYWwgZGlnaXRzIGZvciBjb250cm9sIHZhbHVlICovXG4gICAgQElucHV0KClcbiAgICBtYXhGcmFjdGlvbkRpZ2l0czogbnVtYmVyO1xuXG4gICAgLyoqIEN1cnJlbmN5IHVzZWQgdG8gZm9ybWF0IHZhbHVlLiBDaGVjayBJbnRsLk51bWJlckZvcm1hdCBkb2N1bWVudGF0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uKi9cbiAgICBASW5wdXQoKVxuICAgIGN1cnJlbmN5OiBzdHJpbmc7XG5cbiAgICAvKiogQ3VycmVuY3kgdXNlZCB0byBmb3JtYXQgdmFsdWUuIENoZWNrIEludGwuTnVtYmVyRm9ybWF0IGRvY3VtZW50YXRpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24gKi9cbiAgICBASW5wdXQoKVxuICAgIGN1cnJlbmN5RGlzcGxheTogc3RyaW5nO1xuXG4gICAgLyoqIFdoZXRoZXIgU3RlcElucHV0IHNob3VsZCBkaXNwbGF5IEluY3JlYXNlL0RlY3JlYXNlIGJ1dHRvbnMgKi9cbiAgICBASW5wdXQoKVxuICAgIGhhc1N0ZXBCdXR0b25zID0gdHJ1ZTtcblxuICAgIC8qKiBIb3Jpem9udGFsbHkgYWxpZ25zIHZhbHVlIGluc2lkZSBpbnB1dCAqL1xuICAgIEBJbnB1dCgpXG4gICAgdGV4dEFsaWduOiAnbGVmdCcgfCAnY2VudGVyJyB8ICdyaWdodCc7XG5cbiAgICAvKiogSGludCBkaXNwbGF5ZWQgaW5zaWRlIGlucHV0IGJlZm9yZSB1c2VyIHdyaXRlcyB2YWx1ZSAqL1xuICAgIEBJbnB1dCgpXG4gICAgcGxhY2Vob2xkZXIgPSAnJztcblxuICAgIC8qKiBFbWl0cyBldmVudCB3aGVuIGlucHV0IGdldHMgZm9jdXNlZCAqL1xuICAgIEBPdXRwdXQoKVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvbm8tb3V0cHV0LW9uLXByZWZpeFxuICAgIG9uRm9jdXNJbiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICAgIC8qKiBFbWl0cyBldmVudCB3aGVuIGlucHV0IGxvc2VzIGZvY3VzICovXG4gICAgQE91dHB1dCgpXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9uby1vdXRwdXQtb24tcHJlZml4XG4gICAgb25Gb2N1c091dCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICAgIC8qKiBFbWl0cyBuZXcgdmFsdWUgd2hlbiBjb250cm9sIHZhbHVlIGhhcyBjaGFuZ2VkICovXG4gICAgQE91dHB1dCgpXG4gICAgdmFsdWVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlciB8IG51bGw+KCk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBWaWV3Q2hpbGQoJ2luY3JlbWVudEJ0bicsIHsgcmVhZDogRWxlbWVudFJlZiB9KVxuICAgIGluY3JlbWVudEJ1dHRvbjogRWxlbWVudFJlZjxIVE1MQnV0dG9uRWxlbWVudD47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBWaWV3Q2hpbGQoJ2RlY3JlbWVudEJ0bicsIHsgcmVhZDogRWxlbWVudFJlZiB9KVxuICAgIGRlY3JlbWVudEJ1dHRvbjogRWxlbWVudFJlZjxIVE1MQnV0dG9uRWxlbWVudD47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBWaWV3Q2hpbGQoJ2lucHV0RWxlbWVudCcsIHsgcmVhZDogRWxlbWVudFJlZiwgc3RhdGljOiB0cnVlIH0pXG4gICAgaW5wdXRFbGVtZW50OiBFbGVtZW50UmVmO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBsYXN0RW1pdHRlZFZhbHVlOiBOdWxsYWJsZTxudW1iZXI+O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBjdXJyZW5jeVNpZ246IHN0cmluZztcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgZm9jdXNlZDogYm9vbGVhbjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfdmFsdWU6IG51bWJlciB8IG51bGwgPSBudWxsO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9udW1lcmFsczogUmVnRXhwO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9kZWNpbWFsU2VwYXJhdG9yOiBSZWdFeHA7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2N1cnJlbmN5OiBSZWdFeHA7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX21pbnVzU2lnbjogUmVnRXhwO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9ncm91cFNlcGFyYXRvcjogUmVnRXhwO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9udW1iZXJGb3JtYXQ6IE51bWJlckZvcm1hdDtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfc3Vic2NyaXB0aW9ucyA9IG5ldyBTdWJzY3JpcHRpb24oKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfaW5kZXg6IGFueTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZmlyc3RFbWl0dGVkVmFsdWU6IG51bWJlcjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZGVjcmVtZW50QnV0dG9uVGl0bGU6IHN0cmluZztcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfaW5jcmVtZW50QnV0dG9uVGl0bGU6IHN0cmluZztcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIEBJbmplY3QoTE9DQUxFX0lEKSBsb2NhbGUsXG4gICAgICAgIHByaXZhdGUgX2NoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBfbGl2ZUFubm91bmNlcjogTGl2ZUFubm91bmNlcixcbiAgICAgICAgcmVhZG9ubHkgX2NvbnRlbnREZW5zaXR5T2JzZXJ2ZXI6IENvbnRlbnREZW5zaXR5T2JzZXJ2ZXIsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgX2VsZW1lbnRSZWY6IEVsZW1lbnRSZWZcbiAgICApIHtcbiAgICAgICAgdGhpcy5sb2NhbGUgPSBsb2NhbGU7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBvbkNoYW5nZTogKHZhbHVlOiBOdWxsYWJsZTxudW1iZXI+KSA9PiB2b2lkID0gKCkgPT4ge307XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG9uVG91Y2hlZCA9ICgpOiB2b2lkID0+IHt9O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fbnVtYmVyRm9ybWF0ID0gdGhpcy5fZ2V0TnVtYmVyRm9ybWF0KCk7XG4gICAgICAgIHRoaXMuX2J1aWxkUmVnRXhwcygpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl91cGRhdGVWaWV3VmFsdWUoKTtcbiAgICAgICAgdGhpcy5fbGlzdGVuT25CdXR0b25zQ2xpY2soKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb25zLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICByZWdpc3Rlck9uQ2hhbmdlKGZuOiAodmFsdWU6IE51bGxhYmxlPG51bWJlcj4pID0+IHZvaWQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5vbkNoYW5nZSA9IGZuO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcmVnaXN0ZXJPblRvdWNoZWQoZm46ICgpID0+IHZvaWQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5vblRvdWNoZWQgPSBmbjtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHdyaXRlVmFsdWUodmFsdWU6IG51bWJlciB8IG51bGwpOiB2b2lkIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgZ2V0IGNhbkluY3JlbWVudCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWUgPT0gbnVsbCB8fCB0aGlzLnZhbHVlICsgdGhpcy5zdGVwIDw9IHRoaXMuX21heDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGdldCBjYW5EZWNyZW1lbnQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlID09IG51bGwgfHwgdGhpcy52YWx1ZSAtIHRoaXMuc3RlcCA+PSB0aGlzLl9taW47XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBnZXQgY2FuRGlzcGxheUxhYmVsKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gISF0aGlzLnVuaXQgfHwgISF0aGlzLmN1cnJlbmN5U2lnbjtcbiAgICB9XG5cbiAgICAvKiogSW5jcmVtZW50IGlucHV0IHZhbHVlIGJ5IHN0ZXAgdmFsdWUgKi9cbiAgICBpbmNyZW1lbnQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2luY3JlbWVudE9yRGVjcmVtZW50KCdpbmNyZW1lbnQnKTtcbiAgICB9XG5cbiAgICAvKiogRGVjcmVtZW50IGlucHV0IHZhbHVlIGJ5IHN0ZXAgdmFsdWUgKi9cbiAgICBkZWNyZW1lbnQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2luY3JlbWVudE9yRGVjcmVtZW50KCdkZWNyZW1lbnQnKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGhhbmRsZUtleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgbXV0ZUV2ZW50ID0gKGV2bnQ6IEV2ZW50KTogdm9pZCA9PiB7XG4gICAgICAgICAgICBldm50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgZXZudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9O1xuXG4gICAgICAgIGlmICghdGhpcy5fY2FuQ2hhbmdlVmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChLZXlVdGlsLmlzS2V5Q29kZShldmVudCwgVVBfQVJST1cpKSB7XG4gICAgICAgICAgICB0aGlzLmluY3JlbWVudCgpO1xuICAgICAgICAgICAgbXV0ZUV2ZW50KGV2ZW50KTtcbiAgICAgICAgfSBlbHNlIGlmIChLZXlVdGlsLmlzS2V5Q29kZShldmVudCwgRE9XTl9BUlJPVykpIHtcbiAgICAgICAgICAgIHRoaXMuZGVjcmVtZW50KCk7XG4gICAgICAgICAgICBtdXRlRXZlbnQoZXZlbnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBoYW5kbGVGb2N1c0luKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmZvY3VzZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLm9uRm9jdXNJbi5lbWl0KCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBoYW5kbGVGb2N1c091dChldmVudDogRm9jdXNFdmVudCk6IHZvaWQge1xuICAgICAgICB0aGlzLmZvY3VzZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5vbkZvY3VzT3V0LmVtaXQoKTtcbiAgICAgICAgaWYgKCF0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZXZlbnQucmVsYXRlZFRhcmdldCkpIHtcbiAgICAgICAgICAgIHRoaXMub25Ub3VjaGVkKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGhhbmRsZVNjcm9sbChldmVudDogV2hlZWxFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5fY2FuQ2hhbmdlVmFsdWUgJiYgdGhpcy5mb2N1c2VkKSB7XG4gICAgICAgICAgICBpZiAoZXZlbnQuZGVsdGFZID4gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZGVjcmVtZW50KCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuaW5jcmVtZW50KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gVXBkYXRlcyB2aWV3VmFsdWUgYW5kIGNvbmRpdGlvbmFsbHkgZW1pdHMgbmV3IHZhbHVlLlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBvbiAoY2hhbmdlKSBldmVudCwgd2hlbiB1c2VyIGxlYXZlcyBpbnB1dCBjb250cm9sLiAqL1xuICAgIHVwZGF0ZU9uSW5wdXRDaGFuZ2VkKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy52YWx1ZSAhPT0gdGhpcy5sYXN0RW1pdHRlZFZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLl9lbWl0Q2hhbmdlZFZhbHVlKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fdXBkYXRlVmlld1ZhbHVlKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gVHJhY2sgcGFyc2VkIHZhbHVlIHdoZW4gdXNlciBjaGFuZ2VzIHZhbHVlIG9mIHRoZSBpbnB1dCBjb250cm9sLiAqL1xuICAgIHRyYWNrSW5wdXRWYWx1ZShldmVudDogYW55KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHBhcnNlZFZhbHVlID0gdGhpcy5fcGFyc2VWYWx1ZShldmVudC50YXJnZXQudmFsdWUpO1xuICAgICAgICB0aGlzLl92YWx1ZSA9IHBhcnNlZFZhbHVlICE9IG51bGwgPyB0aGlzLl9jaGVja1ZhbHVlTGltaXRzKHBhcnNlZFZhbHVlKSA6IG51bGw7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9pbmNyZW1lbnRPckRlY3JlbWVudChkaXJlY3Rpb246ICdpbmNyZW1lbnQnIHwgJ2RlY3JlbWVudCcpOiB2b2lkIHtcbiAgICAgICAgaWYgKChkaXJlY3Rpb24gPT09ICdpbmNyZW1lbnQnICYmIHRoaXMuY2FuSW5jcmVtZW50KSB8fCAoZGlyZWN0aW9uID09PSAnZGVjcmVtZW50JyAmJiB0aGlzLmNhbkRlY3JlbWVudCkpIHtcbiAgICAgICAgICAgIGxldCBfc2hvdWxkQ2hhbmdlID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmICh0aGlzLnZhbHVlID09IG51bGwgJiYgdGhpcy5fZmlyc3RFbWl0dGVkVmFsdWUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl92YWx1ZSA9IHRoaXMuX2ZpcnN0RW1pdHRlZFZhbHVlO1xuICAgICAgICAgICAgICAgIGxldCBfbGltaXQ6IG51bWJlcjtcbiAgICAgICAgICAgICAgICBkaXJlY3Rpb24gPT09ICdpbmNyZW1lbnQnID8gKF9saW1pdCA9IHRoaXMubWF4KSA6IChfbGltaXQgPSB0aGlzLm1pbik7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX2ZpcnN0RW1pdHRlZFZhbHVlID09PSBfbGltaXQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fdmFsdWUgPSBfbGltaXQ7XG4gICAgICAgICAgICAgICAgICAgIF9zaG91bGRDaGFuZ2UgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoX3Nob3VsZENoYW5nZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3ZhbHVlID1cbiAgICAgICAgICAgICAgICAgICAgZGlyZWN0aW9uID09PSAnaW5jcmVtZW50J1xuICAgICAgICAgICAgICAgICAgICAgICAgPyB0aGlzLl9jdXRGbG9hdGluZ051bWJlckRpc3RvcnRpb24odGhpcy52YWx1ZSEsIHRoaXMuc3RlcClcbiAgICAgICAgICAgICAgICAgICAgICAgIDogdGhpcy5fY3V0RmxvYXRpbmdOdW1iZXJEaXN0b3J0aW9uKHRoaXMudmFsdWUhLCAtdGhpcy5zdGVwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX2VtaXRDaGFuZ2VkVmFsdWUoKTtcbiAgICAgICAgICAgIHRoaXMuX3VwZGF0ZVZpZXdWYWx1ZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIGdldCBfY2FuQ2hhbmdlVmFsdWUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhKHRoaXMuZGlzYWJsZWQgfHwgdGhpcy5yZWFkb25seSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9jdXRGbG9hdGluZ051bWJlckRpc3RvcnRpb24odmFsdWU6IG51bWJlciwgc3RlcDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgICAgY29uc3Qgc3RlcERlY2ltYWxzID0gYCR7c3RlcH1gLnNwbGl0KCcuJylbMV07XG4gICAgICAgIGNvbnN0IHZhbHVlRGVjaW1hbHMgPSBgJHt2YWx1ZX1gLnNwbGl0KCcuJylbMV07XG4gICAgICAgIGNvbnN0IHN0ZXBEZWNpbWFsc0xlbmd0aCA9IHN0ZXBEZWNpbWFscyA/IHN0ZXBEZWNpbWFscy5sZW5ndGggOiAwO1xuICAgICAgICBjb25zdCB2YWx1ZURlY2ltYWxzTGVuZ3RoID0gdmFsdWVEZWNpbWFscyA/IHZhbHVlRGVjaW1hbHMubGVuZ3RoIDogMDtcbiAgICAgICAgY29uc3QgbG9uZ2VzdERlY2ltYWwgPSB2YWx1ZURlY2ltYWxzTGVuZ3RoID4gc3RlcERlY2ltYWxzTGVuZ3RoID8gdmFsdWVEZWNpbWFsc0xlbmd0aCA6IHN0ZXBEZWNpbWFsc0xlbmd0aDtcblxuICAgICAgICByZXR1cm4gTnVtYmVyKCh2YWx1ZSArIHN0ZXApLnRvRml4ZWQobG9uZ2VzdERlY2ltYWwpKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2NoZWNrVmFsdWVMaW1pdHModmFsdWU6IG51bWJlcik6IG51bWJlciB7XG4gICAgICAgIGlmICh2YWx1ZSA+IHRoaXMuX21heCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21heDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodmFsdWUgPCB0aGlzLl9taW4pIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9taW47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc05hTih0aGlzLm1heEZyYWN0aW9uRGlnaXRzKSkge1xuICAgICAgICAgICAgdmFsdWUgPSBOdW1iZXIodmFsdWUudG9GaXhlZCh0aGlzLm1heEZyYWN0aW9uRGlnaXRzKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc05hTih0aGlzLm1pbkZyYWN0aW9uRGlnaXRzKSkge1xuICAgICAgICAgICAgdmFsdWUgPSBOdW1iZXIodmFsdWUudG9GaXhlZCh0aGlzLm1pbkZyYWN0aW9uRGlnaXRzKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZW1pdENoYW5nZWRWYWx1ZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5sYXN0RW1pdHRlZFZhbHVlID0gdGhpcy52YWx1ZTtcbiAgICAgICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHRoaXMudmFsdWUpO1xuICAgICAgICB0aGlzLm9uQ2hhbmdlKHRoaXMudmFsdWUpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBnZXQgX21heCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gIWlzTmFOKHRoaXMubWF4KSA/IHRoaXMubWF4IDogTnVtYmVyLk1BWF9WQUxVRTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgZ2V0IF9taW4oKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuICFpc05hTih0aGlzLm1pbikgPyB0aGlzLm1pbiA6IC1OdW1iZXIuTUFYX1ZBTFVFO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfdXBkYXRlVmlld1ZhbHVlKCk6IHZvaWQge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuX2Zvcm1hdFRvVmlld1ZhbHVlKHRoaXMudmFsdWUpO1xuICAgICAgICB0aGlzLmlucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50LnZhbHVlID0gdmFsdWU7XG4gICAgICAgIHRoaXMuX2xpdmVBbm5vdW5jZXIuYW5ub3VuY2UodmFsdWUpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfbGlzdGVuT25CdXR0b25zQ2xpY2soKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmhhc1N0ZXBCdXR0b25zKSB7XG4gICAgICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgICAgICAgICAgICB0aGlzLl9zZXR1cEJ1dHRvbkxpc3RlbmVyKHRoaXMuaW5jcmVtZW50QnV0dG9uKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmluY3JlbWVudCgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgICAgICAgICAgIHRoaXMuX3NldHVwQnV0dG9uTGlzdGVuZXIodGhpcy5kZWNyZW1lbnRCdXR0b24pLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGVjcmVtZW50KCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBMaXN0ZW5zIGZvciBjbGljayBvciBzcGFjZS9lbnRlciBrZXlkb3duIGV2ZW50cy5cbiAgICAgKlxuICAgICAqIEZvciBsb25nIGNsaWNrcyB3aWxsIGNvbnRpbnVvdXNseSBlbWl0IGV2ZW50IHVudGlsIFwibW91c2V1cFwiIGV2ZW50IGlzIGRldGVjdGVkXG4gICAgICovXG4gICAgcHJpdmF0ZSBfc2V0dXBCdXR0b25MaXN0ZW5lcihlbGVtZW50UmVmOiBFbGVtZW50UmVmKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICAgICAgY29uc3Qgb25Nb3VzZURvd24kID0gZnJvbUV2ZW50KGVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgJ21vdXNlZG93bicpO1xuICAgICAgICBjb25zdCBvbk1vdXNlVXAkID0gZnJvbUV2ZW50KHdpbmRvdywgJ21vdXNldXAnKTtcbiAgICAgICAgY29uc3Qgb25LZXlEb3duJCA9IGZyb21FdmVudDxLZXlib2FyZEV2ZW50PihlbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsICdrZXlkb3duJykucGlwZShcbiAgICAgICAgICAgIGZpbHRlcigoZXZlbnQpID0+IEtleVV0aWwuaXNLZXlDb2RlKGV2ZW50LCBbU1BBQ0UsIEVOVEVSXSkpXG4gICAgICAgICk7XG5cbiAgICAgICAgY29uc3QgdGltZXJGYWN0b3J5JCA9IGRlZmVyKCgpID0+XG4gICAgICAgICAgICB0aW1lcig1MDApLnBpcGUoXG4gICAgICAgICAgICAgICAgc3dpdGNoTWFwKCgpID0+IGludGVydmFsKDQwKSksXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsKG9uTW91c2VVcCQpXG4gICAgICAgICAgICApXG4gICAgICAgICk7XG5cbiAgICAgICAgcmV0dXJuIG1lcmdlKFxuICAgICAgICAgICAgb25Nb3VzZURvd24kLFxuICAgICAgICAgICAgb25Nb3VzZURvd24kLnBpcGUoc3dpdGNoTWFwKCgpID0+IHRpbWVyRmFjdG9yeSQpKSxcbiAgICAgICAgICAgIC8vIHdoaWxlIGtleSBpcyBwcmVzc2VkLCBldmVudCB3aWxsIGJlIGVtaXR0ZWQgY29udGludW91c2x5LCBzbyB0aGVyZSdzIG5vIG5lZWQgZm9yIHRpbWVyRmFjdG9yeSRcbiAgICAgICAgICAgIG9uS2V5RG93biRcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3BhcnNlVmFsdWUodGV4dDogc3RyaW5nKTogTnVsbGFibGU8bnVtYmVyPiB7XG4gICAgICAgIGNvbnN0IHRyaW1tZWRUZXh0ID0gdGV4dC50cmltKCk7XG5cbiAgICAgICAgaWYgKHRyaW1tZWRUZXh0ID09PSAnJykge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBmaWx0ZXJlZFRleHQgPSB0cmltbWVkVGV4dFxuICAgICAgICAgICAgLnJlcGxhY2UoL1xccy9nLCAnJylcbiAgICAgICAgICAgIC5yZXBsYWNlKHRoaXMuX2N1cnJlbmN5LCAnJylcbiAgICAgICAgICAgIC5yZXBsYWNlKHRoaXMuX2dyb3VwU2VwYXJhdG9yLCAnJylcbiAgICAgICAgICAgIC5yZXBsYWNlKHRoaXMuX21pbnVzU2lnbiwgJy0nKVxuICAgICAgICAgICAgLnJlcGxhY2UodGhpcy5fZGVjaW1hbFNlcGFyYXRvciwgJy4nKVxuICAgICAgICAgICAgLnJlcGxhY2UodGhpcy5fbnVtZXJhbHMsIHRoaXMuX2luZGV4KTtcblxuICAgICAgICBpZiAoZmlsdGVyZWRUZXh0KSB7XG4gICAgICAgICAgICBjb25zdCBwYXJzZWRWYWx1ZSA9IE51bWJlcihmaWx0ZXJlZFRleHQpO1xuICAgICAgICAgICAgcmV0dXJuIGlzTmFOKHBhcnNlZFZhbHVlKSA/IHRoaXMubGFzdEVtaXR0ZWRWYWx1ZSA6IHBhcnNlZFZhbHVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9nZXROdW1iZXJGb3JtYXQoKTogTnVtYmVyRm9ybWF0IHtcbiAgICAgICAgaWYgKGlzRGV2TW9kZSgpICYmIHRoaXMubWluRnJhY3Rpb25EaWdpdHMgPiB0aGlzLm1heEZyYWN0aW9uRGlnaXRzKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJSYW5nZSBlcnJvciAtIG1pbkZyYWN0aW9uRGlnaXRzIGNhbid0IGJlIGJpZ2dlciB0aGFuIG1heEZyYWN0aW9uRGlnaXRzXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5ldyBOdW1iZXJGb3JtYXQodGhpcy5sb2NhbGUsIHtcbiAgICAgICAgICAgIGxvY2FsZU1hdGNoZXI6IHRoaXMubG9jYWxlTWF0Y2hlciA/PyB1bmRlZmluZWQsXG4gICAgICAgICAgICBzdHlsZTogdGhpcy5tb2RlLFxuICAgICAgICAgICAgY3VycmVuY3k6IHRoaXMuY3VycmVuY3ksXG4gICAgICAgICAgICAvLyBvbmx5IGF2YWlsYWJsZSBpbiBFUzIwMjAgYW5kIGxhdGVyXG4gICAgICAgICAgICBbJ2N1cnJlbmN5RGlzcGxheScgYXMgYW55XTogdGhpcy5jdXJyZW5jeURpc3BsYXksXG4gICAgICAgICAgICB1c2VHcm91cGluZzogdGhpcy51c2VHcm91cGluZyxcbiAgICAgICAgICAgIG1pbmltdW1GcmFjdGlvbkRpZ2l0czogdGhpcy5taW5GcmFjdGlvbkRpZ2l0cyxcbiAgICAgICAgICAgIG1heGltdW1GcmFjdGlvbkRpZ2l0czogdGhpcy5tYXhGcmFjdGlvbkRpZ2l0c1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2dldE51bWVyYWxzRXhwcmVzc2lvbnMoKTogUmVnRXhwIHtcbiAgICAgICAgY29uc3QgbnVtZXJhbHMgPSBbXG4gICAgICAgICAgICAuLi5uZXcgTnVtYmVyRm9ybWF0KHRoaXMubG9jYWxlLCB7IHVzZUdyb3VwaW5nOiBmYWxzZSB9KS5mb3JtYXQoOTg3NjU0MzIxMCkuc3BsaXQoJycpXG4gICAgICAgIF0ucmV2ZXJzZSgpO1xuICAgICAgICBjb25zdCBpbmRleCA9IG5ldyBNYXAobnVtZXJhbHMubWFwKChkLCBpKSA9PiBbZCwgaV0pKTtcbiAgICAgICAgdGhpcy5faW5kZXggPSAoZCkgPT4gaW5kZXguZ2V0KGQpO1xuXG4gICAgICAgIHJldHVybiBuZXcgUmVnRXhwKGBbJHtudW1lcmFscy5qb2luKCcnKX1dYCwgJ2cnKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2dldERlY2ltYWxTZXBhcmF0b3IoKTogUmVnRXhwIHtcbiAgICAgICAgY29uc3QgZm9ybWF0dGVyID0gbmV3IE51bWJlckZvcm1hdCh0aGlzLmxvY2FsZSwgeyB1c2VHcm91cGluZzogZmFsc2UgfSk7XG4gICAgICAgIHJldHVybiBuZXcgUmVnRXhwKGBbJHtmb3JtYXR0ZXIuZm9ybWF0KDEuMSkudHJpbSgpLnJlcGxhY2UodGhpcy5fbnVtZXJhbHMsICcnKX1dYCwgJ2cnKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2dldEdyb3VwaW5nU2VwYXJhdG9yKCk6IFJlZ0V4cCB7XG4gICAgICAgIGNvbnN0IGZvcm1hdHRlciA9IG5ldyBOdW1iZXJGb3JtYXQodGhpcy5sb2NhbGUsIHsgdXNlR3JvdXBpbmc6IHRydWUgfSk7XG4gICAgICAgIHJldHVybiBuZXcgUmVnRXhwKGBbJHtmb3JtYXR0ZXIuZm9ybWF0KDEwMDApLnRyaW0oKS5yZXBsYWNlKHRoaXMuX251bWVyYWxzLCAnJyl9XWAsICdnJyk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9nZXRNaW51c1NpZ25FeHByZXNzaW9uKCk6IFJlZ0V4cCB7XG4gICAgICAgIGNvbnN0IGZvcm1hdHRlciA9IG5ldyBOdW1iZXJGb3JtYXQodGhpcy5sb2NhbGUsIHsgdXNlR3JvdXBpbmc6IGZhbHNlIH0pO1xuICAgICAgICByZXR1cm4gbmV3IFJlZ0V4cChgWyR7Zm9ybWF0dGVyLmZvcm1hdCgtMSkudHJpbSgpLnJlcGxhY2UodGhpcy5fbnVtZXJhbHMsICcnKX1dYCwgJ2cnKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2dldEN1cnJlbmN5RXhwcmVzc2lvbigpOiBSZWdFeHAge1xuICAgICAgICBpZiAodGhpcy5jdXJyZW5jeSkge1xuICAgICAgICAgICAgY29uc3QgZm9ybWF0dGVyID0gbmV3IE51bWJlckZvcm1hdCh0aGlzLmxvY2FsZSwge1xuICAgICAgICAgICAgICAgIHN0eWxlOiAnY3VycmVuY3knLFxuICAgICAgICAgICAgICAgIGN1cnJlbmN5OiB0aGlzLmN1cnJlbmN5LFxuICAgICAgICAgICAgICAgIC8vIG9ubHkgYXZhaWxhYmxlIGluIEVTMjAyMCBhbmQgbGF0ZXJcbiAgICAgICAgICAgICAgICBbJ2N1cnJlbmN5RGlzcGxheScgYXMgYW55XTogdGhpcy5jdXJyZW5jeURpc3BsYXlcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5jdXJyZW5jeVNpZ24gPSBgJHtmb3JtYXR0ZXJcbiAgICAgICAgICAgICAgICAuZm9ybWF0KDEpXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoL1xccy9nLCAnJylcbiAgICAgICAgICAgICAgICAucmVwbGFjZSh0aGlzLl9udW1lcmFscywgJycpXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UodGhpcy5fZGVjaW1hbFNlcGFyYXRvciwgJycpXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UodGhpcy5fZ3JvdXBTZXBhcmF0b3IsICcnKX1gO1xuXG4gICAgICAgICAgICByZXR1cm4gbmV3IFJlZ0V4cChgWyR7dGhpcy5jdXJyZW5jeVNpZ259XWAsICdnJyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3IFJlZ0V4cChgW11gLCAnZycpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfYnVpbGRSZWdFeHBzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9udW1lcmFscyA9IHRoaXMuX2dldE51bWVyYWxzRXhwcmVzc2lvbnMoKTtcbiAgICAgICAgdGhpcy5fZGVjaW1hbFNlcGFyYXRvciA9IHRoaXMuX2dldERlY2ltYWxTZXBhcmF0b3IoKTtcbiAgICAgICAgdGhpcy5fbWludXNTaWduID0gdGhpcy5fZ2V0TWludXNTaWduRXhwcmVzc2lvbigpO1xuICAgICAgICB0aGlzLl9ncm91cFNlcGFyYXRvciA9IHRoaXMuX2dldEdyb3VwaW5nU2VwYXJhdG9yKCk7XG4gICAgICAgIHRoaXMuX2N1cnJlbmN5ID0gdGhpcy5fZ2V0Q3VycmVuY3lFeHByZXNzaW9uKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9mb3JtYXRUb1ZpZXdWYWx1ZShudW1iZXI6IE51bGxhYmxlPG51bWJlcj4pOiBzdHJpbmcge1xuICAgICAgICBpZiAobnVtYmVyID09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmN1cnJlbmN5XG4gICAgICAgICAgICAgICAgPyB0aGlzLl9udW1iZXJGb3JtYXQuZm9ybWF0KG51bWJlcikucmVwbGFjZSh0aGlzLl9jdXJyZW5jeSwgJycpXG4gICAgICAgICAgICAgICAgOiB0aGlzLl9udW1iZXJGb3JtYXQuZm9ybWF0KG51bWJlcik7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCI8ZmQtZm9ybS1pbnB1dC1tZXNzYWdlLWdyb3VwPlxuICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJmZC1zdGVwLWlucHV0XCJcbiAgICAgICAgW2NsYXNzXT1cInN0YXRlID8gJ2lzLScgKyBzdGF0ZSA6ICcnXCJcbiAgICAgICAgW2NsYXNzLmlzLWZvY3VzXT1cImZvY3VzZWRcIlxuICAgICAgICBbY2xhc3MuaXMtcmVhZG9ubHldPVwicmVhZG9ubHlcIlxuICAgICAgICBbY2xhc3MuaXMtZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICBbY2xhc3MuZmQtc3RlcC1pbnB1dC0td2l0aG91dC1idXR0b25zXT1cIiFoYXNTdGVwQnV0dG9uc1wiXG4gICAgPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAqbmdJZj1cImhhc1N0ZXBCdXR0b25zXCJcbiAgICAgICAgICAgIGZkLWJ1dHRvblxuICAgICAgICAgICAgI2RlY3JlbWVudEJ0blxuICAgICAgICAgICAgZmRUeXBlPVwidHJhbnNwYXJlbnRcIlxuICAgICAgICAgICAgY2xhc3M9XCJmZC1zdGVwLWlucHV0X19idXR0b25cIlxuICAgICAgICAgICAgdGFiaW5kZXg9XCItMVwiXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhY2FuRGVjcmVtZW50XCJcbiAgICAgICAgICAgIFt0aXRsZV09XCJkZWNyZW1lbnRCdXR0b25UaXRsZSB8fCAoJ2NvcmVTdGVwSW5wdXQuZGVjcmVtZW50QnV0dG9uVGl0bGUnIHwgZmRUcmFuc2xhdGUpXCJcbiAgICAgICAgICAgIFtnbHlwaF09XCJkZWNyZW1lbnRCdXR0b25JY29uXCJcbiAgICAgICAgICAgIChibHVyKT1cIm9uVG91Y2hlZCgpXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiZGVjcmVtZW50QnV0dG9uVGl0bGUgfHwgKCdjb3JlU3RlcElucHV0LmRlY3JlbWVudEJ1dHRvblRpdGxlJyB8IGZkVHJhbnNsYXRlKVwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWNvbnRyb2xzXT1cImlucHV0SWRcIlxuICAgICAgICA+PC9idXR0b24+XG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgI2lucHV0RWxlbWVudFxuICAgICAgICAgICAgW25hbWVdPVwibmFtZVwiXG4gICAgICAgICAgICBbaWRdPVwiaW5wdXRJZFwiXG4gICAgICAgICAgICBbdGl0bGVdPVwiaW5wdXRUaXRsZVwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICAgICAgW3JlYWRPbmx5XT1cInJlYWRvbmx5XCJcbiAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlclwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImFyaWFMYWJlbFwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsbGVkYnldPVwiYXJpYUxhYmVsbGVkQnlcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS12YWx1ZW5vd109XCJ2YWx1ZVwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLXZhbHVlbWF4XT1cIm1heFwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLXZhbHVlbWluXT1cIm1pblwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWRlc2NyaWJlZGJ5XT1cImNhbkRpc3BsYXlMYWJlbCA/IGlucHV0SWQgKyAnX19kZXNjcmlwdGlvbicgOiAnJ1wiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLXJlcXVpcmVkXT1cInJlcXVpcmVkXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtcm9sZWRlc2NyaXB0aW9uXT1cImFyaWFSb2xlRGVzY3JpcHRpb24gfHwgKCdjb3JlU3RlcElucHV0LmFyaWFSb2xlRGVzY3JpcHRpb24nIHwgZmRUcmFuc2xhdGUpXCJcbiAgICAgICAgICAgIChmb2N1c2luKT1cImhhbmRsZUZvY3VzSW4oKVwiXG4gICAgICAgICAgICAod2hlZWwpPVwiaGFuZGxlU2Nyb2xsKCRldmVudClcIlxuICAgICAgICAgICAgKGtleWRvd24pPVwiaGFuZGxlS2V5RG93bigkZXZlbnQpXCJcbiAgICAgICAgICAgIChpbnB1dCk9XCJ0cmFja0lucHV0VmFsdWUoJGV2ZW50KVwiXG4gICAgICAgICAgICAoY2hhbmdlKT1cInVwZGF0ZU9uSW5wdXRDaGFuZ2VkKClcIlxuICAgICAgICAgICAgW3N0eWxlLnRleHRBbGlnbl09XCJ0ZXh0QWxpZ25cIlxuICAgICAgICAgICAgY2xhc3M9XCJmZC1pbnB1dCBmZC1pbnB1dC0tbm8tbnVtYmVyLXNwaW5uZXIgZmQtc3RlcC1pbnB1dF9faW5wdXRcIlxuICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgaW5wdXRtb2RlPVwibnVtZXJpY1wiXG4gICAgICAgIC8+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICpuZ0lmPVwiaGFzU3RlcEJ1dHRvbnNcIlxuICAgICAgICAgICAgZmQtYnV0dG9uXG4gICAgICAgICAgICAjaW5jcmVtZW50QnRuXG4gICAgICAgICAgICBmZFR5cGU9XCJ0cmFuc3BhcmVudFwiXG4gICAgICAgICAgICBjbGFzcz1cImZkLXN0ZXAtaW5wdXRfX2J1dHRvblwiXG4gICAgICAgICAgICB0YWJpbmRleD1cIi0xXCJcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFjYW5JbmNyZW1lbnRcIlxuICAgICAgICAgICAgW3RpdGxlXT1cImluY3JlbWVudEJ1dHRvblRpdGxlIHx8ICgnY29yZVN0ZXBJbnB1dC5pbmNyZW1lbnRCdXR0b25UaXRsZScgfCBmZFRyYW5zbGF0ZSlcIlxuICAgICAgICAgICAgW2dseXBoXT1cImluY3JlbWVudEJ1dHRvbkljb25cIlxuICAgICAgICAgICAgKGJsdXIpPVwib25Ub3VjaGVkKClcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJpbmNyZW1lbnRCdXR0b25UaXRsZSB8fCAoJ2NvcmVTdGVwSW5wdXQuaW5jcmVtZW50QnV0dG9uVGl0bGUnIHwgZmRUcmFuc2xhdGUpXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtY29udHJvbHNdPVwiaW5wdXRJZFwiXG4gICAgICAgID48L2J1dHRvbj5cbiAgICA8L2Rpdj5cblxuICAgIDxmZC1mb3JtLW1lc3NhZ2UgKm5nSWY9XCIhIXN0YXRlTWVzc2FnZVwiIFt0eXBlXT1cInN0YXRlXCIgW2lubmVySFRNTF09XCJzdGF0ZU1lc3NhZ2VcIj48L2ZkLWZvcm0tbWVzc2FnZT5cbjwvZmQtZm9ybS1pbnB1dC1tZXNzYWdlLWdyb3VwPlxuXG48c3BhbiAqbmdJZj1cImNhbkRpc3BsYXlMYWJlbFwiIFtpZF09XCJpbnB1dElkICsgJ19fZGVzY3JpcHRpb24nXCIgY2xhc3M9XCJmZC1mb3JtLWxhYmVsIGZkLWZvcm0tbGFiZWwtLXVuaXQtZGVzY3JpcHRpb25cIj5cbiAgICB7eyB1bml0IHx8IGN1cnJlbmN5U2lnbiB9fVxuPC9zcGFuPlxuIl19