@colijnit/configurator 12.0.2 → 12.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,11 +1,13 @@
1
1
  import { __awaiter } from "tslib";
2
2
  import { DecoNodeType } from "@colijnit/configuratorapi/build/enum/deco-node-type.enum";
3
+ import { VariationSettings } from "../model/variation-settings";
3
4
  import { AssetUtils } from "../utils/asset.utils";
4
5
  import { Variation } from "../model/variation";
5
6
  import * as THREE from "three";
6
7
  import { VariationUtils } from "../utils/variation-utils";
7
8
  export class VariationHelper {
8
9
  constructor() {
10
+ this._variations = [];
9
11
  this._lastKnownVariations = new Map();
10
12
  }
11
13
  clearCache() {
@@ -78,18 +80,22 @@ export class VariationHelper {
78
80
  }
79
81
  }
80
82
  const lastKnownVariations = [];
83
+ const variationPromise = [];
81
84
  for (let j = 0; j < variations.length; j++) {
82
- const variationSettings = yield VariationUtils.LoadVariation(this.assetPath, variations[j].gameObjectName || parts[i].decoId);
83
- const newVariation = new Variation();
84
- newVariation.decoId = parseFloat(variations[j].id);
85
- newVariation.brandId = variations[j].brandId;
86
- newVariation.gameObjectName = variations[j].gameObjectName;
87
- newVariation.supplierArticleNr = variations[j].supplierArticleNr;
88
- newVariation.materialId = variations[j].materialId;
89
- newVariation.material = yield AssetUtils.CreateMaterialFromAsset(variationSettings);
90
- lastKnownVariations.push(newVariation);
85
+ variationPromise.push(this.loadTheVariation(variations[j].gameObjectName || parts[i].decoId).then((variationSettings) => __awaiter(this, void 0, void 0, function* () {
86
+ const newVariation = new Variation();
87
+ newVariation.decoId = parseFloat(variations[j].id);
88
+ newVariation.brandId = variations[j].brandId;
89
+ newVariation.optionText = variations[j].optionText;
90
+ newVariation.gameObjectName = variations[j].gameObjectName;
91
+ newVariation.supplierArticleNr = variations[j].supplierArticleNr;
92
+ newVariation.materialId = variations[j].materialId;
93
+ newVariation.material = yield AssetUtils.CreateMaterialFromAsset(variationSettings);
94
+ lastKnownVariations.push(newVariation);
95
+ })));
91
96
  }
92
- this._setLastKnownVariations(parts[i].nodeId, lastKnownVariations);
97
+ yield Promise.all(variationPromise);
98
+ this._setLastKnownVariations(`${parts[i].nodeId}_${parts[i].node}`, lastKnownVariations);
93
99
  parts[i].variations = lastKnownVariations;
94
100
  this._applyVariations(obj, parts[i], usePbr);
95
101
  }
@@ -99,6 +105,65 @@ export class VariationHelper {
99
105
  }
100
106
  });
101
107
  }
