angular-three-rapier 2.2.1 → 2.3.2

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.
@@ -106,6 +106,12 @@ export class NgtrAnyCollider {
106
106
  const worldSingleton = this.physics.worldSingleton();
107
107
  if (!worldSingleton)
108
108
  return;
109
+ const localState = getLocalState(this.objectRef.nativeElement);
110
+ if (!localState)
111
+ return;
112
+ const parent = localState.parent();
113
+ if (!parent || !parent.isObject3D)
114
+ return;
109
115
  const state = this.createColliderState(collider, this.objectRef.nativeElement, this.rigidBody?.objectRef.nativeElement);
110
116
  this.physics.colliderStates.set(collider.handle, state);
111
117
  return () => {
@@ -341,16 +347,20 @@ export class NgtrRigidBody {
341
347
  if (colliders === false)
342
348
  return [];
343
349
  const physicsColliders = this.physics.colliders();
344
- // if physics colliders is false explicitly, disable auto colliders for this object entirely.
345
- if (physicsColliders === false)
350
+ // if physics colliders is false explicitly AND colliders is not set, disable auto colliders for this object entirely.
351
+ if (physicsColliders === false && colliders === undefined)
346
352
  return [];
347
353
  const options = this.options();
348
354
  // if colliders on object is not set, use physics colliders
349
355
  if (!options.colliders)
350
356
  options.colliders = physicsColliders;
351
357
  const objectLocalState = getLocalState(this.objectRef.nativeElement);
352
- // track object's children
353
- objectLocalState?.nonObjects();
358
+ if (!objectLocalState)
359
+ return [];
360
+ // track object's parent and non-object children
361
+ const [parent] = [objectLocalState.parent(), objectLocalState.nonObjects()];
362
+ if (!parent || !parent.isObject3D)
363
+ return [];
354
364
  return createColliderOptions(this.objectRef.nativeElement, options, true);
355
365
  });
356
366
  constructor() {
@@ -375,6 +385,12 @@ export class NgtrRigidBody {
375
385
  if (!body)
376
386
  return;
377
387
  const transformState = untracked(this.transformState);
388
+ const localState = getLocalState(this.objectRef.nativeElement);
389
+ if (!localState)
390
+ return;
391
+ const parent = localState.parent();
392
+ if (!parent || !parent.isObject3D)
393
+ return;
378
394
  const state = this.createRigidBodyState(body, this.objectRef.nativeElement);
379
395
  this.physics.rigidBodyStates.set(body.handle, transformState ? transformState(state) : state);
380
396
  return () => {
@@ -533,4 +549,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.4", ngImpor
533
549
  imports: [NgtrAnyCollider],
534
550
  }]
535
551
  }], ctorParameters: () => [] });
