@colijnit/configurator 12.0.11 → 12.0.13

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.
@@ -241,171 +241,198 @@ export class VariationHelper {
241
241
  }
242
242
  }
243
243
  _setMeshMaterialFromVariation(name, variation, usePbr = false) {
244
- if (variation.material.texture) {
245
- variation.material.texture.needsUpdate = true;
246
- variation.material.texture.mapping = THREE.EquirectangularReflectionMapping;
244
+ const material = variation.material;
245
+ if (material.texture) {
246
+ material.texture.needsUpdate = true;
247
+ material.texture.mapping = THREE.EquirectangularReflectionMapping;
247
248
  }
248
249
  if (!usePbr) {
249
250
  const newMaterial = new THREE.MeshPhongMaterial({
250
251
  name: name,
251
- shininess: variation.material.shininess,
252
- specular: variation.material.specular,
253
- map: variation.material.texture,
254
- normalMap: variation.material.normal
252
+ shininess: material.shininess,
253
+ specular: material.specular,
254
+ map: material.texture,
255
+ normalMap: material.normal
255
256
  });
256
257
  newMaterial.color.setRGB(0.8, 0.8, 0.8);
257
258
  newMaterial.needsUpdate = true;
258
259
  return newMaterial;
259
260
  }
260
- if (variation.material.sheenColor || variation.material.reflectivity) {
261
+ if (material.sheen || material.sheenColor || material.reflectivity) { // TODO: Proper check for all unique physical material properties
261
262
  const params = {
262
263
  // side: material.side ? material.side : FrontSide,
263
264
  name: name,
264
- roughness: variation.material.roughnessValue ? variation.material.roughnessValue : 1,
265
- metalness: variation.material.metalnessValue ? variation.material.metalnessValue : 0,
266
- envMapIntensity: variation.material.envMapIntensity ? variation.material.envMapIntensity : 0.01,
267
- clearcoatMap: variation.material.clearcoatMap ? variation.material.clearcoatMap : null,
268
- clearcoatRoughnessMap: variation.material.clearcoatRoughnessMap ? variation.material.clearcoatRoughnessMap : null,
265
+ roughness: material.roughnessValue ? material.roughnessValue : 1,
266
+ metalness: material.metalnessValue ? material.metalnessValue : 0,
267
+ envMapIntensity: material.envMapIntensity ? material.envMapIntensity : 0.01,
268
+ clearcoatMap: material.clearcoatMap ? material.clearcoatMap : null,
269
+ clearcoatRoughnessMap: material.clearcoatRoughnessMap ? material.clearcoatRoughnessMap : null,
269
270
  // wireframe: true,
270
271
  // opacity: 0.3,
271
272
  // transparent: true,
272
273
  };
273
- if (variation.material.displacementValue) {
274
- params.displacementScale = variation.material.displacementValue;
274
+ if (material.displacementValue) {
275
+ params.displacementScale = material.displacementValue;
275
276
  }
276
- if (variation.material.sheenColor) {
277
- params.sheen = variation.material.sheenColor;
277
+ if (material.opacity) {
278
+ params.opacity = material.opacity;
278
279
  }
279
- if (variation.material.opacity) {
280
- params.opacity = variation.material.opacity;
280
+ if (material.transparency) {
281
+ params.transmission = material.transparency;
281
282
  }
282
- if (variation.material.transparent) {
283
- params.transparent = variation.material.transparent;
283
+ if (material.transmission) {
284
+ params.transmission = material.transmission;
284
285
  }
285
- if (variation.material.emissiveValue) {
286
- params.emissive = variation.material.emissiveValue;
286
+ if (material.transparent) {
287
+ params.transparent = material.transparent;
287
288
  }
288
- if (variation.material.emissiveIntensityValue) {
289
- params.emissiveIntensity = variation.material.emissiveIntensityValue;
289
+ if (material.emissiveValue) {
290
+ params.emissive = material.emissiveValue;
290
291
  }
291
- if (variation.material.texture) {
292
- params.map = variation.material.texture;
292
+ if (material.emissiveIntensityValue) {
293
+ params.emissiveIntensity = material.emissiveIntensityValue;
294
+ }
295
+ if (material.texture) {
296
+ params.map = material.texture;
293
297
  params.map.needsUpdate = true;
294
298
  }
295
- if (variation.material.ao) {
296
- params.aoMap = variation.material.ao;
299
+ if (material.ao) {
300
+ params.aoMap = material.ao;
297
301
  params.aoMap.needsUpdate = true;
298
302
  }
299
- if (variation.material.roughness) {
300
- params.roughnessMap = variation.material.roughness;
303
+ if (material.roughness) {
304
+ params.roughnessMap = material.roughness;
301
305
  params.roughnessMap.needsUpdate = true;
302
- // variation.material.roughness.magFilter = NearestFilter;
306
+ // material.roughness.magFilter = NearestFilter;
303
307
  }
304
- if (variation.material.metalness) {
305
- params.metalnessMap = variation.material.metalness;
308
+ if (material.metalness) {
309
+ params.metalnessMap = material.metalness;
306
310
  params.metalnessMap.needsUpdate = true;
307
311
  }
308
- if (variation.material.normal) {
309
- params.normalMap = variation.material.normal;
312
+ if (material.normal) {
313
+ params.normalMap = material.normal;
310
314
  params.normalMap.needsUpdate = true;
311
315
  }
312
- if (variation.material.displacement) {
313
- params.displacementMap = variation.material.displacement;
316
+ if (material.displacement) {
317
+ params.displacementMap = material.displacement;
314
318
  params.displacementMap.needsUpdate = true;
315
319
  }
316
- if (variation.material.emissive) {
317
- params.emissiveMap = variation.material.emissive;
320
+ if (material.emissive) {
321
+ params.emissiveMap = material.emissive;
318
322
  params.emissiveMap.needsUpdate = true;
319
323
  }
320
- if (variation.material.envMap) {
321
- if (variation.material.envMapIntensity != null || 0) {
322
- params.envMap = variation.material.envMap;
324
+ if (material.envMap) {
325
+ if (material.envMapIntensity != null || 0) {
326
+ params.envMap = material.envMap;
323
327
  params.envMap.needsUpdate = true;
324
- variation.material.envMap.mapping = THREE.EquirectangularReflectionMapping;
325
- variation.material.envMap.minFilter = THREE.NearestFilter;
326
- variation.material.envMap.magFilter = THREE.NearestFilter;
328
+ material.envMap.mapping = THREE.EquirectangularReflectionMapping;
329
+ material.envMap.minFilter = THREE.NearestFilter;
330
+ material.envMap.magFilter = THREE.NearestFilter;
327
331
  }
328
332
  }
329
- if (variation.material.reflectivity) {
330
- params.reflectivity = variation.material.reflectivity;
333
+ if (material.reflectivity) {
334
+ params.reflectivity = material.reflectivity;
331
335
  }
332
- if (variation.material.side) {
333
- params.side = variation.material.side;
336
+ if (material.side) {
337
+ params.side = material.side;
334
338
  }
335
339
  const newMaterial = new THREE.MeshPhysicalMaterial(params);
336
340
  newMaterial.color.setRGB(1, 1, 1);
337
- newMaterial.needsUpdate = true;
338
- if (variation.material.transmission) {
339
- newMaterial.transmission = variation.material.transmission;
341
+ if (material.sheen) {
342
+ newMaterial.sheen = material.sheen;
343
+ }
344
+ if (material.sheenColor) {
345
+ newMaterial.sheenColor = material.sheenColor;
346
+ }
347
+ if (material.sheenRoughness) {
348
+ newMaterial.sheenRoughness = material.sheenRoughness;
349
+ }
350
+ if (material.sheenColorMap) {
351
+ newMaterial.sheenColorMap = material.sheenColorMap;
352
+ newMaterial.sheenColorMap.needsUpdate = true;
340
353
  }
354
+ if (material.sheenRoughnessMap) {
355
+ newMaterial.sheenRoughnessMap = material.sheenRoughnessMap;
356
+ newMaterial.sheenRoughnessMap.needsUpdate = true;
357
+ }
358
+ if (material.transmission) {
359
+ newMaterial.transmission = material.transmission;
360
+ }
361
+ newMaterial.needsUpdate = true;
341
362
  return newMaterial;
342
363
  }
343
364
  else {
344
365
  const params = {
345
366
  // side: material.side ? material.side : FrontSide,
346
367
  name: name,
347
- roughness: variation.material.roughnessValue ? variation.material.roughnessValue : 1,
348
- metalness: variation.material.metalnessValue ? variation.material.metalnessValue : 0,
349
- envMapIntensity: variation.material.envMapIntensity ? variation.material.envMapIntensity : 0.01
368
+ roughness: material.roughnessValue ? material.roughnessValue : 1,
369
+ metalness: material.metalnessValue ? material.metalnessValue : 0,
370
+ envMapIntensity: material.envMapIntensity ? material.envMapIntensity : 0.01
350
371
  // wireframe: true,
351
372
  // opacity: 0.3,
352
373
  // transparent: true,
353
374
  };
354
- if (variation.material.displacementValue) {
355
- params.displacementScale = variation.material.displacementValue;
375
+ if (material.displacementValue) {
376
+ params.displacementScale = material.displacementValue;
377
+ }
378
+ if (material.opacity) {
379
+ params.opacity = material.opacity;
380
+ }
381
+ if (material.transparency) {
382
+ params.opacity = material.transparency;
356
383
  }
357
- if (variation.material.opacity) {
358
- params.opacity = variation.material.opacity;
384
+ if (material.transmission) {
385
+ params.opacity = material.transmission;
359
386
  }
360
- if (variation.material.transparent) {
361
- params.transparent = variation.material.transparent;
387
+ if (material.transparent) {
388
+ params.transparent = material.transparent;
362
389
  }
363
- if (variation.material.emissiveValue) {
364
- params.emissive = variation.material.emissiveValue;
390
+ if (material.emissiveValue) {
391
+ params.emissive = material.emissiveValue;
365
392
  }
366
- if (variation.material.emissiveIntensityValue) {
367
- params.emissiveIntensity = variation.material.emissiveIntensityValue;
393
+ if (material.emissiveIntensityValue) {
394
+ params.emissiveIntensity = material.emissiveIntensityValue;
368
395
  }
369
- if (variation.material.texture) {
370
- params.map = variation.material.texture;
396
+ if (material.texture) {
397
+ params.map = material.texture;
371
398
  params.map.needsUpdate = true;
372
399
  }
373
- if (variation.material.ao) {
374
- params.aoMap = variation.material.ao;
400
+ if (material.ao) {
401
+ params.aoMap = material.ao;
375
402
  params.aoMap.needsUpdate = true;
376
403
  }
377
- if (variation.material.roughness) {
378
- params.roughnessMap = variation.material.roughness;
404
+ if (material.roughness) {
405
+ params.roughnessMap = material.roughness;
379
406
  params.roughnessMap.needsUpdate = true;
380
- // variation.material.roughness.magFilter = NearestFilter;
407
+ // material.roughness.magFilter = NearestFilter;
381
408
  }
382
- if (variation.material.metalness) {
383
- params.metalnessMap = variation.material.metalness;
409
+ if (material.metalness) {
410
+ params.metalnessMap = material.metalness;
384
411
  params.metalnessMap.needsUpdate = true;
385
412
  }
386
- if (variation.material.normal) {
387
- params.normalMap = variation.material.normal;
413
+ if (material.normal) {
414
+ params.normalMap = material.normal;
388
415
  params.normalMap.needsUpdate = true;
389
416
  }
390
- if (variation.material.displacement) {
391
- params.displacementMap = variation.material.displacement;
417
+ if (material.displacement) {
418
+ params.displacementMap = material.displacement;
392
419
  params.displacementMap.needsUpdate = true;
393
420
  }
394
- if (variation.material.emissive) {
395
- params.emissiveMap = variation.material.emissive;
421
+ if (material.emissive) {
422
+ params.emissiveMap = material.emissive;
396
423
  params.emissiveMap.needsUpdate = true;
397
424
  }
398
- if (variation.material.envMap) {
399
- if (variation.material.envMapIntensity != null || 0) {
400
- params.envMap = variation.material.envMap;
425
+ if (material.envMap) {
426
+ if (material.envMapIntensity != null || 0) {
427
+ params.envMap = material.envMap;
401
428
  params.envMap.needsUpdate = true;
402
- variation.material.envMap.mapping = THREE.EquirectangularReflectionMapping;
403
- variation.material.envMap.minFilter = THREE.NearestFilter;
404
- variation.material.envMap.magFilter = THREE.NearestFilter;
429
+ material.envMap.mapping = THREE.EquirectangularReflectionMapping;
430
+ material.envMap.minFilter = THREE.NearestFilter;
431
+ material.envMap.magFilter = THREE.NearestFilter;
405
432
  }
406
433
  }
407
- if (variation.material.side) {
408
- params.side = variation.material.side;
434
+ if (material.side) {
435
+ params.side = material.side;
409
436
  }
410
437
  const newMaterial = new THREE.MeshStandardMaterial(params);
411
438
  newMaterial.color.setRGB(1, 1, 1);
@@ -423,4 +450,4 @@ export class VariationHelper {
423
450
  return null;
424
451
  }
425
452
  }
426
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFyaWF0aW9uLWhlbHBlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9oZWxwZXIvdmFyaWF0aW9uLWhlbHBlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLDBEQUEwRCxDQUFDO0FBQ3RGLE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLDZCQUE2QixDQUFDO0FBQzlELE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUVoRCxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFDN0MsT0FBTyxLQUFLLEtBQUssTUFBTSxPQUFPLENBQUM7QUFDL0IsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBQ3hELE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUVoRCxNQUFNLE9BQU8sZUFBZTtJQUE1QjtRQUdZLGdCQUFXLEdBQXdCLEVBQUUsQ0FBQztRQUV0Qyx5QkFBb0IsR0FBNkIsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQW1hdkUsQ0FBQztJQWphVSxVQUFVO1FBQ2IsTUFBTSxZQUFZLEdBQWtCLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFDbkYsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFVBQVUsRUFBRSxFQUFFO1lBQ2hDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRTtnQkFDN0IsSUFBSTtvQkFDQSxJQUFJLFNBQVMsQ0FBQyxRQUFRLEVBQUU7d0JBQ3BCLElBQUksU0FBUyxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUU7NEJBQzVCLFNBQVMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO3lCQUN4Qzt3QkFDRCxJQUFJLFNBQVMsQ0FBQyxRQUFRLENBQUMsTUFB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Q0FBQyxNQUFNLENBQUMsQ0FBQztZQUN2RixXQUFXLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ2xDLFdBQVcsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO1lBRS9CLE9BQU8sV0FBVyxDQUFDO1NBQ3RCO0lBQ0wsQ0FBQztJQUVPLHVCQUF1QixDQUFDLEVBQVUsRUFBRSxTQUFzQjtRQUM5RCxJQUFJLENBQUMsb0JBQW9CLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUNqRCxDQUFDO0lBRU8sdUJBQXVCLENBQUMsRUFBVTtRQUN0QyxJQUFJLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUU7WUFDbkMsT0FBTyxJQUFJLENBQUMsb0JBQW9CLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1NBQzVDO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztDQUVKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtEZWNvTm9kZVR5cGV9IGZyb20gXCJAY29saWpuaXQvY29uZmlndXJhdG9yYXBpL2J1aWxkL2VudW0vZGVjby1ub2RlLXR5cGUuZW51bVwiO1xyXG5pbXBvcnQge1ZhcmlhdGlvblNldHRpbmdzfSBmcm9tIFwiLi4vbW9kZWwvdmFyaWF0aW9uLXNldHRpbmdzXCI7XHJcbmltcG9ydCB7QXNzZXRVdGlsc30gZnJvbSBcIi4uL3V0aWxzL2Fzc2V0LnV0aWxzXCI7XHJcbmltcG9ydCB7RGVjb05vZGV9IGZyb20gXCJAY29saWpuaXQvY29uZmlndXJhdG9yYXBpL2J1aWxkL21vZGVsL2RlY28tbm9kZVwiO1xyXG5pbXBvcnQge1ZhcmlhdGlvbn0gZnJvbSBcIi4uL21vZGVsL3ZhcmlhdGlvblwiO1xyXG5pbXBvcnQgKiBhcyBUSFJFRSBmcm9tIFwidGhyZWVcIjtcclxuaW1wb3J0IHtWYXJpYXRpb25VdGlsc30gZnJvbSBcIi4uL3V0aWxzL3ZhcmlhdGlvbi11dGlsc1wiO1xyXG5pbXBvcnQge0ltYWdlVXRpbHN9IGZyb20gJy4uL3V0aWxzL2ltYWdlLnV0aWxzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBWYXJpYXRpb25IZWxwZXIge1xyXG5cclxuICAgIHB1YmxpYyBhc3NldFBhdGg6IHN0cmluZztcclxuICAgIHByaXZhdGUgX3ZhcmlhdGlvbnM6IFZhcmlhdGlvblNldHRpbmdzW10gPSBbXTtcclxuXHJcbiAgICBwcml2YXRlIF9sYXN0S25vd25WYXJpYXRpb25zOiBNYXA8c3RyaW5nLCBWYXJpYXRpb25bXT4gPSBuZXcgTWFwKCk7XHJcblxyXG4gICAgcHVibGljIGNsZWFyQ2FjaGUoKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgdmFyaWF0aW9uTWFwOiBWYXJpYXRpb25bXVtdID0gQXJyYXkuZnJvbSh0aGlzLl9sYXN0S25vd25WYXJpYXRpb25zLnZhbHVlcygpKTtcclxuICAgICAgICB2YXJpYXRpb25NYXAuZm9yRWFjaCgodmFyaWF0aW9ucykgPT4ge1xyXG4gICAgICAgICAgICB2YXJpYXRpb25zLmZvckVhY2goKHZhcmlhdGlvbikgPT4ge1xyXG4gICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodmFyaWF0aW9uLm1hdGVyaWFsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYXRpb24ubWF0ZXJpYWwudGV4dHVyZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWF0aW9uLm1hdGVyaWFsLnRleHR1cmUuZGlzcG9zZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYXRpb24ubWF0ZXJpYWwubm9ybWFsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYXRpb24ubWF0ZXJpYWwubm9ybWFsLmRpc3Bvc2UoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFyaWF0aW9uLm1hdGVyaWFsLm1ldGFsbmVzcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWF0aW9uLm1hdGVyaWFsLm1ldGFsbmVzcy5kaXNwb3NlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhcmlhdGlvbi5tYXRlcmlhbC5yb3VnaG5lc3MpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhdGlvbi5tYXRlcmlhbC5yb3VnaG5lc3MuZGlzcG9zZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYXRpb24ubWF0ZXJpYWwuYW8pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhdGlvbi5tYXRlcmlhbC5hby5kaXNwb3NlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIFZhcmlhdGlvblV0aWxzLkNsZWFyQ2FjaGUoKTtcclxuICAgICAgICBJbWFnZVV0aWxzLkNsZWFyQ2FjaGUoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYXN5bmMgbG9hZFBhcnQob2JqOiBUSFJFRS5PYmplY3QzRCwgcGFydHM6IGFueVtdLCB1c2VQYnI6IGJvb2xlYW4gPSBmYWxzZSk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGxlbjogbnVtYmVyID0gcGFydHMubGVuZ3RoO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAocGFydHNbaV0uZGVjb05vZGUgJiYgcGFydHNbaV0uZGVjb05vZGUuZ2FtZU9iamVjdE5hbWUgJiYgcGFydHNbaV0uZGVjb05vZGUudHlwZSA9PT0gRGVjb05vZGVUeXBlLlBhcnQpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXJ0U2V0dGluZ3M6IFZhcmlhdGlvblNldHRpbmdzID1cclxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgVmFyaWF0aW9uVXRpbHMuTG9hZFZhcmlhdGlvbih0aGlzLmFzc2V0UGF0aCwgcGFydHNbaV0uZGVjb05vZGUuZ2FtZU9iamVjdE5hbWUgfHwgcGFydHNbaV0uZGVjb0lkKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocGFydFNldHRpbmdzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhcnRWYXJpYXRpb246IFZhcmlhdGlvbiA9IG5ldyBWYXJpYXRpb24oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGFydFZhcmlhdGlvbi5kZWNvSWQgPSBwYXJzZUZsb2F0KHBhcnRzW2ldLmRlY29Ob2RlLmlkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGFydFZhcmlhdGlvbi5icmFuZElkID0gcGFydHNbaV0uZGVjb05vZGUuYnJhbmRJZDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGFydFZhcmlhdGlvbi5nYW1lT2JqZWN0TmFtZSA9IHBhcnRzW2ldLmRlY29Ob2RlLmdhbWVPYmplY3ROYW1lO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJ0VmFyaWF0aW9uLm1hdGVyaWFsID0gYXdhaXQgQXNzZXRVdGlscy5DcmVhdGVNYXRlcmlhbEZyb21Bc3NldChwYXJ0U2V0dGluZ3MpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBwYXJ0c1tpXS52YXJpYXRpb24gPSBwYXJ0VmFyaWF0aW9uO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9hcHBseU1hdGVyaWFsUGFydChvYmosIHBhcnRWYXJpYXRpb24sIHBhcnRzW2ldLm5vZGUsIHVzZVBicik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYXN5bmMgbG9hZFZhcmlhdGlvbihvYmo6IFRIUkVFLk9iamVjdDNELCBwYXJ0czogYW55W10sIHVzZVBicjogYm9vbGVhbiA9IGZhbHNlKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgY29uc3QgbGVuOiBudW1iZXIgPSBwYXJ0cy5sZW5ndGg7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHZhcmlhdGlvbnM6IERlY29Ob2RlW10gPSBwYXJ0c1tpXS52YXJpYXRpb25zO1xyXG4gICAgICAgICAgICAgICAgaWYgKCF2YXJpYXRpb25zIHx8IHZhcmlhdGlvbnMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2dldExhc3RLbm93blZhcmlhdGlvbnMocGFydHNbaV0ubm9kZUlkKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJ0c1tpXS52YXJpYXRpb25zID0gdGhpcy5fZ2V0TGFzdEtub3duVmFyaWF0aW9ucyhwYXJ0c1tpXS5ub2RlSWQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9hcHBseVZhcmlhdGlvbnMob2JqLCBwYXJ0c1tpXSwgdXNlUGJyKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY29uc3QgbGFzdEtub3duVmFyaWF0aW9uczogVmFyaWF0aW9uW10gPSBbXTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHZhcmlhdGlvblByb21pc2U6IFByb21pc2U8YW55PltdID0gW107XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHZhcmlhdGlvbnMubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXJpYXRpb25Qcm9taXNlLnB1c2goXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZFRoZVZhcmlhdGlvbihcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhdGlvbnNbal0uZ2FtZU9iamVjdE5hbWUgfHwgcGFydHNbaV0uZGVjb0lkKS50aGVuKGFzeW5jICh2YXJpYXRpb25TZXR0aW5nczogVmFyaWF0aW9uU2V0dGluZ3MpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld1ZhcmlhdGlvbjogVmFyaWF0aW9uID0gbmV3IFZhcmlhdGlvbigpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3VmFyaWF0aW9uLmRlY29JZCA9IHBhcnNlRmxvYXQodmFyaWF0aW9uc1tqXS5pZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdWYXJpYXRpb24uYnJhbmRJZCA9IHZhcmlhdGlvbnNbal0uYnJhbmRJZDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld1ZhcmlhdGlvbi5vcHRpb25UZXh0ID0gKHZhcmlhdGlvbnNbal0gYXMgYW55KS5vcHRpb25UZXh0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3VmFyaWF0aW9uLmdhbWVPYmplY3ROYW1lID0gdmFyaWF0aW9uc1tqXS5nYW1lT2JqZWN0TmFtZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld1ZhcmlhdGlvbi5zdXBwbGllckFydGljbGVOciA9ICh2YXJpYXRpb25zW2pdIGFzIGFueSkuc3VwcGxpZXJBcnRpY2xlTnI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdWYXJpYXRpb24ubWF0ZXJpYWxJZCA9ICh2YXJpYXRpb25zW2pdIGFzIGFueSkubWF0ZXJpYWxJZDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld1ZhcmlhdGlvbi5tYXRlcmlhbCA9IHZhcmlhdGlvblNldHRpbmdzLm1hdGVyaWFsID8gdmFyaWF0aW9uU2V0dGluZ3MubWF0ZXJpYWwgOiBhd2FpdCBBc3NldFV0aWxzLkNyZWF0ZU1hdGVyaWFsRnJvbUFzc2V0KHZhcmlhdGlvblNldHRpbmdzKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RLbm93blZhcmlhdGlvbnMucHVzaChuZXdWYXJpYXRpb24pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBhd2FpdCBQcm9taXNlLmFsbCh2YXJpYXRpb25Qcm9taXNlKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3NldExhc3RLbm93blZhcmlhdGlvbnMoYCR7cGFydHNbaV0ubm9kZUlkfV8ke3BhcnRzW2ldLm5vZGV9YCwgbGFzdEtub3duVmFyaWF0aW9ucyk7XHJcbiAgICAgICAgICAgICAgICBwYXJ0c1tpXS52YXJpYXRpb25zID0gbGFzdEtub3duVmFyaWF0aW9ucztcclxuICAgICAgICAgICAgICAgIHRoaXMuX2FwcGx5VmFyaWF0aW9ucyhvYmosIHBhcnRzW2ldLCB1c2VQYnIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0KGlkOiBzdHJpbmcpOiBWYXJpYXRpb25TZXR0aW5ncyB7XHJcbiAgICAgICAgY29uc3QgbGVuOiBudW1iZXIgPSB0aGlzLl92YXJpYXRpb25zLmxlbmd0aDtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLl92YXJpYXRpb25zW2ldLmlkICYmIHRoaXMuX3ZhcmlhdGlvbnNbaV0uaWQgPT09IGlkKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fdmFyaWF0aW9uc1tpXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2V0KHZhcmlhdGlvbnM6IFZhcmlhdGlvblNldHRpbmdzKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgaWR4OiBudW1iZXIgPSB0aGlzLl92YXJpYXRpb25zLmZpbmRJbmRleCh2ID0+IHYuaWQgPT09IHZhcmlhdGlvbnMuaWQpO1xyXG4gICAgICAgIGlmIChpZHggPiAtMSkge1xyXG4gICAgICAgICAgICB0aGlzLl92YXJpYXRpb25zW2lkeF0gPSB2YXJpYXRpb25zO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3ZhcmlhdGlvbnMucHVzaCh2YXJpYXRpb25zKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHByZWxvYWRWYXJpYXRpb25zKGZpbGVOYW1lczogc3RyaW5nW10pOiB2b2lkIHtcclxuICAgICAgICBmaWxlTmFtZXMuZm9yRWFjaCgoZmlsZU5hbWU6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgICBpZiAoZmlsZU5hbWUgJiYgIXRoaXMuZ2V0KGZpbGVOYW1lKSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgc2V0dGluZ3MgPSBuZXcgVmFyaWF0aW9uU2V0dGluZ3MoKTtcclxuICAgICAgICAgICAgICAgIHNldHRpbmdzLmlkID0gZmlsZU5hbWU7XHJcbiAgICAgICAgICAgICAgICBzZXR0aW5ncy5sb2FkaW5nID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3ZhcmlhdGlvbnMucHVzaChzZXR0aW5ncyk7XHJcbiAgICAgICAgICAgICAgICBsZXQgYXNzZXRQYXRoOiBzdHJpbmcgPSB0aGlzLmFzc2V0UGF0aDtcclxuICAgICAgICAgICAgICAgIGlmICghYXNzZXRQYXRoLmVuZHNXaXRoKCcvJykpIHtcclxuICAgICAgICAgICAgICAgICAgICBhc3NldFBhdGggKz0gJy8nO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgVmFyaWF0aW9uVXRpbHMuTG9hZFZhcmlhdGlvbihhc3NldFBhdGgsIGZpbGVOYW1lKS50aGVuKCh2YXJpYXRpb25TZXR0aW5nczogVmFyaWF0aW9uU2V0dGluZ3MpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBzZXR0aW5ncy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgc2V0dGluZ3MubG9hZGVkLm5leHQodmFyaWF0aW9uU2V0dGluZ3MpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYXRpb25TZXR0aW5ncykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldCh2YXJpYXRpb25TZXR0aW5ncyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYXN5bmMgbG9hZFRoZVZhcmlhdGlvbihmaWxlTmFtZTogc3RyaW5nKTogUHJvbWlzZTxWYXJpYXRpb25TZXR0aW5ncz4ge1xyXG4gICAgICAgIGlmICghZmlsZU5hbWUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmdldChmaWxlTmFtZSkpIHtcclxuICAgICAgICAgICAgY29uc3Qgc2V0dGluZ3MgPSB0aGlzLmdldChmaWxlTmFtZSk7XHJcbiAgICAgICAgICAgIGlmIChzZXR0aW5ncy5sb2FkaW5nKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5fd2FpdEZvclZhcmlhdGlvblRvTG9hZChzZXR0aW5ncyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHNldHRpbmdzO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF93YWl0Rm9yVmFyaWF0aW9uVG9Mb2FkKHNldHRpbmdzOiBWYXJpYXRpb25TZXR0aW5ncyk6IFByb21pc2U8VmFyaWF0aW9uU2V0dGluZ3M+IHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmU6IEZ1bmN0aW9uKSA9PiB7XHJcbiAgICAgICAgICAgIHNldHRpbmdzLmxvYWRlZC5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKHZhbHVlKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfZ2V0Q2hpbGRyZW5GaWx0ZXJCeVByb3Aob2JqOiBUSFJFRS5PYmplY3QzRCwgdXNlckRhdGFPYmplY3RQcm9wOiBzdHJpbmcsIHByb3A6IHN0cmluZywgdmFsdWU6IGFueSk6IFRIUkVFLk9iamVjdDNEW10ge1xyXG4gICAgICAgIHJldHVybiBvYmouY2hpbGRyZW4uZmlsdGVyKChjaGlsZCkgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gY2hpbGQudXNlckRhdGEgJiZcclxuICAgICAgICAgICAgICAgIGNoaWxkLnVzZXJEYXRhLmhhc093blByb3BlcnR5KHVzZXJEYXRhT2JqZWN0UHJvcCkgJiZcclxuICAgICAgICAgICAgICAgIGNoaWxkLnVzZXJEYXRhW3VzZXJEYXRhT2JqZWN0UHJvcF0uaGFzT3duUHJvcGVydHkocHJvcCkgJiZcclxuICAgICAgICAgICAgICAgIGNoaWxkLnVzZXJEYXRhW3VzZXJEYXRhT2JqZWN0UHJvcF1bcHJvcF0gPT09IHZhbHVlO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX2FwcGx5TWF0ZXJpYWxQYXJ0KG9iajogVEhSRUUuT2JqZWN0M0QsIHBhcnRNYXRlcmlhbDogYW55LCBub2RlSWQ6IGFueSwgdXNlUGJyOiBib29sZWFuID0gZmFsc2UpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBjaGlsZHJlbiA9IHRoaXMuX2dldENoaWxkcmVuRmlsdGVyQnlQcm9wKG9iaiwgJ3NlbGVjdGlvbicsICdub2RlJywgbm9kZUlkKTtcclxuICAgICAgICBjb25zdCBsZW46IG51bWJlciA9IGNoaWxkcmVuLmxlbmd0aDtcclxuICAgICAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAwOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgY29uc3QgY2hpbGQgPSBjaGlsZHJlbltpXTtcclxuICAgICAgICAgICAgaWYgKGNoaWxkICE9PSBudWxsICYmIGNoaWxkICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgIGNoaWxkLnRyYXZlcnNlKChtZXNoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG1lc2ggaW5zdGFuY2VvZiBUSFJFRS5NZXNoICYmIHBhcnRNYXRlcmlhbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShtZXNoLm1hdGVyaWFsKSkgeyAvLyBtdWx0aW1hdGVyaWFsIHN1cHBvcnRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGogPSAwLCBqbGVuOiBudW1iZXIgPSBtZXNoLm1hdGVyaWFsLmxlbmd0aDsgaiA8IGpsZW47IGorKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNoLm1hdGVyaWFsW2pdLm5hbWUudG9Mb3dlckNhc2UoKS5pbmRleE9mKCdmaXhlZF9mcmFtZScpICE9PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNoLm1hdGVyaWFsW2pdID0gdGhpcy5fc2V0TWVzaE1hdGVyaWFsRnJvbVZhcmlhdGlvbihtZXNoLm1hdGVyaWFsW2pdLm5hbWUsIHBhcnRNYXRlcmlhbCwgdXNlUGJyKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzaC5tYXRlcmlhbC5uYW1lLnRvTG93ZXJDYXNlKCkuaW5kZXhPZignZml4ZWRfZnJhbWUnKSAhPT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNoLm1hdGVyaWFsID0gdGhpcy5fc2V0TWVzaE1hdGVyaWFsRnJvbVZhcmlhdGlvbihtZXNoLm1hdGVyaWFsLm5hbWUsIHBhcnRNYXRlcmlhbCwgdXNlUGJyKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX2FwcGx5VmFyaWF0aW9ucyhvYmo6IFRIUkVFLk9iamVjdDNELCBwYXJ0OiBhbnksIHVzZVBicjogYm9vbGVhbiA9IGZhbHNlKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgY2hpbGRyZW4gPSB0aGlzLl9nZXRDaGlsZHJlbkZpbHRlckJ5UHJvcChvYmosICdzZWxlY3Rpb24nLCAnbm9kZScsIHBhcnQubm9kZSk7XHJcbiAgICAgICAgY29uc3QgbGVuOiBudW1iZXIgPSBjaGlsZHJlbi5sZW5ndGg7XHJcbiAgICAgICAgZm9yIChsZXQgaTogbnVtYmVyID0gMDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkID0gY2hpbGRyZW5baV07XHJcbiAgICAgICAgICAgIGlmIChjaGlsZCAhPT0gbnVsbCAmJiBjaGlsZCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICBjaGlsZC50cmF2ZXJzZSgobWVzaCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChtZXNoIGluc3RhbmNlb2YgVEhSRUUuTWVzaCAmJiBwYXJ0LnZhcmlhdGlvbnMgJiYgcGFydC52YXJpYXRpb25zLmxlbmd0aCA+IDAgJiYgbWVzaC5uYW1lLnRvTG93ZXJDYXNlKCkuaW5kZXhPZignY18nKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHBhcnQudmFyaWF0aW9ucy5sZW5ndGg7IGorKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFyaWF0aW9uOiBWYXJpYXRpb24gPSBwYXJ0LnZhcmlhdGlvbnNbal07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFyaWF0aW9uLm1hdGVyaWFsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWF0ZXJpYWxUb1NlYXJjaDogc3RyaW5nID0gISF2YXJpYXRpb24ubWF0ZXJpYWxJZCA/IHZhcmlhdGlvbi5tYXRlcmlhbElkLnRvTG93ZXJDYXNlKCkgOiAnZGVmYXVsdCc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkobWVzaC5tYXRlcmlhbCkpIHsgLy8gbXVsdGltYXRlcmlhbCBzdXBwb3J0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IG0gPSAwLCBtbGVuOiBudW1iZXIgPSBtZXNoLm1hdGVyaWFsLmxlbmd0aDsgbSA8IG1sZW47IG0rKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc2gubWF0ZXJpYWxbbV0ubmFtZS50b0xvd2VyQ2FzZSgpLmluZGV4T2YobWF0ZXJpYWxUb1NlYXJjaCkgIT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhcmlhdGlvbi5tYXRlcmlhbCBpbnN0YW5jZW9mIFRIUkVFLk1hdGVyaWFsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc2gubWF0ZXJpYWxbbV0gPSB2YXJpYXRpb24ubWF0ZXJpYWw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzaC5tYXRlcmlhbFttXSA9IHRoaXMuX3NldE1lc2hNYXRlcmlhbEZyb21WYXJpYXRpb24obWVzaC5tYXRlcmlhbFttXS5uYW1lLCB2YXJpYXRpb24sIHVzZVBicik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc2gubWF0ZXJpYWwubmFtZS50b0xvd2VyQ2FzZSgpLmluZGV4T2YobWF0ZXJpYWxUb1NlYXJjaCkgIT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFyaWF0aW9uLm1hdGVyaWFsIGluc3RhbmNlb2YgVEhSRUUuTWF0ZXJpYWwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNoLm1hdGVyaWFsID0gdmFyaWF0aW9uLm1hdGVyaWFsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNoLm1hdGVyaWFsID0gdGhpcy5fc2V0TWVzaE1hdGVyaWFsRnJvbVZhcmlhdGlvbihtZXNoLm1hdGVyaWFsLm5hbWUsIHZhcmlhdGlvbiwgdXNlUGJyKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX3NldE1lc2hNYXRlcmlhbEZyb21WYXJpYXRpb24obmFtZTogc3RyaW5nLCB2YXJpYXRpb246IFZhcmlhdGlvbiwgdXNlUGJyOiBib29sZWFuID0gZmFsc2UpOiBUSFJFRS5NYXRlcmlhbCB7XHJcbiAgICAgICAgaWYgKHZhcmlhdGlvbi5tYXRlcmlhbC50ZXh0dXJlKSB7XHJcbiAgICAgICAgICAgIHZhcmlhdGlvbi5tYXRlcmlhbC50ZXh0dXJlLm5lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICAgICAgICAgICAgdmFyaWF0aW9uLm1hdGVyaWFsLnRleHR1cmUubWFwcGluZyA9IFRIUkVFLkVxdWlyZWN0YW5ndWxhclJlZmxlY3Rpb25NYXBwaW5nO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXVzZVBicikge1xyXG4gICAgICAgICAgICBjb25zdCBuZXdNYXRlcmlhbDogVEhSRUUuTWVzaFBob25nTWF0ZXJpYWwgPSBuZXcgVEhSRUUuTWVzaFBob25nTWF0ZXJpYWwoe1xyXG4gICAgICAgICAgICAgICAgbmFtZTogbmFtZSxcclxuICAgICAgICAgICAgICAgIHNoaW5pbmVzczogdmFyaWF0aW9uLm1hdGVyaWFsLnNoaW5pbmVzcyxcclxuICAgICAgICAgICAgICAgIHNwZWN1bGFyOiB2YXJpYXRpb24ubWF0ZXJpYWwuc3BlY3VsYXIsXHJcbiAgICAgICAgICAgICAgICBtYXA6IHZhcmlhdGlvbi5tYXRlcmlhbC50ZXh0dXJlLFxyXG4gICAgICAgICAgICAgICAgbm9ybWFsTWFwOiB2YXJpYXRpb24ubWF0ZXJpYWwubm9ybWFsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBuZXdNYXRlcmlhbC5jb2xvci5zZXRSR0IoMC44LCAwLjgsIDAuOCk7XHJcbiAgICAgICAgICAgIG5ld01hdGVyaWFsLm5lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICAgICAgICAgICAgcmV0dXJuIG5ld01hdGVyaWFsO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodmFyaWF0aW9uLm1hdGVyaWFsLnNoZWVuQ29sb3IgfHwgdmFyaWF0aW9uLm1hdGVyaWFsLnJlZmxlY3Rpdml0eSkge1xyXG4gICAgICAgICAgICBjb25zdCBwYXJhbXM6IFRIUkVFLk1lc2hQaHlzaWNhbE1hdGVyaWFsUGFyYW1ldGVycyA9IHtcclxuICAgICAgICAgICAgICAgIC8vIHNpZGU6IG1hdGVyaWFsLnNpZGUgPyBtYXRlcmlhbC5zaWRlIDogRnJvbnRTaWRlLFxyXG4gICAgICAgICAgICAgICAgbmFtZTogbmFtZSxcclxuICAgICAgICAgICAgICAgIHJvdWdobmVzczogdmFyaWF0aW9uLm1hdGVyaWFsLnJvdWdobmVzc1ZhbHVlID8gdmFyaWF0aW9uLm1hdGVyaWFsLnJvdWdobmVzc1ZhbHVlIDogMSxcclxuICAgICAgICAgICAgICAgIG1ldGFsbmVzczogdmFyaWF0aW9uLm1hdGVyaWFsLm1ldGFsbmVzc1ZhbHVlID8gdmFyaWF0aW9uLm1hdGVyaWFsLm1ldGFsbmVzc1ZhbHVlIDogMCxcclxuICAgICAgICAgICAgICAgIGVudk1hcEludGVuc2l0eTogdmFyaWF0aW9uLm1hdGVyaWFsLmVudk1hcEludGVuc2l0eSA/IHZhcmlhdGlvbi5tYXRlcmlhbC5lbnZNYXBJbnRlbnNpdHkgOiAwLjAxLFxyXG4gICAgICAgICAgICAgICAgY2xlYXJjb2F0TWFwOiB2YXJpYXRpb24ubWF0ZXJpYWwuY2xlYXJjb2F0TWFwID8gdmFyaWF0aW9uLm1hdGVyaWFsLmNsZWFyY29hdE1hcCA6IG51bGwsXHJcbiAgICAgICAgICAgICAgICBjbGVhcmNvYXRSb3VnaG5lc3NNYXA6IHZhcmlhdGlvbi5tYXRlcmlhbC5jbGVhcmNvYXRSb3VnaG5lc3NNYXAgPyB2YXJpYXRpb24ubWF0ZXJpYWwuY2xlYXJjb2F0Um91Z2huZXNzTWFwIDogbnVsbCxcclxuICAgICAgICAgICAgICAgIC8vIHdpcmVmcmFtZTogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIC8vIG9wYWNpdHk6IDAuMyxcclxuICAgICAgICAgICAgICAgIC8vIHRyYW5zcGFyZW50OiB0cnVlLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBpZiAodmFyaWF0aW9uLm1hdGVyaWFsLmRpc3BsYWNlbWVudFZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICBwYXJhbXMuZGlzcGxhY2VtZW50U2NhbGUgPSB2YXJpYXRpb24ubWF0ZXJpYWwuZGlzcGxhY2VtZW50VmFsdWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHZhcmlhdGlvbi5tYXRlcmlhbC5zaGVlbkNvbG9yKSB7XHJcbiAgICAgICAgICAgICAgICBwYXJhbXMuc2hlZW4gPSB2YXJpYXRpb24ubWF0ZXJpYWwuc2hlZW5Db2xvcjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodmFyaWF0aW9uLm1hdGVyaWFsLm9wYWNpdHkpIHtcclxuICAgICAgICAgICAgICAgIHBhcmFtcy5vcGFjaXR5ID0gdmFyaWF0aW9uLm1hdGVyaWFsLm9wYWNpdHk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHZhcmlhdGlvbi5tYXRlcmlhbC50cmFuc3BhcmVudCkge1xyXG4gICAgICAgICAgICAgICAgcGFyYW1zLnRyYW5zcGFyZW50ID0gdmFyaWF0aW9uLm1hdGVyaWFsLnRyYW5zcGFyZW50O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh2YXJpYXRpb24ubWF0ZXJpYWwuZW1pc3NpdmVWYWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgcGFyYW1zLmVtaXNzaXZlID0gdmFyaWF0aW9uLm1hdGVyaWFsLmVtaXNzaXZlVmFsdWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHZhcmlhdGlvbi5tYXRlcmlhbC5lbWlzc2l2ZUludGVuc2l0eVZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICBwYXJhbXMuZW1pc3NpdmVJbnRlbnNpdHkgPSB2YXJpYXRpb24ubWF0ZXJpYWwuZW1pc3NpdmVJbnRlbnNpdHlWYWx1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodmFyaWF0aW9uLm1hdGVyaWFsLnRleHR1cmUpIHtcclxuICAgICAgICAgICAgICAgIHBhcmFtcy5tYXAgPSB2YXJpYXRpb24ubWF0ZXJpYWwudGV4dHVyZTtcclxuICAgICAgICAgICAgICAgIHBhcmFtcy5tYXAubmVlZHNVcGRhdGUgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh2YXJpYXRpb24ubWF0ZXJpYWwuYW8pIHtcclxuICAgICAgICAgICAgICAgIHBhcmFtcy5hb01hcCA9IHZhcmlhdGlvbi5tYXRlcmlhbC5hbztcclxuICAgICAgICAgICAgICAgIHBhcmFtcy5hb01hcC5uZWVkc1VwZGF0ZSA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHZhcmlhdGlvbi5tYXRlcmlhbC5yb3VnaG5lc3MpIHtcclxuICAgICAgICAgICAgICAgIHBhcmFtcy5yb3VnaG5lc3NNYXAgPSB2YXJpYXRpb24ubWF0ZXJpYWwucm91Z2huZXNzO1xyXG4gICAgICAgICAgICAgICAgcGFyYW1zLnJvdWdobmVzc01hcC5uZWVkc1VwZGF0ZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAvLyB2YXJpYXRpb24ubWF0ZXJpYWwucm91Z2huZXNzLm1hZ0ZpbHRlciA9IE5lYXJlc3RGaWx0ZXI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHZhcmlhdGlvbi5tYXRlcmlhbC5tZXRhbG5lc3MpIHtcclxuICAgICAgICAgICAgICAgIHBhcmFtcy5tZXRhbG5lc3NNYXAgPSB2YXJpYXRpb24ubWF0ZXJpYWwubWV0YWxuZXNzO1xyXG4gICAgICAgICAgICAgICAgcGFyYW1zLm1ldGFsbmVzc01hcC5uZWVkc1VwZGF0ZSA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHZhcmlhdGlvbi5tYXRlcmlhbC5ub3JtYWwpIHtcclxuICAgICAgICAgICAgICAgIHBhcmFtcy5ub3JtYWxNYXAgPSB2YXJpYXRpb24ubWF0ZXJpYWwubm9ybWFsO1xyXG4gICAgICAgICAgICAgICAgcGFyYW1zLm5vcm1hbE1hcC5uZWVkc1VwZGF0ZSA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHZhcmlhdGlvbi5tYXRlcmlhbC5kaXNwbGFjZW1lbnQpIHtcclxuICAgICAgICAgICAgICAgIHBhcmFtcy5kaXNwbGFjZW1lbnRNYXAgPSB2YXJpYXRpb24ubWF0ZXJpYWwuZGlzcGxhY2VtZW50O1xyXG4gICAgICAgICAgICAgICAgcGFyYW1zLmRpc3BsYWNlbWVudE1hcC5uZWVkc1VwZGF0ZSA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHZhcmlhdGlvbi5tYXRlcmlhbC5lbWlzc2l2ZSkge1xyXG4gICAgICAgICAgICAgICAgcGFyYW1zLmVtaXNzaXZlTWFwID0gdmFyaWF0aW9uLm1hdGVyaWFsLmVtaXNzaXZlO1xyXG4gICAgICAgICAgICAgICAgcGFyYW1zLmVtaXNzaXZlTWFwLm5lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodmFyaWF0aW9uLm1hdGVyaWFsLmVudk1hcCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHZhcmlhdGlvbi5tYXRlcmlhbC5lbnZNYXBJbnRlbnNpdHkgIT0gbnVsbCB8fCAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zLmVudk1hcCA9IHZhcmlhdGlvbi5tYXRlcmlhbC5lbnZNYXA7XHJcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zLmVudk1hcC5uZWVkc1VwZGF0ZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyaWF0aW9uLm1hdGVyaWFsLmVudk1hcC5tYXBwaW5nID0gVEhSRUUuRXF1aXJlY3Rhbmd1bGFyUmVmbGVjdGlvbk1hcHBpbmc7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyaWF0aW9uLm1hdGVyaWFsLmVudk1hcC5taW5GaWx0ZXIgPSBUSFJFRS5OZWFyZXN0RmlsdGVyO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhcmlhdGlvbi5tYXRlcmlhbC5lbnZNYXAubWFnRmlsdGVyID0gVEhSRUUuTmVhcmVzdEZpbHRlcjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodmFyaWF0aW9uLm1hdGVyaWFsLnJlZmxlY3Rpdml0eSkge1xyXG4gICAgICAgICAgICAgICAgcGFyYW1zLnJlZmxlY3Rpdml0eSA9IHZhcmlhdGlvbi5tYXRlcmlhbC5yZWZsZWN0aXZpdHk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHZhcmlhdGlvbi5tYXRlcmlhbC5zaWRlKSB7XHJcbiAgICAgICAgICAgICAgICBwYXJhbXMuc2lkZSA9IHZhcmlhdGlvbi5tYXRlcmlhbC5zaWRlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjb25zdCBuZXdNYXRlcmlhbDogVEhSRUUuTWVzaFBoeXNpY2FsTWF0ZXJpYWwgPSBuZXcgVEhSRUUuTWVzaFBoeXNpY2FsTWF0ZXJpYWwocGFyYW1zKTtcclxuICAgICAgICAgICAgbmV3TWF0ZXJpYWwuY29sb3Iuc2V0UkdCKDEsIDEsIDEpO1xyXG4gICAgICAgICAgICBuZXdNYXRlcmlhbC5uZWVkc1VwZGF0ZSA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICBpZiAodmFyaWF0aW9uLm1hdGVyaWFsLnRyYW5zbWlzc2lvbikge1xyXG4gICAgICAgICAgICAgICAgbmV3TWF0ZXJpYWwudHJhbnNtaXNzaW9uID0gdmFyaWF0aW9uLm1hdGVyaWFsLnRyYW5zbWlzc2lvbjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gbmV3TWF0ZXJpYWw7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29uc3QgcGFyYW1zOiBUSFJFRS5NZXNoU3RhbmRhcmRNYXRlcmlhbFBhcmFtZXRlcnMgPSB7XHJcbiAgICAgICAgICAgICAgICAvLyBzaWRlOiBtYXRlcmlhbC5zaWRlID8gbWF0ZXJpYWwuc2lkZSA6IEZyb250U2lkZSxcclxuICAgICAgICAgICAgICAgIG5hbWU6IG5hbWUsXHJcbiAgICAgICAgICAgICAgICByb3VnaG5lc3M6IHZhcmlhdGlvbi5tYXRlcmlhbC5yb3VnaG5lc3NWYWx1ZSA/IHZhcmlhdGlvbi5tYXRlcmlhbC5yb3VnaG5lc3NWYWx1ZSA6IDEsXHJcbiAgICAgICAgICAgICAgICBtZXRhbG5lc3M6IHZhcmlhdGlvbi5tYXRlcmlhbC5tZXRhbG5lc3NWYWx1ZSA/IHZhcmlhdGlvbi5tYXRlcmlhbC5tZXRhbG5lc3NWYWx1ZSA6IDAsXHJcbiAgICAgICAgICAgICAgICBlbnZNYXBJbnRlbnNpdHk6IHZhcmlhdGlvbi5tYXRlcmlhbC5lbnZNYXBJbnRlbnNpdHkgPyB2YXJpYXRpb24ubWF0ZXJpYWwuZW52TWFwSW50ZW5zaXR5IDogMC4wMVxyXG4gICAgICAgICAgICAgICAgLy8gd2lyZWZyYW1lOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgLy8gb3BhY2l0eTogMC4zLFxyXG4gICAgICAgICAgICAgICAgLy8gdHJhbnNwYXJlbnQ6IHRydWUsXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIGlmICh2YXJpYXRpb24ubWF0ZXJpYWwuZGlzcGxhY2VtZW50VmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIHBhcmFtcy5kaXNwbGFjZW1lbnRTY2FsZSA9IHZhcmlhdGlvbi5tYXRlcmlhbC5kaXNwbGFjZW1lbnRWYWx1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodmFyaWF0aW9uLm1hdGVyaWFsLm9wYWNpdHkpIHtcclxuICAgICAgICAgICAgICAgIHBhcmFtcy5vcGFjaXR5ID0gdmFyaWF0aW9uLm1hdGVyaWFsLm9wYWNpdHk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHZhcmlhdGlvbi5tYXRlcmlhbC50cmFuc3BhcmVudCkge1xyXG4gICAgICAgICAgICAgICAgcGFyYW1zLnRyYW5zcGFyZW50ID0gdmFyaWF0aW9uLm1hdGVyaWFsLnRyYW5zcGFyZW50O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh2YXJpYXRpb24ubWF0ZXJpYWwuZW1pc3NpdmVWYWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgcGFyYW1zLmVtaXNzaXZlID0gdmFyaWF0aW9uLm1hdGVyaWFsLmVtaXNzaXZlVmFsdWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHZhcmlhdGlvbi5tYXRlcmlhbC5lbWlzc2l2ZUludGVuc2l0eVZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICBwYXJhbXMuZW1pc3NpdmVJbnRlbnNpdHkgPSB2YXJpYXRpb24ubWF0ZXJpYWwuZW1pc3NpdmVJbnRlbnNpdHlWYWx1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodmFyaWF0aW9uLm1hdGVyaWFsLnRleHR1cmUpIHtcclxuICAgICAgICAgICAgICAgIHBhcmFtcy5tYXAgPSB2YXJpYXRpb24ubWF0ZXJpYWwudGV4dHVyZTtcclxuICAgICAgICAgICAgICAgIHBhcmFtcy5tYXAubmVlZHNVcGRhdGUgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh2YXJpYXRpb24ubWF0ZXJpYWwuYW8pIHtcclxuICAgICAgICAgICAgICAgIHBhcmFtcy5hb01hcCA9IHZhcmlhdGlvbi5tYXRlcmlhbC5hbztcclxuICAgICAgICAgICAgICAgIHBhcmFtcy5hb01hcC5uZWVkc1VwZGF0ZSA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHZhcmlhdGlvbi5tYXRlcmlhbC5yb3VnaG5lc3MpIHtcclxuICAgICAgICAgICAgICAgIHBhcmFtcy5yb3VnaG5lc3NNYXAgPSB2YXJpYXRpb24ubWF0ZXJpYWwucm91Z2huZXNzO1xyXG4gICAgICAgICAgICAgICAgcGFyYW1zLnJvdWdobmVzc01hcC5uZWVkc1VwZGF0ZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAvLyB2YXJpYXRpb24ubWF0ZXJpYWwucm91Z2huZXNzLm1hZ0ZpbHRlciA9IE5lYXJlc3RGaWx0ZXI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHZhcmlhdGlvbi5tYXRlcmlhbC5tZXRhbG5lc3MpIHtcclxuICAgICAgICAgICAgICAgIHBhcmFtcy5tZXRhbG5lc3NNYXAgPSB2YXJpYXRpb24ubWF0ZXJpYWwubWV0YWxuZXNzO1xyXG4gICAgICAgICAgICAgICAgcGFyYW1zLm1ldGFsbmVzc01hcC5uZWVkc1VwZGF0ZSA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHZhcmlhdGlvbi5tYXRlcmlhbC5ub3JtYWwpIHtcclxuICAgICAgICAgICAgICAgIHBhcmFtcy5ub3JtYWxNYXAgPSB2YXJpYXRpb24ubWF0ZXJpYWwubm9ybWFsO1xyXG4gICAgICAgICAgICAgICAgcGFyYW1zLm5vcm1hbE1hcC5uZWVkc1VwZGF0ZSA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHZhcmlhdGlvbi5tYXRlcmlhbC5kaXNwbGFjZW1lbnQpIHtcclxuICAgICAgICAgICAgICAgIHBhcmFtcy5kaXNwbGFjZW1lbnRNYXAgPSB2YXJpYXRpb24ubWF0ZXJpYWwuZGlzcGxhY2VtZW50O1xyXG4gICAgICAgICAgICAgICAgcGFyYW1zLmRpc3BsYWNlbWVudE1hcC5uZWVkc1VwZGF0ZSA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHZhcmlhdGlvbi5tYXRlcmlhbC5lbWlzc2l2ZSkge1xyXG4gICAgICAgICAgICAgICAgcGFyYW1zLmVtaXNzaXZlTWFwID0gdmFyaWF0aW9uLm1hdGVyaWFsLmVtaXNzaXZlO1xyXG4gICAgICAgICAgICAgICAgcGFyYW1zLmVtaXNzaXZlTWFwLm5lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodmFyaWF0aW9uLm1hdGVyaWFsLmVudk1hcCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHZhcmlhdGlvbi5tYXRlcmlhbC5lbnZNYXBJbnRlbnNpdHkgIT0gbnVsbCB8fCAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zLmVudk1hcCA9IHZhcmlhdGlvbi5tYXRlcmlhbC5lbnZNYXA7XHJcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zLmVudk1hcC5uZWVkc1VwZGF0ZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyaWF0aW9uLm1hdGVyaWFsLmVudk1hcC5tYXBwaW5nID0gVEhSRUUuRXF1aXJlY3Rhbmd1bGFyUmVmbGVjdGlvbk1hcHBpbmc7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyaWF0aW9uLm1hdGVyaWFsLmVudk1hcC5taW5GaWx0ZXIgPSBUSFJFRS5OZWFyZXN0RmlsdGVyO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhcmlhdGlvbi5tYXRlcmlhbC5lbnZNYXAubWFnRmlsdGVyID0gVEhSRUUuTmVhcmVzdEZpbHRlcjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodmFyaWF0aW9uLm1hdGVyaWFsLnNpZGUpIHtcclxuICAgICAgICAgICAgICAgIHBhcmFtcy5zaWRlID0gdmFyaWF0aW9uLm1hdGVyaWFsLnNpZGU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNvbnN0IG5ld01hdGVyaWFsOiBUSFJFRS5NZXNoU3RhbmRhcmRNYXRlcmlhbCA9IG5ldyBUSFJFRS5NZXNoU3RhbmRhcmRNYXRlcmlhbChwYXJhbXMpO1xyXG4gICAgICAgICAgICBuZXdNYXRlcmlhbC5jb2xvci5zZXRSR0IoMSwgMSwgMSk7XHJcbiAgICAgICAgICAgIG5ld01hdGVyaWFsLm5lZWRzVXBkYXRlID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiBuZXdNYXRlcmlhbDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfc2V0TGFzdEtub3duVmFyaWF0aW9ucyhpZDogc3RyaW5nLCB2YXJpYXRpb246IFZhcmlhdGlvbltdKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5fbGFzdEtub3duVmFyaWF0aW9ucy5zZXQoaWQsIHZhcmlhdGlvbik7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfZ2V0TGFzdEtub3duVmFyaWF0aW9ucyhpZDogc3RyaW5nKTogVmFyaWF0aW9uW10ge1xyXG4gICAgICAgIGlmICh0aGlzLl9sYXN0S25vd25WYXJpYXRpb25zLmhhcyhpZCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2xhc3RLbm93blZhcmlhdGlvbnMuZ2V0KGlkKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG59XHJcbiJdfQ==
453
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFyaWF0aW9uLWhlbHBlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9oZWxwZXIvdmFyaWF0aW9uLWhlbHBlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLDBEQUEwRCxDQUFDO0FBQ3RGLE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLDZCQUE2QixDQUFDO0FBQzlELE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUVoRCxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFDN0MsT0FBTyxLQUFLLEtBQUssTUFBTSxPQUFPLENBQUM7QUFDL0IsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBQ3hELE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUVoRCxNQUFNLE9BQU8sZUFBZTtJQUE1QjtRQUdZLGdCQUFXLEdBQXdCLEVBQUUsQ0FBQztRQUV0Qyx5QkFBb0IsR0FBNkIsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQThidkUsQ0FBQztJQTViVSxVQUFVO1FBQ2IsTUFBTSxZQUFZLEdBQWtCLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFDbkYsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFVBQVUsRUFBRSxFQUFFO1lBQ2hDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRTtnQkFDN0IsSUFBSTtvQkFDQSxJQUFJLFNBQVMsQ0FBQyxRQUFRLEVBQUU7d0JBQ3BCLElBQUksU0FBUyxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUU7NEJBQzVCLFNBQVMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO3lCQUN4Qzt3QkFDRCxJQUFJLFNBQVMsQ0FBQyxRQUFRLENBQUMsTUFB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RyxJQUFJLENBQUM7WUFFL0IsT0FBTyxXQUFXLENBQUM7U0FDdEI7SUFDTCxDQUFDO0lBRU8sdUJBQXVCLENBQUMsRUFBVSxFQUFFLFNBQXNCO1FBQzlELElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQ2pELENBQUM7SUFFTyx1QkFBdUIsQ0FBQyxFQUFVO1FBQ3RDLElBQUksSUFBSSxDQUFDLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRTtZQUNuQyxPQUFPLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7U0FDNUM7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0NBRUoiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0RlY29Ob2RlVHlwZX0gZnJvbSBcIkBjb2xpam5pdC9jb25maWd1cmF0b3JhcGkvYnVpbGQvZW51bS9kZWNvLW5vZGUtdHlwZS5lbnVtXCI7XHJcbmltcG9ydCB7VmFyaWF0aW9uU2V0dGluZ3N9IGZyb20gXCIuLi9tb2RlbC92YXJpYXRpb24tc2V0dGluZ3NcIjtcclxuaW1wb3J0IHtBc3NldFV0aWxzfSBmcm9tIFwiLi4vdXRpbHMvYXNzZXQudXRpbHNcIjtcclxuaW1wb3J0IHtEZWNvTm9kZX0gZnJvbSBcIkBjb2xpam5pdC9jb25maWd1cmF0b3JhcGkvYnVpbGQvbW9kZWwvZGVjby1ub2RlXCI7XHJcbmltcG9ydCB7VmFyaWF0aW9ufSBmcm9tIFwiLi4vbW9kZWwvdmFyaWF0aW9uXCI7XHJcbmltcG9ydCAqIGFzIFRIUkVFIGZyb20gXCJ0aHJlZVwiO1xyXG5pbXBvcnQge1ZhcmlhdGlvblV0aWxzfSBmcm9tIFwiLi4vdXRpbHMvdmFyaWF0aW9uLXV0aWxzXCI7XHJcbmltcG9ydCB7SW1hZ2VVdGlsc30gZnJvbSAnLi4vdXRpbHMvaW1hZ2UudXRpbHMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFZhcmlhdGlvbkhlbHBlciB7XHJcblxyXG4gICAgcHVibGljIGFzc2V0UGF0aDogc3RyaW5nO1xyXG4gICAgcHJpdmF0ZSBfdmFyaWF0aW9uczogVmFyaWF0aW9uU2V0dGluZ3NbXSA9IFtdO1xyXG5cclxuICAgIHByaXZhdGUgX2xhc3RLbm93blZhcmlhdGlvbnM6IE1hcDxzdHJpbmcsIFZhcmlhdGlvbltdPiA9IG5ldyBNYXAoKTtcclxuXHJcbiAgICBwdWJsaWMgY2xlYXJDYWNoZSgpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCB2YXJpYXRpb25NYXA6IFZhcmlhdGlvbltdW10gPSBBcnJheS5mcm9tKHRoaXMuX2xhc3RLbm93blZhcmlhdGlvbnMudmFsdWVzKCkpO1xyXG4gICAgICAgIHZhcmlhdGlvbk1hcC5mb3JFYWNoKCh2YXJpYXRpb25zKSA9PiB7XHJcbiAgICAgICAgICAgIHZhcmlhdGlvbnMuZm9yRWFjaCgodmFyaWF0aW9uKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYXRpb24ubWF0ZXJpYWwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhcmlhdGlvbi5tYXRlcmlhbC50ZXh0dXJlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYXRpb24ubWF0ZXJpYWwudGV4dHVyZS5kaXNwb3NlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhcmlhdGlvbi5tYXRlcmlhbC5ub3JtYWwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhdGlvbi5tYXRlcmlhbC5ub3JtYWwuZGlzcG9zZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYXRpb24ubWF0ZXJpYWwubWV0YWxuZXNzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYXRpb24ubWF0ZXJpYWwubWV0YWxuZXNzLmRpc3Bvc2UoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFyaWF0aW9uLm1hdGVyaWFsLnJvdWdobmVzcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWF0aW9uLm1hdGVyaWFsLnJvdWdobmVzcy5kaXNwb3NlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhcmlhdGlvbi5tYXRlcmlhbC5hbykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWF0aW9uLm1hdGVyaWFsLmFvLmRpc3Bvc2UoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgVmFyaWF0aW9uVXRpbHMuQ2xlYXJDYWNoZSgpO1xyXG4gICAgICAgIEltYWdlVXRpbHMuQ2xlYXJDYWNoZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhc3luYyBsb2FkUGFydChvYmo6IFRIUkVFLk9iamVjdDNELCBwYXJ0czogYW55W10sIHVzZVBicjogYm9vbGVhbiA9IGZhbHNlKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgY29uc3QgbGVuOiBudW1iZXIgPSBwYXJ0cy5sZW5ndGg7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGlmIChwYXJ0c1tpXS5kZWNvTm9kZSAmJiBwYXJ0c1tpXS5kZWNvTm9kZS5nYW1lT2JqZWN0TmFtZSAmJiBwYXJ0c1tpXS5kZWNvTm9kZS50eXBlID09PSBEZWNvTm9kZVR5cGUuUGFydCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhcnRTZXR0aW5nczogVmFyaWF0aW9uU2V0dGluZ3MgPVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBWYXJpYXRpb25VdGlscy5Mb2FkVmFyaWF0aW9uKHRoaXMuYXNzZXRQYXRoLCBwYXJ0c1tpXS5kZWNvTm9kZS5nYW1lT2JqZWN0TmFtZSB8fCBwYXJ0c1tpXS5kZWNvSWQpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChwYXJ0U2V0dGluZ3MpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFydFZhcmlhdGlvbjogVmFyaWF0aW9uID0gbmV3IFZhcmlhdGlvbigpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJ0VmFyaWF0aW9uLmRlY29JZCA9IHBhcnNlRmxvYXQocGFydHNbaV0uZGVjb05vZGUuaWQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJ0VmFyaWF0aW9uLmJyYW5kSWQgPSBwYXJ0c1tpXS5kZWNvTm9kZS5icmFuZElkO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJ0VmFyaWF0aW9uLmdhbWVPYmplY3ROYW1lID0gcGFydHNbaV0uZGVjb05vZGUuZ2FtZU9iamVjdE5hbWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnRWYXJpYXRpb24ubWF0ZXJpYWwgPSBhd2FpdCBBc3NldFV0aWxzLkNyZWF0ZU1hdGVyaWFsRnJvbUFzc2V0KHBhcnRTZXR0aW5ncyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHBhcnRzW2ldLnZhcmlhdGlvbiA9IHBhcnRWYXJpYXRpb247XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2FwcGx5TWF0ZXJpYWxQYXJ0KG9iaiwgcGFydFZhcmlhdGlvbiwgcGFydHNbaV0ubm9kZSwgdXNlUGJyKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhc3luYyBsb2FkVmFyaWF0aW9uKG9iajogVEhSRUUuT2JqZWN0M0QsIHBhcnRzOiBhbnlbXSwgdXNlUGJyOiBib29sZWFuID0gZmFsc2UpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjb25zdCBsZW46IG51bWJlciA9IHBhcnRzLmxlbmd0aDtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdmFyaWF0aW9uczogRGVjb05vZGVbXSA9IHBhcnRzW2ldLnZhcmlhdGlvbnM7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXZhcmlhdGlvbnMgfHwgdmFyaWF0aW9ucy5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fZ2V0TGFzdEtub3duVmFyaWF0aW9ucyhwYXJ0c1tpXS5ub2RlSWQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnRzW2ldLnZhcmlhdGlvbnMgPSB0aGlzLl9nZXRMYXN0S25vd25WYXJpYXRpb25zKHBhcnRzW2ldLm5vZGVJZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2FwcGx5VmFyaWF0aW9ucyhvYmosIHBhcnRzW2ldLCB1c2VQYnIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjb25zdCBsYXN0S25vd25WYXJpYXRpb25zOiBWYXJpYXRpb25bXSA9IFtdO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdmFyaWF0aW9uUHJvbWlzZTogUHJvbWlzZTxhbnk+W10gPSBbXTtcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdmFyaWF0aW9ucy5sZW5ndGg7IGorKykge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhcmlhdGlvblByb21pc2UucHVzaChcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkVGhlVmFyaWF0aW9uKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWF0aW9uc1tqXS5nYW1lT2JqZWN0TmFtZSB8fCBwYXJ0c1tpXS5kZWNvSWQpLnRoZW4oYXN5bmMgKHZhcmlhdGlvblNldHRpbmdzOiBWYXJpYXRpb25TZXR0aW5ncykgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3VmFyaWF0aW9uOiBWYXJpYXRpb24gPSBuZXcgVmFyaWF0aW9uKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdWYXJpYXRpb24uZGVjb0lkID0gcGFyc2VGbG9hdCh2YXJpYXRpb25zW2pdLmlkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld1ZhcmlhdGlvbi5icmFuZElkID0gdmFyaWF0aW9uc1tqXS5icmFuZElkO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3VmFyaWF0aW9uLm9wdGlvblRleHQgPSAodmFyaWF0aW9uc1tqXSBhcyBhbnkpLm9wdGlvblRleHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdWYXJpYXRpb24uZ2FtZU9iamVjdE5hbWUgPSB2YXJpYXRpb25zW2pdLmdhbWVPYmplY3ROYW1lO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3VmFyaWF0aW9uLnN1cHBsaWVyQXJ0aWNsZU5yID0gKHZhcmlhdGlvbnNbal0gYXMgYW55KS5zdXBwbGllckFydGljbGVOcjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld1ZhcmlhdGlvbi5tYXRlcmlhbElkID0gKHZhcmlhdGlvbnNbal0gYXMgYW55KS5tYXRlcmlhbElkO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3VmFyaWF0aW9uLm1hdGVyaWFsID0gdmFyaWF0aW9uU2V0dGluZ3MubWF0ZXJpYWwgPyB2YXJpYXRpb25TZXR0aW5ncy5tYXRlcmlhbCA6IGF3YWl0IEFzc2V0VXRpbHMuQ3JlYXRlTWF0ZXJpYWxGcm9tQXNzZXQodmFyaWF0aW9uU2V0dGluZ3MpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdEtub3duVmFyaWF0aW9ucy5wdXNoKG5ld1ZhcmlhdGlvbik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGF3YWl0IFByb21pc2UuYWxsKHZhcmlhdGlvblByb21pc2UpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fc2V0TGFzdEtub3duVmFyaWF0aW9ucyhgJHtwYXJ0c1tpXS5ub2RlSWR9XyR7cGFydHNbaV0ubm9kZX1gLCBsYXN0S25vd25WYXJpYXRpb25zKTtcclxuICAgICAgICAgICAgICAgIHBhcnRzW2ldLnZhcmlhdGlvbnMgPSBsYXN0S25vd25WYXJpYXRpb25zO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fYXBwbHlWYXJpYXRpb25zKG9iaiwgcGFydHNbaV0sIHVzZVBicik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQoaWQ6IHN0cmluZyk6IFZhcmlhdGlvblNldHRpbmdzIHtcclxuICAgICAgICBjb25zdCBsZW46IG51bWJlciA9IHRoaXMuX3ZhcmlhdGlvbnMubGVuZ3RoO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuX3ZhcmlhdGlvbnNbaV0uaWQgJiYgdGhpcy5fdmFyaWF0aW9uc1tpXS5pZCA9PT0gaWQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl92YXJpYXRpb25zW2ldO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzZXQodmFyaWF0aW9uczogVmFyaWF0aW9uU2V0dGluZ3MpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBpZHg6IG51bWJlciA9IHRoaXMuX3ZhcmlhdGlvbnMuZmluZEluZGV4KHYgPT4gdi5pZCA9PT0gdmFyaWF0aW9ucy5pZCk7XHJcbiAgICAgICAgaWYgKGlkeCA+IC0xKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3ZhcmlhdGlvbnNbaWR4XSA9IHZhcmlhdGlvbnM7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5fdmFyaWF0aW9ucy5wdXNoKHZhcmlhdGlvbnMpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcHJlbG9hZFZhcmlhdGlvbnMoZmlsZU5hbWVzOiBzdHJpbmdbXSk6IHZvaWQge1xyXG4gICAgICAgIGZpbGVOYW1lcy5mb3JFYWNoKChmaWxlTmFtZTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChmaWxlTmFtZSAmJiAhdGhpcy5nZXQoZmlsZU5hbWUpKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBzZXR0aW5ncyA9IG5ldyBWYXJpYXRpb25TZXR0aW5ncygpO1xyXG4gICAgICAgICAgICAgICAgc2V0dGluZ3MuaWQgPSBmaWxlTmFtZTtcclxuICAgICAgICAgICAgICAgIHNldHRpbmdzLmxvYWRpbmcgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fdmFyaWF0aW9ucy5wdXNoKHNldHRpbmdzKTtcclxuICAgICAgICAgICAgICAgIGxldCBhc3NldFBhdGg6IHN0cmluZyA9IHRoaXMuYXNzZXRQYXRoO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFhc3NldFBhdGguZW5kc1dpdGgoJy8nKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGFzc2V0UGF0aCArPSAnLyc7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBWYXJpYXRpb25VdGlscy5Mb2FkVmFyaWF0aW9uKGFzc2V0UGF0aCwgZmlsZU5hbWUpLnRoZW4oKHZhcmlhdGlvblNldHRpbmdzOiBWYXJpYXRpb25TZXR0aW5ncykgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHNldHRpbmdzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICBzZXR0aW5ncy5sb2FkZWQubmV4dCh2YXJpYXRpb25TZXR0aW5ncyk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhcmlhdGlvblNldHRpbmdzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0KHZhcmlhdGlvblNldHRpbmdzKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhc3luYyBsb2FkVGhlVmFyaWF0aW9uKGZpbGVOYW1lOiBzdHJpbmcpOiBQcm9taXNlPFZhcmlhdGlvblNldHRpbmdzPiB7XHJcbiAgICAgICAgaWYgKCFmaWxlTmFtZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuZ2V0KGZpbGVOYW1lKSkge1xyXG4gICAgICAgICAgICBjb25zdCBzZXR0aW5ncyA9IHRoaXMuZ2V0KGZpbGVOYW1lKTtcclxuICAgICAgICAgICAgaWYgKHNldHRpbmdzLmxvYWRpbmcpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLl93YWl0Rm9yVmFyaWF0aW9uVG9Mb2FkKHNldHRpbmdzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gc2V0dGluZ3M7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX3dhaXRGb3JWYXJpYXRpb25Ub0xvYWQoc2V0dGluZ3M6IFZhcmlhdGlvblNldHRpbmdzKTogUHJvbWlzZTxWYXJpYXRpb25TZXR0aW5ncz4ge1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZTogRnVuY3Rpb24pID0+IHtcclxuICAgICAgICAgICAgc2V0dGluZ3MubG9hZGVkLnN1YnNjcmliZSgodmFsdWUpID0+IHtcclxuICAgICAgICAgICAgICAgIHJlc29sdmUodmFsdWUpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF9nZXRDaGlsZHJlbkZpbHRlckJ5UHJvcChvYmo6IFRIUkVFLk9iamVjdDNELCB1c2VyRGF0YU9iamVjdFByb3A6IHN0cmluZywgcHJvcDogc3RyaW5nLCB2YWx1ZTogYW55KTogVEhSRUUuT2JqZWN0M0RbXSB7XHJcbiAgICAgICAgcmV0dXJuIG9iai5jaGlsZHJlbi5maWx0ZXIoKGNoaWxkKSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiBjaGlsZC51c2VyRGF0YSAmJlxyXG4gICAgICAgICAgICAgICAgY2hpbGQudXNlckRhdGEuaGFzT3duUHJvcGVydHkodXNlckRhdGFPYmplY3RQcm9wKSAmJlxyXG4gICAgICAgICAgICAgICAgY2hpbGQudXNlckRhdGFbdXNlckRhdGFPYmplY3RQcm9wXS5oYXNPd25Qcm9wZXJ0eShwcm9wKSAmJlxyXG4gICAgICAgICAgICAgICAgY2hpbGQudXNlckRhdGFbdXNlckRhdGFPYmplY3RQcm9wXVtwcm9wXSA9PT0gdmFsdWU7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfYXBwbHlNYXRlcmlhbFBhcnQob2JqOiBUSFJFRS5PYmplY3QzRCwgcGFydE1hdGVyaWFsOiBhbnksIG5vZGVJZDogYW55LCB1c2VQYnI6IGJvb2xlYW4gPSBmYWxzZSk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IGNoaWxkcmVuID0gdGhpcy5fZ2V0Q2hpbGRyZW5GaWx0ZXJCeVByb3Aob2JqLCAnc2VsZWN0aW9uJywgJ25vZGUnLCBub2RlSWQpO1xyXG4gICAgICAgIGNvbnN0IGxlbjogbnVtYmVyID0gY2hpbGRyZW4ubGVuZ3RoO1xyXG4gICAgICAgIGZvciAobGV0IGk6IG51bWJlciA9IDA7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICBjb25zdCBjaGlsZCA9IGNoaWxkcmVuW2ldO1xyXG4gICAgICAgICAgICBpZiAoY2hpbGQgIT09IG51bGwgJiYgY2hpbGQgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgY2hpbGQudHJhdmVyc2UoKG1lc2gpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAobWVzaCBpbnN0YW5jZW9mIFRIUkVFLk1lc2ggJiYgcGFydE1hdGVyaWFsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KG1lc2gubWF0ZXJpYWwpKSB7IC8vIG11bHRpbWF0ZXJpYWwgc3VwcG9ydFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaiA9IDAsIGpsZW46IG51bWJlciA9IG1lc2gubWF0ZXJpYWwubGVuZ3RoOyBqIDwgamxlbjsgaisrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc2gubWF0ZXJpYWxbal0ubmFtZS50b0xvd2VyQ2FzZSgpLmluZGV4T2YoJ2ZpeGVkX2ZyYW1lJykgIT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc2gubWF0ZXJpYWxbal0gPSB0aGlzLl9zZXRNZXNoTWF0ZXJpYWxGcm9tVmFyaWF0aW9uKG1lc2gubWF0ZXJpYWxbal0ubmFtZSwgcGFydE1hdGVyaWFsLCB1c2VQYnIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNoLm1hdGVyaWFsLm5hbWUudG9Mb3dlckNhc2UoKS5pbmRleE9mKCdmaXhlZF9mcmFtZScpICE9PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc2gubWF0ZXJpYWwgPSB0aGlzLl9zZXRNZXNoTWF0ZXJpYWxGcm9tVmFyaWF0aW9uKG1lc2gubWF0ZXJpYWwubmFtZSwgcGFydE1hdGVyaWFsLCB1c2VQYnIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfYXBwbHlWYXJpYXRpb25zKG9iajogVEhSRUUuT2JqZWN0M0QsIHBhcnQ6IGFueSwgdXNlUGJyOiBib29sZWFuID0gZmFsc2UpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBjaGlsZHJlbiA9IHRoaXMuX2dldENoaWxkcmVuRmlsdGVyQnlQcm9wKG9iaiwgJ3NlbGVjdGlvbicsICdub2RlJywgcGFydC5ub2RlKTtcclxuICAgICAgICBjb25zdCBsZW46IG51bWJlciA9IGNoaWxkcmVuLmxlbmd0aDtcclxuICAgICAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAwOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgY29uc3QgY2hpbGQgPSBjaGlsZHJlbltpXTtcclxuICAgICAgICAgICAgaWYgKGNoaWxkICE9PSBudWxsICYmIGNoaWxkICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgIGNoaWxkLnRyYXZlcnNlKChtZXNoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG1lc2ggaW5zdGFuY2VvZiBUSFJFRS5NZXNoICYmIHBhcnQudmFyaWF0aW9ucyAmJiBwYXJ0LnZhcmlhdGlvbnMubGVuZ3RoID4gMCAmJiBtZXNoLm5hbWUudG9Mb3dlckNhc2UoKS5pbmRleE9mKCdjXycpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgcGFydC52YXJpYXRpb25zLmxlbmd0aDsgaisrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2YXJpYXRpb246IFZhcmlhdGlvbiA9IHBhcnQudmFyaWF0aW9uc1tqXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYXRpb24ubWF0ZXJpYWwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtYXRlcmlhbFRvU2VhcmNoOiBzdHJpbmcgPSAhIXZhcmlhdGlvbi5tYXRlcmlhbElkID8gdmFyaWF0aW9uLm1hdGVyaWFsSWQudG9Mb3dlckNhc2UoKSA6ICdkZWZhdWx0JztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShtZXNoLm1hdGVyaWFsKSkgeyAvLyBtdWx0aW1hdGVyaWFsIHN1cHBvcnRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgbSA9IDAsIG1sZW46IG51bWJlciA9IG1lc2gubWF0ZXJpYWwubGVuZ3RoOyBtIDwgbWxlbjsgbSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzaC5tYXRlcmlhbFttXS5uYW1lLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihtYXRlcmlhbFRvU2VhcmNoKSAhPT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFyaWF0aW9uLm1hdGVyaWFsIGluc3RhbmNlb2YgVEhSRUUuTWF0ZXJpYWwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzaC5tYXRlcmlhbFttXSA9IHZhcmlhdGlvbi5tYXRlcmlhbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNoLm1hdGVyaWFsW21dID0gdGhpcy5fc2V0TWVzaE1hdGVyaWFsRnJvbVZhcmlhdGlvbihtZXNoLm1hdGVyaWFsW21dLm5hbWUsIHZhcmlhdGlvbiwgdXNlUGJyKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzaC5tYXRlcmlhbC5uYW1lLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihtYXRlcmlhbFRvU2VhcmNoKSAhPT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYXRpb24ubWF0ZXJpYWwgaW5zdGFuY2VvZiBUSFJFRS5NYXRlcmlhbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc2gubWF0ZXJpYWwgPSB2YXJpYXRpb24ubWF0ZXJpYWw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc2gubWF0ZXJpYWwgPSB0aGlzLl9zZXRNZXNoTWF0ZXJpYWxGcm9tVmFyaWF0aW9uKG1lc2gubWF0ZXJpYWwubmFtZSwgdmFyaWF0aW9uLCB1c2VQYnIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfc2V0TWVzaE1hdGVyaWFsRnJvbVZhcmlhdGlvbihuYW1lOiBzdHJpbmcsIHZhcmlhdGlvbjogVmFyaWF0aW9uLCB1c2VQYnI6IGJvb2xlYW4gPSBmYWxzZSk6IFRIUkVFLk1hdGVyaWFsIHtcclxuICAgICAgICBjb25zdCBtYXRlcmlhbCA9IHZhcmlhdGlvbi5tYXRlcmlhbDtcclxuICAgICAgICBpZiAobWF0ZXJpYWwudGV4dHVyZSkge1xyXG4gICAgICAgICAgICBtYXRlcmlhbC50ZXh0dXJlLm5lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICAgICAgICAgICAgbWF0ZXJpYWwudGV4dHVyZS5tYXBwaW5nID0gVEhSRUUuRXF1aXJlY3Rhbmd1bGFyUmVmbGVjdGlvbk1hcHBpbmc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghdXNlUGJyKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG5ld01hdGVyaWFsOiBUSFJFRS5NZXNoUGhvbmdNYXRlcmlhbCA9IG5ldyBUSFJFRS5NZXNoUGhvbmdNYXRlcmlhbCh7XHJcbiAgICAgICAgICAgICAgICBuYW1lOiBuYW1lLFxyXG4gICAgICAgICAgICAgICAgc2hpbmluZXNzOiBtYXRlcmlhbC5zaGluaW5lc3MsXHJcbiAgICAgICAgICAgICAgICBzcGVjdWxhcjogbWF0ZXJpYWwuc3BlY3VsYXIsXHJcbiAgICAgICAgICAgICAgICBtYXA6IG1hdGVyaWFsLnRleHR1cmUsXHJcbiAgICAgICAgICAgICAgICBub3JtYWxNYXA6IG1hdGVyaWFsLm5vcm1hbFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgbmV3TWF0ZXJpYWwuY29sb3Iuc2V0UkdCKDAuOCwgMC44LCAwLjgpO1xyXG4gICAgICAgICAgICBuZXdNYXRlcmlhbC5uZWVkc1VwZGF0ZSA9IHRydWU7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXdNYXRlcmlhbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG1hdGVyaWFsLnNoZWVuIHx8IG1hdGVyaWFsLnNoZWVuQ29sb3IgfHwgbWF0ZXJpYWwucmVmbGVjdGl2aXR5KSB7IC8vIFRPRE86IFByb3BlciBjaGVjayBmb3IgYWxsIHVuaXF1ZSBwaHlzaWNhbCBtYXRlcmlhbCBwcm9wZXJ0aWVzXHJcbiAgICAgICAgICAgIGNvbnN0IHBhcmFtczogVEhSRUUuTWVzaFBoeXNpY2FsTWF0ZXJpYWxQYXJhbWV0ZXJzID0ge1xyXG4gICAgICAgICAgICAgICAgLy8gc2lkZTogbWF0ZXJpYWwuc2lkZSA/IG1hdGVyaWFsLnNpZGUgOiBGcm9udFNpZGUsXHJcbiAgICAgICAgICAgICAgICBuYW1lOiBuYW1lLFxyXG4gICAgICAgICAgICAgICAgcm91Z2huZXNzOiBtYXRlcmlhbC5yb3VnaG5lc3NWYWx1ZSA/IG1hdGVyaWFsLnJvdWdobmVzc1ZhbHVlIDogMSxcclxuICAgICAgICAgICAgICAgIG1ldGFsbmVzczogbWF0ZXJpYWwubWV0YWxuZXNzVmFsdWUgPyBtYXRlcmlhbC5tZXRhbG5lc3NWYWx1ZSA6IDAsXHJcbiAgICAgICAgICAgICAgICBlbnZNYXBJbnRlbnNpdHk6IG1hdGVyaWFsLmVudk1hcEludGVuc2l0eSA/IG1hdGVyaWFsLmVudk1hcEludGVuc2l0eSA6IDAuMDEsXHJcbiAgICAgICAgICAgICAgICBjbGVhcmNvYXRNYXA6IG1hdGVyaWFsLmNsZWFyY29hdE1hcCA/IG1hdGVyaWFsLmNsZWFyY29hdE1hcCA6IG51bGwsXHJcbiAgICAgICAgICAgICAgICBjbGVhcmNvYXRSb3VnaG5lc3NNYXA6IG1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzc01hcCA/IG1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzc01hcCA6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAvLyB3aXJlZnJhbWU6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAvLyBvcGFjaXR5OiAwLjMsXHJcbiAgICAgICAgICAgICAgICAvLyB0cmFuc3BhcmVudDogdHJ1ZSxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgaWYgKG1hdGVyaWFsLmRpc3BsYWNlbWVudFZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICBwYXJhbXMuZGlzcGxhY2VtZW50U2NhbGUgPSBtYXRlcmlhbC5kaXNwbGFjZW1lbnRWYWx1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAobWF0ZXJpYWwub3BhY2l0eSkge1xyXG4gICAgICAgICAgICAgICAgcGFyYW1zLm9wYWNpdHkgPSBtYXRlcmlhbC5vcGFjaXR5O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChtYXRlcmlhbC50cmFuc3BhcmVuY3kpIHtcclxuICAgICAgICAgICAgICAgIHBhcmFtcy50cmFuc21pc3Npb24gPSBtYXRlcmlhbC50cmFuc3BhcmVuY3k7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKG1hdGVyaWFsLnRyYW5zbWlzc2lvbikge1xyXG4gICAgICAgICAgICAgICAgcGFyYW1zLnRyYW5zbWlzc2lvbiA9IG1hdGVyaWFsLnRyYW5zbWlzc2lvbjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAobWF0ZXJpYWwudHJhbnNwYXJlbnQpIHtcclxuICAgICAgICAgICAgICAgIHBhcmFtcy50cmFuc3BhcmVudCA9IG1hdGVyaWFsLnRyYW5zcGFyZW50O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChtYXRlcmlhbC5lbWlzc2l2ZVZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICBwYXJhbXMuZW1pc3NpdmUgPSBtYXRlcmlhbC5lbWlzc2l2ZVZhbHVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChtYXRlcmlhbC5lbWlzc2l2ZUludGVuc2l0eVZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICBwYXJhbXMuZW1pc3NpdmVJbnRlbnNpdHkgPSBtYXRlcmlhbC5lbWlzc2l2ZUludGVuc2l0eVZhbHVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChtYXRlcmlhbC50ZXh0dXJlKSB7XHJcbiAgICAgICAgICAgICAgICBwYXJhbXMubWFwID0gbWF0ZXJpYWwudGV4dHVyZTtcclxuICAgICAgICAgICAgICAgIHBhcmFtcy5tYXAubmVlZHNVcGRhdGUgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChtYXRlcmlhbC5hbykge1xyXG4gICAgICAgICAgICAgICAgcGFyYW1zLmFvTWFwID0gbWF0ZXJpYWwuYW87XHJcbiAgICAgICAgICAgICAgICBwYXJhbXMuYW9NYXAubmVlZHNVcGRhdGUgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChtYXRlcmlhbC5yb3VnaG5lc3MpIHtcclxuICAgICAgICAgICAgICAgIHBhcmFtcy5yb3VnaG5lc3NNYXAgPSBtYXRlcmlhbC5yb3VnaG5lc3M7XHJcbiAgICAgICAgICAgICAgICBwYXJhbXMucm91Z2huZXNzTWFwLm5lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIC8vIG1hdGVyaWFsLnJvdWdobmVzcy5tYWdGaWx0ZXIgPSBOZWFyZXN0RmlsdGVyO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChtYXRlcmlhbC5tZXRhbG5lc3MpIHtcclxuICAgICAgICAgICAgICAgIHBhcmFtcy5tZXRhbG5lc3NNYXAgPSBtYXRlcmlhbC5tZXRhbG5lc3M7XHJcbiAgICAgICAgICAgICAgICBwYXJhbXMubWV0YWxuZXNzTWFwLm5lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAobWF0ZXJpYWwubm9ybWFsKSB7XHJcbiAgICAgICAgICAgICAgICBwYXJhbXMubm9ybWFsTWFwID0gbWF0ZXJpYWwubm9ybWFsO1xyXG4gICAgICAgICAgICAgICAgcGFyYW1zLm5vcm1hbE1hcC5uZWVkc1VwZGF0ZSA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKG1hdGVyaWFsLmRpc3BsYWNlbWVudCkge1xyXG4gICAgICAgICAgICAgICAgcGFyYW1zLmRpc3BsYWNlbWVudE1hcCA9IG1hdGVyaWFsLmRpc3BsYWNlbWVudDtcclxuICAgICAgICAgICAgICAgIHBhcmFtcy5kaXNwbGFjZW1lbnRNYXAubmVlZHNVcGRhdGUgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChtYXRlcmlhbC5lbWlzc2l2ZSkge1xyXG4gICAgICAgICAgICAgICAgcGFyYW1zLmVtaXNzaXZlTWFwID0gbWF0ZXJpYWwuZW1pc3NpdmU7XHJcbiAgICAgICAgICAgICAgICBwYXJhbXMuZW1pc3NpdmVNYXAubmVlZHNVcGRhdGUgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChtYXRlcmlhbC5lbnZNYXApIHtcclxuICAgICAgICAgICAgICAgIGlmIChtYXRlcmlhbC5lbnZNYXBJbnRlbnNpdHkgIT0gbnVsbCB8fCAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zLmVudk1hcCA9IG1hdGVyaWFsLmVudk1hcDtcclxuICAgICAgICAgICAgICAgICAgICBwYXJhbXMuZW52TWFwLm5lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICBtYXRlcmlhbC5lbnZNYXAubWFwcGluZyA9IFRIUkVFLkVxdWlyZWN0YW5ndWxhclJlZmxlY3Rpb25NYXBwaW5nO1xyXG4gICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsLmVudk1hcC5taW5GaWx0ZXIgPSBUSFJFRS5OZWFyZXN0RmlsdGVyO1xyXG4gICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsLmVudk1hcC5tYWdGaWx0ZXIgPSBUSFJFRS5OZWFyZXN0RmlsdGVyO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChtYXRlcmlhbC5yZWZsZWN0aXZpdHkpIHtcclxuICAgICAgICAgICAgICAgIHBhcmFtcy5yZWZsZWN0aXZpdHkgPSBtYXRlcmlhbC5yZWZsZWN0aXZpdHk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKG1hdGVyaWFsLnNpZGUpIHtcclxuICAgICAgICAgICAgICAgIHBhcmFtcy5zaWRlID0gbWF0ZXJpYWwuc2lkZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc3QgbmV3TWF0ZXJpYWw6IFRIUkVFLk1lc2hQaHlzaWNhbE1hdGVyaWFsID0gbmV3IFRIUkVFLk1lc2hQaHlzaWNhbE1hdGVyaWFsKHBhcmFtcyk7XHJcbiAgICAgICAgICAgIG5ld01hdGVyaWFsLmNvbG9yLnNldFJHQigxLCAxLCAxKTtcclxuICAgICAgICAgICAgaWYgKG1hdGVyaWFsLnNoZWVuKSB7XHJcbiAgICAgICAgICAgICAgICBuZXdNYXRlcmlhbC5zaGVlbiA9IG1hdGVyaWFsLnNoZWVuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChtYXRlcmlhbC5zaGVlbkNvbG9yKSB7XHJcbiAgICAgICAgICAgICAgICBuZXdNYXRlcmlhbC5zaGVlbkNvbG9yID0gbWF0ZXJpYWwuc2hlZW5Db2xvcjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAobWF0ZXJpYWwuc2hlZW5Sb3VnaG5lc3MpIHtcclxuICAgICAgICAgICAgICAgIG5ld01hdGVyaWFsLnNoZWVuUm91Z2huZXNzID0gbWF0ZXJpYWwuc2hlZW5Sb3VnaG5lc3M7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKG1hdGVyaWFsLnNoZWVuQ29sb3JNYXApIHtcclxuICAgICAgICAgICAgICAgIG5ld01hdGVyaWFsLnNoZWVuQ29sb3JNYXAgPSBtYXRlcmlhbC5zaGVlbkNvbG9yTWFwO1xyXG4gICAgICAgICAgICAgICAgbmV3TWF0ZXJpYWwuc2hlZW5Db2xvck1hcC5uZWVkc1VwZGF0ZSA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKG1hdGVyaWFsLnNoZWVuUm91Z2huZXNzTWFwKSB7XHJcbiAgICAgICAgICAgICAgICBuZXdNYXRlcmlhbC5zaGVlblJvdWdobmVzc01hcCA9IG1hdGVyaWFsLnNoZWVuUm91Z2huZXNzTWFwO1xyXG4gICAgICAgICAgICAgICAgbmV3TWF0ZXJpYWwuc2hlZW5Sb3VnaG5lc3NNYXAubmVlZHNVcGRhdGUgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChtYXRlcmlhbC50cmFuc21pc3Npb24pIHtcclxuICAgICAgICAgICAgICAgIG5ld01hdGVyaWFsLnRyYW5zbWlzc2lvbiA9IG1hdGVyaWFsLnRyYW5zbWlzc2lvbjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgbmV3TWF0ZXJpYWwubmVlZHNVcGRhdGUgPSB0cnVlO1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3TWF0ZXJpYWw7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29uc3QgcGFyYW1zOiBUSFJFRS5NZXNoU3RhbmRhcmRNYXRlcmlhbFBhcmFtZXRlcnMgPSB7XHJcbiAgICAgICAgICAgICAgICAvLyBzaWRlOiBtYXRlcmlhbC5zaWRlID8gbWF0ZXJpYWwuc2lkZSA6IEZyb250U2lkZSxcclxuICAgICAgICAgICAgICAgIG5hbWU6IG5hbWUsXHJcbiAgICAgICAgICAgICAgICByb3VnaG5lc3M6IG1hdGVyaWFsLnJvdWdobmVzc1ZhbHVlID8gbWF0ZXJpYWwucm91Z2huZXNzVmFsdWUgOiAxLFxyXG4gICAgICAgICAgICAgICAgbWV0YWxuZXNzOiBtYXRlcmlhbC5tZXRhbG5lc3NWYWx1ZSA/IG1hdGVyaWFsLm1ldGFsbmVzc1ZhbHVlIDogMCxcclxuICAgICAgICAgICAgICAgIGVudk1hcEludGVuc2l0eTogbWF0ZXJpYWwuZW52TWFwSW50ZW5zaXR5ID8gbWF0ZXJpYWwuZW52TWFwSW50ZW5zaXR5IDogMC4wMVxyXG4gICAgICAgICAgICAgICAgLy8gd2lyZWZyYW1lOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgLy8gb3BhY2l0eTogMC4zLFxyXG4gICAgICAgICAgICAgICAgLy8gdHJhbnNwYXJlbnQ6IHRydWUsXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIGlmIChtYXRlcmlhbC5kaXNwbGFjZW1lbnRWYWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgcGFyYW1zLmRpc3BsYWNlbWVudFNjYWxlID0gbWF0ZXJpYWwuZGlzcGxhY2VtZW50VmFsdWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKG1hdGVyaWFsLm9wYWNpdHkpIHtcclxuICAgICAgICAgICAgICAgIHBhcmFtcy5vcGFjaXR5ID0gbWF0ZXJpYWwub3BhY2l0eTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAobWF0ZXJpYWwudHJhbnNwYXJlbmN5KSB7XHJcbiAgICAgICAgICAgICAgICBwYXJhbXMub3BhY2l0eSA9IG1hdGVyaWFsLnRyYW5zcGFyZW5jeTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAobWF0ZXJpYWwudHJhbnNtaXNzaW9uKSB7XHJcbiAgICAgICAgICAgICAgICBwYXJhbXMub3BhY2l0eSA9IG1hdGVyaWFsLnRyYW5zbWlzc2lvbjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAobWF0ZXJpYWwudHJhbnNwYXJlbnQpIHtcclxuICAgICAgICAgICAgICAgIHBhcmFtcy50cmFuc3BhcmVudCA9IG1hdGVyaWFsLnRyYW5zcGFyZW50O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChtYXRlcmlhbC5lbWlzc2l2ZVZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICBwYXJhbXMuZW1pc3NpdmUgPSBtYXRlcmlhbC5lbWlzc2l2ZVZhbHVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChtYXRlcmlhbC5lbWlzc2l2ZUludGVuc2l0eVZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICBwYXJhbXMuZW1pc3NpdmVJbnRlbnNpdHkgPSBtYXRlcmlhbC5lbWlzc2l2ZUludGVuc2l0eVZhbHVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChtYXRlcmlhbC50ZXh0dXJlKSB7XHJcbiAgICAgICAgICAgICAgICBwYXJhbXMubWFwID0gbWF0ZXJpYWwudGV4dHVyZTtcclxuICAgICAgICAgICAgICAgIHBhcmFtcy5tYXAubmVlZHNVcGRhdGUgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChtYXRlcmlhbC5hbykge1xyXG4gICAgICAgICAgICAgICAgcGFyYW1zLmFvTWFwID0gbWF0ZXJpYWwuYW87XHJcbiAgICAgICAgICAgICAgICBwYXJhbXMuYW9NYXAubmVlZHNVcGRhdGUgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChtYXRlcmlhbC5yb3VnaG5lc3MpIHtcclxuICAgICAgICAgICAgICAgIHBhcmFtcy5yb3VnaG5lc3NNYXAgPSBtYXRlcmlhbC5yb3VnaG5lc3M7XHJcbiAgICAgICAgICAgICAgICBwYXJhbXMucm91Z2huZXNzTWFwLm5lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIC8vIG1hdGVyaWFsLnJvdWdobmVzcy5tYWdGaWx0ZXIgPSBOZWFyZXN0RmlsdGVyO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChtYXRlcmlhbC5tZXRhbG5lc3MpIHtcclxuICAgICAgICAgICAgICAgIHBhcmFtcy5tZXRhbG5lc3NNYXAgPSBtYXRlcmlhbC5tZXRhbG5lc3M7XHJcbiAgICAgICAgICAgICAgICBwYXJhbXMubWV0YWxuZXNzTWFwLm5lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAobWF0ZXJpYWwubm9ybWFsKSB7XHJcbiAgICAgICAgICAgICAgICBwYXJhbXMubm9ybWFsTWFwID0gbWF0ZXJpYWwubm9ybWFsO1xyXG4gICAgICAgICAgICAgICAgcGFyYW1zLm5vcm1hbE1hcC5uZWVkc1VwZGF0ZSA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKG1hdGVyaWFsLmRpc3BsYWNlbWVudCkge1xyXG4gICAgICAgICAgICAgICAgcGFyYW1zLmRpc3BsYWNlbWVudE1hcCA9IG1hdGVyaWFsLmRpc3BsYWNlbWVudDtcclxuICAgICAgICAgICAgICAgIHBhcmFtcy5kaXNwbGFjZW1lbnRNYXAubmVlZHNVcGRhdGUgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChtYXRlcmlhbC5lbWlzc2l2ZSkge1xyXG4gICAgICAgICAgICAgICAgcGFyYW1zLmVtaXNzaXZlTWFwID0gbWF0ZXJpYWwuZW1pc3NpdmU7XHJcbiAgICAgICAgICAgICAgICBwYXJhbXMuZW1pc3NpdmVNYXAubmVlZHNVcGRhdGUgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChtYXRlcmlhbC5lbnZNYXApIHtcclxuICAgICAgICAgICAgICAgIGlmIChtYXRlcmlhbC5lbnZNYXBJbnRlbnNpdHkgIT0gbnVsbCB8fCAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zLmVudk1hcCA9IG1hdGVyaWFsLmVudk1hcDtcclxuICAgICAgICAgICAgICAgICAgICBwYXJhbXMuZW52TWFwLm5lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICBtYXRlcmlhbC5lbnZNYXAubWFwcGluZyA9IFRIUkVFLkVxdWlyZWN0YW5ndWxhclJlZmxlY3Rpb25NYXBwaW5nO1xyXG4gICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsLmVudk1hcC5taW5GaWx0ZXIgPSBUSFJFRS5OZWFyZXN0RmlsdGVyO1xyXG4gICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsLmVudk1hcC5tYWdGaWx0ZXIgPSBUSFJFRS5OZWFyZXN0RmlsdGVyO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChtYXRlcmlhbC5zaWRlKSB7XHJcbiAgICAgICAgICAgICAgICBwYXJhbXMuc2lkZSA9IG1hdGVyaWFsLnNpZGU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNvbnN0IG5ld01hdGVyaWFsOiBUSFJFRS5NZXNoU3RhbmRhcmRNYXRlcmlhbCA9IG5ldyBUSFJFRS5NZXNoU3RhbmRhcmRNYXRlcmlhbChwYXJhbXMpO1xyXG4gICAgICAgICAgICBuZXdNYXRlcmlhbC5jb2xvci5zZXRSR0IoMSwgMSwgMSk7XHJcbiAgICAgICAgICAgIG5ld01hdGVyaWFsLm5lZWRzVXBkYXRlID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiBuZXdNYXRlcmlhbDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfc2V0TGFzdEtub3duVmFyaWF0aW9ucyhpZDogc3RyaW5nLCB2YXJpYXRpb246IFZhcmlhdGlvbltdKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5fbGFzdEtub3duVmFyaWF0aW9ucy5zZXQoaWQsIHZhcmlhdGlvbik7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfZ2V0TGFzdEtub3duVmFyaWF0aW9ucyhpZDogc3RyaW5nKTogVmFyaWF0aW9uW10ge1xyXG4gICAgICAgIGlmICh0aGlzLl9sYXN0S25vd25WYXJpYXRpb25zLmhhcyhpZCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2xhc3RLbm93blZhcmlhdGlvbnMuZ2V0KGlkKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG59XHJcbiJdfQ==
@@ -8,4 +8,4 @@ export class Material {
8
8
  this.loaded = false;
9
9
  }
10
10
  }
11
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0ZXJpYWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbW9kZWwvbWF0ZXJpYWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEtBQUssTUFBTSxPQUFPLENBQUM7QUFFL0IsTUFBTSxPQUFPLFFBQVE7SUFBckI7UUFHUyxhQUFRLEdBQWdCLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZELGNBQVMsR0FBRyxDQUFDLENBQUM7UUFRZCxZQUFPLEdBQUcsQ0FBQyxDQUFDO1FBQ1osWUFBTyxHQUFHLENBQUMsQ0FBQztRQUNaLFdBQU0sR0FBRyxLQUFLLENBQUM7SUFtQnhCLENBQUM7Q0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIFRIUkVFIGZyb20gJ3RocmVlJztcblxuZXhwb3J0IGNsYXNzIE1hdGVyaWFsIHtcbiAgcHVibGljIG5hbWU6IHN0cmluZztcbiAgcHVibGljIHNjaGVtYTogc3RyaW5nO1xuICBwdWJsaWMgc3BlY3VsYXI6IFRIUkVFLkNvbG9yID0gbmV3IFRIUkVFLkNvbG9yKDAuMywgMC4zLCAwLjMpO1xuICBwdWJsaWMgc2hpbmluZXNzID0gMDtcbiAgLy8gcHVibGljIHJvdWdobmVzcyA9IDE7XG4gIC8vIHB1YmxpYyBtZXRhbG5lc3MgPSAwLjU7XG4gIHB1YmxpYyBub3JtYWw6IFRIUkVFLlRleHR1cmU7XG4gIHB1YmxpYyB0ZXh0dXJlOiBUSFJFRS5UZXh0dXJlO1xuICBwdWJsaWMgYW86IFRIUkVFLlRleHR1cmU7XG4gIHB1YmxpYyBtZXRhbG5lc3M6IFRIUkVFLlRleHR1cmU7XG4gIHB1YmxpYyByb3VnaG5lc3M6IFRIUkVFLlRleHR1cmU7XG4gIHB1YmxpYyByZXBlYXRYID0gNDtcbiAgcHVibGljIHJlcGVhdFkgPSA0O1xuICBwdWJsaWMgbG9hZGVkID0gZmFsc2U7XG4gIHB1YmxpYyBtZXRhbG5lc3NWYWx1ZTogbnVtYmVyO1xuICBwdWJsaWMgcm91Z2huZXNzVmFsdWU6IG51bWJlcjtcbiAgcHVibGljIGRpc3BsYWNlbWVudDogVEhSRUUuVGV4dHVyZTtcbiAgcHVibGljIGRpc3BsYWNlbWVudFZhbHVlOiBudW1iZXI7XG4gIHB1YmxpYyBzaGVlbkNvbG9yOiBUSFJFRS5Db2xvcjtcbiAgcHVibGljIGVtaXNzaXZlOiBUSFJFRS5UZXh0dXJlO1xuICBwdWJsaWMgZW1pc3NpdmVWYWx1ZTogVEhSRUUuQ29sb3I7XG4gIHB1YmxpYyBlbWlzc2l2ZUludGVuc2l0eVZhbHVlOiBudW1iZXI7XG4gIHB1YmxpYyBlbnZNYXA6IFRIUkVFLlRleHR1cmU7XG4gIHB1YmxpYyBlbnZNYXBJbnRlbnNpdHk6IG51bWJlcjtcbiAgcHVibGljIG9wYWNpdHk6IG51bWJlcjtcbiAgcHVibGljIHRyYW5zcGFyZW50OiBib29sZWFuO1xuICBwdWJsaWMgcmVmbGVjdGl2aXR5OiBudW1iZXI7XG4gIHB1YmxpYyBzaWRlOiBudW1iZXI7XG4gIHB1YmxpYyB0cmFuc3BhcmVuY3k6IG51bWJlcjtcbiAgcHVibGljIHRyYW5zbWlzc2lvbjogbnVtYmVyO1xuICBwdWJsaWMgY2xlYXJjb2F0TWFwOiBUSFJFRS5UZXh0dXJlIHwgbnVsbDtcbiAgcHVibGljIGNsZWFyY29hdFJvdWdobmVzc01hcDogVEhSRUUuVGV4dHVyZSB8IG51bGw7XG59XG4iXX0=
11
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0ZXJpYWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbW9kZWwvbWF0ZXJpYWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEtBQUssTUFBTSxPQUFPLENBQUM7QUFFL0IsTUFBTSxPQUFPLFFBQVE7SUFBckI7UUFHUyxhQUFRLEdBQWdCLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZELGNBQVMsR0FBRyxDQUFDLENBQUM7UUFRZCxZQUFPLEdBQUcsQ0FBQyxDQUFDO1FBQ1osWUFBTyxHQUFHLENBQUMsQ0FBQztRQUNaLFdBQU0sR0FBRyxLQUFLLENBQUM7SUF3QnhCLENBQUM7Q0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIFRIUkVFIGZyb20gJ3RocmVlJztcblxuZXhwb3J0IGNsYXNzIE1hdGVyaWFsIHtcbiAgcHVibGljIG5hbWU6IHN0cmluZztcbiAgcHVibGljIHNjaGVtYTogc3RyaW5nO1xuICBwdWJsaWMgc3BlY3VsYXI6IFRIUkVFLkNvbG9yID0gbmV3IFRIUkVFLkNvbG9yKDAuMywgMC4zLCAwLjMpO1xuICBwdWJsaWMgc2hpbmluZXNzID0gMDtcbiAgLy8gcHVibGljIHJvdWdobmVzcyA9IDE7XG4gIC8vIHB1YmxpYyBtZXRhbG5lc3MgPSAwLjU7XG4gIHB1YmxpYyBub3JtYWw6IFRIUkVFLlRleHR1cmU7XG4gIHB1YmxpYyB0ZXh0dXJlOiBUSFJFRS5UZXh0dXJlO1xuICBwdWJsaWMgYW86IFRIUkVFLlRleHR1cmU7XG4gIHB1YmxpYyBtZXRhbG5lc3M6IFRIUkVFLlRleHR1cmU7XG4gIHB1YmxpYyByb3VnaG5lc3M6IFRIUkVFLlRleHR1cmU7XG4gIHB1YmxpYyByZXBlYXRYID0gNDtcbiAgcHVibGljIHJlcGVhdFkgPSA0O1xuICBwdWJsaWMgbG9hZGVkID0gZmFsc2U7XG4gIHB1YmxpYyBtZXRhbG5lc3NWYWx1ZTogbnVtYmVyO1xuICBwdWJsaWMgcm91Z2huZXNzVmFsdWU6IG51bWJlcjtcbiAgcHVibGljIGRpc3BsYWNlbWVudDogVEhSRUUuVGV4dHVyZTtcbiAgcHVibGljIGRpc3BsYWNlbWVudFZhbHVlOiBudW1iZXI7XG4gIHB1YmxpYyBzaGVlbjogbnVtYmVyO1xuICBwdWJsaWMgc2hlZW5Db2xvcjogVEhSRUUuQ29sb3I7XG4gIHB1YmxpYyBzaGVlbkNvbG9yTWFwOiBUSFJFRS5UZXh0dXJlIHwgbnVsbDtcbiAgcHVibGljIHNoZWVuUm91Z2huZXNzOiBudW1iZXI7XG4gIHB1YmxpYyBzaGVlblJvdWdobmVzc01hcDogVEhSRUUuVGV4dHVyZSB8IG51bGw7XG4gIHB1YmxpYyBlbWlzc2l2ZTogVEhSRUUuVGV4dHVyZTtcbiAgcHVibGljIGVtaXNzaXZlVmFsdWU6IFRIUkVFLkNvbG9yO1xuICBwdWJsaWMgZW1pc3NpdmVJbnRlbnNpdHlWYWx1ZTogbnVtYmVyO1xuICBwdWJsaWMgZW52TWFwOiBUSFJFRS5UZXh0dXJlO1xuICBwdWJsaWMgZW52TWFwSW50ZW5zaXR5OiBudW1iZXI7XG4gIHB1YmxpYyBvcGFjaXR5OiBudW1iZXI7XG4gIHB1YmxpYyB0cmFuc3BhcmVudDogYm9vbGVhbjtcbiAgcHVibGljIHJlZmxlY3Rpdml0eTogbnVtYmVyO1xuICBwdWJsaWMgc2lkZTogbnVtYmVyO1xuICBwdWJsaWMgdHJhbnNwYXJlbmN5OiBudW1iZXI7XG4gIHB1YmxpYyB0cmFuc21pc3Npb246IG51bWJlcjtcblxuICBwdWJsaWMgY2xlYXJjb2F0TWFwOiBUSFJFRS5UZXh0dXJlIHwgbnVsbDtcbiAgcHVibGljIGNsZWFyY29hdFJvdWdobmVzc01hcDogVEhSRUUuVGV4dHVyZSB8IG51bGw7XG59XG4iXX0=
@@ -6,4 +6,4 @@ export class VariationSettings {
6
6
  this.loaded = new Subject();
7
7
  }
8
8
  }
9
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFyaWF0aW9uLXNldHRpbmdzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL21vZGVsL3ZhcmlhdGlvbi1zZXR0aW5ncy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBRTdCLE1BQU0sT0FBTyxpQkFBaUI7SUFBOUI7UUFFUyxhQUFRLEdBQVEsRUFBRSxDQUFDO1FBaUNuQixZQUFPLEdBQVksS0FBSyxDQUFDO1FBQ3pCLFdBQU0sR0FBK0IsSUFBSSxPQUFPLEVBQXFCLENBQUM7SUFDL0UsQ0FBQztDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtTdWJqZWN0fSBmcm9tIFwicnhqc1wiO1xuXG5leHBvcnQgY2xhc3MgVmFyaWF0aW9uU2V0dGluZ3Mge1xuICBwdWJsaWMgaWQ6IHN0cmluZztcbiAgcHVibGljIHNldHRpbmdzOiBhbnkgPSB7fTtcbiAgcHVibGljIHRleHR1cmU6IHN0cmluZztcbiAgcHVibGljIHRleHR1cmVGaWxlbmFtZTogc3RyaW5nO1xuICBwdWJsaWMgbm9ybWFsOiBzdHJpbmc7XG4gIHB1YmxpYyBub3JtYWxGaWxlbmFtZTogc3RyaW5nO1xuICBwdWJsaWMgYW86IHN0cmluZztcbiAgcHVibGljIGFvRmlsZW5hbWU6IHN0cmluZztcbiAgcHVibGljIG1ldGFsbmVzczogc3RyaW5nO1xuICBwdWJsaWMgbWV0YWxuZXNzRmlsZW5hbWU6IHN0cmluZztcbiAgcHVibGljIHJvdWdobmVzczogc3RyaW5nO1xuICBwdWJsaWMgcm91Z2huZXNzRmlsZW5hbWU6IHN0cmluZztcbiAgcHVibGljIG9ybTogc3RyaW5nO1xuICBwdWJsaWMgb3JtRmlsZW5hbWU6IHN0cmluZztcbiAgcHVibGljIGRpc3BsYWNlbWVudDogc3RyaW5nO1xuICBwdWJsaWMgZGlzcGxhY2VtZW50VmFsdWU6IHN0cmluZztcbiAgcHVibGljIGRpc3BsYWNlbWVudEZpbGVuYW1lOiBzdHJpbmc7XG4gIHB1YmxpYyBzaGVlbjogc3RyaW5nO1xuICBwdWJsaWMgZW1pc3NpdmU6IHN0cmluZztcbiAgcHVibGljIGVtaXNzaXZlRmlsZW5hbWU6IHN0cmluZztcbiAgcHVibGljIGVtaXNzaXZlSW50ZW5zaXR5OiBzdHJpbmc7XG4gIHB1YmxpYyBvcGFjaXR5OiBzdHJpbmc7XG4gIHB1YmxpYyB0cmFuc3BhcmVudDogc3RyaW5nO1xuICBwdWJsaWMgZW52TWFwOiBzdHJpbmc7XG4gIHB1YmxpYyBlbnZNYXBGaWxlbmFtZTogc3RyaW5nO1xuICBwdWJsaWMgZW52TWFwSW50ZW5zaXR5OiBzdHJpbmc7XG4gIHB1YmxpYyByZWZsZWN0aXZpdHk6IHN0cmluZztcbiAgcHVibGljIHNpZGU6IHN0cmluZztcbiAgcHVibGljIHRyYW5zcGFyZW5jeTogc3RyaW5nO1xuICBwdWJsaWMgdHJhbnNtaXNzaW9uOiBzdHJpbmc7XG5cbiAgLy8gZm9yIHByZS1zYXZlZCBtYXRlcmlhbHMgZG93bmxvYWRlZCBhcyB6aXBcbiAgcHVibGljIG1hdGVyaWFsOiBhbnk7XG5cbiAgcHVibGljIGxvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHVibGljIGxvYWRlZDogU3ViamVjdDxWYXJpYXRpb25TZXR0aW5ncz4gPSBuZXcgU3ViamVjdDxWYXJpYXRpb25TZXR0aW5ncz4oKTtcbn1cbiJdfQ==
9
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFyaWF0aW9uLXNldHRpbmdzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL21vZGVsL3ZhcmlhdGlvbi1zZXR0aW5ncy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBRTdCLE1BQU0sT0FBTyxpQkFBaUI7SUFBOUI7UUFFUyxhQUFRLEdBQVEsRUFBRSxDQUFDO1FBd0NuQixZQUFPLEdBQVksS0FBSyxDQUFDO1FBQ3pCLFdBQU0sR0FBK0IsSUFBSSxPQUFPLEVBQXFCLENBQUM7SUFDL0UsQ0FBQztDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtTdWJqZWN0fSBmcm9tIFwicnhqc1wiO1xuXG5leHBvcnQgY2xhc3MgVmFyaWF0aW9uU2V0dGluZ3Mge1xuICBwdWJsaWMgaWQ6IHN0cmluZztcbiAgcHVibGljIHNldHRpbmdzOiBhbnkgPSB7fTtcbiAgcHVibGljIHRleHR1cmU6IHN0cmluZztcbiAgcHVibGljIHRleHR1cmVGaWxlbmFtZTogc3RyaW5nO1xuICBwdWJsaWMgbm9ybWFsOiBzdHJpbmc7XG4gIHB1YmxpYyBub3JtYWxGaWxlbmFtZTogc3RyaW5nO1xuICBwdWJsaWMgYW86IHN0cmluZztcbiAgcHVibGljIGFvRmlsZW5hbWU6IHN0cmluZztcbiAgcHVibGljIG1ldGFsbmVzczogc3RyaW5nO1xuICBwdWJsaWMgbWV0YWxuZXNzRmlsZW5hbWU6IHN0cmluZztcbiAgcHVibGljIHJvdWdobmVzczogc3RyaW5nO1xuICBwdWJsaWMgcm91Z2huZXNzRmlsZW5hbWU6IHN0cmluZztcbiAgcHVibGljIG9ybTogc3RyaW5nO1xuICBwdWJsaWMgb3JtRmlsZW5hbWU6IHN0cmluZztcbiAgcHVibGljIGRpc3BsYWNlbWVudDogc3RyaW5nO1xuICBwdWJsaWMgZGlzcGxhY2VtZW50VmFsdWU6IG51bWJlcjtcbiAgcHVibGljIGRpc3BsYWNlbWVudEZpbGVuYW1lOiBzdHJpbmc7XG4gIHB1YmxpYyBzaGVlbjogbnVtYmVyO1xuICBwdWJsaWMgc2hlZW5Db2xvcjogc3RyaW5nO1xuICBwdWJsaWMgc2hlZW5Db2xvck1hcDogc3RyaW5nO1xuICBwdWJsaWMgc2hlZW5Db2xvck1hcEZpbGVuYW1lOiBzdHJpbmc7XG4gIHB1YmxpYyBzaGVlblJvdWdobmVzczogbnVtYmVyO1xuICBwdWJsaWMgc2hlZW5Sb3VnaG5lc3NNYXA6IHN0cmluZztcbiAgcHVibGljIHNoZWVuUm91Z2huZXNzTWFwRmlsZW5hbWU6IHN0cmluZztcbiAgcHVibGljIGVtaXNzaXZlOiBzdHJpbmc7XG4gIHB1YmxpYyBlbWlzc2l2ZUZpbGVuYW1lOiBzdHJpbmc7XG4gIHB1YmxpYyBlbWlzc2l2ZUludGVuc2l0eTogbnVtYmVyO1xuICBwdWJsaWMgZW1pc3NpdmVWYWx1ZTogc3RyaW5nO1xuICBwdWJsaWMgb3BhY2l0eTogbnVtYmVyO1xuICBwdWJsaWMgdHJhbnNwYXJlbnQ6IGJvb2xlYW47XG4gIHB1YmxpYyBlbnZNYXA6IHN0cmluZztcbiAgcHVibGljIGVudk1hcEZpbGVuYW1lOiBzdHJpbmc7XG4gIHB1YmxpYyBlbnZNYXBJbnRlbnNpdHk6IG51bWJlcjtcbiAgcHVibGljIHJlZmxlY3Rpdml0eTogbnVtYmVyO1xuICBwdWJsaWMgc2lkZTogbnVtYmVyO1xuICBwdWJsaWMgdHJhbnNwYXJlbmN5OiBudW1iZXI7XG4gIHB1YmxpYyB0cmFuc21pc3Npb246IG51bWJlcjtcblxuICAvLyBmb3IgcHJlLXNhdmVkIG1hdGVyaWFscyBkb3dubG9hZGVkIGFzIHppcFxuICBwdWJsaWMgbWF0ZXJpYWw6IGFueTtcblxuICBwdWJsaWMgbG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xuICBwdWJsaWMgbG9hZGVkOiBTdWJqZWN0PFZhcmlhdGlvblNldHRpbmdzPiA9IG5ldyBTdWJqZWN0PFZhcmlhdGlvblNldHRpbmdzPigpO1xufVxuIl19