ngx-sfc-common 0.0.35 → 0.0.36

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.
@@ -1,5 +1,5 @@
1
1
  import { Observable } from 'rxjs';
2
- import { addItem, hasItem, removeItem } from './collections.utils';
2
+ import { toggleItem } from './collections.utils';
3
3
  import { isEqualDateTimes } from './date-time.utils';
4
4
  /**
5
5
  * Return true if value defined
@@ -227,44 +227,194 @@ export function stopAndPreventPropagation(event) {
227
227
  /**
228
228
  * Update property in object by key
229
229
  * @param obj Object to change
230
- * @param propertyKey Property to change
230
+ * @param key Property to change
231
231
  * @param newPropertyValue New property value
232
- * @param oldPropertyValue Old property value
232
+ * @param options Options for array types
233
233
  * @returns Updated object
234
234
  */
235
- export function updatePropertyByKey(obj, propertyKey, newPropertyValue, oldPropertyValue) {
235
+ export function updatePropertyByKey(obj, key, newPropertyValue, options = {}) {
236
+ const { arrayMode = "toggle", arrayToggleValue = newPropertyValue } = options;
237
+ // Arrays: map recursively over items
236
238
  if (Array.isArray(obj)) {
237
- return obj.map(item => {
238
- return isObject(item) && item !== null
239
- ? updatePropertyByKey(item, propertyKey, newPropertyValue, oldPropertyValue)
240
- : item;
239
+ let changed = false;
240
+ const mapped = obj.map(item => {
241
+ const updated = updatePropertyByKey(item, key, newPropertyValue, options);
242
+ if (updated !== item)
243
+ changed = true;
244
+ return updated;
241
245
  });
246
+ return changed ? mapped : obj;
242
247
  }
243
- else if (isObject(obj) && obj !== null) {
244
- const updatedObj = {};
245
- for (const key in obj) {
246
- if (key === propertyKey) {
247
- if (Array.isArray(obj[key])) {
248
- if (hasItem(obj[key], oldPropertyValue)) {
249
- removeItem(obj[key], oldPropertyValue);
248
+ // Plain objects: iterate over keys immutably
249
+ if (isObject(obj)) {
250
+ const source = obj;
251
+ let changed = false;
252
+ const result = {};
253
+ for (const propertyKey of Object.keys(source)) {
254
+ const value = source[propertyKey];
255
+ if (propertyKey === key) {
256
+ // Matched key: apply update
257
+ if (Array.isArray(value)) {
258
+ if (arrayMode === "toggle") {
259
+ const updatedArray = toggleItem(value, arrayToggleValue);
260
+ result[propertyKey] = updatedArray;
261
+ if (updatedArray !== value)
262
+ changed = true;
250
263
  }
251
264
  else {
252
- addItem(obj[key], oldPropertyValue);
265
+ // replace mode
266
+ if (!Array.isArray(newPropertyValue)) {
267
+ throw new Error("arrayMode 'replace' requires newPropertyValue to be an array.");
268
+ }
269
+ const replaced = [...newPropertyValue];
270
+ result[propertyKey] = replaced;
271
+ changed = true;
253
272
  }
254
- updatedObj[key] = obj[key];
255
273
  }
256
274
  else {
257
- updatedObj[key] = newPropertyValue;
275
+ // Non-array leaf -> set to newPropertyValue
276
+ result[propertyKey] = newPropertyValue;
277
+ if (result[propertyKey] !== value)
278
+ changed = true;
258
279
  }
259
280
  }
260
281
  else {
261
- updatedObj[key] = updatePropertyByKey(obj[key], propertyKey, newPropertyValue, oldPropertyValue);
282
+ // Recurse into nested values
283
+ const updatedVal = updatePropertyByKey(value, key, newPropertyValue, options);
284
+ result[propertyKey] = updatedVal;
285
+ if (updatedVal !== value)
286
+ changed = true;
262
287
  }
263
288
  }
264
- return updatedObj;
289
+ return changed ? result : obj;
265
290
  }
291
+ // Primitives or non-plain objects (Date, Map, etc.): return as-is
266
292
  return obj;
267
293
  }
294
+ /**
295
+ * Update property in object by path
296
+ * @param obj Object to change
297
+ * @param path Property to change
298
+ * @param newPropertyValue New property value
299
+ * @param previousPropertyValue New property value
300
+ * @param options Options for array types
301
+ * @returns Updated object
302
+ */
303
+ export function updatePropertyByPath(obj, path, newPropertyValue, previousPropertyValue, options = {}) {
304
+ const { arrayMode = "toggle" } = options;
305
+ const segments = Array.isArray(path) ? path : _pathToSegments(path);
306
+ /**
307
+ * Parses a path string like:
308
+ * - "a.b.c"
309
+ * - "a.b[0].c"
310
+ * - "items[*].tags"
311
+ * into segments: ["a","b",0,"c"] or ["items","*", "tags"]
312
+ *
313
+ * Supported:
314
+ * - Dot notation
315
+ * - Bracket numbers: [0]
316
+ * - Wildcard: [*] or .* (as a segment "*")
317
+ *
318
+ * Not supported:
319
+ * - Quoted property names in brackets (e.g., ["foo bar"])
320
+ * - Escaped dots in keys
321
+ * @param path Property path
322
+ * @returns Path segments
323
+ */
324
+ function _pathToSegments(path) {
325
+ // Normalize brackets to dot form (e.g., a[0].b -> a.0.b, a[*].b -> a.*.b)
326
+ const normalized = path
327
+ .replace(/\[(\d+)\]/g, ".$1")
328
+ .replace(/\[\*\]/g, ".*");
329
+ const rawSegments = normalized.split(".").filter(s => s.length > 0);
330
+ return rawSegments.map(seg => {
331
+ if (seg === "*")
332
+ return "*";
333
+ const n = Number(seg);
334
+ if (!Number.isNaN(n) && seg.trim() !== "" && String(n) === seg) {
335
+ return n;
336
+ }
337
+ return seg;
338
+ });
339
+ }
340
+ function _apply(current, remaining) {
341
+ // Base: reached target path
342
+ if (remaining.length === 0) {
343
+ if (Array.isArray(current)) {
344
+ if (arrayMode === "toggle") {
345
+ return toggleItem(current, previousPropertyValue);
346
+ }
347
+ // replace mode
348
+ if (!Array.isArray(newPropertyValue)) {
349
+ throw new Error("arrayMode 'replace' requires newPropertyValue to be an array.");
350
+ }
351
+ return [...newPropertyValue];
352
+ }
353
+ // Non-array leaf -> set to newPropertyValue
354
+ return newPropertyValue;
355
+ }
356
+ const [seg, ...rest] = remaining;
357
+ // Wildcard handling
358
+ if (seg === "*") {
359
+ if (Array.isArray(current)) {
360
+ // Map each element
361
+ return current.map(item => _apply(item, rest));
362
+ }
363
+ if (isObject(current)) {
364
+ const objCurr = current;
365
+ const result = {};
366
+ for (const key of Object.keys(objCurr)) {
367
+ result[key] = _apply(objCurr[key], rest);
368
+ }
369
+ return result;
370
+ }
371
+ // If not object/array, nothing to expand -> return as-is
372
+ return current;
373
+ }
374
+ // Numeric index -> navigate arrays
375
+ if (typeof seg === "number") {
376
+ if (!Array.isArray(current)) {
377
+ // Path expects array here, but current isn't an array => no-op
378
+ return current;
379
+ }
380
+ const arr = current;
381
+ if (seg < 0 || seg >= arr.length) {
382
+ // Out of bounds -> no-op (alternatively, you could extend the array)
383
+ return current;
384
+ }
385
+ const updatedItem = _apply(arr[seg], rest);
386
+ if (updatedItem === arr[seg]) {
387
+ return current; // no structural change
388
+ }
389
+ const newArr = arr.slice();
390
+ newArr[seg] = updatedItem;
391
+ return newArr;
392
+ }
393
+ // String key -> navigate objects
394
+ if (isObject(current)) {
395
+ const objCurr = current;
396
+ const nextVal = objCurr[seg];
397
+ const updatedVal = _apply(nextVal, rest);
398
+ if (updatedVal === nextVal) {
399
+ return current; // no structural change
400
+ }
401
+ return { ...objCurr, [seg]: updatedVal };
402
+ }
403
+ // If we cannot traverse further (e.g., null, primitive, or array when expecting object) -> no-op
404
+ return current;
405
+ }
406
+ return _apply(obj, segments);
407
+ }
408
+ /**
409
+ * Get changed property key
410
+ * @param previous Previous value
411
+ * @param current Currency value
412
+ * @returns Key of property that was changed
413
+ */
414
+ export function findChangedPropertyKey(previous, current) {
415
+ const path = findChangedPropertyPath(previous, current), parts = path?.split('.');
416
+ return parts && parts.length ? parts[parts.length - 1] : undefined;
417
+ }
268
418
  /**
269
419
  * Get changed property path
270
420
  * @param previous Previous value
@@ -289,16 +439,6 @@ export function findChangedPropertyPath(previous, current, parentKey = '') {
289
439
  }
290
440
  return null;
291
441
  }
292
- /**
293
- * Get changed property key
294
- * @param previous Previous value
295
- * @param current Currency value
296
- * @returns Key of property that was changed
297
- */
298
- export function findChangedPropertyKey(previous, current) {
299
- const path = findChangedPropertyPath(previous, current), parts = path?.split('.');
300
- return parts && parts.length ? parts[parts.length - 1] : undefined;
301
- }
302
442
  /**
303
443
  * Clone object without any reference
304
444
  * @param value Object to clone
@@ -307,4 +447,4 @@ export function findChangedPropertyKey(previous, current) {
307
447
  export function deepClone(value) {
308
448
  return JSON.parse(JSON.stringify(value));
309
449
  }
310
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9uLnV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNmYy1jb21tb24vc3JjL2xpYi91dGlscy9jb21tb24udXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUVsQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNuRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUVyRDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLFNBQVMsQ0FBSSxLQUEyQjtJQUN0RCxPQUFVLEtBQUssS0FBSyxTQUFTLElBQU8sS0FBSyxLQUFLLElBQUksQ0FBQztBQUNyRCxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxRQUFRLENBQUMsS0FBVTtJQUNqQyxPQUFPLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVE7V0FDaEQsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztXQUNyQixDQUFDLENBQUMsS0FBSyxZQUFZLElBQUksSUFBSSxLQUFLLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQztBQUMxRCxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxXQUFXLENBQUMsSUFBUztJQUNuQyxPQUFPLElBQUksWUFBWSxVQUFVLENBQUM7QUFDcEMsQ0FBQztBQUVEOzs7Ozs7R0FNRztBQUNILE1BQU0sVUFBVSxtQkFBbUIsQ0FBQyxHQUFRLEVBQUUsUUFBZ0IsRUFBRSxRQUFhLElBQUk7SUFDL0UsSUFBSSxTQUFTLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxFQUFFO1FBQ3hELElBQUksTUFBTSxHQUFRLEVBQUUsQ0FBQztRQUNyQixNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsS0FBSyxDQUFDO1FBQ3pCLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxFQUFFLEdBQUcsTUFBTSxFQUFFLENBQUM7S0FDN0I7SUFFRCxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLHdCQUF3QixDQUFDLEdBQVEsRUFBRSxRQUFnQjtJQUNqRSxJQUFJLEdBQUcsQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLEVBQUU7UUFDaEMsT0FBTyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7S0FDdEI7QUFDSCxDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsU0FBUyxDQUFDLE1BQVcsRUFBRSxHQUFHLE9BQWM7SUFDdEQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNO1FBQ2pCLE9BQU8sTUFBTSxDQUFDO0lBRWhCLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUUvQixJQUFJLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxRQUFRLENBQUMsTUFBTSxDQUFDLEVBQUU7UUFDeEMsS0FBSyxNQUFNLEdBQUcsSUFBSSxNQUFNLEVBQUU7WUFDeEIsSUFBSSxRQUFRLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUU7Z0JBQ3pCLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDO29CQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUN2RCxTQUFTLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO2FBQ3JDO2lCQUFNO2dCQUNMLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2FBQy9DO1NBQ0Y7S0FDRjtJQUVELE9BQU8sU0FBUyxDQUFDLE1BQU0sRUFBRSxHQUFHLE9BQU8sQ0FBQyxDQUFDO0FBQ3ZDLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sTUFBTSxHQUFHLENBQUksSUFBYSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUM7QUFFakQ7Ozs7S0FJSztBQUNMLE1BQU0sVUFBVSxTQUFTLENBQUMsTUFBVztJQUNuQyxPQUFPLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQ3BDLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLFFBQVEsQ0FBQyxLQUFVO0lBQ2pDLE9BQU8sT0FBTyxLQUFLLEtBQUssUUFBUSxDQUFDO0FBQ25DLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsZUFBZTtJQUM3QixPQUFPLFFBQVEsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxJQUFJLFlBQVksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ25GLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsT0FBTyxDQUFDLEtBQWE7SUFDbkMsT0FBTyxTQUFTLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FDMUIsMkpBQTJKLENBQzVKLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsWUFBWSxDQUFDLEtBQWE7SUFDeEMsT0FBTyxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQy9CLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILE1BQU0sVUFBVSxPQUFPLENBQUMsSUFBUyxFQUFFLElBQVM7SUFDMUM7Ozs7T0FJRztJQUNILFNBQVMsT0FBTyxDQUFDLEdBQVE7UUFDdkIsT0FBTyxNQUFNLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ3hFLENBQUM7SUFFRCxTQUFTLGNBQWM7UUFFckIsZUFBZTtRQUNmLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxJQUFJLENBQUMsTUFBTTtZQUFFLE9BQU8sS0FBSyxDQUFDO1FBRTlDLCtCQUErQjtRQUMvQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUNwQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQUUsT0FBTyxLQUFLLENBQUM7U0FDOUM7UUFFRCw0QkFBNEI7UUFDNUIsT0FBTyxJQUFJLENBQUM7SUFFZCxDQUFDO0lBRUQsU0FBUyxlQUFlO1FBRXRCLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEtBQUssTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFFeEUsZ0NBQWdDO1FBQ2hDLEtBQUssSUFBSSxHQUFHLElBQUksSUFBSSxFQUFFO1lBQ3BCLElBQUksTUFBTSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRTtnQkFDbkQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUU7b0JBQ2xDLE9BQU8sS0FBSyxDQUFDO2lCQUNkO2FBQ0Y7U0FDRjtRQUVELDRCQUE0QjtRQUM1QixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxTQUFTLGFBQWE7UUFDcEIsT0FBTyxJQUFJLENBQUMsWUFBWSxLQUFLLElBQUksQ0FBQyxZQUFZO2VBQ3pDLElBQUksQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLElBQUk7ZUFDdkIsSUFBSSxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDO0lBQy9CLENBQUM7SUFFRCxTQUFTLGlCQUFpQjtRQUN4QixPQUFPLElBQUksQ0FBQyxRQUFRLEVBQUUsS0FBSyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDN0MsQ0FBQztJQUVELFNBQVMsa0JBQWtCO1FBQ3pCLE9BQU8sSUFBSSxLQUFLLElBQUksQ0FBQztJQUN2QixDQUFDO0lBRUQsU0FBUyxhQUFhO1FBQ3BCLE9BQU8sZ0JBQWdCLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFFRCxzQkFBc0I7SUFDdEIsSUFBSSxJQUFJLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBRXpCLHVEQUF1RDtJQUN2RCxJQUFJLElBQUksS0FBSyxPQUFPLENBQUMsSUFBSSxDQUFDO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFFekMsd0JBQXdCO0lBQ3hCLElBQUksSUFBSSxLQUFLLE9BQU87UUFBRSxPQUFPLGNBQWMsRUFBRSxDQUFDO0lBRTlDLElBQUksSUFBSSxLQUFLLE1BQU07UUFBRSxPQUFPLGFBQWEsRUFBRSxDQUFDO0lBRTVDLElBQUksSUFBSSxLQUFLLE1BQU07UUFBRSxPQUFPLGFBQWEsRUFBRSxDQUFDO0lBRTVDLElBQUksSUFBSSxLQUFLLFFBQVE7UUFBRSxPQUFPLGVBQWUsRUFBRSxDQUFDO0lBRWhELElBQUksSUFBSSxLQUFLLFVBQVU7UUFBRSxPQUFPLGlCQUFpQixFQUFFLENBQUM7SUFFcEQsT0FBTyxrQkFBa0IsRUFBRSxDQUFDO0FBQzlCLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsWUFBWTtJQUMxQixJQUFJLEVBQUUsR0FBRztRQUNQLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDekUsQ0FBQyxDQUFDO0lBQ0YsT0FBTyxDQUFDLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ3pGLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLFlBQVksQ0FBQyxLQUFhO0lBQ3hDLElBQUk7UUFDRixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQy9CLE9BQU8sQ0FBQyxPQUFPLElBQUksS0FBSyxRQUFRLENBQUMsQ0FBQztLQUNuQztJQUFDLE9BQU8sQ0FBQyxFQUFFO1FBQ1YsT0FBTyxLQUFLLENBQUM7S0FDZDtBQUNILENBQUM7QUFFRDs7O0dBR0c7QUFDSCxNQUFNLFVBQVUseUJBQXlCLENBQUMsS0FBWTtJQUNwRCxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7SUFDdkIsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO0FBQzFCLENBQUM7QUFFRDs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxVQUFVLG1CQUFtQixDQUNqQyxHQUFRLEVBQ1IsV0FBbUIsRUFDbkIsZ0JBQXFCLEVBQ3JCLGdCQUFxQjtJQUVyQixJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7UUFDdEIsT0FBTyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ3BCLE9BQU8sUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksS0FBSyxJQUFJO2dCQUNwQyxDQUFDLENBQUMsbUJBQW1CLENBQUMsSUFBSSxFQUFFLFdBQVcsRUFBRSxnQkFBZ0IsRUFBRSxnQkFBZ0IsQ0FBQztnQkFDNUUsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUNYLENBQUMsQ0FBQyxDQUFDO0tBQ0o7U0FBTSxJQUFJLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLEtBQUssSUFBSSxFQUFFO1FBQ3hDLE1BQU0sVUFBVSxHQUFRLEVBQUUsQ0FBQztRQUMzQixLQUFLLE1BQU0sR0FBRyxJQUFJLEdBQUcsRUFBRTtZQUNyQixJQUFJLEdBQUcsS0FBSyxXQUFXLEVBQUU7Z0JBQ3ZCLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRTtvQkFDM0IsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLGdCQUFnQixDQUFDLEVBQUU7d0JBQ3ZDLFVBQVUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztxQkFDeEM7eUJBQU07d0JBQ0wsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO3FCQUNyQztvQkFFRCxVQUFVLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2lCQUM1QjtxQkFBTTtvQkFDTCxVQUFVLENBQUMsR0FBRyxDQUFDLEdBQUcsZ0JBQWdCLENBQUM7aUJBQ3BDO2FBQ0Y7aUJBQU07Z0JBQ0wsVUFBVSxDQUFDLEdBQUcsQ0FBQyxHQUFHLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxXQUFXLEVBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQzthQUNsRztTQUNGO1FBRUQsT0FBTyxVQUFVLENBQUM7S0FDbkI7SUFFRCxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxNQUFNLFVBQVUsdUJBQXVCLENBQUMsUUFBYSxFQUFFLE9BQVksRUFBRSxTQUFTLEdBQUcsRUFBRTtJQUNqRixLQUFLLE1BQU0sR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUU7UUFDdEMsTUFBTSxPQUFPLEdBQVcsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLFNBQVMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO1FBRWhFLElBQUksUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxJQUFJLElBQUksUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ3BFLE1BQU0sWUFBWSxHQUFHLHVCQUF1QixDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFFbkYsSUFBSSxZQUFZLEVBQUU7Z0JBQ2hCLE9BQU8sWUFBWSxDQUFDO2FBQ3JCO1NBQ0Y7YUFBTTtZQUNMLElBQUksUUFBUSxDQUFDLEdBQUcsQ0FBQyxLQUFLLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRTtnQkFDbEMsT0FBTyxPQUFPLENBQUM7YUFDaEI7U0FDRjtLQUNGO0lBRUQsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsc0JBQXNCLENBQUMsUUFBYSxFQUFFLE9BQVk7SUFDaEUsTUFBTSxJQUFJLEdBQW1CLHVCQUF1QixDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsRUFDckUsS0FBSyxHQUFHLElBQUksRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7SUFFM0IsT0FBTyxLQUFLLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztBQUNyRSxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxTQUFTLENBQUMsS0FBVTtJQUNsQyxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQzNDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGVtcHR5IH0gZnJvbSAnLi4vdHlwZXMnO1xyXG5pbXBvcnQgeyBhZGRJdGVtLCBoYXNJdGVtLCByZW1vdmVJdGVtIH0gZnJvbSAnLi9jb2xsZWN0aW9ucy51dGlscyc7XHJcbmltcG9ydCB7IGlzRXF1YWxEYXRlVGltZXMgfSBmcm9tICcuL2RhdGUtdGltZS51dGlscyc7XHJcblxyXG4vKipcclxuICogUmV0dXJuIHRydWUgaWYgdmFsdWUgZGVmaW5lZFxyXG4gKiBAcGFyYW0gdmFsdWUgVmFsdWUgdG8gY2hlY2tcclxuICogQHJldHVybnMgVHJ1ZSBpZiB2YWx1ZSBpcyBub3QgbnVsbCBhbmQgZGVmaW5lZFxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGlzRGVmaW5lZDxUPih2YWx1ZTogVCB8IHVuZGVmaW5lZCB8IG51bGwpOiBib29sZWFuIHtcclxuICByZXR1cm4gPFQ+dmFsdWUgIT09IHVuZGVmaW5lZCAmJiA8VD52YWx1ZSAhPT0gbnVsbDtcclxufVxyXG5cclxuLyoqXHJcbiAqIFJldHVybiB0cnVlIGlmIHZhbHVlIGlzIG9iamVjdFxyXG4gKiBAcGFyYW0gdmFsdWUgVmFsdWUgdG8gY2hlY2tcclxuICogQHJldHVybnMgVHJ1ZSBpZiB2YWx1ZSBpcyBvYmplY3RcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBpc09iamVjdCh2YWx1ZTogYW55KTogYm9vbGVhbiB7XHJcbiAgcmV0dXJuIChpc0RlZmluZWQodmFsdWUpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCdcclxuICAgICYmICFBcnJheS5pc0FycmF5KHZhbHVlKVxyXG4gICAgJiYgISh2YWx1ZSBpbnN0YW5jZW9mIERhdGUgfHwgdmFsdWUgaW5zdGFuY2VvZiBGaWxlKSk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBSZXR1cm4gdHJ1ZSBpZiBkYXRhIGlzIG9ic2VydmFibGVcclxuICogQHBhcmFtIGRhdGEgT2JqZWN0IHRvIGNoZWNrXHJcbiAqIEByZXR1cm5zIFRydWUgaWYgZGF0YSBpcyBvYnNlcnZhYmxlXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gaXNBc3luY0RhdGEoZGF0YTogYW55KSB7XHJcbiAgcmV0dXJuIGRhdGEgaW5zdGFuY2VvZiBPYnNlcnZhYmxlO1xyXG59XHJcblxyXG4vKipcclxuICogUmV0dXJuIGV4dGVuZGVkIG9iamVjdCB3aXRoIG5ldyBwcm9wZXJ0eVxyXG4gKiBAcGFyYW0gb2JqIE9iamVjdCB0byBleHRlbmQgYnkgcHJvcGVydHlcclxuICogQHBhcmFtIHByb3BlcnR5IE5ldyBwcm9wZXJ0eSBuYW1lIFxyXG4gKiBAcGFyYW0gdmFsdWUgVmFsdWUgZm9yIG5ldyBwcm9wZXJ0eVxyXG4gKiBAcmV0dXJucyBFeHRlbmRlZCBvYmplY3Qgd2l0aCBuZXcgcHJvcGVydHlcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBhZGRQcm9wZXJ0eVRvT2JqZWN0KG9iajogYW55LCBwcm9wZXJ0eTogc3RyaW5nLCB2YWx1ZTogYW55ID0gbnVsbCk6IGFueSB7XHJcbiAgaWYgKGlzRGVmaW5lZChwcm9wZXJ0eSkgJiYgIW9iai5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkpIHtcclxuICAgIGxldCBuZXdPYmo6IGFueSA9IHt9O1xyXG4gICAgbmV3T2JqW3Byb3BlcnR5XSA9IHZhbHVlO1xyXG4gICAgb2JqID0geyAuLi5vYmosIC4uLm5ld09iaiB9O1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIG9iajtcclxufVxyXG5cclxuLyoqXHJcbiAqIFJlbW92ZSBwcm9wZXJ0eSBmcm9tIG9iamVjdFxyXG4gKiBAcGFyYW0gb2JqIE9iamVjdCBmb3IgcmVtb3ZpbmcgcHJvcGVydHlcclxuICogQHBhcmFtIHByb3BlcnR5IFByb3BlcnR5IG5hbWUgdG8gcmVtb3ZlXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlUHJvcGVydHlGcm9tT2JqZWN0KG9iajogYW55LCBwcm9wZXJ0eTogc3RyaW5nKTogdm9pZCB7XHJcbiAgaWYgKG9iai5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkpIHtcclxuICAgIGRlbGV0ZSBvYmpbcHJvcGVydHldO1xyXG4gIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIERlZXAgbWVyZ2Ugb2JqZWN0IHdpdGggb3RoZXJzXHJcbiAqIEBwYXJhbSB0YXJnZXQgIE9iamVjdCB0byBtZXJnZVxyXG4gKiBAcGFyYW0gc291cmNlcyBPYmplY3RzIHRvIGJlIG1lcmdlZCB3aXRoIHRhcmdldFxyXG4gKiBAcmV0dXJucyBNZXJnZWQgb2JqZWN0XHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VEZWVwKHRhcmdldDogYW55LCAuLi5zb3VyY2VzOiBhbnlbXSk6IGFueSB7XHJcbiAgaWYgKCFzb3VyY2VzLmxlbmd0aClcclxuICAgIHJldHVybiB0YXJnZXQ7XHJcblxyXG4gIGNvbnN0IHNvdXJjZSA9IHNvdXJjZXMuc2hpZnQoKTtcclxuXHJcbiAgaWYgKGlzT2JqZWN0KHRhcmdldCkgJiYgaXNPYmplY3Qoc291cmNlKSkge1xyXG4gICAgZm9yIChjb25zdCBrZXkgaW4gc291cmNlKSB7XHJcbiAgICAgIGlmIChpc09iamVjdChzb3VyY2Vba2V5XSkpIHtcclxuICAgICAgICBpZiAoIXRhcmdldFtrZXldKSBPYmplY3QuYXNzaWduKHRhcmdldCwgeyBba2V5XToge30gfSk7XHJcbiAgICAgICAgbWVyZ2VEZWVwKHRhcmdldFtrZXldLCBzb3VyY2Vba2V5XSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgT2JqZWN0LmFzc2lnbih0YXJnZXQsIHsgW2tleV06IHNvdXJjZVtrZXldIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZXR1cm4gbWVyZ2VEZWVwKHRhcmdldCwgLi4uc291cmNlcyk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBHZXQgdHlwZSdzIHByb3BlcnR5IG5hbWUgc2FmZXR5XHJcbiAqIEBwYXJhbSBuYW1lIEtleU9mIHByb3BlcnR5XHJcbiAqIEByZXR1cm5zIFR5cGUncyBwcm9wZXJ0eSBuYW1lXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgbmFtZW9mID0gPFQ+KG5hbWU6IGtleW9mIFQpID0+IG5hbWU7XHJcblxyXG4vKipcclxuICAgKiBEZXRlcm1pbmVzIGlmIHRoZSBpbnB1dCBpcyBhIE51bWJlciBvciBzb21ldGhpbmcgdGhhdCBjYW4gYmUgY29lcmNlZCB0byBhIE51bWJlclxyXG4gICAqIEBwYXJhbSBudW1iZXIgVGhlIGlucHV0IHRvIGJlIHRlc3RlZFxyXG4gICAqIEByZXR1cm5zIC0gQW4gaW5kaWNhdGlvbiBpZiB0aGUgaW5wdXQgaXMgYSBOdW1iZXIgb3IgY2FuIGJlIGNvZXJjZWQgdG8gYSBOdW1iZXJcclxuICAgKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGlzTnVtZXJpYyhudW1iZXI6IGFueSk6IGJvb2xlYW4ge1xyXG4gIHJldHVybiAhaXNOYU4ocGFyc2VGbG9hdChudW1iZXIpKTtcclxufVxyXG5cclxuLyoqXHJcbiAqICBEZXRlcm1pbmVzIGlmIHRoZSBpbnB1dCBpcyBhIHN0cmluZ1xyXG4gKiBAcGFyYW0gdmFsdWUgVGhlIGlucHV0IHRvIGJlIHRlc3RlZFxyXG4gKiBAcmV0dXJucyBBbiBpbmRpY2F0aW9uIGlmIHRoZSBpbnB1dCBpcyBhIHN0cmluZ1xyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGlzU3RyaW5nKHZhbHVlOiBhbnkpOiBib29sZWFuIHtcclxuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJztcclxufVxyXG5cclxuLyoqXHJcbiAqIFJldHVybiB0cnVlIGlmIGN1cnJlbnQgYnJvd3NlciBpcyBDaHJvbWVcclxuICogQHJldHVybnMgSWYgY3VycmVudCBicm93c2VyIGlzIENocm9tZVxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGlzQ2hyb21lQnJvd3NlcigpOiBib29sZWFuIHtcclxuICByZXR1cm4gL0Nocm9tZS8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSAmJiAvR29vZ2xlIEluYy8udGVzdChuYXZpZ2F0b3IudmVuZG9yKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIFJldHVybiB0cnVlIGlmIHZhbHVlIGlzIHZhbGlkIGVtYWlsIGFkZHJlc3NcclxuICogQHJldHVybnMgVHJ1ZSBpZiBpdCdzIHZhbGlkIGVtYWlsIGFkZHJlc3NcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBpc0VtYWlsKHZhbHVlOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICByZXR1cm4gaXNEZWZpbmVkKHZhbHVlLm1hdGNoKFxyXG4gICAgL14oKFtePD4oKVtcXF1cXFxcLiw7Olxcc0BcXFwiXSsoXFwuW148PigpW1xcXVxcXFwuLDs6XFxzQFxcXCJdKykqKXwoXFxcIi4rXFxcIikpQCgoXFxbWzAtOV17MSwzfVxcLlswLTldezEsM31cXC5bMC05XXsxLDN9XFwuWzAtOV17MSwzfVxcXSl8KChbYS16QS1aXFwtMC05XStcXC4pK1thLXpBLVpdezIsfSkpJC9cclxuICApKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIFJldHVybiB0cnVlIGlmIHN0cmluZyBpcyBcInRydWVcIlxyXG4gKiBAcmV0dXJucyBwYXJzZWQgc3RyaW5nIGFzIGJvb2xlYW5cclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUJvb2xlYW4odmFsdWU6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gIHJldHVybiAvXnRydWUkL2kudGVzdCh2YWx1ZSk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBSZXR1cm4gdHJ1ZSBpZiB2YWx1ZXMgZXF1YWxcclxuICogQHBhcmFtIG9iajEgRmlyc3QgdmFsdWUgdG8gY29tcGFyZVxyXG4gKiBAcGFyYW0gb2JqMiBTZWNvbmQgdmFsdWUgdG8gY29tcGFyZVxyXG4gKiBAcmV0dXJucyBUcnVlIGlmIGVxdWFsXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gaXNFcXVhbChvYmoxOiBhbnksIG9iajI6IGFueSkge1xyXG4gIC8qKlxyXG4gICAqIE1vcmUgYWNjdXJhdGVseSBjaGVjayB0aGUgdHlwZSBvZiBhIEphdmFTY3JpcHQgb2JqZWN0XHJcbiAgICogQHBhcmFtICB7T2JqZWN0fSBvYmogVGhlIG9iamVjdFxyXG4gICAqIEByZXR1cm4ge1N0cmluZ30gICAgIFRoZSBvYmplY3QgdHlwZVxyXG4gICAqL1xyXG4gIGZ1bmN0aW9uIGdldFR5cGUob2JqOiBhbnkpIHtcclxuICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqKS5zbGljZSg4LCAtMSkudG9Mb3dlckNhc2UoKTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIGFyZUFycmF5c0VxdWFsKCkge1xyXG5cclxuICAgIC8vIENoZWNrIGxlbmd0aFxyXG4gICAgaWYgKG9iajEubGVuZ3RoICE9PSBvYmoyLmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIC8vIENoZWNrIGVhY2ggaXRlbSBpbiB0aGUgYXJyYXlcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb2JqMS5sZW5ndGg7IGkrKykge1xyXG4gICAgICBpZiAoIWlzRXF1YWwob2JqMVtpXSwgb2JqMltpXSkpIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBJZiBubyBlcnJvcnMsIHJldHVybiB0cnVlXHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuXHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBhcmVPYmplY3RzRXF1YWwoKSB7XHJcblxyXG4gICAgaWYgKE9iamVjdC5rZXlzKG9iajEpLmxlbmd0aCAhPT0gT2JqZWN0LmtleXMob2JqMikubGVuZ3RoKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgLy8gQ2hlY2sgZWFjaCBpdGVtIGluIHRoZSBvYmplY3RcclxuICAgIGZvciAobGV0IGtleSBpbiBvYmoxKSB7XHJcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqMSwga2V5KSkge1xyXG4gICAgICAgIGlmICghaXNFcXVhbChvYmoxW2tleV0sIG9iajJba2V5XSkpIHtcclxuICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBJZiBubyBlcnJvcnMsIHJldHVybiB0cnVlXHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIGFyZUZpbGVzRXF1YWwoKSB7XHJcbiAgICByZXR1cm4gb2JqMS5sYXN0TW9kaWZpZWQgPT09IG9iajIubGFzdE1vZGlmaWVkXHJcbiAgICAgICYmIG9iajEuc2l6ZSA9PT0gb2JqMi5zaXplXHJcbiAgICAgICYmIG9iajEudHlwZSA9PT0gb2JqMi50eXBlO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gYXJlRnVuY3Rpb25zRXF1YWwoKSB7XHJcbiAgICByZXR1cm4gb2JqMS50b1N0cmluZygpID09PSBvYmoyLnRvU3RyaW5nKCk7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBhcmVQcmltYXRpdmVzRXF1YWwoKSB7XHJcbiAgICByZXR1cm4gb2JqMSA9PT0gb2JqMjtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIGFyZURhdGVzRXF1YWwoKSB7XHJcbiAgICByZXR1cm4gaXNFcXVhbERhdGVUaW1lcyhvYmoxLCBvYmoyKTtcclxuICB9XHJcblxyXG4gIC8vIEdldCB0aGUgb2JqZWN0IHR5cGVcclxuICBsZXQgdHlwZSA9IGdldFR5cGUob2JqMSk7XHJcblxyXG4gIC8vIElmIHRoZSB0d28gaXRlbXMgYXJlIG5vdCB0aGUgc2FtZSB0eXBlLCByZXR1cm4gZmFsc2VcclxuICBpZiAodHlwZSAhPT0gZ2V0VHlwZShvYmoyKSkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAvLyBDb21wYXJlIGJhc2VkIG9uIHR5cGVcclxuICBpZiAodHlwZSA9PT0gJ2FycmF5JykgcmV0dXJuIGFyZUFycmF5c0VxdWFsKCk7XHJcblxyXG4gIGlmICh0eXBlID09PSAnZGF0ZScpIHJldHVybiBhcmVEYXRlc0VxdWFsKCk7XHJcblxyXG4gIGlmICh0eXBlID09PSAnZmlsZScpIHJldHVybiBhcmVGaWxlc0VxdWFsKCk7XHJcblxyXG4gIGlmICh0eXBlID09PSAnb2JqZWN0JykgcmV0dXJuIGFyZU9iamVjdHNFcXVhbCgpO1xyXG5cclxuICBpZiAodHlwZSA9PT0gJ2Z1bmN0aW9uJykgcmV0dXJuIGFyZUZ1bmN0aW9uc0VxdWFsKCk7XHJcblxyXG4gIHJldHVybiBhcmVQcmltYXRpdmVzRXF1YWwoKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIEdlbmVyYXRlIHVuaXF1ZSBpZGVudGlmaWNhdG9yXHJcbiAqIEByZXR1cm5zIFJhbmRvbSBHVUlEXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVHdWlkKCk6IHN0cmluZyB7XHJcbiAgbGV0IFM0ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgcmV0dXJuICgoKDEgKyBNYXRoLnJhbmRvbSgpKSAqIDB4MTAwMDApIHwgMCkudG9TdHJpbmcoMTYpLnN1YnN0cmluZygxKTtcclxuICB9O1xyXG4gIHJldHVybiAoUzQoKSArIFM0KCkgKyBcIi1cIiArIFM0KCkgKyBcIi1cIiArIFM0KCkgKyBcIi1cIiArIFM0KCkgKyBcIi1cIiArIFM0KCkgKyBTNCgpICsgUzQoKSk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBDaGVjayBpZiB2YWx1ZSBpcyBKc29uIHBhcnNhYmxlIHN0cmluZ1xyXG4gKiBAcGFyYW0gdmFsdWUgc3RyaW5nIHZhbHVlXHJcbiAqIEByZXR1cm5zIFRydWUgaWYgc3RyaW5nIGNhbiBiZSBKU09OIHBhcnNlZFxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGlzSnNvblN0cmluZyh2YWx1ZTogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgdHJ5IHtcclxuICAgIGNvbnN0IGpzb24gPSBKU09OLnBhcnNlKHZhbHVlKTtcclxuICAgIHJldHVybiAodHlwZW9mIGpzb24gPT09ICdvYmplY3QnKTtcclxuICB9IGNhdGNoIChlKSB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG59XHJcblxyXG4vKipcclxuICogU3RvcCBwcm9wYWdhdGlvbiBhbmQgcHJldmVudCBkZWZhdWx0XHJcbiAqIEBwYXJhbSBldmVudCBFdmVudCBvYmplY3RcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBzdG9wQW5kUHJldmVudFByb3BhZ2F0aW9uKGV2ZW50OiBFdmVudCk6IHZvaWQge1xyXG4gIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBVcGRhdGUgcHJvcGVydHkgaW4gb2JqZWN0IGJ5IGtleVxyXG4gKiBAcGFyYW0gb2JqIE9iamVjdCB0byBjaGFuZ2VcclxuICogQHBhcmFtIHByb3BlcnR5S2V5IFByb3BlcnR5IHRvIGNoYW5nZVxyXG4gKiBAcGFyYW0gbmV3UHJvcGVydHlWYWx1ZSBOZXcgcHJvcGVydHkgdmFsdWVcclxuICogQHBhcmFtIG9sZFByb3BlcnR5VmFsdWUgT2xkIHByb3BlcnR5IHZhbHVlXHJcbiAqIEByZXR1cm5zIFVwZGF0ZWQgb2JqZWN0XHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlUHJvcGVydHlCeUtleShcclxuICBvYmo6IGFueSxcclxuICBwcm9wZXJ0eUtleTogc3RyaW5nLFxyXG4gIG5ld1Byb3BlcnR5VmFsdWU6IGFueSxcclxuICBvbGRQcm9wZXJ0eVZhbHVlOiBhbnlcclxuKTogYW55IHtcclxuICBpZiAoQXJyYXkuaXNBcnJheShvYmopKSB7XHJcbiAgICByZXR1cm4gb2JqLm1hcChpdGVtID0+IHtcclxuICAgICAgcmV0dXJuIGlzT2JqZWN0KGl0ZW0pICYmIGl0ZW0gIT09IG51bGxcclxuICAgICAgICA/IHVwZGF0ZVByb3BlcnR5QnlLZXkoaXRlbSwgcHJvcGVydHlLZXksIG5ld1Byb3BlcnR5VmFsdWUsIG9sZFByb3BlcnR5VmFsdWUpXHJcbiAgICAgICAgOiBpdGVtO1xyXG4gICAgfSk7XHJcbiAgfSBlbHNlIGlmIChpc09iamVjdChvYmopICYmIG9iaiAhPT0gbnVsbCkge1xyXG4gICAgY29uc3QgdXBkYXRlZE9iajogYW55ID0ge307XHJcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBvYmopIHtcclxuICAgICAgaWYgKGtleSA9PT0gcHJvcGVydHlLZXkpIHtcclxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShvYmpba2V5XSkpIHtcclxuICAgICAgICAgIGlmIChoYXNJdGVtKG9ialtrZXldLCBvbGRQcm9wZXJ0eVZhbHVlKSkge1xyXG4gICAgICAgICAgICByZW1vdmVJdGVtKG9ialtrZXldLCBvbGRQcm9wZXJ0eVZhbHVlKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGFkZEl0ZW0ob2JqW2tleV0sIG9sZFByb3BlcnR5VmFsdWUpO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHVwZGF0ZWRPYmpba2V5XSA9IG9ialtrZXldO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB1cGRhdGVkT2JqW2tleV0gPSBuZXdQcm9wZXJ0eVZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB1cGRhdGVkT2JqW2tleV0gPSB1cGRhdGVQcm9wZXJ0eUJ5S2V5KG9ialtrZXldLCBwcm9wZXJ0eUtleSwgbmV3UHJvcGVydHlWYWx1ZSwgb2xkUHJvcGVydHlWYWx1ZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdXBkYXRlZE9iajtcclxuICB9XHJcblxyXG4gIHJldHVybiBvYmo7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBHZXQgY2hhbmdlZCBwcm9wZXJ0eSBwYXRoXHJcbiAqIEBwYXJhbSBwcmV2aW91cyBQcmV2aW91cyB2YWx1ZSBcclxuICogQHBhcmFtIGN1cnJlbnQgQ3VycmVuY3kgdmFsdWVcclxuICogQHBhcmFtIHBhcmVudEtleSBQYXJlbnQgb2JqZWN0IGtleSBuYW1lXHJcbiAqIEByZXR1cm5zIFBhdGggb2YgcHJvcGVydHkgdGhhdCB3YXMgY2hhbmdlZFxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGZpbmRDaGFuZ2VkUHJvcGVydHlQYXRoKHByZXZpb3VzOiBhbnksIGN1cnJlbnQ6IGFueSwgcGFyZW50S2V5ID0gJycpOiBzdHJpbmcgfCBlbXB0eSB7XHJcbiAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMoY3VycmVudCkpIHtcclxuICAgIGNvbnN0IGZ1bGxLZXk6IHN0cmluZyA9IHBhcmVudEtleSA/IGAke3BhcmVudEtleX0uJHtrZXl9YCA6IGtleTtcclxuXHJcbiAgICBpZiAoaXNPYmplY3QoY3VycmVudFtrZXldKSAmJiBjdXJyZW50W2tleV0gIT09IG51bGwgJiYgcHJldmlvdXNba2V5XSkge1xyXG4gICAgICBjb25zdCBuZXN0ZWRDaGFuZ2UgPSBmaW5kQ2hhbmdlZFByb3BlcnR5UGF0aChwcmV2aW91c1trZXldLCBjdXJyZW50W2tleV0sIGZ1bGxLZXkpO1xyXG5cclxuICAgICAgaWYgKG5lc3RlZENoYW5nZSkge1xyXG4gICAgICAgIHJldHVybiBuZXN0ZWRDaGFuZ2U7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmIChwcmV2aW91c1trZXldICE9PSBjdXJyZW50W2tleV0pIHtcclxuICAgICAgICByZXR1cm4gZnVsbEtleTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmV0dXJuIG51bGw7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBHZXQgY2hhbmdlZCBwcm9wZXJ0eSBrZXlcclxuICogQHBhcmFtIHByZXZpb3VzIFByZXZpb3VzIHZhbHVlXHJcbiAqIEBwYXJhbSBjdXJyZW50IEN1cnJlbmN5IHZhbHVlXHJcbiAqIEByZXR1cm5zIEtleSBvZiBwcm9wZXJ0eSB0aGF0IHdhcyBjaGFuZ2VkXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gZmluZENoYW5nZWRQcm9wZXJ0eUtleShwcmV2aW91czogYW55LCBjdXJyZW50OiBhbnkpOiBzdHJpbmcgfCBlbXB0eSB7XHJcbiAgY29uc3QgcGF0aDogc3RyaW5nIHwgZW1wdHkgPSBmaW5kQ2hhbmdlZFByb3BlcnR5UGF0aChwcmV2aW91cywgY3VycmVudCksXHJcbiAgICBwYXJ0cyA9IHBhdGg/LnNwbGl0KCcuJyk7XHJcblxyXG4gIHJldHVybiBwYXJ0cyAmJiBwYXJ0cy5sZW5ndGggPyBwYXJ0c1twYXJ0cy5sZW5ndGggLSAxXSA6IHVuZGVmaW5lZDtcclxufVxyXG5cclxuLyoqXHJcbiAqIENsb25lIG9iamVjdCB3aXRob3V0IGFueSByZWZlcmVuY2VcclxuICogQHBhcmFtIHZhbHVlICBPYmplY3QgdG8gY2xvbmVcclxuICogQHJldHVybnMgQ2xvbmVkIG9iamVjdFxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGRlZXBDbG9uZSh2YWx1ZTogYW55KTogYW55IHtcclxuICByZXR1cm4gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh2YWx1ZSkpO1xyXG59Il19
450
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9uLnV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNmYy1jb21tb24vc3JjL2xpYi91dGlscy9jb21tb24udXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUdsQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDakQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFckQ7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxTQUFTLENBQUksS0FBMkI7SUFDdEQsT0FBVSxLQUFLLEtBQUssU0FBUyxJQUFPLEtBQUssS0FBSyxJQUFJLENBQUM7QUFDckQsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsUUFBUSxDQUFDLEtBQVU7SUFDakMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRO1dBQ2hELENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7V0FDckIsQ0FBQyxDQUFDLEtBQUssWUFBWSxJQUFJLElBQUksS0FBSyxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDMUQsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsV0FBVyxDQUFDLElBQVM7SUFDbkMsT0FBTyxJQUFJLFlBQVksVUFBVSxDQUFDO0FBQ3BDLENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxNQUFNLFVBQVUsbUJBQW1CLENBQUMsR0FBUSxFQUFFLFFBQWdCLEVBQUUsUUFBYSxJQUFJO0lBQy9FLElBQUksU0FBUyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsRUFBRTtRQUN4RCxJQUFJLE1BQU0sR0FBUSxFQUFFLENBQUM7UUFDckIsTUFBTSxDQUFDLFFB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QUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztBQUNyRSxDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsTUFBTSxVQUFVLHVCQUF1QixDQUFDLFFBQWEsRUFBRSxPQUFZLEVBQUUsWUFBb0IsRUFBRTtJQUN6RixLQUFLLE1BQU0sR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUU7UUFDdEMsTUFBTSxPQUFPLEdBQVcsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLFNBQVMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO1FBRWhFLElBQUksUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxJQUFJLElBQUksUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ3BFLE1BQU0sWUFBWSxHQUFHLHVCQUF1QixDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFFbkYsSUFBSSxZQUFZLEVBQUU7Z0JBQ2hCLE9BQU8sWUFBWSxDQUFDO2FBQ3JCO1NBQ0Y7YUFBTTtZQUNMLElBQUksUUFBUSxDQUFDLEdBQUcsQ0FBQyxLQUFLLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRTtnQkFDbEMsT0FBTyxPQUFPLENBQUM7YUFDaEI7U0FDRjtLQUNGO0lBRUQsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxTQUFTLENBQUMsS0FBVTtJQUNsQyxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQzNDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGVtcHR5IH0gZnJvbSAnLi4vdHlwZXMnO1xyXG5pbXBvcnQgeyBzZWdtZW50IH0gZnJvbSAnLi4vdHlwZXMvc2VnbWVudC50eXBlJztcclxuaW1wb3J0IHsgdG9nZ2xlSXRlbSB9IGZyb20gJy4vY29sbGVjdGlvbnMudXRpbHMnO1xyXG5pbXBvcnQgeyBpc0VxdWFsRGF0ZVRpbWVzIH0gZnJvbSAnLi9kYXRlLXRpbWUudXRpbHMnO1xyXG5cclxuLyoqXHJcbiAqIFJldHVybiB0cnVlIGlmIHZhbHVlIGRlZmluZWRcclxuICogQHBhcmFtIHZhbHVlIFZhbHVlIHRvIGNoZWNrXHJcbiAqIEByZXR1cm5zIFRydWUgaWYgdmFsdWUgaXMgbm90IG51bGwgYW5kIGRlZmluZWRcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBpc0RlZmluZWQ8VD4odmFsdWU6IFQgfCB1bmRlZmluZWQgfCBudWxsKTogYm9vbGVhbiB7XHJcbiAgcmV0dXJuIDxUPnZhbHVlICE9PSB1bmRlZmluZWQgJiYgPFQ+dmFsdWUgIT09IG51bGw7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBSZXR1cm4gdHJ1ZSBpZiB2YWx1ZSBpcyBvYmplY3RcclxuICogQHBhcmFtIHZhbHVlIFZhbHVlIHRvIGNoZWNrXHJcbiAqIEByZXR1cm5zIFRydWUgaWYgdmFsdWUgaXMgb2JqZWN0XHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gaXNPYmplY3QodmFsdWU6IGFueSk6IGJvb2xlYW4ge1xyXG4gIHJldHVybiAoaXNEZWZpbmVkKHZhbHVlKSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnXHJcbiAgICAmJiAhQXJyYXkuaXNBcnJheSh2YWx1ZSlcclxuICAgICYmICEodmFsdWUgaW5zdGFuY2VvZiBEYXRlIHx8IHZhbHVlIGluc3RhbmNlb2YgRmlsZSkpO1xyXG59XHJcblxyXG4vKipcclxuICogUmV0dXJuIHRydWUgaWYgZGF0YSBpcyBvYnNlcnZhYmxlXHJcbiAqIEBwYXJhbSBkYXRhIE9iamVjdCB0byBjaGVja1xyXG4gKiBAcmV0dXJucyBUcnVlIGlmIGRhdGEgaXMgb2JzZXJ2YWJsZVxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGlzQXN5bmNEYXRhKGRhdGE6IGFueSkge1xyXG4gIHJldHVybiBkYXRhIGluc3RhbmNlb2YgT2JzZXJ2YWJsZTtcclxufVxyXG5cclxuLyoqXHJcbiAqIFJldHVybiBleHRlbmRlZCBvYmplY3Qgd2l0aCBuZXcgcHJvcGVydHlcclxuICogQHBhcmFtIG9iaiBPYmplY3QgdG8gZXh0ZW5kIGJ5IHByb3BlcnR5XHJcbiAqIEBwYXJhbSBwcm9wZXJ0eSBOZXcgcHJvcGVydHkgbmFtZSBcclxuICogQHBhcmFtIHZhbHVlIFZhbHVlIGZvciBuZXcgcHJvcGVydHlcclxuICogQHJldHVybnMgRXh0ZW5kZWQgb2JqZWN0IHdpdGggbmV3IHByb3BlcnR5XHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gYWRkUHJvcGVydHlUb09iamVjdChvYmo6IGFueSwgcHJvcGVydHk6IHN0cmluZywgdmFsdWU6IGFueSA9IG51bGwpOiBhbnkge1xyXG4gIGlmIChpc0RlZmluZWQocHJvcGVydHkpICYmICFvYmouaGFzT3duUHJvcGVydHkocHJvcGVydHkpKSB7XHJcbiAgICBsZXQgbmV3T2JqOiBhbnkgPSB7fTtcclxuICAgIG5ld09ialtwcm9wZXJ0eV0gPSB2YWx1ZTtcclxuICAgIG9iaiA9IHsgLi4ub2JqLCAuLi5uZXdPYmogfTtcclxuICB9XHJcblxyXG4gIHJldHVybiBvYmo7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBSZW1vdmUgcHJvcGVydHkgZnJvbSBvYmplY3RcclxuICogQHBhcmFtIG9iaiBPYmplY3QgZm9yIHJlbW92aW5nIHByb3BlcnR5XHJcbiAqIEBwYXJhbSBwcm9wZXJ0eSBQcm9wZXJ0eSBuYW1lIHRvIHJlbW92ZVxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZVByb3BlcnR5RnJvbU9iamVjdChvYmo6IGFueSwgcHJvcGVydHk6IHN0cmluZyk6IHZvaWQge1xyXG4gIGlmIChvYmouaGFzT3duUHJvcGVydHkocHJvcGVydHkpKSB7XHJcbiAgICBkZWxldGUgb2JqW3Byb3BlcnR5XTtcclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBEZWVwIG1lcmdlIG9iamVjdCB3aXRoIG90aGVyc1xyXG4gKiBAcGFyYW0gdGFyZ2V0ICBPYmplY3QgdG8gbWVyZ2VcclxuICogQHBhcmFtIHNvdXJjZXMgT2JqZWN0cyB0byBiZSBtZXJnZWQgd2l0aCB0YXJnZXRcclxuICogQHJldHVybnMgTWVyZ2VkIG9iamVjdFxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlRGVlcCh0YXJnZXQ6IGFueSwgLi4uc291cmNlczogYW55W10pOiBhbnkge1xyXG4gIGlmICghc291cmNlcy5sZW5ndGgpXHJcbiAgICByZXR1cm4gdGFyZ2V0O1xyXG5cclxuICBjb25zdCBzb3VyY2UgPSBzb3VyY2VzLnNoaWZ0KCk7XHJcblxyXG4gIGlmIChpc09iamVjdCh0YXJnZXQpICYmIGlzT2JqZWN0KHNvdXJjZSkpIHtcclxuICAgIGZvciAoY29uc3Qga2V5IGluIHNvdXJjZSkge1xyXG4gICAgICBpZiAoaXNPYmplY3Qoc291cmNlW2tleV0pKSB7XHJcbiAgICAgICAgaWYgKCF0YXJnZXRba2V5XSkgT2JqZWN0LmFzc2lnbih0YXJnZXQsIHsgW2tleV06IHt9IH0pO1xyXG4gICAgICAgIG1lcmdlRGVlcCh0YXJnZXRba2V5XSwgc291cmNlW2tleV0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIE9iamVjdC5hc3NpZ24odGFyZ2V0LCB7IFtrZXldOiBzb3VyY2Vba2V5XSB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmV0dXJuIG1lcmdlRGVlcCh0YXJnZXQsIC4uLnNvdXJjZXMpO1xyXG59XHJcblxyXG4vKipcclxuICogR2V0IHR5cGUncyBwcm9wZXJ0eSBuYW1lIHNhZmV0eVxyXG4gKiBAcGFyYW0gbmFtZSBLZXlPZiBwcm9wZXJ0eVxyXG4gKiBAcmV0dXJucyBUeXBlJ3MgcHJvcGVydHkgbmFtZVxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IG5hbWVvZiA9IDxUPihuYW1lOiBrZXlvZiBUKSA9PiBuYW1lO1xyXG5cclxuLyoqXHJcbiAgICogRGV0ZXJtaW5lcyBpZiB0aGUgaW5wdXQgaXMgYSBOdW1iZXIgb3Igc29tZXRoaW5nIHRoYXQgY2FuIGJlIGNvZXJjZWQgdG8gYSBOdW1iZXJcclxuICAgKiBAcGFyYW0gbnVtYmVyIFRoZSBpbnB1dCB0byBiZSB0ZXN0ZWRcclxuICAgKiBAcmV0dXJucyAtIEFuIGluZGljYXRpb24gaWYgdGhlIGlucHV0IGlzIGEgTnVtYmVyIG9yIGNhbiBiZSBjb2VyY2VkIHRvIGEgTnVtYmVyXHJcbiAgICovXHJcbmV4cG9ydCBmdW5jdGlvbiBpc051bWVyaWMobnVtYmVyOiBhbnkpOiBib29sZWFuIHtcclxuICByZXR1cm4gIWlzTmFOKHBhcnNlRmxvYXQobnVtYmVyKSk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiAgRGV0ZXJtaW5lcyBpZiB0aGUgaW5wdXQgaXMgYSBzdHJpbmdcclxuICogQHBhcmFtIHZhbHVlIFRoZSBpbnB1dCB0byBiZSB0ZXN0ZWRcclxuICogQHJldHVybnMgQW4gaW5kaWNhdGlvbiBpZiB0aGUgaW5wdXQgaXMgYSBzdHJpbmdcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBpc1N0cmluZyh2YWx1ZTogYW55KTogYm9vbGVhbiB7XHJcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZyc7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBSZXR1cm4gdHJ1ZSBpZiBjdXJyZW50IGJyb3dzZXIgaXMgQ2hyb21lXHJcbiAqIEByZXR1cm5zIElmIGN1cnJlbnQgYnJvd3NlciBpcyBDaHJvbWVcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBpc0Nocm9tZUJyb3dzZXIoKTogYm9vbGVhbiB7XHJcbiAgcmV0dXJuIC9DaHJvbWUvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkgJiYgL0dvb2dsZSBJbmMvLnRlc3QobmF2aWdhdG9yLnZlbmRvcik7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBSZXR1cm4gdHJ1ZSBpZiB2YWx1ZSBpcyB2YWxpZCBlbWFpbCBhZGRyZXNzXHJcbiAqIEByZXR1cm5zIFRydWUgaWYgaXQncyB2YWxpZCBlbWFpbCBhZGRyZXNzXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gaXNFbWFpbCh2YWx1ZTogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgcmV0dXJuIGlzRGVmaW5lZCh2YWx1ZS5tYXRjaChcclxuICAgIC9eKChbXjw+KClbXFxdXFxcXC4sOzpcXHNAXFxcIl0rKFxcLltePD4oKVtcXF1cXFxcLiw7Olxcc0BcXFwiXSspKil8KFxcXCIuK1xcXCIpKUAoKFxcW1swLTldezEsM31cXC5bMC05XXsxLDN9XFwuWzAtOV17MSwzfVxcLlswLTldezEsM31cXF0pfCgoW2EtekEtWlxcLTAtOV0rXFwuKStbYS16QS1aXXsyLH0pKSQvXHJcbiAgKSk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBSZXR1cm4gdHJ1ZSBpZiBzdHJpbmcgaXMgXCJ0cnVlXCJcclxuICogQHJldHVybnMgcGFyc2VkIHN0cmluZyBhcyBib29sZWFuXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VCb29sZWFuKHZhbHVlOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICByZXR1cm4gL150cnVlJC9pLnRlc3QodmFsdWUpO1xyXG59XHJcblxyXG4vKipcclxuICogUmV0dXJuIHRydWUgaWYgdmFsdWVzIGVxdWFsXHJcbiAqIEBwYXJhbSBvYmoxIEZpcnN0IHZhbHVlIHRvIGNvbXBhcmVcclxuICogQHBhcmFtIG9iajIgU2Vjb25kIHZhbHVlIHRvIGNvbXBhcmVcclxuICogQHJldHVybnMgVHJ1ZSBpZiBlcXVhbFxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGlzRXF1YWwob2JqMTogYW55LCBvYmoyOiBhbnkpIHtcclxuICAvKipcclxuICAgKiBNb3JlIGFjY3VyYXRlbHkgY2hlY2sgdGhlIHR5cGUgb2YgYSBKYXZhU2NyaXB0IG9iamVjdFxyXG4gICAqIEBwYXJhbSAge09iamVjdH0gb2JqIFRoZSBvYmplY3RcclxuICAgKiBAcmV0dXJuIHtTdHJpbmd9ICAgICBUaGUgb2JqZWN0IHR5cGVcclxuICAgKi9cclxuICBmdW5jdGlvbiBnZXRUeXBlKG9iajogYW55KSB7XHJcbiAgICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iaikuc2xpY2UoOCwgLTEpLnRvTG93ZXJDYXNlKCk7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBhcmVBcnJheXNFcXVhbCgpIHtcclxuXHJcbiAgICAvLyBDaGVjayBsZW5ndGhcclxuICAgIGlmIChvYmoxLmxlbmd0aCAhPT0gb2JqMi5sZW5ndGgpIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAvLyBDaGVjayBlYWNoIGl0ZW0gaW4gdGhlIGFycmF5XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9iajEubGVuZ3RoOyBpKyspIHtcclxuICAgICAgaWYgKCFpc0VxdWFsKG9iajFbaV0sIG9iajJbaV0pKSByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gSWYgbm8gZXJyb3JzLCByZXR1cm4gdHJ1ZVxyXG4gICAgcmV0dXJuIHRydWU7XHJcblxyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gYXJlT2JqZWN0c0VxdWFsKCkge1xyXG5cclxuICAgIGlmIChPYmplY3Qua2V5cyhvYmoxKS5sZW5ndGggIT09IE9iamVjdC5rZXlzKG9iajIpLmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIC8vIENoZWNrIGVhY2ggaXRlbSBpbiB0aGUgb2JqZWN0XHJcbiAgICBmb3IgKGxldCBrZXkgaW4gb2JqMSkge1xyXG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iajEsIGtleSkpIHtcclxuICAgICAgICBpZiAoIWlzRXF1YWwob2JqMVtrZXldLCBvYmoyW2tleV0pKSB7XHJcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gSWYgbm8gZXJyb3JzLCByZXR1cm4gdHJ1ZVxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBhcmVGaWxlc0VxdWFsKCkge1xyXG4gICAgcmV0dXJuIG9iajEubGFzdE1vZGlmaWVkID09PSBvYmoyLmxhc3RNb2RpZmllZFxyXG4gICAgICAmJiBvYmoxLnNpemUgPT09IG9iajIuc2l6ZVxyXG4gICAgICAmJiBvYmoxLnR5cGUgPT09IG9iajIudHlwZTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIGFyZUZ1bmN0aW9uc0VxdWFsKCkge1xyXG4gICAgcmV0dXJuIG9iajEudG9TdHJpbmcoKSA9PT0gb2JqMi50b1N0cmluZygpO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gYXJlUHJpbWF0aXZlc0VxdWFsKCkge1xyXG4gICAgcmV0dXJuIG9iajEgPT09IG9iajI7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBhcmVEYXRlc0VxdWFsKCkge1xyXG4gICAgcmV0dXJuIGlzRXF1YWxEYXRlVGltZXMob2JqMSwgb2JqMik7XHJcbiAgfVxyXG5cclxuICAvLyBHZXQgdGhlIG9iamVjdCB0eXBlXHJcbiAgbGV0IHR5cGUgPSBnZXRUeXBlKG9iajEpO1xyXG5cclxuICAvLyBJZiB0aGUgdHdvIGl0ZW1zIGFyZSBub3QgdGhlIHNhbWUgdHlwZSwgcmV0dXJuIGZhbHNlXHJcbiAgaWYgKHR5cGUgIT09IGdldFR5cGUob2JqMikpIHJldHVybiBmYWxzZTtcclxuXHJcbiAgLy8gQ29tcGFyZSBiYXNlZCBvbiB0eXBlXHJcbiAgaWYgKHR5cGUgPT09ICdhcnJheScpIHJldHVybiBhcmVBcnJheXNFcXVhbCgpO1xyXG5cclxuICBpZiAodHlwZSA9PT0gJ2RhdGUnKSByZXR1cm4gYXJlRGF0ZXNFcXVhbCgpO1xyXG5cclxuICBpZiAodHlwZSA9PT0gJ2ZpbGUnKSByZXR1cm4gYXJlRmlsZXNFcXVhbCgpO1xyXG5cclxuICBpZiAodHlwZSA9PT0gJ29iamVjdCcpIHJldHVybiBhcmVPYmplY3RzRXF1YWwoKTtcclxuXHJcbiAgaWYgKHR5cGUgPT09ICdmdW5jdGlvbicpIHJldHVybiBhcmVGdW5jdGlvbnNFcXVhbCgpO1xyXG5cclxuICByZXR1cm4gYXJlUHJpbWF0aXZlc0VxdWFsKCk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBHZW5lcmF0ZSB1bmlxdWUgaWRlbnRpZmljYXRvclxyXG4gKiBAcmV0dXJucyBSYW5kb20gR1VJRFxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlR3VpZCgpOiBzdHJpbmcge1xyXG4gIGxldCBTNCA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHJldHVybiAoKCgxICsgTWF0aC5yYW5kb20oKSkgKiAweDEwMDAwKSB8IDApLnRvU3RyaW5nKDE2KS5zdWJzdHJpbmcoMSk7XHJcbiAgfTtcclxuICByZXR1cm4gKFM0KCkgKyBTNCgpICsgXCItXCIgKyBTNCgpICsgXCItXCIgKyBTNCgpICsgXCItXCIgKyBTNCgpICsgXCItXCIgKyBTNCgpICsgUzQoKSArIFM0KCkpO1xyXG59XHJcblxyXG4vKipcclxuICogQ2hlY2sgaWYgdmFsdWUgaXMgSnNvbiBwYXJzYWJsZSBzdHJpbmdcclxuICogQHBhcmFtIHZhbHVlIHN0cmluZyB2YWx1ZVxyXG4gKiBAcmV0dXJucyBUcnVlIGlmIHN0cmluZyBjYW4gYmUgSlNPTiBwYXJzZWRcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBpc0pzb25TdHJpbmcodmFsdWU6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gIHRyeSB7XHJcbiAgICBjb25zdCBqc29uID0gSlNPTi5wYXJzZSh2YWx1ZSk7XHJcbiAgICByZXR1cm4gKHR5cGVvZiBqc29uID09PSAnb2JqZWN0Jyk7XHJcbiAgfSBjYXRjaCAoZSkge1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIFN0b3AgcHJvcGFnYXRpb24gYW5kIHByZXZlbnQgZGVmYXVsdFxyXG4gKiBAcGFyYW0gZXZlbnQgRXZlbnQgb2JqZWN0XHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gc3RvcEFuZFByZXZlbnRQcm9wYWdhdGlvbihldmVudDogRXZlbnQpOiB2b2lkIHtcclxuICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG59XHJcblxyXG4vKipcclxuICogVXBkYXRlIHByb3BlcnR5IGluIG9iamVjdCBieSBrZXlcclxuICogQHBhcmFtIG9iaiBPYmplY3QgdG8gY2hhbmdlXHJcbiAqIEBwYXJhbSBrZXkgUHJvcGVydHkgdG8gY2hhbmdlXHJcbiAqIEBwYXJhbSBuZXdQcm9wZXJ0eVZhbHVlIE5ldyBwcm9wZXJ0eSB2YWx1ZVxyXG4gKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25zIGZvciBhcnJheSB0eXBlc1xyXG4gKiBAcmV0dXJucyBVcGRhdGVkIG9iamVjdFxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZVByb3BlcnR5QnlLZXk8VD4oXHJcbiAgb2JqOiBhbnksXHJcbiAga2V5OiBzdHJpbmcsXHJcbiAgbmV3UHJvcGVydHlWYWx1ZTogVCxcclxuICBvcHRpb25zOiB7IGFycmF5TW9kZT86IFwidG9nZ2xlXCIgfCBcInJlcGxhY2VcIjsgYXJyYXlUb2dnbGVWYWx1ZT86IFQ7IH0gPSB7fVxyXG4pOiBhbnkge1xyXG4gIGNvbnN0IHtcclxuICAgIGFycmF5TW9kZSA9IFwidG9nZ2xlXCIsXHJcbiAgICBhcnJheVRvZ2dsZVZhbHVlID0gKG5ld1Byb3BlcnR5VmFsdWUgYXMgVClcclxuICB9ID0gb3B0aW9ucztcclxuXHJcbiAgLy8gQXJyYXlzOiBtYXAgcmVjdXJzaXZlbHkgb3ZlciBpdGVtc1xyXG4gIGlmIChBcnJheS5pc0FycmF5KG9iaikpIHtcclxuICAgIGxldCBjaGFuZ2VkID0gZmFsc2U7XHJcbiAgICBjb25zdCBtYXBwZWQgPSBvYmoubWFwKGl0ZW0gPT4ge1xyXG4gICAgICBjb25zdCB1cGRhdGVkID0gdXBkYXRlUHJvcGVydHlCeUtleShpdGVtLCBrZXksIG5ld1Byb3BlcnR5VmFsdWUsIG9wdGlvbnMpO1xyXG4gICAgICBpZiAodXBkYXRlZCAhPT0gaXRlbSkgY2hhbmdlZCA9IHRydWU7XHJcbiAgICAgIHJldHVybiB1cGRhdGVkO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gY2hhbmdlZCA/IG1hcHBlZCA6IG9iajtcclxuICB9XHJcblxyXG4gIC8vIFBsYWluIG9iamVjdHM6IGl0ZXJhdGUgb3ZlciBrZXlzIGltbXV0YWJseVxyXG4gIGlmIChpc09iamVjdChvYmopKSB7XHJcbiAgICBjb25zdCBzb3VyY2UgPSBvYmogYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XHJcbiAgICBsZXQgY2hhbmdlZCA9IGZhbHNlO1xyXG4gICAgY29uc3QgcmVzdWx0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xyXG5cclxuICAgIGZvciAoY29uc3QgcHJvcGVydHlLZXkgb2YgT2JqZWN0LmtleXMoc291cmNlKSkge1xyXG4gICAgICBjb25zdCB2YWx1ZSA9IHNvdXJjZVtwcm9wZXJ0eUtleV07XHJcblxyXG4gICAgICBpZiAocHJvcGVydHlLZXkgPT09IGtleSkge1xyXG4gICAgICAgIC8vIE1hdGNoZWQga2V5OiBhcHBseSB1cGRhdGVcclxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcclxuICAgICAgICAgIGlmIChhcnJheU1vZGUgPT09IFwidG9nZ2xlXCIpIHtcclxuICAgICAgICAgICAgY29uc3QgdXBkYXRlZEFycmF5ID0gdG9nZ2xlSXRlbSh2YWx1ZSBhcyBUW10sIGFycmF5VG9nZ2xlVmFsdWUpO1xyXG4gICAgICAgICAgICByZXN1bHRbcHJvcGVydHlLZXldID0gdXBkYXRlZEFycmF5O1xyXG4gICAgICAgICAgICBpZiAodXBkYXRlZEFycmF5ICE9PSB2YWx1ZSkgY2hhbmdlZCA9IHRydWU7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAvLyByZXBsYWNlIG1vZGVcclxuICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KG5ld1Byb3BlcnR5VmFsdWUpKSB7XHJcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiYXJyYXlNb2RlICdyZXBsYWNlJyByZXF1aXJlcyBuZXdQcm9wZXJ0eVZhbHVlIHRvIGJlIGFuIGFycmF5LlwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCByZXBsYWNlZCA9IFsuLi4obmV3UHJvcGVydHlWYWx1ZSBhcyB1bmtub3duIGFzIHVua25vd25bXSldO1xyXG4gICAgICAgICAgICByZXN1bHRbcHJvcGVydHlLZXldID0gcmVwbGFjZWQ7XHJcbiAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAvLyBOb24tYXJyYXkgbGVhZiAtPiBzZXQgdG8gbmV3UHJvcGVydHlWYWx1ZVxyXG4gICAgICAgICAgcmVzdWx0W3Byb3BlcnR5S2V5XSA9IG5ld1Byb3BlcnR5VmFsdWUgYXMgdW5rbm93bjtcclxuICAgICAgICAgIGlmIChyZXN1bHRbcHJvcGVydHlLZXldICE9PSB2YWx1ZSkgY2hhbmdlZCA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIC8vIFJlY3Vyc2UgaW50byBuZXN0ZWQgdmFsdWVzXHJcbiAgICAgICAgY29uc3QgdXBkYXRlZFZhbCA9IHVwZGF0ZVByb3BlcnR5QnlLZXkodmFsdWUsIGtleSwgbmV3UHJvcGVydHlWYWx1ZSwgb3B0aW9ucyk7XHJcbiAgICAgICAgcmVzdWx0W3Byb3BlcnR5S2V5XSA9IHVwZGF0ZWRWYWw7XHJcbiAgICAgICAgaWYgKHVwZGF0ZWRWYWwgIT09IHZhbHVlKSBjaGFuZ2VkID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBjaGFuZ2VkID8gcmVzdWx0IDogb2JqO1xyXG4gIH1cclxuXHJcbiAgLy8gUHJpbWl0aXZlcyBvciBub24tcGxhaW4gb2JqZWN0cyAoRGF0ZSwgTWFwLCBldGMuKTogcmV0dXJuIGFzLWlzXHJcbiAgcmV0dXJuIG9iajtcclxufVxyXG5cclxuLyoqXHJcbiAqIFVwZGF0ZSBwcm9wZXJ0eSBpbiBvYmplY3QgYnkgcGF0aFxyXG4gKiBAcGFyYW0gb2JqIE9iamVjdCB0byBjaGFuZ2VcclxuICogQHBhcmFtIHBhdGggUHJvcGVydHkgdG8gY2hhbmdlXHJcbiAqIEBwYXJhbSBuZXdQcm9wZXJ0eVZhbHVlIE5ldyBwcm9wZXJ0eSB2YWx1ZVxyXG4gKiBAcGFyYW0gcHJldmlvdXNQcm9wZXJ0eVZhbHVlIE5ldyBwcm9wZXJ0eSB2YWx1ZVxyXG4gKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25zIGZvciBhcnJheSB0eXBlc1xyXG4gKiBAcmV0dXJucyBVcGRhdGVkIG9iamVjdFxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZVByb3BlcnR5QnlQYXRoPFQ+KFxyXG4gIG9iajogYW55LFxyXG4gIHBhdGg6IHN0cmluZyB8IHNlZ21lbnRbXSxcclxuICBuZXdQcm9wZXJ0eVZhbHVlOiBULFxyXG4gIHByZXZpb3VzUHJvcGVydHlWYWx1ZTogVCxcclxuICBvcHRpb25zOiB7IGFycmF5TW9kZT86IFwidG9nZ2xlXCIgfCBcInJlcGxhY2VcIjsgfSA9IHt9XHJcbik6IGFueSB7XHJcbiAgY29uc3QgeyAgICBhcnJheU1vZGUgPSBcInRvZ2dsZVwiICB9ID0gb3B0aW9ucztcclxuXHJcbiAgY29uc3Qgc2VnbWVudHMgPSBBcnJheS5pc0FycmF5KHBhdGgpID8gcGF0aCA6IF9wYXRoVG9TZWdtZW50cyhwYXRoKTtcclxuXHJcbiAgLyoqXHJcbiAgKiBQYXJzZXMgYSBwYXRoIHN0cmluZyBsaWtlOlxyXG4gICogIC0gXCJhLmIuY1wiXHJcbiAgKiAgLSBcImEuYlswXS5jXCJcclxuICAqICAtIFwiaXRlbXNbKl0udGFnc1wiXHJcbiAgKiBpbnRvIHNlZ21lbnRzOiBbXCJhXCIsXCJiXCIsMCxcImNcIl0gb3IgW1wiaXRlbXNcIixcIipcIiwgXCJ0YWdzXCJdXHJcbiAgKlxyXG4gICogU3VwcG9ydGVkOlxyXG4gICogIC0gRG90IG5vdGF0aW9uXHJcbiAgKiAgLSBCcmFja2V0IG51bWJlcnM6IFswXVxyXG4gICogIC0gV2lsZGNhcmQ6IFsqXSBvciAuKiAoYXMgYSBzZWdtZW50IFwiKlwiKVxyXG4gICpcclxuICAqIE5vdCBzdXBwb3J0ZWQ6XHJcbiAgKiAgLSBRdW90ZWQgcHJvcGVydHkgbmFtZXMgaW4gYnJhY2tldHMgKGUuZy4sIFtcImZvbyBiYXJcIl0pXHJcbiAgKiAgLSBFc2NhcGVkIGRvdHMgaW4ga2V5c1xyXG4gICogQHBhcmFtIHBhdGggUHJvcGVydHkgcGF0aFxyXG4gICogQHJldHVybnMgUGF0aCBzZWdtZW50c1xyXG4gICovXHJcbiBmdW5jdGlvbiBfcGF0aFRvU2VnbWVudHMocGF0aDogc3RyaW5nKTogc2VnbWVudFtdIHtcclxuICAgLy8gTm9ybWFsaXplIGJyYWNrZXRzIHRvIGRvdCBmb3JtIChlLmcuLCBhWzBdLmIgLT4gYS4wLmIsIGFbKl0uYiAtPiBhLiouYilcclxuICAgY29uc3Qgbm9ybWFsaXplZCA9IHBhdGhcclxuICAgICAucmVwbGFjZSgvXFxbKFxcZCspXFxdL2csIFwiLiQxXCIpXHJcbiAgICAgLnJlcGxhY2UoL1xcW1xcKlxcXS9nLCBcIi4qXCIpO1xyXG4gXHJcbiAgIGNvbnN0IHJhd1NlZ21lbnRzID0gbm9ybWFsaXplZC5zcGxpdChcIi5cIikuZmlsdGVyKHMgPT4gcy5sZW5ndGggPiAwKTtcclxuICAgcmV0dXJuIHJhd1NlZ21lbnRzLm1hcDxzZWdtZW50PihzZWcgPT4ge1xyXG4gICAgIGlmIChzZWcgPT09IFwiKlwiKSByZXR1cm4gXCIqXCI7XHJcbiAgICAgY29uc3QgbiA9IE51bWJlcihzZWcpO1xyXG4gICAgIGlmICghTnVtYmVyLmlzTmFOKG4pICYmIHNlZy50cmltKCkgIT09IFwiXCIgJiYgU3RyaW5nKG4pID09PSBzZWcpIHtcclxuICAgICAgIHJldHVybiBuO1xyXG4gICAgIH1cclxuICAgICByZXR1cm4gc2VnO1xyXG4gICB9KTtcclxuIH1cclxuXHJcbiAgZnVuY3Rpb24gX2FwcGx5KGN1cnJlbnQ6IHVua25vd24sIHJlbWFpbmluZzogc2VnbWVudFtdKTogdW5rbm93biB7XHJcbiAgICAvLyBCYXNlOiByZWFjaGVkIHRhcmdldCBwYXRoXHJcbiAgICBpZiAocmVtYWluaW5nLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShjdXJyZW50KSkge1xyXG4gICAgICAgIGlmIChhcnJheU1vZGUgPT09IFwidG9nZ2xlXCIpIHtcclxuICAgICAgICAgIHJldHVybiB0b2dnbGVJdGVtKGN1cnJlbnQgYXMgVFtdLCBwcmV2aW91c1Byb3BlcnR5VmFsdWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyByZXBsYWNlIG1vZGVcclxuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkobmV3UHJvcGVydHlWYWx1ZSkpIHtcclxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImFycmF5TW9kZSAncmVwbGFjZScgcmVxdWlyZXMgbmV3UHJvcGVydHlWYWx1ZSB0byBiZSBhbiBhcnJheS5cIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBbLi4uKG5ld1Byb3BlcnR5VmFsdWUgYXMgdW5rbm93biBhcyB1bmtub3duW10pXTtcclxuICAgICAgfVxyXG4gICAgICAvLyBOb24tYXJyYXkgbGVhZiAtPiBzZXQgdG8gbmV3UHJvcGVydHlWYWx1ZVxyXG4gICAgICByZXR1cm4gbmV3UHJvcGVydHlWYWx1ZSBhcyB1bmtub3duO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IFtzZWcsIC4uLnJlc3RdID0gcmVtYWluaW5nO1xyXG5cclxuICAgIC8vIFdpbGRjYXJkIGhhbmRsaW5nXHJcbiAgICBpZiAoc2VnID09PSBcIipcIikge1xyXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShjdXJyZW50KSkge1xyXG4gICAgICAgIC8vIE1hcCBlYWNoIGVsZW1lbnRcclxuICAgICAgICByZXR1cm4gKGN1cnJlbnQgYXMgdW5rbm93bltdKS5tYXAoaXRlbSA9PiBfYXBwbHkoaXRlbSwgcmVzdCkpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChpc09iamVjdChjdXJyZW50KSkge1xyXG4gICAgICAgIGNvbnN0IG9iakN1cnIgPSBjdXJyZW50IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xyXG4gICAgICAgIGNvbnN0IHJlc3VsdDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcclxuICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhvYmpDdXJyKSkge1xyXG4gICAgICAgICAgcmVzdWx0W2tleV0gPSBfYXBwbHkob2JqQ3VycltrZXldLCByZXN0KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgfVxyXG4gICAgICAvLyBJZiBub3Qgb2JqZWN0L2FycmF5LCBub3RoaW5nIHRvIGV4cGFuZCAtPiByZXR1cm4gYXMtaXNcclxuICAgICAgcmV0dXJuIGN1cnJlbnQ7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gTnVtZXJpYyBpbmRleCAtPiBuYXZpZ2F0ZSBhcnJheXNcclxuICAgIGlmICh0eXBlb2Ygc2VnID09PSBcIm51bWJlclwiKSB7XHJcbiAgICAgIGlmICghQXJyYXkuaXNBcnJheShjdXJyZW50KSkge1xyXG4gICAgICAgIC8vIFBhdGggZXhwZWN0cyBhcnJheSBoZXJlLCBidXQgY3VycmVudCBpc24ndCBhbiBhcnJheSA9PiBuby1vcFxyXG4gICAgICAgIHJldHVybiBjdXJyZW50O1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IGFyciA9IGN1cnJlbnQgYXMgdW5rbm93bltdO1xyXG4gICAgICBpZiAoc2VnIDwgMCB8fCBzZWcgPj0gYXJyLmxlbmd0aCkge1xyXG4gICAgICAgIC8vIE91dCBvZiBib3VuZHMgLT4gbm8tb3AgKGFsdGVybmF0aXZlbHksIHlvdSBjb3VsZCBleHRlbmQgdGhlIGFycmF5KVxyXG4gICAgICAgIHJldHVybiBjdXJyZW50O1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IHVwZGF0ZWRJdGVtID0gX2FwcGx5KGFycltzZWddLCByZXN0KTtcclxuICAgICAgaWYgKHVwZGF0ZWRJdGVtID09PSBhcnJbc2VnXSkge1xyXG4gICAgICAgIHJldHVybiBjdXJyZW50OyAvLyBubyBzdHJ1Y3R1cmFsIGNoYW5nZVxyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IG5ld0FyciA9IGFyci5zbGljZSgpO1xyXG4gICAgICBuZXdBcnJbc2VnXSA9IHVwZGF0ZWRJdGVtO1xyXG4gICAgICByZXR1cm4gbmV3QXJyO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFN0cmluZyBrZXkgLT4gbmF2aWdhdGUgb2JqZWN0c1xyXG4gICAgaWYgKGlzT2JqZWN0KGN1cnJlbnQpKSB7XHJcbiAgICAgIGNvbnN0IG9iakN1cnIgPSBjdXJyZW50IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xyXG4gICAgICBjb25zdCBuZXh0VmFsID0gb2JqQ3VycltzZWddO1xyXG4gICAgICBjb25zdCB1cGRhdGVkVmFsID0gX2FwcGx5KG5leHRWYWwsIHJlc3QpO1xyXG5cclxuICAgICAgaWYgKHVwZGF0ZWRWYWwgPT09IG5leHRWYWwpIHtcclxuICAgICAgICByZXR1cm4gY3VycmVudDsgLy8gbm8gc3RydWN0dXJhbCBjaGFuZ2VcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4geyAuLi5vYmpDdXJyLCBbc2VnXTogdXBkYXRlZFZhbCB9O1xyXG4gICAgfVxyXG5cclxuICAgIC8vIElmIHdlIGNhbm5vdCB0cmF2ZXJzZSBmdXJ0aGVyIChlLmcuLCBudWxsLCBwcmltaXRpdmUsIG9yIGFycmF5IHdoZW4gZXhwZWN0aW5nIG9iamVjdCkgLT4gbm8tb3BcclxuICAgIHJldHVybiBjdXJyZW50O1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIF9hcHBseShvYmosIHNlZ21lbnRzKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIEdldCBjaGFuZ2VkIHByb3BlcnR5IGtleVxyXG4gKiBAcGFyYW0gcHJldmlvdXMgUHJldmlvdXMgdmFsdWVcclxuICogQHBhcmFtIGN1cnJlbnQgQ3VycmVuY3kgdmFsdWVcclxuICogQHJldHVybnMgS2V5IG9mIHByb3BlcnR5IHRoYXQgd2FzIGNoYW5nZWRcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBmaW5kQ2hhbmdlZFByb3BlcnR5S2V5KHByZXZpb3VzOiBhbnksIGN1cnJlbnQ6IGFueSk6IHN0cmluZyB8IGVtcHR5IHtcclxuICBjb25zdCBwYXRoOiBzdHJpbmcgfCBlbXB0eSA9IGZpbmRDaGFuZ2VkUHJvcGVydHlQYXRoKHByZXZpb3VzLCBjdXJyZW50KSxcclxuICAgIHBhcnRzID0gcGF0aD8uc3BsaXQoJy4nKTtcclxuXHJcbiAgcmV0dXJuIHBhcnRzICYmIHBhcnRzLmxlbmd0aCA/IHBhcnRzW3BhcnRzLmxlbmd0aCAtIDFdIDogdW5kZWZpbmVkO1xyXG59XHJcblxyXG4vKipcclxuICogR2V0IGNoYW5nZWQgcHJvcGVydHkgcGF0aFxyXG4gKiBAcGFyYW0gcHJldmlvdXMgUHJldmlvdXMgdmFsdWUgXHJcbiAqIEBwYXJhbSBjdXJyZW50IEN1cnJlbmN5IHZhbHVlXHJcbiAqIEBwYXJhbSBwYXJlbnRLZXkgUGFyZW50IG9iamVjdCBrZXkgbmFtZVxyXG4gKiBAcmV0dXJucyBQYXRoIG9mIHByb3BlcnR5IHRoYXQgd2FzIGNoYW5nZWRcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBmaW5kQ2hhbmdlZFByb3BlcnR5UGF0aChwcmV2aW91czogYW55LCBjdXJyZW50OiBhbnksIHBhcmVudEtleTogc3RyaW5nID0gJycpOiBzdHJpbmcgfCBlbXB0eSB7XHJcbiAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMoY3VycmVudCkpIHtcclxuICAgIGNvbnN0IGZ1bGxLZXk6IHN0cmluZyA9IHBhcmVudEtleSA/IGAke3BhcmVudEtleX0uJHtrZXl9YCA6IGtleTtcclxuXHJcbiAgICBpZiAoaXNPYmplY3QoY3VycmVudFtrZXldKSAmJiBjdXJyZW50W2tleV0gIT09IG51bGwgJiYgcHJldmlvdXNba2V5XSkge1xyXG4gICAgICBjb25zdCBuZXN0ZWRDaGFuZ2UgPSBmaW5kQ2hhbmdlZFByb3BlcnR5UGF0aChwcmV2aW91c1trZXldLCBjdXJyZW50W2tleV0sIGZ1bGxLZXkpO1xyXG5cclxuICAgICAgaWYgKG5lc3RlZENoYW5nZSkge1xyXG4gICAgICAgIHJldHVybiBuZXN0ZWRDaGFuZ2U7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmIChwcmV2aW91c1trZXldICE9PSBjdXJyZW50W2tleV0pIHtcclxuICAgICAgICByZXR1cm4gZnVsbEtleTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmV0dXJuIG51bGw7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBDbG9uZSBvYmplY3Qgd2l0aG91dCBhbnkgcmVmZXJlbmNlXHJcbiAqIEBwYXJhbSB2YWx1ZSAgT2JqZWN0IHRvIGNsb25lXHJcbiAqIEByZXR1cm5zIENsb25lZCBvYmplY3RcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBkZWVwQ2xvbmUodmFsdWU6IGFueSk6IGFueSB7XHJcbiAgcmV0dXJuIEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodmFsdWUpKTtcclxufSJdfQ==
@@ -1,8 +1,8 @@
1
- export { isDefined, isObject, isAsyncData, addPropertyToObject, removePropertyFromObject, mergeDeep, nameof, isNumeric, isString, isChromeBrowser, isEmail, parseBoolean, isEqual, generateGuid, isJsonString, stopAndPreventPropagation, updatePropertyByKey, findChangedPropertyPath, findChangedPropertyKey, deepClone } from './common.utils';
1
+ export { isDefined, isObject, isAsyncData, addPropertyToObject, removePropertyFromObject, mergeDeep, nameof, isNumeric, isString, isChromeBrowser, isEmail, parseBoolean, isEqual, generateGuid, isJsonString, stopAndPreventPropagation, updatePropertyByKey, updatePropertyByPath, findChangedPropertyKey, findChangedPropertyPath, deepClone } from './common.utils';
2
2
  export { isNullOrEmptyString, contains, trim } from './string.utils';
3
3
  export { setMinutes, setHours, setDay, setYear, setSeconds, setMilliseconds, setDefaultSecondsAndMiliseconds, getNextDate, getPreviousDate, getNextMonth, getPreviousMonth, getNextYear, getPreviousYear, getFirstDayOfMonth, getLastDayOfMonth, getFirstDayOfYear, getLastDayOfYear, getFirstDayOfMonthByYearAndMonth, getLastDayOfMonthByYearAndMonth, getWeeksNumberInMonth, isEqualDates, isEqualDateTimes, isDateGreat, isDateGreatOrEqual, isDateTimeGreat, isDateTimeGreatOrEqual, isDateTimeLessOrEqual, isTimeGreatOrEqual, isTimeLessOrEqual, convertUTCDateToLocalDate, convertTimestampToDate, convertDateToTimestamp, getAge } from './date-time.utils';
4
4
  export { parseFileSize, getFileExtension, readAsDataURL, isImage, convertToBase64String, convertFromBase64String } from './file.utils';
5
5
  export { getCssLikeValue, getValueFromCssLikeValue, getCalcValue, getRotateValue, addClasses, removeClasses, rgbToHex, hexToRgb, replaceRgbOpacity } from './ui.utils';
6
- export { any, hasItem, hasItemBy, hasObjectItem, hasAnyItem, firstOrDefault, firstItem, lastItem, all, where, skip, sort, sortBy, sortByPath, distinct, sum, max, remove, addItem, removeItem, removeItemBy, updateItemBy, getCollectionOrEmpty, count, isArraysEquals } from './collections.utils';
6
+ export { any, hasItem, hasItemBy, hasObjectItem, hasAnyItem, firstOrDefault, firstItem, lastItem, all, where, skip, sort, sortBy, sortByPath, distinct, sum, max, remove, addItem, removeItem, removeItemBy, updateItemBy, toggleItem, getCollectionOrEmpty, count, isArraysEquals } from './collections.utils';
7
7
  export { buildHttpParams } from './http.utils';
8
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc2ZjLWNvbW1vbi9zcmMvbGliL3V0aWxzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCxTQUFTLEVBQ1QsUUFBUSxFQUNSLFdBQVcsRUFDWCxtQkFBbUIsRUFDbkIsd0JBQXdCLEVBQ3hCLFNBQVMsRUFDVCxNQUFNLEVBQ04sU0FBUyxFQUNULFFBQVEsRUFDUixlQUFlLEVBQ2YsT0FBTyxFQUNQLFlBQVksRUFDWixPQUFPLEVBQ1AsWUFBWSxFQUNaLFlBQVksRUFDWix5QkFBeUIsRUFDekIsbUJBQW1CLEVBQ25CLHVCQUF1QixFQUN2QixzQkFBc0IsRUFDdEIsU0FBUyxFQUNaLE1BQU0sZ0JBQWdCLENBQUE7QUFFdkIsT0FBTyxFQUNILG1CQUFtQixFQUNuQixRQUFRLEVBQ1IsSUFBSSxFQUNQLE1BQU0sZ0JBQWdCLENBQUE7QUFFdkIsT0FBTyxFQUNILFVBQVUsRUFDVixRQUFRLEVBQ1IsTUFBTSxFQUNOLE9BQU8sRUFDUCxVQUFVLEVBQ1YsZUFBZSxFQUNmLCtCQUErQixFQUMvQixXQUFXLEVBQ1gsZUFBZSxFQUNmLFlBQVksRUFDWixnQkFBZ0IsRUFDaEIsV0FBVyxFQUNYLGVBQWUsRUFDZixrQkFBa0IsRUFDbEIsaUJBQWlCLEVBQ2pCLGlCQUFpQixFQUNqQixnQkFBZ0IsRUFDaEIsZ0NBQWdDLEVBQ2hDLCtCQUErQixFQUMvQixxQkFBcUIsRUFDckIsWUFBWSxFQUNaLGdCQUFnQixFQUNoQixXQUFXLEVBQ1gsa0JBQWtCLEVBQ2xCLGVBQWUsRUFDZixzQkFBc0IsRUFDdEIscUJBQXFCLEVBQ3JCLGtCQUFrQixFQUNsQixpQkFBaUIsRUFDakIseUJBQXlCLEVBQ3pCLHNCQUFzQixFQUN0QixzQkFBc0IsRUFDdEIsTUFBTSxFQUNULE1BQU0sbUJBQW1CLENBQUE7QUFFMUIsT0FBTyxFQUNILGFBQWEsRUFDYixnQkFBZ0IsRUFDaEIsYUFBYSxFQUNiLE9BQU8sRUFDUCxxQkFBcUIsRUFDckIsdUJBQXVCLEVBQzFCLE1BQU0sY0FBYyxDQUFBO0FBRXJCLE9BQU8sRUFDSCxlQUFlLEVBQ2Ysd0JBQXdCLEVBQ3hCLFlBQVksRUFDWixjQUFjLEVBQ2QsVUFBVSxFQUNWLGFBQWEsRUFDYixRQUFRLEVBQ1IsUUFBUSxFQUNSLGlCQUFpQixFQUNwQixNQUFNLFlBQVksQ0FBQTtBQUVuQixPQUFPLEVBQ0gsR0FBRyxFQUNILE9BQU8sRUFDUCxTQUFTLEVBQ1QsYUFBYSxFQUNiLFVBQVUsRUFDVixjQUFjLEVBQ2QsU0FBUyxFQUNULFFBQVEsRUFDUixHQUFHLEVBQ0gsS0FBSyxFQUNMLElBQUksRUFDSixJQUFJLEVBQ0osTUFBTSxFQUNOLFVBQVUsRUFDVixRQUFRLEVBQ1IsR0FBRyxFQUNILEdBQUcsRUFDSCxNQUFNLEVBQ04sT0FBTyxFQUNQLFVBQVUsRUFDVixZQUFZLEVBQ1osWUFBWSxFQUNaLG9CQUFvQixFQUNwQixLQUFLLEVBQ0wsY0FBYyxFQUNqQixNQUFNLHFCQUFxQixDQUFDO0FBRTdCLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxjQUFjLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQge1xyXG4gICAgaXNEZWZpbmVkLFxyXG4gICAgaXNPYmplY3QsXHJcbiAgICBpc0FzeW5jRGF0YSxcclxuICAgIGFkZFByb3BlcnR5VG9PYmplY3QsXHJcbiAgICByZW1vdmVQcm9wZXJ0eUZyb21PYmplY3QsXHJcbiAgICBtZXJnZURlZXAsXHJcbiAgICBuYW1lb2YsXHJcbiAgICBpc051bWVyaWMsXHJcbiAgICBpc1N0cmluZyxcclxuICAgIGlzQ2hyb21lQnJvd3NlcixcclxuICAgIGlzRW1haWwsXHJcbiAgICBwYXJzZUJvb2xlYW4sXHJcbiAgICBpc0VxdWFsLFxyXG4gICAgZ2VuZXJhdGVHdWlkLFxyXG4gICAgaXNKc29uU3RyaW5nLFxyXG4gICAgc3RvcEFuZFByZXZlbnRQcm9wYWdhdGlvbixcclxuICAgIHVwZGF0ZVByb3BlcnR5QnlLZXksXHJcbiAgICBmaW5kQ2hhbmdlZFByb3BlcnR5UGF0aCxcclxuICAgIGZpbmRDaGFuZ2VkUHJvcGVydHlLZXksXHJcbiAgICBkZWVwQ2xvbmVcclxufSBmcm9tICcuL2NvbW1vbi51dGlscydcclxuXHJcbmV4cG9ydCB7XHJcbiAgICBpc051bGxPckVtcHR5U3RyaW5nLFxyXG4gICAgY29udGFpbnMsXHJcbiAgICB0cmltXHJcbn0gZnJvbSAnLi9zdHJpbmcudXRpbHMnXHJcblxyXG5leHBvcnQge1xyXG4gICAgc2V0TWludXRlcyxcclxuICAgIHNldEhvdXJzLFxyXG4gICAgc2V0RGF5LFxyXG4gICAgc2V0WWVhcixcclxuICAgIHNldFNlY29uZHMsXHJcbiAgICBzZXRNaWxsaXNlY29uZHMsXHJcbiAgICBzZXREZWZhdWx0U2Vjb25kc0FuZE1pbGlzZWNvbmRzLFxyXG4gICAgZ2V0TmV4dERhdGUsXHJcbiAgICBnZXRQcmV2aW91c0RhdGUsXHJcbiAgICBnZXROZXh0TW9udGgsXHJcbiAgICBnZXRQcmV2aW91c01vbnRoLFxyXG4gICAgZ2V0TmV4dFllYXIsXHJcbiAgICBnZXRQcmV2aW91c1llYXIsXHJcbiAgICBnZXRGaXJzdERheU9mTW9udGgsXHJcbiAgICBnZXRMYXN0RGF5T2ZNb250aCxcclxuICAgIGdldEZpcnN0RGF5T2ZZZWFyLFxyXG4gICAgZ2V0TGFzdERheU9mWWVhcixcclxuICAgIGdldEZpcnN0RGF5T2ZNb250aEJ5WWVhckFuZE1vbnRoLFxyXG4gICAgZ2V0TGFzdERheU9mTW9udGhCeVllYXJBbmRNb250aCxcclxuICAgIGdldFdlZWtzTnVtYmVySW5Nb250aCxcclxuICAgIGlzRXF1YWxEYXRlcyxcclxuICAgIGlzRXF1YWxEYXRlVGltZXMsXHJcbiAgICBpc0RhdGVHcmVhdCxcclxuICAgIGlzRGF0ZUdyZWF0T3JFcXVhbCxcclxuICAgIGlzRGF0ZVRpbWVHcmVhdCxcclxuICAgIGlzRGF0ZVRpbWVHcmVhdE9yRXF1YWwsXHJcbiAgICBpc0RhdGVUaW1lTGVzc09yRXF1YWwsXHJcbiAgICBpc1RpbWVHcmVhdE9yRXF1YWwsXHJcbiAgICBpc1RpbWVMZXNzT3JFcXVhbCxcclxuICAgIGNvbnZlcnRVVENEYXRlVG9Mb2NhbERhdGUsXHJcbiAgICBjb252ZXJ0VGltZXN0YW1wVG9EYXRlLFxyXG4gICAgY29udmVydERhdGVUb1RpbWVzdGFtcCxcclxuICAgIGdldEFnZVxyXG59IGZyb20gJy4vZGF0ZS10aW1lLnV0aWxzJ1xyXG5cclxuZXhwb3J0IHtcclxuICAgIHBhcnNlRmlsZVNpemUsXHJcbiAgICBnZXRGaWxlRXh0ZW5zaW9uLFxyXG4gICAgcmVhZEFzRGF0YVVSTCxcclxuICAgIGlzSW1hZ2UsXHJcbiAgICBjb252ZXJ0VG9CYXNlNjRTdHJpbmcsXHJcbiAgICBjb252ZXJ0RnJvbUJhc2U2NFN0cmluZ1xyXG59IGZyb20gJy4vZmlsZS51dGlscydcclxuXHJcbmV4cG9ydCB7XHJcbiAgICBnZXRDc3NMaWtlVmFsdWUsXHJcbiAgICBnZXRWYWx1ZUZyb21Dc3NMaWtlVmFsdWUsXHJcbiAgICBnZXRDYWxjVmFsdWUsXHJcbiAgICBnZXRSb3RhdGVWYWx1ZSxcclxuICAgIGFkZENsYXNzZXMsXHJcbiAgICByZW1vdmVDbGFzc2VzLFxyXG4gICAgcmdiVG9IZXgsXHJcbiAgICBoZXhUb1JnYixcclxuICAgIHJlcGxhY2VSZ2JPcGFjaXR5XHJcbn0gZnJvbSAnLi91aS51dGlscydcclxuXHJcbmV4cG9ydCB7XHJcbiAgICBhbnksXHJcbiAgICBoYXNJdGVtLFxyXG4gICAgaGFzSXRlbUJ5LFxyXG4gICAgaGFzT2JqZWN0SXRlbSxcclxuICAgIGhhc0FueUl0ZW0sXHJcbiAgICBmaXJzdE9yRGVmYXVsdCxcclxuICAgIGZpcnN0SXRlbSxcclxuICAgIGxhc3RJdGVtLFxyXG4gICAgYWxsLFxyXG4gICAgd2hlcmUsXHJcbiAgICBza2lwLFxyXG4gICAgc29ydCxcclxuICAgIHNvcnRCeSxcclxuICAgIHNvcnRCeVBhdGgsXHJcbiAgICBkaXN0aW5jdCxcclxuICAgIHN1bSxcclxuICAgIG1heCxcclxuICAgIHJlbW92ZSxcclxuICAgIGFkZEl0ZW0sXHJcbiAgICByZW1vdmVJdGVtLFxyXG4gICAgcmVtb3ZlSXRlbUJ5LFxyXG4gICAgdXBkYXRlSXRlbUJ5LFxyXG4gICAgZ2V0Q29sbGVjdGlvbk9yRW1wdHksXHJcbiAgICBjb3VudCxcclxuICAgIGlzQXJyYXlzRXF1YWxzXHJcbn0gZnJvbSAnLi9jb2xsZWN0aW9ucy51dGlscyc7XHJcblxyXG5leHBvcnQgeyBidWlsZEh0dHBQYXJhbXMgfSBmcm9tICcuL2h0dHAudXRpbHMnOyJdfQ==
8
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc2ZjLWNvbW1vbi9zcmMvbGliL3V0aWxzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCxTQUFTLEVBQ1QsUUFBUSxFQUNSLFdBQVcsRUFDWCxtQkFBbUIsRUFDbkIsd0JBQXdCLEVBQ3hCLFNBQVMsRUFDVCxNQUFNLEVBQ04sU0FBUyxFQUNULFFBQVEsRUFDUixlQUFlLEVBQ2YsT0FBTyxFQUNQLFlBQVksRUFDWixPQUFPLEVBQ1AsWUFBWSxFQUNaLFlBQVksRUFDWix5QkFBeUIsRUFDekIsbUJBQW1CLEVBQ25CLG9CQUFvQixFQUNwQixzQkFBc0IsRUFDdEIsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDWixNQUFNLGdCQUFnQixDQUFBO0FBRXZCLE9BQU8sRUFDSCxtQkFBbUIsRUFDbkIsUUFBUSxFQUNSLElBQUksRUFDUCxNQUFNLGdCQUFnQixDQUFBO0FBRXZCLE9BQU8sRUFDSCxVQUFVLEVBQ1YsUUFBUSxFQUNSLE1BQU0sRUFDTixPQUFPLEVBQ1AsVUFBVSxFQUNWLGVBQWUsRUFDZiwrQkFBK0IsRUFDL0IsV0FBVyxFQUNYLGVBQWUsRUFDZixZQUFZLEVBQ1osZ0JBQWdCLEVBQ2hCLFdBQVcsRUFDWCxlQUFlLEVBQ2Ysa0JBQWtCLEVBQ2xCLGlCQUFpQixFQUNqQixpQkFBaUIsRUFDakIsZ0JBQWdCLEVBQ2hCLGdDQUFnQyxFQUNoQywrQkFBK0IsRUFDL0IscUJBQXFCLEVBQ3JCLFlBQVksRUFDWixnQkFBZ0IsRUFDaEIsV0FBVyxFQUNYLGtCQUFrQixFQUNsQixlQUFlLEVBQ2Ysc0JBQXNCLEVBQ3RCLHFCQUFxQixFQUNyQixrQkFBa0IsRUFDbEIsaUJBQWlCLEVBQ2pCLHlCQUF5QixFQUN6QixzQkFBc0IsRUFDdEIsc0JBQXNCLEVBQ3RCLE1BQU0sRUFDVCxNQUFNLG1CQUFtQixDQUFBO0FBRTFCLE9BQU8sRUFDSCxhQUFhLEVBQ2IsZ0JBQWdCLEVBQ2hCLGFBQWEsRUFDYixPQUFPLEVBQ1AscUJBQXFCLEVBQ3JCLHVCQUF1QixFQUMxQixNQUFNLGNBQWMsQ0FBQTtBQUVyQixPQUFPLEVBQ0gsZUFBZSxFQUNmLHdCQUF3QixFQUN4QixZQUFZLEVBQ1osY0FBYyxFQUNkLFVBQVUsRUFDVixhQUFhLEVBQ2IsUUFBUSxFQUNSLFFBQVEsRUFDUixpQkFBaUIsRUFDcEIsTUFBTSxZQUFZLENBQUE7QUFFbkIsT0FBTyxFQUNILEdBQUcsRUFDSCxPQUFPLEVBQ1AsU0FBUyxFQUNULGFBQWEsRUFDYixVQUFVLEVBQ1YsY0FBYyxFQUNkLFNBQVMsRUFDVCxRQUFRLEVBQ1IsR0FBRyxFQUNILEtBQUssRUFDTCxJQUFJLEVBQ0osSUFBSSxFQUNKLE1BQU0sRUFDTixVQUFVLEVBQ1YsUUFBUSxFQUNSLEdBQUcsRUFDSCxHQUFHLEVBQ0gsTUFBTSxFQUNOLE9BQU8sRUFDUCxVQUFVLEVBQ1YsWUFBWSxFQUNaLFlBQVksRUFDWixVQUFVLEVBQ1Ysb0JBQW9CLEVBQ3BCLEtBQUssRUFDTCxjQUFjLEVBQ2pCLE1BQU0scUJBQXFCLENBQUM7QUFFN0IsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGNBQWMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7XHJcbiAgICBpc0RlZmluZWQsXHJcbiAgICBpc09iamVjdCxcclxuICAgIGlzQXN5bmNEYXRhLFxyXG4gICAgYWRkUHJvcGVydHlUb09iamVjdCxcclxuICAgIHJlbW92ZVByb3BlcnR5RnJvbU9iamVjdCxcclxuICAgIG1lcmdlRGVlcCxcclxuICAgIG5hbWVvZixcclxuICAgIGlzTnVtZXJpYyxcclxuICAgIGlzU3RyaW5nLFxyXG4gICAgaXNDaHJvbWVCcm93c2VyLFxyXG4gICAgaXNFbWFpbCxcclxuICAgIHBhcnNlQm9vbGVhbixcclxuICAgIGlzRXF1YWwsXHJcbiAgICBnZW5lcmF0ZUd1aWQsXHJcbiAgICBpc0pzb25TdHJpbmcsXHJcbiAgICBzdG9wQW5kUHJldmVudFByb3BhZ2F0aW9uLFxyXG4gICAgdXBkYXRlUHJvcGVydHlCeUtleSxcclxuICAgIHVwZGF0ZVByb3BlcnR5QnlQYXRoLFxyXG4gICAgZmluZENoYW5nZWRQcm9wZXJ0eUtleSxcclxuICAgIGZpbmRDaGFuZ2VkUHJvcGVydHlQYXRoLCAgXHJcbiAgICBkZWVwQ2xvbmVcclxufSBmcm9tICcuL2NvbW1vbi51dGlscydcclxuXHJcbmV4cG9ydCB7XHJcbiAgICBpc051bGxPckVtcHR5U3RyaW5nLFxyXG4gICAgY29udGFpbnMsXHJcbiAgICB0cmltXHJcbn0gZnJvbSAnLi9zdHJpbmcudXRpbHMnXHJcblxyXG5leHBvcnQge1xyXG4gICAgc2V0TWludXRlcyxcclxuICAgIHNldEhvdXJzLFxyXG4gICAgc2V0RGF5LFxyXG4gICAgc2V0WWVhcixcclxuICAgIHNldFNlY29uZHMsXHJcbiAgICBzZXRNaWxsaXNlY29uZHMsXHJcbiAgICBzZXREZWZhdWx0U2Vjb25kc0FuZE1pbGlzZWNvbmRzLFxyXG4gICAgZ2V0TmV4dERhdGUsXHJcbiAgICBnZXRQcmV2aW91c0RhdGUsXHJcbiAgICBnZXROZXh0TW9udGgsXHJcbiAgICBnZXRQcmV2aW91c01vbnRoLFxyXG4gICAgZ2V0TmV4dFllYXIsXHJcbiAgICBnZXRQcmV2aW91c1llYXIsXHJcbiAgICBnZXRGaXJzdERheU9mTW9udGgsXHJcbiAgICBnZXRMYXN0RGF5T2ZNb250aCxcclxuICAgIGdldEZpcnN0RGF5T2ZZZWFyLFxyXG4gICAgZ2V0TGFzdERheU9mWWVhcixcclxuICAgIGdldEZpcnN0RGF5T2ZNb250aEJ5WWVhckFuZE1vbnRoLFxyXG4gICAgZ2V0TGFzdERheU9mTW9udGhCeVllYXJBbmRNb250aCxcclxuICAgIGdldFdlZWtzTnVtYmVySW5Nb250aCxcclxuICAgIGlzRXF1YWxEYXRlcyxcclxuICAgIGlzRXF1YWxEYXRlVGltZXMsXHJcbiAgICBpc0RhdGVHcmVhdCxcclxuICAgIGlzRGF0ZUdyZWF0T3JFcXVhbCxcclxuICAgIGlzRGF0ZVRpbWVHcmVhdCxcclxuICAgIGlzRGF0ZVRpbWVHcmVhdE9yRXF1YWwsXHJcbiAgICBpc0RhdGVUaW1lTGVzc09yRXF1YWwsXHJcbiAgICBpc1RpbWVHcmVhdE9yRXF1YWwsXHJcbiAgICBpc1RpbWVMZXNzT3JFcXVhbCxcclxuICAgIGNvbnZlcnRVVENEYXRlVG9Mb2NhbERhdGUsXHJcbiAgICBjb252ZXJ0VGltZXN0YW1wVG9EYXRlLFxyXG4gICAgY29udmVydERhdGVUb1RpbWVzdGFtcCxcclxuICAgIGdldEFnZVxyXG59IGZyb20gJy4vZGF0ZS10aW1lLnV0aWxzJ1xyXG5cclxuZXhwb3J0IHtcclxuICAgIHBhcnNlRmlsZVNpemUsXHJcbiAgICBnZXRGaWxlRXh0ZW5zaW9uLFxyXG4gICAgcmVhZEFzRGF0YVVSTCxcclxuICAgIGlzSW1hZ2UsXHJcbiAgICBjb252ZXJ0VG9CYXNlNjRTdHJpbmcsXHJcbiAgICBjb252ZXJ0RnJvbUJhc2U2NFN0cmluZ1xyXG59IGZyb20gJy4vZmlsZS51dGlscydcclxuXHJcbmV4cG9ydCB7XHJcbiAgICBnZXRDc3NMaWtlVmFsdWUsXHJcbiAgICBnZXRWYWx1ZUZyb21Dc3NMaWtlVmFsdWUsXHJcbiAgICBnZXRDYWxjVmFsdWUsXHJcbiAgICBnZXRSb3RhdGVWYWx1ZSxcclxuICAgIGFkZENsYXNzZXMsXHJcbiAgICByZW1vdmVDbGFzc2VzLFxyXG4gICAgcmdiVG9IZXgsXHJcbiAgICBoZXhUb1JnYixcclxuICAgIHJlcGxhY2VSZ2JPcGFjaXR5XHJcbn0gZnJvbSAnLi91aS51dGlscydcclxuXHJcbmV4cG9ydCB7XHJcbiAgICBhbnksXHJcbiAgICBoYXNJdGVtLFxyXG4gICAgaGFzSXRlbUJ5LFxyXG4gICAgaGFzT2JqZWN0SXRlbSxcclxuICAgIGhhc0FueUl0ZW0sXHJcbiAgICBmaXJzdE9yRGVmYXVsdCxcclxuICAgIGZpcnN0SXRlbSxcclxuICAgIGxhc3RJdGVtLFxyXG4gICAgYWxsLFxyXG4gICAgd2hlcmUsXHJcbiAgICBza2lwLFxyXG4gICAgc29ydCxcclxuICAgIHNvcnRCeSxcclxuICAgIHNvcnRCeVBhdGgsXHJcbiAgICBkaXN0aW5jdCxcclxuICAgIHN1bSxcclxuICAgIG1heCxcclxuICAgIHJlbW92ZSxcclxuICAgIGFkZEl0ZW0sXHJcbiAgICByZW1vdmVJdGVtLFxyXG4gICAgcmVtb3ZlSXRlbUJ5LFxyXG4gICAgdXBkYXRlSXRlbUJ5LFxyXG4gICAgdG9nZ2xlSXRlbSxcclxuICAgIGdldENvbGxlY3Rpb25PckVtcHR5LFxyXG4gICAgY291bnQsXHJcbiAgICBpc0FycmF5c0VxdWFsc1xyXG59IGZyb20gJy4vY29sbGVjdGlvbnMudXRpbHMnO1xyXG5cclxuZXhwb3J0IHsgYnVpbGRIdHRwUGFyYW1zIH0gZnJvbSAnLi9odHRwLnV0aWxzJzsiXX0=