108
+ get(id) {
109
+ const len = this._variations.length;
110
+ for (let i = 0; i < len; i++) {
111
+ if (this._variations[i].id && this._variations[i].id === id) {
112
+ return this._variations[i];
113
+ }
114
+ }
115
+ }
116
+ set(variations) {
117
+ const idx = this._variations.findIndex(v => v.id === variations.id);
118
+ if (idx > -1) {
119
+ this._variations[idx] = variations;
120
+ }
121
+ else {
122
+ this._variations.push(variations);
123
+ }
124
+ }
125
+ preloadVariations(schema, fileNames) {
126
+ fileNames.forEach((fileName) => {
127
+ if (fileName && !this.get(fileName)) {
128
+ const settings = new VariationSettings();
129
+ settings.id = fileName;
130
+ settings.loading = true;
131
+ this._variations.push(settings);
132
+ let assetPath = this.assetPath;
133
+ if (!assetPath.endsWith('/')) {
134
+ assetPath += '/';
135
+ }
136
+ VariationUtils.LoadVariation(assetPath, fileName).then((variationSettings) => {
137
+ settings.loading = false;
138
+ settings.loaded.next(variationSettings);
139
+ if (variationSettings) {
140
+ this.set(variationSettings);
141
+ }
142
+ });
143
+ }
144
+ });
145
+ }
146
+ loadTheVariation(fileName) {
147
+ return __awaiter(this, void 0, void 0, function* () {
148
+ if (!fileName) {
149
+ return null;
150
+ }
151
+ if (this.get(fileName)) {
152
+ const settings = this.get(fileName);
153
+ if (settings.loading) {
154
+ return yield this._waitForVariationToLoad(settings);
155
+ }
156
+ return settings;
157
+ }
158
+ });
159
+ }
160
+ _waitForVariationToLoad(settings) {
161
+ return new Promise((resolve) => {
162
+ settings.loaded.subscribe((value) => {
163
+ resolve(value);
164
+ });
165
+ });
166
+ }
102
167
  _getChildrenFilterByProp(obj, userDataObjectProp, prop, value) {
103
168
  return obj.children.filter((child) => {
104
169
  return child.userData &&
@@ -166,7 +231,7 @@ export class VariationHelper {
166
231
  _setMeshMaterialFromVariation(name, variation, usePbr = false) {
167
232
  if (variation.material.texture) {
168
233
  variation.material.texture.needsUpdate = true;
169
- // variation.material.texture.mapping = THREE.EquirectangularReflectionMapping;
234
+ variation.material.texture.mapping = THREE.EquirectangularReflectionMapping;
170
235
  }
171
236
  if (!usePbr) {
172
237
  const newMaterial = new THREE.MeshPhongMaterial({
@@ -346,4 +411,4 @@ export class VariationHelper {
346
411
  return null;
347
412
  }
348
413
  }
349
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFyaWF0aW9uLWhlbHBlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9oZWxwZXIvdmFyaWF0aW9uLWhlbHBlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLDBEQUEwRCxDQUFDO0FBRXRGLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUVoRCxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFDN0MsT0FBTyxLQUFLLEtBQUssTUFBTSxPQUFPLENBQUM7QUFDL0IsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBRXhELE1BQU0sT0FBTyxlQUFlO0lBQTVCO1FBSVkseUJBQW9CLEdBQTZCLElBQUksR0FBRyxFQUFFLENBQUM7SUF1VnZFLENBQUM7SUFyVlUsVUFBVTtRQUNiLE1BQU0sWUFBWSxHQUFrQixLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBQ25GLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQyxVQUFVLEVBQUUsRUFBRTtZQUNoQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUU7Z0JBQzdCLElBQUk7b0JBQ0EsSUFBSSxTQUFTLENBQUMsUUFBUSxFQUFFO3dCQUNwQixJQUFJLFNBQVMsQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFOzRCQUM1QixTQUFTLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQzt5QkFDeEM7d0JBQ0QsSUFBSSxTQUFTLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRTs0QkFDM0IsU0FBUyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUM7eUJBQ3ZDO3dCQUNELElBQUksU0FBUyxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUU7NEJBQzlCLFNB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QyxRQUFRLENBQUMsSUFBSSxDQUFDO2FBQ3pDO1lBRUQsTUFBTSxXQUFXLEdBQStCLElBQUksS0FBSyxDQUFDLG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3ZGLFdBQVcsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDbEMsV0FBVyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7WUFFL0IsT0FBTyxXQUFXLENBQUM7U0FDdEI7SUFDTCxDQUFDO0lBRU8sdUJBQXVCLENBQUMsRUFBVSxFQUFFLFNBQXNCO1FBQzlELElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQ2pELENBQUM7SUFFTyx1QkFBdUIsQ0FBQyxFQUFVO1FBQ3RDLElBQUksSUFBSSxDQUFDLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRTtZQUNuQyxPQUFPLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7U0FDNUM7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0NBRUoiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0RlY29Ob2RlVHlwZX0gZnJvbSBcIkBjb2xpam5pdC9jb25maWd1cmF0b3JhcGkvYnVpbGQvZW51bS9kZWNvLW5vZGUtdHlwZS5lbnVtXCI7XHJcbmltcG9ydCB7VmFyaWF0aW9uU2V0dGluZ3N9IGZyb20gXCIuLi9tb2RlbC92YXJpYXRpb24tc2V0dGluZ3NcIjtcclxuaW1wb3J0IHtBc3NldFV0aWxzfSBmcm9tIFwiLi4vdXRpbHMvYXNzZXQudXRpbHNcIjtcclxuaW1wb3J0IHtEZWNvTm9kZX0gZnJvbSBcIkBjb2xpam5pdC9jb25maWd1cmF0b3JhcGkvYnVpbGQvbW9kZWwvZGVjby1ub2RlXCI7XHJcbmltcG9ydCB7VmFyaWF0aW9ufSBmcm9tIFwiLi4vbW9kZWwvdmFyaWF0aW9uXCI7XHJcbmltcG9ydCAqIGFzIFRIUkVFIGZyb20gXCJ0aHJlZVwiO1xyXG5pbXBvcnQge1ZhcmlhdGlvblV0aWxzfSBmcm9tIFwiLi4vdXRpbHMvdmFyaWF0aW9uLXV0aWxzXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgVmFyaWF0aW9uSGVscGVyIHtcclxuXHJcbiAgICBwdWJsaWMgYXNzZXRQYXRoOiBzdHJpbmc7XHJcblxyXG4gICAgcHJpdmF0ZSBfbGFzdEtub3duVmFyaWF0aW9uczogTWFwPHN0cmluZywgVmFyaWF0aW9uW10+ID0gbmV3IE1hcCgpO1xyXG5cclxuICAgIHB1YmxpYyBjbGVhckNhY2hlKCk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IHZhcmlhdGlvbk1hcDogVmFyaWF0aW9uW11bXSA9IEFycmF5LmZyb20odGhpcy5fbGFzdEtub3duVmFyaWF0aW9ucy52YWx1ZXMoKSk7XHJcbiAgICAgICAgdmFyaWF0aW9uTWFwLmZvckVhY2goKHZhcmlhdGlvbnMpID0+IHtcclxuICAgICAgICAgICAgdmFyaWF0aW9ucy5mb3JFYWNoKCh2YXJpYXRpb24pID0+IHtcclxuICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhcmlhdGlvbi5tYXRlcmlhbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFyaWF0aW9uLm1hdGVyaWFsLnRleHR1cmUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhdGlvbi5tYXRlcmlhbC50ZXh0dXJlLmRpc3Bvc2UoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFyaWF0aW9uLm1hdGVyaWFsLm5vcm1hbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWF0aW9uLm1hdGVyaWFsLm5vcm1hbC5kaXNwb3NlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhcmlhdGlvbi5tYXRlcmlhbC5tZXRhbG5lc3MpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhdGlvbi5tYXRlcmlhbC5tZXRhbG5lc3MuZGlzcG9zZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYXRpb24ubWF0ZXJpYWwucm91Z2huZXNzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYXRpb24ubWF0ZXJpYWwucm91Z2huZXNzLmRpc3Bvc2UoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFyaWF0aW9uLm1hdGVyaWFsLmFvKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYXRpb24ubWF0ZXJpYWwuYW8uZGlzcG9zZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgICAgICBWYXJpYXRpb25VdGlscy5DbGVhckNhY2hlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFzeW5jIGxvYWRQYXJ0KG9iajogVEhSRUUuT2JqZWN0M0QsIHBhcnRzOiBhbnlbXSwgdXNlUGJyOiBib29sZWFuID0gZmFsc2UpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjb25zdCBsZW46IG51bWJlciA9IHBhcnRzLmxlbmd0aDtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICAgICAgaWYgKHBhcnRzW2ldLmRlY29Ob2RlICYmIHBhcnRzW2ldLmRlY29Ob2RlLmdhbWVPYmplY3ROYW1lICYmIHBhcnRzW2ldLmRlY29Ob2RlLnR5cGUgPT09IERlY29Ob2RlVHlwZS5QYXJ0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFydFNldHRpbmdzOiBWYXJpYXRpb25TZXR0aW5ncyA9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IFZhcmlhdGlvblV0aWxzLkxvYWRWYXJpYXRpb24odGhpcy5hc3NldFBhdGgsIHBhcnRzW2ldLmRlY29Ob2RlLmdhbWVPYmplY3ROYW1lIHx8IHBhcnRzW2ldLmRlY29JZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBhcnRTZXR0aW5ncykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXJ0VmFyaWF0aW9uOiBWYXJpYXRpb24gPSBuZXcgVmFyaWF0aW9uKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnRWYXJpYXRpb24uZGVjb0lkID0gcGFyc2VGbG9hdChwYXJ0c1tpXS5kZWNvTm9kZS5pZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnRWYXJpYXRpb24uYnJhbmRJZCA9IHBhcnRzW2ldLmRlY29Ob2RlLmJyYW5kSWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnRWYXJpYXRpb24uZ2FtZU9iamVjdE5hbWUgPSBwYXJ0c1tpXS5kZWNvTm9kZS5nYW1lT2JqZWN0TmFtZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGFydFZhcmlhdGlvbi5tYXRlcmlhbCA9IGF3YWl0IEFzc2V0VXRpbHMuQ3JlYXRlTWF0ZXJpYWxGcm9tQXNzZXQocGFydFNldHRpbmdzKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gcGFydHNbaV0udmFyaWF0aW9uID0gcGFydFZhcmlhdGlvbjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fYXBwbHlNYXRlcmlhbFBhcnQob2JqLCBwYXJ0VmFyaWF0aW9uLCBwYXJ0c1tpXS5ub2RlLCB1c2VQYnIpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFzeW5jIGxvYWRWYXJpYXRpb24ob2JqOiBUSFJFRS5PYmplY3QzRCwgcGFydHM6IGFueVtdLCB1c2VQYnI6IGJvb2xlYW4gPSBmYWxzZSk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGxlbjogbnVtYmVyID0gcGFydHMubGVuZ3RoO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB2YXJpYXRpb25zOiBEZWNvTm9kZVtdID0gcGFydHNbaV0udmFyaWF0aW9ucztcclxuICAgICAgICAgICAgICAgIGlmICghdmFyaWF0aW9ucyB8fCB2YXJpYXRpb25zLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9nZXRMYXN0S25vd25WYXJpYXRpb25zKHBhcnRzW2ldLm5vZGVJZCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGFydHNbaV0udmFyaWF0aW9ucyA9IHRoaXMuX2dldExhc3RLbm93blZhcmlhdGlvbnMocGFydHNbaV0ubm9kZUlkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fYXBwbHlWYXJpYXRpb25zKG9iaiwgcGFydHNbaV0sIHVzZVBicik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNvbnN0IGxhc3RLbm93blZhcmlhdGlvbnM6IFZhcmlhdGlvbltdID0gW107XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHZhcmlhdGlvbnMubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB2YXJpYXRpb25TZXR0aW5nczogVmFyaWF0aW9uU2V0dGluZ3MgPVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBWYXJpYXRpb25VdGlscy5Mb2FkVmFyaWF0aW9uKHRoaXMuYXNzZXRQYXRoLCB2YXJpYXRpb25zW2pdLmdhbWVPYmplY3ROYW1lIHx8IHBhcnRzW2ldLmRlY29JZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3VmFyaWF0aW9uOiBWYXJpYXRpb24gPSBuZXcgVmFyaWF0aW9uKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgbmV3VmFyaWF0aW9uLmRlY29JZCA9IHBhcnNlRmxvYXQodmFyaWF0aW9uc1tqXS5pZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgbmV3VmFyaWF0aW9uLmJyYW5kSWQgPSB2YXJpYXRpb25zW2pdLmJyYW5kSWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgbmV3VmFyaWF0aW9uLmdhbWVPYmplY3ROYW1lID0gdmFyaWF0aW9uc1tqXS5nYW1lT2JqZWN0TmFtZTtcclxuICAgICAgICAgICAgICAgICAgICBuZXdWYXJpYXRpb24uc3VwcGxpZXJBcnRpY2xlTnIgPSAodmFyaWF0aW9uc1tqXSBhcyBhbnkpLnN1cHBsaWVyQXJ0aWNsZU5yO1xyXG4gICAgICAgICAgICAgICAgICAgIG5ld1ZhcmlhdGlvbi5tYXRlcmlhbElkID0gKHZhcmlhdGlvbnNbal0gYXMgYW55KS5tYXRlcmlhbElkO1xyXG4gICAgICAgICAgICAgICAgICAgIG5ld1ZhcmlhdGlvbi5tYXRlcmlhbCA9IGF3YWl0IEFzc2V0VXRpbHMuQ3JlYXRlTWF0ZXJpYWxGcm9tQXNzZXQodmFyaWF0aW9uU2V0dGluZ3MpO1xyXG4gICAgICAgICAgICAgICAgICAgIGxhc3RLbm93blZhcmlhdGlvbnMucHVzaChuZXdWYXJpYXRpb24pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5fc2V0TGFzdEtub3duVmFyaWF0aW9ucyhwYXJ0c1tpXS5ub2RlSWQsIGxhc3RLbm93blZhcmlhdGlvbnMpO1xyXG4gICAgICAgICAgICAgICAgcGFydHNbaV0udmFyaWF0aW9ucyA9IGxhc3RLbm93blZhcmlhdGlvbnM7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9hcHBseVZhcmlhdGlvbnMob2JqLCBwYXJ0c1tpXSwgdXNlUGJyKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfZ2V0Q2hpbGRyZW5GaWx0ZXJCeVByb3Aob2JqOiBUSFJFRS5PYmplY3QzRCwgdXNlckRhdGFPYmplY3RQcm9wOiBzdHJpbmcsIHByb3A6IHN0cmluZywgdmFsdWU6IGFueSk6IFRIUkVFLk9iamVjdDNEW10ge1xyXG4gICAgICAgIHJldHVybiBvYmouY2hpbGRyZW4uZmlsdGVyKChjaGlsZCkgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gY2hpbGQudXNlckRhdGEgJiZcclxuICAgICAgICAgICAgICAgIGNoaWxkLnVzZXJEYXRhLmhhc093blByb3BlcnR5KHVzZXJEYXRhT2JqZWN0UHJvcCkgJiZcclxuICAgICAgICAgICAgICAgIGNoaWxkLnVzZXJEYXRhW3VzZXJEYXRhT2JqZWN0UHJvcF0uaGFzT3duUHJvcGVydHkocHJvcCkgJiZcclxuICAgICAgICAgICAgICAgIGNoaWxkLnVzZXJEYXRhW3VzZXJEYXRhT2JqZWN0UHJvcF1bcHJvcF0gPT09IHZhbHVlO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX2FwcGx5TWF0ZXJpYWxQYXJ0KG9iajogVEhSRUUuT2JqZWN0M0QsIHBhcnRNYXRlcmlhbDogYW55LCBub2RlSWQ6IGFueSwgdXNlUGJyOiBib29sZWFuID0gZmFsc2UpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBjaGlsZHJlbiA9IHRoaXMuX2dldENoaWxkcmVuRmlsdGVyQnlQcm9wKG9iaiwgJ3NlbGVjdGlvbicsICdub2RlJywgbm9kZUlkKTtcclxuICAgICAgICBjb25zdCBsZW46IG51bWJlciA9IGNoaWxkcmVuLmxlbmd0aDtcclxuICAgICAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAwOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgY29uc3QgY2hpbGQgPSBjaGlsZHJlbltpXTtcclxuICAgICAgICAgICAgaWYgKGNoaWxkICE9PSBudWxsICYmIGNoaWxkICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgIGNoaWxkLnRyYXZlcnNlKChtZXNoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG1lc2ggaW5zdGFuY2VvZiBUSFJFRS5NZXNoICYmIHBhcnRNYXRlcmlhbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShtZXNoLm1hdGVyaWFsKSkgeyAvLyBtdWx0aW1hdGVyaWFsIHN1cHBvcnRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGogPSAwLCBqbGVuOiBudW1iZXIgPSBtZXNoLm1hdGVyaWFsLmxlbmd0aDsgaiA8IGpsZW47IGorKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNoLm1hdGVyaWFsW2pdLm5hbWUudG9Mb3dlckNhc2UoKS5pbmRleE9mKCdmaXhlZF9mcmFtZScpICE9PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNoLm1hdGVyaWFsW2pdID0gdGhpcy5fc2V0TWVzaE1hdGVyaWFsRnJvbVZhcmlhdGlvbihtZXNoLm1hdGVyaWFsW2pdLm5hbWUsIHBhcnRNYXRlcmlhbCwgdXNlUGJyKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzaC5tYXRlcmlhbC5uYW1lLnRvTG93ZXJDYXNlKCkuaW5kZXhPZignZml4ZWRfZnJhbWUnKSAhPT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNoLm1hdGVyaWFsID0gdGhpcy5fc2V0TWVzaE1hdGVyaWFsRnJvbVZhcmlhdGlvbihtZXNoLm1hdGVyaWFsLm5hbWUsIHBhcnRNYXRlcmlhbCwgdXNlUGJyKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX2FwcGx5VmFyaWF0aW9ucyhvYmo6IFRIUkVFLk9iamVjdDNELCBwYXJ0OiBhbnksIHVzZVBicjogYm9vbGVhbiA9IGZhbHNlKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgY2hpbGRyZW4gPSB0aGlzLl9nZXRDaGlsZHJlbkZpbHRlckJ5UHJvcChvYmosICdzZWxlY3Rpb24nLCAnbm9kZScsIHBhcnQubm9kZSk7XHJcbiAgICAgICAgY29uc3QgbGVuOiBudW1iZXIgPSBjaGlsZHJlbi5sZW5ndGg7XHJcbiAgICAgICAgZm9yIChsZXQgaTogbnVtYmVyID0gMDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkID0gY2hpbGRyZW5baV07XHJcbiAgICAgICAgICAgIGlmIChjaGlsZCAhPT0gbnVsbCAmJiBjaGlsZCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICBjaGlsZC50cmF2ZXJzZSgobWVzaCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChtZXNoIGluc3RhbmNlb2YgVEhSRUUuTWVzaCAmJiBwYXJ0LnZhcmlhdGlvbnMgJiYgcGFydC52YXJpYXRpb25zLmxlbmd0aCA+IDAgJiYgbWVzaC5uYW1lLnRvTG93ZXJDYXNlKCkuaW5kZXhPZignY18nKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHBhcnQudmFyaWF0aW9ucy5sZW5ndGg7IGorKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFyaWF0aW9uOiBWYXJpYXRpb24gPSBwYXJ0LnZhcmlhdGlvbnNbal07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFyaWF0aW9uLm1hdGVyaWFsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWF0ZXJpYWxUb1NlYXJjaDogc3RyaW5nID0gISF2YXJpYXRpb24ubWF0ZXJpYWxJZCA/IHZhcmlhdGlvbi5tYXRlcmlhbElkLnRvTG93ZXJDYXNlKCkgOiAnZGVmYXVsdCc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkobWVzaC5tYXRlcmlhbCkpIHsgLy8gbXVsdGltYXRlcmlhbCBzdXBwb3J0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IG0gPSAwLCBtbGVuOiBudW1iZXIgPSBtZXNoLm1hdGVyaWFsLmxlbmd0aDsgbSA8IG1sZW47IG0rKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc2gubWF0ZXJpYWxbbV0ubmFtZS50b0xvd2VyQ2FzZSgpLmluZGV4T2YobWF0ZXJpYWxUb1NlYXJjaCkgIT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzaC5tYXRlcmlhbFttXSA9IHRoaXMuX3NldE1lc2hNYXRlcmlhbEZyb21WYXJpYXRpb24obWVzaC5tYXRlcmlhbFttXS5uYW1lLCB2YXJpYXRpb24sIHVzZVBicik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzaC5tYXRlcmlhbC5uYW1lLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihtYXRlcmlhbFRvU2VhcmNoKSAhPT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc2gubWF0ZXJpYWwgPSB0aGlzLl9zZXRNZXNoTWF0ZXJpYWxGcm9tVmFyaWF0aW9uKG1lc2gubWF0ZXJpYWwubmFtZSwgdmFyaWF0aW9uLCB1c2VQYnIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfc2V0TWVzaE1hdGVyaWFsRnJvbVZhcmlhdGlvbihuYW1lOiBzdHJpbmcsIHZhcmlhdGlvbjogVmFyaWF0aW9uLCB1c2VQYnI6IGJvb2xlYW4gPSBmYWxzZSk6IFRIUkVFLk1hdGVyaWFsIHtcclxuICAgICAgICBpZiAodmFyaWF0aW9uLm1hdGVyaWFsLnRleHR1cmUpIHtcclxuICAgICAgICAgICAgdmFyaWF0aW9uLm1hdGVyaWFsLnRleHR1cmUubmVlZHNVcGRhdGUgPSB0cnVlO1xyXG4gICAgICAgICAgICAvLyB2YXJpYXRpb24ubWF0ZXJpYWwudGV4dHVyZS5tYXBwaW5nID0gVEhSRUUuRXF1aXJlY3Rhbmd1bGFyUmVmbGVjdGlvbk1hcHBpbmc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghdXNlUGJyKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG5ld01hdGVyaWFsOiBUSFJFRS5NZXNoUGhvbmdNYXRlcmlhbCA9IG5ldyBUSFJFRS5NZXNoUGhvbmdNYXRlcmlhbCh7XHJcbiAgICAgICAgICAgICAgICBuYW1lOiBuYW1lLFxyXG4gICAgICAgICAgICAgICAgc2hpbmluZXNzOiB2YXJpYXRpb24ubWF0ZXJpYWwuc2hpbmluZXNzLFxyXG4gICAgICAgICAgICAgICAgc3BlY3VsYXI6IHZhcmlhdGlvbi5tYXRlcmlhbC5zcGVjdWxhcixcclxuICAgICAgICAgICAgICAgIG1hcDogdmFyaWF0aW9uLm1hdGVyaWFsLnRleHR1cmUsXHJcbiAgICAgICAgICAgICAgICBub3JtYWxNYXA6IHZhcmlhdGlvbi5tYXRlcmlhbC5ub3JtYWxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIG5ld01hdGVyaWFsLmNvbG9yLnNldFJHQigwLjgsIDAuOCwgMC44KTtcclxuICAgICAgICAgICAgbmV3TWF0ZXJpYWwubmVlZHNVcGRhdGUgPSB0cnVlO1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3TWF0ZXJpYWw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh2YXJpYXRpb24ubWF0ZXJpYWwuc2hlZW5Db2xvciB8fCB2YXJpYXRpb24ubWF0ZXJpYWwucmVmbGVjdGl2aXR5KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHBhcmFtczogVEhSRUUuTWVzaFBoeXNpY2FsTWF0ZXJpYWxQYXJhbWV0ZXJzID0ge1xyXG4gICAgICAgICAgICAgICAgLy8gc2lkZTogbWF0ZXJpYWwuc2lkZSA/IG1hdGVyaWFsLnNpZGUgOiBGcm9udFNpZGUsXHJcbiAgICAgICAgICAgICAgICBuYW1lOiBuYW1lLFxyXG4gICAgICAgICAgICAgICAgcm91Z2huZXNzOiB2YXJpYXRpb24ubWF0ZXJpYWwucm91Z2huZXNzVmFsdWUgPyB2YXJpYXRpb24ubWF0ZXJpYWwucm91Z2huZXNzVmFsdWUgOiAxLFxyXG4gICAgICAgICAgICAgICAgbWV0YWxuZXNzOiB2YXJpYXRpb24ubWF0ZXJpYWwubWV0YWxuZXNzVmFsdWUgPyB2YXJpYXRpb24ubWF0ZXJpYWwubWV0YWxuZXNzVmFsdWUgOiAwLFxyXG4gICAgICAgICAgICAgICAgZW52TWFwSW50ZW5zaXR5OiB2YXJpYXRpb24ubWF0ZXJpYWwuZW52TWFwSW50ZW5zaXR5ID8gdmFyaWF0aW9uLm1hdGVyaWFsLmVudk1hcEludGVuc2l0eSA6IDAuMDEsXHJcbiAgICAgICAgICAgICAgICBjbGVhcmNvYXRNYXA6IHZhcmlhdGlvbi5tYXRlcmlhbC5jbGVhcmNvYXRNYXAgPyB2YXJpYXRpb24ubWF0ZXJpYWwuY2xlYXJjb2F0TWFwIDogbnVsbCxcclxuICAgICAgICAgICAgICAgIGNsZWFyY29hdFJvdWdobmVzc01hcDogdmFyaWF0aW9uLm1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzc01hcCA/IHZhcmlhdGlvbi5tYXRlcmlhbC5jbGVhcmNvYXRSb3VnaG5lc3NNYXAgOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgLy8gd2lyZWZyYW1lOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgLy8gb3BhY2l0eTogMC4zLFxyXG4gICAgICAgICAgICAgICAgLy8gdHJhbnNwYXJlbnQ6IHRydWUsXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIGlmICh2YXJpYXRpb24ubWF0ZXJpYWwuZGlzcGxhY2VtZW50VmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIHBhcmFtcy5kaXNwbGFjZW1lbnRTY2FsZSA9IHZhcmlhdGlvbi5tYXRlcmlhbC5kaXNwbGFjZW1lbnRWYWx1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodmFyaWF0aW9uLm1hdGVyaWFsLnNoZWVuQ29sb3IpIHtcclxuICAgICAgICAgICAgICAgIHBhcmFtcy5zaGVlbiA9IHZhcmlhdGlvbi5tYXRlcmlhbC5zaGVlbkNvbG9yO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh2YXJpYXRpb24ubWF0ZXJpYWwub3BhY2l0eSkge1xyXG4gICAgICAgICAgICAgICAgcGFyYW1zLm9wYWNpdHkgPSB2YXJpYXRpb24ubWF0ZXJpYWwub3BhY2l0eTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodmFyaWF0aW9uLm1hdGVyaWFsLnRyYW5zcGFyZW50KSB7XHJcbiAgICAgICAgICAgICAgICBwYXJhbXMudHJhbnNwYXJlbnQgPSB2YXJpYXRpb24ubWF0ZXJpYWwudHJhbnNwYXJlbnQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHZhcmlhdGlvbi5tYXRlcmlhbC5lbWlzc2l2ZVZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICBwYXJhbXMuZW1pc3NpdmUgPSB2YXJpYXRpb24ubWF0ZXJpYWwuZW1pc3NpdmVWYWx1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodmFyaWF0aW9uLm1hdGVyaWFsLmVtaXNzaXZlSW50ZW5zaXR5VmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIHBhcmFtcy5lbWlzc2l2ZUludGVuc2l0eSA9IHZhcmlhdGlvbi5tYXRlcmlhbC5lbWlzc2l2ZUludGVuc2l0eVZhbHVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh2YXJpYXRpb24ubWF0ZXJpYWwudGV4dHVyZSkge1xyXG4gICAgICAgICAgICAgICAgcGFyYW1zLm1hcCA9IHZhcmlhdGlvbi5tYXRlcmlhbC50ZXh0dXJlO1xyXG4gICAgICAgICAgICAgICAgcGFyYW1zLm1hcC5uZWVkc1VwZGF0ZSA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHZhcmlhdGlvbi5tYXRlcmlhbC5hbykge1xyXG4gICAgICAgICAgICAgICAgcGFyYW1zLmFvTWFwID0gdmFyaWF0aW9uLm1hdGVyaWFsLmFvO1xyXG4gICAgICAgICAgICAgICAgcGFyYW1zLmFvTWFwLm5lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodmFyaWF0aW9uLm1hdGVyaWFsLnJvdWdobmVzcykge1xyXG4gICAgICAgICAgICAgICAgcGFyYW1zLnJvdWdobmVzc01hcCA9IHZhcmlhdGlvbi5tYXRlcmlhbC5yb3VnaG5lc3M7XHJcbiAgICAgICAgICAgICAgICBwYXJhbXMucm91Z2huZXNzTWFwLm5lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIC8vIHZhcmlhdGlvbi5tYXRlcmlhbC5yb3VnaG5lc3MubWFnRmlsdGVyID0gTmVhcmVzdEZpbHRlcjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodmFyaWF0aW9uLm1hdGVyaWFsLm1ldGFsbmVzcykge1xyXG4gICAgICAgICAgICAgICAgcGFyYW1zLm1ldGFsbmVzc01hcCA9IHZhcmlhdGlvbi5tYXRlcmlhbC5tZXRhbG5lc3M7XHJcbiAgICAgICAgICAgICAgICBwYXJhbXMubWV0YWxuZXNzTWFwLm5lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodmFyaWF0aW9uLm1hdGVyaWFsLm5vcm1hbCkge1xyXG4gICAgICAgICAgICAgICAgcGFyYW1zLm5vcm1hbE1hcCA9IHZhcmlhdGlvbi5tYXRlcmlhbC5ub3JtYWw7XHJcbiAgICAgICAgICAgICAgICBwYXJhbXMubm9ybWFsTWFwLm5lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodmFyaWF0aW9uLm1hdGVyaWFsLmRpc3BsYWNlbWVudCkge1xyXG4gICAgICAgICAgICAgICAgcGFyYW1zLmRpc3BsYWNlbWVudE1hcCA9IHZhcmlhdGlvbi5tYXRlcmlhbC5kaXNwbGFjZW1lbnQ7XHJcbiAgICAgICAgICAgICAgICBwYXJhbXMuZGlzcGxhY2VtZW50TWFwLm5lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodmFyaWF0aW9uLm1hdGVyaWFsLmVtaXNzaXZlKSB7XHJcbiAgICAgICAgICAgICAgICBwYXJhbXMuZW1pc3NpdmVNYXAgPSB2YXJpYXRpb24ubWF0ZXJpYWwuZW1pc3NpdmU7XHJcbiAgICAgICAgICAgICAgICBwYXJhbXMuZW1pc3NpdmVNYXAubmVlZHNVcGRhdGUgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh2YXJpYXRpb24ubWF0ZXJpYWwuZW52TWFwKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodmFyaWF0aW9uLm1hdGVyaWFsLmVudk1hcEludGVuc2l0eSAhPSBudWxsIHx8IDApIHtcclxuICAgICAgICAgICAgICAgICAgICBwYXJhbXMuZW52TWFwID0gdmFyaWF0aW9uLm1hdGVyaWFsLmVudk1hcDtcclxuICAgICAgICAgICAgICAgICAgICBwYXJhbXMuZW52TWFwLm5lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB2YXJpYXRpb24ubWF0ZXJpYWwuZW52TWFwLm1hcHBpbmcgPSBUSFJFRS5FcXVpcmVjdGFuZ3VsYXJSZWZsZWN0aW9uTWFwcGluZztcclxuICAgICAgICAgICAgICAgICAgICB2YXJpYXRpb24ubWF0ZXJpYWwuZW52TWFwLm1pbkZpbHRlciA9IFRIUkVFLk5lYXJlc3RGaWx0ZXI7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyaWF0aW9uLm1hdGVyaWFsLmVudk1hcC5tYWdGaWx0ZXIgPSBUSFJFRS5OZWFyZXN0RmlsdGVyO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh2YXJpYXRpb24ubWF0ZXJpYWwucmVmbGVjdGl2aXR5KSB7XHJcbiAgICAgICAgICAgICAgICBwYXJhbXMucmVmbGVjdGl2aXR5ID0gdmFyaWF0aW9uLm1hdGVyaWFsLnJlZmxlY3Rpdml0eTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodmFyaWF0aW9uLm1hdGVyaWFsLnNpZGUpIHtcclxuICAgICAgICAgICAgICAgIHBhcmFtcy5zaWRlID0gdmFyaWF0aW9uLm1hdGVyaWFsLnNpZGU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNvbnN0IG5ld01hdGVyaWFsOiBUSFJFRS5NZXNoUGh5c2ljYWxNYXRlcmlhbCA9IG5ldyBUSFJFRS5NZXNoUGh5c2ljYWxNYXRlcmlhbChwYXJhbXMpO1xyXG4gICAgICAgICAgICBuZXdNYXRlcmlhbC5jb2xvci5zZXRSR0IoMSwgMSwgMSk7XHJcbiAgICAgICAgICAgIG5ld01hdGVyaWFsLm5lZWRzVXBkYXRlID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgIGlmICh2YXJpYXRpb24ubWF0ZXJpYWwudHJhbnNtaXNzaW9uKSB7XHJcbiAgICAgICAgICAgICAgICBuZXdNYXRlcmlhbC50cmFuc21pc3Npb24gPSB2YXJpYXRpb24ubWF0ZXJpYWwudHJhbnNtaXNzaW9uO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBuZXdNYXRlcmlhbDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zdCBwYXJhbXM6IFRIUkVFLk1lc2hTdGFuZGFyZE1hdGVyaWFsUGFyYW1ldGVycyA9IHtcclxuICAgICAgICAgICAgICAgIC8vIHNpZGU6IG1hdGVyaWFsLnNpZGUgPyBtYXRlcmlhbC5zaWRlIDogRnJvbnRTaWRlLFxyXG4gICAgICAgICAgICAgICAgbmFtZTogbmFtZSxcclxuICAgICAgICAgICAgICAgIHJvdWdobmVzczogdmFyaWF0aW9uLm1hdGVyaWFsLnJvdWdobmVzc1ZhbHVlID8gdmFyaWF0aW9uLm1hdGVyaWFsLnJvdWdobmVzc1ZhbHVlIDogMSxcclxuICAgICAgICAgICAgICAgIG1ldGFsbmVzczogdmFyaWF0aW9uLm1hdGVyaWFsLm1ldGFsbmVzc1ZhbHVlID8gdmFyaWF0aW9uLm1hdGVyaWFsLm1ldGFsbmVzc1ZhbHVlIDogMCxcclxuICAgICAgICAgICAgICAgIGVudk1hcEludGVuc2l0eTogdmFyaWF0aW9uLm1hdGVyaWFsLmVudk1hcEludGVuc2l0eSA/IHZhcmlhdGlvbi5tYXRlcmlhbC5lbnZNYXBJbnRlbnNpdHkgOiAwLjAxXHJcbiAgICAgICAgICAgICAgICAvLyB3aXJlZnJhbWU6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAvLyBvcGFjaXR5OiAwLjMsXHJcbiAgICAgICAgICAgICAgICAvLyB0cmFuc3BhcmVudDogdHJ1ZSxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgaWYgKHZhcmlhdGlvbi5tYXRlcmlhbC5kaXNwbGFjZW1lbnRWYWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgcGFyYW1zLmRpc3BsYWNlbWVudFNjYWxlID0gdmFyaWF0aW9uLm1hdGVyaWFsLmRpc3BsYWNlbWVudFZhbHVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh2YXJpYXRpb24ubWF0ZXJpYWwub3BhY2l0eSkge1xyXG4gICAgICAgICAgICAgICAgcGFyYW1zLm9wYWNpdHkgPSB2YXJpYXRpb24ubWF0ZXJpYWwub3BhY2l0eTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodmFyaWF0aW9uLm1hdGVyaWFsLnRyYW5zcGFyZW50KSB7XHJcbiAgICAgICAgICAgICAgICBwYXJhbXMudHJhbnNwYXJlbnQgPSB2YXJpYXRpb24ubWF0ZXJpYWwudHJhbnNwYXJlbnQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHZhcmlhdGlvbi5tYXRlcmlhbC5lbWlzc2l2ZVZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICBwYXJhbXMuZW1pc3NpdmUgPSB2YXJpYXRpb24ubWF0ZXJpYWwuZW1pc3NpdmVWYWx1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodmFyaWF0aW9uLm1hdGVyaWFsLmVtaXNzaXZlSW50ZW5zaXR5VmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIHBhcmFtcy5lbWlzc2l2ZUludGVuc2l0eSA9IHZhcmlhdGlvbi5tYXRlcmlhbC5lbWlzc2l2ZUludGVuc2l0eVZhbHVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh2YXJpYXRpb24ubWF0ZXJpYWwudGV4dHVyZSkge1xyXG4gICAgICAgICAgICAgICAgcGFyYW1zLm1hcCA9IHZhcmlhdGlvbi5tYXRlcmlhbC50ZXh0dXJlO1xyXG4gICAgICAgICAgICAgICAgcGFyYW1zLm1hcC5uZWVkc1VwZGF0ZSA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHZhcmlhdGlvbi5tYXRlcmlhbC5hbykge1xyXG4gICAgICAgICAgICAgICAgcGFyYW1zLmFvTWFwID0gdmFyaWF0aW9uLm1hdGVyaWFsLmFvO1xyXG4gICAgICAgICAgICAgICAgcGFyYW1zLmFvTWFwLm5lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodmFyaWF0aW9uLm1hdGVyaWFsLnJvdWdobmVzcykge1xyXG4gICAgICAgICAgICAgICAgcGFyYW1zLnJvdWdobmVzc01hcCA9IHZhcmlhdGlvbi5tYXRlcmlhbC5yb3VnaG5lc3M7XHJcbiAgICAgICAgICAgICAgICBwYXJhbXMucm91Z2huZXNzTWFwLm5lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIC8vIHZhcmlhdGlvbi5tYXRlcmlhbC5yb3VnaG5lc3MubWFnRmlsdGVyID0gTmVhcmVzdEZpbHRlcjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodmFyaWF0aW9uLm1hdGVyaWFsLm1ldGFsbmVzcykge1xyXG4gICAgICAgICAgICAgICAgcGFyYW1zLm1ldGFsbmVzc01hcCA9IHZhcmlhdGlvbi5tYXRlcmlhbC5tZXRhbG5lc3M7XHJcbiAgICAgICAgICAgICAgICBwYXJhbXMubWV0YWxuZXNzTWFwLm5lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodmFyaWF0aW9uLm1hdGVyaWFsLm5vcm1hbCkge1xyXG4gICAgICAgICAgICAgICAgcGFyYW1zLm5vcm1hbE1hcCA9IHZhcmlhdGlvbi5tYXRlcmlhbC5ub3JtYWw7XHJcbiAgICAgICAgICAgICAgICBwYXJhbXMubm9ybWFsTWFwLm5lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodmFyaWF0aW9uLm1hdGVyaWFsLmRpc3BsYWNlbWVudCkge1xyXG4gICAgICAgICAgICAgICAgcGFyYW1zLmRpc3BsYWNlbWVudE1hcCA9IHZhcmlhdGlvbi5tYXRlcmlhbC5kaXNwbGFjZW1lbnQ7XHJcbiAgICAgICAgICAgICAgICBwYXJhbXMuZGlzcGxhY2VtZW50TWFwLm5lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodmFyaWF0aW9uLm1hdGVyaWFsLmVtaXNzaXZlKSB7XHJcbiAgICAgICAgICAgICAgICBwYXJhbXMuZW1pc3NpdmVNYXAgPSB2YXJpYXRpb24ubWF0ZXJpYWwuZW1pc3NpdmU7XHJcbiAgICAgICAgICAgICAgICBwYXJhbXMuZW1pc3NpdmVNYXAubmVlZHNVcGRhdGUgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh2YXJpYXRpb24ubWF0ZXJpYWwuZW52TWFwKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodmFyaWF0aW9uLm1hdGVyaWFsLmVudk1hcEludGVuc2l0eSAhPSBudWxsIHx8IDApIHtcclxuICAgICAgICAgICAgICAgICAgICBwYXJhbXMuZW52TWFwID0gdmFyaWF0aW9uLm1hdGVyaWFsLmVudk1hcDtcclxuICAgICAgICAgICAgICAgICAgICBwYXJhbXMuZW52TWFwLm5lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB2YXJpYXRpb24ubWF0ZXJpYWwuZW52TWFwLm1hcHBpbmcgPSBUSFJFRS5FcXVpcmVjdGFuZ3VsYXJSZWZsZWN0aW9uTWFwcGluZztcclxuICAgICAgICAgICAgICAgICAgICB2YXJpYXRpb24ubWF0ZXJpYWwuZW52TWFwLm1pbkZpbHRlciA9IFRIUkVFLk5lYXJlc3RGaWx0ZXI7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyaWF0aW9uLm1hdGVyaWFsLmVudk1hcC5tYWdGaWx0ZXIgPSBUSFJFRS5OZWFyZXN0RmlsdGVyO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh2YXJpYXRpb24ubWF0ZXJpYWwuc2lkZSkge1xyXG4gICAgICAgICAgICAgICAgcGFyYW1zLnNpZGUgPSB2YXJpYXRpb24ubWF0ZXJpYWwuc2lkZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc3QgbmV3TWF0ZXJpYWw6IFRIUkVFLk1lc2hTdGFuZGFyZE1hdGVyaWFsID0gbmV3IFRIUkVFLk1lc2hTdGFuZGFyZE1hdGVyaWFsKHBhcmFtcyk7XHJcbiAgICAgICAgICAgIG5ld01hdGVyaWFsLmNvbG9yLnNldFJHQigxLCAxLCAxKTtcclxuICAgICAgICAgICAgbmV3TWF0ZXJpYWwubmVlZHNVcGRhdGUgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIG5ld01hdGVyaWFsO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF9zZXRMYXN0S25vd25WYXJpYXRpb25zKGlkOiBzdHJpbmcsIHZhcmlhdGlvbjogVmFyaWF0aW9uW10pOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl9sYXN0S25vd25WYXJpYXRpb25zLnNldChpZCwgdmFyaWF0aW9uKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF9nZXRMYXN0S25vd25WYXJpYXRpb25zKGlkOiBzdHJpbmcpOiBWYXJpYXRpb25bXSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2xhc3RLbm93blZhcmlhdGlvbnMuaGFzKGlkKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fbGFzdEtub3duVmFyaWF0aW9ucy5nZXQoaWQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuXHJcbn1cclxuIl19
414
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFyaWF0aW9uLWhlbHBlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9oZWxwZXIvdmFyaWF0aW9uLWhlbHBlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLDBEQUEwRCxDQUFDO0FBQ3RGLE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLDZCQUE2QixDQUFDO0FBQzlELE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUVoRCxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFDN0MsT0FBTyxLQUFLLEtBQUssTUFBTSxPQUFPLENBQUM7QUFDL0IsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBRXhELE1BQU0sT0FBTyxlQUFlO0lBQTVCO1FBR1ksZ0JBQVcsR0FBd0IsRUFBRSxDQUFDO1FBRXRDLHlCQUFvQixHQUE2QixJQUFJLEdBQUcsRUFBRSxDQUFDO0lBMFp2RSxDQUFDO0lBeFpVLFVBQVU7UUFDYixNQUFNLFlBQVksR0FBa0IsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztRQUNuRixZQUFZLENBQUMsT0FBTyxDQUFDLENBQUMsVUFBVSxFQUFFLEVBQUU7WUFDaEMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFO2dCQUM3QixJQUFJO29CQUNBLElBQUksU0FBUyxDQUFDLFFBQVEsRUFBRTt3QkFDcEIsSUFBSSxTQUFTLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRTs0QkFDNUIsU0FBUyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7eUJBQ3hDO3dCQUNELElBQUksU0FBUyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUU7NEJBQzNCLFNBQVMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFD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QixDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztTQUM1QztRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7Q0FFSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7RGVjb05vZGVUeXBlfSBmcm9tIFwiQGNvbGlqbml0L2NvbmZpZ3VyYXRvcmFwaS9idWlsZC9lbnVtL2RlY28tbm9kZS10eXBlLmVudW1cIjtcclxuaW1wb3J0IHtWYXJpYXRpb25TZXR0aW5nc30gZnJvbSBcIi4uL21vZGVsL3ZhcmlhdGlvbi1zZXR0aW5nc1wiO1xyXG5pbXBvcnQge0Fzc2V0VXRpbHN9IGZyb20gXCIuLi91dGlscy9hc3NldC51dGlsc1wiO1xyXG5pbXBvcnQge0RlY29Ob2RlfSBmcm9tIFwiQGNvbGlqbml0L2NvbmZpZ3VyYXRvcmFwaS9idWlsZC9tb2RlbC9kZWNvLW5vZGVcIjtcclxuaW1wb3J0IHtWYXJpYXRpb259IGZyb20gXCIuLi9tb2RlbC92YXJpYXRpb25cIjtcclxuaW1wb3J0ICogYXMgVEhSRUUgZnJvbSBcInRocmVlXCI7XHJcbmltcG9ydCB7VmFyaWF0aW9uVXRpbHN9IGZyb20gXCIuLi91dGlscy92YXJpYXRpb24tdXRpbHNcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBWYXJpYXRpb25IZWxwZXIge1xyXG5cclxuICAgIHB1YmxpYyBhc3NldFBhdGg6IHN0cmluZztcclxuICAgIHByaXZhdGUgX3ZhcmlhdGlvbnM6IFZhcmlhdGlvblNldHRpbmdzW10gPSBbXTtcclxuXHJcbiAgICBwcml2YXRlIF9sYXN0S25vd25WYXJpYXRpb25zOiBNYXA8c3RyaW5nLCBWYXJpYXRpb25bXT4gPSBuZXcgTWFwKCk7XHJcblxyXG4gICAgcHVibGljIGNsZWFyQ2FjaGUoKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgdmFyaWF0aW9uTWFwOiBWYXJpYXRpb25bXVtdID0gQXJyYXkuZnJvbSh0aGlzLl9sYXN0S25vd25WYXJpYXRpb25zLnZhbHVlcygpKTtcclxuICAgICAgICB2YXJpYXRpb25NYXAuZm9yRWFjaCgodmFyaWF0aW9ucykgPT4ge1xyXG4gICAgICAgICAgICB2YXJpYXRpb25zLmZvckVhY2goKHZhcmlhdGlvbikgPT4ge1xyXG4gICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodmFyaWF0aW9uLm1hdGVyaWFsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYXRpb24ubWF0ZXJpYWwudGV4dHVyZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWF0aW9uLm1hdGVyaWFsLnRleHR1cmUuZGlzcG9zZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYXRpb24ubWF0ZXJpYWwubm9ybWFsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYXRpb24ubWF0ZXJpYWwubm9ybWFsLmRpc3Bvc2UoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFyaWF0aW9uLm1hdGVyaWFsLm1ldGFsbmVzcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWF0aW9uLm1hdGVyaWFsLm1ldGFsbmVzcy5kaXNwb3NlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhcmlhdGlvbi5tYXRlcmlhbC5yb3VnaG5lc3MpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhdGlvbi5tYXRlcmlhbC5yb3VnaG5lc3MuZGlzcG9zZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYXRpb24ubWF0ZXJpYWwuYW8pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhdGlvbi5tYXRlcmlhbC5hby5kaXNwb3NlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIFZhcmlhdGlvblV0aWxzLkNsZWFyQ2FjaGUoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYXN5bmMgbG9hZFBhcnQob2JqOiBUSFJFRS5PYmplY3QzRCwgcGFydHM6IGFueVtdLCB1c2VQYnI6IGJvb2xlYW4gPSBmYWxzZSk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGxlbjogbnVtYmVyID0gcGFydHMubGVuZ3RoO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAocGFydHNbaV0uZGVjb05vZGUgJiYgcGFydHNbaV0uZGVjb05vZGUuZ2FtZU9iamVjdE5hbWUgJiYgcGFydHNbaV0uZGVjb05vZGUudHlwZSA9PT0gRGVjb05vZGVUeXBlLlBhcnQpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXJ0U2V0dGluZ3M6IFZhcmlhdGlvblNldHRpbmdzID1cclxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgVmFyaWF0aW9uVXRpbHMuTG9hZFZhcmlhdGlvbih0aGlzLmFzc2V0UGF0aCwgcGFydHNbaV0uZGVjb05vZGUuZ2FtZU9iamVjdE5hbWUgfHwgcGFydHNbaV0uZGVjb0lkKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocGFydFNldHRpbmdzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhcnRWYXJpYXRpb246IFZhcmlhdGlvbiA9IG5ldyBWYXJpYXRpb24oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGFydFZhcmlhdGlvbi5kZWNvSWQgPSBwYXJzZUZsb2F0KHBhcnRzW2ldLmRlY29Ob2RlLmlkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGFydFZhcmlhdGlvbi5icmFuZElkID0gcGFydHNbaV0uZGVjb05vZGUuYnJhbmRJZDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGFydFZhcmlhdGlvbi5nYW1lT2JqZWN0TmFtZSA9IHBhcnRzW2ldLmRlY29Ob2RlLmdhbWVPYmplY3ROYW1lO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJ0VmFyaWF0aW9uLm1hdGVyaWFsID0gYXdhaXQgQXNzZXRVdGlscy5DcmVhdGVNYXRlcmlhbEZyb21Bc3NldChwYXJ0U2V0dGluZ3MpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBwYXJ0c1tpXS52YXJpYXRpb24gPSBwYXJ0VmFyaWF0aW9uO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9hcHBseU1hdGVyaWFsUGFydChvYmosIHBhcnRWYXJpYXRpb24sIHBhcnRzW2ldLm5vZGUsIHVzZVBicik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYXN5bmMgbG9hZFZhcmlhdGlvbihvYmo6IFRIUkVFLk9iamVjdDNELCBwYXJ0czogYW55W10sIHVzZVBicjogYm9vbGVhbiA9IGZhbHNlKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgY29uc3QgbGVuOiBudW1iZXIgPSBwYXJ0cy5sZW5ndGg7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHZhcmlhdGlvbnM6IERlY29Ob2RlW10gPSBwYXJ0c1tpXS52YXJpYXRpb25zO1xyXG4gICAgICAgICAgICAgICAgaWYgKCF2YXJpYXRpb25zIHx8IHZhcmlhdGlvbnMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2dldExhc3RLbm93blZhcmlhdGlvbnMocGFydHNbaV0ubm9kZUlkKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJ0c1tpXS52YXJpYXRpb25zID0gdGhpcy5fZ2V0TGFzdEtub3duVmFyaWF0aW9ucyhwYXJ0c1tpXS5ub2RlSWQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9hcHBseVZhcmlhdGlvbnMob2JqLCBwYXJ0c1tpXSwgdXNlUGJyKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY29uc3QgbGFzdEtub3duVmFyaWF0aW9uczogVmFyaWF0aW9uW10gPSBbXTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHZhcmlhdGlvblByb21pc2U6IFByb21pc2U8YW55PltdID0gW107XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHZhcmlhdGlvbnMubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXJpYXRpb25Qcm9taXNlLnB1c2goXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZFRoZVZhcmlhdGlvbihcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhdGlvbnNbal0uZ2FtZU9iamVjdE5hbWUgfHwgcGFydHNbaV0uZGVjb0lkKS50aGVuKGFzeW5jICh2YXJpYXRpb25TZXR0aW5nczogVmFyaWF0aW9uU2V0dGluZ3MpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld1ZhcmlhdGlvbjogVmFyaWF0aW9uID0gbmV3IFZhcmlhdGlvbigpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3VmFyaWF0aW9uLmRlY29JZCA9IHBhcnNlRmxvYXQodmFyaWF0aW9uc1tqXS5pZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdWYXJpYXRpb24uYnJhbmRJZCA9IHZhcmlhdGlvbnNbal0uYnJhbmRJZDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld1ZhcmlhdGlvbi5vcHRpb25UZXh0ID0gKHZhcmlhdGlvbnNbal0gYXMgYW55KS5vcHRpb25UZXh0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3VmFyaWF0aW9uLmdhbWVPYmplY3ROYW1lID0gdmFyaWF0aW9uc1tqXS5nYW1lT2JqZWN0TmFtZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld1ZhcmlhdGlvbi5zdXBwbGllckFydGljbGVOciA9ICh2YXJpYXRpb25zW2pdIGFzIGFueSkuc3VwcGxpZXJBcnRpY2xlTnI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdWYXJpYXRpb24ubWF0ZXJpYWxJZCA9ICh2YXJpYXRpb25zW2pdIGFzIGFueSkubWF0ZXJpYWxJZDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld1ZhcmlhdGlvbi5tYXRlcmlhbCA9IGF3YWl0IEFzc2V0VXRpbHMuQ3JlYXRlTWF0ZXJpYWxGcm9tQXNzZXQodmFyaWF0aW9uU2V0dGluZ3MpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdEtub3duVmFyaWF0aW9ucy5wdXNoKG5ld1ZhcmlhdGlvbik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGF3YWl0IFByb21pc2UuYWxsKHZhcmlhdGlvblByb21pc2UpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fc2V0TGFzdEtub3duVmFyaWF0aW9ucyhgJHtwYXJ0c1tpXS5ub2RlSWR9XyR7cGFydHNbaV0ubm9kZX1gLCBsYXN0S25vd25WYXJpYXRpb25zKTtcclxuICAgICAgICAgICAgICAgIHBhcnRzW2ldLnZhcmlhdGlvbnMgPSBsYXN0S25vd25WYXJpYXRpb25zO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fYXBwbHlWYXJpYXRpb25zKG9iaiwgcGFydHNbaV0sIHVzZVBicik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQoaWQ6IHN0cmluZyk6IFZhcmlhdGlvblNldHRpbmdzIHtcclxuICAgICAgICBjb25zdCBsZW46IG51bWJlciA9IHRoaXMuX3ZhcmlhdGlvbnMubGVuZ3RoO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuX3ZhcmlhdGlvbnNbaV0uaWQgJiYgdGhpcy5fdmFyaWF0aW9uc1tpXS5pZCA9PT0gaWQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl92YXJpYXRpb25zW2ldO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzZXQodmFyaWF0aW9uczogVmFyaWF0aW9uU2V0dGluZ3MpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBpZHg6IG51bWJlciA9IHRoaXMuX3ZhcmlhdGlvbnMuZmluZEluZGV4KHYgPT4gdi5pZCA9PT0gdmFyaWF0aW9ucy5pZCk7XHJcbiAgICAgICAgaWYgKGlkeCA+IC0xKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3ZhcmlhdGlvbnNbaWR4XSA9IHZhcmlhdGlvbnM7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5fdmFyaWF0aW9ucy5wdXNoKHZhcmlhdGlvbnMpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcHJlbG9hZFZhcmlhdGlvbnMoc2NoZW1hOiBzdHJpbmcsIGZpbGVOYW1lczogc3RyaW5nW10pOiB2b2lkIHtcclxuICAgICAgICBmaWxlTmFtZXMuZm9yRWFjaCgoZmlsZU5hbWU6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgICBpZiAoZmlsZU5hbWUgJiYgIXRoaXMuZ2V0KGZpbGVOYW1lKSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgc2V0dGluZ3MgPSBuZXcgVmFyaWF0aW9uU2V0dGluZ3MoKTtcclxuICAgICAgICAgICAgICAgIHNldHRpbmdzLmlkID0gZmlsZU5hbWU7XHJcbiAgICAgICAgICAgICAgICBzZXR0aW5ncy5sb2FkaW5nID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3ZhcmlhdGlvbnMucHVzaChzZXR0aW5ncyk7XHJcbiAgICAgICAgICAgICAgICBsZXQgYXNzZXRQYXRoOiBzdHJpbmcgPSB0aGlzLmFzc2V0UGF0aDtcclxuICAgICAgICAgICAgICAgIGlmICghYXNzZXRQYXRoLmVuZHNXaXRoKCcvJykpIHtcclxuICAgICAgICAgICAgICAgICAgICBhc3NldFBhdGggKz0gJy8nO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgVmFyaWF0aW9uVXRpbHMuTG9hZFZhcmlhdGlvbihhc3NldFBhdGgsIGZpbGVOYW1lKS50aGVuKCh2YXJpYXRpb25TZXR0aW5nczogVmFyaWF0aW9uU2V0dGluZ3MpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBzZXR0aW5ncy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgc2V0dGluZ3MubG9hZGVkLm5leHQodmFyaWF0aW9uU2V0dGluZ3MpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYXRpb25TZXR0aW5ncykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldCh2YXJpYXRpb25TZXR0aW5ncyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYXN5bmMgbG9hZFRoZVZhcmlhdGlvbihmaWxlTmFtZTogc3RyaW5nKTogUHJvbWlzZTxWYXJpYXRpb25TZXR0aW5ncz4ge1xyXG4gICAgICAgIGlmICghZmlsZU5hbWUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmdldChmaWxlTmFtZSkpIHtcclxuICAgICAgICAgICAgY29uc3Qgc2V0dGluZ3MgPSB0aGlzLmdldChmaWxlTmFtZSk7XHJcbiAgICAgICAgICAgIGlmIChzZXR0aW5ncy5sb2FkaW5nKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5fd2FpdEZvclZhcmlhdGlvblRvTG9hZChzZXR0aW5ncyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHNldHRpbmdzO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF93YWl0Rm9yVmFyaWF0aW9uVG9Mb2FkKHNldHRpbmdzOiBWYXJpYXRpb25TZXR0aW5ncyk6IFByb21pc2U8VmFyaWF0aW9uU2V0dGluZ3M+IHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmU6IEZ1bmN0aW9uKSA9PiB7XHJcbiAgICAgICAgICAgIHNldHRpbmdzLmxvYWRlZC5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKHZhbHVlKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfZ2V0Q2hpbGRyZW5GaWx0ZXJCeVByb3Aob2JqOiBUSFJFRS5PYmplY3QzRCwgdXNlckRhdGFPYmplY3RQcm9wOiBzdHJpbmcsIHByb3A6IHN0cmluZywgdmFsdWU6IGFueSk6IFRIUkVFLk9iamVjdDNEW10ge1xyXG4gICAgICAgIHJldHVybiBvYmouY2hpbGRyZW4uZmlsdGVyKChjaGlsZCkgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gY2hpbGQudXNlckRhdGEgJiZcclxuICAgICAgICAgICAgICAgIGNoaWxkLnVzZXJEYXRhLmhhc093blByb3BlcnR5KHVzZXJEYXRhT2JqZWN0UHJvcCkgJiZcclxuICAgICAgICAgICAgICAgIGNoaWxkLnVzZXJEYXRhW3VzZXJEYXRhT2JqZWN0UHJvcF0uaGFzT3duUHJvcGVydHkocHJvcCkgJiZcclxuICAgICAgICAgICAgICAgIGNoaWxkLnVzZXJEYXRhW3VzZXJEYXRhT2JqZWN0UHJvcF1bcHJvcF0gPT09IHZhbHVlO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX2FwcGx5TWF0ZXJpYWxQYXJ0KG9iajogVEhSRUUuT2JqZWN0M0QsIHBhcnRNYXRlcmlhbDogYW55LCBub2RlSWQ6IGFueSwgdXNlUGJyOiBib29sZWFuID0gZmFsc2UpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBjaGlsZHJlbiA9IHRoaXMuX2dldENoaWxkcmVuRmlsdGVyQnlQcm9wKG9iaiwgJ3NlbGVjdGlvbicsICdub2RlJywgbm9kZUlkKTtcclxuICAgICAgICBjb25zdCBsZW46IG51bWJlciA9IGNoaWxkcmVuLmxlbmd0aDtcclxuICAgICAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAwOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgY29uc3QgY2hpbGQgPSBjaGlsZHJlbltpXTtcclxuICAgICAgICAgICAgaWYgKGNoaWxkICE9PSBudWxsICYmIGNoaWxkICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgIGNoaWxkLnRyYXZlcnNlKChtZXNoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG1lc2ggaW5zdGFuY2VvZiBUSFJFRS5NZXNoICYmIHBhcnRNYXRlcmlhbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShtZXNoLm1hdGVyaWFsKSkgeyAvLyBtdWx0aW1hdGVyaWFsIHN1cHBvcnRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGogPSAwLCBqbGVuOiBudW1iZXIgPSBtZXNoLm1hdGVyaWFsLmxlbmd0aDsgaiA8IGpsZW47IGorKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNoLm1hdGVyaWFsW2pdLm5hbWUudG9Mb3dlckNhc2UoKS5pbmRleE9mKCdmaXhlZF9mcmFtZScpICE9PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNoLm1hdGVyaWFsW2pdID0gdGhpcy5fc2V0TWVzaE1hdGVyaWFsRnJvbVZhcmlhdGlvbihtZXNoLm1hdGVyaWFsW2pdLm5hbWUsIHBhcnRNYXRlcmlhbCwgdXNlUGJyKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzaC5tYXRlcmlhbC5uYW1lLnRvTG93ZXJDYXNlKCkuaW5kZXhPZignZml4ZWRfZnJhbWUnKSAhPT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNoLm1hdGVyaWFsID0gdGhpcy5fc2V0TWVzaE1hdGVyaWFsRnJvbVZhcmlhdGlvbihtZXNoLm1hdGVyaWFsLm5hbWUsIHBhcnRNYXRlcmlhbCwgdXNlUGJyKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX2FwcGx5VmFyaWF0aW9ucyhvYmo6IFRIUkVFLk9iamVjdDNELCBwYXJ0OiBhbnksIHVzZVBicjogYm9vbGVhbiA9IGZhbHNlKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgY2hpbGRyZW4gPSB0aGlzLl9nZXRDaGlsZHJlbkZpbHRlckJ5UHJvcChvYmosICdzZWxlY3Rpb24nLCAnbm9kZScsIHBhcnQubm9kZSk7XHJcbiAgICAgICAgY29uc3QgbGVuOiBudW1iZXIgPSBjaGlsZHJlbi5sZW5ndGg7XHJcbiAgICAgICAgZm9yIChsZXQgaTogbnVtYmVyID0gMDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkID0gY2hpbGRyZW5baV07XHJcbiAgICAgICAgICAgIGlmIChjaGlsZCAhPT0gbnVsbCAmJiBjaGlsZCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICBjaGlsZC50cmF2ZXJzZSgobWVzaCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChtZXNoIGluc3RhbmNlb2YgVEhSRUUuTWVzaCAmJiBwYXJ0LnZhcmlhdGlvbnMgJiYgcGFydC52YXJpYXRpb25zLmxlbmd0aCA+IDAgJiYgbWVzaC5uYW1lLnRvTG93ZXJDYXNlKCkuaW5kZXhPZignY18nKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHBhcnQudmFyaWF0aW9ucy5sZW5ndGg7IGorKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFyaWF0aW9uOiBWYXJpYXRpb24gPSBwYXJ0LnZhcmlhdGlvbnNbal07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFyaWF0aW9uLm1hdGVyaWFsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWF0ZXJpYWxUb1NlYXJjaDogc3RyaW5nID0gISF2YXJpYXRpb24ubWF0ZXJpYWxJZCA/IHZhcmlhdGlvbi5tYXRlcmlhbElkLnRvTG93ZXJDYXNlKCkgOiAnZGVmYXVsdCc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkobWVzaC5tYXRlcmlhbCkpIHsgLy8gbXVsdGltYXRlcmlhbCBzdXBwb3J0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IG0gPSAwLCBtbGVuOiBudW1iZXIgPSBtZXNoLm1hdGVyaWFsLmxlbmd0aDsgbSA8IG1sZW47IG0rKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc2gubWF0ZXJpYWxbbV0ubmFtZS50b0xvd2VyQ2FzZSgpLmluZGV4T2YobWF0ZXJpYWxUb1NlYXJjaCkgIT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzaC5tYXRlcmlhbFttXSA9IHRoaXMuX3NldE1lc2hNYXRlcmlhbEZyb21WYXJpYXRpb24obWVzaC5tYXRlcmlhbFttXS5uYW1lLCB2YXJpYXRpb24sIHVzZVBicik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzaC5tYXRlcmlhbC5uYW1lLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihtYXRlcmlhbFRvU2VhcmNoKSAhPT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc2gubWF0ZXJpYWwgPSB0aGlzLl9zZXRNZXNoTWF0ZXJpYWxGcm9tVmFyaWF0aW9uKG1lc2gubWF0ZXJpYWwubmFtZSwgdmFyaWF0aW9uLCB1c2VQYnIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfc2V0TWVzaE1hdGVyaWFsRnJvbVZhcmlhdGlvbihuYW1lOiBzdHJpbmcsIHZhcmlhdGlvbjogVmFyaWF0aW9uLCB1c2VQYnI6IGJvb2xlYW4gPSBmYWxzZSk6IFRIUkVFLk1hdGVyaWFsIHtcclxuICAgICAgICBpZiAodmFyaWF0aW9uLm1hdGVyaWFsLnRleHR1cmUpIHtcclxuICAgICAgICAgICAgdmFyaWF0aW9uLm1hdGVyaWFsLnRleHR1cmUubmVlZHNVcGRhdGUgPSB0cnVlO1xyXG4gICAgICAgICAgICB2YXJpYXRpb24ubWF0ZXJpYWwudGV4dHVyZS5tYXBwaW5nID0gVEhSRUUuRXF1aXJlY3Rhbmd1bGFyUmVmbGVjdGlvbk1hcHBpbmc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghdXNlUGJyKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG5ld01hdGVyaWFsOiBUSFJFRS5NZXNoUGhvbmdNYXRlcmlhbCA9IG5ldyBUSFJFRS5NZXNoUGhvbmdNYXRlcmlhbCh7XHJcbiAgICAgICAgICAgICAgICBuYW1lOiBuYW1lLFxyXG4gICAgICAgICAgICAgICAgc2hpbmluZXNzOiB2YXJpYXRpb24ubWF0ZXJpYWwuc2hpbmluZXNzLFxyXG4gICAgICAgICAgICAgICAgc3BlY3VsYXI6IHZhcmlhdGlvbi5tYXRlcmlhbC5zcGVjdWxhcixcclxuICAgICAgICAgICAgICAgIG1hcDogdmFyaWF0aW9uLm1hdGVyaWFsLnRleHR1cmUsXHJcbiAgICAgICAgICAgICAgICBub3JtYWxNYXA6IHZhcmlhdGlvbi5tYXRlcmlhbC5ub3JtYWxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIG5ld01hdGVyaWFsLmNvbG9yLnNldFJHQigwLjgsIDAuOCwgMC44KTtcclxuICAgICAgICAgICAgbmV3TWF0ZXJpYWwubmVlZHNVcGRhdGUgPSB0cnVlO1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3TWF0ZXJpYWw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh2YXJpYXRpb24ubWF0ZXJpYWwuc2hlZW5Db2xvciB8fCB2YXJpYXRpb24ubWF0ZXJpYWwucmVmbGVjdGl2aXR5KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHBhcmFtczogVEhSRUUuTWVzaFBoeXNpY2FsTWF0ZXJpYWxQYXJhbWV0ZXJzID0ge1xyXG4gICAgICAgICAgICAgICAgLy8gc2lkZTogbWF0ZXJpYWwuc2lkZSA/IG1hdGVyaWFsLnNpZGUgOiBGcm9udFNpZGUsXHJcbiAgICAgICAgICAgICAgICBuYW1lOiBuYW1lLFxyXG4gICAgICAgICAgICAgICAgcm91Z2huZXNzOiB2YXJpYXRpb24ubWF0ZXJpYWwucm91Z2huZXNzVmFsdWUgPyB2YXJpYXRpb24ubWF0ZXJpYWwucm91Z2huZXNzVmFsdWUgOiAxLFxyXG4gICAgICAgICAgICAgICAgbWV0YWxuZXNzOiB2YXJpYXRpb24ubWF0ZXJpYWwubWV0YWxuZXNzVmFsdWUgPyB2YXJpYXRpb24ubWF0ZXJpYWwubWV0YWxuZXNzVmFsdWUgOiAwLFxyXG4gICAgICAgICAgICAgICAgZW52TWFwSW50ZW5zaXR5OiB2YXJpYXRpb24ubWF0ZXJpYWwuZW52TWFwSW50ZW5zaXR5ID8gdmFyaWF0aW9uLm1hdGVyaWFsLmVudk1hcEludGVuc2l0eSA6IDAuMDEsXHJcbiAgICAgICAgICAgICAgICBjbGVhcmNvYXRNYXA6IHZhcmlhdGlvbi5tYXRlcmlhbC5jbGVhcmNvYXRNYXAgPyB2YXJpYXRpb24ubWF0ZXJpYWwuY2xlYXJjb2F0TWFwIDogbnVsbCxcclxuICAgICAgICAgICAgICAgIGNsZWFyY29hdFJvdWdobmVzc01hcDogdmFyaWF0aW9uLm1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzc01hcCA/IHZhcmlhdGlvbi5tYXRlcmlhbC5jbGVhcmNvYXRSb3VnaG5lc3NNYXAgOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgLy8gd2lyZWZyYW1lOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgLy8gb3BhY2l0eTogMC4zLFxyXG4gICAgICAgICAgICAgICAgLy8gdHJhbnNwYXJlbnQ6IHRydWUsXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIGlmICh2YXJpYXRpb24ubWF0ZXJpYWwuZGlzcGxhY2VtZW50VmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIHBhcmFtcy5kaXNwbGFjZW1lbnRTY2FsZSA9IHZhcmlhdGlvbi5tYXRlcmlhbC5kaXNwbGFjZW1lbnRWYWx1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodmFyaWF0aW9uLm1hdGVyaWFsLnNoZWVuQ29sb3IpIHtcclxuICAgICAgICAgICAgICAgIHBhcmFtcy5zaGVlbiA9IHZhcmlhdGlvbi5tYXRlcmlhbC5zaGVlbkNvbG9yO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh2YXJpYXRpb24ubWF0ZXJpYWwub3BhY2l0eSkge1xyXG4gICAgICAgICAgICAgICAgcGFyYW1zLm9wYWNpdHkgPSB2YXJpYXRpb24ubWF0ZXJpYWwub3BhY2l0eTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodmFyaWF0aW9uLm1hdGVyaWFsLnRyYW5zcGFyZW50KSB7XHJcbiAgICAgICAgICAgICAgICBwYXJhbXMudHJhbnNwYXJlbnQgPSB2YXJpYXRpb24ubWF0ZXJpYWwudHJhbnNwYXJlbnQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHZhcmlhdGlvbi5tYXRlcmlhbC5lbWlzc2l2ZVZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICBwYXJhbXMuZW1pc3NpdmUgPSB2YXJpYXRpb24ubWF0ZXJpYWwuZW1pc3NpdmVWYWx1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodmFyaWF0aW9uLm1hdGVyaWFsLmVtaXNzaXZlSW50ZW5zaXR5VmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIHBhcmFtcy5lbWlzc2l2ZUludGVuc2l0eSA9IHZhcmlhdGlvbi5tYXRlcmlhbC5lbWlzc2l2ZUludGVuc2l0eVZhbHVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh2YXJpYXRpb24ubWF0ZXJpYWwudGV4dHVyZSkge1xyXG4gICAgICAgICAgICAgICAgcGFyYW1zLm1hcCA9IHZhcmlhdGlvbi5tYXRlcmlhbC50ZXh0dXJlO1xyXG4gICAgICAgICAgICAgICAgcGFyYW1zLm1hcC5uZWVkc1VwZGF0ZSA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHZhcmlhdGlvbi5tYXRlcmlhbC5hbykge1xyXG4gICAgICAgICAgICAgICAgcGFyYW1zLmFvTWFwID0gdmFyaWF0aW9uLm1hdGVyaWFsLmFvO1xyXG4gICAgICAgICAgICAgICAgcGFyYW1zLmFvTWFwLm5lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodmFyaWF0aW9uLm1hdGVyaWFsLnJvdWdobmVzcykge1xyXG4gICAgICAgICAgICAgICAgcGFyYW1zLnJvdWdobmVzc01hcCA9IHZhcmlhdGlvbi5tYXRlcmlhbC5yb3VnaG5lc3M7XHJcbiAgICAgICAgICAgICAgICBwYXJhbXMucm91Z2huZXNzTWFwLm5lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIC8vIHZhcmlhdGlvbi5tYXRlcmlhbC5yb3VnaG5lc3MubWFnRmlsdGVyID0gTmVhcmVzdEZpbHRlcjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodmFyaWF0aW9uLm1hdGVyaWFsLm1ldGFsbmVzcykge1xyXG4gICAgICAgICAgICAgICAgcGFyYW1zLm1ldGFsbmVzc01hcCA9IHZhcmlhdGlvbi5tYXRlcmlhbC5tZXRhbG5lc3M7XHJcbiAgICAgICAgICAgICAgICBwYXJhbXMubWV0YWxuZXNzTWFwLm5lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodmFyaWF0aW9uLm1hdGVyaWFsLm5vcm1hbCkge1xyXG4gICAgICAgICAgICAgICAgcGFyYW1zLm5vcm1hbE1hcCA9IHZhcmlhdGlvbi5tYXRlcmlhbC5ub3JtYWw7XHJcbiAgICAgICAgICAgICAgICBwYXJhbXMubm9ybWFsTWFwLm5lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodmFyaWF0aW9uLm1hdGVyaWFsLmRpc3BsYWNlbWVudCkge1xyXG4gICAgICAgICAgICAgICAgcGFyYW1zLmRpc3BsYWNlbWVudE1hcCA9IHZhcmlhdGlvbi5tYXRlcmlhbC5kaXNwbGFjZW1lbnQ7XHJcbiAgICAgICAgICAgICAgICBwYXJhbXMuZGlzcGxhY2VtZW50TWFwLm5lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodmFyaWF0aW9uLm1hdGVyaWFsLmVtaXNzaXZlKSB7XHJcbiAgICAgICAgICAgICAgICBwYXJhbXMuZW1pc3NpdmVNYXAgPSB2YXJpYXRpb24ubWF0ZXJpYWwuZW1pc3NpdmU7XHJcbiAgICAgICAgICAgICAgICBwYXJhbXMuZW1pc3NpdmVNYXAubmVlZHNVcGRhdGUgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh2YXJpYXRpb24ubWF0ZXJpYWwuZW52TWFwKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodmFyaWF0aW9uLm1hdGVyaWFsLmVudk1hcEludGVuc2l0eSAhPSBudWxsIHx8IDApIHtcclxuICAgICAgICAgICAgICAgICAgICBwYXJhbXMuZW52TWFwID0gdmFyaWF0aW9uLm1hdGVyaWFsLmVudk1hcDtcclxuICAgICAgICAgICAgICAgICAgICBwYXJhbXMuZW52TWFwLm5lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB2YXJpYXRpb24ubWF0ZXJpYWwuZW52TWFwLm1hcHBpbmcgPSBUSFJFRS5FcXVpcmVjdGFuZ3VsYXJSZWZsZWN0aW9uTWFwcGluZztcclxuICAgICAgICAgICAgICAgICAgICB2YXJpYXRpb24ubWF0ZXJpYWwuZW52TWFwLm1pbkZpbHRlciA9IFRIUkVFLk5lYXJlc3RGaWx0ZXI7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyaWF0aW9uLm1hdGVyaWFsLmVudk1hcC5tYWdGaWx0ZXIgPSBUSFJFRS5OZWFyZXN0RmlsdGVyO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh2YXJpYXRpb24ubWF0ZXJpYWwucmVmbGVjdGl2aXR5KSB7XHJcbiAgICAgICAgICAgICAgICBwYXJhbXMucmVmbGVjdGl2aXR5ID0gdmFyaWF0aW9uLm1hdGVyaWFsLnJlZmxlY3Rpdml0eTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodmFyaWF0aW9uLm1hdGVyaWFsLnNpZGUpIHtcclxuICAgICAgICAgICAgICAgIHBhcmFtcy5zaWRlID0gdmFyaWF0aW9uLm1hdGVyaWFsLnNpZGU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNvbnN0IG5ld01hdGVyaWFsOiBUSFJFRS5NZXNoUGh5c2ljYWxNYXRlcmlhbCA9IG5ldyBUSFJFRS5NZXNoUGh5c2ljYWxNYXRlcmlhbChwYXJhbXMpO1xyXG4gICAgICAgICAgICBuZXdNYXRlcmlhbC5jb2xvci5zZXRSR0IoMSwgMSwgMSk7XHJcbiAgICAgICAgICAgIG5ld01hdGVyaWFsLm5lZWRzVXBkYXRlID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgIGlmICh2YXJpYXRpb24ubWF0ZXJpYWwudHJhbnNtaXNzaW9uKSB7XHJcbiAgICAgICAgICAgICAgICBuZXdNYXRlcmlhbC50cmFuc21pc3Npb24gPSB2YXJpYXRpb24ubWF0ZXJpYWwudHJhbnNtaXNzaW9uO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBuZXdNYXRlcmlhbDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zdCBwYXJhbXM6IFRIUkVFLk1lc2hTdGFuZGFyZE1hdGVyaWFsUGFyYW1ldGVycyA9IHtcclxuICAgICAgICAgICAgICAgIC8vIHNpZGU6IG1hdGVyaWFsLnNpZGUgPyBtYXRlcmlhbC5zaWRlIDogRnJvbnRTaWRlLFxyXG4gICAgICAgICAgICAgICAgbmFtZTogbmFtZSxcclxuICAgICAgICAgICAgICAgIHJvdWdobmVzczogdmFyaWF0aW9uLm1hdGVyaWFsLnJvdWdobmVzc1ZhbHVlID8gdmFyaWF0aW9uLm1hdGVyaWFsLnJvdWdobmVzc1ZhbHVlIDogMSxcclxuICAgICAgICAgICAgICAgIG1ldGFsbmVzczogdmFyaWF0aW9uLm1hdGVyaWFsLm1ldGFsbmVzc1ZhbHVlID8gdmFyaWF0aW9uLm1hdGVyaWFsLm1ldGFsbmVzc1ZhbHVlIDogMCxcclxuICAgICAgICAgICAgICAgIGVudk1hcEludGVuc2l0eTogdmFyaWF0aW9uLm1hdGVyaWFsLmVudk1hcEludGVuc2l0eSA/IHZhcmlhdGlvbi5tYXRlcmlhbC5lbnZNYXBJbnRlbnNpdHkgOiAwLjAxXHJcbiAgICAgICAgICAgICAgICAvLyB3aXJlZnJhbWU6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAvLyBvcGFjaXR5OiAwLjMsXHJcbiAgICAgICAgICAgICAgICAvLyB0cmFuc3BhcmVudDogdHJ1ZSxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgaWYgKHZhcmlhdGlvbi5tYXRlcmlhbC5kaXNwbGFjZW1lbnRWYWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgcGFyYW1zLmRpc3BsYWNlbWVudFNjYWxlID0gdmFyaWF0aW9uLm1hdGVyaWFsLmRpc3BsYWNlbWVudFZhbHVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh2YXJpYXRpb24ubWF0ZXJpYWwub3BhY2l0eSkge1xyXG4gICAgICAgICAgICAgICAgcGFyYW1zLm9wYWNpdHkgPSB2YXJpYXRpb24ubWF0ZXJpYWwub3BhY2l0eTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodmFyaWF0aW9uLm1hdGVyaWFsLnRyYW5zcGFyZW50KSB7XHJcbiAgICAgICAgICAgICAgICBwYXJhbXMudHJhbnNwYXJlbnQgPSB2YXJpYXRpb24ubWF0ZXJpYWwudHJhbnNwYXJlbnQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHZhcmlhdGlvbi5tYXRlcmlhbC5lbWlzc2l2ZVZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICBwYXJhbXMuZW1pc3NpdmUgPSB2YXJpYXRpb24ubWF0ZXJpYWwuZW1pc3NpdmVWYWx1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodmFyaWF0aW9uLm1hdGVyaWFsLmVtaXNzaXZlSW50ZW5zaXR5VmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIHBhcmFtcy5lbWlzc2l2ZUludGVuc2l0eSA9IHZhcmlhdGlvbi5tYXRlcmlhbC5lbWlzc2l2ZUludGVuc2l0eVZhbHVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh2YXJpYXRpb24ubWF0ZXJpYWwudGV4dHVyZSkge1xyXG4gICAgICAgICAgICAgICAgcGFyYW1zLm1hcCA9IHZhcmlhdGlvbi5tYXRlcmlhbC50ZXh0dXJlO1xyXG4gICAgICAgICAgICAgICAgcGFyYW1zLm1hcC5uZWVkc1VwZGF0ZSA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHZhcmlhdGlvbi5tYXRlcmlhbC5hbykge1xyXG4gICAgICAgICAgICAgICAgcGFyYW1zLmFvTWFwID0gdmFyaWF0aW9uLm1hdGVyaWFsLmFvO1xyXG4gICAgICAgICAgICAgICAgcGFyYW1zLmFvTWFwLm5lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodmFyaWF0aW9uLm1hdGVyaWFsLnJvdWdobmVzcykge1xyXG4gICAgICAgICAgICAgICAgcGFyYW1zLnJvdWdobmVzc01hcCA9IHZhcmlhdGlvbi5tYXRlcmlhbC5yb3VnaG5lc3M7XHJcbiAgICAgICAgICAgICAgICBwYXJhbXMucm91Z2huZXNzTWFwLm5lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIC8vIHZhcmlhdGlvbi5tYXRlcmlhbC5yb3VnaG5lc3MubWFnRmlsdGVyID0gTmVhcmVzdEZpbHRlcjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodmFyaWF0aW9uLm1hdGVyaWFsLm1ldGFsbmVzcykge1xyXG4gICAgICAgICAgICAgICAgcGFyYW1zLm1ldGFsbmVzc01hcCA9IHZhcmlhdGlvbi5tYXRlcmlhbC5tZXRhbG5lc3M7XHJcbiAgICAgICAgICAgICAgICBwYXJhbXMubWV0YWxuZXNzTWFwLm5lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodmFyaWF0aW9uLm1hdGVyaWFsLm5vcm1hbCkge1xyXG4gICAgICAgICAgICAgICAgcGFyYW1zLm5vcm1hbE1hcCA9IHZhcmlhdGlvbi5tYXRlcmlhbC5ub3JtYWw7XHJcbiAgICAgICAgICAgICAgICBwYXJhbXMubm9ybWFsTWFwLm5lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodmFyaWF0aW9uLm1hdGVyaWFsLmRpc3BsYWNlbWVudCkge1xyXG4gICAgICAgICAgICAgICAgcGFyYW1zLmRpc3BsYWNlbWVudE1hcCA9IHZhcmlhdGlvbi5tYXRlcmlhbC5kaXNwbGFjZW1lbnQ7XHJcbiAgICAgICAgICAgICAgICBwYXJhbXMuZGlzcGxhY2VtZW50TWFwLm5lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodmFyaWF0aW9uLm1hdGVyaWFsLmVtaXNzaXZlKSB7XHJcbiAgICAgICAgICAgICAgICBwYXJhbXMuZW1pc3NpdmVNYXAgPSB2YXJpYXRpb24ubWF0ZXJpYWwuZW1pc3NpdmU7XHJcbiAgICAgICAgICAgICAgICBwYXJhbXMuZW1pc3NpdmVNYXAubmVlZHNVcGRhdGUgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh2YXJpYXRpb24ubWF0ZXJpYWwuZW52TWFwKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodmFyaWF0aW9uLm1hdGVyaWFsLmVudk1hcEludGVuc2l0eSAhPSBudWxsIHx8IDApIHtcclxuICAgICAgICAgICAgICAgICAgICBwYXJhbXMuZW52TWFwID0gdmFyaWF0aW9uLm1hdGVyaWFsLmVudk1hcDtcclxuICAgICAgICAgICAgICAgICAgICBwYXJhbXMuZW52TWFwLm5lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB2YXJpYXRpb24ubWF0ZXJpYWwuZW52TWFwLm1hcHBpbmcgPSBUSFJFRS5FcXVpcmVjdGFuZ3VsYXJSZWZsZWN0aW9uTWFwcGluZztcclxuICAgICAgICAgICAgICAgICAgICB2YXJpYXRpb24ubWF0ZXJpYWwuZW52TWFwLm1pbkZpbHRlciA9IFRIUkVFLk5lYXJlc3RGaWx0ZXI7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyaWF0aW9uLm1hdGVyaWFsLmVudk1hcC5tYWdGaWx0ZXIgPSBUSFJFRS5OZWFyZXN0RmlsdGVyO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh2YXJpYXRpb24ubWF0ZXJpYWwuc2lkZSkge1xyXG4gICAgICAgICAgICAgICAgcGFyYW1zLnNpZGUgPSB2YXJpYXRpb24ubWF0ZXJpYWwuc2lkZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc3QgbmV3TWF0ZXJpYWw6IFRIUkVFLk1lc2hTdGFuZGFyZE1hdGVyaWFsID0gbmV3IFRIUkVFLk1lc2hTdGFuZGFyZE1hdGVyaWFsKHBhcmFtcyk7XHJcbiAgICAgICAgICAgIG5ld01hdGVyaWFsLmNvbG9yLnNldFJHQigxLCAxLCAxKTtcclxuICAgICAgICAgICAgbmV3TWF0ZXJpYWwubmVlZHNVcGRhdGUgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIG5ld01hdGVyaWFsO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF9zZXRMYXN0S25vd25WYXJpYXRpb25zKGlkOiBzdHJpbmcsIHZhcmlhdGlvbjogVmFyaWF0aW9uW10pOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl9sYXN0S25vd25WYXJpYXRpb25zLnNldChpZCwgdmFyaWF0aW9uKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF9nZXRMYXN0S25vd25WYXJpYXRpb25zKGlkOiBzdHJpbmcpOiBWYXJpYXRpb25bXSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2xhc3RLbm93blZhcmlhdGlvbnMuaGFzKGlkKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fbGFzdEtub3duVmFyaWF0aW9ucy5nZXQoaWQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuXHJcbn1cclxuIl19
@@ -1,3 +1,3 @@
1
1
  export class Variation {
2
2
  }
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFyaWF0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL21vZGVsL3ZhcmlhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxNQUFNLE9BQU8sU0FBUztDQVFyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7TWF0ZXJpYWx9IGZyb20gJy4vbWF0ZXJpYWwnO1xuXG5leHBvcnQgY2xhc3MgVmFyaWF0aW9uIHtcbiAgcHVibGljIGRlY29JZDogbnVtYmVyO1xuICBwdWJsaWMgYnJhbmRJZDogc3RyaW5nO1xuICBwdWJsaWMgZ2FtZU9iamVjdE5hbWU6IHN0cmluZztcbiAgcHVibGljIG5vZGU6IGFueTtcbiAgcHVibGljIHN1cHBsaWVyQXJ0aWNsZU5yOiBzdHJpbmc7XG4gIHB1YmxpYyBtYXRlcmlhbElkOiBzdHJpbmc7XG4gIHB1YmxpYyBtYXRlcmlhbDogTWF0ZXJpYWw7XG59XG4iXX0=
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFyaWF0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL21vZGVsL3ZhcmlhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxNQUFNLE9BQU8sU0FBUztDQVNyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7TWF0ZXJpYWx9IGZyb20gJy4vbWF0ZXJpYWwnO1xuXG5leHBvcnQgY2xhc3MgVmFyaWF0aW9uIHtcbiAgcHVibGljIGRlY29JZDogbnVtYmVyO1xuICBwdWJsaWMgYnJhbmRJZDogc3RyaW5nO1xuICBwdWJsaWMgZ2FtZU9iamVjdE5hbWU6IHN0cmluZztcbiAgcHVibGljIG5vZGU6IGFueTtcbiAgcHVibGljIG9wdGlvblRleHQ6IHN0cmluZztcbiAgcHVibGljIHN1cHBsaWVyQXJ0aWNsZU5yOiBzdHJpbmc7XG4gIHB1YmxpYyBtYXRlcmlhbElkOiBzdHJpbmc7XG4gIHB1YmxpYyBtYXRlcmlhbDogTWF0ZXJpYWw7XG59XG4iXX0=
@@ -518,6 +518,14 @@ class SceneUtils {
518
518
  }
519
519
  }
520
520
 
521
+ class VariationSettings {
522
+ constructor() {
523
+ this.settings = {};
524
+ this.loading = false;
525
+ this.loaded = new Subject();
526
+ }
527
+ }
528
+
521
529
  class Material {
522
530
  constructor() {
523
531
  this.specular = new THREE.Color(0.3, 0.3, 0.3);
@@ -703,14 +711,6 @@ class AssetUtils {
703
711
  class Variation {
704
712
  }
705
713
 
706
- class VariationSettings {
707
- constructor() {
708
- this.settings = {};
709
- this.loading = false;
710
- this.loaded = new Subject();
711
- }
712
- }
713
-
714
714
  // @dynamic
715
715
  class VariationUtils {
716
716
  static ClearCache() {
@@ -1002,6 +1002,7 @@ VariationUtils.MaterialCache = new Map();
1002
1002
 
1003
1003
  class VariationHelper {
1004
1004
  constructor() {
1005
+ this._variations = [];
1005
1006
  this._lastKnownVariations = new Map();
1006
1007
  }
1007
1008
  clearCache() {
@@ -1074,18 +1075,22 @@ class VariationHelper {
1074
1075
  }
1075
1076
  }
1076
1077
  const lastKnownVariations = [];
1078
+ const variationPromise = [];
1077
1079
  for (let j = 0; j < variations.length; j++) {
1078
- const variationSettings = yield VariationUtils.LoadVariation(this.assetPath, variations[j].gameObjectName || parts[i].decoId);
1079
- const newVariation = new Variation();
1080
- newVariation.decoId = parseFloat(variations[j].id);
1081
- newVariation.brandId = variations[j].brandId;
1082
- newVariation.gameObjectName = variations[j].gameObjectName;
1083
- newVariation.supplierArticleNr = variations[j].supplierArticleNr;
1084
- newVariation.materialId = variations[j].materialId;
1085
- newVariation.material = yield AssetUtils.CreateMaterialFromAsset(variationSettings);
1086
- lastKnownVariations.push(newVariation);
1080
+ variationPromise.push(this.loadTheVariation(variations[j].gameObjectName || parts[i].decoId).then((variationSettings) => __awaiter(this, void 0, void 0, function* () {
1081
+ const newVariation = new Variation();
1082
+ newVariation.decoId = parseFloat(variations[j].id);
1083
+ newVariation.brandId = variations[j].brandId;
1084
+ newVariation.optionText = variations[j].optionText;
1085
+ newVariation.gameObjectName = variations[j].gameObjectName;
1086
+ newVariation.supplierArticleNr = variations[j].supplierArticleNr;
1087
+ newVariation.materialId = variations[j].materialId;
1088
+ newVariation.material = yield AssetUtils.CreateMaterialFromAsset(variationSettings);
1089
+ lastKnownVariations.push(newVariation);
1090
+ })));
1087
1091
  }
1088
- this._setLastKnownVariations(parts[i].nodeId, lastKnownVariations);
1092
+ yield Promise.all(variationPromise);
1093
+ this._setLastKnownVariations(`${parts[i].nodeId}_${parts[i].node}`, lastKnownVariations);
1089
1094
  parts[i].variations = lastKnownVariations;
1090
1095
  this._applyVariations(obj, parts[i], usePbr);
1091
1096
  }
@@ -1095,6 +1100,65 @@ class VariationHelper {
1095
1100
  }
1096
1101
  });
1097
1102
  }
1103
+ get(id) {
1104
+ const len = this._variations.length;
1105
+ for (let i = 0; i < len; i++) {
1106
+ if (this._variations[i].id && this._variations[i].id === id) {
1107
+ return this._variations[i];
1108
+ }
1109
+ }
1110
+ }
1111
+ set(variations) {
1112
+ const idx = this._variations.findIndex(v => v.id === variations.id);
1113
+ if (idx > -1) {
1114
+ this._variations[idx] = variations;
1115
+ }
1116
+ else {
1117
+ this._variations.push(variations);
1118
+ }
1119
+ }
1120
+ preloadVariations(schema, fileNames) {
1121
+ fileNames.forEach((fileName) => {
1122
+ if (fileName && !this.get(fileName)) {
1123
+ const settings = new VariationSettings();
1124
+ settings.id = fileName;
1125
+ settings.loading = true;
1126
+ this._variations.push(settings);
1127
+ let assetPath = this.assetPath;
1128
+ if (!assetPath.endsWith('/')) {
1129
+ assetPath += '/';
1130
+ }
1131
+ VariationUtils.LoadVariation(assetPath, fileName).then((variationSettings) => {
1132
+ settings.loading = false;
1133
+ settings.loaded.next(variationSettings);
1134
+ if (variationSettings) {
1135
+ this.set(variationSettings);
1136
+ }
1137
+ });
1138
+ }
1139
+ });
1140
+ }
1141
+ loadTheVariation(fileName) {
1142
+ return __awaiter(this, void 0, void 0, function* () {
1143
+ if (!fileName) {
1144
+ return null;
1145
+ }
1146
+ if (this.get(fileName)) {
1147
+ const settings = this.get(fileName);
1148
+ if (settings.loading) {
1149
+ return yield this._waitForVariationToLoad(settings);
1150
+ }
1151
+ return settings;
1152
+ }
1153
+ });
1154
+ }
1155
+ _waitForVariationToLoad(settings) {
1156
+ return new Promise((resolve) => {
1157
+ settings.loaded.subscribe((value) => {
1158
+ resolve(value);
1159
+ });
1160
+ });
1161
+ }
1098
1162
  _getChildrenFilterByProp(obj, userDataObjectProp, prop, value) {
1099
1163
  return obj.children.filter((child) => {
1100
1164
  return child.userData &&
@@ -1162,7 +1226,7 @@ class VariationHelper {
1162
1226
  _setMeshMaterialFromVariation(name, variation, usePbr = false) {
1163
1227
  if (variation.material.texture) {
1164
1228
  variation.material.texture.needsUpdate = true;
1165
- // variation.material.texture.mapping = THREE.EquirectangularReflectionMapping;
1229
+ variation.material.texture.mapping = THREE.EquirectangularReflectionMapping;
1166
1230
  }
1167
1231
  if (!usePbr) {
1168
1232
  const newMaterial = new THREE.MeshPhongMaterial({
@@ -1530,13 +1594,16 @@ class Builder {
1530
1594
  return;
1531
1595
  }
1532
1596
  try {
1597
+ // console.log(new Date(), 'start build');
1533
1598
  yield this._downloadAsset(assetUrl, cdnUrl, schema);
1534
1599
  if (selections && selections.length > 1 && decos && decos.length > 0 && this._source) {
1535
1600
  this._selections = selections;
1536
1601
  this._decos = decos;
1537
1602
  this._linkSelectionsAndDecos();
1603
+ this._preloadMaterials(schema);
1538
1604
  const build = yield this._build();
1539
1605
  this._cleanUp();
1606
+ // console.log(new Date(), 'finish build');
1540
1607
  return build;
1541
1608
  }
1542
1609
  else {
@@ -1621,6 +1688,9 @@ class Builder {
1621
1688
  return '';
1622
1689
  }
1623
1690
  }
1691
+ _preloadMaterials(schema) {
1692
+ this._variationHelper.preloadVariations(schema, this._decos.map(d => d.gameObjectName));
1693
+ }
1624
1694
  _setInstanceId(sku, instanceId, goodId) {
1625
1695
  return __awaiter(this, void 0, void 0, function* () {
1626
1696
  if (!instanceId && !this._instanceId) {
@@ -1675,6 +1745,7 @@ class Builder {
1675
1745
  obj.visible = false; // no need to render visualy
1676
1746
  this._scene.add(obj);
1677
1747
  let connected = false;
1748
+ // console.log(new Date(), 'build main model');
1678
1749
  for (let i = 0, len = adjustables.length; i < len; i++) {
1679
1750
  const adjustable = this._createAdjustable(obj, adjustables[i]);
1680
1751
  if (adjustable) {
@@ -1692,12 +1763,17 @@ class Builder {
1692
1763
  console.warn('No connection found for: ', adjustable.name);
1693
1764
  }
1694
1765
  }
1766
+ // console.log(new Date(), 'place addables');
1695
1767
  this._placeAddables(obj);
1768
+ // console.log(new Date(), 'update pivot');
1696
1769
  this._updatePivot(obj);
1770
+ // console.log(new Date(), 'load variations');
1697
1771
  yield this._loadVariations(obj);
1698
1772
  // this._variationHelper.clearCache();
1773
+ // console.log(new Date(), 'remove from scene');
1699
1774
  this._scene.remove(obj);
1700
1775
  ObjectUtils.DisposeObject(this._source);
1776
+ // console.log(new Date(), 'ready!');
1701
1777
  return obj;
1702
1778
  }
1703
1779
  else {
@@ -1965,10 +2041,15 @@ class Builder {
1965
2041
  }
1966
2042
  _loadVariations(obj) {
1967
2043
  return __awaiter(this, void 0, void 0, function* () {
2044
+ // console.log(new Date(), 'load variation for parts');
1968
2045
  yield this._variationHelper.loadPart(obj, this._adjustables, true);
2046
+ // console.log(new Date(), 'load variation for adjustables');
1969
2047
  yield this._variationHelper.loadVariation(obj, this._adjustables, true);
2048
+ // console.log(new Date(), 'load variation for addables');
1970
2049
  yield this._variationHelper.loadVariation(obj, this._addables, true);
2050
+ // console.log(new Date(), 'load variation clear cache');
1971
2051
  this._variationHelper.clearCache();
2052
+ // console.log(new Date(), 'load variations done');
1972
2053
  });
1973
2054
  }
1974
2055
  _getAdjustables() {