@bryntum/grid-angular 7.1.3 → 7.2.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 +2 -2
- package/bundles/bryntum-grid-angular.umd.js +986 -260
- package/bundles/bryntum-grid-angular.umd.js.map +1 -1
- package/esm2015/lib/bryntum-a-i-filter-field.component.js +1 -1
- package/esm2015/lib/bryntum-button-group.component.js +6 -2
- package/esm2015/lib/bryntum-button.component.js +1 -1
- package/esm2015/lib/bryntum-chat-panel.component.js +6 -2
- package/esm2015/lib/bryntum-checkbox-group.component.js +6 -2
- package/esm2015/lib/bryntum-checklist-filter-combo.component.js +1 -1
- package/esm2015/lib/bryntum-chip-view.component.js +8 -8
- package/esm2015/lib/bryntum-code-editor.component.js +6 -2
- package/esm2015/lib/bryntum-combo.component.js +1 -1
- package/esm2015/lib/bryntum-container.component.js +6 -2
- package/esm2015/lib/bryntum-date-field.component.js +6 -2
- package/esm2015/lib/bryntum-date-picker.component.js +9 -5
- package/esm2015/lib/bryntum-date-range-field.component.js +1 -1
- package/esm2015/lib/bryntum-date-time-field.component.js +1 -1
- package/esm2015/lib/bryntum-demo-code-editor.component.js +6 -2
- package/esm2015/lib/bryntum-display-field.component.js +1 -1
- package/esm2015/lib/bryntum-duration-field.component.js +1 -1
- package/esm2015/lib/bryntum-editor.component.js +6 -2
- package/esm2015/lib/bryntum-field-filter-picker-group.component.js +6 -2
- package/esm2015/lib/bryntum-field-filter-picker.component.js +6 -2
- package/esm2015/lib/bryntum-field-set.component.js +6 -2
- package/esm2015/lib/bryntum-file-field.component.js +1 -1
- package/esm2015/lib/bryntum-file-picker.component.js +6 -2
- package/esm2015/lib/bryntum-filter-field.component.js +1 -1
- package/esm2015/lib/bryntum-grid-base.component.js +9 -2
- package/esm2015/lib/bryntum-grid-chart-designer.component.js +1 -1
- package/esm2015/lib/bryntum-grid-field-filter-picker-group.component.js +6 -2
- package/esm2015/lib/bryntum-grid-field-filter-picker.component.js +6 -2
- package/esm2015/lib/bryntum-grid.component.js +9 -2
- package/esm2015/lib/bryntum-group-bar.component.js +8 -8
- package/esm2015/lib/bryntum-hint.component.js +6 -2
- package/esm2015/lib/bryntum-label.component.js +1 -1
- package/esm2015/lib/bryntum-list.component.js +8 -8
- package/esm2015/lib/bryntum-menu.component.js +6 -2
- package/esm2015/lib/bryntum-month-picker.component.js +6 -2
- package/esm2015/lib/bryntum-number-field.component.js +1 -1
- package/esm2015/lib/bryntum-paging-toolbar.component.js +6 -2
- package/esm2015/lib/bryntum-panel.component.js +6 -2
- package/esm2015/lib/bryntum-password-field.component.js +1 -1
- package/esm2015/lib/bryntum-progress-bar.component.js +600 -0
- package/esm2015/lib/bryntum-radio-group.component.js +6 -2
- package/esm2015/lib/bryntum-slider.component.js +1 -1
- package/esm2015/lib/bryntum-splitter.component.js +1 -1
- package/esm2015/lib/bryntum-tab-panel.component.js +6 -2
- package/esm2015/lib/bryntum-text-area-field.component.js +1 -1
- package/esm2015/lib/bryntum-text-area-picker-field.component.js +1 -1
- package/esm2015/lib/bryntum-text-field.component.js +1 -1
- package/esm2015/lib/bryntum-time-field.component.js +6 -2
- package/esm2015/lib/bryntum-time-picker.component.js +6 -2
- package/esm2015/lib/bryntum-toolbar.component.js +6 -2
- package/esm2015/lib/bryntum-tree-combo.component.js +1 -1
- package/esm2015/lib/bryntum-tree-grid.component.js +9 -2
- package/esm2015/lib/bryntum-widget.component.js +1 -1
- package/esm2015/lib/bryntum-year-picker.component.js +6 -2
- package/esm2015/lib/grid.module.js +6 -1
- package/esm2015/public-api.js +2 -1
- package/fesm2015/bryntum-grid-angular.js +979 -257
- package/fesm2015/bryntum-grid-angular.js.map +1 -1
- package/lib/bryntum-a-i-filter-field.component.d.ts +3 -3
- package/lib/bryntum-button-group.component.d.ts +6 -1
- package/lib/bryntum-button.component.d.ts +3 -3
- package/lib/bryntum-chat-panel.component.d.ts +9 -4
- package/lib/bryntum-checkbox-group.component.d.ts +9 -4
- package/lib/bryntum-checklist-filter-combo.component.d.ts +3 -3
- package/lib/bryntum-chip-view.component.d.ts +6 -6
- package/lib/bryntum-code-editor.component.d.ts +9 -4
- package/lib/bryntum-combo.component.d.ts +3 -3
- package/lib/bryntum-container.component.d.ts +9 -4
- package/lib/bryntum-date-field.component.d.ts +15 -5
- package/lib/bryntum-date-picker.component.d.ts +10 -5
- package/lib/bryntum-date-range-field.component.d.ts +3 -3
- package/lib/bryntum-date-time-field.component.d.ts +3 -3
- package/lib/bryntum-demo-code-editor.component.d.ts +9 -4
- package/lib/bryntum-display-field.component.d.ts +3 -3
- package/lib/bryntum-duration-field.component.d.ts +3 -3
- package/lib/bryntum-editor.component.d.ts +9 -4
- package/lib/bryntum-field-filter-picker-group.component.d.ts +9 -4
- package/lib/bryntum-field-filter-picker.component.d.ts +9 -4
- package/lib/bryntum-field-set.component.d.ts +9 -4
- package/lib/bryntum-file-field.component.d.ts +3 -3
- package/lib/bryntum-file-picker.component.d.ts +9 -4
- package/lib/bryntum-filter-field.component.d.ts +3 -3
- package/lib/bryntum-grid-base.component.d.ts +19 -4
- package/lib/bryntum-grid-chart-designer.component.d.ts +3 -3
- package/lib/bryntum-grid-field-filter-picker-group.component.d.ts +9 -4
- package/lib/bryntum-grid-field-filter-picker.component.d.ts +9 -4
- package/lib/bryntum-grid.component.d.ts +19 -4
- package/lib/bryntum-group-bar.component.d.ts +6 -6
- package/lib/bryntum-hint.component.d.ts +9 -4
- package/lib/bryntum-label.component.d.ts +3 -3
- package/lib/bryntum-list.component.d.ts +6 -6
- package/lib/bryntum-menu.component.d.ts +9 -4
- package/lib/bryntum-month-picker.component.d.ts +9 -4
- package/lib/bryntum-number-field.component.d.ts +3 -3
- package/lib/bryntum-paging-toolbar.component.d.ts +9 -4
- package/lib/bryntum-panel.component.d.ts +9 -4
- package/lib/bryntum-password-field.component.d.ts +3 -3
- package/lib/bryntum-progress-bar.component.d.ts +705 -0
- package/lib/bryntum-radio-group.component.d.ts +9 -4
- package/lib/bryntum-slider.component.d.ts +3 -3
- package/lib/bryntum-splitter.component.d.ts +3 -3
- package/lib/bryntum-tab-panel.component.d.ts +9 -4
- package/lib/bryntum-text-area-field.component.d.ts +3 -3
- package/lib/bryntum-text-area-picker-field.component.d.ts +3 -3
- package/lib/bryntum-text-field.component.d.ts +3 -3
- package/lib/bryntum-time-field.component.d.ts +13 -4
- package/lib/bryntum-time-picker.component.d.ts +9 -4
- package/lib/bryntum-toolbar.component.d.ts +9 -4
- package/lib/bryntum-tree-combo.component.d.ts +3 -3
- package/lib/bryntum-tree-grid.component.d.ts +19 -4
- package/lib/bryntum-widget.component.d.ts +3 -3
- package/lib/bryntum-year-picker.component.d.ts +9 -4
- package/lib/grid.module.d.ts +18 -17
- package/package.json +1 -1
- package/public-api.d.ts +1 -0
- package/src/lib/bryntum-a-i-filter-field.component.ts +3 -3
- package/src/lib/bryntum-button-group.component.ts +7 -0
- package/src/lib/bryntum-button.component.ts +3 -3
- package/src/lib/bryntum-chat-panel.component.ts +10 -3
- package/src/lib/bryntum-checkbox-group.component.ts +10 -3
- package/src/lib/bryntum-checklist-filter-combo.component.ts +3 -3
- package/src/lib/bryntum-chip-view.component.ts +102 -102
- package/src/lib/bryntum-code-editor.component.ts +10 -3
- package/src/lib/bryntum-combo.component.ts +3 -3
- package/src/lib/bryntum-container.component.ts +10 -3
- package/src/lib/bryntum-date-field.component.ts +16 -4
- package/src/lib/bryntum-date-picker.component.ts +12 -5
- package/src/lib/bryntum-date-range-field.component.ts +3 -3
- package/src/lib/bryntum-date-time-field.component.ts +3 -3
- package/src/lib/bryntum-demo-code-editor.component.ts +10 -3
- package/src/lib/bryntum-display-field.component.ts +3 -3
- package/src/lib/bryntum-duration-field.component.ts +3 -3
- package/src/lib/bryntum-editor.component.ts +10 -3
- package/src/lib/bryntum-field-filter-picker-group.component.ts +10 -3
- package/src/lib/bryntum-field-filter-picker.component.ts +10 -3
- package/src/lib/bryntum-field-set.component.ts +10 -3
- package/src/lib/bryntum-file-field.component.ts +3 -3
- package/src/lib/bryntum-file-picker.component.ts +10 -3
- package/src/lib/bryntum-filter-field.component.ts +3 -3
- package/src/lib/bryntum-grid-base.component.ts +21 -3
- package/src/lib/bryntum-grid-chart-designer.component.ts +3 -3
- package/src/lib/bryntum-grid-field-filter-picker-group.component.ts +10 -3
- package/src/lib/bryntum-grid-field-filter-picker.component.ts +10 -3
- package/src/lib/bryntum-grid.component.ts +21 -3
- package/src/lib/bryntum-group-bar.component.ts +102 -102
- package/src/lib/bryntum-hint.component.ts +10 -3
- package/src/lib/bryntum-label.component.ts +3 -3
- package/src/lib/bryntum-list.component.ts +99 -99
- package/src/lib/bryntum-menu.component.ts +10 -3
- package/src/lib/bryntum-month-picker.component.ts +10 -3
- package/src/lib/bryntum-number-field.component.ts +3 -3
- package/src/lib/bryntum-paging-toolbar.component.ts +10 -3
- package/src/lib/bryntum-panel.component.ts +10 -3
- package/src/lib/bryntum-password-field.component.ts +3 -3
- package/src/lib/bryntum-progress-bar.component.ts +1019 -0
- package/src/lib/bryntum-radio-group.component.ts +10 -3
- package/src/lib/bryntum-slider.component.ts +3 -3
- package/src/lib/bryntum-splitter.component.ts +3 -3
- package/src/lib/bryntum-tab-panel.component.ts +10 -3
- package/src/lib/bryntum-text-area-field.component.ts +3 -3
- package/src/lib/bryntum-text-area-picker-field.component.ts +3 -3
- package/src/lib/bryntum-text-field.component.ts +3 -3
- package/src/lib/bryntum-time-field.component.ts +14 -3
- package/src/lib/bryntum-time-picker.component.ts +10 -3
- package/src/lib/bryntum-toolbar.component.ts +10 -3
- package/src/lib/bryntum-tree-combo.component.ts +3 -3
- package/src/lib/bryntum-tree-grid.component.ts +21 -3
- package/src/lib/bryntum-widget.component.ts +3 -3
- package/src/lib/bryntum-year-picker.component.ts +10 -3
- package/src/lib/grid.module.ts +3 -0
- package/src/public-api.ts +1 -0
|
@@ -0,0 +1,600 @@
|
|
|
1
|
+
/* eslint-disable @typescript-eslint/no-unused-vars */
|
|
2
|
+
/**
|
|
3
|
+
* Angular wrapper for Bryntum ProgressBar
|
|
4
|
+
*/
|
|
5
|
+
import { Component, EventEmitter, Output, Input } from '@angular/core';
|
|
6
|
+
import WrapperHelper from './wrapper.helper';
|
|
7
|
+
import { ProgressBar, Widget } from '@bryntum/grid';
|
|
8
|
+
import * as i0 from "@angular/core";
|
|
9
|
+
export class BryntumProgressBarComponent {
|
|
10
|
+
constructor(element) {
|
|
11
|
+
this.bryntumConfig = {
|
|
12
|
+
adopt: undefined,
|
|
13
|
+
appendTo: undefined,
|
|
14
|
+
href: undefined,
|
|
15
|
+
angularComponent: this,
|
|
16
|
+
features: {},
|
|
17
|
+
listeners: {}
|
|
18
|
+
};
|
|
19
|
+
// Events emitters
|
|
20
|
+
/**
|
|
21
|
+
* Fires before an object is destroyed.
|
|
22
|
+
* @param {object} event Event object
|
|
23
|
+
* @param {Core.Base} event.source The Object that is being destroyed.
|
|
24
|
+
*/
|
|
25
|
+
this.onBeforeDestroy = new EventEmitter();
|
|
26
|
+
/**
|
|
27
|
+
* Triggered before a widget is hidden. Return `false` to prevent the action.
|
|
28
|
+
* @param {object} event Event object
|
|
29
|
+
* @param {Core.widget.Widget} event.source The widget being hidden.
|
|
30
|
+
*/
|
|
31
|
+
this.onBeforeHide = new EventEmitter();
|
|
32
|
+
/**
|
|
33
|
+
* Triggered before a widget is shown. Return `false` to prevent the action.
|
|
34
|
+
* @param {object} event Event object
|
|
35
|
+
* @param {Core.widget.Widget,any} event.source The widget being shown
|
|
36
|
+
*/
|
|
37
|
+
this.onBeforeShow = new EventEmitter();
|
|
38
|
+
/**
|
|
39
|
+
* Fires when any other event is fired from the object.
|
|
40
|
+
* ...
|
|
41
|
+
* [View online docs...](https://bryntum.com/products/grid/docs/api/Core/widget/ProgressBar#event-catchAll)
|
|
42
|
+
* @param {object} event Event object
|
|
43
|
+
* @param {{[key: string]: any, type: string}} event.event The Object that contains event details
|
|
44
|
+
* @param {string} event.event.type The type of the event which is caught by the listener
|
|
45
|
+
*/
|
|
46
|
+
this.onCatchAll = new EventEmitter();
|
|
47
|
+
/**
|
|
48
|
+
* Fires when an object is destroyed.
|
|
49
|
+
* @param {object} event Event object
|
|
50
|
+
* @param {Core.Base} event.source The Object that is being destroyed.
|
|
51
|
+
*/
|
|
52
|
+
this.onDestroy = new EventEmitter();
|
|
53
|
+
/**
|
|
54
|
+
* Triggered when a widget's [element](https://bryntum.com/products/grid/docs/api/Core/widget/Widget#property-element) is available.
|
|
55
|
+
* @param {object} event Event object
|
|
56
|
+
* @param {HTMLElement} event.element The Widget's element.
|
|
57
|
+
*/
|
|
58
|
+
this.onElementCreated = new EventEmitter();
|
|
59
|
+
/**
|
|
60
|
+
* Fired when focus enters this Widget.
|
|
61
|
+
* @param {object} event Event object
|
|
62
|
+
* @param {Core.widget.Widget} event.source This Widget
|
|
63
|
+
* @param {HTMLElement} event.fromElement The element which lost focus.
|
|
64
|
+
* @param {HTMLElement} event.toElement The element which gained focus.
|
|
65
|
+
* @param {Core.widget.Widget} event.fromWidget The widget which lost focus.
|
|
66
|
+
* @param {Core.widget.Widget} event.toWidget The widget which gained focus.
|
|
67
|
+
* @param {boolean} event.backwards `true` if the `toElement` is before the `fromElement` in document order.
|
|
68
|
+
*/
|
|
69
|
+
this.onFocusIn = new EventEmitter();
|
|
70
|
+
/**
|
|
71
|
+
* Fired when focus exits this Widget's ownership tree. This is different from a `blur` event.
|
|
72
|
+
* focus moving from within this Widget's ownership tree, even if there are floating widgets
|
|
73
|
+
* will not trigger this event. This is when focus exits this widget completely.
|
|
74
|
+
* @param {object} event Event object
|
|
75
|
+
* @param {Core.widget.Widget} event.source This Widget
|
|
76
|
+
* @param {HTMLElement} event.fromElement The element which lost focus.
|
|
77
|
+
* @param {HTMLElement} event.toElement The element which gained focus.
|
|
78
|
+
* @param {Core.widget.Widget} event.fromWidget The widget which lost focus.
|
|
79
|
+
* @param {Core.widget.Widget} event.toWidget The widget which gained focus.
|
|
80
|
+
* @param {boolean} event.backwards `true` if the `toElement` is before the `fromElement` in document order.
|
|
81
|
+
*/
|
|
82
|
+
this.onFocusOut = new EventEmitter();
|
|
83
|
+
/**
|
|
84
|
+
* Triggered after a widget was hidden
|
|
85
|
+
* @param {object} event Event object
|
|
86
|
+
* @param {Core.widget.Widget} event.source The widget
|
|
87
|
+
*/
|
|
88
|
+
this.onHide = new EventEmitter();
|
|
89
|
+
/**
|
|
90
|
+
* Triggered when a widget which had been in a non-visible state for any reason
|
|
91
|
+
* achieves visibility.
|
|
92
|
+
* ...
|
|
93
|
+
* [View online docs...](https://bryntum.com/products/grid/docs/api/Core/widget/ProgressBar#event-paint)
|
|
94
|
+
* @param {object} event Event object
|
|
95
|
+
* @param {Core.widget.Widget} event.source The widget being painted.
|
|
96
|
+
* @param {boolean} event.firstPaint `true` if this is the first paint.
|
|
97
|
+
*/
|
|
98
|
+
this.onPaint = new EventEmitter();
|
|
99
|
+
/**
|
|
100
|
+
* Fired when a Widget's read only state is toggled
|
|
101
|
+
* @param {object} event Event object
|
|
102
|
+
* @param {boolean} event.readOnly Read only or not
|
|
103
|
+
*/
|
|
104
|
+
this.onReadOnly = new EventEmitter();
|
|
105
|
+
/**
|
|
106
|
+
* This event is fired after a widget's elements have been synchronized due to a direct or indirect call
|
|
107
|
+
* to [recompose](https://bryntum.com/products/grid/docs/api/Core/widget/Widget#function-recompose), if this results in some change to the widget's rendered DOM elements.
|
|
108
|
+
*/
|
|
109
|
+
this.onRecompose = new EventEmitter();
|
|
110
|
+
/**
|
|
111
|
+
* Fired when the encapsulating element of a Widget resizes *only when [monitorResize](https://bryntum.com/products/grid/docs/api/Core/widget/Widget#config-monitorResize) is `true`*.
|
|
112
|
+
* @param {object} event Event object
|
|
113
|
+
* @param {Core.widget.Widget} event.source This Widget
|
|
114
|
+
* @param {number} event.width The new width
|
|
115
|
+
* @param {number} event.height The new height
|
|
116
|
+
* @param {number} event.oldWidth The old width
|
|
117
|
+
* @param {number} event.oldHeight The old height
|
|
118
|
+
*/
|
|
119
|
+
this.onResize = new EventEmitter();
|
|
120
|
+
/**
|
|
121
|
+
* Triggered after a widget is shown.
|
|
122
|
+
* @param {object} event Event object
|
|
123
|
+
* @param {Core.widget.Widget} event.source The widget
|
|
124
|
+
*/
|
|
125
|
+
this.onShow = new EventEmitter();
|
|
126
|
+
this.elementRef = element;
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Create and append the underlying widget
|
|
130
|
+
*/
|
|
131
|
+
ngOnInit() {
|
|
132
|
+
const me = this, { elementRef, bryntumConfig } = me, { instanceClass, instanceName, bryntumConfigs, bryntumEvents } = BryntumProgressBarComponent;
|
|
133
|
+
bryntumConfigs.filter(prop => prop in this).forEach(prop => {
|
|
134
|
+
// @ts-ignore
|
|
135
|
+
WrapperHelper.applyPropValue(bryntumConfig, prop, this[prop]);
|
|
136
|
+
if (['features', 'config'].includes(prop)) {
|
|
137
|
+
WrapperHelper.devWarningConfigProp(instanceName, prop);
|
|
138
|
+
}
|
|
139
|
+
});
|
|
140
|
+
// @ts-ignore
|
|
141
|
+
bryntumEvents.filter(event => this[event] && this[event].observers.length > 0).forEach(event => {
|
|
142
|
+
const uncapitalize = (str) => str.charAt(0).toLowerCase() + str.slice(1), eventName = (str) => uncapitalize(str.slice(2));
|
|
143
|
+
// @ts-ignore
|
|
144
|
+
bryntumConfig.listeners[eventName(event)] = e => {
|
|
145
|
+
// @ts-ignore
|
|
146
|
+
me[event].emit(e);
|
|
147
|
+
// EventEmitter does not return values in the normal way, work around it by setting `returnValue` flag
|
|
148
|
+
// in Angular listeners
|
|
149
|
+
return e.returnValue;
|
|
150
|
+
};
|
|
151
|
+
});
|
|
152
|
+
// If component has no container specified in config then use adopt to Wrapper's element
|
|
153
|
+
const containerParam = [
|
|
154
|
+
'adopt',
|
|
155
|
+
'appendTo',
|
|
156
|
+
'insertAfter',
|
|
157
|
+
'insertBefore'
|
|
158
|
+
// @ts-ignore
|
|
159
|
+
].find(prop => bryntumConfig[prop]);
|
|
160
|
+
if (!containerParam) {
|
|
161
|
+
if (instanceName === 'Button' || elementRef.nativeElement.getRootNode() instanceof ShadowRoot) {
|
|
162
|
+
// Button should always be <a> or <button> inside owner element
|
|
163
|
+
bryntumConfig.appendTo = elementRef.nativeElement;
|
|
164
|
+
}
|
|
165
|
+
else {
|
|
166
|
+
bryntumConfig.adopt = elementRef.nativeElement;
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
else {
|
|
170
|
+
WrapperHelper.devWarningContainer(instanceName, containerParam);
|
|
171
|
+
}
|
|
172
|
+
// @ts-ignore
|
|
173
|
+
me.instance = instanceName === 'Widget' ? Widget.create(bryntumConfig) : new instanceClass(bryntumConfig);
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Watch for changes
|
|
177
|
+
* @param changes
|
|
178
|
+
*/
|
|
179
|
+
ngOnChanges(changes) {
|
|
180
|
+
const { instance } = this, { instanceName } = BryntumProgressBarComponent;
|
|
181
|
+
if (!instance) {
|
|
182
|
+
return;
|
|
183
|
+
}
|
|
184
|
+
// Iterate over all changes
|
|
185
|
+
Object.entries(changes).forEach(([prop, change]) => {
|
|
186
|
+
const newValue = change.currentValue, { instance } = this, { bryntumConfigsOnly, bryntumProps } = BryntumProgressBarComponent;
|
|
187
|
+
if (bryntumProps.includes(prop)) {
|
|
188
|
+
WrapperHelper.applyPropValue(instance, prop, newValue, false);
|
|
189
|
+
if (bryntumConfigsOnly.includes(prop)) {
|
|
190
|
+
WrapperHelper.devWarningUpdateProp(instanceName, prop);
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
});
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* Destroy the component
|
|
197
|
+
*/
|
|
198
|
+
ngOnDestroy() {
|
|
199
|
+
// @ts-ignore
|
|
200
|
+
if (this.instance && this.instance.destroy) {
|
|
201
|
+
this.instance.destroy();
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
BryntumProgressBarComponent.instanceClass = ProgressBar;
|
|
206
|
+
BryntumProgressBarComponent.instanceName = 'ProgressBar';
|
|
207
|
+
BryntumProgressBarComponent.bryntumEvents = [
|
|
208
|
+
'onBeforeDestroy',
|
|
209
|
+
'onBeforeHide',
|
|
210
|
+
'onBeforeShow',
|
|
211
|
+
'onCatchAll',
|
|
212
|
+
'onDestroy',
|
|
213
|
+
'onElementCreated',
|
|
214
|
+
'onFocusIn',
|
|
215
|
+
'onFocusOut',
|
|
216
|
+
'onHide',
|
|
217
|
+
'onPaint',
|
|
218
|
+
'onReadOnly',
|
|
219
|
+
'onRecompose',
|
|
220
|
+
'onResize',
|
|
221
|
+
'onShow'
|
|
222
|
+
];
|
|
223
|
+
BryntumProgressBarComponent.bryntumFeatureNames = [];
|
|
224
|
+
BryntumProgressBarComponent.bryntumConfigs = BryntumProgressBarComponent.bryntumFeatureNames.concat([
|
|
225
|
+
'adopt',
|
|
226
|
+
'align',
|
|
227
|
+
'alignSelf',
|
|
228
|
+
'anchor',
|
|
229
|
+
'appendTo',
|
|
230
|
+
'ariaDescription',
|
|
231
|
+
'ariaLabel',
|
|
232
|
+
'bubbleEvents',
|
|
233
|
+
'callOnFunctions',
|
|
234
|
+
'catchEventHandlerExceptions',
|
|
235
|
+
'centered',
|
|
236
|
+
'cls',
|
|
237
|
+
'color',
|
|
238
|
+
'column',
|
|
239
|
+
'config',
|
|
240
|
+
'constrainTo',
|
|
241
|
+
'content',
|
|
242
|
+
'contentElementCls',
|
|
243
|
+
'dataField',
|
|
244
|
+
'dataset',
|
|
245
|
+
'defaultBindProperty',
|
|
246
|
+
'detectCSSCompatibilityIssues',
|
|
247
|
+
'disabled',
|
|
248
|
+
'dock',
|
|
249
|
+
'draggable',
|
|
250
|
+
'elementAttributes',
|
|
251
|
+
'extraData',
|
|
252
|
+
'flex',
|
|
253
|
+
'floating',
|
|
254
|
+
'height',
|
|
255
|
+
'hidden',
|
|
256
|
+
'hideAnimation',
|
|
257
|
+
'html',
|
|
258
|
+
'htmlCls',
|
|
259
|
+
'id',
|
|
260
|
+
'ignoreParentReadOnly',
|
|
261
|
+
'insertBefore',
|
|
262
|
+
'insertFirst',
|
|
263
|
+
'keyMap',
|
|
264
|
+
'label',
|
|
265
|
+
'listeners',
|
|
266
|
+
'localeClass',
|
|
267
|
+
'localizable',
|
|
268
|
+
'localizableProperties',
|
|
269
|
+
'margin',
|
|
270
|
+
'maskDefaults',
|
|
271
|
+
'masked',
|
|
272
|
+
'max',
|
|
273
|
+
'maxHeight',
|
|
274
|
+
'maximizeOnMobile',
|
|
275
|
+
'maxWidth',
|
|
276
|
+
'minHeight',
|
|
277
|
+
'minWidth',
|
|
278
|
+
'monitorResize',
|
|
279
|
+
'owner',
|
|
280
|
+
'positioned',
|
|
281
|
+
'preventTooltipOnTouch',
|
|
282
|
+
'readOnly',
|
|
283
|
+
'relayStoreEvents',
|
|
284
|
+
'ripple',
|
|
285
|
+
'rootElement',
|
|
286
|
+
'rtl',
|
|
287
|
+
'scrollable',
|
|
288
|
+
'scrollAction',
|
|
289
|
+
'showAnimation',
|
|
290
|
+
'showTooltipWhenDisabled',
|
|
291
|
+
'span',
|
|
292
|
+
'tab',
|
|
293
|
+
'tag',
|
|
294
|
+
'textAlign',
|
|
295
|
+
'title',
|
|
296
|
+
'tooltip',
|
|
297
|
+
'type',
|
|
298
|
+
'ui',
|
|
299
|
+
'value',
|
|
300
|
+
'valueRenderer',
|
|
301
|
+
'valueText',
|
|
302
|
+
'weight',
|
|
303
|
+
'width',
|
|
304
|
+
'x',
|
|
305
|
+
'y'
|
|
306
|
+
]);
|
|
307
|
+
BryntumProgressBarComponent.bryntumConfigsOnly = [
|
|
308
|
+
'adopt',
|
|
309
|
+
'align',
|
|
310
|
+
'anchor',
|
|
311
|
+
'ariaDescription',
|
|
312
|
+
'ariaLabel',
|
|
313
|
+
'bubbleEvents',
|
|
314
|
+
'centered',
|
|
315
|
+
'config',
|
|
316
|
+
'constrainTo',
|
|
317
|
+
'contentElementCls',
|
|
318
|
+
'dataField',
|
|
319
|
+
'defaultBindProperty',
|
|
320
|
+
'detectCSSCompatibilityIssues',
|
|
321
|
+
'dock',
|
|
322
|
+
'draggable',
|
|
323
|
+
'elementAttributes',
|
|
324
|
+
'floating',
|
|
325
|
+
'hideAnimation',
|
|
326
|
+
'htmlCls',
|
|
327
|
+
'ignoreParentReadOnly',
|
|
328
|
+
'listeners',
|
|
329
|
+
'localeClass',
|
|
330
|
+
'localizable',
|
|
331
|
+
'localizableProperties',
|
|
332
|
+
'maskDefaults',
|
|
333
|
+
'masked',
|
|
334
|
+
'monitorResize',
|
|
335
|
+
'owner',
|
|
336
|
+
'positioned',
|
|
337
|
+
'preventTooltipOnTouch',
|
|
338
|
+
'relayStoreEvents',
|
|
339
|
+
'ripple',
|
|
340
|
+
'rootElement',
|
|
341
|
+
'scrollAction',
|
|
342
|
+
'showAnimation',
|
|
343
|
+
'showTooltipWhenDisabled',
|
|
344
|
+
'tab',
|
|
345
|
+
'tag',
|
|
346
|
+
'textAlign',
|
|
347
|
+
'title',
|
|
348
|
+
'type',
|
|
349
|
+
'ui',
|
|
350
|
+
'weight'
|
|
351
|
+
];
|
|
352
|
+
BryntumProgressBarComponent.bryntumProps = BryntumProgressBarComponent.bryntumFeatureNames.concat([
|
|
353
|
+
'alignSelf',
|
|
354
|
+
'anchorSize',
|
|
355
|
+
'appendTo',
|
|
356
|
+
'callOnFunctions',
|
|
357
|
+
'catchEventHandlerExceptions',
|
|
358
|
+
'cls',
|
|
359
|
+
'color',
|
|
360
|
+
'column',
|
|
361
|
+
'content',
|
|
362
|
+
'dataset',
|
|
363
|
+
'disabled',
|
|
364
|
+
'extraData',
|
|
365
|
+
'flex',
|
|
366
|
+
'focusVisible',
|
|
367
|
+
'height',
|
|
368
|
+
'hidden',
|
|
369
|
+
'html',
|
|
370
|
+
'id',
|
|
371
|
+
'insertBefore',
|
|
372
|
+
'insertFirst',
|
|
373
|
+
'keyMap',
|
|
374
|
+
'label',
|
|
375
|
+
'margin',
|
|
376
|
+
'max',
|
|
377
|
+
'maxHeight',
|
|
378
|
+
'maximizeOnMobile',
|
|
379
|
+
'maxWidth',
|
|
380
|
+
'minHeight',
|
|
381
|
+
'minWidth',
|
|
382
|
+
'parent',
|
|
383
|
+
'readOnly',
|
|
384
|
+
'rtl',
|
|
385
|
+
'scrollable',
|
|
386
|
+
'span',
|
|
387
|
+
'tooltip',
|
|
388
|
+
'value',
|
|
389
|
+
'valueRenderer',
|
|
390
|
+
'valueText',
|
|
391
|
+
'width',
|
|
392
|
+
'x',
|
|
393
|
+
'y'
|
|
394
|
+
]);
|
|
395
|
+
BryntumProgressBarComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.0", ngImport: i0, type: BryntumProgressBarComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
396
|
+
BryntumProgressBarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.0", type: BryntumProgressBarComponent, selector: "bryntum-progress-bar", inputs: { adopt: "adopt", align: "align", anchor: "anchor", ariaDescription: "ariaDescription", ariaLabel: "ariaLabel", bubbleEvents: "bubbleEvents", centered: "centered", config: "config", constrainTo: "constrainTo", contentElementCls: "contentElementCls", dataField: "dataField", defaultBindProperty: "defaultBindProperty", detectCSSCompatibilityIssues: "detectCSSCompatibilityIssues", dock: "dock", draggable: "draggable", elementAttributes: "elementAttributes", floating: "floating", hideAnimation: "hideAnimation", htmlCls: "htmlCls", ignoreParentReadOnly: "ignoreParentReadOnly", listeners: "listeners", localeClass: "localeClass", localizable: "localizable", localizableProperties: "localizableProperties", maskDefaults: "maskDefaults", masked: "masked", monitorResize: "monitorResize", owner: "owner", positioned: "positioned", preventTooltipOnTouch: "preventTooltipOnTouch", relayStoreEvents: "relayStoreEvents", ripple: "ripple", rootElement: "rootElement", scrollAction: "scrollAction", showAnimation: "showAnimation", showTooltipWhenDisabled: "showTooltipWhenDisabled", tab: "tab", tag: "tag", textAlign: "textAlign", title: "title", type: "type", ui: "ui", weight: "weight", alignSelf: "alignSelf", appendTo: "appendTo", callOnFunctions: "callOnFunctions", catchEventHandlerExceptions: "catchEventHandlerExceptions", cls: "cls", color: "color", column: "column", content: "content", dataset: "dataset", disabled: "disabled", extraData: "extraData", flex: "flex", height: "height", hidden: "hidden", html: "html", id: "id", insertBefore: "insertBefore", insertFirst: "insertFirst", keyMap: "keyMap", label: "label", margin: "margin", max: "max", maxHeight: "maxHeight", maximizeOnMobile: "maximizeOnMobile", maxWidth: "maxWidth", minHeight: "minHeight", minWidth: "minWidth", readOnly: "readOnly", rtl: "rtl", scrollable: "scrollable", span: "span", tooltip: "tooltip", value: "value", valueRenderer: "valueRenderer", valueText: "valueText", width: "width", x: "x", y: "y", anchorSize: "anchorSize", focusVisible: "focusVisible", parent: "parent" }, outputs: { onBeforeDestroy: "onBeforeDestroy", onBeforeHide: "onBeforeHide", onBeforeShow: "onBeforeShow", onCatchAll: "onCatchAll", onDestroy: "onDestroy", onElementCreated: "onElementCreated", onFocusIn: "onFocusIn", onFocusOut: "onFocusOut", onHide: "onHide", onPaint: "onPaint", onReadOnly: "onReadOnly", onRecompose: "onRecompose", onResize: "onResize", onShow: "onShow" }, usesOnChanges: true, ngImport: i0, template: '', isInline: true });
|
|
397
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.0", ngImport: i0, type: BryntumProgressBarComponent, decorators: [{
|
|
398
|
+
type: Component,
|
|
399
|
+
args: [{
|
|
400
|
+
selector: 'bryntum-progress-bar',
|
|
401
|
+
template: ''
|
|
402
|
+
}]
|
|
403
|
+
}], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { adopt: [{
|
|
404
|
+
type: Input
|
|
405
|
+
}], align: [{
|
|
406
|
+
type: Input
|
|
407
|
+
}], anchor: [{
|
|
408
|
+
type: Input
|
|
409
|
+
}], ariaDescription: [{
|
|
410
|
+
type: Input
|
|
411
|
+
}], ariaLabel: [{
|
|
412
|
+
type: Input
|
|
413
|
+
}], bubbleEvents: [{
|
|
414
|
+
type: Input
|
|
415
|
+
}], centered: [{
|
|
416
|
+
type: Input
|
|
417
|
+
}], config: [{
|
|
418
|
+
type: Input
|
|
419
|
+
}], constrainTo: [{
|
|
420
|
+
type: Input
|
|
421
|
+
}], contentElementCls: [{
|
|
422
|
+
type: Input
|
|
423
|
+
}], dataField: [{
|
|
424
|
+
type: Input
|
|
425
|
+
}], defaultBindProperty: [{
|
|
426
|
+
type: Input
|
|
427
|
+
}], detectCSSCompatibilityIssues: [{
|
|
428
|
+
type: Input
|
|
429
|
+
}], dock: [{
|
|
430
|
+
type: Input
|
|
431
|
+
}], draggable: [{
|
|
432
|
+
type: Input
|
|
433
|
+
}], elementAttributes: [{
|
|
434
|
+
type: Input
|
|
435
|
+
}], floating: [{
|
|
436
|
+
type: Input
|
|
437
|
+
}], hideAnimation: [{
|
|
438
|
+
type: Input
|
|
439
|
+
}], htmlCls: [{
|
|
440
|
+
type: Input
|
|
441
|
+
}], ignoreParentReadOnly: [{
|
|
442
|
+
type: Input
|
|
443
|
+
}], listeners: [{
|
|
444
|
+
type: Input
|
|
445
|
+
}], localeClass: [{
|
|
446
|
+
type: Input
|
|
447
|
+
}], localizable: [{
|
|
448
|
+
type: Input
|
|
449
|
+
}], localizableProperties: [{
|
|
450
|
+
type: Input
|
|
451
|
+
}], maskDefaults: [{
|
|
452
|
+
type: Input
|
|
453
|
+
}], masked: [{
|
|
454
|
+
type: Input
|
|
455
|
+
}], monitorResize: [{
|
|
456
|
+
type: Input
|
|
457
|
+
}], owner: [{
|
|
458
|
+
type: Input
|
|
459
|
+
}], positioned: [{
|
|
460
|
+
type: Input
|
|
461
|
+
}], preventTooltipOnTouch: [{
|
|
462
|
+
type: Input
|
|
463
|
+
}], relayStoreEvents: [{
|
|
464
|
+
type: Input
|
|
465
|
+
}], ripple: [{
|
|
466
|
+
type: Input
|
|
467
|
+
}], rootElement: [{
|
|
468
|
+
type: Input
|
|
469
|
+
}], scrollAction: [{
|
|
470
|
+
type: Input
|
|
471
|
+
}], showAnimation: [{
|
|
472
|
+
type: Input
|
|
473
|
+
}], showTooltipWhenDisabled: [{
|
|
474
|
+
type: Input
|
|
475
|
+
}], tab: [{
|
|
476
|
+
type: Input
|
|
477
|
+
}], tag: [{
|
|
478
|
+
type: Input
|
|
479
|
+
}], textAlign: [{
|
|
480
|
+
type: Input
|
|
481
|
+
}], title: [{
|
|
482
|
+
type: Input
|
|
483
|
+
}], type: [{
|
|
484
|
+
type: Input
|
|
485
|
+
}], ui: [{
|
|
486
|
+
type: Input
|
|
487
|
+
}], weight: [{
|
|
488
|
+
type: Input
|
|
489
|
+
}], alignSelf: [{
|
|
490
|
+
type: Input
|
|
491
|
+
}], appendTo: [{
|
|
492
|
+
type: Input
|
|
493
|
+
}], callOnFunctions: [{
|
|
494
|
+
type: Input
|
|
495
|
+
}], catchEventHandlerExceptions: [{
|
|
496
|
+
type: Input
|
|
497
|
+
}], cls: [{
|
|
498
|
+
type: Input
|
|
499
|
+
}], color: [{
|
|
500
|
+
type: Input
|
|
501
|
+
}], column: [{
|
|
502
|
+
type: Input
|
|
503
|
+
}], content: [{
|
|
504
|
+
type: Input
|
|
505
|
+
}], dataset: [{
|
|
506
|
+
type: Input
|
|
507
|
+
}], disabled: [{
|
|
508
|
+
type: Input
|
|
509
|
+
}], extraData: [{
|
|
510
|
+
type: Input
|
|
511
|
+
}], flex: [{
|
|
512
|
+
type: Input
|
|
513
|
+
}], height: [{
|
|
514
|
+
type: Input
|
|
515
|
+
}], hidden: [{
|
|
516
|
+
type: Input
|
|
517
|
+
}], html: [{
|
|
518
|
+
type: Input
|
|
519
|
+
}], id: [{
|
|
520
|
+
type: Input
|
|
521
|
+
}], insertBefore: [{
|
|
522
|
+
type: Input
|
|
523
|
+
}], insertFirst: [{
|
|
524
|
+
type: Input
|
|
525
|
+
}], keyMap: [{
|
|
526
|
+
type: Input
|
|
527
|
+
}], label: [{
|
|
528
|
+
type: Input
|
|
529
|
+
}], margin: [{
|
|
530
|
+
type: Input
|
|
531
|
+
}], max: [{
|
|
532
|
+
type: Input
|
|
533
|
+
}], maxHeight: [{
|
|
534
|
+
type: Input
|
|
535
|
+
}], maximizeOnMobile: [{
|
|
536
|
+
type: Input
|
|
537
|
+
}], maxWidth: [{
|
|
538
|
+
type: Input
|
|
539
|
+
}], minHeight: [{
|
|
540
|
+
type: Input
|
|
541
|
+
}], minWidth: [{
|
|
542
|
+
type: Input
|
|
543
|
+
}], readOnly: [{
|
|
544
|
+
type: Input
|
|
545
|
+
}], rtl: [{
|
|
546
|
+
type: Input
|
|
547
|
+
}], scrollable: [{
|
|
548
|
+
type: Input
|
|
549
|
+
}], span: [{
|
|
550
|
+
type: Input
|
|
551
|
+
}], tooltip: [{
|
|
552
|
+
type: Input
|
|
553
|
+
}], value: [{
|
|
554
|
+
type: Input
|
|
555
|
+
}], valueRenderer: [{
|
|
556
|
+
type: Input
|
|
557
|
+
}], valueText: [{
|
|
558
|
+
type: Input
|
|
559
|
+
}], width: [{
|
|
560
|
+
type: Input
|
|
561
|
+
}], x: [{
|
|
562
|
+
type: Input
|
|
563
|
+
}], y: [{
|
|
564
|
+
type: Input
|
|
565
|
+
}], anchorSize: [{
|
|
566
|
+
type: Input
|
|
567
|
+
}], focusVisible: [{
|
|
568
|
+
type: Input
|
|
569
|
+
}], parent: [{
|
|
570
|
+
type: Input
|
|
571
|
+
}], onBeforeDestroy: [{
|
|
572
|
+
type: Output
|
|
573
|
+
}], onBeforeHide: [{
|
|
574
|
+
type: Output
|
|
575
|
+
}], onBeforeShow: [{
|
|
576
|
+
type: Output
|
|
577
|
+
}], onCatchAll: [{
|
|
578
|
+
type: Output
|
|
579
|
+
}], onDestroy: [{
|
|
580
|
+
type: Output
|
|
581
|
+
}], onElementCreated: [{
|
|
582
|
+
type: Output
|
|
583
|
+
}], onFocusIn: [{
|
|
584
|
+
type: Output
|
|
585
|
+
}], onFocusOut: [{
|
|
586
|
+
type: Output
|
|
587
|
+
}], onHide: [{
|
|
588
|
+
type: Output
|
|
589
|
+
}], onPaint: [{
|
|
590
|
+
type: Output
|
|
591
|
+
}], onReadOnly: [{
|
|
592
|
+
type: Output
|
|
593
|
+
}], onRecompose: [{
|
|
594
|
+
type: Output
|
|
595
|
+
}], onResize: [{
|
|
596
|
+
type: Output
|
|
597
|
+
}], onShow: [{
|
|
598
|
+
type: Output
|
|
599
|
+
}] } });
|
|
600
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJ5bnR1bS1wcm9ncmVzcy1iYXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vY29tcG9uZW50L3NyYy9saWIvYnJ5bnR1bS1wcm9ncmVzcy1iYXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHNEQUFzRDtBQUN0RDs7R0FFRztBQUVILE9BQU8sRUFBRSxTQUFTLEVBQWMsWUFBWSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQWtELE1BQU0sZUFBZSxDQUFDO0FBRW5JLE9BQU8sYUFBYSxNQUFNLGtCQUFrQixDQUFDO0FBRTdDLE9BQU8sRUFBK0QsV0FBVyxFQUFrRyxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBbWVqTixNQUFNLE9BQU8sMkJBQTJCO0lBcU5wQyxZQUFZLE9BQW1CO1FBVHZCLGtCQUFhLEdBQUc7WUFDcEIsS0FBSyxFQUFjLFNBQVM7WUFDNUIsUUFBUSxFQUFXLFNBQVM7WUFDNUIsSUFBSSxFQUFlLFNBQVM7WUFDNUIsZ0JBQWdCLEVBQUcsSUFBSTtZQUN2QixRQUFRLEVBQVcsRUFBRTtZQUNyQixTQUFTLEVBQVUsRUFBRTtTQUN4QixDQUFDO1FBeUdGLGtCQUFrQjtRQUNsQjs7OztXQUlHO1FBQ08sb0JBQWUsR0FBUSxJQUFJLFlBQVksRUFBOEMsQ0FBQztRQUNoRzs7OztXQUlHO1FBQ08saUJBQVksR0FBUSxJQUFJLFlBQVksRUFBeUUsQ0FBQztRQUN4SDs7OztXQUlHO1FBQ08saUJBQVksR0FBUSxJQUFJLFlBQVksRUFBNkUsQ0FBQztRQUM1SDs7Ozs7OztXQU9HO1FBQ08sZUFBVSxHQUFRLElBQUksWUFBWSxFQUFnRSxDQUFDO1FBQzdHOzs7O1dBSUc7UUFDTyxjQUFTLEdBQVEsSUFBSSxZQUFZLEVBQThDLENBQUM7UUFDMUY7Ozs7V0FJRztRQUNPLHFCQUFnQixHQUFRLElBQUksWUFBWSxFQUFzRCxDQUFDO1FBQ3pHOzs7Ozs7Ozs7V0FTRztRQUNPLGNBQVMs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QUFuQixNQUFNO2dCQU1HLFNBQVM7c0JBQWxCLE1BQU07Z0JBTUcsZ0JBQWdCO3NCQUF6QixNQUFNO2dCQVdHLFNBQVM7c0JBQWxCLE1BQU07Z0JBYUcsVUFBVTtzQkFBbkIsTUFBTTtnQkFNRyxNQUFNO3NCQUFmLE1BQU07Z0JBVUcsT0FBTztzQkFBaEIsTUFBTTtnQkFNRyxVQUFVO3NCQUFuQixNQUFNO2dCQUtHLFdBQVc7c0JBQXBCLE1BQU07Z0JBVUcsUUFBUTtzQkFBakIsTUFBTTtnQkFNRyxNQUFNO3NCQUFmLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnMgKi9cbi8qKlxuICogQW5ndWxhciB3cmFwcGVyIGZvciBCcnludHVtIFByb2dyZXNzQmFyXG4gKi9cblxuaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIE91dHB1dCwgSW5wdXQsIFNpbXBsZUNoYW5nZSwgU2ltcGxlQ2hhbmdlcywgT25EZXN0cm95LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IFdyYXBwZXJIZWxwZXIgZnJvbSAnLi93cmFwcGVyLmhlbHBlcic7XG5cbmltcG9ydCB7IEFsaWduU3BlYywgQmFzZSwgQ29sb3IsIERvbUNvbmZpZywgS2V5TWFwQ29uZmlnLCBNYXNrQ29uZmlnLCBQcm9ncmVzc0JhciwgUHJvZ3Jlc3NCYXJMaXN0ZW5lcnMsIFJlY3RhbmdsZSwgU2Nyb2xsZXIsIFNjcm9sbGVyQ29uZmlnLCBUYWJDb25maWcsIFRvb2x0aXBDb25maWcsIFZ1ZUNvbmZpZywgV2lkZ2V0IH0gZnJvbSAnQGJyeW50dW0vZ3JpZCc7XG5cbmltcG9ydCB7IFN0cmluZ0hlbHBlciB9IGZyb20gJ0BicnludHVtL2dyaWQnO1xuXG5leHBvcnQgdHlwZSBCcnludHVtUHJvZ3Jlc3NCYXJQcm9wcyA9IHtcbiAgICAvLyBDb25maWdzXG4gICAgLyoqXG4gICAgICogRWxlbWVudCAob3IgZWxlbWVudCBpZCkgdG8gYWRvcHQgYXMgdGhpcyBXaWRnZXQncyBlbmNhcHN1bGF0aW5nIGVsZW1lbnQuIFRoZSB3aWRnZXQnc1xuICAgICAqIGNvbnRlbnQgd2lsbCBiZSBwbGFjZWQgaW5zaWRlIHRoaXMgZWxlbWVudC5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1Byb2dyZXNzQmFyI2NvbmZpZy1hZG9wdClcbiAgICAgKi9cbiAgICBhZG9wdCA/IDogSFRNTEVsZW1lbnR8c3RyaW5nXG4gICAgLyoqXG4gICAgICogKk9ubHkgdmFsaWQgaWYgdGhpcyBXaWRnZXQgaXMgW2Zsb2F0aW5nXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvV2lkZ2V0I2NvbmZpZy1mbG9hdGluZykuKlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvUHJvZ3Jlc3NCYXIjY29uZmlnLWFsaWduKVxuICAgICAqL1xuICAgIGFsaWduID8gOiBBbGlnblNwZWN8c3RyaW5nXG4gICAgLyoqXG4gICAgICogV2hlbiB0aGlzIHdpZGdldCBpcyBhIGNoaWxkIG9mIGEgW0NvbnRhaW5lcl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L0NvbnRhaW5lciksIGl0IHdpbGwgYnkgZGVmYXVsdCBiZSBwYXJ0aWNpcGF0aW5nIGluIGFcbiAgICAgKiBmbGV4Ym94IGxheW91dC4gVGhpcyBjb25maWcgYWxsb3dzIHlvdSB0byBzZXQgdGhpcyB3aWRnZXQnc1xuICAgICAqIFthbGlnbi1zZWxmXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvYWxpZ24tc2VsZikgc3R5bGUuXG4gICAgICovXG4gICAgYWxpZ25TZWxmID8gOiBzdHJpbmdcbiAgICAvKipcbiAgICAgKiAqT25seSB2YWxpZCBpZiB0aGlzIFdpZGdldCBpcyBbZmxvYXRpbmddKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9XaWRnZXQjY29uZmlnLWZsb2F0aW5nKSBhbmQgYmVpbmcgc2hvd24gdGhyb3VnaCBbc2hvd0J5XSgjQ29yZS93aWRnZXQvV2lkZ2V0I2Z1bmN0aW9uLXNob3dCeSkuKlxuICAgICAqIGB0cnVlYCB0byBzaG93IGEgY29ubmVjdG9yIGFycm93IHBvaW50aW5nIHRvIHRoZSBhbGlnbiB0YXJnZXQuXG4gICAgICovXG4gICAgYW5jaG9yID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogRWxlbWVudCAob3IgdGhlIGlkIG9mIGFuIGVsZW1lbnQpIHRvIGFwcGVuZCB0aGlzIHdpZGdldCdzIGVsZW1lbnQgdG8uIENhbiBiZSBjb25maWd1cmVkLCBvciBzZXQgb25jZSBhdFxuICAgICAqIHJ1bnRpbWUuIFRvIGFjY2VzcyB0aGUgZWxlbWVudCBvZiBhIHJlbmRlcmVkIHdpZGdldCwgc2VlIFtlbGVtZW50XShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvV2lkZ2V0I3Byb3BlcnR5LWVsZW1lbnQpLlxuICAgICAqL1xuICAgIGFwcGVuZFRvID8gOiBIVE1MRWxlbWVudHxzdHJpbmdcbiAgICAvKipcbiAgICAgKiBBIGxvY2FsaXphYmxlIHN0cmluZyAoTWF5IGNvbnRhaW4gYCdMe30nYCB0b2tlbnMgd2hpY2ggcmVzb2x2ZSBpbiB0aGUgbG9jYWxlIGZpbGUpIHRvIGluamVjdFxuICAgICAqIGludG8gYW4gZWxlbWVudCB3aGljaCB3aWxsIGJlIGxpbmtlZCB1c2luZyB0aGUgYGFyaWEtZGVzY3JpYmVkYnlgIGF0dHJpYnV0ZS5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1Byb2dyZXNzQmFyI2NvbmZpZy1hcmlhRGVzY3JpcHRpb24pXG4gICAgICovXG4gICAgYXJpYURlc2NyaXB0aW9uID8gOiBzdHJpbmdcbiAgICAvKipcbiAgICAgKiBBIGxvY2FsaXphYmxlIHN0cmluZyAoTWF5IGNvbnRhaW4gYCdMe30nYCB0b2tlbnMgd2hpY2ggcmVzb2x2ZSBpbiB0aGUgbG9jYWxlIGZpbGUpIHRvIGluamVjdCBhc1xuICAgICAqIHRoZSBgYXJpYS1sYWJlbGAgYXR0cmlidXRlLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvUHJvZ3Jlc3NCYXIjY29uZmlnLWFyaWFMYWJlbClcbiAgICAgKi9cbiAgICBhcmlhTGFiZWwgPyA6IHN0cmluZ1xuICAgIC8qKlxuICAgICAqIEFuIG9iamVjdCB3aGVyZSBwcm9wZXJ0eSBuYW1lcyB3aXRoIGEgdHJ1dGh5IHZhbHVlIGluZGljYXRlIHdoaWNoIGV2ZW50cyBzaG91bGQgYnViYmxlIHVwIHRoZSBvd25lcnNoaXBcbiAgICAgKiBoaWVyYXJjaHkgd2hlbiB0cmlnZ2VyZWQuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9Qcm9ncmVzc0JhciNjb25maWctYnViYmxlRXZlbnRzKVxuICAgICAqL1xuICAgIGJ1YmJsZUV2ZW50cyA/IDogb2JqZWN0XG4gICAgLyoqXG4gICAgICogU2V0IHRvIGBmYWxzZWAgdG8gbm90IGNhbGwgb25YWFggbWV0aG9kIG5hbWVzIChlLmcuIGBvblNob3dgLCBgb25DbGlja2ApLCBhcyBhbiBlYXN5IHdheSB0byBsaXN0ZW4gZm9yIGV2ZW50cy5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1Byb2dyZXNzQmFyI2NvbmZpZy1jYWxsT25GdW5jdGlvbnMpXG4gICAgICovXG4gICAgY2FsbE9uRnVuY3Rpb25zID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogQnkgZGVmYXVsdCwgaWYgYW4gZXZlbnQgaGFuZGxlciB0aHJvd3MgYW4gZXhjZXB0aW9uLCB0aGUgZXJyb3IgcHJvcGFnYXRlcyB1cCB0aGUgc3RhY2sgYW5kIHRoZVxuICAgICAqIGFwcGxpY2F0aW9uIHN0YXRlIGlzIHVuZGVmaW5lZC4gQ29kZSB3aGljaCBmb2xsb3dzIHRoZSBldmVudCBoYW5kbGVyIHdpbGwgKm5vdCogYmUgZXhlY3V0ZWQuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9Qcm9ncmVzc0JhciNjb25maWctY2F0Y2hFdmVudEhhbmRsZXJFeGNlcHRpb25zKVxuICAgICAqL1xuICAgIGNhdGNoRXZlbnRIYW5kbGVyRXhjZXB0aW9ucyA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqICpPbmx5IHZhbGlkIGlmIHRoaXMgV2lkZ2V0IGlzIFtmbG9hdGluZ10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1dpZGdldCNjb25maWctZmxvYXRpbmcpLipcbiAgICAgKiBTZXQgdG8gYHRydWVgIHRvIGNlbnRyZSB0aGUgV2lkZ2V0IGluIGJyb3dzZXIgdmlld3BvcnQgc3BhY2UuXG4gICAgICovXG4gICAgY2VudGVyZWQgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBDdXN0b20gQ1NTIGNsYXNzZXMgdG8gYWRkIHRvIGVsZW1lbnQuXG4gICAgICogTWF5IGJlIHNwZWNpZmllZCBhcyBhIHNwYWNlIHNlcGFyYXRlZCBzdHJpbmcsIG9yIGFzIGFuIG9iamVjdCBpbiB3aGljaCBwcm9wZXJ0eSBuYW1lc1xuICAgICAqIHdpdGggdHJ1dGh5IHZhbHVlcyBhcmUgdXNlZCBhcyB0aGUgY2xhc3MgbmFtZXM6XG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9Qcm9ncmVzc0JhciNjb25maWctY2xzKVxuICAgICAqL1xuICAgIGNscyA/IDogc3RyaW5nfG9iamVjdFxuICAgIC8qKlxuICAgICAqIENvbG9yIG9mIHRoZSBwcm9ncmVzcyBiYXIgKCdiLWdyZWVuJywgJ2IteWVsbG93JywgJ2Itb3JhbmdlJywgZXRjLilcbiAgICAgKi9cbiAgICBjb2xvciA/IDogQ29sb3JcbiAgICAvKipcbiAgICAgKiBQcm9ncmFtbWF0aWMgY29udHJvbCBvdmVyIHdoaWNoIGNvbHVtbiB0byBzdGFydCBpbiB3aGVuIHVzZWQgaW4gYSBncmlkIGxheW91dC5cbiAgICAgKi9cbiAgICBjb2x1bW4gPyA6IG51bWJlclxuICAgIGNvbmZpZyA/IDogb2JqZWN0XG4gICAgLyoqXG4gICAgICogKk9ubHkgdmFsaWQgaWYgdGhpcyBXaWRnZXQgaXMgW2Zsb2F0aW5nXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvV2lkZ2V0I2NvbmZpZy1mbG9hdGluZykgb3IgW3Bvc2l0aW9uZWRdKCNDb3JlL3dpZGdldC9XaWRnZXQjY29uZmlnLXBvc2l0aW9uZWQpLipcbiAgICAgKiBFbGVtZW50LCBXaWRnZXQgb3IgUmVjdGFuZ2xlIHRvIHdoaWNoIHRoaXMgV2lkZ2V0IGlzIGNvbnN0cmFpbmVkLlxuICAgICAqL1xuICAgIGNvbnN0cmFpblRvID8gOiBIVE1MRWxlbWVudHxXaWRnZXR8UmVjdGFuZ2xlXG4gICAgLyoqXG4gICAgICogVGhlIEhUTUwgY29udGVudCB0aGF0IGNvZXhpc3RzIHdpdGggc2libGluZyBlbGVtZW50cyB3aGljaCBtYXkgaGF2ZSBiZWVuIGFkZGVkIHRvIHRoZVxuICAgICAqIFtjb250ZW50RWxlbWVudF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1dpZGdldCNwcm9wZXJ0eS1jb250ZW50RWxlbWVudCkgYnkgcGx1Z2lucyBhbmQgZmVhdHVyZXMuXG4gICAgICogV2hlbiBzcGVjaWZ5aW5nIGh0bWwsIHRoaXMgd2lkZ2V0J3MgZWxlbWVudCB3aWxsIGFsc28gaGF2ZSB0aGUgW2h0bWxDbHNdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9XaWRnZXQjY29uZmlnLWh0bWxDbHMpXG4gICAgICogY2xhc3MgYWRkZWQgdG8gaXRzIGNsYXNzTGlzdCwgdG8gYWxsb3cgdGFyZ2V0ZWQgc3R5bGluZy5cbiAgICAgKi9cbiAgICBjb250ZW50ID8gOiBzdHJpbmdcbiAgICAvKipcbiAgICAgKiBDdXN0b20gQ1NTIGNsYXNzZXMgdG8gYWRkIHRvIHRoZSBbY29udGVudEVsZW1lbnRdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9XaWRnZXQjcHJvcGVydHktY29udGVudEVsZW1lbnQpLlxuICAgICAqIE1heSBiZSBzcGVjaWZpZWQgYXMgYSBzcGFjZSBzZXBhcmF0ZWQgc3RyaW5nLCBvciBhcyBhbiBvYmplY3QgaW4gd2hpY2ggcHJvcGVydHkgbmFtZXNcbiAgICAgKiB3aXRoIHRydXRoeSB2YWx1ZXMgYXJlIHVzZWQgYXMgdGhlIGNsYXNzIG5hbWVzOlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvUHJvZ3Jlc3NCYXIjY29uZmlnLWNvbnRlbnRFbGVtZW50Q2xzKVxuICAgICAqL1xuICAgIGNvbnRlbnRFbGVtZW50Q2xzID8gOiBzdHJpbmd8b2JqZWN0XG4gICAgLyoqXG4gICAgICogV2hlbiB0aGlzIFdpZGdldCBjb25maWd1cmF0aW9uIGlzIHVzZWQgaW4gdGhlIEdyaWQncyBSb3dFeHBhbmRlciBmZWF0dXJlJ3MgYHdpZGdldGAgY29uZmlnLCBwcm92aWRlIHRoZVxuICAgICAqIGZpZWxkIG9uIHRoZSBleHBhbmRlZCByZWNvcmQgdG8gdXNlIGZvciBwb3B1bGF0aW5nIHRoaXMgd2lkZ2V0J3Mgc3RvcmUgKGlmIGFwcGxpY2FibGUpXG4gICAgICovXG4gICAgZGF0YUZpZWxkID8gOiBzdHJpbmdcbiAgICAvKipcbiAgICAgKiBPYmplY3QgdG8gYXBwbHkgdG8gZWxlbWVudHMgZGF0YXNldCAoZWFjaCBrZXkgd2lsbCBiZSB1c2VkIGFzIGEgZGF0YS1hdHRyaWJ1dGUgb24gdGhlIGVsZW1lbnQpXG4gICAgICovXG4gICAgZGF0YXNldCA/IDogUmVjb3JkPHN0cmluZywgc3RyaW5nPlxuICAgIC8qKlxuICAgICAqIFRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSB0byBzZXQgd2hlbiBhIHNpbmdsZSB2YWx1ZSBpcyB0byBiZSBhcHBsaWVkIHRvIHRoaXMgV2lkZ2V0LiBTdWNoIGFzIHdoZW4gdXNlZFxuICAgICAqIGluIGEgZ3JpZCBXaWRnZXRDb2x1bW4sIHRoaXMgaXMgdGhlIHByb3BlcnR5IHRvIHdoaWNoIHRoZSBjb2x1bW4ncyBgZmllbGRgIGlzIGFwcGxpZWQuXG4gICAgICovXG4gICAgZGVmYXVsdEJpbmRQcm9wZXJ0eSA/IDogc3RyaW5nXG4gICAgLyoqXG4gICAgICogQ2hlY2sgZm9yIENTUyBjb21wYXRpYmlsaXR5IGlzc3VlcyB3aGVuIHVwZ3JhZGluZyB0byB2Ny4gUGVyZm9ybXMgdGhlIGZvbGxvd2luZyBjaGVja3M6XG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9Qcm9ncmVzc0JhciNjb25maWctZGV0ZWN0Q1NTQ29tcGF0aWJpbGl0eUlzc3VlcylcbiAgICAgKi9cbiAgICBkZXRlY3RDU1NDb21wYXRpYmlsaXR5SXNzdWVzID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogRGlzYWJsZSBvciBlbmFibGUgdGhlIHdpZGdldC4gSXQgaXMgc2ltaWxhciB0byBbcmVhZE9ubHldKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9XaWRnZXQjY29uZmlnLXJlYWRPbmx5KSBleGNlcHQgYSBkaXNhYmxlZCB3aWRnZXRcbiAgICAgKiBjYW5ub3QgYmUgZm9jdXNlZCwgdXNlcyBhIGRpZmZlcmVudCByZW5kaXRpb24gKHVzdWFsbHkgZ3JleWlzaCkgYW5kIGRvZXMgbm90IGFsbG93IHNlbGVjdGluZyBpdHMgdmFsdWUuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9Qcm9ncmVzc0JhciNjb25maWctZGlzYWJsZWQpXG4gICAgICovXG4gICAgZGlzYWJsZWQgPyA6IGJvb2xlYW58J2luZXJ0J1xuICAgIC8qKlxuICAgICAqIENvbnRyb2xzIHRoZSBwbGFjZW1lbnQgb2YgdGhpcyB3aWRnZXQgd2hlbiBpdCBpcyBhZGRlZCB0byBhIFtwYW5lbCdzIF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1BhbmVsKVxuICAgICAqIFtzdHJpcHMgY29sbGVjdGlvbl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1BhbmVsI2NvbmZpZy1zdHJpcHMpLiBUeXBpY2FsIHZhbHVlcyBmb3IgdGhpcyBjb25maWcgYXJlIGAndG9wJ2AsXG4gICAgICogYCdib3R0b20nYCwgYCdsZWZ0J2AsIG9yIGAncmlnaHQnYCwgd2hpY2ggY2F1c2UgdGhlIHdpZGdldCB0byBiZSBwbGFjZWQgb24gdGhhdCBzaWRlIG9mIHRoZSBwYW5lbCdzXG4gICAgICogYm9keS4gU3VjaCB3aWRnZXRzIGFyZSBjYWxsZWQgXCJlZGdlIHN0cmlwc1wiLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvUHJvZ3Jlc3NCYXIjY29uZmlnLWRvY2spXG4gICAgICovXG4gICAgZG9jayA/IDogJ3RvcCd8J2JvdHRvbSd8J2xlZnQnfCdyaWdodCd8J3N0YXJ0J3wnZW5kJ3wnaGVhZGVyJ3wncHJlLWhlYWRlcid8b2JqZWN0XG4gICAgLyoqXG4gICAgICogKk9ubHkgdmFsaWQgaWYgdGhpcyBXaWRnZXQgaXMgW2Zsb2F0aW5nXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvV2lkZ2V0I2NvbmZpZy1mbG9hdGluZykuKlxuICAgICAqIFNldCB0byBgdHJ1ZWAgdG8gYmUgYWJsZSB0byBkcmFnIGEgd2lkZ2V0IGZyZWVseSBvbiB0aGUgcGFnZS4gT3Igc2V0IHRvIGFuIG9iamVjdCB3aXRoIGEgwrRoYW5kbGVTZWxlY3RvcsK0XG4gICAgICogcHJvcGVydHkgd2hpY2ggY29udHJvbHMgd2hlbiBhIGRyYWcgc2hvdWxkIHN0YXJ0LlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvUHJvZ3Jlc3NCYXIjY29uZmlnLWRyYWdnYWJsZSlcbiAgICAgKi9cbiAgICBkcmFnZ2FibGUgPyA6IGJvb2xlYW58e1xuICAgICAgICBoYW5kbGVTZWxlY3Rvcj86IHN0cmluZ1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBbiBvYmplY3Qgc3BlY2lmeWluZyBhdHRyaWJ1dGVzIHRvIGFzc2lnbiB0byB0aGUgcm9vdCBlbGVtZW50IG9mIHRoaXMgd2lkZ2V0LlxuICAgICAqIFNldCBgbnVsbGAgdmFsdWUgdG8gYXR0cmlidXRlIHRvIHJlbW92ZSBpdC5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1Byb2dyZXNzQmFyI2NvbmZpZy1lbGVtZW50QXR0cmlidXRlcylcbiAgICAgKi9cbiAgICBlbGVtZW50QXR0cmlidXRlcyA/IDogUmVjb3JkPHN0cmluZywgc3RyaW5nfG51bGw+XG4gICAgZXh0cmFEYXRhID8gOiBhbnlcbiAgICAvKipcbiAgICAgKiBXaGVuIHRoaXMgd2lkZ2V0IGlzIGEgY2hpbGQgb2YgYSBbQ29udGFpbmVyXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvQ29udGFpbmVyKSwgaXQgd2lsbCBieSBkZWZhdWx0IGJlIHBhcnRpY2lwYXRpbmcgaW4gYVxuICAgICAqIGZsZXhib3ggbGF5b3V0LiBUaGlzIGNvbmZpZyBhbGxvd3MgeW91IHRvIHNldCB0aGlzIHdpZGdldCdzXG4gICAgICogW2ZsZXhdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy9mbGV4KSBzdHlsZS5cbiAgICAgKiBUaGlzIG1heSBiZSBjb25maWd1cmVkIGFzIGEgc2luZ2xlIG51bWJlciBvciBhIGAmbHQ7ZmxleC1ncm93Jmd0OyAmbHQ7ZmxleC1zaHJpbmsmZ3Q7ICZsdDtmbGV4LWJhc2lzJmd0O2AgZm9ybWF0IHN0cmluZy5cbiAgICAgKiBudW1lcmljLW9ubHkgdmFsdWVzIGFyZSBpbnRlcnByZXRlZCBhcyB0aGUgYGZsZXgtZ3Jvd2AgdmFsdWUuXG4gICAgICovXG4gICAgZmxleCA/IDogbnVtYmVyfHN0cmluZ1xuICAgIC8qKlxuICAgICAqIFNldCB0byBgdHJ1ZWAgdG8gbW92ZSB0aGUgd2lkZ2V0IG91dCBvZiB0aGUgZG9jdW1lbnQgZmxvdyBhbmQgcG9zaXRpb24gaXRcbiAgICAgKiBhYnNvbHV0ZWx5IGluIGJyb3dzZXIgdmlld3BvcnQgc3BhY2UuXG4gICAgICovXG4gICAgZmxvYXRpbmcgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBXaWRnZXQncyBoZWlnaHQsIHVzZWQgdG8gc2V0IGVsZW1lbnQgYHN0eWxlLmhlaWdodGAuIEVpdGhlciBzcGVjaWZ5IGEgdmFsaWQgaGVpZ2h0IHN0cmluZyBvciBhIG51bWJlcixcbiAgICAgKiB3aGljaCB3aWxsIGdldCAncHgnIGFwcGVuZGVkLiBXZSByZWNvbW1lbmQgdXNpbmcgQ1NTIGFzIHRoZSBwcmltYXJ5IHdheSB0byBjb250cm9sIGhlaWdodCwgYnV0IGluIHNvbWVcbiAgICAgKiBjYXNlcyB0aGlzIGNvbmZpZyBpcyBjb252ZW5pZW50LlxuICAgICAqL1xuICAgIGhlaWdodCA/IDogc3RyaW5nfG51bWJlclxuICAgIC8qKlxuICAgICAqIENvbmZpZ3VyZSB3aXRoIHRydWUgdG8gbWFrZSB3aWRnZXQgaW5pdGlhbGx5IGhpZGRlbi5cbiAgICAgKi9cbiAgICBoaWRkZW4gPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiAqT25seSB2YWxpZCBpZiB0aGlzIFdpZGdldCBpcyBbZmxvYXRpbmddKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9XaWRnZXQjY29uZmlnLWZsb2F0aW5nKS4qXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9Qcm9ncmVzc0JhciNjb25maWctaGlkZUFuaW1hdGlvbilcbiAgICAgKi9cbiAgICBoaWRlQW5pbWF0aW9uID8gOiBib29sZWFufG9iamVjdFxuICAgIC8qKlxuICAgICAqIFRoZSBIVE1MIHRvIGRpc3BsYXkgaW5pdGlhbGx5IG9yIGEgZnVuY3Rpb24gcmV0dXJuaW5nIHRoZSBtYXJrdXAgKGNhbGxlZCBhdCB3aWRnZXQgY29uc3RydWN0aW9uIHRpbWUpLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvUHJvZ3Jlc3NCYXIjY29uZmlnLWh0bWwpXG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5XaWRnZXR9IHdpZGdldCBUaGUgY2FsbGluZyBXaWRnZXRcbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgICAqL1xuICAgIGh0bWwgPyA6IHN0cmluZ3woKHdpZGdldDogV2lkZ2V0KSA9PiBzdHJpbmcpfERvbUNvbmZpZ3xEb21Db25maWdbXXxWdWVDb25maWdcbiAgICAvKipcbiAgICAgKiBUaGUgQ1NTIGNsYXNzKGVzKSB0byBhZGQgd2hlbiBIVE1MIGNvbnRlbnQgaXMgYmVpbmcgYXBwbGllZCB0byB0aGlzIHdpZGdldC5cbiAgICAgKi9cbiAgICBodG1sQ2xzID8gOiBzdHJpbmd8b2JqZWN0XG4gICAgLyoqXG4gICAgICogV2lkZ2V0IGlkLCBpZiBub3Qgc3BlY2lmaWVkIG9uZSB3aWxsIGJlIGdlbmVyYXRlZC4gQWxzbyB1c2VkIGZvciBsb29rdXBzIHRocm91Z2ggV2lkZ2V0LmdldEJ5SWRcbiAgICAgKi9cbiAgICBpZCA/IDogc3RyaW5nXG4gICAgLyoqXG4gICAgICogRGV0ZXJtaW5lcyBpZiB0aGUgd2lkZ2V0cyByZWFkLW9ubHkgc3RhdGUgc2hvdWxkIGJlIGNvbnRyb2xsZWQgYnkgaXRzIHBhcmVudC5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1Byb2dyZXNzQmFyI2NvbmZpZy1pZ25vcmVQYXJlbnRSZWFkT25seSlcbiAgICAgKi9cbiAgICBpZ25vcmVQYXJlbnRSZWFkT25seSA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIEVsZW1lbnQgKG9yIGVsZW1lbnQgaWQpIHRvIGluc2VydCB0aGlzIHdpZGdldCBiZWZvcmUuIElmIHByb3ZpZGVkLCBbYXBwZW5kVG9dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9XaWRnZXQjY29uZmlnLWFwcGVuZFRvKSBjb25maWcgaXMgaWdub3JlZC5cbiAgICAgKi9cbiAgICBpbnNlcnRCZWZvcmUgPyA6IEhUTUxFbGVtZW50fHN0cmluZ1xuICAgIC8qKlxuICAgICAqIEVsZW1lbnQgKG9yIGVsZW1lbnQgaWQpIHRvIGFwcGVuZCB0aGlzIHdpZGdldCBlbGVtZW50IHRvLCBhcyBhIGZpcnN0IGNoaWxkLiBJZiBwcm92aWRlZCwgW2FwcGVuZFRvXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvV2lkZ2V0I2NvbmZpZy1hcHBlbmRUbykgY29uZmlnIGlzIGlnbm9yZWQuXG4gICAgICovXG4gICAgaW5zZXJ0Rmlyc3QgPyA6IEhUTUxFbGVtZW50fHN0cmluZ1xuICAgIC8qKlxuICAgICAqIEFuIG9iamVjdCB3aG9zZSBrZXlzIGFyZSB0aGUgW2tleV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0tleWJvYXJkRXZlbnQva2V5KSBuYW1lXG4gICAgICogYW5kIG9wdGlvbmFsIG1vZGlmaWVyIHByZWZpeGVzOiBgJ0N0cmwrJ2AsIGAnQWx0KydgLCBgJ01ldGErJ2AsIGFuZCBgJ1NoaWZ0KydgIChjYXNlLWluc2Vuc2l0aXZlKS4gVGhlIHZhbHVlc1xuICAgICAqIGFyZSB0aGUgbmFtZSBvZiB0aGUgaW5zdGFuY2UgbWV0aG9kIHRvIGNhbGwgd2hlbiB0aGUga2V5c3Ryb2tlIGlzIHJlY2VpdmVkLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvUHJvZ3Jlc3NCYXIjY29uZmlnLWtleU1hcClcbiAgICAgKi9cbiAgICBrZXlNYXAgPyA6IFJlY29yZDxzdHJpbmcsIEtleU1hcENvbmZpZz5cbiAgICAvKipcbiAgICAgKiBUaGUgbGFiZWwgdGV4dCB0byBkaXNwbGF5IGF0IHRoZSB0b3AgbGVmdFxuICAgICAqL1xuICAgIGxhYmVsID8gOiBzdHJpbmdcbiAgICAvKipcbiAgICAgKiBUaGUgbGlzdGVuZXIgc2V0IGZvciB0aGlzIG9iamVjdC5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1Byb2dyZXNzQmFyI2NvbmZpZy1saXN0ZW5lcnMpXG4gICAgICovXG4gICAgbGlzdGVuZXJzID8gOiBQcm9ncmVzc0Jhckxpc3RlbmVyc1xuICAgIC8qKlxuICAgICAqIEEgY2xhc3MgdHJhbnNsYXRpb25zIG9mIHdoaWNoIGFyZSB1c2VkIGZvciB0cmFuc2xhdGluZyB0aGlzIGVudGl0eS5cbiAgICAgKiBUaGlzIGlzIG9mdGVuIHVzZWQgd2hlbiB0cmFuc2xhdGlvbnMgb2YgYW4gaXRlbSBhcmUgZGVmaW5lZCBvbiBpdHMgY29udGFpbmVyIGNsYXNzLlxuICAgICAqIEZvciBleGFtcGxlOlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvUHJvZ3Jlc3NCYXIjY29uZmlnLWxvY2FsZUNsYXNzKVxuICAgICAqL1xuICAgIGxvY2FsZUNsYXNzID8gOiB0eXBlb2YgQmFzZVxuICAgIC8qKlxuICAgICAqIFNldCB0byBgZmFsc2VgIHRvIGRpc2FibGUgbG9jYWxpemF0aW9uIG9mIHRoaXMgb2JqZWN0LlxuICAgICAqL1xuICAgIGxvY2FsaXphYmxlID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogTGlzdCBvZiBwcm9wZXJ0aWVzIHdoaWNoIHZhbHVlcyBzaG91bGQgYmUgdHJhbnNsYXRlZCBhdXRvbWF0aWNhbGx5IHVwb24gYSBsb2NhbGUgYXBwbHlpbmcuXG4gICAgICogSW4gY2FzZSB0aGVyZSBpcyBhIG5lZWQgdG8gbG9jYWxpemUgbm90IHR5cGljYWwgdmFsdWUgKG5vdCBhIFN0cmluZyB2YWx1ZSBvciBhIGZpZWxkIHdpdGggcmUtZGVmaW5lZCBzZXR0ZXIvZ2V0dGVyKSxcbiAgICAgKiB5b3UgY291bGQgdXNlICdsb2NhbGVLZXknIG1ldGEgY29uZmlndXJhdGlvbi5cbiAgICAgKiBFeGFtcGxlOlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvUHJvZ3Jlc3NCYXIjY29uZmlnLWxvY2FsaXphYmxlUHJvcGVydGllcylcbiAgICAgKi9cbiAgICBsb2NhbGl6YWJsZVByb3BlcnRpZXMgPyA6IHN0cmluZ1tdXG4gICAgLyoqXG4gICAgICogV2lkZ2V0J3MgbWFyZ2luLiBUaGlzIG1heSBiZSBjb25maWd1cmVkIGFzIGEgc2luZ2xlIG51bWJlciBvciBhIGBUUkJMYCBmb3JtYXQgc3RyaW5nLlxuICAgICAqIG51bWVyaWMtb25seSB2YWx1ZXMgYXJlIGludGVycHJldGVkIGFzIHBpeGVscy5cbiAgICAgKi9cbiAgICBtYXJnaW4gPyA6IG51bWJlcnxzdHJpbmdcbiAgICAvKipcbiAgICAgKiBUaGlzIGNvbmZpZyBvYmplY3QgY29udGFpbnMgdGhlIGRlZmF1bHRzIGZvciB0aGUgW01hc2tdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9NYXNrKSBjcmVhdGVkIGZvciB0aGVcbiAgICAgKiBbbWFza2VkXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvV2lkZ2V0I2NvbmZpZy1tYXNrZWQpIGNvbmZpZy4gQW55IHByb3BlcnRpZXMgc3BlY2lmaWVkIGluIHRoZSBgbWFza2VkYCBjb25maWcgd2lsbCBvdmVycmlkZSB0aGVzZVxuICAgICAqIHZhbHVlcy5cbiAgICAgKi9cbiAgICBtYXNrRGVmYXVsdHMgPyA6IE1hc2tDb25maWdcbiAgICAvKipcbiAgICAgKiBTZXQgdG8gYHRydWVgIHRvIGFwcGx5IHRoZSBkZWZhdWx0IG1hc2sgdG8gdGhlIHdpZGdldC4gQWx0ZXJuYXRpdmVseSwgdGhpcyBjYW4gYmUgdGhlIG1hc2sgbWVzc2FnZSBvciBhXG4gICAgICogW01hc2tdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9NYXNrKSBjb25maWcgb2JqZWN0LlxuICAgICAqL1xuICAgIG1hc2tlZCA/IDogYm9vbGVhbnxzdHJpbmd8TWFza0NvbmZpZ1xuICAgIC8qKlxuICAgICAqIE1heGltdW0gdmFsdWUgZm9yIHByb2dyZXNzIGNhbGN1bGF0aW9uLiBXaGVuIHNwZWNpZmllZCwgdmFsdWUgaXMgdHJlYXRlZCBhcyBhYnNvbHV0ZS5cbiAgICAgKi9cbiAgICBtYXggPyA6IG51bWJlclxuICAgIC8qKlxuICAgICAqIFRoZSBlbGVtZW50J3MgbWF4SGVpZ2h0LiBDYW4gYmUgZWl0aGVyIGEgU3RyaW5nIG9yIGEgTnVtYmVyICh3aGljaCB3aWxsIGhhdmUgJ3B4JyBhcHBlbmRlZCkuIE5vdGUgdGhhdFxuICAgICAqIGxpa2UgW2hlaWdodF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1dpZGdldCNjb25maWctaGVpZ2h0KSwgKnJlYWRpbmcqIHRoZSB2YWx1ZSB3aWxsIHJldHVybiB0aGUgbnVtZXJpYyB2YWx1ZSBpbiBwaXhlbHMuXG4gICAgICovXG4gICAgbWF4SGVpZ2h0ID8gOiBzdHJpbmd8bnVtYmVyXG4gICAgLyoqXG4gICAgICogKk9ubHkgdmFsaWQgaWYgdGhpcyBXaWRnZXQgaXMgW2Zsb2F0aW5nXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvV2lkZ2V0I2NvbmZpZy1mbG9hdGluZykuKlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvUHJvZ3Jlc3NCYXIjY29uZmlnLW1heGltaXplT25Nb2JpbGUpXG4gICAgICovXG4gICAgbWF4aW1pemVPbk1vYmlsZSA/IDogbnVtYmVyfHN0cmluZ1xuICAgIC8qKlxuICAgICAqIFRoZSBlbGVtZW50cyBtYXhXaWR0aC4gQ2FuIGJlIGVpdGhlciBhIFN0cmluZyBvciBhIE51bWJlciAod2hpY2ggd2lsbCBoYXZlICdweCcgYXBwZW5kZWQpLiBOb3RlIHRoYXRcbiAgICAgKiBsaWtlIFt3aWR0aF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1dpZGdldCNjb25maWctd2lkdGgpLCAqcmVhZGluZyogdGhlIHZhbHVlIHdpbGwgcmV0dXJuIHRoZSBudW1lcmljIHZhbHVlIGluIHBpeGVscy5cbiAgICAgKi9cbiAgICBtYXhXaWR0aCA/IDogc3RyaW5nfG51bWJlclxuICAgIC8qKlxuICAgICAqIFRoZSBlbGVtZW50J3MgbWluSGVpZ2h0LiBDYW4gYmUgZWl0aGVyIGEgU3RyaW5nIG9yIGEgTnVtYmVyICh3aGljaCB3aWxsIGhhdmUgJ3B4JyBhcHBlbmRlZCkuIE5vdGUgdGhhdFxuICAgICAqIGxpa2UgW2hlaWdodF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1dpZGdldCNjb25maWctaGVpZ2h0KSwgKnJlYWRpbmcqIHRoZSB2YWx1ZSB3aWxsIHJldHVybiB0aGUgbnVtZXJpYyB2YWx1ZSBpbiBwaXhlbHMuXG4gICAgICovXG4gICAgbWluSGVpZ2h0ID8gOiBzdHJpbmd8bnVtYmVyXG4gICAgLyoqXG4gICAgICogVGhlIGVsZW1lbnRzIG1pbldpZHRoLiBDYW4gYmUgZWl0aGVyIGEgU3RyaW5nIG9yIGEgTnVtYmVyICh3aGljaCB3aWxsIGhhdmUgJ3B4JyBhcHBlbmRlZCkuIE5vdGUgdGhhdFxuICAgICAqIGxpa2UgW3dpZHRoXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvV2lkZ2V0I2NvbmZpZy13aWR0aCksICpyZWFkaW5nKiB0aGUgdmFsdWUgd2lsbCByZXR1cm4gdGhlIG51bWVyaWMgdmFsdWUgaW4gcGl4ZWxzLlxuICAgICAqL1xuICAgIG1pbldpZHRoID8gOiBzdHJpbmd8bnVtYmVyXG4gICAgLyoqXG4gICAgICogV2hlbiB0aGlzIGlzIGNvbmZpZ3VyZWQgYXMgYHRydWVgIGEgW1Jlc2l6ZU9ic2VydmVyXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvUmVzaXplT2JzZXJ2ZXIpXG4gICAgICogaXMgdXNlZCB0byBtb25pdG9yIHRoaXMgZWxlbWVudCBmb3Igc2l6ZSBjaGFuZ2VzIGNhdXNlZCBieSBlaXRoZXIgc3R5bGUgbWFuaXB1bGF0aW9uLCBvciBieSBDU1NcbiAgICAgKiBsYXlvdXQuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9Qcm9ncmVzc0JhciNjb25maWctbW9uaXRvclJlc2l6ZSlcbiAgICAgKi9cbiAgICBtb25pdG9yUmVzaXplID8gOiBib29sZWFufHtcbiAgICAgICAgaW1tZWRpYXRlPzogYm9vbGVhblxuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgb3duaW5nIFdpZGdldCBvZiB0aGlzIFdpZGdldC4gSWYgdGhpcyBXaWRnZXQgaXMgZGlyZWN0bHkgY29udGFpbmVkICh0aGF0IGlzLCBpdCBpcyBvbmUgb2YgdGhlXG4gICAgICogW2l0ZW1zXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvQ29udGFpbmVyI3Byb3BlcnR5LWl0ZW1zKSBvZiBhIENvbnRhaW5lciksIHRoaXMgY29uZmlnIHdpbGwgYmUgaWdub3JlZC4gSW4gdGhpcyBjYXNlXG4gICAgICogdGhlIG93bmVyIGlzIDxzdHJvbmc+YWx3YXlzPC9zdHJvbmc+IHRoZSBlbmNhcHN1bGF0aW5nIENvbnRhaW5lci5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1Byb2dyZXNzQmFyI2NvbmZpZy1vd25lcilcbiAgICAgKi9cbiAgICBvd25lciA/IDogV2lkZ2V0fGFueVxuICAgIC8qKlxuICAgICAqIFNldCB0byBgdHJ1ZWAgd2hlbiBhIHdpZGdldCBpcyByZW5kZXJlZCBpbnRvIGFub3RoZXIgd2lkZ2V0J3MgW2NvbnRlbnRFbGVtZW50XShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvV2lkZ2V0I3Byb3BlcnR5LWNvbnRlbnRFbGVtZW50KSwgYnV0IG11c3RcbiAgICAgKiBub3QgcGFydGljaXBhdGUgaW4gdGhlIHN0YW5kYXJkIGxheW91dCBvZiB0aGF0IHdpZGdldCwgYW5kIG11c3QgYmUgcG9zaXRpb25lZCByZWxhdGl2ZWx5IHRvIHRoYXRcbiAgICAgKiB3aWRnZXQncyBbY29udGVudEVsZW1lbnRdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9XaWRnZXQjcHJvcGVydHktY29udGVudEVsZW1lbnQpLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvUHJvZ3Jlc3NCYXIjY29uZmlnLXBvc2l0aW9uZWQpXG4gICAgICovXG4gICAgcG9zaXRpb25lZCA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIFByZXZlbnQgdG9vbHRpcCBmcm9tIGJlaW5nIGRpc3BsYXllZCBvbiB0b3VjaCBkZXZpY2VzLiBVc2VmdWwgZm9yIGV4YW1wbGUgZm9yIGJ1dHRvbnMgdGhhdCBkaXNwbGF5IGFcbiAgICAgKiBtZW51IG9uIGNsaWNrIGV0Yywgc2luY2UgdGhlIHRvb2x0aXAgd291bGQgYmUgZGlzcGxheWVkIGF0IHRoZSBzYW1lIHRpbWUuXG4gICAgICovXG4gICAgcHJldmVudFRvb2x0aXBPblRvdWNoID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGlzIHdpZGdldCBpcyByZWFkLW9ubHkuICBUaGlzIGlzIG9ubHkgdmFsaWQgaWYgdGhlIHdpZGdldCBpcyBhbiBpbnB1dFxuICAgICAqIGZpZWxkLCA8c3Ryb25nPm9yIGNvbnRhaW5zIGlucHV0IGZpZWxkcyBhdCBhbnkgZGVwdGg8L3N0cm9uZz4uXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9Qcm9ncmVzc0JhciNjb25maWctcmVhZE9ubHkpXG4gICAgICovXG4gICAgcmVhZE9ubHkgPyA6IGJvb2xlYW5cbiAgICByZWxheVN0b3JlRXZlbnRzID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogQ29uZmlndXJlIGFzIGB0cnVlYCB0byBoYXZlIHRoZSBjb21wb25lbnQgZGlzcGxheSBhIHRyYW5zbHVjZW50IHJpcHBsZSB3aGVuIGl0c1xuICAgICAqIFtmb2N1c0VsZW1lbnRdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9XaWRnZXQjcHJvcGVydHktZm9jdXNFbGVtZW50KSwgb3IgW2VsZW1lbnRdKCNDb3JlL3dpZGdldC9XaWRnZXQjcHJvcGVydHktZWxlbWVudCkgaXMgdGFwcGVkIDxlbT5pZiB0aGVcbiAgICAgKiBjdXJyZW50IHRoZW1lIHN1cHBvcnRzIHJpcHBsZXM8L2VtPi4gT3V0IG9mIHRoZSBib3gsIG9ubHkgdGhlIE1hdGVyaWFsIHRoZW1lIHN1cHBvcnRzIHJpcHBsZXMuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9Qcm9ncmVzc0JhciNjb25maWctcmlwcGxlKVxuICAgICAqL1xuICAgIHJpcHBsZSA/IDogYm9vbGVhbnx7XG4gICAgICAgIGRlbGVnYXRlPzogc3RyaW5nXG4gICAgICAgIGNvbG9yPzogc3RyaW5nXG4gICAgICAgIHJhZGl1cz86IG51bWJlclxuICAgICAgICBjbGlwPzogc3RyaW5nXG4gICAgfVxuICAgIC8qKlxuICAgICAqIElmIHlvdSBhcmUgcmVuZGVyaW5nIHRoaXMgd2lkZ2V0IHRvIGEgc2hhZG93IHJvb3QgaW5zaWRlIGEgd2ViIGNvbXBvbmVudCwgc2V0IHRoaXMgY29uZmlnIHRvIHRoZSBzaGFkb3dSb290LiBJZiBub3QgaW5zaWRlIGEgd2ViIGNvbXBvbmVudCwgc2V0IGl0IHRvIGBkb2N1bWVudC5ib2R5YFxuICAgICAqL1xuICAgIHJvb3RFbGVtZW50ID8gOiBTaGFkb3dSb290fEhUTUxFbGVtZW50XG4gICAgLyoqXG4gICAgICogVGhpcyBtYXkgYmUgY29uZmlndXJlZCBhcyBgdHJ1ZWAgdG8gbWFrZSB0aGUgd2lkZ2V0J3MgZWxlbWVudCB1c2UgdGhlIGBkaXJlY3Rpb246cnRsYCBzdHlsZS5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1Byb2dyZXNzQmFyI2NvbmZpZy1ydGwpXG4gICAgICovXG4gICAgcnRsID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogU3BlY2lmaWVzIHdoZXRoZXIgKGFuZCBvcHRpb25hbGx5IGluIHdoaWNoIGF4ZXMpIGEgV2lkZ2V0IG1heSBzY3JvbGwuIGB0cnVlYCBtZWFucyB0aGlzIHdpZGdldCBtYXkgc2Nyb2xsXG4gICAgICogaW4gYm90aCBheGVzLiBNYXkgYmUgYW4gb2JqZWN0IGNvbnRhaW5pbmcgYm9vbGVhbiBgb3ZlcmZsb3dYYCBhbmQgYG92ZXJmbG93WWAgcHJvcGVydGllcyB3aGljaCBhcmVcbiAgICAgKiBhcHBsaWVkIHRvIENTUyBzdHlsZSBwcm9wZXJ0aWVzIGBvdmVyZmxvd1hgIGFuZCBgb3ZlcmZsb3dZYC4gSWYgdGhleSBhcmUgYm9vbGVhbiwgdGhleSBhcmUgdHJhbnNsYXRlZCB0b1xuICAgICAqIENTUyBvdmVyZmxvdyBwcm9wZXJ0aWVzIHRodXM6XG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9Qcm9ncmVzc0JhciNjb25maWctc2Nyb2xsYWJsZSlcbiAgICAgKi9cbiAgICBzY3JvbGxhYmxlID8gOiBib29sZWFufFNjcm9sbGVyQ29uZmlnfFNjcm9sbGVyXG4gICAgLyoqXG4gICAgICogRGVmaW5lcyB3aGF0IHRvIGRvIGlmIGRvY3VtZW50IGlzIHNjcm9sbGVkIHdoaWxlIFdpZGdldCBpcyB2aXNpYmxlIChvbmx5IHJlbGV2YW50IHdoZW4gZmxvYXRpbmcgaXMgc2V0IHRvIGB0cnVlYCkuXG4gICAgICogVmFsaWQgdmFsdWVzOiDCtG51bGzCtDogZG8gbm90aGluZywgwrRoaWRlwrQ6IGhpZGUgdGhlIHdpZGdldCBvciDCtHJlYWxpZ27CtDogcmVhbGlnbiB0byB0aGUgdGFyZ2V0IGlmIHBvc3NpYmxlLlxuICAgICAqL1xuICAgIHNjcm9sbEFjdGlvbiA/IDogJ2hpZGUnfCdyZWFsaWduJ3xudWxsXG4gICAgLyoqXG4gICAgICogKk9ubHkgdmFsaWQgaWYgdGhpcyBXaWRnZXQgaXMgW2Zsb2F0aW5nXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvV2lkZ2V0I2NvbmZpZy1mbG9hdGluZykuKlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvUHJvZ3Jlc3NCYXIjY29uZmlnLXNob3dBbmltYXRpb24pXG4gICAgICovXG4gICAgc2hvd0FuaW1hdGlvbiA/IDogYm9vbGVhbnxvYmplY3RcbiAgICAvKipcbiAgICAgKiBTZXQgdG8gYGZhbHNlYCB0byBub3Qgc2hvdyB0aGUgdG9vbHRpcCB3aGVuIHRoaXMgd2lkZ2V0IGlzIFtkaXNhYmxlZF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1dpZGdldCNwcm9wZXJ0eS1kaXNhYmxlZClcbiAgICAgKi9cbiAgICBzaG93VG9vbHRpcFdoZW5EaXNhYmxlZCA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIFByb2dyYW1tYXRpYyBjb250cm9sIG92ZXIgaG93IG1hbnkgY29sdW1ucyB0byBzcGFuIHdoZW4gdXNlZCBpbiBhIGdyaWQgbGF5b3V0LlxuICAgICAqL1xuICAgIHNwYW4gPyA6IG51bWJlclxuICAgIC8qKlxuICAgICAqIEEgY29uZmlndXJhdGlvbiBmb3IgdGhlIFt0YWJdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9UYWIpIGNyZWF0ZWQgZm9yIHRoaXMgd2lkZ2V0IHdoZW4gaXQgaXMgcGxhY2VkIGluIGFcbiAgICAgKiBbVGFiUGFuZWxdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9UYWJQYW5lbCkuIEZvciBleGFtcGxlLCB0aGlzIGNvbmZpZyBjYW4gYmUgdXNlZCB0byBjb250cm9sIHRoZSBpY29uIG9mIHRoZSBgdGFiYCBmb3JcbiAgICAgKiB0aGlzIHdpZGdldDpcbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1Byb2dyZXNzQmFyI2NvbmZpZy10YWIpXG4gICAgICovXG4gICAgdGFiID8gOiBib29sZWFufFRhYkNvbmZpZ1xuICAgIC8qKlxuICAgICAqIFRoZSB0YWcgbmFtZSBvZiB0aGlzIFdpZGdldCdzIHJvb3QgZWxlbWVudFxuICAgICAqL1xuICAgIHRhZyA/IDogc3RyaW5nXG4gICAgLyoqXG4gICAgICogVGV4dCBhbGlnbm1lbnQ6ICdsZWZ0JywgJ2NlbnRlcicgb3IgJ3JpZ2h0Jy4gQWxzbyBhY2NlcHRzIGRpcmVjdGlvbiBuZXV0cmFsICdzdGFydCcgYW5kICdlbmQnLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvUHJvZ3Jlc3NCYXIjY29uZmlnLXRleHRBbGlnbilcbiAgICAgKi9cbiAgICB0ZXh0QWxpZ24gPyA6ICdsZWZ0J3wnY2VudGVyJ3wncmlnaHQnfCdzdGFydCd8J2VuZCdcbiAgICAvKipcbiAgICAgKiBBIHRpdGxlIHRvIGRpc3BsYXkgZm9yIHRoZSB3aWRnZXQuIE9ubHkgaW4gZWZmZWN0IHdoZW4gaW5zaWRlIGEgY29udGFpbmVyIHRoYXQgdXNlcyBpdCAoc3VjaCBhcyBUYWJQYW5lbClcbiAgICAgKi9cbiAgICB0aXRsZSA/IDogc3RyaW5nXG4gICAgLyoqXG4gICAgICogVG9vbHRpcCBmb3IgdGhlIHdpZGdldCwgZWl0aGVyIGFzIGEgc3RyaW5nIG9yIGFzIGEgVG9vbHRpcCBjb25maWcgb2JqZWN0LlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvUHJvZ3Jlc3NCYXIjY29uZmlnLXRvb2x0aXApXG4gICAgICovXG4gICAgdG9vbHRpcCA/IDogc3RyaW5nfFRvb2x0aXBDb25maWd8bnVsbFxuICAgIHR5cGUgPyA6ICdwcm9ncmVzc2JhcidcbiAgICAvKipcbiAgICAgKiBDdXN0b20gQ1NTIGNsYXNzIG5hbWUgc3VmZml4ZXMgdG8gYXBwbHkgdG8gdGhlIGVsZW1lbnRzIHJlbmRlcmVkIGJ5IHRoaXMgd2lkZ2V0LiBUaGlzIG1heSBiZSBzcGVjaWZpZWRcbiAgICAgKiBhcyBhIHNwYWNlIHNlcGFyYXRlZCBzdHJpbmcsIGFuIGFycmF5IG9mIHN0cmluZ3MsIG9yIGFzIGFuIG9iamVjdCBpbiB3aGljaCBwcm9wZXJ0eSBuYW1lcyB3aXRoIHRydXRoeVxuICAgICAqIHZhbHVlcyBhcmUgdXNlZCBhcyB0aGUgY2xhc3MgbmFtZXMuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9Qcm9ncmVzc0JhciNjb25maWctdWkpXG4gICAgICovXG4gICAgdWkgPyA6IHN0cmluZ3xvYmplY3RcbiAgICAvKipcbiAgICAgKiBQcm9ncmVzcyB2YWx1ZS4gSWYgbWF4IGlzIHNwZWNpZmllZCwgdGhpcyBpcyBhbiBhYnNvbHV0ZSB2YWx1ZSAoZS5nLiwgOCBvdXQgb2YgMTApLlxuICAgICAqIElmIG1heCBpcyBub3Qgc3BlY2lmaWVkLCB0aGlzIHNob3VsZCBiZSBiZXR3ZWVuIDAgYW5kIDEgKGUuZy4sIDAuNSBmb3IgNTAlKVxuICAgICAqL1xuICAgIHZhbHVlID8gOiBudW1iZXJcbiAgICAvKipcbiAgICAgKiBUZW1wbGF0ZSBmdW5jdGlvbiB0aGF0IGNhbiBiZSB1c2VkIHRvIGN1c3RvbWl6ZSB0aGUgZGlzcGxheWVkIHZhbHVlXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlIFRoZSB2YWx1ZSB0byBwcm92aWRlIGEgdGV4dHVhbCB2YWx1ZSBmb3JcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gbWF4IFRoZSBtYXggdmFsdWUgb2YgdGhlIHByb2dyZXNzIGJhclxuICAgICAqIEByZXR1cm5zIHtzdHJpbmcsbnVtYmVyLHZvaWR9XG4gICAgICovXG4gICAgdmFsdWVSZW5kZXJlciA/IDogKHZhbHVlOiBudW1iZXIsIG1heDogbnVtYmVyKSA9PiBzdHJpbmd8bnVtYmVyfHZvaWRcbiAgICAvKipcbiAgICAgKiBUaGUgdmFsdWUgdGV4dCB0byBkaXNwbGF5IGF0IHRoZSB0b3AgcmlnaHRcbiAgICAgKiBJZiBub3Qgc3BlY2lmaWVkIGFuZCBtYXggaXMgcHJvdmlkZWQsIHdpbGwgYXV0by1nZW5lcmF0ZSBhcyBcInZhbHVlL21heFwiXG4gICAgICovXG4gICAgdmFsdWVUZXh0ID8gOiBzdHJpbmdcbiAgICAvKipcbiAgICAgKiBBIHdpZGdldHMgd2VpZ2h0IGRldGVybWluZXMgaXRzIHBvc2l0aW9uIGFtb25nIHNpYmxpbmdzIHdoZW4gYWRkZWQgdG8gYSBbQ29udGFpbmVyXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvQ29udGFpbmVyKS5cbiAgICAgKiBIaWdoZXIgd2VpZ2h0cyBnbyBmdXJ0aGVyIGRvd24uXG4gICAgICovXG4gICAgd2VpZ2h0ID8gOiBudW1iZXJcbiAgICAvKipcbiAgICAgKiBXaWRnZXQncyB3aWR0aCwgdXNlZCB0byBzZXQgZWxlbWVudCBgc3R5bGUud2lkdGhgLiBFaXRoZXIgc3BlY2lmeSBhIHZhbGlkIHdpZHRoIHN0cmluZyBvciBhIG51bWJlciwgd2hpY2hcbiAgICAgKiB3aWxsIGdldCAncHgnIGFwcGVuZGVkLiBXZSByZWNvbW1lbmQgdXNpbmcgQ1NTIGFzIHRoZSBwcmltYXJ5IHdheSB0byBjb250cm9sIHdpZHRoLCBidXQgaW4gc29tZSBjYXNlc1xuICAgICAqIHRoaXMgY29uZmlnIGlzIGNvbnZlbmllbnQuXG4gICAgICovXG4gICAgd2lkdGggPyA6IHN0cmluZ3xudW1iZXJcbiAgICAvKipcbiAgICAgKiBUaGUgeCBwb3NpdGlvbiBmb3IgdGhlIHdpZGdldC5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1Byb2dyZXNzQmFyI2NvbmZpZy14KVxuICAgICAqL1xuICAgIHggPyA6IG51bWJlclxuICAgIC8qKlxuICAgICAqIFRoZSB5IHBvc2l0aW9uIGZvciB0aGUgd2lkZ2V0LlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvUHJvZ3Jlc3NCYXIjY29uZmlnLXkpXG4gICAgICovXG4gICAgeSA/IDogbnVtYmVyXG5cbn1cblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3IgOiAnYnJ5bnR1bS1wcm9ncmVzcy1iYXInLFxuICAgIHRlbXBsYXRlIDogJydcbn0pXG5leHBvcnQgY2xhc3MgQnJ5bnR1bVByb2dyZXNzQmFyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuXG4gICAgcHVibGljIHN0YXRpYyBpbnN0YW5jZUNsYXNzID0gUHJvZ3Jlc3NCYXI7XG5cbiAgICBwdWJsaWMgc3RhdGljIGluc3RhbmNlTmFtZSA9ICdQcm9ncmVzc0Jhcic7XG5cbiAgICBwcml2YXRlIHN0YXRpYyBicnludHVtRXZlbnRzOiBzdHJpbmdbXSA9IFtcbiAgICAgICAgJ29uQmVmb3JlRGVzdHJveScsXG4gICAgICAgICdvbkJlZm9yZUhpZGUnLFxuICAgICAgICAnb25CZWZvcmVTaG93JyxcbiAgICAgICAgJ29uQ2F0Y2hBbGwnLFxuICAgICAgICAnb25EZXN0cm95JyxcbiAgICAgICAgJ29uRWxlbWVudENyZWF0ZWQnLFxuICAgICAgICAnb25Gb2N1c0luJyxcbiAgICAgICAgJ29uRm9jdXNPdXQnLFxuICAgICAgICAnb25IaWRlJyxcbiAgICAgICAgJ29uUGFpbnQnLFxuICAgICAgICAnb25SZWFkT25seScsXG4gICAgICAgICdvblJlY29tcG9zZScsXG4gICAgICAgICdvblJlc2l6ZScsXG4gICAgICAgICdvblNob3cnXG4gICAgXTtcblxuICAgIHByaXZhdGUgc3RhdGljIGJyeW50dW1GZWF0dXJlTmFtZXM6IHN0cmluZ1tdID0gW1xuXG4gICAgXTtcblxuICAgIHByaXZhdGUgc3RhdGljIGJyeW50dW1Db25maWdzOiBzdHJpbmdbXSA9IEJyeW50dW1Qcm9ncmVzc0JhckNvbXBvbmVudC5icnludHVtRmVhdHVyZU5hbWVzLmNvbmNhdChbXG4gICAgICAgICdhZG9wdCcsXG4gICAgICAgICdhbGlnbicsXG4gICAgICAgICdhbGlnblNlbGYnLFxuICAgICAgICAnYW5jaG9yJyxcbiAgICAgICAgJ2FwcGVuZFRvJyxcbiAgICAgICAgJ2FyaWFEZXNjcmlwdGlvbicsXG4gICAgICAgICdhcmlhTGFiZWwnLFxuICAgICAgICAnYnViYmxlRXZlbnRzJyxcbiAgICAgICAgJ2NhbGxPbkZ1bmN0aW9ucycsXG4gICAgICAgICdjYXRjaEV2ZW50SGFuZGxlckV4Y2VwdGlvbnMnLFxuICAgICAgICAnY2VudGVyZWQnLFxuICAgICAgICAnY2xzJyxcbiAgICAgICAgJ2NvbG9yJyxcbiAgICAgICAgJ2NvbHVtbicsXG4gICAgICAgICdjb25maWcnLFxuICAgICAgICAnY29uc3RyYWluVG8nLFxuICAgICAgICAnY29udGVudCcsXG4gICAgICAgICdjb250ZW50RWxlbWVudENscycsXG4gICAgICAgICdkYXRhRmllbGQnLFxuICAgICAgICAnZGF0YXNldCcsXG4gICAgICAgICdkZWZhdWx0QmluZFByb3BlcnR5JyxcbiAgICAgICAgJ2RldGVjdENTU0NvbXBhdGliaWxpdHlJc3N1ZXMnLFxuICAgICAgICAnZGlzYWJsZWQnLFxuICAgICAgICAnZG9jaycsXG4gICAgICAgICdkcmFnZ2FibGUnLFxuICAgICAgICAnZWxlbWVudEF0dHJpYnV0ZXMnLFxuICAgICAgICAnZXh0cmFEYXRhJyxcbiAgICAgICAgJ2ZsZXgnLFxuICAgICAgICAnZmxvYXRpbmcnLFxuICAgICAgICAnaGVpZ2h0JyxcbiAgICAgICAgJ2hpZGRlbicsXG4gICAgICAgICdoaWRlQW5pbWF0aW9uJyxcbiAgICAgICAgJ2h0bWwnLFxuICAgICAgICAnaHRtbENscycsXG4gICAgICAgICdpZCcsXG4gICAgICAgICdpZ25vcmVQYXJlbnRSZWFkT25seScsXG4gICAgICAgICdpbnNlcnRCZWZvcmUnLFxuICAgICAgICAnaW5zZXJ0Rmlyc3QnLFxuICAgICAgICAna2V5TWFwJyxcbiAgICAgICAgJ2xhYmVsJyxcbiAgICAgICAgJ2xpc3RlbmVycycsXG4gICAgICAgICdsb2NhbGVDbGFzcycsXG4gICAgICAgICdsb2NhbGl6YWJsZScsXG4gICAgICAgICdsb2NhbGl6YWJsZVByb3BlcnRpZXMnLFxuICAgICAgICAnbWFyZ2luJyxcbiAgICAgICAgJ21hc2tEZWZhdWx0cycsXG4gICAgICAgICdtYXNrZWQnLFxuICAgICAgICAnbWF4JyxcbiAgICAgICAgJ21heEhlaWdodCcsXG4gICAgICAgICdtYXhpbWl6ZU9uTW9iaWxlJyxcbiAgICAgICAgJ21heFdpZHRoJyxcbiAgICAgICAgJ21pbkhlaWdodCcsXG4gICAgICAgICdtaW5XaWR0aCcsXG4gICAgICAgICdtb25pdG9yUmVzaXplJyxcbiAgICAgICAgJ293bmVyJyxcbiAgICAgICAgJ3Bvc2l0aW9uZWQnLFxuICAgICAgICAncHJldmVudFRvb2x0aXBPblRvdWNoJyxcbiAgICAgICAgJ3JlYWRPbmx5JyxcbiAgICAgICAgJ3JlbGF5U3RvcmVFdmVudHMnLFxuICAgICAgICAncmlwcGxlJyxcbiAgICAgICAgJ3Jvb3RFbGVtZW50JyxcbiAgICAgICAgJ3J0bCcsXG4gICAgICAgICdzY3JvbGxhYmxlJyxcbiAgICAgICAgJ3Njcm9sbEFjdGlvbicsXG4gICAgICAgICdzaG93QW5pbWF0aW9uJyxcbiAgICAgICAgJ3Nob3dUb29sdGlwV2hlbkRpc2FibGVkJyxcbiAgICAgICAgJ3NwYW4nLFxuICAgICAgICAndGFiJyxcbiAgICAgICAgJ3RhZycsXG4gICAgICAgICd0ZXh0QWxpZ24nLFxuICAgICAgICAndGl0bGUnLFxuICAgICAgICAndG9vbHRpcCcsXG4gICAgICAgICd0eXBlJyxcbiAgICAgICAgJ3VpJyxcbiAgICAgICAgJ3ZhbHVlJyxcbiAgICAgICAgJ3ZhbHVlUmVuZGVyZXInLFxuICAgICAgICAndmFsdWVUZXh0JyxcbiAgICAgICAgJ3dlaWdodCcsXG4gICAgICAgICd3aWR0aCcsXG4gICAgICAgICd4JyxcbiAgICAgICAgJ3knXG4gICAgXSk7XG5cbiAgICBwcml2YXRlIHN0YXRpYyBicnludHVtQ29uZmlnc09ubHk6IHN0cmluZ1tdID0gW1xuICAgICAgICAnYWRvcHQnLFxuICAgICAgICAnYWxpZ24nLFxuICAgICAgICAnYW5jaG9yJyxcbiAgICAgICAgJ2FyaWFEZXNjcmlwdGlvbicsXG4gICAgICAgICdhcmlhTGFiZWwnLFxuICAgICAgICAnYnViYmxlRXZlbnRzJyxcbiAgICAgICAgJ2NlbnRlcmVkJyxcbiAgICAgICAgJ2NvbmZpZycsXG4gICAgICAgICdjb25zdHJhaW5UbycsXG4gICAgICAgICdjb250ZW50RWxlbWVudENscycsXG4gICAgICAgICdkYXRhRmllbGQnLFxuICAgICAgICAnZGVmYXVsdEJpbmRQcm9wZXJ0eScsXG4gICAgICAgICdkZXRlY3RDU1NDb21wYXRpYmlsaXR5SXNzdWVzJyxcbiAgICAgICAgJ2RvY2snLFxuICAgICAgICAnZHJhZ2dhYmxlJyxcbiAgICAgICAgJ2VsZW1lbnRBdHRyaWJ1dGVzJyxcbiAgICAgICAgJ2Zsb2F0aW5nJyxcbiAgICAgICAgJ2hpZGVBbmltYXRpb24nLFxuICAgICAgICAnaHRtbENscycsXG4gICAgICAgICdpZ25vcmVQYXJlbnRSZWFkT25seScsXG4gICAgICAgICdsaXN0ZW5lcnMnLFxuICAgICAgICAnbG9jYWxlQ2xhc3MnLFxuICAgICAgICAnbG9jYWxpemFibGUnLFxuICAgICAgICAnbG9jYWxpemFibGVQcm9wZXJ0aWVzJyxcbiAgICAgICAgJ21hc2tEZWZhdWx0cycsXG4gICAgICAgICdtYXNrZWQnLFxuICAgICAgICAnbW9uaXRvclJlc2l6ZScsXG4gICAgICAgICdvd25lcicsXG4gICAgICAgICdwb3NpdGlvbmVkJyxcbiAgICAgICAgJ3ByZXZlbnRUb29sdGlwT25Ub3VjaCcsXG4gICAgICAgICdyZWxheVN0b3JlRXZlbnRzJyxcbiAgICAgICAgJ3JpcHBsZScsXG4gICAgICAgICdyb290RWxlbWVudCcsXG4gICAgICAgICdzY3JvbGxBY3Rpb24nLFxuICAgICAgICAnc2hvd0FuaW1hdGlvbicsXG4gICAgICAgICdzaG93VG9vbHRpcFdoZW5EaXNhYmxlZCcsXG4gICAgICAgICd0YWInLFxuICAgICAgICAndGFnJyxcbiAgICAgICAgJ3RleHRBbGlnbicsXG4gICAgICAgICd0aXRsZScsXG4gICAgICAgICd0eXBlJyxcbiAgICAgICAgJ3VpJyxcbiAgICAgICAgJ3dlaWdodCdcbiAgICBdO1xuXG4gICAgcHJpdmF0ZSBzdGF0aWMgYnJ5bnR1bVByb3BzOiBzdHJpbmdbXSA9IEJyeW50dW1Qcm9ncmVzc0JhckNvbXBvbmVudC5icnludHVtRmVhdHVyZU5hbWVzLmNvbmNhdChbXG4gICAgICAgICdhbGlnblNlbGYnLFxuICAgICAgICAnYW5jaG9yU2l6ZScsXG4gICAgICAgICdhcHBlbmRUbycsXG4gICAgICAgICdjYWxsT25GdW5jdGlvbnMnLFxuICAgICAgICAnY2F0Y2hFdmVudEhhbmRsZXJFeGNlcHRpb25zJyxcbiAgICAgICAgJ2NscycsXG4gICAgICAgICdjb2xvcicsXG4gICAgICAgICdjb2x1bW4nLFxuICAgICAgICAnY29udGVudCcsXG4gICAgICAgICdkYXRhc2V0JyxcbiAgICAgICAgJ2Rpc2FibGVkJyxcbiAgICAgICAgJ2V4dHJhRGF0YScsXG4gICAgICAgICdmbGV4JyxcbiAgICAgICAgJ2ZvY3VzVmlzaWJsZScsXG4gICAgICAgICdoZWlnaHQnLFxuICAgICAgICAnaGlkZGVuJyxcbiAgICAgICAgJ2h0bWwnLFxuICAgICAgICAnaWQnLFxuICAgICAgICAnaW5zZXJ0QmVmb3JlJyxcbiAgICAgICAgJ2luc2VydEZpcnN0JyxcbiAgICAgICAgJ2tleU1hcCcsXG4gICAgICAgICdsYWJlbCcsXG4gICAgICAgICdtYXJnaW4nLFxuICAgICAgICAnbWF4JyxcbiAgICAgICAgJ21heEhlaWdodCcsXG4gICAgICAgICdtYXhpbWl6ZU9uTW9iaWxlJyxcbiAgICAgICAgJ21heFdpZHRoJyxcbiAgICAgICAgJ21pbkhlaWdodCcsXG4gICAgICAgICdtaW5XaWR0aCcsXG4gICAgICAgICdwYXJlbnQnLFxuICAgICAgICAncmVhZE9ubHknLFxuICAgICAgICAncnRsJyxcbiAgICAgICAgJ3Njcm9sbGFibGUnLFxuICAgICAgICAnc3BhbicsXG4gICAgICAgICd0b29sdGlwJyxcbiAgICAgICAgJ3ZhbHVlJyxcbiAgICAgICAgJ3ZhbHVlUmVuZGVyZXInLFxuICAgICAgICAndmFsdWVUZXh0JyxcbiAgICAgICAgJ3dpZHRoJyxcbiAgICAgICAgJ3gnLFxuICAgICAgICAneSdcbiAgICBdKTtcblxuICAgIHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZjtcbiAgICBwdWJsaWMgaW5zdGFuY2UhOiBQcm9ncmVzc0JhcjtcblxuICAgIHByaXZhdGUgYnJ5bnR1bUNvbmZpZyA9IHtcbiAgICAgICAgYWRvcHQgICAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgYXBwZW5kVG8gICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgaHJlZiAgICAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgYW5ndWxhckNvbXBvbmVudCA6IHRoaXMsXG4gICAgICAgIGZlYXR1cmVzICAgICAgICAgOiB7fSxcbiAgICAgICAgbGlzdGVuZXJzICAgICAgICA6IHt9XG4gICAgfTtcblxuICAgIGNvbnN0cnVjdG9yKGVsZW1lbnQ6IEVsZW1lbnRSZWYpIHtcbiAgICAgICAgdGhpcy5lbGVtZW50UmVmID0gZWxlbWVudDtcbiAgICB9XG5cbiAgICAvLyBDb25maWdzIG9ubHlcbiAgICBASW5wdXQoKSBhZG9wdCAgICAgICAgICAgICAgICAgICAgICAgICEgOiBIVE1MRWxlbWVudHxzdHJpbmc7XG4gICAgQElucHV0KCkgYWxpZ24gICAgICAgICAgICAgICAgICAgICAgICAhIDogQWxpZ25TcGVjfHN0cmluZztcbiAgICBASW5wdXQoKSBhbmNob3IgICAgICAgICAgICAgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGFyaWFEZXNjcmlwdGlvbiAgICAgICAgICAgICAgISA6IHN0cmluZztcbiAgICBASW5wdXQoKSBhcmlhTGFiZWwgICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmc7XG4gICAgQElucHV0KCkgYnViYmxlRXZlbnRzICAgICAgICAgICAgICAgICAhIDogb2JqZWN0O1xuICAgIEBJbnB1dCgpIGNlbnRlcmVkICAgICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgY29uZmlnICAgICAgICAgICAgICAgICAgICAgICAhIDogb2JqZWN0O1xuICAgIEBJbnB1dCgpIGNvbnN0cmFpblRvICAgICAgICAgICAgICAgICAgISA6IEhUTUxFbGVtZW50fFdpZGdldHxSZWN0YW5nbGU7XG4gICAgQElucHV0KCkgY29udGVudEVsZW1lbnRDbHMgICAgICAgICAgICAhIDogc3RyaW5nfG9iamVjdDtcbiAgICBASW5wdXQoKSBkYXRhRmllbGQgICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmc7XG4gICAgQElucHV0KCkgZGVmYXVsdEJpbmRQcm9wZXJ0eSAgICAgICAgICAhIDogc3RyaW5nO1xuICAgIEBJbnB1dCgpIGRldGVjdENTU0NvbXBhdGliaWxpdHlJc3N1ZXMgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgZG9jayAgICAgICAgICAgICAgICAgICAgICAgICAhIDogJ3RvcCd8J2JvdHRvbSd8J2xlZnQnfCdyaWdodCd8J3N0YXJ0J3wnZW5kJ3wnaGVhZGVyJ3wncHJlLWhlYWRlcid8b2JqZWN0O1xuICAgIEBJbnB1dCgpIGRyYWdnYWJsZSAgICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW58e1xuICAgICAgICBoYW5kbGVTZWxlY3Rvcj86IHN0cmluZ1xuICAgIH07XG4gICAgQElucHV0KCkgZWxlbWVudEF0dHJpYnV0ZXMgICAgICAgICAgICAhIDogUmVjb3JkPHN0cmluZywgc3RyaW5nfG51bGw+O1xuICAgIEBJbnB1dCgpIGZsb2F0aW5nICAgICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgaGlkZUFuaW1hdGlvbiAgICAgICAgICAgICAgICAhIDogYm9vbGVhbnxvYmplY3Q7XG4gICAgQElucHV0KCkgaHRtbENscyAgICAgICAgICAgICAgICAgICAgICAhIDogc3RyaW5nfG9iamVjdDtcbiAgICBASW5wdXQoKSBpZ25vcmVQYXJlbnRSZWFkT25seSAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGxpc3RlbmVycyAgICAgICAgICAgICAgICAgICAgISA6IFByb2dyZXNzQmFyTGlzdGVuZXJzO1xuICAgIEBJbnB1dCgpIGxvY2FsZUNsYXNzICAgICAgICAgICAgICAgICAgISA6IHR5cGVvZiBCYXNlO1xuICAgIEBJbnB1dCgpIGxvY2FsaXphYmxlICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgbG9jYWxpemFibGVQcm9wZXJ0aWVzICAgICAgICAhIDogc3RyaW5nW107XG4gICAgQElucHV0KCkgbWFza0RlZmF1bHRzICAgICAgICAgICAgICAgICAhIDogTWFza0NvbmZpZztcbiAgICBASW5wdXQoKSBtYXNrZWQgICAgICAgICAgICAgICAgICAgICAgICEgOiBib29sZWFufHN0cmluZ3xNYXNrQ29uZmlnO1xuICAgIEBJbnB1dCgpIG1vbml0b3JSZXNpemUgICAgICAgICAgICAgICAgISA6IGJvb2xlYW58e1xuICAgICAgICBpbW1lZGlhdGU/OiBib29sZWFuXG4gICAgfTtcbiAgICBASW5wdXQoKSBvd25lciAgICAgICAgICAgICAgICAgICAgICAgICEgOiBXaWRnZXR8YW55O1xuICAgIEBJbnB1dCgpIHBvc2l0aW9uZWQgICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgcHJldmVudFRvb2x0aXBPblRvdWNoICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSByZWxheVN0b3JlRXZlbnRzICAgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIHJpcHBsZSAgICAgICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW58e1xuICAgICAgICBkZWxlZ2F0ZT86IHN0cmluZ1xuICAgICAgICBjb2xvcj86IHN0cmluZ1xuICAgICAgICByYWRpdXM/OiBudW1iZXJcbiAgICAgICAgY2xpcD86IHN0cmluZ1xuICAgIH07XG4gICAgQElucHV0KCkgcm9vdEVsZW1lbnQgICAgICAgICAgICAgICAgICAhIDogU2hhZG93Um9vdHxIVE1MRWxlbWVudDtcbiAgICBASW5wdXQoKSBzY3JvbGxBY3Rpb24gICAgICAgICAgICAgICAgICEgOiAnaGlkZSd8J3JlYWxpZ24nfG51bGw7XG4gICAgQElucHV0KCkgc2hvd0FuaW1hdGlvbiAgICAgICAgICAgICAgICAhIDogYm9vbGVhbnxvYmplY3Q7XG4gICAgQElucHV0KCkgc2hvd1Rvb2x0aXBXaGVuRGlzYWJsZWQgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSB0YWIgICAgICAgICAgICAgICAgICAgICAgICAgICEgOiBib29sZWFufFRhYkNvbmZpZztcbiAgICBASW5wdXQoKSB0YWcgICAgICAgICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmc7XG4gICAgQElucHV0KCkgdGV4dEFsaWduICAgICAgICAgICAgICAgICAgICAhIDogJ2xlZnQnfCdjZW50ZXInfCdyaWdodCd8J3N0YXJ0J3wnZW5kJztcbiAgICBASW5wdXQoKSB0aXRsZSAgICAgICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmc7XG4gICAgQElucHV0KCkgdHlwZSAgICAgICAgICAgICAgICAgICAgICAgICAhIDogJ3Byb2dyZXNzYmFyJztcbiAgICBASW5wdXQoKSB1aSAgICAgICAgICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmd8b2JqZWN0O1xuICAgIEBJbnB1dCgpIHdlaWdodCAgICAgICAgICAgICAgICAgICAgICAgISA6IG51bWJlcjtcblxuICAgIC8vIENvbmZpZ3MgYW5kIHByb3BlcnRpZXNcbiAgICBASW5wdXQoKSBhbGlnblNlbGYgICAgICAgICAgICAgICAgICAgISA6IHN0cmluZztcbiAgICBASW5wdXQoKSBhcHBlbmRUbyAgICAgICAgICAgICAgICAgICAgISA6IEhUTUxFbGVtZW50fHN0cmluZztcbiAgICBASW5wdXQoKSBjYWxsT25GdW5jdGlvbnMgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgY2F0Y2hFdmVudEhhbmRsZXJFeGNlcHRpb25zICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGNscyAgICAgICAgICAgICAgICAgICAgICAgICAhIDogc3RyaW5nfG9iamVjdDtcbiAgICBASW5wdXQoKSBjb2xvciAgICAgICAgICAgICAgICAgICAgICAgISA6IENvbG9yO1xuICAgIEBJbnB1dCgpIGNvbHVtbiAgICAgICAgICAgICAgICAgICAgICAhIDogbnVtYmVyO1xuICAgIEBJbnB1dCgpIGNvbnRlbnQgICAgICAgICAgICAgICAgICAgICAhIDogc3RyaW5nO1xuICAgIEBJbnB1dCgpIGRhdGFzZXQgICAgICAgICAgICAgICAgICAgICAhIDogb2JqZWN0fFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gICAgQElucHV0KCkgZGlzYWJsZWQgICAgICAgICAgICAgICAgICAgICEgOiBib29sZWFufCdpbmVydCc7XG4gICAgQElucHV0KCkgZXh0cmFEYXRhICAgICAgICAgICAgICAgICAgICEgOiBhbnk7XG4gICAgQElucHV0KCkgZmxleCAgICAgICAgICAgICAgICAgICAgICAgICEgOiBudW1iZXJ8c3RyaW5nO1xuICAgIEBJbnB1dCgpIGhlaWdodCAgICAgICAgICAgICAgICAgICAgICAhIDogbnVtYmVyfHN0cmluZztcbiAgICBASW5wdXQoKSBoaWRkZW4gICAgICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgaHRtbCAgICAgICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmd8KCh3aWRnZXQ6IFdpZGdldCkgPT4gc3RyaW5nKXxEb21Db25maWd8RG9tQ29uZmlnW118VnVlQ29uZmlnO1xuICAgIEBJbnB1dCgpIGlkICAgICAgICAgICAgICAgICAgICAgICAgICAhIDogc3RyaW5nO1xuICAgIEBJbnB1dCgpIGluc2VydEJlZm9yZSAgICAgICAgICAgICAgICAhIDogSFRNTEVsZW1lbnR8c3RyaW5nO1xuICAgIEBJbnB1dCgpIGluc2VydEZpcnN0ICAgICAgICAgICAgICAgICAhIDogSFRNTEVsZW1lbnR8c3RyaW5nO1xuICAgIEBJbnB1dCgpIGtleU1hcCAgICAgICAgICAgICAgICAgICAgICAhIDogUmVjb3JkPHN0cmluZywgS2V5TWFwQ29uZmlnPjtcbiAgICBASW5wdXQoKSBsYWJlbCAgICAgICAgICAgICAgICAgICAgICAgISA6IHN0cmluZztcbiAgICBASW5wdXQoKSBtYXJnaW4gICAgICAgICAgICAgICAgICAgICAgISA6IG51bWJlcnxzdHJpbmc7XG4gICAgQElucHV0KCkgbWF4ICAgICAgICAgICAgICAgICAgICAgICAgICEgOiBudW1iZXI7XG4gICAgQElucHV0KCkgbWF4SGVpZ2h0ICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmd8bnVtYmVyO1xuICAgIEBJbnB1dCgpIG1heGltaXplT25Nb2JpbGUgICAgICAgICAgICAhIDogbnVtYmVyfHN0cmluZztcbiAgICBASW5wdXQoKSBtYXhXaWR0aCAgICAgICAgICAgICAgICAgICAgISA6IHN0cmluZ3xudW1iZXI7XG4gICAgQElucHV0KCkgbWluSGVpZ2h0ICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmd8bnVtYmVyO1xuICAgIEBJbnB1dCgpIG1pbldpZHRoICAgICAgICAgICAgICAgICAgICAhIDogc3RyaW5nfG51bWJlcjtcbiAgICBASW5wdXQoKSByZWFkT25seSAgICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgcnRsICAgICAgICAgICAgICAgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIHNjcm9sbGFibGUgICAgICAgICAgICAgICAgICAhIDogU2Nyb2xsZXJ8Ym9vbGVhbnxTY3JvbGxlckNvbmZpZztcbiAgICBASW5wdXQoKSBzcGFuICAgICAgICAgICAgICAgICAgICAgICAgISA6IG51bWJlcjtcbiAgICBASW5wdXQoKSB0b29sdGlwICAgICAgICAgICAgICAgICAgICAgISA6IHN0cmluZ3xUb29sdGlwQ29uZmlnfG51bGw7XG4gICAgQElucHV0KCkgdmFsdWUgICAgICAgICAgICAgICAgICAgICAgICEgOiBudW1iZXI7XG4gICAgQElucHV0KCkgdmFsdWVSZW5kZXJlciAgICAgICAgICAgICAgICEgOiAodmFsdWU6IG51bWJlciwgbWF4OiBudW1iZXIpID0+IHN0cmluZ3xudW1iZXJ8dm9pZDtcbiAgICBASW5wdXQoKSB2YWx1ZVRleHQgICAgICAgICAgICAgICAgICAgISA6IHN0cmluZztcbiAgICBASW5wdXQoKSB3aWR0aCAgICAgICAgICAgICAgICAgICAgICAgISA6IG51bWJlcnxzdHJpbmc7XG4gICAgQElucHV0KCkgeCAgICAgICAgICAgICAgICAgICAgICAgICAgICEgOiBudW1iZXI7XG4gICAgQElucHV0KCkgeSAgICAgICAgICAgICAgICAgICAgICAgICAgICEgOiBudW1iZXI7XG5cbiAgICAvLyBQcm9wZXJ0aWVzIG9ubHlcbiAgICBASW5wdXQoKSBhbmNob3JTaXplICAgISA6IG51bWJlcltdO1xuICAgIEBJbnB1dCgpIGZvY3VzVmlzaWJsZSAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBwYXJlbnQgICAgICAgISA6IFdpZGdldDtcblxuICAgIC8vIEV2ZW50cyBlbWl0dGVyc1xuICAgIC8qKlxuICAgICAqIEZpcmVzIGJlZm9yZSBhbiBvYmplY3QgaXMgZGVzdHJveWVkLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0NvcmUuQmFzZX0gZXZlbnQuc291cmNlIFRoZSBPYmplY3QgdGhhdCBpcyBiZWluZyBkZXN0cm95ZWQuXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQmVmb3JlRGVzdHJveTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogQmFzZSB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogVHJpZ2dlcmVkIGJlZm9yZSBhIHdpZGdldCBpcyBoaWRkZW4uIFJldHVybiBgZmFsc2VgIHRvIHByZXZlbnQgdGhlIGFjdGlvbi5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5XaWRnZXR9IGV2ZW50LnNvdXJjZSBUaGUgd2lkZ2V0IGJlaW5nIGhpZGRlbi5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25CZWZvcmVIaWRlOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBXaWRnZXQgfSkgPT4gUHJvbWlzZTxib29sZWFuPnxib29sZWFufHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyZWQgYmVmb3JlIGEgd2lkZ2V0IGlzIHNob3duLiBSZXR1cm4gYGZhbHNlYCB0byBwcmV2ZW50IHRoZSBhY3Rpb24uXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuV2lkZ2V0LGFueX0gZXZlbnQuc291cmNlIFRoZSB3aWRnZXQgYmVpbmcgc2hvd25cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25CZWZvcmVTaG93OiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBXaWRnZXR8YW55IH0pID0+IFByb21pc2U8Ym9vbGVhbj58Ym9vbGVhbnx2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZXMgd2hlbiBhbnkgb3RoZXIgZXZlbnQgaXMgZmlyZWQgZnJvbSB0aGUgb2JqZWN0LlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvUHJvZ3Jlc3NCYXIjZXZlbnQtY2F0Y2hBbGwpXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7e1trZXk6IHN0cmluZ106IGFueSwgdHlwZTogc3RyaW5nfX0gZXZlbnQuZXZlbnQgVGhlIE9iamVjdCB0aGF0IGNvbnRhaW5zIGV2ZW50IGRldGFpbHNcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZXZlbnQuZXZlbnQudHlwZSBUaGUgdHlwZSBvZiB0aGUgZXZlbnQgd2hpY2ggaXMgY2F1Z2h0IGJ5IHRoZSBsaXN0ZW5lclxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkNhdGNoQWxsOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHtba2V5OiBzdHJpbmddOiBhbnksIHR5cGU6IHN0cmluZ30pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlcyB3aGVuIGFuIG9iamVjdCBpcyBkZXN0cm95ZWQuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7Q29yZS5CYXNlfSBldmVudC5zb3VyY2UgVGhlIE9iamVjdCB0aGF0IGlzIGJlaW5nIGRlc3Ryb3llZC5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25EZXN0cm95OiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBCYXNlIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyZWQgd2hlbiBhIHdpZGdldCdzIFtlbGVtZW50XShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvV2lkZ2V0I3Byb3BlcnR5LWVsZW1lbnQpIGlzIGF2YWlsYWJsZS5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZXZlbnQuZWxlbWVudCBUaGUgV2lkZ2V0J3MgZWxlbWVudC5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25FbGVtZW50Q3JlYXRlZDogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IGVsZW1lbnQ6IEhUTUxFbGVtZW50IH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIGZvY3VzIGVudGVycyB0aGlzIFdpZGdldC5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5XaWRnZXR9IGV2ZW50LnNvdXJjZSBUaGlzIFdpZGdldFxuICAgICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGV2ZW50LmZyb21FbGVtZW50IFRoZSBlbGVtZW50IHdoaWNoIGxvc3QgZm9jdXMuXG4gICAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZXZlbnQudG9FbGVtZW50IFRoZSBlbGVtZW50IHdoaWNoIGdhaW5lZCBmb2N1cy5cbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0LldpZGdldH0gZXZlbnQuZnJvbVdpZGdldCBUaGUgd2lkZ2V0IHdoaWNoIGxvc3QgZm9jdXMuXG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5XaWRnZXR9IGV2ZW50LnRvV2lkZ2V0IFRoZSB3aWRnZXQgd2hpY2ggZ2FpbmVkIGZvY3VzLlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gZXZlbnQuYmFja3dhcmRzIGB0cnVlYCBpZiB0aGUgYHRvRWxlbWVudGAgaXMgYmVmb3JlIHRoZSBgZnJvbUVsZW1lbnRgIGluIGRvY3VtZW50IG9yZGVyLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkZvY3VzSW46IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IFdpZGdldCwgZnJvbUVsZW1lbnQ6IEhUTUxFbGVtZW50LCB0b0VsZW1lbnQ6IEhUTUxFbGVtZW50LCBmcm9tV2lkZ2V0OiBXaWRnZXQsIHRvV2lkZ2V0OiBXaWRnZXQsIGJhY2t3YXJkczogYm9vbGVhbiB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiBmb2N1cyBleGl0cyB0aGlzIFdpZGdldCdzIG93bmVyc2hpcCB0cmVlLiBUaGlzIGlzIGRpZmZlcmVudCBmcm9tIGEgYGJsdXJgIGV2ZW50LlxuICAgICAqIGZvY3VzIG1vdmluZyBmcm9tIHdpdGhpbiB0aGlzIFdpZGdldCdzIG93bmVyc2hpcCB0cmVlLCBldmVuIGlmIHRoZXJlIGFyZSBmbG9hdGluZyB3aWRnZXRzXG4gICAgICogd2lsbCBub3QgdHJpZ2dlciB0aGlzIGV2ZW50LiBUaGlzIGlzIHdoZW4gZm9jdXMgZXhpdHMgdGhpcyB3aWRnZXQgY29tcGxldGVseS5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5XaWRnZXR9IGV2ZW50LnNvdXJjZSBUaGlzIFdpZGdldFxuICAgICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGV2ZW50LmZyb21FbGVtZW50IFRoZSBlbGVtZW50IHdoaWNoIGxvc3QgZm9jdXMuXG4gICAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZXZlbnQudG9FbGVtZW50IFRoZSBlbGVtZW50IHdoaWNoIGdhaW5lZCBmb2N1cy5cbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0LldpZGdldH0gZXZlbnQuZnJvbVdpZGdldCBUaGUgd2lkZ2V0IHdoaWNoIGxvc3QgZm9jdXMuXG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5XaWRnZXR9IGV2ZW50LnRvV2lkZ2V0IFRoZSB3aWRnZXQgd2hpY2ggZ2FpbmVkIGZvY3VzLlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gZXZlbnQuYmFja3dhcmRzIGB0cnVlYCBpZiB0aGUgYHRvRWxlbWVudGAgaXMgYmVmb3JlIHRoZSBgZnJvbUVsZW1lbnRgIGluIGRvY3VtZW50IG9yZGVyLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkZvY3VzT3V0OiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBXaWRnZXQsIGZyb21FbGVtZW50OiBIVE1MRWxlbWVudCwgdG9FbGVtZW50OiBIVE1MRWxlbWVudCwgZnJvbVdpZGdldDogV2lkZ2V0LCB0b1dpZGdldDogV2lkZ2V0LCBiYWNrd2FyZHM6IGJvb2xlYW4gfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIFRyaWdnZXJlZCBhZnRlciBhIHdpZGdldCB3YXMgaGlkZGVuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuV2lkZ2V0fSBldmVudC5zb3VyY2UgVGhlIHdpZGdldFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkhpZGU6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IFdpZGdldCB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogVHJpZ2dlcmVkIHdoZW4gYSB3aWRnZXQgd2hpY2ggaGFkIGJlZW4gaW4gYSBub24tdmlzaWJsZSBzdGF0ZSBmb3IgYW55IHJlYXNvblxuICAgICAqIGFjaGlldmVzIHZpc2liaWxpdHkuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9Qcm9ncmVzc0JhciNldmVudC1wYWludClcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5XaWRnZXR9IGV2ZW50LnNvdXJjZSBUaGUgd2lkZ2V0IGJlaW5nIHBhaW50ZWQuXG4gICAgICogQHBhcmFtIHtib29sZWFufSBldmVudC5maXJzdFBhaW50IGB0cnVlYCBpZiB0aGlzIGlzIHRoZSBmaXJzdCBwYWludC5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25QYWludDogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogV2lkZ2V0LCBmaXJzdFBhaW50OiBib29sZWFuIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIGEgV2lkZ2V0J3MgcmVhZCBvbmx5IHN0YXRlIGlzIHRvZ2dsZWRcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtib29sZWFufSBldmVudC5yZWFkT25seSBSZWFkIG9ubHkgb3Igbm90XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uUmVhZE9ubHk6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyByZWFkT25seTogYm9vbGVhbiB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogVGhpcyBldmVudCBpcyBmaXJlZCBhZnRlciBhIHdpZGdldCdzIGVsZW1lbnRzIGhhdmUgYmVlbiBzeW5jaHJvbml6ZWQgZHVlIHRvIGEgZGlyZWN0IG9yIGluZGlyZWN0IGNhbGxcbiAgICAgKiB0byBbcmVjb21wb3NlXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvV2lkZ2V0I2Z1bmN0aW9uLXJlY29tcG9zZSksIGlmIHRoaXMgcmVzdWx0cyBpbiBzb21lIGNoYW5nZSB0byB0aGUgd2lkZ2V0J3MgcmVuZGVyZWQgRE9NIGVsZW1lbnRzLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvblJlY29tcG9zZTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKCkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gdGhlIGVuY2Fwc3VsYXRpbmcgZWxlbWVudCBvZiBhIFdpZGdldCByZXNpemVzICpvbmx5IHdoZW4gW21vbml0b3JSZXNpemVdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9XaWRnZXQjY29uZmlnLW1vbml0b3JSZXNpemUpIGlzIGB0cnVlYCouXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuV2lkZ2V0fSBldmVudC5zb3VyY2UgVGhpcyBXaWRnZXRcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gZXZlbnQud2lkdGggVGhlIG5ldyB3aWR0aFxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBldmVudC5oZWlnaHQgVGhlIG5ldyBoZWlnaHRcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gZXZlbnQub2xkV2lkdGggVGhlIG9sZCB3aWR0aFxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBldmVudC5vbGRIZWlnaHQgVGhlIG9sZCBoZWlnaHRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25SZXNpemU6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IFdpZGdldCwgd2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIsIG9sZFdpZHRoOiBudW1iZXIsIG9sZEhlaWdodDogbnVtYmVyIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyZWQgYWZ0ZXIgYSB3aWRnZXQgaXMgc2hvd24uXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuV2lkZ2V0fSBldmVudC5zb3VyY2UgVGhlIHdpZGdldFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvblNob3c6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IFdpZGdldCB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYW5kIGFwcGVuZCB0aGUgdW5kZXJseWluZyB3aWRnZXRcbiAgICAgKi9cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgY29uc3RcbiAgICAgICAgICAgIG1lID0gdGhpcyxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBlbGVtZW50UmVmLFxuICAgICAgICAgICAgICAgIGJyeW50dW1Db25maWdcbiAgICAgICAgICAgIH0gPSBtZSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpbnN0YW5jZUNsYXNzLFxuICAgICAgICAgICAgICAgIGluc3RhbmNlTmFtZSxcbiAgICAgICAgICAgICAgICBicnludHVtQ29uZmlncyxcbiAgICAgICAgICAgICAgICBicnludHVtRXZlbnRzXG4gICAgICAgICAgICB9ID0gQnJ5bnR1bVByb2dyZXNzQmFyQ29tcG9uZW50O1xuXG4gICAgICAgIGJyeW50dW1Db25maWdzLmZpbHRlcihwcm9wID0+IHByb3AgaW4gdGhpcykuZm9yRWFjaChwcm9wID0+IHtcbiAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgIFdyYXBwZXJIZWxwZXIuYXBwbHlQcm9wVmFsdWUoYnJ5bnR1bUNvbmZpZywgcHJvcCwgdGhpc1twcm9wXSk7XG4gICAgICAgICAgICBpZiAoWydmZWF0dXJlcycsICdjb25maWcnXS5pbmNsdWRlcyhwcm9wKSkge1xuICAgICAgICAgICAgICAgIFdyYXBwZXJIZWxwZXIuZGV2V2FybmluZ0NvbmZpZ1Byb3AoaW5zdGFuY2VOYW1lLCBwcm9wKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgYnJ5bnR1bUV2ZW50cy5maWx0ZXIoZXZlbnQgPT4gdGhpc1tldmVudF0gJiYgdGhpc1tldmVudF0ub2JzZXJ2ZXJzLmxlbmd0aCA+IDApLmZvckVhY2goZXZlbnQgPT4ge1xuICAgICAgICAgICAgY29uc3RcbiAgICAgICAgICAgICAgICB1bmNhcGl0YWxpemUgPSAoc3RyOiBzdHJpbmcpID0+IHN0ci5jaGFyQXQoMCkudG9Mb3dlckNhc2UoKSArIHN0ci5zbGljZSgxKSxcbiAgICAgICAgICAgICAgICBldmVudE5hbWUgPSAoc3RyOiBzdHJpbmcpID0+IHVuY2FwaXRhbGl6ZShzdHIuc2xpY2UoMikpO1xuXG4gICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICBicnludHVtQ29uZmlnLmxpc3RlbmVyc1tldmVudE5hbWUoZXZlbnQpXSA9IGUgPT4ge1xuICAgICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgICAgICBtZVtldmVudF0uZW1pdChlKTtcbiAgICAgICAgICAgICAgICAvLyBFdmVudEVtaXR0ZXIgZG9lcyBub3QgcmV0dXJuIHZhbHVlcyBpbiB0aGUgbm9ybWFsIHdheSwgd29yayBhcm91bmQgaXQgYnkgc2V0dGluZyBgcmV0dXJuVmFsdWVgIGZsYWdcbiAgICAgICAgICAgICAgICAvLyBpbiBBbmd1bGFyIGxpc3RlbmVyc1xuICAgICAgICAgICAgICAgIHJldHVybiBlLnJldHVyblZhbHVlO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gSWYgY29tcG9uZW50IGhhcyBubyBjb250YWluZXIgc3BlY2lmaWVkIGluIGNvbmZpZyB0aGVuIHVzZSBhZG9wdCB0byBXcmFwcGVyJ3MgZWxlbWVudFxuICAgICAgICBjb25zdFxuICAgICAgICAgICAgY29udGFpbmVyUGFyYW0gPSBbXG4gICAgICAgICAgICAgICAgJ2Fkb3B0JyxcbiAgICAgICAgICAgICAgICAnYXBwZW5kVG8nLFxuICAgICAgICAgICAgICAgICdpbnNlcnRBZnRlcicsXG4gICAgICAgICAgICAgICAgJ2luc2VydEJlZm9yZSdcbiAgICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICBdLmZpbmQocHJvcCA9PiBicnludHVtQ29uZmlnW3Byb3BdKTtcbiAgICAgICAgaWYgKCFjb250YWluZXJQYXJhbSkge1xuICAgICAgICAgICAgaWYgKGluc3RhbmNlTmFtZSA9PT0gJ0J1dHRvbicgfHwgZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmdldFJvb3ROb2RlKCkgaW5zdGFuY2VvZiBTaGFkb3dSb290KSB7XG4gICAgICAgICAgICAgICAgLy8gQnV0dG9uIHNob3VsZCBhbHdheXMgYmUgPGE+IG9yIDxidXR0b24+IGluc2lkZSBvd25lciBlbGVtZW50XG4gICAgICAgICAgICAgICAgYnJ5bnR1bUNvbmZpZy5hcHBlbmRUbyA9IGVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGJyeW50dW1Db25maWcuYWRvcHQgPSBlbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBXcmFwcGVySGVscGVyLmRldldhcm5pbmdDb250YWluZXIoaW5zdGFuY2VOYW1lLCBjb250YWluZXJQYXJhbSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIG1lLmluc3RhbmNlID0gaW5zdGFuY2VOYW1lID09PSAnV2lkZ2V0JyA/IFdpZGdldC5jcmVhdGUoYnJ5bnR1bUNvbmZpZykgOiBuZXcgaW5zdGFuY2VDbGFzcyhicnludHVtQ29uZmlnKTtcblxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFdhdGNoIGZvciBjaGFuZ2VzXG4gICAgICogQHBhcmFtIGNoYW5nZXNcbiAgICAgKi9cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgICAgIGNvbnN0XG4gICAgICAgICAgICB7IGluc3RhbmNlIH0gPSB0aGlzLFxuICAgICAgICAgICAgeyBpbnN0YW5jZU5hbWUgfSA9IEJyeW50dW1Qcm9ncmVzc0JhckNvbXBvbmVudDtcbiAgICAgICAgaWYgKCFpbnN0YW5jZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIEl0ZXJhdGUgb3ZlciBhbGwgY2hhbmdlc1xuICAgICAgICBPYmplY3QuZW50cmllcyhjaGFuZ2VzKS5mb3JFYWNoKChbcHJvcCwgY2hhbmdlXSkgPT4ge1xuICAgICAgICAgICAgY29uc3RcbiAgICAgICAgICAgICAgICBuZXdWYWx1ZSA9IChjaGFuZ2UgYXMgU2ltcGxlQ2hhbmdlKS5jdXJyZW50VmFsdWUsXG4gICAgICAgICAgICAgICAgeyBpbnN0YW5jZSB9ID0gdGhpcyxcbiAgICAgICAgICAgICAgICB7IGJyeW50dW1Db25maWdzT25seSwgYnJ5bnR1bVByb3BzIH0gPSBCcnludHVtUHJvZ3Jlc3NCYXJDb21wb25lbnQ7XG4gICAgICAgICAgICBpZiAoYnJ5bnR1bVByb3BzLmluY2x1ZGVzKHByb3ApKSB7XG4gICAgICAgICAgICAgICAgV3JhcHBlckhlbHBlci5hcHBseVByb3BWYWx1ZShpbnN0YW5jZSwgcHJvcCwgbmV3VmFsdWUsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICBpZiAoYnJ5bnR1bUNvbmZpZ3NPbmx5LmluY2x1ZGVzKHByb3ApKSB7XG4gICAgICAgICAgICAgICAgICAgIFdyYXBwZXJIZWxwZXIuZGV2V2FybmluZ1VwZGF0ZVByb3AoaW5zdGFuY2VOYW1lLCBwcm9wKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERlc3Ryb3kgdGhlIGNvbXBvbmVudFxuICAgICAqL1xuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIGlmICh0aGlzLmluc3RhbmNlICYmIHRoaXMuaW5zdGFuY2UuZGVzdHJveSkge1xuICAgICAgICAgICAgdGhpcy5pbnN0YW5jZS5kZXN0cm95KCk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=
|