536
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmlnaWQtYm9keS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvcmFwaWVyL3NyYy9saWIvcmlnaWQtYm9keS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ04sdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxRQUFRLEVBQ1Isc0JBQXNCLEVBQ3RCLFNBQVMsRUFDVCxNQUFNLEVBQ04sVUFBVSxFQUNWLE1BQU0sRUFDTixLQUFLLEVBQ0wsS0FBSyxFQUNMLE1BQU0sRUFDTixTQUFTLEdBQ1QsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFlBQVksRUFBWSxZQUFZLEVBQWEsYUFBYSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDM0csT0FBTyxFQUNOLE1BQU0sRUFDTixVQUFVLEVBQ1YsYUFBYSxFQUNiLFdBQVcsRUFLWCxJQUFJLEdBQ0osTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3ZELE9BQU8sRUFBVyxRQUFRLEVBQUUsT0FBTyxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBQ25ELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDeEMsT0FBTyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFjNUUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sU0FBUyxDQUFDOztBQUVoRCxNQUFNLHNCQUFzQixHQUF3QjtJQUNuRCxXQUFXLEVBQUUsQ0FBQztDQUNkLENBQUM7QUFjRixNQUFNLE9BQU8sZUFBZTtJQUMzQixRQUFRLEdBQUcsS0FBSyxDQUF5QixDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNwRCxRQUFRLEdBQUcsS0FBSyxDQUF1QixDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FB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QkFBbUI7WUFDbkIsU0FBUyxFQUFFLFNBQVM7Z0JBQ25CLENBQUMsQ0FBQyxTQUFTO2dCQUNYLENBQUMsQ0FBQyxDQUFDLE1BQWUsRUFBRSxFQUFFO29CQUNwQixNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDNUIsQ0FBQztZQUNILFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFlLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztZQUNsRixLQUFLLEVBQUUsVUFBVSxJQUFJLE1BQU0sQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFO1lBQ3pELFVBQVUsRUFBRSxLQUFLO1lBQ2pCLFFBQVE7U0FDUixDQUFDO0lBQ0gsQ0FBQzt1R0F4T1csYUFBYTsyRkFBYixhQUFhLDYyQ0F6QmY7Ozs7Ozs7Ozs7Ozs7RUFhVCw0REFuVlcsZUFBZTs7MkZBK1ZmLGFBQWE7a0JBN0J6QixTQUFTO21CQUFDO29CQUNWLFFBQVEsRUFBRSw2QkFBNkI7b0JBQ3ZDLFFBQVEsRUFBRSxXQUFXO29CQUNyQixVQUFVLEVBQUUsSUFBSTtvQkFDaEIsUUFBUSxFQUFFOzs7Ozs7Ozs7Ozs7O0VBYVQ7b0JBQ0QsT0FBTyxFQUFFLENBQUMsc0JBQXNCLENBQUM7b0JBQ2pDLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO29CQUMvQyxJQUFJLEVBQUU7d0JBQ0wsWUFBWSxFQUFFLFlBQVk7d0JBQzFCLFlBQVksRUFBRSxZQUFZO3dCQUMxQixTQUFTLEVBQUUsU0FBUzt3QkFDcEIsY0FBYyxFQUFFLGNBQWM7d0JBQzlCLFlBQVksRUFBRSxZQUFZO3FCQUMxQjtvQkFDRCxPQUFPLEVBQUUsQ0FBQyxlQUFlLENBQUM7aUJBQzFCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcblx0Q2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG5cdENvbXBvbmVudCxcblx0Y29tcHV0ZWQsXG5cdENVU1RPTV9FTEVNRU5UU19TQ0hFTUEsXG5cdERpcmVjdGl2ZSxcblx0ZWZmZWN0LFxuXHRFbGVtZW50UmVmLFxuXHRpbmplY3QsXG5cdGlucHV0LFxuXHRtb2RlbCxcblx0b3V0cHV0LFxuXHR1bnRyYWNrZWQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWN0aXZlRXZlbnRzLCBDb2xsaWRlciwgQ29sbGlkZXJEZXNjLCBSaWdpZEJvZHksIFJpZ2lkQm9keURlc2MgfSBmcm9tICdAZGltZm9yZ2UvcmFwaWVyM2QtY29tcGF0JztcbmltcG9ydCB7XG5cdGV4dGVuZCxcblx0Z2V0RW1pdHRlcixcblx0Z2V0TG9jYWxTdGF0ZSxcblx0aGFzTGlzdGVuZXIsXG5cdE5ndEV1bGVyLFxuXHROZ3RPYmplY3QzRCxcblx0Tmd0UXVhdGVybmlvbixcblx0Tmd0VmVjdG9yMyxcblx0cGljayxcbn0gZnJvbSAnYW5ndWxhci10aHJlZSc7XG5pbXBvcnQgeyBtZXJnZUlucHV0cyB9IGZyb20gJ25neHRlbnNpb24vaW5qZWN0LWlucHV0cyc7XG5pbXBvcnQgeyBNYXRyaXg0LCBPYmplY3QzRCwgVmVjdG9yMyB9IGZyb20gJ3RocmVlJztcbmltcG9ydCB7IE5ndHJQaHlzaWNzIH0gZnJvbSAnLi9waHlzaWNzJztcbmltcG9ydCB7IF9tYXRyaXg0LCBfcG9zaXRpb24sIF9yb3RhdGlvbiwgX3NjYWxlLCBfdmVjdG9yMyB9IGZyb20gJy4vc2hhcmVkJztcbmltcG9ydCB7XG5cdE5ndHJDb2xsaWRlck9wdGlvbnMsXG5cdE5ndHJDb2xsaWRlclNoYXBlLFxuXHROZ3RyQ29sbGlkZXJTdGF0ZSxcblx0Tmd0ckNvbGxpc2lvbkVudGVyUGF5bG9hZCxcblx0Tmd0ckNvbGxpc2lvbkV4aXRQYXlsb2FkLFxuXHROZ3RyQ29udGFjdEZvcmNlUGF5bG9hZCxcblx0Tmd0ckludGVyc2VjdGlvbkVudGVyUGF5bG9hZCxcblx0Tmd0ckludGVyc2VjdGlvbkV4aXRQYXlsb2FkLFxuXHROZ3RyUmlnaWRCb2R5T3B0aW9ucyxcblx0Tmd0clJpZ2lkQm9keVN0YXRlLFxuXHROZ3RyUmlnaWRCb2R5VHlwZSxcbn0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyBjcmVhdGVDb2xsaWRlck9wdGlvbnMgfSBmcm9tICcuL3V0aWxzJztcblxuY29uc3QgY29sbGlkZXJEZWZhdWx0T3B0aW9uczogTmd0ckNvbGxpZGVyT3B0aW9ucyA9IHtcblx0Y29udGFjdFNraW46IDAsXG59O1xuXG5ARGlyZWN0aXZlKHtcblx0c2VsZWN0b3I6ICduZ3Qtb2JqZWN0M0Rbbmd0ckNvbGxpZGVyXScsXG5cdHN0YW5kYWxvbmU6IHRydWUsXG5cdGhvc3Q6IHtcblx0XHQnW3Bvc2l0aW9uXSc6ICdwb3NpdGlvbigpJyxcblx0XHQnW3JvdGF0aW9uXSc6ICdyb3RhdGlvbigpJyxcblx0XHQnW3NjYWxlXSc6ICdzY2FsZSgpJyxcblx0XHQnW3F1YXRlcm5pb25dJzogJ3F1YXRlcm5pb24oKScsXG5cdFx0J1t1c2VyRGF0YV0nOiAndXNlckRhdGEoKScsXG5cdFx0J1tuYW1lXSc6ICduYW1lKCknLFxuXHR9LFxufSlcbmV4cG9ydCBjbGFzcyBOZ3RyQW55Q29sbGlkZXIge1xuXHRwb3NpdGlvbiA9IGlucHV0PE5ndFZlY3RvcjMgfCB1bmRlZmluZWQ+KFswLCAwLCAwXSk7XG5cdHJvdGF0aW9uID0gaW5wdXQ8Tmd0RXVsZXIgfCB1bmRlZmluZWQ+KFswLCAwLCAwXSk7XG5cdHNjYWxlID0gaW5wdXQ8Tmd0VmVjdG9yMyB8IHVuZGVmaW5lZD4oWzEsIDEsIDFdKTtcblx0cXVhdGVybmlvbiA9IGlucHV0PE5ndFF1YXRlcm5pb24gfCB1bmRlZmluZWQ+KFswLCAwLCAwLCAxXSk7XG5cdHVzZXJEYXRhID0gaW5wdXQ8Tmd0T2JqZWN0M0RbJ3VzZXJEYXRhJ10gfCB1bmRlZmluZWQ+KHt9KTtcblx0bmFtZSA9IGlucHV0PE5ndE9iamVjdDNEWyduYW1lJ10gfCB1bmRlZmluZWQ+KCk7XG5cdG9wdGlvbnMgPSBpbnB1dChjb2xsaWRlckRlZmF1bHRPcHRpb25zLCB7IHRyYW5zZm9ybTogbWVyZ2VJbnB1dHMocmlnaWRCb2R5RGVmYXVsdE9wdGlvbnMpIH0pO1xuXG5cdC8vIFRPRE86IGNoYW5nZSB0aGlzIHRvIGlucHV0IHJlcXVpcmVkIHdoZW4gQW5ndWxhciBhbGxvd3Mgc2V0dGluZyBob3N0RGlyZWN0aXZlIGlucHV0XG5cdHNoYXBlID0gbW9kZWw8Tmd0ckNvbGxpZGVyU2hhcGUgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCwgeyBhbGlhczogJ25ndHJDb2xsaWRlcicgfSk7XG5cdGFyZ3MgPSBtb2RlbDx1bmtub3duW10+KFtdKTtcblxuXHRjb2xsaXNpb25FbnRlciA9IG91dHB1dDxOZ3RyQ29sbGlzaW9uRW50ZXJQYXlsb2FkPigpO1xuXHRjb2xsaXNpb25FeGl0ID0gb3V0cHV0PE5ndHJDb2xsaXNpb25FeGl0UGF5bG9hZD4oKTtcblx0aW50ZXJzZWN0aW9uRW50ZXIgPSBvdXRwdXQ8Tmd0ckludGVyc2VjdGlvbkVudGVyUGF5bG9hZD4oKTtcblx0aW50ZXJzZWN0aW9uRXhpdCA9IG91dHB1dDxOZ3RySW50ZXJzZWN0aW9uRXhpdFBheWxvYWQ+KCk7XG5cdGNvbnRhY3RGb3JjZSA9IG91dHB1dDxOZ3RyQ29udGFjdEZvcmNlUGF5bG9hZD4oKTtcblxuXHRwcml2YXRlIHNlbnNvciA9IHBpY2sodGhpcy5vcHRpb25zLCAnc2Vuc29yJyk7XG5cdHByaXZhdGUgY29sbGlzaW9uR3JvdXBzID0gcGljayh0aGlzLm9wdGlvbnMsICdjb2xsaXNpb25Hcm91cHMnKTtcblx0cHJpdmF0ZSBzb2x2ZXJHcm91cHMgPSBwaWNrKHRoaXMub3B0aW9ucywgJ3NvbHZlckdyb3VwcycpO1xuXHRwcml2YXRlIGZyaWN0aW9uID0gcGljayh0aGlzLm9wdGlvbnMsICdmcmljdGlvbicpO1xuXHRwcml2YXRlIGZyaWN0aW9uQ29tYmluZVJ1bGUgPSBwaWNrKHRoaXMub3B0aW9ucywgJ2ZyaWN0aW9uQ29tYmluZVJ1bGUnKTtcblx0cHJpdmF0ZSByZXN0aXR1dGlvbiA9IHBpY2sodGhpcy5vcHRpb25zLCAncmVzdGl0dXRpb24nKTtcblx0cHJpdmF0ZSByZXN0aXR1dGlvbkNvbWJpbmVSdWxlID0gcGljayh0aGlzLm9wdGlvbnMsICdyZXN0aXR1dGlvbkNvbWJpbmVSdWxlJyk7XG5cdHByaXZhdGUgYWN0aXZlQ29sbGlzaW9uVHlwZXMgPSBwaWNrKHRoaXMub3B0aW9ucywgJ2FjdGl2ZUNvbGxpc2lvblR5cGVzJyk7XG5cdHByaXZhdGUgY29udGFjdFNraW4gPSBwaWNrKHRoaXMub3B0aW9ucywgJ2NvbnRhY3RTa2luJyk7XG5cdHByaXZhdGUgbWFzcyA9IHBpY2sodGhpcy5vcHRpb25zLCAnbWFzcycpO1xuXHRwcml2YXRlIG1hc3NQcm9wZXJ0aWVzID0gcGljayh0aGlzLm9wdGlvbnMsICdtYXNzUHJvcGVydGllcycpO1xuXHRwcml2YXRlIGRlbnNpdHkgPSBwaWNrKHRoaXMub3B0aW9ucywgJ2RlbnNpdHknKTtcblxuXHRwcml2YXRlIHJpZ2lkQm9keSA9IGluamVjdChOZ3RyUmlnaWRCb2R5LCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuXHRwcml2YXRlIHBoeXNpY3MgPSBpbmplY3QoTmd0clBoeXNpY3MpO1xuXHRvYmplY3RSZWYgPSBpbmplY3Q8RWxlbWVudFJlZjxPYmplY3QzRD4+KEVsZW1lbnRSZWYpO1xuXG5cdHByaXZhdGUgc2NhbGVkQXJncyA9IGNvbXB1dGVkKCgpID0+IHtcblx0XHRjb25zdCBbc2hhcGUsIGFyZ3NdID0gW1xuXHRcdFx0dGhpcy5zaGFwZSgpLFxuXHRcdFx0dGhpcy5hcmdzKCkgYXMgKG51bWJlciB8IEFycmF5TGlrZTxudW1iZXI+IHwgeyB4OiBudW1iZXI7IHk6IG51bWJlcjsgejogbnVtYmVyIH0pW10sXG5cdFx0XTtcblxuXHRcdGNvbnN0IGNsb25lZCA9IGFyZ3Muc2xpY2UoKTtcblxuXHRcdC8vIEhlaWdodGZpZWxkIHVzZXMgYSB2ZWN0b3Jcblx0XHRpZiAoc2hhcGUgPT09ICdoZWlnaHRmaWVsZCcpIHtcblx0XHRcdGNvbnN0IHMgPSBjbG9uZWRbM10gYXMgeyB4OiBudW1iZXI7IHk6IG51bWJlcjsgejogbnVtYmVyIH07XG5cdFx0XHRzLnggKj0gdGhpcy53b3JsZFNjYWxlLng7XG5cdFx0XHRzLnkgKj0gdGhpcy53b3JsZFNjYWxlLnk7XG5cdFx0XHRzLnogKj0gdGhpcy53b3JsZFNjYWxlLno7XG5cblx0XHRcdHJldHVybiBjbG9uZWQ7XG5cdFx0fVxuXG5cdFx0Ly8gVHJpbWVzaCBhbmQgY29udmV4IHNjYWxlIHRoZSB2ZXJ0aWNlc1xuXHRcdGlmIChzaGFwZSA9PT0gJ3RyaW1lc2gnIHx8IHNoYXBlID09PSAnY29udmV4SHVsbCcpIHtcblx0XHRcdGNsb25lZFswXSA9IHRoaXMuc2NhbGVWZXJ0aWNlcyhjbG9uZWRbMF0gYXMgQXJyYXlMaWtlPG51bWJlcj4sIHRoaXMud29ybGRTY2FsZSk7XG5cdFx0XHRyZXR1cm4gY2xvbmVkO1xuXHRcdH1cblxuXHRcdC8vIHByZWZpbGwgd2l0aCBzb21lIGV4dHJhXG5cdFx0Y29uc3Qgc2NhbGVBcnJheSA9IFt0aGlzLndvcmxkU2NhbGUueCwgdGhpcy53b3JsZFNjYWxlLnksIHRoaXMud29ybGRTY2FsZS56LCB0aGlzLndvcmxkU2NhbGUueCwgdGhpcy53b3JsZFNjYWxlLnhdO1xuXHRcdHJldHVybiBjbG9uZWQubWFwKChhcmcsIGluZGV4KSA9PiBzY2FsZUFycmF5W2luZGV4XSAqIChhcmcgYXMgbnVtYmVyKSk7XG5cdH0pO1xuXG5cdHByaXZhdGUgY29sbGlkZXIgPSBjb21wdXRlZCgoKSA9PiB7XG5cdFx0Y29uc3Qgd29ybGRTaW5nbGV0b24gPSB0aGlzLnBoeXNpY3Mud29ybGRTaW5nbGV0b24oKTtcblx0XHRpZiAoIXdvcmxkU2luZ2xldG9uKSByZXR1cm4gbnVsbDtcblxuXHRcdGNvbnN0IFtzaGFwZSwgYXJncywgcmlnaWRCb2R5XSA9IFt0aGlzLnNoYXBlKCksIHRoaXMuc2NhbGVkQXJncygpLCB0aGlzLnJpZ2lkQm9keT8ucmlnaWRCb2R5KCldO1xuXG5cdFx0Ly8gQHRzLWV4cGVjdC1lcnJvciAtIHdlIGtub3cgdGhlIHR5cGUgb2YgdGhlIGRhdGFcblx0XHRjb25zdCBkZXNjID0gQ29sbGlkZXJEZXNjW3NoYXBlXSguLi5hcmdzKTtcblx0XHRpZiAoIWRlc2MpIHJldHVybiBudWxsO1xuXG5cdFx0cmV0dXJuIHdvcmxkU2luZ2xldG9uLnByb3h5LmNyZWF0ZUNvbGxpZGVyKGRlc2MsIHJpZ2lkQm9keSA/PyB1bmRlZmluZWQpO1xuXHR9KTtcblxuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRleHRlbmQoeyBPYmplY3QzRCB9KTtcblxuXHRcdGVmZmVjdCgob25DbGVhbnVwKSA9PiB7XG5cdFx0XHRjb25zdCBjbGVhbnVwID0gdGhpcy5jcmVhdGVDb2xsaWRlclN0YXRlRWZmZWN0KCk7XG5cdFx0XHRvbkNsZWFudXAoKCkgPT4gY2xlYW51cD8uKCkpO1xuXHRcdH0pO1xuXG5cdFx0ZWZmZWN0KChvbkNsZWFudXApID0+IHtcblx0XHRcdGNvbnN0IGNsZWFudXAgPSB0aGlzLmNyZWF0ZUNvbGxpZGVyRXZlbnRzRWZmZWN0KCk7XG5cdFx0XHRvbkNsZWFudXAoKCkgPT4gY2xlYW51cD8uKCkpO1xuXHRcdH0pO1xuXG5cdFx0ZWZmZWN0KCgpID0+IHtcblx0XHRcdHRoaXMudXBkYXRlQ29sbGlkZXJFZmZlY3QoKTtcblx0XHRcdHRoaXMudXBkYXRlTWFzc1Byb3BlcnRpZXNFZmZlY3QoKTtcblx0XHR9KTtcblx0fVxuXG5cdGdldCB3b3JsZFNjYWxlKCkge1xuXHRcdHJldHVybiB0aGlzLm9iamVjdFJlZi5uYXRpdmVFbGVtZW50LmdldFdvcmxkU2NhbGUobmV3IFZlY3RvcjMoKSk7XG5cdH1cblxuXHRzZXRTaGFwZShzaGFwZTogTmd0ckNvbGxpZGVyU2hhcGUpIHtcblx0XHR0aGlzLnNoYXBlLnNldChzaGFwZSk7XG5cdH1cblxuXHRzZXRBcmdzKGFyZ3M6IHVua25vd25bXSkge1xuXHRcdHRoaXMuYXJncy5zZXQoYXJncyk7XG5cdH1cblxuXHRwcml2YXRlIGNyZWF0ZUNvbGxpZGVyU3RhdGVFZmZlY3QoKSB7XG5cdFx0Y29uc3QgY29sbGlkZXIgPSB0aGlzLmNvbGxpZGVyKCk7XG5cdFx0aWYgKCFjb2xsaWRlcikgcmV0dXJuO1xuXG5cdFx0Y29uc3Qgd29ybGRTaW5nbGV0b24gPSB0aGlzLnBoeXNpY3Mud29ybGRTaW5nbGV0b24oKTtcblx0XHRpZiAoIXdvcmxkU2luZ2xldG9uKSByZXR1cm47XG5cblx0XHRjb25zdCBzdGF0ZSA9IHRoaXMuY3JlYXRlQ29sbGlkZXJTdGF0ZShcblx0XHRcdGNvbGxpZGVyLFxuXHRcdFx0dGhpcy5vYmplY3RSZWYubmF0aXZlRWxlbWVudCxcblx0XHRcdHRoaXMucmlnaWRCb2R5Py5vYmplY3RSZWYubmF0aXZlRWxlbWVudCxcblx0XHQpO1xuXHRcdHRoaXMucGh5c2ljcy5jb2xsaWRlclN0YXRlcy5zZXQoY29sbGlkZXIuaGFuZGxlLCBzdGF0ZSk7XG5cblx0XHRyZXR1cm4gKCkgPT4ge1xuXHRcdFx0dGhpcy5waHlzaWNzLmNvbGxpZGVyU3RhdGVzLmRlbGV0ZShjb2xsaWRlci5oYW5kbGUpO1xuXHRcdFx0aWYgKHdvcmxkU2luZ2xldG9uLnByb3h5LmdldENvbGxpZGVyKGNvbGxpZGVyLmhhbmRsZSkpIHtcblx0XHRcdFx0d29ybGRTaW5nbGV0b24ucHJveHkucmVtb3ZlQ29sbGlkZXIoY29sbGlkZXIsIHRydWUpO1xuXHRcdFx0fVxuXHRcdH07XG5cdH1cblxuXHRwcml2YXRlIGNyZWF0ZUNvbGxpZGVyRXZlbnRzRWZmZWN0KCkge1xuXHRcdGNvbnN0IGNvbGxpZGVyID0gdGhpcy5jb2xsaWRlcigpO1xuXHRcdGlmICghY29sbGlkZXIpIHJldHVybjtcblxuXHRcdGNvbnN0IHdvcmxkU2luZ2xldG9uID0gdGhpcy5waHlzaWNzLndvcmxkU2luZ2xldG9uKCk7XG5cdFx0aWYgKCF3b3JsZFNpbmdsZXRvbikgcmV0dXJuO1xuXG5cdFx0Y29uc3QgY29sbGlzaW9uRW50ZXIgPSBnZXRFbWl0dGVyKHRoaXMuY29sbGlzaW9uRW50ZXIpO1xuXHRcdGNvbnN0IGNvbGxpc2lvbkV4aXQgPSBnZXRFbWl0dGVyKHRoaXMuY29sbGlzaW9uRXhpdCk7XG5cdFx0Y29uc3QgaW50ZXJzZWN0aW9uRW50ZXIgPSBnZXRFbWl0dGVyKHRoaXMuaW50ZXJzZWN0aW9uRW50ZXIpO1xuXHRcdGNvbnN0IGludGVyc2VjdGlvbkV4aXQgPSBnZXRFbWl0dGVyKHRoaXMuaW50ZXJzZWN0aW9uRXhpdCk7XG5cdFx0Y29uc3QgY29udGFjdEZvcmNlID0gZ2V0RW1pdHRlcih0aGlzLmNvbnRhY3RGb3JjZSk7XG5cblx0XHRjb25zdCBoYXNDb2xsaXNpb25FdmVudCA9IGhhc0xpc3RlbmVyKFxuXHRcdFx0dGhpcy5jb2xsaXNpb25FbnRlcixcblx0XHRcdHRoaXMuY29sbGlzaW9uRXhpdCxcblx0XHRcdHRoaXMuaW50ZXJzZWN0aW9uRW50ZXIsXG5cdFx0XHR0aGlzLmludGVyc2VjdGlvbkV4aXQsXG5cdFx0XHR0aGlzLnJpZ2lkQm9keT8uY29sbGlzaW9uRW50ZXIsXG5cdFx0XHR0aGlzLnJpZ2lkQm9keT8uY29sbGlzaW9uRXhpdCxcblx0XHRcdHRoaXMucmlnaWRCb2R5Py5pbnRlcnNlY3Rpb25FbnRlcixcblx0XHRcdHRoaXMucmlnaWRCb2R5Py5pbnRlcnNlY3Rpb25FeGl0LFxuXHRcdCk7XG5cdFx0Y29uc3QgaGFzQ29udGFjdEZvcmNlRXZlbnQgPSBoYXNMaXN0ZW5lcih0aGlzLmNvbnRhY3RGb3JjZSwgdGhpcy5yaWdpZEJvZHk/LmNvbnRhY3RGb3JjZSk7XG5cblx0XHRpZiAoaGFzQ29sbGlzaW9uRXZlbnQgJiYgaGFzQ29udGFjdEZvcmNlRXZlbnQpIHtcblx0XHRcdGNvbGxpZGVyLnNldEFjdGl2ZUV2ZW50cyhBY3RpdmVFdmVudHMuQ09MTElTSU9OX0VWRU5UUyB8IEFjdGl2ZUV2ZW50cy5DT05UQUNUX0ZPUkNFX0VWRU5UUyk7XG5cdFx0fSBlbHNlIGlmIChoYXNDb2xsaXNpb25FdmVudCkge1xuXHRcdFx0Y29sbGlkZXIuc2V0QWN0aXZlRXZlbnRzKEFjdGl2ZUV2ZW50cy5DT0xMSVNJT05fRVZFTlRTKTtcblx0XHR9IGVsc2UgaWYgKGhhc0NvbnRhY3RGb3JjZUV2ZW50KSB7XG5cdFx0XHRjb2xsaWRlci5zZXRBY3RpdmVFdmVudHMoQWN0aXZlRXZlbnRzLkNPTlRBQ1RfRk9SQ0VfRVZFTlRTKTtcblx0XHR9XG5cblx0XHR0aGlzLnBoeXNpY3MuY29sbGlkZXJFdmVudHMuc2V0KGNvbGxpZGVyLmhhbmRsZSwge1xuXHRcdFx0b25Db2xsaXNpb25FbnRlcjogY29sbGlzaW9uRW50ZXIsXG5cdFx0XHRvbkNvbGxpc2lvbkV4aXQ6IGNvbGxpc2lvbkV4aXQsXG5cdFx0XHRvbkludGVyc2VjdGlvbkVudGVyOiBpbnRlcnNlY3Rpb25FbnRlcixcblx0XHRcdG9uSW50ZXJzZWN0aW9uRXhpdDogaW50ZXJzZWN0aW9uRXhpdCxcblx0XHRcdG9uQ29udGFjdEZvcmNlOiBjb250YWN0Rm9yY2UsXG5cdFx0fSk7XG5cdFx0cmV0dXJuICgpID0+IHtcblx0XHRcdHRoaXMucGh5c2ljcy5jb2xsaWRlckV2ZW50cy5kZWxldGUoY29sbGlkZXIuaGFuZGxlKTtcblx0XHR9O1xuXHR9XG5cblx0cHJpdmF0ZSB1cGRhdGVDb2xsaWRlckVmZmVjdCgpIHtcblx0XHRjb25zdCBjb2xsaWRlciA9IHRoaXMuY29sbGlkZXIoKTtcblx0XHRpZiAoIWNvbGxpZGVyKSByZXR1cm47XG5cblx0XHRjb25zdCB3b3JsZFNpbmdsZXRvbiA9IHRoaXMucGh5c2ljcy53b3JsZFNpbmdsZXRvbigpO1xuXHRcdGlmICghd29ybGRTaW5nbGV0b24pIHJldHVybjtcblxuXHRcdGNvbnN0IHN0YXRlID0gdGhpcy5waHlzaWNzLmNvbGxpZGVyU3RhdGVzLmdldChjb2xsaWRlci5oYW5kbGUpO1xuXHRcdGlmICghc3RhdGUpIHJldHVybjtcblxuXHRcdC8vIFVwZGF0ZSBjb2xsaWRlciBwb3NpdGlvbiBiYXNlZCBvbiB0aGUgb2JqZWN0J3MgcG9zaXRpb25cblx0XHRjb25zdCBwYXJlbnRXb3JsZFNjYWxlID0gc3RhdGUub2JqZWN0LnBhcmVudCEuZ2V0V29ybGRTY2FsZShfdmVjdG9yMyk7XG5cdFx0Y29uc3QgcGFyZW50SW52ZXJ0ZWRXb3JsZE1hdHJpeCA9IHN0YXRlLndvcmxkUGFyZW50Py5tYXRyaXhXb3JsZC5jbG9uZSgpLmludmVydCgpO1xuXG5cdFx0c3RhdGUub2JqZWN0LnVwZGF0ZVdvcmxkTWF0cml4KHRydWUsIGZhbHNlKTtcblxuXHRcdF9tYXRyaXg0LmNvcHkoc3RhdGUub2JqZWN0Lm1hdHJpeFdvcmxkKTtcblxuXHRcdGlmIChwYXJlbnRJbnZlcnRlZFdvcmxkTWF0cml4KSB7XG5cdFx0XHRfbWF0cml4NC5wcmVtdWx0aXBseShwYXJlbnRJbnZlcnRlZFdvcmxkTWF0cml4KTtcblx0XHR9XG5cblx0XHRfbWF0cml4NC5kZWNvbXBvc2UoX3Bvc2l0aW9uLCBfcm90YXRpb24sIF9zY2FsZSk7XG5cblx0XHRpZiAoY29sbGlkZXIucGFyZW50KCkpIHtcblx0XHRcdGNvbGxpZGVyLnNldFRyYW5zbGF0aW9uV3J0UGFyZW50KHtcblx0XHRcdFx0eDogX3Bvc2l0aW9uLnggKiBwYXJlbnRXb3JsZFNjYWxlLngsXG5cdFx0XHRcdHk6IF9wb3NpdGlvbi55ICogcGFyZW50V29ybGRTY2FsZS55LFxuXHRcdFx0XHR6OiBfcG9zaXRpb24ueiAqIHBhcmVudFdvcmxkU2NhbGUueixcblx0XHRcdH0pO1xuXHRcdFx0Y29sbGlkZXIuc2V0Um90YXRpb25XcnRQYXJlbnQoX3JvdGF0aW9uKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29sbGlkZXIuc2V0VHJhbnNsYXRpb24oe1xuXHRcdFx0XHR4OiBfcG9zaXRpb24ueCAqIHBhcmVudFdvcmxkU2NhbGUueCxcblx0XHRcdFx0eTogX3Bvc2l0aW9uLnkgKiBwYXJlbnRXb3JsZFNjYWxlLnksXG5cdFx0XHRcdHo6IF9wb3NpdGlvbi56ICogcGFyZW50V29ybGRTY2FsZS56LFxuXHRcdFx0fSk7XG5cdFx0XHRjb2xsaWRlci5zZXRSb3RhdGlvbihfcm90YXRpb24pO1xuXHRcdH1cblxuXHRcdGNvbnN0IFtcblx0XHRcdHNlbnNvcixcblx0XHRcdGNvbGxpc2lvbkdyb3Vwcyxcblx0XHRcdHNvbHZlckdyb3Vwcyxcblx0XHRcdGZyaWN0aW9uLFxuXHRcdFx0ZnJpY3Rpb25Db21iaW5lUnVsZSxcblx0XHRcdHJlc3RpdHV0aW9uLFxuXHRcdFx0cmVzdGl0dXRpb25Db21iaW5lUnVsZSxcblx0XHRcdGFjdGl2ZUNvbGxpc2lvblR5cGVzLFxuXHRcdFx0Y29udGFjdFNraW4sXG5cdFx0XSA9IFtcblx0XHRcdHRoaXMuc2Vuc29yKCksXG5cdFx0XHR0aGlzLmNvbGxpc2lvbkdyb3VwcygpLFxuXHRcdFx0dGhpcy5zb2x2ZXJHcm91cHMoKSxcblx0XHRcdHRoaXMuZnJpY3Rpb24oKSxcblx0XHRcdHRoaXMuZnJpY3Rpb25Db21iaW5lUnVsZSgpLFxuXHRcdFx0dGhpcy5yZXN0aXR1dGlvbigpLFxuXHRcdFx0dGhpcy5yZXN0aXR1dGlvbkNvbWJpbmVSdWxlKCksXG5cdFx0XHR0aGlzLmFjdGl2ZUNvbGxpc2lvblR5cGVzKCksXG5cdFx0XHR0aGlzLmNvbnRhY3RTa2luKCksXG5cdFx0XTtcblxuXHRcdGlmIChzZW5zb3IgIT09IHVuZGVmaW5lZCkgY29sbGlkZXIuc2V0U2Vuc29yKHNlbnNvcik7XG5cdFx0aWYgKGNvbGxpc2lvbkdyb3VwcyAhPT0gdW5kZWZpbmVkKSBjb2xsaWRlci5zZXRDb2xsaXNpb25Hcm91cHMoY29sbGlzaW9uR3JvdXBzKTtcblx0XHRpZiAoc29sdmVyR3JvdXBzICE9PSB1bmRlZmluZWQpIGNvbGxpZGVyLnNldFNvbHZlckdyb3Vwcyhzb2x2ZXJHcm91cHMpO1xuXHRcdGlmIChmcmljdGlvbiAhPT0gdW5kZWZpbmVkKSBjb2xsaWRlci5zZXRGcmljdGlvbihmcmljdGlvbik7XG5cdFx0aWYgKGZyaWN0aW9uQ29tYmluZVJ1bGUgIT09IHVuZGVmaW5lZCkgY29sbGlkZXIuc2V0RnJpY3Rpb25Db21iaW5lUnVsZShmcmljdGlvbkNvbWJpbmVSdWxlKTtcblx0XHRpZiAocmVzdGl0dXRpb24gIT09IHVuZGVmaW5lZCkgY29sbGlkZXIuc2V0UmVzdGl0dXRpb24ocmVzdGl0dXRpb24pO1xuXHRcdGlmIChyZXN0aXR1dGlvbkNvbWJpbmVSdWxlICE9PSB1bmRlZmluZWQpIGNvbGxpZGVyLnNldFJlc3RpdHV0aW9uQ29tYmluZVJ1bGUocmVzdGl0dXRpb25Db21iaW5lUnVsZSk7XG5cdFx0aWYgKGFjdGl2ZUNvbGxpc2lvblR5cGVzICE9PSB1bmRlZmluZWQpIGNvbGxpZGVyLnNldEFjdGl2ZUNvbGxpc2lvblR5cGVzKGFjdGl2ZUNvbGxpc2lvblR5cGVzKTtcblx0XHRpZiAoY29udGFjdFNraW4gIT09IHVuZGVmaW5lZCkgY29sbGlkZXIuc2V0Q29udGFjdFNraW4oY29udGFjdFNraW4pO1xuXHR9XG5cblx0cHJpdmF0ZSB1cGRhdGVNYXNzUHJvcGVydGllc0VmZmVjdCgpIHtcblx0XHRjb25zdCBjb2xsaWRlciA9IHRoaXMuY29sbGlkZXIoKTtcblx0XHRpZiAoIWNvbGxpZGVyKSByZXR1cm47XG5cblx0XHRjb25zdCBbbWFzcywgbWFzc1Byb3BlcnRpZXMsIGRlbnNpdHldID0gW3RoaXMubWFzcygpLCB0aGlzLm1hc3NQcm9wZXJ0aWVzKCksIHRoaXMuZGVuc2l0eSgpXTtcblxuXHRcdGlmIChkZW5zaXR5ICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGlmIChtYXNzICE9PSB1bmRlZmluZWQgfHwgbWFzc1Byb3BlcnRpZXMgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ1tOR1QgUmFwaWVyXSBDYW5ub3Qgc2V0IG1hc3MgYW5kIG1hc3NQcm9wZXJ0aWVzIGFsb25nIHdpdGggZGVuc2l0eScpO1xuXHRcdFx0fVxuXG5cdFx0XHRjb2xsaWRlci5zZXREZW5zaXR5KGRlbnNpdHkpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmIChtYXNzICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGlmIChtYXNzUHJvcGVydGllcyAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcignW05HVCBSYXBpZXJdIENhbm5vdCBzZXQgbWFzc1Byb3BlcnRpZXMgYWxvbmcgd2l0aCBtYXNzJyk7XG5cdFx0XHR9XG5cdFx0XHRjb2xsaWRlci5zZXRNYXNzKG1hc3MpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmIChtYXNzUHJvcGVydGllcyAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRjb2xsaWRlci5zZXRNYXNzUHJvcGVydGllcyhcblx0XHRcdFx0bWFzc1Byb3BlcnRpZXMubWFzcyxcblx0XHRcdFx0bWFzc1Byb3BlcnRpZXMuY2VudGVyT2ZNYXNzLFxuXHRcdFx0XHRtYXNzUHJvcGVydGllcy5wcmluY2lwYWxBbmd1bGFySW5lcnRpYSxcblx0XHRcdFx0bWFzc1Byb3BlcnRpZXMuYW5ndWxhckluZXJ0aWFMb2NhbEZyYW1lLFxuXHRcdFx0KTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIGNyZWF0ZUNvbGxpZGVyU3RhdGUoXG5cdFx0Y29sbGlkZXI6IENvbGxpZGVyLFxuXHRcdG9iamVjdDogT2JqZWN0M0QsXG5cdFx0cmlnaWRCb2R5T2JqZWN0PzogT2JqZWN0M0QgfCBudWxsLFxuXHQpOiBOZ3RyQ29sbGlkZXJTdGF0ZSB7XG5cdFx0cmV0dXJuIHsgY29sbGlkZXIsIHdvcmxkUGFyZW50OiByaWdpZEJvZHlPYmplY3QgfHwgdW5kZWZpbmVkLCBvYmplY3QgfTtcblx0fVxuXG5cdHByaXZhdGUgc2NhbGVWZXJ0aWNlcyh2ZXJ0aWNlczogQXJyYXlMaWtlPG51bWJlcj4sIHNjYWxlOiBWZWN0b3IzKSB7XG5cdFx0Y29uc3Qgc2NhbGVkVmVydHMgPSBBcnJheS5mcm9tKHZlcnRpY2VzKTtcblxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgdmVydGljZXMubGVuZ3RoIC8gMzsgaSsrKSB7XG5cdFx0XHRzY2FsZWRWZXJ0c1tpICogM10gKj0gc2NhbGUueDtcblx0XHRcdHNjYWxlZFZlcnRzW2kgKiAzICsgMV0gKj0gc2NhbGUueTtcblx0XHRcdHNjYWxlZFZlcnRzW2kgKiAzICsgMl0gKj0gc2NhbGUuejtcblx0XHR9XG5cblx0XHRyZXR1cm4gc2NhbGVkVmVydHM7XG5cdH1cbn1cblxuY29uc3QgUklHSURfQk9EWV9UWVBFX01BUDogUmVjb3JkPE5ndHJSaWdpZEJvZHlUeXBlLCBudW1iZXI+ID0ge1xuXHRmaXhlZDogMSxcblx0ZHluYW1pYzogMCxcblx0a2luZW1hdGljUG9zaXRpb246IDIsXG5cdGtpbmVtYXRpY1ZlbG9jaXR5OiAzLFxufTtcblxuZXhwb3J0IGNvbnN0IHJpZ2lkQm9keURlZmF1bHRPcHRpb25zOiBOZ3RyUmlnaWRCb2R5T3B0aW9ucyA9IHtcblx0Y2FuU2xlZXA6IHRydWUsXG5cdGxpbmVhclZlbG9jaXR5OiBbMCwgMCwgMF0sXG5cdGFuZ3VsYXJWZWxvY2l0eTogWzAsIDAsIDBdLFxuXHRncmF2aXR5U2NhbGU6IDEsXG5cdGRvbWluYW5jZUdyb3VwOiAwLFxuXHRjY2Q6IGZhbHNlLFxuXHRzb2Z0Q2NkUHJlZGljdGlvbjogMCxcblx0Y29udGFjdFNraW46IDAsXG59O1xuXG5AQ29tcG9uZW50KHtcblx0c2VsZWN0b3I6ICduZ3Qtb2JqZWN0M0Rbbmd0clJpZ2lkQm9keV0nLFxuXHRleHBvcnRBczogJ3JpZ2lkQm9keScsXG5cdHN0YW5kYWxvbmU6IHRydWUsXG5cdHRlbXBsYXRlOiBgXG5cdFx0PG5nLWNvbnRlbnQgLz5cblx0XHRAZm9yIChjaGlsZENvbGxpZGVyT3B0aW9uIG9mIGNoaWxkQ29sbGlkZXJPcHRpb25zKCk7IHRyYWNrICRpbmRleCkge1xuXHRcdFx0PG5ndC1vYmplY3QzRFxuXHRcdFx0XHRbbmd0ckNvbGxpZGVyXT1cImNoaWxkQ29sbGlkZXJPcHRpb24uc2hhcGVcIlxuXHRcdFx0XHRbYXJnc109XCJjaGlsZENvbGxpZGVyT3B0aW9uLmFyZ3NcIlxuXHRcdFx0XHRbcG9zaXRpb25dPVwiY2hpbGRDb2xsaWRlck9wdGlvbi5wb3NpdGlvblwiXG5cdFx0XHRcdFtyb3RhdGlvbl09XCJjaGlsZENvbGxpZGVyT3B0aW9uLnJvdGF0aW9uXCJcblx0XHRcdFx0W3NjYWxlXT1cImNoaWxkQ29sbGlkZXJPcHRpb24uc2NhbGVcIlxuXHRcdFx0XHRbbmFtZV09XCJvYmplY3RSZWYubmF0aXZlRWxlbWVudC5uYW1lICsgJy1jb2xsaWRlci0nICsgJGluZGV4XCJcblx0XHRcdFx0W29wdGlvbnNdPVwiY2hpbGRDb2xsaWRlck9wdGlvbi5jb2xsaWRlck9wdGlvbnNcIlxuXHRcdFx0Lz5cblx0XHR9XG5cdGAsXG5cdHNjaGVtYXM6IFtDVVNUT01fRUxFTUVOVFNfU0NIRU1BXSxcblx0Y2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG5cdGhvc3Q6IHtcblx0XHQnW3Bvc2l0aW9uXSc6ICdwb3NpdGlvbigpJyxcblx0XHQnW3JvdGF0aW9uXSc6ICdyb3RhdGlvbigpJyxcblx0XHQnW3NjYWxlXSc6ICdzY2FsZSgpJyxcblx0XHQnW3F1YXRlcm5pb25dJzogJ3F1YXRlcm5pb24oKScsXG5cdFx0J1t1c2VyRGF0YV0nOiAndXNlckRhdGEoKScsXG5cdH0sXG5cdGltcG9ydHM6IFtOZ3RyQW55Q29sbGlkZXJdLFxufSlcbmV4cG9ydCBjbGFzcyBOZ3RyUmlnaWRCb2R5IHtcblx0dHlwZSA9IGlucHV0KCdkeW5hbWljJywge1xuXHRcdGFsaWFzOiAnbmd0clJpZ2lkQm9keScsXG5cdFx0dHJhbnNmb3JtOiAodmFsdWU6IE5ndHJSaWdpZEJvZHlUeXBlIHwgJycgfCB1bmRlZmluZWQpID0+IHtcblx0XHRcdGlmICh2YWx1ZSA9PT0gJycgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCkgcmV0dXJuICdkeW5hbWljJyBhcyBOZ3RyUmlnaWRCb2R5VHlwZTtcblx0XHRcdHJldHVybiB2YWx1ZTtcblx0XHR9LFxuXHR9KTtcblx0cG9zaXRpb24gPSBpbnB1dDxOZ3RWZWN0b3IzIHwgdW5kZWZpbmVkPihbMCwgMCwgMF0pO1xuXHRyb3RhdGlvbiA9IGlucHV0PE5ndEV1bGVyIHwgdW5kZWZpbmVkPihbMCwgMCwgMF0pO1xuXHRzY2FsZSA9IGlucHV0PE5ndFZlY3RvcjMgfCB1bmRlZmluZWQ+KFsxLCAxLCAxXSk7XG5cdHF1YXRlcm5pb24gPSBpbnB1dDxOZ3RRdWF0ZXJuaW9uIHwgdW5kZWZpbmVkPihbMCwgMCwgMCwgMV0pO1xuXHR1c2VyRGF0YSA9IGlucHV0PE5ndE9iamVjdDNEWyd1c2VyRGF0YSddIHwgdW5kZWZpbmVkPih7fSk7XG5cdG9wdGlvbnMgPSBpbnB1dChyaWdpZEJvZHlEZWZhdWx0T3B0aW9ucywgeyB0cmFuc2Zvcm06IG1lcmdlSW5wdXRzKHJpZ2lkQm9keURlZmF1bHRPcHRpb25zKSB9KTtcblxuXHR3YWtlID0gb3V0cHV0PHZvaWQ+KCk7XG5cdHNsZWVwID0gb3V0cHV0PHZvaWQ+KCk7XG5cdGNvbGxpc2lvbkVudGVyID0gb3V0cHV0PE5ndHJDb2xsaXNpb25FbnRlclBheWxvYWQ+KCk7XG5cdGNvbGxpc2lvbkV4aXQgPSBvdXRwdXQ8Tmd0ckNvbGxpc2lvbkV4aXRQYXlsb2FkPigpO1xuXHRpbnRlcnNlY3Rpb25FbnRlciA9IG91dHB1dDxOZ3RySW50ZXJzZWN0aW9uRW50ZXJQYXlsb2FkPigpO1xuXHRpbnRlcnNlY3Rpb25FeGl0ID0gb3V0cHV0PE5ndHJJbnRlcnNlY3Rpb25FeGl0UGF5bG9hZD4oKTtcblx0Y29udGFjdEZvcmNlID0gb3V0cHV0PE5ndHJDb250YWN0Rm9yY2VQYXlsb2FkPigpO1xuXG5cdHByaXZhdGUgY2FuU2xlZXAgPSBwaWNrKHRoaXMub3B0aW9ucywgJ2NhblNsZWVwJyk7XG5cdHByaXZhdGUgY29sbGlkZXJzID0gcGljayh0aGlzLm9wdGlvbnMsICdjb2xsaWRlcnMnKTtcblx0cHJpdmF0ZSB0cmFuc2Zvcm1TdGF0ZSA9IHBpY2sodGhpcy5vcHRpb25zLCAndHJhbnNmb3JtU3RhdGUnKTtcblx0cHJpdmF0ZSBncmF2aXR5U2NhbGUgPSBwaWNrKHRoaXMub3B0aW9ucywgJ2dyYXZpdHlTY2FsZScpO1xuXHRwcml2YXRlIGRvbWluYW5jZUdyb3VwID0gcGljayh0aGlzLm9wdGlvbnMsICdkb21pbmFuY2VHcm91cCcpO1xuXHRwcml2YXRlIGNjZCA9IHBpY2sodGhpcy5vcHRpb25zLCAnY2NkJyk7XG5cdHByaXZhdGUgc29mdENjZFByZWRpY3Rpb24gPSBwaWNrKHRoaXMub3B0aW9ucywgJ3NvZnRDY2RQcmVkaWN0aW9uJyk7XG5cdHByaXZhdGUgYWRkaXRpb25hbFNvbHZlckl0ZXJhdGlvbnMgPSBwaWNrKHRoaXMub3B0aW9ucywgJ2FkZGl0aW9uYWxTb2x2ZXJJdGVyYXRpb25zJyk7XG5cdHByaXZhdGUgbGluZWFyRGFtcGluZyA9IHBpY2sodGhpcy5vcHRpb25zLCAnbGluZWFyRGFtcGluZycpO1xuXHRwcml2YXRlIGFuZ3VsYXJEYW1waW5nID0gcGljayh0aGlzLm9wdGlvbnMsICdhbmd1bGFyRGFtcGluZycpO1xuXHRwcml2YXRlIGxvY2tSb3RhdGlvbnMgPSBwaWNrKHRoaXMub3B0aW9ucywgJ2xvY2tSb3RhdGlvbnMnKTtcblx0cHJpdmF0ZSBsb2NrVHJhbnNsYXRpb25zID0gcGljayh0aGlzLm9wdGlvbnMsICdsb2NrVHJhbnNsYXRpb25zJyk7XG5cdHByaXZhdGUgZW5hYmxlZFJvdGF0aW9ucyA9IHBpY2sodGhpcy5vcHRpb25zLCAnZW5hYmxlZFJvdGF0aW9ucycpO1xuXHRwcml2YXRlIGVuYWJsZWRUcmFuc2xhdGlvbnMgPSBwaWNrKHRoaXMub3B0aW9ucywgJ2VuYWJsZWRUcmFuc2xhdGlvbnMnKTtcblx0cHJpdmF0ZSBhbmd1bGFyVmVsb2NpdHkgPSBwaWNrKHRoaXMub3B0aW9ucywgJ2FuZ3VsYXJWZWxvY2l0eScpO1xuXHRwcml2YXRlIGxpbmVhclZlbG9jaXR5ID0gcGljayh0aGlzLm9wdGlvbnMsICdsaW5lYXJWZWxvY2l0eScpO1xuXG5cdG9iamVjdFJlZiA9IGluamVjdDxFbGVtZW50UmVmPE9iamVjdDNEPj4oRWxlbWVudFJlZik7XG5cdHByaXZhdGUgcGh5c2ljcyA9IGluamVjdChOZ3RyUGh5c2ljcyk7XG5cblx0cHJpdmF0ZSBib2R5VHlwZSA9IGNvbXB1dGVkKCgpID0+IFJJR0lEX0JPRFlfVFlQRV9NQVBbdGhpcy50eXBlKCldKTtcblx0cHJpdmF0ZSBib2R5RGVzYyA9IGNvbXB1dGVkKCgpID0+IHtcblx0XHRjb25zdCBbY2FuU2xlZXAsIGJvZHlUeXBlXSA9IFt0aGlzLmNhblNsZWVwKCksIHVudHJhY2tlZCh0aGlzLmJvZHlUeXBlKSwgdGhpcy5jb2xsaWRlcnMoKV07XG5cdFx0cmV0dXJuIG5ldyBSaWdpZEJvZHlEZXNjKGJvZHlUeXBlKS5zZXRDYW5TbGVlcChjYW5TbGVlcCk7XG5cdH0pO1xuXHRyaWdpZEJvZHkgPSBjb21wdXRlZCgoKSA9PiB7XG5cdFx0Y29uc3Qgd29ybGRTaW5nbGV0b24gPSB0aGlzLnBoeXNpY3Mud29ybGRTaW5nbGV0b24oKTtcblx0XHRpZiAoIXdvcmxkU2luZ2xldG9uKSByZXR1cm4gbnVsbDtcblx0XHRyZXR1cm4gd29ybGRTaW5nbGV0b24ucHJveHkuY3JlYXRlUmlnaWRCb2R5KHRoaXMuYm9keURlc2MoKSk7XG5cdH0pO1xuXG5cdHByb3RlY3RlZCBjaGlsZENvbGxpZGVyT3B0aW9ucyA9IGNvbXB1dGVkKCgpID0+IHtcblx0XHRjb25zdCBjb2xsaWRlcnMgPSB0aGlzLmNvbGxpZGVycygpO1xuXHRcdC8vIGlmIHNlbGYgY29sbGlkZXJzIGlzIGZhbHNlIGV4cGxpY2l0bHksIGRpc2FibGUgYXV0byBjb2xsaWRlcnMgZm9yIHRoaXMgb2JqZWN0IGVudGlyZWx5LlxuXHRcdGlmIChjb2xsaWRlcnMgPT09IGZhbHNlKSByZXR1cm4gW107XG5cblx0XHRjb25zdCBwaHlzaWNzQ29sbGlkZXJzID0gdGhpcy5waHlzaWNzLmNvbGxpZGVycygpO1xuXHRcdC8vIGlmIHBoeXNpY3MgY29sbGlkZXJzIGlzIGZhbHNlIGV4cGxpY2l0bHksIGRpc2FibGUgYXV0byBjb2xsaWRlcnMgZm9yIHRoaXMgb2JqZWN0IGVudGlyZWx5LlxuXHRcdGlmIChwaHlzaWNzQ29sbGlkZXJzID09PSBmYWxzZSkgcmV0dXJuIFtdO1xuXG5cdFx0Y29uc3Qgb3B0aW9ucyA9IHRoaXMub3B0aW9ucygpO1xuXHRcdC8vIGlmIGNvbGxpZGVycyBvbiBvYmplY3QgaXMgbm90IHNldCwgdXNlIHBoeXNpY3MgY29sbGlkZXJzXG5cdFx0aWYgKCFvcHRpb25zLmNvbGxpZGVycykgb3B0aW9ucy5jb2xsaWRlcnMgPSBwaHlzaWNzQ29sbGlkZXJzO1xuXG5cdFx0Y29uc3Qgb2JqZWN0TG9jYWxTdGF0ZSA9IGdldExvY2FsU3RhdGUodGhpcy5vYmplY3RSZWYubmF0aXZlRWxlbWVudCk7XG5cdFx0Ly8gdHJhY2sgb2JqZWN0J3MgY2hpbGRyZW5cblx0XHRvYmplY3RMb2NhbFN0YXRlPy5ub25PYmplY3RzKCk7XG5cblx0XHRyZXR1cm4gY3JlYXRlQ29sbGlkZXJPcHRpb25zKHRoaXMub2JqZWN0UmVmLm5hdGl2ZUVsZW1lbnQsIG9wdGlvbnMsIHRydWUpO1xuXHR9KTtcblxuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRleHRlbmQoeyBPYmplY3QzRCB9KTtcblxuXHRcdGVmZmVjdCgob25DbGVhbnVwKSA9PiB7XG5cdFx0XHRjb25zdCBjbGVhbnVwID0gdGhpcy5jcmVhdGVSaWdpZEJvZHlTdGF0ZUVmZmVjdCgpO1xuXHRcdFx0b25DbGVhbnVwKCgpID0+IGNsZWFudXA/LigpKTtcblx0XHR9KTtcblxuXHRcdGVmZmVjdCgob25DbGVhbnVwKSA9PiB7XG5cdFx0XHRjb25zdCBjbGVhbnVwID0gdGhpcy5jcmVhdGVSaWdpZEJvZHlFdmVudHNFZmZlY3QoKTtcblx0XHRcdG9uQ2xlYW51cCgoKSA9PiBjbGVhbnVwPy4oKSk7XG5cdFx0fSk7XG5cblx0XHRlZmZlY3QoKCkgPT4ge1xuXHRcdFx0dGhpcy51cGRhdGVSaWdpZEJvZHlFZmZlY3QoKTtcblx0XHR9KTtcblx0fVxuXG5cdHByaXZhdGUgY3JlYXRlUmlnaWRCb2R5U3RhdGVFZmZlY3QoKSB7XG5cdFx0Y29uc3Qgd29ybGRTaW5nbGV0b24gPSB0aGlzLnBoeXNpY3Mud29ybGRTaW5nbGV0b24oKTtcblx0XHRpZiAoIXdvcmxkU2luZ2xldG9uKSByZXR1cm47XG5cblx0XHRjb25zdCBib2R5ID0gdGhpcy5yaWdpZEJvZHkoKTtcblx0XHRpZiAoIWJvZHkpIHJldHVybjtcblxuXHRcdGNvbnN0IHRyYW5zZm9ybVN0YXRlID0gdW50cmFja2VkKHRoaXMudHJhbnNmb3JtU3RhdGUpO1xuXG5cdFx0Y29uc3Qgc3RhdGUgPSB0aGlzLmNyZWF0ZVJpZ2lkQm9keVN0YXRlKGJvZHksIHRoaXMub2JqZWN0UmVmLm5hdGl2ZUVsZW1lbnQpO1xuXHRcdHRoaXMucGh5c2ljcy5yaWdpZEJvZHlTdGF0ZXMuc2V0KGJvZHkuaGFuZGxlLCB0cmFuc2Zvcm1TdGF0ZSA/IHRyYW5zZm9ybVN0YXRlKHN0YXRlKSA6IHN0YXRlKTtcblxuXHRcdHJldHVybiAoKSA9PiB7XG5cdFx0XHR0aGlzLnBoeXNpY3MucmlnaWRCb2R5U3RhdGVzLmRlbGV0ZShib2R5LmhhbmRsZSk7XG5cdFx0XHRpZiAod29ybGRTaW5nbGV0b24ucHJveHkuZ2V0UmlnaWRCb2R5KGJvZHkuaGFuZGxlKSkge1xuXHRcdFx0XHR3b3JsZFNpbmdsZXRvbi5wcm94eS5yZW1vdmVSaWdpZEJvZHkoYm9keSk7XG5cdFx0XHR9XG5cdFx0fTtcblx0fVxuXG5cdHByaXZhdGUgY3JlYXRlUmlnaWRCb2R5RXZlbnRzRWZmZWN0KCkge1xuXHRcdGNvbnN0IHdvcmxkU2luZ2xldG9uID0gdGhpcy5waHlzaWNzLndvcmxkU2luZ2xldG9uKCk7XG5cdFx0aWYgKCF3b3JsZFNpbmdsZXRvbikgcmV0dXJuO1xuXG5cdFx0Y29uc3QgYm9keSA9IHRoaXMucmlnaWRCb2R5KCk7XG5cdFx0aWYgKCFib2R5KSByZXR1cm47XG5cblx0XHRjb25zdCB3YWtlID0gZ2V0RW1pdHRlcih0aGlzLndha2UpO1xuXHRcdGNvbnN0IHNsZWVwID0gZ2V0RW1pdHRlcih0aGlzLnNsZWVwKTtcblx0XHRjb25zdCBjb2xsaXNpb25FbnRlciA9IGdldEVtaXR0ZXIodGhpcy5jb2xsaXNpb25FbnRlcik7XG5cdFx0Y29uc3QgY29sbGlzaW9uRXhpdCA9IGdldEVtaXR0ZXIodGhpcy5jb2xsaXNpb25FeGl0KTtcblx0XHRjb25zdCBpbnRlcnNlY3Rpb25FbnRlciA9IGdldEVtaXR0ZXIodGhpcy5pbnRlcnNlY3Rpb25FbnRlcik7XG5cdFx0Y29uc3QgaW50ZXJzZWN0aW9uRXhpdCA9IGdldEVtaXR0ZXIodGhpcy5pbnRlcnNlY3Rpb25FeGl0KTtcblx0XHRjb25zdCBjb250YWN0Rm9yY2UgPSBnZXRFbWl0dGVyKHRoaXMuY29udGFjdEZvcmNlKTtcblxuXHRcdHRoaXMucGh5c2ljcy5yaWdpZEJvZHlFdmVudHMuc2V0KGJvZHkuaGFuZGxlLCB7XG5cdFx0XHRvbldha2U6IHdha2UsXG5cdFx0XHRvblNsZWVwOiBzbGVlcCxcblx0XHRcdG9uQ29sbGlzaW9uRW50ZXI6IGNvbGxpc2lvbkVudGVyLFxuXHRcdFx0b25Db2xsaXNpb25FeGl0OiBjb2xsaXNpb25FeGl0LFxuXHRcdFx0b25JbnRlcnNlY3Rpb25FbnRlcjogaW50ZXJzZWN0aW9uRW50ZXIsXG5cdFx0XHRvbkludGVyc2VjdGlvbkV4aXQ6IGludGVyc2VjdGlvbkV4aXQsXG5cdFx0XHRvbkNvbnRhY3RGb3JjZTogY29udGFjdEZvcmNlLFxuXHRcdH0pO1xuXG5cdFx0cmV0dXJuICgpID0+IHtcblx0XHRcdHRoaXMucGh5c2ljcy5yaWdpZEJvZHlFdmVudHMuZGVsZXRlKGJvZHkuaGFuZGxlKTtcblx0XHR9O1xuXHR9XG5cblx0cHJpdmF0ZSB1cGRhdGVSaWdpZEJvZHlFZmZlY3QoKSB7XG5cdFx0Y29uc3Qgd29ybGRTaW5nbGV0b24gPSB0aGlzLnBoeXNpY3Mud29ybGRTaW5nbGV0b24oKTtcblx0XHRpZiAoIXdvcmxkU2luZ2xldG9uKSByZXR1cm47XG5cblx0XHRjb25zdCBib2R5ID0gdGhpcy5yaWdpZEJvZHkoKTtcblx0XHRpZiAoIWJvZHkpIHJldHVybjtcblxuXHRcdGNvbnN0IHN0YXRlID0gdGhpcy5waHlzaWNzLnJpZ2lkQm9keVN0YXRlcy5nZXQoYm9keS5oYW5kbGUpO1xuXHRcdGlmICghc3RhdGUpIHJldHVybjtcblxuXHRcdHN0YXRlLm9iamVjdC51cGRhdGVXb3JsZE1hdHJpeCh0cnVlLCBmYWxzZSk7XG5cdFx0X21hdHJpeDQuY29weShzdGF0ZS5vYmplY3QubWF0cml4V29ybGQpLmRlY29tcG9zZShfcG9zaXRpb24sIF9yb3RhdGlvbiwgX3NjYWxlKTtcblx0XHRib2R5LnNldFRyYW5zbGF0aW9uKF9wb3NpdGlvbiwgdHJ1ZSk7XG5cdFx0Ym9keS5zZXRSb3RhdGlvbihfcm90YXRpb24sIHRydWUpO1xuXG5cdFx0Y29uc3QgW1xuXHRcdFx0Z3Jhdml0eVNjYWxlLFxuXHRcdFx0YWRkaXRpb25hbFNvbHZlckl0ZXJhdGlvbnMsXG5cdFx0XHRsaW5lYXJEYW1waW5nLFxuXHRcdFx0YW5ndWxhckRhbXBpbmcsXG5cdFx0XHRsb2NrUm90YXRpb25zLFxuXHRcdFx0bG9ja1RyYW5zbGF0aW9ucyxcblx0XHRcdGVuYWJsZWRSb3RhdGlvbnMsXG5cdFx0XHRlbmFibGVkVHJhbnNsYXRpb25zLFxuXHRcdFx0YW5ndWxhclZlbG9jaXR5LFxuXHRcdFx0bGluZWFyVmVsb2NpdHksXG5cdFx0XHRjY2QsXG5cdFx0XHRzb2Z0Q2NkUHJlZGljdGlvbixcblx0XHRcdGRvbWluYW5jZUdyb3VwLFxuXHRcdFx0dXNlckRhdGEsXG5cdFx0XHRib2R5VHlwZSxcblx0XHRdID0gW1xuXHRcdFx0dGhpcy5ncmF2aXR5U2NhbGUoKSxcblx0XHRcdHRoaXMuYWRkaXRpb25hbFNvbHZlckl0ZXJhdGlvbnMoKSxcblx0XHRcdHRoaXMubGluZWFyRGFtcGluZygpLFxuXHRcdFx0dGhpcy5hbmd1bGFyRGFtcGluZygpLFxuXHRcdFx0dGhpcy5sb2NrUm90YXRpb25zKCksXG5cdFx0XHR0aGlzLmxvY2tUcmFuc2xhdGlvbnMoKSxcblx0XHRcdHRoaXMuZW5hYmxlZFJvdGF0aW9ucygpLFxuXHRcdFx0dGhpcy5lbmFibGVkVHJhbnNsYXRpb25zKCksXG5cdFx0XHR0aGlzLmFuZ3VsYXJWZWxvY2l0eSgpLFxuXHRcdFx0dGhpcy5saW5lYXJWZWxvY2l0eSgpLFxuXHRcdFx0dGhpcy5jY2QoKSxcblx0XHRcdHRoaXMuc29mdENjZFByZWRpY3Rpb24oKSxcblx0XHRcdHRoaXMuZG9taW5hbmNlR3JvdXAoKSxcblx0XHRcdHRoaXMudXNlckRhdGEoKSxcblx0XHRcdHRoaXMuYm9keVR5cGUoKSxcblx0XHRdO1xuXG5cdFx0Ym9keS5zZXRHcmF2aXR5U2NhbGUoZ3Jhdml0eVNjYWxlLCB0cnVlKTtcblx0XHRpZiAoYWRkaXRpb25hbFNvbHZlckl0ZXJhdGlvbnMgIT09IHVuZGVmaW5lZCkgYm9keS5zZXRBZGRpdGlvbmFsU29sdmVySXRlcmF0aW9ucyhhZGRpdGlvbmFsU29sdmVySXRlcmF0aW9ucyk7XG5cdFx0aWYgKGxpbmVhckRhbXBpbmcgIT09IHVuZGVmaW5lZCkgYm9keS5zZXRMaW5lYXJEYW1waW5nKGxpbmVhckRhbXBpbmcpO1xuXHRcdGlmIChhbmd1bGFyRGFtcGluZyAhPT0gdW5kZWZpbmVkKSBib2R5LnNldEFuZ3VsYXJEYW1waW5nKGFuZ3VsYXJEYW1waW5nKTtcblx0XHRib2R5LnNldERvbWluYW5jZUdyb3VwKGRvbWluYW5jZUdyb3VwKTtcblx0XHRpZiAoZW5hYmxlZFJvdGF0aW9ucyAhPT0gdW5kZWZpbmVkKSBib2R5LnNldEVuYWJsZWRSb3RhdGlvbnMoLi4uZW5hYmxlZFJvdGF0aW9ucywgdHJ1ZSk7XG5cdFx0aWYgKGVuYWJsZWRUcmFuc2xhdGlvbnMgIT09IHVuZGVmaW5lZCkgYm9keS5zZXRFbmFibGVkVHJhbnNsYXRpb25zKC4uLmVuYWJsZWRUcmFuc2xhdGlvbnMsIHRydWUpO1xuXHRcdGlmIChsb2NrUm90YXRpb25zICE9PSB1bmRlZmluZWQpIGJvZHkubG9ja1JvdGF0aW9ucyhsb2NrUm90YXRpb25zLCB0cnVlKTtcblx0XHRpZiAobG9ja1RyYW5zbGF0aW9ucyAhPT0gdW5kZWZpbmVkKSBib2R5LmxvY2tUcmFuc2xhdGlvbnMobG9ja1RyYW5zbGF0aW9ucywgdHJ1ZSk7XG5cdFx0Ym9keS5zZXRBbmd2ZWwoeyB4OiBhbmd1bGFyVmVsb2NpdHlbMF0sIHk6IGFuZ3VsYXJWZWxvY2l0eVsxXSwgejogYW5ndWxhclZlbG9jaXR5WzJdIH0sIHRydWUpO1xuXHRcdGJvZHkuc2V0TGludmVsKHsgeDogbGluZWFyVmVsb2NpdHlbMF0sIHk6IGxpbmVhclZlbG9jaXR5WzFdLCB6OiBsaW5lYXJWZWxvY2l0eVsyXSB9LCB0cnVlKTtcblx0XHRib2R5LmVuYWJsZUNjZChjY2QpO1xuXHRcdGJvZHkuc2V0U29mdENjZFByZWRpY3Rpb24oc29mdENjZFByZWRpY3Rpb24pO1xuXHRcdGlmICh1c2VyRGF0YSAhPT0gdW5kZWZpbmVkKSBib2R5LnVzZXJEYXRhID0gdXNlckRhdGE7XG5cdFx0aWYgKGJvZHlUeXBlICE9PSBib2R5LmJvZHlUeXBlKCkpIGJvZHkuc2V0Qm9keVR5cGUoYm9keVR5cGUsIHRydWUpO1xuXHR9XG5cblx0cHJpdmF0ZSBjcmVhdGVSaWdpZEJvZHlTdGF0ZShcblx0XHRyaWdpZEJvZHk6IFJpZ2lkQm9keSxcblx0XHRvYmplY3Q6IE9iamVjdDNELFxuXHRcdHNldE1hdHJpeD86IChtYXRyaXg6IE1hdHJpeDQpID0+IHZvaWQsXG5cdFx0Z2V0TWF0cml4PzogKG1hdHJpeDogTWF0cml4NCkgPT4gTWF0cml4NCxcblx0XHR3b3JsZFNjYWxlPzogVmVjdG9yMyxcblx0XHRtZXNoVHlwZTogTmd0clJpZ2lkQm9keVN0YXRlWydtZXNoVHlwZSddID0gJ21lc2gnLFxuXHQpIHtcblx0XHRvYmplY3QudXBkYXRlV29ybGRNYXRyaXgodHJ1ZSwgZmFsc2UpO1xuXHRcdGNvbnN0IGludmVydGVkV29ybGRNYXRyaXggPSBvYmplY3QucGFyZW50IS5tYXRyaXhXb3JsZC5jbG9uZSgpLmludmVydCgpO1xuXHRcdHJldHVybiB7XG5cdFx0XHRvYmplY3QsXG5cdFx0XHRyaWdpZEJvZHksXG5cdFx0XHRpbnZlcnRlZFdvcmxkTWF0cml4LFxuXHRcdFx0c2V0TWF0cml4OiBzZXRNYXRyaXhcblx0XHRcdFx0PyBzZXRNYXRyaXhcblx0XHRcdFx0OiAobWF0cml4OiBNYXRyaXg0KSA9PiB7XG5cdFx0XHRcdFx0XHRvYmplY3QubWF0cml4LmNvcHkobWF0cml4KTtcblx0XHRcdFx0XHR9LFxuXHRcdFx0Z2V0TWF0cml4OiBnZXRNYXRyaXggPyBnZXRNYXRyaXggOiAobWF0cml4OiBNYXRyaXg0KSA9PiBtYXRyaXguY29weShvYmplY3QubWF0cml4KSxcblx0XHRcdHNjYWxlOiB3b3JsZFNjYWxlIHx8IG9iamVjdC5nZXRXb3JsZFNjYWxlKF9zY2FsZSkuY2xvbmUoKSxcblx0XHRcdGlzU2xlZXBpbmc6IGZhbHNlLFxuXHRcdFx0bWVzaFR5cGUsXG5cdFx0fTtcblx0fVxufVxuIl19
552
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmlnaWQtYm9keS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvcmFwaWVyL3NyYy9saWIvcmlnaWQtYm9keS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ04sdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxRQUFRLEVBQ1Isc0JBQXNCLEVBQ3RCLFNBQVMsRUFDVCxNQUFNLEVBQ04sVUFBVSxFQUNWLE1BQU0sRUFDTixLQUFLLEVBQ0wsS0FBSyxFQUNMLE1BQU0sRUFDTixTQUFTLEdBQ1QsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFlBQVksRUFBWSxZQUFZLEVBQWEsYUFBYSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDM0csT0FBTyxFQUNOLE1BQU0sRUFDTixVQUFVLEVBQ1YsYUFBYSxFQUNiLFdBQVcsRUFLWCxJQUFJLEdBQ0osTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3ZELE9BQU8sRUFBVyxRQUFRLEVBQUUsT0FBTyxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBQ25ELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDeEMsT0FBTyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFjNUUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sU0FBUyxDQUFDOztBQUVoRCxNQUFNLHNCQUFzQixHQUF3QjtJQUNuRCxXQUFXLEVBQUUsQ0FBQztDQUNkLENBQUM7QUFjRixNQUFNLE9BQU8sZUFBZTtJQUMzQixRQUFRLEdBQUcsS0FBSyxDQUF5QixDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNwRCxRQUFRLEdBQUcsS0FBSyxDQUF1QixDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FB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YSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBRTtZQUN6RCxVQUFVLEVBQUUsS0FBSztZQUNqQixRQUFRO1NBQ1IsQ0FBQztJQUNILENBQUM7dUdBalBXLGFBQWE7MkZBQWIsYUFBYSw2MkNBekJmOzs7Ozs7Ozs7Ozs7O0VBYVQsNERBelZXLGVBQWU7OzJGQXFXZixhQUFhO2tCQTdCekIsU0FBUzttQkFBQztvQkFDVixRQUFRLEVBQUUsNkJBQTZCO29CQUN2QyxRQUFRLEVBQUUsV0FBVztvQkFDckIsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7OztFQWFUO29CQUNELE9BQU8sRUFBRSxDQUFDLHNCQUFzQixDQUFDO29CQUNqQyxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtvQkFDL0MsSUFBSSxFQUFFO3dCQUNMLFlBQVksRUFBRSxZQUFZO3dCQUMxQixZQUFZLEVBQUUsWUFBWTt3QkFDMUIsU0FBUyxFQUFFLFNBQVM7d0JBQ3BCLGNBQWMsRUFBRSxjQUFjO3dCQUM5QixZQUFZLEVBQUUsWUFBWTtxQkFDMUI7b0JBQ0QsT0FBTyxFQUFFLENBQUMsZUFBZSxDQUFDO2lCQUMxQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG5cdENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuXHRDb21wb25lbnQsXG5cdGNvbXB1dGVkLFxuXHRDVVNUT01fRUxFTUVOVFNfU0NIRU1BLFxuXHREaXJlY3RpdmUsXG5cdGVmZmVjdCxcblx0RWxlbWVudFJlZixcblx0aW5qZWN0LFxuXHRpbnB1dCxcblx0bW9kZWwsXG5cdG91dHB1dCxcblx0dW50cmFja2VkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFjdGl2ZUV2ZW50cywgQ29sbGlkZXIsIENvbGxpZGVyRGVzYywgUmlnaWRCb2R5LCBSaWdpZEJvZHlEZXNjIH0gZnJvbSAnQGRpbWZvcmdlL3JhcGllcjNkLWNvbXBhdCc7XG5pbXBvcnQge1xuXHRleHRlbmQsXG5cdGdldEVtaXR0ZXIsXG5cdGdldExvY2FsU3RhdGUsXG5cdGhhc0xpc3RlbmVyLFxuXHROZ3RFdWxlcixcblx0Tmd0T2JqZWN0M0QsXG5cdE5ndFF1YXRlcm5pb24sXG5cdE5ndFZlY3RvcjMsXG5cdHBpY2ssXG59IGZyb20gJ2FuZ3VsYXItdGhyZWUnO1xuaW1wb3J0IHsgbWVyZ2VJbnB1dHMgfSBmcm9tICduZ3h0ZW5zaW9uL2luamVjdC1pbnB1dHMnO1xuaW1wb3J0IHsgTWF0cml4NCwgT2JqZWN0M0QsIFZlY3RvcjMgfSBmcm9tICd0aHJlZSc7XG5pbXBvcnQgeyBOZ3RyUGh5c2ljcyB9IGZyb20gJy4vcGh5c2ljcyc7XG5pbXBvcnQgeyBfbWF0cml4NCwgX3Bvc2l0aW9uLCBfcm90YXRpb24sIF9zY2FsZSwgX3ZlY3RvcjMgfSBmcm9tICcuL3NoYXJlZCc7XG5pbXBvcnQge1xuXHROZ3RyQ29sbGlkZXJPcHRpb25zLFxuXHROZ3RyQ29sbGlkZXJTaGFwZSxcblx0Tmd0ckNvbGxpZGVyU3RhdGUsXG5cdE5ndHJDb2xsaXNpb25FbnRlclBheWxvYWQsXG5cdE5ndHJDb2xsaXNpb25FeGl0UGF5bG9hZCxcblx0Tmd0ckNvbnRhY3RGb3JjZVBheWxvYWQsXG5cdE5ndHJJbnRlcnNlY3Rpb25FbnRlclBheWxvYWQsXG5cdE5ndHJJbnRlcnNlY3Rpb25FeGl0UGF5bG9hZCxcblx0Tmd0clJpZ2lkQm9keU9wdGlvbnMsXG5cdE5ndHJSaWdpZEJvZHlTdGF0ZSxcblx0Tmd0clJpZ2lkQm9keVR5cGUsXG59IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgY3JlYXRlQ29sbGlkZXJPcHRpb25zIH0gZnJvbSAnLi91dGlscyc7XG5cbmNvbnN0IGNvbGxpZGVyRGVmYXVsdE9wdGlvbnM6IE5ndHJDb2xsaWRlck9wdGlvbnMgPSB7XG5cdGNvbnRhY3RTa2luOiAwLFxufTtcblxuQERpcmVjdGl2ZSh7XG5cdHNlbGVjdG9yOiAnbmd0LW9iamVjdDNEW25ndHJDb2xsaWRlcl0nLFxuXHRzdGFuZGFsb25lOiB0cnVlLFxuXHRob3N0OiB7XG5cdFx0J1twb3NpdGlvbl0nOiAncG9zaXRpb24oKScsXG5cdFx0J1tyb3RhdGlvbl0nOiAncm90YXRpb24oKScsXG5cdFx0J1tzY2FsZV0nOiAnc2NhbGUoKScsXG5cdFx0J1txdWF0ZXJuaW9uXSc6ICdxdWF0ZXJuaW9uKCknLFxuXHRcdCdbdXNlckRhdGFdJzogJ3VzZXJEYXRhKCknLFxuXHRcdCdbbmFtZV0nOiAnbmFtZSgpJyxcblx0fSxcbn0pXG5leHBvcnQgY2xhc3MgTmd0ckFueUNvbGxpZGVyIHtcblx0cG9zaXRpb24gPSBpbnB1dDxOZ3RWZWN0b3IzIHwgdW5kZWZpbmVkPihbMCwgMCwgMF0pO1xuXHRyb3RhdGlvbiA9IGlucHV0PE5ndEV1bGVyIHwgdW5kZWZpbmVkPihbMCwgMCwgMF0pO1xuXHRzY2FsZSA9IGlucHV0PE5ndFZlY3RvcjMgfCB1bmRlZmluZWQ+KFsxLCAxLCAxXSk7XG5cdHF1YXRlcm5pb24gPSBpbnB1dDxOZ3RRdWF0ZXJuaW9uIHwgdW5kZWZpbmVkPihbMCwgMCwgMCwgMV0pO1xuXHR1c2VyRGF0YSA9IGlucHV0PE5ndE9iamVjdDNEWyd1c2VyRGF0YSddIHwgdW5kZWZpbmVkPih7fSk7XG5cdG5hbWUgPSBpbnB1dDxOZ3RPYmplY3QzRFsnbmFtZSddIHwgdW5kZWZpbmVkPigpO1xuXHRvcHRpb25zID0gaW5wdXQoY29sbGlkZXJEZWZhdWx0T3B0aW9ucywgeyB0cmFuc2Zvcm06IG1lcmdlSW5wdXRzKHJpZ2lkQm9keURlZmF1bHRPcHRpb25zKSB9KTtcblxuXHQvLyBUT0RPOiBjaGFuZ2UgdGhpcyB0byBpbnB1dCByZXF1aXJlZCB3aGVuIEFuZ3VsYXIgYWxsb3dzIHNldHRpbmcgaG9zdERpcmVjdGl2ZSBpbnB1dFxuXHRzaGFwZSA9IG1vZGVsPE5ndHJDb2xsaWRlclNoYXBlIHwgdW5kZWZpbmVkPih1bmRlZmluZWQsIHsgYWxpYXM6ICduZ3RyQ29sbGlkZXInIH0pO1xuXHRhcmdzID0gbW9kZWw8dW5rbm93bltdPihbXSk7XG5cblx0Y29sbGlzaW9uRW50ZXIgPSBvdXRwdXQ8Tmd0ckNvbGxpc2lvbkVudGVyUGF5bG9hZD4oKTtcblx0Y29sbGlzaW9uRXhpdCA9IG91dHB1dDxOZ3RyQ29sbGlzaW9uRXhpdFBheWxvYWQ+KCk7XG5cdGludGVyc2VjdGlvbkVudGVyID0gb3V0cHV0PE5ndHJJbnRlcnNlY3Rpb25FbnRlclBheWxvYWQ+KCk7XG5cdGludGVyc2VjdGlvbkV4aXQgPSBvdXRwdXQ8Tmd0ckludGVyc2VjdGlvbkV4aXRQYXlsb2FkPigpO1xuXHRjb250YWN0Rm9yY2UgPSBvdXRwdXQ8Tmd0ckNvbnRhY3RGb3JjZVBheWxvYWQ+KCk7XG5cblx0cHJpdmF0ZSBzZW5zb3IgPSBwaWNrKHRoaXMub3B0aW9ucywgJ3NlbnNvcicpO1xuXHRwcml2YXRlIGNvbGxpc2lvbkdyb3VwcyA9IHBpY2sodGhpcy5vcHRpb25zLCAnY29sbGlzaW9uR3JvdXBzJyk7XG5cdHByaXZhdGUgc29sdmVyR3JvdXBzID0gcGljayh0aGlzLm9wdGlvbnMsICdzb2x2ZXJHcm91cHMnKTtcblx0cHJpdmF0ZSBmcmljdGlvbiA9IHBpY2sodGhpcy5vcHRpb25zLCAnZnJpY3Rpb24nKTtcblx0cHJpdmF0ZSBmcmljdGlvbkNvbWJpbmVSdWxlID0gcGljayh0aGlzLm9wdGlvbnMsICdmcmljdGlvbkNvbWJpbmVSdWxlJyk7XG5cdHByaXZhdGUgcmVzdGl0dXRpb24gPSBwaWNrKHRoaXMub3B0aW9ucywgJ3Jlc3RpdHV0aW9uJyk7XG5cdHByaXZhdGUgcmVzdGl0dXRpb25Db21iaW5lUnVsZSA9IHBpY2sodGhpcy5vcHRpb25zLCAncmVzdGl0dXRpb25Db21iaW5lUnVsZScpO1xuXHRwcml2YXRlIGFjdGl2ZUNvbGxpc2lvblR5cGVzID0gcGljayh0aGlzLm9wdGlvbnMsICdhY3RpdmVDb2xsaXNpb25UeXBlcycpO1xuXHRwcml2YXRlIGNvbnRhY3RTa2luID0gcGljayh0aGlzLm9wdGlvbnMsICdjb250YWN0U2tpbicpO1xuXHRwcml2YXRlIG1hc3MgPSBwaWNrKHRoaXMub3B0aW9ucywgJ21hc3MnKTtcblx0cHJpdmF0ZSBtYXNzUHJvcGVydGllcyA9IHBpY2sodGhpcy5vcHRpb25zLCAnbWFzc1Byb3BlcnRpZXMnKTtcblx0cHJpdmF0ZSBkZW5zaXR5ID0gcGljayh0aGlzLm9wdGlvbnMsICdkZW5zaXR5Jyk7XG5cblx0cHJpdmF0ZSByaWdpZEJvZHkgPSBpbmplY3QoTmd0clJpZ2lkQm9keSwgeyBvcHRpb25hbDogdHJ1ZSB9KTtcblx0cHJpdmF0ZSBwaHlzaWNzID0gaW5qZWN0KE5ndHJQaHlzaWNzKTtcblx0b2JqZWN0UmVmID0gaW5qZWN0PEVsZW1lbnRSZWY8T2JqZWN0M0Q+PihFbGVtZW50UmVmKTtcblxuXHRwcml2YXRlIHNjYWxlZEFyZ3MgPSBjb21wdXRlZCgoKSA9PiB7XG5cdFx0Y29uc3QgW3NoYXBlLCBhcmdzXSA9IFtcblx0XHRcdHRoaXMuc2hhcGUoKSxcblx0XHRcdHRoaXMuYXJncygpIGFzIChudW1iZXIgfCBBcnJheUxpa2U8bnVtYmVyPiB8IHsgeDogbnVtYmVyOyB5OiBudW1iZXI7IHo6IG51bWJlciB9KVtdLFxuXHRcdF07XG5cblx0XHRjb25zdCBjbG9uZWQgPSBhcmdzLnNsaWNlKCk7XG5cblx0XHQvLyBIZWlnaHRmaWVsZCB1c2VzIGEgdmVjdG9yXG5cdFx0aWYgKHNoYXBlID09PSAnaGVpZ2h0ZmllbGQnKSB7XG5cdFx0XHRjb25zdCBzID0gY2xvbmVkWzNdIGFzIHsgeDogbnVtYmVyOyB5OiBudW1iZXI7IHo6IG51bWJlciB9O1xuXHRcdFx0cy54ICo9IHRoaXMud29ybGRTY2FsZS54O1xuXHRcdFx0cy55ICo9IHRoaXMud29ybGRTY2FsZS55O1xuXHRcdFx0cy56ICo9IHRoaXMud29ybGRTY2FsZS56O1xuXG5cdFx0XHRyZXR1cm4gY2xvbmVkO1xuXHRcdH1cblxuXHRcdC8vIFRyaW1lc2ggYW5kIGNvbnZleCBzY2FsZSB0aGUgdmVydGljZXNcblx0XHRpZiAoc2hhcGUgPT09ICd0cmltZXNoJyB8fCBzaGFwZSA9PT0gJ2NvbnZleEh1bGwnKSB7XG5cdFx0XHRjbG9uZWRbMF0gPSB0aGlzLnNjYWxlVmVydGljZXMoY2xvbmVkWzBdIGFzIEFycmF5TGlrZTxudW1iZXI+LCB0aGlzLndvcmxkU2NhbGUpO1xuXHRcdFx0cmV0dXJuIGNsb25lZDtcblx0XHR9XG5cblx0XHQvLyBwcmVmaWxsIHdpdGggc29tZSBleHRyYVxuXHRcdGNvbnN0IHNjYWxlQXJyYXkgPSBbdGhpcy53b3JsZFNjYWxlLngsIHRoaXMud29ybGRTY2FsZS55LCB0aGlzLndvcmxkU2NhbGUueiwgdGhpcy53b3JsZFNjYWxlLngsIHRoaXMud29ybGRTY2FsZS54XTtcblx0XHRyZXR1cm4gY2xvbmVkLm1hcCgoYXJnLCBpbmRleCkgPT4gc2NhbGVBcnJheVtpbmRleF0gKiAoYXJnIGFzIG51bWJlcikpO1xuXHR9KTtcblxuXHRwcml2YXRlIGNvbGxpZGVyID0gY29tcHV0ZWQoKCkgPT4ge1xuXHRcdGNvbnN0IHdvcmxkU2luZ2xldG9uID0gdGhpcy5waHlzaWNzLndvcmxkU2luZ2xldG9uKCk7XG5cdFx0aWYgKCF3b3JsZFNpbmdsZXRvbikgcmV0dXJuIG51bGw7XG5cblx0XHRjb25zdCBbc2hhcGUsIGFyZ3MsIHJpZ2lkQm9keV0gPSBbdGhpcy5zaGFwZSgpLCB0aGlzLnNjYWxlZEFyZ3MoKSwgdGhpcy5yaWdpZEJvZHk/LnJpZ2lkQm9keSgpXTtcblxuXHRcdC8vIEB0cy1leHBlY3QtZXJyb3IgLSB3ZSBrbm93IHRoZSB0eXBlIG9mIHRoZSBkYXRhXG5cdFx0Y29uc3QgZGVzYyA9IENvbGxpZGVyRGVzY1tzaGFwZV0oLi4uYXJncyk7XG5cdFx0aWYgKCFkZXNjKSByZXR1cm4gbnVsbDtcblxuXHRcdHJldHVybiB3b3JsZFNpbmdsZXRvbi5wcm94eS5jcmVhdGVDb2xsaWRlcihkZXNjLCByaWdpZEJvZHkgPz8gdW5kZWZpbmVkKTtcblx0fSk7XG5cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0ZXh0ZW5kKHsgT2JqZWN0M0QgfSk7XG5cblx0XHRlZmZlY3QoKG9uQ2xlYW51cCkgPT4ge1xuXHRcdFx0Y29uc3QgY2xlYW51cCA9IHRoaXMuY3JlYXRlQ29sbGlkZXJTdGF0ZUVmZmVjdCgpO1xuXHRcdFx0b25DbGVhbnVwKCgpID0+IGNsZWFudXA/LigpKTtcblx0XHR9KTtcblxuXHRcdGVmZmVjdCgob25DbGVhbnVwKSA9PiB7XG5cdFx0XHRjb25zdCBjbGVhbnVwID0gdGhpcy5jcmVhdGVDb2xsaWRlckV2ZW50c0VmZmVjdCgpO1xuXHRcdFx0b25DbGVhbnVwKCgpID0+IGNsZWFudXA/LigpKTtcblx0XHR9KTtcblxuXHRcdGVmZmVjdCgoKSA9PiB7XG5cdFx0XHR0aGlzLnVwZGF0ZUNvbGxpZGVyRWZmZWN0KCk7XG5cdFx0XHR0aGlzLnVwZGF0ZU1hc3NQcm9wZXJ0aWVzRWZmZWN0KCk7XG5cdFx0fSk7XG5cdH1cblxuXHRnZXQgd29ybGRTY2FsZSgpIHtcblx0XHRyZXR1cm4gdGhpcy5vYmplY3RSZWYubmF0aXZlRWxlbWVudC5nZXRXb3JsZFNjYWxlKG5ldyBWZWN0b3IzKCkpO1xuXHR9XG5cblx0c2V0U2hhcGUoc2hhcGU6IE5ndHJDb2xsaWRlclNoYXBlKSB7XG5cdFx0dGhpcy5zaGFwZS5zZXQoc2hhcGUpO1xuXHR9XG5cblx0c2V0QXJncyhhcmdzOiB1bmtub3duW10pIHtcblx0XHR0aGlzLmFyZ3Muc2V0KGFyZ3MpO1xuXHR9XG5cblx0cHJpdmF0ZSBjcmVhdGVDb2xsaWRlclN0YXRlRWZmZWN0KCkge1xuXHRcdGNvbnN0IGNvbGxpZGVyID0gdGhpcy5jb2xsaWRlcigpO1xuXHRcdGlmICghY29sbGlkZXIpIHJldHVybjtcblxuXHRcdGNvbnN0IHdvcmxkU2luZ2xldG9uID0gdGhpcy5waHlzaWNzLndvcmxkU2luZ2xldG9uKCk7XG5cdFx0aWYgKCF3b3JsZFNpbmdsZXRvbikgcmV0dXJuO1xuXG5cdFx0Y29uc3QgbG9jYWxTdGF0ZSA9IGdldExvY2FsU3RhdGUodGhpcy5vYmplY3RSZWYubmF0aXZlRWxlbWVudCk7XG5cdFx0aWYgKCFsb2NhbFN0YXRlKSByZXR1cm47XG5cblx0XHRjb25zdCBwYXJlbnQgPSBsb2NhbFN0YXRlLnBhcmVudCgpO1xuXHRcdGlmICghcGFyZW50IHx8ICEocGFyZW50IGFzIE9iamVjdDNEKS5pc09iamVjdDNEKSByZXR1cm47XG5cblx0XHRjb25zdCBzdGF0ZSA9IHRoaXMuY3JlYXRlQ29sbGlkZXJTdGF0ZShcblx0XHRcdGNvbGxpZGVyLFxuXHRcdFx0dGhpcy5vYmplY3RSZWYubmF0aXZlRWxlbWVudCxcblx0XHRcdHRoaXMucmlnaWRCb2R5Py5vYmplY3RSZWYubmF0aXZlRWxlbWVudCxcblx0XHQpO1xuXHRcdHRoaXMucGh5c2ljcy5jb2xsaWRlclN0YXRlcy5zZXQoY29sbGlkZXIuaGFuZGxlLCBzdGF0ZSk7XG5cblx0XHRyZXR1cm4gKCkgPT4ge1xuXHRcdFx0dGhpcy5waHlzaWNzLmNvbGxpZGVyU3RhdGVzLmRlbGV0ZShjb2xsaWRlci5oYW5kbGUpO1xuXHRcdFx0aWYgKHdvcmxkU2luZ2xldG9uLnByb3h5LmdldENvbGxpZGVyKGNvbGxpZGVyLmhhbmRsZSkpIHtcblx0XHRcdFx0d29ybGRTaW5nbGV0b24ucHJveHkucmVtb3ZlQ29sbGlkZXIoY29sbGlkZXIsIHRydWUpO1xuXHRcdFx0fVxuXHRcdH07XG5cdH1cblxuXHRwcml2YXRlIGNyZWF0ZUNvbGxpZGVyRXZlbnRzRWZmZWN0KCkge1xuXHRcdGNvbnN0IGNvbGxpZGVyID0gdGhpcy5jb2xsaWRlcigpO1xuXHRcdGlmICghY29sbGlkZXIpIHJldHVybjtcblxuXHRcdGNvbnN0IHdvcmxkU2luZ2xldG9uID0gdGhpcy5waHlzaWNzLndvcmxkU2luZ2xldG9uKCk7XG5cdFx0aWYgKCF3b3JsZFNpbmdsZXRvbikgcmV0dXJuO1xuXG5cdFx0Y29uc3QgY29sbGlzaW9uRW50ZXIgPSBnZXRFbWl0dGVyKHRoaXMuY29sbGlzaW9uRW50ZXIpO1xuXHRcdGNvbnN0IGNvbGxpc2lvbkV4aXQgPSBnZXRFbWl0dGVyKHRoaXMuY29sbGlzaW9uRXhpdCk7XG5cdFx0Y29uc3QgaW50ZXJzZWN0aW9uRW50ZXIgPSBnZXRFbWl0dGVyKHRoaXMuaW50ZXJzZWN0aW9uRW50ZXIpO1xuXHRcdGNvbnN0IGludGVyc2VjdGlvbkV4aXQgPSBnZXRFbWl0dGVyKHRoaXMuaW50ZXJzZWN0aW9uRXhpdCk7XG5cdFx0Y29uc3QgY29udGFjdEZvcmNlID0gZ2V0RW1pdHRlcih0aGlzLmNvbnRhY3RGb3JjZSk7XG5cblx0XHRjb25zdCBoYXNDb2xsaXNpb25FdmVudCA9IGhhc0xpc3RlbmVyKFxuXHRcdFx0dGhpcy5jb2xsaXNpb25FbnRlcixcblx0XHRcdHRoaXMuY29sbGlzaW9uRXhpdCxcblx0XHRcdHRoaXMuaW50ZXJzZWN0aW9uRW50ZXIsXG5cdFx0XHR0aGlzLmludGVyc2VjdGlvbkV4aXQsXG5cdFx0XHR0aGlzLnJpZ2lkQm9keT8uY29sbGlzaW9uRW50ZXIsXG5cdFx0XHR0aGlzLnJpZ2lkQm9keT8uY29sbGlzaW9uRXhpdCxcblx0XHRcdHRoaXMucmlnaWRCb2R5Py5pbnRlcnNlY3Rpb25FbnRlcixcblx0XHRcdHRoaXMucmlnaWRCb2R5Py5pbnRlcnNlY3Rpb25FeGl0LFxuXHRcdCk7XG5cdFx0Y29uc3QgaGFzQ29udGFjdEZvcmNlRXZlbnQgPSBoYXNMaXN0ZW5lcih0aGlzLmNvbnRhY3RGb3JjZSwgdGhpcy5yaWdpZEJvZHk/LmNvbnRhY3RGb3JjZSk7XG5cblx0XHRpZiAoaGFzQ29sbGlzaW9uRXZlbnQgJiYgaGFzQ29udGFjdEZvcmNlRXZlbnQpIHtcblx0XHRcdGNvbGxpZGVyLnNldEFjdGl2ZUV2ZW50cyhBY3RpdmVFdmVudHMuQ09MTElTSU9OX0VWRU5UUyB8IEFjdGl2ZUV2ZW50cy5DT05UQUNUX0ZPUkNFX0VWRU5UUyk7XG5cdFx0fSBlbHNlIGlmIChoYXNDb2xsaXNpb25FdmVudCkge1xuXHRcdFx0Y29sbGlkZXIuc2V0QWN0aXZlRXZlbnRzKEFjdGl2ZUV2ZW50cy5DT0xMSVNJT05fRVZFTlRTKTtcblx0XHR9IGVsc2UgaWYgKGhhc0NvbnRhY3RGb3JjZUV2ZW50KSB7XG5cdFx0XHRjb2xsaWRlci5zZXRBY3RpdmVFdmVudHMoQWN0aXZlRXZlbnRzLkNPTlRBQ1RfRk9SQ0VfRVZFTlRTKTtcblx0XHR9XG5cblx0XHR0aGlzLnBoeXNpY3MuY29sbGlkZXJFdmVudHMuc2V0KGNvbGxpZGVyLmhhbmRsZSwge1xuXHRcdFx0b25Db2xsaXNpb25FbnRlcjogY29sbGlzaW9uRW50ZXIsXG5cdFx0XHRvbkNvbGxpc2lvbkV4aXQ6IGNvbGxpc2lvbkV4aXQsXG5cdFx0XHRvbkludGVyc2VjdGlvbkVudGVyOiBpbnRlcnNlY3Rpb25FbnRlcixcblx0XHRcdG9uSW50ZXJzZWN0aW9uRXhpdDogaW50ZXJzZWN0aW9uRXhpdCxcblx0XHRcdG9uQ29udGFjdEZvcmNlOiBjb250YWN0Rm9yY2UsXG5cdFx0fSk7XG5cdFx0cmV0dXJuICgpID0+IHtcblx0XHRcdHRoaXMucGh5c2ljcy5jb2xsaWRlckV2ZW50cy5kZWxldGUoY29sbGlkZXIuaGFuZGxlKTtcblx0XHR9O1xuXHR9XG5cblx0cHJpdmF0ZSB1cGRhdGVDb2xsaWRlckVmZmVjdCgpIHtcblx0XHRjb25zdCBjb2xsaWRlciA9IHRoaXMuY29sbGlkZXIoKTtcblx0XHRpZiAoIWNvbGxpZGVyKSByZXR1cm47XG5cblx0XHRjb25zdCB3b3JsZFNpbmdsZXRvbiA9IHRoaXMucGh5c2ljcy53b3JsZFNpbmdsZXRvbigpO1xuXHRcdGlmICghd29ybGRTaW5nbGV0b24pIHJldHVybjtcblxuXHRcdGNvbnN0IHN0YXRlID0gdGhpcy5waHlzaWNzLmNvbGxpZGVyU3RhdGVzLmdldChjb2xsaWRlci5oYW5kbGUpO1xuXHRcdGlmICghc3RhdGUpIHJldHVybjtcblxuXHRcdC8vIFVwZGF0ZSBjb2xsaWRlciBwb3NpdGlvbiBiYXNlZCBvbiB0aGUgb2JqZWN0J3MgcG9zaXRpb25cblx0XHRjb25zdCBwYXJlbnRXb3JsZFNjYWxlID0gc3RhdGUub2JqZWN0LnBhcmVudCEuZ2V0V29ybGRTY2FsZShfdmVjdG9yMyk7XG5cdFx0Y29uc3QgcGFyZW50SW52ZXJ0ZWRXb3JsZE1hdHJpeCA9IHN0YXRlLndvcmxkUGFyZW50Py5tYXRyaXhXb3JsZC5jbG9uZSgpLmludmVydCgpO1xuXG5cdFx0c3RhdGUub2JqZWN0LnVwZGF0ZVdvcmxkTWF0cml4KHRydWUsIGZhbHNlKTtcblxuXHRcdF9tYXRyaXg0LmNvcHkoc3RhdGUub2JqZWN0Lm1hdHJpeFdvcmxkKTtcblxuXHRcdGlmIChwYXJlbnRJbnZlcnRlZFdvcmxkTWF0cml4KSB7XG5cdFx0XHRfbWF0cml4NC5wcmVtdWx0aXBseShwYXJlbnRJbnZlcnRlZFdvcmxkTWF0cml4KTtcblx0XHR9XG5cblx0XHRfbWF0cml4NC5kZWNvbXBvc2UoX3Bvc2l0aW9uLCBfcm90YXRpb24sIF9zY2FsZSk7XG5cblx0XHRpZiAoY29sbGlkZXIucGFyZW50KCkpIHtcblx0XHRcdGNvbGxpZGVyLnNldFRyYW5zbGF0aW9uV3J0UGFyZW50KHtcblx0XHRcdFx0eDogX3Bvc2l0aW9uLnggKiBwYXJlbnRXb3JsZFNjYWxlLngsXG5cdFx0XHRcdHk6IF9wb3NpdGlvbi55ICogcGFyZW50V29ybGRTY2FsZS55LFxuXHRcdFx0XHR6OiBfcG9zaXRpb24ueiAqIHBhcmVudFdvcmxkU2NhbGUueixcblx0XHRcdH0pO1xuXHRcdFx0Y29sbGlkZXIuc2V0Um90YXRpb25XcnRQYXJlbnQoX3JvdGF0aW9uKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29sbGlkZXIuc2V0VHJhbnNsYXRpb24oe1xuXHRcdFx0XHR4OiBfcG9zaXRpb24ueCAqIHBhcmVudFdvcmxkU2NhbGUueCxcblx0XHRcdFx0eTogX3Bvc2l0aW9uLnkgKiBwYXJlbnRXb3JsZFNjYWxlLnksXG5cdFx0XHRcdHo6IF9wb3NpdGlvbi56ICogcGFyZW50V29ybGRTY2FsZS56LFxuXHRcdFx0fSk7XG5cdFx0XHRjb2xsaWRlci5zZXRSb3RhdGlvbihfcm90YXRpb24pO1xuXHRcdH1cblxuXHRcdGNvbnN0IFtcblx0XHRcdHNlbnNvcixcblx0XHRcdGNvbGxpc2lvbkdyb3Vwcyxcblx0XHRcdHNvbHZlckdyb3Vwcyxcblx0XHRcdGZyaWN0aW9uLFxuXHRcdFx0ZnJpY3Rpb25Db21iaW5lUnVsZSxcblx0XHRcdHJlc3RpdHV0aW9uLFxuXHRcdFx0cmVzdGl0dXRpb25Db21iaW5lUnVsZSxcblx0XHRcdGFjdGl2ZUNvbGxpc2lvblR5cGVzLFxuXHRcdFx0Y29udGFjdFNraW4sXG5cdFx0XSA9IFtcblx0XHRcdHRoaXMuc2Vuc29yKCksXG5cdFx0XHR0aGlzLmNvbGxpc2lvbkdyb3VwcygpLFxuXHRcdFx0dGhpcy5zb2x2ZXJHcm91cHMoKSxcblx0XHRcdHRoaXMuZnJpY3Rpb24oKSxcblx0XHRcdHRoaXMuZnJpY3Rpb25Db21iaW5lUnVsZSgpLFxuXHRcdFx0dGhpcy5yZXN0aXR1dGlvbigpLFxuXHRcdFx0dGhpcy5yZXN0aXR1dGlvbkNvbWJpbmVSdWxlKCksXG5cdFx0XHR0aGlzLmFjdGl2ZUNvbGxpc2lvblR5cGVzKCksXG5cdFx0XHR0aGlzLmNvbnRhY3RTa2luKCksXG5cdFx0XTtcblxuXHRcdGlmIChzZW5zb3IgIT09IHVuZGVmaW5lZCkgY29sbGlkZXIuc2V0U2Vuc29yKHNlbnNvcik7XG5cdFx0aWYgKGNvbGxpc2lvbkdyb3VwcyAhPT0gdW5kZWZpbmVkKSBjb2xsaWRlci5zZXRDb2xsaXNpb25Hcm91cHMoY29sbGlzaW9uR3JvdXBzKTtcblx0XHRpZiAoc29sdmVyR3JvdXBzICE9PSB1bmRlZmluZWQpIGNvbGxpZGVyLnNldFNvbHZlckdyb3Vwcyhzb2x2ZXJHcm91cHMpO1xuXHRcdGlmIChmcmljdGlvbiAhPT0gdW5kZWZpbmVkKSBjb2xsaWRlci5zZXRGcmljdGlvbihmcmljdGlvbik7XG5cdFx0aWYgKGZyaWN0aW9uQ29tYmluZVJ1bGUgIT09IHVuZGVmaW5lZCkgY29sbGlkZXIuc2V0RnJpY3Rpb25Db21iaW5lUnVsZShmcmljdGlvbkNvbWJpbmVSdWxlKTtcblx0XHRpZiAocmVzdGl0dXRpb24gIT09IHVuZGVmaW5lZCkgY29sbGlkZXIuc2V0UmVzdGl0dXRpb24ocmVzdGl0dXRpb24pO1xuXHRcdGlmIChyZXN0aXR1dGlvbkNvbWJpbmVSdWxlICE9PSB1bmRlZmluZWQpIGNvbGxpZGVyLnNldFJlc3RpdHV0aW9uQ29tYmluZVJ1bGUocmVzdGl0dXRpb25Db21iaW5lUnVsZSk7XG5cdFx0aWYgKGFjdGl2ZUNvbGxpc2lvblR5cGVzICE9PSB1bmRlZmluZWQpIGNvbGxpZGVyLnNldEFjdGl2ZUNvbGxpc2lvblR5cGVzKGFjdGl2ZUNvbGxpc2lvblR5cGVzKTtcblx0XHRpZiAoY29udGFjdFNraW4gIT09IHVuZGVmaW5lZCkgY29sbGlkZXIuc2V0Q29udGFjdFNraW4oY29udGFjdFNraW4pO1xuXHR9XG5cblx0cHJpdmF0ZSB1cGRhdGVNYXNzUHJvcGVydGllc0VmZmVjdCgpIHtcblx0XHRjb25zdCBjb2xsaWRlciA9IHRoaXMuY29sbGlkZXIoKTtcblx0XHRpZiAoIWNvbGxpZGVyKSByZXR1cm47XG5cblx0XHRjb25zdCBbbWFzcywgbWFzc1Byb3BlcnRpZXMsIGRlbnNpdHldID0gW3RoaXMubWFzcygpLCB0aGlzLm1hc3NQcm9wZXJ0aWVzKCksIHRoaXMuZGVuc2l0eSgpXTtcblxuXHRcdGlmIChkZW5zaXR5ICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGlmIChtYXNzICE9PSB1bmRlZmluZWQgfHwgbWFzc1Byb3BlcnRpZXMgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ1tOR1QgUmFwaWVyXSBDYW5ub3Qgc2V0IG1hc3MgYW5kIG1hc3NQcm9wZXJ0aWVzIGFsb25nIHdpdGggZGVuc2l0eScpO1xuXHRcdFx0fVxuXG5cdFx0XHRjb2xsaWRlci5zZXREZW5zaXR5KGRlbnNpdHkpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmIChtYXNzICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGlmIChtYXNzUHJvcGVydGllcyAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcignW05HVCBSYXBpZXJdIENhbm5vdCBzZXQgbWFzc1Byb3BlcnRpZXMgYWxvbmcgd2l0aCBtYXNzJyk7XG5cdFx0XHR9XG5cdFx0XHRjb2xsaWRlci5zZXRNYXNzKG1hc3MpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmIChtYXNzUHJvcGVydGllcyAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRjb2xsaWRlci5zZXRNYXNzUHJvcGVydGllcyhcblx0XHRcdFx0bWFzc1Byb3BlcnRpZXMubWFzcyxcblx0XHRcdFx0bWFzc1Byb3BlcnRpZXMuY2VudGVyT2ZNYXNzLFxuXHRcdFx0XHRtYXNzUHJvcGVydGllcy5wcmluY2lwYWxBbmd1bGFySW5lcnRpYSxcblx0XHRcdFx0bWFzc1Byb3BlcnRpZXMuYW5ndWxhckluZXJ0aWFMb2NhbEZyYW1lLFxuXHRcdFx0KTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIGNyZWF0ZUNvbGxpZGVyU3RhdGUoXG5cdFx0Y29sbGlkZXI6IENvbGxpZGVyLFxuXHRcdG9iamVjdDogT2JqZWN0M0QsXG5cdFx0cmlnaWRCb2R5T2JqZWN0PzogT2JqZWN0M0QgfCBudWxsLFxuXHQpOiBOZ3RyQ29sbGlkZXJTdGF0ZSB7XG5cdFx0cmV0dXJuIHsgY29sbGlkZXIsIHdvcmxkUGFyZW50OiByaWdpZEJvZHlPYmplY3QgfHwgdW5kZWZpbmVkLCBvYmplY3QgfTtcblx0fVxuXG5cdHByaXZhdGUgc2NhbGVWZXJ0aWNlcyh2ZXJ0aWNlczogQXJyYXlMaWtlPG51bWJlcj4sIHNjYWxlOiBWZWN0b3IzKSB7XG5cdFx0Y29uc3Qgc2NhbGVkVmVydHMgPSBBcnJheS5mcm9tKHZlcnRpY2VzKTtcblxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgdmVydGljZXMubGVuZ3RoIC8gMzsgaSsrKSB7XG5cdFx0XHRzY2FsZWRWZXJ0c1tpICogM10gKj0gc2NhbGUueDtcblx0XHRcdHNjYWxlZFZlcnRzW2kgKiAzICsgMV0gKj0gc2NhbGUueTtcblx0XHRcdHNjYWxlZFZlcnRzW2kgKiAzICsgMl0gKj0gc2NhbGUuejtcblx0XHR9XG5cblx0XHRyZXR1cm4gc2NhbGVkVmVydHM7XG5cdH1cbn1cblxuY29uc3QgUklHSURfQk9EWV9UWVBFX01BUDogUmVjb3JkPE5ndHJSaWdpZEJvZHlUeXBlLCBudW1iZXI+ID0ge1xuXHRmaXhlZDogMSxcblx0ZHluYW1pYzogMCxcblx0a2luZW1hdGljUG9zaXRpb246IDIsXG5cdGtpbmVtYXRpY1ZlbG9jaXR5OiAzLFxufTtcblxuZXhwb3J0IGNvbnN0IHJpZ2lkQm9keURlZmF1bHRPcHRpb25zOiBOZ3RyUmlnaWRCb2R5T3B0aW9ucyA9IHtcblx0Y2FuU2xlZXA6IHRydWUsXG5cdGxpbmVhclZlbG9jaXR5OiBbMCwgMCwgMF0sXG5cdGFuZ3VsYXJWZWxvY2l0eTogWzAsIDAsIDBdLFxuXHRncmF2aXR5U2NhbGU6IDEsXG5cdGRvbWluYW5jZUdyb3VwOiAwLFxuXHRjY2Q6IGZhbHNlLFxuXHRzb2Z0Q2NkUHJlZGljdGlvbjogMCxcblx0Y29udGFjdFNraW46IDAsXG59O1xuXG5AQ29tcG9uZW50KHtcblx0c2VsZWN0b3I6ICduZ3Qtb2JqZWN0M0Rbbmd0clJpZ2lkQm9keV0nLFxuXHRleHBvcnRBczogJ3JpZ2lkQm9keScsXG5cdHN0YW5kYWxvbmU6IHRydWUsXG5cdHRlbXBsYXRlOiBgXG5cdFx0PG5nLWNvbnRlbnQgLz5cblx0XHRAZm9yIChjaGlsZENvbGxpZGVyT3B0aW9uIG9mIGNoaWxkQ29sbGlkZXJPcHRpb25zKCk7IHRyYWNrICRpbmRleCkge1xuXHRcdFx0PG5ndC1vYmplY3QzRFxuXHRcdFx0XHRbbmd0ckNvbGxpZGVyXT1cImNoaWxkQ29sbGlkZXJPcHRpb24uc2hhcGVcIlxuXHRcdFx0XHRbYXJnc109XCJjaGlsZENvbGxpZGVyT3B0aW9uLmFyZ3NcIlxuXHRcdFx0XHRbcG9zaXRpb25dPVwiY2hpbGRDb2xsaWRlck9wdGlvbi5wb3NpdGlvblwiXG5cdFx0XHRcdFtyb3RhdGlvbl09XCJjaGlsZENvbGxpZGVyT3B0aW9uLnJvdGF0aW9uXCJcblx0XHRcdFx0W3NjYWxlXT1cImNoaWxkQ29sbGlkZXJPcHRpb24uc2NhbGVcIlxuXHRcdFx0XHRbbmFtZV09XCJvYmplY3RSZWYubmF0aXZlRWxlbWVudC5uYW1lICsgJy1jb2xsaWRlci0nICsgJGluZGV4XCJcblx0XHRcdFx0W29wdGlvbnNdPVwiY2hpbGRDb2xsaWRlck9wdGlvbi5jb2xsaWRlck9wdGlvbnNcIlxuXHRcdFx0Lz5cblx0XHR9XG5cdGAsXG5cdHNjaGVtYXM6IFtDVVNUT01fRUxFTUVOVFNfU0NIRU1BXSxcblx0Y2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG5cdGhvc3Q6IHtcblx0XHQnW3Bvc2l0aW9uXSc6ICdwb3NpdGlvbigpJyxcblx0XHQnW3JvdGF0aW9uXSc6ICdyb3RhdGlvbigpJyxcblx0XHQnW3NjYWxlXSc6ICdzY2FsZSgpJyxcblx0XHQnW3F1YXRlcm5pb25dJzogJ3F1YXRlcm5pb24oKScsXG5cdFx0J1t1c2VyRGF0YV0nOiAndXNlckRhdGEoKScsXG5cdH0sXG5cdGltcG9ydHM6IFtOZ3RyQW55Q29sbGlkZXJdLFxufSlcbmV4cG9ydCBjbGFzcyBOZ3RyUmlnaWRCb2R5IHtcblx0dHlwZSA9IGlucHV0KCdkeW5hbWljJywge1xuXHRcdGFsaWFzOiAnbmd0clJpZ2lkQm9keScsXG5cdFx0dHJhbnNmb3JtOiAodmFsdWU6IE5ndHJSaWdpZEJvZHlUeXBlIHwgJycgfCB1bmRlZmluZWQpID0+IHtcblx0XHRcdGlmICh2YWx1ZSA9PT0gJycgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCkgcmV0dXJuICdkeW5hbWljJyBhcyBOZ3RyUmlnaWRCb2R5VHlwZTtcblx0XHRcdHJldHVybiB2YWx1ZTtcblx0XHR9LFxuXHR9KTtcblx0cG9zaXRpb24gPSBpbnB1dDxOZ3RWZWN0b3IzIHwgdW5kZWZpbmVkPihbMCwgMCwgMF0pO1xuXHRyb3RhdGlvbiA9IGlucHV0PE5ndEV1bGVyIHwgdW5kZWZpbmVkPihbMCwgMCwgMF0pO1xuXHRzY2FsZSA9IGlucHV0PE5ndFZlY3RvcjMgfCB1bmRlZmluZWQ+KFsxLCAxLCAxXSk7XG5cdHF1YXRlcm5pb24gPSBpbnB1dDxOZ3RRdWF0ZXJuaW9uIHwgdW5kZWZpbmVkPihbMCwgMCwgMCwgMV0pO1xuXHR1c2VyRGF0YSA9IGlucHV0PE5ndE9iamVjdDNEWyd1c2VyRGF0YSddIHwgdW5kZWZpbmVkPih7fSk7XG5cdG9wdGlvbnMgPSBpbnB1dChyaWdpZEJvZHlEZWZhdWx0T3B0aW9ucywgeyB0cmFuc2Zvcm06IG1lcmdlSW5wdXRzKHJpZ2lkQm9keURlZmF1bHRPcHRpb25zKSB9KTtcblxuXHR3YWtlID0gb3V0cHV0PHZvaWQ+KCk7XG5cdHNsZWVwID0gb3V0cHV0PHZvaWQ+KCk7XG5cdGNvbGxpc2lvbkVudGVyID0gb3V0cHV0PE5ndHJDb2xsaXNpb25FbnRlclBheWxvYWQ+KCk7XG5cdGNvbGxpc2lvbkV4aXQgPSBvdXRwdXQ8Tmd0ckNvbGxpc2lvbkV4aXRQYXlsb2FkPigpO1xuXHRpbnRlcnNlY3Rpb25FbnRlciA9IG91dHB1dDxOZ3RySW50ZXJzZWN0aW9uRW50ZXJQYXlsb2FkPigpO1xuXHRpbnRlcnNlY3Rpb25FeGl0ID0gb3V0cHV0PE5ndHJJbnRlcnNlY3Rpb25FeGl0UGF5bG9hZD4oKTtcblx0Y29udGFjdEZvcmNlID0gb3V0cHV0PE5ndHJDb250YWN0Rm9yY2VQYXlsb2FkPigpO1xuXG5cdHByaXZhdGUgY2FuU2xlZXAgPSBwaWNrKHRoaXMub3B0aW9ucywgJ2NhblNsZWVwJyk7XG5cdHByaXZhdGUgY29sbGlkZXJzID0gcGljayh0aGlzLm9wdGlvbnMsICdjb2xsaWRlcnMnKTtcblx0cHJpdmF0ZSB0cmFuc2Zvcm1TdGF0ZSA9IHBpY2sodGhpcy5vcHRpb25zLCAndHJhbnNmb3JtU3RhdGUnKTtcblx0cHJpdmF0ZSBncmF2aXR5U2NhbGUgPSBwaWNrKHRoaXMub3B0aW9ucywgJ2dyYXZpdHlTY2FsZScpO1xuXHRwcml2YXRlIGRvbWluYW5jZUdyb3VwID0gcGljayh0aGlzLm9wdGlvbnMsICdkb21pbmFuY2VHcm91cCcpO1xuXHRwcml2YXRlIGNjZCA9IHBpY2sodGhpcy5vcHRpb25zLCAnY2NkJyk7XG5cdHByaXZhdGUgc29mdENjZFByZWRpY3Rpb24gPSBwaWNrKHRoaXMub3B0aW9ucywgJ3NvZnRDY2RQcmVkaWN0aW9uJyk7XG5cdHByaXZhdGUgYWRkaXRpb25hbFNvbHZlckl0ZXJhdGlvbnMgPSBwaWNrKHRoaXMub3B0aW9ucywgJ2FkZGl0aW9uYWxTb2x2ZXJJdGVyYXRpb25zJyk7XG5cdHByaXZhdGUgbGluZWFyRGFtcGluZyA9IHBpY2sodGhpcy5vcHRpb25zLCAnbGluZWFyRGFtcGluZycpO1xuXHRwcml2YXRlIGFuZ3VsYXJEYW1waW5nID0gcGljayh0aGlzLm9wdGlvbnMsICdhbmd1bGFyRGFtcGluZycpO1xuXHRwcml2YXRlIGxvY2tSb3RhdGlvbnMgPSBwaWNrKHRoaXMub3B0aW9ucywgJ2xvY2tSb3RhdGlvbnMnKTtcblx0cHJpdmF0ZSBsb2NrVHJhbnNsYXRpb25zID0gcGljayh0aGlzLm9wdGlvbnMsICdsb2NrVHJhbnNsYXRpb25zJyk7XG5cdHByaXZhdGUgZW5hYmxlZFJvdGF0aW9ucyA9IHBpY2sodGhpcy5vcHRpb25zLCAnZW5hYmxlZFJvdGF0aW9ucycpO1xuXHRwcml2YXRlIGVuYWJsZWRUcmFuc2xhdGlvbnMgPSBwaWNrKHRoaXMub3B0aW9ucywgJ2VuYWJsZWRUcmFuc2xhdGlvbnMnKTtcblx0cHJpdmF0ZSBhbmd1bGFyVmVsb2NpdHkgPSBwaWNrKHRoaXMub3B0aW9ucywgJ2FuZ3VsYXJWZWxvY2l0eScpO1xuXHRwcml2YXRlIGxpbmVhclZlbG9jaXR5ID0gcGljayh0aGlzLm9wdGlvbnMsICdsaW5lYXJWZWxvY2l0eScpO1xuXG5cdG9iamVjdFJlZiA9IGluamVjdDxFbGVtZW50UmVmPE9iamVjdDNEPj4oRWxlbWVudFJlZik7XG5cdHByaXZhdGUgcGh5c2ljcyA9IGluamVjdChOZ3RyUGh5c2ljcyk7XG5cblx0cHJpdmF0ZSBib2R5VHlwZSA9IGNvbXB1dGVkKCgpID0+IFJJR0lEX0JPRFlfVFlQRV9NQVBbdGhpcy50eXBlKCldKTtcblx0cHJpdmF0ZSBib2R5RGVzYyA9IGNvbXB1dGVkKCgpID0+IHtcblx0XHRjb25zdCBbY2FuU2xlZXAsIGJvZHlUeXBlXSA9IFt0aGlzLmNhblNsZWVwKCksIHVudHJhY2tlZCh0aGlzLmJvZHlUeXBlKSwgdGhpcy5jb2xsaWRlcnMoKV07XG5cdFx0cmV0dXJuIG5ldyBSaWdpZEJvZHlEZXNjKGJvZHlUeXBlKS5zZXRDYW5TbGVlcChjYW5TbGVlcCk7XG5cdH0pO1xuXHRyaWdpZEJvZHkgPSBjb21wdXRlZCgoKSA9PiB7XG5cdFx0Y29uc3Qgd29ybGRTaW5nbGV0b24gPSB0aGlzLnBoeXNpY3Mud29ybGRTaW5nbGV0b24oKTtcblx0XHRpZiAoIXdvcmxkU2luZ2xldG9uKSByZXR1cm4gbnVsbDtcblx0XHRyZXR1cm4gd29ybGRTaW5nbGV0b24ucHJveHkuY3JlYXRlUmlnaWRCb2R5KHRoaXMuYm9keURlc2MoKSk7XG5cdH0pO1xuXG5cdHByb3RlY3RlZCBjaGlsZENvbGxpZGVyT3B0aW9ucyA9IGNvbXB1dGVkKCgpID0+IHtcblx0XHRjb25zdCBjb2xsaWRlcnMgPSB0aGlzLmNvbGxpZGVycygpO1xuXHRcdC8vIGlmIHNlbGYgY29sbGlkZXJzIGlzIGZhbHNlIGV4cGxpY2l0bHksIGRpc2FibGUgYXV0byBjb2xsaWRlcnMgZm9yIHRoaXMgb2JqZWN0IGVudGlyZWx5LlxuXHRcdGlmIChjb2xsaWRlcnMgPT09IGZhbHNlKSByZXR1cm4gW107XG5cblx0XHRjb25zdCBwaHlzaWNzQ29sbGlkZXJzID0gdGhpcy5waHlzaWNzLmNvbGxpZGVycygpO1xuXHRcdC8vIGlmIHBoeXNpY3MgY29sbGlkZXJzIGlzIGZhbHNlIGV4cGxpY2l0bHkgQU5EIGNvbGxpZGVycyBpcyBub3Qgc2V0LCBkaXNhYmxlIGF1dG8gY29sbGlkZXJzIGZvciB0aGlzIG9iamVjdCBlbnRpcmVseS5cblx0XHRpZiAocGh5c2ljc0NvbGxpZGVycyA9PT0gZmFsc2UgJiYgY29sbGlkZXJzID09PSB1bmRlZmluZWQpIHJldHVybiBbXTtcblxuXHRcdGNvbnN0IG9wdGlvbnMgPSB0aGlzLm9wdGlvbnMoKTtcblx0XHQvLyBpZiBjb2xsaWRlcnMgb24gb2JqZWN0IGlzIG5vdCBzZXQsIHVzZSBwaHlzaWNzIGNvbGxpZGVyc1xuXHRcdGlmICghb3B0aW9ucy5jb2xsaWRlcnMpIG9wdGlvbnMuY29sbGlkZXJzID0gcGh5c2ljc0NvbGxpZGVycztcblxuXHRcdGNvbnN0IG9iamVjdExvY2FsU3RhdGUgPSBnZXRMb2NhbFN0YXRlKHRoaXMub2JqZWN0UmVmLm5hdGl2ZUVsZW1lbnQpO1xuXHRcdGlmICghb2JqZWN0TG9jYWxTdGF0ZSkgcmV0dXJuIFtdO1xuXG5cdFx0Ly8gdHJhY2sgb2JqZWN0J3MgcGFyZW50IGFuZCBub24tb2JqZWN0IGNoaWxkcmVuXG5cdFx0Y29uc3QgW3BhcmVudF0gPSBbb2JqZWN0TG9jYWxTdGF0ZS5wYXJlbnQoKSwgb2JqZWN0TG9jYWxTdGF0ZS5ub25PYmplY3RzKCldO1xuXHRcdGlmICghcGFyZW50IHx8ICEocGFyZW50IGFzIE9iamVjdDNEKS5pc09iamVjdDNEKSByZXR1cm4gW107XG5cblx0XHRyZXR1cm4gY3JlYXRlQ29sbGlkZXJPcHRpb25zKHRoaXMub2JqZWN0UmVmLm5hdGl2ZUVsZW1lbnQsIG9wdGlvbnMsIHRydWUpO1xuXHR9KTtcblxuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRleHRlbmQoeyBPYmplY3QzRCB9KTtcblxuXHRcdGVmZmVjdCgob25DbGVhbnVwKSA9PiB7XG5cdFx0XHRjb25zdCBjbGVhbnVwID0gdGhpcy5jcmVhdGVSaWdpZEJvZHlTdGF0ZUVmZmVjdCgpO1xuXHRcdFx0b25DbGVhbnVwKCgpID0+IGNsZWFudXA/LigpKTtcblx0XHR9KTtcblxuXHRcdGVmZmVjdCgob25DbGVhbnVwKSA9PiB7XG5cdFx0XHRjb25zdCBjbGVhbnVwID0gdGhpcy5jcmVhdGVSaWdpZEJvZHlFdmVudHNFZmZlY3QoKTtcblx0XHRcdG9uQ2xlYW51cCgoKSA9PiBjbGVhbnVwPy4oKSk7XG5cdFx0fSk7XG5cblx0XHRlZmZlY3QoKCkgPT4ge1xuXHRcdFx0dGhpcy51cGRhdGVSaWdpZEJvZHlFZmZlY3QoKTtcblx0XHR9KTtcblx0fVxuXG5cdHByaXZhdGUgY3JlYXRlUmlnaWRCb2R5U3RhdGVFZmZlY3QoKSB7XG5cdFx0Y29uc3Qgd29ybGRTaW5nbGV0b24gPSB0aGlzLnBoeXNpY3Mud29ybGRTaW5nbGV0b24oKTtcblx0XHRpZiAoIXdvcmxkU2luZ2xldG9uKSByZXR1cm47XG5cblx0XHRjb25zdCBib2R5ID0gdGhpcy5yaWdpZEJvZHkoKTtcblx0XHRpZiAoIWJvZHkpIHJldHVybjtcblxuXHRcdGNvbnN0IHRyYW5zZm9ybVN0YXRlID0gdW50cmFja2VkKHRoaXMudHJhbnNmb3JtU3RhdGUpO1xuXG5cdFx0Y29uc3QgbG9jYWxTdGF0ZSA9IGdldExvY2FsU3RhdGUodGhpcy5vYmplY3RSZWYubmF0aXZlRWxlbWVudCk7XG5cdFx0aWYgKCFsb2NhbFN0YXRlKSByZXR1cm47XG5cblx0XHRjb25zdCBwYXJlbnQgPSBsb2NhbFN0YXRlLnBhcmVudCgpO1xuXHRcdGlmICghcGFyZW50IHx8ICEocGFyZW50IGFzIE9iamVjdDNEKS5pc09iamVjdDNEKSByZXR1cm47XG5cblx0XHRjb25zdCBzdGF0ZSA9IHRoaXMuY3JlYXRlUmlnaWRCb2R5U3RhdGUoYm9keSwgdGhpcy5vYmplY3RSZWYubmF0aXZlRWxlbWVudCk7XG5cdFx0dGhpcy5waHlzaWNzLnJpZ2lkQm9keVN0YXRlcy5zZXQoYm9keS5oYW5kbGUsIHRyYW5zZm9ybVN0YXRlID8gdHJhbnNmb3JtU3RhdGUoc3RhdGUpIDogc3RhdGUpO1xuXG5cdFx0cmV0dXJuICgpID0+IHtcblx0XHRcdHRoaXMucGh5c2ljcy5yaWdpZEJvZHlTdGF0ZXMuZGVsZXRlKGJvZHkuaGFuZGxlKTtcblx0XHRcdGlmICh3b3JsZFNpbmdsZXRvbi5wcm94eS5nZXRSaWdpZEJvZHkoYm9keS5oYW5kbGUpKSB7XG5cdFx0XHRcdHdvcmxkU2luZ2xldG9uLnByb3h5LnJlbW92ZVJpZ2lkQm9keShib2R5KTtcblx0XHRcdH1cblx0XHR9O1xuXHR9XG5cblx0cHJpdmF0ZSBjcmVhdGVSaWdpZEJvZHlFdmVudHNFZmZlY3QoKSB7XG5cdFx0Y29uc3Qgd29ybGRTaW5nbGV0b24gPSB0aGlzLnBoeXNpY3Mud29ybGRTaW5nbGV0b24oKTtcblx0XHRpZiAoIXdvcmxkU2luZ2xldG9uKSByZXR1cm47XG5cblx0XHRjb25zdCBib2R5ID0gdGhpcy5yaWdpZEJvZHkoKTtcblx0XHRpZiAoIWJvZHkpIHJldHVybjtcblxuXHRcdGNvbnN0IHdha2UgPSBnZXRFbWl0dGVyKHRoaXMud2FrZSk7XG5cdFx0Y29uc3Qgc2xlZXAgPSBnZXRFbWl0dGVyKHRoaXMuc2xlZXApO1xuXHRcdGNvbnN0IGNvbGxpc2lvbkVudGVyID0gZ2V0RW1pdHRlcih0aGlzLmNvbGxpc2lvbkVudGVyKTtcblx0XHRjb25zdCBjb2xsaXNpb25FeGl0ID0gZ2V0RW1pdHRlcih0aGlzLmNvbGxpc2lvbkV4aXQpO1xuXHRcdGNvbnN0IGludGVyc2VjdGlvbkVudGVyID0gZ2V0RW1pdHRlcih0aGlzLmludGVyc2VjdGlvbkVudGVyKTtcblx0XHRjb25zdCBpbnRlcnNlY3Rpb25FeGl0ID0gZ2V0RW1pdHRlcih0aGlzLmludGVyc2VjdGlvbkV4aXQpO1xuXHRcdGNvbnN0IGNvbnRhY3RGb3JjZSA9IGdldEVtaXR0ZXIodGhpcy5jb250YWN0Rm9yY2UpO1xuXG5cdFx0dGhpcy5waHlzaWNzLnJpZ2lkQm9keUV2ZW50cy5zZXQoYm9keS5oYW5kbGUsIHtcblx0XHRcdG9uV2FrZTogd2FrZSxcblx0XHRcdG9uU2xlZXA6IHNsZWVwLFxuXHRcdFx0b25Db2xsaXNpb25FbnRlcjogY29sbGlzaW9uRW50ZXIsXG5cdFx0XHRvbkNvbGxpc2lvbkV4aXQ6IGNvbGxpc2lvbkV4aXQsXG5cdFx0XHRvbkludGVyc2VjdGlvbkVudGVyOiBpbnRlcnNlY3Rpb25FbnRlcixcblx0XHRcdG9uSW50ZXJzZWN0aW9uRXhpdDogaW50ZXJzZWN0aW9uRXhpdCxcblx0XHRcdG9uQ29udGFjdEZvcmNlOiBjb250YWN0Rm9yY2UsXG5cdFx0fSk7XG5cblx0XHRyZXR1cm4gKCkgPT4ge1xuXHRcdFx0dGhpcy5waHlzaWNzLnJpZ2lkQm9keUV2ZW50cy5kZWxldGUoYm9keS5oYW5kbGUpO1xuXHRcdH07XG5cdH1cblxuXHRwcml2YXRlIHVwZGF0ZVJpZ2lkQm9keUVmZmVjdCgpIHtcblx0XHRjb25zdCB3b3JsZFNpbmdsZXRvbiA9IHRoaXMucGh5c2ljcy53b3JsZFNpbmdsZXRvbigpO1xuXHRcdGlmICghd29ybGRTaW5nbGV0b24pIHJldHVybjtcblxuXHRcdGNvbnN0IGJvZHkgPSB0aGlzLnJpZ2lkQm9keSgpO1xuXHRcdGlmICghYm9keSkgcmV0dXJuO1xuXG5cdFx0Y29uc3Qgc3RhdGUgPSB0aGlzLnBoeXNpY3MucmlnaWRCb2R5U3RhdGVzLmdldChib2R5LmhhbmRsZSk7XG5cdFx0aWYgKCFzdGF0ZSkgcmV0dXJuO1xuXG5cdFx0c3RhdGUub2JqZWN0LnVwZGF0ZVdvcmxkTWF0cml4KHRydWUsIGZhbHNlKTtcblx0XHRfbWF0cml4NC5jb3B5KHN0YXRlLm9iamVjdC5tYXRyaXhXb3JsZCkuZGVjb21wb3NlKF9wb3NpdGlvbiwgX3JvdGF0aW9uLCBfc2NhbGUpO1xuXHRcdGJvZHkuc2V0VHJhbnNsYXRpb24oX3Bvc2l0aW9uLCB0cnVlKTtcblx0XHRib2R5LnNldFJvdGF0aW9uKF9yb3RhdGlvbiwgdHJ1ZSk7XG5cblx0XHRjb25zdCBbXG5cdFx0XHRncmF2aXR5U2NhbGUsXG5cdFx0XHRhZGRpdGlvbmFsU29sdmVySXRlcmF0aW9ucyxcblx0XHRcdGxpbmVhckRhbXBpbmcsXG5cdFx0XHRhbmd1bGFyRGFtcGluZyxcblx0XHRcdGxvY2tSb3RhdGlvbnMsXG5cdFx0XHRsb2NrVHJhbnNsYXRpb25zLFxuXHRcdFx0ZW5hYmxlZFJvdGF0aW9ucyxcblx0XHRcdGVuYWJsZWRUcmFuc2xhdGlvbnMsXG5cdFx0XHRhbmd1bGFyVmVsb2NpdHksXG5cdFx0XHRsaW5lYXJWZWxvY2l0eSxcblx0XHRcdGNjZCxcblx0XHRcdHNvZnRDY2RQcmVkaWN0aW9uLFxuXHRcdFx0ZG9taW5hbmNlR3JvdXAsXG5cdFx0XHR1c2VyRGF0YSxcblx0XHRcdGJvZHlUeXBlLFxuXHRcdF0gPSBbXG5cdFx0XHR0aGlzLmdyYXZpdHlTY2FsZSgpLFxuXHRcdFx0dGhpcy5hZGRpdGlvbmFsU29sdmVySXRlcmF0aW9ucygpLFxuXHRcdFx0dGhpcy5saW5lYXJEYW1waW5nKCksXG5cdFx0XHR0aGlzLmFuZ3VsYXJEYW1waW5nKCksXG5cdFx0XHR0aGlzLmxvY2tSb3RhdGlvbnMoKSxcblx0XHRcdHRoaXMubG9ja1RyYW5zbGF0aW9ucygpLFxuXHRcdFx0dGhpcy5lbmFibGVkUm90YXRpb25zKCksXG5cdFx0XHR0aGlzLmVuYWJsZWRUcmFuc2xhdGlvbnMoKSxcblx0XHRcdHRoaXMuYW5ndWxhclZlbG9jaXR5KCksXG5cdFx0XHR0aGlzLmxpbmVhclZlbG9jaXR5KCksXG5cdFx0XHR0aGlzLmNjZCgpLFxuXHRcdFx0dGhpcy5zb2Z0Q2NkUHJlZGljdGlvbigpLFxuXHRcdFx0dGhpcy5kb21pbmFuY2VHcm91cCgpLFxuXHRcdFx0dGhpcy51c2VyRGF0YSgpLFxuXHRcdFx0dGhpcy5ib2R5VHlwZSgpLFxuXHRcdF07XG5cblx0XHRib2R5LnNldEdyYXZpdHlTY2FsZShncmF2aXR5U2NhbGUsIHRydWUpO1xuXHRcdGlmIChhZGRpdGlvbmFsU29sdmVySXRlcmF0aW9ucyAhPT0gdW5kZWZpbmVkKSBib2R5LnNldEFkZGl0aW9uYWxTb2x2ZXJJdGVyYXRpb25zKGFkZGl0aW9uYWxTb2x2ZXJJdGVyYXRpb25zKTtcblx0XHRpZiAobGluZWFyRGFtcGluZyAhPT0gdW5kZWZpbmVkKSBib2R5LnNldExpbmVhckRhbXBpbmcobGluZWFyRGFtcGluZyk7XG5cdFx0aWYgKGFuZ3VsYXJEYW1waW5nICE9PSB1bmRlZmluZWQpIGJvZHkuc2V0QW5ndWxhckRhbXBpbmcoYW5ndWxhckRhbXBpbmcpO1xuXHRcdGJvZHkuc2V0RG9taW5hbmNlR3JvdXAoZG9taW5hbmNlR3JvdXApO1xuXHRcdGlmIChlbmFibGVkUm90YXRpb25zICE9PSB1bmRlZmluZWQpIGJvZHkuc2V0RW5hYmxlZFJvdGF0aW9ucyguLi5lbmFibGVkUm90YXRpb25zLCB0cnVlKTtcblx0XHRpZiAoZW5hYmxlZFRyYW5zbGF0aW9ucyAhPT0gdW5kZWZpbmVkKSBib2R5LnNldEVuYWJsZWRUcmFuc2xhdGlvbnMoLi4uZW5hYmxlZFRyYW5zbGF0aW9ucywgdHJ1ZSk7XG5cdFx0aWYgKGxvY2tSb3RhdGlvbnMgIT09IHVuZGVmaW5lZCkgYm9keS5sb2NrUm90YXRpb25zKGxvY2tSb3RhdGlvbnMsIHRydWUpO1xuXHRcdGlmIChsb2NrVHJhbnNsYXRpb25zICE9PSB1bmRlZmluZWQpIGJvZHkubG9ja1RyYW5zbGF0aW9ucyhsb2NrVHJhbnNsYXRpb25zLCB0cnVlKTtcblx0XHRib2R5LnNldEFuZ3ZlbCh7IHg6IGFuZ3VsYXJWZWxvY2l0eVswXSwgeTogYW5ndWxhclZlbG9jaXR5WzFdLCB6OiBhbmd1bGFyVmVsb2NpdHlbMl0gfSwgdHJ1ZSk7XG5cdFx0Ym9keS5zZXRMaW52ZWwoeyB4OiBsaW5lYXJWZWxvY2l0eVswXSwgeTogbGluZWFyVmVsb2NpdHlbMV0sIHo6IGxpbmVhclZlbG9jaXR5WzJdIH0sIHRydWUpO1xuXHRcdGJvZHkuZW5hYmxlQ2NkKGNjZCk7XG5cdFx0Ym9keS5zZXRTb2Z0Q2NkUHJlZGljdGlvbihzb2Z0Q2NkUHJlZGljdGlvbik7XG5cdFx0aWYgKHVzZXJEYXRhICE9PSB1bmRlZmluZWQpIGJvZHkudXNlckRhdGEgPSB1c2VyRGF0YTtcblx0XHRpZiAoYm9keVR5cGUgIT09IGJvZHkuYm9keVR5cGUoKSkgYm9keS5zZXRCb2R5VHlwZShib2R5VHlwZSwgdHJ1ZSk7XG5cdH1cblxuXHRwcml2YXRlIGNyZWF0ZVJpZ2lkQm9keVN0YXRlKFxuXHRcdHJpZ2lkQm9keTogUmlnaWRCb2R5LFxuXHRcdG9iamVjdDogT2JqZWN0M0QsXG5cdFx0c2V0TWF0cml4PzogKG1hdHJpeDogTWF0cml4NCkgPT4gdm9pZCxcblx0XHRnZXRNYXRyaXg/OiAobWF0cml4OiBNYXRyaXg0KSA9PiBNYXRyaXg0LFxuXHRcdHdvcmxkU2NhbGU/OiBWZWN0b3IzLFxuXHRcdG1lc2hUeXBlOiBOZ3RyUmlnaWRCb2R5U3RhdGVbJ21lc2hUeXBlJ10gPSAnbWVzaCcsXG5cdCkge1xuXHRcdG9iamVjdC51cGRhdGVXb3JsZE1hdHJpeCh0cnVlLCBmYWxzZSk7XG5cdFx0Y29uc3QgaW52ZXJ0ZWRXb3JsZE1hdHJpeCA9IG9iamVjdC5wYXJlbnQhLm1hdHJpeFdvcmxkLmNsb25lKCkuaW52ZXJ0KCk7XG5cdFx0cmV0dXJuIHtcblx0XHRcdG9iamVjdCxcblx0XHRcdHJpZ2lkQm9keSxcblx0XHRcdGludmVydGVkV29ybGRNYXRyaXgsXG5cdFx0XHRzZXRNYXRyaXg6IHNldE1hdHJpeFxuXHRcdFx0XHQ/IHNldE1hdHJpeFxuXHRcdFx0XHQ6IChtYXRyaXg6IE1hdHJpeDQpID0+IHtcblx0XHRcdFx0XHRcdG9iamVjdC5tYXRyaXguY29weShtYXRyaXgpO1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRnZXRNYXRyaXg6IGdldE1hdHJpeCA/IGdldE1hdHJpeCA6IChtYXRyaXg6IE1hdHJpeDQpID0+IG1hdHJpeC5jb3B5KG9iamVjdC5tYXRyaXgpLFxuXHRcdFx0c2NhbGU6IHdvcmxkU2NhbGUgfHwgb2JqZWN0LmdldFdvcmxkU2NhbGUoX3NjYWxlKS5jbG9uZSgpLFxuXHRcdFx0aXNTbGVlcGluZzogZmFsc2UsXG5cdFx0XHRtZXNoVHlwZSxcblx0XHR9O1xuXHR9XG59XG4iXX0=
@@ -1,9 +1,10 @@
1
1
  import * as i0 from '@angular/core';
