@magic-xpa/gui 4.801.0-dev481.242 → 4.801.0-dev481.248
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/{esm2015/index.js → esm2020/index.mjs} +0 -0
- package/{esm2015/magic-xpa-gui.js → esm2020/magic-xpa-gui.mjs} +0 -0
- package/esm2020/src/Commands.mjs +186 -0
- package/{esm2015/src/Events.js → esm2020/src/Events.mjs} +0 -0
- package/{esm2015/src/EventsProcessor.js → esm2020/src/EventsProcessor.mjs} +0 -0
- package/esm2020/src/FocusManager.mjs +34 -0
- package/{esm2015/src/GuiConstants.js → esm2020/src/GuiConstants.mjs} +0 -0
- package/{esm2015/src/GuiEnums.js → esm2020/src/GuiEnums.mjs} +0 -0
- package/{esm2015/src/GuiEnvironment.js → esm2020/src/GuiEnvironment.mjs} +0 -0
- package/{esm2015/src/IFlowMonitorQueue.js → esm2020/src/IFlowMonitorQueue.mjs} +1 -0
- package/esm2020/src/Manager.mjs +192 -0
- package/{esm2015/src/UIBridge.js → esm2020/src/UIBridge.mjs} +0 -0
- package/{esm2015/src/env/IEnvironment.js → esm2020/src/env/IEnvironment.mjs} +1 -0
- package/{esm2015/src/gui/ControlBase.js → esm2020/src/gui/ControlBase.mjs} +0 -0
- package/{esm2015/src/gui/GuiMgControl.js → esm2020/src/gui/GuiMgControl.mjs} +0 -0
- package/{esm2015/src/gui/GuiMgForm.js → esm2020/src/gui/GuiMgForm.mjs} +0 -0
- package/{esm2015/src/gui/KeyboardItem.js → esm2020/src/gui/KeyboardItem.mjs} +0 -0
- package/{esm2015/src/gui/LastFocusedVal.js → esm2020/src/gui/LastFocusedVal.mjs} +0 -0
- package/{esm2015/src/gui/MgValue.js → esm2020/src/gui/MgValue.mjs} +0 -0
- package/{esm2015/src/gui/PropParentInterface.js → esm2020/src/gui/PropParentInterface.mjs} +1 -0
- package/{esm2015/src/gui/low/DialogHandler.js → esm2020/src/gui/low/DialogHandler.mjs} +0 -0
- package/{esm2015/src/gui/low/GuiCommand.js → esm2020/src/gui/low/GuiCommand.mjs} +0 -0
- package/{esm2015/src/gui/low/GuiCommandQueue.js → esm2020/src/gui/low/GuiCommandQueue.mjs} +0 -0
- package/{esm2015/src/gui/low/GuiInteractive.js → esm2020/src/gui/low/GuiInteractive.mjs} +0 -0
- package/{esm2015/src/gui/low/Style.js → esm2020/src/gui/low/Style.mjs} +0 -0
- package/{esm2015/src/management/RuntimeContextBase.js → esm2020/src/management/RuntimeContextBase.mjs} +0 -0
- package/{esm2015/src/management/data/BlobType.js → esm2020/src/management/data/BlobType.mjs} +0 -0
- package/{esm2015/src/management/data/DcValues.js → esm2020/src/management/data/DcValues.mjs} +0 -0
- package/{esm2015/src/management/data/DcValuesBuilderBase.js → esm2020/src/management/data/DcValuesBuilderBase.mjs} +0 -0
- package/{esm2015/src/management/data/FieldDef.js → esm2020/src/management/data/FieldDef.mjs} +0 -0
- package/{esm2015/src/management/data/FieldsTable.js → esm2020/src/management/data/FieldsTable.mjs} +0 -0
- package/{esm2015/src/management/data/GuiDataViewBase.js → esm2020/src/management/data/GuiDataViewBase.mjs} +0 -0
- package/esm2020/src/management/data/GuiFieldBase.mjs +82 -0
- package/{esm2015/src/management/data/IRecord.js → esm2020/src/management/data/IRecord.mjs} +1 -0
- package/{esm2015/src/management/data/IReferencedObject.js → esm2020/src/management/data/IReferencedObject.mjs} +1 -0
- package/{esm2015/src/management/data/NUM_TYPE.js → esm2020/src/management/data/NUM_TYPE.mjs} +0 -0
- package/{esm2015/src/management/data/ObjectReferenceBase.js → esm2020/src/management/data/ObjectReferenceBase.mjs} +0 -0
- package/{esm2015/src/management/data/ObjectReferencesCollection.js → esm2020/src/management/data/ObjectReferencesCollection.mjs} +0 -0
- package/{esm2015/src/management/data/RecordUtils.js → esm2020/src/management/data/RecordUtils.mjs} +0 -0
- package/{esm2015/src/management/data/VectorType.js → esm2020/src/management/data/VectorType.mjs} +0 -0
- package/{esm2015/src/management/data/VectorTypeBase.js → esm2020/src/management/data/VectorTypeBase.mjs} +0 -0
- package/{esm2015/src/management/events/IActionManager.js → esm2020/src/management/events/IActionManager.mjs} +1 -0
- package/{esm2015/src/management/events/IGuiEventsManager.js → esm2020/src/management/events/IGuiEventsManager.mjs} +1 -0
- package/{esm2015/src/management/exp/ExpressionInterface.js → esm2020/src/management/exp/ExpressionInterface.mjs} +0 -0
- package/{esm2015/src/management/exp/GuiExpressionEvaluator.js → esm2020/src/management/exp/GuiExpressionEvaluator.mjs} +0 -0
- package/{esm2015/src/management/gui/ControlTable.js → esm2020/src/management/gui/ControlTable.mjs} +0 -0
- package/{esm2015/src/management/gui/DisplayConvertor.js → esm2020/src/management/gui/DisplayConvertor.mjs} +0 -0
- package/{esm2015/src/management/gui/FieldValidator.js → esm2020/src/management/gui/FieldValidator.mjs} +0 -0
- package/esm2020/src/management/gui/GuiControlPropertyAdapter.mjs +22 -0
- package/{esm2015/src/management/gui/GuiFormPropertyAdapter.js → esm2020/src/management/gui/GuiFormPropertyAdapter.mjs} +0 -0
- package/{esm2015/src/management/gui/HebrewDate.js → esm2020/src/management/gui/HebrewDate.mjs} +0 -0
- package/{esm2015/src/management/gui/Helps.js → esm2020/src/management/gui/Helps.mjs} +0 -0
- package/esm2020/src/management/gui/MgControlBase.mjs +1873 -0
- package/esm2020/src/management/gui/MgFormBase.mjs +748 -0
- package/{esm2015/src/management/gui/PIC.js → esm2020/src/management/gui/PIC.mjs} +0 -0
- package/{esm2015/src/management/gui/PropDefaults.js → esm2020/src/management/gui/PropDefaults.mjs} +0 -0
- package/{esm2015/src/management/gui/PropInterface.js → esm2020/src/management/gui/PropInterface.mjs} +0 -0
- package/esm2020/src/management/gui/PropTable.mjs +221 -0
- package/esm2020/src/management/gui/Property.mjs +1382 -0
- package/{esm2015/src/management/gui/ValidationDetails.js → esm2020/src/management/gui/ValidationDetails.mjs} +0 -0
- package/{esm2015/src/management/gui/ValidationDetailsBase.js → esm2020/src/management/gui/ValidationDetailsBase.mjs} +0 -0
- package/{esm2015/src/management/gui/WrongFormatException.js → esm2020/src/management/gui/WrongFormatException.mjs} +0 -0
- package/{esm2015/src/management/tasks/GuiDataCollection.js → esm2020/src/management/tasks/GuiDataCollection.mjs} +0 -0
- package/esm2020/src/management/tasks/GuiTaskBase.mjs +502 -0
- package/{esm2015/src/management/tasks/IMGDataTable.js → esm2020/src/management/tasks/IMGDataTable.mjs} +1 -0
- package/{esm2015/src/management/tasks/ITask.js → esm2020/src/management/tasks/ITask.mjs} +1 -0
- package/{esm2015/src/management/tasks/MgTimer.js → esm2020/src/management/tasks/MgTimer.mjs} +0 -0
- package/{esm2015/src/management/tasks/TaskDefinitionId.js → esm2020/src/management/tasks/TaskDefinitionId.mjs} +0 -0
- package/esm2020/src/management/tasks/TaskDefinitionIdTableSaxHandler.mjs +41 -0
- package/{esm2015/src/util/AuthenticationDialogHandler.js → esm2020/src/util/AuthenticationDialogHandler.mjs} +0 -0
- package/{esm2015/src/util/MemoryUtil.js → esm2020/src/util/MemoryUtil.mjs} +0 -0
- package/{esm2015/src/util/ObjectReference.js → esm2020/src/util/ObjectReference.mjs} +0 -0
- package/{esm2015/src/util/ProcessLauncher.js → esm2020/src/util/ProcessLauncher.mjs} +0 -0
- package/{esm2015/src/util/UsernamePasswordCredentials.js → esm2020/src/util/UsernamePasswordCredentials.mjs} +0 -0
- package/fesm2015/{magic-xpa-gui.js → magic-xpa-gui.mjs} +51 -6
- package/fesm2015/magic-xpa-gui.mjs.map +1 -0
- package/fesm2020/magic-xpa-gui.mjs +17805 -0
- package/fesm2020/magic-xpa-gui.mjs.map +1 -0
- package/package.json +27 -14
- package/src/management/gui/GuiControlPropertyAdapter.d.ts +6 -6
- package/src/management/tasks/GuiTaskBase.d.ts +1 -1
- package/bundles/magic-xpa-gui.umd.js +0 -19344
- package/bundles/magic-xpa-gui.umd.js.map +0 -1
- package/bundles/magic-xpa-gui.umd.min.js +0 -16
- package/bundles/magic-xpa-gui.umd.min.js.map +0 -1
- package/esm2015/src/Commands.js +0 -189
- package/esm2015/src/FocusManager.js +0 -41
- package/esm2015/src/Manager.js +0 -197
- package/esm2015/src/management/data/GuiFieldBase.js +0 -85
- package/esm2015/src/management/gui/GuiControlPropertyAdapter.js +0 -4
- package/esm2015/src/management/gui/MgControlBase.js +0 -1979
- package/esm2015/src/management/gui/MgFormBase.js +0 -763
- package/esm2015/src/management/gui/PropTable.js +0 -224
- package/esm2015/src/management/gui/Property.js +0 -1402
- package/esm2015/src/management/tasks/GuiTaskBase.js +0 -506
- package/esm2015/src/management/tasks/TaskDefinitionIdTableSaxHandler.js +0 -41
- package/fesm2015/magic-xpa-gui.js.map +0 -1
package/esm2015/src/Commands.js
DELETED
|
@@ -1,189 +0,0 @@
|
|
|
1
|
-
import { __awaiter } from "tslib";
|
|
2
|
-
import { List } from '@magic-xpa/mscorelib';
|
|
3
|
-
import { GuiInteractive } from './gui/low/GuiInteractive';
|
|
4
|
-
import { GuiMgControl } from './gui/GuiMgControl';
|
|
5
|
-
import { CommandType } from './GuiEnums';
|
|
6
|
-
import { GuiCommandQueue } from './gui/low/GuiCommandQueue';
|
|
7
|
-
import { GuiCommand } from './gui/low/GuiCommand';
|
|
8
|
-
export class Commands {
|
|
9
|
-
constructor() {
|
|
10
|
-
}
|
|
11
|
-
static SetResolveCallback(resolveCallback) {
|
|
12
|
-
this.resolveCallback = resolveCallback;
|
|
13
|
-
}
|
|
14
|
-
static ResolvePromise(result) {
|
|
15
|
-
this.resolveCallback(result);
|
|
16
|
-
}
|
|
17
|
-
static messageBox(title, msg, style) {
|
|
18
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
19
|
-
let guiInteractive = new GuiInteractive();
|
|
20
|
-
let returnValue;
|
|
21
|
-
yield new Promise((resolve) => {
|
|
22
|
-
this.SetResolveCallback(resolve);
|
|
23
|
-
guiInteractive.messageBox(title, msg, style);
|
|
24
|
-
}).then((res) => { returnValue = res; });
|
|
25
|
-
return returnValue;
|
|
26
|
-
});
|
|
27
|
-
}
|
|
28
|
-
static setTitle(topMostForm, title) {
|
|
29
|
-
let guiInteractive = new GuiInteractive();
|
|
30
|
-
guiInteractive.setTitle(topMostForm, title);
|
|
31
|
-
}
|
|
32
|
-
static setGetSuggestedValueOfChoiceControlOnTagData(ctrl, line, retSuggestedValue) {
|
|
33
|
-
let guiInteractive = new GuiInteractive();
|
|
34
|
-
guiInteractive.setGetSuggestedValueOfChoiceControlOnTagData(ctrl, line, retSuggestedValue);
|
|
35
|
-
}
|
|
36
|
-
static getValue(obj, line) {
|
|
37
|
-
let guiInteractive = new GuiInteractive();
|
|
38
|
-
return guiInteractive.getValue(obj, line);
|
|
39
|
-
}
|
|
40
|
-
static getTopIndex(tablecontrol) {
|
|
41
|
-
let guiInteractive = new GuiInteractive();
|
|
42
|
-
return guiInteractive.getTopIndex(tablecontrol);
|
|
43
|
-
}
|
|
44
|
-
static getIsRowEditing(tablecontrol, rowIndex, isLineMode) {
|
|
45
|
-
let guiInteractive = new GuiInteractive();
|
|
46
|
-
return guiInteractive.getIsRowEditing(tablecontrol, rowIndex, isLineMode);
|
|
47
|
-
}
|
|
48
|
-
static browserExecute(browserControl, text, syncExec, language) {
|
|
49
|
-
let guiInteractive = new GuiInteractive();
|
|
50
|
-
return guiInteractive.browserExecute(browserControl, text, syncExec, language);
|
|
51
|
-
}
|
|
52
|
-
static directoryDialogBox(caption, path, bShowNewFolder) {
|
|
53
|
-
let guiInteractive = new GuiInteractive();
|
|
54
|
-
return guiInteractive.directoryDialogBox(caption, path, bShowNewFolder);
|
|
55
|
-
}
|
|
56
|
-
static fileOpenDialogBox(title, dirName, fileName, filterNames, checkExists, multiSelect) {
|
|
57
|
-
let guiInteractive = new GuiInteractive();
|
|
58
|
-
return guiInteractive.fileOpenDialogBox(title, dirName, fileName, filterNames, checkExists, multiSelect);
|
|
59
|
-
}
|
|
60
|
-
static setEditText(control, line, text) {
|
|
61
|
-
let guiInteractive = new GuiInteractive();
|
|
62
|
-
return guiInteractive.setEditText(control, line, text);
|
|
63
|
-
}
|
|
64
|
-
static insertEditText(control, line, startPosition, textToInsert) {
|
|
65
|
-
let guiInteractive = new GuiInteractive();
|
|
66
|
-
return guiInteractive.insertEditText(control, line, startPosition, textToInsert);
|
|
67
|
-
}
|
|
68
|
-
static caretPosGet(control, line) {
|
|
69
|
-
let guiInteractive = new GuiInteractive();
|
|
70
|
-
return guiInteractive.caretPosGet(control, line);
|
|
71
|
-
}
|
|
72
|
-
static addRefreshPage(navigateToRootRoute, initialUrl) {
|
|
73
|
-
let guiInteractive = new GuiInteractive();
|
|
74
|
-
guiInteractive.RefreshPage(navigateToRootRoute, initialUrl);
|
|
75
|
-
}
|
|
76
|
-
static getRowsInPage(control) {
|
|
77
|
-
let guiInteractive = new GuiInteractive();
|
|
78
|
-
let rowsInPage = guiInteractive.getRowsInPage(control);
|
|
79
|
-
return (rowsInPage === 0 ? 1 : rowsInPage);
|
|
80
|
-
}
|
|
81
|
-
static getMaxRowsInPaginatedTable(control) {
|
|
82
|
-
let guiInteractive = new GuiInteractive();
|
|
83
|
-
let maxRows = guiInteractive.getMaxRowsInPaginatedTable(control);
|
|
84
|
-
return (maxRows);
|
|
85
|
-
}
|
|
86
|
-
static getLastRoute() {
|
|
87
|
-
let guiInteractive = new GuiInteractive();
|
|
88
|
-
return guiInteractive.getLastRoute();
|
|
89
|
-
}
|
|
90
|
-
static addBoolWithLine(commandType, obj, line, bool) {
|
|
91
|
-
let guiCommand = new GuiCommand(obj, commandType);
|
|
92
|
-
guiCommand.Bool1 = bool;
|
|
93
|
-
guiCommand.line = line;
|
|
94
|
-
GuiCommandQueue.getInstance().addCommand(guiCommand);
|
|
95
|
-
}
|
|
96
|
-
static addNoParameters(commandType, obj) {
|
|
97
|
-
let guiCommand = new GuiCommand(obj, commandType);
|
|
98
|
-
GuiCommandQueue.getInstance().addCommand(guiCommand);
|
|
99
|
-
}
|
|
100
|
-
static addWithNumber(commandType, obj, num) {
|
|
101
|
-
let guiCommand = new GuiCommand(obj, commandType);
|
|
102
|
-
guiCommand.number = num;
|
|
103
|
-
GuiCommandQueue.getInstance().addCommand(guiCommand);
|
|
104
|
-
}
|
|
105
|
-
static addValueWithLine(commandType, obj, line, value) {
|
|
106
|
-
let guiCommand = new GuiCommand(obj, commandType);
|
|
107
|
-
guiCommand.value = value;
|
|
108
|
-
guiCommand.line = line;
|
|
109
|
-
if (commandType === CommandType.SET_VALUE) {
|
|
110
|
-
if (obj instanceof GuiMgControl && obj.isChoiceControl()) {
|
|
111
|
-
if (value < 0)
|
|
112
|
-
guiCommand.value = '';
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
GuiCommandQueue.getInstance().addCommand(guiCommand);
|
|
116
|
-
}
|
|
117
|
-
static addOperationWithLine(commandType, obj, line, operation, value) {
|
|
118
|
-
let guiCommand = new GuiCommand(obj, commandType);
|
|
119
|
-
guiCommand.obj1 = value;
|
|
120
|
-
guiCommand.line = line;
|
|
121
|
-
guiCommand.Operation = operation;
|
|
122
|
-
GuiCommandQueue.getInstance().addCommand(guiCommand);
|
|
123
|
-
}
|
|
124
|
-
static addOpensubform(commandType, obj, calledTaskTag, subformControlName, formName, inputControls, routerPath, routerParams, inDefaultRouterOutlet) {
|
|
125
|
-
let guiCommand = new GuiCommand(obj, commandType);
|
|
126
|
-
guiCommand.str = calledTaskTag;
|
|
127
|
-
guiCommand.obj1 = subformControlName;
|
|
128
|
-
guiCommand.userDropFormat = formName;
|
|
129
|
-
guiCommand.fileName = inputControls;
|
|
130
|
-
guiCommand.Bool1 = inDefaultRouterOutlet;
|
|
131
|
-
guiCommand.contextID = routerPath;
|
|
132
|
-
guiCommand.params = routerParams;
|
|
133
|
-
GuiCommandQueue.getInstance().addCommand(guiCommand);
|
|
134
|
-
}
|
|
135
|
-
static addClosesubform(commandType, obj, calledTaskTag, subformControlName, formName) {
|
|
136
|
-
let guiCommand = new GuiCommand(obj, commandType);
|
|
137
|
-
guiCommand.str = calledTaskTag;
|
|
138
|
-
guiCommand.obj1 = subformControlName;
|
|
139
|
-
guiCommand.userDropFormat = formName;
|
|
140
|
-
GuiCommandQueue.getInstance().addCommand(guiCommand);
|
|
141
|
-
}
|
|
142
|
-
static addOpenForm(obj, formName, handlerTaskTag, calledTaskTag, inputControls, isDialog) {
|
|
143
|
-
let guiCommand = new GuiCommand(obj, CommandType.OPEN_FORM);
|
|
144
|
-
guiCommand.TaskTag = handlerTaskTag;
|
|
145
|
-
guiCommand.str = formName;
|
|
146
|
-
guiCommand.stringList = new List();
|
|
147
|
-
guiCommand.stringList.push(calledTaskTag);
|
|
148
|
-
guiCommand.stringList.push(inputControls);
|
|
149
|
-
guiCommand.Bool1 = isDialog;
|
|
150
|
-
GuiCommandQueue.getInstance().addCommand(guiCommand);
|
|
151
|
-
}
|
|
152
|
-
static addCloseForm(obj, handlerTaskTag, calledTaskTag) {
|
|
153
|
-
let guiCommand = new GuiCommand(obj, CommandType.CLOSE_FORM);
|
|
154
|
-
guiCommand.TaskTag = handlerTaskTag;
|
|
155
|
-
guiCommand.str = calledTaskTag;
|
|
156
|
-
GuiCommandQueue.getInstance().addCommand(guiCommand);
|
|
157
|
-
}
|
|
158
|
-
static addCallJS(form, formName, name, args) {
|
|
159
|
-
let guiInteractive = new GuiInteractive();
|
|
160
|
-
return guiInteractive.ExecuteCallJS(form, formName, name, args);
|
|
161
|
-
}
|
|
162
|
-
static addIsLoggedIn(setBool) {
|
|
163
|
-
let guiCommand = new GuiCommand(null, CommandType.SET_IS_LOGGED_IN);
|
|
164
|
-
guiCommand.Bool1 = setBool;
|
|
165
|
-
GuiCommandQueue.getInstance().addCommand(guiCommand);
|
|
166
|
-
}
|
|
167
|
-
static addShowSpinner(show) {
|
|
168
|
-
let guiCommand = new GuiCommand(null, CommandType.SHOW_SPINNER);
|
|
169
|
-
guiCommand.Bool1 = show;
|
|
170
|
-
GuiCommandQueue.getInstance().addCommand(guiCommand);
|
|
171
|
-
}
|
|
172
|
-
static addGlobalCommand(commandType) {
|
|
173
|
-
let guiCommand = new GuiCommand(null, commandType);
|
|
174
|
-
GuiCommandQueue.getInstance().addCommand(guiCommand);
|
|
175
|
-
}
|
|
176
|
-
static addShowHTMLError(commandType, error) {
|
|
177
|
-
let guiCommand = new GuiCommand(null, commandType);
|
|
178
|
-
guiCommand.str = error;
|
|
179
|
-
GuiCommandQueue.getInstance().addCommand(guiCommand);
|
|
180
|
-
}
|
|
181
|
-
static beginInvoke() {
|
|
182
|
-
GuiCommandQueue.getInstance().beginInvoke();
|
|
183
|
-
}
|
|
184
|
-
static invoke() {
|
|
185
|
-
GuiCommandQueue.getInstance().invoke();
|
|
186
|
-
}
|
|
187
|
-
}
|
|
188
|
-
Commands.resolveCallback = null;
|
|
189
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29tbWFuZHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ndWkvc3JjL0NvbW1hbmRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUMsSUFBSSxFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFFMUMsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBQ3hELE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUNoRCxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sWUFBWSxDQUFDO0FBQ3ZDLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQztBQUMxRCxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFVaEQsTUFBTSxPQUFPLFFBQVE7SUE2VW5CO0lBQ0EsQ0FBQztJQXRVRCxNQUFNLENBQUMsa0JBQWtCLENBQUMsZUFBZTtRQUN2QyxJQUFJLENBQUMsZUFBZSxHQUFHLGVBQWUsQ0FBQztJQUN6QyxDQUFDO0lBS0QsTUFBTSxDQUFDLGNBQWMsQ0FBQyxNQUFjO1FBQ2xDLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQVNELE1BQU0sQ0FBTyxVQUFVLENBQUMsS0FBYSxFQUFFLEdBQVcsRUFBRSxLQUFhOztZQUMvRCxJQUFJLGNBQWMsR0FBbUIsSUFBSSxjQUFjLEVBQUUsQ0FBQztZQUMxRCxJQUFJLFdBQW1CLENBQUM7WUFFeEIsTUFBTSxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO2dCQUM1QixJQUFJLENBQUMsa0JBQWtCLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQ2pDLGNBQWMsQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUUvQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFXLEVBQUMs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QVUsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBR0QsTUFBTSxDQUFDLGdCQUFnQixDQUFDLFdBQXdCLEVBQUUsS0FBYTtRQUM3RCxJQUFJLFVBQVUsR0FBZSxJQUFJLFVBQVUsQ0FBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDL0QsVUFBVSxDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUM7UUFDdkIsZUFBZSxDQUFDLFdBQVcsRUFBRSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBS0QsTUFBTSxDQUFDLFdBQVc7UUFDaEIsZUFBZSxDQUFDLFdBQVcsRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQzlDLENBQUM7SUFLRCxNQUFNLENBQUMsTUFBTTtRQUNYLGVBQWUsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUN6QyxDQUFDOztBQXhVZSx3QkFBZSxHQUFHLElBQUksQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7TGlzdH0gZnJvbSAnQG1hZ2ljLXhwYS9tc2NvcmVsaWInO1xyXG5pbXBvcnQge0d1aU1nRm9ybX0gZnJvbSAnLi9ndWkvR3VpTWdGb3JtJztcclxuaW1wb3J0IHtHdWlJbnRlcmFjdGl2ZX0gZnJvbSAnLi9ndWkvbG93L0d1aUludGVyYWN0aXZlJztcclxuaW1wb3J0IHtHdWlNZ0NvbnRyb2x9IGZyb20gJy4vZ3VpL0d1aU1nQ29udHJvbCc7XHJcbmltcG9ydCB7Q29tbWFuZFR5cGV9IGZyb20gJy4vR3VpRW51bXMnO1xyXG5pbXBvcnQge0d1aUNvbW1hbmRRdWV1ZX0gZnJvbSAnLi9ndWkvbG93L0d1aUNvbW1hbmRRdWV1ZSc7XHJcbmltcG9ydCB7R3VpQ29tbWFuZH0gZnJvbSAnLi9ndWkvbG93L0d1aUNvbW1hbmQnO1xyXG5cclxuXHJcbi8vLyA8c3VtbWFyeT5cclxuLy8vICAgQ29tbWFuZHMgdG8gdGhlIEdVSSB0aHJlYWQuXHJcbi8vLyAgIFRoZXJl4oCZcmUgdHdvIHR5cGVzIG9mIGNvbW1hbmRzIChncm91cGVkIGluICNyZWdpb25zKTpcclxuLy8vICAgICAgMS5cdENvbW1hbmRzIHRoYXQgYXJlIGV4ZWN1dGVkIGltbWVkaWF0ZWx5LlxyXG4vLy8gICAgICAyLlx0Q29tbWFuZHMgdGhhdCBhcmUgcXVldWVkIChvdmVybG9hZGVkIG1ldGhvZHMg4oCYYWRkQXN5bmPigJkpIGFuZCB0aGVuIGV4ZWN1dGVkLFxyXG4vLy8gICAgICAgICBlaXRoZXIgc3luY2hyb25vdXNseSAobWV0aG9kIOKAmGludm9rZeKAmSkgb3IgYXN5bmNocm9ub3VzbHkgKG1ldGhvZCDigJhiZWdpbkludm9rZeKAmSkuXHJcbi8vLyA8L3N1bW1hcnk+XHJcbmV4cG9ydCBjbGFzcyBDb21tYW5kcyB7XHJcblxyXG5cclxuICBwcml2YXRlIHN0YXRpYyAgcmVzb2x2ZUNhbGxiYWNrID0gbnVsbDsgLy8gY2FsbGJhY2sgdG8gcmVzb2x2ZSB0aGUgcHJvbWlzZVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIHNhdmUgdGhlIGNhbGxiYWNrXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBzdGF0aWMgU2V0UmVzb2x2ZUNhbGxiYWNrKHJlc29sdmVDYWxsYmFjaykge1xyXG4gICAgdGhpcy5yZXNvbHZlQ2FsbGJhY2sgPSByZXNvbHZlQ2FsbGJhY2s7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIHJlc29sdmUgcHJvbWlzZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgc3RhdGljIFJlc29sdmVQcm9taXNlKHJlc3VsdDogbnVtYmVyKSB7XHJcbiAgICB0aGlzLnJlc29sdmVDYWxsYmFjayhyZXN1bHQpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIFN5bmMgY2FsbCB0byBkaXNwbGF5IG1lc3NhZ2UgYm94XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInRpdGxlXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcIm1zZ1wiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJzdHlsZVwiPjwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBzdGF0aWMgYXN5bmMgbWVzc2FnZUJveCh0aXRsZTogc3RyaW5nLCBtc2c6IHN0cmluZywgc3R5bGU6IG51bWJlcik6IFByb21pc2U8bnVtYmVyPiB7XHJcbiAgICBsZXQgZ3VpSW50ZXJhY3RpdmU6IEd1aUludGVyYWN0aXZlID0gbmV3IEd1aUludGVyYWN0aXZlKCk7XHJcbiAgICBsZXQgcmV0dXJuVmFsdWU6IG51bWJlcjtcclxuXHJcbiAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xyXG4gICAgICB0aGlzLlNldFJlc29sdmVDYWxsYmFjayhyZXNvbHZlKTtcclxuICAgICAgZ3VpSW50ZXJhY3RpdmUubWVzc2FnZUJveCh0aXRsZSwgbXNnLCBzdHlsZSk7XHJcbiAgICAgLy8gc2F2ZSB0aGUgcmVzb2x2ZSBjYWxsYmFjayBvbiBFdmVudHNNYW5hZ2VyLCBzbyB0aGF0IGl0IGNhbiBiZSByZXNvbHZlZCBvbiBjbG9zaW5nIG1vZGFsIHdpbmRvd1xyXG4gICAgfSkudGhlbigocmVzOiBudW1iZXIpPT57cmV0dXJuVmFsdWUgPSByZXM7fSk7XHJcbiAgICByZXR1cm4gcmV0dXJuVmFsdWU7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgc2V0IHRpdGxlIHRvIGJyb3dzZXJcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwidG9wTW9zdEZvcm1cIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwidGl0bGVcIj48L3BhcmFtPlxyXG4gIHN0YXRpYyBzZXRUaXRsZSh0b3BNb3N0Rm9ybTogR3VpTWdGb3JtLCB0aXRsZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBsZXQgZ3VpSW50ZXJhY3RpdmU6IEd1aUludGVyYWN0aXZlID0gbmV3IEd1aUludGVyYWN0aXZlKCk7XHJcbiAgICBndWlJbnRlcmFjdGl2ZS5zZXRUaXRsZSh0b3BNb3N0Rm9ybSwgdGl0bGUpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIFN5bmMgY2FsbC4gVGhpcyBtZXRob2RlIGlzIHNldCBUUlVFXFxGQUxTRSB0aGF0IEd1aVV0aWxlc1xcR2V0VmFsdWUoKSBtZXRob2Qgd2lsbCBiZSB1c2VcclxuICAvLy8gICB0aGlzIGZhbGcgc2F5IGlmIHRvIHJldHVybiB0aGUgOiAodHJ1ZSkgc3VnZ2VzdGVkIHZhbHVlIG9yIChmYWxzZSl0aGUgcmVhbCB2YWx1ZVxyXG4gIC8vLyAgIHRoaXMgbWV0aG9kIGlzIHVzZSBmb3IgTUdfQUNUX0NUUkxfTU9ESUZZXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImN0cmxcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwicmV0U3VnZ2VzdGVkVmFsdWVcIj48L3BhcmFtPlxyXG4gIHN0YXRpYyBzZXRHZXRTdWdnZXN0ZWRWYWx1ZU9mQ2hvaWNlQ29udHJvbE9uVGFnRGF0YShjdHJsOiBHdWlNZ0NvbnRyb2wsIGxpbmU6IG51bWJlciwgcmV0U3VnZ2VzdGVkVmFsdWU6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIGxldCBndWlJbnRlcmFjdGl2ZTogR3VpSW50ZXJhY3RpdmUgPSBuZXcgR3VpSW50ZXJhY3RpdmUoKTtcclxuICAgIGd1aUludGVyYWN0aXZlLnNldEdldFN1Z2dlc3RlZFZhbHVlT2ZDaG9pY2VDb250cm9sT25UYWdEYXRhKGN0cmwsIGxpbmUsIHJldFN1Z2dlc3RlZFZhbHVlKTtcclxuICB9XHJcblxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgU3luYyBjYWxsIHRvIGdldCB2YWx1ZSBvZiB0aGUgY29udHJvbFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJvYmpcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwibWdWYWx1ZVwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJsaW5lXCI+PC9wYXJhbT5cclxuICBzdGF0aWMgZ2V0VmFsdWUob2JqOiBhbnksIGxpbmU6IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICBsZXQgZ3VpSW50ZXJhY3RpdmU6IEd1aUludGVyYWN0aXZlID0gbmV3IEd1aUludGVyYWN0aXZlKCk7XHJcbiAgICByZXR1cm4gZ3VpSW50ZXJhY3RpdmUuZ2V0VmFsdWUob2JqLCBsaW5lKTtcclxuICB9XHJcblxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgU3luYyBjYWxsIHRvIGdldCB0YWJsZSB0b3AgaW5kZXhcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwidGFibGVjb250cm9sXCI+PC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIHN0YXRpYyBnZXRUb3BJbmRleCh0YWJsZWNvbnRyb2w6IEd1aU1nQ29udHJvbCk6IG51bWJlciB7XHJcbiAgICBsZXQgZ3VpSW50ZXJhY3RpdmU6IEd1aUludGVyYWN0aXZlID0gbmV3IEd1aUludGVyYWN0aXZlKCk7XHJcbiAgICByZXR1cm4gZ3VpSW50ZXJhY3RpdmUuZ2V0VG9wSW5kZXgodGFibGVjb250cm9sKTtcclxuICB9XHJcblxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgU3luYyBjYWxsIHRvIGdldCBpcyByb3cgZWRpdGluZyBvbiByb3cgaW5kZXhcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwidGFibGVjb250cm9sXCI+PC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIHN0YXRpYyBnZXRJc1Jvd0VkaXRpbmcodGFibGVjb250cm9sOiBhbnksIHJvd0luZGV4OiBudW1iZXIsIGlzTGluZU1vZGU6IGJvb2xlYW4pOiBib29sZWFuIHtcclxuICAgIGxldCBndWlJbnRlcmFjdGl2ZTogR3VpSW50ZXJhY3RpdmUgPSBuZXcgR3VpSW50ZXJhY3RpdmUoKTtcclxuICAgIHJldHVybiBndWlJbnRlcmFjdGl2ZS5nZXRJc1Jvd0VkaXRpbmcodGFibGVjb250cm9sLCByb3dJbmRleCwgaXNMaW5lTW9kZSk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIFN5bmMgY2FsbCB0byBleGVjdXRlIGJyb3dzZXJcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiYnJvd3NlckNvbnRyb2xcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwidGV4dFwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJzeW5jRXhlY1wiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJsYW5ndWFnZVwiPjwvcGFyYW0+XHJcbiAgc3RhdGljIGJyb3dzZXJFeGVjdXRlKGJyb3dzZXJDb250cm9sOiBHdWlNZ0NvbnRyb2wsIHRleHQ6IHN0cmluZywgc3luY0V4ZWM6IGJvb2xlYW4sIGxhbmd1YWdlOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIGxldCBndWlJbnRlcmFjdGl2ZTogR3VpSW50ZXJhY3RpdmUgPSBuZXcgR3VpSW50ZXJhY3RpdmUoKTtcclxuICAgIHJldHVybiBndWlJbnRlcmFjdGl2ZS5icm93c2VyRXhlY3V0ZShicm93c2VyQ29udHJvbCwgdGV4dCwgc3luY0V4ZWMsIGxhbmd1YWdlKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBTeW5jIGNhbGwgdG8gRGlyZWN0b3J5IERpYWxvZyBCb3hcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiY2FwdGlvblwiPmRlc2NyaXB0aW9uIGZvciB0aGUgZGlhbG9nIHdpbmRvdzwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJwYXRoXCI+aW5pdGlhbCBwYXRoIHRvIGJyb3dzZTwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJiU2hvd05ld0ZvbGRlclwiPnNob3VsZCBzaG93IHRoZSBuZXcgZm9sZGVyIGJ1dHRvbj88L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz5kaXJlY3RvcnkgcGF0aCBzZWxlY3RlZCBieSB1c2VyPC9yZXR1cm5zPlxyXG4gIHN0YXRpYyBkaXJlY3RvcnlEaWFsb2dCb3goY2FwdGlvbjogc3RyaW5nLCBwYXRoOiBzdHJpbmcsIGJTaG93TmV3Rm9sZGVyOiBib29sZWFuKTogc3RyaW5nIHtcclxuICAgIGxldCBndWlJbnRlcmFjdGl2ZTogR3VpSW50ZXJhY3RpdmUgPSBuZXcgR3VpSW50ZXJhY3RpdmUoKTtcclxuICAgIHJldHVybiBndWlJbnRlcmFjdGl2ZS5kaXJlY3RvcnlEaWFsb2dCb3goY2FwdGlvbiwgcGF0aCwgYlNob3dOZXdGb2xkZXIpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIFN5bmMgY2FsbCB0byBGaWxlIE9wZW4gRGlhbG9nIEJveFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJ0aXRsZVwiPkRpYWxvZyB3aW5kb3cgY2FwdGlvbjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJkaXJOYW1lXCI+SW5pdGlhbCBkaXJlY3Rvcnk8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiZmlsZU5hbWVcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiZmlsdGVyTmFtZXNcIj5maWx0ZXIgc3RyaW5nPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImNoZWNrRXhpc3RzXCI+dmVyaWZ5IG9wZW5lZCBmaWxlIGV4aXN0czwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJtdWx0aVNlbGVjdFwiPmVuYWJsZSBzZWxlY3RpbmcgbXVsdGlwbGUgZmlsZXM8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz5maWxlIHBhdGggc2VsZWN0ZWQgYnkgdXNlcjwvcmV0dXJucz5cclxuICBzdGF0aWMgZmlsZU9wZW5EaWFsb2dCb3godGl0bGU6IHN0cmluZywgZGlyTmFtZTogc3RyaW5nLCBmaWxlTmFtZTogc3RyaW5nLCBmaWx0ZXJOYW1lczogc3RyaW5nLCBjaGVja0V4aXN0czogYm9vbGVhbiwgbXVsdGlTZWxlY3Q6IGJvb2xlYW4pOiBzdHJpbmcge1xyXG4gICAgbGV0IGd1aUludGVyYWN0aXZlOiBHdWlJbnRlcmFjdGl2ZSA9IG5ldyBHdWlJbnRlcmFjdGl2ZSgpO1xyXG4gICAgcmV0dXJuIGd1aUludGVyYWN0aXZlLmZpbGVPcGVuRGlhbG9nQm94KHRpdGxlLCBkaXJOYW1lLCBmaWxlTmFtZSwgZmlsdGVyTmFtZXMsIGNoZWNrRXhpc3RzLCBtdWx0aVNlbGVjdCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgU3luYyBjYWxsIHRvIHNldCB0aGUgdGV4dCB0byB0aGUgdGhlIGNvbnRyb2xcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiY29udHJvbFwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJsaW5lXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInRleHRcIj48L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgc3RhdGljIHNldEVkaXRUZXh0KGNvbnRyb2w6IEd1aU1nQ29udHJvbCwgbGluZTogbnVtYmVyLCB0ZXh0OiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIGxldCBndWlJbnRlcmFjdGl2ZTogR3VpSW50ZXJhY3RpdmUgPSBuZXcgR3VpSW50ZXJhY3RpdmUoKTtcclxuICAgIHJldHVybiBndWlJbnRlcmFjdGl2ZS5zZXRFZGl0VGV4dChjb250cm9sLCBsaW5lLCB0ZXh0KTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBJbnNlcnQgdGV4dCB0byBhIHRleHQgY29udHJvbCBhdCBhIGdpdmVuIHBvc2l0aW9uXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImNvbnRyb2xcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwibGluZVwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJzdGFydFBvc2l0aW9uXCI+d2hlcmUgdG8gYWRkIHRoZSB0ZXh0PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInRleHRUb0luc2VydFwiPnRoZSB0ZXh0IHRvIGFkZDwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBzdGF0aWMgaW5zZXJ0RWRpdFRleHQoY29udHJvbDogR3VpTWdDb250cm9sLCBsaW5lOiBudW1iZXIsIHN0YXJ0UG9zaXRpb246IG51bWJlciwgdGV4dFRvSW5zZXJ0OiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIGxldCBndWlJbnRlcmFjdGl2ZTogR3VpSW50ZXJhY3RpdmUgPSBuZXcgR3VpSW50ZXJhY3RpdmUoKTtcclxuICAgIHJldHVybiBndWlJbnRlcmFjdGl2ZS5pbnNlcnRFZGl0VGV4dChjb250cm9sLCBsaW5lLCBzdGFydFBvc2l0aW9uLCB0ZXh0VG9JbnNlcnQpO1xyXG4gIH1cclxuXHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBTeW5jIGNhbGwgdG8gZ2V0IHRoZSBwb3NpdGlvbiBvZiB0aGUgY2FyZXQgb24gdGhlIGNvbnRyb2xcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiY29udHJvbFwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJsaW5lXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcIm1nVmFsdWVcIj48L3BhcmFtPlxyXG4gIHN0YXRpYyBjYXJldFBvc0dldChjb250cm9sOiBHdWlNZ0NvbnRyb2wsIGxpbmU6IG51bWJlcik6IG51bWJlciB7XHJcbiAgICBsZXQgZ3VpSW50ZXJhY3RpdmU6IEd1aUludGVyYWN0aXZlID0gbmV3IEd1aUludGVyYWN0aXZlKCk7XHJcbiAgICByZXR1cm4gZ3VpSW50ZXJhY3RpdmUuY2FyZXRQb3NHZXQoY29udHJvbCwgbGluZSk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgYWRkUmVmcmVzaFBhZ2UobmF2aWdhdGVUb1Jvb3RSb3V0ZSA6IGJvb2xlYW4sIGluaXRpYWxVcmw6IHN0cmluZykge1xyXG4gICAgbGV0IGd1aUludGVyYWN0aXZlOiBHdWlJbnRlcmFjdGl2ZSA9IG5ldyBHdWlJbnRlcmFjdGl2ZSgpO1xyXG5cclxuICAgIGd1aUludGVyYWN0aXZlLlJlZnJlc2hQYWdlKG5hdmlnYXRlVG9Sb290Um91dGUsIGluaXRpYWxVcmwpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIFN5bmMgY2FsbCB0byBnZXQgbnVtYmVyIG9mIHJvd3MgaW4gdGhlIHRhYmxlXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImNvbnRyb2xcIj48L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgc3RhdGljIGdldFJvd3NJblBhZ2UoY29udHJvbDogR3VpTWdDb250cm9sKTogbnVtYmVyIHtcclxuICAgIGxldCBndWlJbnRlcmFjdGl2ZTogR3VpSW50ZXJhY3RpdmUgPSBuZXcgR3VpSW50ZXJhY3RpdmUoKTtcclxuICAgIGxldCByb3dzSW5QYWdlID0gZ3VpSW50ZXJhY3RpdmUuZ2V0Um93c0luUGFnZShjb250cm9sKTtcclxuICAgIHJldHVybiAocm93c0luUGFnZSA9PT0gMCA/IDEgOiByb3dzSW5QYWdlKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gR2V0IG1heCBubyBvZiByb3dzIGluIHBhZ2luYXRlZCB0YWJsZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJjb250cm9sXCI+PC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIHN0YXRpYyBnZXRNYXhSb3dzSW5QYWdpbmF0ZWRUYWJsZShjb250cm9sOiBHdWlNZ0NvbnRyb2wpOiBudW1iZXIge1xyXG4gICAgbGV0IGd1aUludGVyYWN0aXZlOiBHdWlJbnRlcmFjdGl2ZSA9IG5ldyBHdWlJbnRlcmFjdGl2ZSgpO1xyXG4gICAgbGV0IG1heFJvd3MgPSBndWlJbnRlcmFjdGl2ZS5nZXRNYXhSb3dzSW5QYWdpbmF0ZWRUYWJsZShjb250cm9sKTtcclxuICAgIHJldHVybiAobWF4Um93cyk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIEdldCB0aGUgbGFzdCByb3V0ZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgc3RhdGljIGdldExhc3RSb3V0ZSgpOiBzdHJpbmcge1xyXG4gICAgbGV0IGd1aUludGVyYWN0aXZlOiBHdWlJbnRlcmFjdGl2ZSA9IG5ldyBHdWlJbnRlcmFjdGl2ZSgpO1xyXG4gICAgcmV0dXJuIGd1aUludGVyYWN0aXZlLmdldExhc3RSb3V0ZSgpO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGFkZEJvb2xXaXRoTGluZShjb21tYW5kVHlwZTogQ29tbWFuZFR5cGUsIG9iajogYW55LCBsaW5lOiBudW1iZXIsIGJvb2w6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIGxldCBndWlDb21tYW5kOiBHdWlDb21tYW5kID0gbmV3IEd1aUNvbW1hbmQob2JqLCBjb21tYW5kVHlwZSk7XHJcbiAgICBndWlDb21tYW5kLkJvb2wxID0gYm9vbDtcclxuICAgIGd1aUNvbW1hbmQubGluZSA9IGxpbmU7XHJcbiAgICBHdWlDb21tYW5kUXVldWUuZ2V0SW5zdGFuY2UoKS5hZGRDb21tYW5kKGd1aUNvbW1hbmQpO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGFkZE5vUGFyYW1ldGVycyhjb21tYW5kVHlwZTogQ29tbWFuZFR5cGUsIG9iajogYW55KTogdm9pZCB7XHJcbiAgICBsZXQgZ3VpQ29tbWFuZDogR3VpQ29tbWFuZCA9IG5ldyBHdWlDb21tYW5kKG9iaiwgY29tbWFuZFR5cGUpO1xyXG4gICAgR3VpQ29tbWFuZFF1ZXVlLmdldEluc3RhbmNlKCkuYWRkQ29tbWFuZChndWlDb21tYW5kKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBhZGRXaXRoTnVtYmVyKGNvbW1hbmRUeXBlOiBDb21tYW5kVHlwZSwgb2JqOiBhbnksIG51bTogbnVtYmVyKTogdm9pZCB7XHJcbiAgICBsZXQgZ3VpQ29tbWFuZDogR3VpQ29tbWFuZCA9IG5ldyBHdWlDb21tYW5kKG9iaiwgY29tbWFuZFR5cGUpO1xyXG4gICAgZ3VpQ29tbWFuZC5udW1iZXIgPSBudW07XHJcbiAgICBHdWlDb21tYW5kUXVldWUuZ2V0SW5zdGFuY2UoKS5hZGRDb21tYW5kKGd1aUNvbW1hbmQpO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGFkZFZhbHVlV2l0aExpbmUoY29tbWFuZFR5cGU6IENvbW1hbmRUeXBlLCBvYmo6IGFueSwgbGluZTogbnVtYmVyLCB2YWx1ZTogYW55KTogdm9pZCB7XHJcbiAgICBsZXQgZ3VpQ29tbWFuZDogR3VpQ29tbWFuZCA9IG5ldyBHdWlDb21tYW5kKG9iaiwgY29tbWFuZFR5cGUpO1xyXG4gICAgZ3VpQ29tbWFuZC52YWx1ZSA9IHZhbHVlO1xyXG4gICAgZ3VpQ29tbWFuZC5saW5lID0gbGluZTtcclxuICAgIGlmIChjb21tYW5kVHlwZSA9PT0gQ29tbWFuZFR5cGUuU0VUX1ZBTFVFKVxyXG4gICAge1xyXG4gICAgICBpZiAob2JqIGluc3RhbmNlb2YgIEd1aU1nQ29udHJvbCAmJiBvYmouaXNDaG9pY2VDb250cm9sKCkpXHJcbiAgICAgIHtcclxuICAgICAgICBpZih2YWx1ZSA8IDApXHJcbiAgICAgICAgICBndWlDb21tYW5kLnZhbHVlID0gJyc7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIEd1aUNvbW1hbmRRdWV1ZS5nZXRJbnN0YW5jZSgpLmFkZENvbW1hbmQoZ3VpQ29tbWFuZCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgc3RhdGljIGFkZE9wZXJhdGlvbldpdGhMaW5lKGNvbW1hbmRUeXBlOiBDb21tYW5kVHlwZSwgb2JqOiBhbnksIGxpbmU6IG51bWJlciwgb3BlcmF0aW9uOiBzdHJpbmcsIHZhbHVlOiBhbnkpOiB2b2lkIHtcclxuICAgIGxldCBndWlDb21tYW5kOiBHdWlDb21tYW5kID0gbmV3IEd1aUNvbW1hbmQob2JqLCBjb21tYW5kVHlwZSk7XHJcbiAgICBndWlDb21tYW5kLm9iajEgPSB2YWx1ZTtcclxuICAgIGd1aUNvbW1hbmQubGluZSA9IGxpbmU7XHJcbiAgICBndWlDb21tYW5kLk9wZXJhdGlvbiA9IG9wZXJhdGlvbjtcclxuICAgIEd1aUNvbW1hbmRRdWV1ZS5nZXRJbnN0YW5jZSgpLmFkZENvbW1hbmQoZ3VpQ29tbWFuZCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgc3RhdGljIGFkZE9wZW5zdWJmb3JtKGNvbW1hbmRUeXBlOiBDb21tYW5kVHlwZSwgb2JqOiBPYmplY3QsIGNhbGxlZFRhc2tUYWc6IHN0cmluZywgc3ViZm9ybUNvbnRyb2xOYW1lOiBzdHJpbmcsIGZvcm1OYW1lOiBzdHJpbmcsIGlucHV0Q29udHJvbHM6IHN0cmluZywgcm91dGVyUGF0aDogc3RyaW5nLCByb3V0ZXJQYXJhbXM6IExpc3Q8YW55PiwgaW5EZWZhdWx0Um91dGVyT3V0bGV0OiBib29sZWFuKTogdm9pZCB7XHJcbiAgICBsZXQgZ3VpQ29tbWFuZDogR3VpQ29tbWFuZCA9IG5ldyBHdWlDb21tYW5kKG9iaiwgY29tbWFuZFR5cGUpO1xyXG4gICAgZ3VpQ29tbWFuZC5zdHIgPSBjYWxsZWRUYXNrVGFnO1xyXG4gICAgZ3VpQ29tbWFuZC5vYmoxID0gc3ViZm9ybUNvbnRyb2xOYW1lO1xyXG4gICAgZ3VpQ29tbWFuZC51c2VyRHJvcEZvcm1hdCA9IGZvcm1OYW1lO1xyXG4gICAgZ3VpQ29tbWFuZC5maWxlTmFtZSA9IGlucHV0Q29udHJvbHM7XHJcbiAgICBndWlDb21tYW5kLkJvb2wxID0gaW5EZWZhdWx0Um91dGVyT3V0bGV0O1xyXG4gICAgZ3VpQ29tbWFuZC5jb250ZXh0SUQgPSByb3V0ZXJQYXRoO1xyXG4gICAgZ3VpQ29tbWFuZC5wYXJhbXMgPSByb3V0ZXJQYXJhbXM7XHJcbiAgICBHdWlDb21tYW5kUXVldWUuZ2V0SW5zdGFuY2UoKS5hZGRDb21tYW5kKGd1aUNvbW1hbmQpO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGFkZENsb3Nlc3ViZm9ybShjb21tYW5kVHlwZTogQ29tbWFuZFR5cGUsIG9iajogT2JqZWN0LCBjYWxsZWRUYXNrVGFnOiBzdHJpbmcsIHN1YmZvcm1Db250cm9sTmFtZTogc3RyaW5nLCBmb3JtTmFtZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBsZXQgZ3VpQ29tbWFuZDogR3VpQ29tbWFuZCA9IG5ldyBHdWlDb21tYW5kKG9iaiwgY29tbWFuZFR5cGUpO1xyXG4gICAgZ3VpQ29tbWFuZC5zdHIgPSBjYWxsZWRUYXNrVGFnO1xyXG4gICAgZ3VpQ29tbWFuZC5vYmoxID0gc3ViZm9ybUNvbnRyb2xOYW1lO1xyXG4gICAgZ3VpQ29tbWFuZC51c2VyRHJvcEZvcm1hdCA9IGZvcm1OYW1lO1xyXG4gICAgR3VpQ29tbWFuZFF1ZXVlLmdldEluc3RhbmNlKCkuYWRkQ29tbWFuZChndWlDb21tYW5kKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBhZGRPcGVuRm9ybShvYmo6IE9iamVjdCwgZm9ybU5hbWU6IHN0cmluZywgaGFuZGxlclRhc2tUYWc6IHN0cmluZywgY2FsbGVkVGFza1RhZzogc3RyaW5nLCBpbnB1dENvbnRyb2xzOiBzdHJpbmcsIGlzRGlhbG9nOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICBsZXQgZ3VpQ29tbWFuZDogR3VpQ29tbWFuZCA9IG5ldyBHdWlDb21tYW5kKG9iaiwgQ29tbWFuZFR5cGUuT1BFTl9GT1JNKTtcclxuICAgIGd1aUNvbW1hbmQuVGFza1RhZyA9IGhhbmRsZXJUYXNrVGFnO1xyXG4gICAgZ3VpQ29tbWFuZC5zdHIgPSBmb3JtTmFtZTtcclxuICAgIGd1aUNvbW1hbmQuc3RyaW5nTGlzdCA9IG5ldyBMaXN0PHN0cmluZz4oKTtcclxuICAgIGd1aUNvbW1hbmQuc3RyaW5nTGlzdC5wdXNoKGNhbGxlZFRhc2tUYWcpO1xyXG4gICAgZ3VpQ29tbWFuZC5zdHJpbmdMaXN0LnB1c2goaW5wdXRDb250cm9scyk7XHJcbiAgICBndWlDb21tYW5kLkJvb2wxID0gaXNEaWFsb2c7XHJcbiAgICBHdWlDb21tYW5kUXVldWUuZ2V0SW5zdGFuY2UoKS5hZGRDb21tYW5kKGd1aUNvbW1hbmQpO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGFkZENsb3NlRm9ybShvYmo6IE9iamVjdCwgaGFuZGxlclRhc2tUYWc6IHN0cmluZywgY2FsbGVkVGFza1RhZzogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBsZXQgZ3VpQ29tbWFuZDogR3VpQ29tbWFuZCA9IG5ldyBHdWlDb21tYW5kKG9iaiwgQ29tbWFuZFR5cGUuQ0xPU0VfRk9STSk7XHJcbiAgICBndWlDb21tYW5kLlRhc2tUYWcgPSBoYW5kbGVyVGFza1RhZztcclxuICAgIGd1aUNvbW1hbmQuc3RyID0gY2FsbGVkVGFza1RhZztcclxuICAgIEd1aUNvbW1hbmRRdWV1ZS5nZXRJbnN0YW5jZSgpLmFkZENvbW1hbmQoZ3VpQ29tbWFuZCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgYWRkQ2FsbEpTKGZvcm0gOiBhbnksIGZvcm1OYW1lOiBzdHJpbmcsIG5hbWU6IHN0cmluZywgYXJnczogQXJyYXk8YW55Pik6IHN0cmluZyB7XHJcbiAgICBsZXQgZ3VpSW50ZXJhY3RpdmU6IEd1aUludGVyYWN0aXZlID0gbmV3IEd1aUludGVyYWN0aXZlKCk7XHJcbiAgICByZXR1cm4gZ3VpSW50ZXJhY3RpdmUuRXhlY3V0ZUNhbGxKUyhmb3JtICwgZm9ybU5hbWUsICBuYW1lLCBhcmdzKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBhZGRJc0xvZ2dlZEluKHNldEJvb2w6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIGxldCBndWlDb21tYW5kOiBHdWlDb21tYW5kID0gbmV3IEd1aUNvbW1hbmQobnVsbCwgQ29tbWFuZFR5cGUuU0VUX0lTX0xPR0dFRF9JTik7XHJcbiAgICBndWlDb21tYW5kLkJvb2wxID0gc2V0Qm9vbDtcclxuICAgIEd1aUNvbW1hbmRRdWV1ZS5nZXRJbnN0YW5jZSgpLmFkZENvbW1hbmQoZ3VpQ29tbWFuZCk7XHJcbiAgfVxyXG5cclxuICAvLyBhZGRzIGEgY29tbWFuZCB0byBzaG93IG9yIGhpZGUgdGhlIHNwaW5uZXJcclxuICBzdGF0aWMgYWRkU2hvd1NwaW5uZXIoc2hvdzogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgbGV0IGd1aUNvbW1hbmQ6IEd1aUNvbW1hbmQgPSBuZXcgR3VpQ29tbWFuZChudWxsLCBDb21tYW5kVHlwZS5TSE9XX1NQSU5ORVIpO1xyXG4gICAgZ3VpQ29tbWFuZC5Cb29sMSA9IHNob3c7XHJcbiAgICBHdWlDb21tYW5kUXVldWUuZ2V0SW5zdGFuY2UoKS5hZGRDb21tYW5kKGd1aUNvbW1hbmQpO1xyXG4gIH1cclxuXHJcbiAgLy8gYWRkcyBhIGNvbW1hbmQgd2hpY2ggaXMgbm90IHJlbGF0ZWQgdG8gYSBzcGVjaWZpYyB0YXNrXHJcbiAgc3RhdGljIGFkZEdsb2JhbENvbW1hbmQoY29tbWFuZFR5cGU6IENvbW1hbmRUeXBlKTogdm9pZCB7XHJcbiAgICBsZXQgZ3VpQ29tbWFuZDogR3VpQ29tbWFuZCA9IG5ldyBHdWlDb21tYW5kKG51bGwsIGNvbW1hbmRUeXBlKTtcclxuICAgIEd1aUNvbW1hbmRRdWV1ZS5nZXRJbnN0YW5jZSgpLmFkZENvbW1hbmQoZ3VpQ29tbWFuZCk7XHJcbiAgfVxyXG5cclxuICAvLyBhZGRzIGEgY29tbWFuZCB0byBkaXNwbGF5IHRoZSBIVE1MIGVycm9yIHJlY2VpdmVkIGZyb20gdGhlIHJlcXVlc2VyXHJcbiAgc3RhdGljIGFkZFNob3dIVE1MRXJyb3IoY29tbWFuZFR5cGU6IENvbW1hbmRUeXBlLCBlcnJvcjogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBsZXQgZ3VpQ29tbWFuZDogR3VpQ29tbWFuZCA9IG5ldyBHdWlDb21tYW5kKG51bGwsIGNvbW1hbmRUeXBlKTtcclxuICAgIGd1aUNvbW1hbmQuc3RyID0gZXJyb3I7XHJcbiAgICBHdWlDb21tYW5kUXVldWUuZ2V0SW5zdGFuY2UoKS5hZGRDb21tYW5kKGd1aUNvbW1hbmQpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGV4ZWN1dGUgYWxsIHBlbmRpbmcgY29tbWFuZHMsIGFzeW5jaHJvbm91c2x5XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBzdGF0aWMgYmVnaW5JbnZva2UoKTogdm9pZCB7XHJcbiAgICBHdWlDb21tYW5kUXVldWUuZ2V0SW5zdGFuY2UoKS5iZWdpbkludm9rZSgpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGV4ZWN1dGUgYWxsIHBlbmRpbmcgY29tbWFuZHMsIHN5bmNocm9ub3VzbHlcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHN0YXRpYyBpbnZva2UoKTogdm9pZCB7XHJcbiAgICBHdWlDb21tYW5kUXVldWUuZ2V0SW5zdGFuY2UoKS5pbnZva2UoKTtcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gIH1cclxufVxyXG4iXX0=
|
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
import { __awaiter } from "tslib";
|
|
2
|
-
import { Commands } from "./Commands";
|
|
3
|
-
import { Events } from "./Events";
|
|
4
|
-
import { CommandType } from "./GuiEnums";
|
|
5
|
-
import { GuiControlPropertyAdapter } from "./management/gui/GuiControlPropertyAdapter";
|
|
6
|
-
export class FocusManager {
|
|
7
|
-
static SetFocus(ctrlOrItask, lineOrCtrl, line, activateForm) {
|
|
8
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
9
|
-
if (ctrlOrItask instanceof GuiControlPropertyAdapter) {
|
|
10
|
-
yield FocusManager.SetFocus_0(ctrlOrItask, lineOrCtrl);
|
|
11
|
-
return;
|
|
12
|
-
}
|
|
13
|
-
yield FocusManager.SetFocus_1(ctrlOrItask, lineOrCtrl, line, activateForm);
|
|
14
|
-
});
|
|
15
|
-
}
|
|
16
|
-
static SetFocus_0(ctrl, line) {
|
|
17
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
18
|
-
yield FocusManager.SetFocus(ctrl.getForm().getTask(), ctrl, line, true);
|
|
19
|
-
});
|
|
20
|
-
}
|
|
21
|
-
static SetFocus_1(itask, ctrl, line, activateForm) {
|
|
22
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
23
|
-
let task = itask;
|
|
24
|
-
if (task.isAborting())
|
|
25
|
-
return;
|
|
26
|
-
Events.OnCtrlFocus(itask, ctrl);
|
|
27
|
-
if (ctrl !== null) {
|
|
28
|
-
if (!(yield ctrl.isParkable(true)))
|
|
29
|
-
return;
|
|
30
|
-
Commands.addBoolWithLine(CommandType.SET_FOCUS, ctrl, (line >= 0) ? line : ctrl.getDisplayLine(false), activateForm);
|
|
31
|
-
}
|
|
32
|
-
else {
|
|
33
|
-
let formObject = task.IsSubForm
|
|
34
|
-
? task.getForm().getSubFormCtrl()
|
|
35
|
-
: task.getForm();
|
|
36
|
-
Commands.addBoolWithLine(CommandType.SET_FOCUS, formObject, 0, activateForm);
|
|
37
|
-
}
|
|
38
|
-
});
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRm9jdXNNYW5hZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZ3VpL3NyYy9Gb2N1c01hbmFnZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFHdEMsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUNsQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBRXZGLE1BQU0sT0FBTyxZQUFZO0lBS3ZCLE1BQU0sQ0FBTyxRQUFRLENBQUMsV0FBZ0IsRUFBRSxVQUFlLEVBQUUsSUFBYSxFQUFFLFlBQXNCOztZQUM1RixJQUFJLFdBQVcsWUFBWSx5QkFBeUIsRUFBRTtnQkFDcEQsTUFBTSxZQUFZLENBQUMsVUFBVSxDQUFDLFdBQVcsRUFBRSxVQUFVLENBQUMsQ0FBQztnQkFDdkQsT0FBTzthQUNSO1lBQ0QsTUFBTSxZQUFZLENBQUMsVUFBVSxDQUFDLFdBQVcsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQzdFLENBQUM7S0FBQTtJQU9PLE1BQU0sQ0FBTyxVQUFVLENBQUMsSUFBK0IsRUFBRSxJQUFZOztZQUMzRSxNQUFNLFlBQVksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLE9BQU8sRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDMUUsQ0FBQztLQUFBO0lBU08sTUFBTSxDQUFPLFVBQVUsQ0FBQyxLQUFZLEVBQUUsSUFBK0IsRUFBRSxJQUFZLEVBQUUsWUFBcUI7O1lBQ2hILElBQUksSUFBSSxHQUE2QixLQUFLLENBQUM7WUFDM0MsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO2dCQUNuQixPQUFPO1lBRVQsTUFBTSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFFaEMsSUFBSSxJQUFJLEtBQUssSUFBSSxFQUFFO2dCQUNqQixJQUFJLENBQUMsQ0FBQSxNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUE7b0JBQzlCLE9BQU87Z0JBQ1QsUUFBUSxDQUFDLGVBQWUsQ0FBQyxXQUFXLENBQUMsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxFQUFFLFlBQVksQ0FBQyxDQUFDO2FBQ3RIO2lCQUNJO2dCQUNILElBQUksVUFBVSxHQUFRLElBQUksQ0FBQyxTQUFTO29CQUNsQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLGNBQWMsRUFBRTtvQkFDakMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFFbkIsUUFBUSxDQUFDLGVBQWUsQ0FBQyxXQUFXLENBQUMsU0FBUyxFQUFFLFVBQVUsRUFBRSxDQUFDLEVBQUUsWUFBWSxDQUFDLENBQUM7YUFDOUU7UUFDSCxDQUFDO0tBQUE7Q0FFRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1hbmRzIH0gZnJvbSBcIi4vQ29tbWFuZHNcIjtcclxuaW1wb3J0IHsgR3VpVGFza0Jhc2UgfSBmcm9tIFwiLi9tYW5hZ2VtZW50L3Rhc2tzL0d1aVRhc2tCYXNlXCI7XHJcbmltcG9ydCB7IElUYXNrIH0gZnJvbSBcIi4vbWFuYWdlbWVudC90YXNrcy9JVGFza1wiO1xyXG5pbXBvcnQgeyBFdmVudHMgfSBmcm9tIFwiLi9FdmVudHNcIjtcclxuaW1wb3J0IHsgQ29tbWFuZFR5cGUgfSBmcm9tIFwiLi9HdWlFbnVtc1wiO1xyXG5pbXBvcnQgeyBHdWlDb250cm9sUHJvcGVydHlBZGFwdGVyIH0gZnJvbSBcIi4vbWFuYWdlbWVudC9ndWkvR3VpQ29udHJvbFByb3BlcnR5QWRhcHRlclwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIEZvY3VzTWFuYWdlclxyXG57XHJcblxyXG4gIHN0YXRpYyBhc3luYyBTZXRGb2N1cyhjdHJsOiBHdWlDb250cm9sUHJvcGVydHlBZGFwdGVyLCBsaW5lOiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+O1xyXG4gIHN0YXRpYyBhc3luYyBTZXRGb2N1cyhpdGFzazogSVRhc2ssIGN0cmw6IEd1aUNvbnRyb2xQcm9wZXJ0eUFkYXB0ZXIsIGxpbmU6IG51bWJlciwgYWN0aXZhdGVGb3JtOiBib29sZWFuKTogUHJvbWlzZTx2b2lkPjtcclxuICBzdGF0aWMgYXN5bmMgU2V0Rm9jdXMoY3RybE9ySXRhc2s6IGFueSwgbGluZU9yQ3RybDogYW55LCBsaW5lPzogbnVtYmVyLCBhY3RpdmF0ZUZvcm0/OiBib29sZWFuKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBpZiAoY3RybE9ySXRhc2sgaW5zdGFuY2VvZiBHdWlDb250cm9sUHJvcGVydHlBZGFwdGVyKSB7XHJcbiAgICAgIGF3YWl0IEZvY3VzTWFuYWdlci5TZXRGb2N1c18wKGN0cmxPckl0YXNrLCBsaW5lT3JDdHJsKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgYXdhaXQgRm9jdXNNYW5hZ2VyLlNldEZvY3VzXzEoY3RybE9ySXRhc2ssIGxpbmVPckN0cmwsIGxpbmUsIGFjdGl2YXRlRm9ybSk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgc2V0IHRoZSBmb2N1cyB0byB0aGUgc3BlY2lmaWVkIGNvbnRyb2xcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiY3RybFwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJsaW5lXCI+PC9wYXJhbT5cclxuICBwcml2YXRlIHN0YXRpYyBhc3luYyBTZXRGb2N1c18wKGN0cmw6IEd1aUNvbnRyb2xQcm9wZXJ0eUFkYXB0ZXIsIGxpbmU6IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgYXdhaXQgRm9jdXNNYW5hZ2VyLlNldEZvY3VzKGN0cmwuZ2V0Rm9ybSgpLmdldFRhc2soKSwgY3RybCwgbGluZSwgdHJ1ZSk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgc2V0IHRoZSBmb2N1cyB0byB0aGUgc3BlY2lmaWVkIGNvbnRyb2xcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiaXRhc2tcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiY3RybFwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJsaW5lXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJhY3RpdmF0ZUZvcm1cIj5hY3RpdmF0ZSBhIGZvcm0gb3Igbm90PC9wYXJhbT5cclxuICBwcml2YXRlIHN0YXRpYyBhc3luYyBTZXRGb2N1c18xKGl0YXNrOiBJVGFzaywgY3RybDogR3VpQ29udHJvbFByb3BlcnR5QWRhcHRlciwgbGluZTogbnVtYmVyLCBhY3RpdmF0ZUZvcm06IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGxldCB0YXNrOiBHdWlUYXNrQmFzZSA9IDxHdWlUYXNrQmFzZT5pdGFzaztcclxuICAgIGlmICh0YXNrLmlzQWJvcnRpbmcoKSlcclxuICAgICAgcmV0dXJuO1xyXG5cclxuICAgIEV2ZW50cy5PbkN0cmxGb2N1cyhpdGFzaywgY3RybCk7XHJcblxyXG4gICAgaWYgKGN0cmwgIT09IG51bGwpIHtcclxuICAgICAgaWYgKCFhd2FpdCBjdHJsLmlzUGFya2FibGUodHJ1ZSkpXHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICBDb21tYW5kcy5hZGRCb29sV2l0aExpbmUoQ29tbWFuZFR5cGUuU0VUX0ZPQ1VTLCBjdHJsLCAobGluZSA+PSAwKSA/IGxpbmUgOiBjdHJsLmdldERpc3BsYXlMaW5lKGZhbHNlKSwgYWN0aXZhdGVGb3JtKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBsZXQgZm9ybU9iamVjdDogYW55ID0gdGFzay5Jc1N1YkZvcm1cclxuICAgICAgICA/IHRhc2suZ2V0Rm9ybSgpLmdldFN1YkZvcm1DdHJsKClcclxuICAgICAgICA6IHRhc2suZ2V0Rm9ybSgpO1xyXG5cclxuICAgICAgQ29tbWFuZHMuYWRkQm9vbFdpdGhMaW5lKENvbW1hbmRUeXBlLlNFVF9GT0NVUywgZm9ybU9iamVjdCwgMCwgYWN0aXZhdGVGb3JtKTtcclxuICAgIH1cclxuICB9XHJcblxyXG59XHJcbiJdfQ==
|
package/esm2015/src/Manager.js
DELETED
|
@@ -1,197 +0,0 @@
|
|
|
1
|
-
import { __awaiter } from "tslib";
|
|
2
|
-
import { NString, StackFrame } from "@magic-xpa/mscorelib";
|
|
3
|
-
import { UtilImeJpn, UtilStrByteMode } from "@magic-xpa/utils";
|
|
4
|
-
import { GuiMgControl } from "./gui/GuiMgControl";
|
|
5
|
-
import { Commands } from "./Commands";
|
|
6
|
-
import { CommandType, HtmlProperties } from "./GuiEnums";
|
|
7
|
-
import { Events } from "./Events";
|
|
8
|
-
import { GuiMgForm } from "./gui/GuiMgForm";
|
|
9
|
-
import { PropInterface } from "./management/gui/PropInterface";
|
|
10
|
-
import { GuiEnvironment } from "./GuiEnvironment";
|
|
11
|
-
export class Manager {
|
|
12
|
-
static SetCurrentContextID(contextID) {
|
|
13
|
-
Manager._currentContextID = contextID;
|
|
14
|
-
}
|
|
15
|
-
static GetCurrentContextID() {
|
|
16
|
-
return Manager._currentContextID;
|
|
17
|
-
}
|
|
18
|
-
static GetDelayWait() {
|
|
19
|
-
return Manager._delayWait;
|
|
20
|
-
}
|
|
21
|
-
static CanFocus() {
|
|
22
|
-
return false;
|
|
23
|
-
}
|
|
24
|
-
static Init(startupImageFileName) {
|
|
25
|
-
return;
|
|
26
|
-
}
|
|
27
|
-
static Abort(form) {
|
|
28
|
-
if (form.getSubFormCtrl() === null && form.Opened) {
|
|
29
|
-
if (form.isDialog()) {
|
|
30
|
-
this.IsOverlayOpen = false;
|
|
31
|
-
let topMostFrameForm = form.getTopMostFrameForm();
|
|
32
|
-
if (topMostFrameForm !== null)
|
|
33
|
-
topMostFrameForm.UpdateModalFormsCount(form, false);
|
|
34
|
-
}
|
|
35
|
-
Commands.addCloseForm(form, "0", form.getTask().getTaskTag());
|
|
36
|
-
Commands.beginInvoke();
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
static GetCtrlVal(ctrl) {
|
|
40
|
-
return Commands.getValue(ctrl, ctrl.getDisplayLine(true));
|
|
41
|
-
}
|
|
42
|
-
static SetReadOnlyControl(ctrl, isReadOnly) {
|
|
43
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
44
|
-
if (ctrl.isTextControl() || ctrl.IsRepeatable) {
|
|
45
|
-
if (UtilStrByteMode.isLocaleDefLangDBCS()) {
|
|
46
|
-
if (yield ctrl.getForm().getTask().checkProp(PropInterface.PROP_TYPE_ALLOW_LOCATE_IN_QUERY, false))
|
|
47
|
-
return;
|
|
48
|
-
}
|
|
49
|
-
Commands.addOperationWithLine(CommandType.SET_PROPERTY, ctrl, ctrl.getDisplayLine(false), HtmlProperties.ReadOnly, isReadOnly);
|
|
50
|
-
Commands.beginInvoke();
|
|
51
|
-
}
|
|
52
|
-
});
|
|
53
|
-
}
|
|
54
|
-
static OpenForm(mgForm) {
|
|
55
|
-
if (!mgForm.Opened && (mgForm.getTask().IsInteractive || mgForm.getTask().isOpenWin())) {
|
|
56
|
-
if (!mgForm.isSubForm()) {
|
|
57
|
-
if (mgForm.isDialog()) {
|
|
58
|
-
this.IsOverlayOpen = true;
|
|
59
|
-
let topMostFrameForm = mgForm.getTopMostFrameForm();
|
|
60
|
-
if (topMostFrameForm !== null)
|
|
61
|
-
topMostFrameForm.UpdateModalFormsCount(mgForm, true);
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
mgForm.Opened = true;
|
|
65
|
-
Commands.beginInvoke();
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
static DoFirstRefreshTable(mgForm) {
|
|
69
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
70
|
-
if (mgForm !== null && !mgForm.ignoreFirstRefreshTable) {
|
|
71
|
-
mgForm.ignoreFirstRefreshTable = true;
|
|
72
|
-
yield mgForm.firstTableRefresh();
|
|
73
|
-
}
|
|
74
|
-
});
|
|
75
|
-
}
|
|
76
|
-
static CaretPosGet(ctrl) {
|
|
77
|
-
let caretPos = 0;
|
|
78
|
-
if (ctrl.isTextControl())
|
|
79
|
-
caretPos = Commands.caretPosGet(ctrl, ctrl.getDisplayLine(true));
|
|
80
|
-
return caretPos;
|
|
81
|
-
}
|
|
82
|
-
static ClearStatusBar(task) {
|
|
83
|
-
let currentParkedControl = task.getLastParkedCtrl();
|
|
84
|
-
if (currentParkedControl !== null && !NString.IsNullOrEmpty(currentParkedControl.PromptHelp))
|
|
85
|
-
task.WriteToMessagePane(currentParkedControl.PromptHelp);
|
|
86
|
-
else
|
|
87
|
-
Manager.CleanMessagePane(task);
|
|
88
|
-
}
|
|
89
|
-
static CleanMessagePane(task) {
|
|
90
|
-
task.WriteToMessagePane(Manager.GetCurrentRuntimeContext().DefaultStatusMsg);
|
|
91
|
-
}
|
|
92
|
-
static GetMessage(msg) {
|
|
93
|
-
if (msg === null)
|
|
94
|
-
msg = "";
|
|
95
|
-
else if (msg.length > 0) {
|
|
96
|
-
let idxOfCarriage = msg.indexOf("\r");
|
|
97
|
-
if (idxOfCarriage !== -1)
|
|
98
|
-
msg = msg.substr(0, idxOfCarriage);
|
|
99
|
-
let idxOfNewLine = msg.indexOf("\n");
|
|
100
|
-
if (idxOfNewLine !== -1)
|
|
101
|
-
msg = msg.substr(0, idxOfNewLine);
|
|
102
|
-
}
|
|
103
|
-
return msg;
|
|
104
|
-
}
|
|
105
|
-
static SetEditText(ctrl, text) {
|
|
106
|
-
Commands.setEditText(ctrl, ctrl.getDisplayLine(true), text);
|
|
107
|
-
}
|
|
108
|
-
static InsertEditText(ctrl, startPosition, textToInsert) {
|
|
109
|
-
Commands.insertEditText(ctrl, ctrl.getDisplayLine(true), startPosition, textToInsert);
|
|
110
|
-
}
|
|
111
|
-
static GetTooltipTimeout() {
|
|
112
|
-
return GuiEnvironment.Environment.GetTooltipTimeout();
|
|
113
|
-
}
|
|
114
|
-
static GetSpecialEditLeftAlign() {
|
|
115
|
-
return GuiEnvironment.Environment.GetSpecialEditLeftAlign();
|
|
116
|
-
}
|
|
117
|
-
static GetDefaultDateFormat() {
|
|
118
|
-
let dateFormat = "";
|
|
119
|
-
let dateSeperator = GuiEnvironment.Environment.GetDate();
|
|
120
|
-
switch (GuiEnvironment.Environment.GetDateMode(0)) {
|
|
121
|
-
case 'S':
|
|
122
|
-
dateFormat = "YYYY" + dateSeperator + "MM" + dateSeperator + "DD";
|
|
123
|
-
break;
|
|
124
|
-
case 'B':
|
|
125
|
-
case 'E':
|
|
126
|
-
dateFormat = "DD" + dateSeperator + "MM" + dateSeperator + "YYYY";
|
|
127
|
-
break;
|
|
128
|
-
case 'A':
|
|
129
|
-
dateFormat = "MM" + dateSeperator + "DD" + dateSeperator + "YYYY";
|
|
130
|
-
break;
|
|
131
|
-
}
|
|
132
|
-
return dateFormat;
|
|
133
|
-
}
|
|
134
|
-
static GetDefaultTimeFormat() {
|
|
135
|
-
let timeSeperator = GuiEnvironment.Environment.GetTime();
|
|
136
|
-
let timeFormat = "HH" + timeSeperator + "MM" + timeSeperator + "SS";
|
|
137
|
-
return timeFormat;
|
|
138
|
-
}
|
|
139
|
-
static GetCurrentRuntimeContext() {
|
|
140
|
-
return Events.GetRuntimeContext(Manager.GetCurrentContextID());
|
|
141
|
-
}
|
|
142
|
-
static GetContextID(mgObject) {
|
|
143
|
-
let guiMgForm = null;
|
|
144
|
-
if (mgObject instanceof GuiMgControl)
|
|
145
|
-
guiMgForm = mgObject.GuiMgForm;
|
|
146
|
-
else if (mgObject instanceof GuiMgForm)
|
|
147
|
-
guiMgForm = mgObject;
|
|
148
|
-
return Events.GetContextID(guiMgForm);
|
|
149
|
-
}
|
|
150
|
-
static ShowWindowHelp(filePath, helpCmd, helpKey) {
|
|
151
|
-
}
|
|
152
|
-
static GetSpecialValNewPolicy() {
|
|
153
|
-
return GuiEnvironment.Environment.GetSpecialValNewPolicy();
|
|
154
|
-
}
|
|
155
|
-
}
|
|
156
|
-
Manager.IsOverlayOpen = false;
|
|
157
|
-
Manager._delayWait = new Object();
|
|
158
|
-
Manager._clipboardData = "";
|
|
159
|
-
Manager._currentContextID = '\0';
|
|
160
|
-
Manager.DefaultProtocol = null;
|
|
161
|
-
Manager.DefaultServerName = null;
|
|
162
|
-
Manager.UtilImeJpn = (UtilStrByteMode.isLocaleDefLangJPN() ? new UtilImeJpn() : null);
|
|
163
|
-
Manager.EventsManager = null;
|
|
164
|
-
export class ContextIDGuard {
|
|
165
|
-
constructor(contextID) {
|
|
166
|
-
this._prevContextID = '\0';
|
|
167
|
-
this._fileName = null;
|
|
168
|
-
if (arguments.length === 0) {
|
|
169
|
-
this.constructor_0();
|
|
170
|
-
return;
|
|
171
|
-
}
|
|
172
|
-
this.constructor_1(contextID);
|
|
173
|
-
}
|
|
174
|
-
constructor_0() {
|
|
175
|
-
this._prevContextID = Manager.GetCurrentContextID();
|
|
176
|
-
this.SaveFilename();
|
|
177
|
-
}
|
|
178
|
-
constructor_1(contextID) {
|
|
179
|
-
this.SetCurrent(contextID);
|
|
180
|
-
this.SaveFilename();
|
|
181
|
-
}
|
|
182
|
-
SetCurrent(contextID) {
|
|
183
|
-
if (contextID !== this._prevContextID) {
|
|
184
|
-
this._prevContextID = contextID;
|
|
185
|
-
Manager.SetCurrentContextID(contextID);
|
|
186
|
-
}
|
|
187
|
-
}
|
|
188
|
-
SaveFilename() {
|
|
189
|
-
let stackFrame = new StackFrame(1);
|
|
190
|
-
this._fileName = stackFrame.GetFileName();
|
|
191
|
-
}
|
|
192
|
-
Dispose() {
|
|
193
|
-
if (this._prevContextID !== Manager.GetCurrentContextID())
|
|
194
|
-
Manager.SetCurrentContextID(this._prevContextID);
|
|
195
|
-
}
|
|
196
|
-
}
|
|
197
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWFuYWdlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2d1aS9zcmMvTWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBR0EsT0FBTyxFQUFDLE9BQU8sRUFBRSxVQUFVLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUN6RCxPQUFPLEVBQWMsVUFBVSxFQUFFLGVBQWUsRUFBQyxNQUFNLGtCQUFrQixDQUFDO0FBRTFFLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUdoRCxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sWUFBWSxDQUFDO0FBRXBDLE9BQU8sRUFBQyxXQUFXLEVBQUUsY0FBYyxFQUFDLE1BQU0sWUFBWSxDQUFDO0FBQ3ZELE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFFaEMsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQzFDLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxnQ0FBZ0MsQ0FBQztBQUM3RCxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sa0JBQWtCLENBQUM7QUFHaEQsTUFBTSxPQUFPLE9BQU87SUFtQmxCLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxTQUFpQjtRQUMxQyxPQUFPLENBQUMsaUJBQWlCLEdBQUcsU0FBUyxDQUFDO0lBQ3hDLENBQUM7SUFNRCxNQUFNLENBQUMsbUJBQW1CO1FBQ3hCLE9BQU8sT0FBTyxDQUFDLGlCQUFpQixDQUFDO0lBQ25DLENBQUM7SUFNRCxNQUFNLENBQUMsWUFBWTtRQUNqQixPQUFPLE9BQU8sQ0FBQyxVQUFVLENBQUM7SUFDNUIsQ0FBQztJQU9ELE1BQU0sQ0FBQyxRQUFRO1FBQ2IsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBR0QsTUFBTSxDQUFDLElBQUksQ0FBQyxvQkFBNEI7UUFDdEMsT0FBTztJQUNULENBQUM7SUFRRCxNQUFNLENBQUMsS0FBSyxDQUFD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QyxjQUFjLEtBQUssT0FBTyxDQUFDLG1CQUFtQixFQUFFO1lBQ3ZELE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDckQsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLy8vIDxzdW1tYXJ5PlxyXG4vLy8gTWdHdWkuZGxsJ3MgbWFuYWdlciAtIGFzc2VtYmx5IGxldmVsIHByb3BlcnRpZXMgYW5kIG1ldGhvZHMuXHJcbi8vLyA8L3N1bW1hcnk+XHJcbmltcG9ydCB7TlN0cmluZywgU3RhY2tGcmFtZX0gZnJvbSBcIkBtYWdpYy14cGEvbXNjb3JlbGliXCI7XHJcbmltcG9ydCB7SGVscENvbW1hbmQsIFV0aWxJbWVKcG4sIFV0aWxTdHJCeXRlTW9kZX0gZnJvbSBcIkBtYWdpYy14cGEvdXRpbHNcIjtcclxuaW1wb3J0IHtJR3VpRXZlbnRzTWFuYWdlcn0gZnJvbSBcIi4vbWFuYWdlbWVudC9ldmVudHMvSUd1aUV2ZW50c01hbmFnZXJcIjtcclxuaW1wb3J0IHtHdWlNZ0NvbnRyb2x9IGZyb20gXCIuL2d1aS9HdWlNZ0NvbnRyb2xcIjtcclxuaW1wb3J0IHtHdWlUYXNrQmFzZX0gZnJvbSBcIi4vbWFuYWdlbWVudC90YXNrcy9HdWlUYXNrQmFzZVwiO1xyXG5pbXBvcnQge01nQ29udHJvbEJhc2V9IGZyb20gXCIuL21hbmFnZW1lbnQvZ3VpL01nQ29udHJvbEJhc2VcIjtcclxuaW1wb3J0IHtDb21tYW5kc30gZnJvbSBcIi4vQ29tbWFuZHNcIjtcclxuaW1wb3J0IHtNZ0Zvcm1CYXNlfSBmcm9tIFwiLi9tYW5hZ2VtZW50L2d1aS9NZ0Zvcm1CYXNlXCI7XHJcbmltcG9ydCB7Q29tbWFuZFR5cGUsIEh0bWxQcm9wZXJ0aWVzfSBmcm9tIFwiLi9HdWlFbnVtc1wiO1xyXG5pbXBvcnQge0V2ZW50c30gZnJvbSBcIi4vRXZlbnRzXCI7XHJcbmltcG9ydCB7UnVudGltZUNvbnRleHRCYXNlfSBmcm9tIFwiLi9tYW5hZ2VtZW50L1J1bnRpbWVDb250ZXh0QmFzZVwiO1xyXG5pbXBvcnQge0d1aU1nRm9ybX0gZnJvbSBcIi4vZ3VpL0d1aU1nRm9ybVwiO1xyXG5pbXBvcnQge1Byb3BJbnRlcmZhY2V9IGZyb20gXCIuL21hbmFnZW1lbnQvZ3VpL1Byb3BJbnRlcmZhY2VcIjtcclxuaW1wb3J0IHtHdWlFbnZpcm9ubWVudH0gZnJvbSBcIi4vR3VpRW52aXJvbm1lbnRcIjtcclxuXHJcblxyXG5leHBvcnQgY2xhc3MgTWFuYWdlciB7XHJcbiAgc3RhdGljIElzT3ZlcmxheU9wZW46IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwcml2YXRlIHN0YXRpYyBfZGVsYXlXYWl0OiBPYmplY3QgPSBuZXcgT2JqZWN0KCk7IC8vIHRoaXMgb2JqZWN0IGlzIHVzZWQgZm9yIGV4ZWN1dGlvbiBhbmQgaW50ZXJydXB0aW5nIGRlbGF5IGNvbW1hbmRcclxuICBwcml2YXRlIHN0YXRpYyBfY2xpcGJvYXJkRGF0YTogc3RyaW5nID0gXCJcIjsgLy8gRGF0YSB0byBiZSB3cml0dGVuIHRvIHRoZSBjbGlwYm9hcmQuXHJcblxyXG4gIC8vIFRoaXMgd2lsbCBob2xkIHRoZSBjb250ZXh0SUQgZm9yIGEgY3VycmVudCB0aHJlYWQuXHJcbiAgLy8gVGhyZWFkIHN0YXRpYyBpcyBhIHNlcGFyYXRlIGZvciBlYWNoIHRocmVhZCAoaS5lLjogdmFsdWUgb2YgYSBzdGF0aWMgZmllbGQgaXMgdW5pcXVlIGZvciBlYWNoIHRocmVhZCkuXHJcbiAgLy8gaHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L3N5c3RlbS50aHJlYWRzdGF0aWNhdHRyaWJ1dGUuYXNweFxyXG4gIHByaXZhdGUgc3RhdGljIF9jdXJyZW50Q29udGV4dElEOiBzdHJpbmcgPSAnXFwwJztcclxuXHJcbiAgc3RhdGljIERlZmF1bHRQcm90b2NvbDogc3RyaW5nID0gbnVsbDsgLy8gZGVmYXVsdCBwcm90b2NvbCAoaHR0cC9odHRwcykgYW5kIHNlcnZlciBuYW1lIHRvIGJlIHVzZWQgZm9yIGFueSByZWxhdGl2ZSB1cmxcclxuICBzdGF0aWMgRGVmYXVsdFNlcnZlck5hbWU6IHN0cmluZyA9IG51bGw7XHJcbiAgc3RhdGljIFV0aWxJbWVKcG46IFV0aWxJbWVKcG4gPSAoVXRpbFN0ckJ5dGVNb2RlLmlzTG9jYWxlRGVmTGFuZ0pQTigpID8gbmV3IFV0aWxJbWVKcG4oKSA6IG51bGwpOyAvLyBKUE46IElNRSBzdXBwb3J0XHJcbiAgc3RhdGljIEV2ZW50c01hbmFnZXI6IElHdWlFdmVudHNNYW5hZ2VyID0gbnVsbDtcclxuXHJcbiAgLy8vIDxzdW1tYXJ5PihwdWJsaWMpXHJcbiAgLy8vIFNldCB0aGUgY29udGV4dCBJRCBmb3IgYSBjdXJyZW50IHRocmVhZFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiY29udGV4dElEXCI+PC9wYXJhbT5cclxuICBzdGF0aWMgU2V0Q3VycmVudENvbnRleHRJRChjb250ZXh0SUQ6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgTWFuYWdlci5fY3VycmVudENvbnRleHRJRCA9IGNvbnRleHRJRDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gR2V0IHRoZSBjb250ZXh0IElEIGZvciBhIGN1cnJlbnQgdGhyZWFkXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+Y3VycmVudCB0aHJlYWQncyBjb250ZXh0SUQ8L3JldHVybnM+XHJcbiAgc3RhdGljIEdldEN1cnJlbnRDb250ZXh0SUQoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBNYW5hZ2VyLl9jdXJyZW50Q29udGV4dElEO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGdldCBvYmplY3QgdGhhdCBpcyB1c2VkIGZvciBleGVjdXRpb24gYW5kIGludGVycnVwdGluZyBkZWxheSBjb21tYW5kLlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBzdGF0aWMgR2V0RGVsYXlXYWl0KCk6IGFueSB7XHJcbiAgICByZXR1cm4gTWFuYWdlci5fZGVsYXlXYWl0O1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGNoZWNrIGlmIGRvdCBuZXQgY29udHJvbCBjYW4gYmUgZm9jdXNlZFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJndWlNZ0NvbnRyb2xcIj48L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgc3RhdGljIENhbkZvY3VzKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcblxyXG4gIHN0YXRpYyBJbml0KHN0YXJ0dXBJbWFnZUZpbGVOYW1lOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHJldHVybjtcclxuICB9XHJcblxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICBjbG9zZSB0aGUgdGFza1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJmb3JtXCI+IDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwibWFpblByZ1Rhc2tcIj48L3BhcmFtPlxyXG4gIHN0YXRpYyBBYm9ydChmb3JtOiBNZ0Zvcm1CYXNlKTogdm9pZCB7XHJcblxyXG4gICAgaWYgKGZvcm0uZ2V0U3ViRm9ybUN0cmwoKSA9PT0gbnVsbCAmJiBmb3JtLk9wZW5lZCkge1xyXG4gICAgICAvLyBpZiB0aGUgY2xvc2luZyBmb3JtIGlzICdvcGVuZWQgYXMgYSBtb2RhbCcgdGhlbiBkZWNyZW1lbnQgdGhlIG1vZGFsIGNvdW50IG9uIGl0cyBmcmFtZSB3aW5kb3cuXHJcbiAgICAgIGlmIChmb3JtLmlzRGlhbG9nKCkpIHtcclxuICAgICAgICB0aGlzLklzT3ZlcmxheU9wZW4gPSBmYWxzZTtcclxuXHJcbiAgICAgICAgbGV0IHRvcE1vc3RGcmFtZUZvcm06IE1nRm9ybUJhc2UgPSBmb3JtLmdldFRvcE1vc3RGcmFtZUZvcm0oKTtcclxuICAgICAgICBpZiAodG9wTW9zdEZyYW1lRm9ybSAhPT0gbnVsbClcclxuICAgICAgICAgIHRvcE1vc3RGcmFtZUZvcm0uVXBkYXRlTW9kYWxGb3Jtc0NvdW50KGZvcm0sIGZhbHNlKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgQ29tbWFuZHMuYWRkQ2xvc2VGb3JtKGZvcm0sIFwiMFwiLCBmb3JtLmdldFRhc2soKS5nZXRUYXNrVGFnKCkpO1xyXG5cclxuICAgICAgQ29tbWFuZHMuYmVnaW5JbnZva2UoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm5zIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBjb250cm9sXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImN0cmxcIj5jb250cm9sIHRvIGdldCB2YWx1ZSA8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4gdmFsdWUgb2YgdGhlIGNvbnRyb2wgPC9yZXR1cm5zPlxyXG4gIHN0YXRpYyBHZXRDdHJsVmFsKGN0cmw6IE1nQ29udHJvbEJhc2UpOiBzdHJpbmcge1xyXG4gICAgLy8gUUNSICM3NDUxMTc6IE1ha2Ugc3VyZSB0aGF0IGlmIHRoZSBjb250ZW50cyBvZiBhIGNvbnRyb2wgd2VyZSBjaGFuZ2VkXHJcbiAgICAvLyB0aGVuIHRoZSBjaGFuZ2VzIGFyZSBhcHBsaWVkIGJlZm9yZSBleGFtaW5pbmcgaXRzIHZhbHVlLlxyXG4gICAgcmV0dXJuIENvbW1hbmRzLmdldFZhbHVlKGN0cmwsIGN0cmwuZ2V0RGlzcGxheUxpbmUodHJ1ZSkpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIFNldCByZWFkIG9ubHkgZm9yIGNvbnRyb2xzXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImN0cmxcIj50aGUgY29udHJvbCB0byBjaGFuZ2UgaXRzIHByb3BlcnR5IDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJpc1JlYWRPbmx5XCI+Ym9vbGVhbiA8L3BhcmFtPlxyXG4gIHN0YXRpYyBhc3luYyBTZXRSZWFkT25seUNvbnRyb2woY3RybDogTWdDb250cm9sQmFzZSwgaXNSZWFkT25seTogYm9vbGVhbik6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgaWYgKGN0cmwuaXNUZXh0Q29udHJvbCgpIHx8IGN0cmwuSXNSZXBlYXRhYmxlKSAvLyBEZWZlY3QgMTMxODAyOiBTZXQgUmVhZE9ubHkgZm9yIFJpY2ggVGV4dCBjb250cm9sIGluIFRhYmxlIEhlYWRlciBhbmQgZGVmZWN0IDEzMTcwNDogaW4gZ2VuZXJhbCBmb3IgUmljaCBUZXh0LlxyXG4gICAge1xyXG4gICAgICAvLyBKUE46IElNRSBzdXBwb3J0IChlbmFibGUgSU1FIGluIHF1ZXJ5IG1vZGUpXHJcbiAgICAgIGlmIChVdGlsU3RyQnl0ZU1vZGUuaXNMb2NhbGVEZWZMYW5nREJDUygpKSB7XHJcbiAgICAgICAgaWYgKGF3YWl0IGN0cmwuZ2V0Rm9ybSgpLmdldFRhc2soKS5jaGVja1Byb3AoUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfQUxMT1dfTE9DQVRFX0lOX1FVRVJZLCBmYWxzZSkpXHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgQ29tbWFuZHMuYWRkT3BlcmF0aW9uV2l0aExpbmUoQ29tbWFuZFR5cGUuU0VUX1BST1BFUlRZLCBjdHJsLCBjdHJsLmdldERpc3BsYXlMaW5lKGZhbHNlKSwgSHRtbFByb3BlcnRpZXMuUmVhZE9ubHksIGlzUmVhZE9ubHkpO1xyXG5cclxuICAgICAgQ29tbWFuZHMuYmVnaW5JbnZva2UoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG5cclxuICAvLy8gPHN1bW1hcnk+IE9wZW4gdGhlIGZvcm0uIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJtZ0Zvcm1cIj5mb3JtIHRvIGJlIG9wZW5lZC48L3BhcmFtPlxyXG4gIHN0YXRpYyBPcGVuRm9ybShtZ0Zvcm06IE1nRm9ybUJhc2UpOiB2b2lkIHtcclxuICAgIC8vIG5vbiBpbnRlcmFjdGl2ZSBjYW4gY2hvb3NlIG5vdCB0byBvcGVuIHRoZSB3aW5kb3cuXHJcbiAgICBpZiAoIW1nRm9ybS5PcGVuZWQgJiYgKG1nRm9ybS5nZXRUYXNrKCkuSXNJbnRlcmFjdGl2ZSB8fCBtZ0Zvcm0uZ2V0VGFzaygpLmlzT3BlbldpbigpKSkge1xyXG4gICAgICBpZiAoIW1nRm9ybS5pc1N1YkZvcm0oKSkge1xyXG4gICAgICAgIC8vIGlmIHRoZSBmb3JtIGlzIHRvIGJlIG9wZW5lZCBhcyBhIG1vZGFsLCB0aGVuIGluY3JlbWVudCB0aGUgbW9kYWwgY291bnQgb24gaXRzIGZyYW1lIHdpbmRvdy5cclxuICAgICAgICBpZiAobWdGb3JtLmlzRGlhbG9nKCkpIHtcclxuICAgICAgICAgIHRoaXMuSXNPdmVybGF5T3BlbiA9IHRydWU7XHJcblxyXG4gICAgICAgICAgbGV0IHRvcE1vc3RGcmFtZUZvcm06IE1nRm9ybUJhc2UgPSBtZ0Zvcm0uZ2V0VG9wTW9zdEZyYW1lRm9ybSgpO1xyXG4gICAgICAgICAgaWYgKHRvcE1vc3RGcmFtZUZvcm0gIT09IG51bGwpXHJcbiAgICAgICAgICAgIHRvcE1vc3RGcmFtZUZvcm0uVXBkYXRlTW9kYWxGb3Jtc0NvdW50KG1nRm9ybSwgdHJ1ZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgfVxyXG4gICAgICAvLyBpZiAoIW1nRm9ybS5pc1N1YkZvcm0oKSkge1xyXG4gICAgICAvLyAgIGxldCBmb3JtTmFtZTogc3RyaW5nID0gbWdGb3JtLlVuaXF1ZU5hbWU7XHJcbiAgICAgIC8vICAgVUlCcmlkZ2UuZ2V0SW5zdGFuY2UoKS5PcGVuRm9ybShmb3JtTmFtZSk7XHJcblxyXG4gICAgICAvLyB9XHJcbiAgICAgIC8vIGVsc2Uge1xyXG4gICAgICAvLyAgIGxldCBpbnB1dENvbnRyb2xzID0gbWdGb3JtLkdldExpc3RPZklucHV0Q29udHJvbHMoKTtcclxuICAgICAgLy8gLy9cclxuICAgICAgLy8gLy8gICBKU0JyaWRnZS5JbnN0YW5jZS5PcGVuU3ViRm9ybSh0aGlzLmdldFN1YkZvcm1DdHJsKCkuZ2V0TmFtZSgpLCBQYXJlbnRGb3JtLmdldFRhc2soKS5nZXRUYXNrVGFnKCksIGdldFByb3AoUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfRk9STV9OQU1FKS5nZXRWYWx1ZSgpLCBfdGFzay5nZXRUYXNrVGFnKCksIGlucHV0Q29udHJvbHMpO1xyXG4gICAgICAvLyAvLyB9XHJcbiAgICAgIC8vIH1cclxuXHJcbiAgICAgIG1nRm9ybS5PcGVuZWQgPSB0cnVlO1xyXG5cclxuICAgICAgQ29tbWFuZHMuYmVnaW5JbnZva2UoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT4gUGVyZm9ybXMgZmlyc3QgcmVmcmVzaCBmb3IgdGhlIHRhYmxlIGNvbnRyb2wgPC9zdW1tYXJ5PlxyXG4gIHN0YXRpYyBhc3luYyBEb0ZpcnN0UmVmcmVzaFRhYmxlKG1nRm9ybTogTWdGb3JtQmFzZSk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgaWYgKG1nRm9ybSAhPT0gbnVsbCAmJiAhbWdGb3JtLmlnbm9yZUZpcnN0UmVmcmVzaFRhYmxlKSB7XHJcbiAgICAgIG1nRm9ybS5pZ25vcmVGaXJzdFJlZnJlc2hUYWJsZSA9IHRydWU7XHJcbiAgICAgIGF3YWl0IG1nRm9ybS5maXJzdFRhYmxlUmVmcmVzaCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJldHJpZXZlIHRoZSBsb2NhdGlvbiBvZiB0aGUgY2FyZXQsIHdpdGhpbiB0aGUgY3VycmVudGx5IHNlbGVjdGVkIHRleHRcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiY3RybFwiPnRoZSBjb250cm9sIHdoaWNoIGlzIGFzc3VtZWQgdG8gY29udGFpbiB0aGUgc2VsZWN0ZWQgdGV4dCA8L3BhcmFtPlxyXG4gIHN0YXRpYyBDYXJldFBvc0dldChjdHJsOiBNZ0NvbnRyb2xCYXNlKTogbnVtYmVyIHtcclxuICAgIGxldCBjYXJldFBvczogbnVtYmVyID0gMDtcclxuXHJcbiAgICBpZiAoY3RybC5pc1RleHRDb250cm9sKCkpXHJcbiAgICAgIGNhcmV0UG9zID0gQ29tbWFuZHMuY2FyZXRQb3NHZXQoY3RybCwgY3RybC5nZXREaXNwbGF5TGluZSh0cnVlKSk7XHJcblxyXG4gICAgcmV0dXJuIGNhcmV0UG9zO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBDbGVhciB0aGUgc3RhdHVzIGJhciBkZXBlbmRpbmcgb24gdGhlIGNvbnRyb2wgc3BlY2lmaWMgc3RhdHVzIG1lc3NhZ2Ugb3IgZm9ybSBzcGVjaWZpYyBzdGF0dXMgbWVzc2FnZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwidGFza1wiPnRhc2s8L3BhcmFtPlxyXG4gIHN0YXRpYyBDbGVhclN0YXR1c0Jhcih0YXNrOiBHdWlUYXNrQmFzZSk6IHZvaWQge1xyXG4gICAgbGV0IGN1cnJlbnRQYXJrZWRDb250cm9sOiBNZ0NvbnRyb2xCYXNlID0gdGFzay5nZXRMYXN0UGFya2VkQ3RybCgpO1xyXG5cclxuICAgIGlmIChjdXJyZW50UGFya2VkQ29udHJvbCAhPT0gbnVsbCAmJiAhTlN0cmluZy5Jc051bGxPckVtcHR5KGN1cnJlbnRQYXJrZWRDb250cm9sLlByb21wdEhlbHApKVxyXG4gICAgICB0YXNrLldyaXRlVG9NZXNzYWdlUGFuZShjdXJyZW50UGFya2VkQ29udHJvbC5Qcm9tcHRIZWxwKTtcclxuICAgIGVsc2VcclxuICAgICAgTWFuYWdlci5DbGVhbk1lc3NhZ2VQYW5lKHRhc2spO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGNsZWFuIHRoZSBzdGF0dXMgYmFyXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInRhc2tcIj48L3BhcmFtPlxyXG4gIHN0YXRpYyBDbGVhbk1lc3NhZ2VQYW5lKHRhc2s6IEd1aVRhc2tCYXNlKTogdm9pZCB7XHJcbiAgICB0YXNrLldyaXRlVG9NZXNzYWdlUGFuZShNYW5hZ2VyLkdldEN1cnJlbnRSdW50aW1lQ29udGV4dCgpLkRlZmF1bHRTdGF0dXNNc2cpO1xyXG4gIH1cclxuXHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBNZXNzYWdlIHN0cmluZyB0byBiZSBkaXNwbGF5ZWQgb24gc3RhdHVzIGJhciBvciBpbiBNZXNzYWdlIGJveFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJtc2dcIj4gaW5wdXQgbWVzc2FnZSBzdHJpbmcgPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+IG91dHB1dCBtZXNzYWdlIHN0cmluZyA8L3JldHVybnM+XHJcbiAgc3RhdGljIEdldE1lc3NhZ2UobXNnOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgaWYgKG1zZyA9PT0gbnVsbClcclxuICAgICAgbXNnID0gXCJcIjtcclxuICAgIGVsc2UgaWYgKG1zZy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGxldCBpZHhPZkNhcnJpYWdlOiBudW1iZXIgPSBtc2cuaW5kZXhPZihcIlxcclwiKTtcclxuICAgICAgaWYgKGlkeE9mQ2FycmlhZ2UgIT09IC0xKVxyXG4gICAgICAgIG1zZyA9IG1zZy5zdWJzdHIoMCwgaWR4T2ZDYXJyaWFnZSk7XHJcblxyXG4gICAgICBsZXQgaWR4T2ZOZXdMaW5lOiBudW1iZXIgPSBtc2cuaW5kZXhPZihcIlxcblwiKTtcclxuICAgICAgaWYgKGlkeE9mTmV3TGluZSAhPT0gLTEpXHJcbiAgICAgICAgbXNnID0gbXNnLnN1YnN0cigwLCBpZHhPZk5ld0xpbmUpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBtc2c7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgVXNlZCB0byBwdXQgdGhlIHRleHQgb24gYSB0ZXh0IGNvbnRyb2xcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiY3RybFwiPiA8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwidGV4dFwiPiA8L3BhcmFtPlxyXG4gIHN0YXRpYyBTZXRFZGl0VGV4dChjdHJsOiBNZ0NvbnRyb2xCYXNlLCB0ZXh0OiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIENvbW1hbmRzLnNldEVkaXRUZXh0KGN0cmwsIGN0cmwuZ2V0RGlzcGxheUxpbmUodHJ1ZSksIHRleHQpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBJbnNlcnQgdGV4dCB0byBhIHRleHQgY29udHJvbCBhdCBhIGdpdmVuIHBvc2l0aW9uXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJjdHJsXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJzdGFydFBvc2l0aW9uXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJ0ZXh0VG9JbnNlcnRcIj48L3BhcmFtPlxyXG4gIHN0YXRpYyBJbnNlcnRFZGl0VGV4dChjdHJsOiBNZ0NvbnRyb2xCYXNlLCBzdGFydFBvc2l0aW9uOiBudW1iZXIsIHRleHRUb0luc2VydDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBDb21tYW5kcy5pbnNlcnRFZGl0VGV4dChjdHJsLCBjdHJsLmdldERpc3BsYXlMaW5lKHRydWUpLCBzdGFydFBvc2l0aW9uLCB0ZXh0VG9JbnNlcnQpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJldHVybiBUb29sdGlwVGltZW91dFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPiByZXR1cm5zIFRvb2x0aXBUaW1lb3V0PC9yZXR1cm5zPlxyXG4gIHN0YXRpYyBHZXRUb29sdGlwVGltZW91dCgpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIEd1aUVudmlyb25tZW50LkVudmlyb25tZW50LkdldFRvb2x0aXBUaW1lb3V0KCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIHJldHVybiBTcGVjaWFsRWRpdExlZnRBbGlnblxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBzdGF0aWMgR2V0U3BlY2lhbEVkaXRMZWZ0QWxpZ24oKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gR3VpRW52aXJvbm1lbnQuRW52aXJvbm1lbnQuR2V0U3BlY2lhbEVkaXRMZWZ0QWxpZ24oKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBSZXR1cm5zIGRlZmF1bHQgZGF0ZSBmb3JtYXQgZGVwZW5kaW5nIG9uIGRhdGUgbW9kZSBhbmQgZGF0ZSBzZXBhcmF0b3IuXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+IFN0cmluZyBkZWZhdWx0IGRhdGUgZm9ybWF0PC9yZXR1cm5zPlxyXG4gIHN0YXRpYyBHZXREZWZhdWx0RGF0ZUZvcm1hdCgpOiBzdHJpbmcge1xyXG4gICAgbGV0IGRhdGVGb3JtYXQ6IHN0cmluZyA9IFwiXCI7XHJcbiAgICBsZXQgZGF0ZVNlcGVyYXRvcjogc3RyaW5nID0gR3VpRW52aXJvbm1lbnQuRW52aXJvbm1lbnQuR2V0RGF0ZSgpO1xyXG5cclxuICAgIC8vIEFycmFuZ2UgZGF0ZSBmb3JtYXQgYWNjb3JkaW5nIHRvIHRoZSBkYXRlIG1vZGUuXHJcbiAgICBzd2l0Y2ggKEd1aUVudmlyb25tZW50LkVudmlyb25tZW50LkdldERhdGVNb2RlKDApKSB7XHJcbiAgICAgIGNhc2UgJ1MnOiAvLyBTY2FuZGluYXZpYW5cclxuICAgICAgICBkYXRlRm9ybWF0ID0gXCJZWVlZXCIgKyBkYXRlU2VwZXJhdG9yICsgXCJNTVwiICsgZGF0ZVNlcGVyYXRvciArIFwiRERcIjtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgJ0InOiAvLyBCdWRkaGlzdFxyXG5cclxuICAgICAgY2FzZSAnRSc6IC8vIEV1cm9wZWFuXHJcbiAgICAgICAgZGF0ZUZvcm1hdCA9IFwiRERcIiArIGRhdGVTZXBlcmF0b3IgKyBcIk1NXCIgKyBkYXRlU2VwZXJhdG9yICsgXCJZWVlZXCI7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlICdBJzogLy8gQW1lcmljYW5cclxuICAgICAgICBkYXRlRm9ybWF0ID0gXCJNTVwiICsgZGF0ZVNlcGVyYXRvciArIFwiRERcIiArIGRhdGVTZXBlcmF0b3IgKyBcIllZWVlcIjtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICAgIHJldHVybiBkYXRlRm9ybWF0O1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIFJldHVybiBkZWZhdWx0IHRpbWUgZm9ybWF0IHVzaW5nIHRpbWUgc2VwYXJhdG9yLlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBzdGF0aWMgR2V0RGVmYXVsdFRpbWVGb3JtYXQoKTogc3RyaW5nIHtcclxuICAgIGxldCB0aW1lU2VwZXJhdG9yOiBzdHJpbmcgPSBHdWlFbnZpcm9ubWVudC5FbnZpcm9ubWVudC5HZXRUaW1lKCk7XHJcbiAgICBsZXQgdGltZUZvcm1hdDogc3RyaW5nID0gXCJISFwiICsgdGltZVNlcGVyYXRvciArIFwiTU1cIiArIHRpbWVTZXBlcmF0b3IgKyBcIlNTXCI7XHJcbiAgICByZXR1cm4gdGltZUZvcm1hdDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gR2V0cyB0aGUgcnVudGltZSBjb250ZXh0IGJlbG9uZ3MgdG8gdGhlIGN1cnJlbnQgdGhyZWFkLlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPlJ1bnRpbWVDb250ZXh0QmFzZTwvcmV0dXJucz5cclxuICBzdGF0aWMgR2V0Q3VycmVudFJ1bnRpbWVDb250ZXh0KCk6IFJ1bnRpbWVDb250ZXh0QmFzZSB7XHJcbiAgICByZXR1cm4gRXZlbnRzLkdldFJ1bnRpbWVDb250ZXh0KE1hbmFnZXIuR2V0Q3VycmVudENvbnRleHRJRCgpKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gR2V0cyB0aGUgY29udGV4dElEIHVzaW5nIHRoZSBHdWlNZ0Zvcm0uXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJtZ09iamVjdFwiPk1hZ2ljIE9iamVjdCAtIEd1aU1nRm9ybS9HdWlNZ0NvbnRyb2wvTG9naWNhbCBjb250cm9sPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+Y29udGV4dElEPC9yZXR1cm5zPlxyXG4gIHN0YXRpYyBHZXRDb250ZXh0SUQobWdPYmplY3Q6IGFueSk6IG51bWJlciB7XHJcbiAgICBsZXQgZ3VpTWdGb3JtOiBHdWlNZ0Zvcm0gPSBudWxsO1xyXG5cclxuICAgIGlmIChtZ09iamVjdCBpbnN0YW5jZW9mIEd1aU1nQ29udHJvbClcclxuICAgICAgZ3VpTWdGb3JtID0gKDxHdWlNZ0NvbnRyb2w+bWdPYmplY3QpLkd1aU1nRm9ybTtcclxuICAgIGVsc2UgaWYgKG1nT2JqZWN0IGluc3RhbmNlb2YgR3VpTWdGb3JtKVxyXG4gICAgICBndWlNZ0Zvcm0gPSA8R3VpTWdGb3JtPm1nT2JqZWN0O1xyXG5cclxuICAgIHJldHVybiBFdmVudHMuR2V0Q29udGV4dElEKGd1aU1nRm9ybSk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIFNob3dzIHdpbmRvd3MgaGVscC5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImZpbGVQYXRoXCI+cGF0aCBvZiB0aGUgaGVscCBmaWxlLjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiaGVscENtZFwiPmhlbHAgY29tbWFuZC48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImhlbHBLZXlcIj5zZWFyY2gga2V5IHdvcmQuPC9wYXJhbT5cclxuICBzdGF0aWMgU2hvd1dpbmRvd0hlbHAoZmlsZVBhdGg6IHN0cmluZywgaGVscENtZDogSGVscENvbW1hbmQsIGhlbHBLZXk6IHN0cmluZyk6IHZvaWQge1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyByZXR1cm4gU3BlY2lhbFZhbE5ld1BvbGljeVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBwdWJsaWMgc3RhdGljIEdldFNwZWNpYWxWYWxOZXdQb2xpY3koKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gR3VpRW52aXJvbm1lbnQuRW52aXJvbm1lbnQuR2V0U3BlY2lhbFZhbE5ld1BvbGljeSgpO1xyXG4gIH1cclxufVxyXG5cclxuLy8vIDxzdW1tYXJ5PlxyXG4vLy8gaGVscGVyIGNsYXNzIGZvciBzZXR0aW5nL3Jlc2V0dGluZyB0aGUgY3VycmVudCBjb250ZXh0IElELlxyXG4vLy8gV2UgcmVxdWlyZSB0aGlzIGNsYXNzIHNwZWNpZmljYWxseSBmb3IgTW9kYWwgd2luZG93cy4gV2hlbiB3ZSBvcGVuIGEgbW9kYWwgd2luZG93IHRoZW5cclxuLy8vIGl0IHdhaXRzIGluIEd1aVRocmVhZC4gTWVhbiB3aGlsZSBHdWlUaHJlYWQgY2FuIHJlY2VpdmUgdGhlIGV2ZW50cyBvZiBvdGhlciBjb250ZXh0IGFuZFxyXG4vLy8gYWZ0ZXIgcHJvY2Vzc2luZyB0aGVzZSBldmVudHMsIHdlIHNob3VsZCByZXNldCB0aGUgY29udGV4dElEIG9mIHRoZSBNb2RhbCB3aW5kb3dzIGJlY2F1c2VcclxuLy8vIGl0IHdpbGwgYmUgdXNlZCBmb3IgbG9nZ2luZyB0aGUgZXZlbnRzIHdoZW4gd2UgY2xvc2UgdGhlIG1vZGFsIHdpbmRvdy5cclxuLy8vIDwvc3VtbWFyeT5cclxuZXhwb3J0IGNsYXNzIENvbnRleHRJREd1YXJkIHtcclxuICBwcml2YXRlIF9wcmV2Q29udGV4dElEOiBzdHJpbmcgPSAnXFwwJztcclxuXHJcbiAgLy8gRm9yIGRlYnVnZ2luZyBwdXJwb3NlIG9ubHkuXHJcbiAgLy8gSXQgd2lsbCBob2xkIHRoZSBmaWxlIG5hbWUgZnJvbSB3aGljaCB0aGUgb2JqZWN0IG9mIENvbnRleHRJREd1YXJkIGlzIGNyZWF0ZWQuXHJcbiAgcHJpdmF0ZSBfZmlsZU5hbWU6IHN0cmluZyA9IG51bGw7XHJcblxyXG4gIGNvbnN0cnVjdG9yKCk7XHJcbiAgY29uc3RydWN0b3IoY29udGV4dElEOiBzdHJpbmcpO1xyXG4gIGNvbnN0cnVjdG9yKGNvbnRleHRJRD86IHN0cmluZykge1xyXG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApIHtcclxuICAgICAgdGhpcy5jb25zdHJ1Y3Rvcl8wKCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuY29uc3RydWN0b3JfMShjb250ZXh0SUQpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjb25zdHJ1Y3Rvcl8wKCk6IHZvaWQge1xyXG4gICAgdGhpcy5fcHJldkNvbnRleHRJRCA9IE1hbmFnZXIuR2V0Q3VycmVudENvbnRleHRJRCgpO1xyXG4gICAgdGhpcy5TYXZlRmlsZW5hbWUoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY29uc3RydWN0b3JfMShjb250ZXh0SUQ6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5TZXRDdXJyZW50KGNvbnRleHRJRCk7XHJcbiAgICB0aGlzLlNhdmVGaWxlbmFtZSgpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBzZXRzIHRoZSBjb250ZXh0IElEIHRvICdndWFyZCcuXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJjb250ZXh0SURcIj5uZXcgY29udGV4dCBJRCB0byAnZ3VhcmQnLjwvcGFyYW0+XHJcbiAgU2V0Q3VycmVudChjb250ZXh0SUQ6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgaWYgKGNvbnRleHRJRCAhPT0gdGhpcy5fcHJldkNvbnRleHRJRCkge1xyXG4gICAgICB0aGlzLl9wcmV2Q29udGV4dElEID0gY29udGV4dElEO1xyXG4gICAgICBNYW5hZ2VyLlNldEN1cnJlbnRDb250ZXh0SUQoY29udGV4dElEKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gR2V0IHRoZSBmaWxlIG5hbWUgZnJvbSB3aGljaCB0aGUgQ29udGV4dElER3VhcmQgaXMgYmVpbmcgY3JlYXRlZC5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHByaXZhdGUgU2F2ZUZpbGVuYW1lKCk6IHZvaWQge1xyXG4gICAgbGV0IHN0YWNrRnJhbWU6IFN0YWNrRnJhbWUgPSBuZXcgU3RhY2tGcmFtZSgxKTtcclxuICAgIHRoaXMuX2ZpbGVOYW1lID0gc3RhY2tGcmFtZS5HZXRGaWxlTmFtZSgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIERpc3Bvc2UoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5fcHJldkNvbnRleHRJRCAhPT0gTWFuYWdlci5HZXRDdXJyZW50Q29udGV4dElEKCkpXHJcbiAgICAgIE1hbmFnZXIuU2V0Q3VycmVudENvbnRleHRJRCh0aGlzLl9wcmV2Q29udGV4dElEKTtcclxuICB9XHJcbn1cclxuIl19
|