@esotericsoftware/spine-core 4.3.8 → 4.3.10

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.
@@ -112,9 +112,10 @@ export class PhysicsConstraint extends Constraint {
112
112
  const x = this.data.x > 0, y = this.data.y > 0, rotateOrShearX = this.data.rotate > 0 || this.data.shearX > 0, scaleX = this.data.scaleX > 0;
113
113
  const bone = this.bone;
114
114
  let l = bone.bone.data.length, t = this.data.step, z = 0;
115
+ if (physics === Physics.none)
116
+ return;
117
+ bone.modifyWorld(skeleton);
115
118
  switch (physics) {
116
- case Physics.none:
117
- return;
118
119
  // biome-ignore lint/suspicious/noFallthroughSwitchClause: fall through expected
119
120
  case Physics.reset:
120
121
  this.reset(skeleton); // Fall through.
@@ -302,7 +303,6 @@ export class PhysicsConstraint extends Constraint {
302
303
  this.tx = l * bone.a;
303
304
  this.ty = l * bone.c;
304
305
  }
305
- bone.modifyWorld(skeleton._update);
306
306
  }
307
307
  sort(skeleton) {
308
308
  const bone = this.bone.bone;
@@ -315,4 +315,4 @@ export class PhysicsConstraint extends Constraint {
315
315
  return this.bone.bone.active;
316
316
  }
317
317
  }
318
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUGh5c2ljc0NvbnN0cmFpbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvUGh5c2ljc0NvbnN0cmFpbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsrRUEyQitFO0FBRy9FLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM3QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDakQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUV2QyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNuRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFHdkM7OzBIQUUwSDtBQUMxSCxNQUFNLE9BQU8saUJBQWtCLFNBQVEsVUFBMkU7SUFDakgsSUFBSSxDQUFXO0lBRWYsTUFBTSxHQUFHLElBQUksQ0FBQztJQUNkLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDUCxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ1AsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNQLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDUCxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ1AsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNQLE9BQU8sR0FBRyxDQUFDLENBQUM7SUFDWixJQUFJLEdBQUcsQ0FBQyxDQUFDO0lBQ1QsU0FBUyxHQUFHLENBQUMsQ0FBQztJQUNkLE9BQU8sR0FBRyxDQUFDLENBQUM7SUFDWixJQUFJLEdBQUcsQ0FBQyxDQUFDO0lBQ1QsU0FBUyxHQUFHLENBQUMsQ0FBQztJQUNkLFlBQVksR0FBRyxDQUFDLENBQUM7SUFDakIsU0FBUyxHQUFHLENBQUMsQ0FBQztJQUNkLGNBQWMsR0FBRyxDQUFDLENBQUM7SUFDbkIsV0FBVyxHQUFHLENBQUMsQ0FBQTtJQUNmLFFBQVEsR0FBRyxDQUFDLENBQUE7SUFDWixhQUFhLEdBQUcsQ0FBQyxDQUFDO0lBQ2xCLFNBQVMsR0FBRyxDQUFDLENBQUM7SUFDZCxRQUFRLEdBQUcsQ0FBQyxDQUFDO0lBRWIsWUFBYSxJQUEyQixFQUFFLFFBQWtCO1FBQzNELEtBQUssQ0FBQyxJQUFJLEVBQUUsSUFBSSxxQkFBcUIsRUFBRSxFQUFFLElBQUkscUJBQXFCLEVBQUUsQ0FBQyxDQUFDO1FBQ3RFLElBQUksUUFBUSxJQUFJLElBQUk7WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLDBCQUEwQixDQUFDLENBQUM7UUFFbEUsSUFBSSxDQUFDLElBQUksR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsZUFBZSxDQUFDO0lBQzdELENBQUM7SUFFTSxJQUFJLENBQUUsUUFBa0I7UUFDOUIsSUFBSSxJQUFJLEdBQUcsSUFBSSxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ3RELElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN6QixPQUFPLElBQUksQ0FBQztJQUNiLENBQUM7SUFFRDttQ0FDK0I7SUFDL0IsS0FBSyxDQUFFLFFBQWtCO1FBQ3hCLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDO1FBQ25CLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQztRQUM5QixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztRQUNuQixJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQztRQUNqQixJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztRQUNkLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDO1FBQ25CLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDO1FBQ2pCLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO1FBQ2QsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUM7UUFDbkIsSUFBSSxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUM7UUFDdEIsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUM7UUFDbkIsSUFBSSxDQUFDLGNBQWMsR0FBRyxDQUFDLENBQUM7UUFDeEIsSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUM7UUFDckIsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUM7UUFDbEIsSUFBSSxDQUFDLGFBQWEsR0FBRyxDQUFDLENBQUM7SUFDeEIsQ0FBQztJQUVEOzJDQUN1QztJQUN2QyxTQUFTLENBQUUsQ0FBUyxFQUFFLENBQVM7UUFDOUIsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDYixJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNiLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ2IsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDZCxDQUFDO0lBRUQ7b0RBQ2dEO0lBQ2hELE1BQU0sQ0FBRSxDQUFTLEVBQUUsQ0FBUyxFQUFFLE9BQWU7UUFDNUMsTUFBTSxDQUFDLEdBQUcsT0FBTyxHQUFHLFNBQVMsQ0FBQyxNQUFNLEVBQUUsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDM0UsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ3pDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDcEUsQ0FBQztJQUVELHVEQUF1RDtJQUN2RCxNQUFNLENBQUUsUUFBa0IsRUFBRSxPQUFnQjtRQUMzQyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO1FBQzNCLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUM7UUFDbEIsSUFBSSxHQUFHLEtBQUssQ0FBQztZQUFFLE9BQU87UUFFdEIsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsY0FBYyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztRQUM3SSxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUV6RCxRQUFRLE9BQU8sRUFBRSxDQUFDO1lBQ2pCLEtBQUssT0FBTyxDQUFDLElBQUk7Z0JBQ2hCLE9BQU87WUFDUixnRkFBZ0Y7WUFDaEYsS0FBSyxPQUFPLENBQUMsS0FBSztnQkFDakIsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLGdCQUFnQjtZQUN2QyxLQUFLLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO2dCQUNyQixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztnQkFDOUUsSUFBSSxDQUFDLFNBQVMsSUFBSSxLQUFLLENBQUM7Z0JBQ3hCLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQztnQkFFOUIsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztnQkFDekMsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7b0JBQ2pCLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO29CQUNwQixJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQztvQkFDYixJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQztnQkFDZCxDQUFDO3FCQUFNLENBQUM7b0JBQ1AsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxFQUMxSCxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO29CQUNyQyxFQUFFLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7b0JBQ2hDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO3dCQUNaLElBQUksQ0FBQyxFQUFFLENBQUM7NEJBQ1AsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQzs0QkFDN0IsSUFBSSxDQUFDLE9BQU8sSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs0QkFDaEQsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7d0JBQ2QsQ0FBQzt3QkFDRCxJQUFJLENBQUMsRUFBRSxDQUFDOzRCQUNQLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7NEJBQzdCLElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7NEJBQ2hELElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO3dCQUNkLENBQUM7d0JBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7NEJBQ1osTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQzs0QkFDM0MsQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7NEJBQzFCLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFdBQVcsQ0FBQzs0QkFDdEIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUM7NEJBQ2YsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDOzRCQUN4QyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUMsS0FBSyxHQUFHLENBQUMsR0FBRyxRQUFRLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQzs0QkFDMUUsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUM7NEJBQzFFLEdBQUcsQ0FBQztnQ0FDSCxJQUFJLENBQUMsRUFBRSxDQUFDO29DQUNQLElBQUksQ0FBQyxTQUFTLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7b0NBQzlDLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUM7b0NBQ25DLElBQUksQ0FBQyxTQUFTLElBQUksQ0FBQyxDQUFDO2dDQUNyQixDQUFDO2dDQUNELElBQUksQ0FBQyxFQUFFLENBQUM7b0NBQ1AsSUFBSSxDQUFDLFNBQVMsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztvQ0FDOUMsSUFBSSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQztvQ0FDbkMsSUFBSSxDQUFDLFNBQVMsSUFBSSxDQUFDLENBQUM7Z0NBQ3JCLENBQUM7Z0NBQ0QsQ0FBQyxJQUFJLENBQUMsQ0FBQzs0QkFDUixDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRTs0QkFDakIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQzs0QkFDOUIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQzt3QkFDL0IsQ0FBQzt3QkFDRCxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQzt3QkFDM0IsSUFBSSxDQUFDOzRCQUFFLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO3dCQUN6RSxJQUFJLENBQUM7NEJBQUUsSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7b0JBQzFFLENBQUM7b0JBQ0QsSUFBSSxjQUFjLElBQUksTUFBTSxFQUFFLENBQUM7d0JBQzlCLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLEVBQUUsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO3dCQUNsSCxJQUFJLEVBQUUsR0FBRyxFQUFFOzRCQUNWLEVBQUUsR0FBRyxFQUFFLENBQUM7NkJBQ0osSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRTs0QkFDcEIsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDO3dCQUNWLElBQUksRUFBRSxHQUFHLEVBQUU7NEJBQ1YsRUFBRSxHQUFHLEVBQUUsQ0FBQzs2QkFDSixJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFOzRCQUNwQixFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUM7d0JBQ1YsQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7d0JBQ25CLElBQUksY0FBYyxFQUFFLENBQUM7NEJBQ3BCLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDOzRCQUNqRCxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDOzRCQUM3QyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7NEJBQ25GLElBQUksQ0FBQyxZQUFZLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUMsR0FBRyxTQUFTLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDOzRCQUNyRixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7NEJBQ3RDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDOzRCQUNoQixDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQzs0QkFDaEIsSUFBSSxNQUFNLEVBQUUsQ0FBQztnQ0FDWixDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztnQ0FDOUIsSUFBSSxDQUFDLEdBQUcsQ0FBQztvQ0FBRSxJQUFJLENBQUMsV0FBVyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQzs0QkFDMUQsQ0FBQzt3QkFDRixDQUFDOzZCQUFNLENBQUM7NEJBQ1AsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7NEJBQ2pCLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDOzRCQUNqQixNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLGNBQWMsRUFBRSxHQUFHLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQzs0QkFDOUUsSUFBSSxDQUFDLEdBQUcsQ0FBQztnQ0FBRSxJQUFJLENBQUMsV0FBVyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQzt3QkFDMUQsQ0FBQzt3QkFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQzs0QkFDWixJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDO2dDQUNkLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO2dDQUMxQixDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxXQUFXLENBQUM7Z0NBQ3RCLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDOzRCQUNoQixDQUFDOzRCQUNELE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxJQUFJLEdBQUcsUUFBUSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsT0FBTyxHQUFHLFFBQVEsQ0FBQyxRQUFRLENBQUM7NEJBQ25FLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxRQUFRLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxPQUFPLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUM7NEJBQ3JGLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUsRUFBRSxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7NEJBQy9ELE9BQU8sSUFBSSxFQUFFLENBQUM7Z0NBQ2IsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQ0FDUCxJQUFJLE1BQU0sRUFBRSxDQUFDO29DQUNaLElBQUksQ0FBQyxhQUFhLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7b0NBQ25FLElBQUksQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLGFBQWEsR0FBRyxDQUFDLENBQUM7b0NBQzNDLElBQUksQ0FBQyxhQUFhLElBQUksQ0FBQyxDQUFDO2dDQUN6QixDQUFDO2dDQUNELElBQUksY0FBYyxFQUFFLENBQUM7b0NBQ3BCLElBQUksQ0FBQyxjQUFjLElBQUksQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztvQ0FDM0UsSUFBSSxDQUFDLFlBQVksSUFBSSxJQUFJLENBQUMsY0FBYyxHQUFHLENBQUMsQ0FBQztvQ0FDN0MsSUFBSSxDQUFDLGNBQWMsSUFBSSxDQUFDLENBQUM7b0NBQ3pCLElBQUksQ0FBQyxHQUFHLENBQUM7d0NBQUUsTUFBTTtvQ0FDakIsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLFlBQVksR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO29DQUN0QyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQ0FDaEIsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0NBQ2pCLENBQUM7cUNBQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUU7b0NBQ25CLE1BQU07NEJBQ1IsQ0FBQzs0QkFDRCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFDOzRCQUN4QyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO3dCQUN2QyxDQUFDO3dCQUNELENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO29CQUM1QixDQUFDO29CQUNELElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDO2dCQUNwQixDQUFDO2dCQUNELElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztnQkFDdEIsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO2dCQUN0QixNQUFNO1lBQ1AsQ0FBQztZQUNELEtBQUssT0FBTyxDQUFDLElBQUk7Z0JBQ2hCLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQztnQkFDeEMsSUFBSSxDQUFDO29CQUFFLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO2dCQUN6RSxJQUFJLENBQUM7b0JBQUUsSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDM0UsQ0FBQztRQUVELElBQUksY0FBYyxFQUFFLENBQUM7WUFDcEIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzVFLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQzFCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDVixJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO29CQUMxQixDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO29CQUN6QixDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDaEIsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ2hCLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO29CQUNYLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztvQkFDNUIsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO2dCQUM3QixDQUFDO2dCQUNELENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7Z0JBQzFCLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNoQixDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDaEIsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7Z0JBQ1gsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO2dCQUM1QixJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDN0IsQ0FBQztpQkFBTSxDQUFDO2dCQUNQLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztnQkFDdEIsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ2hCLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNoQixDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztnQkFDWCxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7Z0JBQzVCLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztnQkFDNUIsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7Z0JBQ1gsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO2dCQUM1QixJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDN0IsQ0FBQztRQUNGLENBQUM7UUFDRCxJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQ1osSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztZQUM1RSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNaLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ1osUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO2dCQUM5QixLQUFLLFVBQVUsQ0FBQyxPQUFPO29CQUN0QixJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDWixJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDWixNQUFNO2dCQUNQLEtBQUssVUFBVSxDQUFDLE1BQU07b0JBQ3JCLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUNoQixDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sR0FBRyxDQUFDLENBQUM7b0JBQ3ZDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUNaLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2QsQ0FBQztRQUNGLENBQUM7UUFDRCxJQUFJLE9BQU8sS0FBSyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDOUIsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUNyQixJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ3RCLENBQUM7UUFDRCxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRUQsSUFBSSxDQUFFLFFBQWtCO1FBQ3ZCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQzVCLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDeEIsUUFBUSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDakMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDbEMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM1QixDQUFDO0lBRUQsY0FBYztRQUNiLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQzlCLENBQUM7Q0FFRCIsInNvdXJjZXNDb250ZW50IjpbIi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAqIFNwaW5lIFJ1bnRpbWVzIExpY2Vuc2UgQWdyZWVtZW50XG4gKiBMYXN0IHVwZGF0ZWQgQXByaWwgNSwgMjAyNS4gUmVwbGFjZXMgYWxsIHByaW9yIHZlcnNpb25zLlxuICpcbiAqIENvcHlyaWdodCAoYykgMjAxMy0yMDI1LCBFc290ZXJpYyBTb2Z0d2FyZSBMTENcbiAqXG4gKiBJbnRlZ3JhdGlvbiBvZiB0aGUgU3BpbmUgUnVudGltZXMgaW50byBzb2Z0d2FyZSBvciBvdGhlcndpc2UgY3JlYXRpbmdcbiAqIGRlcml2YXRpdmUgd29ya3Mgb2YgdGhlIFNwaW5lIFJ1bnRpbWVzIGlzIHBlcm1pdHRlZCB1bmRlciB0aGUgdGVybXMgYW5kXG4gKiBjb25kaXRpb25zIG9mIFNlY3Rpb24gMiBvZiB0aGUgU3BpbmUgRWRpdG9yIExpY2Vuc2UgQWdyZWVtZW50OlxuICogaHR0cDovL2Vzb3Rlcmljc29mdHdhcmUuY29tL3NwaW5lLWVkaXRvci1saWNlbnNlXG4gKlxuICogT3RoZXJ3aXNlLCBpdCBpcyBwZXJtaXR0ZWQgdG8gaW50ZWdyYXRlIHRoZSBTcGluZSBSdW50aW1lcyBpbnRvIHNvZnR3YXJlXG4gKiBvciBvdGhlcndpc2UgY3JlYXRlIGRlcml2YXRpdmUgd29ya3Mgb2YgdGhlIFNwaW5lIFJ1bnRpbWVzIChjb2xsZWN0aXZlbHksXG4gKiBcIlByb2R1Y3RzXCIpLCBwcm92aWRlZCB0aGF0IGVhY2ggdXNlciBvZiB0aGUgUHJvZHVjdHMgbXVzdCBvYnRhaW4gdGhlaXIgb3duXG4gKiBTcGluZSBFZGl0b3IgbGljZW5zZSBhbmQgcmVkaXN0cmlidXRpb24gb2YgdGhlIFByb2R1Y3RzIGluIGFueSBmb3JtIG11c3RcbiAqIGluY2x1ZGUgdGhpcyBsaWNlbnNlIGFuZCBjb3B5cmlnaHQgbm90aWNlLlxuICpcbiAqIFRIRSBTUElORSBSVU5USU1FUyBBUkUgUFJPVklERUQgQlkgRVNPVEVSSUMgU09GVFdBUkUgTExDIFwiQVMgSVNcIiBBTkQgQU5ZXG4gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEXG4gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFXG4gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBFU09URVJJQyBTT0ZUV0FSRSBMTEMgQkUgTElBQkxFIEZPUiBBTllcbiAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXG4gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVMsXG4gKiBCVVNJTkVTUyBJTlRFUlJVUFRJT04sIE9SIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTKSBIT1dFVkVSIENBVVNFRCBBTkRcbiAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXG4gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0ZcbiAqIFRIRSBTUElORSBSVU5USU1FUywgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuaW1wb3J0IHR5cGUgeyBCb25lUG9zZSB9IGZyb20gXCIuL0JvbmVQb3NlLmpzXCI7XG5pbXBvcnQgeyBDb25zdHJhaW50IH0gZnJvbSBcIi4vQ29uc3RyYWludC5qc1wiO1xuaW1wb3J0IHsgU2NhbGVZTW9kZSB9IGZyb20gXCIuL0NvbnN0cmFpbnREYXRhLmpzXCI7XG5pbXBvcnQgeyBQaHlzaWNzIH0gZnJvbSBcIi4vUGh5c2ljcy5qc1wiO1xuaW1wb3J0IHR5cGUgeyBQaHlzaWNzQ29uc3RyYWludERhdGEgfSBmcm9tIFwiLi9QaHlzaWNzQ29uc3RyYWludERhdGEuanNcIjtcbmltcG9ydCB7IFBoeXNpY3NDb25zdHJhaW50UG9zZSB9IGZyb20gXCIuL1BoeXNpY3NDb25zdHJhaW50UG9zZS5qc1wiO1xuaW1wb3J0IHsgU2tlbGV0b24gfSBmcm9tIFwiLi9Ta2VsZXRvbi5qc1wiO1xuaW1wb3J0IHsgTWF0aFV0aWxzIH0gZnJvbSBcIi4vVXRpbHMuanNcIjtcblxuXG4vKiogQXBwbGllcyBwaHlzaWNzIHRvIGEgYm9uZS5cbiAqXG4gKiBTZWUgPGEgaHJlZj1cImh0dHA6Ly9lc290ZXJpY3NvZnR3YXJlLmNvbS9zcGluZS1waHlzaWNzLWNvbnN0cmFpbnRzXCI+UGh5c2ljcyBjb25zdHJhaW50czwvYT4gaW4gdGhlIFNwaW5lIFVzZXIgR3VpZGUuICovXG5leHBvcnQgY2xhc3MgUGh5c2ljc0NvbnN0cmFpbnQgZXh0ZW5kcyBDb25zdHJhaW50PFBoeXNpY3NDb25zdHJhaW50LCBQaHlzaWNzQ29uc3RyYWludERhdGEsIFBoeXNpY3NDb25zdHJhaW50UG9zZT4ge1xuXHRib25lOiBCb25lUG9zZTtcblxuXHRfcmVzZXQgPSB0cnVlO1xuXHR1eCA9IDA7XG5cdHV5ID0gMDtcblx0Y3ggPSAwO1xuXHRjeSA9IDA7XG5cdHR4ID0gMDtcblx0dHkgPSAwO1xuXHR4T2Zmc2V0ID0gMDtcblx0eExhZyA9IDA7XG5cdHhWZWxvY2l0eSA9IDA7XG5cdHlPZmZzZXQgPSAwO1xuXHR5TGFnID0gMDtcblx0eVZlbG9jaXR5ID0gMDtcblx0cm90YXRlT2Zmc2V0ID0gMDtcblx0cm90YXRlTGFnID0gMDtcblx0cm90YXRlVmVsb2NpdHkgPSAwO1xuXHRzY2FsZU9mZnNldCA9IDBcblx0c2NhbGVMYWcgPSAwXG5cdHNjYWxlVmVsb2NpdHkgPSAwO1xuXHRyZW1haW5pbmcgPSAwO1xuXHRsYXN0VGltZSA9IDA7XG5cblx0Y29uc3RydWN0b3IgKGRhdGE6IFBoeXNpY3NDb25zdHJhaW50RGF0YSwgc2tlbGV0b246IFNrZWxldG9uKSB7XG5cdFx0c3VwZXIoZGF0YSwgbmV3IFBoeXNpY3NDb25zdHJhaW50UG9zZSgpLCBuZXcgUGh5c2ljc0NvbnN0cmFpbnRQb3NlKCkpO1xuXHRcdGlmIChza2VsZXRvbiA9PSBudWxsKSB0aHJvdyBuZXcgRXJyb3IoXCJza2VsZXRvbiBjYW5ub3QgYmUgbnVsbC5cIik7XG5cblx0XHR0aGlzLmJvbmUgPSBza2VsZXRvbi5ib25lc1tkYXRhLmJvbmUuaW5kZXhdLmNvbnN0cmFpbmVkUG9zZTtcblx0fVxuXG5cdHB1YmxpYyBjb3B5IChza2VsZXRvbjogU2tlbGV0b24pIHtcblx0XHR2YXIgY29weSA9IG5ldyBQaHlzaWNzQ29uc3RyYWludCh0aGlzLmRhdGEsIHNrZWxldG9uKTtcblx0XHRjb3B5LnBvc2Uuc2V0KHRoaXMucG9zZSk7XG5cdFx0cmV0dXJuIGNvcHk7XG5cdH1cblxuXHQvKiogUmVzZXRzIGFsbCBwaHlzaWNzIHN0YXRlIHRoYXQgd2FzIHRoZSByZXN1bHQgb2YgcHJldmlvdXMgbW92ZW1lbnQuIFVzZSB0aGlzIGFmdGVyIG1vdmluZyBhIGJvbmUgdG8gcHJldmVudCBwaHlzaWNzIGZyb21cblx0ICogcmVhY3RpbmcgdG8gdGhlIG1vdmVtZW50LiAqL1xuXHRyZXNldCAoc2tlbGV0b246IFNrZWxldG9uKSB7XG5cdFx0dGhpcy5yZW1haW5pbmcgPSAwO1xuXHRcdHRoaXMubGFzdFRpbWUgPSBza2VsZXRvbi50aW1lO1xuXHRcdHRoaXMuX3Jlc2V0ID0gdHJ1ZTtcblx0XHR0aGlzLnhPZmZzZXQgPSAwO1xuXHRcdHRoaXMueExhZyA9IDA7XG5cdFx0dGhpcy54VmVsb2NpdHkgPSAwO1xuXHRcdHRoaXMueU9mZnNldCA9IDA7XG5cdFx0dGhpcy55TGFnID0gMDtcblx0XHR0aGlzLnlWZWxvY2l0eSA9IDA7XG5cdFx0dGhpcy5yb3RhdGVPZmZzZXQgPSAwO1xuXHRcdHRoaXMucm90YXRlTGFnID0gMDtcblx0XHR0aGlzLnJvdGF0ZVZlbG9jaXR5ID0gMDtcblx0XHR0aGlzLnNjYWxlT2Zmc2V0ID0gMDtcblx0XHR0aGlzLnNjYWxlTGFnID0gMDtcblx0XHR0aGlzLnNjYWxlVmVsb2NpdHkgPSAwO1xuXHR9XG5cblx0LyoqIFRyYW5zbGF0ZXMgdGhlIHBoeXNpY3MgY29uc3RyYWludCBzbyB0aGUgbmV4dCB7QGxpbmsgdXBkYXRlfSBmb3JjZXMgYXJlIGFwcGxpZWQgYXMgaWYgdGhlIGJvbmUgbW92ZWQgYW5cblx0ICogYWRkaXRpb25hbCBhbW91bnQgaW4gd29ybGQgc3BhY2UuICovXG5cdHRyYW5zbGF0ZSAoeDogbnVtYmVyLCB5OiBudW1iZXIpIHtcblx0XHR0aGlzLnV4IC09IHg7XG5cdFx0dGhpcy51eSAtPSB5O1xuXHRcdHRoaXMuY3ggLT0geDtcblx0XHR0aGlzLmN5IC09IHk7XG5cdH1cblxuXHQvKiogUm90YXRlcyB0aGUgcGh5c2ljcyBjb25zdHJhaW50IHNvIHRoZSBuZXh0IHtAbGluayB1cGRhdGV9IGZvcmNlcyBhcmUgYXBwbGllZCBhcyBpZiB0aGUgYm9uZSByb3RhdGVkXG5cdCAqIGFyb3VuZCB0aGUgc3BlY2lmaWVkIHBvaW50IGluIHdvcmxkIHNwYWNlLiAqL1xuXHRyb3RhdGUgKHg6IG51bWJlciwgeTogbnVtYmVyLCBkZWdyZWVzOiBudW1iZXIpIHtcblx0XHRjb25zdCByID0gZGVncmVlcyAqIE1hdGhVdGlscy5kZWdSYWQsIGNvcyA9IE1hdGguY29zKHIpLCBzaW4gPSBNYXRoLnNpbihyKTtcblx0XHRjb25zdCBkeCA9IHRoaXMuY3ggLSB4LCBkeSA9IHRoaXMuY3kgLSB5O1xuXHRcdHRoaXMudHJhbnNsYXRlKGR4ICogY29zIC0gZHkgKiBzaW4gLSBkeCwgZHggKiBzaW4gKyBkeSAqIGNvcyAtIGR5KTtcblx0fVxuXG5cdC8qKiBBcHBsaWVzIHRoZSBjb25zdHJhaW50IHRvIHRoZSBjb25zdHJhaW5lZCBib25lcy4gKi9cblx0dXBkYXRlIChza2VsZXRvbjogU2tlbGV0b24sIHBoeXNpY3M6IFBoeXNpY3MpIHtcblx0XHRjb25zdCBwID0gdGhpcy5hcHBsaWVkUG9zZTtcblx0XHRjb25zdCBtaXggPSBwLm1peDtcblx0XHRpZiAobWl4ID09PSAwKSByZXR1cm47XG5cblx0XHRjb25zdCB4ID0gdGhpcy5kYXRhLnggPiAwLCB5ID0gdGhpcy5kYXRhLnkgPiAwLCByb3RhdGVPclNoZWFyWCA9IHRoaXMuZGF0YS5yb3RhdGUgPiAwIHx8IHRoaXMuZGF0YS5zaGVhclggPiAwLCBzY2FsZVggPSB0aGlzLmRhdGEuc2NhbGVYID4gMDtcblx0XHRjb25zdCBib25lID0gdGhpcy5ib25lO1xuXHRcdGxldCBsID0gYm9uZS5ib25lLmRhdGEubGVuZ3RoLCB0ID0gdGhpcy5kYXRhLnN0ZXAsIHogPSAwO1xuXG5cdFx0c3dpdGNoIChwaHlzaWNzKSB7XG5cdFx0XHRjYXNlIFBoeXNpY3Mubm9uZTpcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0Ly8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy9ub0ZhbGx0aHJvdWdoU3dpdGNoQ2xhdXNlOiBmYWxsIHRocm91Z2ggZXhwZWN0ZWRcblx0XHRcdGNhc2UgUGh5c2ljcy5yZXNldDpcblx0XHRcdFx0dGhpcy5yZXNldChza2VsZXRvbik7IC8vIEZhbGwgdGhyb3VnaC5cblx0XHRcdGNhc2UgUGh5c2ljcy51cGRhdGU6IHtcblx0XHRcdFx0Y29uc3QgZGVsdGEgPSBNYXRoLm1heChza2VsZXRvbi50aW1lIC0gdGhpcy5sYXN0VGltZSwgMCksIGFhID0gdGhpcy5yZW1haW5pbmc7XG5cdFx0XHRcdHRoaXMucmVtYWluaW5nICs9IGRlbHRhO1xuXHRcdFx0XHR0aGlzLmxhc3RUaW1lID0gc2tlbGV0b24udGltZTtcblxuXHRcdFx0XHRjb25zdCBieCA9IGJvbmUud29ybGRYLCBieSA9IGJvbmUud29ybGRZO1xuXHRcdFx0XHRpZiAodGhpcy5fcmVzZXQpIHtcblx0XHRcdFx0XHR0aGlzLl9yZXNldCA9IGZhbHNlO1xuXHRcdFx0XHRcdHRoaXMudXggPSBieDtcblx0XHRcdFx0XHR0aGlzLnV5ID0gYnk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0bGV0IGEgPSB0aGlzLnJlbWFpbmluZywgaSA9IHAuaW5lcnRpYSwgZiA9IHNrZWxldG9uLmRhdGEucmVmZXJlbmNlU2NhbGUsIGQgPSAtMSwgbSA9IDAsIGUgPSAwLCBxeCA9IHRoaXMuZGF0YS5saW1pdCAqIGRlbHRhLFxuXHRcdFx0XHRcdFx0cXkgPSBxeCAqIE1hdGguYWJzKHNrZWxldG9uLnNjYWxlWSk7XG5cdFx0XHRcdFx0cXggKj0gTWF0aC5hYnMoc2tlbGV0b24uc2NhbGVYKTtcblx0XHRcdFx0XHRpZiAoeCB8fCB5KSB7XG5cdFx0XHRcdFx0XHRpZiAoeCkge1xuXHRcdFx0XHRcdFx0XHRjb25zdCB1ID0gKHRoaXMudXggLSBieCkgKiBpO1xuXHRcdFx0XHRcdFx0XHR0aGlzLnhPZmZzZXQgKz0gdSA+IHF4ID8gcXggOiB1IDwgLXF4ID8gLXF4IDogdTtcblx0XHRcdFx0XHRcdFx0dGhpcy51eCA9IGJ4O1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0aWYgKHkpIHtcblx0XHRcdFx0XHRcdFx0Y29uc3QgdSA9ICh0aGlzLnV5IC0gYnkpICogaTtcblx0XHRcdFx0XHRcdFx0dGhpcy55T2Zmc2V0ICs9IHUgPiBxeSA/IHF5IDogdSA8IC1xeSA/IC1xeSA6IHU7XG5cdFx0XHRcdFx0XHRcdHRoaXMudXkgPSBieTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGlmIChhID49IHQpIHtcblx0XHRcdFx0XHRcdFx0Y29uc3QgeHMgPSB0aGlzLnhPZmZzZXQsIHlzID0gdGhpcy55T2Zmc2V0O1xuXHRcdFx0XHRcdFx0XHRkID0gcC5kYW1waW5nICoqICg2MCAqIHQpO1xuXHRcdFx0XHRcdFx0XHRtID0gdCAqIHAubWFzc0ludmVyc2U7XG5cdFx0XHRcdFx0XHRcdGUgPSBwLnN0cmVuZ3RoO1xuXHRcdFx0XHRcdFx0XHRjb25zdCB3ID0gZiAqIHAud2luZCwgZyA9IGYgKiBwLmdyYXZpdHk7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IGF4ID0gKHcgKiBza2VsZXRvbi53aW5kWCArIGcgKiBza2VsZXRvbi5ncmF2aXR5WCkgKiBza2VsZXRvbi5zY2FsZVg7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IGF5ID0gKHcgKiBza2VsZXRvbi53aW5kWSArIGcgKiBza2VsZXRvbi5ncmF2aXR5WSkgKiBza2VsZXRvbi5zY2FsZVk7XG5cdFx0XHRcdFx0XHRcdGRvIHtcblx0XHRcdFx0XHRcdFx0XHRpZiAoeCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0dGhpcy54VmVsb2NpdHkgKz0gKGF4IC0gdGhpcy54T2Zmc2V0ICogZSkgKiBtO1xuXHRcdFx0XHRcdFx0XHRcdFx0dGhpcy54T2Zmc2V0ICs9IHRoaXMueFZlbG9jaXR5ICogdDtcblx0XHRcdFx0XHRcdFx0XHRcdHRoaXMueFZlbG9jaXR5ICo9IGQ7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdGlmICh5KSB7XG5cdFx0XHRcdFx0XHRcdFx0XHR0aGlzLnlWZWxvY2l0eSAtPSAoYXkgKyB0aGlzLnlPZmZzZXQgKiBlKSAqIG07XG5cdFx0XHRcdFx0XHRcdFx0XHR0aGlzLnlPZmZzZXQgKz0gdGhpcy55VmVsb2NpdHkgKiB0O1xuXHRcdFx0XHRcdFx0XHRcdFx0dGhpcy55VmVsb2NpdHkgKj0gZDtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0YSAtPSB0O1xuXHRcdFx0XHRcdFx0XHR9IHdoaWxlIChhID49IHQpO1xuXHRcdFx0XHRcdFx0XHR0aGlzLnhMYWcgPSB0aGlzLnhPZmZzZXQgLSB4cztcblx0XHRcdFx0XHRcdFx0dGhpcy55TGFnID0gdGhpcy55T2Zmc2V0IC0geXM7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR6ID0gTWF0aC5tYXgoMCwgMSAtIGEgLyB0KTtcblx0XHRcdFx0XHRcdGlmICh4KSBib25lLndvcmxkWCArPSAodGhpcy54T2Zmc2V0IC0gdGhpcy54TGFnICogeikgKiBtaXggKiB0aGlzLmRhdGEueDtcblx0XHRcdFx0XHRcdGlmICh5KSBib25lLndvcmxkWSArPSAodGhpcy55T2Zmc2V0IC0gdGhpcy55TGFnICogeikgKiBtaXggKiB0aGlzLmRhdGEueTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYgKHJvdGF0ZU9yU2hlYXJYIHx8IHNjYWxlWCkge1xuXHRcdFx0XHRcdFx0bGV0IGNhID0gTWF0aC5hdGFuMihib25lLmMsIGJvbmUuYSksIGMgPSAwLCBzID0gMCwgbXIgPSAwLCBkeCA9IHRoaXMuY3ggLSBib25lLndvcmxkWCwgZHkgPSB0aGlzLmN5IC0gYm9uZS53b3JsZFk7XG5cdFx0XHRcdFx0XHRpZiAoZHggPiBxeClcblx0XHRcdFx0XHRcdFx0ZHggPSBxeDtcblx0XHRcdFx0XHRcdGVsc2UgaWYgKGR4IDwgLXF4KSAvL1xuXHRcdFx0XHRcdFx0XHRkeCA9IC1xeDtcblx0XHRcdFx0XHRcdGlmIChkeSA+IHF5KVxuXHRcdFx0XHRcdFx0XHRkeSA9IHF5O1xuXHRcdFx0XHRcdFx0ZWxzZSBpZiAoZHkgPCAtcXkpIC8vXG5cdFx0XHRcdFx0XHRcdGR5ID0gLXF5O1xuXHRcdFx0XHRcdFx0YSA9IHRoaXMucmVtYWluaW5nO1xuXHRcdFx0XHRcdFx0aWYgKHJvdGF0ZU9yU2hlYXJYKSB7XG5cdFx0XHRcdFx0XHRcdG1yID0gKHRoaXMuZGF0YS5yb3RhdGUgKyB0aGlzLmRhdGEuc2hlYXJYKSAqIG1peDtcblx0XHRcdFx0XHRcdFx0eiA9IHRoaXMucm90YXRlTGFnICogTWF0aC5tYXgoMCwgMSAtIGFhIC8gdCk7XG5cdFx0XHRcdFx0XHRcdGxldCByID0gTWF0aC5hdGFuMihkeSArIHRoaXMudHksIGR4ICsgdGhpcy50eCkgLSBjYSAtICh0aGlzLnJvdGF0ZU9mZnNldCAtIHopICogbXI7XG5cdFx0XHRcdFx0XHRcdHRoaXMucm90YXRlT2Zmc2V0ICs9IChyIC0gTWF0aC5jZWlsKHIgKiBNYXRoVXRpbHMuaW52UEkyIC0gMC41KSAqIE1hdGhVdGlscy5QSTIpICogaTtcblx0XHRcdFx0XHRcdFx0ciA9ICh0aGlzLnJvdGF0ZU9mZnNldCAtIHopICogbXIgKyBjYTtcblx0XHRcdFx0XHRcdFx0YyA9IE1hdGguY29zKHIpO1xuXHRcdFx0XHRcdFx0XHRzID0gTWF0aC5zaW4ocik7XG5cdFx0XHRcdFx0XHRcdGlmIChzY2FsZVgpIHtcblx0XHRcdFx0XHRcdFx0XHRyID0gbCAqIGJvbmUuZ2V0V29ybGRTY2FsZVgoKTtcblx0XHRcdFx0XHRcdFx0XHRpZiAociA+IDApIHRoaXMuc2NhbGVPZmZzZXQgKz0gKGR4ICogYyArIGR5ICogcykgKiBpIC8gcjtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0YyA9IE1hdGguY29zKGNhKTtcblx0XHRcdFx0XHRcdFx0cyA9IE1hdGguc2luKGNhKTtcblx0XHRcdFx0XHRcdFx0Y29uc3QgciA9IGwgKiBib25lLmdldFdvcmxkU2NhbGVYKCkgLSB0aGlzLnNjYWxlTGFnICogTWF0aC5tYXgoMCwgMSAtIGFhIC8gdCk7XG5cdFx0XHRcdFx0XHRcdGlmIChyID4gMCkgdGhpcy5zY2FsZU9mZnNldCArPSAoZHggKiBjICsgZHkgKiBzKSAqIGkgLyByO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0aWYgKGEgPj0gdCkge1xuXHRcdFx0XHRcdFx0XHRpZiAoZCA9PT0gLTEpIHtcblx0XHRcdFx0XHRcdFx0XHRkID0gcC5kYW1waW5nICoqICg2MCAqIHQpO1xuXHRcdFx0XHRcdFx0XHRcdG0gPSB0ICogcC5tYXNzSW52ZXJzZTtcblx0XHRcdFx0XHRcdFx0XHRlID0gcC5zdHJlbmd0aDtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRjb25zdCBheCA9IHAud2luZCAqIHNrZWxldG9uLndpbmRYICsgcC5ncmF2aXR5ICogc2tlbGV0b24uZ3Jhdml0eVg7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IGF5ID0gKHAud2luZCAqIHNrZWxldG9uLndpbmRZICsgcC5ncmF2aXR5ICogc2tlbGV0b24uZ3Jhdml0eVkpICogU2tlbGV0b24ueURpcjtcblx0XHRcdFx0XHRcdFx0Y29uc3QgcnMgPSB0aGlzLnJvdGF0ZU9mZnNldCwgc3MgPSB0aGlzLnNjYWxlT2Zmc2V0LCBoID0gbCAvIGY7XG5cdFx0XHRcdFx0XHRcdHdoaWxlICh0cnVlKSB7XG5cdFx0XHRcdFx0XHRcdFx0YSAtPSB0O1xuXHRcdFx0XHRcdFx0XHRcdGlmIChzY2FsZVgpIHtcblx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuc2NhbGVWZWxvY2l0eSArPSAoYXggKiBjIC0gYXkgKiBzIC0gdGhpcy5zY2FsZU9mZnNldCAqIGUpICogbTtcblx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuc2NhbGVPZmZzZXQgKz0gdGhpcy5zY2FsZVZlbG9jaXR5ICogdDtcblx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuc2NhbGVWZWxvY2l0eSAqPSBkO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRpZiAocm90YXRlT3JTaGVhclgpIHtcblx0XHRcdFx0XHRcdFx0XHRcdHRoaXMucm90YXRlVmVsb2NpdHkgLT0gKChheCAqIHMgKyBheSAqIGMpICogaCArIHRoaXMucm90YXRlT2Zmc2V0ICogZSkgKiBtO1xuXHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5yb3RhdGVPZmZzZXQgKz0gdGhpcy5yb3RhdGVWZWxvY2l0eSAqIHQ7XG5cdFx0XHRcdFx0XHRcdFx0XHR0aGlzLnJvdGF0ZVZlbG9jaXR5ICo9IGQ7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoYSA8IHQpIGJyZWFrO1xuXHRcdFx0XHRcdFx0XHRcdFx0Y29uc3QgciA9IHRoaXMucm90YXRlT2Zmc2V0ICogbXIgKyBjYTtcblx0XHRcdFx0XHRcdFx0XHRcdGMgPSBNYXRoLmNvcyhyKTtcblx0XHRcdFx0XHRcdFx0XHRcdHMgPSBNYXRoLnNpbihyKTtcblx0XHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKGEgPCB0KSAvL1xuXHRcdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0dGhpcy5yb3RhdGVMYWcgPSB0aGlzLnJvdGF0ZU9mZnNldCAtIHJzO1xuXHRcdFx0XHRcdFx0XHR0aGlzLnNjYWxlTGFnID0gdGhpcy5zY2FsZU9mZnNldCAtIHNzO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0eiA9IE1hdGgubWF4KDAsIDEgLSBhIC8gdCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHRoaXMucmVtYWluaW5nID0gYTtcblx0XHRcdFx0fVxuXHRcdFx0XHR0aGlzLmN4ID0gYm9uZS53b3JsZFg7XG5cdFx0XHRcdHRoaXMuY3kgPSBib25lLndvcmxkWTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0XHRjYXNlIFBoeXNpY3MucG9zZTpcblx0XHRcdFx0eiA9IE1hdGgubWF4KDAsIDEgLSB0aGlzLnJlbWFpbmluZyAvIHQpO1xuXHRcdFx0XHRpZiAoeCkgYm9uZS53b3JsZFggKz0gKHRoaXMueE9mZnNldCAtIHRoaXMueExhZyAqIHopICogbWl4ICogdGhpcy5kYXRhLng7XG5cdFx0XHRcdGlmICh5KSBib25lLndvcmxkWSArPSAodGhpcy55T2Zmc2V0IC0gdGhpcy55TGFnICogeikgKiBtaXggKiB0aGlzLmRhdGEueTtcblx0XHR9XG5cblx0XHRpZiAocm90YXRlT3JTaGVhclgpIHtcblx0XHRcdGxldCBvID0gKHRoaXMucm90YXRlT2Zmc2V0IC0gdGhpcy5yb3RhdGVMYWcgKiB6KSAqIG1peCwgcyA9IDAsIGMgPSAwLCBhID0gMDtcblx0XHRcdGlmICh0aGlzLmRhdGEuc2hlYXJYID4gMCkge1xuXHRcdFx0XHRsZXQgciA9IDA7XG5cdFx0XHRcdGlmICh0aGlzLmRhdGEucm90YXRlID4gMCkge1xuXHRcdFx0XHRcdHIgPSBvICogdGhpcy5kYXRhLnJvdGF0ZTtcblx0XHRcdFx0XHRzID0gTWF0aC5zaW4ocik7XG5cdFx0XHRcdFx0YyA9IE1hdGguY29zKHIpO1xuXHRcdFx0XHRcdGEgPSBib25lLmI7XG5cdFx0XHRcdFx0Ym9uZS5iID0gYyAqIGEgLSBzICogYm9uZS5kO1xuXHRcdFx0XHRcdGJvbmUuZCA9IHMgKiBhICsgYyAqIGJvbmUuZDtcblx0XHRcdFx0fVxuXHRcdFx0XHRyICs9IG8gKiB0aGlzLmRhdGEuc2hlYXJYO1xuXHRcdFx0XHRzID0gTWF0aC5zaW4ocik7XG5cdFx0XHRcdGMgPSBNYXRoLmNvcyhyKTtcblx0XHRcdFx0YSA9IGJvbmUuYTtcblx0XHRcdFx0Ym9uZS5hID0gYyAqIGEgLSBzICogYm9uZS5jO1xuXHRcdFx0XHRib25lLmMgPSBzICogYSArIGMgKiBib25lLmM7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRvICo9IHRoaXMuZGF0YS5yb3RhdGU7XG5cdFx0XHRcdHMgPSBNYXRoLnNpbihvKTtcblx0XHRcdFx0YyA9IE1hdGguY29zKG8pO1xuXHRcdFx0XHRhID0gYm9uZS5hO1xuXHRcdFx0XHRib25lLmEgPSBjICogYSAtIHMgKiBib25lLmM7XG5cdFx0XHRcdGJvbmUuYyA9IHMgKiBhICsgYyAqIGJvbmUuYztcblx0XHRcdFx0YSA9IGJvbmUuYjtcblx0XHRcdFx0Ym9uZS5iID0gYyAqIGEgLSBzICogYm9uZS5kO1xuXHRcdFx0XHRib25lLmQgPSBzICogYSArIGMgKiBib25lLmQ7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGlmIChzY2FsZVgpIHtcblx0XHRcdGxldCBzID0gMSArICh0aGlzLnNjYWxlT2Zmc2V0IC0gdGhpcy5zY2FsZUxhZyAqIHopICogbWl4ICogdGhpcy5kYXRhLnNjYWxlWDtcblx0XHRcdGJvbmUuYSAqPSBzO1xuXHRcdFx0Ym9uZS5jICo9IHM7XG5cdFx0XHRzd2l0Y2ggKHRoaXMuZGF0YS5zY2FsZVlNb2RlKSB7XG5cdFx0XHRcdGNhc2UgU2NhbGVZTW9kZS5Vbmlmb3JtOlxuXHRcdFx0XHRcdGJvbmUuYiAqPSBzO1xuXHRcdFx0XHRcdGJvbmUuZCAqPSBzO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIFNjYWxlWU1vZGUuVm9sdW1lOlxuXHRcdFx0XHRcdHMgPSBNYXRoLmFicyhzKTtcblx0XHRcdFx0XHRzID0gcyA+PSAwLjcgPyAxIC8gcyA6IDQgLSAzLjY3MzQ3ICogcztcblx0XHRcdFx0XHRib25lLmIgKj0gcztcblx0XHRcdFx0XHRib25lLmQgKj0gcztcblx0XHRcdH1cblx0XHR9XG5cdFx0aWYgKHBoeXNpY3MgIT09IFBoeXNpY3MucG9zZSkge1xuXHRcdFx0dGhpcy50eCA9IGwgKiBib25lLmE7XG5cdFx0XHR0aGlzLnR5ID0gbCAqIGJvbmUuYztcblx0XHR9XG5cdFx0Ym9uZS5tb2RpZnlXb3JsZChza2VsZXRvbi5fdXBkYXRlKTtcblx0fVxuXG5cdHNvcnQgKHNrZWxldG9uOiBTa2VsZXRvbikge1xuXHRcdGNvbnN0IGJvbmUgPSB0aGlzLmJvbmUuYm9uZTtcblx0XHRza2VsZXRvbi5zb3J0Qm9uZShib25lKTtcblx0XHRza2VsZXRvbi5fdXBkYXRlQ2FjaGUucHVzaCh0aGlzKTtcblx0XHRza2VsZXRvbi5zb3J0UmVzZXQoYm9uZS5jaGlsZHJlbik7XG5cdFx0c2tlbGV0b24uY29uc3RyYWluZWQoYm9uZSk7XG5cdH1cblxuXHRpc1NvdXJjZUFjdGl2ZSAoKSB7XG5cdFx0cmV0dXJuIHRoaXMuYm9uZS5ib25lLmFjdGl2ZTtcblx0fVxuXG59XG4iXX0=
318
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUGh5c2ljc0NvbnN0cmFpbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvUGh5c2ljc0NvbnN0cmFpbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsrRUEyQitFO0FBRy9FLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM3QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDakQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUV2QyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNuRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFHdkM7OzBIQUUwSDtBQUMxSCxNQUFNLE9BQU8saUJBQWtCLFNBQVEsVUFBMkU7SUFDakgsSUFBSSxDQUFXO0lBRWYsTUFBTSxHQUFHLElBQUksQ0FBQztJQUNkLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDUCxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ1AsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNQLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDUCxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ1AsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNQLE9BQU8sR0FBRyxDQUFDLENBQUM7SUFDWixJQUFJLEdBQUcsQ0FBQyxDQUFDO0lBQ1QsU0FBUyxHQUFHLENBQUMsQ0FBQztJQUNkLE9BQU8sR0FBRyxDQUFDLENBQUM7SUFDWixJQUFJLEdBQUcsQ0FBQyxDQUFDO0lBQ1QsU0FBUyxHQUFHLENBQUMsQ0FBQztJQUNkLFlBQVksR0FBRyxDQUFDLENBQUM7SUFDakIsU0FBUyxHQUFHLENBQUMsQ0FBQztJQUNkLGNBQWMsR0FBRyxDQUFDLENBQUM7SUFDbkIsV0FBVyxHQUFHLENB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QUFDO29CQUNaLE1BQU07Z0JBQ1AsS0FBSyxVQUFVLENBQUMsTUFBTTtvQkFDckIsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ2hCLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxHQUFHLENBQUMsQ0FBQztvQkFDdkMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQ1osSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDZCxDQUFDO1FBQ0YsQ0FBQztRQUNELElBQUksT0FBTyxLQUFLLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUM5QixJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQ3JCLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDdEIsQ0FBQztJQUNGLENBQUM7SUFFRCxJQUFJLENBQUUsUUFBa0I7UUFDdkIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7UUFDNUIsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN4QixRQUFRLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNqQyxRQUFRLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNsQyxRQUFRLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzVCLENBQUM7SUFFRCxjQUFjO1FBQ2IsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDOUIsQ0FBQztDQUVEIiwic291cmNlc0NvbnRlbnQiOlsiLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogU3BpbmUgUnVudGltZXMgTGljZW5zZSBBZ3JlZW1lbnRcbiAqIExhc3QgdXBkYXRlZCBBcHJpbCA1LCAyMDI1LiBSZXBsYWNlcyBhbGwgcHJpb3IgdmVyc2lvbnMuXG4gKlxuICogQ29weXJpZ2h0IChjKSAyMDEzLTIwMjUsIEVzb3RlcmljIFNvZnR3YXJlIExMQ1xuICpcbiAqIEludGVncmF0aW9uIG9mIHRoZSBTcGluZSBSdW50aW1lcyBpbnRvIHNvZnR3YXJlIG9yIG90aGVyd2lzZSBjcmVhdGluZ1xuICogZGVyaXZhdGl2ZSB3b3JrcyBvZiB0aGUgU3BpbmUgUnVudGltZXMgaXMgcGVybWl0dGVkIHVuZGVyIHRoZSB0ZXJtcyBhbmRcbiAqIGNvbmRpdGlvbnMgb2YgU2VjdGlvbiAyIG9mIHRoZSBTcGluZSBFZGl0b3IgTGljZW5zZSBBZ3JlZW1lbnQ6XG4gKiBodHRwOi8vZXNvdGVyaWNzb2Z0d2FyZS5jb20vc3BpbmUtZWRpdG9yLWxpY2Vuc2VcbiAqXG4gKiBPdGhlcndpc2UsIGl0IGlzIHBlcm1pdHRlZCB0byBpbnRlZ3JhdGUgdGhlIFNwaW5lIFJ1bnRpbWVzIGludG8gc29mdHdhcmVcbiAqIG9yIG90aGVyd2lzZSBjcmVhdGUgZGVyaXZhdGl2ZSB3b3JrcyBvZiB0aGUgU3BpbmUgUnVudGltZXMgKGNvbGxlY3RpdmVseSxcbiAqIFwiUHJvZHVjdHNcIiksIHByb3ZpZGVkIHRoYXQgZWFjaCB1c2VyIG9mIHRoZSBQcm9kdWN0cyBtdXN0IG9idGFpbiB0aGVpciBvd25cbiAqIFNwaW5lIEVkaXRvciBsaWNlbnNlIGFuZCByZWRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZHVjdHMgaW4gYW55IGZvcm0gbXVzdFxuICogaW5jbHVkZSB0aGlzIGxpY2Vuc2UgYW5kIGNvcHlyaWdodCBub3RpY2UuXG4gKlxuICogVEhFIFNQSU5FIFJVTlRJTUVTIEFSRSBQUk9WSURFRCBCWSBFU09URVJJQyBTT0ZUV0FSRSBMTEMgXCJBUyBJU1wiIEFORCBBTllcbiAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRURcbiAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkVcbiAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEVTT1RFUklDIFNPRlRXQVJFIExMQyBCRSBMSUFCTEUgRk9SIEFOWVxuICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVNcbiAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUyxcbiAqIEJVU0lORVNTIElOVEVSUlVQVElPTiwgT1IgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFMpIEhPV0VWRVIgQ0FVU0VEIEFORFxuICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcbiAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRlxuICogVEhFIFNQSU5FIFJVTlRJTUVTLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG5pbXBvcnQgdHlwZSB7IEJvbmVQb3NlIH0gZnJvbSBcIi4vQm9uZVBvc2UuanNcIjtcbmltcG9ydCB7IENvbnN0cmFpbnQgfSBmcm9tIFwiLi9Db25zdHJhaW50LmpzXCI7XG5pbXBvcnQgeyBTY2FsZVlNb2RlIH0gZnJvbSBcIi4vQ29uc3RyYWludERhdGEuanNcIjtcbmltcG9ydCB7IFBoeXNpY3MgfSBmcm9tIFwiLi9QaHlzaWNzLmpzXCI7XG5pbXBvcnQgdHlwZSB7IFBoeXNpY3NDb25zdHJhaW50RGF0YSB9IGZyb20gXCIuL1BoeXNpY3NDb25zdHJhaW50RGF0YS5qc1wiO1xuaW1wb3J0IHsgUGh5c2ljc0NvbnN0cmFpbnRQb3NlIH0gZnJvbSBcIi4vUGh5c2ljc0NvbnN0cmFpbnRQb3NlLmpzXCI7XG5pbXBvcnQgeyBTa2VsZXRvbiB9IGZyb20gXCIuL1NrZWxldG9uLmpzXCI7XG5pbXBvcnQgeyBNYXRoVXRpbHMgfSBmcm9tIFwiLi9VdGlscy5qc1wiO1xuXG5cbi8qKiBBcHBsaWVzIHBoeXNpY3MgdG8gYSBib25lLlxuICpcbiAqIFNlZSA8YSBocmVmPVwiaHR0cDovL2Vzb3Rlcmljc29mdHdhcmUuY29tL3NwaW5lLXBoeXNpY3MtY29uc3RyYWludHNcIj5QaHlzaWNzIGNvbnN0cmFpbnRzPC9hPiBpbiB0aGUgU3BpbmUgVXNlciBHdWlkZS4gKi9cbmV4cG9ydCBjbGFzcyBQaHlzaWNzQ29uc3RyYWludCBleHRlbmRzIENvbnN0cmFpbnQ8UGh5c2ljc0NvbnN0cmFpbnQsIFBoeXNpY3NDb25zdHJhaW50RGF0YSwgUGh5c2ljc0NvbnN0cmFpbnRQb3NlPiB7XG5cdGJvbmU6IEJvbmVQb3NlO1xuXG5cdF9yZXNldCA9IHRydWU7XG5cdHV4ID0gMDtcblx0dXkgPSAwO1xuXHRjeCA9IDA7XG5cdGN5ID0gMDtcblx0dHggPSAwO1xuXHR0eSA9IDA7XG5cdHhPZmZzZXQgPSAwO1xuXHR4TGFnID0gMDtcblx0eFZlbG9jaXR5ID0gMDtcblx0eU9mZnNldCA9IDA7XG5cdHlMYWcgPSAwO1xuXHR5VmVsb2NpdHkgPSAwO1xuXHRyb3RhdGVPZmZzZXQgPSAwO1xuXHRyb3RhdGVMYWcgPSAwO1xuXHRyb3RhdGVWZWxvY2l0eSA9IDA7XG5cdHNjYWxlT2Zmc2V0ID0gMFxuXHRzY2FsZUxhZyA9IDBcblx0c2NhbGVWZWxvY2l0eSA9IDA7XG5cdHJlbWFpbmluZyA9IDA7XG5cdGxhc3RUaW1lID0gMDtcblxuXHRjb25zdHJ1Y3RvciAoZGF0YTogUGh5c2ljc0NvbnN0cmFpbnREYXRhLCBza2VsZXRvbjogU2tlbGV0b24pIHtcblx0XHRzdXBlcihkYXRhLCBuZXcgUGh5c2ljc0NvbnN0cmFpbnRQb3NlKCksIG5ldyBQaHlzaWNzQ29uc3RyYWludFBvc2UoKSk7XG5cdFx0aWYgKHNrZWxldG9uID09IG51bGwpIHRocm93IG5ldyBFcnJvcihcInNrZWxldG9uIGNhbm5vdCBiZSBudWxsLlwiKTtcblxuXHRcdHRoaXMuYm9uZSA9IHNrZWxldG9uLmJvbmVzW2RhdGEuYm9uZS5pbmRleF0uY29uc3RyYWluZWRQb3NlO1xuXHR9XG5cblx0cHVibGljIGNvcHkgKHNrZWxldG9uOiBTa2VsZXRvbikge1xuXHRcdHZhciBjb3B5ID0gbmV3IFBoeXNpY3NDb25zdHJhaW50KHRoaXMuZGF0YSwgc2tlbGV0b24pO1xuXHRcdGNvcHkucG9zZS5zZXQodGhpcy5wb3NlKTtcblx0XHRyZXR1cm4gY29weTtcblx0fVxuXG5cdC8qKiBSZXNldHMgYWxsIHBoeXNpY3Mgc3RhdGUgdGhhdCB3YXMgdGhlIHJlc3VsdCBvZiBwcmV2aW91cyBtb3ZlbWVudC4gVXNlIHRoaXMgYWZ0ZXIgbW92aW5nIGEgYm9uZSB0byBwcmV2ZW50IHBoeXNpY3MgZnJvbVxuXHQgKiByZWFjdGluZyB0byB0aGUgbW92ZW1lbnQuICovXG5cdHJlc2V0IChza2VsZXRvbjogU2tlbGV0b24pIHtcblx0XHR0aGlzLnJlbWFpbmluZyA9IDA7XG5cdFx0dGhpcy5sYXN0VGltZSA9IHNrZWxldG9uLnRpbWU7XG5cdFx0dGhpcy5fcmVzZXQgPSB0cnVlO1xuXHRcdHRoaXMueE9mZnNldCA9IDA7XG5cdFx0dGhpcy54TGFnID0gMDtcblx0XHR0aGlzLnhWZWxvY2l0eSA9IDA7XG5cdFx0dGhpcy55T2Zmc2V0ID0gMDtcblx0XHR0aGlzLnlMYWcgPSAwO1xuXHRcdHRoaXMueVZlbG9jaXR5ID0gMDtcblx0XHR0aGlzLnJvdGF0ZU9mZnNldCA9IDA7XG5cdFx0dGhpcy5yb3RhdGVMYWcgPSAwO1xuXHRcdHRoaXMucm90YXRlVmVsb2NpdHkgPSAwO1xuXHRcdHRoaXMuc2NhbGVPZmZzZXQgPSAwO1xuXHRcdHRoaXMuc2NhbGVMYWcgPSAwO1xuXHRcdHRoaXMuc2NhbGVWZWxvY2l0eSA9IDA7XG5cdH1cblxuXHQvKiogVHJhbnNsYXRlcyB0aGUgcGh5c2ljcyBjb25zdHJhaW50IHNvIHRoZSBuZXh0IHtAbGluayB1cGRhdGV9IGZvcmNlcyBhcmUgYXBwbGllZCBhcyBpZiB0aGUgYm9uZSBtb3ZlZCBhblxuXHQgKiBhZGRpdGlvbmFsIGFtb3VudCBpbiB3b3JsZCBzcGFjZS4gKi9cblx0dHJhbnNsYXRlICh4OiBudW1iZXIsIHk6IG51bWJlcikge1xuXHRcdHRoaXMudXggLT0geDtcblx0XHR0aGlzLnV5IC09IHk7XG5cdFx0dGhpcy5jeCAtPSB4O1xuXHRcdHRoaXMuY3kgLT0geTtcblx0fVxuXG5cdC8qKiBSb3RhdGVzIHRoZSBwaHlzaWNzIGNvbnN0cmFpbnQgc28gdGhlIG5leHQge0BsaW5rIHVwZGF0ZX0gZm9yY2VzIGFyZSBhcHBsaWVkIGFzIGlmIHRoZSBib25lIHJvdGF0ZWRcblx0ICogYXJvdW5kIHRoZSBzcGVjaWZpZWQgcG9pbnQgaW4gd29ybGQgc3BhY2UuICovXG5cdHJvdGF0ZSAoeDogbnVtYmVyLCB5OiBudW1iZXIsIGRlZ3JlZXM6IG51bWJlcikge1xuXHRcdGNvbnN0IHIgPSBkZWdyZWVzICogTWF0aFV0aWxzLmRlZ1JhZCwgY29zID0gTWF0aC5jb3MociksIHNpbiA9IE1hdGguc2luKHIpO1xuXHRcdGNvbnN0IGR4ID0gdGhpcy5jeCAtIHgsIGR5ID0gdGhpcy5jeSAtIHk7XG5cdFx0dGhpcy50cmFuc2xhdGUoZHggKiBjb3MgLSBkeSAqIHNpbiAtIGR4LCBkeCAqIHNpbiArIGR5ICogY29zIC0gZHkpO1xuXHR9XG5cblx0LyoqIEFwcGxpZXMgdGhlIGNvbnN0cmFpbnQgdG8gdGhlIGNvbnN0cmFpbmVkIGJvbmVzLiAqL1xuXHR1cGRhdGUgKHNrZWxldG9uOiBTa2VsZXRvbiwgcGh5c2ljczogUGh5c2ljcykge1xuXHRcdGNvbnN0IHAgPSB0aGlzLmFwcGxpZWRQb3NlO1xuXHRcdGNvbnN0IG1peCA9IHAubWl4O1xuXHRcdGlmIChtaXggPT09IDApIHJldHVybjtcblxuXHRcdGNvbnN0IHggPSB0aGlzLmRhdGEueCA+IDAsIHkgPSB0aGlzLmRhdGEueSA+IDAsIHJvdGF0ZU9yU2hlYXJYID0gdGhpcy5kYXRhLnJvdGF0ZSA+IDAgfHwgdGhpcy5kYXRhLnNoZWFyWCA+IDAsIHNjYWxlWCA9IHRoaXMuZGF0YS5zY2FsZVggPiAwO1xuXHRcdGNvbnN0IGJvbmUgPSB0aGlzLmJvbmU7XG5cdFx0bGV0IGwgPSBib25lLmJvbmUuZGF0YS5sZW5ndGgsIHQgPSB0aGlzLmRhdGEuc3RlcCwgeiA9IDA7XG5cdFx0aWYgKHBoeXNpY3MgPT09IFBoeXNpY3Mubm9uZSkgcmV0dXJuO1xuXHRcdGJvbmUubW9kaWZ5V29ybGQoc2tlbGV0b24pO1xuXG5cdFx0c3dpdGNoIChwaHlzaWNzKSB7XG5cdFx0XHQvLyBiaW9tZS1pZ25vcmUgbGludC9zdXNwaWNpb3VzL25vRmFsbHRocm91Z2hTd2l0Y2hDbGF1c2U6IGZhbGwgdGhyb3VnaCBleHBlY3RlZFxuXHRcdFx0Y2FzZSBQaHlzaWNzLnJlc2V0OlxuXHRcdFx0XHR0aGlzLnJlc2V0KHNrZWxldG9uKTsgLy8gRmFsbCB0aHJvdWdoLlxuXHRcdFx0Y2FzZSBQaHlzaWNzLnVwZGF0ZToge1xuXHRcdFx0XHRjb25zdCBkZWx0YSA9IE1hdGgubWF4KHNrZWxldG9uLnRpbWUgLSB0aGlzLmxhc3RUaW1lLCAwKSwgYWEgPSB0aGlzLnJlbWFpbmluZztcblx0XHRcdFx0dGhpcy5yZW1haW5pbmcgKz0gZGVsdGE7XG5cdFx0XHRcdHRoaXMubGFzdFRpbWUgPSBza2VsZXRvbi50aW1lO1xuXG5cdFx0XHRcdGNvbnN0IGJ4ID0gYm9uZS53b3JsZFgsIGJ5ID0gYm9uZS53b3JsZFk7XG5cdFx0XHRcdGlmICh0aGlzLl9yZXNldCkge1xuXHRcdFx0XHRcdHRoaXMuX3Jlc2V0ID0gZmFsc2U7XG5cdFx0XHRcdFx0dGhpcy51eCA9IGJ4O1xuXHRcdFx0XHRcdHRoaXMudXkgPSBieTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRsZXQgYSA9IHRoaXMucmVtYWluaW5nLCBpID0gcC5pbmVydGlhLCBmID0gc2tlbGV0b24uZGF0YS5yZWZlcmVuY2VTY2FsZSwgZCA9IC0xLCBtID0gMCwgZSA9IDAsIHF4ID0gdGhpcy5kYXRhLmxpbWl0ICogZGVsdGEsXG5cdFx0XHRcdFx0XHRxeSA9IHF4ICogTWF0aC5hYnMoc2tlbGV0b24uc2NhbGVZKTtcblx0XHRcdFx0XHRxeCAqPSBNYXRoLmFicyhza2VsZXRvbi5zY2FsZVgpO1xuXHRcdFx0XHRcdGlmICh4IHx8IHkpIHtcblx0XHRcdFx0XHRcdGlmICh4KSB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IHUgPSAodGhpcy51eCAtIGJ4KSAqIGk7XG5cdFx0XHRcdFx0XHRcdHRoaXMueE9mZnNldCArPSB1ID4gcXggPyBxeCA6IHUgPCAtcXggPyAtcXggOiB1O1xuXHRcdFx0XHRcdFx0XHR0aGlzLnV4ID0gYng7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRpZiAoeSkge1xuXHRcdFx0XHRcdFx0XHRjb25zdCB1ID0gKHRoaXMudXkgLSBieSkgKiBpO1xuXHRcdFx0XHRcdFx0XHR0aGlzLnlPZmZzZXQgKz0gdSA+IHF5ID8gcXkgOiB1IDwgLXF5ID8gLXF5IDogdTtcblx0XHRcdFx0XHRcdFx0dGhpcy51eSA9IGJ5O1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0aWYgKGEgPj0gdCkge1xuXHRcdFx0XHRcdFx0XHRjb25zdCB4cyA9IHRoaXMueE9mZnNldCwgeXMgPSB0aGlzLnlPZmZzZXQ7XG5cdFx0XHRcdFx0XHRcdGQgPSBwLmRhbXBpbmcgKiogKDYwICogdCk7XG5cdFx0XHRcdFx0XHRcdG0gPSB0ICogcC5tYXNzSW52ZXJzZTtcblx0XHRcdFx0XHRcdFx0ZSA9IHAuc3RyZW5ndGg7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IHcgPSBmICogcC53aW5kLCBnID0gZiAqIHAuZ3Jhdml0eTtcblx0XHRcdFx0XHRcdFx0Y29uc3QgYXggPSAodyAqIHNrZWxldG9uLndpbmRYICsgZyAqIHNrZWxldG9uLmdyYXZpdHlYKSAqIHNrZWxldG9uLnNjYWxlWDtcblx0XHRcdFx0XHRcdFx0Y29uc3QgYXkgPSAodyAqIHNrZWxldG9uLndpbmRZICsgZyAqIHNrZWxldG9uLmdyYXZpdHlZKSAqIHNrZWxldG9uLnNjYWxlWTtcblx0XHRcdFx0XHRcdFx0ZG8ge1xuXHRcdFx0XHRcdFx0XHRcdGlmICh4KSB7XG5cdFx0XHRcdFx0XHRcdFx0XHR0aGlzLnhWZWxvY2l0eSArPSAoYXggLSB0aGlzLnhPZmZzZXQgKiBlKSAqIG07XG5cdFx0XHRcdFx0XHRcdFx0XHR0aGlzLnhPZmZzZXQgKz0gdGhpcy54VmVsb2NpdHkgKiB0O1xuXHRcdFx0XHRcdFx0XHRcdFx0dGhpcy54VmVsb2NpdHkgKj0gZDtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0aWYgKHkpIHtcblx0XHRcdFx0XHRcdFx0XHRcdHRoaXMueVZlbG9jaXR5IC09IChheSArIHRoaXMueU9mZnNldCAqIGUpICogbTtcblx0XHRcdFx0XHRcdFx0XHRcdHRoaXMueU9mZnNldCArPSB0aGlzLnlWZWxvY2l0eSAqIHQ7XG5cdFx0XHRcdFx0XHRcdFx0XHR0aGlzLnlWZWxvY2l0eSAqPSBkO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRhIC09IHQ7XG5cdFx0XHRcdFx0XHRcdH0gd2hpbGUgKGEgPj0gdCk7XG5cdFx0XHRcdFx0XHRcdHRoaXMueExhZyA9IHRoaXMueE9mZnNldCAtIHhzO1xuXHRcdFx0XHRcdFx0XHR0aGlzLnlMYWcgPSB0aGlzLnlPZmZzZXQgLSB5cztcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdHogPSBNYXRoLm1heCgwLCAxIC0gYSAvIHQpO1xuXHRcdFx0XHRcdFx0aWYgKHgpIGJvbmUud29ybGRYICs9ICh0aGlzLnhPZmZzZXQgLSB0aGlzLnhMYWcgKiB6KSAqIG1peCAqIHRoaXMuZGF0YS54O1xuXHRcdFx0XHRcdFx0aWYgKHkpIGJvbmUud29ybGRZICs9ICh0aGlzLnlPZmZzZXQgLSB0aGlzLnlMYWcgKiB6KSAqIG1peCAqIHRoaXMuZGF0YS55O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAocm90YXRlT3JTaGVhclggfHwgc2NhbGVYKSB7XG5cdFx0XHRcdFx0XHRsZXQgY2EgPSBNYXRoLmF0YW4yKGJvbmUuYywgYm9uZS5hKSwgYyA9IDAsIHMgPSAwLCBtciA9IDAsIGR4ID0gdGhpcy5jeCAtIGJvbmUud29ybGRYLCBkeSA9IHRoaXMuY3kgLSBib25lLndvcmxkWTtcblx0XHRcdFx0XHRcdGlmIChkeCA+IHF4KVxuXHRcdFx0XHRcdFx0XHRkeCA9IHF4O1xuXHRcdFx0XHRcdFx0ZWxzZSBpZiAoZHggPCAtcXgpIC8vXG5cdFx0XHRcdFx0XHRcdGR4ID0gLXF4O1xuXHRcdFx0XHRcdFx0aWYgKGR5ID4gcXkpXG5cdFx0XHRcdFx0XHRcdGR5ID0gcXk7XG5cdFx0XHRcdFx0XHRlbHNlIGlmIChkeSA8IC1xeSkgLy9cblx0XHRcdFx0XHRcdFx0ZHkgPSAtcXk7XG5cdFx0XHRcdFx0XHRhID0gdGhpcy5yZW1haW5pbmc7XG5cdFx0XHRcdFx0XHRpZiAocm90YXRlT3JTaGVhclgpIHtcblx0XHRcdFx0XHRcdFx0bXIgPSAodGhpcy5kYXRhLnJvdGF0ZSArIHRoaXMuZGF0YS5zaGVhclgpICogbWl4O1xuXHRcdFx0XHRcdFx0XHR6ID0gdGhpcy5yb3RhdGVMYWcgKiBNYXRoLm1heCgwLCAxIC0gYWEgLyB0KTtcblx0XHRcdFx0XHRcdFx0bGV0IHIgPSBNYXRoLmF0YW4yKGR5ICsgdGhpcy50eSwgZHggKyB0aGlzLnR4KSAtIGNhIC0gKHRoaXMucm90YXRlT2Zmc2V0IC0geikgKiBtcjtcblx0XHRcdFx0XHRcdFx0dGhpcy5yb3RhdGVPZmZzZXQgKz0gKHIgLSBNYXRoLmNlaWwociAqIE1hdGhVdGlscy5pbnZQSTIgLSAwLjUpICogTWF0aFV0aWxzLlBJMikgKiBpO1xuXHRcdFx0XHRcdFx0XHRyID0gKHRoaXMucm90YXRlT2Zmc2V0IC0geikgKiBtciArIGNhO1xuXHRcdFx0XHRcdFx0XHRjID0gTWF0aC5jb3Mocik7XG5cdFx0XHRcdFx0XHRcdHMgPSBNYXRoLnNpbihyKTtcblx0XHRcdFx0XHRcdFx0aWYgKHNjYWxlWCkge1xuXHRcdFx0XHRcdFx0XHRcdHIgPSBsICogYm9uZS5nZXRXb3JsZFNjYWxlWCgpO1xuXHRcdFx0XHRcdFx0XHRcdGlmIChyID4gMCkgdGhpcy5zY2FsZU9mZnNldCArPSAoZHggKiBjICsgZHkgKiBzKSAqIGkgLyByO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRjID0gTWF0aC5jb3MoY2EpO1xuXHRcdFx0XHRcdFx0XHRzID0gTWF0aC5zaW4oY2EpO1xuXHRcdFx0XHRcdFx0XHRjb25zdCByID0gbCAqIGJvbmUuZ2V0V29ybGRTY2FsZVgoKSAtIHRoaXMuc2NhbGVMYWcgKiBNYXRoLm1heCgwLCAxIC0gYWEgLyB0KTtcblx0XHRcdFx0XHRcdFx0aWYgKHIgPiAwKSB0aGlzLnNjYWxlT2Zmc2V0ICs9IChkeCAqIGMgKyBkeSAqIHMpICogaSAvIHI7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRpZiAoYSA+PSB0KSB7XG5cdFx0XHRcdFx0XHRcdGlmIChkID09PSAtMSkge1xuXHRcdFx0XHRcdFx0XHRcdGQgPSBwLmRhbXBpbmcgKiogKDYwICogdCk7XG5cdFx0XHRcdFx0XHRcdFx0bSA9IHQgKiBwLm1hc3NJbnZlcnNlO1xuXHRcdFx0XHRcdFx0XHRcdGUgPSBwLnN0cmVuZ3RoO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdGNvbnN0IGF4ID0gcC53aW5kICogc2tlbGV0b24ud2luZFggKyBwLmdyYXZpdHkgKiBza2VsZXRvbi5ncmF2aXR5WDtcblx0XHRcdFx0XHRcdFx0Y29uc3QgYXkgPSAocC53aW5kICogc2tlbGV0b24ud2luZFkgKyBwLmdyYXZpdHkgKiBza2VsZXRvbi5ncmF2aXR5WSkgKiBTa2VsZXRvbi55RGlyO1xuXHRcdFx0XHRcdFx0XHRjb25zdCBycyA9IHRoaXMucm90YXRlT2Zmc2V0LCBzcyA9IHRoaXMuc2NhbGVPZmZzZXQsIGggPSBsIC8gZjtcblx0XHRcdFx0XHRcdFx0d2hpbGUgKHRydWUpIHtcblx0XHRcdFx0XHRcdFx0XHRhIC09IHQ7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKHNjYWxlWCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5zY2FsZVZlbG9jaXR5ICs9IChheCAqIGMgLSBheSAqIHMgLSB0aGlzLnNjYWxlT2Zmc2V0ICogZSkgKiBtO1xuXHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5zY2FsZU9mZnNldCArPSB0aGlzLnNjYWxlVmVsb2NpdHkgKiB0O1xuXHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5zY2FsZVZlbG9jaXR5ICo9IGQ7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdGlmIChyb3RhdGVPclNoZWFyWCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5yb3RhdGVWZWxvY2l0eSAtPSAoKGF4ICogcyArIGF5ICogYykgKiBoICsgdGhpcy5yb3RhdGVPZmZzZXQgKiBlKSAqIG07XG5cdFx0XHRcdFx0XHRcdFx0XHR0aGlzLnJvdGF0ZU9mZnNldCArPSB0aGlzLnJvdGF0ZVZlbG9jaXR5ICogdDtcblx0XHRcdFx0XHRcdFx0XHRcdHRoaXMucm90YXRlVmVsb2NpdHkgKj0gZDtcblx0XHRcdFx0XHRcdFx0XHRcdGlmIChhIDwgdCkgYnJlYWs7XG5cdFx0XHRcdFx0XHRcdFx0XHRjb25zdCByID0gdGhpcy5yb3RhdGVPZmZzZXQgKiBtciArIGNhO1xuXHRcdFx0XHRcdFx0XHRcdFx0YyA9IE1hdGguY29zKHIpO1xuXHRcdFx0XHRcdFx0XHRcdFx0cyA9IE1hdGguc2luKHIpO1xuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoYSA8IHQpIC8vXG5cdFx0XHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR0aGlzLnJvdGF0ZUxhZyA9IHRoaXMucm90YXRlT2Zmc2V0IC0gcnM7XG5cdFx0XHRcdFx0XHRcdHRoaXMuc2NhbGVMYWcgPSB0aGlzLnNjYWxlT2Zmc2V0IC0gc3M7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR6ID0gTWF0aC5tYXgoMCwgMSAtIGEgLyB0KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0dGhpcy5yZW1haW5pbmcgPSBhO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHRoaXMuY3ggPSBib25lLndvcmxkWDtcblx0XHRcdFx0dGhpcy5jeSA9IGJvbmUud29ybGRZO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHRcdGNhc2UgUGh5c2ljcy5wb3NlOlxuXHRcdFx0XHR6ID0gTWF0aC5tYXgoMCwgMSAtIHRoaXMucmVtYWluaW5nIC8gdCk7XG5cdFx0XHRcdGlmICh4KSBib25lLndvcmxkWCArPSAodGhpcy54T2Zmc2V0IC0gdGhpcy54TGFnICogeikgKiBtaXggKiB0aGlzLmRhdGEueDtcblx0XHRcdFx0aWYgKHkpIGJvbmUud29ybGRZICs9ICh0aGlzLnlPZmZzZXQgLSB0aGlzLnlMYWcgKiB6KSAqIG1peCAqIHRoaXMuZGF0YS55O1xuXHRcdH1cblxuXHRcdGlmIChyb3RhdGVPclNoZWFyWCkge1xuXHRcdFx0bGV0IG8gPSAodGhpcy5yb3RhdGVPZmZzZXQgLSB0aGlzLnJvdGF0ZUxhZyAqIHopICogbWl4LCBzID0gMCwgYyA9IDAsIGEgPSAwO1xuXHRcdFx0aWYgKHRoaXMuZGF0YS5zaGVhclggPiAwKSB7XG5cdFx0XHRcdGxldCByID0gMDtcblx0XHRcdFx0aWYgKHRoaXMuZGF0YS5yb3RhdGUgPiAwKSB7XG5cdFx0XHRcdFx0ciA9IG8gKiB0aGlzLmRhdGEucm90YXRlO1xuXHRcdFx0XHRcdHMgPSBNYXRoLnNpbihyKTtcblx0XHRcdFx0XHRjID0gTWF0aC5jb3Mocik7XG5cdFx0XHRcdFx0YSA9IGJvbmUuYjtcblx0XHRcdFx0XHRib25lLmIgPSBjICogYSAtIHMgKiBib25lLmQ7XG5cdFx0XHRcdFx0Ym9uZS5kID0gcyAqIGEgKyBjICogYm9uZS5kO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHIgKz0gbyAqIHRoaXMuZGF0YS5zaGVhclg7XG5cdFx0XHRcdHMgPSBNYXRoLnNpbihyKTtcblx0XHRcdFx0YyA9IE1hdGguY29zKHIpO1xuXHRcdFx0XHRhID0gYm9uZS5hO1xuXHRcdFx0XHRib25lLmEgPSBjICogYSAtIHMgKiBib25lLmM7XG5cdFx0XHRcdGJvbmUuYyA9IHMgKiBhICsgYyAqIGJvbmUuYztcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG8gKj0gdGhpcy5kYXRhLnJvdGF0ZTtcblx0XHRcdFx0cyA9IE1hdGguc2luKG8pO1xuXHRcdFx0XHRjID0gTWF0aC5jb3Mobyk7XG5cdFx0XHRcdGEgPSBib25lLmE7XG5cdFx0XHRcdGJvbmUuYSA9IGMgKiBhIC0gcyAqIGJvbmUuYztcblx0XHRcdFx0Ym9uZS5jID0gcyAqIGEgKyBjICogYm9uZS5jO1xuXHRcdFx0XHRhID0gYm9uZS5iO1xuXHRcdFx0XHRib25lLmIgPSBjICogYSAtIHMgKiBib25lLmQ7XG5cdFx0XHRcdGJvbmUuZCA9IHMgKiBhICsgYyAqIGJvbmUuZDtcblx0XHRcdH1cblx0XHR9XG5cdFx0aWYgKHNjYWxlWCkge1xuXHRcdFx0bGV0IHMgPSAxICsgKHRoaXMuc2NhbGVPZmZzZXQgLSB0aGlzLnNjYWxlTGFnICogeikgKiBtaXggKiB0aGlzLmRhdGEuc2NhbGVYO1xuXHRcdFx0Ym9uZS5hICo9IHM7XG5cdFx0XHRib25lLmMgKj0gcztcblx0XHRcdHN3aXRjaCAodGhpcy5kYXRhLnNjYWxlWU1vZGUpIHtcblx0XHRcdFx0Y2FzZSBTY2FsZVlNb2RlLlVuaWZvcm06XG5cdFx0XHRcdFx0Ym9uZS5iICo9IHM7XG5cdFx0XHRcdFx0Ym9uZS5kICo9IHM7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgU2NhbGVZTW9kZS5Wb2x1bWU6XG5cdFx0XHRcdFx0cyA9IE1hdGguYWJzKHMpO1xuXHRcdFx0XHRcdHMgPSBzID49IDAuNyA/IDEgLyBzIDogNCAtIDMuNjczNDcgKiBzO1xuXHRcdFx0XHRcdGJvbmUuYiAqPSBzO1xuXHRcdFx0XHRcdGJvbmUuZCAqPSBzO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRpZiAocGh5c2ljcyAhPT0gUGh5c2ljcy5wb3NlKSB7XG5cdFx0XHR0aGlzLnR4ID0gbCAqIGJvbmUuYTtcblx0XHRcdHRoaXMudHkgPSBsICogYm9uZS5jO1xuXHRcdH1cblx0fVxuXG5cdHNvcnQgKHNrZWxldG9uOiBTa2VsZXRvbikge1xuXHRcdGNvbnN0IGJvbmUgPSB0aGlzLmJvbmUuYm9uZTtcblx0XHRza2VsZXRvbi5zb3J0Qm9uZShib25lKTtcblx0XHRza2VsZXRvbi5fdXBkYXRlQ2FjaGUucHVzaCh0aGlzKTtcblx0XHRza2VsZXRvbi5zb3J0UmVzZXQoYm9uZS5jaGlsZHJlbik7XG5cdFx0c2tlbGV0b24uY29uc3RyYWluZWQoYm9uZSk7XG5cdH1cblxuXHRpc1NvdXJjZUFjdGl2ZSAoKSB7XG5cdFx0cmV0dXJuIHRoaXMuYm9uZS5ib25lLmFjdGl2ZTtcblx0fVxuXG59XG4iXX0=
@@ -169,7 +169,7 @@ export declare class Skeleton {
169
169
  setAttachment(slotName: string, placeholder: string | null): void;
170
170
  /** Finds a constraint of the specified type by comparing each constraints's name. It is more efficient to cache the results of
171
171
  * this method than to call it multiple times. */
172
- findConstraint<T extends Constraint<any, any, any>>(constraintName: string, type: new () => T): T | null;
172
+ findConstraint<T extends Constraint<any, any, any>>(constraintName: string, type: abstract new (...args: any[]) => T): T | null;
173
173
  /** Returns the axis aligned bounding box (AABB) of the region and mesh attachments for the applied pose.
174
174
  * @param offset An output value, the distance from the skeleton origin to the bottom left corner of the AABB.
175
175
  * @param size An output value, the width and height of the AABB.
package/dist/Skeleton.js CHANGED
@@ -480,4 +480,4 @@ export class Skeleton {
480
480
  constraints[i].rotate(x, y, degrees);
481
481
  }
482
482
  }
483
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2tlbGV0b24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvU2tlbGV0b24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsrRUEyQitFO0FBSS9FLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNqRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNyRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBRWpDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUUzQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQU0zRCxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ2pDLE9BQU8sRUFBRSxLQUFLLEVBQXdCLEtBQUssRUFBRSxPQUFPLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFFekU7Ozs7O2tJQUtrSTtBQUNsSSxNQUFNLE9BQU8sUUFBUTtJQUNaLE1BQU0sQ0FBQyxhQUFhLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2xELE1BQU0sQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0lBQ3JCLE1BQU0sS0FBSyxJQUFJO1FBQ2QsT0FBTyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFRCxzQ0FBc0M7SUFDN0IsSUFBSSxDQUFlO0lBRTVCLHlGQUF5RjtJQUNoRixLQUFLLENBQWM7SUFFNUIsa0ZBQWtGO0lBQ3pFLEtBQUssQ0FBYztJQUU1QjtnQkFDWTtJQUNILFNBQVMsQ0FBWTtJ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RyxDQUFDLENBQUM7UUFDWCxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNaLENBQUM7SUFFRCw4Q0FBOEM7SUFDOUMsTUFBTSxDQUFFLEtBQWE7UUFDcEIsSUFBSSxDQUFDLElBQUksSUFBSSxLQUFLLENBQUM7SUFDcEIsQ0FBQztJQUVELDZFQUE2RTtJQUM3RSxnQkFBZ0IsQ0FBRSxDQUFTLEVBQUUsQ0FBUztRQUNyQyxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO1FBQ2pDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxXQUFXLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFO1lBQ2pELFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFFRCwwRUFBMEU7SUFDMUUsYUFBYSxDQUFFLENBQVMsRUFBRSxDQUFTLEVBQUUsT0FBZTtRQUNuRCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO1FBQ2pDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxXQUFXLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFO1lBQ2pELFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUN2QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogU3BpbmUgUnVudGltZXMgTGljZW5zZSBBZ3JlZW1lbnRcbiAqIExhc3QgdXBkYXRlZCBBcHJpbCA1LCAyMDI1LiBSZXBsYWNlcyBhbGwgcHJpb3IgdmVyc2lvbnMuXG4gKlxuICogQ29weXJpZ2h0IChjKSAyMDEzLTIwMjUsIEVzb3RlcmljIFNvZnR3YXJlIExMQ1xuICpcbiAqIEludGVncmF0aW9uIG9mIHRoZSBTcGluZSBSdW50aW1lcyBpbnRvIHNvZnR3YXJlIG9yIG90aGVyd2lzZSBjcmVhdGluZ1xuICogZGVyaXZhdGl2ZSB3b3JrcyBvZiB0aGUgU3BpbmUgUnVudGltZXMgaXMgcGVybWl0dGVkIHVuZGVyIHRoZSB0ZXJtcyBhbmRcbiAqIGNvbmRpdGlvbnMgb2YgU2VjdGlvbiAyIG9mIHRoZSBTcGluZSBFZGl0b3IgTGljZW5zZSBBZ3JlZW1lbnQ6XG4gKiBodHRwOi8vZXNvdGVyaWNzb2Z0d2FyZS5jb20vc3BpbmUtZWRpdG9yLWxpY2Vuc2VcbiAqXG4gKiBPdGhlcndpc2UsIGl0IGlzIHBlcm1pdHRlZCB0byBpbnRlZ3JhdGUgdGhlIFNwaW5lIFJ1bnRpbWVzIGludG8gc29mdHdhcmVcbiAqIG9yIG90aGVyd2lzZSBjcmVhdGUgZGVyaXZhdGl2ZSB3b3JrcyBvZiB0aGUgU3BpbmUgUnVudGltZXMgKGNvbGxlY3RpdmVseSxcbiAqIFwiUHJvZHVjdHNcIiksIHByb3ZpZGVkIHRoYXQgZWFjaCB1c2VyIG9mIHRoZSBQcm9kdWN0cyBtdXN0IG9idGFpbiB0aGVpciBvd25cbiAqIFNwaW5lIEVkaXRvciBsaWNlbnNlIGFuZCByZWRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZHVjdHMgaW4gYW55IGZvcm0gbXVzdFxuICogaW5jbHVkZSB0aGlzIGxpY2Vuc2UgYW5kIGNvcHlyaWdodCBub3RpY2UuXG4gKlxuICogVEhFIFNQSU5FIFJVTlRJTUVTIEFSRSBQUk9WSURFRCBCWSBFU09URVJJQyBTT0ZUV0FSRSBMTEMgXCJBUyBJU1wiIEFORCBBTllcbiAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRURcbiAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkVcbiAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEVTT1RFUklDIFNPRlRXQVJFIExMQyBCRSBMSUFCTEUgRk9SIEFOWVxuICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVNcbiAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUyxcbiAqIEJVU0lORVNTIElOVEVSUlVQVElPTiwgT1IgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFMpIEhPV0VWRVIgQ0FVU0VEIEFORFxuICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcbiAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRlxuICogVEhFIFNQSU5FIFJVTlRJTUVTLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG5pbXBvcnQgdHlwZSB7IEFuaW1hdGlvblN0YXRlIH0gZnJvbSBcIi4vQW5pbWF0aW9uU3RhdGUuanNcIjtcbmltcG9ydCB0eXBlIHsgQXR0YWNobWVudCB9IGZyb20gXCIuL2F0dGFjaG1lbnRzL0F0dGFjaG1lbnQuanNcIjtcbmltcG9ydCB7IENsaXBwaW5nQXR0YWNobWVudCB9IGZyb20gXCIuL2F0dGFjaG1lbnRzL0NsaXBwaW5nQXR0YWNobWVudC5qc1wiO1xuaW1wb3J0IHsgTWVzaEF0dGFjaG1lbnQgfSBmcm9tIFwiLi9hdHRhY2htZW50cy9NZXNoQXR0YWNobWVudC5qc1wiO1xuaW1wb3J0IHsgUmVnaW9uQXR0YWNobWVudCB9IGZyb20gXCIuL2F0dGFjaG1lbnRzL1JlZ2lvbkF0dGFjaG1lbnQuanNcIjtcbmltcG9ydCB7IEJvbmUgfSBmcm9tIFwiLi9Cb25lLmpzXCI7XG5pbXBvcnQgdHlwZSB7IENvbnN0cmFpbnQgfSBmcm9tIFwiLi9Db25zdHJhaW50LmpzXCI7XG5pbXBvcnQgeyBEcmF3T3JkZXIgfSBmcm9tIFwiLi9EcmF3T3JkZXIuanNcIjtcbmltcG9ydCB0eXBlIHsgUGh5c2ljcyB9IGZyb20gXCIuL1BoeXNpY3MuanNcIjtcbmltcG9ydCB7IFBoeXNpY3NDb25zdHJhaW50IH0gZnJvbSBcIi4vUGh5c2ljc0NvbnN0cmFpbnQuanNcIjtcbmltcG9ydCB0eXBlIHsgUGh5c2ljc0NvbnN0cmFpbnRQb3NlIH0gZnJvbSBcIi4vUGh5c2ljc0NvbnN0cmFpbnRQb3NlLmpzXCI7XG5pbXBvcnQgdHlwZSB7IFBvc2VkIH0gZnJvbSBcIi4vUG9zZWQuanNcIjtcbmltcG9ydCB0eXBlIHsgU2tlbGV0b25DbGlwcGluZyB9IGZyb20gXCIuL1NrZWxldG9uQ2xpcHBpbmcuanNcIjtcbmltcG9ydCB0eXBlIHsgU2tlbGV0b25EYXRhIH0gZnJvbSBcIi4vU2tlbGV0b25EYXRhLmpzXCI7XG5pbXBvcnQgdHlwZSB7IFNraW4gfSBmcm9tIFwiLi9Ta2luLmpzXCI7XG5pbXBvcnQgeyBTbG90IH0gZnJvbSBcIi4vU2xvdC5qc1wiO1xuaW1wb3J0IHsgQ29sb3IsIHR5cGUgTnVtYmVyQXJyYXlMaWtlLCBVdGlscywgVmVjdG9yMiB9IGZyb20gXCIuL1V0aWxzLmpzXCI7XG5cbi8qKiBTdG9yZXMgYm9uZXMgYW5kIHNsb3RzIHRvIGJlIHBvc2VkIGJ5IGFuaW1hdGlvbnMgYW5kIGFwcGxpY2F0aW9uIGNvZGUuIE11bHRpcGxlIHNrZWxldG9uIGluc3RhbmNlcyBjYW4gc2hhcmUgdGhlIHNhbWVcbiAqIHtAbGluayBTa2VsZXRvbkRhdGF9LCBpbmNsdWRpbmcgYW5pbWF0aW9ucywgYXR0YWNobWVudHMsIGFuZCBza2lucy5cbiAqXG4gKiBBZnRlciBwb3NpbmcsIGNhbGwge0BsaW5rIHVwZGF0ZVdvcmxkVHJhbnNmb3JtfSB0byBhcHBseSBjb25zdHJhaW50cyBhbmQgY29tcHV0ZSB3b3JsZCB0cmFuc2Zvcm1zIGZvciByZW5kZXJpbmcuXG4gKlxuICogU2VlIFtJbnN0YW5jZSBvYmplY3RzXShodHRwOi8vZXNvdGVyaWNzb2Z0d2FyZS5jb20vc3BpbmUtcnVudGltZS1hcmNoaXRlY3R1cmUjSW5zdGFuY2Utb2JqZWN0cykgaW4gdGhlIFNwaW5lIFJ1bnRpbWVzIEd1aWRlLiAqL1xuZXhwb3J0IGNsYXNzIFNrZWxldG9uIHtcblx0cHJpdmF0ZSBzdGF0aWMgcXVhZFRyaWFuZ2xlcyA9IFswLCAxLCAyLCAyLCAzLCAwXTtcblx0c3RhdGljIHlEb3duID0gZmFsc2U7XG5cdHN0YXRpYyBnZXQgeURpciAoKTogbnVtYmVyIHtcblx0XHRyZXR1cm4gU2tlbGV0b24ueURvd24gPyAtMSA6IDE7XG5cdH1cblxuXHQvKiogVGhlIHNrZWxldG9uJ3Mgc2V0dXAgcG9zZSBkYXRhLiAqL1xuXHRyZWFkb25seSBkYXRhOiBTa2VsZXRvbkRhdGE7XG5cblx0LyoqIFRoZSBza2VsZXRvbidzIGJvbmVzLCBzb3J0ZWQgcGFyZW50IGZpcnN0LiBUaGUgcm9vdCBib25lIGlzIGFsd2F5cyB0aGUgZmlyc3QgYm9uZS4gKi9cblx0cmVhZG9ubHkgYm9uZXM6IEFycmF5PEJvbmU+O1xuXG5cdC8qKiBUaGUgc2tlbGV0b24ncyBzbG90cy4gVG8gYWRkIGEgc2xvdCwgYWxzbyBhZGQgaXQgdG8ge0BsaW5rIERyYXdPcmRlci5wb3NlfS4gKi9cblx0cmVhZG9ubHkgc2xvdHM6IEFycmF5PFNsb3Q+O1xuXG5cdC8qKiBUaGUgc2tlbGV0b24ncyBkcmF3IG9yZGVyLiBVc2Uge0BsaW5rIERyYXdPcmRlci5hcHBsaWVkUG9zZX0gZm9yIHJlbmRlcmluZyBhbmQge0BsaW5rIERyYXdPcmRlci5wb3NlfSBmb3IgY2hhbmdpbmcgdGhlIGRyYXdcblx0ICogb3JkZXIuICovXG5cdHJlYWRvbmx5IGRyYXdPcmRlcjogRHJhd09yZGVyO1xuXG5cdC8qKiBUaGUgc2tlbGV0b24ncyBjb25zdHJhaW50cy4gKi9cblx0Ly8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy9ub0V4cGxpY2l0QW55OiByZWZlcmVuY2UgcnVudGltZSBkb2VzIG5vdCByZXN0cmljdCB0byBzcGVjaWZpYyB0eXBlc1xuXHRyZWFkb25seSBjb25zdHJhaW50czogQXJyYXk8Q29uc3RyYWludDxhbnksIGFueSwgYW55Pj47XG5cblx0LyoqIFRoZSBza2VsZXRvbidzIHBoeXNpY3MgY29uc3RyYWludHMuICovXG5cdHJlYWRvbmx5IHBoeXNpY3M6IEFycmF5PFBoeXNpY3NDb25zdHJhaW50PjtcblxuXHQvKiogVGhlIGxpc3Qgb2YgYm9uZXMgYW5kIGNvbnN0cmFpbnRzLCBzb3J0ZWQgaW4gdGhlIG9yZGVyIHRoZXkgc2hvdWxkIGJlIHVwZGF0ZWQsIGFzIGNvbXB1dGVkIGJ5IHtAbGluayB1cGRhdGVDYWNoZX0uICovXG5cdC8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvbm9FeHBsaWNpdEFueTogcmVmZXJlbmNlIHJ1bnRpbWUgZG9lcyBub3QgcmVzdHJpY3QgdG8gc3BlY2lmaWMgdHlwZXNcblx0cmVhZG9ubHkgX3VwZGF0ZUNhY2hlID0gW10gYXMgYW55W107XG5cblx0Ly8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy9ub0V4cGxpY2l0QW55OiByZWZlcmVuY2UgcnVudGltZSBkb2VzIG5vdCByZXN0cmljdCB0byBzcGVjaWZpYyB0eXBlc1xuXHRyZWFkb25seSByZXNldENhY2hlOiBBcnJheTxQb3NlZDxhbnksIGFueT4+ID0gW107XG5cblx0LyoqIFRoZSBza2VsZXRvbidzIGN1cnJlbnQgc2tpbi4gTWF5IGJlIG51bGwuICovXG5cdHNraW46IFNraW4gfCBudWxsID0gbnVsbDtcblxuXHQvKiogVGhlIGNvbG9yIHRvIHRpbnQgYWxsIHRoZSBza2VsZXRvbidzIGF0dGFjaG1lbnRzLiAqL1xuXHRyZWFkb25seSBjb2xvcjogQ29sb3I7XG5cblx0LyoqIFNjYWxlcyB0aGUgZW50aXJlIHNrZWxldG9uIG9uIHRoZSBYIGF4aXMuXG5cdCAqXG5cdCAqIEJvbmVzIHRoYXQgZG8gbm90IGluaGVyaXQgc2NhbGUgYXJlIHN0aWxsIGFmZmVjdGVkIGJ5IHRoaXMgcHJvcGVydHkuICovXG5cdHNjYWxlWCA9IDE7XG5cblx0cHJpdmF0ZSBfc2NhbGVZID0gMTtcblxuXHQvKiogU2NhbGVzIHRoZSBlbnRpcmUgc2tlbGV0b24gb24gdGhlIFkgYXhpcy5cblx0ICpcblx0ICogQm9uZXMgdGhhdCBkbyBub3QgaW5oZXJpdCBzY2FsZSBhcmUgc3RpbGwgYWZmZWN0ZWQgYnkgdGhpcyBwcm9wZXJ0eS4gKi9cblx0cHVibGljIGdldCBzY2FsZVkgKCkge1xuXHRcdHJldHVybiB0aGlzLl9zY2FsZVkgKiBTa2VsZXRvbi55RGlyO1xuXHR9XG5cblx0cHVibGljIHNldCBzY2FsZVkgKHNjYWxlWTogbnVtYmVyKSB7XG5cdFx0dGhpcy5fc2NhbGVZID0gc2NhbGVZO1xuXHR9XG5cblx0LyoqIFNldHMgdGhlIHNrZWxldG9uIFggcG9zaXRpb24sIHdoaWNoIGlzIGFkZGVkIHRvIHRoZSByb290IGJvbmUgd29ybGRYIHBvc2l0aW9uLlxuXHQgKlxuXHQgKiBCb25lcyB0aGF0IGRvIG5vdCBpbmhlcml0IHRyYW5zbGF0aW9uIGFyZSBzdGlsbCBhZmZlY3RlZCBieSB0aGlzIHByb3BlcnR5LiAqL1xuXHR4ID0gMDtcblxuXHQvKiogU2V0cyB0aGUgc2tlbGV0b24gWSBwb3NpdGlvbiwgd2hpY2ggaXMgYWRkZWQgdG8gdGhlIHJvb3QgYm9uZSB3b3JsZFkgcG9zaXRpb24uXG5cdCAqXG5cdCAqIEJvbmVzIHRoYXQgZG8gbm90IGluaGVyaXQgdHJhbnNsYXRpb24gYXJlIHN0aWxsIGFmZmVjdGVkIGJ5IHRoaXMgcHJvcGVydHkuICovXG5cdHkgPSAwO1xuXG5cdC8qKiBSZXR1cm5zIHRoZSBza2VsZXRvbidzIHRpbWUsIGlzIHVzZWQgZm9yIHRpbWUtYmFzZWQgbWFuaXB1bGF0aW9ucywgc3VjaCBhcyB7QGxpbmsgUGh5c2ljc0NvbnN0cmFpbnR9LlxuXHQgKlxuXHQgKiBTZWUge0BsaW5rIF91cGRhdGV9LiAqL1xuXHR0aW1lID0gMDtcblxuXHQvKiogVGhlIHggY29tcG9uZW50IG9mIGEgdmVjdG9yIHRoYXQgZGVmaW5lcyB0aGUgZGlyZWN0aW9uIHtAbGluayBQaHlzaWNzQ29uc3RyYWludFBvc2Uud2luZH0gaXMgYXBwbGllZC4gKi9cblx0d2luZFggPSAxO1xuXG5cdC8qKiBUaGUgeSBjb21wb25lbnQgb2YgYSB2ZWN0b3IgdGhhdCBkZWZpbmVzIHRoZSBkaXJlY3Rpb24ge0BsaW5rIFBoeXNpY3NDb25zdHJhaW50UG9zZS53aW5kfSBpcyBhcHBsaWVkLiAqL1xuXHR3aW5kWSA9IDA7XG5cblx0LyoqIFRoZSB4IGNvbXBvbmVudCBvZiBhIHZlY3RvciB0aGF0IGRlZmluZXMgdGhlIGRpcmVjdGlvbiB7QGxpbmsgUGh5c2ljc0NvbnN0cmFpbnRQb3NlLmdyYXZpdHl9IGlzIGFwcGxpZWQuICovXG5cdGdyYXZpdHlYID0gMDtcblxuXHQvKiogVGhlIHkgY29tcG9uZW50IG9mIGEgdmVjdG9yIHRoYXQgZGVmaW5lcyB0aGUgZGlyZWN0aW9uIHtAbGluayBQaHlzaWNzQ29uc3RyYWludFBvc2UuZ3Jhdml0eX0gaXMgYXBwbGllZC4gKi9cblx0Z3Jhdml0eVkgPSAxO1xuXG5cdF91cGRhdGUgPSAwO1xuXG5cdGNvbnN0cnVjdG9yIChkYXRhOiBTa2VsZXRvbkRhdGEpIHtcblx0XHRpZiAoIWRhdGEpIHRocm93IG5ldyBFcnJvcihcImRhdGEgY2Fubm90IGJlIG51bGwuXCIpO1xuXHRcdHRoaXMuZGF0YSA9IGRhdGE7XG5cblx0XHR0aGlzLmJvbmVzID0gW10gYXMgQm9uZVtdO1xuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgZGF0YS5ib25lcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0Y29uc3QgYm9uZURhdGEgPSBkYXRhLmJvbmVzW2ldO1xuXHRcdFx0bGV0IGJvbmU6IEJvbmU7XG5cdFx0XHRpZiAoIWJvbmVEYXRhLnBhcmVudClcblx0XHRcdFx0Ym9uZSA9IG5ldyBCb25lKGJvbmVEYXRhLCBudWxsKTtcblx0XHRcdGVsc2Uge1xuXHRcdFx0XHRjb25zdCBwYXJlbnQgPSB0aGlzLmJvbmVzW2JvbmVEYXRhLnBhcmVudC5pbmRleF07XG5cdFx0XHRcdGJvbmUgPSBuZXcgQm9uZShib25lRGF0YSwgcGFyZW50KTtcblx0XHRcdFx0cGFyZW50LmNoaWxkcmVuLnB1c2goYm9uZSk7XG5cdFx0XHR9XG5cdFx0XHR0aGlzLmJvbmVzLnB1c2goYm9uZSk7XG5cdFx0fVxuXG5cdFx0dGhpcy5zbG90cyA9IFtdIGFzIFNsb3RbXTtcblx0XHRmb3IgKGNvbnN0IHNsb3REYXRhIG9mIHRoaXMuZGF0YS5zbG90cylcblx0XHRcdHRoaXMuc2xvdHMucHVzaChuZXcgU2xvdChzbG90RGF0YSwgdGhpcykpO1xuXHRcdHRoaXMuZHJhd09yZGVyID0gbmV3IERyYXdPcmRlcih0aGlzLnNsb3RzKTtcblxuXHRcdHRoaXMucGh5c2ljcyA9IFtdIGFzIFBoeXNpY3NDb25zdHJhaW50W107XG5cdFx0Ly8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy9ub0V4cGxpY2l0QW55OiByZWZlcmVuY2UgcnVudGltZSBkb2VzIG5vdCByZXN0cmljdCB0byBzcGVjaWZpYyB0eXBlc1xuXHRcdHRoaXMuY29uc3RyYWludHMgPSBbXSBhcyBDb25zdHJhaW50PGFueSwgYW55LCBhbnk+W107XG5cdFx0Zm9yIChjb25zdCBjb25zdHJhaW50RGF0YSBvZiB0aGlzLmRhdGEuY29uc3RyYWludHMpIHtcblx0XHRcdGNvbnN0IGNvbnN0cmFpbnQgPSBjb25zdHJhaW50RGF0YS5jcmVhdGUodGhpcyk7XG5cdFx0XHRpZiAoY29uc3RyYWludCBpbnN0YW5jZW9mIFBoeXNpY3NDb25zdHJhaW50KSB0aGlzLnBoeXNpY3MucHVzaChjb25zdHJhaW50KTtcblx0XHRcdHRoaXMuY29uc3RyYWludHMucHVzaChjb25zdHJhaW50KTtcblx0XHR9XG5cblx0XHR0aGlzLmNvbG9yID0gbmV3IENvbG9yKDEsIDEsIDEsIDEpO1xuXG5cdFx0dGhpcy51cGRhdGVDYWNoZSgpO1xuXHR9XG5cblx0LyoqIENhY2hlcyBpbmZvcm1hdGlvbiBhYm91dCBib25lcyBhbmQgY29uc3RyYWludHMuIE11c3QgYmUgY2FsbGVkIGlmIHRoZSB7QGxpbmsgc2tpbn0gaXMgbW9kaWZpZWQgb3IgaWYgYm9uZXMsIGNvbnN0cmFpbnRzLFxuXHQgKiBvciB3ZWlnaHRlZCBwYXRoIGF0dGFjaG1lbnRzIGFyZSBhZGRlZCBvciByZW1vdmVkLiAqL1xuXHR1cGRhdGVDYWNoZSAoKSB7XG5cdFx0dGhpcy5fdXBkYXRlQ2FjaGUubGVuZ3RoID0gMDtcblx0XHR0aGlzLnJlc2V0Q2FjaGUubGVuZ3RoID0gMDtcblxuXHRcdHRoaXMuZHJhd09yZGVyLnVuY29uc3RyYWluZWQoKTtcblx0XHRjb25zdCBzbG90cyA9IHRoaXMuc2xvdHM7XG5cdFx0Zm9yIChsZXQgaSA9IDAsIG4gPSBzbG90cy5sZW5ndGg7IGkgPCBuOyBpKyspXG5cdFx0XHRzbG90c1tpXS51bmNvbnN0cmFpbmVkKCk7XG5cblx0XHRjb25zdCBib25lcyA9IHRoaXMuYm9uZXM7XG5cdFx0Y29uc3QgYm9uZUNvdW50ID0gYm9uZXMubGVuZ3RoO1xuXHRcdGZvciAobGV0IGkgPSAwLCBuID0gYm9uZUNvdW50OyBpIDwgbjsgaSsrKSB7XG5cdFx0XHRjb25zdCBib25lID0gYm9uZXNbaV07XG5cdFx0XHRib25lLnNvcnRlZCA9IGJvbmUuZGF0YS5za2luUmVxdWlyZWQ7XG5cdFx0XHRib25lLmFjdGl2ZSA9ICFib25lLnNvcnRlZDtcblx0XHRcdGJvbmUudW5jb25zdHJhaW5lZCgpO1xuXHRcdH1cblx0XHRpZiAodGhpcy5za2luKSB7XG5cdFx0XHRjb25zdCBza2luQm9uZXMgPSB0aGlzLnNraW4uYm9uZXM7XG5cdFx0XHRmb3IgKGxldCBpID0gMCwgbiA9IHRoaXMuc2tpbi5ib25lcy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcblx0XHRcdFx0bGV0IGJvbmU6IEJvbmUgfCBudWxsID0gdGhpcy5ib25lc1tza2luQm9uZXNbaV0uaW5kZXhdO1xuXHRcdFx0XHRkbyB7XG5cdFx0XHRcdFx0Ym9uZS5zb3J0ZWQgPSBmYWxzZTtcblx0XHRcdFx0XHRib25lLmFjdGl2ZSA9IHRydWU7XG5cdFx0XHRcdFx0Ym9uZSA9IGJvbmUucGFyZW50O1xuXHRcdFx0XHR9IHdoaWxlIChib25lKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRjb25zdCBjb25zdHJhaW50cyA9IHRoaXMuY29uc3RyYWludHM7XG5cdFx0bGV0IG4gPSB0aGlzLmNvbnN0cmFpbnRzLmxlbmd0aDtcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IG47IGkrKylcblx0XHRcdGNvbnN0cmFpbnRzW2ldLnVuY29uc3RyYWluZWQoKTtcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IG47IGkrKykge1xuXHRcdFx0Y29uc3QgY29uc3RyYWludCA9IGNvbnN0cmFpbnRzW2ldO1xuXHRcdFx0Y29uc3RyYWludC5hY3RpdmUgPSBjb25zdHJhaW50LmlzU291cmNlQWN0aXZlKClcblx0XHRcdFx0Ly8gYmlvbWUtaWdub3JlIGxpbnQvY29tcGxleGl0eS91c2VPcHRpb25hbENoYWluOiBjaGFuZ2luZyB0byB0aGlzIG1pZ2h0IHJldHVybiB1bmRlZmluZWRcblx0XHRcdFx0JiYgKCFjb25zdHJhaW50LmRhdGEuc2tpblJlcXVpcmVkIHx8ICh0aGlzLnNraW4gIT0gbnVsbCAmJiB0aGlzLnNraW4uY29uc3RyYWludHMuaW5jbHVkZXMoY29uc3RyYWludC5kYXRhKSkpO1xuXHRcdFx0aWYgKGNvbnN0cmFpbnQuYWN0aXZlKSBjb25zdHJhaW50LnNvcnQodGhpcyk7XG5cdFx0fVxuXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBib25lQ291bnQ7IGkrKylcblx0XHRcdHRoaXMuc29ydEJvbmUoYm9uZXNbaV0pO1xuXG5cdFx0biA9IHRoaXMuX3VwZGF0ZUNhY2hlLmxlbmd0aDtcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IG47IGkrKykge1xuXHRcdFx0Y29uc3QgdXBkYXRlYWJsZSA9IHRoaXMuX3VwZGF0ZUNhY2hlW2ldO1xuXHRcdFx0aWYgKHVwZGF0ZWFibGUgaW5zdGFuY2VvZiBCb25lKSB0aGlzLl91cGRhdGVDYWNoZVtpXSA9IHVwZGF0ZWFibGUuYXBwbGllZFBvc2U7XG5cdFx0fVxuXG5cdH1cblxuXHQvLyBiaW9tZS1pZ25vcmUgbGludC9zdXNwaWNpb3VzL25vRXhwbGljaXRBbnk6IHJlZmVyZW5jZSBydW50aW1lIGRvZXMgbm90IHJlc3RyaWN0IHRvIHNwZWNpZmljIHR5cGVzXG5cdGNvbnN0cmFpbmVkIChvYmplY3Q6IFBvc2VkPGFueSwgYW55Pikge1xuXHRcdGlmIChvYmplY3QucG9zZSA9PT0gb2JqZWN0LmFwcGxpZWRQb3NlKSB7XG5cdFx0XHRvYmplY3QuY29uc3RyYWluZWQoKTtcblx0XHRcdHRoaXMucmVzZXRDYWNoZS5wdXNoKG9iamVjdCk7XG5cdFx0fVxuXHR9XG5cblx0c29ydEJvbmUgKGJvbmU6IEJvbmUpIHtcblx0XHRpZiAoYm9uZS5zb3J0ZWQgfHwgIWJvbmUuYWN0aXZlKSByZXR1cm47XG5cdFx0Y29uc3QgcGFyZW50ID0gYm9uZS5wYXJlbnQ7XG5cdFx0aWYgKHBhcmVudCkgdGhpcy5zb3J0Qm9uZShwYXJlbnQpO1xuXHRcdGJvbmUuc29ydGVkID0gdHJ1ZTtcblx0XHR0aGlzLl91cGRhdGVDYWNoZS5wdXNoKGJvbmUpO1xuXHR9XG5cblx0c29ydFJlc2V0IChib25lczogQXJyYXk8Qm9uZT4pIHtcblx0XHRmb3IgKGxldCBpID0gMCwgbiA9IGJvbmVzLmxlbmd0aDsgaSA8IG47IGkrKykge1xuXHRcdFx0Y29uc3QgYm9uZSA9IGJvbmVzW2ldO1xuXHRcdFx0aWYgKGJvbmUuYWN0aXZlKSB7XG5cdFx0XHRcdGlmIChib25lLnNvcnRlZCkgdGhpcy5zb3J0UmVzZXQoYm9uZS5jaGlsZHJlbik7XG5cdFx0XHRcdGJvbmUuc29ydGVkID0gZmFsc2U7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqIFVwZGF0ZXMgdGhlIHdvcmxkIHRyYW5zZm9ybSBmb3IgZWFjaCBib25lIGFuZCBhcHBsaWVzIGFsbCBjb25zdHJhaW50cy5cblx0ICpcblx0ICogU2VlIDxhIGhyZWY9XCJodHRwczovL2Vzb3Rlcmljc29mdHdhcmUuY29tL3NwaW5lLXJ1bnRpbWUtc2tlbGV0b25zI1dvcmxkLXRyYW5zZm9ybXNcIj5Xb3JsZCB0cmFuc2Zvcm1zPC9hPiBpbiB0aGUgU3BpbmVcblx0ICogUnVudGltZXMgR3VpZGUuICovXG5cdHVwZGF0ZVdvcmxkVHJhbnNmb3JtIChwaHlzaWNzOiBQaHlzaWNzKTogdm9pZCB7XG5cdFx0dGhpcy5fdXBkYXRlKys7XG5cblx0XHRpZiAodGhpcy5kcmF3T3JkZXIuYXBwbGllZFBvc2UgPT09IHRoaXMuZHJhd09yZGVyLmNvbnN0cmFpbmVkUG9zZSkgdGhpcy5kcmF3T3JkZXIucmVzZXRDb25zdHJhaW5lZCgpO1xuXHRcdGNvbnN0IHJlc2V0Q2FjaGUgPSB0aGlzLnJlc2V0Q2FjaGU7XG5cdFx0Zm9yIChsZXQgaSA9IDAsIG4gPSB0aGlzLnJlc2V0Q2FjaGUubGVuZ3RoOyBpIDwgbjsgaSsrKVxuXHRcdFx0cmVzZXRDYWNoZVtpXS5yZXNldENvbnN0cmFpbmVkKCk7XG5cblx0XHRjb25zdCB1cGRhdGVDYWNoZSA9IHRoaXMuX3VwZGF0ZUNhY2hlO1xuXHRcdGZvciAobGV0IGkgPSAwLCBuID0gdGhpcy5fdXBkYXRlQ2FjaGUubGVuZ3RoOyBpIDwgbjsgaSsrKVxuXHRcdFx0dXBkYXRlQ2FjaGVbaV0udXBkYXRlKHRoaXMsIHBoeXNpY3MpO1xuXHR9XG5cblx0LyoqIFNldHMgdGhlIGJvbmVzLCBjb25zdHJhaW50cywgYW5kIHNsb3RzIHRvIHRoZWlyIHNldHVwIHBvc2UgdmFsdWVzLiAqL1xuXHRzZXR1cFBvc2UgKCkge1xuXHRcdHRoaXMuc2V0dXBQb3NlQm9uZXMoKTtcblx0XHR0aGlzLnNldHVwUG9zZVNsb3RzKCk7XG5cdH1cblxuXHQvKiogU2V0cyB0aGUgYm9uZXMgYW5kIGNvbnN0cmFpbnRzIHRvIHRoZWlyIHNldHVwIHBvc2UgdmFsdWVzLiAqL1xuXHRzZXR1cFBvc2VCb25lcyAoKSB7XG5cdFx0Y29uc3QgYm9uZXMgPSB0aGlzLmJvbmVzO1xuXHRcdGZvciAobGV0IGkgPSAwLCBuID0gYm9uZXMubGVuZ3RoOyBpIDwgbjsgaSsrKVxuXHRcdFx0Ym9uZXNbaV0uc2V0dXBQb3NlKCk7XG5cblx0XHRjb25zdCBjb25zdHJhaW50cyA9IHRoaXMuY29uc3RyYWludHM7XG5cdFx0Zm9yIChsZXQgaSA9IDAsIG4gPSBjb25zdHJhaW50cy5sZW5ndGg7IGkgPCBuOyBpKyspXG5cdFx0XHRjb25zdHJhaW50c1tpXS5zZXR1cFBvc2UoKTtcblx0fVxuXG5cdC8qKiBTZXRzIHRoZSBzbG90cyBhbmQgZHJhdyBvcmRlciB0byB0aGVpciBzZXR1cCBwb3NlIHZhbHVlcy4gKi9cblx0c2V0dXBQb3NlU2xvdHMgKCkge1xuXHRcdHRoaXMuZHJhd09yZGVyLnNldHVwUG9zZSgpO1xuXHRcdGNvbnN0IHNsb3RzID0gdGhpcy5zbG90cztcblx0XHRmb3IgKGxldCBpID0gMCwgbiA9IHNsb3RzLmxlbmd0aDsgaSA8IG47IGkrKylcblx0XHRcdHNsb3RzW2ldLnNldHVwUG9zZSgpO1xuXHR9XG5cblx0LyoqIFJldHVybnMgdGhlIHJvb3QgYm9uZSwgb3IgbnVsbCBpZiB0aGUgc2tlbGV0b24gaGFzIG5vIGJvbmVzLiAqL1xuXHRnZXRSb290Qm9uZSAoKSB7XG5cdFx0aWYgKHRoaXMuYm9uZXMubGVuZ3RoID09PSAwKSByZXR1cm4gbnVsbDtcblx0XHRyZXR1cm4gdGhpcy5ib25lc1swXTtcblx0fVxuXG5cdC8qKiBGaW5kcyBhIGJvbmUgYnkgY29tcGFyaW5nIGVhY2ggYm9uZSdzIG5hbWUuIEl0IGlzIG1vcmUgZWZmaWNpZW50IHRvIGNhY2hlIHRoZSByZXN1bHRzIG9mIHRoaXMgbWV0aG9kIHRoYW4gdG8gY2FsbCBpdFxuXHQgKiByZXBlYXRlZGx5LiAqL1xuXHRmaW5kQm9uZSAoYm9uZU5hbWU6IHN0cmluZykge1xuXHRcdGlmICghYm9uZU5hbWUpIHRocm93IG5ldyBFcnJvcihcImJvbmVOYW1lIGNhbm5vdCBiZSBudWxsLlwiKTtcblx0XHRjb25zdCBib25lcyA9IHRoaXMuYm9uZXM7XG5cdFx0Zm9yIChsZXQgaSA9IDAsIG4gPSBib25lcy5sZW5ndGg7IGkgPCBuOyBpKyspXG5cdFx0XHRpZiAoYm9uZXNbaV0uZGF0YS5uYW1lID09PSBib25lTmFtZSkgcmV0dXJuIGJvbmVzW2ldO1xuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0LyoqIEZpbmRzIGEgc2xvdCBieSBjb21wYXJpbmcgZWFjaCBzbG90J3MgbmFtZS4gSXQgaXMgbW9yZSBlZmZpY2llbnQgdG8gY2FjaGUgdGhlIHJlc3VsdHMgb2YgdGhpcyBtZXRob2QgdGhhbiB0byBjYWxsIGl0XG5cdCAqIHJlcGVhdGVkbHkuICovXG5cdGZpbmRTbG90IChzbG90TmFtZTogc3RyaW5nKSB7XG5cdFx0aWYgKCFzbG90TmFtZSkgdGhyb3cgbmV3IEVycm9yKFwic2xvdE5hbWUgY2Fubm90IGJlIG51bGwuXCIpO1xuXHRcdGNvbnN0IHNsb3RzID0gdGhpcy5zbG90cztcblx0XHRmb3IgKGxldCBpID0gMCwgbiA9IHNsb3RzLmxlbmd0aDsgaSA8IG47IGkrKylcblx0XHRcdGlmIChzbG90c1tpXS5kYXRhLm5hbWUgPT09IHNsb3ROYW1lKSByZXR1cm4gc2xvdHNbaV07XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXHQvKiogU2V0cyBhIHNraW4gYnkgbmFtZS5cblx0ICpcblx0ICogU2VlIHtAbGluayBzZXRTa2lufS4gKi9cblx0c2V0U2tpbiAoc2tpbk5hbWU6IHN0cmluZyk6IHZvaWQ7XG5cblx0LyoqIFNldHMgdGhlIHNraW4gdXNlZCB0byBsb29rIHVwIGF0dGFjaG1lbnRzIGJlZm9yZSBsb29raW5nIGluIHtAbGluayBTa2VsZXRvbkRhdGEuZGVmYXVsdFNraW59LiBJZiB0aGUgc2tpbiBpcyBjaGFuZ2VkLFxuXHQgKiB7QGxpbmsgdXBkYXRlQ2FjaGV9IGlzIGNhbGxlZC5cblx0ICpcblx0ICogQXR0YWNobWVudHMgZnJvbSB0aGUgbmV3IHNraW4gYXJlIGF0dGFjaGVkIGlmIHRoZSBjb3JyZXNwb25kaW5nIGF0dGFjaG1lbnQgZnJvbSB0aGUgb2xkIHNraW4gd2FzIGF0dGFjaGVkLiBJZiB0aGVyZSB3YXMgbm9cblx0ICogb2xkIHNraW4sIGVhY2ggc2xvdCdzIHNldHVwIG1vZGUgYXR0YWNobWVudCBpcyBhdHRhY2hlZCBmcm9tIHRoZSBuZXcgc2tpbi5cblx0ICpcblx0ICogQWZ0ZXIgY2hhbmdpbmcgdGhlIHNraW4sIHRoZSB2aXNpYmxlIGF0dGFjaG1lbnRzIGNhbiBiZSByZXNldCB0byB0aG9zZSBhdHRhY2hlZCBpbiB0aGUgc2V0dXAgcG9zZSBieSBjYWxsaW5nXG5cdCAqIHtAbGluayBzZXR1cFBvc2VTbG90c30uIEFsc28sIG9mdGVuIHtAbGluayBBbmltYXRpb25TdGF0ZS5hcHBseX0gaXMgY2FsbGVkIGJlZm9yZSB0aGUgbmV4dCB0aW1lIHRoZSBza2VsZXRvbiBpc1xuXHQgKiByZW5kZXJlZCB0byBhbGxvdyBhbnkgYXR0YWNobWVudCBrZXlzIGluIHRoZSBjdXJyZW50IGFuaW1hdGlvbihzKSB0byBoaWRlIG9yIHNob3cgYXR0YWNobWVudHMgZnJvbSB0aGUgbmV3IHNraW4uICovXG5cdHNldFNraW4gKG5ld1NraW46IFNraW4gfCBudWxsKTogdm9pZDtcblxuXHRzZXRTa2luIChuZXdTa2luOiBTa2luIHwgbnVsbCB8IHN0cmluZyk6IHZvaWQge1xuXHRcdGlmICh0eXBlb2YgbmV3U2tpbiA9PT0gXCJzdHJpbmdcIilcblx0XHRcdHRoaXMuc2V0U2tpbkJ5TmFtZShuZXdTa2luKTtcblx0XHRlbHNlXG5cdFx0XHR0aGlzLnNldFNraW5CeVNraW4obmV3U2tpbik7XG5cdH07XG5cblx0cHJpdmF0ZSBzZXRTa2luQnlOYW1lIChza2luTmFtZTogc3RyaW5nKSB7XG5cdFx0Y29uc3Qgc2tpbiA9IHRoaXMuZGF0YS5maW5kU2tpbihza2luTmFtZSk7XG5cdFx0aWYgKCFza2luKSB0aHJvdyBuZXcgRXJyb3IoYFNraW4gbm90IGZvdW5kOiAke3NraW5OYW1lfWApO1xuXHRcdHRoaXMuc2V0U2tpbihza2luKTtcblx0fVxuXG5cdHByaXZhdGUgc2V0U2tpbkJ5U2tpbiAobmV3U2tpbjogU2tpbiB8IG51bGwpIHtcblx0XHRpZiAobmV3U2tpbiA9PT0gdGhpcy5za2luKSByZXR1cm47XG5cdFx0aWYgKG5ld1NraW4pIHtcblx0XHRcdGlmICh0aGlzLnNraW4pXG5cdFx0XHRcdG5ld1NraW4uYXR0YWNoQWxsKHRoaXMsIHRoaXMuc2tpbik7XG5cdFx0XHRlbHNlIHtcblx0XHRcdFx0Y29uc3Qgc2xvdHMgPSB0aGlzLnNsb3RzO1xuXHRcdFx0XHRmb3IgKGxldCBpID0gMCwgbiA9IHNsb3RzLmxlbmd0aDsgaSA8IG47IGkrKykge1xuXHRcdFx0XHRcdGNvbnN0IHNsb3QgPSBzbG90c1tpXTtcblx0XHRcdFx0XHRjb25zdCBuYW1lID0gc2xvdC5kYXRhLmF0dGFjaG1lbnROYW1lO1xuXHRcdFx0XHRcdGlmIChuYW1lKSB7XG5cdFx0XHRcdFx0XHRjb25zdCBhdHRhY2htZW50ID0gbmV3U2tpbi5nZXRBdHRhY2htZW50KGksIG5hbWUpO1xuXHRcdFx0XHRcdFx0aWYgKGF0dGFjaG1lbnQpIHNsb3QucG9zZS5zZXRBdHRhY2htZW50KGF0dGFjaG1lbnQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHR0aGlzLnNraW4gPSBuZXdTa2luO1xuXHRcdHRoaXMudXBkYXRlQ2FjaGUoKTtcblx0fVxuXG5cdC8qKiBGaW5kcyBhbiBhdHRhY2htZW50IGJ5IGxvb2tpbmcgaW4gdGhlIHtAbGluayBza2lufSBhbmQge0BsaW5rIFNrZWxldG9uRGF0YS5kZWZhdWx0U2tpbn0gdXNpbmcgdGhlIHNsb3QgbmFtZSBhbmQgYXR0YWNobWVudFxuXHQgKiBuYW1lLlxuXHQgKlxuXHQgKiBTZWUge0BsaW5rIGdldEF0dGFjaG1lbnR9LiAqL1xuXHRnZXRBdHRhY2htZW50IChzbG90TmFtZTogc3RyaW5nLCBwbGFjZWhvbGRlcjogc3RyaW5nKTogQXR0YWNobWVudCB8IG51bGw7XG5cblx0LyoqIEZpbmRzIGFuIGF0dGFjaG1lbnQgYnkgbG9va2luZyBpbiB0aGUge0BsaW5rIHNraW59IGFuZCB7QGxpbmsgU2tlbGV0b25EYXRhLmRlZmF1bHRTa2lufSB1c2luZyB0aGUgc2xvdCBpbmRleCBhbmRcblx0ICogYXR0YWNobWVudCBuYW1lLiBGaXJzdCB0aGUgc2tpbiBpcyBjaGVja2VkIGFuZCBpZiB0aGUgYXR0YWNobWVudCB3YXMgbm90IGZvdW5kLCB0aGUgZGVmYXVsdCBza2luIGlzIGNoZWNrZWQuXG5cdCAqXG5cdCAqIFNlZSA8YSBocmVmPVwiaHR0cHM6Ly9lc290ZXJpY3NvZnR3YXJlLmNvbS9zcGluZS1ydW50aW1lLXNraW5zXCI+UnVudGltZSBza2luczwvYT4gaW4gdGhlIFNwaW5lIFJ1bnRpbWVzIEd1aWRlLiAqL1xuXHRnZXRBdHRhY2htZW50IChzbG90SW5kZXg6IG51bWJlciwgcGxhY2Vob2xkZXI6IHN0cmluZyk6IEF0dGFjaG1lbnQgfCBudWxsO1xuXG5cdGdldEF0dGFjaG1lbnQgKHNsb3ROYW1lT3JJbmRleDogc3RyaW5nIHwgbnVtYmVyLCBwbGFjZWhvbGRlcjogc3RyaW5nKTogQXR0YWNobWVudCB8IG51bGwge1xuXHRcdGlmICh0eXBlb2Ygc2xvdE5hbWVPckluZGV4ID09PSAnc3RyaW5nJylcblx0XHRcdHJldHVybiB0aGlzLmdldEF0dGFjaG1lbnRCeU5hbWUoc2xvdE5hbWVPckluZGV4LCBwbGFjZWhvbGRlcik7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0QXR0YWNobWVudEJ5SW5kZXgoc2xvdE5hbWVPckluZGV4LCBwbGFjZWhvbGRlcik7XG5cdH1cblxuXHQvKiogRmluZHMgYW4gYXR0YWNobWVudCBieSBsb29raW5nIGluIHRoZSB7QGxpbmsgc2tpbn0gYW5kIHtAbGluayBTa2VsZXRvbkRhdGEuZGVmYXVsdFNraW59IHVzaW5nIHRoZSBzbG90IG5hbWUgYW5kIGF0dGFjaG1lbnRcblx0ICogbmFtZS5cblx0ICpcblx0ICogU2VlIHtAbGluayBnZXRBdHRhY2htZW50fS5cblx0ICogQHJldHVybnMgTWF5IGJlIG51bGwuICovXG5cdHByaXZhdGUgZ2V0QXR0YWNobWVudEJ5TmFtZSAoc2xvdE5hbWU6IHN0cmluZywgcGxhY2Vob2xkZXI6IHN0cmluZyk6IEF0dGFjaG1lbnQgfCBudWxsIHtcblx0XHRjb25zdCBzbG90ID0gdGhpcy5kYXRhLmZpbmRTbG90KHNsb3ROYW1lKTtcblx0XHRpZiAoIXNsb3QpIHRocm93IG5ldyBFcnJvcihgQ2FuJ3QgZmluZCBzbG90IHdpdGggbmFtZSAke3Nsb3ROYW1lfWApO1xuXHRcdHJldHVybiB0aGlzLmdldEF0dGFjaG1lbnQoc2xvdC5pbmRleCwgcGxhY2Vob2xkZXIpO1xuXHR9XG5cblx0LyoqIEZpbmRzIGFuIGF0dGFjaG1lbnQgYnkgbG9va2luZyBpbiB0aGUge0BsaW5rIHNraW59IGFuZCB7QGxpbmsgU2tlbGV0b25EYXRhLmRlZmF1bHRTa2lufSB1c2luZyB0aGUgc2xvdCBpbmRleCBhbmRcblx0ICogYXR0YWNobWVudCBuYW1lLiBGaXJzdCB0aGUgc2tpbiBpcyBjaGVja2VkIGFuZCBpZiB0aGUgYXR0YWNobWVudCB3YXMgbm90IGZvdW5kLCB0aGUgZGVmYXVsdCBza2luIGlzIGNoZWNrZWQuXG5cdCAqXG5cdCAqIFNlZSBbUnVudGltZSBza2luc10oaHR0cDovL2Vzb3Rlcmljc29mdHdhcmUuY29tL3NwaW5lLXJ1bnRpbWUtc2tpbnMpIGluIHRoZSBTcGluZSBSdW50aW1lcyBHdWlkZS5cblx0ICogQHJldHVybnMgTWF5IGJlIG51bGwuICovXG5cdHByaXZhdGUgZ2V0QXR0YWNobWVudEJ5SW5kZXggKHNsb3RJbmRleDogbnVtYmVyLCBwbGFjZWhvbGRlcjogc3RyaW5nKTogQXR0YWNobWVudCB8IG51bGwge1xuXHRcdGlmICghcGxhY2Vob2xkZXIpIHRocm93IG5ldyBFcnJvcihcInBsYWNlaG9sZGVyIGNhbm5vdCBiZSBudWxsLlwiKTtcblx0XHRpZiAodGhpcy5za2luKSB7XG5cdFx0XHRjb25zdCBhdHRhY2htZW50ID0gdGhpcy5za2luLmdldEF0dGFjaG1lbnQoc2xvdEluZGV4LCBwbGFjZWhvbGRlcik7XG5cdFx0XHRpZiAoYXR0YWNobWVudCkgcmV0dXJuIGF0dGFjaG1lbnQ7XG5cdFx0fVxuXHRcdGlmICh0aGlzLmRhdGEuZGVmYXVsdFNraW4pIHJldHVybiB0aGlzLmRhdGEuZGVmYXVsdFNraW4uZ2V0QXR0YWNobWVudChzbG90SW5kZXgsIHBsYWNlaG9sZGVyKTtcblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdC8qKiBBIGNvbnZlbmllbmNlIG1ldGhvZCB0byBzZXQgYW4gYXR0YWNobWVudCBieSBmaW5kaW5nIHRoZSBzbG90IHdpdGgge0BsaW5rIGZpbmRTbG90fSwgZmluZGluZyB0aGUgYXR0YWNobWVudCB3aXRoXG5cdCAqIHtAbGluayBnZXRBdHRhY2htZW50fSwgdGhlbiBzZXR0aW5nIHRoZSBzbG90J3Mge0BsaW5rIFNsb3QuYXR0YWNobWVudH0uXG5cdCAqIEBwYXJhbSBwbGFjZWhvbGRlciBNYXkgYmUgbnVsbCB0byBjbGVhciB0aGUgc2xvdCdzIGF0dGFjaG1lbnQuICovXG5cdHNldEF0dGFjaG1lbnQgKHNsb3ROYW1lOiBzdHJpbmcsIHBsYWNlaG9sZGVyOiBzdHJpbmcgfCBudWxsKSB7XG5cdFx0aWYgKCFzbG90TmFtZSkgdGhyb3cgbmV3IEVycm9yKFwic2xvdE5hbWUgY2Fubm90IGJlIG51bGwuXCIpO1xuXHRcdGNvbnN0IHNsb3QgPSB0aGlzLmZpbmRTbG90KHNsb3ROYW1lKTtcblx0XHRpZiAoIXNsb3QpIHRocm93IG5ldyBFcnJvcihgU2xvdCBub3QgZm91bmQ6ICR7c2xvdE5hbWV9YCk7XG5cdFx0bGV0IGF0dGFjaG1lbnQ6IEF0dGFjaG1lbnQgfCBudWxsID0gbnVsbDtcblx0XHRpZiAocGxhY2Vob2xkZXIpIHtcblx0XHRcdGF0dGFjaG1lbnQgPSB0aGlzLmdldEF0dGFjaG1lbnQoc2xvdC5kYXRhLmluZGV4LCBwbGFjZWhvbGRlcik7XG5cdFx0XHRpZiAoIWF0dGFjaG1lbnQpXG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihgQXR0YWNobWVudCBub3QgZm91bmQ6ICR7cGxhY2Vob2xkZXJ9LCBmb3Igc2xvdDogJHtzbG90TmFtZX1gKTtcblx0XHR9XG5cdFx0c2xvdC5wb3NlLnNldEF0dGFjaG1lbnQoYXR0YWNobWVudCk7XG5cdH1cblxuXHQvKiogRmluZHMgYSBjb25zdHJhaW50IG9mIHRoZSBzcGVjaWZpZWQgdHlwZSBieSBjb21wYXJpbmcgZWFjaCBjb25zdHJhaW50cydzIG5hbWUuIEl0IGlzIG1vcmUgZWZmaWNpZW50IHRvIGNhY2hlIHRoZSByZXN1bHRzIG9mXG5cdCAqIHRoaXMgbWV0aG9kIHRoYW4gdG8gY2FsbCBpdCBtdWx0aXBsZSB0aW1lcy4gKi9cblx0Ly8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy9ub0V4cGxpY2l0QW55OiByZWZlcmVuY2UgcnVudGltZSBkb2VzIG5vdCByZXN0cmljdCB0byBzcGVjaWZpYyB0eXBlc1xuXHRmaW5kQ29uc3RyYWludDxUIGV4dGVuZHMgQ29uc3RyYWludDxhbnksIGFueSwgYW55Pj4gKGNvbnN0cmFpbnROYW1lOiBzdHJpbmcsIHR5cGU6IG5ldyAoKSA9PiBUKTogVCB8IG51bGwge1xuXHRcdGlmIChjb25zdHJhaW50TmFtZSA9PSBudWxsKSB0aHJvdyBuZXcgRXJyb3IoXCJjb25zdHJhaW50TmFtZSBjYW5ub3QgYmUgbnVsbC5cIik7XG5cdFx0aWYgKHR5cGUgPT0gbnVsbCkgdGhyb3cgbmV3IEVycm9yKFwidHlwZSBjYW5ub3QgYmUgbnVsbC5cIik7XG5cdFx0Y29uc3QgY29uc3RyYWludHMgPSB0aGlzLmNvbnN0cmFpbnRzO1xuXHRcdGZvciAobGV0IGkgPSAwLCBuID0gY29uc3RyYWludHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XG5cdFx0XHRjb25zdCBjb25zdHJhaW50ID0gY29uc3RyYWludHNbaV07XG5cdFx0XHRpZiAoY29uc3RyYWludCBpbnN0YW5jZW9mIHR5cGUgJiYgY29uc3RyYWludC5kYXRhLm5hbWUgPT09IGNvbnN0cmFpbnROYW1lKSByZXR1cm4gY29uc3RyYWludCBhcyBUO1xuXHRcdH1cblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdC8qKiBSZXR1cm5zIHRoZSBheGlzIGFsaWduZWQgYm91bmRpbmcgYm94IChBQUJCKSBvZiB0aGUgcmVnaW9uIGFuZCBtZXNoIGF0dGFjaG1lbnRzIGZvciB0aGUgYXBwbGllZCBwb3NlLlxuXHQgKiBAcGFyYW0gb2Zmc2V0IEFuIG91dHB1dCB2YWx1ZSwgdGhlIGRpc3RhbmNlIGZyb20gdGhlIHNrZWxldG9uIG9yaWdpbiB0byB0aGUgYm90dG9tIGxlZnQgY29ybmVyIG9mIHRoZSBBQUJCLlxuXHQgKiBAcGFyYW0gc2l6ZSBBbiBvdXRwdXQgdmFsdWUsIHRoZSB3aWR0aCBhbmQgaGVpZ2h0IG9mIHRoZSBBQUJCLlxuXHQgKiBAcGFyYW0gdGVtcCBXb3JraW5nIG1lbW9yeSB0byB0ZW1wb3JhcmlseSBzdG9yZSBhdHRhY2htZW50cycgY29tcHV0ZWQgd29ybGQgdmVydGljZXMuICovXG5cdGdldEJvdW5kc1JlY3QgKGNsaXBwZXI/OiBTa2VsZXRvbkNsaXBwaW5nKSB7XG5cdFx0Y29uc3Qgb2Zmc2V0ID0gbmV3IFZlY3RvcjIoKTtcblx0XHRjb25zdCBzaXplID0gbmV3IFZlY3RvcjIoKTtcblx0XHR0aGlzLmdldEJvdW5kcyhvZmZzZXQsIHNpemUsIHVuZGVmaW5lZCwgY2xpcHBlcik7XG5cdFx0cmV0dXJuIHsgeDogb2Zmc2V0LngsIHk6IG9mZnNldC55LCB3aWR0aDogc2l6ZS54LCBoZWlnaHQ6IHNpemUueSB9O1xuXHR9XG5cblx0LyoqIFJldHVybnMgdGhlIGF4aXMgYWxpZ25lZCBib3VuZGluZyBib3ggKEFBQkIpIG9mIHRoZSByZWdpb24gYW5kIG1lc2ggYXR0YWNobWVudHMgZm9yIHRoZSBhcHBsaWVkIHBvc2UuIE9wdGlvbmFsbHkgYXBwbGllc1xuXHQgKiBjbGlwcGluZy5cblx0ICogQHBhcmFtIG9mZnNldCBBbiBvdXRwdXQgdmFsdWUsIHRoZSBkaXN0YW5jZSBmcm9tIHRoZSBza2VsZXRvbiBvcmlnaW4gdG8gdGhlIGJvdHRvbSBsZWZ0IGNvcm5lciBvZiB0aGUgQUFCQi5cblx0ICogQHBhcmFtIHNpemUgQW4gb3V0cHV0IHZhbHVlLCB0aGUgd2lkdGggYW5kIGhlaWdodCBvZiB0aGUgQUFCQi5cblx0ICogQHBhcmFtIHRlbXAgV29ya2luZyBtZW1vcnkgdG8gdGVtcG9yYXJpbHkgc3RvcmUgYXR0YWNobWVudHMnIGNvbXB1dGVkIHdvcmxkIHZlcnRpY2VzLlxuXHQgKiBAcGFyYW0gY2xpcHBlciB7QGxpbmsgU2tlbGV0b25DbGlwcGluZ30gdG8gdXNlLiBJZiBgbnVsbGAsIG5vIGNsaXBwaW5nIGlzIGFwcGxpZWQuICovXG5cdGdldEJvdW5kcyAob2Zmc2V0OiBWZWN0b3IyLCBzaXplOiBWZWN0b3IyLCB0ZW1wOiBBcnJheTxudW1iZXI+ID0gbmV3IEFycmF5PG51bWJlcj4oMiksIGNsaXBwZXI6IFNrZWxldG9uQ2xpcHBpbmcgfCBudWxsID0gbnVsbCkge1xuXHRcdGlmICghb2Zmc2V0KSB0aHJvdyBuZXcgRXJyb3IoXCJvZmZzZXQgY2Fubm90IGJlIG51bGwuXCIpO1xuXHRcdGlmICghc2l6ZSkgdGhyb3cgbmV3IEVycm9yKFwic2l6ZSBjYW5ub3QgYmUgbnVsbC5cIik7XG5cdFx0Y29uc3QgZHJhd09yZGVyID0gdGhpcy5kcmF3T3JkZXIuYXBwbGllZFBvc2U7XG5cdFx0Y29uc3Qgc2xvdHMgPSBkcmF3T3JkZXI7XG5cdFx0bGV0IG1pblggPSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksIG1pblkgPSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksIG1heFggPSBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFksIG1heFkgPSBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFk7XG5cdFx0Zm9yIChsZXQgaSA9IDAsIG4gPSBkcmF3T3JkZXIubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XG5cdFx0XHRjb25zdCBzbG90ID0gc2xvdHNbaV07XG5cdFx0XHRpZiAoIXNsb3QuYm9uZS5hY3RpdmUpIGNvbnRpbnVlO1xuXHRcdFx0bGV0IHZlcnRpY2VzTGVuZ3RoID0gMDtcblx0XHRcdGxldCB2ZXJ0aWNlczogTnVtYmVyQXJyYXlMaWtlIHwgbnVsbCA9IG51bGw7XG5cdFx0XHRsZXQgdHJpYW5nbGVzOiBOdW1iZXJBcnJheUxpa2UgfCBudWxsID0gbnVsbDtcblx0XHRcdGNvbnN0IGF0dGFjaG1lbnQgPSBzbG90LmFwcGxpZWRQb3NlLmF0dGFjaG1lbnQ7XG5cdFx0XHRpZiAoYXR0YWNobWVudCkge1xuXHRcdFx0XHRpZiAoYXR0YWNobWVudCBpbnN0YW5jZW9mIFJlZ2lvbkF0dGFjaG1lbnQpIHtcblx0XHRcdFx0XHR2ZXJ0aWNlc0xlbmd0aCA9IDg7XG5cdFx0XHRcdFx0dmVydGljZXMgPSBVdGlscy5zZXRBcnJheVNpemUodGVtcCwgdmVydGljZXNMZW5ndGgsIDApO1xuXHRcdFx0XHRcdGF0dGFjaG1lbnQuY29tcHV0ZVdvcmxkVmVydGljZXMoc2xvdCwgYXR0YWNobWVudC5nZXRPZmZzZXRzKHNsb3QuYXBwbGllZFBvc2UpLCB2ZXJ0aWNlcywgMCwgMik7XG5cdFx0XHRcdFx0dHJpYW5nbGVzID0gU2tlbGV0b24ucXVhZFRyaWFuZ2xlcztcblx0XHRcdFx0fSBlbHNlIGlmIChhdHRhY2htZW50IGluc3RhbmNlb2YgTWVzaEF0dGFjaG1lbnQpIHtcblx0XHRcdFx0XHR2ZXJ0aWNlc0xlbmd0aCA9IGF0dGFjaG1lbnQud29ybGRWZXJ0aWNlc0xlbmd0aDtcblx0XHRcdFx0XHR2ZXJ0aWNlcyA9IFV0aWxzLnNldEFycmF5U2l6ZSh0ZW1wLCB2ZXJ0aWNlc0xlbmd0aCwgMCk7XG5cdFx0XHRcdFx0YXR0YWNobWVudC5jb21wdXRlV29ybGRWZXJ0aWNlcyh0aGlzLCBzbG90LCAwLCB2ZXJ0aWNlc0xlbmd0aCwgdmVydGljZXMsIDAsIDIpO1xuXHRcdFx0XHRcdHRyaWFuZ2xlcyA9IGF0dGFjaG1lbnQudHJpYW5nbGVzO1xuXHRcdFx0XHR9IGVsc2UgaWYgKGF0dGFjaG1lbnQgaW5zdGFuY2VvZiBDbGlwcGluZ0F0dGFjaG1lbnQgJiYgY2xpcHBlcikge1xuXHRcdFx0XHRcdGNsaXBwZXIuY2xpcEVuZChzbG90KTtcblx0XHRcdFx0XHRjbGlwcGVyLmNsaXBTdGFydCh0aGlzLCBzbG90LCBhdHRhY2htZW50KTtcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAodmVydGljZXMgJiYgdHJpYW5nbGVzKSB7XG5cdFx0XHRcdFx0aWYgKGNsaXBwZXI/LmlzQ2xpcHBpbmcoKSAmJiBjbGlwcGVyLmNsaXBUcmlhbmdsZXModmVydGljZXMsIHRyaWFuZ2xlcywgdHJpYW5nbGVzLmxlbmd0aCkpIHtcblx0XHRcdFx0XHRcdHZlcnRpY2VzID0gY2xpcHBlci5jbGlwcGVkVmVydGljZXM7XG5cdFx0XHRcdFx0XHR2ZXJ0aWNlc0xlbmd0aCA9IGNsaXBwZXIuY2xpcHBlZFZlcnRpY2VzLmxlbmd0aDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Zm9yIChsZXQgaWkgPSAwLCBubiA9IHZlcnRpY2VzLmxlbmd0aDsgaWkgPCBubjsgaWkgKz0gMikge1xuXHRcdFx0XHRcdFx0Y29uc3QgeCA9IHZlcnRpY2VzW2lpXSwgeSA9IHZlcnRpY2VzW2lpICsgMV07XG5cdFx0XHRcdFx0XHRtaW5YID0gTWF0aC5taW4obWluWCwgeCk7XG5cdFx0XHRcdFx0XHRtaW5ZID0gTWF0aC5taW4obWluWSwgeSk7XG5cdFx0XHRcdFx0XHRtYXhYID0gTWF0aC5tYXgobWF4WCwgeCk7XG5cdFx0XHRcdFx0XHRtYXhZID0gTWF0aC5tYXgobWF4WSwgeSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRpZiAoY2xpcHBlcikgY2xpcHBlci5jbGlwRW5kKHNsb3QpO1xuXHRcdH1cblx0XHRpZiAoY2xpcHBlcikgY2xpcHBlci5jbGlwRW5kKCk7XG5cdFx0b2Zmc2V0LnNldChtaW5YLCBtaW5ZKTtcblx0XHRzaXplLnNldChtYXhYIC0gbWluWCwgbWF4WSAtIG1pblkpO1xuXHR9XG5cblx0LyoqIFNjYWxlcyB0aGUgZW50aXJlIHNrZWxldG9uIG9uIHRoZSBYIGFuZCBZIGF4ZXMuXG5cdCAqXG5cdCAqIEJvbmVzIHRoYXQgZG8gbm90IGluaGVyaXQgc2NhbGUgYXJlIHN0aWxsIGFmZmVjdGVkIGJ5IHRoaXMgcHJvcGVydHkuICovXG5cdHB1YmxpYyBzZXRTY2FsZSAoc2NhbGVYOiBudW1iZXIsIHNjYWxlWTogbnVtYmVyKSB7XG5cdFx0dGhpcy5zY2FsZVggPSBzY2FsZVg7XG5cdFx0dGhpcy5zY2FsZVkgPSBzY2FsZVk7XG5cdH1cblxuXHQvKiogU2V0cyB0aGUgc2tlbGV0b24gWCBhbmQgWSBwb3NpdGlvbiwgd2hpY2ggaXMgYWRkZWQgdG8gdGhlIHJvb3QgYm9uZSB3b3JsZFggYW5kIHdvcmxkWSBwb3NpdGlvbi5cblx0ICpcblx0ICogQm9uZXMgdGhhdCBkbyBub3QgaW5oZXJpdCB0cmFuc2xhdGlvbiBhcmUgc3RpbGwgYWZmZWN0ZWQgYnkgdGhpcyBwcm9wZXJ0eS4gKi9cblx0cHVibGljIHNldFBvc2l0aW9uICh4OiBudW1iZXIsIHk6IG51bWJlcikge1xuXHRcdHRoaXMueCA9IHg7XG5cdFx0dGhpcy55ID0geTtcblx0fVxuXG5cdC8qKiBJbmNyZW1lbnRzIHRoZSBza2VsZXRvbidzIHtAbGluayB0aW1lfS4gKi9cblx0dXBkYXRlIChkZWx0YTogbnVtYmVyKSB7XG5cdFx0dGhpcy50aW1lICs9IGRlbHRhO1xuXHR9XG5cblx0LyoqIENhbGxzIHtAbGluayBQaHlzaWNzQ29uc3RyYWludC50cmFuc2xhdGV9IGZvciBlYWNoIHBoeXNpY3MgY29uc3RyYWludC4gKi9cblx0cGh5c2ljc1RyYW5zbGF0ZSAoeDogbnVtYmVyLCB5OiBudW1iZXIpIHtcblx0XHRjb25zdCBjb25zdHJhaW50cyA9IHRoaXMucGh5c2ljcztcblx0XHRmb3IgKGxldCBpID0gMCwgbiA9IGNvbnN0cmFpbnRzLmxlbmd0aDsgaSA8IG47IGkrKylcblx0XHRcdGNvbnN0cmFpbnRzW2ldLnRyYW5zbGF0ZSh4LCB5KTtcblx0fVxuXG5cdC8qKiBDYWxscyB7QGxpbmsgUGh5c2ljc0NvbnN0cmFpbnQucm90YXRlfSBmb3IgZWFjaCBwaHlzaWNzIGNvbnN0cmFpbnQuICovXG5cdHBoeXNpY3NSb3RhdGUgKHg6IG51bWJlciwgeTogbnVtYmVyLCBkZWdyZWVzOiBudW1iZXIpIHtcblx0XHRjb25zdCBjb25zdHJhaW50cyA9IHRoaXMucGh5c2ljcztcblx0XHRmb3IgKGxldCBpID0gMCwgbiA9IGNvbnN0cmFpbnRzLmxlbmd0aDsgaSA8IG47IGkrKylcblx0XHRcdGNvbnN0cmFpbnRzW2ldLnJvdGF0ZSh4LCB5LCBkZWdyZWVzKTtcblx0fVxufVxuIl19
483
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2tlbGV0b24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvU2tlbGV0b24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsrRUEyQitFO0FBSS9FLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNqRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNyRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBRWpDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUUzQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQU0zRCxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ2pDLE9BQU8sRUFBRSxLQUFLLEVBQXdCLEtBQUssRUFBRSxPQUFPLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFFekU7Ozs7O2tJQUtrSTtBQUNsSSxNQUFNLE9BQU8sUUFBUTtJQUNaLE1BQU0sQ0FBQyxhQUFhLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2xELE1BQU0sQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0lBQ3JCLE1BQU0sS0FBSyxJQUFJO1FBQ2QsT0FBTyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFRCxzQ0FBc0M7SUFDN0IsSUFBSSxDQUFlO0lBRTVCLHlGQUF5RjtJQUNoRixLQUFLLENBQWM7SUFFNUIsa0ZBQWtGO0lBQ3pFLEtBQUssQ0FBYztJQUU1QjtnQkFDWTtJQUNILFNBQVMsQ0FBWTtJ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RyxDQUFDLENBQUM7UUFDWCxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNaLENBQUM7SUFFRCw4Q0FBOEM7SUFDOUMsTUFBTSxDQUFFLEtBQWE7UUFDcEIsSUFBSSxDQUFDLElBQUksSUFBSSxLQUFLLENBQUM7SUFDcEIsQ0FBQztJQUVELDZFQUE2RTtJQUM3RSxnQkFBZ0IsQ0FBRSxDQUFTLEVBQUUsQ0FBUztRQUNyQyxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO1FBQ2pDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxXQUFXLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFO1lBQ2pELFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFFRCwwRUFBMEU7SUFDMUUsYUFBYSxDQUFFLENBQVMsRUFBRSxDQUFTLEVBQUUsT0FBZTtRQUNuRCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO1FBQ2pDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxXQUFXLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFO1lBQ2pELFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUN2QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogU3BpbmUgUnVudGltZXMgTGljZW5zZSBBZ3JlZW1lbnRcbiAqIExhc3QgdXBkYXRlZCBBcHJpbCA1LCAyMDI1LiBSZXBsYWNlcyBhbGwgcHJpb3IgdmVyc2lvbnMuXG4gKlxuICogQ29weXJpZ2h0IChjKSAyMDEzLTIwMjUsIEVzb3RlcmljIFNvZnR3YXJlIExMQ1xuICpcbiAqIEludGVncmF0aW9uIG9mIHRoZSBTcGluZSBSdW50aW1lcyBpbnRvIHNvZnR3YXJlIG9yIG90aGVyd2lzZSBjcmVhdGluZ1xuICogZGVyaXZhdGl2ZSB3b3JrcyBvZiB0aGUgU3BpbmUgUnVudGltZXMgaXMgcGVybWl0dGVkIHVuZGVyIHRoZSB0ZXJtcyBhbmRcbiAqIGNvbmRpdGlvbnMgb2YgU2VjdGlvbiAyIG9mIHRoZSBTcGluZSBFZGl0b3IgTGljZW5zZSBBZ3JlZW1lbnQ6XG4gKiBodHRwOi8vZXNvdGVyaWNzb2Z0d2FyZS5jb20vc3BpbmUtZWRpdG9yLWxpY2Vuc2VcbiAqXG4gKiBPdGhlcndpc2UsIGl0IGlzIHBlcm1pdHRlZCB0byBpbnRlZ3JhdGUgdGhlIFNwaW5lIFJ1bnRpbWVzIGludG8gc29mdHdhcmVcbiAqIG9yIG90aGVyd2lzZSBjcmVhdGUgZGVyaXZhdGl2ZSB3b3JrcyBvZiB0aGUgU3BpbmUgUnVudGltZXMgKGNvbGxlY3RpdmVseSxcbiAqIFwiUHJvZHVjdHNcIiksIHByb3ZpZGVkIHRoYXQgZWFjaCB1c2VyIG9mIHRoZSBQcm9kdWN0cyBtdXN0IG9idGFpbiB0aGVpciBvd25cbiAqIFNwaW5lIEVkaXRvciBsaWNlbnNlIGFuZCByZWRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZHVjdHMgaW4gYW55IGZvcm0gbXVzdFxuICogaW5jbHVkZSB0aGlzIGxpY2Vuc2UgYW5kIGNvcHlyaWdodCBub3RpY2UuXG4gKlxuICogVEhFIFNQSU5FIFJVTlRJTUVTIEFSRSBQUk9WSURFRCBCWSBFU09URVJJQyBTT0ZUV0FSRSBMTEMgXCJBUyBJU1wiIEFORCBBTllcbiAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRURcbiAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkVcbiAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEVTT1RFUklDIFNPRlRXQVJFIExMQyBCRSBMSUFCTEUgRk9SIEFOWVxuICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVNcbiAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUyxcbiAqIEJVU0lORVNTIElOVEVSUlVQVElPTiwgT1IgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFMpIEhPV0VWRVIgQ0FVU0VEIEFORFxuICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcbiAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRlxuICogVEhFIFNQSU5FIFJVTlRJTUVTLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG5pbXBvcnQgdHlwZSB7IEFuaW1hdGlvblN0YXRlIH0gZnJvbSBcIi4vQW5pbWF0aW9uU3RhdGUuanNcIjtcbmltcG9ydCB0eXBlIHsgQXR0YWNobWVudCB9IGZyb20gXCIuL2F0dGFjaG1lbnRzL0F0dGFjaG1lbnQuanNcIjtcbmltcG9ydCB7IENsaXBwaW5nQXR0YWNobWVudCB9IGZyb20gXCIuL2F0dGFjaG1lbnRzL0NsaXBwaW5nQXR0YWNobWVudC5qc1wiO1xuaW1wb3J0IHsgTWVzaEF0dGFjaG1lbnQgfSBmcm9tIFwiLi9hdHRhY2htZW50cy9NZXNoQXR0YWNobWVudC5qc1wiO1xuaW1wb3J0IHsgUmVnaW9uQXR0YWNobWVudCB9IGZyb20gXCIuL2F0dGFjaG1lbnRzL1JlZ2lvbkF0dGFjaG1lbnQuanNcIjtcbmltcG9ydCB7IEJvbmUgfSBmcm9tIFwiLi9Cb25lLmpzXCI7XG5pbXBvcnQgdHlwZSB7IENvbnN0cmFpbnQgfSBmcm9tIFwiLi9Db25zdHJhaW50LmpzXCI7XG5pbXBvcnQgeyBEcmF3T3JkZXIgfSBmcm9tIFwiLi9EcmF3T3JkZXIuanNcIjtcbmltcG9ydCB0eXBlIHsgUGh5c2ljcyB9IGZyb20gXCIuL1BoeXNpY3MuanNcIjtcbmltcG9ydCB7IFBoeXNpY3NDb25zdHJhaW50IH0gZnJvbSBcIi4vUGh5c2ljc0NvbnN0cmFpbnQuanNcIjtcbmltcG9ydCB0eXBlIHsgUGh5c2ljc0NvbnN0cmFpbnRQb3NlIH0gZnJvbSBcIi4vUGh5c2ljc0NvbnN0cmFpbnRQb3NlLmpzXCI7XG5pbXBvcnQgdHlwZSB7IFBvc2VkIH0gZnJvbSBcIi4vUG9zZWQuanNcIjtcbmltcG9ydCB0eXBlIHsgU2tlbGV0b25DbGlwcGluZyB9IGZyb20gXCIuL1NrZWxldG9uQ2xpcHBpbmcuanNcIjtcbmltcG9ydCB0eXBlIHsgU2tlbGV0b25EYXRhIH0gZnJvbSBcIi4vU2tlbGV0b25EYXRhLmpzXCI7XG5pbXBvcnQgdHlwZSB7IFNraW4gfSBmcm9tIFwiLi9Ta2luLmpzXCI7XG5pbXBvcnQgeyBTbG90IH0gZnJvbSBcIi4vU2xvdC5qc1wiO1xuaW1wb3J0IHsgQ29sb3IsIHR5cGUgTnVtYmVyQXJyYXlMaWtlLCBVdGlscywgVmVjdG9yMiB9IGZyb20gXCIuL1V0aWxzLmpzXCI7XG5cbi8qKiBTdG9yZXMgYm9uZXMgYW5kIHNsb3RzIHRvIGJlIHBvc2VkIGJ5IGFuaW1hdGlvbnMgYW5kIGFwcGxpY2F0aW9uIGNvZGUuIE11bHRpcGxlIHNrZWxldG9uIGluc3RhbmNlcyBjYW4gc2hhcmUgdGhlIHNhbWVcbiAqIHtAbGluayBTa2VsZXRvbkRhdGF9LCBpbmNsdWRpbmcgYW5pbWF0aW9ucywgYXR0YWNobWVudHMsIGFuZCBza2lucy5cbiAqXG4gKiBBZnRlciBwb3NpbmcsIGNhbGwge0BsaW5rIHVwZGF0ZVdvcmxkVHJhbnNmb3JtfSB0byBhcHBseSBjb25zdHJhaW50cyBhbmQgY29tcHV0ZSB3b3JsZCB0cmFuc2Zvcm1zIGZvciByZW5kZXJpbmcuXG4gKlxuICogU2VlIFtJbnN0YW5jZSBvYmplY3RzXShodHRwOi8vZXNvdGVyaWNzb2Z0d2FyZS5jb20vc3BpbmUtcnVudGltZS1hcmNoaXRlY3R1cmUjSW5zdGFuY2Utb2JqZWN0cykgaW4gdGhlIFNwaW5lIFJ1bnRpbWVzIEd1aWRlLiAqL1xuZXhwb3J0IGNsYXNzIFNrZWxldG9uIHtcblx0cHJpdmF0ZSBzdGF0aWMgcXVhZFRyaWFuZ2xlcyA9IFswLCAxLCAyLCAyLCAzLCAwXTtcblx0c3RhdGljIHlEb3duID0gZmFsc2U7XG5cdHN0YXRpYyBnZXQgeURpciAoKTogbnVtYmVyIHtcblx0XHRyZXR1cm4gU2tlbGV0b24ueURvd24gPyAtMSA6IDE7XG5cdH1cblxuXHQvKiogVGhlIHNrZWxldG9uJ3Mgc2V0dXAgcG9zZSBkYXRhLiAqL1xuXHRyZWFkb25seSBkYXRhOiBTa2VsZXRvbkRhdGE7XG5cblx0LyoqIFRoZSBza2VsZXRvbidzIGJvbmVzLCBzb3J0ZWQgcGFyZW50IGZpcnN0LiBUaGUgcm9vdCBib25lIGlzIGFsd2F5cyB0aGUgZmlyc3QgYm9uZS4gKi9cblx0cmVhZG9ubHkgYm9uZXM6IEFycmF5PEJvbmU+O1xuXG5cdC8qKiBUaGUgc2tlbGV0b24ncyBzbG90cy4gVG8gYWRkIGEgc2xvdCwgYWxzbyBhZGQgaXQgdG8ge0BsaW5rIERyYXdPcmRlci5wb3NlfS4gKi9cblx0cmVhZG9ubHkgc2xvdHM6IEFycmF5PFNsb3Q+O1xuXG5cdC8qKiBUaGUgc2tlbGV0b24ncyBkcmF3IG9yZGVyLiBVc2Uge0BsaW5rIERyYXdPcmRlci5hcHBsaWVkUG9zZX0gZm9yIHJlbmRlcmluZyBhbmQge0BsaW5rIERyYXdPcmRlci5wb3NlfSBmb3IgY2hhbmdpbmcgdGhlIGRyYXdcblx0ICogb3JkZXIuICovXG5cdHJlYWRvbmx5IGRyYXdPcmRlcjogRHJhd09yZGVyO1xuXG5cdC8qKiBUaGUgc2tlbGV0b24ncyBjb25zdHJhaW50cy4gKi9cblx0Ly8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy9ub0V4cGxpY2l0QW55OiByZWZlcmVuY2UgcnVudGltZSBkb2VzIG5vdCByZXN0cmljdCB0byBzcGVjaWZpYyB0eXBlc1xuXHRyZWFkb25seSBjb25zdHJhaW50czogQXJyYXk8Q29uc3RyYWludDxhbnksIGFueSwgYW55Pj47XG5cblx0LyoqIFRoZSBza2VsZXRvbidzIHBoeXNpY3MgY29uc3RyYWludHMuICovXG5cdHJlYWRvbmx5IHBoeXNpY3M6IEFycmF5PFBoeXNpY3NDb25zdHJhaW50PjtcblxuXHQvKiogVGhlIGxpc3Qgb2YgYm9uZXMgYW5kIGNvbnN0cmFpbnRzLCBzb3J0ZWQgaW4gdGhlIG9yZGVyIHRoZXkgc2hvdWxkIGJlIHVwZGF0ZWQsIGFzIGNvbXB1dGVkIGJ5IHtAbGluayB1cGRhdGVDYWNoZX0uICovXG5cdC8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvbm9FeHBsaWNpdEFueTogcmVmZXJlbmNlIHJ1bnRpbWUgZG9lcyBub3QgcmVzdHJpY3QgdG8gc3BlY2lmaWMgdHlwZXNcblx0cmVhZG9ubHkgX3VwZGF0ZUNhY2hlID0gW10gYXMgYW55W107XG5cblx0Ly8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy9ub0V4cGxpY2l0QW55OiByZWZlcmVuY2UgcnVudGltZSBkb2VzIG5vdCByZXN0cmljdCB0byBzcGVjaWZpYyB0eXBlc1xuXHRyZWFkb25seSByZXNldENhY2hlOiBBcnJheTxQb3NlZDxhbnksIGFueT4+ID0gW107XG5cblx0LyoqIFRoZSBza2VsZXRvbidzIGN1cnJlbnQgc2tpbi4gTWF5IGJlIG51bGwuICovXG5cdHNraW46IFNraW4gfCBudWxsID0gbnVsbDtcblxuXHQvKiogVGhlIGNvbG9yIHRvIHRpbnQgYWxsIHRoZSBza2VsZXRvbidzIGF0dGFjaG1lbnRzLiAqL1xuXHRyZWFkb25seSBjb2xvcjogQ29sb3I7XG5cblx0LyoqIFNjYWxlcyB0aGUgZW50aXJlIHNrZWxldG9uIG9uIHRoZSBYIGF4aXMuXG5cdCAqXG5cdCAqIEJvbmVzIHRoYXQgZG8gbm90IGluaGVyaXQgc2NhbGUgYXJlIHN0aWxsIGFmZmVjdGVkIGJ5IHRoaXMgcHJvcGVydHkuICovXG5cdHNjYWxlWCA9IDE7XG5cblx0cHJpdmF0ZSBfc2NhbGVZID0gMTtcblxuXHQvKiogU2NhbGVzIHRoZSBlbnRpcmUgc2tlbGV0b24gb24gdGhlIFkgYXhpcy5cblx0ICpcblx0ICogQm9uZXMgdGhhdCBkbyBub3QgaW5oZXJpdCBzY2FsZSBhcmUgc3RpbGwgYWZmZWN0ZWQgYnkgdGhpcyBwcm9wZXJ0eS4gKi9cblx0cHVibGljIGdldCBzY2FsZVkgKCkge1xuXHRcdHJldHVybiB0aGlzLl9zY2FsZVkgKiBTa2VsZXRvbi55RGlyO1xuXHR9XG5cblx0cHVibGljIHNldCBzY2FsZVkgKHNjYWxlWTogbnVtYmVyKSB7XG5cdFx0dGhpcy5fc2NhbGVZID0gc2NhbGVZO1xuXHR9XG5cblx0LyoqIFNldHMgdGhlIHNrZWxldG9uIFggcG9zaXRpb24sIHdoaWNoIGlzIGFkZGVkIHRvIHRoZSByb290IGJvbmUgd29ybGRYIHBvc2l0aW9uLlxuXHQgKlxuXHQgKiBCb25lcyB0aGF0IGRvIG5vdCBpbmhlcml0IHRyYW5zbGF0aW9uIGFyZSBzdGlsbCBhZmZlY3RlZCBieSB0aGlzIHByb3BlcnR5LiAqL1xuXHR4ID0gMDtcblxuXHQvKiogU2V0cyB0aGUgc2tlbGV0b24gWSBwb3NpdGlvbiwgd2hpY2ggaXMgYWRkZWQgdG8gdGhlIHJvb3QgYm9uZSB3b3JsZFkgcG9zaXRpb24uXG5cdCAqXG5cdCAqIEJvbmVzIHRoYXQgZG8gbm90IGluaGVyaXQgdHJhbnNsYXRpb24gYXJlIHN0aWxsIGFmZmVjdGVkIGJ5IHRoaXMgcHJvcGVydHkuICovXG5cdHkgPSAwO1xuXG5cdC8qKiBSZXR1cm5zIHRoZSBza2VsZXRvbidzIHRpbWUsIGlzIHVzZWQgZm9yIHRpbWUtYmFzZWQgbWFuaXB1bGF0aW9ucywgc3VjaCBhcyB7QGxpbmsgUGh5c2ljc0NvbnN0cmFpbnR9LlxuXHQgKlxuXHQgKiBTZWUge0BsaW5rIF91cGRhdGV9LiAqL1xuXHR0aW1lID0gMDtcblxuXHQvKiogVGhlIHggY29tcG9uZW50IG9mIGEgdmVjdG9yIHRoYXQgZGVmaW5lcyB0aGUgZGlyZWN0aW9uIHtAbGluayBQaHlzaWNzQ29uc3RyYWludFBvc2Uud2luZH0gaXMgYXBwbGllZC4gKi9cblx0d2luZFggPSAxO1xuXG5cdC8qKiBUaGUgeSBjb21wb25lbnQgb2YgYSB2ZWN0b3IgdGhhdCBkZWZpbmVzIHRoZSBkaXJlY3Rpb24ge0BsaW5rIFBoeXNpY3NDb25zdHJhaW50UG9zZS53aW5kfSBpcyBhcHBsaWVkLiAqL1xuXHR3aW5kWSA9IDA7XG5cblx0LyoqIFRoZSB4IGNvbXBvbmVudCBvZiBhIHZlY3RvciB0aGF0IGRlZmluZXMgdGhlIGRpcmVjdGlvbiB7QGxpbmsgUGh5c2ljc0NvbnN0cmFpbnRQb3NlLmdyYXZpdHl9IGlzIGFwcGxpZWQuICovXG5cdGdyYXZpdHlYID0gMDtcblxuXHQvKiogVGhlIHkgY29tcG9uZW50IG9mIGEgdmVjdG9yIHRoYXQgZGVmaW5lcyB0aGUgZGlyZWN0aW9uIHtAbGluayBQaHlzaWNzQ29uc3RyYWludFBvc2UuZ3Jhdml0eX0gaXMgYXBwbGllZC4gKi9cblx0Z3Jhdml0eVkgPSAxO1xuXG5cdF91cGRhdGUgPSAwO1xuXG5cdGNvbnN0cnVjdG9yIChkYXRhOiBTa2VsZXRvbkRhdGEpIHtcblx0XHRpZiAoIWRhdGEpIHRocm93IG5ldyBFcnJvcihcImRhdGEgY2Fubm90IGJlIG51bGwuXCIpO1xuXHRcdHRoaXMuZGF0YSA9IGRhdGE7XG5cblx0XHR0aGlzLmJvbmVzID0gW10gYXMgQm9uZVtdO1xuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgZGF0YS5ib25lcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0Y29uc3QgYm9uZURhdGEgPSBkYXRhLmJvbmVzW2ldO1xuXHRcdFx0bGV0IGJvbmU6IEJvbmU7XG5cdFx0XHRpZiAoIWJvbmVEYXRhLnBhcmVudClcblx0XHRcdFx0Ym9uZSA9IG5ldyBCb25lKGJvbmVEYXRhLCBudWxsKTtcblx0XHRcdGVsc2Uge1xuXHRcdFx0XHRjb25zdCBwYXJlbnQgPSB0aGlzLmJvbmVzW2JvbmVEYXRhLnBhcmVudC5pbmRleF07XG5cdFx0XHRcdGJvbmUgPSBuZXcgQm9uZShib25lRGF0YSwgcGFyZW50KTtcblx0XHRcdFx0cGFyZW50LmNoaWxkcmVuLnB1c2goYm9uZSk7XG5cdFx0XHR9XG5cdFx0XHR0aGlzLmJvbmVzLnB1c2goYm9uZSk7XG5cdFx0fVxuXG5cdFx0dGhpcy5zbG90cyA9IFtdIGFzIFNsb3RbXTtcblx0XHRmb3IgKGNvbnN0IHNsb3REYXRhIG9mIHRoaXMuZGF0YS5zbG90cylcblx0XHRcdHRoaXMuc2xvdHMucHVzaChuZXcgU2xvdChzbG90RGF0YSwgdGhpcykpO1xuXHRcdHRoaXMuZHJhd09yZGVyID0gbmV3IERyYXdPcmRlcih0aGlzLnNsb3RzKTtcblxuXHRcdHRoaXMucGh5c2ljcyA9IFtdIGFzIFBoeXNpY3NDb25zdHJhaW50W107XG5cdFx0Ly8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy9ub0V4cGxpY2l0QW55OiByZWZlcmVuY2UgcnVudGltZSBkb2VzIG5vdCByZXN0cmljdCB0byBzcGVjaWZpYyB0eXBlc1xuXHRcdHRoaXMuY29uc3RyYWludHMgPSBbXSBhcyBDb25zdHJhaW50PGFueSwgYW55LCBhbnk+W107XG5cdFx0Zm9yIChjb25zdCBjb25zdHJhaW50RGF0YSBvZiB0aGlzLmRhdGEuY29uc3RyYWludHMpIHtcblx0XHRcdGNvbnN0IGNvbnN0cmFpbnQgPSBjb25zdHJhaW50RGF0YS5jcmVhdGUodGhpcyk7XG5cdFx0XHRpZiAoY29uc3RyYWludCBpbnN0YW5jZW9mIFBoeXNpY3NDb25zdHJhaW50KSB0aGlzLnBoeXNpY3MucHVzaChjb25zdHJhaW50KTtcblx0XHRcdHRoaXMuY29uc3RyYWludHMucHVzaChjb25zdHJhaW50KTtcblx0XHR9XG5cblx0XHR0aGlzLmNvbG9yID0gbmV3IENvbG9yKDEsIDEsIDEsIDEpO1xuXG5cdFx0dGhpcy51cGRhdGVDYWNoZSgpO1xuXHR9XG5cblx0LyoqIENhY2hlcyBpbmZvcm1hdGlvbiBhYm91dCBib25lcyBhbmQgY29uc3RyYWludHMuIE11c3QgYmUgY2FsbGVkIGlmIHRoZSB7QGxpbmsgc2tpbn0gaXMgbW9kaWZpZWQgb3IgaWYgYm9uZXMsIGNvbnN0cmFpbnRzLFxuXHQgKiBvciB3ZWlnaHRlZCBwYXRoIGF0dGFjaG1lbnRzIGFyZSBhZGRlZCBvciByZW1vdmVkLiAqL1xuXHR1cGRhdGVDYWNoZSAoKSB7XG5cdFx0dGhpcy5fdXBkYXRlQ2FjaGUubGVuZ3RoID0gMDtcblx0XHR0aGlzLnJlc2V0Q2FjaGUubGVuZ3RoID0gMDtcblxuXHRcdHRoaXMuZHJhd09yZGVyLnVuY29uc3RyYWluZWQoKTtcblx0XHRjb25zdCBzbG90cyA9IHRoaXMuc2xvdHM7XG5cdFx0Zm9yIChsZXQgaSA9IDAsIG4gPSBzbG90cy5sZW5ndGg7IGkgPCBuOyBpKyspXG5cdFx0XHRzbG90c1tpXS51bmNvbnN0cmFpbmVkKCk7XG5cblx0XHRjb25zdCBib25lcyA9IHRoaXMuYm9uZXM7XG5cdFx0Y29uc3QgYm9uZUNvdW50ID0gYm9uZXMubGVuZ3RoO1xuXHRcdGZvciAobGV0IGkgPSAwLCBuID0gYm9uZUNvdW50OyBpIDwgbjsgaSsrKSB7XG5cdFx0XHRjb25zdCBib25lID0gYm9uZXNbaV07XG5cdFx0XHRib25lLnNvcnRlZCA9IGJvbmUuZGF0YS5za2luUmVxdWlyZWQ7XG5cdFx0XHRib25lLmFjdGl2ZSA9ICFib25lLnNvcnRlZDtcblx0XHRcdGJvbmUudW5jb25zdHJhaW5lZCgpO1xuXHRcdH1cblx0XHRpZiAodGhpcy5za2luKSB7XG5cdFx0XHRjb25zdCBza2luQm9uZXMgPSB0aGlzLnNraW4uYm9uZXM7XG5cdFx0XHRmb3IgKGxldCBpID0gMCwgbiA9IHRoaXMuc2tpbi5ib25lcy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcblx0XHRcdFx0bGV0IGJvbmU6IEJvbmUgfCBudWxsID0gdGhpcy5ib25lc1tza2luQm9uZXNbaV0uaW5kZXhdO1xuXHRcdFx0XHRkbyB7XG5cdFx0XHRcdFx0Ym9uZS5zb3J0ZWQgPSBmYWxzZTtcblx0XHRcdFx0XHRib25lLmFjdGl2ZSA9IHRydWU7XG5cdFx0XHRcdFx0Ym9uZSA9IGJvbmUucGFyZW50O1xuXHRcdFx0XHR9IHdoaWxlIChib25lKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRjb25zdCBjb25zdHJhaW50cyA9IHRoaXMuY29uc3RyYWludHM7XG5cdFx0bGV0IG4gPSB0aGlzLmNvbnN0cmFpbnRzLmxlbmd0aDtcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IG47IGkrKylcblx0XHRcdGNvbnN0cmFpbnRzW2ldLnVuY29uc3RyYWluZWQoKTtcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IG47IGkrKykge1xuXHRcdFx0Y29uc3QgY29uc3RyYWludCA9IGNvbnN0cmFpbnRzW2ldO1xuXHRcdFx0Y29uc3RyYWludC5hY3RpdmUgPSBjb25zdHJhaW50LmlzU291cmNlQWN0aXZlKClcblx0XHRcdFx0Ly8gYmlvbWUtaWdub3JlIGxpbnQvY29tcGxleGl0eS91c2VPcHRpb25hbENoYWluOiBjaGFuZ2luZyB0byB0aGlzIG1pZ2h0IHJldHVybiB1bmRlZmluZWRcblx0XHRcdFx0JiYgKCFjb25zdHJhaW50LmRhdGEuc2tpblJlcXVpcmVkIHx8ICh0aGlzLnNraW4gIT0gbnVsbCAmJiB0aGlzLnNraW4uY29uc3RyYWludHMuaW5jbHVkZXMoY29uc3RyYWludC5kYXRhKSkpO1xuXHRcdFx0aWYgKGNvbnN0cmFpbnQuYWN0aXZlKSBjb25zdHJhaW50LnNvcnQodGhpcyk7XG5cdFx0fVxuXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBib25lQ291bnQ7IGkrKylcblx0XHRcdHRoaXMuc29ydEJvbmUoYm9uZXNbaV0pO1xuXG5cdFx0biA9IHRoaXMuX3VwZGF0ZUNhY2hlLmxlbmd0aDtcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IG47IGkrKykge1xuXHRcdFx0Y29uc3QgdXBkYXRlYWJsZSA9IHRoaXMuX3VwZGF0ZUNhY2hlW2ldO1xuXHRcdFx0aWYgKHVwZGF0ZWFibGUgaW5zdGFuY2VvZiBCb25lKSB0aGlzLl91cGRhdGVDYWNoZVtpXSA9IHVwZGF0ZWFibGUuYXBwbGllZFBvc2U7XG5cdFx0fVxuXG5cdH1cblxuXHQvLyBiaW9tZS1pZ25vcmUgbGludC9zdXNwaWNpb3VzL25vRXhwbGljaXRBbnk6IHJlZmVyZW5jZSBydW50aW1lIGRvZXMgbm90IHJlc3RyaWN0IHRvIHNwZWNpZmljIHR5cGVzXG5cdGNvbnN0cmFpbmVkIChvYmplY3Q6IFBvc2VkPGFueSwgYW55Pikge1xuXHRcdGlmIChvYmplY3QucG9zZSA9PT0gb2JqZWN0LmFwcGxpZWRQb3NlKSB7XG5cdFx0XHRvYmplY3QuY29uc3RyYWluZWQoKTtcblx0XHRcdHRoaXMucmVzZXRDYWNoZS5wdXNoKG9iamVjdCk7XG5cdFx0fVxuXHR9XG5cblx0c29ydEJvbmUgKGJvbmU6IEJvbmUpIHtcblx0XHRpZiAoYm9uZS5zb3J0ZWQgfHwgIWJvbmUuYWN0aXZlKSByZXR1cm47XG5cdFx0Y29uc3QgcGFyZW50ID0gYm9uZS5wYXJlbnQ7XG5cdFx0aWYgKHBhcmVudCkgdGhpcy5zb3J0Qm9uZShwYXJlbnQpO1xuXHRcdGJvbmUuc29ydGVkID0gdHJ1ZTtcblx0XHR0aGlzLl91cGRhdGVDYWNoZS5wdXNoKGJvbmUpO1xuXHR9XG5cblx0c29ydFJlc2V0IChib25lczogQXJyYXk8Qm9uZT4pIHtcblx0XHRmb3IgKGxldCBpID0gMCwgbiA9IGJvbmVzLmxlbmd0aDsgaSA8IG47IGkrKykge1xuXHRcdFx0Y29uc3QgYm9uZSA9IGJvbmVzW2ldO1xuXHRcdFx0aWYgKGJvbmUuYWN0aXZlKSB7XG5cdFx0XHRcdGlmIChib25lLnNvcnRlZCkgdGhpcy5zb3J0UmVzZXQoYm9uZS5jaGlsZHJlbik7XG5cdFx0XHRcdGJvbmUuc29ydGVkID0gZmFsc2U7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqIFVwZGF0ZXMgdGhlIHdvcmxkIHRyYW5zZm9ybSBmb3IgZWFjaCBib25lIGFuZCBhcHBsaWVzIGFsbCBjb25zdHJhaW50cy5cblx0ICpcblx0ICogU2VlIDxhIGhyZWY9XCJodHRwczovL2Vzb3Rlcmljc29mdHdhcmUuY29tL3NwaW5lLXJ1bnRpbWUtc2tlbGV0b25zI1dvcmxkLXRyYW5zZm9ybXNcIj5Xb3JsZCB0cmFuc2Zvcm1zPC9hPiBpbiB0aGUgU3BpbmVcblx0ICogUnVudGltZXMgR3VpZGUuICovXG5cdHVwZGF0ZVdvcmxkVHJhbnNmb3JtIChwaHlzaWNzOiBQaHlzaWNzKTogdm9pZCB7XG5cdFx0dGhpcy5fdXBkYXRlKys7XG5cblx0XHRpZiAodGhpcy5kcmF3T3JkZXIuYXBwbGllZFBvc2UgPT09IHRoaXMuZHJhd09yZGVyLmNvbnN0cmFpbmVkUG9zZSkgdGhpcy5kcmF3T3JkZXIucmVzZXRDb25zdHJhaW5lZCgpO1xuXHRcdGNvbnN0IHJlc2V0Q2FjaGUgPSB0aGlzLnJlc2V0Q2FjaGU7XG5cdFx0Zm9yIChsZXQgaSA9IDAsIG4gPSB0aGlzLnJlc2V0Q2FjaGUubGVuZ3RoOyBpIDwgbjsgaSsrKVxuXHRcdFx0cmVzZXRDYWNoZVtpXS5yZXNldENvbnN0cmFpbmVkKCk7XG5cblx0XHRjb25zdCB1cGRhdGVDYWNoZSA9IHRoaXMuX3VwZGF0ZUNhY2hlO1xuXHRcdGZvciAobGV0IGkgPSAwLCBuID0gdGhpcy5fdXBkYXRlQ2FjaGUubGVuZ3RoOyBpIDwgbjsgaSsrKVxuXHRcdFx0dXBkYXRlQ2FjaGVbaV0udXBkYXRlKHRoaXMsIHBoeXNpY3MpO1xuXHR9XG5cblx0LyoqIFNldHMgdGhlIGJvbmVzLCBjb25zdHJhaW50cywgYW5kIHNsb3RzIHRvIHRoZWlyIHNldHVwIHBvc2UgdmFsdWVzLiAqL1xuXHRzZXR1cFBvc2UgKCkge1xuXHRcdHRoaXMuc2V0dXBQb3NlQm9uZXMoKTtcblx0XHR0aGlzLnNldHVwUG9zZVNsb3RzKCk7XG5cdH1cblxuXHQvKiogU2V0cyB0aGUgYm9uZXMgYW5kIGNvbnN0cmFpbnRzIHRvIHRoZWlyIHNldHVwIHBvc2UgdmFsdWVzLiAqL1xuXHRzZXR1cFBvc2VCb25lcyAoKSB7XG5cdFx0Y29uc3QgYm9uZXMgPSB0aGlzLmJvbmVzO1xuXHRcdGZvciAobGV0IGkgPSAwLCBuID0gYm9uZXMubGVuZ3RoOyBpIDwgbjsgaSsrKVxuXHRcdFx0Ym9uZXNbaV0uc2V0dXBQb3NlKCk7XG5cblx0XHRjb25zdCBjb25zdHJhaW50cyA9IHRoaXMuY29uc3RyYWludHM7XG5cdFx0Zm9yIChsZXQgaSA9IDAsIG4gPSBjb25zdHJhaW50cy5sZW5ndGg7IGkgPCBuOyBpKyspXG5cdFx0XHRjb25zdHJhaW50c1tpXS5zZXR1cFBvc2UoKTtcblx0fVxuXG5cdC8qKiBTZXRzIHRoZSBzbG90cyBhbmQgZHJhdyBvcmRlciB0byB0aGVpciBzZXR1cCBwb3NlIHZhbHVlcy4gKi9cblx0c2V0dXBQb3NlU2xvdHMgKCkge1xuXHRcdHRoaXMuZHJhd09yZGVyLnNldHVwUG9zZSgpO1xuXHRcdGNvbnN0IHNsb3RzID0gdGhpcy5zbG90cztcblx0XHRmb3IgKGxldCBpID0gMCwgbiA9IHNsb3RzLmxlbmd0aDsgaSA8IG47IGkrKylcblx0XHRcdHNsb3RzW2ldLnNldHVwUG9zZSgpO1xuXHR9XG5cblx0LyoqIFJldHVybnMgdGhlIHJvb3QgYm9uZSwgb3IgbnVsbCBpZiB0aGUgc2tlbGV0b24gaGFzIG5vIGJvbmVzLiAqL1xuXHRnZXRSb290Qm9uZSAoKSB7XG5cdFx0aWYgKHRoaXMuYm9uZXMubGVuZ3RoID09PSAwKSByZXR1cm4gbnVsbDtcblx0XHRyZXR1cm4gdGhpcy5ib25lc1swXTtcblx0fVxuXG5cdC8qKiBGaW5kcyBhIGJvbmUgYnkgY29tcGFyaW5nIGVhY2ggYm9uZSdzIG5hbWUuIEl0IGlzIG1vcmUgZWZmaWNpZW50IHRvIGNhY2hlIHRoZSByZXN1bHRzIG9mIHRoaXMgbWV0aG9kIHRoYW4gdG8gY2FsbCBpdFxuXHQgKiByZXBlYXRlZGx5LiAqL1xuXHRmaW5kQm9uZSAoYm9uZU5hbWU6IHN0cmluZykge1xuXHRcdGlmICghYm9uZU5hbWUpIHRocm93IG5ldyBFcnJvcihcImJvbmVOYW1lIGNhbm5vdCBiZSBudWxsLlwiKTtcblx0XHRjb25zdCBib25lcyA9IHRoaXMuYm9uZXM7XG5cdFx0Zm9yIChsZXQgaSA9IDAsIG4gPSBib25lcy5sZW5ndGg7IGkgPCBuOyBpKyspXG5cdFx0XHRpZiAoYm9uZXNbaV0uZGF0YS5uYW1lID09PSBib25lTmFtZSkgcmV0dXJuIGJvbmVzW2ldO1xuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0LyoqIEZpbmRzIGEgc2xvdCBieSBjb21wYXJpbmcgZWFjaCBzbG90J3MgbmFtZS4gSXQgaXMgbW9yZSBlZmZpY2llbnQgdG8gY2FjaGUgdGhlIHJlc3VsdHMgb2YgdGhpcyBtZXRob2QgdGhhbiB0byBjYWxsIGl0XG5cdCAqIHJlcGVhdGVkbHkuICovXG5cdGZpbmRTbG90IChzbG90TmFtZTogc3RyaW5nKSB7XG5cdFx0aWYgKCFzbG90TmFtZSkgdGhyb3cgbmV3IEVycm9yKFwic2xvdE5hbWUgY2Fubm90IGJlIG51bGwuXCIpO1xuXHRcdGNvbnN0IHNsb3RzID0gdGhpcy5zbG90cztcblx0XHRmb3IgKGxldCBpID0gMCwgbiA9IHNsb3RzLmxlbmd0aDsgaSA8IG47IGkrKylcblx0XHRcdGlmIChzbG90c1tpXS5kYXRhLm5hbWUgPT09IHNsb3ROYW1lKSByZXR1cm4gc2xvdHNbaV07XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXHQvKiogU2V0cyBhIHNraW4gYnkgbmFtZS5cblx0ICpcblx0ICogU2VlIHtAbGluayBzZXRTa2lufS4gKi9cblx0c2V0U2tpbiAoc2tpbk5hbWU6IHN0cmluZyk6IHZvaWQ7XG5cblx0LyoqIFNldHMgdGhlIHNraW4gdXNlZCB0byBsb29rIHVwIGF0dGFjaG1lbnRzIGJlZm9yZSBsb29raW5nIGluIHtAbGluayBTa2VsZXRvbkRhdGEuZGVmYXVsdFNraW59LiBJZiB0aGUgc2tpbiBpcyBjaGFuZ2VkLFxuXHQgKiB7QGxpbmsgdXBkYXRlQ2FjaGV9IGlzIGNhbGxlZC5cblx0ICpcblx0ICogQXR0YWNobWVudHMgZnJvbSB0aGUgbmV3IHNraW4gYXJlIGF0dGFjaGVkIGlmIHRoZSBjb3JyZXNwb25kaW5nIGF0dGFjaG1lbnQgZnJvbSB0aGUgb2xkIHNraW4gd2FzIGF0dGFjaGVkLiBJZiB0aGVyZSB3YXMgbm9cblx0ICogb2xkIHNraW4sIGVhY2ggc2xvdCdzIHNldHVwIG1vZGUgYXR0YWNobWVudCBpcyBhdHRhY2hlZCBmcm9tIHRoZSBuZXcgc2tpbi5cblx0ICpcblx0ICogQWZ0ZXIgY2hhbmdpbmcgdGhlIHNraW4sIHRoZSB2aXNpYmxlIGF0dGFjaG1lbnRzIGNhbiBiZSByZXNldCB0byB0aG9zZSBhdHRhY2hlZCBpbiB0aGUgc2V0dXAgcG9zZSBieSBjYWxsaW5nXG5cdCAqIHtAbGluayBzZXR1cFBvc2VTbG90c30uIEFsc28sIG9mdGVuIHtAbGluayBBbmltYXRpb25TdGF0ZS5hcHBseX0gaXMgY2FsbGVkIGJlZm9yZSB0aGUgbmV4dCB0aW1lIHRoZSBza2VsZXRvbiBpc1xuXHQgKiByZW5kZXJlZCB0byBhbGxvdyBhbnkgYXR0YWNobWVudCBrZXlzIGluIHRoZSBjdXJyZW50IGFuaW1hdGlvbihzKSB0byBoaWRlIG9yIHNob3cgYXR0YWNobWVudHMgZnJvbSB0aGUgbmV3IHNraW4uICovXG5cdHNldFNraW4gKG5ld1NraW46IFNraW4gfCBudWxsKTogdm9pZDtcblxuXHRzZXRTa2luIChuZXdTa2luOiBTa2luIHwgbnVsbCB8IHN0cmluZyk6IHZvaWQge1xuXHRcdGlmICh0eXBlb2YgbmV3U2tpbiA9PT0gXCJzdHJpbmdcIilcblx0XHRcdHRoaXMuc2V0U2tpbkJ5TmFtZShuZXdTa2luKTtcblx0XHRlbHNlXG5cdFx0XHR0aGlzLnNldFNraW5CeVNraW4obmV3U2tpbik7XG5cdH07XG5cblx0cHJpdmF0ZSBzZXRTa2luQnlOYW1lIChza2luTmFtZTogc3RyaW5nKSB7XG5cdFx0Y29uc3Qgc2tpbiA9IHRoaXMuZGF0YS5maW5kU2tpbihza2luTmFtZSk7XG5cdFx0aWYgKCFza2luKSB0aHJvdyBuZXcgRXJyb3IoYFNraW4gbm90IGZvdW5kOiAke3NraW5OYW1lfWApO1xuXHRcdHRoaXMuc2V0U2tpbihza2luKTtcblx0fVxuXG5cdHByaXZhdGUgc2V0U2tpbkJ5U2tpbiAobmV3U2tpbjogU2tpbiB8IG51bGwpIHtcblx0XHRpZiAobmV3U2tpbiA9PT0gdGhpcy5za2luKSByZXR1cm47XG5cdFx0aWYgKG5ld1NraW4pIHtcblx0XHRcdGlmICh0aGlzLnNraW4pXG5cdFx0XHRcdG5ld1NraW4uYXR0YWNoQWxsKHRoaXMsIHRoaXMuc2tpbik7XG5cdFx0XHRlbHNlIHtcblx0XHRcdFx0Y29uc3Qgc2xvdHMgPSB0aGlzLnNsb3RzO1xuXHRcdFx0XHRmb3IgKGxldCBpID0gMCwgbiA9IHNsb3RzLmxlbmd0aDsgaSA8IG47IGkrKykge1xuXHRcdFx0XHRcdGNvbnN0IHNsb3QgPSBzbG90c1tpXTtcblx0XHRcdFx0XHRjb25zdCBuYW1lID0gc2xvdC5kYXRhLmF0dGFjaG1lbnROYW1lO1xuXHRcdFx0XHRcdGlmIChuYW1lKSB7XG5cdFx0XHRcdFx0XHRjb25zdCBhdHRhY2htZW50ID0gbmV3U2tpbi5nZXRBdHRhY2htZW50KGksIG5hbWUpO1xuXHRcdFx0XHRcdFx0aWYgKGF0dGFjaG1lbnQpIHNsb3QucG9zZS5zZXRBdHRhY2htZW50KGF0dGFjaG1lbnQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHR0aGlzLnNraW4gPSBuZXdTa2luO1xuXHRcdHRoaXMudXBkYXRlQ2FjaGUoKTtcblx0fVxuXG5cdC8qKiBGaW5kcyBhbiBhdHRhY2htZW50IGJ5IGxvb2tpbmcgaW4gdGhlIHtAbGluayBza2lufSBhbmQge0BsaW5rIFNrZWxldG9uRGF0YS5kZWZhdWx0U2tpbn0gdXNpbmcgdGhlIHNsb3QgbmFtZSBhbmQgYXR0YWNobWVudFxuXHQgKiBuYW1lLlxuXHQgKlxuXHQgKiBTZWUge0BsaW5rIGdldEF0dGFjaG1lbnR9LiAqL1xuXHRnZXRBdHRhY2htZW50IChzbG90TmFtZTogc3RyaW5nLCBwbGFjZWhvbGRlcjogc3RyaW5nKTogQXR0YWNobWVudCB8IG51bGw7XG5cblx0LyoqIEZpbmRzIGFuIGF0dGFjaG1lbnQgYnkgbG9va2luZyBpbiB0aGUge0BsaW5rIHNraW59IGFuZCB7QGxpbmsgU2tlbGV0b25EYXRhLmRlZmF1bHRTa2lufSB1c2luZyB0aGUgc2xvdCBpbmRleCBhbmRcblx0ICogYXR0YWNobWVudCBuYW1lLiBGaXJzdCB0aGUgc2tpbiBpcyBjaGVja2VkIGFuZCBpZiB0aGUgYXR0YWNobWVudCB3YXMgbm90IGZvdW5kLCB0aGUgZGVmYXVsdCBza2luIGlzIGNoZWNrZWQuXG5cdCAqXG5cdCAqIFNlZSA8YSBocmVmPVwiaHR0cHM6Ly9lc290ZXJpY3NvZnR3YXJlLmNvbS9zcGluZS1ydW50aW1lLXNraW5zXCI+UnVudGltZSBza2luczwvYT4gaW4gdGhlIFNwaW5lIFJ1bnRpbWVzIEd1aWRlLiAqL1xuXHRnZXRBdHRhY2htZW50IChzbG90SW5kZXg6IG51bWJlciwgcGxhY2Vob2xkZXI6IHN0cmluZyk6IEF0dGFjaG1lbnQgfCBudWxsO1xuXG5cdGdldEF0dGFjaG1lbnQgKHNsb3ROYW1lT3JJbmRleDogc3RyaW5nIHwgbnVtYmVyLCBwbGFjZWhvbGRlcjogc3RyaW5nKTogQXR0YWNobWVudCB8IG51bGwge1xuXHRcdGlmICh0eXBlb2Ygc2xvdE5hbWVPckluZGV4ID09PSAnc3RyaW5nJylcblx0XHRcdHJldHVybiB0aGlzLmdldEF0dGFjaG1lbnRCeU5hbWUoc2xvdE5hbWVPckluZGV4LCBwbGFjZWhvbGRlcik7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0QXR0YWNobWVudEJ5SW5kZXgoc2xvdE5hbWVPckluZGV4LCBwbGFjZWhvbGRlcik7XG5cdH1cblxuXHQvKiogRmluZHMgYW4gYXR0YWNobWVudCBieSBsb29raW5nIGluIHRoZSB7QGxpbmsgc2tpbn0gYW5kIHtAbGluayBTa2VsZXRvbkRhdGEuZGVmYXVsdFNraW59IHVzaW5nIHRoZSBzbG90IG5hbWUgYW5kIGF0dGFjaG1lbnRcblx0ICogbmFtZS5cblx0ICpcblx0ICogU2VlIHtAbGluayBnZXRBdHRhY2htZW50fS5cblx0ICogQHJldHVybnMgTWF5IGJlIG51bGwuICovXG5cdHByaXZhdGUgZ2V0QXR0YWNobWVudEJ5TmFtZSAoc2xvdE5hbWU6IHN0cmluZywgcGxhY2Vob2xkZXI6IHN0cmluZyk6IEF0dGFjaG1lbnQgfCBudWxsIHtcblx0XHRjb25zdCBzbG90ID0gdGhpcy5kYXRhLmZpbmRTbG90KHNsb3ROYW1lKTtcblx0XHRpZiAoIXNsb3QpIHRocm93IG5ldyBFcnJvcihgQ2FuJ3QgZmluZCBzbG90IHdpdGggbmFtZSAke3Nsb3ROYW1lfWApO1xuXHRcdHJldHVybiB0aGlzLmdldEF0dGFjaG1lbnQoc2xvdC5pbmRleCwgcGxhY2Vob2xkZXIpO1xuXHR9XG5cblx0LyoqIEZpbmRzIGFuIGF0dGFjaG1lbnQgYnkgbG9va2luZyBpbiB0aGUge0BsaW5rIHNraW59IGFuZCB7QGxpbmsgU2tlbGV0b25EYXRhLmRlZmF1bHRTa2lufSB1c2luZyB0aGUgc2xvdCBpbmRleCBhbmRcblx0ICogYXR0YWNobWVudCBuYW1lLiBGaXJzdCB0aGUgc2tpbiBpcyBjaGVja2VkIGFuZCBpZiB0aGUgYXR0YWNobWVudCB3YXMgbm90IGZvdW5kLCB0aGUgZGVmYXVsdCBza2luIGlzIGNoZWNrZWQuXG5cdCAqXG5cdCAqIFNlZSBbUnVudGltZSBza2luc10oaHR0cDovL2Vzb3Rlcmljc29mdHdhcmUuY29tL3NwaW5lLXJ1bnRpbWUtc2tpbnMpIGluIHRoZSBTcGluZSBSdW50aW1lcyBHdWlkZS5cblx0ICogQHJldHVybnMgTWF5IGJlIG51bGwuICovXG5cdHByaXZhdGUgZ2V0QXR0YWNobWVudEJ5SW5kZXggKHNsb3RJbmRleDogbnVtYmVyLCBwbGFjZWhvbGRlcjogc3RyaW5nKTogQXR0YWNobWVudCB8IG51bGwge1xuXHRcdGlmICghcGxhY2Vob2xkZXIpIHRocm93IG5ldyBFcnJvcihcInBsYWNlaG9sZGVyIGNhbm5vdCBiZSBudWxsLlwiKTtcblx0XHRpZiAodGhpcy5za2luKSB7XG5cdFx0XHRjb25zdCBhdHRhY2htZW50ID0gdGhpcy5za2luLmdldEF0dGFjaG1lbnQoc2xvdEluZGV4LCBwbGFjZWhvbGRlcik7XG5cdFx0XHRpZiAoYXR0YWNobWVudCkgcmV0dXJuIGF0dGFjaG1lbnQ7XG5cdFx0fVxuXHRcdGlmICh0aGlzLmRhdGEuZGVmYXVsdFNraW4pIHJldHVybiB0aGlzLmRhdGEuZGVmYXVsdFNraW4uZ2V0QXR0YWNobWVudChzbG90SW5kZXgsIHBsYWNlaG9sZGVyKTtcblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdC8qKiBBIGNvbnZlbmllbmNlIG1ldGhvZCB0byBzZXQgYW4gYXR0YWNobWVudCBieSBmaW5kaW5nIHRoZSBzbG90IHdpdGgge0BsaW5rIGZpbmRTbG90fSwgZmluZGluZyB0aGUgYXR0YWNobWVudCB3aXRoXG5cdCAqIHtAbGluayBnZXRBdHRhY2htZW50fSwgdGhlbiBzZXR0aW5nIHRoZSBzbG90J3Mge0BsaW5rIFNsb3QuYXR0YWNobWVudH0uXG5cdCAqIEBwYXJhbSBwbGFjZWhvbGRlciBNYXkgYmUgbnVsbCB0byBjbGVhciB0aGUgc2xvdCdzIGF0dGFjaG1lbnQuICovXG5cdHNldEF0dGFjaG1lbnQgKHNsb3ROYW1lOiBzdHJpbmcsIHBsYWNlaG9sZGVyOiBzdHJpbmcgfCBudWxsKSB7XG5cdFx0aWYgKCFzbG90TmFtZSkgdGhyb3cgbmV3IEVycm9yKFwic2xvdE5hbWUgY2Fubm90IGJlIG51bGwuXCIpO1xuXHRcdGNvbnN0IHNsb3QgPSB0aGlzLmZpbmRTbG90KHNsb3ROYW1lKTtcblx0XHRpZiAoIXNsb3QpIHRocm93IG5ldyBFcnJvcihgU2xvdCBub3QgZm91bmQ6ICR7c2xvdE5hbWV9YCk7XG5cdFx0bGV0IGF0dGFjaG1lbnQ6IEF0dGFjaG1lbnQgfCBudWxsID0gbnVsbDtcblx0XHRpZiAocGxhY2Vob2xkZXIpIHtcblx0XHRcdGF0dGFjaG1lbnQgPSB0aGlzLmdldEF0dGFjaG1lbnQoc2xvdC5kYXRhLmluZGV4LCBwbGFjZWhvbGRlcik7XG5cdFx0XHRpZiAoIWF0dGFjaG1lbnQpXG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihgQXR0YWNobWVudCBub3QgZm91bmQ6ICR7cGxhY2Vob2xkZXJ9LCBmb3Igc2xvdDogJHtzbG90TmFtZX1gKTtcblx0XHR9XG5cdFx0c2xvdC5wb3NlLnNldEF0dGFjaG1lbnQoYXR0YWNobWVudCk7XG5cdH1cblxuXHQvKiogRmluZHMgYSBjb25zdHJhaW50IG9mIHRoZSBzcGVjaWZpZWQgdHlwZSBieSBjb21wYXJpbmcgZWFjaCBjb25zdHJhaW50cydzIG5hbWUuIEl0IGlzIG1vcmUgZWZmaWNpZW50IHRvIGNhY2hlIHRoZSByZXN1bHRzIG9mXG5cdCAqIHRoaXMgbWV0aG9kIHRoYW4gdG8gY2FsbCBpdCBtdWx0aXBsZSB0aW1lcy4gKi9cblx0Ly8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy9ub0V4cGxpY2l0QW55OiByZWZlcmVuY2UgcnVudGltZSBkb2VzIG5vdCByZXN0cmljdCB0byBzcGVjaWZpYyB0eXBlc1xuXHRmaW5kQ29uc3RyYWludDxUIGV4dGVuZHMgQ29uc3RyYWludDxhbnksIGFueSwgYW55Pj4gKGNvbnN0cmFpbnROYW1lOiBzdHJpbmcsIHR5cGU6IGFic3RyYWN0IG5ldyAoLi4uYXJnczogYW55W10pID0+IFQpOiBUIHwgbnVsbCB7XG5cdFx0aWYgKGNvbnN0cmFpbnROYW1lID09IG51bGwpIHRocm93IG5ldyBFcnJvcihcImNvbnN0cmFpbnROYW1lIGNhbm5vdCBiZSBudWxsLlwiKTtcblx0XHRpZiAodHlwZSA9PSBudWxsKSB0aHJvdyBuZXcgRXJyb3IoXCJ0eXBlIGNhbm5vdCBiZSBudWxsLlwiKTtcblx0XHRjb25zdCBjb25zdHJhaW50cyA9IHRoaXMuY29uc3RyYWludHM7XG5cdFx0Zm9yIChsZXQgaSA9IDAsIG4gPSBjb25zdHJhaW50cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcblx0XHRcdGNvbnN0IGNvbnN0cmFpbnQgPSBjb25zdHJhaW50c1tpXTtcblx0XHRcdGlmIChjb25zdHJhaW50IGluc3RhbmNlb2YgdHlwZSAmJiBjb25zdHJhaW50LmRhdGEubmFtZSA9PT0gY29uc3RyYWludE5hbWUpIHJldHVybiBjb25zdHJhaW50IGFzIFQ7XG5cdFx0fVxuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0LyoqIFJldHVybnMgdGhlIGF4aXMgYWxpZ25lZCBib3VuZGluZyBib3ggKEFBQkIpIG9mIHRoZSByZWdpb24gYW5kIG1lc2ggYXR0YWNobWVudHMgZm9yIHRoZSBhcHBsaWVkIHBvc2UuXG5cdCAqIEBwYXJhbSBvZmZzZXQgQW4gb3V0cHV0IHZhbHVlLCB0aGUgZGlzdGFuY2UgZnJvbSB0aGUgc2tlbGV0b24gb3JpZ2luIHRvIHRoZSBib3R0b20gbGVmdCBjb3JuZXIgb2YgdGhlIEFBQkIuXG5cdCAqIEBwYXJhbSBzaXplIEFuIG91dHB1dCB2YWx1ZSwgdGhlIHdpZHRoIGFuZCBoZWlnaHQgb2YgdGhlIEFBQkIuXG5cdCAqIEBwYXJhbSB0ZW1wIFdvcmtpbmcgbWVtb3J5IHRvIHRlbXBvcmFyaWx5IHN0b3JlIGF0dGFjaG1lbnRzJyBjb21wdXRlZCB3b3JsZCB2ZXJ0aWNlcy4gKi9cblx0Z2V0Qm91bmRzUmVjdCAoY2xpcHBlcj86IFNrZWxldG9uQ2xpcHBpbmcpIHtcblx0XHRjb25zdCBvZmZzZXQgPSBuZXcgVmVjdG9yMigpO1xuXHRcdGNvbnN0IHNpemUgPSBuZXcgVmVjdG9yMigpO1xuXHRcdHRoaXMuZ2V0Qm91bmRzKG9mZnNldCwgc2l6ZSwgdW5kZWZpbmVkLCBjbGlwcGVyKTtcblx0XHRyZXR1cm4geyB4OiBvZmZzZXQueCwgeTogb2Zmc2V0LnksIHdpZHRoOiBzaXplLngsIGhlaWdodDogc2l6ZS55IH07XG5cdH1cblxuXHQvKiogUmV0dXJucyB0aGUgYXhpcyBhbGlnbmVkIGJvdW5kaW5nIGJveCAoQUFCQikgb2YgdGhlIHJlZ2lvbiBhbmQgbWVzaCBhdHRhY2htZW50cyBmb3IgdGhlIGFwcGxpZWQgcG9zZS4gT3B0aW9uYWxseSBhcHBsaWVzXG5cdCAqIGNsaXBwaW5nLlxuXHQgKiBAcGFyYW0gb2Zmc2V0IEFuIG91dHB1dCB2YWx1ZSwgdGhlIGRpc3RhbmNlIGZyb20gdGhlIHNrZWxldG9uIG9yaWdpbiB0byB0aGUgYm90dG9tIGxlZnQgY29ybmVyIG9mIHRoZSBBQUJCLlxuXHQgKiBAcGFyYW0gc2l6ZSBBbiBvdXRwdXQgdmFsdWUsIHRoZSB3aWR0aCBhbmQgaGVpZ2h0IG9mIHRoZSBBQUJCLlxuXHQgKiBAcGFyYW0gdGVtcCBXb3JraW5nIG1lbW9yeSB0byB0ZW1wb3JhcmlseSBzdG9yZSBhdHRhY2htZW50cycgY29tcHV0ZWQgd29ybGQgdmVydGljZXMuXG5cdCAqIEBwYXJhbSBjbGlwcGVyIHtAbGluayBTa2VsZXRvbkNsaXBwaW5nfSB0byB1c2UuIElmIGBudWxsYCwgbm8gY2xpcHBpbmcgaXMgYXBwbGllZC4gKi9cblx0Z2V0Qm91bmRzIChvZmZzZXQ6IFZlY3RvcjIsIHNpemU6IFZlY3RvcjIsIHRlbXA6IEFycmF5PG51bWJlcj4gPSBuZXcgQXJyYXk8bnVtYmVyPigyKSwgY2xpcHBlcjogU2tlbGV0b25DbGlwcGluZyB8IG51bGwgPSBudWxsKSB7XG5cdFx0aWYgKCFvZmZzZXQpIHRocm93IG5ldyBFcnJvcihcIm9mZnNldCBjYW5ub3QgYmUgbnVsbC5cIik7XG5cdFx0aWYgKCFzaXplKSB0aHJvdyBuZXcgRXJyb3IoXCJzaXplIGNhbm5vdCBiZSBudWxsLlwiKTtcblx0XHRjb25zdCBkcmF3T3JkZXIgPSB0aGlzLmRyYXdPcmRlci5hcHBsaWVkUG9zZTtcblx0XHRjb25zdCBzbG90cyA9IGRyYXdPcmRlcjtcblx0XHRsZXQgbWluWCA9IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSwgbWluWSA9IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSwgbWF4WCA9IE51bWJlci5ORUdBVElWRV9JTkZJTklUWSwgbWF4WSA9IE51bWJlci5ORUdBVElWRV9JTkZJTklUWTtcblx0XHRmb3IgKGxldCBpID0gMCwgbiA9IGRyYXdPcmRlci5sZW5ndGg7IGkgPCBuOyBpKyspIHtcblx0XHRcdGNvbnN0IHNsb3QgPSBzbG90c1tpXTtcblx0XHRcdGlmICghc2xvdC5ib25lLmFjdGl2ZSkgY29udGludWU7XG5cdFx0XHRsZXQgdmVydGljZXNMZW5ndGggPSAwO1xuXHRcdFx0bGV0IHZlcnRpY2VzOiBOdW1iZXJBcnJheUxpa2UgfCBudWxsID0gbnVsbDtcblx0XHRcdGxldCB0cmlhbmdsZXM6IE51bWJlckFycmF5TGlrZSB8IG51bGwgPSBudWxsO1xuXHRcdFx0Y29uc3QgYXR0YWNobWVudCA9IHNsb3QuYXBwbGllZFBvc2UuYXR0YWNobWVudDtcblx0XHRcdGlmIChhdHRhY2htZW50KSB7XG5cdFx0XHRcdGlmIChhdHRhY2htZW50IGluc3RhbmNlb2YgUmVnaW9uQXR0YWNobWVudCkge1xuXHRcdFx0XHRcdHZlcnRpY2VzTGVuZ3RoID0gODtcblx0XHRcdFx0XHR2ZXJ0aWNlcyA9IFV0aWxzLnNldEFycmF5U2l6ZSh0ZW1wLCB2ZXJ0aWNlc0xlbmd0aCwgMCk7XG5cdFx0XHRcdFx0YXR0YWNobWVudC5jb21wdXRlV29ybGRWZXJ0aWNlcyhzbG90LCBhdHRhY2htZW50LmdldE9mZnNldHMoc2xvdC5hcHBsaWVkUG9zZSksIHZlcnRpY2VzLCAwLCAyKTtcblx0XHRcdFx0XHR0cmlhbmdsZXMgPSBTa2VsZXRvbi5xdWFkVHJpYW5nbGVzO1xuXHRcdFx0XHR9IGVsc2UgaWYgKGF0dGFjaG1lbnQgaW5zdGFuY2VvZiBNZXNoQXR0YWNobWVudCkge1xuXHRcdFx0XHRcdHZlcnRpY2VzTGVuZ3RoID0gYXR0YWNobWVudC53b3JsZFZlcnRpY2VzTGVuZ3RoO1xuXHRcdFx0XHRcdHZlcnRpY2VzID0gVXRpbHMuc2V0QXJyYXlTaXplKHRlbXAsIHZlcnRpY2VzTGVuZ3RoLCAwKTtcblx0XHRcdFx0XHRhdHRhY2htZW50LmNvbXB1dGVXb3JsZFZlcnRpY2VzKHRoaXMsIHNsb3QsIDAsIHZlcnRpY2VzTGVuZ3RoLCB2ZXJ0aWNlcywgMCwgMik7XG5cdFx0XHRcdFx0dHJpYW5nbGVzID0gYXR0YWNobWVudC50cmlhbmdsZXM7XG5cdFx0XHRcdH0gZWxzZSBpZiAoYXR0YWNobWVudCBpbnN0YW5jZW9mIENsaXBwaW5nQXR0YWNobWVudCAmJiBjbGlwcGVyKSB7XG5cdFx0XHRcdFx0Y2xpcHBlci5jbGlwRW5kKHNsb3QpO1xuXHRcdFx0XHRcdGNsaXBwZXIuY2xpcFN0YXJ0KHRoaXMsIHNsb3QsIGF0dGFjaG1lbnQpO1xuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICh2ZXJ0aWNlcyAmJiB0cmlhbmdsZXMpIHtcblx0XHRcdFx0XHRpZiAoY2xpcHBlcj8uaXNDbGlwcGluZygpICYmIGNsaXBwZXIuY2xpcFRyaWFuZ2xlcyh2ZXJ0aWNlcywgdHJpYW5nbGVzLCB0cmlhbmdsZXMubGVuZ3RoKSkge1xuXHRcdFx0XHRcdFx0dmVydGljZXMgPSBjbGlwcGVyLmNsaXBwZWRWZXJ0aWNlcztcblx0XHRcdFx0XHRcdHZlcnRpY2VzTGVuZ3RoID0gY2xpcHBlci5jbGlwcGVkVmVydGljZXMubGVuZ3RoO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRmb3IgKGxldCBpaSA9IDAsIG5uID0gdmVydGljZXMubGVuZ3RoOyBpaSA8IG5uOyBpaSArPSAyKSB7XG5cdFx0XHRcdFx0XHRjb25zdCB4ID0gdmVydGljZXNbaWldLCB5ID0gdmVydGljZXNbaWkgKyAxXTtcblx0XHRcdFx0XHRcdG1pblggPSBNYXRoLm1pbihtaW5YLCB4KTtcblx0XHRcdFx0XHRcdG1pblkgPSBNYXRoLm1pbihtaW5ZLCB5KTtcblx0XHRcdFx0XHRcdG1heFggPSBNYXRoLm1heChtYXhYLCB4KTtcblx0XHRcdFx0XHRcdG1heFkgPSBNYXRoLm1heChtYXhZLCB5KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGlmIChjbGlwcGVyKSBjbGlwcGVyLmNsaXBFbmQoc2xvdCk7XG5cdFx0fVxuXHRcdGlmIChjbGlwcGVyKSBjbGlwcGVyLmNsaXBFbmQoKTtcblx0XHRvZmZzZXQuc2V0KG1pblgsIG1pblkpO1xuXHRcdHNpemUuc2V0KG1heFggLSBtaW5YLCBtYXhZIC0gbWluWSk7XG5cdH1cblxuXHQvKiogU2NhbGVzIHRoZSBlbnRpcmUgc2tlbGV0b24gb24gdGhlIFggYW5kIFkgYXhlcy5cblx0ICpcblx0ICogQm9uZXMgdGhhdCBkbyBub3QgaW5oZXJpdCBzY2FsZSBhcmUgc3RpbGwgYWZmZWN0ZWQgYnkgdGhpcyBwcm9wZXJ0eS4gKi9cblx0cHVibGljIHNldFNjYWxlIChzY2FsZVg6IG51bWJlciwgc2NhbGVZOiBudW1iZXIpIHtcblx0XHR0aGlzLnNjYWxlWCA9IHNjYWxlWDtcblx0XHR0aGlzLnNjYWxlWSA9IHNjYWxlWTtcblx0fVxuXG5cdC8qKiBTZXRzIHRoZSBza2VsZXRvbiBYIGFuZCBZIHBvc2l0aW9uLCB3aGljaCBpcyBhZGRlZCB0byB0aGUgcm9vdCBib25lIHdvcmxkWCBhbmQgd29ybGRZIHBvc2l0aW9uLlxuXHQgKlxuXHQgKiBCb25lcyB0aGF0IGRvIG5vdCBpbmhlcml0IHRyYW5zbGF0aW9uIGFyZSBzdGlsbCBhZmZlY3RlZCBieSB0aGlzIHByb3BlcnR5LiAqL1xuXHRwdWJsaWMgc2V0UG9zaXRpb24gKHg6IG51bWJlciwgeTogbnVtYmVyKSB7XG5cdFx0dGhpcy54ID0geDtcblx0XHR0aGlzLnkgPSB5O1xuXHR9XG5cblx0LyoqIEluY3JlbWVudHMgdGhlIHNrZWxldG9uJ3Mge0BsaW5rIHRpbWV9LiAqL1xuXHR1cGRhdGUgKGRlbHRhOiBudW1iZXIpIHtcblx0XHR0aGlzLnRpbWUgKz0gZGVsdGE7XG5cdH1cblxuXHQvKiogQ2FsbHMge0BsaW5rIFBoeXNpY3NDb25zdHJhaW50LnRyYW5zbGF0ZX0gZm9yIGVhY2ggcGh5c2ljcyBjb25zdHJhaW50LiAqL1xuXHRwaHlzaWNzVHJhbnNsYXRlICh4OiBudW1iZXIsIHk6IG51bWJlcikge1xuXHRcdGNvbnN0IGNvbnN0cmFpbnRzID0gdGhpcy5waHlzaWNzO1xuXHRcdGZvciAobGV0IGkgPSAwLCBuID0gY29uc3RyYWludHMubGVuZ3RoOyBpIDwgbjsgaSsrKVxuXHRcdFx0Y29uc3RyYWludHNbaV0udHJhbnNsYXRlKHgsIHkpO1xuXHR9XG5cblx0LyoqIENhbGxzIHtAbGluayBQaHlzaWNzQ29uc3RyYWludC5yb3RhdGV9IGZvciBlYWNoIHBoeXNpY3MgY29uc3RyYWludC4gKi9cblx0cGh5c2ljc1JvdGF0ZSAoeDogbnVtYmVyLCB5OiBudW1iZXIsIGRlZ3JlZXM6IG51bWJlcikge1xuXHRcdGNvbnN0IGNvbnN0cmFpbnRzID0gdGhpcy5waHlzaWNzO1xuXHRcdGZvciAobGV0IGkgPSAwLCBuID0gY29uc3RyYWludHMubGVuZ3RoOyBpIDwgbjsgaSsrKVxuXHRcdFx0Y29uc3RyYWludHNbaV0ucm90YXRlKHgsIHksIGRlZ3JlZXMpO1xuXHR9XG59XG4iXX0=