2
- import { input, viewChild, Component, CUSTOM_ELEMENTS_SCHEMA, ChangeDetectionStrategy, effect, Directive, inject, DestroyRef, signal, computed, untracked, model, output, ElementRef, viewChildren } from '@angular/core';
2
+ import { input, viewChild, Component, CUSTOM_ELEMENTS_SCHEMA, ChangeDetectionStrategy, effect, Directive, contentChild, TemplateRef, inject, DestroyRef, signal, computed, untracked, model, output, ElementRef, viewChildren } from '@angular/core';
3
3
  import { Vector3 as Vector3$1, Quaternion as Quaternion$1, EventQueue, ColliderDesc, ActiveEvents, RigidBodyDesc } from '@dimforge/rapier3d-compat';
4
- import { extend, injectBeforeRender, injectStore, pick, vector3, getEmitter, hasListener, getLocalState, resolveRef } from 'angular-three';
4
+ import { extend, injectBeforeRender, injectStore, pick, vector3, getLocalState, getEmitter, hasListener, resolveRef } from 'angular-three';
5
5
  import { mergeInputs } from 'ngxtension/inject-inputs';
6
6
  import { Group, LineSegments, LineBasicMaterial, BufferAttribute, Quaternion, Euler, Vector3, Object3D, Matrix4, MathUtils, DynamicDrawUsage } from 'three';
