occam-languages 3.0.5 → 3.0.8
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/lib/context/file.js +10 -15
- package/lib/context/release.js +10 -14
- package/lib/element.js +3 -3
- package/lib/pass/continuation.js +23 -28
- package/lib/pass/continuationZip.js +31 -38
- package/lib/utilities/breakPoint.js +4 -4
- package/lib/utilities/continuation.js +67 -115
- package/lib/utilities/verification.js +69 -67
- package/lib/utilities/verify.js +5 -5
- package/package.json +2 -3
- package/src/context/file.js +9 -17
- package/src/context/release.js +9 -15
- package/src/element.js +2 -2
- package/src/pass/continuation.js +31 -31
- package/src/pass/continuationZip.js +46 -53
- package/src/utilities/breakPoint.js +4 -3
- package/src/utilities/continuation.js +85 -162
- package/src/utilities/verification.js +84 -77
- package/src/utilities/verify.js +4 -4
- package/lib/utilities/async.js +0 -66
- package/src/utilities/async.js +0 -61
|
@@ -67,60 +67,43 @@ _export(exports, {
|
|
|
67
67
|
const _necessary = require("necessary");
|
|
68
68
|
const { filter: arrayFilter } = _necessary.arrayUtilities;
|
|
69
69
|
function one(array, callback, ...initialArguments) {
|
|
70
|
-
const
|
|
70
|
+
const forward = initialArguments.pop(), back = initialArguments.pop(), length = array.length, index = 0;
|
|
71
71
|
function next(index, ...nextArguments) {
|
|
72
72
|
if (index === length) {
|
|
73
|
-
|
|
74
|
-
return continuation(success, ...finalArguemnts);
|
|
73
|
+
return count === 1 ? forward(...nextArguments) : back();
|
|
75
74
|
}
|
|
76
75
|
const element = array[index];
|
|
77
|
-
return callback(element, ...initialArguments, (
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
const success = false, finalArguments = initialArguments; ///
|
|
82
|
-
return continuation(success, ...finalArguments);
|
|
83
|
-
}
|
|
84
|
-
return next(index + 1, ...callbackArguments);
|
|
76
|
+
return callback(element, ...initialArguments, ()=>next(index + 1, ...nextArguments), (...callbackArguments)=>{
|
|
77
|
+
count++;
|
|
78
|
+
if (count === 2) {
|
|
79
|
+
return back();
|
|
85
80
|
}
|
|
86
|
-
return next(index + 1, ...
|
|
81
|
+
return next(index + 1, ...callbackArguments);
|
|
87
82
|
});
|
|
88
83
|
}
|
|
89
84
|
let count = 0;
|
|
90
85
|
return next(index, ...initialArguments);
|
|
91
86
|
}
|
|
92
87
|
function some(array, callback, ...initialArguments) {
|
|
93
|
-
const
|
|
88
|
+
const forward = initialArguments.pop(), back = initialArguments.pop(), length = array.length;
|
|
94
89
|
function next(index) {
|
|
95
90
|
if (index === length) {
|
|
96
|
-
|
|
97
|
-
return continuation(success, ...finalArguments);
|
|
91
|
+
return back();
|
|
98
92
|
}
|
|
99
93
|
const element = array[index];
|
|
100
|
-
return callback(element, ...initialArguments, (
|
|
101
|
-
if (success) {
|
|
102
|
-
const finalArguments = callbackArguments; ///
|
|
103
|
-
return continuation(success, ...finalArguments);
|
|
104
|
-
}
|
|
105
|
-
return next(index + 1);
|
|
106
|
-
});
|
|
94
|
+
return callback(element, ...initialArguments, ()=>next(index + 1), forward);
|
|
107
95
|
}
|
|
108
96
|
const index = 0;
|
|
109
97
|
return next(index);
|
|
110
98
|
}
|
|
111
99
|
function each(array, callback, ...initialArguments) {
|
|
112
|
-
const
|
|
100
|
+
const forward = initialArguments.pop(), back = initialArguments.pop(), length = array.length, index = 0;
|
|
113
101
|
function next(index, ...nextArguments) {
|
|
114
102
|
if (index === length) {
|
|
115
|
-
|
|
116
|
-
return continuation(success, ...finalArguments);
|
|
103
|
+
return count !== 0 ? forward(...nextArguments) : back();
|
|
117
104
|
}
|
|
118
105
|
const element = array[index];
|
|
119
|
-
return callback(element, ...nextArguments,
|
|
120
|
-
if (!success) {
|
|
121
|
-
const finalArguments = initialArguments; ///
|
|
122
|
-
return continuation(success, ...finalArguments);
|
|
123
|
-
}
|
|
106
|
+
return callback(element, ...nextArguments, back, (...callbackArguments)=>{
|
|
124
107
|
count++;
|
|
125
108
|
return next(index + 1, ...callbackArguments);
|
|
126
109
|
});
|
|
@@ -129,124 +112,104 @@ function each(array, callback, ...initialArguments) {
|
|
|
129
112
|
return next(index, ...initialArguments);
|
|
130
113
|
}
|
|
131
114
|
function every(array, callback, ...initialArguments) {
|
|
132
|
-
const
|
|
115
|
+
const forward = initialArguments.pop(), back = initialArguments.pop(), length = array.length, index = 0;
|
|
133
116
|
function next(index, ...nextArguments) {
|
|
134
117
|
if (index === length) {
|
|
135
|
-
|
|
136
|
-
return continuation(success, ...finalArguments);
|
|
118
|
+
return forward(...nextArguments);
|
|
137
119
|
}
|
|
138
120
|
const element = array[index];
|
|
139
|
-
return callback(element, ...nextArguments,
|
|
140
|
-
if (!success) {
|
|
141
|
-
const finalArguments = initialArguments; ///
|
|
142
|
-
return continuation(success, ...finalArguments);
|
|
143
|
-
}
|
|
121
|
+
return callback(element, ...nextArguments, back, (...callbackArguments)=>{
|
|
144
122
|
return next(index + 1, ...callbackArguments);
|
|
145
123
|
});
|
|
146
124
|
}
|
|
147
125
|
return next(index, ...initialArguments);
|
|
148
126
|
}
|
|
149
127
|
function reduce(array, initialValue, callback, ...initialArguments) {
|
|
150
|
-
const
|
|
128
|
+
const forward = initialArguments.pop(), back = initialArguments.pop(), length = array.length, index = 0;
|
|
151
129
|
function next(index, value, ...nextArguments) {
|
|
152
130
|
if (index === length) {
|
|
153
|
-
|
|
154
|
-
return continuation(value, ...finalArguments);
|
|
131
|
+
return forward(value, ...nextArguments);
|
|
155
132
|
}
|
|
156
133
|
const element = array[index];
|
|
157
|
-
return callback(element, value, ...nextArguments, (value, ...callbackArguments)=>{
|
|
134
|
+
return callback(element, value, ...nextArguments, back, (value, ...callbackArguments)=>{
|
|
158
135
|
return next(index + 1, value, ...callbackArguments);
|
|
159
136
|
});
|
|
160
137
|
}
|
|
161
138
|
return next(index, initialValue, ...initialArguments);
|
|
162
139
|
}
|
|
163
140
|
function forEach(array, callback, ...initialArguments) {
|
|
164
|
-
const
|
|
141
|
+
const forward = initialArguments.pop(), back = initialArguments.pop(), length = array.length, index = 0;
|
|
165
142
|
function next(index, ...nextArguments) {
|
|
166
143
|
if (index === length) {
|
|
167
|
-
|
|
168
|
-
return continuation(...finalArguments);
|
|
144
|
+
return forward(...nextArguments);
|
|
169
145
|
}
|
|
170
146
|
const element = array[index];
|
|
171
|
-
return callback(element, ...nextArguments, (...callbackArguments)=>{
|
|
147
|
+
return callback(element, ...nextArguments, back, (...callbackArguments)=>{
|
|
172
148
|
return next(index + 1, ...callbackArguments);
|
|
173
149
|
});
|
|
174
150
|
}
|
|
175
151
|
return next(index, ...initialArguments);
|
|
176
152
|
}
|
|
177
153
|
function forwardsEvery(array, callback, ...initialArguments) {
|
|
178
|
-
const
|
|
154
|
+
const forward = initialArguments.pop(), back = initialArguments.pop(), length = array.length, index = 0;
|
|
179
155
|
function next(index, ...nextArguments) {
|
|
180
156
|
if (index === length) {
|
|
181
|
-
|
|
182
|
-
return continuation(success, ...finalArguments);
|
|
157
|
+
return forward(...nextArguments);
|
|
183
158
|
}
|
|
184
159
|
const element = array[index];
|
|
185
|
-
return callback(element, ...nextArguments,
|
|
186
|
-
if (!success) {
|
|
187
|
-
const finalArguments = initialArguments; ///
|
|
188
|
-
return continuation(success, ...finalArguments);
|
|
189
|
-
}
|
|
160
|
+
return callback(element, ...nextArguments, back, (...callbackArguments)=>{
|
|
190
161
|
return next(index + 1, ...callbackArguments);
|
|
191
162
|
});
|
|
192
163
|
}
|
|
193
164
|
return next(index, ...initialArguments);
|
|
194
165
|
}
|
|
195
166
|
function backwardsEvery(array, callback, ...initialArguments) {
|
|
196
|
-
const
|
|
167
|
+
const forward = initialArguments.pop(), back = initialArguments.pop(), length = array.length, index = length - 1;
|
|
197
168
|
function next(index, ...nextArguments) {
|
|
198
169
|
if (index === -1) {
|
|
199
|
-
|
|
200
|
-
return continuation(success, ...finalArguments);
|
|
170
|
+
return forward(...nextArguments);
|
|
201
171
|
}
|
|
202
172
|
const element = array[index];
|
|
203
|
-
return callback(element, ...nextArguments,
|
|
204
|
-
if (!success) {
|
|
205
|
-
const finalArguments = initialArguments; ///
|
|
206
|
-
return continuation(success, ...finalArguments);
|
|
207
|
-
}
|
|
173
|
+
return callback(element, ...nextArguments, back, (...callbackArguments)=>{
|
|
208
174
|
return next(index - 1, ...callbackArguments);
|
|
209
175
|
});
|
|
210
176
|
}
|
|
211
177
|
return next(index, ...initialArguments);
|
|
212
178
|
}
|
|
213
179
|
function forwardsForEach(array, callback, ...initialArguments) {
|
|
214
|
-
const
|
|
180
|
+
const forward = initialArguments.pop(), back = initialArguments.pop(), length = array.length, index = 0;
|
|
215
181
|
function next(index, ...nextArguments) {
|
|
216
182
|
if (index === length) {
|
|
217
|
-
|
|
218
|
-
return continuation(...finalArguments);
|
|
183
|
+
return forward(...nextArguments);
|
|
219
184
|
}
|
|
220
185
|
const element = array[index];
|
|
221
|
-
return callback(element, ...nextArguments, (...callbackArguments)=>{
|
|
186
|
+
return callback(element, ...nextArguments, back, (...callbackArguments)=>{
|
|
222
187
|
return next(index + 1, ...callbackArguments);
|
|
223
188
|
});
|
|
224
189
|
}
|
|
225
190
|
return next(index, ...initialArguments);
|
|
226
191
|
}
|
|
227
192
|
function backwardsForEach(array, callback, ...initialArguments) {
|
|
228
|
-
const
|
|
193
|
+
const forward = initialArguments.pop(), back = initialArguments.pop(), length = array.length, index = length - 1;
|
|
229
194
|
function next(index, ...nextArguments) {
|
|
230
195
|
if (index === -1) {
|
|
231
|
-
|
|
232
|
-
return continuation(...finalArguments);
|
|
196
|
+
return forward(...nextArguments);
|
|
233
197
|
}
|
|
234
198
|
const element = array[index];
|
|
235
|
-
return callback(element, ...nextArguments, (...callbackArguments)=>{
|
|
199
|
+
return callback(element, ...nextArguments, back, (...callbackArguments)=>{
|
|
236
200
|
return next(index - 1, ...callbackArguments);
|
|
237
201
|
});
|
|
238
202
|
}
|
|
239
203
|
return next(index, ...initialArguments);
|
|
240
204
|
}
|
|
241
205
|
function filter(array, callback, ...initialArguments) {
|
|
242
|
-
const
|
|
206
|
+
const forward = initialArguments.pop(), back = initialArguments.pop(), length = array.length, deletedElements = [], index = length - 1;
|
|
243
207
|
function next(index, ...nextArguments) {
|
|
244
208
|
if (index === -1) {
|
|
245
|
-
|
|
246
|
-
return continuation(deletedElements, ...finalArguments);
|
|
209
|
+
return forward(deletedElements, ...nextArguments);
|
|
247
210
|
}
|
|
248
211
|
const element = array[index];
|
|
249
|
-
return callback(element, ...nextArguments, (passed, ...callbackArguments)=>{
|
|
212
|
+
return callback(element, ...nextArguments, back, (passed, ...callbackArguments)=>{
|
|
250
213
|
if (!passed) {
|
|
251
214
|
const startIndex = index, deleteCount = 1, deletedElement = element; ///
|
|
252
215
|
array.splice(startIndex, deleteCount);
|
|
@@ -258,61 +221,55 @@ function filter(array, callback, ...initialArguments) {
|
|
|
258
221
|
return next(index, ...initialArguments);
|
|
259
222
|
}
|
|
260
223
|
function prune(array, callback, ...initialArguments) {
|
|
261
|
-
const
|
|
262
|
-
function next(index) {
|
|
224
|
+
const forward = initialArguments.pop(), back = initialArguments.pop(), length = array.length, index = 0;
|
|
225
|
+
function next(index, ...nextArguments) {
|
|
263
226
|
if (index === length) {
|
|
264
|
-
const deletedElement = undefined
|
|
265
|
-
return
|
|
227
|
+
const deletedElement = undefined;
|
|
228
|
+
return forward(deletedElement, ...nextArguments);
|
|
266
229
|
}
|
|
267
230
|
const element = array[index];
|
|
268
|
-
return callback(element, ...
|
|
231
|
+
return callback(element, ...nextArguments, back, (passed, ...callbackArguments)=>{
|
|
269
232
|
if (!passed) {
|
|
270
|
-
const startIndex = index, deleteCount = 1, deletedElement = element
|
|
233
|
+
const startIndex = index, deleteCount = 1, deletedElement = element; ///
|
|
271
234
|
array.splice(startIndex, deleteCount);
|
|
272
|
-
return
|
|
235
|
+
return forward(deletedElement, ...callbackArguments);
|
|
273
236
|
}
|
|
274
|
-
return next(index + 1);
|
|
237
|
+
return next(index + 1, ...callbackArguments);
|
|
275
238
|
});
|
|
276
239
|
}
|
|
277
|
-
return next(index);
|
|
240
|
+
return next(index, ...initialArguments);
|
|
278
241
|
}
|
|
279
242
|
function extract(array, callback, ...initialArguments) {
|
|
280
|
-
const
|
|
281
|
-
function next(index) {
|
|
243
|
+
const forward = initialArguments.pop(), back = initialArguments.pop(), length = array.length, index = 0;
|
|
244
|
+
function next(index, ...nextArguments) {
|
|
282
245
|
if (index === length) {
|
|
283
|
-
const deletedElement = undefined
|
|
284
|
-
return
|
|
246
|
+
const deletedElement = undefined;
|
|
247
|
+
return forward(deletedElement, ...nextArguments);
|
|
285
248
|
}
|
|
286
249
|
const element = array[index];
|
|
287
|
-
return callback(element, ...
|
|
250
|
+
return callback(element, ...nextArguments, back, (passed, ...callbackArguments)=>{
|
|
288
251
|
if (passed) {
|
|
289
|
-
const startIndex = index, deleteCount = 1, deletedElement = element
|
|
252
|
+
const startIndex = index, deleteCount = 1, deletedElement = element; ///
|
|
290
253
|
array.splice(startIndex, deleteCount);
|
|
291
|
-
return
|
|
254
|
+
return forward(deletedElement, ...callbackArguments);
|
|
292
255
|
}
|
|
293
|
-
return next(index + 1);
|
|
256
|
+
return next(index + 1, ...callbackArguments);
|
|
294
257
|
});
|
|
295
258
|
}
|
|
296
|
-
return next(index);
|
|
259
|
+
return next(index, ...initialArguments);
|
|
297
260
|
}
|
|
298
261
|
function match(arrayA, arrayB, callback, ...initialArguments) {
|
|
299
|
-
const
|
|
262
|
+
const forward = initialArguments.pop(), back = initialArguments.pop(), arrayALength = arrayA.length, arrayBLength = arrayB.length;
|
|
300
263
|
if (arrayALength !== arrayBLength) {
|
|
301
|
-
|
|
302
|
-
return continuation(success, ...finalArguments);
|
|
264
|
+
return back();
|
|
303
265
|
}
|
|
304
266
|
const length = arrayALength, index = 0;
|
|
305
267
|
function next(index, ...nextArguments) {
|
|
306
268
|
if (index === length) {
|
|
307
|
-
|
|
308
|
-
return continuation(success, ...finalArguments);
|
|
269
|
+
return forward(...nextArguments);
|
|
309
270
|
}
|
|
310
271
|
const elementA = arrayA[index], elementB = arrayB[index];
|
|
311
|
-
return callback(elementA, elementB, ...nextArguments,
|
|
312
|
-
if (!success) {
|
|
313
|
-
const finalArguments = initialArguments; ///
|
|
314
|
-
return continuation(success, ...finalArguments);
|
|
315
|
-
}
|
|
272
|
+
return callback(elementA, elementB, ...nextArguments, back, (...callbackArguments)=>{
|
|
316
273
|
return next(index + 1, ...callbackArguments);
|
|
317
274
|
});
|
|
318
275
|
}
|
|
@@ -322,18 +279,16 @@ function resolve(arrayA, arrayB, callback, ...initialArguments) {
|
|
|
322
279
|
arrayA = [
|
|
323
280
|
...arrayA
|
|
324
281
|
];
|
|
325
|
-
const
|
|
282
|
+
const forward = initialArguments.pop(), back = initialArguments.pop();
|
|
326
283
|
function nextPass(...nextArguments) {
|
|
327
284
|
const length = arrayA.length; ///
|
|
328
285
|
if (length === 0) {
|
|
329
|
-
|
|
330
|
-
return continuation(success, ...finalArguments);
|
|
286
|
+
return forward(...nextArguments);
|
|
331
287
|
}
|
|
332
288
|
function nextElement(index, success, ...currentArguments) {
|
|
333
289
|
if (index === length) {
|
|
334
290
|
if (!success) {
|
|
335
|
-
|
|
336
|
-
return continuation(success, ...finalArguments);
|
|
291
|
+
return back();
|
|
337
292
|
}
|
|
338
293
|
arrayFilter(arrayA, (elementA)=>{
|
|
339
294
|
const arrayBIncludesElementA = arrayB.includes(elementA);
|
|
@@ -344,13 +299,10 @@ function resolve(arrayA, arrayB, callback, ...initialArguments) {
|
|
|
344
299
|
return nextPass(...currentArguments);
|
|
345
300
|
}
|
|
346
301
|
const elementA = arrayA[index];
|
|
347
|
-
return callback(elementA, ...currentArguments, (
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
return nextElement(index + 1, success, ...callbackArguments);
|
|
352
|
-
}
|
|
353
|
-
return nextElement(index + 1, success, ...currentArguments);
|
|
302
|
+
return callback(elementA, ...currentArguments, ()=>nextElement(index + 1, success, ...currentArguments), (...callbackArguments)=>{
|
|
303
|
+
const elementB = elementA; ///
|
|
304
|
+
arrayB.push(elementB);
|
|
305
|
+
return nextElement(index + 1, true, ...callbackArguments);
|
|
354
306
|
});
|
|
355
307
|
}
|
|
356
308
|
const index = 0, success = false;
|
|
@@ -388,4 +340,4 @@ const _default = {
|
|
|
388
340
|
exists
|
|
389
341
|
};
|
|
390
342
|
|
|
391
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvY29udGludWF0aW9uLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBhcnJheVV0aWxpdGllcyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcblxuY29uc3QgeyBmaWx0ZXI6IGFycmF5RmlsdGVyIH0gPSBhcnJheVV0aWxpdGllcztcblxuZXhwb3J0IGZ1bmN0aW9uIG9uZShhcnJheSwgY2FsbGJhY2ssIC4uLmluaXRpYWxBcmd1bWVudHMpIHtcbiAgY29uc3QgY29udGludWF0aW9uID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKSxcbiAgICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoLFxuICAgICAgICBpbmRleCA9IDA7XG5cbiAgZnVuY3Rpb24gbmV4dChpbmRleCwgLi4ubmV4dEFyZ3VtZW50cykge1xuICAgIGlmIChpbmRleCA9PT0gbGVuZ3RoKSB7XG4gICAgICBjb25zdCBzdWNjZXNzID0gKGNvdW50ID09PSAxKSxcbiAgICAgICAgZmluYWxBcmd1ZW1udHMgPSBzdWNjZXNzID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0QXJndW1lbnRzIDogLy8vXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbml0aWFsQXJndW1lbnRzOyAvLy9cblxuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihzdWNjZXNzLCAuLi5maW5hbEFyZ3VlbW50cyk7XG4gICAgfVxuXG4gICAgY29uc3QgZWxlbWVudCA9IGFycmF5W2luZGV4XTtcblxuICAgIHJldHVybiBjYWxsYmFjayhlbGVtZW50LCAuLi5pbml0aWFsQXJndW1lbnRzLCAoc3VjY2VzcywgLi4uY2FsbGJhY2tBcmd1bWVudHMpID0+IHtcbiAgICAgIGlmIChzdWNjZXNzKSB7XG4gICAgICAgIGNvdW50Kys7XG5cbiAgICAgICAgaWYgKGNvdW50ID09PSAyKSB7XG4gICAgICAgICAgY29uc3Qgc3VjY2VzcyA9IGZhbHNlLFxuICAgICAgICAgICAgICAgIGZpbmFsQXJndW1lbnRzID0gaW5pdGlhbEFyZ3VtZW50czsgIC8vL1xuXG4gICAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihzdWNjZXNzLCAuLi5maW5hbEFyZ3VtZW50cyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV4dChpbmRleCArIDEsIC4uLmNhbGxiYWNrQXJndW1lbnRzKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG5leHQoaW5kZXggKyAxLCAuLi5uZXh0QXJndW1lbnRzKTtcbiAgICB9KTtcbiAgfVxuXG4gIGxldCBjb3VudCA9IDA7XG5cbiAgcmV0dXJuIG5leHQoaW5kZXgsIC4uLmluaXRpYWxBcmd1bWVudHMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc29tZShhcnJheSwgY2FsbGJhY2ssIC4uLmluaXRpYWxBcmd1bWVudHMpIHtcbiAgY29uc3QgY29udGludWF0aW9uID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKSxcbiAgICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXG4gIGZ1bmN0aW9uIG5leHQoaW5kZXgpIHtcbiAgICBpZiAoaW5kZXggPT09IGxlbmd0aCkge1xuICAgICAgY29uc3Qgc3VjY2VzcyA9IGZhbHNlLFxuICAgICAgICAgICAgZmluYWxBcmd1bWVudHMgPSBpbml0aWFsQXJndW1lbnRzOyAvLy9cblxuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihzdWNjZXNzLCAuLi5maW5hbEFyZ3VtZW50cyk7XG4gICAgfVxuXG4gICAgY29uc3QgZWxlbWVudCA9IGFycmF5W2luZGV4XTtcblxuICAgIHJldHVybiBjYWxsYmFjayhlbGVtZW50LCAuLi5pbml0aWFsQXJndW1lbnRzLCAoc3VjY2VzcywgLi4uY2FsbGJhY2tBcmd1bWVudHMpID0+IHtcbiAgICAgIGlmIChzdWNjZXNzKSB7XG4gICAgICAgIGNvbnN0IGZpbmFsQXJndW1lbnRzID0gY2FsbGJhY2tBcmd1bWVudHM7IC8vL1xuXG4gICAgICAgIHJldHVybiBjb250aW51YXRpb24oc3VjY2VzcywgLi4uZmluYWxBcmd1bWVudHMpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbmV4dChpbmRleCArIDEpO1xuICAgIH0pO1xuICB9XG5cbiAgY29uc3QgaW5kZXggPSAwO1xuXG4gIHJldHVybiBuZXh0KGluZGV4KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVhY2goYXJyYXksIGNhbGxiYWNrLCAuLi5pbml0aWFsQXJndW1lbnRzKSB7XG4gIGNvbnN0IGNvbnRpbnVhdGlvbiA9IGluaXRpYWxBcmd1bWVudHMucG9wKCksXG4gICAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aCxcbiAgICAgICAgaW5kZXggPSAwO1xuXG4gIGZ1bmN0aW9uIG5leHQoaW5kZXgsIC4uLm5leHRBcmd1bWVudHMpIHtcbiAgICBpZiAoaW5kZXggPT09IGxlbmd0aCkge1xuICAgICAgY29uc3Qgc3VjY2VzcyA9IChjb3VudCAhPT0gMCksXG4gICAgICAgIGZpbmFsQXJndW1lbnRzID0gc3VjY2VzcyA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dEFyZ3VtZW50cyA6IC8vL1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5pdGlhbEFyZ3VtZW50czsgLy8vXG5cbiAgICAgIHJldHVybiBjb250aW51YXRpb24oc3VjY2VzcywgLi4uZmluYWxBcmd1bWVudHMpO1xuICAgIH1cblxuICAgIGNvbnN0IGVsZW1lbnQgPSBhcnJheVtpbmRleF07XG5cbiAgICByZXR1cm4gY2FsbGJhY2soZWxlbWVudCwgLi4ubmV4dEFyZ3VtZW50cywgKHN1Y2Nlc3MsIC4uLmNhbGxiYWNrQXJndW1lbnRzKSA9PiB7XG4gICAgICBpZiAoIXN1Y2Nlc3MpIHtcbiAgICAgICAgY29uc3QgZmluYWxBcmd1bWVudHMgPSBpbml0aWFsQXJndW1lbnRzOyAgLy8vXG5cbiAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihzdWNjZXNzLCAuLi5maW5hbEFyZ3VtZW50cyk7XG4gICAgICB9XG5cbiAgICAgIGNvdW50Kys7XG5cbiAgICAgIHJldHVybiBuZXh0KGluZGV4ICsgMSwgLi4uY2FsbGJhY2tBcmd1bWVudHMpO1xuICAgIH0pO1xuICB9XG5cbiAgbGV0IGNvdW50ID0gMDtcblxuICByZXR1cm4gbmV4dChpbmRleCwgLi4uaW5pdGlhbEFyZ3VtZW50cyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBldmVyeShhcnJheSwgY2FsbGJhY2ssIC4uLmluaXRpYWxBcmd1bWVudHMpIHtcbiAgY29uc3QgY29udGludWF0aW9uID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKSxcbiAgICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoLFxuICAgICAgICBpbmRleCA9IDA7XG5cbiAgZnVuY3Rpb24gbmV4dChpbmRleCwgLi4ubmV4dEFyZ3VtZW50cykge1xuICAgIGlmIChpbmRleCA9PT0gbGVuZ3RoKSB7XG4gICAgICBjb25zdCBzdWNjZXNzID0gdHJ1ZSxcbiAgICAgICAgICAgIGZpbmFsQXJndW1lbnRzID0gbmV4dEFyZ3VtZW50czsgLy8vXG5cbiAgICAgIHJldHVybiBjb250aW51YXRpb24oc3VjY2VzcywgLi4uZmluYWxBcmd1bWVudHMpO1xuICAgIH1cblxuICAgIGNvbnN0IGVsZW1lbnQgPSBhcnJheVtpbmRleF07XG5cbiAgICByZXR1cm4gY2FsbGJhY2soZWxlbWVudCwgLi4ubmV4dEFyZ3VtZW50cywgKHN1Y2Nlc3MsIC4uLmNhbGxiYWNrQXJndW1lbnRzKSA9PiB7XG4gICAgICBpZiAoIXN1Y2Nlc3MpIHtcbiAgICAgICAgY29uc3QgZmluYWxBcmd1bWVudHMgPSBpbml0aWFsQXJndW1lbnRzOyAgLy8vXG5cbiAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihzdWNjZXNzLCAuLi5maW5hbEFyZ3VtZW50cyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBuZXh0KGluZGV4ICsgMSwgLi4uY2FsbGJhY2tBcmd1bWVudHMpO1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIG5leHQoaW5kZXgsIC4uLmluaXRpYWxBcmd1bWVudHMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVkdWNlKGFycmF5LCBpbml0aWFsVmFsdWUsIGNhbGxiYWNrLCAuLi5pbml0aWFsQXJndW1lbnRzKSB7XG4gIGNvbnN0IGNvbnRpbnVhdGlvbiA9IGluaXRpYWxBcmd1bWVudHMucG9wKCksXG4gICAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aCxcbiAgICAgICAgaW5kZXggPSAwO1xuXG4gIGZ1bmN0aW9uIG5leHQoaW5kZXgsIHZhbHVlLCAuLi5uZXh0QXJndW1lbnRzKSB7XG4gICAgaWYgKGluZGV4ID09PSBsZW5ndGgpIHtcbiAgICAgIGNvbnN0IGZpbmFsQXJndW1lbnRzID0gbmV4dEFyZ3VtZW50czsgLy8vXG5cbiAgICAgIHJldHVybiBjb250aW51YXRpb24odmFsdWUsIC4uLmZpbmFsQXJndW1lbnRzKTtcbiAgICB9XG5cbiAgICBjb25zdCBlbGVtZW50ID0gYXJyYXlbaW5kZXhdO1xuXG4gICAgcmV0dXJuIGNhbGxiYWNrKGVsZW1lbnQsIHZhbHVlLCAuLi5uZXh0QXJndW1lbnRzLCAodmFsdWUsIC4uLmNhbGxiYWNrQXJndW1lbnRzKSA9PiB7XG4gICAgICByZXR1cm4gbmV4dChpbmRleCArIDEsIHZhbHVlLCAuLi5jYWxsYmFja0FyZ3VtZW50cyk7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gbmV4dChpbmRleCwgaW5pdGlhbFZhbHVlLCAuLi5pbml0aWFsQXJndW1lbnRzKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvckVhY2goYXJyYXksIGNhbGxiYWNrLCAuLi5pbml0aWFsQXJndW1lbnRzKSB7XG4gIGNvbnN0IGNvbnRpbnVhdGlvbiA9IGluaXRpYWxBcmd1bWVudHMucG9wKCksXG4gICAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aCxcbiAgICAgICAgaW5kZXggPSAwO1xuXG4gIGZ1bmN0aW9uIG5leHQoaW5kZXgsIC4uLm5leHRBcmd1bWVudHMpIHtcbiAgICBpZiAoaW5kZXggPT09IGxlbmd0aCkge1xuICAgICAgY29uc3QgZmluYWxBcmd1bWVudHMgPSBuZXh0QXJndW1lbnRzOyAvLy9cblxuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbiguLi5maW5hbEFyZ3VtZW50cyk7XG4gICAgfVxuXG4gICAgY29uc3QgZWxlbWVudCA9IGFycmF5W2luZGV4XTtcblxuICAgIHJldHVybiBjYWxsYmFjayhlbGVtZW50LCAuLi5uZXh0QXJndW1lbnRzLCAoLi4uY2FsbGJhY2tBcmd1bWVudHMpID0+IHtcbiAgICAgIHJldHVybiBuZXh0KGluZGV4ICsgMSwgLi4uY2FsbGJhY2tBcmd1bWVudHMpO1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIG5leHQoaW5kZXgsIC4uLmluaXRpYWxBcmd1bWVudHMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9yd2FyZHNFdmVyeShhcnJheSwgY2FsbGJhY2ssIC4uLmluaXRpYWxBcmd1bWVudHMpIHtcbiAgY29uc3QgY29udGludWF0aW9uID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKSxcbiAgICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoLFxuICAgICAgICBpbmRleCA9IDA7XG5cbiAgZnVuY3Rpb24gbmV4dChpbmRleCwgLi4ubmV4dEFyZ3VtZW50cykge1xuICAgIGlmIChpbmRleCA9PT0gbGVuZ3RoKSB7XG4gICAgICBjb25zdCBzdWNjZXNzID0gdHJ1ZSxcbiAgICAgICAgICAgIGZpbmFsQXJndW1lbnRzID0gbmV4dEFyZ3VtZW50czsgLy8vXG5cbiAgICAgIHJldHVybiBjb250aW51YXRpb24oc3VjY2VzcywgLi4uZmluYWxBcmd1bWVudHMpO1xuICAgIH1cblxuICAgIGNvbnN0IGVsZW1lbnQgPSBhcnJheVtpbmRleF07XG5cbiAgICByZXR1cm4gY2FsbGJhY2soZWxlbWVudCwgLi4ubmV4dEFyZ3VtZW50cywgKHN1Y2Nlc3MsIC4uLmNhbGxiYWNrQXJndW1lbnRzKSA9PiB7XG4gICAgICBpZiAoIXN1Y2Nlc3MpIHtcbiAgICAgICAgY29uc3QgZmluYWxBcmd1bWVudHMgPSBpbml0aWFsQXJndW1lbnRzOyAgLy8vXG5cbiAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihzdWNjZXNzLCAuLi5maW5hbEFyZ3VtZW50cyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBuZXh0KGluZGV4ICsgMSwgLi4uY2FsbGJhY2tBcmd1bWVudHMpO1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIG5leHQoaW5kZXgsIC4uLmluaXRpYWxBcmd1bWVudHMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYmFja3dhcmRzRXZlcnkoYXJyYXksIGNhbGxiYWNrLCAuLi5pbml0aWFsQXJndW1lbnRzKSB7XG4gIGNvbnN0IGNvbnRpbnVhdGlvbiA9IGluaXRpYWxBcmd1bWVudHMucG9wKCksXG4gICAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aCxcbiAgICAgICAgaW5kZXggPSBsZW5ndGggLSAxO1xuXG4gIGZ1bmN0aW9uIG5leHQoaW5kZXgsIC4uLm5leHRBcmd1bWVudHMpIHtcbiAgICBpZiAoaW5kZXggPT09IC0xKSB7XG4gICAgICBjb25zdCBzdWNjZXNzID0gdHJ1ZSxcbiAgICAgICAgICAgIGZpbmFsQXJndW1lbnRzID0gbmV4dEFyZ3VtZW50czsgLy8vXG5cbiAgICAgIHJldHVybiBjb250aW51YXRpb24oc3VjY2VzcywgLi4uZmluYWxBcmd1bWVudHMpO1xuICAgIH1cblxuICAgIGNvbnN0IGVsZW1lbnQgPSBhcnJheVtpbmRleF07XG5cbiAgICByZXR1cm4gY2FsbGJhY2soZWxlbWVudCwgLi4ubmV4dEFyZ3VtZW50cywgKHN1Y2Nlc3MsIC4uLmNhbGxiYWNrQXJndW1lbnRzKSA9PiB7XG4gICAgICBpZiAoIXN1Y2Nlc3MpIHtcbiAgICAgICAgY29uc3QgZmluYWxBcmd1bWVudHMgPSBpbml0aWFsQXJndW1lbnRzOyAgLy8vXG5cbiAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihzdWNjZXNzLCAuLi5maW5hbEFyZ3VtZW50cyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBuZXh0KGluZGV4IC0gMSwgLi4uY2FsbGJhY2tBcmd1bWVudHMpO1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIG5leHQoaW5kZXgsIC4uLmluaXRpYWxBcmd1bWVudHMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9yd2FyZHNGb3JFYWNoKGFycmF5LCBjYWxsYmFjaywgLi4uaW5pdGlhbEFyZ3VtZW50cykge1xuICBjb25zdCBjb250aW51YXRpb24gPSBpbml0aWFsQXJndW1lbnRzLnBvcCgpLFxuICAgICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGgsXG4gICAgICAgIGluZGV4ID0gMDtcblxuICBmdW5jdGlvbiBuZXh0KGluZGV4LCAuLi5uZXh0QXJndW1lbnRzKSB7XG4gICAgaWYgKGluZGV4ID09PSBsZW5ndGgpIHtcbiAgICAgIGNvbnN0IGZpbmFsQXJndW1lbnRzID0gbmV4dEFyZ3VtZW50czsgLy8vXG5cbiAgICAgIHJldHVybiBjb250aW51YXRpb24oLi4uZmluYWxBcmd1bWVudHMpO1xuICAgIH1cblxuICAgIGNvbnN0IGVsZW1lbnQgPSBhcnJheVtpbmRleF07XG5cbiAgICByZXR1cm4gY2FsbGJhY2soZWxlbWVudCwgLi4ubmV4dEFyZ3VtZW50cywgKC4uLmNhbGxiYWNrQXJndW1lbnRzKSA9PiB7XG4gICAgICByZXR1cm4gbmV4dChpbmRleCArIDEsIC4uLmNhbGxiYWNrQXJndW1lbnRzKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBuZXh0KGluZGV4LCAuLi5pbml0aWFsQXJndW1lbnRzKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJhY2t3YXJkc0ZvckVhY2goYXJyYXksIGNhbGxiYWNrLCAuLi5pbml0aWFsQXJndW1lbnRzKSB7XG4gIGNvbnN0IGNvbnRpbnVhdGlvbiA9IGluaXRpYWxBcmd1bWVudHMucG9wKCksXG4gICAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aCxcbiAgICAgICAgaW5kZXggPSBsZW5ndGggLSAxO1xuXG4gIGZ1bmN0aW9uIG5leHQoaW5kZXgsIC4uLm5leHRBcmd1bWVudHMpIHtcbiAgICBpZiAoaW5kZXggPT09IC0xKSB7XG4gICAgICBjb25zdCBmaW5hbEFyZ3VtZW50cyA9IG5leHRBcmd1bWVudHM7IC8vL1xuXG4gICAgICByZXR1cm4gY29udGludWF0aW9uKC4uLmZpbmFsQXJndW1lbnRzKTtcbiAgICB9XG5cbiAgICBjb25zdCBlbGVtZW50ID0gYXJyYXlbaW5kZXhdO1xuXG4gICAgcmV0dXJuIGNhbGxiYWNrKGVsZW1lbnQsIC4uLm5leHRBcmd1bWVudHMsICguLi5jYWxsYmFja0FyZ3VtZW50cykgPT4ge1xuICAgICAgcmV0dXJuIG5leHQoaW5kZXggLSAxLCAuLi5jYWxsYmFja0FyZ3VtZW50cyk7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gbmV4dChpbmRleCwgLi4uaW5pdGlhbEFyZ3VtZW50cyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaWx0ZXIoYXJyYXksIGNhbGxiYWNrLCAuLi5pbml0aWFsQXJndW1lbnRzKSB7XG4gIGNvbnN0IGNvbnRpbnVhdGlvbiA9IGluaXRpYWxBcmd1bWVudHMucG9wKCksXG4gICAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aCxcbiAgICAgICAgZGVsZXRlZEVsZW1lbnRzID0gW10sXG4gICAgICAgIGluZGV4ID0gbGVuZ3RoIC0gMTtcblxuICBmdW5jdGlvbiBuZXh0KGluZGV4LCAuLi5uZXh0QXJndW1lbnRzKSB7XG4gICAgaWYgKGluZGV4ID09PSAtMSkge1xuICAgICAgY29uc3QgZmluYWxBcmd1bWVudHMgPSBuZXh0QXJndW1lbnRzOyAvLy9cblxuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihkZWxldGVkRWxlbWVudHMsIC4uLmZpbmFsQXJndW1lbnRzKTtcbiAgICB9XG5cbiAgICBjb25zdCBlbGVtZW50ID0gYXJyYXlbaW5kZXhdO1xuXG4gICAgcmV0dXJuIGNhbGxiYWNrKGVsZW1lbnQsIC4uLm5leHRBcmd1bWVudHMsIChwYXNzZWQsIC4uLmNhbGxiYWNrQXJndW1lbnRzKSA9PiB7XG4gICAgICBpZiAoIXBhc3NlZCkge1xuICAgICAgICBjb25zdCBzdGFydEluZGV4ID0gaW5kZXgsIC8vL1xuICAgICAgICAgICAgICBkZWxldGVDb3VudCA9IDEsXG4gICAgICAgICAgICAgIGRlbGV0ZWRFbGVtZW50ID0gZWxlbWVudDsgLy8vXG5cbiAgICAgICAgYXJyYXkuc3BsaWNlKHN0YXJ0SW5kZXgsIGRlbGV0ZUNvdW50KTtcblxuICAgICAgICBkZWxldGVkRWxlbWVudHMudW5zaGlmdChkZWxldGVkRWxlbWVudCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBuZXh0KGluZGV4IC0gMSwgLi4uY2FsbGJhY2tBcmd1bWVudHMpO1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIG5leHQoaW5kZXgsIC4uLmluaXRpYWxBcmd1bWVudHMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJ1bmUoYXJyYXksIGNhbGxiYWNrLCAuLi5pbml0aWFsQXJndW1lbnRzKSB7XG4gIGNvbnN0IGNvbnRpbnVhdGlvbiA9IGluaXRpYWxBcmd1bWVudHMucG9wKCksXG4gICAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aCxcbiAgICAgICAgaW5kZXggPSAwO1xuXG4gIGZ1bmN0aW9uIG5leHQoaW5kZXgpIHtcbiAgICBpZiAoaW5kZXggPT09IGxlbmd0aCkge1xuICAgICAgY29uc3QgZGVsZXRlZEVsZW1lbnQgPSB1bmRlZmluZWQsXG4gICAgICAgICAgICBmaW5hbEFyZ3VtZW50cyA9IGluaXRpYWxBcmd1bWVudHM7IC8vL1xuXG4gICAgICByZXR1cm4gY29udGludWF0aW9uKGRlbGV0ZWRFbGVtZW50LCAuLi5maW5hbEFyZ3VtZW50cyk7XG4gICAgfVxuXG4gICAgY29uc3QgZWxlbWVudCA9IGFycmF5W2luZGV4XTtcblxuICAgIHJldHVybiBjYWxsYmFjayhlbGVtZW50LCAuLi5pbml0aWFsQXJndW1lbnRzLCAocGFzc2VkLCAuLi5jYWxsYmFja0FyZ3VtZW50cykgPT4ge1xuICAgICAgaWYgKCFwYXNzZWQpIHtcbiAgICAgICAgY29uc3Qgc3RhcnRJbmRleCA9IGluZGV4LCAvLy9cbiAgICAgICAgICAgICAgZGVsZXRlQ291bnQgPSAxLFxuICAgICAgICAgICAgICBkZWxldGVkRWxlbWVudCA9IGVsZW1lbnQsIC8vL1xuICAgICAgICAgICAgICBmaW5hbEFyZ3VtZW50cyA9IGNhbGxiYWNrQXJndW1lbnRzOyAvLy9cblxuICAgICAgICBhcnJheS5zcGxpY2Uoc3RhcnRJbmRleCwgZGVsZXRlQ291bnQpO1xuXG4gICAgICAgIHJldHVybiBjb250aW51YXRpb24oZGVsZXRlZEVsZW1lbnQsIC4uLmZpbmFsQXJndW1lbnRzKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG5leHQoaW5kZXggKyAxKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBuZXh0KGluZGV4KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3QoYXJyYXksIGNhbGxiYWNrLCAuLi5pbml0aWFsQXJndW1lbnRzKSB7XG4gIGNvbnN0IGNvbnRpbnVhdGlvbiA9IGluaXRpYWxBcmd1bWVudHMucG9wKCksXG4gICAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aCxcbiAgICAgICAgaW5kZXggPSAwO1xuXG4gIGZ1bmN0aW9uIG5leHQoaW5kZXgpIHtcbiAgICBpZiAoaW5kZXggPT09IGxlbmd0aCkge1xuICAgICAgY29uc3QgZGVsZXRlZEVsZW1lbnQgPSB1bmRlZmluZWQsXG4gICAgICAgICAgICBmaW5hbEFyZ3VtZW50cyA9IGluaXRpYWxBcmd1bWVudHM7IC8vL1xuXG4gICAgICByZXR1cm4gY29udGludWF0aW9uKGRlbGV0ZWRFbGVtZW50LCAuLi5maW5hbEFyZ3VtZW50cyk7XG4gICAgfVxuXG4gICAgY29uc3QgZWxlbWVudCA9IGFycmF5W2luZGV4XTtcblxuICAgIHJldHVybiBjYWxsYmFjayhlbGVtZW50LCAuLi5pbml0aWFsQXJndW1lbnRzLCAocGFzc2VkLCAuLi5jYWxsYmFja0FyZ3VtZW50cykgPT4ge1xuICAgICAgaWYgKHBhc3NlZCkge1xuICAgICAgICBjb25zdCBzdGFydEluZGV4ID0gaW5kZXgsIC8vL1xuICAgICAgICAgICAgICBkZWxldGVDb3VudCA9IDEsXG4gICAgICAgICAgICAgIGRlbGV0ZWRFbGVtZW50ID0gZWxlbWVudCwgLy8vXG4gICAgICAgICAgICAgIGZpbmFsQXJndW1lbnRzID0gY2FsbGJhY2tBcmd1bWVudHM7IC8vL1xuXG4gICAgICAgIGFycmF5LnNwbGljZShzdGFydEluZGV4LCBkZWxldGVDb3VudCk7XG5cbiAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihkZWxldGVkRWxlbWVudCwgLi4uZmluYWxBcmd1bWVudHMpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbmV4dChpbmRleCArIDEpO1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIG5leHQoaW5kZXgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWF0Y2goYXJyYXlBLCBhcnJheUIsIGNhbGxiYWNrLCAuLi5pbml0aWFsQXJndW1lbnRzKSB7XG4gIGNvbnN0IGNvbnRpbnVhdGlvbiA9IGluaXRpYWxBcmd1bWVudHMucG9wKCksXG4gICAgICAgIGFycmF5QUxlbmd0aCA9IGFycmF5QS5sZW5ndGgsXG4gICAgICAgIGFycmF5Qkxlbmd0aCA9IGFycmF5Qi5sZW5ndGg7XG5cbiAgaWYgKGFycmF5QUxlbmd0aCAhPT0gYXJyYXlCTGVuZ3RoKSB7XG4gICAgY29uc3Qgc3VjY2VzcyA9IGZhbHNlLFxuICAgICAgICAgIGZpbmFsQXJndW1lbnRzID0gaW5pdGlhbEFyZ3VtZW50czsgIC8vL1xuXG4gICAgcmV0dXJuIGNvbnRpbnVhdGlvbihzdWNjZXNzLCAuLi5maW5hbEFyZ3VtZW50cyk7XG4gIH1cblxuICBjb25zdCBsZW5ndGggPSBhcnJheUFMZW5ndGgsICAvLy9cbiAgICAgICAgaW5kZXggPSAwO1xuXG4gIGZ1bmN0aW9uIG5leHQoaW5kZXgsIC4uLm5leHRBcmd1bWVudHMpIHtcbiAgICBpZiAoaW5kZXggPT09IGxlbmd0aCkge1xuICAgICAgY29uc3Qgc3VjY2VzcyA9IHRydWUsXG4gICAgICAgICAgICBmaW5hbEFyZ3VtZW50cyA9IG5leHRBcmd1bWVudHM7IC8vL1xuXG4gICAgICByZXR1cm4gY29udGludWF0aW9uKHN1Y2Nlc3MsIC4uLmZpbmFsQXJndW1lbnRzKTtcbiAgICB9XG5cbiAgICBjb25zdCBlbGVtZW50QSA9IGFycmF5QVtpbmRleF0sXG4gICAgICAgICAgZWxlbWVudEIgPSBhcnJheUJbaW5kZXhdO1xuXG4gICAgcmV0dXJuIGNhbGxiYWNrKGVsZW1lbnRBLCBlbGVtZW50QiwgLi4ubmV4dEFyZ3VtZW50cywgKHN1Y2Nlc3MsIC4uLmNhbGxiYWNrQXJndW1lbnRzKSA9PiB7XG4gICAgICBpZiAoIXN1Y2Nlc3MpIHtcbiAgICAgICAgY29uc3QgZmluYWxBcmd1bWVudHMgPSBpbml0aWFsQXJndW1lbnRzOyAgLy8vXG5cbiAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihzdWNjZXNzLCAuLi5maW5hbEFyZ3VtZW50cyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBuZXh0KGluZGV4ICsgMSwgLi4uY2FsbGJhY2tBcmd1bWVudHMpO1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIG5leHQoaW5kZXgsIC4uLmluaXRpYWxBcmd1bWVudHMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZShhcnJheUEsIGFycmF5QiwgY2FsbGJhY2ssIC4uLmluaXRpYWxBcmd1bWVudHMpIHtcbiAgYXJyYXlBID0gWyAgLy8vXG4gICAgLi4uYXJyYXlBXG4gIF07XG5cbiAgY29uc3QgY29udGludWF0aW9uID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKTtcblxuICBmdW5jdGlvbiBuZXh0UGFzcyguLi5uZXh0QXJndW1lbnRzKSB7XG4gICAgY29uc3QgbGVuZ3RoID0gYXJyYXlBLmxlbmd0aDsgLy8vXG5cbiAgICBpZiAobGVuZ3RoID09PSAwKSB7XG4gICAgICBjb25zdCBzdWNjZXNzID0gdHJ1ZSxcbiAgICAgICAgICAgIGZpbmFsQXJndW1lbnRzID0gbmV4dEFyZ3VtZW50czsgLy8vXG5cbiAgICAgIHJldHVybiBjb250aW51YXRpb24oc3VjY2VzcywgLi4uZmluYWxBcmd1bWVudHMpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG5leHRFbGVtZW50KGluZGV4LCBzdWNjZXNzLCAuLi5jdXJyZW50QXJndW1lbnRzKSB7XG4gICAgICBpZiAoaW5kZXggPT09IGxlbmd0aCkge1xuICAgICAgICBpZiAoIXN1Y2Nlc3MpIHtcbiAgICAgICAgICBjb25zdCBmaW5hbEFyZ3VtZW50cyA9IGluaXRpYWxBcmd1bWVudHM7IC8vL1xuXG4gICAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihzdWNjZXNzLCAuLi5maW5hbEFyZ3VtZW50cyk7XG4gICAgICAgIH1cblxuICAgICAgICBhcnJheUZpbHRlcihhcnJheUEsIChlbGVtZW50QSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGFycmF5QkluY2x1ZGVzRWxlbWVudEEgPSBhcnJheUIuaW5jbHVkZXMoZWxlbWVudEEpO1xuXG4gICAgICAgICAgaWYgKCFhcnJheUJJbmNsdWRlc0VsZW1lbnRBKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBuZXh0UGFzcyguLi5jdXJyZW50QXJndW1lbnRzKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZWxlbWVudEEgPSBhcnJheUFbaW5kZXhdO1xuXG4gICAgICByZXR1cm4gY2FsbGJhY2soZWxlbWVudEEsIC4uLmN1cnJlbnRBcmd1bWVudHMsIChwYXNzZWQsIC4uLmNhbGxiYWNrQXJndW1lbnRzKSA9PiB7XG4gICAgICAgIGlmIChwYXNzZWQpIHtcbiAgICAgICAgICBjb25zdCBlbGVtZW50QiA9IGVsZW1lbnRBLCAgLy8vXG4gICAgICAgICAgICAgICAgc3VjY2VzcyA9IHRydWU7XG5cbiAgICAgICAgICBhcnJheUIucHVzaChlbGVtZW50Qik7XG5cbiAgICAgICAgICByZXR1cm4gbmV4dEVsZW1lbnQoaW5kZXggKyAxLCBzdWNjZXNzLCAuLi5jYWxsYmFja0FyZ3VtZW50cyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV4dEVsZW1lbnQoaW5kZXggKyAxLCBzdWNjZXNzLCAuLi5jdXJyZW50QXJndW1lbnRzKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IGluZGV4ID0gMCxcbiAgICAgICAgICBzdWNjZXNzID0gZmFsc2U7XG5cbiAgICByZXR1cm4gbmV4dEVsZW1lbnQoaW5kZXgsIHN1Y2Nlc3MsIC4uLm5leHRBcmd1bWVudHMpO1xuICB9XG5cbiAgcmV0dXJuIG5leHRQYXNzKC4uLmluaXRpYWxBcmd1bWVudHMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYWxsKGNhbGxiYWNrcywgLi4uaW5pdGlhbEFyZ3VtZW50cykge1xuICByZXR1cm4gZXZlcnkoY2FsbGJhY2tzLCAoY2FsbGJhY2ssIC4uLmNhbGxiYWNrQXJndW1lbnRzKSA9PiB7XG4gICAgcmV0dXJuIGNhbGxiYWNrKC4uLmNhbGxiYWNrQXJndW1lbnRzKTtcbiAgfSwgLi4uaW5pdGlhbEFyZ3VtZW50cyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleGlzdHMoY2FsbGJhY2tzLCAuLi5pbml0aWFsQXJndW1lbnRzKSB7XG4gIHJldHVybiBzb21lKGNhbGxiYWNrcywgKGNhbGxiYWNrLCAuLi5jYWxsYmFja0FyZ3VtZW50cykgPT4ge1xuICAgIHJldHVybiBjYWxsYmFjayguLi5jYWxsYmFja0FyZ3VtZW50cyk7XG4gIH0sIC4uLmluaXRpYWxBcmd1bWVudHMpO1xufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG9uZSxcbiAgc29tZSxcbiAgZWFjaCxcbiAgZXZlcnksXG4gIHJlZHVjZSxcbiAgZm9yRWFjaCxcbiAgZm9yd2FyZHNFdmVyeSxcbiAgYmFja3dhcmRzRXZlcnksXG4gIGZvcndhcmRzRm9yRWFjaCxcbiAgYmFja3dhcmRzRm9yRWFjaCxcbiAgZmlsdGVyLFxuICBwcnVuZSxcbiAgZXh0cmFjdCxcbiAgbWF0Y2gsXG4gIHJlc29sdmUsXG4gIGFsbCxcbiAgZXhpc3RzXG59O1xuIl0sIm5hbWVzIjpbImFsbCIsImJhY2t3YXJkc0V2ZXJ5IiwiYmFja3dhcmRzRm9yRWFjaCIsImVhY2giLCJldmVyeSIsImV4aXN0cyIsImV4dHJhY3QiLCJmaWx0ZXIiLCJmb3JFYWNoIiwiZm9yd2FyZHNFdmVyeSIsImZvcndhcmRzRm9yRWFjaCIsIm1hdGNoIiwib25lIiwicHJ1bmUiLCJyZWR1Y2UiLCJyZXNvbHZlIiwic29tZSIsImFycmF5RmlsdGVyIiwiYXJyYXlVdGlsaXRpZXMiLCJhcnJheSIsImNhbGxiYWNrIiwiaW5pdGlhbEFyZ3VtZW50cyIsImNvbnRpbnVhdGlvbiIsInBvcCIsImxlbmd0aCIsImluZGV4IiwibmV4dCIsIm5leHRBcmd1bWVudHMiLCJzdWNjZXNzIiwiY291bnQiLCJmaW5hbEFyZ3VlbW50cyIsImVsZW1lbnQiLCJjYWxsYmFja0FyZ3VtZW50cyIsImZpbmFsQXJndW1lbnRzIiwiaW5pdGlhbFZhbHVlIiwidmFsdWUiLCJkZWxldGVkRWxlbWVudHMiLCJwYXNzZWQiLCJzdGFydEluZGV4IiwiZGVsZXRlQ291bnQiLCJkZWxldGVkRWxlbWVudCIsInNwbGljZSIsInVuc2hpZnQiLCJ1bmRlZmluZWQiLCJhcnJheUEiLCJhcnJheUIiLCJhcnJheUFMZW5ndGgiLCJhcnJheUJMZW5ndGgiLCJlbGVtZW50QSIsImVsZW1lbnRCIiwibmV4dFBhc3MiLCJuZXh0RWxlbWVudCIsImN1cnJlbnRBcmd1bWVudHMiLCJhcnJheUJJbmNsdWRlc0VsZW1lbnRBIiwiaW5jbHVkZXMiLCJwdXNoIiwiY2FsbGJhY2tzIl0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7UUF3ZWdCQTtlQUFBQTs7UUFuUkFDO2VBQUFBOztRQW1EQUM7ZUFBQUE7O1FBNE9oQjtlQUFBOztRQXhhZ0JDO2VBQUFBOztRQW1DQUM7ZUFBQUE7O1FBK1hBQztlQUFBQTs7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
|
|
343
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvY29udGludWF0aW9uLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBhcnJheVV0aWxpdGllcyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcblxuY29uc3QgeyBmaWx0ZXI6IGFycmF5RmlsdGVyIH0gPSBhcnJheVV0aWxpdGllcztcblxuZXhwb3J0IGZ1bmN0aW9uIG9uZShhcnJheSwgY2FsbGJhY2ssIC4uLmluaXRpYWxBcmd1bWVudHMpIHtcbiAgY29uc3QgZm9yd2FyZCA9IGluaXRpYWxBcmd1bWVudHMucG9wKCksXG4gICAgICAgIGJhY2sgPSBpbml0aWFsQXJndW1lbnRzLnBvcCgpLFxuICAgICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGgsXG4gICAgICAgIGluZGV4ID0gMDtcblxuICBmdW5jdGlvbiBuZXh0KGluZGV4LCAuLi5uZXh0QXJndW1lbnRzKSB7XG4gICAgaWYgKGluZGV4ID09PSBsZW5ndGgpIHtcbiAgICAgIHJldHVybiAoY291bnQgPT09IDEpID9cbiAgICAgICAgICAgICAgIGZvcndhcmQoLi4ubmV4dEFyZ3VtZW50cykgOlxuICAgICAgICAgICAgICAgICBiYWNrKCk7XG4gICAgfVxuXG4gICAgY29uc3QgZWxlbWVudCA9IGFycmF5W2luZGV4XTtcblxuICAgIHJldHVybiBjYWxsYmFjayhlbGVtZW50LCAuLi5pbml0aWFsQXJndW1lbnRzLCAoKSA9PiBuZXh0KGluZGV4ICsgMSwgLi4ubmV4dEFyZ3VtZW50cyksICguLi5jYWxsYmFja0FyZ3VtZW50cykgPT4ge1xuICAgICAgY291bnQrKztcblxuICAgICAgaWYgKGNvdW50ID09PSAyKSB7XG4gICAgICAgIHJldHVybiBiYWNrKCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBuZXh0KGluZGV4ICsgMSwgLi4uY2FsbGJhY2tBcmd1bWVudHMpO1xuICAgIH0pO1xuICB9XG5cbiAgbGV0IGNvdW50ID0gMDtcblxuICByZXR1cm4gbmV4dChpbmRleCwgLi4uaW5pdGlhbEFyZ3VtZW50cyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzb21lKGFycmF5LCBjYWxsYmFjaywgLi4uaW5pdGlhbEFyZ3VtZW50cykge1xuICBjb25zdCBmb3J3YXJkID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKSxcbiAgICAgICAgYmFjayA9IGluaXRpYWxBcmd1bWVudHMucG9wKCksXG4gICAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBmdW5jdGlvbiBuZXh0KGluZGV4KSB7XG4gICAgaWYgKGluZGV4ID09PSBsZW5ndGgpIHtcbiAgICAgIHJldHVybiBiYWNrKCk7XG4gICAgfVxuXG4gICAgY29uc3QgZWxlbWVudCA9IGFycmF5W2luZGV4XTtcblxuICAgIHJldHVybiBjYWxsYmFjayhlbGVtZW50LCAuLi5pbml0aWFsQXJndW1lbnRzLCAoKSA9PiBuZXh0KGluZGV4ICsgMSksIGZvcndhcmQpO1xuICB9XG5cbiAgY29uc3QgaW5kZXggPSAwO1xuXG4gIHJldHVybiBuZXh0KGluZGV4KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVhY2goYXJyYXksIGNhbGxiYWNrLCAuLi5pbml0aWFsQXJndW1lbnRzKSB7XG4gIGNvbnN0IGZvcndhcmQgPSBpbml0aWFsQXJndW1lbnRzLnBvcCgpLFxuICAgICAgICBiYWNrID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKSxcbiAgICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoLFxuICAgICAgICBpbmRleCA9IDA7XG5cbiAgZnVuY3Rpb24gbmV4dChpbmRleCwgLi4ubmV4dEFyZ3VtZW50cykge1xuICAgIGlmIChpbmRleCA9PT0gbGVuZ3RoKSB7XG4gICAgICByZXR1cm4gKGNvdW50ICE9PSAwKSA/XG4gICAgICAgICAgICAgICBmb3J3YXJkKC4uLm5leHRBcmd1bWVudHMpIDpcbiAgICAgICAgICAgICAgICAgYmFjaygpO1xuICAgIH1cblxuICAgIGNvbnN0IGVsZW1lbnQgPSBhcnJheVtpbmRleF07XG5cbiAgICByZXR1cm4gY2FsbGJhY2soZWxlbWVudCwgLi4ubmV4dEFyZ3VtZW50cywgYmFjaywgKC4uLmNhbGxiYWNrQXJndW1lbnRzKSA9PiB7XG4gICAgICBjb3VudCsrO1xuXG4gICAgICByZXR1cm4gbmV4dChpbmRleCArIDEsIC4uLmNhbGxiYWNrQXJndW1lbnRzKTtcbiAgICB9KTtcbiAgfVxuXG4gIGxldCBjb3VudCA9IDA7XG5cbiAgcmV0dXJuIG5leHQoaW5kZXgsIC4uLmluaXRpYWxBcmd1bWVudHMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXZlcnkoYXJyYXksIGNhbGxiYWNrLCAuLi5pbml0aWFsQXJndW1lbnRzKSB7XG4gIGNvbnN0IGZvcndhcmQgPSBpbml0aWFsQXJndW1lbnRzLnBvcCgpLFxuICAgICAgICBiYWNrID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKSxcbiAgICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoLFxuICAgICAgICBpbmRleCA9IDA7XG5cbiAgZnVuY3Rpb24gbmV4dChpbmRleCwgLi4ubmV4dEFyZ3VtZW50cykge1xuICAgIGlmIChpbmRleCA9PT0gbGVuZ3RoKSB7XG4gICAgICByZXR1cm4gZm9yd2FyZCguLi5uZXh0QXJndW1lbnRzKTtcbiAgICB9XG5cbiAgICBjb25zdCBlbGVtZW50ID0gYXJyYXlbaW5kZXhdO1xuXG4gICAgcmV0dXJuIGNhbGxiYWNrKGVsZW1lbnQsIC4uLm5leHRBcmd1bWVudHMsIGJhY2ssICguLi5jYWxsYmFja0FyZ3VtZW50cykgPT4ge1xuICAgICAgcmV0dXJuIG5leHQoaW5kZXggKyAxLCAuLi5jYWxsYmFja0FyZ3VtZW50cyk7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gbmV4dChpbmRleCwgLi4uaW5pdGlhbEFyZ3VtZW50cyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWR1Y2UoYXJyYXksIGluaXRpYWxWYWx1ZSwgY2FsbGJhY2ssIC4uLmluaXRpYWxBcmd1bWVudHMpIHtcbiAgY29uc3QgZm9yd2FyZCA9IGluaXRpYWxBcmd1bWVudHMucG9wKCksXG4gICAgICAgIGJhY2sgPSBpbml0aWFsQXJndW1lbnRzLnBvcCgpLFxuICAgICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGgsXG4gICAgICAgIGluZGV4ID0gMDtcblxuICBmdW5jdGlvbiBuZXh0KGluZGV4LCB2YWx1ZSwgLi4ubmV4dEFyZ3VtZW50cykge1xuICAgIGlmIChpbmRleCA9PT0gbGVuZ3RoKSB7XG4gICAgICByZXR1cm4gZm9yd2FyZCh2YWx1ZSwgLi4ubmV4dEFyZ3VtZW50cyk7XG4gICAgfVxuXG4gICAgY29uc3QgZWxlbWVudCA9IGFycmF5W2luZGV4XTtcblxuICAgIHJldHVybiBjYWxsYmFjayhlbGVtZW50LCB2YWx1ZSwgLi4ubmV4dEFyZ3VtZW50cywgYmFjaywgKHZhbHVlLCAuLi5jYWxsYmFja0FyZ3VtZW50cykgPT4ge1xuICAgICAgcmV0dXJuIG5leHQoaW5kZXggKyAxLCB2YWx1ZSwgLi4uY2FsbGJhY2tBcmd1bWVudHMpO1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIG5leHQoaW5kZXgsIGluaXRpYWxWYWx1ZSwgLi4uaW5pdGlhbEFyZ3VtZW50cyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmb3JFYWNoKGFycmF5LCBjYWxsYmFjaywgLi4uaW5pdGlhbEFyZ3VtZW50cykge1xuICBjb25zdCBmb3J3YXJkID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKSxcbiAgICAgICAgYmFjayA9IGluaXRpYWxBcmd1bWVudHMucG9wKCksXG4gICAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aCxcbiAgICAgICAgaW5kZXggPSAwO1xuXG4gIGZ1bmN0aW9uIG5leHQoaW5kZXgsIC4uLm5leHRBcmd1bWVudHMpIHtcbiAgICBpZiAoaW5kZXggPT09IGxlbmd0aCkge1xuICAgICAgcmV0dXJuIGZvcndhcmQoLi4ubmV4dEFyZ3VtZW50cyk7XG4gICAgfVxuXG4gICAgY29uc3QgZWxlbWVudCA9IGFycmF5W2luZGV4XTtcblxuICAgIHJldHVybiBjYWxsYmFjayhlbGVtZW50LCAuLi5uZXh0QXJndW1lbnRzLCBiYWNrLCAoLi4uY2FsbGJhY2tBcmd1bWVudHMpID0+IHtcbiAgICAgIHJldHVybiBuZXh0KGluZGV4ICsgMSwgLi4uY2FsbGJhY2tBcmd1bWVudHMpO1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIG5leHQoaW5kZXgsIC4uLmluaXRpYWxBcmd1bWVudHMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9yd2FyZHNFdmVyeShhcnJheSwgY2FsbGJhY2ssIC4uLmluaXRpYWxBcmd1bWVudHMpIHtcbiAgY29uc3QgZm9yd2FyZCA9IGluaXRpYWxBcmd1bWVudHMucG9wKCksXG4gICAgICAgIGJhY2sgPSBpbml0aWFsQXJndW1lbnRzLnBvcCgpLFxuICAgICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGgsXG4gICAgICAgIGluZGV4ID0gMDtcblxuICBmdW5jdGlvbiBuZXh0KGluZGV4LCAuLi5uZXh0QXJndW1lbnRzKSB7XG4gICAgaWYgKGluZGV4ID09PSBsZW5ndGgpIHtcbiAgICAgIHJldHVybiBmb3J3YXJkKC4uLm5leHRBcmd1bWVudHMpO1xuICAgIH1cblxuICAgIGNvbnN0IGVsZW1lbnQgPSBhcnJheVtpbmRleF07XG5cbiAgICByZXR1cm4gY2FsbGJhY2soZWxlbWVudCwgLi4ubmV4dEFyZ3VtZW50cywgYmFjaywgKC4uLmNhbGxiYWNrQXJndW1lbnRzKSA9PiB7XG4gICAgICByZXR1cm4gbmV4dChpbmRleCArIDEsIC4uLmNhbGxiYWNrQXJndW1lbnRzKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBuZXh0KGluZGV4LCAuLi5pbml0aWFsQXJndW1lbnRzKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJhY2t3YXJkc0V2ZXJ5KGFycmF5LCBjYWxsYmFjaywgLi4uaW5pdGlhbEFyZ3VtZW50cykge1xuICBjb25zdCBmb3J3YXJkID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKSxcbiAgICAgICAgYmFjayA9IGluaXRpYWxBcmd1bWVudHMucG9wKCksXG4gICAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aCxcbiAgICAgICAgaW5kZXggPSBsZW5ndGggLSAxO1xuXG4gIGZ1bmN0aW9uIG5leHQoaW5kZXgsIC4uLm5leHRBcmd1bWVudHMpIHtcbiAgICBpZiAoaW5kZXggPT09IC0xKSB7XG4gICAgICByZXR1cm4gZm9yd2FyZCguLi5uZXh0QXJndW1lbnRzKTtcbiAgICB9XG5cbiAgICBjb25zdCBlbGVtZW50ID0gYXJyYXlbaW5kZXhdO1xuXG4gICAgcmV0dXJuIGNhbGxiYWNrKGVsZW1lbnQsIC4uLm5leHRBcmd1bWVudHMsIGJhY2ssICguLi5jYWxsYmFja0FyZ3VtZW50cykgPT4ge1xuICAgICAgcmV0dXJuIG5leHQoaW5kZXggLSAxLCAuLi5jYWxsYmFja0FyZ3VtZW50cyk7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gbmV4dChpbmRleCwgLi4uaW5pdGlhbEFyZ3VtZW50cyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmb3J3YXJkc0ZvckVhY2goYXJyYXksIGNhbGxiYWNrLCAuLi5pbml0aWFsQXJndW1lbnRzKSB7XG4gIGNvbnN0IGZvcndhcmQgPSBpbml0aWFsQXJndW1lbnRzLnBvcCgpLFxuICAgICAgICBiYWNrID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKSxcbiAgICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoLFxuICAgICAgICBpbmRleCA9IDA7XG5cbiAgZnVuY3Rpb24gbmV4dChpbmRleCwgLi4ubmV4dEFyZ3VtZW50cykge1xuICAgIGlmIChpbmRleCA9PT0gbGVuZ3RoKSB7XG4gICAgICByZXR1cm4gZm9yd2FyZCguLi5uZXh0QXJndW1lbnRzKTtcbiAgICB9XG5cbiAgICBjb25zdCBlbGVtZW50ID0gYXJyYXlbaW5kZXhdO1xuXG4gICAgcmV0dXJuIGNhbGxiYWNrKGVsZW1lbnQsIC4uLm5leHRBcmd1bWVudHMsIGJhY2ssICguLi5jYWxsYmFja0FyZ3VtZW50cykgPT4ge1xuICAgICAgcmV0dXJuIG5leHQoaW5kZXggKyAxLCAuLi5jYWxsYmFja0FyZ3VtZW50cyk7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gbmV4dChpbmRleCwgLi4uaW5pdGlhbEFyZ3VtZW50cyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBiYWNrd2FyZHNGb3JFYWNoKGFycmF5LCBjYWxsYmFjaywgLi4uaW5pdGlhbEFyZ3VtZW50cykge1xuICBjb25zdCBmb3J3YXJkID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKSxcbiAgICAgICAgYmFjayA9IGluaXRpYWxBcmd1bWVudHMucG9wKCksXG4gICAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aCxcbiAgICAgICAgaW5kZXggPSBsZW5ndGggLSAxO1xuXG4gIGZ1bmN0aW9uIG5leHQoaW5kZXgsIC4uLm5leHRBcmd1bWVudHMpIHtcbiAgICBpZiAoaW5kZXggPT09IC0xKSB7XG4gICAgICByZXR1cm4gZm9yd2FyZCguLi5uZXh0QXJndW1lbnRzKTtcbiAgICB9XG5cbiAgICBjb25zdCBlbGVtZW50ID0gYXJyYXlbaW5kZXhdO1xuXG4gICAgcmV0dXJuIGNhbGxiYWNrKGVsZW1lbnQsIC4uLm5leHRBcmd1bWVudHMsIGJhY2ssICguLi5jYWxsYmFja0FyZ3VtZW50cykgPT4ge1xuICAgICAgcmV0dXJuIG5leHQoaW5kZXggLSAxLCAuLi5jYWxsYmFja0FyZ3VtZW50cyk7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gbmV4dChpbmRleCwgLi4uaW5pdGlhbEFyZ3VtZW50cyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaWx0ZXIoYXJyYXksIGNhbGxiYWNrLCAuLi5pbml0aWFsQXJndW1lbnRzKSB7XG4gIGNvbnN0IGZvcndhcmQgPSBpbml0aWFsQXJndW1lbnRzLnBvcCgpLFxuICAgICAgICBiYWNrID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKSxcbiAgICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoLFxuICAgICAgICBkZWxldGVkRWxlbWVudHMgPSBbXSxcbiAgICAgICAgaW5kZXggPSBsZW5ndGggLSAxO1xuXG4gIGZ1bmN0aW9uIG5leHQoaW5kZXgsIC4uLm5leHRBcmd1bWVudHMpIHtcbiAgICBpZiAoaW5kZXggPT09IC0xKSB7XG4gICAgICByZXR1cm4gZm9yd2FyZChkZWxldGVkRWxlbWVudHMsIC4uLm5leHRBcmd1bWVudHMpO1xuICAgIH1cblxuICAgIGNvbnN0IGVsZW1lbnQgPSBhcnJheVtpbmRleF07XG5cbiAgICByZXR1cm4gY2FsbGJhY2soZWxlbWVudCwgLi4ubmV4dEFyZ3VtZW50cywgYmFjaywgKHBhc3NlZCwgLi4uY2FsbGJhY2tBcmd1bWVudHMpID0+IHtcbiAgICAgIGlmICghcGFzc2VkKSB7XG4gICAgICAgIGNvbnN0IHN0YXJ0SW5kZXggPSBpbmRleCwgLy8vXG4gICAgICAgICAgICAgIGRlbGV0ZUNvdW50ID0gMSxcbiAgICAgICAgICAgICAgZGVsZXRlZEVsZW1lbnQgPSBlbGVtZW50OyAvLy9cblxuICAgICAgICBhcnJheS5zcGxpY2Uoc3RhcnRJbmRleCwgZGVsZXRlQ291bnQpO1xuXG4gICAgICAgIGRlbGV0ZWRFbGVtZW50cy51bnNoaWZ0KGRlbGV0ZWRFbGVtZW50KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG5leHQoaW5kZXggLSAxLCAuLi5jYWxsYmFja0FyZ3VtZW50cyk7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gbmV4dChpbmRleCwgLi4uaW5pdGlhbEFyZ3VtZW50cyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcnVuZShhcnJheSwgY2FsbGJhY2ssIC4uLmluaXRpYWxBcmd1bWVudHMpIHtcbiAgY29uc3QgZm9yd2FyZCA9IGluaXRpYWxBcmd1bWVudHMucG9wKCksXG4gICAgICAgIGJhY2sgPSBpbml0aWFsQXJndW1lbnRzLnBvcCgpLFxuICAgICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGgsXG4gICAgICAgIGluZGV4ID0gMDtcblxuICBmdW5jdGlvbiBuZXh0KGluZGV4LCAuLi5uZXh0QXJndW1lbnRzKSB7XG4gICAgaWYgKGluZGV4ID09PSBsZW5ndGgpIHtcbiAgICAgIGNvbnN0IGRlbGV0ZWRFbGVtZW50ID0gdW5kZWZpbmVkO1xuXG4gICAgICByZXR1cm4gZm9yd2FyZChkZWxldGVkRWxlbWVudCwgLi4ubmV4dEFyZ3VtZW50cyk7XG4gICAgfVxuXG4gICAgY29uc3QgZWxlbWVudCA9IGFycmF5W2luZGV4XTtcblxuICAgIHJldHVybiBjYWxsYmFjayhlbGVtZW50LCAuLi5uZXh0QXJndW1lbnRzLCBiYWNrLCAocGFzc2VkLCAuLi5jYWxsYmFja0FyZ3VtZW50cykgPT4ge1xuICAgICAgaWYgKCFwYXNzZWQpIHtcbiAgICAgICAgY29uc3Qgc3RhcnRJbmRleCA9IGluZGV4LCAvLy9cbiAgICAgICAgICAgICAgZGVsZXRlQ291bnQgPSAxLFxuICAgICAgICAgICAgICBkZWxldGVkRWxlbWVudCA9IGVsZW1lbnQ7IC8vL1xuXG4gICAgICAgIGFycmF5LnNwbGljZShzdGFydEluZGV4LCBkZWxldGVDb3VudCk7XG5cbiAgICAgICAgcmV0dXJuIGZvcndhcmQoZGVsZXRlZEVsZW1lbnQsIC4uLmNhbGxiYWNrQXJndW1lbnRzKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG5leHQoaW5kZXggKyAxLCAuLi5jYWxsYmFja0FyZ3VtZW50cyk7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gbmV4dChpbmRleCwgLi4uaW5pdGlhbEFyZ3VtZW50cyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0KGFycmF5LCBjYWxsYmFjaywgLi4uaW5pdGlhbEFyZ3VtZW50cykge1xuICBjb25zdCBmb3J3YXJkID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKSxcbiAgICAgICAgYmFjayA9IGluaXRpYWxBcmd1bWVudHMucG9wKCksXG4gICAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aCxcbiAgICAgICAgaW5kZXggPSAwO1xuXG4gIGZ1bmN0aW9uIG5leHQoaW5kZXgsIC4uLm5leHRBcmd1bWVudHMpIHtcbiAgICBpZiAoaW5kZXggPT09IGxlbmd0aCkge1xuICAgICAgY29uc3QgZGVsZXRlZEVsZW1lbnQgPSB1bmRlZmluZWQ7XG5cbiAgICAgIHJldHVybiBmb3J3YXJkKGRlbGV0ZWRFbGVtZW50LCAuLi5uZXh0QXJndW1lbnRzKTtcbiAgICB9XG5cbiAgICBjb25zdCBlbGVtZW50ID0gYXJyYXlbaW5kZXhdO1xuXG4gICAgcmV0dXJuIGNhbGxiYWNrKGVsZW1lbnQsIC4uLm5leHRBcmd1bWVudHMsIGJhY2ssIChwYXNzZWQsIC4uLmNhbGxiYWNrQXJndW1lbnRzKSA9PiB7XG4gICAgICBpZiAocGFzc2VkKSB7XG4gICAgICAgIGNvbnN0IHN0YXJ0SW5kZXggPSBpbmRleCwgLy8vXG4gICAgICAgICAgICAgIGRlbGV0ZUNvdW50ID0gMSxcbiAgICAgICAgICAgICAgZGVsZXRlZEVsZW1lbnQgPSBlbGVtZW50OyAvLy9cblxuICAgICAgICBhcnJheS5zcGxpY2Uoc3RhcnRJbmRleCwgZGVsZXRlQ291bnQpO1xuXG4gICAgICAgIHJldHVybiBmb3J3YXJkKGRlbGV0ZWRFbGVtZW50LCAuLi5jYWxsYmFja0FyZ3VtZW50cyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBuZXh0KGluZGV4ICsgMSwgLi4uY2FsbGJhY2tBcmd1bWVudHMpO1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIG5leHQoaW5kZXgsIC4uLmluaXRpYWxBcmd1bWVudHMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWF0Y2goYXJyYXlBLCBhcnJheUIsIGNhbGxiYWNrLCAuLi5pbml0aWFsQXJndW1lbnRzKSB7XG4gIGNvbnN0IGZvcndhcmQgPSBpbml0aWFsQXJndW1lbnRzLnBvcCgpLFxuICAgICAgICBiYWNrID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKSxcbiAgICAgICAgYXJyYXlBTGVuZ3RoID0gYXJyYXlBLmxlbmd0aCxcbiAgICAgICAgYXJyYXlCTGVuZ3RoID0gYXJyYXlCLmxlbmd0aDtcblxuICBpZiAoYXJyYXlBTGVuZ3RoICE9PSBhcnJheUJMZW5ndGgpIHtcbiAgICByZXR1cm4gYmFjaygpO1xuICB9XG5cbiAgY29uc3QgbGVuZ3RoID0gYXJyYXlBTGVuZ3RoLCAgLy8vXG4gICAgICAgIGluZGV4ID0gMDtcblxuICBmdW5jdGlvbiBuZXh0KGluZGV4LCAuLi5uZXh0QXJndW1lbnRzKSB7XG4gICAgaWYgKGluZGV4ID09PSBsZW5ndGgpIHtcbiAgICAgIHJldHVybiBmb3J3YXJkKC4uLm5leHRBcmd1bWVudHMpO1xuICAgIH1cblxuICAgIGNvbnN0IGVsZW1lbnRBID0gYXJyYXlBW2luZGV4XSxcbiAgICAgICAgICBlbGVtZW50QiA9IGFycmF5QltpbmRleF07XG5cbiAgICByZXR1cm4gY2FsbGJhY2soZWxlbWVudEEsIGVsZW1lbnRCLCAuLi5uZXh0QXJndW1lbnRzLCBiYWNrLCAoLi4uY2FsbGJhY2tBcmd1bWVudHMpID0+IHtcbiAgICAgIHJldHVybiBuZXh0KGluZGV4ICsgMSwgLi4uY2FsbGJhY2tBcmd1bWVudHMpO1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIG5leHQoaW5kZXgsIC4uLmluaXRpYWxBcmd1bWVudHMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZShhcnJheUEsIGFycmF5QiwgY2FsbGJhY2ssIC4uLmluaXRpYWxBcmd1bWVudHMpIHtcbiAgYXJyYXlBID0gWyAgLy8vXG4gICAgLi4uYXJyYXlBXG4gIF07XG5cbiAgY29uc3QgZm9yd2FyZCA9IGluaXRpYWxBcmd1bWVudHMucG9wKCksXG4gICAgICAgIGJhY2sgPSBpbml0aWFsQXJndW1lbnRzLnBvcCgpO1xuXG4gIGZ1bmN0aW9uIG5leHRQYXNzKC4uLm5leHRBcmd1bWVudHMpIHtcbiAgICBjb25zdCBsZW5ndGggPSBhcnJheUEubGVuZ3RoOyAvLy9cblxuICAgIGlmIChsZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBmb3J3YXJkKC4uLm5leHRBcmd1bWVudHMpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG5leHRFbGVtZW50KGluZGV4LCBzdWNjZXNzLCAuLi5jdXJyZW50QXJndW1lbnRzKSB7XG4gICAgICBpZiAoaW5kZXggPT09IGxlbmd0aCkge1xuICAgICAgICBpZiAoIXN1Y2Nlc3MpIHtcbiAgICAgICAgICByZXR1cm4gYmFjaygpO1xuICAgICAgICB9XG5cbiAgICAgICAgYXJyYXlGaWx0ZXIoYXJyYXlBLCAoZWxlbWVudEEpID0+IHtcbiAgICAgICAgICBjb25zdCBhcnJheUJJbmNsdWRlc0VsZW1lbnRBID0gYXJyYXlCLmluY2x1ZGVzKGVsZW1lbnRBKTtcblxuICAgICAgICAgIGlmICghYXJyYXlCSW5jbHVkZXNFbGVtZW50QSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gbmV4dFBhc3MoLi4uY3VycmVudEFyZ3VtZW50cyk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGVsZW1lbnRBID0gYXJyYXlBW2luZGV4XTtcblxuICAgICAgcmV0dXJuIGNhbGxiYWNrKGVsZW1lbnRBLCAuLi5jdXJyZW50QXJndW1lbnRzLCAoKSA9PiBuZXh0RWxlbWVudChpbmRleCArIDEsIHN1Y2Nlc3MsIC4uLmN1cnJlbnRBcmd1bWVudHMpLCAoLi4uY2FsbGJhY2tBcmd1bWVudHMpID0+IHtcbiAgICAgICAgICBjb25zdCBlbGVtZW50QiA9IGVsZW1lbnRBOyAgLy8vXG5cbiAgICAgICAgICBhcnJheUIucHVzaChlbGVtZW50Qik7XG5cbiAgICAgICAgICByZXR1cm4gbmV4dEVsZW1lbnQoaW5kZXggKyAxLCB0cnVlLCAuLi5jYWxsYmFja0FyZ3VtZW50cyk7XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgaW5kZXggPSAwLFxuICAgICAgICAgIHN1Y2Nlc3MgPSBmYWxzZTtcblxuICAgIHJldHVybiBuZXh0RWxlbWVudChpbmRleCwgc3VjY2VzcywgLi4ubmV4dEFyZ3VtZW50cyk7XG4gIH1cblxuICByZXR1cm4gbmV4dFBhc3MoLi4uaW5pdGlhbEFyZ3VtZW50cyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhbGwoY2FsbGJhY2tzLCAuLi5pbml0aWFsQXJndW1lbnRzKSB7XG4gIHJldHVybiBldmVyeShjYWxsYmFja3MsIChjYWxsYmFjaywgLi4uY2FsbGJhY2tBcmd1bWVudHMpID0+IHtcbiAgICByZXR1cm4gY2FsbGJhY2soLi4uY2FsbGJhY2tBcmd1bWVudHMpO1xuICB9LCAuLi5pbml0aWFsQXJndW1lbnRzKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4aXN0cyhjYWxsYmFja3MsIC4uLmluaXRpYWxBcmd1bWVudHMpIHtcbiAgcmV0dXJuIHNvbWUoY2FsbGJhY2tzLCAoY2FsbGJhY2ssIC4uLmNhbGxiYWNrQXJndW1lbnRzKSA9PiB7XG4gICAgcmV0dXJuIGNhbGxiYWNrKC4uLmNhbGxiYWNrQXJndW1lbnRzKTtcbiAgfSwgLi4uaW5pdGlhbEFyZ3VtZW50cyk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgb25lLFxuICBzb21lLFxuICBlYWNoLFxuICBldmVyeSxcbiAgcmVkdWNlLFxuICBmb3JFYWNoLFxuICBmb3J3YXJkc0V2ZXJ5LFxuICBiYWNrd2FyZHNFdmVyeSxcbiAgZm9yd2FyZHNGb3JFYWNoLFxuICBiYWNrd2FyZHNGb3JFYWNoLFxuICBmaWx0ZXIsXG4gIHBydW5lLFxuICBleHRyYWN0LFxuICBtYXRjaCxcbiAgcmVzb2x2ZSxcbiAgYWxsLFxuICBleGlzdHNcbn07XG4iXSwibmFtZXMiOlsiYWxsIiwiYmFja3dhcmRzRXZlcnkiLCJiYWNrd2FyZHNGb3JFYWNoIiwiZWFjaCIsImV2ZXJ5IiwiZXhpc3RzIiwiZXh0cmFjdCIsImZpbHRlciIsImZvckVhY2giLCJmb3J3YXJkc0V2ZXJ5IiwiZm9yd2FyZHNGb3JFYWNoIiwibWF0Y2giLCJvbmUiLCJwcnVuZSIsInJlZHVjZSIsInJlc29sdmUiLCJzb21lIiwiYXJyYXlGaWx0ZXIiLCJhcnJheVV0aWxpdGllcyIsImFycmF5IiwiY2FsbGJhY2siLCJpbml0aWFsQXJndW1lbnRzIiwiZm9yd2FyZCIsInBvcCIsImJhY2siLCJsZW5ndGgiLCJpbmRleCIsIm5leHQiLCJuZXh0QXJndW1lbnRzIiwiY291bnQiLCJlbGVtZW50IiwiY2FsbGJhY2tBcmd1bWVudHMiLCJpbml0aWFsVmFsdWUiLCJ2YWx1ZSIsImRlbGV0ZWRFbGVtZW50cyIsInBhc3NlZCIsInN0YXJ0SW5kZXgiLCJkZWxldGVDb3VudCIsImRlbGV0ZWRFbGVtZW50Iiwic3BsaWNlIiwidW5zaGlmdCIsInVuZGVmaW5lZCIsImFycmF5QSIsImFycmF5QiIsImFycmF5QUxlbmd0aCIsImFycmF5Qkxlbmd0aCIsImVsZW1lbnRBIiwiZWxlbWVudEIiLCJuZXh0UGFzcyIsIm5leHRFbGVtZW50Iiwic3VjY2VzcyIsImN1cnJlbnRBcmd1bWVudHMiLCJhcnJheUJJbmNsdWRlc0VsZW1lbnRBIiwiaW5jbHVkZXMiLCJwdXNoIiwiY2FsbGJhY2tzIl0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7UUEyWmdCQTtlQUFBQTs7UUFuUEFDO2VBQUFBOztRQTBDQUM7ZUFBQUE7O1FBcU5oQjtlQUFBOztRQTlXZ0JDO2VBQUFBOztRQTJCQUM7ZUFBQUE7O1FBNlVBQztlQUFBQTs7UUF6SEFDO2VBQUFBOztRQWpFQUM7ZUFBQUE7O1FBekdBQztlQUFBQTs7UUFxQkFDO2VBQUFBOztRQTBDQUM7ZUFBQUE7O1FBNElBQztlQUFBQTs7UUFuVUFDO2VBQUFBOztRQWlRQUM7ZUFBQUE7O1FBOUpBQztlQUFBQTs7UUE2UEFDO2VBQUFBOztRQWpVQUM7ZUFBQUE7OzsyQkFuQ2U7QUFFL0IsTUFBTSxFQUFFVCxRQUFRVSxXQUFXLEVBQUUsR0FBR0MseUJBQWM7QUFFdkMsU0FBU04sSUFBSU8sS0FBSyxFQUFFQyxRQUFRLEVBQUUsR0FBR0MsZ0JBQWdCO0lBQ3RELE1BQU1DLFVBQVVELGlCQUFpQkUsR0FBRyxJQUM5QkMsT0FBT0gsaUJBQWlCRSxHQUFHLElBQzNCRSxTQUFTTixNQUFNTSxNQUFNLEVBQ3JCQyxRQUFR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
|