@bryntum/grid-angular 7.3.1 → 7.3.2
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/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-boolean-combo.component.js +1 -1
- package/esm2015/lib/bryntum-button-group.component.js +1 -1
- package/esm2015/lib/bryntum-button.component.js +1 -1
- package/esm2015/lib/bryntum-chat-panel.component.js +1 -1
- package/esm2015/lib/bryntum-checkbox-group.component.js +1 -1
- package/esm2015/lib/bryntum-checkbox.component.js +1 -1
- package/esm2015/lib/bryntum-checklist-filter-combo.component.js +1 -1
- package/esm2015/lib/bryntum-chip-view.component.js +1 -1
- package/esm2015/lib/bryntum-code-editor.component.js +1 -1
- package/esm2015/lib/bryntum-color-field.component.js +1 -1
- package/esm2015/lib/bryntum-combo.component.js +1 -1
- package/esm2015/lib/bryntum-container.component.js +1 -1
- package/esm2015/lib/bryntum-date-field.component.js +1 -1
- package/esm2015/lib/bryntum-date-picker.component.js +1 -1
- 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 +1 -1
- 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 +1 -1
- package/esm2015/lib/bryntum-field-filter-picker-group.component.js +1 -1
- package/esm2015/lib/bryntum-field-filter-picker.component.js +1 -1
- package/esm2015/lib/bryntum-field-set.component.js +1 -1
- package/esm2015/lib/bryntum-file-field.component.js +1 -1
- package/esm2015/lib/bryntum-file-picker.component.js +1 -1
- package/esm2015/lib/bryntum-filter-field.component.js +1 -1
- package/esm2015/lib/bryntum-grid-base.component.js +1 -1
- package/esm2015/lib/bryntum-grid-chart-designer.component.js +1 -1
- package/esm2015/lib/bryntum-grid-field-filter-picker-group.component.js +1 -1
- package/esm2015/lib/bryntum-grid-field-filter-picker.component.js +1 -1
- package/esm2015/lib/bryntum-grid.component.js +1 -1
- package/esm2015/lib/bryntum-group-bar.component.js +1 -1
- package/esm2015/lib/bryntum-hint.component.js +1 -1
- package/esm2015/lib/bryntum-label.component.js +1 -1
- package/esm2015/lib/bryntum-list.component.js +1 -1
- package/esm2015/lib/bryntum-menu.component.js +1 -1
- package/esm2015/lib/bryntum-month-picker.component.js +1 -1
- package/esm2015/lib/bryntum-number-field.component.js +1 -1
- package/esm2015/lib/bryntum-paging-toolbar.component.js +1 -1
- package/esm2015/lib/bryntum-panel.component.js +1 -1
- package/esm2015/lib/bryntum-password-field.component.js +1 -1
- package/esm2015/lib/bryntum-progress-bar.component.js +1 -1
- package/esm2015/lib/bryntum-radio-group.component.js +1 -1
- package/esm2015/lib/bryntum-radio.component.js +1 -1
- package/esm2015/lib/bryntum-slide-toggle.component.js +1 -1
- 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 +1 -1
- 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 +1 -1
- package/esm2015/lib/bryntum-time-picker.component.js +1 -1
- package/esm2015/lib/bryntum-toolbar.component.js +1 -1
- package/esm2015/lib/bryntum-tree-combo.component.js +1 -1
- package/esm2015/lib/bryntum-tree-grid.component.js +1 -1
- package/esm2015/lib/bryntum-widget.component.js +1 -1
- package/esm2015/lib/bryntum-year-picker.component.js +1 -1
- package/fesm2015/bryntum-grid-angular.js.map +1 -1
- package/lib/bryntum-a-i-filter-field.component.d.ts +6 -0
- package/lib/bryntum-boolean-combo.component.d.ts +6 -0
- package/lib/bryntum-button-group.component.d.ts +6 -0
- package/lib/bryntum-button.component.d.ts +6 -0
- package/lib/bryntum-chat-panel.component.d.ts +6 -0
- package/lib/bryntum-checkbox-group.component.d.ts +6 -0
- package/lib/bryntum-checkbox.component.d.ts +6 -0
- package/lib/bryntum-checklist-filter-combo.component.d.ts +6 -0
- package/lib/bryntum-chip-view.component.d.ts +10 -2
- package/lib/bryntum-code-editor.component.d.ts +6 -0
- package/lib/bryntum-color-field.component.d.ts +6 -0
- package/lib/bryntum-combo.component.d.ts +6 -0
- package/lib/bryntum-container.component.d.ts +6 -0
- package/lib/bryntum-date-field.component.d.ts +6 -0
- package/lib/bryntum-date-picker.component.d.ts +6 -0
- package/lib/bryntum-date-range-field.component.d.ts +6 -0
- package/lib/bryntum-date-time-field.component.d.ts +6 -0
- package/lib/bryntum-demo-code-editor.component.d.ts +6 -0
- package/lib/bryntum-display-field.component.d.ts +6 -0
- package/lib/bryntum-duration-field.component.d.ts +6 -0
- package/lib/bryntum-editor.component.d.ts +6 -0
- package/lib/bryntum-field-filter-picker-group.component.d.ts +6 -0
- package/lib/bryntum-field-filter-picker.component.d.ts +6 -0
- package/lib/bryntum-field-set.component.d.ts +6 -0
- package/lib/bryntum-file-field.component.d.ts +6 -0
- package/lib/bryntum-file-picker.component.d.ts +6 -0
- package/lib/bryntum-filter-field.component.d.ts +6 -0
- package/lib/bryntum-grid-base.component.d.ts +6 -0
- package/lib/bryntum-grid-chart-designer.component.d.ts +6 -0
- package/lib/bryntum-grid-field-filter-picker-group.component.d.ts +6 -0
- package/lib/bryntum-grid-field-filter-picker.component.d.ts +6 -0
- package/lib/bryntum-grid.component.d.ts +6 -0
- package/lib/bryntum-group-bar.component.d.ts +10 -2
- package/lib/bryntum-hint.component.d.ts +6 -0
- package/lib/bryntum-label.component.d.ts +6 -0
- package/lib/bryntum-list.component.d.ts +6 -0
- package/lib/bryntum-menu.component.d.ts +6 -0
- package/lib/bryntum-month-picker.component.d.ts +6 -0
- package/lib/bryntum-number-field.component.d.ts +6 -0
- package/lib/bryntum-paging-toolbar.component.d.ts +6 -0
- package/lib/bryntum-panel.component.d.ts +6 -0
- package/lib/bryntum-password-field.component.d.ts +6 -0
- package/lib/bryntum-progress-bar.component.d.ts +6 -0
- package/lib/bryntum-radio-group.component.d.ts +6 -0
- package/lib/bryntum-radio.component.d.ts +6 -0
- package/lib/bryntum-slide-toggle.component.d.ts +6 -0
- package/lib/bryntum-slider.component.d.ts +6 -0
- package/lib/bryntum-splitter.component.d.ts +6 -0
- package/lib/bryntum-tab-panel.component.d.ts +6 -0
- package/lib/bryntum-text-area-field.component.d.ts +6 -0
- package/lib/bryntum-text-area-picker-field.component.d.ts +6 -0
- package/lib/bryntum-text-field.component.d.ts +6 -0
- package/lib/bryntum-time-field.component.d.ts +6 -0
- package/lib/bryntum-time-picker.component.d.ts +6 -0
- package/lib/bryntum-toolbar.component.d.ts +6 -0
- package/lib/bryntum-tree-combo.component.d.ts +6 -0
- package/lib/bryntum-tree-grid.component.d.ts +6 -0
- package/lib/bryntum-widget.component.d.ts +6 -0
- package/lib/bryntum-year-picker.component.d.ts +6 -0
- package/package.json +1 -1
- package/src/lib/bryntum-a-i-filter-field.component.ts +6 -0
- package/src/lib/bryntum-boolean-combo.component.ts +6 -0
- package/src/lib/bryntum-button-group.component.ts +6 -0
- package/src/lib/bryntum-button.component.ts +6 -0
- package/src/lib/bryntum-chat-panel.component.ts +6 -0
- package/src/lib/bryntum-checkbox-group.component.ts +6 -0
- package/src/lib/bryntum-checkbox.component.ts +6 -0
- package/src/lib/bryntum-checklist-filter-combo.component.ts +6 -0
- package/src/lib/bryntum-chip-view.component.ts +10 -2
- package/src/lib/bryntum-code-editor.component.ts +6 -0
- package/src/lib/bryntum-color-field.component.ts +6 -0
- package/src/lib/bryntum-combo.component.ts +6 -0
- package/src/lib/bryntum-container.component.ts +6 -0
- package/src/lib/bryntum-date-field.component.ts +6 -0
- package/src/lib/bryntum-date-picker.component.ts +6 -0
- package/src/lib/bryntum-date-range-field.component.ts +6 -0
- package/src/lib/bryntum-date-time-field.component.ts +6 -0
- package/src/lib/bryntum-demo-code-editor.component.ts +6 -0
- package/src/lib/bryntum-display-field.component.ts +6 -0
- package/src/lib/bryntum-duration-field.component.ts +6 -0
- package/src/lib/bryntum-editor.component.ts +6 -0
- package/src/lib/bryntum-field-filter-picker-group.component.ts +6 -0
- package/src/lib/bryntum-field-filter-picker.component.ts +6 -0
- package/src/lib/bryntum-field-set.component.ts +6 -0
- package/src/lib/bryntum-file-field.component.ts +6 -0
- package/src/lib/bryntum-file-picker.component.ts +6 -0
- package/src/lib/bryntum-filter-field.component.ts +6 -0
- package/src/lib/bryntum-grid-base.component.ts +6 -0
- package/src/lib/bryntum-grid-chart-designer.component.ts +6 -0
- package/src/lib/bryntum-grid-field-filter-picker-group.component.ts +6 -0
- package/src/lib/bryntum-grid-field-filter-picker.component.ts +6 -0
- package/src/lib/bryntum-grid.component.ts +6 -0
- package/src/lib/bryntum-group-bar.component.ts +10 -2
- package/src/lib/bryntum-hint.component.ts +6 -0
- package/src/lib/bryntum-label.component.ts +6 -0
- package/src/lib/bryntum-list.component.ts +6 -0
- package/src/lib/bryntum-menu.component.ts +6 -0
- package/src/lib/bryntum-month-picker.component.ts +6 -0
- package/src/lib/bryntum-number-field.component.ts +6 -0
- package/src/lib/bryntum-paging-toolbar.component.ts +6 -0
- package/src/lib/bryntum-panel.component.ts +6 -0
- package/src/lib/bryntum-password-field.component.ts +6 -0
- package/src/lib/bryntum-progress-bar.component.ts +6 -0
- package/src/lib/bryntum-radio-group.component.ts +6 -0
- package/src/lib/bryntum-radio.component.ts +6 -0
- package/src/lib/bryntum-slide-toggle.component.ts +6 -0
- package/src/lib/bryntum-slider.component.ts +6 -0
- package/src/lib/bryntum-splitter.component.ts +6 -0
- package/src/lib/bryntum-tab-panel.component.ts +6 -0
- package/src/lib/bryntum-text-area-field.component.ts +6 -0
- package/src/lib/bryntum-text-area-picker-field.component.ts +6 -0
- package/src/lib/bryntum-text-field.component.ts +6 -0
- package/src/lib/bryntum-time-field.component.ts +6 -0
- package/src/lib/bryntum-time-picker.component.ts +6 -0
- package/src/lib/bryntum-toolbar.component.ts +6 -0
- package/src/lib/bryntum-tree-combo.component.ts +6 -0
- package/src/lib/bryntum-tree-grid.component.ts +6 -0
- package/src/lib/bryntum-widget.component.ts +6 -0
- package/src/lib/bryntum-year-picker.component.ts +6 -0
|
@@ -850,4 +850,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.0", ngImpor
|
|
|
850
850
|
}], onTrigger: [{
|
|
851
851
|
type: Output
|
|
852
852
|
}] } });
|
|
853
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJ5bnR1bS1yYWRpby5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9jb21wb25lbnQvc3JjL2xpYi9icnludHVtLXJhZGlvLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxzREFBc0Q7QUFDdEQ7O0dBRUc7QUFFSCxPQUFPLEVBQUUsU0FBUyxFQUFjLFlBQVksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFrRCxNQUFNLGVBQWUsQ0FBQztBQUVuSSxPQUFPLGFBQWEsTUFBTSxrQkFBa0IsQ0FBQztBQUU3QyxPQUFPLEVBQXdJLEtBQUssRUFBc0YsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBR3hRLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDOztBQW9sQjVELE1BQU0sT0FBTyxxQkFBcUI7SUFvUjlCLFlBQVksT0FBbUI7UUFUdkIsa0JBQWEsR0FBRztZQUNwQixLQUFLLEVBQWMsU0FBUztZQUM1QixRQUFRLEVBQVcsU0FBUztZQUM1QixJQUFJLEVBQWUsU0FBUztZQUM1QixnQkFBZ0IsRUFBRyxJQUFJO1lBQ3ZCLFFBQVEsRUFBVyxFQUFFO1lBQ3JCLFNBQVMsRUFBVSxFQUFFO1NBQ3hCLENBQUM7UUE4SEYsa0JBQWtCO1FBQ2xCOzs7Ozs7Ozs7O1dBVUc7UUFDTyxhQUFRLEdBQVEsSUFBSSxZQUFZLEVBQTBKLENBQUM7UUFDck07Ozs7Ozs7Ozs7V0FVRztRQUNPLG1CQUFjLEdBQVEsSUFBSSxZQUFZLEVBQWtLLENBQUM7UUFDbk47Ozs7V0FJRztRQUNPLG9CQUFlLEdBQVEsSUFBSSxZQUFZLEVBQThDLENBQUM7UUFDaEc7Ozs7V0FJRztRQUNPLGlCQUFZLEdBQVEsSUFBSSxZQUFZLEVBQXdELENBQUM7UUFDdkc7Ozs7V0FJRztRQUNPLGlCQUFZLEdBQVEsSUFBSSxZQUFZLEVBQTZFLENBQUM7UUFDNUg7Ozs7OztXQU1HO1FBQ08sZUFBVSxHQUFRLElBQUksWUFBWSxFQUFnRSxDQUFDO1FBQzdHOzs7Ozs7Ozs7O1dBVUc7UUFDTyxhQUFRLEdBQVEsSUFBSSxZQUFZLEVBQTBKLENBQUM7UUFDck07Ozs7O1dBS0c7UUFDTyxZQUFPLEdBQVEsSUFBSSxZQUFZLEVBQW1ELENBQUM7UUFDN0Y7Ozs7O1dBS0c7UUFDTyxZQUFPLEdBQVEsSUFBSSxZQUFZLEVBQWdFLENBQUM7UUFDMUc7Ozs7V0FJRztRQUNPLGNBQVMsR0FBUSxJQUFJLFlBQVksRUFBOEMsQ0FBQztRQUMxRjs7OztXQUlHO1FBQ08scUJBQWdCLEdBQVEsSUFBSSxZQUFZLEVBQXNELENBQUM7UUFDekc7Ozs7Ozs7OztXQVNHO1FBQ08sY0FBUyxHQUFRLElBQUksWUFBWSxFQUE0SixDQUFDO1FBQ3hNOzs7Ozs7Ozs7OztXQVdHO1FBQ08sZUFBVSxHQUFRLElBQUksWUFBWSxFQUE0SixDQUFDO1FBQ3pNOzs7O1dBSUc7UUFDTyxXQUFNLEdBQVEsSUFBSSxZQUFZLEVBQWdELENBQUM7UUFDekY7Ozs7OztXQU1HO1FBQ08sWUFBTyxHQUFRLElBQUksWUFBWSxFQUFtRyxDQUFDO1FBQzdJOzs7Ozs7O1dBT0c7UUFDTyxZQUFPLEdBQVEsSUFBSSxZQUFZLEVBQXFFLENBQUM7UUFDL0c7Ozs7V0FJRztRQUNPLGVBQVUsR0FBUSxJQUFJLFlBQVksRUFBbUQsQ0FBQztRQUNoRzs7O1dBR0c7UUFDTyxnQkFBVyxHQUFRLElBQUksWUFBWSxFQUF1QixDQUFDO1FBQ3JFOzs7Ozs7OztXQVFHO1FBQ08sYUFBUSxHQUFRLElBQUksWUFBWSxFQUFvSCxDQUFDO1FBQy9KOzs7O1dBSUc7UUFDTyxXQUFNLEdBQVEsSUFBSSxZQUFZLEVBQWdELENBQUM7UUFDekY7Ozs7O1dBS0c7UUFDTyxjQUFTLEdBQVEsSUFBSSxZQUFZLEVBQW9FLENBQUM7UUFwUzVHLElBQUksQ0FBQyxVQUFVLEdBQUcsT0FBTyxDQUFDO0lBQzlCLENBQUM7SUFxU0Q7O09BRUc7SUFDSCxRQUFRO1FBQ0osTUFDSSxFQUFFLEdBQUcsSUFBSSxFQUNULEVBQ0ksVUFBVSxFQUNWLGFBQWEsRUFDaEIsR0FBRyxFQUFFLEVBQ04sRUFDSSxhQUFhLEVBQ2IsWUFBWSxFQUNaLGNBQWMsRUFDZCxhQUFhLEVBQ2hCLEdBQUcscUJBQXFCLENBQUM7UUFFOUIsY0FBYyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDdkQsYUFBYTtZQUNiLGFBQWEsQ0FBQyxjQUFjLENBQUMsYUFBYSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUM5RCxJQUFJLENBQUMsVUFBVSxFQUFFLFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDdkMsYUFBYSxDQUFDLG9CQUFvQixDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsQ0FBQzthQUMxRDtRQUNMLENBQUMsQ0FBQyxDQUFDO1FBQ0gsYUFBYTtRQUNiLGFBQWEsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQzNGLE1BQ0ksWUFBWSxHQUFHLENBQUMsR0FBVyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQzFFLFNBQVMsR0FBRyxDQUFDLEdBQVcsRUFBRSxFQUFFLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUU1RCxhQUFhO1lBQ2IsYUFBYSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRTtnQkFDNUMsYUFBYTtnQkFDYixFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNsQixzR0FBc0c7Z0JBQ3RHLHVCQUF1QjtnQkFDdkIsT0FBTyxDQUFDLENBQUMsV0FBVyxDQUFDO1lBQ3pCLENBQUMsQ0FBQztRQUNOLENBQUMsQ0FBQyxDQUFDO1FBRUgsd0ZBQXdGO1FBQ3hGLE1BQ0ksY0FBYyxHQUFHO1lBQ2IsT0FBTztZQUNQLFVBQVU7WUFDVixhQUFhO1lBQ2IsY0FBYztZQUNkLGFBQWE7U0FDaEIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUN4QyxJQUFJLENBQUMsY0FBYyxFQUFFO1lBQ2pCLElBQUksWUFBWSxLQUFLLFFBQVEsSUFBSSxVQUFVLENBQUMsYUFBYSxDQUFDLFdBQVcsRUFBRSxZQUFZLFVBQVUsRUFBRTtnQkFDM0YsK0RBQStEO2dCQUMvRCxhQUFhLENBQUMsUUFBUSxHQUFHLFVBQVUsQ0FBQyxhQUFhLENBQUM7YUFDckQ7aUJBQ0k7Z0JBQ0QsYUFBYSxDQUFDLEtBQUssR0FBRyxVQUFVLENBQUMsYUFBYSxDQUFDO2FBQ2xEO1NBQ0o7YUFDSTtZQUNELGFBQWEsQ0FBQyxtQkFBbUIsQ0FBQyxZQUFZLEVBQUUsY0FBYyxDQUFDLENBQUM7U0FDbkU7UUFFRCx5RkFBeUY7UUFDekYseUZBQXlGO1FBQ3pGLG9GQUFvRjtRQUNwRix3RkFBd0Y7UUFDeEYsbURBQW1EO1FBQ25ELE1BQU0sVUFBVSxHQUFHLFVBQVUsQ0FBQyxhQUFhLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDMUQsSUFBSSxVQUFVLFlBQVksVUFBVSxFQUFFO1lBQ2xDLHNCQUFzQixFQUFFLENBQUM7WUFDekIscUJBQXFCLENBQUMscUJBQXFCLENBQUMsVUFBVSxDQUFDLENBQUM7U0FDM0Q7UUFFRCxhQUFhO1FBQ2IsRUFBRSxDQUFDLFFBQVEsR0FBRyxZQUFZLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLGFBQWEsQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUU5RyxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ssTUFBTSxDQUFDLHFCQUFxQixDQUFDLFVBQXNCOztRQUN2RCxJQUFJLFFBQVEsQ0FBQyxhQUFhLENBQUMsc0JBQXNCLENBQUMsRUFBRTtZQUNoRCxPQUFPO1NBQ1Y7UUFFRCxNQUFNLGFBQWEsR0FBYSxFQUFFLENBQUM7UUFFbkMsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLEtBQW9CLEVBQVEsRUFBRTtZQUNwRCxJQUFJO2dCQUNBLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUM7Z0JBQzdCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO29CQUNuQyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssT0FBTyxDQUFDLGNBQWMsRUFBRTt3QkFDMUMsYUFBYSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUM7cUJBQ3hDO2lCQUNKO2FBQ0o7WUFDRCxPQUFPLEVBQUUsRUFBRTtnQkFDUCwrQ0FBK0M7YUFDbEQ7UUFDTCxDQUFDLENBQUM7UUFFRixxREFBcUQ7UUFDckQsTUFBTSxhQUFhLEdBQW9CLE1BQUMsVUFBa0IsQ0FBQyxrQkFBa0IsbUNBQUksRUFBRSxDQUFDO1FBQ3BGLGFBQWEsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBRXhELCtDQUErQztRQUMvQyxVQUFVLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxFQUFFO1lBQzlDLElBQUksRUFBRSxDQUFDLEtBQUssRUFBRTtnQkFDVixnQkFBZ0IsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDOUI7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksYUFBYSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDMUIsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUM5QyxLQUFLLENBQUMsRUFBRSxHQUFHLHFCQUFxQixDQUFDO1lBQ2pDLEtBQUssQ0FBQyxXQUFXLEdBQUcsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUM3QyxRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUNwQztJQUNMLENBQUM7SUFFRDs7O09BR0c7SUFDSCxXQUFXLENBQUMsT0FBc0I7UUFDOUIsTUFDSSxFQUFFLFFBQVEsRUFBRSxHQUFHLElBQUksRUFDbkIsRUFBRSxZQUFZLEVBQUUsR0FBRyxxQkFBcUIsQ0FBQztRQUM3QyxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ1gsT0FBTztTQUNWO1FBQ0QsMkJBQTJCO1FBQzNCLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLEVBQUUsRUFBRTtZQUMvQyxNQUNJLFFBQVEsR0FBSSxNQUF1QixDQUFDLFlBQVksRUFDaEQsRUFBRSxRQUFRLEVBQUUsR0FBRyxJQUFJLEVBQ25CLEVBQUUsa0JBQWtCLEVBQUUsWUFBWSxFQUFFLEdBQUcscUJBQXFCLENBQUM7WUFDakUsSUFBSSxZQUFZLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUM3QixhQUFhLENBQUMsY0FBYyxDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDO2dCQUM5RCxJQUFJLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRTtvQkFDbkMsYUFBYSxDQUFDLG9CQUFvQixDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsQ0FBQztpQkFDMUQ7YUFDSjtRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVEOztPQUVHO0lBQ0gsV0FBVztRQUNQLGFBQWE7UUFDYixJQUFJLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUU7WUFDeEMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQztTQUMzQjtJQUNMLENBQUM7O0FBeHRCYSxtQ0FBYSxHQUFHLEtBQUssQ0FBQztBQUV0QixrQ0FBWSxHQUFHLE9BQU8sQ0FBQztBQUV0QixtQ0FBYSxHQUFhO0lBQ3JDLFVBQVU7SUFDVixnQkFBZ0I7SUFDaEIsaUJBQWlCO0lBQ2pCLGNBQWM7SUFDZCxjQUFjO0lBQ2QsWUFBWTtJQUNaLFVBQVU7SUFDVixTQUFTO0lBQ1QsU0FBUztJQUNULFdBQVc7SUFDWCxrQkFBa0I7SUFDbEIsV0FBVztJQUNYLFlBQVk7SUFDWixRQUFRO0lBQ1IsU0FBUztJQUNULFNBQVM7SUFDVCxZQUFZO0lBQ1osYUFBYTtJQUNiLFVBQVU7SUFDVixRQUFRO0lBQ1IsV0FBVztDQUNkLENBQUM7QUFFYSx5Q0FBbUIsR0FBYSxFQUU5QyxDQUFDO0FBRWEsb0NBQWMsR0FBYSxxQkFBcUIsQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLENBQUM7SUFDdkYsT0FBTztJQUNQLE9BQU87SUFDUCxXQUFXO0lBQ1gsUUFBUTtJQUNSLFVBQVU7SUFDVixpQkFBaUI7SUFDakIsV0FBVztJQUNYLGNBQWM7SUFDZCxjQUFjO0lBQ2QsWUFBWTtJQUNaLE9BQU87SUFDUCxjQUFjO0lBQ2QsaUJBQWlCO0lBQ2pCLDZCQUE2QjtJQUM3QixVQUFVO0lBQ1YsU0FBUztJQUNULGNBQWM7SUFDZCxlQUFlO0lBQ2YsS0FBSztJQUNMLE9BQU87SUFDUCxRQUFRO0lBQ1IsUUFBUTtJQUNSLGFBQWE7SUFDYixXQUFXO0lBQ1gsZUFBZTtJQUNmLG1CQUFtQjtJQUNuQixXQUFXO0lBQ1gsU0FBUztJQUNULHFCQUFxQjtJQUNyQiw4QkFBOEI7SUFDOUIsVUFBVTtJQUNWLE1BQU07SUFDTixXQUFXO0lBQ1gsbUJBQW1CO0lBQ25CLFdBQVc7SUFDWCxNQUFNO0lBQ04sVUFBVTtJQUNWLFFBQVE7SUFDUixRQUFRO0lBQ1IsZUFBZTtJQUNmLHlCQUF5QjtJQUN6QixNQUFNO0lBQ04sVUFBVTtJQUNWLElBQUk7SUFDSixzQkFBc0I7SUFDdEIsUUFBUTtJQUNSLFlBQVk7SUFDWixpQkFBaUI7SUFDakIsVUFBVTtJQUNWLFdBQVc7SUFDWCxZQUFZO0lBQ1osY0FBYztJQUNkLGFBQWE7SUFDYixRQUFRO0lBQ1Isc0JBQXNCO0lBQ3RCLE9BQU87SUFDUCxVQUFVO0lBQ1YsZUFBZTtJQUNmLFFBQVE7SUFDUixZQUFZO0lBQ1osV0FBVztJQUNYLGFBQWE7SUFDYixhQUFhO0lBQ2IsdUJBQXVCO0lBQ3ZCLFFBQVE7SUFDUixjQUFjO0lBQ2QsUUFBUTtJQUNSLFdBQVc7SUFDWCxrQkFBa0I7SUFDbEIsVUFBVTtJQUNWLFdBQVc7SUFDWCxVQUFVO0lBQ1YsZUFBZTtJQUNmLE1BQU07SUFDTixZQUFZO0lBQ1osdUJBQXVCO0lBQ3ZCLFVBQVU7SUFDVixrQkFBa0I7SUFDbEIsVUFBVTtJQUNWLGdCQUFnQjtJQUNoQixRQUFRO0lBQ1IsTUFBTTtJQUNOLGFBQWE7SUFDYixLQUFLO0lBQ0wsY0FBYztJQUNkLGVBQWU7SUFDZix1QkFBdUI7SUFDdkIseUJBQXlCO0lBQ3pCLGdCQUFnQjtJQUNoQixNQUFNO0lBQ04sWUFBWTtJQUNaLEtBQUs7SUFDTCxVQUFVO0lBQ1YsTUFBTTtJQUNOLFdBQVc7SUFDWCxPQUFPO0lBQ1AsU0FBUztJQUNULFVBQVU7SUFDVixNQUFNO0lBQ04sSUFBSTtJQUNKLGdCQUFnQjtJQUNoQixpQkFBaUI7SUFDakIsT0FBTztJQUNQLFFBQVE7SUFDUixPQUFPO0lBQ1AsR0FBRztJQUNILEdBQUc7Q0FDTixDQUFDLENBQUM7QUFFWSx3Q0FBa0IsR0FBYTtJQUMxQyxPQUFPO0lBQ1AsT0FBTztJQUNQLFFBQVE7SUFDUixpQkFBaUI7SUFDakIsV0FBVztJQUNYLGNBQWM7SUFDZCxjQUFjO0lBQ2QsWUFBWTtJQUNaLGNBQWM7SUFDZCxVQUFVO0lBQ1YsY0FBYztJQUNkLGVBQWU7SUFDZixPQUFPO0lBQ1AsUUFBUTtJQUNSLGFBQWE7SUFDYixXQUFXO0lBQ1gsZUFBZTtJQUNmLG1CQUFtQjtJQUNuQixXQUFXO0lBQ1gscUJBQXFCO0lBQ3JCLDhCQUE4QjtJQUM5QixNQUFNO0lBQ04sV0FBVztJQUNYLG1CQUFtQjtJQUNuQixVQUFVO0lBQ1YsZUFBZTtJQUNmLHlCQUF5QjtJQUN6QixNQUFNO0lBQ04sVUFBVTtJQUNWLHNCQUFzQjtJQUN0QixRQUFRO0lBQ1IsWUFBWTtJQUNaLGlCQUFpQjtJQUNqQixVQUFVO0lBQ1YsV0FBVztJQUNYLFlBQVk7SUFDWixzQkFBc0I7SUFDdEIsVUFBVTtJQUNWLGVBQWU7SUFDZixRQUFRO0lBQ1IsWUFBWTtJQUNaLFdBQVc7SUFDWCxhQUFhO0lBQ2IsYUFBYTtJQUNiLHVCQUF1QjtJQUN2QixjQUFjO0lBQ2QsUUFBUTtJQUNSLGVBQWU7SUFDZixZQUFZO0lBQ1osdUJBQXVCO0lBQ3ZCLGtCQUFrQjtJQUNsQixnQkFBZ0I7SUFDaEIsUUFBUTtJQUNSLE1BQU07SUFDTixhQUFhO0lBQ2IsY0FBYztJQUNkLGVBQWU7SUFDZix5QkFBeUI7SUFDekIsZ0JBQWdCO0lBQ2hCLFlBQVk7SUFDWixLQUFLO0lBQ0wsVUFBVTtJQUNWLE1BQU07SUFDTixXQUFXO0lBQ1gsT0FBTztJQUNQLE1BQU07SUFDTixJQUFJO0lBQ0osZ0JBQWdCO0lBQ2hCLGlCQUFpQjtJQUNqQixRQUFRO0NBQ1gsQ0FBQztBQUVhLGtDQUFZLEdBQWEscUJBQXFCLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUFDO0lBQ3JGLFdBQVc7SUFDWCxVQUFVO0lBQ1YsT0FBTztJQUNQLGlCQUFpQjtJQUNqQiw2QkFBNkI7SUFDN0IsU0FBUztJQUNULEtBQUs7SUFDTCxRQUFRO0lBQ1IsU0FBUztJQUNULFNBQVM7SUFDVCxVQUFVO0lBQ1YsVUFBVTtJQUNWLFdBQVc7SUFDWCxNQUFNO0lBQ04sUUFBUTtJQUNSLFFBQVE7SUFDUixNQUFNO0lBQ04sSUFBSTtJQUNKLE9BQU87SUFDUCxjQUFjO0lBQ2QsYUFBYTtJQUNiLFFBQVE7SUFDUixPQUFPO0lBQ1AsUUFBUTtJQUNSLFdBQVc7SUFDWCxrQkFBa0I7SUFDbEIsVUFBVTtJQUNWLFdBQVc7SUFDWCxVQUFVO0lBQ1YsTUFBTTtJQUNOLFFBQVE7SUFDUixhQUFhO0lBQ2IsVUFBVTtJQUNWLFVBQVU7SUFDVixLQUFLO0lBQ0wsWUFBWTtJQUNaLHVCQUF1QjtJQUN2QixNQUFNO0lBQ04sU0FBUztJQUNULFVBQVU7SUFDVixPQUFPO0lBQ1AsT0FBTztJQUNQLEdBQUc7SUFDSCxHQUFHO0NBQ04sQ0FBQyxDQUFDO2tIQXRRTSxxQkFBcUI7c0dBQXJCLHFCQUFxQiwyN0dBRm5CLEVBQUU7MkZBRUoscUJBQXFCO2tCQUpqQyxTQUFTO21CQUFDO29CQUNQLFFBQVEsRUFBRyxlQUFlO29CQUMxQixRQUFRLEVBQUcsRUFBRTtpQkFDaEI7aUdBMFJZLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csbUJBQW1CO3NCQUEzQixLQUFLO2dCQUNHLDRCQUE0QjtzQkFBcEMsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLHVCQUF1QjtzQkFBL0IsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxvQkFBb0I7c0JBQTVCLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxvQkFBb0I7c0JBQTVCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLHFCQUFxQjtzQkFBN0IsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0cscUJBQXFCO3NCQUE3QixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csdUJBQXVCO3NCQUEvQixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxHQUFHO3NCQUFYLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLEVBQUU7c0JBQVYsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUdHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRywyQkFBMkI7c0JBQW5DLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLEdBQUc7c0JBQVgsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxFQUFFO3NCQUFWLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csR0FBRztzQkFBWCxLQUFLO2dCQUNHLHFCQUFxQjtzQkFBN0IsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxDQUFDO3NCQUFULEtBQUs7Z0JBQ0csQ0FBQztzQkFBVCxLQUFLO2dCQUdHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFjSSxRQUFRO3NCQUFqQixNQUFNO2dCQVlHLGNBQWM7c0JBQXZCLE1BQU07Z0JBTUcsZUFBZTtzQkFBeEIsTUFBTTtnQkFNRyxZQUFZO3NCQUFyQixNQUFNO2dCQU1HLFlBQVk7c0JBQXJCLE1BQU07Z0JBUUcsVUFBVTtzQkFBbkIsTUFBTTtnQkFZRyxRQUFRO3NCQUFqQixNQUFNO2dCQU9HLE9BQU87c0JBQWhCLE1BQU07Z0JBT0csT0FBTztzQkFBaEIsTUFBTTtnQkFNRyxTQUFTO3NCQUFsQixNQUFNO2dCQU1HLGdCQUFnQjtzQkFBekIsTUFBTTtnQkFXRyxTQUFTO3NCQUFsQixNQUFNO2dCQWFHLFVBQVU7c0JBQW5CLE1BQU07Z0JBTUcsTUFBTTtzQkFBZixNQUFNO2dCQVFHLE9BQU87c0JBQWhCLE1BQU07Z0JBU0csT0FBTztzQkFBaEIsTUFBTTtnQkFNRyxVQUFVO3NCQUFuQixNQUFNO2dCQUtHLFdBQVc7c0JBQXBCLE1BQU07Z0JBVUcsUUFBUTtzQkFBakIsTUFBTTtnQkFNRyxNQUFNO3NCQUFmLE1BQU07Z0JBT0csU0FBUztzQkFBbEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFycyAqL1xuLyoqXG4gKiBBbmd1bGFyIHdyYXBwZXIgZm9yIEJyeW50dW0gUmFkaW9cbiAqL1xuXG5pbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgT3V0cHV0LCBJbnB1dCwgU2ltcGxlQ2hhbmdlLCBTaW1wbGVDaGFuZ2VzLCBPbkRlc3Ryb3ksIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgV3JhcHBlckhlbHBlciBmcm9tICcuL3dyYXBwZXIuaGVscGVyJztcblxuaW1wb3J0IHsgQWxpZ25TcGVjLCBCYXNlLCBDaGVja2JveCwgQ29udGFpbmVySXRlbUNvbmZpZywgRG9tQ29uZmlnLCBGaWVsZCwgRmllbGRDb250YWluZXJDb25maWcsIEZpZWxkVHJpZ2dlckNvbmZpZywgS2V5TWFwQ29uZmlnLCBNYXNrQ29uZmlnLCBSYWRpbywgUmFkaW9MaXN0ZW5lcnMsIFJlYWN0SlNYLCBSZWN0YW5nbGUsIFNjcm9sbGVyLCBUYWJDb25maWcsIFRvb2x0aXBDb25maWcsIFZ1ZUNvbmZpZywgV2lkZ2V0IH0gZnJvbSAnQGJyeW50dW0vZ3JpZCc7XG5cbmltcG9ydCB7IERvbUhlbHBlciwgU3RyaW5nSGVscGVyIH0gZnJvbSAnQGJyeW50dW0vZ3JpZCc7XG5pbXBvcnQgeyBpbml0VGhlbWVJblNoYWRvd1Jvb3RzIH0gZnJvbSAnLi9zaGFkb3dkb20uaGVscGVyJztcblxuZXhwb3J0IHR5cGUgQnJ5bnR1bVJhZGlvUHJvcHMgPSB7XG4gICAgLy8gQ29uZmlnc1xuICAgIC8qKlxuICAgICAqIEVsZW1lbnQgKG9yIGVsZW1lbnQgaWQpIHRvIGFkb3B0IGFzIHRoaXMgV2lkZ2V0J3MgZW5jYXBzdWxhdGluZyBlbGVtZW50LiBUaGUgd2lkZ2V0J3NcbiAgICAgKiBjb250ZW50IHdpbGwgYmUgcGxhY2VkIGluc2lkZSB0aGlzIGVsZW1lbnQuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9SYWRpbyNjb25maWctYWRvcHQpXG4gICAgICovXG4gICAgYWRvcHQgPyA6IEhUTUxFbGVtZW50fHN0cmluZ1xuICAgIC8qKlxuICAgICAqICpPbmx5IHZhbGlkIGlmIHRoaXMgV2lkZ2V0IGlzIFtmbG9hdGluZ10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1dpZGdldCNjb25maWctZmxvYXRpbmcpLipcbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1JhZGlvI2NvbmZpZy1hbGlnbilcbiAgICAgKi9cbiAgICBhbGlnbiA/IDogQWxpZ25TcGVjfHN0cmluZ1xuICAgIC8qKlxuICAgICAqIFdoZW4gdGhpcyB3aWRnZXQgaXMgYSBjaGlsZCBvZiBhIFtDb250YWluZXJdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9Db250YWluZXIpLCBpdCB3aWxsIGJ5IGRlZmF1bHQgYmUgcGFydGljaXBhdGluZyBpbiBhXG4gICAgICogZmxleGJveCBsYXlvdXQuIFRoaXMgY29uZmlnIGFsbG93cyB5b3UgdG8gc2V0IHRoaXMgd2lkZ2V0J3NcbiAgICAgKiBbYWxpZ24tc2VsZl0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL2FsaWduLXNlbGYpIHN0eWxlLlxuICAgICAqL1xuICAgIGFsaWduU2VsZiA/IDogc3RyaW5nXG4gICAgLyoqXG4gICAgICogKk9ubHkgdmFsaWQgaWYgdGhpcyBXaWRnZXQgaXMgW2Zsb2F0aW5nXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvV2lkZ2V0I2NvbmZpZy1mbG9hdGluZykgYW5kIGJlaW5nIHNob3duIHRocm91Z2ggW3Nob3dCeV0oI0NvcmUvd2lkZ2V0L1dpZGdldCNmdW5jdGlvbi1zaG93QnkpLipcbiAgICAgKiBgdHJ1ZWAgdG8gc2hvdyBhIGNvbm5lY3RvciBhcnJvdyBwb2ludGluZyB0byB0aGUgYWxpZ24gdGFyZ2V0LlxuICAgICAqL1xuICAgIGFuY2hvciA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIEVsZW1lbnQgKG9yIHRoZSBpZCBvZiBhbiBlbGVtZW50KSB0byBhcHBlbmQgdGhpcyB3aWRnZXQncyBlbGVtZW50IHRvLiBDYW4gYmUgY29uZmlndXJlZCwgb3Igc2V0IG9uY2UgYXRcbiAgICAgKiBydW50aW1lLiBUbyBhY2Nlc3MgdGhlIGVsZW1lbnQgb2YgYSByZW5kZXJlZCB3aWRnZXQsIHNlZSBbZWxlbWVudF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1dpZGdldCNwcm9wZXJ0eS1lbGVtZW50KS5cbiAgICAgKi9cbiAgICBhcHBlbmRUbyA/IDogSFRNTEVsZW1lbnR8c3RyaW5nXG4gICAgLyoqXG4gICAgICogQSBsb2NhbGl6YWJsZSBzdHJpbmcgKE1heSBjb250YWluIGAnTHt9J2AgdG9rZW5zIHdoaWNoIHJlc29sdmUgaW4gdGhlIGxvY2FsZSBmaWxlKSB0byBpbmplY3RcbiAgICAgKiBpbnRvIGFuIGVsZW1lbnQgd2hpY2ggd2lsbCBiZSBsaW5rZWQgdXNpbmcgdGhlIGBhcmlhLWRlc2NyaWJlZGJ5YCBhdHRyaWJ1dGUuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9SYWRpbyNjb25maWctYXJpYURlc2NyaXB0aW9uKVxuICAgICAqL1xuICAgIGFyaWFEZXNjcmlwdGlvbiA/IDogc3RyaW5nXG4gICAgLyoqXG4gICAgICogQSBsb2NhbGl6YWJsZSBzdHJpbmcgKE1heSBjb250YWluIGAnTHt9J2AgdG9rZW5zIHdoaWNoIHJlc29sdmUgaW4gdGhlIGxvY2FsZSBmaWxlKSB0byBpbmplY3QgYXNcbiAgICAgKiB0aGUgYGFyaWEtbGFiZWxgIGF0dHJpYnV0ZS5cbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1JhZGlvI2NvbmZpZy1hcmlhTGFiZWwpXG4gICAgICovXG4gICAgYXJpYUxhYmVsID8gOiBzdHJpbmdcbiAgICAvKipcbiAgICAgKiBTcGVjaWZ5IGB0cnVlYCB0byBhdXRvbWF0aWNhbGx5IFtjb2xsYXBzZV0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L0ZpZWxkQ29udGFpbmVyI2NvbmZpZy1jb2xsYXBzZWQpIHRoZSBmaWVsZCdzXG4gICAgICogW2NvbnRhaW5lcl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L0NoZWNrYm94I2NvbmZpZy1jb250YWluZXIpIHdoZW4gdGhlIGZpZWxkIGlzIG5vdCBbY2hlY2tlZF0oI0NvcmUvd2lkZ2V0L0NoZWNrYm94I3Byb3BlcnR5LWNoZWNrZWQpLlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvUmFkaW8jY29uZmlnLWF1dG9Db2xsYXBzZSlcbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICBhdXRvQ29sbGFwc2UgPyA6IGJvb2xlYW58KCgpID0+IGJvb2xlYW4pXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgbmF0aXZlIGBhdXRvY29tcGxldGVgIHByb3BlcnR5IG9mIHRoZSB1bmRlcmx5aW5nIGlucHV0IGVsZW1lbnQuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBwbGVhc2UgcmVmZXIgdG9cbiAgICAgKiBbTUROXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0F0dHJpYnV0ZXMvYXV0b2NvbXBsZXRlKVxuICAgICAqL1xuICAgIGF1dG9Db21wbGV0ZSA/IDogc3RyaW5nXG4gICAgLyoqXG4gICAgICogU3BlY2lmeSBgdHJ1ZWAgdG8gYXV0byBzZWxlY3QgZmllbGQgY29udGVudHMgb24gZm9jdXNcbiAgICAgKi9cbiAgICBhdXRvU2VsZWN0ID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogSW5pdGlhbCB0ZXh0IHRvIHNob3cgaW4gYmFkZ2UuXG4gICAgICovXG4gICAgYmFkZ2UgPyA6IHN0cmluZ1xuICAgIC8qKlxuICAgICAqIEFuIG9iamVjdCB3aGVyZSBwcm9wZXJ0eSBuYW1lcyB3aXRoIGEgdHJ1dGh5IHZhbHVlIGluZGljYXRlIHdoaWNoIGV2ZW50cyBzaG91bGQgYnViYmxlIHVwIHRoZSBvd25lcnNoaXBcbiAgICAgKiBoaWVyYXJjaHkgd2hlbiB0cmlnZ2VyZWQuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9SYWRpbyNjb25maWctYnViYmxlRXZlbnRzKVxuICAgICAqL1xuICAgIGJ1YmJsZUV2ZW50cyA/IDogb2JqZWN0XG4gICAgLyoqXG4gICAgICogU2V0IHRvIGBmYWxzZWAgdG8gbm90IGNhbGwgb25YWFggbWV0aG9kIG5hbWVzIChlLmcuIGBvblNob3dgLCBgb25DbGlja2ApLCBhcyBhbiBlYXN5IHdheSB0byBsaXN0ZW4gZm9yIGV2ZW50cy5cbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1JhZGlvI2NvbmZpZy1jYWxsT25GdW5jdGlvbnMpXG4gICAgICovXG4gICAgY2FsbE9uRnVuY3Rpb25zID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogQnkgZGVmYXVsdCwgaWYgYW4gZXZlbnQgaGFuZGxlciB0aHJvd3MgYW4gZXhjZXB0aW9uLCB0aGUgZXJyb3IgcHJvcGFnYXRlcyB1cCB0aGUgc3RhY2sgYW5kIHRoZVxuICAgICAqIGFwcGxpY2F0aW9uIHN0YXRlIGlzIHVuZGVmaW5lZC4gQ29kZSB3aGljaCBmb2xsb3dzIHRoZSBldmVudCBoYW5kbGVyIHdpbGwgKm5vdCogYmUgZXhlY3V0ZWQuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9SYWRpbyNjb25maWctY2F0Y2hFdmVudEhhbmRsZXJFeGNlcHRpb25zKVxuICAgICAqL1xuICAgIGNhdGNoRXZlbnRIYW5kbGVyRXhjZXB0aW9ucyA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqICpPbmx5IHZhbGlkIGlmIHRoaXMgV2lkZ2V0IGlzIFtmbG9hdGluZ10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1dpZGdldCNjb25maWctZmxvYXRpbmcpLipcbiAgICAgKiBTZXQgdG8gYHRydWVgIHRvIGNlbnRyZSB0aGUgV2lkZ2V0IGluIGJyb3dzZXIgdmlld3BvcnQgc3BhY2UuXG4gICAgICovXG4gICAgY2VudGVyZWQgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBUaGUgY2hlY2tlZCBzdGF0ZS4gVGhlIHNhbWUgYXMgYHZhbHVlYC5cbiAgICAgKi9cbiAgICBjaGVja2VkID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogVGhlIHZhbHVlIHRvIHByb3ZpZGUgZm9yIHRoaXMgd2lkZ2V0IGluIFt2YWx1ZXNdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9Db250YWluZXIjcHJvcGVydHktdmFsdWVzKSB3aGVuIGl0IGlzXG4gICAgICogW2NoZWNrZWRdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9DaGVja2JveCNwcm9wZXJ0eS1jaGVja2VkKS5cbiAgICAgKiBBIHZhbHVlIG9mIGB1bmRlZmluZWRgIHdpbGwgY2F1c2UgdGhpcyB3aWRnZXQgbm90IHRvIGluY2x1ZGUgaXRzIHZhbHVlIHdoZW4gY2hlY2tlZC5cbiAgICAgKi9cbiAgICBjaGVja2VkVmFsdWUgPyA6IGFueVxuICAgIC8qKlxuICAgICAqIEEgZnVuY3Rpb24gKG9yIHRoZSBuYW1lIG9mIGEgZnVuY3Rpb24gaW4gdGhlIG93bmVyc2hpcCBoaWVyYXJjaHkpIGNhbGxlZCBkdXJpbmcgZmllbGQgdmFsaWRhdGlvblxuICAgICAqIHRvIHBlcmZvcm0gY3VzdG9tIHZhbGlkaXR5IGNoZWNrcy4gVGhlIGZ1bmN0aW9uIGlzIGNhbGxlZCBhcyBwYXJ0IG9mIHRoZSBbaXNWYWxpZF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L0ZpZWxkI3Byb3BlcnR5LWlzVmFsaWQpXG4gICAgICogZXZhbHVhdGlvbiwgYWZ0ZXIgdGhlIGJ1aWx0LWluIFtyZXF1aXJlZF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L0ZpZWxkI2NvbmZpZy1yZXF1aXJlZCkgY2hlY2suXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9SYWRpbyNjb25maWctY2hlY2tWYWxpZGl0eSlcbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0LkZpZWxkfSBmaWVsZCBUaGUgZmllbGQgYmVpbmcgdmFsaWRhdGVkXG4gICAgICogQHJldHVybnMge3ZvaWR9XG4gICAgICovXG4gICAgY2hlY2tWYWxpZGl0eSA/IDogKChmaWVsZDogRmllbGQpID0+IHZvaWQpfHN0cmluZ1xuICAgIC8qKlxuICAgICAqIEN1c3RvbSBDU1MgY2xhc3NlcyB0byBhZGQgdG8gZWxlbWVudC5cbiAgICAgKiBNYXkgYmUgc3BlY2lmaWVkIGFzIGEgc3BhY2Ugc2VwYXJhdGVkIHN0cmluZywgb3IgYXMgYW4gb2JqZWN0IGluIHdoaWNoIHByb3BlcnR5IG5hbWVzXG4gICAgICogd2l0aCB0cnV0aHkgdmFsdWVzIGFyZSB1c2VkIGFzIHRoZSBjbGFzcyBuYW1lczpcbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1JhZGlvI2NvbmZpZy1jbHMpXG4gICAgICovXG4gICAgY2xzID8gOiBzdHJpbmd8b2JqZWN0XG4gICAgLyoqXG4gICAgICogQ2hlY2tib3ggY29sb3IsIG11c3QgaGF2ZSBtYXRjaCBpbiBDU1NcbiAgICAgKi9cbiAgICBjb2xvciA/IDogc3RyaW5nXG4gICAgLyoqXG4gICAgICogUHJvZ3JhbW1hdGljIGNvbnRyb2wgb3ZlciB3aGljaCBjb2x1bW4gdG8gc3RhcnQgaW4gd2hlbiB1c2VkIGluIGEgZ3JpZCBsYXlvdXQuXG4gICAgICovXG4gICAgY29sdW1uID8gOiBudW1iZXJcbiAgICBjb25maWcgPyA6IG9iamVjdFxuICAgIC8qKlxuICAgICAqICpPbmx5IHZhbGlkIGlmIHRoaXMgV2lkZ2V0IGlzIFtmbG9hdGluZ10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1dpZGdldCNjb25maWctZmxvYXRpbmcpIG9yIFtwb3NpdGlvbmVkXSgjQ29yZS93aWRnZXQvV2lkZ2V0I2NvbmZpZy1wb3NpdGlvbmVkKS4qXG4gICAgICogRWxlbWVudCwgV2lkZ2V0IG9yIFJlY3RhbmdsZSB0byB3aGljaCB0aGlzIFdpZGdldCBpcyBjb25zdHJhaW5lZC5cbiAgICAgKi9cbiAgICBjb25zdHJhaW5UbyA/IDogSFRNTEVsZW1lbnR8V2lkZ2V0fFJlY3RhbmdsZVxuICAgIC8qKlxuICAgICAqIFRoZSBjb25maWd1cmF0aW9uIGZvciBhZGRpdGlvbmFsIGl0ZW1zIGFzc29jaWF0ZWQgdG8gdGhpcyBmaWVsZC4gVGhpcyBpcyB0eXBpY2FsbHkgdXNlZCB0byBhZGQgY29udGV4dHVhbFxuICAgICAqIGZpZWxkcyByZWxhdGVkIHRvIGEgW2NoZWNrYm94XShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvQ2hlY2tib3gpIG9yIFtyYWRpbyBidXR0b25dKCNDb3JlL3dpZGdldC9SYWRpbykuIFNlZVxuICAgICAqIHRoZXNlIGNsYXNzZXMgZm9yIGV4YW1wbGVzIG9mIG5lc3RlZCBmaWVsZHMuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9SYWRpbyNjb25maWctY29udGFpbmVyKVxuICAgICAqL1xuICAgIGNvbnRhaW5lciA/IDogUmVjb3JkPHN0cmluZywgQ29udGFpbmVySXRlbUNvbmZpZz58Q29udGFpbmVySXRlbUNvbmZpZ1tdfEZpZWxkQ29udGFpbmVyQ29uZmlnXG4gICAgLyoqXG4gICAgICogVGhlIGNvbmZpZyBjb250cm9scyBob3cgdGhlIHZhbHVlIG9mIG5lc3RlZCBpdGVtcyBhcmUgaGFuZGxlZCB3aGVuIGEgcGFyZW50IGNvbnRhaW5lciBnZXRzIG9yIHNldHMgaXRzXG4gICAgICogW3ZhbHVlc10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L0NvbnRhaW5lciNwcm9wZXJ0eS12YWx1ZXMpLlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvUmFkaW8jY29uZmlnLWNvbnRhaW5WYWx1ZXMpXG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5GaWVsZH0gZmllbGQgRmllbGQgaW5zdGFuY2VcbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICBjb250YWluVmFsdWVzID8gOiBib29sZWFufHN0cmluZ3woKGZpZWxkOiBGaWVsZCkgPT4gYm9vbGVhbilcbiAgICAvKipcbiAgICAgKiBDdXN0b20gQ1NTIGNsYXNzZXMgdG8gYWRkIHRvIHRoZSBbY29udGVudEVsZW1lbnRdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9XaWRnZXQjcHJvcGVydHktY29udGVudEVsZW1lbnQpLlxuICAgICAqIE1heSBiZSBzcGVjaWZpZWQgYXMgYSBzcGFjZSBzZXBhcmF0ZWQgc3RyaW5nLCBvciBhcyBhbiBvYmplY3QgaW4gd2hpY2ggcHJvcGVydHkgbmFtZXNcbiAgICAgKiB3aXRoIHRydXRoeSB2YWx1ZXMgYXJlIHVzZWQgYXMgdGhlIGNsYXNzIG5hbWVzOlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvUmFkaW8jY29uZmlnLWNvbnRlbnRFbGVtZW50Q2xzKVxuICAgICAqL1xuICAgIGNvbnRlbnRFbGVtZW50Q2xzID8gOiBzdHJpbmd8b2JqZWN0XG4gICAgLyoqXG4gICAgICogV2hlbiB0aGlzIFdpZGdldCBjb25maWd1cmF0aW9uIGlzIHVzZWQgaW4gdGhlIEdyaWQncyBSb3dFeHBhbmRlciBmZWF0dXJlJ3MgYHdpZGdldGAgY29uZmlnLCBwcm92aWRlIHRoZVxuICAgICAqIGZpZWxkIG9uIHRoZSBleHBhbmRlZCByZWNvcmQgdG8gdXNlIGZvciBwb3B1bGF0aW5nIHRoaXMgd2lkZ2V0J3Mgc3RvcmUgKGlmIGFwcGxpY2FibGUpXG4gICAgICovXG4gICAgZGF0YUZpZWxkID8gOiBzdHJpbmdcbiAgICAvKipcbiAgICAgKiBPYmplY3QgdG8gYXBwbHkgdG8gZWxlbWVudHMgZGF0YXNldCAoZWFjaCBrZXkgd2lsbCBiZSB1c2VkIGFzIGEgZGF0YS1hdHRyaWJ1dGUgb24gdGhlIGVsZW1lbnQpXG4gICAgICovXG4gICAgZGF0YXNldCA/IDogUmVjb3JkPHN0cmluZywgc3RyaW5nPlxuICAgIC8qKlxuICAgICAqIFRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSB0byBzZXQgd2hlbiBhIHNpbmdsZSB2YWx1ZSBpcyB0byBiZSBhcHBsaWVkIHRvIHRoaXMgV2lkZ2V0LiBTdWNoIGFzIHdoZW4gdXNlZFxuICAgICAqIGluIGEgZ3JpZCBXaWRnZXRDb2x1bW4sIHRoaXMgaXMgdGhlIHByb3BlcnR5IHRvIHdoaWNoIHRoZSBjb2x1bW4ncyBgZmllbGRgIGlzIGFwcGxpZWQuXG4gICAgICovXG4gICAgZGVmYXVsdEJpbmRQcm9wZXJ0eSA/IDogc3RyaW5nXG4gICAgLyoqXG4gICAgICogQ2hlY2sgZm9yIENTUyBjb21wYXRpYmlsaXR5IGFuZCBpbmNsdXNpb24gcmVsYXRlZCBpc3N1ZXMgYW5kIHRyeSB0byBhdXRvIGZpeCB0aGVtLiBQZXJmb3JtcyB0aGUgZm9sbG93aW5nXG4gICAgICogY2hlY2tzOlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvUmFkaW8jY29uZmlnLWRldGVjdENTU0NvbXBhdGliaWxpdHlJc3N1ZXMpXG4gICAgICovXG4gICAgZGV0ZWN0Q1NTQ29tcGF0aWJpbGl0eUlzc3VlcyA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIERpc2FibGUgb3IgZW5hYmxlIHRoZSB3aWRnZXQuIEl0IGlzIHNpbWlsYXIgdG8gW3JlYWRPbmx5XShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvV2lkZ2V0I2NvbmZpZy1yZWFkT25seSkgZXhjZXB0IGEgZGlzYWJsZWQgd2lkZ2V0XG4gICAgICogY2Fubm90IGJlIGZvY3VzZWQsIHVzZXMgYSBkaWZmZXJlbnQgcmVuZGl0aW9uICh1c3VhbGx5IGdyZXlpc2gpIGFuZCBkb2VzIG5vdCBhbGxvdyBzZWxlY3RpbmcgaXRzIHZhbHVlLlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvUmFkaW8jY29uZmlnLWRpc2FibGVkKVxuICAgICAqL1xuICAgIGRpc2FibGVkID8gOiBib29sZWFufCdpbmVydCdcbiAgICAvKipcbiAgICAgKiBDb250cm9scyB0aGUgcGxhY2VtZW50IG9mIHRoaXMgd2lkZ2V0IHdoZW4gaXQgaXMgYWRkZWQgdG8gYSBbcGFuZWwncyBdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9QYW5lbClcbiAgICAgKiBbc3RyaXBzIGNvbGxlY3Rpb25dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9QYW5lbCNjb25maWctc3RyaXBzKS4gVHlwaWNhbCB2YWx1ZXMgZm9yIHRoaXMgY29uZmlnIGFyZSBgJ3RvcCdgLFxuICAgICAqIGAnYm90dG9tJ2AsIGAnbGVmdCdgLCBvciBgJ3JpZ2h0J2AsIHdoaWNoIGNhdXNlIHRoZSB3aWRnZXQgdG8gYmUgcGxhY2VkIG9uIHRoYXQgc2lkZSBvZiB0aGUgcGFuZWwnc1xuICAgICAqIGJvZHkuIFN1Y2ggd2lkZ2V0cyBhcmUgY2FsbGVkIFwiZWRnZSBzdHJpcHNcIi5cbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1JhZGlvI2NvbmZpZy1kb2NrKVxuICAgICAqL1xuICAgIGRvY2sgPyA6ICd0b3AnfCdib3R0b20nfCdsZWZ0J3wncmlnaHQnfCdzdGFydCd8J2VuZCd8J2hlYWRlcid8J3ByZS1oZWFkZXInfG9iamVjdFxuICAgIC8qKlxuICAgICAqICpPbmx5IHZhbGlkIGlmIHRoaXMgV2lkZ2V0IGlzIFtmbG9hdGluZ10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1dpZGdldCNjb25maWctZmxvYXRpbmcpLipcbiAgICAgKiBTZXQgdG8gYHRydWVgIHRvIGJlIGFibGUgdG8gZHJhZyBhIHdpZGdldCBmcmVlbHkgb24gdGhlIHBhZ2UuIE9yIHNldCB0byBhbiBvYmplY3Qgd2l0aCBhIMK0aGFuZGxlU2VsZWN0b3LCtFxuICAgICAqIHByb3BlcnR5IHdoaWNoIGNvbnRyb2xzIHdoZW4gYSBkcmFnIHNob3VsZCBzdGFydC5cbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1JhZGlvI2NvbmZpZy1kcmFnZ2FibGUpXG4gICAgICogQHByb3BlcnR5IHtzdHJpbmd9IGhhbmRsZVNlbGVjdG9yIENTUyBzZWxlY3RvciB1c2VkIHRvIGRldGVybWluZSBpZiBkcmFnIGNhbiBiZSBzdGFydGVkIGZyb20gYSBtb3VzZS1kb3duZWQgZWxlbWVudCBpbnNpZGUgdGhlIHdpZGdldFxuICAgICAqL1xuICAgIGRyYWdnYWJsZSA/IDogYm9vbGVhbnxvYmplY3RcbiAgICAvKipcbiAgICAgKiBBbiBvYmplY3Qgc3BlY2lmeWluZyBhdHRyaWJ1dGVzIHRvIGFzc2lnbiB0byB0aGUgcm9vdCBlbGVtZW50IG9mIHRoaXMgd2lkZ2V0LlxuICAgICAqIFNldCBgbnVsbGAgdmFsdWUgdG8gYXR0cmlidXRlIHRvIHJlbW92ZSBpdC5cbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1JhZGlvI2NvbmZpZy1lbGVtZW50QXR0cmlidXRlcylcbiAgICAgKi9cbiAgICBlbGVtZW50QXR0cmlidXRlcyA/IDogUmVjb3JkPHN0cmluZywgc3RyaW5nfG51bGw+XG4gICAgZXh0cmFEYXRhID8gOiBhbnlcbiAgICAvKipcbiAgICAgKiBXaGVuIHRoaXMgd2lkZ2V0IGlzIGEgY2hpbGQgb2YgYSBbQ29udGFpbmVyXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvQ29udGFpbmVyKSwgaXQgd2lsbCBieSBkZWZhdWx0IGJlIHBhcnRpY2lwYXRpbmcgaW4gYVxuICAgICAqIGZsZXhib3ggbGF5b3V0LiBUaGlzIGNvbmZpZyBhbGxvd3MgeW91IHRvIHNldCB0aGlzIHdpZGdldCdzXG4gICAgICogW2ZsZXhdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy9mbGV4KSBzdHlsZS5cbiAgICAgKiBUaGlzIG1heSBiZSBjb25maWd1cmVkIGFzIGEgc2luZ2xlIG51bWJlciBvciBhIGAmbHQ7ZmxleC1ncm93Jmd0OyAmbHQ7ZmxleC1zaHJpbmsmZ3Q7ICZsdDtmbGV4LWJhc2lzJmd0O2AgZm9ybWF0IHN0cmluZy5cbiAgICAgKiBudW1lcmljLW9ubHkgdmFsdWVzIGFyZSBpbnRlcnByZXRlZCBhcyB0aGUgYGZsZXgtZ3Jvd2AgdmFsdWUuXG4gICAgICovXG4gICAgZmxleCA/IDogbnVtYmVyfHN0cmluZ1xuICAgIC8qKlxuICAgICAqIFNldCB0byBgdHJ1ZWAgdG8gbW92ZSB0aGUgd2lkZ2V0IG91dCBvZiB0aGUgZG9jdW1lbnQgZmxvdyBhbmQgcG9zaXRpb24gaXRcbiAgICAgKiBhYnNvbHV0ZWx5IGluIGJyb3dzZXIgdmlld3BvcnQgc3BhY2UuXG4gICAgICovXG4gICAgZmxvYXRpbmcgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBXaWRnZXQncyBoZWlnaHQsIHVzZWQgdG8gc2V0IGVsZW1lbnQgYHN0eWxlLmhlaWdodGAuIEVpdGhlciBzcGVjaWZ5IGEgdmFsaWQgaGVpZ2h0IHN0cmluZyBvciBhIG51bWJlcixcbiAgICAgKiB3aGljaCB3aWxsIGdldCAncHgnIGFwcGVuZGVkLiBXZSByZWNvbW1lbmQgdXNpbmcgQ1NTIGFzIHRoZSBwcmltYXJ5IHdheSB0byBjb250cm9sIGhlaWdodCwgYnV0IGluIHNvbWVcbiAgICAgKiBjYXNlcyB0aGlzIGNvbmZpZyBpcyBjb252ZW5pZW50LlxuICAgICAqL1xuICAgIGhlaWdodCA/IDogc3RyaW5nfG51bWJlclxuICAgIC8qKlxuICAgICAqIENvbmZpZ3VyZSB3aXRoIHRydWUgdG8gbWFrZSB3aWRnZXQgaW5pdGlhbGx5IGhpZGRlbi5cbiAgICAgKi9cbiAgICBoaWRkZW4gPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiAqT25seSB2YWxpZCBpZiB0aGlzIFdpZGdldCBpcyBbZmxvYXRpbmddKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9XaWRnZXQjY29uZmlnLWZsb2F0aW5nKS4qXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9SYWRpbyNjb25maWctaGlkZUFuaW1hdGlvbilcbiAgICAgKi9cbiAgICBoaWRlQW5pbWF0aW9uID8gOiBib29sZWFufG9iamVjdFxuICAgIC8qKlxuICAgICAqIFNwZWNpZnkgYHRydWVgIHRvIGhpZ2hsaWdodCBmaWVsZCBhZnRlciBleHRlcm5hbCB2YWx1ZSBjaGFuZ2VzXG4gICAgICovXG4gICAgaGlnaGxpZ2h0RXh0ZXJuYWxDaGFuZ2UgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBBbiBvcHRpb25hbCBzdHJpbmcgdG8gZGlzcGxheSBpbnNpZGUgdGhlIGlucHV0IGZpZWxkIGFzIGFuIG92ZXJsYXkuIFRoaXMgY2FuIGJlIHVzZWZ1bCBmb3IgZGlzcGxheWluZ1xuICAgICAqIGEgZmllbGQncyB1bml0cy5cbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1JhZGlvI2NvbmZpZy1oaW50KVxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBkYXRhIEEgZGF0YSBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0LkZpZWxkfSBkYXRhLnNvdXJjZSBBIHJlZmVyZW5jZSB0byB0aGUgZmllbGQgaW5zdGFuY2VcbiAgICAgKiBAcGFyYW0ge2FueX0gZGF0YS52YWx1ZSBUaGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgZmllbGRcbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgICAqL1xuICAgIGhpbnQgPyA6IHN0cmluZ3woKGRhdGE6IHsgc291cmNlOiBGaWVsZCwgdmFsdWU6IGFueSB9KSA9PiBzdHJpbmcpXG4gICAgLyoqXG4gICAgICogVGhpcyBjb25maWcgaXMgc2ltaWxhciB0byBbaGludF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L0ZpZWxkI2NvbmZpZy1oaW50KSBleGNlcHQgdGhhdCB0aGlzIGNvbmZpZyBpcyB1c2VkIHRvIGRpc3BsYXkgSFRNTCBjb250ZW50LlxuICAgICAqIFNpbmNlIHRoaXMgY2FuIGFsbG93IG1hbGljaW91cyBjb250ZW50IHRvIGJlIGV4ZWN1dGVkLCBiZSBzdXJlIG5vdCB0byBpbmNsdWRlIHVzZXItZW50ZXJlZCBkYXRhIG9yIHRvXG4gICAgICogZW5jb2RlIHN1Y2ggZGF0YSAoc2VlIFtlbmNvZGVIdG1sXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS9oZWxwZXIvU3RyaW5nSGVscGVyI2Z1bmN0aW9uLWVuY29kZUh0bWwtc3RhdGljKSkuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9SYWRpbyNjb25maWctaGludEh0bWwpXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGRhdGEgQSBkYXRhIG9iamVjdFxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuRmllbGR9IGRhdGEuc291cmNlIEEgcmVmZXJlbmNlIHRvIHRoZSBmaWVsZCBpbnN0YW5jZVxuICAgICAqIEBwYXJhbSB7YW55fSBkYXRhLnZhbHVlIFRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBmaWVsZFxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAgICovXG4gICAgaGludEh0bWwgPyA6IHN0cmluZ3woKGRhdGE6IHsgc291cmNlOiBGaWVsZCwgdmFsdWU6IGFueSB9KSA9PiBzdHJpbmcpXG4gICAgLyoqXG4gICAgICogV2lkZ2V0IGlkLCBpZiBub3Qgc3BlY2lmaWVkIG9uZSB3aWxsIGJlIGdlbmVyYXRlZC4gQWxzbyB1c2VkIGZvciBsb29rdXBzIHRocm91Z2ggV2lkZ2V0LmdldEJ5SWRcbiAgICAgKi9cbiAgICBpZCA/IDogc3RyaW5nXG4gICAgLyoqXG4gICAgICogRGV0ZXJtaW5lcyBpZiB0aGUgd2lkZ2V0cyByZWFkLW9ubHkgc3RhdGUgc2hvdWxkIGJlIGNvbnRyb2xsZWQgYnkgaXRzIHBhcmVudC5cbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1JhZGlvI2NvbmZpZy1pZ25vcmVQYXJlbnRSZWFkT25seSlcbiAgICAgKi9cbiAgICBpZ25vcmVQYXJlbnRSZWFkT25seSA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIFNldCB0aGlzIGNvbmZpZyB0byBgdHJ1ZWAgdG8gYWx3YXlzIGRpc3BsYXkgaXRlbXMgaG9yaXpvbnRhbGx5IGFsb25nIHdpdGggdGhpcyBmaWVsZC4gVGhpcyBhc3NpZ25zIGFuXG4gICAgICogW2hib3hdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9sYXlvdXQvQm94KSBhcyB0aGUgW2xheW91dF0oI0NvcmUvd2lkZ2V0L0NvbnRhaW5lciNjb25maWctbGF5b3V0KSB0byB0aGVcbiAgICAgKiBbY29udGFpbmVyXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvRmllbGQjY29uZmlnLWNvbnRhaW5lcikuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9SYWRpbyNjb25maWctaW5saW5lKVxuICAgICAqL1xuICAgIGlubGluZSA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIFRleHQgYWxpZ25tZW50IGZvciB0aGUgaW5wdXQgZmllbGQuXG4gICAgICovXG4gICAgaW5wdXRBbGlnbiA/IDogc3RyaW5nXG4gICAgLyoqXG4gICAgICogU2V0cyBjdXN0b20gYXR0cmlidXRlcyBvZiB0aGUgdW5kZXJseWluZyBpbnB1dCBlbGVtZW50LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHJlZmVyIHRvXG4gICAgICogW01ETl0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9BdHRyaWJ1dGVzKVxuICAgICAqL1xuICAgIGlucHV0QXR0cmlidXRlcyA/IDogUmVjb3JkPHN0cmluZywgc3RyaW5nPlxuICAgIC8qKlxuICAgICAqIElmIHlvdSBuZWVkIHRvIHVzZSBzb21ldGhpbmcgZWxzZSB0aGFuIGEgZGVmYXVsdCBgaW5wdXRgIGVsZW1lbnQsIGFzIHRoZSBpbnB1dCBlbGVtZW50LCBwcm92aWRlIHRoZSB0YWdcbiAgICAgKiBuYW1lIGhlcmUuIFBsZWFzZSBub3RlIHRoYXQgdGhpcyBpcyB1c2VkIGZvciBhZHZhbmNlZCB1c2FnZSBvbmx5LCBmb3IgZXhhbXBsZSB3aGVuIHVzaW5nIFdlYkNvbXBvbmVudHNcbiAgICAgKiAoY3VzdG9tIGVsZW1lbnRzKSwgYW5kIHRoYXQgdGhlIGNvbmZpZ3VyZWQgZWxlbWVudCBtdXN0IGZ1bGZpbCB0aGUgc2FtZSBjb250cmFjdCBhcyBhIHJlZ3VsYXIgaW5wdXRcbiAgICAgKiBlbGVtZW50LlxuICAgICAqL1xuICAgIGlucHV0VGFnID8gOiBzdHJpbmdcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBgdHlwZWAgYXR0cmlidXRlIG9mIHRoZSB1bmRlcmx5aW5nIGlucHV0IGVsZW1lbnQgKHBhc3N3b3JkLCBoaWRkZW4sIGRhdGUsIGNvbG9yLCBldGMuKS5cbiAgICAgKi9cbiAgICBpbnB1dFR5cGUgPyA6IHN0cmluZ1xuICAgIC8qKlxuICAgICAqIFRoZSB3aWR0aCB0byBhcHBseSB0byB0aGUgYC5iLWZpZWxkLWlubmVyYCBlbGVtZW50LCB3aGljaCBlbmNvbXBhc3NlcyB0aGUgYGlucHV0YCBlbGVtZW50IGFuZCBhbnlcbiAgICAgKiB0cmlnZ2Vycy4gSWYgYSBudW1iZXIgaXMgc3BlY2lmaWVkLCBgcHhgIHdpbGwgYmUgdXNlZC5cbiAgICAgKi9cbiAgICBpbnB1dFdpZHRoID8gOiBzdHJpbmd8bnVtYmVyXG4gICAgLyoqXG4gICAgICogRWxlbWVudCAob3IgZWxlbWVudCBpZCkgdG8gaW5zZXJ0IHRoaXMgd2lkZ2V0IGJlZm9yZS4gSWYgcHJvdmlkZWQsIFthcHBlbmRUb10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1dpZGdldCNjb25maWctYXBwZW5kVG8pIGNvbmZpZyBpcyBpZ25vcmVkLlxuICAgICAqL1xuICAgIGluc2VydEJlZm9yZSA/IDogSFRNTEVsZW1lbnR8c3RyaW5nXG4gICAgLyoqXG4gICAgICogRWxlbWVudCAob3IgZWxlbWVudCBpZCkgdG8gYXBwZW5kIHRoaXMgd2lkZ2V0IGVsZW1lbnQgdG8sIGFzIGEgZmlyc3QgY2hpbGQuIElmIHByb3ZpZGVkLCBbYXBwZW5kVG9dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9XaWRnZXQjY29uZmlnLWFwcGVuZFRvKSBjb25maWcgaXMgaWdub3JlZC5cbiAgICAgKi9cbiAgICBpbnNlcnRGaXJzdCA/IDogSFRNTEVsZW1lbnR8c3RyaW5nXG4gICAgLyoqXG4gICAgICogQW4gb2JqZWN0IHdob3NlIGtleXMgYXJlIHRoZSBba2V5XShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvS2V5Ym9hcmRFdmVudC9rZXkpIG5hbWVcbiAgICAgKiBhbmQgb3B0aW9uYWwgbW9kaWZpZXIgcHJlZml4ZXM6IGAnQ3RybCsnYCwgYCdBbHQrJ2AsIGAnTWV0YSsnYCwgYW5kIGAnU2hpZnQrJ2AgKGNhc2UtaW5zZW5zaXRpdmUpLiBUaGUgdmFsdWVzXG4gICAgICogYXJlIHRoZSBuYW1lIG9mIHRoZSBpbnN0YW5jZSBtZXRob2QgdG8gY2FsbCB3aGVuIHRoZSBrZXlzdHJva2UgaXMgcmVjZWl2ZWQuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9SYWRpbyNjb25maWcta2V5TWFwKVxuICAgICAqL1xuICAgIGtleU1hcCA/IDogUmVjb3JkPHN0cmluZywgS2V5TWFwQ29uZmlnPlxuICAgIC8qKlxuICAgICAqIFRoZSBkZWxheSBpbiBtaWxsaXNlY29uZHMgdG8gd2FpdCBhZnRlciB0aGUgbGFzdCBrZXlzdHJva2UgYmVmb3JlIHRyaWdnZXJpbmcgYSBjaGFuZ2UgZXZlbnQuXG4gICAgICogU2V0IHRvIDAgdG8gbm90IHRyaWdnZXIgY2hhbmdlIGV2ZW50cyBmcm9tIGtleXN0cm9rZXMgKGxpc3RlbiBmb3IgaW5wdXQgZXZlbnQgaW5zdGVhZCB0byBoYXZlXG4gICAgICogaW1tZWRpYXRlIGZlZWRiYWNrLCBjaGFuZ2Ugd2lsbCBzdGlsbCBiZSB0cmlnZ2VyZWQgb24gYmx1cikuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9SYWRpbyNjb25maWcta2V5U3Ryb2tlQ2hhbmdlRGVsYXkpXG4gICAgICovXG4gICAga2V5U3Ryb2tlQ2hhbmdlRGVsYXkgPyA6IG51bWJlclxuICAgIC8qKlxuICAgICAqIExhYmVsLCBwcmVwZW5kZWQgdG8gZmllbGRcbiAgICAgKi9cbiAgICBsYWJlbCA/IDogc3RyaW5nXG4gICAgLyoqXG4gICAgICogQ1NTIGNsYXNzIG5hbWUgb3IgY2xhc3MgbmFtZXMgdG8gYWRkIHRvIGFueSBjb25maWd1cmVkIFtsYWJlbF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L21peGluL0xhYmVsYWJsZSNjb25maWctbGFiZWwpXG4gICAgICovXG4gICAgbGFiZWxDbHMgPyA6IHN0cmluZ3xvYmplY3RcbiAgICAvKipcbiAgICAgKiBMYWJlbCBwb3NpdGlvbiwgZWl0aGVyICdiZWZvcmUnIHRoZSBmaWVsZCBvciAnYWJvdmUnIHRoZSBmaWVsZFxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvUmFkaW8jY29uZmlnLWxhYmVsUG9zaXRpb24pXG4gICAgICovXG4gICAgbGFiZWxQb3NpdGlvbiA/IDogJ2JlZm9yZSd8J2Fib3ZlJ3xudWxsXG4gICAgLyoqXG4gICAgICogVGhlIGxhYmVscyB0byBhZGQgZWl0aGVyIGJlZm9yZSBvciBhZnRlciB0aGUgaW5wdXQgZmllbGQuXG4gICAgICogRWFjaCBsYWJlbCBtYXkgaGF2ZSB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9SYWRpbyNjb25maWctbGFiZWxzKVxuICAgICAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBodG1sIExhYmVsIHRleHRcbiAgICAgKiBAcHJvcGVydHkgeydzdGFydCcsJ2VuZCd9IGFsaWduIFdoaWNoIGVuZCBvZiB0aGUgZmlsZSB0aGUgbGFiZWwgc2hvdWxkIGdvXG4gICAgICovXG4gICAgbGFiZWxzID8gOiBvYmplY3RbXVxuICAgIC8qKlxuICAgICAqIFRoZSB3aWR0aCB0byBhcHBseSB0byB0aGUgYCZsdDtsYWJlbCZndDtgIGVsZW1lbnQuIElmIGEgbnVtYmVyIGlzIHNwZWNpZmllZCwgYHB4YCB3aWxsIGJlIHVzZWQuXG4gICAgICovXG4gICAgbGFiZWxXaWR0aCA/IDogc3RyaW5nfG51bWJlclxuICAgIC8qKlxuICAgICAqIFRoZSBsaXN0ZW5lciBzZXQgZm9yIHRoaXMgb2JqZWN0LlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvUmFkaW8jY29uZmlnLWxpc3RlbmVycylcbiAgICAgKi9cbiAgICBsaXN0ZW5lcnMgPyA6IFJhZGlvTGlzdGVuZXJzXG4gICAgLyoqXG4gICAgICogQSBjbGFzcyB0cmFuc2xhdGlvbnMgb2Ygd2hpY2ggYXJlIHVzZWQgZm9yIHRyYW5zbGF0aW5nIHRoaXMgZW50aXR5LlxuICAgICAqIFRoaXMgaXMgb2Z0ZW4gdXNlZCB3aGVuIHRyYW5zbGF0aW9ucyBvZiBhbiBpdGVtIGFyZSBkZWZpbmVkIG9uIGl0cyBjb250YWluZXIgY2xhc3MuXG4gICAgICogRm9yIGV4YW1wbGU6XG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9SYWRpbyNjb25maWctbG9jYWxlQ2xhc3MpXG4gICAgICovXG4gICAgbG9jYWxlQ2xhc3MgPyA6IHR5cGVvZiBCYXNlXG4gICAgLyoqXG4gICAgICogU2V0IHRvIGBmYWxzZWAgdG8gZGlzYWJsZSBsb2NhbGl6YXRpb24gb2YgdGhpcyBvYmplY3QuXG4gICAgICovXG4gICAgbG9jYWxpemFibGUgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBMaXN0IG9mIHByb3BlcnRpZXMgd2hpY2ggdmFsdWVzIHNob3VsZCBiZSB0cmFuc2xhdGVkIGF1dG9tYXRpY2FsbHkgdXBvbiBhIGxvY2FsZSBhcHBseWluZy5cbiAgICAgKiBJbiBjYXNlIHRoZXJlIGlzIGEgbmVlZCB0byBsb2NhbGl6ZSBub3QgdHlwaWNhbCB2YWx1ZSAobm90IGEgU3RyaW5nIHZhbHVlIG9yIGEgZmllbGQgd2l0aCByZS1kZWZpbmVkIHNldHRlci9nZXR0ZXIpLFxuICAgICAqIHlvdSBjb3VsZCB1c2UgJ2xvY2FsZUtleScgbWV0YSBjb25maWd1cmF0aW9uLlxuICAgICAqIEV4YW1wbGU6XG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9SYWRpbyNjb25maWctbG9jYWxpemFibGVQcm9wZXJ0aWVzKVxuICAgICAqL1xuICAgIGxvY2FsaXphYmxlUHJvcGVydGllcyA/IDogc3RyaW5nW11cbiAgICAvKipcbiAgICAgKiBXaWRnZXQncyBtYXJnaW4uIFRoaXMgbWF5IGJlIGNvbmZpZ3VyZWQgYXMgYSBzaW5nbGUgbnVtYmVyIG9yIGEgYFRSQkxgIGZvcm1hdCBzdHJpbmcuXG4gICAgICogbnVtZXJpYy1vbmx5IHZhbHVlcyBhcmUgaW50ZXJwcmV0ZWQgYXMgcGl4ZWxzLlxuICAgICAqL1xuICAgIG1hcmdpbiA/IDogbnVtYmVyfHN0cmluZ1xuICAgIC8qKlxuICAgICAqIFRoaXMgY29uZmlnIG9iamVjdCBjb250YWlucyB0aGUgZGVmYXVsdHMgZm9yIHRoZSBbTWFza10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L01hc2spIGNyZWF0ZWQgZm9yIHRoZVxuICAgICAqIFttYXNrZWRdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9XaWRnZXQjY29uZmlnLW1hc2tlZCkgY29uZmlnLiBBbnkgcHJvcGVydGllcyBzcGVjaWZpZWQgaW4gdGhlIGBtYXNrZWRgIGNvbmZpZyB3aWxsIG92ZXJyaWRlIHRoZXNlXG4gICAgICogdmFsdWVzLlxuICAgICAqL1xuICAgIG1hc2tEZWZhdWx0cyA/IDogTWFza0NvbmZpZ1xuICAgIC8qKlxuICAgICAqIFNldCB0byBgdHJ1ZWAgdG8gYXBwbHkgdGhlIGRlZmF1bHQgbWFzayB0byB0aGUgd2lkZ2V0LiBBbHRlcm5hdGl2ZWx5LCB0aGlzIGNhbiBiZSB0aGUgbWFzayBtZXNzYWdlIG9yIGFcbiAgICAgKiBbTWFza10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L01hc2spIGNvbmZpZyBvYmplY3QuXG4gICAgICovXG4gICAgbWFza2VkID8gOiBib29sZWFufHN0cmluZ3xNYXNrQ29uZmlnXG4gICAgLyoqXG4gICAgICogVGhlIGVsZW1lbnQncyBtYXhIZWlnaHQuIENhbiBiZSBlaXRoZXIgYSBTdHJpbmcgb3IgYSBOdW1iZXIgKHdoaWNoIHdpbGwgaGF2ZSAncHgnIGFwcGVuZGVkKS4gTm90ZSB0aGF0XG4gICAgICogbGlrZSBbaGVpZ2h0XShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvV2lkZ2V0I2NvbmZpZy1oZWlnaHQpLCAqcmVhZGluZyogdGhlIHZhbHVlIHdpbGwgcmV0dXJuIHRoZSBudW1lcmljIHZhbHVlIGluIHBpeGVscy5cbiAgICAgKi9cbiAgICBtYXhIZWlnaHQgPyA6IHN0cmluZ3xudW1iZXJcbiAgICAvKipcbiAgICAgKiAqT25seSB2YWxpZCBpZiB0aGlzIFdpZGdldCBpcyBbZmxvYXRpbmddKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9XaWRnZXQjY29uZmlnLWZsb2F0aW5nKS4qXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9SYWRpbyNjb25maWctbWF4aW1pemVPbk1vYmlsZSlcbiAgICAgKi9cbiAgICBtYXhpbWl6ZU9uTW9iaWxlID8gOiBudW1iZXJ8c3RyaW5nXG4gICAgLyoqXG4gICAgICogVGhlIGVsZW1lbnRzIG1heFdpZHRoLiBDYW4gYmUgZWl0aGVyIGEgU3RyaW5nIG9yIGEgTnVtYmVyICh3aGljaCB3aWxsIGhhdmUgJ3B4JyBhcHBlbmRlZCkuIE5vdGUgdGhhdFxuICAgICAqIGxpa2UgW3dpZHRoXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvV2lkZ2V0I2NvbmZpZy13aWR0aCksICpyZWFkaW5nKiB0aGUgdmFsdWUgd2lsbCByZXR1cm4gdGhlIG51bWVyaWMgdmFsdWUgaW4gcGl4ZWxzLlxuICAgICAqL1xuICAgIG1heFdpZHRoID8gOiBzdHJpbmd8bnVtYmVyXG4gICAgLyoqXG4gICAgICogVGhlIGVsZW1lbnQncyBtaW5IZWlnaHQuIENhbiBiZSBlaXRoZXIgYSBTdHJpbmcgb3IgYSBOdW1iZXIgKHdoaWNoIHdpbGwgaGF2ZSAncHgnIGFwcGVuZGVkKS4gTm90ZSB0aGF0XG4gICAgICogbGlrZSBbaGVpZ2h0XShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvV2lkZ2V0I2NvbmZpZy1oZWlnaHQpLCAqcmVhZGluZyogdGhlIHZhbHVlIHdpbGwgcmV0dXJuIHRoZSBudW1lcmljIHZhbHVlIGluIHBpeGVscy5cbiAgICAgKi9cbiAgICBtaW5IZWlnaHQgPyA6IHN0cmluZ3xudW1iZXJcbiAgICAvKipcbiAgICAgKiBUaGUgZWxlbWVudHMgbWluV2lkdGguIENhbiBiZSBlaXRoZXIgYSBTdHJpbmcgb3IgYSBOdW1iZXIgKHdoaWNoIHdpbGwgaGF2ZSAncHgnIGFwcGVuZGVkKS4gTm90ZSB0aGF0XG4gICAgICogbGlrZSBbd2lkdGhdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9XaWRnZXQjY29uZmlnLXdpZHRoKSwgKnJlYWRpbmcqIHRoZSB2YWx1ZSB3aWxsIHJldHVybiB0aGUgbnVtZXJpYyB2YWx1ZSBpbiBwaXhlbHMuXG4gICAgICovXG4gICAgbWluV2lkdGggPyA6IHN0cmluZ3xudW1iZXJcbiAgICAvKipcbiAgICAgKiBXaGVuIHRoaXMgaXMgY29uZmlndXJlZCBhcyBgdHJ1ZWAgYSBbUmVzaXplT2JzZXJ2ZXJdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9SZXNpemVPYnNlcnZlcilcbiAgICAgKiBpcyB1c2VkIHRvIG1vbml0b3IgdGhpcyBlbGVtZW50IGZvciBzaXplIGNoYW5nZXMgY2F1c2VkIGJ5IGVpdGhlciBzdHlsZSBtYW5pcHVsYXRpb24sIG9yIGJ5IENTU1xuICAgICAqIGxheW91dC5cbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1JhZGlvI2NvbmZpZy1tb25pdG9yUmVzaXplKVxuICAgICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gaW1tZWRpYXRlIFNldCB0byBgdHJ1ZWAgdG8gcmVjZWl2ZSByZXNpemUgbm90aWZpY2F0aW9ucyBpbW1lZGlhdGVseS5cbiAgICAgKi9cbiAgICBtb25pdG9yUmVzaXplID8gOiBib29sZWFufG9iamVjdFxuICAgIC8qKlxuICAgICAqIE5hbWUgb2YgdGhlIGZpZWxkIHdoaWNoIGlzIHVzZWQgYXMgYSBrZXkgdG8gZ2V0L3NldCB2YWx1ZXMgZnJvbS90byB0aGUgZmllbGQuXG4gICAgICogVXNlZCBwcmlvciB0byBbcmVmXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvV2lkZ2V0I2NvbmZpZy1yZWYpIGFuZCBbaWRdKCNDb3JlL3dpZGdldC9XaWRnZXQjY29uZmlnLWlkKSBpblxuICAgICAqIFtDb250YWluZXIudmFsdWVzXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvQ29udGFpbmVyI3Byb3BlcnR5LXZhbHVlcykuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9SYWRpbyNjb25maWctbmFtZSlcbiAgICAgKi9cbiAgICBuYW1lID8gOiBzdHJpbmdcbiAgICAvKipcbiAgICAgKiBTZXQgdG8gYHRydWVgIHdoZW4gYSB3aWRnZXQgaXMgcmVuZGVyZWQgaW50byBhbm90aGVyIHdpZGdldCdzIFtjb250ZW50RWxlbWVudF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1dpZGdldCNwcm9wZXJ0eS1jb250ZW50RWxlbWVudCksIGJ1dCBtdXN0XG4gICAgICogbm90IHBhcnRpY2lwYXRlIGluIHRoZSBzdGFuZGFyZCBsYXlvdXQgb2YgdGhhdCB3aWRnZXQsIGFuZCBtdXN0IGJlIHBvc2l0aW9uZWQgcmVsYXRpdmVseSB0byB0aGF0XG4gICAgICogd2lkZ2V0J3MgW2NvbnRlbnRFbGVtZW50XShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvV2lkZ2V0I3Byb3BlcnR5LWNvbnRlbnRFbGVtZW50KS5cbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1JhZGlvI2NvbmZpZy1wb3NpdGlvbmVkKVxuICAgICAqL1xuICAgIHBvc2l0aW9uZWQgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBQcmV2ZW50IHRvb2x0aXAgZnJvbSBiZWluZyBkaXNwbGF5ZWQgb24gdG91Y2ggZGV2aWNlcy4gVXNlZnVsIGZvciBleGFtcGxlIGZvciBidXR0b25zIHRoYXQgZGlzcGxheSBhXG4gICAgICogbWVudSBvbiBjbGljayBldGMsIHNpbmNlIHRoZSB0b29sdGlwIHdvdWxkIGJlIGRpc3BsYXllZCBhdCB0aGUgc2FtZSB0aW1lLlxuICAgICAqL1xuICAgIHByZXZlbnRUb29sdGlwT25Ub3VjaCA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIE1ha2VzIHRoZSBmaWVsZCB1bm1vZGlmaWFibGUgYnkgdXNlciBhY3Rpb24uIFRoZSBpbnB1dCBhcmVhIGlzIG5vdCBlZGl0YWJsZSwgYW5kIHRyaWdnZXJzXG4gICAgICogYXJlIHVucmVzcG9uc2l2ZS5cbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1JhZGlvI2NvbmZpZy1yZWFkT25seSlcbiAgICAgKi9cbiAgICByZWFkT25seSA/IDogYm9vbGVhblxuICAgIHJlbGF5U3RvcmVFdmVudHMgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBDb25maWd1cmUgYXMgYHRydWVgIHRvIGluZGljYXRlIHRoYXQgYSBgbnVsbGAgZmllbGQgdmFsdWUgaXMgdG8gYmUgbWFya2VkIGFzIGludmFsaWQuIFRoaXMgd2lsbFxuICAgICAqIG9wdGlvbmFsbHkgYXBwZW5kIGEgKiB0byB0aGUgZmllbGQgbGFiZWwgaWYgW3Nob3dSZXF1aXJlZEluZGljYXRvcl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L0ZpZWxkI3Byb3BlcnR5LXNob3dSZXF1aXJlZEluZGljYXRvcikgaXMgc2V0LlxuICAgICAqL1xuICAgIHJlcXVpcmVkID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogSWYgdGhpcyBmaWVsZCBpcyBub3QgW3JlYWRPbmx5XShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvRmllbGQjY29uZmlnLXJlYWRPbmx5KSwgdGhlbiBzZXR0aW5nIHRoaXMgb3B0aW9uIG1lYW5zIHRoYXQgcHJlc3NpbmdcbiAgICAgKiB0aGUgPGtiZD5Fc2NhcGU8L2tiZD4ga2V5IGFmdGVyIGVkaXRpbmcgdGhlIGZpZWxkIHdpbGwgcmV2ZXJ0IHRoZSBmaWVsZCB0byB0aGUgdmFsdWUgaXQgaGFkIHdoZW5cbiAgICAgKiB0aGUgdXNlciBmb2N1c2VkIHRoZSBmaWVsZC4gSWYgdGhlIGZpZWxkIGlzICpub3QqIGNoYW5nZWQgZnJvbSB3aGVuIGZvY3VzZWQsIHRoZSBbY2xlYXJhYmxlXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvRmllbGQjY29uZmlnLWNsZWFyYWJsZSlcbiAgICAgKiBiZWhhdmlvdXIgd2lsbCBiZSBhY3RpdmF0ZWQuXG4gICAgICovXG4gICAgcmV2ZXJ0T25Fc2NhcGUgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBDb25maWd1cmUgYXMgYHRydWVgIHRvIGhhdmUgdGhlIGNvbXBvbmVudCBkaXNwbGF5IGEgdHJhbnNsdWNlbnQgcmlwcGxlIHdoZW4gaXRzXG4gICAgICogW2ZvY3VzRWxlbWVudF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1dpZGdldCNwcm9wZXJ0eS1mb2N1c0VsZW1lbnQpLCBvciBbZWxlbWVudF0oI0NvcmUvd2lkZ2V0L1dpZGdldCNwcm9wZXJ0eS1lbGVtZW50KSBpcyB0YXBwZWQgPGVtPmlmIHRoZVxuICAgICAqIGN1cnJlbnQgdGhlbWUgc3VwcG9ydHMgcmlwcGxlczwvZW0+LiBPdXQgb2YgdGhlIGJveCwgb25seSB0aGUgTWF0ZXJpYWwgdGhlbWUgc3VwcG9ydHMgcmlwcGxlcy5cbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1JhZGlvI2NvbmZpZy1yaXBwbGUpXG4gICAgICogQHByb3BlcnR5IHtzdHJpbmd9IFtkZWxlZ2F0ZV0gQSBDU1Mgc2VsZWN0b3IgdG8gZmlsdGVyIHdoaWNoIGNoaWxkIGVsZW1lbnRzIHRyaWdnZXIgcmlwcGxlcy4gQnkgZGVmYXVsdCwgdGhlIHJpcHBsZSBpcyBjbGlwcGVkIHRvIHRoZSB0cmlnZ2VyaW5nIGVsZW1lbnQuXG4gICAgICogQHByb3BlcnR5IHtzdHJpbmd9IFtjb2xvcl0gQSBDU1MgY29sb3IgbmFtZSBvciBzcGVjaWZpY2F0aW9uLlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbcmFkaXVzXSBUaGUgZW5kaW5nIHJhZGl1cyBvZiB0aGUgcmlwcGxlLiBOb3RlIHRoYXQgaXQgd2lsbCBiZSBjbGlwcGVkIGJ5IHRoZSB0YXJnZXQgZWxlbWVudCBieSBkZWZhdWx0LlxuICAgICAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbY2xpcF0gQSBzdHJpbmcgd2hpY2ggZGVzY3JpYmVzIGhvdyB0byBjbGlwIHRoZSByaXBwbGUgaWYgaXQgaXMgbm90IHRvIGJlIGNsaXBwZWQgdG8gdGhlIGRlZmF1bHQgZWxlbWVudC4gRWl0aGVyIHRoZSBwcm9wZXJ0eSBvZiB0aGUgd2lkZ2V0IHRvIHVzZSBhcyB0aGUgY2xpcHBpbmcgZWxlbWVudCwgb3IgYSBzZWxlY3RvciB0byBhbGxvdyBjbGlwcGluZyB0byB0aGUgY2xvc2VzdCBtYXRjaGluZyBhbmNlc3RvciB0byB0aGUgdGFyZ2V0IGVsZW1lbnQuXG4gICAgICovXG4gICAgcmlwcGxlID8gOiBib29sZWFufG9iamVjdFxuICAgIC8qKlxuICAgICAqIFRoZSBBUklBIHJvbGUgdG8gYXBwbHkgdG8gdGhpcyB3aWRnZXQncyBlbGVtZW50LiBCeSBkZWZhdWx0LCB0aGlzIGlzIHNldCB0byBgJ3ByZXNlbnRhdGlvbidgIHRvIGF2b2lkXG4gICAgICogYWNjaWRlbnRhbGx5IGFwcGx5aW5nIGEgcm9sZSB3aGljaCBtYXkgaW50ZXJmZXJlIHdpdGggc2NyZWVuIHJlYWRlcnMuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9SYWRpbyNjb25maWctcm9sZSlcbiAgICAgKi9cbiAgICByb2xlID8gOiBzdHJpbmdcbiAgICAvKipcbiAgICAgKiBJZiB5b3UgYXJlIHJlbmRlcmluZyB0aGlzIHdpZGdldCB0byBhIHNoYWRvdyByb290IGluc2lkZSBhIHdlYiBjb21wb25lbnQsIHNldCB0aGlzIGNvbmZpZyB0byB0aGUgc2hhZG93Um9vdC4gSWYgbm90IGluc2lkZSBhIHdlYiBjb21wb25lbnQsIHNldCBpdCB0byBgZG9jdW1lbnQuYm9keWBcbiAgICAgKi9cbiAgICByb290RWxlbWVudCA/IDogU2hhZG93Um9vdHxIVE1MRWxlbWVudFxuICAgIC8qKlxuICAgICAqIFRoaXMgbWF5IGJlIGNvbmZpZ3VyZWQgYXMgYHRydWVgIHRvIG1ha2UgdGhlIHdpZGdldCdzIGVsZW1lbnQgdXNlIHRoZSBgZGlyZWN0aW9uOnJ0bGAgc3R5bGUuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9SYWRpbyNjb25maWctcnRsKVxuICAgICAqL1xuICAgIHJ0bCA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIERlZmluZXMgd2hhdCB0byBkbyBpZiBkb2N1bWVudCBpcyBzY3JvbGxlZCB3aGlsZSBXaWRnZXQgaXMgdmlzaWJsZSAob25seSByZWxldmFudCB3aGVuIGZsb2F0aW5nIGlzIHNldCB0byBgdHJ1ZWApLlxuICAgICAqIFZhbGlkIHZhbHVlczogwrRudWxswrQ6IGRvIG5vdGhpbmcsIMK0aGlkZcK0OiBoaWRlIHRoZSB3aWRnZXQgb3IgwrRyZWFsaWduwrQ6IHJlYWxpZ24gdG8gdGhlIHRhcmdldCBpZiBwb3NzaWJsZS5cbiAgICAgKi9cbiAgICBzY3JvbGxBY3Rpb24gPyA6ICdoaWRlJ3wncmVhbGlnbid8bnVsbFxuICAgIC8qKlxuICAgICAqICpPbmx5IHZhbGlkIGlmIHRoaXMgV2lkZ2V0IGlzIFtmbG9hdGluZ10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1dpZGdldCNjb25maWctZmxvYXRpbmcpLipcbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1JhZGlvI2NvbmZpZy1zaG93QW5pbWF0aW9uKVxuICAgICAqL1xuICAgIHNob3dBbmltYXRpb24gPyA6IGJvb2xlYW58b2JqZWN0XG4gICAgLyoqXG4gICAgICogYHRydWVgIHRvIGF1dG9tYXRpY2FsbHkgZGlzcGxheSBhICogYWZ0ZXIgdGhlIGxhYmVsIGZvciB0aGlzIGZpZWxkIHdoZW4gaXQgaXMgW3JlcXVpcmVkXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvRmllbGQjcHJvcGVydHktcmVxdWlyZWQpLlxuICAgICAqL1xuICAgIHNob3dSZXF1aXJlZEluZGljYXRvciA/IDogc3RyaW5nXG4gICAgLyoqXG4gICAgICogU2V0IHRvIGBmYWxzZWAgdG8gbm90IHNob3cgdGhlIHRvb2x0aXAgd2hlbiB0aGlzIHdpZGdldCBpcyBbZGlzYWJsZWRdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9XaWRnZXQjcHJvcGVydHktZGlzYWJsZWQpXG4gICAgICovXG4gICAgc2hvd1Rvb2x0aXBXaGVuRGlzYWJsZWQgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBTZXQgdG8gYHRydWVgLCBjb21wbGV0ZWx5IGJ5cGFzc2VzIHZhbGlkYXRpb24gbG9naWMgKGNvdWxkIGJlIHVzZXJmdWwgaWYgeW91ciBmaWVsZCBpcyBub3QgYGVkaXRhYmxlYFxuICAgICAqIHRvIHRoZSB1c2VyKS5cbiAgICAgKi9cbiAgICBza2lwVmFsaWRhdGlvbiA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIFByb2dyYW1tYXRpYyBjb250cm9sIG92ZXIgaG93IG1hbnkgY29sdW1ucyB0byBzcGFuIHdoZW4gdXNlZCBpbiBhIGdyaWQgbGF5b3V0LlxuICAgICAqL1xuICAgIHNwYW4gPyA6IG51bWJlclxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIG5hdGl2ZSBgc3BlbGxjaGVja2AgcHJvcGVydHkgb2YgdGhlIHVuZGVybHlpbmcgaW5wdXQgZWxlbWVudC4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHBsZWFzZSByZWZlciB0b1xuICAgICAqIFtNRE5dKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvR2xvYmFsX2F0dHJpYnV0ZXMvc3BlbGxjaGVjaylcbiAgICAgKi9cbiAgICBzcGVsbENoZWNrID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogQSBjb25maWd1cmF0aW9uIGZvciB0aGUgW3RhYl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1RhYikgY3JlYXRlZCBmb3IgdGhpcyB3aWRnZXQgd2hlbiBpdCBpcyBwbGFjZWQgaW4gYVxuICAgICAqIFtUYWJQYW5lbF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1RhYlBhbmVsKS4gRm9yIGV4YW1wbGUsIHRoaXMgY29uZmlnIGNhbiBiZSB1c2VkIHRvIGNvbnRyb2wgdGhlIGljb24gb2YgdGhlIGB0YWJgIGZvclxuICAgICAqIHRoaXMgd2lkZ2V0OlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvUmFkaW8jY29uZmlnLXRhYilcbiAgICAgKi9cbiAgICB0YWIgPyA6IGJvb2xlYW58VGFiQ29uZmlnXG4gICAgLyoqXG4gICAgICogVGhlIHRhYiBpbmRleCBvZiB0aGUgaW5wdXQgZmllbGQgb3IgZmllbGRzLCBvciBgbnVsbGAgZm9yIG5hdHVyYWwgdGFiIG9yZGVyIChyZWNvbW1lbmRlZCkuIFNldHRpbmcgdG8gYDBgXG4gICAgICogaXMgZXF1aXZhbGVudCB0byBuYXR1cmFsIHRhYiBvcmRlciwgYnV0IGlzIHVubmVjZXNzYXJ5IGZvciBmaWVsZHMgc2luY2UgdGhleSBhcmUgbmF0dXJhbGx5IHRhYmJhYmxlXG4gICAgICogKGkuZS4sIGFjY2Vzc2libGUgdmlhIHRoZSBUQUIga2V5KS4gU2V0dGluZyB0byBgLTFgIGRpc2FibGVzIHRhYmJhYmlsaXR5IGJ1dCBhbGxvd3MgZm9yIGZvY3VzIHRvIGJlIHNldFxuICAgICAqIHRvIHRoZSBlbGVtZW50IHByb2dyYW1tYXRpY2FsbHkuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9SYWRpbyNjb25maWctdGFiSW5kZXgpXG4gICAgICovXG4gICAgdGFiSW5kZXggPyA6IG51bWJlclxuICAgIC8qKlxuICAgICAqIFRleHQgdG8gZGlzcGxheSBvbiBjaGVja2JveCBsYWJlbFxuICAgICAqL1xuICAgIHRleHQgPyA6IHN0cmluZ1xuICAgIC8qKlxuICAgICAqIFRleHQgYWxpZ25tZW50OiAnbGVmdCcsICdjZW50ZXInIG9yICdyaWdodCcuIEFsc28gYWNjZXB0cyBkaXJlY3Rpb24gbmV1dHJhbCAnc3RhcnQnIGFuZCAnZW5kJy5cbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1JhZGlvI2NvbmZpZy10ZXh0QWxpZ24pXG4gICAgICovXG4gICAgdGV4dEFsaWduID8gOiAnbGVmdCd8J2NlbnRlcid8J3JpZ2h0J3wnc3RhcnQnfCdlbmQnXG4gICAgLyoqXG4gICAgICogQSB0aXRsZSB0byBkaXNwbGF5IGZvciB0aGUgd2lkZ2V0LiBPbmx5IGluIGVmZmVjdCB3aGVuIGluc2lkZSBhIGNvbnRhaW5lciB0aGF0IHVzZXMgaXQgKHN1Y2ggYXMgVGFiUGFuZWwpXG4gICAgICovXG4gICAgdGl0bGUgPyA6IHN0cmluZ1xuICAgIC8qKlxuICAgICAqIFRvb2x0aXAgZm9yIHRoZSB3aWRnZXQsIGVpdGhlciBhcyBhIHN0cmluZyBvciBhcyBhIFRvb2x0aXAgY29uZmlnIG9iamVjdC5cbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1JhZGlvI2NvbmZpZy10b29sdGlwKVxuICAgICAqL1xuICAgIHRvb2x0aXAgPyA6IHN0cmluZ3xUb29sdGlwQ29uZmlnfG51bGxcbiAgICAvKipcbiAgICAgKiBUaGUgdHJpZ2dlcnMgdG8gYWRkIGVpdGhlciBiZWZvcmUgb3IgYWZ0ZXIgdGhlIGlucHV0IGZpZWxkLiBFYWNoIHByb3BlcnR5IG5hbWUgaXMgdGhlIHJlZmVyZW5jZSBieSB3aGljaFxuICAgICAqIGFuIGluc3RhbnRpYXRlZCBUcmlnZ2VyIFdpZGdldCBtYXkgYmUgcmV0cmlldmVkIGZyb20gdGhlIGxpdmUgYHRyaWdnZXJzYCBwcm9wZXJ0eS5cbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1JhZGlvI2NvbmZpZy10cmlnZ2VycylcbiAgICAgKi9cbiAgICB0cmlnZ2VycyA/IDogUmVjb3JkPHN0cmluZywgRmllbGRUcmlnZ2VyQ29uZmlnPlxuICAgIHR5cGUgPyA6ICdyYWRpbyd8J3JhZGlvYnV0dG9uJ1xuICAgIC8qKlxuICAgICAqIEN1c3RvbSBDU1MgY2xhc3MgbmFtZSBzdWZmaXhlcyB0byBhcHBseSB0byB0aGUgZWxlbWVudHMgcmVuZGVyZWQgYnkgdGhpcyB3aWRnZXQuIFRoaXMgbWF5IGJlIHNwZWNpZmllZFxuICAgICAqIGFzIGEgc3BhY2Ugc2VwYXJhdGVkIHN0cmluZywgYW4gYXJyYXkgb2Ygc3RyaW5ncywgb3IgYXMgYW4gb2JqZWN0IGluIHdoaWNoIHByb3BlcnR5IG5hbWVzIHdpdGggdHJ1dGh5XG4gICAgICogdmFsdWVzIGFyZSB1c2VkIGFzIHRoZSBjbGFzcyBuYW1lcy5cbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1JhZGlvI2NvbmZpZy11aSlcbiAgICAgKi9cbiAgICB1aSA/IDogc3RyaW5nfG9iamVjdFxuICAgIC8qKlxuICAgICAqIFRoZSB2YWx1ZSB0byBwcm92aWRlIGZvciB0aGlzIHdpZGdldCBpbiBbdmFsdWVzXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvQ29udGFpbmVyI3Byb3BlcnR5LXZhbHVlcykgd2hlbiBpdCBpcyBub3RcbiAgICAgKiBbY2hlY2tlZF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L0NoZWNrYm94I3Byb3BlcnR5LWNoZWNrZWQpLlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvUmFkaW8jY29uZmlnLXVuY2hlY2tlZFZhbHVlKVxuICAgICAqL1xuICAgIHVuY2hlY2tlZFZhbHVlID8gOiBhbnlcbiAgICAvKipcbiAgICAgKiBTZXQgdG8gYGZhbHNlYCB0byBub3QgaGlnaGxpZ2h0IGEgZmllbGQgYXMgaW52YWxpZCB3aGlsZSB0eXBpbmcsIHRvIGluc3RlYWQgc2hvdyBpdCBvbiBFTlRFUiBrZXkgcHJlc3NcbiAgICAgKiBvciBzaW1pbGFyLlxuICAgICAqL1xuICAgIHZhbGlkYXRlT25JbnB1dCA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIFRoZSB2YWx1ZSBvZiB0aGUgY2hlY2tib3guIFRoaXMgaXMgdGhlIHNhbWUgYXMgYGNoZWNrZWRgLlxuICAgICAqL1xuICAgIHZhbHVlID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogQSB3aWRnZXRzIHdlaWdodCBkZXRlcm1pbmVzIGl0cyBwb3NpdGlvbiBhbW9uZyBzaWJsaW5ncyB3aGVuIGFkZGVkIHRvIGEgW0NvbnRhaW5lcl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L0NvbnRhaW5lcikuXG4gICAgICogSGlnaGVyIHdlaWdodHMgZ28gZnVydGhlciBkb3duLlxuICAgICAqL1xuICAgIHdlaWdodCA/IDogbnVtYmVyXG4gICAgLyoqXG4gICAgICogV2lkZ2V0J3Mgd2lkdGgsIHVzZWQgdG8gc2V0IGVsZW1lbnQgYHN0eWxlLndpZHRoYC4gRWl0aGVyIHNwZWNpZnkgYSB2YWxpZCB3aWR0aCBzdHJpbmcgb3IgYSBudW1iZXIsIHdoaWNoXG4gICAgICogd2lsbCBnZXQgJ3B4JyBhcHBlbmRlZC4gV2UgcmVjb21tZW5kIHVzaW5nIENTUyBhcyB0aGUgcHJpbWFyeSB3YXkgdG8gY29udHJvbCB3aWR0aCwgYnV0IGluIHNvbWUgY2FzZXNcbiAgICAgKiB0aGlzIGNvbmZpZyBpcyBjb252ZW5pZW50LlxuICAgICAqL1xuICAgIHdpZHRoID8gOiBzdHJpbmd8bnVtYmVyXG4gICAgLyoqXG4gICAgICogVGhlIHggcG9zaXRpb24gZm9yIHRoZSB3aWRnZXQuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9SYWRpbyNjb25maWcteClcbiAgICAgKi9cbiAgICB4ID8gOiBudW1iZXJcbiAgICAvKipcbiAgICAgKiBUaGUgeSBwb3NpdGlvbiBmb3IgdGhlIHdpZGdldC5cbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1JhZGlvI2NvbmZpZy15KVxuICAgICAqL1xuICAgIHkgPyA6IG51bWJlclxuXG59XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yIDogJ2JyeW50dW0tcmFkaW8nLFxuICAgIHRlbXBsYXRlIDogJydcbn0pXG5leHBvcnQgY2xhc3MgQnJ5bnR1bVJhZGlvQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuXG4gICAgcHVibGljIHN0YXRpYyBpbnN0YW5jZUNsYXNzID0gUmFkaW87XG5cbiAgICBwdWJsaWMgc3RhdGljIGluc3RhbmNlTmFtZSA9ICdSYWRpbyc7XG5cbiAgICBwcml2YXRlIHN0YXRpYyBicnludHVtRXZlbnRzOiBzdHJpbmdbXSA9IFtcbiAgICAgICAgJ29uQWN0aW9uJyxcbiAgICAgICAgJ29uQmVmb3JlQ2hhbmdlJyxcbiAgICAgICAgJ29uQmVmb3JlRGVzdHJveScsXG4gICAgICAgICdvbkJlZm9yZUhpZGUnLFxuICAgICAgICAnb25CZWZvcmVTaG93JyxcbiAgICAgICAgJ29uQ2F0Y2hBbGwnLFxuICAgICAgICAnb25DaGFuZ2UnLFxuICAgICAgICAnb25DbGVhcicsXG4gICAgICAgICdvbkNsaWNrJyxcbiAgICAgICAgJ29uRGVzdHJveScsXG4gICAgICAgICdvbkVsZW1lbnRDcmVhdGVkJyxcbiAgICAgICAgJ29uRm9jdXNJbicsXG4gICAgICAgICdvbkZvY3VzT3V0JyxcbiAgICAgICAgJ29uSGlkZScsXG4gICAgICAgICdvbklucHV0JyxcbiAgICAgICAgJ29uUGFpbnQnLFxuICAgICAgICAnb25SZWFkT25seScsXG4gICAgICAgICdvblJlY29tcG9zZScsXG4gICAgICAgICdvblJlc2l6ZScsXG4gICAgICAgICdvblNob3cnLFxuICAgICAgICAnb25UcmlnZ2VyJ1xuICAgIF07XG5cbiAgICBwcml2YXRlIHN0YXRpYyBicnludHVtRmVhdHVyZU5hbWVzOiBzdHJpbmdbXSA9IFtcblxuICAgIF07XG5cbiAgICBwcml2YXRlIHN0YXRpYyBicnludHVtQ29uZmlnczogc3RyaW5nW10gPSBCcnludHVtUmFkaW9Db21wb25lbnQuYnJ5bnR1bUZlYXR1cmVOYW1lcy5jb25jYXQoW1xuICAgICAgICAnYWRvcHQnLFxuICAgICAgICAnYWxpZ24nLFxuICAgICAgICAnYWxpZ25TZWxmJyxcbiAgICAgICAgJ2FuY2hvcicsXG4gICAgICAgICdhcHBlbmRUbycsXG4gICAgICAgICdhcmlhRGVzY3JpcHRpb24nLFxuICAgICAgICAnYXJpYUxhYmVsJyxcbiAgICAgICAgJ2F1dG9Db2xsYXBzZScsXG4gICAgICAgICdhdXRvQ29tcGxldGUnLFxuICAgICAgICAnYXV0b1NlbGVjdCcsXG4gICAgICAgICdiYWRnZScsXG4gICAgICAgICdidWJibGVFdmVudHMnLFxuICAgICAgICAnY2FsbE9uRnVuY3Rpb25zJyxcbiAgICAgICAgJ2NhdGNoRXZlbnRIYW5kbGVyRXhjZXB0aW9ucycsXG4gICAgICAgICdjZW50ZXJlZCcsXG4gICAgICAgICdjaGVja2VkJyxcbiAgICAgICAgJ2NoZWNrZWRWYWx1ZScsXG4gICAgICAgICdjaGVja1ZhbGlkaXR5JyxcbiAgICAgICAgJ2NscycsXG4gICAgICAgICdjb2xvcicsXG4gICAgICAgICdjb2x1bW4nLFxuICAgICAgICAnY29uZmlnJyxcbiAgICAgICAgJ2NvbnN0cmFpblRvJyxcbiAgICAgICAgJ2NvbnRhaW5lcicsXG4gICAgICAgICdjb250YWluVmFsdWVzJyxcbiAgICAgICAgJ2NvbnRlbnRFbGVtZW50Q2xzJyxcbiAgICAgICAgJ2RhdGFGaWVsZCcsXG4gICAgICAgICdkYXRhc2V0JyxcbiAgICAgICAgJ2RlZmF1bHRCaW5kUHJvcGVydHknLFxuICAgICAgICAnZGV0ZWN0Q1NTQ29tcGF0aWJpbGl0eUlzc3VlcycsXG4gICAgICAgICdkaXNhYmxlZCcsXG4gICAgICAgICdkb2NrJyxcbiAgICAgICAgJ2RyYWdnYWJsZScsXG4gICAgICAgICdlbGVtZW50QXR0cmlidXRlcycsXG4gICAgICAgICdleHRyYURhdGEnLFxuICAgICAgICAnZmxleCcsXG4gICAgICAgICdmbG9hdGluZycsXG4gICAgICAgICdoZWlnaHQnLFxuICAgICAgICAnaGlkZGVuJyxcbiAgICAgICAgJ2hpZGVBbmltYXRpb24nLFxuICAgICAgICAnaGlnaGxpZ2h0RXh0ZXJuYWxDaGFuZ2UnLFxuICAgICAgICAnaGludCcsXG4gICAgICAgICdoaW50SHRtbCcsXG4gICAgICAgICdpZCcsXG4gICAgICAgICdpZ25vcmVQYXJlbnRSZWFkT25seScsXG4gICAgICAgICdpbmxpbmUnLFxuICAgICAgICAnaW5wdXRBbGlnbicsXG4gICAgICAgICdpbnB1dEF0dHJpYnV0ZXMnLFxuICAgICAgICAnaW5wdXRUYWcnLFxuICAgICAgICAnaW5wdXRUeXBlJyxcbiAgICAgICAgJ2lucHV0V2lkdGgnLFxuICAgICAgICAnaW5zZXJ0QmVmb3JlJyxcbiAgICAgICAgJ2luc2VydEZpcnN0JyxcbiAgICAgICAgJ2tleU1hcCcsXG4gICAgICAgICdrZXlTdHJva2VDaGFuZ2VEZWxheScsXG4gICAgICAgICdsYWJlbCcsXG4gICAgICAgICdsYWJlbENscycsXG4gICAgICAgICdsYWJlbFBvc2l0aW9uJyxcbiAgICAgICAgJ2xhYmVscycsXG4gICAgICAgICdsYWJlbFdpZHRoJyxcbiAgICAgICAgJ2xpc3RlbmVycycsXG4gICAgICAgICdsb2NhbGVDbGFzcycsXG4gICAgICAgICdsb2NhbGl6YWJsZScsXG4gICAgICAgICdsb2NhbGl6YWJsZVByb3BlcnRpZXMnLFxuICAgICAgICAnbWFyZ2luJyxcbiAgICAgICAgJ21hc2tEZWZhdWx0cycsXG4gICAgICAgICdtYXNrZWQnLFxuICAgICAgICAnbWF4SGVpZ2h0JyxcbiAgICAgICAgJ21heGltaXplT25Nb2JpbGUnLFxuICAgICAgICAnbWF4V2lkdGgnLFxuICAgICAgICAnbWluSGVpZ2h0JyxcbiAgICAgICAgJ21pbldpZHRoJyxcbiAgICAgICAgJ21vbml0b3JSZXNpemUnLFxuICAgICAgICAnbmFtZScsXG4gICAgICAgICdwb3NpdGlvbmVkJyxcbiAgICAgICAgJ3ByZXZlbnRUb29sdGlwT25Ub3VjaCcsXG4gICAgICAgICdyZWFkT25seScsXG4gICAgICAgICdyZWxheVN0b3JlRXZlbnRzJyxcbiAgICAgICAgJ3JlcXVpcmVkJyxcbiAgICAgICAgJ3JldmVydE9uRXNjYXBlJyxcbiAgICAgICAgJ3JpcHBsZScsXG4gICAgICAgICdyb2xlJyxcbiAgICAgICAgJ3Jvb3RFbGVtZW50JyxcbiAgICAgICAgJ3J0bCcsXG4gICAgICAgICdzY3JvbGxBY3Rpb24nLFxuICAgICAgICAnc2hvd0FuaW1hdGlvbicsXG4gICAgICAgICdzaG93UmVxdWlyZWRJbmRpY2F0b3InLFxuICAgICAgICAnc2hvd1Rvb2x0aXBXaGVuRGlzYWJsZWQnLFxuICAgICAgICAnc2tpcFZhbGlkYXRpb24nLFxuICAgICAgICAnc3BhbicsXG4gICAgICAgICdzcGVsbENoZWNrJyxcbiAgICAgICAgJ3RhYicsXG4gICAgICAgICd0YWJJbmRleCcsXG4gICAgICAgICd0ZXh0JyxcbiAgICAgICAgJ3RleHRBbGlnbicsXG4gICAgICAgICd0aXRsZScsXG4gICAgICAgICd0b29sdGlwJyxcbiAgICAgICAgJ3RyaWdnZXJzJyxcbiAgICAgICAgJ3R5cGUnLFxuICAgICAgICAndWknLFxuICAgICAgICAndW5jaGVja2VkVmFsdWUnLFxuICAgICAgICAndmFsaWRhdGVPbklucHV0JyxcbiAgICAgICAgJ3ZhbHVlJyxcbiAgICAgICAgJ3dlaWdodCcsXG4gICAgICAgICd3aWR0aCcsXG4gICAgICAgICd4JyxcbiAgICAgICAgJ3knXG4gICAgXSk7XG5cbiAgICBwcml2YXRlIHN0YXRpYyBicnludHVtQ29uZmlnc09ubHk6IHN0cmluZ1tdID0gW1xuICAgICAgICAnYWRvcHQnLFxuICAgICAgICAnYWxpZ24nLFxuICAgICAgICAnYW5jaG9yJyxcbiAgICAgICAgJ2FyaWFEZXNjcmlwdGlvbicsXG4gICAgICAgICdhcmlhTGFiZWwnLFxuICAgICAgICAnYXV0b0NvbGxhcHNlJyxcbiAgICAgICAgJ2F1dG9Db21wbGV0ZScsXG4gICAgICAgICdhdXRvU2VsZWN0JyxcbiAgICAgICAgJ2J1YmJsZUV2ZW50cycsXG4gICAgICAgICdjZW50ZXJlZCcsXG4gICAgICAgICdjaGVja2VkVmFsdWUnLFxuICAgICAgICAnY2hlY2tWYWxpZGl0eScsXG4gICAgICAgICdjb2xvcicsXG4gICAgICAgICdjb25maWcnLFxuICAgICAgICAnY29uc3RyYWluVG8nLFxuICAgICAgICAnY29udGFpbmVyJyxcbiAgICAgICAgJ2NvbnRhaW5WYWx1ZXMnLFxuICAgICAgICAnY29udGVudEVsZW1lbnRDbHMnLFxuICAgICAgICAnZGF0YUZpZWxkJyxcbiAgICAgICAgJ2RlZmF1bHRCaW5kUHJvcGVydHknLFxuICAgICAgICAnZGV0ZWN0Q1NTQ29tcGF0aWJpbGl0eUlzc3VlcycsXG4gICAgICAgICdkb2NrJyxcbiAgICAgICAgJ2RyYWdnYWJsZScsXG4gICAgICAgICdlbGVtZW50QXR0cmlidXRlcycsXG4gICAgICAgICdmbG9hdGluZycsXG4gICAgICAgICdoaWRlQW5pbWF0aW9uJyxcbiAgICAgICAgJ2hpZ2hsaWdodEV4dGVybmFsQ2hhbmdlJyxcbiAgICAgICAgJ2hpbnQnLFxuICAgICAgICAnaGludEh0bWwnLFxuICAgICAgICAnaWdub3JlUGFyZW50UmVhZE9ubHknLFxuICAgICAgICAnaW5saW5lJyxcbiAgICAgICAgJ2lucHV0QWxpZ24nLFxuICAgICAgICAnaW5wdXRBdHRyaWJ1dGVzJyxcbiAgICAgICAgJ2lucHV0VGFnJyxcbiAgICAgICAgJ2lucHV0VHlwZScsXG4gICAgICAgICdpbnB1dFdpZHRoJyxcbiAgICAgICAgJ2tleVN0cm9rZUNoYW5nZURlbGF5JyxcbiAgICAgICAgJ2xhYmVsQ2xzJyxcbiAgICAgICAgJ2xhYmVsUG9zaXRpb24nLFxuICAgICAgICAnbGFiZWxzJyxcbiAgICAgICAgJ2xhYmVsV2lkdGgnLFxuICAgICAgICAnbGlzdGVuZXJzJyxcbiAgICAgICAgJ2xvY2FsZUNsYXNzJyxcbiAgICAgICAgJ2xvY2FsaXphYmxlJyxcbiAgICAgICAgJ2xvY2FsaXphYmxlUHJvcGVydGllcycsXG4gICAgICAgICdtYXNrRGVmYXVsdHMnLFxuICAgICAgICAnbWFza2VkJyxcbiAgICAgICAgJ21vbml0b3JSZXNpemUnLFxuICAgICAgICAncG9zaXRpb25lZCcsXG4gICAgICAgICdwcmV2ZW50VG9vbHRpcE9uVG91Y2gnLFxuICAgICAgICAncmVsYXlTdG9yZUV2ZW50cycsXG4gICAgICAgICdyZXZlcnRPbkVzY2FwZScsXG4gICAgICAgICdyaXBwbGUnLFxuICAgICAgICAncm9sZScsXG4gICAgICAgICdyb290RWxlbWVudCcsXG4gICAgICAgICdzY3JvbGxBY3Rpb24nLFxuICAgICAgICAnc2hvd0FuaW1hdGlvbicsXG4gICAgICAgICdzaG93VG9vbHRpcFdoZW5EaXNhYmxlZCcsXG4gICAgICAgICdza2lwVmFsaWRhdGlvbicsXG4gICAgICAgICdzcGVsbENoZWNrJyxcbiAgICAgICAgJ3RhYicsXG4gICAgICAgICd0YWJJbmRleCcsXG4gICAgICAgICd0ZXh0JyxcbiAgICAgICAgJ3RleHRBbGlnbicsXG4gICAgICAgICd0aXRsZScsXG4gICAgICAgICd0eXBlJyxcbiAgICAgICAgJ3VpJyxcbiAgICAgICAgJ3VuY2hlY2tlZFZhbHVlJyxcbiAgICAgICAgJ3ZhbGlkYXRlT25JbnB1dCcsXG4gICAgICAgICd3ZWlnaHQnXG4gICAgXTtcblxuICAgIHByaXZhdGUgc3RhdGljIGJyeW50dW1Qcm9wczogc3RyaW5nW10gPSBCcnludHVtUmFkaW9Db21wb25lbnQuYnJ5bnR1bUZlYXR1cmVOYW1lcy5jb25jYXQoW1xuICAgICAgICAnYWxpZ25TZWxmJyxcbiAgICAgICAgJ2FwcGVuZFRvJyxcbiAgICAgICAgJ2JhZGdlJyxcbiAgICAgICAgJ2NhbGxPbkZ1bmN0aW9ucycsXG4gICAgICAgICdjYXRjaEV2ZW50SGFuZGxlckV4Y2VwdGlvbnMnLFxuICAgICAgICAnY2hlY2tlZCcsXG4gICAgICAgICdjbHMnLFxuICAgICAgICAnY29sdW1uJyxcbiAgICAgICAgJ2NvbnRlbnQnLFxuICAgICAgICAnZGF0YXNldCcsXG4gICAgICAgICdkaXNhYmxlZCcsXG4gICAgICAgICdlZGl0YWJsZScsXG4gICAgICAgICdleHRyYURhdGEnLFxuICAgICAgICAnZmxleCcsXG4gICAgICAgICdoZWlnaHQnLFxuICAgICAgICAnaGlkZGVuJyxcbiAgICAgICAgJ2h0bWwnLFxuICAgICAgICAnaWQnLFxuICAgICAgICAnaW5wdXQnLFxuICAgICAgICAnaW5zZXJ0QmVmb3JlJyxcbiAgICAgICAgJ2luc2VydEZpcnN0JyxcbiAgICAgICAgJ2tleU1hcCcsXG4gICAgICAgICdsYWJlbCcsXG4gICAgICAgICdtYXJnaW4nLFxuICAgICAgICAnbWF4SGVpZ2h0JyxcbiAgICAgICAgJ21heGltaXplT25Nb2JpbGUnLFxuICAgICAgICAnbWF4V2lkdGgnLFxuICAgICAgICAnbWluSGVpZ2h0JyxcbiAgICAgICAgJ21pbldpZHRoJyxcbiAgICAgICAgJ25hbWUnLFxuICAgICAgICAncGFyZW50JyxcbiAgICAgICAgJ3BsYWNlaG9sZGVyJyxcbiAgICAgICAgJ3JlYWRPbmx5JyxcbiAgICAgICAgJ3JlcXVpcmVkJyxcbiAgICAgICAgJ3J0bCcsXG4gICAgICAgICdzY3JvbGxhYmxlJyxcbiAgICAgICAgJ3Nob3dSZXF1aXJlZEluZGljYXRvcicsXG4gICAgICAgICdzcGFuJyxcbiAgICAgICAgJ3Rvb2x0aXAnLFxuICAgICAgICAndHJpZ2dlcnMnLFxuICAgICAgICAndmFsdWUnLFxuICAgICAgICAnd2lkdGgnLFxuICAgICAgICAneCcsXG4gICAgICAgICd5J1xuICAgIF0pO1xuXG4gICAgcHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmO1xuICAgIHB1YmxpYyBpbnN0YW5jZSE6IFJhZGlvO1xuXG4gICAgcHJpdmF0ZSBicnludHVtQ29uZmlnID0ge1xuICAgICAgICBhZG9wdCAgICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICBhcHBlbmRUbyAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICBocmVmICAgICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICBhbmd1bGFyQ29tcG9uZW50IDogdGhpcyxcbiAgICAgICAgZmVhdHVyZXMgICAgICAgICA6IHt9LFxuICAgICAgICBsaXN0ZW5lcnMgICAgICAgIDoge31cbiAgICB9O1xuXG4gICAgY29uc3RydWN0b3IoZWxlbWVudDogRWxlbWVudFJlZikge1xuICAgICAgICB0aGlzLmVsZW1lbnRSZWYgPSBlbGVtZW50O1xuICAgIH1cblxuICAgIC8vIENvbmZpZ3Mgb25seVxuICAgIEBJbnB1dCgpIGFkb3B0ICAgICAgICAgICAgICAgICAgICAgICAgISA6IEhUTUxFbGVtZW50fHN0cmluZztcbiAgICBASW5wdXQoKSBhbGlnbiAgICAgICAgICAgICAgICAgICAgICAgICEgOiBBbGlnblNwZWN8c3RyaW5nO1xuICAgIEBJbnB1dCgpIGFuY2hvciAgICAgICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgYXJpYURlc2NyaXB0aW9uICAgICAgICAgICAgICAhIDogc3RyaW5nO1xuICAgIEBJbnB1dCgpIGFyaWFMYWJlbCAgICAgICAgICAgICAgICAgICAgISA6IHN0cmluZztcbiAgICBASW5wdXQoKSBhdXRvQ29sbGFwc2UgICAgICAgICAgICAgICAgICEgOiBib29sZWFufCgoKSA9PiBib29sZWFuKTtcbiAgICBASW5wdXQoKSBhdXRvQ29tcGxldGUgICAgICAgICAgICAgICAgICEgOiBzdHJpbmc7XG4gICAgQElucHV0KCkgYXV0b1NlbGVjdCAgICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBidWJibGVFdmVudHMgICAgICAgICAgICAgICAgICEgOiBvYmplY3Q7XG4gICAgQElucHV0KCkgY2VudGVyZWQgICAgICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBjaGVja2VkVmFsdWUgICAgICAgICAgICAgICAgICEgOiBhbnk7XG4gICAgQElucHV0KCkgY2hlY2tWYWxpZGl0eSAgICAgICAgICAgICAgICAhIDogKChmaWVsZDogRmllbGQpID0+IHZvaWQpfHN0cmluZztcbiAgICBASW5wdXQoKSBjb2xvciAgICAgICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmc7XG4gICAgQElucHV0KCkgY29uZmlnICAgICAgICAgICAgICAgICAgICAgICAhIDogb2JqZWN0O1xuICAgIEBJbnB1dCgpIGNvbnN0cmFpblRvICAgICAgICAgICAgICAgICAgISA6IEhUTUxFbGVtZW50fFdpZGdldHxSZWN0YW5nbGU7XG4gICAgQElucHV0KCkgY29udGFpbmVyICAgICAgICAgICAgICAgICAgICAhIDogUmVjb3JkPHN0cmluZywgQ29udGFpbmVySXRlbUNvbmZpZz58Q29udGFpbmVySXRlbUNvbmZpZ1tdfEZpZWxkQ29udGFpbmVyQ29uZmlnO1xuICAgIEBJbnB1dCgpIGNvbnRhaW5WYWx1ZXMgICAgICAgICAgICAgICAgISA6IGJvb2xlYW58c3RyaW5nfCgoZmllbGQ6IEZpZWxkKSA9PiBib29sZWFuKTtcbiAgICBASW5wdXQoKSBjb250ZW50RWxlbWVudENscyAgICAgICAgICAgICEgOiBzdHJpbmd8b2JqZWN0O1xuICAgIEBJbnB1dCgpIGRhdGFGaWVsZCAgICAgICAgICAgICAgICAgICAgISA6IHN0cmluZztcbiAgICBASW5wdXQoKSBkZWZhdWx0QmluZFByb3BlcnR5ICAgICAgICAgICEgOiBzdHJpbmc7XG4gICAgQElucHV0KCkgZGV0ZWN0Q1NTQ29tcGF0aWJpbGl0eUlzc3VlcyAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBkb2NrICAgICAgICAgICAgICAgICAgICAgICAgICEgOiAndG9wJ3wnYm90dG9tJ3wnbGVmdCd8J3JpZ2h0J3wnc3RhcnQnfCdlbmQnfCdoZWFkZXInfCdwcmUtaGVhZGVyJ3xvYmplY3Q7XG4gICAgQElucHV0KCkgZHJhZ2dhYmxlICAgICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbnxvYmplY3Q7XG4gICAgQElucHV0KCkgZWxlbWVudEF0dHJpYnV0ZXMgICAgICAgICAgICAhIDogUmVjb3JkPHN0cmluZywgc3RyaW5nfG51bGw+O1xuICAgIEBJbnB1dCgpIGZsb2F0aW5nICAgICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgaGlkZUFuaW1hdGlvbiAgICAgICAgICAgICAgICAhIDogYm9vbGVhbnxvYmplY3Q7XG4gICAgQElucHV0KCkgaGlnaGxpZ2h0RXh0ZXJuYWxDaGFuZ2UgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBoaW50ICAgICAgICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmd8KChkYXRhOiB7IHNvdXJjZTogRmllbGQsIHZhbHVlOiBhbnkgfSkgPT4gc3RyaW5nKTtcbiAgICBASW5wdXQoKSBoaW50SHRtbCAgICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmd8KChkYXRhOiB7IHNvdXJjZTogRmllbGQsIHZhbHVlOiBhbnkgfSkgPT4gc3RyaW5nKTtcbiAgICBASW5wdXQoKSBpZ25vcmVQYXJlbnRSZWFkT25seSAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGlubGluZSAgICAgICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgaW5wdXRBbGlnbiAgICAgICAgICAgICAgICAgICAhIDogc3RyaW5nO1xuICAgIEBJbnB1dCgpIGlucHV0QXR0cmlidXRlcyAgICAgICAgICAgICAgISA6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gICAgQElucHV0KCkgaW5wdXRUYWcgICAgICAgICAgICAgICAgICAgICAhIDogc3RyaW5nO1xuICAgIEBJbnB1dCgpIGlucHV0VHlwZSAgICAgICAgICAgICAgICAgICAgISA6IHN0cmluZztcbiAgICBASW5wdXQoKSBpbnB1dFdpZHRoICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmd8bnVtYmVyO1xuICAgIEBJbnB1dCgpIGtleVN0cm9rZUNoYW5nZURlbGF5ICAgICAgICAgISA6IG51bWJlcjtcbiAgICBASW5wdXQoKSBsYWJlbENscyAgICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmd8b2JqZWN0O1xuICAgIEBJbnB1dCgpIGxhYmVsUG9zaXRpb24gICAgICAgICAgICAgICAgISA6ICdiZWZvcmUnfCdhYm92ZSd8bnVsbDtcbiAgICBASW5wdXQoKSBsYWJlbHMgICAgICAgICAgICAgICAgICAgICAgICEgOiBvYmplY3RbXTtcbiAgICBASW5wdXQoKSBsYWJlbFdpZHRoICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmd8bnVtYmVyO1xuICAgIEBJbnB1dCgpIGxpc3RlbmVycyAgICAgICAgICAgICAgICAgICAgISA6IFJhZGlvTGlzdGVuZXJzO1xuICAgIEBJbnB1dCgpIGxvY2FsZUNsYXNzICAgICAgICAgICAgICAgICAgISA6IHR5cGVvZiBCYXNlO1xuICAgIEBJbnB1dCgpIGxvY2FsaXphYmxlICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgbG9jYWxpemFibGVQcm9wZXJ0aWVzICAgICAgICAhIDogc3RyaW5nW107XG4gICAgQElucHV0KCkgbWFza0RlZmF1bHRzICAgICAgICAgICAgICAgICAhIDogTWFza0NvbmZpZztcbiAgICBASW5wdXQoKSBtYXNrZWQgICAgICAgICAgICAgICAgICAgICAgICEgOiBib29sZWFufHN0cmluZ3xNYXNrQ29uZmlnO1xuICAgIEBJbnB1dCgpIG1vbml0b3JSZXNpemUgICAgICAgICAgICAgICAgISA6IGJvb2xlYW58b2JqZWN0O1xuICAgIEBJbnB1dCgpIHBvc2l0aW9uZWQgICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgcHJldmVudFRvb2x0aXBPblRvdWNoICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSByZWxheVN0b3JlRXZlbnRzICAgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIHJldmVydE9uRXNjYXBlICAgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgcmlwcGxlICAgICAgICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbnxvYmplY3Q7XG4gICAgQElucHV0KCkgcm9sZSAgICAgICAgICAgICAgICAgICAgICAgICAhIDogc3RyaW5nO1xuICAgIEBJbnB1dCgpIHJvb3RFbGVtZW50ICAgICAgICAgICAgICAgICAgISA6IFNoYWRvd1Jvb3R8SFRNTEVsZW1lbnQ7XG4gICAgQElucHV0KCkgc2Nyb2xsQWN0aW9uICAgICAgICAgICAgICAgICAhIDogJ2hpZGUnfCdyZWFsaWduJ3xudWxsO1xuICAgIEBJbnB1dCgpIHNob3dBbmltYXRpb24gICAgICAgICAgICAgICAgISA6IGJvb2xlYW58b2JqZWN0O1xuICAgIEBJbnB1dCgpIHNob3dUb29sdGlwV2hlbkRpc2FibGVkICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgc2tpcFZhbGlkYXRpb24gICAgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBzcGVsbENoZWNrICAgICAgICAgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIHRhYiAgICAgICAgICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW58VGFiQ29uZmlnO1xuICAgIEBJbnB1dCgpIHRhYkluZGV4ICAgICAgICAgICAgICAgICAgICAgISA6IG51bWJlcjtcbiAgICBASW5wdXQoKSB0ZXh0ICAgICAgICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmc7XG4gICAgQElucHV0KCkgdGV4dEFsaWduICAgICAgICAgICAgICAgICAgICAhIDogJ2xlZnQnfCdjZW50ZXInfCdyaWdodCd8J3N0YXJ0J3wnZW5kJztcbiAgICBASW5wdXQoKSB0aXRsZSAgICAgICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmc7XG4gICAgQElucHV0KCkgdHlwZSAgICAgICAgICAgICAgICAgICAgICAgICAhIDogJ3JhZGlvJ3wncmFkaW9idXR0b24nO1xuICAgIEBJbnB1dCgpIHVpICAgICAgICAgICAgICAgICAgICAgICAgICAgISA6IHN0cmluZ3xvYmplY3Q7XG4gICAgQElucHV0KCkgdW5jaGVja2VkVmFsdWUgICAgICAgICAgICAgICAhIDogYW55O1xuICAgIEBJbnB1dCgpIHZhbGlkYXRlT25JbnB1dCAgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgd2VpZ2h0ICAgICAgICAgICAgICAgICAgICAgICAhIDogbnVtYmVyO1xuXG4gICAgLy8gQ29uZmlncyBhbmQgcHJvcGVydGllc1xuICAgIEBJbnB1dCgpIGFsaWduU2VsZiAgICAgICAgICAgICAgICAgICAhIDogc3RyaW5nO1xuICAgIEBJbnB1dCgpIGFwcGVuZFRvICAgICAgICAgICAgICAgICAgICAhIDogSFRNTEVsZW1lbnR8c3RyaW5nO1xuICAgIEBJbnB1dCgpIGJhZGdlICAgICAgICAgICAgICAgICAgICAgICAhIDogc3RyaW5nO1xuICAgIEBJbnB1dCgpIGNhbGxPbkZ1bmN0aW9ucyAgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBjYXRjaEV2ZW50SGFuZGxlckV4Y2VwdGlvbnMgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgY2hlY2tlZCAgICAgICAgICAgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGNscyAgICAgICAgICAgICAgICAgICAgICAgICAhIDogc3RyaW5nfG9iamVjdDtcbiAgICBASW5wdXQoKSBjb2x1bW4gICAgICAgICAgICAgICAgICAgICAgISA6IG51bWJlcjtcbiAgICBASW5wdXQoKSBkYXRhc2V0ICAgICAgICAgICAgICAgICAgICAgISA6IG9iamVjdHxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICAgIEBJbnB1dCgpIGRpc2FibGVkICAgICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbnwnaW5lcnQnO1xuICAgIEBJbnB1dCgpIGV4dHJhRGF0YSAgICAgICAgICAgICAgICAgICAhIDogYW55O1xuICAgIEBJbnB1dCgpIGZsZXggICAgICAgICAgICAgICAgICAgICAgICAhIDogbnVtYmVyfHN0cmluZztcbiAgICBASW5wdXQoKSBoZWlnaHQgICAgICAgICAgICAgICAgICAgICAgISA6IG51bWJlcnxzdHJpbmc7XG4gICAgQElucHV0KCkgaGlkZGVuICAgICAgICAgICAgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGlkICAgICAgICAgICAgICAgICAgICAgICAgICAhIDogc3RyaW5nO1xuICAgIEBJbnB1dCgpIGluc2VydEJlZm9yZSAgICAgICAgICAgICAgICAhIDogSFRNTEVsZW1lbnR8c3RyaW5nO1xuICAgIEBJbnB1dCgpIGluc2VydEZpcnN0ICAgICAgICAgICAgICAgICAhIDogSFRNTEVsZW1lbnR8c3RyaW5nO1xuICAgIEBJbnB1dCgpIGtleU1hcCAgICAgICAgICAgICAgICAgICAgICAhIDogUmVjb3JkPHN0cmluZywgS2V5TWFwQ29uZmlnPjtcbiAgICBASW5wdXQoKSBsYWJlbCAgICAgICAgICAgICAgICAgICAgICAgISA6IHN0cmluZztcbiAgICBASW5wdXQoKSBtYXJnaW4gICAgICAgICAgICAgICAgICAgICAgISA6IG51bWJlcnxzdHJpbmc7XG4gICAgQElucHV0KCkgbWF4SGVpZ2h0ICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmd8bnVtYmVyO1xuICAgIEBJbnB1dCgpIG1heGltaXplT25Nb2JpbGUgICAgICAgICAgICAhIDogbnVtYmVyfHN0cmluZztcbiAgICBASW5wdXQoKSBtYXhXaWR0aCAgICAgICAgICAgICAgICAgICAgISA6IHN0cmluZ3xudW1iZXI7XG4gICAgQElucHV0KCkgbWluSGVpZ2h0ICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmd8bnVtYmVyO1xuICAgIEBJbnB1dCgpIG1pbldpZHRoICAgICAgICAgICAgICAgICAgICAhIDogc3RyaW5nfG51bWJlcjtcbiAgICBASW5wdXQoKSBuYW1lICAgICAgICAgICAgICAgICAgICAgICAgISA6IHN0cmluZztcbiAgICBASW5wdXQoKSByZWFkT25seSAgICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgcmVxdWlyZWQgICAgICAgICAgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIHJ0bCAgICAgICAgICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBzaG93UmVxdWlyZWRJbmRpY2F0b3IgICAgICAgISA6IHN0cmluZztcbiAgICBASW5wdXQoKSBzcGFuICAgICAgICAgICAgICAgICAgICAgICAgISA6IG51bWJlcjtcbiAgICBASW5wdXQoKSB0b29sdGlwICAgICAgICAgICAgICAgICAgICAgISA6IHN0cmluZ3xUb29sdGlwQ29uZmlnfG51bGw7XG4gICAgQElucHV0KCkgdHJpZ2dlcnMgICAgICAgICAgICAgICAgICAgICEgOiBSZWNvcmQ8c3RyaW5nLCBGaWVsZFRyaWdnZXJDb25maWc+fFJlY29yZDxzdHJpbmcsIFdpZGdldD47XG4gICAgQElucHV0KCkgdmFsdWUgICAgICAgICAgICAgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIHdpZHRoICAgICAgICAgICAgICAgICAgICAgICAhIDogbnVtYmVyfHN0cmluZztcbiAgICBASW5wdXQoKSB4ICAgICAgICAgICAgICAgICAgICAgICAgICAgISA6IG51bWJlcjtcbiAgICBASW5wdXQoKSB5ICAgICAgICAgICAgICAgICAgICAgICAgICAgISA6IG51bWJlcjtcblxuICAgIC8vIFByb3BlcnRpZXMgb25seVxuICAgIEBJbnB1dCgpIGNvbnRlbnQgICAgICEgOiBzdHJpbmc7XG4gICAgQElucHV0KCkgZWRpdGFibGUgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgaHRtbCAgICAgICAgISA6IHN0cmluZ3woKHdpZGdldDogV2lkZ2V0KSA9PiB2b2lkKXxEb21Db25maWd8RG9tQ29uZmlnW118VnVlQ29uZmlnfFJlYWN0SlNYO1xuICAgIEBJbnB1dCgpIGlucHV0ICAgICAgICEgOiBIVE1MRWxlbWVudDtcbiAgICBASW5wdXQoKSBwYXJlbnQgICAgICAhIDogV2lkZ2V0O1xuICAgIEBJbnB1dCgpIHBsYWNlaG9sZGVyICEgOiBzdHJpbmc7XG4gICAgQElucHV0KCkgc2Nyb2xsYWJsZSAgISA6IFNjcm9sbGVyO1xuXG4gICAgLy8gRXZlbnRzIGVtaXR0ZXJzXG4gICAgLyoqXG4gICAgICogVXNlciBwZXJmb3JtZWQgdGhlIGRlZmF1bHQgYWN0aW9uICh0b2dnbGVkIHRoZSBjaGVja2JveClcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5DaGVja2JveH0gZXZlbnQuc291cmNlIENoZWNrYm94XG4gICAgICogQHBhcmFtIHtib29sZWFufSBldmVudC5jaGVja2VkIENoZWNrZWQgc3RhdGUgKD12YWx1ZSlcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGV2ZW50LnZhbHVlIFRoaXMgZmllbGQncyB2YWx1ZVxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gZXZlbnQudmFsaWQgVHJ1ZSBpZiB0aGlzIGZpZWxkIGlzIGluIGEgdmFsaWQgc3RhdGVcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGV2ZW50Lm9sZFZhbHVlIFRoaXMgZmllbGQncyBwcmV2aW91cyB2YWx1ZVxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gZXZlbnQudXNlckFjdGlvbiBUcmlnZ2VyZWQgYnkgdXNlciB0YWtpbmcgYW4gYWN0aW9uIChgdHJ1ZWApIG9yIGJ5IHNldHRpbmcgYSB2YWx1ZSAoYGZhbHNlYClcbiAgICAgKiBAcGFyYW0ge0V2ZW50fSBldmVudC5ldmVudCBUaGUgdHJpZ2dlcmluZyBET00gZXZlbnQgaWYgYW55XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQWN0aW9uOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBDaGVja2JveCwgY2hlY2tlZDogYm9vbGVhbiwgdmFsdWU6IGJvb2xlYW4sIHZhbGlkOiBib29sZWFuLCBvbGRWYWx1ZTogYm9vbGVhbiwgdXNlckFjdGlvbjogYm9vbGVhbiwgZXZlbnQ6IEV2ZW50IH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlZCBiZWZvcmUgY2hlY2tib3ggaXMgdG9nZ2xlZC4gUmV0dXJuaW5nIGZhbHNlIGZyb20gYSBsaXN0ZW5lciBwcmV2ZW50cyB0aGUgY2hlY2tib3ggZnJvbSBiZWluZyB0b2dnbGVkLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0LkNoZWNrYm94fSBldmVudC5zb3VyY2UgQ2hlY2tib3hcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGV2ZW50LmNoZWNrZWQgQ2hlY2tlZCBzdGF0ZSAoPXZhbHVlKVxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gZXZlbnQudmFsdWUgVGhpcyBmaWVsZCdzIHZhbHVlXG4gICAgICogQHBhcmFtIHtib29sZWFufSBldmVudC5vbGRWYWx1ZSBUaGlzIGZpZWxkJ3MgcHJldmlvdXMgdmFsdWVcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGV2ZW50LnVzZXJBY3Rpb24gVHJpZ2dlcmVkIGJ5IHVzZXIgdGFraW5nIGFuIGFjdGlvbiAoYHRydWVgKSBvciBieSBzZXR0aW5nIGEgdmFsdWUgKGBmYWxzZWApXG4gICAgICogQHBhcmFtIHtib29sZWFufSBldmVudC52YWxpZCBUcnVlIGlmIHRoaXMgZmllbGQgaXMgaW4gYSB2YWxpZCBzdGF0ZS5cbiAgICAgKiBAcGFyYW0ge0V2ZW50fSBldmVudC5ldmVudCBUaGUgdHJpZ2dlcmluZyBET00gZXZlbnQgaWYgYW55XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQmVmb3JlQ2hhbmdlOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBDaGVja2JveCwgY2hlY2tlZDogYm9vbGVhbiwgdmFsdWU6IGJvb2xlYW4sIG9sZFZhbHVlOiBib29sZWFuLCB1c2VyQWN0aW9uOiBib29sZWFuLCB2YWxpZDogYm9vbGVhbiwgZXZlbnQ6IEV2ZW50IH0pID0+IGJvb2xlYW58dm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIGJlZm9yZSBhbiBvYmplY3QgaXMgZGVzdHJveWVkLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0NvcmUuQmFzZX0gZXZlbnQuc291cmNlIFRoZSBPYmplY3QgdGhhdCBpcyBiZWluZyBkZXN0cm95ZWQuXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQmVmb3JlRGVzdHJveTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogQmFzZSB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogVHJpZ2dlcmVkIGJlZm9yZSBhIHdpZGdldCBpcyBoaWRkZW4uIFJldHVybiBgZmFsc2VgIHRvIHByZXZlbnQgdGhlIGFjdGlvbi5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5XaWRnZXR9IGV2ZW50LnNvdXJjZSBUaGUgd2lkZ2V0IGJlaW5nIGhpZGRlbi5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25CZWZvcmVIaWRlOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBXaWRnZXQgfSkgPT4gYm9vbGVhbnx2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogVHJpZ2dlcmVkIGJlZm9yZSBhIHdpZGdldCBpcyBzaG93bi4gUmV0dXJuIGBmYWxzZWAgdG8gcHJldmVudCB0aGUgYWN0aW9uLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0LldpZGdldCxhbnl9IGV2ZW50LnNvdXJjZSBUaGUgd2lkZ2V0IGJlaW5nIHNob3duXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQmVmb3JlU2hvdzogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogV2lkZ2V0fGFueSB9KSA9PiBQcm9taXNlPGJvb2xlYW4+fGJvb2xlYW58dm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIHdoZW4gYW55IG90aGVyIGV2ZW50IGlzIGZpcmVkIGZyb20gdGhlIG9iamVjdC5cbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1JhZGlvI2V2ZW50LWNhdGNoQWxsKVxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge3tba2V5OiBzdHJpbmddOiBhbnksIHR5cGU6IHN0cmluZ319IGV2ZW50LmV2ZW50IFRoZSBPYmplY3QgdGhhdCBjb250YWlucyBldmVudCBkZXRhaWxzXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50LmV2ZW50LnR5cGUgVGhlIHR5cGUgb2YgdGhlIGV2ZW50IHdoaWNoIGlzIGNhdWdodCBieSB0aGUgbGlzdGVuZXJcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25DYXRjaEFsbDogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7W2tleTogc3RyaW5nXTogYW55LCB0eXBlOiBzdHJpbmd9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiBjaGVja2JveCBpcyB0b2dnbGVkXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuQ2hlY2tib3h9IGV2ZW50LnNvdXJjZSBDaGVja2JveFxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gZXZlbnQuY2hlY2tlZCBDaGVja2VkIHN0YXRlICg9dmFsdWUpXG4gICAgICogQHBhcmFtIHtib29sZWFufSBldmVudC52YWx1ZSBUaGlzIGZpZWxkJ3MgdmFsdWVcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGV2ZW50Lm9sZFZhbHVlIFRoaXMgZmllbGQncyBwcmV2aW91cyB2YWx1ZVxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gZXZlbnQudXNlckFjdGlvbiBUcmlnZ2VyZWQgYnkgdXNlciB0YWtpbmcgYW4gYWN0aW9uIChgdHJ1ZWApIG9yIGJ5IHNldHRpbmcgYSB2YWx1ZSAoYGZhbHNlYClcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGV2ZW50LnZhbGlkIFRydWUgaWYgdGhpcyBmaWVsZCBpcyBpbiBhIHZhbGlkIHN0YXRlLlxuICAgICAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50LmV2ZW50IFRoZSB0cmlnZ2VyaW5nIERPTSBldmVudCBpZiBhbnlcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25DaGFuZ2U6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IENoZWNrYm94LCBjaGVja2VkOiBib29sZWFuLCB2YWx1ZTogYm9vbGVhbiwgb2xkVmFsdWU6IGJvb2xlYW4sIHVzZXJBY3Rpb246IGJvb2xlYW4sIHZhbGlkOiBib29sZWFuLCBldmVudDogRXZlbnQgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gdGhpcyBmaWVsZCBpcyBbY2xlYXJlZF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L0ZpZWxkI2Z1bmN0aW9uLWNsZWFyKS5cbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1JhZGlvI2V2ZW50LWNsZWFyKVxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0LkZpZWxkLGFueX0gZXZlbnQuc291cmNlIFRoaXMgRmllbGRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25DbGVhcjogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogRmllbGR8YW55IH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlcyB3aGVuIHRoZSBjaGVja2JveCBpcyBjbGlja2VkXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuQ2hlY2tib3h9IGV2ZW50LnNvdXJjZSBUaGUgY2hlY2tib3hcbiAgICAgKiBAcGFyYW0ge0V2ZW50fSBldmVudC5ldmVudCBET00gZXZlbnRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25DbGljazogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogQ2hlY2tib3gsIGV2ZW50OiBFdmVudCB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZXMgd2hlbiBhbiBvYmplY3QgaXMgZGVzdHJveWVkLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0NvcmUuQmFzZX0gZXZlbnQuc291cmNlIFRoZSBPYmplY3QgdGhhdCBpcyBiZWluZyBkZXN0cm95ZWQuXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uRGVzdHJveTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogQmFzZSB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogVHJpZ2dlcmVkIHdoZW4gYSB3aWRnZXQncyBbZWxlbWVudF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1dpZGdldCNwcm9wZXJ0eS1lbGVtZW50KSBpcyBhdmFpbGFibGUuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGV2ZW50LmVsZW1lbnQgVGhlIFdpZGdldCdzIGVsZW1lbnQuXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uRWxlbWVudENyZWF0ZWQ6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBlbGVtZW50OiBIVE1MRWxlbWVudCB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiBmb2N1cyBlbnRlcnMgdGhpcyBXaWRnZXQuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuV2lkZ2V0fSBldmVudC5zb3VyY2UgVGhpcyBXaWRnZXRcbiAgICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBldmVudC5mcm9tRWxlbWVudCBUaGUgZWxlbWVudCB3aGljaCBsb3N0IGZvY3VzLlxuICAgICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGV2ZW50LnRvRWxlbWVudCBUaGUgZWxlbWVudCB3aGljaCBnYWluZWQgZm9jdXMuXG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5XaWRnZXR9IGV2ZW50LmZyb21XaWRnZXQgVGhlIHdpZGdldCB3aGljaCBsb3N0IGZvY3VzLlxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuV2lkZ2V0fSBldmVudC50b1dpZGdldCBUaGUgd2lkZ2V0IHdoaWNoIGdhaW5lZCBmb2N1cy5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGV2ZW50LmJhY2t3YXJkcyBgdHJ1ZWAgaWYgdGhlIGB0b0VsZW1lbnRgIGlzIGJlZm9yZSB0aGUgYGZyb21FbGVtZW50YCBpbiBkb2N1bWVudCBvcmRlci5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25Gb2N1c0luOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBXaWRnZXQsIGZyb21FbGVtZW50OiBIVE1MRWxlbWVudCwgdG9FbGVtZW50OiBIVE1MRWxlbWVudCwgZnJvbVdpZGdldDogV2lkZ2V0LCB0b1dpZGdldDogV2lkZ2V0LCBiYWNrd2FyZHM6IGJvb2xlYW4gfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gZm9jdXMgZXhpdHMgdGhpcyBXaWRnZXQncyBvd25lcnNoaXAgdHJlZS4gVGhpcyBpcyBkaWZmZXJlbnQgZnJvbSBhIGBibHVyYCBldmVudC5cbiAgICAgKiBmb2N1cyBtb3ZpbmcgZnJvbSB3aXRoaW4gdGhpcyBXaWRnZXQncyBvd25lcnNoaXAgdHJlZSwgZXZlbiBpZiB0aGVyZSBhcmUgZmxvYXRpbmcgd2lkZ2V0c1xuICAgICAqIHdpbGwgbm90IHRyaWdnZXIgdGhpcyBldmVudC4gVGhpcyBpcyB3aGVuIGZvY3VzIGV4aXRzIHRoaXMgd2lkZ2V0IGNvbXBsZXRlbHkuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuV2lkZ2V0fSBldmVudC5zb3VyY2UgVGhpcyBXaWRnZXRcbiAgICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBldmVudC5mcm9tRWxlbWVudCBUaGUgZWxlbWVudCB3aGljaCBsb3N0IGZvY3VzLlxuICAgICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGV2ZW50LnRvRWxlbWVudCBUaGUgZWxlbWVudCB3aGljaCBnYWluZWQgZm9jdXMuXG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5XaWRnZXR9IGV2ZW50LmZyb21XaWRnZXQgVGhlIHdpZGdldCB3aGljaCBsb3N0IGZvY3VzLlxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuV2lkZ2V0fSBldmVudC50b1dpZGdldCBUaGUgd2lkZ2V0IHdoaWNoIGdhaW5lZCBmb2N1cy5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGV2ZW50LmJhY2t3YXJkcyBgdHJ1ZWAgaWYgdGhlIGB0b0VsZW1lbnRgIGlzIGJlZm9yZSB0aGUgYGZyb21FbGVtZW50YCBpbiBkb2N1bWVudCBvcmRlci5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25Gb2N1c091dDogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogV2lkZ2V0LCBmcm9tRWxlbWVudDogSFRNTEVsZW1lbnQsIHRvRWxlbWVudDogSFRNTEVsZW1lbnQsIGZyb21XaWRnZXQ6IFdpZGdldCwgdG9XaWRnZXQ6IFdpZGdldCwgYmFja3dhcmRzOiBib29sZWFuIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyZWQgYWZ0ZXIgYSB3aWRnZXQgd2FzIGhpZGRlblxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0LldpZGdldH0gZXZlbnQuc291cmNlIFRoZSB3aWRnZXRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25IaWRlOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBXaWRnZXQgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gdGhlIHVzZXIgdHlwZXMgaW50byB0aGlzIGZpZWxkLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0LkZpZWxkLGFueX0gZXZlbnQuc291cmNlIFRoaXMgZmllbGRcbiAgICAgKiBAcGFyYW0ge3N0cmluZyxudW1iZXIsYm9vbGVhbixhbnl9IGV2ZW50LnZhbHVlIFRoaXMgZmllbGQncyB2YWx1ZVxuICAgICAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50LmV2ZW50IFRoZSB0cmlnZ2VyaW5nIERPTSBldmVudFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbklucHV0OiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBGaWVsZHxhbnksIHZhbHVlOiBzdHJpbmd8bnVtYmVyfGJvb2xlYW58YW55LCBldmVudDogRXZlbnQgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIFRyaWdnZXJlZCB3aGVuIGEgd2lkZ2V0IHdoaWNoIGhhZCBiZWVuIGluIGEgbm9uLXZpc2libGUgc3RhdGUgZm9yIGFueSByZWFzb25cbiAgICAgKiBhY2hpZXZlcyB2aXNpYmlsaXR5LlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvUmFkaW8jZXZlbnQtcGFpbnQpXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuV2lkZ2V0fSBldmVudC5zb3VyY2UgVGhlIHdpZGdldCBiZWluZyBwYWludGVkLlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gZXZlbnQuZmlyc3RQYWludCBgdHJ1ZWAgaWYgdGhpcyBpcyB0aGUgZmlyc3QgcGFpbnQuXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uUGFpbnQ6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IFdpZGdldCwgZmlyc3RQYWludDogYm9vbGVhbiB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiBhIFdpZGdldCdzIHJlYWQgb25seSBzdGF0ZSBpcyB0b2dnbGVkXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gZXZlbnQucmVhZE9ubHkgUmVhZCBvbmx5IG9yIG5vdFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvblJlYWRPbmx5OiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgcmVhZE9ubHk6IGJvb2xlYW4gfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIFRoaXMgZXZlbnQgaXMgZmlyZWQgYWZ0ZXIgYSB3aWRnZXQncyBlbGVtZW50cyBoYXZlIGJlZW4gc3luY2hyb25pemVkIGR1ZSB0byBhIGRpcmVjdCBvciBpbmRpcmVjdCBjYWxsXG4gICAgICogdG8gW3JlY29tcG9zZV0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1dpZGdldCNmdW5jdGlvbi1yZWNvbXBvc2UpLCBpZiB0aGlzIHJlc3VsdHMgaW4gc29tZSBjaGFuZ2UgdG8gdGhlIHdpZGdldCdzIHJlbmRlcmVkIERPTSBlbGVtZW50cy5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25SZWNvbXBvc2U6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KCgpID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIHRoZSBlbmNhcHN1bGF0aW5nIGVsZW1lbnQgb2YgYSBXaWRnZXQgcmVzaXplcyAqb25seSB3aGVuIFttb25pdG9yUmVzaXplXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvV2lkZ2V0I2NvbmZpZy1tb25pdG9yUmVzaXplKSBpcyBgdHJ1ZWAqLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0LldpZGdldH0gZXZlbnQuc291cmNlIFRoaXMgV2lkZ2V0XG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGV2ZW50LndpZHRoIFRoZSBuZXcgd2lkdGhcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gZXZlbnQuaGVpZ2h0IFRoZSBuZXcgaGVpZ2h0XG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGV2ZW50Lm9sZFdpZHRoIFRoZSBvbGQgd2lkdGhcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gZXZlbnQub2xkSGVpZ2h0IFRoZSBvbGQgaGVpZ2h0XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uUmVzaXplOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBXaWRnZXQsIHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyLCBvbGRXaWR0aDogbnVtYmVyLCBvbGRIZWlnaHQ6IG51bWJlciB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogVHJpZ2dlcmVkIGFmdGVyIGEgd2lkZ2V0IGlzIHNob3duLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0LldpZGdldH0gZXZlbnQuc291cmNlIFRoZSB3aWRnZXRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25TaG93OiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBXaWRnZXQgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIFVzZXIgY2xpY2tlZCBvbmUgb2YgdGhpcyBmaWVsZCdzIFt0cmlnZ2Vyc10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L0ZpZWxkI3Byb3BlcnR5LXRyaWdnZXJzKVxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0LkZpZWxkLGFueX0gZXZlbnQuc291cmNlIFRoaXMgZmllbGRcbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0LldpZGdldH0gZXZlbnQudHJpZ2dlciBUaGUgdHJpZ2dlciBhY3RpdmF0ZWQgYnkgY2xpY2sgb3IgdG91Y2ggdGFwLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvblRyaWdnZXI6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IEZpZWxkfGFueSwgdHJpZ2dlcjogV2lkZ2V0IH0pID0+IHZvaWQpfHN0cmluZz4oKTtcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhbmQgYXBwZW5kIHRoZSB1bmRlcmx5aW5nIHdpZGdldFxuICAgICAqL1xuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICBjb25zdFxuICAgICAgICAgICAgbWUgPSB0aGlzLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGVsZW1lbnRSZWYsXG4gICAgICAgICAgICAgICAgYnJ5bnR1bUNvbmZpZ1xuICAgICAgICAgICAgfSA9IG1lLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGluc3RhbmNlQ2xhc3MsXG4gICAgICAgICAgICAgICAgaW5zdGFuY2VOYW1lLFxuICAgICAgICAgICAgICAgIGJyeW50dW1Db25maWdzLFxuICAgICAgICAgICAgICAgIGJyeW50dW1FdmVudHNcbiAgICAgICAgICAgIH0gPSBCcnludHVtUmFkaW9Db21wb25lbnQ7XG5cbiAgICAgICAgYnJ5bnR1bUNvbmZpZ3MuZmlsdGVyKHByb3AgPT4gcHJvcCBpbiB0aGlzKS5mb3JFYWNoKHByb3AgPT4ge1xuICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgV3JhcHBlckhlbHBlci5hcHBseVByb3BWYWx1ZShicnludHVtQ29uZmlnLCBwcm9wLCB0aGlzW3Byb3BdKTtcbiAgICAgICAgICAgIGlmIChbJ2ZlYXR1cmVzJywgJ2NvbmZpZyddLmluY2x1ZGVzKHByb3ApKSB7XG4gICAgICAgICAgICAgICAgV3JhcHBlckhlbHBlci5kZXZXYXJuaW5nQ29uZmlnUHJvcChpbnN0YW5jZU5hbWUsIHByb3ApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICBicnludHVtRXZlbnRzLmZpbHRlcihldmVudCA9PiB0aGlzW2V2ZW50XSAmJiB0aGlzW2V2ZW50XS5vYnNlcnZlcnMubGVuZ3RoID4gMCkuZm9yRWFjaChldmVudCA9PiB7XG4gICAgICAgICAgICBjb25zdFxuICAgICAgICAgICAgICAgIHVuY2FwaXRhbGl6ZSA9IChzdHI6IHN0cmluZykgPT4gc3RyLmNoYXJBdCgwKS50b0xvd2VyQ2FzZSgpICsgc3RyLnNsaWNlKDEpLFxuICAgICAgICAgICAgICAgIGV2ZW50TmFtZSA9IChzdHI6IHN0cmluZykgPT4gdW5jYXBpdGFsaXplKHN0ci5zbGljZSgyKSk7XG5cbiAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgIGJyeW50dW1Db25maWcubGlzdGVuZXJzW2V2ZW50TmFtZShldmVudCldID0gZSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgICAgIG1lW2V2ZW50XS5lbWl0KGUpO1xuICAgICAgICAgICAgICAgIC8vIEV2ZW50RW1pdHRlciBkb2VzIG5vdCByZXR1cm4gdmFsdWVzIGluIHRoZSBub3JtYWwgd2F5LCB3b3JrIGFyb3VuZCBpdCBieSBzZXR0aW5nIGByZXR1cm5WYWx1ZWAgZmxhZ1xuICAgICAgICAgICAgICAgIC8vIGluIEFuZ3VsYXIgbGlzdGVuZXJzXG4gICAgICAgICAgICAgICAgcmV0dXJuIGUucmV0dXJuVmFsdWU7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9KTtcblxuICAgICAgICAvLyBJZiBjb21wb25lbnQgaGFzIG5vIGNvbnRhaW5lciBzcGVjaWZpZWQgaW4gY29uZmlnIHRoZW4gdXNlIGFkb3B0IHRvIFdyYXBwZXIncyBlbGVtZW50XG4gICAgICAgIGNvbnN0XG4gICAgICAgICAgICBjb250YWluZXJQYXJhbSA9IFtcbiAgICAgICAgICAgICAgICAnYWRvcHQnLFxuICAgICAgICAgICAgICAgICdhcHBlbmRUbycsXG4gICAgICAgICAgICAgICAgJ2luc2VydEFmdGVyJyxcbiAgICAgICAgICAgICAgICAnaW5zZXJ0QmVmb3JlJ1xuICAgICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgIF0uZmluZChwcm9wID0+IGJyeW50dW1Db25maWdbcHJvcF0pO1xuICAgICAgICBpZiAoIWNvbnRhaW5lclBhcmFtKSB7XG4gICAgICAgICAgICBpZiAoaW5zdGFuY2VOYW1lID09PSAnQnV0dG9uJyB8fCBlbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZ2V0Um9vdE5vZGUoKSBpbnN0YW5jZW9mIFNoYWRvd1Jvb3QpIHtcbiAgICAgICAgICAgICAgICAvLyBCdXR0b24gc2hvdWxkIGFsd2F5cyBiZSA8YT4gb3IgPGJ1dHRvbj4gaW5zaWRlIG93bmVyIGVsZW1lbnRcbiAgICAgICAgICAgICAgICBicnludHVtQ29uZmlnLmFwcGVuZFRvID0gZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgYnJ5bnR1bUNvbmZpZy5hZG9wdCA9IGVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIFdyYXBwZXJIZWxwZXIuZGV2V2FybmluZ0NvbnRhaW5lcihpbnN0YW5jZU5hbWUsIGNvbnRhaW5lclBhcmFtKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEluIHNoYWRvdyBET00gKGUuZy4gQW5ndWxhciBWaWV3RW5jYXBzdWxhdGlvbi5TaGFkb3dEb20pLCB0aGVtZSBDU1MgZnJvbSBkb2N1bWVudC5oZWFkXG4gICAgICAgIC8vIGRvZXMgbm90IGNhc2NhZGUgaW50byB0aGUgc2hhZG93IHJvb3QuIEluamVjdCBhIG1hdGNoaW5nIDxsaW5rPiBzbyBCcnludHVtJ3MgQ1NTIGNoZWNrXG4gICAgICAgIC8vIGZpbmRzIHRoZSB0aGVtZS4gVGhlIEBmb250LWZhY2UgcnVsZXMgZnJvbSBjb21wb25lbnQgc3R5bGVzIGFyZSBhbHNvIGV4dHJhY3RlZCB0b1xuICAgICAgICAvLyBkb2N1bWVudCBzY29wZSBzbyBkb2N1bWVudC5mb250cyBkZXRlY3RzIHRoZW0gKHNoYWRvdy1yb290IEBmb250LWZhY2UgaXMgbm90IHJlbGlhYmx5XG4gICAgICAgIC8vIGluY2x1ZGVkIGluIGRvY3VtZW50LmZvbnRzIGFjcm9zcyBhbGwgYnJvd3NlcnMpLlxuICAgICAgICBjb25zdCBzaGFkb3dSb290ID0gZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmdldFJvb3ROb2RlKCk7XG4gICAgICAgIGlmIChzaGFkb3dSb290IGluc3RhbmNlb2YgU2hhZG93Um9vdCkge1xuICAgICAgICAgICAgaW5pdFRoZW1lSW5TaGFkb3dSb290cygpO1xuICAgICAgICAgICAgQnJ5bnR1bVJhZGlvQ29tcG9uZW50LmVuc3VyZUZvbnRzSW5Eb2N1bWVudChzaGFkb3dSb290KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgbWUuaW5zdGFuY2UgPSBpbnN0YW5jZU5hbWUgPT09ICdXaWRnZXQnID8gV2lkZ2V0LmNyZWF0ZShicnludHVtQ29uZmlnKSA6IG5ldyBpbnN0YW5jZUNsYXNzKGJyeW50dW1Db25maWcpO1xuXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRXh0cmFjdHMgYWxsIEBmb250LWZhY2UgZGVjbGFyYXRpb25zIGZyb20gYSBzaGFkb3cgcm9vdCdzIHN0eWxlc2hlZXRzIGFuZCBhZGRzIHRoZW0gdG9cbiAgICAgKiBkb2N1bWVudC5oZWFkIGFzIGEgc2luZ2xlIDxzdHlsZT4gZWxlbWVudC4gVGhpcyBpcyBuZWVkZWQgYmVjYXVzZSBAZm9udC1mYWNlIHJ1bGVzIGluc2lkZVxuICAgICAqIGEgc2hhZG93IHJvb3QgYXJlIG5vdCByZWxpYWJseSBpbmNsdWRlZCBpbiBkb2N1bWVudC5mb250cyBhY3Jvc3MgYWxsIGJyb3dzZXJzLCBjYXVzaW5nXG4gICAgICogQnJ5bnR1bSdzIENTUyBjb21wYXRpYmlsaXR5IGNoZWNrIHRvIGluY29ycmVjdGx5IHJlcG9ydCBtaXNzaW5nIGZvbnRzLlxuICAgICAqIFNhZmUgdG8gY2FsbCBtdWx0aXBsZSB0aW1lcyDigJQgdGhlIGV4dHJhY3Rpb24gcnVucyBvbmx5IG9uY2UgcGVyIHBhZ2UuXG4gICAgICovXG4gICAgcHJpdmF0ZSBzdGF0aWMgZW5zdXJlRm9udHNJbkRvY3VtZW50KHNoYWRvd1Jvb3Q6IFNoYWRvd1Jvb3QpOiB2b2lkIHtcbiAgICAgICAgaWYgKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNiLXNoYWRvdy1yb290LWZvbnRzJykpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGZvbnRGYWNlUnVsZXM6IHN0cmluZ1tdID0gW107XG5cbiAgICAgICAgY29uc3QgZXh0cmFjdEZyb21TaGVldCA9IChzaGVldDogQ1NTU3R5bGVTaGVldCk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBjb25zdCBydWxlcyA9IHNoZWV0LmNzc1J1bGVzO1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcnVsZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJ1bGVzW2ldLnR5cGUgPT09IENTU1J1bGUuRk9OVF9GQUNFX1JVTEUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvbnRGYWNlUnVsZXMucHVzaChydWxlc1tpXS5jc3NUZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChfZSkge1xuICAgICAgICAgICAgICAgIC8vIENyb3NzLW9yaWdpbiBhY2Nlc3MgbWF5IHRocm93OyBzaWxlbnRseSBza2lwXG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gYWRvcHRlZFN0eWxlU2hlZXRzIChBbmd1bGFyIDE0KyAvIG1vZGVybiBicm93c2VycylcbiAgICAgICAgY29uc3QgYWRvcHRlZFNoZWV0czogQ1NTU3R5bGVTaGVldFtdID0gKHNoYWRvd1Jvb3QgYXMgYW55KS5hZG9wdGVkU3R5bGVTaGVldHMgPz8gW107XG4gICAgICAgIGFkb3B0ZWRTaGVldHMuZm9yRWFjaChzaGVldCA9PiBleHRyYWN0RnJvbVNoZWV0KHNoZWV0KSk7XG5cbiAgICAgICAgLy8gPHN0eWxlPiBlbGVtZW50cyAob2xkZXIgQW5ndWxhciBvciBmYWxsYmFjaylcbiAgICAgICAgc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yQWxsKCdzdHlsZScpLmZvckVhY2goZWwgPT4ge1xuICAgICAgICAgICAgaWYgKGVsLnNoZWV0KSB7XG4gICAgICAgICAgICAgICAgZXh0cmFjdEZyb21TaGVldChlbC5zaGVldCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChmb250RmFjZVJ1bGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IHN0eWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3R5bGUnKTtcbiAgICAgICAgICAgIHN0eWxlLmlkID0gJ2Itc2hhZG93LXJvb3QtZm9udHMnO1xuICAgICAgICAgICAgc3R5bGUudGV4dENvbnRlbnQgPSBmb250RmFjZVJ1bGVzLmpvaW4oJ1xcbicpO1xuICAgICAgICAgICAgZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChzdHlsZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBXYXRjaCBmb3IgY2hhbmdlc1xuICAgICAqIEBwYXJhbSBjaGFuZ2VzXG4gICAgICovXG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgICAgICBjb25zdFxuICAgICAgICAgICAgeyBpbnN0YW5jZSB9ID0gdGhpcyxcbiAgICAgICAgICAgIHsgaW5zdGFuY2VOYW1lIH0gPSBCcnludHVtUmFkaW9Db21wb25lbnQ7XG4gICAgICAgIGlmICghaW5zdGFuY2UpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBJdGVyYXRlIG92ZXIgYWxsIGNoYW5nZXNcbiAgICAgICAgT2JqZWN0LmVudHJpZXMoY2hhbmdlcykuZm9yRWFjaCgoW3Byb3AsIGNoYW5nZV0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0XG4gICAgICAgICAgICAgICAgbmV3VmFsdWUgPSAoY2hhbmdlIGFzIFNpbXBsZUNoYW5nZSkuY3VycmVudFZhbHVlLFxuICAgICAgICAgICAgICAgIHsgaW5zdGFuY2UgfSA9IHRoaXMsXG4gICAgICAgICAgICAgICAgeyBicnludHVtQ29uZmlnc09ubHksIGJyeW50dW1Qcm9wcyB9ID0gQnJ5bnR1bVJhZGlvQ29tcG9uZW50O1xuICAgICAgICAgICAgaWYgKGJyeW50dW1Qcm9wcy5pbmNsdWRlcyhwcm9wKSkge1xuICAgICAgICAgICAgICAgIFdyYXBwZXJIZWxwZXIuYXBwbHlQcm9wVmFsdWUoaW5zdGFuY2UsIHByb3AsIG5ld1ZhbHVlLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgaWYgKGJyeW50dW1Db25maWdzT25seS5pbmNsdWRlcyhwcm9wKSkge1xuICAgICAgICAgICAgICAgICAgICBXcmFwcGVySGVscGVyLmRldldhcm5pbmdVcGRhdGVQcm9wKGluc3RhbmNlTmFtZSwgcHJvcCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEZXN0cm95IHRoZSBjb21wb25lbnRcbiAgICAgKi9cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICBpZiAodGhpcy5pbnN0YW5jZSAmJiB0aGlzLmluc3RhbmNlLmRlc3Ryb3kpIHtcbiAgICAgICAgICAgIHRoaXMuaW5zdGFuY2UuZGVzdHJveSgpO1xuICAgICAgICB9XG4gICAgfVxufVxuIl19
|
|
853
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJ5bnR1bS1yYWRpby5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9jb21wb25lbnQvc3JjL2xpYi9icnludHVtLXJhZGlvLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxzREFBc0Q7QUFDdEQ7O0dBRUc7QUFFSCxPQUFPLEVBQUUsU0FBUyxFQUFjLFlBQVksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFrRCxNQUFNLGVBQWUsQ0FBQztBQUVuSSxPQUFPLGFBQWEsTUFBTSxrQkFBa0IsQ0FBQztBQUU3QyxPQUFPLEVBQXdJLEtBQUssRUFBc0YsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBR3hRLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDOztBQTBsQjVELE1BQU0sT0FBTyxxQkFBcUI7SUFvUjlCLFlBQVksT0FBbUI7UUFUdkIsa0JBQWEsR0FBRztZQUNwQixLQUFLLEVBQWMsU0FBUztZQUM1QixRQUFRLEVBQVcsU0FBUztZQUM1QixJQUFJLEVBQWUsU0FBUztZQUM1QixnQkFBZ0IsRUFBRyxJQUFJO1lBQ3ZCLFFBQVEsRUFBVyxFQUFFO1lBQ3JCLFNBQVMsRUFBVSxFQUFFO1NBQ3hCLENBQUM7UUE4SEYsa0JBQWtCO1FBQ2xCOzs7Ozs7Ozs7O1dBVUc7UUFDTyxhQUFRLEdBQVEsSUFBSSxZQUFZLEVBQTBKLENBQUM7UUFDck07Ozs7Ozs7Ozs7V0FVRztRQUNPLG1CQUFjLEdBQVEsSUFBSSxZQUFZLEVBQWtLLENBQUM7UUFDbk47Ozs7V0FJRztRQUNPLG9CQUFlLEdBQVEsSUFBSSxZQUFZLEVBQThDLENBQUM7UUFDaEc7Ozs7V0FJRztRQUNPLGlCQUFZLEdBQVEsSUFBSSxZQUFZLEVBQXdELENBQUM7UUFDdkc7Ozs7V0FJRztRQUNPLGlCQUFZLEdBQVEsSUFBSSxZQUFZLEVBQTZFLENBQUM7UUFDNUg7Ozs7OztXQU1HO1FBQ08sZUFBVSxHQUFRLElBQUksWUFB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O2dCQUNHLHFCQUFxQjtzQkFBN0IsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxDQUFDO3NCQUFULEtBQUs7Z0JBQ0csQ0FBQztzQkFBVCxLQUFLO2dCQUdHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFjSSxRQUFRO3NCQUFqQixNQUFNO2dCQVlHLGNBQWM7c0JBQXZCLE1BQU07Z0JBTUcsZUFBZTtzQkFBeEIsTUFBTTtnQkFNRyxZQUFZO3NCQUFyQixNQUFNO2dCQU1HLFlBQVk7c0JBQXJCLE1BQU07Z0JBUUcsVUFBVTtzQkFBbkIsTUFBTTtnQkFZRyxRQUFRO3NCQUFqQixNQUFNO2dCQU9HLE9BQU87c0JBQWhCLE1BQU07Z0JBT0csT0FBTztzQkFBaEIsTUFBTTtnQkFNRyxTQUFTO3NCQUFsQixNQUFNO2dCQU1HLGdCQUFnQjtzQkFBekIsTUFBTTtnQkFXRyxTQUFTO3NCQUFsQixNQUFNO2dCQWFHLFVBQVU7c0JBQW5CLE1BQU07Z0JBTUcsTUFBTTtzQkFBZixNQUFNO2dCQVFHLE9BQU87c0JBQWhCLE1BQU07Z0JBU0csT0FBTztzQkFBaEIsTUFBTTtnQkFNRyxVQUFVO3NCQUFuQixNQUFNO2dCQUtHLFdBQVc7c0JBQXBCLE1BQU07Z0JBVUcsUUFBUTtzQkFBakIsTUFBTTtnQkFNRyxNQUFNO3NCQUFmLE1BQU07Z0JBT0csU0FBUztzQkFBbEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFycyAqL1xuLyoqXG4gKiBBbmd1bGFyIHdyYXBwZXIgZm9yIEJyeW50dW0gUmFkaW9cbiAqL1xuXG5pbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgT3V0cHV0LCBJbnB1dCwgU2ltcGxlQ2hhbmdlLCBTaW1wbGVDaGFuZ2VzLCBPbkRlc3Ryb3ksIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgV3JhcHBlckhlbHBlciBmcm9tICcuL3dyYXBwZXIuaGVscGVyJztcblxuaW1wb3J0IHsgQWxpZ25TcGVjLCBCYXNlLCBDaGVja2JveCwgQ29udGFpbmVySXRlbUNvbmZpZywgRG9tQ29uZmlnLCBGaWVsZCwgRmllbGRDb250YWluZXJDb25maWcsIEZpZWxkVHJpZ2dlckNvbmZpZywgS2V5TWFwQ29uZmlnLCBNYXNrQ29uZmlnLCBSYWRpbywgUmFkaW9MaXN0ZW5lcnMsIFJlYWN0SlNYLCBSZWN0YW5nbGUsIFNjcm9sbGVyLCBUYWJDb25maWcsIFRvb2x0aXBDb25maWcsIFZ1ZUNvbmZpZywgV2lkZ2V0IH0gZnJvbSAnQGJyeW50dW0vZ3JpZCc7XG5cbmltcG9ydCB7IERvbUhlbHBlciwgU3RyaW5nSGVscGVyIH0gZnJvbSAnQGJyeW50dW0vZ3JpZCc7XG5pbXBvcnQgeyBpbml0VGhlbWVJblNoYWRvd1Jvb3RzIH0gZnJvbSAnLi9zaGFkb3dkb20uaGVscGVyJztcblxuZXhwb3J0IHR5cGUgQnJ5bnR1bVJhZGlvUHJvcHMgPSB7XG4gICAgLy8gQ29uZmlnc1xuICAgIC8qKlxuICAgICAqIEVsZW1lbnQgKG9yIGVsZW1lbnQgaWQpIHRvIGFkb3B0IGFzIHRoaXMgV2lkZ2V0J3MgZW5jYXBzdWxhdGluZyBlbGVtZW50LiBUaGUgd2lkZ2V0J3NcbiAgICAgKiBjb250ZW50IHdpbGwgYmUgcGxhY2VkIGluc2lkZSB0aGlzIGVsZW1lbnQuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9SYWRpbyNjb25maWctYWRvcHQpXG4gICAgICovXG4gICAgYWRvcHQgPyA6IEhUTUxFbGVtZW50fHN0cmluZ1xuICAgIC8qKlxuICAgICAqICpPbmx5IHZhbGlkIGlmIHRoaXMgV2lkZ2V0IGlzIFtmbG9hdGluZ10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1dpZGdldCNjb25maWctZmxvYXRpbmcpLipcbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1JhZGlvI2NvbmZpZy1hbGlnbilcbiAgICAgKi9cbiAgICBhbGlnbiA/IDogQWxpZ25TcGVjfHN0cmluZ1xuICAgIC8qKlxuICAgICAqIFdoZW4gdGhpcyB3aWRnZXQgaXMgYSBjaGlsZCBvZiBhIFtDb250YWluZXJdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9Db250YWluZXIpLCBpdCB3aWxsIGJ5IGRlZmF1bHQgYmUgcGFydGljaXBhdGluZyBpbiBhXG4gICAgICogZmxleGJveCBsYXlvdXQuIFRoaXMgY29uZmlnIGFsbG93cyB5b3UgdG8gc2V0IHRoaXMgd2lkZ2V0J3NcbiAgICAgKiBbYWxpZ24tc2VsZl0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL2FsaWduLXNlbGYpIHN0eWxlLlxuICAgICAqL1xuICAgIGFsaWduU2VsZiA/IDogc3RyaW5nXG4gICAgLyoqXG4gICAgICogKk9ubHkgdmFsaWQgaWYgdGhpcyBXaWRnZXQgaXMgW2Zsb2F0aW5nXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvV2lkZ2V0I2NvbmZpZy1mbG9hdGluZykgYW5kIGJlaW5nIHNob3duIHRocm91Z2ggW3Nob3dCeV0oI0NvcmUvd2lkZ2V0L1dpZGdldCNmdW5jdGlvbi1zaG93QnkpLipcbiAgICAgKiBgdHJ1ZWAgdG8gc2hvdyBhIGNvbm5lY3RvciBhcnJvdyBwb2ludGluZyB0byB0aGUgYWxpZ24gdGFyZ2V0LlxuICAgICAqL1xuICAgIGFuY2hvciA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIEVsZW1lbnQgKG9yIHRoZSBpZCBvZiBhbiBlbGVtZW50KSB0byBhcHBlbmQgdGhpcyB3aWRnZXQncyBlbGVtZW50IHRvLiBDYW4gYmUgY29uZmlndXJlZCwgb3Igc2V0IG9uY2UgYXRcbiAgICAgKiBydW50aW1lLiBUbyBhY2Nlc3MgdGhlIGVsZW1lbnQgb2YgYSByZW5kZXJlZCB3aWRnZXQsIHNlZSBbZWxlbWVudF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1dpZGdldCNwcm9wZXJ0eS1lbGVtZW50KS5cbiAgICAgKiA8ZGl2IGNsYXNzPVwibm90ZVwiPldoZW4gY3JlYXRpbmcgbmVzdGVkIHRyZWVzIG9mIHdpZGdldHMsIHRoaXMgc2hvdWxkIG9ubHkgYmUgdXNlZCBvbiB0aGUgb3V0ZXJtb3N0IHdpZGdldC5cbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1JhZGlvI2NvbmZpZy1hcHBlbmRUbylcbiAgICAgKi9cbiAgICBhcHBlbmRUbyA/IDogSFRNTEVsZW1lbnR8c3RyaW5nXG4gICAgLyoqXG4gICAgICogQSBsb2NhbGl6YWJsZSBzdHJpbmcgKE1heSBjb250YWluIGAnTHt9J2AgdG9rZW5zIHdoaWNoIHJlc29sdmUgaW4gdGhlIGxvY2FsZSBmaWxlKSB0byBpbmplY3RcbiAgICAgKiBpbnRvIGFuIGVsZW1lbnQgd2hpY2ggd2lsbCBiZSBsaW5rZWQgdXNpbmcgdGhlIGBhcmlhLWRlc2NyaWJlZGJ5YCBhdHRyaWJ1dGUuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9SYWRpbyNjb25maWctYXJpYURlc2NyaXB0aW9uKVxuICAgICAqL1xuICAgIGFyaWFEZXNjcmlwdGlvbiA/IDogc3RyaW5nXG4gICAgLyoqXG4gICAgICogQSBsb2NhbGl6YWJsZSBzdHJpbmcgKE1heSBjb250YWluIGAnTHt9J2AgdG9rZW5zIHdoaWNoIHJlc29sdmUgaW4gdGhlIGxvY2FsZSBmaWxlKSB0byBpbmplY3QgYXNcbiAgICAgKiB0aGUgYGFyaWEtbGFiZWxgIGF0dHJpYnV0ZS5cbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1JhZGlvI2NvbmZpZy1hcmlhTGFiZWwpXG4gICAgICovXG4gICAgYXJpYUxhYmVsID8gOiBzdHJpbmdcbiAgICAvKipcbiAgICAgKiBTcGVjaWZ5IGB0cnVlYCB0byBhdXRvbWF0aWNhbGx5IFtjb2xsYXBzZV0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L0ZpZWxkQ29udGFpbmVyI2NvbmZpZy1jb2xsYXBzZWQpIHRoZSBmaWVsZCdzXG4gICAgICogW2NvbnRhaW5lcl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L0NoZWNrYm94I2NvbmZpZy1jb250YWluZXIpIHdoZW4gdGhlIGZpZWxkIGlzIG5vdCBbY2hlY2tlZF0oI0NvcmUvd2lkZ2V0L0NoZWNrYm94I3Byb3BlcnR5LWNoZWNrZWQpLlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvUmFkaW8jY29uZmlnLWF1dG9Db2xsYXBzZSlcbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICBhdXRvQ29sbGFwc2UgPyA6IGJvb2xlYW58KCgpID0+IGJvb2xlYW4pXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgbmF0aXZlIGBhdXRvY29tcGxldGVgIHByb3BlcnR5IG9mIHRoZSB1bmRlcmx5aW5nIGlucHV0IGVsZW1lbnQuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBwbGVhc2UgcmVmZXIgdG9cbiAgICAgKiBbTUROXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0F0dHJpYnV0ZXMvYXV0b2NvbXBsZXRlKVxuICAgICAqL1xuICAgIGF1dG9Db21wbGV0ZSA/IDogc3RyaW5nXG4gICAgLyoqXG4gICAgICogU3BlY2lmeSBgdHJ1ZWAgdG8gYXV0byBzZWxlY3QgZmllbGQgY29udGVudHMgb24gZm9jdXNcbiAgICAgKi9cbiAgICBhdXRvU2VsZWN0ID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogSW5pdGlhbCB0ZXh0IHRvIHNob3cgaW4gYmFkZ2UuXG4gICAgICovXG4gICAgYmFkZ2UgPyA6IHN0cmluZ1xuICAgIC8qKlxuICAgICAqIEFuIG9iamVjdCB3aGVyZSBwcm9wZXJ0eSBuYW1lcyB3aXRoIGEgdHJ1dGh5IHZhbHVlIGluZGljYXRlIHdoaWNoIGV2ZW50cyBzaG91bGQgYnViYmxlIHVwIHRoZSBvd25lcnNoaXBcbiAgICAgKiBoaWVyYXJjaHkgd2hlbiB0cmlnZ2VyZWQuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9SYWRpbyNjb25maWctYnViYmxlRXZlbnRzKVxuICAgICAqL1xuICAgIGJ1YmJsZUV2ZW50cyA/IDogb2JqZWN0XG4gICAgLyoqXG4gICAgICogU2V0IHRvIGBmYWxzZWAgdG8gbm90IGNhbGwgb25YWFggbWV0aG9kIG5hbWVzIChlLmcuIGBvblNob3dgLCBgb25DbGlja2ApLCBhcyBhbiBlYXN5IHdheSB0byBsaXN0ZW4gZm9yIGV2ZW50cy5cbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1JhZGlvI2NvbmZpZy1jYWxsT25GdW5jdGlvbnMpXG4gICAgICovXG4gICAgY2FsbE9uRnVuY3Rpb25zID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogQnkgZGVmYXVsdCwgaWYgYW4gZXZlbnQgaGFuZGxlciB0aHJvd3MgYW4gZXhjZXB0aW9uLCB0aGUgZXJyb3IgcHJvcGFnYXRlcyB1cCB0aGUgc3RhY2sgYW5kIHRoZVxuICAgICAqIGFwcGxpY2F0aW9uIHN0YXRlIGlzIHVuZGVmaW5lZC4gQ29kZSB3aGljaCBmb2xsb3dzIHRoZSBldmVudCBoYW5kbGVyIHdpbGwgKm5vdCogYmUgZXhlY3V0ZWQuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9SYWRpbyNjb25maWctY2F0Y2hFdmVudEhhbmRsZXJFeGNlcHRpb25zKVxuICAgICAqL1xuICAgIGNhdGNoRXZlbnRIYW5kbGVyRXhjZXB0aW9ucyA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqICpPbmx5IHZhbGlkIGlmIHRoaXMgV2lkZ2V0IGlzIFtmbG9hdGluZ10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1dpZGdldCNjb25maWctZmxvYXRpbmcpLipcbiAgICAgKiBTZXQgdG8gYHRydWVgIHRvIGNlbnRyZSB0aGUgV2lkZ2V0IGluIGJyb3dzZXIgdmlld3BvcnQgc3BhY2UuXG4gICAgICovXG4gICAgY2VudGVyZWQgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBUaGUgY2hlY2tlZCBzdGF0ZS4gVGhlIHNhbWUgYXMgYHZhbHVlYC5cbiAgICAgKi9cbiAgICBjaGVja2VkID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogVGhlIHZhbHVlIHRvIHByb3ZpZGUgZm9yIHRoaXMgd2lkZ2V0IGluIFt2YWx1ZXNdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9Db250YWluZXIjcHJvcGVydHktdmFsdWVzKSB3aGVuIGl0IGlzXG4gICAgICogW2NoZWNrZWRdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9DaGVja2JveCNwcm9wZXJ0eS1jaGVja2VkKS5cbiAgICAgKiBBIHZhbHVlIG9mIGB1bmRlZmluZWRgIHdpbGwgY2F1c2UgdGhpcyB3aWRnZXQgbm90IHRvIGluY2x1ZGUgaXRzIHZhbHVlIHdoZW4gY2hlY2tlZC5cbiAgICAgKi9cbiAgICBjaGVja2VkVmFsdWUgPyA6IGFueVxuICAgIC8qKlxuICAgICAqIEEgZnVuY3Rpb24gKG9yIHRoZSBuYW1lIG9mIGEgZnVuY3Rpb24gaW4gdGhlIG93bmVyc2hpcCBoaWVyYXJjaHkpIGNhbGxlZCBkdXJpbmcgZmllbGQgdmFsaWRhdGlvblxuICAgICAqIHRvIHBlcmZvcm0gY3VzdG9tIHZhbGlkaXR5IGNoZWNrcy4gVGhlIGZ1bmN0aW9uIGlzIGNhbGxlZCBhcyBwYXJ0IG9mIHRoZSBbaXNWYWxpZF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L0ZpZWxkI3Byb3BlcnR5LWlzVmFsaWQpXG4gICAgICogZXZhbHVhdGlvbiwgYWZ0ZXIgdGhlIGJ1aWx0LWluIFtyZXF1aXJlZF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L0ZpZWxkI2NvbmZpZy1yZXF1aXJlZCkgY2hlY2suXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9SYWRpbyNjb25maWctY2hlY2tWYWxpZGl0eSlcbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0LkZpZWxkfSBmaWVsZCBUaGUgZmllbGQgYmVpbmcgdmFsaWRhdGVkXG4gICAgICogQHJldHVybnMge3ZvaWR9XG4gICAgICovXG4gICAgY2hlY2tWYWxpZGl0eSA/IDogKChmaWVsZDogRmllbGQpID0+IHZvaWQpfHN0cmluZ1xuICAgIC8qKlxuICAgICAqIEN1c3RvbSBDU1MgY2xhc3NlcyB0byBhZGQgdG8gZWxlbWVudC5cbiAgICAgKiBNYXkgYmUgc3BlY2lmaWVkIGFzIGEgc3BhY2Ugc2VwYXJhdGVkIHN0cmluZywgb3IgYXMgYW4gb2JqZWN0IGluIHdoaWNoIHByb3BlcnR5IG5hbWVzXG4gICAgICogd2l0aCB0cnV0aHkgdmFsdWVzIGFyZSB1c2VkIGFzIHRoZSBjbGFzcyBuYW1lczpcbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1JhZGlvI2NvbmZpZy1jbHMpXG4gICAgICovXG4gICAgY2xzID8gOiBzdHJpbmd8b2JqZWN0XG4gICAgLyoqXG4gICAgICogQ2hlY2tib3ggY29sb3IsIG11c3QgaGF2ZSBtYXRjaCBpbiBDU1NcbiAgICAgKi9cbiAgICBjb2xvciA/IDogc3RyaW5nXG4gICAgLyoqXG4gICAgICogUHJvZ3JhbW1hdGljIGNvbnRyb2wgb3ZlciB3aGljaCBjb2x1bW4gdG8gc3RhcnQgaW4gd2hlbiB1c2VkIGluIGEgZ3JpZCBsYXlvdXQuXG4gICAgICovXG4gICAgY29sdW1uID8gOiBudW1iZXJcbiAgICBjb25maWcgPyA6IG9iamVjdFxuICAgIC8qKlxuICAgICAqICpPbmx5IHZhbGlkIGlmIHRoaXMgV2lkZ2V0IGlzIFtmbG9hdGluZ10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1dpZGdldCNjb25maWctZmxvYXRpbmcpIG9yIFtwb3NpdGlvbmVkXSgjQ29yZS93aWRnZXQvV2lkZ2V0I2NvbmZpZy1wb3NpdGlvbmVkKS4qXG4gICAgICogRWxlbWVudCwgV2lkZ2V0IG9yIFJlY3RhbmdsZSB0byB3aGljaCB0aGlzIFdpZGdldCBpcyBjb25zdHJhaW5lZC5cbiAgICAgKi9cbiAgICBjb25zdHJhaW5UbyA/IDogSFRNTEVsZW1lbnR8V2lkZ2V0fFJlY3RhbmdsZVxuICAgIC8qKlxuICAgICAqIFRoZSBjb25maWd1cmF0aW9uIGZvciBhZGRpdGlvbmFsIGl0ZW1zIGFzc29jaWF0ZWQgdG8gdGhpcyBmaWVsZC4gVGhpcyBpcyB0eXBpY2FsbHkgdXNlZCB0byBhZGQgY29udGV4dHVhbFxuICAgICAqIGZpZWxkcyByZWxhdGVkIHRvIGEgW2NoZWNrYm94XShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvQ2hlY2tib3gpIG9yIFtyYWRpbyBidXR0b25dKCNDb3JlL3dpZGdldC9SYWRpbykuIFNlZVxuICAgICAqIHRoZXNlIGNsYXNzZXMgZm9yIGV4YW1wbGVzIG9mIG5lc3RlZCBmaWVsZHMuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9SYWRpbyNjb25maWctY29udGFpbmVyKVxuICAgICAqL1xuICAgIGNvbnRhaW5lciA/IDogUmVjb3JkPHN0cmluZywgQ29udGFpbmVySXRlbUNvbmZpZz58Q29udGFpbmVySXRlbUNvbmZpZ1tdfEZpZWxkQ29udGFpbmVyQ29uZmlnXG4gICAgLyoqXG4gICAgICogVGhlIGNvbmZpZyBjb250cm9scyBob3cgdGhlIHZhbHVlIG9mIG5lc3RlZCBpdGVtcyBhcmUgaGFuZGxlZCB3aGVuIGEgcGFyZW50IGNvbnRhaW5lciBnZXRzIG9yIHNldHMgaXRzXG4gICAgICogW3ZhbHVlc10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L0NvbnRhaW5lciNwcm9wZXJ0eS12YWx1ZXMpLlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvUmFkaW8jY29uZmlnLWNvbnRhaW5WYWx1ZXMpXG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5GaWVsZH0gZmllbGQgRmllbGQgaW5zdGFuY2VcbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICBjb250YWluVmFsdWVzID8gOiBib29sZWFufHN0cmluZ3woKGZpZWxkOiBGaWVsZCkgPT4gYm9vbGVhbilcbiAgICAvKipcbiAgICAgKiBDdXN0b20gQ1NTIGNsYXNzZXMgdG8gYWRkIHRvIHRoZSBbY29udGVudEVsZW1lbnRdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9XaWRnZXQjcHJvcGVydHktY29udGVudEVsZW1lbnQpLlxuICAgICAqIE1heSBiZSBzcGVjaWZpZWQgYXMgYSBzcGFjZSBzZXBhcmF0ZWQgc3RyaW5nLCBvciBhcyBhbiBvYmplY3QgaW4gd2hpY2ggcHJvcGVydHkgbmFtZXNcbiAgICAgKiB3aXRoIHRydXRoeSB2YWx1ZXMgYXJlIHVzZWQgYXMgdGhlIGNsYXNzIG5hbWVzOlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvUmFkaW8jY29uZmlnLWNvbnRlbnRFbGVtZW50Q2xzKVxuICAgICAqL1xuICAgIGNvbnRlbnRFbGVtZW50Q2xzID8gOiBzdHJpbmd8b2JqZWN0XG4gICAgLyoqXG4gICAgICogV2hlbiB0aGlzIFdpZGdldCBjb25maWd1cmF0aW9uIGlzIHVzZWQgaW4gdGhlIEdyaWQncyBSb3dFeHBhbmRlciBmZWF0dXJlJ3MgYHdpZGdldGAgY29uZmlnLCBwcm92aWRlIHRoZVxuICAgICAqIGZpZWxkIG9uIHRoZSBleHBhbmRlZCByZWNvcmQgdG8gdXNlIGZvciBwb3B1bGF0aW5nIHRoaXMgd2lkZ2V0J3Mgc3RvcmUgKGlmIGFwcGxpY2FibGUpXG4gICAgICovXG4gICAgZGF0YUZpZWxkID8gOiBzdHJpbmdcbiAgICAvKipcbiAgICAgKiBPYmplY3QgdG8gYXBwbHkgdG8gZWxlbWVudHMgZGF0YXNldCAoZWFjaCBrZXkgd2lsbCBiZSB1c2VkIGFzIGEgZGF0YS1hdHRyaWJ1dGUgb24gdGhlIGVsZW1lbnQpXG4gICAgICovXG4gICAgZGF0YXNldCA/IDogUmVjb3JkPHN0cmluZywgc3RyaW5nPlxuICAgIC8qKlxuICAgICAqIFRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSB0byBzZXQgd2hlbiBhIHNpbmdsZSB2YWx1ZSBpcyB0byBiZSBhcHBsaWVkIHRvIHRoaXMgV2lkZ2V0LiBTdWNoIGFzIHdoZW4gdXNlZFxuICAgICAqIGluIGEgZ3JpZCBXaWRnZXRDb2x1bW4sIHRoaXMgaXMgdGhlIHByb3BlcnR5IHRvIHdoaWNoIHRoZSBjb2x1bW4ncyBgZmllbGRgIGlzIGFwcGxpZWQuXG4gICAgICovXG4gICAgZGVmYXVsdEJpbmRQcm9wZXJ0eSA/IDogc3RyaW5nXG4gICAgLyoqXG4gICAgICogQ2hlY2sgZm9yIENTUyBjb21wYXRpYmlsaXR5IGFuZCBpbmNsdXNpb24gcmVsYXRlZCBpc3N1ZXMgYW5kIHRyeSB0byBhdXRvIGZpeCB0aGVtLiBQZXJmb3JtcyB0aGUgZm9sbG93aW5nXG4gICAgICogY2hlY2tzOlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvUmFkaW8jY29uZmlnLWRldGVjdENTU0NvbXBhdGliaWxpdHlJc3N1ZXMpXG4gICAgICovXG4gICAgZGV0ZWN0Q1NTQ29tcGF0aWJpbGl0eUlzc3VlcyA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIERpc2FibGUgb3IgZW5hYmxlIHRoZSB3aWRnZXQuIEl0IGlzIHNpbWlsYXIgdG8gW3JlYWRPbmx5XShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvV2lkZ2V0I2NvbmZpZy1yZWFkT25seSkgZXhjZXB0IGEgZGlzYWJsZWQgd2lkZ2V0XG4gICAgICogY2Fubm90IGJlIGZvY3VzZWQsIHVzZXMgYSBkaWZmZXJlbnQgcmVuZGl0aW9uICh1c3VhbGx5IGdyZXlpc2gpIGFuZCBkb2VzIG5vdCBhbGxvdyBzZWxlY3RpbmcgaXRzIHZhbHVlLlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvUmFkaW8jY29uZmlnLWRpc2FibGVkKVxuICAgICAqL1xuICAgIGRpc2FibGVkID8gOiBib29sZWFufCdpbmVydCdcbiAgICAvKipcbiAgICAgKiBDb250cm9scyB0aGUgcGxhY2VtZW50IG9mIHRoaXMgd2lkZ2V0IHdoZW4gaXQgaXMgYWRkZWQgdG8gYSBbcGFuZWwncyBdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9QYW5lbClcbiAgICAgKiBbc3RyaXBzIGNvbGxlY3Rpb25dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9QYW5lbCNjb25maWctc3RyaXBzKS4gVHlwaWNhbCB2YWx1ZXMgZm9yIHRoaXMgY29uZmlnIGFyZSBgJ3RvcCdgLFxuICAgICAqIGAnYm90dG9tJ2AsIGAnbGVmdCdgLCBvciBgJ3JpZ2h0J2AsIHdoaWNoIGNhdXNlIHRoZSB3aWRnZXQgdG8gYmUgcGxhY2VkIG9uIHRoYXQgc2lkZSBvZiB0aGUgcGFuZWwnc1xuICAgICAqIGJvZHkuIFN1Y2ggd2lkZ2V0cyBhcmUgY2FsbGVkIFwiZWRnZSBzdHJpcHNcIi5cbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1JhZGlvI2NvbmZpZy1kb2NrKVxuICAgICAqL1xuICAgIGRvY2sgPyA6ICd0b3AnfCdib3R0b20nfCdsZWZ0J3wncmlnaHQnfCdzdGFydCd8J2VuZCd8J2hlYWRlcid8J3ByZS1oZWFkZXInfG9iamVjdFxuICAgIC8qKlxuICAgICAqICpPbmx5IHZhbGlkIGlmIHRoaXMgV2lkZ2V0IGlzIFtmbG9hdGluZ10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1dpZGdldCNjb25maWctZmxvYXRpbmcpLipcbiAgICAgKiBTZXQgdG8gYHRydWVgIHRvIGJlIGFibGUgdG8gZHJhZyBhIHdpZGdldCBmcmVlbHkgb24gdGhlIHBhZ2UuIE9yIHNldCB0byBhbiBvYmplY3Qgd2l0aCBhIMK0aGFuZGxlU2VsZWN0b3LCtFxuICAgICAqIHByb3BlcnR5IHdoaWNoIGNvbnRyb2xzIHdoZW4gYSBkcmFnIHNob3VsZCBzdGFydC5cbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1JhZGlvI2NvbmZpZy1kcmFnZ2FibGUpXG4gICAgICogQHByb3BlcnR5IHtzdHJpbmd9IGhhbmRsZVNlbGVjdG9yIENTUyBzZWxlY3RvciB1c2VkIHRvIGRldGVybWluZSBpZiBkcmFnIGNhbiBiZSBzdGFydGVkIGZyb20gYSBtb3VzZS1kb3duZWQgZWxlbWVudCBpbnNpZGUgdGhlIHdpZGdldFxuICAgICAqL1xuICAgIGRyYWdnYWJsZSA/IDogYm9vbGVhbnxvYmplY3RcbiAgICAvKipcbiAgICAgKiBBbiBvYmplY3Qgc3BlY2lmeWluZyBhdHRyaWJ1dGVzIHRvIGFzc2lnbiB0byB0aGUgcm9vdCBlbGVtZW50IG9mIHRoaXMgd2lkZ2V0LlxuICAgICAqIFNldCBgbnVsbGAgdmFsdWUgdG8gYXR0cmlidXRlIHRvIHJlbW92ZSBpdC5cbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1JhZGlvI2NvbmZpZy1lbGVtZW50QXR0cmlidXRlcylcbiAgICAgKi9cbiAgICBlbGVtZW50QXR0cmlidXRlcyA/IDogUmVjb3JkPHN0cmluZywgc3RyaW5nfG51bGw+XG4gICAgZXh0cmFEYXRhID8gOiBhbnlcbiAgICAvKipcbiAgICAgKiBXaGVuIHRoaXMgd2lkZ2V0IGlzIGEgY2hpbGQgb2YgYSBbQ29udGFpbmVyXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvQ29udGFpbmVyKSwgaXQgd2lsbCBieSBkZWZhdWx0IGJlIHBhcnRpY2lwYXRpbmcgaW4gYVxuICAgICAqIGZsZXhib3ggbGF5b3V0LiBUaGlzIGNvbmZpZyBhbGxvd3MgeW91IHRvIHNldCB0aGlzIHdpZGdldCdzXG4gICAgICogW2ZsZXhdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy9mbGV4KSBzdHlsZS5cbiAgICAgKiBUaGlzIG1heSBiZSBjb25maWd1cmVkIGFzIGEgc2luZ2xlIG51bWJlciBvciBhIGAmbHQ7ZmxleC1ncm93Jmd0OyAmbHQ7ZmxleC1zaHJpbmsmZ3Q7ICZsdDtmbGV4LWJhc2lzJmd0O2AgZm9ybWF0IHN0cmluZy5cbiAgICAgKiBudW1lcmljLW9ubHkgdmFsdWVzIGFyZSBpbnRlcnByZXRlZCBhcyB0aGUgYGZsZXgtZ3Jvd2AgdmFsdWUuXG4gICAgICovXG4gICAgZmxleCA/IDogbnVtYmVyfHN0cmluZ1xuICAgIC8qKlxuICAgICAqIFNldCB0byBgdHJ1ZWAgdG8gbW92ZSB0aGUgd2lkZ2V0IG91dCBvZiB0aGUgZG9jdW1lbnQgZmxvdyBhbmQgcG9zaXRpb24gaXRcbiAgICAgKiBhYnNvbHV0ZWx5IGluIGJyb3dzZXIgdmlld3BvcnQgc3BhY2UuXG4gICAgICovXG4gICAgZmxvYXRpbmcgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBXaWRnZXQncyBoZWlnaHQsIHVzZWQgdG8gc2V0IGVsZW1lbnQgYHN0eWxlLmhlaWdodGAuIEVpdGhlciBzcGVjaWZ5IGEgdmFsaWQgaGVpZ2h0IHN0cmluZyBvciBhIG51bWJlcixcbiAgICAgKiB3aGljaCB3aWxsIGdldCAncHgnIGFwcGVuZGVkLiBXZSByZWNvbW1lbmQgdXNpbmcgQ1NTIGFzIHRoZSBwcmltYXJ5IHdheSB0byBjb250cm9sIGhlaWdodCwgYnV0IGluIHNvbWVcbiAgICAgKiBjYXNlcyB0aGlzIGNvbmZpZyBpcyBjb252ZW5pZW50LlxuICAgICAqL1xuICAgIGhlaWdodCA/IDogc3RyaW5nfG51bWJlclxuICAgIC8qKlxuICAgICAqIENvbmZpZ3VyZSB3aXRoIHRydWUgdG8gbWFrZSB3aWRnZXQgaW5pdGlhbGx5IGhpZGRlbi5cbiAgICAgKi9cbiAgICBoaWRkZW4gPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiAqT25seSB2YWxpZCBpZiB0aGlzIFdpZGdldCBpcyBbZmxvYXRpbmddKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9XaWRnZXQjY29uZmlnLWZsb2F0aW5nKS4qXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9SYWRpbyNjb25maWctaGlkZUFuaW1hdGlvbilcbiAgICAgKi9cbiAgICBoaWRlQW5pbWF0aW9uID8gOiBib29sZWFufG9iamVjdFxuICAgIC8qKlxuICAgICAqIFNwZWNpZnkgYHRydWVgIHRvIGhpZ2hsaWdodCBmaWVsZCBhZnRlciBleHRlcm5hbCB2YWx1ZSBjaGFuZ2VzXG4gICAgICovXG4gICAgaGlnaGxpZ2h0RXh0ZXJuYWxDaGFuZ2UgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBBbiBvcHRpb25hbCBzdHJpbmcgdG8gZGlzcGxheSBpbnNpZGUgdGhlIGlucHV0IGZpZWxkIGFzIGFuIG92ZXJsYXkuIFRoaXMgY2FuIGJlIHVzZWZ1bCBmb3IgZGlzcGxheWluZ1xuICAgICAqIGEgZmllbGQncyB1bml0cy5cbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1JhZGlvI2NvbmZpZy1oaW50KVxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBkYXRhIEEgZGF0YSBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0LkZpZWxkfSBkYXRhLnNvdXJjZSBBIHJlZmVyZW5jZSB0byB0aGUgZmllbGQgaW5zdGFuY2VcbiAgICAgKiBAcGFyYW0ge2FueX0gZGF0YS52YWx1ZSBUaGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgZmllbGRcbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgICAqL1xuICAgIGhpbnQgPyA6IHN0cmluZ3woKGRhdGE6IHsgc291cmNlOiBGaWVsZCwgdmFsdWU6IGFueSB9KSA9PiBzdHJpbmcpXG4gICAgLyoqXG4gICAgICogVGhpcyBjb25maWcgaXMgc2ltaWxhciB0byBbaGludF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L0ZpZWxkI2NvbmZpZy1oaW50KSBleGNlcHQgdGhhdCB0aGlzIGNvbmZpZyBpcyB1c2VkIHRvIGRpc3BsYXkgSFRNTCBjb250ZW50LlxuICAgICAqIFNpbmNlIHRoaXMgY2FuIGFsbG93IG1hbGljaW91cyBjb250ZW50IHRvIGJlIGV4ZWN1dGVkLCBiZSBzdXJlIG5vdCB0byBpbmNsdWRlIHVzZXItZW50ZXJlZCBkYXRhIG9yIHRvXG4gICAgICogZW5jb2RlIHN1Y2ggZGF0YSAoc2VlIFtlbmNvZGVIdG1sXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS9oZWxwZXIvU3RyaW5nSGVscGVyI2Z1bmN0aW9uLWVuY29kZUh0bWwtc3RhdGljKSkuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9SYWRpbyNjb25maWctaGludEh0bWwpXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGRhdGEgQSBkYXRhIG9iamVjdFxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuRmllbGR9IGRhdGEuc291cmNlIEEgcmVmZXJlbmNlIHRvIHRoZSBmaWVsZCBpbnN0YW5jZVxuICAgICAqIEBwYXJhbSB7YW55fSBkYXRhLnZhbHVlIFRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBmaWVsZFxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAgICovXG4gICAgaGludEh0bWwgPyA6IHN0cmluZ3woKGRhdGE6IHsgc291cmNlOiBGaWVsZCwgdmFsdWU6IGFueSB9KSA9PiBzdHJpbmcpXG4gICAgLyoqXG4gICAgICogV2lkZ2V0IGlkLCBpZiBub3Qgc3BlY2lmaWVkIG9uZSB3aWxsIGJlIGdlbmVyYXRlZC4gQWxzbyB1c2VkIGZvciBsb29rdXBzIHRocm91Z2ggV2lkZ2V0LmdldEJ5SWRcbiAgICAgKi9cbiAgICBpZCA/IDogc3RyaW5nXG4gICAgLyoqXG4gICAgICogRGV0ZXJtaW5lcyBpZiB0aGUgd2lkZ2V0cyByZWFkLW9ubHkgc3RhdGUgc2hvdWxkIGJlIGNvbnRyb2xsZWQgYnkgaXRzIHBhcmVudC5cbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1JhZGlvI2NvbmZpZy1pZ25vcmVQYXJlbnRSZWFkT25seSlcbiAgICAgKi9cbiAgICBpZ25vcmVQYXJlbnRSZWFkT25seSA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIFNldCB0aGlzIGNvbmZpZyB0byBgdHJ1ZWAgdG8gYWx3YXlzIGRpc3BsYXkgaXRlbXMgaG9yaXpvbnRhbGx5IGFsb25nIHdpdGggdGhpcyBmaWVsZC4gVGhpcyBhc3NpZ25zIGFuXG4gICAgICogW2hib3hdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9sYXlvdXQvQm94KSBhcyB0aGUgW2xheW91dF0oI0NvcmUvd2lkZ2V0L0NvbnRhaW5lciNjb25maWctbGF5b3V0KSB0byB0aGVcbiAgICAgKiBbY29udGFpbmVyXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvRmllbGQjY29uZmlnLWNvbnRhaW5lcikuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9SYWRpbyNjb25maWctaW5saW5lKVxuICAgICAqL1xuICAgIGlubGluZSA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIFRleHQgYWxpZ25tZW50IGZvciB0aGUgaW5wdXQgZmllbGQuXG4gICAgICovXG4gICAgaW5wdXRBbGlnbiA/IDogc3RyaW5nXG4gICAgLyoqXG4gICAgICogU2V0cyBjdXN0b20gYXR0cmlidXRlcyBvZiB0aGUgdW5kZXJseWluZyBpbnB1dCBlbGVtZW50LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHJlZmVyIHRvXG4gICAgICogW01ETl0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9BdHRyaWJ1dGVzKVxuICAgICAqL1xuICAgIGlucHV0QXR0cmlidXRlcyA/IDogUmVjb3JkPHN0cmluZywgc3RyaW5nPlxuICAgIC8qKlxuICAgICAqIElmIHlvdSBuZWVkIHRvIHVzZSBzb21ldGhpbmcgZWxzZSB0aGFuIGEgZGVmYXVsdCBgaW5wdXRgIGVsZW1lbnQsIGFzIHRoZSBpbnB1dCBlbGVtZW50LCBwcm92aWRlIHRoZSB0YWdcbiAgICAgKiBuYW1lIGhlcmUuIFBsZWFzZSBub3RlIHRoYXQgdGhpcyBpcyB1c2VkIGZvciBhZHZhbmNlZCB1c2FnZSBvbmx5LCBmb3IgZXhhbXBsZSB3aGVuIHVzaW5nIFdlYkNvbXBvbmVudHNcbiAgICAgKiAoY3VzdG9tIGVsZW1lbnRzKSwgYW5kIHRoYXQgdGhlIGNvbmZpZ3VyZWQgZWxlbWVudCBtdXN0IGZ1bGZpbCB0aGUgc2FtZSBjb250cmFjdCBhcyBhIHJlZ3VsYXIgaW5wdXRcbiAgICAgKiBlbGVtZW50LlxuICAgICAqL1xuICAgIGlucHV0VGFnID8gOiBzdHJpbmdcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBgdHlwZWAgYXR0cmlidXRlIG9mIHRoZSB1bmRlcmx5aW5nIGlucHV0IGVsZW1lbnQgKHBhc3N3b3JkLCBoaWRkZW4sIGRhdGUsIGNvbG9yLCBldGMuKS5cbiAgICAgKi9cbiAgICBpbnB1dFR5cGUgPyA6IHN0cmluZ1xuICAgIC8qKlxuICAgICAqIFRoZSB3aWR0aCB0byBhcHBseSB0byB0aGUgYC5iLWZpZWxkLWlubmVyYCBlbGVtZW50LCB3aGljaCBlbmNvbXBhc3NlcyB0aGUgYGlucHV0YCBlbGVtZW50IGFuZCBhbnlcbiAgICAgKiB0cmlnZ2Vycy4gSWYgYSBudW1iZXIgaXMgc3BlY2lmaWVkLCBgcHhgIHdpbGwgYmUgdXNlZC5cbiAgICAgKi9cbiAgICBpbnB1dFdpZHRoID8gOiBzdHJpbmd8bnVtYmVyXG4gICAgLyoqXG4gICAgICogRWxlbWVudCAob3IgZWxlbWVudCBpZCkgdG8gaW5zZXJ0IHRoaXMgd2lkZ2V0IGJlZm9yZS4gSWYgcHJvdmlkZWQsIFthcHBlbmRUb10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1dpZGdldCNjb25maWctYXBwZW5kVG8pIGNvbmZpZyBpcyBpZ25vcmVkLlxuICAgICAqIDxkaXYgY2xhc3M9XCJub3RlXCI+V2hlbiBjcmVhdGluZyBuZXN0ZWQgdHJlZXMgb2Ygd2lkZ2V0cywgdGhpcyBzaG91bGQgb25seSBiZSB1c2VkIG9uIHRoZSBvdXRlcm1vc3Qgd2lkZ2V0LlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvUmFkaW8jY29uZmlnLWluc2VydEJlZm9yZSlcbiAgICAgKi9cbiAgICBpbnNlcnRCZWZvcmUgPyA6IEhUTUxFbGVtZW50fHN0cmluZ1xuICAgIC8qKlxuICAgICAqIEVsZW1lbnQgKG9yIGVsZW1lbnQgaWQpIHRvIGFwcGVuZCB0aGlzIHdpZGdldCBlbGVtZW50IHRvLCBhcyBhIGZpcnN0IGNoaWxkLiBJZiBwcm92aWRlZCwgW2FwcGVuZFRvXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvV2lkZ2V0I2NvbmZpZy1hcHBlbmRUbykgY29uZmlnIGlzIGlnbm9yZWQuXG4gICAgICogPGRpdiBjbGFzcz1cIm5vdGVcIj5XaGVuIGNyZWF0aW5nIG5lc3RlZCB0cmVlcyBvZiB3aWRnZXRzLCB0aGlzIHNob3VsZCBvbmx5IGJlIHVzZWQgb24gdGhlIG91dGVybW9zdCB3aWRnZXQuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9SYWRpbyNjb25maWctaW5zZXJ0Rmlyc3QpXG4gICAgICovXG4gICAgaW5zZXJ0Rmlyc3QgPyA6IEhUTUxFbGVtZW50fHN0cmluZ1xuICAgIC8qKlxuICAgICAqIEFuIG9iamVjdCB3aG9zZSBrZXlzIGFyZSB0aGUgW2tleV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0tleWJvYXJkRXZlbnQva2V5KSBuYW1lXG4gICAgICogYW5kIG9wdGlvbmFsIG1vZGlmaWVyIHByZWZpeGVzOiBgJ0N0cmwrJ2AsIGAnQWx0KydgLCBgJ01ldGErJ2AsIGFuZCBgJ1NoaWZ0KydgIChjYXNlLWluc2Vuc2l0aXZlKS4gVGhlIHZhbHVlc1xuICAgICAqIGFyZSB0aGUgbmFtZSBvZiB0aGUgaW5zdGFuY2UgbWV0aG9kIHRvIGNhbGwgd2hlbiB0aGUga2V5c3Ryb2tlIGlzIHJlY2VpdmVkLlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvUmFkaW8jY29uZmlnLWtleU1hcClcbiAgICAgKi9cbiAgICBrZXlNYXAgPyA6IFJlY29yZDxzdHJpbmcsIEtleU1hcENvbmZpZz5cbiAgICAvKipcbiAgICAgKiBUaGUgZGVsYXkgaW4gbWlsbGlzZWNvbmRzIHRvIHdhaXQgYWZ0ZXIgdGhlIGxhc3Qga2V5c3Ryb2tlIGJlZm9yZSB0cmlnZ2VyaW5nIGEgY2hhbmdlIGV2ZW50LlxuICAgICAqIFNldCB0byAwIHRvIG5vdCB0cmlnZ2VyIGNoYW5nZSBldmVudHMgZnJvbSBrZXlzdHJva2VzIChsaXN0ZW4gZm9yIGlucHV0IGV2ZW50IGluc3RlYWQgdG8gaGF2ZVxuICAgICAqIGltbWVkaWF0ZSBmZWVkYmFjaywgY2hhbmdlIHdpbGwgc3RpbGwgYmUgdHJpZ2dlcmVkIG9uIGJsdXIpLlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvUmFkaW8jY29uZmlnLWtleVN0cm9rZUNoYW5nZURlbGF5KVxuICAgICAqL1xuICAgIGtleVN0cm9rZUNoYW5nZURlbGF5ID8gOiBudW1iZXJcbiAgICAvKipcbiAgICAgKiBMYWJlbCwgcHJlcGVuZGVkIHRvIGZpZWxkXG4gICAgICovXG4gICAgbGFiZWwgPyA6IHN0cmluZ1xuICAgIC8qKlxuICAgICAqIENTUyBjbGFzcyBuYW1lIG9yIGNsYXNzIG5hbWVzIHRvIGFkZCB0byBhbnkgY29uZmlndXJlZCBbbGFiZWxdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9taXhpbi9MYWJlbGFibGUjY29uZmlnLWxhYmVsKVxuICAgICAqL1xuICAgIGxhYmVsQ2xzID8gOiBzdHJpbmd8b2JqZWN0XG4gICAgLyoqXG4gICAgICogTGFiZWwgcG9zaXRpb24sIGVpdGhlciAnYmVmb3JlJyB0aGUgZmllbGQgb3IgJ2Fib3ZlJyB0aGUgZmllbGRcbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1JhZGlvI2NvbmZpZy1sYWJlbFBvc2l0aW9uKVxuICAgICAqL1xuICAgIGxhYmVsUG9zaXRpb24gPyA6ICdiZWZvcmUnfCdhYm92ZSd8bnVsbFxuICAgIC8qKlxuICAgICAqIFRoZSBsYWJlbHMgdG8gYWRkIGVpdGhlciBiZWZvcmUgb3IgYWZ0ZXIgdGhlIGlucHV0IGZpZWxkLlxuICAgICAqIEVhY2ggbGFiZWwgbWF5IGhhdmUgdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvUmFkaW8jY29uZmlnLWxhYmVscylcbiAgICAgKiBAcHJvcGVydHkge3N0cmluZ30gaHRtbCBMYWJlbCB0ZXh0XG4gICAgICogQHByb3BlcnR5IHsnc3RhcnQnLCdlbmQnfSBhbGlnbiBXaGljaCBlbmQgb2YgdGhlIGZpbGUgdGhlIGxhYmVsIHNob3VsZCBnb1xuICAgICAqL1xuICAgIGxhYmVscyA/IDogb2JqZWN0W11cbiAgICAvKipcbiAgICAgKiBUaGUgd2lkdGggdG8gYXBwbHkgdG8gdGhlIGAmbHQ7bGFiZWwmZ3Q7YCBlbGVtZW50LiBJZiBhIG51bWJlciBpcyBzcGVjaWZpZWQsIGBweGAgd2lsbCBiZSB1c2VkLlxuICAgICAqL1xuICAgIGxhYmVsV2lkdGggPyA6IHN0cmluZ3xudW1iZXJcbiAgICAvKipcbiAgICAgKiBUaGUgbGlzdGVuZXIgc2V0IGZvciB0aGlzIG9iamVjdC5cbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1JhZGlvI2NvbmZpZy1saXN0ZW5lcnMpXG4gICAgICovXG4gICAgbGlzdGVuZXJzID8gOiBSYWRpb0xpc3RlbmVyc1xuICAgIC8qKlxuICAgICAqIEEgY2xhc3MgdHJhbnNsYXRpb25zIG9mIHdoaWNoIGFyZSB1c2VkIGZvciB0cmFuc2xhdGluZyB0aGlzIGVudGl0eS5cbiAgICAgKiBUaGlzIGlzIG9mdGVuIHVzZWQgd2hlbiB0cmFuc2xhdGlvbnMgb2YgYW4gaXRlbSBhcmUgZGVmaW5lZCBvbiBpdHMgY29udGFpbmVyIGNsYXNzLlxuICAgICAqIEZvciBleGFtcGxlOlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvUmFkaW8jY29uZmlnLWxvY2FsZUNsYXNzKVxuICAgICAqL1xuICAgIGxvY2FsZUNsYXNzID8gOiB0eXBlb2YgQmFzZVxuICAgIC8qKlxuICAgICAqIFNldCB0byBgZmFsc2VgIHRvIGRpc2FibGUgbG9jYWxpemF0aW9uIG9mIHRoaXMgb2JqZWN0LlxuICAgICAqL1xuICAgIGxvY2FsaXphYmxlID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogTGlzdCBvZiBwcm9wZXJ0aWVzIHdoaWNoIHZhbHVlcyBzaG91bGQgYmUgdHJhbnNsYXRlZCBhdXRvbWF0aWNhbGx5IHVwb24gYSBsb2NhbGUgYXBwbHlpbmcuXG4gICAgICogSW4gY2FzZSB0aGVyZSBpcyBhIG5lZWQgdG8gbG9jYWxpemUgbm90IHR5cGljYWwgdmFsdWUgKG5vdCBhIFN0cmluZyB2YWx1ZSBvciBhIGZpZWxkIHdpdGggcmUtZGVmaW5lZCBzZXR0ZXIvZ2V0dGVyKSxcbiAgICAgKiB5b3UgY291bGQgdXNlICdsb2NhbGVLZXknIG1ldGEgY29uZmlndXJhdGlvbi5cbiAgICAgKiBFeGFtcGxlOlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvUmFkaW8jY29uZmlnLWxvY2FsaXphYmxlUHJvcGVydGllcylcbiAgICAgKi9cbiAgICBsb2NhbGl6YWJsZVByb3BlcnRpZXMgPyA6IHN0cmluZ1tdXG4gICAgLyoqXG4gICAgICogV2lkZ2V0J3MgbWFyZ2luLiBUaGlzIG1heSBiZSBjb25maWd1cmVkIGFzIGEgc2luZ2xlIG51bWJlciBvciBhIGBUUkJMYCBmb3JtYXQgc3RyaW5nLlxuICAgICAqIG51bWVyaWMtb25seSB2YWx1ZXMgYXJlIGludGVycHJldGVkIGFzIHBpeGVscy5cbiAgICAgKi9cbiAgICBtYXJnaW4gPyA6IG51bWJlcnxzdHJpbmdcbiAgICAvKipcbiAgICAgKiBUaGlzIGNvbmZpZyBvYmplY3QgY29udGFpbnMgdGhlIGRlZmF1bHRzIGZvciB0aGUgW01hc2tdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9NYXNrKSBjcmVhdGVkIGZvciB0aGVcbiAgICAgKiBbbWFza2VkXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvV2lkZ2V0I2NvbmZpZy1tYXNrZWQpIGNvbmZpZy4gQW55IHByb3BlcnRpZXMgc3BlY2lmaWVkIGluIHRoZSBgbWFza2VkYCBjb25maWcgd2lsbCBvdmVycmlkZSB0aGVzZVxuICAgICAqIHZhbHVlcy5cbiAgICAgKi9cbiAgICBtYXNrRGVmYXVsdHMgPyA6IE1hc2tDb25maWdcbiAgICAvKipcbiAgICAgKiBTZXQgdG8gYHRydWVgIHRvIGFwcGx5IHRoZSBkZWZhdWx0IG1hc2sgdG8gdGhlIHdpZGdldC4gQWx0ZXJuYXRpdmVseSwgdGhpcyBjYW4gYmUgdGhlIG1hc2sgbWVzc2FnZSBvciBhXG4gICAgICogW01hc2tdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9NYXNrKSBjb25maWcgb2JqZWN0LlxuICAgICAqL1xuICAgIG1hc2tlZCA/IDogYm9vbGVhbnxzdHJpbmd8TWFza0NvbmZpZ1xuICAgIC8qKlxuICAgICAqIFRoZSBlbGVtZW50J3MgbWF4SGVpZ2h0LiBDYW4gYmUgZWl0aGVyIGEgU3RyaW5nIG9yIGEgTnVtYmVyICh3aGljaCB3aWxsIGhhdmUgJ3B4JyBhcHBlbmRlZCkuIE5vdGUgdGhhdFxuICAgICAqIGxpa2UgW2hlaWdodF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1dpZGdldCNjb25maWctaGVpZ2h0KSwgKnJlYWRpbmcqIHRoZSB2YWx1ZSB3aWxsIHJldHVybiB0aGUgbnVtZXJpYyB2YWx1ZSBpbiBwaXhlbHMuXG4gICAgICovXG4gICAgbWF4SGVpZ2h0ID8gOiBzdHJpbmd8bnVtYmVyXG4gICAgLyoqXG4gICAgICogKk9ubHkgdmFsaWQgaWYgdGhpcyBXaWRnZXQgaXMgW2Zsb2F0aW5nXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvV2lkZ2V0I2NvbmZpZy1mbG9hdGluZykuKlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvUmFkaW8jY29uZmlnLW1heGltaXplT25Nb2JpbGUpXG4gICAgICovXG4gICAgbWF4aW1pemVPbk1vYmlsZSA/IDogbnVtYmVyfHN0cmluZ1xuICAgIC8qKlxuICAgICAqIFRoZSBlbGVtZW50cyBtYXhXaWR0aC4gQ2FuIGJlIGVpdGhlciBhIFN0cmluZyBvciBhIE51bWJlciAod2hpY2ggd2lsbCBoYXZlICdweCcgYXBwZW5kZWQpLiBOb3RlIHRoYXRcbiAgICAgKiBsaWtlIFt3aWR0aF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1dpZGdldCNjb25maWctd2lkdGgpLCAqcmVhZGluZyogdGhlIHZhbHVlIHdpbGwgcmV0dXJuIHRoZSBudW1lcmljIHZhbHVlIGluIHBpeGVscy5cbiAgICAgKi9cbiAgICBtYXhXaWR0aCA/IDogc3RyaW5nfG51bWJlclxuICAgIC8qKlxuICAgICAqIFRoZSBlbGVtZW50J3MgbWluSGVpZ2h0LiBDYW4gYmUgZWl0aGVyIGEgU3RyaW5nIG9yIGEgTnVtYmVyICh3aGljaCB3aWxsIGhhdmUgJ3B4JyBhcHBlbmRlZCkuIE5vdGUgdGhhdFxuICAgICAqIGxpa2UgW2hlaWdodF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1dpZGdldCNjb25maWctaGVpZ2h0KSwgKnJlYWRpbmcqIHRoZSB2YWx1ZSB3aWxsIHJldHVybiB0aGUgbnVtZXJpYyB2YWx1ZSBpbiBwaXhlbHMuXG4gICAgICovXG4gICAgbWluSGVpZ2h0ID8gOiBzdHJpbmd8bnVtYmVyXG4gICAgLyoqXG4gICAgICogVGhlIGVsZW1lbnRzIG1pbldpZHRoLiBDYW4gYmUgZWl0aGVyIGEgU3RyaW5nIG9yIGEgTnVtYmVyICh3aGljaCB3aWxsIGhhdmUgJ3B4JyBhcHBlbmRlZCkuIE5vdGUgdGhhdFxuICAgICAqIGxpa2UgW3dpZHRoXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvV2lkZ2V0I2NvbmZpZy13aWR0aCksICpyZWFkaW5nKiB0aGUgdmFsdWUgd2lsbCByZXR1cm4gdGhlIG51bWVyaWMgdmFsdWUgaW4gcGl4ZWxzLlxuICAgICAqL1xuICAgIG1pbldpZHRoID8gOiBzdHJpbmd8bnVtYmVyXG4gICAgLyoqXG4gICAgICogV2hlbiB0aGlzIGlzIGNvbmZpZ3VyZWQgYXMgYHRydWVgIGEgW1Jlc2l6ZU9ic2VydmVyXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvUmVzaXplT2JzZXJ2ZXIpXG4gICAgICogaXMgdXNlZCB0byBtb25pdG9yIHRoaXMgZWxlbWVudCBmb3Igc2l6ZSBjaGFuZ2VzIGNhdXNlZCBieSBlaXRoZXIgc3R5bGUgbWFuaXB1bGF0aW9uLCBvciBieSBDU1NcbiAgICAgKiBsYXlvdXQuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9SYWRpbyNjb25maWctbW9uaXRvclJlc2l6ZSlcbiAgICAgKiBAcHJvcGVydHkge2Jvb2xlYW59IGltbWVkaWF0ZSBTZXQgdG8gYHRydWVgIHRvIHJlY2VpdmUgcmVzaXplIG5vdGlmaWNhdGlvbnMgaW1tZWRpYXRlbHkuXG4gICAgICovXG4gICAgbW9uaXRvclJlc2l6ZSA/IDogYm9vbGVhbnxvYmplY3RcbiAgICAvKipcbiAgICAgKiBOYW1lIG9mIHRoZSBmaWVsZCB3aGljaCBpcyB1c2VkIGFzIGEga2V5IHRvIGdldC9zZXQgdmFsdWVzIGZyb20vdG8gdGhlIGZpZWxkLlxuICAgICAqIFVzZWQgcHJpb3IgdG8gW3JlZl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1dpZGdldCNjb25maWctcmVmKSBhbmQgW2lkXSgjQ29yZS93aWRnZXQvV2lkZ2V0I2NvbmZpZy1pZCkgaW5cbiAgICAgKiBbQ29udGFpbmVyLnZhbHVlc10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L0NvbnRhaW5lciNwcm9wZXJ0eS12YWx1ZXMpLlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvUmFkaW8jY29uZmlnLW5hbWUpXG4gICAgICovXG4gICAgbmFtZSA/IDogc3RyaW5nXG4gICAgLyoqXG4gICAgICogU2V0IHRvIGB0cnVlYCB3aGVuIGEgd2lkZ2V0IGlzIHJlbmRlcmVkIGludG8gYW5vdGhlciB3aWRnZXQncyBbY29udGVudEVsZW1lbnRdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9XaWRnZXQjcHJvcGVydHktY29udGVudEVsZW1lbnQpLCBidXQgbXVzdFxuICAgICAqIG5vdCBwYXJ0aWNpcGF0ZSBpbiB0aGUgc3RhbmRhcmQgbGF5b3V0IG9mIHRoYXQgd2lkZ2V0LCBhbmQgbXVzdCBiZSBwb3NpdGlvbmVkIHJlbGF0aXZlbHkgdG8gdGhhdFxuICAgICAqIHdpZGdldCdzIFtjb250ZW50RWxlbWVudF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1dpZGdldCNwcm9wZXJ0eS1jb250ZW50RWxlbWVudCkuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9SYWRpbyNjb25maWctcG9zaXRpb25lZClcbiAgICAgKi9cbiAgICBwb3NpdGlvbmVkID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogUHJldmVudCB0b29sdGlwIGZyb20gYmVpbmcgZGlzcGxheWVkIG9uIHRvdWNoIGRldmljZXMuIFVzZWZ1bCBmb3IgZXhhbXBsZSBmb3IgYnV0dG9ucyB0aGF0IGRpc3BsYXkgYVxuICAgICAqIG1lbnUgb24gY2xpY2sgZXRjLCBzaW5jZSB0aGUgdG9vbHRpcCB3b3VsZCBiZSBkaXNwbGF5ZWQgYXQgdGhlIHNhbWUgdGltZS5cbiAgICAgKi9cbiAgICBwcmV2ZW50VG9vbHRpcE9uVG91Y2ggPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBNYWtlcyB0aGUgZmllbGQgdW5tb2RpZmlhYmxlIGJ5IHVzZXIgYWN0aW9uLiBUaGUgaW5wdXQgYXJlYSBpcyBub3QgZWRpdGFibGUsIGFuZCB0cmlnZ2Vyc1xuICAgICAqIGFyZSB1bnJlc3BvbnNpdmUuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9SYWRpbyNjb25maWctcmVhZE9ubHkpXG4gICAgICovXG4gICAgcmVhZE9ubHkgPyA6IGJvb2xlYW5cbiAgICByZWxheVN0b3JlRXZlbnRzID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogQ29uZmlndXJlIGFzIGB0cnVlYCB0byBpbmRpY2F0ZSB0aGF0IGEgYG51bGxgIGZpZWxkIHZhbHVlIGlzIHRvIGJlIG1hcmtlZCBhcyBpbnZhbGlkLiBUaGlzIHdpbGxcbiAgICAgKiBvcHRpb25hbGx5IGFwcGVuZCBhICogdG8gdGhlIGZpZWxkIGxhYmVsIGlmIFtzaG93UmVxdWlyZWRJbmRpY2F0b3JdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9GaWVsZCNwcm9wZXJ0eS1zaG93UmVxdWlyZWRJbmRpY2F0b3IpIGlzIHNldC5cbiAgICAgKi9cbiAgICByZXF1aXJlZCA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIElmIHRoaXMgZmllbGQgaXMgbm90IFtyZWFkT25seV0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L0ZpZWxkI2NvbmZpZy1yZWFkT25seSksIHRoZW4gc2V0dGluZyB0aGlzIG9wdGlvbiBtZWFucyB0aGF0IHByZXNzaW5nXG4gICAgICogdGhlIDxrYmQ+RXNjYXBlPC9rYmQ+IGtleSBhZnRlciBlZGl0aW5nIHRoZSBmaWVsZCB3aWxsIHJldmVydCB0aGUgZmllbGQgdG8gdGhlIHZhbHVlIGl0IGhhZCB3aGVuXG4gICAgICogdGhlIHVzZXIgZm9jdXNlZCB0aGUgZmllbGQuIElmIHRoZSBmaWVsZCBpcyAqbm90KiBjaGFuZ2VkIGZyb20gd2hlbiBmb2N1c2VkLCB0aGUgW2NsZWFyYWJsZV0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L0ZpZWxkI2NvbmZpZy1jbGVhcmFibGUpXG4gICAgICogYmVoYXZpb3VyIHdpbGwgYmUgYWN0aXZhdGVkLlxuICAgICAqL1xuICAgIHJldmVydE9uRXNjYXBlID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogQ29uZmlndXJlIGFzIGB0cnVlYCB0byBoYXZlIHRoZSBjb21wb25lbnQgZGlzcGxheSBhIHRyYW5zbHVjZW50IHJpcHBsZSB3aGVuIGl0c1xuICAgICAqIFtmb2N1c0VsZW1lbnRdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9XaWRnZXQjcHJvcGVydHktZm9jdXNFbGVtZW50KSwgb3IgW2VsZW1lbnRdKCNDb3JlL3dpZGdldC9XaWRnZXQjcHJvcGVydHktZWxlbWVudCkgaXMgdGFwcGVkIDxlbT5pZiB0aGVcbiAgICAgKiBjdXJyZW50IHRoZW1lIHN1cHBvcnRzIHJpcHBsZXM8L2VtPi4gT3V0IG9mIHRoZSBib3gsIG9ubHkgdGhlIE1hdGVyaWFsIHRoZW1lIHN1cHBvcnRzIHJpcHBsZXMuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9SYWRpbyNjb25maWctcmlwcGxlKVxuICAgICAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbZGVsZWdhdGVdIEEgQ1NTIHNlbGVjdG9yIHRvIGZpbHRlciB3aGljaCBjaGlsZCBlbGVtZW50cyB0cmlnZ2VyIHJpcHBsZXMuIEJ5IGRlZmF1bHQsIHRoZSByaXBwbGUgaXMgY2xpcHBlZCB0byB0aGUgdHJpZ2dlcmluZyBlbGVtZW50LlxuICAgICAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbY29sb3JdIEEgQ1NTIGNvbG9yIG5hbWUgb3Igc3BlY2lmaWNhdGlvbi5cbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gW3JhZGl1c10gVGhlIGVuZGluZyByYWRpdXMgb2YgdGhlIHJpcHBsZS4gTm90ZSB0aGF0IGl0IHdpbGwgYmUgY2xpcHBlZCBieSB0aGUgdGFyZ2V0IGVsZW1lbnQgYnkgZGVmYXVsdC5cbiAgICAgKiBAcHJvcGVydHkge3N0cmluZ30gW2NsaXBdIEEgc3RyaW5nIHdoaWNoIGRlc2NyaWJlcyBob3cgdG8gY2xpcCB0aGUgcmlwcGxlIGlmIGl0IGlzIG5vdCB0byBiZSBjbGlwcGVkIHRvIHRoZSBkZWZhdWx0IGVsZW1lbnQuIEVpdGhlciB0aGUgcHJvcGVydHkgb2YgdGhlIHdpZGdldCB0byB1c2UgYXMgdGhlIGNsaXBwaW5nIGVsZW1lbnQsIG9yIGEgc2VsZWN0b3IgdG8gYWxsb3cgY2xpcHBpbmcgdG8gdGhlIGNsb3Nlc3QgbWF0Y2hpbmcgYW5jZXN0b3IgdG8gdGhlIHRhcmdldCBlbGVtZW50LlxuICAgICAqL1xuICAgIHJpcHBsZSA/IDogYm9vbGVhbnxvYmplY3RcbiAgICAvKipcbiAgICAgKiBUaGUgQVJJQSByb2xlIHRvIGFwcGx5IHRvIHRoaXMgd2lkZ2V0J3MgZWxlbWVudC4gQnkgZGVmYXVsdCwgdGhpcyBpcyBzZXQgdG8gYCdwcmVzZW50YXRpb24nYCB0byBhdm9pZFxuICAgICAqIGFjY2lkZW50YWxseSBhcHBseWluZyBhIHJvbGUgd2hpY2ggbWF5IGludGVyZmVyZSB3aXRoIHNjcmVlbiByZWFkZXJzLlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvUmFkaW8jY29uZmlnLXJvbGUpXG4gICAgICovXG4gICAgcm9sZSA/IDogc3RyaW5nXG4gICAgLyoqXG4gICAgICogSWYgeW91IGFyZSByZW5kZXJpbmcgdGhpcyB3aWRnZXQgdG8gYSBzaGFkb3cgcm9vdCBpbnNpZGUgYSB3ZWIgY29tcG9uZW50LCBzZXQgdGhpcyBjb25maWcgdG8gdGhlIHNoYWRvd1Jvb3QuIElmIG5vdCBpbnNpZGUgYSB3ZWIgY29tcG9uZW50LCBzZXQgaXQgdG8gYGRvY3VtZW50LmJvZHlgXG4gICAgICovXG4gICAgcm9vdEVsZW1lbnQgPyA6IFNoYWRvd1Jvb3R8SFRNTEVsZW1lbnRcbiAgICAvKipcbiAgICAgKiBUaGlzIG1heSBiZSBjb25maWd1cmVkIGFzIGB0cnVlYCB0byBtYWtlIHRoZSB3aWRnZXQncyBlbGVtZW50IHVzZSB0aGUgYGRpcmVjdGlvbjpydGxgIHN0eWxlLlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvUmFkaW8jY29uZmlnLXJ0bClcbiAgICAgKi9cbiAgICBydGwgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBEZWZpbmVzIHdoYXQgdG8gZG8gaWYgZG9jdW1lbnQgaXMgc2Nyb2xsZWQgd2hpbGUgV2lkZ2V0IGlzIHZpc2libGUgKG9ubHkgcmVsZXZhbnQgd2hlbiBmbG9hdGluZyBpcyBzZXQgdG8gYHRydWVgKS5cbiAgICAgKiBWYWxpZCB2YWx1ZXM6IMK0bnVsbMK0OiBkbyBub3RoaW5nLCDCtGhpZGXCtDogaGlkZSB0aGUgd2lkZ2V0IG9yIMK0cmVhbGlnbsK0OiByZWFsaWduIHRvIHRoZSB0YXJnZXQgaWYgcG9zc2libGUuXG4gICAgICovXG4gICAgc2Nyb2xsQWN0aW9uID8gOiAnaGlkZSd8J3JlYWxpZ24nfG51bGxcbiAgICAvKipcbiAgICAgKiAqT25seSB2YWxpZCBpZiB0aGlzIFdpZGdldCBpcyBbZmxvYXRpbmddKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9XaWRnZXQjY29uZmlnLWZsb2F0aW5nKS4qXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9SYWRpbyNjb25maWctc2hvd0FuaW1hdGlvbilcbiAgICAgKi9cbiAgICBzaG93QW5pbWF0aW9uID8gOiBib29sZWFufG9iamVjdFxuICAgIC8qKlxuICAgICAqIGB0cnVlYCB0byBhdXRvbWF0aWNhbGx5IGRpc3BsYXkgYSAqIGFmdGVyIHRoZSBsYWJlbCBmb3IgdGhpcyBmaWVsZCB3aGVuIGl0IGlzIFtyZXF1aXJlZF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L0ZpZWxkI3Byb3BlcnR5LXJlcXVpcmVkKS5cbiAgICAgKi9cbiAgICBzaG93UmVxdWlyZWRJbmRpY2F0b3IgPyA6IHN0cmluZ1xuICAgIC8qKlxuICAgICAqIFNldCB0byBgZmFsc2VgIHRvIG5vdCBzaG93IHRoZSB0b29sdGlwIHdoZW4gdGhpcyB3aWRnZXQgaXMgW2Rpc2FibGVkXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvV2lkZ2V0I3Byb3BlcnR5LWRpc2FibGVkKVxuICAgICAqL1xuICAgIHNob3dUb29sdGlwV2hlbkRpc2FibGVkID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogU2V0IHRvIGB0cnVlYCwgY29tcGxldGVseSBieXBhc3NlcyB2YWxpZGF0aW9uIGxvZ2ljIChjb3VsZCBiZSB1c2VyZnVsIGlmIHlvdXIgZmllbGQgaXMgbm90IGBlZGl0YWJsZWBcbiAgICAgKiB0byB0aGUgdXNlcikuXG4gICAgICovXG4gICAgc2tpcFZhbGlkYXRpb24gPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBQcm9ncmFtbWF0aWMgY29udHJvbCBvdmVyIGhvdyBtYW55IGNvbHVtbnMgdG8gc3BhbiB3aGVuIHVzZWQgaW4gYSBncmlkIGxheW91dC5cbiAgICAgKi9cbiAgICBzcGFuID8gOiBudW1iZXJcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBuYXRpdmUgYHNwZWxsY2hlY2tgIHByb3BlcnR5IG9mIHRoZSB1bmRlcmx5aW5nIGlucHV0IGVsZW1lbnQuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBwbGVhc2UgcmVmZXIgdG9cbiAgICAgKiBbTUROXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0dsb2JhbF9hdHRyaWJ1dGVzL3NwZWxsY2hlY2spXG4gICAgICovXG4gICAgc3BlbGxDaGVjayA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIEEgY29uZmlndXJhdGlvbiBmb3IgdGhlIFt0YWJdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9UYWIpIGNyZWF0ZWQgZm9yIHRoaXMgd2lkZ2V0IHdoZW4gaXQgaXMgcGxhY2VkIGluIGFcbiAgICAgKiBbVGFiUGFuZWxdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9UYWJQYW5lbCkuIEZvciBleGFtcGxlLCB0aGlzIGNvbmZpZyBjYW4gYmUgdXNlZCB0byBjb250cm9sIHRoZSBpY29uIG9mIHRoZSBgdGFiYCBmb3JcbiAgICAgKiB0aGlzIHdpZGdldDpcbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1JhZGlvI2NvbmZpZy10YWIpXG4gICAgICovXG4gICAgdGFiID8gOiBib29sZWFufFRhYkNvbmZpZ1xuICAgIC8qKlxuICAgICAqIFRoZSB0YWIgaW5kZXggb2YgdGhlIGlucHV0IGZpZWxkIG9yIGZpZWxkcywgb3IgYG51bGxgIGZvciBuYXR1cmFsIHRhYiBvcmRlciAocmVjb21tZW5kZWQpLiBTZXR0aW5nIHRvIGAwYFxuICAgICAqIGlzIGVxdWl2YWxlbnQgdG8gbmF0dXJhbCB0YWIgb3JkZXIsIGJ1dCBpcyB1bm5lY2Vzc2FyeSBmb3IgZmllbGRzIHNpbmNlIHRoZXkgYXJlIG5hdHVyYWxseSB0YWJiYWJsZVxuICAgICAqIChpLmUuLCBhY2Nlc3NpYmxlIHZpYSB0aGUgVEFCIGtleSkuIFNldHRpbmcgdG8gYC0xYCBkaXNhYmxlcyB0YWJiYWJpbGl0eSBidXQgYWxsb3dzIGZvciBmb2N1cyB0byBiZSBzZXRcbiAgICAgKiB0byB0aGUgZWxlbWVudCBwcm9ncmFtbWF0aWNhbGx5LlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvUmFkaW8jY29uZmlnLXRhYkluZGV4KVxuICAgICAqL1xuICAgIHRhYkluZGV4ID8gOiBudW1iZXJcbiAgICAvKipcbiAgICAgKiBUZXh0IHRvIGRpc3BsYXkgb24gY2hlY2tib3ggbGFiZWxcbiAgICAgKi9cbiAgICB0ZXh0ID8gOiBzdHJpbmdcbiAgICAvKipcbiAgICAgKiBUZXh0IGFsaWdubWVudDogJ2xlZnQnLCAnY2VudGVyJyBvciAncmlnaHQnLiBBbHNvIGFjY2VwdHMgZGlyZWN0aW9uIG5ldXRyYWwgJ3N0YXJ0JyBhbmQgJ2VuZCcuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9SYWRpbyNjb25maWctdGV4dEFsaWduKVxuICAgICAqL1xuICAgIHRleHRBbGlnbiA/IDogJ2xlZnQnfCdjZW50ZXInfCdyaWdodCd8J3N0YXJ0J3wnZW5kJ1xuICAgIC8qKlxuICAgICAqIEEgdGl0bGUgdG8gZGlzcGxheSBmb3IgdGhlIHdpZGdldC4gT25seSBpbiBlZmZlY3Qgd2hlbiBpbnNpZGUgYSBjb250YWluZXIgdGhhdCB1c2VzIGl0IChzdWNoIGFzIFRhYlBhbmVsKVxuICAgICAqL1xuICAgIHRpdGxlID8gOiBzdHJpbmdcbiAgICAvKipcbiAgICAgKiBUb29sdGlwIGZvciB0aGUgd2lkZ2V0LCBlaXRoZXIgYXMgYSBzdHJpbmcgb3IgYXMgYSBUb29sdGlwIGNvbmZpZyBvYmplY3QuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9SYWRpbyNjb25maWctdG9vbHRpcClcbiAgICAgKi9cbiAgICB0b29sdGlwID8gOiBzdHJpbmd8VG9vbHRpcENvbmZpZ3xudWxsXG4gICAgLyoqXG4gICAgICogVGhlIHRyaWdnZXJzIHRvIGFkZCBlaXRoZXIgYmVmb3JlIG9yIGFmdGVyIHRoZSBpbnB1dCBmaWVsZC4gRWFjaCBwcm9wZXJ0eSBuYW1lIGlzIHRoZSByZWZlcmVuY2UgYnkgd2hpY2hcbiAgICAgKiBhbiBpbnN0YW50aWF0ZWQgVHJpZ2dlciBXaWRnZXQgbWF5IGJlIHJldHJpZXZlZCBmcm9tIHRoZSBsaXZlIGB0cmlnZ2Vyc2AgcHJvcGVydHkuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9SYWRpbyNjb25maWctdHJpZ2dlcnMpXG4gICAgICovXG4gICAgdHJpZ2dlcnMgPyA6IFJlY29yZDxzdHJpbmcsIEZpZWxkVHJpZ2dlckNvbmZpZz5cbiAgICB0eXBlID8gOiAncmFkaW8nfCdyYWRpb2J1dHRvbidcbiAgICAvKipcbiAgICAgKiBDdXN0b20gQ1NTIGNsYXNzIG5hbWUgc3VmZml4ZXMgdG8gYXBwbHkgdG8gdGhlIGVsZW1lbnRzIHJlbmRlcmVkIGJ5IHRoaXMgd2lkZ2V0LiBUaGlzIG1heSBiZSBzcGVjaWZpZWRcbiAgICAgKiBhcyBhIHNwYWNlIHNlcGFyYXRlZCBzdHJpbmcsIGFuIGFycmF5IG9mIHN0cmluZ3MsIG9yIGFzIGFuIG9iamVjdCBpbiB3aGljaCBwcm9wZXJ0eSBuYW1lcyB3aXRoIHRydXRoeVxuICAgICAqIHZhbHVlcyBhcmUgdXNlZCBhcyB0aGUgY2xhc3MgbmFtZXMuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9SYWRpbyNjb25maWctdWkpXG4gICAgICovXG4gICAgdWkgPyA6IHN0cmluZ3xvYmplY3RcbiAgICAvKipcbiAgICAgKiBUaGUgdmFsdWUgdG8gcHJvdmlkZSBmb3IgdGhpcyB3aWRnZXQgaW4gW3ZhbHVlc10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L0NvbnRhaW5lciNwcm9wZXJ0eS12YWx1ZXMpIHdoZW4gaXQgaXMgbm90XG4gICAgICogW2NoZWNrZWRdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9DaGVja2JveCNwcm9wZXJ0eS1jaGVja2VkKS5cbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1JhZGlvI2NvbmZpZy11bmNoZWNrZWRWYWx1ZSlcbiAgICAgKi9cbiAgICB1bmNoZWNrZWRWYWx1ZSA/IDogYW55XG4gICAgLyoqXG4gICAgICogU2V0IHRvIGBmYWxzZWAgdG8gbm90IGhpZ2hsaWdodCBhIGZpZWxkIGFzIGludmFsaWQgd2hpbGUgdHlwaW5nLCB0byBpbnN0ZWFkIHNob3cgaXQgb24gRU5URVIga2V5IHByZXNzXG4gICAgICogb3Igc2ltaWxhci5cbiAgICAgKi9cbiAgICB2YWxpZGF0ZU9uSW5wdXQgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBUaGUgdmFsdWUgb2YgdGhlIGNoZWNrYm94LiBUaGlzIGlzIHRoZSBzYW1lIGFzIGBjaGVja2VkYC5cbiAgICAgKi9cbiAgICB2YWx1ZSA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIEEgd2lkZ2V0cyB3ZWlnaHQgZGV0ZXJtaW5lcyBpdHMgcG9zaXRpb24gYW1vbmcgc2libGluZ3Mgd2hlbiBhZGRlZCB0byBhIFtDb250YWluZXJdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9Db250YWluZXIpLlxuICAgICAqIEhpZ2hlciB3ZWlnaHRzIGdvIGZ1cnRoZXIgZG93bi5cbiAgICAgKi9cbiAgICB3ZWlnaHQgPyA6IG51bWJlclxuICAgIC8qKlxuICAgICAqIFdpZGdldCdzIHdpZHRoLCB1c2VkIHRvIHNldCBlbGVtZW50IGBzdHlsZS53aWR0aGAuIEVpdGhlciBzcGVjaWZ5IGEgdmFsaWQgd2lkdGggc3RyaW5nIG9yIGEgbnVtYmVyLCB3aGljaFxuICAgICAqIHdpbGwgZ2V0ICdweCcgYXBwZW5kZWQuIFdlIHJlY29tbWVuZCB1c2luZyBDU1MgYXMgdGhlIHByaW1hcnkgd2F5IHRvIGNvbnRyb2wgd2lkdGgsIGJ1dCBpbiBzb21lIGNhc2VzXG4gICAgICogdGhpcyBjb25maWcgaXMgY29udmVuaWVudC5cbiAgICAgKi9cbiAgICB3aWR0aCA/IDogc3RyaW5nfG51bWJlclxuICAgIC8qKlxuICAgICAqIFRoZSB4IHBvc2l0aW9uIGZvciB0aGUgd2lkZ2V0LlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvUmFkaW8jY29uZmlnLXgpXG4gICAgICovXG4gICAgeCA/IDogbnVtYmVyXG4gICAgLyoqXG4gICAgICogVGhlIHkgcG9zaXRpb24gZm9yIHRoZSB3aWRnZXQuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9SYWRpbyNjb25maWcteSlcbiAgICAgKi9cbiAgICB5ID8gOiBudW1iZXJcblxufVxuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvciA6ICdicnludHVtLXJhZGlvJyxcbiAgICB0ZW1wbGF0ZSA6ICcnXG59KVxuZXhwb3J0IGNsYXNzIEJyeW50dW1SYWRpb0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcblxuICAgIHB1YmxpYyBzdGF0aWMgaW5zdGFuY2VDbGFzcyA9IFJhZGlvO1xuXG4gICAgcHVibGljIHN0YXRpYyBpbnN0YW5jZU5hbWUgPSAnUmFkaW8nO1xuXG4gICAgcHJpdmF0ZSBzdGF0aWMgYnJ5bnR1bUV2ZW50czogc3RyaW5nW10gPSBbXG4gICAgICAgICdvbkFjdGlvbicsXG4gICAgICAgICdvbkJlZm9yZUNoYW5nZScsXG4gICAgICAgICdvbkJlZm9yZURlc3Ryb3knLFxuICAgICAgICAnb25CZWZvcmVIaWRlJyxcbiAgICAgICAgJ29uQmVmb3JlU2hvdycsXG4gICAgICAgICdvbkNhdGNoQWxsJyxcbiAgICAgICAgJ29uQ2hhbmdlJyxcbiAgICAgICAgJ29uQ2xlYXInLFxuICAgICAgICAnb25DbGljaycsXG4gICAgICAgICdvbkRlc3Ryb3knLFxuICAgICAgICAnb25FbGVtZW50Q3JlYXRlZCcsXG4gICAgICAgICdvbkZvY3VzSW4nLFxuICAgICAgICAnb25Gb2N1c091dCcsXG4gICAgICAgICdvbkhpZGUnLFxuICAgICAgICAnb25JbnB1dCcsXG4gICAgICAgICdvblBhaW50JyxcbiAgICAgICAgJ29uUmVhZE9ubHknLFxuICAgICAgICAnb25SZWNvbXBvc2UnLFxuICAgICAgICAnb25SZXNpemUnLFxuICAgICAgICAnb25TaG93JyxcbiAgICAgICAgJ29uVHJpZ2dlcidcbiAgICBdO1xuXG4gICAgcHJpdmF0ZSBzdGF0aWMgYnJ5bnR1bUZlYXR1cmVOYW1lczogc3RyaW5nW10gPSBbXG5cbiAgICBdO1xuXG4gICAgcHJpdmF0ZSBzdGF0aWMgYnJ5bnR1bUNvbmZpZ3M6IHN0cmluZ1tdID0gQnJ5bnR1bVJhZGlvQ29tcG9uZW50LmJyeW50dW1GZWF0dXJlTmFtZXMuY29uY2F0KFtcbiAgICAgICAgJ2Fkb3B0JyxcbiAgICAgICAgJ2FsaWduJyxcbiAgICAgICAgJ2FsaWduU2VsZicsXG4gICAgICAgICdhbmNob3InLFxuICAgICAgICAnYXBwZW5kVG8nLFxuICAgICAgICAnYXJpYURlc2NyaXB0aW9uJyxcbiAgICAgICAgJ2FyaWFMYWJlbCcsXG4gICAgICAgICdhdXRvQ29sbGFwc2UnLFxuICAgICAgICAnYXV0b0NvbXBsZXRlJyxcbiAgICAgICAgJ2F1dG9TZWxlY3QnLFxuICAgICAgICAnYmFkZ2UnLFxuICAgICAgICAnYnViYmxlRXZlbnRzJyxcbiAgICAgICAgJ2NhbGxPbkZ1bmN0aW9ucycsXG4gICAgICAgICdjYXRjaEV2ZW50SGFuZGxlckV4Y2VwdGlvbnMnLFxuICAgICAgICAnY2VudGVyZWQnLFxuICAgICAgICAnY2hlY2tlZCcsXG4gICAgICAgICdjaGVja2VkVmFsdWUnLFxuICAgICAgICAnY2hlY2tWYWxpZGl0eScsXG4gICAgICAgICdjbHMnLFxuICAgICAgICAnY29sb3InLFxuICAgICAgICAnY29sdW1uJyxcbiAgICAgICAgJ2NvbmZpZycsXG4gICAgICAgICdjb25zdHJhaW5UbycsXG4gICAgICAgICdjb250YWluZXInLFxuICAgICAgICAnY29udGFpblZhbHVlcycsXG4gICAgICAgICdjb250ZW50RWxlbWVudENscycsXG4gICAgICAgICdkYXRhRmllbGQnLFxuICAgICAgICAnZGF0YXNldCcsXG4gICAgICAgICdkZWZhdWx0QmluZFByb3BlcnR5JyxcbiAgICAgICAgJ2RldGVjdENTU0NvbXBhdGliaWxpdHlJc3N1ZXMnLFxuICAgICAgICAnZGlzYWJsZWQnLFxuICAgICAgICAnZG9jaycsXG4gICAgICAgICdkcmFnZ2FibGUnLFxuICAgICAgICAnZWxlbWVudEF0dHJpYnV0ZXMnLFxuICAgICAgICAnZXh0cmFEYXRhJyxcbiAgICAgICAgJ2ZsZXgnLFxuICAgICAgICAnZmxvYXRpbmcnLFxuICAgICAgICAnaGVpZ2h0JyxcbiAgICAgICAgJ2hpZGRlbicsXG4gICAgICAgICdoaWRlQW5pbWF0aW9uJyxcbiAgICAgICAgJ2hpZ2hsaWdodEV4dGVybmFsQ2hhbmdlJyxcbiAgICAgICAgJ2hpbnQnLFxuICAgICAgICAnaGludEh0bWwnLFxuICAgICAgICAnaWQnLFxuICAgICAgICAnaWdub3JlUGFyZW50UmVhZE9ubHknLFxuICAgICAgICAnaW5saW5lJyxcbiAgICAgICAgJ2lucHV0QWxpZ24nLFxuICAgICAgICAnaW5wdXRBdHRyaWJ1dGVzJyxcbiAgICAgICAgJ2lucHV0VGFnJyxcbiAgICAgICAgJ2lucHV0VHlwZScsXG4gICAgICAgICdpbnB1dFdpZHRoJyxcbiAgICAgICAgJ2luc2VydEJlZm9yZScsXG4gICAgICAgICdpbnNlcnRGaXJzdCcsXG4gICAgICAgICdrZXlNYXAnLFxuICAgICAgICAna2V5U3Ryb2tlQ2hhbmdlRGVsYXknLFxuICAgICAgICAnbGFiZWwnLFxuICAgICAgICAnbGFiZWxDbHMnLFxuICAgICAgICAnbGFiZWxQb3NpdGlvbicsXG4gICAgICAgICdsYWJlbHMnLFxuICAgICAgICAnbGFiZWxXaWR0aCcsXG4gICAgICAgICdsaXN0ZW5lcnMnLFxuICAgICAgICAnbG9jYWxlQ2xhc3MnLFxuICAgICAgICAnbG9jYWxpemFibGUnLFxuICAgICAgICAnbG9jYWxpemFibGVQcm9wZXJ0aWVzJyxcbiAgICAgICAgJ21hcmdpbicsXG4gICAgICAgICdtYXNrRGVmYXVsdHMnLFxuICAgICAgICAnbWFza2VkJyxcbiAgICAgICAgJ21heEhlaWdodCcsXG4gICAgICAgICdtYXhpbWl6ZU9uTW9iaWxlJyxcbiAgICAgICAgJ21heFdpZHRoJyxcbiAgICAgICAgJ21pbkhlaWdodCcsXG4gICAgICAgICdtaW5XaWR0aCcsXG4gICAgICAgICdtb25pdG9yUmVzaXplJyxcbiAgICAgICAgJ25hbWUnLFxuICAgICAgICAncG9zaXRpb25lZCcsXG4gICAgICAgICdwcmV2ZW50VG9vbHRpcE9uVG91Y2gnLFxuICAgICAgICAncmVhZE9ubHknLFxuICAgICAgICAncmVsYXlTdG9yZUV2ZW50cycsXG4gICAgICAgICdyZXF1aXJlZCcsXG4gICAgICAgICdyZXZlcnRPbkVzY2FwZScsXG4gICAgICAgICdyaXBwbGUnLFxuICAgICAgICAncm9sZScsXG4gICAgICAgICdyb290RWxlbWVudCcsXG4gICAgICAgICdydGwnLFxuICAgICAgICAnc2Nyb2xsQWN0aW9uJyxcbiAgICAgICAgJ3Nob3dBbmltYXRpb24nLFxuICAgICAgICAnc2hvd1JlcXVpcmVkSW5kaWNhdG9yJyxcbiAgICAgICAgJ3Nob3dUb29sdGlwV2hlbkRpc2FibGVkJyxcbiAgICAgICAgJ3NraXBWYWxpZGF0aW9uJyxcbiAgICAgICAgJ3NwYW4nLFxuICAgICAgICAnc3BlbGxDaGVjaycsXG4gICAgICAgICd0YWInLFxuICAgICAgICAndGFiSW5kZXgnLFxuICAgICAgICAndGV4dCcsXG4gICAgICAgICd0ZXh0QWxpZ24nLFxuICAgICAgICAndGl0bGUnLFxuICAgICAgICAndG9vbHRpcCcsXG4gICAgICAgICd0cmlnZ2VycycsXG4gICAgICAgICd0eXBlJyxcbiAgICAgICAgJ3VpJyxcbiAgICAgICAgJ3VuY2hlY2tlZFZhbHVlJyxcbiAgICAgICAgJ3ZhbGlkYXRlT25JbnB1dCcsXG4gICAgICAgICd2YWx1ZScsXG4gICAgICAgICd3ZWlnaHQnLFxuICAgICAgICAnd2lkdGgnLFxuICAgICAgICAneCcsXG4gICAgICAgICd5J1xuICAgIF0pO1xuXG4gICAgcHJpdmF0ZSBzdGF0aWMgYnJ5bnR1bUNvbmZpZ3NPbmx5OiBzdHJpbmdbXSA9IFtcbiAgICAgICAgJ2Fkb3B0JyxcbiAgICAgICAgJ2FsaWduJyxcbiAgICAgICAgJ2FuY2hvcicsXG4gICAgICAgICdhcmlhRGVzY3JpcHRpb24nLFxuICAgICAgICAnYXJpYUxhYmVsJyxcbiAgICAgICAgJ2F1dG9Db2xsYXBzZScsXG4gICAgICAgICdhdXRvQ29tcGxldGUnLFxuICAgICAgICAnYXV0b1NlbGVjdCcsXG4gICAgICAgICdidWJibGVFdmVudHMnLFxuICAgICAgICAnY2VudGVyZWQnLFxuICAgICAgICAnY2hlY2tlZFZhbHVlJyxcbiAgICAgICAgJ2NoZWNrVmFsaWRpdHknLFxuICAgICAgICAnY29sb3InLFxuICAgICAgICAnY29uZmlnJyxcbiAgICAgICAgJ2NvbnN0cmFpblRvJyxcbiAgICAgICAgJ2NvbnRhaW5lcicsXG4gICAgICAgICdjb250YWluVmFsdWVzJyxcbiAgICAgICAgJ2NvbnRlbnRFbGVtZW50Q2xzJyxcbiAgICAgICAgJ2RhdGFGaWVsZCcsXG4gICAgICAgICdkZWZhdWx0QmluZFByb3BlcnR5JyxcbiAgICAgICAgJ2RldGVjdENTU0NvbXBhdGliaWxpdHlJc3N1ZXMnLFxuICAgICAgICAnZG9jaycsXG4gICAgICAgICdkcmFnZ2FibGUnLFxuICAgICAgICAnZWxlbWVudEF0dHJpYnV0ZXMnLFxuICAgICAgICAnZmxvYXRpbmcnLFxuICAgICAgICAnaGlkZUFuaW1hdGlvbicsXG4gICAgICAgICdoaWdobGlnaHRFeHRlcm5hbENoYW5nZScsXG4gICAgICAgICdoaW50JyxcbiAgICAgICAgJ2hpbnRIdG1sJyxcbiAgICAgICAgJ2lnbm9yZVBhcmVudFJlYWRPbmx5JyxcbiAgICAgICAgJ2lubGluZScsXG4gICAgICAgICdpbnB1dEFsaWduJyxcbiAgICAgICAgJ2lucHV0QXR0cmlidXRlcycsXG4gICAgICAgICdpbnB1dFRhZycsXG4gICAgICAgICdpbnB1dFR5cGUnLFxuICAgICAgICAnaW5wdXRXaWR0aCcsXG4gICAgICAgICdrZXlTdHJva2VDaGFuZ2VEZWxheScsXG4gICAgICAgICdsYWJlbENscycsXG4gICAgICAgICdsYWJlbFBvc2l0aW9uJyxcbiAgICAgICAgJ2xhYmVscycsXG4gICAgICAgICdsYWJlbFdpZHRoJyxcbiAgICAgICAgJ2xpc3RlbmVycycsXG4gICAgICAgICdsb2NhbGVDbGFzcycsXG4gICAgICAgICdsb2NhbGl6YWJsZScsXG4gICAgICAgICdsb2NhbGl6YWJsZVByb3BlcnRpZXMnLFxuICAgICAgICAnbWFza0RlZmF1bHRzJyxcbiAgICAgICAgJ21hc2tlZCcsXG4gICAgICAgICdtb25pdG9yUmVzaXplJyxcbiAgICAgICAgJ3Bvc2l0aW9uZWQnLFxuICAgICAgICAncHJldmVudFRvb2x0aXBPblRvdWNoJyxcbiAgICAgICAgJ3JlbGF5U3RvcmVFdmVudHMnLFxuICAgICAgICAncmV2ZXJ0T25Fc2NhcGUnLFxuICAgICAgICAncmlwcGxlJyxcbiAgICAgICAgJ3JvbGUnLFxuICAgICAgICAncm9vdEVsZW1lbnQnLFxuICAgICAgICAnc2Nyb2xsQWN0aW9uJyxcbiAgICAgICAgJ3Nob3dBbmltYXRpb24nLFxuICAgICAgICAnc2hvd1Rvb2x0aXBXaGVuRGlzYWJsZWQnLFxuICAgICAgICAnc2tpcFZhbGlkYXRpb24nLFxuICAgICAgICAnc3BlbGxDaGVjaycsXG4gICAgICAgICd0YWInLFxuICAgICAgICAndGFiSW5kZXgnLFxuICAgICAgICAndGV4dCcsXG4gICAgICAgICd0ZXh0QWxpZ24nLFxuICAgICAgICAndGl0bGUnLFxuICAgICAgICAndHlwZScsXG4gICAgICAgICd1aScsXG4gICAgICAgICd1bmNoZWNrZWRWYWx1ZScsXG4gICAgICAgICd2YWxpZGF0ZU9uSW5wdXQnLFxuICAgICAgICAnd2VpZ2h0J1xuICAgIF07XG5cbiAgICBwcml2YXRlIHN0YXRpYyBicnludHVtUHJvcHM6IHN0cmluZ1tdID0gQnJ5bnR1bVJhZGlvQ29tcG9uZW50LmJyeW50dW1GZWF0dXJlTmFtZXMuY29uY2F0KFtcbiAgICAgICAgJ2FsaWduU2VsZicsXG4gICAgICAgICdhcHBlbmRUbycsXG4gICAgICAgICdiYWRnZScsXG4gICAgICAgICdjYWxsT25GdW5jdGlvbnMnLFxuICAgICAgICAnY2F0Y2hFdmVudEhhbmRsZXJFeGNlcHRpb25zJyxcbiAgICAgICAgJ2NoZWNrZWQnLFxuICAgICAgICAnY2xzJyxcbiAgICAgICAgJ2NvbHVtbicsXG4gICAgICAgICdjb250ZW50JyxcbiAgICAgICAgJ2RhdGFzZXQnLFxuICAgICAgICAnZGlzYWJsZWQnLFxuICAgICAgICAnZWRpdGFibGUnLFxuICAgICAgICAnZXh0cmFEYXRhJyxcbiAgICAgICAgJ2ZsZXgnLFxuICAgICAgICAnaGVpZ2h0JyxcbiAgICAgICAgJ2hpZGRlbicsXG4gICAgICAgICdodG1sJyxcbiAgICAgICAgJ2lkJyxcbiAgICAgICAgJ2lucHV0JyxcbiAgICAgICAgJ2luc2VydEJlZm9yZScsXG4gICAgICAgICdpbnNlcnRGaXJzdCcsXG4gICAgICAgICdrZXlNYXAnLFxuICAgICAgICAnbGFiZWwnLFxuICAgICAgICAnbWFyZ2luJyxcbiAgICAgICAgJ21heEhlaWdodCcsXG4gICAgICAgICdtYXhpbWl6ZU9uTW9iaWxlJyxcbiAgICAgICAgJ21heFdpZHRoJyxcbiAgICAgICAgJ21pbkhlaWdodCcsXG4gICAgICAgICdtaW5XaWR0aCcsXG4gICAgICAgICduYW1lJyxcbiAgICAgICAgJ3BhcmVudCcsXG4gICAgICAgICdwbGFjZWhvbGRlcicsXG4gICAgICAgICdyZWFkT25seScsXG4gICAgICAgICdyZXF1aXJlZCcsXG4gICAgICAgICdydGwnLFxuICAgICAgICAnc2Nyb2xsYWJsZScsXG4gICAgICAgICdzaG93UmVxdWlyZWRJbmRpY2F0b3InLFxuICAgICAgICAnc3BhbicsXG4gICAgICAgICd0b29sdGlwJyxcbiAgICAgICAgJ3RyaWdnZXJzJyxcbiAgICAgICAgJ3ZhbHVlJyxcbiAgICAgICAgJ3dpZHRoJyxcbiAgICAgICAgJ3gnLFxuICAgICAgICAneSdcbiAgICBdKTtcblxuICAgIHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZjtcbiAgICBwdWJsaWMgaW5zdGFuY2UhOiBSYWRpbztcblxuICAgIHByaXZhdGUgYnJ5bnR1bUNvbmZpZyA9IHtcbiAgICAgICAgYWRvcHQgICAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgYXBwZW5kVG8gICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgaHJlZiAgICAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgYW5ndWxhckNvbXBvbmVudCA6IHRoaXMsXG4gICAgICAgIGZlYXR1cmVzICAgICAgICAgOiB7fSxcbiAgICAgICAgbGlzdGVuZXJzICAgICAgICA6IHt9XG4gICAgfTtcblxuICAgIGNvbnN0cnVjdG9yKGVsZW1lbnQ6IEVsZW1lbnRSZWYpIHtcbiAgICAgICAgdGhpcy5lbGVtZW50UmVmID0gZWxlbWVudDtcbiAgICB9XG5cbiAgICAvLyBDb25maWdzIG9ubHlcbiAgICBASW5wdXQoKSBhZG9wdCAgICAgICAgICAgICAgICAgICAgICAgICEgOiBIVE1MRWxlbWVudHxzdHJpbmc7XG4gICAgQElucHV0KCkgYWxpZ24gICAgICAgICAgICAgICAgICAgICAgICAhIDogQWxpZ25TcGVjfHN0cmluZztcbiAgICBASW5wdXQoKSBhbmNob3IgICAgICAgICAgICAgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGFyaWFEZXNjcmlwdGlvbiAgICAgICAgICAgICAgISA6IHN0cmluZztcbiAgICBASW5wdXQoKSBhcmlhTGFiZWwgICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmc7XG4gICAgQElucHV0KCkgYXV0b0NvbGxhcHNlICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbnwoKCkgPT4gYm9vbGVhbik7XG4gICAgQElucHV0KCkgYXV0b0NvbXBsZXRlICAgICAgICAgICAgICAgICAhIDogc3RyaW5nO1xuICAgIEBJbnB1dCgpIGF1dG9TZWxlY3QgICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgYnViYmxlRXZlbnRzICAgICAgICAgICAgICAgICAhIDogb2JqZWN0O1xuICAgIEBJbnB1dCgpIGNlbnRlcmVkICAgICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgY2hlY2tlZFZhbHVlICAgICAgICAgICAgICAgICAhIDogYW55O1xuICAgIEBJbnB1dCgpIGNoZWNrVmFsaWRpdHkgICAgICAgICAgICAgICAgISA6ICgoZmllbGQ6IEZpZWxkKSA9PiB2b2lkKXxzdHJpbmc7XG4gICAgQElucHV0KCkgY29sb3IgICAgICAgICAgICAgICAgICAgICAgICAhIDogc3RyaW5nO1xuICAgIEBJbnB1dCgpIGNvbmZpZyAgICAgICAgICAgICAgICAgICAgICAgISA6IG9iamVjdDtcbiAgICBASW5wdXQoKSBjb25zdHJhaW5UbyAgICAgICAgICAgICAgICAgICEgOiBIVE1MRWxlbWVudHxXaWRnZXR8UmVjdGFuZ2xlO1xuICAgIEBJbnB1dCgpIGNvbnRhaW5lciAgICAgICAgICAgICAgICAgICAgISA6IFJlY29yZDxzdHJpbmcsIENvbnRhaW5lckl0ZW1Db25maWc+fENvbnRhaW5lckl0ZW1Db25maWdbXXxGaWVsZENvbnRhaW5lckNvbmZpZztcbiAgICBASW5wdXQoKSBjb250YWluVmFsdWVzICAgICAgICAgICAgICAgICEgOiBib29sZWFufHN0cmluZ3woKGZpZWxkOiBGaWVsZCkgPT4gYm9vbGVhbik7XG4gICAgQElucHV0KCkgY29udGVudEVsZW1lbnRDbHMgICAgICAgICAgICAhIDogc3RyaW5nfG9iamVjdDtcbiAgICBASW5wdXQoKSBkYXRhRmllbGQgICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmc7XG4gICAgQElucHV0KCkgZGVmYXVsdEJpbmRQcm9wZXJ0eSAgICAgICAgICAhIDogc3RyaW5nO1xuICAgIEBJbnB1dCgpIGRldGVjdENTU0NvbXBhdGliaWxpdHlJc3N1ZXMgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgZG9jayAgICAgICAgICAgICAgICAgICAgICAgICAhIDogJ3RvcCd8J2JvdHRvbSd8J2xlZnQnfCdyaWdodCd8J3N0YXJ0J3wnZW5kJ3wnaGVhZGVyJ3wncHJlLWhlYWRlcid8b2JqZWN0O1xuICAgIEBJbnB1dCgpIGRyYWdnYWJsZSAgICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW58b2JqZWN0O1xuICAgIEBJbnB1dCgpIGVsZW1lbnRBdHRyaWJ1dGVzICAgICAgICAgICAgISA6IFJlY29yZDxzdHJpbmcsIHN0cmluZ3xudWxsPjtcbiAgICBASW5wdXQoKSBmbG9hdGluZyAgICAgICAgICAgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGhpZGVBbmltYXRpb24gICAgICAgICAgICAgICAgISA6IGJvb2xlYW58b2JqZWN0O1xuICAgIEBJbnB1dCgpIGhpZ2hsaWdodEV4dGVybmFsQ2hhbmdlICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgaGludCAgICAgICAgICAgICAgICAgICAgICAgICAhIDogc3RyaW5nfCgoZGF0YTogeyBzb3VyY2U6IEZpZWxkLCB2YWx1ZTogYW55IH0pID0+IHN0cmluZyk7XG4gICAgQElucHV0KCkgaGludEh0bWwgICAgICAgICAgICAgICAgICAgICAhIDogc3RyaW5nfCgoZGF0YTogeyBzb3VyY2U6IEZpZWxkLCB2YWx1ZTogYW55IH0pID0+IHN0cmluZyk7XG4gICAgQElucHV0KCkgaWdub3JlUGFyZW50UmVhZE9ubHkgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBpbmxpbmUgICAgICAgICAgICAgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGlucHV0QWxpZ24gICAgICAgICAgICAgICAgICAgISA6IHN0cmluZztcbiAgICBASW5wdXQoKSBpbnB1dEF0dHJpYnV0ZXMgICAgICAgICAgICAgICEgOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICAgIEBJbnB1dCgpIGlucHV0VGFnICAgICAgICAgICAgICAgICAgICAgISA6IHN0cmluZztcbiAgICBASW5wdXQoKSBpbnB1dFR5cGUgICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmc7XG4gICAgQElucHV0KCkgaW5wdXRXaWR0aCAgICAgICAgICAgICAgICAgICAhIDogc3RyaW5nfG51bWJlcjtcbiAgICBASW5wdXQoKSBrZXlTdHJva2VDaGFuZ2VEZWxheSAgICAgICAgICEgOiBudW1iZXI7XG4gICAgQElucHV0KCkgbGFiZWxDbHMgICAgICAgICAgICAgICAgICAgICAhIDogc3RyaW5nfG9iamVjdDtcbiAgICBASW5wdXQoKSBsYWJlbFBvc2l0aW9uICAgICAgICAgICAgICAgICEgOiAnYmVmb3JlJ3wnYWJvdmUnfG51bGw7XG4gICAgQElucHV0KCkgbGFiZWxzICAgICAgICAgICAgICAgICAgICAgICAhIDogb2JqZWN0W107XG4gICAgQElucHV0KCkgbGFiZWxXaWR0aCAgICAgICAgICAgICAgICAgICAhIDogc3RyaW5nfG51bWJlcjtcbiAgICBASW5wdXQoKSBsaXN0ZW5lcnMgICAgICAgICAgICAgICAgICAgICEgOiBSYWRpb0xpc3RlbmVycztcbiAgICBASW5wdXQoKSBsb2NhbGVDbGFzcyAgICAgICAgICAgICAgICAgICEgOiB0eXBlb2YgQmFzZTtcbiAgICBASW5wdXQoKSBsb2NhbGl6YWJsZSAgICAgICAgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGxvY2FsaXphYmxlUHJvcGVydGllcyAgICAgICAgISA6IHN0cmluZ1tdO1xuICAgIEBJbnB1dCgpIG1hc2tEZWZhdWx0cyAgICAgICAgICAgICAgICAgISA6IE1hc2tDb25maWc7XG4gICAgQElucHV0KCkgbWFza2VkICAgICAgICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbnxzdHJpbmd8TWFza0NvbmZpZztcbiAgICBASW5wdXQoKSBtb25pdG9yUmVzaXplICAgICAgICAgICAgICAgICEgOiBib29sZWFufG9iamVjdDtcbiAgICBASW5wdXQoKSBwb3NpdGlvbmVkICAgICAgICAgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIHByZXZlbnRUb29sdGlwT25Ub3VjaCAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgcmVsYXlTdG9yZUV2ZW50cyAgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSByZXZlcnRPbkVzY2FwZSAgICAgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIHJpcHBsZSAgICAgICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW58b2JqZWN0O1xuICAgIEBJbnB1dCgpIHJvbGUgICAgICAgICAgICAgICAgICAgICAgICAgISA6IHN0cmluZztcbiAgICBASW5wdXQoKSByb290RWxlbWVudCAgICAgICAgICAgICAgICAgICEgOiBTaGFkb3dSb290fEhUTUxFbGVtZW50O1xuICAgIEBJbnB1dCgpIHNjcm9sbEFjdGlvbiAgICAgICAgICAgICAgICAgISA6ICdoaWRlJ3wncmVhbGlnbid8bnVsbDtcbiAgICBASW5wdXQoKSBzaG93QW5pbWF0aW9uICAgICAgICAgICAgICAgICEgOiBib29sZWFufG9iamVjdDtcbiAgICBASW5wdXQoKSBzaG93VG9vbHRpcFdoZW5EaXNhYmxlZCAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIHNraXBWYWxpZGF0aW9uICAgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgc3BlbGxDaGVjayAgICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSB0YWIgICAgICAgICAgICAgICAgICAgICAgICAgICEgOiBib29sZWFufFRhYkNvbmZpZztcbiAgICBASW5wdXQoKSB0YWJJbmRleCAgICAgICAgICAgICAgICAgICAgICEgOiBudW1iZXI7XG4gICAgQElucHV0KCkgdGV4dCAgICAgICAgICAgICAgICAgICAgICAgICAhIDogc3RyaW5nO1xuICAgIEBJbnB1dCgpIHRleHRBbGlnbiAgICAgICAgICAgICAgICAgICAgISA6ICdsZWZ0J3wnY2VudGVyJ3wncmlnaHQnfCdzdGFydCd8J2VuZCc7XG4gICAgQElucHV0KCkgdGl0bGUgICAgICAgICAgICAgICAgICAgICAgICAhIDogc3RyaW5nO1xuICAgIEBJbnB1dCgpIHR5cGUgICAgICAgICAgICAgICAgICAgICAgICAgISA6ICdyYWRpbyd8J3JhZGlvYnV0dG9uJztcbiAgICBASW5wdXQoKSB1aSAgICAgICAgICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmd8b2JqZWN0O1xuICAgIEBJbnB1dCgpIHVuY2hlY2tlZFZhbHVlICAgICAgICAgICAgICAgISA6IGFueTtcbiAgICBASW5wdXQoKSB2YWxpZGF0ZU9uSW5wdXQgICAgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIHdlaWdodCAgICAgICAgICAgICAgICAgICAgICAgISA6IG51bWJlcjtcblxuICAgIC8vIENvbmZpZ3MgYW5kIHByb3BlcnRpZXNcbiAgICBASW5wdXQoKSBhbGlnblNlbGYgICAgICAgICAgICAgICAgICAgISA6IHN0cmluZztcbiAgICBASW5wdXQoKSBhcHBlbmRUbyAgICAgICAgICAgICAgICAgICAgISA6IEhUTUxFbGVtZW50fHN0cmluZztcbiAgICBASW5wdXQoKSBiYWRnZSAgICAgICAgICAgICAgICAgICAgICAgISA6IHN0cmluZztcbiAgICBASW5wdXQoKSBjYWxsT25GdW5jdGlvbnMgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgY2F0Y2hFdmVudEhhbmRsZXJFeGNlcHRpb25zICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGNoZWNrZWQgICAgICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBjbHMgICAgICAgICAgICAgICAgICAgICAgICAgISA6IHN0cmluZ3xvYmplY3Q7XG4gICAgQElucHV0KCkgY29sdW1uICAgICAgICAgICAgICAgICAgICAgICEgOiBudW1iZXI7XG4gICAgQElucHV0KCkgZGF0YXNldCAgICAgICAgICAgICAgICAgICAgICEgOiBvYmplY3R8UmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgICBASW5wdXQoKSBkaXNhYmxlZCAgICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW58J2luZXJ0JztcbiAgICBASW5wdXQoKSBleHRyYURhdGEgICAgICAgICAgICAgICAgICAgISA6IGFueTtcbiAgICBASW5wdXQoKSBmbGV4ICAgICAgICAgICAgICAgICAgICAgICAgISA6IG51bWJlcnxzdHJpbmc7XG4gICAgQElucHV0KCkgaGVpZ2h0ICAgICAgICAgICAgICAgICAgICAgICEgOiBudW1iZXJ8c3RyaW5nO1xuICAgIEBJbnB1dCgpIGhpZGRlbiAgICAgICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBpZCAgICAgICAgICAgICAgICAgICAgICAgICAgISA6IHN0cmluZztcbiAgICBASW5wdXQoKSBpbnNlcnRCZWZvcmUgICAgICAgICAgICAgICAgISA6IEhUTUxFbGVtZW50fHN0cmluZztcbiAgICBASW5wdXQoKSBpbnNlcnRGaXJzdCAgICAgICAgICAgICAgICAgISA6IEhUTUxFbGVtZW50fHN0cmluZztcbiAgICBASW5wdXQoKSBrZXlNYXAgICAgICAgICAgICAgICAgICAgICAgISA6IFJlY29yZDxzdHJpbmcsIEtleU1hcENvbmZpZz47XG4gICAgQElucHV0KCkgbGFiZWwgICAgICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmc7XG4gICAgQElucHV0KCkgbWFyZ2luICAgICAgICAgICAgICAgICAgICAgICEgOiBudW1iZXJ8c3RyaW5nO1xuICAgIEBJbnB1dCgpIG1heEhlaWdodCAgICAgICAgICAgICAgICAgICAhIDogc3RyaW5nfG51bWJlcjtcbiAgICBASW5wdXQoKSBtYXhpbWl6ZU9uTW9iaWxlICAgICAgICAgICAgISA6IG51bWJlcnxzdHJpbmc7XG4gICAgQElucHV0KCkgbWF4V2lkdGggICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmd8bnVtYmVyO1xuICAgIEBJbnB1dCgpIG1pbkhlaWdodCAgICAgICAgICAgICAgICAgICAhIDogc3RyaW5nfG51bWJlcjtcbiAgICBASW5wdXQoKSBtaW5XaWR0aCAgICAgICAgICAgICAgICAgICAgISA6IHN0cmluZ3xudW1iZXI7XG4gICAgQElucHV0KCkgbmFtZSAgICAgICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmc7XG4gICAgQElucHV0KCkgcmVhZE9ubHkgICAgICAgICAgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIHJlcXVpcmVkICAgICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBydGwgICAgICAgICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgc2hvd1JlcXVpcmVkSW5kaWNhdG9yICAgICAgICEgOiBzdHJpbmc7XG4gICAgQElucHV0KCkgc3BhbiAgICAgICAgICAgICAgICAgICAgICAgICEgOiBudW1iZXI7XG4gICAgQElucHV0KCkgdG9vbHRpcCAgICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmd8VG9vbHRpcENvbmZpZ3xudWxsO1xuICAgIEBJbnB1dCgpIHRyaWdnZXJzICAgICAgICAgICAgICAgICAgICAhIDogUmVjb3JkPHN0cmluZywgRmllbGRUcmlnZ2VyQ29uZmlnPnxSZWNvcmQ8c3RyaW5nLCBXaWRnZXQ+O1xuICAgIEBJbnB1dCgpIHZhbHVlICAgICAgICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSB3aWR0aCAgICAgICAgICAgICAgICAgICAgICAgISA6IG51bWJlcnxzdHJpbmc7XG4gICAgQElucHV0KCkgeCAgICAgICAgICAgICAgICAgICAgICAgICAgICEgOiBudW1iZXI7XG4gICAgQElucHV0KCkgeSAgICAgICAgICAgICAgICAgICAgICAgICAgICEgOiBudW1iZXI7XG5cbiAgICAvLyBQcm9wZXJ0aWVzIG9ubHlcbiAgICBASW5wdXQoKSBjb250ZW50ICAgICAhIDogc3RyaW5nO1xuICAgIEBJbnB1dCgpIGVkaXRhYmxlICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGh0bWwgICAgICAgICEgOiBzdHJpbmd8KCh3aWRnZXQ6IFdpZGdldCkgPT4gdm9pZCl8RG9tQ29uZmlnfERvbUNvbmZpZ1tdfFZ1ZUNvbmZpZ3xSZWFjdEpTWDtcbiAgICBASW5wdXQoKSBpbnB1dCAgICAgICAhIDogSFRNTEVsZW1lbnQ7XG4gICAgQElucHV0KCkgcGFyZW50ICAgICAgISA6IFdpZGdldDtcbiAgICBASW5wdXQoKSBwbGFjZWhvbGRlciAhIDogc3RyaW5nO1xuICAgIEBJbnB1dCgpIHNjcm9sbGFibGUgICEgOiBTY3JvbGxlcjtcblxuICAgIC8vIEV2ZW50cyBlbWl0dGVyc1xuICAgIC8qKlxuICAgICAqIFVzZXIgcGVyZm9ybWVkIHRoZSBkZWZhdWx0IGFjdGlvbiAodG9nZ2xlZCB0aGUgY2hlY2tib3gpXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuQ2hlY2tib3h9IGV2ZW50LnNvdXJjZSBDaGVja2JveFxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gZXZlbnQuY2hlY2tlZCBDaGVja2VkIHN0YXRlICg9dmFsdWUpXG4gICAgICogQHBhcmFtIHtib29sZWFufSBldmVudC52YWx1ZSBUaGlzIGZpZWxkJ3MgdmFsdWVcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGV2ZW50LnZhbGlkIFRydWUgaWYgdGhpcyBmaWVsZCBpcyBpbiBhIHZhbGlkIHN0YXRlXG4gICAgICogQHBhcmFtIHtib29sZWFufSBldmVudC5vbGRWYWx1ZSBUaGlzIGZpZWxkJ3MgcHJldmlvdXMgdmFsdWVcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGV2ZW50LnVzZXJBY3Rpb24gVHJpZ2dlcmVkIGJ5IHVzZXIgdGFraW5nIGFuIGFjdGlvbiAoYHRydWVgKSBvciBieSBzZXR0aW5nIGEgdmFsdWUgKGBmYWxzZWApXG4gICAgICogQHBhcmFtIHtFdmVudH0gZXZlbnQuZXZlbnQgVGhlIHRyaWdnZXJpbmcgRE9NIGV2ZW50IGlmIGFueVxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkFjdGlvbjogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogQ2hlY2tib3gsIGNoZWNrZWQ6IGJvb2xlYW4sIHZhbHVlOiBib29sZWFuLCB2YWxpZDogYm9vbGVhbiwgb2xkVmFsdWU6IGJvb2xlYW4sIHVzZXJBY3Rpb246IGJvb2xlYW4sIGV2ZW50OiBFdmVudCB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZWQgYmVmb3JlIGNoZWNrYm94IGlzIHRvZ2dsZWQuIFJldHVybmluZyBmYWxzZSBmcm9tIGEgbGlzdGVuZXIgcHJldmVudHMgdGhlIGNoZWNrYm94IGZyb20gYmVpbmcgdG9nZ2xlZC5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5DaGVja2JveH0gZXZlbnQuc291cmNlIENoZWNrYm94XG4gICAgICogQHBhcmFtIHtib29sZWFufSBldmVudC5jaGVja2VkIENoZWNrZWQgc3RhdGUgKD12YWx1ZSlcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGV2ZW50LnZhbHVlIFRoaXMgZmllbGQncyB2YWx1ZVxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gZXZlbnQub2xkVmFsdWUgVGhpcyBmaWVsZCdzIHByZXZpb3VzIHZhbHVlXG4gICAgICogQHBhcmFtIHtib29sZWFufSBldmVudC51c2VyQWN0aW9uIFRyaWdnZXJlZCBieSB1c2VyIHRha2luZyBhbiBhY3Rpb24gKGB0cnVlYCkgb3IgYnkgc2V0dGluZyBhIHZhbHVlIChgZmFsc2VgKVxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gZXZlbnQudmFsaWQgVHJ1ZSBpZiB0aGlzIGZpZWxkIGlzIGluIGEgdmFsaWQgc3RhdGUuXG4gICAgICogQHBhcmFtIHtFdmVudH0gZXZlbnQuZXZlbnQgVGhlIHRyaWdnZXJpbmcgRE9NIGV2ZW50IGlmIGFueVxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkJlZm9yZUNoYW5nZTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogQ2hlY2tib3gsIGNoZWNrZWQ6IGJvb2xlYW4sIHZhbHVlOiBib29sZWFuLCBvbGRWYWx1ZTogYm9vbGVhbiwgdXNlckFjdGlvbjogYm9vbGVhbiwgdmFsaWQ6IGJvb2xlYW4sIGV2ZW50OiBFdmVudCB9KSA9PiBib29sZWFufHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlcyBiZWZvcmUgYW4gb2JqZWN0IGlzIGRlc3Ryb3llZC5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtDb3JlLkJhc2V9IGV2ZW50LnNvdXJjZSBUaGUgT2JqZWN0IHRoYXQgaXMgYmVpbmcgZGVzdHJveWVkLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkJlZm9yZURlc3Ryb3k6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IEJhc2UgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIFRyaWdnZXJlZCBiZWZvcmUgYSB3aWRnZXQgaXMgaGlkZGVuLiBSZXR1cm4gYGZhbHNlYCB0byBwcmV2ZW50IHRoZSBhY3Rpb24uXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuV2lkZ2V0fSBldmVudC5zb3VyY2UgVGhlIHdpZGdldCBiZWluZyBoaWRkZW4uXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQmVmb3JlSGlkZTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogV2lkZ2V0IH0pID0+IGJvb2xlYW58dm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIFRyaWdnZXJlZCBiZWZvcmUgYSB3aWRnZXQgaXMgc2hvd24uIFJldHVybiBgZmFsc2VgIHRvIHByZXZlbnQgdGhlIGFjdGlvbi5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5XaWRnZXQsYW55fSBldmVudC5zb3VyY2UgVGhlIHdpZGdldCBiZWluZyBzaG93blxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkJlZm9yZVNob3c6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IFdpZGdldHxhbnkgfSkgPT4gUHJvbWlzZTxib29sZWFuPnxib29sZWFufHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlcyB3aGVuIGFueSBvdGhlciBldmVudCBpcyBmaXJlZCBmcm9tIHRoZSBvYmplY3QuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9SYWRpbyNldmVudC1jYXRjaEFsbClcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHt7W2tleTogc3RyaW5nXTogYW55LCB0eXBlOiBzdHJpbmd9fSBldmVudC5ldmVudCBUaGUgT2JqZWN0IHRoYXQgY29udGFpbnMgZXZlbnQgZGV0YWlsc1xuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBldmVudC5ldmVudC50eXBlIFRoZSB0eXBlIG9mIHRoZSBldmVudCB3aGljaCBpcyBjYXVnaHQgYnkgdGhlIGxpc3RlbmVyXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQ2F0Y2hBbGw6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDoge1trZXk6IHN0cmluZ106IGFueSwgdHlwZTogc3RyaW5nfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gY2hlY2tib3ggaXMgdG9nZ2xlZFxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0LkNoZWNrYm94fSBldmVudC5zb3VyY2UgQ2hlY2tib3hcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGV2ZW50LmNoZWNrZWQgQ2hlY2tlZCBzdGF0ZSAoPXZhbHVlKVxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gZXZlbnQudmFsdWUgVGhpcyBmaWVsZCdzIHZhbHVlXG4gICAgICogQHBhcmFtIHtib29sZWFufSBldmVudC5vbGRWYWx1ZSBUaGlzIGZpZWxkJ3MgcHJldmlvdXMgdmFsdWVcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGV2ZW50LnVzZXJBY3Rpb24gVHJpZ2dlcmVkIGJ5IHVzZXIgdGFraW5nIGFuIGFjdGlvbiAoYHRydWVgKSBvciBieSBzZXR0aW5nIGEgdmFsdWUgKGBmYWxzZWApXG4gICAgICogQHBhcmFtIHtib29sZWFufSBldmVudC52YWxpZCBUcnVlIGlmIHRoaXMgZmllbGQgaXMgaW4gYSB2YWxpZCBzdGF0ZS5cbiAgICAgKiBAcGFyYW0ge0V2ZW50fSBldmVudC5ldmVudCBUaGUgdHJpZ2dlcmluZyBET00gZXZlbnQgaWYgYW55XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQ2hhbmdlOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBDaGVja2JveCwgY2hlY2tlZDogYm9vbGVhbiwgdmFsdWU6IGJvb2xlYW4sIG9sZFZhbHVlOiBib29sZWFuLCB1c2VyQWN0aW9uOiBib29sZWFuLCB2YWxpZDogYm9vbGVhbiwgZXZlbnQ6IEV2ZW50IH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIHRoaXMgZmllbGQgaXMgW2NsZWFyZWRdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9GaWVsZCNmdW5jdGlvbi1jbGVhcikuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9SYWRpbyNldmVudC1jbGVhcilcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5GaWVsZCxhbnl9IGV2ZW50LnNvdXJjZSBUaGlzIEZpZWxkXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQ2xlYXI6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IEZpZWxkfGFueSB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZXMgd2hlbiB0aGUgY2hlY2tib3ggaXMgY2xpY2tlZFxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0LkNoZWNrYm94fSBldmVudC5zb3VyY2UgVGhlIGNoZWNrYm94XG4gICAgICogQHBhcmFtIHtFdmVudH0gZXZlbnQuZXZlbnQgRE9NIGV2ZW50XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQ2xpY2s6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IENoZWNrYm94LCBldmVudDogRXZlbnQgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIHdoZW4gYW4gb2JqZWN0IGlzIGRlc3Ryb3llZC5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtDb3JlLkJhc2V9IGV2ZW50LnNvdXJjZSBUaGUgT2JqZWN0IHRoYXQgaXMgYmVpbmcgZGVzdHJveWVkLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkRlc3Ryb3k6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IEJhc2UgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIFRyaWdnZXJlZCB3aGVuIGEgd2lkZ2V0J3MgW2VsZW1lbnRdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9XaWRnZXQjcHJvcGVydHktZWxlbWVudCkgaXMgYXZhaWxhYmxlLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBldmVudC5lbGVtZW50IFRoZSBXaWRnZXQncyBlbGVtZW50LlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkVsZW1lbnRDcmVhdGVkOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgZWxlbWVudDogSFRNTEVsZW1lbnQgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gZm9jdXMgZW50ZXJzIHRoaXMgV2lkZ2V0LlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0LldpZGdldH0gZXZlbnQuc291cmNlIFRoaXMgV2lkZ2V0XG4gICAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZXZlbnQuZnJvbUVsZW1lbnQgVGhlIGVsZW1lbnQgd2hpY2ggbG9zdCBmb2N1cy5cbiAgICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBldmVudC50b0VsZW1lbnQgVGhlIGVsZW1lbnQgd2hpY2ggZ2FpbmVkIGZvY3VzLlxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuV2lkZ2V0fSBldmVudC5mcm9tV2lkZ2V0IFRoZSB3aWRnZXQgd2hpY2ggbG9zdCBmb2N1cy5cbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0LldpZGdldH0gZXZlbnQudG9XaWRnZXQgVGhlIHdpZGdldCB3aGljaCBnYWluZWQgZm9jdXMuXG4gICAgICogQHBhcmFtIHtib29sZWFufSBldmVudC5iYWNrd2FyZHMgYHRydWVgIGlmIHRoZSBgdG9FbGVtZW50YCBpcyBiZWZvcmUgdGhlIGBmcm9tRWxlbWVudGAgaW4gZG9jdW1lbnQgb3JkZXIuXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uRm9jdXNJbjogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogV2lkZ2V0LCBmcm9tRWxlbWVudDogSFRNTEVsZW1lbnQsIHRvRWxlbWVudDogSFRNTEVsZW1lbnQsIGZyb21XaWRnZXQ6IFdpZGdldCwgdG9XaWRnZXQ6IFdpZGdldCwgYmFja3dhcmRzOiBib29sZWFuIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIGZvY3VzIGV4aXRzIHRoaXMgV2lkZ2V0J3Mgb3duZXJzaGlwIHRyZWUuIFRoaXMgaXMgZGlmZmVyZW50IGZyb20gYSBgYmx1cmAgZXZlbnQuXG4gICAgICogZm9jdXMgbW92aW5nIGZyb20gd2l0aGluIHRoaXMgV2lkZ2V0J3Mgb3duZXJzaGlwIHRyZWUsIGV2ZW4gaWYgdGhlcmUgYXJlIGZsb2F0aW5nIHdpZGdldHNcbiAgICAgKiB3aWxsIG5vdCB0cmlnZ2VyIHRoaXMgZXZlbnQuIFRoaXMgaXMgd2hlbiBmb2N1cyBleGl0cyB0aGlzIHdpZGdldCBjb21wbGV0ZWx5LlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0LldpZGdldH0gZXZlbnQuc291cmNlIFRoaXMgV2lkZ2V0XG4gICAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZXZlbnQuZnJvbUVsZW1lbnQgVGhlIGVsZW1lbnQgd2hpY2ggbG9zdCBmb2N1cy5cbiAgICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBldmVudC50b0VsZW1lbnQgVGhlIGVsZW1lbnQgd2hpY2ggZ2FpbmVkIGZvY3VzLlxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuV2lkZ2V0fSBldmVudC5mcm9tV2lkZ2V0IFRoZSB3aWRnZXQgd2hpY2ggbG9zdCBmb2N1cy5cbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0LldpZGdldH0gZXZlbnQudG9XaWRnZXQgVGhlIHdpZGdldCB3aGljaCBnYWluZWQgZm9jdXMuXG4gICAgICogQHBhcmFtIHtib29sZWFufSBldmVudC5iYWNrd2FyZHMgYHRydWVgIGlmIHRoZSBgdG9FbGVtZW50YCBpcyBiZWZvcmUgdGhlIGBmcm9tRWxlbWVudGAgaW4gZG9jdW1lbnQgb3JkZXIuXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uRm9jdXNPdXQ6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IFdpZGdldCwgZnJvbUVsZW1lbnQ6IEhUTUxFbGVtZW50LCB0b0VsZW1lbnQ6IEhUTUxFbGVtZW50LCBmcm9tV2lkZ2V0OiBXaWRnZXQsIHRvV2lkZ2V0OiBXaWRnZXQsIGJhY2t3YXJkczogYm9vbGVhbiB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogVHJpZ2dlcmVkIGFmdGVyIGEgd2lkZ2V0IHdhcyBoaWRkZW5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5XaWRnZXR9IGV2ZW50LnNvdXJjZSBUaGUgd2lkZ2V0XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uSGlkZTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogV2lkZ2V0IH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIHRoZSB1c2VyIHR5cGVzIGludG8gdGhpcyBmaWVsZC5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5GaWVsZCxhbnl9IGV2ZW50LnNvdXJjZSBUaGlzIGZpZWxkXG4gICAgICogQHBhcmFtIHtzdHJpbmcsbnVtYmVyLGJvb2xlYW4sYW55fSBldmVudC52YWx1ZSBUaGlzIGZpZWxkJ3MgdmFsdWVcbiAgICAgKiBAcGFyYW0ge0V2ZW50fSBldmVudC5ldmVudCBUaGUgdHJpZ2dlcmluZyBET00gZXZlbnRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25JbnB1dDogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogRmllbGR8YW55LCB2YWx1ZTogc3RyaW5nfG51bWJlcnxib29sZWFufGFueSwgZXZlbnQ6IEV2ZW50IH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyZWQgd2hlbiBhIHdpZGdldCB3aGljaCBoYWQgYmVlbiBpbiBhIG5vbi12aXNpYmxlIHN0YXRlIGZvciBhbnkgcmVhc29uXG4gICAgICogYWNoaWV2ZXMgdmlzaWJpbGl0eS5cbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1JhZGlvI2V2ZW50LXBhaW50KVxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0LldpZGdldH0gZXZlbnQuc291cmNlIFRoZSB3aWRnZXQgYmVpbmcgcGFpbnRlZC5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGV2ZW50LmZpcnN0UGFpbnQgYHRydWVgIGlmIHRoaXMgaXMgdGhlIGZpcnN0IHBhaW50LlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvblBhaW50OiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBXaWRnZXQsIGZpcnN0UGFpbnQ6IGJvb2xlYW4gfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gYSBXaWRnZXQncyByZWFkIG9ubHkgc3RhdGUgaXMgdG9nZ2xlZFxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGV2ZW50LnJlYWRPbmx5IFJlYWQgb25seSBvciBub3RcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25SZWFkT25seTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHJlYWRPbmx5OiBib29sZWFuIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBUaGlzIGV2ZW50IGlzIGZpcmVkIGFmdGVyIGEgd2lkZ2V0J3MgZWxlbWVudHMgaGF2ZSBiZWVuIHN5bmNocm9uaXplZCBkdWUgdG8gYSBkaXJlY3Qgb3IgaW5kaXJlY3QgY2FsbFxuICAgICAqIHRvIFtyZWNvbXBvc2VdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9XaWRnZXQjZnVuY3Rpb24tcmVjb21wb3NlKSwgaWYgdGhpcyByZXN1bHRzIGluIHNvbWUgY2hhbmdlIHRvIHRoZSB3aWRnZXQncyByZW5kZXJlZCBET00gZWxlbWVudHMuXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uUmVjb21wb3NlOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoKSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiB0aGUgZW5jYXBzdWxhdGluZyBlbGVtZW50IG9mIGEgV2lkZ2V0IHJlc2l6ZXMgKm9ubHkgd2hlbiBbbW9uaXRvclJlc2l6ZV0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1dpZGdldCNjb25maWctbW9uaXRvclJlc2l6ZSkgaXMgYHRydWVgKi5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5XaWRnZXR9IGV2ZW50LnNvdXJjZSBUaGlzIFdpZGdldFxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBldmVudC53aWR0aCBUaGUgbmV3IHdpZHRoXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGV2ZW50LmhlaWdodCBUaGUgbmV3IGhlaWdodFxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBldmVudC5vbGRXaWR0aCBUaGUgb2xkIHdpZHRoXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGV2ZW50Lm9sZEhlaWdodCBUaGUgb2xkIGhlaWdodFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvblJlc2l6ZTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogV2lkZ2V0LCB3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlciwgb2xkV2lkdGg6IG51bWJlciwgb2xkSGVpZ2h0OiBudW1iZXIgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIFRyaWdnZXJlZCBhZnRlciBhIHdpZGdldCBpcyBzaG93bi5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5XaWRnZXR9IGV2ZW50LnNvdXJjZSBUaGUgd2lkZ2V0XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uU2hvdzogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogV2lkZ2V0IH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBVc2VyIGNsaWNrZWQgb25lIG9mIHRoaXMgZmllbGQncyBbdHJpZ2dlcnNdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9GaWVsZCNwcm9wZXJ0eS10cmlnZ2VycylcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5GaWVsZCxhbnl9IGV2ZW50LnNvdXJjZSBUaGlzIGZpZWxkXG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5XaWRnZXR9IGV2ZW50LnRyaWdnZXIgVGhlIHRyaWdnZXIgYWN0aXZhdGVkIGJ5IGNsaWNrIG9yIHRvdWNoIHRhcC5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25UcmlnZ2VyOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBGaWVsZHxhbnksIHRyaWdnZXI6IFdpZGdldCB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYW5kIGFwcGVuZCB0aGUgdW5kZXJseWluZyB3aWRnZXRcbiAgICAgKi9cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgY29uc3RcbiAgICAgICAgICAgIG1lID0gdGhpcyxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBlbGVtZW50UmVmLFxuICAgICAgICAgICAgICAgIGJyeW50dW1Db25maWdcbiAgICAgICAgICAgIH0gPSBtZSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpbnN0YW5jZUNsYXNzLFxuICAgICAgICAgICAgICAgIGluc3RhbmNlTmFtZSxcbiAgICAgICAgICAgICAgICBicnludHVtQ29uZmlncyxcbiAgICAgICAgICAgICAgICBicnludHVtRXZlbnRzXG4gICAgICAgICAgICB9ID0gQnJ5bnR1bVJhZGlvQ29tcG9uZW50O1xuXG4gICAgICAgIGJyeW50dW1Db25maWdzLmZpbHRlcihwcm9wID0+IHByb3AgaW4gdGhpcykuZm9yRWFjaChwcm9wID0+IHtcbiAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgIFdyYXBwZXJIZWxwZXIuYXBwbHlQcm9wVmFsdWUoYnJ5bnR1bUNvbmZpZywgcHJvcCwgdGhpc1twcm9wXSk7XG4gICAgICAgICAgICBpZiAoWydmZWF0dXJlcycsICdjb25maWcnXS5pbmNsdWRlcyhwcm9wKSkge1xuICAgICAgICAgICAgICAgIFdyYXBwZXJIZWxwZXIuZGV2V2FybmluZ0NvbmZpZ1Byb3AoaW5zdGFuY2VOYW1lLCBwcm9wKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgYnJ5bnR1bUV2ZW50cy5maWx0ZXIoZXZlbnQgPT4gdGhpc1tldmVudF0gJiYgdGhpc1tldmVudF0ub2JzZXJ2ZXJzLmxlbmd0aCA+IDApLmZvckVhY2goZXZlbnQgPT4ge1xuICAgICAgICAgICAgY29uc3RcbiAgICAgICAgICAgICAgICB1bmNhcGl0YWxpemUgPSAoc3RyOiBzdHJpbmcpID0+IHN0ci5jaGFyQXQoMCkudG9Mb3dlckNhc2UoKSArIHN0ci5zbGljZSgxKSxcbiAgICAgICAgICAgICAgICBldmVudE5hbWUgPSAoc3RyOiBzdHJpbmcpID0+IHVuY2FwaXRhbGl6ZShzdHIuc2xpY2UoMikpO1xuXG4gICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICBicnludHVtQ29uZmlnLmxpc3RlbmVyc1tldmVudE5hbWUoZXZlbnQpXSA9IGUgPT4ge1xuICAgICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgICAgICBtZVtldmVudF0uZW1pdChlKTtcbiAgICAgICAgICAgICAgICAvLyBFdmVudEVtaXR0ZXIgZG9lcyBub3QgcmV0dXJuIHZhbHVlcyBpbiB0aGUgbm9ybWFsIHdheSwgd29yayBhcm91bmQgaXQgYnkgc2V0dGluZyBgcmV0dXJuVmFsdWVgIGZsYWdcbiAgICAgICAgICAgICAgICAvLyBpbiBBbmd1bGFyIGxpc3RlbmVyc1xuICAgICAgICAgICAgICAgIHJldHVybiBlLnJldHVyblZhbHVlO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gSWYgY29tcG9uZW50IGhhcyBubyBjb250YWluZXIgc3BlY2lmaWVkIGluIGNvbmZpZyB0aGVuIHVzZSBhZG9wdCB0byBXcmFwcGVyJ3MgZWxlbWVudFxuICAgICAgICBjb25zdFxuICAgICAgICAgICAgY29udGFpbmVyUGFyYW0gPSBbXG4gICAgICAgICAgICAgICAgJ2Fkb3B0JyxcbiAgICAgICAgICAgICAgICAnYXBwZW5kVG8nLFxuICAgICAgICAgICAgICAgICdpbnNlcnRBZnRlcicsXG4gICAgICAgICAgICAgICAgJ2luc2VydEJlZm9yZSdcbiAgICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICBdLmZpbmQocHJvcCA9PiBicnludHVtQ29uZmlnW3Byb3BdKTtcbiAgICAgICAgaWYgKCFjb250YWluZXJQYXJhbSkge1xuICAgICAgICAgICAgaWYgKGluc3RhbmNlTmFtZSA9PT0gJ0J1dHRvbicgfHwgZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmdldFJvb3ROb2RlKCkgaW5zdGFuY2VvZiBTaGFkb3dSb290KSB7XG4gICAgICAgICAgICAgICAgLy8gQnV0dG9uIHNob3VsZCBhbHdheXMgYmUgPGE+IG9yIDxidXR0b24+IGluc2lkZSBvd25lciBlbGVtZW50XG4gICAgICAgICAgICAgICAgYnJ5bnR1bUNvbmZpZy5hcHBlbmRUbyA9IGVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGJyeW50dW1Db25maWcuYWRvcHQgPSBlbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBXcmFwcGVySGVscGVyLmRldldhcm5pbmdDb250YWluZXIoaW5zdGFuY2VOYW1lLCBjb250YWluZXJQYXJhbSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJbiBzaGFkb3cgRE9NIChlLmcuIEFuZ3VsYXIgVmlld0VuY2Fwc3VsYXRpb24uU2hhZG93RG9tKSwgdGhlbWUgQ1NTIGZyb20gZG9jdW1lbnQuaGVhZFxuICAgICAgICAvLyBkb2VzIG5vdCBjYXNjYWRlIGludG8gdGhlIHNoYWRvdyByb290LiBJbmplY3QgYSBtYXRjaGluZyA8bGluaz4gc28gQnJ5bnR1bSdzIENTUyBjaGVja1xuICAgICAgICAvLyBmaW5kcyB0aGUgdGhlbWUuIFRoZSBAZm9udC1mYWNlIHJ1bGVzIGZyb20gY29tcG9uZW50IHN0eWxlcyBhcmUgYWxzbyBleHRyYWN0ZWQgdG9cbiAgICAgICAgLy8gZG9jdW1lbnQgc2NvcGUgc28gZG9jdW1lbnQuZm9udHMgZGV0ZWN0cyB0aGVtIChzaGFkb3ctcm9vdCBAZm9udC1mYWNlIGlzIG5vdCByZWxpYWJseVxuICAgICAgICAvLyBpbmNsdWRlZCBpbiBkb2N1bWVudC5mb250cyBhY3Jvc3MgYWxsIGJyb3dzZXJzKS5cbiAgICAgICAgY29uc3Qgc2hhZG93Um9vdCA9IGVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5nZXRSb290Tm9kZSgpO1xuICAgICAgICBpZiAoc2hhZG93Um9vdCBpbnN0YW5jZW9mIFNoYWRvd1Jvb3QpIHtcbiAgICAgICAgICAgIGluaXRUaGVtZUluU2hhZG93Um9vdHMoKTtcbiAgICAgICAgICAgIEJyeW50dW1SYWRpb0NvbXBvbmVudC5lbnN1cmVGb250c0luRG9jdW1lbnQoc2hhZG93Um9vdCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIG1lLmluc3RhbmNlID0gaW5zdGFuY2VOYW1lID09PSAnV2lkZ2V0JyA/IFdpZGdldC5jcmVhdGUoYnJ5bnR1bUNvbmZpZykgOiBuZXcgaW5zdGFuY2VDbGFzcyhicnludHVtQ29uZmlnKTtcblxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEV4dHJhY3RzIGFsbCBAZm9udC1mYWNlIGRlY2xhcmF0aW9ucyBmcm9tIGEgc2hhZG93IHJvb3QncyBzdHlsZXNoZWV0cyBhbmQgYWRkcyB0aGVtIHRvXG4gICAgICogZG9jdW1lbnQuaGVhZCBhcyBhIHNpbmdsZSA8c3R5bGU+IGVsZW1lbnQuIFRoaXMgaXMgbmVlZGVkIGJlY2F1c2UgQGZvbnQtZmFjZSBydWxlcyBpbnNpZGVcbiAgICAgKiBhIHNoYWRvdyByb290IGFyZSBub3QgcmVsaWFibHkgaW5jbHVkZWQgaW4gZG9jdW1lbnQuZm9udHMgYWNyb3NzIGFsbCBicm93c2VycywgY2F1c2luZ1xuICAgICAqIEJyeW50dW0ncyBDU1MgY29tcGF0aWJpbGl0eSBjaGVjayB0byBpbmNvcnJlY3RseSByZXBvcnQgbWlzc2luZyBmb250cy5cbiAgICAgKiBTYWZlIHRvIGNhbGwgbXVsdGlwbGUgdGltZXMg4oCUIHRoZSBleHRyYWN0aW9uIHJ1bnMgb25seSBvbmNlIHBlciBwYWdlLlxuICAgICAqL1xuICAgIHByaXZhdGUgc3RhdGljIGVuc3VyZUZvbnRzSW5Eb2N1bWVudChzaGFkb3dSb290OiBTaGFkb3dSb290KTogdm9pZCB7XG4gICAgICAgIGlmIChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjYi1zaGFkb3ctcm9vdC1mb250cycpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBmb250RmFjZVJ1bGVzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgICAgIGNvbnN0IGV4dHJhY3RGcm9tU2hlZXQgPSAoc2hlZXQ6IENTU1N0eWxlU2hlZXQpOiB2b2lkID0+IHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcnVsZXMgPSBzaGVldC5jc3NSdWxlcztcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJ1bGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChydWxlc1tpXS50eXBlID09PSBDU1NSdWxlLkZPTlRfRkFDRV9SVUxFKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb250RmFjZVJ1bGVzLnB1c2gocnVsZXNbaV0uY3NzVGV4dCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoX2UpIHtcbiAgICAgICAgICAgICAgICAvLyBDcm9zcy1vcmlnaW4gYWNjZXNzIG1heSB0aHJvdzsgc2lsZW50bHkgc2tpcFxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIC8vIGFkb3B0ZWRTdHlsZVNoZWV0cyAoQW5ndWxhciAxNCsgLyBtb2Rlcm4gYnJvd3NlcnMpXG4gICAgICAgIGNvbnN0IGFkb3B0ZWRTaGVldHM6IENTU1N0eWxlU2hlZXRbXSA9IChzaGFkb3dSb290IGFzIGFueSkuYWRvcHRlZFN0eWxlU2hlZXRzID8/IFtdO1xuICAgICAgICBhZG9wdGVkU2hlZXRzLmZvckVhY2goc2hlZXQgPT4gZXh0cmFjdEZyb21TaGVldChzaGVldCkpO1xuXG4gICAgICAgIC8vIDxzdHlsZT4gZWxlbWVudHMgKG9sZGVyIEFuZ3VsYXIgb3IgZmFsbGJhY2spXG4gICAgICAgIHNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvckFsbCgnc3R5bGUnKS5mb3JFYWNoKGVsID0+IHtcbiAgICAgICAgICAgIGlmIChlbC5zaGVldCkge1xuICAgICAgICAgICAgICAgIGV4dHJhY3RGcm9tU2hlZXQoZWwuc2hlZXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAoZm9udEZhY2VSdWxlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBzdHlsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7XG4gICAgICAgICAgICBzdHlsZS5pZCA9ICdiLXNoYWRvdy1yb290LWZvbnRzJztcbiAgICAgICAgICAgIHN0eWxlLnRleHRDb250ZW50ID0gZm9udEZhY2VSdWxlcy5qb2luKCdcXG4nKTtcbiAgICAgICAgICAgIGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoc3R5bGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogV2F0Y2ggZm9yIGNoYW5nZXNcbiAgICAgKiBAcGFyYW0gY2hhbmdlc1xuICAgICAqL1xuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAgICAgY29uc3RcbiAgICAgICAgICAgIHsgaW5zdGFuY2UgfSA9IHRoaXMsXG4gICAgICAgICAgICB7IGluc3RhbmNlTmFtZSB9ID0gQnJ5bnR1bVJhZGlvQ29tcG9uZW50O1xuICAgICAgICBpZiAoIWluc3RhbmNlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gSXRlcmF0ZSBvdmVyIGFsbCBjaGFuZ2VzXG4gICAgICAgIE9iamVjdC5lbnRyaWVzKGNoYW5nZXMpLmZvckVhY2goKFtwcm9wLCBjaGFuZ2VdKSA9PiB7XG4gICAgICAgICAgICBjb25zdFxuICAgICAgICAgICAgICAgIG5ld1ZhbHVlID0gKGNoYW5nZSBhcyBTaW1wbGVDaGFuZ2UpLmN1cnJlbnRWYWx1ZSxcbiAgICAgICAgICAgICAgICB7IGluc3RhbmNlIH0gPSB0aGlzLFxuICAgICAgICAgICAgICAgIHsgYnJ5bnR1bUNvbmZpZ3NPbmx5LCBicnludHVtUHJvcHMgfSA9IEJyeW50dW1SYWRpb0NvbXBvbmVudDtcbiAgICAgICAgICAgIGlmIChicnludHVtUHJvcHMuaW5jbHVkZXMocHJvcCkpIHtcbiAgICAgICAgICAgICAgICBXcmFwcGVySGVscGVyLmFwcGx5UHJvcFZhbHVlKGluc3RhbmNlLCBwcm9wLCBuZXdWYWx1ZSwgZmFsc2UpO1xuICAgICAgICAgICAgICAgIGlmIChicnludHVtQ29uZmlnc09ubHkuaW5jbHVkZXMocHJvcCkpIHtcbiAgICAgICAgICAgICAgICAgICAgV3JhcHBlckhlbHBlci5kZXZXYXJuaW5nVXBkYXRlUHJvcChpbnN0YW5jZU5hbWUsIHByb3ApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGVzdHJveSB0aGUgY29tcG9uZW50XG4gICAgICovXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgaWYgKHRoaXMuaW5zdGFuY2UgJiYgdGhpcy5pbnN0YW5jZS5kZXN0cm95KSB7XG4gICAgICAgICAgICB0aGlzLmluc3RhbmNlLmRlc3Ryb3koKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiJdfQ==
|