7
+ import { NgTemplateOutlet } from '@angular/common';
7
8
  import { mergeVertices } from 'three-stdlib';
8
9
  import { assertInjector } from 'ngxtension/assert-injector';
9
10
 
@@ -263,8 +264,21 @@ const defaultOptions$1 = {
263
264
  timeStep: 1 / 60,
264
265
  debug: false,
265
266
  };
267
+ class NgtrPhysicsFallback {
268
+ static ngTemplateContextGuard(_, ctx) {
269
+ return true;
270
+ }
271
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.4", ngImport: i0, type: NgtrPhysicsFallback, deps: [], target: i0.ɵɵFactoryTarget.Directive });
272
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.4", type: NgtrPhysicsFallback, isStandalone: true, selector: "ng-template[rapierFallback]", ngImport: i0 });
273
+ }
274
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.4", ngImport: i0, type: NgtrPhysicsFallback, decorators: [{
275
+ type: Directive,
276
+ args: [{ selector: 'ng-template[rapierFallback]', standalone: true }]
277
+ }] });
266
278
  class NgtrPhysics {
267
279
  options = input(defaultOptions$1, { transform: mergeInputs(defaultOptions$1) });
280
+ content = contentChild.required(TemplateRef);
281
+ fallbackContent = contentChild(NgtrPhysicsFallback);
268
282
  updatePriority = pick(this.options, 'updatePriority');
269
283
  updateLoop = pick(this.options, 'updateLoop');
270
284
  numSolverIterations = pick(this.options, 'numSolverIterations');
@@ -285,6 +299,7 @@ class NgtrPhysics {
285
299
  store = injectStore();
286
300
  destroyRef = inject(DestroyRef);
287
301
  rapierConstruct = signal(null);
302
+ rapierError = signal(null);
288
303
  rapier = this.rapierConstruct.asReadonly();
289
304
  ready = computed(() => !!this.rapier());
290
305
  worldSingleton = computed(() => {
@@ -312,7 +327,7 @@ class NgtrPhysics {
312
327
  .then(this.rapierConstruct.set.bind(this.rapierConstruct))
313
328
  .catch((err) => {
314
329
  console.error(`[NGT] Failed to load rapier3d-compat`, err);
315
- return Promise.reject(err);
330
+ this.rapierError.set(err?.message ?? err.toString());
316
331
  });
317
332
  effect(() => {
318
333
  this.updateWorldEffect();
@@ -562,18 +577,24 @@ class NgtrPhysics {
562
577
  };
563
578
  }
564
579
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.4", ngImport: i0, type: NgtrPhysics, deps: [], target: i0.ɵɵFactoryTarget.Component });
565
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.4", type: NgtrPhysics, isStandalone: true, selector: "ngtr-physics", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
566
- @if (debug()) {
567
- <ngtr-debug [world]="worldSingleton()?.proxy" />
580
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.4", type: NgtrPhysics, isStandalone: true, selector: "ngtr-physics", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, queries: [{ propertyName: "content", first: true, predicate: TemplateRef, descendants: true, isSignal: true }, { propertyName: "fallbackContent", first: true, predicate: NgtrPhysicsFallback, descendants: true, isSignal: true }], ngImport: i0, template: `
581
+ @if (rapierConstruct()) {
582
+ @if (debug()) {
583
+ <ngtr-debug [world]="worldSingleton()?.proxy" />
584
+ }
585
+
586
+ <ngtr-frame-stepper
587
+ [ready]="ready()"
588
+ [stepFn]="step.bind(this)"
589
+ [type]="updateLoop()"
590
+ [updatePriority]="updatePriority()"
591
+ />
592
+
593
+ <ng-container [ngTemplateOutlet]="content()" />
594
+ } @else if (rapierError() && !!fallbackContent()) {
595
+ <ng-container [ngTemplateOutlet]="$any(fallbackContent())" [ngTemplateOutletContext]="{ error: rapierError() }" />
568
596
  }
569
- <ngtr-frame-stepper
570
- [ready]="ready()"
571
- [stepFn]="step.bind(this)"
572
- [type]="updateLoop()"
573
- [updatePriority]="updatePriority()"
574
- />
575
- <ng-content />
576
- `, isInline: true, dependencies: [{ kind: "component", type: NgtrDebug, selector: "ngtr-debug", inputs: ["world"] }, { kind: "directive", type: NgtrFrameStepper, selector: "ngtr-frame-stepper", inputs: ["ready", "updatePriority", "stepFn", "type"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
597
+ `, isInline: true, dependencies: [{ kind: "component", type: NgtrDebug, selector: "ngtr-debug", inputs: ["world"] }, { kind: "directive", type: NgtrFrameStepper, selector: "ngtr-frame-stepper", inputs: ["ready", "updatePriority", "stepFn", "type"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
577
598
  }
578
599
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.4", ngImport: i0, type: NgtrPhysics, decorators: [{
579
600
  type: Component,
@@ -581,19 +602,25 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.4", ngImpor
581
602
  selector: 'ngtr-physics',
582
603
  standalone: true,
583
604
  template: `
584
- @if (debug()) {
585
- <ngtr-debug [world]="worldSingleton()?.proxy" />
605
+ @if (rapierConstruct()) {
606
+ @if (debug()) {
607
+ <ngtr-debug [world]="worldSingleton()?.proxy" />
608
+ }
609
+
610
+ <ngtr-frame-stepper
611
+ [ready]="ready()"
612
+ [stepFn]="step.bind(this)"
613
+ [type]="updateLoop()"
614
+ [updatePriority]="updatePriority()"
615
+ />
616
+
617
+ <ng-container [ngTemplateOutlet]="content()" />
618
+ } @else if (rapierError() && !!fallbackContent()) {
619
+ <ng-container [ngTemplateOutlet]="$any(fallbackContent())" [ngTemplateOutletContext]="{ error: rapierError() }" />
586
620
  }
587
- <ngtr-frame-stepper
588
- [ready]="ready()"
589
- [stepFn]="step.bind(this)"
590
- [type]="updateLoop()"
591
- [updatePriority]="updatePriority()"
592
- />
593
- <ng-content />
594
621
  `,
595
622
  changeDetection: ChangeDetectionStrategy.OnPush,
596
- imports: [NgtrDebug, NgtrFrameStepper],
623
+ imports: [NgtrDebug, NgtrFrameStepper, NgTemplateOutlet],
597
624
  }]
598
625
  }], ctorParameters: () => [] });
599
626
 
@@ -696,6 +723,12 @@ class NgtrAnyCollider {
696
723
  const worldSingleton = this.physics.worldSingleton();
697
724
  if (!worldSingleton)
698
725
  return;
726
+ const localState = getLocalState(this.objectRef.nativeElement);
727
+ if (!localState)
728
+ return;
729
+ const parent = localState.parent();
730
+ if (!parent || !parent.isObject3D)
731
+ return;
699
732
  const state = this.createColliderState(collider, this.objectRef.nativeElement, this.rigidBody?.objectRef.nativeElement);
700
733
  this.physics.colliderStates.set(collider.handle, state);
701
734
  return () => {
@@ -931,16 +964,20 @@ class NgtrRigidBody {
931
964
  if (colliders === false)
932
965
  return [];
933
966
  const physicsColliders = this.physics.colliders();
934
- // if physics colliders is false explicitly, disable auto colliders for this object entirely.
935
- if (physicsColliders === false)
967
+ // if physics colliders is false explicitly AND colliders is not set, disable auto colliders for this object entirely.
968
+ if (physicsColliders === false && colliders === undefined)
936
969
  return [];
937
970
  const options = this.options();
938
971
  // if colliders on object is not set, use physics colliders
939
972
  if (!options.colliders)
940
973
  options.colliders = physicsColliders;
941
974
  const objectLocalState = getLocalState(this.objectRef.nativeElement);
942
- // track object's children
943
- objectLocalState?.nonObjects();
975
+ if (!objectLocalState)
976
+ return [];
977
+ // track object's parent and non-object children
978
+ const [parent] = [objectLocalState.parent(), objectLocalState.nonObjects()];
979
+ if (!parent || !parent.isObject3D)
980
+ return [];
944
981
  return createColliderOptions(this.objectRef.nativeElement, options, true);
945
982
  });
946
983
  constructor() {
@@ -965,6 +1002,12 @@ class NgtrRigidBody {
965
1002
  if (!body)
966
1003
  return;
967
1004
  const transformState = untracked(this.transformState);
1005
+ const localState = getLocalState(this.objectRef.nativeElement);
1006
+ if (!localState)
1007
+ return;
1008
+ const parent = localState.parent();
1009
+ if (!parent || !parent.isObject3D)
1010
+ return;
968
1011
  const state = this.createRigidBodyState(body, this.objectRef.nativeElement);
969
1012
  this.physics.rigidBodyStates.set(body.handle, transformState ? transformState(state) : state);
970
1013
  return () => {
@@ -1543,30 +1586,31 @@ class NgtrInstancedRigidBodies {
1543
1586
  if (colliders === false)
1544
1587
  return [];
1545
1588
  const physicsColliders = this.physics.colliders();
1546
- // if physics colliders is false explicitly, disable auto colliders for this object entirely.
1547
- if (physicsColliders === false)
1589
+ // if physics colliders is false explicitly AND colliders is not set, disable auto colliders for this object entirely.
1590
+ if (physicsColliders === false && colliders === undefined)
1548
1591
  return [];
1549
1592
  const options = this.options();
1550
1593
  // if colliders on object is not set, use physics colliders
1551
1594
  if (!options.colliders)
1552
1595
  options.colliders = physicsColliders;
1553
1596
  const objectLocalState = getLocalState(this.objectRef.nativeElement);
1554
- // track object's children
1555
- objectLocalState?.nonObjects();
1597
+ if (!objectLocalState)
1598
+ return [];
1599
+ // track object's parent and non-object children
1600
+ const [parent] = [objectLocalState.parent(), objectLocalState.nonObjects()];
1601
+ if (!parent || !parent.isObject3D)
1602
+ return [];
1556
1603
  return createColliderOptions(this.objectRef.nativeElement, options);
1557
1604
  });
1558
1605
  constructor() {
1559
1606
  extend({ Object3D });
1560
1607
  effect(() => {
1561
- this.setInstancedMeshMatrixEffect();
1608
+ const instancedMesh = this.instancedMesh();
1609
+ if (!instancedMesh)
1610
+ return;
1611
+ instancedMesh.instanceMatrix.setUsage(DynamicDrawUsage);
1562
1612
  });
1563
1613
  }
1564
- setInstancedMeshMatrixEffect() {
1565
- const instancedMesh = this.instancedMesh();
1566
- if (!instancedMesh)
1567
- return;
1568
- instancedMesh.instanceMatrix.setUsage(DynamicDrawUsage);
1569
- }
1570
1614
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.4", ngImport: i0, type: NgtrInstancedRigidBodies, deps: [], target: i0.ɵɵFactoryTarget.Component });
1571
1615
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.4", type: NgtrInstancedRigidBodies, isStandalone: true, selector: "ngt-object3D[ngtrInstancedRigidBodies]", inputs: { position: { classPropertyName: "position", publicName: "position", isSignal: true, isRequired: false, transformFunction: null }, rotation: { classPropertyName: "rotation", publicName: "rotation", isSignal: true, isRequired: false, transformFunction: null }, scale: { classPropertyName: "scale", publicName: "scale", isSignal: true, isRequired: false, transformFunction: null }, quaternion: { classPropertyName: "quaternion", publicName: "quaternion", isSignal: true, isRequired: false, transformFunction: null }, userData: { classPropertyName: "userData", publicName: "userData", isSignal: true, isRequired: false, transformFunction: null }, instances: { classPropertyName: "instances", publicName: "ngtrInstancedRigidBodies", isSignal: true, isRequired: false, transformFunction: null }, options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "position": "position()", "rotation": "rotation()", "scale": "scale()", "quaternion": "quaternion()", "userData": "userData()" } }, viewQueries: [{ propertyName: "instanceWrapperRef", first: true, predicate: ["instanceWrapper"], descendants: true, isSignal: true }, { propertyName: "rigidBodyRefs", predicate: NgtrRigidBody, descendants: true, isSignal: true }], exportAs: ["instancedRigidBodies"], ngImport: i0, template: `
1572
1616
  <ngt-object3D #instanceWrapper>
@@ -1648,7 +1692,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.4", ngImpor
1648
1692
  '[quaternion]': 'quaternion()',
1649
1693
  '[userData]': 'userData()',
1650
1694
  },
1651
- imports: [NgtrRigidBody, NgtrRigidBody, NgtrAnyCollider],
1695
+ imports: [NgtrRigidBody, NgtrAnyCollider],
1652
1696
  }]
1653
1697
  }], ctorParameters: () => [] });
