@bryntum/calendar-angular-thin 7.1.1

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 (46) hide show
  1. package/README.md +44 -0
  2. package/bryntum-calendar-angular-thin.d.ts +5 -0
  3. package/bundles/bryntum-calendar-angular-thin.umd.js +22195 -0
  4. package/bundles/bryntum-calendar-angular-thin.umd.js.map +1 -0
  5. package/esm2015/bryntum-calendar-angular-thin.js +5 -0
  6. package/esm2015/lib/bryntum-agenda-view.component.js +2503 -0
  7. package/esm2015/lib/bryntum-calendar-date-picker.component.js +1045 -0
  8. package/esm2015/lib/bryntum-calendar-project-model.component.js +369 -0
  9. package/esm2015/lib/bryntum-calendar.component.js +2355 -0
  10. package/esm2015/lib/bryntum-day-agenda-view.component.js +1338 -0
  11. package/esm2015/lib/bryntum-day-resource-view.component.js +1347 -0
  12. package/esm2015/lib/bryntum-day-view.component.js +1323 -0
  13. package/esm2015/lib/bryntum-event-list.component.js +2453 -0
  14. package/esm2015/lib/bryntum-mode-selector.component.js +702 -0
  15. package/esm2015/lib/bryntum-month-agenda-view.component.js +1201 -0
  16. package/esm2015/lib/bryntum-month-grid.component.js +1262 -0
  17. package/esm2015/lib/bryntum-month-view.component.js +1337 -0
  18. package/esm2015/lib/bryntum-range-menu.component.js +884 -0
  19. package/esm2015/lib/bryntum-resource-view.component.js +1068 -0
  20. package/esm2015/lib/bryntum-week-view.component.js +1323 -0
  21. package/esm2015/lib/bryntum-year-view.component.js +1163 -0
  22. package/esm2015/lib/calendar.module.js +99 -0
  23. package/esm2015/lib/wrapper.helper.js +74 -0
  24. package/esm2015/public-api.js +21 -0
  25. package/fesm2015/bryntum-calendar-angular-thin.js +21714 -0
  26. package/fesm2015/bryntum-calendar-angular-thin.js.map +1 -0
  27. package/lib/bryntum-agenda-view.component.d.ts +2953 -0
  28. package/lib/bryntum-calendar-date-picker.component.d.ts +1525 -0
  29. package/lib/bryntum-calendar-project-model.component.d.ts +399 -0
  30. package/lib/bryntum-calendar.component.d.ts +2577 -0
  31. package/lib/bryntum-day-agenda-view.component.d.ts +1960 -0
  32. package/lib/bryntum-day-resource-view.component.d.ts +2025 -0
  33. package/lib/bryntum-day-view.component.d.ts +1980 -0
  34. package/lib/bryntum-event-list.component.d.ts +2888 -0
  35. package/lib/bryntum-mode-selector.component.d.ts +851 -0
  36. package/lib/bryntum-month-agenda-view.component.d.ts +1765 -0
  37. package/lib/bryntum-month-grid.component.d.ts +1731 -0
  38. package/lib/bryntum-month-view.component.d.ts +1897 -0
  39. package/lib/bryntum-range-menu.component.d.ts +1130 -0
  40. package/lib/bryntum-resource-view.component.d.ts +1512 -0
  41. package/lib/bryntum-week-view.component.d.ts +1980 -0
  42. package/lib/bryntum-year-view.component.d.ts +1661 -0
  43. package/lib/calendar.module.d.ts +22 -0
  44. package/lib/wrapper.helper.d.ts +26 -0
  45. package/package.json +33 -0
  46. package/public-api.d.ts +17 -0
@@ -0,0 +1,1347 @@
1
+ /* eslint-disable @typescript-eslint/no-unused-vars */
2
+ /**
3
+ * Angular wrapper for Bryntum DayResourceView
4
+ */
5
+ import { Component, EventEmitter, Output, Input } from '@angular/core';
6
+ import WrapperHelper from './wrapper.helper';
7
+ import { Widget } from '@bryntum/core-thin';
8
+ import { DayResourceView } from '@bryntum/calendar-thin';
9
+ import * as i0 from "@angular/core";
10
+ export class BryntumDayResourceViewComponent {
11
+ constructor(element) {
12
+ this.bryntumConfig = {
13
+ adopt: undefined,
14
+ appendTo: undefined,
15
+ href: undefined,
16
+ angularComponent: this,
17
+ features: {},
18
+ listeners: {}
19
+ };
20
+ // Events emitters
21
+ /**
22
+ * This event fires whenever the [autoCreate gesture](https://bryntum.com/products/calendar/docs/api/Calendar/widget/mixin/CalendarMixin#config-autoCreate) is detected
23
+ * and also when a [drag-create](https://bryntum.com/products/calendar/docs/api/Calendar/feature/CalendarDrag) gesture is detected.
24
+ * ...
25
+ * [View online docs...](https://bryntum.com/products/calendar/docs/api/Calendar/widget/DayResourceView#event-beforeAutoCreate)
26
+ * @param {object} event Event object
27
+ * @param {Event} event.domEvent The DOM event which initiated the creation.
28
+ * @param {Date} event.date *DEPRECATED in favour of `startDate`.* The starting time of the event to be created. If this is in a `DayView`, this will be snapped according to the specification in [autoCreate](https://bryntum.com/products/calendar/docs/api/Calendar/widget/mixin/CalendarMixin#config-autoCreate)
29
+ * @param {Date} event.startDate The starting time of the event to be created. If this is in a `DayView`, this will be snapped according to the specification in [autoCreate](https://bryntum.com/products/calendar/docs/api/Calendar/widget/mixin/CalendarMixin#config-autoCreate)
30
+ * @param {Date} event.endDate The ending time of the event to be created.
31
+ * @param {Scheduler.model.ResourceModel} event.resourceRecord The resource if the UI includes a resource.
32
+ * @param {CalendarView} event.view This view.
33
+ */
34
+ this.onBeforeAutoCreate = new EventEmitter();
35
+ /**
36
+ * Triggered before a view's orientating date changes.
37
+ * ...
38
+ * [View online docs...](https://bryntum.com/products/calendar/docs/api/Calendar/widget/DayResourceView#event-beforeChangeDate)
39
+ * @param {object} event Event object
40
+ * @param {Date} event.oldDate The current orientating date of this view.
41
+ * @param {Date} event.date The new date to which this view is to be orientated.
42
+ */
43
+ this.onBeforeChangeDate = new EventEmitter();
44
+ /**
45
+ * Fires before an object is destroyed.
46
+ * @param {object} event Event object
47
+ * @param {Core.Base} event.source The Object that is being destroyed.
48
+ */
49
+ this.onBeforeDestroy = new EventEmitter();
50
+ /**
51
+ * Triggered before a widget is hidden. Return `false` to prevent the action.
52
+ * @param {object} event Event object
53
+ * @param {Core.widget.Widget} event.source The widget being hidden.
54
+ */
55
+ this.onBeforeHide = new EventEmitter();
56
+ /**
57
+ * Triggered before a new [responsiveState](https://bryntum.com/products/calendar/docs/api/Core/widget/mixin/Responsive#config-responsiveState) is applied.
58
+ * @param {object} event Event object
59
+ * @param {Core.widget.Widget} event.source The widget whose `responsiveState` is to be changed
60
+ * @param {string} event.state The new value for the widget's `responsiveState`
61
+ * @param {string} event.oldState The previous value for the widget's `responsiveState`
62
+ */
63
+ this.onBeforeResponsiveStateChange = new EventEmitter();
64
+ /**
65
+ * Fired before this container will load record values into its child fields. This is useful if you
66
+ * want to modify the UI before data is loaded (e.g. set some input field to be readonly)
67
+ * @param {object} event Event object
68
+ * @param {Core.widget.Container} event.source The container
69
+ * @param {Core.data.Model} event.record The record
70
+ */
71
+ this.onBeforeSetRecord = new EventEmitter();
72
+ /**
73
+ * Triggered before a widget is shown. Return `false` to prevent the action.
74
+ * @param {object} event Event object
75
+ * @param {Core.widget.Widget,any} event.source The widget being shown
76
+ */
77
+ this.onBeforeShow = new EventEmitter();
78
+ /**
79
+ * Fired before state is applied to the source. Allows editing the state object or preventing the operation.
80
+ * @param {object} event Event object
81
+ * @param {any} event.state State object config
82
+ */
83
+ this.onBeforeStateApply = new EventEmitter();
84
+ /**
85
+ * Fired before state is saved by the StateProvider. Allows editing the state object or preventing the operation.
86
+ * @param {object} event Event object
87
+ * @param {any} event.state State object config
88
+ */
89
+ this.onBeforeStateSave = new EventEmitter();
90
+ /**
91
+ * Fires when any other event is fired from the object.
92
+ * ...
93
+ * [View online docs...](https://bryntum.com/products/calendar/docs/api/Calendar/widget/DayResourceView#event-catchAll)
94
+ * @param {object} event Event object
95
+ * @param {{[key: string]: any, type: string}} event.event The Object that contains event details
96
+ * @param {string} event.event.type The type of the event which is caught by the listener
97
+ */
98
+ this.onCatchAll = new EventEmitter();
99
+ /**
100
+ * Fired when a new set of events has been gathered for this view's date range.
101
+ * @param {object} event Event object
102
+ * @param {Map<any, any>} event.cellMap The map of date keys to [day cell](https://bryntum.com/products/calendar/docs/api/Calendar/widget/mixin/DayCellCollecter#typedef-DayCell) data blocks.
103
+ */
104
+ this.onCellMapPopulated = new EventEmitter();
105
+ /**
106
+ * Fires when a Panel is collapsed using the [collapsible](https://bryntum.com/products/calendar/docs/api/Core/widget/Panel#config-collapsible) setting.
107
+ * @param {object} event Event object
108
+ * @param {Core.widget.Panel} event.source This Panel.
109
+ */
110
+ this.onCollapse = new EventEmitter();
111
+ /**
112
+ * Fired after one day cell's events are collected in sorted order according to the
113
+ * [eventSorter](https://bryntum.com/products/calendar/docs/api/Calendar/widget/mixin/CalendarMixin#config-eventSorter)
114
+ * ...
115
+ * [View online docs...](https://bryntum.com/products/calendar/docs/api/Calendar/widget/DayResourceView#event-dayCellPopulated)
116
+ * @param {object} event Event object
117
+ * @param {Scheduler.model.EventModel[]} event.events The events to be shown for the passed date
118
+ * @param {Date} event.The date the events are to be shown in.
119
+ */
120
+ this.onDayCellPopulated = new EventEmitter();
121
+ /**
122
+ * Fires when an object is destroyed.
123
+ * @param {object} event Event object
124
+ * @param {Core.Base} event.source The Object that is being destroyed.
125
+ */
126
+ this.onDestroy = new EventEmitter();
127
+ /**
128
+ * Fires when a field is mutated and the state of the [hasChanges](https://bryntum.com/products/calendar/docs/api/Core/widget/Container#property-hasChanges) property changes
129
+ * @param {object} event Event object
130
+ * @param {Core.widget.Container} event.source The container.
131
+ * @param {boolean} event.dirty The dirty state of the Container - `true` if there are any fields which have been changed since initial load.
132
+ */
133
+ this.onDirtyStateChange = new EventEmitter();
134
+ /**
135
+ * Triggered when a widget's [element](https://bryntum.com/products/calendar/docs/api/Core/widget/Widget#property-element) is available.
136
+ * @param {object} event Event object
137
+ * @param {HTMLElement} event.element The Widget's element.
138
+ */
139
+ this.onElementCreated = new EventEmitter();
140
+ /**
141
+ * Fired when an [autoCreate](https://bryntum.com/products/calendar/docs/api/Calendar/widget/mixin/CalendarMixin#config-autoCreate) gesture has created a new event
142
+ * and added it to the event store.
143
+ * ...
144
+ * [View online docs...](https://bryntum.com/products/calendar/docs/api/Calendar/widget/DayResourceView#event-eventAutoCreated)
145
+ * @param {object} event Event object
146
+ * @param {CalendarView} event.source This Calendar view instance.
147
+ * @param {Scheduler.model.EventModel} event.eventRecord The new event record.
148
+ */
149
+ this.onEventAutoCreated = new EventEmitter();
150
+ /**
151
+ * Fires when a day spanning event is found, and the date to which its encapsulating event bar
152
+ * extends has been calculated.
153
+ * ...
154
+ * [View online docs...](https://bryntum.com/products/calendar/docs/api/Calendar/widget/DayResourceView#event-eventPropagate)
155
+ * @param {object} event Event object
156
+ * @param {Date} event.eventEndDate The end date for which to calculate the propagate end date.
157
+ * @param {Date} event.propagateEndDate The system-calculated end point of the event bar.
158
+ * @param {boolean} event.isAllDay `true` if the event is an all day event, or spans multiple days.
159
+ * @param {boolean} event.isOverflow `true` if this is being called as part of further propagation.
160
+ * @param {boolean} event.overflows `true` if the event extends into future cells.
161
+ * @param {Scheduler.model.EventModel} event.eventRecord The event record being propagated.
162
+ * @param {Date} event.date The date from which the event is being propagated.
163
+ */
164
+ this.onEventPropagate = new EventEmitter();
165
+ /**
166
+ * Fires when a Panel is expanded using the [collapsible](https://bryntum.com/products/calendar/docs/api/Core/widget/Panel#config-collapsible) setting.
167
+ * @param {object} event Event object
168
+ * @param {Core.widget.Panel} event.source This Panel.
169
+ */
170
+ this.onExpand = new EventEmitter();
171
+ /**
172
+ * Fired when focus enters this Widget.
173
+ * @param {object} event Event object
174
+ * @param {Core.widget.Widget} event.source This Widget
175
+ * @param {HTMLElement} event.fromElement The element which lost focus.
176
+ * @param {HTMLElement} event.toElement The element which gained focus.
177
+ * @param {Core.widget.Widget} event.fromWidget The widget which lost focus.
178
+ * @param {Core.widget.Widget} event.toWidget The widget which gained focus.
179
+ * @param {boolean} event.backwards `true` if the `toElement` is before the `fromElement` in document order.
180
+ */
181
+ this.onFocusIn = new EventEmitter();
182
+ /**
183
+ * Fired when focus exits this Widget's ownership tree. This is different from a `blur` event.
184
+ * focus moving from within this Widget's ownership tree, even if there are floating widgets
185
+ * will not trigger this event. This is when focus exits this widget completely.
186
+ * @param {object} event Event object
187
+ * @param {Core.widget.Widget} event.source This Widget
188
+ * @param {HTMLElement} event.fromElement The element which lost focus.
189
+ * @param {HTMLElement} event.toElement The element which gained focus.
190
+ * @param {Core.widget.Widget} event.fromWidget The widget which lost focus.
191
+ * @param {Core.widget.Widget} event.toWidget The widget which gained focus.
192
+ * @param {boolean} event.backwards `true` if the `toElement` is before the `fromElement` in document order.
193
+ */
194
+ this.onFocusOut = new EventEmitter();
195
+ /**
196
+ * Triggered after a widget was hidden
197
+ * @param {object} event Event object
198
+ * @param {Core.widget.Widget} event.source The widget
199
+ */
200
+ this.onHide = new EventEmitter();
201
+ /**
202
+ * Fires when this DayView changes an aspect of its layout. This happens when changing
203
+ * [hourHeight](https://bryntum.com/products/calendar/docs/api/Calendar/widget/DayView#property-hourHeight), [minDayWidth](#Calendar/widget/DayView#property-minDayWidth), and when the available
204
+ * day container height changes.
205
+ * @param {object} event Event object
206
+ * @param {Calendar.widget.DayView} event.source The triggering instance.
207
+ */
208
+ this.onLayoutUpdate = new EventEmitter();
209
+ /**
210
+ * Triggered when a widget which had been in a non-visible state for any reason
211
+ * achieves visibility.
212
+ * ...
213
+ * [View online docs...](https://bryntum.com/products/calendar/docs/api/Calendar/widget/DayResourceView#event-paint)
214
+ * @param {object} event Event object
215
+ * @param {Core.widget.Widget} event.source The widget being painted.
216
+ * @param {boolean} event.firstPaint `true` if this is the first paint.
217
+ */
218
+ this.onPaint = new EventEmitter();
219
+ /**
220
+ * Fired when the range of dates encapsulated by this view changes.
221
+ * ...
222
+ * [View online docs...](https://bryntum.com/products/calendar/docs/api/Calendar/widget/DayResourceView#event-rangeChange)
223
+ * @param {object} event Event object
224
+ * @param {typeof DateRangeOwner} event.source This calendar view instance.
225
+ * @param {object} event.old The old date range <strong>if any</strong>.
226
+ * @param {Date} event.old.startDate the old start date.
227
+ * @param {Date} event.old.endDate the old end date.
228
+ * @param {object} event.new The new date range
229
+ * @param {Date} event.new.startDate the new start date.
230
+ * @param {Date} event.new.endDate the new end date.
231
+ */
232
+ this.onRangeChange = new EventEmitter();
233
+ /**
234
+ * Fired when a Widget's read only state is toggled
235
+ * @param {object} event Event object
236
+ * @param {boolean} event.readOnly Read only or not
237
+ */
238
+ this.onReadOnly = new EventEmitter();
239
+ /**
240
+ * This event is fired after a widget's elements have been synchronized due to a direct or indirect call
241
+ * to [recompose](https://bryntum.com/products/calendar/docs/api/Core/widget/Widget#function-recompose), if this results in some change to the widget's rendered DOM elements.
242
+ */
243
+ this.onRecompose = new EventEmitter();
244
+ /**
245
+ * Fires when this DayView refreshes.
246
+ * @param {object} event Event object
247
+ * @param {Calendar.widget.DayView} event.source The triggering instance.
248
+ */
249
+ this.onRefresh = new EventEmitter();
250
+ /**
251
+ * Fired when the encapsulating element of a Widget resizes *only when [monitorResize](https://bryntum.com/products/calendar/docs/api/Core/widget/Widget#config-monitorResize) is `true`*.
252
+ * @param {object} event Event object
253
+ * @param {Core.widget.Widget} event.source This Widget
254
+ * @param {number} event.width The new width
255
+ * @param {number} event.height The new height
256
+ * @param {number} event.oldWidth The old width
257
+ * @param {number} event.oldHeight The old height
258
+ */
259
+ this.onResize = new EventEmitter();
260
+ /**
261
+ * Triggered when a new [responsiveState](https://bryntum.com/products/calendar/docs/api/Core/widget/mixin/Responsive#config-responsiveState) is applied.
262
+ * @param {object} event Event object
263
+ * @param {Core.widget.Widget} event.source The widget whose `responsiveState` has changed
264
+ * @param {string} event.state The new value for the widget's `responsiveState`
265
+ * @param {string} event.oldState The previous value for the widget's `responsiveState`
266
+ */
267
+ this.onResponsiveStateChange = new EventEmitter();
268
+ /**
269
+ * Fired when the [shiftIncrement](https://bryntum.com/products/calendar/docs/api/Calendar/widget/mixin/DateRangeOwner#property-shiftIncrement) of this view changes.
270
+ * @param {object} event Event object
271
+ * @param {object} event.old The shift increment *if any*.
272
+ * @param {object} event.new The shift increment
273
+ */
274
+ this.onShiftIncrementChange = new EventEmitter();
275
+ /**
276
+ * Triggered after a widget is shown.
277
+ * @param {object} event Event object
278
+ * @param {Core.widget.Widget} event.source The widget
279
+ */
280
+ this.onShow = new EventEmitter();
281
+ /**
282
+ * Triggered when changing the [hourHeight](https://bryntum.com/products/calendar/docs/api/Calendar/widget/DayView#property-hourHeight) causes an
283
+ * [hour height breakpoint](https://bryntum.com/products/calendar/docs/api/Calendar/widget/DayView#config-hourHeightBreakpoints) to be crossed
284
+ * and the displayed subTick intervals in the time axis change.
285
+ * @param {object} event Event object
286
+ * @param {object} event.old The old hour height tick resolution object.
287
+ * @param {number} event.old.level The level `0` to `4` where `0` is the default with no subTick times displayed, and `4` means every 5 minute time is displayed.
288
+ * @param {string} event.old.step The time duration of visible subTicks. This is a string in the format required by [parseDuration](https://bryntum.com/products/calendar/docs/api/Core/helper/DateHelper#function-parseDuration-static)
289
+ * @param {object} event.new The new hour height tick resolution object.
290
+ * @param {number} event.new.level The level `0` to `4` where `0` is the default with no subTick times displayed, and `4` means every 5 minute time is displayed.
291
+ * @param {string} event.new.step The time duration of visible subTicks. This is a string in the format required by [parseDuration](https://bryntum.com/products/calendar/docs/api/Core/helper/DateHelper#function-parseDuration-static)
292
+ */
293
+ this.onTickChange = new EventEmitter();
294
+ /**
295
+ * Fired when a time axis is clicked on. If the handler returns
296
+ * `false` the current pointer event is not processed further.
297
+ * @param {object} event Event object
298
+ * @param {Event} event.domEvent The triggering DOM event.
299
+ * @param {Date} event.preciseTime The exact date and time at the clicked position
300
+ * @param {Date} event.time The date and time at the clicked position snapped according to the [increment](https://bryntum.com/products/calendar/docs/api/Calendar/widget/DayView#config-increment) and [timeSnapType](#Calendar/widget/DayView#config-timeSnapType)
301
+ */
302
+ this.onTimeAxisClick = new EventEmitter();
303
+ /**
304
+ * A header [tool](https://bryntum.com/products/calendar/docs/api/Core/widget/Panel#config-tools) has been clicked.
305
+ * @param {object} event Event object
306
+ * @param {Core.widget.Tool} event.source This Panel.
307
+ * @param {Core.widget.Tool} event.tool The tool which is being clicked.
308
+ */
309
+ this.onToolClick = new EventEmitter();
310
+ this.elementRef = element;
311
+ }
312
+ /**
313
+ * Create and append the underlying widget
314
+ */
315
+ ngOnInit() {
316
+ const me = this, { elementRef, bryntumConfig } = me, { instanceClass, instanceName, bryntumConfigs, bryntumEvents } = BryntumDayResourceViewComponent;
317
+ bryntumConfigs.filter(prop => prop in this).forEach(prop => {
318
+ // @ts-ignore
319
+ WrapperHelper.applyPropValue(bryntumConfig, prop, this[prop]);
320
+ if (['features', 'config'].includes(prop)) {
321
+ WrapperHelper.devWarningConfigProp(instanceName, prop);
322
+ }
323
+ });
324
+ // @ts-ignore
325
+ bryntumEvents.filter(event => this[event] && this[event].observers.length > 0).forEach(event => {
326
+ const uncapitalize = (str) => str.charAt(0).toLowerCase() + str.slice(1), eventName = (str) => uncapitalize(str.slice(2));
327
+ // @ts-ignore
328
+ bryntumConfig.listeners[eventName(event)] = e => {
329
+ // @ts-ignore
330
+ me[event].emit(e);
331
+ // EventEmitter does not return values in the normal way, work around it by setting `returnValue` flag
332
+ // in Angular listeners
333
+ return e.returnValue;
334
+ };
335
+ });
336
+ // If component has no container specified in config then use adopt to Wrapper's element
337
+ const containerParam = [
338
+ 'adopt',
339
+ 'appendTo',
340
+ 'insertAfter',
341
+ 'insertBefore'
342
+ // @ts-ignore
343
+ ].find(prop => bryntumConfig[prop]);
344
+ if (!containerParam) {
345
+ if (instanceName === 'Button' || elementRef.nativeElement.getRootNode() instanceof ShadowRoot) {
346
+ // Button should always be <a> or <button> inside owner element
347
+ bryntumConfig.appendTo = elementRef.nativeElement;
348
+ }
349
+ else {
350
+ bryntumConfig.adopt = elementRef.nativeElement;
351
+ }
352
+ }
353
+ else {
354
+ WrapperHelper.devWarningContainer(instanceName, containerParam);
355
+ }
356
+ // @ts-ignore
357
+ me.instance = instanceName === 'Widget' ? Widget.create(bryntumConfig) : new instanceClass(bryntumConfig);
358
+ }
359
+ /**
360
+ * Watch for changes
361
+ * @param changes
362
+ */
363
+ ngOnChanges(changes) {
364
+ const { instance } = this, { instanceName } = BryntumDayResourceViewComponent;
365
+ if (!instance) {
366
+ return;
367
+ }
368
+ // Iterate over all changes
369
+ Object.entries(changes).forEach(([prop, change]) => {
370
+ const newValue = change.currentValue, { instance } = this, { bryntumConfigsOnly, bryntumProps } = BryntumDayResourceViewComponent;
371
+ if (bryntumProps.includes(prop)) {
372
+ WrapperHelper.applyPropValue(instance, prop, newValue, false);
373
+ if (bryntumConfigsOnly.includes(prop)) {
374
+ WrapperHelper.devWarningUpdateProp(instanceName, prop);
375
+ }
376
+ }
377
+ });
378
+ }
379
+ /**
380
+ * Destroy the component
381
+ */
382
+ ngOnDestroy() {
383
+ // @ts-ignore
384
+ if (this.instance && this.instance.destroy) {
385
+ this.instance.destroy();
386
+ }
387
+ }
388
+ }
389
+ BryntumDayResourceViewComponent.instanceClass = DayResourceView;
390
+ BryntumDayResourceViewComponent.instanceName = 'DayResourceView';
391
+ BryntumDayResourceViewComponent.bryntumEvents = [
392
+ 'onBeforeAutoCreate',
393
+ 'onBeforeChangeDate',
394
+ 'onBeforeDestroy',
395
+ 'onBeforeHide',
396
+ 'onBeforeResponsiveStateChange',
397
+ 'onBeforeSetRecord',
398
+ 'onBeforeShow',
399
+ 'onBeforeStateApply',
400
+ 'onBeforeStateSave',
401
+ 'onCatchAll',
402
+ 'onCellMapPopulated',
403
+ 'onCollapse',
404
+ 'onDayCellPopulated',
405
+ 'onDestroy',
406
+ 'onDirtyStateChange',
407
+ 'onElementCreated',
408
+ 'onEventAutoCreated',
409
+ 'onEventPropagate',
410
+ 'onExpand',
411
+ 'onFocusIn',
412
+ 'onFocusOut',
413
+ 'onHide',
414
+ 'onLayoutUpdate',
415
+ 'onPaint',
416
+ 'onRangeChange',
417
+ 'onReadOnly',
418
+ 'onRecompose',
419
+ 'onRefresh',
420
+ 'onResize',
421
+ 'onResponsiveStateChange',
422
+ 'onShiftIncrementChange',
423
+ 'onShow',
424
+ 'onTickChange',
425
+ 'onTimeAxisClick',
426
+ 'onToolClick'
427
+ ];
428
+ BryntumDayResourceViewComponent.bryntumFeatureNames = [];
429
+ BryntumDayResourceViewComponent.bryntumConfigs = BryntumDayResourceViewComponent.bryntumFeatureNames.concat([
430
+ 'actionButtons',
431
+ 'activationKey',
432
+ 'adopt',
433
+ 'align',
434
+ 'alignSelf',
435
+ 'allDayEvents',
436
+ 'allowDragCreate',
437
+ 'allowDragMove',
438
+ 'allowDragResize',
439
+ 'allowZoomUnderflow',
440
+ 'anchor',
441
+ 'animateTimeShift',
442
+ 'appendTo',
443
+ 'ariaDescription',
444
+ 'ariaLabel',
445
+ 'autoCreate',
446
+ 'bbar',
447
+ 'bodyCls',
448
+ 'bubbleEvents',
449
+ 'callOnFunctions',
450
+ 'catchEventHandlerExceptions',
451
+ 'centered',
452
+ 'cls',
453
+ 'collapsed',
454
+ 'collapsible',
455
+ 'color',
456
+ 'column',
457
+ 'columnHeaderRenderer',
458
+ 'compactHeader',
459
+ 'config',
460
+ 'constrainTo',
461
+ 'contentElementCls',
462
+ 'coreHours',
463
+ 'currentTimeIndicatorRenderer',
464
+ 'dashedSubticks',
465
+ 'dataField',
466
+ 'dataset',
467
+ 'date',
468
+ 'dateFilter',
469
+ 'dateFormat',
470
+ 'dateSeparator',
471
+ 'dayCellRenderer',
472
+ 'dayEndTime',
473
+ 'dayHeaderRenderer',
474
+ 'dayNameFormat',
475
+ 'dayStartShift',
476
+ 'dayStartTime',
477
+ 'defaultBindProperty',
478
+ 'defaultFocus',
479
+ 'defaults',
480
+ 'defaultScrollOptions',
481
+ 'descriptionFormat',
482
+ 'descriptionRenderer',
483
+ 'detectCSSCompatibilityIssues',
484
+ 'disabled',
485
+ 'dock',
486
+ 'draggable',
487
+ 'dragUnit',
488
+ 'drawer',
489
+ 'elementAttributes',
490
+ 'endDate',
491
+ 'eventFilter',
492
+ 'eventHeaderRenderer',
493
+ 'eventLayout',
494
+ 'eventRenderer',
495
+ 'eventSorter',
496
+ 'eventSpacing',
497
+ 'extendAllDayEndDay',
498
+ 'extraData',
499
+ 'filterEventResources',
500
+ 'fitHours',
501
+ 'fixedDuration',
502
+ 'flex',
503
+ 'floating',
504
+ 'footer',
505
+ 'getPrimaryResource',
506
+ 'header',
507
+ 'height',
508
+ 'hidden',
509
+ 'hideAnimation',
510
+ 'hideEmptyDays',
511
+ 'hideEmptyResources',
512
+ 'hideNonWorkingDays',
513
+ 'hideResourceNameWhenNarrow',
514
+ 'hideWhenEmpty',
515
+ 'hourHeight',
516
+ 'hourHeightBreakpoints',
517
+ 'icon',
518
+ 'id',
519
+ 'ignoreParentReadOnly',
520
+ 'increment',
521
+ 'inputFieldAlign',
522
+ 'insertBefore',
523
+ 'insertFirst',
524
+ 'interDayDrag',
525
+ 'interDayResize',
526
+ 'itemCls',
527
+ 'items',
528
+ 'keyMap',
529
+ 'labelPosition',
530
+ 'layout',
531
+ 'layoutStyle',
532
+ 'lazyItems',
533
+ 'listeners',
534
+ 'localeClass',
535
+ 'localizable',
536
+ 'localizableProperties',
537
+ 'margin',
538
+ 'maskDefaults',
539
+ 'masked',
540
+ 'maxAllDayHeight',
541
+ 'maxDate',
542
+ 'maxHeight',
543
+ 'maximizeOnMobile',
544
+ 'maxWidth',
545
+ 'minDate',
546
+ 'minDayWidth',
547
+ 'minEventHeight',
548
+ 'minHeight',
549
+ 'minHourHeight',
550
+ 'minResourceWidth',
551
+ 'minWidth',
552
+ 'monitorResize',
553
+ 'namedItems',
554
+ 'noMatchingDates',
555
+ 'nonWorkingDays',
556
+ 'overflowPopup',
557
+ 'owner',
558
+ 'pastEventCls',
559
+ 'positioned',
560
+ 'preventTooltipOnTouch',
561
+ 'range',
562
+ 'readOnly',
563
+ 'relayStoreEvents',
564
+ 'rendition',
565
+ 'resourceDateFilter',
566
+ 'resourceImagePath',
567
+ 'responsive',
568
+ 'responsiveRoot',
569
+ 'responsiveState',
570
+ 'responsiveTarget',
571
+ 'ripple',
572
+ 'rootElement',
573
+ 'rtl',
574
+ 'scrollable',
575
+ 'scrollAction',
576
+ 'selectorButton',
577
+ 'selectorMenuItem',
578
+ 'shiftIncrement',
579
+ 'shortDateFormat',
580
+ 'shortDateTimeFormat',
581
+ 'shortEventCls',
582
+ 'shortEventDuration',
583
+ 'showAllDayHeader',
584
+ 'showAnimation',
585
+ 'showAvatars',
586
+ 'showBullet',
587
+ 'showCurrentTime',
588
+ 'showHeaderAvatars',
589
+ 'showResourceAvatars',
590
+ 'showTime',
591
+ 'showTooltipWhenDisabled',
592
+ 'sixMinuteTicks',
593
+ 'snapRelativeToEventStartDate',
594
+ 'span',
595
+ 'stackMultiDayEvents',
596
+ 'startDate',
597
+ 'stateful',
598
+ 'statefulEvents',
599
+ 'stateId',
600
+ 'stateProvider',
601
+ 'strictRecordMapping',
602
+ 'strips',
603
+ 'syncCalendarDate',
604
+ 'syncViewDate',
605
+ 'tab',
606
+ 'tabBarItems',
607
+ 'tag',
608
+ 'tbar',
609
+ 'textAlign',
610
+ 'tickRenderer',
611
+ 'timeAxisTimeFormat',
612
+ 'timeFormat',
613
+ 'timeSnapType',
614
+ 'title',
615
+ 'tools',
616
+ 'tooltip',
617
+ 'trapFocus',
618
+ 'type',
619
+ 'ui',
620
+ 'visibleStartTime',
621
+ 'weekStartDay',
622
+ 'weight',
623
+ 'width',
624
+ 'x',
625
+ 'y',
626
+ 'zoomOnMouseWheel'
627
+ ]);
628
+ BryntumDayResourceViewComponent.bryntumConfigsOnly = [
629
+ 'actionButtons',
630
+ 'activationKey',
631
+ 'adopt',
632
+ 'align',
633
+ 'allDayEvents',
634
+ 'anchor',
635
+ 'ariaDescription',
636
+ 'ariaLabel',
637
+ 'bbar',
638
+ 'bodyCls',
639
+ 'bubbleEvents',
640
+ 'centered',
641
+ 'collapsible',
642
+ 'color',
643
+ 'columnHeaderRenderer',
644
+ 'config',
645
+ 'constrainTo',
646
+ 'contentElementCls',
647
+ 'currentTimeIndicatorRenderer',
648
+ 'dataField',
649
+ 'dayCellRenderer',
650
+ 'dayHeaderRenderer',
651
+ 'dayNameFormat',
652
+ 'dayStartShift',
653
+ 'defaultBindProperty',
654
+ 'defaultFocus',
655
+ 'defaults',
656
+ 'descriptionRenderer',
657
+ 'detectCSSCompatibilityIssues',
658
+ 'dock',
659
+ 'draggable',
660
+ 'drawer',
661
+ 'elementAttributes',
662
+ 'endDate',
663
+ 'eventFilter',
664
+ 'eventHeaderRenderer',
665
+ 'eventLayout',
666
+ 'eventRenderer',
667
+ 'eventSorter',
668
+ 'eventSpacing',
669
+ 'floating',
670
+ 'footer',
671
+ 'getPrimaryResource',
672
+ 'header',
673
+ 'hideAnimation',
674
+ 'hideWhenEmpty',
675
+ 'icon',
676
+ 'ignoreParentReadOnly',
677
+ 'itemCls',
678
+ 'lazyItems',
679
+ 'listeners',
680
+ 'localeClass',
681
+ 'localizable',
682
+ 'localizableProperties',
683
+ 'maskDefaults',
684
+ 'masked',
685
+ 'maxAllDayHeight',
686
+ 'monitorResize',
687
+ 'namedItems',
688
+ 'overflowPopup',
689
+ 'owner',
690
+ 'positioned',
691
+ 'preventTooltipOnTouch',
692
+ 'relayStoreEvents',
693
+ 'resourceImagePath',
694
+ 'responsive',
695
+ 'responsiveRoot',
696
+ 'responsiveState',
697
+ 'responsiveTarget',
698
+ 'ripple',
699
+ 'rootElement',
700
+ 'scrollAction',
701
+ 'selectorButton',
702
+ 'selectorMenuItem',
703
+ 'shortEventCls',
704
+ 'shortEventDuration',
705
+ 'showAllDayHeader',
706
+ 'showAnimation',
707
+ 'showBullet',
708
+ 'showHeaderAvatars',
709
+ 'showResourceAvatars',
710
+ 'showTooltipWhenDisabled',
711
+ 'startDate',
712
+ 'stateful',
713
+ 'statefulEvents',
714
+ 'stateId',
715
+ 'stateProvider',
716
+ 'strips',
717
+ 'tab',
718
+ 'tabBarItems',
719
+ 'tag',
720
+ 'tbar',
721
+ 'textAlign',
722
+ 'tickRenderer',
723
+ 'timeAxisTimeFormat',
724
+ 'timeFormat',
725
+ 'trapFocus',
726
+ 'type',
727
+ 'ui',
728
+ 'visibleStartTime',
729
+ 'weekStartDay',
730
+ 'weight',
731
+ 'zoomOnMouseWheel'
732
+ ];
733
+ BryntumDayResourceViewComponent.bryntumProps = BryntumDayResourceViewComponent.bryntumFeatureNames.concat([
734
+ 'alignSelf',
735
+ 'allowDragCreate',
736
+ 'allowDragMove',
737
+ 'allowDragResize',
738
+ 'allowZoomUnderflow',
739
+ 'anchorSize',
740
+ 'animateTimeShift',
741
+ 'appendTo',
742
+ 'autoCreate',
743
+ 'callOnFunctions',
744
+ 'catchEventHandlerExceptions',
745
+ 'cls',
746
+ 'collapsed',
747
+ 'column',
748
+ 'compactHeader',
749
+ 'coreHours',
750
+ 'dashedSubticks',
751
+ 'dataset',
752
+ 'date',
753
+ 'dateFilter',
754
+ 'dateFormat',
755
+ 'dateSeparator',
756
+ 'dayCellCls',
757
+ 'dayEndTime',
758
+ 'dayStartTime',
759
+ 'defaultScrollOptions',
760
+ 'descriptionFormat',
761
+ 'disabled',
762
+ 'dragUnit',
763
+ 'extendAllDayEndDay',
764
+ 'extraData',
765
+ 'filterEventResources',
766
+ 'firstVisibleCell',
767
+ 'firstVisibleDate',
768
+ 'fitHours',
769
+ 'fixedDuration',
770
+ 'flex',
771
+ 'focusVisible',
772
+ 'hasChanges',
773
+ 'height',
774
+ 'hidden',
775
+ 'hideEmptyDays',
776
+ 'hideEmptyResources',
777
+ 'hideNonWorkingDays',
778
+ 'hideResourceNameWhenNarrow',
779
+ 'horizontalScroller',
780
+ 'hourHeight',
781
+ 'hourHeightBreakpoints',
782
+ 'id',
783
+ 'increment',
784
+ 'inputFieldAlign',
785
+ 'insertBefore',
786
+ 'insertFirst',
787
+ 'interDayDrag',
788
+ 'interDayResize',
789
+ 'isSettingValues',
790
+ 'isValid',
791
+ 'items',
792
+ 'keyMap',
793
+ 'labelPosition',
794
+ 'lastVisibleCell',
795
+ 'lastVisibleDate',
796
+ 'layout',
797
+ 'layoutStyle',
798
+ 'margin',
799
+ 'maxDate',
800
+ 'maxHeight',
801
+ 'maximizeOnMobile',
802
+ 'maxWidth',
803
+ 'minDate',
804
+ 'minDayWidth',
805
+ 'minEventHeight',
806
+ 'minHeight',
807
+ 'minHourHeight',
808
+ 'minResourceWidth',
809
+ 'minWidth',
810
+ 'noMatchingDates',
811
+ 'nonWorkingDays',
812
+ 'parent',
813
+ 'pastEventCls',
814
+ 'range',
815
+ 'readOnly',
816
+ 'record',
817
+ 'rendition',
818
+ 'resourceDateFilter',
819
+ 'rtl',
820
+ 'scrollable',
821
+ 'shiftIncrement',
822
+ 'shortDateFormat',
823
+ 'shortDateTimeFormat',
824
+ 'showAvatars',
825
+ 'showCurrentTime',
826
+ 'showTime',
827
+ 'sixMinuteTicks',
828
+ 'snapRelativeToEventStartDate',
829
+ 'span',
830
+ 'stackMultiDayEvents',
831
+ 'state',
832
+ 'strictRecordMapping',
833
+ 'syncCalendarDate',
834
+ 'syncViewDate',
835
+ 'timeSnapType',
836
+ 'title',
837
+ 'tools',
838
+ 'tooltip',
839
+ 'values',
840
+ 'width',
841
+ 'x',
842
+ 'y'
843
+ ]);
844
+ BryntumDayResourceViewComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.0", ngImport: i0, type: BryntumDayResourceViewComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
845
+ BryntumDayResourceViewComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.0", type: BryntumDayResourceViewComponent, selector: "bryntum-day-resource-view", inputs: { actionButtons: "actionButtons", activationKey: "activationKey", adopt: "adopt", align: "align", allDayEvents: "allDayEvents", anchor: "anchor", ariaDescription: "ariaDescription", ariaLabel: "ariaLabel", bbar: "bbar", bodyCls: "bodyCls", bubbleEvents: "bubbleEvents", centered: "centered", collapsible: "collapsible", color: "color", columnHeaderRenderer: "columnHeaderRenderer", config: "config", constrainTo: "constrainTo", contentElementCls: "contentElementCls", currentTimeIndicatorRenderer: "currentTimeIndicatorRenderer", dataField: "dataField", dayCellRenderer: "dayCellRenderer", dayHeaderRenderer: "dayHeaderRenderer", dayNameFormat: "dayNameFormat", dayStartShift: "dayStartShift", defaultBindProperty: "defaultBindProperty", defaultFocus: "defaultFocus", defaults: "defaults", descriptionRenderer: "descriptionRenderer", detectCSSCompatibilityIssues: "detectCSSCompatibilityIssues", dock: "dock", draggable: "draggable", drawer: "drawer", elementAttributes: "elementAttributes", endDate: "endDate", eventFilter: "eventFilter", eventHeaderRenderer: "eventHeaderRenderer", eventLayout: "eventLayout", eventRenderer: "eventRenderer", eventSorter: "eventSorter", eventSpacing: "eventSpacing", floating: "floating", footer: "footer", getPrimaryResource: "getPrimaryResource", header: "header", hideAnimation: "hideAnimation", hideWhenEmpty: "hideWhenEmpty", icon: "icon", ignoreParentReadOnly: "ignoreParentReadOnly", itemCls: "itemCls", lazyItems: "lazyItems", listeners: "listeners", localeClass: "localeClass", localizable: "localizable", localizableProperties: "localizableProperties", maskDefaults: "maskDefaults", masked: "masked", maxAllDayHeight: "maxAllDayHeight", monitorResize: "monitorResize", namedItems: "namedItems", overflowPopup: "overflowPopup", owner: "owner", positioned: "positioned", preventTooltipOnTouch: "preventTooltipOnTouch", relayStoreEvents: "relayStoreEvents", resourceImagePath: "resourceImagePath", responsive: "responsive", responsiveRoot: "responsiveRoot", responsiveState: "responsiveState", responsiveTarget: "responsiveTarget", ripple: "ripple", rootElement: "rootElement", scrollAction: "scrollAction", selectorButton: "selectorButton", selectorMenuItem: "selectorMenuItem", shortEventCls: "shortEventCls", shortEventDuration: "shortEventDuration", showAllDayHeader: "showAllDayHeader", showAnimation: "showAnimation", showBullet: "showBullet", showHeaderAvatars: "showHeaderAvatars", showResourceAvatars: "showResourceAvatars", showTooltipWhenDisabled: "showTooltipWhenDisabled", startDate: "startDate", stateful: "stateful", statefulEvents: "statefulEvents", stateId: "stateId", stateProvider: "stateProvider", strips: "strips", tab: "tab", tabBarItems: "tabBarItems", tag: "tag", tbar: "tbar", textAlign: "textAlign", tickRenderer: "tickRenderer", timeAxisTimeFormat: "timeAxisTimeFormat", timeFormat: "timeFormat", trapFocus: "trapFocus", type: "type", ui: "ui", visibleStartTime: "visibleStartTime", weekStartDay: "weekStartDay", weight: "weight", zoomOnMouseWheel: "zoomOnMouseWheel", alignSelf: "alignSelf", allowDragCreate: "allowDragCreate", allowDragMove: "allowDragMove", allowDragResize: "allowDragResize", allowZoomUnderflow: "allowZoomUnderflow", animateTimeShift: "animateTimeShift", appendTo: "appendTo", autoCreate: "autoCreate", callOnFunctions: "callOnFunctions", catchEventHandlerExceptions: "catchEventHandlerExceptions", cls: "cls", collapsed: "collapsed", column: "column", compactHeader: "compactHeader", coreHours: "coreHours", dashedSubticks: "dashedSubticks", dataset: "dataset", date: "date", dateFilter: "dateFilter", dateFormat: "dateFormat", dateSeparator: "dateSeparator", dayEndTime: "dayEndTime", dayStartTime: "dayStartTime", defaultScrollOptions: "defaultScrollOptions", descriptionFormat: "descriptionFormat", disabled: "disabled", dragUnit: "dragUnit", extendAllDayEndDay: "extendAllDayEndDay", extraData: "extraData", filterEventResources: "filterEventResources", fitHours: "fitHours", fixedDuration: "fixedDuration", flex: "flex", height: "height", hidden: "hidden", hideEmptyDays: "hideEmptyDays", hideEmptyResources: "hideEmptyResources", hideNonWorkingDays: "hideNonWorkingDays", hideResourceNameWhenNarrow: "hideResourceNameWhenNarrow", hourHeight: "hourHeight", hourHeightBreakpoints: "hourHeightBreakpoints", id: "id", increment: "increment", inputFieldAlign: "inputFieldAlign", insertBefore: "insertBefore", insertFirst: "insertFirst", interDayDrag: "interDayDrag", interDayResize: "interDayResize", items: "items", keyMap: "keyMap", labelPosition: "labelPosition", layout: "layout", layoutStyle: "layoutStyle", margin: "margin", maxDate: "maxDate", maxHeight: "maxHeight", maximizeOnMobile: "maximizeOnMobile", maxWidth: "maxWidth", minDate: "minDate", minDayWidth: "minDayWidth", minEventHeight: "minEventHeight", minHeight: "minHeight", minHourHeight: "minHourHeight", minResourceWidth: "minResourceWidth", minWidth: "minWidth", noMatchingDates: "noMatchingDates", nonWorkingDays: "nonWorkingDays", pastEventCls: "pastEventCls", range: "range", readOnly: "readOnly", rendition: "rendition", resourceDateFilter: "resourceDateFilter", rtl: "rtl", scrollable: "scrollable", shiftIncrement: "shiftIncrement", shortDateFormat: "shortDateFormat", shortDateTimeFormat: "shortDateTimeFormat", showAvatars: "showAvatars", showCurrentTime: "showCurrentTime", showTime: "showTime", sixMinuteTicks: "sixMinuteTicks", snapRelativeToEventStartDate: "snapRelativeToEventStartDate", span: "span", stackMultiDayEvents: "stackMultiDayEvents", strictRecordMapping: "strictRecordMapping", syncCalendarDate: "syncCalendarDate", syncViewDate: "syncViewDate", timeSnapType: "timeSnapType", title: "title", tools: "tools", tooltip: "tooltip", width: "width", x: "x", y: "y", anchorSize: "anchorSize", dayCellCls: "dayCellCls", firstVisibleCell: "firstVisibleCell", firstVisibleDate: "firstVisibleDate", focusVisible: "focusVisible", hasChanges: "hasChanges", horizontalScroller: "horizontalScroller", isSettingValues: "isSettingValues", isValid: "isValid", lastVisibleCell: "lastVisibleCell", lastVisibleDate: "lastVisibleDate", parent: "parent", record: "record", state: "state", values: "values" }, outputs: { onBeforeAutoCreate: "onBeforeAutoCreate", onBeforeChangeDate: "onBeforeChangeDate", onBeforeDestroy: "onBeforeDestroy", onBeforeHide: "onBeforeHide", onBeforeResponsiveStateChange: "onBeforeResponsiveStateChange", onBeforeSetRecord: "onBeforeSetRecord", onBeforeShow: "onBeforeShow", onBeforeStateApply: "onBeforeStateApply", onBeforeStateSave: "onBeforeStateSave", onCatchAll: "onCatchAll", onCellMapPopulated: "onCellMapPopulated", onCollapse: "onCollapse", onDayCellPopulated: "onDayCellPopulated", onDestroy: "onDestroy", onDirtyStateChange: "onDirtyStateChange", onElementCreated: "onElementCreated", onEventAutoCreated: "onEventAutoCreated", onEventPropagate: "onEventPropagate", onExpand: "onExpand", onFocusIn: "onFocusIn", onFocusOut: "onFocusOut", onHide: "onHide", onLayoutUpdate: "onLayoutUpdate", onPaint: "onPaint", onRangeChange: "onRangeChange", onReadOnly: "onReadOnly", onRecompose: "onRecompose", onRefresh: "onRefresh", onResize: "onResize", onResponsiveStateChange: "onResponsiveStateChange", onShiftIncrementChange: "onShiftIncrementChange", onShow: "onShow", onTickChange: "onTickChange", onTimeAxisClick: "onTimeAxisClick", onToolClick: "onToolClick" }, usesOnChanges: true, ngImport: i0, template: '', isInline: true });
846
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.0", ngImport: i0, type: BryntumDayResourceViewComponent, decorators: [{
847
+ type: Component,
848
+ args: [{
849
+ selector: 'bryntum-day-resource-view',
850
+ template: ''
851
+ }]
852
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { actionButtons: [{
853
+ type: Input
854
+ }], activationKey: [{
855
+ type: Input
856
+ }], adopt: [{
857
+ type: Input
858
+ }], align: [{
859
+ type: Input
860
+ }], allDayEvents: [{
861
+ type: Input
862
+ }], anchor: [{
863
+ type: Input
864
+ }], ariaDescription: [{
865
+ type: Input
866
+ }], ariaLabel: [{
867
+ type: Input
868
+ }], bbar: [{
869
+ type: Input
870
+ }], bodyCls: [{
871
+ type: Input
872
+ }], bubbleEvents: [{
873
+ type: Input
874
+ }], centered: [{
875
+ type: Input
876
+ }], collapsible: [{
877
+ type: Input
878
+ }], color: [{
879
+ type: Input
880
+ }], columnHeaderRenderer: [{
881
+ type: Input
882
+ }], config: [{
883
+ type: Input
884
+ }], constrainTo: [{
885
+ type: Input
886
+ }], contentElementCls: [{
887
+ type: Input
888
+ }], currentTimeIndicatorRenderer: [{
889
+ type: Input
890
+ }], dataField: [{
891
+ type: Input
892
+ }], dayCellRenderer: [{
893
+ type: Input
894
+ }], dayHeaderRenderer: [{
895
+ type: Input
896
+ }], dayNameFormat: [{
897
+ type: Input
898
+ }], dayStartShift: [{
899
+ type: Input
900
+ }], defaultBindProperty: [{
901
+ type: Input
902
+ }], defaultFocus: [{
903
+ type: Input
904
+ }], defaults: [{
905
+ type: Input
906
+ }], descriptionRenderer: [{
907
+ type: Input
908
+ }], detectCSSCompatibilityIssues: [{
909
+ type: Input
910
+ }], dock: [{
911
+ type: Input
912
+ }], draggable: [{
913
+ type: Input
914
+ }], drawer: [{
915
+ type: Input
916
+ }], elementAttributes: [{
917
+ type: Input
918
+ }], endDate: [{
919
+ type: Input
920
+ }], eventFilter: [{
921
+ type: Input
922
+ }], eventHeaderRenderer: [{
923
+ type: Input
924
+ }], eventLayout: [{
925
+ type: Input
926
+ }], eventRenderer: [{
927
+ type: Input
928
+ }], eventSorter: [{
929
+ type: Input
930
+ }], eventSpacing: [{
931
+ type: Input
932
+ }], floating: [{
933
+ type: Input
934
+ }], footer: [{
935
+ type: Input
936
+ }], getPrimaryResource: [{
937
+ type: Input
938
+ }], header: [{
939
+ type: Input
940
+ }], hideAnimation: [{
941
+ type: Input
942
+ }], hideWhenEmpty: [{
943
+ type: Input
944
+ }], icon: [{
945
+ type: Input
946
+ }], ignoreParentReadOnly: [{
947
+ type: Input
948
+ }], itemCls: [{
949
+ type: Input
950
+ }], lazyItems: [{
951
+ type: Input
952
+ }], listeners: [{
953
+ type: Input
954
+ }], localeClass: [{
955
+ type: Input
956
+ }], localizable: [{
957
+ type: Input
958
+ }], localizableProperties: [{
959
+ type: Input
960
+ }], maskDefaults: [{
961
+ type: Input
962
+ }], masked: [{
963
+ type: Input
964
+ }], maxAllDayHeight: [{
965
+ type: Input
966
+ }], monitorResize: [{
967
+ type: Input
968
+ }], namedItems: [{
969
+ type: Input
970
+ }], overflowPopup: [{
971
+ type: Input
972
+ }], owner: [{
973
+ type: Input
974
+ }], positioned: [{
975
+ type: Input
976
+ }], preventTooltipOnTouch: [{
977
+ type: Input
978
+ }], relayStoreEvents: [{
979
+ type: Input
980
+ }], resourceImagePath: [{
981
+ type: Input
982
+ }], responsive: [{
983
+ type: Input
984
+ }], responsiveRoot: [{
985
+ type: Input
986
+ }], responsiveState: [{
987
+ type: Input
988
+ }], responsiveTarget: [{
989
+ type: Input
990
+ }], ripple: [{
991
+ type: Input
992
+ }], rootElement: [{
993
+ type: Input
994
+ }], scrollAction: [{
995
+ type: Input
996
+ }], selectorButton: [{
997
+ type: Input
998
+ }], selectorMenuItem: [{
999
+ type: Input
1000
+ }], shortEventCls: [{
1001
+ type: Input
1002
+ }], shortEventDuration: [{
1003
+ type: Input
1004
+ }], showAllDayHeader: [{
1005
+ type: Input
1006
+ }], showAnimation: [{
1007
+ type: Input
1008
+ }], showBullet: [{
1009
+ type: Input
1010
+ }], showHeaderAvatars: [{
1011
+ type: Input
1012
+ }], showResourceAvatars: [{
1013
+ type: Input
1014
+ }], showTooltipWhenDisabled: [{
1015
+ type: Input
1016
+ }], startDate: [{
1017
+ type: Input
1018
+ }], stateful: [{
1019
+ type: Input
1020
+ }], statefulEvents: [{
1021
+ type: Input
1022
+ }], stateId: [{
1023
+ type: Input
1024
+ }], stateProvider: [{
1025
+ type: Input
1026
+ }], strips: [{
1027
+ type: Input
1028
+ }], tab: [{
1029
+ type: Input
1030
+ }], tabBarItems: [{
1031
+ type: Input
1032
+ }], tag: [{
1033
+ type: Input
1034
+ }], tbar: [{
1035
+ type: Input
1036
+ }], textAlign: [{
1037
+ type: Input
1038
+ }], tickRenderer: [{
1039
+ type: Input
1040
+ }], timeAxisTimeFormat: [{
1041
+ type: Input
1042
+ }], timeFormat: [{
1043
+ type: Input
1044
+ }], trapFocus: [{
1045
+ type: Input
1046
+ }], type: [{
1047
+ type: Input
1048
+ }], ui: [{
1049
+ type: Input
1050
+ }], visibleStartTime: [{
1051
+ type: Input
1052
+ }], weekStartDay: [{
1053
+ type: Input
1054
+ }], weight: [{
1055
+ type: Input
1056
+ }], zoomOnMouseWheel: [{
1057
+ type: Input
1058
+ }], alignSelf: [{
1059
+ type: Input
1060
+ }], allowDragCreate: [{
1061
+ type: Input
1062
+ }], allowDragMove: [{
1063
+ type: Input
1064
+ }], allowDragResize: [{
1065
+ type: Input
1066
+ }], allowZoomUnderflow: [{
1067
+ type: Input
1068
+ }], animateTimeShift: [{
1069
+ type: Input
1070
+ }], appendTo: [{
1071
+ type: Input
1072
+ }], autoCreate: [{
1073
+ type: Input
1074
+ }], callOnFunctions: [{
1075
+ type: Input
1076
+ }], catchEventHandlerExceptions: [{
1077
+ type: Input
1078
+ }], cls: [{
1079
+ type: Input
1080
+ }], collapsed: [{
1081
+ type: Input
1082
+ }], column: [{
1083
+ type: Input
1084
+ }], compactHeader: [{
1085
+ type: Input
1086
+ }], coreHours: [{
1087
+ type: Input
1088
+ }], dashedSubticks: [{
1089
+ type: Input
1090
+ }], dataset: [{
1091
+ type: Input
1092
+ }], date: [{
1093
+ type: Input
1094
+ }], dateFilter: [{
1095
+ type: Input
1096
+ }], dateFormat: [{
1097
+ type: Input
1098
+ }], dateSeparator: [{
1099
+ type: Input
1100
+ }], dayEndTime: [{
1101
+ type: Input
1102
+ }], dayStartTime: [{
1103
+ type: Input
1104
+ }], defaultScrollOptions: [{
1105
+ type: Input
1106
+ }], descriptionFormat: [{
1107
+ type: Input
1108
+ }], disabled: [{
1109
+ type: Input
1110
+ }], dragUnit: [{
1111
+ type: Input
1112
+ }], extendAllDayEndDay: [{
1113
+ type: Input
1114
+ }], extraData: [{
1115
+ type: Input
1116
+ }], filterEventResources: [{
1117
+ type: Input
1118
+ }], fitHours: [{
1119
+ type: Input
1120
+ }], fixedDuration: [{
1121
+ type: Input
1122
+ }], flex: [{
1123
+ type: Input
1124
+ }], height: [{
1125
+ type: Input
1126
+ }], hidden: [{
1127
+ type: Input
1128
+ }], hideEmptyDays: [{
1129
+ type: Input
1130
+ }], hideEmptyResources: [{
1131
+ type: Input
1132
+ }], hideNonWorkingDays: [{
1133
+ type: Input
1134
+ }], hideResourceNameWhenNarrow: [{
1135
+ type: Input
1136
+ }], hourHeight: [{
1137
+ type: Input
1138
+ }], hourHeightBreakpoints: [{
1139
+ type: Input
1140
+ }], id: [{
1141
+ type: Input
1142
+ }], increment: [{
1143
+ type: Input
1144
+ }], inputFieldAlign: [{
1145
+ type: Input
1146
+ }], insertBefore: [{
1147
+ type: Input
1148
+ }], insertFirst: [{
1149
+ type: Input
1150
+ }], interDayDrag: [{
1151
+ type: Input
1152
+ }], interDayResize: [{
1153
+ type: Input
1154
+ }], items: [{
1155
+ type: Input
1156
+ }], keyMap: [{
1157
+ type: Input
1158
+ }], labelPosition: [{
1159
+ type: Input
1160
+ }], layout: [{
1161
+ type: Input
1162
+ }], layoutStyle: [{
1163
+ type: Input
1164
+ }], margin: [{
1165
+ type: Input
1166
+ }], maxDate: [{
1167
+ type: Input
1168
+ }], maxHeight: [{
1169
+ type: Input
1170
+ }], maximizeOnMobile: [{
1171
+ type: Input
1172
+ }], maxWidth: [{
1173
+ type: Input
1174
+ }], minDate: [{
1175
+ type: Input
1176
+ }], minDayWidth: [{
1177
+ type: Input
1178
+ }], minEventHeight: [{
1179
+ type: Input
1180
+ }], minHeight: [{
1181
+ type: Input
1182
+ }], minHourHeight: [{
1183
+ type: Input
1184
+ }], minResourceWidth: [{
1185
+ type: Input
1186
+ }], minWidth: [{
1187
+ type: Input
1188
+ }], noMatchingDates: [{
1189
+ type: Input
1190
+ }], nonWorkingDays: [{
1191
+ type: Input
1192
+ }], pastEventCls: [{
1193
+ type: Input
1194
+ }], range: [{
1195
+ type: Input
1196
+ }], readOnly: [{
1197
+ type: Input
1198
+ }], rendition: [{
1199
+ type: Input
1200
+ }], resourceDateFilter: [{
1201
+ type: Input
1202
+ }], rtl: [{
1203
+ type: Input
1204
+ }], scrollable: [{
1205
+ type: Input
1206
+ }], shiftIncrement: [{
1207
+ type: Input
1208
+ }], shortDateFormat: [{
1209
+ type: Input
1210
+ }], shortDateTimeFormat: [{
1211
+ type: Input
1212
+ }], showAvatars: [{
1213
+ type: Input
1214
+ }], showCurrentTime: [{
1215
+ type: Input
1216
+ }], showTime: [{
1217
+ type: Input
1218
+ }], sixMinuteTicks: [{
1219
+ type: Input
1220
+ }], snapRelativeToEventStartDate: [{
1221
+ type: Input
1222
+ }], span: [{
1223
+ type: Input
1224
+ }], stackMultiDayEvents: [{
1225
+ type: Input
1226
+ }], strictRecordMapping: [{
1227
+ type: Input
1228
+ }], syncCalendarDate: [{
1229
+ type: Input
1230
+ }], syncViewDate: [{
1231
+ type: Input
1232
+ }], timeSnapType: [{
1233
+ type: Input
1234
+ }], title: [{
1235
+ type: Input
1236
+ }], tools: [{
1237
+ type: Input
1238
+ }], tooltip: [{
1239
+ type: Input
1240
+ }], width: [{
1241
+ type: Input
1242
+ }], x: [{
1243
+ type: Input
1244
+ }], y: [{
1245
+ type: Input
1246
+ }], anchorSize: [{
1247
+ type: Input
1248
+ }], dayCellCls: [{
1249
+ type: Input
1250
+ }], firstVisibleCell: [{
1251
+ type: Input
1252
+ }], firstVisibleDate: [{
1253
+ type: Input
1254
+ }], focusVisible: [{
1255
+ type: Input
1256
+ }], hasChanges: [{
1257
+ type: Input
1258
+ }], horizontalScroller: [{
1259
+ type: Input
1260
+ }], isSettingValues: [{
1261
+ type: Input
1262
+ }], isValid: [{
1263
+ type: Input
1264
+ }], lastVisibleCell: [{
1265
+ type: Input
1266
+ }], lastVisibleDate: [{
1267
+ type: Input
1268
+ }], parent: [{
1269
+ type: Input
1270
+ }], record: [{
1271
+ type: Input
1272
+ }], state: [{
1273
+ type: Input
1274
+ }], values: [{
1275
+ type: Input
1276
+ }], onBeforeAutoCreate: [{
1277
+ type: Output
1278
+ }], onBeforeChangeDate: [{
1279
+ type: Output
1280
+ }], onBeforeDestroy: [{
1281
+ type: Output
1282
+ }], onBeforeHide: [{
1283
+ type: Output
1284
+ }], onBeforeResponsiveStateChange: [{
1285
+ type: Output
1286
+ }], onBeforeSetRecord: [{
1287
+ type: Output
1288
+ }], onBeforeShow: [{
1289
+ type: Output
1290
+ }], onBeforeStateApply: [{
1291
+ type: Output
1292
+ }], onBeforeStateSave: [{
1293
+ type: Output
1294
+ }], onCatchAll: [{
1295
+ type: Output
1296
+ }], onCellMapPopulated: [{
1297
+ type: Output
1298
+ }], onCollapse: [{
1299
+ type: Output
1300
+ }], onDayCellPopulated: [{
1301
+ type: Output
1302
+ }], onDestroy: [{
1303
+ type: Output
1304
+ }], onDirtyStateChange: [{
1305
+ type: Output
1306
+ }], onElementCreated: [{
1307
+ type: Output
1308
+ }], onEventAutoCreated: [{
1309
+ type: Output
1310
+ }], onEventPropagate: [{
1311
+ type: Output
1312
+ }], onExpand: [{
1313
+ type: Output
1314
+ }], onFocusIn: [{
1315
+ type: Output
1316
+ }], onFocusOut: [{
1317
+ type: Output
1318
+ }], onHide: [{
1319
+ type: Output
1320
+ }], onLayoutUpdate: [{
1321
+ type: Output
1322
+ }], onPaint: [{
1323
+ type: Output
1324
+ }], onRangeChange: [{
1325
+ type: Output
1326
+ }], onReadOnly: [{
1327
+ type: Output
1328
+ }], onRecompose: [{
1329
+ type: Output
1330
+ }], onRefresh: [{
1331
+ type: Output
1332
+ }], onResize: [{
1333
+ type: Output
1334
+ }], onResponsiveStateChange: [{
1335
+ type: Output
1336
+ }], onShiftIncrementChange: [{
1337
+ type: Output
1338
+ }], onShow: [{
1339
+ type: Output
1340
+ }], onTickChange: [{
1341
+ type: Output
1342
+ }], onTimeAxisClick: [{
1343
+ type: Output
1344
+ }], onToolClick: [{
1345
+ type: Output
1346
+ }] } });
1347
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJ5bnR1bS1kYXktcmVzb3VyY2Utdmlldy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9jb21wb25lbnQvc3JjL2xpYi9icnludHVtLWRheS1yZXNvdXJjZS12aWV3LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxzREFBc0Q7QUFDdEQ7O0dBRUc7QUFFSCxPQUFPLEVBQUUsU0FBUyxFQUFjLFlBQVksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFrRCxNQUFNLGVBQWUsQ0FBQztBQUVuSSxPQUFPLGFBQWEsTUFBTSxrQkFBa0IsQ0FBQztBQUU3QyxPQUFPLEVBQThYLE1BQU0sRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRXhhLE9BQU8sRUFBNkssZUFBZSxFQUEwRixNQUFNLHdCQUF3QixDQUFDOztBQTR6QzVULE1BQU0sT0FBTywrQkFBK0I7SUE4ZHhDLFlBQVksT0FBbUI7UUFUdkIsa0JBQWEsR0FBRztZQUNwQixLQUFLLEVBQWMsU0FBUztZQUM1QixRQUFRLEVBQVcsU0FBUztZQUM1QixJQUFJLEVBQWUsU0FBUztZQUM1QixnQkFBZ0IsRUFBRyxJQUFJO1lBQ3ZCLFFBQVEsRUFBVyxFQUFFO1lBQ3JCLFNBQVMsRUFBVSxFQUFFO1NBQ3hCLENBQUM7UUFpUUYsa0JBQWtCO1FBQ2xCOzs7Ozs7Ozs7Ozs7V0FZRztRQUNPLHVCQUFrQixHQUFRLElBQUksWUFBWSxFQUF5SyxDQUFDO1FBQzlOOzs7Ozs7O1dBT0c7UUFDTyx1QkFBa0IsR0FBUSxJQUFJLFlBQVksRUFBb0YsQ0FBQztRQUN6STs7OztXQUlHO1FBQ08sb0JBQWUsR0FBUSxJQUFJLFlBQVksRUFBOEMsQ0FBQztRQUNoRzs7OztXQUlHO1FBQ08saUJBQVksR0FBUSxJQUFJLFlBQVksRUFBeUUsQ0FBQztRQUN4SDs7Ozs7O1dBTUc7UUFDTyxrQ0FBNkIsR0FBUSxJQUFJLFlBQVksRUFBaUYsQ0FBQztRQUNqSjs7Ozs7O1dBTUc7UUFD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O2dCQU1HLFlBQVk7c0JBQXJCLE1BQU07Z0JBUUcsNkJBQTZCO3NCQUF0QyxNQUFNO2dCQVFHLGlCQUFpQjtzQkFBMUIsTUFBTTtnQkFNRyxZQUFZO3NCQUFyQixNQUFNO2dCQU1HLGtCQUFrQjtzQkFBM0IsTUFBTTtnQkFNRyxpQkFBaUI7c0JBQTFCLE1BQU07Z0JBU0csVUFBVTtzQkFBbkIsTUFBTTtnQkFNRyxrQkFBa0I7c0JBQTNCLE1BQU07Z0JBTUcsVUFBVTtzQkFBbkIsTUFBTTtnQkFVRyxrQkFBa0I7c0JBQTNCLE1BQU07Z0JBTUcsU0FBUztzQkFBbEIsTUFBTTtnQkFPRyxrQkFBa0I7c0JBQTNCLE1BQU07Z0JBTUcsZ0JBQWdCO3NCQUF6QixNQUFNO2dCQVVHLGtCQUFrQjtzQkFBM0IsTUFBTTtnQkFlRyxnQkFBZ0I7c0JBQXpCLE1BQU07Z0JBTUcsUUFBUTtzQkFBakIsTUFBTTtnQkFXRyxTQUFTO3NCQUFsQixNQUFNO2dCQWFHLFVBQVU7c0JBQW5CLE1BQU07Z0JBTUcsTUFBTTtzQkFBZixNQUFNO2dCQVFHLGNBQWM7c0JBQXZCLE1BQU07Z0JBVUcsT0FBTztzQkFBaEIsTUFBTTtnQkFjRyxhQUFhO3NCQUF0QixNQUFNO2dCQU1HLFVBQVU7c0JBQW5CLE1BQU07Z0JBS0csV0FBVztzQkFBcEIsTUFBTTtnQkFNRyxTQUFTO3NCQUFsQixNQUFNO2dCQVVHLFFBQVE7c0JBQWpCLE1BQU07Z0JBUUcsdUJBQXVCO3NCQUFoQyxNQUFNO2dCQU9HLHNCQUFzQjtzQkFBL0IsTUFBTTtnQkFNRyxNQUFNO3NCQUFmLE1BQU07Z0JBYUcsWUFBWTtzQkFBckIsTUFBTTtnQkFTRyxlQUFlO3NCQUF4QixNQUFNO2dCQU9HLFdBQVc7c0JBQXBCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnMgKi9cbi8qKlxuICogQW5ndWxhciB3cmFwcGVyIGZvciBCcnludHVtIERheVJlc291cmNlVmlld1xuICovXG5cbmltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBPdXRwdXQsIElucHV0LCBTaW1wbGVDaGFuZ2UsIFNpbXBsZUNoYW5nZXMsIE9uRGVzdHJveSwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCBXcmFwcGVySGVscGVyIGZyb20gJy4vd3JhcHBlci5oZWxwZXInO1xuXG5pbXBvcnQgeyBBbGlnblNwZWMsIEJhc2UsIEJyeW50dW1TY3JvbGxPcHRpb25zLCBCdXR0b25Db25maWcsIENvbnRhaW5lciwgRG9tQ29uZmlnLCBEdXJhdGlvbkNvbmZpZywgS2V5TWFwQ29uZmlnLCBMYXlvdXQsIE1hc2tDb25maWcsIE1lbnVJdGVtQ29uZmlnLCBNZW51SXRlbUVudHJ5LCBNb2RlbCwgUGFnaW5nVG9vbGJhckNvbmZpZywgUGFuZWwsIFBhbmVsQ29sbGFwc2VyQ29uZmlnLCBQYW5lbENvbGxhcHNlck92ZXJsYXlDb25maWcsIFBhbmVsSGVhZGVyLCBSZWN0YW5nbGUsIFNjcm9sbGVyLCBTY3JvbGxlckNvbmZpZywgU3RhdGVQcm92aWRlciwgVGFiQ29uZmlnLCBUb29sLCBUb29sQ29uZmlnLCBUb29sYmFyQ29uZmlnLCBUb29sYmFySXRlbXMsIFRvb2x0aXBDb25maWcsIFdpZGdldCB9IGZyb20gJ0BicnludHVtL2NvcmUtdGhpbic7XG5pbXBvcnQgeyBFdmVudE1vZGVsLCBSZXNvdXJjZU1vZGVsIH0gZnJvbSAnQGJyeW50dW0vc2NoZWR1bGVyLXRoaW4nO1xuaW1wb3J0IHsgQWN0aW9uQnV0dG9uc0NvbmZpZywgQ2FsZW5kYXJSb3csIENhbGVuZGFyUm93Q29uZmlnLCBDYWxlbmRhclZpZXcsIENhbGVuZGFyQ29udGFpbmVySXRlbUNvbmZpZywgQ2FsZW5kYXJDb250YWluZXJMYXlvdXRDb25maWcsIERhdGVSYW5nZU93bmVyLCBEYXlDZWxsLCBEYXlDZWxsV2l0aEV2ZW50cywgRGF5UmVzb3VyY2VWaWV3LCBEYXlSZXNvdXJjZVZpZXdMaXN0ZW5lcnMsIERheVZpZXcsIEV2ZW50QmFyLCBGbHVpZERheUxheW91dENvbmZpZywgT3ZlcmZsb3dQb3B1cENvbmZpZyB9IGZyb20gJ0BicnludHVtL2NhbGVuZGFyLXRoaW4nO1xuXG5pbXBvcnQgeyBTdHJpbmdIZWxwZXIgfSBmcm9tICdAYnJ5bnR1bS9jb3JlLXRoaW4nO1xuXG5leHBvcnQgdHlwZSBCcnludHVtRGF5UmVzb3VyY2VWaWV3UHJvcHMgPSB7XG4gICAgLy8gQ29uZmlnc1xuICAgIC8qKlxuICAgICAqIEFuIG9iamVjdCBvciBhbiBhcnJheSBvZiBidXR0b24gc3BlY2lmaWNhdGlvbnMgd2hpY2ggYWRkIGNsaWNrYWJsZSBpY29uIGJ1dHRvbnMgdG9cbiAgICAgKiB0aGUgcmVuZGVyZWQgZXZlbnQgYmxvY2tzIHdoaWNoIGNvbnRhaW4gdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9EYXlSZXNvdXJjZVZpZXcjY29uZmlnLWFjdGlvbkJ1dHRvbnMpXG4gICAgICovXG4gICAgYWN0aW9uQnV0dG9ucyA/IDogQWN0aW9uQnV0dG9uc0NvbmZpZ1tdfFJlY29yZDxzdHJpbmcsIEFjdGlvbkJ1dHRvbnNDb25maWc+XG4gICAgLyoqXG4gICAgICogQSBrZXkgdG8gdXNlIHRvIGFjdGl2YXRlIHRoaXMgdmlldy5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvRGF5UmVzb3VyY2VWaWV3I2NvbmZpZy1hY3RpdmF0aW9uS2V5KVxuICAgICAqL1xuICAgIGFjdGl2YXRpb25LZXkgPyA6IHN0cmluZ1xuICAgIC8qKlxuICAgICAqIEVsZW1lbnQgKG9yIGVsZW1lbnQgaWQpIHRvIGFkb3B0IGFzIHRoaXMgV2lkZ2V0J3MgZW5jYXBzdWxhdGluZyBlbGVtZW50LiBUaGUgd2lkZ2V0J3NcbiAgICAgKiBjb250ZW50IHdpbGwgYmUgcGxhY2VkIGluc2lkZSB0aGlzIGVsZW1lbnQuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L0RheVJlc291cmNlVmlldyNjb25maWctYWRvcHQpXG4gICAgICovXG4gICAgYWRvcHQgPyA6IEhUTUxFbGVtZW50fHN0cmluZ1xuICAgIC8qKlxuICAgICAqICpPbmx5IHZhbGlkIGlmIHRoaXMgV2lkZ2V0IGlzIFtmbG9hdGluZ10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9Db3JlL3dpZGdldC9XaWRnZXQjY29uZmlnLWZsb2F0aW5nKS4qXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L0RheVJlc291cmNlVmlldyNjb25maWctYWxpZ24pXG4gICAgICovXG4gICAgYWxpZ24gPyA6IEFsaWduU3BlY3xzdHJpbmdcbiAgICAvKipcbiAgICAgKiBXaGVuIHRoaXMgd2lkZ2V0IGlzIGEgY2hpbGQgb2YgYSBbQ29udGFpbmVyXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L0NvbnRhaW5lciksIGl0IHdpbGwgYnkgZGVmYXVsdCBiZSBwYXJ0aWNpcGF0aW5nIGluIGFcbiAgICAgKiBmbGV4Ym94IGxheW91dC4gVGhpcyBjb25maWcgYWxsb3dzIHlvdSB0byBzZXQgdGhpcyB3aWRnZXQnc1xuICAgICAqIFthbGlnbi1zZWxmXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvYWxpZ24tc2VsZikgc3R5bGUuXG4gICAgICovXG4gICAgYWxpZ25TZWxmID8gOiBzdHJpbmdcbiAgICAvKipcbiAgICAgKiBBIFtDYWxlbmRhclJvd10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvQ2FsZW5kYXJSb3cpIHdpZGdldCBjb250YWluaW5nIHRoZSBob3Jpem9udGFsIHNlcmllcyBvZiBjYWxlbmRhciBjZWxscyB3aXRoIHRoZVxuICAgICAqIGRheSBoZWFkZXJzIGFuZCBhbnkgYWxsLWRheSwgb3IgZGF5LXNwYW5uaW5nIGV2ZW50cyB3aGljaCBmYWxsIGluc2lkZSB0aGlzIHZpZXcncyB0aW1lIHJhbmdlLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9EYXlSZXNvdXJjZVZpZXcjY29uZmlnLWFsbERheUV2ZW50cylcbiAgICAgKi9cbiAgICBhbGxEYXlFdmVudHMgPyA6IENhbGVuZGFyUm93fENhbGVuZGFyUm93Q29uZmlnfG51bGxcbiAgICAvKipcbiAgICAgKiBDb25maWd1cmUgdGhpcyBhcyBgZmFsc2VgIHRvIGRpc2FibGUgZHJhZy1jcmVhdGluZyBldmVudHMgaW4gdGhpcyB2aWV3LlxuICAgICAqL1xuICAgIGFsbG93RHJhZ0NyZWF0ZSA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIENvbmZpZ3VyZSB0aGlzIGFzIGBmYWxzZWAgdG8gZGlzYWJsZSBkcmFnLW1vdmluZyBldmVudHMgaW4gdGhpcyB2aWV3LlxuICAgICAqL1xuICAgIGFsbG93RHJhZ01vdmUgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBDb25maWd1cmUgdGhpcyBhcyBgZmFsc2VgIHRvIGRpc2FibGUgZHJhZy1yZXNpemluZyBldmVudHMgaW4gdGhpcyB2aWV3LlxuICAgICAqL1xuICAgIGFsbG93RHJhZ1Jlc2l6ZSA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIEJ5IGRlZmF1bHQsIHdoZW4gbW91c2V3aGVlbCB6b29taW5nIG91dCBmcm9tICpvdmVyZmxvd2luZyogdGhlIGNsaWVudCBoZWlnaHQsIGl0IGlzIG5vdCBwZXJtaXR0ZWQgdG8gem9vbVxuICAgICAqIGZ1cnRoZXIgb3V0IHNvIHRoYXQgdGhlIGhvdXJzICp1bmRlcmZsb3cqIHRoZSBjbGllbnQgaGVpZ2h0LlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9EYXlSZXNvdXJjZVZpZXcjY29uZmlnLWFsbG93Wm9vbVVuZGVyZmxvdylcbiAgICAgKi9cbiAgICBhbGxvd1pvb21VbmRlcmZsb3cgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiAqT25seSB2YWxpZCBpZiB0aGlzIFdpZGdldCBpcyBbZmxvYXRpbmddKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ29yZS93aWRnZXQvV2lkZ2V0I2NvbmZpZy1mbG9hdGluZykgYW5kIGJlaW5nIHNob3duIHRocm91Z2ggW3Nob3dCeV0oI0NvcmUvd2lkZ2V0L1dpZGdldCNmdW5jdGlvbi1zaG93QnkpLipcbiAgICAgKiBgdHJ1ZWAgdG8gc2hvdyBhIGNvbm5lY3RvciBhcnJvdyBwb2ludGluZyB0byB0aGUgYWxpZ24gdGFyZ2V0LlxuICAgICAqL1xuICAgIGFuY2hvciA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIEJ5IGRlZmF1bHQsIHdoZW4gbmF2aWdhdGluZyB0aHJvdWdoIHRpbWUsIHRoZSBuZXh0IHRpbWVcbiAgICAgKiBibG9jayB3aWxsIGJlIGFuaW1hdGVkIGluIGZyb20gdGhlIGFwcHJvcHJpYXRlIGRpcmVjdGlvbi5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvRGF5UmVzb3VyY2VWaWV3I2NvbmZpZy1hbmltYXRlVGltZVNoaWZ0KVxuICAgICAqL1xuICAgIGFuaW1hdGVUaW1lU2hpZnQgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBFbGVtZW50IChvciB0aGUgaWQgb2YgYW4gZWxlbWVudCkgdG8gYXBwZW5kIHRoaXMgd2lkZ2V0J3MgZWxlbWVudCB0by4gQ2FuIGJlIGNvbmZpZ3VyZWQsIG9yIHNldCBvbmNlIGF0XG4gICAgICogcnVudGltZS4gVG8gYWNjZXNzIHRoZSBlbGVtZW50IG9mIGEgcmVuZGVyZWQgd2lkZ2V0LCBzZWUgW2VsZW1lbnRdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ29yZS93aWRnZXQvV2lkZ2V0I3Byb3BlcnR5LWVsZW1lbnQpLlxuICAgICAqL1xuICAgIGFwcGVuZFRvID8gOiBIVE1MRWxlbWVudHxzdHJpbmdcbiAgICAvKipcbiAgICAgKiBBIGxvY2FsaXphYmxlIHN0cmluZyAoTWF5IGNvbnRhaW4gYCdMe30nYCB0b2tlbnMgd2hpY2ggcmVzb2x2ZSBpbiB0aGUgbG9jYWxlIGZpbGUpIHRvIGluamVjdFxuICAgICAqIGludG8gYW4gZWxlbWVudCB3aGljaCB3aWxsIGJlIGxpbmtlZCB1c2luZyB0aGUgYGFyaWEtZGVzY3JpYmVkYnlgIGF0dHJpYnV0ZS5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvRGF5UmVzb3VyY2VWaWV3I2NvbmZpZy1hcmlhRGVzY3JpcHRpb24pXG4gICAgICovXG4gICAgYXJpYURlc2NyaXB0aW9uID8gOiBzdHJpbmdcbiAgICAvKipcbiAgICAgKiBBIGxvY2FsaXphYmxlIHN0cmluZyAoTWF5IGNvbnRhaW4gYCdMe30nYCB0b2tlbnMgd2hpY2ggcmVzb2x2ZSBpbiB0aGUgbG9jYWxlIGZpbGUpIHRvIGluamVjdCBhc1xuICAgICAqIHRoZSBgYXJpYS1sYWJlbGAgYXR0cmlidXRlLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9EYXlSZXNvdXJjZVZpZXcjY29uZmlnLWFyaWFMYWJlbClcbiAgICAgKi9cbiAgICBhcmlhTGFiZWwgPyA6IHN0cmluZ1xuICAgIC8qKlxuICAgICAqIElmIHRoaXMgY29uZmlnIGlzIHNldCwgdGhlbiB0aGUgYGdlc3R1cmVgIGNvbmZpZ3VyZWQgKHdoaWNoIGRlZmF1bHRzIHRvIGBkYmxjbGlja2ApIGNyZWF0ZXMgYVxuICAgICAqIG5ldyBldmVudCBhdCB0aGUgbW91c2Ugb3IgdG91Y2ggZXZlbnQncyB0aW1lIHBvaW50LlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9EYXlSZXNvdXJjZVZpZXcjY29uZmlnLWF1dG9DcmVhdGUpXG4gICAgICovXG4gICAgYXV0b0NyZWF0ZSA/IDoge1xuICAgICAgICBnZXN0dXJlPzogc3RyaW5nXG4gICAgICAgIG5ld05hbWU/OiBGdW5jdGlvbnxzdHJpbmdcbiAgICAgICAgc3RlcD86IHN0cmluZ1xuICAgICAgICBzbmFwVHlwZT86ICdyb3VuZCd8J2NlaWwnfCdmbG9vcidcbiAgICAgICAgZHVyYXRpb24/OiBzdHJpbmdcbiAgICAgICAgc3RhcnRIb3VyPzogbnVtYmVyXG4gICAgfXxzdHJpbmd8Ym9vbGVhblxuICAgIC8qKlxuICAgICAqIEEgQ29uZmlnIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIGNvbmZpZ3VyYXRpb24gb2YgYSBbVG9vbGJhcl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9Db3JlL3dpZGdldC9Ub29sYmFyKSxcbiAgICAgKiBvciBhcnJheSBvZiBjb25maWcgb2JqZWN0cyByZXByZXNlbnRpbmcgdGhlIGNoaWxkIGl0ZW1zIG9mIGEgVG9vbGJhci4gQW5vdGhlciB3YXkgdG8gYWRkIGEgYmJhciBpcyB0byB1c2UgW3N0cmlwc10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9Db3JlL3dpZGdldC9QYW5lbCNjb25maWctc3RyaXBzKS5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvRGF5UmVzb3VyY2VWaWV3I2NvbmZpZy1iYmFyKVxuICAgICAqL1xuICAgIGJiYXIgPyA6IChDYWxlbmRhckNvbnRhaW5lckl0ZW1Db25maWd8c3RyaW5nKVtdfFRvb2xiYXJDb25maWd8UGFnaW5nVG9vbGJhckNvbmZpZ3xudWxsXG4gICAgLyoqXG4gICAgICogQ3VzdG9tIENTUyBjbGFzc2VzIHRvIGFkZCB0byB0aGUgcGFuZWwncyBib2R5IGVsZW1lbnQuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L0RheVJlc291cmNlVmlldyNjb25maWctYm9keUNscylcbiAgICAgKi9cbiAgICBib2R5Q2xzID8gOiBzdHJpbmd8b2JqZWN0XG4gICAgLyoqXG4gICAgICogQW4gb2JqZWN0IHdoZXJlIHByb3BlcnR5IG5hbWVzIHdpdGggYSB0cnV0aHkgdmFsdWUgaW5kaWNhdGUgd2hpY2ggZXZlbnRzIHNob3VsZCBidWJibGUgdXAgdGhlIG93bmVyc2hpcFxuICAgICAqIGhpZXJhcmNoeSB3aGVuIHRyaWdnZXJlZC5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvRGF5UmVzb3VyY2VWaWV3I2NvbmZpZy1idWJibGVFdmVudHMpXG4gICAgICovXG4gICAgYnViYmxlRXZlbnRzID8gOiBvYmplY3RcbiAgICAvKipcbiAgICAgKiBTZXQgdG8gYGZhbHNlYCB0byBub3QgY2FsbCBvblhYWCBtZXRob2QgbmFtZXMgKGUuZy4gYG9uU2hvd2AsIGBvbkNsaWNrYCksIGFzIGFuIGVhc3kgd2F5IHRvIGxpc3RlbiBmb3IgZXZlbnRzLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9EYXlSZXNvdXJjZVZpZXcjY29uZmlnLWNhbGxPbkZ1bmN0aW9ucylcbiAgICAgKi9cbiAgICBjYWxsT25GdW5jdGlvbnMgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBCeSBkZWZhdWx0LCBpZiBhbiBldmVudCBoYW5kbGVyIHRocm93cyBhbiBleGNlcHRpb24sIHRoZSBlcnJvciBwcm9wYWdhdGVzIHVwIHRoZSBzdGFjayBhbmQgdGhlXG4gICAgICogYXBwbGljYXRpb24gc3RhdGUgaXMgdW5kZWZpbmVkLiBDb2RlIHdoaWNoIGZvbGxvd3MgdGhlIGV2ZW50IGhhbmRsZXIgd2lsbCAqbm90KiBiZSBleGVjdXRlZC5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvRGF5UmVzb3VyY2VWaWV3I2NvbmZpZy1jYXRjaEV2ZW50SGFuZGxlckV4Y2VwdGlvbnMpXG4gICAgICovXG4gICAgY2F0Y2hFdmVudEhhbmRsZXJFeGNlcHRpb25zID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogKk9ubHkgdmFsaWQgaWYgdGhpcyBXaWRnZXQgaXMgW2Zsb2F0aW5nXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1dpZGdldCNjb25maWctZmxvYXRpbmcpLipcbiAgICAgKiBTZXQgdG8gYHRydWVgIHRvIGNlbnRyZSB0aGUgV2lkZ2V0IGluIGJyb3dzZXIgdmlld3BvcnQgc3BhY2UuXG4gICAgICovXG4gICAgY2VudGVyZWQgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBDdXN0b20gQ1NTIGNsYXNzZXMgdG8gYWRkIHRvIGVsZW1lbnQuXG4gICAgICogTWF5IGJlIHNwZWNpZmllZCBhcyBhIHNwYWNlIHNlcGFyYXRlZCBzdHJpbmcsIG9yIGFzIGFuIG9iamVjdCBpbiB3aGljaCBwcm9wZXJ0eSBuYW1lc1xuICAgICAqIHdpdGggdHJ1dGh5IHZhbHVlcyBhcmUgdXNlZCBhcyB0aGUgY2xhc3MgbmFtZXM6XG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L0RheVJlc291cmNlVmlldyNjb25maWctY2xzKVxuICAgICAqL1xuICAgIGNscyA/IDogc3RyaW5nfG9iamVjdFxuICAgIC8qKlxuICAgICAqIENvbnRyb2xzIHdoZXRoZXIgdGhlIHBhbmVsIGlzIGNvbGxhcHNlZCAodGhlIGJvZHkgb2YgdGhlIHBhbmVsIGlzIGhpZGRlbiB3aGlsZSBvbmx5IHRoZSBoZWFkZXIgaXNcbiAgICAgKiB2aXNpYmxlKS4gT25seSB2YWxpZCBpZiB0aGUgcGFuZWwgaXMgW2NvbGxhcHNpYmxlXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1BhbmVsI2NvbmZpZy1jb2xsYXBzaWJsZSkuXG4gICAgICovXG4gICAgY29sbGFwc2VkID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogVGhpcyBjb25maWcgZW5hYmxlcyBjb2xsYXBzaWJpbGl0eSBmb3IgdGhlIHBhbmVsLiBTZWUgW2NvbGxhcHNlZF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9Db3JlL3dpZGdldC9QYW5lbCNjb25maWctY29sbGFwc2VkKS5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvRGF5UmVzb3VyY2VWaWV3I2NvbmZpZy1jb2xsYXBzaWJsZSlcbiAgICAgKi9cbiAgICBjb2xsYXBzaWJsZSA/IDogYm9vbGVhbnxQYW5lbENvbGxhcHNlckNvbmZpZ3xQYW5lbENvbGxhcHNlck92ZXJsYXlDb25maWdcbiAgICAvKipcbiAgICAgKiBBcHBsaWVzIHRoZSBzcGVjaWZpZWQgY29sb3IgdG8gdGhlIHdpZGdldCwgYnkgc2V0dGluZyB0aGUgYC0tYi1wcmltYXJ5YCBDU1MgdmFyaWFibGUgaW4gdGhlIHdpZGdldHNcbiAgICAgKiBgc3R5bGVgIGJsb2NrLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9EYXlSZXNvdXJjZVZpZXcjY29uZmlnLWNvbG9yKVxuICAgICAqL1xuICAgIGNvbG9yID8gOiBzdHJpbmdcbiAgICAvKipcbiAgICAgKiBQcm9ncmFtbWF0aWMgY29udHJvbCBvdmVyIHdoaWNoIGNvbHVtbiB0byBzdGFydCBpbiB3aGVuIHVzZWQgaW4gYSBncmlkIGxheW91dC5cbiAgICAgKi9cbiAgICBjb2x1bW4gPyA6IG51bWJlclxuICAgIC8qKlxuICAgICAqIEEgZnVuY3Rpb24sIG9yIG5hbWUgb2YgYSBmdW5jdGlvbiB3aGljaCBpcyBwYXNzZWQgdGhlIFtEYXlDZWxsV2l0aEV2ZW50c10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvRGF5VmlldyN0eXBlZGVmLURheUNlbGxXaXRoRXZlbnRzKSBvYmplY3Qgd2hpY2hcbiAgICAgKiBkZXNjcmliZXMgdGhlIGV2ZW50cyBhbmQgZGV0YWlscyBvZiB0aGUgZGF5LlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9EYXlSZXNvdXJjZVZpZXcjY29uZmlnLWNvbHVtbkhlYWRlclJlbmRlcmVyKVxuICAgICAqIEBwYXJhbSB7RGF5Q2VsbFdpdGhFdmVudHN9IGNlbGxEYXRhIEEgZGF0YSBibG9jayBkZXNjcmliaW5nIHRoZSBkYXRlIGFuZCB0aGUgZXZlbnRzIGZvciB0aGF0IGRhdGUuXG4gICAgICogQHJldHVybnMge3N0cmluZyxvYmplY3R9XG4gICAgICovXG4gICAgY29sdW1uSGVhZGVyUmVuZGVyZXIgPyA6ICgoY2VsbERhdGE6IERheUNlbGxXaXRoRXZlbnRzKSA9PiBzdHJpbmd8b2JqZWN0KXxzdHJpbmdcbiAgICAvKipcbiAgICAgKiBDb25maWd1cmUgdGhpcyBwcm9wZXJ0eSBhcyBgdHJ1ZWAgdG8gc2hvdyB0aGUgZGF5IG5hbWUgYW5kIGRhdGUgaGVhZGVycyBpbiBhIG1vcmUgY29tcGFjdCBzdHlsZS5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvRGF5UmVzb3VyY2VWaWV3I2NvbmZpZy1jb21wYWN0SGVhZGVyKVxuICAgICAqL1xuICAgIGNvbXBhY3RIZWFkZXIgPyA6IGJvb2xlYW5cbiAgICBjb25maWcgPyA6IG9iamVjdFxuICAgIC8qKlxuICAgICAqICpPbmx5IHZhbGlkIGlmIHRoaXMgV2lkZ2V0IGlzIFtmbG9hdGluZ10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9Db3JlL3dpZGdldC9XaWRnZXQjY29uZmlnLWZsb2F0aW5nKSBvciBbcG9zaXRpb25lZF0oI0NvcmUvd2lkZ2V0L1dpZGdldCNjb25maWctcG9zaXRpb25lZCkuKlxuICAgICAqIEVsZW1lbnQsIFdpZGdldCBvciBSZWN0YW5nbGUgdG8gd2hpY2ggdGhpcyBXaWRnZXQgaXMgY29uc3RyYWluZWQuXG4gICAgICovXG4gICAgY29uc3RyYWluVG8gPyA6IEhUTUxFbGVtZW50fFdpZGdldHxSZWN0YW5nbGVcbiAgICAvKipcbiAgICAgKiBDdXN0b20gQ1NTIGNsYXNzZXMgdG8gYWRkIHRvIHRoZSBbY29udGVudEVsZW1lbnRdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ29yZS93aWRnZXQvV2lkZ2V0I3Byb3BlcnR5LWNvbnRlbnRFbGVtZW50KS5cbiAgICAgKiBNYXkgYmUgc3BlY2lmaWVkIGFzIGEgc3BhY2Ugc2VwYXJhdGVkIHN0cmluZywgb3IgYXMgYW4gb2JqZWN0IGluIHdoaWNoIHByb3BlcnR5IG5hbWVzXG4gICAgICogd2l0aCB0cnV0aHkgdmFsdWVzIGFyZSB1c2VkIGFzIHRoZSBjbGFzcyBuYW1lczpcbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvRGF5UmVzb3VyY2VWaWV3I2NvbmZpZy1jb250ZW50RWxlbWVudENscylcbiAgICAgKi9cbiAgICBjb250ZW50RWxlbWVudENscyA/IDogc3RyaW5nfG9iamVjdFxuICAgIC8qKlxuICAgICAqIEFuIG9iamVjdCBjb250YWluaW5nIHR3byBwcm9wZXJ0aWVzLCBgc3RhcnRgIGFuZCBgZW5kYCByZXByZXNlbnRpbmcgdGhlIHN0YXJ0IGFuZFxuICAgICAqIGVuZCBvZiBjb3JlIHdvcmtpbmcgaG91cnMuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L0RheVJlc291cmNlVmlldyNjb25maWctY29yZUhvdXJzKVxuICAgICAqIEBwYXJhbSB7RGF0ZX0gZGF0ZSBEYXRlIGZvciBob3VycyBjYWxjdWxhdGlvblxuICAgICAqIEByZXR1cm5zIHtvYmplY3RbXX1cbiAgICAgKi9cbiAgICBjb3JlSG91cnMgPyA6IG9iamVjdHwoKGRhdGU6IERhdGUpID0+IG9iamVjdFtdKXxzdHJpbmdcbiAgICAvKipcbiAgICAgKiBBIGZ1bmN0aW9uLCBvciBuYW1lIG9mIGEgZnVuY3Rpb24gd2hpY2ggcHJvZHVjZXMgYSBbRG9tQ29uZmlnXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NvcmUvaGVscGVyL0RvbUhlbHBlciN0eXBlZGVmLURvbUNvbmZpZykgYmxvY2sgdG8gY3JlYXRlIHRoZSBjdXJyZW50IHRpbWUgaW5kaWNhdG9yXG4gICAgICogd2hpY2ggaXMgZGlzcGxheWVkIGluIGEgZGF5IGNvbHVtbiB3aGljaCByZXByZXNlbnRzIHRoZSBjdXJyZW50IGRhdGUuIEl0IGlzIHRoZSBkZXZlbG9wZXIncyByZXNwb25zaWJpbGl0eVxuICAgICAqIHRvIGFkZCBDU1MgY2xhc3NlcyBhbmQgdGhlIGFwcHJvcHJpYXRlIENTUyBydWxlcyB0byBwcm9kdWNlIHRoZSBkZXNpcmUgYXBwZWFyYW5jZS5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvRGF5UmVzb3VyY2VWaWV3I2NvbmZpZy1jdXJyZW50VGltZUluZGljYXRvclJlbmRlcmVyKVxuICAgICAqIEByZXR1cm5zIHtEb21Db25maWd9IEFuIG9iamVjdCB3aGljaCBkZXNjcmliZXMgdGhlIERPTSBzdHJ1Y3R1cmUgb2YgdGhlIHRvZGF5IGluZGljYXRvciBlbGVtZW50LlxuICAgICAqL1xuICAgIGN1cnJlbnRUaW1lSW5kaWNhdG9yUmVuZGVyZXIgPyA6ICgoKSA9PiBEb21Db25maWcpfHN0cmluZ1xuICAgIC8qKlxuICAgICAqIEJ5IGRlZmF1bHQsIGhhbGYgaG91ciwgZmlmdGVlbiBtaW51dGUgdGljayBsaW5lcyBhcmUgcmVuZGVyZWQgaW4gYSBsb3dlciBjb250cmFzdFxuICAgICAqIGNvbG91ciB0aGFuIGhvdXIgbGluZXMuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L0RheVJlc291cmNlVmlldyNjb25maWctZGFzaGVkU3VidGlja3MpXG4gICAgICovXG4gICAgZGFzaGVkU3VidGlja3MgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBXaGVuIHRoaXMgV2lkZ2V0IGNvbmZpZ3VyYXRpb24gaXMgdXNlZCBpbiB0aGUgR3JpZCdzIFJvd0V4cGFuZGVyIGZlYXR1cmUncyBgd2lkZ2V0YCBjb25maWcsIHByb3ZpZGUgdGhlXG4gICAgICogZmllbGQgb24gdGhlIGV4cGFuZGVkIHJlY29yZCB0byB1c2UgZm9yIHBvcHVsYXRpbmcgdGhpcyB3aWRnZXQncyBzdG9yZSAoaWYgYXBwbGljYWJsZSlcbiAgICAgKi9cbiAgICBkYXRhRmllbGQgPyA6IHN0cmluZ1xuICAgIC8qKlxuICAgICAqIE9iamVjdCB0byBhcHBseSB0byBlbGVtZW50cyBkYXRhc2V0IChlYWNoIGtleSB3aWxsIGJlIHVzZWQgYXMgYSBkYXRhLWF0dHJpYnV0ZSBvbiB0aGUgZWxlbWVudClcbiAgICAgKi9cbiAgICBkYXRhc2V0ID8gOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+XG4gICAgLyoqXG4gICAgICogVGhlIGRhdGUgdG8gb3JpZW50IHRoaXMgdmlldydzIFtyYW5nZV0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvbWl4aW4vRGF0ZVJhbmdlT3duZXIjY29uZmlnLXJhbmdlKSBhcm91bmQuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L0RheVJlc291cmNlVmlldyNjb25maWctZGF0ZSlcbiAgICAgKi9cbiAgICBkYXRlID8gOiBEYXRlXG4gICAgLyoqXG4gICAgICogQSBjYWxsYmFjayBmdW5jdGlvbiwgb3IgdGhlIG5hbWUgb2YgYSBmdW5jdGlvbiBpbiB0aGUgb3duZXJzaGlwIGhpZXJhcmNoeSB3aGljaCBhblxuICAgICAqIGFwcGxpY2F0aW9uIG1heSBwcm92aWRlIHRvIGZpbHRlciBvdXQgZGF5IGNvbHVtbnMgZm9yIGluZGl2aWR1YWwgZGF0ZXMuXG4gICAgICogQHBhcmFtIHtEYXlDZWxsfSBjb250ZXh0IEluZm9ybWF0aW9uIGFib3V0IHRoZSBkYXkgY29sdW1uIHRvIGJlIGNyZWF0ZWQuXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybiBgZmFsc2VgIHRvIG5vdCBkaXNwbGF5IGEgY29sdW1uIGZvciB0aGUgcGFzc2VkIGRhdGUuXG4gICAgICovXG4gICAgZGF0ZUZpbHRlciA/IDogKChjb250ZXh0OiBEYXlDZWxsKSA9PiBib29sZWFuKXxzdHJpbmdcbiAgICAvKipcbiAgICAgKiBBIFtEYXRlSGVscGVyXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NvcmUvaGVscGVyL0RhdGVIZWxwZXIpIGZvcm1hdCBzdHJpbmcvZnVuY3Rpb24gdG8gdXNlIHRvIGNyZWF0ZSBkYXRlIG91dHB1dCBmb3IgdmlldyBkZXNjcmlwdGlvbnMuXG4gICAgICogQHBhcmFtIHtEYXRlfSBkYXRlIFRoZSBkYXRlIHRvIGZvcm1hdC5cbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgZm9ybWF0dGVkIGRhdGUuXG4gICAgICovXG4gICAgZGF0ZUZvcm1hdCA/IDogc3RyaW5nfCgoZGF0ZTogRGF0ZSkgPT4gc3RyaW5nKVxuICAgIC8qKlxuICAgICAqIEEgc3RyaW5nIHVzZWQgdG8gc2VwYXJhdGUgc3RhcnQgYW5kIGVuZCBkYXRlcyBpbiB0aGUgW2Rlc2NyaXB0aW9uRm9ybWF0XShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL1NjaGVkdWxlci92aWV3L21peGluL0Rlc2NyaWJhYmxlI2NvbmZpZy1kZXNjcmlwdGlvbkZvcm1hdCkuXG4gICAgICovXG4gICAgZGF0ZVNlcGFyYXRvciA/IDogc3RyaW5nXG4gICAgLyoqXG4gICAgICogQSBmdW5jdGlvbiwgb3IgbmFtZSBvZiBhIGZ1bmN0aW9uIHdoaWNoIGlzIHBhc3NlZCB0aGUgW0RvbUNvbmZpZ10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9Db3JlL2hlbHBlci9Eb21IZWxwZXIjdHlwZWRlZi1Eb21Db25maWcpIG9iamVjdCB3aGljaFxuICAgICAqIHdpbGwgYmUgdXNlZCB0byBzeW5jIHdpdGggYSBkYXkgY29sdW1uLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9EYXlSZXNvdXJjZVZpZXcjY29uZmlnLWRheUNlbGxSZW5kZXJlcilcbiAgICAgKiBAcGFyYW0ge0RvbUNvbmZpZyxvYmplY3R9IGRvbUNvbmZpZyBBIFtEb21Db25maWddKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ29yZS9oZWxwZXIvRG9tSGVscGVyI3R5cGVkZWYtRG9tQ29uZmlnKSBjb25maWcgb2JqZWN0IHdoaWNoIGlzIHVzZWQgdG8gc3luYyB0aGUgZGF5IGNvbHVtbiBlbGVtZW50LlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBkb21Db25maWcuY2xhc3NOYW1lIEFuIG9iamVjdCB3aG8ncyB0cnV0aHkgcHJvcGVydHkgbmFtZXMgd2lsbCBiZSBhcHBsaWVkIGFzIGNsYXNzIG5hbWVzLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBkb21Db25maWcuc3R5bGUgQSBDU1Mgc3R5bGUgZGVmaW5pdGlvbiBvYmplY3QuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGRvbUNvbmZpZy5kYXRhc2V0IFRoZSBET00gZGF0YSBwcm9wZXJ0aWVzIHRvIHNldC5cbiAgICAgKiBAcGFyYW0ge0RvbUNvbmZpZ1tdfSBjaGlsZHJlbiBUaGUgW0RvbUNvbmZpZ10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9Db3JlL2hlbHBlci9Eb21IZWxwZXIjdHlwZWRlZi1Eb21Db25maWcpIGRlZmluaXRpb25zIGZvciB0aGUgZXZlbnRzIGluIHRoZSBkYXkuXG4gICAgICogQHBhcmFtIHtEYXlDZWxsfSBjZWxsRGF0YSBBIGBEYXlDZWxsYCBvYmplY3QgdGhhdCBjb250YWlucyBkYXRhIGFib3V0IHRoZSBjZWxsLlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAgICovXG4gICAgZGF5Q2VsbFJlbmRlcmVyID8gOiAoKGRvbUNvbmZpZzogeyBjbGFzc05hbWU6IG9iamVjdCwgc3R5bGU6IG9iamVjdCwgZGF0YXNldDogb2JqZWN0IH0sIGNoaWxkcmVuOiBEb21Db25maWdbXSwgY2VsbERhdGE6IERheUNlbGwpID0+IHN0cmluZyl8c3RyaW5nXG4gICAgLyoqXG4gICAgICogRWl0aGVyIHRoZSBlbmQgaG91ciBvZiB0aGUgZGF5LCBvciBhICoyNCBob3VyKsKgYEhIOk1NYCBzdHJpbmcgZGVub3RpbmcgdGhlIGVuZCBkYXRlIG9mIHRoZSBsYXN0IHJlbmRlcmVkIHRpbWUgYmxvY2suXG4gICAgICogWW91IGNhbiBhbHNvIHNldCB0aGlzIHZhbHVlIHRvIGEgbXMgdGltZXN0YW1wIHJlcHJlc2VudGluZyB0aW1lIGZyb20gbWlkbmlnaHQuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L0RheVJlc291cmNlVmlldyNjb25maWctZGF5RW5kVGltZSlcbiAgICAgKi9cbiAgICBkYXlFbmRUaW1lID8gOiBzdHJpbmd8bnVtYmVyXG4gICAgLyoqXG4gICAgICogQSBmdW5jdGlvbiwgb3IgbmFtZSBvZiBhIGZ1bmN0aW9uIHdoaWNoIGlzIHBhc3NlZCB0aGUgW0RvbUNvbmZpZ10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9Db3JlL2hlbHBlci9Eb21IZWxwZXIjdHlwZWRlZi1Eb21Db25maWcpIG9iamVjdCB3aGljaFxuICAgICAqIHdpbGwgYmUgdXNlZCB0byBzeW5jIHdpdGggYSBkYXkgY2VsbCBoZWFkZXIgPHN0cm9uZz5pbiB0aGUgYWxsIGRheSByb3c8L3N0cm9uZz4uXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L0RheVJlc291cmNlVmlldyNjb25maWctZGF5SGVhZGVyUmVuZGVyZXIpXG4gICAgICogQHBhcmFtIHtEb21Db25maWcsb2JqZWN0fSBoZWFkZXJEb21Db25maWcgQSBbRG9tQ29uZmlnXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NvcmUvaGVscGVyL0RvbUhlbHBlciN0eXBlZGVmLURvbUNvbmZpZykgY29uZmlnIG9iamVjdCB3aGljaCBpcyB1c2VkIHRvIHN5bmMgdGhlIGRheSBoZWFkZXIgZWxlbWVudC5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gaGVhZGVyRG9tQ29uZmlnLmNsYXNzTmFtZSBBbiBvYmplY3Qgd2hvJ3MgdHJ1dGh5IHByb3BlcnR5IG5hbWVzIHdpbGwgYmUgYXBwbGllZCBhcyBjbGFzcyBuYW1lcy5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gaGVhZGVyRG9tQ29uZmlnLnN0eWxlIEEgQ1NTIHN0eWxlIGRlZmluaXRpb24gb2JqZWN0LlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBoZWFkZXJEb21Db25maWcuZGF0YXNldCBUaGUgRE9NIGRhdGEgcHJvcGVydGllcyB0byBzZXQuXG4gICAgICogQHBhcmFtIHtEb21Db25maWdbXX0gaGVhZGVyRG9tQ29uZmlnLmNoaWxkcmVuIFRoZSBbRG9tQ29uZmlnXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NvcmUvaGVscGVyL0RvbUhlbHBlciN0eXBlZGVmLURvbUNvbmZpZykgZGVmaW5pdGlvbnMgdGhlIGhlYWRlciBjb250ZW50LiBUaGVyZSB3aWxsIGJlIDIgYGNoaWxkcmVuYCBlbmNhcHN1bGF0aW5nIHRoZSBkYXkgbmFtZSBhbmQgdGhlIGRhdGUuXG4gICAgICogQHBhcmFtIHtEYXlDZWxsfSBjZWxsRGF0YSBBIGBEYXlDZWxsYCBvYmplY3QgdGhhdCBjb250YWlucyBkYXRhIGFib3V0IHRoZSBjZWxsLlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAgICovXG4gICAgZGF5SGVhZGVyUmVuZGVyZXIgPyA6ICgoaGVhZGVyRG9tQ29uZmlnOiB7IGNsYXNzTmFtZTogb2JqZWN0LCBzdHlsZTogb2JqZWN0LCBkYXRhc2V0OiBvYmplY3QsIGNoaWxkcmVuOiBEb21Db25maWdbXSB9LCBjZWxsRGF0YTogRGF5Q2VsbCkgPT4gc3RyaW5nKXxzdHJpbmdcbiAgICAvKipcbiAgICAgKiBUaGUgW0RhdGVIZWxwZXJdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ29yZS9oZWxwZXIvRGF0ZUhlbHBlcikgZm9ybWF0IHN0cmluZy9mdW5jdGlvbiBmb3IgZGF5IG5hbWVzIGluIHRoZSBoZWFkZXIgcm93IChlLmcuLCBcImRkZFwiIGZvciBcIk1vblwiLCBcIlR1ZVwiLCAuLi4pXG4gICAgICogQHBhcmFtIHtEYXRlfSBkYXRlIFRoZSBkYXRlIHRvIGZvcm1hdC5cbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgZm9ybWF0dGVkIGRhdGUuXG4gICAgICovXG4gICAgZGF5TmFtZUZvcm1hdCA/IDogc3RyaW5nfCgoZGF0ZTogRGF0ZSkgPT4gc3RyaW5nKVxuICAgIC8qKlxuICAgICAqIEVpdGhlciB0aGUgc3RhcnQgaG91ciBvZiB0aGUgZGF5LCBvciBhICoyNCBob3VyKsKgYEhIOk1NYCBzdHJpbmcgZGVub3RpbmcgdGhlIHN0YXJ0IHRpbWUgZm9yIGRheXMuIFRoaXNcbiAgICAgKiBpcyBtaWRuaWdodCBieSBkZWZhdWx0LlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9EYXlSZXNvdXJjZVZpZXcjY29uZmlnLWRheVN0YXJ0U2hpZnQpXG4gICAgICovXG4gICAgZGF5U3RhcnRTaGlmdCA/IDogc3RyaW5nfG51bWJlclxuICAgIC8qKlxuICAgICAqIEVpdGhlciB0aGUgc3RhcnQgaG91ciBvZiB0aGUgZGF5LCBvciBhICoyNCBob3VyKsKgYEhIOk1NYCBzdHJpbmcgZGVub3RpbmcgdGhlIHN0YXJ0IG9mIHRoZSBmaXJzdCByZW5kZXJlZFxuICAgICAqIGRhaWx5IHRpbWUgYmxvY2suIFlvdSBjYW4gYWxzbyBzZXQgdGhpcyB2YWx1ZSB0byBhIG1zIHRpbWVzdGFtcCByZXByZXNlbnRpbmcgdGltZSBmcm9tIG1pZG5pZ2h0LlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9EYXlSZXNvdXJjZVZpZXcjY29uZmlnLWRheVN0YXJ0VGltZSlcbiAgICAgKi9cbiAgICBkYXlTdGFydFRpbWUgPyA6IHN0cmluZ3xudW1iZXJcbiAgICAvKipcbiAgICAgKiBUaGUgbmFtZSBvZiB0aGUgcHJvcGVydHkgdG8gc2V0IHdoZW4gYSBzaW5nbGUgdmFsdWUgaXMgdG8gYmUgYXBwbGllZCB0byB0aGlzIFdpZGdldC4gU3VjaCBhcyB3aGVuIHVzZWRcbiAgICAgKiBpbiBhIGdyaWQgV2lkZ2V0Q29sdW1uLCB0aGlzIGlzIHRoZSBwcm9wZXJ0eSB0byB3aGljaCB0aGUgY29sdW1uJ3MgYGZpZWxkYCBpcyBhcHBsaWVkLlxuICAgICAqL1xuICAgIGRlZmF1bHRCaW5kUHJvcGVydHkgPyA6IHN0cmluZ1xuICAgIC8qKlxuICAgICAqIEEgW3F1ZXJ5XShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L0NvbnRhaW5lciNmdW5jdGlvbi1xdWVyeSkgc2VsZWN0b3IgZnVuY3Rpb24gd2hpY2ggY2FuIGlkZW50aWZ5IHRoZSBkZXNjZW5kYW50IHdpZGdldCB0byB3aGljaFxuICAgICAqIGZvY3VzIHNob3VsZCBiZSBkaXJlY3RlZCBieSBkZWZhdWx0LlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9EYXlSZXNvdXJjZVZpZXcjY29uZmlnLWRlZmF1bHRGb2N1cylcbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0LldpZGdldH0gd2lkZ2V0IFdpZGdldCBwYXNzZWQgdG8gbWV0aG9kXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IHRydXRoeSB2YWx1ZSBpZiB3aWRnZXQgaXMgdGhlIGRlZmF1bHQgb25lXG4gICAgICovXG4gICAgZGVmYXVsdEZvY3VzID8gOiAoKHdpZGdldDogV2lkZ2V0KSA9PiBib29sZWFuKXxzdHJpbmdcbiAgICAvKipcbiAgICAgKiBBIGNvbmZpZyBvYmplY3QgY29udGFpbmluZyBkZWZhdWx0IHNldHRpbmdzIHRvIGFwcGx5IHRvIGFsbCBjaGlsZCB3aWRnZXRzLlxuICAgICAqL1xuICAgIGRlZmF1bHRzID8gOiBDYWxlbmRhckNvbnRhaW5lckl0ZW1Db25maWdcbiAgICAvKipcbiAgICAgKiBPcHRpb25zIHRvIGFkZCBpbnRvIHNjcm9sbCBvcHRpb25zIHdoZW4gdGhlIFtzY3JvbGxUb10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvbWl4aW4vQ2FsZW5kYXJNaXhpbiNmdW5jdGlvbi1zY3JvbGxUbykgbWV0aG9kIGlzIGNhbGxlZC5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvRGF5UmVzb3VyY2VWaWV3I2NvbmZpZy1kZWZhdWx0U2Nyb2xsT3B0aW9ucylcbiAgICAgKi9cbiAgICBkZWZhdWx0U2Nyb2xsT3B0aW9ucyA/IDogQnJ5bnR1bVNjcm9sbE9wdGlvbnNcbiAgICAvKipcbiAgICAgKiBUaGUgZGF0ZSBmb3JtYXQgdXNlZCBieSB0aGUgZGVmYXVsdCBbZGVzY3JpcHRpb25SZW5kZXJlcl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9TY2hlZHVsZXIvdmlldy9taXhpbi9EZXNjcmliYWJsZSNjb25maWctZGVzY3JpcHRpb25SZW5kZXJlcikgZm9yIHJlbmRlcmluZyB0aGUgdmlldydzIGRlc2NyaXB0aW9uLlxuICAgICAqIElmIHRoaXMgdmFsdWUgaXMgYG51bGxgLCB0aGUgW2RhdGVGb3JtYXRdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvU2NoZWR1bGVyL3ZpZXcvbWl4aW4vRGVzY3JpYmFibGUjY29uZmlnLWRhdGVGb3JtYXQpIChhbmQgcG90ZW50aWFsbHkgW2RhdGVTZXBhcmF0b3JdKCNTY2hlZHVsZXIvdmlldy9taXhpbi9EZXNjcmliYWJsZSNjb25maWctZGF0ZVNlcGFyYXRvcikpIHdpbGxcbiAgICAgKiBiZSB1c2VkLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9EYXlSZXNvdXJjZVZpZXcjY29uZmlnLWRlc2NyaXB0aW9uRm9ybWF0KVxuICAgICAqIEBwYXJhbSB7RGF0ZX0gZGF0ZSBUaGUgZGF0ZSB0byBmb3JtYXQuXG4gICAgICogQHJldHVybnMge3N0cmluZ30gVGhlIGZvcm1hdHRlZCBkYXRlLlxuICAgICAqL1xuICAgIGRlc2NyaXB0aW9uRm9ybWF0ID8gOiBzdHJpbmd8c3RyaW5nW118Ym9vbGVhbltdfCgoZGF0ZTogRGF0ZSkgPT4gc3RyaW5nKXxGdW5jdGlvbltdXG4gICAgLyoqXG4gICAgICogQSBmdW5jdGlvbiB0aGF0IHByb3ZpZGVzIHRoZSB0ZXh0dWFsIGRlc2NyaXB0aW9uIGZvciB0aGlzIHZpZXcuIElmIHByb3ZpZGVkLCB0aGlzIGZ1bmN0aW9uIG92ZXJyaWRlcyB0aGVcbiAgICAgKiBbZGVzY3JpcHRpb25Gb3JtYXRdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvU2NoZWR1bGVyL3ZpZXcvbWl4aW4vRGVzY3JpYmFibGUjY29uZmlnLWRlc2NyaXB0aW9uRm9ybWF0KS5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvRGF5UmVzb3VyY2VWaWV3I2NvbmZpZy1kZXNjcmlwdGlvblJlbmRlcmVyKVxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuV2lkZ2V0fSB2aWV3IFRoZSBhY3RpdmUgdmlldyBpbiBjYXNlIHRoZSBmdW5jdGlvbiBpcyBpbiBhbm90aGVyIHNjb3BlLlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IERlc2NyaXB0aW9uIHN0cmluZ1xuICAgICAqL1xuICAgIGRlc2NyaXB0aW9uUmVuZGVyZXIgPyA6ICh2aWV3OiBXaWRnZXQpID0+IHN0cmluZ1xuICAgIC8qKlxuICAgICAqIENoZWNrIGZvciBDU1MgY29tcGF0aWJpbGl0eSBpc3N1ZXMgd2hlbiB1cGdyYWRpbmcgdG8gdjcuIFBlcmZvcm1zIHRoZSBmb2xsb3dpbmcgY2hlY2tzOlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9EYXlSZXNvdXJjZVZpZXcjY29uZmlnLWRldGVjdENTU0NvbXBhdGliaWxpdHlJc3N1ZXMpXG4gICAgICovXG4gICAgZGV0ZWN0Q1NTQ29tcGF0aWJpbGl0eUlzc3VlcyA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIERpc2FibGUgb3IgZW5hYmxlIHRoZSB3aWRnZXQuIEl0IGlzIHNpbWlsYXIgdG8gW3JlYWRPbmx5XShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1dpZGdldCNjb25maWctcmVhZE9ubHkpIGV4Y2VwdCBhIGRpc2FibGVkIHdpZGdldFxuICAgICAqIGNhbm5vdCBiZSBmb2N1c2VkLCB1c2VzIGEgZGlmZmVyZW50IHJlbmRpdGlvbiAodXN1YWxseSBncmV5aXNoKSBhbmQgZG9lcyBub3QgYWxsb3cgc2VsZWN0aW5nIGl0cyB2YWx1ZS5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvRGF5UmVzb3VyY2VWaWV3I2NvbmZpZy1kaXNhYmxlZClcbiAgICAgKi9cbiAgICBkaXNhYmxlZCA/IDogYm9vbGVhbnwnaW5lcnQnXG4gICAgLyoqXG4gICAgICogQ29udHJvbHMgdGhlIHBsYWNlbWVudCBvZiB0aGlzIHdpZGdldCB3aGVuIGl0IGlzIGFkZGVkIHRvIGEgW3BhbmVsJ3MgXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1BhbmVsKVxuICAgICAqIFtzdHJpcHMgY29sbGVjdGlvbl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9Db3JlL3dpZGdldC9QYW5lbCNjb25maWctc3RyaXBzKS4gVHlwaWNhbCB2YWx1ZXMgZm9yIHRoaXMgY29uZmlnIGFyZSBgJ3RvcCdgLFxuICAgICAqIGAnYm90dG9tJ2AsIGAnbGVmdCdgLCBvciBgJ3JpZ2h0J2AsIHdoaWNoIGNhdXNlIHRoZSB3aWRnZXQgdG8gYmUgcGxhY2VkIG9uIHRoYXQgc2lkZSBvZiB0aGUgcGFuZWwnc1xuICAgICAqIGJvZHkuIFN1Y2ggd2lkZ2V0cyBhcmUgY2FsbGVkIFwiZWRnZSBzdHJpcHNcIi5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvRGF5UmVzb3VyY2VWaWV3I2NvbmZpZy1kb2NrKVxuICAgICAqL1xuICAgIGRvY2sgPyA6ICd0b3AnfCdib3R0b20nfCdsZWZ0J3wncmlnaHQnfCdzdGFydCd8J2VuZCd8J2hlYWRlcid8J3ByZS1oZWFkZXInfG9iamVjdFxuICAgIC8qKlxuICAgICAqICpPbmx5IHZhbGlkIGlmIHRoaXMgV2lkZ2V0IGlzIFtmbG9hdGluZ10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9Db3JlL3dpZGdldC9XaWRnZXQjY29uZmlnLWZsb2F0aW5nKS4qXG4gICAgICogU2V0IHRvIGB0cnVlYCB0byBiZSBhYmxlIHRvIGRyYWcgYSB3aWRnZXQgZnJlZWx5IG9uIHRoZSBwYWdlLiBPciBzZXQgdG8gYW4gb2JqZWN0IHdpdGggYSDCtGhhbmRsZVNlbGVjdG9ywrRcbiAgICAgKiBwcm9wZXJ0eSB3aGljaCBjb250cm9scyB3aGVuIGEgZHJhZyBzaG91bGQgc3RhcnQuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L0RheVJlc291cmNlVmlldyNjb25maWctZHJhZ2dhYmxlKVxuICAgICAqL1xuICAgIGRyYWdnYWJsZSA/IDogYm9vbGVhbnx7XG4gICAgICAgIGhhbmRsZVNlbGVjdG9yPzogc3RyaW5nXG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBbZHVyYXRpb25Vbml0XShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL1NjaGVkdWxlci9tb2RlbC9FdmVudE1vZGVsI2ZpZWxkLWR1cmF0aW9uVW5pdCkgdG8gdXNlIHdoZW4gZHJhZy1jcmVhdGluZyBldmVudHNcbiAgICAgKiBpbiB0aGlzIHZpZXcuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L0RheVJlc291cmNlVmlldyNjb25maWctZHJhZ1VuaXQpXG4gICAgICovXG4gICAgZHJhZ1VuaXQgPyA6IHN0cmluZ1xuICAgIC8qKlxuICAgICAqIE1ha2UgdGhpcyBQYW5lbCBhIGRvY2tlZCBkcmF3ZXIgd2hpY2ggc2xpZGVzIG91dCBmcm9tIG9uZSBzaWRlIG9mIHRoZSBicm93c2VyIHZpZXdwb3J0IGJ5IGRlZmF1bHQuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L0RheVJlc291cmNlVmlldyNjb25maWctZHJhd2VyKVxuICAgICAqIEBwYXJhbSB7J3N0YXJ0JywnbGVmdCcsJ2VuZCcsJ3JpZ2h0JywndG9wJywnYm90dG9tJ30gc2lkZSBUaGUgc2lkZSBvZiB0aGUgdmlld3BvcnQgdG8gZG9jayB0aGUgZHJhd2VyIHRvLiAgKiBgJ3N0YXJ0J2AgbWVhbnMgdGhlIGBpbmxpbmUtc3RhcnRgIHNpZGUuICogYCdlbmQnYCBtZWFucyB0aGUgYGlubGluZS1lbmRgIHNpZGUuXG4gICAgICogQHBhcmFtIHtzdHJpbmcsbnVtYmVyfSBzaXplIFRoZSBzaXplIG9mIHRoZSBkcmF3ZXIgaW4gaXRzIGNvbGxhcHNpYmxlIGF4aXMuXG4gICAgICogQHBhcmFtIHtib29sZWFufSBpbmxpbmUgSWYgdXNpbmcgdGhlIFthcHBlbmRUb10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9Db3JlL3dpZGdldC9QYW5lbCNjb25maWctYXBwZW5kVG8pIGNvbmZpZyB0byBwbGFjZSB0aGUgZHJhd2VyIGluc2lkZSBhIGhvc3Qgd2lkZ2V0LCB0aGlzIG1heSBiZSBzZXQgdG8gYHRydWVgIHRvIG1ha2UgdGhlIGRyYXdlciBpbmxpbmUgd2l0aGluIHRoYXQgaG9zdC4gTm90ZSB0aGF0LCBpZiB1c2luZyB0aGlzLCB0aGUgbGF5b3V0IG9mIHRoZSBob3N0IGVsZW1lbnQgbXVzdCBoYXZlIGBmbGV4LWRpcmVjdGlvbmAgc2V0IGFwcHJvcHJpYXRlbHkuXG4gICAgICogQHBhcmFtIHtib29sZWFuLG9iamVjdH0gYXV0b0Nsb3NlIFNwZWNpZmllcyB3aGF0IHVzZXIgYWN0aW9ucyBzaG91bGQgYXV0b21hdGljYWxseSBjbG9zZSB0aGUgZHJhd2VyLiBEZWZhdWx0cyB0byBjbG9zaW5nIHdoZW4gdGhlIHVzZXIgY2xpY2tzIG91dHNpZGUgb2YgdGhlIGRyYXdlciBvciB3aGVuIGZvY3VzIG1vdmVzIG91dHNpZGUgb2YgdGhlIGRyYXdlci5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW4sc3RyaW5nfSBhdXRvQ2xvc2UubW91c2Vkb3duIElmIHRoZSB1c2VyIGNsaWNrcyBvdXRzaWRlIG9mIHRoZSBkcmF3ZXIsIHRoZSBkcmF3ZXIgd2lsbCBhdXRvbWF0aWNhbGx5IGJlIGhpZGRlbi4gSWYgdGhlIHZhbHVlIGlzIGEgc3RyaW5nLCBpdCBpcyB1c2VkIGFzIGEgQ1NTIHNlbGVjdG9yIHRvIGZpbHRlciBjbGlja3Mgd2hpY2ggc2hvdWxkIGNsb3NlIHRoZSBkcmF3ZXIuXG4gICAgICogQHBhcmFtIHtib29sZWFuLHN0cmluZ30gYXV0b0Nsb3NlLmZvY3Vzb3V0IElmIGZvY3VzIG1vdmVzIG91dHNpZGUgb2YgdGhlIGRyYXdlciwgdGhlIGRyYXdlciB3aWxsIGF1dG9tYXRpY2FsbHkgYmUgaGlkZGVuLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBhdXRvQ2xvc2UubW91c2VvdXQgSGlkZXMgdGhlIGRyYXdlciB3aGVuIHRoZSBtb3VzZSBsZWF2ZXMgdGhlIGRyYXdlciBhZnRlciB0aGUgYGF1dG9DbG9zZURlbGF5YCBwZXJpb2QuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGF1dG9DbG9zZURlbGF5IFdoZW4gdXNpbmcgYG1vdXNlb3V0YCwgdGhpcyBpcyB0aGUgZGVsYXkgaW4gbWlsbGlzZWNvbmRzXG4gICAgICovXG4gICAgZHJhd2VyID8gOiBib29sZWFufHtzaWRlPzogJ3N0YXJ0J3wnbGVmdCd8J2VuZCd8J3JpZ2h0J3wndG9wJ3wnYm90dG9tJywgc2l6ZT86IHN0cmluZ3xudW1iZXIsIGlubGluZT86IGJvb2xlYW4sIGF1dG9DbG9zZTogeyBtb3VzZWRvd24/OiBib29sZWFufHN0cmluZywgZm9jdXNvdXQ/OiBib29sZWFufHN0cmluZywgbW91c2VvdXQ/OiBzdHJpbmcgfSwgYXV0b0Nsb3NlRGVsYXk/OiBudW1iZXJ9XG4gICAgLyoqXG4gICAgICogQW4gb2JqZWN0IHNwZWNpZnlpbmcgYXR0cmlidXRlcyB0byBhc3NpZ24gdG8gdGhlIHJvb3QgZWxlbWVudCBvZiB0aGlzIHdpZGdldC5cbiAgICAgKiBTZXQgYG51bGxgIHZhbHVlIHRvIGF0dHJpYnV0ZSB0byByZW1vdmUgaXQuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L0RheVJlc291cmNlVmlldyNjb25maWctZWxlbWVudEF0dHJpYnV0ZXMpXG4gICAgICovXG4gICAgZWxlbWVudEF0dHJpYnV0ZXMgPyA6IFJlY29yZDxzdHJpbmcsIHN0cmluZ3xudWxsPlxuICAgIC8qKlxuICAgICAqIFRoZSBlbmQgZGF0ZSAoVGltZSBjb21wb25lbnQgaXMgemVyb2VkKSBvZiB0aGlzIHZpZXcuIE5vdGUgdGhhdCBpbiB0ZXJtcyBvZiBmdWxsIGRheXMsXG4gICAgICogdGhpcyBpcyBleGNsdXNpdmUsIGllOiAyMDIwLTAxLTAxMiB0byAyMDIwLTAxLTA4IGlzICpzZXZlbiogZGF5cy4gVGhlIGVuZCBpcyAwMDowMDowMCBvblxuICAgICAqIHRoZSA4dGguXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L0RheVJlc291cmNlVmlldyNjb25maWctZW5kRGF0ZSlcbiAgICAgKi9cbiAgICBlbmREYXRlID8gOiBEYXRlXG4gICAgLyoqXG4gICAgICogQSBmdW5jdGlvbiwgb3IgdGhlIG5hbWUgb2YgYSBmdW5jdGlvbiBpbiB0aGUgb3duZXJzaGlwIGhpZXJhcmNoeSB0byBmaWx0ZXIgd2hpY2ggZXZlbnRzXG4gICAgICogYXJlIGNvbGxlY3RlZCBpbnRvIHRoZSBkYXkgY2VsbCBkYXRhIGJsb2Nrcy5cbiAgICAgKiBSZXR1cm4gYHRydWVgIHRvIGluY2x1ZGUgdGhlIHBhc3NlZCBldmVudCwgb3IgYSAqZmFsc3kqIHZhbHVlIHRvIGV4Y2x1ZGUgdGhlIGV2ZW50LlxuICAgICAqIEBwYXJhbSB7U2NoZWR1bGVyLm1vZGVsLkV2ZW50TW9kZWx9IGV2ZW50IHRoZSBwYXNzZWQgZXZlbnRcbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICBldmVudEZpbHRlciA/IDogKChldmVudDogRXZlbnRNb2RlbCkgPT4gYm9vbGVhbil8c3RyaW5nXG4gICAgLyoqXG4gICAgICogQSBmdW5jdGlvbiwgb3IgdGhlIG5hbWUgb2YgYSBmdW5jdGlvbiBpbiB0aGUgb3duZXJzaGlwIGhpZXJhcmNoeSB3aGljaCB5b3VcbiAgICAgKiBjYW4gc3BlY2lmeSB0byBjdXN0b21pemUgZXZlbnQgRE9NIGNvbnRlbnQuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L0RheVJlc291cmNlVmlldyNjb25maWctZXZlbnRIZWFkZXJSZW5kZXJlcilcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZGV0YWlsIEFuIG9iamVjdCB0aGF0IGNvbnRhaW5zIGRhdGEgYWJvdXQgdGhlIGV2ZW50IGJlaW5nIHJlbmRlcmVkXG4gICAgICogQHBhcmFtIHtDYWxlbmRhclZpZXd9IGRldGFpbC52aWV3IFRoZSB2aWV3IHJlbmRlcmluZyB0aGUgZXZlbnRcbiAgICAgKiBAcGFyYW0ge1NjaGVkdWxlci5tb2RlbC5FdmVudE1vZGVsfSBkZXRhaWwuZXZlbnRSZWNvcmQgVGhlIGV2ZW50IHJlY29yZFxuICAgICAqIEBwYXJhbSB7U2NoZWR1bGVyLm1vZGVsLlJlc291cmNlTW9kZWx9IGRldGFpbC5yZXNvdXJjZVJlY29yZCBUaGUgcmVzb3VyY2UgcmVjb3JkXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGRldGFpbC5yZW5kZXJEYXRhIEEgZGF0YSBvYmplY3QgY29udGFpbmluZyBwcm9wZXJ0aWVzIHRoYXQgd2lsbCBiZSB1c2VkIHRvIGNyZWF0ZSB0aGUgZXZlbnQgZWxlbWVudFxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBkZXRhaWwucmVuZGVyRGF0YS5zdHlsZSBUaGUgc3R5bGUgcHJvcGVydHkgaXMgYW4gb2JqZWN0IGNvbnRhaW5pbmcgc3R5bGUgcHJvcGVydGllcyBmb3IgdGhlIGV2ZW50IGVsZW1lbnRcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZGV0YWlsLnJlbmRlckRhdGEuY2xzIFRoZSBjbHMgcHJvcGVydHkgaXMgYW4gb2JqZWN0IHdob3NlIHByb3BlcnR5IG5hbWVzIHdpbGwgYmUgYWRkZWQgdG8gdGhlIGV2ZW50IGVsZW1lbnQgaWYgdGhlIHByb3BlcnR5IHZhbHVlIGlzIHRydXRoeVxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBkZXRhaWwucmVuZGVyRGF0YS5pY29uU3R5bGUgVGhlIGljb25TdHlsZSBwcm9wZXJ0eSBpcyBhbiBvYmplY3QgY29udGFpbmluZyBzdHlsZSBwcm9wZXJ0aWVzIGZvciB0aGUgaWNvbiBlbGVtZW50IGlmIGFuIGljb24gZWxlbWVudCBpcyB0byBiZSB1c2VkXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGRldGFpbC5yZW5kZXJEYXRhLmljb25DbHMgVGhlIGljb25DbHMgcHJvcGVydHkgaXMgYW4gb2JqZWN0IHdob3NlIHByb3BlcnR5IG5hbWVzIHdpbGwgYmUgYWRkZWQgdG8gdGhlIGljb24gZWxlbWVudC4gSW5pdGlhbGx5IHNldCBmcm9tIHRoZSBldmVudCByZWNvcmQncyBbaWNvbkNsc10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9TY2hlZHVsZXIvbW9kZWwvRXZlbnRNb2RlbCNmaWVsZC1pY29uQ2xzKS4gQ2FuIGJlIG11dGF0ZWQgYnkgdGhlIHJlbmRlcmVyLiBJZiBudWxsLCBvciBubyBwcm9wZXJ0aWVzIGFyZSBzZXQsIG5vIGljb24gd2lsbCBiZSByZW5kZXJlZFxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBkZXRhaWwucmVuZGVyRGF0YS5ldmVudENvbG9yIENvbG9yIHRvIGJlIGFwcGxpZWQgdG8gdGhlIGV2ZW50XG4gICAgICogQHBhcmFtIHtvYmplY3R9IGRldGFpbC5yZW5kZXJEYXRhLmRhdGFzZXQgQW4gb2JqZWN0IHdoaWNoIHByb2R1Y2VzIHRoZSBgZGF0YXNldGAgb2YgdGhlIHJlc3VsdGluZyBldmVudCBiYXJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGRldGFpbC5yZW5kZXJEYXRhLnNvbGlkQmFyIFRoaXMgaXMgdmFsaWQgZm9yIHZpZXdzIHdoaWNoIGNyZWF0ZSBldmVudCBiYXJzLiBUaGlzIGlzIHNldCB0byBgdHJ1ZWAgYnkgZGVmYXVsdCBmb3IgYWxsIGRheSBhbmQgaW50ZXJkYXkgZXZlbnRzIHNvIHRoYXQgdGhlc2UgYXBwZWFyIGFzIGEgc29saWQgYmxvY2sgb2YgYmFja2dyb3VuZCBjb2xvci4gQW4gZXZlbnRSZW5kZXJlciBtYXkgbXV0YXRlIHRoaXMgZmxhZyB0byBjaGFuZ2UgaW4gd2hhdCBtYW5uZXIgdGhlIGV2ZW50IGJhciBpcyBjb2xvcmVkIC0gYXMgYSBzb2xpZCBiYXIgb2YgY29sb3IsIG9yIHVzaW5nIHRoZSBmb3JlZ3JvdW5kIGNvbG9yICh0ZXh0IGFuZCBpY29ucykgc3VjaCBhcyB0aGUgTW9udGhWaWV3LCB0aGUgQ2FsZW5kYXJSb3cgKGFsbCBkYXkgZXZlbnRzIGluIGEgRGF5VmlldyksIGFuZCBPdmVyZmxvd1BvcHVwc1xuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBkZXRhaWwucmVuZGVyRGF0YS5ib2R5Q29sb3IgV2hlbiB1c2VkIGluIGEgW0RheVZpZXddKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L0RheVZpZXcpLCB0aGlzIGNvbG9yIGlzIGFwcGxpZWQgdG8gdGhlIGJvZHkgb2YgdGhlIGV2ZW50IGVsZW1lbnQuIE5vdGUgdGhhdCB0aGlzIG11c3QgYmUgbGlnaHQgZW5vdWdoIHRoYXQgdGhlIHRleHQgY29sb3IgKEZyb20gdGhlIFNBU1MgdmFyaWFibGUgYCRkYXl2aWV3LWV2ZW50LWNvbG9yYCkgaXMgdmlzaWJsZVxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gZGV0YWlsLnNob3dCdWxsZXQgSWYgdGhlcmUgaXMgbm8gYGljb25DbHNgLCBhbmQgdGhlIGV2ZW50IGlzIG5vdCByZWN1cnJpbmcsIHRoZW4gYnkgZGVmYXVsdCBhIFwiYnVsbGV0XCIgY2lyY3VsYXIgaWNvbiBpcyBzaG93biBpZiB0aGUgdmlldydzIFtzaG93QnVsbGV0XShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9taXhpbi9DYWxlbmRhck1peGluI2NvbmZpZy1zaG93QnVsbGV0KSBpZiBzZXQuIFNldHRpbmcgdGhpcyBwcm9wZXJ0eSBpbiBhbiBldmVudCByZW5kZXJlciBvdmVycmlkZXMgdGhpcyBiZWhhdmlvdXIuXG4gICAgICogQHJldHVybnMge0RvbUNvbmZpZyxEb21Db25maWdbXSxzdHJpbmcsdm9pZH1cbiAgICAgKi9cbiAgICBldmVudEhlYWRlclJlbmRlcmVyID8gOiAoKGRldGFpbDogeyB2aWV3OiBDYWxlbmRhclZpZXcsIGV2ZW50UmVjb3JkOiBFdmVudE1vZGVsLCByZXNvdXJjZVJlY29yZDogUmVzb3VyY2VNb2RlbCwgcmVuZGVyRGF0YTogeyBzdHlsZTogb2JqZWN0LCBjbHM6IG9iamVjdCwgaWNvblN0eWxlOiBvYmplY3QsIGljb25DbHM6IG9iamVjdCwgZXZlbnRDb2xvcjogc3RyaW5nLCBkYXRhc2V0OiBvYmplY3QsIHNvbGlkQmFyOiBib29sZWFuLCBib2R5Q29sb3I6IHN0cmluZyB9LCBzaG93QnVsbGV0OiBib29sZWFuIH0pID0+IERvbUNvbmZpZ3xEb21Db25maWdbXXxzdHJpbmd8dm9pZCl8c3RyaW5nXG4gICAgLyoqXG4gICAgICogQ29uZmlndXJhdGlvbiB0byBtYW5hZ2UgZXZlbnQgbGF5b3V0IGNsYXNzLlxuICAgICAqIFNlZSBbRmx1aWREYXlMYXlvdXRdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvbGF5b3V0L2RheS9GbHVpZERheUxheW91dCkgY2xhc3MgZG9jcyB0byBzZWUgYWxsIHBvc3NpYmxlIGNvbmZpZ3VyYXRpb25zLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9EYXlSZXNvdXJjZVZpZXcjY29uZmlnLWV2ZW50TGF5b3V0KVxuICAgICAqL1xuICAgIGV2ZW50TGF5b3V0ID8gOiBGbHVpZERheUxheW91dENvbmZpZ1xuICAgIC8qKlxuICAgICAqIEEgZnVuY3Rpb24sIG9yIHRoZSBuYW1lIG9mIGEgZnVuY3Rpb24gaW4gdGhlIG93bmVyc2hpcCBoaWVyYXJjaHkgd2hpY2ggeW91XG4gICAgICogY2FuIHNwZWNpZnkgdG8gY3VzdG9taXplIGV2ZW50IERPTSBjb250ZW50LlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9EYXlSZXNvdXJjZVZpZXcjY29uZmlnLWV2ZW50UmVuZGVyZXIpXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGRldGFpbCBBbiBvYmplY3QgdGhhdCBjb250YWlucyBkYXRhIGFib3V0IHRoZSBldmVudCBiZWluZyByZW5kZXJlZFxuICAgICAqIEBwYXJhbSB7Q2FsZW5kYXJWaWV3fSBkZXRhaWwudmlldyBUaGUgdmlldyByZW5kZXJpbmcgdGhlIGV2ZW50XG4gICAgICogQHBhcmFtIHtTY2hlZHVsZXIubW9kZWwuRXZlbnRNb2RlbH0gZGV0YWlsLmV2ZW50UmVjb3JkIFRoZSBldmVudCByZWNvcmRcbiAgICAgKiBAcGFyYW0ge1NjaGVkdWxlci5tb2RlbC5SZXNvdXJjZU1vZGVsfSBkZXRhaWwucmVzb3VyY2VSZWNvcmQgVGhlIFJlc291cmNlIHJlY29yZFxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBkZXRhaWwucmVuZGVyRGF0YSBBIGRhdGEgb2JqZWN0IGNvbnRhaW5pbmcgcHJvcGVydGllcyB0aGF0IHdpbGwgYmUgdXNlZCB0byBjcmVhdGUgdGhlIGV2ZW50IGVsZW1lbnRcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZGV0YWlsLnJlbmRlckRhdGEuc3R5bGUgVGhlIHN0eWxlIHByb3BlcnR5IGlzIGFuIG9iamVjdCBjb250YWluaW5nIHN0eWxlIHByb3BlcnRpZXMgZm9yIHRoZSBldmVudCBlbGVtZW50XG4gICAgICogQHBhcmFtIHtvYmplY3R9IGRldGFpbC5yZW5kZXJEYXRhLmNscyBUaGUgY2xzIHByb3BlcnR5IGlzIGFuIG9iamVjdCB3aG9zZSBwcm9wZXJ0eSBuYW1lcyB3aWxsIGJlIGFkZGVkIHRvIHRoZSBldmVudCBlbGVtZW50IGlmIHRoZSBwcm9wZXJ0eSB2YWx1ZSBpcyB0cnV0aHlcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZGV0YWlsLnJlbmRlckRhdGEuaWNvblN0eWxlIFRoZSBpY29uU3R5bGUgcHJvcGVydHkgaXMgYW4gb2JqZWN0IGNvbnRhaW5pbmcgc3R5bGUgcHJvcGVydGllcyBmb3IgdGhlIGljb24gZWxlbWVudCBpZiBhbiBpY29uIGVsZW1lbnQgaXMgdG8gYmUgdXNlZFxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBkZXRhaWwucmVuZGVyRGF0YS5pY29uQ2xzIFRoZSBpY29uQ2xzIHByb3BlcnR5IGlzIGFuIG9iamVjdCB3aG9zZSBwcm9wZXJ0eSBuYW1lcyB3aWxsIGJlIGFkZGVkIHRvIHRoZSBpY29uIGVsZW1lbnQuIEluaXRpYWxseSBzZXQgZnJvbSB0aGUgZXZlbnQgcmVjb3JkJ3MgW2ljb25DbHNdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvU2NoZWR1bGVyL21vZGVsL0V2ZW50TW9kZWwjZmllbGQtaWNvbkNscykuIENhbiBiZSBtdXRhdGVkIGJ5IHRoZSByZW5kZXJlci4gSWYgbnVsbCwgb3Igbm8gcHJvcGVydGllcyBhcmUgc2V0LCBubyBpY29uIHdpbGwgYmUgcmVuZGVyZWRcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZGV0YWlsLnJlbmRlckRhdGEuZXZlbnRDb2xvciBDb2xvciB0byBiZSBhcHBsaWVkIHRvIHRoZSBldmVudC4gVGhpcyBtYXkgYmUgYSBDU1MgY29sb3IgbmFtZSBvciBhIENTUyBjb2xvciB2YWx1ZSBpbiBhbnkgb2YgdGhlIHN1cHBvcnRlZCBDU1MgY29sb3IgZm9ybWF0cyBzdWNoIGFzIGAjUlJHR0JCYCwgYHJnYigyNTUsIDAsIDApYCwgb3IgYHJnYmEoMjU1LCAwLCAwLCAwLjUpYC5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZGV0YWlsLnJlbmRlckRhdGEuZXZlbnRCYWNrZ3JvdW5kIEEgQ1NTIGJhY2tncm91bmQgc3R5bGUgdG8gYmUgYXBwbGllZCB0byB0aGUgZXZlbnQuIFRoaXMgaXMgbm90IHNldCBieSBkZWZhdWx0LCBidXQgY2FuIGJlIHNldCBieSB0aGUgcmVuZGVyZXIgdG8gcHJvdmlkZSBhIGJhY2tncm91bmQgaW1hZ2Ugb3IgZ3JhZGllbnQgZm9yIHRoZSBldmVudCBiYXIuIFRoaXMgb3ZlcnJpZGVzIHRoZSBgZXZlbnRDb2xvcmAgcHJvcGVydHkgaWYgcHJlc2VudC5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZGV0YWlsLnJlbmRlckRhdGEudGV4dENvbG9yIEEgQ1NTIGNvbG9yIHRvIGJlIGFwcGxpZWQgdG8gdGhlIGV2ZW50IHRleHQuIFRoaXMgaXMgbm90IHNldCBieSBkZWZhdWx0LCBidXQgY2FuIGJlIHNldCBieSB0aGUgcmVuZGVyZXIgdG8gcHJvdmlkZSBhIGN1c3RvbSBjb2xvciBmb3IgdGhlIGV2ZW50IG5hbWUgdGV4dCBpbiB0aGUgZXZlbnQgYmFyLiBUaGlzIG1heSBiZSBhIENTUyBjb2xvciBuYW1lIG9yIGEgQ1NTIGNvbG9yIHZhbHVlIGluIGFueSBvZiB0aGUgc3VwcG9ydGVkIENTUyBjb2xvciBmb3JtYXRzIHN1Y2ggYXMgYCNSUkdHQkJgLCBgcmdiKDI1NSwgMCwgMClgLCBvciBgcmdiYSgyNTUsIDAsIDAsIDAuNSlgLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBkZXRhaWwucmVuZGVyRGF0YS5ldmVudElubmVyU3R5bGUgVGhlIGV2ZW50SW5uZXJTdHlsZSBwcm9wZXJ0eSBpcyBhbiBvYmplY3QgY29udGFpbmluZyBzdHlsZSBwcm9wZXJ0aWVzIGZvciB0aGUgaW5uZXIgcGFydCBvZiB0aGUgZXZlbnQgZWxlbWVudCwgdGhlIGAuYi1jYWwtZXZlbnRgIGVsZW1lbnQuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGRldGFpbC5yZW5kZXJEYXRhLmRhdGFzZXQgQW4gb2JqZWN0IHdoaWNoIHByb2R1Y2VzIHRoZSBgZGF0YXNldGAgb2YgdGhlIHJlc3VsdGluZyBldmVudCBiYXJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGRldGFpbC5yZW5kZXJEYXRhLnNvbGlkQmFyIFRoaXMgaXMgdmFsaWQgZm9yIHZpZXdzIHdoaWNoIGNyZWF0ZSBldmVudCBiYXJzLiBUaGlzIGlzIHNldCB0byBgdHJ1ZWAgYnkgZGVmYXVsdCBmb3IgYWxsIGRheSBhbmQgaW50ZXJkYXkgZXZlbnRzIHNvIHRoYXQgdGhlc2UgYXBwZWFyIGFzIGEgc29saWQgYmxvY2sgb2YgYmFja2dyb3VuZCBjb2xvci4gQW4gZXZlbnRSZW5kZXJlciBtYXkgbXV0YXRlIHRoaXMgZmxhZyB0byBjaGFuZ2UgaW4gd2hhdCBtYW5uZXIgdGhlIGV2ZW50IGJhciBpcyBjb2xvcmVkIC0gYXMgYSBzb2xpZCBiYXIgb2YgY29sb3IsIG9yIHVzaW5nIHRoZSBmb3JlZ3JvdW5kIGNvbG9yICh0ZXh0IGFuZCBpY29ucykgc3VjaCBhcyB0aGUgTW9udGhWaWV3LCB0aGUgQ2FsZW5kYXJSb3cgKGFsbCBkYXkgZXZlbnRzIGluIGEgRGF5VmlldyksIGFuZCBPdmVyZmxvd1BvcHVwc1xuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBkZXRhaWwucmVuZGVyRGF0YS5ib2R5Q29sb3IgV2hlbiB1c2VkIGluIGEgW0RheVZpZXddKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L0RheVZpZXcpLCB0aGlzIGNvbG9yIGlzIGFwcGxpZWQgdG8gdGhlIGJvZHkgb2YgdGhlIGV2ZW50IGVsZW1lbnQuIE5vdGUgdGhhdCB0aGlzIG11c3QgYmUgbGlnaHQgZW5vdWdoIHRoYXQgdGhlIHRleHQgY29sb3IgKEZyb20gdGhlIFNBU1MgdmFyaWFibGUgYCRkYXl2aWV3LWV2ZW50LWNvbG9yYCkgaXMgdmlzaWJsZVxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gZGV0YWlsLnJlbmRlckRhdGEuc2hvd0J1bGxldCBJZiB0aGVyZSBpcyBubyBgaWNvbkNsc2AsIGFuZCB0aGUgZXZlbnQgaXMgbm90IHJlY3VycmluZywgdGhlbiBieSBkZWZhdWx0IGEgXCJidWxsZXRcIiBjaXJjdWxhciBpY29uIGlzIHNob3duIGlmIHRoZSB2aWV3J3MgW3Nob3dCdWxsZXRdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L21peGluL0NhbGVuZGFyTWl4aW4jY29uZmlnLXNob3dCdWxsZXQpIGlmIHNldC4gU2V0dGluZyB0aGlzIHByb3BlcnR5IGluIGFuIGV2ZW50IHJlbmRlcmVyIG92ZXJyaWRlcyB0aGlzIGJlaGF2aW91ci5cbiAgICAgKiBAcmV0dXJucyB7RG9tQ29uZmlnLERvbUNvbmZpZ1tdLHN0cmluZyx2b2lkfSBUaGUgY29udGVudCB0byBiZSB1c2VkIGFzIHRoZSBldmVudCBib2R5LlxuICAgICAqL1xuICAgIGV2ZW50UmVuZGVyZXIgPyA6ICgoZGV0YWlsOiB7IHZpZXc6IENhbGVuZGFyVmlldywgZXZlbnRSZWNvcmQ6IEV2ZW50TW9kZWwsIHJlc291cmNlUmVjb3JkOiBSZXNvdXJjZU1vZGVsLCByZW5kZXJEYXRhOiB7IHN0eWxlOiBvYmplY3QsIGNsczogb2JqZWN0LCBpY29uU3R5bGU6IG9iamVjdCwgaWNvbkNsczogb2JqZWN0LCBldmVudENvbG9yOiBzdHJpbmcsIGV2ZW50QmFja2dyb3VuZDogc3RyaW5nLCB0ZXh0Q29sb3I6IHN0cmluZywgZXZlbnRJbm5lclN0eWxlOiBvYmplY3QsIGRhdGFzZXQ6IG9iamVjdCwgc29saWRCYXI6IGJvb2xlYW4sIGJvZHlDb2xvcjogc3RyaW5nLCBzaG93QnVsbGV0OiBib29sZWFuIH0gfSkgPT4gRG9tQ29uZmlnfERvbUNvbmZpZ1tdfHN0cmluZ3x2b2lkKXxzdHJpbmdcbiAgICAvKipcbiAgICAgKiBBIGZ1bmN0aW9uIHdoaWNoIGNvbXBhcmVzIGV2ZW50cyB3aGljaCBzb21lIHZpZXdzIHVzZSB0byBkZWNpZGUgdXBvbiByZW5kZXJpbmcgb3JkZXIuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L0RheVJlc291cmNlVmlldyNjb25maWctZXZlbnRTb3J0ZXIpXG4gICAgICogQHBhcmFtIHtTY2hlZHVsZXIubW9kZWwuRXZlbnRNb2RlbCxFdmVudEJhcn0gbGhzIFRoZSBsZWZ0IHNpZGUgdmFsdWUgdG8gY29ucGFyZVxuICAgICAqIEBwYXJhbSB7U2NoZWR1bGVyLm1vZGVsLkV2ZW50TW9kZWwsRXZlbnRCYXJ9IHJocyBUaGUgcmlnaHQgc2lkZSB2YWx1ZSB0byBjb25wYXJlXG4gICAgICogQHJldHVybnMge251bWJlcn1cbiAgICAgKi9cbiAgICBldmVudFNvcnRlciA/IDogKGxoczogRXZlbnRNb2RlbHxFdmVudEJhciwgcmhzOiBFdmVudE1vZGVsfEV2ZW50QmFyKSA9PiBudW1iZXJcbiAgICAvKipcbiAgICAgKiBOdW1iZXIgb2YgcGl4ZWxzIHRvIHJlZHVjZSB0aGUgaGVpZ2h0IG9mIGV2ZW50cyBieSwgdG8gbGVhdmUgYSBnYXAgYmV0d2VlbiB0aGVtLlxuICAgICAqL1xuICAgIGV2ZW50U3BhY2luZyA/IDogbnVtYmVyXG4gICAgLyoqXG4gICAgICogQnkgZGVmYXVsdCwgdGhlIGVuZCBkYXRlIG9mIGFuIGFsbCBkYXkgZXZlbnQgaXMgZGlzcGxheWVkIGluIHRoZSBVSSBhc1xuICAgICAqIHRoZSBsYXN0IGNhbGVuZGFyIGRhdGUgb24gd2hpY2ggdGhlIGV2ZW50IGZhbGxzLiBGb3IgbW9zdCBlbmQgdXNlcnMsIHRoaXMgaXMgdGhlXG4gICAgICogZXhwZWN0ZWQgdmFsdWUuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L0RheVJlc291cmNlVmlldyNjb25maWctZXh0ZW5kQWxsRGF5RW5kRGF5KVxuICAgICAqL1xuICAgIGV4dGVuZEFsbERheUVuZERheSA/IDogYm9vbGVhblxuICAgIGV4dHJhRGF0YSA/IDogYW55XG4gICAgLyoqXG4gICAgICogSWYgdGhpcyBpcyBzZXQgdG8gYHRydWVgLCB0aGVuIHdoZW4gZGV0ZXJtaW5pbmcgd2hpY2ggYXNzaWduZWQgcmVzb3VyY2Ugb2YgYSBtdWx0aSBhc3NpZ25lZCBldmVudFxuICAgICAqIHRvIHVzZSB0byBjcmVhdGUgdGhlIGV2ZW50IFVJLCB0aGUgZmlyc3QgcmVzb3VyY2Ugd2hpY2ggaXMgc3RpbGwgc2VsZWN0ZWQgaW4gdGhlXG4gICAgICogW3Jlc291cmNlRmlsdGVyXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9TaWRlYmFyI3Byb3BlcnR5LXJlc291cmNlRmlsdGVyKSBpcyB1c2VkLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9EYXlSZXNvdXJjZVZpZXcjY29uZmlnLWZpbHRlckV2ZW50UmVzb3VyY2VzKVxuICAgICAqL1xuICAgIGZpbHRlckV2ZW50UmVzb3VyY2VzID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogV2hlbiBzZXQgdG8gYHRydWVgLCB0aGUgaG91cnMgaW4gdGhlIGRheSB3aWxsIGJlIHNpemVkIHNvIHRoYXQgdGhleSBmaXQgaW4gdGhlIGF2YWlsYWJsZVxuICAgICAqIGhlaWdodC5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvRGF5UmVzb3VyY2VWaWV3I2NvbmZpZy1maXRIb3VycylcbiAgICAgKi9cbiAgICBmaXRIb3VycyA/IDogYm9vbGVhbnx7XG4gICAgICAgIG1pbkhlaWdodD86IG51bWJlclxuICAgIH1cbiAgICAvKipcbiAgICAgKiBCeSBkZWZhdWx0LCByZWNvbmZpZ3VyaW5nIHRoZSBbc3RhcnREYXRlXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9EYXlWaWV3I2NvbmZpZy1zdGFydERhdGUpIG1haW50YWlucyB0aGUgY3VycmVudCBkdXJhdGlvblxuICAgICAqIG9mIHRoZSB2aWV3IGFuZCBtb3ZlcyB0aGUgW2VuZERhdGVdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L0RheVZpZXcjY29uZmlnLWVuZERhdGUpLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9EYXlSZXNvdXJjZVZpZXcjY29uZmlnLWZpeGVkRHVyYXRpb24pXG4gICAgICovXG4gICAgZml4ZWREdXJhdGlvbiA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIFdoZW4gdGhpcyB3aWRnZXQgaXMgYSBjaGlsZCBvZiBhIFtDb250YWluZXJdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ29yZS93aWRnZXQvQ29udGFpbmVyKSwgaXQgd2lsbCBieSBkZWZhdWx0IGJlIHBhcnRpY2lwYXRpbmcgaW4gYVxuICAgICAqIGZsZXhib3ggbGF5b3V0LiBUaGlzIGNvbmZpZyBhbGxvd3MgeW91IHRvIHNldCB0aGlzIHdpZGdldCdzXG4gICAgICogW2ZsZXhdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy9mbGV4KSBzdHlsZS5cbiAgICAgKiBUaGlzIG1heSBiZSBjb25maWd1cmVkIGFzIGEgc2luZ2xlIG51bWJlciBvciBhIGAmbHQ7ZmxleC1ncm93Jmd0OyAmbHQ7ZmxleC1zaHJpbmsmZ3Q7ICZsdDtmbGV4LWJhc2lzJmd0O2AgZm9ybWF0IHN0cmluZy5cbiAgICAgKiBudW1lcmljLW9ubHkgdmFsdWVzIGFyZSBpbnRlcnByZXRlZCBhcyB0aGUgYGZsZXgtZ3Jvd2AgdmFsdWUuXG4gICAgICovXG4gICAgZmxleCA/IDogbnVtYmVyfHN0cmluZ1xuICAgIC8qKlxuICAgICAqIFNldCB0byBgdHJ1ZWAgdG8gbW92ZSB0aGUgd2lkZ2V0IG91dCBvZiB0aGUgZG9jdW1lbnQgZmxvdyBhbmQgcG9zaXRpb24gaXRcbiAgICAgKiBhYnNvbHV0ZWx5IGluIGJyb3dzZXIgdmlld3BvcnQgc3BhY2UuXG4gICAgICovXG4gICAgZmxvYXRpbmcgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBDb25maWcgb2JqZWN0IG9mIGEgZm9vdGVyLiBNYXkgY29udGFpbiBhIGBkb2NrYCwgYGh0bWxgIGFuZCBhIGBjbHNgIHByb3BlcnR5LiBBIGZvb3RlciBpcyBub3QgYSB3aWRnZXQsXG4gICAgICogYnV0IHJhdGhlciBwbGFpbiBIVE1MIHRoYXQgZm9sbG93cyB0aGUgbGFzdCBlbGVtZW50IG9mIHRoZSBwYW5lbCdzIGJvZHkgYW5kIFtzdHJpcHNdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ29yZS93aWRnZXQvUGFuZWwjY29uZmlnLXN0cmlwcykuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L0RheVJlc291cmNlVmlldyNjb25maWctZm9vdGVyKVxuICAgICAqL1xuICAgIGZvb3RlciA/IDoge1xuICAgICAgICBkb2NrPzogJ3RvcCd8J3JpZ2h0J3wnYm90dG9tJ3wnbGVmdCd8J3N0YXJ0J3wnZW5kJ1xuICAgICAgICBodG1sPzogc3RyaW5nXG4gICAgICAgIGNscz86IHN0cmluZ1xuICAgIH18c3RyaW5nXG4gICAgLyoqXG4gICAgICogQSBGdW5jdGlvbiAob3IgbmFtZSBvZiBhIGZ1bmN0aW9uIGluIHRoZSBvd25lcnNoaXAgaGllcmFyY2h5KSB3aGljaCByZXR1cm5zIHRoZVxuICAgICAqIFtyZXNvdXJjZSByZWNvcmRdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvU2NoZWR1bGVyL21vZGVsL1Jlc291cmNlTW9kZWwpIHRvIHVzZSB0byBjcmVhdGUgdGhlIFVJIGZvciBhbiBldmVudC5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvRGF5UmVzb3VyY2VWaWV3I2NvbmZpZy1nZXRQcmltYXJ5UmVzb3VyY2UpXG4gICAgICogQHBhcmFtIHtTY2hlZHVsZXIubW9kZWwuRXZlbnRNb2RlbH0gZXZlbnRSZWNvcmQgVGhlIGV2ZW50IGZyb20gd2hpY2ggdG8gZXh0cmFjdCB0aGUgcHJpbWFyeSByZXNvdXJjZS5cbiAgICAgKiBAcmV0dXJucyB7U2NoZWR1bGVyLm1vZGVsLlJlc291cmNlTW9kZWx9IFRoZSByZXNvdXJjZSB0byBiZSB1c2VkIHRvIHJlbmRlciB0aGUgZXZlbnQuXG4gICAgICovXG4gICAgZ2V0UHJpbWFyeVJlc291cmNlID8gOiAoKGV2ZW50UmVjb3JkOiBFdmVudE1vZGVsKSA9PiBSZXNvdXJjZU1vZGVsKXxzdHJpbmdcbiAgICAvKipcbiAgICAgKiBBIGNvbmZpZyBbb2JqZWN0XShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1BhbmVsI3R5cGVkZWYtUGFuZWxIZWFkZXIpIGZvciB0aGUgcGFuZWwncyBoZWFkZXIgb3IgYSBzdHJpbmcgaW4gcGxhY2Ugb2YgYSBgdGl0bGVgLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9EYXlSZXNvdXJjZVZpZXcjY29uZmlnLWhlYWRlcilcbiAgICAgKi9cbiAgICBoZWFkZXIgPyA6IHN0cmluZ3xib29sZWFufFBhbmVsSGVhZGVyXG4gICAgLyoqXG4gICAgICogV2lkZ2V0J3MgaGVpZ2h0LCB1c2VkIHRvIHNldCBlbGVtZW50IGBzdHlsZS5oZWlnaHRgLiBFaXRoZXIgc3BlY2lmeSBhIHZhbGlkIGhlaWdodCBzdHJpbmcgb3IgYSBudW1iZXIsXG4gICAgICogd2hpY2ggd2lsbCBnZXQgJ3B4JyBhcHBlbmRlZC4gV2UgcmVjb21tZW5kIHVzaW5nIENTUyBhcyB0aGUgcHJpbWFyeSB3YXkgdG8gY29udHJvbCBoZWlnaHQsIGJ1dCBpbiBzb21lXG4gICAgICogY2FzZXMgdGhpcyBjb25maWcgaXMgY29udmVuaWVudC5cbiAgICAgKi9cbiAgICBoZWlnaHQgPyA6IHN0cmluZ3xudW1iZXJcbiAgICAvKipcbiAgICAgKiBDb25maWd1cmUgd2l0aCB0cnVlIHRvIG1ha2Ugd2lkZ2V0IGluaXRpYWxseSBoaWRkZW4uXG4gICAgICovXG4gICAgaGlkZGVuID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogKk9ubHkgdmFsaWQgaWYgdGhpcyBXaWRnZXQgaXMgW2Zsb2F0aW5nXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1dpZGdldCNjb25maWctZmxvYXRpbmcpLipcbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvRGF5UmVzb3VyY2VWaWV3I2NvbmZpZy1oaWRlQW5pbWF0aW9uKVxuICAgICAqL1xuICAgIGhpZGVBbmltYXRpb24gPyA6IGJvb2xlYW58b2JqZWN0XG4gICAgLyoqXG4gICAgICogQ29uZmlndXJlIHRoaXMgYXMgYHRydWVgIHRvIGhpZGUgZGF5IGNvbHVtbnMgd2hpY2ggY29udGFpbiBubyBldmVudHMuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L0RheVJlc291cmNlVmlldyNjb25maWctaGlkZUVtcHR5RGF5cylcbiAgICAgKi9cbiAgICBoaWRlRW1wdHlEYXlzID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogQ29uZmlndXJlIHRoaXMgYXMgYHRydWVgIHRvIGhpZGUgcmVzb3VyY2UgY29sdW1ucyB3aGljaCBjb250YWluIG5vIGV2ZW50cy5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvRGF5UmVzb3VyY2VWaWV3I2NvbmZpZy1oaWRlRW1wdHlSZXNvdXJjZXMpXG4gICAgICovXG4gICAgaGlkZUVtcHR5UmVzb3VyY2VzID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogQ29uZmlndXJlIGFzIGB0cnVlYCB0byBoaWRlIFtub25Xb3JraW5nRGF5c10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvbWl4aW4vQ2FsZW5kYXJNaXhpbiNjb25maWctbm9uV29ya2luZ0RheXMpXG4gICAgICovXG4gICAgaGlkZU5vbldvcmtpbmdEYXlzID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogQnkgZGVmYXVsdCwgd2hlbiBhIHJlc291cmNlIGxlYWYgY29sdW1uIGRyb3BzIHRvIGJlbG93IDEwMCBwaXhlbHMgd2lkZSwgdGhlIHJlc291cmNlIGF2YXRhclxuICAgICAqIGhpZGVzLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9EYXlSZXNvdXJjZVZpZXcjY29uZmlnLWhpZGVSZXNvdXJjZU5hbWVXaGVuTmFycm93KVxuICAgICAqL1xuICAgIGhpZGVSZXNvdXJjZU5hbWVXaGVuTmFycm93ID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogU3BlY2lmeSBgdHJ1ZWAgdG8gbWFrZSB0aGlzIGNvbnRhaW5lciBoaWRlIHdoZW4gaXQgaGFzIG5vIHZpc2libGUgY2hpbGRyZW4gKEVpdGhlciBlbXB0eVxuICAgICAqIG9yIGFsbCBjaGlsZHJlbiBoaWRkZW4pLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9EYXlSZXNvdXJjZVZpZXcjY29uZmlnLWhpZGVXaGVuRW1wdHkpXG4gICAgICovXG4gICAgaGlkZVdoZW5FbXB0eSA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgPHN0cm9uZz5pbiBwaXhlbHM8L3N0cm9uZz4gb2Ygb25lIGhvdXIgY2VsbCBpbiBhIGRheSBjb2x1bW4uXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L0RheVJlc291cmNlVmlldyNjb25maWctaG91ckhlaWdodClcbiAgICAgKi9cbiAgICBob3VySGVpZ2h0ID8gOiBudW1iZXJcbiAgICAvKipcbiAgICAgKiBBbiBhcnJheSB3aGljaCBlbmNhcHN1bGF0ZXMgYSBzZXQgb2YgW2hvdXJIZWlnaHRdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L0RheVZpZXcjY29uZmlnLWhvdXJIZWlnaHQpIGJyZWFrcG9pbnRzIHdoaWNoXG4gICAgICogZGljdGF0ZSB3aGVuIHN1YnRpY2tzIC0gaW50ZXJ2ZW5pbmcgdGltZSBpbmRpY2F0b3JzIC0gYXJlIGludHJvZHVjZWQgaW50byB0aGUgRGF5VmlldydzXG4gICAgICogdGltZSBheGlzLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9EYXlSZXNvdXJjZVZpZXcjY29uZmlnLWhvdXJIZWlnaHRCcmVha3BvaW50cylcbiAgICAgKi9cbiAgICBob3VySGVpZ2h0QnJlYWtwb2ludHMgPyA6IG51bWJlcltdXG4gICAgLyoqXG4gICAgICogQW4gaWNvbiB0byBzaG93IGJlZm9yZSB0aGUgW3RpdGxlXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1BhbmVsI2NvbmZpZy10aXRsZSkuIEVpdGhlciBwYXNzIGEgQ1NTIGNsYXNzIGFzIGEgc3RyaW5nLCBvciBwYXNzIGFcbiAgICAgKiBbRG9tQ29uZmlnXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NvcmUvaGVscGVyL0RvbUhlbHBlciN0eXBlZGVmLURvbUNvbmZpZykgb2JqZWN0IGRlc2NyaWJpbmcgYW4gZWxlbWVudCB0byByZXByZXNlbnQgdGhlIGljb24uXG4gICAgICovXG4gICAgaWNvbiA/IDogc3RyaW5nfERvbUNvbmZpZ1xuICAgIC8qKlxuICAgICAqIFdpZGdldCBpZCwgaWYgbm90IHNwZWNpZmllZCBvbmUgd2lsbCBiZSBnZW5lcmF0ZWQuIEFsc28gdXNlZCBmb3IgbG9va3VwcyB0aHJvdWdoIFdpZGdldC5nZXRCeUlkXG4gICAgICovXG4gICAgaWQgPyA6IHN0cmluZ1xuICAgIC8qKlxuICAgICAqIERldGVybWluZXMgaWYgdGhlIHdpZGdldHMgcmVhZC1vbmx5IHN0YXRlIHNob3VsZCBiZSBjb250cm9sbGVkIGJ5IGl0cyBwYXJlbnQuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L0RheVJlc291cmNlVmlldyNjb25maWctaWdub3JlUGFyZW50UmVhZE9ubHkpXG4gICAgICovXG4gICAgaWdub3JlUGFyZW50UmVhZE9ubHkgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBBIG1pbGxpc2Vjb25kIHZhbHVlIHRvIHdoaWNoIHRvIHNuYXAgcG9pbnRlciB0aW1lcyB3aGVuIGNsaWNraW5nIG9yIGRyYWdnaW5nIHdpdGhpbiBhIGRheSBjb2x1bW5cbiAgICAgKiBhbmQgd2hlbiBjYWxjdWxhdGluZyB0aGUgaG92ZXJlZCB0aW1lIGZvciB0aGUgW1NjaGVkdWxlVG9vbHRpcF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci9mZWF0dXJlL1NjaGVkdWxlVG9vbHRpcCkgdG9vbHRpcC5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvRGF5UmVzb3VyY2VWaWV3I2NvbmZpZy1pbmNyZW1lbnQpXG4gICAgICovXG4gICAgaW5jcmVtZW50ID8gOiBzdHJpbmd8bnVtYmVyXG4gICAgLyoqXG4gICAgICogQ29udmVuaWVuY2Ugc2V0dGluZyB0byBhbGlnbiBpbnB1dCBmaWVsZHMgb2YgY2hpbGQgd2lkZ2V0cy4gQnkgZGVmYXVsdCwgdGhlIEZpZWxkIGlucHV0IGVsZW1lbnQgaXNcbiAgICAgKiBwbGFjZWQgaW1tZWRpYXRlbHkgZm9sbG93aW5nIHRoZSBgbGFiZWxgLiBJZiB5b3UgcHJlZmVyIHRvIGhhdmUgYWxsIGlucHV0IGZpZWxkcyBhbGlnbmVkIHRvIHRoZVxuICAgICAqIHJpZ2h0LCBzZXQgdGhpcyBjb25maWcgdG8gYCdlbmQnYC5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvRGF5UmVzb3VyY2VWaWV3I2NvbmZpZy1pbnB1dEZpZWxkQWxpZ24pXG4gICAgICovXG4gICAgaW5wdXRGaWVsZEFsaWduID8gOiAnc3RhcnQnfCdlbmQnXG4gICAgLyoqXG4gICAgICogRWxlbWVudCAob3IgZWxlbWVudCBpZCkgdG8gaW5zZXJ0IHRoaXMgd2lkZ2V0IGJlZm9yZS4gSWYgcHJvdmlkZWQsIFthcHBlbmRUb10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9Db3JlL3dpZGdldC9XaWRnZXQjY29uZmlnLWFwcGVuZFRvKSBjb25maWcgaXMgaWdub3JlZC5cbiAgICAgKi9cbiAgICBpbnNlcnRCZWZvcmUgPyA6IEhUTUxFbGVtZW50fHN0cmluZ1xuICAgIC8qKlxuICAgICAqIEVsZW1lbnQgKG9yIGVsZW1lbnQgaWQpIHRvIGFwcGVuZCB0aGlzIHdpZGdldCBlbGVtZW50IHRvLCBhcyBhIGZpcnN0IGNoaWxkLiBJZiBwcm92aWRlZCwgW2FwcGVuZFRvXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1dpZGdldCNjb25maWctYXBwZW5kVG8pIGNvbmZpZyBpcyBpZ25vcmVkLlxuICAgICAqL1xuICAgIGluc2VydEZpcnN0ID8gOiBIVE1MRWxlbWVudHxzdHJpbmdcbiAgICAvKipcbiAgICAgKiBCeSBkZWZhdWx0LCBkcmFnLW1vdmluZyBhbiBldmVudCBhbGxvd3MgdGhlIGRyYWcgZ2VzdHVyZSB0byBtb3ZlIHRoZSBldmVudCBpbnRvIG90aGVyIGRheSBjb2x1bW5zLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9EYXlSZXNvdXJjZVZpZXcjY29uZmlnLWludGVyRGF5RHJhZylcbiAgICAgKi9cbiAgICBpbnRlckRheURyYWcgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBCeSBkZWZhdWx0LCBkcmFnLXJlc2l6aW5nIGFuIGV2ZW50IChpbmNsdWRpbmcgY3JlYXRpbmcgYSBuZXcgZXZlbnQpIGFsbG93cyB0aGUgZHJhZyBnZXN0dXJlIHRvIHNwYW4gbXVsdGlwbGUgZGF5XG4gICAgICogY29sdW1ucyB0byBtYWtlIHRoZSBldmVudCBhbiBpbnRlciBkYXkgZXZlbnQuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L0RheVJlc291cmNlVmlldyNjb25maWctaW50ZXJEYXlSZXNpemUpXG4gICAgICovXG4gICAgaW50ZXJEYXlSZXNpemUgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBBbiBvcHRpb25hbCBDU1MgY2xhc3MgdG8gYWRkIHRvIGNoaWxkIGl0ZW1zIG9mIHRoaXMgY29udGFpbmVyLlxuICAgICAqL1xuICAgIGl0ZW1DbHMgPyA6IHN0cmluZ1xuICAgIC8qKlxuICAgICAqIEFuIG9iamVjdCBjb250YWluaW5nIHR5cGVkIGNoaWxkIHdpZGdldCBjb25maWcgb2JqZWN0cyBvciBXaWRnZXRzLiBNYXkgYWxzbyBiZSBzcGVjaWZpZWRcbiAgICAgKiBhcyBhbiBhcnJheS5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvRGF5UmVzb3VyY2VWaWV3I2NvbmZpZy1pdGVtcylcbiAgICAgKi9cbiAgICBpdGVtcyA/IDogUmVjb3JkPHN0cmluZywgQ2FsZW5kYXJDb250YWluZXJJdGVtQ29uZmlnfE1lbnVJdGVtRW50cnk+fChDYWxlbmRhckNvbnRhaW5lckl0ZW1Db25maWd8TWVudUl0ZW1FbnRyeXxXaWRnZXQpW11cbiAgICAvKipcbiAgICAgKiBBbiBvYmplY3Qgd2hvc2Uga2V5cyBhcmUgdGhlIFtrZXldKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9LZXlib2FyZEV2ZW50L2tleSkgbmFtZVxuICAgICAqIGFuZCBvcHRpb25hbCBtb2RpZmllciBwcmVmaXhlczogYCdDdHJsKydgLCBgJ0FsdCsnYCwgYCdNZXRhKydgLCBhbmQgYCdTaGlmdCsnYCAoY2FzZS1pbnNlbnNpdGl2ZSkuIFRoZSB2YWx1ZXNcbiAgICAgKiBhcmUgdGhlIG5hbWUgb2YgdGhlIGluc3RhbmNlIG1ldGhvZCB0byBjYWxsIHdoZW4gdGhlIGtleXN0cm9rZSBpcyByZWNlaXZlZC5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvRGF5UmVzb3VyY2VWaWV3I2NvbmZpZy1rZXlNYXApXG4gICAgICovXG4gICAga2V5TWFwID8gOiBSZWNvcmQ8c3RyaW5nLCBLZXlNYXBDb25maWc+XG4gICAgLyoqXG4gICAgICogQ29udmVuaWVuY2Ugc2V0dGluZyB0byB1c2Ugc2FtZSBsYWJlbCBwbGFjZW1lbnQgb24gYWxsIGNoaWxkIHdpZGdldHMuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L0RheVJlc291cmNlVmlldyNjb25maWctbGFiZWxQb3NpdGlvbilcbiAgICAgKi9cbiAgICBsYWJlbFBvc2l0aW9uID8gOiAnYmVmb3JlJ3wnYWJvdmUnfCdhbGlnbi1iZWZvcmUnfCdhdXRvJ3xudWxsXG4gICAgLyoqXG4gICAgICogVGhlIHNob3J0IG5hbWUgb2YgYSBoZWxwZXIgY2xhc3Mgd2hpY2ggbWFuYWdlcyByZW5kZXJpbmcgYW5kIHN0eWxpbmcgb2YgY2hpbGQgaXRlbXMuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L0RheVJlc291cmNlVmlldyNjb25maWctbGF5b3V0KVxuICAgICAqL1xuICAgIGxheW91dCA/IDogc3RyaW5nfENhbGVuZGFyQ29udGFpbmVyTGF5b3V0Q29uZmlnXG4gICAgLyoqXG4gICAgICogVGhlIENTUyBzdHlsZSBwcm9wZXJ0aWVzIHRvIGFwcGx5IHRvIHRoZSBbY29udGVudEVsZW1lbnRdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ29yZS93aWRnZXQvV2lkZ2V0I3Byb3BlcnR5LWNvbnRlbnRFbGVtZW50KS5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvRGF5UmVzb3VyY2VWaWV3I2NvbmZpZy1sYXlvdXRTdHlsZSlcbiAgICAgKi9cbiAgICBsYXlvdXRTdHlsZSA/IDogb2JqZWN0XG4gICAgLyoqXG4gICAgICogQW4gYXJyYXkgb2YgW2NoaWxkIGl0ZW1dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ29yZS93aWRnZXQvQ29udGFpbmVyI2NvbmZpZy1pdGVtcykgKmNvbmZpZyBvYmplY3RzKiB3aGljaCBpcyB0byBiZSBjb252ZXJ0ZWQgaW50b1xuICAgICAqIGluc3RhbmNlcyBvbmx5IHdoZW4gdGhpcyBDb250YWluZXIgaXMgcmVuZGVyZWQsIHJhdGhlciB0aGFuIGVhZ2VybHkgYXQgY29uc3RydWN0IHRpbWUuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L0RheVJlc291cmNlVmlldyNjb25maWctbGF6eUl0ZW1zKVxuICAgICAqL1xuICAgIGxhenlJdGVtcyA/IDogUmVjb3JkPHN0cmluZywgQ2FsZW5kYXJDb250YWluZXJJdGVtQ29uZmlnPnxDYWxlbmRhckNvbnRhaW5lckl0ZW1Db25maWdbXXxXaWRnZXRbXVxuICAgIC8qKlxuICAgICAqIFRoZSBsaXN0ZW5lciBzZXQgZm9yIHRoaXMgb2JqZWN0LlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9EYXlSZXNvdXJjZVZpZXcjY29uZmlnLWxpc3RlbmVycylcbiAgICAgKi9cbiAgICBsaXN0ZW5lcnMgPyA6IERheVJlc291cmNlVmlld0xpc3RlbmVyc1xuICAgIC8qKlxuICAgICAqIEEgY2xhc3MgdHJhbnNsYXRpb25zIG9mIHdoaWNoIGFyZSB1c2VkIGZvciB0cmFuc2xhdGluZyB0aGlzIGVudGl0eS5cbiAgICAgKiBUaGlzIGlzIG9mdGVuIHVzZWQgd2hlbiB0cmFuc2xhdGlvbnMgb2YgYW4gaXRlbSBhcmUgZGVmaW5lZCBvbiBpdHMgY29udGFpbmVyIGNsYXNzLlxuICAgICAqIEZvciBleGFtcGxlOlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9EYXlSZXNvdXJjZVZpZXcjY29uZmlnLWxvY2FsZUNsYXNzKVxuICAgICAqL1xuICAgIGxvY2FsZUNsYXNzID8gOiB0eXBlb2YgQmFzZVxuICAgIC8qKlxuICAgICAqIFNldCB0byBgZmFsc2VgIHRvIGRpc2FibGUgbG9jYWxpemF0aW9uIG9mIHRoaXMgb2JqZWN0LlxuICAgICAqL1xuICAgIGxvY2FsaXphYmxlID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogTGlzdCBvZiBwcm9wZXJ0aWVzIHdoaWNoIHZhbHVlcyBzaG91bGQgYmUgdHJhbnNsYXRlZCBhdXRvbWF0aWNhbGx5IHVwb24gYSBsb2NhbGUgYXBwbHlpbmcuXG4gICAgICogSW4gY2FzZSB0aGVyZSBpcyBhIG5lZWQgdG8gbG9jYWxpemUgbm90IHR5cGljYWwgdmFsdWUgKG5vdCBhIFN0cmluZyB2YWx1ZSBvciBhIGZpZWxkIHdpdGggcmUtZGVmaW5lZCBzZXR0ZXIvZ2V0dGVyKSxcbiAgICAgKiB5b3UgY291bGQgdXNlICdsb2NhbGVLZXknIG1ldGEgY29uZmlndXJhdGlvbi5cbiAgICAgKiBFeGFtcGxlOlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9EYXlSZXNvdXJjZVZpZXcjY29uZmlnLWxvY2FsaXphYmxlUHJvcGVydGllcylcbiAgICAgKi9cbiAgICBsb2NhbGl6YWJsZVByb3BlcnRpZXMgPyA6IHN0cmluZ1tdXG4gICAgLyoqXG4gICAgICogV2lkZ2V0J3MgbWFyZ2luLiBUaGlzIG1heSBiZSBjb25maWd1cmVkIGFzIGEgc2luZ2xlIG51bWJlciBvciBhIGBUUkJMYCBmb3JtYXQgc3RyaW5nLlxuICAgICAqIG51bWVyaWMtb25seSB2YWx1ZXMgYXJlIGludGVycHJldGVkIGFzIHBpeGVscy5cbiAgICAgKi9cbiAgICBtYXJnaW4gPyA6IG51bWJlcnxzdHJpbmdcbiAgICAvKipcbiAgICAgKiBUaGlzIGNvbmZpZyBvYmplY3QgY29udGFpbnMgdGhlIGRlZmF1bHRzIGZvciB0aGUgW01hc2tdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ29yZS93aWRnZXQvTWFzaykgY3JlYXRlZCBmb3IgdGhlXG4gICAgICogW21hc2tlZF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9Db3JlL3dpZGdldC9XaWRnZXQjY29uZmlnLW1hc2tlZCkgY29uZmlnLiBBbnkgcHJvcGVydGllcyBzcGVjaWZpZWQgaW4gdGhlIGBtYXNrZWRgIGNvbmZpZyB3aWxsIG92ZXJyaWRlIHRoZXNlXG4gICAgICogdmFsdWVzLlxuICAgICAqL1xuICAgIG1hc2tEZWZhdWx0cyA/IDogTWFza0NvbmZpZ1xuICAgIC8qKlxuICAgICAqIFNldCB0byBgdHJ1ZWAgdG8gYXBwbHkgdGhlIGRlZmF1bHQgbWFzayB0byB0aGUgd2lkZ2V0LiBBbHRlcm5hdGl2ZWx5LCB0aGlzIGNhbiBiZSB0aGUgbWFzayBtZXNzYWdlIG9yIGFcbiAgICAgKiBbTWFza10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9Db3JlL3dpZGdldC9NYXNrKSBjb25maWcgb2JqZWN0LlxuICAgICAqL1xuICAgIG1hc2tlZCA/IDogYm9vbGVhbnxzdHJpbmd8TWFza0NvbmZpZ1xuICAgIC8qKlxuICAgICAqIFRoZSBtYXhpbXVtIGhlaWdodCB0aGUgYWxsIGRheSBldmVudCByb3cgaXMgYWxsb3dlZCB0byBncm93IHdpdGhpbiB0aGlzIHZpZXdcbiAgICAgKiB3aGVuIGl0IGlzIGV4cGFuZGVkIHRvIHNob3cgYWxsIGl0cyBcImFsbCBkYXlcIiBldmVudHMuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L0RheVJlc291cmNlVmlldyNjb25maWctbWF4QWxsRGF5SGVpZ2h0KVxuICAgICAqL1xuICAgIG1heEFsbERheUhlaWdodCA/IDogbnVtYmVyfHN0cmluZ1xuICAgIC8qKlxuICAgICAqIFRoZSBtYXhpbXVtIGRhdGUgdG8gd2hpY2ggdGhlIGBlbmREYXRlYCBvZiB0aGlzIHZpZXcgbWF5IGJlIG5hdmlnYXRlZC5cbiAgICAgKi9cbiAgICBtYXhEYXRlID8gOiBEYXRlfHN0cmluZ1xuICAgIC8qKlxuICAgICAqIFRoZSBlbGVtZW50J3MgbWF4SGVpZ2h0LiBDYW4gYmUgZWl0aGVyIGEgU3RyaW5nIG9yIGEgTnVtYmVyICh3aGljaCB3aWxsIGhhdmUgJ3B4JyBhcHBlbmRlZCkuIE5vdGUgdGhhdFxuICAgICAqIGxpa2UgW2hlaWdodF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9Db3JlL3dpZGdldC9XaWRnZXQjY29uZmlnLWhlaWdodCksICpyZWFkaW5nKiB0aGUgdmFsdWUgd2lsbCByZXR1cm4gdGhlIG51bWVyaWMgdmFsdWUgaW4gcGl4ZWxzLlxuICAgICAqL1xuICAgIG1heEhlaWdodCA/IDogc3RyaW5nfG51bWJlclxuICAgIC8qKlxuICAgICAqICpPbmx5IHZhbGlkIGlmIHRoaXMgV2lkZ2V0IGlzIFtmbG9hdGluZ10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9Db3JlL3dpZGdldC9XaWRnZXQjY29uZmlnLWZsb2F0aW5nKS4qXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L0RheVJlc291cmNlVmlldyNjb25maWctbWF4aW1pemVPbk1vYmlsZSlcbiAgICAgKi9cbiAgICBtYXhpbWl6ZU9uTW9iaWxlID8gOiBudW1iZXJ8c3RyaW5nXG4gICAgLyoqXG4gICAgICogVGhlIGVsZW1lbnRzIG1heFdpZHRoLiBDYW4gYmUgZWl0aGVyIGEgU3RyaW5nIG9yIGEgTnVtYmVyICh3aGljaCB3aWxsIGhhdmUgJ3B4JyBhcHBlbmRlZCkuIE5vdGUgdGhhdFxuICAgICAqIGxpa2UgW3dpZHRoXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1dpZGdldCNjb25maWctd2lkdGgpLCAqcmVhZGluZyogdGhlIHZhbHVlIHdpbGwgcmV0dXJuIHRoZSBudW1lcmljIHZhbHVlIGluIHBpeGVscy5cbiAgICAgKi9cbiAgICBtYXhXaWR0aCA/IDogc3RyaW5nfG51bWJlclxuICAgIC8qKlxuICAgICAqIFRoZSBtaW5pbXVtIGRhdGUgdG8gd2hpY2ggdGhlIGBzdGFydERhdGVgIG9mIHRoaXMgdmlldyBtYXkgYmUgbmF2aWdhdGVkLlxuICAgICAqL1xuICAgIG1pbkRhdGUgPyA6IERhdGV8c3RyaW5nXG4gICAgLyoqXG4gICAgICogVGhlIG1pbmltdW0gd2lkdGggb2YgYSBkYXkgY29sdW1uLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9EYXlSZXNvdXJjZVZpZXcjY29uZmlnLW1pbkRheVdpZHRoKVxuICAgICAqL1xuICAgIG1pbkRheVdpZHRoID8gOiBudW1iZXJ8c3RyaW5nXG4gICAgLyoqXG4gICAgICogVGhlIG1pbmltdW0gaGVpZ2h0IHRvIHdoaWNoIGV2ZW50IGJsb2NrcyBpbiBhIGRheSBjZWxsIG1heSBzaHJpbmsuIElmIGFuIGV2ZW50IGhhcyB2ZXJ5XG4gICAgICogc2hvcnQgZHVyYXRpb24sIHdoYXRldmVyIHRoZSBbaG91ckhlaWdodF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvRGF5VmlldyNjb25maWctaG91ckhlaWdodCksIGFuZCByZWdhcmRsZXNzIG9mXG4gICAgICogW3RpbWVsaW5lIHpvb21pbmddKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L0RheVZpZXcjZnVuY3Rpb24tem9vbVRvKSwgdGhlIGV2ZW50IGJsb2NrIHdpbGwgbmV2ZXIgZHJvcCBiZWxvdyB0aGlzIGhlaWdodC5cbiAgICAgKi9cbiAgICBtaW5FdmVudEhlaWdodCA/IDogbnVtYmVyfHN0cmluZ1xuICAgIC8qKlxuICAgICAqIFRoZSBlbGVtZW50J3MgbWluSGVpZ2h0LiBDYW4gYmUgZWl0aGVyIGEgU3RyaW5nIG9yIGEgTnVtYmVyICh3aGljaCB3aWxsIGhhdmUgJ3B4JyBhcHBlbmRlZCkuIE5vdGUgdGhhdFxuICAgICAqIGxpa2UgW2hlaWdodF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9Db3JlL3dpZGdldC9XaWRnZXQjY29uZmlnLWhlaWdodCksICpyZWFkaW5nKiB0aGUgdmFsdWUgd2lsbCByZXR1cm4gdGhlIG51bWVyaWMgdmFsdWUgaW4gcGl4ZWxzLlxuICAgICAqL1xuICAgIG1pbkhlaWdodCA/IDogc3RyaW5nfG51bWJlclxuICAgIC8qKlxuICAgICAqIFRoZSBtaW5pbXVtIGhlaWdodCA8c3Ryb25nPmluIHBpeGVsczwvc3Ryb25nPiB0byBhbGxvdyBhIHpvb20gcmVxdWVzdCB0byB6b29tIG91dCB0by5cbiAgICAgKi9cbiAgICBtaW5Ib3VySGVpZ2h0ID8gOiBudW1iZXJcbiAgICAvKipcbiAgICAgKiBUaGUgbWluaW11bSB3aWR0aCBvZiBhIHJlc291cmNlIGNvbHVtbi4gVGhpcyBtdXN0IGJlIGEgbm9uLXplcm8gdmFsdWUgdG8gZW5zdXJlIHRoYXQgc3BhY2VcbiAgICAgKiBpcyBhbGxvY2F0ZWQgZXZlbiB3aGVuIHRoZXJlIGFyZSBtYW55IHJlc291cmNlcyBhbmQgYSBuYXJyb3cgdmlld3BvcnQuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L0RheVJlc291cmNlVmlldyNjb25maWctbWluUmVzb3VyY2VXaWR0aClcbiAgICAgKi9cbiAgICBtaW5SZXNvdXJjZVdpZHRoID8gOiBudW1iZXJ8c3RyaW5nXG4gICAgLyoqXG4gICAgICogVGhlIGVsZW1lbnRzIG1pbldpZHRoLiBDYW4gYmUgZWl0aGVyIGEgU3RyaW5nIG9yIGEgTnVtYmVyICh3aGljaCB3aWxsIGhhdmUgJ3B4JyBhcHBlbmRlZCkuIE5vdGUgdGhhdFxuICAgICAqIGxpa2UgW3dpZHRoXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1dpZGdldCNjb25maWctd2lkdGgpLCAqcmVhZGluZyogdGhlIHZhbHVlIHdpbGwgcmV0dXJuIHRoZSBudW1lcmljIHZhbHVlIGluIHBpeGVscy5cbiAgICAgKi9cbiAgICBtaW5XaWR0aCA/IDogc3RyaW5nfG51bWJlclxuICAgIC8qKlxuICAgICAqIFdoZW4gdGhpcyBpcyBjb25maWd1cmVkIGFzIGB0cnVlYCBhIFtSZXNpemVPYnNlcnZlcl0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1Jlc2l6ZU9ic2VydmVyKVxuICAgICAqIGlzIHVzZWQgdG8gbW9uaXRvciB0aGlzIGVsZW1lbnQgZm9yIHNpemUgY2hhbmdlcyBjYXVzZWQgYnkgZWl0aGVyIHN0eWxlIG1hbmlwdWxhdGlvbiwgb3IgYnkgQ1NTXG4gICAgICogbGF5b3V0LlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9EYXlSZXNvdXJjZVZpZXcjY29uZmlnLW1vbml0b3JSZXNpemUpXG4gICAgICovXG4gICAgbW9uaXRvclJlc2l6ZSA/IDogYm9vbGVhbnx7XG4gICAgICAgIGltbWVkaWF0ZT86IGJvb2xlYW5cbiAgICB9XG4gICAgLyoqXG4gICAgICogQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGVmYXVsdCBjb25maWcgb2JqZWN0cyB3aGljaCBtYXkgYmUgcmVmZXJlbmNlZCBieSBuYW1lIGluIHRoZSBbaXRlbXNdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ29yZS93aWRnZXQvQ29udGFpbmVyI2NvbmZpZy1pdGVtcylcbiAgICAgKiBjb25maWcuIEZvciBleGFtcGxlLCBhIHNwZWNpYWxpemVkIFtNZW51XShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L01lbnUpIHN1YmNsYXNzIG1heSBoYXZlIGEgYG5hbWVkSXRlbXNgIGRlZmF1bHRcbiAgICAgKiB2YWx1ZSBkZWZpbmVkIGxpa2UgdGhpczpcbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvRGF5UmVzb3VyY2VWaWV3I2NvbmZpZy1uYW1lZEl0ZW1zKVxuICAgICAqL1xuICAgIG5hbWVkSXRlbXMgPyA6IFJlY29yZDxzdHJpbmcsIENhbGVuZGFyQ29udGFpbmVySXRlbUNvbmZpZz5cbiAgICAvKipcbiAgICAgKiBUZXh0IG9yIEhUTUwsIG9yIGEgW0RvbUNvbmZpZ10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9Db3JlL2hlbHBlci9Eb21IZWxwZXIjdHlwZWRlZi1Eb21Db25maWcpIGJsb2NrIHRvIGRpc3BsYXkgd2hlbiBhbGwgZGF0ZXMgaW4gdGhlIHJhbmdlIGhhdmUgYmVlbiBmaWx0ZXJlZCBvdXQuXG4gICAgICovXG4gICAgbm9NYXRjaGluZ0RhdGVzID8gOiBzdHJpbmd8RG9tQ29uZmlnXG4gICAgLyoqXG4gICAgICogTm9uLXdvcmtpbmcgZGF5cyBhcyBhbiBvYmplY3Qgd2hlcmUga2V5cyBhcmUgZGF5IGluZGljZXMsIDAtNiAoU3VuZGF5LVNhdHVyZGF5KSwgYW5kIHRoZSB2YWx1ZSBpcyBgdHJ1ZWAuXG4gICAgICogRGVmYXVsdHMgdG8gW25vbldvcmtpbmdEYXlzXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NvcmUvaGVscGVyL0RhdGVIZWxwZXIjcHJvcGVydHktbm9uV29ya2luZ0RheXMtc3RhdGljKS5cbiAgICAgKi9cbiAgICBub25Xb3JraW5nRGF5cyA/IDogUmVjb3JkPG51bWJlciwgYm9vbGVhbj5cbiAgICAvKipcbiAgICAgKiBBIGNvbmZpZyBvYmplY3QgdXNlZCB0byBjcmVhdGUgdGhlIFtPdmVyZmxvd1BvcHVwXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9PdmVyZmxvd1BvcHVwKSB0aGF0IHRoZVxuICAgICAqIFthbGxEYXlFdmVudHNdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L0RheVZpZXcjcHJvcGVydHktYWxsRGF5RXZlbnRzKSBtYXkgc2hvdyB3aGVuIGV2ZW50cyBmb3Igb25lIGRheSBvdmVyZmxvdyB0aGUgYXZhaWxhYmxlIHNwYWNlLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9EYXlSZXNvdXJjZVZpZXcjY29uZmlnLW92ZXJmbG93UG9wdXApXG4gICAgICovXG4gICAgb3ZlcmZsb3dQb3B1cCA/IDogT3ZlcmZsb3dQb3B1cENvbmZpZ1xuICAgIC8qKlxuICAgICAqIFRoZSBvd25pbmcgV2lkZ2V0IG9mIHRoaXMgV2lkZ2V0LiBJZiB0aGlzIFdpZGdldCBpcyBkaXJlY3RseSBjb250YWluZWQgKHRoYXQgaXMsIGl0IGlzIG9uZSBvZiB0aGVcbiAgICAgKiBbaXRlbXNdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ29yZS93aWRnZXQvQ29udGFpbmVyI3Byb3BlcnR5LWl0ZW1zKSBvZiBhIENvbnRhaW5lciksIHRoaXMgY29uZmlnIHdpbGwgYmUgaWdub3JlZC4gSW4gdGhpcyBjYXNlXG4gICAgICogdGhlIG93bmVyIGlzIDxzdHJvbmc+YWx3YXlzPC9zdHJvbmc+IHRoZSBlbmNhcHN1bGF0aW5nIENvbnRhaW5lci5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvRGF5UmVzb3VyY2VWaWV3I2NvbmZpZy1vd25lcilcbiAgICAgKi9cbiAgICBvd25lciA/IDogV2lkZ2V0fGFueVxuICAgIC8qKlxuICAgICAqIFRoZSBjbGFzcyBuYW1lIHRvIGFkZCB0byBldmVudHMgd2hpY2ggaGF2ZSBhbiBlbmQgZGF0ZSBpbiB0aGUgcGFzdC4gRGVmYXVsdHMgdG8gYCdiLXBhc3QtZXZlbnQnYC5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvRGF5UmVzb3VyY2VWaWV3I2NvbmZpZy1wYXN0RXZlbnRDbHMpXG4gICAgICovXG4gICAgcGFzdEV2ZW50Q2xzID8gOiBzdHJpbmdcbiAgICAvKipcbiAgICAgKiBTZXQgdG8gYHRydWVgIHdoZW4gYSB3aWRnZXQgaXMgcmVuZGVyZWQgaW50byBhbm90aGVyIHdpZGdldCdzIFtjb250ZW50RWxlbWVudF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9Db3JlL3dpZGdldC9XaWRnZXQjcHJvcGVydHktY29udGVudEVsZW1lbnQpLCBidXQgbXVzdFxuICAgICAqIG5vdCBwYXJ0aWNpcGF0ZSBpbiB0aGUgc3RhbmRhcmQgbGF5b3V0IG9mIHRoYXQgd2lkZ2V0LCBhbmQgbXVzdCBiZSBwb3NpdGlvbmVkIHJlbGF0aXZlbHkgdG8gdGhhdFxuICAgICAqIHdpZGdldCdzIFtjb250ZW50RWxlbWVudF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9Db3JlL3dpZGdldC9XaWRnZXQjcHJvcGVydHktY29udGVudEVsZW1lbnQpLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9EYXlSZXNvdXJjZVZpZXcjY29uZmlnLXBvc2l0aW9uZWQpXG4gICAgICovXG4gICAgcG9zaXRpb25lZCA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIFByZXZlbnQgdG9vbHRpcCBmcm9tIGJlaW5nIGRpc3BsYXllZCBvbiB0b3VjaCBkZXZpY2VzLiBVc2VmdWwgZm9yIGV4YW1wbGUgZm9yIGJ1dHRvbnMgdGhhdCBkaXNwbGF5IGFcbiAgICAgKiBtZW51IG9uIGNsaWNrIGV0Yywgc2luY2UgdGhlIHRvb2x0aXAgd291bGQgYmUgZGlzcGxheWVkIGF0IHRoZSBzYW1lIHRpbWUuXG4gICAgICovXG4gICAgcHJldmVudFRvb2x0aXBPblRvdWNoID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogVGhlIHRpbWUgcmFuZ2UgYXJvdW5kIHRoZSBbZGF0ZV0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvbWl4aW4vRGF0ZVJhbmdlT3duZXIjY29uZmlnLWRhdGUpIHRvIGRpc3BsYXkgZXZlbnRzIGZvci5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvRGF5UmVzb3VyY2VWaWV3I2NvbmZpZy1yYW5nZSlcbiAgICAgKi9cbiAgICByYW5nZSA/IDogc3RyaW5nfER1cmF0aW9uQ29uZmlnXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGlzIHdpZGdldCBpcyByZWFkLW9ubHkuICBUaGlzIGlzIG9ubHkgdmFsaWQgaWYgdGhlIHdpZGdldCBpcyBhbiBpbnB1dFxuICAgICAqIGZpZWxkLCA8c3Ryb25nPm9yIGNvbnRhaW5zIGlucHV0IGZpZWxkcyBhdCBhbnkgZGVwdGg8L3N0cm9uZz4uXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L0RheVJlc291cmNlVmlldyNjb25maWctcmVhZE9ubHkpXG4gICAgICovXG4gICAgcmVhZE9ubHkgPyA6IGJvb2xlYW5cbiAgICByZWxheVN0b3JlRXZlbnRzID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogRWl0aGVyIGEgZGVmYXVsdCBgcmVuZGl0aW9uYCB0byBhcHBseSB0byBhbGwgY2hpbGQgd2lkZ2V0cywgb3IgYSBtYXAgb2YgcmVuZGl0aW9ucyBrZXllZCBieSBjaGlsZCB3aWRnZXRcbiAgICAgKiBgdHlwZWAuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L0RheVJlc291cmNlVmlldyNjb25maWctcmVuZGl0aW9uKVxuICAgICAqL1xuICAgIHJlbmRpdGlvbiA/IDogc3RyaW5nfFJlY29yZDxzdHJpbmcsIHN0cmluZz58bnVsbFxuICAgIC8qKlxuICAgICAqIEEgY2FsbGJhY2sgZnVuY3Rpb24gd2hpY2ggYW4gYXBwbGljYXRpb24gbWF5IHByb3ZpZGUgdG8gZmlsdGVyIG91dCByZXNvdXJjZSBjb2x1bW5zIGZvclxuICAgICAqIHBhcnRpY3VsYXIgZGF0ZXMuXG4gICAgICogQHBhcmFtIHtEYXlDZWxsfSBjb250ZXh0IEluZm9ybWF0aW9uIGFib3V0IHRoZSBkYXkgY29sdW1uIHRvIGJlIGNyZWF0ZWQuXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybiBgZmFsc2VgIHRvIG5vdCBkaXNwbGF5IGEgY29sdW1uIGZvciB0aGUgcGFzc2VkIHJlc291cmNlIGF0IHRoZSBwYXNzZWQgZGF0ZS5cbiAgICAgKi9cbiAgICByZXNvdXJjZURhdGVGaWx0ZXIgPyA6ICgoY29udGV4dDogRGF5Q2VsbCkgPT4gYm9vbGVhbil8c3RyaW5nXG4gICAgLyoqXG4gICAgICogUGF0aCB0byBsb2FkIHJlc291cmNlIGltYWdlcyBmcm9tLiBVc2VkIGJ5IHRoZSBbc2hvd1Jlc291cmNlQXZhdGFyc10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvbWl4aW4vQ2FsZW5kYXJNaXhpbiNjb25maWctc2hvd1Jlc291cmNlQXZhdGFycykgY29uZmlnXG4gICAgICogdG8gY3JlYXRlIFVSTHMgdXNpbmcgdGhlIHJlc291cmNlJ3NcbiAgICAgKiBbaW1hZ2VdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvU2NoZWR1bGVyL21vZGVsL1Jlc291cmNlTW9kZWwjZmllbGQtaW1hZ2UpIG9yXG4gICAgICogW2ltYWdlVXJsXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL1NjaGVkdWxlci9tb2RlbC9SZXNvdXJjZU1vZGVsI2ZpZWxkLWltYWdlVXJsKSBmaWVsZHM6XG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L0RheVJlc291cmNlVmlldyNjb25maWctcmVzb3VyY2VJbWFnZVBhdGgpXG4gICAgICovXG4gICAgcmVzb3VyY2VJbWFnZVBhdGggPyA6IHN0cmluZ1xuICAgIC8qKlxuICAgICAqIFNwZWNpZmllcyB0aGUgdmFyaW91cyByZXNwb25zaXZlIHN0YXRlIG9iamVjdHMga2V5ZWQgYnkgdGhlaXIgbmFtZS4gRWFjaCBrZXkgKGV4Y2VwdCBgJyonYCwgc2VlIGJlbG93KSBpblxuICAgICAqIHRoaXMgb2JqZWN0IGlzIGEgc3RhdGUgbmFtZSAoc2VlIFtyZXNwb25zaXZlU3RhdGVdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ29yZS93aWRnZXQvbWl4aW4vUmVzcG9uc2l2ZSNjb25maWctcmVzcG9uc2l2ZVN0YXRlKSkgYW5kIGl0cyBjb3JyZXNwb25kaW5nIHZhbHVlIGlzIHRoZVxuICAgICAqIGFzc29jaWF0ZWQgW1Jlc3BvbnNpdmVTdGF0ZV0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9Db3JlL3dpZGdldC9taXhpbi9SZXNwb25zaXZlI3R5cGVkZWYtUmVzcG9uc2l2ZVN0YXRlKSBvYmplY3QuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L0RheVJlc291cmNlVmlldyNjb25maWctcmVzcG9uc2l2ZSlcbiAgICAgKi9cbiAgICByZXNwb25zaXZlID8gOiBvYmplY3RcbiAgICAvKipcbiAgICAgKiBTZXQgdG8gYHRydWVgIHRvIG1hcmsgdGhpcyBpbnN0YW5jZSBhcyB0aGUgZGVmYXVsdCBbcmVzcG9uc2l2ZVRhcmdldF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9Db3JlL3dpZGdldC9taXhpbi9SZXNwb25zaXZlI2NvbmZpZy1yZXNwb25zaXZlVGFyZ2V0KSBmb3IgZGVzY2VuZGFudHMgdGhhdCBkb1xuICAgICAqIG5vdCBzcGVjaWZ5IGFuIGV4cGxpY2l0IFtyZXNwb25zaXZlVGFyZ2V0XShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L21peGluL1Jlc3BvbnNpdmUjY29uZmlnLXJlc3BvbnNpdmVUYXJnZXQpIG9mIHRoZWlyIG93bi5cbiAgICAgKi9cbiAgICByZXNwb25zaXZlUm9vdCA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIFRoZSBuYW1lIG9mIHRoZSBhY3RpdmUgc3RhdGUgb2YgdGhlIFtyZXNwb25zaXZlXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L21peGluL1Jlc3BvbnNpdmUjY29uZmlnLXJlc3BvbnNpdmUpIGNvbmZpZy4gVGhpcyBpcyBhc3NpZ25lZCBpbnRlcm5hbGx5XG4gICAgICogYW5kIHNob3VsZCBub3QgYmUgYXNzaWduZWQgZGlyZWN0bHkuXG4gICAgICovXG4gICAgcmVzcG9uc2l2ZVN0YXRlID8gOiBzdHJpbmdcbiAgICAvKipcbiAgICAgKiBUaGUgd2lkZ2V0IHdob3NlIHNpemUgYW5kIG90aGVyIHByb3BlcnRpZXMgZHJpdmUgdGhpcyBvYmplY3QncyByZXNwb25zaXZlIGJlaGF2aW9yLiBJZiB0aGlzIGNvbmZpZyBpcyBub3RcbiAgICAgKiBzcGVjaWZpZWQsIHRoZSBjbG9zZXN0IGFuY2VzdG9yIHRoYXQgc3BlY2lmaWVkIFtyZXNwb25zaXZlUm9vdD10cnVlXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L21peGluL1Jlc3BvbnNpdmUjY29uZmlnLXJlc3BvbnNpdmVSb290KSB3aWxsIGJlXG4gICAgICogdXNlZC4gSWYgdGhlcmUgaXMgbm8gc3VjaCBhbmNlc3RvciwgdGhlbiB0aGUgaW5zdGFuY2UgdXNpbmcgdGhpcyBtaXhpbiBpcyB1c2VkLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9EYXlSZXNvdXJjZVZpZXcjY29uZmlnLXJlc3BvbnNpdmVUYXJnZXQpXG4gICAgICovXG4gICAgcmVzcG9uc2l2ZVRhcmdldCA/IDogc3RyaW5nfFdpZGdldFxuICAgIC8qKlxuICAgICAqIENvbmZpZ3VyZSBhcyBgdHJ1ZWAgdG8gaGF2ZSB0aGUgY29tcG9uZW50IGRpc3BsYXkgYSB0cmFuc2x1Y2VudCByaXBwbGUgd2hlbiBpdHNcbiAgICAgKiBbZm9jdXNFbGVtZW50XShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1dpZGdldCNwcm9wZXJ0eS1mb2N1c0VsZW1lbnQpLCBvciBbZWxlbWVudF0oI0NvcmUvd2lkZ2V0L1dpZGdldCNwcm9wZXJ0eS1lbGVtZW50KSBpcyB0YXBwZWQgPGVtPmlmIHRoZVxuICAgICAqIGN1cnJlbnQgdGhlbWUgc3VwcG9ydHMgcmlwcGxlczwvZW0+LiBPdXQgb2YgdGhlIGJveCwgb25seSB0aGUgTWF0ZXJpYWwgdGhlbWUgc3VwcG9ydHMgcmlwcGxlcy5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvRGF5UmVzb3VyY2VWaWV3I2NvbmZpZy1yaXBwbGUpXG4gICAgICovXG4gICAgcmlwcGxlID8gOiBib29sZWFufHtcbiAgICAgICAgZGVsZWdhdGU/OiBzdHJpbmdcbiAgICAgICAgY29sb3I/OiBzdHJpbmdcbiAgICAgICAgcmFkaXVzPzogbnVtYmVyXG4gICAgICAgIGNsaXA/OiBzdHJpbmdcbiAgICB9XG4gICAgLyoqXG4gICAgICogSWYgeW91IGFyZSByZW5kZXJpbmcgdGhpcyB3aWRnZXQgdG8gYSBzaGFkb3cgcm9vdCBpbnNpZGUgYSB3ZWIgY29tcG9uZW50LCBzZXQgdGhpcyBjb25maWcgdG8gdGhlIHNoYWRvd1Jvb3QuIElmIG5vdCBpbnNpZGUgYSB3ZWIgY29tcG9uZW50LCBzZXQgaXQgdG8gYGRvY3VtZW50LmJvZHlgXG4gICAgICovXG4gICAgcm9vdEVsZW1lbnQgPyA6IFNoYWRvd1Jvb3R8SFRNTEVsZW1lbnRcbiAgICAvKipcbiAgICAgKiBUaGlzIG1heSBiZSBjb25maWd1cmVkIGFzIGB0cnVlYCB0byBtYWtlIHRoZSB3aWRnZXQncyBlbGVtZW50IHVzZSB0aGUgYGRpcmVjdGlvbjpydGxgIHN0eWxlLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9EYXlSZXNvdXJjZVZpZXcjY29uZmlnLXJ0bClcbiAgICAgKi9cbiAgICBydGwgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBTcGVjaWZpZXMgd2hldGhlciAoYW5kIG9wdGlvbmFsbHkgaW4gd2hpY2ggYXhlcykgYSBXaWRnZXQgbWF5IHNjcm9sbC4gYHRydWVgIG1lYW5zIHRoaXMgd2lkZ2V0IG1heSBzY3JvbGxcbiAgICAgKiBpbiBib3RoIGF4ZXMuIE1heSBiZSBhbiBvYmplY3QgY29udGFpbmluZyBib29sZWFuIGBvdmVyZmxvd1hgIGFuZCBgb3ZlcmZsb3dZYCBwcm9wZXJ0aWVzIHdoaWNoIGFyZVxuICAgICAqIGFwcGxpZWQgdG8gQ1NTIHN0eWxlIHByb3BlcnRpZXMgYG92ZXJmbG93WGAgYW5kIGBvdmVyZmxvd1lgLiBJZiB0aGV5IGFyZSBib29sZWFuLCB0aGV5IGFyZSB0cmFuc2xhdGVkIHRvXG4gICAgICogQ1NTIG92ZXJmbG93IHByb3BlcnRpZXMgdGh1czpcbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvRGF5UmVzb3VyY2VWaWV3I2NvbmZpZy1zY3JvbGxhYmxlKVxuICAgICAqL1xuICAgIHNjcm9sbGFibGUgPyA6IGJvb2xlYW58U2Nyb2xsZXJDb25maWd8U2Nyb2xsZXJcbiAgICAvKipcbiAgICAgKiBEZWZpbmVzIHdoYXQgdG8gZG8gaWYgZG9jdW1lbnQgaXMgc2Nyb2xsZWQgd2hpbGUgV2lkZ2V0IGlzIHZpc2libGUgKG9ubHkgcmVsZXZhbnQgd2hlbiBmbG9hdGluZyBpcyBzZXQgdG8gYHRydWVgKS5cbiAgICAgKiBWYWxpZCB2YWx1ZXM6IMK0bnVsbMK0OiBkbyBub3RoaW5nLCDCtGhpZGXCtDogaGlkZSB0aGUgd2lkZ2V0IG9yIMK0cmVhbGlnbsK0OiByZWFsaWduIHRvIHRoZSB0YXJnZXQgaWYgcG9zc2libGUuXG4gICAgICovXG4gICAgc2Nyb2xsQWN0aW9uID8gOiAnaGlkZSd8J3JlYWxpZ24nfG51bGxcbiAgICAvKipcbiAgICAgKiBBIGJ1dHRvbiBjb25maWd1cmF0aW9uIG9iamVjdCB0byB1c2UgZm9yIHRoZSBhdXRvbWF0aWNhbGx5IGNyZWF0ZWQgbW9kZSBzZWxlY3RvciBidXR0b24gZm9yIHRoaXMgbW9kZS5cbiAgICAgKi9cbiAgICBzZWxlY3RvckJ1dHRvbiA/IDogQnV0dG9uQ29uZmlnXG4gICAgLyoqXG4gICAgICogQSBtZW51IGl0ZW0gY29uZmlndXJhdGlvbiBvYmplY3QgdG8gdXNlIGZvciB0aGUgYXV0b21hdGljYWxseSBjcmVhdGVkIG1vZGUgc2VsZWN0b3IgbWVudSBpdGVtIGZvciB0aGlzIG1vZGUuXG4gICAgICovXG4gICAgc2VsZWN0b3JNZW51SXRlbSA/IDogTWVudUl0ZW1Db25maWdcbiAgICAvKipcbiAgICAgKiBUaGUgdGltZSByYW5nZSB0byBtb3ZlIGJ5IHdoZW4gW25leHRdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L21peGluL0RhdGVSYW5nZU93bmVyI2Z1bmN0aW9uLW5leHQpIG9yIFtwcmV2aW91c10oI0NhbGVuZGFyL3dpZGdldC9taXhpbi9EYXRlUmFuZ2VPd25lciNmdW5jdGlvbi1wcmV2aW91cykgaXMgY2FsbGVkLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9EYXlSZXNvdXJjZVZpZXcjY29uZmlnLXNoaWZ0SW5jcmVtZW50KVxuICAgICAqL1xuICAgIHNoaWZ0SW5jcmVtZW50ID8gOiBzdHJpbmd8RHVyYXRpb25Db25maWdcbiAgICAvKipcbiAgICAgKiBBIFtEYXRlSGVscGVyXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NvcmUvaGVscGVyL0RhdGVIZWxwZXIpIGZvcm1hdCBzdHJpbmcvZnVuY3Rpb24gdG8gdXNlIHRvIGNyZWF0ZSBkYXRlIG91dHB1dCBmb3JcbiAgICAgKiBhYmJyZXZpYXRlZCB2aWV3IGRlc2NyaXB0aW9ucy5cbiAgICAgKiBAcGFyYW0ge0RhdGV9IGRhdGUgVGhlIGRhdGUgdG8gZm9ybWF0LlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBmb3JtYXR0ZWQgZGF0ZS5cbiAgICAgKi9cbiAgICBzaG9ydERhdGVGb3JtYXQgPyA6IHN0cmluZ3woKGRhdGU6IERhdGUpID0+IHN0cmluZylcbiAgICAvKipcbiAgICAgKiBBIFtEYXRlSGVscGVyXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NvcmUvaGVscGVyL0RhdGVIZWxwZXIpIGZvcm1hdCBzdHJpbmcvZnVuY3Rpb24gdG8gdXNlIHRvIGNyZWF0ZSBkYXRlIGFuZCB0aW1lIG91dHB1dCBmb3JcbiAgICAgKiBhYmJyZXZpYXRlZCB2aWV3IGRlc2NyaXB0aW9ucy5cbiAgICAgKiBAcGFyYW0ge0RhdGV9IGRhdGUgVGhlIGRhdGUgdG8gZm9ybWF0LlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBmb3JtYXR0ZWQgZGF0ZS5cbiAgICAgKi9cbiAgICBzaG9ydERhdGVUaW1lRm9ybWF0ID8gOiBzdHJpbmd8KChkYXRlOiBEYXRlKSA9PiBzdHJpbmcpXG4gICAgLyoqXG4gICAgICogVGhlIGNsYXNzIG5hbWUgdG8gYWRkIHRvIGV2ZW50cyB3aGljaCBoYXZlIGR1cmF0aW9uIGxlc3MgdGhhbiBvciBlcXVhbCB0b1xuICAgICAqIFtzaG9ydEV2ZW50RHVyYXRpb25dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L21peGluL0NhbGVuZGFyTWl4aW4jY29uZmlnLXNob3J0RXZlbnREdXJhdGlvbikuXG4gICAgICovXG4gICAgc2hvcnRFdmVudENscyA/IDogc3RyaW5nXG4gICAgLyoqXG4gICAgICogVGhlIGR1cmF0aW9uIGF0IHdoaWNoIGJlbG93IGFuZCBlcXVhbCB0byB0aGlzIHZhbHVlLCBhbiBldmVudCdzIGVuY2Fwc3VsYXRpbmcgZWxlbWVudCBnZXRzXG4gICAgICogdGhlIFtzaG9ydEV2ZW50Q2xzXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9taXhpbi9DYWxlbmRhck1peGluI2NvbmZpZy1zaG9ydEV2ZW50Q2xzKSBhZGRlZCB0byBpdCBzbyB0aGF0IHNtYWxsIGV2ZW50IGJhcnMgY2FuIGhhdmUgc3R5bGUgcmVhcnJhbmdlbWVudHMuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L0RheVJlc291cmNlVmlldyNjb25maWctc2hvcnRFdmVudER1cmF0aW9uKVxuICAgICAqL1xuICAgIHNob3J0RXZlbnREdXJhdGlvbiA/IDogc3RyaW5nfG51bWJlclxuICAgIC8qKlxuICAgICAqIFNob3dzIGFuIGFsbCBkYXkgaGVhZGVyIGFib3ZlIHRoZSBtYWluIHNjaGVkdWxlIGZvciBBbGwgRGF5IGV2ZW50cy5cbiAgICAgKiBTZXQgdG8gYGZhbHNlYCB0byBub3Qgc2hvdyBhbGwgZGF5LCBvciBtdWx0aS1kYXkgZXZlbnRzIGluIGFuIGFsbCBkYXkgaGVhZGVyLCBidXRcbiAgICAgKiB0byBoYXZlIHRoZW0gc2hvd2luZyB3cmFwcGluZyB0aHJvdWdoIHRoZSBkYXkgY2VsbHMuXG4gICAgICovXG4gICAgc2hvd0FsbERheUhlYWRlciA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqICpPbmx5IHZhbGlkIGlmIHRoaXMgV2lkZ2V0IGlzIFtmbG9hdGluZ10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9Db3JlL3dpZGdldC9XaWRnZXQjY29uZmlnLWZsb2F0aW5nKS4qXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L0RheVJlc291cmNlVmlldyNjb25maWctc2hvd0FuaW1hdGlvbilcbiAgICAgKi9cbiAgICBzaG93QW5pbWF0aW9uID8gOiBib29sZWFufG9iamVjdFxuICAgIC8qKlxuICAgICAqIEJ5IGRlZmF1bHQsIHJlc291cmNlIGF2YXRhcnMgYXJlIHNob3duIGluIHRoZSByZXNvdXJjZSBoZWFkZXIgaWYgdGhlcmUgaXMgaG9yaXpvbnRhbCBzcGFjZS5cbiAgICAgKiBDb25maWd1cmUgdGhpcyBhcyBgZmFsc2VgIHRvIGluaGliaXQgdGhpcy5cbiAgICAgKi9cbiAgICBzaG93QXZhdGFycyA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIDxzdHJvbmc+Tm90IGFwcGxpY2FibGUgaW4gYSBgRGF5Vmlld2A8L3N0cm9uZz5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvRGF5UmVzb3VyY2VWaWV3I2NvbmZpZy1zaG93QnVsbGV0KVxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gYmFyIFRoaXMgaXMgYGZhbHNlYCBieSBkZWZhdWx0LiBTZXQgdGhpcyB0byBgdHJ1ZWAgaW4gbW9kZXMgd2hlcmUgYSBzb2xpZCBldmVudCBiYXIgc2hvdWxkIHNob3cgYSBidWxsZXQgaWNvblxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gbm9CYXIgVGhpcyBpcyBgdHJ1ZWAgYnkgZGVmYXVsdC4gRXZlbnRzIHdpdGggbm8gYmFja2dyb3VuZCBjb2xvdXIsIHVzZSB0aGlzIHRvIHNob3cgdGhlIGV2ZW50J3MgZGVmaW5lZCBgZXZlbnRDb2xvcmBcbiAgICAgKi9cbiAgICBzaG93QnVsbGV0ID8gOiBib29sZWFufHtiYXI/OiBib29sZWFuLCBub0Jhcj86IGJvb2xlYW59XG4gICAgLyoqXG4gICAgICogQnkgZGVmYXVsdCA8Yj50b2RheSdzPC9iPiBkYXRlIHNob3dzIGEgY3VycmVudCB0aW1lIGxpbmUgdG8gaW5kaWNhdGUgdGhlIGN1cnJlbnQgdGltZS4gVGhpc1xuICAgICAqIGxpbmUgaXMgY29uZmluZWQgdG8gdGhlIGRheSBjZWxsIGZvciA8Yj50b2RheTwvYj4uXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L0RheVJlc291cmNlVmlldyNjb25maWctc2hvd0N1cnJlbnRUaW1lKVxuICAgICAqL1xuICAgIHNob3dDdXJyZW50VGltZSA/IDogYm9vbGVhbnx7XG4gICAgICAgIGZ1bGxXaWR0aD86IGJvb2xlYW5cbiAgICAgICAgc2hvd1RpbWU/OiBib29sZWFuXG4gICAgICAgIG9uVG9wPzogYm9vbGVhblxuICAgIH1cbiAgICAvKipcbiAgICAgKiBDb25maWd1cmUgYXMgYHRydWVgIHRvIHNob3cgYXZhdGFycyBvZiB0aGUgcmVzb3VyY2VzIChjYWxlbmRhcnMpIGFsb25nc2lkZVxuICAgICAqIHJlc291cmNlIG5hbWVzIGluIHJlc291cmNlIGNvbHVtbiBoZWFkZXJzLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9EYXlSZXNvdXJjZVZpZXcjY29uZmlnLXNob3dIZWFkZXJBdmF0YXJzKVxuICAgICAqL1xuICAgIHNob3dIZWFkZXJBdmF0YXJzID8gOiBib29sZWFufCdsYXN0J1xuICAgIC8qKlxuICAgICAqIENvbmZpZ3VyZSBhcyBgdHJ1ZWAgdG8gc2hvdyBhdmF0YXJzIG9mIHRoZSBhc3NpZ25lZCByZXNvdXJjZXMgKGNhbGVuZGFycykgYXQgdGhlXG4gICAgICogc3RhcnQgb2YgdGhlIGV2ZW50IGJhci5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvRGF5UmVzb3VyY2VWaWV3I2NvbmZpZy1zaG93UmVzb3VyY2VBdmF0YXJzKVxuICAgICAqL1xuICAgIHNob3dSZXNvdXJjZUF2YXRhcnMgPyA6IGJvb2xlYW58c3RyaW5nXG4gICAgLyoqXG4gICAgICogQ29uZmlndXJlIGFzIGBmYWxzZWAgdG8gaGlkZSB0aGUgc3RhcnQgdGltZSBub3JtYWxseSBzaG93biBhdCB0aGUgdG9wIG9mIHRoZSBldmVudHMuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L0RheVJlc291cmNlVmlldyNjb25maWctc2hvd1RpbWUpXG4gICAgICovXG4gICAgc2hvd1RpbWUgPyA6IGJvb2xlYW58UmVjb3JkPCgnc3RhcnRUaW1lJ3wnZW5kVGltZSd8J2R1cmF0aW9uJyksIGJvb2xlYW58c3RyaW5nfEZ1bmN0aW9uPlxuICAgIC8qKlxuICAgICAqIFNldCB0byBgZmFsc2VgIHRvIG5vdCBzaG93IHRoZSB0b29sdGlwIHdoZW4gdGhpcyB3aWRnZXQgaXMgW2Rpc2FibGVkXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1dpZGdldCNwcm9wZXJ0eS1kaXNhYmxlZClcbiAgICAgKi9cbiAgICBzaG93VG9vbHRpcFdoZW5EaXNhYmxlZCA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIEJ5IGRlZmF1bHQsIHRoZSBtb3N0IGdyYW51bGFyIHRpbWUgdGljayBsZXZlbCBpbiB0aGUgRGF5VmlldydzIHRpbWUgYXhpcyBpcyBmaXZlIG1pbnV0ZXMuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L0RheVJlc291cmNlVmlldyNjb25maWctc2l4TWludXRlVGlja3MpXG4gICAgICovXG4gICAgc2l4TWludXRlVGlja3MgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBBZmZlY3RzIGRyYWcgZHJvcCBhbmQgbW92aW5nIG9mIGV2ZW50cyB3aXRoIHJlZ2FyZCB0byB0aGUgW2luY3JlbWVudF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvRGF5VmlldyNwcm9wZXJ0eS1pbmNyZW1lbnQpXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L0RheVJlc291cmNlVmlldyNjb25maWctc25hcFJlbGF0aXZlVG9FdmVudFN0YXJ0RGF0ZSlcbiAgICAgKi9cbiAgICBzbmFwUmVsYXRpdmVUb0V2ZW50U3RhcnREYXRlID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogUHJvZ3JhbW1hdGljIGNvbnRyb2wgb3ZlciBob3cgbWFueSBjb2x1bW5zIHRvIHNwYW4gd2hlbiB1c2VkIGluIGEgZ3JpZCBsYXlvdXQuXG4gICAgICovXG4gICAgc3BhbiA/IDogbnVtYmVyXG4gICAgLyoqXG4gICAgICogU2V0IHRvIGB0cnVlYCB0byBzdGFjayBtdWx0aS1kYXkgZXZlbnRzIHdpdGhpbiBlYWNoIGNlbGwgaW4gdGhlIG9yZGVyIG9mIHRoZWlyIHN0YXJ0IHRpbWUuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L0RheVJlc291cmNlVmlldyNjb25maWctc3RhY2tNdWx0aURheUV2ZW50cylcbiAgICAgKi9cbiAgICBzdGFja011bHRpRGF5RXZlbnRzID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogVGhlIHN0YXJ0IGRhdGUgKFRpbWUgY29tcG9uZW50IGlzIHplcm9lZCkgb2YgdGhpcyB2aWV3LlxuICAgICAqL1xuICAgIHN0YXJ0RGF0ZSA/IDogRGF0ZVxuICAgIC8qKlxuICAgICAqIFRoaXMgdmFsdWUgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nOlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9EYXlSZXNvdXJjZVZpZXcjY29uZmlnLXN0YXRlZnVsKVxuICAgICAqL1xuICAgIHN0YXRlZnVsID8gOiBib29sZWFufG9iamVjdHxzdHJpbmdbXVxuICAgIC8qKlxuICAgICAqIFRoZSBldmVudHMgdGhhdCwgd2hlbiBmaXJlZCBieSB0aGlzIGNvbXBvbmVudCwgc2hvdWxkIHRyaWdnZXIgaXQgdG8gc2F2ZSBpdHMgc3RhdGUgYnkgY2FsbGluZ1xuICAgICAqIFtzYXZlU3RhdGVdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ29yZS9taXhpbi9TdGF0ZSNmdW5jdGlvbi1zYXZlU3RhdGUpLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9EYXlSZXNvdXJjZVZpZXcjY29uZmlnLXN0YXRlZnVsRXZlbnRzKVxuICAgICAqL1xuICAgIHN0YXRlZnVsRXZlbnRzID8gOiBvYmplY3R8c3RyaW5nW11cbiAgICAvKipcbiAgICAgKiBUaGUga2V5IHRvIHVzZSB3aGVuIHNhdmluZyB0aGlzIG9iamVjdCdzIHN0YXRlIGluIHRoZSBbc3RhdGVQcm92aWRlcl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9Db3JlL21peGluL1N0YXRlI2NvbmZpZy1zdGF0ZVByb3ZpZGVyKS4gSWYgdGhpcyBjb25maWcgaXNcbiAgICAgKiBub3QgYXNzaWduZWQsIGFuZCBbc3RhdGVmdWxdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ29yZS9taXhpbi9TdGF0ZSNjb25maWctc3RhdGVmdWwpIGlzIG5vdCBzZXQgdG8gYGZhbHNlYCwgdGhlIFtpZF0oI0NvcmUvd2lkZ2V0L1dpZGdldCNjb25maWctaWQpXG4gICAgICogKGlmIGV4cGxpY2l0bHkgc3BlY2lmaWVkKSB3aWxsIGJlIHVzZWQgYXMgdGhlIGBzdGF0ZUlkYC5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvRGF5UmVzb3VyY2VWaWV3I2NvbmZpZy1zdGF0ZUlkKVxuICAgICAqL1xuICAgIHN0YXRlSWQgPyA6IHN0cmluZ1xuICAgIC8qKlxuICAgICAqIFRoZSBgU3RhdGVQcm92aWRlcmAgdG8gdXNlIHRvIHNhdmUgYW5kIHJlc3RvcmUgdGhpcyBvYmplY3QncyBbc3RhdGVdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ29yZS9taXhpbi9TdGF0ZSNwcm9wZXJ0eS1zdGF0ZSkuIEJ5IGRlZmF1bHQsIGBzdGF0ZWBcbiAgICAgKiB3aWxsIGJlIHNhdmVkIHVzaW5nIHRoZSBbZGVmYXVsdCBzdGF0ZSBwcm92aWRlcl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9Db3JlL3N0YXRlL1N0YXRlUHJvdmlkZXIjcHJvcGVydHktaW5zdGFuY2Utc3RhdGljKS5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvRGF5UmVzb3VyY2VWaWV3I2NvbmZpZy1zdGF0ZVByb3ZpZGVyKVxuICAgICAqL1xuICAgIHN0YXRlUHJvdmlkZXIgPyA6IFN0YXRlUHJvdmlkZXJcbiAgICAvKipcbiAgICAgKiBTcGVjaWZ5IGB0cnVlYCB0byBtYXRjaCBmaWVsZHMgYnkgdGhlaXIgYG5hbWVgIHByb3BlcnR5IG9ubHkgd2hlbiBhc3NpZ25pbmcgYSBbcmVjb3JkXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L0NvbnRhaW5lciNjb25maWctcmVjb3JkKSxcbiAgICAgKiB3aXRob3V0IGZhbGxpbmcgYmFjayB0byBgcmVmYC5cbiAgICAgKi9cbiAgICBzdHJpY3RSZWNvcmRNYXBwaW5nID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogQW4gb2JqZWN0IGNvbnRhaW5pbmcgd2lkZ2V0cyBrZXllZCBieSBuYW1lLiBCeSBkZWZhdWx0ICh3aGVuIG5vIGB0eXBlYCBpcyBnaXZlbiksIHN0cmlwcyBhcmVcbiAgICAgKiBbdG9vbGJhcnNdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ29yZS93aWRnZXQvVG9vbGJhcikuIElmIHlvdSB3YW50IHRvIHBhc3MgYW4gYXJyYXksIHlvdSBjYW4gdXNlXG4gICAgICogdGhlIHRvb2xiYXIncyBbaXRlbXNdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ29yZS93aWRnZXQvQ29udGFpbmVyI2NvbmZpZy1pdGVtcykuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L0RheVJlc291cmNlVmlldyNjb25maWctc3RyaXBzKVxuICAgICAqL1xuICAgIHN0cmlwcyA/IDogUmVjb3JkPHN0cmluZywgQ2FsZW5kYXJDb250YWluZXJJdGVtQ29uZmlnPlxuICAgIC8qKlxuICAgICAqIFRoZSBjb252ZXJzZSBvZiBbc3luY1ZpZXdEYXRlXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9taXhpbi9DYWxlbmRhck1peGluI3Byb3BlcnR5LXN5bmNWaWV3RGF0ZSlcbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvRGF5UmVzb3VyY2VWaWV3I2NvbmZpZy1zeW5jQ2FsZW5kYXJEYXRlKVxuICAgICAqL1xuICAgIHN5bmNDYWxlbmRhckRhdGUgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBUaGUgY29udmVyc2Ugb2YgW3N5bmNDYWxlbmRhckRhdGVdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L21peGluL0NhbGVuZGFyTWl4aW4jcHJvcGVydHktc3luY0NhbGVuZGFyRGF0ZSlcbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvRGF5UmVzb3VyY2VWaWV3I2NvbmZpZy1zeW5jVmlld0RhdGUpXG4gICAgICovXG4gICAgc3luY1ZpZXdEYXRlID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogQSBjb25maWd1cmF0aW9uIGZvciB0aGUgW3RhYl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9Db3JlL3dpZGdldC9UYWIpIGNyZWF0ZWQgZm9yIHRoaXMgd2lkZ2V0IHdoZW4gaXQgaXMgcGxhY2VkIGluIGFcbiAgICAgKiBbVGFiUGFuZWxdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ29yZS93aWRnZXQvVGFiUGFuZWwpLiBGb3IgZXhhbXBsZSwgdGhpcyBjb25maWcgY2FuIGJlIHVzZWQgdG8gY29udHJvbCB0aGUgaWNvbiBvZiB0aGUgYHRhYmAgZm9yXG4gICAgICogdGhpcyB3aWRnZXQ6XG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L0RheVJlc291cmNlVmlldyNjb25maWctdGFiKVxuICAgICAqL1xuICAgIHRhYiA/IDogYm9vbGVhbnxUYWJDb25maWdcbiAgICAvKipcbiAgICAgKiBXaGVuIHRoaXMgY29udGFpbmVyIGlzIHVzZWQgYXMgYSB0YWIgaW4gYSBUYWJQYW5lbCwgdGhlc2UgaXRlbXMgYXJlIGFkZGVkIHRvIHRoZVxuICAgICAqIFtUYWJCYXJdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ29yZS93aWRnZXQvVGFiQmFyKSB3aGVuIHRoaXMgY29udGFpbmVyIGlzIHRoZSBhY3RpdmUgdGFiLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9EYXlSZXNvdXJjZVZpZXcjY29uZmlnLXRhYkJhckl0ZW1zKVxuICAgICAqL1xuICAgIHRhYkJhckl0ZW1zID8gOiBUb29sYmFySXRlbXNbXXxXaWRnZXRbXVxuICAgIC8qKlxuICAgICAqIFRoZSB0YWcgbmFtZSBvZiB0aGlzIFdpZGdldCdzIHJvb3QgZWxlbWVudFxuICAgICAqL1xuICAgIHRhZyA/IDogc3RyaW5nXG4gICAgLyoqXG4gICAgICogQSBDb25maWcgb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgY29uZmlndXJhdGlvbiBvZiBhIFtUb29sYmFyXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1Rvb2xiYXIpLFxuICAgICAqIG9yIGFycmF5IG9mIGNvbmZpZyBvYmplY3RzIHJlcHJlc2VudGluZyB0aGUgY2hpbGQgaXRlbXMgb2YgYSBUb29sYmFyLlxuICAgICAqIFRoaXMgY3JlYXRlcyBhIHRvb2xiYXIgZG9ja2VkIHRvIHRoZSB0b3Agb2YgdGhlIHBhbmVsIGltbWVkaWF0ZWx5IGJlbG93IHRoZSBoZWFkZXIuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L0RheVJlc291cmNlVmlldyNjb25maWctdGJhcilcbiAgICAgKi9cbiAgICB0YmFyID8gOiAoQ2FsZW5kYXJDb250YWluZXJJdGVtQ29uZmlnfHN0cmluZylbXXxUb29sYmFyQ29uZmlnfFBhZ2luZ1Rvb2xiYXJDb25maWd8bnVsbFxuICAgIC8qKlxuICAgICAqIFRleHQgYWxpZ25tZW50OiAnbGVmdCcsICdjZW50ZXInIG9yICdyaWdodCcuIEFsc28gYWNjZXB0cyBkaXJlY3Rpb24gbmV1dHJhbCAnc3RhcnQnIGFuZCAnZW5kJy5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvRGF5UmVzb3VyY2VWaWV3I2NvbmZpZy10ZXh0QWxpZ24pXG4gICAgICovXG4gICAgdGV4dEFsaWduID8gOiAnbGVmdCd8J2NlbnRlcid8J3JpZ2h0J3wnc3RhcnQnfCdlbmQnXG4gICAgLyoqXG4gICAgICogQSBmdW5jdGlvbiwgb3IgbmFtZSBvZiBhIGZ1bmN0aW9uIHdoaWNoIHlpZWxkcyBhIFtEb21Db25maWddKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ29yZS9oZWxwZXIvRG9tSGVscGVyI3R5cGVkZWYtRG9tQ29uZmlnKSBvYmplY3QgdG8gdXNlIGFzIGEgdGljayBiYWNrZ3JvdW5kIGVsZW1lbnRcbiAgICAgKiBmb3IgdGhlIHRpY2sgY29udGV4dCBwYXNzZWQuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L0RheVJlc291cmNlVmlldyNjb25maWctdGlja1JlbmRlcmVyKVxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSB0aWNrQ29udGV4dCBBbiBvYmplY3QgY29udGFpbmluZyB0aGUgY29udGV4dCBmb3IgdGhlIHRpY2sgYmVpbmcgcmVuZGVyZWQuXG4gICAgICogQHBhcmFtIHtEYXRlfSB0aWNrQ29udGV4dC5zdGFydFRpbWUgVGhlIHN0YXJ0IHRpbWUgb2YgdGhlIHRpY2suXG4gICAgICogQHBhcmFtIHtEYXRlfSB0aWNrQ29udGV4dC5lbmRUaW1lIFRoZSBlbmQgdGltZSBvZiB0aGUgdGljay5cbiAgICAgKiBAcGFyYW0ge1NjaGVkdWxlci5tb2RlbC5FdmVudE1vZGVsW119IHRpY2tDb250ZXh0LmV2ZW50cyBUaGUgZXZlbnRzIHRoYXQgdmlzdWFsbHkgaW50ZXJzZWN0IHdpdGggdGhlIHRpY2suXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHRpY2tDb250ZXh0LnRpY2tJbmRleCBUaGUgemVyby1iYXNlZCBvdmVyYWxsIHRpY2sgaW5kZXguXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHRpY2tDb250ZXh0LnN1YnRpY2tJbmRleCBUaGUgemVyby1iYXNlZCBzdWJ0aWNrIGluZGV4ICp3aXRoaW4qIHRoZSBob3VyLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB0aWNrQ29udGV4dC5zdWJ0aWNrQ291bnQgVGhlIHRvdGFsIG51bWJlciBvZiB2aXNpYmxlIHN1YnRpY2tzIGluIGFuIGhvdXIuXG4gICAgICogQHBhcmFtIHtTY2hlZHVsZXIubW9kZWwuUmVzb3VyY2VNb2RlbH0gdGlja0NvbnRleHQucmVzb3VyY2VSZWNvcmQgKklmKiB0aGlzIHZpZXcgaXMgYSByZXNvdXJjZSB2aWV3LCB0aGUgcmVzb3VyY2UgcmVjb3JkLlxuICAgICAqIEByZXR1cm5zIHtEb21Db25maWd9IFRoZSBET00gY29uZmlnIG9iamVjdCB0byB1c2UgZm9yIHRoZSB0aWNrLlxuICAgICAqL1xuICAgIHRpY2tSZW5kZXJlciA/IDogKCh0aWNrQ29udGV4dDogeyBzdGFydFRpbWU6IERhdGUsIGVuZFRpbWU6IERhdGUsIGV2ZW50czogRXZlbnRNb2RlbFtdLCB0aWNrSW5kZXg6IG51bWJlciwgc3VidGlja0luZGV4OiBudW1iZXIsIHN1YnRpY2tDb3VudDogbnVtYmVyLCByZXNvdXJjZVJlY29yZDogUmVzb3VyY2VNb2RlbCB9KSA9PiBEb21Db25maWcpfHN0cmluZ1xuICAgIC8qKlxuICAgICAqIEEgW0RhdGVIZWxwZXJdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ29yZS9oZWxwZXIvRGF0ZUhlbHBlcikgZm9ybWF0IHN0cmluZy9mdW5jdGlvbiB1c2VkIHRvIGZvcm1hdCB0aGUgdGltZSBkaXNwbGF5ZWQgaW4gdGhlXG4gICAgICogdGltZSBheGlzIGF0IHRoZSBsZWZ0IHNpZGUgb2YgdGhlIHZpZXcuXG4gICAgICogQHBhcmFtIHtEYXRlfSBkYXRlIFRoZSBkYXRlIHRvIGZvcm1hdC5cbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgZm9ybWF0dGVkIGRhdGUuXG4gICAgICovXG4gICAgdGltZUF4aXNUaW1lRm9ybWF0ID8gOiBzdHJpbmd8KChkYXRlOiBEYXRlKSA9PiBzdHJpbmcpXG4gICAgLyoqXG4gICAgICogQSBbRGF0ZUhlbHBlcl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9Db3JlL2hlbHBlci9EYXRlSGVscGVyKSBmb3JtYXQgc3RyaW5nL2Z1bmN0aW9uIHVzZWQgdG8gZm9ybWF0IHRoZSB0aW1lIGRpc3BsYXllZCBpbiBldmVudHNcbiAgICAgKiBAcGFyYW0ge0RhdGV9IGRhdGUgVGhlIGRhdGUgdG8gZm9ybWF0LlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBmb3JtYXR0ZWQgZGF0ZS5cbiAgICAgKi9cbiAgICB0aW1lRm9ybWF0ID8gOiBzdHJpbmd8KChkYXRlOiBEYXRlKSA9PiBzdHJpbmcpXG4gICAgLyoqXG4gICAgICogVGhlIHR5cGUgb2Ygcm91bmRpbmcgdG8gYXBwbHkgd2hlbiBjYWxjdWxhdGluZyBhIGRhdGUgZnJvbSBhIHBvaW50ZXIgcG9zaXRpb24gaW4gYSBkYXlcbiAgICAgKiBjb2x1bW4uXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L0RheVJlc291cmNlVmlldyNjb25maWctdGltZVNuYXBUeXBlKVxuICAgICAqL1xuICAgIHRpbWVTbmFwVHlwZSA/IDogJ3JvdW5kJ3wnY2VpbCd8J2Zsb29yJ3xudWxsXG4gICAgLyoqXG4gICAgICogQSB0aXRsZSB0byBkaXNwbGF5IGluIHRoZSBoZWFkZXIgb3Igb3duaW5nIFRhYlBhbmVsLiBDYXVzZXMgY3JlYXRpb24gYW5kIGRvY2tpbmcgb2YgYSBoZWFkZXJcbiAgICAgKiB0byB0aGUgdG9wIGlmIG5vIGhlYWRlciBpcyBjb25maWd1cmVkLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9EYXlSZXNvdXJjZVZpZXcjY29uZmlnLXRpdGxlKVxuICAgICAqL1xuICAgIHRpdGxlID8gOiBzdHJpbmdcbiAgICAvKipcbiAgICAgKiBUaGUgW3Rvb2xzXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1Rvb2wpIHRvIGFkZCBlaXRoZXIgYmVmb3JlIG9yIGFmdGVyIHRoZSBgdGl0bGVgIGluIHRoZSBQYW5lbCBoZWFkZXIuIEVhY2hcbiAgICAgKiBwcm9wZXJ0eSBuYW1lIGlzIHRoZSByZWZlcmVuY2UgYnkgd2hpY2ggYW4gaW5zdGFudGlhdGVkIHRvb2wgbWF5IGJlIHJldHJpZXZlZCBmcm9tIHRoZSBsaXZlXG4gICAgICogYFt0b29sc10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9Db3JlL3dpZGdldC9taXhpbi9Ub29sYWJsZSNwcm9wZXJ0eS10b29scylgIHByb3BlcnR5LlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9EYXlSZXNvdXJjZVZpZXcjY29uZmlnLXRvb2xzKVxuICAgICAqL1xuICAgIHRvb2xzID8gOiBSZWNvcmQ8c3RyaW5nLCBUb29sQ29uZmlnPnxudWxsXG4gICAgLyoqXG4gICAgICogVG9vbHRpcCBmb3IgdGhlIHdpZGdldCwgZWl0aGVyIGFzIGEgc3RyaW5nIG9yIGFzIGEgVG9vbHRpcCBjb25maWcgb2JqZWN0LlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9EYXlSZXNvdXJjZVZpZXcjY29uZmlnLXRvb2x0aXApXG4gICAgICovXG4gICAgdG9vbHRpcCA/IDogc3RyaW5nfFRvb2x0aXBDb25maWd8bnVsbFxuICAgIC8qKlxuICAgICAqIEJ5IGRlZmF1bHQsIHRhYmJpbmcgd2l0aGluIGEgUGFuZWwgaXMgbm90IGNvbnRhaW5lZCwgaWUgeW91IGNhbiBUQUIgb3V0IG9mIHRoZSBQYW5lbFxuICAgICAqIGZvcndhcmRzIG9yIGJhY2t3YXJkcy5cbiAgICAgKiBDb25maWd1cmUgdGhpcyBhcyBgdHJ1ZWAgdG8gZGlzYWxsb3cgdGFiYmluZyBvdXQgb2YgdGhlIFBhbmVsLCBhbmQgbWFrZSB0YWJiaW5nIGNpcmN1bGFyIHdpdGhpbiB0aGlzIFBhbmVsLlxuICAgICAqL1xuICAgIHRyYXBGb2N1cyA/IDogYm9vbGVhblxuICAgIHR5cGUgPyA6ICdkYXlyZXNvdXJjZSdcbiAgICAvKipcbiAgICAgKiBDdXN0b20gQ1NTIGNsYXNzIG5hbWUgc3VmZml4ZXMgdG8gYXBwbHkgdG8gdGhlIGVsZW1lbnRzIHJlbmRlcmVkIGJ5IHRoaXMgd2lkZ2V0LiBUaGlzIG1heSBiZSBzcGVjaWZpZWRcbiAgICAgKiBhcyBhIHNwYWNlIHNlcGFyYXRlZCBzdHJpbmcsIGFuIGFycmF5IG9mIHN0cmluZ3MsIG9yIGFzIGFuIG9iamVjdCBpbiB3aGljaCBwcm9wZXJ0eSBuYW1lcyB3aXRoIHRydXRoeVxuICAgICAqIHZhbHVlcyBhcmUgdXNlZCBhcyB0aGUgY2xhc3MgbmFtZXMuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L0RheVJlc291cmNlVmlldyNjb25maWctdWkpXG4gICAgICovXG4gICAgdWkgPyA6ICdwbGFpbid8J3Rvb2xiYXInfHN0cmluZ3xvYmplY3RcbiAgICAvKipcbiAgICAgKiBFaXRoZXIgdGhlIHN0YXJ0IGhvdXIgb2YgdGhlIGRheSwgb3IgYSAqMjQgaG91cirCoGBISDpNTWAgc3RyaW5nIGRlbm90aW5nIHRoZSBpbml0aWFsbHkgdmlzaWJsZSBzdGFydFxuICAgICAqIHRpbWUgb2YgdGhlIGRheS4gRGVmYXVsdHMgdG8gN2FtLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9EYXlSZXNvdXJjZVZpZXcjY29uZmlnLXZpc2libGVTdGFydFRpbWUpXG4gICAgICovXG4gICAgdmlzaWJsZVN0YXJ0VGltZSA/IDogc3RyaW5nfG51bWJlcnx7XG4gICAgICAgIHRpbWU/OiBzdHJpbmd8bnVtYmVyXG4gICAgICAgIGJsb2NrPzogJ3N0YXJ0J3wnZW5kJ3wnY2VudGVyJ3wnbmVhcmVzdCdcbiAgICAgICAgZWRnZU9mZnNldD86IG51bWJlclxuICAgICAgICBhbmltYXRlPzogb2JqZWN0fGJvb2xlYW58bnVtYmVyXG4gICAgICAgIGR1cmF0aW9uPzogbnVtYmVyXG4gICAgICAgIGVhc2luZz86IHN0cmluZ1xuICAgIH18bnVsbFxuICAgIC8qKlxuICAgICAqIFRoZSB3ZWVrIHN0YXJ0IGRheSwgMCBtZWFuaW5nIFN1bmRheSwgNiBtZWFuaW5nIFNhdHVyZGF5LlxuICAgICAqIERlZmF1bHRzIHRvIFt3ZWVrU3RhcnREYXldKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ29yZS9oZWxwZXIvRGF0ZUhlbHBlciNwcm9wZXJ0eS13ZWVrU3RhcnREYXktc3RhdGljKS5cbiAgICAgKi9cbiAgICB3ZWVrU3RhcnREYXkgPyA6IG51bWJlclxuICAgIC8qKlxuICAgICAqIEEgd2lkZ2V0cyB3ZWlnaHQgZGV0ZXJtaW5lcyBpdHMgcG9zaXRpb24gYW1vbmcgc2libGluZ3Mgd2hlbiBhZGRlZCB0byBhIFtDb250YWluZXJdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ29yZS93aWRnZXQvQ29udGFpbmVyKS5cbiAgICAgKiBIaWdoZXIgd2VpZ2h0cyBnbyBmdXJ0aGVyIGRvd24uXG4gICAgICovXG4gICAgd2VpZ2h0ID8gOiBudW1iZXJcbiAgICAvKipcbiAgICAgKiBXaWRnZXQncyB3aWR0aCwgdXNlZCB0byBzZXQgZWxlbWVudCBgc3R5bGUud2lkdGhgLiBFaXRoZXIgc3BlY2lmeSBhIHZhbGlkIHdpZHRoIHN0cmluZyBvciBhIG51bWJlciwgd2hpY2hcbiAgICAgKiB3aWxsIGdldCAncHgnIGFwcGVuZGVkLiBXZSByZWNvbW1lbmQgdXNpbmcgQ1NTIGFzIHRoZSBwcmltYXJ5IHdheSB0byBjb250cm9sIHdpZHRoLCBidXQgaW4gc29tZSBjYXNlc1xuICAgICAqIHRoaXMgY29uZmlnIGlzIGNvbnZlbmllbnQuXG4gICAgICovXG4gICAgd2lkdGggPyA6IHN0cmluZ3xudW1iZXJcbiAgICAvKipcbiAgICAgKiBUaGUgeCBwb3NpdGlvbiBmb3IgdGhlIHdpZGdldC5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvRGF5UmVzb3VyY2VWaWV3I2NvbmZpZy14KVxuICAgICAqL1xuICAgIHggPyA6IG51bWJlclxuICAgIC8qKlxuICAgICAqIFRoZSB5IHBvc2l0aW9uIGZvciB0aGUgd2lkZ2V0LlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9EYXlSZXNvdXJjZVZpZXcjY29uZmlnLXkpXG4gICAgICovXG4gICAgeSA/IDogbnVtYmVyXG4gICAgLyoqXG4gICAgICogWW91IGNhbiB6b29tIGluIGFuZCBvdXQgb24gdGhlIHRpbWUgYXhpcyB1c2luZyBDVFJMLWtleSArIG1vdXNlIHdoZWVsXG4gICAgICogb24gbW91c2UtYmFzZWQgZGV2aWNlcyBvciBwaW5jaC16b29tIG9uIHRvdWNoIGRldmljZXMuXG4gICAgICogU2VlIGFsc28gdGhlIFtob3VySGVpZ2h0QnJlYWtwb2ludHNdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L0RheVZpZXcjY29uZmlnLWhvdXJIZWlnaHRCcmVha3BvaW50cykgY29uZmlnIG9wdGlvbi5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvRGF5UmVzb3VyY2VWaWV3I2NvbmZpZy16b29tT25Nb3VzZVdoZWVsKVxuICAgICAqL1xuICAgIHpvb21Pbk1vdXNlV2hlZWwgPyA6IGJvb2xlYW58bnVtYmVyXG5cbn1cblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3IgOiAnYnJ5bnR1bS1kYXktcmVzb3VyY2UtdmlldycsXG4gICAgdGVtcGxhdGUgOiAnJ1xufSlcbmV4cG9ydCBjbGFzcyBCcnludHVtRGF5UmVzb3VyY2VWaWV3Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuXG4gICAgcHVibGljIHN0YXRpYyBpbnN0YW5jZUNsYXNzID0gRGF5UmVzb3VyY2VWaWV3O1xuXG4gICAgcHVibGljIHN0YXRpYyBpbnN0YW5jZU5hbWUgPSAnRGF5UmVzb3VyY2VWaWV3JztcblxuICAgIHByaXZhdGUgc3RhdGljIGJyeW50dW1FdmVudHM6IHN0cmluZ1tdID0gW1xuICAgICAgICAnb25CZWZvcmVBdXRvQ3JlYXRlJyxcbiAgICAgICAgJ29uQmVmb3JlQ2hhbmdlRGF0ZScsXG4gICAgICAgICdvbkJlZm9yZURlc3Ryb3knLFxuICAgICAgICAnb25CZWZvcmVIaWRlJyxcbiAgICAgICAgJ29uQmVmb3JlUmVzcG9uc2l2ZVN0YXRlQ2hhbmdlJyxcbiAgICAgICAgJ29uQmVmb3JlU2V0UmVjb3JkJyxcbiAgICAgICAgJ29uQmVmb3JlU2hvdycsXG4gICAgICAgICdvbkJlZm9yZVN0YXRlQXBwbHknLFxuICAgICAgICAnb25CZWZvcmVTdGF0ZVNhdmUnLFxuICAgICAgICAnb25DYXRjaEFsbCcsXG4gICAgICAgICdvbkNlbGxNYXBQb3B1bGF0ZWQnLFxuICAgICAgICAnb25Db2xsYXBzZScsXG4gICAgICAgICdvbkRheUNlbGxQb3B1bGF0ZWQnLFxuICAgICAgICAnb25EZXN0cm95JyxcbiAgICAgICAgJ29uRGlydHlTdGF0ZUNoYW5nZScsXG4gICAgICAgICdvbkVsZW1lbnRDcmVhdGVkJyxcbiAgICAgICAgJ29uRXZlbnRBdXRvQ3JlYXRlZCcsXG4gICAgICAgICdvbkV2ZW50UHJvcGFnYXRlJyxcbiAgICAgICAgJ29uRXhwYW5kJyxcbiAgICAgICAgJ29uRm9jdXNJbicsXG4gICAgICAgICdvbkZvY3VzT3V0JyxcbiAgICAgICAgJ29uSGlkZScsXG4gICAgICAgICdvbkxheW91dFVwZGF0ZScsXG4gICAgICAgICdvblBhaW50JyxcbiAgICAgICAgJ29uUmFuZ2VDaGFuZ2UnLFxuICAgICAgICAnb25SZWFkT25seScsXG4gICAgICAgICdvblJlY29tcG9zZScsXG4gICAgICAgICdvblJlZnJlc2gnLFxuICAgICAgICAnb25SZXNpemUnLFxuICAgICAgICAnb25SZXNwb25zaXZlU3RhdGVDaGFuZ2UnLFxuICAgICAgICAnb25TaGlmdEluY3JlbWVudENoYW5nZScsXG4gICAgICAgICdvblNob3cnLFxuICAgICAgICAnb25UaWNrQ2hhbmdlJyxcbiAgICAgICAgJ29uVGltZUF4aXNDbGljaycsXG4gICAgICAgICdvblRvb2xDbGljaydcbiAgICBdO1xuXG4gICAgcHJpdmF0ZSBzdGF0aWMgYnJ5bnR1bUZlYXR1cmVOYW1lczogc3RyaW5nW10gPSBbXG5cbiAgICBdO1xuXG4gICAgcHJpdmF0ZSBzdGF0aWMgYnJ5bnR1bUNvbmZpZ3M6IHN0cmluZ1tdID0gQnJ5bnR1bURheVJlc291cmNlVmlld0NvbXBvbmVudC5icnludHVtRmVhdHVyZU5hbWVzLmNvbmNhdChbXG4gICAgICAgICdhY3Rpb25CdXR0b25zJyxcbiAgICAgICAgJ2FjdGl2YXRpb25LZXknLFxuICAgICAgICAnYWRvcHQnLFxuICAgICAgICAnYWxpZ24nLFxuICAgICAgICAnYWxpZ25TZWxmJyxcbiAgICAgICAgJ2FsbERheUV2ZW50cycsXG4gICAgICAgICdhbGxvd0RyYWdDcmVhdGUnLFxuICAgICAgICAnYWxsb3dEcmFnTW92ZScsXG4gICAgICAgICdhbGxvd0RyYWdSZXNpemUnLFxuICAgICAgICAnYWxsb3dab29tVW5kZXJmbG93JyxcbiAgICAgICAgJ2FuY2hvcicsXG4gICAgICAgICdhbmltYXRlVGltZVNoaWZ0JyxcbiAgICAgICAgJ2FwcGVuZFRvJyxcbiAgICAgICAgJ2FyaWFEZXNjcmlwdGlvbicsXG4gICAgICAgICdhcmlhTGFiZWwnLFxuICAgICAgICAnYXV0b0NyZWF0ZScsXG4gICAgICAgICdiYmFyJyxcbiAgICAgICAgJ2JvZHlDbHMnLFxuICAgICAgICAnYnViYmxlRXZlbnRzJyxcbiAgICAgICAgJ2NhbGxPbkZ1bmN0aW9ucycsXG4gICAgICAgICdjYXRjaEV2ZW50SGFuZGxlckV4Y2VwdGlvbnMnLFxuICAgICAgICAnY2VudGVyZWQnLFxuICAgICAgICAnY2xzJyxcbiAgICAgICAgJ2NvbGxhcHNlZCcsXG4gICAgICAgICdjb2xsYXBzaWJsZScsXG4gICAgICAgICdjb2xvcicsXG4gICAgICAgICdjb2x1bW4nLFxuICAgICAgICAnY29sdW1uSGVhZGVyUmVuZGVyZXInLFxuICAgICAgICAnY29tcGFjdEhlYWRlcicsXG4gICAgICAgICdjb25maWcnLFxuICAgICAgICAnY29uc3RyYWluVG8nLFxuICAgICAgICAnY29udGVudEVsZW1lbnRDbHMnLFxuICAgICAgICAnY29yZUhvdXJzJyxcbiAgICAgICAgJ2N1cnJlbnRUaW1lSW5kaWNhdG9yUmVuZGVyZXInLFxuICAgICAgICAnZGFzaGVkU3VidGlja3MnLFxuICAgICAgICAnZGF0YUZpZWxkJyxcbiAgICAgICAgJ2RhdGFzZXQnLFxuICAgICAgICAnZGF0ZScsXG4gICAgICAgICdkYXRlRmlsdGVyJyxcbiAgICAgICAgJ2RhdGVGb3JtYXQnLFxuICAgICAgICAnZGF0ZVNlcGFyYXRvcicsXG4gICAgICAgICdkYXlDZWxsUmVuZGVyZXInLFxuICAgICAgICAnZGF5RW5kVGltZScsXG4gICAgICAgICdkYXlIZWFkZXJSZW5kZXJlcicsXG4gICAgICAgICdkYXlOYW1lRm9ybWF0JyxcbiAgICAgICAgJ2RheVN0YXJ0U2hpZnQnLFxuICAgICAgICAnZGF5U3RhcnRUaW1lJyxcbiAgICAgICAgJ2RlZmF1bHRCaW5kUHJvcGVydHknLFxuICAgICAgICAnZGVmYXVsdEZvY3VzJyxcbiAgICAgICAgJ2RlZmF1bHRzJyxcbiAgICAgICAgJ2RlZmF1bHRTY3JvbGxPcHRpb25zJyxcbiAgICAgICAgJ2Rlc2NyaXB0aW9uRm9ybWF0JyxcbiAgICAgICAgJ2Rlc2NyaXB0aW9uUmVuZGVyZXInLFxuICAgICAgICAnZGV0ZWN0Q1NTQ29tcGF0aWJpbGl0eUlzc3VlcycsXG4gICAgICAgICdkaXNhYmxlZCcsXG4gICAgICAgICdkb2NrJyxcbiAgICAgICAgJ2RyYWdnYWJsZScsXG4gICAgICAgICdkcmFnVW5pdCcsXG4gICAgICAgICdkcmF3ZXInLFxuICAgICAgICAnZWxlbWVudEF0dHJpYnV0ZXMnLFxuICAgICAgICAnZW5kRGF0ZScsXG4gICAgICAgICdldmVudEZpbHRlcicsXG4gICAgICAgICdldmVudEhlYWRlclJlbmRlcmVyJyxcbiAgICAgICAgJ2V2ZW50TGF5b3V0JyxcbiAgICAgICAgJ2V2ZW50UmVuZGVyZXInLFxuICAgICAgICAnZXZlbnRTb3J0ZXInLFxuICAgICAgICAnZXZlbnRTcGFjaW5nJyxcbiAgICAgICAgJ2V4dGVuZEFsbERheUVuZERheScsXG4gICAgICAgICdleHRyYURhdGEnLFxuICAgICAgICAnZmlsdGVyRXZlbnRSZXNvdXJjZXMnLFxuICAgICAgICAnZml0SG91cnMnLFxuICAgICAgICAnZml4ZWREdXJhdGlvbicsXG4gICAgICAgICdmbGV4JyxcbiAgICAgICAgJ2Zsb2F0aW5nJyxcbiAgICAgICAgJ2Zvb3RlcicsXG4gICAgICAgICdnZXRQcmltYXJ5UmVzb3VyY2UnLFxuICAgICAgICAnaGVhZGVyJyxcbiAgICAgICAgJ2hlaWdodCcsXG4gICAgICAgICdoaWRkZW4nLFxuICAgICAgICAnaGlkZUFuaW1hdGlvbicsXG4gICAgICAgICdoaWRlRW1wdHlEYXlzJyxcbiAgICAgICAgJ2hpZGVFbXB0eVJlc291cmNlcycsXG4gICAgICAgICdoaWRlTm9uV29ya2luZ0RheXMnLFxuICAgICAgICAnaGlkZVJlc291cmNlTmFtZVdoZW5OYXJyb3cnLFxuICAgICAgICAnaGlkZVdoZW5FbXB0eScsXG4gICAgICAgICdob3VySGVpZ2h0JyxcbiAgICAgICAgJ2hvdXJIZWlnaHRCcmVha3BvaW50cycsXG4gICAgICAgICdpY29uJyxcbiAgICAgICAgJ2lkJyxcbiAgICAgICAgJ2lnbm9yZVBhcmVudFJlYWRPbmx5JyxcbiAgICAgICAgJ2luY3JlbWVudCcsXG4gICAgICAgICdpbnB1dEZpZWxkQWxpZ24nLFxuICAgICAgICAnaW5zZXJ0QmVmb3JlJyxcbiAgICAgICAgJ2luc2VydEZpcnN0JyxcbiAgICAgICAgJ2ludGVyRGF5RHJhZycsXG4gICAgICAgICdpbnRlckRheVJlc2l6ZScsXG4gICAgICAgICdpdGVtQ2xzJyxcbiAgICAgICAgJ2l0ZW1zJyxcbiAgICAgICAgJ2tleU1hcCcsXG4gICAgICAgICdsYWJlbFBvc2l0aW9uJyxcbiAgICAgICAgJ2xheW91dCcsXG4gICAgICAgICdsYXlvdXRTdHlsZScsXG4gICAgICAgICdsYXp5SXRlbXMnLFxuICAgICAgICAnbGlzdGVuZXJzJyxcbiAgICAgICAgJ2xvY2FsZUNsYXNzJyxcbiAgICAgICAgJ2xvY2FsaXphYmxlJyxcbiAgICAgICAgJ2xvY2FsaXphYmxlUHJvcGVydGllcycsXG4gICAgICAgICdtYXJnaW4nLFxuICAgICAgICAnbWFza0RlZmF1bHRzJyxcbiAgICAgICAgJ21hc2tlZCcsXG4gICAgICAgICdtYXhBbGxEYXlIZWlnaHQnLFxuICAgICAgICAnbWF4RGF0ZScsXG4gICAgICAgICdtYXhIZWlnaHQnLFxuICAgICAgICAnbWF4aW1pemVPbk1vYmlsZScsXG4gICAgICAgICdtYXhXaWR0aCcsXG4gICAgICAgICdtaW5EYXRlJyxcbiAgICAgICAgJ21pbkRheVdpZHRoJyxcbiAgICAgICAgJ21pbkV2ZW50SGVpZ2h0JyxcbiAgICAgICAgJ21pbkhlaWdodCcsXG4gICAgICAgICdtaW5Ib3VySGVpZ2h0JyxcbiAgICAgICAgJ21pblJlc291cmNlV2lkdGgnLFxuICAgICAgICAnbWluV2lkdGgnLFxuICAgICAgICAnbW9uaXRvclJlc2l6ZScsXG4gICAgICAgICduYW1lZEl0ZW1zJyxcbiAgICAgICAgJ25vTWF0Y2hpbmdEYXRlcycsXG4gICAgICAgICdub25Xb3JraW5nRGF5cycsXG4gICAgICAgICdvdmVyZmxvd1BvcHVwJyxcbiAgICAgICAgJ293bmVyJyxcbiAgICAgICAgJ3Bhc3RFdmVudENscycsXG4gICAgICAgICdwb3NpdGlvbmVkJyxcbiAgICAgICAgJ3ByZXZlbnRUb29sdGlwT25Ub3VjaCcsXG4gICAgICAgICdyYW5nZScsXG4gICAgICAgICdyZWFkT25seScsXG4gICAgICAgICdyZWxheVN0b3JlRXZlbnRzJyxcbiAgICAgICAgJ3JlbmRpdGlvbicsXG4gICAgICAgICdyZXNvdXJjZURhdGVGaWx0ZXInLFxuICAgICAgICAncmVzb3VyY2VJbWFnZVBhdGgnLFxuICAgICAgICAncmVzcG9uc2l2ZScsXG4gICAgICAgICdyZXNwb25zaXZlUm9vdCcsXG4gICAgICAgICdyZXNwb25zaXZlU3RhdGUnLFxuICAgICAgICAncmVzcG9uc2l2ZVRhcmdldCcsXG4gICAgICAgICdyaXBwbGUnLFxuICAgICAgICAncm9vdEVsZW1lbnQnLFxuICAgICAgICAncnRsJyxcbiAgICAgICAgJ3Njcm9sbGFibGUnLFxuICAgICAgICAnc2Nyb2xsQWN0aW9uJyxcbiAgICAgICAgJ3NlbGVjdG9yQnV0dG9uJyxcbiAgICAgICAgJ3NlbGVjdG9yTWVudUl0ZW0nLFxuICAgICAgICAnc2hpZnRJbmNyZW1lbnQnLFxuICAgICAgICAnc2hvcnREYXRlRm9ybWF0JyxcbiAgICAgICAgJ3Nob3J0RGF0ZVRpbWVGb3JtYXQnLFxuICAgICAgICAnc2hvcnRFdmVudENscycsXG4gICAgICAgICdzaG9ydEV2ZW50RHVyYXRpb24nLFxuICAgICAgICAnc2hvd0FsbERheUhlYWRlcicsXG4gICAgICAgICdzaG93QW5pbWF0aW9uJyxcbiAgICAgICAgJ3Nob3dBdmF0YXJzJyxcbiAgICAgICAgJ3Nob3dCdWxsZXQnLFxuICAgICAgICAnc2hvd0N1cnJlbnRUaW1lJyxcbiAgICAgICAgJ3Nob3dIZWFkZXJBdmF0YXJzJyxcbiAgICAgICAgJ3Nob3dSZXNvdXJjZUF2YXRhcnMnLFxuICAgICAgICAnc2hvd1RpbWUnLFxuICAgICAgICAnc2hvd1Rvb2x0aXBXaGVuRGlzYWJsZWQnLFxuICAgICAgICAnc2l4TWludXRlVGlja3MnLFxuICAgICAgICAnc25hcFJlbGF0aXZlVG9FdmVudFN0YXJ0RGF0ZScsXG4gICAgICAgICdzcGFuJyxcbiAgICAgICAgJ3N0YWNrTXVsdGlEYXlFdmVudHMnLFxuICAgICAgICAnc3RhcnREYXRlJyxcbiAgICAgICAgJ3N0YXRlZnVsJyxcbiAgICAgICAgJ3N0YXRlZnVsRXZlbnRzJyxcbiAgICAgICAgJ3N0YXRlSWQnLFxuICAgICAgICAnc3RhdGVQcm92aWRlcicsXG4gICAgICAgICdzdHJpY3RSZWNvcmRNYXBwaW5nJyxcbiAgICAgICAgJ3N0cmlwcycsXG4gICAgICAgICdzeW5jQ2FsZW5kYXJEYXRlJyxcbiAgICAgICAgJ3N5bmNWaWV3RGF0ZScsXG4gICAgICAgICd0YWInLFxuICAgICAgICAndGFiQmFySXRlbXMnLFxuICAgICAgICAndGFnJyxcbiAgICAgICAgJ3RiYXInLFxuICAgICAgICAndGV4dEFsaWduJyxcbiAgICAgICAgJ3RpY2tSZW5kZXJlcicsXG4gICAgICAgICd0aW1lQXhpc1RpbWVGb3JtYXQnLFxuICAgICAgICAndGltZUZvcm1hdCcsXG4gICAgICAgICd0aW1lU25hcFR5cGUnLFxuICAgICAgICAndGl0bGUnLFxuICAgICAgICAndG9vbHMnLFxuICAgICAgICAndG9vbHRpcCcsXG4gICAgICAgICd0cmFwRm9jdXMnLFxuICAgICAgICAndHlwZScsXG4gICAgICAgICd1aScsXG4gICAgICAgICd2aXNpYmxlU3RhcnRUaW1lJyxcbiAgICAgICAgJ3dlZWtTdGFydERheScsXG4gICAgICAgICd3ZWlnaHQnLFxuICAgICAgICAnd2lkdGgnLFxuICAgICAgICAneCcsXG4gICAgICAgICd5JyxcbiAgICAgICAgJ3pvb21Pbk1vdXNlV2hlZWwnXG4gICAgXSk7XG5cbiAgICBwcml2YXRlIHN0YXRpYyBicnludHVtQ29uZmlnc09ubHk6IHN0cmluZ1tdID0gW1xuICAgICAgICAnYWN0aW9uQnV0dG9ucycsXG4gICAgICAgICdhY3RpdmF0aW9uS2V5JyxcbiAgICAgICAgJ2Fkb3B0JyxcbiAgICAgICAgJ2FsaWduJyxcbiAgICAgICAgJ2FsbERheUV2ZW50cycsXG4gICAgICAgICdhbmNob3InLFxuICAgICAgICAnYXJpYURlc2NyaXB0aW9uJyxcbiAgICAgICAgJ2FyaWFMYWJlbCcsXG4gICAgICAgICdiYmFyJyxcbiAgICAgICAgJ2JvZHlDbHMnLFxuICAgICAgICAnYnViYmxlRXZlbnRzJyxcbiAgICAgICAgJ2NlbnRlcmVkJyxcbiAgICAgICAgJ2NvbGxhcHNpYmxlJyxcbiAgICAgICAgJ2NvbG9yJyxcbiAgICAgICAgJ2NvbHVtbkhlYWRlclJlbmRlcmVyJyxcbiAgICAgICAgJ2NvbmZpZycsXG4gICAgICAgICdjb25zdHJhaW5UbycsXG4gICAgICAgICdjb250ZW50RWxlbWVudENscycsXG4gICAgICAgICdjdXJyZW50VGltZUluZGljYXRvclJlbmRlcmVyJyxcbiAgICAgICAgJ2RhdGFGaWVsZCcsXG4gICAgICAgICdkYXlDZWxsUmVuZGVyZXInLFxuICAgICAgICAnZGF5SGVhZGVyUmVuZGVyZXInLFxuICAgICAgICAnZGF5TmFtZUZvcm1hdCcsXG4gICAgICAgICdkYXlTdGFydFNoaWZ0JyxcbiAgICAgICAgJ2RlZmF1bHRCaW5kUHJvcGVydHknLFxuICAgICAgICAnZGVmYXVsdEZvY3VzJyxcbiAgICAgICAgJ2RlZmF1bHRzJyxcbiAgICAgICAgJ2Rlc2NyaXB0aW9uUmVuZGVyZXInLFxuICAgICAgICAnZGV0ZWN0Q1NTQ29tcGF0aWJpbGl0eUlzc3VlcycsXG4gICAgICAgICdkb2NrJyxcbiAgICAgICAgJ2RyYWdnYWJsZScsXG4gICAgICAgICdkcmF3ZXInLFxuICAgICAgICAnZWxlbWVudEF0dHJpYnV0ZXMnLFxuICAgICAgICAnZW5kRGF0ZScsXG4gICAgICAgICdldmVudEZpbHRlcicsXG4gICAgICAgICdldmVudEhlYWRlclJlbmRlcmVyJyxcbiAgICAgICAgJ2V2ZW50TGF5b3V0JyxcbiAgICAgICAgJ2V2ZW50UmVuZGVyZXInLFxuICAgICAgICAnZXZlbnRTb3J0ZXInLFxuICAgICAgICAnZXZlbnRTcGFjaW5nJyxcbiAgICAgICAgJ2Zsb2F0aW5nJyxcbiAgICAgICAgJ2Zvb3RlcicsXG4gICAgICAgICdnZXRQcmltYXJ5UmVzb3VyY2UnLFxuICAgICAgICAnaGVhZGVyJyxcbiAgICAgICAgJ2hpZGVBbmltYXRpb24nLFxuICAgICAgICAnaGlkZVdoZW5FbXB0eScsXG4gICAgICAgICdpY29uJyxcbiAgICAgICAgJ2lnbm9yZVBhcmVudFJlYWRPbmx5JyxcbiAgICAgICAgJ2l0ZW1DbHMnLFxuICAgICAgICAnbGF6eUl0ZW1zJyxcbiAgICAgICAgJ2xpc3RlbmVycycsXG4gICAgICAgICdsb2NhbGVDbGFzcycsXG4gICAgICAgICdsb2NhbGl6YWJsZScsXG4gICAgICAgICdsb2NhbGl6YWJsZVByb3BlcnRpZXMnLFxuICAgICAgICAnbWFza0RlZmF1bHRzJyxcbiAgICAgICAgJ21hc2tlZCcsXG4gICAgICAgICdtYXhBbGxEYXlIZWlnaHQnLFxuICAgICAgICAnbW9uaXRvclJlc2l6ZScsXG4gICAgICAgICduYW1lZEl0ZW1zJyxcbiAgICAgICAgJ292ZXJmbG93UG9wdXAnLFxuICAgICAgICAnb3duZXInLFxuICAgICAgICAncG9zaXRpb25lZCcsXG4gICAgICAgICdwcmV2ZW50VG9vbHRpcE9uVG91Y2gnLFxuICAgICAgICAncmVsYXlTdG9yZUV2ZW50cycsXG4gICAgICAgICdyZXNvdXJjZUltYWdlUGF0aCcsXG4gICAgICAgICdyZXNwb25zaXZlJyxcbiAgICAgICAgJ3Jlc3BvbnNpdmVSb290JyxcbiAgICAgICAgJ3Jlc3BvbnNpdmVTdGF0ZScsXG4gICAgICAgICdyZXNwb25zaXZlVGFyZ2V0JyxcbiAgICAgICAgJ3JpcHBsZScsXG4gICAgICAgICdyb290RWxlbWVudCcsXG4gICAgICAgICdzY3JvbGxBY3Rpb24nLFxuICAgICAgICAnc2VsZWN0b3JCdXR0b24nLFxuICAgICAgICAnc2VsZWN0b3JNZW51SXRlbScsXG4gICAgICAgICdzaG9ydEV2ZW50Q2xzJyxcbiAgICAgICAgJ3Nob3J0RXZlbnREdXJhdGlvbicsXG4gICAgICAgICdzaG93QWxsRGF5SGVhZGVyJyxcbiAgICAgICAgJ3Nob3dBbmltYXRpb24nLFxuICAgICAgICAnc2hvd0J1bGxldCcsXG4gICAgICAgICdzaG93SGVhZGVyQXZhdGFycycsXG4gICAgICAgICdzaG93UmVzb3VyY2VBdmF0YXJzJyxcbiAgICAgICAgJ3Nob3dUb29sdGlwV2hlbkRpc2FibGVkJyxcbiAgICAgICAgJ3N0YXJ0RGF0ZScsXG4gICAgICAgICdzdGF0ZWZ1bCcsXG4gICAgICAgICdzdGF0ZWZ1bEV2ZW50cycsXG4gICAgICAgICdzdGF0ZUlkJyxcbiAgICAgICAgJ3N0YXRlUHJvdmlkZXInLFxuICAgICAgICAnc3RyaXBzJyxcbiAgICAgICAgJ3RhYicsXG4gICAgICAgICd0YWJCYXJJdGVtcycsXG4gICAgICAgICd0YWcnLFxuICAgICAgICAndGJhcicsXG4gICAgICAgICd0ZXh0QWxpZ24nLFxuICAgICAgICAndGlja1JlbmRlcmVyJyxcbiAgICAgICAgJ3RpbWVBeGlzVGltZUZvcm1hdCcsXG4gICAgICAgICd0aW1lRm9ybWF0JyxcbiAgICAgICAgJ3RyYXBGb2N1cycsXG4gICAgICAgICd0eXBlJyxcbiAgICAgICAgJ3VpJyxcbiAgICAgICAgJ3Zpc2libGVTdGFydFRpbWUnLFxuICAgICAgICAnd2Vla1N0YXJ0RGF5JyxcbiAgICAgICAgJ3dlaWdodCcsXG4gICAgICAgICd6b29tT25Nb3VzZVdoZWVsJ1xuICAgIF07XG5cbiAgICBwcml2YXRlIHN0YXRpYyBicnludHVtUHJvcHM6IHN0cmluZ1tdID0gQnJ5bnR1bURheVJlc291cmNlVmlld0NvbXBvbmVudC5icnludHVtRmVhdHVyZU5hbWVzLmNvbmNhdChbXG4gICAgICAgICdhbGlnblNlbGYnLFxuICAgICAgICAnYWxsb3dEcmFnQ3JlYXRlJyxcbiAgICAgICAgJ2FsbG93RHJhZ01vdmUnLFxuICAgICAgICAnYWxsb3dEcmFnUmVzaXplJyxcbiAgICAgICAgJ2FsbG93Wm9vbVVuZGVyZmxvdycsXG4gICAgICAgICdhbmNob3JTaXplJyxcbiAgICAgICAgJ2FuaW1hdGVUaW1lU2hpZnQnLFxuICAgICAgICAnYXBwZW5kVG8nLFxuICAgICAgICAnYXV0b0NyZWF0ZScsXG4gICAgICAgICdjYWxsT25GdW5jdGlvbnMnLFxuICAgICAgICAnY2F0Y2hFdmVudEhhbmRsZXJFeGNlcHRpb25zJyxcbiAgICAgICAgJ2NscycsXG4gICAgICAgICdjb2xsYXBzZWQnLFxuICAgICAgICAnY29sdW1uJyxcbiAgICAgICAgJ2NvbXBhY3RIZWFkZXInLFxuICAgICAgICAnY29yZUhvdXJzJyxcbiAgICAgICAgJ2Rhc2hlZFN1YnRpY2tzJyxcbiAgICAgICAgJ2RhdGFzZXQnLFxuICAgICAgICAnZGF0ZScsXG4gICAgICAgICdkYXRlRmlsdGVyJyxcbiAgICAgICAgJ2RhdGVGb3JtYXQnLFxuICAgICAgICAnZGF0ZVNlcGFyYXRvcicsXG4gICAgICAgICdkYXlDZWxsQ2xzJyxcbiAgICAgICAgJ2RheUVuZFRpbWUnLFxuICAgICAgICAnZGF5U3RhcnRUaW1lJyxcbiAgICAgICAgJ2RlZmF1bHRTY3JvbGxPcHRpb25zJyxcbiAgICAgICAgJ2Rlc2NyaXB0aW9uRm9ybWF0JyxcbiAgICAgICAgJ2Rpc2FibGVkJyxcbiAgICAgICAgJ2RyYWdVbml0JyxcbiAgICAgICAgJ2V4dGVuZEFsbERheUVuZERheScsXG4gICAgICAgICdleHRyYURhdGEnLFxuICAgICAgICAnZmlsdGVyRXZlbnRSZXNvdXJjZXMnLFxuICAgICAgICAnZmlyc3RWaXNpYmxlQ2VsbCcsXG4gICAgICAgICdmaXJzdFZpc2libGVEYXRlJyxcbiAgICAgICAgJ2ZpdEhvdXJzJyxcbiAgICAgICAgJ2ZpeGVkRHVyYXRpb24nLFxuICAgICAgICAnZmxleCcsXG4gICAgICAgICdmb2N1c1Zpc2libGUnLFxuICAgICAgICAnaGFzQ2hhbmdlcycsXG4gICAgICAgICdoZWlnaHQnLFxuICAgICAgICAnaGlkZGVuJyxcbiAgICAgICAgJ2hpZGVFbXB0eURheXMnLFxuICAgICAgICAnaGlkZUVtcHR5UmVzb3VyY2VzJyxcbiAgICAgICAgJ2hpZGVOb25Xb3JraW5nRGF5cycsXG4gICAgICAgICdoaWRlUmVzb3VyY2VOYW1lV2hlbk5hcnJvdycsXG4gICAgICAgICdob3Jpem9udGFsU2Nyb2xsZXInLFxuICAgICAgICAnaG91ckhlaWdodCcsXG4gICAgICAgICdob3VySGVpZ2h0QnJlYWtwb2ludHMnLFxuICAgICAgICAnaWQnLFxuICAgICAgICAnaW5jcmVtZW50JyxcbiAgICAgICAgJ2lucHV0RmllbGRBbGlnbicsXG4gICAgICAgICdpbnNlcnRCZWZvcmUnLFxuICAgICAgICAnaW5zZXJ0Rmlyc3QnLFxuICAgICAgICAnaW50ZXJEYXlEcmFnJyxcbiAgICAgICAgJ2ludGVyRGF5UmVzaXplJyxcbiAgICAgICAgJ2lzU2V0dGluZ1ZhbHVlcycsXG4gICAgICAgICdpc1ZhbGlkJyxcbiAgICAgICAgJ2l0ZW1zJyxcbiAgICAgICAgJ2tleU1hcCcsXG4gICAgICAgICdsYWJlbFBvc2l0aW9uJyxcbiAgICAgICAgJ2xhc3RWaXNpYmxlQ2VsbCcsXG4gICAgICAgICdsYXN0VmlzaWJsZURhdGUnLFxuICAgICAgICAnbGF5b3V0JyxcbiAgICAgICAgJ2xheW91dFN0eWxlJyxcbiAgICAgICAgJ21hcmdpbicsXG4gICAgICAgICdtYXhEYXRlJyxcbiAgICAgICAgJ21heEhlaWdodCcsXG4gICAgICAgICdtYXhpbWl6ZU9uTW9iaWxlJyxcbiAgICAgICAgJ21heFdpZHRoJyxcbiAgICAgICAgJ21pbkRhdGUnLFxuICAgICAgICAnbWluRGF5V2lkdGgnLFxuICAgICAgICAnbWluRXZlbnRIZWlnaHQnLFxuICAgICAgICAnbWluSGVpZ2h0JyxcbiAgICAgICAgJ21pbkhvdXJIZWlnaHQnLFxuICAgICAgICAnbWluUmVzb3VyY2VXaWR0aCcsXG4gICAgICAgICdtaW5XaWR0aCcsXG4gICAgICAgICdub01hdGNoaW5nRGF0ZXMnLFxuICAgICAgICAnbm9uV29ya2luZ0RheXMnLFxuICAgICAgICAncGFyZW50JyxcbiAgICAgICAgJ3Bhc3RFdmVudENscycsXG4gICAgICAgICdyYW5nZScsXG4gICAgICAgICdyZWFkT25seScsXG4gICAgICAgICdyZWNvcmQnLFxuICAgICAgICAncmVuZGl0aW9uJyxcbiAgICAgICAgJ3Jlc291cmNlRGF0ZUZpbHRlcicsXG4gICAgICAgICdydGwnLFxuICAgICAgICAnc2Nyb2xsYWJsZScsXG4gICAgICAgICdzaGlmdEluY3JlbWVudCcsXG4gICAgICAgICdzaG9ydERhdGVGb3JtYXQnLFxuICAgICAgICAnc2hvcnREYXRlVGltZUZvcm1hdCcsXG4gICAgICAgICdzaG93QXZhdGFycycsXG4gICAgICAgICdzaG93Q3VycmVudFRpbWUnLFxuICAgICAgICAnc2hvd1RpbWUnLFxuICAgICAgICAnc2l4TWludXRlVGlja3MnLFxuICAgICAgICAnc25hcFJlbGF0aXZlVG9FdmVudFN0YXJ0RGF0ZScsXG4gICAgICAgICdzcGFuJyxcbiAgICAgICAgJ3N0YWNrTXVsdGlEYXlFdmVudHMnLFxuICAgICAgICAnc3RhdGUnLFxuICAgICAgICAnc3RyaWN0UmVjb3JkTWFwcGluZycsXG4gICAgICAgICdzeW5jQ2FsZW5kYXJEYXRlJyxcbiAgICAgICAgJ3N5bmNWaWV3RGF0ZScsXG4gICAgICAgICd0aW1lU25hcFR5cGUnLFxuICAgICAgICAndGl0bGUnLFxuICAgICAgICAndG9vbHMnLFxuICAgICAgICAndG9vbHRpcCcsXG4gICAgICAgICd2YWx1ZXMnLFxuICAgICAgICAnd2lkdGgnLFxuICAgICAgICAneCcsXG4gICAgICAgICd5J1xuICAgIF0pO1xuXG4gICAgcHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmO1xuICAgIHB1YmxpYyBpbnN0YW5jZSE6IERheVJlc291cmNlVmlldztcblxuICAgIHByaXZhdGUgYnJ5bnR1bUNvbmZpZyA9IHtcbiAgICAgICAgYWRvcHQgICAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgYXBwZW5kVG8gICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgaHJlZiAgICAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgYW5ndWxhckNvbXBvbmVudCA6IHRoaXMsXG4gICAgICAgIGZlYXR1cmVzICAgICAgICAgOiB7fSxcbiAgICAgICAgbGlzdGVuZXJzICAgICAgICA6IHt9XG4gICAgfTtcblxuICAgIGNvbnN0cnVjdG9yKGVsZW1lbnQ6IEVsZW1lbnRSZWYpIHtcbiAgICAgICAgdGhpcy5lbGVtZW50UmVmID0gZWxlbWVudDtcbiAgICB9XG5cbiAgICAvLyBDb25maWdzIG9ubHlcbiAgICBASW5wdXQoKSBhY3Rpb25CdXR0b25zICAgICAgICAgICAgICAgICEgOiBBY3Rpb25CdXR0b25zQ29uZmlnW118UmVjb3JkPHN0cmluZywgQWN0aW9uQnV0dG9uc0NvbmZpZz47XG4gICAgQElucHV0KCkgYWN0aXZhdGlvbktleSAgICAgICAgICAgICAgICAhIDogc3RyaW5nO1xuICAgIEBJbnB1dCgpIGFkb3B0ICAgICAgICAgICAgICAgICAgICAgICAgISA6IEhUTUxFbGVtZW50fHN0cmluZztcbiAgICBASW5wdXQoKSBhbGlnbiAgICAgICAgICAgICAgICAgICAgICAgICEgOiBBbGlnblNwZWN8c3RyaW5nO1xuICAgIEBJbnB1dCgpIGFsbERheUV2ZW50cyAgICAgICAgICAgICAgICAgISA6IENhbGVuZGFyUm93fENhbGVuZGFyUm93Q29uZmlnfG51bGw7XG4gICAgQElucHV0KCkgYW5jaG9yICAgICAgICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBhcmlhRGVzY3JpcHRpb24gICAgICAgICAgICAgICEgOiBzdHJpbmc7XG4gICAgQElucHV0KCkgYXJpYUxhYmVsICAgICAgICAgICAgICAgICAgICAhIDogc3RyaW5nO1xuICAgIEBJbnB1dCgpIGJiYXIgICAgICAgICAgICAgICAgICAgICAgICAgISA6IChDYWxlbmRhckNvbnRhaW5lckl0ZW1Db25maWd8c3RyaW5nKVtdfFRvb2xiYXJDb25maWd8UGFnaW5nVG9vbGJhckNvbmZpZ3xudWxsO1xuICAgIEBJbnB1dCgpIGJvZHlDbHMgICAgICAgICAgICAgICAgICAgICAgISA6IHN0cmluZ3xvYmplY3Q7XG4gICAgQElucHV0KCkgYnViYmxlRXZlbnRzICAgICAgICAgICAgICAgICAhIDogb2JqZWN0O1xuICAgIEBJbnB1dCgpIGNlbnRlcmVkICAgICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgY29sbGFwc2libGUgICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbnxQYW5lbENvbGxhcHNlckNvbmZpZ3xQYW5lbENvbGxhcHNlck92ZXJsYXlDb25maWc7XG4gICAgQElucHV0KCkgY29sb3IgICAgICAgICAgICAgICAgICAgICAgICAhIDogc3RyaW5nO1xuICAgIEBJbnB1dCgpIGNvbHVtbkhlYWRlclJlbmRlcmVyICAgICAgICAgISA6ICgoY2VsbERhdGE6IERheUNlbGxXaXRoRXZlbnRzKSA9PiBzdHJpbmd8b2JqZWN0KXxzdHJpbmc7XG4gICAgQElucHV0KCkgY29uZmlnICAgICAgICAgICAgICAgICAgICAgICAhIDogb2JqZWN0O1xuICAgIEBJbnB1dCgpIGNvbnN0cmFpblRvICAgICAgICAgICAgICAgICAgISA6IEhUTUxFbGVtZW50fFdpZGdldHxSZWN0YW5nbGU7XG4gICAgQElucHV0KCkgY29udGVudEVsZW1lbnRDbHMgICAgICAgICAgICAhIDogc3RyaW5nfG9iamVjdDtcbiAgICBASW5wdXQoKSBjdXJyZW50VGltZUluZGljYXRvclJlbmRlcmVyICEgOiAoKCkgPT4gRG9tQ29uZmlnKXxzdHJpbmc7XG4gICAgQElucHV0KCkgZGF0YUZpZWxkICAgICAgICAgICAgICAgICAgICAhIDogc3RyaW5nO1xuICAgIEBJbnB1dCgpIGRheUNlbGxSZW5kZXJlciAgICAgICAgICAgICAgISA6ICgoZG9tQ29uZmlnOiB7IGNsYXNzTmFtZTogb2JqZWN0LCBzdHlsZTogb2JqZWN0LCBkYXRhc2V0OiBvYmplY3QgfSwgY2hpbGRyZW46IERvbUNvbmZpZ1tdLCBjZWxsRGF0YTogRGF5Q2VsbCkgPT4gc3RyaW5nKXxzdHJpbmc7XG4gICAgQElucHV0KCkgZGF5SGVhZGVyUmVuZGVyZXIgICAgICAgICAgICAhIDogKChoZWFkZXJEb21Db25maWc6IHsgY2xhc3NOYW1lOiBvYmplY3QsIHN0eWxlOiBvYmplY3QsIGRhdGFzZXQ6IG9iamVjdCwgY2hpbGRyZW46IERvbUNvbmZpZ1tdIH0sIGNlbGxEYXRhOiBEYXlDZWxsKSA9PiBzdHJpbmcpfHN0cmluZztcbiAgICBASW5wdXQoKSBkYXlOYW1lRm9ybWF0ICAgICAgICAgICAgICAgICEgOiBzdHJpbmd8KChkYXRlOiBEYXRlKSA9PiBzdHJpbmcpO1xuICAgIEBJbnB1dCgpIGRheVN0YXJ0U2hpZnQgICAgICAgICAgICAgICAgISA6IHN0cmluZ3xudW1iZXI7XG4gICAgQElucHV0KCkgZGVmYXVsdEJpbmRQcm9wZXJ0eSAgICAgICAgICAhIDogc3RyaW5nO1xuICAgIEBJbnB1dCgpIGRlZmF1bHRGb2N1cyAgICAgICAgICAgICAgICAgISA6ICgod2lkZ2V0OiBXaWRnZXQpID0+IGJvb2xlYW4pfHN0cmluZztcbiAgICBASW5wdXQoKSBkZWZhdWx0cyAgICAgICAgICAgICAgICAgICAgICEgOiBDYWxlbmRhckNvbnRhaW5lckl0ZW1Db25maWc7XG4gICAgQElucHV0KCkgZGVzY3JpcHRpb25SZW5kZXJlciAgICAgICAgICAhIDogKHZpZXc6IFdpZGdldCkgPT4gc3RyaW5nO1xuICAgIEBJbnB1dCgpIGRldGVjdENTU0NvbXBhdGliaWxpdHlJc3N1ZXMgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgZG9jayAgICAgICAgICAgICAgICAgICAgICAgICAhIDogJ3RvcCd8J2JvdHRvbSd8J2xlZnQnfCdyaWdodCd8J3N0YXJ0J3wnZW5kJ3wnaGVhZGVyJ3wncHJlLWhlYWRlcid8b2JqZWN0O1xuICAgIEBJbnB1dCgpIGRyYWdnYWJsZSAgICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW58e1xuICAgICAgICBoYW5kbGVTZWxlY3Rvcj86IHN0cmluZ1xuICAgIH07XG4gICAgQElucHV0KCkgZHJhd2VyICAgICAgICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbnx7c2lkZT86ICdzdGFydCd8J2xlZnQnfCdlbmQnfCdyaWdodCd8J3RvcCd8J2JvdHRvbScsIHNpemU/OiBzdHJpbmd8bnVtYmVyLCBpbmxpbmU/OiBib29sZWFuLCBhdXRvQ2xvc2U6IHsgbW91c2Vkb3duPzogYm9vbGVhbnxzdHJpbmcsIGZvY3Vzb3V0PzogYm9vbGVhbnxzdHJpbmcsIG1vdXNlb3V0Pzogc3RyaW5nIH0sIGF1dG9DbG9zZURlbGF5PzogbnVtYmVyfTtcbiAgICBASW5wdXQoKSBlbGVtZW50QXR0cmlidXRlcyAgICAgICAgICAgICEgOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmd8bnVsbD47XG4gICAgQElucHV0KCkgZW5kRGF0ZSAgICAgICAgICAgICAgICAgICAgICAhIDogRGF0ZTtcbiAgICBASW5wdXQoKSBldmVudEZpbHRlciAgICAgICAgICAgICAgICAgICEgOiAoKGV2ZW50OiBFdmVudE1vZGVsKSA9PiBib29sZWFuKXxzdHJpbmc7XG4gICAgQElucHV0KCkgZXZlbnRIZWFkZXJSZW5kZXJlciAgICAgICAgICAhIDogKChkZXRhaWw6IHsgdmlldzogQ2FsZW5kYXJWaWV3LCBldmVudFJlY29yZDogRXZlbnRNb2RlbCwgcmVzb3VyY2VSZWNvcmQ6IFJlc291cmNlTW9kZWwsIHJlbmRlckRhdGE6IHsgc3R5bGU6IG9iamVjdCwgY2xzOiBvYmplY3QsIGljb25TdHlsZTogb2JqZWN0LCBpY29uQ2xzOiBvYmplY3QsIGV2ZW50Q29sb3I6IHN0cmluZywgZGF0YXNldDogb2JqZWN0LCBzb2xpZEJhcjogYm9vbGVhbiwgYm9keUNvbG9yOiBzdHJpbmcgfSwgc2hvd0J1bGxldDogYm9vbGVhbiB9KSA9PiBEb21Db25maWd8RG9tQ29uZmlnW118c3RyaW5nfHZvaWQpfHN0cmluZztcbiAgICBASW5wdXQoKSBldmVudExheW91dCAgICAgICAgICAgICAgICAgICEgOiBGbHVpZERheUxheW91dENvbmZpZztcbiAgICBASW5wdXQoKSBldmVudFJlbmRlcmVyICAgICAgICAgICAgICAgICEgOiAoKGRldGFpbDogeyB2aWV3OiBDYWxlbmRhclZpZXcsIGV2ZW50UmVjb3JkOiBFdmVudE1vZGVsLCByZXNvdXJjZVJlY29yZDogUmVzb3VyY2VNb2RlbCwgcmVuZGVyRGF0YTogeyBzdHlsZTogb2JqZWN0LCBjbHM6IG9iamVjdCwgaWNvblN0eWxlOiBvYmplY3QsIGljb25DbHM6IG9iamVjdCwgZXZlbnRDb2xvcjogc3RyaW5nLCBldmVudEJhY2tncm91bmQ6IHN0cmluZywgdGV4dENvbG9yOiBzdHJpbmcsIGV2ZW50SW5uZXJTdHlsZTogb2JqZWN0LCBkYXRhc2V0OiBvYmplY3QsIHNvbGlkQmFyOiBib29sZWFuLCBib2R5Q29sb3I6IHN0cmluZywgc2hvd0J1bGxldDogYm9vbGVhbiB9IH0pID0+IERvbUNvbmZpZ3xEb21Db25maWdbXXxzdHJpbmd8dm9pZCl8c3RyaW5nO1xuICAgIEBJbnB1dCgpIGV2ZW50U29ydGVyICAgICAgICAgICAgICAgICAgISA6IChsaHM6IEV2ZW50TW9kZWx8RXZlbnRCYXIsIHJoczogRXZlbnRNb2RlbHxFdmVudEJhcikgPT4gbnVtYmVyO1xuICAgIEBJbnB1dCgpIGV2ZW50U3BhY2luZyAgICAgICAgICAgICAgICAgISA6IG51bWJlcjtcbiAgICBASW5wdXQoKSBmbG9hdGluZyAgICAgICAgICAgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGZvb3RlciAgICAgICAgICAgICAgICAgICAgICAgISA6IHtcbiAgICAgICAgZG9jaz86ICd0b3AnfCdyaWdodCd8J2JvdHRvbSd8J2xlZnQnfCdzdGFydCd8J2VuZCdcbiAgICAgICAgaHRtbD86IHN0cmluZ1xuICAgICAgICBjbHM/OiBzdHJpbmdcbiAgICB9fHN0cmluZztcbiAgICBASW5wdXQoKSBnZXRQcmltYXJ5UmVzb3VyY2UgICAgICAgICAgICEgOiAoKGV2ZW50UmVjb3JkOiBFdmVudE1vZGVsKSA9PiBSZXNvdXJjZU1vZGVsKXxzdHJpbmc7XG4gICAgQElucHV0KCkgaGVhZGVyICAgICAgICAgICAgICAgICAgICAgICAhIDogc3RyaW5nfGJvb2xlYW58UGFuZWxIZWFkZXI7XG4gICAgQElucHV0KCkgaGlkZUFuaW1hdGlvbiAgICAgICAgICAgICAgICAhIDogYm9vbGVhbnxvYmplY3Q7XG4gICAgQElucHV0KCkgaGlkZVdoZW5FbXB0eSAgICAgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBpY29uICAgICAgICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmd8RG9tQ29uZmlnO1xuICAgIEBJbnB1dCgpIGlnbm9yZVBhcmVudFJlYWRPbmx5ICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgaXRlbUNscyAgICAgICAgICAgICAgICAgICAgICAhIDogc3RyaW5nO1xuICAgIEBJbnB1dCgpIGxhenlJdGVtcyAgICAgICAgICAgICAgICAgICAgISA6IFJlY29yZDxzdHJpbmcsIENhbGVuZGFyQ29udGFpbmVySXRlbUNvbmZpZz58Q2FsZW5kYXJDb250YWluZXJJdGVtQ29uZmlnW118V2lkZ2V0W107XG4gICAgQElucHV0KCkgbGlzdGVuZXJzICAgICAgICAgICAgICAgICAgICAhIDogRGF5UmVzb3VyY2VWaWV3TGlzdGVuZXJzO1xuICAgIEBJbnB1dCgpIGxvY2FsZUNsYXNzICAgICAgICAgICAgICAgICAgISA6IHR5cGVvZiBCYXNlO1xuICAgIEBJbnB1dCgpIGxvY2FsaXphYmxlICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgbG9jYWxpemFibGVQcm9wZXJ0aWVzICAgICAgICAhIDogc3RyaW5nW107XG4gICAgQElucHV0KCkgbWFza0RlZmF1bHRzICAgICAgICAgICAgICAgICAhIDogTWFza0NvbmZpZztcbiAgICBASW5wdXQoKSBtYXNrZWQgICAgICAgICAgICAgICAgICAgICAgICEgOiBib29sZWFufHN0cmluZ3xNYXNrQ29uZmlnO1xuICAgIEBJbnB1dCgpIG1heEFsbERheUhlaWdodCAgICAgICAgICAgICAgISA6IG51bWJlcnxzdHJpbmc7XG4gICAgQElucHV0KCkgbW9uaXRvclJlc2l6ZSAgICAgICAgICAgICAgICAhIDogYm9vbGVhbnx7XG4gICAgICAgIGltbWVkaWF0ZT86IGJvb2xlYW5cbiAgICB9O1xuICAgIEBJbnB1dCgpIG5hbWVkSXRlbXMgICAgICAgICAgICAgICAgICAgISA6IFJlY29yZDxzdHJpbmcsIENhbGVuZGFyQ29udGFpbmVySXRlbUNvbmZpZz47XG4gICAgQElucHV0KCkgb3ZlcmZsb3dQb3B1cCAgICAgICAgICAgICAgICAhIDogT3ZlcmZsb3dQb3B1cENvbmZpZztcbiAgICBASW5wdXQoKSBvd25lciAgICAgICAgICAgICAgICAgICAgICAgICEgOiBXaWRnZXR8YW55O1xuICAgIEBJbnB1dCgpIHBvc2l0aW9uZWQgICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgcHJldmVudFRvb2x0aXBPblRvdWNoICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSByZWxheVN0b3JlRXZlbnRzICAgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIHJlc291cmNlSW1hZ2VQYXRoICAgICAgICAgICAgISA6IHN0cmluZztcbiAgICBASW5wdXQoKSByZXNwb25zaXZlICAgICAgICAgICAgICAgICAgICEgOiBvYmplY3Q7XG4gICAgQElucHV0KCkgcmVzcG9uc2l2ZVJvb3QgICAgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSByZXNwb25zaXZlU3RhdGUgICAgICAgICAgICAgICEgOiBzdHJpbmc7XG4gICAgQElucHV0KCkgcmVzcG9uc2l2ZVRhcmdldCAgICAgICAgICAgICAhIDogc3RyaW5nfFdpZGdldDtcbiAgICBASW5wdXQoKSByaXBwbGUgICAgICAgICAgICAgICAgICAgICAgICEgOiBib29sZWFufHtcbiAgICAgICAgZGVsZWdhdGU/OiBzdHJpbmdcbiAgICAgICAgY29sb3I/OiBzdHJpbmdcbiAgICAgICAgcmFkaXVzPzogbnVtYmVyXG4gICAgICAgIGNsaXA/OiBzdHJpbmdcbiAgICB9O1xuICAgIEBJbnB1dCgpIHJvb3RFbGVtZW50ICAgICAgICAgICAgICAgICAgISA6IFNoYWRvd1Jvb3R8SFRNTEVsZW1lbnQ7XG4gICAgQElucHV0KCkgc2Nyb2xsQWN0aW9uICAgICAgICAgICAgICAgICAhIDogJ2hpZGUnfCdyZWFsaWduJ3xudWxsO1xuICAgIEBJbnB1dCgpIHNlbGVjdG9yQnV0dG9uICAgICAgICAgICAgICAgISA6IEJ1dHRvbkNvbmZpZztcbiAgICBASW5wdXQoKSBzZWxlY3Rvck1lbnVJdGVtICAgICAgICAgICAgICEgOiBNZW51SXRlbUNvbmZpZztcbiAgICBASW5wdXQoKSBzaG9ydEV2ZW50Q2xzICAgICAgICAgICAgICAgICEgOiBzdHJpbmc7XG4gICAgQElucHV0KCkgc2hvcnRFdmVudER1cmF0aW9uICAgICAgICAgICAhIDogc3RyaW5nfG51bWJlcjtcbiAgICBASW5wdXQoKSBzaG93QWxsRGF5SGVhZGVyICAgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIHNob3dBbmltYXRpb24gICAgICAgICAgICAgICAgISA6IGJvb2xlYW58b2JqZWN0O1xuICAgIEBJbnB1dCgpIHNob3dCdWxsZXQgICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW58e2Jhcj86IGJvb2xlYW4sIG5vQmFyPzogYm9vbGVhbn07XG4gICAgQElucHV0KCkgc2hvd0hlYWRlckF2YXRhcnMgICAgICAgICAgICAhIDogYm9vbGVhbnwnbGFzdCc7XG4gICAgQElucHV0KCkgc2hvd1Jlc291cmNlQXZhdGFycyAgICAgICAgICAhIDogYm9vbGVhbnxzdHJpbmc7XG4gICAgQElucHV0KCkgc2hvd1Rvb2x0aXBXaGVuRGlzYWJsZWQgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBzdGFydERhdGUgICAgICAgICAgICAgICAgICAgICEgOiBEYXRlO1xuICAgIEBJbnB1dCgpIHN0YXRlZnVsICAgICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW58b2JqZWN0fHN0cmluZ1tdO1xuICAgIEBJbnB1dCgpIHN0YXRlZnVsRXZlbnRzICAgICAgICAgICAgICAgISA6IG9iamVjdHxzdHJpbmdbXTtcbiAgICBASW5wdXQoKSBzdGF0ZUlkICAgICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmc7XG4gICAgQElucHV0KCkgc3RhdGVQcm92aWRlciAgICAgICAgICAgICAgICAhIDogU3RhdGVQcm92aWRlcjtcbiAgICBASW5wdXQoKSBzdHJpcHMgICAgICAgICAgICAgICAgICAgICAgICEgOiBSZWNvcmQ8c3RyaW5nLCBDYWxlbmRhckNvbnRhaW5lckl0ZW1Db25maWc+O1xuICAgIEBJbnB1dCgpIHRhYiAgICAgICAgICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW58VGFiQ29uZmlnO1xuICAgIEBJbnB1dCgpIHRhYkJhckl0ZW1zICAgICAgICAgICAgICAgICAgISA6IFRvb2xiYXJJdGVtc1tdfFdpZGdldFtdO1xuICAgIEBJbnB1dCgpIHRhZyAgICAgICAgICAgICAgICAgICAgICAgICAgISA6IHN0cmluZztcbiAgICBASW5wdXQoKSB0YmFyICAgICAgICAgICAgICAgICAgICAgICAgICEgOiAoQ2FsZW5kYXJDb250YWluZXJJdGVtQ29uZmlnfHN0cmluZylbXXxUb29sYmFyQ29uZmlnfFBhZ2luZ1Rvb2xiYXJDb25maWd8bnVsbDtcbiAgICBASW5wdXQoKSB0ZXh0QWxpZ24gICAgICAgICAgICAgICAgICAgICEgOiAnbGVmdCd8J2NlbnRlcid8J3JpZ2h0J3wnc3RhcnQnfCdlbmQnO1xuICAgIEBJbnB1dCgpIHRpY2tSZW5kZXJlciAgICAgICAgICAgICAgICAgISA6ICgodGlja0NvbnRleHQ6IHsgc3RhcnRUaW1lOiBEYXRlLCBlbmRUaW1lOiBEYXRlLCBldmVudHM6IEV2ZW50TW9kZWxbXSwgdGlja0luZGV4OiBudW1iZXIsIHN1YnRpY2tJbmRleDogbnVtYmVyLCBzdWJ0aWNrQ291bnQ6IG51bWJlciwgcmVzb3VyY2VSZWNvcmQ6IFJlc291cmNlTW9kZWwgfSkgPT4gRG9tQ29uZmlnKXxzdHJpbmc7XG4gICAgQElucHV0KCkgdGltZUF4aXNUaW1lRm9ybWF0ICAgICAgICAgICAhIDogc3RyaW5nfCgoZGF0ZTogRGF0ZSkgPT4gc3RyaW5nKTtcbiAgICBASW5wdXQoKSB0aW1lRm9ybWF0ICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmd8KChkYXRlOiBEYXRlKSA9PiBzdHJpbmcpO1xuICAgIEBJbnB1dCgpIHRyYXBGb2N1cyAgICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgdHlwZSAgICAgICAgICAgICAgICAgICAgICAgICAhIDogJ2RheXJlc291cmNlJztcbiAgICBASW5wdXQoKSB1aSAgICAgICAgICAgICAgICAgICAgICAgICAgICEgOiAncGxhaW4nfCd0b29sYmFyJ3xzdHJpbmd8b2JqZWN0O1xuICAgIEBJbnB1dCgpIHZpc2libGVTdGFydFRpbWUgICAgICAgICAgICAgISA6IHN0cmluZ3xudW1iZXJ8e1xuICAgICAgICB0aW1lPzogc3RyaW5nfG51bWJlclxuICAgICAgICBibG9jaz86ICdzdGFydCd8J2VuZCd8J2NlbnRlcid8J25lYXJlc3QnXG4gICAgICAgIGVkZ2VPZmZzZXQ/OiBudW1iZXJcbiAgICAgICAgYW5pbWF0ZT86IG9iamVjdHxib29sZWFufG51bWJlclxuICAgICAgICBkdXJhdGlvbj86IG51bWJlclxuICAgICAgICBlYXNpbmc/OiBzdHJpbmdcbiAgICB9fG51bGw7XG4gICAgQElucHV0KCkgd2Vla1N0YXJ0RGF5ICAgICAgICAgICAgICAgICAhIDogbnVtYmVyO1xuICAgIEBJbnB1dCgpIHdlaWdodCAgICAgICAgICAgICAgICAgICAgICAgISA6IG51bWJlcjtcbiAgICBASW5wdXQoKSB6b29tT25Nb3VzZVdoZWVsICAgICAgICAgICAgICEgOiBib29sZWFufG51bWJlcjtcblxuICAgIC8vIENvbmZpZ3MgYW5kIHByb3BlcnRpZXNcbiAgICBASW5wdXQoKSBhbGlnblNlbGYgICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmc7XG4gICAgQElucHV0KCkgYWxsb3dEcmFnQ3JlYXRlICAgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBhbGxvd0RyYWdNb3ZlICAgICAgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGFsbG93RHJhZ1Jlc2l6ZSAgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgYWxsb3dab29tVW5kZXJmbG93ICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBhbmltYXRlVGltZVNoaWZ0ICAgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGFwcGVuZFRvICAgICAgICAgICAgICAgICAgICAgISA6IEhUTUxFbGVtZW50fHN0cmluZztcbiAgICBASW5wdXQoKSBhdXRvQ3JlYXRlICAgICAgICAgICAgICAgICAgICEgOiB7XG4gICAgICAgIGdlc3R1cmU/OiBzdHJpbmdcbiAgICAgICAgbmV3TmFtZT86IEZ1bmN0aW9ufHN0cmluZ1xuICAgICAgICBzdGVwPzogc3RyaW5nXG4gICAgICAgIHNuYXBUeXBlPzogJ3JvdW5kJ3wnY2VpbCd8J2Zsb29yJ1xuICAgICAgICBkdXJhdGlvbj86IHN0cmluZ1xuICAgICAgICBzdGFydEhvdXI/OiBudW1iZXJcbiAgICB9fHN0cmluZ3xib29sZWFuO1xuICAgIEBJbnB1dCgpIGNhbGxPbkZ1bmN0aW9ucyAgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgY2F0Y2hFdmVudEhhbmRsZXJFeGNlcHRpb25zICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBjbHMgICAgICAgICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmd8b2JqZWN0O1xuICAgIEBJbnB1dCgpIGNvbGxhcHNlZCAgICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgY29sdW1uICAgICAgICAgICAgICAgICAgICAgICAhIDogbnVtYmVyO1xuICAgIEBJbnB1dCgpIGNvbXBhY3RIZWFkZXIgICAgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgY29yZUhvdXJzICAgICAgICAgICAgICAgICAgICAhIDogb2JqZWN0fCgoZGF0ZTogRGF0ZSkgPT4gb2JqZWN0W10pfHN0cmluZztcbiAgICBASW5wdXQoKSBkYXNoZWRTdWJ0aWNrcyAgICAgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGRhdGFzZXQgICAgICAgICAgICAgICAgICAgICAgISA6IG9iamVjdHxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICAgIEBJbnB1dCgpIGRhdGUgICAgICAgICAgICAgICAgICAgICAgICAgISA6IERhdGU7XG4gICAgQElucHV0KCkgZGF0ZUZpbHRlciAgICAgICAgICAgICAgICAgICAhIDogKChjb250ZXh0OiBEYXlDZWxsKSA9PiBib29sZWFuKXxzdHJpbmc7XG4gICAgQElucHV0KCkgZGF0ZUZvcm1hdCAgICAgICAgICAgICAgICAgICAhIDogc3RyaW5nfCgoZGF0ZTogRGF0ZSkgPT4gc3RyaW5nKTtcbiAgICBASW5wdXQoKSBkYXRlU2VwYXJhdG9yICAgICAgICAgICAgICAgICEgOiBzdHJpbmc7XG4gICAgQElucHV0KCkgZGF5RW5kVGltZSAgICAgICAgICAgICAgICAgICAhIDogc3RyaW5nfG51bWJlcjtcbiAgICBASW5wdXQoKSBkYXlTdGFydFRpbWUgICAgICAgICAgICAgICAgICEgOiBzdHJpbmd8bnVtYmVyO1xuICAgIEBJbnB1dCgpIGRlZmF1bHRTY3JvbGxPcHRpb25zICAgICAgICAgISA6IEJyeW50dW1TY3JvbGxPcHRpb25zO1xuICAgIEBJbnB1dCgpIGRlc2NyaXB0aW9uRm9ybWF0ICAgICAgICAgICAgISA6IHN0cmluZ3xzdHJpbmdbXXxib29sZWFuW118KChkYXRlOiBEYXRlKSA9PiBzdHJpbmcpfEZ1bmN0aW9uW107XG4gICAgQElucHV0KCkgZGlzYWJsZWQgICAgICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbnwnaW5lcnQnO1xuICAgIEBJbnB1dCgpIGRyYWdVbml0ICAgICAgICAgICAgICAgICAgICAgISA6IHN0cmluZztcbiAgICBASW5wdXQoKSBleHRlbmRBbGxEYXlFbmREYXkgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGV4dHJhRGF0YSAgICAgICAgICAgICAgICAgICAgISA6IGFueTtcbiAgICBASW5wdXQoKSBmaWx0ZXJFdmVudFJlc291cmNlcyAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGZpdEhvdXJzICAgICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW58e1xuICAgICAgICBtaW5IZWlnaHQ/OiBudW1iZXJcbiAgICB9O1xuICAgIEBJbnB1dCgpIGZpeGVkRHVyYXRpb24gICAgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgZmxleCAgICAgICAgICAgICAgICAgICAgICAgICAhIDogbnVtYmVyfHN0cmluZztcbiAgICBASW5wdXQoKSBoZWlnaHQgICAgICAgICAgICAgICAgICAgICAgICEgOiBudW1iZXJ8c3RyaW5nO1xuICAgIEBJbnB1dCgpIGhpZGRlbiAgICAgICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgaGlkZUVtcHR5RGF5cyAgICAgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBoaWRlRW1wdHlSZXNvdXJjZXMgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGhpZGVOb25Xb3JraW5nRGF5cyAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgaGlkZVJlc291cmNlTmFtZVdoZW5OYXJyb3cgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBob3VySGVpZ2h0ICAgICAgICAgICAgICAgICAgICEgOiBudW1iZXI7XG4gICAgQElucHV0KCkgaG91ckhlaWdodEJyZWFrcG9pbnRzICAgICAgICAhIDogbnVtYmVyW107XG4gICAgQElucHV0KCkgaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAhIDogc3RyaW5nO1xuICAgIEBJbnB1dCgpIGluY3JlbWVudCAgICAgICAgICAgICAgICAgICAgISA6IHN0cmluZ3xudW1iZXI7XG4gICAgQElucHV0KCkgaW5wdXRGaWVsZEFsaWduICAgICAgICAgICAgICAhIDogJ3N0YXJ0J3wnZW5kJztcbiAgICBASW5wdXQoKSBpbnNlcnRCZWZvcmUgICAgICAgICAgICAgICAgICEgOiBIVE1MRWxlbWVudHxzdHJpbmc7XG4gICAgQElucHV0KCkgaW5zZXJ0Rmlyc3QgICAgICAgICAgICAgICAgICAhIDogSFRNTEVsZW1lbnR8c3RyaW5nO1xuICAgIEBJbnB1dCgpIGludGVyRGF5RHJhZyAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgaW50ZXJEYXlSZXNpemUgICAgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBpdGVtcyAgICAgICAgICAgICAgICAgICAgICAgICEgOiAoQ2FsZW5kYXJDb250YWluZXJJdGVtQ29uZmlnfE1lbnVJdGVtQ29uZmlnfFdpZGdldClbXXxSZWNvcmQ8c3RyaW5nLCBDYWxlbmRhckNvbnRhaW5lckl0ZW1Db25maWd8TWVudUl0ZW1Db25maWc+fFdpZGdldFtdfFJlY29yZDxzdHJpbmcsIENhbGVuZGFyQ29udGFpbmVySXRlbUNvbmZpZ3xNZW51SXRlbUVudHJ5PnwoQ2FsZW5kYXJDb250YWluZXJJdGVtQ29uZmlnfE1lbnVJdGVtRW50cnl8V2lkZ2V0KVtdO1xuICAgIEBJbnB1dCgpIGtleU1hcCAgICAgICAgICAgICAgICAgICAgICAgISA6IFJlY29yZDxzdHJpbmcsIEtleU1hcENvbmZpZz47XG4gICAgQElucHV0KCkgbGFiZWxQb3NpdGlvbiAgICAgICAgICAgICAgICAhIDogJ2JlZm9yZSd8J2Fib3ZlJ3wnYWxpZ24tYmVmb3JlJ3wnYXV0byd8bnVsbDtcbiAgICBASW5wdXQoKSBsYXlvdXQgICAgICAgICAgICAgICAgICAgICAgICEgOiBMYXlvdXR8c3RyaW5nfENhbGVuZGFyQ29udGFpbmVyTGF5b3V0Q29uZmlnO1xuICAgIEBJbnB1dCgpIGxheW91dFN0eWxlICAgICAgICAgICAgICAgICAgISA6IG9iamVjdDtcbiAgICBASW5wdXQoKSBtYXJnaW4gICAgICAgICAgICAgICAgICAgICAgICEgOiBudW1iZXJ8c3RyaW5nO1xuICAgIEBJbnB1dCgpIG1heERhdGUgICAgICAgICAgICAgICAgICAgICAgISA6IERhdGV8c3RyaW5nO1xuICAgIEBJbnB1dCgpIG1heEhlaWdodCAgICAgICAgICAgICAgICAgICAgISA6IHN0cmluZ3xudW1iZXI7XG4gICAgQElucHV0KCkgbWF4aW1pemVPbk1vYmlsZSAgICAgICAgICAgICAhIDogbnVtYmVyfHN0cmluZztcbiAgICBASW5wdXQoKSBtYXhXaWR0aCAgICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmd8bnVtYmVyO1xuICAgIEBJbnB1dCgpIG1pbkRhdGUgICAgICAgICAgICAgICAgICAgICAgISA6IERhdGV8c3RyaW5nO1xuICAgIEBJbnB1dCgpIG1pbkRheVdpZHRoICAgICAgICAgICAgICAgICAgISA6IG51bWJlcnxzdHJpbmc7XG4gICAgQElucHV0KCkgbWluRXZlbnRIZWlnaHQgICAgICAgICAgICAgICAhIDogbnVtYmVyfHN0cmluZztcbiAgICBASW5wdXQoKSBtaW5IZWlnaHQgICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmd8bnVtYmVyO1xuICAgIEBJbnB1dCgpIG1pbkhvdXJIZWlnaHQgICAgICAgICAgICAgICAgISA6IG51bWJlcjtcbiAgICBASW5wdXQoKSBtaW5SZXNvdXJjZVdpZHRoICAgICAgICAgICAgICEgOiBudW1iZXJ8c3RyaW5nO1xuICAgIEBJbnB1dCgpIG1pbldpZHRoICAgICAgICAgICAgICAgICAgICAgISA6IHN0cmluZ3xudW1iZXI7XG4gICAgQElucHV0KCkgbm9NYXRjaGluZ0RhdGVzICAgICAgICAgICAgICAhIDogc3RyaW5nfERvbUNvbmZpZztcbiAgICBASW5wdXQoKSBub25Xb3JraW5nRGF5cyAgICAgICAgICAgICAgICEgOiBSZWNvcmQ8bnVtYmVyLCBib29sZWFuPjtcbiAgICBASW5wdXQoKSBwYXN0RXZlbnRDbHMgICAgICAgICAgICAgICAgICEgOiBzdHJpbmc7XG4gICAgQElucHV0KCkgcmFuZ2UgICAgICAgICAgICAgICAgICAgICAgICAhIDogc3RyaW5nfER1cmF0aW9uQ29uZmlnO1xuICAgIEBJbnB1dCgpIHJlYWRPbmx5ICAgICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgcmVuZGl0aW9uICAgICAgICAgICAgICAgICAgICAhIDogc3RyaW5nfFJlY29yZDxzdHJpbmcsIHN0cmluZz58bnVsbDtcbiAgICBASW5wdXQoKSByZXNvdXJjZURhdGVGaWx0ZXIgICAgICAgICAgICEgOiAoKGNvbnRleHQ6IERheUNlbGwpID0+IGJvb2xlYW4pfHN0cmluZztcbiAgICBASW5wdXQoKSBydGwgICAgICAgICAgICAgICAgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIHNjcm9sbGFibGUgICAgICAgICAgICAgICAgICAgISA6IFNjcm9sbGVyfGJvb2xlYW58U2Nyb2xsZXJDb25maWc7XG4gICAgQElucHV0KCkgc2hpZnRJbmNyZW1lbnQgICAgICAgICAgICAgICAhIDogc3RyaW5nfER1cmF0aW9uQ29uZmlnO1xuICAgIEBJbnB1dCgpIHNob3J0RGF0ZUZvcm1hdCAgICAgICAgICAgICAgISA6IHN0cmluZ3woKGRhdGU6IERhdGUpID0+IHN0cmluZyk7XG4gICAgQElucHV0KCkgc2hvcnREYXRlVGltZUZvcm1hdCAgICAgICAgICAhIDogc3RyaW5nfCgoZGF0ZTogRGF0ZSkgPT4gc3RyaW5nKTtcbiAgICBASW5wdXQoKSBzaG93QXZhdGFycyAgICAgICAgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIHNob3dDdXJyZW50VGltZSAgICAgICAgICAgICAgISA6IGJvb2xlYW58e1xuICAgICAgICBmdWxsV2lkdGg/OiBib29sZWFuXG4gICAgICAgIHNob3dUaW1lPzogYm9vbGVhblxuICAgICAgICBvblRvcD86IGJvb2xlYW5cbiAgICB9O1xuICAgIEBJbnB1dCgpIHNob3dUaW1lICAgICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW58UmVjb3JkPCgnc3RhcnRUaW1lJ3wnZW5kVGltZSd8J2R1cmF0aW9uJyksIGJvb2xlYW58c3RyaW5nfEZ1bmN0aW9uPjtcbiAgICBASW5wdXQoKSBzaXhNaW51dGVUaWNrcyAgICAgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIHNuYXBSZWxhdGl2ZVRvRXZlbnRTdGFydERhdGUgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgc3BhbiAgICAgICAgICAgICAgICAgICAgICAgICAhIDogbnVtYmVyO1xuICAgIEBJbnB1dCgpIHN0YWNrTXVsdGlEYXlFdmVudHMgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgc3RyaWN0UmVjb3JkTWFwcGluZyAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBzeW5jQ2FsZW5kYXJEYXRlICAgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIHN5bmNWaWV3RGF0ZSAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgdGltZVNuYXBUeXBlICAgICAgICAgICAgICAgICAhIDogJ3JvdW5kJ3wnY2VpbCd8J2Zsb29yJ3xudWxsO1xuICAgIEBJbnB1dCgpIHRpdGxlICAgICAgICAgICAgICAgICAgICAgICAgISA6IHN0cmluZztcbiAgICBASW5wdXQoKSB0b29scyAgICAgICAgICAgICAgICAgICAgICAgICEgOiBSZWNvcmQ8c3RyaW5nLCBUb29sfFRvb2xDb25maWc+fG51bGx8UmVjb3JkPHN0cmluZywgVG9vbD58UmVjb3JkPHN0cmluZywgVG9vbENvbmZpZz47XG4gICAgQElucHV0KCkgdG9vbHRpcCAgICAgICAgICAgICAgICAgICAgICAhIDogc3RyaW5nfFRvb2x0aXBDb25maWd8bnVsbDtcbiAgICBASW5wdXQoKSB3aWR0aCAgICAgICAgICAgICAgICAgICAgICAgICEgOiBudW1iZXJ8c3RyaW5nO1xuICAgIEBJbnB1dCgpIHggICAgICAgICAgICAgICAgICAgICAgICAgICAgISA6IG51bWJlcjtcbiAgICBASW5wdXQoKSB5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICEgOiBudW1iZXI7XG5cbiAgICAvLyBQcm9wZXJ0aWVzIG9ubHlcbiAgICBASW5wdXQoKSBhbmNob3JTaXplICAgICAgICAgISA6IG51bWJlcltdO1xuICAgIEBJbnB1dCgpIGRheUNlbGxDbHMgICAgICAgICAhIDogc3RyaW5nO1xuICAgIEBJbnB1dCgpIGZpcnN0VmlzaWJsZUNlbGwgICAhIDogSFRNTEVsZW1lbnQ7XG4gICAgQElucHV0KCkgZmlyc3RWaXNpYmxlRGF0ZSAgICEgOiBEYXRlO1xuICAgIEBJbnB1dCgpIGZvY3VzVmlzaWJsZSAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBoYXNDaGFuZ2VzICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgaG9yaXpvbnRhbFNjcm9sbGVyICEgOiBTY3JvbGxlcjtcbiAgICBASW5wdXQoKSBpc1NldHRpbmdWYWx1ZXMgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgaXNWYWxpZCAgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGxhc3RWaXNpYmxlQ2VsbCAgICAhIDogSFRNTEVsZW1lbnQ7XG4gICAgQElucHV0KCkgbGFzdFZpc2libGVEYXRlICAgICEgOiBEYXRlO1xuICAgIEBJbnB1dCgpIHBhcmVudCAgICAgICAgICAgICAhIDogV2lkZ2V0O1xuICAgIEBJbnB1dCgpIHJlY29yZCAgICAgICAgICAgICAhIDogTW9kZWw7XG4gICAgQElucHV0KCkgc3RhdGUgICAgICAgICAgICAgICEgOiBhbnk7XG4gICAgQElucHV0KCkgdmFsdWVzICAgICAgICAgICAgICEgOiBSZWNvcmQ8c3RyaW5nLCBvYmplY3Q+O1xuXG4gICAgLy8gRXZlbnRzIGVtaXR0ZXJzXG4gICAgLyoqXG4gICAgICogVGhpcyBldmVudCBmaXJlcyB3aGVuZXZlciB0aGUgW2F1dG9DcmVhdGUgZ2VzdHVyZV0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvbWl4aW4vQ2FsZW5kYXJNaXhpbiNjb25maWctYXV0b0NyZWF0ZSkgaXMgZGV0ZWN0ZWRcbiAgICAgKiBhbmQgYWxzbyB3aGVuIGEgW2RyYWctY3JlYXRlXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL2ZlYXR1cmUvQ2FsZW5kYXJEcmFnKSBnZXN0dXJlIGlzIGRldGVjdGVkLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9EYXlSZXNvdXJjZVZpZXcjZXZlbnQtYmVmb3JlQXV0b0NyZWF0ZSlcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtFdmVudH0gZXZlbnQuZG9tRXZlbnQgVGhlIERPTSBldmVudCB3aGljaCBpbml0aWF0ZWQgdGhlIGNyZWF0aW9uLlxuICAgICAqIEBwYXJhbSB7RGF0ZX0gZXZlbnQuZGF0ZSAqREVQUkVDQVRFRCBpbiBmYXZvdXIgb2YgYHN0YXJ0RGF0ZWAuKiBUaGUgc3RhcnRpbmcgdGltZSBvZiB0aGUgZXZlbnQgdG8gYmUgY3JlYXRlZC4gSWYgdGhpcyBpcyBpbiBhIGBEYXlWaWV3YCwgdGhpcyB3aWxsIGJlIHNuYXBwZWQgYWNjb3JkaW5nIHRvIHRoZSBzcGVjaWZpY2F0aW9uIGluIFthdXRvQ3JlYXRlXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9taXhpbi9DYWxlbmRhck1peGluI2NvbmZpZy1hdXRvQ3JlYXRlKVxuICAgICAqIEBwYXJhbSB7RGF0ZX0gZXZlbnQuc3RhcnREYXRlIFRoZSBzdGFydGluZyB0aW1lIG9mIHRoZSBldmVudCB0byBiZSBjcmVhdGVkLiBJZiB0aGlzIGlzIGluIGEgYERheVZpZXdgLCB0aGlzIHdpbGwgYmUgc25hcHBlZCBhY2NvcmRpbmcgdG8gdGhlIHNwZWNpZmljYXRpb24gaW4gW2F1dG9DcmVhdGVdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L21peGluL0NhbGVuZGFyTWl4aW4jY29uZmlnLWF1dG9DcmVhdGUpXG4gICAgICogQHBhcmFtIHtEYXRlfSBldmVudC5lbmREYXRlIFRoZSBlbmRpbmcgdGltZSBvZiB0aGUgZXZlbnQgdG8gYmUgY3JlYXRlZC5cbiAgICAgKiBAcGFyYW0ge1NjaGVkdWxlci5tb2RlbC5SZXNvdXJjZU1vZGVsfSBldmVudC5yZXNvdXJjZVJlY29yZCBUaGUgcmVzb3VyY2UgaWYgdGhlIFVJIGluY2x1ZGVzIGEgcmVzb3VyY2UuXG4gICAgICogQHBhcmFtIHtDYWxlbmRhclZpZXd9IGV2ZW50LnZpZXcgVGhpcyB2aWV3LlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkJlZm9yZUF1dG9DcmVhdGU6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBkb21FdmVudDogRXZlbnQsIGRhdGU6IERhdGUsIHN0YXJ0RGF0ZTogRGF0ZSwgZW5kRGF0ZTogRGF0ZSwgcmVzb3VyY2VSZWNvcmQ6IFJlc291cmNlTW9kZWwsIHZpZXc6IENhbGVuZGFyVmlldyB9KSA9PiBQcm9taXNlPGJvb2xlYW4+fGJvb2xlYW58dm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIFRyaWdnZXJlZCBiZWZvcmUgYSB2aWV3J3Mgb3JpZW50YXRpbmcgZGF0ZSBjaGFuZ2VzLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9EYXlSZXNvdXJjZVZpZXcjZXZlbnQtYmVmb3JlQ2hhbmdlRGF0ZSlcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtEYXRlfSBldmVudC5vbGREYXRlIFRoZSBjdXJyZW50IG9yaWVudGF0aW5nIGRhdGUgb2YgdGhpcyB2aWV3LlxuICAgICAqIEBwYXJhbSB7RGF0ZX0gZXZlbnQuZGF0ZSBUaGUgbmV3IGRhdGUgdG8gd2hpY2ggdGhpcyB2aWV3IGlzIHRvIGJlIG9yaWVudGF0ZWQuXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQmVmb3JlQ2hhbmdlRGF0ZTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IG9sZERhdGU6IERhdGUsIGRhdGU6IERhdGUgfSkgPT4gUHJvbWlzZTxib29sZWFuPnxib29sZWFufHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlcyBiZWZvcmUgYW4gb2JqZWN0IGlzIGRlc3Ryb3llZC5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtDb3JlLkJhc2V9IGV2ZW50LnNvdXJjZSBUaGUgT2JqZWN0IHRoYXQgaXMgYmVpbmcgZGVzdHJveWVkLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkJlZm9yZURlc3Ryb3k6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IEJhc2UgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIFRyaWdnZXJlZCBiZWZvcmUgYSB3aWRnZXQgaXMgaGlkZGVuLiBSZXR1cm4gYGZhbHNlYCB0byBwcmV2ZW50IHRoZSBhY3Rpb24uXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuV2lkZ2V0fSBldmVudC5zb3VyY2UgVGhlIHdpZGdldCBiZWluZyBoaWRkZW4uXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQmVmb3JlSGlkZTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogV2lkZ2V0IH0pID0+IFByb21pc2U8Ym9vbGVhbj58Ym9vbGVhbnx2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogVHJpZ2dlcmVkIGJlZm9yZSBhIG5ldyBbcmVzcG9uc2l2ZVN0YXRlXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L21peGluL1Jlc3BvbnNpdmUjY29uZmlnLXJlc3BvbnNpdmVTdGF0ZSkgaXMgYXBwbGllZC5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5XaWRnZXR9IGV2ZW50LnNvdXJjZSBUaGUgd2lkZ2V0IHdob3NlIGByZXNwb25zaXZlU3RhdGVgIGlzIHRvIGJlIGNoYW5nZWRcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZXZlbnQuc3RhdGUgVGhlIG5ldyB2YWx1ZSBmb3IgdGhlIHdpZGdldCdzIGByZXNwb25zaXZlU3RhdGVgXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50Lm9sZFN0YXRlIFRoZSBwcmV2aW91cyB2YWx1ZSBmb3IgdGhlIHdpZGdldCdzIGByZXNwb25zaXZlU3RhdGVgXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQmVmb3JlUmVzcG9uc2l2ZVN0YXRlQ2hhbmdlOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBXaWRnZXQsIHN0YXRlOiBzdHJpbmcsIG9sZFN0YXRlOiBzdHJpbmcgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVkIGJlZm9yZSB0aGlzIGNvbnRhaW5lciB3aWxsIGxvYWQgcmVjb3JkIHZhbHVlcyBpbnRvIGl0cyBjaGlsZCBmaWVsZHMuIFRoaXMgaXMgdXNlZnVsIGlmIHlvdVxuICAgICAqIHdhbnQgdG8gbW9kaWZ5IHRoZSBVSSBiZWZvcmUgZGF0YSBpcyBsb2FkZWQgKGUuZy4gc2V0IHNvbWUgaW5wdXQgZmllbGQgdG8gYmUgcmVhZG9ubHkpXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuQ29udGFpbmVyfSBldmVudC5zb3VyY2UgVGhlIGNvbnRhaW5lclxuICAgICAqIEBwYXJhbSB7Q29yZS5kYXRhLk1vZGVsfSBldmVudC5yZWNvcmQgVGhlIHJlY29yZFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkJlZm9yZVNldFJlY29yZDogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogQ29udGFpbmVyLCByZWNvcmQ6IE1vZGVsIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyZWQgYmVmb3JlIGEgd2lkZ2V0IGlzIHNob3duLiBSZXR1cm4gYGZhbHNlYCB0byBwcmV2ZW50IHRoZSBhY3Rpb24uXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuV2lkZ2V0LGFueX0gZXZlbnQuc291cmNlIFRoZSB3aWRnZXQgYmVpbmcgc2hvd25cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25CZWZvcmVTaG93OiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBXaWRnZXR8YW55IH0pID0+IFByb21pc2U8Ym9vbGVhbj58Ym9vbGVhbnx2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZWQgYmVmb3JlIHN0YXRlIGlzIGFwcGxpZWQgdG8gdGhlIHNvdXJjZS4gQWxsb3dzIGVkaXRpbmcgdGhlIHN0YXRlIG9iamVjdCBvciBwcmV2ZW50aW5nIHRoZSBvcGVyYXRpb24uXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7YW55fSBldmVudC5zdGF0ZSBTdGF0ZSBvYmplY3QgY29uZmlnXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQmVmb3JlU3RhdGVBcHBseTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHN0YXRlOiBhbnkgfSkgPT4gUHJvbWlzZTxib29sZWFuPnxib29sZWFufHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlZCBiZWZvcmUgc3RhdGUgaXMgc2F2ZWQgYnkgdGhlIFN0YXRlUHJvdmlkZXIuIEFsbG93cyBlZGl0aW5nIHRoZSBzdGF0ZSBvYmplY3Qgb3IgcHJldmVudGluZyB0aGUgb3BlcmF0aW9uLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge2FueX0gZXZlbnQuc3RhdGUgU3RhdGUgb2JqZWN0IGNvbmZpZ1xuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkJlZm9yZVN0YXRlU2F2ZTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHN0YXRlOiBhbnkgfSkgPT4gUHJvbWlzZTxib29sZWFuPnxib29sZWFufHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlcyB3aGVuIGFueSBvdGhlciBldmVudCBpcyBmaXJlZCBmcm9tIHRoZSBvYmplY3QuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L0RheVJlc291cmNlVmlldyNldmVudC1jYXRjaEFsbClcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHt7W2tleTogc3RyaW5nXTogYW55LCB0eXBlOiBzdHJpbmd9fSBldmVudC5ldmVudCBUaGUgT2JqZWN0IHRoYXQgY29udGFpbnMgZXZlbnQgZGV0YWlsc1xuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBldmVudC5ldmVudC50eXBlIFRoZSB0eXBlIG9mIHRoZSBldmVudCB3aGljaCBpcyBjYXVnaHQgYnkgdGhlIGxpc3RlbmVyXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQ2F0Y2hBbGw6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDoge1trZXk6IHN0cmluZ106IGFueSwgdHlwZTogc3RyaW5nfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gYSBuZXcgc2V0IG9mIGV2ZW50cyBoYXMgYmVlbiBnYXRoZXJlZCBmb3IgdGhpcyB2aWV3J3MgZGF0ZSByYW5nZS5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtNYXA8YW55LCBhbnk+fSBldmVudC5jZWxsTWFwIFRoZSBtYXAgb2YgZGF0ZSBrZXlzIHRvIFtkYXkgY2VsbF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvbWl4aW4vRGF5Q2VsbENvbGxlY3RlciN0eXBlZGVmLURheUNlbGwpIGRhdGEgYmxvY2tzLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkNlbGxNYXBQb3B1bGF0ZWQ6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBjZWxsTWFwOiBNYXA8YW55LCBhbnk+IH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlcyB3aGVuIGEgUGFuZWwgaXMgY29sbGFwc2VkIHVzaW5nIHRoZSBbY29sbGFwc2libGVdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ29yZS93aWRnZXQvUGFuZWwjY29uZmlnLWNvbGxhcHNpYmxlKSBzZXR0aW5nLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0LlBhbmVsfSBldmVudC5zb3VyY2UgVGhpcyBQYW5lbC5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25Db2xsYXBzZTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogUGFuZWwgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVkIGFmdGVyIG9uZSBkYXkgY2VsbCdzIGV2ZW50cyBhcmUgY29sbGVjdGVkIGluIHNvcnRlZCBvcmRlciBhY2NvcmRpbmcgdG8gdGhlXG4gICAgICogW2V2ZW50U29ydGVyXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9taXhpbi9DYWxlbmRhck1peGluI2NvbmZpZy1ldmVudFNvcnRlcilcbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvRGF5UmVzb3VyY2VWaWV3I2V2ZW50LWRheUNlbGxQb3B1bGF0ZWQpXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7U2NoZWR1bGVyLm1vZGVsLkV2ZW50TW9kZWxbXX0gZXZlbnQuZXZlbnRzIFRoZSBldmVudHMgdG8gYmUgc2hvd24gZm9yIHRoZSBwYXNzZWQgZGF0ZVxuICAgICAqIEBwYXJhbSB7RGF0ZX0gZXZlbnQuVGhlIGRhdGUgdGhlIGV2ZW50cyBhcmUgdG8gYmUgc2hvd24gaW4uXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uRGF5Q2VsbFBvcHVsYXRlZDogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IGV2ZW50czogRXZlbnRNb2RlbFtdLCBUaGU6IERhdGUgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIHdoZW4gYW4gb2JqZWN0IGlzIGRlc3Ryb3llZC5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtDb3JlLkJhc2V9IGV2ZW50LnNvdXJjZSBUaGUgT2JqZWN0IHRoYXQgaXMgYmVpbmcgZGVzdHJveWVkLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkRlc3Ryb3k6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IEJhc2UgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIHdoZW4gYSBmaWVsZCBpcyBtdXRhdGVkIGFuZCB0aGUgc3RhdGUgb2YgdGhlIFtoYXNDaGFuZ2VzXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L0NvbnRhaW5lciNwcm9wZXJ0eS1oYXNDaGFuZ2VzKSBwcm9wZXJ0eSBjaGFuZ2VzXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuQ29udGFpbmVyfSBldmVudC5zb3VyY2UgVGhlIGNvbnRhaW5lci5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGV2ZW50LmRpcnR5IFRoZSBkaXJ0eSBzdGF0ZSBvZiB0aGUgQ29udGFpbmVyIC0gYHRydWVgIGlmIHRoZXJlIGFyZSBhbnkgZmllbGRzIHdoaWNoIGhhdmUgYmVlbiBjaGFuZ2VkIHNpbmNlIGluaXRpYWwgbG9hZC5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25EaXJ0eVN0YXRlQ2hhbmdlOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBDb250YWluZXIsIGRpcnR5OiBib29sZWFuIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyZWQgd2hlbiBhIHdpZGdldCdzIFtlbGVtZW50XShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1dpZGdldCNwcm9wZXJ0eS1lbGVtZW50KSBpcyBhdmFpbGFibGUuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGV2ZW50LmVsZW1lbnQgVGhlIFdpZGdldCdzIGVsZW1lbnQuXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uRWxlbWVudENyZWF0ZWQ6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBlbGVtZW50OiBIVE1MRWxlbWVudCB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiBhbiBbYXV0b0NyZWF0ZV0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvbWl4aW4vQ2FsZW5kYXJNaXhpbiNjb25maWctYXV0b0NyZWF0ZSkgZ2VzdHVyZSBoYXMgY3JlYXRlZCBhIG5ldyBldmVudFxuICAgICAqIGFuZCBhZGRlZCBpdCB0byB0aGUgZXZlbnQgc3RvcmUuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L0RheVJlc291cmNlVmlldyNldmVudC1ldmVudEF1dG9DcmVhdGVkKVxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0NhbGVuZGFyVmlld30gZXZlbnQuc291cmNlIFRoaXMgQ2FsZW5kYXIgdmlldyBpbnN0YW5jZS5cbiAgICAgKiBAcGFyYW0ge1NjaGVkdWxlci5tb2RlbC5FdmVudE1vZGVsfSBldmVudC5ldmVudFJlY29yZCBUaGUgbmV3IGV2ZW50IHJlY29yZC5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25FdmVudEF1dG9DcmVhdGVkOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBDYWxlbmRhclZpZXcsIGV2ZW50UmVjb3JkOiBFdmVudE1vZGVsIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlcyB3aGVuIGEgZGF5IHNwYW5uaW5nIGV2ZW50IGlzIGZvdW5kLCBhbmQgdGhlIGRhdGUgdG8gd2hpY2ggaXRzIGVuY2Fwc3VsYXRpbmcgZXZlbnQgYmFyXG4gICAgICogZXh0ZW5kcyBoYXMgYmVlbiBjYWxjdWxhdGVkLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9EYXlSZXNvdXJjZVZpZXcjZXZlbnQtZXZlbnRQcm9wYWdhdGUpXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7RGF0ZX0gZXZlbnQuZXZlbnRFbmREYXRlIFRoZSBlbmQgZGF0ZSBmb3Igd2hpY2ggdG8gY2FsY3VsYXRlIHRoZSBwcm9wYWdhdGUgZW5kIGRhdGUuXG4gICAgICogQHBhcmFtIHtEYXRlfSBldmVudC5wcm9wYWdhdGVFbmREYXRlIFRoZSBzeXN0ZW0tY2FsY3VsYXRlZCBlbmQgcG9pbnQgb2YgdGhlIGV2ZW50IGJhci5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGV2ZW50LmlzQWxsRGF5IGB0cnVlYCBpZiB0aGUgZXZlbnQgaXMgYW4gYWxsIGRheSBldmVudCwgb3Igc3BhbnMgbXVsdGlwbGUgZGF5cy5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGV2ZW50LmlzT3ZlcmZsb3cgYHRydWVgIGlmIHRoaXMgaXMgYmVpbmcgY2FsbGVkIGFzIHBhcnQgb2YgZnVydGhlciBwcm9wYWdhdGlvbi5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGV2ZW50Lm92ZXJmbG93cyBgdHJ1ZWAgaWYgdGhlIGV2ZW50IGV4dGVuZHMgaW50byBmdXR1cmUgY2VsbHMuXG4gICAgICogQHBhcmFtIHtTY2hlZHVsZXIubW9kZWwuRXZlbnRNb2RlbH0gZXZlbnQuZXZlbnRSZWNvcmQgVGhlIGV2ZW50IHJlY29yZCBiZWluZyBwcm9wYWdhdGVkLlxuICAgICAqIEBwYXJhbSB7RGF0ZX0gZXZlbnQuZGF0ZSBUaGUgZGF0ZSBmcm9tIHdoaWNoIHRoZSBldmVudCBpcyBiZWluZyBwcm9wYWdhdGVkLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkV2ZW50UHJvcGFnYXRlOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgZXZlbnRFbmREYXRlOiBEYXRlLCBwcm9wYWdhdGVFbmREYXRlOiBEYXRlLCBpc0FsbERheTogYm9vbGVhbiwgaXNPdmVyZmxvdzogYm9vbGVhbiwgb3ZlcmZsb3dzOiBib29sZWFuLCBldmVudFJlY29yZDogRXZlbnRNb2RlbCwgZGF0ZTogRGF0ZSB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZXMgd2hlbiBhIFBhbmVsIGlzIGV4cGFuZGVkIHVzaW5nIHRoZSBbY29sbGFwc2libGVdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ29yZS93aWRnZXQvUGFuZWwjY29uZmlnLWNvbGxhcHNpYmxlKSBzZXR0aW5nLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0LlBhbmVsfSBldmVudC5zb3VyY2UgVGhpcyBQYW5lbC5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25FeHBhbmQ6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IFBhbmVsIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIGZvY3VzIGVudGVycyB0aGlzIFdpZGdldC5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5XaWRnZXR9IGV2ZW50LnNvdXJjZSBUaGlzIFdpZGdldFxuICAgICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGV2ZW50LmZyb21FbGVtZW50IFRoZSBlbGVtZW50IHdoaWNoIGxvc3QgZm9jdXMuXG4gICAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZXZlbnQudG9FbGVtZW50IFRoZSBlbGVtZW50IHdoaWNoIGdhaW5lZCBmb2N1cy5cbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0LldpZGdldH0gZXZlbnQuZnJvbVdpZGdldCBUaGUgd2lkZ2V0IHdoaWNoIGxvc3QgZm9jdXMuXG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5XaWRnZXR9IGV2ZW50LnRvV2lkZ2V0IFRoZSB3aWRnZXQgd2hpY2ggZ2FpbmVkIGZvY3VzLlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gZXZlbnQuYmFja3dhcmRzIGB0cnVlYCBpZiB0aGUgYHRvRWxlbWVudGAgaXMgYmVmb3JlIHRoZSBgZnJvbUVsZW1lbnRgIGluIGRvY3VtZW50IG9yZGVyLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkZvY3VzSW46IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IFdpZGdldCwgZnJvbUVsZW1lbnQ6IEhUTUxFbGVtZW50LCB0b0VsZW1lbnQ6IEhUTUxFbGVtZW50LCBmcm9tV2lkZ2V0OiBXaWRnZXQsIHRvV2lkZ2V0OiBXaWRnZXQsIGJhY2t3YXJkczogYm9vbGVhbiB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiBmb2N1cyBleGl0cyB0aGlzIFdpZGdldCdzIG93bmVyc2hpcCB0cmVlLiBUaGlzIGlzIGRpZmZlcmVudCBmcm9tIGEgYGJsdXJgIGV2ZW50LlxuICAgICAqIGZvY3VzIG1vdmluZyBmcm9tIHdpdGhpbiB0aGlzIFdpZGdldCdzIG93bmVyc2hpcCB0cmVlLCBldmVuIGlmIHRoZXJlIGFyZSBmbG9hdGluZyB3aWRnZXRzXG4gICAgICogd2lsbCBub3QgdHJpZ2dlciB0aGlzIGV2ZW50LiBUaGlzIGlzIHdoZW4gZm9jdXMgZXhpdHMgdGhpcyB3aWRnZXQgY29tcGxldGVseS5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5XaWRnZXR9IGV2ZW50LnNvdXJjZSBUaGlzIFdpZGdldFxuICAgICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGV2ZW50LmZyb21FbGVtZW50IFRoZSBlbGVtZW50IHdoaWNoIGxvc3QgZm9jdXMuXG4gICAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZXZlbnQudG9FbGVtZW50IFRoZSBlbGVtZW50IHdoaWNoIGdhaW5lZCBmb2N1cy5cbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0LldpZGdldH0gZXZlbnQuZnJvbVdpZGdldCBUaGUgd2lkZ2V0IHdoaWNoIGxvc3QgZm9jdXMuXG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5XaWRnZXR9IGV2ZW50LnRvV2lkZ2V0IFRoZSB3aWRnZXQgd2hpY2ggZ2FpbmVkIGZvY3VzLlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gZXZlbnQuYmFja3dhcmRzIGB0cnVlYCBpZiB0aGUgYHRvRWxlbWVudGAgaXMgYmVmb3JlIHRoZSBgZnJvbUVsZW1lbnRgIGluIGRvY3VtZW50IG9yZGVyLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkZvY3VzT3V0OiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBXaWRnZXQsIGZyb21FbGVtZW50OiBIVE1MRWxlbWVudCwgdG9FbGVtZW50OiBIVE1MRWxlbWVudCwgZnJvbVdpZGdldDogV2lkZ2V0LCB0b1dpZGdldDogV2lkZ2V0LCBiYWNrd2FyZHM6IGJvb2xlYW4gfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIFRyaWdnZXJlZCBhZnRlciBhIHdpZGdldCB3YXMgaGlkZGVuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuV2lkZ2V0fSBldmVudC5zb3VyY2UgVGhlIHdpZGdldFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkhpZGU6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IFdpZGdldCB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZXMgd2hlbiB0aGlzIERheVZpZXcgY2hhbmdlcyBhbiBhc3BlY3Qgb2YgaXRzIGxheW91dC4gVGhpcyBoYXBwZW5zIHdoZW4gY2hhbmdpbmdcbiAgICAgKiBbaG91ckhlaWdodF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvRGF5VmlldyNwcm9wZXJ0eS1ob3VySGVpZ2h0KSwgW21pbkRheVdpZHRoXSgjQ2FsZW5kYXIvd2lkZ2V0L0RheVZpZXcjcHJvcGVydHktbWluRGF5V2lkdGgpLCBhbmQgd2hlbiB0aGUgYXZhaWxhYmxlXG4gICAgICogZGF5IGNvbnRhaW5lciBoZWlnaHQgY2hhbmdlcy5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtDYWxlbmRhci53aWRnZXQuRGF5Vmlld30gZXZlbnQuc291cmNlIFRoZSB0cmlnZ2VyaW5nIGluc3RhbmNlLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkxheW91dFVwZGF0ZTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogRGF5VmlldyB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogVHJpZ2dlcmVkIHdoZW4gYSB3aWRnZXQgd2hpY2ggaGFkIGJlZW4gaW4gYSBub24tdmlzaWJsZSBzdGF0ZSBmb3IgYW55IHJlYXNvblxuICAgICAqIGFjaGlldmVzIHZpc2liaWxpdHkuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L0RheVJlc291cmNlVmlldyNldmVudC1wYWludClcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5XaWRnZXR9IGV2ZW50LnNvdXJjZSBUaGUgd2lkZ2V0IGJlaW5nIHBhaW50ZWQuXG4gICAgICogQHBhcmFtIHtib29sZWFufSBldmVudC5maXJzdFBhaW50IGB0cnVlYCBpZiB0aGlzIGlzIHRoZSBmaXJzdCBwYWludC5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25QYWludDogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogV2lkZ2V0LCBmaXJzdFBhaW50OiBib29sZWFuIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIHRoZSByYW5nZSBvZiBkYXRlcyBlbmNhcHN1bGF0ZWQgYnkgdGhpcyB2aWV3IGNoYW5nZXMuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L0RheVJlc291cmNlVmlldyNldmVudC1yYW5nZUNoYW5nZSlcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHt0eXBlb2YgRGF0ZVJhbmdlT3duZXJ9IGV2ZW50LnNvdXJjZSBUaGlzIGNhbGVuZGFyIHZpZXcgaW5zdGFuY2UuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50Lm9sZCBUaGUgb2xkIGRhdGUgcmFuZ2UgPHN0cm9uZz5pZiBhbnk8L3N0cm9uZz4uXG4gICAgICogQHBhcmFtIHtEYXRlfSBldmVudC5vbGQuc3RhcnREYXRlIHRoZSBvbGQgc3RhcnQgZGF0ZS5cbiAgICAgKiBAcGFyYW0ge0RhdGV9IGV2ZW50Lm9sZC5lbmREYXRlIHRoZSBvbGQgZW5kIGRhdGUuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50Lm5ldyBUaGUgbmV3IGRhdGUgcmFuZ2VcbiAgICAgKiBAcGFyYW0ge0RhdGV9IGV2ZW50Lm5ldy5zdGFydERhdGUgdGhlIG5ldyBzdGFydCBkYXRlLlxuICAgICAqIEBwYXJhbSB7RGF0ZX0gZXZlbnQubmV3LmVuZERhdGUgdGhlIG5ldyBlbmQgZGF0ZS5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25SYW5nZUNoYW5nZTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogdHlwZW9mIERhdGVSYW5nZU93bmVyLCBvbGQ6IHsgc3RhcnREYXRlOiBEYXRlLCBlbmREYXRlOiBEYXRlIH0sIG5ldzogeyBzdGFydERhdGU6IERhdGUsIGVuZERhdGU6IERhdGUgfSB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiBhIFdpZGdldCdzIHJlYWQgb25seSBzdGF0ZSBpcyB0b2dnbGVkXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gZXZlbnQucmVhZE9ubHkgUmVhZCBvbmx5IG9yIG5vdFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvblJlYWRPbmx5OiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgcmVhZE9ubHk6IGJvb2xlYW4gfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIFRoaXMgZXZlbnQgaXMgZmlyZWQgYWZ0ZXIgYSB3aWRnZXQncyBlbGVtZW50cyBoYXZlIGJlZW4gc3luY2hyb25pemVkIGR1ZSB0byBhIGRpcmVjdCBvciBpbmRpcmVjdCBjYWxsXG4gICAgICogdG8gW3JlY29tcG9zZV0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9Db3JlL3dpZGdldC9XaWRnZXQjZnVuY3Rpb24tcmVjb21wb3NlKSwgaWYgdGhpcyByZXN1bHRzIGluIHNvbWUgY2hhbmdlIHRvIHRoZSB3aWRnZXQncyByZW5kZXJlZCBET00gZWxlbWVudHMuXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uUmVjb21wb3NlOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoKSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZXMgd2hlbiB0aGlzIERheVZpZXcgcmVmcmVzaGVzLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0NhbGVuZGFyLndpZGdldC5EYXlWaWV3fSBldmVudC5zb3VyY2UgVGhlIHRyaWdnZXJpbmcgaW5zdGFuY2UuXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uUmVmcmVzaDogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogRGF5VmlldyB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiB0aGUgZW5jYXBzdWxhdGluZyBlbGVtZW50IG9mIGEgV2lkZ2V0IHJlc2l6ZXMgKm9ubHkgd2hlbiBbbW9uaXRvclJlc2l6ZV0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9Db3JlL3dpZGdldC9XaWRnZXQjY29uZmlnLW1vbml0b3JSZXNpemUpIGlzIGB0cnVlYCouXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuV2lkZ2V0fSBldmVudC5zb3VyY2UgVGhpcyBXaWRnZXRcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gZXZlbnQud2lkdGggVGhlIG5ldyB3aWR0aFxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBldmVudC5oZWlnaHQgVGhlIG5ldyBoZWlnaHRcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gZXZlbnQub2xkV2lkdGggVGhlIG9sZCB3aWR0aFxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBldmVudC5vbGRIZWlnaHQgVGhlIG9sZCBoZWlnaHRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25SZXNpemU6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IFdpZGdldCwgd2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIsIG9sZFdpZHRoOiBudW1iZXIsIG9sZEhlaWdodDogbnVtYmVyIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyZWQgd2hlbiBhIG5ldyBbcmVzcG9uc2l2ZVN0YXRlXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L21peGluL1Jlc3BvbnNpdmUjY29uZmlnLXJlc3BvbnNpdmVTdGF0ZSkgaXMgYXBwbGllZC5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5XaWRnZXR9IGV2ZW50LnNvdXJjZSBUaGUgd2lkZ2V0IHdob3NlIGByZXNwb25zaXZlU3RhdGVgIGhhcyBjaGFuZ2VkXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50LnN0YXRlIFRoZSBuZXcgdmFsdWUgZm9yIHRoZSB3aWRnZXQncyBgcmVzcG9uc2l2ZVN0YXRlYFxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBldmVudC5vbGRTdGF0ZSBUaGUgcHJldmlvdXMgdmFsdWUgZm9yIHRoZSB3aWRnZXQncyBgcmVzcG9uc2l2ZVN0YXRlYFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvblJlc3BvbnNpdmVTdGF0ZUNoYW5nZTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogV2lkZ2V0LCBzdGF0ZTogc3RyaW5nLCBvbGRTdGF0ZTogc3RyaW5nIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIHRoZSBbc2hpZnRJbmNyZW1lbnRdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L21peGluL0RhdGVSYW5nZU93bmVyI3Byb3BlcnR5LXNoaWZ0SW5jcmVtZW50KSBvZiB0aGlzIHZpZXcgY2hhbmdlcy5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50Lm9sZCBUaGUgc2hpZnQgaW5jcmVtZW50ICppZiBhbnkqLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudC5uZXcgVGhlIHNoaWZ0IGluY3JlbWVudFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvblNoaWZ0SW5jcmVtZW50Q2hhbmdlOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgb2xkPzogb2JqZWN0LCBuZXc6IG9iamVjdCB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogVHJpZ2dlcmVkIGFmdGVyIGEgd2lkZ2V0IGlzIHNob3duLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0LldpZGdldH0gZXZlbnQuc291cmNlIFRoZSB3aWRnZXRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25TaG93OiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBXaWRnZXQgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIFRyaWdnZXJlZCB3aGVuIGNoYW5naW5nIHRoZSBbaG91ckhlaWdodF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvRGF5VmlldyNwcm9wZXJ0eS1ob3VySGVpZ2h0KSBjYXVzZXMgYW5cbiAgICAgKiBbaG91ciBoZWlnaHQgYnJlYWtwb2ludF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvRGF5VmlldyNjb25maWctaG91ckhlaWdodEJyZWFrcG9pbnRzKSB0byBiZSBjcm9zc2VkXG4gICAgICogYW5kIHRoZSBkaXNwbGF5ZWQgc3ViVGljayBpbnRlcnZhbHMgaW4gdGhlIHRpbWUgYXhpcyBjaGFuZ2UuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudC5vbGQgVGhlIG9sZCBob3VyIGhlaWdodCB0aWNrIHJlc29sdXRpb24gb2JqZWN0LlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBldmVudC5vbGQubGV2ZWwgVGhlIGxldmVsIGAwYCB0byBgNGAgd2hlcmUgYDBgIGlzIHRoZSBkZWZhdWx0IHdpdGggbm8gc3ViVGljayB0aW1lcyBkaXNwbGF5ZWQsIGFuZCBgNGAgbWVhbnMgZXZlcnkgNSBtaW51dGUgdGltZSBpcyBkaXNwbGF5ZWQuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50Lm9sZC5zdGVwIFRoZSB0aW1lIGR1cmF0aW9uIG9mIHZpc2libGUgc3ViVGlja3MuIFRoaXMgaXMgYSBzdHJpbmcgaW4gdGhlIGZvcm1hdCByZXF1aXJlZCBieSBbcGFyc2VEdXJhdGlvbl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9Db3JlL2hlbHBlci9EYXRlSGVscGVyI2Z1bmN0aW9uLXBhcnNlRHVyYXRpb24tc3RhdGljKVxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudC5uZXcgVGhlIG5ldyBob3VyIGhlaWdodCB0aWNrIHJlc29sdXRpb24gb2JqZWN0LlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBldmVudC5uZXcubGV2ZWwgVGhlIGxldmVsIGAwYCB0byBgNGAgd2hlcmUgYDBgIGlzIHRoZSBkZWZhdWx0IHdpdGggbm8gc3ViVGljayB0aW1lcyBkaXNwbGF5ZWQsIGFuZCBgNGAgbWVhbnMgZXZlcnkgNSBtaW51dGUgdGltZSBpcyBkaXNwbGF5ZWQuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50Lm5ldy5zdGVwIFRoZSB0aW1lIGR1cmF0aW9uIG9mIHZpc2libGUgc3ViVGlja3MuIFRoaXMgaXMgYSBzdHJpbmcgaW4gdGhlIGZvcm1hdCByZXF1aXJlZCBieSBbcGFyc2VEdXJhdGlvbl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9Db3JlL2hlbHBlci9EYXRlSGVscGVyI2Z1bmN0aW9uLXBhcnNlRHVyYXRpb24tc3RhdGljKVxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvblRpY2tDaGFuZ2U6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBvbGQ6IHsgbGV2ZWw6IG51bWJlciwgc3RlcDogc3RyaW5nIH0sIG5ldzogeyBsZXZlbDogbnVtYmVyLCBzdGVwOiBzdHJpbmcgfSB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiBhIHRpbWUgYXhpcyBpcyBjbGlja2VkIG9uLiBJZiB0aGUgaGFuZGxlciByZXR1cm5zXG4gICAgICogYGZhbHNlYCB0aGUgY3VycmVudCBwb2ludGVyIGV2ZW50IGlzIG5vdCBwcm9jZXNzZWQgZnVydGhlci5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtFdmVudH0gZXZlbnQuZG9tRXZlbnQgVGhlIHRyaWdnZXJpbmcgRE9NIGV2ZW50LlxuICAgICAqIEBwYXJhbSB7RGF0ZX0gZXZlbnQucHJlY2lzZVRpbWUgVGhlIGV4YWN0IGRhdGUgYW5kIHRpbWUgYXQgdGhlIGNsaWNrZWQgcG9zaXRpb25cbiAgICAgKiBAcGFyYW0ge0RhdGV9IGV2ZW50LnRpbWUgVGhlIGRhdGUgYW5kIHRpbWUgYXQgdGhlIGNsaWNrZWQgcG9zaXRpb24gc25hcHBlZCBhY2NvcmRpbmcgdG8gdGhlIFtpbmNyZW1lbnRdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L0RheVZpZXcjY29uZmlnLWluY3JlbWVudCkgYW5kIFt0aW1lU25hcFR5cGVdKCNDYWxlbmRhci93aWRnZXQvRGF5VmlldyNjb25maWctdGltZVNuYXBUeXBlKVxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvblRpbWVBeGlzQ2xpY2s6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBkb21FdmVudDogRXZlbnQsIHByZWNpc2VUaW1lOiBEYXRlLCB0aW1lOiBEYXRlIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBBIGhlYWRlciBbdG9vbF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9Db3JlL3dpZGdldC9QYW5lbCNjb25maWctdG9vbHMpIGhhcyBiZWVuIGNsaWNrZWQuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuVG9vbH0gZXZlbnQuc291cmNlIFRoaXMgUGFuZWwuXG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5Ub29sfSBldmVudC50b29sIFRoZSB0b29sIHdoaWNoIGlzIGJlaW5nIGNsaWNrZWQuXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uVG9vbENsaWNrOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBUb29sLCB0b29sOiBUb29sIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhbmQgYXBwZW5kIHRoZSB1bmRlcmx5aW5nIHdpZGdldFxuICAgICAqL1xuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICBjb25zdFxuICAgICAgICAgICAgbWUgPSB0aGlzLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGVsZW1lbnRSZWYsXG4gICAgICAgICAgICAgICAgYnJ5bnR1bUNvbmZpZ1xuICAgICAgICAgICAgfSA9IG1lLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGluc3RhbmNlQ2xhc3MsXG4gICAgICAgICAgICAgICAgaW5zdGFuY2VOYW1lLFxuICAgICAgICAgICAgICAgIGJyeW50dW1Db25maWdzLFxuICAgICAgICAgICAgICAgIGJyeW50dW1FdmVudHNcbiAgICAgICAgICAgIH0gPSBCcnludHVtRGF5UmVzb3VyY2VWaWV3Q29tcG9uZW50O1xuXG4gICAgICAgIGJyeW50dW1Db25maWdzLmZpbHRlcihwcm9wID0+IHByb3AgaW4gdGhpcykuZm9yRWFjaChwcm9wID0+IHtcbiAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgIFdyYXBwZXJIZWxwZXIuYXBwbHlQcm9wVmFsdWUoYnJ5bnR1bUNvbmZpZywgcHJvcCwgdGhpc1twcm9wXSk7XG4gICAgICAgICAgICBpZiAoWydmZWF0dXJlcycsICdjb25maWcnXS5pbmNsdWRlcyhwcm9wKSkge1xuICAgICAgICAgICAgICAgIFdyYXBwZXJIZWxwZXIuZGV2V2FybmluZ0NvbmZpZ1Byb3AoaW5zdGFuY2VOYW1lLCBwcm9wKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgYnJ5bnR1bUV2ZW50cy5maWx0ZXIoZXZlbnQgPT4gdGhpc1tldmVudF0gJiYgdGhpc1tldmVudF0ub2JzZXJ2ZXJzLmxlbmd0aCA+IDApLmZvckVhY2goZXZlbnQgPT4ge1xuICAgICAgICAgICAgY29uc3RcbiAgICAgICAgICAgICAgICB1bmNhcGl0YWxpemUgPSAoc3RyOiBzdHJpbmcpID0+IHN0ci5jaGFyQXQoMCkudG9Mb3dlckNhc2UoKSArIHN0ci5zbGljZSgxKSxcbiAgICAgICAgICAgICAgICBldmVudE5hbWUgPSAoc3RyOiBzdHJpbmcpID0+IHVuY2FwaXRhbGl6ZShzdHIuc2xpY2UoMikpO1xuXG4gICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICBicnludHVtQ29uZmlnLmxpc3RlbmVyc1tldmVudE5hbWUoZXZlbnQpXSA9IGUgPT4ge1xuICAgICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgICAgICBtZVtldmVudF0uZW1pdChlKTtcbiAgICAgICAgICAgICAgICAvLyBFdmVudEVtaXR0ZXIgZG9lcyBub3QgcmV0dXJuIHZhbHVlcyBpbiB0aGUgbm9ybWFsIHdheSwgd29yayBhcm91bmQgaXQgYnkgc2V0dGluZyBgcmV0dXJuVmFsdWVgIGZsYWdcbiAgICAgICAgICAgICAgICAvLyBpbiBBbmd1bGFyIGxpc3RlbmVyc1xuICAgICAgICAgICAgICAgIHJldHVybiBlLnJldHVyblZhbHVlO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gSWYgY29tcG9uZW50IGhhcyBubyBjb250YWluZXIgc3BlY2lmaWVkIGluIGNvbmZpZyB0aGVuIHVzZSBhZG9wdCB0byBXcmFwcGVyJ3MgZWxlbWVudFxuICAgICAgICBjb25zdFxuICAgICAgICAgICAgY29udGFpbmVyUGFyYW0gPSBbXG4gICAgICAgICAgICAgICAgJ2Fkb3B0JyxcbiAgICAgICAgICAgICAgICAnYXBwZW5kVG8nLFxuICAgICAgICAgICAgICAgICdpbnNlcnRBZnRlcicsXG4gICAgICAgICAgICAgICAgJ2luc2VydEJlZm9yZSdcbiAgICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICBdLmZpbmQocHJvcCA9PiBicnludHVtQ29uZmlnW3Byb3BdKTtcbiAgICAgICAgaWYgKCFjb250YWluZXJQYXJhbSkge1xuICAgICAgICAgICAgaWYgKGluc3RhbmNlTmFtZSA9PT0gJ0J1dHRvbicgfHwgZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmdldFJvb3ROb2RlKCkgaW5zdGFuY2VvZiBTaGFkb3dSb290KSB7XG4gICAgICAgICAgICAgICAgLy8gQnV0dG9uIHNob3VsZCBhbHdheXMgYmUgPGE+IG9yIDxidXR0b24+IGluc2lkZSBvd25lciBlbGVtZW50XG4gICAgICAgICAgICAgICAgYnJ5bnR1bUNvbmZpZy5hcHBlbmRUbyA9IGVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGJyeW50dW1Db25maWcuYWRvcHQgPSBlbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBXcmFwcGVySGVscGVyLmRldldhcm5pbmdDb250YWluZXIoaW5zdGFuY2VOYW1lLCBjb250YWluZXJQYXJhbSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIG1lLmluc3RhbmNlID0gaW5zdGFuY2VOYW1lID09PSAnV2lkZ2V0JyA/IFdpZGdldC5jcmVhdGUoYnJ5bnR1bUNvbmZpZykgOiBuZXcgaW5zdGFuY2VDbGFzcyhicnludHVtQ29uZmlnKTtcblxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFdhdGNoIGZvciBjaGFuZ2VzXG4gICAgICogQHBhcmFtIGNoYW5nZXNcbiAgICAgKi9cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgICAgIGNvbnN0XG4gICAgICAgICAgICB7IGluc3RhbmNlIH0gPSB0aGlzLFxuICAgICAgICAgICAgeyBpbnN0YW5jZU5hbWUgfSA9IEJyeW50dW1EYXlSZXNvdXJjZVZpZXdDb21wb25lbnQ7XG4gICAgICAgIGlmICghaW5zdGFuY2UpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBJdGVyYXRlIG92ZXIgYWxsIGNoYW5nZXNcbiAgICAgICAgT2JqZWN0LmVudHJpZXMoY2hhbmdlcykuZm9yRWFjaCgoW3Byb3AsIGNoYW5nZV0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0XG4gICAgICAgICAgICAgICAgbmV3VmFsdWUgPSAoY2hhbmdlIGFzIFNpbXBsZUNoYW5nZSkuY3VycmVudFZhbHVlLFxuICAgICAgICAgICAgICAgIHsgaW5zdGFuY2UgfSA9IHRoaXMsXG4gICAgICAgICAgICAgICAgeyBicnludHVtQ29uZmlnc09ubHksIGJyeW50dW1Qcm9wcyB9ID0gQnJ5bnR1bURheVJlc291cmNlVmlld0NvbXBvbmVudDtcbiAgICAgICAgICAgIGlmIChicnludHVtUHJvcHMuaW5jbHVkZXMocHJvcCkpIHtcbiAgICAgICAgICAgICAgICBXcmFwcGVySGVscGVyLmFwcGx5UHJvcFZhbHVlKGluc3RhbmNlLCBwcm9wLCBuZXdWYWx1ZSwgZmFsc2UpO1xuICAgICAgICAgICAgICAgIGlmIChicnludHVtQ29uZmlnc09ubHkuaW5jbHVkZXMocHJvcCkpIHtcbiAgICAgICAgICAgICAgICAgICAgV3JhcHBlckhlbHBlci5kZXZXYXJuaW5nVXBkYXRlUHJvcChpbnN0YW5jZU5hbWUsIHByb3ApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGVzdHJveSB0aGUgY29tcG9uZW50XG4gICAgICovXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgaWYgKHRoaXMuaW5zdGFuY2UgJiYgdGhpcy5pbnN0YW5jZS5kZXN0cm95KSB7XG4gICAgICAgICAgICB0aGlzLmluc3RhbmNlLmRlc3Ryb3koKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiJdfQ==