@colijnit/homedecorator 258.1.13 → 258.1.15

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.
@@ -1629,7 +1629,7 @@ export class WallItem extends Item {
1629
1629
  });
1630
1630
  }
1631
1631
  setYPositionBasedOnElevation() {
1632
- this.position.y = this.elevation + this.halfSize.y;
1632
+ this.position.y = this.elevation + (this.halfSize ? this.halfSize.y : 0);
1633
1633
  }
1634
1634
  addMaterialMap(material, texture, flip) {
1635
1635
  return __awaiter(this, void 0, void 0, function* () {
@@ -2044,6 +2044,7 @@ export class InWallItem extends WallItem {
2044
2044
  const clone = this.createClass();
2045
2045
  this.cloneProperties(clone);
2046
2046
  clone.name = 'test clone';
2047
+ clone.buildFinished();
2047
2048
  return clone;
2048
2049
  }
2049
2050
  createMaterial(side = THREE.DoubleSide, isSame = true) {
@@ -2390,4 +2391,4 @@ export class WallItemGroup extends ItemGroup {
2390
2391
  return this.halfSize.y + this._positionYTolerance;
2391
2392
  }
2392
2393
  }
2393
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2FsbC1vYmplY3RzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2NsaWVudC9hcHAvcGx1Z2lucy9jb3JlM2QvaXRlbXMvd2FsbC1vYmplY3RzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBLE9BQU8sRUFDSCxXQUFXLEVBQ1gsZUFBZSxFQUNmLGNBQWMsRUFDZCxLQUFLLEVBQUUsVUFBVSxFQUNqQixPQUFPLEVBQ1AsSUFBSSxFQUNKLGlCQUFpQixFQUNqQixvQkFBb0IsRUFBa0MsSUFBSSxFQUMxRCxVQUFVLEVBQUUsS0FBSyxFQUFFLGFBQWEsRUFBRSxjQUFjLEVBQ2hELE9BQU8sRUFDUCxPQUFPLEVBQ1YsTUFBTSxPQUFPLENBQUM7QUFDZixPQUFPLEtBQUssS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMvQixPQUFPLEVBQUMsWUFBWSxFQUFVLE1BQU0sNkJBQTZCLENBQUM7QUFDbEUsT0FBTyxFQUFDLElBQUksRUFBQyxNQUFNLFFBQVEsQ0FBQztBQUM1QixPQUFPLEVBQUMsS0FBSyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3BDLE9BQU8sRUFBQyxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBQyxNQUFNLDJEQUEyRCxDQUFDO0FBQzdHLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFDdkMsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLCtDQUErQyxDQUFDO0FBQ3JFLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxrQ0FBa0MsQ0FBQztBQUM3RCxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sb0NBQW9DLENBQUM7QUFFakUsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUVyQyxPQUFPLEtBQUssUUFBUSxNQUFNLG1CQUFtQixDQUFDO0FBQzlDLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFHdkMsT0FBTyxFQUFDLFdBQVcs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QUFFLE9BQU8sQ0FBQyxVQUFVLEVBQUUsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7d0JBQ3ZOLFFBQVEsQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxhQUFhLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO3dCQUN4TSxRQUFRLENBQUMsU0FBUyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLE1BQU0sYUFBYSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLFVBQVUsRUFBRSxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQzt3QkFDOU0sUUFBUSxDQUFDLFlBQVksR0FBRyxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxNQUFNLGFBQWEsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRSxPQUFPLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxVQUFVLEVBQUUsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7d0JBQ3ZOLFFBQVEsQ0FBQyxLQUFLLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxhQUFhLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FB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SUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7U0FDOUQ7UUFFRCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDakYsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDakcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNqRSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksR0FBRyxVQUFVLENBQUM7UUFFaEMsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUMxRyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNwRyxJQUFJLENBQUMsVUFBVSxDQUFD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QUFRLEVBQUUsQ0FBQztZQUNyQyxJQUFJLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxFQUFFO2dCQUNmLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO2FBQ2pCO2lCQUFNLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLEVBQUU7Z0JBQ3RCLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO2FBQ2pCO1lBQ0QsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1NBQzdDO1FBRUQsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUM7UUFDaEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQztJQUNqRCxDQUFDO0lBRU8sUUFBUSxDQUFDLElBQWM7UUFDM0IsT0FBTyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQztJQUNwRSxDQUFDO0lBRU8sUUFBUTtRQUNaLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDO0lBQ3RELENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgICBCb3hHZW9tZXRyeSxcclxuICAgIEJ1ZmZlckF0dHJpYnV0ZSxcclxuICAgIEJ1ZmZlckdlb21ldHJ5LFxyXG4gICAgQ29sb3IsIERvdWJsZVNpZGUsIEV1bGVyLCBJbnRlcnNlY3Rpb24sIE1hdGVyaWFsLFxyXG4gICAgTWF0cml4NCxcclxuICAgIE1lc2gsXHJcbiAgICBNZXNoQmFzaWNNYXRlcmlhbCwgTWVzaFBob25nTWF0ZXJpYWwsXHJcbiAgICBNZXNoUGh5c2ljYWxNYXRlcmlhbCwgTWVzaFN0YW5kYXJkTWF0ZXJpYWwsIE9iamVjdDNELCBQYXRoLFxyXG4gICAgUXVhdGVybmlvbiwgU2hhcGUsIFNoYXBlR2VvbWV0cnksIFNSR0JDb2xvclNwYWNlLFxyXG4gICAgVmVjdG9yMixcclxuICAgIFZlY3RvcjNcclxufSBmcm9tICd0aHJlZSc7XHJcbmltcG9ydCAqIGFzIFRIUkVFIGZyb20gJ3RocmVlJztcclxuaW1wb3J0IHtzYW1lVGV4dHVyZXMsIFRleHR1cmV9IGZyb20gJy4uLy4uLy4uL2NvcmUvbW9kZWwvdGV4dHVyZSc7XHJcbmltcG9ydCB7SXRlbX0gZnJvbSAnLi9pdGVtJztcclxuaW1wb3J0IHtVdGlsc30gZnJvbSAnLi4vY29yZS91dGlscyc7XHJcbmltcG9ydCB7ZGVmYXVsdEVkZ2VDb2xvciwgZGVmYXVsdFdhbGxDb2xvcn0gZnJvbSAnLi4vLi4vcm9vbS1wbGFubmVyL2NvbXBvbmVudHMvZmxvb3JwbGFubmVyL2NvbnN0L2RlZmF1bHRzJztcclxuaW1wb3J0IHtUaHJlZU1lc2h9IGZyb20gJy4vdGhyZWUtbWVzaCc7XHJcbmltcG9ydCB7aXNOaWxsfSBmcm9tICcuLi8uLi8uLi9jb3JlL3V0aWxzL2Z1bmN0aW9uL2lzLW5pbGwuZnVuY3Rpb24nO1xyXG5pbXBvcnQge1RleHR1cmVUeXBlfSBmcm9tICcuLi8uLi8uLi9jb3JlL21vZGVsL3RleHR1cmUtdHlwZSc7XHJcbmltcG9ydCB7TWF0ZXJpYWxVdGlsc30gZnJvbSAnLi4vLi4vLi4vY29yZS91dGlscy9tYXRlcmlhbC51dGlscyc7XHJcbmltcG9ydCB7TWV0YWRhdGF9IGZyb20gJy4vbWV0YWRhdGEnO1xyXG5pbXBvcnQge0l0ZW1UeXBlfSBmcm9tICcuL2l0ZW0tdHlwZSc7XHJcbmltcG9ydCB7Q29sbGlzaW9uSW5mb30gZnJvbSAnLi4vbW9kZWwvY29sbGlzaW9uLWluZm8nO1xyXG5pbXBvcnQgKiBhcyBHZW9tZXRyeSBmcm9tICcuLi9tb2RlbC9nZW9tZXRyeSc7XHJcbmltcG9ydCB7SXRlbUdyb3VwfSBmcm9tICcuL2l0ZW0tZ3JvdXAnO1xyXG5pbXBvcnQge091dHB1dEVuY29kaW5nfSBmcm9tICcuLi8uLi8uLi9jb3JlL2VudW0vb3V0cHV0LWVuY29kaW5nLmVudW0nO1xyXG5pbXBvcnQge0Zsb29yUGxhbmVJdGVtfSBmcm9tICcuL2Zsb29yLXBsYW5lLWl0ZW0nO1xyXG5pbXBvcnQge09iamVjdFV0aWxzfSBmcm9tICcuLi8uLi8uLi9jb3JlL3V0aWxzL29iamVjdC51dGlscyc7XHJcblxyXG4vKipcclxuICogQSBXYWxsIGlzIHRoZSBiYXNpYyBlbGVtZW50IHRvIGNyZWF0ZSBSb29tcy5cclxuICpcclxuICogV2FsbHMgY29uc2lzdHMgb2YgdHdvIGhhbGYgZWRnZXMuXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgV2FsbCB7XHJcblxyXG4gICAgLyoqIFRoZSB1bmlxdWUgaWQgb2YgZWFjaCB3YWxsLiAqL1xyXG4gICAgcHJpdmF0ZSBpZDogc3RyaW5nO1xyXG5cclxuICAgIC8qKiBGcm9udCBpcyB0aGUgcGxhbmUgZnJvbSBzdGFydCB0byBlbmQuICovXHJcbiAgICBwdWJsaWMgZnJvbnRFZGdlOiBIYWxmRWRnZSA9IG51bGw7XHJcblxyXG4gICAgLyoqIEJhY2sgaXMgdGhlIHBsYW5lIGZyb20gZW5kIHRvIHN0YXJ0LiAqL1xyXG4gICAgcHVibGljIGJhY2tFZGdlOiBIYWxmRWRnZSA9IG51bGw7XHJcblxyXG4gICAgLyoqICovXHJcbiAgICBwdWJsaWMgb3JwaGFuID0gZmFsc2U7XHJcblxyXG4gICAgLyoqIEl0ZW1zIGF0dGFjaGVkIHRvIHRoaXMgd2FsbCAqL1xyXG4gICAgcHVibGljIGl0ZW1zOiBJdGVtW10gPSBbXTtcclxuICAgIHB1YmxpYyBpdGVtc0NoYW5nZWQgPSBmYWxzZTtcclxuXHJcbiAgICAvKiogKi9cclxuICAgIHB1YmxpYyBvbkl0ZW1zOiBJdGVtW10gPSBbXTtcclxuXHJcbiAgICAvKiogVGhlIGZyb250LXNpZGUgdGV4dHVyZS4gKi9cclxuICAgIHB1YmxpYyBmcm9udFRleHR1cmU6IFRleHR1cmU7XHJcblxyXG4gICAgLyoqIFRoZSBiYWNrLXNpZGUgdGV4dHVyZS4gKi9cclxuICAgIHB1YmxpYyBiYWNrVGV4dHVyZTogVGV4dHVyZTtcclxuXHJcbiAgICAvKiogVGhlIGZyb250LXNpZGUgY29sb3IuICovXHJcbiAgICBwdWJsaWMgZnJvbnRDb2xvciA9IGRlZmF1bHRXYWxsQ29sb3I7XHJcblxyXG4gICAgLyoqIFRoZSBiYWNrLXNpZGUgY29sb3IuICovXHJcbiAgICBwdWJsaWMgYmFja0NvbG9yID0gZGVmYXVsdFdhbGxDb2xvcjtcclxuXHJcbiAgICBwdWJsaWMgdGhpY2tuZXNzO1xyXG5cclxuICAgIHB1YmxpYyBzZXQgaGVpZ2h0KHZhbHVlOiBudW1iZXIpIHtcclxuICAgICAgICB0aGlzLl9oZWlnaHQgPSB2YWx1ZTtcclxuICAgICAgICBpZiAodGhpcy5mcm9udEVkZ2UpIHtcclxuICAgICAgICAgICAgdGhpcy5mcm9udEVkZ2UuaGVpZ2h0ID0gdGhpcy5faGVpZ2h0O1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5iYWNrRWRnZSkge1xyXG4gICAgICAgICAgICB0aGlzLmJhY2tFZGdlLmhlaWdodCA9IHRoaXMuX2hlaWdodDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5pdGVtcy5mb3JFYWNoKChpdGVtOiBXYWxsSXRlbSkgPT4gaXRlbS5yZXBvc2l0aW9uKCkpO1xyXG4gICAgICAgIHRoaXMub25JdGVtcy5mb3JFYWNoKChpdGVtOiBXYWxsSXRlbSkgPT4gaXRlbS5yZXBvc2l0aW9uKCkpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgaGVpZ2h0KCk6IG51bWJlciB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2hlaWdodDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYW1vdW50V2FsbE1vdmVkOiBWZWN0b3IyO1xyXG5cclxuICAgIHByaXZhdGUgX2hlaWdodDogbnVtYmVyO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ29uc3RydWN0cyBhIG5ldyB3YWxsLlxyXG4gICAgICogQHBhcmFtIHN0YXJ0IFN0YXJ0IGNvcm5lci5cclxuICAgICAqIEBwYXJhbSBlbmQgRW5kIGNvcm5lci5cclxuICAgICAqL1xyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBzdGFydDogQ29ybmVyLCBwcml2YXRlIGVuZDogQ29ybmVyKSB7XHJcbiAgICAgICAgdGhpcy5pZCA9IHRoaXMuZ2V0VXVpZCgpO1xyXG5cclxuICAgICAgICB0aGlzLnN0YXJ0LmF0dGFjaFN0YXJ0KHRoaXMpO1xyXG4gICAgICAgIHRoaXMuZW5kLmF0dGFjaEVuZCh0aGlzKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldFV1aWQoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gW3RoaXMuc3RhcnQuaWQsIHRoaXMuZW5kLmlkXS5qb2luKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNob3dIaWRlV2FsbChzaG93OiBib29sZWFuKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuZnJvbnRFZGdlKSB7IHRoaXMuZnJvbnRFZGdlLnNob3dIaWRlRWRnZShzaG93KTsgfVxyXG4gICAgICAgIGlmICh0aGlzLmJhY2tFZGdlKSB7IHRoaXMuYmFja0VkZ2Uuc2hvd0hpZGVFZGdlKHNob3cpOyB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJlc2V0RnJvbnRCYWNrKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmZyb250RWRnZSkgeyB0aGlzLmZyb250RWRnZS5kaXNwb3NlUGxhbmUoKTsgfVxyXG4gICAgICAgIGlmICh0aGlzLmJhY2tFZGdlKSB7IHRoaXMuYmFja0VkZ2UuZGlzcG9zZVBsYW5lKCk7IH1cclxuICAgICAgICB0aGlzLmZyb250RWRnZSA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5iYWNrRWRnZSA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5vcnBoYW4gPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIG1vdmUoeDogbnVtYmVyLCB5OiBudW1iZXIpIHtcclxuICAgICAgICBpZiAoIXRoaXMuYW1vdW50V2FsbE1vdmVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYW1vdW50V2FsbE1vdmVkID0gbmV3IFZlY3RvcjIoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgZGlmZlggPSB0aGlzLmVuZC54IC0gdGhpcy5zdGFydC54O1xyXG4gICAgICAgIGNvbnN0IGRpZmZZID0gdGhpcy5lbmQueSAtIHRoaXMuc3RhcnQueTtcclxuICAgICAgICBjb25zdCBwcmV2U3RhcnRYOiBudW1iZXIgPSB0aGlzLnN0YXJ0Lng7XHJcbiAgICAgICAgY29uc3QgcHJldlN0YXJ0WTogbnVtYmVyID0gdGhpcy5zdGFydC55O1xyXG4gICAgICAgIHRoaXMuc3RhcnQubW92ZSh4LCB5KTtcclxuICAgICAgICB0aGlzLmVuZC5tb3ZlKHggKyBkaWZmWCwgeSArIGRpZmZZKTtcclxuICAgICAgICB0aGlzLmFtb3VudFdhbGxNb3ZlZC5hZGQobmV3IFZlY3RvcjIodGhpcy5zdGFydC54IC0gcHJldlN0YXJ0WCwgdGhpcy5zdGFydC55IC0gcHJldlN0YXJ0WSkpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgcmVsYXRpdmVNb3ZlKGR4OiBudW1iZXIsIGR5OiBudW1iZXIpIHtcclxuICAgICAgICB0aGlzLnN0YXJ0LnJlbGF0aXZlTW92ZShkeCwgZHkpO1xyXG4gICAgICAgIHRoaXMuZW5kLnJlbGF0aXZlTW92ZShkeCwgZHkpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBmaXJlUmVkcmF3KCkge1xyXG4gICAgICAgIGlmICh0aGlzLmZyb250RWRnZSkge1xyXG4gICAgICAgICAgICB0aGlzLmZyb250RWRnZS5yZWRyYXcoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuYmFja0VkZ2UpIHtcclxuICAgICAgICAgICAgdGhpcy5iYWNrRWRnZS5yZWRyYXcoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldFN0YXJ0KCk6IENvcm5lciB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RhcnQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldEVuZCgpOiBDb3JuZXIge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmVuZDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0U3RhcnRYKCk6IG51bWJlciB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RhcnQuZ2V0WCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRFbmRYKCk6IG51bWJlciB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZW5kLmdldFgoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0U3RhcnRZKCk6IG51bWJlciB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RhcnQuZ2V0WSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRFbmRZKCk6IG51bWJlciB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZW5kLmdldFkoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcmVtb3ZlKCkge1xyXG4gICAgICAgIHRoaXMuc3RhcnQuZGV0YWNoV2FsbCh0aGlzKTtcclxuICAgICAgICB0aGlzLmVuZC5kZXRhY2hXYWxsKHRoaXMpO1xyXG4gICAgICAgIHRoaXMuZnJvbnRUZXh0dXJlID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIHRoaXMuYmFja1RleHR1cmUgPSB1bmRlZmluZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNldFN0YXJ0KGNvcm5lcjogQ29ybmVyKSB7XHJcbiAgICAgICAgdGhpcy5zdGFydC5kZXRhY2hXYWxsKHRoaXMpO1xyXG4gICAgICAgIGNvcm5lci5hdHRhY2hTdGFydCh0aGlzKTtcclxuICAgICAgICB0aGlzLnN0YXJ0ID0gY29ybmVyO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzZXRFbmQoY29ybmVyOiBDb3JuZXIpIHtcclxuICAgICAgICB0aGlzLmVuZC5kZXRhY2hXYWxsKHRoaXMpO1xyXG4gICAgICAgIGNvcm5lci5hdHRhY2hFbmQodGhpcyk7XHJcbiAgICAgICAgdGhpcy5lbmQgPSBjb3JuZXI7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGRpc3RhbmNlRnJvbSh4OiBudW1iZXIsIHk6IG51bWJlcik6IG51bWJlciB7XHJcbiAgICAgICAgcmV0dXJuIFV0aWxzLnBvaW50RGlzdGFuY2VGcm9tTGluZSh4LCB5LFxyXG4gICAgICAgICAgICB0aGlzLmdldFN0YXJ0WCgpLCB0aGlzLmdldFN0YXJ0WSgpLFxyXG4gICAgICAgICAgICB0aGlzLmdldEVuZFgoKSwgdGhpcy5nZXRFbmRZKCkpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjbG9zZXN0UG9pbnRUbyh4OiBudW1iZXIsIHk6IG51bWJlcik6IHsgeDogbnVtYmVyLCB5OiBudW1iZXIgfSB7XHJcbiAgICAgICAgcmV0dXJuIFV0aWxzLmNsb3Nlc3RQb2ludE9uTGluZSh4LCB5LFxyXG4gICAgICAgICAgICB0aGlzLmdldFN0YXJ0WCgpLCB0aGlzLmdldFN0YXJ0WSgpLFxyXG4gICAgICAgICAgICB0aGlzLmdldEVuZFgoKSwgdGhpcy5nZXRFbmRZKCkpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpc1RvT3JGcm9tKHg6IG51bWJlciwgeTogbnVtYmVyKSB7XHJcbiAgICAgICAgcmV0dXJuICh0aGlzLmdldFN0YXJ0WCgpID09PSB4ICYmIHRoaXMuZ2V0U3RhcnRZKCkgPT09IHkpIHx8XHJcbiAgICAgICAgICAgICggdGhpcy5nZXRFbmRYKCkgPT09IHggJiYgdGhpcy5nZXRFbmRZKCkgPT09IHkpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBSZXR1cm4gdGhlIGNvcm5lciBvcHBvc2l0ZSBvZiB0aGUgb25lIHByb3ZpZGVkLlxyXG4gICAgICogQHBhcmFtIGNvcm5lciBUaGUgZ2l2ZW4gY29ybmVyLlxyXG4gICAgICogQHJldHVybnMgVGhlIG9wcG9zaXRlIGNvcm5lci5cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBfb3Bwb3NpdGVDb3JuZXIoY29ybmVyOiBDb3JuZXIpOiBDb3JuZXIge1xyXG4gICAgICAgIGlmICh0aGlzLnN0YXJ0ID09PSBjb3JuZXIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZW5kO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5lbmQgPT09IGNvcm5lcikge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zdGFydDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygnV2FsbCBkb2VzIG5vdCBjb25uZWN0IHRvIGNvcm5lcicpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0IGxlbmd0aCgpOiBudW1iZXIge1xyXG4gICAgICAgIHJldHVybiBVdGlscy5kaXN0YW5jZSh0aGlzLmdldFN0YXJ0WCgpLCB0aGlzLmdldFN0YXJ0WSgpLCB0aGlzLmdldEVuZFgoKSwgdGhpcy5nZXRFbmRZKCkpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgZWRnZXNMZW5ndGhzKCk6IG51bWJlcltdIHtcclxuICAgICAgICBjb25zdCBsZW5ndGhzOiBudW1iZXJbXSA9IFtdO1xyXG4gICAgICAgIGlmICh0aGlzLmZyb250RWRnZSkge1xyXG4gICAgICAgICAgICBsZW5ndGhzLnB1c2godGhpcy5mcm9udEVkZ2UuaW50ZXJpb3JEaXN0YW5jZSgpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuYmFja0VkZ2UpIHtcclxuICAgICAgICAgICAgbGVuZ3Rocy5wdXNoKHRoaXMuYmFja0VkZ2UuaW50ZXJpb3JEaXN0YW5jZSgpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGxlbmd0aHM7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHVwZGF0ZUluV2FsbEl0ZW1zKCkge1xyXG4gICAgICAgIHRoaXMuaXRlbXMuZmlsdGVyKGl0ZW0gPT4gaXRlbSBpbnN0YW5jZW9mIEluV2FsbEl0ZW0pLmZvckVhY2goKGl0ZW06IEluV2FsbEl0ZW0pID0+IGl0ZW0ub25XYWxsVXBkYXRlZCh0aGlzKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHVwZGF0ZVdhbGxJdGVtcygpIHtcclxuICAgICAgICB0aGlzLml0ZW1zLmZpbHRlcihpdGVtID0+IGl0ZW0gaW5zdGFuY2VvZiBXYWxsSXRlbSkuZm9yRWFjaCgoaXRlbTogV2FsbEl0ZW0pID0+IGl0ZW0ub25XYWxsTW92ZWQodGhpcykpO1xyXG4gICAgICAgIHRoaXMub25JdGVtcy5maWx0ZXIoaXRlbSA9PiBpdGVtIGluc3RhbmNlb2YgV2FsbEl0ZW0gfHwgaXRlbSBpbnN0YW5jZW9mIFdhbGxJdGVtR3JvdXApLmZvckVhY2goKGl0ZW06IFdhbGxJdGVtKSA9PiBpdGVtLm9uV2FsbE1vdmVkKHRoaXMpKTtcclxuICAgICAgICB0aGlzLmFtb3VudFdhbGxNb3ZlZCA9IHVuZGVmaW5lZDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0SXRlbXMoKTogSXRlbVtdIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5pdGVtcztcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0V2FsbEl0ZW1zKCk6IFdhbGxJdGVtW10ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLml0ZW1zLmZpbHRlcihpdGVtID0+IGl0ZW0gaW5zdGFuY2VvZiBXYWxsSXRlbSkgYXMgV2FsbEl0ZW1bXTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0IHNpZGUoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZnJvbnRFZGdlICYmIHRoaXMuYmFja0VkZ2UpIHtcclxuICAgICAgICAgICAgcmV0dXJuIFRIUkVFLkRvdWJsZVNpZGU7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmZyb250RWRnZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gVEhSRUUuRnJvbnRTaWRlO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5iYWNrRWRnZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gVEhSRUUuQmFja1NpZGU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhZGRJdGVtKGl0ZW06IEl0ZW0pIHtcclxuICAgICAgICB0aGlzLml0ZW1zLnB1c2goaXRlbSk7XHJcbiAgICAgICAgdGhpcy5pdGVtc0NoYW5nZWQgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyByZW1vdmVJdGVtKGl0ZW06IEl0ZW0pIHtcclxuICAgICAgICB0aGlzLml0ZW1zID0gdGhpcy5pdGVtcy5maWx0ZXIoaSA9PiBpICE9PSBpdGVtKTtcclxuICAgICAgICB0aGlzLml0ZW1zQ2hhbmdlZCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFkZE9uSXRlbShpdGVtOiBJdGVtKSB7XHJcbiAgICAgICAgdGhpcy5vbkl0ZW1zLnB1c2goaXRlbSk7XHJcbiAgICAgICAgdGhpcy5pdGVtc0NoYW5nZWQgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyByZW1vdmVPbkl0ZW0oaXRlbTogSXRlbSkge1xyXG4gICAgICAgIHRoaXMub25JdGVtcyA9IHRoaXMub25JdGVtcy5maWx0ZXIoaSA9PiBpICE9PSBpdGVtKTtcclxuICAgICAgICB0aGlzLml0ZW1zQ2hhbmdlZCA9IHRydWU7XHJcbiAgICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBDb3JuZXJzIGFyZSB1c2VkIHRvIGRlZmluZSBXYWxscy5cclxuICovXHJcbmV4cG9ydCBjbGFzcyBDb3JuZXIge1xyXG5cclxuICAgIC8qKiBBcnJheSBvZiBzdGFydCB3YWxscy4gKi9cclxuICAgIHB1YmxpYyB3YWxsU3RhcnRzOiBXYWxsW10gPSBbXTtcclxuXHJcbiAgICAvKiogQXJyYXkgb2YgZW5kIHdhbGxzLiAqL1xyXG4gICAgcHVibGljIHdhbGxFbmRzOiBXYWxsW10gPSBbXTtcclxuXHJcbiAgICAvKiogQ29uc3RydWN0cyBhIGNvcm5lci5cclxuICAgICAqIEBwYXJhbSB4IFggY29vcmRpbmF0ZS5cclxuICAgICAqIEBwYXJhbSB5IFkgY29vcmRpbmF0ZS5cclxuICAgICAqIEBwYXJhbSBpZCBBbiBvcHRpb25hbCB1bmlxdWUgaWQuIElmIG5vdCBzZXQsIGNyZWF0ZWQgaW50ZXJuYWxseS5cclxuICAgICAqL1xyXG4gICAgY29uc3RydWN0b3IocHVibGljIHg6IG51bWJlciwgcHVibGljIHk6IG51bWJlciwgcHVibGljIGlkPzogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5pZCA9IGlkIHx8IFV0aWxzLmd1aWQoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYWJzb3JiV2FsbHNGcm9tKGNvcm5lcjogQ29ybmVyKSB7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IGNvcm5lci53YWxsU3RhcnRzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XHJcbiAgICAgICAgICAgIGNvcm5lci53YWxsU3RhcnRzW2ldLnNldFN0YXJ0KHRoaXMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmb3IgKGxldCBpID0gY29ybmVyLndhbGxFbmRzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XHJcbiAgICAgICAgICAgIGNvcm5lci53YWxsRW5kc1tpXS5zZXRFbmQodGhpcyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHJldHVybnNcclxuICAgICAqIEBkZXByZWNhdGVkXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRYKCk6IG51bWJlciB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMueDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEByZXR1cm5zXHJcbiAgICAgKiBAZGVwcmVjYXRlZFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0WSgpOiBudW1iZXIge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIE1vdmVzIGNvcm5lciByZWxhdGl2ZWx5IHRvIG5ldyBwb3NpdGlvbi5cclxuICAgICAqIEBwYXJhbSBkeCBUaGUgZGVsdGEgeC5cclxuICAgICAqIEBwYXJhbSBkeSBUaGUgZGVsdGEgeS5cclxuICAgICAqL1xyXG4gICAgcHVibGljIHJlbGF0aXZlTW92ZShkeDogbnVtYmVyLCBkeTogbnVtYmVyKSB7XHJcbiAgICAgICAgdGhpcy5tb3ZlKHRoaXMueCArIGR4LCB0aGlzLnkgKyBkeSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIFJlbW92ZXMgYWxsIHdhbGxzLiAqL1xyXG4gICAgcHVibGljIHJlbW92ZUFsbCgpIHtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMud2FsbFN0YXJ0cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB0aGlzLndhbGxTdGFydHNbaV0ucmVtb3ZlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy53YWxsRW5kcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB0aGlzLndhbGxFbmRzW2ldLnJlbW92ZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKiogTW92ZXMgY29ybmVyIHRvIG5ldyBwb3NpdGlvbi5cclxuICAgICAqIEBwYXJhbSBuZXdYIFRoZSBuZXcgeCBwb3NpdGlvbi5cclxuICAgICAqIEBwYXJhbSBuZXdZIFRoZSBuZXcgeSBwb3NpdGlvbi5cclxuICAgICAqL1xyXG4gICAgcHVibGljIG1vdmUobmV3WDogbnVtYmVyLCBuZXdZOiBudW1iZXIpIHtcclxuICAgICAgICB0aGlzLnggPSBuZXdYO1xyXG4gICAgICAgIHRoaXMueSA9IG5ld1k7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIEdldHMgdGhlIGFkamFjZW50IGNvcm5lcnMuXHJcbiAgICAgKiBAcmV0dXJucyBBcnJheSBvZiBjb3JuZXJzLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgYWRqYWNlbnRDb3JuZXJzKCk6IENvcm5lcltdIHtcclxuICAgICAgICBjb25zdCByZXRBcnJheSA9IFtdO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy53YWxsU3RhcnRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHJldEFycmF5LnB1c2godGhpcy53YWxsU3RhcnRzW2ldLmdldEVuZCgpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLndhbGxFbmRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHJldEFycmF5LnB1c2godGhpcy53YWxsRW5kc1tpXS5nZXRTdGFydCgpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJldEFycmF5O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBDaGVja3MgaWYgYSB3YWxsIGlzIGNvbm5lY3RlZC5cclxuICAgICAqIEBwYXJhbSB3YWxsIEEgd2FsbC5cclxuICAgICAqIEByZXR1cm5zIFRydWUgaW4gY2FzZSBvZiBjb25uZWN0aW9uLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgaXNXYWxsQ29ubmVjdGVkKHdhbGw6IFdhbGwpOiBib29sZWFuIHtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMud2FsbFN0YXJ0cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAodGhpcy53YWxsU3RhcnRzW2ldID09PSB3YWxsKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMud2FsbEVuZHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMud2FsbEVuZHNbaV0gPT09IHdhbGwpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBkaXN0YW5jZUZyb20oeDogbnVtYmVyLCB5OiBudW1iZXIpOiBudW1iZXIge1xyXG4gICAgICAgIGNvbnN0IGRpc3RhbmNlID0gVXRpbHMuZGlzdGFuY2UoeCwgeSwgdGhpcy54LCB0aGlzLnkpO1xyXG4gICAgICAgIHJldHVybiBkaXN0YW5jZTtcclxuICAgIH1cclxuXHJcbiAgICAvKiogR2V0cyB0aGUgZGlzdGFuY2UgZnJvbSBhIHdhbGwuXHJcbiAgICAgKiBAcGFyYW0gd2FsbCBBIHdhbGwuXHJcbiAgICAgKiBAcmV0dXJucyBUaGUgZGlzdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBkaXN0YW5jZUZyb21XYWxsKHdhbGw6IFdhbGwpOiBudW1iZXIge1xyXG4gICAgICAgIHJldHVybiB3YWxsLmRpc3RhbmNlRnJvbSh0aGlzLngsIHRoaXMueSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIEdldHMgdGhlIGRpc3RhbmNlIGZyb20gYSBjb3JuZXIuXHJcbiAgICAgKiBAcGFyYW0gY29ybmVyIEEgY29ybmVyLlxyXG4gICAgICogQHJldHVybnMgVGhlIGRpc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZGlzdGFuY2VGcm9tQ29ybmVyKGNvcm5lcjogQ29ybmVyKTogbnVtYmVyIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5kaXN0YW5jZUZyb20oY29ybmVyLngsIGNvcm5lci55KTtcclxuICAgIH1cclxuXHJcbiAgICAvKiogRGV0YWNoZXMgYSB3YWxsLlxyXG4gICAgICogQHBhcmFtIHdhbGwgQSB3YWxsLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZGV0YWNoV2FsbCh3YWxsOiBXYWxsKSB7XHJcbiAgICAgICAgVXRpbHMucmVtb3ZlVmFsdWUodGhpcy53YWxsU3RhcnRzLCB3YWxsKTtcclxuICAgICAgICBVdGlscy5yZW1vdmVWYWx1ZSh0aGlzLndhbGxFbmRzLCB3YWxsKTtcclxuICAgIH1cclxuXHJcbiAgICAvKiogQXR0YWNoZXMgYSBzdGFydCB3YWxsLlxyXG4gICAgICogQHBhcmFtIHdhbGwgQSB3YWxsLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgYXR0YWNoU3RhcnQod2FsbDogV2FsbCkge1xyXG4gICAgICAgIHRoaXMud2FsbFN0YXJ0cy5wdXNoKHdhbGwpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBBdHRhY2hlcyBhbiBlbmQgd2FsbC5cclxuICAgICAqIEBwYXJhbSB3YWxsIEEgd2FsbC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGF0dGFjaEVuZCh3YWxsOiBXYWxsKSB7XHJcbiAgICAgICAgdGhpcy53YWxsRW5kcy5wdXNoKHdhbGwpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBHZXQgd2FsbCB0byBjb3JuZXIuXHJcbiAgICAgKiBAcGFyYW0gY29ybmVyIEEgY29ybmVyLlxyXG4gICAgICogQHJldHVybiBUaGUgYXNzb2NpYXRlZCB3YWxsIG9yIG51bGwuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyB3YWxsVG8oY29ybmVyOiBDb3JuZXIpOiBXYWxsIHtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMud2FsbFN0YXJ0cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAodGhpcy53YWxsU3RhcnRzW2ldLmdldEVuZCgpID09PSBjb3JuZXIpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLndhbGxTdGFydHNbaV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIEdldCB3YWxsIGZyb20gY29ybmVyLlxyXG4gICAgICogQHBhcmFtIGNvcm5lciBBIGNvcm5lci5cclxuICAgICAqIEByZXR1cm4gVGhlIGFzc29jaWF0ZWQgd2FsbCBvciBudWxsLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgd2FsbEZyb20oY29ybmVyOiBDb3JuZXIpOiBXYWxsIHtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMud2FsbEVuZHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMud2FsbEVuZHNbaV0uZ2V0U3RhcnQoKSA9PT0gY29ybmVyKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy53YWxsRW5kc1tpXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICAvKiogR2V0IHdhbGwgdG8gb3IgZnJvbSBjb3JuZXIuXHJcbiAgICAgKiBAcGFyYW0gY29ybmVyIEEgY29ybmVyLlxyXG4gICAgICogQHJldHVybiBUaGUgYXNzb2NpYXRlZCB3YWxsIG9yIG51bGwuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyB3YWxsVG9PckZyb20oY29ybmVyOiBDb3JuZXIpOiBXYWxsIHtcclxuICAgICAgICByZXR1cm4gdGhpcy53YWxsVG8oY29ybmVyKSB8fCB0aGlzLndhbGxGcm9tKGNvcm5lcik7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCBzdGFydFdhbGxzKCk6IFdhbGxbXSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMud2FsbFN0YXJ0cztcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0IGVuZFdhbGxzKCk6IFdhbGxbXSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMud2FsbEVuZHM7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIEVuc3VyZSB3ZSBkbyBub3QgaGF2ZSBkdXBsaWNhdGUgd2FsbHMgKGkuZS4gc2FtZSBzdGFydCBhbmQgZW5kIHBvaW50cykgKi9cclxuICAgIHB1YmxpYyByZW1vdmVEdXBsaWNhdGVXYWxscygpIHtcclxuICAgICAgICAvLyBkZWxldGUgdGhlIHdhbGwgYmV0d2VlbiB0aGVzZSBjb3JuZXJzLCBpZiBpdCBleGlzdHNcclxuICAgICAgICBjb25zdCB3YWxsRW5kcG9pbnRzID0ge307XHJcbiAgICAgICAgY29uc3Qgd2FsbFN0YXJ0cG9pbnRzID0ge307XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IHRoaXMud2FsbFN0YXJ0cy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy53YWxsU3RhcnRzW2ldLmdldEVuZCgpID09PSB0aGlzKSB7XHJcbiAgICAgICAgICAgICAgICAvLyByZW1vdmUgemVybyBsZW5ndGggd2FsbFxyXG4gICAgICAgICAgICAgICAgdGhpcy53YWxsU3RhcnRzW2ldLnJlbW92ZSgpO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMud2FsbFN0YXJ0c1tpXS5nZXRFbmQoKS5pZCBpbiB3YWxsRW5kcG9pbnRzKSB7XHJcbiAgICAgICAgICAgICAgICAvLyByZW1vdmUgZHVwbGljYXRlZCB3YWxsXHJcbiAgICAgICAgICAgICAgICB0aGlzLndhbGxTdGFydHNbaV0ucmVtb3ZlKCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB3YWxsRW5kcG9pbnRzW3RoaXMud2FsbFN0YXJ0c1tpXS5nZXRFbmQoKS5pZF0gPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvciAobGV0IGkgPSB0aGlzLndhbGxFbmRzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLndhbGxFbmRzW2ldLmdldFN0YXJ0KCkgPT09IHRoaXMpIHtcclxuICAgICAgICAgICAgICAgIC8vIHJlbW92ZWQgemVybyBsZW5ndGggd2FsbFxyXG4gICAgICAgICAgICAgICAgdGhpcy53YWxsRW5kc1tpXS5yZW1vdmUoKTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLndhbGxFbmRzW2ldLmdldFN0YXJ0KCkuaWQgaW4gd2FsbFN0YXJ0cG9pbnRzKSB7XHJcbiAgICAgICAgICAgICAgICAvLyByZW1vdmVkIGR1cGxpY2F0ZWQgd2FsbFxyXG4gICAgICAgICAgICAgICAgdGhpcy53YWxsRW5kc1tpXS5yZW1vdmUoKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHdhbGxTdGFydHBvaW50c1t0aGlzLndhbGxFbmRzW2ldLmdldFN0YXJ0KCkuaWRdID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gZmluZCBhbmQgcmVtb3ZlIGN5Y2xlIH4gbW9yZSB0aGFuIGEgc2luZ2xlIHdhbGwgYmV0d2VlbiAyIGNvcm5lcnNcclxuICAgICAgICBmb3IgKGNvbnN0IG91dFdhbGwgb2YgdGhpcy53YWxsU3RhcnRzKSB7XHJcbiAgICAgICAgICAgIGZvciAoY29uc3QgaW5XYWxsIG9mIHRoaXMud2FsbEVuZHMpIHtcclxuICAgICAgICAgICAgICAgIGlmIChvdXRXYWxsLmdldEVuZCgpID09PSBpbldhbGwuZ2V0U3RhcnQoKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIG91dFdhbGwucmVtb3ZlKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBIYWxmIEVkZ2VzIGFyZSBjcmVhdGVkIGJ5IFJvb20uXHJcbiAqXHJcbiAqIE9uY2Ugcm9vbXMgaGF2ZSBiZWVuIGlkZW50aWZpZWQsIEhhbGYgRWRnZXMgYXJlIGNyZWF0ZWQgZm9yIGVhY2ggaW50ZXJpb3Igd2FsbC5cclxuICpcclxuICogQSB3YWxsIGNhbiBoYXZlIHR3byBoYWxmIGVkZ2VzIGlmIGl0IGlzIHZpc2libGUgZnJvbSBib3RoIHNpZGVzLlxyXG4gKi9cclxuZXhwb3J0IGNsYXNzIEhhbGZFZGdlIHtcclxuXHJcbiAgICAvKiogVGhlIHN1Y2Nlc3NvciBlZGdlIGluIENDVyA/Pz8gZGlyZWN0aW9uLiAqL1xyXG4gICAgcHVibGljIG5leHQ6IEhhbGZFZGdlO1xyXG5cclxuICAgIC8qKiBUaGUgcHJlZGVjZXNzb3IgZWRnZSBpbiBDQ1cgPz8/IGRpcmVjdGlvbi4gKi9cclxuICAgIHB1YmxpYyBwcmV2OiBIYWxmRWRnZTtcclxuXHJcbiAgICAvKiogKi9cclxuICAgIHB1YmxpYyBvZmZzZXQ6IG51bWJlcjtcclxuXHJcbiAgICAvKiogV2hlbiBoZWlnaHQgb2Ygd2FsbHMgYXJlIG1vZGlmaWVkLCBwbGFuZSBzaG91bGQgYmUgcmVjcmVhdGVkICovXHJcbiAgICBwdWJsaWMgc2V0IGhlaWdodCh2YWx1ZTogbnVtYmVyKSB7XHJcbiAgICAgICAgdGhpcy5faGVpZ2h0ID0gdmFsdWU7XHJcbiAgICAgICAgdGhpcy5kaXNwb3NlUGxhbmUoKTtcclxuICAgICAgICB0aGlzLmdlbmVyYXRlUGxhbmUoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0IGhlaWdodCgpOiBudW1iZXIge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9oZWlnaHQ7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIHVzZWQgZm9yIGludGVyc2VjdGlvbiB0ZXN0aW5nLi4uIG5vdCBjb252aW5jZWQgdGhpcyBiZWxvbmdzIGhlcmUgKi9cclxuICAgIHB1YmxpYyBwbGFuZTogVGhyZWVNZXNoID0gbnVsbDtcclxuXHJcbiAgICAvKiogdHJhbnNmb3JtIGZyb20gd29ybGQgY29vcmRzIHRvIHdhbGwgcGxhbmVzICh6PTApICovXHJcbiAgICBwdWJsaWMgaW50ZXJpb3JUcmFuc2Zvcm0gPSBuZXcgTWF0cml4NCgpO1xyXG5cclxuICAgIC8qKiB0cmFuc2Zvcm0gZnJvbSB3b3JsZCBjb29yZHMgdG8gd2FsbCBwbGFuZXMgKHo9MCkgKi9cclxuICAgIHB1YmxpYyBpbnZJbnRlcmlvclRyYW5zZm9ybSA9IG5ldyBNYXRyaXg0KCk7XHJcblxyXG4gICAgLyoqIHRyYW5zZm9ybSBmcm9tIHdvcmxkIGNvb3JkcyB0byB3YWxsIHBsYW5lcyAoej0wKSAqL1xyXG4gICAgcHJpdmF0ZSBleHRlcmlvclRyYW5zZm9ybSA9IG5ldyBNYXRyaXg0KCk7XHJcblxyXG4gICAgLyoqIHRyYW5zZm9ybSBmcm9tIHdvcmxkIGNvb3JkcyB0byB3YWxsIHBsYW5lcyAoej0wKSAqL1xyXG4gICAgcHJpdmF0ZSBpbnZFeHRlcmlvclRyYW5zZm9ybSA9IG5ldyBNYXRyaXg0KCk7XHJcblxyXG4gICAgcHJpdmF0ZSBfaGVpZ2h0OiBudW1iZXI7XHJcblxyXG4gICAgLyoqICovXHJcblxyXG4gICAgcHVibGljIGVkZ2VzOiBFZGdlW10gPSBbXTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIENvbnN0cnVjdHMgYSBoYWxmIGVkZ2UuXHJcbiAgICAgKiBAcGFyYW0gcm9vbSBUaGUgYXNzb2NpYXRlZCByb29tLlxyXG4gICAgICogQHBhcmFtIHdhbGwgVGhlIGNvcnJlc3BvbmRpbmcgd2FsbC5cclxuICAgICAqIEBwYXJhbSBmcm9udCBUcnVlIGlmIGZyb250IHNpZGUuXHJcbiAgICAgKi9cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgcm9vbTogUm9vbSwgcHVibGljIHdhbGw6IFdhbGwsIHB1YmxpYyBmcm9udDogYm9vbGVhbikge1xyXG4gICAgICAgIHRoaXMuZnJvbnQgPSBmcm9udCB8fCBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5vZmZzZXQgPSB3YWxsLnRoaWNrbmVzcyAvIDIuMDtcclxuICAgICAgICB0aGlzLmhlaWdodCA9IHdhbGwuaGVpZ2h0O1xyXG4gICAgICAgIGlmICh0aGlzLmZyb250KSB7XHJcbiAgICAgICAgICAgIHRoaXMud2FsbC5mcm9udEVkZ2UgPSB0aGlzO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMud2FsbC5iYWNrRWRnZSA9IHRoaXM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMud2FsbC51cGRhdGVJbldhbGxJdGVtcygpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzaG93SGlkZUVkZ2Uoc2hvdzogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuZWRnZXMuZm9yRWFjaChlID0+IGUuc2hvd0hpZGVFZGdlKHNob3cpKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgdXBkYXRlVmlzaWJpbGl0eShjYW1lcmFQb3NpdGlvbjogVmVjdG9yMyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGxldCB2aXNpYmlsaXR5Q2hhbmdlZDogYm9vbGVhbiA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5lZGdlcy5mb3JFYWNoKGUgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBlZGdlVmlzaWJpbGl0eUNoYW5nZWQgPSBlLnVwZGF0ZVZpc2liaWxpdHkoY2FtZXJhUG9zaXRpb24pO1xyXG4gICAgICAgICAgICBpZiAoZWRnZVZpc2liaWxpdHlDaGFuZ2VkICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICB2aXNpYmlsaXR5Q2hhbmdlZCA9IGVkZ2VWaXNpYmlsaXR5Q2hhbmdlZDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiB2aXNpYmlsaXR5Q2hhbmdlZDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgdXBkYXRlVmlzaWJsaXR5KHZpc2liaWxpdHk6IGJvb2xlYW4pIHtcclxuICAgICAgICB0aGlzLmVkZ2VzLmZvckVhY2goZSA9PiB7XHJcbiAgICAgICAgICAgIGUudmlzaWJsZSA9IHZpc2liaWxpdHk7XHJcbiAgICAgICAgICAgIGUudXBkYXRlT2JqZWN0VmlzaWJpbGl0eSgpO1xyXG4gICAgICAgICAgICBlLnNldEFsbFBsYW5lc1Zpc2libGUoKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYXN5bmMgcmVkcmF3KCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgICAgIC8vIHRoaXMuZWRnZXMuZm9yRWFjaChlID0+IGUucmVkcmF3KCkpO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5lZGdlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLmVkZ2VzW2ldLnJlZHJhdygpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRUZXh0dXJlKCk6IFRleHR1cmUge1xyXG4gICAgICAgIGlmICh0aGlzLmZyb250KSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLndhbGwuZnJvbnRUZXh0dXJlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLndhbGwuYmFja1RleHR1cmU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRDb2xvcigpOiBudW1iZXIge1xyXG4gICAgICAgIGlmICh0aGlzLmZyb250KSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLndhbGwuZnJvbnRDb2xvcjtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy53YWxsLmJhY2tDb2xvcjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgYXN5bmMgc2V0VGV4dHVyZSh0ZXh0dXJlOiBUZXh0dXJlKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICAgICAgaWYgKHRleHR1cmUpIHtcclxuICAgICAgICAgICAgdGV4dHVyZS5yb3VnaG5lc3MgPSAhaXNOaWxsKHRleHR1cmUucm91Z2huZXNzKSA/IHRleHR1cmUucm91Z2huZXNzIDogMC44O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuZnJvbnQpIHtcclxuICAgICAgICAgICAgdGhpcy53YWxsLmZyb250VGV4dHVyZSA9IHRleHR1cmU7XHJcbiAgICAgICAgICAgIHRoaXMud2FsbC5mcm9udENvbG9yID0gZGVmYXVsdFdhbGxDb2xvcjtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLndhbGwuYmFja1RleHR1cmUgPSB0ZXh0dXJlO1xyXG4gICAgICAgICAgICB0aGlzLndhbGwuYmFja0NvbG9yID0gZGVmYXVsdFdhbGxDb2xvcjtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gdGhpcy5yZWRyYXdDYWxsYmFja3MuZmlyZSgpO1xyXG4gICAgICAgIGF3YWl0IHRoaXMucmVkcmF3KCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNldENvbG9yKHZhbHVlOiBudW1iZXIpIHtcclxuICAgICAgICBpZiAodGhpcy5mcm9udCkge1xyXG4gICAgICAgICAgICB0aGlzLndhbGwuZnJvbnRUZXh0dXJlID0gbnVsbDtcclxuICAgICAgICAgICAgdGhpcy53YWxsLmZyb250Q29sb3IgPSB2YWx1ZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLndhbGwuYmFja1RleHR1cmUgPSBudWxsO1xyXG4gICAgICAgICAgICB0aGlzLndhbGwuYmFja0NvbG9yID0gdmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIHRoaXMucmVkcmF3Q2FsbGJhY2tzLmZpcmUoKTtcclxuICAgICAgICB0aGlzLnJlZHJhdygpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogdGhpcyBmZWVscyBoYWNreSwgYnV0IG5lZWQgd2FsbCBpdGVtc1xyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2VuZXJhdGVQbGFuZSgpIHtcclxuICAgICAgICBmdW5jdGlvbiB0cmFuc2Zvcm1Db3JuZXIoY29ybmVyKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgVmVjdG9yMyhjb3JuZXIueCwgMCwgY29ybmVyLnkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5vZmZzZXQgPSB0aGlzLndhbGwudGhpY2tuZXNzIC8gMi4wO1xyXG4gICAgICAgIHRoaXMuX2hlaWdodCA9IHRoaXMud2FsbC5oZWlnaHQ7XHJcblxyXG4gICAgICAgIGNvbnN0IHYxID0gdHJhbnNmb3JtQ29ybmVyKHRoaXMuaW50ZXJpb3JTdGFydCgpKTtcclxuICAgICAgICBjb25zdCB2MiA9IHRyYW5zZm9ybUNvcm5lcih0aGlzLmludGVyaW9yRW5kKCkpO1xyXG4gICAgICAgIGNvbnN0IHYzID0gdjIuY2xvbmUoKTtcclxuICAgICAgICB2My55ID0gdGhpcy53YWxsLmhlaWdodDtcclxuICAgICAgICBjb25zdCB2NCA9IHYxLmNsb25lKCk7XHJcbiAgICAgICAgdjQueSA9IHRoaXMud2FsbC5oZWlnaHQ7XHJcblxyXG4gICAgICAgIGNvbnN0IGdlb21ldHJ5ID0gbmV3IEJ1ZmZlckdlb21ldHJ5KCkuc2V0RnJvbVBvaW50cyhbdjEsIHYyLCB2MywgdjRdKTtcclxuICAgICAgICBjb25zdCBmYWNlVmVydGV4SW5kZXhBcnJheTogVWludDE2QXJyYXkgPSBuZXcgVWludDE2QXJyYXkoWzAsIDEsIDIsIDAsIDIsIDNdKTtcclxuICAgICAgICBjb25zdCBmYWNlQnVmZmVyQXR0cmlidXRlOiBCdWZmZXJBdHRyaWJ1dGUgPSBuZXcgQnVmZmVyQXR0cmlidXRlKGZhY2VWZXJ0ZXhJbmRleEFycmF5LCAxKTtcclxuICAgICAgICBnZW9tZXRyeS5zZXRJbmRleChmYWNlQnVmZmVyQXR0cmlidXRlKTtcclxuICAgICAgICBnZW9tZXRyeS5jb21wdXRlVmVydGV4Tm9ybWFscygpO1xyXG4gICAgICAgIGdlb21ldHJ5LmNvbXB1dGVCb3VuZGluZ0JveCgpO1xyXG5cclxuICAgICAgICB0aGlzLnBsYW5lID0gbmV3IFRocmVlTWVzaChnZW9tZXRyeSwgbmV3IE1lc2hQaHlzaWNhbE1hdGVyaWFsKG51bGwpKTtcclxuICAgICAgICB0aGlzLnBsYW5lLm5hbWUgPSBgaGFsZi1lZGdlLXBsYW5lLSR7dGhpcy5mcm9udCA/ICdmcm9udCcgOiAnYmFjayd9YDtcclxuICAgICAgICB0aGlzLnBsYW5lLmNhc3RTaGFkb3cgPSB0cnVlO1xyXG4gICAgICAgIFV0aWxzLnNldFBsYW5lVmlzaWJpbGl0eSh0aGlzLnBsYW5lLCB0cnVlKTtcclxuICAgICAgICB0aGlzLnBsYW5lLnVzZXJEYXRhLmVkZ2UgPSB0aGlzO1xyXG5cclxuICAgICAgICB0aGlzLmNvbXB1dGVUcmFuc2Zvcm1zKFxyXG4gICAgICAgICAgICB0aGlzLmludGVyaW9yVHJhbnNmb3JtLCB0aGlzLmludkludGVyaW9yVHJhbnNmb3JtLFxyXG4gICAgICAgICAgICB0aGlzLmludGVyaW9yU3RhcnQoKSwgdGhpcy5pbnRlcmlvckVuZCgpKTtcclxuICAgICAgICB0aGlzLmNvbXB1dGVUcmFuc2Zvcm1zKFxyXG4gICAgICAgICAgICB0aGlzLmV4dGVyaW9yVHJhbnNmb3JtLCB0aGlzLmludkV4dGVyaW9yVHJhbnNmb3JtLFxyXG4gICAgICAgICAgICB0aGlzLmV4dGVyaW9yU3RhcnQoKSwgdGhpcy5leHRlcmlvckVuZCgpKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZGlzcG9zZVBsYW5lKCkge1xyXG4gICAgICAgIGlmICh0aGlzLnBsYW5lKSB7XHJcbiAgICAgICAgICAgIE9iamVjdFV0aWxzLkRpc3Bvc2VPYmplY3QodGhpcy5wbGFuZSk7XHJcbiAgICAgICAgICAgIHRoaXMucGxhbmUgPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaW50ZXJpb3JEaXN0YW5jZSgpOiBudW1iZXIge1xyXG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gdGhpcy5pbnRlcmlvclN0YXJ0KCk7XHJcbiAgICAgICAgY29uc3QgZW5kID0gdGhpcy5pbnRlcmlvckVuZCgpO1xyXG4gICAgICAgIHJldHVybiBVdGlscy5kaXN0YW5jZShzdGFydC54LCBzdGFydC55LCBlbmQueCwgZW5kLnkpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgY29tcHV0ZVRyYW5zZm9ybXModHJhbnNmb3JtLCBpbnZUcmFuc2Zvcm0sIHN0YXJ0LCBlbmQpIHtcclxuXHJcbiAgICAgICAgY29uc3QgdjEgPSBzdGFydDtcclxuICAgICAgICBjb25zdCB2MiA9IGVuZDtcclxuXHJcbiAgICAgICAgY29uc3QgYW5nbGUgPSBVdGlscy5hbmdsZSgxLCAwLCB2Mi54IC0gdjEueCwgdjIueSAtIHYxLnkpO1xyXG5cclxuICAgICAgICBjb25zdCB0dCA9IG5ldyBNYXRyaXg0KCk7XHJcbiAgICAgICAgdHQubWFrZVRyYW5zbGF0aW9uKC12MS54LCAwLCAtdjEueSk7XHJcbiAgICAgICAgY29uc3QgdHIgPSBuZXcgTWF0cml4NCgpO1xyXG4gICAgICAgIHRyLm1ha2VSb3RhdGlvblkoLWFuZ2xlKTtcclxuICAgICAgICB0cmFuc2Zvcm0ubXVsdGlwbHlNYXRyaWNlcyh0ciwgdHQpO1xyXG4gICAgICAgIGludlRyYW5zZm9ybS5jb3B5KHRyYW5zZm9ybSkuaW52ZXJ0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIEdldHMgdGhlIGRpc3RhbmNlIGZyb20gc3BlY2lmaWVkIHBvaW50LlxyXG4gICAgICogQHBhcmFtIHggWCBjb29yZGluYXRlIG9mIHRoZSBwb2ludC5cclxuICAgICAqIEBwYXJhbSB5IFkgY29vcmRpbmF0ZSBvZiB0aGUgcG9pbnQuXHJcbiAgICAgKiBAcmV0dXJucyBUaGUgZGlzdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBkaXN0YW5jZVRvKHg6IG51bWJlciwgeTogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgICAgICAvLyB4LCB5LCB4MSwgeTEsIHgyLCB5MlxyXG4gICAgICAgIHJldHVybiBVdGlscy5wb2ludERpc3RhbmNlRnJvbUxpbmUoeCwgeSxcclxuICAgICAgICAgICAgdGhpcy5pbnRlcmlvclN0YXJ0KCkueCxcclxuICAgICAgICAgICAgdGhpcy5pbnRlcmlvclN0YXJ0KCkueSxcclxuICAgICAgICAgICAgdGhpcy5pbnRlcmlvckVuZCgpLngsXHJcbiAgICAgICAgICAgIHRoaXMuaW50ZXJpb3JFbmQoKS55KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0U3RhcnQoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZnJvbnQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMud2FsbC5nZXRTdGFydCgpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLndhbGwuZ2V0RW5kKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRFbmQoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZnJvbnQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMud2FsbC5nZXRFbmQoKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy53YWxsLmdldFN0YXJ0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0T3Bwb3NpdGVFZGdlKCk6IEhhbGZFZGdlIHtcclxuICAgICAgICBpZiAodGhpcy5mcm9udCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy53YWxsLmJhY2tFZGdlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLndhbGwuZnJvbnRFZGdlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyB0aGVzZSByZXR1cm4gYW4gb2JqZWN0IHdpdGggYXR0cmlidXRlcyB4LCB5XHJcbiAgICBwdWJsaWMgaW50ZXJpb3JFbmQoKTogVmVjdG9yMiB7XHJcbiAgICAgICAgY29uc3QgdmVjID0gdGhpcy5oYWxmQW5nbGVWZWN0b3IodGhpcywgdGhpcy5uZXh0KTtcclxuICAgICAgICByZXR1cm4gbmV3IFZlY3RvcjIodGhpcy5nZXRFbmQoKS54ICsgdmVjLngsIHRoaXMuZ2V0RW5kKCkueSArIHZlYy55KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaW50ZXJpb3JTdGFydCgpOiBWZWN0b3IyIHtcclxuICAgICAgICBjb25zdCB2ZWMgPSB0aGlzLmhhbGZBbmdsZVZlY3Rvcih0aGlzLnByZXYsIHRoaXMpO1xyXG4gICAgICAgIHJldHVybiBuZXcgVmVjdG9yMih0aGlzLmdldFN0YXJ0KCkueCArIHZlYy54LCB0aGlzLmdldFN0YXJ0KCkueSArIHZlYy55KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaW50ZXJpb3JDZW50ZXIoKTogVmVjdG9yMiB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBWZWN0b3IyKCh0aGlzLmludGVyaW9yU3RhcnQoKS54ICsgdGhpcy5pbnRlcmlvckVuZCgpLngpIC8gMi4wLCAodGhpcy5pbnRlcmlvclN0YXJ0KCkueSArIHRoaXMuaW50ZXJpb3JFbmQoKS55KSAvIDIuMCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGV4dGVyaW9yRW5kKCk6IFZlY3RvcjIge1xyXG4gICAgICAgIGNvbnN0IHZlYyA9IHRoaXMuaGFsZkFuZ2xlVmVjdG9yKHRoaXMsIHRoaXMubmV4dCk7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBWZWN0b3IyKHRoaXMuZ2V0RW5kKCkueCAtIHZlYy54LCB0aGlzLmdldEVuZCgpLnkgLSB2ZWMueSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGV4dGVyaW9yU3RhcnQoKTogVmVjdG9yMiB7XHJcbiAgICAgICAgY29uc3QgdmVjID0gdGhpcy5oYWxmQW5nbGVWZWN0b3IodGhpcy5wcmV2LCB0aGlzKTtcclxuICAgICAgICByZXR1cm4gbmV3IFZlY3RvcjIodGhpcy5nZXRTdGFydCgpLnggLSB2ZWMueCwgdGhpcy5nZXRTdGFydCgpLnkgLSB2ZWMueSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIEdldCB0aGUgY29ybmVycyBvZiB0aGUgaGFsZiBlZGdlLlxyXG4gICAgICogQHJldHVybnMgQW4gYXJyYXkgb2YgeCx5IHBhaXJzLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgY29ybmVycygpOiB7IHg6IG51bWJlciwgeTogbnVtYmVyIH1bXSB7XHJcbiAgICAgICAgcmV0dXJuIFt0aGlzLmludGVyaW9yU3RhcnQoKSwgdGhpcy5pbnRlcmlvckVuZCgpLFxyXG4gICAgICAgICAgICB0aGlzLmV4dGVyaW9yRW5kKCksIHRoaXMuZXh0ZXJpb3JTdGFydCgpXTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgQ0NXIGFuZ2xlIGZyb20gdjEgdG8gdjJcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBoYWxmQW5nbGVWZWN0b3IodjE6IEhhbGZFZGdlLCB2MjogSGFsZkVkZ2UpOiBWZWN0b3IyIHtcclxuICAgICAgICAvLyBtYWtlIHRoZSBiZXN0IG9mIHRoaW5ncyBpZiB3ZSBkb250IGhhdmUgcHJldiBvciBuZXh0XHJcbiAgICAgICAgbGV0IHYxc3RhcnRYO1xyXG4gICAgICAgIGxldCB2MXN0YXJ0WTtcclxuICAgICAgICBsZXQgdjFlbmRYO1xyXG4gICAgICAgIGxldCB2MWVuZFk7XHJcbiAgICAgICAgbGV0IHYyc3RhcnRYO1xyXG4gICAgICAgIGxldCB2MnN0YXJ0WTtcclxuICAgICAgICBsZXQgdjJlbmRYO1xyXG4gICAgICAgIGxldCB2MmVuZFk7XHJcblxyXG4gICAgICAgIGlmICghdjEpIHtcclxuICAgICAgICAgICAgdjFzdGFydFggPSB2Mi5nZXRTdGFydCgpLnggLSAodjIuZ2V0RW5kKCkueCAtIHYyLmdldFN0YXJ0KCkueCk7XHJcbiAgICAgICAgICAgIHYxc3RhcnRZID0gdjIuZ2V0U3RhcnQoKS55IC0gKHYyLmdldEVuZCgpLnkgLSB2Mi5nZXRTdGFydCgpLnkpO1xyXG4gICAgICAgICAgICB2MWVuZFggPSB2Mi5nZXRTdGFydCgpLng7XHJcbiAgICAgICAgICAgIHYxZW5kWSA9IHYyLmdldFN0YXJ0KCkueTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB2MXN0YXJ0WCA9IDxudW1iZXI+djEuZ2V0U3RhcnQoKS54O1xyXG4gICAgICAgICAgICB2MXN0YXJ0WSA9IDxudW1iZXI+djEuZ2V0U3RhcnQoKS55O1xyXG4gICAgICAgICAgICB2MWVuZFggPSB2MS5nZXRFbmQoKS54O1xyXG4gICAgICAgICAgICB2MWVuZFkgPSB2MS5nZXRFbmQoKS55O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCF2Mikge1xyXG4gICAgICAgICAgICB2MnN0YXJ0WCA9IHYxLmdldEVuZCgpLng7XHJcbiAgICAgICAgICAgIHYyc3RhcnRZID0gdjEuZ2V0RW5kKCkueTtcclxuICAgICAgICAgICAgdjJlbmRYID0gdjEuZ2V0RW5kKCkueCArICh2MS5nZXRFbmQoKS54IC0gdjEuZ2V0U3RhcnQoKS54KTtcclxuICAgICAgICAgICAgdjJlbmRZID0gdjEuZ2V0RW5kKCkueSArICh2MS5nZXRFbmQoKS55IC0gdjEuZ2V0U3RhcnQoKS55KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB2MnN0YXJ0WCA9IHYyLmdldFN0YXJ0KCkueDtcclxuICAgICAgICAgICAgdjJzdGFydFkgPSB2Mi5nZXRTdGFydCgpLnk7XHJcbiAgICAgICAgICAgIHYyZW5kWCA9IHYyLmdldEVuZCgpLng7XHJcbiAgICAgICAgICAgIHYyZW5kWSA9IHYyLmdldEVuZCgpLnk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBDQ1cgYW5nbGUgYmV0d2VlbiBlZGdlc1xyXG4gICAgICAgIGNvbnN0IHRoZXRhID0gVXRpbHMuYW5nbGUycGkoXHJcbiAgICAgICAgICAgIHYxc3RhcnRYIC0gdjFlbmRYLFxyXG4gICAgICAgICAgICB2MXN0YXJ0WSAtIHYxZW5kWSxcclxuICAgICAgICAgICAgdjJlbmRYIC0gdjFlbmRYLFxyXG4gICAgICAgICAgICB2MmVuZFkgLSB2MWVuZFkpO1xyXG5cclxuICAgICAgICAvLyBjb3NpbmUgYW5kIHNpbmUgb2YgaGFsZiBhbmdsZVxyXG4gICAgICAgIGNvbnN0IGNzID0gTWF0aC5jb3ModGhldGEgLyAyLjApO1xyXG4gICAgICAgIGNvbnN0IHNuID0gTWF0aC5zaW4odGhldGEgLyAyLjApO1xyXG5cclxuICAgICAgICAvLyByb3RhdGUgdjJcclxuICAgICAgICBjb25zdCB2MmR4ID0gdjJlbmRYIC0gdjJzdGFydFg7XHJcbiAgICAgICAgY29uc3QgdjJkeSA9IHYyZW5kWSAtIHYyc3RhcnRZO1xyXG5cclxuICAgICAgICBjb25zdCB2eCA9IHYyZHggKiBjcyAtIHYyZHkgKiBzbjtcclxuICAgICAgICBjb25zdCB2eSA9IHYyZHggKiBzbiArIHYyZHkgKiBjcztcclxuXHJcbiAgICAgICAgLy8gbm9ybWFsaXplXHJcbiAgICAgICAgY29uc3QgbWFnID0gVXRpbHMuZGlzdGFuY2UoMCwgMCwgdngsIHZ5KTtcclxuICAgICAgICBjb25zdCBkZXNpcmVkTWFnID0gKHRoaXMub2Zmc2V0KSAvIHNuO1xyXG4gICAgICAgIGNvbnN0IHNjYWxhciA9IGRlc2lyZWRNYWcgLyBtYWc7XHJcblxyXG4gICAgICAgIHJldHVybiBuZXcgVmVjdG9yMih2eCAqIHNjYWxhciwgdnkgKiBzY2FsYXIpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgaW52RXh0ZXJpb3JRdWF0ZXJuaW9uKCk6IFF1YXRlcm5pb24ge1xyXG4gICAgICAgIGNvbnN0IHF1YXRlcm5pb24gPSBuZXcgUXVhdGVybmlvbigpO1xyXG4gICAgICAgIHF1YXRlcm5pb24uc2V0RnJvbVJvdGF0aW9uTWF0cml4KHRoaXMuaW52RXh0ZXJpb3JUcmFuc2Zvcm0pO1xyXG4gICAgICAgIHJldHVybiBxdWF0ZXJuaW9uO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgRWRnZSB7XHJcbiAgICBwcml2YXRlIF9maWxsZXJDb2xvciA9IG5ldyBDb2xvcigweGRkZGRkZCk7XHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IF93YWxsOiBXYWxsO1xyXG4gICAgcHJpdmF0ZSByZWFkb25seSBfZnJvbnQ6IGJvb2xlYW47XHJcblxyXG4gICAgcHJpdmF0ZSBfZmlsbGVyTWF0ZXJpYWw6IFRIUkVFLk1lc2hCYXNpY01hdGVyaWFsO1xyXG4gICAgcHJpdmF0ZSBfd2FsbE1hdGVyaWFsOiBUSFJFRS5NZXNoUGhvbmdNYXRlcmlhbDtcclxuICAgIHByaXZhdGUgX3BsYW5lczoge1xyXG4gICAgICAgIGV4dGVyaW9yOiBNZXNoLFxyXG4gICAgICAgIGludGVyaW9yOiBNZXNoLFxyXG4gICAgICAgIHNpZGVzOiBNZXNoW10sXHJcbiAgICAgICAgYm90dG9tOiBNZXNoLFxyXG4gICAgICAgIHRvcDogTWVzaFxyXG4gICAgfSA9IHtcclxuICAgICAgICBleHRlcmlvcjogbnVsbCxcclxuICAgICAgICBpbnRlcmlvcjogbnVsbCxcclxuICAgICAgICBzaWRlczogbnVsbCxcclxuICAgICAgICBib3R0b206IG51bGwsXHJcbiAgICAgICAgdG9wOiBudWxsXHJcbiAgICB9O1xyXG5cclxuICAgIHByaXZhdGUgX2xhc3Q6IHtcclxuICAgICAgICBjb2xvcjogbnVtYmVyLFxyXG4gICAgICAgIHRleHR1cmU6IFRleHR1cmUsXHJcbiAgICAgICAgZmlsbGVyTWF0ZXJpYWw6IE1lc2hCYXNpY01hdGVyaWFsLFxyXG4gICAgICAgIHdhbGxNYXRlcmlhbDogTWVzaFBob25nTWF0ZXJpYWwsXHJcbiAgICAgICAgaGVpZ2h0OiBudW1iZXJcclxuICAgIH0gPSB7XHJcbiAgICAgICAgY29sb3I6IG51bGwsXHJcbiAgICAgICAgdGV4dHVyZTogbnVsbCxcclxuICAgICAgICBmaWxsZXJNYXRlcmlhbDogbnVsbCxcclxuICAgICAgICB3YWxsTWF0ZXJpYWw6IG51bGwsXHJcbiAgICAgICAgaGVpZ2h0OiBudWxsXHJcbiAgICB9O1xyXG5cclxuICAgIHB1YmxpYyB2aXNpYmxlO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgX2hhbGZFZGdlOiBIYWxmRWRnZSkge1xyXG4gICAgICAgIGlmIChfaGFsZkVkZ2UpIHtcclxuICAgICAgICAgICAgdGhpcy5fd2FsbCA9IF9oYWxmRWRnZS53YWxsO1xyXG4gICAgICAgICAgICB0aGlzLl9mcm9udCA9IF9oYWxmRWRnZS5mcm9udDtcclxuICAgICAgICAgICAgLy8gdGhpcy51cGRhdGVQbGFuZXMoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNob3dIaWRlRWRnZShzaG93OiBib29sZWFuKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5fcGxhbmVMaXN0KCkuZm9yRWFjaChwID0+IHAudmlzaWJsZSA9IHNob3cpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX3BsYW5lTGlzdCgpOiBNZXNoW10ge1xyXG4gICAgICAgIHJldHVybiAodGhpcy5fcGxhbmVzLnNpZGVzIHx8IFtdKS5jb25jYXQoW1xyXG4gICAgICAgICAgICB0aGlzLl9wbGFuZXMudG9wLFxyXG4gICAgICAgICAgICB0aGlzLl9wbGFuZXMuYm90dG9tLFxyXG4gICAgICAgICAgICB0aGlzLl9wbGFuZXMuaW50ZXJpb3IsXHJcbiAgICAgICAgICAgIHRoaXMuX3BsYW5lcy5leHRlcmlvclxyXG4gICAgICAgIF0pLmZpbHRlcih4ID0+IHgpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRQbGFuZXMoKTogTWVzaFtdIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcGxhbmVMaXN0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldFRvcFNpZGVGaWxsZXJzKCk6IE1lc2hbXSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3BsYW5lcy5zaWRlcy5jb25jYXQoW3RoaXMuX3BsYW5lcy50b3BdKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYXN5bmMgaW5pdCgpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgICAgICAvLyB0aGlzLmhhbGZFZGdlLnJlZHJhd0NhbGxiYWNrcy5hZGQodGhpcy5yZWRyYXcpO1xyXG4gICAgICAgIC8vIGhhbGZFZGdlLml0ZW1BZGRlZENhbGxiYWNrcy5hZGQodXBkYXRlT2JqZWN0VmlzaWJpbGl0eSk7XHJcbiAgICAgICAgLy8gY29udHJvbHMuY2FtZXJhTW92ZWRDYWxsYmFja3MuYWRkKHVwZGF0ZVZpc2liaWxpdHkpO1xyXG4gICAgICAgIGF3YWl0IHRoaXMudXBkYXRlUGxhbmVzKCk7XHJcbiAgICAgICAgLy8gYWRkVG9TY2VuZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhc3luYyByZWRyYXcoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICAgICAgYXdhaXQgdGhpcy51cGRhdGVQbGFuZXMoKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBwcml2YXRlIHJlbW92ZUZyb21TY2VuZSgpIHtcclxuICAgIC8vICAgdGhpcy5wbGFuZUxpc3QoKS5mb3JFYWNoKChwbGFuZSkgPT4ge1xyXG4gICAgLy8gICAgIHNjZW5lLnJlbW92ZShwbGFuZSk7XHJcbiAgICAvLyAgICAgVXRpbHMuZGlzcG9zZU9iamVjdChwbGFuZSk7XHJcbiAgICAvLyAgIH0pO1xyXG4gICAgLy8gICBPYmplY3Qua2V5cyhwbGFuZXMpLmZvckVhY2goKGtleTogc3RyaW5nKSA9PiBwbGFuZXNba2V5XSA9IG51bGwpO1xyXG4gICAgLy8gICBPYmplY3Qua2V5cyhsYXN0KS5mb3JFYWNoKChrZXk6IHN0cmluZykgPT4gbGFzdFtrZXldID0gbnVsbCk7XHJcbiAgICAvLyB9XHJcblxyXG4gICAgLy8gcHJpdmF0ZSBhZGRUb1NjZW5lKCkge1xyXG4gICAgLy8gICBwbGFuZUxpc3QoKS5mb3JFYWNoKChwbGFuZSkgPT4ge1xyXG4gICAgLy8gICAgIHNjZW5lLmFkZChwbGFuZSk7XHJcbiAgICAvLyAgIH0pO1xyXG4gICAgLy8gICB1cGRhdGVWaXNpYmlsaXR5KCk7XHJcbiAgICAvLyB9XHJcblxyXG4gICAgcHVibGljIHVwZGF0ZVZpc2liaWxpdHkoY2FtZXJhUG9zaXRpb246IFZlY3RvcjMpOiBib29sZWFuIHtcclxuICAgICAgICAvLyBmaW5kcyB0aGUgbm9ybWFsIGZyb20gdGhlIHNwZWNpZmllZCBoYWxmRWRnZVxyXG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gdGhpcy5faGFsZkVkZ2UuaW50ZXJpb3JTdGFydCgpO1xyXG4gICAgICAgIGNvbnN0IGVuZCA9IHRoaXMuX2hhbGZFZGdlLmludGVyaW9yRW5kKCk7XHJcbiAgICAgICAgY29uc3QgeCA9IGVuZC54IC0gc3RhcnQueDtcclxuICAgICAgICBjb25zdCB5ID0gZW5kLnkgLSBzdGFydC55O1xyXG4gICAgICAgIC8vIHJvdGF0ZSA5MCBkZWdyZWVzIENDV1xyXG4gICAgICAgIGNvbnN0IG5vcm1hbCA9IG5ldyBWZWN0b3IzKC15LCAwLCB4KTtcclxuICAgICAgICBub3JtYWwubm9ybWFsaXplKCk7XHJcblxyXG4gICAgICAgIC8vIHNldHVwIGNhbWVyYVxyXG4gICAgICAgIGNvbnN0IHBvc2l0aW9uID0gY2FtZXJhUG9zaXRpb24uY2xvbmUoKTtcclxuICAgICAgICBjb25zdCBmb2N1cyA9IG5ldyBWZWN0b3IzKFxyXG4gICAgICAgICAgICAoc3RhcnQueCArIGVuZC54KSAvIDIuMCxcclxuICAgICAgICAgICAgMCxcclxuICAgICAgICAgICAgKHN0YXJ0LnkgKyBlbmQueSkgLyAyLjApO1xyXG4gICAgICAgIGNvbnN0IGRpcmVjdGlvbiA9IHBvc2l0aW9uLnN1Yihmb2N1cykubm9ybWFsaXplKCk7XHJcblxyXG4gICAgICAgIC8vIGZpbmQgZG90XHJcbiAgICAgICAgY29uc3QgZG90ID0gbm9ybWFsLmRvdChkaXJlY3Rpb24pO1xyXG5cclxuICAgICAgICAvLyB1cGRhdGUgdmlzaWJsZVxyXG4gICAgICAgIGNvbnN0IG5ld1Zpc2libGUgPSAoZG90ID49IDApO1xyXG5cclxuICAgICAgICAvLyBzaG93IG9yIGhpZGUgcGxhbnNcclxuICAgICAgICB0aGlzLl9wbGFuZUxpc3QoKS5mb3JFYWNoKChwbGFuZTogVEhSRUUuTWVzaCkgPT5cclxuICAgICAgICAgICAgVXRpbHMuc2V0UGxhbmVWaXNpYmlsaXR5KHBsYW5lLCBuZXdWaXNpYmxlKVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgaWYgKG5ld1Zpc2libGUgIT09IHRoaXMudmlzaWJsZSkge1xyXG4gICAgICAgICAgICB0aGlzLnZpc2libGUgPSBuZXdWaXNpYmxlO1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZU9iamVjdFZpc2liaWxpdHkoKTtcclxuICAgICAgICAgICAgcmV0dXJuIG5ld1Zpc2libGU7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB1cGRhdGVPYmplY3RWaXNpYmlsaXR5KCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX3dhbGwuaXRlbXMuZm9yRWFjaCgoaXRlbTogV2FsbEl0ZW0pID0+IHtcclxuICAgICAgICAgICAgaXRlbS51cGRhdGVFZGdlVmlzaWJpbGl0eSh0aGlzKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLl93YWxsLm9uSXRlbXMuZm9yRWFjaCgoaXRlbTogV2FsbEl0ZW0pID0+IHtcclxuICAgICAgICAgICAgaXRlbS51cGRhdGVFZGdlVmlzaWJpbGl0eSh0aGlzKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2V0QWxsUGxhbmVzVmlzaWJsZSgpIHtcclxuICAgICAgICB0aGlzLl9wbGFuZUxpc3QoKS5mb3JFYWNoKChwbGFuZTogVEhSRUUuTWVzaCkgPT5cclxuICAgICAgICAgICAgVXRpbHMuc2V0UGxhbmVWaXNpYmlsaXR5KHBsYW5lLCB0cnVlKVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhc3luYyBfYWRkTWF0ZXJpYWxNYXAobWF0ZXJpYWw6IFRIUkVFLk1lc2hQaG9uZ01hdGVyaWFsIHwgVEhSRUUuTWVzaFN0YW5kYXJkTWF0ZXJpYWwsIHRleHR1cmU6IFRleHR1cmUpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgICAgICBjb25zdCBkaW1lbnNpb25zID0gbmV3IFRIUkVFLlZlY3RvcjIoXHJcbiAgICAgICAgICAgIHRoaXMuX2hhbGZFZGdlLmludGVyaW9yRGlzdGFuY2UoKSxcclxuICAgICAgICAgICAgdGhpcy5fd2FsbC5oZWlnaHQgLSB0aGlzLl93YWxsLnRoaWNrbmVzc1xyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGV4dHVyZS5kaW1lbnNpb25zID0gZGltZW5zaW9ucy5tdWx0aXBseVNjYWxhcigxMDApO1xyXG4gICAgICAgIHN3aXRjaCAodGV4dHVyZS50eXBlKSB7XHJcbiAgICAgICAgICAgIGNhc2UgVGV4dHVyZVR5cGUuSW1hZ2U6XHJcbiAgICAgICAgICAgICAgICBtYXRlcmlhbC5tYXAgPSBhd2FpdCBNYXRlcmlhbFV0aWxzLkZyb21JbWFnZSh0ZXh0dXJlKTtcclxuICAgICAgICAgICAgICAgIG1hdGVyaWFsLm1hcC5jb2xvclNwYWNlID0gU1JHQkNvbG9yU3BhY2U7XHJcbiAgICAgICAgICAgICAgICBtYXRlcmlhbC5uZWVkc1VwZGF0ZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBUZXh0dXJlVHlwZS5DdXN0b21QYXR0ZXJuOlxyXG4gICAgICAgICAgICAgICAgbWF0ZXJpYWwubWFwID0gYXdhaXQgTWF0ZXJpYWxVdGlscy5DdXN0b21UaWxlTWFwVGV4dHVyZSh0ZXh0dXJlLCBkaW1lbnNpb25zKTtcclxuICAgICAgICAgICAgICAgIG1hdGVyaWFsLm1hcC5jb2xvclNwYWNlID0gU1JHQkNvbG9yU3BhY2U7XHJcbiAgICAgICAgICAgICAgICBtYXRlcmlhbC5uZWVkc1VwZGF0ZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBUZXh0dXJlVHlwZS5CYXNpYzpcclxuICAgICAgICAgICAgICAgIG1hdGVyaWFsLm1hcCA9IGF3YWl0IE1hdGVyaWFsVXRpbHMuRnJvbVVybCh0ZXh0dXJlLnVybCwgdGV4dHVyZS5zdHJldGNoLCB0ZXh0dXJlLnRpbGVTaXplLCBudWxsLCBudWxsLCB0ZXh0dXJlLmRpbWVuc2lvbnMsIHRleHR1cmUudGlsZVJvdGF0aW9uKTtcclxuICAgICAgICAgICAgICAgIG1hdGVyaWFsLm1hcC5jb2xvclNwYWNlID0gU1JHQkNvbG9yU3BhY2U7XHJcbiAgICAgICAgICAgICAgICBtYXRlcmlhbC5uZWVkc1VwZGF0ZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBUZXh0dXJlVHlwZS5QQlI6XHJcbiAgICAgICAgICAgICAgICBtYXRlcmlhbCA9IG1hdGVyaWFsIGFzIE1lc2hTdGFuZGFyZE1hdGVyaWFsO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRleHR1cmUubWF0ZXJpYWxpemVVcmwpIHtcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCBNYXRlcmlhbFV0aWxzLmxvYWRNYXRlcmlhbGl6ZU1hcHMobWF0ZXJpYWwsIHRleHR1cmUpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBtYXRlcmlhbC5tYXAgPSBhd2FpdCBNYXRlcmlhbFV0aWxzLkZyb21VcmwodGV4dHVyZS51cmwsIHRleHR1cmUuc3RyZXRjaCwgdGV4dHVyZS50aWxlU2l6ZSwgdGV4dHVyZS5yZXBlYXRYLCB0ZXh0dXJlLnJlcGVhdFksIHRleHR1cmUuZGltZW5zaW9ucywgdGV4dHVyZS50aWxlUm90YXRpb24pO1xyXG4gICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsLm1hcC5jb2xvclNwYWNlID0gU1JHQkNvbG9yU3BhY2U7XHJcbiAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWwucm91Z2huZXNzTWFwID0gdGV4dHVyZS5yb3VnaG5lc3NNYXAgPyBhd2FpdCBNYXRlcmlhbFV0aWxzLkZyb21VcmwodGV4dHVyZS5yb3VnaG5lc3NNYXAsIHRleHR1cmUuc3RyZXRjaCwgdGV4dHVyZS50aWxlU2l6ZSwgdGV4dHVyZS5yZXBlYXRYLCB0ZXh0dXJlLnJlcGVhdFksIHRleHR1cmUuZGltZW5zaW9ucywgdGV4dHVyZS50aWxlUm90YXRpb24pIDogbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICBtYXRlcmlhbC5idW1wTWFwID0gdGV4dHVyZS5idW1wTWFwID8gYXdhaXQgTWF0ZXJpYWxVdGlscy5Gcm9tVXJsKHRleHR1cmUuYnVtcE1hcCwgdGV4dHVyZS5zdHJldGNoLCB0ZXh0dXJlLnRpbGVTaXplLCB0ZXh0dXJlLnJlcGVhdFgsIHRleHR1cmUucmVwZWF0WSwgdGV4dHVyZS5kaW1lbnNpb25zLCB0ZXh0dXJlLnRpbGVSb3RhdGlvbikgOiBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsLm5vcm1hbE1hcCA9IHRleHR1cmUubm9ybWFsTWFwID8gYXdhaXQgTWF0ZXJpYWxVdGlscy5Gcm9tVXJsKHRleHR1cmUubm9ybWFsTWFwLCB0ZXh0dXJlLnN0cmV0Y2gsIHRleHR1cmUudGlsZVNpemUsIHRleHR1cmUucmVwZWF0WCwgdGV4dHVyZS5yZXBlYXRZLCB0ZXh0dXJlLmRpbWVuc2lvbnMsIHRleHR1cmUudGlsZVJvdGF0aW9uKSA6IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWwubWV0YWxuZXNzTWFwID0gdGV4dHVyZS5tZXRhbG5lc3NNYXAgPyBhd2FpdCBNYXRlcmlhbFV0aWxzLkZyb21VcmwodGV4dHVyZS5tZXRhbG5lc3NNYXAsIHRleHR1cmUuc3RyZXRjaCwgdGV4dHVyZS50aWxlU2l6ZSwgdGV4dHVyZS5yZXBlYXRYLCB0ZXh0dXJlLnJlcGVhdFksIHRleHR1cmUuZGltZW5zaW9ucywgdGV4dHVyZS50aWxlUm90YXRpb24pIDogbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICBtYXRlcmlhbC5hb01hcCA9IHRleHR1cmUuYW9NYXAgPyBhd2FpdCBNYXRlcmlhbFV0aWxzLkZyb21VcmwodGV4dHVyZS5hb01hcCwgdGV4dHVyZS5zdHJldGNoLCB0ZXh0dXJlLnRpbGVTaXplLCB0ZXh0dXJlLnJlcGVhdFgsIHRleHR1cmUucmVwZWF0WSwgdGV4dHVyZS5kaW1lbnNpb25zLCB0ZXh0dXJlLnRpbGVSb3RhdGlvbikgOiBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsLm5lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfaXNWYWxpZChzdGFydEVuZCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiAhc3RhcnRFbmQuZmluZChlID0+ICFpc0Zpbml0ZShlLngpIHx8ICFpc0Zpbml0ZShlLnkpKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF91cGRhdGVGaWxsZXJNYXRlcmlhbCgpOiBNZXNoQmFzaWNNYXRlcmlhbCB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2ZpbGxlck1hdGVyaWFsKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9maWxsZXJNYXRlcmlhbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgbWF0ZXJpYWw6IE1lc2hCYXNpY01hdGVyaWFsID0gbmV3IE1lc2hCYXNpY01hdGVyaWFsKHtcclxuICAgICAgICAgICAgY29sb3I6IHRoaXMuX2ZpbGxlckNvbG9yLFxyXG4gICAgICAgICAgICBzaWRlOiBEb3VibGVTaWRlXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIG1hdGVyaWFsO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYXN5bmMgX3VwZGF0ZVdhbGxNYXRlcmlhbCh0ZXh0dXJlOiBUZXh0dXJlLCBjb2xvcjogbnVtYmVyID0gZGVmYXVsdEVkZ2VDb2xvcik6IFByb21pc2U8TWVzaFBob25nTWF0ZXJpYWw+IHtcclxuICAgICAgICBjb25zdCBpc1NhbWVDb2xvciA9IGNvbG9yICYmIHRoaXMuX2xhc3QuY29sb3IgJiYgY29sb3IgPT09IHRoaXMuX2xhc3QuY29sb3I7XHJcbiAgICAgICAgY29uc3QgaXNTYW1lVGV4dHVyZSA9IHNhbWVUZXh0dXJlcyh0ZXh0dXJlLCB0aGlzLl9sYXN0LnRleHR1cmUpO1xyXG4gICAgICAgIGlmIChpc1NhbWVDb2xvciAmJiBpc1NhbWVUZXh0dXJlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl93YWxsTWF0ZXJpYWw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghaXNTYW1lQ29sb3IpIHtcclxuICAgICAgICAgICAgdGhpcy5fbGFzdC5jb2xvciA9IGNvbG9yO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWlzU2FtZVRleHR1cmUpIHtcclxuICAgICAgICAgICAgdGhpcy5fbGFzdC50ZXh0dXJlID0gT2JqZWN0LmFzc2lnbih7fSwgdGV4dHVyZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgbWF0ZXJpYWw7XHJcbiAgICAgICAgbWF0ZXJpYWwgPSBuZXcgVEhSRUUuTWVzaFBob25nTWF0ZXJpYWwoe1xyXG4gICAgICAgICAgICBjb2xvcjogY29sb3IsXHJcbiAgICAgICAgICAgIHNpZGU6IFRIUkVFLkZyb250U2lkZVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBpZiAodGV4dHVyZSkge1xyXG4gICAgICAgICAgICBtYXRlcmlhbCA9IG5ldyBUSFJFRS5NZXNoU3RhbmRhcmRNYXRlcmlhbCh7XHJcbiAgICAgICAgICAgICAgICBjb2xvcjogY29sb3IsXHJcbiAgICAgICAgICAgICAgICBzaWRlOiBUSFJFRS5Gcm9udFNpZGUsXHJcbiAgICAgICAgICAgICAgICByb3VnaG5lc3M6ICFpc05pbGwodGV4dHVyZS5yb3VnaG5lc3MpID8gdGV4dHVyZS5yb3VnaG5lc3MgOiAwLjgsXHJcbiAgICAgICAgICAgICAgICBtZXRhbG5lc3M6ICFpc05pbGwodGV4dHVyZS5tZXRhbG5lc3MpID8gdGV4dHVyZS5tZXRhbG5lc3MgOiAwLFxyXG4gICAgICAgICAgICAgICAgYnVtcFNjYWxlOiAhaXNOaWxsKHRleHR1cmUuYnVtcFNjYWxlKSA/IHRleHR1cmUuYnVtcFNjYWxlIDogMVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5fYWRkTWF0ZXJpYWxNYXAobWF0ZXJpYWwsIHRleHR1cmUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbWF0ZXJpYWw7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfZXF1YWxMYXN0VmVjMihwbGFuZTogc3RyaW5nLCBwYXJhbVN1ZmZpeDogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgY29uc3QgcGFyYW1OYW1lID0gYCR7cGxhbmV9JHtwYXJhbVN1ZmZpeH1gO1xyXG4gICAgICAgIGNvbnN0IGdldHRlciA9IHRoaXMuX2hhbGZFZGdlW3BhcmFtTmFtZV0oKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5fbGFzdFtwYXJhbU5hbWVdICYmXHJcbiAgICAgICAgICAgIHRoaXMuX2hhbGZFZGdlW3BhcmFtTmFtZV0gJiZcclxuICAgICAgICAgICAgdGhpcy5fbGFzdFtwYXJhbU5hbWVdLnggPT09IGdldHRlci54ICYmXHJcbiAgICAgICAgICAgIHRoaXMuX2xhc3RbcGFyYW1OYW1lXS55ID09PSBnZXR0ZXIueTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF9jb3B5TGFzdChwbGFuZTogc3RyaW5nLCBwYXJhbXM6IHN0cmluZ1tdKTogdm9pZCB7XHJcbiAgICAgICAgcGFyYW1zLmZvckVhY2goKHBhcmFtOiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgcGFyYW1OYW1lID0gcGFyYW0gPT09ICdJbnZUcmFuc2Zvcm0nID9cclxuICAgICAgICAgICAgICAgIHRoaXMuX2ludlRyYW5zZm9ybVBhcmFtKHBsYW5lKSA6XHJcbiAgICAgICAgICAgICAgICBgJHtwbGFuZX0ke3BhcmFtfWA7XHJcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnQgPSAnZnVuY3Rpb24nID09PSB0eXBlb2YgdGhpcy5faGFsZkVkZ2VbcGFyYW1OYW1lXSA/XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9oYWxmRWRnZVtwYXJhbU5hbWVdKCkgOiB0aGlzLl9oYWxmRWRnZVtwYXJhbU5hbWVdO1xyXG4gICAgICAgICAgICB0aGlzLl9sYXN0W3BhcmFtTmFtZV0gPSBjdXJyZW50O1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX3RyYW5zZm9ybVBhcmFtKHBsYW5lOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBgJHtwbGFuZX1UcmFuc2Zvcm1gO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX2ludlRyYW5zZm9ybVBhcmFtKHBsYW5lOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBgaW52JHtwbGFuZS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKX0ke3BsYW5lLnN1YnN0cigxKX1UcmFuc2Zvcm1gO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX3VwZGF0ZU1haW5QbGFuZShwbGFuZTogc3RyaW5nLCBtYXRlcmlhbDogTWVzaEJhc2ljTWF0ZXJpYWwgfCBNZXNoUGhvbmdNYXRlcmlhbCk6IE1lc2gge1xyXG4gICAgICAgIGxldCB1cGRhdGVQbGFuZTogTWVzaCA9IHRoaXMuX3BsYW5lc1twbGFuZV07XHJcbiAgICAgICAgY29uc3QgZ2VvOiBTaGFwZUdlb21ldHJ5ID0gdGhpcy5fY3JlYXRlR2VvbWV0cnkoXHJcbiAgICAgICAgICAgIHRoaXMuX2hhbGZFZGdlW2Ake3BsYW5lfVN0YXJ0YF0oKSxcclxuICAgICAgICAgICAgdGhpcy5faGFsZkVkZ2VbYCR7cGxhbmV9RW5kYF0oKSxcclxuICAgICAgICAgICAgdGhpcy5faGFsZkVkZ2VbdGhpcy5fdHJhbnNmb3JtUGFyYW0ocGxhbmUpXSxcclxuICAgICAgICAgICAgdGhpcy5faGFsZkVkZ2VbdGhpcy5faW52VHJhbnNmb3JtUGFyYW0ocGxhbmUpXSxcclxuICAgICAgICApO1xyXG4gICAgICAgIGlmICghdXBkYXRlUGxhbmUpIHtcclxuICAgICAgICAgICAgdXBkYXRlUGxhbmUgPSBuZXcgVGhyZWVNZXNoKGdlbywgbWF0ZXJpYWwpO1xyXG4gICAgICAgICAgICB1cGRhdGVQbGFuZS5uYW1lID0gJ2VkZ2UnO1xyXG4gICAgICAgICAgICB1cGRhdGVQbGFuZS51c2VyRGF0YS53YWxsID0gdGhpcy5fd2FsbDtcclxuICAgICAgICAgICAgdXBkYXRlUGxhbmUuY2FzdFNoYWRvdyA9IHRydWU7XHJcbiAgICAgICAgICAgIHVwZGF0ZVBsYW5lLnJlY2VpdmVTaGFkb3cgPSB0cnVlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHVwZGF0ZVBsYW5lLmdlb21ldHJ5ID0gZ2VvO1xyXG4gICAgICAgICAgICB1cGRhdGVQbGFuZS5tYXRlcmlhbCA9IG1hdGVyaWFsO1xyXG4gICAgICAgICAgICB1cGRhdGVQbGFuZS5tYXRlcmlhbC5uZWVkc1VwZGF0ZSA9IHRydWU7XHJcbiAgICAgICAgfS8qIGVsc2Uge1xyXG4gICAgICB1cGRhdGVQbGFuZSA9IHRoaXMubWFrZVdhbGwoXHJcbiAgICAgICAgdGhpcy5oYWxmRWRnZVtgJHtwbGFuZX1TdGFydGBdKCksXHJcbiAgICAgICAgdGhpcy5oYWxmRWRnZVtgJHtwbGFuZX1FbmRgXSgpLFxyXG4gICAgICAgIHRoaXMuaGFsZkVkZ2VbdGhpcy50cmFuc2Zvcm1QYXJhbShwbGFuZSldLFxyXG4gICAgICAgIHRoaXMuaGFsZkVkZ2VbdGhpcy5pbnZUcmFuc2Zvcm1QYXJhbShwbGFuZSldLFxyXG4gICAgICAgIG1hdGVyaWFsXHJcbiAgICAgICk7XHJcbiAgICB9Ki9cclxuICAgICAgICByZXR1cm4gdXBkYXRlUGxhbmU7XHJcbiAgICAgICAgLy8gY29uc3Qgb2xkUGxhbmUgPSB0aGlzLnBsYW5lc1twbGFuZV07XHJcbiAgICAgICAgLy8gY29uc3QgbmV3UGxhbmUgPSB0aGlzLm1ha2VXYWxsKFxyXG4gICAgICAgIC8vICAgdGhpcy5oYWxmRWRnZVtgJHtwbGFuZX1TdGFydGBdKCksXHJcbiAgICAgICAgLy8gICB0aGlzLmhhbGZFZGdlW2Ake3BsYW5lfUVuZGBdKCksXHJcbiAgICAgICAgLy8gICB0aGlzLmhhbGZFZGdlW3RoaXMudHJhbnNmb3JtUGFyYW0ocGxhbmUpXSxcclxuICAgICAgICAvLyAgIHRoaXMuaGFsZkVkZ2VbdGhpcy5pbnZUcmFuc2Zvcm1QYXJhbShwbGFuZSldLFxyXG4gICAgICAgIC8vICAgbWF0ZXJpYWxcclxuICAgICAgICAvLyApO1xyXG4gICAgICAgIC8vIGlmIChvbGRQbGFuZSkge1xyXG4gICAgICAgIC8vICAgLy8gc2NlbmUucmVtb3ZlKG9sZFBsYW5lKTtcclxuICAgICAgICAvLyAgIFV0aWxzLmRpc3Bvc2VPYmplY3Qob2xkUGxhbmUpO1xyXG4gICAgICAgIC8vIH1cclxuICAgICAgICAvLyAvLyBzY2VuZS5hZGQobmV3UGxhbmUpO1xyXG4gICAgICAgIC8vIHJldHVybiBuZXdQbGFuZTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF91cGRhdGVCb3R0b21QbGFuZSgpOiBNZXNoIHtcclxuICAgICAgICBjb25zdCBvbGRQbGFuZSA9IHRoaXMuX3BsYW5lcy5ib3R0b207XHJcbiAgICAgICAgaWYgKG9sZFBsYW5lICYmXHJcbiAgICAgICAgICAgIHRoaXMuX2VxdWFsTGFzdFZlYzIoJ2ludGVyaW9yJywgJ1N0YXJ0JykgJiZcclxuICAgICAgICAgICAgdGhpcy5fZXF1YWxMYXN0VmVjMignaW50ZXJpb3InLCAnRW5kJykgJiZcclxuICAgICAgICAgICAgdGhpcy5fZXF1YWxMYXN0VmVjMignZXh0ZXJpb3InLCAnU3RhcnQnKSAmJlxyXG4gICAgICAgICAgICB0aGlzLl9lcXVhbExhc3RWZWMyKCdleHRlcmlvcicsICdFbmQnKVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgICByZXR1cm4gb2xkUGxhbmU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IG5ld1BsYW5lID0gdGhpcy5fYnVpbGRGaWxsZXIoMCwgdGhpcy5fZmlsbGVyTWF0ZXJpYWwpO1xyXG4gICAgICAgIGlmIChvbGRQbGFuZSkge1xyXG4gICAgICAgICAgICAvLyBEaXNwb3NlIGZ1bmN0aW9uIGRvZXMgbm90IGFjdHVhbGx5IHJlbW92ZSB0aGUgb2JqZWN0IGZyb20gdGhlIHNjZW5lXHJcbiAgICAgICAgICAgIE9iamVjdFV0aWxzLkRpc3Bvc2VPYmplY3Qob2xkUGxhbmUpO1xyXG4gICAgICAgICAgICBvbGRQbGFuZS52aXNpYmxlID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIHNjZW5lLmFkZChuZXdQbGFuZSk7XHJcbiAgICAgICAgcmV0dXJuIG5ld1BsYW5lO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX3VwZGF0ZVRvcFBsYW5lKCk6IE1lc2gge1xyXG4gICAgICAgIGNvbnN0IG9sZFBsYW5lID0gdGhpcy5fcGxhbmVzLnRvcDtcclxuICAgICAgICBpZiAob2xkUGxhbmUgJiZcclxuICAgICAgICAgICAgdGhpcy5fbGFzdC5oZWlnaHQgPT09IHRoaXMuX3dhbGwuaGVpZ2h0ICYmXHJcbiAgICAgICAgICAgIHRoaXMuX2VxdWFsTGFzdFZlYzIoJ2ludGVyaW9yJywgJ1N0YXJ0JykgJiZcclxuICAgICAgICAgICAgdGhpcy5fZXF1YWxMYXN0VmVjMignaW50ZXJpb3InLCAnRW5kJykgJiZcclxuICAgICAgICAgICAgdGhpcy5fZXF1YWxMYXN0VmVjMignZXh0ZXJpb3InLCAnU3RhcnQnKSAmJlxyXG4gICAgICAgICAgICB0aGlzLl9lcXVhbExhc3RWZWMyKCdleHRlcmlvcicsICdFbmQnKVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgICByZXR1cm4gb2xkUGxhbmU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChvbGRQbGFuZSkge1xyXG4gICAgICAgICAgICAvLyBEaXNwb3NlIGZ1bmN0aW9uIGRvZXMgbm90IGFjdHVhbGx5IHJlbW92ZSB0aGUgb2JqZWN0IGZyb20gdGhlIHNjZW5lXHJcbiAgICAgICAgICAgIE9iamVjdFV0aWxzLkRpc3Bvc2VPYmplY3Qob2xkUGxhbmUpO1xyXG4gICAgICAgICAgICBvbGRQbGFuZS52aXNpYmxlID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IG5ld1BsYW5lID0gdGhpcy5fYnVpbGRGaWxsZXIodGhpcy5fd2FsbC5oZWlnaHQsIHRoaXMuX2ZpbGxlck1hdGVyaWFsKTtcclxuICAgICAgICAvLyBzY2VuZS5hZGQobmV3UGxhbmUpO1xyXG4gICAgICAgIHJldHVybiBuZXdQbGFuZTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF91cGRhdGVTaWRlUGxhbmVzKCk6IE1lc2hbXSB7XHJcbiAgICAgICAgY29uc3Qgb2xkUGxhbmVzID0gdGhpcy5fcGxhbmVzLnNpZGVzO1xyXG4gICAgICAgIGlmIChvbGRQbGFuZXMgJiZcclxuICAgICAgICAgICAgdGhpcy5fbGFzdC5oZWlnaHQgPT09IHRoaXMuX3dhbGwuaGVpZ2h0ICYmXHJcbiAgICAgICAgICAgIHRoaXMuX2VxdWFsTGFzdFZlYzIoJ2ludGVyaW9yJywgJ1N0YXJ0JykgJiZcclxuICAgICAgICAgICAgdGhpcy5fZXF1YWxMYXN0VmVjMignaW50ZXJpb3InLCAnRW5kJykgJiZcclxuICAgICAgICAgICAgdGhpcy5fZXF1YWxMYXN0VmVjMignZXh0ZXJpb3InLCAnU3RhcnQnKSAmJlxyXG4gICAgICAgICAgICB0aGlzLl9lcXVhbExhc3RWZWMyKCdleHRlcmlvcicsICdFbmQnKVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgICByZXR1cm4gb2xkUGxhbmVzO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBuZXdQbGFuZXMgPSBbXHJcbiAgICAgICAgICAgIHRoaXMuX2J1aWxkU2lkZUZpbGxlcih0aGlzLl9oYWxmRWRnZS5pbnRlcmlvclN0YXJ0KCksIHRoaXMuX2hhbGZFZGdlLmV4dGVyaW9yU3RhcnQoKSwgdGhpcy5fd2FsbC5oZWlnaHQsIHRoaXMuX2ZpbGxlck1hdGVyaWFsKSxcclxuICAgICAgICAgICAgdGhpcy5fYnVpbGRTaWRlRmlsbGVyKHRoaXMuX2hhbGZFZGdlLmludGVyaW9yRW5kKCksIHRoaXMuX2hhbGZFZGdlLmV4dGVyaW9yRW5kKCksIHRoaXMuX3dhbGwuaGVpZ2h0LCB0aGlzLl9maWxsZXJNYXRlcmlhbClcclxuICAgICAgICBdO1xyXG4gICAgICAgIGlmIChvbGRQbGFuZXMpIHtcclxuICAgICAgICAgICAgb2xkUGxhbmVzLmZvckVhY2gocCA9PiB7XHJcbiAgICAgICAgICAgICAgICAvLyBEaXNwb3NlIGZ1bmN0aW9uIGRvZXMgbm90IGFjdHVhbGx5IHJlbW92ZSB0aGUgb2JqZWN0IGZyb20gdGhlIHNjZW5lXHJcbiAgICAgICAgICAgICAgICBPYmplY3RVdGlscy5EaXNwb3NlT2JqZWN0KHApO1xyXG4gICAgICAgICAgICAgICAgcC52aXNpYmxlID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBuZXdQbGFuZXMuZm9yRWFjaChwID0+IHNjZW5lLmFkZChwKSk7XHJcbiAgICAgICAgcmV0dXJuIG5ld1BsYW5lcztcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYXN5bmMgdXBkYXRlUGxhbmVzKCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgICAgIHRoaXMuX2ZpbGxlck1hdGVyaWFsID0gdGhpcy5fdXBkYXRlRmlsbGVyTWF0ZXJpYWwoKTtcclxuICAgICAgICBpZiAodGhpcy5faXNWYWxpZChbdGhpcy5faGFsZkVkZ2UuZXh0ZXJpb3JTdGFydCgpLCB0aGlzLl9oYWxmRWRnZS5leHRlcmlvckVuZCgpXSkpIHtcclxuICAgICAgICAgICAgdGhpcy5fcGxhbmVzLmV4dGVyaW9yID0gdGhpcy5fdXBkYXRlTWFpblBsYW5lKCdleHRlcmlvcicsIHRoaXMuX2ZpbGxlck1hdGVyaWFsKTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuX2hhbGZFZGdlLmdldFRleHR1cmUoKSAmJiB0aGlzLl9oYWxmRWRnZS5nZXRUZXh0dXJlKCkudHlwZSAhPT0gVGV4dHVyZVR5cGUuSW1hZ2UpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3VwZGF0ZVV2cyh0aGlzLl9wbGFuZXMuZXh0ZXJpb3IpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBvbGRXYWxsTWF0ZXJpYWwgPSB0aGlzLl93YWxsTWF0ZXJpYWw7XHJcbiAgICAgICAgdGhpcy5fd2FsbE1hdGVyaWFsID0gYXdhaXQgdGhpcy5fdXBkYXRlV2FsbE1hdGVyaWFsKHRoaXMuX2hhbGZFZGdlLmdldFRleHR1cmUoKSwgdGhpcy5faGFsZkVkZ2UuZ2V0Q29sb3IoKSk7XHJcbiAgICAgICAgaWYgKHRoaXMuX2lzVmFsaWQoW3RoaXMuX2hhbGZFZGdlLmludGVyaW9yU3RhcnQoKSwgdGhpcy5faGFsZkVkZ2UuaW50ZXJpb3JFbmQoKV0pKSB7XHJcbiAgICAgICAgICAgIC8vIHRoaXMucGxhbmVzLmludGVyaW9yID0gKCFvbGRXYWxsTWF0ZXJpYWwgfHwgb2xkV2FsbE1hdGVyaWFsID09PSB0aGlzLndhbGxNYXRlcmlhbClcclxuICAgICAgICAgICAgLy8gICA/IHRoaXMudXBkYXRlTWFpblBsYW5lKCdpbnRlcmlvcicsIHRoaXMud2FsbE1hdGVyaWFsKVxyXG4gICAgICAgICAgICAvLyAgIDogdGhpcy51cGRhdGVNYWluUGxhbmVNYXRlcmlhbCgnaW50ZXJpb3InLCB0aGlzLndhbGxNYXRlcmlhbCk7XHJcbiAgICAgICAgICAgIHRoaXMuX3BsYW5lcy5pbnRlcmlvciA9IHRoaXMuX3VwZGF0ZU1haW5QbGFuZSgnaW50ZXJpb3InLCB0aGlzLl93YWxsTWF0ZXJpYWwpO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5faGFsZkVkZ2UuZ2V0VGV4dHVyZSgpICYmIHRoaXMuX2hhbGZFZGdlLmdldFRleHR1cmUoKS50eXBlICE9PSBUZXh0dXJlVHlwZS5JbWFnZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fdXBkYXRlVXZzKHRoaXMuX3BsYW5lcy5pbnRlcmlvcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX3BsYW5lcy5ib3R0b20gPSB0aGlzLl91cGRhdGVCb3R0b21QbGFuZSgpO1xyXG4gICAgICAgIHRoaXMuX3BsYW5lcy50b3AgPSB0aGlzLl91cGRhdGVUb3BQbGFuZSgpO1xyXG4gICAgICAgIHRoaXMuX3BsYW5lcy5zaWRlcyA9IHRoaXMuX3VwZGF0ZVNpZGVQbGFuZXMoKTtcclxuXHJcbiAgICAgICAgdGhpcy5fbGFzdC5maWxsZXJNYXRlcmlhbCA9IHRoaXMuX2ZpbGxlck1hdGVyaWFsO1xyXG4gICAgICAgIHRoaXMuX2xhc3Qud2FsbE1hdGVyaWFsID0gdGhpcy5fd2FsbE1hdGVyaWFsO1xyXG4gICAgICAgIHRoaXMuX2xhc3QuaGVpZ2h0ID0gdGhpcy5fd2FsbC5oZWlnaHQ7XHJcbiAgICAgICAgdGhpcy5fY29weUxhc3QoJ2V4dGVyaW9yJywgWydTdGFydCcsICdFbmQnLCAnVHJhbnNmb3JtJywgJ0ludlRyYW5zZm9ybSddKTtcclxuICAgICAgICB0aGlzLl9jb3B5TGFzdCgnaW50ZXJpb3InLCBbJ1N0YXJ0JywgJ0VuZCcsICdUcmFuc2Zvcm0nLCAnSW52VHJhbnNmb3JtJ10pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX3VwZGF0ZVV2cyhtZXNoOiBNZXNoKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgZGltZW5zaW9ucyA9IG5ldyBUSFJFRS5WZWN0b3IyKFxyXG4gICAgICAgICAgICB0aGlzLl9oYWxmRWRnZS5pbnRlcmlvckRpc3RhbmNlKCksXHJcbiAgICAgICAgICAgIHRoaXMuX3dhbGwuaGVpZ2h0IC0gdGhpcy5fd2FsbC50aGlja25lc3NcclxuICAgICAgICApLm11bHRpcGx5U2NhbGFyKDEwMCk7XHJcbiAgICAgICAgY29uc3QgcmF0aW86IG51bWJlciA9IGRpbWVuc2lvbnMueCAvIGRpbWVuc2lvbnMueTtcclxuICAgICAgICBsZXQgdXZZOiBudW1iZXI7XHJcbiAgICAgICAgY29uc3QgdGVtcFZlY3RvcjogVmVjdG9yMiA9IG5ldyBWZWN0b3IyKCk7XHJcbiAgICAgICAgY29uc3QgdXZBcnJheTogQnVmZmVyQXR0cmlidXRlID0gPEJ1ZmZlckF0dHJpYnV0ZT5tZXNoLmdlb21ldHJ5LmF0dHJpYnV0ZXMudXY7XHJcbiAgICAgICAgaWYgKHV2QXJyYXkpIHtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB1dkFycmF5LmNvdW50OyBpKyspIHtcclxuICAgICAgICAgICAgICAgIHRlbXBWZWN0b3IuZnJvbUJ1ZmZlckF0dHJpYnV0ZSh1dkFycmF5LCBpKTtcclxuICAgICAgICAgICAgICAgIHV2WSA9IHRlbXBWZWN0b3IueTtcclxuICAgICAgICAgICAgICAgIHV2WSAtPSAwLjU7XHJcbiAgICAgICAgICAgICAgICB1dlkgLz0gcmF0aW87XHJcbiAgICAgICAgICAgICAgICB1dlkgKz0gMC41O1xyXG4gICAgICAgICAgICAgICAgdXZBcnJheS5zZXRZKGksIHV2WSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdXZBcnJheS5uZWVkc1VwZGF0ZSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIHN0YXJ0LCBlbmQgaGF2ZSB4IGFuZCB5IGF0dHJpYnV0ZXMgKGkuZS4gY29ybmVycylcclxuICAgIHByaXZhdGUgX2NyZWF0ZUdlb21ldHJ5KHN0YXJ0LCBlbmQsIHRyYW5zZm9ybSwgaW52VHJhbnNmb3JtKTogU2hhcGVHZW9tZXRyeSB7XHJcbiAgICAgICAgY29uc3QgdjEgPSB0aGlzLl90b1ZlYzMoc3RhcnQpO1xyXG4gICAgICAgIGNvbnN0IHYyID0gdGhpcy5fdG9WZWMzKGVuZCk7XHJcbiAgICAgICAgY29uc3QgdjMgPSB2Mi5jbG9uZSgpO1xyXG4gICAgICAgIHYzLnkgPSB0aGlzLl93YWxsLmhlaWdodDtcclxuICAgICAgICBjb25zdCB2NCA9IHYxLmNsb25lKCk7XHJcbiAgICAgICAgdjQueSA9IHRoaXMuX3dhbGwuaGVpZ2h0O1xyXG5cclxuICAgICAgICBjb25zdCBwb2ludHMgPSBbdjEuY2xvbmUoKSwgdjIuY2xvbmUoKSwgdjMuY2xvbmUoKSwgdjQuY2xvbmUoKV07XHJcblxyXG4gICAgICAgIHBvaW50cy5mb3JFYWNoKChwKSA9PiB7XHJcbiAgICAgICAgICAgIHAuYXBwbHlNYXRyaXg0KHRyYW5zZm9ybSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGNvbnN0IHNoYXBlID0gbmV3IFNoYXBlKFtcclxuICAgICAgICAgICAgbmV3IFZlY3RvcjIocG9pbnRzWzBdLngsIHBvaW50c1swXS55KSxcclxuICAgICAgICAgICAgbmV3IFZlY3RvcjIocG9pbnRzWzFdLngsIHBvaW50c1sxXS55KSxcclxuICAgICAgICAgICAgbmV3IFZlY3RvcjIocG9pbnRzWzJdLngsIHBvaW50c1syXS55KSxcclxuICAgICAgICAgICAgbmV3IFZlY3RvcjIocG9pbnRzWzNdLngsIHBvaW50c1szXS55KVxyXG4gICAgICAgIF0pO1xyXG5cclxuICAgICAgICAvLyBhZGQgaG9sZXMgZm9yIGVhY2ggd2FsbCBpdGVtXHJcbiAgICAgICAgY29uc3QgaXRlbUhvbGVzID0gdGhpcy5fd2FsbC5pdGVtc1xyXG4gICAgICAgICAgICAuZmlsdGVyKChpdGVtOiBXYWxsSXRlbSkgPT4gIWlzTmFOKGl0ZW0ucG9zaXRpb24ueCkpXHJcbiAgICAgICAgICAgIC5tYXAoKGl0ZW06IFdhbGxJdGVtKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBwb3MgPSBpdGVtLnBvc2l0aW9uLmNsb25lKCk7XHJcbiAgICAgICAgICAgICAgICBwb3MuYXBwbHlNYXRyaXg0KHRyYW5zZm9ybSk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBoYWxmU2l6ZSA9IGl0ZW0uaGFsZlNpemU7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBtaW4gPSBoYWxmU2l6ZS5jbG9uZSgpLm11bHRpcGx5U2NhbGFyKC0xKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG1heCA9IGhhbGZTaXplLmNsb25lKCk7XHJcbiAgICAgICAgICAgICAgICBtaW4uYWRkKHBvcyk7XHJcbiAgICAgICAgICAgICAgICBtYXguYWRkKHBvcyk7XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3QgaG9sZVBvaW50cyA9IFtcclxuICAgICAgICAgICAgICAgICAgICBuZXcgVmVjdG9yMihtaW4ueCwgbWluLnkpLFxyXG4gICAgICAgICAgICAgICAgICAgIG5ldyBWZWN0b3IyKG1heC54LCBtaW4ueSksXHJcbiAgICAgICAgICAgICAgICAgICAgbmV3IFZlY3RvcjIobWF4LngsIG1heC55KSxcclxuICAgICAgICAgICAgICAgICAgICBuZXcgVmVjdG9yMihtaW4ueCwgbWF4LnkpXHJcbiAgICAgICAgICAgICAgICBdO1xyXG5cclxuICAgICAgICAgICAgICAgIHJldHVybiBob2xlUG9pbnRzO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICBjb25zdCBwb2x5Z29ucyA9IFV0aWxzLnBvbHlnb25zVW5pb24oaXRlbUhvbGVzKTtcclxuICAgICAgICBwb2x5Z29ucy5mb3JFYWNoKGhvbGVQb2x5Z29uID0+IHNoYXBlLmhvbGVzLnB1c2gobmV3IFBhdGgoaG9sZVBvbHlnb24pKSk7XHJcblxyXG4gICAgICAgIGNvbnN0IGdlb21ldHJ5ID0gbmV3IFNoYXBlR2VvbWV0cnkoc2hhcGUpO1xyXG5cclxuICAgICAgICBjb25zdCBwb3NpdGlvbkF0dHJpYnV0ZTogQnVmZmVyQXR0cmlidXRlID0gPEJ1ZmZlckF0dHJpYnV0ZT5nZW9tZXRyeS5nZXRBdHRyaWJ1dGUoJ3Bvc2l0aW9uJyk7XHJcbiAgICAgICAgY29uc3QgdXZBdHRyaWJ1dGU6IEJ1ZmZlckF0dHJpYnV0ZSA9IDxCdWZmZXJBdHRyaWJ1dGU+Z2VvbWV0cnkuZ2V0QXR0cmlidXRlKCd1dicpO1xyXG4gICAgICAgIFV0aWxzLkFwcGx5QnVmZmVyQXR0cmlidXRlTWF0cml4VHJhbnNmb3JtKHBvc2l0aW9uQXR0cmlidXRlLCBpbnZUcmFuc2Zvcm0pO1xyXG5cclxuICAgICAgICAvLyBtYWtlIFVWc1xyXG4gICAgICAgIGNvbnN0IHRvdGFsRGlzdGFuY2UgPSBVdGlscy5kaXN0YW5jZSh2MS54LCB2MS56LCB2Mi54LCB2Mi56KTtcclxuICAgICAgICBjb25zdCBoZWlnaHQgPSB0aGlzLl93YWxsLmhlaWdodDtcclxuXHJcbiAgICAgICAgZnVuY3Rpb24gdmVydGV4VG9Vdih2ZXJ0ZXgpIHtcclxuICAgICAgICAgICAgY29uc3QgeCA9IFV0aWxzLmRpc3RhbmNlKHYxLngsIHYxLnosIHZlcnRleC54LCB2ZXJ0ZXgueikgLyB0b3RhbERpc3RhbmNlO1xyXG4gICAgICAgICAgICBjb25zdCB5ID0gdmVydGV4LnkgLyBoZWlnaHQ7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgVEhSRUUuVmVjdG9yMih4LCB5KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IHRlbXBVVkFycmF5OiBWZWN0b3IyW10gPSBbXTtcclxuICAgICAgICBjb25zdCBwb3NpdGlvbkRhdGFBc1ZlY3RvcjNBcnJheTogVmVjdG9yM1tdID0gVXRpbHMuR2V0VmVjdG9yM0FycmF5RnJvbUJ1ZmZlckF0dHJpYnV0ZShwb3NpdGlvbkF0dHJpYnV0ZS5jbG9uZSgpKTtcclxuXHJcbiAgICAgICAgcG9zaXRpb25EYXRhQXNWZWN0b3IzQXJyYXkuZm9yRWFjaCgodmVydGV4OiBWZWN0b3IzKSA9PiB7XHJcbiAgICAgICAgICAgIHRlbXBVVkFycmF5LnB1c2godmVydGV4VG9Vdih2ZXJ0ZXgpKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGVtcFVWQXJyYXkuZm9yRWFjaCgodXZWZWN0b3I6IFZlY3RvcjIsIGluZGV4KSA9PiB7XHJcbiAgICAgICAgICAgIHV2QXR0cmlidXRlLnNldFhZKGluZGV4LCB1dlZlY3Rvci54LCB1dlZlY3Rvci55KTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdXZBdHRyaWJ1dGUubmVlZHNVcGRhdGUgPSB0cnVlO1xyXG4gICAgICAgIGdlb21ldHJ5LmNvbXB1dGVWZXJ0ZXhOb3JtYWxzKCk7XHJcbiAgICAgICAgcmV0dXJuIGdlb21ldHJ5O1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX2J1aWxkU2lkZUZpbGxlcihwMTogVmVjdG9yMiwgcDI6IFZlY3RvcjIsIGhlaWdodDogbnVtYmVyLCBtYXRlcmlhbDogTWF0ZXJpYWwpOiBNZXNoIHtcclxuICAgICAgICBjb25zdCBwb2ludHMgPSBbXHJcbiAgICAgICAgICAgIHRoaXMuX3RvVmVjMyhwMSksXHJcbiAgICAgICAgICAgIHRoaXMuX3RvVmVjMyhwMiksXHJcbiAgICAgICAgICAgIHRoaXMuX3RvVmVjMyhwMiwgaGVpZ2h0KSxcclxuICAgICAgICAgICAgdGhpcy5fdG9WZWMzKHAxLCBoZWlnaHQpXHJcbiAgICAgICAgXTtcclxuXHJcbiAgICAgICAgY29uc3QgZ2VvbWV0cnkgPSBuZXcgQnVmZmVyR2VvbWV0cnkoKS5zZXRGcm9tUG9pbnRzKHBvaW50cyk7XHJcbiAgICAgICAgY29uc3QgZmlsbGVyID0gbmV3IE1lc2goZ2VvbWV0cnksIG1hdGVyaWFsKTtcclxuICAgICAgICBmaWxsZXIuY2FzdFNoYWRvdyA9IHRydWU7XHJcbiAgICAgICAgZmlsbGVyLnJlY2VpdmVTaGFkb3cgPSB0cnVlO1xyXG4gICAgICAgIGZpbGxlci5uYW1lID0gJ2VkZ2Utc2lkZS1maWxsZXInO1xyXG4gICAgICAgIHJldHVybiBmaWxsZXI7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfYnVpbGRGaWxsZXIoaGVpZ2h0OiBudW1iZXIsIG1hdGVyaWFsOiBNYXRlcmlhbCk6IE1lc2gge1xyXG4gICAgICAgIGNvbnN0IHBvaW50cyA9IFtcclxuICAgICAgICAgICAgdGhpcy5fdG9WZWMyKHRoaXMuX2hhbGZFZGdlLmV4dGVyaW9yU3RhcnQoKSksXHJcbiAgICAgICAgICAgIHRoaXMuX3RvVmVjMih0aGlzLl9oYWxmRWRnZS5leHRlcmlvckVuZCgpKSxcclxuICAgICAgICAgICAgdGhpcy5fdG9WZWMyKHRoaXMuX2hhbGZFZGdlLmludGVyaW9yRW5kKCkpLFxyXG4gICAgICAgICAgICB0aGlzLl90b1ZlYzIodGhpcy5faGFsZkVkZ2UuaW50ZXJpb3JTdGFydCgpKVxyXG4gICAgICAgIF07XHJcblxyXG4gICAgICAgIGNvbnN0IHNoYXBlID0gbmV3IFNoYXBlKHBvaW50cyk7XHJcbiAgICAgICAgY29uc3QgZ2VvbWV0cnkgPSBuZXcgU2hhcGVHZW9tZXRyeShzaGFwZSk7XHJcblxyXG4gICAgICAgIGNvbnN0IGZpbGxlciA9IG5ldyBNZXNoKGdlb21ldHJ5LCBtYXRlcmlhbCk7XHJcbiAgICAgICAgZmlsbGVyLm5hbWUgPSAnZWRnZS1maWxsZXInO1xyXG4gICAgICAgIGZpbGxlci5jYXN0U2hhZG93ID0gdHJ1ZTtcclxuICAgICAgICBmaWxsZXIucmVjZWl2ZVNoYWRvdyA9IHRydWU7XHJcbiAgICAgICAgZmlsbGVyLnJvdGF0aW9uLnNldChNYXRoLlBJIC8gMiwgMCwgMCk7XHJcbiAgICAgICAgZmlsbGVyLnBvc2l0aW9uLnkgPSBoZWlnaHQ7XHJcbiAgICAgICAgcmV0dXJuIGZpbGxlcjtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF90b1ZlYzIocG9zKTogVmVjdG9yMiB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBWZWN0b3IyKHBvcy54LCBwb3MueSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfdG9WZWMzKHBvczogeyB4OiBudW1iZXIsIHk6IG51bWJlciB9LCBoZWlnaHQgPSAwKTogVmVjdG9yMyB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBWZWN0b3IzKHBvcy54LCBoZWlnaHQsIHBvcy55KTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFJvb20ge1xyXG5cclxuICAgIHB1YmxpYyBpbnRlcmlvckNvcm5lcnM6IENvcm5lcltdID0gW107XHJcblxyXG4gICAgcHJpdmF0ZSBlZGdlUG9pbnRlciA9IG51bGw7XHJcbiAgICBwdWJsaWMgZWRnZUhlaWdodHMgPSBbXTtcclxuXHJcbiAgICBwdWJsaWMgZmxvb3JQbGFuZTogRmxvb3JQbGFuZUl0ZW0gPSBudWxsO1xyXG4gICAgcHVibGljIGZsb29yVGV4dHVyZTogVGV4dHVyZTtcclxuICAgIHB1YmxpYyBmbG9vckNvbG9yOiBudW1iZXIgPSAweGNjY2NjYztcclxuICAgIHB1YmxpYyBjZWlsaW5nUGxhbmU6IE1lc2ggPSBudWxsO1xyXG5cclxuICAgIC8vIHByaXZhdGUgZmxvb3JDaGFuZ2VDYWxsYmFja3MgPSAkLkNhbGxiYWNrcygpO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHB1YmxpYyBjb3JuZXJzOiBDb3JuZXJbXSxcclxuICAgICAgICBkZWZhdWx0VGV4dHVyZT86IFRleHR1cmVcclxuICAgICkge1xyXG4gICAgICAgIGlmIChkZWZhdWx0VGV4dHVyZSkge1xyXG4gICAgICAgICAgICB0aGlzLmZsb29yVGV4dHVyZSA9IGRlZmF1bHRUZXh0dXJlO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl9zZXRFZGdlUG9pbnRlcigpO1xyXG4gICAgICAgIHRoaXMuX3VwZGF0ZUludGVyaW9yQ29ybmVycygpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBkaXNwb3NlKCk6IHZvaWQge1xyXG4gICAgICAgIE9iamVjdFV0aWxzLkRpc3Bvc2VPYmplY3QodGhpcy5mbG9vclBsYW5lKTtcclxuICAgICAgICBPYmplY3RVdGlscy5EaXNwb3NlT2JqZWN0KHRoaXMuY2VpbGluZ1BsYW5lKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0SW50ZXJpb3JDb3JuZXJzKCk6IFZlY3RvcjJbXSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaW50ZXJpb3JDb3JuZXJzLm1hcCgoYzogeyB4OiBudW1iZXIsIHk6IG51bWJlciB9KSA9PiBuZXcgVmVjdG9yMihjLngsIGMueSkpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRVdWlkKCk6IHN0cmluZyB7XHJcbiAgICAgICAgY29uc3QgY29ybmVyVXVpZHMgPSBVdGlscy5tYXAodGhpcy5jb3JuZXJzLCBmdW5jdGlvbiAoYykge1xyXG4gICAgICAgICAgICByZXR1cm4gYy5pZDtcclxuICAgICAgICB9KTtcclxuICAgICAgICBjb3JuZXJVdWlkcy5zb3J0KCk7XHJcbiAgICAgICAgcmV0dXJuIGNvcm5lclV1aWRzLmpvaW4oKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0VGV4dHVyZSgpIHtcclxuICAgICAgICAvLyBjb25zdCB1dWlkID0gdGhpcy5nZXRVdWlkKCk7XHJcbiAgICAgICAgLy8gcmV0dXJuIHRoaXMuZmxvb3JwbGFuLmdldEZsb29yVGV4dHVyZSh1dWlkKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5mbG9vclRleHR1cmU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldENvbG9yKCkge1xyXG4gICAgICAgIC8vIGNvbnN0IHV1aWQgPSB0aGlzLmdldFV1aWQoKTtcclxuICAgICAgICAvLyByZXR1cm4gdGhpcy5mbG9vcnBsYW4uZ2V0Rmxvb3JDb2xvcih1dWlkKSB8fCBkZWZhdWx0Rmxvb3JDb2xvcjtcclxuICAgICAgICByZXR1cm4gdGhpcy5mbG9vckNvbG9yO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB1c2VUZXh0dXJlKCkge1xyXG4gICAgICAgIC8vIHJldHVybiBkZWZhdWx0Rmxvb3JDb2xvciA9PT0gdGhpcy5nZXRDb2xvcigpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogdGV4dHVyZVN0cmV0Y2ggYWx3YXlzIHRydWUsIGp1c3QgYW4gYXJndW1lbnQgZm9yIGNvbnNpc3RlbmN5IHdpdGggd2FsbHNcclxuICAgICAqL1xyXG4gICAgLy8gcHVibGljIHNldFRleHR1cmUodGV4dHVyZTogVGV4dHVyZSkge1xyXG4gICAgLy8gICAvLyBjb25zdCB1dWlkID0gdGhpcy5nZXRVdWlkKCk7XHJcbiAgICAvLyAgIC8vIHRoaXMuZmxvb3JwbGFuLnNldEZsb29yVGV4dHVyZSh1dWlkLCB0ZXh0dXJlKTtcclxuICAgIC8vICAgLy8gdGhpcy5mbG9vcnBsYW4uZGVsZXRlRmxvb3JDb2xvcih1dWlkKTtcclxuICAgIC8vICAgLy8gdGhpcy5mbG9vckNoYW5nZUNhbGxiYWNrcy5maXJlKCk7XHJcbiAgICAvLyB9XHJcblxyXG4gICAgLy8gcHVibGljIHNldENvbG9yKGNvbG9yOiBudW1iZXIpIHtcclxuICAgIC8vICAgLy8gY29uc3QgdXVpZCA9IHRoaXMuZ2V0VXVpZCgpO1xyXG4gICAgLy8gICAvLyB0aGlzLmZsb29ycGxhbi5kZWxldGVGbG9vclRleHR1cmUodXVpZCk7XHJcbiAgICAvLyAgIC8vIHRoaXMuZmxvb3JwbGFuLnNldEZsb29yQ29sb3IodXVpZCwgY29sb3IpO1xyXG4gICAgLy8gICAvLyB0aGlzLmZsb29yQ2hhbmdlQ2FsbGJhY2tzLmZpcmUoKTtcclxuICAgIC8vIH1cclxuXHJcbiAgICBwdWJsaWMgdXBkYXRlV2FsbEhlaWdodHMoKSB7XHJcbiAgICAgICAgbGV0IGVkZ2UgPSB0aGlzLmVkZ2VQb2ludGVyO1xyXG4gICAgICAgIHRoaXMuZWRnZUhlaWdodHMubGVuZ3RoID0gMDtcclxuICAgICAgICB3aGlsZSAodHJ1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLmVkZ2VIZWlnaHRzLnB1c2goZWRnZS53YWxsLmhlaWdodCk7XHJcbiAgICAgICAgICAgIGlmIChlZGdlLm5leHQgPT09IHRoaXMuZWRnZVBvaW50ZXIpIHtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgZWRnZSA9IGVkZ2UubmV4dDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHNldERlZmF1bHRGbG9vclRleHR1cmUoKSB7XHJcbiAgICAgICAgLy8gaWYgKCF0aGlzLl9kZWZhdWx0Rmxvb3JUZXh0dXJlKSB7XHJcbiAgICAgICAgLy8gICByZXR1cm47XHJcbiAgICAgICAgLy8gfVxyXG4gICAgICAgIC8vIGNvbnN0IHV1aWQgPSB0aGlzLmdldFV1aWQoKTtcclxuICAgICAgICAvLyBpZiAoIXRoaXMuZmxvb3JwbGFuLmdldEZsb29yVGV4dHVyZSh1dWlkKSAmJiAhdGhpcy5mbG9vcnBsYW4uZ2V0Rmxvb3JDb2xvcih1dWlkKSkge1xyXG4gICAgICAgIC8vICAgdGhpcy5zZXRUZXh0dXJlKHRoaXMuX2RlZmF1bHRGbG9vclRleHR1cmUpO1xyXG4gICAgICAgIC8vIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF91cGRhdGVJbnRlcmlvckNvcm5lcnMoKSB7XHJcbiAgICAgICAgbGV0IGVkZ2UgPSB0aGlzLmVkZ2VQb2ludGVyO1xyXG4gICAgICAgIHRoaXMuZWRnZUhlaWdodHMubGVuZ3RoID0gMDtcclxuICAgICAgICB3aGlsZSAodHJ1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLmludGVyaW9yQ29ybmVycy5wdXNoKGVkZ2UuaW50ZXJpb3JTdGFydCgpKTtcclxuICAgICAgICAgICAgZWRnZS5nZW5lcmF0ZVBsYW5lKCk7XHJcbiAgICAgICAgICAgIHRoaXMuZWRnZUhlaWdodHMucHVzaChlZGdlLmhlaWdodCk7XHJcbiAgICAgICAgICAgIGlmIChlZGdlLm5leHQgPT09IHRoaXMuZWRnZVBvaW50ZXIpIHtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgZWRnZSA9IGVkZ2UubmV4dDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF9zZXRFZGdlUG9pbnRlcigpIHtcclxuXHJcbiAgICAgICAgbGV0IHByZXZFZGdlID0gbnVsbDtcclxuICAgICAgICBsZXQgZmlyc3RFZGdlID0gbnVsbDtcclxuXHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmNvcm5lcnMubGVuZ3RoOyBpKyspIHtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGZpcnN0Q29ybmVyID0gdGhpcy5jb3JuZXJzW2ldO1xyXG4gICAgICAgICAgICBjb25zdCBzZWNvbmRDb3JuZXIgPSB0aGlzLmNvcm5lcnNbKGkgKyAxKSAlIHRoaXMuY29ybmVycy5sZW5ndGhdO1xyXG5cclxuICAgICAgICAgICAgLy8gZmluZCBpZiB3YWxsIGlzIGhlYWRpbmcgaW4gdGhhdCBkaXJlY3Rpb25cclxuICAgICAgICAgICAgY29uc3Qgd2FsbFRvID0gZmlyc3RDb3JuZXIud2FsbFRvKHNlY29uZENvcm5lcik7XHJcbiAgICAgICAgICAgIGNvbnN0IHdhbGxGcm9tID0gZmlyc3RDb3JuZXIud2FsbEZyb20oc2Vjb25kQ29ybmVyKTtcclxuICAgICAgICAgICAgbGV0IGVkZ2U6IEhhbGZFZGdlO1xyXG5cclxuICAgICAgICAgICAgaWYgKHdhbGxUbykge1xyXG4gICAgICAgICAgICAgICAgZWRnZSA9IG5ldyBIYWxmRWRnZSh0aGlzLCB3YWxsVG8sIHRydWUpO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHdhbGxGcm9tKSB7XHJcbiAgICAgICAgICAgICAgICBlZGdlID0gbmV3IEhhbGZFZGdlKHRoaXMsIHdhbGxGcm9tLCBmYWxzZSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAvLyBzb21ldGhpbmcgaG9ycmlibGUgaGFzIGhhcHBlbmVkXHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnY29ybmVycyBhcmVudCBjb25uZWN0ZWQgYnkgYSB3YWxsLCB1aCBvaCcpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICAgICAgaWYgKGkgPT09IDApIHtcclxuICAgICAgICAgICAgICAgIGZpcnN0RWRnZSA9IGVkZ2U7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBlZGdlLnByZXYgPSBwcmV2RWRnZTtcclxuICAgICAgICAgICAgICAgIHByZXZFZGdlLm5leHQgPSBlZGdlO1xyXG4gICAgICAgICAgICAgICAgaWYgKGkgKyAxID09PSB0aGlzLmNvcm5lcnMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZmlyc3RFZGdlLnByZXYgPSBlZGdlO1xyXG4gICAgICAgICAgICAgICAgICAgIGVkZ2UubmV4dCA9IGZpcnN0RWRnZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBwcmV2RWRnZSA9IGVkZ2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBob2xkIG9uIHRvIGFuIGVkZ2UgcmVmZXJlbmNlXHJcbiAgICAgICAgdGhpcy5lZGdlUG9pbnRlciA9IGZpcnN0RWRnZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0IGFyZWEoKTogbnVtYmVyIHtcclxuICAgICAgICBjb25zdCBwb2x5Z29uID0gdGhpcy5fcG9seWdvbkZyb21Db3JuZXJzKHRoaXMuaW50ZXJpb3JDb3JuZXJzKTtcclxuICAgICAgICByZXR1cm4gVXRpbHMucG9seWdvbkFyZWEocG9seWdvbik7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCBjZW50ZXIoKTogeyB4OiBudW1iZXIsIHk6IG51bWJlciB9IHtcclxuICAgICAgICBjb25zdCBwb2x5Z29uID0gdGhpcy5fcG9seWdvbkZyb21Db3JuZXJzKHRoaXMuY29ybmVycyk7XHJcbiAgICAgICAgcmV0dXJuIFV0aWxzLnBvbHlnb25DZW50ZXIocG9seWdvbik7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfcG9seWdvbkZyb21Db3JuZXJzKGNvcm5lcnM6IENvcm5lcltdKTogVmVjdG9yMltdIHtcclxuICAgICAgICByZXR1cm4gY29ybmVycy5tYXAoYyA9PiBuZXcgVmVjdG9yMihjLngsIGMueSkpO1xyXG4gICAgfVxyXG59XHJcblxyXG4vKipcclxuICogQSBXYWxsIEl0ZW0gaXMgYW4gZW50aXR5IHRvIGJlIHBsYWNlZCByZWxhdGVkIHRvIGEgd2FsbC5cclxuICovXHJcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBXYWxsSXRlbSBleHRlbmRzIEl0ZW0ge1xyXG5cclxuICAgIC8qKiBUaGUgY3VycmVudGx5IGFwcGxpZWQgd2FsbCAqL1xyXG4gICAgcHVibGljIGN1cnJlbnRXYWxsOiBXYWxsID0gbnVsbDtcclxuXHJcbiAgICAvKiogVGhlIGN1cnJlbnRseSBhcHBsaWVkIHdhbGwgZWRnZS4gKi9cclxuICAgIHB1YmxpYyBjdXJyZW50V2FsbEVkZ2U6IEhhbGZFZGdlID0gbnVsbDtcclxuXHJcbiAgICAvKiogVXNlZCBmb3IgZmluZGluZyByb3RhdGlvbnMgKi9cclxuICAgIHByaXZhdGUgX3JlZlZlYyA9IG5ldyBUSFJFRS5WZWN0b3IyKDAsIDEuMCk7XHJcblxyXG4gICAgcHJpdmF0ZSBfcG9zaXRpb25ZVG9sZXJhbmNlID0gMC4wMDU7XHJcblxyXG4gICAgLyoqICovXHJcbiAgICBwcml2YXRlIF93YWxsT2Zmc2V0U2NhbGFyID0gMDtcclxuXHJcbiAgICAvKiogKi9cclxuICAgIHByaXZhdGUgX3NpemVYID0gMDtcclxuXHJcbiAgICAvKiogKi9cclxuICAgIHByaXZhdGUgX3NpemVZID0gMDtcclxuXHJcbiAgICBwcml2YXRlIF9mbGlwcGVkID0gZmFsc2U7XHJcbiAgICBwcm90ZWN0ZWQgdGV4dHVyZTogVGV4dHVyZTtcclxuXHJcbiAgICAvKiogKi9cclxuICAgIHByb3RlY3RlZCBhZGRUb1dhbGwgPSBmYWxzZTtcclxuXHJcbiAgICAvKiogKi9cclxuICAgIHByb3RlY3RlZCBib3VuZFRvRmxvb3IgPSBmYWxzZTtcclxuXHJcbiAgICAvKiogKi9cclxuICAgIHByb3RlY3RlZCBmcm9udFZpc2libGUgPSBmYWxzZTtcclxuICAgIHByb3RlY3RlZCBiYWNrVmlzaWJsZSA9IGZhbHNlO1xyXG4gICAgcHJpdmF0ZSBfaGFzRnJvbnRFZGdlID0gZmFsc2U7XHJcbiAgICBwcml2YXRlIF9oYXNCYWNrRWRnZSA9IGZhbHNlO1xyXG4gICAgcHJpdmF0ZSBfb25Gcm9udFNpZGU6IGJvb2xlYW47XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgbWV0YWRhdGE6IE1ldGFkYXRhLFxyXG4gICAgICAgIG9iamVjdDogT2JqZWN0M0QgfCBNZXNoLFxyXG4gICAgICAgIHRleHR1cmU/OiBUZXh0dXJlLFxyXG4gICAgICAgIGhhbmRsZXJzPzogYW55XHJcbiAgICApIHtcclxuICAgICAgICBzdXBlcihtZXRhZGF0YSwgb2JqZWN0LCB0ZXh0dXJlLCBoYW5kbGVycyk7XHJcblxyXG4gICAgICAgIHRoaXMuYWxsb3dSb3RhdGUgPSBmYWxzZTtcclxuICAgICAgICBpZiAodGV4dHVyZSkge1xyXG4gICAgICAgICAgICB0aGlzLnNldFRleHR1cmUodGV4dHVyZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKiAqL1xyXG4gICAgcHVibGljIHJlbW92ZWQoKSB7XHJcbiAgICAgICAgaWYgKCFpc05pbGwodGhpcy5jdXJyZW50V2FsbEVkZ2UpICYmIHRoaXMuYWRkVG9XYWxsKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFdhbGxFZGdlLndhbGwucmVtb3ZlSXRlbSh0aGlzKTtcclxuICAgICAgICAgICAgdGhpcy5yZWRyYXdXYWxsKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyByZW1vdmVGcm9tV2FsbCgpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5jdXJyZW50V2FsbCkge1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRXYWxsLnJlbW92ZU9uSXRlbSh0aGlzKTtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50V2FsbCA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50V2FsbEVkZ2UgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogT25seSBoaWRlcyBpdGVtIHdoZW4gZW50aXJlIHdhbGwgaXMgaGlkZGVuXHJcbiAgICAgKiBUaGlzIHByZXZlbnRzIGl0ZW1zIGJlaW5nIHNldCBoaWRkZW4gZm9yIGlubmVyIHdhbGxzXHJcbiAgICAgKiAqL1xyXG4gICAgcHVibGljIHVwZGF0ZUVkZ2VWaXNpYmlsaXR5KGVkZ2U6IEVkZ2UpIHtcclxuICAgICAgICBpZiAodGhpcy5jdXJyZW50V2FsbCkge1xyXG4gICAgICAgICAgICBsZXQgc2hvdWxkU2hvdzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5jdXJyZW50V2FsbC5iYWNrRWRnZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50V2FsbC5iYWNrRWRnZS5lZGdlcy5mb3JFYWNoKChlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGUudmlzaWJsZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzaG91bGRTaG93ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodGhpcy5jdXJyZW50V2FsbC5mcm9udEVkZ2UpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudFdhbGwuZnJvbnRFZGdlLmVkZ2VzLmZvckVhY2goZSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGUudmlzaWJsZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzaG91bGRTaG93ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnZpc2libGUgPSBzaG91bGRTaG93O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKiogKi9cclxuICAgIHB1YmxpYyB1cGRhdGVTaXplKCkge1xyXG4gICAgICAgIHRoaXMuX3dhbGxPZmZzZXRTY2FsYXIgPSB0aGlzLmdldERlcHRoKCkgLyAyO1xyXG4gICAgICAgIHRoaXMuX3NpemVYID0gdGhpcy5nZXRXaWR0aCgpO1xyXG4gICAgICAgIHRoaXMuX3NpemVZID0gdGhpcy5nZXRIZWlnaHQoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKiogKi9cclxuICAgIHB1YmxpYyByZXNpemVkKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmJvdW5kVG9GbG9vcikge1xyXG4gICAgICAgICAgICB0aGlzLnBvc2l0aW9uLnkgPSB0aGlzLl9ib3VuZFRvRmxvb3JZKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZVNpemUoKTtcclxuICAgICAgICB0aGlzLnJlZHJhd1dhbGwoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKiogKi9cclxuICAgIHB1YmxpYyBwbGFjZU9uRWRnZShlZGdlOiBIYWxmRWRnZSkge1xyXG4gICAgICAgIGlmICghZWRnZSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX29uRnJvbnRTaWRlID0gZWRnZS53YWxsLmZyb250RWRnZSA9PT0gZWRnZTtcclxuICAgICAgICB0aGlzLl9jaGFuZ2VXYWxsRWRnZShlZGdlKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZVNpemUoKTtcclxuXHJcbiAgICAgICAgLy8gcG9zaXRpb24gbm90IHNldFxyXG4gICAgICAgIGNvbnN0IGNlbnRlciA9IGVkZ2UuaW50ZXJpb3JDZW50ZXIoKTtcclxuICAgICAgICBjb25zdCBuZXdQb3MgPSB0aGlzLnBvc2l0aW9uU2V0ID9cclxuICAgICAgICAgICAgKGVkZ2Uud2FsbC5hbW91bnRXYWxsTW92ZWQgPyB0aGlzLnBvc2l0aW9uLmFkZChuZXcgVmVjdG9yMyhlZGdlLndhbGwuYW1vdW50V2FsbE1vdmVkLngsIDAsIDApKSA6IHRoaXMucG9zaXRpb24uY2xvbmUoKSkgOlxyXG4gICAgICAgICAgICBuZXcgVEhSRUUuVmVjdG9yMyhjZW50ZXIueCwgZWRnZS53YWxsLmhlaWdodCAvIDIuMCwgY2VudGVyLnkpO1xyXG4gICAgICAgIHRoaXMuX2JvdW5kTW92ZShuZXdQb3MpO1xyXG4gICAgICAgIHRoaXMucG9zaXRpb24uY29weShuZXdQb3MpO1xyXG4gICAgICAgIHRoaXMucmVkcmF3V2FsbCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyByZXBvc2l0aW9uKCk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IG5ld1BvczogVmVjdG9yMyA9IHRoaXMucG9zaXRpb24uY2xvbmUoKTtcclxuICAgICAgICB0aGlzLl9ib3VuZE1vdmUobmV3UG9zKTtcclxuICAgICAgICB0aGlzLnBvc2l0aW9uLmNvcHkobmV3UG9zKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0Rmxvb3JZKCk6IG51bWJlciB7XHJcbiAgICAgICAgaWYgKHRoaXMuaGFsZlNpemUgJiYgdGhpcy5jdXJyZW50V2FsbEVkZ2UpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21vdmVUb1lQb3NpdGlvbih0aGlzLmhhbGZTaXplLnkgKyB0aGlzLmVsZXZhdGlvbik7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucG9zaXRpb24ueTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGlzVmFsaWRQb3NpdGlvbihwb3NpdGlvbjogVEhSRUUuVmVjdG9yMywgcm90YXRpb24/OiBUSFJFRS5FdWxlciwgb3B0aW9ucz86IGFueSk6IENvbGxpc2lvbkluZm8ge1xyXG4gICAgICAgIHJldHVybiB7dmFsaWQ6ICEhdGhpcy5jdXJyZW50V2FsbEVkZ2V9O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiAqL1xyXG4gICAgcHVibGljIG1vdmVUb1Bvc2l0aW9uKHZlYzM6IFRIUkVFLlZlY3RvcjMsIGludGVyc2VjdGlvbj86IFRIUkVFLkludGVyc2VjdGlvbikge1xyXG4gICAgICAgIGlmIChpbnRlcnNlY3Rpb24gJiYgdGhpcy5jdXJyZW50V2FsbEVkZ2UpIHtcclxuICAgICAgICAgICAgaWYgKGludGVyc2VjdGlvbi5vYmplY3QudXNlckRhdGEuZWRnZSAmJiBpbnRlcnNlY3Rpb24ub2JqZWN0LnVzZXJEYXRhLmVkZ2Uud2FsbCAhPT0gdGhpcy5jdXJyZW50V2FsbEVkZ2Uud2FsbCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fY2hhbmdlV2FsbEVkZ2UoaW50ZXJzZWN0aW9uLm9iamVjdC51c2VyRGF0YS5lZGdlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLl9ib3VuZE1vdmUodmVjMyk7XHJcbiAgICAgICAgICAgIHRoaXMucG9zaXRpb24uY29weSh2ZWMzKTtcclxuICAgICAgICAgICAgdGhpcy5yZWRyYXdXYWxsKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKiAqL1xyXG4gICAgcHVibGljIG1vdmVUbzJkUG9zaXRpb24oeDogbnVtYmVyLCB5OiBudW1iZXIsIGVkZ2U6IEhhbGZFZGdlKSB7XHJcbiAgICAgICAgY29uc3QgdmVjMyA9IG5ldyBWZWN0b3IzKHgsIHRoaXMucG9zaXRpb24ueSwgeSk7XHJcbiAgICAgICAgdGhpcy5fY2hhbmdlV2FsbEVkZ2UoZWRnZSk7XHJcbiAgICAgICAgdGhpcy5fYm91bmRNb3ZlKHZlYzMpO1xyXG4gICAgICAgIHRoaXMucG9zaXRpb24uY29weSh2ZWMzKTtcclxuICAgICAgICB0aGlzLnJlZHJhd1dhbGwoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKiogKi9cclxuICAgIHB1YmxpYyBnZXRXYWxsT2Zmc2V0KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl93YWxsT2Zmc2V0U2NhbGFyO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRTdGFydFgoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucG9zaXRpb24ueCAtIHRoaXMuZ2V0U2l6ZVgoKSAvIDIgKiBNYXRoLmNvcyh0aGlzLnJvdGF0aW9uLnkpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRTdGFydFkoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucG9zaXRpb24ueiArIHRoaXMuZ2V0U2l6ZVgoKSAvIDIgKiBNYXRoLnNpbih0aGlzLnJvdGF0aW9uLnkpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRFbmRYKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnBvc2l0aW9uLnggKyB0aGlzLmdldFNpemVYKCkgLyAyICogTWF0aC5jb3ModGhpcy5yb3RhdGlvbi55KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0RW5kWSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5wb3NpdGlvbi56IC0gdGhpcy5nZXRTaXplWCgpIC8gMiAqIE1hdGguc2luKHRoaXMucm90YXRpb24ueSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgQHJldHVybnMgeCBheGlzIHNpemUgb2YgaXRlbSdzIGJvdW5kaW5nIGJveFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0U2l6ZVgoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NpemVYO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgIEByZXR1cm5zIHkgYXhpcyBzaXplIG9mIGl0ZW0ncyBib3VuZGluZyBib3hcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldFNpemVZKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9zaXplWTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaGVpZ2h0VXBkYXRlZChhbW91bnQ/OiBudW1iZXIpOiB2b2lkIHtcclxuICAgICAgICBpZiAoIWlzTmlsbChhbW91bnQpKSB7XHJcbiAgICAgICAgICAgIHRoaXMucG9zaXRpb24ueSA9IHRoaXMuX21vdmVUb1lQb3NpdGlvbih0aGlzLnBvc2l0aW9uLnkgKyBhbW91bnQpO1xyXG4gICAgICAgICAgICB0aGlzLnJlZHJhd1dhbGwoKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBzdXBlci5oZWlnaHRVcGRhdGVkKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB1cGRhdGVHZW9tZXRyeSh3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlcikge1xyXG4gICAgICAgIGNvbnN0IGdlb21ldHJ5ID0gR2VvbWV0cnkud2FsbEJveCh3aWR0aCwgaGVpZ2h0LCB0aGlzLmdldEl0ZW1UaGlja25lc3MoKSk7XHJcbiAgICAgICAgKHRoaXMub2JqZWN0IGFzIE1lc2gpLmdlb21ldHJ5LmRpc3Bvc2UoKTtcclxuICAgICAgICBjb25zdCByb3RhdGlvbiA9IHRoaXMucm90YXRpb24ueTtcclxuICAgICAgICB0aGlzLnJvdGF0aW9uLnkgPSAwO1xyXG4gICAgICAgIC8vIHRoaXMuaW5pdGlhbGl6ZUdlb21ldHJ5KGdlb21ldHJ5KTtcclxuICAgICAgICB0aGlzLnJvdGF0aW9uLnkgPSByb3RhdGlvbjtcclxuICAgICAgICB0aGlzLnJlc2l6ZWQoKTtcclxuICAgICAgICB0aGlzLnJlZHJhd1dhbGwoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYXN5bmMgc2V0VGV4dHVyZSh0ZXh0dXJlOiBUZXh0dXJlKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICAgICAgdGhpcy50ZXh0dXJlID0gdGV4dHVyZSAmJiBPYmplY3QuYXNzaWduKHt9LCB0ZXh0dXJlKTtcclxuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5jcmVhdGVNYXRlcmlhbCh0aGlzLmN1cnJlbnRXYWxsRWRnZSA/IHRoaXMuY3VycmVudFdhbGxFZGdlLndhbGwuc2lkZSA6IHVuZGVmaW5lZCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG9uV2FsbE1vdmVkKHdhbGw6IFdhbGwpIHtcclxuICAgICAgICBpZiAod2FsbC5mcm9udEVkZ2UpIHtcclxuICAgICAgICAgICAgdGhpcy5wbGFjZU9uRWRnZSh3YWxsLmZyb250RWRnZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh3YWxsLmJhY2tFZGdlKSB7XHJcbiAgICAgICAgICAgIHRoaXMucGxhY2VPbkVkZ2Uod2FsbC5iYWNrRWRnZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB1cGRhdGVNYXRlcmlhbFZpc2liaWxpdHkoc2lkZTogbnVtYmVyID0gVEhSRUUuRG91YmxlU2lkZSkge1xyXG4gICAgICAgIGlmICghdGhpcy50ZXh0dXJlKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFdhbGxFZGdlKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgaXNTYW1lID0gdGhpcy5faXNXYWxsU2FtZSgpO1xyXG4gICAgICAgIGlmICghaXNTYW1lKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlTWF0ZXJpYWwoc2lkZSwgaXNTYW1lKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCB0ZXh0dXJlTWF0ZXJpYWxGcm9udCA9ICh0aGlzLm9iamVjdCBhcyBhbnkpLm1hdGVyaWFsWzRdO1xyXG4gICAgICAgIGNvbnN0IHRleHR1cmVNYXRlcmlhbEJhY2sgPSAodGhpcy5vYmplY3QgYXMgYW55KS5tYXRlcmlhbFs1XTtcclxuICAgICAgICBzd2l0Y2ggKHNpZGUpIHtcclxuICAgICAgICAgICAgY2FzZSBUSFJFRS5Eb3VibGVTaWRlOlxyXG4gICAgICAgICAgICAgICAgdGV4dHVyZU1hdGVyaWFsRnJvbnQudmlzaWJsZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB0ZXh0dXJlTWF0ZXJpYWxCYWNrLnZpc2libGUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgVEhSRUUuRnJvbnRTaWRlOlxyXG4gICAgICAgICAgICAgICAgdGV4dHVyZU1hdGVyaWFsRnJvbnQudmlzaWJsZSA9IHRoaXMuZnJvbnRWaXNpYmxlO1xyXG4gICAgICAgICAgICAgICAgdGV4dHVyZU1hdGVyaWFsQmFjay52aXNpYmxlID0gIXRoaXMuZnJvbnRWaXNpYmxlO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgVEhSRUUuQmFja1NpZGU6XHJcbiAgICAgICAgICAgICAgICB0ZXh0dXJlTWF0ZXJpYWxGcm9udC52aXNpYmxlID0gIXRoaXMuZnJvbnRWaXNpYmxlO1xyXG4gICAgICAgICAgICAgICAgdGV4dHVyZU1hdGVyaWFsQmFjay52aXNpYmxlID0gdGhpcy5mcm9udFZpc2libGU7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFzeW5jIGNyZWF0ZVRleHR1cmVNYXRlcmlhbChvcHRpb25zPyk6IFByb21pc2U8VEhSRUUuTWVzaFBob25nTWF0ZXJpYWw+IHtcclxuICAgICAgICBjb25zdCB7XHJcbiAgICAgICAgICAgIHNpZGUgPSBUSFJFRS5Eb3VibGVTaWRlLFxyXG4gICAgICAgICAgICBmbGlwID0gZmFsc2VcclxuICAgICAgICB9ID0gb3B0aW9ucyB8fCB7fTtcclxuICAgICAgICBjb25zdCB0ZXh0dXJlID0gdGhpcy5nZXRUZXh0dXJlKCk7XHJcblxyXG4gICAgICAgIGNvbnN0IG1hdGVyaWFsID0gbmV3IFRIUkVFLk1lc2hQaG9uZ01hdGVyaWFsKHtzaWRlfSk7XHJcbiAgICAgICAgbWF0ZXJpYWwudHJhbnNwYXJlbnQgPSB0cnVlO1xyXG5cclxuICAgICAgICBpZiAodGV4dHVyZSkge1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLmFkZE1hdGVyaWFsTWFwKG1hdGVyaWFsLCB0ZXh0dXJlLCBmbGlwKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBtYXRlcmlhbDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0VGV4dHVyZSgpOiBUZXh0dXJlIHtcclxuICAgICAgICByZXR1cm4gdGhpcy50ZXh0dXJlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzZXRTY2FsZVhZWih4OiBudW1iZXIsIHk6IG51bWJlciwgejogbnVtYmVyLCByZWNhbGN1bGF0ZUhhbGZTaXplOiBib29sZWFuID0gdHJ1ZSk6IHZvaWQge1xyXG4gICAgICAgIHN1cGVyLnNldFNjYWxlWFlaKHgsIHksIHosIHJlY2FsY3VsYXRlSGFsZlNpemUpO1xyXG4gICAgICAgIHRoaXMucmVwb3NpdGlvbigpO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBhc3luYyBjcmVhdGVNYXRlcmlhbChzaWRlOiBudW1iZXIgPSBUSFJFRS5Eb3VibGVTaWRlLCBpc1NhbWUgPSB0cnVlKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICAgICAgbGV0IHRleHR1cmVNYXRlcmlhbEZyb250O1xyXG4gICAgICAgIGxldCB0ZXh0dXJlTWF0ZXJpYWxCYWNrO1xyXG4gICAgICAgIHN3aXRjaCAoc2lkZSkge1xyXG4gICAgICAgICAgICBjYXNlIFRIUkVFLkRvdWJsZVNpZGU6XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9mbGlwcGVkID0gIWlzU2FtZTtcclxuICAgICAgICAgICAgICAgIHRleHR1cmVNYXRlcmlhbEZyb250ID0gYXdhaXQgdGhpcy5jcmVhdGVUZXh0dXJlTWF0ZXJpYWwoe3NpZGU6IFRIUkVFLkZyb250U2lkZSwgZmxpcDogdGhpcy5fZmxpcHBlZH0pO1xyXG4gICAgICAgICAgICAgICAgdGV4dHVyZU1hdGVyaWFsQmFjayA9IGF3YWl0IHRoaXMuY3JlYXRlVGV4dHVyZU1hdGVyaWFsKHtzaWRlOiBUSFJFRS5Gcm9udFNpZGUsIGZsaXA6ICF0aGlzLl9mbGlwcGVkfSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBUSFJFRS5Gcm9udFNpZGU6XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9mbGlwcGVkID0gIWlzU2FtZTtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmZyb250VmlzaWJsZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRleHR1cmVNYXRlcmlhbEZyb250ID0gYXdhaXQgdGhpcy5jcmVhdGVUZXh0dXJlTWF0ZXJpYWwoe3NpZGU6IFRIUkVFLkZyb250U2lkZSwgZmxpcDogdGhpcy5fZmxpcHBlZH0pO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlTWF0ZXJpYWxCYWNrID0gYXdhaXQgdGhpcy5jcmVhdGVUZXh0dXJlTWF0ZXJpYWwoe3NpZGU6IFRIUkVFLkJhY2tTaWRlLCBmbGlwOiAhdGhpcy5fZmxpcHBlZH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgVEhSRUUuQmFja1NpZGU6IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2ZsaXBwZWQgPSAhaXNTYW1lO1xyXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmZyb250VmlzaWJsZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRleHR1cmVNYXRlcmlhbEZyb250ID0gYXdhaXQgdGhpcy5jcmVhdGVUZXh0dXJlTWF0ZXJpYWwoe3NpZGU6IFRIUkVFLkZyb250U2lkZSwgZmxpcDogdGhpcy5fZmxpcHBlZH0pO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlTWF0ZXJpYWxCYWNrID0gYXdhaXQgdGhpcy5jcmVhdGVUZXh0dXJlTWF0ZXJpYWwoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzaWRlOiBUSFJFRS5CYWNrU2lkZSwgZmxpcDogIXRoaXMuX2ZsaXBwZWRcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgICgodGhpcy5vYmplY3QgYXMgYW55KS5tYXRlcmlhbCBhcyBhbnkpID0gdGhpcy5nZXRNYXRlcmlhbHModGV4dHVyZU1hdGVyaWFsRnJvbnQsIHRleHR1cmVNYXRlcmlhbEJhY2spO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBzZXRZUG9zaXRpb25CYXNlZE9uRWxldmF0aW9uKCkge1xyXG4gICAgICAgIHRoaXMucG9zaXRpb24ueSA9IHRoaXMuZWxldmF0aW9uICsgdGhpcy5oYWxmU2l6ZS55O1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBhc3luYyBhZGRNYXRlcmlhbE1hcChtYXRlcmlhbDogVEhSRUUuTWVzaFBob25nTWF0ZXJpYWwsIHRleHR1cmU6IFRleHR1cmUsIGZsaXA6IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgICAgICBjb25zdCBkaW1lbnNpb25zID0gdGhpcy5nZXRNYXRlcmlhbE1hcERpbWVuc2lvbnMoKTtcclxuICAgICAgICB0ZXh0dXJlLmRpbWVuc2lvbnMgPSBkaW1lbnNpb25zLm11bHRpcGx5U2NhbGFyKDEwMCk7XHJcbiAgICAgICAgc3dpdGNoICh0ZXh0dXJlLnR5cGUpIHtcclxuICAgICAgICAgICAgY2FzZSBUZXh0dXJlVHlwZS5JbWFnZTpcclxuICAgICAgICAgICAgICAgIGlmIChmbGlwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWwubWFwID0gYXdhaXQgTWF0ZXJpYWxVdGlscy5Gcm9tRmxpcHBlZEltYWdlKHRleHR1cmUsIGRpbWVuc2lvbnMpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBtYXRlcmlhbC5tYXAgPSBhd2FpdCBNYXRlcmlhbFV0aWxzLkZyb21JbWFnZSh0ZXh0dXJlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIFRleHR1cmVUeXBlLkN1c3RvbVBhdHRlcm46XHJcbiAgICAgICAgICAgICAgICBtYXRlcmlhbC5tYXAgPSBhd2FpdCBNYXRlcmlhbFV0aWxzLkN1c3RvbVRpbGVNYXBUZXh0dXJlKHRleHR1cmUsIGRpbWVuc2lvbnMpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgVGV4dHVyZVR5cGUuQmFzaWM6XHJcbiAgICAgICAgICAgICAgICBtYXRlcmlhbC5tYXAgPSBhd2FpdCBNYXRlcmlhbFV0aWxzLkZyb21VcmwodGV4dHVyZS51cmwsIHRleHR1cmUuc3RyZXRjaCwgdGV4dHVyZS50aWxlU2l6ZSwgbnVsbCwgbnVsbCwgdGV4dHVyZS5kaW1lbnNpb25zLCB0ZXh0dXJlLnRpbGVSb3RhdGlvbik7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gdGhpcy5zY2VuZS5uZWVkc1VwZGF0ZSA9IHRydWU7XHJcbiAgICAgICAgLy8gdGhpcy5zY2VuZS50ZXh0dXJlTG9hZGVkQ2FsbGJhY2tzLmZpcmUoKTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgZ2V0TWF0ZXJpYWxNYXBEaW1lbnNpb25zKCk6IFRIUkVFLlZlY3RvcjIge1xyXG4gICAgICAgIHJldHVybiBuZXcgVEhSRUUuVmVjdG9yMihcclxuICAgICAgICAgICAgdGhpcy5nZXRXaWR0aCgpLFxyXG4gICAgICAgICAgICB0aGlzLmdldEhlaWdodCgpXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgZ2V0TWF0ZXJpYWxzKHRleHR1cmVNYXRlcmlhbEZyb250OiBUSFJFRS5NYXRlcmlhbCwgdGV4dHVyZU1hdGVyaWFsQmFjazogVEhSRUUuTWF0ZXJpYWwpOiBUSFJFRS5NYXRlcmlhbFtdIHtcclxuICAgICAgICByZXR1cm4gW1xyXG4gICAgICAgICAgICBNYXRlcmlhbFV0aWxzLmRlZmF1bHRXaW5kb3cuY2xvbmUoKSwgLy8gTGVmdCBzaWRlXHJcbiAgICAgICAgICAgIE1hdGVyaWFsVXRpbHMuZGVmYXVsdFdpbmRvdy5jbG9uZSgpLCAvLyBSaWdodCBzaWRlXHJcbiAgICAgICAgICAgIE1hdGVyaWFsVXRpbHMuZGVmYXVsdFdpbmRvdy5jbG9uZSgpLCAvLyBUb3Agc2lkZVxyXG4gICAgICAgICAgICBNYXRlcmlhbFV0aWxzLmRlZmF1bHRXaW5kb3cuY2xvbmUoKSwgLy8gQm90dG9tIHNpZGVcclxuICAgICAgICAgICAgdGV4dHVyZU1hdGVyaWFsRnJvbnQgfHwgTWF0ZXJpYWxVdGlscy5kZWZhdWx0V2luZG93LmNsb25lKCksIC8vIEZyb250IHNpZGVcclxuICAgICAgICAgICAgdGV4dHVyZU1hdGVyaWFsQmFjayB8fCBNYXRlcmlhbFV0aWxzLmRlZmF1bHRXaW5kb3cuY2xvbmUoKSAgIC8vIEJhY2sgc2lkZVxyXG4gICAgICAgIF07XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIGdldEl0ZW1UaGlja25lc3MoKTogbnVtYmVyIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50V2FsbC50aGlja25lc3MgLSAwLjAxO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiAqL1xyXG4gICAgcHJvdGVjdGVkIHJlZHJhd1dhbGwoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFdhbGxFZGdlICYmIHRoaXMuY3VycmVudFdhbGxFZGdlLndhbGwpIHtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50V2FsbEVkZ2Uud2FsbC5maXJlUmVkcmF3KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIHRoaXMudXBkYXRlRWRnZVZpc2liaWxpdHkodHJ1ZSwgdGhpcy5fb25Gcm9udFNpZGUpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiAqL1xyXG4gICAgcHJpdmF0ZSBfY2hhbmdlV2FsbEVkZ2Uod2FsbEVkZ2U6IEhhbGZFZGdlKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFdhbGxFZGdlID09PSB3YWxsRWRnZSkge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuY3VycmVudFdhbGwpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudFdhbGwgPSB3YWxsRWRnZS53YWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFpc05pbGwodGhpcy5jdXJyZW50V2FsbEVkZ2UpKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmFkZFRvV2FsbCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50V2FsbEVkZ2Uud2FsbC5yZW1vdmVJdGVtKHRoaXMpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZWRyYXdXYWxsKCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRXYWxsRWRnZS53YWxsLnJlbW92ZU9uSXRlbSh0aGlzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXdhbGxFZGdlKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIGZpbmQgYW5nbGUgYmV0d2VlbiB3YWxsIG5vcm1hbHNcclxuICAgICAgICBjb25zdCBub3JtYWwyID0gbmV3IFRIUkVFLlZlY3RvcjIoKTtcclxuICAgICAgICBjb25zdCBub3JtYWwzID0gVXRpbHMuR2V0RmFjZU5vcm1hbEZyb21CdWZmZXJHZW9tZXRyeSh3YWxsRWRnZS5wbGFuZS5nZW9tZXRyeSwgMCwgMCk7XHJcbiAgICAgICAgbm9ybWFsMi54ID0gbm9ybWFsMy54O1xyXG4gICAgICAgIG5vcm1hbDIueSA9IG5vcm1hbDMuejtcclxuXHJcbiAgICAgICAgY29uc3QgYW5nbGUgPSBVdGlscy5hbmdsZShcclxuICAgICAgICAgICAgdGhpcy5fcmVmVmVjLngsIHRoaXMuX3JlZlZlYy55LFxyXG4gICAgICAgICAgICBub3JtYWwyLngsIG5vcm1hbDIueSk7XHJcbiAgICAgICAgdGhpcy5yb3RhdGlvbi55ID0gKHRoaXMuZGVmYXVsdDE4MCA/IE1hdGguUEkgOiAwKSArIGFuZ2xlO1xyXG4gICAgICAgIHRoaXMudHJhdmVyc2UoYyA9PiBjLm1hdHJpeFdvcmxkTmVlZHNVcGRhdGUgPSB0cnVlKTtcclxuXHJcbiAgICAgICAgLy8gdXBkYXRlIGN1cnJlbnRXYWxsXHJcbiAgICAgICAgdGhpcy5jdXJyZW50V2FsbCA9IHdhbGxFZGdlLndhbGw7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50V2FsbEVkZ2UgPSB3YWxsRWRnZTtcclxuICAgICAgICBpZiAodGhpcy5hZGRUb1dhbGwpIHtcclxuICAgICAgICAgICAgd2FsbEVkZ2Uud2FsbC5hZGRJdGVtKHRoaXMpO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5tZXRhZGF0YS50ZXh0dXJlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZU1hdGVyaWFsVmlzaWJpbGl0eSh3YWxsRWRnZS53YWxsLnNpZGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMucmVkcmF3V2FsbCgpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHdhbGxFZGdlLndhbGwuYWRkT25JdGVtKHRoaXMpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF9ib3VuZFRvRmxvb3JZKCkge1xyXG4gICAgICAgIHJldHVybiAwLjUgKiB0aGlzLmdldEhlaWdodCgpICogdGhpcy5zY2FsZS55ICsgMC4wMTtcclxuICAgIH1cclxuXHJcbiAgICAvKiogdGFrZXMgdGhlIG1vdmUgdmVjMywgYW5kIG1ha2VzIHN1cmUgb2JqZWN0IHN0YXlzIGJvdW5kZWQgb24gcGxhbmUgKi9cclxuICAgIHByaXZhdGUgX2JvdW5kTW92ZSh2ZWMzKSB7XHJcbiAgICAgICAgY29uc3QgZWRnZSA9IHRoaXMuY3VycmVudFdhbGxFZGdlO1xyXG4gICAgICAgIGlmICghZWRnZSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZlYzMuYXBwbHlNYXRyaXg0KGVkZ2UuaW50ZXJpb3JUcmFuc2Zvcm0pO1xyXG4gICAgICAgIGVkZ2Uud2FsbC5pdGVtc0NoYW5nZWQgPSB0cnVlO1xyXG5cclxuICAgICAgICBpZiAodmVjMy54IDwgdGhpcy5fc2l6ZVggLyAyLjAgKyB0aGlzLl9wb3NpdGlvbllUb2xlcmFuY2UpIHtcclxuICAgICAgICAgICAgdmVjMy54ID0gdGhpcy5fc2l6ZVggLyAyLjAgKyB0aGlzLl9wb3NpdGlvbllUb2xlcmFuY2U7XHJcbiAgICAgICAgfSBlbHNlIGlmICh2ZWMzLnggPiAoZWRnZS5pbnRlcmlvckRpc3RhbmNlKCkgLSB0aGlzLl9zaXplWCAvIDIuMCAtIHRoaXMuX3Bvc2l0aW9uWVRvbGVyYW5jZSkpIHtcclxuICAgICAgICAgICAgdmVjMy54ID0gZWRnZS5pbnRlcmlvckRpc3RhbmNlKCkgLSB0aGlzLl9zaXplWCAvIDIuMCAtIHRoaXMuX3Bvc2l0aW9uWVRvbGVyYW5jZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuYm91bmRUb0Zsb29yKSB7XHJcbiAgICAgICAgICAgIHZlYzMueSA9IHRoaXMuX2JvdW5kVG9GbG9vclkoKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgaWYgKHRoaXMuZWxldmF0aW9uRml4ZWQgfHwgIXRoaXMuZWxldmF0aW9uQWRqdXN0YWJsZSkge1xyXG4gICAgICAgICAgICAvLyBpZiBlbGV2YXRpb24gaXMgaGlnaGVyIHRoYW4gdGhlIHdhbGwsIHVzZSBtYXhZXHJcbiAgICAgICAgICAgIHZlYzMueSA9IE1hdGgubWluKHRoaXMuX2dldE1heFkoZWRnZSksIHRoaXMuaGFsZlNpemUueSArIHRoaXMuZWxldmF0aW9uKTtcclxuICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5lbGV2YXRpb25BZGp1c3RhYmxlICYmIHRoaXMub25XYWxsKSB7XHJcbiAgICAgICAgICAgIC8vIGlmIHRoZSBpdGVtIGlzIGFkanVzdGFibGUgJiBpcyBwbGFjZWQgb24gdGhlIHdhbGxcclxuICAgICAgICAgICAgdmVjMy55ID0gTWF0aC5taW4odGhpcy5fZ2V0TWF4WShlZGdlKSwgdGhpcy5oYWxmU2l6ZS55ICsgdGhpcy5lbGV2YXRpb24pO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29uc3QgbWF4WTogbnVtYmVyID0gdGhpcy5fZ2V0TWF4WShlZGdlKTtcclxuICAgICAgICAgICAgY29uc3QgbWluWTogbnVtYmVyID0gdGhpcy5fZ2V0TWluVCgpO1xyXG4gICAgICAgICAgICBpZiAodmVjMy55IDwgbWluWSkge1xyXG4gICAgICAgICAgICAgIHZlYzMueSA9IG1pblk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodmVjMy55ID4gbWF4WSkge1xyXG4gICAgICAgICAgICAgIHZlYzMueSA9IG1heFk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5lbGV2YXRpb24gPSB2ZWMzLnkgLSB0aGlzLmhhbGZTaXplLnk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2ZWMzLnogPSB0aGlzLmdldFdhbGxPZmZzZXQoKTtcclxuICAgICAgICB2ZWMzLmFwcGx5TWF0cml4NChlZGdlLmludkludGVyaW9yVHJhbnNmb3JtKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF9pc1dhbGxTYW1lKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGxldCBpc1NhbWUgPSBmYWxzZTtcclxuICAgICAgICBpZiAodGhpcy5jdXJyZW50V2FsbEVkZ2UpIHtcclxuICAgICAgICAgICAgY29uc3Qgb25Gcm9udFNpZGUgPSB0aGlzLmN1cnJlbnRXYWxsRWRnZSA9PT0gdGhpcy5jdXJyZW50V2FsbEVkZ2Uud2FsbC5mcm9udEVkZ2U7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9vbkZyb250U2lkZSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9vbkZyb250U2lkZSA9IG9uRnJvbnRTaWRlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlzU2FtZSA9IG9uRnJvbnRTaWRlID09PSB0aGlzLl9vbkZyb250U2lkZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGlzU2FtZTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF9nZXRNYXhZKGVkZ2U6IEhhbGZFZGdlKTogbnVtYmVyIHtcclxuICAgICAgICByZXR1cm4gZWRnZS5oZWlnaHQgLSB0aGlzLl9zaXplWSAvIDIuMCAtIHRoaXMuX3Bvc2l0aW9uWVRvbGVyYW5jZTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF9nZXRNaW5UKCk6IG51bWJlciB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NpemVZIC8gMi4wICsgdGhpcy5fcG9zaXRpb25ZVG9sZXJhbmNlO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX21vdmVUb1lQb3NpdGlvbihwb3NpdGlvbjogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgICAgICBjb25zdCBtYXhZOiBudW1iZXIgPSB0aGlzLl9nZXRNYXhZKHRoaXMuY3VycmVudFdhbGxFZGdlKTtcclxuICAgICAgICBjb25zdCBtaW5ZOiBudW1iZXIgPSB0aGlzLl9nZXRNaW5UKCk7XHJcbiAgICAgICAgaWYgKHBvc2l0aW9uID4gbWF4WSkge1xyXG4gICAgICAgICAgICB0aGlzLmVsZXZhdGlvbiA9IG1heFkgLSB0aGlzLmhhbGZTaXplLnk7XHJcbiAgICAgICAgICAgIHJldHVybiBtYXhZO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocG9zaXRpb24gPCBtaW5ZKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZWxldmF0aW9uID0gbWluWSAtIHRoaXMuaGFsZlNpemUueTtcclxuICAgICAgICAgICAgcmV0dXJuIG1pblk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBwb3NpdGlvbjtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIEluV2FsbEl0ZW0gZXh0ZW5kcyBXYWxsSXRlbSB7XHJcblxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBfZnJhbWVXaWR0aDogbnVtYmVyID0gMC4wNztcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgX2ZyYW1lRGVwdGg6IG51bWJlciA9IDAuMTtcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgX2RlZmF1bHRGcmFtZUNvbG9yOiBudW1iZXIgPSA5MDcwMTQ2OyAvLyBSQUwtMTAxMVxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBfZGVmYXVsdERvb3JDb2xvcjogbnVtYmVyID0gMTY3NzcyMTU7IC8vIFJBTC05MDEwXHJcblxyXG4gICAgcHVibGljIG9wZW5pbmcgPSB7XHJcbiAgICAgICAgc2hvdzogZmFsc2UsXHJcbiAgICAgICAgZG91YmxlOiBmYWxzZSxcclxuICAgICAgICBpbnZlcnREaXJlY3Rpb246IGZhbHNlLFxyXG4gICAgICAgIGludmVydFNpZGU6IHRydWVcclxuICAgIH07XHJcblxyXG4gICAgcHVibGljIGZyYW1lQ29sb3I6IG51bWJlciA9IHRoaXMuX2RlZmF1bHRGcmFtZUNvbG9yO1xyXG4gICAgcHVibGljIGRvb3JDb2xvcjogbnVtYmVyID0gdGhpcy5fZGVmYXVsdERvb3JDb2xvcjtcclxuICAgIHB1YmxpYyB3aW5kb3dDb2xvcjogVEhSRUUuQ29sb3IgPSBuZXcgVEhSRUUuQ29sb3IoMC4wNDMxLCAwLjA1ODgsIDAuMDkwMik7XHJcbiAgICBwdWJsaWMgaXNHbGFzczogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIHByb3RlY3RlZCB0b3BGcmFtZTogVEhSRUUuTWVzaDtcclxuICAgIHByb3RlY3RlZCBsZWZ0RnJhbWU6IFRIUkVFLk1lc2g7XHJcbiAgICBwcm90ZWN0ZWQgcmlnaHRGcmFtZTogVEhSRUUuTWVzaDtcclxuICAgIHByb3RlY3RlZCBib3R0b21GcmFtZTogVEhSRUUuTWVzaDtcclxuICAgIHByb3RlY3RlZCBjdXN0b21NZXNoOiBUSFJFRS5NZXNoO1xyXG4gICAgcHJvdGVjdGVkIGZyYW1lTWF0ZXJpYWw6IFRIUkVFLk1lc2hQaG9uZ01hdGVyaWFsO1xyXG4gICAgcHJvdGVjdGVkIGRvb3JNYXRlcmlhbEZyb250OiBUSFJFRS5NZXNoUGhvbmdNYXRlcmlhbDtcclxuXHJcbiAgICBwcm90ZWN0ZWQgd2luZG93TWF0ZXJpYWw6IFRIUkVFLk1lc2hQaG9uZ01hdGVyaWFsO1xyXG4gICAgcHJpdmF0ZSBfaXNXaW5kb3c6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHByaXZhdGUgX2Rvb3Jwb3N0OiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgZ2V0IGRvb3Jwb3N0KCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9kb29ycG9zdDtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBtZXRhZGF0YTogTWV0YWRhdGEsXHJcbiAgICAgICAgb2JqZWN0OiBPYmplY3QzRCB8IE1lc2gsXHJcbiAgICAgICAgdGV4dHVyZT86IFRleHR1cmVcclxuICAgICkge1xyXG4gICAgICAgIHN1cGVyKG1ldGFkYXRhLCBvYmplY3QsIHRleHR1cmUpO1xyXG4gICAgICAgIHRoaXMuX3NldERlZmF1bHQoKTtcclxuICAgICAgICB0aGlzLmZyYW1lVGl0bGUgPSAnRnJhbWUnO1xyXG4gICAgICAgIHRoaXMuY3VzdG9tTWVzaFRpdGxlID0gdGhpcy5faXNXaW5kb3cgPyAnV2luZG93JyA6ICdEb29yJztcclxuICAgICAgICB0aGlzLmNhbkNoYW5nZUN1c3RvbU1lc2hDb2xvciA9ICF0aGlzLl9pc1dpbmRvdztcclxuXHJcbiAgICAgICAgdGhpcy5yZWNlaXZlU2hhZG93ID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmFkZFRvV2FsbCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5fZ2xhc3NNYXRlcmlhbENoZWNrKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGRpc3Bvc2UoKTogdm9pZCB7XHJcbiAgICAgICAgc3VwZXIuZGlzcG9zZSgpO1xyXG4gICAgICAgIE9iamVjdFV0aWxzLkRpc3Bvc2VPYmplY3QodGhpcy50b3BGcmFtZSk7XHJcbiAgICAgICAgT2JqZWN0VXRpbHMuRGlzcG9zZU9iamVjdCh0aGlzLmxlZnRGcmFtZSk7XHJcbiAgICAgICAgT2JqZWN0VXRpbHMuRGlzcG9zZU9iamVjdCh0aGlzLnJpZ2h0RnJhbWUpO1xyXG4gICAgICAgIE9iamVjdFV0aWxzLkRpc3Bvc2VPYmplY3QodGhpcy5ib3R0b21GcmFtZSk7XHJcbiAgICAgICAgT2JqZWN0VXRpbHMuRGlzcG9zZU9iamVjdCh0aGlzLmN1c3RvbU1lc2gpO1xyXG4gICAgICAgIE9iamVjdFV0aWxzLkRpc3Bvc2VNYXRlcmlhbCh0aGlzLmZyYW1lTWF0ZXJpYWwpO1xyXG4gICAgICAgIE9iamVjdFV0aWxzLkRpc3Bvc2VNYXRlcmlhbCh0aGlzLmRvb3JNYXRlcmlhbEZyb250KTtcclxuICAgICAgICBPYmplY3RVdGlscy5EaXNwb3NlTWF0ZXJpYWwodGhpcy53aW5kb3dNYXRlcmlhbCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHBsYWNlT25FZGdlKGVkZ2U6IEhhbGZFZGdlKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNDdXN0b20pIHtcclxuICAgICAgICAgICAgY29uc3QgY2hlY2tNYXRlcmlhbDogVEhSRUUuTWVzaFBob25nTWF0ZXJpYWwgPSB0aGlzLl9pc1dpbmRvdyA/IHRoaXMud2luZG93TWF0ZXJpYWwgOiB0aGlzLmRvb3JNYXRlcmlhbEZyb250O1xyXG4gICAgICAgICAgICBpZiAoIWNoZWNrTWF0ZXJpYWwpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2NyZWF0ZU1hdGVyaWFscyhUSFJFRS5Eb3VibGVTaWRlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLmNyZWF0ZUN1c3RvbU1lc2godGhpcy5nZXRXaWR0aCgpLCB0aGlzLmdldEhlaWdodCgpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgc3VwZXIucGxhY2VPbkVkZ2UoZWRnZSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqICovXHJcbiAgICBwdWJsaWMgZ2V0V2FsbE9mZnNldCgpIHtcclxuICAgICAgICByZXR1cm4gLXRoaXMuY3VycmVudFdhbGxFZGdlLm9mZnNldDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZGlzdGFuY2VGcm9tMmQoeDogbnVtYmVyLCB5OiBudW1iZXIpOiBudW1iZXIge1xyXG4gICAgICAgIHJldHVybiBVdGlscy5wb2ludERpc3RhbmNlRnJvbUxpbmUoeCwgeSxcclxuICAgICAgICAgICAgdGhpcy5nZXRTdGFydFgoKSwgdGhpcy5nZXRTdGFydFkoKSxcclxuICAgICAgICAgICAgdGhpcy5nZXRFbmRYKCksIHRoaXMuZ2V0RW5kWSgpKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgb25XYWxsVXBkYXRlZCh3YWxsOiBXYWxsKSB7XHJcbiAgICAgICAgaWYgKHRoaXMubWV0YWRhdGEudGV4dHVyZSkge1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZU1hdGVyaWFsVmlzaWJpbGl0eSh3YWxsLnNpZGUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgdXBkYXRlRnJhbWVDb2xvcihjb2xvcjogbnVtYmVyKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5mcmFtZUNvbG9yID0gY29sb3I7XHJcbiAgICAgICAgdGhpcy5mcmFtZU1hdGVyaWFsLmNvbG9yLnNldEhleChjb2xvcik7XHJcbiAgICAgICAgdGhpcy5mcmFtZU1hdGVyaWFsLm5lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICAgICAgICAvLyB0aGlzLnNjZW5lLm5lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgdXBkYXRlRG9vckNvbG9yKGNvbG9yOiBudW1iZXIpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmRvb3JDb2xvciA9IGNvbG9yO1xyXG4gICAgICAgIHRoaXMuZG9vck1hdGVyaWFsRnJvbnQuY29sb3Iuc2V0SGV4KGNvbG9yKTtcclxuICAgICAgICB0aGlzLmRvb3JNYXRlcmlhbEZyb250LnRyYW5zcGFyZW50ID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5kb29yTWF0ZXJpYWxGcm9udC5vcGFjaXR5ID0gMTtcclxuICAgICAgICB0aGlzLmRvb3JNYXRlcmlhbEZyb250Lm1hcCA9IHVuZGVmaW5lZDtcclxuICAgICAgICB0aGlzLmRvb3JNYXRlcmlhbEZyb250Lm5lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICAgICAgICAvLyB0aGlzLnNjZW5lLm5lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgdXBkYXRlR2xhc3NNYXRlcmlhbCgpIHtcclxuICAgICAgICBpZiAoIXRoaXMuaXNHbGFzcykge1xyXG4gICAgICAgICAgICB0aGlzLmRvb3JNYXRlcmlhbEZyb250LmNvbG9yLnNldEhleCgweGRmZjBmMik7XHJcbiAgICAgICAgICAgIHRoaXMuZG9vck1hdGVyaWFsRnJvbnQudHJhbnNwYXJlbnQgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLmRvb3JNYXRlcmlhbEZyb250LmFscGhhVGVzdCA9IDA7XHJcbiAgICAgICAgICAgIHRoaXMuZG9vck1hdGVyaWFsRnJvbnQub3BhY2l0eSA9IDAuMjtcclxuICAgICAgICAgICAgdGhpcy5kb29yTWF0ZXJpYWxGcm9udC5tYXAgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgIHRoaXMuZG9vck1hdGVyaWFsRnJvbnQubmVlZHNVcGRhdGUgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLmRvb3JNYXRlcmlhbEZyb250LnNpZGUgPSBUSFJFRS5Gcm9udFNpZGU7XHJcbiAgICAgICAgICAgIHRoaXMuaXNHbGFzcyA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuY3VzdG9tTWVzaC5jYXN0U2hhZG93ID0gZmFsc2U7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5kb29yTWF0ZXJpYWxGcm9udC50cmFuc3BhcmVudCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLmRvb3JNYXRlcmlhbEZyb250Lm9wYWNpdHkgPSAxO1xyXG4gICAgICAgICAgICB0aGlzLmlzR2xhc3MgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5jdXN0b21NZXNoLmNhc3RTaGFkb3cgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgdXBkYXRlR2VvbWV0cnkod2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5pc0N1c3RvbSkge1xyXG4gICAgICAgICAgICB0aGlzLmNyZWF0ZUN1c3RvbU1lc2god2lkdGgsIGhlaWdodCk7XHJcbiAgICAgICAgICAgIC8vIHRoaXMuY2FsY3VsYXRlSGFsZlNpemUoKTtcclxuICAgICAgICAgICAgdGhpcy5yZWRyYXdXYWxsKCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgc3VwZXIudXBkYXRlR2VvbWV0cnkod2lkdGgsIGhlaWdodCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhZGp1c3RXYWxsQm94KGdlb21ldHJ5OiBCb3hHZW9tZXRyeSkge1xyXG4gICAgICAgIGdlb21ldHJ5LmdldEF0dHJpYnV0ZSgncG9zaXRpb24nKS5uZWVkc1VwZGF0ZSA9IHRydWU7XHJcbiAgICAgICAgZ2VvbWV0cnkuY29tcHV0ZUJvdW5kaW5nQm94KCk7XHJcbiAgICAgICAgZ2VvbWV0cnkuYXBwbHlNYXRyaXg0KG5ldyBNYXRyaXg0KCkubWFrZVRyYW5zbGF0aW9uKFxyXG4gICAgICAgICAgICAtMC41ICogKGdlb21ldHJ5LmJvdW5kaW5nQm94Lm1heC54ICsgZ2VvbWV0cnkuYm91bmRpbmdCb3gubWluLngpLFxyXG4gICAgICAgICAgICAtMC41ICogKGdlb21ldHJ5LmJvdW5kaW5nQm94Lm1heC55ICsgZ2VvbWV0cnkuYm91bmRpbmdCb3gubWluLnkpLFxyXG4gICAgICAgICAgICAtMC41ICogKGdlb21ldHJ5LmJvdW5kaW5nQm94Lm1heC56ICsgZ2VvbWV0cnkuYm91bmRpbmdCb3gubWluLnopXHJcbiAgICAgICAgKSk7XHJcbiAgICAgICAgZ2VvbWV0cnkuY29tcHV0ZUJvdW5kaW5nQm94KCk7XHJcbiAgICAgICAgKHRoaXMub2JqZWN0IGFzIE1lc2gpLmdlb21ldHJ5ID0gZ2VvbWV0cnk7XHJcbiAgICAgICAgdGhpcy5jYWxjdWxhdGVIYWxmU2l6ZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRWaXNpYmxlTWVzaGVzKCk6IFRIUkVFLk1lc2hbXSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNDdXN0b20gJiYgdGhpcy52aXNpYmxlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG1lc2hlczogVEhSRUUuTWVzaFtdID0gW1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sZWZ0RnJhbWUsXHJcbiAgICAgICAgICAgICAgICB0aGlzLnRvcEZyYW1lLFxyXG4gICAgICAgICAgICAgICAgdGhpcy5yaWdodEZyYW1lLFxyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXN0b21NZXNoXHJcbiAgICAgICAgICAgIF07XHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9pc1dpbmRvdyAvKnx8IHRoaXMuX2Rvb3Jwb3N0Ki8pIHtcclxuICAgICAgICAgICAgICAgIG1lc2hlcy5wdXNoKHRoaXMuYm90dG9tRnJhbWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBtZXNoZXM7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIHN1cGVyLmdldFZpc2libGVNZXNoZXMoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFzeW5jIGNyZWF0ZVRleHR1cmVNYXRlcmlhbChvcHRpb25zPyk6IFByb21pc2U8VEhSRUUuTWVzaFBob25nTWF0ZXJpYWw+IHtcclxuICAgICAgICBpZiAodGhpcy5pc0N1c3RvbSkge1xyXG4gICAgICAgICAgICBjb25zdCB7XHJcbiAgICAgICAgICAgICAgICBzaWRlID0gVEhSRUUuRG91YmxlU2lkZSxcclxuICAgICAgICAgICAgICAgIGZsaXAgPSBmYWxzZVxyXG4gICAgICAgICAgICB9ID0gb3B0aW9ucyB8fCB7fTtcclxuICAgICAgICAgICAgY29uc3QgY2hlY2tNYXRlcmlhbDogVEhSRUUuTWVzaFBob25nTWF0ZXJpYWwgPSB0aGlzLl9pc1dpbmRvdyA/IHRoaXMud2luZG93TWF0ZXJpYWwgOiB0aGlzLmRvb3JNYXRlcmlhbEZyb250O1xyXG4gICAgICAgICAgICBpZiAoIWNoZWNrTWF0ZXJpYWwpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2NyZWF0ZU1hdGVyaWFscyhzaWRlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCB0ZXh0dXJlID0gdGhpcy5nZXRUZXh0dXJlKCk7XHJcbiAgICAgICAgICAgIGlmICghdGV4dHVyZSkge1xyXG4gICAgICAgICAgICAgICAgLy8gcmVzZXQgdG8gZGVmYXVsdCB0ZXh0dXJlXHJcbiAgICAgICAgICAgICAgICB0aGlzLl9jcmVhdGVNYXRlcmlhbHMoc2lkZSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNyZWF0ZUN1c3RvbU1lc2godGhpcy5nZXRXaWR0aCgpLCB0aGlzLmdldEhlaWdodCgpKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9pc1dpbmRvdyA/IHRoaXMud2luZG93TWF0ZXJpYWwgOiB0aGlzLmRvb3JNYXRlcmlhbEZyb250O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IG1hdGVyaWFsOiBUSFJFRS5NZXNoUGhvbmdNYXRlcmlhbCA9IHRoaXMuX2lzV2luZG93ID8gdGhpcy53aW5kb3dNYXRlcmlhbCA6IHRoaXMuZG9vck1hdGVyaWFsRnJvbnQ7XHJcbiAgICAgICAgICAgIGNvbnN0IGRlZmF1bHRNYXRlcmlhbDogVEhSRUUuTWVzaFBob25nTWF0ZXJpYWwgPSBuZXcgVEhSRUUuTWVzaFBob25nTWF0ZXJpYWwoKTtcclxuXHJcbiAgICAgICAgICAgIG1hdGVyaWFsLnRyYW5zcGFyZW50ID0gZmFsc2U7XHJcbiAgICAgICAgICAgIG1hdGVyaWFsLmNvbG9yID0gZGVmYXVsdE1hdGVyaWFsLmNvbG9yLmNsb25lKCk7XHJcbiAgICAgICAgICAgIG1hdGVyaWFsLm9wYWNpdHkgPSBkZWZhdWx0TWF0ZXJpYWwub3BhY2l0eTtcclxuICAgICAgICAgICAgbWF0ZXJpYWwucmVmcmFjdGlvblJhdGlvID0gZGVmYXVsdE1hdGVyaWFsLnJlZnJhY3Rpb25SYXRpbztcclxuICAgICAgICAgICAgbWF0ZXJpYWwuc2hpbmluZXNzID0gZGVmYXVsdE1hdGVyaWFsLnNoaW5pbmVzcztcclxuICAgICAgICAgICAgbWF0ZXJpYWwuc3BlY3VsYXIgPSBkZWZhdWx0TWF0ZXJpYWwuc3BlY3VsYXIuY2xvbmUoKTtcclxuXHJcbiAgICAgICAgICAgIC8vIEFsbG93cyBmb3IgdHJhbnNwYXJlbmN5IGluIHBuZydzXHJcbiAgICAgICAgICAgIG1hdGVyaWFsLmFscGhhVGVzdCA9IDAuNTtcclxuICAgICAgICAgICAgLy8gTWFrZXMgc3VyZSB0aGUgaW1hZ2UgaW4gb25seSBwcm9qZWN0ZWQgb25jZSBvbiB0aGUgbWVzaFxyXG4gICAgICAgICAgICBtYXRlcmlhbC5zaWRlID0gVEhSRUUuRnJvbnRTaWRlO1xyXG4gICAgICAgICAgICAvLyBSZW1vdmVzIHdoaXRlIGVkZ2VzIHN1cnJvdW5kaW5nIHRoZSBpbWFnZVxyXG4gICAgICAgICAgICBtYXRlcmlhbC50cmFuc3BhcmVudCA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICAvLyBtYXRlcmlhbC5jb2xvciA9IG5ldyBUSFJFRS5Db2xvcigxLCAxLCAxKTtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5hZGRNYXRlcmlhbE1hcChtYXRlcmlhbCwgdGV4dHVyZSwgZmxpcCk7XHJcbiAgICAgICAgICAgIG1hdGVyaWFsLm5lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICAgICAgICAgICAgcmV0dXJuIG1hdGVyaWFsO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCBzdXBlci5jcmVhdGVUZXh0dXJlTWF0ZXJpYWwob3B0aW9ucyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjcmVhdGVDdXN0b21NZXNoKHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgaGFsZldpZHRoOiBudW1iZXIgPSB3aWR0aCAvIDI7XHJcbiAgICAgICAgY29uc3QgaGFsZkZyYW1lOiBudW1iZXIgPSAodGhpcy5fZnJhbWVXaWR0aCAvIDIpO1xyXG5cclxuICAgICAgICB0aGlzLmxlZnRGcmFtZSA9IHRoaXMuX2NyZWF0ZUZyYW1lU2lkZSh0aGlzLl9mcmFtZVdpZHRoLCB0aGlzLl9nZXRIZWlnaHRGcmFtZShoZWlnaHQpLCB0aGlzLl9mcmFtZURlcHRoKTtcclxuICAgICAgICB0aGlzLmxlZnRGcmFtZS5yb3RhdGlvbi5zZXQodGhpcy5faXNXaW5kb3cgPyAxODAgKiAoTWF0aC5QSSAvIDE4MCkgOiAwLCAwLCAwKTtcclxuICAgICAgICB0aGlzLmxlZnRGcmFtZS5wb3NpdGlvbi54ID0gLWhhbGZXaWR0aCArIGhhbGZGcmFtZTtcclxuICAgICAgICB0aGlzLmxlZnRGcmFtZS5uYW1lID0gJ2xlZnRGcmFtZSc7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9pc1dpbmRvdykge1xyXG4gICAgICAgICAgICB0aGlzLmxlZnRGcmFtZS5wb3NpdGlvbi55ID0gLSh0aGlzLl9mcmFtZVdpZHRoIC8gMikgKyAwLjAyO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy50b3BGcmFtZSA9IHRoaXMuX2NyZWF0ZUZyYW1lU2lkZSh0aGlzLl9mcmFtZVdpZHRoLCB3aWR0aCwgdGhpcy5fZnJhbWVEZXB0aCk7XHJcbiAgICAgICAgdGhpcy50b3BGcmFtZS5yb3RhdGlvbi5zZXQoMCwgdGhpcy5faXNXaW5kb3cgPyAxODAgKiAoTWF0aC5QSSAvIDE4MCkgOiAwLCAtOTAgKiAoTWF0aC5QSSAvIDE4MCkpO1xyXG4gICAgICAgIHRoaXMudG9wRnJhbWUucG9zaXRpb24ueSA9IChoZWlnaHQgLyAyKSAtICh0aGlzLl9mcmFtZVdpZHRoIC8gMik7XHJcbiAgICAgICAgdGhpcy50b3BGcmFtZS5uYW1lID0gJ3RvcEZyYW1lJztcclxuXHJcbiAgICAgICAgdGhpcy5yaWdodEZyYW1lID0gdGhpcy5fY3JlYXRlRnJhbWVTaWRlKHRoaXMuX2ZyYW1lV2lkdGgsIHRoaXMuX2dldEhlaWdodEZyYW1lKGhlaWdodCksIHRoaXMuX2ZyYW1lRGVwdGgpO1xyXG4gICAgICAgIHRoaXMucmlnaHRGcmFtZS5yb3RhdGlvbi5zZXQodGhpcy5faXNXaW5kb3cgPyAxODAgKiAoTWF0aC5QSSAvIDE4MCkgOiAwLCAwLCAtMTgwICogKE1hdGguUEkgLyAxODApKTtcclxuICAgICAgICB0aGlzLnJpZ2h0RnJhbWUucG9zaXRpb24ueCA9ICh3aWR0aCAvIDIpIC0gKHRoaXMuX2ZyYW1lV2lkdGggLyAyKTtcclxuICAgICAgICB0aGlzLnJpZ2h0RnJhbWUubmFtZSA9ICdyaWdodEZyYW1lJztcclxuICAgICAgICBpZiAoIXRoaXMuX2lzV2luZG93KSB7XHJcbiAgICAgICAgICAgIHRoaXMucmlnaHRGcmFtZS5wb3NpdGlvbi55ID0gLSh0aGlzLl9mcmFtZVdpZHRoIC8gMikgKyAwLjAyO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX2lzV2luZG93IC8qfHwgdGhpcy5fZG9vcnBvc3QqLykge1xyXG4gICAgICAgICAgICB0aGlzLmJvdHRvbUZyYW1lID0gdGhpcy5fY3JlYXRlRnJhbWVTaWRlKHRoaXMuX2ZyYW1lV2lkdGgsIHdpZHRoLCB0aGlzLl9mcmFtZURlcHRoKTtcclxuICAgICAgICAgICAgdGhpcy5ib3R0b21GcmFtZS5yb3RhdGlvbi5zZXQoMCwgMTgwICogKE1hdGguUEkgLyAxODApLCA5MCAqIChNYXRoLlBJIC8gMTgwKSk7XHJcbiAgICAgICAgICAgIHRoaXMuYm90dG9tRnJhbWUucG9zaXRpb24ueSA9IC0oaGVpZ2h0IC8gMikgKyAodGhpcy5fZnJhbWVXaWR0aCAvIDIpO1xyXG4gICAgICAgICAgICB0aGlzLmJvdHRvbUZyYW1lLm5hbWUgPSAnYm90dG9tRnJhbWUnO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IGN1c3RvbUdlbzogVEhSRUUuQm94R2VvbWV0cnk7XHJcbiAgICAgICAgaWYgKHRoaXMuX2lzV2luZG93KSB7XHJcbiAgICAgICAgICAgIGN1c3RvbUdlbyA9IG5ldyBUSFJFRS5Cb3hHZW9tZXRyeSh3aWR0aCAtICgyICogdGhpcy5fZnJhbWVXaWR0aCkgKyAwLjA0LCBoZWlnaHQgLSAoMiAqIHRoaXMuX2ZyYW1lV2lkdGgpICsgMC4wNCwgMC4wMjQpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGN1c3RvbUdlbyA9IG5ldyBUSFJFRS5Cb3hHZW9tZXRyeSh3aWR0aCAtIDAuMDIgKiAodGhpcy5fZnJhbWVXaWR0aCAtIDAuMDIpLCBoZWlnaHQgLSAodGhpcy5fZnJhbWVXaWR0aCAtIDAuMDIpLCAwLjA0KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5jdXN0b21NZXNoID0gbmV3IFRIUkVFLk1lc2goY3VzdG9tR2VvLCB0aGlzLl9pc1dpbmRvdyA/IHRoaXMud2luZG93TWF0ZXJpYWwgOiB0aGlzLmRvb3JNYXRlcmlhbEZyb250KTtcclxuICAgICAgICB0aGlzLmN1c3RvbU1lc2guY2FzdFNoYWRvdyA9IHRoaXMuX2lzV2luZG93ID8gZmFsc2UgOiAhdGhpcy5pc0dsYXNzO1xyXG4gICAgICAgIHRoaXMuY3VzdG9tTWVzaC5yZW5kZXJPcmRlciA9IC0xO1xyXG5cclxuICAgICAgICB0aGlzLmN1c3RvbU1lc2gubmFtZSA9ICdjdXN0b21NZXNoJztcclxuICAgICAgICBpZiAodGhpcy5faXNXaW5kb3cpIHtcclxuICAgICAgICAgICAgdGhpcy5jdXN0b21NZXNoLm5hbWUgKz0gJ1dpbmRvdyc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmlzR2xhc3MpIHtcclxuICAgICAgICAgICAgdGhpcy5jdXN0b21NZXNoLm5hbWUgKz0gJ0dsYXNzJztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLl9pc1dpbmRvdykge1xyXG4gICAgICAgICAgICB0aGlzLmN1c3RvbU1lc2gucG9zaXRpb24ueiA9IC0wLjAxMjtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmN1c3RvbU1lc2gucG9zaXRpb24ueSA9IC0odGhpcy5fZnJhbWVXaWR0aCAvIDIpICsgMC4wMTtcclxuICAgICAgICAgICAgdGhpcy5jdXN0b21NZXNoLnBvc2l0aW9uLnogPSAwLjAyO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl9nZXRBZGRpdGlvbmFsVGV4dHVyZSgpLnRoZW4oKGZyb250QWRkaXRpb25hbE9iajogVEhSRUUuTWVzaCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoZnJvbnRBZGRpdGlvbmFsT2JqKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBiYWNrQWRkaXRpb25hbE9iaiA9IGZyb250QWRkaXRpb25hbE9iai5jbG9uZSh0cnVlKTtcclxuICAgICAgICAgICAgICAgIGJhY2tBZGRpdGlvbmFsT2JqLnJvdGF0aW9uLnggPSAxODAgKiAoTWF0aC5QSSAvIDE4MCk7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5hZGRpdGlvbmFsVGV4dHVyZS5kYXRhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZnJvbnRBZGRpdGlvbmFsT2JqLnBvc2l0aW9uLnNldChcclxuICAgICAgICAgICAgICAgICAgICAgICAgLSh3aWR0aCAvIDIpICsgdGhpcy5hZGRpdGlvbmFsVGV4dHVyZS5kYXRhLngsIC0oaGVpZ2h0IC8gMikgKyB0aGlzLmFkZGl0aW9uYWxUZXh0dXJlLmRhdGEueSwgMC4wMik7XHJcbiAgICAgICAgICAgICAgICAgICAgYmFja0FkZGl0aW9uYWxPYmoucG9zaXRpb24uc2V0KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAtKHdpZHRoIC8gMikgKyB0aGlzLmFkZGl0aW9uYWxUZXh0dXJlLmRhdGEueCwgLShoZWlnaHQgLyAyKSArIHRoaXMuYWRkaXRpb25hbFRleHR1cmUuZGF0YS55LCAtMC4wMik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1c3RvbU1lc2guYWRkKGZyb250QWRkaXRpb25hbE9iaik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1c3RvbU1lc2guYWRkKGJhY2tBZGRpdGlvbmFsT2JqKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLmNoaWxkcmVuLmxlbmd0aCA9IDA7XHJcbiAgICAgICAgdGhpcy5hZGQodGhpcy5sZWZ0RnJhbWUsIHRoaXMucmlnaHRGcmFtZSwgdGhpcy50b3BGcmFtZSwgdGhpcy5jdXN0b21NZXNoKTtcclxuICAgICAgICBpZiAodGhpcy5faXNXaW5kb3cgLyp8fCB0aGlzLl9kb29ycG9zdCovKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYWRkKHRoaXMuYm90dG9tRnJhbWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmNhbGN1bGF0ZUhhbGZTaXplKCk7XHJcbiAgICAgICAgLy8gdGhpcy5zY2VuZS5uZWVkc1VwZGF0ZSA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNsb25lSXRlbSgpOiBJbldhbGxJdGVtIHtcclxuICAgICAgICBjb25zdCBjbG9uZTogSW5XYWxsSXRlbSA9IHRoaXMuY3JlYXRlQ2xhc3MoKTtcclxuICAgICAgICB0aGlzLmNsb25lUHJvcGVydGllcyhjbG9uZSk7XHJcbiAgICAgICAgY2xvbmUubmFtZSA9ICd0ZXN0IGNsb25lJztcclxuICAgICAgICByZXR1cm4gY2xvbmU7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIGFzeW5jIGNyZWF0ZU1hdGVyaWFsKHNpZGUgPSBUSFJFRS5Eb3VibGVTaWRlLCBpc1NhbWUgPSB0cnVlKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNDdXN0b20pIHtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5jcmVhdGVUZXh0dXJlTWF0ZXJpYWwoe3NpZGU6IFRIUkVFLkZyb250U2lkZSwgZmxpcDogZmFsc2V9KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBhd2FpdCBzdXBlci5jcmVhdGVUZXh0dXJlTWF0ZXJpYWwoe3NpZGUsIGlzU2FtZX0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgY3JlYXRlQ2xhc3MoKTogSW5XYWxsSXRlbSB7XHJcbiAgICAgICAgLy8gY3JlYXRlIG5ldyBvYmplY3QgZm9yIHByb3BlciBkaW1lbnNpb25zXHJcbiAgICAgICAgY29uc3QgbWVzaDogTWVzaCA9IG5ldyBNZXNoKG5ldyBCb3hHZW9tZXRyeSh0aGlzLmhhbGZTaXplLnggKiAyLCB0aGlzLmhhbGZTaXplLnkgKiAyLCB0aGlzLmhhbGZTaXplLnogKiAyKSk7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBJbldhbGxJdGVtKHRoaXMubWV0YWRhdGEsIG1lc2gpO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBjbG9uZVByb3BlcnRpZXMoY2xvbmU6IEluV2FsbEl0ZW0pOiB2b2lkIHtcclxuICAgICAgICBjbG9uZS51c2VyRGF0YSA9IHRoaXMudXNlckRhdGE7XHJcbiAgICAgICAgY2xvbmUuZG9vck1hdGVyaWFsRnJvbnQgPSB0aGlzLmRvb3JNYXRlcmlhbEZyb250ID8gPE1lc2hQaG9uZ01hdGVyaWFsPnRoaXMuZG9vck1hdGVyaWFsRnJvbnQuY2xvbmUoKSA6IHVuZGVmaW5lZDtcclxuICAgICAgICBpZiAoY2xvbmUuZG9vck1hdGVyaWFsRnJvbnQpIHtcclxuICAgICAgICAgICAgY2xvbmUuZG9vck1hdGVyaWFsRnJvbnQuZW1pc3NpdmUgPSBuZXcgVEhSRUUuQ29sb3IoMHgwMDAwMDApO1xyXG4gICAgICAgICAgICBjbG9uZS5kb29yTWF0ZXJpYWxGcm9udC5uZWVkc1VwZGF0ZSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNsb25lLndpbmRvd01hdGVyaWFsID0gdGhpcy53aW5kb3dNYXRlcmlhbCA/IDxNZXNoUGhvbmdNYXRlcmlhbD50aGlzLndpbmRvd01hdGVyaWFsLmNsb25lKCkgOiB1bmRlZmluZWQ7XHJcbiAgICAgICAgaWYgKGNsb25lLndpbmRvd01hdGVyaWFsKSB7XHJcbiAgICAgICAgICAgIGNsb25lLndpbmRvd01hdGVyaWFsLmVtaXNzaXZlID0gbmV3IFRIUkVFLkNvbG9yKDB4MDAwMDAwKTtcclxuICAgICAgICAgICAgY2xvbmUud2luZG93TWF0ZXJpYWwubmVlZHNVcGRhdGUgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjbG9uZS5mcmFtZU1hdGVyaWFsID0gdGhpcy5mcmFtZU1hdGVyaWFsID8gPE1lc2hQaG9uZ01hdGVyaWFsPnRoaXMuZnJhbWVNYXRlcmlhbC5jbG9uZSgpIDogdW5kZWZpbmVkO1xyXG4gICAgICAgIGlmIChjbG9uZS5mcmFtZU1hdGVyaWFsKSB7XHJcbiAgICAgICAgICAgIGNsb25lLmZyYW1lTWF0ZXJpYWwuZW1pc3NpdmUgPSBuZXcgVEhSRUUuQ29sb3IoMHgwMDAwMDApO1xyXG4gICAgICAgICAgICBjbG9uZS5mcmFtZU1hdGVyaWFsLm5lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2xvbmUuZnJhbWVDb2xvciA9IHRoaXMuZnJhbWVDb2xvcjtcclxuICAgICAgICBjbG9uZS5kb29yQ29sb3IgPSB0aGlzLmRvb3JDb2xvcjtcclxuICAgICAgICAoKGNsb25lLm9iamVjdCBhcyBNZXNoKS5tYXRlcmlhbCBhcyBhbnkpID0gW2Nsb25lLmZyYW1lTWF0ZXJpYWwsIGNsb25lLl9pc1dpbmRvdyA/IGNsb25lLndpbmRvd01hdGVyaWFsIDogY2xvbmUuZG9vck1hdGVyaWFsRnJvbnRdO1xyXG4gICAgICAgIGNsb25lLnRleHR1cmUgPSB0aGlzLnRleHR1cmU7XHJcbiAgICAgICAgY2xvbmUuYWRkaXRpb25hbFRleHR1cmUgPSB0aGlzLmFkZGl0aW9uYWxUZXh0dXJlO1xyXG4gICAgICAgIGNsb25lLmlzR2xhc3MgPSB0aGlzLmlzR2xhc3M7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIGdldE1hdGVyaWFscyh0ZXh0dXJlTWF0ZXJpYWxGcm9udDogVEhSRUUuTWF0ZXJpYWwsIHRleHR1cmVNYXRlcmlhbEJhY2s6IFRIUkVFLk1hdGVyaWFsKTogVEhSRUUuTWF0ZXJpYWxbXSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNDdXN0b20pIHtcclxuICAgICAgICAgICAgcmV0dXJuICh0aGlzLm9iamVjdCBhcyBNZXNoKS5tYXRlcmlhbCBhcyBhbnk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIHN1cGVyLmdldE1hdGVyaWFscyh0ZXh0dXJlTWF0ZXJpYWxGcm9udCwgdGV4dHVyZU1hdGVyaWFsQmFjayk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBnZXRNYXRlcmlhbE1hcERpbWVuc2lvbnMoKTogVEhSRUUuVmVjdG9yMiB7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNDdXN0b20pIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBUSFJFRS5WZWN0b3IyKFxyXG4gICAgICAgICAgICAgICAgdGhpcy5nZXRXaWR0aCgpIC0gMC4xNCxcclxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0SGVpZ2h0KCkgLSAwLjA3XHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIHN1cGVyLmdldE1hdGVyaWFsTWFwRGltZW5zaW9ucygpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgaW5pdGlhdGVJdGVtT2JqZWN0KGRhdGE6IGFueSk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLmlzQ3VzdG9tICYmIGRhdGEgJiYgZGF0YS5nZW9tZXRyeSkge1xyXG4gICAgICAgICAgICBkYXRhLmdlb21ldHJ5LnZlcnRpY2VzTmVlZFVwZGF0ZSA9IHRydWU7XHJcbiAgICAgICAgICAgIGRhdGEuZ2VvbWV0cnkuY29tcHV0ZUJvdW5kaW5nQm94KCk7XHJcbiAgICAgICAgICAgIGRhdGEuZ2VvbWV0cnkuYXBwbHlNYXRyaXg0KG5ldyBNYXRyaXg0KCkubWFrZVRyYW5zbGF0aW9uKFxyXG4gICAgICAgICAgICAgICAgLTAuNSAqIChkYXRhLmdlb21ldHJ5LmJvdW5kaW5nQm94Lm1heC54ICsgZGF0YS5nZW9tZXRyeS5ib3VuZGluZ0JveC5taW4ueCksXHJcbiAgICAgICAgICAgICAgICAtMC41ICogKGRhdGEuZ2VvbWV0cnkuYm91bmRpbmdCb3gubWF4LnkgKyBkYXRhLmdlb21ldHJ5LmJvdW5kaW5nQm94Lm1pbi55KSxcclxuICAgICAgICAgICAgICAgIC0wLjUgKiAoZGF0YS5nZW9tZXRyeS5ib3VuZGluZ0JveC5tYXgueiArIGRhdGEuZ2VvbWV0cnkuYm91bmRpbmdCb3gubWluLnopXHJcbiAgICAgICAgICAgICkpO1xyXG4gICAgICAgICAgICBkYXRhLmdlb21ldHJ5LmNvbXB1dGVCb3VuZGluZ0JveCgpO1xyXG4gICAgICAgICAgICBjb25zdCBtYXggPSBkYXRhLmdlb21ldHJ5LmJvdW5kaW5nQm94Lm1heC5jbG9uZSgpO1xyXG4gICAgICAgICAgICBjb25zdCBtaW4gPSBkYXRhLmdlb21ldHJ5LmJvdW5kaW5nQm94Lm1pbi5jbG9uZSgpO1xyXG4gICAgICAgICAgICB0aGlzLmhhbGZTaXplID0gbWF4LnN1YihtaW4pLmRpdmlkZVNjYWxhcigyKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfc2V0RGVmYXVsdCgpOiB2b2lkIHtcclxuICAgICAgICAvLyB3b3JrYXJvdW5kIGJlY2F1c2UgcHJvcGVydGllcyBhcmUgbm90IGF2YWlsYWJsZSB5ZXQgd2hlbiBjcmVhdGluZyB3aW5kb3cvZG9vciBmcm9tIGxvYWRpbmcgZnJvbSBjbG91ZC9sb2NhbFxyXG4gICAgICAgIHRoaXMuZnJhbWVDb2xvciA9IHRoaXMubWV0YWRhdGEuZnJhbWVDb2xvciA/IHRoaXMubWV0YWRhdGEuZnJhbWVDb2xvciA6IHRoaXMuX2RlZmF1bHRGcmFtZUNvbG9yOyAvLyBSQUwtMTAxMVxyXG4gICAgICAgIHRoaXMuZG9vckNvbG9yID0gdGhpcy5tZXRhZGF0YS5kb29yQ29sb3IgPyB0aGlzLm1ldGFkYXRhLmRvb3JDb2xvciA6IHRoaXMuX2RlZmF1bHREb29yQ29sb3I7IC8vIFJBTC05MDEwXHJcbiAgICAgICAgdGhpcy53aW5kb3dDb2xvciA9IHRoaXMubWV0YWRhdGEud2luZG93Q29sb3IgPyB0aGlzLm1ldGFkYXRhLndpbmRvd0NvbG9yIDogbmV3IFRIUkVFLkNvbG9yKDB4ZGZmMGYyKTtcclxuICAgICAgICB0aGlzLl9pc1dpbmRvdyA9IHRoaXMubWV0YWRhdGEuaXRlbVR5cGUgPT09IEl0ZW1UeXBlLkluV2FsbDtcclxuICAgICAgICB0aGlzLl9kb29ycG9zdCA9IHRoaXMubWV0YWRhdGEuZG9vcnBvc3Q7XHJcbiAgICAgICAgdGhpcy5pc0dsYXNzID0gdGhpcy5tZXRhZGF0YS5pc0dsYXNzID8gdGhpcy5tZXRhZGF0YS5pc0dsYXNzIDogZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfY3JlYXRlTWF0ZXJpYWxzKHNpZGU6IFRIUkVFLlNpZGUpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl9zZXREZWZhdWx0KCk7XHJcbiAgICAgICAgdGhpcy5mcmFtZU1hdGVyaWFsID0gbmV3IFRIUkVFLk1lc2hQaG9uZ01hdGVyaWFsKHtzaWRlOiBzaWRlLCBuYW1lOiAnZnJhbWVNYXRlcmlhbCd9KTtcclxuICAgICAgICB0aGlzLmZyYW1lTWF0ZXJpYWwuY29sb3IgPSBuZXcgVEhSRUUuQ29sb3IodGhpcy5mcmFtZUNvbG9yKTtcclxuICAgICAgICBpZiAodGhpcy5faXNXaW5kb3cpIHtcclxuICAgICAgICAgICAgdGhpcy53aW5kb3dNYXRlcmlhbCA9IG5ldyBUSFJFRS5NZXNoUGhvbmdNYXRlcmlhbCh7c2lkZTogc2lkZSwgY29sb3I6IHRoaXMud2luZG93Q29sb3IsIG5hbWU6ICd3aW5kb3dNYXRlcmlhbCd9KTtcclxuICAgICAgICAgICAgdGhpcy53aW5kb3dNYXRlcmlhbC50cmFuc3BhcmVudCA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMud2luZG93TWF0ZXJpYWwuYWxwaGFUZXN0ID0gMDtcclxuICAgICAgICAgICAgdGhpcy53aW5kb3dNYXRlcmlhbC5vcGFjaXR5ID0gMC4yO1xyXG4gICAgICAgICAgICB0aGlzLndpbmRvd01hdGVyaWFsLm1hcCA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgdGhpcy53aW5kb3dNYXRlcmlhbC5uZWVkc1VwZGF0ZSA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMud2luZG93TWF0ZXJpYWwuc2lkZSA9IFRIUkVFLkZyb250U2lkZTtcclxuICAgICAgICAgICAgKCh0aGlzLm9iamVjdCBhcyBNZXNoKS5tYXRlcmlhbCBhcyBhbnkpID0gW3RoaXMuZnJhbWVNYXRlcmlhbCwgdGhpcy53aW5kb3dNYXRlcmlhbF07XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5kb29yTWF0ZXJpYWxGcm9udCA9IG5ldyBUSFJFRS5NZXNoUGhvbmdNYXRlcmlhbCh7c2lkZTogc2lkZSwgbmFtZTogJ2Rvb3JNYXRlcmlhbEZyb250J30pO1xyXG4gICAgICAgICAgICB0aGlzLmRvb3JNYXRlcmlhbEZyb250LmNvbG9yID0gbmV3IFRIUkVFLkNvbG9yKHRoaXMuZG9vckNvbG9yKTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuX2Rvb3Jwb3N0KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRvb3JNYXRlcmlhbEZyb250LnRyYW5zcGFyZW50ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZG9vck1hdGVyaWFsRnJvbnQub3BhY2l0eSA9IDA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgKCh0aGlzLm9iamVjdCBhcyBNZXNoKS5tYXRlcmlhbCBhcyBhbnkpID0gW3RoaXMuZnJhbWVNYXRlcmlhbCwgdGhpcy5kb29yTWF0ZXJpYWxGcm9udF07XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX2dldEhlaWdodEZyYW1lKGhlaWdodDogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgICAgICByZXR1cm4gaGVpZ2h0IC0gKHRoaXMuX2lzV2luZG93ID8gMiAqICh0aGlzLl9mcmFtZVdpZHRoIC0gMC4wMikgOiB0aGlzLl9mcmFtZVdpZHRoIC0gMC4wMik7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfY3JlYXRlRnJhbWVTaWRlKHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyLCBkZXB0aDogbnVtYmVyKTogVEhSRUUuTWVzaCB7XHJcbiAgICAgICAgY29uc3Qgb3V0ZXJGcmFtZVdpZHRoOiBudW1iZXIgPSB3aWR0aCAtIDAuMDI7XHJcbiAgICAgICAgY29uc3Qgb3V0ZXJGcmFtZUdlbyA9IG5ldyBUSFJFRS5Cb3hHZW9tZXRyeShvdXRlckZyYW1lV2lkdGgsIGhlaWdodCwgZGVwdGgpO1xyXG4gICAgICAgIGNvbnN0IG91dGVyRnJhbWUgPSBuZXcgVEhSRUUuTWVzaChvdXRlckZyYW1lR2VvLCB0aGlzLmZyYW1lTWF0ZXJpYWwpO1xyXG4gICAgICAgIG91dGVyRnJhbWUuY2FzdFNoYWRvdyA9IHRydWU7XHJcbiAgICAgICAgb3V0ZXJGcmFtZS5yZWNlaXZlU2hhZG93ID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgY29uc3QgaW5uZXJGcmFtZUdlbyA9IG5ldyBUSFJFRS5Cb3hHZW9tZXRyeSgwLjAyLCBoZWlnaHQsIGRlcHRoIC8gMik7XHJcbiAgICAgICAgY29uc3QgaW5uZXJGcmFtZSA9IG5ldyBUSFJFRS5NZXNoKGlubmVyRnJhbWVHZW8sIHRoaXMuZnJhbWVNYXRlcmlhbCk7XHJcbiAgICAgICAgaW5uZXJGcmFtZS5jYXN0U2hhZG93ID0gdHJ1ZTtcclxuICAgICAgICBpbm5lckZyYW1lLnJlY2VpdmVTaGFkb3cgPSB0cnVlO1xyXG4gICAgICAgIGlubmVyRnJhbWUucG9zaXRpb24ueCA9IChvdXRlckZyYW1lV2lkdGggLyAyKSArIDAuMDE7XHJcbiAgICAgICAgaW5uZXJGcmFtZS5wb3NpdGlvbi56ID0gLWRlcHRoIC8gNDtcclxuXHJcbiAgICAgICAgY29uc3QgZnJhbWVTaWRlID0gbmV3IFRIUkVFLk9iamVjdDNEKCk7XHJcbiAgICAgICAgZnJhbWVTaWRlLmFkZChvdXRlckZyYW1lLCBpbm5lckZyYW1lKTtcclxuICAgICAgICBjb25zdCBib3VuZGluZ0JveCA9IG5ldyBUSFJFRS5Cb3gzKCkuc2V0RnJvbU9iamVjdChmcmFtZVNpZGUpO1xyXG4gICAgICAgIGNvbnN0IGJiQ2VudGVyUGl2b3QgPSBuZXcgVEhSRUUuVmVjdG9yMygpO1xyXG4gICAgICAgIGJvdW5kaW5nQm94LmdldENlbnRlcihiYkNlbnRlclBpdm90KTtcclxuICAgICAgICBjb25zdCBkZWx0YSA9IG5ldyBUSFJFRS5WZWN0b3IzKCkuc3ViKGJiQ2VudGVyUGl2b3QpLnNldFkoMCk7XHJcbiAgICAgICAgZnJhbWVTaWRlLmNoaWxkcmVuLmZvckVhY2goKGNoaWxkOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgY2hpbGQucG9zaXRpb24uYWRkKGRlbHRhKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICBjb25zdCBmcmFtZVNpZGVNZXNoID0gbmV3IE1lc2goKTtcclxuICAgICAgICBmcmFtZVNpZGVNZXNoLmFkZChvdXRlckZyYW1lLCBpbm5lckZyYW1lKTtcclxuICAgICAgICByZXR1cm4gZnJhbWVTaWRlTWVzaDtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF9nZXRBZGRpdGlvbmFsVGV4dHVyZSgpOiBQcm9taXNlPFRIUkVFLk1lc2g+IHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmU6IEZ1bmN0aW9uLCByZWplY3Q6IEZ1bmN0aW9uKSA9PiB7XHJcbiAgICAgICAgICAgIC8vIGlmICh0aGlzLmFkZGl0aW9uYWxUZXh0dXJlKSB7XHJcbiAgICAgICAgICAgIC8vICAgICBMb2FkZXJVdGlscy5Mb2FkT2JqTW9kZWwodGhpcy5hZGRpdGlvbmFsVGV4dHVyZS51cmwpLnRoZW4oKG9iajogVEhSRUUuTWVzaCkgPT4ge1xyXG4gICAgICAgICAgICAvLyAgICAgICAgIGNvbnN0IGFkZGl0aW9uYWxPYmo6IFRIUkVFLk1lc2ggPSA8TWVzaD5vYmouY2xvbmUodHJ1ZSk7XHJcbiAgICAgICAgICAgIC8vICAgICAgICAgYWRkaXRpb25hbE9iai5jaGlsZHJlbi5tYXAoYyA9PiBjLnBvc2l0aW9uLnNldCgwLCAwLCAwKSk7XHJcbiAgICAgICAgICAgIC8vICAgICAgICAgaWYgKHRoaXMuYWRkaXRpb25hbFRleHR1cmUuc2NhbGUpIHtcclxuICAgICAgICAgICAgLy8gICAgICAgICAgICAgYWRkaXRpb25hbE9iai5zY2FsZS5tdWx0aXBseVNjYWxhcih0aGlzLmFkZGl0aW9uYWxUZXh0dXJlLnNjYWxlKTtcclxuICAgICAgICAgICAgLy8gICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vICAgICAgICAgcmVzb2x2ZShhZGRpdGlvbmFsT2JqKTtcclxuICAgICAgICAgICAgLy8gICAgIH0pO1xyXG4gICAgICAgICAgICAvLyB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcmVzb2x2ZShudWxsKTtcclxuICAgICAgICAgICAgLy8gfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX2dsYXNzTWF0ZXJpYWxDaGVjaygpIHtcclxuICAgICAgICBsZXQgbWVzaGVzRm91bmQgPSAwO1xyXG4gICAgICAgIHRoaXMudHJhdmVyc2UoKGNoaWxkKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChjaGlsZCBpbnN0YW5jZW9mIE1lc2ggJiYgY2hpbGQubWF0ZXJpYWwpIHtcclxuICAgICAgICAgICAgICAgIG1lc2hlc0ZvdW5kKys7XHJcbiAgICAgICAgICAgICAgICBjaGlsZC5jYXN0U2hhZG93ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG1hdGVyaWFsczogYW55ID0gIUFycmF5LmlzQXJyYXkoY2hpbGQubWF0ZXJpYWwpID8gW2NoaWxkLm1hdGVyaWFsXSA6IGNoaWxkLm1hdGVyaWFsO1xyXG4gICAgICAgICAgICAgICAgbWF0ZXJpYWxzLmZvckVhY2gobWF0ZXJpYWwgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChtYXRlcmlhbC5uYW1lICYmIChtYXRlcmlhbC5uYW1lID09PSAnRml4ZWRfR2xhc3MnIHx8IG1hdGVyaWFsLm5hbWUgPT09ICdEZWZhdWx0X0dsYXNzJykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGQuY2FzdFNoYWRvdyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRlcmlhbC50cmFuc3BhcmVudCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsLm9wYWNpdHkgPSAwLjI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsLmZvcm1hdCA9IFRIUkVFLlJHQkFGb3JtYXQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsLm5lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICAvLyBSZW1vdmUgdG8gaWdub3JlIG9sZCBkb29yIG1vZGVsc1xyXG4gICAgICAgIGlmIChtZXNoZXNGb3VuZCA9PT0gMSkge1xyXG4gICAgICAgICAgICB0aGlzLnRyYXZlcnNlKChjaGlsZCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKGNoaWxkIGluc3RhbmNlb2YgTWVzaCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkLmNhc3RTaGFkb3cgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1hdGVyaWFsczogYW55ID0gIUFycmF5LmlzQXJyYXkoY2hpbGQubWF0ZXJpYWwpID8gW2NoaWxkLm1hdGVyaWFsXSA6IGNoaWxkLm1hdGVyaWFsO1xyXG4gICAgICAgICAgICAgICAgICAgIG1hdGVyaWFscy5mb3JFYWNoKG0gPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBtLnZpc2libGUgPSBtLm5hbWUgJiYgKG0ubmFtZSA9PT0gJ0ZpeGVkX0dsYXNzJyB8fCBtLm5hbWUgPT09ICdEZWZhdWx0X0dsYXNzJykgPyBtLnZpc2libGUgPSBmYWxzZSA6IG0udmlzaWJsZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFdhbGxJdGVtR3JvdXAgZXh0ZW5kcyBJdGVtR3JvdXAge1xyXG5cclxuICAgIHB1YmxpYyBjdXJyZW50V2FsbEVkZ2U6IEhhbGZFZGdlO1xyXG4gICAgcHVibGljIGN1cnJlbnRXYWxsOiBXYWxsO1xyXG4gICAgcHVibGljIGVsZXZhdGlvbkFkanVzdGFibGU6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICAgIHByaXZhdGUgX3Bvc2l0aW9uWVRvbGVyYW5jZSA9IDAuMDA1O1xyXG4gICAgcHJpdmF0ZSBfb3JpZ2luYWxSb3RhdGlvbjogRXVsZXI7XHJcbiAgICBwcml2YXRlIF9vbkZyb250U2lkZTogYm9vbGVhbjtcclxuICAgIHByaXZhdGUgX3dhbGxPZmZzZXRTY2FsYXIgPSAwO1xyXG4gICAgcHJpdmF0ZSBfc2l6ZVggPSAwO1xyXG4gICAgcHJpdmF0ZSBfc2l6ZVkgPSAwO1xyXG4gICAgcHJpdmF0ZSBfcmVmVmVjID0gbmV3IFRIUkVFLlZlY3RvcjIoMCwgMS4wKTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgICAgIHRoaXMubWV0YWRhdGEgPSB7XHJcbiAgICAgICAgICAgIGl0ZW1UeXBlOiAyMlxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy51c2VyRGF0YS5pdGVtVHlwZSA9IHRoaXMubWV0YWRhdGEuaXRlbVR5cGU7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIHJlZHJhd1dhbGwoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFdhbGxFZGdlICYmIHRoaXMuY3VycmVudFdhbGxFZGdlLndhbGwpIHtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50V2FsbEVkZ2Uud2FsbC5maXJlUmVkcmF3KCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpc1ZhbGlkUG9zaXRpb24ocG9zaXRpb246IFZlY3RvcjMsIHJvdGF0aW9uPzogRXVsZXIsIG9wdGlvbnM/OiBhbnkpOiBDb2xsaXNpb25JbmZvIHtcclxuICAgICAgICByZXR1cm4geyB2YWxpZDogdHJ1ZSB9O1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBtb3ZlVG9Qb3NpdGlvbih2ZWMzOiBWZWN0b3IzLCBpbnRlcnNlY3Rpb24/OiBJbnRlcnNlY3Rpb24pIHtcclxuICAgICAgICBpZiAoaW50ZXJzZWN0aW9uKSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5jdXJyZW50V2FsbEVkZ2UgJiYgKHRoaXMuaXRlbXNbMF0gYXMgV2FsbEl0ZW0pLmN1cnJlbnRXYWxsRWRnZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50V2FsbEVkZ2UgPSAodGhpcy5pdGVtc1swXSBhcyBXYWxsSXRlbSkuY3VycmVudFdhbGxFZGdlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmN1cnJlbnRXYWxsRWRnZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fYm91bmRNb3ZlKHZlYzMpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wb3NpdGlvbi5jb3B5KHZlYzMpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZWRyYXdXYWxsKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNyZWF0ZUJvdW5kYXJ5Qm94KCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuYm91bmRhcnlCb3guc2V0RnJvbU9iamVjdCh0aGlzKTtcclxuICAgICAgICBjb25zdCBtYXggPSB0aGlzLmJvdW5kYXJ5Qm94Lm1heC5jbG9uZSgpO1xyXG4gICAgICAgIGNvbnN0IG1pbiA9IHRoaXMuYm91bmRhcnlCb3gubWluLmNsb25lKCk7XHJcbiAgICAgICAgdGhpcy5oYWxmU2l6ZSA9IG1heC5zdWIobWluKS5kaXZpZGVTY2FsYXIoMik7XHJcbiAgICAgICAgdGhpcy51cGRhdGVTaXplKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNlbnRlclBpdm90KCk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IGJvdW5kYXJ5Qm94Q2VudGVyID0gdGhpcy5ib3VuZGFyeUJveENlbnRlcjtcclxuICAgICAgICB0aGlzLnBvc2l0aW9uLmNvcHkoYm91bmRhcnlCb3hDZW50ZXIpO1xyXG4gICAgICAgIHRoaXMuaXRlbXMuZm9yRWFjaChpID0+IHtcclxuICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWxQb3NpdGlvbiA9IGkucG9zaXRpb24uY2xvbmUoKTtcclxuICAgICAgICAgICAgY29uc3QgbmV3UG9zaXRpb24gPSBvcmlnaW5hbFBvc2l0aW9uLnN1Yihib3VuZGFyeUJveENlbnRlcik7XHJcbiAgICAgICAgICAgIGkucG9zaXRpb24uY29weShuZXdQb3NpdGlvbik7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHVwZGF0ZVNpemUoKSB7XHJcbiAgICAgICAgdGhpcy5fd2FsbE9mZnNldFNjYWxhciA9IHRoaXMuaGFsZlNpemUuejtcclxuICAgICAgICB0aGlzLl9zaXplWCA9IHRoaXMuaGFsZlNpemUueCAqIDI7XHJcbiAgICAgICAgdGhpcy5fc2l6ZVkgPSB0aGlzLmhhbGZTaXplLnkgKiAyO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBvbldhbGxNb3ZlZCh3YWxsOiBXYWxsKSB7XHJcbiAgICAgICAgaWYgKHdhbGwuZnJvbnRFZGdlKSB7XHJcbiAgICAgICAgICAgIHRoaXMucGxhY2VPbkVkZ2Uod2FsbC5mcm9udEVkZ2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAod2FsbC5iYWNrRWRnZSkge1xyXG4gICAgICAgICAgICB0aGlzLnBsYWNlT25FZGdlKHdhbGwuYmFja0VkZ2UpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcGxhY2VPbkVkZ2UoZWRnZTogSGFsZkVkZ2UpIHtcclxuICAgICAgICB0aGlzLl9vcmlnaW5hbFJvdGF0aW9uID0gdGhpcy5yb3RhdGlvbi5jbG9uZSgpO1xyXG5cclxuICAgICAgICBpZiAoIWVkZ2UpIHsgcmV0dXJuOyB9XHJcbiAgICAgICAgdGhpcy5fb25Gcm9udFNpZGUgPSBlZGdlLndhbGwuZnJvbnRFZGdlID09PSBlZGdlO1xyXG4gICAgICAgIHRoaXMuX2NoYW5nZVdhbGxFZGdlKGVkZ2UpO1xyXG5cclxuICAgICAgICBjb25zdCBuZXdQb3MgPSBlZGdlLndhbGwuYW1vdW50V2FsbE1vdmVkID8gdGhpcy5wb3NpdGlvbi5hZGQobmV3IFZlY3RvcjMoZWRnZS53YWxsLmFtb3VudFdhbGxNb3ZlZC54LCAwLCAwKSkgOiB0aGlzLnBvc2l0aW9uLmNsb25lKCk7XHJcbiAgICAgICAgdGhpcy5fYm91bmRNb3ZlKG5ld1Bvcyk7XHJcbiAgICAgICAgdGhpcy5wb3NpdGlvbi5jb3B5KG5ld1Bvcyk7XHJcbiAgICAgICAgdGhpcy5yZWRyYXdXYWxsKCk7XHJcbiAgICAgICAgdGhpcy5hbGxvd1JvdGF0ZSA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBoYW5kbGVHcm91cENyZWF0aW9uKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuaXRlbXMuZm9yRWFjaCgoaSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuY3VycmVudFdhbGxFZGdlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRXYWxsRWRnZSA9IChpIGFzIFdhbGxJdGVtKS5jdXJyZW50V2FsbEVkZ2U7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRXYWxsID0gdGhpcy5jdXJyZW50V2FsbEVkZ2Uud2FsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRXYWxsLnJlbW92ZU9uSXRlbShpKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLnBsYWNlT25FZGdlKHRoaXMuY3VycmVudFdhbGxFZGdlKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF9jaGFuZ2VXYWxsRWRnZSh3YWxsRWRnZTogSGFsZkVkZ2UpIHtcclxuICAgICAgICAvLyBmaW5kIGFuZ2xlIGJldHdlZW4gd2FsbCBub3JtYWxzXHJcbiAgICAgICAgY29uc3Qgbm9ybWFsMiA9IG5ldyBUSFJFRS5WZWN0b3IyKCk7XHJcbiAgICAgICAgY29uc3Qgbm9ybWFsMyA9IFV0aWxzLkdldEZhY2VOb3JtYWxGcm9tQnVmZmVyR2VvbWV0cnkod2FsbEVkZ2UucGxhbmUuZ2VvbWV0cnksIDAsIDApO1xyXG4gICAgICAgIG5vcm1hbDIueCA9IG5vcm1hbDMueDtcclxuICAgICAgICBub3JtYWwyLnkgPSBub3JtYWwzLno7XHJcblxyXG4gICAgICAgIGNvbnN0IHdhbGxSb3RhdGlvbiA9IFV0aWxzLmFuZ2xlKFxyXG4gICAgICAgICAgICB0aGlzLl9yZWZWZWMueCwgdGhpcy5fcmVmVmVjLnksXHJcbiAgICAgICAgICAgIG5vcm1hbDIueCwgbm9ybWFsMi55KTtcclxuXHJcbiAgICAgICAgLy8gdHJhbnNmZXIgcm90YXRpb24gZnJvbSBjaGlsZCB0byBwYXJlbnQgYW5kIHJlc2V0IGJvdW5kYXJ5IGJveFxyXG4gICAgICAgIGlmICh0aGlzLml0ZW1zWzBdLnJvdGF0aW9uLnkgIT09IDApIHtcclxuICAgICAgICAgICAgdGhpcy5pdGVtcy5mb3JFYWNoKChpKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBpdGVtV29ybGRQb3NpdGlvbjogVmVjdG9yMyA9IGkuZ2V0V29ybGRQb3NpdGlvbihuZXcgVmVjdG9yMygpKTtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlKGkpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yb3RhdGlvbi55ID0gd2FsbFJvdGF0aW9uO1xyXG4gICAgICAgICAgICAgICAgaS5wb3NpdGlvbi5jb3B5KGl0ZW1Xb3JsZFBvc2l0aW9uKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuYXR0YWNoKGkpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yb3RhdGlvbi55ID0gMDtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmNyZWF0ZUJvdW5kYXJ5Qm94KCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnJvdGF0aW9uLnkgPSB3YWxsUm90YXRpb247XHJcbiAgICAgICAgdGhpcy50cmF2ZXJzZShjID0+IGMubWF0cml4V29ybGROZWVkc1VwZGF0ZSA9IHRydWUpO1xyXG5cclxuICAgICAgICAvLyB1cGRhdGUgY3VycmVudFdhbGxcclxuICAgICAgICB0aGlzLmN1cnJlbnRXYWxsID0gd2FsbEVkZ2Uud2FsbDtcclxuICAgICAgICB0aGlzLmN1cnJlbnRXYWxsRWRnZSA9IHdhbGxFZGdlO1xyXG4gICAgICAgIHdhbGxFZGdlLndhbGwuYWRkT25JdGVtKHRoaXMgYXMgYW55KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgdXBkYXRlRWRnZVZpc2liaWxpdHkoZWRnZTogRWRnZSkge1xyXG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRXYWxsKSB7XHJcbiAgICAgICAgICAgIGxldCBzaG91bGRTaG93OiBib29sZWFuID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmN1cnJlbnRXYWxsLmJhY2tFZGdlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRXYWxsLmJhY2tFZGdlLmVkZ2VzLmZvckVhY2goKGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZS52aXNpYmxlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNob3VsZFNob3cgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmN1cnJlbnRXYWxsLmZyb250RWRnZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50V2FsbC5mcm9udEVkZ2UuZWRnZXMuZm9yRWFjaChlID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZS52aXNpYmxlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNob3VsZFNob3cgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMudmlzaWJsZSA9IHNob3VsZFNob3c7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX2JvdW5kTW92ZSh2ZWMzOiBWZWN0b3IzKSB7XHJcbiAgICAgICAgY29uc3QgZWRnZSA9IHRoaXMuY3VycmVudFdhbGxFZGdlO1xyXG4gICAgICAgIHZlYzMuYXBwbHlNYXRyaXg0KGVkZ2UuaW50ZXJpb3JUcmFuc2Zvcm0pO1xyXG4gICAgICAgIGVkZ2Uud2FsbC5pdGVtc0NoYW5nZWQgPSB0cnVlO1xyXG5cclxuICAgICAgICBpZiAodmVjMy54IDwgdGhpcy5fc2l6ZVggLyAyLjAgKyB0aGlzLl9wb3NpdGlvbllUb2xlcmFuY2UpIHtcclxuICAgICAgICAgICAgdmVjMy54ID0gdGhpcy5fc2l6ZVggLyAyLjAgKyB0aGlzLl9wb3NpdGlvbllUb2xlcmFuY2U7XHJcbiAgICAgICAgfSBlbHNlIGlmICh2ZWMzLnggPiAoZWRnZS5pbnRlcmlvckRpc3RhbmNlKCkgLSB0aGlzLl9zaXplWCAvIDIuMCAtIHRoaXMuX3Bvc2l0aW9uWVRvbGVyYW5jZSkpIHtcclxuICAgICAgICAgICAgdmVjMy54ID0gZWRnZS5pbnRlcmlvckRpc3RhbmNlKCkgLSB0aGlzLl9zaXplWCAvIDIuMCAtIHRoaXMuX3Bvc2l0aW9uWVRvbGVyYW5jZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmVsZXZhdGlvbkZpeGVkIHx8ICF0aGlzLmVsZXZhdGlvbkFkanVzdGFibGUpIHtcclxuICAgICAgICAgICAgdmVjMy55ID0gdGhpcy5wb3NpdGlvbi55O1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG1heFk6IG51bWJlciA9IHRoaXMuX2dldE1heFkoZWRnZSk7XHJcbiAgICAgICAgICAgIGNvbnN0IG1pblk6IG51bWJlciA9IHRoaXMuX2dldE1pblkoKTtcclxuICAgICAgICAgICAgaWYgKHZlYzMueSA8IG1pblkpIHtcclxuICAgICAgICAgICAgICAgIHZlYzMueSA9IG1pblk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodmVjMy55ID4gbWF4WSkge1xyXG4gICAgICAgICAgICAgICAgdmVjMy55ID0gbWF4WTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLmVsZXZhdGlvbiA9IHZlYzMueSAtIHRoaXMuaGFsZlNpemUueTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZlYzMueiA9IHRoaXMuX3dhbGxPZmZzZXRTY2FsYXI7XHJcbiAgICAgICAgdmVjMy5hcHBseU1hdHJpeDQoZWRnZS5pbnZJbnRlcmlvclRyYW5zZm9ybSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfZ2V0TWF4WShlZGdlOiBIYWxmRWRnZSk6IG51bWJlciB7XHJcbiAgICAgICAgcmV0dXJuIGVkZ2UuaGVpZ2h0IC0gdGhpcy5oYWxmU2l6ZS55IC0gdGhpcy5fcG9zaXRpb25ZVG9sZXJhbmNlO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX2dldE1pblkoKTogbnVtYmVyIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5oYWxmU2l6ZS55ICsgdGhpcy5fcG9zaXRpb25ZVG9sZXJhbmNlO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
2394
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2FsbC1vYmplY3RzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2NsaWVudC9hcHAvcGx1Z2lucy9jb3JlM2QvaXRlbXMvd2FsbC1vYmplY3RzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBLE9BQU8sRUFDSCxXQUFXLEVBQ1gsZUFBZSxFQUNmLGNBQWMsRUFDZCxLQUFLLEVBQUUsVUFBVSxFQUNqQixPQUFPLEVBQ1AsSUFBSSxFQUNKLGlCQUFpQixFQUNqQixvQkFBb0IsRUFBa0MsSUFBSSxFQUMxRCxVQUFVLEVBQUUsS0FBSyxFQUFFLGFBQWEsRUFBRSxjQUFjLEVBQ2hELE9BQU8sRUFDUCxPQUFPLEVBQ1YsTUFBTSxPQUFPLENBQUM7QUFDZixPQUFPLEtBQUssS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMvQixPQUFPLEVBQUMsWUFBWSxFQUFVLE1BQU0sNkJBQTZCLENBQUM7QUFDbEUsT0FBTyxFQUFDLElBQUksRUFBQyxNQUFNLFFBQVEsQ0FBQztBQUM1QixPQUFPLEVBQUMsS0FBSyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3BDLE9BQU8sRUFBQyxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBQyxNQUFNLDJEQUEyRCxDQUFDO0FBQzdHLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFDdkMsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLCtDQUErQyxDQUFDO0FBQ3JFLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxrQ0FBa0MsQ0FBQztBQUM3RCxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sb0NBQW9DLENBQUM7QUFFakUsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUVyQyxPQUFPLEtBQUssUUFBUSxNQUFNLG1CQUFtQixDQUFDO0FBQzlDLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFHdkMsT0FBTyxFQUFDLFdBQVcs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QUFFLE9BQU8sQ0FBQyxVQUFVLEVBQUUsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7d0JBQ3ZOLFFBQVEsQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxhQUFhLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO3dCQUN4TSxRQUFRLENBQUMsU0FBUyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLE1BQU0sYUFBYSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLFVBQVUsRUFBRSxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQzt3QkFDOU0sUUFBUSxDQUFDLFlBQVksR0FBRyxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxNQUFNLGFBQWEsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRSxPQUFPLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxVQUFVLEVBQUUsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7d0JBQ3ZOLFFBQVEsQ0FBQyxLQUFLLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxhQUFhLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FB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QUFFO1lBQ2pCLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7U0FDOUQ7UUFFRCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDakYsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDakcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNqRSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksR0FBRyxVQUFVLENBQUM7UUFFaEMsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUMxRyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLElBQUks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QUFNO1lBQ0gsTUFBTSxJQUFJLEdBQVcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN6QyxNQUFNLElBQUksR0FBVyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDckMsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksRUFBRTtnQkFDZixJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQzthQUNqQjtpQkFBTSxJQUFJLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxFQUFFO2dCQUN0QixJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQzthQUNqQjtZQUNELElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztTQUM3QztRQUVELElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDO1FBQ2hDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUM7SUFDakQsQ0FBQztJQUVPLFFBQVEsQ0FBQyxJQUFjO1FBQzNCLE9BQU8sSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUM7SUFDcEUsQ0FBQztJQUVPLFFBQVE7UUFDWixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQztJQUN0RCxDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gICAgQm94R2VvbWV0cnksXHJcbiAgICBCdWZmZXJBdHRyaWJ1dGUsXHJcbiAgICBCdWZmZXJHZW9tZXRyeSxcclxuICAgIENvbG9yLCBEb3VibGVTaWRlLCBFdWxlciwgSW50ZXJzZWN0aW9uLCBNYXRlcmlhbCxcclxuICAgIE1hdHJpeDQsXHJcbiAgICBNZXNoLFxyXG4gICAgTWVzaEJhc2ljTWF0ZXJpYWwsIE1lc2hQaG9uZ01hdGVyaWFsLFxyXG4gICAgTWVzaFBoeXNpY2FsTWF0ZXJpYWwsIE1lc2hTdGFuZGFyZE1hdGVyaWFsLCBPYmplY3QzRCwgUGF0aCxcclxuICAgIFF1YXRlcm5pb24sIFNoYXBlLCBTaGFwZUdlb21ldHJ5LCBTUkdCQ29sb3JTcGFjZSxcclxuICAgIFZlY3RvcjIsXHJcbiAgICBWZWN0b3IzXHJcbn0gZnJvbSAndGhyZWUnO1xyXG5pbXBvcnQgKiBhcyBUSFJFRSBmcm9tICd0aHJlZSc7XHJcbmltcG9ydCB7c2FtZVRleHR1cmVzLCBUZXh0dXJlfSBmcm9tICcuLi8uLi8uLi9jb3JlL21vZGVsL3RleHR1cmUnO1xyXG5pbXBvcnQge0l0ZW19IGZyb20gJy4vaXRlbSc7XHJcbmltcG9ydCB7VXRpbHN9IGZyb20gJy4uL2NvcmUvdXRpbHMnO1xyXG5pbXBvcnQge2RlZmF1bHRFZGdlQ29sb3IsIGRlZmF1bHRXYWxsQ29sb3J9IGZyb20gJy4uLy4uL3Jvb20tcGxhbm5lci9jb21wb25lbnRzL2Zsb29ycGxhbm5lci9jb25zdC9kZWZhdWx0cyc7XHJcbmltcG9ydCB7VGhyZWVNZXNofSBmcm9tICcuL3RocmVlLW1lc2gnO1xyXG5pbXBvcnQge2lzTmlsbH0gZnJvbSAnLi4vLi4vLi4vY29yZS91dGlscy9mdW5jdGlvbi9pcy1uaWxsLmZ1bmN0aW9uJztcclxuaW1wb3J0IHtUZXh0dXJlVHlwZX0gZnJvbSAnLi4vLi4vLi4vY29yZS9tb2RlbC90ZXh0dXJlLXR5cGUnO1xyXG5pbXBvcnQge01hdGVyaWFsVXRpbHN9IGZyb20gJy4uLy4uLy4uL2NvcmUvdXRpbHMvbWF0ZXJpYWwudXRpbHMnO1xyXG5pbXBvcnQge01ldGFkYXRhfSBmcm9tICcuL21ldGFkYXRhJztcclxuaW1wb3J0IHtJdGVtVHlwZX0gZnJvbSAnLi9pdGVtLXR5cGUnO1xyXG5pbXBvcnQge0NvbGxpc2lvbkluZm99IGZyb20gJy4uL21vZGVsL2NvbGxpc2lvbi1pbmZvJztcclxuaW1wb3J0ICogYXMgR2VvbWV0cnkgZnJvbSAnLi4vbW9kZWwvZ2VvbWV0cnknO1xyXG5pbXBvcnQge0l0ZW1Hcm91cH0gZnJvbSAnLi9pdGVtLWdyb3VwJztcclxuaW1wb3J0IHtPdXRwdXRFbmNvZGluZ30gZnJvbSAnLi4vLi4vLi4vY29yZS9lbnVtL291dHB1dC1lbmNvZGluZy5lbnVtJztcclxuaW1wb3J0IHtGbG9vclBsYW5lSXRlbX0gZnJvbSAnLi9mbG9vci1wbGFuZS1pdGVtJztcclxuaW1wb3J0IHtPYmplY3RVdGlsc30gZnJvbSAnLi4vLi4vLi4vY29yZS91dGlscy9vYmplY3QudXRpbHMnO1xyXG5cclxuLyoqXHJcbiAqIEEgV2FsbCBpcyB0aGUgYmFzaWMgZWxlbWVudCB0byBjcmVhdGUgUm9vbXMuXHJcbiAqXHJcbiAqIFdhbGxzIGNvbnNpc3RzIG9mIHR3byBoYWxmIGVkZ2VzLlxyXG4gKi9cclxuZXhwb3J0IGNsYXNzIFdhbGwge1xyXG5cclxuICAgIC8qKiBUaGUgdW5pcXVlIGlkIG9mIGVhY2ggd2FsbC4gKi9cclxuICAgIHByaXZhdGUgaWQ6IHN0cmluZztcclxuXHJcbiAgICAvKiogRnJvbnQgaXMgdGhlIHBsYW5lIGZyb20gc3RhcnQgdG8gZW5kLiAqL1xyXG4gICAgcHVibGljIGZyb250RWRnZTogSGFsZkVkZ2UgPSBudWxsO1xyXG5cclxuICAgIC8qKiBCYWNrIGlzIHRoZSBwbGFuZSBmcm9tIGVuZCB0byBzdGFydC4gKi9cclxuICAgIHB1YmxpYyBiYWNrRWRnZTogSGFsZkVkZ2UgPSBudWxsO1xyXG5cclxuICAgIC8qKiAqL1xyXG4gICAgcHVibGljIG9ycGhhbiA9IGZhbHNlO1xyXG5cclxuICAgIC8qKiBJdGVtcyBhdHRhY2hlZCB0byB0aGlzIHdhbGwgKi9cclxuICAgIHB1YmxpYyBpdGVtczogSXRlbVtdID0gW107XHJcbiAgICBwdWJsaWMgaXRlbXNDaGFuZ2VkID0gZmFsc2U7XHJcblxyXG4gICAgLyoqICovXHJcbiAgICBwdWJsaWMgb25JdGVtczogSXRlbVtdID0gW107XHJcblxyXG4gICAgLyoqIFRoZSBmcm9udC1zaWRlIHRleHR1cmUuICovXHJcbiAgICBwdWJsaWMgZnJvbnRUZXh0dXJlOiBUZXh0dXJlO1xyXG5cclxuICAgIC8qKiBUaGUgYmFjay1zaWRlIHRleHR1cmUuICovXHJcbiAgICBwdWJsaWMgYmFja1RleHR1cmU6IFRleHR1cmU7XHJcblxyXG4gICAgLyoqIFRoZSBmcm9udC1zaWRlIGNvbG9yLiAqL1xyXG4gICAgcHVibGljIGZyb250Q29sb3IgPSBkZWZhdWx0V2FsbENvbG9yO1xyXG5cclxuICAgIC8qKiBUaGUgYmFjay1zaWRlIGNvbG9yLiAqL1xyXG4gICAgcHVibGljIGJhY2tDb2xvciA9IGRlZmF1bHRXYWxsQ29sb3I7XHJcblxyXG4gICAgcHVibGljIHRoaWNrbmVzcztcclxuXHJcbiAgICBwdWJsaWMgc2V0IGhlaWdodCh2YWx1ZTogbnVtYmVyKSB7XHJcbiAgICAgICAgdGhpcy5faGVpZ2h0ID0gdmFsdWU7XHJcbiAgICAgICAgaWYgKHRoaXMuZnJvbnRFZGdlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZnJvbnRFZGdlLmhlaWdodCA9IHRoaXMuX2hlaWdodDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuYmFja0VkZ2UpIHtcclxuICAgICAgICAgICAgdGhpcy5iYWNrRWRnZS5oZWlnaHQgPSB0aGlzLl9oZWlnaHQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuaXRlbXMuZm9yRWFjaCgoaXRlbTogV2FsbEl0ZW0pID0+IGl0ZW0ucmVwb3NpdGlvbigpKTtcclxuICAgICAgICB0aGlzLm9uSXRlbXMuZm9yRWFjaCgoaXRlbTogV2FsbEl0ZW0pID0+IGl0ZW0ucmVwb3NpdGlvbigpKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0IGhlaWdodCgpOiBudW1iZXIge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9oZWlnaHQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFtb3VudFdhbGxNb3ZlZDogVmVjdG9yMjtcclxuXHJcbiAgICBwcml2YXRlIF9oZWlnaHQ6IG51bWJlcjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIENvbnN0cnVjdHMgYSBuZXcgd2FsbC5cclxuICAgICAqIEBwYXJhbSBzdGFydCBTdGFydCBjb3JuZXIuXHJcbiAgICAgKiBAcGFyYW0gZW5kIEVuZCBjb3JuZXIuXHJcbiAgICAgKi9cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgc3RhcnQ6IENvcm5lciwgcHJpdmF0ZSBlbmQ6IENvcm5lcikge1xyXG4gICAgICAgIHRoaXMuaWQgPSB0aGlzLmdldFV1aWQoKTtcclxuXHJcbiAgICAgICAgdGhpcy5zdGFydC5hdHRhY2hTdGFydCh0aGlzKTtcclxuICAgICAgICB0aGlzLmVuZC5hdHRhY2hFbmQodGhpcyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRVdWlkKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIFt0aGlzLnN0YXJ0LmlkLCB0aGlzLmVuZC5pZF0uam9pbigpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzaG93SGlkZVdhbGwoc2hvdzogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLmZyb250RWRnZSkgeyB0aGlzLmZyb250RWRnZS5zaG93SGlkZUVkZ2Uoc2hvdyk7IH1cclxuICAgICAgICBpZiAodGhpcy5iYWNrRWRnZSkgeyB0aGlzLmJhY2tFZGdlLnNob3dIaWRlRWRnZShzaG93KTsgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyByZXNldEZyb250QmFjaygpIHtcclxuICAgICAgICBpZiAodGhpcy5mcm9udEVkZ2UpIHsgdGhpcy5mcm9udEVkZ2UuZGlzcG9zZVBsYW5lKCk7IH1cclxuICAgICAgICBpZiAodGhpcy5iYWNrRWRnZSkgeyB0aGlzLmJhY2tFZGdlLmRpc3Bvc2VQbGFuZSgpOyB9XHJcbiAgICAgICAgdGhpcy5mcm9udEVkZ2UgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuYmFja0VkZ2UgPSBudWxsO1xyXG4gICAgICAgIHRoaXMub3JwaGFuID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBtb3ZlKHg6IG51bWJlciwgeTogbnVtYmVyKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmFtb3VudFdhbGxNb3ZlZCkge1xyXG4gICAgICAgICAgICB0aGlzLmFtb3VudFdhbGxNb3ZlZCA9IG5ldyBWZWN0b3IyKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGRpZmZYID0gdGhpcy5lbmQueCAtIHRoaXMuc3RhcnQueDtcclxuICAgICAgICBjb25zdCBkaWZmWSA9IHRoaXMuZW5kLnkgLSB0aGlzLnN0YXJ0Lnk7XHJcbiAgICAgICAgY29uc3QgcHJldlN0YXJ0WDogbnVtYmVyID0gdGhpcy5zdGFydC54O1xyXG4gICAgICAgIGNvbnN0IHByZXZTdGFydFk6IG51bWJlciA9IHRoaXMuc3RhcnQueTtcclxuICAgICAgICB0aGlzLnN0YXJ0Lm1vdmUoeCwgeSk7XHJcbiAgICAgICAgdGhpcy5lbmQubW92ZSh4ICsgZGlmZlgsIHkgKyBkaWZmWSk7XHJcbiAgICAgICAgdGhpcy5hbW91bnRXYWxsTW92ZWQuYWRkKG5ldyBWZWN0b3IyKHRoaXMuc3RhcnQueCAtIHByZXZTdGFydFgsIHRoaXMuc3RhcnQueSAtIHByZXZTdGFydFkpKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHJlbGF0aXZlTW92ZShkeDogbnVtYmVyLCBkeTogbnVtYmVyKSB7XHJcbiAgICAgICAgdGhpcy5zdGFydC5yZWxhdGl2ZU1vdmUoZHgsIGR5KTtcclxuICAgICAgICB0aGlzLmVuZC5yZWxhdGl2ZU1vdmUoZHgsIGR5KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZmlyZVJlZHJhdygpIHtcclxuICAgICAgICBpZiAodGhpcy5mcm9udEVkZ2UpIHtcclxuICAgICAgICAgICAgdGhpcy5mcm9udEVkZ2UucmVkcmF3KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmJhY2tFZGdlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYmFja0VkZ2UucmVkcmF3KCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRTdGFydCgpOiBDb3JuZXIge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnN0YXJ0O1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRFbmQoKTogQ29ybmVyIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5lbmQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldFN0YXJ0WCgpOiBudW1iZXIge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnN0YXJ0LmdldFgoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0RW5kWCgpOiBudW1iZXIge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmVuZC5nZXRYKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldFN0YXJ0WSgpOiBudW1iZXIge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnN0YXJ0LmdldFkoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0RW5kWSgpOiBudW1iZXIge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmVuZC5nZXRZKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJlbW92ZSgpIHtcclxuICAgICAgICB0aGlzLnN0YXJ0LmRldGFjaFdhbGwodGhpcyk7XHJcbiAgICAgICAgdGhpcy5lbmQuZGV0YWNoV2FsbCh0aGlzKTtcclxuICAgICAgICB0aGlzLmZyb250VGV4dHVyZSA9IHVuZGVmaW5lZDtcclxuICAgICAgICB0aGlzLmJhY2tUZXh0dXJlID0gdW5kZWZpbmVkO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzZXRTdGFydChjb3JuZXI6IENvcm5lcikge1xyXG4gICAgICAgIHRoaXMuc3RhcnQuZGV0YWNoV2FsbCh0aGlzKTtcclxuICAgICAgICBjb3JuZXIuYXR0YWNoU3RhcnQodGhpcyk7XHJcbiAgICAgICAgdGhpcy5zdGFydCA9IGNvcm5lcjtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2V0RW5kKGNvcm5lcjogQ29ybmVyKSB7XHJcbiAgICAgICAgdGhpcy5lbmQuZGV0YWNoV2FsbCh0aGlzKTtcclxuICAgICAgICBjb3JuZXIuYXR0YWNoRW5kKHRoaXMpO1xyXG4gICAgICAgIHRoaXMuZW5kID0gY29ybmVyO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBkaXN0YW5jZUZyb20oeDogbnVtYmVyLCB5OiBudW1iZXIpOiBudW1iZXIge1xyXG4gICAgICAgIHJldHVybiBVdGlscy5wb2ludERpc3RhbmNlRnJvbUxpbmUoeCwgeSxcclxuICAgICAgICAgICAgdGhpcy5nZXRTdGFydFgoKSwgdGhpcy5nZXRTdGFydFkoKSxcclxuICAgICAgICAgICAgdGhpcy5nZXRFbmRYKCksIHRoaXMuZ2V0RW5kWSgpKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY2xvc2VzdFBvaW50VG8oeDogbnVtYmVyLCB5OiBudW1iZXIpOiB7IHg6IG51bWJlciwgeTogbnVtYmVyIH0ge1xyXG4gICAgICAgIHJldHVybiBVdGlscy5jbG9zZXN0UG9pbnRPbkxpbmUoeCwgeSxcclxuICAgICAgICAgICAgdGhpcy5nZXRTdGFydFgoKSwgdGhpcy5nZXRTdGFydFkoKSxcclxuICAgICAgICAgICAgdGhpcy5nZXRFbmRYKCksIHRoaXMuZ2V0RW5kWSgpKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXNUb09yRnJvbSh4OiBudW1iZXIsIHk6IG51bWJlcikge1xyXG4gICAgICAgIHJldHVybiAodGhpcy5nZXRTdGFydFgoKSA9PT0geCAmJiB0aGlzLmdldFN0YXJ0WSgpID09PSB5KSB8fFxyXG4gICAgICAgICAgICAoIHRoaXMuZ2V0RW5kWCgpID09PSB4ICYmIHRoaXMuZ2V0RW5kWSgpID09PSB5KTtcclxuICAgIH1cclxuXHJcbiAgICAvKiogUmV0dXJuIHRoZSBjb3JuZXIgb3Bwb3NpdGUgb2YgdGhlIG9uZSBwcm92aWRlZC5cclxuICAgICAqIEBwYXJhbSBjb3JuZXIgVGhlIGdpdmVuIGNvcm5lci5cclxuICAgICAqIEByZXR1cm5zIFRoZSBvcHBvc2l0ZSBjb3JuZXIuXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgX29wcG9zaXRlQ29ybmVyKGNvcm5lcjogQ29ybmVyKTogQ29ybmVyIHtcclxuICAgICAgICBpZiAodGhpcy5zdGFydCA9PT0gY29ybmVyKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmVuZDtcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZW5kID09PSBjb3JuZXIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3RhcnQ7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coJ1dhbGwgZG9lcyBub3QgY29ubmVjdCB0byBjb3JuZXInKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCBsZW5ndGgoKTogbnVtYmVyIHtcclxuICAgICAgICByZXR1cm4gVXRpbHMuZGlzdGFuY2UodGhpcy5nZXRTdGFydFgoKSwgdGhpcy5nZXRTdGFydFkoKSwgdGhpcy5nZXRFbmRYKCksIHRoaXMuZ2V0RW5kWSgpKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0IGVkZ2VzTGVuZ3RocygpOiBudW1iZXJbXSB7XHJcbiAgICAgICAgY29uc3QgbGVuZ3RoczogbnVtYmVyW10gPSBbXTtcclxuICAgICAgICBpZiAodGhpcy5mcm9udEVkZ2UpIHtcclxuICAgICAgICAgICAgbGVuZ3Rocy5wdXNoKHRoaXMuZnJvbnRFZGdlLmludGVyaW9yRGlzdGFuY2UoKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmJhY2tFZGdlKSB7XHJcbiAgICAgICAgICAgIGxlbmd0aHMucHVzaCh0aGlzLmJhY2tFZGdlLmludGVyaW9yRGlzdGFuY2UoKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBsZW5ndGhzO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB1cGRhdGVJbldhbGxJdGVtcygpIHtcclxuICAgICAgICB0aGlzLml0ZW1zLmZpbHRlcihpdGVtID0+IGl0ZW0gaW5zdGFuY2VvZiBJbldhbGxJdGVtKS5mb3JFYWNoKChpdGVtOiBJbldhbGxJdGVtKSA9PiBpdGVtLm9uV2FsbFVwZGF0ZWQodGhpcykpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB1cGRhdGVXYWxsSXRlbXMoKSB7XHJcbiAgICAgICAgdGhpcy5pdGVtcy5maWx0ZXIoaXRlbSA9PiBpdGVtIGluc3RhbmNlb2YgV2FsbEl0ZW0pLmZvckVhY2goKGl0ZW06IFdhbGxJdGVtKSA9PiBpdGVtLm9uV2FsbE1vdmVkKHRoaXMpKTtcclxuICAgICAgICB0aGlzLm9uSXRlbXMuZmlsdGVyKGl0ZW0gPT4gaXRlbSBpbnN0YW5jZW9mIFdhbGxJdGVtIHx8IGl0ZW0gaW5zdGFuY2VvZiBXYWxsSXRlbUdyb3VwKS5mb3JFYWNoKChpdGVtOiBXYWxsSXRlbSkgPT4gaXRlbS5vbldhbGxNb3ZlZCh0aGlzKSk7XHJcbiAgICAgICAgdGhpcy5hbW91bnRXYWxsTW92ZWQgPSB1bmRlZmluZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldEl0ZW1zKCk6IEl0ZW1bXSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaXRlbXM7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldFdhbGxJdGVtcygpOiBXYWxsSXRlbVtdIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5pdGVtcy5maWx0ZXIoaXRlbSA9PiBpdGVtIGluc3RhbmNlb2YgV2FsbEl0ZW0pIGFzIFdhbGxJdGVtW107XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCBzaWRlKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmZyb250RWRnZSAmJiB0aGlzLmJhY2tFZGdlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBUSFJFRS5Eb3VibGVTaWRlO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5mcm9udEVkZ2UpIHtcclxuICAgICAgICAgICAgcmV0dXJuIFRIUkVFLkZyb250U2lkZTtcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuYmFja0VkZ2UpIHtcclxuICAgICAgICAgICAgcmV0dXJuIFRIUkVFLkJhY2tTaWRlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYWRkSXRlbShpdGVtOiBJdGVtKSB7XHJcbiAgICAgICAgdGhpcy5pdGVtcy5wdXNoKGl0ZW0pO1xyXG4gICAgICAgIHRoaXMuaXRlbXNDaGFuZ2VkID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcmVtb3ZlSXRlbShpdGVtOiBJdGVtKSB7XHJcbiAgICAgICAgdGhpcy5pdGVtcyA9IHRoaXMuaXRlbXMuZmlsdGVyKGkgPT4gaSAhPT0gaXRlbSk7XHJcbiAgICAgICAgdGhpcy5pdGVtc0NoYW5nZWQgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhZGRPbkl0ZW0oaXRlbTogSXRlbSkge1xyXG4gICAgICAgIHRoaXMub25JdGVtcy5wdXNoKGl0ZW0pO1xyXG4gICAgICAgIHRoaXMuaXRlbXNDaGFuZ2VkID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcmVtb3ZlT25JdGVtKGl0ZW06IEl0ZW0pIHtcclxuICAgICAgICB0aGlzLm9uSXRlbXMgPSB0aGlzLm9uSXRlbXMuZmlsdGVyKGkgPT4gaSAhPT0gaXRlbSk7XHJcbiAgICAgICAgdGhpcy5pdGVtc0NoYW5nZWQgPSB0cnVlO1xyXG4gICAgfVxyXG59XHJcblxyXG4vKipcclxuICogQ29ybmVycyBhcmUgdXNlZCB0byBkZWZpbmUgV2FsbHMuXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgQ29ybmVyIHtcclxuXHJcbiAgICAvKiogQXJyYXkgb2Ygc3RhcnQgd2FsbHMuICovXHJcbiAgICBwdWJsaWMgd2FsbFN0YXJ0czogV2FsbFtdID0gW107XHJcblxyXG4gICAgLyoqIEFycmF5IG9mIGVuZCB3YWxscy4gKi9cclxuICAgIHB1YmxpYyB3YWxsRW5kczogV2FsbFtdID0gW107XHJcblxyXG4gICAgLyoqIENvbnN0cnVjdHMgYSBjb3JuZXIuXHJcbiAgICAgKiBAcGFyYW0geCBYIGNvb3JkaW5hdGUuXHJcbiAgICAgKiBAcGFyYW0geSBZIGNvb3JkaW5hdGUuXHJcbiAgICAgKiBAcGFyYW0gaWQgQW4gb3B0aW9uYWwgdW5pcXVlIGlkLiBJZiBub3Qgc2V0LCBjcmVhdGVkIGludGVybmFsbHkuXHJcbiAgICAgKi9cclxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyB4OiBudW1iZXIsIHB1YmxpYyB5OiBudW1iZXIsIHB1YmxpYyBpZD86IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMuaWQgPSBpZCB8fCBVdGlscy5ndWlkKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFic29yYldhbGxzRnJvbShjb3JuZXI6IENvcm5lcikge1xyXG4gICAgICAgIGZvciAobGV0IGkgPSBjb3JuZXIud2FsbFN0YXJ0cy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xyXG4gICAgICAgICAgICBjb3JuZXIud2FsbFN0YXJ0c1tpXS5zZXRTdGFydCh0aGlzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IGNvcm5lci53YWxsRW5kcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xyXG4gICAgICAgICAgICBjb3JuZXIud2FsbEVuZHNbaV0uc2V0RW5kKHRoaXMpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEByZXR1cm5zXHJcbiAgICAgKiBAZGVwcmVjYXRlZFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0WCgpOiBudW1iZXIge1xyXG4gICAgICAgIHJldHVybiB0aGlzLng7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAcmV0dXJuc1xyXG4gICAgICogQGRlcHJlY2F0ZWRcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldFkoKTogbnVtYmVyIHtcclxuICAgICAgICByZXR1cm4gdGhpcy55O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBNb3ZlcyBjb3JuZXIgcmVsYXRpdmVseSB0byBuZXcgcG9zaXRpb24uXHJcbiAgICAgKiBAcGFyYW0gZHggVGhlIGRlbHRhIHguXHJcbiAgICAgKiBAcGFyYW0gZHkgVGhlIGRlbHRhIHkuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyByZWxhdGl2ZU1vdmUoZHg6IG51bWJlciwgZHk6IG51bWJlcikge1xyXG4gICAgICAgIHRoaXMubW92ZSh0aGlzLnggKyBkeCwgdGhpcy55ICsgZHkpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBSZW1vdmVzIGFsbCB3YWxscy4gKi9cclxuICAgIHB1YmxpYyByZW1vdmVBbGwoKSB7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLndhbGxTdGFydHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdGhpcy53YWxsU3RhcnRzW2ldLnJlbW92ZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMud2FsbEVuZHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdGhpcy53YWxsRW5kc1tpXS5yZW1vdmUoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIE1vdmVzIGNvcm5lciB0byBuZXcgcG9zaXRpb24uXHJcbiAgICAgKiBAcGFyYW0gbmV3WCBUaGUgbmV3IHggcG9zaXRpb24uXHJcbiAgICAgKiBAcGFyYW0gbmV3WSBUaGUgbmV3IHkgcG9zaXRpb24uXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBtb3ZlKG5ld1g6IG51bWJlciwgbmV3WTogbnVtYmVyKSB7XHJcbiAgICAgICAgdGhpcy54ID0gbmV3WDtcclxuICAgICAgICB0aGlzLnkgPSBuZXdZO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBHZXRzIHRoZSBhZGphY2VudCBjb3JuZXJzLlxyXG4gICAgICogQHJldHVybnMgQXJyYXkgb2YgY29ybmVycy5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGFkamFjZW50Q29ybmVycygpOiBDb3JuZXJbXSB7XHJcbiAgICAgICAgY29uc3QgcmV0QXJyYXkgPSBbXTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMud2FsbFN0YXJ0cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICByZXRBcnJheS5wdXNoKHRoaXMud2FsbFN0YXJ0c1tpXS5nZXRFbmQoKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy53YWxsRW5kcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICByZXRBcnJheS5wdXNoKHRoaXMud2FsbEVuZHNbaV0uZ2V0U3RhcnQoKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXRBcnJheTtcclxuICAgIH1cclxuXHJcbiAgICAvKiogQ2hlY2tzIGlmIGEgd2FsbCBpcyBjb25uZWN0ZWQuXHJcbiAgICAgKiBAcGFyYW0gd2FsbCBBIHdhbGwuXHJcbiAgICAgKiBAcmV0dXJucyBUcnVlIGluIGNhc2Ugb2YgY29ubmVjdGlvbi5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGlzV2FsbENvbm5lY3RlZCh3YWxsOiBXYWxsKTogYm9vbGVhbiB7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLndhbGxTdGFydHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMud2FsbFN0YXJ0c1tpXSA9PT0gd2FsbCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLndhbGxFbmRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLndhbGxFbmRzW2ldID09PSB3YWxsKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZGlzdGFuY2VGcm9tKHg6IG51bWJlciwgeTogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgICAgICBjb25zdCBkaXN0YW5jZSA9IFV0aWxzLmRpc3RhbmNlKHgsIHksIHRoaXMueCwgdGhpcy55KTtcclxuICAgICAgICByZXR1cm4gZGlzdGFuY2U7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIEdldHMgdGhlIGRpc3RhbmNlIGZyb20gYSB3YWxsLlxyXG4gICAgICogQHBhcmFtIHdhbGwgQSB3YWxsLlxyXG4gICAgICogQHJldHVybnMgVGhlIGRpc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZGlzdGFuY2VGcm9tV2FsbCh3YWxsOiBXYWxsKTogbnVtYmVyIHtcclxuICAgICAgICByZXR1cm4gd2FsbC5kaXN0YW5jZUZyb20odGhpcy54LCB0aGlzLnkpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBHZXRzIHRoZSBkaXN0YW5jZSBmcm9tIGEgY29ybmVyLlxyXG4gICAgICogQHBhcmFtIGNvcm5lciBBIGNvcm5lci5cclxuICAgICAqIEByZXR1cm5zIFRoZSBkaXN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGRpc3RhbmNlRnJvbUNvcm5lcihjb3JuZXI6IENvcm5lcik6IG51bWJlciB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGlzdGFuY2VGcm9tKGNvcm5lci54LCBjb3JuZXIueSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIERldGFjaGVzIGEgd2FsbC5cclxuICAgICAqIEBwYXJhbSB3YWxsIEEgd2FsbC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGRldGFjaFdhbGwod2FsbDogV2FsbCkge1xyXG4gICAgICAgIFV0aWxzLnJlbW92ZVZhbHVlKHRoaXMud2FsbFN0YXJ0cywgd2FsbCk7XHJcbiAgICAgICAgVXRpbHMucmVtb3ZlVmFsdWUodGhpcy53YWxsRW5kcywgd2FsbCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIEF0dGFjaGVzIGEgc3RhcnQgd2FsbC5cclxuICAgICAqIEBwYXJhbSB3YWxsIEEgd2FsbC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGF0dGFjaFN0YXJ0KHdhbGw6IFdhbGwpIHtcclxuICAgICAgICB0aGlzLndhbGxTdGFydHMucHVzaCh3YWxsKTtcclxuICAgIH1cclxuXHJcbiAgICAvKiogQXR0YWNoZXMgYW4gZW5kIHdhbGwuXHJcbiAgICAgKiBAcGFyYW0gd2FsbCBBIHdhbGwuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBhdHRhY2hFbmQod2FsbDogV2FsbCkge1xyXG4gICAgICAgIHRoaXMud2FsbEVuZHMucHVzaCh3YWxsKTtcclxuICAgIH1cclxuXHJcbiAgICAvKiogR2V0IHdhbGwgdG8gY29ybmVyLlxyXG4gICAgICogQHBhcmFtIGNvcm5lciBBIGNvcm5lci5cclxuICAgICAqIEByZXR1cm4gVGhlIGFzc29jaWF0ZWQgd2FsbCBvciBudWxsLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgd2FsbFRvKGNvcm5lcjogQ29ybmVyKTogV2FsbCB7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLndhbGxTdGFydHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMud2FsbFN0YXJ0c1tpXS5nZXRFbmQoKSA9PT0gY29ybmVyKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy53YWxsU3RhcnRzW2ldO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBHZXQgd2FsbCBmcm9tIGNvcm5lci5cclxuICAgICAqIEBwYXJhbSBjb3JuZXIgQSBjb3JuZXIuXHJcbiAgICAgKiBAcmV0dXJuIFRoZSBhc3NvY2lhdGVkIHdhbGwgb3IgbnVsbC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIHdhbGxGcm9tKGNvcm5lcjogQ29ybmVyKTogV2FsbCB7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLndhbGxFbmRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLndhbGxFbmRzW2ldLmdldFN0YXJ0KCkgPT09IGNvcm5lcikge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMud2FsbEVuZHNbaV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIEdldCB3YWxsIHRvIG9yIGZyb20gY29ybmVyLlxyXG4gICAgICogQHBhcmFtIGNvcm5lciBBIGNvcm5lci5cclxuICAgICAqIEByZXR1cm4gVGhlIGFzc29jaWF0ZWQgd2FsbCBvciBudWxsLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgd2FsbFRvT3JGcm9tKGNvcm5lcjogQ29ybmVyKTogV2FsbCB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMud2FsbFRvKGNvcm5lcikgfHwgdGhpcy53YWxsRnJvbShjb3JuZXIpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgc3RhcnRXYWxscygpOiBXYWxsW10ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLndhbGxTdGFydHM7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCBlbmRXYWxscygpOiBXYWxsW10ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLndhbGxFbmRzO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBFbnN1cmUgd2UgZG8gbm90IGhhdmUgZHVwbGljYXRlIHdhbGxzIChpLmUuIHNhbWUgc3RhcnQgYW5kIGVuZCBwb2ludHMpICovXHJcbiAgICBwdWJsaWMgcmVtb3ZlRHVwbGljYXRlV2FsbHMoKSB7XHJcbiAgICAgICAgLy8gZGVsZXRlIHRoZSB3YWxsIGJldHdlZW4gdGhlc2UgY29ybmVycywgaWYgaXQgZXhpc3RzXHJcbiAgICAgICAgY29uc3Qgd2FsbEVuZHBvaW50cyA9IHt9O1xyXG4gICAgICAgIGNvbnN0IHdhbGxTdGFydHBvaW50cyA9IHt9O1xyXG4gICAgICAgIGZvciAobGV0IGkgPSB0aGlzLndhbGxTdGFydHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMud2FsbFN0YXJ0c1tpXS5nZXRFbmQoKSA9PT0gdGhpcykge1xyXG4gICAgICAgICAgICAgICAgLy8gcmVtb3ZlIHplcm8gbGVuZ3RoIHdhbGxcclxuICAgICAgICAgICAgICAgIHRoaXMud2FsbFN0YXJ0c1tpXS5yZW1vdmUoKTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLndhbGxTdGFydHNbaV0uZ2V0RW5kKCkuaWQgaW4gd2FsbEVuZHBvaW50cykge1xyXG4gICAgICAgICAgICAgICAgLy8gcmVtb3ZlIGR1cGxpY2F0ZWQgd2FsbFxyXG4gICAgICAgICAgICAgICAgdGhpcy53YWxsU3RhcnRzW2ldLnJlbW92ZSgpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgd2FsbEVuZHBvaW50c1t0aGlzLndhbGxTdGFydHNbaV0uZ2V0RW5kKCkuaWRdID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBmb3IgKGxldCBpID0gdGhpcy53YWxsRW5kcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy53YWxsRW5kc1tpXS5nZXRTdGFydCgpID09PSB0aGlzKSB7XHJcbiAgICAgICAgICAgICAgICAvLyByZW1vdmVkIHplcm8gbGVuZ3RoIHdhbGxcclxuICAgICAgICAgICAgICAgIHRoaXMud2FsbEVuZHNbaV0ucmVtb3ZlKCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy53YWxsRW5kc1tpXS5nZXRTdGFydCgpLmlkIGluIHdhbGxTdGFydHBvaW50cykge1xyXG4gICAgICAgICAgICAgICAgLy8gcmVtb3ZlZCBkdXBsaWNhdGVkIHdhbGxcclxuICAgICAgICAgICAgICAgIHRoaXMud2FsbEVuZHNbaV0ucmVtb3ZlKCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB3YWxsU3RhcnRwb2ludHNbdGhpcy53YWxsRW5kc1tpXS5nZXRTdGFydCgpLmlkXSA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIGZpbmQgYW5kIHJlbW92ZSBjeWNsZSB+IG1vcmUgdGhhbiBhIHNpbmdsZSB3YWxsIGJldHdlZW4gMiBjb3JuZXJzXHJcbiAgICAgICAgZm9yIChjb25zdCBvdXRXYWxsIG9mIHRoaXMud2FsbFN0YXJ0cykge1xyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGluV2FsbCBvZiB0aGlzLndhbGxFbmRzKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAob3V0V2FsbC5nZXRFbmQoKSA9PT0gaW5XYWxsLmdldFN0YXJ0KCkpIHtcclxuICAgICAgICAgICAgICAgICAgICBvdXRXYWxsLnJlbW92ZSgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcblxyXG4vKipcclxuICogSGFsZiBFZGdlcyBhcmUgY3JlYXRlZCBieSBSb29tLlxyXG4gKlxyXG4gKiBPbmNlIHJvb21zIGhhdmUgYmVlbiBpZGVudGlmaWVkLCBIYWxmIEVkZ2VzIGFyZSBjcmVhdGVkIGZvciBlYWNoIGludGVyaW9yIHdhbGwuXHJcbiAqXHJcbiAqIEEgd2FsbCBjYW4gaGF2ZSB0d28gaGFsZiBlZGdlcyBpZiBpdCBpcyB2aXNpYmxlIGZyb20gYm90aCBzaWRlcy5cclxuICovXHJcbmV4cG9ydCBjbGFzcyBIYWxmRWRnZSB7XHJcblxyXG4gICAgLyoqIFRoZSBzdWNjZXNzb3IgZWRnZSBpbiBDQ1cgPz8/IGRpcmVjdGlvbi4gKi9cclxuICAgIHB1YmxpYyBuZXh0OiBIYWxmRWRnZTtcclxuXHJcbiAgICAvKiogVGhlIHByZWRlY2Vzc29yIGVkZ2UgaW4gQ0NXID8/PyBkaXJlY3Rpb24uICovXHJcbiAgICBwdWJsaWMgcHJldjogSGFsZkVkZ2U7XHJcblxyXG4gICAgLyoqICovXHJcbiAgICBwdWJsaWMgb2Zmc2V0OiBudW1iZXI7XHJcblxyXG4gICAgLyoqIFdoZW4gaGVpZ2h0IG9mIHdhbGxzIGFyZSBtb2RpZmllZCwgcGxhbmUgc2hvdWxkIGJlIHJlY3JlYXRlZCAqL1xyXG4gICAgcHVibGljIHNldCBoZWlnaHQodmFsdWU6IG51bWJlcikge1xyXG4gICAgICAgIHRoaXMuX2hlaWdodCA9IHZhbHVlO1xyXG4gICAgICAgIHRoaXMuZGlzcG9zZVBsYW5lKCk7XHJcbiAgICAgICAgdGhpcy5nZW5lcmF0ZVBsYW5lKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCBoZWlnaHQoKTogbnVtYmVyIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5faGVpZ2h0O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiB1c2VkIGZvciBpbnRlcnNlY3Rpb24gdGVzdGluZy4uLiBub3QgY29udmluY2VkIHRoaXMgYmVsb25ncyBoZXJlICovXHJcbiAgICBwdWJsaWMgcGxhbmU6IFRocmVlTWVzaCA9IG51bGw7XHJcblxyXG4gICAgLyoqIHRyYW5zZm9ybSBmcm9tIHdvcmxkIGNvb3JkcyB0byB3YWxsIHBsYW5lcyAoej0wKSAqL1xyXG4gICAgcHVibGljIGludGVyaW9yVHJhbnNmb3JtID0gbmV3IE1hdHJpeDQoKTtcclxuXHJcbiAgICAvKiogdHJhbnNmb3JtIGZyb20gd29ybGQgY29vcmRzIHRvIHdhbGwgcGxhbmVzICh6PTApICovXHJcbiAgICBwdWJsaWMgaW52SW50ZXJpb3JUcmFuc2Zvcm0gPSBuZXcgTWF0cml4NCgpO1xyXG5cclxuICAgIC8qKiB0cmFuc2Zvcm0gZnJvbSB3b3JsZCBjb29yZHMgdG8gd2FsbCBwbGFuZXMgKHo9MCkgKi9cclxuICAgIHByaXZhdGUgZXh0ZXJpb3JUcmFuc2Zvcm0gPSBuZXcgTWF0cml4NCgpO1xyXG5cclxuICAgIC8qKiB0cmFuc2Zvcm0gZnJvbSB3b3JsZCBjb29yZHMgdG8gd2FsbCBwbGFuZXMgKHo9MCkgKi9cclxuICAgIHByaXZhdGUgaW52RXh0ZXJpb3JUcmFuc2Zvcm0gPSBuZXcgTWF0cml4NCgpO1xyXG5cclxuICAgIHByaXZhdGUgX2hlaWdodDogbnVtYmVyO1xyXG5cclxuICAgIC8qKiAqL1xyXG5cclxuICAgIHB1YmxpYyBlZGdlczogRWRnZVtdID0gW107XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDb25zdHJ1Y3RzIGEgaGFsZiBlZGdlLlxyXG4gICAgICogQHBhcmFtIHJvb20gVGhlIGFzc29jaWF0ZWQgcm9vbS5cclxuICAgICAqIEBwYXJhbSB3YWxsIFRoZSBjb3JyZXNwb25kaW5nIHdhbGwuXHJcbiAgICAgKiBAcGFyYW0gZnJvbnQgVHJ1ZSBpZiBmcm9udCBzaWRlLlxyXG4gICAgICovXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJvb206IFJvb20sIHB1YmxpYyB3YWxsOiBXYWxsLCBwdWJsaWMgZnJvbnQ6IGJvb2xlYW4pIHtcclxuICAgICAgICB0aGlzLmZyb250ID0gZnJvbnQgfHwgZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMub2Zmc2V0ID0gd2FsbC50aGlja25lc3MgLyAyLjA7XHJcbiAgICAgICAgdGhpcy5oZWlnaHQgPSB3YWxsLmhlaWdodDtcclxuICAgICAgICBpZiAodGhpcy5mcm9udCkge1xyXG4gICAgICAgICAgICB0aGlzLndhbGwuZnJvbnRFZGdlID0gdGhpcztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLndhbGwuYmFja0VkZ2UgPSB0aGlzO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLndhbGwudXBkYXRlSW5XYWxsSXRlbXMoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2hvd0hpZGVFZGdlKHNob3c6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmVkZ2VzLmZvckVhY2goZSA9PiBlLnNob3dIaWRlRWRnZShzaG93KSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHVwZGF0ZVZpc2liaWxpdHkoY2FtZXJhUG9zaXRpb246IFZlY3RvcjMpOiBib29sZWFuIHtcclxuICAgICAgICBsZXQgdmlzaWJpbGl0eUNoYW5nZWQ6IGJvb2xlYW4gPSBudWxsO1xyXG4gICAgICAgIHRoaXMuZWRnZXMuZm9yRWFjaChlID0+IHtcclxuICAgICAgICAgICAgY29uc3QgZWRnZVZpc2liaWxpdHlDaGFuZ2VkID0gZS51cGRhdGVWaXNpYmlsaXR5KGNhbWVyYVBvc2l0aW9uKTtcclxuICAgICAgICAgICAgaWYgKGVkZ2VWaXNpYmlsaXR5Q2hhbmdlZCAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgdmlzaWJpbGl0eUNoYW5nZWQgPSBlZGdlVmlzaWJpbGl0eUNoYW5nZWQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gdmlzaWJpbGl0eUNoYW5nZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHVwZGF0ZVZpc2libGl0eSh2aXNpYmlsaXR5OiBib29sZWFuKSB7XHJcbiAgICAgICAgdGhpcy5lZGdlcy5mb3JFYWNoKGUgPT4ge1xyXG4gICAgICAgICAgICBlLnZpc2libGUgPSB2aXNpYmlsaXR5O1xyXG4gICAgICAgICAgICBlLnVwZGF0ZU9iamVjdFZpc2liaWxpdHkoKTtcclxuICAgICAgICAgICAgZS5zZXRBbGxQbGFuZXNWaXNpYmxlKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFzeW5jIHJlZHJhdygpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgICAgICAvLyB0aGlzLmVkZ2VzLmZvckVhY2goZSA9PiBlLnJlZHJhdygpKTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuZWRnZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5lZGdlc1tpXS5yZWRyYXcoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0VGV4dHVyZSgpOiBUZXh0dXJlIHtcclxuICAgICAgICBpZiAodGhpcy5mcm9udCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy53YWxsLmZyb250VGV4dHVyZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy53YWxsLmJhY2tUZXh0dXJlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0Q29sb3IoKTogbnVtYmVyIHtcclxuICAgICAgICBpZiAodGhpcy5mcm9udCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy53YWxsLmZyb250Q29sb3I7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMud2FsbC5iYWNrQ29sb3I7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICpcclxuICAgICAqL1xyXG4gICAgcHVibGljIGFzeW5jIHNldFRleHR1cmUodGV4dHVyZTogVGV4dHVyZSk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgICAgIGlmICh0ZXh0dXJlKSB7XHJcbiAgICAgICAgICAgIHRleHR1cmUucm91Z2huZXNzID0gIWlzTmlsbCh0ZXh0dXJlLnJvdWdobmVzcykgPyB0ZXh0dXJlLnJvdWdobmVzcyA6IDAuODtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmZyb250KSB7XHJcbiAgICAgICAgICAgIHRoaXMud2FsbC5mcm9udFRleHR1cmUgPSB0ZXh0dXJlO1xyXG4gICAgICAgICAgICB0aGlzLndhbGwuZnJvbnRDb2xvciA9IGRlZmF1bHRXYWxsQ29sb3I7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy53YWxsLmJhY2tUZXh0dXJlID0gdGV4dHVyZTtcclxuICAgICAgICAgICAgdGhpcy53YWxsLmJhY2tDb2xvciA9IGRlZmF1bHRXYWxsQ29sb3I7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIHRoaXMucmVkcmF3Q2FsbGJhY2tzLmZpcmUoKTtcclxuICAgICAgICBhd2FpdCB0aGlzLnJlZHJhdygpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzZXRDb2xvcih2YWx1ZTogbnVtYmVyKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZnJvbnQpIHtcclxuICAgICAgICAgICAgdGhpcy53YWxsLmZyb250VGV4dHVyZSA9IG51bGw7XHJcbiAgICAgICAgICAgIHRoaXMud2FsbC5mcm9udENvbG9yID0gdmFsdWU7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy53YWxsLmJhY2tUZXh0dXJlID0gbnVsbDtcclxuICAgICAgICAgICAgdGhpcy53YWxsLmJhY2tDb2xvciA9IHZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyB0aGlzLnJlZHJhd0NhbGxiYWNrcy5maXJlKCk7XHJcbiAgICAgICAgdGhpcy5yZWRyYXcoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIHRoaXMgZmVlbHMgaGFja3ksIGJ1dCBuZWVkIHdhbGwgaXRlbXNcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdlbmVyYXRlUGxhbmUoKSB7XHJcbiAgICAgICAgZnVuY3Rpb24gdHJhbnNmb3JtQ29ybmVyKGNvcm5lcikge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IFZlY3RvcjMoY29ybmVyLngsIDAsIGNvcm5lci55KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMub2Zmc2V0ID0gdGhpcy53YWxsLnRoaWNrbmVzcyAvIDIuMDtcclxuICAgICAgICB0aGlzLl9oZWlnaHQgPSB0aGlzLndhbGwuaGVpZ2h0O1xyXG5cclxuICAgICAgICBjb25zdCB2MSA9IHRyYW5zZm9ybUNvcm5lcih0aGlzLmludGVyaW9yU3RhcnQoKSk7XHJcbiAgICAgICAgY29uc3QgdjIgPSB0cmFuc2Zvcm1Db3JuZXIodGhpcy5pbnRlcmlvckVuZCgpKTtcclxuICAgICAgICBjb25zdCB2MyA9IHYyLmNsb25lKCk7XHJcbiAgICAgICAgdjMueSA9IHRoaXMud2FsbC5oZWlnaHQ7XHJcbiAgICAgICAgY29uc3QgdjQgPSB2MS5jbG9uZSgpO1xyXG4gICAgICAgIHY0LnkgPSB0aGlzLndhbGwuaGVpZ2h0O1xyXG5cclxuICAgICAgICBjb25zdCBnZW9tZXRyeSA9IG5ldyBCdWZmZXJHZW9tZXRyeSgpLnNldEZyb21Qb2ludHMoW3YxLCB2MiwgdjMsIHY0XSk7XHJcbiAgICAgICAgY29uc3QgZmFjZVZlcnRleEluZGV4QXJyYXk6IFVpbnQxNkFycmF5ID0gbmV3IFVpbnQxNkFycmF5KFswLCAxLCAyLCAwLCAyLCAzXSk7XHJcbiAgICAgICAgY29uc3QgZmFjZUJ1ZmZlckF0dHJpYnV0ZTogQnVmZmVyQXR0cmlidXRlID0gbmV3IEJ1ZmZlckF0dHJpYnV0ZShmYWNlVmVydGV4SW5kZXhBcnJheSwgMSk7XHJcbiAgICAgICAgZ2VvbWV0cnkuc2V0SW5kZXgoZmFjZUJ1ZmZlckF0dHJpYnV0ZSk7XHJcbiAgICAgICAgZ2VvbWV0cnkuY29tcHV0ZVZlcnRleE5vcm1hbHMoKTtcclxuICAgICAgICBnZW9tZXRyeS5jb21wdXRlQm91bmRpbmdCb3goKTtcclxuXHJcbiAgICAgICAgdGhpcy5wbGFuZSA9IG5ldyBUaHJlZU1lc2goZ2VvbWV0cnksIG5ldyBNZXNoUGh5c2ljYWxNYXRlcmlhbChudWxsKSk7XHJcbiAgICAgICAgdGhpcy5wbGFuZS5uYW1lID0gYGhhbGYtZWRnZS1wbGFuZS0ke3RoaXMuZnJvbnQgPyAnZnJvbnQnIDogJ2JhY2snfWA7XHJcbiAgICAgICAgdGhpcy5wbGFuZS5jYXN0U2hhZG93ID0gdHJ1ZTtcclxuICAgICAgICBVdGlscy5zZXRQbGFuZVZpc2liaWxpdHkodGhpcy5wbGFuZSwgdHJ1ZSk7XHJcbiAgICAgICAgdGhpcy5wbGFuZS51c2VyRGF0YS5lZGdlID0gdGhpcztcclxuXHJcbiAgICAgICAgdGhpcy5jb21wdXRlVHJhbnNmb3JtcyhcclxuICAgICAgICAgICAgdGhpcy5pbnRlcmlvclRyYW5zZm9ybSwgdGhpcy5pbnZJbnRlcmlvclRyYW5zZm9ybSxcclxuICAgICAgICAgICAgdGhpcy5pbnRlcmlvclN0YXJ0KCksIHRoaXMuaW50ZXJpb3JFbmQoKSk7XHJcbiAgICAgICAgdGhpcy5jb21wdXRlVHJhbnNmb3JtcyhcclxuICAgICAgICAgICAgdGhpcy5leHRlcmlvclRyYW5zZm9ybSwgdGhpcy5pbnZFeHRlcmlvclRyYW5zZm9ybSxcclxuICAgICAgICAgICAgdGhpcy5leHRlcmlvclN0YXJ0KCksIHRoaXMuZXh0ZXJpb3JFbmQoKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGRpc3Bvc2VQbGFuZSgpIHtcclxuICAgICAgICBpZiAodGhpcy5wbGFuZSkge1xyXG4gICAgICAgICAgICBPYmplY3RVdGlscy5EaXNwb3NlT2JqZWN0KHRoaXMucGxhbmUpO1xyXG4gICAgICAgICAgICB0aGlzLnBsYW5lID0gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGludGVyaW9yRGlzdGFuY2UoKTogbnVtYmVyIHtcclxuICAgICAgICBjb25zdCBzdGFydCA9IHRoaXMuaW50ZXJpb3JTdGFydCgpO1xyXG4gICAgICAgIGNvbnN0IGVuZCA9IHRoaXMuaW50ZXJpb3JFbmQoKTtcclxuICAgICAgICByZXR1cm4gVXRpbHMuZGlzdGFuY2Uoc3RhcnQueCwgc3RhcnQueSwgZW5kLngsIGVuZC55KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGNvbXB1dGVUcmFuc2Zvcm1zKHRyYW5zZm9ybSwgaW52VHJhbnNmb3JtLCBzdGFydCwgZW5kKSB7XHJcblxyXG4gICAgICAgIGNvbnN0IHYxID0gc3RhcnQ7XHJcbiAgICAgICAgY29uc3QgdjIgPSBlbmQ7XHJcblxyXG4gICAgICAgIGNvbnN0IGFuZ2xlID0gVXRpbHMuYW5nbGUoMSwgMCwgdjIueCAtIHYxLngsIHYyLnkgLSB2MS55KTtcclxuXHJcbiAgICAgICAgY29uc3QgdHQgPSBuZXcgTWF0cml4NCgpO1xyXG4gICAgICAgIHR0Lm1ha2VUcmFuc2xhdGlvbigtdjEueCwgMCwgLXYxLnkpO1xyXG4gICAgICAgIGNvbnN0IHRyID0gbmV3IE1hdHJpeDQoKTtcclxuICAgICAgICB0ci5tYWtlUm90YXRpb25ZKC1hbmdsZSk7XHJcbiAgICAgICAgdHJhbnNmb3JtLm11bHRpcGx5TWF0cmljZXModHIsIHR0KTtcclxuICAgICAgICBpbnZUcmFuc2Zvcm0uY29weSh0cmFuc2Zvcm0pLmludmVydCgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBHZXRzIHRoZSBkaXN0YW5jZSBmcm9tIHNwZWNpZmllZCBwb2ludC5cclxuICAgICAqIEBwYXJhbSB4IFggY29vcmRpbmF0ZSBvZiB0aGUgcG9pbnQuXHJcbiAgICAgKiBAcGFyYW0geSBZIGNvb3JkaW5hdGUgb2YgdGhlIHBvaW50LlxyXG4gICAgICogQHJldHVybnMgVGhlIGRpc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZGlzdGFuY2VUbyh4OiBudW1iZXIsIHk6IG51bWJlcik6IG51bWJlciB7XHJcbiAgICAgICAgLy8geCwgeSwgeDEsIHkxLCB4MiwgeTJcclxuICAgICAgICByZXR1cm4gVXRpbHMucG9pbnREaXN0YW5jZUZyb21MaW5lKHgsIHksXHJcbiAgICAgICAgICAgIHRoaXMuaW50ZXJpb3JTdGFydCgpLngsXHJcbiAgICAgICAgICAgIHRoaXMuaW50ZXJpb3JTdGFydCgpLnksXHJcbiAgICAgICAgICAgIHRoaXMuaW50ZXJpb3JFbmQoKS54LFxyXG4gICAgICAgICAgICB0aGlzLmludGVyaW9yRW5kKCkueSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldFN0YXJ0KCkge1xyXG4gICAgICAgIGlmICh0aGlzLmZyb250KSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLndhbGwuZ2V0U3RhcnQoKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy53YWxsLmdldEVuZCgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0RW5kKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmZyb250KSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLndhbGwuZ2V0RW5kKCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMud2FsbC5nZXRTdGFydCgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldE9wcG9zaXRlRWRnZSgpOiBIYWxmRWRnZSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZnJvbnQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMud2FsbC5iYWNrRWRnZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy53YWxsLmZyb250RWRnZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gdGhlc2UgcmV0dXJuIGFuIG9iamVjdCB3aXRoIGF0dHJpYnV0ZXMgeCwgeVxyXG4gICAgcHVibGljIGludGVyaW9yRW5kKCk6IFZlY3RvcjIge1xyXG4gICAgICAgIGNvbnN0IHZlYyA9IHRoaXMuaGFsZkFuZ2xlVmVjdG9yKHRoaXMsIHRoaXMubmV4dCk7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBWZWN0b3IyKHRoaXMuZ2V0RW5kKCkueCArIHZlYy54LCB0aGlzLmdldEVuZCgpLnkgKyB2ZWMueSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGludGVyaW9yU3RhcnQoKTogVmVjdG9yMiB7XHJcbiAgICAgICAgY29uc3QgdmVjID0gdGhpcy5oYWxmQW5nbGVWZWN0b3IodGhpcy5wcmV2LCB0aGlzKTtcclxuICAgICAgICByZXR1cm4gbmV3IFZlY3RvcjIodGhpcy5nZXRTdGFydCgpLnggKyB2ZWMueCwgdGhpcy5nZXRTdGFydCgpLnkgKyB2ZWMueSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGludGVyaW9yQ2VudGVyKCk6IFZlY3RvcjIge1xyXG4gICAgICAgIHJldHVybiBuZXcgVmVjdG9yMigodGhpcy5pbnRlcmlvclN0YXJ0KCkueCArIHRoaXMuaW50ZXJpb3JFbmQoKS54KSAvIDIuMCwgKHRoaXMuaW50ZXJpb3JTdGFydCgpLnkgKyB0aGlzLmludGVyaW9yRW5kKCkueSkgLyAyLjApO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBleHRlcmlvckVuZCgpOiBWZWN0b3IyIHtcclxuICAgICAgICBjb25zdCB2ZWMgPSB0aGlzLmhhbGZBbmdsZVZlY3Rvcih0aGlzLCB0aGlzLm5leHQpO1xyXG4gICAgICAgIHJldHVybiBuZXcgVmVjdG9yMih0aGlzLmdldEVuZCgpLnggLSB2ZWMueCwgdGhpcy5nZXRFbmQoKS55IC0gdmVjLnkpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBleHRlcmlvclN0YXJ0KCk6IFZlY3RvcjIge1xyXG4gICAgICAgIGNvbnN0IHZlYyA9IHRoaXMuaGFsZkFuZ2xlVmVjdG9yKHRoaXMucHJldiwgdGhpcyk7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBWZWN0b3IyKHRoaXMuZ2V0U3RhcnQoKS54IC0gdmVjLngsIHRoaXMuZ2V0U3RhcnQoKS55IC0gdmVjLnkpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBHZXQgdGhlIGNvcm5lcnMgb2YgdGhlIGhhbGYgZWRnZS5cclxuICAgICAqIEByZXR1cm5zIEFuIGFycmF5IG9mIHgseSBwYWlycy5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGNvcm5lcnMoKTogeyB4OiBudW1iZXIsIHk6IG51bWJlciB9W10ge1xyXG4gICAgICAgIHJldHVybiBbdGhpcy5pbnRlcmlvclN0YXJ0KCksIHRoaXMuaW50ZXJpb3JFbmQoKSxcclxuICAgICAgICAgICAgdGhpcy5leHRlcmlvckVuZCgpLCB0aGlzLmV4dGVyaW9yU3RhcnQoKV07XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIENDVyBhbmdsZSBmcm9tIHYxIHRvIHYyXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgaGFsZkFuZ2xlVmVjdG9yKHYxOiBIYWxmRWRnZSwgdjI6IEhhbGZFZGdlKTogVmVjdG9yMiB7XHJcbiAgICAgICAgLy8gbWFrZSB0aGUgYmVzdCBvZiB0aGluZ3MgaWYgd2UgZG9udCBoYXZlIHByZXYgb3IgbmV4dFxyXG4gICAgICAgIGxldCB2MXN0YXJ0WDtcclxuICAgICAgICBsZXQgdjFzdGFydFk7XHJcbiAgICAgICAgbGV0IHYxZW5kWDtcclxuICAgICAgICBsZXQgdjFlbmRZO1xyXG4gICAgICAgIGxldCB2MnN0YXJ0WDtcclxuICAgICAgICBsZXQgdjJzdGFydFk7XHJcbiAgICAgICAgbGV0IHYyZW5kWDtcclxuICAgICAgICBsZXQgdjJlbmRZO1xyXG5cclxuICAgICAgICBpZiAoIXYxKSB7XHJcbiAgICAgICAgICAgIHYxc3RhcnRYID0gdjIuZ2V0U3RhcnQoKS54IC0gKHYyLmdldEVuZCgpLnggLSB2Mi5nZXRTdGFydCgpLngpO1xyXG4gICAgICAgICAgICB2MXN0YXJ0WSA9IHYyLmdldFN0YXJ0KCkueSAtICh2Mi5nZXRFbmQoKS55IC0gdjIuZ2V0U3RhcnQoKS55KTtcclxuICAgICAgICAgICAgdjFlbmRYID0gdjIuZ2V0U3RhcnQoKS54O1xyXG4gICAgICAgICAgICB2MWVuZFkgPSB2Mi5nZXRTdGFydCgpLnk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdjFzdGFydFggPSA8bnVtYmVyPnYxLmdldFN0YXJ0KCkueDtcclxuICAgICAgICAgICAgdjFzdGFydFkgPSA8bnVtYmVyPnYxLmdldFN0YXJ0KCkueTtcclxuICAgICAgICAgICAgdjFlbmRYID0gdjEuZ2V0RW5kKCkueDtcclxuICAgICAgICAgICAgdjFlbmRZID0gdjEuZ2V0RW5kKCkueTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghdjIpIHtcclxuICAgICAgICAgICAgdjJzdGFydFggPSB2MS5nZXRFbmQoKS54O1xyXG4gICAgICAgICAgICB2MnN0YXJ0WSA9IHYxLmdldEVuZCgpLnk7XHJcbiAgICAgICAgICAgIHYyZW5kWCA9IHYxLmdldEVuZCgpLnggKyAodjEuZ2V0RW5kKCkueCAtIHYxLmdldFN0YXJ0KCkueCk7XHJcbiAgICAgICAgICAgIHYyZW5kWSA9IHYxLmdldEVuZCgpLnkgKyAodjEuZ2V0RW5kKCkueSAtIHYxLmdldFN0YXJ0KCkueSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdjJzdGFydFggPSB2Mi5nZXRTdGFydCgpLng7XHJcbiAgICAgICAgICAgIHYyc3RhcnRZID0gdjIuZ2V0U3RhcnQoKS55O1xyXG4gICAgICAgICAgICB2MmVuZFggPSB2Mi5nZXRFbmQoKS54O1xyXG4gICAgICAgICAgICB2MmVuZFkgPSB2Mi5nZXRFbmQoKS55O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gQ0NXIGFuZ2xlIGJldHdlZW4gZWRnZXNcclxuICAgICAgICBjb25zdCB0aGV0YSA9IFV0aWxzLmFuZ2xlMnBpKFxyXG4gICAgICAgICAgICB2MXN0YXJ0WCAtIHYxZW5kWCxcclxuICAgICAgICAgICAgdjFzdGFydFkgLSB2MWVuZFksXHJcbiAgICAgICAgICAgIHYyZW5kWCAtIHYxZW5kWCxcclxuICAgICAgICAgICAgdjJlbmRZIC0gdjFlbmRZKTtcclxuXHJcbiAgICAgICAgLy8gY29zaW5lIGFuZCBzaW5lIG9mIGhhbGYgYW5nbGVcclxuICAgICAgICBjb25zdCBjcyA9IE1hdGguY29zKHRoZXRhIC8gMi4wKTtcclxuICAgICAgICBjb25zdCBzbiA9IE1hdGguc2luKHRoZXRhIC8gMi4wKTtcclxuXHJcbiAgICAgICAgLy8gcm90YXRlIHYyXHJcbiAgICAgICAgY29uc3QgdjJkeCA9IHYyZW5kWCAtIHYyc3RhcnRYO1xyXG4gICAgICAgIGNvbnN0IHYyZHkgPSB2MmVuZFkgLSB2MnN0YXJ0WTtcclxuXHJcbiAgICAgICAgY29uc3QgdnggPSB2MmR4ICogY3MgLSB2MmR5ICogc247XHJcbiAgICAgICAgY29uc3QgdnkgPSB2MmR4ICogc24gKyB2MmR5ICogY3M7XHJcblxyXG4gICAgICAgIC8vIG5vcm1hbGl6ZVxyXG4gICAgICAgIGNvbnN0IG1hZyA9IFV0aWxzLmRpc3RhbmNlKDAsIDAsIHZ4LCB2eSk7XHJcbiAgICAgICAgY29uc3QgZGVzaXJlZE1hZyA9ICh0aGlzLm9mZnNldCkgLyBzbjtcclxuICAgICAgICBjb25zdCBzY2FsYXIgPSBkZXNpcmVkTWFnIC8gbWFnO1xyXG5cclxuICAgICAgICByZXR1cm4gbmV3IFZlY3RvcjIodnggKiBzY2FsYXIsIHZ5ICogc2NhbGFyKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0IGludkV4dGVyaW9yUXVhdGVybmlvbigpOiBRdWF0ZXJuaW9uIHtcclxuICAgICAgICBjb25zdCBxdWF0ZXJuaW9uID0gbmV3IFF1YXRlcm5pb24oKTtcclxuICAgICAgICBxdWF0ZXJuaW9uLnNldEZyb21Sb3RhdGlvbk1hdHJpeCh0aGlzLmludkV4dGVyaW9yVHJhbnNmb3JtKTtcclxuICAgICAgICByZXR1cm4gcXVhdGVybmlvbjtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIEVkZ2Uge1xyXG4gICAgcHJpdmF0ZSBfZmlsbGVyQ29sb3IgPSBuZXcgQ29sb3IoMHhkZGRkZGQpO1xyXG4gICAgcHJpdmF0ZSByZWFkb25seSBfd2FsbDogV2FsbDtcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgX2Zyb250OiBib29sZWFuO1xyXG5cclxuICAgIHByaXZhdGUgX2ZpbGxlck1hdGVyaWFsOiBUSFJFRS5NZXNoQmFzaWNNYXRlcmlhbDtcclxuICAgIHByaXZhdGUgX3dhbGxNYXRlcmlhbDogVEhSRUUuTWVzaFBob25nTWF0ZXJpYWw7XHJcbiAgICBwcml2YXRlIF9wbGFuZXM6IHtcclxuICAgICAgICBleHRlcmlvcjogTWVzaCxcclxuICAgICAgICBpbnRlcmlvcjogTWVzaCxcclxuICAgICAgICBzaWRlczogTWVzaFtdLFxyXG4gICAgICAgIGJvdHRvbTogTWVzaCxcclxuICAgICAgICB0b3A6IE1lc2hcclxuICAgIH0gPSB7XHJcbiAgICAgICAgZXh0ZXJpb3I6IG51bGwsXHJcbiAgICAgICAgaW50ZXJpb3I6IG51bGwsXHJcbiAgICAgICAgc2lkZXM6IG51bGwsXHJcbiAgICAgICAgYm90dG9tOiBudWxsLFxyXG4gICAgICAgIHRvcDogbnVsbFxyXG4gICAgfTtcclxuXHJcbiAgICBwcml2YXRlIF9sYXN0OiB7XHJcbiAgICAgICAgY29sb3I6IG51bWJlcixcclxuICAgICAgICB0ZXh0dXJlOiBUZXh0dXJlLFxyXG4gICAgICAgIGZpbGxlck1hdGVyaWFsOiBNZXNoQmFzaWNNYXRlcmlhbCxcclxuICAgICAgICB3YWxsTWF0ZXJpYWw6IE1lc2hQaG9uZ01hdGVyaWFsLFxyXG4gICAgICAgIGhlaWdodDogbnVtYmVyXHJcbiAgICB9ID0ge1xyXG4gICAgICAgIGNvbG9yOiBudWxsLFxyXG4gICAgICAgIHRleHR1cmU6IG51bGwsXHJcbiAgICAgICAgZmlsbGVyTWF0ZXJpYWw6IG51bGwsXHJcbiAgICAgICAgd2FsbE1hdGVyaWFsOiBudWxsLFxyXG4gICAgICAgIGhlaWdodDogbnVsbFxyXG4gICAgfTtcclxuXHJcbiAgICBwdWJsaWMgdmlzaWJsZTtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9oYWxmRWRnZTogSGFsZkVkZ2UpIHtcclxuICAgICAgICBpZiAoX2hhbGZFZGdlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3dhbGwgPSBfaGFsZkVkZ2Uud2FsbDtcclxuICAgICAgICAgICAgdGhpcy5fZnJvbnQgPSBfaGFsZkVkZ2UuZnJvbnQ7XHJcbiAgICAgICAgICAgIC8vIHRoaXMudXBkYXRlUGxhbmVzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzaG93SGlkZUVkZ2Uoc2hvdzogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX3BsYW5lTGlzdCgpLmZvckVhY2gocCA9PiBwLnZpc2libGUgPSBzaG93KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF9wbGFuZUxpc3QoKTogTWVzaFtdIHtcclxuICAgICAgICByZXR1cm4gKHRoaXMuX3BsYW5lcy5zaWRlcyB8fCBbXSkuY29uY2F0KFtcclxuICAgICAgICAgICAgdGhpcy5fcGxhbmVzLnRvcCxcclxuICAgICAgICAgICAgdGhpcy5fcGxhbmVzLmJvdHRvbSxcclxuICAgICAgICAgICAgdGhpcy5fcGxhbmVzLmludGVyaW9yLFxyXG4gICAgICAgICAgICB0aGlzLl9wbGFuZXMuZXh0ZXJpb3JcclxuICAgICAgICBdKS5maWx0ZXIoeCA9PiB4KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0UGxhbmVzKCk6IE1lc2hbXSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3BsYW5lTGlzdCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRUb3BTaWRlRmlsbGVycygpOiBNZXNoW10ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9wbGFuZXMuc2lkZXMuY29uY2F0KFt0aGlzLl9wbGFuZXMudG9wXSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFzeW5jIGluaXQoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICAgICAgLy8gdGhpcy5oYWxmRWRnZS5yZWRyYXdDYWxsYmFja3MuYWRkKHRoaXMucmVkcmF3KTtcclxuICAgICAgICAvLyBoYWxmRWRnZS5pdGVtQWRkZWRDYWxsYmFja3MuYWRkKHVwZGF0ZU9iamVjdFZpc2liaWxpdHkpO1xyXG4gICAgICAgIC8vIGNvbnRyb2xzLmNhbWVyYU1vdmVkQ2FsbGJhY2tzLmFkZCh1cGRhdGVWaXNpYmlsaXR5KTtcclxuICAgICAgICBhd2FpdCB0aGlzLnVwZGF0ZVBsYW5lcygpO1xyXG4gICAgICAgIC8vIGFkZFRvU2NlbmUoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYXN5bmMgcmVkcmF3KCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgICAgIGF3YWl0IHRoaXMudXBkYXRlUGxhbmVzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gcHJpdmF0ZSByZW1vdmVGcm9tU2NlbmUoKSB7XHJcbiAgICAvLyAgIHRoaXMucGxhbmVMaXN0KCkuZm9yRWFjaCgocGxhbmUpID0+IHtcclxuICAgIC8vICAgICBzY2VuZS5yZW1vdmUocGxhbmUpO1xyXG4gICAgLy8gICAgIFV0aWxzLmRpc3Bvc2VPYmplY3QocGxhbmUpO1xyXG4gICAgLy8gICB9KTtcclxuICAgIC8vICAgT2JqZWN0LmtleXMocGxhbmVzKS5mb3JFYWNoKChrZXk6IHN0cmluZykgPT4gcGxhbmVzW2tleV0gPSBudWxsKTtcclxuICAgIC8vICAgT2JqZWN0LmtleXMobGFzdCkuZm9yRWFjaCgoa2V5OiBzdHJpbmcpID0+IGxhc3Rba2V5XSA9IG51bGwpO1xyXG4gICAgLy8gfVxyXG5cclxuICAgIC8vIHByaXZhdGUgYWRkVG9TY2VuZSgpIHtcclxuICAgIC8vICAgcGxhbmVMaXN0KCkuZm9yRWFjaCgocGxhbmUpID0+IHtcclxuICAgIC8vICAgICBzY2VuZS5hZGQocGxhbmUpO1xyXG4gICAgLy8gICB9KTtcclxuICAgIC8vICAgdXBkYXRlVmlzaWJpbGl0eSgpO1xyXG4gICAgLy8gfVxyXG5cclxuICAgIHB1YmxpYyB1cGRhdGVWaXNpYmlsaXR5KGNhbWVyYVBvc2l0aW9uOiBWZWN0b3IzKTogYm9vbGVhbiB7XHJcbiAgICAgICAgLy8gZmluZHMgdGhlIG5vcm1hbCBmcm9tIHRoZSBzcGVjaWZpZWQgaGFsZkVkZ2VcclxuICAgICAgICBjb25zdCBzdGFydCA9IHRoaXMuX2hhbGZFZGdlLmludGVyaW9yU3RhcnQoKTtcclxuICAgICAgICBjb25zdCBlbmQgPSB0aGlzLl9oYWxmRWRnZS5pbnRlcmlvckVuZCgpO1xyXG4gICAgICAgIGNvbnN0IHggPSBlbmQueCAtIHN0YXJ0Lng7XHJcbiAgICAgICAgY29uc3QgeSA9IGVuZC55IC0gc3RhcnQueTtcclxuICAgICAgICAvLyByb3RhdGUgOTAgZGVncmVlcyBDQ1dcclxuICAgICAgICBjb25zdCBub3JtYWwgPSBuZXcgVmVjdG9yMygteSwgMCwgeCk7XHJcbiAgICAgICAgbm9ybWFsLm5vcm1hbGl6ZSgpO1xyXG5cclxuICAgICAgICAvLyBzZXR1cCBjYW1lcmFcclxuICAgICAgICBjb25zdCBwb3NpdGlvbiA9IGNhbWVyYVBvc2l0aW9uLmNsb25lKCk7XHJcbiAgICAgICAgY29uc3QgZm9jdXMgPSBuZXcgVmVjdG9yMyhcclxuICAgICAgICAgICAgKHN0YXJ0LnggKyBlbmQueCkgLyAyLjAsXHJcbiAgICAgICAgICAgIDAsXHJcbiAgICAgICAgICAgIChzdGFydC55ICsgZW5kLnkpIC8gMi4wKTtcclxuICAgICAgICBjb25zdCBkaXJlY3Rpb24gPSBwb3NpdGlvbi5zdWIoZm9jdXMpLm5vcm1hbGl6ZSgpO1xyXG5cclxuICAgICAgICAvLyBmaW5kIGRvdFxyXG4gICAgICAgIGNvbnN0IGRvdCA9IG5vcm1hbC5kb3QoZGlyZWN0aW9uKTtcclxuXHJcbiAgICAgICAgLy8gdXBkYXRlIHZpc2libGVcclxuICAgICAgICBjb25zdCBuZXdWaXNpYmxlID0gKGRvdCA+PSAwKTtcclxuXHJcbiAgICAgICAgLy8gc2hvdyBvciBoaWRlIHBsYW5zXHJcbiAgICAgICAgdGhpcy5fcGxhbmVMaXN0KCkuZm9yRWFjaCgocGxhbmU6IFRIUkVFLk1lc2gpID0+XHJcbiAgICAgICAgICAgIFV0aWxzLnNldFBsYW5lVmlzaWJpbGl0eShwbGFuZSwgbmV3VmlzaWJsZSlcclxuICAgICAgICApO1xyXG4gICAgICAgIGlmIChuZXdWaXNpYmxlICE9PSB0aGlzLnZpc2libGUpIHtcclxuICAgICAgICAgICAgdGhpcy52aXNpYmxlID0gbmV3VmlzaWJsZTtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGVPYmplY3RWaXNpYmlsaXR5KCk7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXdWaXNpYmxlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgdXBkYXRlT2JqZWN0VmlzaWJpbGl0eSgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl93YWxsLml0ZW1zLmZvckVhY2goKGl0ZW06IFdhbGxJdGVtKSA9PiB7XHJcbiAgICAgICAgICAgIGl0ZW0udXBkYXRlRWRnZVZpc2liaWxpdHkodGhpcyk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5fd2FsbC5vbkl0ZW1zLmZvckVhY2goKGl0ZW06IFdhbGxJdGVtKSA9PiB7XHJcbiAgICAgICAgICAgIGl0ZW0udXBkYXRlRWRnZVZpc2liaWxpdHkodGhpcyk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNldEFsbFBsYW5lc1Zpc2libGUoKSB7XHJcbiAgICAgICAgdGhpcy5fcGxhbmVMaXN0KCkuZm9yRWFjaCgocGxhbmU6IFRIUkVFLk1lc2gpID0+XHJcbiAgICAgICAgICAgIFV0aWxzLnNldFBsYW5lVmlzaWJpbGl0eShwbGFuZSwgdHJ1ZSlcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYXN5bmMgX2FkZE1hdGVyaWFsTWFwKG1hdGVyaWFsOiBUSFJFRS5NZXNoUGhvbmdNYXRlcmlhbCB8IFRIUkVFLk1lc2hTdGFuZGFyZE1hdGVyaWFsLCB0ZXh0dXJlOiBUZXh0dXJlKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICAgICAgY29uc3QgZGltZW5zaW9ucyA9IG5ldyBUSFJFRS5WZWN0b3IyKFxyXG4gICAgICAgICAgICB0aGlzLl9oYWxmRWRnZS5pbnRlcmlvckRpc3RhbmNlKCksXHJcbiAgICAgICAgICAgIHRoaXMuX3dhbGwuaGVpZ2h0IC0gdGhpcy5fd2FsbC50aGlja25lc3NcclxuICAgICAgICApO1xyXG4gICAgICAgIHRleHR1cmUuZGltZW5zaW9ucyA9IGRpbWVuc2lvbnMubXVsdGlwbHlTY2FsYXIoMTAwKTtcclxuICAgICAgICBzd2l0Y2ggKHRleHR1cmUudHlwZSkge1xyXG4gICAgICAgICAgICBjYXNlIFRleHR1cmVUeXBlLkltYWdlOlxyXG4gICAgICAgICAgICAgICAgbWF0ZXJpYWwubWFwID0gYXdhaXQgTWF0ZXJpYWxVdGlscy5Gcm9tSW1hZ2UodGV4dHVyZSk7XHJcbiAgICAgICAgICAgICAgICBtYXRlcmlhbC5tYXAuY29sb3JTcGFjZSA9IFNSR0JDb2xvclNwYWNlO1xyXG4gICAgICAgICAgICAgICAgbWF0ZXJpYWwubmVlZHNVcGRhdGUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgVGV4dHVyZVR5cGUuQ3VzdG9tUGF0dGVybjpcclxuICAgICAgICAgICAgICAgIG1hdGVyaWFsLm1hcCA9IGF3YWl0IE1hdGVyaWFsVXRpbHMuQ3VzdG9tVGlsZU1hcFRleHR1cmUodGV4dHVyZSwgZGltZW5zaW9ucyk7XHJcbiAgICAgICAgICAgICAgICBtYXRlcmlhbC5tYXAuY29sb3JTcGFjZSA9IFNSR0JDb2xvclNwYWNlO1xyXG4gICAgICAgICAgICAgICAgbWF0ZXJpYWwubmVlZHNVcGRhdGUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgVGV4dHVyZVR5cGUuQmFzaWM6XHJcbiAgICAgICAgICAgICAgICBtYXRlcmlhbC5tYXAgPSBhd2FpdCBNYXRlcmlhbFV0aWxzLkZyb21VcmwodGV4dHVyZS51cmwsIHRleHR1cmUuc3RyZXRjaCwgdGV4dHVyZS50aWxlU2l6ZSwgbnVsbCwgbnVsbCwgdGV4dHVyZS5kaW1lbnNpb25zLCB0ZXh0dXJlLnRpbGVSb3RhdGlvbik7XHJcbiAgICAgICAgICAgICAgICBtYXRlcmlhbC5tYXAuY29sb3JTcGFjZSA9IFNSR0JDb2xvclNwYWNlO1xyXG4gICAgICAgICAgICAgICAgbWF0ZXJpYWwubmVlZHNVcGRhdGUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgVGV4dHVyZVR5cGUuUEJSOlxyXG4gICAgICAgICAgICAgICAgbWF0ZXJpYWwgPSBtYXRlcmlhbCBhcyBNZXNoU3RhbmRhcmRNYXRlcmlhbDtcclxuICAgICAgICAgICAgICAgIGlmICh0ZXh0dXJlLm1hdGVyaWFsaXplVXJsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgTWF0ZXJpYWxVdGlscy5sb2FkTWF0ZXJpYWxpemVNYXBzKG1hdGVyaWFsLCB0ZXh0dXJlKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWwubWFwID0gYXdhaXQgTWF0ZXJpYWxVdGlscy5Gcm9tVXJsKHRleHR1cmUudXJsLCB0ZXh0dXJlLnN0cmV0Y2gsIHRleHR1cmUudGlsZVNpemUsIHRleHR1cmUucmVwZWF0WCwgdGV4dHVyZS5yZXBlYXRZLCB0ZXh0dXJlLmRpbWVuc2lvbnMsIHRleHR1cmUudGlsZVJvdGF0aW9uKTtcclxuICAgICAgICAgICAgICAgICAgICBtYXRlcmlhbC5tYXAuY29sb3JTcGFjZSA9IFNSR0JDb2xvclNwYWNlO1xyXG4gICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsLnJvdWdobmVzc01hcCA9IHRleHR1cmUucm91Z2huZXNzTWFwID8gYXdhaXQgTWF0ZXJpYWxVdGlscy5Gcm9tVXJsKHRleHR1cmUucm91Z2huZXNzTWFwLCB0ZXh0dXJlLnN0cmV0Y2gsIHRleHR1cmUudGlsZVNpemUsIHRleHR1cmUucmVwZWF0WCwgdGV4dHVyZS5yZXBlYXRZLCB0ZXh0dXJlLmRpbWVuc2lvbnMsIHRleHR1cmUudGlsZVJvdGF0aW9uKSA6IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWwuYnVtcE1hcCA9IHRleHR1cmUuYnVtcE1hcCA/IGF3YWl0IE1hdGVyaWFsVXRpbHMuRnJvbVVybCh0ZXh0dXJlLmJ1bXBNYXAsIHRleHR1cmUuc3RyZXRjaCwgdGV4dHVyZS50aWxlU2l6ZSwgdGV4dHVyZS5yZXBlYXRYLCB0ZXh0dXJlLnJlcGVhdFksIHRleHR1cmUuZGltZW5zaW9ucywgdGV4dHVyZS50aWxlUm90YXRpb24pIDogbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICBtYXRlcmlhbC5ub3JtYWxNYXAgPSB0ZXh0dXJlLm5vcm1hbE1hcCA/IGF3YWl0IE1hdGVyaWFsVXRpbHMuRnJvbVVybCh0ZXh0dXJlLm5vcm1hbE1hcCwgdGV4dHVyZS5zdHJldGNoLCB0ZXh0dXJlLnRpbGVTaXplLCB0ZXh0dXJlLnJlcGVhdFgsIHRleHR1cmUucmVwZWF0WSwgdGV4dHVyZS5kaW1lbnNpb25zLCB0ZXh0dXJlLnRpbGVSb3RhdGlvbikgOiBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsLm1ldGFsbmVzc01hcCA9IHRleHR1cmUubWV0YWxuZXNzTWFwID8gYXdhaXQgTWF0ZXJpYWxVdGlscy5Gcm9tVXJsKHRleHR1cmUubWV0YWxuZXNzTWFwLCB0ZXh0dXJlLnN0cmV0Y2gsIHRleHR1cmUudGlsZVNpemUsIHRleHR1cmUucmVwZWF0WCwgdGV4dHVyZS5yZXBlYXRZLCB0ZXh0dXJlLmRpbWVuc2lvbnMsIHRleHR1cmUudGlsZVJvdGF0aW9uKSA6IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWwuYW9NYXAgPSB0ZXh0dXJlLmFvTWFwID8gYXdhaXQgTWF0ZXJpYWxVdGlscy5Gcm9tVXJsKHRleHR1cmUuYW9NYXAsIHRleHR1cmUuc3RyZXRjaCwgdGV4dHVyZS50aWxlU2l6ZSwgdGV4dHVyZS5yZXBlYXRYLCB0ZXh0dXJlLnJlcGVhdFksIHRleHR1cmUuZGltZW5zaW9ucywgdGV4dHVyZS50aWxlUm90YXRpb24pIDogbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICBtYXRlcmlhbC5uZWVkc1VwZGF0ZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX2lzVmFsaWQoc3RhcnRFbmQpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gIXN0YXJ0RW5kLmZpbmQoZSA9PiAhaXNGaW5pdGUoZS54KSB8fCAhaXNGaW5pdGUoZS55KSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfdXBkYXRlRmlsbGVyTWF0ZXJpYWwoKTogTWVzaEJhc2ljTWF0ZXJpYWwge1xyXG4gICAgICAgIGlmICh0aGlzLl9maWxsZXJNYXRlcmlhbCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZmlsbGVyTWF0ZXJpYWw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IG1hdGVyaWFsOiBNZXNoQmFzaWNNYXRlcmlhbCA9IG5ldyBNZXNoQmFzaWNNYXRlcmlhbCh7XHJcbiAgICAgICAgICAgIGNvbG9yOiB0aGlzLl9maWxsZXJDb2xvcixcclxuICAgICAgICAgICAgc2lkZTogRG91YmxlU2lkZVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBtYXRlcmlhbDtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGFzeW5jIF91cGRhdGVXYWxsTWF0ZXJpYWwodGV4dHVyZTogVGV4dHVyZSwgY29sb3I6IG51bWJlciA9IGRlZmF1bHRFZGdlQ29sb3IpOiBQcm9taXNlPE1lc2hQaG9uZ01hdGVyaWFsPiB7XHJcbiAgICAgICAgY29uc3QgaXNTYW1lQ29sb3IgPSBjb2xvciAmJiB0aGlzLl9sYXN0LmNvbG9yICYmIGNvbG9yID09PSB0aGlzLl9sYXN0LmNvbG9yO1xyXG4gICAgICAgIGNvbnN0IGlzU2FtZVRleHR1cmUgPSBzYW1lVGV4dHVyZXModGV4dHVyZSwgdGhpcy5fbGFzdC50ZXh0dXJlKTtcclxuICAgICAgICBpZiAoaXNTYW1lQ29sb3IgJiYgaXNTYW1lVGV4dHVyZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fd2FsbE1hdGVyaWFsO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWlzU2FtZUNvbG9yKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2xhc3QuY29sb3IgPSBjb2xvcjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFpc1NhbWVUZXh0dXJlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2xhc3QudGV4dHVyZSA9IE9iamVjdC5hc3NpZ24oe30sIHRleHR1cmUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IG1hdGVyaWFsO1xyXG4gICAgICAgIG1hdGVyaWFsID0gbmV3IFRIUkVFLk1lc2hQaG9uZ01hdGVyaWFsKHtcclxuICAgICAgICAgICAgY29sb3I6IGNvbG9yLFxyXG4gICAgICAgICAgICBzaWRlOiBUSFJFRS5Gcm9udFNpZGVcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgaWYgKHRleHR1cmUpIHtcclxuICAgICAgICAgICAgbWF0ZXJpYWwgPSBuZXcgVEhSRUUuTWVzaFN0YW5kYXJkTWF0ZXJpYWwoe1xyXG4gICAgICAgICAgICAgICAgY29sb3I6IGNvbG9yLFxyXG4gICAgICAgICAgICAgICAgc2lkZTogVEhSRUUuRnJvbnRTaWRlLFxyXG4gICAgICAgICAgICAgICAgcm91Z2huZXNzOiAhaXNOaWxsKHRleHR1cmUucm91Z2huZXNzKSA/IHRleHR1cmUucm91Z2huZXNzIDogMC44LFxyXG4gICAgICAgICAgICAgICAgbWV0YWxuZXNzOiAhaXNOaWxsKHRleHR1cmUubWV0YWxuZXNzKSA/IHRleHR1cmUubWV0YWxuZXNzIDogMCxcclxuICAgICAgICAgICAgICAgIGJ1bXBTY2FsZTogIWlzTmlsbCh0ZXh0dXJlLmJ1bXBTY2FsZSkgPyB0ZXh0dXJlLmJ1bXBTY2FsZSA6IDFcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX2FkZE1hdGVyaWFsTWFwKG1hdGVyaWFsLCB0ZXh0dXJlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG1hdGVyaWFsO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX2VxdWFsTGFzdFZlYzIocGxhbmU6IHN0cmluZywgcGFyYW1TdWZmaXg6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGNvbnN0IHBhcmFtTmFtZSA9IGAke3BsYW5lfSR7cGFyYW1TdWZmaXh9YDtcclxuICAgICAgICBjb25zdCBnZXR0ZXIgPSB0aGlzLl9oYWxmRWRnZVtwYXJhbU5hbWVdKCk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xhc3RbcGFyYW1OYW1lXSAmJlxyXG4gICAgICAgICAgICB0aGlzLl9oYWxmRWRnZVtwYXJhbU5hbWVdICYmXHJcbiAgICAgICAgICAgIHRoaXMuX2xhc3RbcGFyYW1OYW1lXS54ID09PSBnZXR0ZXIueCAmJlxyXG4gICAgICAgICAgICB0aGlzLl9sYXN0W3BhcmFtTmFtZV0ueSA9PT0gZ2V0dGVyLnk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfY29weUxhc3QocGxhbmU6IHN0cmluZywgcGFyYW1zOiBzdHJpbmdbXSk6IHZvaWQge1xyXG4gICAgICAgIHBhcmFtcy5mb3JFYWNoKChwYXJhbTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHBhcmFtTmFtZSA9IHBhcmFtID09PSAnSW52VHJhbnNmb3JtJyA/XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9pbnZUcmFuc2Zvcm1QYXJhbShwbGFuZSkgOlxyXG4gICAgICAgICAgICAgICAgYCR7cGxhbmV9JHtwYXJhbX1gO1xyXG4gICAgICAgICAgICBjb25zdCBjdXJyZW50ID0gJ2Z1bmN0aW9uJyA9PT0gdHlwZW9mIHRoaXMuX2hhbGZFZGdlW3BhcmFtTmFtZV0gP1xyXG4gICAgICAgICAgICAgICAgdGhpcy5faGFsZkVkZ2VbcGFyYW1OYW1lXSgpIDogdGhpcy5faGFsZkVkZ2VbcGFyYW1OYW1lXTtcclxuICAgICAgICAgICAgdGhpcy5fbGFzdFtwYXJhbU5hbWVdID0gY3VycmVudDtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF90cmFuc2Zvcm1QYXJhbShwbGFuZTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gYCR7cGxhbmV9VHJhbnNmb3JtYDtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF9pbnZUcmFuc2Zvcm1QYXJhbShwbGFuZTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gYGludiR7cGxhbmUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCl9JHtwbGFuZS5zdWJzdHIoMSl9VHJhbnNmb3JtYDtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF91cGRhdGVNYWluUGxhbmUocGxhbmU6IHN0cmluZywgbWF0ZXJpYWw6IE1lc2hCYXNpY01hdGVyaWFsIHwgTWVzaFBob25nTWF0ZXJpYWwpOiBNZXNoIHtcclxuICAgICAgICBsZXQgdXBkYXRlUGxhbmU6IE1lc2ggPSB0aGlzLl9wbGFuZXNbcGxhbmVdO1xyXG4gICAgICAgIGNvbnN0IGdlbzogU2hhcGVHZW9tZXRyeSA9IHRoaXMuX2NyZWF0ZUdlb21ldHJ5KFxyXG4gICAgICAgICAgICB0aGlzLl9oYWxmRWRnZVtgJHtwbGFuZX1TdGFydGBdKCksXHJcbiAgICAgICAgICAgIHRoaXMuX2hhbGZFZGdlW2Ake3BsYW5lfUVuZGBdKCksXHJcbiAgICAgICAgICAgIHRoaXMuX2hhbGZFZGdlW3RoaXMuX3RyYW5zZm9ybVBhcmFtKHBsYW5lKV0sXHJcbiAgICAgICAgICAgIHRoaXMuX2hhbGZFZGdlW3RoaXMuX2ludlRyYW5zZm9ybVBhcmFtKHBsYW5lKV0sXHJcbiAgICAgICAgKTtcclxuICAgICAgICBpZiAoIXVwZGF0ZVBsYW5lKSB7XHJcbiAgICAgICAgICAgIHVwZGF0ZVBsYW5lID0gbmV3IFRocmVlTWVzaChnZW8sIG1hdGVyaWFsKTtcclxuICAgICAgICAgICAgdXBkYXRlUGxhbmUubmFtZSA9ICdlZGdlJztcclxuICAgICAgICAgICAgdXBkYXRlUGxhbmUudXNlckRhdGEud2FsbCA9IHRoaXMuX3dhbGw7XHJcbiAgICAgICAgICAgIHVwZGF0ZVBsYW5lLmNhc3RTaGFkb3cgPSB0cnVlO1xyXG4gICAgICAgICAgICB1cGRhdGVQbGFuZS5yZWNlaXZlU2hhZG93ID0gdHJ1ZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB1cGRhdGVQbGFuZS5nZW9tZXRyeSA9IGdlbztcclxuICAgICAgICAgICAgdXBkYXRlUGxhbmUubWF0ZXJpYWwgPSBtYXRlcmlhbDtcclxuICAgICAgICAgICAgdXBkYXRlUGxhbmUubWF0ZXJpYWwubmVlZHNVcGRhdGUgPSB0cnVlO1xyXG4gICAgICAgIH0vKiBlbHNlIHtcclxuICAgICAgdXBkYXRlUGxhbmUgPSB0aGlzLm1ha2VXYWxsKFxyXG4gICAgICAgIHRoaXMuaGFsZkVkZ2VbYCR7cGxhbmV9U3RhcnRgXSgpLFxyXG4gICAgICAgIHRoaXMuaGFsZkVkZ2VbYCR7cGxhbmV9RW5kYF0oKSxcclxuICAgICAgICB0aGlzLmhhbGZFZGdlW3RoaXMudHJhbnNmb3JtUGFyYW0ocGxhbmUpXSxcclxuICAgICAgICB0aGlzLmhhbGZFZGdlW3RoaXMuaW52VHJhbnNmb3JtUGFyYW0ocGxhbmUpXSxcclxuICAgICAgICBtYXRlcmlhbFxyXG4gICAgICApO1xyXG4gICAgfSovXHJcbiAgICAgICAgcmV0dXJuIHVwZGF0ZVBsYW5lO1xyXG4gICAgICAgIC8vIGNvbnN0IG9sZFBsYW5lID0gdGhpcy5wbGFuZXNbcGxhbmVdO1xyXG4gICAgICAgIC8vIGNvbnN0IG5ld1BsYW5lID0gdGhpcy5tYWtlV2FsbChcclxuICAgICAgICAvLyAgIHRoaXMuaGFsZkVkZ2VbYCR7cGxhbmV9U3RhcnRgXSgpLFxyXG4gICAgICAgIC8vICAgdGhpcy5oYWxmRWRnZVtgJHtwbGFuZX1FbmRgXSgpLFxyXG4gICAgICAgIC8vICAgdGhpcy5oYWxmRWRnZVt0aGlzLnRyYW5zZm9ybVBhcmFtKHBsYW5lKV0sXHJcbiAgICAgICAgLy8gICB0aGlzLmhhbGZFZGdlW3RoaXMuaW52VHJhbnNmb3JtUGFyYW0ocGxhbmUpXSxcclxuICAgICAgICAvLyAgIG1hdGVyaWFsXHJcbiAgICAgICAgLy8gKTtcclxuICAgICAgICAvLyBpZiAob2xkUGxhbmUpIHtcclxuICAgICAgICAvLyAgIC8vIHNjZW5lLnJlbW92ZShvbGRQbGFuZSk7XHJcbiAgICAgICAgLy8gICBVdGlscy5kaXNwb3NlT2JqZWN0KG9sZFBsYW5lKTtcclxuICAgICAgICAvLyB9XHJcbiAgICAgICAgLy8gLy8gc2NlbmUuYWRkKG5ld1BsYW5lKTtcclxuICAgICAgICAvLyByZXR1cm4gbmV3UGxhbmU7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfdXBkYXRlQm90dG9tUGxhbmUoKTogTWVzaCB7XHJcbiAgICAgICAgY29uc3Qgb2xkUGxhbmUgPSB0aGlzLl9wbGFuZXMuYm90dG9tO1xyXG4gICAgICAgIGlmIChvbGRQbGFuZSAmJlxyXG4gICAgICAgICAgICB0aGlzLl9lcXVhbExhc3RWZWMyKCdpbnRlcmlvcicsICdTdGFydCcpICYmXHJcbiAgICAgICAgICAgIHRoaXMuX2VxdWFsTGFzdFZlYzIoJ2ludGVyaW9yJywgJ0VuZCcpICYmXHJcbiAgICAgICAgICAgIHRoaXMuX2VxdWFsTGFzdFZlYzIoJ2V4dGVyaW9yJywgJ1N0YXJ0JykgJiZcclxuICAgICAgICAgICAgdGhpcy5fZXF1YWxMYXN0VmVjMignZXh0ZXJpb3InLCAnRW5kJylcclxuICAgICAgICApIHtcclxuICAgICAgICAgICAgcmV0dXJuIG9sZFBsYW5lO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBuZXdQbGFuZSA9IHRoaXMuX2J1aWxkRmlsbGVyKDAsIHRoaXMuX2ZpbGxlck1hdGVyaWFsKTtcclxuICAgICAgICBpZiAob2xkUGxhbmUpIHtcclxuICAgICAgICAgICAgLy8gRGlzcG9zZSBmdW5jdGlvbiBkb2VzIG5vdCBhY3R1YWxseSByZW1vdmUgdGhlIG9iamVjdCBmcm9tIHRoZSBzY2VuZVxyXG4gICAgICAgICAgICBPYmplY3RVdGlscy5EaXNwb3NlT2JqZWN0KG9sZFBsYW5lKTtcclxuICAgICAgICAgICAgb2xkUGxhbmUudmlzaWJsZSA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBzY2VuZS5hZGQobmV3UGxhbmUpO1xyXG4gICAgICAgIHJldHVybiBuZXdQbGFuZTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF91cGRhdGVUb3BQbGFuZSgpOiBNZXNoIHtcclxuICAgICAgICBjb25zdCBvbGRQbGFuZSA9IHRoaXMuX3BsYW5lcy50b3A7XHJcbiAgICAgICAgaWYgKG9sZFBsYW5lICYmXHJcbiAgICAgICAgICAgIHRoaXMuX2xhc3QuaGVpZ2h0ID09PSB0aGlzLl93YWxsLmhlaWdodCAmJlxyXG4gICAgICAgICAgICB0aGlzLl9lcXVhbExhc3RWZWMyKCdpbnRlcmlvcicsICdTdGFydCcpICYmXHJcbiAgICAgICAgICAgIHRoaXMuX2VxdWFsTGFzdFZlYzIoJ2ludGVyaW9yJywgJ0VuZCcpICYmXHJcbiAgICAgICAgICAgIHRoaXMuX2VxdWFsTGFzdFZlYzIoJ2V4dGVyaW9yJywgJ1N0YXJ0JykgJiZcclxuICAgICAgICAgICAgdGhpcy5fZXF1YWxMYXN0VmVjMignZXh0ZXJpb3InLCAnRW5kJylcclxuICAgICAgICApIHtcclxuICAgICAgICAgICAgcmV0dXJuIG9sZFBsYW5lO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAob2xkUGxhbmUpIHtcclxuICAgICAgICAgICAgLy8gRGlzcG9zZSBmdW5jdGlvbiBkb2VzIG5vdCBhY3R1YWxseSByZW1vdmUgdGhlIG9iamVjdCBmcm9tIHRoZSBzY2VuZVxyXG4gICAgICAgICAgICBPYmplY3RVdGlscy5EaXNwb3NlT2JqZWN0KG9sZFBsYW5lKTtcclxuICAgICAgICAgICAgb2xkUGxhbmUudmlzaWJsZSA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBuZXdQbGFuZSA9IHRoaXMuX2J1aWxkRmlsbGVyKHRoaXMuX3dhbGwuaGVpZ2h0LCB0aGlzLl9maWxsZXJNYXRlcmlhbCk7XHJcbiAgICAgICAgLy8gc2NlbmUuYWRkKG5ld1BsYW5lKTtcclxuICAgICAgICByZXR1cm4gbmV3UGxhbmU7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfdXBkYXRlU2lkZVBsYW5lcygpOiBNZXNoW10ge1xyXG4gICAgICAgIGNvbnN0IG9sZFBsYW5lcyA9IHRoaXMuX3BsYW5lcy5zaWRlcztcclxuICAgICAgICBpZiAob2xkUGxhbmVzICYmXHJcbiAgICAgICAgICAgIHRoaXMuX2xhc3QuaGVpZ2h0ID09PSB0aGlzLl93YWxsLmhlaWdodCAmJlxyXG4gICAgICAgICAgICB0aGlzLl9lcXVhbExhc3RWZWMyKCdpbnRlcmlvcicsICdTdGFydCcpICYmXHJcbiAgICAgICAgICAgIHRoaXMuX2VxdWFsTGFzdFZlYzIoJ2ludGVyaW9yJywgJ0VuZCcpICYmXHJcbiAgICAgICAgICAgIHRoaXMuX2VxdWFsTGFzdFZlYzIoJ2V4dGVyaW9yJywgJ1N0YXJ0JykgJiZcclxuICAgICAgICAgICAgdGhpcy5fZXF1YWxMYXN0VmVjMignZXh0ZXJpb3InLCAnRW5kJylcclxuICAgICAgICApIHtcclxuICAgICAgICAgICAgcmV0dXJuIG9sZFBsYW5lcztcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgbmV3UGxhbmVzID0gW1xyXG4gICAgICAgICAgICB0aGlzLl9idWlsZFNpZGVGaWxsZXIodGhpcy5faGFsZkVkZ2UuaW50ZXJpb3JTdGFydCgpLCB0aGlzLl9oYWxmRWRnZS5leHRlcmlvclN0YXJ0KCksIHRoaXMuX3dhbGwuaGVpZ2h0LCB0aGlzLl9maWxsZXJNYXRlcmlhbCksXHJcbiAgICAgICAgICAgIHRoaXMuX2J1aWxkU2lkZUZpbGxlcih0aGlzLl9oYWxmRWRnZS5pbnRlcmlvckVuZCgpLCB0aGlzLl9oYWxmRWRnZS5leHRlcmlvckVuZCgpLCB0aGlzLl93YWxsLmhlaWdodCwgdGhpcy5fZmlsbGVyTWF0ZXJpYWwpXHJcbiAgICAgICAgXTtcclxuICAgICAgICBpZiAob2xkUGxhbmVzKSB7XHJcbiAgICAgICAgICAgIG9sZFBsYW5lcy5mb3JFYWNoKHAgPT4ge1xyXG4gICAgICAgICAgICAgICAgLy8gRGlzcG9zZSBmdW5jdGlvbiBkb2VzIG5vdCBhY3R1YWxseSByZW1vdmUgdGhlIG9iamVjdCBmcm9tIHRoZSBzY2VuZVxyXG4gICAgICAgICAgICAgICAgT2JqZWN0VXRpbHMuRGlzcG9zZU9iamVjdChwKTtcclxuICAgICAgICAgICAgICAgIHAudmlzaWJsZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gbmV3UGxhbmVzLmZvckVhY2gocCA9PiBzY2VuZS5hZGQocCkpO1xyXG4gICAgICAgIHJldHVybiBuZXdQbGFuZXM7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFzeW5jIHVwZGF0ZVBsYW5lcygpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgICAgICB0aGlzLl9maWxsZXJNYXRlcmlhbCA9IHRoaXMuX3VwZGF0ZUZpbGxlck1hdGVyaWFsKCk7XHJcbiAgICAgICAgaWYgKHRoaXMuX2lzVmFsaWQoW3RoaXMuX2hhbGZFZGdlLmV4dGVyaW9yU3RhcnQoKSwgdGhpcy5faGFsZkVkZ2UuZXh0ZXJpb3JFbmQoKV0pKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3BsYW5lcy5leHRlcmlvciA9IHRoaXMuX3VwZGF0ZU1haW5QbGFuZSgnZXh0ZXJpb3InLCB0aGlzLl9maWxsZXJNYXRlcmlhbCk7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9oYWxmRWRnZS5nZXRUZXh0dXJlKCkgJiYgdGhpcy5faGFsZkVkZ2UuZ2V0VGV4dHVyZSgpLnR5cGUgIT09IFRleHR1cmVUeXBlLkltYWdlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl91cGRhdGVVdnModGhpcy5fcGxhbmVzLmV4dGVyaW9yKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3Qgb2xkV2FsbE1hdGVyaWFsID0gdGhpcy5fd2FsbE1hdGVyaWFsO1xyXG4gICAgICAgIHRoaXMuX3dhbGxNYXRlcmlhbCA9IGF3YWl0IHRoaXMuX3VwZGF0ZVdhbGxNYXRlcmlhbCh0aGlzLl9oYWxmRWRnZS5nZXRUZXh0dXJlKCksIHRoaXMuX2hhbGZFZGdlLmdldENvbG9yKCkpO1xyXG4gICAgICAgIGlmICh0aGlzLl9pc1ZhbGlkKFt0aGlzLl9oYWxmRWRnZS5pbnRlcmlvclN0YXJ0KCksIHRoaXMuX2hhbGZFZGdlLmludGVyaW9yRW5kKCldKSkge1xyXG4gICAgICAgICAgICAvLyB0aGlzLnBsYW5lcy5pbnRlcmlvciA9ICghb2xkV2FsbE1hdGVyaWFsIHx8IG9sZFdhbGxNYXRlcmlhbCA9PT0gdGhpcy53YWxsTWF0ZXJpYWwpXHJcbiAgICAgICAgICAgIC8vICAgPyB0aGlzLnVwZGF0ZU1haW5QbGFuZSgnaW50ZXJpb3InLCB0aGlzLndhbGxNYXRlcmlhbClcclxuICAgICAgICAgICAgLy8gICA6IHRoaXMudXBkYXRlTWFpblBsYW5lTWF0ZXJpYWwoJ2ludGVyaW9yJywgdGhpcy53YWxsTWF0ZXJpYWwpO1xyXG4gICAgICAgICAgICB0aGlzLl9wbGFuZXMuaW50ZXJpb3IgPSB0aGlzLl91cGRhdGVNYWluUGxhbmUoJ2ludGVyaW9yJywgdGhpcy5fd2FsbE1hdGVyaWFsKTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuX2hhbGZFZGdlLmdldFRleHR1cmUoKSAmJiB0aGlzLl9oYWxmRWRnZS5nZXRUZXh0dXJlKCkudHlwZSAhPT0gVGV4dHVyZVR5cGUuSW1hZ2UpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3VwZGF0ZVV2cyh0aGlzLl9wbGFuZXMuaW50ZXJpb3IpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9wbGFuZXMuYm90dG9tID0gdGhpcy5fdXBkYXRlQm90dG9tUGxhbmUoKTtcclxuICAgICAgICB0aGlzLl9wbGFuZXMudG9wID0gdGhpcy5fdXBkYXRlVG9wUGxhbmUoKTtcclxuICAgICAgICB0aGlzLl9wbGFuZXMuc2lkZXMgPSB0aGlzLl91cGRhdGVTaWRlUGxhbmVzKCk7XHJcblxyXG4gICAgICAgIHRoaXMuX2xhc3QuZmlsbGVyTWF0ZXJpYWwgPSB0aGlzLl9maWxsZXJNYXRlcmlhbDtcclxuICAgICAgICB0aGlzLl9sYXN0LndhbGxNYXRlcmlhbCA9IHRoaXMuX3dhbGxNYXRlcmlhbDtcclxuICAgICAgICB0aGlzLl9sYXN0LmhlaWdodCA9IHRoaXMuX3dhbGwuaGVpZ2h0O1xyXG4gICAgICAgIHRoaXMuX2NvcHlMYXN0KCdleHRlcmlvcicsIFsnU3RhcnQnLCAnRW5kJywgJ1RyYW5zZm9ybScsICdJbnZUcmFuc2Zvcm0nXSk7XHJcbiAgICAgICAgdGhpcy5fY29weUxhc3QoJ2ludGVyaW9yJywgWydTdGFydCcsICdFbmQnLCAnVHJhbnNmb3JtJywgJ0ludlRyYW5zZm9ybSddKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF91cGRhdGVVdnMobWVzaDogTWVzaCk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IGRpbWVuc2lvbnMgPSBuZXcgVEhSRUUuVmVjdG9yMihcclxuICAgICAgICAgICAgdGhpcy5faGFsZkVkZ2UuaW50ZXJpb3JEaXN0YW5jZSgpLFxyXG4gICAgICAgICAgICB0aGlzLl93YWxsLmhlaWdodCAtIHRoaXMuX3dhbGwudGhpY2tuZXNzXHJcbiAgICAgICAgKS5tdWx0aXBseVNjYWxhcigxMDApO1xyXG4gICAgICAgIGNvbnN0IHJhdGlvOiBudW1iZXIgPSBkaW1lbnNpb25zLnggLyBkaW1lbnNpb25zLnk7XHJcbiAgICAgICAgbGV0IHV2WTogbnVtYmVyO1xyXG4gICAgICAgIGNvbnN0IHRlbXBWZWN0b3I6IFZlY3RvcjIgPSBuZXcgVmVjdG9yMigpO1xyXG4gICAgICAgIGNvbnN0IHV2QXJyYXk6IEJ1ZmZlckF0dHJpYnV0ZSA9IDxCdWZmZXJBdHRyaWJ1dGU+bWVzaC5nZW9tZXRyeS5hdHRyaWJ1dGVzLnV2O1xyXG4gICAgICAgIGlmICh1dkFycmF5KSB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdXZBcnJheS5jb3VudDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICB0ZW1wVmVjdG9yLmZyb21CdWZmZXJBdHRyaWJ1dGUodXZBcnJheSwgaSk7XHJcbiAgICAgICAgICAgICAgICB1dlkgPSB0ZW1wVmVjdG9yLnk7XHJcbiAgICAgICAgICAgICAgICB1dlkgLT0gMC41O1xyXG4gICAgICAgICAgICAgICAgdXZZIC89IHJhdGlvO1xyXG4gICAgICAgICAgICAgICAgdXZZICs9IDAuNTtcclxuICAgICAgICAgICAgICAgIHV2QXJyYXkuc2V0WShpLCB1dlkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHV2QXJyYXkubmVlZHNVcGRhdGUgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBzdGFydCwgZW5kIGhhdmUgeCBhbmQgeSBhdHRyaWJ1dGVzIChpLmUuIGNvcm5lcnMpXHJcbiAgICBwcml2YXRlIF9jcmVhdGVHZW9tZXRyeShzdGFydCwgZW5kLCB0cmFuc2Zvcm0sIGludlRyYW5zZm9ybSk6IFNoYXBlR2VvbWV0cnkge1xyXG4gICAgICAgIGNvbnN0IHYxID0gdGhpcy5fdG9WZWMzKHN0YXJ0KTtcclxuICAgICAgICBjb25zdCB2MiA9IHRoaXMuX3RvVmVjMyhlbmQpO1xyXG4gICAgICAgIGNvbnN0IHYzID0gdjIuY2xvbmUoKTtcclxuICAgICAgICB2My55ID0gdGhpcy5fd2FsbC5oZWlnaHQ7XHJcbiAgICAgICAgY29uc3QgdjQgPSB2MS5jbG9uZSgpO1xyXG4gICAgICAgIHY0LnkgPSB0aGlzLl93YWxsLmhlaWdodDtcclxuXHJcbiAgICAgICAgY29uc3QgcG9pbnRzID0gW3YxLmNsb25lKCksIHYyLmNsb25lKCksIHYzLmNsb25lKCksIHY0LmNsb25lKCldO1xyXG5cclxuICAgICAgICBwb2ludHMuZm9yRWFjaCgocCkgPT4ge1xyXG4gICAgICAgICAgICBwLmFwcGx5TWF0cml4NCh0cmFuc2Zvcm0pO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBjb25zdCBzaGFwZSA9IG5ldyBTaGFwZShbXHJcbiAgICAgICAgICAgIG5ldyBWZWN0b3IyKHBvaW50c1swXS54LCBwb2ludHNbMF0ueSksXHJcbiAgICAgICAgICAgIG5ldyBWZWN0b3IyKHBvaW50c1sxXS54LCBwb2ludHNbMV0ueSksXHJcbiAgICAgICAgICAgIG5ldyBWZWN0b3IyKHBvaW50c1syXS54LCBwb2ludHNbMl0ueSksXHJcbiAgICAgICAgICAgIG5ldyBWZWN0b3IyKHBvaW50c1szXS54LCBwb2ludHNbM10ueSlcclxuICAgICAgICBdKTtcclxuXHJcbiAgICAgICAgLy8gYWRkIGhvbGVzIGZvciBlYWNoIHdhbGwgaXRlbVxyXG4gICAgICAgIGNvbnN0IGl0ZW1Ib2xlcyA9IHRoaXMuX3dhbGwuaXRlbXNcclxuICAgICAgICAgICAgLmZpbHRlcigoaXRlbTogV2FsbEl0ZW0pID0+ICFpc05hTihpdGVtLnBvc2l0aW9uLngpKVxyXG4gICAgICAgICAgICAubWFwKChpdGVtOiBXYWxsSXRlbSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcG9zID0gaXRlbS5wb3NpdGlvbi5jbG9uZSgpO1xyXG4gICAgICAgICAgICAgICAgcG9zLmFwcGx5TWF0cml4NCh0cmFuc2Zvcm0pO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgaGFsZlNpemUgPSBpdGVtLmhhbGZTaXplO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbWluID0gaGFsZlNpemUuY2xvbmUoKS5tdWx0aXBseVNjYWxhcigtMSk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBtYXggPSBoYWxmU2l6ZS5jbG9uZSgpO1xyXG4gICAgICAgICAgICAgICAgbWluLmFkZChwb3MpO1xyXG4gICAgICAgICAgICAgICAgbWF4LmFkZChwb3MpO1xyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IGhvbGVQb2ludHMgPSBbXHJcbiAgICAgICAgICAgICAgICAgICAgbmV3IFZlY3RvcjIobWluLngsIG1pbi55KSxcclxuICAgICAgICAgICAgICAgICAgICBuZXcgVmVjdG9yMihtYXgueCwgbWluLnkpLFxyXG4gICAgICAgICAgICAgICAgICAgIG5ldyBWZWN0b3IyKG1heC54LCBtYXgueSksXHJcbiAgICAgICAgICAgICAgICAgICAgbmV3IFZlY3RvcjIobWluLngsIG1heC55KVxyXG4gICAgICAgICAgICAgICAgXTtcclxuXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gaG9sZVBvaW50cztcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgY29uc3QgcG9seWdvbnMgPSBVdGlscy5wb2x5Z29uc1VuaW9uKGl0ZW1Ib2xlcyk7XHJcbiAgICAgICAgcG9seWdvbnMuZm9yRWFjaChob2xlUG9seWdvbiA9PiBzaGFwZS5ob2xlcy5wdXNoKG5ldyBQYXRoKGhvbGVQb2x5Z29uKSkpO1xyXG5cclxuICAgICAgICBjb25zdCBnZW9tZXRyeSA9IG5ldyBTaGFwZUdlb21ldHJ5KHNoYXBlKTtcclxuXHJcbiAgICAgICAgY29uc3QgcG9zaXRpb25BdHRyaWJ1dGU6IEJ1ZmZlckF0dHJpYnV0ZSA9IDxCdWZmZXJBdHRyaWJ1dGU+Z2VvbWV0cnkuZ2V0QXR0cmlidXRlKCdwb3NpdGlvbicpO1xyXG4gICAgICAgIGNvbnN0IHV2QXR0cmlidXRlOiBCdWZmZXJBdHRyaWJ1dGUgPSA8QnVmZmVyQXR0cmlidXRlPmdlb21ldHJ5LmdldEF0dHJpYnV0ZSgndXYnKTtcclxuICAgICAgICBVdGlscy5BcHBseUJ1ZmZlckF0dHJpYnV0ZU1hdHJpeFRyYW5zZm9ybShwb3NpdGlvbkF0dHJpYnV0ZSwgaW52VHJhbnNmb3JtKTtcclxuXHJcbiAgICAgICAgLy8gbWFrZSBVVnNcclxuICAgICAgICBjb25zdCB0b3RhbERpc3RhbmNlID0gVXRpbHMuZGlzdGFuY2UodjEueCwgdjEueiwgdjIueCwgdjIueik7XHJcbiAgICAgICAgY29uc3QgaGVpZ2h0ID0gdGhpcy5fd2FsbC5oZWlnaHQ7XHJcblxyXG4gICAgICAgIGZ1bmN0aW9uIHZlcnRleFRvVXYodmVydGV4KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHggPSBVdGlscy5kaXN0YW5jZSh2MS54LCB2MS56LCB2ZXJ0ZXgueCwgdmVydGV4LnopIC8gdG90YWxEaXN0YW5jZTtcclxuICAgICAgICAgICAgY29uc3QgeSA9IHZlcnRleC55IC8gaGVpZ2h0O1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IFRIUkVFLlZlY3RvcjIoeCwgeSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCB0ZW1wVVZBcnJheTogVmVjdG9yMltdID0gW107XHJcbiAgICAgICAgY29uc3QgcG9zaXRpb25EYXRhQXNWZWN0b3IzQXJyYXk6IFZlY3RvcjNbXSA9IFV0aWxzLkdldFZlY3RvcjNBcnJheUZyb21CdWZmZXJBdHRyaWJ1dGUocG9zaXRpb25BdHRyaWJ1dGUuY2xvbmUoKSk7XHJcblxyXG4gICAgICAgIHBvc2l0aW9uRGF0YUFzVmVjdG9yM0FycmF5LmZvckVhY2goKHZlcnRleDogVmVjdG9yMykgPT4ge1xyXG4gICAgICAgICAgICB0ZW1wVVZBcnJheS5wdXNoKHZlcnRleFRvVXYodmVydGV4KSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRlbXBVVkFycmF5LmZvckVhY2goKHV2VmVjdG9yOiBWZWN0b3IyLCBpbmRleCkgPT4ge1xyXG4gICAgICAgICAgICB1dkF0dHJpYnV0ZS5zZXRYWShpbmRleCwgdXZWZWN0b3IueCwgdXZWZWN0b3IueSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHV2QXR0cmlidXRlLm5lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICAgICAgICBnZW9tZXRyeS5jb21wdXRlVmVydGV4Tm9ybWFscygpO1xyXG4gICAgICAgIHJldHVybiBnZW9tZXRyeTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF9idWlsZFNpZGVGaWxsZXIocDE6IFZlY3RvcjIsIHAyOiBWZWN0b3IyLCBoZWlnaHQ6IG51bWJlciwgbWF0ZXJpYWw6IE1hdGVyaWFsKTogTWVzaCB7XHJcbiAgICAgICAgY29uc3QgcG9pbnRzID0gW1xyXG4gICAgICAgICAgICB0aGlzLl90b1ZlYzMocDEpLFxyXG4gICAgICAgICAgICB0aGlzLl90b1ZlYzMocDIpLFxyXG4gICAgICAgICAgICB0aGlzLl90b1ZlYzMocDIsIGhlaWdodCksXHJcbiAgICAgICAgICAgIHRoaXMuX3RvVmVjMyhwMSwgaGVpZ2h0KVxyXG4gICAgICAgIF07XHJcblxyXG4gICAgICAgIGNvbnN0IGdlb21ldHJ5ID0gbmV3IEJ1ZmZlckdlb21ldHJ5KCkuc2V0RnJvbVBvaW50cyhwb2ludHMpO1xyXG4gICAgICAgIGNvbnN0IGZpbGxlciA9IG5ldyBNZXNoKGdlb21ldHJ5LCBtYXRlcmlhbCk7XHJcbiAgICAgICAgZmlsbGVyLmNhc3RTaGFkb3cgPSB0cnVlO1xyXG4gICAgICAgIGZpbGxlci5yZWNlaXZlU2hhZG93ID0gdHJ1ZTtcclxuICAgICAgICBmaWxsZXIubmFtZSA9ICdlZGdlLXNpZGUtZmlsbGVyJztcclxuICAgICAgICByZXR1cm4gZmlsbGVyO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX2J1aWxkRmlsbGVyKGhlaWdodDogbnVtYmVyLCBtYXRlcmlhbDogTWF0ZXJpYWwpOiBNZXNoIHtcclxuICAgICAgICBjb25zdCBwb2ludHMgPSBbXHJcbiAgICAgICAgICAgIHRoaXMuX3RvVmVjMih0aGlzLl9oYWxmRWRnZS5leHRlcmlvclN0YXJ0KCkpLFxyXG4gICAgICAgICAgICB0aGlzLl90b1ZlYzIodGhpcy5faGFsZkVkZ2UuZXh0ZXJpb3JFbmQoKSksXHJcbiAgICAgICAgICAgIHRoaXMuX3RvVmVjMih0aGlzLl9oYWxmRWRnZS5pbnRlcmlvckVuZCgpKSxcclxuICAgICAgICAgICAgdGhpcy5fdG9WZWMyKHRoaXMuX2hhbGZFZGdlLmludGVyaW9yU3RhcnQoKSlcclxuICAgICAgICBdO1xyXG5cclxuICAgICAgICBjb25zdCBzaGFwZSA9IG5ldyBTaGFwZShwb2ludHMpO1xyXG4gICAgICAgIGNvbnN0IGdlb21ldHJ5ID0gbmV3IFNoYXBlR2VvbWV0cnkoc2hhcGUpO1xyXG5cclxuICAgICAgICBjb25zdCBmaWxsZXIgPSBuZXcgTWVzaChnZW9tZXRyeSwgbWF0ZXJpYWwpO1xyXG4gICAgICAgIGZpbGxlci5uYW1lID0gJ2VkZ2UtZmlsbGVyJztcclxuICAgICAgICBmaWxsZXIuY2FzdFNoYWRvdyA9IHRydWU7XHJcbiAgICAgICAgZmlsbGVyLnJlY2VpdmVTaGFkb3cgPSB0cnVlO1xyXG4gICAgICAgIGZpbGxlci5yb3RhdGlvbi5zZXQoTWF0aC5QSSAvIDIsIDAsIDApO1xyXG4gICAgICAgIGZpbGxlci5wb3NpdGlvbi55ID0gaGVpZ2h0O1xyXG4gICAgICAgIHJldHVybiBmaWxsZXI7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfdG9WZWMyKHBvcyk6IFZlY3RvcjIge1xyXG4gICAgICAgIHJldHVybiBuZXcgVmVjdG9yMihwb3MueCwgcG9zLnkpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX3RvVmVjMyhwb3M6IHsgeDogbnVtYmVyLCB5OiBudW1iZXIgfSwgaGVpZ2h0ID0gMCk6IFZlY3RvcjMge1xyXG4gICAgICAgIHJldHVybiBuZXcgVmVjdG9yMyhwb3MueCwgaGVpZ2h0LCBwb3MueSk7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBSb29tIHtcclxuXHJcbiAgICBwdWJsaWMgaW50ZXJpb3JDb3JuZXJzOiBDb3JuZXJbXSA9IFtdO1xyXG5cclxuICAgIHByaXZhdGUgZWRnZVBvaW50ZXIgPSBudWxsO1xyXG4gICAgcHVibGljIGVkZ2VIZWlnaHRzID0gW107XHJcblxyXG4gICAgcHVibGljIGZsb29yUGxhbmU6IEZsb29yUGxhbmVJdGVtID0gbnVsbDtcclxuICAgIHB1YmxpYyBmbG9vclRleHR1cmU6IFRleHR1cmU7XHJcbiAgICBwdWJsaWMgZmxvb3JDb2xvcjogbnVtYmVyID0gMHhjY2NjY2M7XHJcbiAgICBwdWJsaWMgY2VpbGluZ1BsYW5lOiBNZXNoID0gbnVsbDtcclxuXHJcbiAgICAvLyBwcml2YXRlIGZsb29yQ2hhbmdlQ2FsbGJhY2tzID0gJC5DYWxsYmFja3MoKTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwdWJsaWMgY29ybmVyczogQ29ybmVyW10sXHJcbiAgICAgICAgZGVmYXVsdFRleHR1cmU/OiBUZXh0dXJlXHJcbiAgICApIHtcclxuICAgICAgICBpZiAoZGVmYXVsdFRleHR1cmUpIHtcclxuICAgICAgICAgICAgdGhpcy5mbG9vclRleHR1cmUgPSBkZWZhdWx0VGV4dHVyZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5fc2V0RWRnZVBvaW50ZXIoKTtcclxuICAgICAgICB0aGlzLl91cGRhdGVJbnRlcmlvckNvcm5lcnMoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZGlzcG9zZSgpOiB2b2lkIHtcclxuICAgICAgICBPYmplY3RVdGlscy5EaXNwb3NlT2JqZWN0KHRoaXMuZmxvb3JQbGFuZSk7XHJcbiAgICAgICAgT2JqZWN0VXRpbHMuRGlzcG9zZU9iamVjdCh0aGlzLmNlaWxpbmdQbGFuZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldEludGVyaW9yQ29ybmVycygpOiBWZWN0b3IyW10ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmludGVyaW9yQ29ybmVycy5tYXAoKGM6IHsgeDogbnVtYmVyLCB5OiBudW1iZXIgfSkgPT4gbmV3IFZlY3RvcjIoYy54LCBjLnkpKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0VXVpZCgpOiBzdHJpbmcge1xyXG4gICAgICAgIGNvbnN0IGNvcm5lclV1aWRzID0gVXRpbHMubWFwKHRoaXMuY29ybmVycywgZnVuY3Rpb24gKGMpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGMuaWQ7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgY29ybmVyVXVpZHMuc29ydCgpO1xyXG4gICAgICAgIHJldHVybiBjb3JuZXJVdWlkcy5qb2luKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldFRleHR1cmUoKSB7XHJcbiAgICAgICAgLy8gY29uc3QgdXVpZCA9IHRoaXMuZ2V0VXVpZCgpO1xyXG4gICAgICAgIC8vIHJldHVybiB0aGlzLmZsb29ycGxhbi5nZXRGbG9vclRleHR1cmUodXVpZCk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZmxvb3JUZXh0dXJlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRDb2xvcigpIHtcclxuICAgICAgICAvLyBjb25zdCB1dWlkID0gdGhpcy5nZXRVdWlkKCk7XHJcbiAgICAgICAgLy8gcmV0dXJuIHRoaXMuZmxvb3JwbGFuLmdldEZsb29yQ29sb3IodXVpZCkgfHwgZGVmYXVsdEZsb29yQ29sb3I7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZmxvb3JDb2xvcjtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgdXNlVGV4dHVyZSgpIHtcclxuICAgICAgICAvLyByZXR1cm4gZGVmYXVsdEZsb29yQ29sb3IgPT09IHRoaXMuZ2V0Q29sb3IoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIHRleHR1cmVTdHJldGNoIGFsd2F5cyB0cnVlLCBqdXN0IGFuIGFyZ3VtZW50IGZvciBjb25zaXN0ZW5jeSB3aXRoIHdhbGxzXHJcbiAgICAgKi9cclxuICAgIC8vIHB1YmxpYyBzZXRUZXh0dXJlKHRleHR1cmU6IFRleHR1cmUpIHtcclxuICAgIC8vICAgLy8gY29uc3QgdXVpZCA9IHRoaXMuZ2V0VXVpZCgpO1xyXG4gICAgLy8gICAvLyB0aGlzLmZsb29ycGxhbi5zZXRGbG9vclRleHR1cmUodXVpZCwgdGV4dHVyZSk7XHJcbiAgICAvLyAgIC8vIHRoaXMuZmxvb3JwbGFuLmRlbGV0ZUZsb29yQ29sb3IodXVpZCk7XHJcbiAgICAvLyAgIC8vIHRoaXMuZmxvb3JDaGFuZ2VDYWxsYmFja3MuZmlyZSgpO1xyXG4gICAgLy8gfVxyXG5cclxuICAgIC8vIHB1YmxpYyBzZXRDb2xvcihjb2xvcjogbnVtYmVyKSB7XHJcbiAgICAvLyAgIC8vIGNvbnN0IHV1aWQgPSB0aGlzLmdldFV1aWQoKTtcclxuICAgIC8vICAgLy8gdGhpcy5mbG9vcnBsYW4uZGVsZXRlRmxvb3JUZXh0dXJlKHV1aWQpO1xyXG4gICAgLy8gICAvLyB0aGlzLmZsb29ycGxhbi5zZXRGbG9vckNvbG9yKHV1aWQsIGNvbG9yKTtcclxuICAgIC8vICAgLy8gdGhpcy5mbG9vckNoYW5nZUNhbGxiYWNrcy5maXJlKCk7XHJcbiAgICAvLyB9XHJcblxyXG4gICAgcHVibGljIHVwZGF0ZVdhbGxIZWlnaHRzKCkge1xyXG4gICAgICAgIGxldCBlZGdlID0gdGhpcy5lZGdlUG9pbnRlcjtcclxuICAgICAgICB0aGlzLmVkZ2VIZWlnaHRzLmxlbmd0aCA9IDA7XHJcbiAgICAgICAgd2hpbGUgKHRydWUpIHtcclxuICAgICAgICAgICAgdGhpcy5lZGdlSGVpZ2h0cy5wdXNoKGVkZ2Uud2FsbC5oZWlnaHQpO1xyXG4gICAgICAgICAgICBpZiAoZWRnZS5uZXh0ID09PSB0aGlzLmVkZ2VQb2ludGVyKSB7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGVkZ2UgPSBlZGdlLm5leHQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzZXREZWZhdWx0Rmxvb3JUZXh0dXJlKCkge1xyXG4gICAgICAgIC8vIGlmICghdGhpcy5fZGVmYXVsdEZsb29yVGV4dHVyZSkge1xyXG4gICAgICAgIC8vICAgcmV0dXJuO1xyXG4gICAgICAgIC8vIH1cclxuICAgICAgICAvLyBjb25zdCB1dWlkID0gdGhpcy5nZXRVdWlkKCk7XHJcbiAgICAgICAgLy8gaWYgKCF0aGlzLmZsb29ycGxhbi5nZXRGbG9vclRleHR1cmUodXVpZCkgJiYgIXRoaXMuZmxvb3JwbGFuLmdldEZsb29yQ29sb3IodXVpZCkpIHtcclxuICAgICAgICAvLyAgIHRoaXMuc2V0VGV4dHVyZSh0aGlzLl9kZWZhdWx0Rmxvb3JUZXh0dXJlKTtcclxuICAgICAgICAvLyB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfdXBkYXRlSW50ZXJpb3JDb3JuZXJzKCkge1xyXG4gICAgICAgIGxldCBlZGdlID0gdGhpcy5lZGdlUG9pbnRlcjtcclxuICAgICAgICB0aGlzLmVkZ2VIZWlnaHRzLmxlbmd0aCA9IDA7XHJcbiAgICAgICAgd2hpbGUgKHRydWUpIHtcclxuICAgICAgICAgICAgdGhpcy5pbnRlcmlvckNvcm5lcnMucHVzaChlZGdlLmludGVyaW9yU3RhcnQoKSk7XHJcbiAgICAgICAgICAgIGVkZ2UuZ2VuZXJhdGVQbGFuZSgpO1xyXG4gICAgICAgICAgICB0aGlzLmVkZ2VIZWlnaHRzLnB1c2goZWRnZS5oZWlnaHQpO1xyXG4gICAgICAgICAgICBpZiAoZWRnZS5uZXh0ID09PSB0aGlzLmVkZ2VQb2ludGVyKSB7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGVkZ2UgPSBlZGdlLm5leHQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfc2V0RWRnZVBvaW50ZXIoKSB7XHJcblxyXG4gICAgICAgIGxldCBwcmV2RWRnZSA9IG51bGw7XHJcbiAgICAgICAgbGV0IGZpcnN0RWRnZSA9IG51bGw7XHJcblxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5jb3JuZXJzLmxlbmd0aDsgaSsrKSB7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBmaXJzdENvcm5lciA9IHRoaXMuY29ybmVyc1tpXTtcclxuICAgICAgICAgICAgY29uc3Qgc2Vjb25kQ29ybmVyID0gdGhpcy5jb3JuZXJzWyhpICsgMSkgJSB0aGlzLmNvcm5lcnMubGVuZ3RoXTtcclxuXHJcbiAgICAgICAgICAgIC8vIGZpbmQgaWYgd2FsbCBpcyBoZWFkaW5nIGluIHRoYXQgZGlyZWN0aW9uXHJcbiAgICAgICAgICAgIGNvbnN0IHdhbGxUbyA9IGZpcnN0Q29ybmVyLndhbGxUbyhzZWNvbmRDb3JuZXIpO1xyXG4gICAgICAgICAgICBjb25zdCB3YWxsRnJvbSA9IGZpcnN0Q29ybmVyLndhbGxGcm9tKHNlY29uZENvcm5lcik7XHJcbiAgICAgICAgICAgIGxldCBlZGdlOiBIYWxmRWRnZTtcclxuXHJcbiAgICAgICAgICAgIGlmICh3YWxsVG8pIHtcclxuICAgICAgICAgICAgICAgIGVkZ2UgPSBuZXcgSGFsZkVkZ2UodGhpcywgd2FsbFRvLCB0cnVlKTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmICh3YWxsRnJvbSkge1xyXG4gICAgICAgICAgICAgICAgZWRnZSA9IG5ldyBIYWxmRWRnZSh0aGlzLCB3YWxsRnJvbSwgZmFsc2UpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLy8gc29tZXRoaW5nIGhvcnJpYmxlIGhhcyBoYXBwZW5lZFxyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ2Nvcm5lcnMgYXJlbnQgY29ubmVjdGVkIGJ5IGEgd2FsbCwgdWggb2gnKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgICAgICAgIGlmIChpID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICBmaXJzdEVkZ2UgPSBlZGdlO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgZWRnZS5wcmV2ID0gcHJldkVkZ2U7XHJcbiAgICAgICAgICAgICAgICBwcmV2RWRnZS5uZXh0ID0gZWRnZTtcclxuICAgICAgICAgICAgICAgIGlmIChpICsgMSA9PT0gdGhpcy5jb3JuZXJzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGZpcnN0RWRnZS5wcmV2ID0gZWRnZTtcclxuICAgICAgICAgICAgICAgICAgICBlZGdlLm5leHQgPSBmaXJzdEVkZ2U7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcHJldkVkZ2UgPSBlZGdlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gaG9sZCBvbiB0byBhbiBlZGdlIHJlZmVyZW5jZVxyXG4gICAgICAgIHRoaXMuZWRnZVBvaW50ZXIgPSBmaXJzdEVkZ2U7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCBhcmVhKCk6IG51bWJlciB7XHJcbiAgICAgICAgY29uc3QgcG9seWdvbiA9IHRoaXMuX3BvbHlnb25Gcm9tQ29ybmVycyh0aGlzLmludGVyaW9yQ29ybmVycyk7XHJcbiAgICAgICAgcmV0dXJuIFV0aWxzLnBvbHlnb25BcmVhKHBvbHlnb24pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgY2VudGVyKCk6IHsgeDogbnVtYmVyLCB5OiBudW1iZXIgfSB7XHJcbiAgICAgICAgY29uc3QgcG9seWdvbiA9IHRoaXMuX3BvbHlnb25Gcm9tQ29ybmVycyh0aGlzLmNvcm5lcnMpO1xyXG4gICAgICAgIHJldHVybiBVdGlscy5wb2x5Z29uQ2VudGVyKHBvbHlnb24pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX3BvbHlnb25Gcm9tQ29ybmVycyhjb3JuZXJzOiBDb3JuZXJbXSk6IFZlY3RvcjJbXSB7XHJcbiAgICAgICAgcmV0dXJuIGNvcm5lcnMubWFwKGMgPT4gbmV3IFZlY3RvcjIoYy54LCBjLnkpKTtcclxuICAgIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIEEgV2FsbCBJdGVtIGlzIGFuIGVudGl0eSB0byBiZSBwbGFjZWQgcmVsYXRlZCB0byBhIHdhbGwuXHJcbiAqL1xyXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgV2FsbEl0ZW0gZXh0ZW5kcyBJdGVtIHtcclxuXHJcbiAgICAvKiogVGhlIGN1cnJlbnRseSBhcHBsaWVkIHdhbGwgKi9cclxuICAgIHB1YmxpYyBjdXJyZW50V2FsbDogV2FsbCA9IG51bGw7XHJcblxyXG4gICAgLyoqIFRoZSBjdXJyZW50bHkgYXBwbGllZCB3YWxsIGVkZ2UuICovXHJcbiAgICBwdWJsaWMgY3VycmVudFdhbGxFZGdlOiBIYWxmRWRnZSA9IG51bGw7XHJcblxyXG4gICAgLyoqIFVzZWQgZm9yIGZpbmRpbmcgcm90YXRpb25zICovXHJcbiAgICBwcml2YXRlIF9yZWZWZWMgPSBuZXcgVEhSRUUuVmVjdG9yMigwLCAxLjApO1xyXG5cclxuICAgIHByaXZhdGUgX3Bvc2l0aW9uWVRvbGVyYW5jZSA9IDAuMDA1O1xyXG5cclxuICAgIC8qKiAqL1xyXG4gICAgcHJpdmF0ZSBfd2FsbE9mZnNldFNjYWxhciA9IDA7XHJcblxyXG4gICAgLyoqICovXHJcbiAgICBwcml2YXRlIF9zaXplWCA9IDA7XHJcblxyXG4gICAgLyoqICovXHJcbiAgICBwcml2YXRlIF9zaXplWSA9IDA7XHJcblxyXG4gICAgcHJpdmF0ZSBfZmxpcHBlZCA9IGZhbHNlO1xyXG4gICAgcHJvdGVjdGVkIHRleHR1cmU6IFRleHR1cmU7XHJcblxyXG4gICAgLyoqICovXHJcbiAgICBwcm90ZWN0ZWQgYWRkVG9XYWxsID0gZmFsc2U7XHJcblxyXG4gICAgLyoqICovXHJcbiAgICBwcm90ZWN0ZWQgYm91bmRUb0Zsb29yID0gZmFsc2U7XHJcblxyXG4gICAgLyoqICovXHJcbiAgICBwcm90ZWN0ZWQgZnJvbnRWaXNpYmxlID0gZmFsc2U7XHJcbiAgICBwcm90ZWN0ZWQgYmFja1Zpc2libGUgPSBmYWxzZTtcclxuICAgIHByaXZhdGUgX2hhc0Zyb250RWRnZSA9IGZhbHNlO1xyXG4gICAgcHJpdmF0ZSBfaGFzQmFja0VkZ2UgPSBmYWxzZTtcclxuICAgIHByaXZhdGUgX29uRnJvbnRTaWRlOiBib29sZWFuO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIG1ldGFkYXRhOiBNZXRhZGF0YSxcclxuICAgICAgICBvYmplY3Q6IE9iamVjdDNEIHwgTWVzaCxcclxuICAgICAgICB0ZXh0dXJlPzogVGV4dHVyZSxcclxuICAgICAgICBoYW5kbGVycz86IGFueVxyXG4gICAgKSB7XHJcbiAgICAgICAgc3VwZXIobWV0YWRhdGEsIG9iamVjdCwgdGV4dHVyZSwgaGFuZGxlcnMpO1xyXG5cclxuICAgICAgICB0aGlzLmFsbG93Um90YXRlID0gZmFsc2U7XHJcbiAgICAgICAgaWYgKHRleHR1cmUpIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRUZXh0dXJlKHRleHR1cmUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKiogKi9cclxuICAgIHB1YmxpYyByZW1vdmVkKCkge1xyXG4gICAgICAgIGlmICghaXNOaWxsKHRoaXMuY3VycmVudFdhbGxFZGdlKSAmJiB0aGlzLmFkZFRvV2FsbCkge1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRXYWxsRWRnZS53YWxsLnJlbW92ZUl0ZW0odGhpcyk7XHJcbiAgICAgICAgICAgIHRoaXMucmVkcmF3V2FsbCgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcmVtb3ZlRnJvbVdhbGwoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFdhbGwpIHtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50V2FsbC5yZW1vdmVPbkl0ZW0odGhpcyk7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFdhbGwgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFdhbGxFZGdlID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIE9ubHkgaGlkZXMgaXRlbSB3aGVuIGVudGlyZSB3YWxsIGlzIGhpZGRlblxyXG4gICAgICogVGhpcyBwcmV2ZW50cyBpdGVtcyBiZWluZyBzZXQgaGlkZGVuIGZvciBpbm5lciB3YWxsc1xyXG4gICAgICogKi9cclxuICAgIHB1YmxpYyB1cGRhdGVFZGdlVmlzaWJpbGl0eShlZGdlOiBFZGdlKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFdhbGwpIHtcclxuICAgICAgICAgICAgbGV0IHNob3VsZFNob3c6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuY3VycmVudFdhbGwuYmFja0VkZ2UpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudFdhbGwuYmFja0VkZ2UuZWRnZXMuZm9yRWFjaCgoZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChlLnZpc2libGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2hvdWxkU2hvdyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHRoaXMuY3VycmVudFdhbGwuZnJvbnRFZGdlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRXYWxsLmZyb250RWRnZS5lZGdlcy5mb3JFYWNoKGUgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChlLnZpc2libGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2hvdWxkU2hvdyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy52aXNpYmxlID0gc2hvdWxkU2hvdztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqICovXHJcbiAgICBwdWJsaWMgdXBkYXRlU2l6ZSgpIHtcclxuICAgICAgICB0aGlzLl93YWxsT2Zmc2V0U2NhbGFyID0gdGhpcy5nZXREZXB0aCgpIC8gMjtcclxuICAgICAgICB0aGlzLl9zaXplWCA9IHRoaXMuZ2V0V2lkdGgoKTtcclxuICAgICAgICB0aGlzLl9zaXplWSA9IHRoaXMuZ2V0SGVpZ2h0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqICovXHJcbiAgICBwdWJsaWMgcmVzaXplZCgpIHtcclxuICAgICAgICBpZiAodGhpcy5ib3VuZFRvRmxvb3IpIHtcclxuICAgICAgICAgICAgdGhpcy5wb3NpdGlvbi55ID0gdGhpcy5fYm91bmRUb0Zsb29yWSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGVTaXplKCk7XHJcbiAgICAgICAgdGhpcy5yZWRyYXdXYWxsKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqICovXHJcbiAgICBwdWJsaWMgcGxhY2VPbkVkZ2UoZWRnZTogSGFsZkVkZ2UpIHtcclxuICAgICAgICBpZiAoIWVkZ2UpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl9vbkZyb250U2lkZSA9IGVkZ2Uud2FsbC5mcm9udEVkZ2UgPT09IGVkZ2U7XHJcbiAgICAgICAgdGhpcy5fY2hhbmdlV2FsbEVkZ2UoZWRnZSk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVTaXplKCk7XHJcblxyXG4gICAgICAgIC8vIHBvc2l0aW9uIG5vdCBzZXRcclxuICAgICAgICBjb25zdCBjZW50ZXIgPSBlZGdlLmludGVyaW9yQ2VudGVyKCk7XHJcbiAgICAgICAgY29uc3QgbmV3UG9zID0gdGhpcy5wb3NpdGlvblNldCA/XHJcbiAgICAgICAgICAgIChlZGdlLndhbGwuYW1vdW50V2FsbE1vdmVkID8gdGhpcy5wb3NpdGlvbi5hZGQobmV3IFZlY3RvcjMoZWRnZS53YWxsLmFtb3VudFdhbGxNb3ZlZC54LCAwLCAwKSkgOiB0aGlzLnBvc2l0aW9uLmNsb25lKCkpIDpcclxuICAgICAgICAgICAgbmV3IFRIUkVFLlZlY3RvcjMoY2VudGVyLngsIGVkZ2Uud2FsbC5oZWlnaHQgLyAyLjAsIGNlbnRlci55KTtcclxuICAgICAgICB0aGlzLl9ib3VuZE1vdmUobmV3UG9zKTtcclxuICAgICAgICB0aGlzLnBvc2l0aW9uLmNvcHkobmV3UG9zKTtcclxuICAgICAgICB0aGlzLnJlZHJhd1dhbGwoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcmVwb3NpdGlvbigpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBuZXdQb3M6IFZlY3RvcjMgPSB0aGlzLnBvc2l0aW9uLmNsb25lKCk7XHJcbiAgICAgICAgdGhpcy5fYm91bmRNb3ZlKG5ld1Bvcyk7XHJcbiAgICAgICAgdGhpcy5wb3NpdGlvbi5jb3B5KG5ld1Bvcyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldEZsb29yWSgpOiBudW1iZXIge1xyXG4gICAgICAgIGlmICh0aGlzLmhhbGZTaXplICYmIHRoaXMuY3VycmVudFdhbGxFZGdlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9tb3ZlVG9ZUG9zaXRpb24odGhpcy5oYWxmU2l6ZS55ICsgdGhpcy5lbGV2YXRpb24pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBvc2l0aW9uLnk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpc1ZhbGlkUG9zaXRpb24ocG9zaXRpb246IFRIUkVFLlZlY3RvcjMsIHJvdGF0aW9uPzogVEhSRUUuRXVsZXIsIG9wdGlvbnM/OiBhbnkpOiBDb2xsaXNpb25JbmZvIHtcclxuICAgICAgICByZXR1cm4ge3ZhbGlkOiAhIXRoaXMuY3VycmVudFdhbGxFZGdlfTtcclxuICAgIH1cclxuXHJcbiAgICAvKiogKi9cclxuICAgIHB1YmxpYyBtb3ZlVG9Qb3NpdGlvbih2ZWMzOiBUSFJFRS5WZWN0b3IzLCBpbnRlcnNlY3Rpb24/OiBUSFJFRS5JbnRlcnNlY3Rpb24pIHtcclxuICAgICAgICBpZiAoaW50ZXJzZWN0aW9uICYmIHRoaXMuY3VycmVudFdhbGxFZGdlKSB7XHJcbiAgICAgICAgICAgIGlmIChpbnRlcnNlY3Rpb24ub2JqZWN0LnVzZXJEYXRhLmVkZ2UgJiYgaW50ZXJzZWN0aW9uLm9iamVjdC51c2VyRGF0YS5lZGdlLndhbGwgIT09IHRoaXMuY3VycmVudFdhbGxFZGdlLndhbGwpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5nZVdhbGxFZGdlKGludGVyc2VjdGlvbi5vYmplY3QudXNlckRhdGEuZWRnZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5fYm91bmRNb3ZlKHZlYzMpO1xyXG4gICAgICAgICAgICB0aGlzLnBvc2l0aW9uLmNvcHkodmVjMyk7XHJcbiAgICAgICAgICAgIHRoaXMucmVkcmF3V2FsbCgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKiogKi9cclxuICAgIHB1YmxpYyBtb3ZlVG8yZFBvc2l0aW9uKHg6IG51bWJlciwgeTogbnVtYmVyLCBlZGdlOiBIYWxmRWRnZSkge1xyXG4gICAgICAgIGNvbnN0IHZlYzMgPSBuZXcgVmVjdG9yMyh4LCB0aGlzLnBvc2l0aW9uLnksIHkpO1xyXG4gICAgICAgIHRoaXMuX2NoYW5nZVdhbGxFZGdlKGVkZ2UpO1xyXG4gICAgICAgIHRoaXMuX2JvdW5kTW92ZSh2ZWMzKTtcclxuICAgICAgICB0aGlzLnBvc2l0aW9uLmNvcHkodmVjMyk7XHJcbiAgICAgICAgdGhpcy5yZWRyYXdXYWxsKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqICovXHJcbiAgICBwdWJsaWMgZ2V0V2FsbE9mZnNldCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fd2FsbE9mZnNldFNjYWxhcjtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0U3RhcnRYKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnBvc2l0aW9uLnggLSB0aGlzLmdldFNpemVYKCkgLyAyICogTWF0aC5jb3ModGhpcy5yb3RhdGlvbi55KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0U3RhcnRZKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnBvc2l0aW9uLnogKyB0aGlzLmdldFNpemVYKCkgLyAyICogTWF0aC5zaW4odGhpcy5yb3RhdGlvbi55KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0RW5kWCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5wb3NpdGlvbi54ICsgdGhpcy5nZXRTaXplWCgpIC8gMiAqIE1hdGguY29zKHRoaXMucm90YXRpb24ueSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldEVuZFkoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucG9zaXRpb24ueiAtIHRoaXMuZ2V0U2l6ZVgoKSAvIDIgKiBNYXRoLnNpbih0aGlzLnJvdGF0aW9uLnkpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgIEByZXR1cm5zIHggYXhpcyBzaXplIG9mIGl0ZW0ncyBib3VuZGluZyBib3hcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldFNpemVYKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9zaXplWDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICBAcmV0dXJucyB5IGF4aXMgc2l6ZSBvZiBpdGVtJ3MgYm91bmRpbmcgYm94XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRTaXplWSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fc2l6ZVk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGhlaWdodFVwZGF0ZWQoYW1vdW50PzogbnVtYmVyKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKCFpc05pbGwoYW1vdW50KSkge1xyXG4gICAgICAgICAgICB0aGlzLnBvc2l0aW9uLnkgPSB0aGlzLl9tb3ZlVG9ZUG9zaXRpb24odGhpcy5wb3NpdGlvbi55ICsgYW1vdW50KTtcclxuICAgICAgICAgICAgdGhpcy5yZWRyYXdXYWxsKCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgc3VwZXIuaGVpZ2h0VXBkYXRlZCgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgdXBkYXRlR2VvbWV0cnkod2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIpIHtcclxuICAgICAgICBjb25zdCBnZW9tZXRyeSA9IEdlb21ldHJ5LndhbGxCb3god2lkdGgsIGhlaWdodCwgdGhpcy5nZXRJdGVtVGhpY2tuZXNzKCkpO1xyXG4gICAgICAgICh0aGlzLm9iamVjdCBhcyBNZXNoKS5nZW9tZXRyeS5kaXNwb3NlKCk7XHJcbiAgICAgICAgY29uc3Qgcm90YXRpb24gPSB0aGlzLnJvdGF0aW9uLnk7XHJcbiAgICAgICAgdGhpcy5yb3RhdGlvbi55ID0gMDtcclxuICAgICAgICAvLyB0aGlzLmluaXRpYWxpemVHZW9tZXRyeShnZW9tZXRyeSk7XHJcbiAgICAgICAgdGhpcy5yb3RhdGlvbi55ID0gcm90YXRpb247XHJcbiAgICAgICAgdGhpcy5yZXNpemVkKCk7XHJcbiAgICAgICAgdGhpcy5yZWRyYXdXYWxsKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFzeW5jIHNldFRleHR1cmUodGV4dHVyZTogVGV4dHVyZSk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgICAgIHRoaXMudGV4dHVyZSA9IHRleHR1cmUgJiYgT2JqZWN0LmFzc2lnbih7fSwgdGV4dHVyZSk7XHJcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuY3JlYXRlTWF0ZXJpYWwodGhpcy5jdXJyZW50V2FsbEVkZ2UgPyB0aGlzLmN1cnJlbnRXYWxsRWRnZS53YWxsLnNpZGUgOiB1bmRlZmluZWQpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBvbldhbGxNb3ZlZCh3YWxsOiBXYWxsKSB7XHJcbiAgICAgICAgaWYgKHdhbGwuZnJvbnRFZGdlKSB7XHJcbiAgICAgICAgICAgIHRoaXMucGxhY2VPbkVkZ2Uod2FsbC5mcm9udEVkZ2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAod2FsbC5iYWNrRWRnZSkge1xyXG4gICAgICAgICAgICB0aGlzLnBsYWNlT25FZGdlKHdhbGwuYmFja0VkZ2UpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgdXBkYXRlTWF0ZXJpYWxWaXNpYmlsaXR5KHNpZGU6IG51bWJlciA9IFRIUkVFLkRvdWJsZVNpZGUpIHtcclxuICAgICAgICBpZiAoIXRoaXMudGV4dHVyZSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRXYWxsRWRnZSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGlzU2FtZSA9IHRoaXMuX2lzV2FsbFNhbWUoKTtcclxuICAgICAgICBpZiAoIWlzU2FtZSkge1xyXG4gICAgICAgICAgICB0aGlzLmNyZWF0ZU1hdGVyaWFsKHNpZGUsIGlzU2FtZSk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgdGV4dHVyZU1hdGVyaWFsRnJvbnQgPSAodGhpcy5vYmplY3QgYXMgYW55KS5tYXRlcmlhbFs0XTtcclxuICAgICAgICBjb25zdCB0ZXh0dXJlTWF0ZXJpYWxCYWNrID0gKHRoaXMub2JqZWN0IGFzIGFueSkubWF0ZXJpYWxbNV07XHJcbiAgICAgICAgc3dpdGNoIChzaWRlKSB7XHJcbiAgICAgICAgICAgIGNhc2UgVEhSRUUuRG91YmxlU2lkZTpcclxuICAgICAgICAgICAgICAgIHRleHR1cmVNYXRlcmlhbEZyb250LnZpc2libGUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgdGV4dHVyZU1hdGVyaWFsQmFjay52aXNpYmxlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIFRIUkVFLkZyb250U2lkZTpcclxuICAgICAgICAgICAgICAgIHRleHR1cmVNYXRlcmlhbEZyb250LnZpc2libGUgPSB0aGlzLmZyb250VmlzaWJsZTtcclxuICAgICAgICAgICAgICAgIHRleHR1cmVNYXRlcmlhbEJhY2sudmlzaWJsZSA9ICF0aGlzLmZyb250VmlzaWJsZTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIFRIUkVFLkJhY2tTaWRlOlxyXG4gICAgICAgICAgICAgICAgdGV4dHVyZU1hdGVyaWFsRnJvbnQudmlzaWJsZSA9ICF0aGlzLmZyb250VmlzaWJsZTtcclxuICAgICAgICAgICAgICAgIHRleHR1cmVNYXRlcmlhbEJhY2sudmlzaWJsZSA9IHRoaXMuZnJvbnRWaXNpYmxlO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhc3luYyBjcmVhdGVUZXh0dXJlTWF0ZXJpYWwob3B0aW9ucz8pOiBQcm9taXNlPFRIUkVFLk1lc2hQaG9uZ01hdGVyaWFsPiB7XHJcbiAgICAgICAgY29uc3Qge1xyXG4gICAgICAgICAgICBzaWRlID0gVEhSRUUuRG91YmxlU2lkZSxcclxuICAgICAgICAgICAgZmxpcCA9IGZhbHNlXHJcbiAgICAgICAgfSA9IG9wdGlvbnMgfHwge307XHJcbiAgICAgICAgY29uc3QgdGV4dHVyZSA9IHRoaXMuZ2V0VGV4dHVyZSgpO1xyXG5cclxuICAgICAgICBjb25zdCBtYXRlcmlhbCA9IG5ldyBUSFJFRS5NZXNoUGhvbmdNYXRlcmlhbCh7c2lkZX0pO1xyXG4gICAgICAgIG1hdGVyaWFsLnRyYW5zcGFyZW50ID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgaWYgKHRleHR1cmUpIHtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5hZGRNYXRlcmlhbE1hcChtYXRlcmlhbCwgdGV4dHVyZSwgZmxpcCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gbWF0ZXJpYWw7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldFRleHR1cmUoKTogVGV4dHVyZSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudGV4dHVyZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2V0U2NhbGVYWVooeDogbnVtYmVyLCB5OiBudW1iZXIsIHo6IG51bWJlciwgcmVjYWxjdWxhdGVIYWxmU2l6ZTogYm9vbGVhbiA9IHRydWUpOiB2b2lkIHtcclxuICAgICAgICBzdXBlci5zZXRTY2FsZVhZWih4LCB5LCB6LCByZWNhbGN1bGF0ZUhhbGZTaXplKTtcclxuICAgICAgICB0aGlzLnJlcG9zaXRpb24oKTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgYXN5bmMgY3JlYXRlTWF0ZXJpYWwoc2lkZTogbnVtYmVyID0gVEhSRUUuRG91YmxlU2lkZSwgaXNTYW1lID0gdHJ1ZSk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgICAgIGxldCB0ZXh0dXJlTWF0ZXJpYWxGcm9udDtcclxuICAgICAgICBsZXQgdGV4dHVyZU1hdGVyaWFsQmFjaztcclxuICAgICAgICBzd2l0Y2ggKHNpZGUpIHtcclxuICAgICAgICAgICAgY2FzZSBUSFJFRS5Eb3VibGVTaWRlOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5fZmxpcHBlZCA9ICFpc1NhbWU7XHJcbiAgICAgICAgICAgICAgICB0ZXh0dXJlTWF0ZXJpYWxGcm9udCA9IGF3YWl0IHRoaXMuY3JlYXRlVGV4dHVyZU1hdGVyaWFsKHtzaWRlOiBUSFJFRS5Gcm9udFNpZGUsIGZsaXA6IHRoaXMuX2ZsaXBwZWR9KTtcclxuICAgICAgICAgICAgICAgIHRleHR1cmVNYXRlcmlhbEJhY2sgPSBhd2FpdCB0aGlzLmNyZWF0ZVRleHR1cmVNYXRlcmlhbCh7c2lkZTogVEhSRUUuRnJvbnRTaWRlLCBmbGlwOiAhdGhpcy5fZmxpcHBlZH0pO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgVEhSRUUuRnJvbnRTaWRlOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5fZmxpcHBlZCA9ICFpc1NhbWU7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5mcm9udFZpc2libGUpIHtcclxuICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlTWF0ZXJpYWxGcm9udCA9IGF3YWl0IHRoaXMuY3JlYXRlVGV4dHVyZU1hdGVyaWFsKHtzaWRlOiBUSFJFRS5Gcm9udFNpZGUsIGZsaXA6IHRoaXMuX2ZsaXBwZWR9KTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGV4dHVyZU1hdGVyaWFsQmFjayA9IGF3YWl0IHRoaXMuY3JlYXRlVGV4dHVyZU1hdGVyaWFsKHtzaWRlOiBUSFJFRS5CYWNrU2lkZSwgZmxpcDogIXRoaXMuX2ZsaXBwZWR9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIFRIUkVFLkJhY2tTaWRlOiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9mbGlwcGVkID0gIWlzU2FtZTtcclxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5mcm9udFZpc2libGUpIHtcclxuICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlTWF0ZXJpYWxGcm9udCA9IGF3YWl0IHRoaXMuY3JlYXRlVGV4dHVyZU1hdGVyaWFsKHtzaWRlOiBUSFJFRS5Gcm9udFNpZGUsIGZsaXA6IHRoaXMuX2ZsaXBwZWR9KTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGV4dHVyZU1hdGVyaWFsQmFjayA9IGF3YWl0IHRoaXMuY3JlYXRlVGV4dHVyZU1hdGVyaWFsKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2lkZTogVEhSRUUuQmFja1NpZGUsIGZsaXA6ICF0aGlzLl9mbGlwcGVkXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICAoKHRoaXMub2JqZWN0IGFzIGFueSkubWF0ZXJpYWwgYXMgYW55KSA9IHRoaXMuZ2V0TWF0ZXJpYWxzKHRleHR1cmVNYXRlcmlhbEZyb250LCB0ZXh0dXJlTWF0ZXJpYWxCYWNrKTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgc2V0WVBvc2l0aW9uQmFzZWRPbkVsZXZhdGlvbigpIHtcclxuICAgICAgICB0aGlzLnBvc2l0aW9uLnkgPSB0aGlzLmVsZXZhdGlvbiArICh0aGlzLmhhbGZTaXplID8gdGhpcy5oYWxmU2l6ZS55IDogMCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIGFzeW5jIGFkZE1hdGVyaWFsTWFwKG1hdGVyaWFsOiBUSFJFRS5NZXNoUGhvbmdNYXRlcmlhbCwgdGV4dHVyZTogVGV4dHVyZSwgZmxpcDogYm9vbGVhbik6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgICAgIGNvbnN0IGRpbWVuc2lvbnMgPSB0aGlzLmdldE1hdGVyaWFsTWFwRGltZW5zaW9ucygpO1xyXG4gICAgICAgIHRleHR1cmUuZGltZW5zaW9ucyA9IGRpbWVuc2lvbnMubXVsdGlwbHlTY2FsYXIoMTAwKTtcclxuICAgICAgICBzd2l0Y2ggKHRleHR1cmUudHlwZSkge1xyXG4gICAgICAgICAgICBjYXNlIFRleHR1cmVUeXBlLkltYWdlOlxyXG4gICAgICAgICAgICAgICAgaWYgKGZsaXApIHtcclxuICAgICAgICAgICAgICAgICAgICBtYXRlcmlhbC5tYXAgPSBhd2FpdCBNYXRlcmlhbFV0aWxzLkZyb21GbGlwcGVkSW1hZ2UodGV4dHVyZSwgZGltZW5zaW9ucyk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsLm1hcCA9IGF3YWl0IE1hdGVyaWFsVXRpbHMuRnJvbUltYWdlKHRleHR1cmUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgVGV4dHVyZVR5cGUuQ3VzdG9tUGF0dGVybjpcclxuICAgICAgICAgICAgICAgIG1hdGVyaWFsLm1hcCA9IGF3YWl0IE1hdGVyaWFsVXRpbHMuQ3VzdG9tVGlsZU1hcFRleHR1cmUodGV4dHVyZSwgZGltZW5zaW9ucyk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBUZXh0dXJlVHlwZS5CYXNpYzpcclxuICAgICAgICAgICAgICAgIG1hdGVyaWFsLm1hcCA9IGF3YWl0IE1hdGVyaWFsVXRpbHMuRnJvbVVybCh0ZXh0dXJlLnVybCwgdGV4dHVyZS5zdHJldGNoLCB0ZXh0dXJlLnRpbGVTaXplLCBudWxsLCBudWxsLCB0ZXh0dXJlLmRpbWVuc2lvbnMsIHRleHR1cmUudGlsZVJvdGF0aW9uKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyB0aGlzLnNjZW5lLm5lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICAgICAgICAvLyB0aGlzLnNjZW5lLnRleHR1cmVMb2FkZWRDYWxsYmFja3MuZmlyZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBnZXRNYXRlcmlhbE1hcERpbWVuc2lvbnMoKTogVEhSRUUuVmVjdG9yMiB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBUSFJFRS5WZWN0b3IyKFxyXG4gICAgICAgICAgICB0aGlzLmdldFdpZHRoKCksXHJcbiAgICAgICAgICAgIHRoaXMuZ2V0SGVpZ2h0KClcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBnZXRNYXRlcmlhbHModGV4dHVyZU1hdGVyaWFsRnJvbnQ6IFRIUkVFLk1hdGVyaWFsLCB0ZXh0dXJlTWF0ZXJpYWxCYWNrOiBUSFJFRS5NYXRlcmlhbCk6IFRIUkVFLk1hdGVyaWFsW10ge1xyXG4gICAgICAgIHJldHVybiBbXHJcbiAgICAgICAgICAgIE1hdGVyaWFsVXRpbHMuZGVmYXVsdFdpbmRvdy5jbG9uZSgpLCAvLyBMZWZ0IHNpZGVcclxuICAgICAgICAgICAgTWF0ZXJpYWxVdGlscy5kZWZhdWx0V2luZG93LmNsb25lKCksIC8vIFJpZ2h0IHNpZGVcclxuICAgICAgICAgICAgTWF0ZXJpYWxVdGlscy5kZWZhdWx0V2luZG93LmNsb25lKCksIC8vIFRvcCBzaWRlXHJcbiAgICAgICAgICAgIE1hdGVyaWFsVXRpbHMuZGVmYXVsdFdpbmRvdy5jbG9uZSgpLCAvLyBCb3R0b20gc2lkZVxyXG4gICAgICAgICAgICB0ZXh0dXJlTWF0ZXJpYWxGcm9udCB8fCBNYXRlcmlhbFV0aWxzLmRlZmF1bHRXaW5kb3cuY2xvbmUoKSwgLy8gRnJvbnQgc2lkZVxyXG4gICAgICAgICAgICB0ZXh0dXJlTWF0ZXJpYWxCYWNrIHx8IE1hdGVyaWFsVXRpbHMuZGVmYXVsdFdpbmRvdy5jbG9uZSgpICAgLy8gQmFjayBzaWRlXHJcbiAgICAgICAgXTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgZ2V0SXRlbVRoaWNrbmVzcygpOiBudW1iZXIge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnRXYWxsLnRoaWNrbmVzcyAtIDAuMDE7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqICovXHJcbiAgICBwcm90ZWN0ZWQgcmVkcmF3V2FsbCgpIHtcclxuICAgICAgICBpZiAodGhpcy5jdXJyZW50V2FsbEVkZ2UgJiYgdGhpcy5jdXJyZW50V2FsbEVkZ2Uud2FsbCkge1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRXYWxsRWRnZS53YWxsLmZpcmVSZWRyYXcoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gdGhpcy51cGRhdGVFZGdlVmlzaWJpbGl0eSh0cnVlLCB0aGlzLl9vbkZyb250U2lkZSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqICovXHJcbiAgICBwcml2YXRlIF9jaGFuZ2VXYWxsRWRnZSh3YWxsRWRnZTogSGFsZkVkZ2UpIHtcclxuICAgICAgICBpZiAodGhpcy5jdXJyZW50V2FsbEVkZ2UgPT09IHdhbGxFZGdlKSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5jdXJyZW50V2FsbCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50V2FsbCA9IHdhbGxFZGdlLndhbGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWlzTmlsbCh0aGlzLmN1cnJlbnRXYWxsRWRnZSkpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuYWRkVG9XYWxsKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRXYWxsRWRnZS53YWxsLnJlbW92ZUl0ZW0odGhpcyk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlZHJhd1dhbGwoKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudFdhbGxFZGdlLndhbGwucmVtb3ZlT25JdGVtKHRoaXMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghd2FsbEVkZ2UpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gZmluZCBhbmdsZSBiZXR3ZWVuIHdhbGwgbm9ybWFsc1xyXG4gICAgICAgIGNvbnN0IG5vcm1hbDIgPSBuZXcgVEhSRUUuVmVjdG9yMigpO1xyXG4gICAgICAgIGNvbnN0IG5vcm1hbDMgPSBVdGlscy5HZXRGYWNlTm9ybWFsRnJvbUJ1ZmZlckdlb21ldHJ5KHdhbGxFZGdlLnBsYW5lLmdlb21ldHJ5LCAwLCAwKTtcclxuICAgICAgICBub3JtYWwyLnggPSBub3JtYWwzLng7XHJcbiAgICAgICAgbm9ybWFsMi55ID0gbm9ybWFsMy56O1xyXG5cclxuICAgICAgICBjb25zdCBhbmdsZSA9IFV0aWxzLmFuZ2xlKFxyXG4gICAgICAgICAgICB0aGlzLl9yZWZWZWMueCwgdGhpcy5fcmVmVmVjLnksXHJcbiAgICAgICAgICAgIG5vcm1hbDIueCwgbm9ybWFsMi55KTtcclxuICAgICAgICB0aGlzLnJvdGF0aW9uLnkgPSAodGhpcy5kZWZhdWx0MTgwID8gTWF0aC5QSSA6IDApICsgYW5nbGU7XHJcbiAgICAgICAgdGhpcy50cmF2ZXJzZShjID0+IGMubWF0cml4V29ybGROZWVkc1VwZGF0ZSA9IHRydWUpO1xyXG5cclxuICAgICAgICAvLyB1cGRhdGUgY3VycmVudFdhbGxcclxuICAgICAgICB0aGlzLmN1cnJlbnRXYWxsID0gd2FsbEVkZ2Uud2FsbDtcclxuICAgICAgICB0aGlzLmN1cnJlbnRXYWxsRWRnZSA9IHdhbGxFZGdlO1xyXG4gICAgICAgIGlmICh0aGlzLmFkZFRvV2FsbCkge1xyXG4gICAgICAgICAgICB3YWxsRWRnZS53YWxsLmFkZEl0ZW0odGhpcyk7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLm1ldGFkYXRhLnRleHR1cmUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlTWF0ZXJpYWxWaXNpYmlsaXR5KHdhbGxFZGdlLndhbGwuc2lkZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5yZWRyYXdXYWxsKCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgd2FsbEVkZ2Uud2FsbC5hZGRPbkl0ZW0odGhpcyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX2JvdW5kVG9GbG9vclkoKSB7XHJcbiAgICAgICAgcmV0dXJuIDAuNSAqIHRoaXMuZ2V0SGVpZ2h0KCkgKiB0aGlzLnNjYWxlLnkgKyAwLjAxO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiB0YWtlcyB0aGUgbW92ZSB2ZWMzLCBhbmQgbWFrZXMgc3VyZSBvYmplY3Qgc3RheXMgYm91bmRlZCBvbiBwbGFuZSAqL1xyXG4gICAgcHJpdmF0ZSBfYm91bmRNb3ZlKHZlYzMpIHtcclxuICAgICAgICBjb25zdCBlZGdlID0gdGhpcy5jdXJyZW50V2FsbEVkZ2U7XHJcbiAgICAgICAgaWYgKCFlZGdlKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmVjMy5hcHBseU1hdHJpeDQoZWRnZS5pbnRlcmlvclRyYW5zZm9ybSk7XHJcbiAgICAgICAgZWRnZS53YWxsLml0ZW1zQ2hhbmdlZCA9IHRydWU7XHJcblxyXG4gICAgICAgIGlmICh2ZWMzLnggPCB0aGlzLl9zaXplWCAvIDIuMCArIHRoaXMuX3Bvc2l0aW9uWVRvbGVyYW5jZSkge1xyXG4gICAgICAgICAgICB2ZWMzLnggPSB0aGlzLl9zaXplWCAvIDIuMCArIHRoaXMuX3Bvc2l0aW9uWVRvbGVyYW5jZTtcclxuICAgICAgICB9IGVsc2UgaWYgKHZlYzMueCA+IChlZGdlLmludGVyaW9yRGlzdGFuY2UoKSAtIHRoaXMuX3NpemVYIC8gMi4wIC0gdGhpcy5fcG9zaXRpb25ZVG9sZXJhbmNlKSkge1xyXG4gICAgICAgICAgICB2ZWMzLnggPSBlZGdlLmludGVyaW9yRGlzdGFuY2UoKSAtIHRoaXMuX3NpemVYIC8gMi4wIC0gdGhpcy5fcG9zaXRpb25ZVG9sZXJhbmNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5ib3VuZFRvRmxvb3IpIHtcclxuICAgICAgICAgICAgdmVjMy55ID0gdGhpcy5fYm91bmRUb0Zsb29yWSgpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBpZiAodGhpcy5lbGV2YXRpb25GaXhlZCB8fCAhdGhpcy5lbGV2YXRpb25BZGp1c3RhYmxlKSB7XHJcbiAgICAgICAgICAgIC8vIGlmIGVsZXZhdGlvbiBpcyBoaWdoZXIgdGhhbiB0aGUgd2FsbCwgdXNlIG1heFlcclxuICAgICAgICAgICAgdmVjMy55ID0gTWF0aC5taW4odGhpcy5fZ2V0TWF4WShlZGdlKSwgdGhpcy5oYWxmU2l6ZS55ICsgdGhpcy5lbGV2YXRpb24pO1xyXG4gICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmVsZXZhdGlvbkFkanVzdGFibGUgJiYgdGhpcy5vbldhbGwpIHtcclxuICAgICAgICAgICAgLy8gaWYgdGhlIGl0ZW0gaXMgYWRqdXN0YWJsZSAmIGlzIHBsYWNlZCBvbiB0aGUgd2FsbFxyXG4gICAgICAgICAgICB2ZWMzLnkgPSBNYXRoLm1pbih0aGlzLl9nZXRNYXhZKGVkZ2UpLCB0aGlzLmhhbGZTaXplLnkgKyB0aGlzLmVsZXZhdGlvbik7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zdCBtYXhZOiBudW1iZXIgPSB0aGlzLl9nZXRNYXhZKGVkZ2UpO1xyXG4gICAgICAgICAgICBjb25zdCBtaW5ZOiBudW1iZXIgPSB0aGlzLl9nZXRNaW5UKCk7XHJcbiAgICAgICAgICAgIGlmICh2ZWMzLnkgPCBtaW5ZKSB7XHJcbiAgICAgICAgICAgICAgdmVjMy55ID0gbWluWTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmICh2ZWMzLnkgPiBtYXhZKSB7XHJcbiAgICAgICAgICAgICAgdmVjMy55ID0gbWF4WTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLmVsZXZhdGlvbiA9IHZlYzMueSAtIHRoaXMuaGFsZlNpemUueTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZlYzMueiA9IHRoaXMuZ2V0V2FsbE9mZnNldCgpO1xyXG4gICAgICAgIHZlYzMuYXBwbHlNYXRyaXg0KGVkZ2UuaW52SW50ZXJpb3JUcmFuc2Zvcm0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX2lzV2FsbFNhbWUoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgbGV0IGlzU2FtZSA9IGZhbHNlO1xyXG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRXYWxsRWRnZSkge1xyXG4gICAgICAgICAgICBjb25zdCBvbkZyb250U2lkZSA9IHRoaXMuY3VycmVudFdhbGxFZGdlID09PSB0aGlzLmN1cnJlbnRXYWxsRWRnZS53YWxsLmZyb250RWRnZTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuX29uRnJvbnRTaWRlID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX29uRnJvbnRTaWRlID0gb25Gcm9udFNpZGU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaXNTYW1lID0gb25Gcm9udFNpZGUgPT09IHRoaXMuX29uRnJvbnRTaWRlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gaXNTYW1lO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX2dldE1heFkoZWRnZTogSGFsZkVkZ2UpOiBudW1iZXIge1xyXG4gICAgICAgIHJldHVybiBlZGdlLmhlaWdodCAtIHRoaXMuX3NpemVZIC8gMi4wIC0gdGhpcy5fcG9zaXRpb25ZVG9sZXJhbmNlO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX2dldE1pblQoKTogbnVtYmVyIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fc2l6ZVkgLyAyLjAgKyB0aGlzLl9wb3NpdGlvbllUb2xlcmFuY2U7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfbW92ZVRvWVBvc2l0aW9uKHBvc2l0aW9uOiBudW1iZXIpOiBudW1iZXIge1xyXG4gICAgICAgIGNvbnN0IG1heFk6IG51bWJlciA9IHRoaXMuX2dldE1heFkodGhpcy5jdXJyZW50V2FsbEVkZ2UpO1xyXG4gICAgICAgIGNvbnN0IG1pblk6IG51bWJlciA9IHRoaXMuX2dldE1pblQoKTtcclxuICAgICAgICBpZiAocG9zaXRpb24gPiBtYXhZKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZWxldmF0aW9uID0gbWF4WSAtIHRoaXMuaGFsZlNpemUueTtcclxuICAgICAgICAgICAgcmV0dXJuIG1heFk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChwb3NpdGlvbiA8IG1pblkpIHtcclxuICAgICAgICAgICAgdGhpcy5lbGV2YXRpb24gPSBtaW5ZIC0gdGhpcy5oYWxmU2l6ZS55O1xyXG4gICAgICAgICAgICByZXR1cm4gbWluWTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHBvc2l0aW9uO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgSW5XYWxsSXRlbSBleHRlbmRzIFdhbGxJdGVtIHtcclxuXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9mcmFtZVdpZHRoOiBudW1iZXIgPSAwLjA3O1xyXG4gICAgcHJpdmF0ZSByZWFkb25seSBfZnJhbWVEZXB0aDogbnVtYmVyID0gMC4xO1xyXG4gICAgcHJpdmF0ZSByZWFkb25seSBfZGVmYXVsdEZyYW1lQ29sb3I6IG51bWJlciA9IDkwNzAxNDY7IC8vIFJBTC0xMDExXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9kZWZhdWx0RG9vckNvbG9yOiBudW1iZXIgPSAxNjc3NzIxNTsgLy8gUkFMLTkwMTBcclxuXHJcbiAgICBwdWJsaWMgb3BlbmluZyA9IHtcclxuICAgICAgICBzaG93OiBmYWxzZSxcclxuICAgICAgICBkb3VibGU6IGZhbHNlLFxyXG4gICAgICAgIGludmVydERpcmVjdGlvbjogZmFsc2UsXHJcbiAgICAgICAgaW52ZXJ0U2lkZTogdHJ1ZVxyXG4gICAgfTtcclxuXHJcbiAgICBwdWJsaWMgZnJhbWVDb2xvcjogbnVtYmVyID0gdGhpcy5fZGVmYXVsdEZyYW1lQ29sb3I7XHJcbiAgICBwdWJsaWMgZG9vckNvbG9yOiBudW1iZXIgPSB0aGlzLl9kZWZhdWx0RG9vckNvbG9yO1xyXG4gICAgcHVibGljIHdpbmRvd0NvbG9yOiBUSFJFRS5Db2xvciA9IG5ldyBUSFJFRS5Db2xvcigwLjA0MzEsIDAuMDU4OCwgMC4wOTAyKTtcclxuICAgIHB1YmxpYyBpc0dsYXNzOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgcHJvdGVjdGVkIHRvcEZyYW1lOiBUSFJFRS5NZXNoO1xyXG4gICAgcHJvdGVjdGVkIGxlZnRGcmFtZTogVEhSRUUuTWVzaDtcclxuICAgIHByb3RlY3RlZCByaWdodEZyYW1lOiBUSFJFRS5NZXNoO1xyXG4gICAgcHJvdGVjdGVkIGJvdHRvbUZyYW1lOiBUSFJFRS5NZXNoO1xyXG4gICAgcHJvdGVjdGVkIGN1c3RvbU1lc2g6IFRIUkVFLk1lc2g7XHJcbiAgICBwcm90ZWN0ZWQgZnJhbWVNYXRlcmlhbDogVEhSRUUuTWVzaFBob25nTWF0ZXJpYWw7XHJcbiAgICBwcm90ZWN0ZWQgZG9vck1hdGVyaWFsRnJvbnQ6IFRIUkVFLk1lc2hQaG9uZ01hdGVyaWFsO1xyXG5cclxuICAgIHByb3RlY3RlZCB3aW5kb3dNYXRlcmlhbDogVEhSRUUuTWVzaFBob25nTWF0ZXJpYWw7XHJcbiAgICBwcml2YXRlIF9pc1dpbmRvdzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHJpdmF0ZSBfZG9vcnBvc3Q6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICBnZXQgZG9vcnBvc3QoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Rvb3Jwb3N0O1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIG1ldGFkYXRhOiBNZXRhZGF0YSxcclxuICAgICAgICBvYmplY3Q6IE9iamVjdDNEIHwgTWVzaCxcclxuICAgICAgICB0ZXh0dXJlPzogVGV4dHVyZVxyXG4gICAgKSB7XHJcbiAgICAgICAgc3VwZXIobWV0YWRhdGEsIG9iamVjdCwgdGV4dHVyZSk7XHJcbiAgICAgICAgdGhpcy5fc2V0RGVmYXVsdCgpO1xyXG4gICAgICAgIHRoaXMuZnJhbWVUaXRsZSA9ICdGcmFtZSc7XHJcbiAgICAgICAgdGhpcy5jdXN0b21NZXNoVGl0bGUgPSB0aGlzLl9pc1dpbmRvdyA/ICdXaW5kb3cnIDogJ0Rvb3InO1xyXG4gICAgICAgIHRoaXMuY2FuQ2hhbmdlQ3VzdG9tTWVzaENvbG9yID0gIXRoaXMuX2lzV2luZG93O1xyXG5cclxuICAgICAgICB0aGlzLnJlY2VpdmVTaGFkb3cgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuYWRkVG9XYWxsID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLl9nbGFzc01hdGVyaWFsQ2hlY2soKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZGlzcG9zZSgpOiB2b2lkIHtcclxuICAgICAgICBzdXBlci5kaXNwb3NlKCk7XHJcbiAgICAgICAgT2JqZWN0VXRpbHMuRGlzcG9zZU9iamVjdCh0aGlzLnRvcEZyYW1lKTtcclxuICAgICAgICBPYmplY3RVdGlscy5EaXNwb3NlT2JqZWN0KHRoaXMubGVmdEZyYW1lKTtcclxuICAgICAgICBPYmplY3RVdGlscy5EaXNwb3NlT2JqZWN0KHRoaXMucmlnaHRGcmFtZSk7XHJcbiAgICAgICAgT2JqZWN0VXRpbHMuRGlzcG9zZU9iamVjdCh0aGlzLmJvdHRvbUZyYW1lKTtcclxuICAgICAgICBPYmplY3RVdGlscy5EaXNwb3NlT2JqZWN0KHRoaXMuY3VzdG9tTWVzaCk7XHJcbiAgICAgICAgT2JqZWN0VXRpbHMuRGlzcG9zZU1hdGVyaWFsKHRoaXMuZnJhbWVNYXRlcmlhbCk7XHJcbiAgICAgICAgT2JqZWN0VXRpbHMuRGlzcG9zZU1hdGVyaWFsKHRoaXMuZG9vck1hdGVyaWFsRnJvbnQpO1xyXG4gICAgICAgIE9iamVjdFV0aWxzLkRpc3Bvc2VNYXRlcmlhbCh0aGlzLndpbmRvd01hdGVyaWFsKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcGxhY2VPbkVkZ2UoZWRnZTogSGFsZkVkZ2UpIHtcclxuICAgICAgICBpZiAodGhpcy5pc0N1c3RvbSkge1xyXG4gICAgICAgICAgICBjb25zdCBjaGVja01hdGVyaWFsOiBUSFJFRS5NZXNoUGhvbmdNYXRlcmlhbCA9IHRoaXMuX2lzV2luZG93ID8gdGhpcy53aW5kb3dNYXRlcmlhbCA6IHRoaXMuZG9vck1hdGVyaWFsRnJvbnQ7XHJcbiAgICAgICAgICAgIGlmICghY2hlY2tNYXRlcmlhbCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fY3JlYXRlTWF0ZXJpYWxzKFRIUkVFLkRvdWJsZVNpZGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlQ3VzdG9tTWVzaCh0aGlzLmdldFdpZHRoKCksIHRoaXMuZ2V0SGVpZ2h0KCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzdXBlci5wbGFjZU9uRWRnZShlZGdlKTtcclxuICAgIH1cclxuXHJcbiAgICAvKiogKi9cclxuICAgIHB1YmxpYyBnZXRXYWxsT2Zmc2V0KCkge1xyXG4gICAgICAgIHJldHVybiAtdGhpcy5jdXJyZW50V2FsbEVkZ2Uub2Zmc2V0O1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBkaXN0YW5jZUZyb20yZCh4OiBudW1iZXIsIHk6IG51bWJlcik6IG51bWJlciB7XHJcbiAgICAgICAgcmV0dXJuIFV0aWxzLnBvaW50RGlzdGFuY2VGcm9tTGluZSh4LCB5LFxyXG4gICAgICAgICAgICB0aGlzLmdldFN0YXJ0WCgpLCB0aGlzLmdldFN0YXJ0WSgpLFxyXG4gICAgICAgICAgICB0aGlzLmdldEVuZFgoKSwgdGhpcy5nZXRFbmRZKCkpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBvbldhbGxVcGRhdGVkKHdhbGw6IFdhbGwpIHtcclxuICAgICAgICBpZiAodGhpcy5tZXRhZGF0YS50ZXh0dXJlKSB7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlTWF0ZXJpYWxWaXNpYmlsaXR5KHdhbGwuc2lkZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB1cGRhdGVGcmFtZUNvbG9yKGNvbG9yOiBudW1iZXIpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmZyYW1lQ29sb3IgPSBjb2xvcjtcclxuICAgICAgICB0aGlzLmZyYW1lTWF0ZXJpYWwuY29sb3Iuc2V0SGV4KGNvbG9yKTtcclxuICAgICAgICB0aGlzLmZyYW1lTWF0ZXJpYWwubmVlZHNVcGRhdGUgPSB0cnVlO1xyXG4gICAgICAgIC8vIHRoaXMuc2NlbmUubmVlZHNVcGRhdGUgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB1cGRhdGVEb29yQ29sb3IoY29sb3I6IG51bWJlcik6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuZG9vckNvbG9yID0gY29sb3I7XHJcbiAgICAgICAgdGhpcy5kb29yTWF0ZXJpYWxGcm9udC5jb2xvci5zZXRIZXgoY29sb3IpO1xyXG4gICAgICAgIHRoaXMuZG9vck1hdGVyaWFsRnJvbnQudHJhbnNwYXJlbnQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmRvb3JNYXRlcmlhbEZyb250Lm9wYWNpdHkgPSAxO1xyXG4gICAgICAgIHRoaXMuZG9vck1hdGVyaWFsRnJvbnQubWFwID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIHRoaXMuZG9vck1hdGVyaWFsRnJvbnQubmVlZHNVcGRhdGUgPSB0cnVlO1xyXG4gICAgICAgIC8vIHRoaXMuc2NlbmUubmVlZHNVcGRhdGUgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB1cGRhdGVHbGFzc01hdGVyaWFsKCkge1xyXG4gICAgICAgIGlmICghdGhpcy5pc0dsYXNzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZG9vck1hdGVyaWFsRnJvbnQuY29sb3Iuc2V0SGV4KDB4ZGZmMGYyKTtcclxuICAgICAgICAgICAgdGhpcy5kb29yTWF0ZXJpYWxGcm9udC50cmFuc3BhcmVudCA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuZG9vck1hdGVyaWFsRnJvbnQuYWxwaGFUZXN0ID0gMDtcclxuICAgICAgICAgICAgdGhpcy5kb29yTWF0ZXJpYWxGcm9udC5vcGFjaXR5ID0gMC4yO1xyXG4gICAgICAgICAgICB0aGlzLmRvb3JNYXRlcmlhbEZyb250Lm1hcCA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgdGhpcy5kb29yTWF0ZXJpYWxGcm9udC5uZWVkc1VwZGF0ZSA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuZG9vck1hdGVyaWFsRnJvbnQuc2lkZSA9IFRIUkVFLkZyb250U2lkZTtcclxuICAgICAgICAgICAgdGhpcy5pc0dsYXNzID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5jdXN0b21NZXNoLmNhc3RTaGFkb3cgPSBmYWxzZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmRvb3JNYXRlcmlhbEZyb250LnRyYW5zcGFyZW50ID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuZG9vck1hdGVyaWFsRnJvbnQub3BhY2l0eSA9IDE7XHJcbiAgICAgICAgICAgIHRoaXMuaXNHbGFzcyA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLmN1c3RvbU1lc2guY2FzdFNoYWRvdyA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB1cGRhdGVHZW9tZXRyeSh3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlcik6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLmlzQ3VzdG9tKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlQ3VzdG9tTWVzaCh3aWR0aCwgaGVpZ2h0KTtcclxuICAgICAgICAgICAgLy8gdGhpcy5jYWxjdWxhdGVIYWxmU2l6ZSgpO1xyXG4gICAgICAgICAgICB0aGlzLnJlZHJhd1dhbGwoKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBzdXBlci51cGRhdGVHZW9tZXRyeSh3aWR0aCwgaGVpZ2h0KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFkanVzdFdhbGxCb3goZ2VvbWV0cnk6IEJveEdlb21ldHJ5KSB7XHJcbiAgICAgICAgZ2VvbWV0cnkuZ2V0QXR0cmlidXRlKCdwb3NpdGlvbicpLm5lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICAgICAgICBnZW9tZXRyeS5jb21wdXRlQm91bmRpbmdCb3goKTtcclxuICAgICAgICBnZW9tZXRyeS5hcHBseU1hdHJpeDQobmV3IE1hdHJpeDQoKS5tYWtlVHJhbnNsYXRpb24oXHJcbiAgICAgICAgICAgIC0wLjUgKiAoZ2VvbWV0cnkuYm91bmRpbmdCb3gubWF4LnggKyBnZW9tZXRyeS5ib3VuZGluZ0JveC5taW4ueCksXHJcbiAgICAgICAgICAgIC0wLjUgKiAoZ2VvbWV0cnkuYm91bmRpbmdCb3gubWF4LnkgKyBnZW9tZXRyeS5ib3VuZGluZ0JveC5taW4ueSksXHJcbiAgICAgICAgICAgIC0wLjUgKiAoZ2VvbWV0cnkuYm91bmRpbmdCb3gubWF4LnogKyBnZW9tZXRyeS5ib3VuZGluZ0JveC5taW4ueilcclxuICAgICAgICApKTtcclxuICAgICAgICBnZW9tZXRyeS5jb21wdXRlQm91bmRpbmdCb3goKTtcclxuICAgICAgICAodGhpcy5vYmplY3QgYXMgTWVzaCkuZ2VvbWV0cnkgPSBnZW9tZXRyeTtcclxuICAgICAgICB0aGlzLmNhbGN1bGF0ZUhhbGZTaXplKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldFZpc2libGVNZXNoZXMoKTogVEhSRUUuTWVzaFtdIHtcclxuICAgICAgICBpZiAodGhpcy5pc0N1c3RvbSAmJiB0aGlzLnZpc2libGUpIHtcclxuICAgICAgICAgICAgY29uc3QgbWVzaGVzOiBUSFJFRS5NZXNoW10gPSBbXHJcbiAgICAgICAgICAgICAgICB0aGlzLmxlZnRGcmFtZSxcclxuICAgICAgICAgICAgICAgIHRoaXMudG9wRnJhbWUsXHJcbiAgICAgICAgICAgICAgICB0aGlzLnJpZ2h0RnJhbWUsXHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1c3RvbU1lc2hcclxuICAgICAgICAgICAgXTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuX2lzV2luZG93IC8qfHwgdGhpcy5fZG9vcnBvc3QqLykge1xyXG4gICAgICAgICAgICAgICAgbWVzaGVzLnB1c2godGhpcy5ib3R0b21GcmFtZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIG1lc2hlcztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gc3VwZXIuZ2V0VmlzaWJsZU1lc2hlcygpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYXN5bmMgY3JlYXRlVGV4dHVyZU1hdGVyaWFsKG9wdGlvbnM/KTogUHJvbWlzZTxUSFJFRS5NZXNoUGhvbmdNYXRlcmlhbD4ge1xyXG4gICAgICAgIGlmICh0aGlzLmlzQ3VzdG9tKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHtcclxuICAgICAgICAgICAgICAgIHNpZGUgPSBUSFJFRS5Eb3VibGVTaWRlLFxyXG4gICAgICAgICAgICAgICAgZmxpcCA9IGZhbHNlXHJcbiAgICAgICAgICAgIH0gPSBvcHRpb25zIHx8IHt9O1xyXG4gICAgICAgICAgICBjb25zdCBjaGVja01hdGVyaWFsOiBUSFJFRS5NZXNoUGhvbmdNYXRlcmlhbCA9IHRoaXMuX2lzV2luZG93ID8gdGhpcy53aW5kb3dNYXRlcmlhbCA6IHRoaXMuZG9vck1hdGVyaWFsRnJvbnQ7XHJcbiAgICAgICAgICAgIGlmICghY2hlY2tNYXRlcmlhbCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fY3JlYXRlTWF0ZXJpYWxzKHNpZGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IHRleHR1cmUgPSB0aGlzLmdldFRleHR1cmUoKTtcclxuICAgICAgICAgICAgaWYgKCF0ZXh0dXJlKSB7XHJcbiAgICAgICAgICAgICAgICAvLyByZXNldCB0byBkZWZhdWx0IHRleHR1cmVcclxuICAgICAgICAgICAgICAgIHRoaXMuX2NyZWF0ZU1hdGVyaWFscyhzaWRlKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY3JlYXRlQ3VzdG9tTWVzaCh0aGlzLmdldFdpZHRoKCksIHRoaXMuZ2V0SGVpZ2h0KCkpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2lzV2luZG93ID8gdGhpcy53aW5kb3dNYXRlcmlhbCA6IHRoaXMuZG9vck1hdGVyaWFsRnJvbnQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgbWF0ZXJpYWw6IFRIUkVFLk1lc2hQaG9uZ01hdGVyaWFsID0gdGhpcy5faXNXaW5kb3cgPyB0aGlzLndpbmRvd01hdGVyaWFsIDogdGhpcy5kb29yTWF0ZXJpYWxGcm9udDtcclxuICAgICAgICAgICAgY29uc3QgZGVmYXVsdE1hdGVyaWFsOiBUSFJFRS5NZXNoUGhvbmdNYXRlcmlhbCA9IG5ldyBUSFJFRS5NZXNoUGhvbmdNYXRlcmlhbCgpO1xyXG5cclxuICAgICAgICAgICAgbWF0ZXJpYWwudHJhbnNwYXJlbnQgPSBmYWxzZTtcclxuICAgICAgICAgICAgbWF0ZXJpYWwuY29sb3IgPSBkZWZhdWx0TWF0ZXJpYWwuY29sb3IuY2xvbmUoKTtcclxuICAgICAgICAgICAgbWF0ZXJpYWwub3BhY2l0eSA9IGRlZmF1bHRNYXRlcmlhbC5vcGFjaXR5O1xyXG4gICAgICAgICAgICBtYXRlcmlhbC5yZWZyYWN0aW9uUmF0aW8gPSBkZWZhdWx0TWF0ZXJpYWwucmVmcmFjdGlvblJhdGlvO1xyXG4gICAgICAgICAgICBtYXRlcmlhbC5zaGluaW5lc3MgPSBkZWZhdWx0TWF0ZXJpYWwuc2hpbmluZXNzO1xyXG4gICAgICAgICAgICBtYXRlcmlhbC5zcGVjdWxhciA9IGRlZmF1bHRNYXRlcmlhbC5zcGVjdWxhci5jbG9uZSgpO1xyXG5cclxuICAgICAgICAgICAgLy8gQWxsb3dzIGZvciB0cmFuc3BhcmVuY3kgaW4gcG5nJ3NcclxuICAgICAgICAgICAgbWF0ZXJpYWwuYWxwaGFUZXN0ID0gMC41O1xyXG4gICAgICAgICAgICAvLyBNYWtlcyBzdXJlIHRoZSBpbWFnZSBpbiBvbmx5IHByb2plY3RlZCBvbmNlIG9uIHRoZSBtZXNoXHJcbiAgICAgICAgICAgIG1hdGVyaWFsLnNpZGUgPSBUSFJFRS5Gcm9udFNpZGU7XHJcbiAgICAgICAgICAgIC8vIFJlbW92ZXMgd2hpdGUgZWRnZXMgc3Vycm91bmRpbmcgdGhlIGltYWdlXHJcbiAgICAgICAgICAgIG1hdGVyaWFsLnRyYW5zcGFyZW50ID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgIC8vIG1hdGVyaWFsLmNvbG9yID0gbmV3IFRIUkVFLkNvbG9yKDEsIDEsIDEpO1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLmFkZE1hdGVyaWFsTWFwKG1hdGVyaWFsLCB0ZXh0dXJlLCBmbGlwKTtcclxuICAgICAgICAgICAgbWF0ZXJpYWwubmVlZHNVcGRhdGUgPSB0cnVlO1xyXG4gICAgICAgICAgICByZXR1cm4gbWF0ZXJpYWw7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHN1cGVyLmNyZWF0ZVRleHR1cmVNYXRlcmlhbChvcHRpb25zKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNyZWF0ZUN1c3RvbU1lc2god2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBoYWxmV2lkdGg6IG51bWJlciA9IHdpZHRoIC8gMjtcclxuICAgICAgICBjb25zdCBoYWxmRnJhbWU6IG51bWJlciA9ICh0aGlzLl9mcmFtZVdpZHRoIC8gMik7XHJcblxyXG4gICAgICAgIHRoaXMubGVmdEZyYW1lID0gdGhpcy5fY3JlYXRlRnJhbWVTaWRlKHRoaXMuX2ZyYW1lV2lkdGgsIHRoaXMuX2dldEhlaWdodEZyYW1lKGhlaWdodCksIHRoaXMuX2ZyYW1lRGVwdGgpO1xyXG4gICAgICAgIHRoaXMubGVmdEZyYW1lLnJvdGF0aW9uLnNldCh0aGlzLl9pc1dpbmRvdyA/IDE4MCAqIChNYXRoLlBJIC8gMTgwKSA6IDAsIDAsIDApO1xyXG4gICAgICAgIHRoaXMubGVmdEZyYW1lLnBvc2l0aW9uLnggPSAtaGFsZldpZHRoICsgaGFsZkZyYW1lO1xyXG4gICAgICAgIHRoaXMubGVmdEZyYW1lLm5hbWUgPSAnbGVmdEZyYW1lJztcclxuICAgICAgICBpZiAoIXRoaXMuX2lzV2luZG93KSB7XHJcbiAgICAgICAgICAgIHRoaXMubGVmdEZyYW1lLnBvc2l0aW9uLnkgPSAtKHRoaXMuX2ZyYW1lV2lkdGggLyAyKSArIDAuMDI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnRvcEZyYW1lID0gdGhpcy5fY3JlYXRlRnJhbWVTaWRlKHRoaXMuX2ZyYW1lV2lkdGgsIHdpZHRoLCB0aGlzLl9mcmFtZURlcHRoKTtcclxuICAgICAgICB0aGlzLnRvcEZyYW1lLnJvdGF0aW9uLnNldCgwLCB0aGlzLl9pc1dpbmRvdyA/IDE4MCAqIChNYXRoLlBJIC8gMTgwKSA6IDAsIC05MCAqIChNYXRoLlBJIC8gMTgwKSk7XHJcbiAgICAgICAgdGhpcy50b3BGcmFtZS5wb3NpdGlvbi55ID0gKGhlaWdodCAvIDIpIC0gKHRoaXMuX2ZyYW1lV2lkdGggLyAyKTtcclxuICAgICAgICB0aGlzLnRvcEZyYW1lLm5hbWUgPSAndG9wRnJhbWUnO1xyXG5cclxuICAgICAgICB0aGlzLnJpZ2h0RnJhbWUgPSB0aGlzLl9jcmVhdGVGcmFtZVNpZGUodGhpcy5fZnJhbWVXaWR0aCwgdGhpcy5fZ2V0SGVpZ2h0RnJhbWUoaGVpZ2h0KSwgdGhpcy5fZnJhbWVEZXB0aCk7XHJcbiAgICAgICAgdGhpcy5yaWdodEZyYW1lLnJvdGF0aW9uLnNldCh0aGlzLl9pc1dpbmRvdyA/IDE4MCAqIChNYXRoLlBJIC8gMTgwKSA6IDAsIDAsIC0xODAgKiAoTWF0aC5QSSAvIDE4MCkpO1xyXG4gICAgICAgIHRoaXMucmlnaHRGcmFtZS5wb3NpdGlvbi54ID0gKHdpZHRoIC8gMikgLSAodGhpcy5fZnJhbWVXaWR0aCAvIDIpO1xyXG4gICAgICAgIHRoaXMucmlnaHRGcmFtZS5uYW1lID0gJ3JpZ2h0RnJhbWUnO1xyXG4gICAgICAgIGlmICghdGhpcy5faXNXaW5kb3cpIHtcclxuICAgICAgICAgICAgdGhpcy5yaWdodEZyYW1lLnBvc2l0aW9uLnkgPSAtKHRoaXMuX2ZyYW1lV2lkdGggLyAyKSArIDAuMDI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5faXNXaW5kb3cgLyp8fCB0aGlzLl9kb29ycG9zdCovKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYm90dG9tRnJhbWUgPSB0aGlzLl9jcmVhdGVGcmFtZVNpZGUodGhpcy5fZnJhbWVXaWR0aCwgd2lkdGgsIHRoaXMuX2ZyYW1lRGVwdGgpO1xyXG4gICAgICAgICAgICB0aGlzLmJvdHRvbUZyYW1lLnJvdGF0aW9uLnNldCgwLCAxODAgKiAoTWF0aC5QSSAvIDE4MCksIDkwICogKE1hdGguUEkgLyAxODApKTtcclxuICAgICAgICAgICAgdGhpcy5ib3R0b21GcmFtZS5wb3NpdGlvbi55ID0gLShoZWlnaHQgLyAyKSArICh0aGlzLl9mcmFtZVdpZHRoIC8gMik7XHJcbiAgICAgICAgICAgIHRoaXMuYm90dG9tRnJhbWUubmFtZSA9ICdib3R0b21GcmFtZSc7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgY3VzdG9tR2VvOiBUSFJFRS5Cb3hHZW9tZXRyeTtcclxuICAgICAgICBpZiAodGhpcy5faXNXaW5kb3cpIHtcclxuICAgICAgICAgICAgY3VzdG9tR2VvID0gbmV3IFRIUkVFLkJveEdlb21ldHJ5KHdpZHRoIC0gKDIgKiB0aGlzLl9mcmFtZVdpZHRoKSArIDAuMDQsIGhlaWdodCAtICgyICogdGhpcy5fZnJhbWVXaWR0aCkgKyAwLjA0LCAwLjAyNCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY3VzdG9tR2VvID0gbmV3IFRIUkVFLkJveEdlb21ldHJ5KHdpZHRoIC0gMC4wMiAqICh0aGlzLl9mcmFtZVdpZHRoIC0gMC4wMiksIGhlaWdodCAtICh0aGlzLl9mcmFtZVdpZHRoIC0gMC4wMiksIDAuMDQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmN1c3RvbU1lc2ggPSBuZXcgVEhSRUUuTWVzaChjdXN0b21HZW8sIHRoaXMuX2lzV2luZG93ID8gdGhpcy53aW5kb3dNYXRlcmlhbCA6IHRoaXMuZG9vck1hdGVyaWFsRnJvbnQpO1xyXG4gICAgICAgIHRoaXMuY3VzdG9tTWVzaC5jYXN0U2hhZG93ID0gdGhpcy5faXNXaW5kb3cgPyBmYWxzZSA6ICF0aGlzLmlzR2xhc3M7XHJcbiAgICAgICAgdGhpcy5jdXN0b21NZXNoLnJlbmRlck9yZGVyID0gLTE7XHJcblxyXG4gICAgICAgIHRoaXMuY3VzdG9tTWVzaC5uYW1lID0gJ2N1c3RvbU1lc2gnO1xyXG4gICAgICAgIGlmICh0aGlzLl9pc1dpbmRvdykge1xyXG4gICAgICAgICAgICB0aGlzLmN1c3RvbU1lc2gubmFtZSArPSAnV2luZG93JztcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuaXNHbGFzcykge1xyXG4gICAgICAgICAgICB0aGlzLmN1c3RvbU1lc2gubmFtZSArPSAnR2xhc3MnO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX2lzV2luZG93KSB7XHJcbiAgICAgICAgICAgIHRoaXMuY3VzdG9tTWVzaC5wb3NpdGlvbi56ID0gLTAuMDEyO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuY3VzdG9tTWVzaC5wb3NpdGlvbi55ID0gLSh0aGlzLl9mcmFtZVdpZHRoIC8gMikgKyAwLjAxO1xyXG4gICAgICAgICAgICB0aGlzLmN1c3RvbU1lc2gucG9zaXRpb24ueiA9IDAuMDI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX2dldEFkZGl0aW9uYWxUZXh0dXJlKCkudGhlbigoZnJvbnRBZGRpdGlvbmFsT2JqOiBUSFJFRS5NZXNoKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChmcm9udEFkZGl0aW9uYWxPYmopIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGJhY2tBZGRpdGlvbmFsT2JqID0gZnJvbnRBZGRpdGlvbmFsT2JqLmNsb25lKHRydWUpO1xyXG4gICAgICAgICAgICAgICAgYmFja0FkZGl0aW9uYWxPYmoucm90YXRpb24ueCA9IDE4MCAqIChNYXRoLlBJIC8gMTgwKTtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmFkZGl0aW9uYWxUZXh0dXJlLmRhdGEpIHtcclxuICAgICAgICAgICAgICAgICAgICBmcm9udEFkZGl0aW9uYWxPYmoucG9zaXRpb24uc2V0KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAtKHdpZHRoIC8gMikgKyB0aGlzLmFkZGl0aW9uYWxUZXh0dXJlLmRhdGEueCwgLShoZWlnaHQgLyAyKSArIHRoaXMuYWRkaXRpb25hbFRleHR1cmUuZGF0YS55LCAwLjAyKTtcclxuICAgICAgICAgICAgICAgICAgICBiYWNrQWRkaXRpb25hbE9iai5wb3NpdGlvbi5zZXQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC0od2lkdGggLyAyKSArIHRoaXMuYWRkaXRpb25hbFRleHR1cmUuZGF0YS54LCAtKGhlaWdodCAvIDIpICsgdGhpcy5hZGRpdGlvbmFsVGV4dHVyZS5kYXRhLnksIC0wLjAyKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuY3VzdG9tTWVzaC5hZGQoZnJvbnRBZGRpdGlvbmFsT2JqKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY3VzdG9tTWVzaC5hZGQoYmFja0FkZGl0aW9uYWxPYmopO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuY2hpbGRyZW4ubGVuZ3RoID0gMDtcclxuICAgICAgICB0aGlzLmFkZCh0aGlzLmxlZnRGcmFtZSwgdGhpcy5yaWdodEZyYW1lLCB0aGlzLnRvcEZyYW1lLCB0aGlzLmN1c3RvbU1lc2gpO1xyXG4gICAgICAgIGlmICh0aGlzLl9pc1dpbmRvdyAvKnx8IHRoaXMuX2Rvb3Jwb3N0Ki8pIHtcclxuICAgICAgICAgICAgdGhpcy5hZGQodGhpcy5ib3R0b21GcmFtZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuY2FsY3VsYXRlSGFsZlNpemUoKTtcclxuICAgICAgICAvLyB0aGlzLnNjZW5lLm5lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY2xvbmVJdGVtKCk6IEluV2FsbEl0ZW0ge1xyXG4gICAgICAgIGNvbnN0IGNsb25lOiBJbldhbGxJdGVtID0gdGhpcy5jcmVhdGVDbGFzcygpO1xyXG4gICAgICAgIHRoaXMuY2xvbmVQcm9wZXJ0aWVzKGNsb25lKTtcclxuICAgICAgICBjbG9uZS5uYW1lID0gJ3Rlc3QgY2xvbmUnO1xyXG4gICAgICAgIGNsb25lLmJ1aWxkRmluaXNoZWQoKTtcclxuICAgICAgICByZXR1cm4gY2xvbmU7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIGFzeW5jIGNyZWF0ZU1hdGVyaWFsKHNpZGUgPSBUSFJFRS5Eb3VibGVTaWRlLCBpc1NhbWUgPSB0cnVlKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNDdXN0b20pIHtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5jcmVhdGVUZXh0dXJlTWF0ZXJpYWwoe3NpZGU6IFRIUkVFLkZyb250U2lkZSwgZmxpcDogZmFsc2V9KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBhd2FpdCBzdXBlci5jcmVhdGVUZXh0dXJlTWF0ZXJpYWwoe3NpZGUsIGlzU2FtZX0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgY3JlYXRlQ2xhc3MoKTogSW5XYWxsSXRlbSB7XHJcbiAgICAgICAgLy8gY3JlYXRlIG5ldyBvYmplY3QgZm9yIHByb3BlciBkaW1lbnNpb25zXHJcbiAgICAgICAgY29uc3QgbWVzaDogTWVzaCA9IG5ldyBNZXNoKG5ldyBCb3hHZW9tZXRyeSh0aGlzLmhhbGZTaXplLnggKiAyLCB0aGlzLmhhbGZTaXplLnkgKiAyLCB0aGlzLmhhbGZTaXplLnogKiAyKSk7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBJbldhbGxJdGVtKHRoaXMubWV0YWRhdGEsIG1lc2gpO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBjbG9uZVByb3BlcnRpZXMoY2xvbmU6IEluV2FsbEl0ZW0pOiB2b2lkIHtcclxuICAgICAgICBjbG9uZS51c2VyRGF0YSA9IHRoaXMudXNlckRhdGE7XHJcbiAgICAgICAgY2xvbmUuZG9vck1hdGVyaWFsRnJvbnQgPSB0aGlzLmRvb3JNYXRlcmlhbEZyb250ID8gPE1lc2hQaG9uZ01hdGVyaWFsPnRoaXMuZG9vck1hdGVyaWFsRnJvbnQuY2xvbmUoKSA6IHVuZGVmaW5lZDtcclxuICAgICAgICBpZiAoY2xvbmUuZG9vck1hdGVyaWFsRnJvbnQpIHtcclxuICAgICAgICAgICAgY2xvbmUuZG9vck1hdGVyaWFsRnJvbnQuZW1pc3NpdmUgPSBuZXcgVEhSRUUuQ29sb3IoMHgwMDAwMDApO1xyXG4gICAgICAgICAgICBjbG9uZS5kb29yTWF0ZXJpYWxGcm9udC5uZWVkc1VwZGF0ZSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNsb25lLndpbmRvd01hdGVyaWFsID0gdGhpcy53aW5kb3dNYXRlcmlhbCA/IDxNZXNoUGhvbmdNYXRlcmlhbD50aGlzLndpbmRvd01hdGVyaWFsLmNsb25lKCkgOiB1bmRlZmluZWQ7XHJcbiAgICAgICAgaWYgKGNsb25lLndpbmRvd01hdGVyaWFsKSB7XHJcbiAgICAgICAgICAgIGNsb25lLndpbmRvd01hdGVyaWFsLmVtaXNzaXZlID0gbmV3IFRIUkVFLkNvbG9yKDB4MDAwMDAwKTtcclxuICAgICAgICAgICAgY2xvbmUud2luZG93TWF0ZXJpYWwubmVlZHNVcGRhdGUgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjbG9uZS5mcmFtZU1hdGVyaWFsID0gdGhpcy5mcmFtZU1hdGVyaWFsID8gPE1lc2hQaG9uZ01hdGVyaWFsPnRoaXMuZnJhbWVNYXRlcmlhbC5jbG9uZSgpIDogdW5kZWZpbmVkO1xyXG4gICAgICAgIGlmIChjbG9uZS5mcmFtZU1hdGVyaWFsKSB7XHJcbiAgICAgICAgICAgIGNsb25lLmZyYW1lTWF0ZXJpYWwuZW1pc3NpdmUgPSBuZXcgVEhSRUUuQ29sb3IoMHgwMDAwMDApO1xyXG4gICAgICAgICAgICBjbG9uZS5mcmFtZU1hdGVyaWFsLm5lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2xvbmUuZnJhbWVDb2xvciA9IHRoaXMuZnJhbWVDb2xvcjtcclxuICAgICAgICBjbG9uZS5kb29yQ29sb3IgPSB0aGlzLmRvb3JDb2xvcjtcclxuICAgICAgICAoKGNsb25lLm9iamVjdCBhcyBNZXNoKS5tYXRlcmlhbCBhcyBhbnkpID0gW2Nsb25lLmZyYW1lTWF0ZXJpYWwsIGNsb25lLl9pc1dpbmRvdyA/IGNsb25lLndpbmRvd01hdGVyaWFsIDogY2xvbmUuZG9vck1hdGVyaWFsRnJvbnRdO1xyXG4gICAgICAgIGNsb25lLnRleHR1cmUgPSB0aGlzLnRleHR1cmU7XHJcbiAgICAgICAgY2xvbmUuYWRkaXRpb25hbFRleHR1cmUgPSB0aGlzLmFkZGl0aW9uYWxUZXh0dXJlO1xyXG4gICAgICAgIGNsb25lLmlzR2xhc3MgPSB0aGlzLmlzR2xhc3M7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIGdldE1hdGVyaWFscyh0ZXh0dXJlTWF0ZXJpYWxGcm9udDogVEhSRUUuTWF0ZXJpYWwsIHRleHR1cmVNYXRlcmlhbEJhY2s6IFRIUkVFLk1hdGVyaWFsKTogVEhSRUUuTWF0ZXJpYWxbXSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNDdXN0b20pIHtcclxuICAgICAgICAgICAgcmV0dXJuICh0aGlzLm9iamVjdCBhcyBNZXNoKS5tYXRlcmlhbCBhcyBhbnk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIHN1cGVyLmdldE1hdGVyaWFscyh0ZXh0dXJlTWF0ZXJpYWxGcm9udCwgdGV4dHVyZU1hdGVyaWFsQmFjayk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBnZXRNYXRlcmlhbE1hcERpbWVuc2lvbnMoKTogVEhSRUUuVmVjdG9yMiB7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNDdXN0b20pIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBUSFJFRS5WZWN0b3IyKFxyXG4gICAgICAgICAgICAgICAgdGhpcy5nZXRXaWR0aCgpIC0gMC4xNCxcclxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0SGVpZ2h0KCkgLSAwLjA3XHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIHN1cGVyLmdldE1hdGVyaWFsTWFwRGltZW5zaW9ucygpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgaW5pdGlhdGVJdGVtT2JqZWN0KGRhdGE6IGFueSk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLmlzQ3VzdG9tICYmIGRhdGEgJiYgZGF0YS5nZW9tZXRyeSkge1xyXG4gICAgICAgICAgICBkYXRhLmdlb21ldHJ5LnZlcnRpY2VzTmVlZFVwZGF0ZSA9IHRydWU7XHJcbiAgICAgICAgICAgIGRhdGEuZ2VvbWV0cnkuY29tcHV0ZUJvdW5kaW5nQm94KCk7XHJcbiAgICAgICAgICAgIGRhdGEuZ2VvbWV0cnkuYXBwbHlNYXRyaXg0KG5ldyBNYXRyaXg0KCkubWFrZVRyYW5zbGF0aW9uKFxyXG4gICAgICAgICAgICAgICAgLTAuNSAqIChkYXRhLmdlb21ldHJ5LmJvdW5kaW5nQm94Lm1heC54ICsgZGF0YS5nZW9tZXRyeS5ib3VuZGluZ0JveC5taW4ueCksXHJcbiAgICAgICAgICAgICAgICAtMC41ICogKGRhdGEuZ2VvbWV0cnkuYm91bmRpbmdCb3gubWF4LnkgKyBkYXRhLmdlb21ldHJ5LmJvdW5kaW5nQm94Lm1pbi55KSxcclxuICAgICAgICAgICAgICAgIC0wLjUgKiAoZGF0YS5nZW9tZXRyeS5ib3VuZGluZ0JveC5tYXgueiArIGRhdGEuZ2VvbWV0cnkuYm91bmRpbmdCb3gubWluLnopXHJcbiAgICAgICAgICAgICkpO1xyXG4gICAgICAgICAgICBkYXRhLmdlb21ldHJ5LmNvbXB1dGVCb3VuZGluZ0JveCgpO1xyXG4gICAgICAgICAgICBjb25zdCBtYXggPSBkYXRhLmdlb21ldHJ5LmJvdW5kaW5nQm94Lm1heC5jbG9uZSgpO1xyXG4gICAgICAgICAgICBjb25zdCBtaW4gPSBkYXRhLmdlb21ldHJ5LmJvdW5kaW5nQm94Lm1pbi5jbG9uZSgpO1xyXG4gICAgICAgICAgICB0aGlzLmhhbGZTaXplID0gbWF4LnN1YihtaW4pLmRpdmlkZVNjYWxhcigyKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfc2V0RGVmYXVsdCgpOiB2b2lkIHtcclxuICAgICAgICAvLyB3b3JrYXJvdW5kIGJlY2F1c2UgcHJvcGVydGllcyBhcmUgbm90IGF2YWlsYWJsZSB5ZXQgd2hlbiBjcmVhdGluZyB3aW5kb3cvZG9vciBmcm9tIGxvYWRpbmcgZnJvbSBjbG91ZC9sb2NhbFxyXG4gICAgICAgIHRoaXMuZnJhbWVDb2xvciA9IHRoaXMubWV0YWRhdGEuZnJhbWVDb2xvciA/IHRoaXMubWV0YWRhdGEuZnJhbWVDb2xvciA6IHRoaXMuX2RlZmF1bHRGcmFtZUNvbG9yOyAvLyBSQUwtMTAxMVxyXG4gICAgICAgIHRoaXMuZG9vckNvbG9yID0gdGhpcy5tZXRhZGF0YS5kb29yQ29sb3IgPyB0aGlzLm1ldGFkYXRhLmRvb3JDb2xvciA6IHRoaXMuX2RlZmF1bHREb29yQ29sb3I7IC8vIFJBTC05MDEwXHJcbiAgICAgICAgdGhpcy53aW5kb3dDb2xvciA9IHRoaXMubWV0YWRhdGEud2luZG93Q29sb3IgPyB0aGlzLm1ldGFkYXRhLndpbmRvd0NvbG9yIDogbmV3IFRIUkVFLkNvbG9yKDB4ZGZmMGYyKTtcclxuICAgICAgICB0aGlzLl9pc1dpbmRvdyA9IHRoaXMubWV0YWRhdGEuaXRlbVR5cGUgPT09IEl0ZW1UeXBlLkluV2FsbDtcclxuICAgICAgICB0aGlzLl9kb29ycG9zdCA9IHRoaXMubWV0YWRhdGEuZG9vcnBvc3Q7XHJcbiAgICAgICAgdGhpcy5pc0dsYXNzID0gdGhpcy5tZXRhZGF0YS5pc0dsYXNzID8gdGhpcy5tZXRhZGF0YS5pc0dsYXNzIDogZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfY3JlYXRlTWF0ZXJpYWxzKHNpZGU6IFRIUkVFLlNpZGUpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl9zZXREZWZhdWx0KCk7XHJcbiAgICAgICAgdGhpcy5mcmFtZU1hdGVyaWFsID0gbmV3IFRIUkVFLk1lc2hQaG9uZ01hdGVyaWFsKHtzaWRlOiBzaWRlLCBuYW1lOiAnZnJhbWVNYXRlcmlhbCd9KTtcclxuICAgICAgICB0aGlzLmZyYW1lTWF0ZXJpYWwuY29sb3IgPSBuZXcgVEhSRUUuQ29sb3IodGhpcy5mcmFtZUNvbG9yKTtcclxuICAgICAgICBpZiAodGhpcy5faXNXaW5kb3cpIHtcclxuICAgICAgICAgICAgdGhpcy53aW5kb3dNYXRlcmlhbCA9IG5ldyBUSFJFRS5NZXNoUGhvbmdNYXRlcmlhbCh7c2lkZTogc2lkZSwgY29sb3I6IHRoaXMud2luZG93Q29sb3IsIG5hbWU6ICd3aW5kb3dNYXRlcmlhbCd9KTtcclxuICAgICAgICAgICAgdGhpcy53aW5kb3dNYXRlcmlhbC50cmFuc3BhcmVudCA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMud2luZG93TWF0ZXJpYWwuYWxwaGFUZXN0ID0gMDtcclxuICAgICAgICAgICAgdGhpcy53aW5kb3dNYXRlcmlhbC5vcGFjaXR5ID0gMC4yO1xyXG4gICAgICAgICAgICB0aGlzLndpbmRvd01hdGVyaWFsLm1hcCA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgdGhpcy53aW5kb3dNYXRlcmlhbC5uZWVkc1VwZGF0ZSA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMud2luZG93TWF0ZXJpYWwuc2lkZSA9IFRIUkVFLkZyb250U2lkZTtcclxuICAgICAgICAgICAgKCh0aGlzLm9iamVjdCBhcyBNZXNoKS5tYXRlcmlhbCBhcyBhbnkpID0gW3RoaXMuZnJhbWVNYXRlcmlhbCwgdGhpcy53aW5kb3dNYXRlcmlhbF07XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5kb29yTWF0ZXJpYWxGcm9udCA9IG5ldyBUSFJFRS5NZXNoUGhvbmdNYXRlcmlhbCh7c2lkZTogc2lkZSwgbmFtZTogJ2Rvb3JNYXRlcmlhbEZyb250J30pO1xyXG4gICAgICAgICAgICB0aGlzLmRvb3JNYXRlcmlhbEZyb250LmNvbG9yID0gbmV3IFRIUkVFLkNvbG9yKHRoaXMuZG9vckNvbG9yKTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuX2Rvb3Jwb3N0KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRvb3JNYXRlcmlhbEZyb250LnRyYW5zcGFyZW50ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZG9vck1hdGVyaWFsRnJvbnQub3BhY2l0eSA9IDA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgKCh0aGlzLm9iamVjdCBhcyBNZXNoKS5tYXRlcmlhbCBhcyBhbnkpID0gW3RoaXMuZnJhbWVNYXRlcmlhbCwgdGhpcy5kb29yTWF0ZXJpYWxGcm9udF07XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX2dldEhlaWdodEZyYW1lKGhlaWdodDogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgICAgICByZXR1cm4gaGVpZ2h0IC0gKHRoaXMuX2lzV2luZG93ID8gMiAqICh0aGlzLl9mcmFtZVdpZHRoIC0gMC4wMikgOiB0aGlzLl9mcmFtZVdpZHRoIC0gMC4wMik7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfY3JlYXRlRnJhbWVTaWRlKHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyLCBkZXB0aDogbnVtYmVyKTogVEhSRUUuTWVzaCB7XHJcbiAgICAgICAgY29uc3Qgb3V0ZXJGcmFtZVdpZHRoOiBudW1iZXIgPSB3aWR0aCAtIDAuMDI7XHJcbiAgICAgICAgY29uc3Qgb3V0ZXJGcmFtZUdlbyA9IG5ldyBUSFJFRS5Cb3hHZW9tZXRyeShvdXRlckZyYW1lV2lkdGgsIGhlaWdodCwgZGVwdGgpO1xyXG4gICAgICAgIGNvbnN0IG91dGVyRnJhbWUgPSBuZXcgVEhSRUUuTWVzaChvdXRlckZyYW1lR2VvLCB0aGlzLmZyYW1lTWF0ZXJpYWwpO1xyXG4gICAgICAgIG91dGVyRnJhbWUuY2FzdFNoYWRvdyA9IHRydWU7XHJcbiAgICAgICAgb3V0ZXJGcmFtZS5yZWNlaXZlU2hhZG93ID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgY29uc3QgaW5uZXJGcmFtZUdlbyA9IG5ldyBUSFJFRS5Cb3hHZW9tZXRyeSgwLjAyLCBoZWlnaHQsIGRlcHRoIC8gMik7XHJcbiAgICAgICAgY29uc3QgaW5uZXJGcmFtZSA9IG5ldyBUSFJFRS5NZXNoKGlubmVyRnJhbWVHZW8sIHRoaXMuZnJhbWVNYXRlcmlhbCk7XHJcbiAgICAgICAgaW5uZXJGcmFtZS5jYXN0U2hhZG93ID0gdHJ1ZTtcclxuICAgICAgICBpbm5lckZyYW1lLnJlY2VpdmVTaGFkb3cgPSB0cnVlO1xyXG4gICAgICAgIGlubmVyRnJhbWUucG9zaXRpb24ueCA9IChvdXRlckZyYW1lV2lkdGggLyAyKSArIDAuMDE7XHJcbiAgICAgICAgaW5uZXJGcmFtZS5wb3NpdGlvbi56ID0gLWRlcHRoIC8gNDtcclxuXHJcbiAgICAgICAgY29uc3QgZnJhbWVTaWRlID0gbmV3IFRIUkVFLk9iamVjdDNEKCk7XHJcbiAgICAgICAgZnJhbWVTaWRlLmFkZChvdXRlckZyYW1lLCBpbm5lckZyYW1lKTtcclxuICAgICAgICBjb25zdCBib3VuZGluZ0JveCA9IG5ldyBUSFJFRS5Cb3gzKCkuc2V0RnJvbU9iamVjdChmcmFtZVNpZGUpO1xyXG4gICAgICAgIGNvbnN0IGJiQ2VudGVyUGl2b3QgPSBuZXcgVEhSRUUuVmVjdG9yMygpO1xyXG4gICAgICAgIGJvdW5kaW5nQm94LmdldENlbnRlcihiYkNlbnRlclBpdm90KTtcclxuICAgICAgICBjb25zdCBkZWx0YSA9IG5ldyBUSFJFRS5WZWN0b3IzKCkuc3ViKGJiQ2VudGVyUGl2b3QpLnNldFkoMCk7XHJcbiAgICAgICAgZnJhbWVTaWRlLmNoaWxkcmVuLmZvckVhY2goKGNoaWxkOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgY2hpbGQucG9zaXRpb24uYWRkKGRlbHRhKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICBjb25zdCBmcmFtZVNpZGVNZXNoID0gbmV3IE1lc2goKTtcclxuICAgICAgICBmcmFtZVNpZGVNZXNoLmFkZChvdXRlckZyYW1lLCBpbm5lckZyYW1lKTtcclxuICAgICAgICByZXR1cm4gZnJhbWVTaWRlTWVzaDtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF9nZXRBZGRpdGlvbmFsVGV4dHVyZSgpOiBQcm9taXNlPFRIUkVFLk1lc2g+IHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmU6IEZ1bmN0aW9uLCByZWplY3Q6IEZ1bmN0aW9uKSA9PiB7XHJcbiAgICAgICAgICAgIC8vIGlmICh0aGlzLmFkZGl0aW9uYWxUZXh0dXJlKSB7XHJcbiAgICAgICAgICAgIC8vICAgICBMb2FkZXJVdGlscy5Mb2FkT2JqTW9kZWwodGhpcy5hZGRpdGlvbmFsVGV4dHVyZS51cmwpLnRoZW4oKG9iajogVEhSRUUuTWVzaCkgPT4ge1xyXG4gICAgICAgICAgICAvLyAgICAgICAgIGNvbnN0IGFkZGl0aW9uYWxPYmo6IFRIUkVFLk1lc2ggPSA8TWVzaD5vYmouY2xvbmUodHJ1ZSk7XHJcbiAgICAgICAgICAgIC8vICAgICAgICAgYWRkaXRpb25hbE9iai5jaGlsZHJlbi5tYXAoYyA9PiBjLnBvc2l0aW9uLnNldCgwLCAwLCAwKSk7XHJcbiAgICAgICAgICAgIC8vICAgICAgICAgaWYgKHRoaXMuYWRkaXRpb25hbFRleHR1cmUuc2NhbGUpIHtcclxuICAgICAgICAgICAgLy8gICAgICAgICAgICAgYWRkaXRpb25hbE9iai5zY2FsZS5tdWx0aXBseVNjYWxhcih0aGlzLmFkZGl0aW9uYWxUZXh0dXJlLnNjYWxlKTtcclxuICAgICAgICAgICAgLy8gICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vICAgICAgICAgcmVzb2x2ZShhZGRpdGlvbmFsT2JqKTtcclxuICAgICAgICAgICAgLy8gICAgIH0pO1xyXG4gICAgICAgICAgICAvLyB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcmVzb2x2ZShudWxsKTtcclxuICAgICAgICAgICAgLy8gfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX2dsYXNzTWF0ZXJpYWxDaGVjaygpIHtcclxuICAgICAgICBsZXQgbWVzaGVzRm91bmQgPSAwO1xyXG4gICAgICAgIHRoaXMudHJhdmVyc2UoKGNoaWxkKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChjaGlsZCBpbnN0YW5jZW9mIE1lc2ggJiYgY2hpbGQubWF0ZXJpYWwpIHtcclxuICAgICAgICAgICAgICAgIG1lc2hlc0ZvdW5kKys7XHJcbiAgICAgICAgICAgICAgICBjaGlsZC5jYXN0U2hhZG93ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG1hdGVyaWFsczogYW55ID0gIUFycmF5LmlzQXJyYXkoY2hpbGQubWF0ZXJpYWwpID8gW2NoaWxkLm1hdGVyaWFsXSA6IGNoaWxkLm1hdGVyaWFsO1xyXG4gICAgICAgICAgICAgICAgbWF0ZXJpYWxzLmZvckVhY2gobWF0ZXJpYWwgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChtYXRlcmlhbC5uYW1lICYmIChtYXRlcmlhbC5uYW1lID09PSAnRml4ZWRfR2xhc3MnIHx8IG1hdGVyaWFsLm5hbWUgPT09ICdEZWZhdWx0X0dsYXNzJykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGQuY2FzdFNoYWRvdyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRlcmlhbC50cmFuc3BhcmVudCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsLm9wYWNpdHkgPSAwLjI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsLmZvcm1hdCA9IFRIUkVFLlJHQkFGb3JtYXQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsLm5lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICAvLyBSZW1vdmUgdG8gaWdub3JlIG9sZCBkb29yIG1vZGVsc1xyXG4gICAgICAgIGlmIChtZXNoZXNGb3VuZCA9PT0gMSkge1xyXG4gICAgICAgICAgICB0aGlzLnRyYXZlcnNlKChjaGlsZCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKGNoaWxkIGluc3RhbmNlb2YgTWVzaCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkLmNhc3RTaGFkb3cgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1hdGVyaWFsczogYW55ID0gIUFycmF5LmlzQXJyYXkoY2hpbGQubWF0ZXJpYWwpID8gW2NoaWxkLm1hdGVyaWFsXSA6IGNoaWxkLm1hdGVyaWFsO1xyXG4gICAgICAgICAgICAgICAgICAgIG1hdGVyaWFscy5mb3JFYWNoKG0gPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBtLnZpc2libGUgPSBtLm5hbWUgJiYgKG0ubmFtZSA9PT0gJ0ZpeGVkX0dsYXNzJyB8fCBtLm5hbWUgPT09ICdEZWZhdWx0X0dsYXNzJykgPyBtLnZpc2libGUgPSBmYWxzZSA6IG0udmlzaWJsZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFdhbGxJdGVtR3JvdXAgZXh0ZW5kcyBJdGVtR3JvdXAge1xyXG5cclxuICAgIHB1YmxpYyBjdXJyZW50V2FsbEVkZ2U6IEhhbGZFZGdlO1xyXG4gICAgcHVibGljIGN1cnJlbnRXYWxsOiBXYWxsO1xyXG4gICAgcHVibGljIGVsZXZhdGlvbkFkanVzdGFibGU6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICAgIHByaXZhdGUgX3Bvc2l0aW9uWVRvbGVyYW5jZSA9IDAuMDA1O1xyXG4gICAgcHJpdmF0ZSBfb3JpZ2luYWxSb3RhdGlvbjogRXVsZXI7XHJcbiAgICBwcml2YXRlIF9vbkZyb250U2lkZTogYm9vbGVhbjtcclxuICAgIHByaXZhdGUgX3dhbGxPZmZzZXRTY2FsYXIgPSAwO1xyXG4gICAgcHJpdmF0ZSBfc2l6ZVggPSAwO1xyXG4gICAgcHJpdmF0ZSBfc2l6ZVkgPSAwO1xyXG4gICAgcHJpdmF0ZSBfcmVmVmVjID0gbmV3IFRIUkVFLlZlY3RvcjIoMCwgMS4wKTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgICAgIHRoaXMubWV0YWRhdGEgPSB7XHJcbiAgICAgICAgICAgIGl0ZW1UeXBlOiAyMlxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy51c2VyRGF0YS5pdGVtVHlwZSA9IHRoaXMubWV0YWRhdGEuaXRlbVR5cGU7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIHJlZHJhd1dhbGwoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFdhbGxFZGdlICYmIHRoaXMuY3VycmVudFdhbGxFZGdlLndhbGwpIHtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50V2FsbEVkZ2Uud2FsbC5maXJlUmVkcmF3KCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpc1ZhbGlkUG9zaXRpb24ocG9zaXRpb246IFZlY3RvcjMsIHJvdGF0aW9uPzogRXVsZXIsIG9wdGlvbnM/OiBhbnkpOiBDb2xsaXNpb25JbmZvIHtcclxuICAgICAgICByZXR1cm4geyB2YWxpZDogdHJ1ZSB9O1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBtb3ZlVG9Qb3NpdGlvbih2ZWMzOiBWZWN0b3IzLCBpbnRlcnNlY3Rpb24/OiBJbnRlcnNlY3Rpb24pIHtcclxuICAgICAgICBpZiAoaW50ZXJzZWN0aW9uKSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5jdXJyZW50V2FsbEVkZ2UgJiYgKHRoaXMuaXRlbXNbMF0gYXMgV2FsbEl0ZW0pLmN1cnJlbnRXYWxsRWRnZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50V2FsbEVkZ2UgPSAodGhpcy5pdGVtc1swXSBhcyBXYWxsSXRlbSkuY3VycmVudFdhbGxFZGdlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmN1cnJlbnRXYWxsRWRnZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fYm91bmRNb3ZlKHZlYzMpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wb3NpdGlvbi5jb3B5KHZlYzMpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZWRyYXdXYWxsKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNyZWF0ZUJvdW5kYXJ5Qm94KCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuYm91bmRhcnlCb3guc2V0RnJvbU9iamVjdCh0aGlzKTtcclxuICAgICAgICBjb25zdCBtYXggPSB0aGlzLmJvdW5kYXJ5Qm94Lm1heC5jbG9uZSgpO1xyXG4gICAgICAgIGNvbnN0IG1pbiA9IHRoaXMuYm91bmRhcnlCb3gubWluLmNsb25lKCk7XHJcbiAgICAgICAgdGhpcy5oYWxmU2l6ZSA9IG1heC5zdWIobWluKS5kaXZpZGVTY2FsYXIoMik7XHJcbiAgICAgICAgdGhpcy51cGRhdGVTaXplKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNlbnRlclBpdm90KCk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IGJvdW5kYXJ5Qm94Q2VudGVyID0gdGhpcy5ib3VuZGFyeUJveENlbnRlcjtcclxuICAgICAgICB0aGlzLnBvc2l0aW9uLmNvcHkoYm91bmRhcnlCb3hDZW50ZXIpO1xyXG4gICAgICAgIHRoaXMuaXRlbXMuZm9yRWFjaChpID0+IHtcclxuICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWxQb3NpdGlvbiA9IGkucG9zaXRpb24uY2xvbmUoKTtcclxuICAgICAgICAgICAgY29uc3QgbmV3UG9zaXRpb24gPSBvcmlnaW5hbFBvc2l0aW9uLnN1Yihib3VuZGFyeUJveENlbnRlcik7XHJcbiAgICAgICAgICAgIGkucG9zaXRpb24uY29weShuZXdQb3NpdGlvbik7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHVwZGF0ZVNpemUoKSB7XHJcbiAgICAgICAgdGhpcy5fd2FsbE9mZnNldFNjYWxhciA9IHRoaXMuaGFsZlNpemUuejtcclxuICAgICAgICB0aGlzLl9zaXplWCA9IHRoaXMuaGFsZlNpemUueCAqIDI7XHJcbiAgICAgICAgdGhpcy5fc2l6ZVkgPSB0aGlzLmhhbGZTaXplLnkgKiAyO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBvbldhbGxNb3ZlZCh3YWxsOiBXYWxsKSB7XHJcbiAgICAgICAgaWYgKHdhbGwuZnJvbnRFZGdlKSB7XHJcbiAgICAgICAgICAgIHRoaXMucGxhY2VPbkVkZ2Uod2FsbC5mcm9udEVkZ2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAod2FsbC5iYWNrRWRnZSkge1xyXG4gICAgICAgICAgICB0aGlzLnBsYWNlT25FZGdlKHdhbGwuYmFja0VkZ2UpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcGxhY2VPbkVkZ2UoZWRnZTogSGFsZkVkZ2UpIHtcclxuICAgICAgICB0aGlzLl9vcmlnaW5hbFJvdGF0aW9uID0gdGhpcy5yb3RhdGlvbi5jbG9uZSgpO1xyXG5cclxuICAgICAgICBpZiAoIWVkZ2UpIHsgcmV0dXJuOyB9XHJcbiAgICAgICAgdGhpcy5fb25Gcm9udFNpZGUgPSBlZGdlLndhbGwuZnJvbnRFZGdlID09PSBlZGdlO1xyXG4gICAgICAgIHRoaXMuX2NoYW5nZVdhbGxFZGdlKGVkZ2UpO1xyXG5cclxuICAgICAgICBjb25zdCBuZXdQb3MgPSBlZGdlLndhbGwuYW1vdW50V2FsbE1vdmVkID8gdGhpcy5wb3NpdGlvbi5hZGQobmV3IFZlY3RvcjMoZWRnZS53YWxsLmFtb3VudFdhbGxNb3ZlZC54LCAwLCAwKSkgOiB0aGlzLnBvc2l0aW9uLmNsb25lKCk7XHJcbiAgICAgICAgdGhpcy5fYm91bmRNb3ZlKG5ld1Bvcyk7XHJcbiAgICAgICAgdGhpcy5wb3NpdGlvbi5jb3B5KG5ld1Bvcyk7XHJcbiAgICAgICAgdGhpcy5yZWRyYXdXYWxsKCk7XHJcbiAgICAgICAgdGhpcy5hbGxvd1JvdGF0ZSA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBoYW5kbGVHcm91cENyZWF0aW9uKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuaXRlbXMuZm9yRWFjaCgoaSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuY3VycmVudFdhbGxFZGdlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRXYWxsRWRnZSA9IChpIGFzIFdhbGxJdGVtKS5jdXJyZW50V2FsbEVkZ2U7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRXYWxsID0gdGhpcy5jdXJyZW50V2FsbEVkZ2Uud2FsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRXYWxsLnJlbW92ZU9uSXRlbShpKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLnBsYWNlT25FZGdlKHRoaXMuY3VycmVudFdhbGxFZGdlKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF9jaGFuZ2VXYWxsRWRnZSh3YWxsRWRnZTogSGFsZkVkZ2UpIHtcclxuICAgICAgICAvLyBmaW5kIGFuZ2xlIGJldHdlZW4gd2FsbCBub3JtYWxzXHJcbiAgICAgICAgY29uc3Qgbm9ybWFsMiA9IG5ldyBUSFJFRS5WZWN0b3IyKCk7XHJcbiAgICAgICAgY29uc3Qgbm9ybWFsMyA9IFV0aWxzLkdldEZhY2VOb3JtYWxGcm9tQnVmZmVyR2VvbWV0cnkod2FsbEVkZ2UucGxhbmUuZ2VvbWV0cnksIDAsIDApO1xyXG4gICAgICAgIG5vcm1hbDIueCA9IG5vcm1hbDMueDtcclxuICAgICAgICBub3JtYWwyLnkgPSBub3JtYWwzLno7XHJcblxyXG4gICAgICAgIGNvbnN0IHdhbGxSb3RhdGlvbiA9IFV0aWxzLmFuZ2xlKFxyXG4gICAgICAgICAgICB0aGlzLl9yZWZWZWMueCwgdGhpcy5fcmVmVmVjLnksXHJcbiAgICAgICAgICAgIG5vcm1hbDIueCwgbm9ybWFsMi55KTtcclxuXHJcbiAgICAgICAgLy8gdHJhbnNmZXIgcm90YXRpb24gZnJvbSBjaGlsZCB0byBwYXJlbnQgYW5kIHJlc2V0IGJvdW5kYXJ5IGJveFxyXG4gICAgICAgIGlmICh0aGlzLml0ZW1zWzBdLnJvdGF0aW9uLnkgIT09IDApIHtcclxuICAgICAgICAgICAgdGhpcy5pdGVtcy5mb3JFYWNoKChpKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBpdGVtV29ybGRQb3NpdGlvbjogVmVjdG9yMyA9IGkuZ2V0V29ybGRQb3NpdGlvbihuZXcgVmVjdG9yMygpKTtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlKGkpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yb3RhdGlvbi55ID0gd2FsbFJvdGF0aW9uO1xyXG4gICAgICAgICAgICAgICAgaS5wb3NpdGlvbi5jb3B5KGl0ZW1Xb3JsZFBvc2l0aW9uKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuYXR0YWNoKGkpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yb3RhdGlvbi55ID0gMDtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmNyZWF0ZUJvdW5kYXJ5Qm94KCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnJvdGF0aW9uLnkgPSB3YWxsUm90YXRpb247XHJcbiAgICAgICAgdGhpcy50cmF2ZXJzZShjID0+IGMubWF0cml4V29ybGROZWVkc1VwZGF0ZSA9IHRydWUpO1xyXG5cclxuICAgICAgICAvLyB1cGRhdGUgY3VycmVudFdhbGxcclxuICAgICAgICB0aGlzLmN1cnJlbnRXYWxsID0gd2FsbEVkZ2Uud2FsbDtcclxuICAgICAgICB0aGlzLmN1cnJlbnRXYWxsRWRnZSA9IHdhbGxFZGdlO1xyXG4gICAgICAgIHdhbGxFZGdlLndhbGwuYWRkT25JdGVtKHRoaXMgYXMgYW55KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgdXBkYXRlRWRnZVZpc2liaWxpdHkoZWRnZTogRWRnZSkge1xyXG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRXYWxsKSB7XHJcbiAgICAgICAgICAgIGxldCBzaG91bGRTaG93OiBib29sZWFuID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmN1cnJlbnRXYWxsLmJhY2tFZGdlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRXYWxsLmJhY2tFZGdlLmVkZ2VzLmZvckVhY2goKGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZS52aXNpYmxlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNob3VsZFNob3cgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmN1cnJlbnRXYWxsLmZyb250RWRnZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50V2FsbC5mcm9udEVkZ2UuZWRnZXMuZm9yRWFjaChlID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZS52aXNpYmxlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNob3VsZFNob3cgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMudmlzaWJsZSA9IHNob3VsZFNob3c7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX2JvdW5kTW92ZSh2ZWMzOiBWZWN0b3IzKSB7XHJcbiAgICAgICAgY29uc3QgZWRnZSA9IHRoaXMuY3VycmVudFdhbGxFZGdlO1xyXG4gICAgICAgIHZlYzMuYXBwbHlNYXRyaXg0KGVkZ2UuaW50ZXJpb3JUcmFuc2Zvcm0pO1xyXG4gICAgICAgIGVkZ2Uud2FsbC5pdGVtc0NoYW5nZWQgPSB0cnVlO1xyXG5cclxuICAgICAgICBpZiAodmVjMy54IDwgdGhpcy5fc2l6ZVggLyAyLjAgKyB0aGlzLl9wb3NpdGlvbllUb2xlcmFuY2UpIHtcclxuICAgICAgICAgICAgdmVjMy54ID0gdGhpcy5fc2l6ZVggLyAyLjAgKyB0aGlzLl9wb3NpdGlvbllUb2xlcmFuY2U7XHJcbiAgICAgICAgfSBlbHNlIGlmICh2ZWMzLnggPiAoZWRnZS5pbnRlcmlvckRpc3RhbmNlKCkgLSB0aGlzLl9zaXplWCAvIDIuMCAtIHRoaXMuX3Bvc2l0aW9uWVRvbGVyYW5jZSkpIHtcclxuICAgICAgICAgICAgdmVjMy54ID0gZWRnZS5pbnRlcmlvckRpc3RhbmNlKCkgLSB0aGlzLl9zaXplWCAvIDIuMCAtIHRoaXMuX3Bvc2l0aW9uWVRvbGVyYW5jZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmVsZXZhdGlvbkZpeGVkIHx8ICF0aGlzLmVsZXZhdGlvbkFkanVzdGFibGUpIHtcclxuICAgICAgICAgICAgdmVjMy55ID0gdGhpcy5wb3NpdGlvbi55O1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG1heFk6IG51bWJlciA9IHRoaXMuX2dldE1heFkoZWRnZSk7XHJcbiAgICAgICAgICAgIGNvbnN0IG1pblk6IG51bWJlciA9IHRoaXMuX2dldE1pblkoKTtcclxuICAgICAgICAgICAgaWYgKHZlYzMueSA8IG1pblkpIHtcclxuICAgICAgICAgICAgICAgIHZlYzMueSA9IG1pblk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodmVjMy55ID4gbWF4WSkge1xyXG4gICAgICAgICAgICAgICAgdmVjMy55ID0gbWF4WTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLmVsZXZhdGlvbiA9IHZlYzMueSAtIHRoaXMuaGFsZlNpemUueTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZlYzMueiA9IHRoaXMuX3dhbGxPZmZzZXRTY2FsYXI7XHJcbiAgICAgICAgdmVjMy5hcHBseU1hdHJpeDQoZWRnZS5pbnZJbnRlcmlvclRyYW5zZm9ybSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfZ2V0TWF4WShlZGdlOiBIYWxmRWRnZSk6IG51bWJlciB7XHJcbiAgICAgICAgcmV0dXJuIGVkZ2UuaGVpZ2h0IC0gdGhpcy5oYWxmU2l6ZS55IC0gdGhpcy5fcG9zaXRpb25ZVG9sZXJhbmNlO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX2dldE1pblkoKTogbnVtYmVyIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5oYWxmU2l6ZS55ICsgdGhpcy5fcG9zaXRpb25ZVG9sZXJhbmNlO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==