1654
1698
 
@@ -1767,16 +1811,16 @@ class NgtrMeshCollider {
1767
1811
  const rigidBodyOptions = this.rigidBody.options();
1768
1812
  rigidBodyOptions.colliders = this.colliders();
1769
1813
  const objectLocalState = getLocalState(this.objectRef.nativeElement);
1814
+ if (!objectLocalState)
1815
+ return [];
1770
1816
  // track object's children
1771
- objectLocalState?.nonObjects();
1772
- objectLocalState?.objects();
1817
+ objectLocalState.nonObjects();
1818
+ objectLocalState.objects();
1773
1819
  return createColliderOptions(this.objectRef.nativeElement, rigidBodyOptions, false);
1774
1820
  });
1775
1821
  constructor() {
1776
1822
  extend({ Object3D });
1777
- if (!this.objectRef.nativeElement.userData) {
1778
- this.objectRef.nativeElement.userData = {};
1779
- }
1823
+ this.objectRef.nativeElement.userData ??= {};
1780
1824
  this.objectRef.nativeElement.userData['ngtrRapierType'] = 'MeshCollider';
1781
1825
  }
1782
1826
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.4", ngImport: i0, type: NgtrMeshCollider, deps: [], target: i0.ɵɵFactoryTarget.Component });
@@ -1824,5 +1868,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.4", ngImpor
1824
1868
  * Generated bundle index. Do not edit.
