@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,1068 @@
1
+ /* eslint-disable @typescript-eslint/no-unused-vars */
2
+ /**
3
+ * Angular wrapper for Bryntum ResourceView
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 { ResourceView } from '@bryntum/calendar-thin';
9
+ import * as i0 from "@angular/core";
10
+ export class BryntumResourceViewComponent {
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/ResourceView#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/ResourceView#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/ResourceView#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
+ * Fires when a Panel is collapsed using the [collapsible](https://bryntum.com/products/calendar/docs/api/Core/widget/Panel#config-collapsible) setting.
101
+ * @param {object} event Event object
102
+ * @param {Core.widget.Panel} event.source This Panel.
103
+ */
104
+ this.onCollapse = new EventEmitter();
105
+ /**
106
+ * Fires when an object is destroyed.
107
+ * @param {object} event Event object
108
+ * @param {Core.Base} event.source The Object that is being destroyed.
109
+ */
110
+ this.onDestroy = new EventEmitter();
111
+ /**
112
+ * 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
113
+ * @param {object} event Event object
114
+ * @param {Core.widget.Container} event.source The container.
115
+ * @param {boolean} event.dirty The dirty state of the Container - `true` if there are any fields which have been changed since initial load.
116
+ */
117
+ this.onDirtyStateChange = new EventEmitter();
118
+ /**
119
+ * Triggered when a widget's [element](https://bryntum.com/products/calendar/docs/api/Core/widget/Widget#property-element) is available.
120
+ * @param {object} event Event object
121
+ * @param {HTMLElement} event.element The Widget's element.
122
+ */
123
+ this.onElementCreated = new EventEmitter();
124
+ /**
125
+ * Fired when an [autoCreate](https://bryntum.com/products/calendar/docs/api/Calendar/widget/mixin/CalendarMixin#config-autoCreate) gesture has created a new event
126
+ * and added it to the event store.
127
+ * ...
128
+ * [View online docs...](https://bryntum.com/products/calendar/docs/api/Calendar/widget/ResourceView#event-eventAutoCreated)
129
+ * @param {object} event Event object
130
+ * @param {CalendarView} event.source This Calendar view instance.
131
+ * @param {Scheduler.model.EventModel} event.eventRecord The new event record.
132
+ */
133
+ this.onEventAutoCreated = new EventEmitter();
134
+ /**
135
+ * Fires when a Panel is expanded using the [collapsible](https://bryntum.com/products/calendar/docs/api/Core/widget/Panel#config-collapsible) setting.
136
+ * @param {object} event Event object
137
+ * @param {Core.widget.Panel} event.source This Panel.
138
+ */
139
+ this.onExpand = new EventEmitter();
140
+ /**
141
+ * Fired when focus enters this Widget.
142
+ * @param {object} event Event object
143
+ * @param {Core.widget.Widget} event.source This Widget
144
+ * @param {HTMLElement} event.fromElement The element which lost focus.
145
+ * @param {HTMLElement} event.toElement The element which gained focus.
146
+ * @param {Core.widget.Widget} event.fromWidget The widget which lost focus.
147
+ * @param {Core.widget.Widget} event.toWidget The widget which gained focus.
148
+ * @param {boolean} event.backwards `true` if the `toElement` is before the `fromElement` in document order.
149
+ */
150
+ this.onFocusIn = new EventEmitter();
151
+ /**
152
+ * Fired when focus exits this Widget's ownership tree. This is different from a `blur` event.
153
+ * focus moving from within this Widget's ownership tree, even if there are floating widgets
154
+ * will not trigger this event. This is when focus exits this widget completely.
155
+ * @param {object} event Event object
156
+ * @param {Core.widget.Widget} event.source This Widget
157
+ * @param {HTMLElement} event.fromElement The element which lost focus.
158
+ * @param {HTMLElement} event.toElement The element which gained focus.
159
+ * @param {Core.widget.Widget} event.fromWidget The widget which lost focus.
160
+ * @param {Core.widget.Widget} event.toWidget The widget which gained focus.
161
+ * @param {boolean} event.backwards `true` if the `toElement` is before the `fromElement` in document order.
162
+ */
163
+ this.onFocusOut = new EventEmitter();
164
+ /**
165
+ * Triggered after a widget was hidden
166
+ * @param {object} event Event object
167
+ * @param {Core.widget.Widget} event.source The widget
168
+ */
169
+ this.onHide = new EventEmitter();
170
+ /**
171
+ * Triggered when a widget which had been in a non-visible state for any reason
172
+ * achieves visibility.
173
+ * ...
174
+ * [View online docs...](https://bryntum.com/products/calendar/docs/api/Calendar/widget/ResourceView#event-paint)
175
+ * @param {object} event Event object
176
+ * @param {Core.widget.Widget} event.source The widget being painted.
177
+ * @param {boolean} event.firstPaint `true` if this is the first paint.
178
+ */
179
+ this.onPaint = new EventEmitter();
180
+ /**
181
+ * Fired when a Widget's read only state is toggled
182
+ * @param {object} event Event object
183
+ * @param {boolean} event.readOnly Read only or not
184
+ */
185
+ this.onReadOnly = new EventEmitter();
186
+ /**
187
+ * This event is fired after a widget's elements have been synchronized due to a direct or indirect call
188
+ * 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.
189
+ */
190
+ this.onRecompose = new EventEmitter();
191
+ /**
192
+ * Fires when this ResourceView refreshes.
193
+ * @param {object} event Event object
194
+ * @param {Calendar.widget.ResourceView} event.source The triggering instance.
195
+ */
196
+ this.onRefresh = new EventEmitter();
197
+ /**
198
+ * 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`*.
199
+ * @param {object} event Event object
200
+ * @param {Core.widget.Widget} event.source This Widget
201
+ * @param {number} event.width The new width
202
+ * @param {number} event.height The new height
203
+ * @param {number} event.oldWidth The old width
204
+ * @param {number} event.oldHeight The old height
205
+ */
206
+ this.onResize = new EventEmitter();
207
+ /**
208
+ * Triggered when a new [responsiveState](https://bryntum.com/products/calendar/docs/api/Core/widget/mixin/Responsive#config-responsiveState) is applied.
209
+ * @param {object} event Event object
210
+ * @param {Core.widget.Widget} event.source The widget whose `responsiveState` has changed
211
+ * @param {string} event.state The new value for the widget's `responsiveState`
212
+ * @param {string} event.oldState The previous value for the widget's `responsiveState`
213
+ */
214
+ this.onResponsiveStateChange = new EventEmitter();
215
+ /**
216
+ * Triggered after a widget is shown.
217
+ * @param {object} event Event object
218
+ * @param {Core.widget.Widget} event.source The widget
219
+ */
220
+ this.onShow = new EventEmitter();
221
+ /**
222
+ * A header [tool](https://bryntum.com/products/calendar/docs/api/Core/widget/Panel#config-tools) has been clicked.
223
+ * @param {object} event Event object
224
+ * @param {Core.widget.Tool} event.source This Panel.
225
+ * @param {Core.widget.Tool} event.tool The tool which is being clicked.
226
+ */
227
+ this.onToolClick = new EventEmitter();
228
+ /**
229
+ * Fires when a new sub view is created.
230
+ * @param {object} event Event object
231
+ * @param {Calendar.widget.ResourceView} event.source The triggering instance.
232
+ * @param {CalendarView} event.view The newly created sub view.
233
+ */
234
+ this.onViewCreate = new EventEmitter();
235
+ this.elementRef = element;
236
+ }
237
+ /**
238
+ * Create and append the underlying widget
239
+ */
240
+ ngOnInit() {
241
+ const me = this, { elementRef, bryntumConfig } = me, { instanceClass, instanceName, bryntumConfigs, bryntumEvents } = BryntumResourceViewComponent;
242
+ bryntumConfigs.filter(prop => prop in this).forEach(prop => {
243
+ // @ts-ignore
244
+ WrapperHelper.applyPropValue(bryntumConfig, prop, this[prop]);
245
+ if (['features', 'config'].includes(prop)) {
246
+ WrapperHelper.devWarningConfigProp(instanceName, prop);
247
+ }
248
+ });
249
+ // @ts-ignore
250
+ bryntumEvents.filter(event => this[event] && this[event].observers.length > 0).forEach(event => {
251
+ const uncapitalize = (str) => str.charAt(0).toLowerCase() + str.slice(1), eventName = (str) => uncapitalize(str.slice(2));
252
+ // @ts-ignore
253
+ bryntumConfig.listeners[eventName(event)] = e => {
254
+ // @ts-ignore
255
+ me[event].emit(e);
256
+ // EventEmitter does not return values in the normal way, work around it by setting `returnValue` flag
257
+ // in Angular listeners
258
+ return e.returnValue;
259
+ };
260
+ });
261
+ // If component has no container specified in config then use adopt to Wrapper's element
262
+ const containerParam = [
263
+ 'adopt',
264
+ 'appendTo',
265
+ 'insertAfter',
266
+ 'insertBefore'
267
+ // @ts-ignore
268
+ ].find(prop => bryntumConfig[prop]);
269
+ if (!containerParam) {
270
+ if (instanceName === 'Button' || elementRef.nativeElement.getRootNode() instanceof ShadowRoot) {
271
+ // Button should always be <a> or <button> inside owner element
272
+ bryntumConfig.appendTo = elementRef.nativeElement;
273
+ }
274
+ else {
275
+ bryntumConfig.adopt = elementRef.nativeElement;
276
+ }
277
+ }
278
+ else {
279
+ WrapperHelper.devWarningContainer(instanceName, containerParam);
280
+ }
281
+ // @ts-ignore
282
+ me.instance = instanceName === 'Widget' ? Widget.create(bryntumConfig) : new instanceClass(bryntumConfig);
283
+ }
284
+ /**
285
+ * Watch for changes
286
+ * @param changes
287
+ */
288
+ ngOnChanges(changes) {
289
+ const { instance } = this, { instanceName } = BryntumResourceViewComponent;
290
+ if (!instance) {
291
+ return;
292
+ }
293
+ // Iterate over all changes
294
+ Object.entries(changes).forEach(([prop, change]) => {
295
+ const newValue = change.currentValue, { instance } = this, { bryntumConfigsOnly, bryntumProps } = BryntumResourceViewComponent;
296
+ if (bryntumProps.includes(prop)) {
297
+ WrapperHelper.applyPropValue(instance, prop, newValue, false);
298
+ if (bryntumConfigsOnly.includes(prop)) {
299
+ WrapperHelper.devWarningUpdateProp(instanceName, prop);
300
+ }
301
+ }
302
+ });
303
+ }
304
+ /**
305
+ * Destroy the component
306
+ */
307
+ ngOnDestroy() {
308
+ // @ts-ignore
309
+ if (this.instance && this.instance.destroy) {
310
+ this.instance.destroy();
311
+ }
312
+ }
313
+ }
314
+ BryntumResourceViewComponent.instanceClass = ResourceView;
315
+ BryntumResourceViewComponent.instanceName = 'ResourceView';
316
+ BryntumResourceViewComponent.bryntumEvents = [
317
+ 'onBeforeAutoCreate',
318
+ 'onBeforeChangeDate',
319
+ 'onBeforeDestroy',
320
+ 'onBeforeHide',
321
+ 'onBeforeResponsiveStateChange',
322
+ 'onBeforeSetRecord',
323
+ 'onBeforeShow',
324
+ 'onBeforeStateApply',
325
+ 'onBeforeStateSave',
326
+ 'onCatchAll',
327
+ 'onCollapse',
328
+ 'onDestroy',
329
+ 'onDirtyStateChange',
330
+ 'onElementCreated',
331
+ 'onEventAutoCreated',
332
+ 'onExpand',
333
+ 'onFocusIn',
334
+ 'onFocusOut',
335
+ 'onHide',
336
+ 'onPaint',
337
+ 'onReadOnly',
338
+ 'onRecompose',
339
+ 'onRefresh',
340
+ 'onResize',
341
+ 'onResponsiveStateChange',
342
+ 'onShow',
343
+ 'onToolClick',
344
+ 'onViewCreate'
345
+ ];
346
+ BryntumResourceViewComponent.bryntumFeatureNames = [];
347
+ BryntumResourceViewComponent.bryntumConfigs = BryntumResourceViewComponent.bryntumFeatureNames.concat([
348
+ 'activationKey',
349
+ 'adopt',
350
+ 'align',
351
+ 'alignSelf',
352
+ 'allowDragCreate',
353
+ 'allowDragMove',
354
+ 'allowDragResize',
355
+ 'anchor',
356
+ 'animateTimeShift',
357
+ 'appendTo',
358
+ 'ariaDescription',
359
+ 'ariaLabel',
360
+ 'autoCreate',
361
+ 'bbar',
362
+ 'bodyCls',
363
+ 'bubbleEvents',
364
+ 'callOnFunctions',
365
+ 'catchEventHandlerExceptions',
366
+ 'centered',
367
+ 'cls',
368
+ 'collapsed',
369
+ 'collapsible',
370
+ 'color',
371
+ 'column',
372
+ 'config',
373
+ 'constrainTo',
374
+ 'contentElementCls',
375
+ 'dataField',
376
+ 'dataset',
377
+ 'dateFormat',
378
+ 'dateSeparator',
379
+ 'defaultBindProperty',
380
+ 'defaultFocus',
381
+ 'defaults',
382
+ 'defaultScrollOptions',
383
+ 'descriptionFormat',
384
+ 'descriptionRenderer',
385
+ 'detectCSSCompatibilityIssues',
386
+ 'disabled',
387
+ 'dock',
388
+ 'draggable',
389
+ 'dragUnit',
390
+ 'drawer',
391
+ 'elementAttributes',
392
+ 'eventHeaderRenderer',
393
+ 'eventHeight',
394
+ 'eventRenderer',
395
+ 'eventSorter',
396
+ 'extendAllDayEndDay',
397
+ 'extraData',
398
+ 'filterEventResources',
399
+ 'flex',
400
+ 'floating',
401
+ 'footer',
402
+ 'getPrimaryResource',
403
+ 'header',
404
+ 'height',
405
+ 'hidden',
406
+ 'hideAnimation',
407
+ 'hideNonWorkingDays',
408
+ 'hideWhenEmpty',
409
+ 'icon',
410
+ 'id',
411
+ 'ignoreParentReadOnly',
412
+ 'includeTimeRanges',
413
+ 'inputFieldAlign',
414
+ 'insertBefore',
415
+ 'insertFirst',
416
+ 'itemCls',
417
+ 'items',
418
+ 'keyMap',
419
+ 'labelPosition',
420
+ 'layout',
421
+ 'layoutStyle',
422
+ 'lazyItems',
423
+ 'listeners',
424
+ 'localeClass',
425
+ 'localizable',
426
+ 'localizableProperties',
427
+ 'margin',
428
+ 'maskDefaults',
429
+ 'masked',
430
+ 'maxDate',
431
+ 'maxHeight',
432
+ 'maximizeOnMobile',
433
+ 'maxWidth',
434
+ 'meta',
435
+ 'minDate',
436
+ 'minHeight',
437
+ 'minWidth',
438
+ 'monitorResize',
439
+ 'namedItems',
440
+ 'nonWorkingDays',
441
+ 'owner',
442
+ 'pastEventCls',
443
+ 'positioned',
444
+ 'preventTooltipOnTouch',
445
+ 'range',
446
+ 'readOnly',
447
+ 'relayStoreEvents',
448
+ 'rendition',
449
+ 'resourceImagePath',
450
+ 'resourceWidth',
451
+ 'responsive',
452
+ 'responsiveRoot',
453
+ 'responsiveState',
454
+ 'responsiveTarget',
455
+ 'ripple',
456
+ 'rootElement',
457
+ 'rtl',
458
+ 'scrollable',
459
+ 'scrollAction',
460
+ 'selectorButton',
461
+ 'selectorMenuItem',
462
+ 'shortDateFormat',
463
+ 'shortDateTimeFormat',
464
+ 'shortEventCls',
465
+ 'shortEventDuration',
466
+ 'showAnimation',
467
+ 'showAvatars',
468
+ 'showBullet',
469
+ 'showResourceAvatars',
470
+ 'showTooltipWhenDisabled',
471
+ 'span',
472
+ 'stableResourceOrder',
473
+ 'stateful',
474
+ 'statefulEvents',
475
+ 'stateId',
476
+ 'stateProvider',
477
+ 'strictRecordMapping',
478
+ 'strips',
479
+ 'syncCalendarDate',
480
+ 'syncViewDate',
481
+ 'tab',
482
+ 'tabBarItems',
483
+ 'tag',
484
+ 'tbar',
485
+ 'textAlign',
486
+ 'timeFormat',
487
+ 'title',
488
+ 'tools',
489
+ 'tooltip',
490
+ 'trapFocus',
491
+ 'type',
492
+ 'ui',
493
+ 'view',
494
+ 'viewGap',
495
+ 'weekStartDay',
496
+ 'weight',
497
+ 'width',
498
+ 'x',
499
+ 'y'
500
+ ]);
501
+ BryntumResourceViewComponent.bryntumConfigsOnly = [
502
+ 'activationKey',
503
+ 'adopt',
504
+ 'align',
505
+ 'anchor',
506
+ 'ariaDescription',
507
+ 'ariaLabel',
508
+ 'bbar',
509
+ 'bodyCls',
510
+ 'bubbleEvents',
511
+ 'centered',
512
+ 'collapsible',
513
+ 'color',
514
+ 'config',
515
+ 'constrainTo',
516
+ 'contentElementCls',
517
+ 'dataField',
518
+ 'defaultBindProperty',
519
+ 'defaultFocus',
520
+ 'defaults',
521
+ 'descriptionRenderer',
522
+ 'detectCSSCompatibilityIssues',
523
+ 'dock',
524
+ 'draggable',
525
+ 'drawer',
526
+ 'elementAttributes',
527
+ 'eventHeaderRenderer',
528
+ 'eventHeight',
529
+ 'eventRenderer',
530
+ 'eventSorter',
531
+ 'floating',
532
+ 'footer',
533
+ 'getPrimaryResource',
534
+ 'header',
535
+ 'hideAnimation',
536
+ 'hideWhenEmpty',
537
+ 'icon',
538
+ 'ignoreParentReadOnly',
539
+ 'includeTimeRanges',
540
+ 'itemCls',
541
+ 'lazyItems',
542
+ 'listeners',
543
+ 'localeClass',
544
+ 'localizable',
545
+ 'localizableProperties',
546
+ 'maskDefaults',
547
+ 'masked',
548
+ 'meta',
549
+ 'monitorResize',
550
+ 'namedItems',
551
+ 'owner',
552
+ 'positioned',
553
+ 'preventTooltipOnTouch',
554
+ 'relayStoreEvents',
555
+ 'resourceImagePath',
556
+ 'responsive',
557
+ 'responsiveRoot',
558
+ 'responsiveState',
559
+ 'responsiveTarget',
560
+ 'ripple',
561
+ 'rootElement',
562
+ 'scrollAction',
563
+ 'selectorButton',
564
+ 'selectorMenuItem',
565
+ 'shortEventCls',
566
+ 'shortEventDuration',
567
+ 'showAnimation',
568
+ 'showAvatars',
569
+ 'showBullet',
570
+ 'showResourceAvatars',
571
+ 'showTooltipWhenDisabled',
572
+ 'stableResourceOrder',
573
+ 'stateful',
574
+ 'statefulEvents',
575
+ 'stateId',
576
+ 'stateProvider',
577
+ 'strips',
578
+ 'tab',
579
+ 'tabBarItems',
580
+ 'tag',
581
+ 'tbar',
582
+ 'textAlign',
583
+ 'timeFormat',
584
+ 'trapFocus',
585
+ 'type',
586
+ 'ui',
587
+ 'weekStartDay',
588
+ 'weight'
589
+ ];
590
+ BryntumResourceViewComponent.bryntumProps = BryntumResourceViewComponent.bryntumFeatureNames.concat([
591
+ 'alignSelf',
592
+ 'allowDragCreate',
593
+ 'allowDragMove',
594
+ 'allowDragResize',
595
+ 'anchorSize',
596
+ 'animateTimeShift',
597
+ 'appendTo',
598
+ 'autoCreate',
599
+ 'callOnFunctions',
600
+ 'catchEventHandlerExceptions',
601
+ 'cls',
602
+ 'collapsed',
603
+ 'column',
604
+ 'dataset',
605
+ 'dateFormat',
606
+ 'dateSeparator',
607
+ 'dayCellCls',
608
+ 'defaultScrollOptions',
609
+ 'descriptionFormat',
610
+ 'disabled',
611
+ 'dragUnit',
612
+ 'extendAllDayEndDay',
613
+ 'extraData',
614
+ 'filterEventResources',
615
+ 'firstVisibleCell',
616
+ 'firstVisibleDate',
617
+ 'flex',
618
+ 'focusVisible',
619
+ 'hasChanges',
620
+ 'height',
621
+ 'hidden',
622
+ 'hideNonWorkingDays',
623
+ 'id',
624
+ 'inputFieldAlign',
625
+ 'insertBefore',
626
+ 'insertFirst',
627
+ 'isSettingValues',
628
+ 'isValid',
629
+ 'items',
630
+ 'keyMap',
631
+ 'labelPosition',
632
+ 'lastVisibleCell',
633
+ 'lastVisibleDate',
634
+ 'layout',
635
+ 'layoutStyle',
636
+ 'margin',
637
+ 'maxDate',
638
+ 'maxHeight',
639
+ 'maximizeOnMobile',
640
+ 'maxWidth',
641
+ 'minDate',
642
+ 'minHeight',
643
+ 'minWidth',
644
+ 'nonWorkingDays',
645
+ 'parent',
646
+ 'pastEventCls',
647
+ 'range',
648
+ 'readOnly',
649
+ 'record',
650
+ 'rendition',
651
+ 'resourceWidth',
652
+ 'rtl',
653
+ 'scrollable',
654
+ 'shortDateFormat',
655
+ 'shortDateTimeFormat',
656
+ 'span',
657
+ 'state',
658
+ 'strictRecordMapping',
659
+ 'syncCalendarDate',
660
+ 'syncViewDate',
661
+ 'title',
662
+ 'tools',
663
+ 'tooltip',
664
+ 'values',
665
+ 'view',
666
+ 'viewGap',
667
+ 'width',
668
+ 'x',
669
+ 'y'
670
+ ]);
671
+ BryntumResourceViewComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.0", ngImport: i0, type: BryntumResourceViewComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
672
+ BryntumResourceViewComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.0", type: BryntumResourceViewComponent, selector: "bryntum-resource-view", inputs: { activationKey: "activationKey", adopt: "adopt", align: "align", anchor: "anchor", ariaDescription: "ariaDescription", ariaLabel: "ariaLabel", bbar: "bbar", bodyCls: "bodyCls", bubbleEvents: "bubbleEvents", centered: "centered", collapsible: "collapsible", color: "color", config: "config", constrainTo: "constrainTo", contentElementCls: "contentElementCls", dataField: "dataField", defaultBindProperty: "defaultBindProperty", defaultFocus: "defaultFocus", defaults: "defaults", descriptionRenderer: "descriptionRenderer", detectCSSCompatibilityIssues: "detectCSSCompatibilityIssues", dock: "dock", draggable: "draggable", drawer: "drawer", elementAttributes: "elementAttributes", eventHeaderRenderer: "eventHeaderRenderer", eventHeight: "eventHeight", eventRenderer: "eventRenderer", eventSorter: "eventSorter", floating: "floating", footer: "footer", getPrimaryResource: "getPrimaryResource", header: "header", hideAnimation: "hideAnimation", hideWhenEmpty: "hideWhenEmpty", icon: "icon", ignoreParentReadOnly: "ignoreParentReadOnly", includeTimeRanges: "includeTimeRanges", itemCls: "itemCls", lazyItems: "lazyItems", listeners: "listeners", localeClass: "localeClass", localizable: "localizable", localizableProperties: "localizableProperties", maskDefaults: "maskDefaults", masked: "masked", meta: "meta", monitorResize: "monitorResize", namedItems: "namedItems", 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", showAnimation: "showAnimation", showAvatars: "showAvatars", showBullet: "showBullet", showResourceAvatars: "showResourceAvatars", showTooltipWhenDisabled: "showTooltipWhenDisabled", stableResourceOrder: "stableResourceOrder", stateful: "stateful", statefulEvents: "statefulEvents", stateId: "stateId", stateProvider: "stateProvider", strips: "strips", tab: "tab", tabBarItems: "tabBarItems", tag: "tag", tbar: "tbar", textAlign: "textAlign", timeFormat: "timeFormat", trapFocus: "trapFocus", type: "type", ui: "ui", weekStartDay: "weekStartDay", weight: "weight", alignSelf: "alignSelf", allowDragCreate: "allowDragCreate", allowDragMove: "allowDragMove", allowDragResize: "allowDragResize", animateTimeShift: "animateTimeShift", appendTo: "appendTo", autoCreate: "autoCreate", callOnFunctions: "callOnFunctions", catchEventHandlerExceptions: "catchEventHandlerExceptions", cls: "cls", collapsed: "collapsed", column: "column", dataset: "dataset", dateFormat: "dateFormat", dateSeparator: "dateSeparator", defaultScrollOptions: "defaultScrollOptions", descriptionFormat: "descriptionFormat", disabled: "disabled", dragUnit: "dragUnit", extendAllDayEndDay: "extendAllDayEndDay", extraData: "extraData", filterEventResources: "filterEventResources", flex: "flex", height: "height", hidden: "hidden", hideNonWorkingDays: "hideNonWorkingDays", id: "id", inputFieldAlign: "inputFieldAlign", insertBefore: "insertBefore", insertFirst: "insertFirst", items: "items", keyMap: "keyMap", labelPosition: "labelPosition", layout: "layout", layoutStyle: "layoutStyle", margin: "margin", maxDate: "maxDate", maxHeight: "maxHeight", maximizeOnMobile: "maximizeOnMobile", maxWidth: "maxWidth", minDate: "minDate", minHeight: "minHeight", minWidth: "minWidth", nonWorkingDays: "nonWorkingDays", pastEventCls: "pastEventCls", range: "range", readOnly: "readOnly", rendition: "rendition", resourceWidth: "resourceWidth", rtl: "rtl", scrollable: "scrollable", shortDateFormat: "shortDateFormat", shortDateTimeFormat: "shortDateTimeFormat", span: "span", strictRecordMapping: "strictRecordMapping", syncCalendarDate: "syncCalendarDate", syncViewDate: "syncViewDate", title: "title", tools: "tools", tooltip: "tooltip", view: "view", viewGap: "viewGap", width: "width", x: "x", y: "y", anchorSize: "anchorSize", dayCellCls: "dayCellCls", firstVisibleCell: "firstVisibleCell", firstVisibleDate: "firstVisibleDate", focusVisible: "focusVisible", hasChanges: "hasChanges", 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", onCollapse: "onCollapse", onDestroy: "onDestroy", onDirtyStateChange: "onDirtyStateChange", onElementCreated: "onElementCreated", onEventAutoCreated: "onEventAutoCreated", onExpand: "onExpand", onFocusIn: "onFocusIn", onFocusOut: "onFocusOut", onHide: "onHide", onPaint: "onPaint", onReadOnly: "onReadOnly", onRecompose: "onRecompose", onRefresh: "onRefresh", onResize: "onResize", onResponsiveStateChange: "onResponsiveStateChange", onShow: "onShow", onToolClick: "onToolClick", onViewCreate: "onViewCreate" }, usesOnChanges: true, ngImport: i0, template: '', isInline: true });
673
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.0", ngImport: i0, type: BryntumResourceViewComponent, decorators: [{
674
+ type: Component,
675
+ args: [{
676
+ selector: 'bryntum-resource-view',
677
+ template: ''
678
+ }]
679
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { activationKey: [{
680
+ type: Input
681
+ }], adopt: [{
682
+ type: Input
683
+ }], align: [{
684
+ type: Input
685
+ }], anchor: [{
686
+ type: Input
687
+ }], ariaDescription: [{
688
+ type: Input
689
+ }], ariaLabel: [{
690
+ type: Input
691
+ }], bbar: [{
692
+ type: Input
693
+ }], bodyCls: [{
694
+ type: Input
695
+ }], bubbleEvents: [{
696
+ type: Input
697
+ }], centered: [{
698
+ type: Input
699
+ }], collapsible: [{
700
+ type: Input
701
+ }], color: [{
702
+ type: Input
703
+ }], config: [{
704
+ type: Input
705
+ }], constrainTo: [{
706
+ type: Input
707
+ }], contentElementCls: [{
708
+ type: Input
709
+ }], dataField: [{
710
+ type: Input
711
+ }], defaultBindProperty: [{
712
+ type: Input
713
+ }], defaultFocus: [{
714
+ type: Input
715
+ }], defaults: [{
716
+ type: Input
717
+ }], descriptionRenderer: [{
718
+ type: Input
719
+ }], detectCSSCompatibilityIssues: [{
720
+ type: Input
721
+ }], dock: [{
722
+ type: Input
723
+ }], draggable: [{
724
+ type: Input
725
+ }], drawer: [{
726
+ type: Input
727
+ }], elementAttributes: [{
728
+ type: Input
729
+ }], eventHeaderRenderer: [{
730
+ type: Input
731
+ }], eventHeight: [{
732
+ type: Input
733
+ }], eventRenderer: [{
734
+ type: Input
735
+ }], eventSorter: [{
736
+ type: Input
737
+ }], floating: [{
738
+ type: Input
739
+ }], footer: [{
740
+ type: Input
741
+ }], getPrimaryResource: [{
742
+ type: Input
743
+ }], header: [{
744
+ type: Input
745
+ }], hideAnimation: [{
746
+ type: Input
747
+ }], hideWhenEmpty: [{
748
+ type: Input
749
+ }], icon: [{
750
+ type: Input
751
+ }], ignoreParentReadOnly: [{
752
+ type: Input
753
+ }], includeTimeRanges: [{
754
+ type: Input
755
+ }], itemCls: [{
756
+ type: Input
757
+ }], lazyItems: [{
758
+ type: Input
759
+ }], listeners: [{
760
+ type: Input
761
+ }], localeClass: [{
762
+ type: Input
763
+ }], localizable: [{
764
+ type: Input
765
+ }], localizableProperties: [{
766
+ type: Input
767
+ }], maskDefaults: [{
768
+ type: Input
769
+ }], masked: [{
770
+ type: Input
771
+ }], meta: [{
772
+ type: Input
773
+ }], monitorResize: [{
774
+ type: Input
775
+ }], namedItems: [{
776
+ type: Input
777
+ }], owner: [{
778
+ type: Input
779
+ }], positioned: [{
780
+ type: Input
781
+ }], preventTooltipOnTouch: [{
782
+ type: Input
783
+ }], relayStoreEvents: [{
784
+ type: Input
785
+ }], resourceImagePath: [{
786
+ type: Input
787
+ }], responsive: [{
788
+ type: Input
789
+ }], responsiveRoot: [{
790
+ type: Input
791
+ }], responsiveState: [{
792
+ type: Input
793
+ }], responsiveTarget: [{
794
+ type: Input
795
+ }], ripple: [{
796
+ type: Input
797
+ }], rootElement: [{
798
+ type: Input
799
+ }], scrollAction: [{
800
+ type: Input
801
+ }], selectorButton: [{
802
+ type: Input
803
+ }], selectorMenuItem: [{
804
+ type: Input
805
+ }], shortEventCls: [{
806
+ type: Input
807
+ }], shortEventDuration: [{
808
+ type: Input
809
+ }], showAnimation: [{
810
+ type: Input
811
+ }], showAvatars: [{
812
+ type: Input
813
+ }], showBullet: [{
814
+ type: Input
815
+ }], showResourceAvatars: [{
816
+ type: Input
817
+ }], showTooltipWhenDisabled: [{
818
+ type: Input
819
+ }], stableResourceOrder: [{
820
+ type: Input
821
+ }], stateful: [{
822
+ type: Input
823
+ }], statefulEvents: [{
824
+ type: Input
825
+ }], stateId: [{
826
+ type: Input
827
+ }], stateProvider: [{
828
+ type: Input
829
+ }], strips: [{
830
+ type: Input
831
+ }], tab: [{
832
+ type: Input
833
+ }], tabBarItems: [{
834
+ type: Input
835
+ }], tag: [{
836
+ type: Input
837
+ }], tbar: [{
838
+ type: Input
839
+ }], textAlign: [{
840
+ type: Input
841
+ }], timeFormat: [{
842
+ type: Input
843
+ }], trapFocus: [{
844
+ type: Input
845
+ }], type: [{
846
+ type: Input
847
+ }], ui: [{
848
+ type: Input
849
+ }], weekStartDay: [{
850
+ type: Input
851
+ }], weight: [{
852
+ type: Input
853
+ }], alignSelf: [{
854
+ type: Input
855
+ }], allowDragCreate: [{
856
+ type: Input
857
+ }], allowDragMove: [{
858
+ type: Input
859
+ }], allowDragResize: [{
860
+ type: Input
861
+ }], animateTimeShift: [{
862
+ type: Input
863
+ }], appendTo: [{
864
+ type: Input
865
+ }], autoCreate: [{
866
+ type: Input
867
+ }], callOnFunctions: [{
868
+ type: Input
869
+ }], catchEventHandlerExceptions: [{
870
+ type: Input
871
+ }], cls: [{
872
+ type: Input
873
+ }], collapsed: [{
874
+ type: Input
875
+ }], column: [{
876
+ type: Input
877
+ }], dataset: [{
878
+ type: Input
879
+ }], dateFormat: [{
880
+ type: Input
881
+ }], dateSeparator: [{
882
+ type: Input
883
+ }], defaultScrollOptions: [{
884
+ type: Input
885
+ }], descriptionFormat: [{
886
+ type: Input
887
+ }], disabled: [{
888
+ type: Input
889
+ }], dragUnit: [{
890
+ type: Input
891
+ }], extendAllDayEndDay: [{
892
+ type: Input
893
+ }], extraData: [{
894
+ type: Input
895
+ }], filterEventResources: [{
896
+ type: Input
897
+ }], flex: [{
898
+ type: Input
899
+ }], height: [{
900
+ type: Input
901
+ }], hidden: [{
902
+ type: Input
903
+ }], hideNonWorkingDays: [{
904
+ type: Input
905
+ }], id: [{
906
+ type: Input
907
+ }], inputFieldAlign: [{
908
+ type: Input
909
+ }], insertBefore: [{
910
+ type: Input
911
+ }], insertFirst: [{
912
+ type: Input
913
+ }], items: [{
914
+ type: Input
915
+ }], keyMap: [{
916
+ type: Input
917
+ }], labelPosition: [{
918
+ type: Input
919
+ }], layout: [{
920
+ type: Input
921
+ }], layoutStyle: [{
922
+ type: Input
923
+ }], margin: [{
924
+ type: Input
925
+ }], maxDate: [{
926
+ type: Input
927
+ }], maxHeight: [{
928
+ type: Input
929
+ }], maximizeOnMobile: [{
930
+ type: Input
931
+ }], maxWidth: [{
932
+ type: Input
933
+ }], minDate: [{
934
+ type: Input
935
+ }], minHeight: [{
936
+ type: Input
937
+ }], minWidth: [{
938
+ type: Input
939
+ }], nonWorkingDays: [{
940
+ type: Input
941
+ }], pastEventCls: [{
942
+ type: Input
943
+ }], range: [{
944
+ type: Input
945
+ }], readOnly: [{
946
+ type: Input
947
+ }], rendition: [{
948
+ type: Input
949
+ }], resourceWidth: [{
950
+ type: Input
951
+ }], rtl: [{
952
+ type: Input
953
+ }], scrollable: [{
954
+ type: Input
955
+ }], shortDateFormat: [{
956
+ type: Input
957
+ }], shortDateTimeFormat: [{
958
+ type: Input
959
+ }], span: [{
960
+ type: Input
961
+ }], strictRecordMapping: [{
962
+ type: Input
963
+ }], syncCalendarDate: [{
964
+ type: Input
965
+ }], syncViewDate: [{
966
+ type: Input
967
+ }], title: [{
968
+ type: Input
969
+ }], tools: [{
970
+ type: Input
971
+ }], tooltip: [{
972
+ type: Input
973
+ }], view: [{
974
+ type: Input
975
+ }], viewGap: [{
976
+ type: Input
977
+ }], width: [{
978
+ type: Input
979
+ }], x: [{
980
+ type: Input
981
+ }], y: [{
982
+ type: Input
983
+ }], anchorSize: [{
984
+ type: Input
985
+ }], dayCellCls: [{
986
+ type: Input
987
+ }], firstVisibleCell: [{
988
+ type: Input
989
+ }], firstVisibleDate: [{
990
+ type: Input
991
+ }], focusVisible: [{
992
+ type: Input
993
+ }], hasChanges: [{
994
+ type: Input
995
+ }], isSettingValues: [{
996
+ type: Input
997
+ }], isValid: [{
998
+ type: Input
999
+ }], lastVisibleCell: [{
1000
+ type: Input
1001
+ }], lastVisibleDate: [{
1002
+ type: Input
1003
+ }], parent: [{
1004
+ type: Input
1005
+ }], record: [{
1006
+ type: Input
1007
+ }], state: [{
1008
+ type: Input
1009
+ }], values: [{
1010
+ type: Input
1011
+ }], onBeforeAutoCreate: [{
1012
+ type: Output
1013
+ }], onBeforeChangeDate: [{
1014
+ type: Output
1015
+ }], onBeforeDestroy: [{
1016
+ type: Output
1017
+ }], onBeforeHide: [{
1018
+ type: Output
1019
+ }], onBeforeResponsiveStateChange: [{
1020
+ type: Output
1021
+ }], onBeforeSetRecord: [{
1022
+ type: Output
1023
+ }], onBeforeShow: [{
1024
+ type: Output
1025
+ }], onBeforeStateApply: [{
1026
+ type: Output
1027
+ }], onBeforeStateSave: [{
1028
+ type: Output
1029
+ }], onCatchAll: [{
1030
+ type: Output
1031
+ }], onCollapse: [{
1032
+ type: Output
1033
+ }], onDestroy: [{
1034
+ type: Output
1035
+ }], onDirtyStateChange: [{
1036
+ type: Output
1037
+ }], onElementCreated: [{
1038
+ type: Output
1039
+ }], onEventAutoCreated: [{
1040
+ type: Output
1041
+ }], onExpand: [{
1042
+ type: Output
1043
+ }], onFocusIn: [{
1044
+ type: Output
1045
+ }], onFocusOut: [{
1046
+ type: Output
1047
+ }], onHide: [{
1048
+ type: Output
1049
+ }], onPaint: [{
1050
+ type: Output
1051
+ }], onReadOnly: [{
1052
+ type: Output
1053
+ }], onRecompose: [{
1054
+ type: Output
1055
+ }], onRefresh: [{
1056
+ type: Output
1057
+ }], onResize: [{
1058
+ type: Output
1059
+ }], onResponsiveStateChange: [{
1060
+ type: Output
1061
+ }], onShow: [{
1062
+ type: Output
1063
+ }], onToolClick: [{
1064
+ type: Output
1065
+ }], onViewCreate: [{
1066
+ type: Output
1067
+ }] } });
1068
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJ5bnR1bS1yZXNvdXJjZS12aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2NvbXBvbmVudC9zcmMvbGliL2JyeW50dW0tcmVzb3VyY2Utdmlldy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsc0RBQXNEO0FBQ3REOztHQUVHO0FBRUgsT0FBTyxFQUFFLFNBQVMsRUFBYyxZQUFZLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBa0QsTUFBTSxlQUFlLENBQUM7QUFFbkksT0FBTyxhQUFhLE1BQU0sa0JBQWtCLENBQUM7QUFFN0MsT0FBTyxFQUE4WCxNQUFNLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUV4YSxPQUFPLEVBQXNGLFlBQVksRUFBeUIsTUFBTSx3QkFBd0IsQ0FBQzs7QUF5K0JqSyxNQUFNLE9BQU8sNEJBQTRCO0lBNFhyQyxZQUFZLE9BQW1CO1FBVHZCLGtCQUFhLEdBQUc7WUFDcEIsS0FBSyxFQUFjLFNBQVM7WUFDNUIsUUFBUSxFQUFXLFNBQVM7WUFDNUIsSUFBSSxFQUFlLFNBQVM7WUFDNUIsZ0JBQWdCLEVBQUcsSUFBSTtZQUN2QixRQUFRLEVBQVcsRUFBRTtZQUNyQixTQUFTLEVBQVUsRUFBRTtTQUN4QixDQUFDO1FBc01GLGtCQUFrQjtRQUNsQjs7Ozs7Ozs7Ozs7O1dBWUc7UUFDTyx1QkFBa0IsR0FBUSxJQUFJLFlBQVksRUFBeUssQ0FBQztRQUM5Tjs7Ozs7OztXQU9HO1FBQ08sdUJBQWtCLEdBQVEsSUFBSSxZQUFZLEVBQW9GLENBQUM7UUFDekk7Ozs7V0FJRztRQUNPLG9CQUFlLEdBQVEsSUFBSSxZQUFZLEVBQThDLENBQUM7UUFDaEc7Ozs7V0FJRztRQUNPLGlCQUFZLEdBQVEsSUFBSSxZQUFZLEVBQXlFLENBQUM7UUFDeEg7Ozs7OztXQU1HO1FBQ08sa0NBQTZCLEdBQVEsSUFBSSxZQUFZLEVBQWlGLENBQUM7UUFDako7Ozs7OztXQU1HO1FBQ08sc0JBQWlC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a0JBQWtCO3NCQUEzQixNQUFNO2dCQVNHLGtCQUFrQjtzQkFBM0IsTUFBTTtnQkFNRyxlQUFlO3NCQUF4QixNQUFNO2dCQU1HLFlBQVk7c0JBQXJCLE1BQU07Z0JBUUcsNkJBQTZCO3NCQUF0QyxNQUFNO2dCQVFHLGlCQUFpQjtzQkFBMUIsTUFBTTtnQkFNRyxZQUFZO3NCQUFyQixNQUFNO2dCQU1HLGtCQUFrQjtzQkFBM0IsTUFBTTtnQkFNRyxpQkFBaUI7c0JBQTFCLE1BQU07Z0JBU0csVUFBVTtzQkFBbkIsTUFBTTtnQkFNRyxVQUFVO3NCQUFuQixNQUFNO2dCQU1HLFNBQVM7c0JBQWxCLE1BQU07Z0JBT0csa0JBQWtCO3NCQUEzQixNQUFNO2dCQU1HLGdCQUFnQjtzQkFBekIsTUFBTTtnQkFVRyxrQkFBa0I7c0JBQTNCLE1BQU07Z0JBTUcsUUFBUTtzQkFBakIsTUFBTTtnQkFXRyxTQUFTO3NCQUFsQixNQUFNO2dCQWFHLFVBQVU7c0JBQW5CLE1BQU07Z0JBTUcsTUFBTTtzQkFBZixNQUFNO2dCQVVHLE9BQU87c0JBQWhCLE1BQU07Z0JBTUcsVUFBVTtzQkFBbkIsTUFBTTtnQkFLRyxXQUFXO3NCQUFwQixNQUFNO2dCQU1HLFNBQVM7c0JBQWxCLE1BQU07Z0JBVUcsUUFBUTtzQkFBakIsTUFBTTtnQkFRRyx1QkFBdUI7c0JBQWhDLE1BQU07Z0JBTUcsTUFBTTtzQkFBZixNQUFNO2dCQU9HLFdBQVc7c0JBQXBCLE1BQU07Z0JBT0csWUFBWTtzQkFBckIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFycyAqL1xuLyoqXG4gKiBBbmd1bGFyIHdyYXBwZXIgZm9yIEJyeW50dW0gUmVzb3VyY2VWaWV3XG4gKi9cblxuaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIE91dHB1dCwgSW5wdXQsIFNpbXBsZUNoYW5nZSwgU2ltcGxlQ2hhbmdlcywgT25EZXN0cm95LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IFdyYXBwZXJIZWxwZXIgZnJvbSAnLi93cmFwcGVyLmhlbHBlcic7XG5cbmltcG9ydCB7IEFsaWduU3BlYywgQmFzZSwgQnJ5bnR1bVNjcm9sbE9wdGlvbnMsIEJ1dHRvbkNvbmZpZywgQ29udGFpbmVyLCBEb21Db25maWcsIER1cmF0aW9uQ29uZmlnLCBLZXlNYXBDb25maWcsIExheW91dCwgTWFza0NvbmZpZywgTWVudUl0ZW1Db25maWcsIE1lbnVJdGVtRW50cnksIE1vZGVsLCBQYWdpbmdUb29sYmFyQ29uZmlnLCBQYW5lbCwgUGFuZWxDb2xsYXBzZXJDb25maWcsIFBhbmVsQ29sbGFwc2VyT3ZlcmxheUNvbmZpZywgUGFuZWxIZWFkZXIsIFJlY3RhbmdsZSwgU2Nyb2xsZXIsIFNjcm9sbGVyQ29uZmlnLCBTdGF0ZVByb3ZpZGVyLCBUYWJDb25maWcsIFRvb2wsIFRvb2xDb25maWcsIFRvb2xiYXJDb25maWcsIFRvb2xiYXJJdGVtcywgVG9vbHRpcENvbmZpZywgV2lkZ2V0IH0gZnJvbSAnQGJyeW50dW0vY29yZS10aGluJztcbmltcG9ydCB7IEV2ZW50TW9kZWwsIFJlc291cmNlTW9kZWwgfSBmcm9tICdAYnJ5bnR1bS9zY2hlZHVsZXItdGhpbic7XG5pbXBvcnQgeyBDYWxlbmRhclZpZXcsIENhbGVuZGFyQ29udGFpbmVySXRlbUNvbmZpZywgQ2FsZW5kYXJDb250YWluZXJMYXlvdXRDb25maWcsIEV2ZW50QmFyLCBSZXNvdXJjZVZpZXcsIFJlc291cmNlVmlld0xpc3RlbmVycyB9IGZyb20gJ0BicnludHVtL2NhbGVuZGFyLXRoaW4nO1xuXG5pbXBvcnQgeyBTdHJpbmdIZWxwZXIgfSBmcm9tICdAYnJ5bnR1bS9jb3JlLXRoaW4nO1xuXG5leHBvcnQgdHlwZSBCcnludHVtUmVzb3VyY2VWaWV3UHJvcHMgPSB7XG4gICAgLy8gQ29uZmlnc1xuICAgIC8qKlxuICAgICAqIEEga2V5IHRvIHVzZSB0byBhY3RpdmF0ZSB0aGlzIHZpZXcuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L1Jlc291cmNlVmlldyNjb25maWctYWN0aXZhdGlvbktleSlcbiAgICAgKi9cbiAgICBhY3RpdmF0aW9uS2V5ID8gOiBzdHJpbmdcbiAgICAvKipcbiAgICAgKiBFbGVtZW50IChvciBlbGVtZW50IGlkKSB0byBhZG9wdCBhcyB0aGlzIFdpZGdldCdzIGVuY2Fwc3VsYXRpbmcgZWxlbWVudC4gVGhlIHdpZGdldCdzXG4gICAgICogY29udGVudCB3aWxsIGJlIHBsYWNlZCBpbnNpZGUgdGhpcyBlbGVtZW50LlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9SZXNvdXJjZVZpZXcjY29uZmlnLWFkb3B0KVxuICAgICAqL1xuICAgIGFkb3B0ID8gOiBIVE1MRWxlbWVudHxzdHJpbmdcbiAgICAvKipcbiAgICAgKiAqT25seSB2YWxpZCBpZiB0aGlzIFdpZGdldCBpcyBbZmxvYXRpbmddKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ29yZS93aWRnZXQvV2lkZ2V0I2NvbmZpZy1mbG9hdGluZykuKlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9SZXNvdXJjZVZpZXcjY29uZmlnLWFsaWduKVxuICAgICAqL1xuICAgIGFsaWduID8gOiBBbGlnblNwZWN8c3RyaW5nXG4gICAgLyoqXG4gICAgICogV2hlbiB0aGlzIHdpZGdldCBpcyBhIGNoaWxkIG9mIGEgW0NvbnRhaW5lcl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9Db3JlL3dpZGdldC9Db250YWluZXIpLCBpdCB3aWxsIGJ5IGRlZmF1bHQgYmUgcGFydGljaXBhdGluZyBpbiBhXG4gICAgICogZmxleGJveCBsYXlvdXQuIFRoaXMgY29uZmlnIGFsbG93cyB5b3UgdG8gc2V0IHRoaXMgd2lkZ2V0J3NcbiAgICAgKiBbYWxpZ24tc2VsZl0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL2FsaWduLXNlbGYpIHN0eWxlLlxuICAgICAqL1xuICAgIGFsaWduU2VsZiA/IDogc3RyaW5nXG4gICAgLyoqXG4gICAgICogQ29uZmlndXJlIHRoaXMgYXMgYGZhbHNlYCB0byBkaXNhYmxlIGRyYWctY3JlYXRpbmcgZXZlbnRzIGluIHRoaXMgdmlldy5cbiAgICAgKi9cbiAgICBhbGxvd0RyYWdDcmVhdGUgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBDb25maWd1cmUgdGhpcyBhcyBgZmFsc2VgIHRvIGRpc2FibGUgZHJhZy1tb3ZpbmcgZXZlbnRzIGluIHRoaXMgdmlldy5cbiAgICAgKi9cbiAgICBhbGxvd0RyYWdNb3ZlID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogQ29uZmlndXJlIHRoaXMgYXMgYGZhbHNlYCB0byBkaXNhYmxlIGRyYWctcmVzaXppbmcgZXZlbnRzIGluIHRoaXMgdmlldy5cbiAgICAgKi9cbiAgICBhbGxvd0RyYWdSZXNpemUgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiAqT25seSB2YWxpZCBpZiB0aGlzIFdpZGdldCBpcyBbZmxvYXRpbmddKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ29yZS93aWRnZXQvV2lkZ2V0I2NvbmZpZy1mbG9hdGluZykgYW5kIGJlaW5nIHNob3duIHRocm91Z2ggW3Nob3dCeV0oI0NvcmUvd2lkZ2V0L1dpZGdldCNmdW5jdGlvbi1zaG93QnkpLipcbiAgICAgKiBgdHJ1ZWAgdG8gc2hvdyBhIGNvbm5lY3RvciBhcnJvdyBwb2ludGluZyB0byB0aGUgYWxpZ24gdGFyZ2V0LlxuICAgICAqL1xuICAgIGFuY2hvciA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIEJ5IGRlZmF1bHQsIHdoZW4gbmF2aWdhdGluZyB0aHJvdWdoIHRpbWUsIHRoZSBuZXh0IHRpbWVcbiAgICAgKiBibG9jayB3aWxsIGJlIGFuaW1hdGVkIGluIGZyb20gdGhlIGFwcHJvcHJpYXRlIGRpcmVjdGlvbi5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvUmVzb3VyY2VWaWV3I2NvbmZpZy1hbmltYXRlVGltZVNoaWZ0KVxuICAgICAqL1xuICAgIGFuaW1hdGVUaW1lU2hpZnQgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBFbGVtZW50IChvciB0aGUgaWQgb2YgYW4gZWxlbWVudCkgdG8gYXBwZW5kIHRoaXMgd2lkZ2V0J3MgZWxlbWVudCB0by4gQ2FuIGJlIGNvbmZpZ3VyZWQsIG9yIHNldCBvbmNlIGF0XG4gICAgICogcnVudGltZS4gVG8gYWNjZXNzIHRoZSBlbGVtZW50IG9mIGEgcmVuZGVyZWQgd2lkZ2V0LCBzZWUgW2VsZW1lbnRdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ29yZS93aWRnZXQvV2lkZ2V0I3Byb3BlcnR5LWVsZW1lbnQpLlxuICAgICAqL1xuICAgIGFwcGVuZFRvID8gOiBIVE1MRWxlbWVudHxzdHJpbmdcbiAgICAvKipcbiAgICAgKiBBIGxvY2FsaXphYmxlIHN0cmluZyAoTWF5IGNvbnRhaW4gYCdMe30nYCB0b2tlbnMgd2hpY2ggcmVzb2x2ZSBpbiB0aGUgbG9jYWxlIGZpbGUpIHRvIGluamVjdFxuICAgICAqIGludG8gYW4gZWxlbWVudCB3aGljaCB3aWxsIGJlIGxpbmtlZCB1c2luZyB0aGUgYGFyaWEtZGVzY3JpYmVkYnlgIGF0dHJpYnV0ZS5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvUmVzb3VyY2VWaWV3I2NvbmZpZy1hcmlhRGVzY3JpcHRpb24pXG4gICAgICovXG4gICAgYXJpYURlc2NyaXB0aW9uID8gOiBzdHJpbmdcbiAgICAvKipcbiAgICAgKiBBIGxvY2FsaXphYmxlIHN0cmluZyAoTWF5IGNvbnRhaW4gYCdMe30nYCB0b2tlbnMgd2hpY2ggcmVzb2x2ZSBpbiB0aGUgbG9jYWxlIGZpbGUpIHRvIGluamVjdCBhc1xuICAgICAqIHRoZSBgYXJpYS1sYWJlbGAgYXR0cmlidXRlLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9SZXNvdXJjZVZpZXcjY29uZmlnLWFyaWFMYWJlbClcbiAgICAgKi9cbiAgICBhcmlhTGFiZWwgPyA6IHN0cmluZ1xuICAgIC8qKlxuICAgICAqIElmIHRoaXMgY29uZmlnIGlzIHNldCwgdGhlbiB0aGUgYGdlc3R1cmVgIGNvbmZpZ3VyZWQgKHdoaWNoIGRlZmF1bHRzIHRvIGBkYmxjbGlja2ApIGNyZWF0ZXMgYVxuICAgICAqIG5ldyBldmVudCBhdCB0aGUgbW91c2Ugb3IgdG91Y2ggZXZlbnQncyB0aW1lIHBvaW50LlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9SZXNvdXJjZVZpZXcjY29uZmlnLWF1dG9DcmVhdGUpXG4gICAgICovXG4gICAgYXV0b0NyZWF0ZSA/IDoge1xuICAgICAgICBnZXN0dXJlPzogc3RyaW5nXG4gICAgICAgIG5ld05hbWU/OiBGdW5jdGlvbnxzdHJpbmdcbiAgICAgICAgc3RlcD86IHN0cmluZ1xuICAgICAgICBzbmFwVHlwZT86ICdyb3VuZCd8J2NlaWwnfCdmbG9vcidcbiAgICAgICAgZHVyYXRpb24/OiBzdHJpbmdcbiAgICAgICAgc3RhcnRIb3VyPzogbnVtYmVyXG4gICAgfXxzdHJpbmd8Ym9vbGVhblxuICAgIC8qKlxuICAgICAqIEEgQ29uZmlnIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIGNvbmZpZ3VyYXRpb24gb2YgYSBbVG9vbGJhcl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9Db3JlL3dpZGdldC9Ub29sYmFyKSxcbiAgICAgKiBvciBhcnJheSBvZiBjb25maWcgb2JqZWN0cyByZXByZXNlbnRpbmcgdGhlIGNoaWxkIGl0ZW1zIG9mIGEgVG9vbGJhci4gQW5vdGhlciB3YXkgdG8gYWRkIGEgYmJhciBpcyB0byB1c2UgW3N0cmlwc10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9Db3JlL3dpZGdldC9QYW5lbCNjb25maWctc3RyaXBzKS5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvUmVzb3VyY2VWaWV3I2NvbmZpZy1iYmFyKVxuICAgICAqL1xuICAgIGJiYXIgPyA6IChDYWxlbmRhckNvbnRhaW5lckl0ZW1Db25maWd8c3RyaW5nKVtdfFRvb2xiYXJDb25maWd8UGFnaW5nVG9vbGJhckNvbmZpZ3xudWxsXG4gICAgLyoqXG4gICAgICogQ3VzdG9tIENTUyBjbGFzc2VzIHRvIGFkZCB0byB0aGUgcGFuZWwncyBib2R5IGVsZW1lbnQuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L1Jlc291cmNlVmlldyNjb25maWctYm9keUNscylcbiAgICAgKi9cbiAgICBib2R5Q2xzID8gOiBzdHJpbmd8b2JqZWN0XG4gICAgLyoqXG4gICAgICogQW4gb2JqZWN0IHdoZXJlIHByb3BlcnR5IG5hbWVzIHdpdGggYSB0cnV0aHkgdmFsdWUgaW5kaWNhdGUgd2hpY2ggZXZlbnRzIHNob3VsZCBidWJibGUgdXAgdGhlIG93bmVyc2hpcFxuICAgICAqIGhpZXJhcmNoeSB3aGVuIHRyaWdnZXJlZC5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvUmVzb3VyY2VWaWV3I2NvbmZpZy1idWJibGVFdmVudHMpXG4gICAgICovXG4gICAgYnViYmxlRXZlbnRzID8gOiBvYmplY3RcbiAgICAvKipcbiAgICAgKiBTZXQgdG8gYGZhbHNlYCB0byBub3QgY2FsbCBvblhYWCBtZXRob2QgbmFtZXMgKGUuZy4gYG9uU2hvd2AsIGBvbkNsaWNrYCksIGFzIGFuIGVhc3kgd2F5IHRvIGxpc3RlbiBmb3IgZXZlbnRzLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9SZXNvdXJjZVZpZXcjY29uZmlnLWNhbGxPbkZ1bmN0aW9ucylcbiAgICAgKi9cbiAgICBjYWxsT25GdW5jdGlvbnMgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBCeSBkZWZhdWx0LCBpZiBhbiBldmVudCBoYW5kbGVyIHRocm93cyBhbiBleGNlcHRpb24sIHRoZSBlcnJvciBwcm9wYWdhdGVzIHVwIHRoZSBzdGFjayBhbmQgdGhlXG4gICAgICogYXBwbGljYXRpb24gc3RhdGUgaXMgdW5kZWZpbmVkLiBDb2RlIHdoaWNoIGZvbGxvd3MgdGhlIGV2ZW50IGhhbmRsZXIgd2lsbCAqbm90KiBiZSBleGVjdXRlZC5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvUmVzb3VyY2VWaWV3I2NvbmZpZy1jYXRjaEV2ZW50SGFuZGxlckV4Y2VwdGlvbnMpXG4gICAgICovXG4gICAgY2F0Y2hFdmVudEhhbmRsZXJFeGNlcHRpb25zID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogKk9ubHkgdmFsaWQgaWYgdGhpcyBXaWRnZXQgaXMgW2Zsb2F0aW5nXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1dpZGdldCNjb25maWctZmxvYXRpbmcpLipcbiAgICAgKiBTZXQgdG8gYHRydWVgIHRvIGNlbnRyZSB0aGUgV2lkZ2V0IGluIGJyb3dzZXIgdmlld3BvcnQgc3BhY2UuXG4gICAgICovXG4gICAgY2VudGVyZWQgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBDdXN0b20gQ1NTIGNsYXNzZXMgdG8gYWRkIHRvIGVsZW1lbnQuXG4gICAgICogTWF5IGJlIHNwZWNpZmllZCBhcyBhIHNwYWNlIHNlcGFyYXRlZCBzdHJpbmcsIG9yIGFzIGFuIG9iamVjdCBpbiB3aGljaCBwcm9wZXJ0eSBuYW1lc1xuICAgICAqIHdpdGggdHJ1dGh5IHZhbHVlcyBhcmUgdXNlZCBhcyB0aGUgY2xhc3MgbmFtZXM6XG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L1Jlc291cmNlVmlldyNjb25maWctY2xzKVxuICAgICAqL1xuICAgIGNscyA/IDogc3RyaW5nfG9iamVjdFxuICAgIC8qKlxuICAgICAqIENvbnRyb2xzIHdoZXRoZXIgdGhlIHBhbmVsIGlzIGNvbGxhcHNlZCAodGhlIGJvZHkgb2YgdGhlIHBhbmVsIGlzIGhpZGRlbiB3aGlsZSBvbmx5IHRoZSBoZWFkZXIgaXNcbiAgICAgKiB2aXNpYmxlKS4gT25seSB2YWxpZCBpZiB0aGUgcGFuZWwgaXMgW2NvbGxhcHNpYmxlXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1BhbmVsI2NvbmZpZy1jb2xsYXBzaWJsZSkuXG4gICAgICovXG4gICAgY29sbGFwc2VkID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogVGhpcyBjb25maWcgZW5hYmxlcyBjb2xsYXBzaWJpbGl0eSBmb3IgdGhlIHBhbmVsLiBTZWUgW2NvbGxhcHNlZF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9Db3JlL3dpZGdldC9QYW5lbCNjb25maWctY29sbGFwc2VkKS5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvUmVzb3VyY2VWaWV3I2NvbmZpZy1jb2xsYXBzaWJsZSlcbiAgICAgKi9cbiAgICBjb2xsYXBzaWJsZSA/IDogYm9vbGVhbnxQYW5lbENvbGxhcHNlckNvbmZpZ3xQYW5lbENvbGxhcHNlck92ZXJsYXlDb25maWdcbiAgICAvKipcbiAgICAgKiBBcHBsaWVzIHRoZSBzcGVjaWZpZWQgY29sb3IgdG8gdGhlIHdpZGdldCwgYnkgc2V0dGluZyB0aGUgYC0tYi1wcmltYXJ5YCBDU1MgdmFyaWFibGUgaW4gdGhlIHdpZGdldHNcbiAgICAgKiBgc3R5bGVgIGJsb2NrLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9SZXNvdXJjZVZpZXcjY29uZmlnLWNvbG9yKVxuICAgICAqL1xuICAgIGNvbG9yID8gOiBzdHJpbmdcbiAgICAvKipcbiAgICAgKiBQcm9ncmFtbWF0aWMgY29udHJvbCBvdmVyIHdoaWNoIGNvbHVtbiB0byBzdGFydCBpbiB3aGVuIHVzZWQgaW4gYSBncmlkIGxheW91dC5cbiAgICAgKi9cbiAgICBjb2x1bW4gPyA6IG51bWJlclxuICAgIGNvbmZpZyA/IDogb2JqZWN0XG4gICAgLyoqXG4gICAgICogKk9ubHkgdmFsaWQgaWYgdGhpcyBXaWRnZXQgaXMgW2Zsb2F0aW5nXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1dpZGdldCNjb25maWctZmxvYXRpbmcpIG9yIFtwb3NpdGlvbmVkXSgjQ29yZS93aWRnZXQvV2lkZ2V0I2NvbmZpZy1wb3NpdGlvbmVkKS4qXG4gICAgICogRWxlbWVudCwgV2lkZ2V0IG9yIFJlY3RhbmdsZSB0byB3aGljaCB0aGlzIFdpZGdldCBpcyBjb25zdHJhaW5lZC5cbiAgICAgKi9cbiAgICBjb25zdHJhaW5UbyA/IDogSFRNTEVsZW1lbnR8V2lkZ2V0fFJlY3RhbmdsZVxuICAgIC8qKlxuICAgICAqIEN1c3RvbSBDU1MgY2xhc3NlcyB0byBhZGQgdG8gdGhlIFtjb250ZW50RWxlbWVudF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9Db3JlL3dpZGdldC9XaWRnZXQjcHJvcGVydHktY29udGVudEVsZW1lbnQpLlxuICAgICAqIE1heSBiZSBzcGVjaWZpZWQgYXMgYSBzcGFjZSBzZXBhcmF0ZWQgc3RyaW5nLCBvciBhcyBhbiBvYmplY3QgaW4gd2hpY2ggcHJvcGVydHkgbmFtZXNcbiAgICAgKiB3aXRoIHRydXRoeSB2YWx1ZXMgYXJlIHVzZWQgYXMgdGhlIGNsYXNzIG5hbWVzOlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9SZXNvdXJjZVZpZXcjY29uZmlnLWNvbnRlbnRFbGVtZW50Q2xzKVxuICAgICAqL1xuICAgIGNvbnRlbnRFbGVtZW50Q2xzID8gOiBzdHJpbmd8b2JqZWN0XG4gICAgLyoqXG4gICAgICogV2hlbiB0aGlzIFdpZGdldCBjb25maWd1cmF0aW9uIGlzIHVzZWQgaW4gdGhlIEdyaWQncyBSb3dFeHBhbmRlciBmZWF0dXJlJ3MgYHdpZGdldGAgY29uZmlnLCBwcm92aWRlIHRoZVxuICAgICAqIGZpZWxkIG9uIHRoZSBleHBhbmRlZCByZWNvcmQgdG8gdXNlIGZvciBwb3B1bGF0aW5nIHRoaXMgd2lkZ2V0J3Mgc3RvcmUgKGlmIGFwcGxpY2FibGUpXG4gICAgICovXG4gICAgZGF0YUZpZWxkID8gOiBzdHJpbmdcbiAgICAvKipcbiAgICAgKiBPYmplY3QgdG8gYXBwbHkgdG8gZWxlbWVudHMgZGF0YXNldCAoZWFjaCBrZXkgd2lsbCBiZSB1c2VkIGFzIGEgZGF0YS1hdHRyaWJ1dGUgb24gdGhlIGVsZW1lbnQpXG4gICAgICovXG4gICAgZGF0YXNldCA/IDogUmVjb3JkPHN0cmluZywgc3RyaW5nPlxuICAgIC8qKlxuICAgICAqIEEgW0RhdGVIZWxwZXJdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ29yZS9oZWxwZXIvRGF0ZUhlbHBlcikgZm9ybWF0IHN0cmluZy9mdW5jdGlvbiB0byB1c2UgdG8gY3JlYXRlIGRhdGUgb3V0cHV0IGZvciB2aWV3IGRlc2NyaXB0aW9ucy5cbiAgICAgKiBAcGFyYW0ge0RhdGV9IGRhdGUgVGhlIGRhdGUgdG8gZm9ybWF0LlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBmb3JtYXR0ZWQgZGF0ZS5cbiAgICAgKi9cbiAgICBkYXRlRm9ybWF0ID8gOiBzdHJpbmd8KChkYXRlOiBEYXRlKSA9PiBzdHJpbmcpXG4gICAgLyoqXG4gICAgICogQSBzdHJpbmcgdXNlZCB0byBzZXBhcmF0ZSBzdGFydCBhbmQgZW5kIGRhdGVzIGluIHRoZSBbZGVzY3JpcHRpb25Gb3JtYXRdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvU2NoZWR1bGVyL3ZpZXcvbWl4aW4vRGVzY3JpYmFibGUjY29uZmlnLWRlc2NyaXB0aW9uRm9ybWF0KS5cbiAgICAgKi9cbiAgICBkYXRlU2VwYXJhdG9yID8gOiBzdHJpbmdcbiAgICAvKipcbiAgICAgKiBUaGUgbmFtZSBvZiB0aGUgcHJvcGVydHkgdG8gc2V0IHdoZW4gYSBzaW5nbGUgdmFsdWUgaXMgdG8gYmUgYXBwbGllZCB0byB0aGlzIFdpZGdldC4gU3VjaCBhcyB3aGVuIHVzZWRcbiAgICAgKiBpbiBhIGdyaWQgV2lkZ2V0Q29sdW1uLCB0aGlzIGlzIHRoZSBwcm9wZXJ0eSB0byB3aGljaCB0aGUgY29sdW1uJ3MgYGZpZWxkYCBpcyBhcHBsaWVkLlxuICAgICAqL1xuICAgIGRlZmF1bHRCaW5kUHJvcGVydHkgPyA6IHN0cmluZ1xuICAgIC8qKlxuICAgICAqIEEgW3F1ZXJ5XShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L0NvbnRhaW5lciNmdW5jdGlvbi1xdWVyeSkgc2VsZWN0b3IgZnVuY3Rpb24gd2hpY2ggY2FuIGlkZW50aWZ5IHRoZSBkZXNjZW5kYW50IHdpZGdldCB0byB3aGljaFxuICAgICAqIGZvY3VzIHNob3VsZCBiZSBkaXJlY3RlZCBieSBkZWZhdWx0LlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9SZXNvdXJjZVZpZXcjY29uZmlnLWRlZmF1bHRGb2N1cylcbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0LldpZGdldH0gd2lkZ2V0IFdpZGdldCBwYXNzZWQgdG8gbWV0aG9kXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IHRydXRoeSB2YWx1ZSBpZiB3aWRnZXQgaXMgdGhlIGRlZmF1bHQgb25lXG4gICAgICovXG4gICAgZGVmYXVsdEZvY3VzID8gOiAoKHdpZGdldDogV2lkZ2V0KSA9PiBib29sZWFuKXxzdHJpbmdcbiAgICAvKipcbiAgICAgKiBBIGNvbmZpZyBvYmplY3QgY29udGFpbmluZyBkZWZhdWx0IHNldHRpbmdzIHRvIGFwcGx5IHRvIGFsbCBjaGlsZCB3aWRnZXRzLlxuICAgICAqL1xuICAgIGRlZmF1bHRzID8gOiBDYWxlbmRhckNvbnRhaW5lckl0ZW1Db25maWdcbiAgICAvKipcbiAgICAgKiBPcHRpb25zIHRvIGFkZCBpbnRvIHNjcm9sbCBvcHRpb25zIHdoZW4gdGhlIFtzY3JvbGxUb10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvbWl4aW4vQ2FsZW5kYXJNaXhpbiNmdW5jdGlvbi1zY3JvbGxUbykgbWV0aG9kIGlzIGNhbGxlZC5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvUmVzb3VyY2VWaWV3I2NvbmZpZy1kZWZhdWx0U2Nyb2xsT3B0aW9ucylcbiAgICAgKi9cbiAgICBkZWZhdWx0U2Nyb2xsT3B0aW9ucyA/IDogQnJ5bnR1bVNjcm9sbE9wdGlvbnNcbiAgICAvKipcbiAgICAgKiBUaGUgZGF0ZSBmb3JtYXQgdXNlZCBieSB0aGUgZGVmYXVsdCBbZGVzY3JpcHRpb25SZW5kZXJlcl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9TY2hlZHVsZXIvdmlldy9taXhpbi9EZXNjcmliYWJsZSNjb25maWctZGVzY3JpcHRpb25SZW5kZXJlcikgZm9yIHJlbmRlcmluZyB0aGUgdmlldydzIGRlc2NyaXB0aW9uLlxuICAgICAqIElmIHRoaXMgdmFsdWUgaXMgYG51bGxgLCB0aGUgW2RhdGVGb3JtYXRdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvU2NoZWR1bGVyL3ZpZXcvbWl4aW4vRGVzY3JpYmFibGUjY29uZmlnLWRhdGVGb3JtYXQpIChhbmQgcG90ZW50aWFsbHkgW2RhdGVTZXBhcmF0b3JdKCNTY2hlZHVsZXIvdmlldy9taXhpbi9EZXNjcmliYWJsZSNjb25maWctZGF0ZVNlcGFyYXRvcikpIHdpbGxcbiAgICAgKiBiZSB1c2VkLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9SZXNvdXJjZVZpZXcjY29uZmlnLWRlc2NyaXB0aW9uRm9ybWF0KVxuICAgICAqIEBwYXJhbSB7RGF0ZX0gZGF0ZSBUaGUgZGF0ZSB0byBmb3JtYXQuXG4gICAgICogQHJldHVybnMge3N0cmluZ30gVGhlIGZvcm1hdHRlZCBkYXRlLlxuICAgICAqL1xuICAgIGRlc2NyaXB0aW9uRm9ybWF0ID8gOiBzdHJpbmd8c3RyaW5nW118Ym9vbGVhbltdfCgoZGF0ZTogRGF0ZSkgPT4gc3RyaW5nKXxGdW5jdGlvbltdXG4gICAgLyoqXG4gICAgICogQSBmdW5jdGlvbiB0aGF0IHByb3ZpZGVzIHRoZSB0ZXh0dWFsIGRlc2NyaXB0aW9uIGZvciB0aGlzIHZpZXcuIElmIHByb3ZpZGVkLCB0aGlzIGZ1bmN0aW9uIG92ZXJyaWRlcyB0aGVcbiAgICAgKiBbZGVzY3JpcHRpb25Gb3JtYXRdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvU2NoZWR1bGVyL3ZpZXcvbWl4aW4vRGVzY3JpYmFibGUjY29uZmlnLWRlc2NyaXB0aW9uRm9ybWF0KS5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvUmVzb3VyY2VWaWV3I2NvbmZpZy1kZXNjcmlwdGlvblJlbmRlcmVyKVxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuV2lkZ2V0fSB2aWV3IFRoZSBhY3RpdmUgdmlldyBpbiBjYXNlIHRoZSBmdW5jdGlvbiBpcyBpbiBhbm90aGVyIHNjb3BlLlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IERlc2NyaXB0aW9uIHN0cmluZ1xuICAgICAqL1xuICAgIGRlc2NyaXB0aW9uUmVuZGVyZXIgPyA6ICh2aWV3OiBXaWRnZXQpID0+IHN0cmluZ1xuICAgIC8qKlxuICAgICAqIENoZWNrIGZvciBDU1MgY29tcGF0aWJpbGl0eSBpc3N1ZXMgd2hlbiB1cGdyYWRpbmcgdG8gdjcuIFBlcmZvcm1zIHRoZSBmb2xsb3dpbmcgY2hlY2tzOlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9SZXNvdXJjZVZpZXcjY29uZmlnLWRldGVjdENTU0NvbXBhdGliaWxpdHlJc3N1ZXMpXG4gICAgICovXG4gICAgZGV0ZWN0Q1NTQ29tcGF0aWJpbGl0eUlzc3VlcyA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIERpc2FibGUgb3IgZW5hYmxlIHRoZSB3aWRnZXQuIEl0IGlzIHNpbWlsYXIgdG8gW3JlYWRPbmx5XShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1dpZGdldCNjb25maWctcmVhZE9ubHkpIGV4Y2VwdCBhIGRpc2FibGVkIHdpZGdldFxuICAgICAqIGNhbm5vdCBiZSBmb2N1c2VkLCB1c2VzIGEgZGlmZmVyZW50IHJlbmRpdGlvbiAodXN1YWxseSBncmV5aXNoKSBhbmQgZG9lcyBub3QgYWxsb3cgc2VsZWN0aW5nIGl0cyB2YWx1ZS5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvUmVzb3VyY2VWaWV3I2NvbmZpZy1kaXNhYmxlZClcbiAgICAgKi9cbiAgICBkaXNhYmxlZCA/IDogYm9vbGVhbnwnaW5lcnQnXG4gICAgLyoqXG4gICAgICogQ29udHJvbHMgdGhlIHBsYWNlbWVudCBvZiB0aGlzIHdpZGdldCB3aGVuIGl0IGlzIGFkZGVkIHRvIGEgW3BhbmVsJ3MgXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1BhbmVsKVxuICAgICAqIFtzdHJpcHMgY29sbGVjdGlvbl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9Db3JlL3dpZGdldC9QYW5lbCNjb25maWctc3RyaXBzKS4gVHlwaWNhbCB2YWx1ZXMgZm9yIHRoaXMgY29uZmlnIGFyZSBgJ3RvcCdgLFxuICAgICAqIGAnYm90dG9tJ2AsIGAnbGVmdCdgLCBvciBgJ3JpZ2h0J2AsIHdoaWNoIGNhdXNlIHRoZSB3aWRnZXQgdG8gYmUgcGxhY2VkIG9uIHRoYXQgc2lkZSBvZiB0aGUgcGFuZWwnc1xuICAgICAqIGJvZHkuIFN1Y2ggd2lkZ2V0cyBhcmUgY2FsbGVkIFwiZWRnZSBzdHJpcHNcIi5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvUmVzb3VyY2VWaWV3I2NvbmZpZy1kb2NrKVxuICAgICAqL1xuICAgIGRvY2sgPyA6ICd0b3AnfCdib3R0b20nfCdsZWZ0J3wncmlnaHQnfCdzdGFydCd8J2VuZCd8J2hlYWRlcid8J3ByZS1oZWFkZXInfG9iamVjdFxuICAgIC8qKlxuICAgICAqICpPbmx5IHZhbGlkIGlmIHRoaXMgV2lkZ2V0IGlzIFtmbG9hdGluZ10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9Db3JlL3dpZGdldC9XaWRnZXQjY29uZmlnLWZsb2F0aW5nKS4qXG4gICAgICogU2V0IHRvIGB0cnVlYCB0byBiZSBhYmxlIHRvIGRyYWcgYSB3aWRnZXQgZnJlZWx5IG9uIHRoZSBwYWdlLiBPciBzZXQgdG8gYW4gb2JqZWN0IHdpdGggYSDCtGhhbmRsZVNlbGVjdG9ywrRcbiAgICAgKiBwcm9wZXJ0eSB3aGljaCBjb250cm9scyB3aGVuIGEgZHJhZyBzaG91bGQgc3RhcnQuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L1Jlc291cmNlVmlldyNjb25maWctZHJhZ2dhYmxlKVxuICAgICAqL1xuICAgIGRyYWdnYWJsZSA/IDogYm9vbGVhbnx7XG4gICAgICAgIGhhbmRsZVNlbGVjdG9yPzogc3RyaW5nXG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBbZHVyYXRpb25Vbml0XShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL1NjaGVkdWxlci9tb2RlbC9FdmVudE1vZGVsI2ZpZWxkLWR1cmF0aW9uVW5pdCkgdG8gdXNlIHdoZW4gZHJhZy1jcmVhdGluZyBldmVudHNcbiAgICAgKiBpbiB0aGlzIHZpZXcuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L1Jlc291cmNlVmlldyNjb25maWctZHJhZ1VuaXQpXG4gICAgICovXG4gICAgZHJhZ1VuaXQgPyA6IHN0cmluZ1xuICAgIC8qKlxuICAgICAqIE1ha2UgdGhpcyBQYW5lbCBhIGRvY2tlZCBkcmF3ZXIgd2hpY2ggc2xpZGVzIG91dCBmcm9tIG9uZSBzaWRlIG9mIHRoZSBicm93c2VyIHZpZXdwb3J0IGJ5IGRlZmF1bHQuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L1Jlc291cmNlVmlldyNjb25maWctZHJhd2VyKVxuICAgICAqIEBwYXJhbSB7J3N0YXJ0JywnbGVmdCcsJ2VuZCcsJ3JpZ2h0JywndG9wJywnYm90dG9tJ30gc2lkZSBUaGUgc2lkZSBvZiB0aGUgdmlld3BvcnQgdG8gZG9jayB0aGUgZHJhd2VyIHRvLiAgKiBgJ3N0YXJ0J2AgbWVhbnMgdGhlIGBpbmxpbmUtc3RhcnRgIHNpZGUuICogYCdlbmQnYCBtZWFucyB0aGUgYGlubGluZS1lbmRgIHNpZGUuXG4gICAgICogQHBhcmFtIHtzdHJpbmcsbnVtYmVyfSBzaXplIFRoZSBzaXplIG9mIHRoZSBkcmF3ZXIgaW4gaXRzIGNvbGxhcHNpYmxlIGF4aXMuXG4gICAgICogQHBhcmFtIHtib29sZWFufSBpbmxpbmUgSWYgdXNpbmcgdGhlIFthcHBlbmRUb10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9Db3JlL3dpZGdldC9QYW5lbCNjb25maWctYXBwZW5kVG8pIGNvbmZpZyB0byBwbGFjZSB0aGUgZHJhd2VyIGluc2lkZSBhIGhvc3Qgd2lkZ2V0LCB0aGlzIG1heSBiZSBzZXQgdG8gYHRydWVgIHRvIG1ha2UgdGhlIGRyYXdlciBpbmxpbmUgd2l0aGluIHRoYXQgaG9zdC4gTm90ZSB0aGF0LCBpZiB1c2luZyB0aGlzLCB0aGUgbGF5b3V0IG9mIHRoZSBob3N0IGVsZW1lbnQgbXVzdCBoYXZlIGBmbGV4LWRpcmVjdGlvbmAgc2V0IGFwcHJvcHJpYXRlbHkuXG4gICAgICogQHBhcmFtIHtib29sZWFuLG9iamVjdH0gYXV0b0Nsb3NlIFNwZWNpZmllcyB3aGF0IHVzZXIgYWN0aW9ucyBzaG91bGQgYXV0b21hdGljYWxseSBjbG9zZSB0aGUgZHJhd2VyLiBEZWZhdWx0cyB0byBjbG9zaW5nIHdoZW4gdGhlIHVzZXIgY2xpY2tzIG91dHNpZGUgb2YgdGhlIGRyYXdlciBvciB3aGVuIGZvY3VzIG1vdmVzIG91dHNpZGUgb2YgdGhlIGRyYXdlci5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW4sc3RyaW5nfSBhdXRvQ2xvc2UubW91c2Vkb3duIElmIHRoZSB1c2VyIGNsaWNrcyBvdXRzaWRlIG9mIHRoZSBkcmF3ZXIsIHRoZSBkcmF3ZXIgd2lsbCBhdXRvbWF0aWNhbGx5IGJlIGhpZGRlbi4gSWYgdGhlIHZhbHVlIGlzIGEgc3RyaW5nLCBpdCBpcyB1c2VkIGFzIGEgQ1NTIHNlbGVjdG9yIHRvIGZpbHRlciBjbGlja3Mgd2hpY2ggc2hvdWxkIGNsb3NlIHRoZSBkcmF3ZXIuXG4gICAgICogQHBhcmFtIHtib29sZWFuLHN0cmluZ30gYXV0b0Nsb3NlLmZvY3Vzb3V0IElmIGZvY3VzIG1vdmVzIG91dHNpZGUgb2YgdGhlIGRyYXdlciwgdGhlIGRyYXdlciB3aWxsIGF1dG9tYXRpY2FsbHkgYmUgaGlkZGVuLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBhdXRvQ2xvc2UubW91c2VvdXQgSGlkZXMgdGhlIGRyYXdlciB3aGVuIHRoZSBtb3VzZSBsZWF2ZXMgdGhlIGRyYXdlciBhZnRlciB0aGUgYGF1dG9DbG9zZURlbGF5YCBwZXJpb2QuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGF1dG9DbG9zZURlbGF5IFdoZW4gdXNpbmcgYG1vdXNlb3V0YCwgdGhpcyBpcyB0aGUgZGVsYXkgaW4gbWlsbGlzZWNvbmRzXG4gICAgICovXG4gICAgZHJhd2VyID8gOiBib29sZWFufHtzaWRlPzogJ3N0YXJ0J3wnbGVmdCd8J2VuZCd8J3JpZ2h0J3wndG9wJ3wnYm90dG9tJywgc2l6ZT86IHN0cmluZ3xudW1iZXIsIGlubGluZT86IGJvb2xlYW4sIGF1dG9DbG9zZTogeyBtb3VzZWRvd24/OiBib29sZWFufHN0cmluZywgZm9jdXNvdXQ/OiBib29sZWFufHN0cmluZywgbW91c2VvdXQ/OiBzdHJpbmcgfSwgYXV0b0Nsb3NlRGVsYXk/OiBudW1iZXJ9XG4gICAgLyoqXG4gICAgICogQW4gb2JqZWN0IHNwZWNpZnlpbmcgYXR0cmlidXRlcyB0byBhc3NpZ24gdG8gdGhlIHJvb3QgZWxlbWVudCBvZiB0aGlzIHdpZGdldC5cbiAgICAgKiBTZXQgYG51bGxgIHZhbHVlIHRvIGF0dHJpYnV0ZSB0byByZW1vdmUgaXQuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L1Jlc291cmNlVmlldyNjb25maWctZWxlbWVudEF0dHJpYnV0ZXMpXG4gICAgICovXG4gICAgZWxlbWVudEF0dHJpYnV0ZXMgPyA6IFJlY29yZDxzdHJpbmcsIHN0cmluZ3xudWxsPlxuICAgIC8qKlxuICAgICAqIEEgZnVuY3Rpb24sIG9yIHRoZSBuYW1lIG9mIGEgZnVuY3Rpb24gaW4gdGhlIG93bmVyc2hpcCBoaWVyYXJjaHkgd2hpY2ggeW91XG4gICAgICogY2FuIHNwZWNpZnkgdG8gY3VzdG9taXplIGV2ZW50IERPTSBjb250ZW50LlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9SZXNvdXJjZVZpZXcjY29uZmlnLWV2ZW50SGVhZGVyUmVuZGVyZXIpXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGRldGFpbCBBbiBvYmplY3QgdGhhdCBjb250YWlucyBkYXRhIGFib3V0IHRoZSBldmVudCBiZWluZyByZW5kZXJlZFxuICAgICAqIEBwYXJhbSB7Q2FsZW5kYXJWaWV3fSBkZXRhaWwudmlldyBUaGUgdmlldyByZW5kZXJpbmcgdGhlIGV2ZW50XG4gICAgICogQHBhcmFtIHtTY2hlZHVsZXIubW9kZWwuRXZlbnRNb2RlbH0gZGV0YWlsLmV2ZW50UmVjb3JkIFRoZSBldmVudCByZWNvcmRcbiAgICAgKiBAcGFyYW0ge1NjaGVkdWxlci5tb2RlbC5SZXNvdXJjZU1vZGVsfSBkZXRhaWwucmVzb3VyY2VSZWNvcmQgVGhlIHJlc291cmNlIHJlY29yZFxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBkZXRhaWwucmVuZGVyRGF0YSBBIGRhdGEgb2JqZWN0IGNvbnRhaW5pbmcgcHJvcGVydGllcyB0aGF0IHdpbGwgYmUgdXNlZCB0byBjcmVhdGUgdGhlIGV2ZW50IGVsZW1lbnRcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZGV0YWlsLnJlbmRlckRhdGEuc3R5bGUgVGhlIHN0eWxlIHByb3BlcnR5IGlzIGFuIG9iamVjdCBjb250YWluaW5nIHN0eWxlIHByb3BlcnRpZXMgZm9yIHRoZSBldmVudCBlbGVtZW50XG4gICAgICogQHBhcmFtIHtvYmplY3R9IGRldGFpbC5yZW5kZXJEYXRhLmNscyBUaGUgY2xzIHByb3BlcnR5IGlzIGFuIG9iamVjdCB3aG9zZSBwcm9wZXJ0eSBuYW1lcyB3aWxsIGJlIGFkZGVkIHRvIHRoZSBldmVudCBlbGVtZW50IGlmIHRoZSBwcm9wZXJ0eSB2YWx1ZSBpcyB0cnV0aHlcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZGV0YWlsLnJlbmRlckRhdGEuaWNvblN0eWxlIFRoZSBpY29uU3R5bGUgcHJvcGVydHkgaXMgYW4gb2JqZWN0IGNvbnRhaW5pbmcgc3R5bGUgcHJvcGVydGllcyBmb3IgdGhlIGljb24gZWxlbWVudCBpZiBhbiBpY29uIGVsZW1lbnQgaXMgdG8gYmUgdXNlZFxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBkZXRhaWwucmVuZGVyRGF0YS5pY29uQ2xzIFRoZSBpY29uQ2xzIHByb3BlcnR5IGlzIGFuIG9iamVjdCB3aG9zZSBwcm9wZXJ0eSBuYW1lcyB3aWxsIGJlIGFkZGVkIHRvIHRoZSBpY29uIGVsZW1lbnQuIEluaXRpYWxseSBzZXQgZnJvbSB0aGUgZXZlbnQgcmVjb3JkJ3MgW2ljb25DbHNdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvU2NoZWR1bGVyL21vZGVsL0V2ZW50TW9kZWwjZmllbGQtaWNvbkNscykuIENhbiBiZSBtdXRhdGVkIGJ5IHRoZSByZW5kZXJlci4gSWYgbnVsbCwgb3Igbm8gcHJvcGVydGllcyBhcmUgc2V0LCBubyBpY29uIHdpbGwgYmUgcmVuZGVyZWRcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZGV0YWlsLnJlbmRlckRhdGEuZXZlbnRDb2xvciBDb2xvciB0byBiZSBhcHBsaWVkIHRvIHRoZSBldmVudFxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBkZXRhaWwucmVuZGVyRGF0YS5kYXRhc2V0IEFuIG9iamVjdCB3aGljaCBwcm9kdWNlcyB0aGUgYGRhdGFzZXRgIG9mIHRoZSByZXN1bHRpbmcgZXZlbnQgYmFyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBkZXRhaWwucmVuZGVyRGF0YS5zb2xpZEJhciBUaGlzIGlzIHZhbGlkIGZvciB2aWV3cyB3aGljaCBjcmVhdGUgZXZlbnQgYmFycy4gVGhpcyBpcyBzZXQgdG8gYHRydWVgIGJ5IGRlZmF1bHQgZm9yIGFsbCBkYXkgYW5kIGludGVyZGF5IGV2ZW50cyBzbyB0aGF0IHRoZXNlIGFwcGVhciBhcyBhIHNvbGlkIGJsb2NrIG9mIGJhY2tncm91bmQgY29sb3IuIEFuIGV2ZW50UmVuZGVyZXIgbWF5IG11dGF0ZSB0aGlzIGZsYWcgdG8gY2hhbmdlIGluIHdoYXQgbWFubmVyIHRoZSBldmVudCBiYXIgaXMgY29sb3JlZCAtIGFzIGEgc29saWQgYmFyIG9mIGNvbG9yLCBvciB1c2luZyB0aGUgZm9yZWdyb3VuZCBjb2xvciAodGV4dCBhbmQgaWNvbnMpIHN1Y2ggYXMgdGhlIE1vbnRoVmlldywgdGhlIENhbGVuZGFyUm93IChhbGwgZGF5IGV2ZW50cyBpbiBhIERheVZpZXcpLCBhbmQgT3ZlcmZsb3dQb3B1cHNcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZGV0YWlsLnJlbmRlckRhdGEuYm9keUNvbG9yIFdoZW4gdXNlZCBpbiBhIFtEYXlWaWV3XShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9EYXlWaWV3KSwgdGhpcyBjb2xvciBpcyBhcHBsaWVkIHRvIHRoZSBib2R5IG9mIHRoZSBldmVudCBlbGVtZW50LiBOb3RlIHRoYXQgdGhpcyBtdXN0IGJlIGxpZ2h0IGVub3VnaCB0aGF0IHRoZSB0ZXh0IGNvbG9yIChGcm9tIHRoZSBTQVNTIHZhcmlhYmxlIGAkZGF5dmlldy1ldmVudC1jb2xvcmApIGlzIHZpc2libGVcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGRldGFpbC5zaG93QnVsbGV0IElmIHRoZXJlIGlzIG5vIGBpY29uQ2xzYCwgYW5kIHRoZSBldmVudCBpcyBub3QgcmVjdXJyaW5nLCB0aGVuIGJ5IGRlZmF1bHQgYSBcImJ1bGxldFwiIGNpcmN1bGFyIGljb24gaXMgc2hvd24gaWYgdGhlIHZpZXcncyBbc2hvd0J1bGxldF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvbWl4aW4vQ2FsZW5kYXJNaXhpbiNjb25maWctc2hvd0J1bGxldCkgaWYgc2V0LiBTZXR0aW5nIHRoaXMgcHJvcGVydHkgaW4gYW4gZXZlbnQgcmVuZGVyZXIgb3ZlcnJpZGVzIHRoaXMgYmVoYXZpb3VyLlxuICAgICAqIEByZXR1cm5zIHtEb21Db25maWcsRG9tQ29uZmlnW10sc3RyaW5nLHZvaWR9XG4gICAgICovXG4gICAgZXZlbnRIZWFkZXJSZW5kZXJlciA/IDogKChkZXRhaWw6IHsgdmlldzogQ2FsZW5kYXJWaWV3LCBldmVudFJlY29yZDogRXZlbnRNb2RlbCwgcmVzb3VyY2VSZWNvcmQ6IFJlc291cmNlTW9kZWwsIHJlbmRlckRhdGE6IHsgc3R5bGU6IG9iamVjdCwgY2xzOiBvYmplY3QsIGljb25TdHlsZTogb2JqZWN0LCBpY29uQ2xzOiBvYmplY3QsIGV2ZW50Q29sb3I6IHN0cmluZywgZGF0YXNldDogb2JqZWN0LCBzb2xpZEJhcjogYm9vbGVhbiwgYm9keUNvbG9yOiBzdHJpbmcgfSwgc2hvd0J1bGxldDogYm9vbGVhbiB9KSA9PiBEb21Db25maWd8RG9tQ29uZmlnW118c3RyaW5nfHZvaWQpfHN0cmluZ1xuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgZXZlbnQgYmFycyBpZiB0aGlzIHZpZXcgY3JlYXRlcyBldmVudCBiYXJzLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9SZXNvdXJjZVZpZXcjY29uZmlnLWV2ZW50SGVpZ2h0KVxuICAgICAqL1xuICAgIGV2ZW50SGVpZ2h0ID8gOiBudW1iZXJ8c3RyaW5nXG4gICAgLyoqXG4gICAgICogQSBmdW5jdGlvbiwgb3IgdGhlIG5hbWUgb2YgYSBmdW5jdGlvbiBpbiB0aGUgb3duZXJzaGlwIGhpZXJhcmNoeSB3aGljaCB5b3VcbiAgICAgKiBjYW4gc3BlY2lmeSB0byBjdXN0b21pemUgZXZlbnQgRE9NIGNvbnRlbnQuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L1Jlc291cmNlVmlldyNjb25maWctZXZlbnRSZW5kZXJlcilcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZGV0YWlsIEFuIG9iamVjdCB0aGF0IGNvbnRhaW5zIGRhdGEgYWJvdXQgdGhlIGV2ZW50IGJlaW5nIHJlbmRlcmVkXG4gICAgICogQHBhcmFtIHtDYWxlbmRhclZpZXd9IGRldGFpbC52aWV3IFRoZSB2aWV3IHJlbmRlcmluZyB0aGUgZXZlbnRcbiAgICAgKiBAcGFyYW0ge1NjaGVkdWxlci5tb2RlbC5FdmVudE1vZGVsfSBkZXRhaWwuZXZlbnRSZWNvcmQgVGhlIGV2ZW50IHJlY29yZFxuICAgICAqIEBwYXJhbSB7U2NoZWR1bGVyLm1vZGVsLlJlc291cmNlTW9kZWx9IGRldGFpbC5yZXNvdXJjZVJlY29yZCBUaGUgUmVzb3VyY2UgcmVjb3JkXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGRldGFpbC5yZW5kZXJEYXRhIEEgZGF0YSBvYmplY3QgY29udGFpbmluZyBwcm9wZXJ0aWVzIHRoYXQgd2lsbCBiZSB1c2VkIHRvIGNyZWF0ZSB0aGUgZXZlbnQgZWxlbWVudFxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBkZXRhaWwucmVuZGVyRGF0YS5zdHlsZSBUaGUgc3R5bGUgcHJvcGVydHkgaXMgYW4gb2JqZWN0IGNvbnRhaW5pbmcgc3R5bGUgcHJvcGVydGllcyBmb3IgdGhlIGV2ZW50IGVsZW1lbnRcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZGV0YWlsLnJlbmRlckRhdGEuY2xzIFRoZSBjbHMgcHJvcGVydHkgaXMgYW4gb2JqZWN0IHdob3NlIHByb3BlcnR5IG5hbWVzIHdpbGwgYmUgYWRkZWQgdG8gdGhlIGV2ZW50IGVsZW1lbnQgaWYgdGhlIHByb3BlcnR5IHZhbHVlIGlzIHRydXRoeVxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBkZXRhaWwucmVuZGVyRGF0YS5pY29uU3R5bGUgVGhlIGljb25TdHlsZSBwcm9wZXJ0eSBpcyBhbiBvYmplY3QgY29udGFpbmluZyBzdHlsZSBwcm9wZXJ0aWVzIGZvciB0aGUgaWNvbiBlbGVtZW50IGlmIGFuIGljb24gZWxlbWVudCBpcyB0byBiZSB1c2VkXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGRldGFpbC5yZW5kZXJEYXRhLmljb25DbHMgVGhlIGljb25DbHMgcHJvcGVydHkgaXMgYW4gb2JqZWN0IHdob3NlIHByb3BlcnR5IG5hbWVzIHdpbGwgYmUgYWRkZWQgdG8gdGhlIGljb24gZWxlbWVudC4gSW5pdGlhbGx5IHNldCBmcm9tIHRoZSBldmVudCByZWNvcmQncyBbaWNvbkNsc10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9TY2hlZHVsZXIvbW9kZWwvRXZlbnRNb2RlbCNmaWVsZC1pY29uQ2xzKS4gQ2FuIGJlIG11dGF0ZWQgYnkgdGhlIHJlbmRlcmVyLiBJZiBudWxsLCBvciBubyBwcm9wZXJ0aWVzIGFyZSBzZXQsIG5vIGljb24gd2lsbCBiZSByZW5kZXJlZFxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBkZXRhaWwucmVuZGVyRGF0YS5ldmVudENvbG9yIENvbG9yIHRvIGJlIGFwcGxpZWQgdG8gdGhlIGV2ZW50XG4gICAgICogQHBhcmFtIHtvYmplY3R9IGRldGFpbC5yZW5kZXJEYXRhLmRhdGFzZXQgQW4gb2JqZWN0IHdoaWNoIHByb2R1Y2VzIHRoZSBgZGF0YXNldGAgb2YgdGhlIHJlc3VsdGluZyBldmVudCBiYXJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGRldGFpbC5yZW5kZXJEYXRhLnNvbGlkQmFyIFRoaXMgaXMgdmFsaWQgZm9yIHZpZXdzIHdoaWNoIGNyZWF0ZSBldmVudCBiYXJzLiBUaGlzIGlzIHNldCB0byBgdHJ1ZWAgYnkgZGVmYXVsdCBmb3IgYWxsIGRheSBhbmQgaW50ZXJkYXkgZXZlbnRzIHNvIHRoYXQgdGhlc2UgYXBwZWFyIGFzIGEgc29saWQgYmxvY2sgb2YgYmFja2dyb3VuZCBjb2xvci4gQW4gZXZlbnRSZW5kZXJlciBtYXkgbXV0YXRlIHRoaXMgZmxhZyB0byBjaGFuZ2UgaW4gd2hhdCBtYW5uZXIgdGhlIGV2ZW50IGJhciBpcyBjb2xvdXJlZCAtIGFzIGEgc29saWQgYmFyIG9mIGNvbG91ciwgb3IgdXNpbmcgdGhlIGZvcmVncm91bmQgY29sb3VyICh0ZXh0IGFuZCBpY29ucykgc3VjaCBhcyB0aGUgTW9udGhWaWV3LCB0aGUgQ2FsZW5kYXJSb3cgKGFsbCBkYXkgZXZlbnRzIGluIGEgRGF5VmlldyksIGFuZCBPdmVyZmxvd1BvcHVwc1xuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBkZXRhaWwucmVuZGVyRGF0YS5ib2R5Q29sb3IgV2hlbiB1c2VkIGluIGEgW0RheVZpZXddKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L0RheVZpZXcpLCB0aGlzIGNvbG9yIGlzIGFwcGxpZWQgdG8gdGhlIGJvZHkgb2YgdGhlIGV2ZW50IGVsZW1lbnQuIE5vdGUgdGhhdCB0aGlzIG11c3QgYmUgbGlnaHQgZW5vdWdoIHRoYXQgdGhlIHRleHQgY29sb3VyIChGcm9tIHRoZSBTQVNTIHZhcmlhYmxlIGAkZGF5dmlldy1ldmVudC1jb2xvcmApIGlzIHZpc2libGVcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGRldGFpbC5yZW5kZXJEYXRhLnNob3dCdWxsZXQgSWYgdGhlcmUgaXMgbm8gYGljb25DbHNgLCBhbmQgdGhlIGV2ZW50IGlzIG5vdCByZWN1cnJpbmcsIHRoZW4gYnkgZGVmYXVsdCBhIFwiYnVsbGV0XCIgY2lyY3VsYXIgaWNvbiBpcyBzaG93biBpZiB0aGUgdmlldydzIFtzaG93QnVsbGV0XShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9taXhpbi9DYWxlbmRhck1peGluI2NvbmZpZy1zaG93QnVsbGV0KSBpZiBzZXQuIFNldHRpbmcgdGhpcyBwcm9wZXJ0eSBpbiBhbiBldmVudCByZW5kZXJlciBvdmVycmlkZXMgdGhpcyBiZWhhdmlvdXIuXG4gICAgICogQHJldHVybnMge0RvbUNvbmZpZyxEb21Db25maWdbXSxzdHJpbmcsdm9pZH1cbiAgICAgKi9cbiAgICBldmVudFJlbmRlcmVyID8gOiAoKGRldGFpbDogeyB2aWV3OiBDYWxlbmRhclZpZXcsIGV2ZW50UmVjb3JkOiBFdmVudE1vZGVsLCByZXNvdXJjZVJlY29yZDogUmVzb3VyY2VNb2RlbCwgcmVuZGVyRGF0YTogeyBzdHlsZTogb2JqZWN0LCBjbHM6IG9iamVjdCwgaWNvblN0eWxlOiBvYmplY3QsIGljb25DbHM6IG9iamVjdCwgZXZlbnRDb2xvcjogc3RyaW5nLCBkYXRhc2V0OiBvYmplY3QsIHNvbGlkQmFyOiBib29sZWFuLCBib2R5Q29sb3I6IHN0cmluZywgc2hvd0J1bGxldDogYm9vbGVhbiB9IH0pID0+IERvbUNvbmZpZ3xEb21Db25maWdbXXxzdHJpbmd8dm9pZCl8c3RyaW5nXG4gICAgLyoqXG4gICAgICogQSBmdW5jdGlvbiB3aGljaCBjb21wYXJlcyBldmVudHMgd2hpY2ggc29tZSB2aWV3cyB1c2UgdG8gZGVjaWRlIHVwb24gcmVuZGVyaW5nIG9yZGVyLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9SZXNvdXJjZVZpZXcjY29uZmlnLWV2ZW50U29ydGVyKVxuICAgICAqIEBwYXJhbSB7U2NoZWR1bGVyLm1vZGVsLkV2ZW50TW9kZWwsRXZlbnRCYXJ9IGxocyBUaGUgbGVmdCBzaWRlIHZhbHVlIHRvIGNvbnBhcmVcbiAgICAgKiBAcGFyYW0ge1NjaGVkdWxlci5tb2RlbC5FdmVudE1vZGVsLEV2ZW50QmFyfSByaHMgVGhlIHJpZ2h0IHNpZGUgdmFsdWUgdG8gY29ucGFyZVxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAgICovXG4gICAgZXZlbnRTb3J0ZXIgPyA6IChsaHM6IEV2ZW50TW9kZWx8RXZlbnRCYXIsIHJoczogRXZlbnRNb2RlbHxFdmVudEJhcikgPT4gbnVtYmVyXG4gICAgLyoqXG4gICAgICogQnkgZGVmYXVsdCwgdGhlIGVuZCBkYXRlIG9mIGFuIGFsbCBkYXkgZXZlbnQgaXMgZGlzcGxheWVkIGluIHRoZSBVSSBhc1xuICAgICAqIHRoZSBsYXN0IGNhbGVuZGFyIGRhdGUgb24gd2hpY2ggdGhlIGV2ZW50IGZhbGxzLiBGb3IgbW9zdCBlbmQgdXNlcnMsIHRoaXMgaXMgdGhlXG4gICAgICogZXhwZWN0ZWQgdmFsdWUuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L1Jlc291cmNlVmlldyNjb25maWctZXh0ZW5kQWxsRGF5RW5kRGF5KVxuICAgICAqL1xuICAgIGV4dGVuZEFsbERheUVuZERheSA/IDogYm9vbGVhblxuICAgIGV4dHJhRGF0YSA/IDogYW55XG4gICAgLyoqXG4gICAgICogSWYgdGhpcyBpcyBzZXQgdG8gYHRydWVgLCB0aGVuIHdoZW4gZGV0ZXJtaW5pbmcgd2hpY2ggYXNzaWduZWQgcmVzb3VyY2Ugb2YgYSBtdWx0aSBhc3NpZ25lZCBldmVudFxuICAgICAqIHRvIHVzZSB0byBjcmVhdGUgdGhlIGV2ZW50IFVJLCB0aGUgZmlyc3QgcmVzb3VyY2Ugd2hpY2ggaXMgc3RpbGwgc2VsZWN0ZWQgaW4gdGhlXG4gICAgICogW3Jlc291cmNlRmlsdGVyXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9TaWRlYmFyI3Byb3BlcnR5LXJlc291cmNlRmlsdGVyKSBpcyB1c2VkLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9SZXNvdXJjZVZpZXcjY29uZmlnLWZpbHRlckV2ZW50UmVzb3VyY2VzKVxuICAgICAqL1xuICAgIGZpbHRlckV2ZW50UmVzb3VyY2VzID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogV2hlbiB0aGlzIHdpZGdldCBpcyBhIGNoaWxkIG9mIGEgW0NvbnRhaW5lcl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9Db3JlL3dpZGdldC9Db250YWluZXIpLCBpdCB3aWxsIGJ5IGRlZmF1bHQgYmUgcGFydGljaXBhdGluZyBpbiBhXG4gICAgICogZmxleGJveCBsYXlvdXQuIFRoaXMgY29uZmlnIGFsbG93cyB5b3UgdG8gc2V0IHRoaXMgd2lkZ2V0J3NcbiAgICAgKiBbZmxleF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL2ZsZXgpIHN0eWxlLlxuICAgICAqIFRoaXMgbWF5IGJlIGNvbmZpZ3VyZWQgYXMgYSBzaW5nbGUgbnVtYmVyIG9yIGEgYCZsdDtmbGV4LWdyb3cmZ3Q7ICZsdDtmbGV4LXNocmluayZndDsgJmx0O2ZsZXgtYmFzaXMmZ3Q7YCBmb3JtYXQgc3RyaW5nLlxuICAgICAqIG51bWVyaWMtb25seSB2YWx1ZXMgYXJlIGludGVycHJldGVkIGFzIHRoZSBgZmxleC1ncm93YCB2YWx1ZS5cbiAgICAgKi9cbiAgICBmbGV4ID8gOiBudW1iZXJ8c3RyaW5nXG4gICAgLyoqXG4gICAgICogU2V0IHRvIGB0cnVlYCB0byBtb3ZlIHRoZSB3aWRnZXQgb3V0IG9mIHRoZSBkb2N1bWVudCBmbG93IGFuZCBwb3NpdGlvbiBpdFxuICAgICAqIGFic29sdXRlbHkgaW4gYnJvd3NlciB2aWV3cG9ydCBzcGFjZS5cbiAgICAgKi9cbiAgICBmbG9hdGluZyA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIENvbmZpZyBvYmplY3Qgb2YgYSBmb290ZXIuIE1heSBjb250YWluIGEgYGRvY2tgLCBgaHRtbGAgYW5kIGEgYGNsc2AgcHJvcGVydHkuIEEgZm9vdGVyIGlzIG5vdCBhIHdpZGdldCxcbiAgICAgKiBidXQgcmF0aGVyIHBsYWluIEhUTUwgdGhhdCBmb2xsb3dzIHRoZSBsYXN0IGVsZW1lbnQgb2YgdGhlIHBhbmVsJ3MgYm9keSBhbmQgW3N0cmlwc10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9Db3JlL3dpZGdldC9QYW5lbCNjb25maWctc3RyaXBzKS5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvUmVzb3VyY2VWaWV3I2NvbmZpZy1mb290ZXIpXG4gICAgICovXG4gICAgZm9vdGVyID8gOiB7XG4gICAgICAgIGRvY2s/OiAndG9wJ3wncmlnaHQnfCdib3R0b20nfCdsZWZ0J3wnc3RhcnQnfCdlbmQnXG4gICAgICAgIGh0bWw/OiBzdHJpbmdcbiAgICAgICAgY2xzPzogc3RyaW5nXG4gICAgfXxzdHJpbmdcbiAgICAvKipcbiAgICAgKiBBIEZ1bmN0aW9uIChvciBuYW1lIG9mIGEgZnVuY3Rpb24gaW4gdGhlIG93bmVyc2hpcCBoaWVyYXJjaHkpIHdoaWNoIHJldHVybnMgdGhlXG4gICAgICogW3Jlc291cmNlIHJlY29yZF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9TY2hlZHVsZXIvbW9kZWwvUmVzb3VyY2VNb2RlbCkgdG8gdXNlIHRvIGNyZWF0ZSB0aGUgVUkgZm9yIGFuIGV2ZW50LlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9SZXNvdXJjZVZpZXcjY29uZmlnLWdldFByaW1hcnlSZXNvdXJjZSlcbiAgICAgKiBAcGFyYW0ge1NjaGVkdWxlci5tb2RlbC5FdmVudE1vZGVsfSBldmVudFJlY29yZCBUaGUgZXZlbnQgZnJvbSB3aGljaCB0byBleHRyYWN0IHRoZSBwcmltYXJ5IHJlc291cmNlLlxuICAgICAqIEByZXR1cm5zIHtTY2hlZHVsZXIubW9kZWwuUmVzb3VyY2VNb2RlbH0gVGhlIHJlc291cmNlIHRvIGJlIHVzZWQgdG8gcmVuZGVyIHRoZSBldmVudC5cbiAgICAgKi9cbiAgICBnZXRQcmltYXJ5UmVzb3VyY2UgPyA6ICgoZXZlbnRSZWNvcmQ6IEV2ZW50TW9kZWwpID0+IFJlc291cmNlTW9kZWwpfHN0cmluZ1xuICAgIC8qKlxuICAgICAqIEEgY29uZmlnIFtvYmplY3RdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ29yZS93aWRnZXQvUGFuZWwjdHlwZWRlZi1QYW5lbEhlYWRlcikgZm9yIHRoZSBwYW5lbCdzIGhlYWRlciBvciBhIHN0cmluZyBpbiBwbGFjZSBvZiBhIGB0aXRsZWAuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L1Jlc291cmNlVmlldyNjb25maWctaGVhZGVyKVxuICAgICAqL1xuICAgIGhlYWRlciA/IDogc3RyaW5nfGJvb2xlYW58UGFuZWxIZWFkZXJcbiAgICAvKipcbiAgICAgKiBXaWRnZXQncyBoZWlnaHQsIHVzZWQgdG8gc2V0IGVsZW1lbnQgYHN0eWxlLmhlaWdodGAuIEVpdGhlciBzcGVjaWZ5IGEgdmFsaWQgaGVpZ2h0IHN0cmluZyBvciBhIG51bWJlcixcbiAgICAgKiB3aGljaCB3aWxsIGdldCAncHgnIGFwcGVuZGVkLiBXZSByZWNvbW1lbmQgdXNpbmcgQ1NTIGFzIHRoZSBwcmltYXJ5IHdheSB0byBjb250cm9sIGhlaWdodCwgYnV0IGluIHNvbWVcbiAgICAgKiBjYXNlcyB0aGlzIGNvbmZpZyBpcyBjb252ZW5pZW50LlxuICAgICAqL1xuICAgIGhlaWdodCA/IDogc3RyaW5nfG51bWJlclxuICAgIC8qKlxuICAgICAqIENvbmZpZ3VyZSB3aXRoIHRydWUgdG8gbWFrZSB3aWRnZXQgaW5pdGlhbGx5IGhpZGRlbi5cbiAgICAgKi9cbiAgICBoaWRkZW4gPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiAqT25seSB2YWxpZCBpZiB0aGlzIFdpZGdldCBpcyBbZmxvYXRpbmddKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ29yZS93aWRnZXQvV2lkZ2V0I2NvbmZpZy1mbG9hdGluZykuKlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9SZXNvdXJjZVZpZXcjY29uZmlnLWhpZGVBbmltYXRpb24pXG4gICAgICovXG4gICAgaGlkZUFuaW1hdGlvbiA/IDogYm9vbGVhbnxvYmplY3RcbiAgICAvKipcbiAgICAgKiBTZXQgdG8gYHRydWVgIHRvIGhpZGUgbm9uLXdvcmtpbmcgZGF5c1xuICAgICAqL1xuICAgIGhpZGVOb25Xb3JraW5nRGF5cyA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIFNwZWNpZnkgYHRydWVgIHRvIG1ha2UgdGhpcyBjb250YWluZXIgaGlkZSB3aGVuIGl0IGhhcyBubyB2aXNpYmxlIGNoaWxkcmVuIChFaXRoZXIgZW1wdHlcbiAgICAgKiBvciBhbGwgY2hpbGRyZW4gaGlkZGVuKS5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvUmVzb3VyY2VWaWV3I2NvbmZpZy1oaWRlV2hlbkVtcHR5KVxuICAgICAqL1xuICAgIGhpZGVXaGVuRW1wdHkgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBBbiBpY29uIHRvIHNob3cgYmVmb3JlIHRoZSBbdGl0bGVdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ29yZS93aWRnZXQvUGFuZWwjY29uZmlnLXRpdGxlKS4gRWl0aGVyIHBhc3MgYSBDU1MgY2xhc3MgYXMgYSBzdHJpbmcsIG9yIHBhc3MgYVxuICAgICAqIFtEb21Db25maWddKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ29yZS9oZWxwZXIvRG9tSGVscGVyI3R5cGVkZWYtRG9tQ29uZmlnKSBvYmplY3QgZGVzY3JpYmluZyBhbiBlbGVtZW50IHRvIHJlcHJlc2VudCB0aGUgaWNvbi5cbiAgICAgKi9cbiAgICBpY29uID8gOiBzdHJpbmd8RG9tQ29uZmlnXG4gICAgLyoqXG4gICAgICogV2lkZ2V0IGlkLCBpZiBub3Qgc3BlY2lmaWVkIG9uZSB3aWxsIGJlIGdlbmVyYXRlZC4gQWxzbyB1c2VkIGZvciBsb29rdXBzIHRocm91Z2ggV2lkZ2V0LmdldEJ5SWRcbiAgICAgKi9cbiAgICBpZCA/IDogc3RyaW5nXG4gICAgLyoqXG4gICAgICogRGV0ZXJtaW5lcyBpZiB0aGUgd2lkZ2V0cyByZWFkLW9ubHkgc3RhdGUgc2hvdWxkIGJlIGNvbnRyb2xsZWQgYnkgaXRzIHBhcmVudC5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvUmVzb3VyY2VWaWV3I2NvbmZpZy1pZ25vcmVQYXJlbnRSZWFkT25seSlcbiAgICAgKi9cbiAgICBpZ25vcmVQYXJlbnRSZWFkT25seSA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIFdoZW4gW1Jlc291cmNlVGltZVJhbmdlTW9kZWxdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvU2NoZWR1bGVyL21vZGVsL1Jlc291cmNlVGltZVJhbmdlTW9kZWwpcyBhcmUgaW5jbHVkZWQgaW4gdGhlIGRhdGEsIHRoZXlcbiAgICAgKiBhcmUgb25seSByZW5kZXJlZCBpbiBzdWJ2aWV3cyBvZiBbUmVzb3VyY2VWaWV3XShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9SZXNvdXJjZVZpZXcpcyBhbmQgbm9ybWFsXG4gICAgICogW1RpbWVSYW5nZU1vZGVsXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL21vZGVsL1RpbWVSYW5nZU1vZGVsKXMgYXJlIDxzdHJvbmc+bm90PC9zdHJvbmc+IHJlbmRlcmVkIGluIHN1YnZpZXdzIG9mXG4gICAgICogW1Jlc291cmNlVmlld10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvUmVzb3VyY2VWaWV3KXMuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L1Jlc291cmNlVmlldyNjb25maWctaW5jbHVkZVRpbWVSYW5nZXMpXG4gICAgICovXG4gICAgaW5jbHVkZVRpbWVSYW5nZXMgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBDb252ZW5pZW5jZSBzZXR0aW5nIHRvIGFsaWduIGlucHV0IGZpZWxkcyBvZiBjaGlsZCB3aWRnZXRzLiBCeSBkZWZhdWx0LCB0aGUgRmllbGQgaW5wdXQgZWxlbWVudCBpc1xuICAgICAqIHBsYWNlZCBpbW1lZGlhdGVseSBmb2xsb3dpbmcgdGhlIGBsYWJlbGAuIElmIHlvdSBwcmVmZXIgdG8gaGF2ZSBhbGwgaW5wdXQgZmllbGRzIGFsaWduZWQgdG8gdGhlXG4gICAgICogcmlnaHQsIHNldCB0aGlzIGNvbmZpZyB0byBgJ2VuZCdgLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9SZXNvdXJjZVZpZXcjY29uZmlnLWlucHV0RmllbGRBbGlnbilcbiAgICAgKi9cbiAgICBpbnB1dEZpZWxkQWxpZ24gPyA6ICdzdGFydCd8J2VuZCdcbiAgICAvKipcbiAgICAgKiBFbGVtZW50IChvciBlbGVtZW50IGlkKSB0byBpbnNlcnQgdGhpcyB3aWRnZXQgYmVmb3JlLiBJZiBwcm92aWRlZCwgW2FwcGVuZFRvXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1dpZGdldCNjb25maWctYXBwZW5kVG8pIGNvbmZpZyBpcyBpZ25vcmVkLlxuICAgICAqL1xuICAgIGluc2VydEJlZm9yZSA/IDogSFRNTEVsZW1lbnR8c3RyaW5nXG4gICAgLyoqXG4gICAgICogRWxlbWVudCAob3IgZWxlbWVudCBpZCkgdG8gYXBwZW5kIHRoaXMgd2lkZ2V0IGVsZW1lbnQgdG8sIGFzIGEgZmlyc3QgY2hpbGQuIElmIHByb3ZpZGVkLCBbYXBwZW5kVG9dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ29yZS93aWRnZXQvV2lkZ2V0I2NvbmZpZy1hcHBlbmRUbykgY29uZmlnIGlzIGlnbm9yZWQuXG4gICAgICovXG4gICAgaW5zZXJ0Rmlyc3QgPyA6IEhUTUxFbGVtZW50fHN0cmluZ1xuICAgIC8qKlxuICAgICAqIEFuIG9wdGlvbmFsIENTUyBjbGFzcyB0byBhZGQgdG8gY2hpbGQgaXRlbXMgb2YgdGhpcyBjb250YWluZXIuXG4gICAgICovXG4gICAgaXRlbUNscyA/IDogc3RyaW5nXG4gICAgLyoqXG4gICAgICogQW4gb2JqZWN0IGNvbnRhaW5pbmcgdHlwZWQgY2hpbGQgd2lkZ2V0IGNvbmZpZyBvYmplY3RzIG9yIFdpZGdldHMuIE1heSBhbHNvIGJlIHNwZWNpZmllZFxuICAgICAqIGFzIGFuIGFycmF5LlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9SZXNvdXJjZVZpZXcjY29uZmlnLWl0ZW1zKVxuICAgICAqL1xuICAgIGl0ZW1zID8gOiBSZWNvcmQ8c3RyaW5nLCBDYWxlbmRhckNvbnRhaW5lckl0ZW1Db25maWd8TWVudUl0ZW1FbnRyeT58KENhbGVuZGFyQ29udGFpbmVySXRlbUNvbmZpZ3xNZW51SXRlbUVudHJ5fFdpZGdldClbXVxuICAgIC8qKlxuICAgICAqIEFuIG9iamVjdCB3aG9zZSBrZXlzIGFyZSB0aGUgW2tleV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0tleWJvYXJkRXZlbnQva2V5KSBuYW1lXG4gICAgICogYW5kIG9wdGlvbmFsIG1vZGlmaWVyIHByZWZpeGVzOiBgJ0N0cmwrJ2AsIGAnQWx0KydgLCBgJ01ldGErJ2AsIGFuZCBgJ1NoaWZ0KydgIChjYXNlLWluc2Vuc2l0aXZlKS4gVGhlIHZhbHVlc1xuICAgICAqIGFyZSB0aGUgbmFtZSBvZiB0aGUgaW5zdGFuY2UgbWV0aG9kIHRvIGNhbGwgd2hlbiB0aGUga2V5c3Ryb2tlIGlzIHJlY2VpdmVkLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9SZXNvdXJjZVZpZXcjY29uZmlnLWtleU1hcClcbiAgICAgKi9cbiAgICBrZXlNYXAgPyA6IFJlY29yZDxzdHJpbmcsIEtleU1hcENvbmZpZz5cbiAgICAvKipcbiAgICAgKiBDb252ZW5pZW5jZSBzZXR0aW5nIHRvIHVzZSBzYW1lIGxhYmVsIHBsYWNlbWVudCBvbiBhbGwgY2hpbGQgd2lkZ2V0cy5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvUmVzb3VyY2VWaWV3I2NvbmZpZy1sYWJlbFBvc2l0aW9uKVxuICAgICAqL1xuICAgIGxhYmVsUG9zaXRpb24gPyA6ICdiZWZvcmUnfCdhYm92ZSd8J2FsaWduLWJlZm9yZSd8J2F1dG8nfG51bGxcbiAgICAvKipcbiAgICAgKiBUaGUgc2hvcnQgbmFtZSBvZiBhIGhlbHBlciBjbGFzcyB3aGljaCBtYW5hZ2VzIHJlbmRlcmluZyBhbmQgc3R5bGluZyBvZiBjaGlsZCBpdGVtcy5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvUmVzb3VyY2VWaWV3I2NvbmZpZy1sYXlvdXQpXG4gICAgICovXG4gICAgbGF5b3V0ID8gOiBzdHJpbmd8Q2FsZW5kYXJDb250YWluZXJMYXlvdXRDb25maWdcbiAgICAvKipcbiAgICAgKiBUaGUgQ1NTIHN0eWxlIHByb3BlcnRpZXMgdG8gYXBwbHkgdG8gdGhlIFtjb250ZW50RWxlbWVudF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9Db3JlL3dpZGdldC9XaWRnZXQjcHJvcGVydHktY29udGVudEVsZW1lbnQpLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9SZXNvdXJjZVZpZXcjY29uZmlnLWxheW91dFN0eWxlKVxuICAgICAqL1xuICAgIGxheW91dFN0eWxlID8gOiBvYmplY3RcbiAgICAvKipcbiAgICAgKiBBbiBhcnJheSBvZiBbY2hpbGQgaXRlbV0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9Db3JlL3dpZGdldC9Db250YWluZXIjY29uZmlnLWl0ZW1zKSAqY29uZmlnIG9iamVjdHMqIHdoaWNoIGlzIHRvIGJlIGNvbnZlcnRlZCBpbnRvXG4gICAgICogaW5zdGFuY2VzIG9ubHkgd2hlbiB0aGlzIENvbnRhaW5lciBpcyByZW5kZXJlZCwgcmF0aGVyIHRoYW4gZWFnZXJseSBhdCBjb25zdHJ1Y3QgdGltZS5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvUmVzb3VyY2VWaWV3I2NvbmZpZy1sYXp5SXRlbXMpXG4gICAgICovXG4gICAgbGF6eUl0ZW1zID8gOiBSZWNvcmQ8c3RyaW5nLCBDYWxlbmRhckNvbnRhaW5lckl0ZW1Db25maWc+fENhbGVuZGFyQ29udGFpbmVySXRlbUNvbmZpZ1tdfFdpZGdldFtdXG4gICAgLyoqXG4gICAgICogVGhlIGxpc3RlbmVyIHNldCBmb3IgdGhpcyBvYmplY3QuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L1Jlc291cmNlVmlldyNjb25maWctbGlzdGVuZXJzKVxuICAgICAqL1xuICAgIGxpc3RlbmVycyA/IDogUmVzb3VyY2VWaWV3TGlzdGVuZXJzXG4gICAgLyoqXG4gICAgICogQSBjbGFzcyB0cmFuc2xhdGlvbnMgb2Ygd2hpY2ggYXJlIHVzZWQgZm9yIHRyYW5zbGF0aW5nIHRoaXMgZW50aXR5LlxuICAgICAqIFRoaXMgaXMgb2Z0ZW4gdXNlZCB3aGVuIHRyYW5zbGF0aW9ucyBvZiBhbiBpdGVtIGFyZSBkZWZpbmVkIG9uIGl0cyBjb250YWluZXIgY2xhc3MuXG4gICAgICogRm9yIGV4YW1wbGU6XG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L1Jlc291cmNlVmlldyNjb25maWctbG9jYWxlQ2xhc3MpXG4gICAgICovXG4gICAgbG9jYWxlQ2xhc3MgPyA6IHR5cGVvZiBCYXNlXG4gICAgLyoqXG4gICAgICogU2V0IHRvIGBmYWxzZWAgdG8gZGlzYWJsZSBsb2NhbGl6YXRpb24gb2YgdGhpcyBvYmplY3QuXG4gICAgICovXG4gICAgbG9jYWxpemFibGUgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBMaXN0IG9mIHByb3BlcnRpZXMgd2hpY2ggdmFsdWVzIHNob3VsZCBiZSB0cmFuc2xhdGVkIGF1dG9tYXRpY2FsbHkgdXBvbiBhIGxvY2FsZSBhcHBseWluZy5cbiAgICAgKiBJbiBjYXNlIHRoZXJlIGlzIGEgbmVlZCB0byBsb2NhbGl6ZSBub3QgdHlwaWNhbCB2YWx1ZSAobm90IGEgU3RyaW5nIHZhbHVlIG9yIGEgZmllbGQgd2l0aCByZS1kZWZpbmVkIHNldHRlci9nZXR0ZXIpLFxuICAgICAqIHlvdSBjb3VsZCB1c2UgJ2xvY2FsZUtleScgbWV0YSBjb25maWd1cmF0aW9uLlxuICAgICAqIEV4YW1wbGU6XG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L1Jlc291cmNlVmlldyNjb25maWctbG9jYWxpemFibGVQcm9wZXJ0aWVzKVxuICAgICAqL1xuICAgIGxvY2FsaXphYmxlUHJvcGVydGllcyA/IDogc3RyaW5nW11cbiAgICAvKipcbiAgICAgKiBXaWRnZXQncyBtYXJnaW4uIFRoaXMgbWF5IGJlIGNvbmZpZ3VyZWQgYXMgYSBzaW5nbGUgbnVtYmVyIG9yIGEgYFRSQkxgIGZvcm1hdCBzdHJpbmcuXG4gICAgICogbnVtZXJpYy1vbmx5IHZhbHVlcyBhcmUgaW50ZXJwcmV0ZWQgYXMgcGl4ZWxzLlxuICAgICAqL1xuICAgIG1hcmdpbiA/IDogbnVtYmVyfHN0cmluZ1xuICAgIC8qKlxuICAgICAqIFRoaXMgY29uZmlnIG9iamVjdCBjb250YWlucyB0aGUgZGVmYXVsdHMgZm9yIHRoZSBbTWFza10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9Db3JlL3dpZGdldC9NYXNrKSBjcmVhdGVkIGZvciB0aGVcbiAgICAgKiBbbWFza2VkXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1dpZGdldCNjb25maWctbWFza2VkKSBjb25maWcuIEFueSBwcm9wZXJ0aWVzIHNwZWNpZmllZCBpbiB0aGUgYG1hc2tlZGAgY29uZmlnIHdpbGwgb3ZlcnJpZGUgdGhlc2VcbiAgICAgKiB2YWx1ZXMuXG4gICAgICovXG4gICAgbWFza0RlZmF1bHRzID8gOiBNYXNrQ29uZmlnXG4gICAgLyoqXG4gICAgICogU2V0IHRvIGB0cnVlYCB0byBhcHBseSB0aGUgZGVmYXVsdCBtYXNrIHRvIHRoZSB3aWRnZXQuIEFsdGVybmF0aXZlbHksIHRoaXMgY2FuIGJlIHRoZSBtYXNrIG1lc3NhZ2Ugb3IgYVxuICAgICAqIFtNYXNrXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L01hc2spIGNvbmZpZyBvYmplY3QuXG4gICAgICovXG4gICAgbWFza2VkID8gOiBib29sZWFufHN0cmluZ3xNYXNrQ29uZmlnXG4gICAgLyoqXG4gICAgICogVGhlIG1heGltdW0gZGF0ZSB0byB3aGljaCB0aGUgYGVuZERhdGVgIG9mIHRoaXMgdmlldyBtYXkgYmUgbmF2aWdhdGVkLlxuICAgICAqL1xuICAgIG1heERhdGUgPyA6IERhdGV8c3RyaW5nXG4gICAgLyoqXG4gICAgICogVGhlIGVsZW1lbnQncyBtYXhIZWlnaHQuIENhbiBiZSBlaXRoZXIgYSBTdHJpbmcgb3IgYSBOdW1iZXIgKHdoaWNoIHdpbGwgaGF2ZSAncHgnIGFwcGVuZGVkKS4gTm90ZSB0aGF0XG4gICAgICogbGlrZSBbaGVpZ2h0XShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1dpZGdldCNjb25maWctaGVpZ2h0KSwgKnJlYWRpbmcqIHRoZSB2YWx1ZSB3aWxsIHJldHVybiB0aGUgbnVtZXJpYyB2YWx1ZSBpbiBwaXhlbHMuXG4gICAgICovXG4gICAgbWF4SGVpZ2h0ID8gOiBzdHJpbmd8bnVtYmVyXG4gICAgLyoqXG4gICAgICogKk9ubHkgdmFsaWQgaWYgdGhpcyBXaWRnZXQgaXMgW2Zsb2F0aW5nXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1dpZGdldCNjb25maWctZmxvYXRpbmcpLipcbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvUmVzb3VyY2VWaWV3I2NvbmZpZy1tYXhpbWl6ZU9uTW9iaWxlKVxuICAgICAqL1xuICAgIG1heGltaXplT25Nb2JpbGUgPyA6IG51bWJlcnxzdHJpbmdcbiAgICAvKipcbiAgICAgKiBUaGUgZWxlbWVudHMgbWF4V2lkdGguIENhbiBiZSBlaXRoZXIgYSBTdHJpbmcgb3IgYSBOdW1iZXIgKHdoaWNoIHdpbGwgaGF2ZSAncHgnIGFwcGVuZGVkKS4gTm90ZSB0aGF0XG4gICAgICogbGlrZSBbd2lkdGhdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ29yZS93aWRnZXQvV2lkZ2V0I2NvbmZpZy13aWR0aCksICpyZWFkaW5nKiB0aGUgdmFsdWUgd2lsbCByZXR1cm4gdGhlIG51bWVyaWMgdmFsdWUgaW4gcGl4ZWxzLlxuICAgICAqL1xuICAgIG1heFdpZHRoID8gOiBzdHJpbmd8bnVtYmVyXG4gICAgLyoqXG4gICAgICogQSBmaWVsZCBuYW1lIG9yIGEgZnVuY3Rpb24gcmV0dXJuaW5nIGEgc3RyaW5nIHRvIGJlIGRpc3BsYXllZCBiZWxvdyByZXNvdXJjZSBuYW1lIGluIHRoZSByZXNvdXJjZSB2aWV3XG4gICAgICogaGVhZGVycy5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvUmVzb3VyY2VWaWV3I2NvbmZpZy1tZXRhKVxuICAgICAqIEBwYXJhbSB7U2NoZWR1bGVyLm1vZGVsLlJlc291cmNlTW9kZWx9IHJlc291cmNlIERpc3BsYXllZCByZXNvdXJjZVxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFRleHQgdG8gYmUgZGlzcGxheWVkIGJlbG93IHJlc291cmNlIG5hbWVcbiAgICAgKi9cbiAgICBtZXRhID8gOiBzdHJpbmd8KChyZXNvdXJjZTogUmVzb3VyY2VNb2RlbCkgPT4gc3RyaW5nKVxuICAgIC8qKlxuICAgICAqIFRoZSBtaW5pbXVtIGRhdGUgdG8gd2hpY2ggdGhlIGBzdGFydERhdGVgIG9mIHRoaXMgdmlldyBtYXkgYmUgbmF2aWdhdGVkLlxuICAgICAqL1xuICAgIG1pbkRhdGUgPyA6IERhdGV8c3RyaW5nXG4gICAgLyoqXG4gICAgICogVGhlIGVsZW1lbnQncyBtaW5IZWlnaHQuIENhbiBiZSBlaXRoZXIgYSBTdHJpbmcgb3IgYSBOdW1iZXIgKHdoaWNoIHdpbGwgaGF2ZSAncHgnIGFwcGVuZGVkKS4gTm90ZSB0aGF0XG4gICAgICogbGlrZSBbaGVpZ2h0XShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1dpZGdldCNjb25maWctaGVpZ2h0KSwgKnJlYWRpbmcqIHRoZSB2YWx1ZSB3aWxsIHJldHVybiB0aGUgbnVtZXJpYyB2YWx1ZSBpbiBwaXhlbHMuXG4gICAgICovXG4gICAgbWluSGVpZ2h0ID8gOiBzdHJpbmd8bnVtYmVyXG4gICAgLyoqXG4gICAgICogVGhlIGVsZW1lbnRzIG1pbldpZHRoLiBDYW4gYmUgZWl0aGVyIGEgU3RyaW5nIG9yIGEgTnVtYmVyICh3aGljaCB3aWxsIGhhdmUgJ3B4JyBhcHBlbmRlZCkuIE5vdGUgdGhhdFxuICAgICAqIGxpa2UgW3dpZHRoXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1dpZGdldCNjb25maWctd2lkdGgpLCAqcmVhZGluZyogdGhlIHZhbHVlIHdpbGwgcmV0dXJuIHRoZSBudW1lcmljIHZhbHVlIGluIHBpeGVscy5cbiAgICAgKi9cbiAgICBtaW5XaWR0aCA/IDogc3RyaW5nfG51bWJlclxuICAgIC8qKlxuICAgICAqIFdoZW4gdGhpcyBpcyBjb25maWd1cmVkIGFzIGB0cnVlYCBhIFtSZXNpemVPYnNlcnZlcl0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1Jlc2l6ZU9ic2VydmVyKVxuICAgICAqIGlzIHVzZWQgdG8gbW9uaXRvciB0aGlzIGVsZW1lbnQgZm9yIHNpemUgY2hhbmdlcyBjYXVzZWQgYnkgZWl0aGVyIHN0eWxlIG1hbmlwdWxhdGlvbiwgb3IgYnkgQ1NTXG4gICAgICogbGF5b3V0LlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9SZXNvdXJjZVZpZXcjY29uZmlnLW1vbml0b3JSZXNpemUpXG4gICAgICovXG4gICAgbW9uaXRvclJlc2l6ZSA/IDogYm9vbGVhbnx7XG4gICAgICAgIGltbWVkaWF0ZT86IGJvb2xlYW5cbiAgICB9XG4gICAgLyoqXG4gICAgICogQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGVmYXVsdCBjb25maWcgb2JqZWN0cyB3aGljaCBtYXkgYmUgcmVmZXJlbmNlZCBieSBuYW1lIGluIHRoZSBbaXRlbXNdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ29yZS93aWRnZXQvQ29udGFpbmVyI2NvbmZpZy1pdGVtcylcbiAgICAgKiBjb25maWcuIEZvciBleGFtcGxlLCBhIHNwZWNpYWxpemVkIFtNZW51XShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L01lbnUpIHN1YmNsYXNzIG1heSBoYXZlIGEgYG5hbWVkSXRlbXNgIGRlZmF1bHRcbiAgICAgKiB2YWx1ZSBkZWZpbmVkIGxpa2UgdGhpczpcbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvUmVzb3VyY2VWaWV3I2NvbmZpZy1uYW1lZEl0ZW1zKVxuICAgICAqL1xuICAgIG5hbWVkSXRlbXMgPyA6IFJlY29yZDxzdHJpbmcsIENhbGVuZGFyQ29udGFpbmVySXRlbUNvbmZpZz5cbiAgICAvKipcbiAgICAgKiBOb24td29ya2luZyBkYXlzIGFzIGFuIG9iamVjdCB3aGVyZSBrZXlzIGFyZSBkYXkgaW5kaWNlcywgMC02IChTdW5kYXktU2F0dXJkYXkpLCBhbmQgdGhlIHZhbHVlIGlzIGB0cnVlYC5cbiAgICAgKiBEZWZhdWx0cyB0byBbbm9uV29ya2luZ0RheXNdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ29yZS9oZWxwZXIvRGF0ZUhlbHBlciNwcm9wZXJ0eS1ub25Xb3JraW5nRGF5cy1zdGF0aWMpLlxuICAgICAqL1xuICAgIG5vbldvcmtpbmdEYXlzID8gOiBSZWNvcmQ8bnVtYmVyLCBib29sZWFuPlxuICAgIC8qKlxuICAgICAqIFRoZSBvd25pbmcgV2lkZ2V0IG9mIHRoaXMgV2lkZ2V0LiBJZiB0aGlzIFdpZGdldCBpcyBkaXJlY3RseSBjb250YWluZWQgKHRoYXQgaXMsIGl0IGlzIG9uZSBvZiB0aGVcbiAgICAgKiBbaXRlbXNdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ29yZS93aWRnZXQvQ29udGFpbmVyI3Byb3BlcnR5LWl0ZW1zKSBvZiBhIENvbnRhaW5lciksIHRoaXMgY29uZmlnIHdpbGwgYmUgaWdub3JlZC4gSW4gdGhpcyBjYXNlXG4gICAgICogdGhlIG93bmVyIGlzIDxzdHJvbmc+YWx3YXlzPC9zdHJvbmc+IHRoZSBlbmNhcHN1bGF0aW5nIENvbnRhaW5lci5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvUmVzb3VyY2VWaWV3I2NvbmZpZy1vd25lcilcbiAgICAgKi9cbiAgICBvd25lciA/IDogV2lkZ2V0fGFueVxuICAgIC8qKlxuICAgICAqIFRoZSBjbGFzcyBuYW1lIHRvIGFkZCB0byBldmVudHMgd2hpY2ggaGF2ZSBhbiBlbmQgZGF0ZSBpbiB0aGUgcGFzdC4gRGVmYXVsdHMgdG8gYCdiLXBhc3QtZXZlbnQnYC5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvUmVzb3VyY2VWaWV3I2NvbmZpZy1wYXN0RXZlbnRDbHMpXG4gICAgICovXG4gICAgcGFzdEV2ZW50Q2xzID8gOiBzdHJpbmdcbiAgICAvKipcbiAgICAgKiBTZXQgdG8gYHRydWVgIHdoZW4gYSB3aWRnZXQgaXMgcmVuZGVyZWQgaW50byBhbm90aGVyIHdpZGdldCdzIFtjb250ZW50RWxlbWVudF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9Db3JlL3dpZGdldC9XaWRnZXQjcHJvcGVydHktY29udGVudEVsZW1lbnQpLCBidXQgbXVzdFxuICAgICAqIG5vdCBwYXJ0aWNpcGF0ZSBpbiB0aGUgc3RhbmRhcmQgbGF5b3V0IG9mIHRoYXQgd2lkZ2V0LCBhbmQgbXVzdCBiZSBwb3NpdGlvbmVkIHJlbGF0aXZlbHkgdG8gdGhhdFxuICAgICAqIHdpZGdldCdzIFtjb250ZW50RWxlbWVudF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9Db3JlL3dpZGdldC9XaWRnZXQjcHJvcGVydHktY29udGVudEVsZW1lbnQpLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9SZXNvdXJjZVZpZXcjY29uZmlnLXBvc2l0aW9uZWQpXG4gICAgICovXG4gICAgcG9zaXRpb25lZCA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIFByZXZlbnQgdG9vbHRpcCBmcm9tIGJlaW5nIGRpc3BsYXllZCBvbiB0b3VjaCBkZXZpY2VzLiBVc2VmdWwgZm9yIGV4YW1wbGUgZm9yIGJ1dHRvbnMgdGhhdCBkaXNwbGF5IGFcbiAgICAgKiBtZW51IG9uIGNsaWNrIGV0Yywgc2luY2UgdGhlIHRvb2x0aXAgd291bGQgYmUgZGlzcGxheWVkIGF0IHRoZSBzYW1lIHRpbWUuXG4gICAgICovXG4gICAgcHJldmVudFRvb2x0aXBPblRvdWNoID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogPHN0cm9uZz5JZjwvc3Ryb25nPsKgdGhlIGRpc3BsYXllZCBbdmlld10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvUmVzb3VyY2VWaWV3I2NvbmZpZy12aWV3KSBpcyBhIFtEYXRlUmFuZ2VPd25lcl0oI0NhbGVuZGFyL3dpZGdldC9taXhpbi9EYXRlUmFuZ2VPd25lciksXG4gICAgICogdGhpcyBtYXkgYmUgdXNlZCB0byBzZXQgdGhlIFtyYW5nZV0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvbWl4aW4vRGF0ZVJhbmdlT3duZXIjY29uZmlnLXJhbmdlKVxuICAgICAqIG9mIGFsbCBjaGlsZCB2aWV3cy5cbiAgICAgKi9cbiAgICByYW5nZSA/IDogc3RyaW5nfER1cmF0aW9uQ29uZmlnXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGlzIHdpZGdldCBpcyByZWFkLW9ubHkuICBUaGlzIGlzIG9ubHkgdmFsaWQgaWYgdGhlIHdpZGdldCBpcyBhbiBpbnB1dFxuICAgICAqIGZpZWxkLCA8c3Ryb25nPm9yIGNvbnRhaW5zIGlucHV0IGZpZWxkcyBhdCBhbnkgZGVwdGg8L3N0cm9uZz4uXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L1Jlc291cmNlVmlldyNjb25maWctcmVhZE9ubHkpXG4gICAgICovXG4gICAgcmVhZE9ubHkgPyA6IGJvb2xlYW5cbiAgICByZWxheVN0b3JlRXZlbnRzID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogRWl0aGVyIGEgZGVmYXVsdCBgcmVuZGl0aW9uYCB0byBhcHBseSB0byBhbGwgY2hpbGQgd2lkZ2V0cywgb3IgYSBtYXAgb2YgcmVuZGl0aW9ucyBrZXllZCBieSBjaGlsZCB3aWRnZXRcbiAgICAgKiBgdHlwZWAuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L1Jlc291cmNlVmlldyNjb25maWctcmVuZGl0aW9uKVxuICAgICAqL1xuICAgIHJlbmRpdGlvbiA/IDogc3RyaW5nfFJlY29yZDxzdHJpbmcsIHN0cmluZz58bnVsbFxuICAgIC8qKlxuICAgICAqIFBhdGggdG8gbG9hZCByZXNvdXJjZSBpbWFnZXMgZnJvbS4gVXNlZCBieSB0aGUgW3Nob3dSZXNvdXJjZUF2YXRhcnNdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L21peGluL0NhbGVuZGFyTWl4aW4jY29uZmlnLXNob3dSZXNvdXJjZUF2YXRhcnMpIGNvbmZpZ1xuICAgICAqIHRvIGNyZWF0ZSBVUkxzIHVzaW5nIHRoZSByZXNvdXJjZSdzXG4gICAgICogW2ltYWdlXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL1NjaGVkdWxlci9tb2RlbC9SZXNvdXJjZU1vZGVsI2ZpZWxkLWltYWdlKSBvclxuICAgICAqIFtpbWFnZVVybF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9TY2hlZHVsZXIvbW9kZWwvUmVzb3VyY2VNb2RlbCNmaWVsZC1pbWFnZVVybCkgZmllbGRzOlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9SZXNvdXJjZVZpZXcjY29uZmlnLXJlc291cmNlSW1hZ2VQYXRoKVxuICAgICAqL1xuICAgIHJlc291cmNlSW1hZ2VQYXRoID8gOiBzdHJpbmdcbiAgICAvKipcbiAgICAgKiBUaGUgd2lkdGggb2YgYSByZXNvdXJjZSBjYWxlbmRhciBwYW5lbCAodmlldyBhbHdheXMgc3RyZXRjaGVzIHRvIGZpbGwgd2luZG93KVxuICAgICAqL1xuICAgIHJlc291cmNlV2lkdGggPyA6IG51bWJlcnxzdHJpbmdcbiAgICAvKipcbiAgICAgKiBTcGVjaWZpZXMgdGhlIHZhcmlvdXMgcmVzcG9uc2l2ZSBzdGF0ZSBvYmplY3RzIGtleWVkIGJ5IHRoZWlyIG5hbWUuIEVhY2gga2V5IChleGNlcHQgYCcqJ2AsIHNlZSBiZWxvdykgaW5cbiAgICAgKiB0aGlzIG9iamVjdCBpcyBhIHN0YXRlIG5hbWUgKHNlZSBbcmVzcG9uc2l2ZVN0YXRlXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L21peGluL1Jlc3BvbnNpdmUjY29uZmlnLXJlc3BvbnNpdmVTdGF0ZSkpIGFuZCBpdHMgY29ycmVzcG9uZGluZyB2YWx1ZSBpcyB0aGVcbiAgICAgKiBhc3NvY2lhdGVkIFtSZXNwb25zaXZlU3RhdGVdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ29yZS93aWRnZXQvbWl4aW4vUmVzcG9uc2l2ZSN0eXBlZGVmLVJlc3BvbnNpdmVTdGF0ZSkgb2JqZWN0LlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9SZXNvdXJjZVZpZXcjY29uZmlnLXJlc3BvbnNpdmUpXG4gICAgICovXG4gICAgcmVzcG9uc2l2ZSA/IDogb2JqZWN0XG4gICAgLyoqXG4gICAgICogU2V0IHRvIGB0cnVlYCB0byBtYXJrIHRoaXMgaW5zdGFuY2UgYXMgdGhlIGRlZmF1bHQgW3Jlc3BvbnNpdmVUYXJnZXRdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ29yZS93aWRnZXQvbWl4aW4vUmVzcG9uc2l2ZSNjb25maWctcmVzcG9uc2l2ZVRhcmdldCkgZm9yIGRlc2NlbmRhbnRzIHRoYXQgZG9cbiAgICAgKiBub3Qgc3BlY2lmeSBhbiBleHBsaWNpdCBbcmVzcG9uc2l2ZVRhcmdldF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9Db3JlL3dpZGdldC9taXhpbi9SZXNwb25zaXZlI2NvbmZpZy1yZXNwb25zaXZlVGFyZ2V0KSBvZiB0aGVpciBvd24uXG4gICAgICovXG4gICAgcmVzcG9uc2l2ZVJvb3QgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBUaGUgbmFtZSBvZiB0aGUgYWN0aXZlIHN0YXRlIG9mIHRoZSBbcmVzcG9uc2l2ZV0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9Db3JlL3dpZGdldC9taXhpbi9SZXNwb25zaXZlI2NvbmZpZy1yZXNwb25zaXZlKSBjb25maWcuIFRoaXMgaXMgYXNzaWduZWQgaW50ZXJuYWxseVxuICAgICAqIGFuZCBzaG91bGQgbm90IGJlIGFzc2lnbmVkIGRpcmVjdGx5LlxuICAgICAqL1xuICAgIHJlc3BvbnNpdmVTdGF0ZSA/IDogc3RyaW5nXG4gICAgLyoqXG4gICAgICogVGhlIHdpZGdldCB3aG9zZSBzaXplIGFuZCBvdGhlciBwcm9wZXJ0aWVzIGRyaXZlIHRoaXMgb2JqZWN0J3MgcmVzcG9uc2l2ZSBiZWhhdmlvci4gSWYgdGhpcyBjb25maWcgaXMgbm90XG4gICAgICogc3BlY2lmaWVkLCB0aGUgY2xvc2VzdCBhbmNlc3RvciB0aGF0IHNwZWNpZmllZCBbcmVzcG9uc2l2ZVJvb3Q9dHJ1ZV0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9Db3JlL3dpZGdldC9taXhpbi9SZXNwb25zaXZlI2NvbmZpZy1yZXNwb25zaXZlUm9vdCkgd2lsbCBiZVxuICAgICAqIHVzZWQuIElmIHRoZXJlIGlzIG5vIHN1Y2ggYW5jZXN0b3IsIHRoZW4gdGhlIGluc3RhbmNlIHVzaW5nIHRoaXMgbWl4aW4gaXMgdXNlZC5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvUmVzb3VyY2VWaWV3I2NvbmZpZy1yZXNwb25zaXZlVGFyZ2V0KVxuICAgICAqL1xuICAgIHJlc3BvbnNpdmVUYXJnZXQgPyA6IHN0cmluZ3xXaWRnZXRcbiAgICAvKipcbiAgICAgKiBDb25maWd1cmUgYXMgYHRydWVgIHRvIGhhdmUgdGhlIGNvbXBvbmVudCBkaXNwbGF5IGEgdHJhbnNsdWNlbnQgcmlwcGxlIHdoZW4gaXRzXG4gICAgICogW2ZvY3VzRWxlbWVudF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9Db3JlL3dpZGdldC9XaWRnZXQjcHJvcGVydHktZm9jdXNFbGVtZW50KSwgb3IgW2VsZW1lbnRdKCNDb3JlL3dpZGdldC9XaWRnZXQjcHJvcGVydHktZWxlbWVudCkgaXMgdGFwcGVkIDxlbT5pZiB0aGVcbiAgICAgKiBjdXJyZW50IHRoZW1lIHN1cHBvcnRzIHJpcHBsZXM8L2VtPi4gT3V0IG9mIHRoZSBib3gsIG9ubHkgdGhlIE1hdGVyaWFsIHRoZW1lIHN1cHBvcnRzIHJpcHBsZXMuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L1Jlc291cmNlVmlldyNjb25maWctcmlwcGxlKVxuICAgICAqL1xuICAgIHJpcHBsZSA/IDogYm9vbGVhbnx7XG4gICAgICAgIGRlbGVnYXRlPzogc3RyaW5nXG4gICAgICAgIGNvbG9yPzogc3RyaW5nXG4gICAgICAgIHJhZGl1cz86IG51bWJlclxuICAgICAgICBjbGlwPzogc3RyaW5nXG4gICAgfVxuICAgIC8qKlxuICAgICAqIElmIHlvdSBhcmUgcmVuZGVyaW5nIHRoaXMgd2lkZ2V0IHRvIGEgc2hhZG93IHJvb3QgaW5zaWRlIGEgd2ViIGNvbXBvbmVudCwgc2V0IHRoaXMgY29uZmlnIHRvIHRoZSBzaGFkb3dSb290LiBJZiBub3QgaW5zaWRlIGEgd2ViIGNvbXBvbmVudCwgc2V0IGl0IHRvIGBkb2N1bWVudC5ib2R5YFxuICAgICAqL1xuICAgIHJvb3RFbGVtZW50ID8gOiBTaGFkb3dSb290fEhUTUxFbGVtZW50XG4gICAgLyoqXG4gICAgICogVGhpcyBtYXkgYmUgY29uZmlndXJlZCBhcyBgdHJ1ZWAgdG8gbWFrZSB0aGUgd2lkZ2V0J3MgZWxlbWVudCB1c2UgdGhlIGBkaXJlY3Rpb246cnRsYCBzdHlsZS5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvUmVzb3VyY2VWaWV3I2NvbmZpZy1ydGwpXG4gICAgICovXG4gICAgcnRsID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogU3BlY2lmaWVzIHdoZXRoZXIgKGFuZCBvcHRpb25hbGx5IGluIHdoaWNoIGF4ZXMpIGEgV2lkZ2V0IG1heSBzY3JvbGwuIGB0cnVlYCBtZWFucyB0aGlzIHdpZGdldCBtYXkgc2Nyb2xsXG4gICAgICogaW4gYm90aCBheGVzLiBNYXkgYmUgYW4gb2JqZWN0IGNvbnRhaW5pbmcgYm9vbGVhbiBgb3ZlcmZsb3dYYCBhbmQgYG92ZXJmbG93WWAgcHJvcGVydGllcyB3aGljaCBhcmVcbiAgICAgKiBhcHBsaWVkIHRvIENTUyBzdHlsZSBwcm9wZXJ0aWVzIGBvdmVyZmxvd1hgIGFuZCBgb3ZlcmZsb3dZYC4gSWYgdGhleSBhcmUgYm9vbGVhbiwgdGhleSBhcmUgdHJhbnNsYXRlZCB0b1xuICAgICAqIENTUyBvdmVyZmxvdyBwcm9wZXJ0aWVzIHRodXM6XG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L1Jlc291cmNlVmlldyNjb25maWctc2Nyb2xsYWJsZSlcbiAgICAgKi9cbiAgICBzY3JvbGxhYmxlID8gOiBib29sZWFufFNjcm9sbGVyQ29uZmlnfFNjcm9sbGVyXG4gICAgLyoqXG4gICAgICogRGVmaW5lcyB3aGF0IHRvIGRvIGlmIGRvY3VtZW50IGlzIHNjcm9sbGVkIHdoaWxlIFdpZGdldCBpcyB2aXNpYmxlIChvbmx5IHJlbGV2YW50IHdoZW4gZmxvYXRpbmcgaXMgc2V0IHRvIGB0cnVlYCkuXG4gICAgICogVmFsaWQgdmFsdWVzOiDCtG51bGzCtDogZG8gbm90aGluZywgwrRoaWRlwrQ6IGhpZGUgdGhlIHdpZGdldCBvciDCtHJlYWxpZ27CtDogcmVhbGlnbiB0byB0aGUgdGFyZ2V0IGlmIHBvc3NpYmxlLlxuICAgICAqL1xuICAgIHNjcm9sbEFjdGlvbiA/IDogJ2hpZGUnfCdyZWFsaWduJ3xudWxsXG4gICAgLyoqXG4gICAgICogQSBidXR0b24gY29uZmlndXJhdGlvbiBvYmplY3QgdG8gdXNlIGZvciB0aGUgYXV0b21hdGljYWxseSBjcmVhdGVkIG1vZGUgc2VsZWN0b3IgYnV0dG9uIGZvciB0aGlzIG1vZGUuXG4gICAgICovXG4gICAgc2VsZWN0b3JCdXR0b24gPyA6IEJ1dHRvbkNvbmZpZ1xuICAgIC8qKlxuICAgICAqIEEgbWVudSBpdGVtIGNvbmZpZ3VyYXRpb24gb2JqZWN0IHRvIHVzZSBmb3IgdGhlIGF1dG9tYXRpY2FsbHkgY3JlYXRlZCBtb2RlIHNlbGVjdG9yIG1lbnUgaXRlbSBmb3IgdGhpcyBtb2RlLlxuICAgICAqL1xuICAgIHNlbGVjdG9yTWVudUl0ZW0gPyA6IE1lbnVJdGVtQ29uZmlnXG4gICAgLyoqXG4gICAgICogQSBbRGF0ZUhlbHBlcl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9Db3JlL2hlbHBlci9EYXRlSGVscGVyKSBmb3JtYXQgc3RyaW5nL2Z1bmN0aW9uIHRvIHVzZSB0byBjcmVhdGUgZGF0ZSBvdXRwdXQgZm9yXG4gICAgICogYWJicmV2aWF0ZWQgdmlldyBkZXNjcmlwdGlvbnMuXG4gICAgICogQHBhcmFtIHtEYXRlfSBkYXRlIFRoZSBkYXRlIHRvIGZvcm1hdC5cbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgZm9ybWF0dGVkIGRhdGUuXG4gICAgICovXG4gICAgc2hvcnREYXRlRm9ybWF0ID8gOiBzdHJpbmd8KChkYXRlOiBEYXRlKSA9PiBzdHJpbmcpXG4gICAgLyoqXG4gICAgICogQSBbRGF0ZUhlbHBlcl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9Db3JlL2hlbHBlci9EYXRlSGVscGVyKSBmb3JtYXQgc3RyaW5nL2Z1bmN0aW9uIHRvIHVzZSB0byBjcmVhdGUgZGF0ZSBhbmQgdGltZSBvdXRwdXQgZm9yXG4gICAgICogYWJicmV2aWF0ZWQgdmlldyBkZXNjcmlwdGlvbnMuXG4gICAgICogQHBhcmFtIHtEYXRlfSBkYXRlIFRoZSBkYXRlIHRvIGZvcm1hdC5cbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgZm9ybWF0dGVkIGRhdGUuXG4gICAgICovXG4gICAgc2hvcnREYXRlVGltZUZvcm1hdCA/IDogc3RyaW5nfCgoZGF0ZTogRGF0ZSkgPT4gc3RyaW5nKVxuICAgIC8qKlxuICAgICAqIFRoZSBjbGFzcyBuYW1lIHRvIGFkZCB0byBldmVudHMgd2hpY2ggaGF2ZSBkdXJhdGlvbiBsZXNzIHRoYW4gb3IgZXF1YWwgdG9cbiAgICAgKiBbc2hvcnRFdmVudER1cmF0aW9uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9taXhpbi9DYWxlbmRhck1peGluI2NvbmZpZy1zaG9ydEV2ZW50RHVyYXRpb24pLlxuICAgICAqL1xuICAgIHNob3J0RXZlbnRDbHMgPyA6IHN0cmluZ1xuICAgIC8qKlxuICAgICAqIFRoZSBkdXJhdGlvbiBhdCB3aGljaCBiZWxvdyBhbmQgZXF1YWwgdG8gdGhpcyB2YWx1ZSwgYW4gZXZlbnQncyBlbmNhcHN1bGF0aW5nIGVsZW1lbnQgZ2V0c1xuICAgICAqIHRoZSBbc2hvcnRFdmVudENsc10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvbWl4aW4vQ2FsZW5kYXJNaXhpbiNjb25maWctc2hvcnRFdmVudENscykgYWRkZWQgdG8gaXQgc28gdGhhdCBzbWFsbCBldmVudCBiYXJzIGNhbiBoYXZlIHN0eWxlIHJlYXJyYW5nZW1lbnRzLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9SZXNvdXJjZVZpZXcjY29uZmlnLXNob3J0RXZlbnREdXJhdGlvbilcbiAgICAgKi9cbiAgICBzaG9ydEV2ZW50RHVyYXRpb24gPyA6IHN0cmluZ3xudW1iZXJcbiAgICAvKipcbiAgICAgKiAqT25seSB2YWxpZCBpZiB0aGlzIFdpZGdldCBpcyBbZmxvYXRpbmddKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ29yZS93aWRnZXQvV2lkZ2V0I2NvbmZpZy1mbG9hdGluZykuKlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9SZXNvdXJjZVZpZXcjY29uZmlnLXNob3dBbmltYXRpb24pXG4gICAgICovXG4gICAgc2hvd0FuaW1hdGlvbiA/IDogYm9vbGVhbnxvYmplY3RcbiAgICAvKipcbiAgICAgKiBEaXNwbGF5IGFuIGF2YXRhciBpbiB0aGUgcmVzb3VyY2UgdmlldyBoZWFkZXJzLCBlaXRoZXIgYXMgYW4gaW1hZ2Ugb3IgdXNpbmcgcmVzb3VyY2UgaW5pdGlhbHMuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L1Jlc291cmNlVmlldyNjb25maWctc2hvd0F2YXRhcnMpXG4gICAgICovXG4gICAgc2hvd0F2YXRhcnMgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiA8c3Ryb25nPk5vdCBhcHBsaWNhYmxlIGluIGEgYERheVZpZXdgPC9zdHJvbmc+XG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L1Jlc291cmNlVmlldyNjb25maWctc2hvd0J1bGxldClcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGJhciBUaGlzIGlzIGBmYWxzZWAgYnkgZGVmYXVsdC4gU2V0IHRoaXMgdG8gYHRydWVgIGluIG1vZGVzIHdoZXJlIGEgc29saWQgZXZlbnQgYmFyIHNob3VsZCBzaG93IGEgYnVsbGV0IGljb25cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IG5vQmFyIFRoaXMgaXMgYHRydWVgIGJ5IGRlZmF1bHQuIEV2ZW50cyB3aXRoIG5vIGJhY2tncm91bmQgY29sb3VyLCB1c2UgdGhpcyB0byBzaG93IHRoZSBldmVudCdzIGRlZmluZWQgYGV2ZW50Q29sb3JgXG4gICAgICovXG4gICAgc2hvd0J1bGxldCA/IDogYm9vbGVhbnx7YmFyPzogYm9vbGVhbiwgbm9CYXI/OiBib29sZWFufVxuICAgIC8qKlxuICAgICAqIENvbmZpZ3VyZSBhcyBgdHJ1ZWAgdG8gc2hvdyBhdmF0YXJzIG9mIHRoZSBhc3NpZ25lZCByZXNvdXJjZXMgKGNhbGVuZGFycykgYXQgdGhlXG4gICAgICogc3RhcnQgb2YgdGhlIGV2ZW50IGJhci5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvUmVzb3VyY2VWaWV3I2NvbmZpZy1zaG93UmVzb3VyY2VBdmF0YXJzKVxuICAgICAqL1xuICAgIHNob3dSZXNvdXJjZUF2YXRhcnMgPyA6IGJvb2xlYW58c3RyaW5nXG4gICAgLyoqXG4gICAgICogU2V0IHRvIGBmYWxzZWAgdG8gbm90IHNob3cgdGhlIHRvb2x0aXAgd2hlbiB0aGlzIHdpZGdldCBpcyBbZGlzYWJsZWRdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ29yZS93aWRnZXQvV2lkZ2V0I3Byb3BlcnR5LWRpc2FibGVkKVxuICAgICAqL1xuICAgIHNob3dUb29sdGlwV2hlbkRpc2FibGVkID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogUHJvZ3JhbW1hdGljIGNvbnRyb2wgb3ZlciBob3cgbWFueSBjb2x1bW5zIHRvIHNwYW4gd2hlbiB1c2VkIGluIGEgZ3JpZCBsYXlvdXQuXG4gICAgICovXG4gICAgc3BhbiA/IDogbnVtYmVyXG4gICAgLyoqXG4gICAgICogQnkgZGVmYXVsdCwgdGhlIHJlc291cmNlIHZpZXdzIGFyZSBkaXNwbGF5ZWQgaW4gdGhlIG9yZGVyIHRoYXQgdGhlIHJlc291cmNlcyBhcHBlYXJcbiAgICAgKiBpbiB0aGUgcHJvamVjdCdzIGByZXNvdXJjZVN0b3JlYCwgc28gdGhleSB3aWxsIGFwcGVhciBpbiBhIHN0YWJsZSBwb3NpdGlvbiwgbWVhbmluZ1xuICAgICAqIHdoZW4gYSB2aWV3IGlzIGZpbHRlcmVkIG91dCwgdGhlbiBmaWx0ZXJpbmcgaXQgaW4gd2lsbCByZXBsYWNlIGl0IGluIHRoZSBzYW1lIHBvc2l0aW9uLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9SZXNvdXJjZVZpZXcjY29uZmlnLXN0YWJsZVJlc291cmNlT3JkZXIpXG4gICAgICovXG4gICAgc3RhYmxlUmVzb3VyY2VPcmRlciA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIFRoaXMgdmFsdWUgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nOlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9SZXNvdXJjZVZpZXcjY29uZmlnLXN0YXRlZnVsKVxuICAgICAqL1xuICAgIHN0YXRlZnVsID8gOiBib29sZWFufG9iamVjdHxzdHJpbmdbXVxuICAgIC8qKlxuICAgICAqIFRoZSBldmVudHMgdGhhdCwgd2hlbiBmaXJlZCBieSB0aGlzIGNvbXBvbmVudCwgc2hvdWxkIHRyaWdnZXIgaXQgdG8gc2F2ZSBpdHMgc3RhdGUgYnkgY2FsbGluZ1xuICAgICAqIFtzYXZlU3RhdGVdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ29yZS9taXhpbi9TdGF0ZSNmdW5jdGlvbi1zYXZlU3RhdGUpLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9SZXNvdXJjZVZpZXcjY29uZmlnLXN0YXRlZnVsRXZlbnRzKVxuICAgICAqL1xuICAgIHN0YXRlZnVsRXZlbnRzID8gOiBvYmplY3R8c3RyaW5nW11cbiAgICAvKipcbiAgICAgKiBUaGUga2V5IHRvIHVzZSB3aGVuIHNhdmluZyB0aGlzIG9iamVjdCdzIHN0YXRlIGluIHRoZSBbc3RhdGVQcm92aWRlcl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9Db3JlL21peGluL1N0YXRlI2NvbmZpZy1zdGF0ZVByb3ZpZGVyKS4gSWYgdGhpcyBjb25maWcgaXNcbiAgICAgKiBub3QgYXNzaWduZWQsIGFuZCBbc3RhdGVmdWxdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ29yZS9taXhpbi9TdGF0ZSNjb25maWctc3RhdGVmdWwpIGlzIG5vdCBzZXQgdG8gYGZhbHNlYCwgdGhlIFtpZF0oI0NvcmUvd2lkZ2V0L1dpZGdldCNjb25maWctaWQpXG4gICAgICogKGlmIGV4cGxpY2l0bHkgc3BlY2lmaWVkKSB3aWxsIGJlIHVzZWQgYXMgdGhlIGBzdGF0ZUlkYC5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvUmVzb3VyY2VWaWV3I2NvbmZpZy1zdGF0ZUlkKVxuICAgICAqL1xuICAgIHN0YXRlSWQgPyA6IHN0cmluZ1xuICAgIC8qKlxuICAgICAqIFRoZSBgU3RhdGVQcm92aWRlcmAgdG8gdXNlIHRvIHNhdmUgYW5kIHJlc3RvcmUgdGhpcyBvYmplY3QncyBbc3RhdGVdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ29yZS9taXhpbi9TdGF0ZSNwcm9wZXJ0eS1zdGF0ZSkuIEJ5IGRlZmF1bHQsIGBzdGF0ZWBcbiAgICAgKiB3aWxsIGJlIHNhdmVkIHVzaW5nIHRoZSBbZGVmYXVsdCBzdGF0ZSBwcm92aWRlcl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9Db3JlL3N0YXRlL1N0YXRlUHJvdmlkZXIjcHJvcGVydHktaW5zdGFuY2Utc3RhdGljKS5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvUmVzb3VyY2VWaWV3I2NvbmZpZy1zdGF0ZVByb3ZpZGVyKVxuICAgICAqL1xuICAgIHN0YXRlUHJvdmlkZXIgPyA6IFN0YXRlUHJvdmlkZXJcbiAgICAvKipcbiAgICAgKiBTcGVjaWZ5IGB0cnVlYCB0byBtYXRjaCBmaWVsZHMgYnkgdGhlaXIgYG5hbWVgIHByb3BlcnR5IG9ubHkgd2hlbiBhc3NpZ25pbmcgYSBbcmVjb3JkXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L0NvbnRhaW5lciNjb25maWctcmVjb3JkKSxcbiAgICAgKiB3aXRob3V0IGZhbGxpbmcgYmFjayB0byBgcmVmYC5cbiAgICAgKi9cbiAgICBzdHJpY3RSZWNvcmRNYXBwaW5nID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogQW4gb2JqZWN0IGNvbnRhaW5pbmcgd2lkZ2V0cyBrZXllZCBieSBuYW1lLiBCeSBkZWZhdWx0ICh3aGVuIG5vIGB0eXBlYCBpcyBnaXZlbiksIHN0cmlwcyBhcmVcbiAgICAgKiBbdG9vbGJhcnNdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ29yZS93aWRnZXQvVG9vbGJhcikuIElmIHlvdSB3YW50IHRvIHBhc3MgYW4gYXJyYXksIHlvdSBjYW4gdXNlXG4gICAgICogdGhlIHRvb2xiYXIncyBbaXRlbXNdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ29yZS93aWRnZXQvQ29udGFpbmVyI2NvbmZpZy1pdGVtcykuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L1Jlc291cmNlVmlldyNjb25maWctc3RyaXBzKVxuICAgICAqL1xuICAgIHN0cmlwcyA/IDogUmVjb3JkPHN0cmluZywgQ2FsZW5kYXJDb250YWluZXJJdGVtQ29uZmlnPlxuICAgIC8qKlxuICAgICAqIFRoZSBjb252ZXJzZSBvZiBbc3luY1ZpZXdEYXRlXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9taXhpbi9DYWxlbmRhck1peGluI3Byb3BlcnR5LXN5bmNWaWV3RGF0ZSlcbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvUmVzb3VyY2VWaWV3I2NvbmZpZy1zeW5jQ2FsZW5kYXJEYXRlKVxuICAgICAqL1xuICAgIHN5bmNDYWxlbmRhckRhdGUgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBUaGUgY29udmVyc2Ugb2YgW3N5bmNDYWxlbmRhckRhdGVdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L21peGluL0NhbGVuZGFyTWl4aW4jcHJvcGVydHktc3luY0NhbGVuZGFyRGF0ZSlcbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvUmVzb3VyY2VWaWV3I2NvbmZpZy1zeW5jVmlld0RhdGUpXG4gICAgICovXG4gICAgc3luY1ZpZXdEYXRlID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogQSBjb25maWd1cmF0aW9uIGZvciB0aGUgW3RhYl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9Db3JlL3dpZGdldC9UYWIpIGNyZWF0ZWQgZm9yIHRoaXMgd2lkZ2V0IHdoZW4gaXQgaXMgcGxhY2VkIGluIGFcbiAgICAgKiBbVGFiUGFuZWxdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ29yZS93aWRnZXQvVGFiUGFuZWwpLiBGb3IgZXhhbXBsZSwgdGhpcyBjb25maWcgY2FuIGJlIHVzZWQgdG8gY29udHJvbCB0aGUgaWNvbiBvZiB0aGUgYHRhYmAgZm9yXG4gICAgICogdGhpcyB3aWRnZXQ6XG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L1Jlc291cmNlVmlldyNjb25maWctdGFiKVxuICAgICAqL1xuICAgIHRhYiA/IDogYm9vbGVhbnxUYWJDb25maWdcbiAgICAvKipcbiAgICAgKiBXaGVuIHRoaXMgY29udGFpbmVyIGlzIHVzZWQgYXMgYSB0YWIgaW4gYSBUYWJQYW5lbCwgdGhlc2UgaXRlbXMgYXJlIGFkZGVkIHRvIHRoZVxuICAgICAqIFtUYWJCYXJdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ29yZS93aWRnZXQvVGFiQmFyKSB3aGVuIHRoaXMgY29udGFpbmVyIGlzIHRoZSBhY3RpdmUgdGFiLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9SZXNvdXJjZVZpZXcjY29uZmlnLXRhYkJhckl0ZW1zKVxuICAgICAqL1xuICAgIHRhYkJhckl0ZW1zID8gOiBUb29sYmFySXRlbXNbXXxXaWRnZXRbXVxuICAgIC8qKlxuICAgICAqIFRoZSB0YWcgbmFtZSBvZiB0aGlzIFdpZGdldCdzIHJvb3QgZWxlbWVudFxuICAgICAqL1xuICAgIHRhZyA/IDogc3RyaW5nXG4gICAgLyoqXG4gICAgICogQSBDb25maWcgb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgY29uZmlndXJhdGlvbiBvZiBhIFtUb29sYmFyXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1Rvb2xiYXIpLFxuICAgICAqIG9yIGFycmF5IG9mIGNvbmZpZyBvYmplY3RzIHJlcHJlc2VudGluZyB0aGUgY2hpbGQgaXRlbXMgb2YgYSBUb29sYmFyLlxuICAgICAqIFRoaXMgY3JlYXRlcyBhIHRvb2xiYXIgZG9ja2VkIHRvIHRoZSB0b3Agb2YgdGhlIHBhbmVsIGltbWVkaWF0ZWx5IGJlbG93IHRoZSBoZWFkZXIuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L1Jlc291cmNlVmlldyNjb25maWctdGJhcilcbiAgICAgKi9cbiAgICB0YmFyID8gOiAoQ2FsZW5kYXJDb250YWluZXJJdGVtQ29uZmlnfHN0cmluZylbXXxUb29sYmFyQ29uZmlnfFBhZ2luZ1Rvb2xiYXJDb25maWd8bnVsbFxuICAgIC8qKlxuICAgICAqIFRleHQgYWxpZ25tZW50OiAnbGVmdCcsICdjZW50ZXInIG9yICdyaWdodCcuIEFsc28gYWNjZXB0cyBkaXJlY3Rpb24gbmV1dHJhbCAnc3RhcnQnIGFuZCAnZW5kJy5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvUmVzb3VyY2VWaWV3I2NvbmZpZy10ZXh0QWxpZ24pXG4gICAgICovXG4gICAgdGV4dEFsaWduID8gOiAnbGVmdCd8J2NlbnRlcid8J3JpZ2h0J3wnc3RhcnQnfCdlbmQnXG4gICAgLyoqXG4gICAgICogQSBbRGF0ZUhlbHBlcl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9Db3JlL2hlbHBlci9EYXRlSGVscGVyKSBmb3JtYXQgc3RyaW5nL2Z1bmN0aW9uIHVzZWQgdG8gZm9ybWF0IHRoZSB0aW1lIGRpc3BsYXllZCBpbiBldmVudHNcbiAgICAgKiBAcGFyYW0ge0RhdGV9IGRhdGUgVGhlIGRhdGUgdG8gZm9ybWF0LlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBmb3JtYXR0ZWQgZGF0ZS5cbiAgICAgKi9cbiAgICB0aW1lRm9ybWF0ID8gOiBzdHJpbmd8KChkYXRlOiBEYXRlKSA9PiBzdHJpbmcpXG4gICAgLyoqXG4gICAgICogQSB0aXRsZSB0byBkaXNwbGF5IGluIHRoZSBoZWFkZXIgb3Igb3duaW5nIFRhYlBhbmVsLiBDYXVzZXMgY3JlYXRpb24gYW5kIGRvY2tpbmcgb2YgYSBoZWFkZXJcbiAgICAgKiB0byB0aGUgdG9wIGlmIG5vIGhlYWRlciBpcyBjb25maWd1cmVkLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9SZXNvdXJjZVZpZXcjY29uZmlnLXRpdGxlKVxuICAgICAqL1xuICAgIHRpdGxlID8gOiBzdHJpbmdcbiAgICAvKipcbiAgICAgKiBUaGUgW3Rvb2xzXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1Rvb2wpIHRvIGFkZCBlaXRoZXIgYmVmb3JlIG9yIGFmdGVyIHRoZSBgdGl0bGVgIGluIHRoZSBQYW5lbCBoZWFkZXIuIEVhY2hcbiAgICAgKiBwcm9wZXJ0eSBuYW1lIGlzIHRoZSByZWZlcmVuY2UgYnkgd2hpY2ggYW4gaW5zdGFudGlhdGVkIHRvb2wgbWF5IGJlIHJldHJpZXZlZCBmcm9tIHRoZSBsaXZlXG4gICAgICogYFt0b29sc10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9Db3JlL3dpZGdldC9taXhpbi9Ub29sYWJsZSNwcm9wZXJ0eS10b29scylgIHByb3BlcnR5LlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9SZXNvdXJjZVZpZXcjY29uZmlnLXRvb2xzKVxuICAgICAqL1xuICAgIHRvb2xzID8gOiBSZWNvcmQ8c3RyaW5nLCBUb29sQ29uZmlnPnxudWxsXG4gICAgLyoqXG4gICAgICogVG9vbHRpcCBmb3IgdGhlIHdpZGdldCwgZWl0aGVyIGFzIGEgc3RyaW5nIG9yIGFzIGEgVG9vbHRpcCBjb25maWcgb2JqZWN0LlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9SZXNvdXJjZVZpZXcjY29uZmlnLXRvb2x0aXApXG4gICAgICovXG4gICAgdG9vbHRpcCA/IDogc3RyaW5nfFRvb2x0aXBDb25maWd8bnVsbFxuICAgIC8qKlxuICAgICAqIEJ5IGRlZmF1bHQsIHRhYmJpbmcgd2l0aGluIGEgUGFuZWwgaXMgbm90IGNvbnRhaW5lZCwgaWUgeW91IGNhbiBUQUIgb3V0IG9mIHRoZSBQYW5lbFxuICAgICAqIGZvcndhcmRzIG9yIGJhY2t3YXJkcy5cbiAgICAgKiBDb25maWd1cmUgdGhpcyBhcyBgdHJ1ZWAgdG8gZGlzYWxsb3cgdGFiYmluZyBvdXQgb2YgdGhlIFBhbmVsLCBhbmQgbWFrZSB0YWJiaW5nIGNpcmN1bGFyIHdpdGhpbiB0aGlzIFBhbmVsLlxuICAgICAqL1xuICAgIHRyYXBGb2N1cyA/IDogYm9vbGVhblxuICAgIHR5cGUgPyA6ICdyZXNvdXJjZXZpZXcnfCdyZXNvdXJjZSdcbiAgICAvKipcbiAgICAgKiBDdXN0b20gQ1NTIGNsYXNzIG5hbWUgc3VmZml4ZXMgdG8gYXBwbHkgdG8gdGhlIGVsZW1lbnRzIHJlbmRlcmVkIGJ5IHRoaXMgd2lkZ2V0LiBUaGlzIG1heSBiZSBzcGVjaWZpZWRcbiAgICAgKiBhcyBhIHNwYWNlIHNlcGFyYXRlZCBzdHJpbmcsIGFuIGFycmF5IG9mIHN0cmluZ3MsIG9yIGFzIGFuIG9iamVjdCBpbiB3aGljaCBwcm9wZXJ0eSBuYW1lcyB3aXRoIHRydXRoeVxuICAgICAqIHZhbHVlcyBhcmUgdXNlZCBhcyB0aGUgY2xhc3MgbmFtZXMuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L1Jlc291cmNlVmlldyNjb25maWctdWkpXG4gICAgICovXG4gICAgdWkgPyA6ICdwbGFpbid8J3Rvb2xiYXInfHN0cmluZ3xvYmplY3RcbiAgICAvKipcbiAgICAgKiBBIGNvbmZpZyBvYmplY3QgdXNlZCB0byBjb25maWd1cmUgdGhlIHN1YiB2aWV3cy4gVGhlIGRlZmF1bHQgYHR5cGVgIHVzZWQgaXMgYCd3ZWVrdmlldydgXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L1Jlc291cmNlVmlldyNjb25maWctdmlldylcbiAgICAgKi9cbiAgICB2aWV3ID8gOiBDYWxlbmRhckNvbnRhaW5lckl0ZW1Db25maWd8UmVjb3JkPHN0cmluZywgYW55PlxuICAgIC8qKlxuICAgICAqIFRoZSBzcGFjZSB0byBsZWF2ZSBiZXR3ZWVuIGVhY2ggc3Vidmlldy5cbiAgICAgKi9cbiAgICB2aWV3R2FwID8gOiBzdHJpbmd8bnVtYmVyXG4gICAgLyoqXG4gICAgICogVGhlIHdlZWsgc3RhcnQgZGF5LCAwIG1lYW5pbmcgU3VuZGF5LCA2IG1lYW5pbmcgU2F0dXJkYXkuXG4gICAgICogRGVmYXVsdHMgdG8gW3dlZWtTdGFydERheV0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9Db3JlL2hlbHBlci9EYXRlSGVscGVyI3Byb3BlcnR5LXdlZWtTdGFydERheS1zdGF0aWMpLlxuICAgICAqL1xuICAgIHdlZWtTdGFydERheSA/IDogbnVtYmVyXG4gICAgLyoqXG4gICAgICogQSB3aWRnZXRzIHdlaWdodCBkZXRlcm1pbmVzIGl0cyBwb3NpdGlvbiBhbW9uZyBzaWJsaW5ncyB3aGVuIGFkZGVkIHRvIGEgW0NvbnRhaW5lcl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9Db3JlL3dpZGdldC9Db250YWluZXIpLlxuICAgICAqIEhpZ2hlciB3ZWlnaHRzIGdvIGZ1cnRoZXIgZG93bi5cbiAgICAgKi9cbiAgICB3ZWlnaHQgPyA6IG51bWJlclxuICAgIC8qKlxuICAgICAqIFdpZGdldCdzIHdpZHRoLCB1c2VkIHRvIHNldCBlbGVtZW50IGBzdHlsZS53aWR0aGAuIEVpdGhlciBzcGVjaWZ5IGEgdmFsaWQgd2lkdGggc3RyaW5nIG9yIGEgbnVtYmVyLCB3aGljaFxuICAgICAqIHdpbGwgZ2V0ICdweCcgYXBwZW5kZWQuIFdlIHJlY29tbWVuZCB1c2luZyBDU1MgYXMgdGhlIHByaW1hcnkgd2F5IHRvIGNvbnRyb2wgd2lkdGgsIGJ1dCBpbiBzb21lIGNhc2VzXG4gICAgICogdGhpcyBjb25maWcgaXMgY29udmVuaWVudC5cbiAgICAgKi9cbiAgICB3aWR0aCA/IDogc3RyaW5nfG51bWJlclxuICAgIC8qKlxuICAgICAqIFRoZSB4IHBvc2l0aW9uIGZvciB0aGUgd2lkZ2V0LlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9SZXNvdXJjZVZpZXcjY29uZmlnLXgpXG4gICAgICovXG4gICAgeCA/IDogbnVtYmVyXG4gICAgLyoqXG4gICAgICogVGhlIHkgcG9zaXRpb24gZm9yIHRoZSB3aWRnZXQuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L1Jlc291cmNlVmlldyNjb25maWcteSlcbiAgICAgKi9cbiAgICB5ID8gOiBudW1iZXJcblxufVxuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvciA6ICdicnludHVtLXJlc291cmNlLXZpZXcnLFxuICAgIHRlbXBsYXRlIDogJydcbn0pXG5leHBvcnQgY2xhc3MgQnJ5bnR1bVJlc291cmNlVmlld0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcblxuICAgIHB1YmxpYyBzdGF0aWMgaW5zdGFuY2VDbGFzcyA9IFJlc291cmNlVmlldztcblxuICAgIHB1YmxpYyBzdGF0aWMgaW5zdGFuY2VOYW1lID0gJ1Jlc291cmNlVmlldyc7XG5cbiAgICBwcml2YXRlIHN0YXRpYyBicnludHVtRXZlbnRzOiBzdHJpbmdbXSA9IFtcbiAgICAgICAgJ29uQmVmb3JlQXV0b0NyZWF0ZScsXG4gICAgICAgICdvbkJlZm9yZUNoYW5nZURhdGUnLFxuICAgICAgICAnb25CZWZvcmVEZXN0cm95JyxcbiAgICAgICAgJ29uQmVmb3JlSGlkZScsXG4gICAgICAgICdvbkJlZm9yZVJlc3BvbnNpdmVTdGF0ZUNoYW5nZScsXG4gICAgICAgICdvbkJlZm9yZVNldFJlY29yZCcsXG4gICAgICAgICdvbkJlZm9yZVNob3cnLFxuICAgICAgICAnb25CZWZvcmVTdGF0ZUFwcGx5JyxcbiAgICAgICAgJ29uQmVmb3JlU3RhdGVTYXZlJyxcbiAgICAgICAgJ29uQ2F0Y2hBbGwnLFxuICAgICAgICAnb25Db2xsYXBzZScsXG4gICAgICAgICdvbkRlc3Ryb3knLFxuICAgICAgICAnb25EaXJ0eVN0YXRlQ2hhbmdlJyxcbiAgICAgICAgJ29uRWxlbWVudENyZWF0ZWQnLFxuICAgICAgICAnb25FdmVudEF1dG9DcmVhdGVkJyxcbiAgICAgICAgJ29uRXhwYW5kJyxcbiAgICAgICAgJ29uRm9jdXNJbicsXG4gICAgICAgICdvbkZvY3VzT3V0JyxcbiAgICAgICAgJ29uSGlkZScsXG4gICAgICAgICdvblBhaW50JyxcbiAgICAgICAgJ29uUmVhZE9ubHknLFxuICAgICAgICAnb25SZWNvbXBvc2UnLFxuICAgICAgICAnb25SZWZyZXNoJyxcbiAgICAgICAgJ29uUmVzaXplJyxcbiAgICAgICAgJ29uUmVzcG9uc2l2ZVN0YXRlQ2hhbmdlJyxcbiAgICAgICAgJ29uU2hvdycsXG4gICAgICAgICdvblRvb2xDbGljaycsXG4gICAgICAgICdvblZpZXdDcmVhdGUnXG4gICAgXTtcblxuICAgIHByaXZhdGUgc3RhdGljIGJyeW50dW1GZWF0dXJlTmFtZXM6IHN0cmluZ1tdID0gW1xuXG4gICAgXTtcblxuICAgIHByaXZhdGUgc3RhdGljIGJyeW50dW1Db25maWdzOiBzdHJpbmdbXSA9IEJyeW50dW1SZXNvdXJjZVZpZXdDb21wb25lbnQuYnJ5bnR1bUZlYXR1cmVOYW1lcy5jb25jYXQoW1xuICAgICAgICAnYWN0aXZhdGlvbktleScsXG4gICAgICAgICdhZG9wdCcsXG4gICAgICAgICdhbGlnbicsXG4gICAgICAgICdhbGlnblNlbGYnLFxuICAgICAgICAnYWxsb3dEcmFnQ3JlYXRlJyxcbiAgICAgICAgJ2FsbG93RHJhZ01vdmUnLFxuICAgICAgICAnYWxsb3dEcmFnUmVzaXplJyxcbiAgICAgICAgJ2FuY2hvcicsXG4gICAgICAgICdhbmltYXRlVGltZVNoaWZ0JyxcbiAgICAgICAgJ2FwcGVuZFRvJyxcbiAgICAgICAgJ2FyaWFEZXNjcmlwdGlvbicsXG4gICAgICAgICdhcmlhTGFiZWwnLFxuICAgICAgICAnYXV0b0NyZWF0ZScsXG4gICAgICAgICdiYmFyJyxcbiAgICAgICAgJ2JvZHlDbHMnLFxuICAgICAgICAnYnViYmxlRXZlbnRzJyxcbiAgICAgICAgJ2NhbGxPbkZ1bmN0aW9ucycsXG4gICAgICAgICdjYXRjaEV2ZW50SGFuZGxlckV4Y2VwdGlvbnMnLFxuICAgICAgICAnY2VudGVyZWQnLFxuICAgICAgICAnY2xzJyxcbiAgICAgICAgJ2NvbGxhcHNlZCcsXG4gICAgICAgICdjb2xsYXBzaWJsZScsXG4gICAgICAgICdjb2xvcicsXG4gICAgICAgICdjb2x1bW4nLFxuICAgICAgICAnY29uZmlnJyxcbiAgICAgICAgJ2NvbnN0cmFpblRvJyxcbiAgICAgICAgJ2NvbnRlbnRFbGVtZW50Q2xzJyxcbiAgICAgICAgJ2RhdGFGaWVsZCcsXG4gICAgICAgICdkYXRhc2V0JyxcbiAgICAgICAgJ2RhdGVGb3JtYXQnLFxuICAgICAgICAnZGF0ZVNlcGFyYXRvcicsXG4gICAgICAgICdkZWZhdWx0QmluZFByb3BlcnR5JyxcbiAgICAgICAgJ2RlZmF1bHRGb2N1cycsXG4gICAgICAgICdkZWZhdWx0cycsXG4gICAgICAgICdkZWZhdWx0U2Nyb2xsT3B0aW9ucycsXG4gICAgICAgICdkZXNjcmlwdGlvbkZvcm1hdCcsXG4gICAgICAgICdkZXNjcmlwdGlvblJlbmRlcmVyJyxcbiAgICAgICAgJ2RldGVjdENTU0NvbXBhdGliaWxpdHlJc3N1ZXMnLFxuICAgICAgICAnZGlzYWJsZWQnLFxuICAgICAgICAnZG9jaycsXG4gICAgICAgICdkcmFnZ2FibGUnLFxuICAgICAgICAnZHJhZ1VuaXQnLFxuICAgICAgICAnZHJhd2VyJyxcbiAgICAgICAgJ2VsZW1lbnRBdHRyaWJ1dGVzJyxcbiAgICAgICAgJ2V2ZW50SGVhZGVyUmVuZGVyZXInLFxuICAgICAgICAnZXZlbnRIZWlnaHQnLFxuICAgICAgICAnZXZlbnRSZW5kZXJlcicsXG4gICAgICAgICdldmVudFNvcnRlcicsXG4gICAgICAgICdleHRlbmRBbGxEYXlFbmREYXknLFxuICAgICAgICAnZXh0cmFEYXRhJyxcbiAgICAgICAgJ2ZpbHRlckV2ZW50UmVzb3VyY2VzJyxcbiAgICAgICAgJ2ZsZXgnLFxuICAgICAgICAnZmxvYXRpbmcnLFxuICAgICAgICAnZm9vdGVyJyxcbiAgICAgICAgJ2dldFByaW1hcnlSZXNvdXJjZScsXG4gICAgICAgICdoZWFkZXInLFxuICAgICAgICAnaGVpZ2h0JyxcbiAgICAgICAgJ2hpZGRlbicsXG4gICAgICAgICdoaWRlQW5pbWF0aW9uJyxcbiAgICAgICAgJ2hpZGVOb25Xb3JraW5nRGF5cycsXG4gICAgICAgICdoaWRlV2hlbkVtcHR5JyxcbiAgICAgICAgJ2ljb24nLFxuICAgICAgICAnaWQnLFxuICAgICAgICAnaWdub3JlUGFyZW50UmVhZE9ubHknLFxuICAgICAgICAnaW5jbHVkZVRpbWVSYW5nZXMnLFxuICAgICAgICAnaW5wdXRGaWVsZEFsaWduJyxcbiAgICAgICAgJ2luc2VydEJlZm9yZScsXG4gICAgICAgICdpbnNlcnRGaXJzdCcsXG4gICAgICAgICdpdGVtQ2xzJyxcbiAgICAgICAgJ2l0ZW1zJyxcbiAgICAgICAgJ2tleU1hcCcsXG4gICAgICAgICdsYWJlbFBvc2l0aW9uJyxcbiAgICAgICAgJ2xheW91dCcsXG4gICAgICAgICdsYXlvdXRTdHlsZScsXG4gICAgICAgICdsYXp5SXRlbXMnLFxuICAgICAgICAnbGlzdGVuZXJzJyxcbiAgICAgICAgJ2xvY2FsZUNsYXNzJyxcbiAgICAgICAgJ2xvY2FsaXphYmxlJyxcbiAgICAgICAgJ2xvY2FsaXphYmxlUHJvcGVydGllcycsXG4gICAgICAgICdtYXJnaW4nLFxuICAgICAgICAnbWFza0RlZmF1bHRzJyxcbiAgICAgICAgJ21hc2tlZCcsXG4gICAgICAgICdtYXhEYXRlJyxcbiAgICAgICAgJ21heEhlaWdodCcsXG4gICAgICAgICdtYXhpbWl6ZU9uTW9iaWxlJyxcbiAgICAgICAgJ21heFdpZHRoJyxcbiAgICAgICAgJ21ldGEnLFxuICAgICAgICAnbWluRGF0ZScsXG4gICAgICAgICdtaW5IZWlnaHQnLFxuICAgICAgICAnbWluV2lkdGgnLFxuICAgICAgICAnbW9uaXRvclJlc2l6ZScsXG4gICAgICAgICduYW1lZEl0ZW1zJyxcbiAgICAgICAgJ25vbldvcmtpbmdEYXlzJyxcbiAgICAgICAgJ293bmVyJyxcbiAgICAgICAgJ3Bhc3RFdmVudENscycsXG4gICAgICAgICdwb3NpdGlvbmVkJyxcbiAgICAgICAgJ3ByZXZlbnRUb29sdGlwT25Ub3VjaCcsXG4gICAgICAgICdyYW5nZScsXG4gICAgICAgICdyZWFkT25seScsXG4gICAgICAgICdyZWxheVN0b3JlRXZlbnRzJyxcbiAgICAgICAgJ3JlbmRpdGlvbicsXG4gICAgICAgICdyZXNvdXJjZUltYWdlUGF0aCcsXG4gICAgICAgICdyZXNvdXJjZVdpZHRoJyxcbiAgICAgICAgJ3Jlc3BvbnNpdmUnLFxuICAgICAgICAncmVzcG9uc2l2ZVJvb3QnLFxuICAgICAgICAncmVzcG9uc2l2ZVN0YXRlJyxcbiAgICAgICAgJ3Jlc3BvbnNpdmVUYXJnZXQnLFxuICAgICAgICAncmlwcGxlJyxcbiAgICAgICAgJ3Jvb3RFbGVtZW50JyxcbiAgICAgICAgJ3J0bCcsXG4gICAgICAgICdzY3JvbGxhYmxlJyxcbiAgICAgICAgJ3Njcm9sbEFjdGlvbicsXG4gICAgICAgICdzZWxlY3RvckJ1dHRvbicsXG4gICAgICAgICdzZWxlY3Rvck1lbnVJdGVtJyxcbiAgICAgICAgJ3Nob3J0RGF0ZUZvcm1hdCcsXG4gICAgICAgICdzaG9ydERhdGVUaW1lRm9ybWF0JyxcbiAgICAgICAgJ3Nob3J0RXZlbnRDbHMnLFxuICAgICAgICAnc2hvcnRFdmVudER1cmF0aW9uJyxcbiAgICAgICAgJ3Nob3dBbmltYXRpb24nLFxuICAgICAgICAnc2hvd0F2YXRhcnMnLFxuICAgICAgICAnc2hvd0J1bGxldCcsXG4gICAgICAgICdzaG93UmVzb3VyY2VBdmF0YXJzJyxcbiAgICAgICAgJ3Nob3dUb29sdGlwV2hlbkRpc2FibGVkJyxcbiAgICAgICAgJ3NwYW4nLFxuICAgICAgICAnc3RhYmxlUmVzb3VyY2VPcmRlcicsXG4gICAgICAgICdzdGF0ZWZ1bCcsXG4gICAgICAgICdzdGF0ZWZ1bEV2ZW50cycsXG4gICAgICAgICdzdGF0ZUlkJyxcbiAgICAgICAgJ3N0YXRlUHJvdmlkZXInLFxuICAgICAgICAnc3RyaWN0UmVjb3JkTWFwcGluZycsXG4gICAgICAgICdzdHJpcHMnLFxuICAgICAgICAnc3luY0NhbGVuZGFyRGF0ZScsXG4gICAgICAgICdzeW5jVmlld0RhdGUnLFxuICAgICAgICAndGFiJyxcbiAgICAgICAgJ3RhYkJhckl0ZW1zJyxcbiAgICAgICAgJ3RhZycsXG4gICAgICAgICd0YmFyJyxcbiAgICAgICAgJ3RleHRBbGlnbicsXG4gICAgICAgICd0aW1lRm9ybWF0JyxcbiAgICAgICAgJ3RpdGxlJyxcbiAgICAgICAgJ3Rvb2xzJyxcbiAgICAgICAgJ3Rvb2x0aXAnLFxuICAgICAgICAndHJhcEZvY3VzJyxcbiAgICAgICAgJ3R5cGUnLFxuICAgICAgICAndWknLFxuICAgICAgICAndmlldycsXG4gICAgICAgICd2aWV3R2FwJyxcbiAgICAgICAgJ3dlZWtTdGFydERheScsXG4gICAgICAgICd3ZWlnaHQnLFxuICAgICAgICAnd2lkdGgnLFxuICAgICAgICAneCcsXG4gICAgICAgICd5J1xuICAgIF0pO1xuXG4gICAgcHJpdmF0ZSBzdGF0aWMgYnJ5bnR1bUNvbmZpZ3NPbmx5OiBzdHJpbmdbXSA9IFtcbiAgICAgICAgJ2FjdGl2YXRpb25LZXknLFxuICAgICAgICAnYWRvcHQnLFxuICAgICAgICAnYWxpZ24nLFxuICAgICAgICAnYW5jaG9yJyxcbiAgICAgICAgJ2FyaWFEZXNjcmlwdGlvbicsXG4gICAgICAgICdhcmlhTGFiZWwnLFxuICAgICAgICAnYmJhcicsXG4gICAgICAgICdib2R5Q2xzJyxcbiAgICAgICAgJ2J1YmJsZUV2ZW50cycsXG4gICAgICAgICdjZW50ZXJlZCcsXG4gICAgICAgICdjb2xsYXBzaWJsZScsXG4gICAgICAgICdjb2xvcicsXG4gICAgICAgICdjb25maWcnLFxuICAgICAgICAnY29uc3RyYWluVG8nLFxuICAgICAgICAnY29udGVudEVsZW1lbnRDbHMnLFxuICAgICAgICAnZGF0YUZpZWxkJyxcbiAgICAgICAgJ2RlZmF1bHRCaW5kUHJvcGVydHknLFxuICAgICAgICAnZGVmYXVsdEZvY3VzJyxcbiAgICAgICAgJ2RlZmF1bHRzJyxcbiAgICAgICAgJ2Rlc2NyaXB0aW9uUmVuZGVyZXInLFxuICAgICAgICAnZGV0ZWN0Q1NTQ29tcGF0aWJpbGl0eUlzc3VlcycsXG4gICAgICAgICdkb2NrJyxcbiAgICAgICAgJ2RyYWdnYWJsZScsXG4gICAgICAgICdkcmF3ZXInLFxuICAgICAgICAnZWxlbWVudEF0dHJpYnV0ZXMnLFxuICAgICAgICAnZXZlbnRIZWFkZXJSZW5kZXJlcicsXG4gICAgICAgICdldmVudEhlaWdodCcsXG4gICAgICAgICdldmVudFJlbmRlcmVyJyxcbiAgICAgICAgJ2V2ZW50U29ydGVyJyxcbiAgICAgICAgJ2Zsb2F0aW5nJyxcbiAgICAgICAgJ2Zvb3RlcicsXG4gICAgICAgICdnZXRQcmltYXJ5UmVzb3VyY2UnLFxuICAgICAgICAnaGVhZGVyJyxcbiAgICAgICAgJ2hpZGVBbmltYXRpb24nLFxuICAgICAgICAnaGlkZVdoZW5FbXB0eScsXG4gICAgICAgICdpY29uJyxcbiAgICAgICAgJ2lnbm9yZVBhcmVudFJlYWRPbmx5JyxcbiAgICAgICAgJ2luY2x1ZGVUaW1lUmFuZ2VzJyxcbiAgICAgICAgJ2l0ZW1DbHMnLFxuICAgICAgICAnbGF6eUl0ZW1zJyxcbiAgICAgICAgJ2xpc3RlbmVycycsXG4gICAgICAgICdsb2NhbGVDbGFzcycsXG4gICAgICAgICdsb2NhbGl6YWJsZScsXG4gICAgICAgICdsb2NhbGl6YWJsZVByb3BlcnRpZXMnLFxuICAgICAgICAnbWFza0RlZmF1bHRzJyxcbiAgICAgICAgJ21hc2tlZCcsXG4gICAgICAgICdtZXRhJyxcbiAgICAgICAgJ21vbml0b3JSZXNpemUnLFxuICAgICAgICAnbmFtZWRJdGVtcycsXG4gICAgICAgICdvd25lcicsXG4gICAgICAgICdwb3NpdGlvbmVkJyxcbiAgICAgICAgJ3ByZXZlbnRUb29sdGlwT25Ub3VjaCcsXG4gICAgICAgICdyZWxheVN0b3JlRXZlbnRzJyxcbiAgICAgICAgJ3Jlc291cmNlSW1hZ2VQYXRoJyxcbiAgICAgICAgJ3Jlc3BvbnNpdmUnLFxuICAgICAgICAncmVzcG9uc2l2ZVJvb3QnLFxuICAgICAgICAncmVzcG9uc2l2ZVN0YXRlJyxcbiAgICAgICAgJ3Jlc3BvbnNpdmVUYXJnZXQnLFxuICAgICAgICAncmlwcGxlJyxcbiAgICAgICAgJ3Jvb3RFbGVtZW50JyxcbiAgICAgICAgJ3Njcm9sbEFjdGlvbicsXG4gICAgICAgICdzZWxlY3RvckJ1dHRvbicsXG4gICAgICAgICdzZWxlY3Rvck1lbnVJdGVtJyxcbiAgICAgICAgJ3Nob3J0RXZlbnRDbHMnLFxuICAgICAgICAnc2hvcnRFdmVudER1cmF0aW9uJyxcbiAgICAgICAgJ3Nob3dBbmltYXRpb24nLFxuICAgICAgICAnc2hvd0F2YXRhcnMnLFxuICAgICAgICAnc2hvd0J1bGxldCcsXG4gICAgICAgICdzaG93UmVzb3VyY2VBdmF0YXJzJyxcbiAgICAgICAgJ3Nob3dUb29sdGlwV2hlbkRpc2FibGVkJyxcbiAgICAgICAgJ3N0YWJsZVJlc291cmNlT3JkZXInLFxuICAgICAgICAnc3RhdGVmdWwnLFxuICAgICAgICAnc3RhdGVmdWxFdmVudHMnLFxuICAgICAgICAnc3RhdGVJZCcsXG4gICAgICAgICdzdGF0ZVByb3ZpZGVyJyxcbiAgICAgICAgJ3N0cmlwcycsXG4gICAgICAgICd0YWInLFxuICAgICAgICAndGFiQmFySXRlbXMnLFxuICAgICAgICAndGFnJyxcbiAgICAgICAgJ3RiYXInLFxuICAgICAgICAndGV4dEFsaWduJyxcbiAgICAgICAgJ3RpbWVGb3JtYXQnLFxuICAgICAgICAndHJhcEZvY3VzJyxcbiAgICAgICAgJ3R5cGUnLFxuICAgICAgICAndWknLFxuICAgICAgICAnd2Vla1N0YXJ0RGF5JyxcbiAgICAgICAgJ3dlaWdodCdcbiAgICBdO1xuXG4gICAgcHJpdmF0ZSBzdGF0aWMgYnJ5bnR1bVByb3BzOiBzdHJpbmdbXSA9IEJyeW50dW1SZXNvdXJjZVZpZXdDb21wb25lbnQuYnJ5bnR1bUZlYXR1cmVOYW1lcy5jb25jYXQoW1xuICAgICAgICAnYWxpZ25TZWxmJyxcbiAgICAgICAgJ2FsbG93RHJhZ0NyZWF0ZScsXG4gICAgICAgICdhbGxvd0RyYWdNb3ZlJyxcbiAgICAgICAgJ2FsbG93RHJhZ1Jlc2l6ZScsXG4gICAgICAgICdhbmNob3JTaXplJyxcbiAgICAgICAgJ2FuaW1hdGVUaW1lU2hpZnQnLFxuICAgICAgICAnYXBwZW5kVG8nLFxuICAgICAgICAnYXV0b0NyZWF0ZScsXG4gICAgICAgICdjYWxsT25GdW5jdGlvbnMnLFxuICAgICAgICAnY2F0Y2hFdmVudEhhbmRsZXJFeGNlcHRpb25zJyxcbiAgICAgICAgJ2NscycsXG4gICAgICAgICdjb2xsYXBzZWQnLFxuICAgICAgICAnY29sdW1uJyxcbiAgICAgICAgJ2RhdGFzZXQnLFxuICAgICAgICAnZGF0ZUZvcm1hdCcsXG4gICAgICAgICdkYXRlU2VwYXJhdG9yJyxcbiAgICAgICAgJ2RheUNlbGxDbHMnLFxuICAgICAgICAnZGVmYXVsdFNjcm9sbE9wdGlvbnMnLFxuICAgICAgICAnZGVzY3JpcHRpb25Gb3JtYXQnLFxuICAgICAgICAnZGlzYWJsZWQnLFxuICAgICAgICAnZHJhZ1VuaXQnLFxuICAgICAgICAnZXh0ZW5kQWxsRGF5RW5kRGF5JyxcbiAgICAgICAgJ2V4dHJhRGF0YScsXG4gICAgICAgICdmaWx0ZXJFdmVudFJlc291cmNlcycsXG4gICAgICAgICdmaXJzdFZpc2libGVDZWxsJyxcbiAgICAgICAgJ2ZpcnN0VmlzaWJsZURhdGUnLFxuICAgICAgICAnZmxleCcsXG4gICAgICAgICdmb2N1c1Zpc2libGUnLFxuICAgICAgICAnaGFzQ2hhbmdlcycsXG4gICAgICAgICdoZWlnaHQnLFxuICAgICAgICAnaGlkZGVuJyxcbiAgICAgICAgJ2hpZGVOb25Xb3JraW5nRGF5cycsXG4gICAgICAgICdpZCcsXG4gICAgICAgICdpbnB1dEZpZWxkQWxpZ24nLFxuICAgICAgICAnaW5zZXJ0QmVmb3JlJyxcbiAgICAgICAgJ2luc2VydEZpcnN0JyxcbiAgICAgICAgJ2lzU2V0dGluZ1ZhbHVlcycsXG4gICAgICAgICdpc1ZhbGlkJyxcbiAgICAgICAgJ2l0ZW1zJyxcbiAgICAgICAgJ2tleU1hcCcsXG4gICAgICAgICdsYWJlbFBvc2l0aW9uJyxcbiAgICAgICAgJ2xhc3RWaXNpYmxlQ2VsbCcsXG4gICAgICAgICdsYXN0VmlzaWJsZURhdGUnLFxuICAgICAgICAnbGF5b3V0JyxcbiAgICAgICAgJ2xheW91dFN0eWxlJyxcbiAgICAgICAgJ21hcmdpbicsXG4gICAgICAgICdtYXhEYXRlJyxcbiAgICAgICAgJ21heEhlaWdodCcsXG4gICAgICAgICdtYXhpbWl6ZU9uTW9iaWxlJyxcbiAgICAgICAgJ21heFdpZHRoJyxcbiAgICAgICAgJ21pbkRhdGUnLFxuICAgICAgICAnbWluSGVpZ2h0JyxcbiAgICAgICAgJ21pbldpZHRoJyxcbiAgICAgICAgJ25vbldvcmtpbmdEYXlzJyxcbiAgICAgICAgJ3BhcmVudCcsXG4gICAgICAgICdwYXN0RXZlbnRDbHMnLFxuICAgICAgICAncmFuZ2UnLFxuICAgICAgICAncmVhZE9ubHknLFxuICAgICAgICAncmVjb3JkJyxcbiAgICAgICAgJ3JlbmRpdGlvbicsXG4gICAgICAgICdyZXNvdXJjZVdpZHRoJyxcbiAgICAgICAgJ3J0bCcsXG4gICAgICAgICdzY3JvbGxhYmxlJyxcbiAgICAgICAgJ3Nob3J0RGF0ZUZvcm1hdCcsXG4gICAgICAgICdzaG9ydERhdGVUaW1lRm9ybWF0JyxcbiAgICAgICAgJ3NwYW4nLFxuICAgICAgICAnc3RhdGUnLFxuICAgICAgICAnc3RyaWN0UmVjb3JkTWFwcGluZycsXG4gICAgICAgICdzeW5jQ2FsZW5kYXJEYXRlJyxcbiAgICAgICAgJ3N5bmNWaWV3RGF0ZScsXG4gICAgICAgICd0aXRsZScsXG4gICAgICAgICd0b29scycsXG4gICAgICAgICd0b29sdGlwJyxcbiAgICAgICAgJ3ZhbHVlcycsXG4gICAgICAgICd2aWV3JyxcbiAgICAgICAgJ3ZpZXdHYXAnLFxuICAgICAgICAnd2lkdGgnLFxuICAgICAgICAneCcsXG4gICAgICAgICd5J1xuICAgIF0pO1xuXG4gICAgcHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmO1xuICAgIHB1YmxpYyBpbnN0YW5jZSE6IFJlc291cmNlVmlldztcblxuICAgIHByaXZhdGUgYnJ5bnR1bUNvbmZpZyA9IHtcbiAgICAgICAgYWRvcHQgICAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgYXBwZW5kVG8gICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgaHJlZiAgICAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgYW5ndWxhckNvbXBvbmVudCA6IHRoaXMsXG4gICAgICAgIGZlYXR1cmVzICAgICAgICAgOiB7fSxcbiAgICAgICAgbGlzdGVuZXJzICAgICAgICA6IHt9XG4gICAgfTtcblxuICAgIGNvbnN0cnVjdG9yKGVsZW1lbnQ6IEVsZW1lbnRSZWYpIHtcbiAgICAgICAgdGhpcy5lbGVtZW50UmVmID0gZWxlbWVudDtcbiAgICB9XG5cbiAgICAvLyBDb25maWdzIG9ubHlcbiAgICBASW5wdXQoKSBhY3RpdmF0aW9uS2V5ICAgICAgICAgICAgICAgICEgOiBzdHJpbmc7XG4gICAgQElucHV0KCkgYWRvcHQgICAgICAgICAgICAgICAgICAgICAgICAhIDogSFRNTEVsZW1lbnR8c3RyaW5nO1xuICAgIEBJbnB1dCgpIGFsaWduICAgICAgICAgICAgICAgICAgICAgICAgISA6IEFsaWduU3BlY3xzdHJpbmc7XG4gICAgQElucHV0KCkgYW5jaG9yICAgICAgICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBhcmlhRGVzY3JpcHRpb24gICAgICAgICAgICAgICEgOiBzdHJpbmc7XG4gICAgQElucHV0KCkgYXJpYUxhYmVsICAgICAgICAgICAgICAgICAgICAhIDogc3RyaW5nO1xuICAgIEBJbnB1dCgpIGJiYXIgICAgICAgICAgICAgICAgICAgICAgICAgISA6IChDYWxlbmRhckNvbnRhaW5lckl0ZW1Db25maWd8c3RyaW5nKVtdfFRvb2xiYXJDb25maWd8UGFnaW5nVG9vbGJhckNvbmZpZ3xudWxsO1xuICAgIEBJbnB1dCgpIGJvZHlDbHMgICAgICAgICAgICAgICAgICAgICAgISA6IHN0cmluZ3xvYmplY3Q7XG4gICAgQElucHV0KCkgYnViYmxlRXZlbnRzICAgICAgICAgICAgICAgICAhIDogb2JqZWN0O1xuICAgIEBJbnB1dCgpIGNlbnRlcmVkICAgICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgY29sbGFwc2libGUgICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbnxQYW5lbENvbGxhcHNlckNvbmZpZ3xQYW5lbENvbGxhcHNlck92ZXJsYXlDb25maWc7XG4gICAgQElucHV0KCkgY29sb3IgICAgICAgICAgICAgICAgICAgICAgICAhIDogc3RyaW5nO1xuICAgIEBJbnB1dCgpIGNvbmZpZyAgICAgICAgICAgICAgICAgICAgICAgISA6IG9iamVjdDtcbiAgICBASW5wdXQoKSBjb25zdHJhaW5UbyAgICAgICAgICAgICAgICAgICEgOiBIVE1MRWxlbWVudHxXaWRnZXR8UmVjdGFuZ2xlO1xuICAgIEBJbnB1dCgpIGNvbnRlbnRFbGVtZW50Q2xzICAgICAgICAgICAgISA6IHN0cmluZ3xvYmplY3Q7XG4gICAgQElucHV0KCkgZGF0YUZpZWxkICAgICAgICAgICAgICAgICAgICAhIDogc3RyaW5nO1xuICAgIEBJbnB1dCgpIGRlZmF1bHRCaW5kUHJvcGVydHkgICAgICAgICAgISA6IHN0cmluZztcbiAgICBASW5wdXQoKSBkZWZhdWx0Rm9jdXMgICAgICAgICAgICAgICAgICEgOiAoKHdpZGdldDogV2lkZ2V0KSA9PiBib29sZWFuKXxzdHJpbmc7XG4gICAgQElucHV0KCkgZGVmYXVsdHMgICAgICAgICAgICAgICAgICAgICAhIDogQ2FsZW5kYXJDb250YWluZXJJdGVtQ29uZmlnO1xuICAgIEBJbnB1dCgpIGRlc2NyaXB0aW9uUmVuZGVyZXIgICAgICAgICAgISA6ICh2aWV3OiBXaWRnZXQpID0+IHN0cmluZztcbiAgICBASW5wdXQoKSBkZXRlY3RDU1NDb21wYXRpYmlsaXR5SXNzdWVzICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGRvY2sgICAgICAgICAgICAgICAgICAgICAgICAgISA6ICd0b3AnfCdib3R0b20nfCdsZWZ0J3wncmlnaHQnfCdzdGFydCd8J2VuZCd8J2hlYWRlcid8J3ByZS1oZWFkZXInfG9iamVjdDtcbiAgICBASW5wdXQoKSBkcmFnZ2FibGUgICAgICAgICAgICAgICAgICAgICEgOiBib29sZWFufHtcbiAgICAgICAgaGFuZGxlU2VsZWN0b3I/OiBzdHJpbmdcbiAgICB9O1xuICAgIEBJbnB1dCgpIGRyYXdlciAgICAgICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW58e3NpZGU/OiAnc3RhcnQnfCdsZWZ0J3wnZW5kJ3wncmlnaHQnfCd0b3AnfCdib3R0b20nLCBzaXplPzogc3RyaW5nfG51bWJlciwgaW5saW5lPzogYm9vbGVhbiwgYXV0b0Nsb3NlOiB7IG1vdXNlZG93bj86IGJvb2xlYW58c3RyaW5nLCBmb2N1c291dD86IGJvb2xlYW58c3RyaW5nLCBtb3VzZW91dD86IHN0cmluZyB9LCBhdXRvQ2xvc2VEZWxheT86IG51bWJlcn07XG4gICAgQElucHV0KCkgZWxlbWVudEF0dHJpYnV0ZXMgICAgICAgICAgICAhIDogUmVjb3JkPHN0cmluZywgc3RyaW5nfG51bGw+O1xuICAgIEBJbnB1dCgpIGV2ZW50SGVhZGVyUmVuZGVyZXIgICAgICAgICAgISA6ICgoZGV0YWlsOiB7IHZpZXc6IENhbGVuZGFyVmlldywgZXZlbnRSZWNvcmQ6IEV2ZW50TW9kZWwsIHJlc291cmNlUmVjb3JkOiBSZXNvdXJjZU1vZGVsLCByZW5kZXJEYXRhOiB7IHN0eWxlOiBvYmplY3QsIGNsczogb2JqZWN0LCBpY29uU3R5bGU6IG9iamVjdCwgaWNvbkNsczogb2JqZWN0LCBldmVudENvbG9yOiBzdHJpbmcsIGRhdGFzZXQ6IG9iamVjdCwgc29saWRCYXI6IGJvb2xlYW4sIGJvZHlDb2xvcjogc3RyaW5nIH0sIHNob3dCdWxsZXQ6IGJvb2xlYW4gfSkgPT4gRG9tQ29uZmlnfERvbUNvbmZpZ1tdfHN0cmluZ3x2b2lkKXxzdHJpbmc7XG4gICAgQElucHV0KCkgZXZlbnRIZWlnaHQgICAgICAgICAgICAgICAgICAhIDogbnVtYmVyfHN0cmluZztcbiAgICBASW5wdXQoKSBldmVudFJlbmRlcmVyICAgICAgICAgICAgICAgICEgOiAoKGRldGFpbDogeyB2aWV3OiBDYWxlbmRhclZpZXcsIGV2ZW50UmVjb3JkOiBFdmVudE1vZGVsLCByZXNvdXJjZVJlY29yZDogUmVzb3VyY2VNb2RlbCwgcmVuZGVyRGF0YTogeyBzdHlsZTogb2JqZWN0LCBjbHM6IG9iamVjdCwgaWNvblN0eWxlOiBvYmplY3QsIGljb25DbHM6IG9iamVjdCwgZXZlbnRDb2xvcjogc3RyaW5nLCBkYXRhc2V0OiBvYmplY3QsIHNvbGlkQmFyOiBib29sZWFuLCBib2R5Q29sb3I6IHN0cmluZywgc2hvd0J1bGxldDogYm9vbGVhbiB9IH0pID0+IERvbUNvbmZpZ3xEb21Db25maWdbXXxzdHJpbmd8dm9pZCl8c3RyaW5nO1xuICAgIEBJbnB1dCgpIGV2ZW50U29ydGVyICAgICAgICAgICAgICAgICAgISA6IChsaHM6IEV2ZW50TW9kZWx8RXZlbnRCYXIsIHJoczogRXZlbnRNb2RlbHxFdmVudEJhcikgPT4gbnVtYmVyO1xuICAgIEBJbnB1dCgpIGZsb2F0aW5nICAgICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgZm9vdGVyICAgICAgICAgICAgICAgICAgICAgICAhIDoge1xuICAgICAgICBkb2NrPzogJ3RvcCd8J3JpZ2h0J3wnYm90dG9tJ3wnbGVmdCd8J3N0YXJ0J3wnZW5kJ1xuICAgICAgICBodG1sPzogc3RyaW5nXG4gICAgICAgIGNscz86IHN0cmluZ1xuICAgIH18c3RyaW5nO1xuICAgIEBJbnB1dCgpIGdldFByaW1hcnlSZXNvdXJjZSAgICAgICAgICAgISA6ICgoZXZlbnRSZWNvcmQ6IEV2ZW50TW9kZWwpID0+IFJlc291cmNlTW9kZWwpfHN0cmluZztcbiAgICBASW5wdXQoKSBoZWFkZXIgICAgICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmd8Ym9vbGVhbnxQYW5lbEhlYWRlcjtcbiAgICBASW5wdXQoKSBoaWRlQW5pbWF0aW9uICAgICAgICAgICAgICAgICEgOiBib29sZWFufG9iamVjdDtcbiAgICBASW5wdXQoKSBoaWRlV2hlbkVtcHR5ICAgICAgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGljb24gICAgICAgICAgICAgICAgICAgICAgICAgISA6IHN0cmluZ3xEb21Db25maWc7XG4gICAgQElucHV0KCkgaWdub3JlUGFyZW50UmVhZE9ubHkgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBpbmNsdWRlVGltZVJhbmdlcyAgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGl0ZW1DbHMgICAgICAgICAgICAgICAgICAgICAgISA6IHN0cmluZztcbiAgICBASW5wdXQoKSBsYXp5SXRlbXMgICAgICAgICAgICAgICAgICAgICEgOiBSZWNvcmQ8c3RyaW5nLCBDYWxlbmRhckNvbnRhaW5lckl0ZW1Db25maWc+fENhbGVuZGFyQ29udGFpbmVySXRlbUNvbmZpZ1tdfFdpZGdldFtdO1xuICAgIEBJbnB1dCgpIGxpc3RlbmVycyAgICAgICAgICAgICAgICAgICAgISA6IFJlc291cmNlVmlld0xpc3RlbmVycztcbiAgICBASW5wdXQoKSBsb2NhbGVDbGFzcyAgICAgICAgICAgICAgICAgICEgOiB0eXBlb2YgQmFzZTtcbiAgICBASW5wdXQoKSBsb2NhbGl6YWJsZSAgICAgICAgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGxvY2FsaXphYmxlUHJvcGVydGllcyAgICAgICAgISA6IHN0cmluZ1tdO1xuICAgIEBJbnB1dCgpIG1hc2tEZWZhdWx0cyAgICAgICAgICAgICAgICAgISA6IE1hc2tDb25maWc7XG4gICAgQElucHV0KCkgbWFza2VkICAgICAgICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbnxzdHJpbmd8TWFza0NvbmZpZztcbiAgICBASW5wdXQoKSBtZXRhICAgICAgICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmd8KChyZXNvdXJjZTogUmVzb3VyY2VNb2RlbCkgPT4gc3RyaW5nKTtcbiAgICBASW5wdXQoKSBtb25pdG9yUmVzaXplICAgICAgICAgICAgICAgICEgOiBib29sZWFufHtcbiAgICAgICAgaW1tZWRpYXRlPzogYm9vbGVhblxuICAgIH07XG4gICAgQElucHV0KCkgbmFtZWRJdGVtcyAgICAgICAgICAgICAgICAgICAhIDogUmVjb3JkPHN0cmluZywgQ2FsZW5kYXJDb250YWluZXJJdGVtQ29uZmlnPjtcbiAgICBASW5wdXQoKSBvd25lciAgICAgICAgICAgICAgICAgICAgICAgICEgOiBXaWRnZXR8YW55O1xuICAgIEBJbnB1dCgpIHBvc2l0aW9uZWQgICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgcHJldmVudFRvb2x0aXBPblRvdWNoICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSByZWxheVN0b3JlRXZlbnRzICAgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIHJlc291cmNlSW1hZ2VQYXRoICAgICAgICAgICAgISA6IHN0cmluZztcbiAgICBASW5wdXQoKSByZXNwb25zaXZlICAgICAgICAgICAgICAgICAgICEgOiBvYmplY3Q7XG4gICAgQElucHV0KCkgcmVzcG9uc2l2ZVJvb3QgICAgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSByZXNwb25zaXZlU3RhdGUgICAgICAgICAgICAgICEgOiBzdHJpbmc7XG4gICAgQElucHV0KCkgcmVzcG9uc2l2ZVRhcmdldCAgICAgICAgICAgICAhIDogc3RyaW5nfFdpZGdldDtcbiAgICBASW5wdXQoKSByaXBwbGUgICAgICAgICAgICAgICAgICAgICAgICEgOiBib29sZWFufHtcbiAgICAgICAgZGVsZWdhdGU/OiBzdHJpbmdcbiAgICAgICAgY29sb3I/OiBzdHJpbmdcbiAgICAgICAgcmFkaXVzPzogbnVtYmVyXG4gICAgICAgIGNsaXA/OiBzdHJpbmdcbiAgICB9O1xuICAgIEBJbnB1dCgpIHJvb3RFbGVtZW50ICAgICAgICAgICAgICAgICAgISA6IFNoYWRvd1Jvb3R8SFRNTEVsZW1lbnQ7XG4gICAgQElucHV0KCkgc2Nyb2xsQWN0aW9uICAgICAgICAgICAgICAgICAhIDogJ2hpZGUnfCdyZWFsaWduJ3xudWxsO1xuICAgIEBJbnB1dCgpIHNlbGVjdG9yQnV0dG9uICAgICAgICAgICAgICAgISA6IEJ1dHRvbkNvbmZpZztcbiAgICBASW5wdXQoKSBzZWxlY3Rvck1lbnVJdGVtICAgICAgICAgICAgICEgOiBNZW51SXRlbUNvbmZpZztcbiAgICBASW5wdXQoKSBzaG9ydEV2ZW50Q2xzICAgICAgICAgICAgICAgICEgOiBzdHJpbmc7XG4gICAgQElucHV0KCkgc2hvcnRFdmVudER1cmF0aW9uICAgICAgICAgICAhIDogc3RyaW5nfG51bWJlcjtcbiAgICBASW5wdXQoKSBzaG93QW5pbWF0aW9uICAgICAgICAgICAgICAgICEgOiBib29sZWFufG9iamVjdDtcbiAgICBASW5wdXQoKSBzaG93QXZhdGFycyAgICAgICAgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIHNob3dCdWxsZXQgICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW58e2Jhcj86IGJvb2xlYW4sIG5vQmFyPzogYm9vbGVhbn07XG4gICAgQElucHV0KCkgc2hvd1Jlc291cmNlQXZhdGFycyAgICAgICAgICAhIDogYm9vbGVhbnxzdHJpbmc7XG4gICAgQElucHV0KCkgc2hvd1Rvb2x0aXBXaGVuRGlzYWJsZWQgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBzdGFibGVSZXNvdXJjZU9yZGVyICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIHN0YXRlZnVsICAgICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW58b2JqZWN0fHN0cmluZ1tdO1xuICAgIEBJbnB1dCgpIHN0YXRlZnVsRXZlbnRzICAgICAgICAgICAgICAgISA6IG9iamVjdHxzdHJpbmdbXTtcbiAgICBASW5wdXQoKSBzdGF0ZUlkICAgICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmc7XG4gICAgQElucHV0KCkgc3RhdGVQcm92aWRlciAgICAgICAgICAgICAgICAhIDogU3RhdGVQcm92aWRlcjtcbiAgICBASW5wdXQoKSBzdHJpcHMgICAgICAgICAgICAgICAgICAgICAgICEgOiBSZWNvcmQ8c3RyaW5nLCBDYWxlbmRhckNvbnRhaW5lckl0ZW1Db25maWc+O1xuICAgIEBJbnB1dCgpIHRhYiAgICAgICAgICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW58VGFiQ29uZmlnO1xuICAgIEBJbnB1dCgpIHRhYkJhckl0ZW1zICAgICAgICAgICAgICAgICAgISA6IFRvb2xiYXJJdGVtc1tdfFdpZGdldFtdO1xuICAgIEBJbnB1dCgpIHRhZyAgICAgICAgICAgICAgICAgICAgICAgICAgISA6IHN0cmluZztcbiAgICBASW5wdXQoKSB0YmFyICAgICAgICAgICAgICAgICAgICAgICAgICEgOiAoQ2FsZW5kYXJDb250YWluZXJJdGVtQ29uZmlnfHN0cmluZylbXXxUb29sYmFyQ29uZmlnfFBhZ2luZ1Rvb2xiYXJDb25maWd8bnVsbDtcbiAgICBASW5wdXQoKSB0ZXh0QWxpZ24gICAgICAgICAgICAgICAgICAgICEgOiAnbGVmdCd8J2NlbnRlcid8J3JpZ2h0J3wnc3RhcnQnfCdlbmQnO1xuICAgIEBJbnB1dCgpIHRpbWVGb3JtYXQgICAgICAgICAgICAgICAgICAgISA6IHN0cmluZ3woKGRhdGU6IERhdGUpID0+IHN0cmluZyk7XG4gICAgQElucHV0KCkgdHJhcEZvY3VzICAgICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSB0eXBlICAgICAgICAgICAgICAgICAgICAgICAgICEgOiAncmVzb3VyY2V2aWV3J3wncmVzb3VyY2UnO1xuICAgIEBJbnB1dCgpIHVpICAgICAgICAgICAgICAgICAgICAgICAgICAgISA6ICdwbGFpbid8J3Rvb2xiYXInfHN0cmluZ3xvYmplY3Q7XG4gICAgQElucHV0KCkgd2Vla1N0YXJ0RGF5ICAgICAgICAgICAgICAgICAhIDogbnVtYmVyO1xuICAgIEBJbnB1dCgpIHdlaWdodCAgICAgICAgICAgICAgICAgICAgICAgISA6IG51bWJlcjtcblxuICAgIC8vIENvbmZpZ3MgYW5kIHByb3BlcnRpZXNcbiAgICBASW5wdXQoKSBhbGlnblNlbGYgICAgICAgICAgICAgICAgICAgISA6IHN0cmluZztcbiAgICBASW5wdXQoKSBhbGxvd0RyYWdDcmVhdGUgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgYWxsb3dEcmFnTW92ZSAgICAgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGFsbG93RHJhZ1Jlc2l6ZSAgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBhbmltYXRlVGltZVNoaWZ0ICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgYXBwZW5kVG8gICAgICAgICAgICAgICAgICAgICEgOiBIVE1MRWxlbWVudHxzdHJpbmc7XG4gICAgQElucHV0KCkgYXV0b0NyZWF0ZSAgICAgICAgICAgICAgICAgICEgOiB7XG4gICAgICAgIGdlc3R1cmU/OiBzdHJpbmdcbiAgICAgICAgbmV3TmFtZT86IEZ1bmN0aW9ufHN0cmluZ1xuICAgICAgICBzdGVwPzogc3RyaW5nXG4gICAgICAgIHNuYXBUeXBlPzogJ3JvdW5kJ3wnY2VpbCd8J2Zsb29yJ1xuICAgICAgICBkdXJhdGlvbj86IHN0cmluZ1xuICAgICAgICBzdGFydEhvdXI/OiBudW1iZXJcbiAgICB9fHN0cmluZ3xib29sZWFuO1xuICAgIEBJbnB1dCgpIGNhbGxPbkZ1bmN0aW9ucyAgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBjYXRjaEV2ZW50SGFuZGxlckV4Y2VwdGlvbnMgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgY2xzICAgICAgICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmd8b2JqZWN0O1xuICAgIEBJbnB1dCgpIGNvbGxhcHNlZCAgICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBjb2x1bW4gICAgICAgICAgICAgICAgICAgICAgISA6IG51bWJlcjtcbiAgICBASW5wdXQoKSBkYXRhc2V0ICAgICAgICAgICAgICAgICAgICAgISA6IG9iamVjdHxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICAgIEBJbnB1dCgpIGRhdGVGb3JtYXQgICAgICAgICAgICAgICAgICAhIDogc3RyaW5nfCgoZGF0ZTogRGF0ZSkgPT4gc3RyaW5nKTtcbiAgICBASW5wdXQoKSBkYXRlU2VwYXJhdG9yICAgICAgICAgICAgICAgISA6IHN0cmluZztcbiAgICBASW5wdXQoKSBkZWZhdWx0U2Nyb2xsT3B0aW9ucyAgICAgICAgISA6IEJyeW50dW1TY3JvbGxPcHRpb25zO1xuICAgIEBJbnB1dCgpIGRlc2NyaXB0aW9uRm9ybWF0ICAgICAgICAgICAhIDogc3RyaW5nfHN0cmluZ1tdfGJvb2xlYW5bXXwoKGRhdGU6IERhdGUpID0+IHN0cmluZyl8RnVuY3Rpb25bXTtcbiAgICBASW5wdXQoKSBkaXNhYmxlZCAgICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW58J2luZXJ0JztcbiAgICBASW5wdXQoKSBkcmFnVW5pdCAgICAgICAgICAgICAgICAgICAgISA6IHN0cmluZztcbiAgICBASW5wdXQoKSBleHRlbmRBbGxEYXlFbmREYXkgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgZXh0cmFEYXRhICAgICAgICAgICAgICAgICAgICEgOiBhbnk7XG4gICAgQElucHV0KCkgZmlsdGVyRXZlbnRSZXNvdXJjZXMgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGZsZXggICAgICAgICAgICAgICAgICAgICAgICAhIDogbnVtYmVyfHN0cmluZztcbiAgICBASW5wdXQoKSBoZWlnaHQgICAgICAgICAgICAgICAgICAgICAgISA6IG51bWJlcnxzdHJpbmc7XG4gICAgQElucHV0KCkgaGlkZGVuICAgICAgICAgICAgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGhpZGVOb25Xb3JraW5nRGF5cyAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBpZCAgICAgICAgICAgICAgICAgICAgICAgICAgISA6IHN0cmluZztcbiAgICBASW5wdXQoKSBpbnB1dEZpZWxkQWxpZ24gICAgICAgICAgICAgISA6ICdzdGFydCd8J2VuZCc7XG4gICAgQElucHV0KCkgaW5zZXJ0QmVmb3JlICAgICAgICAgICAgICAgICEgOiBIVE1MRWxlbWVudHxzdHJpbmc7XG4gICAgQElucHV0KCkgaW5zZXJ0Rmlyc3QgICAgICAgICAgICAgICAgICEgOiBIVE1MRWxlbWVudHxzdHJpbmc7XG4gICAgQElucHV0KCkgaXRlbXMgICAgICAgICAgICAgICAgICAgICAgICEgOiAoQ2FsZW5kYXJDb250YWluZXJJdGVtQ29uZmlnfE1lbnVJdGVtQ29uZmlnfFdpZGdldClbXXxSZWNvcmQ8c3RyaW5nLCBDYWxlbmRhckNvbnRhaW5lckl0ZW1Db25maWd8TWVudUl0ZW1Db25maWc+fFdpZGdldFtdfFJlY29yZDxzdHJpbmcsIENhbGVuZGFyQ29udGFpbmVySXRlbUNvbmZpZ3xNZW51SXRlbUVudHJ5PnwoQ2FsZW5kYXJDb250YWluZXJJdGVtQ29uZmlnfE1lbnVJdGVtRW50cnl8V2lkZ2V0KVtdO1xuICAgIEBJbnB1dCgpIGtleU1hcCAgICAgICAgICAgICAgICAgICAgICAhIDogUmVjb3JkPHN0cmluZywgS2V5TWFwQ29uZmlnPjtcbiAgICBASW5wdXQoKSBsYWJlbFBvc2l0aW9uICAgICAgICAgICAgICAgISA6ICdiZWZvcmUnfCdhYm92ZSd8J2FsaWduLWJlZm9yZSd8J2F1dG8nfG51bGw7XG4gICAgQElucHV0KCkgbGF5b3V0ICAgICAgICAgICAgICAgICAgICAgICEgOiBMYXlvdXR8c3RyaW5nfENhbGVuZGFyQ29udGFpbmVyTGF5b3V0Q29uZmlnO1xuICAgIEBJbnB1dCgpIGxheW91dFN0eWxlICAgICAgICAgICAgICAgICAhIDogb2JqZWN0O1xuICAgIEBJbnB1dCgpIG1hcmdpbiAgICAgICAgICAgICAgICAgICAgICAhIDogbnVtYmVyfHN0cmluZztcbiAgICBASW5wdXQoKSBtYXhEYXRlICAgICAgICAgICAgICAgICAgICAgISA6IERhdGV8c3RyaW5nO1xuICAgIEBJbnB1dCgpIG1heEhlaWdodCAgICAgICAgICAgICAgICAgICAhIDogc3RyaW5nfG51bWJlcjtcbiAgICBASW5wdXQoKSBtYXhpbWl6ZU9uTW9iaWxlICAgICAgICAgICAgISA6IG51bWJlcnxzdHJpbmc7XG4gICAgQElucHV0KCkgbWF4V2lkdGggICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmd8bnVtYmVyO1xuICAgIEBJbnB1dCgpIG1pbkRhdGUgICAgICAgICAgICAgICAgICAgICAhIDogRGF0ZXxzdHJpbmc7XG4gICAgQElucHV0KCkgbWluSGVpZ2h0ICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmd8bnVtYmVyO1xuICAgIEBJbnB1dCgpIG1pbldpZHRoICAgICAgICAgICAgICAgICAgICAhIDogc3RyaW5nfG51bWJlcjtcbiAgICBASW5wdXQoKSBub25Xb3JraW5nRGF5cyAgICAgICAgICAgICAgISA6IFJlY29yZDxudW1iZXIsIGJvb2xlYW4+O1xuICAgIEBJbnB1dCgpIHBhc3RFdmVudENscyAgICAgICAgICAgICAgICAhIDogc3RyaW5nO1xuICAgIEBJbnB1dCgpIHJhbmdlICAgICAgICAgICAgICAgICAgICAgICAhIDogc3RyaW5nfER1cmF0aW9uQ29uZmlnO1xuICAgIEBJbnB1dCgpIHJlYWRPbmx5ICAgICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSByZW5kaXRpb24gICAgICAgICAgICAgICAgICAgISA6IHN0cmluZ3xSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+fG51bGw7XG4gICAgQElucHV0KCkgcmVzb3VyY2VXaWR0aCAgICAgICAgICAgICAgICEgOiBudW1iZXJ8c3RyaW5nO1xuICAgIEBJbnB1dCgpIHJ0bCAgICAgICAgICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBzY3JvbGxhYmxlICAgICAgICAgICAgICAgICAgISA6IFNjcm9sbGVyfGJvb2xlYW58U2Nyb2xsZXJDb25maWc7XG4gICAgQElucHV0KCkgc2hvcnREYXRlRm9ybWF0ICAgICAgICAgICAgICEgOiBzdHJpbmd8KChkYXRlOiBEYXRlKSA9PiBzdHJpbmcpO1xuICAgIEBJbnB1dCgpIHNob3J0RGF0ZVRpbWVGb3JtYXQgICAgICAgICAhIDogc3RyaW5nfCgoZGF0ZTogRGF0ZSkgPT4gc3RyaW5nKTtcbiAgICBASW5wdXQoKSBzcGFuICAgICAgICAgICAgICAgICAgICAgICAgISA6IG51bWJlcjtcbiAgICBASW5wdXQoKSBzdHJpY3RSZWNvcmRNYXBwaW5nICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgc3luY0NhbGVuZGFyRGF0ZSAgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIHN5bmNWaWV3RGF0ZSAgICAgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSB0aXRsZSAgICAgICAgICAgICAgICAgICAgICAgISA6IHN0cmluZztcbiAgICBASW5wdXQoKSB0b29scyAgICAgICAgICAgICAgICAgICAgICAgISA6IFJlY29yZDxzdHJpbmcsIFRvb2x8VG9vbENvbmZpZz58bnVsbHxSZWNvcmQ8c3RyaW5nLCBUb29sPnxSZWNvcmQ8c3RyaW5nLCBUb29sQ29uZmlnPjtcbiAgICBASW5wdXQoKSB0b29sdGlwICAgICAgICAgICAgICAgICAgICAgISA6IHN0cmluZ3xUb29sdGlwQ29uZmlnfG51bGw7XG4gICAgQElucHV0KCkgdmlldyAgICAgICAgICAgICAgICAgICAgICAgICEgOiBDYWxlbmRhckNvbnRhaW5lckl0ZW1Db25maWd8UmVjb3JkPHN0cmluZywgYW55PjtcbiAgICBASW5wdXQoKSB2aWV3R2FwICAgICAgICAgICAgICAgICAgICAgISA6IHN0cmluZ3xudW1iZXI7XG4gICAgQElucHV0KCkgd2lkdGggICAgICAgICAgICAgICAgICAgICAgICEgOiBudW1iZXJ8c3RyaW5nO1xuICAgIEBJbnB1dCgpIHggICAgICAgICAgICAgICAgICAgICAgICAgICAhIDogbnVtYmVyO1xuICAgIEBJbnB1dCgpIHkgICAgICAgICAgICAgICAgICAgICAgICAgICAhIDogbnVtYmVyO1xuXG4gICAgLy8gUHJvcGVydGllcyBvbmx5XG4gICAgQElucHV0KCkgYW5jaG9yU2l6ZSAgICAgICAhIDogbnVtYmVyW107XG4gICAgQElucHV0KCkgZGF5Q2VsbENscyAgICAgICAhIDogc3RyaW5nO1xuICAgIEBJbnB1dCgpIGZpcnN0VmlzaWJsZUNlbGwgISA6IEhUTUxFbGVtZW50O1xuICAgIEBJbnB1dCgpIGZpcnN0VmlzaWJsZURhdGUgISA6IERhdGU7XG4gICAgQElucHV0KCkgZm9jdXNWaXNpYmxlICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBoYXNDaGFuZ2VzICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGlzU2V0dGluZ1ZhbHVlcyAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgaXNWYWxpZCAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBsYXN0VmlzaWJsZUNlbGwgICEgOiBIVE1MRWxlbWVudDtcbiAgICBASW5wdXQoKSBsYXN0VmlzaWJsZURhdGUgICEgOiBEYXRlO1xuICAgIEBJbnB1dCgpIHBhcmVudCAgICAgICAgICAgISA6IFdpZGdldDtcbiAgICBASW5wdXQoKSByZWNvcmQgICAgICAgICAgICEgOiBNb2RlbDtcbiAgICBASW5wdXQoKSBzdGF0ZSAgICAgICAgICAgICEgOiBhbnk7XG4gICAgQElucHV0KCkgdmFsdWVzICAgICAgICAgICAhIDogUmVjb3JkPHN0cmluZywgb2JqZWN0PjtcblxuICAgIC8vIEV2ZW50cyBlbWl0dGVyc1xuICAgIC8qKlxuICAgICAqIFRoaXMgZXZlbnQgZmlyZXMgd2hlbmV2ZXIgdGhlIFthdXRvQ3JlYXRlIGdlc3R1cmVdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L21peGluL0NhbGVuZGFyTWl4aW4jY29uZmlnLWF1dG9DcmVhdGUpIGlzIGRldGVjdGVkXG4gICAgICogYW5kIGFsc28gd2hlbiBhIFtkcmFnLWNyZWF0ZV0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci9mZWF0dXJlL0NhbGVuZGFyRHJhZykgZ2VzdHVyZSBpcyBkZXRlY3RlZC5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvUmVzb3VyY2VWaWV3I2V2ZW50LWJlZm9yZUF1dG9DcmVhdGUpXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50LmRvbUV2ZW50IFRoZSBET00gZXZlbnQgd2hpY2ggaW5pdGlhdGVkIHRoZSBjcmVhdGlvbi5cbiAgICAgKiBAcGFyYW0ge0RhdGV9IGV2ZW50LmRhdGUgKkRFUFJFQ0FURUQgaW4gZmF2b3VyIG9mIGBzdGFydERhdGVgLiogVGhlIHN0YXJ0aW5nIHRpbWUgb2YgdGhlIGV2ZW50IHRvIGJlIGNyZWF0ZWQuIElmIHRoaXMgaXMgaW4gYSBgRGF5Vmlld2AsIHRoaXMgd2lsbCBiZSBzbmFwcGVkIGFjY29yZGluZyB0byB0aGUgc3BlY2lmaWNhdGlvbiBpbiBbYXV0b0NyZWF0ZV0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvbWl4aW4vQ2FsZW5kYXJNaXhpbiNjb25maWctYXV0b0NyZWF0ZSlcbiAgICAgKiBAcGFyYW0ge0RhdGV9IGV2ZW50LnN0YXJ0RGF0ZSBUaGUgc3RhcnRpbmcgdGltZSBvZiB0aGUgZXZlbnQgdG8gYmUgY3JlYXRlZC4gSWYgdGhpcyBpcyBpbiBhIGBEYXlWaWV3YCwgdGhpcyB3aWxsIGJlIHNuYXBwZWQgYWNjb3JkaW5nIHRvIHRoZSBzcGVjaWZpY2F0aW9uIGluIFthdXRvQ3JlYXRlXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9taXhpbi9DYWxlbmRhck1peGluI2NvbmZpZy1hdXRvQ3JlYXRlKVxuICAgICAqIEBwYXJhbSB7RGF0ZX0gZXZlbnQuZW5kRGF0ZSBUaGUgZW5kaW5nIHRpbWUgb2YgdGhlIGV2ZW50IHRvIGJlIGNyZWF0ZWQuXG4gICAgICogQHBhcmFtIHtTY2hlZHVsZXIubW9kZWwuUmVzb3VyY2VNb2RlbH0gZXZlbnQucmVzb3VyY2VSZWNvcmQgVGhlIHJlc291cmNlIGlmIHRoZSBVSSBpbmNsdWRlcyBhIHJlc291cmNlLlxuICAgICAqIEBwYXJhbSB7Q2FsZW5kYXJWaWV3fSBldmVudC52aWV3IFRoaXMgdmlldy5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25CZWZvcmVBdXRvQ3JlYXRlOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgZG9tRXZlbnQ6IEV2ZW50LCBkYXRlOiBEYXRlLCBzdGFydERhdGU6IERhdGUsIGVuZERhdGU6IERhdGUsIHJlc291cmNlUmVjb3JkOiBSZXNvdXJjZU1vZGVsLCB2aWV3OiBDYWxlbmRhclZpZXcgfSkgPT4gUHJvbWlzZTxib29sZWFuPnxib29sZWFufHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyZWQgYmVmb3JlIGEgdmlldydzIG9yaWVudGF0aW5nIGRhdGUgY2hhbmdlcy5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvUmVzb3VyY2VWaWV3I2V2ZW50LWJlZm9yZUNoYW5nZURhdGUpXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7RGF0ZX0gZXZlbnQub2xkRGF0ZSBUaGUgY3VycmVudCBvcmllbnRhdGluZyBkYXRlIG9mIHRoaXMgdmlldy5cbiAgICAgKiBAcGFyYW0ge0RhdGV9IGV2ZW50LmRhdGUgVGhlIG5ldyBkYXRlIHRvIHdoaWNoIHRoaXMgdmlldyBpcyB0byBiZSBvcmllbnRhdGVkLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkJlZm9yZUNoYW5nZURhdGU6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBvbGREYXRlOiBEYXRlLCBkYXRlOiBEYXRlIH0pID0+IFByb21pc2U8Ym9vbGVhbj58Ym9vbGVhbnx2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZXMgYmVmb3JlIGFuIG9iamVjdCBpcyBkZXN0cm95ZWQuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7Q29yZS5CYXNlfSBldmVudC5zb3VyY2UgVGhlIE9iamVjdCB0aGF0IGlzIGJlaW5nIGRlc3Ryb3llZC5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25CZWZvcmVEZXN0cm95OiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBCYXNlIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyZWQgYmVmb3JlIGEgd2lkZ2V0IGlzIGhpZGRlbi4gUmV0dXJuIGBmYWxzZWAgdG8gcHJldmVudCB0aGUgYWN0aW9uLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0LldpZGdldH0gZXZlbnQuc291cmNlIFRoZSB3aWRnZXQgYmVpbmcgaGlkZGVuLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkJlZm9yZUhpZGU6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IFdpZGdldCB9KSA9PiBQcm9taXNlPGJvb2xlYW4+fGJvb2xlYW58dm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIFRyaWdnZXJlZCBiZWZvcmUgYSBuZXcgW3Jlc3BvbnNpdmVTdGF0ZV0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9Db3JlL3dpZGdldC9taXhpbi9SZXNwb25zaXZlI2NvbmZpZy1yZXNwb25zaXZlU3RhdGUpIGlzIGFwcGxpZWQuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuV2lkZ2V0fSBldmVudC5zb3VyY2UgVGhlIHdpZGdldCB3aG9zZSBgcmVzcG9uc2l2ZVN0YXRlYCBpcyB0byBiZSBjaGFuZ2VkXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50LnN0YXRlIFRoZSBuZXcgdmFsdWUgZm9yIHRoZSB3aWRnZXQncyBgcmVzcG9uc2l2ZVN0YXRlYFxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBldmVudC5vbGRTdGF0ZSBUaGUgcHJldmlvdXMgdmFsdWUgZm9yIHRoZSB3aWRnZXQncyBgcmVzcG9uc2l2ZVN0YXRlYFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkJlZm9yZVJlc3BvbnNpdmVTdGF0ZUNoYW5nZTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogV2lkZ2V0LCBzdGF0ZTogc3RyaW5nLCBvbGRTdGF0ZTogc3RyaW5nIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlZCBiZWZvcmUgdGhpcyBjb250YWluZXIgd2lsbCBsb2FkIHJlY29yZCB2YWx1ZXMgaW50byBpdHMgY2hpbGQgZmllbGRzLiBUaGlzIGlzIHVzZWZ1bCBpZiB5b3VcbiAgICAgKiB3YW50IHRvIG1vZGlmeSB0aGUgVUkgYmVmb3JlIGRhdGEgaXMgbG9hZGVkIChlLmcuIHNldCBzb21lIGlucHV0IGZpZWxkIHRvIGJlIHJlYWRvbmx5KVxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0LkNvbnRhaW5lcn0gZXZlbnQuc291cmNlIFRoZSBjb250YWluZXJcbiAgICAgKiBAcGFyYW0ge0NvcmUuZGF0YS5Nb2RlbH0gZXZlbnQucmVjb3JkIFRoZSByZWNvcmRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25CZWZvcmVTZXRSZWNvcmQ6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IENvbnRhaW5lciwgcmVjb3JkOiBNb2RlbCB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogVHJpZ2dlcmVkIGJlZm9yZSBhIHdpZGdldCBpcyBzaG93bi4gUmV0dXJuIGBmYWxzZWAgdG8gcHJldmVudCB0aGUgYWN0aW9uLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0LldpZGdldCxhbnl9IGV2ZW50LnNvdXJjZSBUaGUgd2lkZ2V0IGJlaW5nIHNob3duXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQmVmb3JlU2hvdzogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogV2lkZ2V0fGFueSB9KSA9PiBQcm9taXNlPGJvb2xlYW4+fGJvb2xlYW58dm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVkIGJlZm9yZSBzdGF0ZSBpcyBhcHBsaWVkIHRvIHRoZSBzb3VyY2UuIEFsbG93cyBlZGl0aW5nIHRoZSBzdGF0ZSBvYmplY3Qgb3IgcHJldmVudGluZyB0aGUgb3BlcmF0aW9uLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge2FueX0gZXZlbnQuc3RhdGUgU3RhdGUgb2JqZWN0IGNvbmZpZ1xuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkJlZm9yZVN0YXRlQXBwbHk6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzdGF0ZTogYW55IH0pID0+IFByb21pc2U8Ym9vbGVhbj58Ym9vbGVhbnx2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZWQgYmVmb3JlIHN0YXRlIGlzIHNhdmVkIGJ5IHRoZSBTdGF0ZVByb3ZpZGVyLiBBbGxvd3MgZWRpdGluZyB0aGUgc3RhdGUgb2JqZWN0IG9yIHByZXZlbnRpbmcgdGhlIG9wZXJhdGlvbi5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHthbnl9IGV2ZW50LnN0YXRlIFN0YXRlIG9iamVjdCBjb25maWdcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25CZWZvcmVTdGF0ZVNhdmU6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzdGF0ZTogYW55IH0pID0+IFByb21pc2U8Ym9vbGVhbj58Ym9vbGVhbnx2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZXMgd2hlbiBhbnkgb3RoZXIgZXZlbnQgaXMgZmlyZWQgZnJvbSB0aGUgb2JqZWN0LlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9SZXNvdXJjZVZpZXcjZXZlbnQtY2F0Y2hBbGwpXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7e1trZXk6IHN0cmluZ106IGFueSwgdHlwZTogc3RyaW5nfX0gZXZlbnQuZXZlbnQgVGhlIE9iamVjdCB0aGF0IGNvbnRhaW5zIGV2ZW50IGRldGFpbHNcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZXZlbnQuZXZlbnQudHlwZSBUaGUgdHlwZSBvZiB0aGUgZXZlbnQgd2hpY2ggaXMgY2F1Z2h0IGJ5IHRoZSBsaXN0ZW5lclxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkNhdGNoQWxsOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHtba2V5OiBzdHJpbmddOiBhbnksIHR5cGU6IHN0cmluZ30pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlcyB3aGVuIGEgUGFuZWwgaXMgY29sbGFwc2VkIHVzaW5nIHRoZSBbY29sbGFwc2libGVdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ29yZS93aWRnZXQvUGFuZWwjY29uZmlnLWNvbGxhcHNpYmxlKSBzZXR0aW5nLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0LlBhbmVsfSBldmVudC5zb3VyY2UgVGhpcyBQYW5lbC5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25Db2xsYXBzZTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogUGFuZWwgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIHdoZW4gYW4gb2JqZWN0IGlzIGRlc3Ryb3llZC5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtDb3JlLkJhc2V9IGV2ZW50LnNvdXJjZSBUaGUgT2JqZWN0IHRoYXQgaXMgYmVpbmcgZGVzdHJveWVkLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkRlc3Ryb3k6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IEJhc2UgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIHdoZW4gYSBmaWVsZCBpcyBtdXRhdGVkIGFuZCB0aGUgc3RhdGUgb2YgdGhlIFtoYXNDaGFuZ2VzXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L0NvbnRhaW5lciNwcm9wZXJ0eS1oYXNDaGFuZ2VzKSBwcm9wZXJ0eSBjaGFuZ2VzXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuQ29udGFpbmVyfSBldmVudC5zb3VyY2UgVGhlIGNvbnRhaW5lci5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGV2ZW50LmRpcnR5IFRoZSBkaXJ0eSBzdGF0ZSBvZiB0aGUgQ29udGFpbmVyIC0gYHRydWVgIGlmIHRoZXJlIGFyZSBhbnkgZmllbGRzIHdoaWNoIGhhdmUgYmVlbiBjaGFuZ2VkIHNpbmNlIGluaXRpYWwgbG9hZC5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25EaXJ0eVN0YXRlQ2hhbmdlOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBDb250YWluZXIsIGRpcnR5OiBib29sZWFuIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyZWQgd2hlbiBhIHdpZGdldCdzIFtlbGVtZW50XShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1dpZGdldCNwcm9wZXJ0eS1lbGVtZW50KSBpcyBhdmFpbGFibGUuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGV2ZW50LmVsZW1lbnQgVGhlIFdpZGdldCdzIGVsZW1lbnQuXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uRWxlbWVudENyZWF0ZWQ6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBlbGVtZW50OiBIVE1MRWxlbWVudCB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiBhbiBbYXV0b0NyZWF0ZV0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvbWl4aW4vQ2FsZW5kYXJNaXhpbiNjb25maWctYXV0b0NyZWF0ZSkgZ2VzdHVyZSBoYXMgY3JlYXRlZCBhIG5ldyBldmVudFxuICAgICAqIGFuZCBhZGRlZCBpdCB0byB0aGUgZXZlbnQgc3RvcmUuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L1Jlc291cmNlVmlldyNldmVudC1ldmVudEF1dG9DcmVhdGVkKVxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0NhbGVuZGFyVmlld30gZXZlbnQuc291cmNlIFRoaXMgQ2FsZW5kYXIgdmlldyBpbnN0YW5jZS5cbiAgICAgKiBAcGFyYW0ge1NjaGVkdWxlci5tb2RlbC5FdmVudE1vZGVsfSBldmVudC5ldmVudFJlY29yZCBUaGUgbmV3IGV2ZW50IHJlY29yZC5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25FdmVudEF1dG9DcmVhdGVkOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBDYWxlbmRhclZpZXcsIGV2ZW50UmVjb3JkOiBFdmVudE1vZGVsIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlcyB3aGVuIGEgUGFuZWwgaXMgZXhwYW5kZWQgdXNpbmcgdGhlIFtjb2xsYXBzaWJsZV0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9Db3JlL3dpZGdldC9QYW5lbCNjb25maWctY29sbGFwc2libGUpIHNldHRpbmcuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuUGFuZWx9IGV2ZW50LnNvdXJjZSBUaGlzIFBhbmVsLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkV4cGFuZDogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogUGFuZWwgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gZm9jdXMgZW50ZXJzIHRoaXMgV2lkZ2V0LlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0LldpZGdldH0gZXZlbnQuc291cmNlIFRoaXMgV2lkZ2V0XG4gICAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZXZlbnQuZnJvbUVsZW1lbnQgVGhlIGVsZW1lbnQgd2hpY2ggbG9zdCBmb2N1cy5cbiAgICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBldmVudC50b0VsZW1lbnQgVGhlIGVsZW1lbnQgd2hpY2ggZ2FpbmVkIGZvY3VzLlxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuV2lkZ2V0fSBldmVudC5mcm9tV2lkZ2V0IFRoZSB3aWRnZXQgd2hpY2ggbG9zdCBmb2N1cy5cbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0LldpZGdldH0gZXZlbnQudG9XaWRnZXQgVGhlIHdpZGdldCB3aGljaCBnYWluZWQgZm9jdXMuXG4gICAgICogQHBhcmFtIHtib29sZWFufSBldmVudC5iYWNrd2FyZHMgYHRydWVgIGlmIHRoZSBgdG9FbGVtZW50YCBpcyBiZWZvcmUgdGhlIGBmcm9tRWxlbWVudGAgaW4gZG9jdW1lbnQgb3JkZXIuXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uRm9jdXNJbjogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogV2lkZ2V0LCBmcm9tRWxlbWVudDogSFRNTEVsZW1lbnQsIHRvRWxlbWVudDogSFRNTEVsZW1lbnQsIGZyb21XaWRnZXQ6IFdpZGdldCwgdG9XaWRnZXQ6IFdpZGdldCwgYmFja3dhcmRzOiBib29sZWFuIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIGZvY3VzIGV4aXRzIHRoaXMgV2lkZ2V0J3Mgb3duZXJzaGlwIHRyZWUuIFRoaXMgaXMgZGlmZmVyZW50IGZyb20gYSBgYmx1cmAgZXZlbnQuXG4gICAgICogZm9jdXMgbW92aW5nIGZyb20gd2l0aGluIHRoaXMgV2lkZ2V0J3Mgb3duZXJzaGlwIHRyZWUsIGV2ZW4gaWYgdGhlcmUgYXJlIGZsb2F0aW5nIHdpZGdldHNcbiAgICAgKiB3aWxsIG5vdCB0cmlnZ2VyIHRoaXMgZXZlbnQuIFRoaXMgaXMgd2hlbiBmb2N1cyBleGl0cyB0aGlzIHdpZGdldCBjb21wbGV0ZWx5LlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0LldpZGdldH0gZXZlbnQuc291cmNlIFRoaXMgV2lkZ2V0XG4gICAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZXZlbnQuZnJvbUVsZW1lbnQgVGhlIGVsZW1lbnQgd2hpY2ggbG9zdCBmb2N1cy5cbiAgICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBldmVudC50b0VsZW1lbnQgVGhlIGVsZW1lbnQgd2hpY2ggZ2FpbmVkIGZvY3VzLlxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuV2lkZ2V0fSBldmVudC5mcm9tV2lkZ2V0IFRoZSB3aWRnZXQgd2hpY2ggbG9zdCBmb2N1cy5cbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0LldpZGdldH0gZXZlbnQudG9XaWRnZXQgVGhlIHdpZGdldCB3aGljaCBnYWluZWQgZm9jdXMuXG4gICAgICogQHBhcmFtIHtib29sZWFufSBldmVudC5iYWNrd2FyZHMgYHRydWVgIGlmIHRoZSBgdG9FbGVtZW50YCBpcyBiZWZvcmUgdGhlIGBmcm9tRWxlbWVudGAgaW4gZG9jdW1lbnQgb3JkZXIuXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uRm9jdXNPdXQ6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IFdpZGdldCwgZnJvbUVsZW1lbnQ6IEhUTUxFbGVtZW50LCB0b0VsZW1lbnQ6IEhUTUxFbGVtZW50LCBmcm9tV2lkZ2V0OiBXaWRnZXQsIHRvV2lkZ2V0OiBXaWRnZXQsIGJhY2t3YXJkczogYm9vbGVhbiB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogVHJpZ2dlcmVkIGFmdGVyIGEgd2lkZ2V0IHdhcyBoaWRkZW5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5XaWRnZXR9IGV2ZW50LnNvdXJjZSBUaGUgd2lkZ2V0XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uSGlkZTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogV2lkZ2V0IH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyZWQgd2hlbiBhIHdpZGdldCB3aGljaCBoYWQgYmVlbiBpbiBhIG5vbi12aXNpYmxlIHN0YXRlIGZvciBhbnkgcmVhc29uXG4gICAgICogYWNoaWV2ZXMgdmlzaWJpbGl0eS5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvUmVzb3VyY2VWaWV3I2V2ZW50LXBhaW50KVxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0LldpZGdldH0gZXZlbnQuc291cmNlIFRoZSB3aWRnZXQgYmVpbmcgcGFpbnRlZC5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGV2ZW50LmZpcnN0UGFpbnQgYHRydWVgIGlmIHRoaXMgaXMgdGhlIGZpcnN0IHBhaW50LlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvblBhaW50OiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBXaWRnZXQsIGZpcnN0UGFpbnQ6IGJvb2xlYW4gfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gYSBXaWRnZXQncyByZWFkIG9ubHkgc3RhdGUgaXMgdG9nZ2xlZFxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGV2ZW50LnJlYWRPbmx5IFJlYWQgb25seSBvciBub3RcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25SZWFkT25seTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHJlYWRPbmx5OiBib29sZWFuIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBUaGlzIGV2ZW50IGlzIGZpcmVkIGFmdGVyIGEgd2lkZ2V0J3MgZWxlbWVudHMgaGF2ZSBiZWVuIHN5bmNocm9uaXplZCBkdWUgdG8gYSBkaXJlY3Qgb3IgaW5kaXJlY3QgY2FsbFxuICAgICAqIHRvIFtyZWNvbXBvc2VdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ29yZS93aWRnZXQvV2lkZ2V0I2Z1bmN0aW9uLXJlY29tcG9zZSksIGlmIHRoaXMgcmVzdWx0cyBpbiBzb21lIGNoYW5nZSB0byB0aGUgd2lkZ2V0J3MgcmVuZGVyZWQgRE9NIGVsZW1lbnRzLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvblJlY29tcG9zZTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKCkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIHdoZW4gdGhpcyBSZXNvdXJjZVZpZXcgcmVmcmVzaGVzLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0NhbGVuZGFyLndpZGdldC5SZXNvdXJjZVZpZXd9IGV2ZW50LnNvdXJjZSBUaGUgdHJpZ2dlcmluZyBpbnN0YW5jZS5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25SZWZyZXNoOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBSZXNvdXJjZVZpZXcgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gdGhlIGVuY2Fwc3VsYXRpbmcgZWxlbWVudCBvZiBhIFdpZGdldCByZXNpemVzICpvbmx5IHdoZW4gW21vbml0b3JSZXNpemVdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ29yZS93aWRnZXQvV2lkZ2V0I2NvbmZpZy1tb25pdG9yUmVzaXplKSBpcyBgdHJ1ZWAqLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0LldpZGdldH0gZXZlbnQuc291cmNlIFRoaXMgV2lkZ2V0XG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGV2ZW50LndpZHRoIFRoZSBuZXcgd2lkdGhcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gZXZlbnQuaGVpZ2h0IFRoZSBuZXcgaGVpZ2h0XG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGV2ZW50Lm9sZFdpZHRoIFRoZSBvbGQgd2lkdGhcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gZXZlbnQub2xkSGVpZ2h0IFRoZSBvbGQgaGVpZ2h0XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uUmVzaXplOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBXaWRnZXQsIHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyLCBvbGRXaWR0aDogbnVtYmVyLCBvbGRIZWlnaHQ6IG51bWJlciB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogVHJpZ2dlcmVkIHdoZW4gYSBuZXcgW3Jlc3BvbnNpdmVTdGF0ZV0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9Db3JlL3dpZGdldC9taXhpbi9SZXNwb25zaXZlI2NvbmZpZy1yZXNwb25zaXZlU3RhdGUpIGlzIGFwcGxpZWQuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuV2lkZ2V0fSBldmVudC5zb3VyY2UgVGhlIHdpZGdldCB3aG9zZSBgcmVzcG9uc2l2ZVN0YXRlYCBoYXMgY2hhbmdlZFxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBldmVudC5zdGF0ZSBUaGUgbmV3IHZhbHVlIGZvciB0aGUgd2lkZ2V0J3MgYHJlc3BvbnNpdmVTdGF0ZWBcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZXZlbnQub2xkU3RhdGUgVGhlIHByZXZpb3VzIHZhbHVlIGZvciB0aGUgd2lkZ2V0J3MgYHJlc3BvbnNpdmVTdGF0ZWBcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25SZXNwb25zaXZlU3RhdGVDaGFuZ2U6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IFdpZGdldCwgc3RhdGU6IHN0cmluZywgb2xkU3RhdGU6IHN0cmluZyB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogVHJpZ2dlcmVkIGFmdGVyIGEgd2lkZ2V0IGlzIHNob3duLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0LldpZGdldH0gZXZlbnQuc291cmNlIFRoZSB3aWRnZXRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25TaG93OiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBXaWRnZXQgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEEgaGVhZGVyIFt0b29sXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1BhbmVsI2NvbmZpZy10b29scykgaGFzIGJlZW4gY2xpY2tlZC5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5Ub29sfSBldmVudC5zb3VyY2UgVGhpcyBQYW5lbC5cbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0LlRvb2x9IGV2ZW50LnRvb2wgVGhlIHRvb2wgd2hpY2ggaXMgYmVpbmcgY2xpY2tlZC5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25Ub29sQ2xpY2s6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IFRvb2wsIHRvb2w6IFRvb2wgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIHdoZW4gYSBuZXcgc3ViIHZpZXcgaXMgY3JlYXRlZC5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtDYWxlbmRhci53aWRnZXQuUmVzb3VyY2VWaWV3fSBldmVudC5zb3VyY2UgVGhlIHRyaWdnZXJpbmcgaW5zdGFuY2UuXG4gICAgICogQHBhcmFtIHtDYWxlbmRhclZpZXd9IGV2ZW50LnZpZXcgVGhlIG5ld2x5IGNyZWF0ZWQgc3ViIHZpZXcuXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uVmlld0NyZWF0ZTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogUmVzb3VyY2VWaWV3LCB2aWV3OiBDYWxlbmRhclZpZXcgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGFuZCBhcHBlbmQgdGhlIHVuZGVybHlpbmcgd2lkZ2V0XG4gICAgICovXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0XG4gICAgICAgICAgICBtZSA9IHRoaXMsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZWxlbWVudFJlZixcbiAgICAgICAgICAgICAgICBicnludHVtQ29uZmlnXG4gICAgICAgICAgICB9ID0gbWUsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaW5zdGFuY2VDbGFzcyxcbiAgICAgICAgICAgICAgICBpbnN0YW5jZU5hbWUsXG4gICAgICAgICAgICAgICAgYnJ5bnR1bUNvbmZpZ3MsXG4gICAgICAgICAgICAgICAgYnJ5bnR1bUV2ZW50c1xuICAgICAgICAgICAgfSA9IEJyeW50dW1SZXNvdXJjZVZpZXdDb21wb25lbnQ7XG5cbiAgICAgICAgYnJ5bnR1bUNvbmZpZ3MuZmlsdGVyKHByb3AgPT4gcHJvcCBpbiB0aGlzKS5mb3JFYWNoKHByb3AgPT4ge1xuICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgV3JhcHBlckhlbHBlci5hcHBseVByb3BWYWx1ZShicnludHVtQ29uZmlnLCBwcm9wLCB0aGlzW3Byb3BdKTtcbiAgICAgICAgICAgIGlmIChbJ2ZlYXR1cmVzJywgJ2NvbmZpZyddLmluY2x1ZGVzKHByb3ApKSB7XG4gICAgICAgICAgICAgICAgV3JhcHBlckhlbHBlci5kZXZXYXJuaW5nQ29uZmlnUHJvcChpbnN0YW5jZU5hbWUsIHByb3ApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICBicnludHVtRXZlbnRzLmZpbHRlcihldmVudCA9PiB0aGlzW2V2ZW50XSAmJiB0aGlzW2V2ZW50XS5vYnNlcnZlcnMubGVuZ3RoID4gMCkuZm9yRWFjaChldmVudCA9PiB7XG4gICAgICAgICAgICBjb25zdFxuICAgICAgICAgICAgICAgIHVuY2FwaXRhbGl6ZSA9IChzdHI6IHN0cmluZykgPT4gc3RyLmNoYXJBdCgwKS50b0xvd2VyQ2FzZSgpICsgc3RyLnNsaWNlKDEpLFxuICAgICAgICAgICAgICAgIGV2ZW50TmFtZSA9IChzdHI6IHN0cmluZykgPT4gdW5jYXBpdGFsaXplKHN0ci5zbGljZSgyKSk7XG5cbiAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgIGJyeW50dW1Db25maWcubGlzdGVuZXJzW2V2ZW50TmFtZShldmVudCldID0gZSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgICAgIG1lW2V2ZW50XS5lbWl0KGUpO1xuICAgICAgICAgICAgICAgIC8vIEV2ZW50RW1pdHRlciBkb2VzIG5vdCByZXR1cm4gdmFsdWVzIGluIHRoZSBub3JtYWwgd2F5LCB3b3JrIGFyb3VuZCBpdCBieSBzZXR0aW5nIGByZXR1cm5WYWx1ZWAgZmxhZ1xuICAgICAgICAgICAgICAgIC8vIGluIEFuZ3VsYXIgbGlzdGVuZXJzXG4gICAgICAgICAgICAgICAgcmV0dXJuIGUucmV0dXJuVmFsdWU7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9KTtcblxuICAgICAgICAvLyBJZiBjb21wb25lbnQgaGFzIG5vIGNvbnRhaW5lciBzcGVjaWZpZWQgaW4gY29uZmlnIHRoZW4gdXNlIGFkb3B0IHRvIFdyYXBwZXIncyBlbGVtZW50XG4gICAgICAgIGNvbnN0XG4gICAgICAgICAgICBjb250YWluZXJQYXJhbSA9IFtcbiAgICAgICAgICAgICAgICAnYWRvcHQnLFxuICAgICAgICAgICAgICAgICdhcHBlbmRUbycsXG4gICAgICAgICAgICAgICAgJ2luc2VydEFmdGVyJyxcbiAgICAgICAgICAgICAgICAnaW5zZXJ0QmVmb3JlJ1xuICAgICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgIF0uZmluZChwcm9wID0+IGJyeW50dW1Db25maWdbcHJvcF0pO1xuICAgICAgICBpZiAoIWNvbnRhaW5lclBhcmFtKSB7XG4gICAgICAgICAgICBpZiAoaW5zdGFuY2VOYW1lID09PSAnQnV0dG9uJyB8fCBlbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZ2V0Um9vdE5vZGUoKSBpbnN0YW5jZW9mIFNoYWRvd1Jvb3QpIHtcbiAgICAgICAgICAgICAgICAvLyBCdXR0b24gc2hvdWxkIGFsd2F5cyBiZSA8YT4gb3IgPGJ1dHRvbj4gaW5zaWRlIG93bmVyIGVsZW1lbnRcbiAgICAgICAgICAgICAgICBicnludHVtQ29uZmlnLmFwcGVuZFRvID0gZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgYnJ5bnR1bUNvbmZpZy5hZG9wdCA9IGVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIFdyYXBwZXJIZWxwZXIuZGV2V2FybmluZ0NvbnRhaW5lcihpbnN0YW5jZU5hbWUsIGNvbnRhaW5lclBhcmFtKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgbWUuaW5zdGFuY2UgPSBpbnN0YW5jZU5hbWUgPT09ICdXaWRnZXQnID8gV2lkZ2V0LmNyZWF0ZShicnludHVtQ29uZmlnKSA6IG5ldyBpbnN0YW5jZUNsYXNzKGJyeW50dW1Db25maWcpO1xuXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogV2F0Y2ggZm9yIGNoYW5nZXNcbiAgICAgKiBAcGFyYW0gY2hhbmdlc1xuICAgICAqL1xuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAgICAgY29uc3RcbiAgICAgICAgICAgIHsgaW5zdGFuY2UgfSA9IHRoaXMsXG4gICAgICAgICAgICB7IGluc3RhbmNlTmFtZSB9ID0gQnJ5bnR1bVJlc291cmNlVmlld0NvbXBvbmVudDtcbiAgICAgICAgaWYgKCFpbnN0YW5jZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIEl0ZXJhdGUgb3ZlciBhbGwgY2hhbmdlc1xuICAgICAgICBPYmplY3QuZW50cmllcyhjaGFuZ2VzKS5mb3JFYWNoKChbcHJvcCwgY2hhbmdlXSkgPT4ge1xuICAgICAgICAgICAgY29uc3RcbiAgICAgICAgICAgICAgICBuZXdWYWx1ZSA9IChjaGFuZ2UgYXMgU2ltcGxlQ2hhbmdlKS5jdXJyZW50VmFsdWUsXG4gICAgICAgICAgICAgICAgeyBpbnN0YW5jZSB9ID0gdGhpcyxcbiAgICAgICAgICAgICAgICB7IGJyeW50dW1Db25maWdzT25seSwgYnJ5bnR1bVByb3BzIH0gPSBCcnludHVtUmVzb3VyY2VWaWV3Q29tcG9uZW50O1xuICAgICAgICAgICAgaWYgKGJyeW50dW1Qcm9wcy5pbmNsdWRlcyhwcm9wKSkge1xuICAgICAgICAgICAgICAgIFdyYXBwZXJIZWxwZXIuYXBwbHlQcm9wVmFsdWUoaW5zdGFuY2UsIHByb3AsIG5ld1ZhbHVlLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgaWYgKGJyeW50dW1Db25maWdzT25seS5pbmNsdWRlcyhwcm9wKSkge1xuICAgICAgICAgICAgICAgICAgICBXcmFwcGVySGVscGVyLmRldldhcm5pbmdVcGRhdGVQcm9wKGluc3RhbmNlTmFtZSwgcHJvcCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEZXN0cm95IHRoZSBjb21wb25lbnRcbiAgICAgKi9cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICBpZiAodGhpcy5pbnN0YW5jZSAmJiB0aGlzLmluc3RhbmNlLmRlc3Ryb3kpIHtcbiAgICAgICAgICAgIHRoaXMuaW5zdGFuY2UuZGVzdHJveSgpO1xuICAgICAgICB9XG4gICAgfVxufVxuIl19