@kato-lee/utilities 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,619 @@
1
+ let LARGE_ARRAY_SIZE = 200;
2
+ let HASH_UNDEFINED = '__lodash_hash_undefined__';
3
+ let MAX_SAFE_INTEGER = 9007199254740991;
4
+ let argsTag = '[object Arguments]', arrayTag = '[object Array]', boolTag = '[object Boolean]', dateTag = '[object Date]', errorTag = '[object Error]', funcTag = '[object Function]', genTag = '[object GeneratorFunction]', mapTag = '[object Map]', numberTag = '[object Number]', objectTag = '[object Object]', promiseTag = '[object Promise]', regexpTag = '[object RegExp]', setTag = '[object Set]', stringTag = '[object String]', symbolTag = '[object Symbol]', weakMapTag = '[object WeakMap]';
5
+ let arrayBufferTag = '[object ArrayBuffer]', dataViewTag = '[object DataView]', float32Tag = '[object Float32Array]', float64Tag = '[object Float64Array]', int8Tag = '[object Int8Array]', int16Tag = '[object Int16Array]', int32Tag = '[object Int32Array]', uint8Tag = '[object Uint8Array]', uint8ClampedTag = '[object Uint8ClampedArray]', uint16Tag = '[object Uint16Array]', uint32Tag = '[object Uint32Array]';
6
+ let reRegExpChar = /[\\^$.*+?()[\]{}|]/g;
7
+ let reFlags = /\w*$/;
8
+ let reIsHostCtor = /^\[object .+?Constructor\]$/;
9
+ let reIsUint = /^(?:0|[1-9]\d*)$/;
10
+ let cloneableTags = {};
11
+ cloneableTags[argsTag] =
12
+ cloneableTags[arrayTag] =
13
+ cloneableTags[arrayBufferTag] =
14
+ cloneableTags[dataViewTag] =
15
+ cloneableTags[boolTag] =
16
+ cloneableTags[dateTag] =
17
+ cloneableTags[float32Tag] =
18
+ cloneableTags[float64Tag] =
19
+ cloneableTags[int8Tag] =
20
+ cloneableTags[int16Tag] =
21
+ cloneableTags[int32Tag] =
22
+ cloneableTags[mapTag] =
23
+ cloneableTags[numberTag] =
24
+ cloneableTags[objectTag] =
25
+ cloneableTags[regexpTag] =
26
+ cloneableTags[setTag] =
27
+ cloneableTags[stringTag] =
28
+ cloneableTags[symbolTag] =
29
+ cloneableTags[uint8Tag] =
30
+ cloneableTags[uint8ClampedTag] =
31
+ cloneableTags[uint16Tag] =
32
+ cloneableTags[uint32Tag] =
33
+ true;
34
+ cloneableTags[errorTag] = cloneableTags[funcTag] = cloneableTags[weakMapTag] = false;
35
+ let freeGlobal = typeof global == 'object' && global && global.Object === Object && global;
36
+ let freeSelf = typeof self == 'object' && self && self.Object === Object && self;
37
+ let root = freeGlobal || freeSelf || Function('return this')();
38
+ let freeExports = typeof exports == 'object' && exports && !nodeType && exports;
39
+ let freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;
40
+ let moduleExports = freeModule && freeModule.exports === freeExports;
41
+ function addMapEntry(map, pair) {
42
+ map.set(pair[0], pair[1]);
43
+ return map;
44
+ }
45
+ function addSetEntry(set, value) {
46
+ set.add(value);
47
+ return set;
48
+ }
49
+ function arrayEach(array, iteratee) {
50
+ let index = -1, length = array ? array.length : 0;
51
+ while (++index < length) {
52
+ if (iteratee(array[index], index, array) === false) {
53
+ break;
54
+ }
55
+ }
56
+ return array;
57
+ }
58
+ function arrayPush(array, values) {
59
+ let index = -1, length = values.length, offset = array.length;
60
+ while (++index < length) {
61
+ array[offset + index] = values[index];
62
+ }
63
+ return array;
64
+ }
65
+ function arrayReduce(array, iteratee, accumulator, initAccum) {
66
+ let index = -1, length = array ? array.length : 0;
67
+ if (initAccum && length) {
68
+ accumulator = array[++index];
69
+ }
70
+ while (++index < length) {
71
+ accumulator = iteratee(accumulator, array[index], index, array);
72
+ }
73
+ return accumulator;
74
+ }
75
+ function baseTimes(n, iteratee) {
76
+ let index = -1, result = Array(n);
77
+ while (++index < n) {
78
+ result[index] = iteratee(index);
79
+ }
80
+ return result;
81
+ }
82
+ function getValue(object, key) {
83
+ return object == null ? undefined : object[key];
84
+ }
85
+ function isHostObject(value) {
86
+ let result = false;
87
+ if (value != null && typeof value.toString != 'function') {
88
+ try {
89
+ result = !!(value + '');
90
+ }
91
+ catch (e) { }
92
+ }
93
+ return result;
94
+ }
95
+ function mapToArray(map) {
96
+ let index = -1, result = Array(map.size);
97
+ map.forEach(function (value, key) {
98
+ result[++index] = [key, value];
99
+ });
100
+ return result;
101
+ }
102
+ function overArg(func, transform) {
103
+ return function (arg) {
104
+ return func(transform(arg));
105
+ };
106
+ }
107
+ function setToArray(set) {
108
+ let index = -1, result = Array(set.size);
109
+ set.forEach(function (value) {
110
+ result[++index] = value;
111
+ });
112
+ return result;
113
+ }
114
+ let arrayProto = Array.prototype, funcProto = Function.prototype, objectProto = Object.prototype;
115
+ let coreJsData = root['__core-js_shared__'];
116
+ let maskSrcKey = (function () {
117
+ let uid = /[^.]+$/.exec((coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO) || '');
118
+ return uid ? 'Symbol(src)_1.' + uid : '';
119
+ })();
120
+ let funcToString = funcProto.toString;
121
+ let hasOwnProperty = objectProto.hasOwnProperty;
122
+ let objectToString = objectProto.toString;
123
+ let reIsNative = RegExp('^' +
124
+ funcToString
125
+ .call(hasOwnProperty)
126
+ .replace(reRegExpChar, '\\$&')
127
+ .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') +
128
+ '$');
129
+ let Buffer = moduleExports ? root.Buffer : undefined, Symbol = root.Symbol, Uint8Array = root.Uint8Array, getPrototype = overArg(Object.getPrototypeOf, Object), objectCreate = Object.create, propertyIsEnumerable = objectProto.propertyIsEnumerable, splice = arrayProto.splice;
130
+ let nativeGetSymbols = Object.getOwnPropertySymbols, nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined, nativeKeys = overArg(Object.keys, Object);
131
+ let DataView = getNative(root, 'DataView'), Map = getNative(root, 'Map'), Promise = getNative(root, 'Promise'), Set = getNative(root, 'Set'), WeakMap = getNative(root, 'WeakMap'), nativeCreate = getNative(Object, 'create');
132
+ let dataViewCtorString = toSource(DataView), mapCtorString = toSource(Map), promiseCtorString = toSource(Promise), setCtorString = toSource(Set), weakMapCtorString = toSource(WeakMap);
133
+ let symbolProto = Symbol ? Symbol.prototype : undefined, symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;
134
+ function Hash(entries) {
135
+ let index = -1, length = entries ? entries.length : 0;
136
+ this.clear();
137
+ while (++index < length) {
138
+ let entry = entries[index];
139
+ this.set(entry[0], entry[1]);
140
+ }
141
+ }
142
+ function hashClear() {
143
+ this.__data__ = nativeCreate ? nativeCreate(null) : {};
144
+ }
145
+ function hashDelete(key) {
146
+ return this.has(key) && delete this.__data__[key];
147
+ }
148
+ function hashGet(key) {
149
+ let data = this.__data__;
150
+ if (nativeCreate) {
151
+ let result = data[key];
152
+ return result === HASH_UNDEFINED ? undefined : result;
153
+ }
154
+ return hasOwnProperty.call(data, key) ? data[key] : undefined;
155
+ }
156
+ function hashHas(key) {
157
+ let data = this.__data__;
158
+ return nativeCreate ? data[key] !== undefined : hasOwnProperty.call(data, key);
159
+ }
160
+ function hashSet(key, value) {
161
+ let data = this.__data__;
162
+ data[key] = nativeCreate && value === undefined ? HASH_UNDEFINED : value;
163
+ return this;
164
+ }
165
+ Hash.prototype.clear = hashClear;
166
+ Hash.prototype['delete'] = hashDelete;
167
+ Hash.prototype.get = hashGet;
168
+ Hash.prototype.has = hashHas;
169
+ Hash.prototype.set = hashSet;
170
+ function ListCache(entries) {
171
+ let index = -1, length = entries ? entries.length : 0;
172
+ this.clear();
173
+ while (++index < length) {
174
+ let entry = entries[index];
175
+ this.set(entry[0], entry[1]);
176
+ }
177
+ }
178
+ function listCacheClear() {
179
+ this.__data__ = [];
180
+ }
181
+ function listCacheDelete(key) {
182
+ let data = this.__data__, index = assocIndexOf(data, key);
183
+ if (index < 0) {
184
+ return false;
185
+ }
186
+ let lastIndex = data.length - 1;
187
+ if (index == lastIndex) {
188
+ data.pop();
189
+ }
190
+ else {
191
+ splice.call(data, index, 1);
192
+ }
193
+ return true;
194
+ }
195
+ function listCacheGet(key) {
196
+ let data = this.__data__, index = assocIndexOf(data, key);
197
+ return index < 0 ? undefined : data[index][1];
198
+ }
199
+ function listCacheHas(key) {
200
+ return assocIndexOf(this.__data__, key) > -1;
201
+ }
202
+ function listCacheSet(key, value) {
203
+ let data = this.__data__, index = assocIndexOf(data, key);
204
+ if (index < 0) {
205
+ data.push([key, value]);
206
+ }
207
+ else {
208
+ data[index][1] = value;
209
+ }
210
+ return this;
211
+ }
212
+ ListCache.prototype.clear = listCacheClear;
213
+ ListCache.prototype['delete'] = listCacheDelete;
214
+ ListCache.prototype.get = listCacheGet;
215
+ ListCache.prototype.has = listCacheHas;
216
+ ListCache.prototype.set = listCacheSet;
217
+ function MapCache(entries) {
218
+ let index = -1, length = entries ? entries.length : 0;
219
+ this.clear();
220
+ while (++index < length) {
221
+ let entry = entries[index];
222
+ this.set(entry[0], entry[1]);
223
+ }
224
+ }
225
+ function mapCacheClear() {
226
+ this.__data__ = {
227
+ hash: new Hash(),
228
+ map: new (Map || ListCache)(),
229
+ string: new Hash(),
230
+ };
231
+ }
232
+ function mapCacheDelete(key) {
233
+ return getMapData(this, key)['delete'](key);
234
+ }
235
+ function mapCacheGet(key) {
236
+ return getMapData(this, key).get(key);
237
+ }
238
+ function mapCacheHas(key) {
239
+ return getMapData(this, key).has(key);
240
+ }
241
+ function mapCacheSet(key, value) {
242
+ getMapData(this, key).set(key, value);
243
+ return this;
244
+ }
245
+ MapCache.prototype.clear = mapCacheClear;
246
+ MapCache.prototype['delete'] = mapCacheDelete;
247
+ MapCache.prototype.get = mapCacheGet;
248
+ MapCache.prototype.has = mapCacheHas;
249
+ MapCache.prototype.set = mapCacheSet;
250
+ function Stack(entries) {
251
+ this.__data__ = new ListCache(entries);
252
+ }
253
+ function stackClear() {
254
+ this.__data__ = new ListCache();
255
+ }
256
+ function stackDelete(key) {
257
+ return this.__data__['delete'](key);
258
+ }
259
+ function stackGet(key) {
260
+ return this.__data__.get(key);
261
+ }
262
+ function stackHas(key) {
263
+ return this.__data__.has(key);
264
+ }
265
+ function stackSet(key, value) {
266
+ let cache = this.__data__;
267
+ if (cache instanceof ListCache) {
268
+ let pairs = cache.__data__;
269
+ if (!Map || pairs.length < LARGE_ARRAY_SIZE - 1) {
270
+ pairs.push([key, value]);
271
+ return this;
272
+ }
273
+ cache = this.__data__ = new MapCache(pairs);
274
+ }
275
+ cache.set(key, value);
276
+ return this;
277
+ }
278
+ Stack.prototype.clear = stackClear;
279
+ Stack.prototype['delete'] = stackDelete;
280
+ Stack.prototype.get = stackGet;
281
+ Stack.prototype.has = stackHas;
282
+ Stack.prototype.set = stackSet;
283
+ function arrayLikeKeys(value, inherited) {
284
+ let result = isArray(value) || isArguments(value) ? baseTimes(value.length, String) : [];
285
+ let length = result.length, skipIndexes = !!length;
286
+ for (let key in value) {
287
+ if ((inherited || hasOwnProperty.call(value, key)) &&
288
+ !(skipIndexes && (key == 'length' || isIndex(key, length)))) {
289
+ result.push(key);
290
+ }
291
+ }
292
+ return result;
293
+ }
294
+ function assignValue(object, key, value) {
295
+ let objValue = object[key];
296
+ if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||
297
+ (value === undefined && !(key in object))) {
298
+ object[key] = value;
299
+ }
300
+ }
301
+ function assocIndexOf(array, key) {
302
+ let length = array.length;
303
+ while (length--) {
304
+ if (eq(array[length][0], key)) {
305
+ return length;
306
+ }
307
+ }
308
+ return -1;
309
+ }
310
+ function baseAssign(object, source) {
311
+ return object && copyObject(source, keys(source), object);
312
+ }
313
+ function baseClone(value, isDeep, isFull, customizer, key, object, stack) {
314
+ let result;
315
+ if (customizer) {
316
+ result = object ? customizer(value, key, object, stack) : customizer(value);
317
+ }
318
+ if (result !== undefined) {
319
+ return result;
320
+ }
321
+ if (!isObject(value)) {
322
+ return value;
323
+ }
324
+ let isArr = isArray(value);
325
+ if (isArr) {
326
+ result = initCloneArray(value);
327
+ if (!isDeep) {
328
+ return copyArray(value, result);
329
+ }
330
+ }
331
+ else {
332
+ let tag = getTag(value), isFunc = tag == funcTag || tag == genTag;
333
+ if (isBuffer(value)) {
334
+ return cloneBuffer(value, isDeep);
335
+ }
336
+ if (tag == objectTag || tag == argsTag || (isFunc && !object)) {
337
+ if (isHostObject(value)) {
338
+ return object ? value : {};
339
+ }
340
+ result = initCloneObject(isFunc ? {} : value);
341
+ if (!isDeep) {
342
+ return copySymbols(value, baseAssign(result, value));
343
+ }
344
+ }
345
+ else {
346
+ if (!cloneableTags[tag]) {
347
+ return object ? value : {};
348
+ }
349
+ result = initCloneByTag(value, tag, baseClone, isDeep);
350
+ }
351
+ }
352
+ stack || (stack = new Stack());
353
+ let stacked = stack.get(value);
354
+ if (stacked) {
355
+ return stacked;
356
+ }
357
+ stack.set(value, result);
358
+ if (!isArr) {
359
+ var cloneDeepProps = isFull ? getAllKeys(value) : keys(value);
360
+ }
361
+ arrayEach(cloneDeepProps || value, function (subValue, key) {
362
+ if (cloneDeepProps) {
363
+ key = subValue;
364
+ subValue = value[key];
365
+ }
366
+ assignValue(result, key, baseClone(subValue, isDeep, isFull, customizer, key, value, stack));
367
+ });
368
+ return result;
369
+ }
370
+ function baseCreate(proto) {
371
+ return isObject(proto) ? objectCreate(proto) : {};
372
+ }
373
+ function baseGetAllKeys(object, keysFunc, symbolsFunc) {
374
+ let result = keysFunc(object);
375
+ return isArray(object) ? result : arrayPush(result, symbolsFunc(object));
376
+ }
377
+ function baseGetTag(value) {
378
+ return objectToString.call(value);
379
+ }
380
+ function baseIsNative(value) {
381
+ if (!isObject(value) || isMasked(value)) {
382
+ return false;
383
+ }
384
+ let pattern = isFunction(value) || isHostObject(value) ? reIsNative : reIsHostCtor;
385
+ return pattern.test(toSource(value));
386
+ }
387
+ function baseKeys(object) {
388
+ if (!isPrototype(object)) {
389
+ return nativeKeys(object);
390
+ }
391
+ let result = [];
392
+ for (let key in Object(object)) {
393
+ if (hasOwnProperty.call(object, key) && key != 'constructor') {
394
+ result.push(key);
395
+ }
396
+ }
397
+ return result;
398
+ }
399
+ function cloneBuffer(buffer, isDeep) {
400
+ if (isDeep) {
401
+ return buffer.slice();
402
+ }
403
+ let result = new buffer.constructor(buffer.length);
404
+ buffer.copy(result);
405
+ return result;
406
+ }
407
+ function cloneArrayBuffer(arrayBuffer) {
408
+ let result = new arrayBuffer.constructor(arrayBuffer.byteLength);
409
+ new Uint8Array(result).set(new Uint8Array(arrayBuffer));
410
+ return result;
411
+ }
412
+ function cloneDataView(dataView, isDeep) {
413
+ let buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;
414
+ return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);
415
+ }
416
+ function cloneMap(map, isDeep, cloneFunc) {
417
+ let array = isDeep ? cloneFunc(mapToArray(map), true) : mapToArray(map);
418
+ return arrayReduce(array, addMapEntry, new map.constructor());
419
+ }
420
+ function cloneRegExp(regexp) {
421
+ let result = new regexp.constructor(regexp.source, reFlags.exec(regexp));
422
+ result.lastIndex = regexp.lastIndex;
423
+ return result;
424
+ }
425
+ function cloneSet(set, isDeep, cloneFunc) {
426
+ let array = isDeep ? cloneFunc(setToArray(set), true) : setToArray(set);
427
+ return arrayReduce(array, addSetEntry, new set.constructor());
428
+ }
429
+ function cloneSymbol(symbol) {
430
+ return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};
431
+ }
432
+ function cloneTypedArray(typedArray, isDeep) {
433
+ let buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;
434
+ return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);
435
+ }
436
+ function copyArray(source, array) {
437
+ let index = -1, length = source.length;
438
+ array || (array = Array(length));
439
+ while (++index < length) {
440
+ array[index] = source[index];
441
+ }
442
+ return array;
443
+ }
444
+ function copyObject(source, cloneDeepProps, object, customizer) {
445
+ object || (object = {});
446
+ let index = -1, length = cloneDeepProps.length;
447
+ while (++index < length) {
448
+ let key = cloneDeepProps[index];
449
+ let newValue = customizer
450
+ ? customizer(object[key], source[key], key, object, source)
451
+ : undefined;
452
+ assignValue(object, key, newValue === undefined ? source[key] : newValue);
453
+ }
454
+ return object;
455
+ }
456
+ function copySymbols(source, object) {
457
+ return copyObject(source, getSymbols(source), object);
458
+ }
459
+ function getAllKeys(object) {
460
+ return baseGetAllKeys(object, keys, getSymbols);
461
+ }
462
+ function getMapData(map, key) {
463
+ let data = map.__data__;
464
+ return isKeyable(key) ? data[typeof key == 'string' ? 'string' : 'hash'] : data.map;
465
+ }
466
+ function getNative(object, key) {
467
+ let value = getValue(object, key);
468
+ return baseIsNative(value) ? value : undefined;
469
+ }
470
+ let getSymbols = nativeGetSymbols ? overArg(nativeGetSymbols, Object) : stubArray;
471
+ let getTag = baseGetTag;
472
+ if ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||
473
+ (Map && getTag(new Map()) != mapTag) ||
474
+ (Promise && getTag(Promise.resolve()) != promiseTag) ||
475
+ (Set && getTag(new Set()) != setTag) ||
476
+ (WeakMap && getTag(new WeakMap()) != weakMapTag)) {
477
+ getTag = function (value) {
478
+ let result = objectToString.call(value), Ctor = result == objectTag ? value.constructor : undefined, ctorString = Ctor ? toSource(Ctor) : undefined;
479
+ if (ctorString) {
480
+ switch (ctorString) {
481
+ case dataViewCtorString:
482
+ return dataViewTag;
483
+ case mapCtorString:
484
+ return mapTag;
485
+ case promiseCtorString:
486
+ return promiseTag;
487
+ case setCtorString:
488
+ return setTag;
489
+ case weakMapCtorString:
490
+ return weakMapTag;
491
+ }
492
+ }
493
+ return result;
494
+ };
495
+ }
496
+ function initCloneArray(array) {
497
+ let length = array.length, result = array.constructor(length);
498
+ if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {
499
+ result.index = array.index;
500
+ result.input = array.input;
501
+ }
502
+ return result;
503
+ }
504
+ function initCloneObject(object) {
505
+ return typeof object.constructor == 'function' && !isPrototype(object)
506
+ ? baseCreate(getPrototype(object))
507
+ : {};
508
+ }
509
+ function initCloneByTag(object, tag, cloneFunc, isDeep) {
510
+ let Ctor = object.constructor;
511
+ switch (tag) {
512
+ case arrayBufferTag:
513
+ return cloneArrayBuffer(object);
514
+ case boolTag:
515
+ case dateTag:
516
+ return new Ctor(+object);
517
+ case dataViewTag:
518
+ return cloneDataView(object, isDeep);
519
+ case float32Tag:
520
+ case float64Tag:
521
+ case int8Tag:
522
+ case int16Tag:
523
+ case int32Tag:
524
+ case uint8Tag:
525
+ case uint8ClampedTag:
526
+ case uint16Tag:
527
+ case uint32Tag:
528
+ return cloneTypedArray(object, isDeep);
529
+ case mapTag:
530
+ return cloneMap(object, isDeep, cloneFunc);
531
+ case numberTag:
532
+ case stringTag:
533
+ return new Ctor(object);
534
+ case regexpTag:
535
+ return cloneRegExp(object);
536
+ case setTag:
537
+ return cloneSet(object, isDeep, cloneFunc);
538
+ case symbolTag:
539
+ return cloneSymbol(object);
540
+ }
541
+ }
542
+ function isIndex(value, length) {
543
+ length = length == null ? MAX_SAFE_INTEGER : length;
544
+ return (!!length &&
545
+ (typeof value == 'number' || reIsUint.test(value)) &&
546
+ value > -1 &&
547
+ value % 1 == 0 &&
548
+ value < length);
549
+ }
550
+ function isKeyable(value) {
551
+ let type = typeof value;
552
+ return type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean'
553
+ ? value !== '__proto__'
554
+ : value === null;
555
+ }
556
+ function isMasked(func) {
557
+ return !!maskSrcKey && maskSrcKey in func;
558
+ }
559
+ function isPrototype(value) {
560
+ let Ctor = value && value.constructor, proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;
561
+ return value === proto;
562
+ }
563
+ function toSource(func) {
564
+ if (func != null) {
565
+ try {
566
+ return funcToString.call(func);
567
+ }
568
+ catch (e) { }
569
+ try {
570
+ return func + '';
571
+ }
572
+ catch (e) { }
573
+ }
574
+ return '';
575
+ }
576
+ function zxhiddenCustomCloneDeepByJeremyAshkenas(value) {
577
+ return baseClone(value, true, true);
578
+ }
579
+ function eq(value, other) {
580
+ return value === other || (value !== value && other !== other);
581
+ }
582
+ function isArguments(value) {
583
+ return (isArrayLikeObject(value) &&
584
+ hasOwnProperty.call(value, 'callee') &&
585
+ (!propertyIsEnumerable.call(value, 'callee') || objectToString.call(value) == argsTag));
586
+ }
587
+ let isArray = Array.isArray;
588
+ function isArrayLike(value) {
589
+ return value != null && isLength(value.length) && !isFunction(value);
590
+ }
591
+ function isArrayLikeObject(value) {
592
+ return isObjectLike(value) && isArrayLike(value);
593
+ }
594
+ let isBuffer = nativeIsBuffer || stubFalse;
595
+ function isFunction(value) {
596
+ let tag = isObject(value) ? objectToString.call(value) : '';
597
+ return tag == funcTag || tag == genTag;
598
+ }
599
+ function isLength(value) {
600
+ return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;
601
+ }
602
+ function isObject(value) {
603
+ let type = typeof value;
604
+ return !!value && (type == 'object' || type == 'function');
605
+ }
606
+ function isObjectLike(value) {
607
+ return !!value && typeof value == 'object';
608
+ }
609
+ function keys(object) {
610
+ return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);
611
+ }
612
+ function stubArray() {
613
+ return [];
614
+ }
615
+ function stubFalse() {
616
+ return false;
617
+ }
618
+ export default zxhiddenCustomCloneDeepByJeremyAshkenas;
619
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiX2Nsb25lLWRlZXAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWJyYXJpZXMvdXRpbGl0aWVzL2pzL19jbG9uZS1kZWVwLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLElBQUksZ0JBQWdCLEdBQUcsR0FBRyxDQUFDO0FBQzNCLElBQUksY0FBYyxHQUFHLDJCQUEyQixDQUFDO0FBQ2pELElBQUksZ0JBQWdCLEdBQUcsZ0JBQWdCLENBQUM7QUFFeEMsSUFBSSxPQUFPLEdBQUcsb0JBQW9CLEVBQ2hDLFFBQVEsR0FBRyxnQkFBZ0IsRUFDM0IsT0FBTyxHQUFHLGtCQUFrQixFQUM1QixPQUFPLEdBQUcsZUFBZSxFQUN6QixRQUFRLEdBQUcsZ0JBQWdCLEVBQzNCLE9BQU8sR0FBRyxtQkFBbUIsRUFDN0IsTUFBTSxHQUFHLDRCQUE0QixFQUNyQyxNQUFNLEdBQUcsY0FBYyxFQUN2QixTQUFTLEdBQUcsaUJBQWlCLEVBQzdCLFNBQVMsR0FBRyxpQkFBaUIsRUFDN0IsVUFBVSxHQUFHLGtCQUFrQixFQUMvQixTQUFTLEdBQUcsaUJBQWlCLEVBQzdCLE1BQU0sR0FBRyxjQUFjLEVBQ3ZCLFNBQVMsR0FBRyxpQkFBaUIsRUFDN0IsU0FBUyxHQUFHLGlCQUFpQixFQUM3QixVQUFVLEdBQUcsa0JBQWtCLENBQUM7QUFFbEMsSUFBSSxjQUFjLEdBQUcsc0JBQXNCLEVBQ3pDLFdBQVcsR0FBRyxtQkFBbUIsRUFDakMsVUFBVSxHQUFHLHVCQUF1QixFQUNwQyxVQUFVLEdBQUcsdUJBQXVCLEVBQ3BDLE9BQU8sR0FBRyxvQkFBb0IsRUFDOUIsUUFBUSxHQUFHLHFCQUFxQixFQUNoQyxRQUFRLEdBQUcscUJBQXFCLEVBQ2hDLFFBQVEsR0FBRyxxQkFBcUIsRUFDaEMsZUFBZSxHQUFHLDRCQUE0QixFQUM5QyxTQUFTLEdBQUcsc0JBQXNCLEVBQ2xDLFNBQVMsR0FBRyxzQkFBc0IsQ0FBQztBQUVyQyxJQUFJLFlBQVksR0FBRyxxQkFB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QUFDO0FBRUQsU0FBUyxRQUFRLENBQUMsS0FBSztJQUNyQixJQUFJLElBQUksR0FBRyxPQUFPLEtBQUssQ0FBQztJQUN4QixPQUFPLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxJQUFJLElBQUksUUFBUSxJQUFJLElBQUksSUFBSSxVQUFVLENBQUMsQ0FBQztBQUM3RCxDQUFDO0FBRUQsU0FBUyxZQUFZLENBQUMsS0FBSztJQUN6QixPQUFPLENBQUMsQ0FBQyxLQUFLLElBQUksT0FBTyxLQUFLLElBQUksUUFBUSxDQUFDO0FBQzdDLENBQUM7QUFFRCxTQUFTLElBQUksQ0FBQyxNQUFNO0lBQ2xCLE9BQU8sV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUN4RSxDQUFDO0FBRUQsU0FBUyxTQUFTO0lBQ2hCLE9BQU8sRUFBRSxDQUFDO0FBQ1osQ0FBQztBQUVELFNBQVMsU0FBUztJQUNoQixPQUFPLEtBQUssQ0FBQztBQUNmLENBQUM7QUFFRCxlQUFlLHVDQUF1QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsibGV0IExBUkdFX0FSUkFZX1NJWkUgPSAyMDA7XHJcbmxldCBIQVNIX1VOREVGSU5FRCA9ICdfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fJztcclxubGV0IE1BWF9TQUZFX0lOVEVHRVIgPSA5MDA3MTk5MjU0NzQwOTkxO1xyXG5cclxubGV0IGFyZ3NUYWcgPSAnW29iamVjdCBBcmd1bWVudHNdJyxcclxuICBhcnJheVRhZyA9ICdbb2JqZWN0IEFycmF5XScsXHJcbiAgYm9vbFRhZyA9ICdbb2JqZWN0IEJvb2xlYW5dJyxcclxuICBkYXRlVGFnID0gJ1tvYmplY3QgRGF0ZV0nLFxyXG4gIGVycm9yVGFnID0gJ1tvYmplY3QgRXJyb3JdJyxcclxuICBmdW5jVGFnID0gJ1tvYmplY3QgRnVuY3Rpb25dJyxcclxuICBnZW5UYWcgPSAnW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl0nLFxyXG4gIG1hcFRhZyA9ICdbb2JqZWN0IE1hcF0nLFxyXG4gIG51bWJlclRhZyA9ICdbb2JqZWN0IE51bWJlcl0nLFxyXG4gIG9iamVjdFRhZyA9ICdbb2JqZWN0IE9iamVjdF0nLFxyXG4gIHByb21pc2VUYWcgPSAnW29iamVjdCBQcm9taXNlXScsXHJcbiAgcmVnZXhwVGFnID0gJ1tvYmplY3QgUmVnRXhwXScsXHJcbiAgc2V0VGFnID0gJ1tvYmplY3QgU2V0XScsXHJcbiAgc3RyaW5nVGFnID0gJ1tvYmplY3QgU3RyaW5nXScsXHJcbiAgc3ltYm9sVGFnID0gJ1tvYmplY3QgU3ltYm9sXScsXHJcbiAgd2Vha01hcFRhZyA9ICdbb2JqZWN0IFdlYWtNYXBdJztcclxuXHJcbmxldCBhcnJheUJ1ZmZlclRhZyA9ICdbb2JqZWN0IEFycmF5QnVmZmVyXScsXHJcbiAgZGF0YVZpZXdUYWcgPSAnW29iamVjdCBEYXRhVmlld10nLFxyXG4gIGZsb2F0MzJUYWcgPSAnW29iamVjdCBGbG9hdDMyQXJyYXldJyxcclxuICBmbG9hdDY0VGFnID0gJ1tvYmplY3QgRmxvYXQ2NEFycmF5XScsXHJcbiAgaW50OFRhZyA9ICdbb2JqZWN0IEludDhBcnJheV0nLFxyXG4gIGludDE2VGFnID0gJ1tvYmplY3QgSW50MTZBcnJheV0nLFxyXG4gIGludDMyVGFnID0gJ1tvYmplY3QgSW50MzJBcnJheV0nLFxyXG4gIHVpbnQ4VGFnID0gJ1tvYmplY3QgVWludDhBcnJheV0nLFxyXG4gIHVpbnQ4Q2xhbXBlZFRhZyA9ICdbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XScsXHJcbiAgdWludDE2VGFnID0gJ1tvYmplY3QgVWludDE2QXJyYXldJyxcclxuICB1aW50MzJUYWcgPSAnW29iamVjdCBVaW50MzJBcnJheV0nO1xyXG5cclxubGV0IHJlUmVnRXhwQ2hhciA9IC9bXFxcXF4kLiorPygpW1xcXXt9fF0vZztcclxubGV0IHJlRmxhZ3MgPSAvXFx3KiQvO1xyXG5sZXQgcmVJc0hvc3RDdG9yID0gL15cXFtvYmplY3QgLis/Q29uc3RydWN0b3JcXF0kLztcclxubGV0IHJlSXNVaW50ID0gL14oPzowfFsxLTldXFxkKikkLztcclxuXHJcbmxldCBjbG9uZWFibGVUYWdzID0ge307XHJcbmNsb25lYWJsZVRhZ3NbYXJnc1RhZ10gPVxyXG4gIGNsb25lYWJsZVRhZ3NbYXJyYXlUYWddID1cclxuICBjbG9uZWFibGVUYWdzW2FycmF5QnVmZmVyVGFnXSA9XHJcbiAgY2xvbmVhYmxlVGFnc1tkYXRhVmlld1RhZ10gPVxyXG4gIGNsb25lYWJsZVRhZ3NbYm9vbFRhZ10gPVxyXG4gIGNsb25lYWJsZVRhZ3NbZGF0ZVRhZ10gPVxyXG4gIGNsb25lYWJsZVRhZ3NbZmxvYXQzMlRhZ10gPVxyXG4gIGNsb25lYWJsZVRhZ3NbZmxvYXQ2NFRhZ10gPVxyXG4gIGNsb25lYWJsZVRhZ3NbaW50OFRhZ10gPVxyXG4gIGNsb25lYWJsZVRhZ3NbaW50MTZUYWddID1cclxuICBjbG9uZWFibGVUYWdzW2ludDMyVGFnXSA9XHJcbiAgY2xvbmVhYmxlVGFnc1ttYXBUYWddID1cclxuICBjbG9uZWFibGVUYWdzW251bWJlclRhZ10gPVxyXG4gIGNsb25lYWJsZVRhZ3Nbb2JqZWN0VGFnXSA9XHJcbiAgY2xvbmVhYmxlVGFnc1tyZWdleHBUYWddID1cclxuICBjbG9uZWFibGVUYWdzW3NldFRhZ10gPVxyXG4gIGNsb25lYWJsZVRhZ3Nbc3RyaW5nVGFnXSA9XHJcbiAgY2xvbmVhYmxlVGFnc1tzeW1ib2xUYWddID1cclxuICBjbG9uZWFibGVUYWdzW3VpbnQ4VGFnXSA9XHJcbiAgY2xvbmVhYmxlVGFnc1t1aW50OENsYW1wZWRUYWddID1cclxuICBjbG9uZWFibGVUYWdzW3VpbnQxNlRhZ10gPVxyXG4gIGNsb25lYWJsZVRhZ3NbdWludDMyVGFnXSA9XHJcbiAgICB0cnVlO1xyXG5jbG9uZWFibGVUYWdzW2Vycm9yVGFnXSA9IGNsb25lYWJsZVRhZ3NbZnVuY1RhZ10gPSBjbG9uZWFibGVUYWdzW3dlYWtNYXBUYWddID0gZmFsc2U7XHJcblxyXG5sZXQgZnJlZUdsb2JhbCA9IHR5cGVvZiBnbG9iYWwgPT0gJ29iamVjdCcgJiYgZ2xvYmFsICYmIGdsb2JhbC5PYmplY3QgPT09IE9iamVjdCAmJiBnbG9iYWw7XHJcbmxldCBmcmVlU2VsZiA9IHR5cGVvZiBzZWxmID09ICdvYmplY3QnICYmIHNlbGYgJiYgc2VsZi5PYmplY3QgPT09IE9iamVjdCAmJiBzZWxmO1xyXG5sZXQgcm9vdCA9IGZyZWVHbG9iYWwgfHwgZnJlZVNlbGYgfHwgRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcclxubGV0IGZyZWVFeHBvcnRzID0gdHlwZW9mIGV4cG9ydHMgPT0gJ29iamVjdCcgJiYgZXhwb3J0cyAmJiAhbm9kZVR5cGUgJiYgZXhwb3J0cztcclxubGV0IGZyZWVNb2R1bGUgPSBmcmVlRXhwb3J0cyAmJiB0eXBlb2YgbW9kdWxlID09ICdvYmplY3QnICYmIG1vZHVsZSAmJiAhbW9kdWxlLm5vZGVUeXBlICYmIG1vZHVsZTtcclxubGV0IG1vZHVsZUV4cG9ydHMgPSBmcmVlTW9kdWxlICYmIGZyZWVNb2R1bGUuZXhwb3J0cyA9PT0gZnJlZUV4cG9ydHM7XHJcblxyXG5mdW5jdGlvbiBhZGRNYXBFbnRyeShtYXAsIHBhaXIpIHtcclxuICBtYXAuc2V0KHBhaXJbMF0sIHBhaXJbMV0pO1xyXG4gIHJldHVybiBtYXA7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGFkZFNldEVudHJ5KHNldCwgdmFsdWUpIHtcclxuICBzZXQuYWRkKHZhbHVlKTtcclxuICByZXR1cm4gc2V0O1xyXG59XHJcblxyXG5mdW5jdGlvbiBhcnJheUVhY2goYXJyYXksIGl0ZXJhdGVlKSB7XHJcbiAgbGV0IGluZGV4ID0gLTEsXHJcbiAgICBsZW5ndGggPSBhcnJheSA/IGFycmF5Lmxlbmd0aCA6IDA7XHJcblxyXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XHJcbiAgICBpZiAoaXRlcmF0ZWUoYXJyYXlbaW5kZXhdLCBpbmRleCwgYXJyYXkpID09PSBmYWxzZSkge1xyXG4gICAgICBicmVhaztcclxuICAgIH1cclxuICB9XHJcbiAgcmV0dXJuIGFycmF5O1xyXG59XHJcblxyXG5mdW5jdGlvbiBhcnJheVB1c2goYXJyYXksIHZhbHVlcykge1xyXG4gIGxldCBpbmRleCA9IC0xLFxyXG4gICAgbGVuZ3RoID0gdmFsdWVzLmxlbmd0aCxcclxuICAgIG9mZnNldCA9IGFycmF5Lmxlbmd0aDtcclxuXHJcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcclxuICAgIGFycmF5W29mZnNldCArIGluZGV4XSA9IHZhbHVlc1tpbmRleF07XHJcbiAgfVxyXG4gIHJldHVybiBhcnJheTtcclxufVxyXG5cclxuZnVuY3Rpb24gYXJyYXlSZWR1Y2UoYXJyYXksIGl0ZXJhdGVlLCBhY2N1bXVsYXRvciwgaW5pdEFjY3VtKSB7XHJcbiAgbGV0IGluZGV4ID0gLTEsXHJcbiAgICBsZW5ndGggPSBhcnJheSA/IGFycmF5Lmxlbmd0aCA6IDA7XHJcblxyXG4gIGlmIChpbml0QWNjdW0gJiYgbGVuZ3RoKSB7XHJcbiAgICBhY2N1bXVsYXRvciA9IGFycmF5WysraW5kZXhdO1xyXG4gIH1cclxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xyXG4gICAgYWNjdW11bGF0b3IgPSBpdGVyYXRlZShhY2N1bXVsYXRvciwgYXJyYXlbaW5kZXhdLCBpbmRleCwgYXJyYXkpO1xyXG4gIH1cclxuICByZXR1cm4gYWNjdW11bGF0b3I7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGJhc2VUaW1lcyhuLCBpdGVyYXRlZSkge1xyXG4gIGxldCBpbmRleCA9IC0xLFxyXG4gICAgcmVzdWx0ID0gQXJyYXkobik7XHJcblxyXG4gIHdoaWxlICgrK2luZGV4IDwgbikge1xyXG4gICAgcmVzdWx0W2luZGV4XSA9IGl0ZXJhdGVlKGluZGV4KTtcclxuICB9XHJcbiAgcmV0dXJuIHJlc3VsdDtcclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0VmFsdWUob2JqZWN0LCBrZXkpIHtcclxuICByZXR1cm4gb2JqZWN0ID09IG51bGwgPyB1bmRlZmluZWQgOiBvYmplY3Rba2V5XTtcclxufVxyXG5cclxuZnVuY3Rpb24gaXNIb3N0T2JqZWN0KHZhbHVlKSB7XHJcbiAgbGV0IHJlc3VsdCA9IGZhbHNlO1xyXG4gIGlmICh2YWx1ZSAhPSBudWxsICYmIHR5cGVvZiB2YWx1ZS50b1N0cmluZyAhPSAnZnVuY3Rpb24nKSB7XHJcbiAgICB0cnkge1xyXG4gICAgICByZXN1bHQgPSAhISh2YWx1ZSArICcnKTtcclxuICAgIH0gY2F0Y2ggKGUpIHt9XHJcbiAgfVxyXG4gIHJldHVybiByZXN1bHQ7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIG1hcFRvQXJyYXkobWFwKSB7XHJcbiAgbGV0IGluZGV4ID0gLTEsXHJcbiAgICByZXN1bHQgPSBBcnJheShtYXAuc2l6ZSk7XHJcblxyXG4gIG1hcC5mb3JFYWNoKGZ1bmN0aW9uICh2YWx1ZSwga2V5KSB7XHJcbiAgICByZXN1bHRbKytpbmRleF0gPSBba2V5LCB2YWx1ZV07XHJcbiAgfSk7XHJcbiAgcmV0dXJuIHJlc3VsdDtcclxufVxyXG5cclxuZnVuY3Rpb24gb3ZlckFyZyhmdW5jLCB0cmFuc2Zvcm0pIHtcclxuICByZXR1cm4gZnVuY3Rpb24gKGFyZykge1xyXG4gICAgcmV0dXJuIGZ1bmModHJhbnNmb3JtKGFyZykpO1xyXG4gIH07XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHNldFRvQXJyYXkoc2V0KSB7XHJcbiAgbGV0IGluZGV4ID0gLTEsXHJcbiAgICByZXN1bHQgPSBBcnJheShzZXQuc2l6ZSk7XHJcblxyXG4gIHNldC5mb3JFYWNoKGZ1bmN0aW9uICh2YWx1ZSkge1xyXG4gICAgcmVzdWx0WysraW5kZXhdID0gdmFsdWU7XHJcbiAgfSk7XHJcbiAgcmV0dXJuIHJlc3VsdDtcclxufVxyXG5cclxubGV0IGFycmF5UHJvdG8gPSBBcnJheS5wcm90b3R5cGUsXHJcbiAgZnVuY1Byb3RvID0gRnVuY3Rpb24ucHJvdG90eXBlLFxyXG4gIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcclxuXHJcbmxldCBjb3JlSnNEYXRhID0gcm9vdFsnX19jb3JlLWpzX3NoYXJlZF9fJ107XHJcblxyXG5sZXQgbWFza1NyY0tleSA9IChmdW5jdGlvbiAoKSB7XHJcbiAgbGV0IHVpZCA9IC9bXi5dKyQvLmV4ZWMoKGNvcmVKc0RhdGEgJiYgY29yZUpzRGF0YS5rZXlzICYmIGNvcmVKc0RhdGEua2V5cy5JRV9QUk9UTykgfHwgJycpO1xyXG4gIHJldHVybiB1aWQgPyAnU3ltYm9sKHNyYylfMS4nICsgdWlkIDogJyc7XHJcbn0pKCk7XHJcblxyXG5sZXQgZnVuY1RvU3RyaW5nID0gZnVuY1Byb3RvLnRvU3RyaW5nO1xyXG5sZXQgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcclxubGV0IG9iamVjdFRvU3RyaW5nID0gb2JqZWN0UHJvdG8udG9TdHJpbmc7XHJcblxyXG5sZXQgcmVJc05hdGl2ZSA9IFJlZ0V4cChcclxuICAnXicgK1xyXG4gICAgZnVuY1RvU3RyaW5nXHJcbiAgICAgIC5jYWxsKGhhc093blByb3BlcnR5KVxyXG4gICAgICAucmVwbGFjZShyZVJlZ0V4cENoYXIsICdcXFxcJCYnKVxyXG4gICAgICAucmVwbGFjZSgvaGFzT3duUHJvcGVydHl8KGZ1bmN0aW9uKS4qPyg/PVxcXFxcXCgpfCBmb3IgLis/KD89XFxcXFxcXSkvZywgJyQxLio/JykgK1xyXG4gICAgJyQnXHJcbik7XHJcblxyXG5sZXQgQnVmZmVyID0gbW9kdWxlRXhwb3J0cyA/IHJvb3QuQnVmZmVyIDogdW5kZWZpbmVkLFxyXG4gIFN5bWJvbCA9IHJvb3QuU3ltYm9sLFxyXG4gIFVpbnQ4QXJyYXkgPSByb290LlVpbnQ4QXJyYXksXHJcbiAgZ2V0UHJvdG90eXBlID0gb3ZlckFyZyhPYmplY3QuZ2V0UHJvdG90eXBlT2YsIE9iamVjdCksXHJcbiAgb2JqZWN0Q3JlYXRlID0gT2JqZWN0LmNyZWF0ZSxcclxuICBwcm9wZXJ0eUlzRW51bWVyYWJsZSA9IG9iamVjdFByb3RvLnByb3BlcnR5SXNFbnVtZXJhYmxlLFxyXG4gIHNwbGljZSA9IGFycmF5UHJvdG8uc3BsaWNlO1xyXG5cclxubGV0IG5hdGl2ZUdldFN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzLFxyXG4gIG5hdGl2ZUlzQnVmZmVyID0gQnVmZmVyID8gQnVmZmVyLmlzQnVmZmVyIDogdW5kZWZpbmVkLFxyXG4gIG5hdGl2ZUtleXMgPSBvdmVyQXJnKE9iamVjdC5rZXlzLCBPYmplY3QpO1xyXG5cclxubGV0IERhdGFWaWV3ID0gZ2V0TmF0aXZlKHJvb3QsICdEYXRhVmlldycpLFxyXG4gIE1hcCA9IGdldE5hdGl2ZShyb290LCAnTWFwJyksXHJcbiAgUHJvbWlzZSA9IGdldE5hdGl2ZShyb290LCAnUHJvbWlzZScpLFxyXG4gIFNldCA9IGdldE5hdGl2ZShyb290LCAnU2V0JyksXHJcbiAgV2Vha01hcCA9IGdldE5hdGl2ZShyb290LCAnV2Vha01hcCcpLFxyXG4gIG5hdGl2ZUNyZWF0ZSA9IGdldE5hdGl2ZShPYmplY3QsICdjcmVhdGUnKTtcclxuXHJcbmxldCBkYXRhVmlld0N0b3JTdHJpbmcgPSB0b1NvdXJjZShEYXRhVmlldyksXHJcbiAgbWFwQ3RvclN0cmluZyA9IHRvU291cmNlKE1hcCksXHJcbiAgcHJvbWlzZUN0b3JTdHJpbmcgPSB0b1NvdXJjZShQcm9taXNlKSxcclxuICBzZXRDdG9yU3RyaW5nID0gdG9Tb3VyY2UoU2V0KSxcclxuICB3ZWFrTWFwQ3RvclN0cmluZyA9IHRvU291cmNlKFdlYWtNYXApO1xyXG5cclxubGV0IHN5bWJvbFByb3RvID0gU3ltYm9sID8gU3ltYm9sLnByb3RvdHlwZSA6IHVuZGVmaW5lZCxcclxuICBzeW1ib2xWYWx1ZU9mID0gc3ltYm9sUHJvdG8gPyBzeW1ib2xQcm90by52YWx1ZU9mIDogdW5kZWZpbmVkO1xyXG5cclxuZnVuY3Rpb24gSGFzaChlbnRyaWVzKSB7XHJcbiAgbGV0IGluZGV4ID0gLTEsXHJcbiAgICBsZW5ndGggPSBlbnRyaWVzID8gZW50cmllcy5sZW5ndGggOiAwO1xyXG5cclxuICB0aGlzLmNsZWFyKCk7XHJcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcclxuICAgIGxldCBlbnRyeSA9IGVudHJpZXNbaW5kZXhdO1xyXG4gICAgdGhpcy5zZXQoZW50cnlbMF0sIGVudHJ5WzFdKTtcclxuICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGhhc2hDbGVhcigpIHtcclxuICB0aGlzLl9fZGF0YV9fID0gbmF0aXZlQ3JlYXRlID8gbmF0aXZlQ3JlYXRlKG51bGwpIDoge307XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGhhc2hEZWxldGUoa2V5KSB7XHJcbiAgcmV0dXJuIHRoaXMuaGFzKGtleSkgJiYgZGVsZXRlIHRoaXMuX19kYXRhX19ba2V5XTtcclxufVxyXG5cclxuZnVuY3Rpb24gaGFzaEdldChrZXkpIHtcclxuICBsZXQgZGF0YSA9IHRoaXMuX19kYXRhX187XHJcbiAgaWYgKG5hdGl2ZUNyZWF0ZSkge1xyXG4gICAgbGV0IHJlc3VsdCA9IGRhdGFba2V5XTtcclxuICAgIHJldHVybiByZXN1bHQgPT09IEhBU0hfVU5ERUZJTkVEID8gdW5kZWZpbmVkIDogcmVzdWx0O1xyXG4gIH1cclxuICByZXR1cm4gaGFzT3duUHJvcGVydHkuY2FsbChkYXRhLCBrZXkpID8gZGF0YVtrZXldIDogdW5kZWZpbmVkO1xyXG59XHJcblxyXG5mdW5jdGlvbiBoYXNoSGFzKGtleSkge1xyXG4gIGxldCBkYXRhID0gdGhpcy5fX2RhdGFfXztcclxuICByZXR1cm4gbmF0aXZlQ3JlYXRlID8gZGF0YVtrZXldICE9PSB1bmRlZmluZWQgOiBoYXNPd25Qcm9wZXJ0eS5jYWxsKGRhdGEsIGtleSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGhhc2hTZXQoa2V5LCB2YWx1ZSkge1xyXG4gIGxldCBkYXRhID0gdGhpcy5fX2RhdGFfXztcclxuICBkYXRhW2tleV0gPSBuYXRpdmVDcmVhdGUgJiYgdmFsdWUgPT09IHVuZGVmaW5lZCA/IEhBU0hfVU5ERUZJTkVEIDogdmFsdWU7XHJcbiAgcmV0dXJuIHRoaXM7XHJcbn1cclxuXHJcbkhhc2gucHJvdG90eXBlLmNsZWFyID0gaGFzaENsZWFyO1xyXG5IYXNoLnByb3RvdHlwZVsnZGVsZXRlJ10gPSBoYXNoRGVsZXRlO1xyXG5IYXNoLnByb3RvdHlwZS5nZXQgPSBoYXNoR2V0O1xyXG5IYXNoLnByb3RvdHlwZS5oYXMgPSBoYXNoSGFzO1xyXG5IYXNoLnByb3RvdHlwZS5zZXQgPSBoYXNoU2V0O1xyXG5cclxuZnVuY3Rpb24gTGlzdENhY2hlKGVudHJpZXMpIHtcclxuICBsZXQgaW5kZXggPSAtMSxcclxuICAgIGxlbmd0aCA9IGVudHJpZXMgPyBlbnRyaWVzLmxlbmd0aCA6IDA7XHJcblxyXG4gIHRoaXMuY2xlYXIoKTtcclxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xyXG4gICAgbGV0IGVudHJ5ID0gZW50cmllc1tpbmRleF07XHJcbiAgICB0aGlzLnNldChlbnRyeVswXSwgZW50cnlbMV0pO1xyXG4gIH1cclxufVxyXG5cclxuZnVuY3Rpb24gbGlzdENhY2hlQ2xlYXIoKSB7XHJcbiAgdGhpcy5fX2RhdGFfXyA9IFtdO1xyXG59XHJcblxyXG5mdW5jdGlvbiBsaXN0Q2FjaGVEZWxldGUoa2V5KSB7XHJcbiAgbGV0IGRhdGEgPSB0aGlzLl9fZGF0YV9fLFxyXG4gICAgaW5kZXggPSBhc3NvY0luZGV4T2YoZGF0YSwga2V5KTtcclxuXHJcbiAgaWYgKGluZGV4IDwgMCkge1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuICBsZXQgbGFzdEluZGV4ID0gZGF0YS5sZW5ndGggLSAxO1xyXG4gIGlmIChpbmRleCA9PSBsYXN0SW5kZXgpIHtcclxuICAgIGRhdGEucG9wKCk7XHJcbiAgfSBlbHNlIHtcclxuICAgIHNwbGljZS5jYWxsKGRhdGEsIGluZGV4LCAxKTtcclxuICB9XHJcbiAgcmV0dXJuIHRydWU7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGxpc3RDYWNoZUdldChrZXkpIHtcclxuICBsZXQgZGF0YSA9IHRoaXMuX19kYXRhX18sXHJcbiAgICBpbmRleCA9IGFzc29jSW5kZXhPZihkYXRhLCBrZXkpO1xyXG5cclxuICByZXR1cm4gaW5kZXggPCAwID8gdW5kZWZpbmVkIDogZGF0YVtpbmRleF1bMV07XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGxpc3RDYWNoZUhhcyhrZXkpIHtcclxuICByZXR1cm4gYXNzb2NJbmRleE9mKHRoaXMuX19kYXRhX18sIGtleSkgPiAtMTtcclxufVxyXG5cclxuZnVuY3Rpb24gbGlzdENhY2hlU2V0KGtleSwgdmFsdWUpIHtcclxuICBsZXQgZGF0YSA9IHRoaXMuX19kYXRhX18sXHJcbiAgICBpbmRleCA9IGFzc29jSW5kZXhPZihkYXRhLCBrZXkpO1xyXG5cclxuICBpZiAoaW5kZXggPCAwKSB7XHJcbiAgICBkYXRhLnB1c2goW2tleSwgdmFsdWVdKTtcclxuICB9IGVsc2Uge1xyXG4gICAgZGF0YVtpbmRleF1bMV0gPSB2YWx1ZTtcclxuICB9XHJcbiAgcmV0dXJuIHRoaXM7XHJcbn1cclxuXHJcbkxpc3RDYWNoZS5wcm90b3R5cGUuY2xlYXIgPSBsaXN0Q2FjaGVDbGVhcjtcclxuTGlzdENhY2hlLnByb3RvdHlwZVsnZGVsZXRlJ10gPSBsaXN0Q2FjaGVEZWxldGU7XHJcbkxpc3RDYWNoZS5wcm90b3R5cGUuZ2V0ID0gbGlzdENhY2hlR2V0O1xyXG5MaXN0Q2FjaGUucHJvdG90eXBlLmhhcyA9IGxpc3RDYWNoZUhhcztcclxuTGlzdENhY2hlLnByb3RvdHlwZS5zZXQgPSBsaXN0Q2FjaGVTZXQ7XHJcblxyXG5mdW5jdGlvbiBNYXBDYWNoZShlbnRyaWVzKSB7XHJcbiAgbGV0IGluZGV4ID0gLTEsXHJcbiAgICBsZW5ndGggPSBlbnRyaWVzID8gZW50cmllcy5sZW5ndGggOiAwO1xyXG5cclxuICB0aGlzLmNsZWFyKCk7XHJcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcclxuICAgIGxldCBlbnRyeSA9IGVudHJpZXNbaW5kZXhdO1xyXG4gICAgdGhpcy5zZXQoZW50cnlbMF0sIGVudHJ5WzFdKTtcclxuICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIG1hcENhY2hlQ2xlYXIoKSB7XHJcbiAgdGhpcy5fX2RhdGFfXyA9IHtcclxuICAgIGhhc2g6IG5ldyBIYXNoKCksXHJcbiAgICBtYXA6IG5ldyAoTWFwIHx8IExpc3RDYWNoZSkoKSxcclxuICAgIHN0cmluZzogbmV3IEhhc2goKSxcclxuICB9O1xyXG59XHJcblxyXG5mdW5jdGlvbiBtYXBDYWNoZURlbGV0ZShrZXkpIHtcclxuICByZXR1cm4gZ2V0TWFwRGF0YSh0aGlzLCBrZXkpWydkZWxldGUnXShrZXkpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBtYXBDYWNoZUdldChrZXkpIHtcclxuICByZXR1cm4gZ2V0TWFwRGF0YSh0aGlzLCBrZXkpLmdldChrZXkpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBtYXBDYWNoZUhhcyhrZXkpIHtcclxuICByZXR1cm4gZ2V0TWFwRGF0YSh0aGlzLCBrZXkpLmhhcyhrZXkpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBtYXBDYWNoZVNldChrZXksIHZhbHVlKSB7XHJcbiAgZ2V0TWFwRGF0YSh0aGlzLCBrZXkpLnNldChrZXksIHZhbHVlKTtcclxuICByZXR1cm4gdGhpcztcclxufVxyXG5cclxuTWFwQ2FjaGUucHJvdG90eXBlLmNsZWFyID0gbWFwQ2FjaGVDbGVhcjtcclxuTWFwQ2FjaGUucHJvdG90eXBlWydkZWxldGUnXSA9IG1hcENhY2hlRGVsZXRlO1xyXG5NYXBDYWNoZS5wcm90b3R5cGUuZ2V0ID0gbWFwQ2FjaGVHZXQ7XHJcbk1hcENhY2hlLnByb3RvdHlwZS5oYXMgPSBtYXBDYWNoZUhhcztcclxuTWFwQ2FjaGUucHJvdG90eXBlLnNldCA9IG1hcENhY2hlU2V0O1xyXG5cclxuZnVuY3Rpb24gU3RhY2soZW50cmllcykge1xyXG4gIHRoaXMuX19kYXRhX18gPSBuZXcgTGlzdENhY2hlKGVudHJpZXMpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBzdGFja0NsZWFyKCkge1xyXG4gIHRoaXMuX19kYXRhX18gPSBuZXcgTGlzdENhY2hlKCk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHN0YWNrRGVsZXRlKGtleSkge1xyXG4gIHJldHVybiB0aGlzLl9fZGF0YV9fWydkZWxldGUnXShrZXkpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBzdGFja0dldChrZXkpIHtcclxuICByZXR1cm4gdGhpcy5fX2RhdGFfXy5nZXQoa2V5KTtcclxufVxyXG5cclxuZnVuY3Rpb24gc3RhY2tIYXMoa2V5KSB7XHJcbiAgcmV0dXJuIHRoaXMuX19kYXRhX18uaGFzKGtleSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHN0YWNrU2V0KGtleSwgdmFsdWUpIHtcclxuICBsZXQgY2FjaGUgPSB0aGlzLl9fZGF0YV9fO1xyXG4gIGlmIChjYWNoZSBpbnN0YW5jZW9mIExpc3RDYWNoZSkge1xyXG4gICAgbGV0IHBhaXJzID0gY2FjaGUuX19kYXRhX187XHJcbiAgICBpZiAoIU1hcCB8fCBwYWlycy5sZW5ndGggPCBMQVJHRV9BUlJBWV9TSVpFIC0gMSkge1xyXG4gICAgICBwYWlycy5wdXNoKFtrZXksIHZhbHVlXSk7XHJcbiAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG4gICAgY2FjaGUgPSB0aGlzLl9fZGF0YV9fID0gbmV3IE1hcENhY2hlKHBhaXJzKTtcclxuICB9XHJcbiAgY2FjaGUuc2V0KGtleSwgdmFsdWUpO1xyXG4gIHJldHVybiB0aGlzO1xyXG59XHJcblxyXG5TdGFjay5wcm90b3R5cGUuY2xlYXIgPSBzdGFja0NsZWFyO1xyXG5TdGFjay5wcm90b3R5cGVbJ2RlbGV0ZSddID0gc3RhY2tEZWxldGU7XHJcblN0YWNrLnByb3RvdHlwZS5nZXQgPSBzdGFja0dldDtcclxuU3RhY2sucHJvdG90eXBlLmhhcyA9IHN0YWNrSGFzO1xyXG5TdGFjay5wcm90b3R5cGUuc2V0ID0gc3RhY2tTZXQ7XHJcblxyXG5mdW5jdGlvbiBhcnJheUxpa2VLZXlzKHZhbHVlLCBpbmhlcml0ZWQpIHtcclxuICBsZXQgcmVzdWx0ID0gaXNBcnJheSh2YWx1ZSkgfHwgaXNBcmd1bWVudHModmFsdWUpID8gYmFzZVRpbWVzKHZhbHVlLmxlbmd0aCwgU3RyaW5nKSA6IFtdO1xyXG5cclxuICBsZXQgbGVuZ3RoID0gcmVzdWx0Lmxlbmd0aCxcclxuICAgIHNraXBJbmRleGVzID0gISFsZW5ndGg7XHJcblxyXG4gIGZvciAobGV0IGtleSBpbiB2YWx1ZSkge1xyXG4gICAgaWYgKFxyXG4gICAgICAoaW5oZXJpdGVkIHx8IGhhc093blByb3BlcnR5LmNhbGwodmFsdWUsIGtleSkpICYmXHJcbiAgICAgICEoc2tpcEluZGV4ZXMgJiYgKGtleSA9PSAnbGVuZ3RoJyB8fCBpc0luZGV4KGtleSwgbGVuZ3RoKSkpXHJcbiAgICApIHtcclxuICAgICAgcmVzdWx0LnB1c2goa2V5KTtcclxuICAgIH1cclxuICB9XHJcbiAgcmV0dXJuIHJlc3VsdDtcclxufVxyXG5cclxuZnVuY3Rpb24gYXNzaWduVmFsdWUob2JqZWN0LCBrZXksIHZhbHVlKSB7XHJcbiAgbGV0IG9ialZhbHVlID0gb2JqZWN0W2tleV07XHJcbiAgaWYgKFxyXG4gICAgIShoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwga2V5KSAmJiBlcShvYmpWYWx1ZSwgdmFsdWUpKSB8fFxyXG4gICAgKHZhbHVlID09PSB1bmRlZmluZWQgJiYgIShrZXkgaW4gb2JqZWN0KSlcclxuICApIHtcclxuICAgIG9iamVjdFtrZXldID0gdmFsdWU7XHJcbiAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBhc3NvY0luZGV4T2YoYXJyYXksIGtleSkge1xyXG4gIGxldCBsZW5ndGggPSBhcnJheS5sZW5ndGg7XHJcbiAgd2hpbGUgKGxlbmd0aC0tKSB7XHJcbiAgICBpZiAoZXEoYXJyYXlbbGVuZ3RoXVswXSwga2V5KSkge1xyXG4gICAgICByZXR1cm4gbGVuZ3RoO1xyXG4gICAgfVxyXG4gIH1cclxuICByZXR1cm4gLTE7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGJhc2VBc3NpZ24ob2JqZWN0LCBzb3VyY2UpIHtcclxuICByZXR1cm4gb2JqZWN0ICYmIGNvcHlPYmplY3Qoc291cmNlLCBrZXlzKHNvdXJjZSksIG9iamVjdCk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGJhc2VDbG9uZSh2YWx1ZSwgaXNEZWVwLCBpc0Z1bGwsIGN1c3RvbWl6ZXIsIGtleSwgb2JqZWN0LCBzdGFjaykge1xyXG4gIGxldCByZXN1bHQ7XHJcbiAgaWYgKGN1c3RvbWl6ZXIpIHtcclxuICAgIHJlc3VsdCA9IG9iamVjdCA/IGN1c3RvbWl6ZXIodmFsdWUsIGtleSwgb2JqZWN0LCBzdGFjaykgOiBjdXN0b21pemVyKHZhbHVlKTtcclxuICB9XHJcbiAgaWYgKHJlc3VsdCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH1cclxuICBpZiAoIWlzT2JqZWN0KHZhbHVlKSkge1xyXG4gICAgcmV0dXJuIHZhbHVlO1xyXG4gIH1cclxuICBsZXQgaXNBcnIgPSBpc0FycmF5KHZhbHVlKTtcclxuICBpZiAoaXNBcnIpIHtcclxuICAgIHJlc3VsdCA9IGluaXRDbG9uZUFycmF5KHZhbHVlKTtcclxuICAgIGlmICghaXNEZWVwKSB7XHJcbiAgICAgIHJldHVybiBjb3B5QXJyYXkodmFsdWUsIHJlc3VsdCk7XHJcbiAgICB9XHJcbiAgfSBlbHNlIHtcclxuICAgIGxldCB0YWcgPSBnZXRUYWcodmFsdWUpLFxyXG4gICAgICBpc0Z1bmMgPSB0YWcgPT0gZnVuY1RhZyB8fCB0YWcgPT0gZ2VuVGFnO1xyXG5cclxuICAgIGlmIChpc0J1ZmZlcih2YWx1ZSkpIHtcclxuICAgICAgcmV0dXJuIGNsb25lQnVmZmVyKHZhbHVlLCBpc0RlZXApO1xyXG4gICAgfVxyXG4gICAgaWYgKHRhZyA9PSBvYmplY3RUYWcgfHwgdGFnID09IGFyZ3NUYWcgfHwgKGlzRnVuYyAmJiAhb2JqZWN0KSkge1xyXG4gICAgICBpZiAoaXNIb3N0T2JqZWN0KHZhbHVlKSkge1xyXG4gICAgICAgIHJldHVybiBvYmplY3QgPyB2YWx1ZSA6IHt9O1xyXG4gICAgICB9XHJcbiAgICAgIHJlc3VsdCA9IGluaXRDbG9uZU9iamVjdChpc0Z1bmMgPyB7fSA6IHZhbHVlKTtcclxuICAgICAgaWYgKCFpc0RlZXApIHtcclxuICAgICAgICByZXR1cm4gY29weVN5bWJvbHModmFsdWUsIGJhc2VBc3NpZ24ocmVzdWx0LCB2YWx1ZSkpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAoIWNsb25lYWJsZVRhZ3NbdGFnXSkge1xyXG4gICAgICAgIHJldHVybiBvYmplY3QgPyB2YWx1ZSA6IHt9O1xyXG4gICAgICB9XHJcbiAgICAgIHJlc3VsdCA9IGluaXRDbG9uZUJ5VGFnKHZhbHVlLCB0YWcsIGJhc2VDbG9uZSwgaXNEZWVwKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHN0YWNrIHx8IChzdGFjayA9IG5ldyBTdGFjaygpKTtcclxuICBsZXQgc3RhY2tlZCA9IHN0YWNrLmdldCh2YWx1ZSk7XHJcbiAgaWYgKHN0YWNrZWQpIHtcclxuICAgIHJldHVybiBzdGFja2VkO1xyXG4gIH1cclxuICBzdGFjay5zZXQodmFsdWUsIHJlc3VsdCk7XHJcblxyXG4gIGlmICghaXNBcnIpIHtcclxuICAgIHZhciBjbG9uZURlZXBQcm9wcyA9IGlzRnVsbCA/IGdldEFsbEtleXModmFsdWUpIDoga2V5cyh2YWx1ZSk7XHJcbiAgfVxyXG4gIGFycmF5RWFjaChjbG9uZURlZXBQcm9wcyB8fCB2YWx1ZSwgZnVuY3Rpb24gKHN1YlZhbHVlLCBrZXkpIHtcclxuICAgIGlmIChjbG9uZURlZXBQcm9wcykge1xyXG4gICAgICBrZXkgPSBzdWJWYWx1ZTtcclxuICAgICAgc3ViVmFsdWUgPSB2YWx1ZVtrZXldO1xyXG4gICAgfVxyXG5cclxuICAgIGFzc2lnblZhbHVlKHJlc3VsdCwga2V5LCBiYXNlQ2xvbmUoc3ViVmFsdWUsIGlzRGVlcCwgaXNGdWxsLCBjdXN0b21pemVyLCBrZXksIHZhbHVlLCBzdGFjaykpO1xyXG4gIH0pO1xyXG4gIHJldHVybiByZXN1bHQ7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGJhc2VDcmVhdGUocHJvdG8pIHtcclxuICByZXR1cm4gaXNPYmplY3QocHJvdG8pID8gb2JqZWN0Q3JlYXRlKHByb3RvKSA6IHt9O1xyXG59XHJcblxyXG5mdW5jdGlvbiBiYXNlR2V0QWxsS2V5cyhvYmplY3QsIGtleXNGdW5jLCBzeW1ib2xzRnVuYykge1xyXG4gIGxldCByZXN1bHQgPSBrZXlzRnVuYyhvYmplY3QpO1xyXG4gIHJldHVybiBpc0FycmF5KG9iamVjdCkgPyByZXN1bHQgOiBhcnJheVB1c2gocmVzdWx0LCBzeW1ib2xzRnVuYyhvYmplY3QpKTtcclxufVxyXG5cclxuZnVuY3Rpb24gYmFzZUdldFRhZyh2YWx1ZSkge1xyXG4gIHJldHVybiBvYmplY3RUb1N0cmluZy5jYWxsKHZhbHVlKTtcclxufVxyXG5cclxuZnVuY3Rpb24gYmFzZUlzTmF0aXZlKHZhbHVlKSB7XHJcbiAgaWYgKCFpc09iamVjdCh2YWx1ZSkgfHwgaXNNYXNrZWQodmFsdWUpKSB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG4gIGxldCBwYXR0ZXJuID0gaXNGdW5jdGlvbih2YWx1ZSkgfHwgaXNIb3N0T2JqZWN0KHZhbHVlKSA/IHJlSXNOYXRpdmUgOiByZUlzSG9zdEN0b3I7XHJcbiAgcmV0dXJuIHBhdHRlcm4udGVzdCh0b1NvdXJjZSh2YWx1ZSkpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBiYXNlS2V5cyhvYmplY3QpIHtcclxuICBpZiAoIWlzUHJvdG90eXBlKG9iamVjdCkpIHtcclxuICAgIHJldHVybiBuYXRpdmVLZXlzKG9iamVjdCk7XHJcbiAgfVxyXG4gIGxldCByZXN1bHQgPSBbXTtcclxuICBmb3IgKGxldCBrZXkgaW4gT2JqZWN0KG9iamVjdCkpIHtcclxuICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwga2V5KSAmJiBrZXkgIT0gJ2NvbnN0cnVjdG9yJykge1xyXG4gICAgICByZXN1bHQucHVzaChrZXkpO1xyXG4gICAgfVxyXG4gIH1cclxuICByZXR1cm4gcmVzdWx0O1xyXG59XHJcblxyXG5mdW5jdGlvbiBjbG9uZUJ1ZmZlcihidWZmZXIsIGlzRGVlcCkge1xyXG4gIGlmIChpc0RlZXApIHtcclxuICAgIHJldHVybiBidWZmZXIuc2xpY2UoKTtcclxuICB9XHJcbiAgbGV0IHJlc3VsdCA9IG5ldyBidWZmZXIuY29uc3RydWN0b3IoYnVmZmVyLmxlbmd0aCk7XHJcbiAgYnVmZmVyLmNvcHkocmVzdWx0KTtcclxuICByZXR1cm4gcmVzdWx0O1xyXG59XHJcblxyXG5mdW5jdGlvbiBjbG9uZUFycmF5QnVmZmVyKGFycmF5QnVmZmVyKSB7XHJcbiAgbGV0IHJlc3VsdCA9IG5ldyBhcnJheUJ1ZmZlci5jb25zdHJ1Y3RvcihhcnJheUJ1ZmZlci5ieXRlTGVuZ3RoKTtcclxuICBuZXcgVWludDhBcnJheShyZXN1bHQpLnNldChuZXcgVWludDhBcnJheShhcnJheUJ1ZmZlcikpO1xyXG4gIHJldHVybiByZXN1bHQ7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNsb25lRGF0YVZpZXcoZGF0YVZpZXcsIGlzRGVlcCkge1xyXG4gIGxldCBidWZmZXIgPSBpc0RlZXAgPyBjbG9uZUFycmF5QnVmZmVyKGRhdGFWaWV3LmJ1ZmZlcikgOiBkYXRhVmlldy5idWZmZXI7XHJcbiAgcmV0dXJuIG5ldyBkYXRhVmlldy5jb25zdHJ1Y3RvcihidWZmZXIsIGRhdGFWaWV3LmJ5dGVPZmZzZXQsIGRhdGFWaWV3LmJ5dGVMZW5ndGgpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBjbG9uZU1hcChtYXAsIGlzRGVlcCwgY2xvbmVGdW5jKSB7XHJcbiAgbGV0IGFycmF5ID0gaXNEZWVwID8gY2xvbmVGdW5jKG1hcFRvQXJyYXkobWFwKSwgdHJ1ZSkgOiBtYXBUb0FycmF5KG1hcCk7XHJcbiAgcmV0dXJuIGFycmF5UmVkdWNlKGFycmF5LCBhZGRNYXBFbnRyeSwgbmV3IG1hcC5jb25zdHJ1Y3RvcigpKTtcclxufVxyXG5cclxuZnVuY3Rpb24gY2xvbmVSZWdFeHAocmVnZXhwKSB7XHJcbiAgbGV0IHJlc3VsdCA9IG5ldyByZWdleHAuY29uc3RydWN0b3IocmVnZXhwLnNvdXJjZSwgcmVGbGFncy5leGVjKHJlZ2V4cCkpO1xyXG4gIHJlc3VsdC5sYXN0SW5kZXggPSByZWdleHAubGFzdEluZGV4O1xyXG4gIHJldHVybiByZXN1bHQ7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNsb25lU2V0KHNldCwgaXNEZWVwLCBjbG9uZUZ1bmMpIHtcclxuICBsZXQgYXJyYXkgPSBpc0RlZXAgPyBjbG9uZUZ1bmMoc2V0VG9BcnJheShzZXQpLCB0cnVlKSA6IHNldFRvQXJyYXkoc2V0KTtcclxuICByZXR1cm4gYXJyYXlSZWR1Y2UoYXJyYXksIGFkZFNldEVudHJ5LCBuZXcgc2V0LmNvbnN0cnVjdG9yKCkpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBjbG9uZVN5bWJvbChzeW1ib2wpIHtcclxuICByZXR1cm4gc3ltYm9sVmFsdWVPZiA/IE9iamVjdChzeW1ib2xWYWx1ZU9mLmNhbGwoc3ltYm9sKSkgOiB7fTtcclxufVxyXG5cclxuZnVuY3Rpb24gY2xvbmVUeXBlZEFycmF5KHR5cGVkQXJyYXksIGlzRGVlcCkge1xyXG4gIGxldCBidWZmZXIgPSBpc0RlZXAgPyBjbG9uZUFycmF5QnVmZmVyKHR5cGVkQXJyYXkuYnVmZmVyKSA6IHR5cGVkQXJyYXkuYnVmZmVyO1xyXG4gIHJldHVybiBuZXcgdHlwZWRBcnJheS5jb25zdHJ1Y3RvcihidWZmZXIsIHR5cGVkQXJyYXkuYnl0ZU9mZnNldCwgdHlwZWRBcnJheS5sZW5ndGgpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBjb3B5QXJyYXkoc291cmNlLCBhcnJheSkge1xyXG4gIGxldCBpbmRleCA9IC0xLFxyXG4gICAgbGVuZ3RoID0gc291cmNlLmxlbmd0aDtcclxuXHJcbiAgYXJyYXkgfHwgKGFycmF5ID0gQXJyYXkobGVuZ3RoKSk7XHJcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcclxuICAgIGFycmF5W2luZGV4XSA9IHNvdXJjZVtpbmRleF07XHJcbiAgfVxyXG4gIHJldHVybiBhcnJheTtcclxufVxyXG5cclxuZnVuY3Rpb24gY29weU9iamVjdChzb3VyY2UsIGNsb25lRGVlcFByb3BzLCBvYmplY3QsIGN1c3RvbWl6ZXIpIHtcclxuICBvYmplY3QgfHwgKG9iamVjdCA9IHt9KTtcclxuXHJcbiAgbGV0IGluZGV4ID0gLTEsXHJcbiAgICBsZW5ndGggPSBjbG9uZURlZXBQcm9wcy5sZW5ndGg7XHJcblxyXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XHJcbiAgICBsZXQga2V5ID0gY2xvbmVEZWVwUHJvcHNbaW5kZXhdO1xyXG5cclxuICAgIGxldCBuZXdWYWx1ZSA9IGN1c3RvbWl6ZXJcclxuICAgICAgPyBjdXN0b21pemVyKG9iamVjdFtrZXldLCBzb3VyY2Vba2V5XSwga2V5LCBvYmplY3QsIHNvdXJjZSlcclxuICAgICAgOiB1bmRlZmluZWQ7XHJcblxyXG4gICAgYXNzaWduVmFsdWUob2JqZWN0LCBrZXksIG5ld1ZhbHVlID09PSB1bmRlZmluZWQgPyBzb3VyY2Vba2V5XSA6IG5ld1ZhbHVlKTtcclxuICB9XHJcbiAgcmV0dXJuIG9iamVjdDtcclxufVxyXG5cclxuZnVuY3Rpb24gY29weVN5bWJvbHMoc291cmNlLCBvYmplY3QpIHtcclxuICByZXR1cm4gY29weU9iamVjdChzb3VyY2UsIGdldFN5bWJvbHMoc291cmNlKSwgb2JqZWN0KTtcclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0QWxsS2V5cyhvYmplY3QpIHtcclxuICByZXR1cm4gYmFzZUdldEFsbEtleXMob2JqZWN0LCBrZXlzLCBnZXRTeW1ib2xzKTtcclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0TWFwRGF0YShtYXAsIGtleSkge1xyXG4gIGxldCBkYXRhID0gbWFwLl9fZGF0YV9fO1xyXG4gIHJldHVybiBpc0tleWFibGUoa2V5KSA/IGRhdGFbdHlwZW9mIGtleSA9PSAnc3RyaW5nJyA/ICdzdHJpbmcnIDogJ2hhc2gnXSA6IGRhdGEubWFwO1xyXG59XHJcblxyXG5mdW5jdGlvbiBnZXROYXRpdmUob2JqZWN0LCBrZXkpIHtcclxuICBsZXQgdmFsdWUgPSBnZXRWYWx1ZShvYmplY3QsIGtleSk7XHJcbiAgcmV0dXJuIGJhc2VJc05hdGl2ZSh2YWx1ZSkgPyB2YWx1ZSA6IHVuZGVmaW5lZDtcclxufVxyXG5cclxubGV0IGdldFN5bWJvbHMgPSBuYXRpdmVHZXRTeW1ib2xzID8gb3ZlckFyZyhuYXRpdmVHZXRTeW1ib2xzLCBPYmplY3QpIDogc3R1YkFycmF5O1xyXG5sZXQgZ2V0VGFnID0gYmFzZUdldFRhZztcclxuXHJcbmlmIChcclxuICAoRGF0YVZpZXcgJiYgZ2V0VGFnKG5ldyBEYXRhVmlldyhuZXcgQXJyYXlCdWZmZXIoMSkpKSAhPSBkYXRhVmlld1RhZykgfHxcclxuICAoTWFwICYmIGdldFRhZyhuZXcgTWFwKCkpICE9IG1hcFRhZykgfHxcclxuICAoUHJvbWlzZSAmJiBnZXRUYWcoUHJvbWlzZS5yZXNvbHZlKCkpICE9IHByb21pc2VUYWcpIHx8XHJcbiAgKFNldCAmJiBnZXRUYWcobmV3IFNldCgpKSAhPSBzZXRUYWcpIHx8XHJcbiAgKFdlYWtNYXAgJiYgZ2V0VGFnKG5ldyBXZWFrTWFwKCkpICE9IHdlYWtNYXBUYWcpXHJcbikge1xyXG4gIGdldFRhZyA9IGZ1bmN0aW9uICh2YWx1ZSkge1xyXG4gICAgbGV0IHJlc3VsdCA9IG9iamVjdFRvU3RyaW5nLmNhbGwodmFsdWUpLFxyXG4gICAgICBDdG9yID0gcmVzdWx0ID09IG9iamVjdFRhZyA/IHZhbHVlLmNvbnN0cnVjdG9yIDogdW5kZWZpbmVkLFxyXG4gICAgICBjdG9yU3RyaW5nID0gQ3RvciA/IHRvU291cmNlKEN0b3IpIDogdW5kZWZpbmVkO1xyXG5cclxuICAgIGlmIChjdG9yU3RyaW5nKSB7XHJcbiAgICAgIHN3aXRjaCAoY3RvclN0cmluZykge1xyXG4gICAgICAgIGNhc2UgZGF0YVZpZXdDdG9yU3RyaW5nOlxyXG4gICAgICAgICAgcmV0dXJuIGRhdGFWaWV3VGFnO1xyXG4gICAgICAgIGNhc2UgbWFwQ3RvclN0cmluZzpcclxuICAgICAgICAgIHJldHVybiBtYXBUYWc7XHJcbiAgICAgICAgY2FzZSBwcm9taXNlQ3RvclN0cmluZzpcclxuICAgICAgICAgIHJldHVybiBwcm9taXNlVGFnO1xyXG4gICAgICAgIGNhc2Ugc2V0Q3RvclN0cmluZzpcclxuICAgICAgICAgIHJldHVybiBzZXRUYWc7XHJcbiAgICAgICAgY2FzZSB3ZWFrTWFwQ3RvclN0cmluZzpcclxuICAgICAgICAgIHJldHVybiB3ZWFrTWFwVGFnO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH07XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGluaXRDbG9uZUFycmF5KGFycmF5KSB7XHJcbiAgbGV0IGxlbmd0aCA9IGFycmF5Lmxlbmd0aCxcclxuICAgIHJlc3VsdCA9IGFycmF5LmNvbnN0cnVjdG9yKGxlbmd0aCk7XHJcblxyXG4gIGlmIChsZW5ndGggJiYgdHlwZW9mIGFycmF5WzBdID09ICdzdHJpbmcnICYmIGhhc093blByb3BlcnR5LmNhbGwoYXJyYXksICdpbmRleCcpKSB7XHJcbiAgICByZXN1bHQuaW5kZXggPSBhcnJheS5pbmRleDtcclxuICAgIHJlc3VsdC5pbnB1dCA9IGFycmF5LmlucHV0O1xyXG4gIH1cclxuICByZXR1cm4gcmVzdWx0O1xyXG59XHJcblxyXG5mdW5jdGlvbiBpbml0Q2xvbmVPYmplY3Qob2JqZWN0KSB7XHJcbiAgcmV0dXJuIHR5cGVvZiBvYmplY3QuY29uc3RydWN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiAhaXNQcm90b3R5cGUob2JqZWN0KVxyXG4gICAgPyBiYXNlQ3JlYXRlKGdldFByb3RvdHlwZShvYmplY3QpKVxyXG4gICAgOiB7fTtcclxufVxyXG5cclxuZnVuY3Rpb24gaW5pdENsb25lQnlUYWcob2JqZWN0LCB0YWcsIGNsb25lRnVuYywgaXNEZWVwKSB7XHJcbiAgbGV0IEN0b3IgPSBvYmplY3QuY29uc3RydWN0b3I7XHJcbiAgc3dpdGNoICh0YWcpIHtcclxuICAgIGNhc2UgYXJyYXlCdWZmZXJUYWc6XHJcbiAgICAgIHJldHVybiBjbG9uZUFycmF5QnVmZmVyKG9iamVjdCk7XHJcblxyXG4gICAgY2FzZSBib29sVGFnOlxyXG4gICAgY2FzZSBkYXRlVGFnOlxyXG4gICAgICByZXR1cm4gbmV3IEN0b3IoK29iamVjdCk7XHJcblxyXG4gICAgY2FzZSBkYXRhVmlld1RhZzpcclxuICAgICAgcmV0dXJuIGNsb25lRGF0YVZpZXcob2JqZWN0LCBpc0RlZXApO1xyXG5cclxuICAgIGNhc2UgZmxvYXQzMlRhZzpcclxuICAgIGNhc2UgZmxvYXQ2NFRhZzpcclxuICAgIGNhc2UgaW50OFRhZzpcclxuICAgIGNhc2UgaW50MTZUYWc6XHJcbiAgICBjYXNlIGludDMyVGFnOlxyXG4gICAgY2FzZSB1aW50OFRhZzpcclxuICAgIGNhc2UgdWludDhDbGFtcGVkVGFnOlxyXG4gICAgY2FzZSB1aW50MTZUYWc6XHJcbiAgICBjYXNlIHVpbnQzMlRhZzpcclxuICAgICAgcmV0dXJuIGNsb25lVHlwZWRBcnJheShvYmplY3QsIGlzRGVlcCk7XHJcblxyXG4gICAgY2FzZSBtYXBUYWc6XHJcbiAgICAgIHJldHVybiBjbG9uZU1hcChvYmplY3QsIGlzRGVlcCwgY2xvbmVGdW5jKTtcclxuXHJcbiAgICBjYXNlIG51bWJlclRhZzpcclxuICAgIGNhc2Ugc3RyaW5nVGFnOlxyXG4gICAgICByZXR1cm4gbmV3IEN0b3Iob2JqZWN0KTtcclxuXHJcbiAgICBjYXNlIHJlZ2V4cFRhZzpcclxuICAgICAgcmV0dXJuIGNsb25lUmVnRXhwKG9iamVjdCk7XHJcblxyXG4gICAgY2FzZSBzZXRUYWc6XHJcbiAgICAgIHJldHVybiBjbG9uZVNldChvYmplY3QsIGlzRGVlcCwgY2xvbmVGdW5jKTtcclxuXHJcbiAgICBjYXNlIHN5bWJvbFRhZzpcclxuICAgICAgcmV0dXJuIGNsb25lU3ltYm9sKG9iamVjdCk7XHJcbiAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBpc0luZGV4KHZhbHVlLCBsZW5ndGgpIHtcclxuICBsZW5ndGggPSBsZW5ndGggPT0gbnVsbCA/IE1BWF9TQUZFX0lOVEVHRVIgOiBsZW5ndGg7XHJcbiAgcmV0dXJuIChcclxuICAgICEhbGVuZ3RoICYmXHJcbiAgICAodHlwZW9mIHZhbHVlID09ICdudW1iZXInIHx8IHJlSXNVaW50LnRlc3QodmFsdWUpKSAmJlxyXG4gICAgdmFsdWUgPiAtMSAmJlxyXG4gICAgdmFsdWUgJSAxID09IDAgJiZcclxuICAgIHZhbHVlIDwgbGVuZ3RoXHJcbiAgKTtcclxufVxyXG5cclxuZnVuY3Rpb24gaXNLZXlhYmxlKHZhbHVlKSB7XHJcbiAgbGV0IHR5cGUgPSB0eXBlb2YgdmFsdWU7XHJcbiAgcmV0dXJuIHR5cGUgPT0gJ3N0cmluZycgfHwgdHlwZSA9PSAnbnVtYmVyJyB8fCB0eXBlID09ICdzeW1ib2wnIHx8IHR5cGUgPT0gJ2Jvb2xlYW4nXHJcbiAgICA/IHZhbHVlICE9PSAnX19wcm90b19fJ1xyXG4gICAgOiB2YWx1ZSA9PT0gbnVsbDtcclxufVxyXG5cclxuZnVuY3Rpb24gaXNNYXNrZWQoZnVuYykge1xyXG4gIHJldHVybiAhIW1hc2tTcmNLZXkgJiYgbWFza1NyY0tleSBpbiBmdW5jO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpc1Byb3RvdHlwZSh2YWx1ZSkge1xyXG4gIGxldCBDdG9yID0gdmFsdWUgJiYgdmFsdWUuY29uc3RydWN0b3IsXHJcbiAgICBwcm90byA9ICh0eXBlb2YgQ3RvciA9PSAnZnVuY3Rpb24nICYmIEN0b3IucHJvdG90eXBlKSB8fCBvYmplY3RQcm90bztcclxuXHJcbiAgcmV0dXJuIHZhbHVlID09PSBwcm90bztcclxufVxyXG5cclxuZnVuY3Rpb24gdG9Tb3VyY2UoZnVuYykge1xyXG4gIGlmIChmdW5jICE9IG51bGwpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIHJldHVybiBmdW5jVG9TdHJpbmcuY2FsbChmdW5jKTtcclxuICAgIH0gY2F0Y2ggKGUpIHt9XHJcbiAgICB0cnkge1xyXG4gICAgICByZXR1cm4gZnVuYyArICcnO1xyXG4gICAgfSBjYXRjaCAoZSkge31cclxuICB9XHJcbiAgcmV0dXJuICcnO1xyXG59XHJcblxyXG5mdW5jdGlvbiB6eGhpZGRlbkN1c3RvbUNsb25lRGVlcEJ5SmVyZW15QXNoa2VuYXModmFsdWUpIHtcclxuICByZXR1cm4gYmFzZUNsb25lKHZhbHVlLCB0cnVlLCB0cnVlKTtcclxufVxyXG5cclxuZnVuY3Rpb24gZXEodmFsdWUsIG90aGVyKSB7XHJcbiAgcmV0dXJuIHZhbHVlID09PSBvdGhlciB8fCAodmFsdWUgIT09IHZhbHVlICYmIG90aGVyICE9PSBvdGhlcik7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzQXJndW1lbnRzKHZhbHVlKSB7XHJcbiAgcmV0dXJuIChcclxuICAgIGlzQXJyYXlMaWtlT2JqZWN0KHZhbHVlKSAmJlxyXG4gICAgaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwgJ2NhbGxlZScpICYmXHJcbiAgICAoIXByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwodmFsdWUsICdjYWxsZWUnKSB8fCBvYmplY3RUb1N0cmluZy5jYWxsKHZhbHVlKSA9PSBhcmdzVGFnKVxyXG4gICk7XHJcbn1cclxuXHJcbmxldCBpc0FycmF5ID0gQXJyYXkuaXNBcnJheTtcclxuXHJcbmZ1bmN0aW9uIGlzQXJyYXlMaWtlKHZhbHVlKSB7XHJcbiAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgaXNMZW5ndGgodmFsdWUubGVuZ3RoKSAmJiAhaXNGdW5jdGlvbih2YWx1ZSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzQXJyYXlMaWtlT2JqZWN0KHZhbHVlKSB7XHJcbiAgcmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgaXNBcnJheUxpa2UodmFsdWUpO1xyXG59XHJcblxyXG5sZXQgaXNCdWZmZXIgPSBuYXRpdmVJc0J1ZmZlciB8fCBzdHViRmFsc2U7XHJcblxyXG5mdW5jdGlvbiBpc0Z1bmN0aW9uKHZhbHVlKSB7XHJcbiAgbGV0IHRhZyA9IGlzT2JqZWN0KHZhbHVlKSA/IG9iamVjdFRvU3RyaW5nLmNhbGwodmFsdWUpIDogJyc7XHJcbiAgcmV0dXJuIHRhZyA9PSBmdW5jVGFnIHx8IHRhZyA9PSBnZW5UYWc7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzTGVuZ3RoKHZhbHVlKSB7XHJcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PSAnbnVtYmVyJyAmJiB2YWx1ZSA+IC0xICYmIHZhbHVlICUgMSA9PSAwICYmIHZhbHVlIDw9IE1BWF9TQUZFX0lOVEVHRVI7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzT2JqZWN0KHZhbHVlKSB7XHJcbiAgbGV0IHR5cGUgPSB0eXBlb2YgdmFsdWU7XHJcbiAgcmV0dXJuICEhdmFsdWUgJiYgKHR5cGUgPT0gJ29iamVjdCcgfHwgdHlwZSA9PSAnZnVuY3Rpb24nKTtcclxufVxyXG5cclxuZnVuY3Rpb24gaXNPYmplY3RMaWtlKHZhbHVlKSB7XHJcbiAgcmV0dXJuICEhdmFsdWUgJiYgdHlwZW9mIHZhbHVlID09ICdvYmplY3QnO1xyXG59XHJcblxyXG5mdW5jdGlvbiBrZXlzKG9iamVjdCkge1xyXG4gIHJldHVybiBpc0FycmF5TGlrZShvYmplY3QpID8gYXJyYXlMaWtlS2V5cyhvYmplY3QpIDogYmFzZUtleXMob2JqZWN0KTtcclxufVxyXG5cclxuZnVuY3Rpb24gc3R1YkFycmF5KCkge1xyXG4gIHJldHVybiBbXTtcclxufVxyXG5cclxuZnVuY3Rpb24gc3R1YkZhbHNlKCkge1xyXG4gIHJldHVybiBmYWxzZTtcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgenhoaWRkZW5DdXN0b21DbG9uZURlZXBCeUplcmVteUFzaGtlbmFzO1xyXG4iXX0=