@magic-xpa/utils 4.800.0 → 4.801.0-dev000.0
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-utils.js → esm2020/magic-xpa-utils.mjs} +0 -0
- package/{esm2015/src/Base64.js → esm2020/src/Base64.mjs} +0 -0
- package/{esm2015/src/ChoiceUtils.js → esm2020/src/ChoiceUtils.mjs} +0 -0
- package/{esm2015/src/Constants.js → esm2020/src/Constants.mjs} +0 -0
- package/{esm2015/src/DateTimeUtils.js → esm2020/src/DateTimeUtils.mjs} +0 -0
- package/{esm2015/src/DateUtil.js → esm2020/src/DateUtil.mjs} +0 -0
- package/{esm2015/src/InternalInterface.js → esm2020/src/InternalInterface.mjs} +0 -0
- package/{esm2015/src/JSON_Utils.js → esm2020/src/JSON_Utils.mjs} +0 -0
- package/esm2020/src/Logger.mjs +216 -0
- package/{esm2015/src/MagicConstants.js → esm2020/src/MagicConstants.mjs} +0 -0
- package/{esm2015/src/Misc.js → esm2020/src/Misc.mjs} +0 -0
- package/{esm2015/src/MsgInterface.js → esm2020/src/MsgInterface.mjs} +0 -0
- package/{esm2015/src/PICInterface.js → esm2020/src/PICInterface.mjs} +0 -0
- package/{esm2015/src/PlatformUtils.js → esm2020/src/PlatformUtils.mjs} +0 -0
- package/{esm2015/src/Queue.js → esm2020/src/Queue.mjs} +0 -0
- package/{esm2015/src/Randomizer.js → esm2020/src/Randomizer.mjs} +0 -0
- package/{esm2015/src/RequestInfo.js → esm2020/src/RequestInfo.mjs} +0 -0
- package/{esm2015/src/Rtf.js → esm2020/src/Rtf.mjs} +0 -0
- package/{esm2015/src/StorageAttribute.js → esm2020/src/StorageAttribute.mjs} +0 -0
- package/esm2020/src/StrUtil.mjs +456 -0
- package/esm2020/src/SyncExecutionHelper.mjs +26 -0
- package/{esm2015/src/UtilDateJpn.js → esm2020/src/UtilDateJpn.mjs} +0 -0
- package/{esm2015/src/UtilImeJpn.js → esm2020/src/UtilImeJpn.mjs} +0 -0
- package/{esm2015/src/UtilStrByteMode.js → esm2020/src/UtilStrByteMode.mjs} +0 -0
- package/{esm2015/src/XMLConstants.js → esm2020/src/XMLConstants.mjs} +0 -0
- package/{esm2015/src/Xml/XmlParser.js → esm2020/src/Xml/XmlParser.mjs} +0 -0
- package/{esm2015/src/enums.js → esm2020/src/enums.mjs} +0 -0
- package/fesm2015/{magic-xpa-utils.js → magic-xpa-utils.mjs} +5 -6
- package/fesm2015/magic-xpa-utils.mjs.map +1 -0
- package/fesm2020/magic-xpa-utils.mjs +5381 -0
- package/fesm2020/magic-xpa-utils.mjs.map +1 -0
- package/package.json +25 -12
- package/src/Logger.d.ts +2 -2
- package/bundles/magic-xpa-utils.umd.js +0 -5271
- package/bundles/magic-xpa-utils.umd.js.map +0 -1
- package/bundles/magic-xpa-utils.umd.min.js +0 -2
- package/bundles/magic-xpa-utils.umd.min.js.map +0 -1
- package/esm2015/src/Logger.js +0 -217
- package/esm2015/src/StrUtil.js +0 -457
- package/esm2015/src/SyncExecutionHelper.js +0 -26
- package/fesm2015/magic-xpa-utils.js.map +0 -1
package/esm2015/src/StrUtil.js
DELETED
|
@@ -1,457 +0,0 @@
|
|
|
1
|
-
import { NString, RefParam, StringBuilder } from "@magic-xpa/mscorelib";
|
|
2
|
-
import { UtilStrByteMode } from "./UtilStrByteMode";
|
|
3
|
-
import { Rtf } from "./Rtf";
|
|
4
|
-
import { isNullOrUndefined } from "util";
|
|
5
|
-
const HTML_BACKSLASH = "\";
|
|
6
|
-
const HTML_COMMA = ",";
|
|
7
|
-
const HTML_HYPHEN = "-";
|
|
8
|
-
const STR_2_HTML = 1;
|
|
9
|
-
const TASK_PATH_DELIMITER = "@@||@@";
|
|
10
|
-
export const SEQ_2_HTML = 2;
|
|
11
|
-
export const HTML_2_STR = 3;
|
|
12
|
-
const HTML_2_SEQ = 4;
|
|
13
|
-
export const SEQ_2_STR = 5;
|
|
14
|
-
export class StrUtil {
|
|
15
|
-
static mem_trim(str, len) {
|
|
16
|
-
let result;
|
|
17
|
-
if (len > 0) {
|
|
18
|
-
if (len > str.length) {
|
|
19
|
-
result = -1;
|
|
20
|
-
return result;
|
|
21
|
-
}
|
|
22
|
-
while (len > 0 && str[len - 1] === ' ') {
|
|
23
|
-
len = len - 1;
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
result = len;
|
|
27
|
-
return result;
|
|
28
|
-
}
|
|
29
|
-
static memmove(dest, destCount, src, srcCount, len) {
|
|
30
|
-
let stringBuilder = new StringBuilder(dest.length + len);
|
|
31
|
-
if (UtilStrByteMode.isLocaleDefLangJPN() && dest.length < destCount) {
|
|
32
|
-
stringBuilder.Append(NString.FromChar(' ', destCount));
|
|
33
|
-
}
|
|
34
|
-
else {
|
|
35
|
-
stringBuilder.Append(dest.substr(0, destCount));
|
|
36
|
-
}
|
|
37
|
-
stringBuilder.Append(src.substr(srcCount, len));
|
|
38
|
-
if (stringBuilder.Length < dest.length) {
|
|
39
|
-
stringBuilder.Append(dest.substr(stringBuilder.Length));
|
|
40
|
-
}
|
|
41
|
-
return stringBuilder.ToString();
|
|
42
|
-
}
|
|
43
|
-
static memcpy(dest, destCount, src, scrCountOrSrcCount, count) {
|
|
44
|
-
if (arguments.length === 5 && (dest === null || dest.constructor === String) && (destCount === null || destCount.constructor === Number) && (src === null || src.constructor === String) && (scrCountOrSrcCount === null || scrCountOrSrcCount.constructor === Number) && (count === null || count.constructor === Number)) {
|
|
45
|
-
return StrUtil.memcpy_0(dest, destCount, src, scrCountOrSrcCount, count);
|
|
46
|
-
}
|
|
47
|
-
StrUtil.memcpy_1(dest, destCount, src, scrCountOrSrcCount, count);
|
|
48
|
-
}
|
|
49
|
-
static memcpy_0(dest, destCount, src, scrCount, count) {
|
|
50
|
-
let stringBuilder = new StringBuilder(dest.substr(0, destCount));
|
|
51
|
-
if (scrCount + count < src.length) {
|
|
52
|
-
stringBuilder.Append(src.substr(scrCount, count - scrCount));
|
|
53
|
-
}
|
|
54
|
-
else {
|
|
55
|
-
stringBuilder.Append(src.substr(scrCount));
|
|
56
|
-
}
|
|
57
|
-
let size = dest.length - destCount - count;
|
|
58
|
-
if (size > 0) {
|
|
59
|
-
stringBuilder.Append(dest.substr(destCount + count));
|
|
60
|
-
}
|
|
61
|
-
return stringBuilder.ToString();
|
|
62
|
-
}
|
|
63
|
-
static memcpy_1(dest, destCount, src, srcCount, count) {
|
|
64
|
-
while (count > 0 && destCount < dest.length && srcCount < src.length) {
|
|
65
|
-
dest[destCount++] = src[srcCount++];
|
|
66
|
-
count = count - 1;
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
static memset(dest, destCount, inVal, counter) {
|
|
70
|
-
if (arguments.length === 4 && (dest === null || dest.constructor === String) && (destCount === null || destCount.constructor === Number) && (inVal === null || inVal.constructor === Number) && (counter === null || counter.constructor === Number)) {
|
|
71
|
-
return StrUtil.memset_0(dest, destCount, inVal, counter);
|
|
72
|
-
}
|
|
73
|
-
StrUtil.memset_1(dest, destCount, inVal, counter);
|
|
74
|
-
}
|
|
75
|
-
static memset_0(dest, destCount, inVal, counter) {
|
|
76
|
-
let first = new StringBuilder(dest.substr(0, destCount));
|
|
77
|
-
while (counter > 0) {
|
|
78
|
-
first.Append(inVal);
|
|
79
|
-
counter = counter - 1;
|
|
80
|
-
}
|
|
81
|
-
if (first.Length < dest.length) {
|
|
82
|
-
first.Append(dest.substr(first.Length));
|
|
83
|
-
}
|
|
84
|
-
return first.ToString();
|
|
85
|
-
}
|
|
86
|
-
static memset_1(dest, destCount, inVal, counter) {
|
|
87
|
-
while (counter > 0 && destCount < dest.length) {
|
|
88
|
-
dest[destCount++] = inVal;
|
|
89
|
-
counter = counter - 1;
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
static strstr(str, substr) {
|
|
93
|
-
let from = str.indexOf(substr);
|
|
94
|
-
let result;
|
|
95
|
-
if (from < 0) {
|
|
96
|
-
result = null;
|
|
97
|
-
}
|
|
98
|
-
else {
|
|
99
|
-
result = str.substr(from);
|
|
100
|
-
}
|
|
101
|
-
return result;
|
|
102
|
-
}
|
|
103
|
-
static ReverseString(text) {
|
|
104
|
-
let array = NString.ToCharArray(text.ToString());
|
|
105
|
-
array.reverse();
|
|
106
|
-
return new StringBuilder(NString.FromChars(array));
|
|
107
|
-
}
|
|
108
|
-
static rtrim(str) {
|
|
109
|
-
return StrUtil.rtrimWithNull(str, false);
|
|
110
|
-
}
|
|
111
|
-
static rtrimWithNull(str, trimNullChars) {
|
|
112
|
-
let result;
|
|
113
|
-
if (typeof str === "undefined" || str === null || str.length === 0) {
|
|
114
|
-
result = str;
|
|
115
|
-
}
|
|
116
|
-
else {
|
|
117
|
-
let idx = str.length - 1;
|
|
118
|
-
if (trimNullChars) {
|
|
119
|
-
while (idx >= 0 && (str[idx] === ' ' || str[idx] === String.fromCharCode(0))) {
|
|
120
|
-
idx = idx - 1;
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
else {
|
|
124
|
-
while (idx >= 0 && str[idx] === ' ') {
|
|
125
|
-
idx = idx - 1;
|
|
126
|
-
}
|
|
127
|
-
}
|
|
128
|
-
idx = idx + 1;
|
|
129
|
-
if (idx < str.length) {
|
|
130
|
-
result = str.substr(0, idx);
|
|
131
|
-
}
|
|
132
|
-
else {
|
|
133
|
-
result = str;
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
return result;
|
|
137
|
-
}
|
|
138
|
-
static ltrim(str) {
|
|
139
|
-
let length = str.length;
|
|
140
|
-
let i = 0;
|
|
141
|
-
let result;
|
|
142
|
-
if (str === null || length === 0) {
|
|
143
|
-
result = str;
|
|
144
|
-
}
|
|
145
|
-
else {
|
|
146
|
-
while (i < length && str[i] === ' ') {
|
|
147
|
-
i = i + 1;
|
|
148
|
-
}
|
|
149
|
-
if (i > 0) {
|
|
150
|
-
str = str.substr(i);
|
|
151
|
-
}
|
|
152
|
-
result = str;
|
|
153
|
-
}
|
|
154
|
-
return result;
|
|
155
|
-
}
|
|
156
|
-
static DeleteStringsFromEnds(str, strToDelete) {
|
|
157
|
-
if (str.startsWith(strToDelete)) {
|
|
158
|
-
str = str.substr(strToDelete.length);
|
|
159
|
-
}
|
|
160
|
-
if (str.endsWith(strToDelete)) {
|
|
161
|
-
str = str.substr(0, str.length - strToDelete.length);
|
|
162
|
-
}
|
|
163
|
-
let result;
|
|
164
|
-
if (str.length === 0) {
|
|
165
|
-
result = null;
|
|
166
|
-
}
|
|
167
|
-
else {
|
|
168
|
-
result = str;
|
|
169
|
-
}
|
|
170
|
-
return result;
|
|
171
|
-
}
|
|
172
|
-
static padStr(str, len) {
|
|
173
|
-
let padLen = len - str.length;
|
|
174
|
-
if (padLen > 0) {
|
|
175
|
-
if (StrUtil._paddingSpaces === null || StrUtil._paddingSpaces.length < padLen) {
|
|
176
|
-
StrUtil._paddingSpaces = NString.FromChar(' ', padLen);
|
|
177
|
-
}
|
|
178
|
-
let stringBuilder = new StringBuilder(len);
|
|
179
|
-
stringBuilder.Append(str);
|
|
180
|
-
stringBuilder.Append(StrUtil._paddingSpaces, 0, padLen);
|
|
181
|
-
str = stringBuilder.ToString();
|
|
182
|
-
}
|
|
183
|
-
return str;
|
|
184
|
-
}
|
|
185
|
-
static tokenize(source, delim) {
|
|
186
|
-
return source.split(delim);
|
|
187
|
-
}
|
|
188
|
-
static stringToHexaDump(str, minLength) {
|
|
189
|
-
let stringBuilder = new StringBuilder(str.length * minLength);
|
|
190
|
-
for (let indx = 0; indx < str.length; indx = indx + 1) {
|
|
191
|
-
let currInt = str.charCodeAt(indx);
|
|
192
|
-
let hexStr = currInt.toString(16);
|
|
193
|
-
while (hexStr.length < minLength) {
|
|
194
|
-
hexStr = "0" + hexStr;
|
|
195
|
-
}
|
|
196
|
-
stringBuilder.Append(hexStr);
|
|
197
|
-
}
|
|
198
|
-
return stringBuilder.ToString().toUpperCase();
|
|
199
|
-
}
|
|
200
|
-
static searchAndReplace(str, from, to) {
|
|
201
|
-
if (arguments.length === 3 && (str === null || str.constructor === String) && (from === null || from.constructor === String) && (to === null || to.constructor === String)) {
|
|
202
|
-
return StrUtil.searchAndReplace_0(str, from, to);
|
|
203
|
-
}
|
|
204
|
-
return StrUtil.searchAndReplace_1(str, from, to);
|
|
205
|
-
}
|
|
206
|
-
static searchAndReplace_0(str, from, to) {
|
|
207
|
-
let lastSubStr = 0;
|
|
208
|
-
let startSubStr;
|
|
209
|
-
let result;
|
|
210
|
-
if ((startSubStr = str.indexOf(from)) === -1) {
|
|
211
|
-
result = str;
|
|
212
|
-
}
|
|
213
|
-
else {
|
|
214
|
-
let stringBuilder = new StringBuilder(str.length);
|
|
215
|
-
while (startSubStr !== -1) {
|
|
216
|
-
stringBuilder.Append(str.substr(lastSubStr, startSubStr - lastSubStr) + to);
|
|
217
|
-
startSubStr = startSubStr + from.length;
|
|
218
|
-
lastSubStr = startSubStr;
|
|
219
|
-
startSubStr = str.indexOf(from, lastSubStr);
|
|
220
|
-
}
|
|
221
|
-
stringBuilder.Append(str.substr(lastSubStr));
|
|
222
|
-
result = stringBuilder.ToString();
|
|
223
|
-
}
|
|
224
|
-
return result;
|
|
225
|
-
}
|
|
226
|
-
static searchAndReplace_1(str, from, to) {
|
|
227
|
-
let lastSubStr = 0;
|
|
228
|
-
let sarIndex = 0;
|
|
229
|
-
let fromCopy = from.slice();
|
|
230
|
-
let startSubStr;
|
|
231
|
-
let SARindex = new RefParam(0);
|
|
232
|
-
startSubStr = StrUtil.indexOf(str, fromCopy, lastSubStr, SARindex);
|
|
233
|
-
sarIndex = SARindex.value;
|
|
234
|
-
if (startSubStr === -1)
|
|
235
|
-
return str;
|
|
236
|
-
let result;
|
|
237
|
-
let tmpBuf = new StringBuilder(str.length);
|
|
238
|
-
while (startSubStr !== -1) {
|
|
239
|
-
tmpBuf.Append(str.substr(lastSubStr, startSubStr - lastSubStr) + to[sarIndex]);
|
|
240
|
-
startSubStr += fromCopy[sarIndex].length;
|
|
241
|
-
lastSubStr = startSubStr;
|
|
242
|
-
startSubStr = StrUtil.indexOf(str, fromCopy, lastSubStr, SARindex);
|
|
243
|
-
sarIndex = SARindex.value;
|
|
244
|
-
}
|
|
245
|
-
;
|
|
246
|
-
tmpBuf.Append(str.substr(lastSubStr));
|
|
247
|
-
result = tmpBuf.ToString();
|
|
248
|
-
return result;
|
|
249
|
-
}
|
|
250
|
-
static indexOf(str, strings, offset, SARindex) {
|
|
251
|
-
let minOffset = -1;
|
|
252
|
-
for (let i = 0; i < strings.length; i = i + 1) {
|
|
253
|
-
let flag = strings[i] === null;
|
|
254
|
-
if (!(strings[i] === null)) {
|
|
255
|
-
let resultOffset = str.indexOf(strings[i], offset);
|
|
256
|
-
if (resultOffset === -1) {
|
|
257
|
-
strings[i] = null;
|
|
258
|
-
}
|
|
259
|
-
else {
|
|
260
|
-
if (resultOffset < minOffset || minOffset === -1) {
|
|
261
|
-
minOffset = resultOffset;
|
|
262
|
-
SARindex.value = i;
|
|
263
|
-
}
|
|
264
|
-
}
|
|
265
|
-
}
|
|
266
|
-
}
|
|
267
|
-
let result;
|
|
268
|
-
if (minOffset > -1) {
|
|
269
|
-
result = minOffset;
|
|
270
|
-
}
|
|
271
|
-
else {
|
|
272
|
-
SARindex.value = -1;
|
|
273
|
-
result = -1;
|
|
274
|
-
}
|
|
275
|
-
return result;
|
|
276
|
-
}
|
|
277
|
-
static replaceStringTokens(userString, token, occurrence, val) {
|
|
278
|
-
let tokenLen = token.length;
|
|
279
|
-
let currPosition = 0;
|
|
280
|
-
let newString = userString;
|
|
281
|
-
if (val !== null) {
|
|
282
|
-
let num2 = 0;
|
|
283
|
-
while (num2 < occurrence && currPosition !== -1) {
|
|
284
|
-
currPosition = userString.indexOf(token, currPosition + ((num2 === 0) ? 0 : tokenLen));
|
|
285
|
-
num2 = num2 + 1;
|
|
286
|
-
}
|
|
287
|
-
if (currPosition !== -1) {
|
|
288
|
-
newString = userString.substr(0, currPosition) + val + userString.substr(currPosition + tokenLen, userString.length - (currPosition + tokenLen));
|
|
289
|
-
}
|
|
290
|
-
}
|
|
291
|
-
return newString;
|
|
292
|
-
}
|
|
293
|
-
static makePrintableTokens(source, type) {
|
|
294
|
-
if (arguments.length === 2 && (source === null || source.constructor === String) && (type === null || type.constructor === Number)) {
|
|
295
|
-
return StrUtil.makePrintableTokens_0(source, type);
|
|
296
|
-
}
|
|
297
|
-
StrUtil.makePrintableTokens_1(source, type);
|
|
298
|
-
}
|
|
299
|
-
static makePrintableTokens_0(source, type) {
|
|
300
|
-
let escStr = [
|
|
301
|
-
"\\", "-", ","
|
|
302
|
-
];
|
|
303
|
-
let escSeq = [
|
|
304
|
-
"\\\\", "\\-", "\\,"
|
|
305
|
-
];
|
|
306
|
-
let escHtm = [
|
|
307
|
-
HTML_BACKSLASH, HTML_HYPHEN, HTML_COMMA
|
|
308
|
-
];
|
|
309
|
-
let result;
|
|
310
|
-
switch (type) {
|
|
311
|
-
case STR_2_HTML:
|
|
312
|
-
result = StrUtil.searchAndReplace(source, escStr, escHtm);
|
|
313
|
-
break;
|
|
314
|
-
case SEQ_2_HTML:
|
|
315
|
-
result = StrUtil.searchAndReplace(source, escSeq, escHtm);
|
|
316
|
-
break;
|
|
317
|
-
case HTML_2_SEQ:
|
|
318
|
-
result = StrUtil.searchAndReplace(source, escHtm, escSeq);
|
|
319
|
-
break;
|
|
320
|
-
case HTML_2_STR:
|
|
321
|
-
result = StrUtil.searchAndReplace(source, escHtm, escStr);
|
|
322
|
-
break;
|
|
323
|
-
case SEQ_2_STR:
|
|
324
|
-
result = StrUtil.searchAndReplace(source, escSeq, escStr);
|
|
325
|
-
break;
|
|
326
|
-
default:
|
|
327
|
-
result = source;
|
|
328
|
-
break;
|
|
329
|
-
}
|
|
330
|
-
return result;
|
|
331
|
-
}
|
|
332
|
-
static makePrintableTokens_1(source, type) {
|
|
333
|
-
if (source !== null) {
|
|
334
|
-
let length = source.length;
|
|
335
|
-
for (let i = 0; i < length; i = i + 1) {
|
|
336
|
-
let currElm = source.get_Item(i);
|
|
337
|
-
source.set_Item(i, StrUtil.makePrintableTokens_0(currElm, type));
|
|
338
|
-
}
|
|
339
|
-
}
|
|
340
|
-
}
|
|
341
|
-
static makePrintable(source) {
|
|
342
|
-
let from = [
|
|
343
|
-
"\n", "\r", "'", "\\", "\"", "\0"
|
|
344
|
-
];
|
|
345
|
-
let to = [
|
|
346
|
-
"\\n", "\\r", "\\'", "\\\\", "\\\"", "\\0"
|
|
347
|
-
];
|
|
348
|
-
return StrUtil.searchAndReplace(source, from, to);
|
|
349
|
-
}
|
|
350
|
-
static makePrintable2(source) {
|
|
351
|
-
let from = [
|
|
352
|
-
"\n", "\r", "\0"
|
|
353
|
-
];
|
|
354
|
-
let to = [
|
|
355
|
-
"\\n", "\\r", "\\0"
|
|
356
|
-
];
|
|
357
|
-
return StrUtil.searchAndReplace(source, from, to);
|
|
358
|
-
}
|
|
359
|
-
static ZstringMake(s, len) {
|
|
360
|
-
len = StrUtil.mem_trim(s, len);
|
|
361
|
-
return s.substr(0, len);
|
|
362
|
-
}
|
|
363
|
-
static GetPlainTextfromRtf(rtfText) {
|
|
364
|
-
if (Rtf.isRtf(rtfText)) {
|
|
365
|
-
let rtf = new Rtf();
|
|
366
|
-
let outputTxt = new StringBuilder("");
|
|
367
|
-
rtf.toTxt(rtfText, outputTxt);
|
|
368
|
-
rtfText = outputTxt.ToString();
|
|
369
|
-
}
|
|
370
|
-
return rtfText;
|
|
371
|
-
}
|
|
372
|
-
static StringsArraysEqual(str1, str2) {
|
|
373
|
-
let result;
|
|
374
|
-
if (str1 === null && str2 === null) {
|
|
375
|
-
result = true;
|
|
376
|
-
}
|
|
377
|
-
else {
|
|
378
|
-
if (str1 === null || str2 === null) {
|
|
379
|
-
result = false;
|
|
380
|
-
}
|
|
381
|
-
else {
|
|
382
|
-
if (str1.length !== str2.length) {
|
|
383
|
-
result = false;
|
|
384
|
-
}
|
|
385
|
-
else {
|
|
386
|
-
for (let index = 0; index < str1.length; index = index + 1) {
|
|
387
|
-
if ((str1[index] !== str2[index])) {
|
|
388
|
-
result = false;
|
|
389
|
-
return result;
|
|
390
|
-
}
|
|
391
|
-
}
|
|
392
|
-
result = true;
|
|
393
|
-
}
|
|
394
|
-
}
|
|
395
|
-
}
|
|
396
|
-
return result;
|
|
397
|
-
}
|
|
398
|
-
static SearchAndReplaceWildChars(buf, len, filler) {
|
|
399
|
-
buf = NString.PadRight(buf, len);
|
|
400
|
-
let escChar = false;
|
|
401
|
-
let stopSearch = false;
|
|
402
|
-
let tmpBuf = new StringBuilder(len);
|
|
403
|
-
for (let i = 0; i < len; i = i + 1) {
|
|
404
|
-
switch (buf[i]) {
|
|
405
|
-
case ('\\'):
|
|
406
|
-
{
|
|
407
|
-
let isNextCharWild = true;
|
|
408
|
-
if ((i + 1 < len) && (buf[i + 1] != '*' && buf[i + 1] != '\\'))
|
|
409
|
-
isNextCharWild = false;
|
|
410
|
-
if (escChar || !isNextCharWild)
|
|
411
|
-
tmpBuf.Append(buf[i]);
|
|
412
|
-
escChar = !escChar;
|
|
413
|
-
}
|
|
414
|
-
break;
|
|
415
|
-
case ('*'):
|
|
416
|
-
if (escChar)
|
|
417
|
-
tmpBuf.Append(buf[i]);
|
|
418
|
-
else {
|
|
419
|
-
tmpBuf.Append(filler, len - tmpBuf.Length);
|
|
420
|
-
stopSearch = true;
|
|
421
|
-
}
|
|
422
|
-
escChar = false;
|
|
423
|
-
break;
|
|
424
|
-
case '?':
|
|
425
|
-
tmpBuf.Append(filler);
|
|
426
|
-
escChar = false;
|
|
427
|
-
break;
|
|
428
|
-
default:
|
|
429
|
-
tmpBuf.Append(buf[i]);
|
|
430
|
-
escChar = false;
|
|
431
|
-
break;
|
|
432
|
-
}
|
|
433
|
-
}
|
|
434
|
-
let text = tmpBuf.ToString();
|
|
435
|
-
return NString.TrimEnd(NString.TrimEnd(text, ['\0']));
|
|
436
|
-
}
|
|
437
|
-
static getConsoleErorString(source) {
|
|
438
|
-
let consoleErorString = "";
|
|
439
|
-
if (!isNullOrUndefined(source))
|
|
440
|
-
consoleErorString = this.searchAndReplace(source, TASK_PATH_DELIMITER, "");
|
|
441
|
-
return consoleErorString;
|
|
442
|
-
}
|
|
443
|
-
static getMsgBoxErorString(source) {
|
|
444
|
-
let tokens;
|
|
445
|
-
let msgBoxErorString = new StringBuilder("");
|
|
446
|
-
if (!isNullOrUndefined(source)) {
|
|
447
|
-
tokens = this.tokenize(source, TASK_PATH_DELIMITER);
|
|
448
|
-
for (let i = 0; i < tokens.length; i++) {
|
|
449
|
-
msgBoxErorString.Append(tokens[i]);
|
|
450
|
-
i++;
|
|
451
|
-
}
|
|
452
|
-
}
|
|
453
|
-
return msgBoxErorString.toString();
|
|
454
|
-
}
|
|
455
|
-
}
|
|
456
|
-
StrUtil._paddingSpaces = null;
|
|
457
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3RyVXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3V0aWxzL3NyYy9TdHJVdGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBTyxPQUFPLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQzVFLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQUNsRCxPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUV6QyxNQUFNLGNBQWMsR0FBVyxRQUFRLENBQUM7QUFDeEMsTUFBTSxVQUFVLEdBQVcsUUFBUSxDQUFDO0FBQ3BDLE1BQU0sV0FBVyxHQUFXLFFBQVEsQ0FBQztBQUNyQyxNQUFNLFVBQVUsR0FBVyxDQUFDLENBQUM7QUFDN0IsTUFBTSxtQkFBbUIsR0FBVyxRQUFRLENBQUM7QUFDN0MsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFXLENBQUMsQ0FBQztBQUNwQyxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQVcsQ0FBQyxDQUFDO0FBQ3BDLE1BQU0sVUFBVSxHQUFXLENBQUMsQ0FBQztBQUM3QixNQUFNLENBQUMsTUFBTSxTQUFTLEdBQVcsQ0FBQyxDQUFDO0FBRW5DLE1BQU0sT0FBTyxPQUFPO0lBSWxCLE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FBVyxFQUFFLEdBQVc7UUFDdEMsSUFBSSxNQUFjLENBQUM7UUFDbkIsSUFBSSxHQUFHLEdBQUcsQ0FBQyxFQUFFO1lBQ1gsSUFBSSxHQUFHLEdBQUcsR0FBRyxDQUFDLE1BQU0sRUFBRTtnQkFDcEIsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO2dCQUNaLE9BQU8sTUFBTSxDQUFDO2FBQ2Y7WUFDRCxPQUFPLEdBQUcsR0FBRyxDQUFDLElBQUksR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLENB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RTVELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsRUFBQztZQUM3QixNQUFNLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztZQUVwRCxLQUFLLElBQUksQ0FBQyxHQUFVLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFDN0M7Z0JBQ0UsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNuQyxDQUFDLEVBQUUsQ0FBQzthQUNMO1NBQ0Y7UUFJRCxPQUFPLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ3JDLENBQUM7O0FBN3JCYyxzQkFBYyxHQUFXLElBQUksQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7TGlzdCwgTlN0cmluZywgUmVmUGFyYW0sIFN0cmluZ0J1aWxkZXJ9IGZyb20gXCJAbWFnaWMteHBhL21zY29yZWxpYlwiO1xyXG5pbXBvcnQge1V0aWxTdHJCeXRlTW9kZX0gZnJvbSBcIi4vVXRpbFN0ckJ5dGVNb2RlXCI7XHJcbmltcG9ydCB7UnRmfSBmcm9tIFwiLi9SdGZcIjtcclxuaW1wb3J0IHsgaXNOdWxsT3JVbmRlZmluZWQgfSBmcm9tIFwidXRpbFwiO1xyXG5cclxuY29uc3QgSFRNTF9CQUNLU0xBU0g6IHN0cmluZyA9IFwiJiMwOTI7XCI7XHJcbmNvbnN0IEhUTUxfQ09NTUE6IHN0cmluZyA9IFwiJiMwNDQ7XCI7XHJcbmNvbnN0IEhUTUxfSFlQSEVOOiBzdHJpbmcgPSBcIiYjMDQ1O1wiO1xyXG5jb25zdCBTVFJfMl9IVE1MOiBudW1iZXIgPSAxO1xyXG5jb25zdCBUQVNLX1BBVEhfREVMSU1JVEVSOiBzdHJpbmcgPSBcIkBAfHxAQFwiO1xyXG5leHBvcnQgY29uc3QgU0VRXzJfSFRNTDogbnVtYmVyID0gMjtcclxuZXhwb3J0IGNvbnN0IEhUTUxfMl9TVFI6IG51bWJlciA9IDM7XHJcbmNvbnN0IEhUTUxfMl9TRVE6IG51bWJlciA9IDQ7XHJcbmV4cG9ydCBjb25zdCBTRVFfMl9TVFI6IG51bWJlciA9IDU7XHJcblxyXG5leHBvcnQgY2xhc3MgU3RyVXRpbCB7XHJcbiAgcHJpdmF0ZSBzdGF0aWMgX3BhZGRpbmdTcGFjZXM6IHN0cmluZyA9IG51bGw7XHJcblxyXG4gIC8vLyA8c3VtbWFyeT4gdHJpbSB0aGUgZW5kIG9mIHRoZSBzdHJpbmc8L3N1bW1hcnk+XHJcbiAgc3RhdGljIG1lbV90cmltKHN0cjogc3RyaW5nLCBsZW46IG51bWJlcik6IG51bWJlciB7XHJcbiAgICBsZXQgcmVzdWx0OiBudW1iZXI7XHJcbiAgICBpZiAobGVuID4gMCkge1xyXG4gICAgICBpZiAobGVuID4gc3RyLmxlbmd0aCkge1xyXG4gICAgICAgIHJlc3VsdCA9IC0xO1xyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgIH1cclxuICAgICAgd2hpbGUgKGxlbiA+IDAgJiYgc3RyW2xlbiAtIDFdID09PSAnICcpIHtcclxuICAgICAgICBsZW4gPSBsZW4gLSAxO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXN1bHQgPSBsZW47XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIG1lbW1vdmUoZGVzdDogc3RyaW5nLCBkZXN0Q291bnQ6IG51bWJlciwgc3JjOiBzdHJpbmcsIHNyY0NvdW50OiBudW1iZXIsIGxlbjogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgIGxldCBzdHJpbmdCdWlsZGVyOiBTdHJpbmdCdWlsZGVyID0gbmV3IFN0cmluZ0J1aWxkZXIoZGVzdC5sZW5ndGggKyBsZW4pO1xyXG4gICAgaWYgKFV0aWxTdHJCeXRlTW9kZS5pc0xvY2FsZURlZkxhbmdKUE4oKSAmJiBkZXN0Lmxlbmd0aCA8IGRlc3RDb3VudCkge1xyXG4gICAgICBzdHJpbmdCdWlsZGVyLkFwcGVuZChOU3RyaW5nLkZyb21DaGFyKCcgJywgZGVzdENvdW50KSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgc3RyaW5nQnVpbGRlci5BcHBlbmQoZGVzdC5zdWJzdHIoMCwgZGVzdENvdW50KSk7XHJcbiAgICB9XHJcbiAgICBzdHJpbmdCdWlsZGVyLkFwcGVuZChzcmMuc3Vic3RyKHNyY0NvdW50LCBsZW4pKTtcclxuXHJcbiAgICBpZiAoc3RyaW5nQnVpbGRlci5MZW5ndGggPCBkZXN0Lmxlbmd0aCkge1xyXG4gICAgICAgIHN0cmluZ0J1aWxkZXIuQXBwZW5kKGRlc3Quc3Vic3RyKHN0cmluZ0J1aWxkZXIuTGVuZ3RoKSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gc3RyaW5nQnVpbGRlci5Ub1N0cmluZygpO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIG1lbWNweShkZXN0OiBzdHJpbmcsIGRlc3RDb3VudDogbnVtYmVyLCBzcmM6IHN0cmluZywgc2NyQ291bnQ6IG51bWJlciwgY291bnQ6IG51bWJlcik6IHN0cmluZztcclxuICBzdGF0aWMgbWVtY3B5KGRlc3Q6IHN0cmluZ1tdLCBkZXN0Q291bnQ6IG51bWJlciwgc3JjOiBzdHJpbmdbXSwgc3JjQ291bnQ6IG51bWJlciwgY291bnQ6IG51bWJlcik6IHZvaWQ7XHJcbiAgc3RhdGljIG1lbWNweShkZXN0OiBhbnksIGRlc3RDb3VudDogbnVtYmVyLCBzcmM6IGFueSwgc2NyQ291bnRPclNyY0NvdW50OiBudW1iZXIsIGNvdW50OiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDUgJiYgKGRlc3QgPT09IG51bGwgfHwgZGVzdC5jb25zdHJ1Y3RvciA9PT0gU3RyaW5nKSAmJiAoZGVzdENvdW50ID09PSBudWxsIHx8IGRlc3RDb3VudC5jb25zdHJ1Y3RvciA9PT0gTnVtYmVyKSAmJiAoc3JjID09PSBudWxsIHx8IHNyYy5jb25zdHJ1Y3RvciA9PT0gU3RyaW5nKSAmJiAoc2NyQ291bnRPclNyY0NvdW50ID09PSBudWxsIHx8IHNjckNvdW50T3JTcmNDb3VudC5jb25zdHJ1Y3RvciA9PT0gTnVtYmVyKSAmJiAoY291bnQgPT09IG51bGwgfHwgY291bnQuY29uc3RydWN0b3IgPT09IE51bWJlcikpIHtcclxuICAgICAgcmV0dXJuIFN0clV0aWwubWVtY3B5XzAoZGVzdCwgZGVzdENvdW50LCBzcmMsIHNjckNvdW50T3JTcmNDb3VudCwgY291bnQpO1xyXG4gICAgfVxyXG4gICAgU3RyVXRpbC5tZW1jcHlfMShkZXN0LCBkZXN0Q291bnQsIHNyYywgc2NyQ291bnRPclNyY0NvdW50LCBjb3VudCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgY29weSBwYXJ0IG9mIHN0cmluZyBpbnRvIGFub3RoZXIgc3RyaW5nLCBsaWtlIG1lbWNweSBvZiBDLCBidXQgNCBzdHJpbmcgb25seVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJkZXN0XCI+c3RyaW5nPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImRlc3RDb3VudFwiPm9mIGNvdW50ZXIgc3RhcnQgZnJvbSBpbiBkZXN0aWduYXRpb24gc3RyaW5nPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInNyY1wiPnN0cmluZzwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJzY3JDb3VudFwiPm9mIGNvdW50ZXIgc3RhcnQgZnJvbSBpbiBzb3VyY2Ugc3RyaW5nPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImNvdW50XCI+PC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+IG5ldyB2YWx1ZSBvZiBkZXN0aWduYXRpb24gc3RyaW5nPC9yZXR1cm5zPlxyXG4gIHByaXZhdGUgc3RhdGljIG1lbWNweV8wKGRlc3Q6IHN0cmluZywgZGVzdENvdW50OiBudW1iZXIsIHNyYzogc3RyaW5nLCBzY3JDb3VudDogbnVtYmVyLCBjb3VudDogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgIGxldCBzdHJpbmdCdWlsZGVyOiBTdHJpbmdCdWlsZGVyID0gbmV3IFN0cmluZ0J1aWxkZXIoZGVzdC5zdWJzdHIoMCwgZGVzdENvdW50KSk7XHJcblxyXG4gICAgaWYgKHNjckNvdW50ICsgY291bnQgPCBzcmMubGVuZ3RoKSB7XHJcbiAgICAgIHN0cmluZ0J1aWxkZXIuQXBwZW5kKHNyYy5zdWJzdHIoc2NyQ291bnQsIGNvdW50IC0gc2NyQ291bnQpKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBzdHJpbmdCdWlsZGVyLkFwcGVuZChzcmMuc3Vic3RyKHNjckNvdW50KSk7XHJcbiAgICB9XHJcbiAgICBsZXQgc2l6ZTogbnVtYmVyID0gZGVzdC5sZW5ndGggLSBkZXN0Q291bnQgLSBjb3VudDtcclxuICAgIGlmIChzaXplID4gMCkge1xyXG4gICAgICBzdHJpbmdCdWlsZGVyLkFwcGVuZChkZXN0LnN1YnN0cihkZXN0Q291bnQgKyBjb3VudCkpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHN0cmluZ0J1aWxkZXIuVG9TdHJpbmcoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3RhdGljIG1lbWNweV8xKGRlc3Q6IHN0cmluZ1tdLCBkZXN0Q291bnQ6IG51bWJlciwgc3JjOiBzdHJpbmdbXSwgc3JjQ291bnQ6IG51bWJlciwgY291bnQ6IG51bWJlcik6IHZvaWQge1xyXG4gICAgd2hpbGUgKGNvdW50ID4gMCAmJiBkZXN0Q291bnQgPCBkZXN0Lmxlbmd0aCAmJiBzcmNDb3VudCA8IHNyYy5sZW5ndGgpIHtcclxuICAgICAgZGVzdFtkZXN0Q291bnQrK10gPSBzcmNbc3JjQ291bnQrK107XHJcbiAgICAgIGNvdW50ID0gY291bnQgLSAxO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc3RhdGljIG1lbXNldChkZXN0OiBzdHJpbmcsIGRlc3RDb3VudDogbnVtYmVyLCBpblZhbDogc3RyaW5nLCBjb3VudGVyOiBudW1iZXIpOiBzdHJpbmc7XHJcbiAgc3RhdGljIG1lbXNldChkZXN0OiBzdHJpbmdbXSwgZGVzdENvdW50OiBudW1iZXIsIGluVmFsOiBzdHJpbmcsIGNvdW50ZXI6IG51bWJlcik6IHZvaWQ7XHJcbiAgc3RhdGljIG1lbXNldChkZXN0OiBhbnksIGRlc3RDb3VudDogbnVtYmVyLCBpblZhbDogc3RyaW5nLCBjb3VudGVyOiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDQgJiYgKGRlc3QgPT09IG51bGwgfHwgZGVzdC5jb25zdHJ1Y3RvciA9PT0gU3RyaW5nKSAmJiAoZGVzdENvdW50ID09PSBudWxsIHx8IGRlc3RDb3VudC5jb25zdHJ1Y3RvciA9PT0gTnVtYmVyKSAmJiAoaW5WYWwgPT09IG51bGwgfHwgaW5WYWwuY29uc3RydWN0b3IgPT09IE51bWJlcikgJiYgKGNvdW50ZXIgPT09IG51bGwgfHwgY291bnRlci5jb25zdHJ1Y3RvciA9PT0gTnVtYmVyKSkge1xyXG4gICAgICByZXR1cm4gU3RyVXRpbC5tZW1zZXRfMChkZXN0LCBkZXN0Q291bnQsIGluVmFsLCBjb3VudGVyKTtcclxuICAgIH1cclxuICAgIFN0clV0aWwubWVtc2V0XzEoZGVzdCwgZGVzdENvdW50LCBpblZhbCwgY291bnRlcik7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgaW5zZXJ0IHRvIHN0cmluZyBjaGFycyBuIHRpbWVzXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImRlc3RcIj5zdHJpbmc8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiZGVzdENvdW50XCI+b2YgY291bnRlciBzdGFydCBmcm9tIGluIGRlc3RpZ25hdGlvbiBzdHJpbmcgdG8gc3RhcnQgaW5zZXJ0aW9uIG9mIGNoYXIgZnJvbTwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJpblZhbFwiPjIgaW5zZXJ0PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImNvdW50ZXJcIj4tIG51bWJlciBvZiB0aW1lcyB0byBpbnNlcnQgdGhlIGNoYXI8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4gbmV3IHZhbHVlIG9mIGRlc3RpZ25hdGlvbiBzdHJpbmc8L3JldHVybnM+XHJcbiAgcHJpdmF0ZSBzdGF0aWMgbWVtc2V0XzAoZGVzdDogc3RyaW5nLCBkZXN0Q291bnQ6IG51bWJlciwgaW5WYWw6IHN0cmluZywgY291bnRlcjogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgIGxldCBmaXJzdDogU3RyaW5nQnVpbGRlciA9IG5ldyBTdHJpbmdCdWlsZGVyKGRlc3Quc3Vic3RyKDAsIGRlc3RDb3VudCkpO1xyXG4gICAgd2hpbGUgKGNvdW50ZXIgPiAwKSB7XHJcbiAgICAgIGZpcnN0LkFwcGVuZChpblZhbCk7XHJcbiAgICAgIGNvdW50ZXIgPSBjb3VudGVyIC0gMTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZmlyc3QuTGVuZ3RoIDwgZGVzdC5sZW5ndGgpIHtcclxuICAgICAgZmlyc3QuQXBwZW5kKGRlc3Quc3Vic3RyKGZpcnN0Lkxlbmd0aCkpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZpcnN0LlRvU3RyaW5nKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN0YXRpYyBtZW1zZXRfMShkZXN0OiBzdHJpbmdbXSwgZGVzdENvdW50OiBudW1iZXIsIGluVmFsOiBzdHJpbmcsIGNvdW50ZXI6IG51bWJlcik6IHZvaWQge1xyXG4gICAgd2hpbGUgKGNvdW50ZXIgPiAwICYmIGRlc3RDb3VudCA8IGRlc3QubGVuZ3RoKSB7XHJcbiAgICAgIGRlc3RbZGVzdENvdW50KytdID0gaW5WYWw7XHJcbiAgICAgIGNvdW50ZXIgPSBjb3VudGVyIC0gMTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHN0YXRpYyBzdHJzdHIoc3RyOiBzdHJpbmcsIHN1YnN0cjogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGxldCBmcm9tOiBudW1iZXIgPSBzdHIuaW5kZXhPZihzdWJzdHIpO1xyXG4gICAgbGV0IHJlc3VsdDogc3RyaW5nO1xyXG4gICAgaWYgKGZyb20gPCAwKSB7XHJcbiAgICAgIHJlc3VsdCA9IG51bGw7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgcmVzdWx0ID0gc3RyLnN1YnN0cihmcm9tKTtcclxuICAgIH1cclxuICAgIHJldHVybiByZXN1bHQ7XHJcbiAgfVxyXG5cclxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIFJldmVyc2VzIHN0cmluZyB2YWx1ZXMuXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJ0ZXh0XCI+VGhlIFN0cmluZ0J1aWxkZXIgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIHN0cmluZyB0byBiZSByZXZlcnNlZC48L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz5UaGUgcmV2ZXJzZWQgc3RyaW5nIGNvbnRhaW5lZCBpbiBhIFN0cmluZ0J1aWxkZXIgb2JqZWN0LjwvcmV0dXJucz5cclxuICBzdGF0aWMgUmV2ZXJzZVN0cmluZyh0ZXh0OiBTdHJpbmdCdWlsZGVyKTogU3RyaW5nQnVpbGRlciB7XHJcbiAgICAvLyBUT0RPOiB1c2Ugc3RyaW5nLlJldmVyc2UoKVxyXG4gICAgbGV0IGFycmF5OiBzdHJpbmdbXSA9IE5TdHJpbmcuVG9DaGFyQXJyYXkodGV4dC5Ub1N0cmluZygpKTtcclxuICAgIGFycmF5LnJldmVyc2UoKTtcclxuICAgIHJldHVybiBuZXcgU3RyaW5nQnVpbGRlcihOU3RyaW5nLkZyb21DaGFycyhhcnJheSkpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PiByZW1vdmUgc3BhY2VzIGZyb20gdGhlIHJpZ2h0IHNpZGUgb2Ygc3RyaW5nPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInN0clwiPnRoZSBzdHJpbmcgdG8gdHJpbVxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIHN0YXRpYyBydHJpbShzdHI6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gU3RyVXRpbC5ydHJpbVdpdGhOdWxsKHN0ciwgZmFsc2UpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PiByZW1vdmUgc3BhY2VzIGFuZC9vciBOdWxsIGNoYXJzIGZyb20gdGhlIHJpZ2h0IHNpZGUgb2Ygc3RyaW5nPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInN0clwiPnRoZSBzdHJpbmcgdG8gdHJpbVxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInRyaW1OdWxsQ2hhcnNcIj5XaGV0aGVyIHRvIHJlbW92ZSBOVUxMIGNoYXJhY3RlcnMgb3Igbm90XHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgc3RhdGljIHJ0cmltV2l0aE51bGwoc3RyOiBzdHJpbmcsIHRyaW1OdWxsQ2hhcnM6IGJvb2xlYW4pOiBzdHJpbmcge1xyXG4gICAgbGV0IHJlc3VsdDogc3RyaW5nO1xyXG4gICAgaWYgKHR5cGVvZiBzdHIgPT09IFwidW5kZWZpbmVkXCIgfHwgc3RyID09PSBudWxsIHx8IHN0ci5sZW5ndGggPT09IDApIHtcclxuICAgICAgcmVzdWx0ID0gc3RyO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGxldCBpZHg6IG51bWJlciA9IHN0ci5sZW5ndGggLSAxO1xyXG4gICAgICBpZiAodHJpbU51bGxDaGFycykge1xyXG5cclxuICAgICAgICB3aGlsZSAoaWR4ID49IDAgJiYgKHN0cltpZHhdID09PSAnICcgfHwgc3RyW2lkeF0gPT09IFN0cmluZy5mcm9tQ2hhckNvZGUoMCkvKidcdTAwMDAnKi8pKSB7XHJcbiAgICAgICAgICBpZHggPSBpZHggLSAxO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICB3aGlsZSAoaWR4ID49IDAgJiYgc3RyW2lkeF0gPT09ICcgJykge1xyXG4gICAgICAgICAgaWR4ID0gaWR4IC0gMTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgaWR4ID0gaWR4ICsgMTtcclxuXHJcbiAgICAgIGlmIChpZHggPCBzdHIubGVuZ3RoKSB7XHJcbiAgICAgICAgcmVzdWx0ID0gc3RyLnN1YnN0cigwLCBpZHgpO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIHJlc3VsdCA9IHN0cjtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT4gcmVtb3ZlIHNwYWNlcyBmcm9tIHRoZSBsZWZ0IHNpZGUgb2Ygc3RyaW5nPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInN0clwiPnRoZSBzdHJpbmcgdG8gdHJpbVxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIHN0YXRpYyBsdHJpbShzdHI6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBsZXQgbGVuZ3RoOiBudW1iZXIgPSBzdHIubGVuZ3RoO1xyXG4gICAgbGV0IGk6IG51bWJlciA9IDA7XHJcbiAgICBsZXQgcmVzdWx0OiBzdHJpbmc7XHJcbiAgICBpZiAoc3RyID09PSBudWxsIHx8IGxlbmd0aCA9PT0gMCkge1xyXG4gICAgICByZXN1bHQgPSBzdHI7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgd2hpbGUgKGkgPCBsZW5ndGggJiYgc3RyW2ldID09PSAnICcvKicgJyovKSB7XHJcbiAgICAgICAgaSA9IGkgKyAxO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoaSA+IDApIHtcclxuICAgICAgICBzdHIgPSBzdHIuc3Vic3RyKGkpO1xyXG4gICAgICB9XHJcbiAgICAgIHJlc3VsdCA9IHN0cjtcclxuICAgIH1cclxuICAgIHJldHVybiByZXN1bHQ7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+VGhpcyBmdW5jdGlvbiBmb3IgRGVsZXRpbmcgU3RyaW5nIGZyb20gZW5kICYgc3RhcnQgb2YgaW5wdXRcclxuICAvLy8gU3RyaW5nXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJzdHJcIj5TdHJpbmcgLCB3aGljaCBjYW4gaW5jbHVkZSBzdHJUb0RlbGV0ZSBzcGFjZXMgb24gaW5wdXRcclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJzdHJUb0RlbGV0ZVwiPm5lZWQgZGVsZXRlIHRoaXMgU3RyaW5nIGZyb20gc3RhcnQvZW5kIG9mIHN0ci5cclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+IFN0cmluZyB3aXRob3V0IHN0clRvRGVsZXRlIG9uIGVuZCAmIHN0YXJ0LFxyXG4gIC8vLyBvciAnbnVsbCcgaWYgU3RpbmcgaGFzbid0IG5vdCAgY2hhcmFjdGVycyBpbnNpZGVcclxuICAvLy8gPC9yZXR1cm5zPlxyXG4gIHN0YXRpYyBEZWxldGVTdHJpbmdzRnJvbUVuZHMoc3RyOiBzdHJpbmcsIHN0clRvRGVsZXRlOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgaWYgKHN0ci5zdGFydHNXaXRoKHN0clRvRGVsZXRlKSkge1xyXG4gICAgICBzdHIgPSBzdHIuc3Vic3RyKHN0clRvRGVsZXRlLmxlbmd0aCk7XHJcbiAgICB9XHJcbiAgICBpZiAoc3RyLmVuZHNXaXRoKHN0clRvRGVsZXRlKSkge1xyXG4gICAgICBzdHIgPSBzdHIuc3Vic3RyKDAsIHN0ci5sZW5ndGggLSBzdHJUb0RlbGV0ZS5sZW5ndGgpO1xyXG4gICAgfVxyXG4gICAgbGV0IHJlc3VsdDogc3RyaW5nO1xyXG4gICAgaWYgKHN0ci5sZW5ndGggPT09IDApIHtcclxuICAgICAgcmVzdWx0ID0gbnVsbDtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICByZXN1bHQgPSBzdHI7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PiBwYWQgYSBzdHJpbmcgd2l0aCB0cmFpbGluZyBzcGFjZXMgdXAgdG8gdGhlIGdpdmVuIGxlbmd0aDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJzdHJcIj50aGUgc3RyaW5nIHRvIHBhZFxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImxlblwiPnRoZSBleHBlY3RlZCBsZW5ndGggYWZ0ZXIgcGFkZGluZ1xyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIHN0YXRpYyBwYWRTdHIoc3RyOiBzdHJpbmcsIGxlbjogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgIGxldCBwYWRMZW46IG51bWJlciA9IGxlbiAtIHN0ci5sZW5ndGg7XHJcblxyXG4gICAgaWYgKHBhZExlbiA+IDApIHtcclxuICAgICAgaWYgKFN0clV0aWwuX3BhZGRpbmdTcGFjZXMgPT09IG51bGwgfHwgU3RyVXRpbC5fcGFkZGluZ1NwYWNlcy5sZW5ndGggPCBwYWRMZW4pIHtcclxuICAgICAgICBTdHJVdGlsLl9wYWRkaW5nU3BhY2VzID0gTlN0cmluZy5Gcm9tQ2hhcignICcsIHBhZExlbik7XHJcbiAgICAgIH1cclxuICAgICAgbGV0IHN0cmluZ0J1aWxkZXI6IFN0cmluZ0J1aWxkZXIgPSBuZXcgU3RyaW5nQnVpbGRlcihsZW4pO1xyXG4gICAgICBzdHJpbmdCdWlsZGVyLkFwcGVuZChzdHIpO1xyXG4gICAgICBzdHJpbmdCdWlsZGVyLkFwcGVuZChTdHJVdGlsLl9wYWRkaW5nU3BhY2VzLCAwLCBwYWRMZW4pO1xyXG4gICAgICBzdHIgPSBzdHJpbmdCdWlsZGVyLlRvU3RyaW5nKCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gc3RyO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PiB0aGlzIG1ldGhvZCB3aWxsIHNlcnZlIGFzIGEgc3RyaW5nIHRva2VuaXplciBpbnN0ZWFkIG9mIHVzaW5nIHRoZSBjIyBzcGxpdCBtZXRob2RcclxuICAvLy8gc2luY2UgdGhlcmUgYXJlIGRpZmZyZW5jZXMgYnR3ZWVuIGphdmEgdG9rZW5pemVyIGFuZCBjIyBzcGxpdFxyXG4gIC8vLyB0aGUgaW1wbGltZW50YXRpb24gZ2l2ZW4gYnkgdGhlIGNvbnZlcnNpb24gdG9vbCBpcyBub3QgU3VmZmljaWVudFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwic291cmNlXCI+LSB0aGUgc291cmNlIHN0cmluZyB0byBiZSBjb252ZXJ0ZWRcclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJkZWxpbVwiPi0gdGhlIHN0cmluZyBvZiBkZWxpbWl0ZXJzIHVzZWQgdG8gc3BsaXQgdGhlIHN0cmluZyAoZWFjaCBjaGFyYWN0ZXIgaW4gdGhlIFN0cmluZyBpcyBhIGRlbGltaXRlclxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4gYXJyYXkgb2YgdG9rZW4gYWNjb3JkaW5nIHdoaWNoIGlzIHRoZSBzYW1lIGFzIHN0cmluZyB0b2tlbml6ZXIgaW4gamF2YVxyXG4gIC8vLyA8L3JldHVybnM+XHJcbiAgc3RhdGljIHRva2VuaXplKHNvdXJjZTogc3RyaW5nLCBkZWxpbTogc3RyaW5nfFJlZ0V4cCk6IHN0cmluZ1tdIHtcclxuICAgIC8vIEl0IGlzIG1lbnRpb25lZCBpbiB0aGUgY29tbWVudCB0aGF0IHdlIHNob3VsZCBub3QgdXNlIFN0cmluZy5TcGxpdCgpXHJcbiAgICAvLyBiZWNhdXNlIGl0cyBiZWhhdmlvciBpcyBkaWZmZXJlbnQgdGhhbiBKYXZhJ3MgdG9rZW5pemVyLlxyXG4gICAgLy8gU28sIHdlIHdlcmUgc3VwcG9zZSB0byB1c2Ugb3VyIG93biBpbXBsZW1lbnRhdGlvbiAodGhlIGNvbW1lbnRlZCBjb2RlIGJlbG93KS5cclxuICAgIC8vIEJ1dCBhbGwgdGhlc2UgeWVhcnMsIHdlIHdlcmUgY2FsbGluZyBYbWxQYXJzZXIuZ2V0VG9rZW4oKSB3aGljaCB3YXMgYWN0dWFsbHlcclxuICAgIC8vIHVzaW5nIFN0cmluZy5TcGxpdCgpLiBBbmQgd2UgZGlkbid0IGZhY2UgYW55IHByb2JsZW0uXHJcbiAgICAvLyBTbywgaXQgc2VlbXMgdGhhdCB3ZSBkbyBub3QgaGF2ZSBwcm9ibGVtIGluIHVzaW5nIFN0cmluZy5TcGxpdCgpLlxyXG4gICAgLy8gQnV0IG5vdywgd2UgY2FuIGltcHJvdmUgdGhlIHBlcmZvcm1hbmNlIGhlcmUuLi5cclxuICAgIC8vIFhtbFBhcnNlci5nZXRUb2tlbnMoKSB3YXMgZ2V0dGluZyBhIFN0cmluZ1tdIHVzaW5nIFN0cmluZy5TcGxpdCgpLlxyXG4gICAgLy8gSXQgd2FzIHRoZW4gY3JlYXRpbmcgYSBMaXN0PFN0cmluZz4gZnJvbSB0aGlzIFN0cmluZ1tdIGFuZCB3YXMgcmV0dXJuaW5nIGl0IHRvXHJcbiAgICAvLyB0b2tlbml6ZSgpLlxyXG4gICAgLy8gdG9rZW5pemUoKSB3YXMgYWdhaW4gY29udmVydGluZyB0aGlzIExpc3Q8U3RyaW5nPiBiYWNrIHRvIFN0cmluZ1tdLlxyXG4gICAgLy8gU28gd2h5IG5vdCBjYWxsIFN0cmluZy5TcGxpdCgpIGRpcmVjdGx5P1xyXG4gICAgcmV0dXJuIHNvdXJjZS5zcGxpdChkZWxpbSk7XHJcbiAgICAvKlxyXG5TdHJpbmcgW10gdG9rZW5zID0gbnVsbDtcclxuXHJcbmNoYXIgW10gZGVsaW1BcnJ5ID0gZGVsaW0udG9DaGFyQXJyYXkoKTtcclxuXHJcbi8vc2luY2UgamF2YSBkaXNjYXJkcyBkZWxpbWl0ZXJzIGZyb20gdGhlIHN0YXJ0IGFuZCBlbmQgb2YgdGhlIHN0cmluZyBhbmQgYyMgZG9lcyBub3RcclxuLy93ZSBuZWVkIHRvIHJlbW92ZSB0aGVtIG1hbnVhbGx5XHJcbi8vICAgICAgIHNvdXJjZSA9IHNvdXJjZS5UcmltRW5kKGRlbGltQXJyeSk7XHJcbi8vICAgICBzb3VyY2UgPSBzb3VyY2UuVHJpbVN0YXJ0KGRlbGltQXJyeSk7XHJcbnNvdXJjZSA9IHNvdXJjZS50cmltKCk7XHJcblxyXG4vL25vdyB0aGF0IHdlIGhhdmUgcmVtb3ZlIHN0YXJ0aW5nIGFuZCBlbmRpbmcgZGVsaW1pdGVycyB3ZSBjYW4gc3BsaXRcclxudG9rZW5zID0gc291cmNlLlNwbGl0KGRlbGltQXJyeSk7XHJcblxyXG4vKlxyXG4qIG9ubHkgb25lIHByb2JsZW06IGlmIHdlIGhhdmUgdHdvIFN1YnNlcXVlbnQgZGVsaW1pdGVycyBmb3IgZXhhbXBsZSA6XHJcbiogdGhlIGRlbGltaXRlciBpcyAnOycgYW5kIHRoZSBzdHJpbmcgaXM6IFwiZmlyc3Q7O3NlY29uZDt0aGlyZFwiXHJcbiogdGhlbiBpbiBqYXZhIFN0cmluZyB0b2tlbml6ZXIgd2lsbCBnaXZlIHVzIG9ubHkgMyB0b2tlbnMgOmZpcnN0LHNlY29uZCBhbmQgdGhpcmRcclxuKiB3aGlsZSBpcyBjIyBzcGxpdCB3ZXRob2Qgd2lsbCByZXR1cm4gNCB0b2tlbnM6IGZpcnN0LGVtcHR5IHN0cmluZyxzZWNvbmQgYW5kIHRoaXJkXHJcbiogd2UgbmVlZCB0byBkZWFsIHdpdGggdGhhdFxyXG4qL1xyXG4gICAgLypcclxuICAgIExpc3QgcmVzICA9IG5ldyBMaXN0KCk7XHJcbiAgICBmb3IgKGludCBpID0gMCA7IGkgPCB0b2tlbnMubGVuZ3RoOyBpKyspXHJcbiAgICB7XHJcbiAgICBpZiAodG9rZW5zW2ldICE9IFwiXCIgKVxyXG4gICAgcmVzLmFkZEl0ZW0odG9rZW5zW2ldKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gKFN0cmluZyBbXSkocmVzLmdldEFsbEl0ZW1zIChTdHJpbmcuY2xhc3MpKTsqL1xyXG5cclxuXHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgdHJhbnNsYXRlIGZyb20gc3RyaW5nIHRvIGhleGEgZHVtcCBjaGFyIGJ5IGNoYXJcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwic3RyaW5nXCI+dG8gdHJhbnNsYXRlIGl0IHRvIHRoZSBieXRlIHN0cmVhbTwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJtaW5MZW5ndGhcIj50aGUgbWluaW1hbCBsZW5ndGggb2YgaGV4YSBkaWdpdHMgZm9yIGVhY2ggY2hhcjwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiB0aGUgYnl0ZSBzdHJlYW0gaW4gZm9ybSBvZiBzdHJpbmc8L3JldHVybnM+XHJcbiAgc3RhdGljIHN0cmluZ1RvSGV4YUR1bXAoc3RyOiBzdHJpbmcsIG1pbkxlbmd0aDogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgIGxldCBzdHJpbmdCdWlsZGVyOiBTdHJpbmdCdWlsZGVyID0gbmV3IFN0cmluZ0J1aWxkZXIoc3RyLmxlbmd0aCAqIG1pbkxlbmd0aCk7XHJcbiAgICBmb3IgKGxldCBpbmR4OiBudW1iZXIgPSAwOyBpbmR4IDwgc3RyLmxlbmd0aDsgaW5keCA9IGluZHggKyAxKSB7XHJcbiAgICAgIGxldCBjdXJySW50OiBudW1iZXIgPSBzdHIuY2hhckNvZGVBdChpbmR4KTtcclxuICAgICAgbGV0IGhleFN0cjogc3RyaW5nID0gY3VyckludC50b1N0cmluZygxNik7XHJcbiAgICAgIHdoaWxlIChoZXhTdHIubGVuZ3RoIDwgbWluTGVuZ3RoKSB7XHJcbiAgICAgICAgaGV4U3RyID0gXCIwXCIgKyBoZXhTdHI7XHJcbiAgICAgIH1cclxuICAgICAgc3RyaW5nQnVpbGRlci5BcHBlbmQoaGV4U3RyKTtcclxuICAgIH1cclxuICAgIHJldHVybiBzdHJpbmdCdWlsZGVyLlRvU3RyaW5nKCkudG9VcHBlckNhc2UoKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBzZWFyY2hBbmRSZXBsYWNlKHN0cjogc3RyaW5nLCBmcm9tOiBzdHJpbmcsIHRvOiBzdHJpbmcpOiBzdHJpbmc7XHJcbiAgc3RhdGljIHNlYXJjaEFuZFJlcGxhY2Uoc3RyOiBzdHJpbmcsIGZyb206IHN0cmluZ1tdLCB0bzogc3RyaW5nW10pOiBzdHJpbmc7XHJcbiAgc3RhdGljIHNlYXJjaEFuZFJlcGxhY2Uoc3RyOiBzdHJpbmcsIGZyb206IGFueSwgdG86IGFueSk6IHN0cmluZyB7XHJcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMyAmJiAoc3RyID09PSBudWxsIHx8IHN0ci5jb25zdHJ1Y3RvciA9PT0gU3RyaW5nKSAmJiAoZnJvbSA9PT0gbnVsbCB8fCBmcm9tLmNvbnN0cnVjdG9yID09PSBTdHJpbmcpICYmICh0byA9PT0gbnVsbCB8fCB0by5jb25zdHJ1Y3RvciA9PT0gU3RyaW5nKSkge1xyXG4gICAgICByZXR1cm4gU3RyVXRpbC5zZWFyY2hBbmRSZXBsYWNlXzAoc3RyLCBmcm9tLCB0byk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gU3RyVXRpbC5zZWFyY2hBbmRSZXBsYWNlXzEoc3RyLCBmcm9tLCB0byk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+IHJlcGxhY2UgZXZlcnkgYXBwZWFyYW5jZSBvZiAnZnJvbScgaW4gJ3N0cicgd2l0aCAndG8nPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInN0clwiPnRoZSB3b3JraW5nIGJhc2Ugc291cmNlIHN0cmluZyA8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImZyb21cIj50aGUgc3RyaW5nIHRvIHJlcGxhY2UgPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJ0b1wiPnRoZSBzdHJpbmcgdXNlIGluc3RlYWQgJ2Zyb20nIDwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiBtb2RpZmllZCBTdHJpbmcgPC9yZXR1cm5zPlxyXG4gIHByaXZhdGUgc3RhdGljIHNlYXJjaEFuZFJlcGxhY2VfMChzdHI6IHN0cmluZywgZnJvbTogc3RyaW5nLCB0bzogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGxldCBsYXN0U3ViU3RyOiBudW1iZXIgPSAwO1xyXG4gICAgbGV0IHN0YXJ0U3ViU3RyOiBudW1iZXI7XHJcbiAgICBsZXQgcmVzdWx0OiBzdHJpbmc7XHJcblxyXG4gICAgaWYgKChzdGFydFN1YlN0ciA9IHN0ci5pbmRleE9mKGZyb20pKSA9PT0gLTEpIHtcclxuICAgICAgcmVzdWx0ID0gc3RyO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGxldCBzdHJpbmdCdWlsZGVyOiBTdHJpbmdCdWlsZGVyID0gbmV3IFN0cmluZ0J1aWxkZXIoc3RyLmxlbmd0aCk7XHJcbiAgICAgIHdoaWxlIChzdGFydFN1YlN0ciAhPT0gLTEpIHtcclxuICAgICAgICBzdHJpbmdCdWlsZGVyLkFwcGVuZChzdHIuc3Vic3RyKGxhc3RTdWJTdHIsIHN0YXJ0U3ViU3RyIC0gbGFzdFN1YlN0cikgKyB0byk7XHJcbiAgICAgICAgc3RhcnRTdWJTdHIgPSBzdGFydFN1YlN0ciArIGZyb20ubGVuZ3RoO1xyXG4gICAgICAgIGxhc3RTdWJTdHIgPSBzdGFydFN1YlN0cjtcclxuICAgICAgICBzdGFydFN1YlN0ciA9IHN0ci5pbmRleE9mKGZyb20sIGxhc3RTdWJTdHIpO1xyXG4gICAgICB9XHJcbiAgICAgIHN0cmluZ0J1aWxkZXIuQXBwZW5kKHN0ci5zdWJzdHIobGFzdFN1YlN0cikpO1xyXG4gICAgICByZXN1bHQgPSBzdHJpbmdCdWlsZGVyLlRvU3RyaW5nKCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PiByZXBsYWNlIGV2ZXJ5IGFwcGVhcmFuY2Ugb2Ygc3RyaW5ncyBvZiAnZnJvbScgaW4gJ3N0cicgd2l0aCB0aGUgYWNjb3JkaW5nIHN0cmluZyBpbiAndG8nPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInN0clwiPnRoZSB3b3JraW5nIGJhc2Ugc291cmNlIHN0cmluZyA8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImZyb21cIj50aGUgc3RyaW5nIHRvIHJlcGxhY2UgPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJ0b1wiPnRoZSBzdHJpbmcgdXNlIGluc3RlYWQgJ2Zyb20nIDwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiBtb2RpZmllZCBTdHJpbmcgPC9yZXR1cm5zPlxyXG4gIHByaXZhdGUgc3RhdGljIHNlYXJjaEFuZFJlcGxhY2VfMShzdHI6IHN0cmluZywgZnJvbTogc3RyaW5nW10sIHRvOiBzdHJpbmdbXSk6IHN0cmluZyB7XHJcbiAgICBsZXQgbGFzdFN1YlN0cjogbnVtYmVyID0gMDtcclxuICAgIGxldCBzYXJJbmRleDogbnVtYmVyID0gMDtcclxuICAgIGxldCBmcm9tQ29weTogc3RyaW5nW10gPSBmcm9tLnNsaWNlKCk7XHJcbiAgICBsZXQgc3RhcnRTdWJTdHI6IG51bWJlcjtcclxuICAgIGxldCBTQVJpbmRleDogUmVmUGFyYW08bnVtYmVyPiA9IG5ldyBSZWZQYXJhbSgwKTtcclxuICAgIHN0YXJ0U3ViU3RyID0gU3RyVXRpbC5pbmRleE9mKHN0ciwgZnJvbUNvcHksIGxhc3RTdWJTdHIsIFNBUmluZGV4KTtcclxuICAgIHNhckluZGV4ID0gU0FSaW5kZXgudmFsdWU7XHJcbiAgICBpZiAoc3RhcnRTdWJTdHIgPT09IC0xKVxyXG4gICAgICByZXR1cm4gc3RyO1xyXG5cclxuICAgIGxldCByZXN1bHQ6IHN0cmluZztcclxuICAgIGxldCB0bXBCdWY6IFN0cmluZ0J1aWxkZXIgPSBuZXcgU3RyaW5nQnVpbGRlcihzdHIubGVuZ3RoKTtcclxuICAgIHdoaWxlIChzdGFydFN1YlN0ciAhPT0gLTEpIHtcclxuICAgICAgdG1wQnVmLkFwcGVuZChzdHIuc3Vic3RyKGxhc3RTdWJTdHIsIHN0YXJ0U3ViU3RyIC0gbGFzdFN1YlN0cikgKyB0b1tzYXJJbmRleF0pO1xyXG4gICAgICBzdGFydFN1YlN0ciArPSBmcm9tQ29weVtzYXJJbmRleF0ubGVuZ3RoO1xyXG4gICAgICBsYXN0U3ViU3RyID0gc3RhcnRTdWJTdHI7XHJcbiAgICAgIHN0YXJ0U3ViU3RyID0gU3RyVXRpbC5pbmRleE9mKHN0ciwgZnJvbUNvcHksIGxhc3RTdWJTdHIsIFNBUmluZGV4KTtcclxuICAgICAgc2FySW5kZXggPSBTQVJpbmRleC52YWx1ZTtcclxuICAgICAgfTtcclxuICAgIHRtcEJ1Zi5BcHBlbmQoc3RyLnN1YnN0cihsYXN0U3ViU3RyKSk7XHJcbiAgICByZXN1bHQgPSB0bXBCdWYuVG9TdHJpbmcoKTtcclxuXHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PiB0aGlzIGZ1bmN0aW9ucyBpcyBmb3IgdXNlIGJ5IHRoZSBzZWFyY2hBbmRSZXBsYWNlKCkgZnVuY3Rpb24gLVxyXG4gIC8vLyBzZWFyY2hlcyB0aGUgb2Zmc2V0IG9mIHRoZSBzdHJpbmdzIGZyb20gdGhlIGFycmF5IGluIHRoZSBnaXZlbiBzdHJpbmdcclxuICAvLy8gYW5kIHJldHVybnMgdGhlIG1pbmltdW0gb2Zmc2V0IGZvdW5kIGFuZCBzZXRzIHRoZSBpbmRleCBvZiB0aGUgZm91bmQgc3RyaW5nXHJcbiAgLy8vIHRvIFNBUmluZGV4XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJzdHJcIj50aGUgc3RyaW5nIHRvIHNlYXJjaCBpbiA8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInN0cmluZ3NcIj5hbiBhcnJheSBvZiBzdHJpbmdzIHRvIHNlYXJjaCBmb3IgPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJvZmZzZXRcIj53aGVyZSB0byBzdGFydCB0aGUgc2VhcmNoIDwvcGFyYW0+XHJcbiAgcHJpdmF0ZSBzdGF0aWMgaW5kZXhPZihzdHI6IHN0cmluZywgc3RyaW5nczogc3RyaW5nW10sIG9mZnNldDogbnVtYmVyLCBTQVJpbmRleDogUmVmUGFyYW08bnVtYmVyPik6IG51bWJlciB7XHJcbiAgICBsZXQgbWluT2Zmc2V0OiBudW1iZXIgPSAtMTtcclxuICAgIGZvciAobGV0IGk6IG51bWJlciA9IDA7IGkgPCBzdHJpbmdzLmxlbmd0aDsgaSA9IGkgKyAxKSB7XHJcbiAgICAgIGxldCBmbGFnOiBib29sZWFuID0gc3RyaW5nc1tpXSA9PT0gbnVsbDtcclxuICAgICAgaWYgKCEoc3RyaW5nc1tpXSA9PT0gbnVsbCkpIHtcclxuICAgICAgICBsZXQgcmVzdWx0T2Zmc2V0OiBudW1iZXIgPSBzdHIuaW5kZXhPZihzdHJpbmdzW2ldLCBvZmZzZXQpO1xyXG5cclxuICAgICAgICBpZiAocmVzdWx0T2Zmc2V0ID09PSAtMSkge1xyXG4gICAgICAgICAgc3RyaW5nc1tpXSA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgaWYgKHJlc3VsdE9mZnNldCA8IG1pbk9mZnNldCB8fCBtaW5PZmZzZXQgPT09IC0xKSB7XHJcbiAgICAgICAgICAgIG1pbk9mZnNldCA9IHJlc3VsdE9mZnNldDtcclxuICAgICAgICAgICAgU0FSaW5kZXgudmFsdWUgPSBpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGxldCByZXN1bHQ6IG51bWJlcjtcclxuICAgIGlmIChtaW5PZmZzZXQgPiAtMSkge1xyXG4gICAgICByZXN1bHQgPSBtaW5PZmZzZXQ7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgU0FSaW5kZXgudmFsdWUgPSAtMTtcclxuICAgICAgcmVzdWx0ID0gLTE7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PiByZXBsYWNlIHRva2VucyBpbiB1c2VyIHN0cmluZyBieSB2ZWN0b3IgdmFsdWVzIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJ1c2VyU3RyaW5nXCI+LSB1c2VyIGJ1ZmZlciBsaWtlIFwiVXNlciAlZCwgJWQgc3RyaW5nXCJcclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJ0b2tlblwiPi0gdG9rZW4gdXNlZCBpbiB1c2VyIHN0cmluZyAtIGkuZS4gXCIlZFwiXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwib2NjdXJyZW5jZVwiPi0gbnVtYmVyIG9mIHRva2VuIHdoZXJlIHJlcGxhY2Ugd2lsbCB0YWtlIHBhcnQgKDEgZm9yIGZpcnN0IG9jY3VycmVuY2UpXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwidmFsdWVcIj4tIHZhbHVlIHRvIGJlIGluc2VydGVkIGluc3RlZCBvZiB0b2tlblxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIHN0YXRpYyByZXBsYWNlU3RyaW5nVG9rZW5zKHVzZXJTdHJpbmc6IHN0cmluZywgdG9rZW46IHN0cmluZywgb2NjdXJyZW5jZTogbnVtYmVyLCB2YWw6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBsZXQgdG9rZW5MZW46IG51bWJlciA9IHRva2VuLmxlbmd0aDtcclxuICAgIGxldCBjdXJyUG9zaXRpb246IG51bWJlciA9IDA7XHJcbiAgICBsZXQgbmV3U3RyaW5nOiBzdHJpbmcgPSB1c2VyU3RyaW5nO1xyXG5cclxuICAgIGlmICh2YWwgIT09IG51bGwpIHtcclxuICAgICAgbGV0IG51bTI6IG51bWJlciA9IDA7XHJcbiAgICAgIHdoaWxlIChudW0yIDwgb2NjdXJyZW5jZSAmJiBjdXJyUG9zaXRpb24gIT09IC0xKSB7XHJcbiAgICAgICAgY3VyclBvc2l0aW9uID0gdXNlclN0cmluZy5pbmRleE9mKHRva2VuLCBjdXJyUG9zaXRpb24gKyAoKG51bTIgPT09IDApID8gMCA6IHRva2VuTGVuKSk7XHJcbiAgICAgICAgbnVtMiA9IG51bTIgKyAxO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoY3VyclBvc2l0aW9uICE9PSAtMSkge1xyXG4gICAgICAgIG5ld1N0cmluZyA9IHVzZXJTdHJpbmcuc3Vic3RyKDAsIGN1cnJQb3NpdGlvbikgKyB2YWwgKyB1c2VyU3RyaW5nLnN1YnN0cihjdXJyUG9zaXRpb24gKyB0b2tlbkxlbiwgdXNlclN0cmluZy5sZW5ndGggLSAoY3VyclBvc2l0aW9uICsgdG9rZW5MZW4pKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG5ld1N0cmluZztcclxuICB9XHJcblxyXG4gIHN0YXRpYyBtYWtlUHJpbnRhYmxlVG9rZW5zKHNvdXJjZTogc3RyaW5nLCB0eXBlOiBzdHJpbmcpOiBzdHJpbmc7XHJcbiAgc3RhdGljIG1ha2VQcmludGFibGVUb2tlbnMoc291cmNlOiBzdHJpbmcsIHR5cGU6IG51bWJlcik6IHN0cmluZztcclxuICBzdGF0aWMgbWFrZVByaW50YWJsZVRva2Vucyhzb3VyY2U6IExpc3Q8c3RyaW5nPiwgdHlwZTogbnVtYmVyKTogc3RyaW5nO1xyXG4gIHN0YXRpYyBtYWtlUHJpbnRhYmxlVG9rZW5zKHNvdXJjZTogYW55LCB0eXBlOiBhbnkpOiBzdHJpbmcgfCB2b2lke1xyXG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDIgJiYgKHNvdXJjZSA9PT0gbnVsbCB8fCBzb3VyY2UuY29uc3RydWN0b3IgPT09IFN0cmluZykgJiYgKHR5cGUgPT09IG51bGwgfHwgdHlwZS5jb25zdHJ1Y3RvciA9PT0gTnVtYmVyKSkge1xyXG4gICAgICByZXR1cm4gU3RyVXRpbC5tYWtlUHJpbnRhYmxlVG9rZW5zXzAoc291cmNlLCB0eXBlKTtcclxuICAgIH1cclxuICAgIFN0clV0aWwubWFrZVByaW50YWJsZVRva2Vuc18xKHNvdXJjZSwgdHlwZSk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgY29udmVydHMgc3BlY2lhbCBjaGFyYWN0ZXJzIGluIGEgdG9rZW4gdG8gYSBwcmludGFibGUgZm9ybWF0XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInNvdXJjZVwiPmEgdG9rZW4gPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInR5cGVcIj50eXBlIG9mIGNvbnZlcnNpb246IFNUUl8yX0hUTUwsIFNFUV8yX0hUTUwsIEhUTUxfMl9TRVEsIEhUTUxfMl9TVFIsIFNFUV8yX1NUUiA8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4gdG9rZW4gd2l0aCBjb252ZXJ0ZWQgc3BlY2lhbCBjaGFyYWN0ZXJzIDwvcmV0dXJucz5cclxuICBzdGF0aWMgbWFrZVByaW50YWJsZVRva2Vuc18wKHNvdXJjZTogc3RyaW5nLCB0eXBlOiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgbGV0IGVzY1N0cjogc3RyaW5nW10gPSBbXHJcbiAgICAgIFwiXFxcXFwiLCBcIi1cIiwgXCIsXCJcclxuICAgIF07XHJcbiAgICBsZXQgZXNjU2VxOiBzdHJpbmdbXSA9IFtcclxuICAgICAgXCJcXFxcXFxcXFwiLCBcIlxcXFwtXCIsIFwiXFxcXCxcIlxyXG4gICAgXTtcclxuICAgIGxldCBlc2NIdG06IHN0cmluZ1tdID0gW1xyXG4gICAgICBIVE1MX0JBQ0tTTEFTSCwgSFRNTF9IWVBIRU4sIEhUTUxfQ09NTUFcclxuICAgIF07XHJcbiAgICBsZXQgcmVzdWx0OiBzdHJpbmc7XHJcbiAgICBzd2l0Y2ggKHR5cGUpIHtcclxuICAgICAgY2FzZSBTVFJfMl9IVE1MOlxyXG4gICAgICAgIHJlc3VsdCA9IFN0clV0aWwuc2VhcmNoQW5kUmVwbGFjZShzb3VyY2UsIGVzY1N0ciwgZXNjSHRtKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBTRVFfMl9IVE1MOlxyXG4gICAgICAgIHJlc3VsdCA9IFN0clV0aWwuc2VhcmNoQW5kUmVwbGFjZShzb3VyY2UsIGVzY1NlcSwgZXNjSHRtKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBIVE1MXzJfU0VROlxyXG4gICAgICAgIHJlc3VsdCA9IFN0clV0aWwuc2VhcmNoQW5kUmVwbGFjZShzb3VyY2UsIGVzY0h0bSwgZXNjU2VxKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBIVE1MXzJfU1RSOlxyXG4gICAgICAgIHJlc3VsdCA9IFN0clV0aWwuc2VhcmNoQW5kUmVwbGFjZShzb3VyY2UsIGVzY0h0bSwgZXNjU3RyKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBTRVFfMl9TVFI6XHJcbiAgICAgICAgcmVzdWx0ID0gU3RyVXRpbC5zZWFyY2hBbmRSZXBsYWNlKHNvdXJjZSwgZXNjU2VxLCBlc2NTdHIpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHJlc3VsdCA9IHNvdXJjZTtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGNvbnZlcnRzIHNwZWNpYWwgY2hhcmFjdGVycyBpbiBhIHRva2VucyBjb2xsZWN0aW9uIHRvIGEgcHJpbnRhYmxlIGZvcm1hdFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJzb3VyY2VcIj52ZWN0b3Igb2Ygc3RyaW5ncyBiZWZvcmUgdG9rZW5haXplciA8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwidHlwZVwiPnR5cGUgb2YgY29udmVyc2lvbjogU1RSXzJfSFRNTCwgU0VRXzJfSFRNTCwgSFRNTF8yX1NFUSwgSFRNTF8yX1NUUiA8L3BhcmFtPlxyXG4gIHByaXZhdGUgc3RhdGljIG1ha2VQcmludGFibGVUb2tlbnNfMShzb3VyY2U6IExpc3Q8c3RyaW5nPiwgdHlwZTogbnVtYmVyKTogdm9pZCB7XHJcbiAgICBpZiAoc291cmNlICE9PSBudWxsKSB7XHJcbiAgICAgIGxldCBsZW5ndGg6IG51bWJlciA9IHNvdXJjZS5sZW5ndGg7XHJcbiAgICAgIGZvciAobGV0IGk6IG51bWJlciA9IDA7IGkgPCBsZW5ndGg7IGkgPSBpICsgMSkge1xyXG4gICAgICAgIGxldCBjdXJyRWxtOiBzdHJpbmcgPSBzb3VyY2UuZ2V0X0l0ZW0oaSk7XHJcbiAgICAgICAgc291cmNlLnNldF9JdGVtKGksIFN0clV0aWwubWFrZVByaW50YWJsZVRva2Vuc18wKGN1cnJFbG0sIHR5cGUpKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGNoYW5nZSBub24tcHJpbnRhYmxlIGNoYXJhY3RlcnMgbGlrZSBcIm5ldyBsaW5lXCIgYW5kIFwibGluZSBmZWVkXCIgdG8gdGhlaXJcclxuICAvLy8gICBwcmludGFibGUgcmVwcmVzZW50YXRpb25cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwic291cmNlXCI+aXMgdGhlIHN0cmluZyB3aXRoIG5vbi1wcmludGFibGUgY2hhcmFjdGVycyA8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4gdGhlIG5ldyBzdHJpbmcgd2hlcmUgYWxsIHRoZSBub24tcHJpbnRhYmxlIGNoYXJhY3RlcnMgYXJlIGNvbnZlcnRlZCA8L3JldHVybnM+XHJcbiAgc3RhdGljIG1ha2VQcmludGFibGUoc291cmNlOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgbGV0IGZyb206IHN0cmluZ1tdID0gW1xyXG4gICAgICBcIlxcblwiLCBcIlxcclwiLCBcIidcIiwgXCJcXFxcXCIsIFwiXFxcIlwiLCBcIlxcMFwiXHJcbiAgICBdO1xyXG4gICAgbGV0IHRvOiBzdHJpbmdbXSA9IFtcclxuICAgICAgXCJcXFxcblwiLCBcIlxcXFxyXCIsIFwiXFxcXCdcIiwgXCJcXFxcXFxcXFwiLCBcIlxcXFxcXFwiXCIsIFwiXFxcXDBcIlxyXG4gICAgXTtcclxuICAgIHJldHVybiBTdHJVdGlsLnNlYXJjaEFuZFJlcGxhY2Uoc291cmNlLCBmcm9tLCB0byk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgY2hhbmdlIG5vbi1wcmludGFibGUgY2hhcmFjdGVycyBsaWtlIFwibmV3IGxpbmVcIiBhbmQgXCJsaW5lIGZlZWRcIiB0byB0aGVpclxyXG4gIC8vLyAgIHByaW50YWJsZSByZXByZXNlbnRhdGlvbiAoc2ltcGxpZmllZCB2ZXJzaW9uIGZvciByYW5nZSBlcnJvciBtZXNzYWdlKVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJzb3VyY2VcIj5pcyB0aGUgc3RyaW5nIHdpdGggbm9uLXByaW50YWJsZSBjaGFyYWN0ZXJzIDwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiB0aGUgbmV3IHN0cmluZyB3aGVyZSBhbGwgdGhlIG5vbi1wcmludGFibGUgY2hhcmFjdGVycyBhcmUgY29udmVydGVkIDwvcmV0dXJucz5cclxuICBzdGF0aWMgbWFrZVByaW50YWJsZTIoc291cmNlOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgbGV0IGZyb206IHN0cmluZ1tdID0gW1xyXG4gICAgICBcIlxcblwiLCBcIlxcclwiLCBcIlxcMFwiXHJcbiAgICBdO1xyXG4gICAgbGV0IHRvOiBzdHJpbmdbXSA9IFtcclxuICAgICAgXCJcXFxcblwiLCBcIlxcXFxyXCIsIFwiXFxcXDBcIlxyXG4gICAgXTtcclxuICAgIHJldHVybiBTdHJVdGlsLnNlYXJjaEFuZFJlcGxhY2Uoc291cmNlLCBmcm9tLCB0byk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJzXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJsZW5cIj48L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgc3RhdGljIFpzdHJpbmdNYWtlKHM6IHN0cmluZywgbGVuOiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgbGVuID0gU3RyVXRpbC5tZW1fdHJpbShzLCBsZW4pO1xyXG4gICAgcmV0dXJuIHMuc3Vic3RyKDAsIGxlbik7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+KHB1YmxpYylcclxuICAvLy8gcmV0dXJucyBwbGFpbiB0ZXh0IGZyb20gcnRmIHRleHRcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInJ0ZlRleHRcIj5yZWZlciB0byB0aGUgc3VtbWFyeTwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPnJlZmVyIHRvIHRoZSBzdW1tYXJ5PC9yZXR1cm5zPlxyXG4gIHN0YXRpYyBHZXRQbGFpblRleHRmcm9tUnRmKHJ0ZlRleHQ6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBpZiAoUnRmLmlzUnRmKHJ0ZlRleHQpKSB7XHJcbiAgICAgIGxldCBydGY6IFJ0ZiA9IG5ldyBSdGYoKTtcclxuICAgICAgbGV0IG91dHB1dFR4dDogU3RyaW5nQnVpbGRlciA9IG5ldyBTdHJpbmdCdWlsZGVyKFwiXCIpO1xyXG4gICAgICBydGYudG9UeHQocnRmVGV4dCwgb3V0cHV0VHh0KTtcclxuICAgICAgcnRmVGV4dCA9IG91dHB1dFR4dC5Ub1N0cmluZygpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJ0ZlRleHQ7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgc3RyaW5nIGFycmF5cyBzdHIxICYgc3RyMiBhcmUgZXF1YWxcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInN0cjFcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInN0cjJcIj48L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgc3RhdGljIFN0cmluZ3NBcnJheXNFcXVhbChzdHIxOiBzdHJpbmdbXSwgc3RyMjogc3RyaW5nW10pOiBib29sZWFuIHtcclxuICAgIGxldCByZXN1bHQ6IGJvb2xlYW47XHJcbiAgICBpZiAoc3RyMSA9PT0gbnVsbCAmJiBzdHIyID09PSBudWxsKSB7XHJcbiAgICAgIHJlc3VsdCA9IHRydWU7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgaWYgKHN0cjEgPT09IG51bGwgfHwgc3RyMiA9PT0gbnVsbCkge1xyXG4gICAgICAgIHJlc3VsdCA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGlmIChzdHIxLmxlbmd0aCAhPT0gc3RyMi5sZW5ndGgpIHtcclxuICAgICAgICAgIHJlc3VsdCA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIGZvciAobGV0IGluZGV4OiBudW1iZXIgPSAwOyBpbmRleCA8IDxudW1iZXI+c3RyMS5sZW5ndGg7IGluZGV4ID0gaW5kZXggKyAxKSB7XHJcbiAgICAgICAgICAgIGlmICgoc3RyMVtpbmRleF0gIT09IHN0cjJbaW5kZXhdKSkge1xyXG4gICAgICAgICAgICAgIHJlc3VsdCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJlc3VsdCA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBUaGUgY29kZSBpcyBjb3BpZWQgZnJvbSB0c2tfb3Blbl9ibmRfd2lsZCBhbmQgU2VhcmNoQW5kUmVwbGFjZVdpbGRDaGFyc1xyXG4gIC8vLyBUaGUgcmVmYWN0b3JpbmcgaXMgbm90IHBlcmZvcm1lZCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcclxuICAvLy8gVGhlIGNvZGUgcmVwbGFjZXMgc3BlY2lhbCBjaGFyYWNodGVycyA6KiA/IHdpdGggcmVjaWV2ZWQgZmlsbGVyXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIHN0YXRpYyBTZWFyY2hBbmRSZXBsYWNlV2lsZENoYXJzKGJ1Zjogc3RyaW5nLCBsZW46IG51bWJlciwgZmlsbGVyOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgYnVmID0gTlN0cmluZy5QYWRSaWdodChidWYsIGxlbik7XHJcblxyXG4gICAgbGV0IGVzY0NoYXI6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIGxldCBzdG9wU2VhcmNoOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBsZXQgdG1wQnVmOiBTdHJpbmdCdWlsZGVyID0gbmV3IFN0cmluZ0J1aWxkZXIobGVuKTtcclxuICAgIGZvciAobGV0IGk6IG51bWJlciA9IDA7IGkgPCBsZW47IGkgPSBpICsgMSkge1xyXG4gICAgICBzd2l0Y2ggKGJ1ZltpXSkge1xyXG4gICAgICAgIGNhc2UgKCdcXFxcJyk6IHtcclxuICAgICAgICAgIGxldCBpc05leHRDaGFyV2lsZDogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gICAgICAgICAgLy9JZiBuZXh0IGNoYXIgaXMgbm90IHdpbGQgLCB0aGVuIGNvcHkgJ1xcJywgaWYgdGhpcyBpcyBmaXJzdCBjaGFyLlxyXG4gICAgICAgICAgaWYgKChpICsgMSA8IGxlbikgJiYgKGJ1ZltpICsgMV0gIT0gJyonICYmIGJ1ZltpICsgMV0gIT0gJ1xcXFwnKSlcclxuICAgICAgICAgICAgaXNOZXh0Q2hhcldpbGQgPSBmYWxzZTtcclxuICAgICAgICAgIGlmIChlc2NDaGFyIHx8ICFpc05leHRDaGFyV2lsZClcclxuICAgICAgICAgICAgdG1wQnVmLkFwcGVuZChidWZbaV0pO1xyXG4gICAgICAgICAgZXNjQ2hhciA9ICFlc2NDaGFyO1xyXG4gICAgICAgIH1cclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgKCcqJyk6XHJcbiAgICAgICAgICBpZiAoZXNjQ2hhcilcclxuICAgICAgICAgICAgdG1wQnVmLkFwcGVuZChidWZbaV0pO1xyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRtcEJ1Zi5BcHBlbmQoZmlsbGVyLCBsZW4gLSB0bXBCdWYuTGVuZ3RoKTtcclxuICAgICAgICAgICAgc3RvcFNlYXJjaCA9IHRydWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlc2NDaGFyID0gZmFsc2U7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICc/JzpcclxuICAgICAgICAgIHRtcEJ1Zi5BcHBlbmQoZmlsbGVyKTtcclxuICAgICAgICAgIGVzY0NoYXIgPSBmYWxzZTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICB0bXBCdWYuQXBwZW5kKGJ1ZltpXSk7XHJcbiAgICAgICAgICBlc2NDaGFyID0gZmFsc2U7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGxldCB0ZXh0OiBzdHJpbmcgPSB0bXBCdWYuVG9TdHJpbmcoKTtcclxuICAgIHJldHVybiBOU3RyaW5nLlRyaW1FbmQoTlN0cmluZy5UcmltRW5kKHRleHQsIFsnXFwwJ10pKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gUmVtb3ZlIHRoZSB0YXNrIHBhdGggZGVsaW1pdGVyIGZyb20gdGhlIGVycm9yIHN0cmluZy5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwic291cmNlXCI+c3RyaW5nIHdpdGggZGVsaW1pdGVyIDwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiBzdHJpbmcgZm9yIGNvbnNvbGUgZXJyb3IgPC9yZXR1cm5zPlxyXG4gIHN0YXRpYyBnZXRDb25zb2xlRXJvclN0cmluZyhzb3VyY2U6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBsZXQgY29uc29sZUVyb3JTdHJpbmc6IHN0cmluZyA9IFwiXCI7XHJcblxyXG4gICAgaWYgKCFpc051bGxPclVuZGVmaW5lZChzb3VyY2UpKVxyXG4gICAgICBjb25zb2xlRXJvclN0cmluZyA9IHRoaXMuc2VhcmNoQW5kUmVwbGFjZShzb3VyY2UsIFRBU0tfUEFUSF9ERUxJTUlURVIsIFwiXCIpO1xyXG5cclxuICAgIHJldHVybiBjb25zb2xlRXJvclN0cmluZztcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gUmVtb3ZlIHRoZSB0YXNrIHBhdGggZnJvbSB0aGUgZXJyb3Igc3RyaW5nLlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJzb3VyY2VcIj5zdHJpbmcgd2l0aCBkZWxpbWl0ZXIgPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+IHN0cmluZyBmb3IgY29uc29sZSBlcnJvciA8L3JldHVybnM+XHJcbiAgc3RhdGljIGdldE1zZ0JveEVyb3JTdHJpbmcoc291cmNlOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgbGV0IHRva2Vuczogc3RyaW5nIFtdO1xyXG4gICAgbGV0IG1zZ0JveEVyb3JTdHJpbmc6IFN0cmluZ0J1aWxkZXIgPSBuZXcgU3RyaW5nQnVpbGRlcihcIlwiKTtcclxuXHJcbiAgICBpZiAoIWlzTnVsbE9yVW5kZWZpbmVkKHNvdXJjZSkpe1xyXG4gICAgICB0b2tlbnMgPSB0aGlzLnRva2VuaXplKHNvdXJjZSwgVEFTS19QQVRIX0RFTElNSVRFUik7XHJcblxyXG4gICAgICBmb3IgKGxldCBpOm51bWJlciA9IDA7IGkgPCB0b2tlbnMubGVuZ3RoOyBpKyspXHJcbiAgICAgIHtcclxuICAgICAgICBtc2dCb3hFcm9yU3RyaW5nLkFwcGVuZCh0b2tlbnNbaV0pO1xyXG4gICAgICAgIGkrKztcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuXHJcblxyXG4gICAgcmV0dXJuIG1zZ0JveEVyb3JTdHJpbmcudG9TdHJpbmcoKTtcclxuICB9XHJcbn1cclxuIl19
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
import { Logger } from "./Logger";
|
|
2
|
-
export class SyncExecutionHelper {
|
|
3
|
-
constructor() {
|
|
4
|
-
this.resolver = null;
|
|
5
|
-
}
|
|
6
|
-
static get Instance() {
|
|
7
|
-
if (SyncExecutionHelper._instance === null)
|
|
8
|
-
SyncExecutionHelper._instance = new SyncExecutionHelper();
|
|
9
|
-
return SyncExecutionHelper._instance;
|
|
10
|
-
}
|
|
11
|
-
Wait() {
|
|
12
|
-
Logger.Instance.WriteDevToLog("SyncExecutionHelper.Wait()");
|
|
13
|
-
return new Promise((resolve, reject) => {
|
|
14
|
-
this.resolver = resolve;
|
|
15
|
-
}).then();
|
|
16
|
-
}
|
|
17
|
-
Pulse() {
|
|
18
|
-
let resolver = this.resolver;
|
|
19
|
-
if (resolver != null) {
|
|
20
|
-
Logger.Instance.WriteDevToLog("SyncExecutionHelper.Pulse()");
|
|
21
|
-
resolver();
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
SyncExecutionHelper._instance = null;
|
|
26
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3luY0V4ZWN1dGlvbkhlbHBlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3V0aWxzL3NyYy9TeW5jRXhlY3V0aW9uSGVscGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFPaEMsTUFBTSxPQUFPLG1CQUFtQjtJQUFoQztRQWVVLGFBQVEsR0FBUSxJQUFJLENBQUM7SUFzQi9CLENBQUM7SUE5QkMsTUFBTSxLQUFLLFFBQVE7UUFDakIsSUFBSSxtQkFBbUIsQ0FBQyxTQUFTLEtBQUssSUFBSTtZQUN4QyxtQkFBbUIsQ0FBQyxTQUFTLEdBQUcsSUFBSSxtQkFBbUIsRUFBRSxDQUFDO1FBRTVELE9BQU8sbUJBQW1CLENBQUMsU0FBUyxDQUFDO0lBQ3ZDLENBQUM7SUFRTSxJQUFJO1FBQ1QsTUFBTSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsNEJBQTRCLENBQUMsQ0FBQztRQUM1RCxPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1lBQ3JDLElBQUksQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDO1FBQzFCLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUtNLEtBQUs7UUFDVixJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQzdCLElBQUksUUFBUSxJQUFJLElBQUksRUFBRTtZQUNwQixNQUFNLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO1lBQzdELFFBQVEsRUFBRSxDQUFDO1NBQ1o7SUFDSCxDQUFDOztBQWxDYyw2QkFBUyxHQUFHLElBQUksQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7TG9nZ2VyfSBmcm9tIFwiLi9Mb2dnZXJcIjtcclxuXHJcbi8vLyA8c3VtbWFyeT5cclxuLy8vIEhlbHBlciBjbGFzcyBmb3Igc3luY2hyb25pemVkIGV4ZWN1dGlvbi5cclxuLy8vIEl0IHdvcmtzIGJ5IGNyZWF0aW5nIGEgcHJvbWlzZSBhbmQgdGhlbiB3YWl0aW5nIGZvciB0aGUgcHJvbWlzZSB0byBiZSBjb21wbGV0ZWRcclxuLy8vIDwvc3VtbWFyeT5cclxuLy8gQGR5bmFtaWNcclxuZXhwb3J0IGNsYXNzIFN5bmNFeGVjdXRpb25IZWxwZXIge1xyXG5cclxuICBwcml2YXRlIHN0YXRpYyBfaW5zdGFuY2UgPSBudWxsO1xyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIGdldCBpbnN0YW5jZSBvZiBTeW5jRXhlY3V0aW9uSGVscGVyXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBzdGF0aWMgZ2V0IEluc3RhbmNlKCk6IFN5bmNFeGVjdXRpb25IZWxwZXIge1xyXG4gICAgaWYgKFN5bmNFeGVjdXRpb25IZWxwZXIuX2luc3RhbmNlID09PSBudWxsKVxyXG4gICAgICBTeW5jRXhlY3V0aW9uSGVscGVyLl9pbnN0YW5jZSA9IG5ldyBTeW5jRXhlY3V0aW9uSGVscGVyKCk7XHJcblxyXG4gICAgcmV0dXJuIFN5bmNFeGVjdXRpb25IZWxwZXIuX2luc3RhbmNlO1xyXG4gIH1cclxuXHJcbiAgLy8gcmVzb2x2ZXIgaXMgY2FsbGVyIHdoZW4gcHJvbWlzZSBpcyBmdWxsZmlsbGVkXHJcbiAgcHJpdmF0ZSByZXNvbHZlcjogYW55ID0gbnVsbDtcclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBUbyB3YWl0LCBjcmVhdGUgYSBwcm9taXNlIGFuZCBhZGQgd2FpdCBmb3IgaXQgdG8gY29tcGxldGVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHB1YmxpYyBXYWl0KCk6IGFueSB7XHJcbiAgICBMb2dnZXIuSW5zdGFuY2UuV3JpdGVEZXZUb0xvZyhcIlN5bmNFeGVjdXRpb25IZWxwZXIuV2FpdCgpXCIpO1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgdGhpcy5yZXNvbHZlciA9IHJlc29sdmU7XHJcbiAgICB9KS50aGVuKCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIFRvIHJlc3VtZSBjYWxsIHRoZSByZXNvbHZlclxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgcHVibGljIFB1bHNlKCkge1xyXG4gICAgbGV0IHJlc29sdmVyID0gdGhpcy5yZXNvbHZlcjtcclxuICAgIGlmIChyZXNvbHZlciAhPSBudWxsKSB7XHJcbiAgICAgIExvZ2dlci5JbnN0YW5jZS5Xcml0ZURldlRvTG9nKFwiU3luY0V4ZWN1dGlvbkhlbHBlci5QdWxzZSgpXCIpO1xyXG4gICAgICByZXNvbHZlcigpO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iXX0=
|