@bryntum/taskboard-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.
- package/README.md +44 -0
- package/bryntum-taskboard-angular-thin.d.ts +5 -0
- package/bundles/bryntum-taskboard-angular-thin.umd.js +18990 -0
- package/bundles/bryntum-taskboard-angular-thin.umd.js.map +1 -0
- package/esm2015/bryntum-taskboard-angular-thin.js +5 -0
- package/esm2015/lib/bryntum-column-combo.component.js +937 -0
- package/esm2015/lib/bryntum-column-filter-field.component.js +800 -0
- package/esm2015/lib/bryntum-column-picker-button.component.js +720 -0
- package/esm2015/lib/bryntum-column-scroll-button.component.js +720 -0
- package/esm2015/lib/bryntum-project-combo.component.js +941 -0
- package/esm2015/lib/bryntum-resources-combo.component.js +937 -0
- package/esm2015/lib/bryntum-swimlane-combo.component.js +937 -0
- package/esm2015/lib/bryntum-swimlane-filter-field.component.js +808 -0
- package/esm2015/lib/bryntum-swimlane-picker-button.component.js +720 -0
- package/esm2015/lib/bryntum-swimlane-scroll-button.component.js +720 -0
- package/esm2015/lib/bryntum-tag-combo.component.js +941 -0
- package/esm2015/lib/bryntum-task-board-base.component.js +1679 -0
- package/esm2015/lib/bryntum-task-board-field-filter-picker-group.component.js +763 -0
- package/esm2015/lib/bryntum-task-board-field-filter-picker.component.js +733 -0
- package/esm2015/lib/bryntum-task-board-project-model.component.js +690 -0
- package/esm2015/lib/bryntum-task-board.component.js +1683 -0
- package/esm2015/lib/bryntum-task-color-combo.component.js +795 -0
- package/esm2015/lib/bryntum-task-filter-field.component.js +808 -0
- package/esm2015/lib/bryntum-todo-list-field.component.js +781 -0
- package/esm2015/lib/bryntum-undo-redo.component.js +690 -0
- package/esm2015/lib/bryntum-zoom-slider.component.js +666 -0
- package/esm2015/lib/taskboard.module.js +124 -0
- package/esm2015/lib/wrapper.helper.js +74 -0
- package/esm2015/public-api.js +26 -0
- package/fesm2015/bryntum-taskboard-angular-thin.js +18489 -0
- package/fesm2015/bryntum-taskboard-angular-thin.js.map +1 -0
- package/lib/bryntum-column-combo.component.d.ts +1209 -0
- package/lib/bryntum-column-filter-field.component.d.ts +989 -0
- package/lib/bryntum-column-picker-button.component.d.ts +854 -0
- package/lib/bryntum-column-scroll-button.component.d.ts +854 -0
- package/lib/bryntum-project-combo.component.d.ts +1210 -0
- package/lib/bryntum-resources-combo.component.d.ts +1208 -0
- package/lib/bryntum-swimlane-combo.component.d.ts +1208 -0
- package/lib/bryntum-swimlane-filter-field.component.d.ts +1002 -0
- package/lib/bryntum-swimlane-picker-button.component.d.ts +854 -0
- package/lib/bryntum-swimlane-scroll-button.component.d.ts +854 -0
- package/lib/bryntum-tag-combo.component.d.ts +1213 -0
- package/lib/bryntum-task-board-base.component.d.ts +1922 -0
- package/lib/bryntum-task-board-field-filter-picker-group.component.d.ts +942 -0
- package/lib/bryntum-task-board-field-filter-picker.component.d.ts +890 -0
- package/lib/bryntum-task-board-project-model.component.d.ts +733 -0
- package/lib/bryntum-task-board.component.d.ts +1924 -0
- package/lib/bryntum-task-color-combo.component.d.ts +966 -0
- package/lib/bryntum-task-filter-field.component.d.ts +1002 -0
- package/lib/bryntum-todo-list-field.component.d.ts +956 -0
- package/lib/bryntum-undo-redo.component.d.ts +832 -0
- package/lib/bryntum-zoom-slider.component.d.ts +785 -0
- package/lib/taskboard.module.d.ts +27 -0
- package/lib/wrapper.helper.d.ts +26 -0
- package/package.json +33 -0
- package/public-api.d.ts +22 -0
|
@@ -0,0 +1,937 @@
|
|
|
1
|
+
/* eslint-disable @typescript-eslint/no-unused-vars */
|
|
2
|
+
/**
|
|
3
|
+
* Angular wrapper for Bryntum ResourcesCombo
|
|
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 { ResourcesCombo } from '@bryntum/taskboard-thin';
|
|
9
|
+
import * as i0 from "@angular/core";
|
|
10
|
+
export class BryntumResourcesComboComponent {
|
|
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
|
+
* The default action was performed (an item in the list was selected)
|
|
23
|
+
* @param {object} event Event object
|
|
24
|
+
* @param {Core.widget.Combo} event.source The combo
|
|
25
|
+
* @param {any} event.value The [value](https://bryntum.com/products/taskboard/docs/api/Core/widget/Combo#config-valueField) of the selected record
|
|
26
|
+
* @param {Core.data.Model} event.record Selected record
|
|
27
|
+
* @param {Core.data.Model[]} event.records Selected records as an array if [multiSelect](https://bryntum.com/products/taskboard/docs/api/Core/widget/Combo#config-multiSelect) is `true`
|
|
28
|
+
* @param {boolean} event.userAction `true` if the value change is due to user interaction
|
|
29
|
+
*/
|
|
30
|
+
this.onAction = new EventEmitter();
|
|
31
|
+
/**
|
|
32
|
+
* Fires before an object is destroyed.
|
|
33
|
+
* @param {object} event Event object
|
|
34
|
+
* @param {Core.Base} event.source The Object that is being destroyed.
|
|
35
|
+
*/
|
|
36
|
+
this.onBeforeDestroy = new EventEmitter();
|
|
37
|
+
/**
|
|
38
|
+
* Triggered before a widget is hidden. Return `false` to prevent the action.
|
|
39
|
+
* @param {object} event Event object
|
|
40
|
+
* @param {Core.widget.Widget} event.source The widget being hidden.
|
|
41
|
+
*/
|
|
42
|
+
this.onBeforeHide = new EventEmitter();
|
|
43
|
+
/**
|
|
44
|
+
* Triggered before a widget is shown. Return `false` to prevent the action.
|
|
45
|
+
* @param {object} event Event object
|
|
46
|
+
* @param {Core.widget.Widget,any} event.source The widget being shown
|
|
47
|
+
*/
|
|
48
|
+
this.onBeforeShow = new EventEmitter();
|
|
49
|
+
/**
|
|
50
|
+
* Fires when any other event is fired from the object.
|
|
51
|
+
* ...
|
|
52
|
+
* [View online docs...](https://bryntum.com/products/taskboard/docs/api/TaskBoard/widget/ResourcesCombo#event-catchAll)
|
|
53
|
+
* @param {object} event Event object
|
|
54
|
+
* @param {{[key: string]: any, type: string}} event.event The Object that contains event details
|
|
55
|
+
* @param {string} event.event.type The type of the event which is caught by the listener
|
|
56
|
+
*/
|
|
57
|
+
this.onCatchAll = new EventEmitter();
|
|
58
|
+
/**
|
|
59
|
+
* Fired when this field's value changes.
|
|
60
|
+
* @param {object} event Event object
|
|
61
|
+
* @param {Core.widget.Field,any} event.source This Field
|
|
62
|
+
* @param {string,number,boolean,any} event.value This field's value
|
|
63
|
+
* @param {string,number,boolean,any} event.oldValue This field's previous value
|
|
64
|
+
* @param {boolean} event.valid True if this field is in a valid state
|
|
65
|
+
* @param {Event} event.event The triggering DOM event if any
|
|
66
|
+
* @param {boolean} event.userAction Triggered by user taking an action (`true`) or by setting a value (`false`)
|
|
67
|
+
* @param {boolean} event.checked
|
|
68
|
+
*/
|
|
69
|
+
this.onChange = new EventEmitter();
|
|
70
|
+
/**
|
|
71
|
+
* Fired when this field is [cleared](https://bryntum.com/products/taskboard/docs/api/Core/widget/Field#function-clear).
|
|
72
|
+
* ...
|
|
73
|
+
* [View online docs...](https://bryntum.com/products/taskboard/docs/api/TaskBoard/widget/ResourcesCombo#event-clear)
|
|
74
|
+
* @param {object} event Event object
|
|
75
|
+
* @param {Core.widget.Field,any} event.source This Field
|
|
76
|
+
*/
|
|
77
|
+
this.onClear = new EventEmitter();
|
|
78
|
+
/**
|
|
79
|
+
* Fires when an object is destroyed.
|
|
80
|
+
* @param {object} event Event object
|
|
81
|
+
* @param {Core.Base} event.source The Object that is being destroyed.
|
|
82
|
+
*/
|
|
83
|
+
this.onDestroy = new EventEmitter();
|
|
84
|
+
/**
|
|
85
|
+
* Triggered when a widget's [element](https://bryntum.com/products/taskboard/docs/api/Core/widget/Widget#property-element) is available.
|
|
86
|
+
* @param {object} event Event object
|
|
87
|
+
* @param {HTMLElement} event.element The Widget's element.
|
|
88
|
+
*/
|
|
89
|
+
this.onElementCreated = new EventEmitter();
|
|
90
|
+
/**
|
|
91
|
+
* Fired when focus enters this Widget.
|
|
92
|
+
* @param {object} event Event object
|
|
93
|
+
* @param {Core.widget.Widget} event.source This Widget
|
|
94
|
+
* @param {HTMLElement} event.fromElement The element which lost focus.
|
|
95
|
+
* @param {HTMLElement} event.toElement The element which gained focus.
|
|
96
|
+
* @param {Core.widget.Widget} event.fromWidget The widget which lost focus.
|
|
97
|
+
* @param {Core.widget.Widget} event.toWidget The widget which gained focus.
|
|
98
|
+
* @param {boolean} event.backwards `true` if the `toElement` is before the `fromElement` in document order.
|
|
99
|
+
*/
|
|
100
|
+
this.onFocusIn = new EventEmitter();
|
|
101
|
+
/**
|
|
102
|
+
* Fired when focus exits this Widget's ownership tree. This is different from a `blur` event.
|
|
103
|
+
* focus moving from within this Widget's ownership tree, even if there are floating widgets
|
|
104
|
+
* will not trigger this event. This is when focus exits this widget completely.
|
|
105
|
+
* @param {object} event Event object
|
|
106
|
+
* @param {Core.widget.Widget} event.source This Widget
|
|
107
|
+
* @param {HTMLElement} event.fromElement The element which lost focus.
|
|
108
|
+
* @param {HTMLElement} event.toElement The element which gained focus.
|
|
109
|
+
* @param {Core.widget.Widget} event.fromWidget The widget which lost focus.
|
|
110
|
+
* @param {Core.widget.Widget} event.toWidget The widget which gained focus.
|
|
111
|
+
* @param {boolean} event.backwards `true` if the `toElement` is before the `fromElement` in document order.
|
|
112
|
+
*/
|
|
113
|
+
this.onFocusOut = new EventEmitter();
|
|
114
|
+
/**
|
|
115
|
+
* Triggered after a widget was hidden
|
|
116
|
+
* @param {object} event Event object
|
|
117
|
+
* @param {Core.widget.Widget} event.source The widget
|
|
118
|
+
*/
|
|
119
|
+
this.onHide = new EventEmitter();
|
|
120
|
+
/**
|
|
121
|
+
* User typed into the field. Please note that the value attached to this event is the raw input field value and
|
|
122
|
+
* not the combos value
|
|
123
|
+
* @param {object} event Event object
|
|
124
|
+
* @param {Core.widget.Combo} event.source The combo.
|
|
125
|
+
* @param {string} event.value Raw input value
|
|
126
|
+
* @param {Event} event.event The triggering DOM event if any.
|
|
127
|
+
*/
|
|
128
|
+
this.onInput = new EventEmitter();
|
|
129
|
+
/**
|
|
130
|
+
* Triggered when a widget which had been in a non-visible state for any reason
|
|
131
|
+
* achieves visibility.
|
|
132
|
+
* ...
|
|
133
|
+
* [View online docs...](https://bryntum.com/products/taskboard/docs/api/TaskBoard/widget/ResourcesCombo#event-paint)
|
|
134
|
+
* @param {object} event Event object
|
|
135
|
+
* @param {Core.widget.Widget} event.source The widget being painted.
|
|
136
|
+
* @param {boolean} event.firstPaint `true` if this is the first paint.
|
|
137
|
+
*/
|
|
138
|
+
this.onPaint = new EventEmitter();
|
|
139
|
+
/**
|
|
140
|
+
* Fired when a Widget's read only state is toggled
|
|
141
|
+
* @param {object} event Event object
|
|
142
|
+
* @param {boolean} event.readOnly Read only or not
|
|
143
|
+
*/
|
|
144
|
+
this.onReadOnly = new EventEmitter();
|
|
145
|
+
/**
|
|
146
|
+
* This event is fired after a widget's elements have been synchronized due to a direct or indirect call
|
|
147
|
+
* to [recompose](https://bryntum.com/products/taskboard/docs/api/Core/widget/Widget#function-recompose), if this results in some change to the widget's rendered DOM elements.
|
|
148
|
+
*/
|
|
149
|
+
this.onRecompose = new EventEmitter();
|
|
150
|
+
/**
|
|
151
|
+
* Fired when the encapsulating element of a Widget resizes *only when [monitorResize](https://bryntum.com/products/taskboard/docs/api/Core/widget/Widget#config-monitorResize) is `true`*.
|
|
152
|
+
* @param {object} event Event object
|
|
153
|
+
* @param {Core.widget.Widget} event.source This Widget
|
|
154
|
+
* @param {number} event.width The new width
|
|
155
|
+
* @param {number} event.height The new height
|
|
156
|
+
* @param {number} event.oldWidth The old width
|
|
157
|
+
* @param {number} event.oldHeight The old height
|
|
158
|
+
*/
|
|
159
|
+
this.onResize = new EventEmitter();
|
|
160
|
+
/**
|
|
161
|
+
* An item in the list was selected
|
|
162
|
+
* @param {object} event Event object
|
|
163
|
+
* @param {Core.widget.Combo} event.source The combo
|
|
164
|
+
* @param {Core.data.Model} event.record Selected record
|
|
165
|
+
* @param {Core.data.Model[]} event.records Selected records as an array if [multiSelect](https://bryntum.com/products/taskboard/docs/api/Core/widget/Combo#config-multiSelect) is `true`
|
|
166
|
+
* @param {boolean} event.userAction `true` if the value change is due to user interaction
|
|
167
|
+
*/
|
|
168
|
+
this.onSelect = new EventEmitter();
|
|
169
|
+
/**
|
|
170
|
+
* Triggered after a widget is shown.
|
|
171
|
+
* @param {object} event Event object
|
|
172
|
+
* @param {Core.widget.Widget} event.source The widget
|
|
173
|
+
*/
|
|
174
|
+
this.onShow = new EventEmitter();
|
|
175
|
+
/**
|
|
176
|
+
* User clicked one of this field's [triggers](https://bryntum.com/products/taskboard/docs/api/Core/widget/Field#property-triggers)
|
|
177
|
+
* @param {object} event Event object
|
|
178
|
+
* @param {Core.widget.Field,any} event.source This field
|
|
179
|
+
* @param {Core.widget.Widget} event.trigger The trigger activated by click or touch tap.
|
|
180
|
+
*/
|
|
181
|
+
this.onTrigger = new EventEmitter();
|
|
182
|
+
this.elementRef = element;
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Create and append the underlying widget
|
|
186
|
+
*/
|
|
187
|
+
ngOnInit() {
|
|
188
|
+
const me = this, { elementRef, bryntumConfig } = me, { instanceClass, instanceName, bryntumConfigs, bryntumEvents } = BryntumResourcesComboComponent;
|
|
189
|
+
bryntumConfigs.filter(prop => prop in this).forEach(prop => {
|
|
190
|
+
// @ts-ignore
|
|
191
|
+
WrapperHelper.applyPropValue(bryntumConfig, prop, this[prop]);
|
|
192
|
+
if (['features', 'config'].includes(prop)) {
|
|
193
|
+
WrapperHelper.devWarningConfigProp(instanceName, prop);
|
|
194
|
+
}
|
|
195
|
+
});
|
|
196
|
+
// @ts-ignore
|
|
197
|
+
bryntumEvents.filter(event => this[event] && this[event].observers.length > 0).forEach(event => {
|
|
198
|
+
const uncapitalize = (str) => str.charAt(0).toLowerCase() + str.slice(1), eventName = (str) => uncapitalize(str.slice(2));
|
|
199
|
+
// @ts-ignore
|
|
200
|
+
bryntumConfig.listeners[eventName(event)] = e => {
|
|
201
|
+
// @ts-ignore
|
|
202
|
+
me[event].emit(e);
|
|
203
|
+
// EventEmitter does not return values in the normal way, work around it by setting `returnValue` flag
|
|
204
|
+
// in Angular listeners
|
|
205
|
+
return e.returnValue;
|
|
206
|
+
};
|
|
207
|
+
});
|
|
208
|
+
// If component has no container specified in config then use adopt to Wrapper's element
|
|
209
|
+
const containerParam = [
|
|
210
|
+
'adopt',
|
|
211
|
+
'appendTo',
|
|
212
|
+
'insertAfter',
|
|
213
|
+
'insertBefore'
|
|
214
|
+
// @ts-ignore
|
|
215
|
+
].find(prop => bryntumConfig[prop]);
|
|
216
|
+
if (!containerParam) {
|
|
217
|
+
if (instanceName === 'Button' || elementRef.nativeElement.getRootNode() instanceof ShadowRoot) {
|
|
218
|
+
// Button should always be <a> or <button> inside owner element
|
|
219
|
+
bryntumConfig.appendTo = elementRef.nativeElement;
|
|
220
|
+
}
|
|
221
|
+
else {
|
|
222
|
+
bryntumConfig.adopt = elementRef.nativeElement;
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
else {
|
|
226
|
+
WrapperHelper.devWarningContainer(instanceName, containerParam);
|
|
227
|
+
}
|
|
228
|
+
// @ts-ignore
|
|
229
|
+
me.instance = instanceName === 'Widget' ? Widget.create(bryntumConfig) : new instanceClass(bryntumConfig);
|
|
230
|
+
}
|
|
231
|
+
/**
|
|
232
|
+
* Watch for changes
|
|
233
|
+
* @param changes
|
|
234
|
+
*/
|
|
235
|
+
ngOnChanges(changes) {
|
|
236
|
+
const { instance } = this, { instanceName } = BryntumResourcesComboComponent;
|
|
237
|
+
if (!instance) {
|
|
238
|
+
return;
|
|
239
|
+
}
|
|
240
|
+
// Iterate over all changes
|
|
241
|
+
Object.entries(changes).forEach(([prop, change]) => {
|
|
242
|
+
const newValue = change.currentValue, { instance } = this, { bryntumConfigsOnly, bryntumProps } = BryntumResourcesComboComponent;
|
|
243
|
+
if (bryntumProps.includes(prop)) {
|
|
244
|
+
WrapperHelper.applyPropValue(instance, prop, newValue, false);
|
|
245
|
+
if (bryntumConfigsOnly.includes(prop)) {
|
|
246
|
+
WrapperHelper.devWarningUpdateProp(instanceName, prop);
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
});
|
|
250
|
+
}
|
|
251
|
+
/**
|
|
252
|
+
* Destroy the component
|
|
253
|
+
*/
|
|
254
|
+
ngOnDestroy() {
|
|
255
|
+
// @ts-ignore
|
|
256
|
+
if (this.instance && this.instance.destroy) {
|
|
257
|
+
this.instance.destroy();
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
BryntumResourcesComboComponent.instanceClass = ResourcesCombo;
|
|
262
|
+
BryntumResourcesComboComponent.instanceName = 'ResourcesCombo';
|
|
263
|
+
BryntumResourcesComboComponent.bryntumEvents = [
|
|
264
|
+
'onAction',
|
|
265
|
+
'onBeforeDestroy',
|
|
266
|
+
'onBeforeHide',
|
|
267
|
+
'onBeforeShow',
|
|
268
|
+
'onCatchAll',
|
|
269
|
+
'onChange',
|
|
270
|
+
'onClear',
|
|
271
|
+
'onDestroy',
|
|
272
|
+
'onElementCreated',
|
|
273
|
+
'onFocusIn',
|
|
274
|
+
'onFocusOut',
|
|
275
|
+
'onHide',
|
|
276
|
+
'onInput',
|
|
277
|
+
'onPaint',
|
|
278
|
+
'onReadOnly',
|
|
279
|
+
'onRecompose',
|
|
280
|
+
'onResize',
|
|
281
|
+
'onSelect',
|
|
282
|
+
'onShow',
|
|
283
|
+
'onTrigger'
|
|
284
|
+
];
|
|
285
|
+
BryntumResourcesComboComponent.bryntumFeatureNames = [];
|
|
286
|
+
BryntumResourcesComboComponent.bryntumConfigs = BryntumResourcesComboComponent.bryntumFeatureNames.concat([
|
|
287
|
+
'adopt',
|
|
288
|
+
'align',
|
|
289
|
+
'alignSelf',
|
|
290
|
+
'anchor',
|
|
291
|
+
'appendTo',
|
|
292
|
+
'ariaDescription',
|
|
293
|
+
'ariaLabel',
|
|
294
|
+
'autoComplete',
|
|
295
|
+
'autoExpand',
|
|
296
|
+
'autoSelect',
|
|
297
|
+
'badge',
|
|
298
|
+
'bubbleEvents',
|
|
299
|
+
'cacheLastResult',
|
|
300
|
+
'callOnFunctions',
|
|
301
|
+
'caseSensitive',
|
|
302
|
+
'catchEventHandlerExceptions',
|
|
303
|
+
'centered',
|
|
304
|
+
'chipView',
|
|
305
|
+
'clearable',
|
|
306
|
+
'clearTextOnPickerHide',
|
|
307
|
+
'clearTextOnSelection',
|
|
308
|
+
'clearWhenInputEmpty',
|
|
309
|
+
'cls',
|
|
310
|
+
'color',
|
|
311
|
+
'column',
|
|
312
|
+
'config',
|
|
313
|
+
'constrainTo',
|
|
314
|
+
'container',
|
|
315
|
+
'containValues',
|
|
316
|
+
'contentElementCls',
|
|
317
|
+
'createOnUnmatched',
|
|
318
|
+
'dataField',
|
|
319
|
+
'dataset',
|
|
320
|
+
'defaultBindProperty',
|
|
321
|
+
'detectCSSCompatibilityIssues',
|
|
322
|
+
'disabled',
|
|
323
|
+
'displayField',
|
|
324
|
+
'displayValueRenderer',
|
|
325
|
+
'dock',
|
|
326
|
+
'draggable',
|
|
327
|
+
'editable',
|
|
328
|
+
'elementAttributes',
|
|
329
|
+
'emptyText',
|
|
330
|
+
'encodeFilterParams',
|
|
331
|
+
'extraData',
|
|
332
|
+
'filterOnEnter',
|
|
333
|
+
'filterOperator',
|
|
334
|
+
'filterParamName',
|
|
335
|
+
'filterSelected',
|
|
336
|
+
'flex',
|
|
337
|
+
'floating',
|
|
338
|
+
'height',
|
|
339
|
+
'hidden',
|
|
340
|
+
'hideAnimation',
|
|
341
|
+
'hidePickerOnSelect',
|
|
342
|
+
'hideTrigger',
|
|
343
|
+
'highlightExternalChange',
|
|
344
|
+
'hint',
|
|
345
|
+
'hintHtml',
|
|
346
|
+
'id',
|
|
347
|
+
'ignoreParentReadOnly',
|
|
348
|
+
'inline',
|
|
349
|
+
'inlinePicker',
|
|
350
|
+
'inputAlign',
|
|
351
|
+
'inputAttributes',
|
|
352
|
+
'inputTag',
|
|
353
|
+
'inputType',
|
|
354
|
+
'inputWidth',
|
|
355
|
+
'insertBefore',
|
|
356
|
+
'insertFirst',
|
|
357
|
+
'items',
|
|
358
|
+
'keyMap',
|
|
359
|
+
'keyStrokeChangeDelay',
|
|
360
|
+
'keyStrokeFilterDelay',
|
|
361
|
+
'label',
|
|
362
|
+
'labelCls',
|
|
363
|
+
'labelPosition',
|
|
364
|
+
'labels',
|
|
365
|
+
'labelWidth',
|
|
366
|
+
'listCls',
|
|
367
|
+
'listeners',
|
|
368
|
+
'listItemTpl',
|
|
369
|
+
'localeClass',
|
|
370
|
+
'localizable',
|
|
371
|
+
'localizableProperties',
|
|
372
|
+
'margin',
|
|
373
|
+
'maskDefaults',
|
|
374
|
+
'masked',
|
|
375
|
+
'maxHeight',
|
|
376
|
+
'maximizeOnMobile',
|
|
377
|
+
'maxLength',
|
|
378
|
+
'maxWidth',
|
|
379
|
+
'minChars',
|
|
380
|
+
'minHeight',
|
|
381
|
+
'minLength',
|
|
382
|
+
'minWidth',
|
|
383
|
+
'monitorResize',
|
|
384
|
+
'multiSelect',
|
|
385
|
+
'multiValueSeparator',
|
|
386
|
+
'name',
|
|
387
|
+
'overlayAnchor',
|
|
388
|
+
'owner',
|
|
389
|
+
'picker',
|
|
390
|
+
'pickerAlignElement',
|
|
391
|
+
'pickerWidth',
|
|
392
|
+
'placeholder',
|
|
393
|
+
'positioned',
|
|
394
|
+
'preventTooltipOnTouch',
|
|
395
|
+
'primaryFilter',
|
|
396
|
+
'readOnly',
|
|
397
|
+
'relayStoreEvents',
|
|
398
|
+
'rendition',
|
|
399
|
+
'required',
|
|
400
|
+
'revertOnEscape',
|
|
401
|
+
'ripple',
|
|
402
|
+
'rootElement',
|
|
403
|
+
'rtl',
|
|
404
|
+
'scrollAction',
|
|
405
|
+
'showAnimation',
|
|
406
|
+
'showRequiredIndicator',
|
|
407
|
+
'showTooltipWhenDisabled',
|
|
408
|
+
'skipValidation',
|
|
409
|
+
'span',
|
|
410
|
+
'spellCheck',
|
|
411
|
+
'store',
|
|
412
|
+
'tab',
|
|
413
|
+
'tabIndex',
|
|
414
|
+
'taskBoard',
|
|
415
|
+
'textAlign',
|
|
416
|
+
'title',
|
|
417
|
+
'tooltip',
|
|
418
|
+
'triggerAction',
|
|
419
|
+
'triggers',
|
|
420
|
+
'type',
|
|
421
|
+
'ui',
|
|
422
|
+
'validateFilter',
|
|
423
|
+
'validateOnInput',
|
|
424
|
+
'value',
|
|
425
|
+
'valueField',
|
|
426
|
+
'weight',
|
|
427
|
+
'width',
|
|
428
|
+
'x',
|
|
429
|
+
'y'
|
|
430
|
+
]);
|
|
431
|
+
BryntumResourcesComboComponent.bryntumConfigsOnly = [
|
|
432
|
+
'adopt',
|
|
433
|
+
'align',
|
|
434
|
+
'anchor',
|
|
435
|
+
'ariaDescription',
|
|
436
|
+
'ariaLabel',
|
|
437
|
+
'autoComplete',
|
|
438
|
+
'autoExpand',
|
|
439
|
+
'autoSelect',
|
|
440
|
+
'bubbleEvents',
|
|
441
|
+
'cacheLastResult',
|
|
442
|
+
'caseSensitive',
|
|
443
|
+
'centered',
|
|
444
|
+
'chipView',
|
|
445
|
+
'clearable',
|
|
446
|
+
'clearTextOnPickerHide',
|
|
447
|
+
'clearTextOnSelection',
|
|
448
|
+
'clearWhenInputEmpty',
|
|
449
|
+
'color',
|
|
450
|
+
'config',
|
|
451
|
+
'constrainTo',
|
|
452
|
+
'container',
|
|
453
|
+
'containValues',
|
|
454
|
+
'contentElementCls',
|
|
455
|
+
'createOnUnmatched',
|
|
456
|
+
'dataField',
|
|
457
|
+
'defaultBindProperty',
|
|
458
|
+
'detectCSSCompatibilityIssues',
|
|
459
|
+
'displayField',
|
|
460
|
+
'displayValueRenderer',
|
|
461
|
+
'dock',
|
|
462
|
+
'draggable',
|
|
463
|
+
'elementAttributes',
|
|
464
|
+
'emptyText',
|
|
465
|
+
'encodeFilterParams',
|
|
466
|
+
'filterOnEnter',
|
|
467
|
+
'filterParamName',
|
|
468
|
+
'filterSelected',
|
|
469
|
+
'floating',
|
|
470
|
+
'hideAnimation',
|
|
471
|
+
'hidePickerOnSelect',
|
|
472
|
+
'hideTrigger',
|
|
473
|
+
'highlightExternalChange',
|
|
474
|
+
'hint',
|
|
475
|
+
'hintHtml',
|
|
476
|
+
'ignoreParentReadOnly',
|
|
477
|
+
'inline',
|
|
478
|
+
'inlinePicker',
|
|
479
|
+
'inputAlign',
|
|
480
|
+
'inputAttributes',
|
|
481
|
+
'inputTag',
|
|
482
|
+
'inputType',
|
|
483
|
+
'inputWidth',
|
|
484
|
+
'items',
|
|
485
|
+
'keyStrokeChangeDelay',
|
|
486
|
+
'keyStrokeFilterDelay',
|
|
487
|
+
'labelCls',
|
|
488
|
+
'labelPosition',
|
|
489
|
+
'labels',
|
|
490
|
+
'labelWidth',
|
|
491
|
+
'listCls',
|
|
492
|
+
'listeners',
|
|
493
|
+
'listItemTpl',
|
|
494
|
+
'localeClass',
|
|
495
|
+
'localizable',
|
|
496
|
+
'localizableProperties',
|
|
497
|
+
'maskDefaults',
|
|
498
|
+
'masked',
|
|
499
|
+
'maxLength',
|
|
500
|
+
'minChars',
|
|
501
|
+
'minLength',
|
|
502
|
+
'monitorResize',
|
|
503
|
+
'multiValueSeparator',
|
|
504
|
+
'name',
|
|
505
|
+
'overlayAnchor',
|
|
506
|
+
'owner',
|
|
507
|
+
'pickerAlignElement',
|
|
508
|
+
'pickerWidth',
|
|
509
|
+
'positioned',
|
|
510
|
+
'preventTooltipOnTouch',
|
|
511
|
+
'primaryFilter',
|
|
512
|
+
'relayStoreEvents',
|
|
513
|
+
'revertOnEscape',
|
|
514
|
+
'ripple',
|
|
515
|
+
'rootElement',
|
|
516
|
+
'scrollAction',
|
|
517
|
+
'showAnimation',
|
|
518
|
+
'showTooltipWhenDisabled',
|
|
519
|
+
'skipValidation',
|
|
520
|
+
'spellCheck',
|
|
521
|
+
'tab',
|
|
522
|
+
'tabIndex',
|
|
523
|
+
'taskBoard',
|
|
524
|
+
'textAlign',
|
|
525
|
+
'title',
|
|
526
|
+
'triggerAction',
|
|
527
|
+
'type',
|
|
528
|
+
'ui',
|
|
529
|
+
'validateFilter',
|
|
530
|
+
'validateOnInput',
|
|
531
|
+
'valueField',
|
|
532
|
+
'weight'
|
|
533
|
+
];
|
|
534
|
+
BryntumResourcesComboComponent.bryntumProps = BryntumResourcesComboComponent.bryntumFeatureNames.concat([
|
|
535
|
+
'alignSelf',
|
|
536
|
+
'anchorSize',
|
|
537
|
+
'appendTo',
|
|
538
|
+
'badge',
|
|
539
|
+
'callOnFunctions',
|
|
540
|
+
'catchEventHandlerExceptions',
|
|
541
|
+
'cls',
|
|
542
|
+
'column',
|
|
543
|
+
'content',
|
|
544
|
+
'dataset',
|
|
545
|
+
'disabled',
|
|
546
|
+
'editable',
|
|
547
|
+
'extraData',
|
|
548
|
+
'filterOperator',
|
|
549
|
+
'flex',
|
|
550
|
+
'focusVisible',
|
|
551
|
+
'formula',
|
|
552
|
+
'height',
|
|
553
|
+
'hidden',
|
|
554
|
+
'html',
|
|
555
|
+
'id',
|
|
556
|
+
'input',
|
|
557
|
+
'insertBefore',
|
|
558
|
+
'insertFirst',
|
|
559
|
+
'keyMap',
|
|
560
|
+
'label',
|
|
561
|
+
'margin',
|
|
562
|
+
'maxHeight',
|
|
563
|
+
'maximizeOnMobile',
|
|
564
|
+
'maxWidth',
|
|
565
|
+
'minHeight',
|
|
566
|
+
'minWidth',
|
|
567
|
+
'multiSelect',
|
|
568
|
+
'parent',
|
|
569
|
+
'picker',
|
|
570
|
+
'placeholder',
|
|
571
|
+
'readOnly',
|
|
572
|
+
'rendition',
|
|
573
|
+
'required',
|
|
574
|
+
'rtl',
|
|
575
|
+
'scrollable',
|
|
576
|
+
'showRequiredIndicator',
|
|
577
|
+
'span',
|
|
578
|
+
'store',
|
|
579
|
+
'tooltip',
|
|
580
|
+
'triggers',
|
|
581
|
+
'value',
|
|
582
|
+
'width',
|
|
583
|
+
'x',
|
|
584
|
+
'y'
|
|
585
|
+
]);
|
|
586
|
+
BryntumResourcesComboComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.0", ngImport: i0, type: BryntumResourcesComboComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
587
|
+
BryntumResourcesComboComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.0", type: BryntumResourcesComboComponent, selector: "bryntum-resources-combo", inputs: { adopt: "adopt", align: "align", anchor: "anchor", ariaDescription: "ariaDescription", ariaLabel: "ariaLabel", autoComplete: "autoComplete", autoExpand: "autoExpand", autoSelect: "autoSelect", bubbleEvents: "bubbleEvents", cacheLastResult: "cacheLastResult", caseSensitive: "caseSensitive", centered: "centered", chipView: "chipView", clearable: "clearable", clearTextOnPickerHide: "clearTextOnPickerHide", clearTextOnSelection: "clearTextOnSelection", clearWhenInputEmpty: "clearWhenInputEmpty", color: "color", config: "config", constrainTo: "constrainTo", container: "container", containValues: "containValues", contentElementCls: "contentElementCls", createOnUnmatched: "createOnUnmatched", dataField: "dataField", defaultBindProperty: "defaultBindProperty", detectCSSCompatibilityIssues: "detectCSSCompatibilityIssues", displayField: "displayField", displayValueRenderer: "displayValueRenderer", dock: "dock", draggable: "draggable", elementAttributes: "elementAttributes", emptyText: "emptyText", encodeFilterParams: "encodeFilterParams", filterOnEnter: "filterOnEnter", filterParamName: "filterParamName", filterSelected: "filterSelected", floating: "floating", hideAnimation: "hideAnimation", hidePickerOnSelect: "hidePickerOnSelect", hideTrigger: "hideTrigger", highlightExternalChange: "highlightExternalChange", hint: "hint", hintHtml: "hintHtml", ignoreParentReadOnly: "ignoreParentReadOnly", inline: "inline", inlinePicker: "inlinePicker", inputAlign: "inputAlign", inputAttributes: "inputAttributes", inputTag: "inputTag", inputType: "inputType", inputWidth: "inputWidth", items: "items", keyStrokeChangeDelay: "keyStrokeChangeDelay", keyStrokeFilterDelay: "keyStrokeFilterDelay", labelCls: "labelCls", labelPosition: "labelPosition", labels: "labels", labelWidth: "labelWidth", listCls: "listCls", listeners: "listeners", listItemTpl: "listItemTpl", localeClass: "localeClass", localizable: "localizable", localizableProperties: "localizableProperties", maskDefaults: "maskDefaults", masked: "masked", maxLength: "maxLength", minChars: "minChars", minLength: "minLength", monitorResize: "monitorResize", multiValueSeparator: "multiValueSeparator", name: "name", overlayAnchor: "overlayAnchor", owner: "owner", pickerAlignElement: "pickerAlignElement", pickerWidth: "pickerWidth", positioned: "positioned", preventTooltipOnTouch: "preventTooltipOnTouch", primaryFilter: "primaryFilter", relayStoreEvents: "relayStoreEvents", revertOnEscape: "revertOnEscape", ripple: "ripple", rootElement: "rootElement", scrollAction: "scrollAction", showAnimation: "showAnimation", showTooltipWhenDisabled: "showTooltipWhenDisabled", skipValidation: "skipValidation", spellCheck: "spellCheck", tab: "tab", tabIndex: "tabIndex", taskBoard: "taskBoard", textAlign: "textAlign", title: "title", triggerAction: "triggerAction", type: "type", ui: "ui", validateFilter: "validateFilter", validateOnInput: "validateOnInput", valueField: "valueField", weight: "weight", alignSelf: "alignSelf", appendTo: "appendTo", badge: "badge", callOnFunctions: "callOnFunctions", catchEventHandlerExceptions: "catchEventHandlerExceptions", cls: "cls", column: "column", dataset: "dataset", disabled: "disabled", editable: "editable", extraData: "extraData", filterOperator: "filterOperator", flex: "flex", height: "height", hidden: "hidden", id: "id", insertBefore: "insertBefore", insertFirst: "insertFirst", keyMap: "keyMap", label: "label", margin: "margin", maxHeight: "maxHeight", maximizeOnMobile: "maximizeOnMobile", maxWidth: "maxWidth", minHeight: "minHeight", minWidth: "minWidth", multiSelect: "multiSelect", picker: "picker", placeholder: "placeholder", readOnly: "readOnly", rendition: "rendition", required: "required", rtl: "rtl", showRequiredIndicator: "showRequiredIndicator", span: "span", store: "store", tooltip: "tooltip", triggers: "triggers", value: "value", width: "width", x: "x", y: "y", anchorSize: "anchorSize", content: "content", focusVisible: "focusVisible", formula: "formula", html: "html", input: "input", parent: "parent", scrollable: "scrollable" }, outputs: { onAction: "onAction", onBeforeDestroy: "onBeforeDestroy", onBeforeHide: "onBeforeHide", onBeforeShow: "onBeforeShow", onCatchAll: "onCatchAll", onChange: "onChange", onClear: "onClear", onDestroy: "onDestroy", onElementCreated: "onElementCreated", onFocusIn: "onFocusIn", onFocusOut: "onFocusOut", onHide: "onHide", onInput: "onInput", onPaint: "onPaint", onReadOnly: "onReadOnly", onRecompose: "onRecompose", onResize: "onResize", onSelect: "onSelect", onShow: "onShow", onTrigger: "onTrigger" }, usesOnChanges: true, ngImport: i0, template: '', isInline: true });
|
|
588
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.0", ngImport: i0, type: BryntumResourcesComboComponent, decorators: [{
|
|
589
|
+
type: Component,
|
|
590
|
+
args: [{
|
|
591
|
+
selector: 'bryntum-resources-combo',
|
|
592
|
+
template: ''
|
|
593
|
+
}]
|
|
594
|
+
}], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { adopt: [{
|
|
595
|
+
type: Input
|
|
596
|
+
}], align: [{
|
|
597
|
+
type: Input
|
|
598
|
+
}], anchor: [{
|
|
599
|
+
type: Input
|
|
600
|
+
}], ariaDescription: [{
|
|
601
|
+
type: Input
|
|
602
|
+
}], ariaLabel: [{
|
|
603
|
+
type: Input
|
|
604
|
+
}], autoComplete: [{
|
|
605
|
+
type: Input
|
|
606
|
+
}], autoExpand: [{
|
|
607
|
+
type: Input
|
|
608
|
+
}], autoSelect: [{
|
|
609
|
+
type: Input
|
|
610
|
+
}], bubbleEvents: [{
|
|
611
|
+
type: Input
|
|
612
|
+
}], cacheLastResult: [{
|
|
613
|
+
type: Input
|
|
614
|
+
}], caseSensitive: [{
|
|
615
|
+
type: Input
|
|
616
|
+
}], centered: [{
|
|
617
|
+
type: Input
|
|
618
|
+
}], chipView: [{
|
|
619
|
+
type: Input
|
|
620
|
+
}], clearable: [{
|
|
621
|
+
type: Input
|
|
622
|
+
}], clearTextOnPickerHide: [{
|
|
623
|
+
type: Input
|
|
624
|
+
}], clearTextOnSelection: [{
|
|
625
|
+
type: Input
|
|
626
|
+
}], clearWhenInputEmpty: [{
|
|
627
|
+
type: Input
|
|
628
|
+
}], color: [{
|
|
629
|
+
type: Input
|
|
630
|
+
}], config: [{
|
|
631
|
+
type: Input
|
|
632
|
+
}], constrainTo: [{
|
|
633
|
+
type: Input
|
|
634
|
+
}], container: [{
|
|
635
|
+
type: Input
|
|
636
|
+
}], containValues: [{
|
|
637
|
+
type: Input
|
|
638
|
+
}], contentElementCls: [{
|
|
639
|
+
type: Input
|
|
640
|
+
}], createOnUnmatched: [{
|
|
641
|
+
type: Input
|
|
642
|
+
}], dataField: [{
|
|
643
|
+
type: Input
|
|
644
|
+
}], defaultBindProperty: [{
|
|
645
|
+
type: Input
|
|
646
|
+
}], detectCSSCompatibilityIssues: [{
|
|
647
|
+
type: Input
|
|
648
|
+
}], displayField: [{
|
|
649
|
+
type: Input
|
|
650
|
+
}], displayValueRenderer: [{
|
|
651
|
+
type: Input
|
|
652
|
+
}], dock: [{
|
|
653
|
+
type: Input
|
|
654
|
+
}], draggable: [{
|
|
655
|
+
type: Input
|
|
656
|
+
}], elementAttributes: [{
|
|
657
|
+
type: Input
|
|
658
|
+
}], emptyText: [{
|
|
659
|
+
type: Input
|
|
660
|
+
}], encodeFilterParams: [{
|
|
661
|
+
type: Input
|
|
662
|
+
}], filterOnEnter: [{
|
|
663
|
+
type: Input
|
|
664
|
+
}], filterParamName: [{
|
|
665
|
+
type: Input
|
|
666
|
+
}], filterSelected: [{
|
|
667
|
+
type: Input
|
|
668
|
+
}], floating: [{
|
|
669
|
+
type: Input
|
|
670
|
+
}], hideAnimation: [{
|
|
671
|
+
type: Input
|
|
672
|
+
}], hidePickerOnSelect: [{
|
|
673
|
+
type: Input
|
|
674
|
+
}], hideTrigger: [{
|
|
675
|
+
type: Input
|
|
676
|
+
}], highlightExternalChange: [{
|
|
677
|
+
type: Input
|
|
678
|
+
}], hint: [{
|
|
679
|
+
type: Input
|
|
680
|
+
}], hintHtml: [{
|
|
681
|
+
type: Input
|
|
682
|
+
}], ignoreParentReadOnly: [{
|
|
683
|
+
type: Input
|
|
684
|
+
}], inline: [{
|
|
685
|
+
type: Input
|
|
686
|
+
}], inlinePicker: [{
|
|
687
|
+
type: Input
|
|
688
|
+
}], inputAlign: [{
|
|
689
|
+
type: Input
|
|
690
|
+
}], inputAttributes: [{
|
|
691
|
+
type: Input
|
|
692
|
+
}], inputTag: [{
|
|
693
|
+
type: Input
|
|
694
|
+
}], inputType: [{
|
|
695
|
+
type: Input
|
|
696
|
+
}], inputWidth: [{
|
|
697
|
+
type: Input
|
|
698
|
+
}], items: [{
|
|
699
|
+
type: Input
|
|
700
|
+
}], keyStrokeChangeDelay: [{
|
|
701
|
+
type: Input
|
|
702
|
+
}], keyStrokeFilterDelay: [{
|
|
703
|
+
type: Input
|
|
704
|
+
}], labelCls: [{
|
|
705
|
+
type: Input
|
|
706
|
+
}], labelPosition: [{
|
|
707
|
+
type: Input
|
|
708
|
+
}], labels: [{
|
|
709
|
+
type: Input
|
|
710
|
+
}], labelWidth: [{
|
|
711
|
+
type: Input
|
|
712
|
+
}], listCls: [{
|
|
713
|
+
type: Input
|
|
714
|
+
}], listeners: [{
|
|
715
|
+
type: Input
|
|
716
|
+
}], listItemTpl: [{
|
|
717
|
+
type: Input
|
|
718
|
+
}], localeClass: [{
|
|
719
|
+
type: Input
|
|
720
|
+
}], localizable: [{
|
|
721
|
+
type: Input
|
|
722
|
+
}], localizableProperties: [{
|
|
723
|
+
type: Input
|
|
724
|
+
}], maskDefaults: [{
|
|
725
|
+
type: Input
|
|
726
|
+
}], masked: [{
|
|
727
|
+
type: Input
|
|
728
|
+
}], maxLength: [{
|
|
729
|
+
type: Input
|
|
730
|
+
}], minChars: [{
|
|
731
|
+
type: Input
|
|
732
|
+
}], minLength: [{
|
|
733
|
+
type: Input
|
|
734
|
+
}], monitorResize: [{
|
|
735
|
+
type: Input
|
|
736
|
+
}], multiValueSeparator: [{
|
|
737
|
+
type: Input
|
|
738
|
+
}], name: [{
|
|
739
|
+
type: Input
|
|
740
|
+
}], overlayAnchor: [{
|
|
741
|
+
type: Input
|
|
742
|
+
}], owner: [{
|
|
743
|
+
type: Input
|
|
744
|
+
}], pickerAlignElement: [{
|
|
745
|
+
type: Input
|
|
746
|
+
}], pickerWidth: [{
|
|
747
|
+
type: Input
|
|
748
|
+
}], positioned: [{
|
|
749
|
+
type: Input
|
|
750
|
+
}], preventTooltipOnTouch: [{
|
|
751
|
+
type: Input
|
|
752
|
+
}], primaryFilter: [{
|
|
753
|
+
type: Input
|
|
754
|
+
}], relayStoreEvents: [{
|
|
755
|
+
type: Input
|
|
756
|
+
}], revertOnEscape: [{
|
|
757
|
+
type: Input
|
|
758
|
+
}], ripple: [{
|
|
759
|
+
type: Input
|
|
760
|
+
}], rootElement: [{
|
|
761
|
+
type: Input
|
|
762
|
+
}], scrollAction: [{
|
|
763
|
+
type: Input
|
|
764
|
+
}], showAnimation: [{
|
|
765
|
+
type: Input
|
|
766
|
+
}], showTooltipWhenDisabled: [{
|
|
767
|
+
type: Input
|
|
768
|
+
}], skipValidation: [{
|
|
769
|
+
type: Input
|
|
770
|
+
}], spellCheck: [{
|
|
771
|
+
type: Input
|
|
772
|
+
}], tab: [{
|
|
773
|
+
type: Input
|
|
774
|
+
}], tabIndex: [{
|
|
775
|
+
type: Input
|
|
776
|
+
}], taskBoard: [{
|
|
777
|
+
type: Input
|
|
778
|
+
}], textAlign: [{
|
|
779
|
+
type: Input
|
|
780
|
+
}], title: [{
|
|
781
|
+
type: Input
|
|
782
|
+
}], triggerAction: [{
|
|
783
|
+
type: Input
|
|
784
|
+
}], type: [{
|
|
785
|
+
type: Input
|
|
786
|
+
}], ui: [{
|
|
787
|
+
type: Input
|
|
788
|
+
}], validateFilter: [{
|
|
789
|
+
type: Input
|
|
790
|
+
}], validateOnInput: [{
|
|
791
|
+
type: Input
|
|
792
|
+
}], valueField: [{
|
|
793
|
+
type: Input
|
|
794
|
+
}], weight: [{
|
|
795
|
+
type: Input
|
|
796
|
+
}], alignSelf: [{
|
|
797
|
+
type: Input
|
|
798
|
+
}], appendTo: [{
|
|
799
|
+
type: Input
|
|
800
|
+
}], badge: [{
|
|
801
|
+
type: Input
|
|
802
|
+
}], callOnFunctions: [{
|
|
803
|
+
type: Input
|
|
804
|
+
}], catchEventHandlerExceptions: [{
|
|
805
|
+
type: Input
|
|
806
|
+
}], cls: [{
|
|
807
|
+
type: Input
|
|
808
|
+
}], column: [{
|
|
809
|
+
type: Input
|
|
810
|
+
}], dataset: [{
|
|
811
|
+
type: Input
|
|
812
|
+
}], disabled: [{
|
|
813
|
+
type: Input
|
|
814
|
+
}], editable: [{
|
|
815
|
+
type: Input
|
|
816
|
+
}], extraData: [{
|
|
817
|
+
type: Input
|
|
818
|
+
}], filterOperator: [{
|
|
819
|
+
type: Input
|
|
820
|
+
}], flex: [{
|
|
821
|
+
type: Input
|
|
822
|
+
}], height: [{
|
|
823
|
+
type: Input
|
|
824
|
+
}], hidden: [{
|
|
825
|
+
type: Input
|
|
826
|
+
}], id: [{
|
|
827
|
+
type: Input
|
|
828
|
+
}], insertBefore: [{
|
|
829
|
+
type: Input
|
|
830
|
+
}], insertFirst: [{
|
|
831
|
+
type: Input
|
|
832
|
+
}], keyMap: [{
|
|
833
|
+
type: Input
|
|
834
|
+
}], label: [{
|
|
835
|
+
type: Input
|
|
836
|
+
}], margin: [{
|
|
837
|
+
type: Input
|
|
838
|
+
}], maxHeight: [{
|
|
839
|
+
type: Input
|
|
840
|
+
}], maximizeOnMobile: [{
|
|
841
|
+
type: Input
|
|
842
|
+
}], maxWidth: [{
|
|
843
|
+
type: Input
|
|
844
|
+
}], minHeight: [{
|
|
845
|
+
type: Input
|
|
846
|
+
}], minWidth: [{
|
|
847
|
+
type: Input
|
|
848
|
+
}], multiSelect: [{
|
|
849
|
+
type: Input
|
|
850
|
+
}], picker: [{
|
|
851
|
+
type: Input
|
|
852
|
+
}], placeholder: [{
|
|
853
|
+
type: Input
|
|
854
|
+
}], readOnly: [{
|
|
855
|
+
type: Input
|
|
856
|
+
}], rendition: [{
|
|
857
|
+
type: Input
|
|
858
|
+
}], required: [{
|
|
859
|
+
type: Input
|
|
860
|
+
}], rtl: [{
|
|
861
|
+
type: Input
|
|
862
|
+
}], showRequiredIndicator: [{
|
|
863
|
+
type: Input
|
|
864
|
+
}], span: [{
|
|
865
|
+
type: Input
|
|
866
|
+
}], store: [{
|
|
867
|
+
type: Input
|
|
868
|
+
}], tooltip: [{
|
|
869
|
+
type: Input
|
|
870
|
+
}], triggers: [{
|
|
871
|
+
type: Input
|
|
872
|
+
}], value: [{
|
|
873
|
+
type: Input
|
|
874
|
+
}], width: [{
|
|
875
|
+
type: Input
|
|
876
|
+
}], x: [{
|
|
877
|
+
type: Input
|
|
878
|
+
}], y: [{
|
|
879
|
+
type: Input
|
|
880
|
+
}], anchorSize: [{
|
|
881
|
+
type: Input
|
|
882
|
+
}], content: [{
|
|
883
|
+
type: Input
|
|
884
|
+
}], focusVisible: [{
|
|
885
|
+
type: Input
|
|
886
|
+
}], formula: [{
|
|
887
|
+
type: Input
|
|
888
|
+
}], html: [{
|
|
889
|
+
type: Input
|
|
890
|
+
}], input: [{
|
|
891
|
+
type: Input
|
|
892
|
+
}], parent: [{
|
|
893
|
+
type: Input
|
|
894
|
+
}], scrollable: [{
|
|
895
|
+
type: Input
|
|
896
|
+
}], onAction: [{
|
|
897
|
+
type: Output
|
|
898
|
+
}], onBeforeDestroy: [{
|
|
899
|
+
type: Output
|
|
900
|
+
}], onBeforeHide: [{
|
|
901
|
+
type: Output
|
|
902
|
+
}], onBeforeShow: [{
|
|
903
|
+
type: Output
|
|
904
|
+
}], onCatchAll: [{
|
|
905
|
+
type: Output
|
|
906
|
+
}], onChange: [{
|
|
907
|
+
type: Output
|
|
908
|
+
}], onClear: [{
|
|
909
|
+
type: Output
|
|
910
|
+
}], onDestroy: [{
|
|
911
|
+
type: Output
|
|
912
|
+
}], onElementCreated: [{
|
|
913
|
+
type: Output
|
|
914
|
+
}], onFocusIn: [{
|
|
915
|
+
type: Output
|
|
916
|
+
}], onFocusOut: [{
|
|
917
|
+
type: Output
|
|
918
|
+
}], onHide: [{
|
|
919
|
+
type: Output
|
|
920
|
+
}], onInput: [{
|
|
921
|
+
type: Output
|
|
922
|
+
}], onPaint: [{
|
|
923
|
+
type: Output
|
|
924
|
+
}], onReadOnly: [{
|
|
925
|
+
type: Output
|
|
926
|
+
}], onRecompose: [{
|
|
927
|
+
type: Output
|
|
928
|
+
}], onResize: [{
|
|
929
|
+
type: Output
|
|
930
|
+
}], onSelect: [{
|
|
931
|
+
type: Output
|
|
932
|
+
}], onShow: [{
|
|
933
|
+
type: Output
|
|
934
|
+
}], onTrigger: [{
|
|
935
|
+
type: Output
|
|
936
|
+
}] } });
|
|
937
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJ5bnR1bS1yZXNvdXJjZXMtY29tYm8uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vY29tcG9uZW50L3NyYy9saWIvYnJ5bnR1bS1yZXNvdXJjZXMtY29tYm8uY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHNEQUFzRDtBQUN0RDs7R0FFRztBQUVILE9BQU8sRUFBRSxTQUFTLEVBQWMsWUFBWSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQWtELE1BQU0sZUFBZSxDQUFDO0FBRW5JLE9BQU8sYUFBYSxNQUFNLGtCQUFrQixDQUFDO0FBRTdDLE9BQU8sRUFBZ1YsTUFBTSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDMVgsT0FBTyxFQUFnQyxjQUFjLEVBQXNDLE1BQU0seUJBQXlCLENBQUM7O0FBbTFCM0gsTUFBTSxPQUFPLDhCQUE4QjtJQTRWdkMsWUFBWSxPQUFtQjtRQVR2QixrQkFBYSxHQUFHO1lBQ3BCLEtBQUssRUFBYyxTQUFTO1lBQzVCLFFBQVEsRUFBVyxTQUFTO1lBQzVCLElBQUksRUFBZSxTQUFTO1lBQzVCLGdCQUFnQixFQUFHLElBQUk7WUFDdkIsUUFBUSxFQUFXLEVBQUU7WUFDckIsU0FBUyxFQUFVLEVBQUU7U0FDeEIsQ0FBQztRQTRLRixrQkFBa0I7UUFDbEI7Ozs7Ozs7O1dBUUc7UUFDTyxhQUFRLEdBQVEsSUFBSSxZQUFZLEVBQWlILENBQUM7UUFDNUo7Ozs7V0FJRztRQUNPLG9CQUFlLEdBQVEsSUFBSSxZQUFZLEVBQThDLENBQUM7UUFDaEc7Ozs7V0FJRztRQUNPLGlCQUFZLEdBQVEsSUFBSSxZQUFZLEVBQXlFLENBQUM7UUFDeEg7Ozs7V0FJRztRQUNPLGlCQUFZLEdBQVEsSUFBSSxZQUFZLEVBQTZFLENBQUM7UUFDNUg7Ozs7Ozs7V0FPRztRQUNPLGVBQVUsR0FBUSxJQUFJLFlBQVksRUFBZ0UsQ0FBQztRQUM3Rzs7Ozs7Ozs7OztXQVVHO1FBQ08sYUFBUSxHQUFR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Z0JBU0csT0FBTztzQkFBaEIsTUFBTTtnQkFVRyxPQUFPO3NCQUFoQixNQUFNO2dCQU1HLFVBQVU7c0JBQW5CLE1BQU07Z0JBS0csV0FBVztzQkFBcEIsTUFBTTtnQkFVRyxRQUFRO3NCQUFqQixNQUFNO2dCQVNHLFFBQVE7c0JBQWpCLE1BQU07Z0JBTUcsTUFBTTtzQkFBZixNQUFNO2dCQU9HLFNBQVM7c0JBQWxCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnMgKi9cbi8qKlxuICogQW5ndWxhciB3cmFwcGVyIGZvciBCcnludHVtIFJlc291cmNlc0NvbWJvXG4gKi9cblxuaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIE91dHB1dCwgSW5wdXQsIFNpbXBsZUNoYW5nZSwgU2ltcGxlQ2hhbmdlcywgT25EZXN0cm95LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IFdyYXBwZXJIZWxwZXIgZnJvbSAnLi93cmFwcGVyLmhlbHBlcic7XG5cbmltcG9ydCB7IEFsaWduU3BlYywgQmFzZSwgQ2hpcFZpZXdDb25maWcsIENvbGxlY3Rpb25Db21wYXJlT3BlcmF0b3IsIENvbGxlY3Rpb25GaWx0ZXJDb25maWcsIENvbWJvLCBDb21ib01vZGVsLCBEb21Db25maWcsIER1cmF0aW9uLCBEdXJhdGlvbkNvbmZpZywgRmllbGQsIEZpZWxkQ29udGFpbmVyLCBGaWVsZENvbnRhaW5lckNvbmZpZywgRmllbGRUcmlnZ2VyQ29uZmlnLCBLZXlNYXBDb25maWcsIExpc3QsIExpc3RDb25maWcsIE1hc2tDb25maWcsIE1vZGVsLCBSZWN0YW5nbGUsIFNjcm9sbGVyLCBTdG9yZSwgU3RvcmVDb25maWcsIFRhYkNvbmZpZywgVG9vbHRpcENvbmZpZywgVnVlQ29uZmlnLCBXaWRnZXQgfSBmcm9tICdAYnJ5bnR1bS9jb3JlLXRoaW4nO1xuaW1wb3J0IHsgVGFza0JvYXJkQ29udGFpbmVySXRlbUNvbmZpZywgUmVzb3VyY2VzQ29tYm8sIFJlc291cmNlc0NvbWJvTGlzdGVuZXJzLCBUYXNrQm9hcmQgfSBmcm9tICdAYnJ5bnR1bS90YXNrYm9hcmQtdGhpbic7XG5cbmltcG9ydCB7IFN0cmluZ0hlbHBlciB9IGZyb20gJ0BicnludHVtL2NvcmUtdGhpbic7XG5cbmV4cG9ydCB0eXBlIEJyeW50dW1SZXNvdXJjZXNDb21ib1Byb3BzID0ge1xuICAgIC8vIENvbmZpZ3NcbiAgICAvKipcbiAgICAgKiBFbGVtZW50IChvciBlbGVtZW50IGlkKSB0byBhZG9wdCBhcyB0aGlzIFdpZGdldCdzIGVuY2Fwc3VsYXRpbmcgZWxlbWVudC4gVGhlIHdpZGdldCdzXG4gICAgICogY29udGVudCB3aWxsIGJlIHBsYWNlZCBpbnNpZGUgdGhpcyBlbGVtZW50LlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3Rhc2tib2FyZC9kb2NzL2FwaS9UYXNrQm9hcmQvd2lkZ2V0L1Jlc291cmNlc0NvbWJvI2NvbmZpZy1hZG9wdClcbiAgICAgKi9cbiAgICBhZG9wdCA/IDogSFRNTEVsZW1lbnR8c3RyaW5nXG4gICAgLyoqXG4gICAgICogKk9ubHkgdmFsaWQgaWYgdGhpcyBXaWRnZXQgaXMgW2Zsb2F0aW5nXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3Rhc2tib2FyZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9XaWRnZXQjY29uZmlnLWZsb2F0aW5nKS4qXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvdGFza2JvYXJkL2RvY3MvYXBpL1Rhc2tCb2FyZC93aWRnZXQvUmVzb3VyY2VzQ29tYm8jY29uZmlnLWFsaWduKVxuICAgICAqL1xuICAgIGFsaWduID8gOiBBbGlnblNwZWN8c3RyaW5nXG4gICAgLyoqXG4gICAgICogV2hlbiB0aGlzIHdpZGdldCBpcyBhIGNoaWxkIG9mIGEgW0NvbnRhaW5lcl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy90YXNrYm9hcmQvZG9jcy9hcGkvQ29yZS93aWRnZXQvQ29udGFpbmVyKSwgaXQgd2lsbCBieSBkZWZhdWx0IGJlIHBhcnRpY2lwYXRpbmcgaW4gYVxuICAgICAqIGZsZXhib3ggbGF5b3V0LiBUaGlzIGNvbmZpZyBhbGxvd3MgeW91IHRvIHNldCB0aGlzIHdpZGdldCdzXG4gICAgICogW2FsaWduLXNlbGZdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy9hbGlnbi1zZWxmKSBzdHlsZS5cbiAgICAgKi9cbiAgICBhbGlnblNlbGYgPyA6IHN0cmluZ1xuICAgIC8qKlxuICAgICAqICpPbmx5IHZhbGlkIGlmIHRoaXMgV2lkZ2V0IGlzIFtmbG9hdGluZ10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy90YXNrYm9hcmQvZG9jcy9hcGkvQ29yZS93aWRnZXQvV2lkZ2V0I2NvbmZpZy1mbG9hdGluZykgYW5kIGJlaW5nIHNob3duIHRocm91Z2ggW3Nob3dCeV0oI0NvcmUvd2lkZ2V0L1dpZGdldCNmdW5jdGlvbi1zaG93QnkpLipcbiAgICAgKiBgdHJ1ZWAgdG8gc2hvdyBhIGNvbm5lY3RvciBhcnJvdyBwb2ludGluZyB0byB0aGUgYWxpZ24gdGFyZ2V0LlxuICAgICAqL1xuICAgIGFuY2hvciA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIEVsZW1lbnQgKG9yIHRoZSBpZCBvZiBhbiBlbGVtZW50KSB0byBhcHBlbmQgdGhpcyB3aWRnZXQncyBlbGVtZW50IHRvLiBDYW4gYmUgY29uZmlndXJlZCwgb3Igc2V0IG9uY2UgYXRcbiAgICAgKiBydW50aW1lLiBUbyBhY2Nlc3MgdGhlIGVsZW1lbnQgb2YgYSByZW5kZXJlZCB3aWRnZXQsIHNlZSBbZWxlbWVudF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy90YXNrYm9hcmQvZG9jcy9hcGkvQ29yZS93aWRnZXQvV2lkZ2V0I3Byb3BlcnR5LWVsZW1lbnQpLlxuICAgICAqL1xuICAgIGFwcGVuZFRvID8gOiBIVE1MRWxlbWVudHxzdHJpbmdcbiAgICAvKipcbiAgICAgKiBBIGxvY2FsaXphYmxlIHN0cmluZyAoTWF5IGNvbnRhaW4gYCdMe30nYCB0b2tlbnMgd2hpY2ggcmVzb2x2ZSBpbiB0aGUgbG9jYWxlIGZpbGUpIHRvIGluamVjdFxuICAgICAqIGludG8gYW4gZWxlbWVudCB3aGljaCB3aWxsIGJlIGxpbmtlZCB1c2luZyB0aGUgYGFyaWEtZGVzY3JpYmVkYnlgIGF0dHJpYnV0ZS5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy90YXNrYm9hcmQvZG9jcy9hcGkvVGFza0JvYXJkL3dpZGdldC9SZXNvdXJjZXNDb21ibyNjb25maWctYXJpYURlc2NyaXB0aW9uKVxuICAgICAqL1xuICAgIGFyaWFEZXNjcmlwdGlvbiA/IDogc3RyaW5nXG4gICAgLyoqXG4gICAgICogQSBsb2NhbGl6YWJsZSBzdHJpbmcgKE1heSBjb250YWluIGAnTHt9J2AgdG9rZW5zIHdoaWNoIHJlc29sdmUgaW4gdGhlIGxvY2FsZSBmaWxlKSB0byBpbmplY3QgYXNcbiAgICAgKiB0aGUgYGFyaWEtbGFiZWxgIGF0dHJpYnV0ZS5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy90YXNrYm9hcmQvZG9jcy9hcGkvVGFza0JvYXJkL3dpZGdldC9SZXNvdXJjZXNDb21ibyNjb25maWctYXJpYUxhYmVsKVxuICAgICAqL1xuICAgIGFyaWFMYWJlbCA/IDogc3RyaW5nXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgbmF0aXZlIGBhdXRvY29tcGxldGVgIHByb3BlcnR5IG9mIHRoZSB1bmRlcmx5aW5nIGlucHV0IGVsZW1lbnQuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBwbGVhc2UgcmVmZXIgdG9cbiAgICAgKiBbTUROXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0F0dHJpYnV0ZXMvYXV0b2NvbXBsZXRlKVxuICAgICAqL1xuICAgIGF1dG9Db21wbGV0ZSA/IDogc3RyaW5nXG4gICAgLyoqXG4gICAgICogQ29uZmlndXJlIGFzIGB0cnVlYCB0byBoYXZlIHRoZSBwaWNrZXIgZXhwYW5kIHVwb24gZm9jdXMgZW50ZXIuXG4gICAgICovXG4gICAgYXV0b0V4cGFuZCA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIFNwZWNpZnkgYHRydWVgIHRvIGF1dG8gc2VsZWN0IGZpZWxkIGNvbnRlbnRzIG9uIGZvY3VzXG4gICAgICovXG4gICAgYXV0b1NlbGVjdCA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIEluaXRpYWwgdGV4dCB0byBzaG93IGluIGJhZGdlLlxuICAgICAqL1xuICAgIGJhZGdlID8gOiBzdHJpbmdcbiAgICAvKipcbiAgICAgKiBBbiBvYmplY3Qgd2hlcmUgcHJvcGVydHkgbmFtZXMgd2l0aCBhIHRydXRoeSB2YWx1ZSBpbmRpY2F0ZSB3aGljaCBldmVudHMgc2hvdWxkIGJ1YmJsZSB1cCB0aGUgb3duZXJzaGlwXG4gICAgICogaGllcmFyY2h5IHdoZW4gdHJpZ2dlcmVkLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3Rhc2tib2FyZC9kb2NzL2FwaS9UYXNrQm9hcmQvd2lkZ2V0L1Jlc291cmNlc0NvbWJvI2NvbmZpZy1idWJibGVFdmVudHMpXG4gICAgICovXG4gICAgYnViYmxlRXZlbnRzID8gOiBvYmplY3RcbiAgICAvKipcbiAgICAgKiBFbmFibGUgY2FjaGluZyBvZiB0aGUgbGFzdCByZXRyaWV2ZWQgcmVzdWx0IHVudGlsIHRoZSB0aW1lb3V0IGlzIHJlYWNoZWQuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvdGFza2JvYXJkL2RvY3MvYXBpL1Rhc2tCb2FyZC93aWRnZXQvUmVzb3VyY2VzQ29tYm8jY29uZmlnLWNhY2hlTGFzdFJlc3VsdClcbiAgICAgKi9cbiAgICBjYWNoZUxhc3RSZXN1bHQgPyA6IG51bWJlcnxzdHJpbmd8RHVyYXRpb258RHVyYXRpb25Db25maWdcbiAgICAvKipcbiAgICAgKiBTZXQgdG8gYGZhbHNlYCB0byBub3QgY2FsbCBvblhYWCBtZXRob2QgbmFtZXMgKGUuZy4gYG9uU2hvd2AsIGBvbkNsaWNrYCksIGFzIGFuIGVhc3kgd2F5IHRvIGxpc3RlbiBmb3IgZXZlbnRzLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3Rhc2tib2FyZC9kb2NzL2FwaS9UYXNrQm9hcmQvd2lkZ2V0L1Jlc291cmNlc0NvbWJvI2NvbmZpZy1jYWxsT25GdW5jdGlvbnMpXG4gICAgICovXG4gICAgY2FsbE9uRnVuY3Rpb25zID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogQ29uZmlndXJlIGFzIGB0cnVlYCB0byBmb3JjZSBjYXNlIG1hdGNoaW5nIHdoZW4gZmlsdGVyaW5nIHRoZSBkcm9wZG93biBsaXN0IGJhc2VkIHVwb24gdGhlIHR5cGVkIHZhbHVlLlxuICAgICAqL1xuICAgIGNhc2VTZW5zaXRpdmUgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBCeSBkZWZhdWx0LCBpZiBhbiBldmVudCBoYW5kbGVyIHRocm93cyBhbiBleGNlcHRpb24sIHRoZSBlcnJvciBwcm9wYWdhdGVzIHVwIHRoZSBzdGFjayBhbmQgdGhlXG4gICAgICogYXBwbGljYXRpb24gc3RhdGUgaXMgdW5kZWZpbmVkLiBDb2RlIHdoaWNoIGZvbGxvd3MgdGhlIGV2ZW50IGhhbmRsZXIgd2lsbCAqbm90KiBiZSBleGVjdXRlZC5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy90YXNrYm9hcmQvZG9jcy9hcGkvVGFza0JvYXJkL3dpZGdldC9SZXNvdXJjZXNDb21ibyNjb25maWctY2F0Y2hFdmVudEhhbmRsZXJFeGNlcHRpb25zKVxuICAgICAqL1xuICAgIGNhdGNoRXZlbnRIYW5kbGVyRXhjZXB0aW9ucyA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqICpPbmx5IHZhbGlkIGlmIHRoaXMgV2lkZ2V0IGlzIFtmbG9hdGluZ10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy90YXNrYm9hcmQvZG9jcy9hcGkvQ29yZS93aWRnZXQvV2lkZ2V0I2NvbmZpZy1mbG9hdGluZykuKlxuICAgICAqIFNldCB0byBgdHJ1ZWAgdG8gY2VudHJlIHRoZSBXaWRnZXQgaW4gYnJvd3NlciB2aWV3cG9ydCBzcGFjZS5cbiAgICAgKi9cbiAgICBjZW50ZXJlZCA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIEEgY29uZmlnIG9iamVjdCB0byBjb25maWd1cmUgdGhlIFtDaGlwVmlld10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy90YXNrYm9hcmQvZG9jcy9hcGkvQ29yZS93aWRnZXQvQ2hpcFZpZXcpIHRvIGRpc3BsYXkgdGhlXG4gICAgICogc2VsZWN0ZWQgdmFsdWUgc2V0IHdoZW4gW211bHRpU2VsZWN0XShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3Rhc2tib2FyZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9Db21ibyNjb25maWctbXVsdGlTZWxlY3QpIGlzIGB0cnVlYC5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy90YXNrYm9hcmQvZG9jcy9hcGkvVGFza0JvYXJkL3dpZGdldC9SZXNvdXJjZXNDb21ibyNjb25maWctY2hpcFZpZXcpXG4gICAgICovXG4gICAgY2hpcFZpZXcgPyA6IENoaXBWaWV3Q29uZmlnXG4gICAgLyoqXG4gICAgICogU2hvdyBhIHRyaWdnZXIgdG8gY2xlYXIgZmllbGQsIGlmIHRoaXMgZmllbGQgaXMgbm90IFtyZWFkT25seV0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy90YXNrYm9hcmQvZG9jcy9hcGkvQ29yZS93aWRnZXQvRmllbGQjY29uZmlnLXJlYWRPbmx5KS4gVGhlIHRyaWdnZXIgaXMgYXZhaWxhYmxlXG4gICAgICogaW4gdGhlIFt0cmlnZ2Vyc10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy90YXNrYm9hcmQvZG9jcy9hcGkvQ29yZS93aWRnZXQvRmllbGQjcHJvcGVydHktdHJpZ2dlcnMpIG9iamVjdCB1bmRlciB0aGUgbmFtZSBgY2xlYXJgLiBNYXkgYWxzbyBiZSBhbiBvYmplY3Qgd2hpY2hcbiAgICAgKiBjb25maWd1cmVzIHRoZSBgY2xlYXJgIFt0cmlnZ2VyXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3Rhc2tib2FyZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9GaWVsZCNwcm9wZXJ0eS10cmlnZ2VycykuXG4gICAgICovXG4gICAgY2xlYXJhYmxlID8gOiBib29sZWFufEZpZWxkVHJpZ2dlckNvbmZpZ1xuICAgIC8qKlxuICAgICAqIGB0cnVlYCB0byBjbGVhciB2YWx1ZSB0eXBlZCB0byBhIG11bHRpc2VsZWN0IGNvbWJvIHdoZW4gcGlja2VyIGlzIGNvbGxhcHNlZFxuICAgICAqL1xuICAgIGNsZWFyVGV4dE9uUGlja2VySGlkZSA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIFNwZWNpZnkgYGZhbHNlYCB0byBub3QgY2xlYXIgdmFsdWUgdHlwZWQgdG8gYSBtdWx0aXNlbGVjdCBjb21ibyB3aGVuIGFuIGl0ZW0gaXMgc2VsZWN0ZWQuXG4gICAgICovXG4gICAgY2xlYXJUZXh0T25TZWxlY3Rpb24gPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBTZXQgdG8gYHRydWVgIHRvIGNsZWFyIHRoaXMgZmllbGQgd2hlbiB1c2VyIGVtcHRpZXMgdGhlIGlucHV0IGVsZW1lbnRcbiAgICAgKi9cbiAgICBjbGVhcldoZW5JbnB1dEVtcHR5ID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogQ3VzdG9tIENTUyBjbGFzc2VzIHRvIGFkZCB0byBlbGVtZW50LlxuICAgICAqIE1heSBiZSBzcGVjaWZpZWQgYXMgYSBzcGFjZSBzZXBhcmF0ZWQgc3RyaW5nLCBvciBhcyBhbiBvYmplY3QgaW4gd2hpY2ggcHJvcGVydHkgbmFtZXNcbiAgICAgKiB3aXRoIHRydXRoeSB2YWx1ZXMgYXJlIHVzZWQgYXMgdGhlIGNsYXNzIG5hbWVzOlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3Rhc2tib2FyZC9kb2NzL2FwaS9UYXNrQm9hcmQvd2lkZ2V0L1Jlc291cmNlc0NvbWJvI2NvbmZpZy1jbHMpXG4gICAgICovXG4gICAgY2xzID8gOiBzdHJpbmd8b2JqZWN0XG4gICAgLyoqXG4gICAgICogQXBwbGllcyB0aGUgc3BlY2lmaWVkIGNvbG9yIHRvIHRoZSB3aWRnZXQsIGJ5IHNldHRpbmcgdGhlIGAtLWItcHJpbWFyeWAgQ1NTIHZhcmlhYmxlIGluIHRoZSB3aWRnZXRzXG4gICAgICogYHN0eWxlYCBibG9jay5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy90YXNrYm9hcmQvZG9jcy9hcGkvVGFza0JvYXJkL3dpZGdldC9SZXNvdXJjZXNDb21ibyNjb25maWctY29sb3IpXG4gICAgICovXG4gICAgY29sb3IgPyA6IHN0cmluZ1xuICAgIC8qKlxuICAgICAqIFByb2dyYW1tYXRpYyBjb250cm9sIG92ZXIgd2hpY2ggY29sdW1uIHRvIHN0YXJ0IGluIHdoZW4gdXNlZCBpbiBhIGdyaWQgbGF5b3V0LlxuICAgICAqL1xuICAgIGNvbHVtbiA/IDogbnVtYmVyXG4gICAgY29uZmlnID8gOiBvYmplY3RcbiAgICAvKipcbiAgICAgKiAqT25seSB2YWxpZCBpZiB0aGlzIFdpZGdldCBpcyBbZmxvYXRpbmddKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvdGFza2JvYXJkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1dpZGdldCNjb25maWctZmxvYXRpbmcpIG9yIFtwb3NpdGlvbmVkXSgjQ29yZS93aWRnZXQvV2lkZ2V0I2NvbmZpZy1wb3NpdGlvbmVkKS4qXG4gICAgICogRWxlbWVudCwgV2lkZ2V0IG9yIFJlY3RhbmdsZSB0byB3aGljaCB0aGlzIFdpZGdldCBpcyBjb25zdHJhaW5lZC5cbiAgICAgKi9cbiAgICBjb25zdHJhaW5UbyA/IDogSFRNTEVsZW1lbnR8V2lkZ2V0fFJlY3RhbmdsZVxuICAgIC8qKlxuICAgICAqIFRoZSBjb25maWd1cmF0aW9uIGZvciBhZGRpdGlvbmFsIGl0ZW1zIGFzc29jaWF0ZWQgdG8gdGhpcyBmaWVsZC4gVGhpcyBpcyB0eXBpY2FsbHkgdXNlZCB0byBhZGQgY29udGV4dHVhbFxuICAgICAqIGZpZWxkcyByZWxhdGVkIHRvIGEgW2NoZWNrYm94XShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3Rhc2tib2FyZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9DaGVja2JveCkgb3IgW3JhZGlvIGJ1dHRvbl0oI0NvcmUvd2lkZ2V0L1JhZGlvKS4gU2VlXG4gICAgICogdGhlc2UgY2xhc3NlcyBmb3IgZXhhbXBsZXMgb2YgbmVzdGVkIGZpZWxkcy5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy90YXNrYm9hcmQvZG9jcy9hcGkvVGFza0JvYXJkL3dpZGdldC9SZXNvdXJjZXNDb21ibyNjb25maWctY29udGFpbmVyKVxuICAgICAqL1xuICAgIGNvbnRhaW5lciA/IDogUmVjb3JkPHN0cmluZywgVGFza0JvYXJkQ29udGFpbmVySXRlbUNvbmZpZz58VGFza0JvYXJkQ29udGFpbmVySXRlbUNvbmZpZ1tdfEZpZWxkQ29udGFpbmVyQ29uZmlnfEZpZWxkQ29udGFpbmVyXG4gICAgLyoqXG4gICAgICogVGhlIGNvbmZpZyBjb250cm9scyBob3cgdGhlIHZhbHVlIG9mIG5lc3RlZCBpdGVtcyBhcmUgaGFuZGxlZCB3aGVuIGEgcGFyZW50IGNvbnRhaW5lciBnZXRzIG9yIHNldHMgaXRzXG4gICAgICogW3ZhbHVlc10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy90YXNrYm9hcmQvZG9jcy9hcGkvQ29yZS93aWRnZXQvQ29udGFpbmVyI3Byb3BlcnR5LXZhbHVlcykuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvdGFza2JvYXJkL2RvY3MvYXBpL1Rhc2tCb2FyZC93aWRnZXQvUmVzb3VyY2VzQ29tYm8jY29uZmlnLWNvbnRhaW5WYWx1ZXMpXG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5GaWVsZH0gZmllbGQgRmllbGQgaW5zdGFuY2VcbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICBjb250YWluVmFsdWVzID8gOiBib29sZWFufHN0cmluZ3woKGZpZWxkOiBGaWVsZCkgPT4gYm9vbGVhbilcbiAgICAvKipcbiAgICAgKiBDdXN0b20gQ1NTIGNsYXNzZXMgdG8gYWRkIHRvIHRoZSBbY29udGVudEVsZW1lbnRdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvdGFza2JvYXJkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1dpZGdldCNwcm9wZXJ0eS1jb250ZW50RWxlbWVudCkuXG4gICAgICogTWF5IGJlIHNwZWNpZmllZCBhcyBhIHNwYWNlIHNlcGFyYXRlZCBzdHJpbmcsIG9yIGFzIGFuIG9iamVjdCBpbiB3aGljaCBwcm9wZXJ0eSBuYW1lc1xuICAgICAqIHdpdGggdHJ1dGh5IHZhbHVlcyBhcmUgdXNlZCBhcyB0aGUgY2xhc3MgbmFtZXM6XG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvdGFza2JvYXJkL2RvY3MvYXBpL1Rhc2tCb2FyZC93aWRnZXQvUmVzb3VyY2VzQ29tYm8jY29uZmlnLWNvbnRlbnRFbGVtZW50Q2xzKVxuICAgICAqL1xuICAgIGNvbnRlbnRFbGVtZW50Q2xzID8gOiBzdHJpbmd8b2JqZWN0XG4gICAgLyoqXG4gICAgICogSWYgY29uZmlndXJlZCBhcyBgdHJ1ZWAsIHRoaXMgbWVhbnMgdGhhdCB3aGVuIGFuIHVubWF0Y2hlZCBzdHJpbmcgaXMgdHlwZWQgaW50byB0aGVcbiAgICAgKiBjb21ibydzIGlucHV0IGZpZWxkLCBhbmQgYEVOVEVSYCwgb3IgdGhlIFttdWx0aVZhbHVlU2VwYXJhdG9yXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3Rhc2tib2FyZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9Db21ibyNjb25maWctbXVsdGlWYWx1ZVNlcGFyYXRvcikgaXMgdHlwZWQsXG4gICAgICogYSBuZXcgcmVjb3JkIHdpbGwgYmUgY3JlYXRlZCB1c2luZyB0aGUgdHlwZWQgc3RyaW5nIGFzIHRoZSBbZGlzcGxheUZpZWxkXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3Rhc2tib2FyZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9Db21ibyNjb25maWctZGlzcGxheUZpZWxkKS5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy90YXNrYm9hcmQvZG9jcy9hcGkvVGFza0JvYXJkL3dpZGdldC9SZXNvdXJjZXNDb21ibyNjb25maWctY3JlYXRlT25Vbm1hdGNoZWQpXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgUmVjb3JkIG5hbWVcbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0LkNvbWJvfSBjb21ibyBDb21ibyBpbnN0YW5jZVxuICAgICAqIEByZXR1cm5zIHtDb3JlLmRhdGEuTW9kZWx9IE5ldyByZWNvcmRcbiAgICAgKi9cbiAgICBjcmVhdGVPblVubWF0Y2hlZCA/IDogKChuYW1lOiBzdHJpbmcsIGNvbWJvOiBDb21ibykgPT4gTW9kZWwpfHN0cmluZ3xib29sZWFuXG4gICAgLyoqXG4gICAgICogV2hlbiB0aGlzIFdpZGdldCBjb25maWd1cmF0aW9uIGlzIHVzZWQgaW4gdGhlIEdyaWQncyBSb3dFeHBhbmRlciBmZWF0dXJlJ3MgYHdpZGdldGAgY29uZmlnLCBwcm92aWRlIHRoZVxuICAgICAqIGZpZWxkIG9uIHRoZSBleHBhbmRlZCByZWNvcmQgdG8gdXNlIGZvciBwb3B1bGF0aW5nIHRoaXMgd2lkZ2V0J3Mgc3RvcmUgKGlmIGFwcGxpY2FibGUpXG4gICAgICovXG4gICAgZGF0YUZpZWxkID8gOiBzdHJpbmdcbiAgICAvKipcbiAgICAgKiBPYmplY3QgdG8gYXBwbHkgdG8gZWxlbWVudHMgZGF0YXNldCAoZWFjaCBrZXkgd2lsbCBiZSB1c2VkIGFzIGEgZGF0YS1hdHRyaWJ1dGUgb24gdGhlIGVsZW1lbnQpXG4gICAgICovXG4gICAgZGF0YXNldCA/IDogUmVjb3JkPHN0cmluZywgc3RyaW5nPlxuICAgIC8qKlxuICAgICAqIFRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSB0byBzZXQgd2hlbiBhIHNpbmdsZSB2YWx1ZSBpcyB0byBiZSBhcHBsaWVkIHRvIHRoaXMgV2lkZ2V0LiBTdWNoIGFzIHdoZW4gdXNlZFxuICAgICAqIGluIGEgZ3JpZCBXaWRnZXRDb2x1bW4sIHRoaXMgaXMgdGhlIHByb3BlcnR5IHRvIHdoaWNoIHRoZSBjb2x1bW4ncyBgZmllbGRgIGlzIGFwcGxpZWQuXG4gICAgICovXG4gICAgZGVmYXVsdEJpbmRQcm9wZXJ0eSA/IDogc3RyaW5nXG4gICAgLyoqXG4gICAgICogQ2hlY2sgZm9yIENTUyBjb21wYXRpYmlsaXR5IGlzc3VlcyB3aGVuIHVwZ3JhZGluZyB0byB2Ny4gUGVyZm9ybXMgdGhlIGZvbGxvd2luZyBjaGVja3M6XG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvdGFza2JvYXJkL2RvY3MvYXBpL1Rhc2tCb2FyZC93aWRnZXQvUmVzb3VyY2VzQ29tYm8jY29uZmlnLWRldGVjdENTU0NvbXBhdGliaWxpdHlJc3N1ZXMpXG4gICAgICovXG4gICAgZGV0ZWN0Q1NTQ29tcGF0aWJpbGl0eUlzc3VlcyA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIERpc2FibGUgb3IgZW5hYmxlIHRoZSB3aWRnZXQuIEl0IGlzIHNpbWlsYXIgdG8gW3JlYWRPbmx5XShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3Rhc2tib2FyZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9XaWRnZXQjY29uZmlnLXJlYWRPbmx5KSBleGNlcHQgYSBkaXNhYmxlZCB3aWRnZXRcbiAgICAgKiBjYW5ub3QgYmUgZm9jdXNlZCwgdXNlcyBhIGRpZmZlcmVudCByZW5kaXRpb24gKHVzdWFsbHkgZ3JleWlzaCkgYW5kIGRvZXMgbm90IGFsbG93IHNlbGVjdGluZyBpdHMgdmFsdWUuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvdGFza2JvYXJkL2RvY3MvYXBpL1Rhc2tCb2FyZC93aWRnZXQvUmVzb3VyY2VzQ29tYm8jY29uZmlnLWRpc2FibGVkKVxuICAgICAqL1xuICAgIGRpc2FibGVkID8gOiBib29sZWFufCdpbmVydCdcbiAgICAvKipcbiAgICAgKiBGaWVsZCB1c2VkIGZvciBpdGVtIHRleHQgd2hlbiBwb3B1bGF0aW5nIGZyb20gc3RvcmVcbiAgICAgKi9cbiAgICBkaXNwbGF5RmllbGQgPyA6IHN0cmluZ1xuICAgIC8qKlxuICAgICAqIFRlbXBsYXRlIGZ1bmN0aW9uIHRoYXQgY2FuIGJlIHVzZWQgdG8gY3VzdG9taXplIHRoZSBkaXNwbGF5ZWQgdmFsdWVcbiAgICAgKiBAcGFyYW0ge0NvcmUuZGF0YS5Nb2RlbH0gcmVjb3JkIFRoZSByZWNvcmQgdG8gcHJvdmlkZSBhIHRleHR1YWwgdmFsdWUgZm9yXG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5Db21ib30gY29tYm8gQSByZWZlcmVuY2UgdG8gdGhpcyBDb21ib1xuICAgICAqIEByZXR1cm5zIHtzdHJpbmcsdm9pZH1cbiAgICAgKi9cbiAgICBkaXNwbGF5VmFsdWVSZW5kZXJlciA/IDogKHJlY29yZDogTW9kZWx8Q29tYm9Nb2RlbCwgY29tYm86IENvbWJvKSA9PiBzdHJpbmd8dm9pZFxuICAgIC8qKlxuICAgICAqIENvbnRyb2xzIHRoZSBwbGFjZW1lbnQgb2YgdGhpcyB3aWRnZXQgd2hlbiBpdCBpcyBhZGRlZCB0byBhIFtwYW5lbCdzIF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy90YXNrYm9hcmQvZG9jcy9hcGkvQ29yZS93aWRnZXQvUGFuZWwpXG4gICAgICogW3N0cmlwcyBjb2xsZWN0aW9uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3Rhc2tib2FyZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9QYW5lbCNjb25maWctc3RyaXBzKS4gVHlwaWNhbCB2YWx1ZXMgZm9yIHRoaXMgY29uZmlnIGFyZSBgJ3RvcCdgLFxuICAgICAqIGAnYm90dG9tJ2AsIGAnbGVmdCdgLCBvciBgJ3JpZ2h0J2AsIHdoaWNoIGNhdXNlIHRoZSB3aWRnZXQgdG8gYmUgcGxhY2VkIG9uIHRoYXQgc2lkZSBvZiB0aGUgcGFuZWwnc1xuICAgICAqIGJvZHkuIFN1Y2ggd2lkZ2V0cyBhcmUgY2FsbGVkIFwiZWRnZSBzdHJpcHNcIi5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy90YXNrYm9hcmQvZG9jcy9hcGkvVGFza0JvYXJkL3dpZGdldC9SZXNvdXJjZXNDb21ibyNjb25maWctZG9jaylcbiAgICAgKi9cbiAgICBkb2NrID8gOiAndG9wJ3wnYm90dG9tJ3wnbGVmdCd8J3JpZ2h0J3wnc3RhcnQnfCdlbmQnfCdoZWFkZXInfCdwcmUtaGVhZGVyJ3xvYmplY3RcbiAgICAvKipcbiAgICAgKiAqT25seSB2YWxpZCBpZiB0aGlzIFdpZGdldCBpcyBbZmxvYXRpbmddKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvdGFza2JvYXJkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1dpZGdldCNjb25maWctZmxvYXRpbmcpLipcbiAgICAgKiBTZXQgdG8gYHRydWVgIHRvIGJlIGFibGUgdG8gZHJhZyBhIHdpZGdldCBmcmVlbHkgb24gdGhlIHBhZ2UuIE9yIHNldCB0byBhbiBvYmplY3Qgd2l0aCBhIMK0aGFuZGxlU2VsZWN0b3LCtFxuICAgICAqIHByb3BlcnR5IHdoaWNoIGNvbnRyb2xzIHdoZW4gYSBkcmFnIHNob3VsZCBzdGFydC5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy90YXNrYm9hcmQvZG9jcy9hcGkvVGFza0JvYXJkL3dpZGdldC9SZXNvdXJjZXNDb21ibyNjb25maWctZHJhZ2dhYmxlKVxuICAgICAqL1xuICAgIGRyYWdnYWJsZSA/IDogYm9vbGVhbnx7XG4gICAgICAgIGhhbmRsZVNlbGVjdG9yPzogc3RyaW5nXG4gICAgfVxuICAgIC8qKlxuICAgICAqIFVzZXIgY2FuIGVkaXQgdGV4dCBpbiB0ZXh0IGZpZWxkIChvdGhlcndpc2Ugb25seSBwaWNrIGZyb20gYXR0YWNoZWQgcGlja2VyKVxuICAgICAqL1xuICAgIGVkaXRhYmxlID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogQW4gb2JqZWN0IHNwZWNpZnlpbmcgYXR0cmlidXRlcyB0byBhc3NpZ24gdG8gdGhlIHJvb3QgZWxlbWVudCBvZiB0aGlzIHdpZGdldC5cbiAgICAgKiBTZXQgYG51bGxgIHZhbHVlIHRvIGF0dHJpYnV0ZSB0byByZW1vdmUgaXQuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvdGFza2JvYXJkL2RvY3MvYXBpL1Rhc2tCb2FyZC93aWRnZXQvUmVzb3VyY2VzQ29tYm8jY29uZmlnLWVsZW1lbnRBdHRyaWJ1dGVzKVxuICAgICAqL1xuICAgIGVsZW1lbnRBdHRyaWJ1dGVzID8gOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmd8bnVsbD5cbiAgICAvKipcbiAgICAgKiBUZXh0IHRvIGRpc3BsYXkgaW4gdGhlIGRyb3AgZG93biB3aGVuIHRoZXJlIGFyZSBubyBpdGVtcyBpbiB0aGUgdW5kZXJseWluZyBzdG9yZS5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy90YXNrYm9hcmQvZG9jcy9hcGkvVGFza0JvYXJkL3dpZGdldC9SZXNvdXJjZXNDb21ibyNjb25maWctZW1wdHlUZXh0KVxuICAgICAqL1xuICAgIGVtcHR5VGV4dCA/IDogc3RyaW5nXG4gICAgLyoqXG4gICAgICogQSBmdW5jdGlvbiB3aGljaCBjcmVhdGVzIGFuIGFycmF5IG9mIHZhbHVlcyBmb3IgdGhlIFtmaWx0ZXJQYXJhbU5hbWVdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvdGFza2JvYXJkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L0NvbWJvI2NvbmZpZy1maWx0ZXJQYXJhbU5hbWUpIHRvIHBhc3NcbiAgICAgKiBhbnkgZmlsdGVycyB0byB0aGUgc2VydmVyIHVwb24gbG9hZC5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy90YXNrYm9hcmQvZG9jcy9hcGkvVGFza0JvYXJkL3dpZGdldC9SZXNvdXJjZXNDb21ibyNjb25maWctZW5jb2RlRmlsdGVyUGFyYW1zKVxuICAgICAqIEBwYXJhbSB7b2JqZWN0W119IGZpbHRlcnMgZmlsdGVyc1xuICAgICAqIEByZXR1cm5zIHtvYmplY3RbXX0gYXJyYXkgb2YgdmFsdWVzXG4gICAgICovXG4gICAgZW5jb2RlRmlsdGVyUGFyYW1zID8gOiAoZmlsdGVyczogb2JqZWN0W10pID0+IG9iamVjdFtdXG4gICAgZXh0cmFEYXRhID8gOiBhbnlcbiAgICAvKipcbiAgICAgKiBJZiBgZmFsc2VgLCBmaWx0ZXJpbmcgd2lsbCBiZSB0cmlnZ2VyZWQgb25jZSB5b3UgZXhjZWVkIFttaW5DaGFyc10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy90YXNrYm9hcmQvZG9jcy9hcGkvQ29yZS93aWRnZXQvQ29tYm8jY29uZmlnLW1pbkNoYXJzKS4gVG8gZmlsdGVyIG9ubHkgd2hlblxuICAgICAqIGhpdHRpbmcgRW50ZXIga2V5LCBzZXQgdGhpcyB0byBgdHJ1ZWA7XG4gICAgICovXG4gICAgZmlsdGVyT25FbnRlciA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIFRoZSBuYW1lIG9mIGFuIG9wZXJhdG9yIHR5cGUgYXMgaW1wbGVtZW50ZWQgaW4gW29wZXJhdG9yXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3Rhc2tib2FyZC9kb2NzL2FwaS9Db3JlL3V0aWwvQ29sbGVjdGlvbkZpbHRlciNjb25maWctb3BlcmF0b3IpXG4gICAgICogdG8gdXNlIHdoZW4gZmlsdGVyaW5nIHRoZSBkcm9wZG93biBsaXN0IGJhc2VkIHVwb24gdGhlIHR5cGVkIHZhbHVlLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3Rhc2tib2FyZC9kb2NzL2FwaS9UYXNrQm9hcmQvd2lkZ2V0L1Jlc291cmNlc0NvbWJvI2NvbmZpZy1maWx0ZXJPcGVyYXRvcilcbiAgICAgKi9cbiAgICBmaWx0ZXJPcGVyYXRvciA/IDogQ29sbGVjdGlvbkNvbXBhcmVPcGVyYXRvclxuICAgIC8qKlxuICAgICAqIElmIHRoZSBkcm9wZG93biBpcyB0byBiZSBwb3B1bGF0ZWQgd2l0aCBhIGZpbHRlcmVkIHF1ZXJ5IHRvIGEgcmVtb3RlIHNlcnZlciwgc3BlY2lmeSB0aGVcbiAgICAgKiBuYW1lIG9mIHRoZSBwYXJhbWV0ZXIgdG8gcGFzcyB0aGUgdHlwZWQgc3RyaW5nIGhlcmUuIEJ5IGRlZmF1bHQsIHRoZSBzdHJpbmcgaXMgc2ltcGx5IHNlbnRcbiAgICAgKiBhcyB0aGUgdmFsdWUgb2YgdGhlIHBhcmFtZXRlci4gRm9yIHNwZWNpYWwgZW5jb2RpbmcsIGNvbmZpZ3VyZSB0aGUgY29tYm8gd2l0aCBbZW5jb2RlRmlsdGVyUGFyYW1zXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3Rhc2tib2FyZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9Db21ibyNjb25maWctZW5jb2RlRmlsdGVyUGFyYW1zKVxuICAgICAqL1xuICAgIGZpbHRlclBhcmFtTmFtZSA/IDogc3RyaW5nXG4gICAgLyoqXG4gICAgICogV2hlbiBbbXVsdGlTZWxlY3RdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvdGFza2JvYXJkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L0NvbWJvI2NvbmZpZy1tdWx0aVNlbGVjdCkgaXMgYHRydWVgLCB5b3UgbWF5IGNvbmZpZ3VyZSBgZmlsdGVyU2VsZWN0ZWRgIGFzXG4gICAgICogYHRydWVgIHRvIGhpZGUgaXRlbXMgaW4gdGhlIGRyb3Bkb3duIHdoZW4gdGhleSBhcmUgYWRkZWQgdG8gdGhlIHNlbGVjdGlvbi5cbiAgICAgKiBJdCB3aWxsIGFwcGVhciBhcyBpZiB0aGUgcmVxdWVzdGVkIGl0ZW0gaGFzIFwibW92ZWRcIiBpbnRvIHRoZSBmaWVsZCdzXG4gICAgICogW0NoaXBWaWV3XShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3Rhc2tib2FyZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9Db21ibyNjb25maWctY2hpcFZpZXcpLlxuICAgICAqL1xuICAgIGZpbHRlclNlbGVjdGVkID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogV2hlbiB0aGlzIHdpZGdldCBpcyBhIGNoaWxkIG9mIGEgW0NvbnRhaW5lcl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy90YXNrYm9hcmQvZG9jcy9hcGkvQ29yZS93aWRnZXQvQ29udGFpbmVyKSwgaXQgd2lsbCBieSBkZWZhdWx0IGJlIHBhcnRpY2lwYXRpbmcgaW4gYVxuICAgICAqIGZsZXhib3ggbGF5b3V0LiBUaGlzIGNvbmZpZyBhbGxvd3MgeW91IHRvIHNldCB0aGlzIHdpZGdldCdzXG4gICAgICogW2ZsZXhdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy9mbGV4KSBzdHlsZS5cbiAgICAgKiBUaGlzIG1heSBiZSBjb25maWd1cmVkIGFzIGEgc2luZ2xlIG51bWJlciBvciBhIGAmbHQ7ZmxleC1ncm93Jmd0OyAmbHQ7ZmxleC1zaHJpbmsmZ3Q7ICZsdDtmbGV4LWJhc2lzJmd0O2AgZm9ybWF0IHN0cmluZy5cbiAgICAgKiBudW1lcmljLW9ubHkgdmFsdWVzIGFyZSBpbnRlcnByZXRlZCBhcyB0aGUgYGZsZXgtZ3Jvd2AgdmFsdWUuXG4gICAgICovXG4gICAgZmxleCA/IDogbnVtYmVyfHN0cmluZ1xuICAgIC8qKlxuICAgICAqIFNldCB0byBgdHJ1ZWAgdG8gbW92ZSB0aGUgd2lkZ2V0IG91dCBvZiB0aGUgZG9jdW1lbnQgZmxvdyBhbmQgcG9zaXRpb24gaXRcbiAgICAgKiBhYnNvbHV0ZWx5IGluIGJyb3dzZXIgdmlld3BvcnQgc3BhY2UuXG4gICAgICovXG4gICAgZmxvYXRpbmcgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBXaWRnZXQncyBoZWlnaHQsIHVzZWQgdG8gc2V0IGVsZW1lbnQgYHN0eWxlLmhlaWdodGAuIEVpdGhlciBzcGVjaWZ5IGEgdmFsaWQgaGVpZ2h0IHN0cmluZyBvciBhIG51bWJlcixcbiAgICAgKiB3aGljaCB3aWxsIGdldCAncHgnIGFwcGVuZGVkLiBXZSByZWNvbW1lbmQgdXNpbmcgQ1NTIGFzIHRoZSBwcmltYXJ5IHdheSB0byBjb250cm9sIGhlaWdodCwgYnV0IGluIHNvbWVcbiAgICAgKiBjYXNlcyB0aGlzIGNvbmZpZyBpcyBjb252ZW5pZW50LlxuICAgICAqL1xuICAgIGhlaWdodCA/IDogc3RyaW5nfG51bWJlclxuICAgIC8qKlxuICAgICAqIENvbmZpZ3VyZSB3aXRoIHRydWUgdG8gbWFrZSB3aWRnZXQgaW5pdGlhbGx5IGhpZGRlbi5cbiAgICAgKi9cbiAgICBoaWRkZW4gPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiAqT25seSB2YWxpZCBpZiB0aGlzIFdpZGdldCBpcyBbZmxvYXRpbmddKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvdGFza2JvYXJkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1dpZGdldCNjb25maWctZmxvYXRpbmcpLipcbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy90YXNrYm9hcmQvZG9jcy9hcGkvVGFza0JvYXJkL3dpZGdldC9SZXNvdXJjZXNDb21ibyNjb25maWctaGlkZUFuaW1hdGlvbilcbiAgICAgKi9cbiAgICBoaWRlQW5pbWF0aW9uID8gOiBib29sZWFufG9iamVjdFxuICAgIC8qKlxuICAgICAqIEJ5IGRlZmF1bHQsIHRoZSBwaWNrZXIgaXMgaGlkZGVuIG9uIHNlbGVjdGlvbiBpbiBzaW5nbGUgc2VsZWN0IG1vZGUsIGFuZFxuICAgICAqIHJlbWFpbnMgdG8gYWxsb3cgbW9yZSBzZWxlY3Rpb25zIHdoZW4gW211bHRpU2VsZWN0XShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3Rhc2tib2FyZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9Db21ibyNjb25maWctbXVsdGlTZWxlY3QpIGlzIGB0cnVlYC5cbiAgICAgKiBTZXR0aW5nIHRoaXMgdG8gYSBgQm9vbGVhbmAgdmFsdWUgY2FuIG92ZXJyaWRlIHRoYXQgZGVmYXVsdC5cbiAgICAgKi9cbiAgICBoaWRlUGlja2VyT25TZWxlY3QgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBDb25maWd1cmUgYXMgYHRydWVgIHRvIGhpZGUgdGhlIGV4cGFuZCB0cmlnZ2VyLiBUaGlzIGlzIGF1dG9tYXRpY2FsbHkgc2V0IHRvIGB0cnVlYCBpZlxuICAgICAqIHJlbW90ZSBmaWx0ZXJpbmcgaXMgZW5hYmxlZCBieSBzZXR0aW5nIHRoZSBbZmlsdGVyUGFyYW1OYW1lXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3Rhc2tib2FyZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9Db21ibyNjb25maWctZmlsdGVyUGFyYW1OYW1lKSBjb25maWcuXG4gICAgICovXG4gICAgaGlkZVRyaWdnZXIgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBTcGVjaWZ5IGB0cnVlYCB0byBoaWdobGlnaHQgZmllbGQgYWZ0ZXIgZXh0ZXJuYWwgdmFsdWUgY2hhbmdlc1xuICAgICAqL1xuICAgIGhpZ2hsaWdodEV4dGVybmFsQ2hhbmdlID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogQW4gb3B0aW9uYWwgc3RyaW5nIHRvIGRpc3BsYXkgaW5zaWRlIHRoZSBpbnB1dCBmaWVsZCBhcyBhbiBvdmVybGF5LiBUaGlzIGNhbiBiZSB1c2VmdWwgZm9yIGRpc3BsYXlpbmdcbiAgICAgKiBhIGZpZWxkJ3MgdW5pdHMuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvdGFza2JvYXJkL2RvY3MvYXBpL1Rhc2tCb2FyZC93aWRnZXQvUmVzb3VyY2VzQ29tYm8jY29uZmlnLWhpbnQpXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGRhdGEgQSBkYXRhIG9iamVjdFxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuRmllbGR9IGRhdGEuc291cmNlIEEgcmVmZXJlbmNlIHRvIHRoZSBmaWVsZCBpbnN0YW5jZVxuICAgICAqIEBwYXJhbSB7YW55fSBkYXRhLnZhbHVlIFRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBmaWVsZFxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAgICovXG4gICAgaGludCA/IDogc3RyaW5nfCgoZGF0YTogeyBzb3VyY2U6IEZpZWxkLCB2YWx1ZTogYW55IH0pID0+IHN0cmluZylcbiAgICAvKipcbiAgICAgKiBUaGlzIGNvbmZpZyBpcyBzaW1pbGFyIHRvIFtoaW50XShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3Rhc2tib2FyZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9GaWVsZCNjb25maWctaGludCkgZXhjZXB0IHRoYXQgdGhpcyBjb25maWcgaXMgdXNlZCB0byBkaXNwbGF5IEhUTUwgY29udGVudC5cbiAgICAgKiBTaW5jZSB0aGlzIGNhbiBhbGxvdyBtYWxpY2lvdXMgY29udGVudCB0byBiZSBleGVjdXRlZCwgYmUgc3VyZSBub3QgdG8gaW5jbHVkZSB1c2VyLWVudGVyZWQgZGF0YSBvciB0b1xuICAgICAqIGVuY29kZSBzdWNoIGRhdGEgKHNlZSBbZW5jb2RlSHRtbF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy90YXNrYm9hcmQvZG9jcy9hcGkvQ29yZS9oZWxwZXIvU3RyaW5nSGVscGVyI2Z1bmN0aW9uLWVuY29kZUh0bWwtc3RhdGljKSkuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvdGFza2JvYXJkL2RvY3MvYXBpL1Rhc2tCb2FyZC93aWRnZXQvUmVzb3VyY2VzQ29tYm8jY29uZmlnLWhpbnRIdG1sKVxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBkYXRhIEEgZGF0YSBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0LkZpZWxkfSBkYXRhLnNvdXJjZSBBIHJlZmVyZW5jZSB0byB0aGUgZmllbGQgaW5zdGFuY2VcbiAgICAgKiBAcGFyYW0ge2FueX0gZGF0YS52YWx1ZSBUaGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgZmllbGRcbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgICAqL1xuICAgIGhpbnRIdG1sID8gOiBzdHJpbmd8KChkYXRhOiB7IHNvdXJjZTogRmllbGQsIHZhbHVlOiBhbnkgfSkgPT4gc3RyaW5nKVxuICAgIC8qKlxuICAgICAqIFdpZGdldCBpZCwgaWYgbm90IHNwZWNpZmllZCBvbmUgd2lsbCBiZSBnZW5lcmF0ZWQuIEFsc28gdXNlZCBmb3IgbG9va3VwcyB0aHJvdWdoIFdpZGdldC5nZXRCeUlkXG4gICAgICovXG4gICAgaWQgPyA6IHN0cmluZ1xuICAgIC8qKlxuICAgICAqIERldGVybWluZXMgaWYgdGhlIHdpZGdldHMgcmVhZC1vbmx5IHN0YXRlIHNob3VsZCBiZSBjb250cm9sbGVkIGJ5IGl0cyBwYXJlbnQuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvdGFza2JvYXJkL2RvY3MvYXBpL1Rhc2tCb2FyZC93aWRnZXQvUmVzb3VyY2VzQ29tYm8jY29uZmlnLWlnbm9yZVBhcmVudFJlYWRPbmx5KVxuICAgICAqL1xuICAgIGlnbm9yZVBhcmVudFJlYWRPbmx5ID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogU2V0IHRoaXMgY29uZmlnIHRvIGB0cnVlYCB0byBhbHdheXMgZGlzcGxheSBpdGVtcyBob3Jpem9udGFsbHkgYWxvbmcgd2l0aCB0aGlzIGZpZWxkLiBUaGlzIGFzc2lnbnMgYW5cbiAgICAgKiBbaGJveF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy90YXNrYm9hcmQvZG9jcy9hcGkvQ29yZS93aWRnZXQvbGF5b3V0L0JveCkgYXMgdGhlIFtsYXlvdXRdKCNDb3JlL3dpZGdldC9Db250YWluZXIjY29uZmlnLWxheW91dCkgdG8gdGhlXG4gICAgICogW2NvbnRhaW5lcl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy90YXNrYm9hcmQvZG9jcy9hcGkvQ29yZS93aWRnZXQvRmllbGQjY29uZmlnLWNvbnRhaW5lcikuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvdGFza2JvYXJkL2RvY3MvYXBpL1Rhc2tCb2FyZC93aWRnZXQvUmVzb3VyY2VzQ29tYm8jY29uZmlnLWlubGluZSlcbiAgICAgKi9cbiAgICBpbmxpbmUgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBDb25maWd1cmUgdGhpcyBhcyBgdHJ1ZWAgdG8gcmVuZGVyIHRoZSBkcm9wZG93biBsaXN0IGFzIGEgcGVybWFuZW50bHkgdmlzaWJsZSBsaXN0XG4gICAgICogaW4gdGhlIGRvY3VtZW50IGZsb3cgaW1tZWRpYXRlbHkgYmVsb3cgdGhlIGlucHV0IGFyZWEgaW5zdGVhZCBvZiBhcyBhIHBvcHVwLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3Rhc2tib2FyZC9kb2NzL2FwaS9UYXNrQm9hcmQvd2lkZ2V0L1Jlc291cmNlc0NvbWJvI2NvbmZpZy1pbmxpbmVQaWNrZXIpXG4gICAgICovXG4gICAgaW5saW5lUGlja2VyID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogVGV4dCBhbGlnbm1lbnQgZm9yIHRoZSBpbnB1dCBmaWVsZC5cbiAgICAgKi9cbiAgICBpbnB1dEFsaWduID8gOiBzdHJpbmdcbiAgICAvKipcbiAgICAgKiBTZXRzIGN1c3RvbSBhdHRyaWJ1dGVzIG9mIHRoZSB1bmRlcmx5aW5nIGlucHV0IGVsZW1lbnQuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBwbGVhc2UgcmVmZXIgdG9cbiAgICAgKiBbTUROXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0F0dHJpYnV0ZXMpXG4gICAgICovXG4gICAgaW5wdXRBdHRyaWJ1dGVzID8gOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+XG4gICAgLyoqXG4gICAgICogSWYgeW91IG5lZWQgdG8gdXNlIHNvbWV0aGluZyBlbHNlIHRoYW4gYSBkZWZhdWx0IGBpbnB1dGAgZWxlbWVudCwgYXMgdGhlIGlucHV0IGVsZW1lbnQsIHByb3ZpZGUgdGhlIHRhZ1xuICAgICAqIG5hbWUgaGVyZS4gUGxlYXNlIG5vdGUgdGhhdCB0aGlzIGlzIHVzZWQgZm9yIGFkdmFuY2VkIHVzYWdlIG9ubHksIGZvciBleGFtcGxlIHdoZW4gdXNpbmcgV2ViQ29tcG9uZW50c1xuICAgICAqIChjdXN0b20gZWxlbWVudHMpLCBhbmQgdGhhdCB0aGUgY29uZmlndXJlZCBlbGVtZW50IG11c3QgZnVsZmlsIHRoZSBzYW1lIGNvbnRyYWN0IGFzIGEgcmVndWxhciBpbnB1dFxuICAgICAqIGVsZW1lbnQuXG4gICAgICovXG4gICAgaW5wdXRUYWcgPyA6IHN0cmluZ1xuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGB0eXBlYCBhdHRyaWJ1dGUgb2YgdGhlIHVuZGVybHlpbmcgaW5wdXQgZWxlbWVudCAocGFzc3dvcmQsIGhpZGRlbiwgZGF0ZSwgY29sb3IsIGV0Yy4pLlxuICAgICAqL1xuICAgIGlucHV0VHlwZSA/IDogc3RyaW5nXG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoIHRvIGFwcGx5IHRvIHRoZSBgLmItZmllbGQtaW5uZXJgIGVsZW1lbnQsIHdoaWNoIGVuY29tcGFzc2VzIHRoZSBgaW5wdXRgIGVsZW1lbnQgYW5kIGFueVxuICAgICAqIHRyaWdnZXJzLiBJZiBhIG51bWJlciBpcyBzcGVjaWZpZWQsIGBweGAgd2lsbCBiZSB1c2VkLlxuICAgICAqL1xuICAgIGlucHV0V2lkdGggPyA6IHN0cmluZ3xudW1iZXJcbiAgICAvKipcbiAgICAgKiBFbGVtZW50IChvciBlbGVtZW50IGlkKSB0byBpbnNlcnQgdGhpcyB3aWRnZXQgYmVmb3JlLiBJZiBwcm92aWRlZCwgW2FwcGVuZFRvXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3Rhc2tib2FyZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9XaWRnZXQjY29uZmlnLWFwcGVuZFRvKSBjb25maWcgaXMgaWdub3JlZC5cbiAgICAgKi9cbiAgICBpbnNlcnRCZWZvcmUgPyA6IEhUTUxFbGVtZW50fHN0cmluZ1xuICAgIC8qKlxuICAgICAqIEVsZW1lbnQgKG9yIGVsZW1lbnQgaWQpIHRvIGFwcGVuZCB0aGlzIHdpZGdldCBlbGVtZW50IHRvLCBhcyBhIGZpcnN0IGNoaWxkLiBJZiBwcm92aWRlZCwgW2FwcGVuZFRvXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3Rhc2tib2FyZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9XaWRnZXQjY29uZmlnLWFwcGVuZFRvKSBjb25maWcgaXMgaWdub3JlZC5cbiAgICAgKi9cbiAgICBpbnNlcnRGaXJzdCA/IDogSFRNTEVsZW1lbnR8c3RyaW5nXG4gICAgLyoqXG4gICAgICogUm93cyB0byBkaXNwbGF5IGluIHRoZSBkcm9wZG93biAobGlzdCBpdGVtcykuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvdGFza2JvYXJkL2RvY3MvYXBpL1Rhc2tCb2FyZC93aWRnZXQvUmVzb3VyY2VzQ29tYm8jY29uZmlnLWl0ZW1zKVxuICAgICAqL1xuICAgIGl0ZW1zID8gOiBvYmplY3RbXXxzdHJpbmdbXXxvYmplY3RcbiAgICAvKipcbiAgICAgKiBBbiBvYmplY3Qgd2hvc2Uga2V5cyBhcmUgdGhlIFtrZXldKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9LZXlib2FyZEV2ZW50L2tleSkgbmFtZVxuICAgICAqIGFuZCBvcHRpb25hbCBtb2RpZmllciBwcmVmaXhlczogYCdDdHJsKydgLCBgJ0FsdCsnYCwgYCdNZXRhKydgLCBhbmQgYCdTaGlmdCsnYCAoY2FzZS1pbnNlbnNpdGl2ZSkuIFRoZSB2YWx1ZXNcbiAgICAgKiBhcmUgdGhlIG5hbWUgb2YgdGhlIGluc3RhbmNlIG1ldGhvZCB0byBjYWxsIHdoZW4gdGhlIGtleXN0cm9rZSBpcyByZWNlaXZlZC5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy90YXNrYm9hcmQvZG9jcy9hcGkvVGFza0JvYXJkL3dpZGdldC9SZXNvdXJjZXNDb21ibyNjb25maWcta2V5TWFwKVxuICAgICAqL1xuICAgIGtleU1hcCA/IDogUmVjb3JkPHN0cmluZywgS2V5TWFwQ29uZmlnPlxuICAgIC8qKlxuICAgICAqIFRoZSBkZWxheSBpbiBtaWxsaXNlY29uZHMgdG8gd2FpdCBhZnRlciB0aGUgbGFzdCBrZXlzdHJva2UgYmVmb3JlIHRyaWdnZXJpbmcgYSBjaGFuZ2UgZXZlbnQuXG4gICAgICogU2V0IHRvIDAgdG8gbm90IHRyaWdnZXIgY2hhbmdlIGV2ZW50cyBmcm9tIGtleXN0cm9rZXMgKGxpc3RlbiBmb3IgaW5wdXQgZXZlbnQgaW5zdGVhZCB0byBoYXZlXG4gICAgICogaW1tZWRpYXRlIGZlZWRiYWNrLCBjaGFuZ2Ugd2lsbCBzdGlsbCBiZSB0cmlnZ2VyZWQgb24gYmx1cikuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvdGFza2JvYXJkL2RvY3MvYXBpL1Rhc2tCb2FyZC93aWRnZXQvUmVzb3VyY2VzQ29tYm8jY29uZmlnLWtleVN0cm9rZUNoYW5nZURlbGF5KVxuICAgICAqL1xuICAgIGtleVN0cm9rZUNoYW5nZURlbGF5ID8gOiBudW1iZXJcbiAgICAvKipcbiAgICAgKiBUaGUgZGVsYXkgaW4gbWlsbGlzZWNvbmRzIHRvIHdhaXQgYWZ0ZXIgdGhlIGxhc3Qga2V5c3Ryb2tlIGJlZm9yZSBmaWx0ZXJpbmcgdGhlIGxpc3QuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvdGFza2JvYXJkL2RvY3MvYXBpL1Rhc2tCb2FyZC93aWRnZXQvUmVzb3VyY2VzQ29tYm8jY29uZmlnLWtleVN0cm9rZUZpbHRlckRlbGF5KVxuICAgICAqL1xuICAgIGtleVN0cm9rZUZpbHRlckRlbGF5ID8gOiBudW1iZXJcbiAgICAvKipcbiAgICAgKiBMYWJlbCwgcHJlcGVuZGVkIHRvIGZpZWxkXG4gICAgICovXG4gICAgbGFiZWwgPyA6IHN0cmluZ1xuICAgIC8qKlxuICAgICAqIENTUyBjbGFzcyBuYW1lIG9yIGNsYXNzIG5hbWVzIHRvIGFkZCB0byBhbnkgY29uZmlndXJlZCBbbGFiZWxdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvdGFza2JvYXJkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L21peGluL0xhYmVsYWJsZSNjb25maWctbGFiZWwpXG4gICAgICovXG4gICAgbGFiZWxDbHMgPyA6IHN0cmluZ3xvYmplY3RcbiAgICAvKipcbiAgICAgKiBMYWJlbCBwb3NpdGlvbiwgZWl0aGVyICdiZWZvcmUnIHRoZSBmaWVsZCBvciAnYWJvdmUnIHRoZSBmaWVsZFxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3Rhc2tib2FyZC9kb2NzL2FwaS9UYXNrQm9hcmQvd2lkZ2V0L1Jlc291cmNlc0NvbWJvI2NvbmZpZy1sYWJlbFBvc2l0aW9uKVxuICAgICAqL1xuICAgIGxhYmVsUG9zaXRpb24gPyA6ICdiZWZvcmUnfCdhYm92ZSd8bnVsbFxuICAgIC8qKlxuICAgICAqIFRoZSBsYWJlbHMgdG8gYWRkIGVpdGhlciBiZWZvcmUgb3IgYWZ0ZXIgdGhlIGlucHV0IGZpZWxkLlxuICAgICAqIEVhY2ggbGFiZWwgbWF5IGhhdmUgdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3Rhc2tib2FyZC9kb2NzL2FwaS9UYXNrQm9hcmQvd2lkZ2V0L1Jlc291cmNlc0NvbWJvI2NvbmZpZy1sYWJlbHMpXG4gICAgICovXG4gICAgbGFiZWxzID8gOiBvYmplY3RbXVxuICAgIC8qKlxuICAgICAqIFRoZSB3aWR0aCB0byBhcHBseSB0byB0aGUgYCZsdDtsYWJlbCZndDtgIGVsZW1lbnQuIElmIGEgbnVtYmVyIGlzIHNwZWNpZmllZCwgYHB4YCB3aWxsIGJlIHVzZWQuXG4gICAgICovXG4gICAgbGFiZWxXaWR0aCA/IDogc3RyaW5nfG51bWJlclxuICAgIC8qKlxuICAgICAqIENTUyBjbGFzcyB0byBhZGQgdG8gcGlja2VyXG4gICAgICovXG4gICAgbGlzdENscyA/IDogc3RyaW5nXG4gICAgLyoqXG4gICAgICogVGhlIGxpc3RlbmVyIHNldCBmb3IgdGhpcyBvYmplY3QuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvdGFza2JvYXJkL2RvY3MvYXBpL1Rhc2tCb2FyZC93aWRnZXQvUmVzb3VyY2VzQ29tYm8jY29uZmlnLWxpc3RlbmVycylcbiAgICAgKi9cbiAgICBsaXN0ZW5lcnMgPyA6IFJlc291cmNlc0NvbWJvTGlzdGVuZXJzXG4gICAgLyoqXG4gICAgICogVGVtcGxhdGUgc3RyaW5nIHVzZWQgdG8gcmVuZGVyIHRoZSBsaXN0IGl0ZW1zIGluIHRoZSBkcm9wZG93biBsaXN0XG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvdGFza2JvYXJkL2RvY3MvYXBpL1Rhc2tCb2FyZC93aWRnZXQvUmVzb3VyY2VzQ29tYm8jY29uZmlnLWxpc3RJdGVtVHBsKVxuICAgICAqIEBwYXJhbSB7Q29yZS5kYXRhLk1vZGVsfSByZWNvcmQgVGhlIHJlY29yZCByZXByZXNlbnRpbmcgdGhlIGl0ZW0gYmVpbmcgcmVuZGVyZWRcbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nLHZvaWR9XG4gICAgICovXG4gICAgbGlzdEl0ZW1UcGwgPyA6IChyZWNvcmQ6IE1vZGVsfENvbWJvTW9kZWwpID0+IHN0cmluZ3x2b2lkXG4gICAgLyoqXG4gICAgICogQSBjbGFzcyB0cmFuc2xhdGlvbnMgb2Ygd2hpY2ggYXJlIHVzZWQgZm9yIHRyYW5zbGF0aW5nIHRoaXMgZW50aXR5LlxuICAgICAqIFRoaXMgaXMgb2Z0ZW4gdXNlZCB3aGVuIHRyYW5zbGF0aW9ucyBvZiBhbiBpdGVtIGFyZSBkZWZpbmVkIG9uIGl0cyBjb250YWluZXIgY2xhc3MuXG4gICAgICogRm9yIGV4YW1wbGU6XG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvdGFza2JvYXJkL2RvY3MvYXBpL1Rhc2tCb2FyZC93aWRnZXQvUmVzb3VyY2VzQ29tYm8jY29uZmlnLWxvY2FsZUNsYXNzKVxuICAgICAqL1xuICAgIGxvY2FsZUNsYXNzID8gOiB0eXBlb2YgQmFzZVxuICAgIC8qKlxuICAgICAqIFNldCB0byBgZmFsc2VgIHRvIGRpc2FibGUgbG9jYWxpemF0aW9uIG9mIHRoaXMgb2JqZWN0LlxuICAgICAqL1xuICAgIGxvY2FsaXphYmxlID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogTGlzdCBvZiBwcm9wZXJ0aWVzIHdoaWNoIHZhbHVlcyBzaG91bGQgYmUgdHJhbnNsYXRlZCBhdXRvbWF0aWNhbGx5IHVwb24gYSBsb2NhbGUgYXBwbHlpbmcuXG4gICAgICogSW4gY2FzZSB0aGVyZSBpcyBhIG5lZWQgdG8gbG9jYWxpemUgbm90IHR5cGljYWwgdmFsdWUgKG5vdCBhIFN0cmluZyB2YWx1ZSBvciBhIGZpZWxkIHdpdGggcmUtZGVmaW5lZCBzZXR0ZXIvZ2V0dGVyKSxcbiAgICAgKiB5b3UgY291bGQgdXNlICdsb2NhbGVLZXknIG1ldGEgY29uZmlndXJhdGlvbi5cbiAgICAgKiBFeGFtcGxlOlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3Rhc2tib2FyZC9kb2NzL2FwaS9UYXNrQm9hcmQvd2lkZ2V0L1Jlc291cmNlc0NvbWJvI2NvbmZpZy1sb2NhbGl6YWJsZVByb3BlcnRpZXMpXG4gICAgICovXG4gICAgbG9jYWxpemFibGVQcm9wZXJ0aWVzID8gOiBzdHJpbmdbXVxuICAgIC8qKlxuICAgICAqIFdpZGdldCdzIG1hcmdpbi4gVGhpcyBtYXkgYmUgY29uZmlndXJlZCBhcyBhIHNpbmdsZSBudW1iZXIgb3IgYSBgVFJCTGAgZm9ybWF0IHN0cmluZy5cbiAgICAgKiBudW1lcmljLW9ubHkgdmFsdWVzIGFyZSBpbnRlcnByZXRlZCBhcyBwaXhlbHMuXG4gICAgICovXG4gICAgbWFyZ2luID8gOiBudW1iZXJ8c3RyaW5nXG4gICAgLyoqXG4gICAgICogVGhpcyBjb25maWcgb2JqZWN0IGNvbnRhaW5zIHRoZSBkZWZhdWx0cyBmb3IgdGhlIFtNYXNrXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3Rhc2tib2FyZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9NYXNrKSBjcmVhdGVkIGZvciB0aGVcbiAgICAgKiBbbWFza2VkXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3Rhc2tib2FyZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9XaWRnZXQjY29uZmlnLW1hc2tlZCkgY29uZmlnLiBBbnkgcHJvcGVydGllcyBzcGVjaWZpZWQgaW4gdGhlIGBtYXNrZWRgIGNvbmZpZyB3aWxsIG92ZXJyaWRlIHRoZXNlXG4gICAgICogdmFsdWVzLlxuICAgICAqL1xuICAgIG1hc2tEZWZhdWx0cyA/IDogTWFza0NvbmZpZ1xuICAgIC8qKlxuICAgICAqIFNldCB0byBgdHJ1ZWAgdG8gYXBwbHkgdGhlIGRlZmF1bHQgbWFzayB0byB0aGUgd2lkZ2V0LiBBbHRlcm5hdGl2ZWx5LCB0aGlzIGNhbiBiZSB0aGUgbWFzayBtZXNzYWdlIG9yIGFcbiAgICAgKiBbTWFza10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy90YXNrYm9hcmQvZG9jcy9hcGkvQ29yZS93aWRnZXQvTWFzaykgY29uZmlnIG9iamVjdC5cbiAgICAgKi9cbiAgICBtYXNrZWQgPyA6IGJvb2xlYW58c3RyaW5nfE1hc2tDb25maWdcbiAgICAvKipcbiAgICAgKiBUaGUgZWxlbWVudCdzIG1heEhlaWdodC4gQ2FuIGJlIGVpdGhlciBhIFN0cmluZyBvciBhIE51bWJlciAod2hpY2ggd2lsbCBoYXZlICdweCcgYXBwZW5kZWQpLiBOb3RlIHRoYXRcbiAgICAgKiBsaWtlIFtoZWlnaHRdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvdGFza2JvYXJkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1dpZGdldCNjb25maWctaGVpZ2h0KSwgKnJlYWRpbmcqIHRoZSB2YWx1ZSB3aWxsIHJldHVybiB0aGUgbnVtZXJpYyB2YWx1ZSBpbiBwaXhlbHMuXG4gICAgICovXG4gICAgbWF4SGVpZ2h0ID8gOiBzdHJpbmd8bnVtYmVyXG4gICAgLyoqXG4gICAgICogKk9ubHkgdmFsaWQgaWYgdGhpcyBXaWRnZXQgaXMgW2Zsb2F0aW5nXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3Rhc2tib2FyZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9XaWRnZXQjY29uZmlnLWZsb2F0aW5nKS4qXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvdGFza2JvYXJkL2RvY3MvYXBpL1Rhc2tCb2FyZC93aWRnZXQvUmVzb3VyY2VzQ29tYm8jY29uZmlnLW1heGltaXplT25Nb2JpbGUpXG4gICAgICovXG4gICAgbWF4aW1pemVPbk1vYmlsZSA/IDogbnVtYmVyfHN0cmluZ1xuICAgIC8qKlxuICAgICAqIFRoZSBtYXggbnVtYmVyIG9mIGNoYXJhY3RlcnMgZm9yIHRoZSBpbnB1dCBmaWVsZFxuICAgICAqL1xuICAgIG1heExlbmd0aCA/IDogbnVtYmVyXG4gICAgLyoqXG4gICAgICogVGhlIGVsZW1lbnRzIG1heFdpZHRoLiBDYW4gYmUgZWl0aGVyIGEgU3RyaW5nIG9yIGEgTnVtYmVyICh3aGljaCB3aWxsIGhhdmUgJ3B4JyBhcHBlbmRlZCkuIE5vdGUgdGhhdFxuICAgICAqIGxpa2UgW3dpZHRoXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3Rhc2tib2FyZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9XaWRnZXQjY29uZmlnLXdpZHRoKSwgKnJlYWRpbmcqIHRoZSB2YWx1ZSB3aWxsIHJldHVybiB0aGUgbnVtZXJpYyB2YWx1ZSBpbiBwaXhlbHMuXG4gICAgICovXG4gICAgbWF4V2lkdGggPyA6IHN0cmluZ3xudW1iZXJcbiAgICAvKipcbiAgICAgKiBUaGUgbWluaW11bSBzdHJpbmcgbGVuZ3RoIHRvIHRyaWdnZXIgdGhlIGZpbHRlcmluZywgb25seSByZWxldmFudCB3aGVuIFtlZGl0YWJsZV0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy90YXNrYm9hcmQvZG9jcy9hcGkvQ29yZS93aWRnZXQvQ29tYm8jY29uZmlnLWVkaXRhYmxlKSBpcyBgdHJ1ZWAuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvdGFza2JvYXJkL2RvY3MvYXBpL1Rhc2tCb2FyZC93aWRnZXQvUmVzb3VyY2VzQ29tYm8jY29uZmlnLW1pbkNoYXJzKVxuICAgICAqL1xuICAgIG1pbkNoYXJzID8gOiBudW1iZXJcbiAgICAvKipcbiAgICAgKiBUaGUgZWxlbWVudCdzIG1pbkhlaWdodC4gQ2FuIGJlIGVpdGhlciBhIFN0cmluZyBvciBhIE51bWJlciAod2hpY2ggd2lsbCBoYXZlICdweCcgYXBwZW5kZWQpLiBOb3RlIHRoYXRcbiAgICAgKiBsaWtlIFtoZWlnaHRdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvdGFza2JvYXJkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1dpZGdldCNjb25maWctaGVpZ2h0KSwgKnJlYWRpbmcqIHRoZSB2YWx1ZSB3aWxsIHJldHVybiB0aGUgbnVtZXJpYyB2YWx1ZSBpbiBwaXhlbHMuXG4gICAgICovXG4gICAgbWluSGVpZ2h0ID8gOiBzdHJpbmd8bnVtYmVyXG4gICAgLyoqXG4gICAgICogVGhlIG1pbiBudW1iZXIgb2YgY2hhcmFjdGVycyBmb3IgdGhlIGlucHV0IGZpZWxkXG4gICAgICovXG4gICAgbWluTGVuZ3RoID8gOiBudW1iZXJcbiAgICAvKipcbiAgICAgKiBUaGUgZWxlbWVudHMgbWluV2lkdGguIENhbiBiZSBlaXRoZXIgYSBTdHJpbmcgb3IgYSBOdW1iZXIgKHdoaWNoIHdpbGwgaGF2ZSAncHgnIGFwcGVuZGVkKS4gTm90ZSB0aGF0XG4gICAgICogbGlrZSBbd2lkdGhdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvdGFza2JvYXJkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1dpZGdldCNjb25maWctd2lkdGgpLCAqcmVhZGluZyogdGhlIHZhbHVlIHdpbGwgcmV0dXJuIHRoZSBudW1lcmljIHZhbHVlIGluIHBpeGVscy5cbiAgICAgKi9cbiAgICBtaW5XaWR0aCA/IDogc3RyaW5nfG51bWJlclxuICAgIC8qKlxuICAgICAqIFdoZW4gdGhpcyBpcyBjb25maWd1cmVkIGFzIGB0cnVlYCBhIFtSZXNpemVPYnNlcnZlcl0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1Jlc2l6ZU9ic2VydmVyKVxuICAgICAqIGlzIHVzZWQgdG8gbW9uaXRvciB0aGlzIGVsZW1lbnQgZm9yIHNpemUgY2hhbmdlcyBjYXVzZWQgYnkgZWl0aGVyIHN0eWxlIG1hbmlwdWxhdGlvbiwgb3IgYnkgQ1NTXG4gICAgICogbGF5b3V0LlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3Rhc2tib2FyZC9kb2NzL2FwaS9UYXNrQm9hcmQvd2lkZ2V0L1Jlc291cmNlc0NvbWJvI2NvbmZpZy1tb25pdG9yUmVzaXplKVxuICAgICAqL1xuICAgIG1vbml0b3JSZXNpemUgPyA6IGJvb2xlYW58e1xuICAgICAgICBpbW1lZGlhdGU/OiBib29sZWFuXG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNldCB0byBgdHJ1ZWAgdG8gYWxsb3cgc2VsZWN0aW9uIG9mIG11bHRpcGxlIHZhbHVlcyBmcm9tIHRoZSBkcm9wZG93biBsaXN0LlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3Rhc2tib2FyZC9kb2NzL2FwaS9UYXNrQm9hcmQvd2lkZ2V0L1Jlc291cmNlc0NvbWJvI2NvbmZpZy1tdWx0aVNlbGVjdClcbiAgICAgKi9cbiAgICBtdWx0aVNlbGVjdCA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIEEga2V5IHZhbHVlIHdoaWNoLCB3aGVuIHR5cGVkIGluIGEgW211bHRpU2VsZWN0XShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3Rhc2tib2FyZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9Db21ibyNjb25maWctbXVsdGlTZWxlY3QpIENvbWJvLCBzZWxlY3RzIHRoZVxuICAgICAqIGN1cnJlbnRseSBhY3RpdmUgaXRlbSBpbiB0aGUgcGlja2VyLCBhbmQgY2xlYXJzIHRoZSBpbnB1dCBmaWVsZCByZWFkeSBmb3IgYW5vdGhlclxuICAgICAqIG1hdGNoIHRvIGJlIHR5cGVkLlxuICAgICAqL1xuICAgIG11bHRpVmFsdWVTZXBhcmF0b3IgPyA6IHN0cmluZ1xuICAgIC8qKlxuICAgICAqIE5hbWUgb2YgdGhlIGZpZWxkIHdoaWNoIGlzIHVzZWQgYXMgYSBrZXkgdG8gZ2V0L3NldCB2YWx1ZXMgZnJvbS90byB0aGUgZmllbGQuXG4gICAgICogVXNlZCBwcmlvciB0byBbcmVmXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3Rhc2tib2FyZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9XaWRnZXQjY29uZmlnLXJlZikgYW5kIFtpZF0oI0NvcmUvd2lkZ2V0L1dpZGdldCNjb25maWctaWQpIGluXG4gICAgICogW0NvbnRhaW5lci52YWx1ZXNdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvdGFza2JvYXJkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L0NvbnRhaW5lciNwcm9wZXJ0eS12YWx1ZXMpLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3Rhc2tib2FyZC9kb2NzL2FwaS9UYXNrQm9hcmQvd2lkZ2V0L1Jlc291cmNlc0NvbWJvI2NvbmZpZy1uYW1lKVxuICAgICAqL1xuICAgIG5hbWUgPyA6IHN0cmluZ1xuICAgIC8qKlxuICAgICAqIFRoaXMgaW1wbGllcyB0aGF0IHRoZSBwaWNrZXIgd2lsbCBkaXNwbGF5IGFuIGFuY2hvciBwb2ludGVyLCBidXQgYWxzbyBtZWFucyB0aGF0IHRoZSBwaWNrZXIgd2lsbCBhbGlnbiBjbG9zZXJcbiAgICAgKiB0byB0aGUgaW5wdXQgZmllbGQgc28gdGhhdCB0aGUgcG9pbnRlciBwaWVyY2VzIHRoZSBbcGlja2VyQWxpZ25FbGVtZW50XShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3Rhc2tib2FyZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9Db21ibyNjb25maWctcGlja2VyQWxpZ25FbGVtZW50KVxuICAgICAqL1xuICAgIG92ZXJsYXlBbmNob3IgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBUaGUgb3duaW5nIFdpZGdldCBvZiB0aGlzIFdpZGdldC4gSWYgdGhpcyBXaWRnZXQgaXMgZGlyZWN0bHkgY29udGFpbmVkICh0aGF0IGlzLCBpdCBpcyBvbmUgb2YgdGhlXG4gICAgICogW2l0ZW1zXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3Rhc2tib2FyZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9Db250YWluZXIjcHJvcGVydHktaXRlbXMpIG9mIGEgQ29udGFpbmVyKSwgdGhpcyBjb25maWcgd2lsbCBiZSBpZ25vcmVkLiBJbiB0aGlzIGNhc2VcbiAgICAgKiB0aGUgb3duZXIgaXMgPHN0cm9uZz5hbHdheXM8L3N0cm9uZz4gdGhlIGVuY2Fwc3VsYXRpbmcgQ29udGFpbmVyLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3Rhc2tib2FyZC9kb2NzL2FwaS9UYXNrQm9hcmQvd2lkZ2V0L1Jlc291cmNlc0NvbWJvI2NvbmZpZy1vd25lcilcbiAgICAgKi9cbiAgICBvd25lciA/IDogV2lkZ2V0fGFueVxuICAgIC8qKlxuICAgICAqIENvbmZpZ3VyYXRpb24gb2JqZWN0IGZvciB0aGUgW3BpY2tlcl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy90YXNrYm9hcmQvZG9jcy9hcGkvQ29yZS93aWRnZXQvTGlzdCkgb24gaW5pdGlhbGl6YXRpb24uIFJldHVybnMgdGhlXG4gICAgICogW3BpY2tlcl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy90YXNrYm9hcmQvZG9jcy9hcGkvQ29yZS93aWRnZXQvTGlzdCkgaW5zdGFuY2UgYXQgcnVudGltZS5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy90YXNrYm9hcmQvZG9jcy9hcGkvVGFza0JvYXJkL3dpZGdldC9SZXNvdXJjZXNDb21ibyNjb25maWctcGlja2VyKVxuICAgICAqL1xuICAgIHBpY2tlciA/IDogTGlzdENvbmZpZ3xMaXN0XG4gICAgLyoqXG4gICAgICogVGhlIG5hbWUgb2YgdGhlIGVsZW1lbnQgcHJvcGVydHkgdG8gd2hpY2ggdGhlIHBpY2tlciBzaG91bGQgc2l6ZSBhbmQgYWxpZ24gaXRzZWxmLlxuICAgICAqL1xuICAgIHBpY2tlckFsaWduRWxlbWVudCA/IDogc3RyaW5nXG4gICAgLyoqXG4gICAgICogV2lkdGggb2YgcGlja2VyLCBkZWZhdWx0cyB0byB0aGlzIGNvbWJvJ3MgW3BpY2tlckFsaWduRWxlbWVudF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy90YXNrYm9hcmQvZG9jcy9hcGkvQ29yZS93aWRnZXQvQ29tYm8jY29uZmlnLXBpY2tlckFsaWduRWxlbWVudCkgd2lkdGhcbiAgICAgKi9cbiAgICBwaWNrZXJXaWR0aCA/IDogbnVtYmVyfHN0cmluZ1xuICAgIC8qKlxuICAgICAqIFRleHQgdG8gZGlzcGxheSBpbiBlbXB0eSBmaWVsZC5cbiAgICAgKi9cbiAgICBwbGFjZWhvbGRlciA/IDogc3RyaW5nXG4gICAgLyoqXG4gICAgICogU2V0IHRvIGB0cnVlYCB3aGVuIGEgd2lkZ2V0IGlzIHJlbmRlcmVkIGludG8gYW5vdGhlciB3aWRnZXQncyBbY29udGVudEVsZW1lbnRdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvdGFza2JvYXJkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1dpZGdldCNwcm9wZXJ0eS1jb250ZW50RWxlbWVudCksIGJ1dCBtdXN0XG4gICAgICogbm90IHBhcnRpY2lwYXRlIGluIHRoZSBzdGFuZGFyZCBsYXlvdXQgb2YgdGhhdCB3aWRnZXQsIGFuZCBtdXN0IGJlIHBvc2l0aW9uZWQgcmVsYXRpdmVseSB0byB0aGF0XG4gICAgICogd2lkZ2V0J3MgW2NvbnRlbnRFbGVtZW50XShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3Rhc2tib2FyZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9XaWRnZXQjcHJvcGVydHktY29udGVudEVsZW1lbnQpLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3Rhc2tib2FyZC9kb2NzL2FwaS9UYXNrQm9hcmQvd2lkZ2V0L1Jlc291cmNlc0NvbWJvI2NvbmZpZy1wb3NpdGlvbmVkKVxuICAgICAqL1xuICAgIHBvc2l0aW9uZWQgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBQcmV2ZW50IHRvb2x0aXAgZnJvbSBiZWluZyBkaXNwbGF5ZWQgb24gdG91Y2ggZGV2aWNlcy4gVXNlZnVsIGZvciBleGFtcGxlIGZvciBidXR0b25zIHRoYXQgZGlzcGxheSBhXG4gICAgICogbWVudSBvbiBjbGljayBldGMsIHNpbmNlIHRoZSB0b29sdGlwIHdvdWxkIGJlIGRpc3BsYXllZCBhdCB0aGUgc2FtZSB0aW1lLlxuICAgICAqL1xuICAgIHByZXZlbnRUb29sdGlwT25Ub3VjaCA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIE9wdGlvbmFsbHkgYSBbRmlsdGVyXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3Rhc2tib2FyZC9kb2NzL2FwaS9Db3JlL3V0aWwvQ29sbGVjdGlvbkZpbHRlcikgY29uZmlnIG9iamVjdCB3aGljaCB0aGUgY29tYm8gc2hvdWxkIHVzZSBmb3JcbiAgICAgKiBmaWx0ZXJpbmcgdXNpbmcgdGhlIHR5cGVkIHZhbHVlLlxuICAgICAqIFRoaXMgbWF5IHVzZSBhIGBmaWx0ZXJCeWAgcHJvcGVydHkgdG8gdGVzdCBpdHMgYHZhbHVlYCBhZ2FpbnN0IGFueSBmaWVsZCBpbiB0aGUgcGFzc2VkIHJlY29yZC5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy90YXNrYm9hcmQvZG9jcy9hcGkvVGFza0JvYXJkL3dpZGdldC9SZXNvdXJjZXNDb21ibyNjb25maWctcHJpbWFyeUZpbHRlcilcbiAgICAgKi9cbiAgICBwcmltYXJ5RmlsdGVyID8gOiBDb2xsZWN0aW9uRmlsdGVyQ29uZmlnXG4gICAgLyoqXG4gICAgICogTWFrZXMgdGhlIGZpZWxkIHVubW9kaWZpYWJsZSBieSB1c2VyIGFjdGlvbi4gVGhlIGlucHV0IGFyZWEgaXMgbm90IGVkaXRhYmxlLCBhbmQgdHJpZ2dlcnNcbiAgICAgKiBhcmUgdW5yZXNwb25zaXZlLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3Rhc2tib2FyZC9kb2NzL2FwaS9UYXNrQm9hcmQvd2lkZ2V0L1Jlc291cmNlc0NvbWJvI2NvbmZpZy1yZWFkT25seSlcbiAgICAgKi9cbiAgICByZWFkT25seSA/IDogYm9vbGVhblxuICAgIHJlbGF5U3RvcmVFdmVudHMgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBQcmVkZWZpbmVkIHN0eWxlIHRvIHVzZSBmb3IgdGhlIGZpZWxkLiBQb3NzaWJsZSB2YWx1ZXMgYXJlOlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3Rhc2tib2FyZC9kb2NzL2FwaS9UYXNrQm9hcmQvd2lkZ2V0L1Jlc291cmNlc0NvbWJvI2NvbmZpZy1yZW5kaXRpb24pXG4gICAgICovXG4gICAgcmVuZGl0aW9uID8gOiAnb3V0bGluZWQnfCdmaWxsZWQnfHN0cmluZ1xuICAgIC8qKlxuICAgICAqIENvbmZpZ3VyZSBhcyBgdHJ1ZWAgdG8gaW5kaWNhdGUgdGhhdCBhIGBudWxsYCBmaWVsZCB2YWx1ZSBpcyB0byBiZSBtYXJrZWQgYXMgaW52YWxpZC4gVGhpcyB3aWxsXG4gICAgICogb3B0aW9uYWxseSBhcHBlbmQgYSAqIHRvIHRoZSBmaWVsZCBsYWJlbCBpZiBbc2hvd1JlcXVpcmVkSW5kaWNhdG9yXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3Rhc2tib2FyZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9GaWVsZCNwcm9wZXJ0eS1zaG93UmVxdWlyZWRJbmRpY2F0b3IpIGlzIHNldC5cbiAgICAgKi9cbiAgICByZXF1aXJlZCA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIElmIHRoaXMgZmllbGQgaXMgbm90IFtyZWFkT25seV0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy90YXNrYm9hcmQvZG9jcy9hcGkvQ29yZS93aWRnZXQvRmllbGQjY29uZmlnLXJlYWRPbmx5KSwgdGhlbiBzZXR0aW5nIHRoaXMgb3B0aW9uIG1lYW5zIHRoYXQgcHJlc3NpbmdcbiAgICAgKiB0aGUgYEVTQ0FQRWAga2V5IGFmdGVyIGVkaXRpbmcgdGhlIGZpZWxkIHdpbGwgcmV2ZXJ0IHRoZSBmaWVsZCB0byB0aGUgdmFsdWUgaXQgaGFkIHdoZW5cbiAgICAgKiB0aGUgdXNlciBmb2N1c2VkIHRoZSBmaWVsZC4gSWYgdGhlIGZpZWxkIGlzICpub3QqIGNoYW5nZWQgZnJvbSB3aGVuIGZvY3VzZWQsIHRoZSBbY2xlYXJhYmxlXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3Rhc2tib2FyZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9GaWVsZCNjb25maWctY2xlYXJhYmxlKVxuICAgICAqIGJlaGF2aW91ciB3aWxsIGJlIGFjdGl2YXRlZC5cbiAgICAgKi9cbiAgICByZXZlcnRPbkVzY2FwZSA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIENvbmZpZ3VyZSBhcyBgdHJ1ZWAgdG8gaGF2ZSB0aGUgY29tcG9uZW50IGRpc3BsYXkgYSB0cmFuc2x1Y2VudCByaXBwbGUgd2hlbiBpdHNcbiAgICAgKiBbZm9jdXNFbGVtZW50XShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3Rhc2tib2FyZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9XaWRnZXQjcHJvcGVydHktZm9jdXNFbGVtZW50KSwgb3IgW2VsZW1lbnRdKCNDb3JlL3dpZGdldC9XaWRnZXQjcHJvcGVydHktZWxlbWVudCkgaXMgdGFwcGVkIDxlbT5pZiB0aGVcbiAgICAgKiBjdXJyZW50IHRoZW1lIHN1cHBvcnRzIHJpcHBsZXM8L2VtPi4gT3V0IG9mIHRoZSBib3gsIG9ubHkgdGhlIE1hdGVyaWFsIHRoZW1lIHN1cHBvcnRzIHJpcHBsZXMuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvdGFza2JvYXJkL2RvY3MvYXBpL1Rhc2tCb2FyZC93aWRnZXQvUmVzb3VyY2VzQ29tYm8jY29uZmlnLXJpcHBsZSlcbiAgICAgKi9cbiAgICByaXBwbGUgPyA6IGJvb2xlYW58e1xuICAgICAgICBkZWxlZ2F0ZT86IHN0cmluZ1xuICAgICAgICBjb2xvcj86IHN0cmluZ1xuICAgICAgICByYWRpdXM/OiBudW1iZXJcbiAgICAgICAgY2xpcD86IHN0cmluZ1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBJZiB5b3UgYXJlIHJlbmRlcmluZyB0aGlzIHdpZGdldCB0byBhIHNoYWRvdyByb290IGluc2lkZSBhIHdlYiBjb21wb25lbnQsIHNldCB0aGlzIGNvbmZpZyB0byB0aGUgc2hhZG93Um9vdC4gSWYgbm90IGluc2lkZSBhIHdlYiBjb21wb25lbnQsIHNldCBpdCB0byBgZG9jdW1lbnQuYm9keWBcbiAgICAgKi9cbiAgICByb290RWxlbWVudCA/IDogU2hhZG93Um9vdHxIVE1MRWxlbWVudFxuICAgIC8qKlxuICAgICAqIFRoaXMgbWF5IGJlIGNvbmZpZ3VyZWQgYXMgYHRydWVgIHRvIG1ha2UgdGhlIHdpZGdldCdzIGVsZW1lbnQgdXNlIHRoZSBgZGlyZWN0aW9uOnJ0bGAgc3R5bGUuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvdGFza2JvYXJkL2RvY3MvYXBpL1Rhc2tCb2FyZC93aWRnZXQvUmVzb3VyY2VzQ29tYm8jY29uZmlnLXJ0bClcbiAgICAgKi9cbiAgICBydGwgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBEZWZpbmVzIHdoYXQgdG8gZG8gaWYgZG9jdW1lbnQgaXMgc2Nyb2xsZWQgd2hpbGUgV2lkZ2V0IGlzIHZpc2libGUgKG9ubHkgcmVsZXZhbnQgd2hlbiBmbG9hdGluZyBpcyBzZXQgdG8gYHRydWVgKS5cbiAgICAgKiBWYWxpZCB2YWx1ZXM6IMK0bnVsbMK0OiBkbyBub3RoaW5nLCDCtGhpZGXCtDogaGlkZSB0aGUgd2lkZ2V0IG9yIMK0cmVhbGlnbsK0OiByZWFsaWduIHRvIHRoZSB0YXJnZXQgaWYgcG9zc2libGUuXG4gICAgICovXG4gICAgc2Nyb2xsQWN0aW9uID8gOiAnaGlkZSd8J3JlYWxpZ24nfG51bGxcbiAgICAvKipcbiAgICAgKiAqT25seSB2YWxpZCBpZiB0aGlzIFdpZGdldCBpcyBbZmxvYXRpbmddKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvdGFza2JvYXJkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1dpZGdldCNjb25maWctZmxvYXRpbmcpLipcbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy90YXNrYm9hcmQvZG9jcy9hcGkvVGFza0JvYXJkL3dpZGdldC9SZXNvdXJjZXNDb21ibyNjb25maWctc2hvd0FuaW1hdGlvbilcbiAgICAgKi9cbiAgICBzaG93QW5pbWF0aW9uID8gOiBib29sZWFufG9iamVjdFxuICAgIC8qKlxuICAgICAqIGB0cnVlYCB0byBhdXRvbWF0aWNhbGx5IGRpc3BsYXkgYSAqIGFmdGVyIHRoZSBsYWJlbCBmb3IgdGhpcyBmaWVsZCB3aGVuIGl0IGlzIFtyZXF1aXJlZF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy90YXNrYm9hcmQvZG9jcy9hcGkvQ29yZS93aWRnZXQvRmllbGQjcHJvcGVydHktcmVxdWlyZWQpLlxuICAgICAqL1xuICAgIHNob3dSZXF1aXJlZEluZGljYXRvciA/IDogc3RyaW5nXG4gICAgLyoqXG4gICAgICogU2V0IHRvIGBmYWxzZWAgdG8gbm90IHNob3cgdGhlIHRvb2x0aXAgd2hlbiB0aGlzIHdpZGdldCBpcyBbZGlzYWJsZWRdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvdGFza2JvYXJkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1dpZGdldCNwcm9wZXJ0eS1kaXNhYmxlZClcbiAgICAgKi9cbiAgICBzaG93VG9vbHRpcFdoZW5EaXNhYmxlZCA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIFNldCB0byBgdHJ1ZWAsIGNvbXBsZXRlbHkgYnlwYXNzZXMgdmFsaWRhdGlvbiBsb2dpYyAoY291bGQgYmUgdXNlcmZ1bCBpZiB5b3VyIGZpZWxkIGlzIG5vdCBgZWRpdGFibGVgXG4gICAgICogdG8gdGhlIHVzZXIpLlxuICAgICAqL1xuICAgIHNraXBWYWxpZGF0aW9uID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogUHJvZ3JhbW1hdGljIGNvbnRyb2wgb3ZlciBob3cgbWFueSBjb2x1bW5zIHRvIHNwYW4gd2hlbiB1c2VkIGluIGEgZ3JpZCBsYXlvdXQuXG4gICAgICovXG4gICAgc3BhbiA/IDogbnVtYmVyXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgbmF0aXZlIGBzcGVsbGNoZWNrYCBwcm9wZXJ0eSBvZiB0aGUgdW5kZXJseWluZyBpbnB1dCBlbGVtZW50LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHJlZmVyIHRvXG4gICAgICogW01ETl0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9HbG9iYWxfYXR0cmlidXRlcy9zcGVsbGNoZWNrKVxuICAgICAqL1xuICAgIHNwZWxsQ2hlY2sgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBTdG9yZSB1c2VkIHRvIHBvcHVsYXRlIGl0ZW1zLiBBbHNvIGFjY2VwdHMgYSBTdG9yZSBjb25maWcgb2JqZWN0XG4gICAgICovXG4gICAgc3RvcmUgPyA6IFN0b3JlfFN0b3JlQ29uZmlnXG4gICAgLyoqXG4gICAgICogQSBjb25maWd1cmF0aW9uIGZvciB0aGUgW3RhYl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy90YXNrYm9hcmQvZG9jcy9hcGkvQ29yZS93aWRnZXQvVGFiKSBjcmVhdGVkIGZvciB0aGlzIHdpZGdldCB3aGVuIGl0IGlzIHBsYWNlZCBpbiBhXG4gICAgICogW1RhYlBhbmVsXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3Rhc2tib2FyZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9UYWJQYW5lbCkuIEZvciBleGFtcGxlLCB0aGlzIGNvbmZpZyBjYW4gYmUgdXNlZCB0byBjb250cm9sIHRoZSBpY29uIG9mIHRoZSBgdGFiYCBmb3JcbiAgICAgKiB0aGlzIHdpZGdldDpcbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy90YXNrYm9hcmQvZG9jcy9hcGkvVGFza0JvYXJkL3dpZGdldC9SZXNvdXJjZXNDb21ibyNjb25maWctdGFiKVxuICAgICAqL1xuICAgIHRhYiA/IDogYm9vbGVhbnxUYWJDb25maWdcbiAgICAvKipcbiAgICAgKiBUaGUgdGFiIGluZGV4IG9mIHRoZSBpbnB1dCBmaWVsZCBvciBmaWVsZHMsIG9yIGBudWxsYCBmb3IgbmF0dXJhbCB0YWIgb3JkZXIgKHJlY29tbWVuZGVkKS4gU2V0dGluZyB0byBgMGBcbiAgICAgKiBpcyBlcXVpdmFsZW50IHRvIG5hdHVyYWwgdGFiIG9yZGVyLCBidXQgaXMgdW5uZWNlc3NhcnkgZm9yIGZpZWxkcyBzaW5jZSB0aGV5IGFyZSBuYXR1cmFsbHkgdGFiYmFibGVcbiAgICAgKiAoaS5lLiwgYWNjZXNzaWJsZSB2aWEgdGhlIFRBQiBrZXkpLiBTZXR0aW5nIHRvIGAtMWAgZGlzYWJsZXMgdGFiYmFiaWxpdHkgYnV0IGFsbG93cyBmb3IgZm9jdXMgdG8gYmUgc2V0XG4gICAgICogdG8gdGhlIGVsZW1lbnQgcHJvZ3JhbW1hdGljYWxseS5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy90YXNrYm9hcmQvZG9jcy9hcGkvVGFza0JvYXJkL3dpZGdldC9SZXNvdXJjZXNDb21ibyNjb25maWctdGFiSW5kZXgpXG4gICAgICovXG4gICAgdGFiSW5kZXggPyA6IG51bWJlclxuICAgIC8qKlxuICAgICAqIEF1dG8gZGV0ZWN0ZWQgd2hlbiB1c2VkIHdpdGhpbiBhIFRhc2tCb2FyZC4gSWYgeW91IGFkZCB0aGUgd2lkZ2V0IGVsc2V3aGVyZSwgaXQgd2lsbCB0cnkgdG8gZmluZCBhbiBpbnN0YW5jZVxuICAgICAqIG9mIFRhc2tCb2FyZCBvbiBwYWdlLiBJZiB0aGF0IGZhaWxzIHlvdSBoYXZlIHRvIHN1cHBseSB0aGlzIGNvbmZpZyB0byBjb25uZWN0IGl0IHRvIGEgVGFza0JvYXJkIG1hbnVhbGx5LlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3Rhc2tib2FyZC9kb2NzL2FwaS9UYXNrQm9hcmQvd2lkZ2V0L1Jlc291cmNlc0NvbWJvI2NvbmZpZy10YXNrQm9hcmQpXG4gICAgICovXG4gICAgdGFza0JvYXJkID8gOiBUYXNrQm9hcmRcbiAgICAvKipcbiAgICAgKiBUZXh0IGFsaWdubWVudDogJ2xlZnQnLCAnY2VudGVyJyBvciAncmlnaHQnLiBBbHNvIGFjY2VwdHMgZGlyZWN0aW9uIG5ldXRyYWwgJ3N0YXJ0JyBhbmQgJ2VuZCcuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvdGFza2JvYXJkL2RvY3MvYXBpL1Rhc2tCb2FyZC93aWRnZXQvUmVzb3VyY2VzQ29tYm8jY29uZmlnLXRleHRBbGlnbilcbiAgICAgKi9cbiAgICB0ZXh0QWxpZ24gPyA6ICdsZWZ0J3wnY2VudGVyJ3wncmlnaHQnfCdzdGFydCd8J2VuZCdcbiAgICAvKipcbiAgICAgKiBBIHRpdGxlIHRvIGRpc3BsYXkgZm9yIHRoZSB3aWRnZXQuIE9ubHkgaW4gZWZmZWN0IHdoZW4gaW5zaWRlIGEgY29udGFpbmVyIHRoYXQgdXNlcyBpdCAoc3VjaCBhcyBUYWJQYW5lbClcbiAgICAgKi9cbiAgICB0aXRsZSA/IDogc3RyaW5nXG4gICAgLyoqXG4gICAgICogVG9vbHRpcCBmb3IgdGhlIHdpZGdldCwgZWl0aGVyIGFzIGEgc3RyaW5nIG9yIGFzIGEgVG9vbHRpcCBjb25maWcgb2JqZWN0LlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3Rhc2tib2FyZC9kb2NzL2FwaS9UYXNrQm9hcmQvd2lkZ2V0L1Jlc291cmNlc0NvbWJvI2NvbmZpZy10b29sdGlwKVxuICAgICAqL1xuICAgIHRvb2x0aXAgPyA6IHN0cmluZ3xUb29sdGlwQ29uZmlnfG51bGxcbiAgICAvKipcbiAgICAgKiBIb3cgdG8gcXVlcnkgdGhlIHN0b3JlIHVwb24gY2xpY2sgb2YgdGhlIGV4cGFuZCB0cmlnZ2VyLiBTcGVjaWZ5IG9uZSBvZiB0aGVzZSB2YWx1ZXM6XG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvdGFza2JvYXJkL2RvY3MvYXBpL1Rhc2tCb2FyZC93aWRnZXQvUmVzb3VyY2VzQ29tYm8jY29uZmlnLXRyaWdnZXJBY3Rpb24pXG4gICAgICovXG4gICAgdHJpZ2dlckFjdGlvbiA/IDogJ2FsbCd8J2xhc3QnfG51bGxcbiAgICAvKipcbiAgICAgKiBUaGUgdHJpZ2dlcnMgdG8gYWRkIGVpdGhlciBiZWZvcmUgb3IgYWZ0ZXIgdGhlIGlucHV0IGZpZWxkLiBFYWNoIHByb3BlcnR5IG5hbWUgaXMgdGhlIHJlZmVyZW5jZSBieSB3aGljaFxuICAgICAqIGFuIGluc3RhbnRpYXRlZCBUcmlnZ2VyIFdpZGdldCBtYXkgYmUgcmV0cmlldmVkIGZyb20gdGhlIGxpdmUgYHRyaWdnZXJzYCBwcm9wZXJ0eS5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy90YXNrYm9hcmQvZG9jcy9hcGkvVGFza0JvYXJkL3dpZGdldC9SZXNvdXJjZXNDb21ibyNjb25maWctdHJpZ2dlcnMpXG4gICAgICovXG4gICAgdHJpZ2dlcnMgPyA6IFJlY29yZDxzdHJpbmcsIEZpZWxkVHJpZ2dlckNvbmZpZz58UmVjb3JkPHN0cmluZywgV2lkZ2V0PlxuICAgIHR5cGUgPyA6ICdyZXNvdXJjZXNjb21ibydcbiAgICAvKipcbiAgICAgKiBDdXN0b20gQ1NTIGNsYXNzIG5hbWUgc3VmZml4ZXMgdG8gYXBwbHkgdG8gdGhlIGVsZW1lbnRzIHJlbmRlcmVkIGJ5IHRoaXMgd2lkZ2V0LiBUaGlzIG1heSBiZSBzcGVjaWZpZWRcbiAgICAgKiBhcyBhIHNwYWNlIHNlcGFyYXRlZCBzdHJpbmcsIGFuIGFycmF5IG9mIHN0cmluZ3MsIG9yIGFzIGFuIG9iamVjdCBpbiB3aGljaCBwcm9wZXJ0eSBuYW1lcyB3aXRoIHRydXRoeVxuICAgICAqIHZhbHVlcyBhcmUgdXNlZCBhcyB0aGUgY2xhc3MgbmFtZXMuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvdGFza2JvYXJkL2RvY3MvYXBpL1Rhc2tCb2FyZC93aWRnZXQvUmVzb3VyY2VzQ29tYm8jY29uZmlnLXVpKVxuICAgICAqL1xuICAgIHVpID8gOiBzdHJpbmd8b2JqZWN0XG4gICAgLyoqXG4gICAgICogYHRydWVgIHRvIGNhdXNlIHRoZSBmaWVsZCB0byBiZSBpbiBhbiBpbnZhbGlkIHN0YXRlIHdoaWxlIHRoZSB0eXBlZCBmaWx0ZXIgc3RyaW5nIGRvZXMgbm90IG1hdGNoIGEgcmVjb3JkIGluIHRoZSBzdG9yZS5cbiAgICAgKi9cbiAgICB2YWxpZGF0ZUZpbHRlciA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIFNldCB0byBgZmFsc2VgIHRvIG5vdCBoaWdobGlnaHQgYSBmaWVsZCBhcyBpbnZhbGlkIHdoaWxlIHR5cGluZywgdG8gaW5zdGVhZCBzaG93IGl0IG9uIEVOVEVSIGtleSBwcmVzc1xuICAgICAqIG9yIHNpbWlsYXIuXG4gICAgICovXG4gICAgdmFsaWRhdGVPbklucHV0ID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogVGhlIGluaXRpYWwgdmFsdWUgb2YgdGhpcyBDb21ibyBib3guIEluIHNpbmdsZSBzZWxlY3QgbW9kZSAoZGVmYXVsdCkgaXQncyBhIHNpbXBsZSBzdHJpbmcgdmFsdWUsIGZvclxuICAgICAqIFttdWx0aVNlbGVjdF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy90YXNrYm9hcmQvZG9jcy9hcGkvQ29yZS93aWRnZXQvQ29tYm8jY29uZmlnLW11bHRpU2VsZWN0KSBtb2RlLCBpdCBzaG91bGQgYmUgYW4gYXJyYXkgb2YgcmVjb3JkIGlkcy5cbiAgICAgKi9cbiAgICB2YWx1ZSA/IDogc3RyaW5nfG51bWJlcnxzdHJpbmdbXXxudW1iZXJbXVxuICAgIC8qKlxuICAgICAqIEZpZWxkIHVzZWQgZm9yIGl0ZW0gdmFsdWUgd2hlbiBwb3B1bGF0aW5nIGZyb20gc3RvcmUuIFNldHRpbmcgdGhpcyB0byBgbnVsbGAgd2lsbFxuICAgICAqIHlpZWxkIHRoZSBzZWxlY3RlZCByZWNvcmQgYXMgdGhlIENvbWJvJ3MgW3ZhbHVlXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3Rhc2tib2FyZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9Db21ibyNwcm9wZXJ0eS12YWx1ZSkuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvdGFza2JvYXJkL2RvY3MvYXBpL1Rhc2tCb2FyZC93aWRnZXQvUmVzb3VyY2VzQ29tYm8jY29uZmlnLXZhbHVlRmllbGQpXG4gICAgICovXG4gICAgdmFsdWVGaWVsZCA/IDogc3RyaW5nfG51bGxcbiAgICAvKipcbiAgICAgKiBBIHdpZGdldHMgd2VpZ2h0IGRldGVybWluZXMgaXRzIHBvc2l0aW9uIGFtb25nIHNpYmxpbmdzIHdoZW4gYWRkZWQgdG8gYSBbQ29udGFpbmVyXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3Rhc2tib2FyZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9Db250YWluZXIpLlxuICAgICAqIEhpZ2hlciB3ZWlnaHRzIGdvIGZ1cnRoZXIgZG93bi5cbiAgICAgKi9cbiAgICB3ZWlnaHQgPyA6IG51bWJlclxuICAgIC8qKlxuICAgICAqIFdpZGdldCdzIHdpZHRoLCB1c2VkIHRvIHNldCBlbGVtZW50IGBzdHlsZS53aWR0aGAuIEVpdGhlciBzcGVjaWZ5IGEgdmFsaWQgd2lkdGggc3RyaW5nIG9yIGEgbnVtYmVyLCB3aGljaFxuICAgICAqIHdpbGwgZ2V0ICdweCcgYXBwZW5kZWQuIFdlIHJlY29tbWVuZCB1c2luZyBDU1MgYXMgdGhlIHByaW1hcnkgd2F5IHRvIGNvbnRyb2wgd2lkdGgsIGJ1dCBpbiBzb21lIGNhc2VzXG4gICAgICogdGhpcyBjb25maWcgaXMgY29udmVuaWVudC5cbiAgICAgKi9cbiAgICB3aWR0aCA/IDogc3RyaW5nfG51bWJlclxuICAgIC8qKlxuICAgICAqIFRoZSB4IHBvc2l0aW9uIGZvciB0aGUgd2lkZ2V0LlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3Rhc2tib2FyZC9kb2NzL2FwaS9UYXNrQm9hcmQvd2lkZ2V0L1Jlc291cmNlc0NvbWJvI2NvbmZpZy14KVxuICAgICAqL1xuICAgIHggPyA6IG51bWJlclxuICAgIC8qKlxuICAgICAqIFRoZSB5IHBvc2l0aW9uIGZvciB0aGUgd2lkZ2V0LlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3Rhc2tib2FyZC9kb2NzL2FwaS9UYXNrQm9hcmQvd2lkZ2V0L1Jlc291cmNlc0NvbWJvI2NvbmZpZy15KVxuICAgICAqL1xuICAgIHkgPyA6IG51bWJlclxuXG59XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yIDogJ2JyeW50dW0tcmVzb3VyY2VzLWNvbWJvJyxcbiAgICB0ZW1wbGF0ZSA6ICcnXG59KVxuZXhwb3J0IGNsYXNzIEJyeW50dW1SZXNvdXJjZXNDb21ib0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcblxuICAgIHB1YmxpYyBzdGF0aWMgaW5zdGFuY2VDbGFzcyA9IFJlc291cmNlc0NvbWJvO1xuXG4gICAgcHVibGljIHN0YXRpYyBpbnN0YW5jZU5hbWUgPSAnUmVzb3VyY2VzQ29tYm8nO1xuXG4gICAgcHJpdmF0ZSBzdGF0aWMgYnJ5bnR1bUV2ZW50czogc3RyaW5nW10gPSBbXG4gICAgICAgICdvbkFjdGlvbicsXG4gICAgICAgICdvbkJlZm9yZURlc3Ryb3knLFxuICAgICAgICAnb25CZWZvcmVIaWRlJyxcbiAgICAgICAgJ29uQmVmb3JlU2hvdycsXG4gICAgICAgICdvbkNhdGNoQWxsJyxcbiAgICAgICAgJ29uQ2hhbmdlJyxcbiAgICAgICAgJ29uQ2xlYXInLFxuICAgICAgICAnb25EZXN0cm95JyxcbiAgICAgICAgJ29uRWxlbWVudENyZWF0ZWQnLFxuICAgICAgICAnb25Gb2N1c0luJyxcbiAgICAgICAgJ29uRm9jdXNPdXQnLFxuICAgICAgICAnb25IaWRlJyxcbiAgICAgICAgJ29uSW5wdXQnLFxuICAgICAgICAnb25QYWludCcsXG4gICAgICAgICdvblJlYWRPbmx5JyxcbiAgICAgICAgJ29uUmVjb21wb3NlJyxcbiAgICAgICAgJ29uUmVzaXplJyxcbiAgICAgICAgJ29uU2VsZWN0JyxcbiAgICAgICAgJ29uU2hvdycsXG4gICAgICAgICdvblRyaWdnZXInXG4gICAgXTtcblxuICAgIHByaXZhdGUgc3RhdGljIGJyeW50dW1GZWF0dXJlTmFtZXM6IHN0cmluZ1tdID0gW1xuXG4gICAgXTtcblxuICAgIHByaXZhdGUgc3RhdGljIGJyeW50dW1Db25maWdzOiBzdHJpbmdbXSA9IEJyeW50dW1SZXNvdXJjZXNDb21ib0NvbXBvbmVudC5icnludHVtRmVhdHVyZU5hbWVzLmNvbmNhdChbXG4gICAgICAgICdhZG9wdCcsXG4gICAgICAgICdhbGlnbicsXG4gICAgICAgICdhbGlnblNlbGYnLFxuICAgICAgICAnYW5jaG9yJyxcbiAgICAgICAgJ2FwcGVuZFRvJyxcbiAgICAgICAgJ2FyaWFEZXNjcmlwdGlvbicsXG4gICAgICAgICdhcmlhTGFiZWwnLFxuICAgICAgICAnYXV0b0NvbXBsZXRlJyxcbiAgICAgICAgJ2F1dG9FeHBhbmQnLFxuICAgICAgICAnYXV0b1NlbGVjdCcsXG4gICAgICAgICdiYWRnZScsXG4gICAgICAgICdidWJibGVFdmVudHMnLFxuICAgICAgICAnY2FjaGVMYXN0UmVzdWx0JyxcbiAgICAgICAgJ2NhbGxPbkZ1bmN0aW9ucycsXG4gICAgICAgICdjYXNlU2Vuc2l0aXZlJyxcbiAgICAgICAgJ2NhdGNoRXZlbnRIYW5kbGVyRXhjZXB0aW9ucycsXG4gICAgICAgICdjZW50ZXJlZCcsXG4gICAgICAgICdjaGlwVmlldycsXG4gICAgICAgICdjbGVhcmFibGUnLFxuICAgICAgICAnY2xlYXJUZXh0T25QaWNrZXJIaWRlJyxcbiAgICAgICAgJ2NsZWFyVGV4dE9uU2VsZWN0aW9uJyxcbiAgICAgICAgJ2NsZWFyV2hlbklucHV0RW1wdHknLFxuICAgICAgICAnY2xzJyxcbiAgICAgICAgJ2NvbG9yJyxcbiAgICAgICAgJ2NvbHVtbicsXG4gICAgICAgICdjb25maWcnLFxuICAgICAgICAnY29uc3RyYWluVG8nLFxuICAgICAgICAnY29udGFpbmVyJyxcbiAgICAgICAgJ2NvbnRhaW5WYWx1ZXMnLFxuICAgICAgICAnY29udGVudEVsZW1lbnRDbHMnLFxuICAgICAgICAnY3JlYXRlT25Vbm1hdGNoZWQnLFxuICAgICAgICAnZGF0YUZpZWxkJyxcbiAgICAgICAgJ2RhdGFzZXQnLFxuICAgICAgICAnZGVmYXVsdEJpbmRQcm9wZXJ0eScsXG4gICAgICAgICdkZXRlY3RDU1NDb21wYXRpYmlsaXR5SXNzdWVzJyxcbiAgICAgICAgJ2Rpc2FibGVkJyxcbiAgICAgICAgJ2Rpc3BsYXlGaWVsZCcsXG4gICAgICAgICdkaXNwbGF5VmFsdWVSZW5kZXJlcicsXG4gICAgICAgICdkb2NrJyxcbiAgICAgICAgJ2RyYWdnYWJsZScsXG4gICAgICAgICdlZGl0YWJsZScsXG4gICAgICAgICdlbGVtZW50QXR0cmlidXRlcycsXG4gICAgICAgICdlbXB0eVRleHQnLFxuICAgICAgICAnZW5jb2RlRmlsdGVyUGFyYW1zJyxcbiAgICAgICAgJ2V4dHJhRGF0YScsXG4gICAgICAgICdmaWx0ZXJPbkVudGVyJyxcbiAgICAgICAgJ2ZpbHRlck9wZXJhdG9yJyxcbiAgICAgICAgJ2ZpbHRlclBhcmFtTmFtZScsXG4gICAgICAgICdmaWx0ZXJTZWxlY3RlZCcsXG4gICAgICAgICdmbGV4JyxcbiAgICAgICAgJ2Zsb2F0aW5nJyxcbiAgICAgICAgJ2hlaWdodCcsXG4gICAgICAgICdoaWRkZW4nLFxuICAgICAgICAnaGlkZUFuaW1hdGlvbicsXG4gICAgICAgICdoaWRlUGlja2VyT25TZWxlY3QnLFxuICAgICAgICAnaGlkZVRyaWdnZXInLFxuICAgICAgICAnaGlnaGxpZ2h0RXh0ZXJuYWxDaGFuZ2UnLFxuICAgICAgICAnaGludCcsXG4gICAgICAgICdoaW50SHRtbCcsXG4gICAgICAgICdpZCcsXG4gICAgICAgICdpZ25vcmVQYXJlbnRSZWFkT25seScsXG4gICAgICAgICdpbmxpbmUnLFxuICAgICAgICAnaW5saW5lUGlja2VyJyxcbiAgICAgICAgJ2lucHV0QWxpZ24nLFxuICAgICAgICAnaW5wdXRBdHRyaWJ1dGVzJyxcbiAgICAgICAgJ2lucHV0VGFnJyxcbiAgICAgICAgJ2lucHV0VHlwZScsXG4gICAgICAgICdpbnB1dFdpZHRoJyxcbiAgICAgICAgJ2luc2VydEJlZm9yZScsXG4gICAgICAgICdpbnNlcnRGaXJzdCcsXG4gICAgICAgICdpdGVtcycsXG4gICAgICAgICdrZXlNYXAnLFxuICAgICAgICAna2V5U3Ryb2tlQ2hhbmdlRGVsYXknLFxuICAgICAgICAna2V5U3Ryb2tlRmlsdGVyRGVsYXknLFxuICAgICAgICAnbGFiZWwnLFxuICAgICAgICAnbGFiZWxDbHMnLFxuICAgICAgICAnbGFiZWxQb3NpdGlvbicsXG4gICAgICAgICdsYWJlbHMnLFxuICAgICAgICAnbGFiZWxXaWR0aCcsXG4gICAgICAgICdsaXN0Q2xzJyxcbiAgICAgICAgJ2xpc3RlbmVycycsXG4gICAgICAgICdsaXN0SXRlbVRwbCcsXG4gICAgICAgICdsb2NhbGVDbGFzcycsXG4gICAgICAgICdsb2NhbGl6YWJsZScsXG4gICAgICAgICdsb2NhbGl6YWJsZVByb3BlcnRpZXMnLFxuICAgICAgICAnbWFyZ2luJyxcbiAgICAgICAgJ21hc2tEZWZhdWx0cycsXG4gICAgICAgICdtYXNrZWQnLFxuICAgICAgICAnbWF4SGVpZ2h0JyxcbiAgICAgICAgJ21heGltaXplT25Nb2JpbGUnLFxuICAgICAgICAnbWF4TGVuZ3RoJyxcbiAgICAgICAgJ21heFdpZHRoJyxcbiAgICAgICAgJ21pbkNoYXJzJyxcbiAgICAgICAgJ21pbkhlaWdodCcsXG4gICAgICAgICdtaW5MZW5ndGgnLFxuICAgICAgICAnbWluV2lkdGgnLFxuICAgICAgICAnbW9uaXRvclJlc2l6ZScsXG4gICAgICAgICdtdWx0aVNlbGVjdCcsXG4gICAgICAgICdtdWx0aVZhbHVlU2VwYXJhdG9yJyxcbiAgICAgICAgJ25hbWUnLFxuICAgICAgICAnb3ZlcmxheUFuY2hvcicsXG4gICAgICAgICdvd25lcicsXG4gICAgICAgICdwaWNrZXInLFxuICAgICAgICAncGlja2VyQWxpZ25FbGVtZW50JyxcbiAgICAgICAgJ3BpY2tlcldpZHRoJyxcbiAgICAgICAgJ3BsYWNlaG9sZGVyJyxcbiAgICAgICAgJ3Bvc2l0aW9uZWQnLFxuICAgICAgICAncHJldmVudFRvb2x0aXBPblRvdWNoJyxcbiAgICAgICAgJ3ByaW1hcnlGaWx0ZXInLFxuICAgICAgICAncmVhZE9ubHknLFxuICAgICAgICAncmVsYXlTdG9yZUV2ZW50cycsXG4gICAgICAgICdyZW5kaXRpb24nLFxuICAgICAgICAncmVxdWlyZWQnLFxuICAgICAgICAncmV2ZXJ0T25Fc2NhcGUnLFxuICAgICAgICAncmlwcGxlJyxcbiAgICAgICAgJ3Jvb3RFbGVtZW50JyxcbiAgICAgICAgJ3J0bCcsXG4gICAgICAgICdzY3JvbGxBY3Rpb24nLFxuICAgICAgICAnc2hvd0FuaW1hdGlvbicsXG4gICAgICAgICdzaG93UmVxdWlyZWRJbmRpY2F0b3InLFxuICAgICAgICAnc2hvd1Rvb2x0aXBXaGVuRGlzYWJsZWQnLFxuICAgICAgICAnc2tpcFZhbGlkYXRpb24nLFxuICAgICAgICAnc3BhbicsXG4gICAgICAgICdzcGVsbENoZWNrJyxcbiAgICAgICAgJ3N0b3JlJyxcbiAgICAgICAgJ3RhYicsXG4gICAgICAgICd0YWJJbmRleCcsXG4gICAgICAgICd0YXNrQm9hcmQnLFxuICAgICAgICAndGV4dEFsaWduJyxcbiAgICAgICAgJ3RpdGxlJyxcbiAgICAgICAgJ3Rvb2x0aXAnLFxuICAgICAgICAndHJpZ2dlckFjdGlvbicsXG4gICAgICAgICd0cmlnZ2VycycsXG4gICAgICAgICd0eXBlJyxcbiAgICAgICAgJ3VpJyxcbiAgICAgICAgJ3ZhbGlkYXRlRmlsdGVyJyxcbiAgICAgICAgJ3ZhbGlkYXRlT25JbnB1dCcsXG4gICAgICAgICd2YWx1ZScsXG4gICAgICAgICd2YWx1ZUZpZWxkJyxcbiAgICAgICAgJ3dlaWdodCcsXG4gICAgICAgICd3aWR0aCcsXG4gICAgICAgICd4JyxcbiAgICAgICAgJ3knXG4gICAgXSk7XG5cbiAgICBwcml2YXRlIHN0YXRpYyBicnludHVtQ29uZmlnc09ubHk6IHN0cmluZ1tdID0gW1xuICAgICAgICAnYWRvcHQnLFxuICAgICAgICAnYWxpZ24nLFxuICAgICAgICAnYW5jaG9yJyxcbiAgICAgICAgJ2FyaWFEZXNjcmlwdGlvbicsXG4gICAgICAgICdhcmlhTGFiZWwnLFxuICAgICAgICAnYXV0b0NvbXBsZXRlJyxcbiAgICAgICAgJ2F1dG9FeHBhbmQnLFxuICAgICAgICAnYXV0b1NlbGVjdCcsXG4gICAgICAgICdidWJibGVFdmVudHMnLFxuICAgICAgICAnY2FjaGVMYXN0UmVzdWx0JyxcbiAgICAgICAgJ2Nhc2VTZW5zaXRpdmUnLFxuICAgICAgICAnY2VudGVyZWQnLFxuICAgICAgICAnY2hpcFZpZXcnLFxuICAgICAgICAnY2xlYXJhYmxlJyxcbiAgICAgICAgJ2NsZWFyVGV4dE9uUGlja2VySGlkZScsXG4gICAgICAgICdjbGVhclRleHRPblNlbGVjdGlvbicsXG4gICAgICAgICdjbGVhcldoZW5JbnB1dEVtcHR5JyxcbiAgICAgICAgJ2NvbG9yJyxcbiAgICAgICAgJ2NvbmZpZycsXG4gICAgICAgICdjb25zdHJhaW5UbycsXG4gICAgICAgICdjb250YWluZXInLFxuICAgICAgICAnY29udGFpblZhbHVlcycsXG4gICAgICAgICdjb250ZW50RWxlbWVudENscycsXG4gICAgICAgICdjcmVhdGVPblVubWF0Y2hlZCcsXG4gICAgICAgICdkYXRhRmllbGQnLFxuICAgICAgICAnZGVmYXVsdEJpbmRQcm9wZXJ0eScsXG4gICAgICAgICdkZXRlY3RDU1NDb21wYXRpYmlsaXR5SXNzdWVzJyxcbiAgICAgICAgJ2Rpc3BsYXlGaWVsZCcsXG4gICAgICAgICdkaXNwbGF5VmFsdWVSZW5kZXJlcicsXG4gICAgICAgICdkb2NrJyxcbiAgICAgICAgJ2RyYWdnYWJsZScsXG4gICAgICAgICdlbGVtZW50QXR0cmlidXRlcycsXG4gICAgICAgICdlbXB0eVRleHQnLFxuICAgICAgICAnZW5jb2RlRmlsdGVyUGFyYW1zJyxcbiAgICAgICAgJ2ZpbHRlck9uRW50ZXInLFxuICAgICAgICAnZmlsdGVyUGFyYW1OYW1lJyxcbiAgICAgICAgJ2ZpbHRlclNlbGVjdGVkJyxcbiAgICAgICAgJ2Zsb2F0aW5nJyxcbiAgICAgICAgJ2hpZGVBbmltYXRpb24nLFxuICAgICAgICAnaGlkZVBpY2tlck9uU2VsZWN0JyxcbiAgICAgICAgJ2hpZGVUcmlnZ2VyJyxcbiAgICAgICAgJ2hpZ2hsaWdodEV4dGVybmFsQ2hhbmdlJyxcbiAgICAgICAgJ2hpbnQnLFxuICAgICAgICAnaGludEh0bWwnLFxuICAgICAgICAnaWdub3JlUGFyZW50UmVhZE9ubHknLFxuICAgICAgICAnaW5saW5lJyxcbiAgICAgICAgJ2lubGluZVBpY2tlcicsXG4gICAgICAgICdpbnB1dEFsaWduJyxcbiAgICAgICAgJ2lucHV0QXR0cmlidXRlcycsXG4gICAgICAgICdpbnB1dFRhZycsXG4gICAgICAgICdpbnB1dFR5cGUnLFxuICAgICAgICAnaW5wdXRXaWR0aCcsXG4gICAgICAgICdpdGVtcycsXG4gICAgICAgICdrZXlTdHJva2VDaGFuZ2VEZWxheScsXG4gICAgICAgICdrZXlTdHJva2VGaWx0ZXJEZWxheScsXG4gICAgICAgICdsYWJlbENscycsXG4gICAgICAgICdsYWJlbFBvc2l0aW9uJyxcbiAgICAgICAgJ2xhYmVscycsXG4gICAgICAgICdsYWJlbFdpZHRoJyxcbiAgICAgICAgJ2xpc3RDbHMnLFxuICAgICAgICAnbGlzdGVuZXJzJyxcbiAgICAgICAgJ2xpc3RJdGVtVHBsJyxcbiAgICAgICAgJ2xvY2FsZUNsYXNzJyxcbiAgICAgICAgJ2xvY2FsaXphYmxlJyxcbiAgICAgICAgJ2xvY2FsaXphYmxlUHJvcGVydGllcycsXG4gICAgICAgICdtYXNrRGVmYXVsdHMnLFxuICAgICAgICAnbWFza2VkJyxcbiAgICAgICAgJ21heExlbmd0aCcsXG4gICAgICAgICdtaW5DaGFycycsXG4gICAgICAgICdtaW5MZW5ndGgnLFxuICAgICAgICAnbW9uaXRvclJlc2l6ZScsXG4gICAgICAgICdtdWx0aVZhbHVlU2VwYXJhdG9yJyxcbiAgICAgICAgJ25hbWUnLFxuICAgICAgICAnb3ZlcmxheUFuY2hvcicsXG4gICAgICAgICdvd25lcicsXG4gICAgICAgICdwaWNrZXJBbGlnbkVsZW1lbnQnLFxuICAgICAgICAncGlja2VyV2lkdGgnLFxuICAgICAgICAncG9zaXRpb25lZCcsXG4gICAgICAgICdwcmV2ZW50VG9vbHRpcE9uVG91Y2gnLFxuICAgICAgICAncHJpbWFyeUZpbHRlcicsXG4gICAgICAgICdyZWxheVN0b3JlRXZlbnRzJyxcbiAgICAgICAgJ3JldmVydE9uRXNjYXBlJyxcbiAgICAgICAgJ3JpcHBsZScsXG4gICAgICAgICdyb290RWxlbWVudCcsXG4gICAgICAgICdzY3JvbGxBY3Rpb24nLFxuICAgICAgICAnc2hvd0FuaW1hdGlvbicsXG4gICAgICAgICdzaG93VG9vbHRpcFdoZW5EaXNhYmxlZCcsXG4gICAgICAgICdza2lwVmFsaWRhdGlvbicsXG4gICAgICAgICdzcGVsbENoZWNrJyxcbiAgICAgICAgJ3RhYicsXG4gICAgICAgICd0YWJJbmRleCcsXG4gICAgICAgICd0YXNrQm9hcmQnLFxuICAgICAgICAndGV4dEFsaWduJyxcbiAgICAgICAgJ3RpdGxlJyxcbiAgICAgICAgJ3RyaWdnZXJBY3Rpb24nLFxuICAgICAgICAndHlwZScsXG4gICAgICAgICd1aScsXG4gICAgICAgICd2YWxpZGF0ZUZpbHRlcicsXG4gICAgICAgICd2YWxpZGF0ZU9uSW5wdXQnLFxuICAgICAgICAndmFsdWVGaWVsZCcsXG4gICAgICAgICd3ZWlnaHQnXG4gICAgXTtcblxuICAgIHByaXZhdGUgc3RhdGljIGJyeW50dW1Qcm9wczogc3RyaW5nW10gPSBCcnludHVtUmVzb3VyY2VzQ29tYm9Db21wb25lbnQuYnJ5bnR1bUZlYXR1cmVOYW1lcy5jb25jYXQoW1xuICAgICAgICAnYWxpZ25TZWxmJyxcbiAgICAgICAgJ2FuY2hvclNpemUnLFxuICAgICAgICAnYXBwZW5kVG8nLFxuICAgICAgICAnYmFkZ2UnLFxuICAgICAgICAnY2FsbE9uRnVuY3Rpb25zJyxcbiAgICAgICAgJ2NhdGNoRXZlbnRIYW5kbGVyRXhjZXB0aW9ucycsXG4gICAgICAgICdjbHMnLFxuICAgICAgICAnY29sdW1uJyxcbiAgICAgICAgJ2NvbnRlbnQnLFxuICAgICAgICAnZGF0YXNldCcsXG4gICAgICAgICdkaXNhYmxlZCcsXG4gICAgICAgICdlZGl0YWJsZScsXG4gICAgICAgICdleHRyYURhdGEnLFxuICAgICAgICAnZmlsdGVyT3BlcmF0b3InLFxuICAgICAgICAnZmxleCcsXG4gICAgICAgICdmb2N1c1Zpc2libGUnLFxuICAgICAgICAnZm9ybXVsYScsXG4gICAgICAgICdoZWlnaHQnLFxuICAgICAgICAnaGlkZGVuJyxcbiAgICAgICAgJ2h0bWwnLFxuICAgICAgICAnaWQnLFxuICAgICAgICAnaW5wdXQnLFxuICAgICAgICAnaW5zZXJ0QmVmb3JlJyxcbiAgICAgICAgJ2luc2VydEZpcnN0JyxcbiAgICAgICAgJ2tleU1hcCcsXG4gICAgICAgICdsYWJlbCcsXG4gICAgICAgICdtYXJnaW4nLFxuICAgICAgICAnbWF4SGVpZ2h0JyxcbiAgICAgICAgJ21heGltaXplT25Nb2JpbGUnLFxuICAgICAgICAnbWF4V2lkdGgnLFxuICAgICAgICAnbWluSGVpZ2h0JyxcbiAgICAgICAgJ21pbldpZHRoJyxcbiAgICAgICAgJ211bHRpU2VsZWN0JyxcbiAgICAgICAgJ3BhcmVudCcsXG4gICAgICAgICdwaWNrZXInLFxuICAgICAgICAncGxhY2Vob2xkZXInLFxuICAgICAgICAncmVhZE9ubHknLFxuICAgICAgICAncmVuZGl0aW9uJyxcbiAgICAgICAgJ3JlcXVpcmVkJyxcbiAgICAgICAgJ3J0bCcsXG4gICAgICAgICdzY3JvbGxhYmxlJyxcbiAgICAgICAgJ3Nob3dSZXF1aXJlZEluZGljYXRvcicsXG4gICAgICAgICdzcGFuJyxcbiAgICAgICAgJ3N0b3JlJyxcbiAgICAgICAgJ3Rvb2x0aXAnLFxuICAgICAgICAndHJpZ2dlcnMnLFxuICAgICAgICAndmFsdWUnLFxuICAgICAgICAnd2lkdGgnLFxuICAgICAgICAneCcsXG4gICAgICAgICd5J1xuICAgIF0pO1xuXG4gICAgcHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmO1xuICAgIHB1YmxpYyBpbnN0YW5jZSE6IFJlc291cmNlc0NvbWJvO1xuXG4gICAgcHJpdmF0ZSBicnludHVtQ29uZmlnID0ge1xuICAgICAgICBhZG9wdCAgICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICBhcHBlbmRUbyAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICBocmVmICAgICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICBhbmd1bGFyQ29tcG9uZW50IDogdGhpcyxcbiAgICAgICAgZmVhdHVyZXMgICAgICAgICA6IHt9LFxuICAgICAgICBsaXN0ZW5lcnMgICAgICAgIDoge31cbiAgICB9O1xuXG4gICAgY29uc3RydWN0b3IoZWxlbWVudDogRWxlbWVudFJlZikge1xuICAgICAgICB0aGlzLmVsZW1lbnRSZWYgPSBlbGVtZW50O1xuICAgIH1cblxuICAgIC8vIENvbmZpZ3Mgb25seVxuICAgIEBJbnB1dCgpIGFkb3B0ICAgICAgICAgICAgICAgICAgICAgICAgISA6IEhUTUxFbGVtZW50fHN0cmluZztcbiAgICBASW5wdXQoKSBhbGlnbiAgICAgICAgICAgICAgICAgICAgICAgICEgOiBBbGlnblNwZWN8c3RyaW5nO1xuICAgIEBJbnB1dCgpIGFuY2hvciAgICAgICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgYXJpYURlc2NyaXB0aW9uICAgICAgICAgICAgICAhIDogc3RyaW5nO1xuICAgIEBJbnB1dCgpIGFyaWFMYWJlbCAgICAgICAgICAgICAgICAgICAgISA6IHN0cmluZztcbiAgICBASW5wdXQoKSBhdXRvQ29tcGxldGUgICAgICAgICAgICAgICAgICEgOiBzdHJpbmc7XG4gICAgQElucHV0KCkgYXV0b0V4cGFuZCAgICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBhdXRvU2VsZWN0ICAgICAgICAgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGJ1YmJsZUV2ZW50cyAgICAgICAgICAgICAgICAgISA6IG9iamVjdDtcbiAgICBASW5wdXQoKSBjYWNoZUxhc3RSZXN1bHQgICAgICAgICAgICAgICEgOiBudW1iZXJ8c3RyaW5nfER1cmF0aW9ufER1cmF0aW9uQ29uZmlnO1xuICAgIEBJbnB1dCgpIGNhc2VTZW5zaXRpdmUgICAgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgY2VudGVyZWQgICAgICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBjaGlwVmlldyAgICAgICAgICAgICAgICAgICAgICEgOiBDaGlwVmlld0NvbmZpZztcbiAgICBASW5wdXQoKSBjbGVhcmFibGUgICAgICAgICAgICAgICAgICAgICEgOiBib29sZWFufEZpZWxkVHJpZ2dlckNvbmZpZztcbiAgICBASW5wdXQoKSBjbGVhclRleHRPblBpY2tlckhpZGUgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGNsZWFyVGV4dE9uU2VsZWN0aW9uICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgY2xlYXJXaGVuSW5wdXRFbXB0eSAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBjb2xvciAgICAgICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmc7XG4gICAgQElucHV0KCkgY29uZmlnICAgICAgICAgICAgICAgICAgICAgICAhIDogb2JqZWN0O1xuICAgIEBJbnB1dCgpIGNvbnN0cmFpblRvICAgICAgICAgICAgICAgICAgISA6IEhUTUxFbGVtZW50fFdpZGdldHxSZWN0YW5nbGU7XG4gICAgQElucHV0KCkgY29udGFpbmVyICAgICAgICAgICAgICAgICAgICAhIDogUmVjb3JkPHN0cmluZywgVGFza0JvYXJkQ29udGFpbmVySXRlbUNvbmZpZz58VGFza0JvYXJkQ29udGFpbmVySXRlbUNvbmZpZ1tdfEZpZWxkQ29udGFpbmVyQ29uZmlnfEZpZWxkQ29udGFpbmVyO1xuICAgIEBJbnB1dCgpIGNvbnRhaW5WYWx1ZXMgICAgICAgICAgICAgICAgISA6IGJvb2xlYW58c3RyaW5nfCgoZmllbGQ6IEZpZWxkKSA9PiBib29sZWFuKTtcbiAgICBASW5wdXQoKSBjb250ZW50RWxlbWVudENscyAgICAgICAgICAgICEgOiBzdHJpbmd8b2JqZWN0O1xuICAgIEBJbnB1dCgpIGNyZWF0ZU9uVW5tYXRjaGVkICAgICAgICAgICAgISA6ICgobmFtZTogc3RyaW5nLCBjb21ibzogQ29tYm8pID0+IE1vZGVsKXxzdHJpbmd8Ym9vbGVhbjtcbiAgICBASW5wdXQoKSBkYXRhRmllbGQgICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmc7XG4gICAgQElucHV0KCkgZGVmYXVsdEJpbmRQcm9wZXJ0eSAgICAgICAgICAhIDogc3RyaW5nO1xuICAgIEBJbnB1dCgpIGRldGVjdENTU0NvbXBhdGliaWxpdHlJc3N1ZXMgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgZGlzcGxheUZpZWxkICAgICAgICAgICAgICAgICAhIDogc3RyaW5nO1xuICAgIEBJbnB1dCgpIGRpc3BsYXlWYWx1ZVJlbmRlcmVyICAgICAgICAgISA6IChyZWNvcmQ6IE1vZGVsfENvbWJvTW9kZWwsIGNvbWJvOiBDb21ibykgPT4gc3RyaW5nfHZvaWQ7XG4gICAgQElucHV0KCkgZG9jayAgICAgICAgICAgICAgICAgICAgICAgICAhIDogJ3RvcCd8J2JvdHRvbSd8J2xlZnQnfCdyaWdodCd8J3N0YXJ0J3wnZW5kJ3wnaGVhZGVyJ3wncHJlLWhlYWRlcid8b2JqZWN0O1xuICAgIEBJbnB1dCgpIGRyYWdnYWJsZSAgICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW58e1xuICAgICAgICBoYW5kbGVTZWxlY3Rvcj86IHN0cmluZ1xuICAgIH07XG4gICAgQElucHV0KCkgZWxlbWVudEF0dHJpYnV0ZXMgICAgICAgICAgICAhIDogUmVjb3JkPHN0cmluZywgc3RyaW5nfG51bGw+O1xuICAgIEBJbnB1dCgpIGVtcHR5VGV4dCAgICAgICAgICAgICAgICAgICAgISA6IHN0cmluZztcbiAgICBASW5wdXQoKSBlbmNvZGVGaWx0ZXJQYXJhbXMgICAgICAgICAgICEgOiAoZmlsdGVyczogb2JqZWN0W10pID0+IG9iamVjdFtdO1xuICAgIEBJbnB1dCgpIGZpbHRlck9uRW50ZXIgICAgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgZmlsdGVyUGFyYW1OYW1lICAgICAgICAgICAgICAhIDogc3RyaW5nO1xuICAgIEBJbnB1dCgpIGZpbHRlclNlbGVjdGVkICAgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgZmxvYXRpbmcgICAgICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBoaWRlQW5pbWF0aW9uICAgICAgICAgICAgICAgICEgOiBib29sZWFufG9iamVjdDtcbiAgICBASW5wdXQoKSBoaWRlUGlja2VyT25TZWxlY3QgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGhpZGVUcmlnZ2VyICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgaGlnaGxpZ2h0RXh0ZXJuYWxDaGFuZ2UgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBoaW50ICAgICAgICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmd8KChkYXRhOiB7IHNvdXJjZTogRmllbGQsIHZhbHVlOiBhbnkgfSkgPT4gc3RyaW5nKTtcbiAgICBASW5wdXQoKSBoaW50SHRtbCAgICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmd8KChkYXRhOiB7IHNvdXJjZTogRmllbGQsIHZhbHVlOiBhbnkgfSkgPT4gc3RyaW5nKTtcbiAgICBASW5wdXQoKSBpZ25vcmVQYXJlbnRSZWFkT25seSAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGlubGluZSAgICAgICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgaW5saW5lUGlja2VyICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBpbnB1dEFsaWduICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmc7XG4gICAgQElucHV0KCkgaW5wdXRBdHRyaWJ1dGVzICAgICAgICAgICAgICAhIDogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgICBASW5wdXQoKSBpbnB1dFRhZyAgICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmc7XG4gICAgQElucHV0KCkgaW5wdXRUeXBlICAgICAgICAgICAgICAgICAgICAhIDogc3RyaW5nO1xuICAgIEBJbnB1dCgpIGlucHV0V2lkdGggICAgICAgICAgICAgICAgICAgISA6IHN0cmluZ3xudW1iZXI7XG4gICAgQElucHV0KCkgaXRlbXMgICAgICAgICAgICAgICAgICAgICAgICAhIDogb2JqZWN0W118c3RyaW5nW118b2JqZWN0O1xuICAgIEBJbnB1dCgpIGtleVN0cm9rZUNoYW5nZURlbGF5ICAgICAgICAgISA6IG51bWJlcjtcbiAgICBASW5wdXQoKSBrZXlTdHJva2VGaWx0ZXJEZWxheSAgICAgICAgICEgOiBudW1iZXI7XG4gICAgQElucHV0KCkgbGFiZWxDbHMgICAgICAgICAgICAgICAgICAgICAhIDogc3RyaW5nfG9iamVjdDtcbiAgICBASW5wdXQoKSBsYWJlbFBvc2l0aW9uICAgICAgICAgICAgICAgICEgOiAnYmVmb3JlJ3wnYWJvdmUnfG51bGw7XG4gICAgQElucHV0KCkgbGFiZWxzICAgICAgICAgICAgICAgICAgICAgICAhIDogb2JqZWN0W107XG4gICAgQElucHV0KCkgbGFiZWxXaWR0aCAgICAgICAgICAgICAgICAgICAhIDogc3RyaW5nfG51bWJlcjtcbiAgICBASW5wdXQoKSBsaXN0Q2xzICAgICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmc7XG4gICAgQElucHV0KCkgbGlzdGVuZXJzICAgICAgICAgICAgICAgICAgICAhIDogUmVzb3VyY2VzQ29tYm9MaXN0ZW5lcnM7XG4gICAgQElucHV0KCkgbGlzdEl0ZW1UcGwgICAgICAgICAgICAgICAgICAhIDogKHJlY29yZDogTW9kZWx8Q29tYm9Nb2RlbCkgPT4gc3RyaW5nfHZvaWQ7XG4gICAgQElucHV0KCkgbG9jYWxlQ2xhc3MgICAgICAgICAgICAgICAgICAhIDogdHlwZW9mIEJhc2U7XG4gICAgQElucHV0KCkgbG9jYWxpemFibGUgICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBsb2NhbGl6YWJsZVByb3BlcnRpZXMgICAgICAgICEgOiBzdHJpbmdbXTtcbiAgICBASW5wdXQoKSBtYXNrRGVmYXVsdHMgICAgICAgICAgICAgICAgICEgOiBNYXNrQ29uZmlnO1xuICAgIEBJbnB1dCgpIG1hc2tlZCAgICAgICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW58c3RyaW5nfE1hc2tDb25maWc7XG4gICAgQElucHV0KCkgbWF4TGVuZ3RoICAgICAgICAgICAgICAgICAgICAhIDogbnVtYmVyO1xuICAgIEBJbnB1dCgpIG1pbkNoYXJzICAgICAgICAgICAgICAgICAgICAgISA6IG51bWJlcjtcbiAgICBASW5wdXQoKSBtaW5MZW5ndGggICAgICAgICAgICAgICAgICAgICEgOiBudW1iZXI7XG4gICAgQElucHV0KCkgbW9uaXRvclJlc2l6ZSAgICAgICAgICAgICAgICAhIDogYm9vbGVhbnx7XG4gICAgICAgIGltbWVkaWF0ZT86IGJvb2xlYW5cbiAgICB9O1xuICAgIEBJbnB1dCgpIG11bHRpVmFsdWVTZXBhcmF0b3IgICAgICAgICAgISA6IHN0cmluZztcbiAgICBASW5wdXQoKSBuYW1lICAgICAgICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmc7XG4gICAgQElucHV0KCkgb3ZlcmxheUFuY2hvciAgICAgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBvd25lciAgICAgICAgICAgICAgICAgICAgICAgICEgOiBXaWRnZXR8YW55O1xuICAgIEBJbnB1dCgpIHBpY2tlckFsaWduRWxlbWVudCAgICAgICAgICAgISA6IHN0cmluZztcbiAgICBASW5wdXQoKSBwaWNrZXJXaWR0aCAgICAgICAgICAgICAgICAgICEgOiBudW1iZXJ8c3RyaW5nO1xuICAgIEBJbnB1dCgpIHBvc2l0aW9uZWQgICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgcHJldmVudFRvb2x0aXBPblRvdWNoICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBwcmltYXJ5RmlsdGVyICAgICAgICAgICAgICAgICEgOiBDb2xsZWN0aW9uRmlsdGVyQ29uZmlnO1xuICAgIEBJbnB1dCgpIHJlbGF5U3RvcmVFdmVudHMgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgcmV2ZXJ0T25Fc2NhcGUgICAgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSByaXBwbGUgICAgICAgICAgICAgICAgICAgICAgICEgOiBib29sZWFufHtcbiAgICAgICAgZGVsZWdhdGU/OiBzdHJpbmdcbiAgICAgICAgY29sb3I/OiBzdHJpbmdcbiAgICAgICAgcmFkaXVzPzogbnVtYmVyXG4gICAgICAgIGNsaXA/OiBzdHJpbmdcbiAgICB9O1xuICAgIEBJbnB1dCgpIHJvb3RFbGVtZW50ICAgICAgICAgICAgICAgICAgISA6IFNoYWRvd1Jvb3R8SFRNTEVsZW1lbnQ7XG4gICAgQElucHV0KCkgc2Nyb2xsQWN0aW9uICAgICAgICAgICAgICAgICAhIDogJ2hpZGUnfCdyZWFsaWduJ3xudWxsO1xuICAgIEBJbnB1dCgpIHNob3dBbmltYXRpb24gICAgICAgICAgICAgICAgISA6IGJvb2xlYW58b2JqZWN0O1xuICAgIEBJbnB1dCgpIHNob3dUb29sdGlwV2hlbkRpc2FibGVkICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgc2tpcFZhbGlkYXRpb24gICAgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBzcGVsbENoZWNrICAgICAgICAgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIHRhYiAgICAgICAgICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW58VGFiQ29uZmlnO1xuICAgIEBJbnB1dCgpIHRhYkluZGV4ICAgICAgICAgICAgICAgICAgICAgISA6IG51bWJlcjtcbiAgICBASW5wdXQoKSB0YXNrQm9hcmQgICAgICAgICAgICAgICAgICAgICEgOiBUYXNrQm9hcmQ7XG4gICAgQElucHV0KCkgdGV4dEFsaWduICAgICAgICAgICAgICAgICAgICAhIDogJ2xlZnQnfCdjZW50ZXInfCdyaWdodCd8J3N0YXJ0J3wnZW5kJztcbiAgICBASW5wdXQoKSB0aXRsZSAgICAgICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmc7XG4gICAgQElucHV0KCkgdHJpZ2dlckFjdGlvbiAgICAgICAgICAgICAgICAhIDogJ2FsbCd8J2xhc3QnfG51bGw7XG4gICAgQElucHV0KCkgdHlwZSAgICAgICAgICAgICAgICAgICAgICAgICAhIDogJ3Jlc291cmNlc2NvbWJvJztcbiAgICBASW5wdXQoKSB1aSAgICAgICAgICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmd8b2JqZWN0O1xuICAgIEBJbnB1dCgpIHZhbGlkYXRlRmlsdGVyICAgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgdmFsaWRhdGVPbklucHV0ICAgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSB2YWx1ZUZpZWxkICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmd8bnVsbDtcbiAgICBASW5wdXQoKSB3ZWlnaHQgICAgICAgICAgICAgICAgICAgICAgICEgOiBudW1iZXI7XG5cbiAgICAvLyBDb25maWdzIGFuZCBwcm9wZXJ0aWVzXG4gICAgQElucHV0KCkgYWxpZ25TZWxmICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmc7XG4gICAgQElucHV0KCkgYXBwZW5kVG8gICAgICAgICAgICAgICAgICAgICEgOiBIVE1MRWxlbWVudHxzdHJpbmc7XG4gICAgQElucHV0KCkgYmFkZ2UgICAgICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmc7XG4gICAgQElucHV0KCkgY2FsbE9uRnVuY3Rpb25zICAgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGNhdGNoRXZlbnRIYW5kbGVyRXhjZXB0aW9ucyAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBjbHMgICAgICAgICAgICAgICAgICAgICAgICAgISA6IHN0cmluZ3xvYmplY3Q7XG4gICAgQElucHV0KCkgY29sdW1uICAgICAgICAgICAgICAgICAgICAgICEgOiBudW1iZXI7XG4gICAgQElucHV0KCkgZGF0YXNldCAgICAgICAgICAgICAgICAgICAgICEgOiBvYmplY3R8UmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgICBASW5wdXQoKSBkaXNhYmxlZCAgICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW58J2luZXJ0JztcbiAgICBASW5wdXQoKSBlZGl0YWJsZSAgICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgZXh0cmFEYXRhICAgICAgICAgICAgICAgICAgICEgOiBhbnk7XG4gICAgQElucHV0KCkgZmlsdGVyT3BlcmF0b3IgICAgICAgICAgICAgICEgOiBDb2xsZWN0aW9uQ29tcGFyZU9wZXJhdG9yO1xuICAgIEBJbnB1dCgpIGZsZXggICAgICAgICAgICAgICAgICAgICAgICAhIDogbnVtYmVyfHN0cmluZztcbiAgICBASW5wdXQoKSBoZWlnaHQgICAgICAgICAgICAgICAgICAgICAgISA6IG51bWJlcnxzdHJpbmc7XG4gICAgQElucHV0KCkgaGlkZGVuICAgICAgICAgICAgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGlkICAgICAgICAgICAgICAgICAgICAgICAgICAhIDogc3RyaW5nO1xuICAgIEBJbnB1dCgpIGluc2VydEJlZm9yZSAgICAgICAgICAgICAgICAhIDogSFRNTEVsZW1lbnR8c3RyaW5nO1xuICAgIEBJbnB1dCgpIGluc2VydEZpcnN0ICAgICAgICAgICAgICAgICAhIDogSFRNTEVsZW1lbnR8c3RyaW5nO1xuICAgIEBJbnB1dCgpIGtleU1hcCAgICAgICAgICAgICAgICAgICAgICAhIDogUmVjb3JkPHN0cmluZywgS2V5TWFwQ29uZmlnPjtcbiAgICBASW5wdXQoKSBsYWJlbCAgICAgICAgICAgICAgICAgICAgICAgISA6IHN0cmluZztcbiAgICBASW5wdXQoKSBtYXJnaW4gICAgICAgICAgICAgICAgICAgICAgISA6IG51bWJlcnxzdHJpbmc7XG4gICAgQElucHV0KCkgbWF4SGVpZ2h0ICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmd8bnVtYmVyO1xuICAgIEBJbnB1dCgpIG1heGltaXplT25Nb2JpbGUgICAgICAgICAgICAhIDogbnVtYmVyfHN0cmluZztcbiAgICBASW5wdXQoKSBtYXhXaWR0aCAgICAgICAgICAgICAgICAgICAgISA6IHN0cmluZ3xudW1iZXI7XG4gICAgQElucHV0KCkgbWluSGVpZ2h0ICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmd8bnVtYmVyO1xuICAgIEBJbnB1dCgpIG1pbldpZHRoICAgICAgICAgICAgICAgICAgICAhIDogc3RyaW5nfG51bWJlcjtcbiAgICBASW5wdXQoKSBtdWx0aVNlbGVjdCAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgcGlja2VyICAgICAgICAgICAgICAgICAgICAgICEgOiBMaXN0Q29uZmlnfExpc3Q7XG4gICAgQElucHV0KCkgcGxhY2Vob2xkZXIgICAgICAgICAgICAgICAgICEgOiBzdHJpbmc7XG4gICAgQElucHV0KCkgcmVhZE9ubHkgICAgICAgICAgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIHJlbmRpdGlvbiAgICAgICAgICAgICAgICAgICAhIDogJ291dGxpbmVkJ3wnZmlsbGVkJ3xzdHJpbmc7XG4gICAgQElucHV0KCkgcmVxdWlyZWQgICAgICAgICAgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIHJ0bCAgICAgICAgICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBzaG93UmVxdWlyZWRJbmRpY2F0b3IgICAgICAgISA6IHN0cmluZztcbiAgICBASW5wdXQoKSBzcGFuICAgICAgICAgICAgICAgICAgICAgICAgISA6IG51bWJlcjtcbiAgICBASW5wdXQoKSBzdG9yZSAgICAgICAgICAgICAgICAgICAgICAgISA6IFN0b3JlfFN0b3JlQ29uZmlnO1xuICAgIEBJbnB1dCgpIHRvb2x0aXAgICAgICAgICAgICAgICAgICAgICAhIDogc3RyaW5nfFRvb2x0aXBDb25maWd8bnVsbDtcbiAgICBASW5wdXQoKSB0cmlnZ2VycyAgICAgICAgICAgICAgICAgICAgISA6IFJlY29yZDxzdHJpbmcsIEZpZWxkVHJpZ2dlckNvbmZpZz58UmVjb3JkPHN0cmluZywgV2lkZ2V0PjtcbiAgICBASW5wdXQoKSB2YWx1ZSAgICAgICAgICAgICAgICAgICAgICAgISA6IG9iamVjdHxudW1iZXJ8c3RyaW5nfHN0cmluZ1tdfG51bWJlcltdO1xuICAgIEBJbnB1dCgpIHdpZHRoICAgICAgICAgICAgICAgICAgICAgICAhIDogbnVtYmVyfHN0cmluZztcbiAgICBASW5wdXQoKSB4ICAgICAgICAgICAgICAgICAgICAgICAgICAgISA6IG51bWJlcjtcbiAgICBASW5wdXQoKSB5ICAgICAgICAgICAgICAgICAgICAgICAgICAgISA6IG51bWJlcjtcblxuICAgIC8vIFByb3BlcnRpZXMgb25seVxuICAgIEBJbnB1dCgpIGFuY2hvclNpemUgICAhIDogbnVtYmVyW107XG4gICAgQElucHV0KCkgY29udGVudCAgICAgICEgOiBzdHJpbmc7XG4gICAgQElucHV0KCkgZm9jdXNWaXNpYmxlICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGZvcm11bGEgICAgICAhIDogc3RyaW5nO1xuICAgIEBJbnB1dCgpIGh0bWwgICAgICAgICAhIDogc3RyaW5nfCgod2lkZ2V0OiBXaWRnZXQpID0+IHN0cmluZyl8RG9tQ29uZmlnfERvbUNvbmZpZ1tdfFZ1ZUNvbmZpZztcbiAgICBASW5wdXQoKSBpbnB1dCAgICAgICAgISA6IEhUTUxFbGVtZW50O1xuICAgIEBJbnB1dCgpIHBhcmVudCAgICAgICAhIDogV2lkZ2V0O1xuICAgIEBJbnB1dCgpIHNjcm9sbGFibGUgICAhIDogU2Nyb2xsZXI7XG5cbiAgICAvLyBFdmVudHMgZW1pdHRlcnNcbiAgICAvKipcbiAgICAgKiBUaGUgZGVmYXVsdCBhY3Rpb24gd2FzIHBlcmZvcm1lZCAoYW4gaXRlbSBpbiB0aGUgbGlzdCB3YXMgc2VsZWN0ZWQpXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuQ29tYm99IGV2ZW50LnNvdXJjZSBUaGUgY29tYm9cbiAgICAgKiBAcGFyYW0ge2FueX0gZXZlbnQudmFsdWUgVGhlIFt2YWx1ZV0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy90YXNrYm9hcmQvZG9jcy9hcGkvQ29yZS93aWRnZXQvQ29tYm8jY29uZmlnLXZhbHVlRmllbGQpIG9mIHRoZSBzZWxlY3RlZCByZWNvcmRcbiAgICAgKiBAcGFyYW0ge0NvcmUuZGF0YS5Nb2RlbH0gZXZlbnQucmVjb3JkIFNlbGVjdGVkIHJlY29yZFxuICAgICAqIEBwYXJhbSB7Q29yZS5kYXRhLk1vZGVsW119IGV2ZW50LnJlY29yZHMgU2VsZWN0ZWQgcmVjb3JkcyBhcyBhbiBhcnJheSBpZiBbbXVsdGlTZWxlY3RdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvdGFza2JvYXJkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L0NvbWJvI2NvbmZpZy1tdWx0aVNlbGVjdCkgaXMgYHRydWVgXG4gICAgICogQHBhcmFtIHtib29sZWFufSBldmVudC51c2VyQWN0aW9uIGB0cnVlYCBpZiB0aGUgdmFsdWUgY2hhbmdlIGlzIGR1ZSB0byB1c2VyIGludGVyYWN0aW9uXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQWN0aW9uOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBDb21ibywgdmFsdWU6IGFueSwgcmVjb3JkOiBNb2RlbCwgcmVjb3JkczogTW9kZWxbXSwgdXNlckFjdGlvbjogYm9vbGVhbiB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZXMgYmVmb3JlIGFuIG9iamVjdCBpcyBkZXN0cm95ZWQuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7Q29yZS5CYXNlfSBldmVudC5zb3VyY2UgVGhlIE9iamVjdCB0aGF0IGlzIGJlaW5nIGRlc3Ryb3llZC5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25CZWZvcmVEZXN0cm95OiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBCYXNlIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyZWQgYmVmb3JlIGEgd2lkZ2V0IGlzIGhpZGRlbi4gUmV0dXJuIGBmYWxzZWAgdG8gcHJldmVudCB0aGUgYWN0aW9uLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0LldpZGdldH0gZXZlbnQuc291cmNlIFRoZSB3aWRnZXQgYmVpbmcgaGlkZGVuLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkJlZm9yZUhpZGU6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IFdpZGdldCB9KSA9PiBQcm9taXNlPGJvb2xlYW4+fGJvb2xlYW58dm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIFRyaWdnZXJlZCBiZWZvcmUgYSB3aWRnZXQgaXMgc2hvd24uIFJldHVybiBgZmFsc2VgIHRvIHByZXZlbnQgdGhlIGFjdGlvbi5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5XaWRnZXQsYW55fSBldmVudC5zb3VyY2UgVGhlIHdpZGdldCBiZWluZyBzaG93blxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkJlZm9yZVNob3c6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IFdpZGdldHxhbnkgfSkgPT4gUHJvbWlzZTxib29sZWFuPnxib29sZWFufHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlcyB3aGVuIGFueSBvdGhlciBldmVudCBpcyBmaXJlZCBmcm9tIHRoZSBvYmplY3QuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvdGFza2JvYXJkL2RvY3MvYXBpL1Rhc2tCb2FyZC93aWRnZXQvUmVzb3VyY2VzQ29tYm8jZXZlbnQtY2F0Y2hBbGwpXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7e1trZXk6IHN0cmluZ106IGFueSwgdHlwZTogc3RyaW5nfX0gZXZlbnQuZXZlbnQgVGhlIE9iamVjdCB0aGF0IGNvbnRhaW5zIGV2ZW50IGRldGFpbHNcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZXZlbnQuZXZlbnQudHlwZSBUaGUgdHlwZSBvZiB0aGUgZXZlbnQgd2hpY2ggaXMgY2F1Z2h0IGJ5IHRoZSBsaXN0ZW5lclxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkNhdGNoQWxsOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHtba2V5OiBzdHJpbmddOiBhbnksIHR5cGU6IHN0cmluZ30pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIHRoaXMgZmllbGQncyB2YWx1ZSBjaGFuZ2VzLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0LkZpZWxkLGFueX0gZXZlbnQuc291cmNlIFRoaXMgRmllbGRcbiAgICAgKiBAcGFyYW0ge3N0cmluZyxudW1iZXIsYm9vbGVhbixhbnl9IGV2ZW50LnZhbHVlIFRoaXMgZmllbGQncyB2YWx1ZVxuICAgICAqIEBwYXJhbSB7c3RyaW5nLG51bWJlcixib29sZWFuLGFueX0gZXZlbnQub2xkVmFsdWUgVGhpcyBmaWVsZCdzIHByZXZpb3VzIHZhbHVlXG4gICAgICogQHBhcmFtIHtib29sZWFufSBldmVudC52YWxpZCBUcnVlIGlmIHRoaXMgZmllbGQgaXMgaW4gYSB2YWxpZCBzdGF0ZVxuICAgICAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50LmV2ZW50IFRoZSB0cmlnZ2VyaW5nIERPTSBldmVudCBpZiBhbnlcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGV2ZW50LnVzZXJBY3Rpb24gVHJpZ2dlcmVkIGJ5IHVzZXIgdGFraW5nIGFuIGFjdGlvbiAoYHRydWVgKSBvciBieSBzZXR0aW5nIGEgdmFsdWUgKGBmYWxzZWApXG4gICAgICogQHBhcmFtIHtib29sZWFufSBldmVudC5jaGVja2VkXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQ2hhbmdlOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBGaWVsZHxhbnksIHZhbHVlOiBzdHJpbmd8bnVtYmVyfGJvb2xlYW58YW55LCBvbGRWYWx1ZTogc3RyaW5nfG51bWJlcnxib29sZWFufGFueSwgdmFsaWQ6IGJvb2xlYW4sIGV2ZW50OiBFdmVudCwgdXNlckFjdGlvbjogYm9vbGVhbiwgY2hlY2tlZDogYm9vbGVhbiB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiB0aGlzIGZpZWxkIGlzIFtjbGVhcmVkXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3Rhc2tib2FyZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9GaWVsZCNmdW5jdGlvbi1jbGVhcikuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvdGFza2JvYXJkL2RvY3MvYXBpL1Rhc2tCb2FyZC93aWRnZXQvUmVzb3VyY2VzQ29tYm8jZXZlbnQtY2xlYXIpXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuRmllbGQsYW55fSBldmVudC5zb3VyY2UgVGhpcyBGaWVsZFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkNsZWFyOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBGaWVsZHxhbnkgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIHdoZW4gYW4gb2JqZWN0IGlzIGRlc3Ryb3llZC5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtDb3JlLkJhc2V9IGV2ZW50LnNvdXJjZSBUaGUgT2JqZWN0IHRoYXQgaXMgYmVpbmcgZGVzdHJveWVkLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkRlc3Ryb3k6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IEJhc2UgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIFRyaWdnZXJlZCB3aGVuIGEgd2lkZ2V0J3MgW2VsZW1lbnRdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvdGFza2JvYXJkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1dpZGdldCNwcm9wZXJ0eS1lbGVtZW50KSBpcyBhdmFpbGFibGUuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGV2ZW50LmVsZW1lbnQgVGhlIFdpZGdldCdzIGVsZW1lbnQuXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uRWxlbWVudENyZWF0ZWQ6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBlbGVtZW50OiBIVE1MRWxlbWVudCB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiBmb2N1cyBlbnRlcnMgdGhpcyBXaWRnZXQuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuV2lkZ2V0fSBldmVudC5zb3VyY2UgVGhpcyBXaWRnZXRcbiAgICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBldmVudC5mcm9tRWxlbWVudCBUaGUgZWxlbWVudCB3aGljaCBsb3N0IGZvY3VzLlxuICAgICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGV2ZW50LnRvRWxlbWVudCBUaGUgZWxlbWVudCB3aGljaCBnYWluZWQgZm9jdXMuXG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5XaWRnZXR9IGV2ZW50LmZyb21XaWRnZXQgVGhlIHdpZGdldCB3aGljaCBsb3N0IGZvY3VzLlxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuV2lkZ2V0fSBldmVudC50b1dpZGdldCBUaGUgd2lkZ2V0IHdoaWNoIGdhaW5lZCBmb2N1cy5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGV2ZW50LmJhY2t3YXJkcyBgdHJ1ZWAgaWYgdGhlIGB0b0VsZW1lbnRgIGlzIGJlZm9yZSB0aGUgYGZyb21FbGVtZW50YCBpbiBkb2N1bWVudCBvcmRlci5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25Gb2N1c0luOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBXaWRnZXQsIGZyb21FbGVtZW50OiBIVE1MRWxlbWVudCwgdG9FbGVtZW50OiBIVE1MRWxlbWVudCwgZnJvbVdpZGdldDogV2lkZ2V0LCB0b1dpZGdldDogV2lkZ2V0LCBiYWNrd2FyZHM6IGJvb2xlYW4gfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gZm9jdXMgZXhpdHMgdGhpcyBXaWRnZXQncyBvd25lcnNoaXAgdHJlZS4gVGhpcyBpcyBkaWZmZXJlbnQgZnJvbSBhIGBibHVyYCBldmVudC5cbiAgICAgKiBmb2N1cyBtb3ZpbmcgZnJvbSB3aXRoaW4gdGhpcyBXaWRnZXQncyBvd25lcnNoaXAgdHJlZSwgZXZlbiBpZiB0aGVyZSBhcmUgZmxvYXRpbmcgd2lkZ2V0c1xuICAgICAqIHdpbGwgbm90IHRyaWdnZXIgdGhpcyBldmVudC4gVGhpcyBpcyB3aGVuIGZvY3VzIGV4aXRzIHRoaXMgd2lkZ2V0IGNvbXBsZXRlbHkuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuV2lkZ2V0fSBldmVudC5zb3VyY2UgVGhpcyBXaWRnZXRcbiAgICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBldmVudC5mcm9tRWxlbWVudCBUaGUgZWxlbWVudCB3aGljaCBsb3N0IGZvY3VzLlxuICAgICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGV2ZW50LnRvRWxlbWVudCBUaGUgZWxlbWVudCB3aGljaCBnYWluZWQgZm9jdXMuXG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5XaWRnZXR9IGV2ZW50LmZyb21XaWRnZXQgVGhlIHdpZGdldCB3aGljaCBsb3N0IGZvY3VzLlxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuV2lkZ2V0fSBldmVudC50b1dpZGdldCBUaGUgd2lkZ2V0IHdoaWNoIGdhaW5lZCBmb2N1cy5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGV2ZW50LmJhY2t3YXJkcyBgdHJ1ZWAgaWYgdGhlIGB0b0VsZW1lbnRgIGlzIGJlZm9yZSB0aGUgYGZyb21FbGVtZW50YCBpbiBkb2N1bWVudCBvcmRlci5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25Gb2N1c091dDogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogV2lkZ2V0LCBmcm9tRWxlbWVudDogSFRNTEVsZW1lbnQsIHRvRWxlbWVudDogSFRNTEVsZW1lbnQsIGZyb21XaWRnZXQ6IFdpZGdldCwgdG9XaWRnZXQ6IFdpZGdldCwgYmFja3dhcmRzOiBib29sZWFuIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyZWQgYWZ0ZXIgYSB3aWRnZXQgd2FzIGhpZGRlblxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0LldpZGdldH0gZXZlbnQuc291cmNlIFRoZSB3aWRnZXRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25IaWRlOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBXaWRnZXQgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIFVzZXIgdHlwZWQgaW50byB0aGUgZmllbGQuIFBsZWFzZSBub3RlIHRoYXQgdGhlIHZhbHVlIGF0dGFjaGVkIHRvIHRoaXMgZXZlbnQgaXMgdGhlIHJhdyBpbnB1dCBmaWVsZCB2YWx1ZSBhbmRcbiAgICAgKiBub3QgdGhlIGNvbWJvcyB2YWx1ZVxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0LkNvbWJvfSBldmVudC5zb3VyY2UgVGhlIGNvbWJvLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBldmVudC52YWx1ZSBSYXcgaW5wdXQgdmFsdWVcbiAgICAgKiBAcGFyYW0ge0V2ZW50fSBldmVudC5ldmVudCBUaGUgdHJpZ2dlcmluZyBET00gZXZlbnQgaWYgYW55LlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbklucHV0OiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBDb21ibywgdmFsdWU6IHN0cmluZywgZXZlbnQ6IEV2ZW50IH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyZWQgd2hlbiBhIHdpZGdldCB3aGljaCBoYWQgYmVlbiBpbiBhIG5vbi12aXNpYmxlIHN0YXRlIGZvciBhbnkgcmVhc29uXG4gICAgICogYWNoaWV2ZXMgdmlzaWJpbGl0eS5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy90YXNrYm9hcmQvZG9jcy9hcGkvVGFza0JvYXJkL3dpZGdldC9SZXNvdXJjZXNDb21ibyNldmVudC1wYWludClcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5XaWRnZXR9IGV2ZW50LnNvdXJjZSBUaGUgd2lkZ2V0IGJlaW5nIHBhaW50ZWQuXG4gICAgICogQHBhcmFtIHtib29sZWFufSBldmVudC5maXJzdFBhaW50IGB0cnVlYCBpZiB0aGlzIGlzIHRoZSBmaXJzdCBwYWludC5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25QYWludDogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogV2lkZ2V0LCBmaXJzdFBhaW50OiBib29sZWFuIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIGEgV2lkZ2V0J3MgcmVhZCBvbmx5IHN0YXRlIGlzIHRvZ2dsZWRcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtib29sZWFufSBldmVudC5yZWFkT25seSBSZWFkIG9ubHkgb3Igbm90XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uUmVhZE9ubHk6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyByZWFkT25seTogYm9vbGVhbiB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogVGhpcyBldmVudCBpcyBmaXJlZCBhZnRlciBhIHdpZGdldCdzIGVsZW1lbnRzIGhhdmUgYmVlbiBzeW5jaHJvbml6ZWQgZHVlIHRvIGEgZGlyZWN0IG9yIGluZGlyZWN0IGNhbGxcbiAgICAgKiB0byBbcmVjb21wb3NlXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3Rhc2tib2FyZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9XaWRnZXQjZnVuY3Rpb24tcmVjb21wb3NlKSwgaWYgdGhpcyByZXN1bHRzIGluIHNvbWUgY2hhbmdlIHRvIHRoZSB3aWRnZXQncyByZW5kZXJlZCBET00gZWxlbWVudHMuXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uUmVjb21wb3NlOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoKSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiB0aGUgZW5jYXBzdWxhdGluZyBlbGVtZW50IG9mIGEgV2lkZ2V0IHJlc2l6ZXMgKm9ubHkgd2hlbiBbbW9uaXRvclJlc2l6ZV0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy90YXNrYm9hcmQvZG9jcy9hcGkvQ29yZS93aWRnZXQvV2lkZ2V0I2NvbmZpZy1tb25pdG9yUmVzaXplKSBpcyBgdHJ1ZWAqLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0LldpZGdldH0gZXZlbnQuc291cmNlIFRoaXMgV2lkZ2V0XG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGV2ZW50LndpZHRoIFRoZSBuZXcgd2lkdGhcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gZXZlbnQuaGVpZ2h0IFRoZSBuZXcgaGVpZ2h0XG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGV2ZW50Lm9sZFdpZHRoIFRoZSBvbGQgd2lkdGhcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gZXZlbnQub2xkSGVpZ2h0IFRoZSBvbGQgaGVpZ2h0XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uUmVzaXplOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBXaWRnZXQsIHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyLCBvbGRXaWR0aDogbnVtYmVyLCBvbGRIZWlnaHQ6IG51bWJlciB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogQW4gaXRlbSBpbiB0aGUgbGlzdCB3YXMgc2VsZWN0ZWRcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5Db21ib30gZXZlbnQuc291cmNlIFRoZSBjb21ib1xuICAgICAqIEBwYXJhbSB7Q29yZS5kYXRhLk1vZGVsfSBldmVudC5yZWNvcmQgU2VsZWN0ZWQgcmVjb3JkXG4gICAgICogQHBhcmFtIHtDb3JlLmRhdGEuTW9kZWxbXX0gZXZlbnQucmVjb3JkcyBTZWxlY3RlZCByZWNvcmRzIGFzIGFuIGFycmF5IGlmIFttdWx0aVNlbGVjdF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy90YXNrYm9hcmQvZG9jcy9hcGkvQ29yZS93aWRnZXQvQ29tYm8jY29uZmlnLW11bHRpU2VsZWN0KSBpcyBgdHJ1ZWBcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGV2ZW50LnVzZXJBY3Rpb24gYHRydWVgIGlmIHRoZSB2YWx1ZSBjaGFuZ2UgaXMgZHVlIHRvIHVzZXIgaW50ZXJhY3Rpb25cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25TZWxlY3Q6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IENvbWJvLCByZWNvcmQ6IE1vZGVsLCByZWNvcmRzOiBNb2RlbFtdLCB1c2VyQWN0aW9uOiBib29sZWFuIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyZWQgYWZ0ZXIgYSB3aWRnZXQgaXMgc2hvd24uXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuV2lkZ2V0fSBldmVudC5zb3VyY2UgVGhlIHdpZGdldFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvblNob3c6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IFdpZGdldCB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogVXNlciBjbGlja2VkIG9uZSBvZiB0aGlzIGZpZWxkJ3MgW3RyaWdnZXJzXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3Rhc2tib2FyZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9GaWVsZCNwcm9wZXJ0eS10cmlnZ2VycylcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5GaWVsZCxhbnl9IGV2ZW50LnNvdXJjZSBUaGlzIGZpZWxkXG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5XaWRnZXR9IGV2ZW50LnRyaWdnZXIgVGhlIHRyaWdnZXIgYWN0aXZhdGVkIGJ5IGNsaWNrIG9yIHRvdWNoIHRhcC5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25UcmlnZ2VyOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBGaWVsZHxhbnksIHRyaWdnZXI6IFdpZGdldCB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYW5kIGFwcGVuZCB0aGUgdW5kZXJseWluZyB3aWRnZXRcbiAgICAgKi9cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgY29uc3RcbiAgICAgICAgICAgIG1lID0gdGhpcyxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBlbGVtZW50UmVmLFxuICAgICAgICAgICAgICAgIGJyeW50dW1Db25maWdcbiAgICAgICAgICAgIH0gPSBtZSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpbnN0YW5jZUNsYXNzLFxuICAgICAgICAgICAgICAgIGluc3RhbmNlTmFtZSxcbiAgICAgICAgICAgICAgICBicnludHVtQ29uZmlncyxcbiAgICAgICAgICAgICAgICBicnludHVtRXZlbnRzXG4gICAgICAgICAgICB9ID0gQnJ5bnR1bVJlc291cmNlc0NvbWJvQ29tcG9uZW50O1xuXG4gICAgICAgIGJyeW50dW1Db25maWdzLmZpbHRlcihwcm9wID0+IHByb3AgaW4gdGhpcykuZm9yRWFjaChwcm9wID0+IHtcbiAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgIFdyYXBwZXJIZWxwZXIuYXBwbHlQcm9wVmFsdWUoYnJ5bnR1bUNvbmZpZywgcHJvcCwgdGhpc1twcm9wXSk7XG4gICAgICAgICAgICBpZiAoWydmZWF0dXJlcycsICdjb25maWcnXS5pbmNsdWRlcyhwcm9wKSkge1xuICAgICAgICAgICAgICAgIFdyYXBwZXJIZWxwZXIuZGV2V2FybmluZ0NvbmZpZ1Byb3AoaW5zdGFuY2VOYW1lLCBwcm9wKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgYnJ5bnR1bUV2ZW50cy5maWx0ZXIoZXZlbnQgPT4gdGhpc1tldmVudF0gJiYgdGhpc1tldmVudF0ub2JzZXJ2ZXJzLmxlbmd0aCA+IDApLmZvckVhY2goZXZlbnQgPT4ge1xuICAgICAgICAgICAgY29uc3RcbiAgICAgICAgICAgICAgICB1bmNhcGl0YWxpemUgPSAoc3RyOiBzdHJpbmcpID0+IHN0ci5jaGFyQXQoMCkudG9Mb3dlckNhc2UoKSArIHN0ci5zbGljZSgxKSxcbiAgICAgICAgICAgICAgICBldmVudE5hbWUgPSAoc3RyOiBzdHJpbmcpID0+IHVuY2FwaXRhbGl6ZShzdHIuc2xpY2UoMikpO1xuXG4gICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICBicnludHVtQ29uZmlnLmxpc3RlbmVyc1tldmVudE5hbWUoZXZlbnQpXSA9IGUgPT4ge1xuICAgICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgICAgICBtZVtldmVudF0uZW1pdChlKTtcbiAgICAgICAgICAgICAgICAvLyBFdmVudEVtaXR0ZXIgZG9lcyBub3QgcmV0dXJuIHZhbHVlcyBpbiB0aGUgbm9ybWFsIHdheSwgd29yayBhcm91bmQgaXQgYnkgc2V0dGluZyBgcmV0dXJuVmFsdWVgIGZsYWdcbiAgICAgICAgICAgICAgICAvLyBpbiBBbmd1bGFyIGxpc3RlbmVyc1xuICAgICAgICAgICAgICAgIHJldHVybiBlLnJldHVyblZhbHVlO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gSWYgY29tcG9uZW50IGhhcyBubyBjb250YWluZXIgc3BlY2lmaWVkIGluIGNvbmZpZyB0aGVuIHVzZSBhZG9wdCB0byBXcmFwcGVyJ3MgZWxlbWVudFxuICAgICAgICBjb25zdFxuICAgICAgICAgICAgY29udGFpbmVyUGFyYW0gPSBbXG4gICAgICAgICAgICAgICAgJ2Fkb3B0JyxcbiAgICAgICAgICAgICAgICAnYXBwZW5kVG8nLFxuICAgICAgICAgICAgICAgICdpbnNlcnRBZnRlcicsXG4gICAgICAgICAgICAgICAgJ2luc2VydEJlZm9yZSdcbiAgICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICBdLmZpbmQocHJvcCA9PiBicnludHVtQ29uZmlnW3Byb3BdKTtcbiAgICAgICAgaWYgKCFjb250YWluZXJQYXJhbSkge1xuICAgICAgICAgICAgaWYgKGluc3RhbmNlTmFtZSA9PT0gJ0J1dHRvbicgfHwgZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmdldFJvb3ROb2RlKCkgaW5zdGFuY2VvZiBTaGFkb3dSb290KSB7XG4gICAgICAgICAgICAgICAgLy8gQnV0dG9uIHNob3VsZCBhbHdheXMgYmUgPGE+IG9yIDxidXR0b24+IGluc2lkZSBvd25lciBlbGVtZW50XG4gICAgICAgICAgICAgICAgYnJ5bnR1bUNvbmZpZy5hcHBlbmRUbyA9IGVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGJyeW50dW1Db25maWcuYWRvcHQgPSBlbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBXcmFwcGVySGVscGVyLmRldldhcm5pbmdDb250YWluZXIoaW5zdGFuY2VOYW1lLCBjb250YWluZXJQYXJhbSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIG1lLmluc3RhbmNlID0gaW5zdGFuY2VOYW1lID09PSAnV2lkZ2V0JyA/IFdpZGdldC5jcmVhdGUoYnJ5bnR1bUNvbmZpZykgOiBuZXcgaW5zdGFuY2VDbGFzcyhicnludHVtQ29uZmlnKTtcblxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFdhdGNoIGZvciBjaGFuZ2VzXG4gICAgICogQHBhcmFtIGNoYW5nZXNcbiAgICAgKi9cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgICAgIGNvbnN0XG4gICAgICAgICAgICB7IGluc3RhbmNlIH0gPSB0aGlzLFxuICAgICAgICAgICAgeyBpbnN0YW5jZU5hbWUgfSA9IEJyeW50dW1SZXNvdXJjZXNDb21ib0NvbXBvbmVudDtcbiAgICAgICAgaWYgKCFpbnN0YW5jZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIEl0ZXJhdGUgb3ZlciBhbGwgY2hhbmdlc1xuICAgICAgICBPYmplY3QuZW50cmllcyhjaGFuZ2VzKS5mb3JFYWNoKChbcHJvcCwgY2hhbmdlXSkgPT4ge1xuICAgICAgICAgICAgY29uc3RcbiAgICAgICAgICAgICAgICBuZXdWYWx1ZSA9IChjaGFuZ2UgYXMgU2ltcGxlQ2hhbmdlKS5jdXJyZW50VmFsdWUsXG4gICAgICAgICAgICAgICAgeyBpbnN0YW5jZSB9ID0gdGhpcyxcbiAgICAgICAgICAgICAgICB7IGJyeW50dW1Db25maWdzT25seSwgYnJ5bnR1bVByb3BzIH0gPSBCcnludHVtUmVzb3VyY2VzQ29tYm9Db21wb25lbnQ7XG4gICAgICAgICAgICBpZiAoYnJ5bnR1bVByb3BzLmluY2x1ZGVzKHByb3ApKSB7XG4gICAgICAgICAgICAgICAgV3JhcHBlckhlbHBlci5hcHBseVByb3BWYWx1ZShpbnN0YW5jZSwgcHJvcCwgbmV3VmFsdWUsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICBpZiAoYnJ5bnR1bUNvbmZpZ3NPbmx5LmluY2x1ZGVzKHByb3ApKSB7XG4gICAgICAgICAgICAgICAgICAgIFdyYXBwZXJIZWxwZXIuZGV2V2FybmluZ1VwZGF0ZVByb3AoaW5zdGFuY2VOYW1lLCBwcm9wKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERlc3Ryb3kgdGhlIGNvbXBvbmVudFxuICAgICAqL1xuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIGlmICh0aGlzLmluc3RhbmNlICYmIHRoaXMuaW5zdGFuY2UuZGVzdHJveSkge1xuICAgICAgICAgICAgdGhpcy5pbnN0YW5jZS5kZXN0cm95KCk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=
|