occam-languages 3.0.40 → 3.0.41

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.
@@ -156,7 +156,7 @@ function every(array, callback, ...initialArguments) {
156
156
  return next(index, ...initialArguments, back);
157
157
  }
158
158
  function map(array, callback, ...initialArguments) {
159
- const back = initialArguments.pop(), forward = initialArguments.pop(), arrayA = array, arrayB = [], length = array.length;
159
+ const back = initialArguments.pop(), forward = initialArguments.pop(), arrayA = array, length = array.length;
160
160
  function next(index, arrayB, ...nextArguments) {
161
161
  const back = nextArguments.pop();
162
162
  if (index === length) {
@@ -170,7 +170,7 @@ function map(array, callback, ...initialArguments) {
170
170
  ], ...forwardArguments);
171
171
  }, back, index);
172
172
  }
173
- const index = 0;
173
+ const index = 0, arrayB = [];
174
174
  return next(index, arrayB, ...initialArguments, back);
175
175
  }
176
176
  function reduce(array, initialValue, callback, ...initialArguments) {
@@ -204,76 +204,84 @@ function forEach(array, callback, ...initialArguments) {
204
204
  return next(index, ...initialArguments, back);
205
205
  }
206
206
  function filter(array, callback, ...initialArguments) {
207
- const back = initialArguments.pop(), forward = initialArguments.pop(), deletedElements = [], length = array.length;
208
- function next(index, ...nextArguments) {
207
+ const back = initialArguments.pop(), forward = initialArguments.pop(), length = array.length;
208
+ function next(index, array, deletedElements, ...nextArguments) {
209
209
  const back = nextArguments.pop();
210
210
  if (index === -1) {
211
- return forward(deletedElements, ...nextArguments, back);
211
+ return forward(array, deletedElements, ...nextArguments, back);
212
212
  }
213
213
  const element = array[index];
214
214
  return callback(element, ...nextArguments, (...forwardArguments)=>{
215
- return next(index - 1, ...forwardArguments);
215
+ return next(index - 1, array, deletedElements, ...forwardArguments);
216
216
  }, (exception)=>{
217
217
  if (exception) {
218
218
  return back(exception);
219
219
  }
220
- const startIndex = index, deleteCount = 1, deletedElement = element; ///
221
- array.splice(startIndex, deleteCount);
222
- deletedElements.unshift(deletedElement);
223
- return next(index - 1, ...nextArguments, back);
220
+ const deletedElement = element; ///
221
+ return next(index - 1, [
222
+ ...array.slice(0, index),
223
+ ...array.slice(index + 1)
224
+ ], [
225
+ deletedElement,
226
+ ...deletedElements
227
+ ], ...nextArguments, back);
224
228
  }, index);
225
229
  }
226
- const index = length - 1;
227
- return next(index, ...initialArguments, back);
230
+ const index = length - 1, deletedElements = [];
231
+ return next(index, array, deletedElements, ...initialArguments, back);
228
232
  }
229
233
  function prune(array, callback, ...initialArguments) {
230
234
  const back = initialArguments.pop(), forward = initialArguments.pop(), length = array.length;
231
- function next(index, ...nextArguments) {
235
+ function next(index, array, ...nextArguments) {
232
236
  const back = nextArguments.pop();
233
237
  if (index === length) {
234
- const deletedElement = undefined;
235
- return forward(deletedElement, ...nextArguments, back);
238
+ const deletedElement = undefined; ///
239
+ return forward(array, deletedElement, ...nextArguments, back);
236
240
  }
237
241
  const element = array[index];
238
242
  return callback(element, ...nextArguments, (...forwardArguments)=>{
239
- return next(index + 1, ...forwardArguments);
243
+ return next(index + 1, array, ...forwardArguments);
240
244
  }, (exception)=>{
241
245
  if (exception) {
242
246
  return back(exception);
243
247
  }
244
- const startIndex = index, deleteCount = 1, deletedElement = element; ///
245
- array.splice(startIndex, deleteCount);
246
- return forward(deletedElement, ...nextArguments, back);
248
+ const deletedElement = element; ///
249
+ return forward([
250
+ ...array.slice(0, index),
251
+ ...array.slice(index + 1)
252
+ ], deletedElement, ...nextArguments, back);
247
253
  }, index);
248
254
  }
249
255
  const index = 0;
250
- return next(index, ...initialArguments, back);
256
+ return next(index, array, ...initialArguments, back);
251
257
  }
252
258
  function extract(array, callback, ...initialArguments) {
253
259
  const back = initialArguments.pop(), forward = initialArguments.pop(), length = array.length;
254
- function next(index, ...nextArguments) {
260
+ function next(index, array, ...nextArguments) {
255
261
  const back = nextArguments.pop();
256
262
  if (index === length) {
257
263
  const deletedElement = undefined;
258
- return forward(deletedElement, ...nextArguments, back);
264
+ return forward(array, deletedElement, ...nextArguments, back);
259
265
  }
260
266
  const element = array[index];
261
267
  return callback(element, ...nextArguments, (...forwardArguments)=>{
262
- const startIndex = index, deleteCount = 1, deletedElement = element; ///
263
- array.splice(startIndex, deleteCount);
264
- return forward(deletedElement, ...forwardArguments);
268
+ const deletedElement = element; ///
269
+ return forward([
270
+ ...array.slice(0, index),
271
+ ...array.slice(index + 1)
272
+ ], deletedElement, ...forwardArguments);
265
273
  }, (exception)=>{
266
274
  if (exception) {
267
275
  return back(exception);
268
276
  }
269
- return next(index + 1, ...nextArguments, back);
277
+ return next(index + 1, array, ...nextArguments, back);
270
278
  }, index);
271
279
  }
272
280
  const index = 0;
273
- return next(index, ...initialArguments, back);
281
+ return next(index, array, ...initialArguments, back);
274
282
  }
275
283
  function find(array, callback, ...initialArguments) {
276
- const back = initialArguments.pop(), forward = initialArguments.pop(), elements = [], length = array.length;
284
+ const back = initialArguments.pop(), forward = initialArguments.pop(), length = array.length;
277
285
  function next(index, elements, ...nextArguments) {
278
286
  const back = nextArguments.pop();
279
287
  if (index === length) {
@@ -292,11 +300,11 @@ function find(array, callback, ...initialArguments) {
292
300
  return next(index + 1, elements, ...nextArguments, back);
293
301
  }, index);
294
302
  }
295
- const index = 0;
303
+ const index = 0, elements = [];
296
304
  return next(index, elements, ...initialArguments, back);
297
305
  }
298
306
  function resolve(array, callback, ...initialArguments) {
299
- const back = initialArguments.pop(), forward = initialArguments.pop(), arrayA = array, arrayB = [];
307
+ const back = initialArguments.pop(), forward = initialArguments.pop();
300
308
  function next(arrayA, arrayB, ...nextArguments) {
301
309
  const back = nextArguments.pop(), length = arrayA.length;
302
310
  if (length === 0) {
@@ -313,6 +321,7 @@ function resolve(array, callback, ...initialArguments) {
313
321
  ], ...forwardArguments);
314
322
  }, back);
315
323
  }
324
+ const arrayA = array, arrayB = [];
316
325
  return next(arrayA, arrayB, ...initialArguments, back);
317
326
  }
318
327
  function match(arrayA, arrayB, callback, ...initialArguments) {
@@ -426,4 +435,4 @@ const _default = {
426
435
  exists
427
436
  };
428
437
 
429
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvY29udGludWF0aW9uLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgZnVuY3Rpb24gY3V0KGZvcndhcmQsIGJhY2spIHtcbiAgcmV0dXJuICguLi5mb3J3YXJkQXJndW1lbnRzKSA9PiB7XG4gICAgZm9yd2FyZEFyZ3VtZW50cy5wb3AoKTsgLy8vXG5cbiAgICByZXR1cm4gZm9yd2FyZCguLi5mb3J3YXJkQXJndW1lbnRzLCBiYWNrKTtcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG9uZShhcnJheSwgY2FsbGJhY2ssIC4uLmluaXRpYWxBcmd1bWVudHMpIHtcbiAgY29uc3QgYmFjayA9IGluaXRpYWxBcmd1bWVudHMucG9wKCksXG4gICAgICAgIGZvcndhcmQgPSBpbml0aWFsQXJndW1lbnRzLnBvcCgpLFxuICAgICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgZnVuY3Rpb24gbmV4dChpbmRleCwgY291bnQsIC4uLm5leHRBcmd1bWVudHMpIHtcbiAgICBpZiAoaW5kZXggPT09IGxlbmd0aCkge1xuICAgICAgaWYgKGNvdW50ID09PSAwKSB7XG4gICAgICAgIHJldHVybiBiYWNrKCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmb3J3YXJkKC4uLm5leHRBcmd1bWVudHMsIGJhY2spO1xuICAgIH1cblxuICAgIGNvbnN0IGVsZW1lbnQgPSBhcnJheVtpbmRleF07XG5cbiAgICByZXR1cm4gY2FsbGJhY2soXG4gICAgICBlbGVtZW50LFxuICAgICAgLi4uaW5pdGlhbEFyZ3VtZW50cyxcbiAgICAgICguLi5mb3J3YXJkQXJndW1lbnRzKSA9PiB7XG4gICAgICAgIGlmIChjb3VudCA9PT0gMSkge1xuICAgICAgICAgIHJldHVybiBiYWNrKCk7XG4gICAgICAgIH1cblxuICAgICAgICBmb3J3YXJkQXJndW1lbnRzLnBvcCgpOyAvLy9cblxuICAgICAgICByZXR1cm4gbmV4dChpbmRleCArIDEsIGNvdW50ICsgMSwgLi4uZm9yd2FyZEFyZ3VtZW50cyk7XG4gICAgICB9LFxuICAgICAgKGV4Y2VwdGlvbikgPT4ge1xuICAgICAgICBpZiAoZXhjZXB0aW9uKSB7XG4gICAgICAgICAgcmV0dXJuIGJhY2soZXhjZXB0aW9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXh0KGluZGV4ICsgMSwgY291bnQsIC4uLm5leHRBcmd1bWVudHMpO1xuICAgICAgfSxcbiAgICAgIGluZGV4XG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IGluZGV4ID0gMCxcbiAgICAgICAgY291bnQgPSAwO1xuXG4gIHJldHVybiBuZXh0KGluZGV4LCBjb3VudCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzb21lKGFycmF5LCBjYWxsYmFjaywgLi4uaW5pdGlhbEFyZ3VtZW50cykge1xuICBjb25zdCBiYWNrID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKSxcbiAgICAgICAgZm9yd2FyZCA9IGluaXRpYWxBcmd1bWVudHMucG9wKCksXG4gICAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBmdW5jdGlvbiBuZXh0KGluZGV4KSB7XG4gICAgaWYgKGluZGV4ID09PSBsZW5ndGgpIHtcbiAgICAgIHJldHVybiBiYWNrKCk7XG4gICAgfVxuXG4gICAgY29uc3QgZWxlbWVudCA9IGFycmF5W2luZGV4XTtcblxuICAgIHJldHVybiBjYWxsYmFjayhcbiAgICAgIGVsZW1lbnQsXG4gICAgICAuLi5pbml0aWFsQXJndW1lbnRzLFxuICAgICAgZm9yd2FyZCxcbiAgICAgIChleGNlcHRpb24pID0+IHtcbiAgICAgICAgaWYgKGV4Y2VwdGlvbikge1xuICAgICAgICAgIHJldHVybiBiYWNrKGV4Y2VwdGlvbik7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV4dChpbmRleCArIDEpO1xuICAgICAgfSxcbiAgICAgIGluZGV4XG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IGluZGV4ID0gMDtcblxuICByZXR1cm4gbmV4dChpbmRleCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlYWNoKGFycmF5LCBjYWxsYmFjaywgLi4uaW5pdGlhbEFyZ3VtZW50cykge1xuICBjb25zdCBiYWNrID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKSxcbiAgICAgICAgZm9yd2FyZCA9IGluaXRpYWxBcmd1bWVudHMucG9wKCksXG4gICAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBmdW5jdGlvbiBuZXh0KGluZGV4LCBjb3VudCwgLi4ubmV4dEFyZ3VtZW50cykge1xuICAgIGNvbnN0IGJhY2sgPSBuZXh0QXJndW1lbnRzLnBvcCgpO1xuXG4gICAgaWYgKGluZGV4ID09PSBsZW5ndGgpIHtcbiAgICAgIGlmIChjb3VudCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gYmFjaygpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZm9yd2FyZCguLi5uZXh0QXJndW1lbnRzLCBiYWNrKTtcbiAgICB9XG5cbiAgICBjb25zdCBlbGVtZW50ID0gYXJyYXlbaW5kZXhdO1xuXG4gICAgcmV0dXJuIGNhbGxiYWNrKFxuICAgICAgZWxlbWVudCxcbiAgICAgIC4uLm5leHRBcmd1bWVudHMsXG4gICAgICAoLi4uZm9yd2FyZEFyZ3VtZW50cykgPT4ge1xuICAgICAgICByZXR1cm4gbmV4dChpbmRleCArIDEsIGNvdW50ICsgMSwgLi4uZm9yd2FyZEFyZ3VtZW50cyk7XG4gICAgICB9LFxuICAgICAgYmFjayxcbiAgICAgIGluZGV4XG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IGluZGV4ID0gMCxcbiAgICAgICAgY291bnQgPSAwO1xuXG4gIHJldHVybiBuZXh0KGluZGV4LCBjb3VudCwgLi4uaW5pdGlhbEFyZ3VtZW50cywgYmFjayk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBldmVyeShhcnJheSwgY2FsbGJhY2ssIC4uLmluaXRpYWxBcmd1bWVudHMpIHtcbiAgY29uc3QgYmFjayA9IGluaXRpYWxBcmd1bWVudHMucG9wKCksXG4gICAgICAgIGZvcndhcmQgPSBpbml0aWFsQXJndW1lbnRzLnBvcCgpLFxuICAgICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgZnVuY3Rpb24gbmV4dChpbmRleCwgLi4ubmV4dEFyZ3VtZW50cykge1xuICAgIGNvbnN0IGJhY2sgPSBuZXh0QXJndW1lbnRzLnBvcCgpO1xuXG4gICAgaWYgKGluZGV4ID09PSBsZW5ndGgpIHtcbiAgICAgIHJldHVybiBmb3J3YXJkKC4uLm5leHRBcmd1bWVudHMsIGJhY2spO1xuICAgIH1cblxuICAgIGNvbnN0IGVsZW1lbnQgPSBhcnJheVtpbmRleF07XG5cbiAgICByZXR1cm4gY2FsbGJhY2soXG4gICAgICBlbGVtZW50LFxuICAgICAgLi4ubmV4dEFyZ3VtZW50cyxcbiAgICAgICguLi5mb3J3YXJkQXJndW1lbnRzKSA9PiB7XG4gICAgICAgIHJldHVybiBuZXh0KGluZGV4ICsgMSwgLi4uZm9yd2FyZEFyZ3VtZW50cyk7XG4gICAgICB9LFxuICAgICAgYmFjayxcbiAgICAgIGluZGV4XG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IGluZGV4ID0gMDtcblxuICByZXR1cm4gbmV4dChpbmRleCwgLi4uaW5pdGlhbEFyZ3VtZW50cywgYmFjayk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtYXAoYXJyYXksIGNhbGxiYWNrLCAuLi5pbml0aWFsQXJndW1lbnRzKSB7XG4gIGNvbnN0IGJhY2sgPSBpbml0aWFsQXJndW1lbnRzLnBvcCgpLFxuICAgICAgICBmb3J3YXJkID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKSxcbiAgICAgICAgYXJyYXlBID0gYXJyYXksIC8vL1xuICAgICAgICBhcnJheUIgPSBbXSxcbiAgICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXG4gIGZ1bmN0aW9uIG5leHQoaW5kZXgsIGFycmF5QiwgLi4ubmV4dEFyZ3VtZW50cykge1xuICAgIGNvbnN0IGJhY2sgPSBuZXh0QXJndW1lbnRzLnBvcCgpO1xuXG4gICAgaWYgKGluZGV4ID09PSBsZW5ndGgpIHtcbiAgICAgIHJldHVybiBmb3J3YXJkKGFycmF5QiwgLi4ubmV4dEFyZ3VtZW50cywgYmFjayk7XG4gICAgfVxuXG4gICAgY29uc3QgZWxlbWVudEEgPSBhcnJheUFbaW5kZXhdO1xuXG4gICAgcmV0dXJuIGNhbGxiYWNrKFxuICAgICAgZWxlbWVudEEsXG4gICAgICAuLi5uZXh0QXJndW1lbnRzLFxuICAgICAgKGVsZW1lbnRCLCAuLi5mb3J3YXJkQXJndW1lbnRzKSA9PiB7XG4gICAgICAgIHJldHVybiBuZXh0KGluZGV4ICsgMSwgWyAuLi5hcnJheUIsIGVsZW1lbnRCIF0sIC4uLmZvcndhcmRBcmd1bWVudHMpO1xuICAgICAgfSxcbiAgICAgIGJhY2ssXG4gICAgICBpbmRleFxuICAgICk7XG4gIH1cblxuICBjb25zdCBpbmRleCA9IDA7XG5cbiAgcmV0dXJuIG5leHQoaW5kZXgsIGFycmF5QiwgLi4uaW5pdGlhbEFyZ3VtZW50cywgYmFjayk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWR1Y2UoYXJyYXksIGluaXRpYWxWYWx1ZSwgY2FsbGJhY2ssIC4uLmluaXRpYWxBcmd1bWVudHMpIHtcbiAgY29uc3QgYmFjayA9IGluaXRpYWxBcmd1bWVudHMucG9wKCksXG4gICAgICAgIGZvcndhcmQgPSBpbml0aWFsQXJndW1lbnRzLnBvcCgpLFxuICAgICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgZnVuY3Rpb24gbmV4dChpbmRleCwgdmFsdWUsIC4uLm5leHRBcmd1bWVudHMpIHtcbiAgICBjb25zdCBiYWNrID0gbmV4dEFyZ3VtZW50cy5wb3AoKTtcblxuICAgIGlmIChpbmRleCA9PT0gbGVuZ3RoKSB7XG4gICAgICByZXR1cm4gZm9yd2FyZCh2YWx1ZSwgLi4ubmV4dEFyZ3VtZW50cywgYmFjayk7XG4gICAgfVxuXG4gICAgY29uc3QgZWxlbWVudCA9IGFycmF5W2luZGV4XTtcblxuICAgIHJldHVybiBjYWxsYmFjayhcbiAgICAgIGVsZW1lbnQsXG4gICAgICB2YWx1ZSxcbiAgICAgIC4uLm5leHRBcmd1bWVudHMsXG4gICAgICAodmFsdWUsIC4uLmZvcndhcmRBcmd1bWVudHMpID0+IHtcbiAgICAgICAgcmV0dXJuIG5leHQoaW5kZXggKyAxLCB2YWx1ZSwgLi4uZm9yd2FyZEFyZ3VtZW50cyk7XG4gICAgICB9LFxuICAgICAgYmFjayxcbiAgICAgIGluZGV4XG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IGluZGV4ID0gMDtcblxuICByZXR1cm4gbmV4dChpbmRleCwgaW5pdGlhbFZhbHVlLCAuLi5pbml0aWFsQXJndW1lbnRzLCBiYWNrKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvckVhY2goYXJyYXksIGNhbGxiYWNrLCAuLi5pbml0aWFsQXJndW1lbnRzKSB7XG4gIGNvbnN0IGJhY2sgPSBpbml0aWFsQXJndW1lbnRzLnBvcCgpLFxuICAgICAgICBmb3J3YXJkID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKSxcbiAgICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXG4gIGZ1bmN0aW9uIG5leHQoaW5kZXgsIC4uLm5leHRBcmd1bWVudHMpIHtcbiAgICBjb25zdCBiYWNrID0gbmV4dEFyZ3VtZW50cy5wb3AoKTtcblxuICAgIGlmIChpbmRleCA9PT0gbGVuZ3RoKSB7XG4gICAgICByZXR1cm4gZm9yd2FyZCguLi5uZXh0QXJndW1lbnRzLCBiYWNrKTtcbiAgICB9XG5cbiAgICBjb25zdCBlbGVtZW50ID0gYXJyYXlbaW5kZXhdO1xuXG4gICAgcmV0dXJuIGNhbGxiYWNrKFxuICAgICAgZWxlbWVudCxcbiAgICAgIC4uLm5leHRBcmd1bWVudHMsXG4gICAgICAoLi4uZm9yd2FyZEFyZ3VtZW50cykgPT4ge1xuICAgICAgICByZXR1cm4gbmV4dChpbmRleCArIDEsIC4uLmZvcndhcmRBcmd1bWVudHMpO1xuICAgICAgfSxcbiAgICAgIGJhY2ssXG4gICAgICBpbmRleFxuICAgICk7XG4gIH1cblxuICBjb25zdCBpbmRleCA9IDA7XG5cbiAgcmV0dXJuIG5leHQoaW5kZXgsIC4uLmluaXRpYWxBcmd1bWVudHMsIGJhY2spO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZmlsdGVyKGFycmF5LCBjYWxsYmFjaywgLi4uaW5pdGlhbEFyZ3VtZW50cykge1xuICBjb25zdCBiYWNrID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKSxcbiAgICAgICAgZm9yd2FyZCA9IGluaXRpYWxBcmd1bWVudHMucG9wKCksXG4gICAgICAgIGRlbGV0ZWRFbGVtZW50cyA9IFtdLFxuICAgICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgZnVuY3Rpb24gbmV4dChpbmRleCwgLi4ubmV4dEFyZ3VtZW50cykge1xuICAgIGNvbnN0IGJhY2sgPSBuZXh0QXJndW1lbnRzLnBvcCgpO1xuXG4gICAgaWYgKGluZGV4ID09PSAtMSkge1xuICAgICAgcmV0dXJuIGZvcndhcmQoZGVsZXRlZEVsZW1lbnRzLCAuLi5uZXh0QXJndW1lbnRzLCBiYWNrKTtcbiAgICB9XG5cbiAgICBjb25zdCBlbGVtZW50ID0gYXJyYXlbaW5kZXhdO1xuXG4gICAgcmV0dXJuIGNhbGxiYWNrKFxuICAgICAgZWxlbWVudCxcbiAgICAgIC4uLm5leHRBcmd1bWVudHMsXG4gICAgICAoLi4uZm9yd2FyZEFyZ3VtZW50cykgPT4ge1xuICAgICAgICByZXR1cm4gbmV4dChpbmRleCAtIDEsIC4uLmZvcndhcmRBcmd1bWVudHMpO1xuICAgICAgfSxcbiAgICAgIChleGNlcHRpb24pID0+IHtcbiAgICAgICAgaWYgKGV4Y2VwdGlvbikge1xuICAgICAgICAgIHJldHVybiBiYWNrKGV4Y2VwdGlvbik7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzdGFydEluZGV4ID0gaW5kZXgsIC8vL1xuICAgICAgICAgICAgICBkZWxldGVDb3VudCA9IDEsXG4gICAgICAgICAgICAgIGRlbGV0ZWRFbGVtZW50ID0gZWxlbWVudDsgLy8vXG5cbiAgICAgICAgYXJyYXkuc3BsaWNlKHN0YXJ0SW5kZXgsIGRlbGV0ZUNvdW50KTtcblxuICAgICAgICBkZWxldGVkRWxlbWVudHMudW5zaGlmdChkZWxldGVkRWxlbWVudCk7XG5cbiAgICAgICAgcmV0dXJuIG5leHQoaW5kZXggLSAxLCAuLi5uZXh0QXJndW1lbnRzLCBiYWNrKTtcbiAgICAgIH0sXG4gICAgICBpbmRleFxuICAgICk7XG4gIH1cblxuICBjb25zdCBpbmRleCA9IGxlbmd0aCAtIDE7XG5cbiAgcmV0dXJuIG5leHQoaW5kZXgsIC4uLmluaXRpYWxBcmd1bWVudHMsIGJhY2spO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJ1bmUoYXJyYXksIGNhbGxiYWNrLCAuLi5pbml0aWFsQXJndW1lbnRzKSB7XG4gIGNvbnN0IGJhY2sgPSBpbml0aWFsQXJndW1lbnRzLnBvcCgpLFxuICAgICAgICBmb3J3YXJkID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKSxcbiAgICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXG4gIGZ1bmN0aW9uIG5leHQoaW5kZXgsIC4uLm5leHRBcmd1bWVudHMpIHtcbiAgICBjb25zdCBiYWNrID0gbmV4dEFyZ3VtZW50cy5wb3AoKTtcblxuICAgIGlmIChpbmRleCA9PT0gbGVuZ3RoKSB7XG4gICAgICBjb25zdCBkZWxldGVkRWxlbWVudCA9IHVuZGVmaW5lZDtcblxuICAgICAgcmV0dXJuIGZvcndhcmQoZGVsZXRlZEVsZW1lbnQsIC4uLm5leHRBcmd1bWVudHMsIGJhY2spO1xuICAgIH1cblxuICAgIGNvbnN0IGVsZW1lbnQgPSBhcnJheVtpbmRleF07XG5cbiAgICByZXR1cm4gY2FsbGJhY2soXG4gICAgICBlbGVtZW50LFxuICAgICAgLi4ubmV4dEFyZ3VtZW50cyxcbiAgICAgICguLi5mb3J3YXJkQXJndW1lbnRzKSA9PiB7XG4gICAgICAgIHJldHVybiBuZXh0KGluZGV4ICsgMSwgLi4uZm9yd2FyZEFyZ3VtZW50cyk7XG4gICAgICB9LFxuICAgICAgKGV4Y2VwdGlvbikgPT4ge1xuICAgICAgICBpZiAoZXhjZXB0aW9uKSB7XG4gICAgICAgICAgcmV0dXJuIGJhY2soZXhjZXB0aW9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHN0YXJ0SW5kZXggPSBpbmRleCwgLy8vXG4gICAgICAgICAgICAgIGRlbGV0ZUNvdW50ID0gMSxcbiAgICAgICAgICAgICAgZGVsZXRlZEVsZW1lbnQgPSBlbGVtZW50OyAvLy9cblxuICAgICAgICBhcnJheS5zcGxpY2Uoc3RhcnRJbmRleCwgZGVsZXRlQ291bnQpO1xuXG4gICAgICAgIHJldHVybiBmb3J3YXJkKGRlbGV0ZWRFbGVtZW50LCAuLi5uZXh0QXJndW1lbnRzLCBiYWNrKTtcbiAgICAgIH0sXG4gICAgICBpbmRleFxuICAgICk7XG4gIH1cblxuICBjb25zdCBpbmRleCA9IDA7XG5cbiAgcmV0dXJuIG5leHQoaW5kZXgsIC4uLmluaXRpYWxBcmd1bWVudHMsIGJhY2spO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXh0cmFjdChhcnJheSwgY2FsbGJhY2ssIC4uLmluaXRpYWxBcmd1bWVudHMpIHtcbiAgY29uc3QgYmFjayA9IGluaXRpYWxBcmd1bWVudHMucG9wKCksXG4gICAgICAgIGZvcndhcmQgPSBpbml0aWFsQXJndW1lbnRzLnBvcCgpLFxuICAgICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgZnVuY3Rpb24gbmV4dChpbmRleCwgLi4ubmV4dEFyZ3VtZW50cykge1xuICAgIGNvbnN0IGJhY2sgPSBuZXh0QXJndW1lbnRzLnBvcCgpO1xuXG4gICAgaWYgKGluZGV4ID09PSBsZW5ndGgpIHtcbiAgICAgIGNvbnN0IGRlbGV0ZWRFbGVtZW50ID0gdW5kZWZpbmVkO1xuXG4gICAgICByZXR1cm4gZm9yd2FyZChkZWxldGVkRWxlbWVudCwgLi4ubmV4dEFyZ3VtZW50cywgYmFjayk7XG4gICAgfVxuXG4gICAgY29uc3QgZWxlbWVudCA9IGFycmF5W2luZGV4XTtcblxuICAgIHJldHVybiBjYWxsYmFjayhcbiAgICAgIGVsZW1lbnQsXG4gICAgICAuLi5uZXh0QXJndW1lbnRzLFxuICAgICAgKC4uLmZvcndhcmRBcmd1bWVudHMpID0+IHtcbiAgICAgICAgY29uc3Qgc3RhcnRJbmRleCA9IGluZGV4LCAvLy9cbiAgICAgICAgICAgICAgZGVsZXRlQ291bnQgPSAxLFxuICAgICAgICAgICAgICBkZWxldGVkRWxlbWVudCA9IGVsZW1lbnQ7IC8vL1xuXG4gICAgICAgIGFycmF5LnNwbGljZShzdGFydEluZGV4LCBkZWxldGVDb3VudCk7XG5cbiAgICAgICAgcmV0dXJuIGZvcndhcmQoZGVsZXRlZEVsZW1lbnQsIC4uLmZvcndhcmRBcmd1bWVudHMpO1xuICAgICAgfSxcbiAgICAgIChleGNlcHRpb24pID0+IHtcbiAgICAgICAgaWYgKGV4Y2VwdGlvbikge1xuICAgICAgICAgIHJldHVybiBiYWNrKGV4Y2VwdGlvbik7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV4dChpbmRleCArIDEsIC4uLm5leHRBcmd1bWVudHMsIGJhY2spO1xuICAgICAgfSxcbiAgICAgIGluZGV4XG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IGluZGV4ID0gMDtcblxuICByZXR1cm4gbmV4dChpbmRleCwgLi4uaW5pdGlhbEFyZ3VtZW50cywgYmFjayk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaW5kKGFycmF5LCBjYWxsYmFjaywgLi4uaW5pdGlhbEFyZ3VtZW50cykge1xuICBjb25zdCBiYWNrID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKSxcbiAgICAgICAgZm9yd2FyZCA9IGluaXRpYWxBcmd1bWVudHMucG9wKCksXG4gICAgICAgIGVsZW1lbnRzID0gW10sXG4gICAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBmdW5jdGlvbiBuZXh0KGluZGV4LCBlbGVtZW50cywgLi4ubmV4dEFyZ3VtZW50cykge1xuICAgIGNvbnN0IGJhY2sgPSBuZXh0QXJndW1lbnRzLnBvcCgpO1xuXG4gICAgaWYgKGluZGV4ID09PSBsZW5ndGgpIHtcbiAgICAgIHJldHVybiBmb3J3YXJkKGVsZW1lbnRzLCAuLi5uZXh0QXJndW1lbnRzLCBiYWNrKTtcbiAgICB9XG5cbiAgICBjb25zdCBlbGVtZW50ID0gYXJyYXlbaW5kZXhdO1xuXG4gICAgcmV0dXJuIGNhbGxiYWNrKFxuICAgICAgZWxlbWVudCxcbiAgICAgIC4uLm5leHRBcmd1bWVudHMsXG4gICAgICAoLi4uZm9yd2FyZEFyZ3VtZW50cykgPT4ge1xuICAgICAgICByZXR1cm4gbmV4dChpbmRleCArIDEsIFsgLi4uZWxlbWVudHMsIGVsZW1lbnQgXSwgLi4uZm9yd2FyZEFyZ3VtZW50cyk7XG4gICAgICB9LFxuICAgICAgKGV4Y2VwdGlvbikgPT4ge1xuICAgICAgICBpZiAoZXhjZXB0aW9uKSB7XG4gICAgICAgICAgcmV0dXJuIGJhY2soZXhjZXB0aW9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXh0KGluZGV4ICsgMSwgZWxlbWVudHMsIC4uLm5leHRBcmd1bWVudHMsIGJhY2spO1xuICAgICAgfSxcbiAgICAgIGluZGV4XG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IGluZGV4ID0gMDtcblxuICByZXR1cm4gbmV4dChpbmRleCwgZWxlbWVudHMsIC4uLmluaXRpYWxBcmd1bWVudHMsIGJhY2spO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZShhcnJheSwgY2FsbGJhY2ssIC4uLmluaXRpYWxBcmd1bWVudHMpIHtcbiAgY29uc3QgYmFjayA9IGluaXRpYWxBcmd1bWVudHMucG9wKCksXG4gICAgICAgIGZvcndhcmQgPSBpbml0aWFsQXJndW1lbnRzLnBvcCgpLFxuICAgICAgICBhcnJheUEgPSBhcnJheSwgLy8vXG4gICAgICAgIGFycmF5QiA9IFtdO1xuXG4gIGZ1bmN0aW9uIG5leHQoYXJyYXlBLCBhcnJheUIsIC4uLm5leHRBcmd1bWVudHMpIHtcbiAgICBjb25zdCBiYWNrID0gbmV4dEFyZ3VtZW50cy5wb3AoKSxcbiAgICAgICAgICBsZW5ndGggPSBhcnJheUEubGVuZ3RoO1xuXG4gICAgaWYgKGxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIGZvcndhcmQoYXJyYXlCLCAuLi5uZXh0QXJndW1lbnRzLCBiYWNrKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmluZChcbiAgICAgIGFycmF5QSxcbiAgICAgIGNhbGxiYWNrLFxuICAgICAgLi4ubmV4dEFyZ3VtZW50cyxcbiAgICAgIChlbGVtZW50cywgLi4uZm9yd2FyZEFyZ3VtZW50cykgPT4ge1xuICAgICAgICBjb25zdCBlbGVtZW50c0xlbmd0aCA9IGVsZW1lbnRzLmxlbmd0aDtcblxuICAgICAgICBpZiAoZWxlbWVudHNMZW5ndGggPT09IDApIHtcbiAgICAgICAgICByZXR1cm4gYmFjaygpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5leHQoXG4gICAgICAgICAgYXJyYXlBLmZpbHRlcigoZWxlbWVudCkgPT4gIWVsZW1lbnRzLmluY2x1ZGVzKGVsZW1lbnQpKSxcbiAgICAgICAgICBbIC4uLmFycmF5QiwgLi4uZWxlbWVudHMgXSxcbiAgICAgICAgICAuLi5mb3J3YXJkQXJndW1lbnRzXG4gICAgICAgICk7XG4gICAgICB9LFxuICAgICAgYmFja1xuICAgICk7XG4gIH1cblxuICByZXR1cm4gbmV4dChhcnJheUEsIGFycmF5QiwgLi4uaW5pdGlhbEFyZ3VtZW50cywgYmFjayk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtYXRjaChhcnJheUEsIGFycmF5QiwgY2FsbGJhY2ssIC4uLmluaXRpYWxBcmd1bWVudHMpIHtcbiAgY29uc3QgYmFjayA9IGluaXRpYWxBcmd1bWVudHMucG9wKCksXG4gICAgICAgIGZvcndhcmQgPSBpbml0aWFsQXJndW1lbnRzLnBvcCgpLFxuICAgICAgICBhcnJheUFMZW5ndGggPSBhcnJheUEubGVuZ3RoLFxuICAgICAgICBhcnJheUJMZW5ndGggPSBhcnJheUIubGVuZ3RoLFxuICAgICAgICBsZW5ndGggPSBhcnJheUFMZW5ndGg7ICAvLy9cblxuICBpZiAoYXJyYXlBTGVuZ3RoICE9PSBhcnJheUJMZW5ndGgpIHtcbiAgICByZXR1cm4gYmFjaygpO1xuICB9XG5cbiAgZnVuY3Rpb24gbmV4dChpbmRleCwgLi4ubmV4dEFyZ3VtZW50cykge1xuICAgIGNvbnN0IGJhY2sgPSBuZXh0QXJndW1lbnRzLnBvcCgpO1xuXG4gICAgaWYgKGluZGV4ID09PSBsZW5ndGgpIHtcbiAgICAgIHJldHVybiBmb3J3YXJkKC4uLm5leHRBcmd1bWVudHMsIGJhY2spO1xuICAgIH1cblxuICAgIGNvbnN0IGVsZW1lbnRBID0gYXJyYXlBW2luZGV4XSxcbiAgICAgICAgICBlbGVtZW50QiA9IGFycmF5QltpbmRleF07XG5cbiAgICByZXR1cm4gY2FsbGJhY2soXG4gICAgICBlbGVtZW50QSxcbiAgICAgIGVsZW1lbnRCLFxuICAgICAgLi4ubmV4dEFyZ3VtZW50cyxcbiAgICAgICguLi5mb3J3YXJkQXJndW1lbnRzKSA9PiB7XG4gICAgICAgIHJldHVybiBuZXh0KGluZGV4ICsgMSwgLi4uZm9yd2FyZEFyZ3VtZW50cyk7XG4gICAgICB9LFxuICAgICAgYmFjayxcbiAgICAgIGluZGV4XG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IGluZGV4ID0gMDtcblxuICByZXR1cm4gbmV4dChpbmRleCwgLi4uaW5pdGlhbEFyZ3VtZW50cywgYmFjayk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmb3J3YXJkc0V2ZXJ5KGFycmF5LCBjYWxsYmFjaywgLi4uaW5pdGlhbEFyZ3VtZW50cykge1xuICBjb25zdCBiYWNrID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKSxcbiAgICAgICAgZm9yd2FyZCA9IGluaXRpYWxBcmd1bWVudHMucG9wKCksXG4gICAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBmdW5jdGlvbiBuZXh0KGluZGV4LCAuLi5uZXh0QXJndW1lbnRzKSB7XG4gICAgY29uc3QgYmFjayA9IG5leHRBcmd1bWVudHMucG9wKCk7XG5cbiAgICBpZiAoaW5kZXggPT09IGxlbmd0aCkge1xuICAgICAgcmV0dXJuIGZvcndhcmQoLi4ubmV4dEFyZ3VtZW50cywgYmFjayk7XG4gICAgfVxuXG4gICAgY29uc3QgZWxlbWVudCA9IGFycmF5W2luZGV4XTtcblxuICAgIHJldHVybiBjYWxsYmFjayhcbiAgICAgIGVsZW1lbnQsXG4gICAgICAuLi5uZXh0QXJndW1lbnRzLFxuICAgICAgKC4uLmZvcndhcmRBcmd1bWVudHMpID0+IHtcbiAgICAgICAgcmV0dXJuIG5leHQoaW5kZXggKyAxLCAuLi5mb3J3YXJkQXJndW1lbnRzKTtcbiAgICAgIH0sXG4gICAgICBiYWNrLFxuICAgICAgaW5kZXhcbiAgICApO1xuICB9XG5cbiAgY29uc3QgaW5kZXggPSAwO1xuXG4gIHJldHVybiBuZXh0KGluZGV4LCAuLi5pbml0aWFsQXJndW1lbnRzLCBiYWNrKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJhY2t3YXJkc0V2ZXJ5KGFycmF5LCBjYWxsYmFjaywgLi4uaW5pdGlhbEFyZ3VtZW50cykge1xuICBjb25zdCBiYWNrID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKSxcbiAgICAgICAgZm9yd2FyZCA9IGluaXRpYWxBcmd1bWVudHMucG9wKCksXG4gICAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBmdW5jdGlvbiBuZXh0KGluZGV4LCAuLi5uZXh0QXJndW1lbnRzKSB7XG4gICAgY29uc3QgYmFjayA9IG5leHRBcmd1bWVudHMucG9wKCk7XG5cbiAgICBpZiAoaW5kZXggPT09IC0xKSB7XG4gICAgICByZXR1cm4gZm9yd2FyZCguLi5uZXh0QXJndW1lbnRzLCBiYWNrKTtcbiAgICB9XG5cbiAgICBjb25zdCBlbGVtZW50ID0gYXJyYXlbaW5kZXhdO1xuXG4gICAgcmV0dXJuIGNhbGxiYWNrKFxuICAgICAgZWxlbWVudCxcbiAgICAgIC4uLm5leHRBcmd1bWVudHMsXG4gICAgICAoLi4uZm9yd2FyZEFyZ3VtZW50cykgPT4ge1xuICAgICAgICByZXR1cm4gbmV4dChpbmRleCAtIDEsIC4uLmZvcndhcmRBcmd1bWVudHMpO1xuICAgICAgfSxcbiAgICAgIGJhY2ssXG4gICAgICBpbmRleFxuICAgICk7XG4gIH1cblxuICBjb25zdCBpbmRleCA9IGxlbmd0aCAtIDE7XG5cbiAgcmV0dXJuIG5leHQoaW5kZXgsIC4uLmluaXRpYWxBcmd1bWVudHMsIGJhY2spO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9yd2FyZHNGb3JFYWNoKGFycmF5LCBjYWxsYmFjaywgLi4uaW5pdGlhbEFyZ3VtZW50cykge1xuICBjb25zdCBiYWNrID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKSxcbiAgICAgICAgZm9yd2FyZCA9IGluaXRpYWxBcmd1bWVudHMucG9wKCksXG4gICAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBmdW5jdGlvbiBuZXh0KGluZGV4LCAuLi5uZXh0QXJndW1lbnRzKSB7XG4gICAgY29uc3QgYmFjayA9IG5leHRBcmd1bWVudHMucG9wKCk7XG5cbiAgICBpZiAoaW5kZXggPT09IGxlbmd0aCkge1xuICAgICAgcmV0dXJuIGZvcndhcmQoLi4ubmV4dEFyZ3VtZW50cywgYmFjayk7XG4gICAgfVxuXG4gICAgY29uc3QgZWxlbWVudCA9IGFycmF5W2luZGV4XTtcblxuICAgIHJldHVybiBjYWxsYmFjayhcbiAgICAgIGVsZW1lbnQsXG4gICAgICAuLi5uZXh0QXJndW1lbnRzLFxuICAgICAgKC4uLmZvcndhcmRBcmd1bWVudHMpID0+IHtcbiAgICAgICAgcmV0dXJuIG5leHQoaW5kZXggKyAxLCAuLi5mb3J3YXJkQXJndW1lbnRzKTtcbiAgICAgIH0sXG4gICAgICBiYWNrLFxuICAgICAgaW5kZXhcbiAgICApO1xuICB9XG5cbiAgY29uc3QgaW5kZXggPSAwO1xuXG4gIHJldHVybiBuZXh0KGluZGV4LCAuLi5pbml0aWFsQXJndW1lbnRzLCBiYWNrKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJhY2t3YXJkc0ZvckVhY2goYXJyYXksIGNhbGxiYWNrLCAuLi5pbml0aWFsQXJndW1lbnRzKSB7XG4gIGNvbnN0IGJhY2sgPSBpbml0aWFsQXJndW1lbnRzLnBvcCgpLFxuICAgICAgICBmb3J3YXJkID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKSxcbiAgICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXG4gIGZ1bmN0aW9uIG5leHQoaW5kZXgsIC4uLm5leHRBcmd1bWVudHMpIHtcbiAgICBjb25zdCBiYWNrID0gbmV4dEFyZ3VtZW50cy5wb3AoKTtcblxuICAgIGlmIChpbmRleCA9PT0gLTEpIHtcbiAgICAgIHJldHVybiBmb3J3YXJkKC4uLm5leHRBcmd1bWVudHMsIGJhY2spO1xuICAgIH1cblxuICAgIGNvbnN0IGVsZW1lbnQgPSBhcnJheVtpbmRleF07XG5cbiAgICByZXR1cm4gY2FsbGJhY2soXG4gICAgICBlbGVtZW50LFxuICAgICAgLi4ubmV4dEFyZ3VtZW50cyxcbiAgICAgICguLi5mb3J3YXJkQXJndW1lbnRzKSA9PiB7XG4gICAgICAgIHJldHVybiBuZXh0KGluZGV4IC0gMSwgLi4uZm9yd2FyZEFyZ3VtZW50cyk7XG4gICAgICB9LFxuICAgICAgYmFjayxcbiAgICAgIGluZGV4XG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IGluZGV4ID0gbGVuZ3RoIC0gMTtcblxuICByZXR1cm4gbmV4dChpbmRleCwgLi4uaW5pdGlhbEFyZ3VtZW50cywgYmFjayk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhbGwoY2FsbGJhY2tzLCAuLi5pbml0aWFsQXJndW1lbnRzKSB7XG4gIHJldHVybiBldmVyeShjYWxsYmFja3MsIChjYWxsYmFjaywgLi4uY2FsbGJhY2tBcmd1bWVudHMpID0+IHtcbiAgICByZXR1cm4gY2FsbGJhY2soLi4uY2FsbGJhY2tBcmd1bWVudHMpO1xuICB9LCAuLi5pbml0aWFsQXJndW1lbnRzKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4aXN0cyhjYWxsYmFja3MsIC4uLmluaXRpYWxBcmd1bWVudHMpIHtcbiAgcmV0dXJuIHNvbWUoY2FsbGJhY2tzLCAoY2FsbGJhY2ssIC4uLmNhbGxiYWNrQXJndW1lbnRzKSA9PiB7XG4gICAgcmV0dXJuIGNhbGxiYWNrKC4uLmNhbGxiYWNrQXJndW1lbnRzKTtcbiAgfSwgLi4uaW5pdGlhbEFyZ3VtZW50cyk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgY3V0LFxuICBvbmUsXG4gIHNvbWUsXG4gIGVhY2gsXG4gIGV2ZXJ5LFxuICBtYXAsXG4gIHJlZHVjZSxcbiAgZm9yRWFjaCxcbiAgZmlsdGVyLFxuICBwcnVuZSxcbiAgZXh0cmFjdCxcbiAgZmluZCxcbiAgcmVzb2x2ZSxcbiAgbWF0Y2gsXG4gIGZvcndhcmRzRXZlcnksXG4gIGJhY2t3YXJkc0V2ZXJ5LFxuICBmb3J3YXJkc0ZvckVhY2gsXG4gIGJhY2t3YXJkc0ZvckVhY2gsXG4gIGFsbCxcbiAgZXhpc3RzXG59O1xuIl0sIm5hbWVzIjpbImFsbCIsImJhY2t3YXJkc0V2ZXJ5IiwiYmFja3dhcmRzRm9yRWFjaCIsImN1dCIsImVhY2giLCJldmVyeSIsImV4aXN0cyIsImV4dHJhY3QiLCJmaWx0ZXIiLCJmaW5kIiwiZm9yRWFjaCIsImZvcndhcmRzRXZlcnkiLCJmb3J3YXJkc0ZvckVhY2giLCJtYXAiLCJtYXRjaCIsIm9uZSIsInBydW5lIiwicmVkdWNlIiwicmVzb2x2ZSIsInNvbWUiLCJmb3J3YXJkIiwiYmFjayIsImZvcndhcmRBcmd1bWVudHMiLCJwb3AiLCJhcnJheSIsImNhbGxiYWNrIiwiaW5pdGlhbEFyZ3VtZW50cyIsImxlbmd0aCIsIm5leHQiLCJpbmRleCIsImNvdW50IiwibmV4dEFyZ3VtZW50cyIsImVsZW1lbnQiLCJleGNlcHRpb24iLCJhcnJheUEiLCJhcnJheUIiLCJlbGVtZW50QSIsImVsZW1lbnRCIiwiaW5pdGlhbFZhbHVlIiwidmFsdWUiLCJkZWxldGVkRWxlbWVudHMiLCJzdGFydEluZGV4IiwiZGVsZXRlQ291bnQiLCJkZWxldGVkRWxlbWVudCIsInNwbGljZSIsInVuc2hpZnQiLCJ1bmRlZmluZWQiLCJlbGVtZW50cyIsImVsZW1lbnRzTGVuZ3RoIiwiaW5jbHVkZXMiLCJhcnJheUFMZW5ndGgiLCJhcnJheUJMZW5ndGgiLCJjYWxsYmFja3MiLCJjYWxsYmFja0FyZ3VtZW50cyJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7O1FBbW1CZ0JBO2VBQUFBOztRQTFGQUM7ZUFBQUE7O1FBNERBQztlQUFBQTs7UUFua0JBQztlQUFBQTs7UUE2bUJoQjtlQUFBOztRQXhoQmdCQztlQUFBQTs7UUFtQ0FDO2VBQUFBOztRQStlQUM7ZUFBQUE7O1FBM1JBQztlQUFBQTs7UUF6RkFDO2VBQUFBOztRQXFJQUM7ZUFBQUE7O1FBbktBQztlQUFBQTs7UUFvUkFDO2VBQUFBOztRQTREQUM7ZUFBQUE7O1FBL1lBQztlQUFBQTs7UUE2U0FDO2VBQUFBOztRQTNiQUM7ZUFBQUE7O1FBd1JBQztlQUFBQTs7UUExR0FDO2VBQUFBOztRQXVPQUM7ZUFBQUE7O1FBeFdBQztlQUFBQTs7O0FBckRULFNBQVNoQixJQUFJaUIsT0FBTyxFQUFFQyxJQUFJO0lBQy9CLE9BQU8sQ0FBQyxHQUFHQztRQUNUQSxpQkFBaUJDLEdBQUcsSUFBSSxHQUFHO1FBRTNCLE9BQU9ILFdBQVdFLGtCQUFrQkQ7SUFDdEM7QUFDRjtBQUVPLFNBQVNOLElBQUlTLEtBQUssRUFBRUMsUUFBUSxFQUFFLEdBQUdDLGdCQUFnQjtJQUN0RCxNQUFNTCxPQUFPSyxpQkFBaUJILEdBQUcsSUFDM0JILFVBQVVNLGlCQUFpQkgsR0FBRyxJQUM5QkksU0FBU0gsTUFBTUcsTUFBTTtJQUUzQixTQUFTQyxLQUFLQyxLQUFLLEVBQUVDLEtBQUssRUFBRSxHQUFHQyxhQUFhO1FBQzFDLElBQUlGLFVBQVVGLFFBQVE7WUFDcEIsSUFBSUcsVUFBVSxHQUFHO2dCQUNmLE9BQU9UO1lBQ1Q7WUFFQSxPQUFPRCxXQUFXVyxlQUFlVjtRQUNuQztRQUVBLE1BQU1XLFVBQVVSLEtBQUssQ0FBQ0ssTUFBTTtRQUU1QixPQUFPSixTQUNMTyxZQUNHTixrQkFDSCxDQUFDLEdBQUdKO1lBQ0YsSUFBSVEsVUFBVSxHQUFHO2dCQUNmLE9BQU9UO1lBQ1Q7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
438
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvY29udGludWF0aW9uLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgZnVuY3Rpb24gY3V0KGZvcndhcmQsIGJhY2spIHtcbiAgcmV0dXJuICguLi5mb3J3YXJkQXJndW1lbnRzKSA9PiB7XG4gICAgZm9yd2FyZEFyZ3VtZW50cy5wb3AoKTsgLy8vXG5cbiAgICByZXR1cm4gZm9yd2FyZCguLi5mb3J3YXJkQXJndW1lbnRzLCBiYWNrKTtcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG9uZShhcnJheSwgY2FsbGJhY2ssIC4uLmluaXRpYWxBcmd1bWVudHMpIHtcbiAgY29uc3QgYmFjayA9IGluaXRpYWxBcmd1bWVudHMucG9wKCksXG4gICAgICAgIGZvcndhcmQgPSBpbml0aWFsQXJndW1lbnRzLnBvcCgpLFxuICAgICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgZnVuY3Rpb24gbmV4dChpbmRleCwgY291bnQsIC4uLm5leHRBcmd1bWVudHMpIHtcbiAgICBpZiAoaW5kZXggPT09IGxlbmd0aCkge1xuICAgICAgaWYgKGNvdW50ID09PSAwKSB7XG4gICAgICAgIHJldHVybiBiYWNrKCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmb3J3YXJkKC4uLm5leHRBcmd1bWVudHMsIGJhY2spO1xuICAgIH1cblxuICAgIGNvbnN0IGVsZW1lbnQgPSBhcnJheVtpbmRleF07XG5cbiAgICByZXR1cm4gY2FsbGJhY2soXG4gICAgICBlbGVtZW50LFxuICAgICAgLi4uaW5pdGlhbEFyZ3VtZW50cyxcbiAgICAgICguLi5mb3J3YXJkQXJndW1lbnRzKSA9PiB7XG4gICAgICAgIGlmIChjb3VudCA9PT0gMSkge1xuICAgICAgICAgIHJldHVybiBiYWNrKCk7XG4gICAgICAgIH1cblxuICAgICAgICBmb3J3YXJkQXJndW1lbnRzLnBvcCgpOyAvLy9cblxuICAgICAgICByZXR1cm4gbmV4dChpbmRleCArIDEsIGNvdW50ICsgMSwgLi4uZm9yd2FyZEFyZ3VtZW50cyk7XG4gICAgICB9LFxuICAgICAgKGV4Y2VwdGlvbikgPT4ge1xuICAgICAgICBpZiAoZXhjZXB0aW9uKSB7XG4gICAgICAgICAgcmV0dXJuIGJhY2soZXhjZXB0aW9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXh0KGluZGV4ICsgMSwgY291bnQsIC4uLm5leHRBcmd1bWVudHMpO1xuICAgICAgfSxcbiAgICAgIGluZGV4XG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IGluZGV4ID0gMCxcbiAgICAgICAgY291bnQgPSAwO1xuXG4gIHJldHVybiBuZXh0KGluZGV4LCBjb3VudCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzb21lKGFycmF5LCBjYWxsYmFjaywgLi4uaW5pdGlhbEFyZ3VtZW50cykge1xuICBjb25zdCBiYWNrID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKSxcbiAgICAgICAgZm9yd2FyZCA9IGluaXRpYWxBcmd1bWVudHMucG9wKCksXG4gICAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBmdW5jdGlvbiBuZXh0KGluZGV4KSB7XG4gICAgaWYgKGluZGV4ID09PSBsZW5ndGgpIHtcbiAgICAgIHJldHVybiBiYWNrKCk7XG4gICAgfVxuXG4gICAgY29uc3QgZWxlbWVudCA9IGFycmF5W2luZGV4XTtcblxuICAgIHJldHVybiBjYWxsYmFjayhcbiAgICAgIGVsZW1lbnQsXG4gICAgICAuLi5pbml0aWFsQXJndW1lbnRzLFxuICAgICAgZm9yd2FyZCxcbiAgICAgIChleGNlcHRpb24pID0+IHtcbiAgICAgICAgaWYgKGV4Y2VwdGlvbikge1xuICAgICAgICAgIHJldHVybiBiYWNrKGV4Y2VwdGlvbik7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV4dChpbmRleCArIDEpO1xuICAgICAgfSxcbiAgICAgIGluZGV4XG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IGluZGV4ID0gMDtcblxuICByZXR1cm4gbmV4dChpbmRleCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlYWNoKGFycmF5LCBjYWxsYmFjaywgLi4uaW5pdGlhbEFyZ3VtZW50cykge1xuICBjb25zdCBiYWNrID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKSxcbiAgICAgICAgZm9yd2FyZCA9IGluaXRpYWxBcmd1bWVudHMucG9wKCksXG4gICAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBmdW5jdGlvbiBuZXh0KGluZGV4LCBjb3VudCwgLi4ubmV4dEFyZ3VtZW50cykge1xuICAgIGNvbnN0IGJhY2sgPSBuZXh0QXJndW1lbnRzLnBvcCgpO1xuXG4gICAgaWYgKGluZGV4ID09PSBsZW5ndGgpIHtcbiAgICAgIGlmIChjb3VudCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gYmFjaygpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZm9yd2FyZCguLi5uZXh0QXJndW1lbnRzLCBiYWNrKTtcbiAgICB9XG5cbiAgICBjb25zdCBlbGVtZW50ID0gYXJyYXlbaW5kZXhdO1xuXG4gICAgcmV0dXJuIGNhbGxiYWNrKFxuICAgICAgZWxlbWVudCxcbiAgICAgIC4uLm5leHRBcmd1bWVudHMsXG4gICAgICAoLi4uZm9yd2FyZEFyZ3VtZW50cykgPT4ge1xuICAgICAgICByZXR1cm4gbmV4dChpbmRleCArIDEsIGNvdW50ICsgMSwgLi4uZm9yd2FyZEFyZ3VtZW50cyk7XG4gICAgICB9LFxuICAgICAgYmFjayxcbiAgICAgIGluZGV4XG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IGluZGV4ID0gMCxcbiAgICAgICAgY291bnQgPSAwO1xuXG4gIHJldHVybiBuZXh0KGluZGV4LCBjb3VudCwgLi4uaW5pdGlhbEFyZ3VtZW50cywgYmFjayk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBldmVyeShhcnJheSwgY2FsbGJhY2ssIC4uLmluaXRpYWxBcmd1bWVudHMpIHtcbiAgY29uc3QgYmFjayA9IGluaXRpYWxBcmd1bWVudHMucG9wKCksXG4gICAgICAgIGZvcndhcmQgPSBpbml0aWFsQXJndW1lbnRzLnBvcCgpLFxuICAgICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgZnVuY3Rpb24gbmV4dChpbmRleCwgLi4ubmV4dEFyZ3VtZW50cykge1xuICAgIGNvbnN0IGJhY2sgPSBuZXh0QXJndW1lbnRzLnBvcCgpO1xuXG4gICAgaWYgKGluZGV4ID09PSBsZW5ndGgpIHtcbiAgICAgIHJldHVybiBmb3J3YXJkKC4uLm5leHRBcmd1bWVudHMsIGJhY2spO1xuICAgIH1cblxuICAgIGNvbnN0IGVsZW1lbnQgPSBhcnJheVtpbmRleF07XG5cbiAgICByZXR1cm4gY2FsbGJhY2soXG4gICAgICBlbGVtZW50LFxuICAgICAgLi4ubmV4dEFyZ3VtZW50cyxcbiAgICAgICguLi5mb3J3YXJkQXJndW1lbnRzKSA9PiB7XG4gICAgICAgIHJldHVybiBuZXh0KGluZGV4ICsgMSwgLi4uZm9yd2FyZEFyZ3VtZW50cyk7XG4gICAgICB9LFxuICAgICAgYmFjayxcbiAgICAgIGluZGV4XG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IGluZGV4ID0gMDtcblxuICByZXR1cm4gbmV4dChpbmRleCwgLi4uaW5pdGlhbEFyZ3VtZW50cywgYmFjayk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtYXAoYXJyYXksIGNhbGxiYWNrLCAuLi5pbml0aWFsQXJndW1lbnRzKSB7XG4gIGNvbnN0IGJhY2sgPSBpbml0aWFsQXJndW1lbnRzLnBvcCgpLFxuICAgICAgICBmb3J3YXJkID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKSxcbiAgICAgICAgYXJyYXlBID0gYXJyYXksIC8vL1xuICAgICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgZnVuY3Rpb24gbmV4dChpbmRleCwgYXJyYXlCLCAuLi5uZXh0QXJndW1lbnRzKSB7XG4gICAgY29uc3QgYmFjayA9IG5leHRBcmd1bWVudHMucG9wKCk7XG5cbiAgICBpZiAoaW5kZXggPT09IGxlbmd0aCkge1xuICAgICAgcmV0dXJuIGZvcndhcmQoYXJyYXlCLCAuLi5uZXh0QXJndW1lbnRzLCBiYWNrKTtcbiAgICB9XG5cbiAgICBjb25zdCBlbGVtZW50QSA9IGFycmF5QVtpbmRleF07XG5cbiAgICByZXR1cm4gY2FsbGJhY2soXG4gICAgICBlbGVtZW50QSxcbiAgICAgIC4uLm5leHRBcmd1bWVudHMsXG4gICAgICAoZWxlbWVudEIsIC4uLmZvcndhcmRBcmd1bWVudHMpID0+IHtcbiAgICAgICAgcmV0dXJuIG5leHQoaW5kZXggKyAxLCBbIC4uLmFycmF5QiwgZWxlbWVudEIgXSwgLi4uZm9yd2FyZEFyZ3VtZW50cyk7XG4gICAgICB9LFxuICAgICAgYmFjayxcbiAgICAgIGluZGV4XG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IGluZGV4ID0gMCxcbiAgICAgICAgYXJyYXlCID0gW107XG5cbiAgcmV0dXJuIG5leHQoaW5kZXgsIGFycmF5QiwgLi4uaW5pdGlhbEFyZ3VtZW50cywgYmFjayk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWR1Y2UoYXJyYXksIGluaXRpYWxWYWx1ZSwgY2FsbGJhY2ssIC4uLmluaXRpYWxBcmd1bWVudHMpIHtcbiAgY29uc3QgYmFjayA9IGluaXRpYWxBcmd1bWVudHMucG9wKCksXG4gICAgICAgIGZvcndhcmQgPSBpbml0aWFsQXJndW1lbnRzLnBvcCgpLFxuICAgICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgZnVuY3Rpb24gbmV4dChpbmRleCwgdmFsdWUsIC4uLm5leHRBcmd1bWVudHMpIHtcbiAgICBjb25zdCBiYWNrID0gbmV4dEFyZ3VtZW50cy5wb3AoKTtcblxuICAgIGlmIChpbmRleCA9PT0gbGVuZ3RoKSB7XG4gICAgICByZXR1cm4gZm9yd2FyZCh2YWx1ZSwgLi4ubmV4dEFyZ3VtZW50cywgYmFjayk7XG4gICAgfVxuXG4gICAgY29uc3QgZWxlbWVudCA9IGFycmF5W2luZGV4XTtcblxuICAgIHJldHVybiBjYWxsYmFjayhcbiAgICAgIGVsZW1lbnQsXG4gICAgICB2YWx1ZSxcbiAgICAgIC4uLm5leHRBcmd1bWVudHMsXG4gICAgICAodmFsdWUsIC4uLmZvcndhcmRBcmd1bWVudHMpID0+IHtcbiAgICAgICAgcmV0dXJuIG5leHQoaW5kZXggKyAxLCB2YWx1ZSwgLi4uZm9yd2FyZEFyZ3VtZW50cyk7XG4gICAgICB9LFxuICAgICAgYmFjayxcbiAgICAgIGluZGV4XG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IGluZGV4ID0gMDtcblxuICByZXR1cm4gbmV4dChpbmRleCwgaW5pdGlhbFZhbHVlLCAuLi5pbml0aWFsQXJndW1lbnRzLCBiYWNrKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvckVhY2goYXJyYXksIGNhbGxiYWNrLCAuLi5pbml0aWFsQXJndW1lbnRzKSB7XG4gIGNvbnN0IGJhY2sgPSBpbml0aWFsQXJndW1lbnRzLnBvcCgpLFxuICAgICAgICBmb3J3YXJkID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKSxcbiAgICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXG4gIGZ1bmN0aW9uIG5leHQoaW5kZXgsIC4uLm5leHRBcmd1bWVudHMpIHtcbiAgICBjb25zdCBiYWNrID0gbmV4dEFyZ3VtZW50cy5wb3AoKTtcblxuICAgIGlmIChpbmRleCA9PT0gbGVuZ3RoKSB7XG4gICAgICByZXR1cm4gZm9yd2FyZCguLi5uZXh0QXJndW1lbnRzLCBiYWNrKTtcbiAgICB9XG5cbiAgICBjb25zdCBlbGVtZW50ID0gYXJyYXlbaW5kZXhdO1xuXG4gICAgcmV0dXJuIGNhbGxiYWNrKFxuICAgICAgZWxlbWVudCxcbiAgICAgIC4uLm5leHRBcmd1bWVudHMsXG4gICAgICAoLi4uZm9yd2FyZEFyZ3VtZW50cykgPT4ge1xuICAgICAgICByZXR1cm4gbmV4dChpbmRleCArIDEsIC4uLmZvcndhcmRBcmd1bWVudHMpO1xuICAgICAgfSxcbiAgICAgIGJhY2ssXG4gICAgICBpbmRleFxuICAgICk7XG4gIH1cblxuICBjb25zdCBpbmRleCA9IDA7XG5cbiAgcmV0dXJuIG5leHQoaW5kZXgsIC4uLmluaXRpYWxBcmd1bWVudHMsIGJhY2spO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZmlsdGVyKGFycmF5LCBjYWxsYmFjaywgLi4uaW5pdGlhbEFyZ3VtZW50cykge1xuICBjb25zdCBiYWNrID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKSxcbiAgICAgICAgZm9yd2FyZCA9IGluaXRpYWxBcmd1bWVudHMucG9wKCksXG4gICAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBmdW5jdGlvbiBuZXh0KGluZGV4LCBhcnJheSwgZGVsZXRlZEVsZW1lbnRzLCAuLi5uZXh0QXJndW1lbnRzKSB7XG4gICAgY29uc3QgYmFjayA9IG5leHRBcmd1bWVudHMucG9wKCk7XG5cbiAgICBpZiAoaW5kZXggPT09IC0xKSB7XG4gICAgICByZXR1cm4gZm9yd2FyZChhcnJheSwgZGVsZXRlZEVsZW1lbnRzLCAuLi5uZXh0QXJndW1lbnRzLCBiYWNrKTtcbiAgICB9XG5cbiAgICBjb25zdCBlbGVtZW50ID0gYXJyYXlbaW5kZXhdO1xuXG4gICAgcmV0dXJuIGNhbGxiYWNrKFxuICAgICAgZWxlbWVudCxcbiAgICAgIC4uLm5leHRBcmd1bWVudHMsXG4gICAgICAoLi4uZm9yd2FyZEFyZ3VtZW50cykgPT4ge1xuICAgICAgICByZXR1cm4gbmV4dChpbmRleCAtIDEsIGFycmF5LCBkZWxldGVkRWxlbWVudHMsIC4uLmZvcndhcmRBcmd1bWVudHMpO1xuICAgICAgfSxcbiAgICAgIChleGNlcHRpb24pID0+IHtcbiAgICAgICAgaWYgKGV4Y2VwdGlvbikge1xuICAgICAgICAgIHJldHVybiBiYWNrKGV4Y2VwdGlvbik7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkZWxldGVkRWxlbWVudCA9IGVsZW1lbnQ7IC8vL1xuXG4gICAgICAgIHJldHVybiBuZXh0KFxuICAgICAgICAgIGluZGV4IC0gMSxcbiAgICAgICAgICBbIC4uLmFycmF5LnNsaWNlKDAsIGluZGV4KSwgLi4uYXJyYXkuc2xpY2UoaW5kZXggKyAxKSBdLFxuICAgICAgICAgIFsgZGVsZXRlZEVsZW1lbnQsIC4uLmRlbGV0ZWRFbGVtZW50cyBdLFxuICAgICAgICAgIC4uLm5leHRBcmd1bWVudHMsXG4gICAgICAgICAgYmFja1xuICAgICAgICApO1xuICAgICAgfSxcbiAgICAgIGluZGV4XG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IGluZGV4ID0gbGVuZ3RoIC0gMSxcbiAgICAgICAgZGVsZXRlZEVsZW1lbnRzID0gW107XG5cbiAgcmV0dXJuIG5leHQoaW5kZXgsIGFycmF5LCBkZWxldGVkRWxlbWVudHMsIC4uLmluaXRpYWxBcmd1bWVudHMsIGJhY2spO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJ1bmUoYXJyYXksIGNhbGxiYWNrLCAuLi5pbml0aWFsQXJndW1lbnRzKSB7XG4gIGNvbnN0IGJhY2sgPSBpbml0aWFsQXJndW1lbnRzLnBvcCgpLFxuICAgICAgICBmb3J3YXJkID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKSxcbiAgICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXG4gIGZ1bmN0aW9uIG5leHQoaW5kZXgsIGFycmF5LCAuLi5uZXh0QXJndW1lbnRzKSB7XG4gICAgY29uc3QgYmFjayA9IG5leHRBcmd1bWVudHMucG9wKCk7XG5cbiAgICBpZiAoaW5kZXggPT09IGxlbmd0aCkge1xuICAgICAgY29uc3QgZGVsZXRlZEVsZW1lbnQgPSB1bmRlZmluZWQ7IC8vL1xuXG4gICAgICByZXR1cm4gZm9yd2FyZChhcnJheSwgZGVsZXRlZEVsZW1lbnQsIC4uLm5leHRBcmd1bWVudHMsIGJhY2spO1xuICAgIH1cblxuICAgIGNvbnN0IGVsZW1lbnQgPSBhcnJheVtpbmRleF07XG5cbiAgICByZXR1cm4gY2FsbGJhY2soXG4gICAgICBlbGVtZW50LFxuICAgICAgLi4ubmV4dEFyZ3VtZW50cyxcbiAgICAgICguLi5mb3J3YXJkQXJndW1lbnRzKSA9PiB7XG4gICAgICAgIHJldHVybiBuZXh0KGluZGV4ICsgMSwgYXJyYXksIC4uLmZvcndhcmRBcmd1bWVudHMpO1xuICAgICAgfSxcbiAgICAgIChleGNlcHRpb24pID0+IHtcbiAgICAgICAgaWYgKGV4Y2VwdGlvbikge1xuICAgICAgICAgIHJldHVybiBiYWNrKGV4Y2VwdGlvbik7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkZWxldGVkRWxlbWVudCA9IGVsZW1lbnQ7IC8vL1xuXG4gICAgICAgIHJldHVybiBmb3J3YXJkKFxuICAgICAgICAgIFsgLi4uYXJyYXkuc2xpY2UoMCwgaW5kZXgpLCAuLi5hcnJheS5zbGljZShpbmRleCArIDEpIF0sXG4gICAgICAgICAgZGVsZXRlZEVsZW1lbnQsXG4gICAgICAgICAgLi4ubmV4dEFyZ3VtZW50cyxcbiAgICAgICAgICBiYWNrXG4gICAgICAgICk7XG4gICAgICB9LFxuICAgICAgaW5kZXhcbiAgICApO1xuICB9XG5cbiAgY29uc3QgaW5kZXggPSAwO1xuXG4gIHJldHVybiBuZXh0KGluZGV4LCBhcnJheSwgLi4uaW5pdGlhbEFyZ3VtZW50cywgYmFjayk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0KGFycmF5LCBjYWxsYmFjaywgLi4uaW5pdGlhbEFyZ3VtZW50cykge1xuICBjb25zdCBiYWNrID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKSxcbiAgICAgICAgZm9yd2FyZCA9IGluaXRpYWxBcmd1bWVudHMucG9wKCksXG4gICAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBmdW5jdGlvbiBuZXh0KGluZGV4LCBhcnJheSwgLi4ubmV4dEFyZ3VtZW50cykge1xuICAgIGNvbnN0IGJhY2sgPSBuZXh0QXJndW1lbnRzLnBvcCgpO1xuXG4gICAgaWYgKGluZGV4ID09PSBsZW5ndGgpIHtcbiAgICAgIGNvbnN0IGRlbGV0ZWRFbGVtZW50ID0gdW5kZWZpbmVkO1xuXG4gICAgICByZXR1cm4gZm9yd2FyZChhcnJheSwgZGVsZXRlZEVsZW1lbnQsIC4uLm5leHRBcmd1bWVudHMsIGJhY2spO1xuICAgIH1cblxuICAgIGNvbnN0IGVsZW1lbnQgPSBhcnJheVtpbmRleF07XG5cbiAgICByZXR1cm4gY2FsbGJhY2soXG4gICAgICBlbGVtZW50LFxuICAgICAgLi4ubmV4dEFyZ3VtZW50cyxcbiAgICAgICguLi5mb3J3YXJkQXJndW1lbnRzKSA9PiB7XG4gICAgICAgIGNvbnN0IGRlbGV0ZWRFbGVtZW50ID0gZWxlbWVudDsgLy8vXG5cbiAgICAgICAgcmV0dXJuIGZvcndhcmQoXG4gICAgICAgICAgWyAuLi5hcnJheS5zbGljZSgwLCBpbmRleCksIC4uLmFycmF5LnNsaWNlKGluZGV4ICsgMSkgXSxcbiAgICAgICAgICBkZWxldGVkRWxlbWVudCxcbiAgICAgICAgICAuLi5mb3J3YXJkQXJndW1lbnRzXG4gICAgICAgICk7XG4gICAgICB9LFxuICAgICAgKGV4Y2VwdGlvbikgPT4ge1xuICAgICAgICBpZiAoZXhjZXB0aW9uKSB7XG4gICAgICAgICAgcmV0dXJuIGJhY2soZXhjZXB0aW9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXh0KGluZGV4ICsgMSwgYXJyYXksIC4uLm5leHRBcmd1bWVudHMsIGJhY2spO1xuICAgICAgfSxcbiAgICAgIGluZGV4XG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IGluZGV4ID0gMDtcblxuICByZXR1cm4gbmV4dChpbmRleCwgYXJyYXksIC4uLmluaXRpYWxBcmd1bWVudHMsIGJhY2spO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZmluZChhcnJheSwgY2FsbGJhY2ssIC4uLmluaXRpYWxBcmd1bWVudHMpIHtcbiAgY29uc3QgYmFjayA9IGluaXRpYWxBcmd1bWVudHMucG9wKCksXG4gICAgICAgIGZvcndhcmQgPSBpbml0aWFsQXJndW1lbnRzLnBvcCgpLFxuICAgICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgZnVuY3Rpb24gbmV4dChpbmRleCwgZWxlbWVudHMsIC4uLm5leHRBcmd1bWVudHMpIHtcbiAgICBjb25zdCBiYWNrID0gbmV4dEFyZ3VtZW50cy5wb3AoKTtcblxuICAgIGlmIChpbmRleCA9PT0gbGVuZ3RoKSB7XG4gICAgICByZXR1cm4gZm9yd2FyZChlbGVtZW50cywgLi4ubmV4dEFyZ3VtZW50cywgYmFjayk7XG4gICAgfVxuXG4gICAgY29uc3QgZWxlbWVudCA9IGFycmF5W2luZGV4XTtcblxuICAgIHJldHVybiBjYWxsYmFjayhcbiAgICAgIGVsZW1lbnQsXG4gICAgICAuLi5uZXh0QXJndW1lbnRzLFxuICAgICAgKC4uLmZvcndhcmRBcmd1bWVudHMpID0+IHtcbiAgICAgICAgcmV0dXJuIG5leHQoaW5kZXggKyAxLCBbIC4uLmVsZW1lbnRzLCBlbGVtZW50IF0sIC4uLmZvcndhcmRBcmd1bWVudHMpO1xuICAgICAgfSxcbiAgICAgIChleGNlcHRpb24pID0+IHtcbiAgICAgICAgaWYgKGV4Y2VwdGlvbikge1xuICAgICAgICAgIHJldHVybiBiYWNrKGV4Y2VwdGlvbik7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV4dChpbmRleCArIDEsIGVsZW1lbnRzLCAuLi5uZXh0QXJndW1lbnRzLCBiYWNrKTtcbiAgICAgIH0sXG4gICAgICBpbmRleFxuICAgICk7XG4gIH1cblxuICBjb25zdCBpbmRleCA9IDAsXG4gICAgICAgIGVsZW1lbnRzID0gW107XG5cbiAgcmV0dXJuIG5leHQoaW5kZXgsIGVsZW1lbnRzLCAuLi5pbml0aWFsQXJndW1lbnRzLCBiYWNrKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmUoYXJyYXksIGNhbGxiYWNrLCAuLi5pbml0aWFsQXJndW1lbnRzKSB7XG4gIGNvbnN0IGJhY2sgPSBpbml0aWFsQXJndW1lbnRzLnBvcCgpLFxuICAgICAgICBmb3J3YXJkID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKTtcblxuICBmdW5jdGlvbiBuZXh0KGFycmF5QSwgYXJyYXlCLCAuLi5uZXh0QXJndW1lbnRzKSB7XG4gICAgY29uc3QgYmFjayA9IG5leHRBcmd1bWVudHMucG9wKCksXG4gICAgICAgICAgbGVuZ3RoID0gYXJyYXlBLmxlbmd0aDtcblxuICAgIGlmIChsZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBmb3J3YXJkKGFycmF5QiwgLi4ubmV4dEFyZ3VtZW50cywgYmFjayk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZpbmQoXG4gICAgICBhcnJheUEsXG4gICAgICBjYWxsYmFjayxcbiAgICAgIC4uLm5leHRBcmd1bWVudHMsXG4gICAgICAoZWxlbWVudHMsIC4uLmZvcndhcmRBcmd1bWVudHMpID0+IHtcbiAgICAgICAgY29uc3QgZWxlbWVudHNMZW5ndGggPSBlbGVtZW50cy5sZW5ndGg7XG5cbiAgICAgICAgaWYgKGVsZW1lbnRzTGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgcmV0dXJuIGJhY2soKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXh0KFxuICAgICAgICAgIGFycmF5QS5maWx0ZXIoKGVsZW1lbnQpID0+ICFlbGVtZW50cy5pbmNsdWRlcyhlbGVtZW50KSksXG4gICAgICAgICAgWyAuLi5hcnJheUIsIC4uLmVsZW1lbnRzIF0sXG4gICAgICAgICAgLi4uZm9yd2FyZEFyZ3VtZW50c1xuICAgICAgICApO1xuICAgICAgfSxcbiAgICAgIGJhY2tcbiAgICApO1xuICB9XG5cbiAgY29uc3QgYXJyYXlBID0gYXJyYXksIC8vL1xuICAgICAgICBhcnJheUIgPSBbXTtcblxuICByZXR1cm4gbmV4dChhcnJheUEsIGFycmF5QiwgLi4uaW5pdGlhbEFyZ3VtZW50cywgYmFjayk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtYXRjaChhcnJheUEsIGFycmF5QiwgY2FsbGJhY2ssIC4uLmluaXRpYWxBcmd1bWVudHMpIHtcbiAgY29uc3QgYmFjayA9IGluaXRpYWxBcmd1bWVudHMucG9wKCksXG4gICAgICAgIGZvcndhcmQgPSBpbml0aWFsQXJndW1lbnRzLnBvcCgpLFxuICAgICAgICBhcnJheUFMZW5ndGggPSBhcnJheUEubGVuZ3RoLFxuICAgICAgICBhcnJheUJMZW5ndGggPSBhcnJheUIubGVuZ3RoLFxuICAgICAgICBsZW5ndGggPSBhcnJheUFMZW5ndGg7ICAvLy9cblxuICBpZiAoYXJyYXlBTGVuZ3RoICE9PSBhcnJheUJMZW5ndGgpIHtcbiAgICByZXR1cm4gYmFjaygpO1xuICB9XG5cbiAgZnVuY3Rpb24gbmV4dChpbmRleCwgLi4ubmV4dEFyZ3VtZW50cykge1xuICAgIGNvbnN0IGJhY2sgPSBuZXh0QXJndW1lbnRzLnBvcCgpO1xuXG4gICAgaWYgKGluZGV4ID09PSBsZW5ndGgpIHtcbiAgICAgIHJldHVybiBmb3J3YXJkKC4uLm5leHRBcmd1bWVudHMsIGJhY2spO1xuICAgIH1cblxuICAgIGNvbnN0IGVsZW1lbnRBID0gYXJyYXlBW2luZGV4XSxcbiAgICAgICAgICBlbGVtZW50QiA9IGFycmF5QltpbmRleF07XG5cbiAgICByZXR1cm4gY2FsbGJhY2soXG4gICAgICBlbGVtZW50QSxcbiAgICAgIGVsZW1lbnRCLFxuICAgICAgLi4ubmV4dEFyZ3VtZW50cyxcbiAgICAgICguLi5mb3J3YXJkQXJndW1lbnRzKSA9PiB7XG4gICAgICAgIHJldHVybiBuZXh0KGluZGV4ICsgMSwgLi4uZm9yd2FyZEFyZ3VtZW50cyk7XG4gICAgICB9LFxuICAgICAgYmFjayxcbiAgICAgIGluZGV4XG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IGluZGV4ID0gMDtcblxuICByZXR1cm4gbmV4dChpbmRleCwgLi4uaW5pdGlhbEFyZ3VtZW50cywgYmFjayk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmb3J3YXJkc0V2ZXJ5KGFycmF5LCBjYWxsYmFjaywgLi4uaW5pdGlhbEFyZ3VtZW50cykge1xuICBjb25zdCBiYWNrID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKSxcbiAgICAgICAgZm9yd2FyZCA9IGluaXRpYWxBcmd1bWVudHMucG9wKCksXG4gICAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBmdW5jdGlvbiBuZXh0KGluZGV4LCAuLi5uZXh0QXJndW1lbnRzKSB7XG4gICAgY29uc3QgYmFjayA9IG5leHRBcmd1bWVudHMucG9wKCk7XG5cbiAgICBpZiAoaW5kZXggPT09IGxlbmd0aCkge1xuICAgICAgcmV0dXJuIGZvcndhcmQoLi4ubmV4dEFyZ3VtZW50cywgYmFjayk7XG4gICAgfVxuXG4gICAgY29uc3QgZWxlbWVudCA9IGFycmF5W2luZGV4XTtcblxuICAgIHJldHVybiBjYWxsYmFjayhcbiAgICAgIGVsZW1lbnQsXG4gICAgICAuLi5uZXh0QXJndW1lbnRzLFxuICAgICAgKC4uLmZvcndhcmRBcmd1bWVudHMpID0+IHtcbiAgICAgICAgcmV0dXJuIG5leHQoaW5kZXggKyAxLCAuLi5mb3J3YXJkQXJndW1lbnRzKTtcbiAgICAgIH0sXG4gICAgICBiYWNrLFxuICAgICAgaW5kZXhcbiAgICApO1xuICB9XG5cbiAgY29uc3QgaW5kZXggPSAwO1xuXG4gIHJldHVybiBuZXh0KGluZGV4LCAuLi5pbml0aWFsQXJndW1lbnRzLCBiYWNrKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJhY2t3YXJkc0V2ZXJ5KGFycmF5LCBjYWxsYmFjaywgLi4uaW5pdGlhbEFyZ3VtZW50cykge1xuICBjb25zdCBiYWNrID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKSxcbiAgICAgICAgZm9yd2FyZCA9IGluaXRpYWxBcmd1bWVudHMucG9wKCksXG4gICAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBmdW5jdGlvbiBuZXh0KGluZGV4LCAuLi5uZXh0QXJndW1lbnRzKSB7XG4gICAgY29uc3QgYmFjayA9IG5leHRBcmd1bWVudHMucG9wKCk7XG5cbiAgICBpZiAoaW5kZXggPT09IC0xKSB7XG4gICAgICByZXR1cm4gZm9yd2FyZCguLi5uZXh0QXJndW1lbnRzLCBiYWNrKTtcbiAgICB9XG5cbiAgICBjb25zdCBlbGVtZW50ID0gYXJyYXlbaW5kZXhdO1xuXG4gICAgcmV0dXJuIGNhbGxiYWNrKFxuICAgICAgZWxlbWVudCxcbiAgICAgIC4uLm5leHRBcmd1bWVudHMsXG4gICAgICAoLi4uZm9yd2FyZEFyZ3VtZW50cykgPT4ge1xuICAgICAgICByZXR1cm4gbmV4dChpbmRleCAtIDEsIC4uLmZvcndhcmRBcmd1bWVudHMpO1xuICAgICAgfSxcbiAgICAgIGJhY2ssXG4gICAgICBpbmRleFxuICAgICk7XG4gIH1cblxuICBjb25zdCBpbmRleCA9IGxlbmd0aCAtIDE7XG5cbiAgcmV0dXJuIG5leHQoaW5kZXgsIC4uLmluaXRpYWxBcmd1bWVudHMsIGJhY2spO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9yd2FyZHNGb3JFYWNoKGFycmF5LCBjYWxsYmFjaywgLi4uaW5pdGlhbEFyZ3VtZW50cykge1xuICBjb25zdCBiYWNrID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKSxcbiAgICAgICAgZm9yd2FyZCA9IGluaXRpYWxBcmd1bWVudHMucG9wKCksXG4gICAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBmdW5jdGlvbiBuZXh0KGluZGV4LCAuLi5uZXh0QXJndW1lbnRzKSB7XG4gICAgY29uc3QgYmFjayA9IG5leHRBcmd1bWVudHMucG9wKCk7XG5cbiAgICBpZiAoaW5kZXggPT09IGxlbmd0aCkge1xuICAgICAgcmV0dXJuIGZvcndhcmQoLi4ubmV4dEFyZ3VtZW50cywgYmFjayk7XG4gICAgfVxuXG4gICAgY29uc3QgZWxlbWVudCA9IGFycmF5W2luZGV4XTtcblxuICAgIHJldHVybiBjYWxsYmFjayhcbiAgICAgIGVsZW1lbnQsXG4gICAgICAuLi5uZXh0QXJndW1lbnRzLFxuICAgICAgKC4uLmZvcndhcmRBcmd1bWVudHMpID0+IHtcbiAgICAgICAgcmV0dXJuIG5leHQoaW5kZXggKyAxLCAuLi5mb3J3YXJkQXJndW1lbnRzKTtcbiAgICAgIH0sXG4gICAgICBiYWNrLFxuICAgICAgaW5kZXhcbiAgICApO1xuICB9XG5cbiAgY29uc3QgaW5kZXggPSAwO1xuXG4gIHJldHVybiBuZXh0KGluZGV4LCAuLi5pbml0aWFsQXJndW1lbnRzLCBiYWNrKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJhY2t3YXJkc0ZvckVhY2goYXJyYXksIGNhbGxiYWNrLCAuLi5pbml0aWFsQXJndW1lbnRzKSB7XG4gIGNvbnN0IGJhY2sgPSBpbml0aWFsQXJndW1lbnRzLnBvcCgpLFxuICAgICAgICBmb3J3YXJkID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKSxcbiAgICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXG4gIGZ1bmN0aW9uIG5leHQoaW5kZXgsIC4uLm5leHRBcmd1bWVudHMpIHtcbiAgICBjb25zdCBiYWNrID0gbmV4dEFyZ3VtZW50cy5wb3AoKTtcblxuICAgIGlmIChpbmRleCA9PT0gLTEpIHtcbiAgICAgIHJldHVybiBmb3J3YXJkKC4uLm5leHRBcmd1bWVudHMsIGJhY2spO1xuICAgIH1cblxuICAgIGNvbnN0IGVsZW1lbnQgPSBhcnJheVtpbmRleF07XG5cbiAgICByZXR1cm4gY2FsbGJhY2soXG4gICAgICBlbGVtZW50LFxuICAgICAgLi4ubmV4dEFyZ3VtZW50cyxcbiAgICAgICguLi5mb3J3YXJkQXJndW1lbnRzKSA9PiB7XG4gICAgICAgIHJldHVybiBuZXh0KGluZGV4IC0gMSwgLi4uZm9yd2FyZEFyZ3VtZW50cyk7XG4gICAgICB9LFxuICAgICAgYmFjayxcbiAgICAgIGluZGV4XG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IGluZGV4ID0gbGVuZ3RoIC0gMTtcblxuICByZXR1cm4gbmV4dChpbmRleCwgLi4uaW5pdGlhbEFyZ3VtZW50cywgYmFjayk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhbGwoY2FsbGJhY2tzLCAuLi5pbml0aWFsQXJndW1lbnRzKSB7XG4gIHJldHVybiBldmVyeShjYWxsYmFja3MsIChjYWxsYmFjaywgLi4uY2FsbGJhY2tBcmd1bWVudHMpID0+IHtcbiAgICByZXR1cm4gY2FsbGJhY2soLi4uY2FsbGJhY2tBcmd1bWVudHMpO1xuICB9LCAuLi5pbml0aWFsQXJndW1lbnRzKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4aXN0cyhjYWxsYmFja3MsIC4uLmluaXRpYWxBcmd1bWVudHMpIHtcbiAgcmV0dXJuIHNvbWUoY2FsbGJhY2tzLCAoY2FsbGJhY2ssIC4uLmNhbGxiYWNrQXJndW1lbnRzKSA9PiB7XG4gICAgcmV0dXJuIGNhbGxiYWNrKC4uLmNhbGxiYWNrQXJndW1lbnRzKTtcbiAgfSwgLi4uaW5pdGlhbEFyZ3VtZW50cyk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgY3V0LFxuICBvbmUsXG4gIHNvbWUsXG4gIGVhY2gsXG4gIGV2ZXJ5LFxuICBtYXAsXG4gIHJlZHVjZSxcbiAgZm9yRWFjaCxcbiAgZmlsdGVyLFxuICBwcnVuZSxcbiAgZXh0cmFjdCxcbiAgZmluZCxcbiAgcmVzb2x2ZSxcbiAgbWF0Y2gsXG4gIGZvcndhcmRzRXZlcnksXG4gIGJhY2t3YXJkc0V2ZXJ5LFxuICBmb3J3YXJkc0ZvckVhY2gsXG4gIGJhY2t3YXJkc0ZvckVhY2gsXG4gIGFsbCxcbiAgZXhpc3RzXG59O1xuIl0sIm5hbWVzIjpbImFsbCIsImJhY2t3YXJkc0V2ZXJ5IiwiYmFja3dhcmRzRm9yRWFjaCIsImN1dCIsImVhY2giLCJldmVyeSIsImV4aXN0cyIsImV4dHJhY3QiLCJmaWx0ZXIiLCJmaW5kIiwiZm9yRWFjaCIsImZvcndhcmRzRXZlcnkiLCJmb3J3YXJkc0ZvckVhY2giLCJtYXAiLCJtYXRjaCIsIm9uZSIsInBydW5lIiwicmVkdWNlIiwicmVzb2x2ZSIsInNvbWUiLCJmb3J3YXJkIiwiYmFjayIsImZvcndhcmRBcmd1bWVudHMiLCJwb3AiLCJhcnJheSIsImNhbGxiYWNrIiwiaW5pdGlhbEFyZ3VtZW50cyIsImxlbmd0aCIsIm5leHQiLCJpbmRleCIsImNvdW50IiwibmV4dEFyZ3VtZW50cyIsImVsZW1lbnQiLCJleGNlcHRpb24iLCJhcnJheUEiLCJhcnJheUIiLCJlbGVtZW50QSIsImVsZW1lbnRCIiwiaW5pdGlhbFZhbHVlIiwidmFsdWUiLCJkZWxldGVkRWxlbWVudHMiLCJkZWxldGVkRWxlbWVudCIsInNsaWNlIiwidW5kZWZpbmVkIiwiZWxlbWVudHMiLCJlbGVtZW50c0xlbmd0aCIsImluY2x1ZGVzIiwiYXJyYXlBTGVuZ3RoIiwiYXJyYXlCTGVuZ3RoIiwiY2FsbGJhY2tzIiwiY2FsbGJhY2tBcmd1bWVudHMiXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7OztRQXFtQmdCQTtlQUFBQTs7UUExRkFDO2VBQUFBOztRQTREQUM7ZUFBQUE7O1FBcmtCQUM7ZUFBQUE7O1FBK21CaEI7ZUFBQTs7UUExaEJnQkM7ZUFBQUE7O1FBbUNBQztlQUFBQTs7UUFpZkFDO2VBQUFBOztRQTVSQUM7ZUFBQUE7O1FBMUZBQztlQUFBQTs7UUFzSUFDO2VBQUFBOztRQXBLQUM7ZUFBQUE7O1FBc1JBQztlQUFBQTs7UUE0REFDO2VBQUFBOztRQWpaQUM7ZUFBQUE7O1FBK1NBQztlQUFBQTs7UUE3YkFDO2VBQUFBOztRQXdSQUM7ZUFBQUE7O1FBMUdBQztlQUFBQTs7UUF3T0FDO2VBQUFBOztRQXpXQUM7ZUFBQUE7OztBQXJEVCxTQUFTaEIsSUFBSWlCLE9BQU8sRUFBRUMsSUFBSTtJQUMvQixPQUFPLENBQUMsR0FBR0M7UUFDVEEsaUJBQWlCQyxHQUFHLElBQUksR0FBRztRQUUzQixPQUFPSCxXQUFXRSxrQkFBa0JEO0lBQ3RDO0FBQ0Y7QUFFTyxTQUFTTixJQUFJUyxLQUFLLEVBQUVDLFFBQVEsRUFBRSxHQUFHQyxnQkFBZ0I7SUFDdEQsTUFBTUwsT0FBT0ssaUJBQWlCSCxHQUFHLElBQzNCSCxVQUFVTSxpQkFBaUJILEdBQUcsSUFDOUJJLFNBQVNILE1BQU1HLE1BQU07SUFFM0IsU0FBU0MsS0FBS0MsS0FBSyxFQUFFQyxLQUFLLEVBQUUsR0FBR0MsYUFBYTtRQUMxQyxJQUFJRixVQUFVRixRQUFRO1lBQ3BCLElBQUlHLFVBQVUsR0FBRztnQkFDZixPQUFPVDtZQUNUO1lBRUEsT0FBT0QsV0FBV1csZUFBZVY7UUFDbkM7UUFFQSxNQUFNVyxVQUFVUixLQUFLLENBQUNLLE1BQU07UUFFNUIsT0FBT0osU0FDTE8sWUFDR04sa0JBQ0gsQ0FBQyxHQUFHSjtZQUNGLElBQUlRLFVBQVUsR0FBRztnQkFDZixPQUFPVDtZQUNUO1lBRUFDLGlCQUFpQkMsR0FBRyxJQUFJLEdBQUc7WUFFM0IsT0FBT0ssS0FBS0MsUUFBUSxHQUFHQyxRQUFRLE1BQU1SO1FBQ3ZDLEdBQ0EsQ0FBQ1c7WUFDQyxJQUFJQSxXQUFXO2dCQUNiLE9BQU9aLEtBQUtZO1lBQ2Q7WUFFQSxPQUFPTCxLQUFLQyxRQUFRLEdBQUdDLFVBQVVDO1FBQ25DLEdBQ0FGO0lBRUo7SUFFQSxNQUFNQSxRQUFRLEdBQ1JDLFFBQVE7SUFFZCxPQUFPRixLQUFLQyxPQUFPQztBQUNyQjtBQUVPLFNBQVNYLEtBQUtLLEtBQUssRUFBRUMsUUFBUSxFQUFFLEdBQUdDLGdCQUFnQjtJQUN2RCxNQUFNTCxPQUFPSyxpQkFBaUJILEdBQUcsSUFDM0JILFVBQVVNLGlCQUFpQkgsR0FBRyxJQUM5QkksU0FBU0gsTUFBTUcsTUFBTTtJQUUzQixTQUFTQyxLQUFLQyxLQUFLO1FBQ2pCLElBQUlBLFVBQVVGLFFBQVE7WUFDcEIsT0FBT047UUFDVDtRQUVBLE1BQU1XLFVBQVVSLEtBQUssQ0FBQ0ssTUFBTTtRQUU1QixPQUFPSixTQUNMTyxZQUNHTixrQkFDSE4sU0FDQSxDQUFDYTtZQUNDLElBQUlBLFdBQVc7Z0JBQ2IsT0FBT1osS0FBS1k7WUFDZDtZQUVBLE9BQU9MLEtBQUtDLFFBQVE7UUFDdEIsR0FDQUE7SUFFSjtJQUVBLE1BQU1BLFFBQVE7SUFFZCxPQUFPRCxLQUFLQztBQUNkO0FBRU8sU0FBU3pCLEtBQUtvQixLQUFLLEVBQUVDLFFBQVEsRUFBRSxHQUFHQyxnQkFBZ0I7SUFDdkQsTUFBTUwsT0FBT0ssaUJBQWlCSCxHQUFHLElBQzNCSCxVQUFVTSxpQkFBaUJILEdBQUcsSUFDOUJJLFNBQVNILE1BQU1HLE1BQU07SUFFM0IsU0FBU0MsS0FBS0MsS0FBSyxFQUFFQyxLQUFLLEVBQUUsR0FBR0MsYUFBYTtRQUMxQyxNQUFNVixPQUFPVSxjQUFjUixHQUFHO1FBRTlCLElBQUlNLFVBQVVGLFFBQVE7WUFDcEIsSUFBSUcsVUFBVSxHQUFHO2dCQUNmLE9BQU9UO1lBQ1Q7WUFFQSxPQUFPRCxXQUFXVyxlQUFlVjtRQUNuQztRQUVBLE1BQU1XLFVBQVVSLEtBQUssQ0FBQ0ssTUFBTTtRQUU1QixPQUFPSixTQUNMTyxZQUNHRCxlQUNILENBQUMsR0FBR1Q7WUFDRixPQUFPTSxLQUFLQyxRQUFRLEdBQUdDLFFBQVEsTUFBTVI7UUFDdkMsR0FDQUQsTUFDQVE7SUFFSjtJQUVBLE1BQU1BLFFBQVEsR0FDUkMsUUFBUTtJQUVkLE9BQU9GLEtBQUtDLE9BQU9DLFVBQVVKLGtCQUFrQkw7QUFDakQ7QUFFTyxTQUFTaEIsTUFBTW1CLEtBQUssRUFBRUMsUUFBUSxFQUFFLEdBQUdDLGdCQUFnQjtJQUN4RCxNQUFNTCxPQUFPSyxpQkFBaUJILEdBQUcsSUFDM0JILFVBQVVNLGlCQUFpQkgsR0FBRyxJQUM5QkksU0FBU0gsTUFBTUcsTUFBTTtJQUUzQixTQUFTQyxLQUFLQyxLQUFLLEVBQUUsR0FBR0UsYUFBYTtRQUNuQyxNQUFNVixPQUFPVSxjQUFjUixHQUFHO1FBRTlCLElBQUlNLFVBQVVGLFFBQVE7WUFDcEIsT0FBT1AsV0FBV1csZUFBZVY7UUFDbkM7UUFFQSxNQUFNVyxVQUFVUixLQUFLLENBQUNLLE1BQU07UUFFNUIsT0FBT0osU0FDTE8sWUFDR0QsZUFDSCxDQUFDLEdBQUdUO1lBQ0YsT0FBT00sS0FBS0MsUUFBUSxNQUFNUDtRQUM1QixHQUNBRCxNQUNBUTtJQUVKO0lBRUEsTUFBTUEsUUFBUTtJQUVkLE9BQU9ELEtBQUtDLFVBQVVILGtCQUFrQkw7QUFDMUM7QUFFTyxTQUFTUixJQUFJVyxLQUFLLEVBQUVDLFFBQVEsRUFBRSxHQUFHQyxnQkFBZ0I7SUFDdEQsTUFBTUwsT0FBT0ssaUJBQWlCSCxHQUFHLElBQzNCSCxVQUFVTSxpQkFBaUJILEdBQUcsSUFDOUJXLFNBQVNWLE9BQ1RHLFNBQVNILE1BQU1HLE1BQU07SUFFM0IsU0FBU0MsS0FBS0MsS0FBSyxFQUFFTSxNQUFNLEVBQUUsR0FBR0osYUFBYTtRQUMzQyxNQUFNVixPQUFPVSxjQUFjUixHQUFHO1FBRTlCLElBQUlNLFVBQVVGLFFBQVE7WUFDcEIsT0FBT1AsUUFBUWUsV0FBV0osZUFBZVY7UUFDM0M7UUFFQSxNQUFNZSxXQUFXRixNQUFNLENBQUNMLE1BQU07UUFFOUIsT0FBT0osU0FDTFcsYUFDR0wsZUFDSCxDQUFDTSxVQUFVLEdBQUdmO1lBQ1osT0FBT00sS0FBS0MsUUFBUSxHQUFHO21CQUFLTTtnQkFBUUU7YUFBVSxLQUFLZjtRQUNyRCxHQUNBRCxNQUNBUTtJQUVKO0lBRUEsTUFBTUEsUUFBUSxHQUNSTSxTQUFTLEVBQUU7SUFFakIsT0FBT1AsS0FBS0MsT0FBT00sV0FBV1Qsa0JBQWtCTDtBQUNsRDtBQUVPLFNBQVNKLE9BQU9PLEtBQUssRUFBRWMsWUFBWSxFQUFFYixRQUFRLEVBQUUsR0FBR0MsZ0JBQWdCO0lBQ3ZFLE1BQU1MLE9BQU9LLGlCQUFpQkgsR0FBRyxJQUMzQkgsVUFBVU0saUJBQWlCSCxHQUFHLElBQzlCSSxTQUFTSCxNQUFNRyxNQUFNO0lBRTNCLFNBQVNDLEtBQUtDLEtBQUssRUFBRVUsS0FBSyxFQUFFLEdBQUdSLGFBQWE7UUFDMUMsTUFBTVYsT0FBT1UsY0FBY1IsR0FBRztRQUU5QixJQUFJTSxVQUFVRixRQUFRO1lBQ3BCLE9BQU9QLFFBQVFtQixVQUFVUixlQUFlVjtRQUMxQztRQUVBLE1BQU1XLFVBQVVSLEtBQUssQ0FBQ0ssTUFBTTtRQUU1QixPQUFPSixTQUNMTyxTQUNBTyxVQUNHUixlQUNILENBQUNRLE9BQU8sR0FBR2pCO1lBQ1QsT0FBT00sS0FBS0MsUUFBUSxHQUFHVSxVQUFVakI7UUFDbkMsR0FDQUQsTUFDQVE7SUFFSjtJQUVBLE1BQU1BLFFBQVE7SUFFZCxPQUFPRCxLQUFLQyxPQUFPUyxpQkFBaUJaLGtCQUFrQkw7QUFDeEQ7QUFFTyxTQUFTWCxRQUFRYyxLQUFLLEVBQUVDLFFBQVEsRUFBRSxHQUFHQyxnQkFBZ0I7SUFDMUQsTUFBTUwsT0FBT0ssaUJBQWlCSCxHQUFHLElBQzNCSCxVQUFVTSxpQkFBaUJILEdBQUcsSUFDOUJJLFNBQVNILE1BQU1HLE1BQU07SUFFM0IsU0FBU0MsS0FBS0MsS0FBSyxFQUFFLEdBQUdFLGFBQWE7UUFDbkMsTUFBTVYsT0FBT1UsY0FBY1IsR0FBRztRQUU5QixJQUFJTSxVQUFVRixRQUFRO1lBQ3BCLE9BQU9QLFdBQVdXLGVBQWVWO1FBQ25DO1FBRUEsTUFBTVcsVUFBVVIsS0FBSyxDQUFDSyxNQUFNO1FBRTVCLE9BQU9KLFNBQ0xPLFlBQ0dELGVBQ0gsQ0FBQyxHQUFHVDtZQUNGLE9BQU9NLEtBQUtDLFFBQVEsTUFBTVA7UUFDNUIsR0FDQUQsTUFDQVE7SUFFSjtJQUVBLE1BQU1BLFFBQVE7SUFFZCxPQUFPRCxLQUFLQyxVQUFVSCxrQkFBa0JMO0FBQzFDO0FBRU8sU0FBU2IsT0FBT2dCLEtBQUssRUFBRUMsUUFBUSxFQUFFLEdBQUdDLGdCQUFnQjtJQUN6RCxNQUFNTCxPQUFPSyxpQkFBaUJILEdBQUcsSUFDM0JILFVBQVVNLGlCQUFpQkgsR0FBRyxJQUM5QkksU0FBU0gsTUFBTUcsTUFBTTtJQUUzQixTQUFTQyxLQUFLQyxLQUFLLEVBQUVMLEtBQUssRUFBRWdCLGVBQWUsRUFBRSxHQUFHVCxhQUFhO1FBQzNELE1BQU1WLE9BQU9VLGNBQWNSLEdBQUc7UUFFOUIsSUFBSU0sVUFBVSxDQUFDLEdBQUc7WUFDaEIsT0FBT1QsUUFBUUksT0FBT2dCLG9CQUFvQlQsZUFBZVY7UUFDM0Q7UUFFQSxNQUFNVyxVQUFVUixLQUFLLENBQUNLLE1BQU07UUFFNUIsT0FBT0osU0FDTE8sWUFDR0QsZUFDSCxDQUFDLEdBQUdUO1lBQ0YsT0FBT00sS0FBS0MsUUFBUSxHQUFHTCxPQUFPZ0Isb0JBQW9CbEI7UUFDcEQsR0FDQSxDQUFDVztZQUNDLElBQUlBLFdBQVc7Z0JBQ2IsT0FBT1osS0FBS1k7WUFDZDtZQUVBLE1BQU1RLGlCQUFpQlQsU0FBUyxHQUFHO1lBRW5DLE9BQU9KLEtBQ0xDLFFBQVEsR0FDUjttQkFBS0wsTUFBTWtCLEtBQUssQ0FBQyxHQUFHYjttQkFBV0wsTUFBTWtCLEtBQUssQ0FBQ2IsUUFBUTthQUFJLEVBQ3ZEO2dCQUFFWTttQkFBbUJEO2FBQWlCLEtBQ25DVCxlQUNIVjtRQUVKLEdBQ0FRO0lBRUo7SUFFQSxNQUFNQSxRQUFRRixTQUFTLEdBQ2pCYSxrQkFBa0IsRUFBRTtJQUUxQixPQUFPWixLQUFLQyxPQUFPTCxPQUFPZ0Isb0JBQW9CZCxrQkFBa0JMO0FBQ2xFO0FBRU8sU0FBU0wsTUFBTVEsS0FBSyxFQUFFQyxRQUFRLEVBQUUsR0FBR0MsZ0JBQWdCO0lBQ3hELE1BQU1MLE9BQU9LLGlCQUFpQkgsR0FBRyxJQUMzQkgsVUFBVU0saUJBQWlCSCxHQUFHLElBQzlCSSxTQUFTSCxNQUFNRyxNQUFNO0lBRTNCLFNBQVNDLEtBQUtDLEtBQUssRUFBRUwsS0FBSyxFQUFFLEdBQUdPLGFBQWE7UUFDMUMsTUFBTVYsT0FBT1UsY0FBY1IsR0FBRztRQUU5QixJQUFJTSxVQUFVRixRQUFRO1lBQ3BCLE1BQU1jLGlCQUFpQkUsV0FBVyxHQUFHO1lBRXJDLE9BQU92QixRQUFRSSxPQUFPaUIsbUJBQW1CVixlQUFlVjtRQUMxRDtRQUVBLE1BQU1XLFVBQVVSLEtBQUssQ0FBQ0ssTUFBTTtRQUU1QixPQUFPSixTQUNMTyxZQUNHRCxlQUNILENBQUMsR0FBR1Q7WUFDRixPQUFPTSxLQUFLQyxRQUFRLEdBQUdMLFVBQVVGO1FBQ25DLEdBQ0EsQ0FBQ1c7WUFDQyxJQUFJQSxXQUFXO2dCQUNiLE9BQU9aLEtBQUtZO1lBQ2Q7WUFFQSxNQUFNUSxpQkFBaUJULFNBQVMsR0FBRztZQUVuQyxPQUFPWixRQUNMO21CQUFLSSxNQUFNa0IsS0FBSyxDQUFDLEdBQUdiO21CQUFXTCxNQUFNa0IsS0FBSyxDQUFDYixRQUFRO2FBQUksRUFDdkRZLG1CQUNHVixlQUNIVjtRQUVKLEdBQ0FRO0lBRUo7SUFFQSxNQUFNQSxRQUFRO0lBRWQsT0FBT0QsS0FBS0MsT0FBT0wsVUFBVUUsa0JBQWtCTDtBQUNqRDtBQUVPLFNBQVNkLFFBQVFpQixLQUFLLEVBQUVDLFFBQVEsRUFBRSxHQUFHQyxnQkFBZ0I7SUFDMUQsTUFBTUwsT0FBT0ssaUJBQWlCSCxHQUFHLElBQzNCSCxVQUFVTSxpQkFBaUJILEdBQUcsSUFDOUJJLFNBQVNILE1BQU1HLE1BQU07SUFFM0IsU0FBU0MsS0FBS0MsS0FBSyxFQUFFTCxLQUFLLEVBQUUsR0FBR08sYUFBYTtRQUMxQyxNQUFNVixPQUFPVSxjQUFjUixHQUFHO1FBRTlCLElBQUlNLFVBQVVGLFFBQVE7WUFDcEIsTUFBTWMsaUJBQWlCRTtZQUV2QixPQUFPdkIsUUFBUUksT0FBT2lCLG1CQUFtQlYsZUFBZVY7UUFDMUQ7UUFFQSxNQUFNVyxVQUFVUixLQUFLLENBQUNLLE1BQU07UUFFNUIsT0FBT0osU0FDTE8sWUFDR0QsZUFDSCxDQUFDLEdBQUdUO1lBQ0YsTUFBTW1CLGlCQUFpQlQsU0FBUyxHQUFHO1lBRW5DLE9BQU9aLFFBQ0w7bUJBQUtJLE1BQU1rQixLQUFLLENBQUMsR0FBR2I7bUJBQVdMLE1BQU1rQixLQUFLLENBQUNiLFFBQVE7YUFBSSxFQUN2RFksbUJBQ0duQjtRQUVQLEdBQ0EsQ0FBQ1c7WUFDQyxJQUFJQSxXQUFXO2dCQUNiLE9BQU9aLEtBQUtZO1lBQ2Q7WUFFQSxPQUFPTCxLQUFLQyxRQUFRLEdBQUdMLFVBQVVPLGVBQWVWO1FBQ2xELEdBQ0FRO0lBRUo7SUFFQSxNQUFNQSxRQUFRO0lBRWQsT0FBT0QsS0FBS0MsT0FBT0wsVUFBVUUsa0JBQWtCTDtBQUNqRDtBQUVPLFNBQVNaLEtBQUtlLEtBQUssRUFBRUMsUUFBUSxFQUFFLEdBQUdDLGdCQUFnQjtJQUN2RCxNQUFNTCxPQUFPSyxpQkFBaUJILEdBQUcsSUFDM0JILFVBQVVNLGlCQUFpQkgsR0FBRyxJQUM5QkksU0FBU0gsTUFBTUcsTUFBTTtJQUUzQixTQUFTQyxLQUFLQyxLQUFLLEVBQUVlLFFBQVEsRUFBRSxHQUFHYixhQUFhO1FBQzdDLE1BQU1WLE9BQU9VLGNBQWNSLEdBQUc7UUFFOUIsSUFBSU0sVUFBVUYsUUFBUTtZQUNwQixPQUFPUCxRQUFRd0IsYUFBYWIsZUFBZVY7UUFDN0M7UUFFQSxNQUFNVyxVQUFVUixLQUFLLENBQUNLLE1BQU07UUFFNUIsT0FBT0osU0FDTE8sWUFDR0QsZUFDSCxDQUFDLEdBQUdUO1lBQ0YsT0FBT00sS0FBS0MsUUFBUSxHQUFHO21CQUFLZTtnQkFBVVo7YUFBUyxLQUFLVjtRQUN0RCxHQUNBLENBQUNXO1lBQ0MsSUFBSUEsV0FBVztnQkFDYixPQUFPWixLQUFLWTtZQUNkO1lBRUEsT0FBT0wsS0FBS0MsUUFBUSxHQUFHZSxhQUFhYixlQUFlVjtRQUNyRCxHQUNBUTtJQUVKO0lBRUEsTUFBTUEsUUFBUSxHQUNSZSxXQUFXLEVBQUU7SUFFbkIsT0FBT2hCLEtBQUtDLE9BQU9lLGFBQWFsQixrQkFBa0JMO0FBQ3BEO0FBRU8sU0FBU0gsUUFBUU0sS0FBSyxFQUFFQyxRQUFRLEVBQUUsR0FBR0MsZ0JBQWdCO0lBQzFELE1BQU1MLE9BQU9LLGlCQUFpQkgsR0FBRyxJQUMzQkgsVUFBVU0saUJBQWlCSCxHQUFHO0lBRXBDLFNBQVNLLEtBQUtNLE1BQU0sRUFBRUMsTUFBTSxFQUFFLEdBQUdKLGFBQWE7UUFDNUMsTUFBTVYsT0FBT1UsY0FBY1IsR0FBRyxJQUN4QkksU0FBU08sT0FBT1AsTUFBTTtRQUU1QixJQUFJQSxXQUFXLEdBQUc7WUFDaEIsT0FBT1AsUUFBUWUsV0FBV0osZUFBZVY7UUFDM0M7UUFFQSxPQUFPWixLQUNMeUIsUUFDQVQsYUFDR00sZUFDSCxDQUFDYSxVQUFVLEdBQUd0QjtZQUNaLE1BQU11QixpQkFBaUJELFNBQVNqQixNQUFNO1lBRXRDLElBQUlrQixtQkFBbUIsR0FBRztnQkFDeEIsT0FBT3hCO1lBQ1Q7WUFFQSxPQUFPTyxLQUNMTSxPQUFPMUIsTUFBTSxDQUFDLENBQUN3QixVQUFZLENBQUNZLFNBQVNFLFFBQVEsQ0FBQ2QsV0FDOUM7bUJBQUtHO21CQUFXUzthQUFVLEtBQ3ZCdEI7UUFFUCxHQUNBRDtJQUVKO0lBRUEsTUFBTWEsU0FBU1YsT0FDVFcsU0FBUyxFQUFFO0lBRWpCLE9BQU9QLEtBQUtNLFFBQVFDLFdBQVdULGtCQUFrQkw7QUFDbkQ7QUFFTyxTQUFTUCxNQUFNb0IsTUFBTSxFQUFFQyxNQUFNLEVBQUVWLFFBQVEsRUFBRSxHQUFHQyxnQkFBZ0I7SUFDakUsTUFBTUwsT0FBT0ssaUJBQWlCSCxHQUFHLElBQzNCSCxVQUFVTSxpQkFBaUJILEdBQUcsSUFDOUJ3QixlQUFlYixPQUFPUCxNQUFNLEVBQzVCcUIsZUFBZWIsT0FBT1IsTUFBTSxFQUM1QkEsU0FBU29CLGNBQWUsR0FBRztJQUVqQyxJQUFJQSxpQkFBaUJDLGNBQWM7UUFDakMsT0FBTzNCO0lBQ1Q7SUFFQSxTQUFTTyxLQUFLQyxLQUFLLEVBQUUsR0FBR0UsYUFBYTtRQUNuQyxNQUFNVixPQUFPVSxjQUFjUixHQUFHO1FBRTlCLElBQUlNLFVBQVVGLFFBQVE7WUFDcEIsT0FBT1AsV0FBV1csZUFBZVY7UUFDbkM7UUFFQSxNQUFNZSxXQUFXRixNQUFNLENBQUNMLE1BQU0sRUFDeEJRLFdBQVdGLE1BQU0sQ0FBQ04sTUFBTTtRQUU5QixPQUFPSixTQUNMVyxVQUNBQyxhQUNHTixlQUNILENBQUMsR0FBR1Q7WUFDRixPQUFPTSxLQUFLQyxRQUFRLE1BQU1QO1FBQzVCLEdBQ0FELE1BQ0FRO0lBRUo7SUFFQSxNQUFNQSxRQUFRO0lBRWQsT0FBT0QsS0FBS0MsVUFBVUgsa0JBQWtCTDtBQUMxQztBQUVPLFNBQVNWLGNBQWNhLEtBQUssRUFBRUMsUUFBUSxFQUFFLEdBQUdDLGdCQUFnQjtJQUNoRSxNQUFNTCxPQUFPSyxpQkFBaUJILEdBQUcsSUFDM0JILFVBQVVNLGlCQUFpQkgsR0FBRyxJQUM5QkksU0FBU0gsTUFBTUcsTUFBTTtJQUUzQixTQUFTQyxLQUFLQyxLQUFLLEVBQUUsR0FBR0UsYUFBYTtRQUNuQyxNQUFNVixPQUFPVSxjQUFjUixHQUFHO1FBRTlCLElBQUlNLFVBQVVGLFFBQVE7WUFDcEIsT0FBT1AsV0FBV1csZUFBZVY7UUFDbkM7UUFFQSxNQUFNVyxVQUFVUixLQUFLLENBQUNLLE1BQU07UUFFNUIsT0FBT0osU0FDTE8sWUFDR0QsZUFDSCxDQUFDLEdBQUdUO1lBQ0YsT0FBT00sS0FBS0MsUUFBUSxNQUFNUDtRQUM1QixHQUNBRCxNQUNBUTtJQUVKO0lBRUEsTUFBTUEsUUFBUTtJQUVkLE9BQU9ELEtBQUtDLFVBQVVILGtCQUFrQkw7QUFDMUM7QUFFTyxTQUFTcEIsZUFBZXVCLEtBQUssRUFBRUMsUUFBUSxFQUFFLEdBQUdDLGdCQUFnQjtJQUNqRSxNQUFNTCxPQUFPSyxpQkFBaUJILEdBQUcsSUFDM0JILFVBQVVNLGlCQUFpQkgsR0FBRyxJQUM5QkksU0FBU0gsTUFBTUcsTUFBTTtJQUUzQixTQUFTQyxLQUFLQyxLQUFLLEVBQUUsR0FBR0UsYUFBYTtRQUNuQyxNQUFNVixPQUFPVSxjQUFjUixHQUFHO1FBRTlCLElBQUlNLFVBQVUsQ0FBQyxHQUFHO1lBQ2hCLE9BQU9ULFdBQVdXLGVBQWVWO1FBQ25DO1FBRUEsTUFBTVcsVUFBVVIsS0FBSyxDQUFDSyxNQUFNO1FBRTVCLE9BQU9KLFNBQ0xPLFlBQ0dELGVBQ0gsQ0FBQyxHQUFHVDtZQUNGLE9BQU9NLEtBQUtDLFFBQVEsTUFBTVA7UUFDNUIsR0FDQUQsTUFDQVE7SUFFSjtJQUVBLE1BQU1BLFFBQVFGLFNBQVM7SUFFdkIsT0FBT0MsS0FBS0MsVUFBVUgsa0JBQWtCTDtBQUMxQztBQUVPLFNBQVNULGdCQUFnQlksS0FBSyxFQUFFQyxRQUFRLEVBQUUsR0FBR0MsZ0JBQWdCO0lBQ2xFLE1BQU1MLE9BQU9LLGlCQUFpQkgsR0FBRyxJQUMzQkgsVUFBVU0saUJBQWlCSCxHQUFHLElBQzlCSSxTQUFTSCxNQUFNRyxNQUFNO0lBRTNCLFNBQVNDLEtBQUtDLEtBQUssRUFBRSxHQUFHRSxhQUFhO1FBQ25DLE1BQU1WLE9BQU9VLGNBQWNSLEdBQUc7UUFFOUIsSUFBSU0sVUFBVUYsUUFBUTtZQUNwQixPQUFPUCxXQUFXVyxlQUFlVjtRQUNuQztRQUVBLE1BQU1XLFVBQVVSLEtBQUssQ0FBQ0ssTUFBTTtRQUU1QixPQUFPSixTQUNMTyxZQUNHRCxlQUNILENBQUMsR0FBR1Q7WUFDRixPQUFPTSxLQUFLQyxRQUFRLE1BQU1QO1FBQzVCLEdBQ0FELE1BQ0FRO0lBRUo7SUFFQSxNQUFNQSxRQUFRO0lBRWQsT0FBT0QsS0FBS0MsVUFBVUgsa0JBQWtCTDtBQUMxQztBQUVPLFNBQVNuQixpQkFBaUJzQixLQUFLLEVBQUVDLFFBQVEsRUFBRSxHQUFHQyxnQkFBZ0I7SUFDbkUsTUFBTUwsT0FBT0ssaUJBQWlCSCxHQUFHLElBQzNCSCxVQUFVTSxpQkFBaUJILEdBQUcsSUFDOUJJLFNBQVNILE1BQU1HLE1BQU07SUFFM0IsU0FBU0MsS0FBS0MsS0FBSyxFQUFFLEdBQUdFLGFBQWE7UUFDbkMsTUFBTVYsT0FBT1UsY0FBY1IsR0FBRztRQUU5QixJQUFJTSxVQUFVLENBQUMsR0FBRztZQUNoQixPQUFPVCxXQUFXVyxlQUFlVjtRQUNuQztRQUVBLE1BQU1XLFVBQVVSLEtBQUssQ0FBQ0ssTUFBTTtRQUU1QixPQUFPSixTQUNMTyxZQUNHRCxlQUNILENBQUMsR0FBR1Q7WUFDRixPQUFPTSxLQUFLQyxRQUFRLE1BQU1QO1FBQzVCLEdBQ0FELE1BQ0FRO0lBRUo7SUFFQSxNQUFNQSxRQUFRRixTQUFTO0lBRXZCLE9BQU9DLEtBQUtDLFVBQVVILGtCQUFrQkw7QUFDMUM7QUFFTyxTQUFTckIsSUFBSWlELFNBQVMsRUFBRSxHQUFHdkIsZ0JBQWdCO0lBQ2hELE9BQU9yQixNQUFNNEMsV0FBVyxDQUFDeEIsVUFBVSxHQUFHeUI7UUFDcEMsT0FBT3pCLFlBQVl5QjtJQUNyQixNQUFNeEI7QUFDUjtBQUVPLFNBQVNwQixPQUFPMkMsU0FBUyxFQUFFLEdBQUd2QixnQkFBZ0I7SUFDbkQsT0FBT1AsS0FBSzhCLFdBQVcsQ0FBQ3hCLFVBQVUsR0FBR3lCO1FBQ25DLE9BQU96QixZQUFZeUI7SUFDckIsTUFBTXhCO0FBQ1I7TUFFQSxXQUFlO0lBQ2J2QjtJQUNBWTtJQUNBSTtJQUNBZjtJQUNBQztJQUNBUTtJQUNBSTtJQUNBUDtJQUNBRjtJQUNBUTtJQUNBVDtJQUNBRTtJQUNBUztJQUNBSjtJQUNBSDtJQUNBVjtJQUNBVztJQUNBVjtJQUNBRjtJQUNBTTtBQUNGIn0=
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "occam-languages",
3
3
  "author": "James Smith",
4
- "version": "3.0.40",
4
+ "version": "3.0.41",
5
5
  "license": "MIT, Anti-996",
6
6
  "homepage": "https://github.com/djalbat/occam-languages",
7
7
  "description": "Occam's common language functionality.",
@@ -154,7 +154,6 @@ export function map(array, callback, ...initialArguments) {
154
154
  const back = initialArguments.pop(),
155
155
  forward = initialArguments.pop(),
156
156
  arrayA = array, ///
157
- arrayB = [],
158
157
  length = array.length;
159
158
 
160
159
  function next(index, arrayB, ...nextArguments) {
@@ -177,7 +176,8 @@ export function map(array, callback, ...initialArguments) {
177
176
  );
178
177
  }
179
178
 
180
- const index = 0;
179
+ const index = 0,
180
+ arrayB = [];
181
181
 
182
182
  return next(index, arrayB, ...initialArguments, back);
183
183
  }
@@ -246,14 +246,13 @@ export function forEach(array, callback, ...initialArguments) {
246
246
  export function filter(array, callback, ...initialArguments) {
247
247
  const back = initialArguments.pop(),
248
248
  forward = initialArguments.pop(),
249
- deletedElements = [],
250
249
  length = array.length;
251
250
 
252
- function next(index, ...nextArguments) {
251
+ function next(index, array, deletedElements, ...nextArguments) {
253
252
  const back = nextArguments.pop();
254
253
 
255
254
  if (index === -1) {
256
- return forward(deletedElements, ...nextArguments, back);
255
+ return forward(array, deletedElements, ...nextArguments, back);
257
256
  }
258
257
 
259
258
  const element = array[index];
@@ -262,30 +261,31 @@ export function filter(array, callback, ...initialArguments) {
262
261
  element,
263
262
  ...nextArguments,
264
263
  (...forwardArguments) => {
265
- return next(index - 1, ...forwardArguments);
264
+ return next(index - 1, array, deletedElements, ...forwardArguments);
266
265
  },
267
266
  (exception) => {
268
267
  if (exception) {
269
268
  return back(exception);
270
269
  }
271
270
 
272
- const startIndex = index, ///
273
- deleteCount = 1,
274
- deletedElement = element; ///
275
-
276
- array.splice(startIndex, deleteCount);
271
+ const deletedElement = element; ///
277
272
 
278
- deletedElements.unshift(deletedElement);
279
-
280
- return next(index - 1, ...nextArguments, back);
273
+ return next(
274
+ index - 1,
275
+ [ ...array.slice(0, index), ...array.slice(index + 1) ],
276
+ [ deletedElement, ...deletedElements ],
277
+ ...nextArguments,
278
+ back
279
+ );
281
280
  },
282
281
  index
283
282
  );
284
283
  }
285
284
 
286
- const index = length - 1;
285
+ const index = length - 1,
286
+ deletedElements = [];
287
287
 
288
- return next(index, ...initialArguments, back);
288
+ return next(index, array, deletedElements, ...initialArguments, back);
289
289
  }
290
290
 
291
291
  export function prune(array, callback, ...initialArguments) {
@@ -293,13 +293,13 @@ export function prune(array, callback, ...initialArguments) {
293
293
  forward = initialArguments.pop(),
294
294
  length = array.length;
295
295
 
296
- function next(index, ...nextArguments) {
296
+ function next(index, array, ...nextArguments) {
297
297
  const back = nextArguments.pop();
298
298
 
299
299
  if (index === length) {
300
- const deletedElement = undefined;
300
+ const deletedElement = undefined; ///
301
301
 
302
- return forward(deletedElement, ...nextArguments, back);
302
+ return forward(array, deletedElement, ...nextArguments, back);
303
303
  }
304
304
 
305
305
  const element = array[index];
@@ -308,20 +308,21 @@ export function prune(array, callback, ...initialArguments) {
308
308
  element,
309
309
  ...nextArguments,
310
310
  (...forwardArguments) => {
311
- return next(index + 1, ...forwardArguments);
311
+ return next(index + 1, array, ...forwardArguments);
312
312
  },
313
313
  (exception) => {
314
314
  if (exception) {
315
315
  return back(exception);
316
316
  }
317
317
 
318
- const startIndex = index, ///
319
- deleteCount = 1,
320
- deletedElement = element; ///
321
-
322
- array.splice(startIndex, deleteCount);
318
+ const deletedElement = element; ///
323
319
 
324
- return forward(deletedElement, ...nextArguments, back);
320
+ return forward(
321
+ [ ...array.slice(0, index), ...array.slice(index + 1) ],
322
+ deletedElement,
323
+ ...nextArguments,
324
+ back
325
+ );
325
326
  },
326
327
  index
327
328
  );
@@ -329,7 +330,7 @@ export function prune(array, callback, ...initialArguments) {
329
330
 
330
331
  const index = 0;
331
332
 
332
- return next(index, ...initialArguments, back);
333
+ return next(index, array, ...initialArguments, back);
333
334
  }
334
335
 
335
336
  export function extract(array, callback, ...initialArguments) {
@@ -337,13 +338,13 @@ export function extract(array, callback, ...initialArguments) {
337
338
  forward = initialArguments.pop(),
338
339
  length = array.length;
339
340
 
340
- function next(index, ...nextArguments) {
341
+ function next(index, array, ...nextArguments) {
341
342
  const back = nextArguments.pop();
342
343
 
343
344
  if (index === length) {
344
345
  const deletedElement = undefined;
345
346
 
346
- return forward(deletedElement, ...nextArguments, back);
347
+ return forward(array, deletedElement, ...nextArguments, back);
347
348
  }
348
349
 
349
350
  const element = array[index];
@@ -352,20 +353,20 @@ export function extract(array, callback, ...initialArguments) {
352
353
  element,
353
354
  ...nextArguments,
354
355
  (...forwardArguments) => {
355
- const startIndex = index, ///
356
- deleteCount = 1,
357
- deletedElement = element; ///
358
-
359
- array.splice(startIndex, deleteCount);
356
+ const deletedElement = element; ///
360
357
 
361
- return forward(deletedElement, ...forwardArguments);
358
+ return forward(
359
+ [ ...array.slice(0, index), ...array.slice(index + 1) ],
360
+ deletedElement,
361
+ ...forwardArguments
362
+ );
362
363
  },
363
364
  (exception) => {
364
365
  if (exception) {
365
366
  return back(exception);
366
367
  }
367
368
 
368
- return next(index + 1, ...nextArguments, back);
369
+ return next(index + 1, array, ...nextArguments, back);
369
370
  },
370
371
  index
371
372
  );
@@ -373,13 +374,12 @@ export function extract(array, callback, ...initialArguments) {
373
374
 
374
375
  const index = 0;
375
376
 
376
- return next(index, ...initialArguments, back);
377
+ return next(index, array, ...initialArguments, back);
377
378
  }
378
379
 
379
380
  export function find(array, callback, ...initialArguments) {
380
381
  const back = initialArguments.pop(),
381
382
  forward = initialArguments.pop(),
382
- elements = [],
383
383
  length = array.length;
384
384
 
385
385
  function next(index, elements, ...nextArguments) {
@@ -408,16 +408,15 @@ export function find(array, callback, ...initialArguments) {
408
408
  );
409
409
  }
410
410
 
411
- const index = 0;
411
+ const index = 0,
412
+ elements = [];
412
413
 
413
414
  return next(index, elements, ...initialArguments, back);
414
415
  }
415
416
 
416
417
  export function resolve(array, callback, ...initialArguments) {
417
418
  const back = initialArguments.pop(),
418
- forward = initialArguments.pop(),
419
- arrayA = array, ///
420
- arrayB = [];
419
+ forward = initialArguments.pop();
421
420
 
422
421
  function next(arrayA, arrayB, ...nextArguments) {
423
422
  const back = nextArguments.pop(),
@@ -448,6 +447,9 @@ export function resolve(array, callback, ...initialArguments) {
448
447
  );
449
448
  }
450
449
 
450
+ const arrayA = array, ///
451
+ arrayB = [];
452
+
451
453
  return next(arrayA, arrayB, ...initialArguments, back);
452
454
  }
453
455