1825
1869
  */
1826
1870
 
1827
- export { NgtrAnyCollider, NgtrBallCollider, NgtrCapsuleCollider, NgtrConeCollider, NgtrConvexHullCollider, NgtrConvexMeshCollider, NgtrCuboidCollider, NgtrCylinderCollider, NgtrHeightfieldCollider, NgtrInstancedRigidBodies, NgtrMeshCollider, NgtrPhysics, NgtrPolylineCollider, NgtrRigidBody, NgtrRoundConeCollider, NgtrRoundConvexHullCollider, NgtrRoundConvexMeshCollider, NgtrRoundCuboidCollider, NgtrRoundCylinderCollider, NgtrTrimeshCollider, injectFixedJoint, injectPrismaticJoint, injectRevoluteJoint, injectRopeJoint, injectSphericalJoint, injectSpringJoint, rigidBodyDefaultOptions };
1871
+ export { NgtrAnyCollider, NgtrBallCollider, NgtrCapsuleCollider, NgtrConeCollider, NgtrConvexHullCollider, NgtrConvexMeshCollider, NgtrCuboidCollider, NgtrCylinderCollider, NgtrHeightfieldCollider, NgtrInstancedRigidBodies, NgtrMeshCollider, NgtrPhysics, NgtrPhysicsFallback, NgtrPolylineCollider, NgtrRigidBody, NgtrRoundConeCollider, NgtrRoundConvexHullCollider, NgtrRoundConvexMeshCollider, NgtrRoundCuboidCollider, NgtrRoundCylinderCollider, NgtrTrimeshCollider, injectFixedJoint, injectPrismaticJoint, injectRevoluteJoint, injectRopeJoint, injectSphericalJoint, injectSpringJoint, rigidBodyDefaultOptions };
1828
1872
  //# sourceMappingURL=angular-three-rapier.mjs.map