@bryntum/taskboard-angular 7.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +44 -0
- package/bryntum-taskboard-angular.d.ts +5 -0
- package/bundles/bryntum-taskboard-angular.umd.js +56826 -0
- package/bundles/bryntum-taskboard-angular.umd.js.map +1 -0
- package/esm2015/bryntum-taskboard-angular.js +5 -0
- package/esm2015/lib/bryntum-button-group.component.js +725 -0
- package/esm2015/lib/bryntum-button.component.js +715 -0
- package/esm2015/lib/bryntum-chat-panel.component.js +839 -0
- package/esm2015/lib/bryntum-checkbox-group.component.js +854 -0
- package/esm2015/lib/bryntum-checkbox.component.js +805 -0
- package/esm2015/lib/bryntum-chip-view.component.js +727 -0
- package/esm2015/lib/bryntum-code-editor.component.js +818 -0
- package/esm2015/lib/bryntum-color-field.component.js +794 -0
- package/esm2015/lib/bryntum-column-combo.component.js +936 -0
- package/esm2015/lib/bryntum-column-filter-field.component.js +799 -0
- package/esm2015/lib/bryntum-column-picker-button.component.js +719 -0
- package/esm2015/lib/bryntum-column-scroll-button.component.js +719 -0
- package/esm2015/lib/bryntum-combo.component.js +932 -0
- package/esm2015/lib/bryntum-container.component.js +681 -0
- package/esm2015/lib/bryntum-date-field.component.js +831 -0
- package/esm2015/lib/bryntum-date-picker.component.js +1008 -0
- package/esm2015/lib/bryntum-date-range-field.component.js +835 -0
- package/esm2015/lib/bryntum-date-time-field.component.js +752 -0
- package/esm2015/lib/bryntum-demo-code-editor.component.js +830 -0
- package/esm2015/lib/bryntum-demo-header.component.js +171 -0
- package/esm2015/lib/bryntum-display-field.component.js +772 -0
- package/esm2015/lib/bryntum-duration-field.component.js +815 -0
- package/esm2015/lib/bryntum-editor.component.js +823 -0
- package/esm2015/lib/bryntum-field-filter-picker-group.component.js +758 -0
- package/esm2015/lib/bryntum-field-filter-picker.component.js +740 -0
- package/esm2015/lib/bryntum-field-set.component.js +810 -0
- package/esm2015/lib/bryntum-file-field.component.js +776 -0
- package/esm2015/lib/bryntum-file-picker.component.js +709 -0
- package/esm2015/lib/bryntum-filter-field.component.js +803 -0
- package/esm2015/lib/bryntum-fullscreen-button.component.js +53 -0
- package/esm2015/lib/bryntum-hint.component.js +856 -0
- package/esm2015/lib/bryntum-label.component.js +584 -0
- package/esm2015/lib/bryntum-list.component.js +715 -0
- package/esm2015/lib/bryntum-menu.component.js +883 -0
- package/esm2015/lib/bryntum-month-picker.component.js +818 -0
- package/esm2015/lib/bryntum-number-field.component.js +800 -0
- package/esm2015/lib/bryntum-paging-toolbar.component.js +736 -0
- package/esm2015/lib/bryntum-panel.component.js +794 -0
- package/esm2015/lib/bryntum-password-field.component.js +768 -0
- package/esm2015/lib/bryntum-project-combo.component.js +940 -0
- package/esm2015/lib/bryntum-radio-group.component.js +826 -0
- package/esm2015/lib/bryntum-radio.component.js +805 -0
- package/esm2015/lib/bryntum-resources-combo.component.js +936 -0
- package/esm2015/lib/bryntum-scheduler-project-combo.component.js +936 -0
- package/esm2015/lib/bryntum-slide-toggle.component.js +805 -0
- package/esm2015/lib/bryntum-slider.component.js +661 -0
- package/esm2015/lib/bryntum-splitter.component.js +618 -0
- package/esm2015/lib/bryntum-swimlane-combo.component.js +936 -0
- package/esm2015/lib/bryntum-swimlane-filter-field.component.js +807 -0
- package/esm2015/lib/bryntum-swimlane-picker-button.component.js +719 -0
- package/esm2015/lib/bryntum-swimlane-scroll-button.component.js +719 -0
- package/esm2015/lib/bryntum-tab-panel.component.js +842 -0
- package/esm2015/lib/bryntum-tag-combo.component.js +940 -0
- package/esm2015/lib/bryntum-task-board-base.component.js +1678 -0
- package/esm2015/lib/bryntum-task-board-field-filter-picker-group.component.js +762 -0
- package/esm2015/lib/bryntum-task-board-field-filter-picker.component.js +732 -0
- package/esm2015/lib/bryntum-task-board-project-model.component.js +690 -0
- package/esm2015/lib/bryntum-task-board.component.js +1682 -0
- package/esm2015/lib/bryntum-task-color-combo.component.js +794 -0
- package/esm2015/lib/bryntum-task-filter-field.component.js +807 -0
- package/esm2015/lib/bryntum-text-area-field.component.js +776 -0
- package/esm2015/lib/bryntum-text-area-picker-field.component.js +798 -0
- package/esm2015/lib/bryntum-text-field.component.js +783 -0
- package/esm2015/lib/bryntum-time-field.component.js +819 -0
- package/esm2015/lib/bryntum-time-picker.component.js +709 -0
- package/esm2015/lib/bryntum-todo-list-field.component.js +780 -0
- package/esm2015/lib/bryntum-toolbar.component.js +732 -0
- package/esm2015/lib/bryntum-undo-redo.component.js +689 -0
- package/esm2015/lib/bryntum-widget.component.js +580 -0
- package/esm2015/lib/bryntum-year-picker.component.js +827 -0
- package/esm2015/lib/bryntum-zoom-slider.component.js +665 -0
- package/esm2015/lib/taskboard.module.js +374 -0
- package/esm2015/lib/wrapper.helper.js +74 -0
- package/esm2015/public-api.js +76 -0
- package/fesm2015/bryntum-taskboard-angular.js +56188 -0
- package/fesm2015/bryntum-taskboard-angular.js.map +1 -0
- package/lib/bryntum-button-group.component.d.ts +860 -0
- package/lib/bryntum-button.component.d.ts +845 -0
- package/lib/bryntum-chat-panel.component.d.ts +1060 -0
- package/lib/bryntum-checkbox-group.component.d.ts +1094 -0
- package/lib/bryntum-checkbox.component.d.ts +968 -0
- package/lib/bryntum-chip-view.component.d.ts +872 -0
- package/lib/bryntum-code-editor.component.d.ts +1045 -0
- package/lib/bryntum-color-field.component.d.ts +965 -0
- package/lib/bryntum-column-combo.component.d.ts +1208 -0
- package/lib/bryntum-column-filter-field.component.d.ts +988 -0
- package/lib/bryntum-column-picker-button.component.d.ts +853 -0
- package/lib/bryntum-column-scroll-button.component.d.ts +853 -0
- package/lib/bryntum-combo.component.d.ts +1199 -0
- package/lib/bryntum-container.component.d.ts +822 -0
- package/lib/bryntum-date-field.component.d.ts +1025 -0
- package/lib/bryntum-date-picker.component.d.ts +1338 -0
- package/lib/bryntum-date-range-field.component.d.ts +1027 -0
- package/lib/bryntum-date-time-field.component.d.ts +912 -0
- package/lib/bryntum-demo-code-editor.component.d.ts +1061 -0
- package/lib/bryntum-demo-header.component.d.ts +29 -0
- package/lib/bryntum-display-field.component.d.ts +949 -0
- package/lib/bryntum-duration-field.component.d.ts +1008 -0
- package/lib/bryntum-editor.component.d.ts +969 -0
- package/lib/bryntum-field-filter-picker-group.component.d.ts +935 -0
- package/lib/bryntum-field-filter-picker.component.d.ts +903 -0
- package/lib/bryntum-field-set.component.d.ts +1038 -0
- package/lib/bryntum-file-field.component.d.ts +952 -0
- package/lib/bryntum-file-picker.component.d.ts +847 -0
- package/lib/bryntum-filter-field.component.d.ts +993 -0
- package/lib/bryntum-fullscreen-button.component.d.ts +20 -0
- package/lib/bryntum-hint.component.d.ts +1117 -0
- package/lib/bryntum-label.component.d.ts +683 -0
- package/lib/bryntum-list.component.d.ts +849 -0
- package/lib/bryntum-menu.component.d.ts +1129 -0
- package/lib/bryntum-month-picker.component.d.ts +1034 -0
- package/lib/bryntum-number-field.component.d.ts +995 -0
- package/lib/bryntum-paging-toolbar.component.d.ts +886 -0
- package/lib/bryntum-panel.component.d.ts +1015 -0
- package/lib/bryntum-password-field.component.d.ts +939 -0
- package/lib/bryntum-project-combo.component.d.ts +1209 -0
- package/lib/bryntum-radio-group.component.d.ts +1068 -0
- package/lib/bryntum-radio.component.d.ts +968 -0
- package/lib/bryntum-resources-combo.component.d.ts +1207 -0
- package/lib/bryntum-scheduler-project-combo.component.d.ts +1201 -0
- package/lib/bryntum-slide-toggle.component.d.ts +968 -0
- package/lib/bryntum-slider.component.d.ts +776 -0
- package/lib/bryntum-splitter.component.d.ts +714 -0
- package/lib/bryntum-swimlane-combo.component.d.ts +1207 -0
- package/lib/bryntum-swimlane-filter-field.component.d.ts +1001 -0
- package/lib/bryntum-swimlane-picker-button.component.d.ts +853 -0
- package/lib/bryntum-swimlane-scroll-button.component.d.ts +853 -0
- package/lib/bryntum-tab-panel.component.d.ts +1065 -0
- package/lib/bryntum-tag-combo.component.d.ts +1212 -0
- package/lib/bryntum-task-board-base.component.d.ts +1921 -0
- package/lib/bryntum-task-board-field-filter-picker-group.component.d.ts +941 -0
- package/lib/bryntum-task-board-field-filter-picker.component.d.ts +889 -0
- package/lib/bryntum-task-board-project-model.component.d.ts +732 -0
- package/lib/bryntum-task-board.component.d.ts +1923 -0
- package/lib/bryntum-task-color-combo.component.d.ts +965 -0
- package/lib/bryntum-task-filter-field.component.d.ts +1001 -0
- package/lib/bryntum-text-area-field.component.d.ts +951 -0
- package/lib/bryntum-text-area-picker-field.component.d.ts +972 -0
- package/lib/bryntum-text-field.component.d.ts +957 -0
- package/lib/bryntum-time-field.component.d.ts +1006 -0
- package/lib/bryntum-time-picker.component.d.ts +853 -0
- package/lib/bryntum-todo-list-field.component.d.ts +955 -0
- package/lib/bryntum-toolbar.component.d.ts +879 -0
- package/lib/bryntum-undo-redo.component.d.ts +831 -0
- package/lib/bryntum-widget.component.d.ts +678 -0
- package/lib/bryntum-year-picker.component.d.ts +1049 -0
- package/lib/bryntum-zoom-slider.component.d.ts +784 -0
- package/lib/taskboard.module.d.ts +77 -0
- package/lib/wrapper.helper.d.ts +26 -0
- package/package.json +33 -0
- package/public-api.d.ts +72 -0
|
@@ -0,0 +1,690 @@
|
|
|
1
|
+
/* eslint-disable @typescript-eslint/no-unused-vars */
|
|
2
|
+
/**
|
|
3
|
+
* Angular wrapper for Bryntum ProjectModel
|
|
4
|
+
*/
|
|
5
|
+
import { Component, EventEmitter, Output, Input } from '@angular/core';
|
|
6
|
+
import WrapperHelper from './wrapper.helper';
|
|
7
|
+
import { ProjectModel } from '@bryntum/taskboard';
|
|
8
|
+
import * as i0 from "@angular/core";
|
|
9
|
+
export class BryntumTaskBoardProjectModelComponent {
|
|
10
|
+
constructor(element) {
|
|
11
|
+
this.bryntumConfig = {
|
|
12
|
+
adopt: undefined,
|
|
13
|
+
appendTo: undefined,
|
|
14
|
+
href: undefined,
|
|
15
|
+
angularComponent: this,
|
|
16
|
+
features: {},
|
|
17
|
+
listeners: {}
|
|
18
|
+
};
|
|
19
|
+
// Events emitters
|
|
20
|
+
/**
|
|
21
|
+
* Fires before an object is destroyed.
|
|
22
|
+
* @param {object} event Event object
|
|
23
|
+
* @param {Core.Base} event.source The Object that is being destroyed.
|
|
24
|
+
*/
|
|
25
|
+
this.onBeforeDestroy = new EventEmitter();
|
|
26
|
+
/**
|
|
27
|
+
* Fires before [load request](https://bryntum.com/products/scheduler/docs#Scheduler/crud/AbstractCrudManagerMixin#function-load) is sent. Return `false` to cancel load request.
|
|
28
|
+
* @param {object} event Event object
|
|
29
|
+
* @param {Scheduler.crud.AbstractCrudManager} event.source The CRUD manager.
|
|
30
|
+
* @param {object} event.pack The data package which contains data for all stores managed by the crud manager.
|
|
31
|
+
*/
|
|
32
|
+
this.onBeforeLoad = new EventEmitter();
|
|
33
|
+
/**
|
|
34
|
+
* Fires before loaded data get applied to the stores. Return `false` to prevent data applying.
|
|
35
|
+
* This event can be used for server data preprocessing. To achieve it user can modify the `response` object.
|
|
36
|
+
* @param {object} event Event object
|
|
37
|
+
* @param {Scheduler.crud.AbstractCrudManager} event.source The CRUD manager.
|
|
38
|
+
* @param {object} event.response The decoded server response object.
|
|
39
|
+
* @param {object} event.options Options provided to the [load](https://bryntum.com/products/scheduler/docs#Scheduler/crud/AbstractCrudManagerMixin#function-load) method.
|
|
40
|
+
*/
|
|
41
|
+
this.onBeforeLoadApply = new EventEmitter();
|
|
42
|
+
/**
|
|
43
|
+
* Fires before server response gets applied to the stores. Return `false` to prevent data applying.
|
|
44
|
+
* This event can be used for server data preprocessing. To achieve it user can modify the `response` object.
|
|
45
|
+
* @param {object} event Event object
|
|
46
|
+
* @param {Scheduler.crud.AbstractCrudManager} event.source The CRUD manager.
|
|
47
|
+
* @param {'sync','load'} event.requestType The request type (`sync` or `load`).
|
|
48
|
+
* @param {object} event.response The decoded server response object.
|
|
49
|
+
*/
|
|
50
|
+
this.onBeforeResponseApply = new EventEmitter();
|
|
51
|
+
/**
|
|
52
|
+
* Fires before a request is sent to the server.
|
|
53
|
+
* ...
|
|
54
|
+
* [View online docs...](https://bryntum.com/products/taskboard/docs/api/TaskBoard/model/ProjectModel#event-beforeSend)
|
|
55
|
+
* @param {object} event Event object
|
|
56
|
+
* @param {Scheduler.crud.AbstractCrudManager} event.crudManager The CRUD manager.
|
|
57
|
+
* @param {object} event.params HTTP request params to be passed in the request URL.
|
|
58
|
+
* @param {'sync','load'} event.requestType CrudManager request type (`load`/`sync`)
|
|
59
|
+
* @param {object} event.requestConfig Configuration object for Ajax request call
|
|
60
|
+
*/
|
|
61
|
+
this.onBeforeSend = new EventEmitter();
|
|
62
|
+
/**
|
|
63
|
+
* Fires before [sync request](https://bryntum.com/products/scheduler/docs#Scheduler/crud/AbstractCrudManagerMixin#function-sync) is sent. Return `false` to cancel sync request.
|
|
64
|
+
* ...
|
|
65
|
+
* [View online docs...](https://bryntum.com/products/taskboard/docs/api/TaskBoard/model/ProjectModel#event-beforeSync)
|
|
66
|
+
* @param {object} event Event object
|
|
67
|
+
* @param {Scheduler.crud.AbstractCrudManager} event.source The CRUD manager.
|
|
68
|
+
* @param {object} event.pack The data package which contains data for all stores managed by the crud manager.
|
|
69
|
+
*/
|
|
70
|
+
this.onBeforeSync = new EventEmitter();
|
|
71
|
+
/**
|
|
72
|
+
* Fires before sync response data get applied to the stores. Return `false` to prevent data applying.
|
|
73
|
+
* This event can be used for server data preprocessing. To achieve it user can modify the `response` object.
|
|
74
|
+
* @param {object} event Event object
|
|
75
|
+
* @param {Scheduler.crud.AbstractCrudManager} event.source The CRUD manager.
|
|
76
|
+
* @param {object} event.response The decoded server response object.
|
|
77
|
+
*/
|
|
78
|
+
this.onBeforeSyncApply = new EventEmitter();
|
|
79
|
+
/**
|
|
80
|
+
* Fires when any other event is fired from the object.
|
|
81
|
+
* ...
|
|
82
|
+
* [View online docs...](https://bryntum.com/products/taskboard/docs/api/TaskBoard/model/ProjectModel#event-catchAll)
|
|
83
|
+
* @param {object} event Event object
|
|
84
|
+
* @param {{[key: string]: any, type: string}} event.event The Object that contains event details
|
|
85
|
+
* @param {string} event.event.type The type of the event which is caught by the listener
|
|
86
|
+
*/
|
|
87
|
+
this.onCatchAll = new EventEmitter();
|
|
88
|
+
/**
|
|
89
|
+
* Fired when data in any of the projects stores changes.
|
|
90
|
+
* ...
|
|
91
|
+
* [View online docs...](https://bryntum.com/products/taskboard/docs/api/TaskBoard/model/ProjectModel#event-change)
|
|
92
|
+
* @param {object} event Event object
|
|
93
|
+
* @param {Scheduler.model.SchedulerProjectModel,any} event.source This project
|
|
94
|
+
* @param {Core.data.Store} event.store Affected store
|
|
95
|
+
* @param {'remove','removeAll','add','clearchanges','filter','update','dataset','replace'} event.action Name of action which triggered the change. May be one of: * `'remove'` * `'removeAll'` * `'add'` * `'clearchanges'` * `'filter'` * `'update'` * `'dataset'` * `'replace'`
|
|
96
|
+
* @param {Core.data.Model} event.record Changed record, for actions that affects exactly one record (`'update'`)
|
|
97
|
+
* @param {Core.data.Model[]} event.records Changed records, passed for all actions except `'removeAll'`
|
|
98
|
+
* @param {object} event.changes Passed for the `'update'` action, info on which record fields changed
|
|
99
|
+
*/
|
|
100
|
+
this.onChange = new EventEmitter();
|
|
101
|
+
/**
|
|
102
|
+
* Fired when the engine has finished its calculations and the results has been written back to the records.
|
|
103
|
+
* ...
|
|
104
|
+
* [View online docs...](https://bryntum.com/products/taskboard/docs/api/TaskBoard/model/ProjectModel#event-dataReady)
|
|
105
|
+
* @param {object} event Event object
|
|
106
|
+
* @param {Scheduler.model.SchedulerProjectModel,any} event.source The project
|
|
107
|
+
* @param {boolean} event.isInitialCommit Flag that shows if this commit is initial
|
|
108
|
+
* @param {Set<any>} event.records Set of all [Model](https://bryntum.com/products/taskboard/docs/api/Core/data/Model)s that were modified in the completed transaction. Use the [modifications](https://bryntum.com/products/taskboard/docs/api/Core/data/Model#property-modifications) property of each Model to identify modified fields.
|
|
109
|
+
*/
|
|
110
|
+
this.onDataReady = new EventEmitter();
|
|
111
|
+
/**
|
|
112
|
+
* Fires when an object is destroyed.
|
|
113
|
+
* @param {object} event Event object
|
|
114
|
+
* @param {Core.Base} event.source The Object that is being destroyed.
|
|
115
|
+
*/
|
|
116
|
+
this.onDestroy = new EventEmitter();
|
|
117
|
+
/**
|
|
118
|
+
* Fires when data in any of the registered data stores is changed.
|
|
119
|
+
* ...
|
|
120
|
+
* [View online docs...](https://bryntum.com/products/taskboard/docs/api/TaskBoard/model/ProjectModel#event-hasChanges)
|
|
121
|
+
* @param {object} event Event object
|
|
122
|
+
* @param {Scheduler.crud.AbstractCrudManager} event.source The CRUD manager.
|
|
123
|
+
*/
|
|
124
|
+
this.onHasChanges = new EventEmitter();
|
|
125
|
+
/**
|
|
126
|
+
* Fires on successful [load request](https://bryntum.com/products/scheduler/docs#Scheduler/crud/AbstractCrudManagerMixin#function-load) completion after data gets loaded to the stores.
|
|
127
|
+
* @param {object} event Event object
|
|
128
|
+
* @param {Scheduler.crud.AbstractCrudManager} event.source The CRUD manager.
|
|
129
|
+
* @param {object} event.response The decoded server response object.
|
|
130
|
+
* @param {object} event.responseOptions [DEPRECATED] see `requestOptions`
|
|
131
|
+
* @param {object} event.requestOptions The request options passed to the request.
|
|
132
|
+
* @param {Response} event.rawResponse The native Response object
|
|
133
|
+
*/
|
|
134
|
+
this.onLoad = new EventEmitter();
|
|
135
|
+
/**
|
|
136
|
+
* Fired after [load request](https://bryntum.com/products/scheduler/docs#Scheduler/crud/AbstractCrudManagerMixin#function-load) was canceled by some [beforeLoad](https://bryntum.com/products/scheduler/docs#Scheduler/crud/AbstractCrudManagerMixin#event-beforeLoad)
|
|
137
|
+
* listener or due to incomplete prior load request.
|
|
138
|
+
* @param {object} event Event object
|
|
139
|
+
* @param {Scheduler.crud.AbstractCrudManager} event.source The CRUD manager.
|
|
140
|
+
* @param {object} event.pack The data package which contains data for all stores managed by the crud manager.
|
|
141
|
+
*/
|
|
142
|
+
this.onLoadCanceled = new EventEmitter();
|
|
143
|
+
/**
|
|
144
|
+
* Fires when a [load request](https://bryntum.com/products/scheduler/docs#Scheduler/crud/AbstractCrudManagerMixin#function-load) fails.
|
|
145
|
+
* @param {object} event Event object
|
|
146
|
+
* @param {Scheduler.crud.AbstractCrudManager} event.source The CRUD manager instance.
|
|
147
|
+
* @param {object} event.response The decoded server response object.
|
|
148
|
+
* @param {string} event.responseText The raw server response text
|
|
149
|
+
* @param {object} event.responseOptions [DEPRECATED] see `requestOptions`
|
|
150
|
+
* @param {object} event.requestOptions The request options passed to the request.
|
|
151
|
+
* @param {Response} event.rawResponse The native Response object
|
|
152
|
+
*/
|
|
153
|
+
this.onLoadFail = new EventEmitter();
|
|
154
|
+
/**
|
|
155
|
+
* Fires when registered stores get into state when they don't have any
|
|
156
|
+
* not persisted change. This happens after [load](https://bryntum.com/products/scheduler/docs#Scheduler/crud/AbstractCrudManagerMixin#function-load) or [sync](https://bryntum.com/products/scheduler/docs#Scheduler/crud/AbstractCrudManagerMixin#function-sync) request
|
|
157
|
+
* completion. Or this may happen after a record update which turns its fields back to their original state.
|
|
158
|
+
* ...
|
|
159
|
+
* [View online docs...](https://bryntum.com/products/taskboard/docs/api/TaskBoard/model/ProjectModel#event-noChanges)
|
|
160
|
+
* @param {object} event Event object
|
|
161
|
+
* @param {Scheduler.crud.AbstractCrudManager} event.source The CRUD manager.
|
|
162
|
+
*/
|
|
163
|
+
this.onNoChanges = new EventEmitter();
|
|
164
|
+
/**
|
|
165
|
+
* Fires on successful request completion after data gets applied to the stores.
|
|
166
|
+
* @param {object} event Event object
|
|
167
|
+
* @param {Scheduler.crud.AbstractCrudManager} event.source The CRUD manager.
|
|
168
|
+
* @param {'sync','load'} event.requestType The request type (`sync` or `load`).
|
|
169
|
+
* @param {object} event.response The decoded server response object.
|
|
170
|
+
* @param {object} event.responseOptions [DEPRECATED] see `requestOptions`
|
|
171
|
+
* @param {object} event.requestOptions The request options passed to the request.
|
|
172
|
+
* @param {Response} event.rawResponse The native Response object
|
|
173
|
+
*/
|
|
174
|
+
this.onRequestDone = new EventEmitter();
|
|
175
|
+
/**
|
|
176
|
+
* Fires when a request fails.
|
|
177
|
+
* @param {object} event Event object
|
|
178
|
+
* @param {Scheduler.crud.AbstractCrudManager} event.source The CRUD manager instance.
|
|
179
|
+
* @param {'sync','load'} event.requestType The request type (`sync` or `load`).
|
|
180
|
+
* @param {object} event.response The decoded server response object.
|
|
181
|
+
* @param {string} event.responseText The raw server response text
|
|
182
|
+
* @param {object} event.responseOptions [DEPRECATED] see `requestOptions`
|
|
183
|
+
* @param {object} event.requestOptions The request options passed to the request.
|
|
184
|
+
* @param {Response} event.rawResponse The native Response object
|
|
185
|
+
*/
|
|
186
|
+
this.onRequestFail = new EventEmitter();
|
|
187
|
+
/**
|
|
188
|
+
* Fires on successful [sync request](https://bryntum.com/products/scheduler/docs#Scheduler/crud/AbstractCrudManagerMixin#function-sync) completion.
|
|
189
|
+
* @param {object} event Event object
|
|
190
|
+
* @param {Scheduler.crud.AbstractCrudManager} event.source The CRUD manager.
|
|
191
|
+
* @param {object} event.response The decoded server response object.
|
|
192
|
+
* @param {object} event.responseOptions [DEPRECATED] see `requestOptions`
|
|
193
|
+
* @param {object} event.requestOptions The request options passed to the request.
|
|
194
|
+
* @param {Response} event.rawResponse The native Response object
|
|
195
|
+
*/
|
|
196
|
+
this.onSync = new EventEmitter();
|
|
197
|
+
/**
|
|
198
|
+
* Fires after [sync request](https://bryntum.com/products/scheduler/docs#Scheduler/crud/AbstractCrudManagerMixin#function-sync) was canceled by some [beforeSync](https://bryntum.com/products/scheduler/docs#Scheduler/crud/AbstractCrudManagerMixin#event-beforeSync) listener.
|
|
199
|
+
* @param {object} event Event object
|
|
200
|
+
* @param {Scheduler.crud.AbstractCrudManager} event.source The CRUD manager.
|
|
201
|
+
* @param {object} event.pack The data package which contains data for all stores managed by the crud manager.
|
|
202
|
+
*/
|
|
203
|
+
this.onSyncCanceled = new EventEmitter();
|
|
204
|
+
/**
|
|
205
|
+
* Fires after [sync request](https://bryntum.com/products/scheduler/docs#Scheduler/crud/AbstractCrudManagerMixin#function-sync) was delayed due to incomplete previous one.
|
|
206
|
+
* @param {object} event Event object
|
|
207
|
+
* @param {Scheduler.crud.AbstractCrudManager} event.source The CRUD manager.
|
|
208
|
+
* @param {object} event.arguments The arguments of [sync](https://bryntum.com/products/scheduler/docs#Scheduler/crud/AbstractCrudManagerMixin#function-sync) call.
|
|
209
|
+
*/
|
|
210
|
+
this.onSyncDelayed = new EventEmitter();
|
|
211
|
+
/**
|
|
212
|
+
* Fires when a [sync request](https://bryntum.com/products/scheduler/docs#Scheduler/crud/AbstractCrudManagerMixin#function-sync) fails.
|
|
213
|
+
* @param {object} event Event object
|
|
214
|
+
* @param {Scheduler.crud.AbstractCrudManager} event.source The CRUD manager instance.
|
|
215
|
+
* @param {object} event.response The decoded server response object.
|
|
216
|
+
* @param {string} event.responseText The raw server response text
|
|
217
|
+
* @param {object} event.responseOptions [DEPRECATED] see `requestOptions`
|
|
218
|
+
* @param {object} event.requestOptions The request options passed to the request.
|
|
219
|
+
* @param {Response} event.rawResponse The native Response object
|
|
220
|
+
*/
|
|
221
|
+
this.onSyncFail = new EventEmitter();
|
|
222
|
+
this.elementRef = element;
|
|
223
|
+
}
|
|
224
|
+
/**
|
|
225
|
+
* Create and append the underlying widget
|
|
226
|
+
*/
|
|
227
|
+
ngOnInit() {
|
|
228
|
+
const me = this, { elementRef, bryntumConfig } = me, { instanceClass, instanceName, bryntumConfigs, bryntumEvents } = BryntumTaskBoardProjectModelComponent;
|
|
229
|
+
bryntumConfigs.filter(prop => prop in this).forEach(prop => {
|
|
230
|
+
// @ts-ignore
|
|
231
|
+
WrapperHelper.applyPropValue(bryntumConfig, prop, this[prop]);
|
|
232
|
+
if (['features', 'config'].includes(prop)) {
|
|
233
|
+
WrapperHelper.devWarningConfigProp(instanceName, prop);
|
|
234
|
+
}
|
|
235
|
+
});
|
|
236
|
+
// @ts-ignore
|
|
237
|
+
bryntumEvents.filter(event => this[event] && this[event].observers.length > 0).forEach(event => {
|
|
238
|
+
const uncapitalize = (str) => str.charAt(0).toLowerCase() + str.slice(1), eventName = (str) => uncapitalize(str.slice(2));
|
|
239
|
+
// @ts-ignore
|
|
240
|
+
bryntumConfig.listeners[eventName(event)] = e => {
|
|
241
|
+
// @ts-ignore
|
|
242
|
+
me[event].emit(e);
|
|
243
|
+
// EventEmitter does not return values in the normal way, work around it by setting `returnValue` flag
|
|
244
|
+
// in Angular listeners
|
|
245
|
+
return e.returnValue;
|
|
246
|
+
};
|
|
247
|
+
});
|
|
248
|
+
// If component has no container specified in config then use adopt to Wrapper's element
|
|
249
|
+
const containerParam = [
|
|
250
|
+
'adopt',
|
|
251
|
+
'appendTo',
|
|
252
|
+
'insertAfter',
|
|
253
|
+
'insertBefore'
|
|
254
|
+
// @ts-ignore
|
|
255
|
+
].find(prop => bryntumConfig[prop]);
|
|
256
|
+
if (!containerParam) {
|
|
257
|
+
if (instanceName === 'Button' || elementRef.nativeElement.getRootNode() instanceof ShadowRoot) {
|
|
258
|
+
// Button should always be <a> or <button> inside owner element
|
|
259
|
+
bryntumConfig.appendTo = elementRef.nativeElement;
|
|
260
|
+
}
|
|
261
|
+
else {
|
|
262
|
+
bryntumConfig.adopt = elementRef.nativeElement;
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
else {
|
|
266
|
+
WrapperHelper.devWarningContainer(instanceName, containerParam);
|
|
267
|
+
}
|
|
268
|
+
// @ts-ignore
|
|
269
|
+
me.instance = instanceName === 'Widget' ? Widget.create(bryntumConfig) : new instanceClass(bryntumConfig);
|
|
270
|
+
}
|
|
271
|
+
/**
|
|
272
|
+
* Watch for changes
|
|
273
|
+
* @param changes
|
|
274
|
+
*/
|
|
275
|
+
ngOnChanges(changes) {
|
|
276
|
+
const { instance } = this, { instanceName } = BryntumTaskBoardProjectModelComponent;
|
|
277
|
+
if (!instance) {
|
|
278
|
+
return;
|
|
279
|
+
}
|
|
280
|
+
// Iterate over all changes
|
|
281
|
+
Object.entries(changes).forEach(([prop, change]) => {
|
|
282
|
+
const newValue = change.currentValue, { instance } = this, { bryntumConfigsOnly, bryntumProps } = BryntumTaskBoardProjectModelComponent;
|
|
283
|
+
if (bryntumProps.includes(prop)) {
|
|
284
|
+
WrapperHelper.applyPropValue(instance, prop, newValue, false);
|
|
285
|
+
if (bryntumConfigsOnly.includes(prop)) {
|
|
286
|
+
WrapperHelper.devWarningUpdateProp(instanceName, prop);
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
});
|
|
290
|
+
}
|
|
291
|
+
/**
|
|
292
|
+
* Destroy the component
|
|
293
|
+
*/
|
|
294
|
+
ngOnDestroy() {
|
|
295
|
+
// @ts-ignore
|
|
296
|
+
if (this.instance && this.instance.destroy) {
|
|
297
|
+
this.instance.destroy();
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
BryntumTaskBoardProjectModelComponent.instanceClass = ProjectModel;
|
|
302
|
+
BryntumTaskBoardProjectModelComponent.instanceName = 'ProjectModel';
|
|
303
|
+
BryntumTaskBoardProjectModelComponent.bryntumEvents = [
|
|
304
|
+
'onBeforeDestroy',
|
|
305
|
+
'onBeforeLoad',
|
|
306
|
+
'onBeforeLoadApply',
|
|
307
|
+
'onBeforeResponseApply',
|
|
308
|
+
'onBeforeSend',
|
|
309
|
+
'onBeforeSync',
|
|
310
|
+
'onBeforeSyncApply',
|
|
311
|
+
'onCatchAll',
|
|
312
|
+
'onChange',
|
|
313
|
+
'onDataReady',
|
|
314
|
+
'onDestroy',
|
|
315
|
+
'onHasChanges',
|
|
316
|
+
'onLoad',
|
|
317
|
+
'onLoadCanceled',
|
|
318
|
+
'onLoadFail',
|
|
319
|
+
'onNoChanges',
|
|
320
|
+
'onRequestDone',
|
|
321
|
+
'onRequestFail',
|
|
322
|
+
'onSync',
|
|
323
|
+
'onSyncCanceled',
|
|
324
|
+
'onSyncDelayed',
|
|
325
|
+
'onSyncFail'
|
|
326
|
+
];
|
|
327
|
+
BryntumTaskBoardProjectModelComponent.bryntumFeatureNames = [];
|
|
328
|
+
BryntumTaskBoardProjectModelComponent.bryntumConfigs = BryntumTaskBoardProjectModelComponent.bryntumFeatureNames.concat([
|
|
329
|
+
'adjustDurationToDST',
|
|
330
|
+
'assignmentModelClass',
|
|
331
|
+
'assignments',
|
|
332
|
+
'assignmentsData',
|
|
333
|
+
'assignmentStore',
|
|
334
|
+
'assignmentStoreClass',
|
|
335
|
+
'autoLoad',
|
|
336
|
+
'autoSync',
|
|
337
|
+
'autoSyncTimeout',
|
|
338
|
+
'bubbleEvents',
|
|
339
|
+
'callOnFunctions',
|
|
340
|
+
'catchEventHandlerExceptions',
|
|
341
|
+
'children',
|
|
342
|
+
'crudStores',
|
|
343
|
+
'dependencies',
|
|
344
|
+
'dependenciesData',
|
|
345
|
+
'dependencyModelClass',
|
|
346
|
+
'dependencyStore',
|
|
347
|
+
'dependencyStoreClass',
|
|
348
|
+
'encoder',
|
|
349
|
+
'events',
|
|
350
|
+
'eventsData',
|
|
351
|
+
'eventStore',
|
|
352
|
+
'expanded',
|
|
353
|
+
'forceSync',
|
|
354
|
+
'id',
|
|
355
|
+
'ignoreRemoteChangesInSTM',
|
|
356
|
+
'includeChildrenInRemoveRequest',
|
|
357
|
+
'includeLegacyDataProperties',
|
|
358
|
+
'isFullyLoaded',
|
|
359
|
+
'json',
|
|
360
|
+
'listeners',
|
|
361
|
+
'loadUrl',
|
|
362
|
+
'orderedParentIndex',
|
|
363
|
+
'parentId',
|
|
364
|
+
'parentIndex',
|
|
365
|
+
'phantomIdField',
|
|
366
|
+
'phantomParentIdField',
|
|
367
|
+
'readOnly',
|
|
368
|
+
'remoteChildCount',
|
|
369
|
+
'resetIdsBeforeSync',
|
|
370
|
+
'resourceModelClass',
|
|
371
|
+
'resources',
|
|
372
|
+
'resourcesData',
|
|
373
|
+
'resourceStore',
|
|
374
|
+
'resourceStoreClass',
|
|
375
|
+
'shouldSyncDataOnLoad',
|
|
376
|
+
'silenceInitialCommit',
|
|
377
|
+
'skipSuccessProperty',
|
|
378
|
+
'stm',
|
|
379
|
+
'storeIdProperty',
|
|
380
|
+
'supportShortSyncResponse',
|
|
381
|
+
'syncApplySequence',
|
|
382
|
+
'syncUrl',
|
|
383
|
+
'taskModelClass',
|
|
384
|
+
'tasks',
|
|
385
|
+
'tasksData',
|
|
386
|
+
'taskStore',
|
|
387
|
+
'taskStoreClass',
|
|
388
|
+
'timeZone',
|
|
389
|
+
'toJSONResultFormat',
|
|
390
|
+
'trackResponseType',
|
|
391
|
+
'transport',
|
|
392
|
+
'useRawData',
|
|
393
|
+
'validateResponse',
|
|
394
|
+
'writeAllFields'
|
|
395
|
+
]);
|
|
396
|
+
BryntumTaskBoardProjectModelComponent.bryntumConfigsOnly = [
|
|
397
|
+
'adjustDurationToDST',
|
|
398
|
+
'assignmentModelClass',
|
|
399
|
+
'assignmentsData',
|
|
400
|
+
'assignmentStoreClass',
|
|
401
|
+
'autoLoad',
|
|
402
|
+
'autoSync',
|
|
403
|
+
'autoSyncTimeout',
|
|
404
|
+
'bubbleEvents',
|
|
405
|
+
'children',
|
|
406
|
+
'dependenciesData',
|
|
407
|
+
'dependencyModelClass',
|
|
408
|
+
'dependencyStoreClass',
|
|
409
|
+
'encoder',
|
|
410
|
+
'eventsData',
|
|
411
|
+
'expanded',
|
|
412
|
+
'ignoreRemoteChangesInSTM',
|
|
413
|
+
'includeChildrenInRemoveRequest',
|
|
414
|
+
'listeners',
|
|
415
|
+
'orderedParentIndex',
|
|
416
|
+
'parentIndex',
|
|
417
|
+
'phantomIdField',
|
|
418
|
+
'phantomParentIdField',
|
|
419
|
+
'resetIdsBeforeSync',
|
|
420
|
+
'resourceModelClass',
|
|
421
|
+
'resourcesData',
|
|
422
|
+
'resourceStoreClass',
|
|
423
|
+
'silenceInitialCommit',
|
|
424
|
+
'skipSuccessProperty',
|
|
425
|
+
'storeIdProperty',
|
|
426
|
+
'supportShortSyncResponse',
|
|
427
|
+
'taskModelClass',
|
|
428
|
+
'tasksData',
|
|
429
|
+
'taskStoreClass',
|
|
430
|
+
'toJSONResultFormat',
|
|
431
|
+
'trackResponseType',
|
|
432
|
+
'transport',
|
|
433
|
+
'useRawData',
|
|
434
|
+
'validateResponse',
|
|
435
|
+
'writeAllFields'
|
|
436
|
+
];
|
|
437
|
+
BryntumTaskBoardProjectModelComponent.bryntumProps = BryntumTaskBoardProjectModelComponent.bryntumFeatureNames.concat([
|
|
438
|
+
'allChildren',
|
|
439
|
+
'allUnfilteredChildren',
|
|
440
|
+
'assignments',
|
|
441
|
+
'assignmentStore',
|
|
442
|
+
'callOnFunctions',
|
|
443
|
+
'catchEventHandlerExceptions',
|
|
444
|
+
'crudStores',
|
|
445
|
+
'dependencies',
|
|
446
|
+
'dependencyStore',
|
|
447
|
+
'descendantCount',
|
|
448
|
+
'events',
|
|
449
|
+
'eventStore',
|
|
450
|
+
'forceSync',
|
|
451
|
+
'hasGeneratedId',
|
|
452
|
+
'id',
|
|
453
|
+
'includeLegacyDataProperties',
|
|
454
|
+
'inlineData',
|
|
455
|
+
'internalId',
|
|
456
|
+
'isCommitting',
|
|
457
|
+
'isCreating',
|
|
458
|
+
'isFullyLoaded',
|
|
459
|
+
'isValid',
|
|
460
|
+
'json',
|
|
461
|
+
'loadUrl',
|
|
462
|
+
'parentId',
|
|
463
|
+
'previousSiblingsTotalCount',
|
|
464
|
+
'readOnly',
|
|
465
|
+
'remoteChildCount',
|
|
466
|
+
'resources',
|
|
467
|
+
'resourceStore',
|
|
468
|
+
'resourceTimeRanges',
|
|
469
|
+
'shouldSyncDataOnLoad',
|
|
470
|
+
'stm',
|
|
471
|
+
'syncApplySequence',
|
|
472
|
+
'syncUrl',
|
|
473
|
+
'tasks',
|
|
474
|
+
'taskStore',
|
|
475
|
+
'timeRanges',
|
|
476
|
+
'timeZone',
|
|
477
|
+
'visibleDescendantCount'
|
|
478
|
+
]);
|
|
479
|
+
BryntumTaskBoardProjectModelComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.0", ngImport: i0, type: BryntumTaskBoardProjectModelComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
480
|
+
BryntumTaskBoardProjectModelComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.0", type: BryntumTaskBoardProjectModelComponent, selector: "bryntum-task-board-project-model", inputs: { adjustDurationToDST: "adjustDurationToDST", assignmentModelClass: "assignmentModelClass", assignmentsData: "assignmentsData", assignmentStoreClass: "assignmentStoreClass", autoLoad: "autoLoad", autoSync: "autoSync", autoSyncTimeout: "autoSyncTimeout", bubbleEvents: "bubbleEvents", children: "children", dependenciesData: "dependenciesData", dependencyModelClass: "dependencyModelClass", dependencyStoreClass: "dependencyStoreClass", encoder: "encoder", eventsData: "eventsData", expanded: "expanded", ignoreRemoteChangesInSTM: "ignoreRemoteChangesInSTM", includeChildrenInRemoveRequest: "includeChildrenInRemoveRequest", listeners: "listeners", orderedParentIndex: "orderedParentIndex", parentIndex: "parentIndex", phantomIdField: "phantomIdField", phantomParentIdField: "phantomParentIdField", resetIdsBeforeSync: "resetIdsBeforeSync", resourceModelClass: "resourceModelClass", resourcesData: "resourcesData", resourceStoreClass: "resourceStoreClass", silenceInitialCommit: "silenceInitialCommit", skipSuccessProperty: "skipSuccessProperty", storeIdProperty: "storeIdProperty", supportShortSyncResponse: "supportShortSyncResponse", taskModelClass: "taskModelClass", tasksData: "tasksData", taskStoreClass: "taskStoreClass", toJSONResultFormat: "toJSONResultFormat", trackResponseType: "trackResponseType", transport: "transport", useRawData: "useRawData", validateResponse: "validateResponse", writeAllFields: "writeAllFields", assignments: "assignments", assignmentStore: "assignmentStore", callOnFunctions: "callOnFunctions", catchEventHandlerExceptions: "catchEventHandlerExceptions", crudStores: "crudStores", dependencies: "dependencies", dependencyStore: "dependencyStore", events: "events", eventStore: "eventStore", forceSync: "forceSync", id: "id", includeLegacyDataProperties: "includeLegacyDataProperties", isFullyLoaded: "isFullyLoaded", json: "json", loadUrl: "loadUrl", parentId: "parentId", readOnly: "readOnly", remoteChildCount: "remoteChildCount", resources: "resources", resourceStore: "resourceStore", shouldSyncDataOnLoad: "shouldSyncDataOnLoad", stm: "stm", syncApplySequence: "syncApplySequence", syncUrl: "syncUrl", tasks: "tasks", taskStore: "taskStore", timeZone: "timeZone", allChildren: "allChildren", allUnfilteredChildren: "allUnfilteredChildren", descendantCount: "descendantCount", hasGeneratedId: "hasGeneratedId", inlineData: "inlineData", internalId: "internalId", isCommitting: "isCommitting", isCreating: "isCreating", isValid: "isValid", previousSiblingsTotalCount: "previousSiblingsTotalCount", resourceTimeRanges: "resourceTimeRanges", timeRanges: "timeRanges", visibleDescendantCount: "visibleDescendantCount" }, outputs: { onBeforeDestroy: "onBeforeDestroy", onBeforeLoad: "onBeforeLoad", onBeforeLoadApply: "onBeforeLoadApply", onBeforeResponseApply: "onBeforeResponseApply", onBeforeSend: "onBeforeSend", onBeforeSync: "onBeforeSync", onBeforeSyncApply: "onBeforeSyncApply", onCatchAll: "onCatchAll", onChange: "onChange", onDataReady: "onDataReady", onDestroy: "onDestroy", onHasChanges: "onHasChanges", onLoad: "onLoad", onLoadCanceled: "onLoadCanceled", onLoadFail: "onLoadFail", onNoChanges: "onNoChanges", onRequestDone: "onRequestDone", onRequestFail: "onRequestFail", onSync: "onSync", onSyncCanceled: "onSyncCanceled", onSyncDelayed: "onSyncDelayed", onSyncFail: "onSyncFail" }, usesOnChanges: true, ngImport: i0, template: '', isInline: true });
|
|
481
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.0", ngImport: i0, type: BryntumTaskBoardProjectModelComponent, decorators: [{
|
|
482
|
+
type: Component,
|
|
483
|
+
args: [{
|
|
484
|
+
selector: 'bryntum-task-board-project-model',
|
|
485
|
+
template: ''
|
|
486
|
+
}]
|
|
487
|
+
}], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { adjustDurationToDST: [{
|
|
488
|
+
type: Input
|
|
489
|
+
}], assignmentModelClass: [{
|
|
490
|
+
type: Input
|
|
491
|
+
}], assignmentsData: [{
|
|
492
|
+
type: Input
|
|
493
|
+
}], assignmentStoreClass: [{
|
|
494
|
+
type: Input
|
|
495
|
+
}], autoLoad: [{
|
|
496
|
+
type: Input
|
|
497
|
+
}], autoSync: [{
|
|
498
|
+
type: Input
|
|
499
|
+
}], autoSyncTimeout: [{
|
|
500
|
+
type: Input
|
|
501
|
+
}], bubbleEvents: [{
|
|
502
|
+
type: Input
|
|
503
|
+
}], children: [{
|
|
504
|
+
type: Input
|
|
505
|
+
}], dependenciesData: [{
|
|
506
|
+
type: Input
|
|
507
|
+
}], dependencyModelClass: [{
|
|
508
|
+
type: Input
|
|
509
|
+
}], dependencyStoreClass: [{
|
|
510
|
+
type: Input
|
|
511
|
+
}], encoder: [{
|
|
512
|
+
type: Input
|
|
513
|
+
}], eventsData: [{
|
|
514
|
+
type: Input
|
|
515
|
+
}], expanded: [{
|
|
516
|
+
type: Input
|
|
517
|
+
}], ignoreRemoteChangesInSTM: [{
|
|
518
|
+
type: Input
|
|
519
|
+
}], includeChildrenInRemoveRequest: [{
|
|
520
|
+
type: Input
|
|
521
|
+
}], listeners: [{
|
|
522
|
+
type: Input
|
|
523
|
+
}], orderedParentIndex: [{
|
|
524
|
+
type: Input
|
|
525
|
+
}], parentIndex: [{
|
|
526
|
+
type: Input
|
|
527
|
+
}], phantomIdField: [{
|
|
528
|
+
type: Input
|
|
529
|
+
}], phantomParentIdField: [{
|
|
530
|
+
type: Input
|
|
531
|
+
}], resetIdsBeforeSync: [{
|
|
532
|
+
type: Input
|
|
533
|
+
}], resourceModelClass: [{
|
|
534
|
+
type: Input
|
|
535
|
+
}], resourcesData: [{
|
|
536
|
+
type: Input
|
|
537
|
+
}], resourceStoreClass: [{
|
|
538
|
+
type: Input
|
|
539
|
+
}], silenceInitialCommit: [{
|
|
540
|
+
type: Input
|
|
541
|
+
}], skipSuccessProperty: [{
|
|
542
|
+
type: Input
|
|
543
|
+
}], storeIdProperty: [{
|
|
544
|
+
type: Input
|
|
545
|
+
}], supportShortSyncResponse: [{
|
|
546
|
+
type: Input
|
|
547
|
+
}], taskModelClass: [{
|
|
548
|
+
type: Input
|
|
549
|
+
}], tasksData: [{
|
|
550
|
+
type: Input
|
|
551
|
+
}], taskStoreClass: [{
|
|
552
|
+
type: Input
|
|
553
|
+
}], toJSONResultFormat: [{
|
|
554
|
+
type: Input
|
|
555
|
+
}], trackResponseType: [{
|
|
556
|
+
type: Input
|
|
557
|
+
}], transport: [{
|
|
558
|
+
type: Input
|
|
559
|
+
}], useRawData: [{
|
|
560
|
+
type: Input
|
|
561
|
+
}], validateResponse: [{
|
|
562
|
+
type: Input
|
|
563
|
+
}], writeAllFields: [{
|
|
564
|
+
type: Input
|
|
565
|
+
}], assignments: [{
|
|
566
|
+
type: Input
|
|
567
|
+
}], assignmentStore: [{
|
|
568
|
+
type: Input
|
|
569
|
+
}], callOnFunctions: [{
|
|
570
|
+
type: Input
|
|
571
|
+
}], catchEventHandlerExceptions: [{
|
|
572
|
+
type: Input
|
|
573
|
+
}], crudStores: [{
|
|
574
|
+
type: Input
|
|
575
|
+
}], dependencies: [{
|
|
576
|
+
type: Input
|
|
577
|
+
}], dependencyStore: [{
|
|
578
|
+
type: Input
|
|
579
|
+
}], events: [{
|
|
580
|
+
type: Input
|
|
581
|
+
}], eventStore: [{
|
|
582
|
+
type: Input
|
|
583
|
+
}], forceSync: [{
|
|
584
|
+
type: Input
|
|
585
|
+
}], id: [{
|
|
586
|
+
type: Input
|
|
587
|
+
}], includeLegacyDataProperties: [{
|
|
588
|
+
type: Input
|
|
589
|
+
}], isFullyLoaded: [{
|
|
590
|
+
type: Input
|
|
591
|
+
}], json: [{
|
|
592
|
+
type: Input
|
|
593
|
+
}], loadUrl: [{
|
|
594
|
+
type: Input
|
|
595
|
+
}], parentId: [{
|
|
596
|
+
type: Input
|
|
597
|
+
}], readOnly: [{
|
|
598
|
+
type: Input
|
|
599
|
+
}], remoteChildCount: [{
|
|
600
|
+
type: Input
|
|
601
|
+
}], resources: [{
|
|
602
|
+
type: Input
|
|
603
|
+
}], resourceStore: [{
|
|
604
|
+
type: Input
|
|
605
|
+
}], shouldSyncDataOnLoad: [{
|
|
606
|
+
type: Input
|
|
607
|
+
}], stm: [{
|
|
608
|
+
type: Input
|
|
609
|
+
}], syncApplySequence: [{
|
|
610
|
+
type: Input
|
|
611
|
+
}], syncUrl: [{
|
|
612
|
+
type: Input
|
|
613
|
+
}], tasks: [{
|
|
614
|
+
type: Input
|
|
615
|
+
}], taskStore: [{
|
|
616
|
+
type: Input
|
|
617
|
+
}], timeZone: [{
|
|
618
|
+
type: Input
|
|
619
|
+
}], allChildren: [{
|
|
620
|
+
type: Input
|
|
621
|
+
}], allUnfilteredChildren: [{
|
|
622
|
+
type: Input
|
|
623
|
+
}], descendantCount: [{
|
|
624
|
+
type: Input
|
|
625
|
+
}], hasGeneratedId: [{
|
|
626
|
+
type: Input
|
|
627
|
+
}], inlineData: [{
|
|
628
|
+
type: Input
|
|
629
|
+
}], internalId: [{
|
|
630
|
+
type: Input
|
|
631
|
+
}], isCommitting: [{
|
|
632
|
+
type: Input
|
|
633
|
+
}], isCreating: [{
|
|
634
|
+
type: Input
|
|
635
|
+
}], isValid: [{
|
|
636
|
+
type: Input
|
|
637
|
+
}], previousSiblingsTotalCount: [{
|
|
638
|
+
type: Input
|
|
639
|
+
}], resourceTimeRanges: [{
|
|
640
|
+
type: Input
|
|
641
|
+
}], timeRanges: [{
|
|
642
|
+
type: Input
|
|
643
|
+
}], visibleDescendantCount: [{
|
|
644
|
+
type: Input
|
|
645
|
+
}], onBeforeDestroy: [{
|
|
646
|
+
type: Output
|
|
647
|
+
}], onBeforeLoad: [{
|
|
648
|
+
type: Output
|
|
649
|
+
}], onBeforeLoadApply: [{
|
|
650
|
+
type: Output
|
|
651
|
+
}], onBeforeResponseApply: [{
|
|
652
|
+
type: Output
|
|
653
|
+
}], onBeforeSend: [{
|
|
654
|
+
type: Output
|
|
655
|
+
}], onBeforeSync: [{
|
|
656
|
+
type: Output
|
|
657
|
+
}], onBeforeSyncApply: [{
|
|
658
|
+
type: Output
|
|
659
|
+
}], onCatchAll: [{
|
|
660
|
+
type: Output
|
|
661
|
+
}], onChange: [{
|
|
662
|
+
type: Output
|
|
663
|
+
}], onDataReady: [{
|
|
664
|
+
type: Output
|
|
665
|
+
}], onDestroy: [{
|
|
666
|
+
type: Output
|
|
667
|
+
}], onHasChanges: [{
|
|
668
|
+
type: Output
|
|
669
|
+
}], onLoad: [{
|
|
670
|
+
type: Output
|
|
671
|
+
}], onLoadCanceled: [{
|
|
672
|
+
type: Output
|
|
673
|
+
}], onLoadFail: [{
|
|
674
|
+
type: Output
|
|
675
|
+
}], onNoChanges: [{
|
|
676
|
+
type: Output
|
|
677
|
+
}], onRequestDone: [{
|
|
678
|
+
type: Output
|
|
679
|
+
}], onRequestFail: [{
|
|
680
|
+
type: Output
|
|
681
|
+
}], onSync: [{
|
|
682
|
+
type: Output
|
|
683
|
+
}], onSyncCanceled: [{
|
|
684
|
+
type: Output
|
|
685
|
+
}], onSyncDelayed: [{
|
|
686
|
+
type: Output
|
|
687
|
+
}], onSyncFail: [{
|
|
688
|
+
type: Output
|
|
689
|
+
}] } });
|
|
690
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJ5bnR1bS10YXNrLWJvYXJkLXByb2plY3QtbW9kZWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vY29tcG9uZW50L3NyYy9saWIvYnJ5bnR1bS10YXNrLWJvYXJkLXByb2plY3QtbW9kZWwuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHNEQUFzRDtBQUN0RDs7R0FFRztBQUVILE9BQU8sRUFBRSxTQUFTLEVBQWMsWUFBWSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQWtELE1BQU0sZUFBZSxDQUFDO0FBRW5JLE9BQU8sYUFBYSxNQUFNLGtCQUFrQixDQUFDO0FBRTdDLE9BQU8sRUFBeVMsWUFBWSxFQUFrVixNQUFNLG9CQUFvQixDQUFDOztBQStaenFCLE1BQU0sT0FBTyxxQ0FBcUM7SUF5TTlDLFlBQVksT0FBbUI7UUFUdkIsa0JBQWEsR0FBRztZQUNwQixLQUFLLEVBQWMsU0FBUztZQUM1QixRQUFRLEVBQVcsU0FBUztZQUM1QixJQUFJLEVBQWUsU0FBUztZQUM1QixnQkFBZ0IsRUFBRyxJQUFJO1lBQ3ZCLFFBQVEsRUFBVyxFQUFFO1lBQ3JCLFNBQVMsRUFBVSxFQUFFO1NBQ3hCLENBQUM7UUFnR0Ysa0JBQWtCO1FBQ2xCOzs7O1dBSUc7UUFDTyxvQkFBZSxHQUFRLElBQUksWUFBWSxFQUE4QyxDQUFDO1FBQ2hHOzs7OztXQUtHO1FBQ08saUJBQVksR0FBUSxJQUFJLFlBQVksRUFBb0csQ0FBQztRQUNuSjs7Ozs7OztXQU9HO1FBQ08sc0JBQWlCLEdBQVEsSUFBSSxZQUFZLEVBQXlILENBQUM7UUFDN0s7Ozs7Ozs7V0FPRztRQUNPLDBCQUFxQixHQUFRLElBQUksWUFBWSxFQUFvSSxDQUFDO1FBQzVMOzs7Ozs7Ozs7V0FTRztRQUNPLGlCQUFZLEdBQVEsSUFBSSxZQUFZLEVBQThJLENBQUM7UUFDN0w7Ozs7Ozs7V0FPRztRQUNPLGlCQUFZLEdBQVEsSUFBSSxZQUFZLEVBQW9HLENB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dGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnMgKi9cbi8qKlxuICogQW5ndWxhciB3cmFwcGVyIGZvciBCcnludHVtIFByb2plY3RNb2RlbFxuICovXG5cbmltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBPdXRwdXQsIElucHV0LCBTaW1wbGVDaGFuZ2UsIFNpbXBsZUNoYW5nZXMsIE9uRGVzdHJveSwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCBXcmFwcGVySGVscGVyIGZyb20gJy4vd3JhcHBlci5oZWxwZXInO1xuXG5pbXBvcnQgeyBBYnN0cmFjdENydWRNYW5hZ2VyLCBBc3NpZ25tZW50TW9kZWwsIEFzc2lnbm1lbnRNb2RlbENvbmZpZywgQXNzaWdubWVudFN0b3JlLCBBc3NpZ25tZW50U3RvcmVDb25maWcsIEJhc2UsIENydWRNYW5hZ2VyU3RvcmVEZXNjcmlwdG9yLCBEZXBlbmRlbmN5TW9kZWwsIERlcGVuZGVuY3lNb2RlbENvbmZpZywgRGVwZW5kZW5jeVN0b3JlLCBEZXBlbmRlbmN5U3RvcmVDb25maWcsIEV2ZW50TW9kZWwsIEV2ZW50TW9kZWxDb25maWcsIEV2ZW50U3RvcmUsIEV2ZW50U3RvcmVDb25maWcsIE1vZGVsLCBNb2RlbENvbmZpZywgUHJvamVjdE1vZGVsLCBQcm9qZWN0TW9kZWxMaXN0ZW5lcnMsIFJlc291cmNlTW9kZWwsIFJlc291cmNlTW9kZWxDb25maWcsIFJlc291cmNlU3RvcmUsIFJlc291cmNlU3RvcmVDb25maWcsIFJlc291cmNlVGltZVJhbmdlTW9kZWwsIFJlc291cmNlVGltZVJhbmdlTW9kZWxDb25maWcsIFNjaGVkdWxlclByb2plY3RNb2RlbCwgU3RhdGVUcmFja2luZ01hbmFnZXIsIFN0YXRlVHJhY2tpbmdNYW5hZ2VyQ29uZmlnLCBTdG9yZSwgU3RvcmVDb25maWcsIFRhc2tNb2RlbCwgVGFza01vZGVsQ29uZmlnLCBUYXNrU3RvcmUsIFRhc2tTdG9yZUNvbmZpZywgVGltZVJhbmdlTW9kZWwsIFRpbWVSYW5nZU1vZGVsQ29uZmlnIH0gZnJvbSAnQGJyeW50dW0vdGFza2JvYXJkJztcblxuaW1wb3J0IHsgU3RyaW5nSGVscGVyIH0gZnJvbSAnQGJyeW50dW0vdGFza2JvYXJkJztcblxuZXhwb3J0IHR5cGUgQnJ5bnR1bVRhc2tCb2FyZFByb2plY3RNb2RlbFByb3BzID0ge1xuICAgIC8vIENvbmZpZ3NcbiAgICAvKipcbiAgICAgKiBBIGZsYWcsIGluZGljYXRpbmcgd2hldGhlciB0aGUgZGF0ZXMgYW5kIGR1cmF0aW9uIGNhbGN1bGF0aW9ucyBzaG91bGQgYWRqdXN0IHRoZSByZXN1bHQgdG8gRFNUIHRpbWUgc2hpZnQuXG4gICAgICovXG4gICAgYWRqdXN0RHVyYXRpb25Ub0RTVCA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIFRoZSBjb25zdHJ1Y3RvciBvZiB0aGUgYXNzaWdubWVudCBtb2RlbCBjbGFzcywgdG8gYmUgdXNlZCBpbiB0aGUgcHJvamVjdC4gV2lsbCBiZSBzZXQgYXMgdGhlXG4gICAgICogW21vZGVsQ2xhc3NdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvdGFza2JvYXJkL2RvY3MvYXBpL0NvcmUvZGF0YS9TdG9yZSNjb25maWctbW9kZWxDbGFzcykgcHJvcGVydHkgb2YgdGhlIFthc3NpZ25tZW50U3RvcmVdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvc2NoZWR1bGVyL2RvY3MjU2NoZWR1bGVyL21vZGVsL1Byb2plY3RNb2RlbCNwcm9wZXJ0eS1hc3NpZ25tZW50U3RvcmUpXG4gICAgICovXG4gICAgYXNzaWdubWVudE1vZGVsQ2xhc3MgPyA6IHR5cGVvZiBBc3NpZ25tZW50TW9kZWxcbiAgICAvKipcbiAgICAgKiBEYXRhIHVzZSB0byBmaWxsIHRoZSBbYXNzaWdubWVudFN0b3JlXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3NjaGVkdWxlci9kb2NzI1NjaGVkdWxlci9tb2RlbC9Qcm9qZWN0TW9kZWwjcHJvcGVydHktYXNzaWdubWVudFN0b3JlKS4gU2hvdWxkIGJlIGFuIGFycmF5IG9mXG4gICAgICogW0Fzc2lnbm1lbnRNb2RlbHNdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvc2NoZWR1bGVyL2RvY3MjU2NoZWR1bGVyL21vZGVsL0Fzc2lnbm1lbnRNb2RlbCkgb3IgaXRzIGNvbmZpZ3VyYXRpb24gb2JqZWN0cy5cbiAgICAgKi9cbiAgICBhc3NpZ25tZW50cyA/IDogQXNzaWdubWVudE1vZGVsW118QXNzaWdubWVudE1vZGVsQ29uZmlnW11cbiAgICAvKipcbiAgICAgKiBUaGUgaW5pdGlhbCBkYXRhLCB0byBmaWxsIHRoZSBbYXNzaWdubWVudFN0b3JlXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3NjaGVkdWxlci9kb2NzI1NjaGVkdWxlci9tb2RlbC9Qcm9qZWN0TW9kZWwjcHJvcGVydHktYXNzaWdubWVudFN0b3JlKSB3aXRoLlxuICAgICAqIFNob3VsZCBiZSBhbiBhcnJheSBvZiBbQXNzaWdubWVudE1vZGVsc10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9zY2hlZHVsZXIvZG9jcyNTY2hlZHVsZXIvbW9kZWwvQXNzaWdubWVudE1vZGVsKSBvciBpdHMgY29uZmlndXJhdGlvblxuICAgICAqIG9iamVjdHMuXG4gICAgICogQGRlcHJlY2F0ZWQgNi4zLjAgVXNlIFthc3NpZ25tZW50c10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9zY2hlZHVsZXIvZG9jcyNTY2hlZHVsZXIvbW9kZWwvUHJvamVjdE1vZGVsI2NvbmZpZy1hc3NpZ25tZW50cykgaW5zdGVhZFxuICAgICAqL1xuICAgIGFzc2lnbm1lbnRzRGF0YSA/IDogQXNzaWdubWVudE1vZGVsW118QXNzaWdubWVudE1vZGVsQ29uZmlnW11cbiAgICAvKipcbiAgICAgKiBBbiBbQXNzaWdubWVudFN0b3JlXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3NjaGVkdWxlci9kb2NzI1NjaGVkdWxlci9kYXRhL0Fzc2lnbm1lbnRTdG9yZSkgaW5zdGFuY2Ugb3IgYSBjb25maWcgb2JqZWN0LlxuICAgICAqL1xuICAgIGFzc2lnbm1lbnRTdG9yZSA/IDogQXNzaWdubWVudFN0b3JlfEFzc2lnbm1lbnRTdG9yZUNvbmZpZ1xuICAgIC8qKlxuICAgICAqIFRoZSBjb25zdHJ1Y3RvciB0byBjcmVhdGUgYW4gYXNzaWdubWVudCBzdG9yZSBpbnN0YW5jZSB3aXRoLiBTaG91bGQgYmUgYSBjbGFzcywgc3ViY2xhc3NpbmcgdGhlXG4gICAgICogW0Fzc2lnbm1lbnRTdG9yZV0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9zY2hlZHVsZXIvZG9jcyNTY2hlZHVsZXIvZGF0YS9Bc3NpZ25tZW50U3RvcmUpXG4gICAgICovXG4gICAgYXNzaWdubWVudFN0b3JlQ2xhc3MgPyA6IHR5cGVvZiBBc3NpZ25tZW50U3RvcmV8b2JqZWN0XG4gICAgLyoqXG4gICAgICogU3BlY2lmeSBgdHJ1ZWAgdG8gYXV0b21hdGljYWxseSBjYWxsIFtsb2FkXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3NjaGVkdWxlci9kb2NzI1NjaGVkdWxlci9jcnVkL0Fic3RyYWN0Q3J1ZE1hbmFnZXJNaXhpbiNmdW5jdGlvbi1sb2FkKSBtZXRob2Qgb24gdGhlIG5leHQgZnJhbWUgYWZ0ZXIgY3JlYXRpb24uXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvdGFza2JvYXJkL2RvY3MvYXBpL1Rhc2tCb2FyZC9tb2RlbC9Qcm9qZWN0TW9kZWwjY29uZmlnLWF1dG9Mb2FkKVxuICAgICAqL1xuICAgIGF1dG9Mb2FkID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogYHRydWVgIHRvIGF1dG9tYXRpY2FsbHkgcGVyc2lzdCBzdG9yZSBjaGFuZ2VzIGFmdGVyIGVkaXRzIGFyZSBtYWRlIGluIGFueSBvZiB0aGUgc3RvcmVzIG1vbml0b3JlZC5cbiAgICAgKiBQbGVhc2Ugbm90ZSB0aGF0IHN5bmMgcmVxdWVzdCB3aWxsIG5vdCBiZSBpbnZva2VkIGltbWVkaWF0ZWx5IGJ1dCBvbmx5IGFmdGVyXG4gICAgICogW2F1dG9TeW5jVGltZW91dF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9zY2hlZHVsZXIvZG9jcyNTY2hlZHVsZXIvY3J1ZC9BYnN0cmFjdENydWRNYW5hZ2VyTWl4aW4jY29uZmlnLWF1dG9TeW5jVGltZW91dCkgaW50ZXJ2YWwuXG4gICAgICovXG4gICAgYXV0b1N5bmMgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBUaGUgdGltZW91dCBpbiBtaWxsaXNlY29uZHMgdG8gd2FpdCBiZWZvcmUgcGVyc2lzdGluZyBjaGFuZ2VzIHRvIHRoZSBzZXJ2ZXIuXG4gICAgICogVXNlZCB3aGVuIFthdXRvU3luY10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9zY2hlZHVsZXIvZG9jcyNTY2hlZHVsZXIvY3J1ZC9BYnN0cmFjdENydWRNYW5hZ2VyTWl4aW4jY29uZmlnLWF1dG9TeW5jKSBpcyBzZXQgdG8gYHRydWVgLlxuICAgICAqL1xuICAgIGF1dG9TeW5jVGltZW91dCA/IDogbnVtYmVyXG4gICAgLyoqXG4gICAgICogQW4gb2JqZWN0IHdoZXJlIHByb3BlcnR5IG5hbWVzIHdpdGggYSB0cnV0aHkgdmFsdWUgaW5kaWNhdGUgd2hpY2ggZXZlbnRzIHNob3VsZCBidWJibGUgdXAgdGhlIG93bmVyc2hpcFxuICAgICAqIGhpZXJhcmNoeSB3aGVuIHRyaWdnZXJlZC5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy90YXNrYm9hcmQvZG9jcy9hcGkvVGFza0JvYXJkL21vZGVsL1Byb2plY3RNb2RlbCNjb25maWctYnViYmxlRXZlbnRzKVxuICAgICAqL1xuICAgIGJ1YmJsZUV2ZW50cyA/IDogb2JqZWN0XG4gICAgLyoqXG4gICAgICogU2V0IHRvIGB0cnVlYCB0byBjYWxsIG9uWFhYIG1ldGhvZCBuYW1lcyAoZS5nLiBgb25TaG93YCwgYG9uQ2xpY2tgKSwgYXMgYW4gZWFzeSB3YXkgdG8gbGlzdGVuIGZvciBldmVudHMuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvdGFza2JvYXJkL2RvY3MvYXBpL1Rhc2tCb2FyZC9tb2RlbC9Qcm9qZWN0TW9kZWwjY29uZmlnLWNhbGxPbkZ1bmN0aW9ucylcbiAgICAgKi9cbiAgICBjYWxsT25GdW5jdGlvbnMgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBCeSBkZWZhdWx0LCBpZiBhbiBldmVudCBoYW5kbGVyIHRocm93cyBhbiBleGNlcHRpb24sIHRoZSBlcnJvciBwcm9wYWdhdGVzIHVwIHRoZSBzdGFjayBhbmQgdGhlXG4gICAgICogYXBwbGljYXRpb24gc3RhdGUgaXMgdW5kZWZpbmVkLiBDb2RlIHdoaWNoIGZvbGxvd3MgdGhlIGV2ZW50IGhhbmRsZXIgd2lsbCAqbm90KiBiZSBleGVjdXRlZC5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy90YXNrYm9hcmQvZG9jcy9hcGkvVGFza0JvYXJkL21vZGVsL1Byb2plY3RNb2RlbCNjb25maWctY2F0Y2hFdmVudEhhbmRsZXJFeGNlcHRpb25zKVxuICAgICAqL1xuICAgIGNhdGNoRXZlbnRIYW5kbGVyRXhjZXB0aW9ucyA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIENoaWxkIG5vZGVzLiBUbyBhbGxvdyBsb2FkaW5nIGNoaWxkcmVuIG9uIGRlbWFuZCwgc3BlY2lmeSBgY2hpbGRyZW4gOiB0cnVlYCBpbiB5b3VyIGRhdGEuIE9taXQgdGhlIGZpZWxkIGZvciBsZWFmXG4gICAgICogdGFza3MuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvdGFza2JvYXJkL2RvY3MvYXBpL1Rhc2tCb2FyZC9tb2RlbC9Qcm9qZWN0TW9kZWwjY29uZmlnLWNoaWxkcmVuKVxuICAgICAqL1xuICAgIGNoaWxkcmVuID8gOiBib29sZWFufG9iamVjdFtdfE1vZGVsW118TW9kZWxDb25maWdbXVxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGxpc3Qgb2Ygc3RvcmVzIGNvbnRyb2xsZWQgYnkgdGhlIENSVUQgbWFuYWdlci5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy90YXNrYm9hcmQvZG9jcy9hcGkvVGFza0JvYXJkL21vZGVsL1Byb2plY3RNb2RlbCNjb25maWctY3J1ZFN0b3JlcylcbiAgICAgKi9cbiAgICBjcnVkU3RvcmVzID8gOiBTdG9yZVtdfHN0cmluZ1tdfENydWRNYW5hZ2VyU3RvcmVEZXNjcmlwdG9yW118U3RvcmVDb25maWdbXVxuICAgIC8qKlxuICAgICAqIERhdGEgdXNlIHRvIGZpbGwgdGhlIFtkZXBlbmRlbmN5U3RvcmVdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvc2NoZWR1bGVyL2RvY3MjU2NoZWR1bGVyL21vZGVsL1Byb2plY3RNb2RlbCNwcm9wZXJ0eS1kZXBlbmRlbmN5U3RvcmUpLiBTaG91bGQgYmUgYW4gYXJyYXkgb2ZcbiAgICAgKiBbRGVwZW5kZW5jeU1vZGVsc10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9zY2hlZHVsZXIvZG9jcyNTY2hlZHVsZXIvbW9kZWwvRGVwZW5kZW5jeU1vZGVsKSBvciBpdHMgY29uZmlndXJhdGlvbiBvYmplY3RzLlxuICAgICAqL1xuICAgIGRlcGVuZGVuY2llcyA/IDogRGVwZW5kZW5jeU1vZGVsW118RGVwZW5kZW5jeU1vZGVsQ29uZmlnW11cbiAgICAvKipcbiAgICAgKiBUaGUgaW5pdGlhbCBkYXRhLCB0byBmaWxsIHRoZSBbZGVwZW5kZW5jeVN0b3JlXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3NjaGVkdWxlci9kb2NzI1NjaGVkdWxlci9tb2RlbC9Qcm9qZWN0TW9kZWwjcHJvcGVydHktZGVwZW5kZW5jeVN0b3JlKSB3aXRoLlxuICAgICAqIFNob3VsZCBiZSBhbiBhcnJheSBvZiBbRGVwZW5kZW5jeU1vZGVsc10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9zY2hlZHVsZXIvZG9jcyNTY2hlZHVsZXIvbW9kZWwvRGVwZW5kZW5jeU1vZGVsKSBvciBpdHMgY29uZmlndXJhdGlvblxuICAgICAqIG9iamVjdHMuXG4gICAgICogQGRlcHJlY2F0ZWQgNi4zLjAgVXNlIFtkZXBlbmRlbmNpZXNdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvc2NoZWR1bGVyL2RvY3MjU2NoZWR1bGVyL21vZGVsL1Byb2plY3RNb2RlbCNjb25maWctZGVwZW5kZW5jaWVzKSBpbnN0ZWFkXG4gICAgICovXG4gICAgZGVwZW5kZW5jaWVzRGF0YSA/IDogRGVwZW5kZW5jeU1vZGVsW118RGVwZW5kZW5jeU1vZGVsQ29uZmlnW11cbiAgICAvKipcbiAgICAgKiBUaGUgY29uc3RydWN0b3Igb2YgdGhlIGRlcGVuZGVuY3kgbW9kZWwgY2xhc3MsIHRvIGJlIHVzZWQgaW4gdGhlIHByb2plY3QuIFdpbGwgYmUgc2V0IGFzIHRoZVxuICAgICAqIFttb2RlbENsYXNzXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3Rhc2tib2FyZC9kb2NzL2FwaS9Db3JlL2RhdGEvU3RvcmUjY29uZmlnLW1vZGVsQ2xhc3MpIHByb3BlcnR5IG9mIHRoZSBbZGVwZW5kZW5jeVN0b3JlXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3NjaGVkdWxlci9kb2NzI1NjaGVkdWxlci9tb2RlbC9Qcm9qZWN0TW9kZWwjcHJvcGVydHktZGVwZW5kZW5jeVN0b3JlKVxuICAgICAqL1xuICAgIGRlcGVuZGVuY3lNb2RlbENsYXNzID8gOiB0eXBlb2YgRGVwZW5kZW5jeU1vZGVsXG4gICAgLyoqXG4gICAgICogQSBbRGVwZW5kZW5jeVN0b3JlXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3NjaGVkdWxlci9kb2NzI1NjaGVkdWxlci9kYXRhL0RlcGVuZGVuY3lTdG9yZSkgaW5zdGFuY2Ugb3IgYSBjb25maWcgb2JqZWN0LlxuICAgICAqL1xuICAgIGRlcGVuZGVuY3lTdG9yZSA/IDogRGVwZW5kZW5jeVN0b3JlfERlcGVuZGVuY3lTdG9yZUNvbmZpZ1xuICAgIC8qKlxuICAgICAqIFRoZSBjb25zdHJ1Y3RvciB0byBjcmVhdGUgYSBkZXBlbmRlbmN5IHN0b3JlIGluc3RhbmNlIHdpdGguIFNob3VsZCBiZSBhIGNsYXNzLCBzdWJjbGFzc2luZyB0aGVcbiAgICAgKiBbRGVwZW5kZW5jeVN0b3JlXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3NjaGVkdWxlci9kb2NzI1NjaGVkdWxlci9kYXRhL0RlcGVuZGVuY3lTdG9yZSlcbiAgICAgKi9cbiAgICBkZXBlbmRlbmN5U3RvcmVDbGFzcyA/IDogdHlwZW9mIERlcGVuZGVuY3lTdG9yZXxvYmplY3RcbiAgICAvKipcbiAgICAgKiBDb25maWd1cmF0aW9uIG9mIHRoZSBKU09OIGVuY29kZXIgdXNlZCBieSB0aGUgKkNydWQgTWFuYWdlciouXG4gICAgICovXG4gICAgZW5jb2RlciA/IDoge1xuICAgICAgICByZXF1ZXN0RGF0YT86IG9iamVjdFxuICAgIH1cbiAgICAvKipcbiAgICAgKiBEYXRhIHVzZSB0byBmaWxsIHRoZSBbZXZlbnRTdG9yZV0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9zY2hlZHVsZXIvZG9jcyNTY2hlZHVsZXIvbW9kZWwvUHJvamVjdE1vZGVsI3Byb3BlcnR5LWV2ZW50U3RvcmUpLiBTaG91bGQgYmUgYW4gYXJyYXkgb2ZcbiAgICAgKiBbRXZlbnRNb2RlbHNdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvc2NoZWR1bGVyL2RvY3MjU2NoZWR1bGVyL21vZGVsL0V2ZW50TW9kZWwpIG9yIGl0cyBjb25maWd1cmF0aW9uIG9iamVjdHMuXG4gICAgICovXG4gICAgZXZlbnRzID8gOiBFdmVudE1vZGVsW118RXZlbnRNb2RlbENvbmZpZ1tdXG4gICAgLyoqXG4gICAgICogVGhlIGluaXRpYWwgZGF0YSwgdG8gZmlsbCB0aGUgW2V2ZW50U3RvcmVdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvc2NoZWR1bGVyL2RvY3MjU2NoZWR1bGVyL21vZGVsL1Byb2plY3RNb2RlbCNwcm9wZXJ0eS1ldmVudFN0b3JlKSB3aXRoLlxuICAgICAqIFNob3VsZCBiZSBhbiBhcnJheSBvZiBbRXZlbnRNb2RlbHNdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvc2NoZWR1bGVyL2RvY3MjU2NoZWR1bGVyL21vZGVsL0V2ZW50TW9kZWwpIG9yIGl0cyBjb25maWd1cmF0aW9uIG9iamVjdHMuXG4gICAgICogQGRlcHJlY2F0ZWQgNi4zLjAgVXNlIFtldmVudHNdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvc2NoZWR1bGVyL2RvY3MjU2NoZWR1bGVyL21vZGVsL1Byb2plY3RNb2RlbCNjb25maWctZXZlbnRzKSBpbnN0ZWFkXG4gICAgICovXG4gICAgZXZlbnRzRGF0YSA/IDogRXZlbnRNb2RlbFtdfEV2ZW50TW9kZWxDb25maWdbXVxuICAgIC8qKlxuICAgICAqIEFuIFtFdmVudFN0b3JlXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3NjaGVkdWxlci9kb2NzI1NjaGVkdWxlci9kYXRhL0V2ZW50U3RvcmUpIGluc3RhbmNlIG9yIGEgY29uZmlnIG9iamVjdC5cbiAgICAgKi9cbiAgICBldmVudFN0b3JlID8gOiBFdmVudFN0b3JlfEV2ZW50U3RvcmVDb25maWdcbiAgICAvKipcbiAgICAgKiBTdGFydCBleHBhbmRlZCBvciBub3QgKG9ubHkgdmFsaWQgZm9yIHRyZWUgZGF0YSlcbiAgICAgKi9cbiAgICBleHBhbmRlZCA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIFNwZWNpZnkgYXMgYHRydWVgIHRvIGZvcmNlIHN5bmMgcmVxdWVzdHMgdG8gYmUgc2VudCB3aGVuIGNhbGxpbmcgYHN5bmMoKWAsIGV2ZW4gaWYgdGhlcmUgYXJlIG5vIGxvY2FsXG4gICAgICogY2hhbmdlcy4gVXNlZnVsIGluIGEgcG9sbGluZyBzY2VuYXJpbywgdG8ga2VlcCBjbGllbnQgdXAgdG8gZGF0ZSB3aXRoIHRoZSBiYWNrZW5kLlxuICAgICAqL1xuICAgIGZvcmNlU3luYyA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIFVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgcmVjb3JkLiBNaWdodCBiZSBtYXBwZWQgdG8gYW5vdGhlciBkYXRhU291cmNlIHVzaW5nIGlkRmllbGQsIGJ1dCBhbHdheXMgZXhwb3NlZCBhc1xuICAgICAqIHJlY29yZC5pZC4gV2lsbCBnZXQgYSBnZW5lcmF0ZWQgdmFsdWUgaWYgbm9uZSBpcyBzcGVjaWZpZWQgaW4gcmVjb3JkcyBkYXRhLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3Rhc2tib2FyZC9kb2NzL2FwaS9UYXNrQm9hcmQvbW9kZWwvUHJvamVjdE1vZGVsI2NvbmZpZy1pZClcbiAgICAgKi9cbiAgICBpZCA/IDogc3RyaW5nfG51bWJlclxuICAgIC8qKlxuICAgICAqIFNldCB0byBgdHJ1ZWAgdG8gbWFrZSBTVE0gaWdub3JlIGNoYW5nZXMgY29taW5nIGZyb20gdGhlIGJhY2tlbmQuIFRoaXMgd2lsbCBhbGxvdyB1c2VyIHRvIG9ubHkgdW5kbyByZWRvXG4gICAgICogbG9jYWwgY2hhbmdlcy5cbiAgICAgKi9cbiAgICBpZ25vcmVSZW1vdGVDaGFuZ2VzSW5TVE0gPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBTZXQgdG8gYGZhbHNlYCB0byBvbmx5IGluY2x1ZGUgdGhlIGlkIG9mIGEgcmVtb3ZlZCBwYXJlbnQgbm9kZSBpbiB0aGUgcmVxdWVzdCB0byB0aGUgYmFja2VuZCAoYWxzb1xuICAgICAqIGFmZmVjdHMgcHJvZ3JhbW1hdGljIGNhbGxzIHRvIGdldCBbY2hhbmdlc10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9zY2hlZHVsZXIvZG9jcyNTY2hlZHVsZXIvY3J1ZC9BYnN0cmFjdENydWRNYW5hZ2VyTWl4aW4jcHJvcGVydHktY2hhbmdlcykgZXRjLiksIGFuZCBub3QgdGhlIGlkcyBvZiBpdHMgY2hpbGRyZW4uXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvdGFza2JvYXJkL2RvY3MvYXBpL1Rhc2tCb2FyZC9tb2RlbC9Qcm9qZWN0TW9kZWwjY29uZmlnLWluY2x1ZGVDaGlsZHJlbkluUmVtb3ZlUmVxdWVzdClcbiAgICAgKi9cbiAgICBpbmNsdWRlQ2hpbGRyZW5JblJlbW92ZVJlcXVlc3QgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRvIGluY2x1ZGUgbGVnYWN5IGRhdGEgcHJvcGVydGllcyBpbiB0aGUgSlNPTiAvIGlubGluZURhdGEgb3V0cHV0LiBUaGUgbGVnYWN5IGRhdGEgcHJvcGVydGllcyBhcmVcbiAgICAgKiB0aGUgYHh4RGF0YWAgKGBldmVudHNEYXRhYCwgYHJlc291cmNlc0RhdGFgIGV0Yy4pIHByb3BlcnRpZXMgdGhhdCBhcmUgZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluXG4gICAgICogdGhlIGZ1dHVyZS5cbiAgICAgKiBAZGVwcmVjYXRlZCA2LjMuMCBUaGlzIGNvbmZpZyB3aWxsIGJlIHJlbW92ZWQgd2hlbiB0aGUgZXZlbnRzRGF0YSwgcmVzb3VyY2VzRGF0YSBldGMuIHByb3BlcnRpZXMgYXJlIHJlbW92ZWQgaW4gYSBmdXR1cmUgcmVsZWFzZS5cbiAgICAgKi9cbiAgICBpbmNsdWRlTGVnYWN5RGF0YVByb3BlcnRpZXMgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBUaGlzIGZpZWxkIGlzIGFkZGVkIHRvIHRoZSBjbGFzcyBhdCBydW50aW1lIHdoZW4gdGhlIFN0b3JlIGlzIGNvbmZpZ3VyZWQgd2l0aFxuICAgICAqIFtsYXp5TG9hZF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy90YXNrYm9hcmQvZG9jcy9hcGkvQ29yZS9kYXRhL1N0b3JlI2NvbmZpZy1sYXp5TG9hZCkuIElmIHNldCBvbiBhIHBhcmVudCByZWNvcmQgYXQgbG9hZCB0aW1lLCB0aGF0IHBhcmVudCB3aWxsIG5vdCBjYXVzZSBhbnlcbiAgICAgKiBtb3JlIGNoaWxkIGxvYWQgcmVxdWVzdHMuIElmIG9taXR0ZWQsIGl0IHdpbGwgYmUgYXV0b21hdGljYWxseSBzZXQgdG8gYHRydWVgIHdoZW4gYSBsb2FkIHJlcXVlc3QgcmVjZWl2ZXMgZmV3ZXJcbiAgICAgKiBjaGlsZCByZWNvcmRzIHRoYW4gcmVxdWVzdGVkLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3Rhc2tib2FyZC9kb2NzL2FwaS9UYXNrQm9hcmQvbW9kZWwvUHJvamVjdE1vZGVsI2NvbmZpZy1pc0Z1bGx5TG9hZGVkKVxuICAgICAqL1xuICAgIGlzRnVsbHlMb2FkZWQgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBQcm9qZWN0IGRhdGEgYXMgYSBKU09OIHN0cmluZywgdXNlZCB0byBwb3B1bGF0ZSBpdHMgc3RvcmVzLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3Rhc2tib2FyZC9kb2NzL2FwaS9UYXNrQm9hcmQvbW9kZWwvUHJvamVjdE1vZGVsI2NvbmZpZy1qc29uKVxuICAgICAqL1xuICAgIGpzb24gPyA6IHN0cmluZ1xuICAgIC8qKlxuICAgICAqIFRoZSBsaXN0ZW5lciBzZXQgZm9yIHRoaXMgb2JqZWN0LlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3Rhc2tib2FyZC9kb2NzL2FwaS9UYXNrQm9hcmQvbW9kZWwvUHJvamVjdE1vZGVsI2NvbmZpZy1saXN0ZW5lcnMpXG4gICAgICovXG4gICAgbGlzdGVuZXJzID8gOiBQcm9qZWN0TW9kZWxMaXN0ZW5lcnNcbiAgICAvKipcbiAgICAgKiBDb252ZW5pZW5jZSBzaG9ydGN1dCB0byBzZXQgb25seSB0aGUgdXJsIHRvIGxvYWQgZnJvbSwgd2hlbiB5b3UgZG8gbm90IG5lZWQgdG8gc3VwcGx5IGFueSBvdGhlciBjb25maWdcbiAgICAgKiBvcHRpb25zIGluIHRoZSBgbG9hZGAgc2VjdGlvbiBvZiB0aGUgYHRyYW5zcG9ydGAgY29uZmlnLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3Rhc2tib2FyZC9kb2NzL2FwaS9UYXNrQm9hcmQvbW9kZWwvUHJvamVjdE1vZGVsI2NvbmZpZy1sb2FkVXJsKVxuICAgICAqL1xuICAgIGxvYWRVcmwgPyA6IHN0cmluZ1xuICAgIC8qKlxuICAgICAqIFRoaXMgaXMgYSByZWFkLW9ubHkgZmllbGQgcHJvdmlkZWQgaW4gc2VydmVyIHN5bmNocm9uaXphdGlvbiBwYWNrZXRzIHRvIHNwZWNpZnlcbiAgICAgKiB3aGljaCBwb3NpdGlvbiB0aGUgbm9kZSB0YWtlcyBpbiB0aGUgcGFyZW50J3Mgb3JkZXJlZCBjaGlsZHJlbiBhcnJheS5cbiAgICAgKiBUaGlzIGluZGV4IGlzIHNldCBvbiBsb2FkIGFuZCBnZXRzIHVwZGF0ZWQgb24gcmVvcmRlcmluZyBub2RlcyBpbiB0cmVlLiBTb3J0aW5nIGFuZCBmaWx0ZXJpbmdcbiAgICAgKiBoYXZlIG5vIGVmZmVjdCBvbiBpdC5cbiAgICAgKi9cbiAgICBvcmRlcmVkUGFyZW50SW5kZXggPyA6IG51bWJlclxuICAgIC8qKlxuICAgICAqIFRoaXMgaXMgYSByZWFkLW9ubHkgZmllbGQgcHJvdmlkZWQgaW4gc2VydmVyIHN5bmNocm9uaXphdGlvbiBwYWNrZXRzIHRvIHNwZWNpZnlcbiAgICAgKiB3aGljaCByZWNvcmQgaWQgaXMgdGhlIHBhcmVudCBvZiB0aGUgcmVjb3JkLlxuICAgICAqL1xuICAgIHBhcmVudElkID8gOiBzdHJpbmd8bnVtYmVyfG51bGxcbiAgICAvKipcbiAgICAgKiBUaGlzIGlzIGEgcmVhZC1vbmx5IGZpZWxkIHByb3ZpZGVkIGluIHNlcnZlciBzeW5jaHJvbml6YXRpb24gcGFja2V0cyB0byBzcGVjaWZ5XG4gICAgICogd2hpY2ggcG9zaXRpb24gdGhlIG5vZGUgdGFrZXMgaW4gdGhlIHBhcmVudCdzIGNoaWxkcmVuIGFycmF5LlxuICAgICAqIFRoaXMgaW5kZXggaXMgc2V0IG9uIGxvYWQgYW5kIGdldHMgdXBkYXRlZCBhdXRvbWF0aWNhbGx5IGFmdGVyIHJvdyByZW9yZGVyaW5nLCBzb3J0aW5nLCBldGMuXG4gICAgICogVG8gc2F2ZSB0aGUgb3JkZXIsIG5lZWQgdG8gcGVyc2lzdCB0aGUgZmllbGQgb24gdGhlIHNlcnZlciBhbmQgd2hlbiBkYXRhIGlzIGZldGNoZWQgdG8gYmUgbG9hZGVkLFxuICAgICAqIG5lZWQgdG8gc29ydCBieSB0aGlzIGZpZWxkLlxuICAgICAqL1xuICAgIHBhcmVudEluZGV4ID8gOiBudW1iZXJcbiAgICAvKipcbiAgICAgKiBGaWVsZCBuYW1lIHRvIGJlIHVzZWQgdG8gdHJhbnNmZXIgYSBwaGFudG9tIHJlY29yZCBpZGVudGlmaWVyLlxuICAgICAqL1xuICAgIHBoYW50b21JZEZpZWxkID8gOiBzdHJpbmdcbiAgICAvKipcbiAgICAgKiBGaWVsZCBuYW1lIHRvIGJlIHVzZWQgdG8gdHJhbnNmZXIgYSBwaGFudG9tIHBhcmVudCByZWNvcmQgaWRlbnRpZmllci5cbiAgICAgKi9cbiAgICBwaGFudG9tUGFyZW50SWRGaWVsZCA/IDogc3RyaW5nXG4gICAgLyoqXG4gICAgICogRmxhZyB0aGUgcmVjb3JkIGFzIHJlYWQtb25seSBvbiB0aGUgVUkgbGV2ZWwsIHByZXZlbnRpbmcgdGhlIGVuZCB1c2VyIGZyb20gbWFuaXB1bGF0aW5nIGl0IHVzaW5nIGVkaXRpbmdcbiAgICAgKiBmZWF0dXJlcyBzdWNoIGFzIGNlbGwgZWRpdGluZyBhbmQgZXZlbnQgZHJhZ2dpbmcuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvdGFza2JvYXJkL2RvY3MvYXBpL1Rhc2tCb2FyZC9tb2RlbC9Qcm9qZWN0TW9kZWwjY29uZmlnLXJlYWRPbmx5KVxuICAgICAqL1xuICAgIHJlYWRPbmx5ID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogVGhpcyBmaWVsZCBpcyBhZGRlZCB0byB0aGUgY2xhc3MgYXQgcnVudGltZSB3aGVuIHRoZSBTdG9yZSBpcyBjb25maWd1cmVkIHdpdGhcbiAgICAgKiBbbGF6eUxvYWRdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvdGFza2JvYXJkL2RvY3MvYXBpL0NvcmUvZGF0YS9TdG9yZSNjb25maWctbGF6eUxvYWQpLiBUaGVcbiAgICAgKiBudW1iZXIgc3BlY2lmaWVkIHNob3VsZCByZWZsZWN0IHRoZSA8c3Ryb25nPnRvdGFsPC9zdHJvbmc+IGFtb3VudCBvZiBjaGlsZHJlbiBvZiBhIHBhcmVudCBub2RlLCBpbmNsdWRpbmcgbmVzdGVkIGRlc2NlbmRhbnRzLlxuICAgICAqIEBkZXByZWNhdGVkIFRoaXMgZmllbGQgaGFzIGJlZW4gZGVwcmVjYXRlZC4gUGxlYXNlIHJlYWQgdGhlIFtndWlkZV0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvZ3VpZGUvR3JpZC9kYXRhL2xhenlsb2FkaW5nKSB0byBmaW5kIG91dCBpZiB5b3VyIGFwcCBuZWVkcyB0byB1c2UgdGhlIG5ldyBbaXNGdWxseUxvYWRlZF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy90YXNrYm9hcmQvZG9jcy9hcGkvQ29yZS9kYXRhL21peGluL1RyZWVOb2RlI2ZpZWxkLWlzRnVsbHlMb2FkZWQpIGZpZWxkLlxuICAgICAqL1xuICAgIHJlbW90ZUNoaWxkQ291bnQgPyA6IG51bWJlclxuICAgIC8qKlxuICAgICAqIGBUcnVlYCB0byByZXNldCBpZGVudGlmaWVycyAoZGVmaW5lZCBieSBgaWRGaWVsZGAgY29uZmlnKSBvZiBwaGFudG9tIHJlY29yZHMgYmVmb3JlIHN1Ym1pdHRpbmcgdGhlbVxuICAgICAqIHRvIHRoZSBzZXJ2ZXIuXG4gICAgICovXG4gICAgcmVzZXRJZHNCZWZvcmVTeW5jID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogVGhlIGNvbnN0cnVjdG9yIG9mIHRoZSByZXNvdXJjZSBtb2RlbCBjbGFzcywgdG8gYmUgdXNlZCBpbiB0aGUgcHJvamVjdC4gV2lsbCBiZSBzZXQgYXMgdGhlXG4gICAgICogW21vZGVsQ2xhc3NdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvdGFza2JvYXJkL2RvY3MvYXBpL0NvcmUvZGF0YS9TdG9yZSNjb25maWctbW9kZWxDbGFzcykgcHJvcGVydHkgb2YgdGhlIFtyZXNvdXJjZVN0b3JlXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3NjaGVkdWxlci9kb2NzI1NjaGVkdWxlci9tb2RlbC9Qcm9qZWN0TW9kZWwjcHJvcGVydHktcmVzb3VyY2VTdG9yZSlcbiAgICAgKi9cbiAgICByZXNvdXJjZU1vZGVsQ2xhc3MgPyA6IHR5cGVvZiBSZXNvdXJjZU1vZGVsXG4gICAgLyoqXG4gICAgICogRGF0YSB1c2UgdG8gZmlsbCB0aGUgW3Jlc291cmNlU3RvcmVdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvc2NoZWR1bGVyL2RvY3MjU2NoZWR1bGVyL21vZGVsL1Byb2plY3RNb2RlbCNwcm9wZXJ0eS1yZXNvdXJjZVN0b3JlKS4gU2hvdWxkIGJlIGFuIGFycmF5IG9mXG4gICAgICogW1Jlc291cmNlTW9kZWxzXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3NjaGVkdWxlci9kb2NzI1NjaGVkdWxlci9tb2RlbC9SZXNvdXJjZU1vZGVsKSBvciBpdHMgY29uZmlndXJhdGlvbiBvYmplY3RzLlxuICAgICAqL1xuICAgIHJlc291cmNlcyA/IDogUmVzb3VyY2VNb2RlbFtdfFJlc291cmNlTW9kZWxDb25maWdbXVxuICAgIC8qKlxuICAgICAqIFRoZSBpbml0aWFsIGRhdGEsIHRvIGZpbGwgdGhlIFtyZXNvdXJjZVN0b3JlXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3NjaGVkdWxlci9kb2NzI1NjaGVkdWxlci9tb2RlbC9Qcm9qZWN0TW9kZWwjcHJvcGVydHktcmVzb3VyY2VTdG9yZSkgd2l0aC5cbiAgICAgKiBTaG91bGQgYmUgYW4gYXJyYXkgb2YgW1Jlc291cmNlTW9kZWxzXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3NjaGVkdWxlci9kb2NzI1NjaGVkdWxlci9tb2RlbC9SZXNvdXJjZU1vZGVsKSBvciBpdHMgY29uZmlndXJhdGlvbiBvYmplY3RzLlxuICAgICAqIEBkZXByZWNhdGVkIDYuMy4wIFVzZSBbcmVzb3VyY2VzXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3NjaGVkdWxlci9kb2NzI1NjaGVkdWxlci9tb2RlbC9Qcm9qZWN0TW9kZWwjY29uZmlnLXJlc291cmNlcykgaW5zdGVhZFxuICAgICAqL1xuICAgIHJlc291cmNlc0RhdGEgPyA6IFJlc291cmNlTW9kZWxbXXxSZXNvdXJjZU1vZGVsQ29uZmlnW11cbiAgICAvKipcbiAgICAgKiBBIFtSZXNvdXJjZVN0b3JlXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3NjaGVkdWxlci9kb2NzI1NjaGVkdWxlci9kYXRhL1Jlc291cmNlU3RvcmUpIGluc3RhbmNlIG9yIGEgY29uZmlnIG9iamVjdC5cbiAgICAgKi9cbiAgICByZXNvdXJjZVN0b3JlID8gOiBSZXNvdXJjZVN0b3JlfFJlc291cmNlU3RvcmVDb25maWdcbiAgICAvKipcbiAgICAgKiBUaGUgY29uc3RydWN0b3IgdG8gY3JlYXRlIGEgcmVzb3VyY2Ugc3RvcmUgaW5zdGFuY2Ugd2l0aC4gU2hvdWxkIGJlIGEgY2xhc3MsIHN1YmNsYXNzaW5nIHRoZVxuICAgICAqIFtSZXNvdXJjZVN0b3JlXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3NjaGVkdWxlci9kb2NzI1NjaGVkdWxlci9kYXRhL1Jlc291cmNlU3RvcmUpXG4gICAgICovXG4gICAgcmVzb3VyY2VTdG9yZUNsYXNzID8gOiB0eXBlb2YgUmVzb3VyY2VTdG9yZXxvYmplY3RcbiAgICAvKipcbiAgICAgKiBFeHBlcmltZW50YWwgaG9vayB0aGF0IGxldHMgdGhlIGFwcCBkZXRlcm1pbmUgaWYgYSBib3VuZCBkYXRhc2V0IG5lZWRzIHN5bmNpbmcgd2l0aCB0aGUgc3RvcmUgb3Igbm90LCBhbmRcbiAgICAgKiBpZiBpdCBkb2VzIC0gd2hpY2ggcmVjb3JkcyB0aGF0IHNob3VsZCBiZSBwcm9jZXNzZWQuIE9ubHkgY2FsbGVkIGZvciBzdG9yZXMgdGhhdCBhcmUgY29uZmlndXJlZCB3aXRoXG4gICAgICogYHN5bmNEYXRhT25Mb2FkOiB0cnVlYCAod2hpY2ggaXMgdGhlIGRlZmF1bHQgaW4gdGhlIFJlYWN0LCBBbmd1bGFyIGFuZCBWdWUgd3JhcHBlcnMpLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3Rhc2tib2FyZC9kb2NzL2FwaS9UYXNrQm9hcmQvbW9kZWwvUHJvamVjdE1vZGVsI2NvbmZpZy1zaG91bGRTeW5jRGF0YU9uTG9hZClcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9ucyBPcHRpb25zIHBhc3NlZCBieSB0aGUgc3RvcmUgdG8gdGhpcyBob29rXG4gICAgICogQHBhcmFtIHtDb3JlLmRhdGEuU3RvcmV9IG9wdGlvbnMuc3RvcmUgU3RvcmUgYWJvdXQgdG8gYmUgc3luY2VkXG4gICAgICogQHBhcmFtIHtDb3JlLmRhdGEuTW9kZWx9IG9wdGlvbnMucmVjb3JkcyBSZWNvcmRzIGN1cnJlbnRseSBpbiB0aGUgc3RvcmVcbiAgICAgKiBAcGFyYW0ge29iamVjdFtdfSBvcHRpb25zLmRhdGEgSW5jb21pbmcgZGF0YVxuICAgICAqIEByZXR1cm5zIHtTZXQ8YW55Pixib29sZWFufSBSZXR1cm4gYGZhbHNlYCB0byBwcmV2ZW50IHRoZSBzdG9yZSBmcm9tIHN5bmNpbmcsIG9yIGEgc2V0IG9mIHJlY29yZCBpZHMgdGhhdCBuZWVkIGZ1cnRoZXIgcHJvY2Vzc2luZyAoZm9yIHJlY29yZHMgdGhhdCBoYXMgc29tZSBraW5kIG9mIGNoYW5nZSwgZWcuIGFuIHVwZGF0ZSwgcmVtb3ZhbCBvciBhZGRpdGlvbilcbiAgICAgKi9cbiAgICBzaG91bGRTeW5jRGF0YU9uTG9hZCA/IDogKG9wdGlvbnM6IHsgc3RvcmU6IFN0b3JlLCByZWNvcmRzOiBNb2RlbCwgZGF0YTogb2JqZWN0W10gfSkgPT4gU2V0PGFueT58Ym9vbGVhblxuICAgIC8qKlxuICAgICAqIFNpbGVuY2VzIHByb3BhZ2F0aW9ucyBjYXVzZWQgYnkgdGhlIHByb2plY3QgbG9hZGluZy5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy90YXNrYm9hcmQvZG9jcy9hcGkvVGFza0JvYXJkL21vZGVsL1Byb2plY3RNb2RlbCNjb25maWctc2lsZW5jZUluaXRpYWxDb21taXQpXG4gICAgICovXG4gICAgc2lsZW5jZUluaXRpYWxDb21taXQgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBXaGVuIGB0cnVlYCB0cmVhdHMgcGFyc2VkIHJlc3BvbnNlcyB3aXRob3V0IGBzdWNjZXNzYCBwcm9wZXJ0eSBhcyBzdWNjZXNzZnVsLlxuICAgICAqIEluIHRoaXMgbW9kZSBhIHBhcnNlZCByZXNwb25zZSBpcyB0cmVhdGVkIGFzIGludmFsaWQgaWYgaXQgaGFzIGV4cGxpY2l0bHkgc2V0IGBzdWNjZXNzIDogZmFsc2VgLlxuICAgICAqL1xuICAgIHNraXBTdWNjZXNzUHJvcGVydHkgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBDb25maWd1cmF0aW9uIG9wdGlvbnMgdG8gcHJvdmlkZSB0byB0aGUgU1RNIG1hbmFnZXJcbiAgICAgKi9cbiAgICBzdG0gPyA6IFN0YXRlVHJhY2tpbmdNYW5hZ2VyQ29uZmlnfFN0YXRlVHJhY2tpbmdNYW5hZ2VyXG4gICAgLyoqXG4gICAgICogTmFtZSBvZiBhIHN0b3JlIHByb3BlcnR5IHRvIHJldHJpZXZlIHN0b3JlIGlkZW50aWZpZXJzIGZyb20uIE1ha2Ugc3VyZSB5b3UgaGF2ZSBhbiBpbnN0YW5jZSBvZiBhXG4gICAgICogc3RvcmUgdG8gdXNlIGl0IGJ5IGlkLiBTdG9yZSBpZGVudGlmaWVyIGlzIHVzZWQgYXMgYSBjb250YWluZXIgbmFtZSBob2xkaW5nIGNvcnJlc3BvbmRpbmcgc3RvcmUgZGF0YVxuICAgICAqIHdoaWxlIHRyYW5zZmVycmluZyB0aGVtIHRvL2Zyb20gdGhlIHNlcnZlci4gQnkgZGVmYXVsdCwgYGlkYCBwcm9wZXJ0eSBpcyB1c2VkLiBBbmQgaW4gY2FzZSBhXG4gICAgICogY29udGFpbmVyIGlkZW50aWZpZXIgaGFzIHRvIGRpZmZlciB0aGlzIGNvbmZpZyBjYW4gYmUgdXNlZDpcbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy90YXNrYm9hcmQvZG9jcy9hcGkvVGFza0JvYXJkL21vZGVsL1Byb2plY3RNb2RlbCNjb25maWctc3RvcmVJZFByb3BlcnR5KVxuICAgICAqL1xuICAgIHN0b3JlSWRQcm9wZXJ0eSA/IDogc3RyaW5nXG4gICAgLyoqXG4gICAgICogV2hlbiBgdHJ1ZWAgdGhlIENydWQgTWFuYWdlciBkb2VzIG5vdCByZXF1aXJlIGFsbCB1cGRhdGVkIGFuZCByZW1vdmVkIHJlY29yZHMgdG8gYmUgbWVudGlvbmVkIGluIHRoZVxuICAgICAqICpzeW5jKiByZXNwb25zZS4gSW4gdGhpcyBjYXNlIHJlc3BvbnNlIHNob3VsZCBpbmNsdWRlIG9ubHkgc2VydmVyIHNpZGUgY2hhbmdlcy5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy90YXNrYm9hcmQvZG9jcy9hcGkvVGFza0JvYXJkL21vZGVsL1Byb2plY3RNb2RlbCNjb25maWctc3VwcG9ydFNob3J0U3luY1Jlc3BvbnNlKVxuICAgICAqL1xuICAgIHN1cHBvcnRTaG9ydFN5bmNSZXNwb25zZSA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIEFuIGFycmF5IG9mIHN0b3JlIGlkZW50aWZpZXJzIHNldHMgYW4gYWx0ZXJuYXRpdmUgc3luYyByZXNwb25zZXMgYXBwbHkgb3JkZXIuXG4gICAgICogQnkgZGVmYXVsdCwgdGhlIG9yZGVyIGluIHdoaWNoIHN5bmMgcmVzcG9uc2VzIGFyZSBhcHBsaWVkIHRvIHRoZSBzdG9yZXMgaXMgdGhlIHNhbWUgYXMgdGhleVxuICAgICAqIHJlZ2lzdGVyZWQgaW4uIEJ1dCBpbiBjYXNlIG9mIHNvbWUgdHJpY2t5IGRlcGVuZGVuY2llcyBiZXR3ZWVuIHN0b3JlcyB0aGlzIG9yZGVyIGNhbiBiZSBjaGFuZ2VkOlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3Rhc2tib2FyZC9kb2NzL2FwaS9UYXNrQm9hcmQvbW9kZWwvUHJvamVjdE1vZGVsI2NvbmZpZy1zeW5jQXBwbHlTZXF1ZW5jZSlcbiAgICAgKi9cbiAgICBzeW5jQXBwbHlTZXF1ZW5jZSA/IDogc3RyaW5nW118Q3J1ZE1hbmFnZXJTdG9yZURlc2NyaXB0b3JbXVxuICAgIC8qKlxuICAgICAqIENvbnZlbmllbmNlIHNob3J0Y3V0IHRvIHNldCBvbmx5IHRoZSB1cmwgdG8gc3luYyB0bywgd2hlbiB5b3UgZG8gbm90IG5lZWQgdG8gc3VwcGx5IGFueSBvdGhlciBjb25maWdcbiAgICAgKiBvcHRpb25zIGluIHRoZSBgc3luY2Agc2VjdGlvbiBvZiB0aGUgYHRyYW5zcG9ydGAgY29uZmlnLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3Rhc2tib2FyZC9kb2NzL2FwaS9UYXNrQm9hcmQvbW9kZWwvUHJvamVjdE1vZGVsI2NvbmZpZy1zeW5jVXJsKVxuICAgICAqL1xuICAgIHN5bmNVcmwgPyA6IHN0cmluZ1xuICAgIC8qKlxuICAgICAqIFRoZSBjb25zdHJ1Y3RvciBvZiB0aGUgdGFzayBtb2RlbCBjbGFzcywgdG8gYmUgdXNlZCBpbiB0aGUgcHJvamVjdC5cbiAgICAgKiBXaWxsIGJlIHNldCBhcyB0aGUgW21vZGVsQ2xhc3NdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvdGFza2JvYXJkL2RvY3MvYXBpL0NvcmUvZGF0YS9TdG9yZSNjb25maWctbW9kZWxDbGFzcylcbiAgICAgKiBwcm9wZXJ0eSBvZiB0aGUgW3Rhc2tTdG9yZV0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy90YXNrYm9hcmQvZG9jcy9hcGkvVGFza0JvYXJkL21vZGVsL1Byb2plY3RNb2RlbCNwcm9wZXJ0eS10YXNrU3RvcmUpLlxuICAgICAqL1xuICAgIHRhc2tNb2RlbENsYXNzID8gOiB0eXBlb2YgVGFza01vZGVsXG4gICAgLyoqXG4gICAgICogVGhlIGluaXRpYWwgZGF0YSwgdG8gZmlsbCB0aGUgW3Rhc2tTdG9yZV0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy90YXNrYm9hcmQvZG9jcy9hcGkvVGFza0JvYXJkL21vZGVsL1Byb2plY3RNb2RlbCNwcm9wZXJ0eS10YXNrU3RvcmUpIHdpdGguIFNob3VsZCBiZSBhbiBhcnJheSBvZlxuICAgICAqIFtUYXNrTW9kZWxdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvdGFza2JvYXJkL2RvY3MvYXBpL1Rhc2tCb2FyZC9tb2RlbC9UYXNrTW9kZWwpIG9yIGl0cyBjb25maWd1cmF0aW9uIG9iamVjdHMuXG4gICAgICovXG4gICAgdGFza3MgPyA6IFRhc2tNb2RlbFtdfFRhc2tNb2RlbENvbmZpZ1tdXG4gICAgLyoqXG4gICAgICogVGhlIGluaXRpYWwgZGF0YSwgdG8gZmlsbCB0aGUgW3Rhc2tTdG9yZV0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy90YXNrYm9hcmQvZG9jcy9hcGkvVGFza0JvYXJkL21vZGVsL1Byb2plY3RNb2RlbCNwcm9wZXJ0eS10YXNrU3RvcmUpIHdpdGguXG4gICAgICogU2hvdWxkIGJlIGFuIGFycmF5IG9mIFtUYXNrTW9kZWxdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvdGFza2JvYXJkL2RvY3MvYXBpL1Rhc2tCb2FyZC9tb2RlbC9UYXNrTW9kZWwpIGluc3RhbmNlcyBvciBpdHMgY29uZmlndXJhdGlvbiBvYmplY3RzLlxuICAgICAqIEBkZXByZWNhdGVkIDYuMy4wIFVzZSBbdGFza3NdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvdGFza2JvYXJkL2RvY3MvYXBpL1Rhc2tCb2FyZC9tb2RlbC9Qcm9qZWN0TW9kZWwjY29uZmlnLXRhc2tzKSBpbnN0ZWFkXG4gICAgICovXG4gICAgdGFza3NEYXRhID8gOiBUYXNrTW9kZWxbXXxUYXNrTW9kZWxDb25maWdbXVxuICAgIC8qKlxuICAgICAqIEFuIFtUYXNrU3RvcmVdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvdGFza2JvYXJkL2RvY3MvYXBpL1Rhc2tCb2FyZC9zdG9yZS9UYXNrU3RvcmUpIGluc3RhbmNlIG9yIGEgY29uZmlnIG9iamVjdC5cbiAgICAgKi9cbiAgICB0YXNrU3RvcmUgPyA6IFRhc2tTdG9yZUNvbmZpZ3xUYXNrU3RvcmVcbiAgICAvKipcbiAgICAgKiBUaGUgY29uc3RydWN0b3IgdG8gY3JlYXRlIGEgdGFzayBzdG9yZSBpbnN0YW5jZSB3aXRoLlxuICAgICAqIFNob3VsZCBiZSBhIGNsYXNzLCBzdWJjbGFzc2luZyB0aGUgW1Rhc2tTdG9yZV0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy90YXNrYm9hcmQvZG9jcy9hcGkvVGFza0JvYXJkL3N0b3JlL1Rhc2tTdG9yZSkuXG4gICAgICovXG4gICAgdGFza1N0b3JlQ2xhc3MgPyA6IHR5cGVvZiBUYXNrU3RvcmVcbiAgICAvKipcbiAgICAgKiBTZXQgdG8gYSBJQU5BIHRpbWUgem9uZSAoaS5lLiBgRXVyb3BlL1N0b2NraG9sbWApIG9yIGEgVVRDIG9mZnNldCBpbiBtaW51dGVzIChpLmUuIGAtMTIwYCkuIFRoaXMgd2lsbFxuICAgICAqIGNvbnZlcnQgYWxsIGV2ZW50cywgdGFza3MgYW5kIHRpbWUgcmFuZ2VzIHRvIHRoZSBzcGVjaWZpZWQgdGltZSB6b25lIG9yIG9mZnNldC4gSXQgd2lsbCBhbHNvIGFmZmVjdCB0aGVcbiAgICAgKiBkaXNwbGF5ZWQgdGltZWxpbmUncyBoZWFkZXJzIGFzIHdlbGwgYXQgdGhlIHN0YXJ0IGFuZCBlbmQgZGF0ZSBvZiBpdC5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy90YXNrYm9hcmQvZG9jcy9hcGkvVGFza0JvYXJkL21vZGVsL1Byb2plY3RNb2RlbCNjb25maWctdGltZVpvbmUpXG4gICAgICovXG4gICAgdGltZVpvbmUgPyA6IHN0cmluZ3xudW1iZXJcbiAgICAvKipcbiAgICAgKiBTcGVjaWZpZXMgdGhlIG91dHB1dCBmb3JtYXQgb2YgW3RvSlNPTl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9zY2hlZHVsZXIvZG9jcyNTY2hlZHVsZXIvbW9kZWwvbWl4aW4vUHJvamVjdE1vZGVsQ29tbW9uI2Z1bmN0aW9uLXRvSlNPTikuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvdGFza2JvYXJkL2RvY3MvYXBpL1Rhc2tCb2FyZC9tb2RlbC9Qcm9qZWN0TW9kZWwjY29uZmlnLXRvSlNPTlJlc3VsdEZvcm1hdClcbiAgICAgKi9cbiAgICB0b0pTT05SZXN1bHRGb3JtYXQgPyA6ICdpbmxpbmVEYXRhJ3wnbW9kZWwnXG4gICAgLyoqXG4gICAgICogV2hlbiBgdHJ1ZWAgZm9yY2VzIHRoZSBDUlVEIG1hbmFnZXIgdG8gcHJvY2VzcyByZXNwb25zZXMgZGVwZW5kaW5nIG9uIHRoZWlyIGB0eXBlYCBhdHRyaWJ1dGUuXG4gICAgICogU28gYGxvYWRgIHJlcXVlc3QgbWF5IGJlIHJlc3BvbmRlZCB3aXRoIGBzeW5jYCByZXNwb25zZSBmb3IgZXhhbXBsZS5cbiAgICAgKiBDYW4gYmUgdXNlZCBmb3Igc21hcnQgc2VydmVyIGxvZ2ljIGFsbG93aW5nIHRoZSBzZXJ2ZXIgdG8gZGVjaWRlIHdoZW4gaXQncyBiZXR0ZXIgdG8gcmVzcG9uZCB3aXRoIGFcbiAgICAgKiBjb21wbGV0ZSBkYXRhIHNldCAoYGxvYWRgIHJlc3BvbnNlKSBvciBpdCdzIGVub3VnaCB0byByZXR1cm4ganVzdCBhIGRlbHRhIChgc3luY2AgcmVzcG9uc2UpLlxuICAgICAqL1xuICAgIHRyYWNrUmVzcG9uc2VUeXBlID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogQ29uZmlndXJhdGlvbiBvZiB0aGUgQUpBWCByZXF1ZXN0cyB1c2VkIGJ5ICpDcnVkIE1hbmFnZXIqIHRvIGNvbW11bmljYXRlIHdpdGggYSBzZXJ2ZXItc2lkZS5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy90YXNrYm9hcmQvZG9jcy9hcGkvVGFza0JvYXJkL21vZGVsL1Byb2plY3RNb2RlbCNjb25maWctdHJhbnNwb3J0KVxuICAgICAqL1xuICAgIHRyYW5zcG9ydCA/IDoge1xuICAgICAgICBsb2FkPzogb2JqZWN0XG4gICAgICAgIHN5bmM/OiBvYmplY3RcbiAgICB9XG4gICAgLyoqXG4gICAgICogQnkgZGVmYXVsdCwgdGhlIHN0b3JlcyBvZiBhIHByb2plY3QgdXNlIHRoZSByYXcgZGF0YSBvYmplY3RzIHBhc3NlZCB0byB0aGVtIGFzIHRoZSBkYXRhIHNvdXJjZSBmb3IgdGhlaXJcbiAgICAgKiByZWNvcmRzIGlmIGRhdGEgaXMgbG9hZGVkIHJlbW90ZWx5ICh1c2luZyBhbiBgQWpheFN0b3JlYCBvciBhIGBDcnVkTWFuYWdlcmApLiBGb3IgZGF0YSBzdXBwbGllZCBpbmxpbmUsXG4gICAgICogdGhlIGRhdGEgb2JqZWN0cyBhcmUgaW5zdGVhZCBieSBkZWZhdWx0IGNsb25lZCB0byBhdm9pZCB0aGUgb3JpZ2luYWwgZGF0YSBvYmplY3QgYmVpbmcgbW9kaWZpZWQgYnkgdGhlXG4gICAgICogc3RvcmUuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvdGFza2JvYXJkL2RvY3MvYXBpL1Rhc2tCb2FyZC9tb2RlbC9Qcm9qZWN0TW9kZWwjY29uZmlnLXVzZVJhd0RhdGEpXG4gICAgICovXG4gICAgdXNlUmF3RGF0YSA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIFRoaXMgY29uZmlnIHZhbGlkYXRlcyB0aGUgcmVzcG9uc2Ugc3RydWN0dXJlIGZvciByZXF1ZXN0cyBtYWRlIGJ5IHRoZSBDcnVkIE1hbmFnZXIuXG4gICAgICogV2hlbiBgdHJ1ZWAsIHRoZSBDcnVkIE1hbmFnZXIgY2hlY2tzIGV2ZXJ5IHBhcnNlZCByZXNwb25zZSBzdHJ1Y3R1cmUgZm9yIGVycm9yc1xuICAgICAqIGFuZCBpZiB0aGUgcmVzcG9uc2UgZm9ybWF0IGlzIGludmFsaWQsIGEgd2FybmluZyBpcyBsb2dnZWQgdG8gdGhlIGJyb3dzZXIgY29uc29sZS5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy90YXNrYm9hcmQvZG9jcy9hcGkvVGFza0JvYXJkL21vZGVsL1Byb2plY3RNb2RlbCNjb25maWctdmFsaWRhdGVSZXNwb25zZSlcbiAgICAgKi9cbiAgICB2YWxpZGF0ZVJlc3BvbnNlID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogYHRydWVgIHRvIHdyaXRlIGFsbCBmaWVsZHMgZnJvbSB0aGUgcmVjb3JkIHRvIHRoZSBzZXJ2ZXIuXG4gICAgICogSWYgc2V0IHRvIGBmYWxzZWAgaXQgd2lsbCBvbmx5IHNlbmQgdGhlIGZpZWxkcyB0aGF0IHdlcmUgbW9kaWZpZWQuXG4gICAgICogTm90ZSB0aGF0IGFueSBmaWVsZHMgdGhhdCBoYXZlIFtwZXJzaXN0XShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3Rhc2tib2FyZC9kb2NzL2FwaS9Db3JlL2RhdGEvZmllbGQvRGF0YUZpZWxkI2NvbmZpZy1wZXJzaXN0KSBzZXQgdG8gYGZhbHNlYCB3aWxsXG4gICAgICogc3RpbGwgYmUgaWdub3JlZCBhbmQgZmllbGRzIGhhdmluZyBbYWx3YXlzV3JpdGVdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvdGFza2JvYXJkL2RvY3MvYXBpL0NvcmUvZGF0YS9maWVsZC9EYXRhRmllbGQjY29uZmlnLWFsd2F5c1dyaXRlKSBzZXQgdG8gYHRydWVgXG4gICAgICogd2lsbCBhbHdheXMgYmUgaW5jbHVkZWQuXG4gICAgICovXG4gICAgd3JpdGVBbGxGaWVsZHMgPyA6IGJvb2xlYW5cblxufVxuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvciA6ICdicnludHVtLXRhc2stYm9hcmQtcHJvamVjdC1tb2RlbCcsXG4gICAgdGVtcGxhdGUgOiAnJ1xufSlcbmV4cG9ydCBjbGFzcyBCcnludHVtVGFza0JvYXJkUHJvamVjdE1vZGVsQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuXG4gICAgcHVibGljIHN0YXRpYyBpbnN0YW5jZUNsYXNzID0gUHJvamVjdE1vZGVsO1xuXG4gICAgcHVibGljIHN0YXRpYyBpbnN0YW5jZU5hbWUgPSAnUHJvamVjdE1vZGVsJztcblxuICAgIHByaXZhdGUgc3RhdGljIGJyeW50dW1FdmVudHM6IHN0cmluZ1tdID0gW1xuICAgICAgICAnb25CZWZvcmVEZXN0cm95JyxcbiAgICAgICAgJ29uQmVmb3JlTG9hZCcsXG4gICAgICAgICdvbkJlZm9yZUxvYWRBcHBseScsXG4gICAgICAgICdvbkJlZm9yZVJlc3BvbnNlQXBwbHknLFxuICAgICAgICAnb25CZWZvcmVTZW5kJyxcbiAgICAgICAgJ29uQmVmb3JlU3luYycsXG4gICAgICAgICdvbkJlZm9yZVN5bmNBcHBseScsXG4gICAgICAgICdvbkNhdGNoQWxsJyxcbiAgICAgICAgJ29uQ2hhbmdlJyxcbiAgICAgICAgJ29uRGF0YVJlYWR5JyxcbiAgICAgICAgJ29uRGVzdHJveScsXG4gICAgICAgICdvbkhhc0NoYW5nZXMnLFxuICAgICAgICAnb25Mb2FkJyxcbiAgICAgICAgJ29uTG9hZENhbmNlbGVkJyxcbiAgICAgICAgJ29uTG9hZEZhaWwnLFxuICAgICAgICAnb25Ob0NoYW5nZXMnLFxuICAgICAgICAnb25SZXF1ZXN0RG9uZScsXG4gICAgICAgICdvblJlcXVlc3RGYWlsJyxcbiAgICAgICAgJ29uU3luYycsXG4gICAgICAgICdvblN5bmNDYW5jZWxlZCcsXG4gICAgICAgICdvblN5bmNEZWxheWVkJyxcbiAgICAgICAgJ29uU3luY0ZhaWwnXG4gICAgXTtcblxuICAgIHByaXZhdGUgc3RhdGljIGJyeW50dW1GZWF0dXJlTmFtZXM6IHN0cmluZ1tdID0gW1xuXG4gICAgXTtcblxuICAgIHByaXZhdGUgc3RhdGljIGJyeW50dW1Db25maWdzOiBzdHJpbmdbXSA9IEJyeW50dW1UYXNrQm9hcmRQcm9qZWN0TW9kZWxDb21wb25lbnQuYnJ5bnR1bUZlYXR1cmVOYW1lcy5jb25jYXQoW1xuICAgICAgICAnYWRqdXN0RHVyYXRpb25Ub0RTVCcsXG4gICAgICAgICdhc3NpZ25tZW50TW9kZWxDbGFzcycsXG4gICAgICAgICdhc3NpZ25tZW50cycsXG4gICAgICAgICdhc3NpZ25tZW50c0RhdGEnLFxuICAgICAgICAnYXNzaWdubWVudFN0b3JlJyxcbiAgICAgICAgJ2Fzc2lnbm1lbnRTdG9yZUNsYXNzJyxcbiAgICAgICAgJ2F1dG9Mb2FkJyxcbiAgICAgICAgJ2F1dG9TeW5jJyxcbiAgICAgICAgJ2F1dG9TeW5jVGltZW91dCcsXG4gICAgICAgICdidWJibGVFdmVudHMnLFxuICAgICAgICAnY2FsbE9uRnVuY3Rpb25zJyxcbiAgICAgICAgJ2NhdGNoRXZlbnRIYW5kbGVyRXhjZXB0aW9ucycsXG4gICAgICAgICdjaGlsZHJlbicsXG4gICAgICAgICdjcnVkU3RvcmVzJyxcbiAgICAgICAgJ2RlcGVuZGVuY2llcycsXG4gICAgICAgICdkZXBlbmRlbmNpZXNEYXRhJyxcbiAgICAgICAgJ2RlcGVuZGVuY3lNb2RlbENsYXNzJyxcbiAgICAgICAgJ2RlcGVuZGVuY3lTdG9yZScsXG4gICAgICAgICdkZXBlbmRlbmN5U3RvcmVDbGFzcycsXG4gICAgICAgICdlbmNvZGVyJyxcbiAgICAgICAgJ2V2ZW50cycsXG4gICAgICAgICdldmVudHNEYXRhJyxcbiAgICAgICAgJ2V2ZW50U3RvcmUnLFxuICAgICAgICAnZXhwYW5kZWQnLFxuICAgICAgICAnZm9yY2VTeW5jJyxcbiAgICAgICAgJ2lkJyxcbiAgICAgICAgJ2lnbm9yZVJlbW90ZUNoYW5nZXNJblNUTScsXG4gICAgICAgICdpbmNsdWRlQ2hpbGRyZW5JblJlbW92ZVJlcXVlc3QnLFxuICAgICAgICAnaW5jbHVkZUxlZ2FjeURhdGFQcm9wZXJ0aWVzJyxcbiAgICAgICAgJ2lzRnVsbHlMb2FkZWQnLFxuICAgICAgICAnanNvbicsXG4gICAgICAgICdsaXN0ZW5lcnMnLFxuICAgICAgICAnbG9hZFVybCcsXG4gICAgICAgICdvcmRlcmVkUGFyZW50SW5kZXgnLFxuICAgICAgICAncGFyZW50SWQnLFxuICAgICAgICAncGFyZW50SW5kZXgnLFxuICAgICAgICAncGhhbnRvbUlkRmllbGQnLFxuICAgICAgICAncGhhbnRvbVBhcmVudElkRmllbGQnLFxuICAgICAgICAncmVhZE9ubHknLFxuICAgICAgICAncmVtb3RlQ2hpbGRDb3VudCcsXG4gICAgICAgICdyZXNldElkc0JlZm9yZVN5bmMnLFxuICAgICAgICAncmVzb3VyY2VNb2RlbENsYXNzJyxcbiAgICAgICAgJ3Jlc291cmNlcycsXG4gICAgICAgICdyZXNvdXJjZXNEYXRhJyxcbiAgICAgICAgJ3Jlc291cmNlU3RvcmUnLFxuICAgICAgICAncmVzb3VyY2VTdG9yZUNsYXNzJyxcbiAgICAgICAgJ3Nob3VsZFN5bmNEYXRhT25Mb2FkJyxcbiAgICAgICAgJ3NpbGVuY2VJbml0aWFsQ29tbWl0JyxcbiAgICAgICAgJ3NraXBTdWNjZXNzUHJvcGVydHknLFxuICAgICAgICAnc3RtJyxcbiAgICAgICAgJ3N0b3JlSWRQcm9wZXJ0eScsXG4gICAgICAgICdzdXBwb3J0U2hvcnRTeW5jUmVzcG9uc2UnLFxuICAgICAgICAnc3luY0FwcGx5U2VxdWVuY2UnLFxuICAgICAgICAnc3luY1VybCcsXG4gICAgICAgICd0YXNrTW9kZWxDbGFzcycsXG4gICAgICAgICd0YXNrcycsXG4gICAgICAgICd0YXNrc0RhdGEnLFxuICAgICAgICAndGFza1N0b3JlJyxcbiAgICAgICAgJ3Rhc2tTdG9yZUNsYXNzJyxcbiAgICAgICAgJ3RpbWVab25lJyxcbiAgICAgICAgJ3RvSlNPTlJlc3VsdEZvcm1hdCcsXG4gICAgICAgICd0cmFja1Jlc3BvbnNlVHlwZScsXG4gICAgICAgICd0cmFuc3BvcnQnLFxuICAgICAgICAndXNlUmF3RGF0YScsXG4gICAgICAgICd2YWxpZGF0ZVJlc3BvbnNlJyxcbiAgICAgICAgJ3dyaXRlQWxsRmllbGRzJ1xuICAgIF0pO1xuXG4gICAgcHJpdmF0ZSBzdGF0aWMgYnJ5bnR1bUNvbmZpZ3NPbmx5OiBzdHJpbmdbXSA9IFtcbiAgICAgICAgJ2FkanVzdER1cmF0aW9uVG9EU1QnLFxuICAgICAgICAnYXNzaWdubWVudE1vZGVsQ2xhc3MnLFxuICAgICAgICAnYXNzaWdubWVudHNEYXRhJyxcbiAgICAgICAgJ2Fzc2lnbm1lbnRTdG9yZUNsYXNzJyxcbiAgICAgICAgJ2F1dG9Mb2FkJyxcbiAgICAgICAgJ2F1dG9TeW5jJyxcbiAgICAgICAgJ2F1dG9TeW5jVGltZW91dCcsXG4gICAgICAgICdidWJibGVFdmVudHMnLFxuICAgICAgICAnY2hpbGRyZW4nLFxuICAgICAgICAnZGVwZW5kZW5jaWVzRGF0YScsXG4gICAgICAgICdkZXBlbmRlbmN5TW9kZWxDbGFzcycsXG4gICAgICAgICdkZXBlbmRlbmN5U3RvcmVDbGFzcycsXG4gICAgICAgICdlbmNvZGVyJyxcbiAgICAgICAgJ2V2ZW50c0RhdGEnLFxuICAgICAgICAnZXhwYW5kZWQnLFxuICAgICAgICAnaWdub3JlUmVtb3RlQ2hhbmdlc0luU1RNJyxcbiAgICAgICAgJ2luY2x1ZGVDaGlsZHJlbkluUmVtb3ZlUmVxdWVzdCcsXG4gICAgICAgICdsaXN0ZW5lcnMnLFxuICAgICAgICAnb3JkZXJlZFBhcmVudEluZGV4JyxcbiAgICAgICAgJ3BhcmVudEluZGV4JyxcbiAgICAgICAgJ3BoYW50b21JZEZpZWxkJyxcbiAgICAgICAgJ3BoYW50b21QYXJlbnRJZEZpZWxkJyxcbiAgICAgICAgJ3Jlc2V0SWRzQmVmb3JlU3luYycsXG4gICAgICAgICdyZXNvdXJjZU1vZGVsQ2xhc3MnLFxuICAgICAgICAncmVzb3VyY2VzRGF0YScsXG4gICAgICAgICdyZXNvdXJjZVN0b3JlQ2xhc3MnLFxuICAgICAgICAnc2lsZW5jZUluaXRpYWxDb21taXQnLFxuICAgICAgICAnc2tpcFN1Y2Nlc3NQcm9wZXJ0eScsXG4gICAgICAgICdzdG9yZUlkUHJvcGVydHknLFxuICAgICAgICAnc3VwcG9ydFNob3J0U3luY1Jlc3BvbnNlJyxcbiAgICAgICAgJ3Rhc2tNb2RlbENsYXNzJyxcbiAgICAgICAgJ3Rhc2tzRGF0YScsXG4gICAgICAgICd0YXNrU3RvcmVDbGFzcycsXG4gICAgICAgICd0b0pTT05SZXN1bHRGb3JtYXQnLFxuICAgICAgICAndHJhY2tSZXNwb25zZVR5cGUnLFxuICAgICAgICAndHJhbnNwb3J0JyxcbiAgICAgICAgJ3VzZVJhd0RhdGEnLFxuICAgICAgICAndmFsaWRhdGVSZXNwb25zZScsXG4gICAgICAgICd3cml0ZUFsbEZpZWxkcydcbiAgICBdO1xuXG4gICAgcHJpdmF0ZSBzdGF0aWMgYnJ5bnR1bVByb3BzOiBzdHJpbmdbXSA9IEJyeW50dW1UYXNrQm9hcmRQcm9qZWN0TW9kZWxDb21wb25lbnQuYnJ5bnR1bUZlYXR1cmVOYW1lcy5jb25jYXQoW1xuICAgICAgICAnYWxsQ2hpbGRyZW4nLFxuICAgICAgICAnYWxsVW5maWx0ZXJlZENoaWxkcmVuJyxcbiAgICAgICAgJ2Fzc2lnbm1lbnRzJyxcbiAgICAgICAgJ2Fzc2lnbm1lbnRTdG9yZScsXG4gICAgICAgICdjYWxsT25GdW5jdGlvbnMnLFxuICAgICAgICAnY2F0Y2hFdmVudEhhbmRsZXJFeGNlcHRpb25zJyxcbiAgICAgICAgJ2NydWRTdG9yZXMnLFxuICAgICAgICAnZGVwZW5kZW5jaWVzJyxcbiAgICAgICAgJ2RlcGVuZGVuY3lTdG9yZScsXG4gICAgICAgICdkZXNjZW5kYW50Q291bnQnLFxuICAgICAgICAnZXZlbnRzJyxcbiAgICAgICAgJ2V2ZW50U3RvcmUnLFxuICAgICAgICAnZm9yY2VTeW5jJyxcbiAgICAgICAgJ2hhc0dlbmVyYXRlZElkJyxcbiAgICAgICAgJ2lkJyxcbiAgICAgICAgJ2luY2x1ZGVMZWdhY3lEYXRhUHJvcGVydGllcycsXG4gICAgICAgICdpbmxpbmVEYXRhJyxcbiAgICAgICAgJ2ludGVybmFsSWQnLFxuICAgICAgICAnaXNDb21taXR0aW5nJyxcbiAgICAgICAgJ2lzQ3JlYXRpbmcnLFxuICAgICAgICAnaXNGdWxseUxvYWRlZCcsXG4gICAgICAgICdpc1ZhbGlkJyxcbiAgICAgICAgJ2pzb24nLFxuICAgICAgICAnbG9hZFVybCcsXG4gICAgICAgICdwYXJlbnRJZCcsXG4gICAgICAgICdwcmV2aW91c1NpYmxpbmdzVG90YWxDb3VudCcsXG4gICAgICAgICdyZWFkT25seScsXG4gICAgICAgICdyZW1vdGVDaGlsZENvdW50JyxcbiAgICAgICAgJ3Jlc291cmNlcycsXG4gICAgICAgICdyZXNvdXJjZVN0b3JlJyxcbiAgICAgICAgJ3Jlc291cmNlVGltZVJhbmdlcycsXG4gICAgICAgICdzaG91bGRTeW5jRGF0YU9uTG9hZCcsXG4gICAgICAgICdzdG0nLFxuICAgICAgICAnc3luY0FwcGx5U2VxdWVuY2UnLFxuICAgICAgICAnc3luY1VybCcsXG4gICAgICAgICd0YXNrcycsXG4gICAgICAgICd0YXNrU3RvcmUnLFxuICAgICAgICAndGltZVJhbmdlcycsXG4gICAgICAgICd0aW1lWm9uZScsXG4gICAgICAgICd2aXNpYmxlRGVzY2VuZGFudENvdW50J1xuICAgIF0pO1xuXG4gICAgcHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmO1xuICAgIHB1YmxpYyBpbnN0YW5jZSE6IFByb2plY3RNb2RlbDtcblxuICAgIHByaXZhdGUgYnJ5bnR1bUNvbmZpZyA9IHtcbiAgICAgICAgYWRvcHQgICAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgYXBwZW5kVG8gICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgaHJlZiAgICAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgYW5ndWxhckNvbXBvbmVudCA6IHRoaXMsXG4gICAgICAgIGZlYXR1cmVzICAgICAgICAgOiB7fSxcbiAgICAgICAgbGlzdGVuZXJzICAgICAgICA6IHt9XG4gICAgfTtcblxuICAgIGNvbnN0cnVjdG9yKGVsZW1lbnQ6IEVsZW1lbnRSZWYpIHtcbiAgICAgICAgdGhpcy5lbGVtZW50UmVmID0gZWxlbWVudDtcbiAgICB9XG5cbiAgICAvLyBDb25maWdzIG9ubHlcbiAgICBASW5wdXQoKSBhZGp1c3REdXJhdGlvblRvRFNUICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgYXNzaWdubWVudE1vZGVsQ2xhc3MgICAgICAgICAgICEgOiB0eXBlb2YgQXNzaWdubWVudE1vZGVsO1xuICAgIEBJbnB1dCgpIGFzc2lnbm1lbnRzRGF0YSAgICAgICAgICAgICAgICAhIDogQXNzaWdubWVudE1vZGVsW118QXNzaWdubWVudE1vZGVsQ29uZmlnW107XG4gICAgQElucHV0KCkgYXNzaWdubWVudFN0b3JlQ2xhc3MgICAgICAgICAgICEgOiB0eXBlb2YgQXNzaWdubWVudFN0b3JlfG9iamVjdDtcbiAgICBASW5wdXQoKSBhdXRvTG9hZCAgICAgICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgYXV0b1N5bmMgICAgICAgICAgICAgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGF1dG9TeW5jVGltZW91dCAgICAgICAgICAgICAgICAhIDogbnVtYmVyO1xuICAgIEBJbnB1dCgpIGJ1YmJsZUV2ZW50cyAgICAgICAgICAgICAgICAgICAhIDogb2JqZWN0O1xuICAgIEBJbnB1dCgpIGNoaWxkcmVuICAgICAgICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbnxvYmplY3RbXXxNb2RlbFtdfE1vZGVsQ29uZmlnW107XG4gICAgQElucHV0KCkgZGVwZW5kZW5jaWVzRGF0YSAgICAgICAgICAgICAgICEgOiBEZXBlbmRlbmN5TW9kZWxbXXxEZXBlbmRlbmN5TW9kZWxDb25maWdbXTtcbiAgICBASW5wdXQoKSBkZXBlbmRlbmN5TW9kZWxDbGFzcyAgICAgICAgICAgISA6IHR5cGVvZiBEZXBlbmRlbmN5TW9kZWw7XG4gICAgQElucHV0KCkgZGVwZW5kZW5jeVN0b3JlQ2xhc3MgICAgICAgICAgICEgOiB0eXBlb2YgRGVwZW5kZW5jeVN0b3JlfG9iamVjdDtcbiAgICBASW5wdXQoKSBlbmNvZGVyICAgICAgICAgICAgICAgICAgICAgICAgISA6IHtcbiAgICAgICAgcmVxdWVzdERhdGE/OiBvYmplY3RcbiAgICB9O1xuICAgIEBJbnB1dCgpIGV2ZW50c0RhdGEgICAgICAgICAgICAgICAgICAgICAhIDogRXZlbnRNb2RlbFtdfEV2ZW50TW9kZWxDb25maWdbXTtcbiAgICBASW5wdXQoKSBleHBhbmRlZCAgICAgICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgaWdub3JlUmVtb3RlQ2hhbmdlc0luU1RNICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGluY2x1ZGVDaGlsZHJlbkluUmVtb3ZlUmVxdWVzdCAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBsaXN0ZW5lcnMgICAgICAgICAgICAgICAgICAgICAgISA6IFByb2plY3RNb2RlbExpc3RlbmVycztcbiAgICBASW5wdXQoKSBvcmRlcmVkUGFyZW50SW5kZXggICAgICAgICAgICAgISA6IG51bWJlcjtcbiAgICBASW5wdXQoKSBwYXJlbnRJbmRleCAgICAgICAgICAgICAgICAgICAgISA6IG51bWJlcjtcbiAgICBASW5wdXQoKSBwaGFudG9tSWRGaWVsZCAgICAgICAgICAgICAgICAgISA6IHN0cmluZztcbiAgICBASW5wdXQoKSBwaGFudG9tUGFyZW50SWRGaWVsZCAgICAgICAgICAgISA6IHN0cmluZztcbiAgICBASW5wdXQoKSByZXNldElkc0JlZm9yZVN5bmMgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgcmVzb3VyY2VNb2RlbENsYXNzICAgICAgICAgICAgICEgOiB0eXBlb2YgUmVzb3VyY2VNb2RlbDtcbiAgICBASW5wdXQoKSByZXNvdXJjZXNEYXRhICAgICAgICAgICAgICAgICAgISA6IFJlc291cmNlTW9kZWxbXXxSZXNvdXJjZU1vZGVsQ29uZmlnW107XG4gICAgQElucHV0KCkgcmVzb3VyY2VTdG9yZUNsYXNzICAgICAgICAgICAgICEgOiB0eXBlb2YgUmVzb3VyY2VTdG9yZXxvYmplY3Q7XG4gICAgQElucHV0KCkgc2lsZW5jZUluaXRpYWxDb21taXQgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIHNraXBTdWNjZXNzUHJvcGVydHkgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBzdG9yZUlkUHJvcGVydHkgICAgICAgICAgICAgICAgISA6IHN0cmluZztcbiAgICBASW5wdXQoKSBzdXBwb3J0U2hvcnRTeW5jUmVzcG9uc2UgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgdGFza01vZGVsQ2xhc3MgICAgICAgICAgICAgICAgICEgOiB0eXBlb2YgVGFza01vZGVsO1xuICAgIEBJbnB1dCgpIHRhc2tzRGF0YSAgICAgICAgICAgICAgICAgICAgICAhIDogVGFza01vZGVsW118VGFza01vZGVsQ29uZmlnW107XG4gICAgQElucHV0KCkgdGFza1N0b3JlQ2xhc3MgICAgICAgICAgICAgICAgICEgOiB0eXBlb2YgVGFza1N0b3JlO1xuICAgIEBJbnB1dCgpIHRvSlNPTlJlc3VsdEZvcm1hdCAgICAgICAgICAgICAhIDogJ2lubGluZURhdGEnfCdtb2RlbCc7XG4gICAgQElucHV0KCkgdHJhY2tSZXNwb25zZVR5cGUgICAgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIHRyYW5zcG9ydCAgICAgICAgICAgICAgICAgICAgICAhIDoge1xuICAgICAgICBsb2FkPzogb2JqZWN0XG4gICAgICAgIHN5bmM/OiBvYmplY3RcbiAgICB9O1xuICAgIEBJbnB1dCgpIHVzZVJhd0RhdGEgICAgICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSB2YWxpZGF0ZVJlc3BvbnNlICAgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgd3JpdGVBbGxGaWVsZHMgICAgICAgICAgICAgICAgICEgOiBib29sZWFuO1xuXG4gICAgLy8gQ29uZmlncyBhbmQgcHJvcGVydGllc1xuICAgIEBJbnB1dCgpIGFzc2lnbm1lbnRzICAgICAgICAgICAgICAgICAhIDogQXNzaWdubWVudE1vZGVsW118QXNzaWdubWVudE1vZGVsQ29uZmlnW107XG4gICAgQElucHV0KCkgYXNzaWdubWVudFN0b3JlICAgICAgICAgICAgICEgOiBBc3NpZ25tZW50U3RvcmV8QXNzaWdubWVudFN0b3JlQ29uZmlnO1xuICAgIEBJbnB1dCgpIGNhbGxPbkZ1bmN0aW9ucyAgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBjYXRjaEV2ZW50SGFuZGxlckV4Y2VwdGlvbnMgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgY3J1ZFN0b3JlcyAgICAgICAgICAgICAgICAgICEgOiBDcnVkTWFuYWdlclN0b3JlRGVzY3JpcHRvcltdfFN0b3JlW118c3RyaW5nW118U3RvcmVDb25maWdbXTtcbiAgICBASW5wdXQoKSBkZXBlbmRlbmNpZXMgICAgICAgICAgICAgICAgISA6IERlcGVuZGVuY3lNb2RlbFtdfERlcGVuZGVuY3lNb2RlbENvbmZpZ1tdO1xuICAgIEBJbnB1dCgpIGRlcGVuZGVuY3lTdG9yZSAgICAgICAgICAgICAhIDogRGVwZW5kZW5jeVN0b3JlfERlcGVuZGVuY3lTdG9yZUNvbmZpZztcbiAgICBASW5wdXQoKSBldmVudHMgICAgICAgICAgICAgICAgICAgICAgISA6IEV2ZW50TW9kZWxbXXxFdmVudE1vZGVsQ29uZmlnW107XG4gICAgQElucHV0KCkgZXZlbnRTdG9yZSAgICAgICAgICAgICAgICAgICEgOiBFdmVudFN0b3JlfEV2ZW50U3RvcmVDb25maWc7XG4gICAgQElucHV0KCkgZm9yY2VTeW5jICAgICAgICAgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGlkICAgICAgICAgICAgICAgICAgICAgICAgICAhIDogc3RyaW5nfG51bWJlcjtcbiAgICBASW5wdXQoKSBpbmNsdWRlTGVnYWN5RGF0YVByb3BlcnRpZXMgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgaXNGdWxseUxvYWRlZCAgICAgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGpzb24gICAgICAgICAgICAgICAgICAgICAgICAhIDogc3RyaW5nO1xuICAgIEBJbnB1dCgpIGxvYWRVcmwgICAgICAgICAgICAgICAgICAgICAhIDogc3RyaW5nO1xuICAgIEBJbnB1dCgpIHBhcmVudElkICAgICAgICAgICAgICAgICAgICAhIDogbnVtYmVyfHN0cmluZ3xudWxsO1xuICAgIEBJbnB1dCgpIHJlYWRPbmx5ICAgICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSByZW1vdGVDaGlsZENvdW50ICAgICAgICAgICAgISA6IG51bWJlcjtcbiAgICBASW5wdXQoKSByZXNvdXJjZXMgICAgICAgICAgICAgICAgICAgISA6IFJlc291cmNlTW9kZWxbXXxSZXNvdXJjZU1vZGVsQ29uZmlnW107XG4gICAgQElucHV0KCkgcmVzb3VyY2VTdG9yZSAgICAgICAgICAgICAgICEgOiBSZXNvdXJjZVN0b3JlfFJlc291cmNlU3RvcmVDb25maWc7XG4gICAgQElucHV0KCkgc2hvdWxkU3luY0RhdGFPbkxvYWQgICAgICAgICEgOiAob3B0aW9uczogeyBzdG9yZTogU3RvcmUsIHJlY29yZHM6IE1vZGVsLCBkYXRhOiBvYmplY3RbXSB9KSA9PiBTZXQ8YW55Pnxib29sZWFuO1xuICAgIEBJbnB1dCgpIHN0bSAgICAgICAgICAgICAgICAgICAgICAgICAhIDogU3RhdGVUcmFja2luZ01hbmFnZXJ8U3RhdGVUcmFja2luZ01hbmFnZXJDb25maWc7XG4gICAgQElucHV0KCkgc3luY0FwcGx5U2VxdWVuY2UgICAgICAgICAgICEgOiBzdHJpbmdbXXxDcnVkTWFuYWdlclN0b3JlRGVzY3JpcHRvcltdO1xuICAgIEBJbnB1dCgpIHN5bmNVcmwgICAgICAgICAgICAgICAgICAgICAhIDogc3RyaW5nO1xuICAgIEBJbnB1dCgpIHRhc2tzICAgICAgICAgICAgICAgICAgICAgICAhIDogVGFza01vZGVsW118VGFza01vZGVsQ29uZmlnW107XG4gICAgQElucHV0KCkgdGFza1N0b3JlICAgICAgICAgICAgICAgICAgICEgOiBUYXNrU3RvcmV8VGFza1N0b3JlQ29uZmlnO1xuICAgIEBJbnB1dCgpIHRpbWVab25lICAgICAgICAgICAgICAgICAgICAhIDogc3RyaW5nfG51bWJlcjtcblxuICAgIC8vIFByb3BlcnRpZXMgb25seVxuICAgIEBJbnB1dCgpIGFsbENoaWxkcmVuICAgICAgICAgICAgICAgICEgOiBNb2RlbFtdO1xuICAgIEBJbnB1dCgpIGFsbFVuZmlsdGVyZWRDaGlsZHJlbiAgICAgICEgOiBNb2RlbFtdO1xuICAgIEBJbnB1dCgpIGRlc2NlbmRhbnRDb3VudCAgICAgICAgICAgICEgOiBudW1iZXI7XG4gICAgQElucHV0KCkgaGFzR2VuZXJhdGVkSWQgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgaW5saW5lRGF0YSAgICAgICAgICAgICAgICAgISA6IG9iamVjdDtcbiAgICBASW5wdXQoKSBpbnRlcm5hbElkICAgICAgICAgICAgICAgICAhIDogbnVtYmVyO1xuICAgIEBJbnB1dCgpIGlzQ29tbWl0dGluZyAgICAgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGlzQ3JlYXRpbmcgICAgICAgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGlzVmFsaWQgICAgICAgICAgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIHByZXZpb3VzU2libGluZ3NUb3RhbENvdW50ICEgOiBudW1iZXI7XG4gICAgQElucHV0KCkgcmVzb3VyY2VUaW1lUmFuZ2VzICAgICAgICAgISA6IFJlc291cmNlVGltZVJhbmdlTW9kZWxbXXxSZXNvdXJjZVRpbWVSYW5nZU1vZGVsQ29uZmlnW107XG4gICAgQElucHV0KCkgdGltZVJhbmdlcyAgICAgICAgICAgICAgICAgISA6IFRpbWVSYW5nZU1vZGVsW118VGltZVJhbmdlTW9kZWxDb25maWdbXTtcbiAgICBASW5wdXQoKSB2aXNpYmxlRGVzY2VuZGFudENvdW50ICAgICAhIDogbnVtYmVyO1xuXG4gICAgLy8gRXZlbnRzIGVtaXR0ZXJzXG4gICAgLyoqXG4gICAgICogRmlyZXMgYmVmb3JlIGFuIG9iamVjdCBpcyBkZXN0cm95ZWQuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7Q29yZS5CYXNlfSBldmVudC5zb3VyY2UgVGhlIE9iamVjdCB0aGF0IGlzIGJlaW5nIGRlc3Ryb3llZC5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25CZWZvcmVEZXN0cm95OiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBCYXNlIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlcyBiZWZvcmUgW2xvYWQgcmVxdWVzdF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9zY2hlZHVsZXIvZG9jcyNTY2hlZHVsZXIvY3J1ZC9BYnN0cmFjdENydWRNYW5hZ2VyTWl4aW4jZnVuY3Rpb24tbG9hZCkgaXMgc2VudC4gUmV0dXJuIGBmYWxzZWAgdG8gY2FuY2VsIGxvYWQgcmVxdWVzdC5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtTY2hlZHVsZXIuY3J1ZC5BYnN0cmFjdENydWRNYW5hZ2VyfSBldmVudC5zb3VyY2UgVGhlIENSVUQgbWFuYWdlci5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQucGFjayBUaGUgZGF0YSBwYWNrYWdlIHdoaWNoIGNvbnRhaW5zIGRhdGEgZm9yIGFsbCBzdG9yZXMgbWFuYWdlZCBieSB0aGUgY3J1ZCBtYW5hZ2VyLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkJlZm9yZUxvYWQ6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IEFic3RyYWN0Q3J1ZE1hbmFnZXIsIHBhY2s6IG9iamVjdCB9KSA9PiBQcm9taXNlPGJvb2xlYW4+fGJvb2xlYW58dm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIGJlZm9yZSBsb2FkZWQgZGF0YSBnZXQgYXBwbGllZCB0byB0aGUgc3RvcmVzLiBSZXR1cm4gYGZhbHNlYCB0byBwcmV2ZW50IGRhdGEgYXBwbHlpbmcuXG4gICAgICogVGhpcyBldmVudCBjYW4gYmUgdXNlZCBmb3Igc2VydmVyIGRhdGEgcHJlcHJvY2Vzc2luZy4gVG8gYWNoaWV2ZSBpdCB1c2VyIGNhbiBtb2RpZnkgdGhlIGByZXNwb25zZWAgb2JqZWN0LlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge1NjaGVkdWxlci5jcnVkLkFic3RyYWN0Q3J1ZE1hbmFnZXJ9IGV2ZW50LnNvdXJjZSBUaGUgQ1JVRCBtYW5hZ2VyLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudC5yZXNwb25zZSBUaGUgZGVjb2RlZCBzZXJ2ZXIgcmVzcG9uc2Ugb2JqZWN0LlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudC5vcHRpb25zIE9wdGlvbnMgcHJvdmlkZWQgdG8gdGhlIFtsb2FkXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3NjaGVkdWxlci9kb2NzI1NjaGVkdWxlci9jcnVkL0Fic3RyYWN0Q3J1ZE1hbmFnZXJNaXhpbiNmdW5jdGlvbi1sb2FkKSBtZXRob2QuXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQmVmb3JlTG9hZEFwcGx5OiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBBYnN0cmFjdENydWRNYW5hZ2VyLCByZXNwb25zZTogb2JqZWN0LCBvcHRpb25zOiBvYmplY3QgfSkgPT4gUHJvbWlzZTxib29sZWFuPnxib29sZWFufHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlcyBiZWZvcmUgc2VydmVyIHJlc3BvbnNlIGdldHMgYXBwbGllZCB0byB0aGUgc3RvcmVzLiBSZXR1cm4gYGZhbHNlYCB0byBwcmV2ZW50IGRhdGEgYXBwbHlpbmcuXG4gICAgICogVGhpcyBldmVudCBjYW4gYmUgdXNlZCBmb3Igc2VydmVyIGRhdGEgcHJlcHJvY2Vzc2luZy4gVG8gYWNoaWV2ZSBpdCB1c2VyIGNhbiBtb2RpZnkgdGhlIGByZXNwb25zZWAgb2JqZWN0LlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge1NjaGVkdWxlci5jcnVkLkFic3RyYWN0Q3J1ZE1hbmFnZXJ9IGV2ZW50LnNvdXJjZSBUaGUgQ1JVRCBtYW5hZ2VyLlxuICAgICAqIEBwYXJhbSB7J3N5bmMnLCdsb2FkJ30gZXZlbnQucmVxdWVzdFR5cGUgVGhlIHJlcXVlc3QgdHlwZSAoYHN5bmNgIG9yIGBsb2FkYCkuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50LnJlc3BvbnNlIFRoZSBkZWNvZGVkIHNlcnZlciByZXNwb25zZSBvYmplY3QuXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQmVmb3JlUmVzcG9uc2VBcHBseTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogQWJzdHJhY3RDcnVkTWFuYWdlciwgcmVxdWVzdFR5cGU6ICdzeW5jJ3wnbG9hZCcsIHJlc3BvbnNlOiBvYmplY3QgfSkgPT4gUHJvbWlzZTxib29sZWFuPnxib29sZWFufHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlcyBiZWZvcmUgYSByZXF1ZXN0IGlzIHNlbnQgdG8gdGhlIHNlcnZlci5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy90YXNrYm9hcmQvZG9jcy9hcGkvVGFza0JvYXJkL21vZGVsL1Byb2plY3RNb2RlbCNldmVudC1iZWZvcmVTZW5kKVxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge1NjaGVkdWxlci5jcnVkLkFic3RyYWN0Q3J1ZE1hbmFnZXJ9IGV2ZW50LmNydWRNYW5hZ2VyIFRoZSBDUlVEIG1hbmFnZXIuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50LnBhcmFtcyBIVFRQIHJlcXVlc3QgcGFyYW1zIHRvIGJlIHBhc3NlZCBpbiB0aGUgcmVxdWVzdCBVUkwuXG4gICAgICogQHBhcmFtIHsnc3luYycsJ2xvYWQnfSBldmVudC5yZXF1ZXN0VHlwZSBDcnVkTWFuYWdlciByZXF1ZXN0IHR5cGUgKGBsb2FkYC9gc3luY2ApXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50LnJlcXVlc3RDb25maWcgQ29uZmlndXJhdGlvbiBvYmplY3QgZm9yIEFqYXggcmVxdWVzdCBjYWxsXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQmVmb3JlU2VuZDogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IGNydWRNYW5hZ2VyOiBBYnN0cmFjdENydWRNYW5hZ2VyLCBwYXJhbXM6IG9iamVjdCwgcmVxdWVzdFR5cGU6ICdzeW5jJ3wnbG9hZCcsIHJlcXVlc3RDb25maWc6IG9iamVjdCB9KSA9PiBQcm9taXNlPHZvaWQ+KXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZXMgYmVmb3JlIFtzeW5jIHJlcXVlc3RdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvc2NoZWR1bGVyL2RvY3MjU2NoZWR1bGVyL2NydWQvQWJzdHJhY3RDcnVkTWFuYWdlck1peGluI2Z1bmN0aW9uLXN5bmMpIGlzIHNlbnQuIFJldHVybiBgZmFsc2VgIHRvIGNhbmNlbCBzeW5jIHJlcXVlc3QuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvdGFza2JvYXJkL2RvY3MvYXBpL1Rhc2tCb2FyZC9tb2RlbC9Qcm9qZWN0TW9kZWwjZXZlbnQtYmVmb3JlU3luYylcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtTY2hlZHVsZXIuY3J1ZC5BYnN0cmFjdENydWRNYW5hZ2VyfSBldmVudC5zb3VyY2UgVGhlIENSVUQgbWFuYWdlci5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQucGFjayBUaGUgZGF0YSBwYWNrYWdlIHdoaWNoIGNvbnRhaW5zIGRhdGEgZm9yIGFsbCBzdG9yZXMgbWFuYWdlZCBieSB0aGUgY3J1ZCBtYW5hZ2VyLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkJlZm9yZVN5bmM6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IEFic3RyYWN0Q3J1ZE1hbmFnZXIsIHBhY2s6IG9iamVjdCB9KSA9PiBQcm9taXNlPGJvb2xlYW4+fGJvb2xlYW58dm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIGJlZm9yZSBzeW5jIHJlc3BvbnNlIGRhdGEgZ2V0IGFwcGxpZWQgdG8gdGhlIHN0b3Jlcy4gUmV0dXJuIGBmYWxzZWAgdG8gcHJldmVudCBkYXRhIGFwcGx5aW5nLlxuICAgICAqIFRoaXMgZXZlbnQgY2FuIGJlIHVzZWQgZm9yIHNlcnZlciBkYXRhIHByZXByb2Nlc3NpbmcuIFRvIGFjaGlldmUgaXQgdXNlciBjYW4gbW9kaWZ5IHRoZSBgcmVzcG9uc2VgIG9iamVjdC5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtTY2hlZHVsZXIuY3J1ZC5BYnN0cmFjdENydWRNYW5hZ2VyfSBldmVudC5zb3VyY2UgVGhlIENSVUQgbWFuYWdlci5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQucmVzcG9uc2UgVGhlIGRlY29kZWQgc2VydmVyIHJlc3BvbnNlIG9iamVjdC5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25CZWZvcmVTeW5jQXBwbHk6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IEFic3RyYWN0Q3J1ZE1hbmFnZXIsIHJlc3BvbnNlOiBvYmplY3QgfSkgPT4gUHJvbWlzZTxib29sZWFuPnxib29sZWFufHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlcyB3aGVuIGFueSBvdGhlciBldmVudCBpcyBmaXJlZCBmcm9tIHRoZSBvYmplY3QuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvdGFza2JvYXJkL2RvY3MvYXBpL1Rhc2tCb2FyZC9tb2RlbC9Qcm9qZWN0TW9kZWwjZXZlbnQtY2F0Y2hBbGwpXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7e1trZXk6IHN0cmluZ106IGFueSwgdHlwZTogc3RyaW5nfX0gZXZlbnQuZXZlbnQgVGhlIE9iamVjdCB0aGF0IGNvbnRhaW5zIGV2ZW50IGRldGFpbHNcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZXZlbnQuZXZlbnQudHlwZSBUaGUgdHlwZSBvZiB0aGUgZXZlbnQgd2hpY2ggaXMgY2F1Z2h0IGJ5IHRoZSBsaXN0ZW5lclxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkNhdGNoQWxsOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHtba2V5OiBzdHJpbmddOiBhbnksIHR5cGU6IHN0cmluZ30pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIGRhdGEgaW4gYW55IG9mIHRoZSBwcm9qZWN0cyBzdG9yZXMgY2hhbmdlcy5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy90YXNrYm9hcmQvZG9jcy9hcGkvVGFza0JvYXJkL21vZGVsL1Byb2plY3RNb2RlbCNldmVudC1jaGFuZ2UpXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7U2NoZWR1bGVyLm1vZGVsLlNjaGVkdWxlclByb2plY3RNb2RlbCxhbnl9IGV2ZW50LnNvdXJjZSBUaGlzIHByb2plY3RcbiAgICAgKiBAcGFyYW0ge0NvcmUuZGF0YS5TdG9yZX0gZXZlbnQuc3RvcmUgQWZmZWN0ZWQgc3RvcmVcbiAgICAgKiBAcGFyYW0geydyZW1vdmUnLCdyZW1vdmVBbGwnLCdhZGQnLCdjbGVhcmNoYW5nZXMnLCdmaWx0ZXInLCd1cGRhdGUnLCdkYXRhc2V0JywncmVwbGFjZSd9IGV2ZW50LmFjdGlvbiBOYW1lIG9mIGFjdGlvbiB3aGljaCB0cmlnZ2VyZWQgdGhlIGNoYW5nZS4gTWF5IGJlIG9uZSBvZjogICogYCdyZW1vdmUnYCAqIGAncmVtb3ZlQWxsJ2AgKiBgJ2FkZCdgICogYCdjbGVhcmNoYW5nZXMnYCAqIGAnZmlsdGVyJ2AgKiBgJ3VwZGF0ZSdgICogYCdkYXRhc2V0J2AgKiBgJ3JlcGxhY2UnYFxuICAgICAqIEBwYXJhbSB7Q29yZS5kYXRhLk1vZGVsfSBldmVudC5yZWNvcmQgQ2hhbmdlZCByZWNvcmQsIGZvciBhY3Rpb25zIHRoYXQgYWZmZWN0cyBleGFjdGx5IG9uZSByZWNvcmQgKGAndXBkYXRlJ2ApXG4gICAgICogQHBhcmFtIHtDb3JlLmRhdGEuTW9kZWxbXX0gZXZlbnQucmVjb3JkcyBDaGFuZ2VkIHJlY29yZHMsIHBhc3NlZCBmb3IgYWxsIGFjdGlvbnMgZXhjZXB0IGAncmVtb3ZlQWxsJ2BcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQuY2hhbmdlcyBQYXNzZWQgZm9yIHRoZSBgJ3VwZGF0ZSdgIGFjdGlvbiwgaW5mbyBvbiB3aGljaCByZWNvcmQgZmllbGRzIGNoYW5nZWRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25DaGFuZ2U6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IFNjaGVkdWxlclByb2plY3RNb2RlbHxhbnksIHN0b3JlOiBTdG9yZSwgYWN0aW9uOiAncmVtb3ZlJ3wncmVtb3ZlQWxsJ3wnYWRkJ3wnY2xlYXJjaGFuZ2VzJ3wnZmlsdGVyJ3wndXBkYXRlJ3wnZGF0YXNldCd8J3JlcGxhY2UnLCByZWNvcmQ6IE1vZGVsLCByZWNvcmRzOiBNb2RlbFtdLCBjaGFuZ2VzOiBvYmplY3QgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gdGhlIGVuZ2luZSBoYXMgZmluaXNoZWQgaXRzIGNhbGN1bGF0aW9ucyBhbmQgdGhlIHJlc3VsdHMgaGFzIGJlZW4gd3JpdHRlbiBiYWNrIHRvIHRoZSByZWNvcmRzLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3Rhc2tib2FyZC9kb2NzL2FwaS9UYXNrQm9hcmQvbW9kZWwvUHJvamVjdE1vZGVsI2V2ZW50LWRhdGFSZWFkeSlcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtTY2hlZHVsZXIubW9kZWwuU2NoZWR1bGVyUHJvamVjdE1vZGVsLGFueX0gZXZlbnQuc291cmNlIFRoZSBwcm9qZWN0XG4gICAgICogQHBhcmFtIHtib29sZWFufSBldmVudC5pc0luaXRpYWxDb21taXQgRmxhZyB0aGF0IHNob3dzIGlmIHRoaXMgY29tbWl0IGlzIGluaXRpYWxcbiAgICAgKiBAcGFyYW0ge1NldDxhbnk+fSBldmVudC5yZWNvcmRzIFNldCBvZiBhbGwgW01vZGVsXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3Rhc2tib2FyZC9kb2NzL2FwaS9Db3JlL2RhdGEvTW9kZWwpcyB0aGF0IHdlcmUgbW9kaWZpZWQgaW4gdGhlIGNvbXBsZXRlZCB0cmFuc2FjdGlvbi4gVXNlIHRoZSBbbW9kaWZpY2F0aW9uc10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy90YXNrYm9hcmQvZG9jcy9hcGkvQ29yZS9kYXRhL01vZGVsI3Byb3BlcnR5LW1vZGlmaWNhdGlvbnMpIHByb3BlcnR5IG9mIGVhY2ggTW9kZWwgdG8gaWRlbnRpZnkgbW9kaWZpZWQgZmllbGRzLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkRhdGFSZWFkeTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogU2NoZWR1bGVyUHJvamVjdE1vZGVsfGFueSwgaXNJbml0aWFsQ29tbWl0OiBib29sZWFuLCByZWNvcmRzOiBTZXQ8YW55PiB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZXMgd2hlbiBhbiBvYmplY3QgaXMgZGVzdHJveWVkLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0NvcmUuQmFzZX0gZXZlbnQuc291cmNlIFRoZSBPYmplY3QgdGhhdCBpcyBiZWluZyBkZXN0cm95ZWQuXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uRGVzdHJveTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogQmFzZSB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZXMgd2hlbiBkYXRhIGluIGFueSBvZiB0aGUgcmVnaXN0ZXJlZCBkYXRhIHN0b3JlcyBpcyBjaGFuZ2VkLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3Rhc2tib2FyZC9kb2NzL2FwaS9UYXNrQm9hcmQvbW9kZWwvUHJvamVjdE1vZGVsI2V2ZW50LWhhc0NoYW5nZXMpXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7U2NoZWR1bGVyLmNydWQuQWJzdHJhY3RDcnVkTWFuYWdlcn0gZXZlbnQuc291cmNlIFRoZSBDUlVEIG1hbmFnZXIuXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uSGFzQ2hhbmdlczogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogQWJzdHJhY3RDcnVkTWFuYWdlciB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZXMgb24gc3VjY2Vzc2Z1bCBbbG9hZCByZXF1ZXN0XShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3NjaGVkdWxlci9kb2NzI1NjaGVkdWxlci9jcnVkL0Fic3RyYWN0Q3J1ZE1hbmFnZXJNaXhpbiNmdW5jdGlvbi1sb2FkKSBjb21wbGV0aW9uIGFmdGVyIGRhdGEgZ2V0cyBsb2FkZWQgdG8gdGhlIHN0b3Jlcy5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtTY2hlZHVsZXIuY3J1ZC5BYnN0cmFjdENydWRNYW5hZ2VyfSBldmVudC5zb3VyY2UgVGhlIENSVUQgbWFuYWdlci5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQucmVzcG9uc2UgVGhlIGRlY29kZWQgc2VydmVyIHJlc3BvbnNlIG9iamVjdC5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQucmVzcG9uc2VPcHRpb25zIFtERVBSRUNBVEVEXSBzZWUgYHJlcXVlc3RPcHRpb25zYFxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudC5yZXF1ZXN0T3B0aW9ucyBUaGUgcmVxdWVzdCBvcHRpb25zIHBhc3NlZCB0byB0aGUgcmVxdWVzdC5cbiAgICAgKiBAcGFyYW0ge1Jlc3BvbnNlfSBldmVudC5yYXdSZXNwb25zZSBUaGUgbmF0aXZlIFJlc3BvbnNlIG9iamVjdFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkxvYWQ6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IEFic3RyYWN0Q3J1ZE1hbmFnZXIsIHJlc3BvbnNlOiBvYmplY3QsIHJlc3BvbnNlT3B0aW9uczogb2JqZWN0LCByZXF1ZXN0T3B0aW9uczogb2JqZWN0LCByYXdSZXNwb25zZTogYW55IH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlZCBhZnRlciBbbG9hZCByZXF1ZXN0XShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3NjaGVkdWxlci9kb2NzI1NjaGVkdWxlci9jcnVkL0Fic3RyYWN0Q3J1ZE1hbmFnZXJNaXhpbiNmdW5jdGlvbi1sb2FkKSB3YXMgY2FuY2VsZWQgYnkgc29tZSBbYmVmb3JlTG9hZF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9zY2hlZHVsZXIvZG9jcyNTY2hlZHVsZXIvY3J1ZC9BYnN0cmFjdENydWRNYW5hZ2VyTWl4aW4jZXZlbnQtYmVmb3JlTG9hZClcbiAgICAgKiBsaXN0ZW5lciBvciBkdWUgdG8gaW5jb21wbGV0ZSBwcmlvciBsb2FkIHJlcXVlc3QuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7U2NoZWR1bGVyLmNydWQuQWJzdHJhY3RDcnVkTWFuYWdlcn0gZXZlbnQuc291cmNlIFRoZSBDUlVEIG1hbmFnZXIuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50LnBhY2sgVGhlIGRhdGEgcGFja2FnZSB3aGljaCBjb250YWlucyBkYXRhIGZvciBhbGwgc3RvcmVzIG1hbmFnZWQgYnkgdGhlIGNydWQgbWFuYWdlci5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25Mb2FkQ2FuY2VsZWQ6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IEFic3RyYWN0Q3J1ZE1hbmFnZXIsIHBhY2s6IG9iamVjdCB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZXMgd2hlbiBhIFtsb2FkIHJlcXVlc3RdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvc2NoZWR1bGVyL2RvY3MjU2NoZWR1bGVyL2NydWQvQWJzdHJhY3RDcnVkTWFuYWdlck1peGluI2Z1bmN0aW9uLWxvYWQpIGZhaWxzLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge1NjaGVkdWxlci5jcnVkLkFic3RyYWN0Q3J1ZE1hbmFnZXJ9IGV2ZW50LnNvdXJjZSBUaGUgQ1JVRCBtYW5hZ2VyIGluc3RhbmNlLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudC5yZXNwb25zZSBUaGUgZGVjb2RlZCBzZXJ2ZXIgcmVzcG9uc2Ugb2JqZWN0LlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBldmVudC5yZXNwb25zZVRleHQgVGhlIHJhdyBzZXJ2ZXIgcmVzcG9uc2UgdGV4dFxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudC5yZXNwb25zZU9wdGlvbnMgW0RFUFJFQ0FURURdIHNlZSBgcmVxdWVzdE9wdGlvbnNgXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50LnJlcXVlc3RPcHRpb25zIFRoZSByZXF1ZXN0IG9wdGlvbnMgcGFzc2VkIHRvIHRoZSByZXF1ZXN0LlxuICAgICAqIEBwYXJhbSB7UmVzcG9uc2V9IGV2ZW50LnJhd1Jlc3BvbnNlIFRoZSBuYXRpdmUgUmVzcG9uc2Ugb2JqZWN0XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uTG9hZEZhaWw6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IEFic3RyYWN0Q3J1ZE1hbmFnZXIsIHJlc3BvbnNlOiBvYmplY3QsIHJlc3BvbnNlVGV4dDogc3RyaW5nLCByZXNwb25zZU9wdGlvbnM6IG9iamVjdCwgcmVxdWVzdE9wdGlvbnM6IG9iamVjdCwgcmF3UmVzcG9uc2U6IGFueSB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZXMgd2hlbiByZWdpc3RlcmVkIHN0b3JlcyBnZXQgaW50byBzdGF0ZSB3aGVuIHRoZXkgZG9uJ3QgaGF2ZSBhbnlcbiAgICAgKiBub3QgcGVyc2lzdGVkIGNoYW5nZS4gVGhpcyBoYXBwZW5zIGFmdGVyIFtsb2FkXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3NjaGVkdWxlci9kb2NzI1NjaGVkdWxlci9jcnVkL0Fic3RyYWN0Q3J1ZE1hbmFnZXJNaXhpbiNmdW5jdGlvbi1sb2FkKSBvciBbc3luY10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9zY2hlZHVsZXIvZG9jcyNTY2hlZHVsZXIvY3J1ZC9BYnN0cmFjdENydWRNYW5hZ2VyTWl4aW4jZnVuY3Rpb24tc3luYykgcmVxdWVzdFxuICAgICAqIGNvbXBsZXRpb24uIE9yIHRoaXMgbWF5IGhhcHBlbiBhZnRlciBhIHJlY29yZCB1cGRhdGUgd2hpY2ggdHVybnMgaXRzIGZpZWxkcyBiYWNrIHRvIHRoZWlyIG9yaWdpbmFsIHN0YXRlLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3Rhc2tib2FyZC9kb2NzL2FwaS9UYXNrQm9hcmQvbW9kZWwvUHJvamVjdE1vZGVsI2V2ZW50LW5vQ2hhbmdlcylcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtTY2hlZHVsZXIuY3J1ZC5BYnN0cmFjdENydWRNYW5hZ2VyfSBldmVudC5zb3VyY2UgVGhlIENSVUQgbWFuYWdlci5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25Ob0NoYW5nZXM6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IEFic3RyYWN0Q3J1ZE1hbmFnZXIgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIG9uIHN1Y2Nlc3NmdWwgcmVxdWVzdCBjb21wbGV0aW9uIGFmdGVyIGRhdGEgZ2V0cyBhcHBsaWVkIHRvIHRoZSBzdG9yZXMuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7U2NoZWR1bGVyLmNydWQuQWJzdHJhY3RDcnVkTWFuYWdlcn0gZXZlbnQuc291cmNlIFRoZSBDUlVEIG1hbmFnZXIuXG4gICAgICogQHBhcmFtIHsnc3luYycsJ2xvYWQnfSBldmVudC5yZXF1ZXN0VHlwZSBUaGUgcmVxdWVzdCB0eXBlIChgc3luY2Agb3IgYGxvYWRgKS5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQucmVzcG9uc2UgVGhlIGRlY29kZWQgc2VydmVyIHJlc3BvbnNlIG9iamVjdC5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQucmVzcG9uc2VPcHRpb25zIFtERVBSRUNBVEVEXSBzZWUgYHJlcXVlc3RPcHRpb25zYFxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudC5yZXF1ZXN0T3B0aW9ucyBUaGUgcmVxdWVzdCBvcHRpb25zIHBhc3NlZCB0byB0aGUgcmVxdWVzdC5cbiAgICAgKiBAcGFyYW0ge1Jlc3BvbnNlfSBldmVudC5yYXdSZXNwb25zZSBUaGUgbmF0aXZlIFJlc3BvbnNlIG9iamVjdFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvblJlcXVlc3REb25lOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBBYnN0cmFjdENydWRNYW5hZ2VyLCByZXF1ZXN0VHlwZTogJ3N5bmMnfCdsb2FkJywgcmVzcG9uc2U6IG9iamVjdCwgcmVzcG9uc2VPcHRpb25zOiBvYmplY3QsIHJlcXVlc3RPcHRpb25zOiBvYmplY3QsIHJhd1Jlc3BvbnNlOiBhbnkgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIHdoZW4gYSByZXF1ZXN0IGZhaWxzLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge1NjaGVkdWxlci5jcnVkLkFic3RyYWN0Q3J1ZE1hbmFnZXJ9IGV2ZW50LnNvdXJjZSBUaGUgQ1JVRCBtYW5hZ2VyIGluc3RhbmNlLlxuICAgICAqIEBwYXJhbSB7J3N5bmMnLCdsb2FkJ30gZXZlbnQucmVxdWVzdFR5cGUgVGhlIHJlcXVlc3QgdHlwZSAoYHN5bmNgIG9yIGBsb2FkYCkuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50LnJlc3BvbnNlIFRoZSBkZWNvZGVkIHNlcnZlciByZXNwb25zZSBvYmplY3QuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50LnJlc3BvbnNlVGV4dCBUaGUgcmF3IHNlcnZlciByZXNwb25zZSB0ZXh0XG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50LnJlc3BvbnNlT3B0aW9ucyBbREVQUkVDQVRFRF0gc2VlIGByZXF1ZXN0T3B0aW9uc2BcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQucmVxdWVzdE9wdGlvbnMgVGhlIHJlcXVlc3Qgb3B0aW9ucyBwYXNzZWQgdG8gdGhlIHJlcXVlc3QuXG4gICAgICogQHBhcmFtIHtSZXNwb25zZX0gZXZlbnQucmF3UmVzcG9uc2UgVGhlIG5hdGl2ZSBSZXNwb25zZSBvYmplY3RcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25SZXF1ZXN0RmFpbDogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogQWJzdHJhY3RDcnVkTWFuYWdlciwgcmVxdWVzdFR5cGU6ICdzeW5jJ3wnbG9hZCcsIHJlc3BvbnNlOiBvYmplY3QsIHJlc3BvbnNlVGV4dDogc3RyaW5nLCByZXNwb25zZU9wdGlvbnM6IG9iamVjdCwgcmVxdWVzdE9wdGlvbnM6IG9iamVjdCwgcmF3UmVzcG9uc2U6IGFueSB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZXMgb24gc3VjY2Vzc2Z1bCBbc3luYyByZXF1ZXN0XShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3NjaGVkdWxlci9kb2NzI1NjaGVkdWxlci9jcnVkL0Fic3RyYWN0Q3J1ZE1hbmFnZXJNaXhpbiNmdW5jdGlvbi1zeW5jKSBjb21wbGV0aW9uLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge1NjaGVkdWxlci5jcnVkLkFic3RyYWN0Q3J1ZE1hbmFnZXJ9IGV2ZW50LnNvdXJjZSBUaGUgQ1JVRCBtYW5hZ2VyLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudC5yZXNwb25zZSBUaGUgZGVjb2RlZCBzZXJ2ZXIgcmVzcG9uc2Ugb2JqZWN0LlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudC5yZXNwb25zZU9wdGlvbnMgW0RFUFJFQ0FURURdIHNlZSBgcmVxdWVzdE9wdGlvbnNgXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50LnJlcXVlc3RPcHRpb25zIFRoZSByZXF1ZXN0IG9wdGlvbnMgcGFzc2VkIHRvIHRoZSByZXF1ZXN0LlxuICAgICAqIEBwYXJhbSB7UmVzcG9uc2V9IGV2ZW50LnJhd1Jlc3BvbnNlIFRoZSBuYXRpdmUgUmVzcG9uc2Ugb2JqZWN0XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uU3luYzogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogQWJzdHJhY3RDcnVkTWFuYWdlciwgcmVzcG9uc2U6IG9iamVjdCwgcmVzcG9uc2VPcHRpb25zOiBvYmplY3QsIHJlcXVlc3RPcHRpb25zOiBvYmplY3QsIHJhd1Jlc3BvbnNlOiBhbnkgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIGFmdGVyIFtzeW5jIHJlcXVlc3RdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvc2NoZWR1bGVyL2RvY3MjU2NoZWR1bGVyL2NydWQvQWJzdHJhY3RDcnVkTWFuYWdlck1peGluI2Z1bmN0aW9uLXN5bmMpIHdhcyBjYW5jZWxlZCBieSBzb21lIFtiZWZvcmVTeW5jXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3NjaGVkdWxlci9kb2NzI1NjaGVkdWxlci9jcnVkL0Fic3RyYWN0Q3J1ZE1hbmFnZXJNaXhpbiNldmVudC1iZWZvcmVTeW5jKSBsaXN0ZW5lci5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtTY2hlZHVsZXIuY3J1ZC5BYnN0cmFjdENydWRNYW5hZ2VyfSBldmVudC5zb3VyY2UgVGhlIENSVUQgbWFuYWdlci5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQucGFjayBUaGUgZGF0YSBwYWNrYWdlIHdoaWNoIGNvbnRhaW5zIGRhdGEgZm9yIGFsbCBzdG9yZXMgbWFuYWdlZCBieSB0aGUgY3J1ZCBtYW5hZ2VyLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvblN5bmNDYW5jZWxlZDogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogQWJzdHJhY3RDcnVkTWFuYWdlciwgcGFjazogb2JqZWN0IH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlcyBhZnRlciBbc3luYyByZXF1ZXN0XShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3NjaGVkdWxlci9kb2NzI1NjaGVkdWxlci9jcnVkL0Fic3RyYWN0Q3J1ZE1hbmFnZXJNaXhpbiNmdW5jdGlvbi1zeW5jKSB3YXMgZGVsYXllZCBkdWUgdG8gaW5jb21wbGV0ZSBwcmV2aW91cyBvbmUuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7U2NoZWR1bGVyLmNydWQuQWJzdHJhY3RDcnVkTWFuYWdlcn0gZXZlbnQuc291cmNlIFRoZSBDUlVEIG1hbmFnZXIuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50LmFyZ3VtZW50cyBUaGUgYXJndW1lbnRzIG9mIFtzeW5jXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3NjaGVkdWxlci9kb2NzI1NjaGVkdWxlci9jcnVkL0Fic3RyYWN0Q3J1ZE1hbmFnZXJNaXhpbiNmdW5jdGlvbi1zeW5jKSBjYWxsLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvblN5bmNEZWxheWVkOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBBYnN0cmFjdENydWRNYW5hZ2VyLCBhcmd1bWVudHM6IG9iamVjdCB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZXMgd2hlbiBhIFtzeW5jIHJlcXVlc3RdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvc2NoZWR1bGVyL2RvY3MjU2NoZWR1bGVyL2NydWQvQWJzdHJhY3RDcnVkTWFuYWdlck1peGluI2Z1bmN0aW9uLXN5bmMpIGZhaWxzLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge1NjaGVkdWxlci5jcnVkLkFic3RyYWN0Q3J1ZE1hbmFnZXJ9IGV2ZW50LnNvdXJjZSBUaGUgQ1JVRCBtYW5hZ2VyIGluc3RhbmNlLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudC5yZXNwb25zZSBUaGUgZGVjb2RlZCBzZXJ2ZXIgcmVzcG9uc2Ugb2JqZWN0LlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBldmVudC5yZXNwb25zZVRleHQgVGhlIHJhdyBzZXJ2ZXIgcmVzcG9uc2UgdGV4dFxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudC5yZXNwb25zZU9wdGlvbnMgW0RFUFJFQ0FURURdIHNlZSBgcmVxdWVzdE9wdGlvbnNgXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50LnJlcXVlc3RPcHRpb25zIFRoZSByZXF1ZXN0IG9wdGlvbnMgcGFzc2VkIHRvIHRoZSByZXF1ZXN0LlxuICAgICAqIEBwYXJhbSB7UmVzcG9uc2V9IGV2ZW50LnJhd1Jlc3BvbnNlIFRoZSBuYXRpdmUgUmVzcG9uc2Ugb2JqZWN0XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uU3luY0ZhaWw6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IEFic3RyYWN0Q3J1ZE1hbmFnZXIsIHJlc3BvbnNlOiBvYmplY3QsIHJlc3BvbnNlVGV4dDogc3RyaW5nLCByZXNwb25zZU9wdGlvbnM6IG9iamVjdCwgcmVxdWVzdE9wdGlvbnM6IG9iamVjdCwgcmF3UmVzcG9uc2U6IGFueSB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYW5kIGFwcGVuZCB0aGUgdW5kZXJseWluZyB3aWRnZXRcbiAgICAgKi9cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgY29uc3RcbiAgICAgICAgICAgIG1lID0gdGhpcyxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBlbGVtZW50UmVmLFxuICAgICAgICAgICAgICAgIGJyeW50dW1Db25maWdcbiAgICAgICAgICAgIH0gPSBtZSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpbnN0YW5jZUNsYXNzLFxuICAgICAgICAgICAgICAgIGluc3RhbmNlTmFtZSxcbiAgICAgICAgICAgICAgICBicnludHVtQ29uZmlncyxcbiAgICAgICAgICAgICAgICBicnludHVtRXZlbnRzXG4gICAgICAgICAgICB9ID0gQnJ5bnR1bVRhc2tCb2FyZFByb2plY3RNb2RlbENvbXBvbmVudDtcblxuICAgICAgICBicnludHVtQ29uZmlncy5maWx0ZXIocHJvcCA9PiBwcm9wIGluIHRoaXMpLmZvckVhY2gocHJvcCA9PiB7XG4gICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICBXcmFwcGVySGVscGVyLmFwcGx5UHJvcFZhbHVlKGJyeW50dW1Db25maWcsIHByb3AsIHRoaXNbcHJvcF0pO1xuICAgICAgICAgICAgaWYgKFsnZmVhdHVyZXMnLCAnY29uZmlnJ10uaW5jbHVkZXMocHJvcCkpIHtcbiAgICAgICAgICAgICAgICBXcmFwcGVySGVscGVyLmRldldhcm5pbmdDb25maWdQcm9wKGluc3RhbmNlTmFtZSwgcHJvcCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIGJyeW50dW1FdmVudHMuZmlsdGVyKGV2ZW50ID0+IHRoaXNbZXZlbnRdICYmIHRoaXNbZXZlbnRdLm9ic2VydmVycy5sZW5ndGggPiAwKS5mb3JFYWNoKGV2ZW50ID0+IHtcbiAgICAgICAgICAgIGNvbnN0XG4gICAgICAgICAgICAgICAgdW5jYXBpdGFsaXplID0gKHN0cjogc3RyaW5nKSA9PiBzdHIuY2hhckF0KDApLnRvTG93ZXJDYXNlKCkgKyBzdHIuc2xpY2UoMSksXG4gICAgICAgICAgICAgICAgZXZlbnROYW1lID0gKHN0cjogc3RyaW5nKSA9PiB1bmNhcGl0YWxpemUoc3RyLnNsaWNlKDIpKTtcblxuICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgYnJ5bnR1bUNvbmZpZy5saXN0ZW5lcnNbZXZlbnROYW1lKGV2ZW50KV0gPSBlID0+IHtcbiAgICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICAgICAgbWVbZXZlbnRdLmVtaXQoZSk7XG4gICAgICAgICAgICAgICAgLy8gRXZlbnRFbWl0dGVyIGRvZXMgbm90IHJldHVybiB2YWx1ZXMgaW4gdGhlIG5vcm1hbCB3YXksIHdvcmsgYXJvdW5kIGl0IGJ5IHNldHRpbmcgYHJldHVyblZhbHVlYCBmbGFnXG4gICAgICAgICAgICAgICAgLy8gaW4gQW5ndWxhciBsaXN0ZW5lcnNcbiAgICAgICAgICAgICAgICByZXR1cm4gZS5yZXR1cm5WYWx1ZTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIElmIGNvbXBvbmVudCBoYXMgbm8gY29udGFpbmVyIHNwZWNpZmllZCBpbiBjb25maWcgdGhlbiB1c2UgYWRvcHQgdG8gV3JhcHBlcidzIGVsZW1lbnRcbiAgICAgICAgY29uc3RcbiAgICAgICAgICAgIGNvbnRhaW5lclBhcmFtID0gW1xuICAgICAgICAgICAgICAgICdhZG9wdCcsXG4gICAgICAgICAgICAgICAgJ2FwcGVuZFRvJyxcbiAgICAgICAgICAgICAgICAnaW5zZXJ0QWZ0ZXInLFxuICAgICAgICAgICAgICAgICdpbnNlcnRCZWZvcmUnXG4gICAgICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgXS5maW5kKHByb3AgPT4gYnJ5bnR1bUNvbmZpZ1twcm9wXSk7XG4gICAgICAgIGlmICghY29udGFpbmVyUGFyYW0pIHtcbiAgICAgICAgICAgIGlmIChpbnN0YW5jZU5hbWUgPT09ICdCdXR0b24nIHx8IGVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5nZXRSb290Tm9kZSgpIGluc3RhbmNlb2YgU2hhZG93Um9vdCkge1xuICAgICAgICAgICAgICAgIC8vIEJ1dHRvbiBzaG91bGQgYWx3YXlzIGJlIDxhPiBvciA8YnV0dG9uPiBpbnNpZGUgb3duZXIgZWxlbWVudFxuICAgICAgICAgICAgICAgIGJyeW50dW1Db25maWcuYXBwZW5kVG8gPSBlbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBicnludHVtQ29uZmlnLmFkb3B0ID0gZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgV3JhcHBlckhlbHBlci5kZXZXYXJuaW5nQ29udGFpbmVyKGluc3RhbmNlTmFtZSwgY29udGFpbmVyUGFyYW0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICBtZS5pbnN0YW5jZSA9IGluc3RhbmNlTmFtZSA9PT0gJ1dpZGdldCcgPyBXaWRnZXQuY3JlYXRlKGJyeW50dW1Db25maWcpIDogbmV3IGluc3RhbmNlQ2xhc3MoYnJ5bnR1bUNvbmZpZyk7XG5cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBXYXRjaCBmb3IgY2hhbmdlc1xuICAgICAqIEBwYXJhbSBjaGFuZ2VzXG4gICAgICovXG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgICAgICBjb25zdFxuICAgICAgICAgICAgeyBpbnN0YW5jZSB9ID0gdGhpcyxcbiAgICAgICAgICAgIHsgaW5zdGFuY2VOYW1lIH0gPSBCcnludHVtVGFza0JvYXJkUHJvamVjdE1vZGVsQ29tcG9uZW50O1xuICAgICAgICBpZiAoIWluc3RhbmNlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gSXRlcmF0ZSBvdmVyIGFsbCBjaGFuZ2VzXG4gICAgICAgIE9iamVjdC5lbnRyaWVzKGNoYW5nZXMpLmZvckVhY2goKFtwcm9wLCBjaGFuZ2VdKSA9PiB7XG4gICAgICAgICAgICBjb25zdFxuICAgICAgICAgICAgICAgIG5ld1ZhbHVlID0gKGNoYW5nZSBhcyBTaW1wbGVDaGFuZ2UpLmN1cnJlbnRWYWx1ZSxcbiAgICAgICAgICAgICAgICB7IGluc3RhbmNlIH0gPSB0aGlzLFxuICAgICAgICAgICAgICAgIHsgYnJ5bnR1bUNvbmZpZ3NPbmx5LCBicnludHVtUHJvcHMgfSA9IEJyeW50dW1UYXNrQm9hcmRQcm9qZWN0TW9kZWxDb21wb25lbnQ7XG4gICAgICAgICAgICBpZiAoYnJ5bnR1bVByb3BzLmluY2x1ZGVzKHByb3ApKSB7XG4gICAgICAgICAgICAgICAgV3JhcHBlckhlbHBlci5hcHBseVByb3BWYWx1ZShpbnN0YW5jZSwgcHJvcCwgbmV3VmFsdWUsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICBpZiAoYnJ5bnR1bUNvbmZpZ3NPbmx5LmluY2x1ZGVzKHByb3ApKSB7XG4gICAgICAgICAgICAgICAgICAgIFdyYXBwZXJIZWxwZXIuZGV2V2FybmluZ1VwZGF0ZVByb3AoaW5zdGFuY2VOYW1lLCBwcm9wKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERlc3Ryb3kgdGhlIGNvbXBvbmVudFxuICAgICAqL1xuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIGlmICh0aGlzLmluc3RhbmNlICYmIHRoaXMuaW5zdGFuY2UuZGVzdHJveSkge1xuICAgICAgICAgICAgdGhpcy5pbnN0YW5jZS5kZXN0cm95KCk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=
|