angular-three 2.0.0-beta.306 → 2.0.0-beta.307

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.
@@ -232,9 +232,13 @@ export class NgtRenderer {
232
232
  const cRS = oldChild.__ngt_renderer__;
233
233
  // if parent is still falsy, we don't know what to do with the parent.
234
234
  // we'll just remove the child and destroy it
235
- if (parent == null && cRS?.[0 /* NgtRendererClassId.type */] !== 'three') {
236
- removeThreeChild(oldChild, undefined, true);
237
- this.destroyInternal(oldChild, undefined);
235
+ if (parent == null) {
236
+ if (cRS) {
237
+ if (cRS[0 /* NgtRendererClassId.type */] === 'three') {
238
+ removeThreeChild(oldChild, undefined, true);
239
+ }
240
+ this.destroyInternal(oldChild, undefined);
241
+ }
238
242
  return;
239
243
  }
240
244
  const pRS = parent.__ngt_renderer__;
@@ -565,4 +569,4 @@ export function provideNgtRenderer(store) {
565
569
  }
566
570
  export { extend } from './catalogue';
567
571
  export { HTML, ROUTED_SCENE } from './constants';
568
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvc3JjL2xpYi9yZW5kZXJlci9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUNOLFVBQVUsRUFFVixnQkFBZ0IsRUFFaEIsWUFBWSxFQUNaLE1BQU0sRUFDTix3QkFBd0IsRUFDeEIsU0FBUyxHQUNULE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE9BQU8sRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNyRCxPQUFPLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFFaEUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDakMsT0FBTyxFQUFrQixXQUFXLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNwRSxPQUFPLEVBQXFCLGVBQWUsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNqRSxPQUFPLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxlQUFlLEVBQUUsNEJBQTRCLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDcEgsT0FBTyxFQUdOLFFBQVEsRUFDUixVQUFVLEVBQ1YsNEJBQTRCLEVBQzVCLEtBQUssRUFDTCxXQUFXLEVBQ1gsU0FBUyxHQUNULE1BQU0sU0FBUyxDQUFDO0FBQ2pCLE9BQU8sRUFBc0IsZ0JBQWdCLEVBQUUsYUFBYSxFQUFFLGlCQUFpQixFQUFFLGdCQUFnQixFQUFFLE1BQU0sU0FBUyxDQUFDOztBQUduSCxNQUFNLE9BQU8sa0JBQWtCO0lBRC9CO1FBRVMsNEJBQXVCLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFDdkUsYUFBUSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM1QixjQUFTLEdBQUcsZUFBZSxFQUFFLENBQUM7UUFDOUIsY0FBUyxHQUFHLFdBQVcsRUFBRSxDQUFDO1FBRTFCLHdCQUFtQixHQUEyQixFQUFFLENBQUM7UUFDakQsZ0JBQVcsR0FBRyxJQUFJLEdBQUcsRUFBcUIsQ0FBQztRQUMzQyxjQUFTLEdBQUcsSUFBSSxHQUFHLEVBQVUsQ0FBQztLQWtDdEM7SUFoQ0EsY0FBYyxDQUFDLFdBQWdCLEVBQUUsSUFBMEI7UUFDMUQsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsdUJBQXVCLENBQUMsY0FBYyxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUV4RixJQUFJLENBQUMsSUFBSTtZQUFFLE9BQU8sZ0JBQWdCLENBQUM7UUFFbkMsbUNBQW1DO1FBQ25DLElBQUssSUFBcUIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQzFDLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztZQUNoRCxPQUFPLGdCQUFnQixDQUFDO1FBQ3pCLENBQUM7UUFFRCxJQUFLLElBQXFCLENBQUMsTUFBTSxDQUFDLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQztZQUNsRCxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDN0IsQ0FBQztRQUVELElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUM3QyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDZixJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FDbkIsSUFBSSxDQUFDLEVBQUUsRUFDUCxDQUFDLFFBQVEsR0FBRyxJQUFJLFdBQVcsQ0FDMUIsZ0JBQWdCLEVBQ2hCLElBQUksQ0FBQyxTQUFTLEVBQ2QsSUFBSSxDQUFDLFFBQVEsRUFDYixJQUFJLENBQUMsbUJBQW1CLEVBQ3hCLElBQUksQ0FBQyxTQUFTO1lBQ2Qsc0ZBQXNGO1lBQ3RGLENBQUMsV0FBVyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUMxRSxDQUFDLENBQ0YsQ0FBQztRQUNILENBQUM7UUFDRCxPQUFPLFFBQVEsQ0FBQztJQUNqQixDQUFDOzhHQXpDVyxrQkFBa0I7a0hBQWxCLGtCQUFrQjs7MkZBQWxCLGtCQUFrQjtrQkFEOUIsVUFBVTs7QUE2Q1gsTUFBTSxPQUFPLFdBQVc7SUFHdkIsWUFDUyxRQUFtQixFQUNuQixTQUFtQyxFQUNuQyxRQUFrQixFQUNsQixtQkFBMkMsRUFDM0MsU0FBNEMsRUFDNUMsU0FBUyxJQUFJO1FBTGIsYUFBUSxHQUFSLFFBQVEsQ0FBVztRQUNuQixjQUFTLEdBQVQsU0FBUyxDQUEwQjtRQUNuQyxhQUFRLEdBQVIsUUFBUSxDQUFVO1FBQ2xCLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBd0I7UUFDM0MsY0FBUyxHQUFULFNBQVMsQ0FBbUM7UUFDNUMsV0FBTSxHQUFOLE1BQU0sQ0FBTztRQVJkLHFCQUFnQixHQUEyQixFQUFFLENBQUM7UUF1a0J0RCxlQUFVLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUMxRCxZQUFPLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNwRCxnQkFBVyxHQUFpQyxJQUFJLENBQUM7UUFDakQsc0JBQWlCLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3hFLGdCQUFXLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM1RCxhQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN0RCxnQkFBVyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDNUQsYUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDdEQsZ0JBQVcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzVELGFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBdmtCbkQsQ0FBQztJQUVKLGFBQWEsQ0FBQyxJQUFZLEVBQUUsU0FBcUM7UUFDaEUsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBRTdELDZDQUE2QztRQUM3QyxJQUFJLFNBQVMsRUFBRSxDQUFDO1lBQ2YsT0FBTyxVQUFVLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDbEQsQ0FBQztRQUVELDJEQUEyRDtRQUMzRCxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNqQixJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztZQUNwQixNQUFNLElBQUksR0FBRyxVQUFVLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDL0UsSUFBSSxDQUFDLGdCQUFnQiw0Q0FBb0MsR0FBRyxHQUFHLEVBQUUsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLEVBQUUsUUFBUSxDQUFDO1lBQ2xHLE9BQU8sSUFBSSxDQUFDO1FBQ2IsQ0FBQztRQUVELElBQUksSUFBSSxLQUFLLGVBQWUsQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUN6QyxPQUFPLFVBQVUsQ0FBQyxRQUFRLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNyRCxDQUFDO1FBRUQsSUFBSSxJQUFJLEtBQUssZUFBZSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ3hDLE1BQU0sYUFBYSxHQUFHLFdBQVcsQ0FBQyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUNqRixPQUFPLFVBQVUsQ0FDaEIsT0FBTyxFQUNQLE1BQU0sQ0FBQyxNQUFNLENBQ1osRUFBRSxnQkFBZ0IsRUFBRSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsRUFBRTtZQUM3QyxvREFBb0Q7WUFDcEQsb0VBQW9FO1lBQ3BFO2dCQUNDLE9BQU8sRUFBRTtvQkFDUixLQUFLLEVBQUUsSUFBSTtvQkFDWCxhQUFhO29CQUNiLFNBQVMsQ0FBQyxNQUF1Qjt3QkFDaEMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7b0JBQ2xDLENBQUM7aUJBQ0Q7YUFDRCxDQUNELEVBQ0QsSUFBSSxDQUFDLFFBQVEsQ0FDYixDQUFDO1FBQ0gsQ0FBQztRQUVELE1BQU0sQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsRUFBRSxLQUFLLElBQUksRUFBRSxDQUFDLENBQUM7UUFFeEQsSUFBSSxJQUFJLEtBQUssZUFBZSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQzVDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO2dCQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsNkNBQTZDLENBQUMsQ0FBQztZQUNyRixNQUFNLE1BQU0sR0FBRyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDL0IsTUFBTSxVQUFVLEdBQUcsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3pDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztnQkFDakIsNkRBQTZEO2dCQUM3RCxPQUFPLENBQUMsTUFBTSxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7WUFDN0QsQ0FBQztZQUNELE9BQU8sVUFBVSxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ25ELENBQUM7UUFFRCxNQUFNLFNBQVMsR0FBRyxhQUFhLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDaEYsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUU5QyxnREFBZ0Q7UUFDaEQsSUFBSSxXQUFXLEVBQUUsQ0FBQztZQUNqQixNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMsSUFBSSxXQUFXLENBQUMsR0FBRyxZQUFZLENBQUMsRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQztZQUN0RixNQUFNLElBQUksR0FBRyxVQUFVLENBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDMUQsTUFBTSxVQUFVLEdBQUcsYUFBYSxDQUFDLFFBQVEsQ0FBa0IsQ0FBQztZQUU1RCx3Q0FBd0M7WUFDeEMsSUFBSSxFQUFFLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7Z0JBQzNCLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUNsQyxDQUFDO2lCQUFNLElBQUksRUFBRSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO2dCQUNsQyxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDbEMsQ0FBQztZQUVELE9BQU8sSUFBSSxDQUFDO1FBQ2IsQ0FBQztRQUVELE9BQU8sVUFBVSxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFFRCxhQUFhLENBQUMsS0FBYTtRQUMxQixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUVuRCx3REFBd0Q7UUFDeEQsdUZBQXVGO1FBQ3ZGLG9GQUFvRjtRQUNwRixPQUFPLENBQUMsNEJBQTRCLENBQUMsR0FBRyxDQUFDLElBQThCLEVBQUUsRUFBRTtZQUMxRSxJQUFJLElBQUksS0FBSyxNQUFNLEVBQUUsQ0FBQztnQkFDckIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNyQyxDQUFDO2lCQUFNLElBQUksT0FBTyxJQUFJLEtBQUssUUFBUSxFQUFFLENBQUM7Z0JBQ3JDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDckMsQ0FBQztRQUNGLENBQUMsQ0FBQztRQUVGLE9BQU8sVUFBVSxDQUFDLFNBQVMsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3RELENBQUM7SUFFRCxXQUFXLENBQUMsTUFBdUIsRUFBRSxRQUF5QjtRQUM3RCxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUM7UUFDcEMsTUFBTSxHQUFHLEdBQUcsUUFBUSxDQUFDLGdCQUFnQixDQUFDO1FBRXRDLElBQ0MsR0FBRyxpQ0FBeUIsS0FBSyxLQUFLO1lBQ3RDLENBQUMsUUFBUSxZQUFZLElBQUksSUFBSSxHQUFHLGlDQUF5QixLQUFLLEtBQUssQ0FBQyxFQUNuRSxDQUFDO1lBQ0YsUUFBUSxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQztZQUUzQixJQUFJLFFBQVEsQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxvQkFBb0IsQ0FBQyxZQUFZLFdBQVcsRUFBRSxDQUFDO2dCQUM3RixJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsb0JBQW9CLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQztnQkFDcEUsT0FBTztZQUNSLENBQUM7WUFFRCxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDNUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztnQkFDVCxTQUFTLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO2dCQUM1QixJQUFJLElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLFFBQVEsQ0FBQyxFQUFFLENBQUM7b0JBQzVELG9HQUFvRztvQkFDcEcsTUFBTSwwQkFBMEIsR0FBRyw0QkFBNEIsQ0FBQyxNQUFNLENBQUMsQ0FBQztvQkFDeEUsSUFBSSwwQkFBMEI7d0JBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQywwQkFBMEIsRUFBRSxRQUFRLENBQUMsQ0FBQztnQkFDeEYsQ0FBQztZQUNGLENBQUM7WUFFRCxPQUFPO1FBQ1IsQ0FBQztRQUVELElBQUksR0FBRyxFQUFFLGlDQUF5QixLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ2xELFNBQVMsQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFDNUIsT0FBTztRQUNSLENBQUM7UUFFRCxTQUFTLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQzVCLFFBQVEsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFFM0IsMkJBQTJCO1FBQzNCLElBQUksR0FBRyxFQUFFLGlDQUF5QixLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQ2pELElBQUksQ0FBQyxHQUFHLDRDQUFvQztnQkFBRSxJQUFJLENBQUMsc0JBQXNCLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDcEYsSUFBSSxHQUFHLDRDQUFvQyxFQUFFLENBQUM7Z0JBQzdDLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLEdBQUcsNENBQW9DLENBQUMsQ0FBQztZQUNuRSxDQUFDO1lBQ0QsT0FBTztRQUNSLENBQUM7UUFFRCx3QkFBd0I7UUFDeEIsSUFBSSxHQUFHLGlDQUF5QixLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQy9DLElBQUksQ0FBQyxHQUFHLDRDQUFvQztnQkFBRSxJQUFJLENBQUMsc0JBQXNCLENBQUMsTUFBTSxDQUFDLENBQUM7WUFFbEYsSUFBSSxHQUFHLDRDQUFvQyxFQUFFLENBQUM7Z0JBQzdDLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyw0Q0FBb0MsRUFBRSxRQUFRLENBQUMsQ0FBQztZQUNyRSxDQUFDO1lBQ0QsT0FBTztRQUNSLENBQUM7UUFFRCxvREFBb0Q7UUFDcEQsSUFBSSxHQUFHLGlDQUF5QixLQUFLLE9BQU8sSUFBSSxHQUFHLEVBQUUsaUNBQXlCLEtBQUssT0FBTyxFQUFFLENBQUM7WUFDNUYsTUFBTSxHQUFHLEdBQUcsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBRXBDLDhDQUE4QztZQUM5QyxJQUFJLEdBQUcsRUFBRSxhQUFhLEVBQUUsR0FBRyxDQUFDLFFBQVEsQ0FBQztnQkFBRSxPQUFPO1lBQzlDLElBQUksTUFBTSxLQUFLLFFBQVE7Z0JBQUUsT0FBTztZQUVoQyxxQkFBcUI7WUFDckIsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBQ25DLE9BQU87UUFDUixDQUFDO1FBRUQsMkNBQTJDO1FBQzNDLElBQUksR0FBRyxpQ0FBeUIsS0FBSyxPQUFPLEVBQUUsQ0FBQztZQUM5QyxLQUFLLE1BQU0sV0FBVyxJQUFJLEdBQUcsRUFBRSxxQ0FBNkIsSUFBSSxFQUFFLEVBQUUsQ0FBQztnQkFDcEUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsV0FBVyxDQUFDLENBQUM7WUFDdkMsQ0FBQztRQUNGLENBQUM7UUFFRCxJQUFJLElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLFFBQVEsQ0FBQyxFQUFFLENBQUM7WUFDNUQsb0dBQW9HO1lBQ3BHLE1BQU0sMEJBQTBCLEdBQUcsNEJBQTRCLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDeEUsSUFBSSwwQkFBMEI7Z0JBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQywwQkFBMEIsRUFBRSxRQUFRLENBQUMsQ0FBQztZQUN2RixPQUFPO1FBQ1IsQ0FBQztJQUNGLENBQUM7SUFFRCxZQUFZLENBQ1gsTUFBdUIsRUFDdkIsUUFBeUI7UUFLekIsaUVBQWlFO1FBQ2pFLHdHQUF3RztRQUN4Ryx1REFBdUQ7UUFDdkQsSUFBSTtRQUVKLElBQUksTUFBTSxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsSUFBSSxNQUFNLEtBQUssUUFBUTtZQUFFLE9BQU87UUFDOUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUVELFdBQVcsQ0FBQyxNQUF1QixFQUFFLFFBQXlCLEVBQUUsYUFBbUM7UUFDbEcsSUFBSSxNQUFNLElBQUksSUFBSSxFQUFFLENBQUM7WUFDcEIsTUFBTSxHQUFHLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsRUFBRSxNQUFNLENBQUM7Z0JBQ3pELFFBQVEsQ0FBQyxnQkFBZ0IsbUNBQTJCLENBQW9CLENBQUM7UUFDM0UsQ0FBQztRQUVELE1BQU0sR0FBRyxHQUFHLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQztRQUV0QyxzRUFBc0U7UUFDdEUsNkNBQTZDO1FBQzdDLElBQUksTUFBTSxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUUsaUNBQXlCLEtBQUssT0FBTyxFQUFFLENBQUM7WUFDbEUsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUM1QyxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsRUFBRSxTQUFTLENBQUMsQ0FBQztZQUMxQyxPQUFPO1FBQ1IsQ0FBQztRQUVELE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQztRQUVwQyxJQUNDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7WUFDZCxNQUFNLFlBQVksT0FBTztZQUN6QixDQUFDLFFBQVEsWUFBWSxPQUFPLElBQUksUUFBUSxZQUFZLElBQUksSUFBSSxRQUFRLFlBQVksT0FBTyxDQUFDLEVBQ3ZGLENBQUM7WUFDRixJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDNUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFDdkMsT0FBTztRQUNSLENBQUM7UUFFRCxJQUFJLEdBQUcsaUNBQXlCLEtBQUssS0FBSyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxpQ0FBeUIsS0FBSyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ2hHLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQztZQUM1QyxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQztZQUN2QyxPQUFPO1FBQ1IsQ0FBQztRQUVELElBQUksR0FBRyxpQ0FBeUIsS0FBSyxPQUFPLElBQUksR0FBRyxpQ0FBeUIsS0FBSyxPQUFPLEVBQUUsQ0FBQztZQUMxRixnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ3pDLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQ3ZDLE9BQU87UUFDUixDQUFDO1FBRUQsSUFDQyxHQUFHLGlDQUF5QixLQUFLLFFBQVE7WUFDekMsR0FBRyw0Q0FBb0MsRUFBRSxnQkFBZ0IsaUNBQXlCLEtBQUssT0FBTyxFQUM3RixDQUFDO1lBQ0YsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLDRDQUFvQyxFQUFFLFFBQVEsRUFBRSxhQUFhLENBQUMsQ0FBQztZQUNuRixPQUFPO1FBQ1IsQ0FBQztRQUVELElBQUksR0FBRyxpQ0FBeUIsS0FBSyxPQUFPLEVBQUUsQ0FBQztZQUM5QyxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQztZQUN2QyxPQUFPO1FBQ1IsQ0FBQztRQUVELE1BQU0sMEJBQTBCLEdBQUcsNEJBQTRCLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDeEUsSUFBSSwwQkFBMEI7WUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLDBCQUEwQixFQUFFLFFBQVEsRUFBRSxhQUFhLENBQUMsQ0FBQztRQUN0RyxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsRUFBRSwwQkFBNkMsQ0FBQyxDQUFDO0lBQy9FLENBQUM7SUFFRCxVQUFVLENBQUMsSUFBcUI7UUFDL0IsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDO1FBQ2pDLElBQUksRUFBRSxFQUFFLG1DQUEyQjtZQUFFLE9BQU8sRUFBRSxtQ0FBMkIsQ0FBQztRQUMxRSxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFFTyxvQkFBb0IsQ0FDM0IsRUFBbUIsRUFDbkIsSUFBWSxFQUNaLEtBQWEsRUFDYixVQUFzQztRQUV0QyxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUMsZ0JBQWdCLENBQUM7UUFDL0IsSUFBSSxFQUFFLHNDQUE4QjtZQUFFLE9BQU8sS0FBSyxDQUFDO1FBRW5ELElBQUksRUFBRSxpQ0FBeUIsS0FBSyxPQUFPLEVBQUUsQ0FBQztZQUM3QyxJQUFJLElBQUksS0FBSyxrQkFBa0IsQ0FBQyxlQUFlLEVBQUUsQ0FBQztnQkFDakQscUdBQXFHO2dCQUNyRyxpRUFBaUU7Z0JBQ2pFLElBQUksUUFBUSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDN0IsSUFBSSxLQUFLLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztvQkFDckIsUUFBUSxHQUFHLENBQUMsQ0FBQztvQkFDYixPQUFPLENBQUMsSUFBSSxDQUFDLHFEQUFxRCxDQUFDLENBQUM7Z0JBQ3JFLENBQUM7Z0JBQ0QsTUFBTSxVQUFVLEdBQUcsYUFBYSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUNyQyxJQUFJLFVBQVU7b0JBQUUsVUFBVSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7WUFDaEQsQ0FBQztpQkFBTSxJQUFJLElBQUksS0FBSyxrQkFBa0IsQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDL0MsZ0NBQWdDO2dCQUNoQyxNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUMvQixJQUFJLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQztvQkFDbEIsTUFBTSxVQUFVLEdBQUcsYUFBYSxDQUFDLEVBQUUsQ0FBQyxDQUFDO29CQUNyQyxJQUFJLFVBQVU7d0JBQUUsVUFBVSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7Z0JBQzNDLENBQUM7WUFDRixDQUFDO2lCQUFNLElBQUksSUFBSSxLQUFLLGtCQUFrQixDQUFDLFNBQVMsRUFBRSxDQUFDO2dCQUNsRCxpQkFBaUI7Z0JBQ2pCLElBQUksWUFBWSxHQUE4QixLQUFLLENBQUM7Z0JBQ3BELElBQUksWUFBWSxLQUFLLEVBQUUsSUFBSSxZQUFZLEtBQUssTUFBTSxJQUFJLFlBQVksS0FBSyxPQUFPLEVBQUUsQ0FBQztvQkFDaEYsWUFBWSxHQUFHLFlBQVksS0FBSyxNQUFNLElBQUksWUFBWSxLQUFLLEVBQUUsQ0FBQztnQkFDL0QsQ0FBQztxQkFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQyxFQUFFLENBQUM7b0JBQ3pDLFlBQVksR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUM7Z0JBQ3JDLENBQUM7Z0JBQ0QsRUFBRSxxQ0FBNkIsR0FBRyxZQUFZLENBQUM7WUFDaEQsQ0FBQztpQkFBTSxDQUFDO2dCQUNQLFVBQVUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7WUFDbkMsQ0FBQztZQUVELE9BQU8sS0FBSyxDQUFDO1FBQ2QsQ0FBQztRQUVELE9BQU8sSUFBSSxDQUFDO0lBQ2IsQ0FBQztJQUVELFlBQVksQ0FBQyxFQUFtQixFQUFFLElBQVksRUFBRSxLQUFhLEVBQUUsU0FBcUM7UUFDbkcsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBRTFFLElBQUksV0FBVyxFQUFFLENBQUM7WUFDakIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM3QyxDQUFDO0lBQ0YsQ0FBQztJQUVELGVBQWUsQ0FBQyxFQUFtQixFQUFFLElBQVksRUFBRSxTQUFxQztRQUN2RixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxTQUFVLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFFL0UsSUFBSSxXQUFXLEVBQUUsQ0FBQztZQUNqQixJQUFJLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQ3BELENBQUM7SUFDRixDQUFDO0lBRUQsV0FBVyxDQUFDLEVBQW1CLEVBQUUsSUFBWSxFQUFFLEtBQVU7UUFDeEQsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLGdCQUFnQixDQUFDO1FBQy9CLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxzQ0FBOEI7WUFBRSxPQUFPO1FBRXBELElBQUksRUFBRSxpQ0FBeUIsS0FBSyxPQUFPLEVBQUUsQ0FBQztZQUM3QyxJQUFJLElBQUksS0FBSyxrQkFBa0IsQ0FBQyxVQUFVLEVBQUUsQ0FBQztnQkFDNUMsNEZBQTRGO2dCQUM1RixJQUFJLFNBQVMsSUFBSSxLQUFLLElBQUksS0FBSyxDQUFDLFNBQVMsQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDO29CQUNyRCxLQUFLLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDO2dCQUMvQixDQUFDO2dCQUNELFVBQVUsQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQ3RCLE9BQU87WUFDUixDQUFDO1lBRUQsTUFBTSxVQUFVLEdBQUcsYUFBYSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3JDLE1BQU0sTUFBTSxHQUFHLFVBQVUsRUFBRSxhQUFhLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsbUNBQTJCLENBQUM7WUFFeEYsYUFBYTtZQUNiLElBQUksVUFBVSxFQUFFLEtBQUssSUFBSSxJQUFJLEtBQUssa0JBQWtCLENBQUMsU0FBUyxFQUFFLENBQUM7Z0JBQ2hFLEVBQUUscUNBQTZCLEdBQUcsS0FBSyxDQUFDO2dCQUN4QyxJQUFJLE1BQU07b0JBQUUsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUN6QyxPQUFPO1lBQ1IsQ0FBQztZQUVELFdBQVc7WUFDWCxJQUFJLElBQUksS0FBSyxrQkFBa0IsQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDeEMsSUFBSSxVQUFVO29CQUNiLFVBQVUsQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7d0JBQ3ZDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7d0JBQ2hDLENBQUMsQ0FBQyxPQUFPLEtBQUssS0FBSyxVQUFVOzRCQUM1QixDQUFDLENBQUMsS0FBSzs0QkFDUCxDQUFDLENBQUMsT0FBTyxLQUFLLEtBQUssUUFBUTtnQ0FDMUIsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDO2dDQUNsQixDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDZCxJQUFJLE1BQU07b0JBQUUsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUN6QyxPQUFPO1lBQ1IsQ0FBQztZQUVELDRGQUE0RjtZQUM1RixJQUFJLElBQUksS0FBSyxTQUFTLElBQUksS0FBSyxLQUFLLElBQUksRUFBRSxDQUFDO2dCQUMxQyxLQUFLLEdBQUcsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDO1lBQ3BCLENBQUM7WUFFRCxVQUFVLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1lBQ2xDLE9BQU87UUFDUixDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFFRCxNQUFNLENBQUMsTUFBdUIsRUFBRSxTQUFpQixFQUFFLFFBQXdDO1FBQzFGLE1BQU0sRUFBRSxHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQztRQUVuQywyREFBMkQ7UUFDM0QscUNBQXFDO1FBQ3JDLElBQUksQ0FBQyxFQUFFLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDMUIsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsU0FBUyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQzFELENBQUM7UUFFRCxJQUFJLEVBQUUsaUNBQXlCLEtBQUssT0FBTyxFQUFFLENBQUM7WUFDN0MsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDO1lBQ3hCLE1BQU0sVUFBVSxHQUFHLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUMzQyxNQUFNLFFBQVEsR0FBRyxVQUFVLEVBQUUsUUFBUSxJQUFJLENBQUMsQ0FBQztZQUMzQyxPQUFPLGlCQUFpQixDQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ25FLENBQUM7UUFFRCx5REFBeUQ7UUFDekQsSUFBSSxNQUFNLEtBQUssSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDOUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzlDLElBQUksS0FBSyxJQUFJLElBQUksRUFBRSxDQUFDO2dCQUNuQixLQUFLLEdBQUcsU0FBUyxDQUFDO2dCQUNsQixTQUFTLEdBQUcsRUFBRSxDQUFDO1lBQ2hCLENBQUM7WUFDRCxNQUFNLFdBQVcsR0FDaEIsU0FBUyxLQUFLLFFBQVE7Z0JBQ3JCLENBQUMsQ0FBRSxNQUF1QixDQUFDLGVBQWUsQ0FBQyxDQUFDLGFBQWEsQ0FBQztnQkFDMUQsQ0FBQyxDQUFFLE1BQXVCLENBQUMsZUFBZSxDQUFDLENBQUM7WUFDOUMsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQzNELENBQUM7UUFFRCxPQUFPLEdBQUcsRUFBRSxHQUFFLENBQUMsQ0FBQztJQUNqQixDQUFDO0lBRU8sZUFBZSxDQUFDLElBQXFCLEVBQUUsTUFBd0I7UUFDdEUsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDO1FBQ2pDLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxzQ0FBOEI7WUFBRSxPQUFPO1FBQ3BELElBQUksRUFBRSxpQ0FBeUIsS0FBSyxPQUFPLEVBQUUsQ0FBQztZQUM3QyxNQUFNLFVBQVUsR0FBRyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDdkMsSUFBSSxVQUFVLEVBQUUsYUFBYSxFQUFFLENBQUM7Z0JBQy9CLFVBQVUsQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztnQkFDNUYsVUFBVSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO1lBQ2hHLENBQUM7WUFFRCxJQUFJLFVBQVUsRUFBRSxRQUFRO2dCQUFFLE9BQU8sVUFBVSxDQUFDLFFBQVEsQ0FBQztZQUNyRCxJQUFJLFVBQVUsRUFBRSxRQUFRO2dCQUFFLE9BQU8sVUFBVSxDQUFDLFFBQVEsQ0FBQztZQUVyRCxPQUFRLFVBQTJCLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDL0MsT0FBUSxVQUEyQixDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQ2xELE9BQVEsVUFBMkIsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUM5QyxPQUFRLFVBQTJCLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDM0MsT0FBUSxVQUEyQixDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQzlDLE9BQVEsVUFBMkIsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUM3QyxPQUFRLFVBQTJCLENBQUMsVUFBVSxDQUFDLENBQUM7WUFFaEQsSUFBSSxDQUFDLFVBQVUsRUFBRSxTQUFTLEVBQUUsQ0FBQztnQkFDNUIsT0FBUSxJQUFxQixDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQzFDLENBQUM7UUFDRixDQUFDO1FBRUQsSUFBSSxFQUFFLGlDQUF5QixLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQy9DLEVBQUUsNENBQW9DLEdBQUcsSUFBSyxDQUFDO1lBQy9DLE9BQVEsSUFBcUIsQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO1lBQzVELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDckQsQ0FBQztRQUVELElBQUksRUFBRSxpQ0FBeUIsS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUM5QyxFQUFFLDRDQUFvQyxHQUFHLElBQUssQ0FBQztZQUMvQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1FBQ3hELENBQUM7UUFFRCxpQkFBaUI7UUFDakIsRUFBRSxtQ0FBMkIsR0FBRyxJQUFJLENBQUM7UUFDckMsS0FBSyxNQUFNLFdBQVcsSUFBSSxFQUFFLHFDQUE2QixJQUFJLEVBQUUsRUFBRSxDQUFDO1lBQ2pFLElBQUksV0FBVyxDQUFDLGdCQUFnQixFQUFFLGlDQUF5QixLQUFLLE9BQU8sSUFBSSxNQUFNLEVBQUUsQ0FBQztnQkFDbkYsSUFBSSxNQUFNLENBQUMsZ0JBQWdCLEVBQUUsaUNBQXlCLEtBQUssT0FBTyxFQUFFLENBQUM7b0JBQ3BFLGdCQUFnQixDQUFDLFdBQVcsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7b0JBQzVDLFNBQVM7Z0JBQ1YsQ0FBQztnQkFFRCxNQUFNLGVBQWUsR0FBRyw0QkFBNEIsQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDN0QsSUFBSSxlQUFlLEVBQUUsQ0FBQztvQkFDckIsZ0JBQWdCLENBQUMsV0FBVyxFQUFFLGVBQWUsRUFBRSxJQUFJLENBQUMsQ0FBQztnQkFDdEQsQ0FBQztZQUNGLENBQUM7WUFDRCxJQUFJLENBQUMsZUFBZSxDQUFDLFdBQVcsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUMzQyxDQUFDO1FBRUQsRUFBRSxxQ0FBNkIsR0FBRyxFQUFFLENBQUM7UUFDckMsRUFBRSxzQ0FBOEIsR0FBRyxJQUFJLENBQUM7UUFDeEMsSUFBSSxNQUFNLEVBQUUsQ0FBQztZQUNaLFdBQVcsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDM0IsQ0FBQztJQUNGLENBQUM7SUFFTyxpQkFBaUIsQ0FBQyxJQUFxQixFQUFFLEtBQXdCO1FBQ3hFLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLE9BQU8sS0FBSyxJQUFJLENBQUMsQ0FBQztRQUM3RCxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ2hCLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3hCLENBQUM7SUFDRixDQUFDO0lBRU8sc0JBQXNCLENBQUMsTUFBdUI7UUFDckQsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLGdCQUFnQiw0Q0FBb0MsRUFBRSxFQUFFLENBQUM7UUFDakYsSUFBSSxDQUFDLFFBQVE7WUFBRSxPQUFPO1FBRXRCLE1BQU0sV0FBVyxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ2xELElBQUksQ0FBQyxXQUFXO1lBQUUsT0FBTztRQUV6QixNQUFNLGVBQWUsR0FBRyxXQUFXLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2pELElBQUksQ0FBQyxlQUFlO1lBQUUsT0FBTztRQUU3QixNQUFNLFVBQVUsR0FBRyxhQUFhLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDbEQsSUFBSSxVQUFVLEVBQUUsQ0FBQztZQUNoQixVQUFVLENBQUMsS0FBSyxHQUFHLFdBQVcsQ0FBQztRQUNoQyxDQUFDO1FBRUQsTUFBTSxDQUFDLGdCQUFnQiw0Q0FBb0MsR0FBRyxVQUFVLENBQUMsT0FBTyxFQUFFLGVBQWUsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDbkgsQ0FBQztJQUVPLDZCQUE2QixDQUFDLEdBQXFCLEVBQUUsR0FBcUIsRUFBRSxLQUFzQjtRQUN6RyxNQUFNLEtBQUssR0FBRyxHQUFHLGlDQUF5QixDQUFDO1FBQzNDLE1BQU0sS0FBSyxHQUFHLEdBQUcsaUNBQXlCLENBQUM7UUFFM0MsTUFBTSxHQUFHLEdBQUcsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2pDLDhEQUE4RDtRQUM5RCxNQUFNLG9CQUFvQixHQUFHLEtBQUssS0FBSyxPQUFPLElBQUksQ0FBQyxHQUFHLEVBQUUsYUFBYSxFQUFFLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNyRiw0Q0FBNEM7UUFDNUMsNERBQTREO1FBQzVELE1BQU0sZ0JBQWdCLEdBQUcsS0FBSyxLQUFLLEtBQUssQ0FBQztRQUN6QyxNQUFNLGVBQWUsR0FBRyxLQUFLLEtBQUssS0FBSyxDQUFDO1FBRXhDLE9BQU8sb0JBQW9CLElBQUksQ0FBQyxnQkFBZ0IsSUFBSSxlQUFlLENBQUMsSUFBSSxnQkFBZ0IsQ0FBQztJQUMxRixDQUFDO0lBRU8sVUFBVTtRQUNqQixJQUFJLFNBQThCLENBQUM7UUFFbkMsTUFBTSxTQUFTLEdBQUcsRUFBRSxDQUFDO1FBRXJCLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBQ3pDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ2YsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3pDLElBQUksT0FBTyxDQUFDLGdCQUFnQixzQ0FBOEIsRUFBRSxDQUFDO2dCQUM1RCxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNsQixDQUFDLEVBQUUsQ0FBQztnQkFDSixTQUFTO1lBQ1YsQ0FBQztZQUNELE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxnQkFBZ0IsNENBQW9DLEVBQUUsQ0FBQztZQUNoRixJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQ2YsQ0FBQyxFQUFFLENBQUM7Z0JBQ0osU0FBUztZQUNWLENBQUM7WUFDRCxNQUFNLFFBQVEsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztZQUM3QyxJQUFJLFFBQVEsSUFBSSxRQUFRLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQztnQkFDckMsU0FBUyxHQUFHLFFBQVEsQ0FBQztnQkFDckIsTUFBTTtZQUNQLENBQUM7WUFFRCxDQUFDLEVBQUUsQ0FBQztRQUNMLENBQUM7UUFFRCxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDM0IsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDeEMsQ0FBQyxDQUFDLENBQUM7UUFFSCxPQUFPLFNBQVMsQ0FBQztJQUNsQixDQUFDO0lBRU8saUJBQWlCO1FBQ3hCLElBQUksS0FBMkMsQ0FBQztRQUNoRCxNQUFNLFNBQVMsR0FBRyxFQUFFLENBQUM7UUFDckIsZ0ZBQWdGO1FBQ2hGLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBQzVDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ2YsdUVBQXVFO1lBQ3ZFLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMzQyxJQUFJLE1BQU0sQ0FBQyxnQkFBZ0Isc0NBQThCLEVBQUUsQ0FBQztnQkFDM0QsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDbEIsQ0FBQyxFQUFFLENBQUM7Z0JBQ0osU0FBUztZQUNWLENBQUM7WUFFRCxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLDRDQUFvQyxFQUFFLENBQUM7WUFDL0UsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUNmLENBQUMsRUFBRSxDQUFDO2dCQUNKLFNBQVM7WUFDVixDQUFDO1lBQ0QsTUFBTSxRQUFRLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDL0Msa0RBQWtEO1lBQ2xELElBQUksUUFBUSxJQUFJLFFBQVEsQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQztnQkFDOUMsS0FBSyxHQUFHLFFBQVEsQ0FBQztnQkFDakIsTUFBTTtZQUNQLENBQUM7WUFDRCxDQUFDLEVBQUUsQ0FBQztRQUNMLENBQUM7UUFFRCxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDM0IsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDM0MsQ0FBQyxDQUFDLENBQUM7UUFFSCxPQUFPLEtBQUssSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ2hDLENBQUM7SUFZRCxJQUFJLElBQUk7UUFDUCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDO0lBQzNCLENBQUM7Q0FDRDtBQUVELE1BQU0sVUFBVSxrQkFBa0IsQ0FBQyxLQUErQjtJQUNqRSxNQUFNLFNBQVMsR0FBRztRQUNqQixrQkFBa0I7UUFDbEIsRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsV0FBVyxFQUFFLGtCQUFrQixFQUFFO1FBQzlELFlBQVksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUM7S0FDekIsQ0FBQztJQUVGLE9BQU8sd0JBQXdCLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDNUMsQ0FBQztBQUVELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDckMsT0FBTyxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsTUFBTSxhQUFhLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBET0NVTUVOVCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuXHRJbmplY3RhYmxlLFxuXHRSZW5kZXJlcjIsXG5cdFJlbmRlcmVyRmFjdG9yeTIsXG5cdFJlbmRlcmVyVHlwZTIsXG5cdGdldERlYnVnTm9kZSxcblx0aW5qZWN0LFxuXHRtYWtlRW52aXJvbm1lbnRQcm92aWRlcnMsXG5cdHVudHJhY2tlZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOZ3RBcmdzIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy9hcmdzJztcbmltcG9ydCB7IGdldExvY2FsU3RhdGUsIHByZXBhcmUgfSBmcm9tICcuLi9pbnN0YW5jZSc7XG5pbXBvcnQgeyBOR1RfU1RPUkUsIGluamVjdFN0b3JlLCBwcm92aWRlU3RvcmUgfSBmcm9tICcuLi9zdG9yZSc7XG5pbXBvcnQgeyBOZ3RBbnlSZWNvcmQsIE5ndEluc3RhbmNlTm9kZSwgTmd0TG9jYWxTdGF0ZSwgTmd0U3RhdGUgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBhcHBseVByb3BzIH0gZnJvbSAnLi4vdXRpbHMvYXBwbHktcHJvcHMnO1xuaW1wb3J0IHsgaXMgfSBmcm9tICcuLi91dGlscy9pcyc7XG5pbXBvcnQgeyBOZ3RTaWduYWxTdG9yZSwgc2lnbmFsU3RvcmUgfSBmcm9tICcuLi91dGlscy9zaWduYWwtc3RvcmUnO1xuaW1wb3J0IHsgTmd0QW55Q29uc3RydWN0b3IsIGluamVjdENhdGFsb2d1ZSB9IGZyb20gJy4vY2F0YWxvZ3VlJztcbmltcG9ydCB7IEhUTUwsIFJPVVRFRF9TQ0VORSwgU1BFQ0lBTF9ET01fVEFHLCBTUEVDSUFMX0lOVEVSTkFMX0FERF9DT01NRU5ULCBTUEVDSUFMX1BST1BFUlRJRVMgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQge1xuXHROZ3RSZW5kZXJlck5vZGUsXG5cdE5ndFJlbmRlcmVyU3RhdGUsXG5cdGFkZENoaWxkLFxuXHRjcmVhdGVOb2RlLFxuXHRnZXRDbG9zZXN0UGFyZW50V2l0aEluc3RhbmNlLFxuXHRpc0RPTSxcblx0cmVtb3ZlQ2hpbGQsXG5cdHNldFBhcmVudCxcbn0gZnJvbSAnLi9zdGF0ZSc7XG5pbXBvcnQgeyBOZ3RSZW5kZXJlckNsYXNzSWQsIGF0dGFjaFRocmVlQ2hpbGQsIGtlYmFiVG9QYXNjYWwsIHByb2Nlc3NUaHJlZUV2ZW50LCByZW1vdmVUaHJlZUNoaWxkIH0gZnJvbSAnLi91dGlscyc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBOZ3RSZW5kZXJlckZhY3RvcnkgaW1wbGVtZW50cyBSZW5kZXJlckZhY3RvcnkyIHtcblx0cHJpdmF0ZSBkZWxlZ2F0ZVJlbmRlcmVyRmFjdG9yeSA9IGluamVjdChSZW5kZXJlckZhY3RvcnkyLCB7IHNraXBTZWxmOiB0cnVlIH0pO1xuXHRwcml2YXRlIGRvY3VtZW50ID0gaW5qZWN0KERPQ1VNRU5UKTtcblx0cHJpdmF0ZSBjYXRhbG9ndWUgPSBpbmplY3RDYXRhbG9ndWUoKTtcblx0cHJpdmF0ZSByb290U3RvcmUgPSBpbmplY3RTdG9yZSgpO1xuXG5cdHByaXZhdGUgcG9ydGFsQ29tbWVudHNOb2RlczogQXJyYXk8Tmd0UmVuZGVyZXJOb2RlPiA9IFtdO1xuXHRwcml2YXRlIHJlbmRlcmVyTWFwID0gbmV3IE1hcDxzdHJpbmcsIFJlbmRlcmVyMj4oKTtcblx0cHJpdmF0ZSByb3V0ZWRTZXQgPSBuZXcgU2V0PHN0cmluZz4oKTtcblxuXHRjcmVhdGVSZW5kZXJlcihob3N0RWxlbWVudDogYW55LCB0eXBlOiBSZW5kZXJlclR5cGUyIHwgbnVsbCk6IFJlbmRlcmVyMiB7XG5cdFx0Y29uc3QgZGVsZWdhdGVSZW5kZXJlciA9IHRoaXMuZGVsZWdhdGVSZW5kZXJlckZhY3RvcnkuY3JlYXRlUmVuZGVyZXIoaG9zdEVsZW1lbnQsIHR5cGUpO1xuXG5cdFx0aWYgKCF0eXBlKSByZXR1cm4gZGVsZWdhdGVSZW5kZXJlcjtcblxuXHRcdC8vIE5PVEU6IG1pZ2h0IG5lZWQgdG8gcmV2aXNpdCB0aGlzXG5cdFx0aWYgKCh0eXBlIGFzIE5ndEFueVJlY29yZClbJ3R5cGUnXVtIVE1MXSkge1xuXHRcdFx0dGhpcy5yZW5kZXJlck1hcC5zZXQodHlwZS5pZCwgZGVsZWdhdGVSZW5kZXJlcik7XG5cdFx0XHRyZXR1cm4gZGVsZWdhdGVSZW5kZXJlcjtcblx0XHR9XG5cblx0XHRpZiAoKHR5cGUgYXMgTmd0QW55UmVjb3JkKVsndHlwZSddW1JPVVRFRF9TQ0VORV0pIHtcblx0XHRcdHRoaXMucm91dGVkU2V0LmFkZCh0eXBlLmlkKTtcblx0XHR9XG5cblx0XHRsZXQgcmVuZGVyZXIgPSB0aGlzLnJlbmRlcmVyTWFwLmdldCh0eXBlLmlkKTtcblx0XHRpZiAoIXJlbmRlcmVyKSB7XG5cdFx0XHR0aGlzLnJlbmRlcmVyTWFwLnNldChcblx0XHRcdFx0dHlwZS5pZCxcblx0XHRcdFx0KHJlbmRlcmVyID0gbmV3IE5ndFJlbmRlcmVyKFxuXHRcdFx0XHRcdGRlbGVnYXRlUmVuZGVyZXIsXG5cdFx0XHRcdFx0dGhpcy5yb290U3RvcmUsXG5cdFx0XHRcdFx0dGhpcy5kb2N1bWVudCxcblx0XHRcdFx0XHR0aGlzLnBvcnRhbENvbW1lbnRzTm9kZXMsXG5cdFx0XHRcdFx0dGhpcy5jYXRhbG9ndWUsXG5cdFx0XHRcdFx0Ly8gc2V0dGluZyByb290IHNjZW5lIGlmIHRoZXJlJ3Mgbm8gcm91dGVkIHNjZW5lIE9SIHRoaXMgY29tcG9uZW50IGlzIHRoZSByb3V0ZWQgU2NlbmVcblx0XHRcdFx0XHQhaG9zdEVsZW1lbnQgJiYgKHRoaXMucm91dGVkU2V0LnNpemUgPT09IDAgfHwgdGhpcy5yb3V0ZWRTZXQuaGFzKHR5cGUuaWQpKSxcblx0XHRcdFx0KSksXG5cdFx0XHQpO1xuXHRcdH1cblx0XHRyZXR1cm4gcmVuZGVyZXI7XG5cdH1cbn1cblxuZXhwb3J0IGNsYXNzIE5ndFJlbmRlcmVyIGltcGxlbWVudHMgUmVuZGVyZXIyIHtcblx0cHJpdmF0ZSBhcmdzQ29tbWVudE5vZGVzOiBBcnJheTxOZ3RSZW5kZXJlck5vZGU+ID0gW107XG5cblx0Y29uc3RydWN0b3IoXG5cdFx0cHJpdmF0ZSBkZWxlZ2F0ZTogUmVuZGVyZXIyLFxuXHRcdHByaXZhdGUgcm9vdFN0b3JlOiBOZ3RTaWduYWxTdG9yZTxOZ3RTdGF0ZT4sXG5cdFx0cHJpdmF0ZSBkb2N1bWVudDogRG9jdW1lbnQsXG5cdFx0cHJpdmF0ZSBwb3J0YWxDb21tZW50c05vZGVzOiBBcnJheTxOZ3RSZW5kZXJlck5vZGU+LFxuXHRcdHByaXZhdGUgY2F0YWxvZ3VlOiBSZWNvcmQ8c3RyaW5nLCBOZ3RBbnlDb25zdHJ1Y3Rvcj4sXG5cdFx0cHJpdmF0ZSBpc1Jvb3QgPSB0cnVlLFxuXHQpIHt9XG5cblx0Y3JlYXRlRWxlbWVudChuYW1lOiBzdHJpbmcsIG5hbWVzcGFjZT86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQpIHtcblx0XHRjb25zdCBlbGVtZW50ID0gdGhpcy5kZWxlZ2F0ZS5jcmVhdGVFbGVtZW50KG5hbWUsIG5hbWVzcGFjZSk7XG5cblx0XHQvLyBpZiB0aGVyZSdzIG5hbWVzcGFjZSwgd2UgZG9uJ3QgZG8gYW55dGhpbmdcblx0XHRpZiAobmFtZXNwYWNlKSB7XG5cdFx0XHRyZXR1cm4gY3JlYXRlTm9kZSgnZG9tJywgZWxlbWVudCwgdGhpcy5kb2N1bWVudCk7XG5cdFx0fVxuXG5cdFx0Ly8gb24gZmlyc3QgcGFzcywgd2UgcmV0dXJuIHRoZSBSb290IFNjZW5lIGFzIHRoZSByb290IG5vZGVcblx0XHRpZiAodGhpcy5pc1Jvb3QpIHtcblx0XHRcdHRoaXMuaXNSb290ID0gZmFsc2U7XG5cdFx0XHRjb25zdCBub2RlID0gY3JlYXRlTm9kZSgndGhyZWUnLCB0aGlzLnJvb3RTdG9yZS5zbmFwc2hvdC5zY2VuZSwgdGhpcy5kb2N1bWVudCk7XG5cdFx0XHRub2RlLl9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLmluamVjdG9yRmFjdG9yeV0gPSAoKSA9PiBnZXREZWJ1Z05vZGUoZWxlbWVudCk/LmluamVjdG9yO1xuXHRcdFx0cmV0dXJuIG5vZGU7XG5cdFx0fVxuXG5cdFx0aWYgKG5hbWUgPT09IFNQRUNJQUxfRE9NX1RBRy5OR1RfUE9SVEFMKSB7XG5cdFx0XHRyZXR1cm4gY3JlYXRlTm9kZSgncG9ydGFsJywgZWxlbWVudCwgdGhpcy5kb2N1bWVudCk7XG5cdFx0fVxuXG5cdFx0aWYgKG5hbWUgPT09IFNQRUNJQUxfRE9NX1RBRy5OR1RfVkFMVUUpIHtcblx0XHRcdGNvbnN0IGluc3RhbmNlU3RvcmUgPSBzaWduYWxTdG9yZSh7IHBhcmVudDogbnVsbCwgb2JqZWN0czogW10sIG5vbk9iamVjdHM6IFtdIH0pO1xuXHRcdFx0cmV0dXJuIGNyZWF0ZU5vZGUoXG5cdFx0XHRcdCd0aHJlZScsXG5cdFx0XHRcdE9iamVjdC5hc3NpZ24oXG5cdFx0XHRcdFx0eyBfX25ndF9yZW5kZXJlcl9fOiB7IHJhd1ZhbHVlOiB1bmRlZmluZWQgfSB9LFxuXHRcdFx0XHRcdC8vIE5PVEU6IHdlIGFzc2lnbiB0aGlzIG1hbnVhbGx5IHRvIGEgcmF3IHZhbHVlIG5vZGVcblx0XHRcdFx0XHQvLyBiZWNhdXNlIHdlIHNheSBpdCBpcyBhICd0aHJlZScgbm9kZSBidXQgd2UncmUgbm90IHVzaW5nIHByZXBhcmUoKVxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdF9fbmd0X186IHtcblx0XHRcdFx0XHRcdFx0aXNSYXc6IHRydWUsXG5cdFx0XHRcdFx0XHRcdGluc3RhbmNlU3RvcmUsXG5cdFx0XHRcdFx0XHRcdHNldFBhcmVudChwYXJlbnQ6IE5ndEluc3RhbmNlTm9kZSkge1xuXHRcdFx0XHRcdFx0XHRcdGluc3RhbmNlU3RvcmUudXBkYXRlKHsgcGFyZW50IH0pO1xuXHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHQpLFxuXHRcdFx0XHR0aGlzLmRvY3VtZW50LFxuXHRcdFx0KTtcblx0XHR9XG5cblx0XHRjb25zdCBbaW5qZWN0ZWRBcmdzXSA9IFt0aGlzLmdldE5ndEFyZ3MoKT8udmFsdWUgfHwgW11dO1xuXG5cdFx0aWYgKG5hbWUgPT09IFNQRUNJQUxfRE9NX1RBRy5OR1RfUFJJTUlUSVZFKSB7XG5cdFx0XHRpZiAoIWluamVjdGVkQXJnc1swXSkgdGhyb3cgbmV3IEVycm9yKGBbTkdUXSBuZ3QtcHJpbWl0aXZlIHdpdGhvdXQgYXJncyBpcyBpbnZhbGlkYCk7XG5cdFx0XHRjb25zdCBvYmplY3QgPSBpbmplY3RlZEFyZ3NbMF07XG5cdFx0XHRjb25zdCBsb2NhbFN0YXRlID0gZ2V0TG9jYWxTdGF0ZShvYmplY3QpO1xuXHRcdFx0aWYgKCFsb2NhbFN0YXRlKSB7XG5cdFx0XHRcdC8vIE5PVEU6IGlmIGFuIG9iamVjdCBpc24ndCBhbHJlYWR5IFwicHJlcGFyZWRcIiwgd2UgcHJlcGFyZSBpdFxuXHRcdFx0XHRwcmVwYXJlKG9iamVjdCwgeyBzdG9yZTogdGhpcy5yb290U3RvcmUsIHByaW1pdGl2ZTogdHJ1ZSB9KTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBjcmVhdGVOb2RlKCd0aHJlZScsIG9iamVjdCwgdGhpcy5kb2N1bWVudCk7XG5cdFx0fVxuXG5cdFx0Y29uc3QgdGhyZWVOYW1lID0ga2ViYWJUb1Bhc2NhbChuYW1lLnN0YXJ0c1dpdGgoJ25ndC0nKSA/IG5hbWUuc2xpY2UoNCkgOiBuYW1lKTtcblx0XHRjb25zdCB0aHJlZVRhcmdldCA9IHRoaXMuY2F0YWxvZ3VlW3RocmVlTmFtZV07XG5cblx0XHQvLyB3ZSBoYXZlIHRoZSBUSFJFRSBjb25zdHJ1Y3RvciBoZXJlLCBoYW5kbGUgaXRcblx0XHRpZiAodGhyZWVUYXJnZXQpIHtcblx0XHRcdGNvbnN0IGluc3RhbmNlID0gcHJlcGFyZShuZXcgdGhyZWVUYXJnZXQoLi4uaW5qZWN0ZWRBcmdzKSwgeyBzdG9yZTogdGhpcy5yb290U3RvcmUgfSk7XG5cdFx0XHRjb25zdCBub2RlID0gY3JlYXRlTm9kZSgndGhyZWUnLCBpbnN0YW5jZSwgdGhpcy5kb2N1bWVudCk7XG5cdFx0XHRjb25zdCBsb2NhbFN0YXRlID0gZ2V0TG9jYWxTdGF0ZShpbnN0YW5jZSkgYXMgTmd0TG9jYWxTdGF0ZTtcblxuXHRcdFx0Ly8gYXV0by1hdHRhY2ggZm9yIGdlb21ldHJ5IGFuZCBtYXRlcmlhbFxuXHRcdFx0aWYgKGlzLmdlb21ldHJ5KGluc3RhbmNlKSkge1xuXHRcdFx0XHRsb2NhbFN0YXRlLmF0dGFjaCA9IFsnZ2VvbWV0cnknXTtcblx0XHRcdH0gZWxzZSBpZiAoaXMubWF0ZXJpYWwoaW5zdGFuY2UpKSB7XG5cdFx0XHRcdGxvY2FsU3RhdGUuYXR0YWNoID0gWydtYXRlcmlhbCddO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gbm9kZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gY3JlYXRlTm9kZSgnZG9tJywgZWxlbWVudCwgdGhpcy5kb2N1bWVudCk7XG5cdH1cblxuXHRjcmVhdGVDb21tZW50KHZhbHVlOiBzdHJpbmcpIHtcblx0XHRjb25zdCBjb21tZW50ID0gdGhpcy5kZWxlZ2F0ZS5jcmVhdGVDb21tZW50KHZhbHVlKTtcblxuXHRcdC8vIE5PVEU6IHdlIGF0dGFjaCBhbiBhcnJvdyBmdW5jdGlvbiB0byB0aGUgQ29tbWVudCBub2RlXG5cdFx0Ly8gSW4gb3VyIGRpcmVjdGl2ZXMsIHdlIGNhbiBjYWxsIHRoaXMgZnVuY3Rpb24gdG8gdGhlbiBzdGFydCB0cmFja2luZyB0aGUgUmVuZGVyZXJOb2RlXG5cdFx0Ly8gdGhpcyBpcyBkb25lIHRvIGxpbWl0IHRoZSBhbW91bnQgb2YgTm9kZXMgd2UgbmVlZCB0byBwcm9jZXNzIGZvciBnZXRDcmVhdGlvblN0YXRlXG5cdFx0Y29tbWVudFtTUEVDSUFMX0lOVEVSTkFMX0FERF9DT01NRU5UXSA9IChub2RlOiBOZ3RSZW5kZXJlck5vZGUgfCAnYXJncycpID0+IHtcblx0XHRcdGlmIChub2RlID09PSAnYXJncycpIHtcblx0XHRcdFx0dGhpcy5hcmdzQ29tbWVudE5vZGVzLnB1c2goY29tbWVudCk7XG5cdFx0XHR9IGVsc2UgaWYgKHR5cGVvZiBub2RlID09PSAnb2JqZWN0Jykge1xuXHRcdFx0XHR0aGlzLnBvcnRhbENvbW1lbnRzTm9kZXMucHVzaChub2RlKTtcblx0XHRcdH1cblx0XHR9O1xuXG5cdFx0cmV0dXJuIGNyZWF0ZU5vZGUoJ2NvbW1lbnQnLCBjb21tZW50LCB0aGlzLmRvY3VtZW50KTtcblx0fVxuXG5cdGFwcGVuZENoaWxkKHBhcmVudDogTmd0UmVuZGVyZXJOb2RlLCBuZXdDaGlsZDogTmd0UmVuZGVyZXJOb2RlKTogdm9pZCB7XG5cdFx0Y29uc3QgcFJTID0gcGFyZW50Ll9fbmd0X3JlbmRlcmVyX187XG5cdFx0Y29uc3QgY1JTID0gbmV3Q2hpbGQuX19uZ3RfcmVuZGVyZXJfXztcblxuXHRcdGlmIChcblx0XHRcdHBSU1tOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gPT09ICdkb20nICYmXG5cdFx0XHQobmV3Q2hpbGQgaW5zdGFuY2VvZiBUZXh0IHx8IGNSU1tOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gPT09ICdkb20nKVxuXHRcdCkge1xuXHRcdFx0YWRkQ2hpbGQocGFyZW50LCBuZXdDaGlsZCk7XG5cblx0XHRcdGlmIChuZXdDaGlsZFsnX19uZ3RfZG9tX3BhcmVudF9fJ10gJiYgbmV3Q2hpbGRbJ19fbmd0X2RvbV9wYXJlbnRfXyddIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcblx0XHRcdFx0dGhpcy5kZWxlZ2F0ZS5hcHBlbmRDaGlsZChuZXdDaGlsZFsnX19uZ3RfZG9tX3BhcmVudF9fJ10sIG5ld0NoaWxkKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHR0aGlzLmRlbGVnYXRlLmFwcGVuZENoaWxkKHBhcmVudCwgbmV3Q2hpbGQpO1xuXHRcdFx0aWYgKGNSUykge1xuXHRcdFx0XHRzZXRQYXJlbnQobmV3Q2hpbGQsIHBhcmVudCk7XG5cdFx0XHRcdGlmICh0aGlzLnNob3VsZEZpbmRHcmFuZHBhcmVudEluc3RhbmNlKHBSUywgY1JTLCBuZXdDaGlsZCkpIHtcblx0XHRcdFx0XHQvLyB3ZSdsbCB0cnkgdG8gZ2V0IHRoZSBncmFuZHBhcmVudCBpbnN0YW5jZSBoZXJlIHNvIHRoYXQgd2UgY2FuIHJ1biBhcHBlbmRDaGlsZCB3aXRoIGJvdGggaW5zdGFuY2VzXG5cdFx0XHRcdFx0Y29uc3QgY2xvc2VzdEdyYW5kcGFyZW50SW5zdGFuY2UgPSBnZXRDbG9zZXN0UGFyZW50V2l0aEluc3RhbmNlKHBhcmVudCk7XG5cdFx0XHRcdFx0aWYgKGNsb3Nlc3RHcmFuZHBhcmVudEluc3RhbmNlKSB0aGlzLmFwcGVuZENoaWxkKGNsb3Nlc3RHcmFuZHBhcmVudEluc3RhbmNlLCBuZXdDaGlsZCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmIChjUlM/LltOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gPT09ICdjb21tZW50Jykge1xuXHRcdFx0c2V0UGFyZW50KG5ld0NoaWxkLCBwYXJlbnQpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHNldFBhcmVudChuZXdDaGlsZCwgcGFyZW50KTtcblx0XHRhZGRDaGlsZChwYXJlbnQsIG5ld0NoaWxkKTtcblxuXHRcdC8vIGlmIG5ldyBjaGlsZCBpcyBhIHBvcnRhbFxuXHRcdGlmIChjUlM/LltOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gPT09ICdwb3J0YWwnKSB7XG5cdFx0XHRpZiAoIWNSU1tOZ3RSZW5kZXJlckNsYXNzSWQucG9ydGFsQ29udGFpbmVyXSkgdGhpcy5wcm9jZXNzUG9ydGFsQ29udGFpbmVyKG5ld0NoaWxkKTtcblx0XHRcdGlmIChjUlNbTmd0UmVuZGVyZXJDbGFzc0lkLnBvcnRhbENvbnRhaW5lcl0pIHtcblx0XHRcdFx0dGhpcy5hcHBlbmRDaGlsZChwYXJlbnQsIGNSU1tOZ3RSZW5kZXJlckNsYXNzSWQucG9ydGFsQ29udGFpbmVyXSk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gaWYgcGFyZW50IGlzIGEgcG9ydGFsXG5cdFx0aWYgKHBSU1tOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gPT09ICdwb3J0YWwnKSB7XG5cdFx0XHRpZiAoIXBSU1tOZ3RSZW5kZXJlckNsYXNzSWQucG9ydGFsQ29udGFpbmVyXSkgdGhpcy5wcm9jZXNzUG9ydGFsQ29udGFpbmVyKHBhcmVudCk7XG5cblx0XHRcdGlmIChwUlNbTmd0UmVuZGVyZXJDbGFzc0lkLnBvcnRhbENvbnRhaW5lcl0pIHtcblx0XHRcdFx0dGhpcy5hcHBlbmRDaGlsZChwUlNbTmd0UmVuZGVyZXJDbGFzc0lkLnBvcnRhbENvbnRhaW5lcl0sIG5ld0NoaWxkKTtcblx0XHRcdH1cblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBpZiBib3RoIGFyZSB0aHJlZSBpbnN0YW5jZXMsIHN0cmFpZ2h0Zm9yd2FyZCBjYXNlXG5cdFx0aWYgKHBSU1tOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gPT09ICd0aHJlZScgJiYgY1JTPy5bTmd0UmVuZGVyZXJDbGFzc0lkLnR5cGVdID09PSAndGhyZWUnKSB7XG5cdFx0XHRjb25zdCBjTFMgPSBnZXRMb2NhbFN0YXRlKG5ld0NoaWxkKTtcblxuXHRcdFx0Ly8gaWYgY2hpbGQgYWxyZWFkeSBhdHRhY2hlZCB0byBhIHBhcmVudCwgc2tpcFxuXHRcdFx0aWYgKGNMUz8uaW5zdGFuY2VTdG9yZT8uZ2V0KCdwYXJlbnQnKSkgcmV0dXJuO1xuXHRcdFx0aWYgKHBhcmVudCA9PT0gbmV3Q2hpbGQpIHJldHVybjtcblxuXHRcdFx0Ly8gYXR0YWNoIFRIUkVFIGNoaWxkXG5cdFx0XHRhdHRhY2hUaHJlZUNoaWxkKHBhcmVudCwgbmV3Q2hpbGQpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIGlmIG9ubHkgdGhlIHBhcmVudCBpcyB0aGUgVEhSRUUgaW5zdGFuY2Vcblx0XHRpZiAocFJTW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXSA9PT0gJ3RocmVlJykge1xuXHRcdFx0Zm9yIChjb25zdCByZW5kZXJDaGlsZCBvZiBjUlM/LltOZ3RSZW5kZXJlckNsYXNzSWQuY2hpbGRyZW5dIHx8IFtdKSB7XG5cdFx0XHRcdHRoaXMuYXBwZW5kQ2hpbGQocGFyZW50LCByZW5kZXJDaGlsZCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMuc2hvdWxkRmluZEdyYW5kcGFyZW50SW5zdGFuY2UocFJTLCBjUlMsIG5ld0NoaWxkKSkge1xuXHRcdFx0Ly8gd2UnbGwgdHJ5IHRvIGdldCB0aGUgZ3JhbmRwYXJlbnQgaW5zdGFuY2UgaGVyZSBzbyB0aGF0IHdlIGNhbiBydW4gYXBwZW5kQ2hpbGQgd2l0aCBib3RoIGluc3RhbmNlc1xuXHRcdFx0Y29uc3QgY2xvc2VzdEdyYW5kcGFyZW50SW5zdGFuY2UgPSBnZXRDbG9zZXN0UGFyZW50V2l0aEluc3RhbmNlKHBhcmVudCk7XG5cdFx0XHRpZiAoY2xvc2VzdEdyYW5kcGFyZW50SW5zdGFuY2UpIHRoaXMuYXBwZW5kQ2hpbGQoY2xvc2VzdEdyYW5kcGFyZW50SW5zdGFuY2UsIG5ld0NoaWxkKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdH1cblxuXHRpbnNlcnRCZWZvcmUoXG5cdFx0cGFyZW50OiBOZ3RSZW5kZXJlck5vZGUsXG5cdFx0bmV3Q2hpbGQ6IE5ndFJlbmRlcmVyTm9kZSxcblx0XHQvLyBUT0RPOiB3ZSBtaWdodCBuZWVkIHRoZXNlP1xuXHRcdC8vIF9yZWZDaGlsZDogTmd0UmVuZGVyZXJOb2RlLFxuXHRcdC8vIF9pc01vdmU/OiBib29sZWFuIHwgdW5kZWZpbmVkLFxuXHQpOiB2b2lkIHtcblx0XHQvLyBOT1RFOiBub3Qgc3VyZSB3aHkgdGhpcyBpcyBoZXJlLiBpbnZlc3RpZ2F0ZSB3aGVuIHdlIGhhdmUgdGltZVxuXHRcdC8vIGlmIChwYXJlbnQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCAmJiAobmV3Q2hpbGQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCB8fCBuZXdDaGlsZCBpbnN0YW5jZW9mIFRleHQpKSB7XG5cdFx0Ly8gXHRyZXR1cm4gdGhpcy5kZWxlZ2F0ZS5hcHBlbmRDaGlsZChwYXJlbnQsIG5ld0NoaWxkKTtcblx0XHQvLyB9XG5cblx0XHRpZiAocGFyZW50ID09IG51bGwgfHwgIXBhcmVudC5fX25ndF9yZW5kZXJlcl9fIHx8IHBhcmVudCA9PT0gbmV3Q2hpbGQpIHJldHVybjtcblx0XHR0aGlzLmFwcGVuZENoaWxkKHBhcmVudCwgbmV3Q2hpbGQpO1xuXHR9XG5cblx0cmVtb3ZlQ2hpbGQocGFyZW50OiBOZ3RSZW5kZXJlck5vZGUsIG9sZENoaWxkOiBOZ3RSZW5kZXJlck5vZGUsIGlzSG9zdEVsZW1lbnQ/OiBib29sZWFuIHwgdW5kZWZpbmVkKTogdm9pZCB7XG5cdFx0aWYgKHBhcmVudCA9PSBudWxsKSB7XG5cdFx0XHRwYXJlbnQgPSAodW50cmFja2VkKCgpID0+IGdldExvY2FsU3RhdGUob2xkQ2hpbGQpPy5wYXJlbnQpIHx8XG5cdFx0XHRcdG9sZENoaWxkLl9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLnBhcmVudF0pIGFzIE5ndFJlbmRlcmVyTm9kZTtcblx0XHR9XG5cblx0XHRjb25zdCBjUlMgPSBvbGRDaGlsZC5fX25ndF9yZW5kZXJlcl9fO1xuXG5cdFx0Ly8gaWYgcGFyZW50IGlzIHN0aWxsIGZhbHN5LCB3ZSBkb24ndCBrbm93IHdoYXQgdG8gZG8gd2l0aCB0aGUgcGFyZW50LlxuXHRcdC8vIHdlJ2xsIGp1c3QgcmVtb3ZlIHRoZSBjaGlsZCBhbmQgZGVzdHJveSBpdFxuXHRcdGlmIChwYXJlbnQgPT0gbnVsbCAmJiBjUlM/LltOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gIT09ICd0aHJlZScpIHtcblx0XHRcdHJlbW92ZVRocmVlQ2hpbGQob2xkQ2hpbGQsIHVuZGVmaW5lZCwgdHJ1ZSk7XG5cdFx0XHR0aGlzLmRlc3Ryb3lJbnRlcm5hbChvbGRDaGlsZCwgdW5kZWZpbmVkKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRjb25zdCBwUlMgPSBwYXJlbnQuX19uZ3RfcmVuZGVyZXJfXztcblxuXHRcdGlmIChcblx0XHRcdCghY1JTIHx8ICFwUlMpICYmXG5cdFx0XHRwYXJlbnQgaW5zdGFuY2VvZiBFbGVtZW50ICYmXG5cdFx0XHQob2xkQ2hpbGQgaW5zdGFuY2VvZiBFbGVtZW50IHx8IG9sZENoaWxkIGluc3RhbmNlb2YgVGV4dCB8fCBvbGRDaGlsZCBpbnN0YW5jZW9mIENvbW1lbnQpXG5cdFx0KSB7XG5cdFx0XHR0aGlzLmRlbGVnYXRlLnJlbW92ZUNoaWxkKHBhcmVudCwgb2xkQ2hpbGQpO1xuXHRcdFx0dGhpcy5kZXN0cm95SW50ZXJuYWwob2xkQ2hpbGQsIHBhcmVudCk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKGNSU1tOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gPT09ICdkb20nICYmICghcFJTIHx8IHBSU1tOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gPT09ICdkb20nKSkge1xuXHRcdFx0dGhpcy5kZWxlZ2F0ZS5yZW1vdmVDaGlsZChwYXJlbnQsIG9sZENoaWxkKTtcblx0XHRcdHRoaXMuZGVzdHJveUludGVybmFsKG9sZENoaWxkLCBwYXJlbnQpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmIChwUlNbTmd0UmVuZGVyZXJDbGFzc0lkLnR5cGVdID09PSAndGhyZWUnICYmIGNSU1tOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gPT09ICd0aHJlZScpIHtcblx0XHRcdHJlbW92ZVRocmVlQ2hpbGQob2xkQ2hpbGQsIHBhcmVudCwgdHJ1ZSk7XG5cdFx0XHR0aGlzLmRlc3Ryb3lJbnRlcm5hbChvbGRDaGlsZCwgcGFyZW50KTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRpZiAoXG5cdFx0XHRwUlNbTmd0UmVuZGVyZXJDbGFzc0lkLnR5cGVdID09PSAncG9ydGFsJyAmJlxuXHRcdFx0cFJTW05ndFJlbmRlcmVyQ2xhc3NJZC5wb3J0YWxDb250YWluZXJdPy5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXSA9PT0gJ3RocmVlJ1xuXHRcdCkge1xuXHRcdFx0dGhpcy5yZW1vdmVDaGlsZChwUlNbTmd0UmVuZGVyZXJDbGFzc0lkLnBvcnRhbENvbnRhaW5lcl0sIG9sZENoaWxkLCBpc0hvc3RFbGVtZW50KTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRpZiAocFJTW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXSA9PT0gJ3RocmVlJykge1xuXHRcdFx0dGhpcy5kZXN0cm95SW50ZXJuYWwob2xkQ2hpbGQsIHBhcmVudCk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Y29uc3QgY2xvc2VzdEdyYW5kcGFyZW50SW5zdGFuY2UgPSBnZXRDbG9zZXN0UGFyZW50V2l0aEluc3RhbmNlKHBhcmVudCk7XG5cdFx0aWYgKGNsb3Nlc3RHcmFuZHBhcmVudEluc3RhbmNlKSB0aGlzLnJlbW92ZUNoaWxkKGNsb3Nlc3RHcmFuZHBhcmVudEluc3RhbmNlLCBvbGRDaGlsZCwgaXNIb3N0RWxlbWVudCk7XG5cdFx0dGhpcy5kZXN0cm95SW50ZXJuYWwob2xkQ2hpbGQsIGNsb3Nlc3RHcmFuZHBhcmVudEluc3RhbmNlIGFzIE5ndFJlbmRlcmVyTm9kZSk7XG5cdH1cblxuXHRwYXJlbnROb2RlKG5vZGU6IE5ndFJlbmRlcmVyTm9kZSkge1xuXHRcdGNvbnN0IHJTID0gbm9kZS5fX25ndF9yZW5kZXJlcl9fO1xuXHRcdGlmIChyUz8uW05ndFJlbmRlcmVyQ2xhc3NJZC5wYXJlbnRdKSByZXR1cm4gclNbTmd0UmVuZGVyZXJDbGFzc0lkLnBhcmVudF07XG5cdFx0cmV0dXJuIHRoaXMuZGVsZWdhdGUucGFyZW50Tm9kZShub2RlKTtcblx0fVxuXG5cdHByaXZhdGUgc2V0QXR0cmlidXRlSW50ZXJuYWwoXG5cdFx0ZWw6IE5ndFJlbmRlcmVyTm9kZSxcblx0XHRuYW1lOiBzdHJpbmcsXG5cdFx0dmFsdWU6IHN0cmluZyxcblx0XHRfbmFtZXNwYWNlPzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCxcblx0KTogYm9vbGVhbiB7XG5cdFx0Y29uc3QgclMgPSBlbC5fX25ndF9yZW5kZXJlcl9fO1xuXHRcdGlmIChyU1tOZ3RSZW5kZXJlckNsYXNzSWQuZGVzdHJveWVkXSkgcmV0dXJuIGZhbHNlO1xuXG5cdFx0aWYgKHJTW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXSA9PT0gJ3RocmVlJykge1xuXHRcdFx0aWYgKG5hbWUgPT09IFNQRUNJQUxfUFJPUEVSVElFUy5SRU5ERVJfUFJJT1JJVFkpIHtcblx0XHRcdFx0Ly8gTk9URTogcHJpb3JpdHkgbmVlZHMgdG8gYmUgc2V0IGFzIGFuIGF0dHJpYnV0ZSBzdHJpbmcgc28gdGhhdCB0aGV5IGNhbiBiZSBzZXQgYXMgZWFybHkgYXMgcG9zc2libGVcblx0XHRcdFx0Ly8gd2UgY29udmVydCB0aGF0IHN0cmluZyB0byBhIG51bWJlci4gaWYgaXQncyBpbnZhbGlkLCBkZWZhdWx0IDBcblx0XHRcdFx0bGV0IHByaW9yaXR5ID0gTnVtYmVyKHZhbHVlKTtcblx0XHRcdFx0aWYgKGlzTmFOKHByaW9yaXR5KSkge1xuXHRcdFx0XHRcdHByaW9yaXR5ID0gMDtcblx0XHRcdFx0XHRjb25zb2xlLndhcm4oYFtOR1RdIFwicHJpb3JpdHlcIiBpcyBhbiBpbnZhbGlkIG51bWJlciwgZGVmYXVsdCB0byAwYCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3QgbG9jYWxTdGF0ZSA9IGdldExvY2FsU3RhdGUoZWwpO1xuXHRcdFx0XHRpZiAobG9jYWxTdGF0ZSkgbG9jYWxTdGF0ZS5wcmlvcml0eSA9IHByaW9yaXR5O1xuXHRcdFx0fSBlbHNlIGlmIChuYW1lID09PSBTUEVDSUFMX1BST1BFUlRJRVMuQVRUQUNIKSB7XG5cdFx0XHRcdC8vIE5PVEU6IGhhbmRsZSBhdHRhY2ggYXMgc3RyaW5nXG5cdFx0XHRcdGNvbnN0IHBhdGhzID0gdmFsdWUuc3BsaXQoJy4nKTtcblx0XHRcdFx0aWYgKHBhdGhzLmxlbmd0aCkge1xuXHRcdFx0XHRcdGNvbnN0IGxvY2FsU3RhdGUgPSBnZXRMb2NhbFN0YXRlKGVsKTtcblx0XHRcdFx0XHRpZiAobG9jYWxTdGF0ZSkgbG9jYWxTdGF0ZS5hdHRhY2ggPSBwYXRocztcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIGlmIChuYW1lID09PSBTUEVDSUFMX1BST1BFUlRJRVMuUkFXX1ZBTFVFKSB7XG5cdFx0XHRcdC8vIE5PVEU6IGNvZXJjaW9uXG5cdFx0XHRcdGxldCBtYXliZUNvZXJjZWQ6IHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gPSB2YWx1ZTtcblx0XHRcdFx0aWYgKG1heWJlQ29lcmNlZCA9PT0gJycgfHwgbWF5YmVDb2VyY2VkID09PSAndHJ1ZScgfHwgbWF5YmVDb2VyY2VkID09PSAnZmFsc2UnKSB7XG5cdFx0XHRcdFx0bWF5YmVDb2VyY2VkID0gbWF5YmVDb2VyY2VkID09PSAndHJ1ZScgfHwgbWF5YmVDb2VyY2VkID09PSAnJztcblx0XHRcdFx0fSBlbHNlIGlmICghaXNOYU4oTnVtYmVyKG1heWJlQ29lcmNlZCkpKSB7XG5cdFx0XHRcdFx0bWF5YmVDb2VyY2VkID0gTnVtYmVyKG1heWJlQ29lcmNlZCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0clNbTmd0UmVuZGVyZXJDbGFzc0lkLnJhd1ZhbHVlXSA9IG1heWJlQ29lcmNlZDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGFwcGx5UHJvcHMoZWwsIHsgW25hbWVdOiB2YWx1ZSB9KTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0c2V0QXR0cmlidXRlKGVsOiBOZ3RSZW5kZXJlck5vZGUsIG5hbWU6IHN0cmluZywgdmFsdWU6IHN0cmluZywgbmFtZXNwYWNlPzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCk6IHZvaWQge1xuXHRcdGNvbnN0IHVzZURlbGVnYXRlID0gdGhpcy5zZXRBdHRyaWJ1dGVJbnRlcm5hbChlbCwgbmFtZSwgdmFsdWUsIG5hbWVzcGFjZSk7XG5cblx0XHRpZiAodXNlRGVsZWdhdGUpIHtcblx0XHRcdHRoaXMuZGVsZWdhdGUuc2V0QXR0cmlidXRlKGVsLCBuYW1lLCB2YWx1ZSk7XG5cdFx0fVxuXHR9XG5cblx0cmVtb3ZlQXR0cmlidXRlKGVsOiBOZ3RSZW5kZXJlck5vZGUsIG5hbWU6IHN0cmluZywgbmFtZXNwYWNlPzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCk6IHZvaWQge1xuXHRcdGNvbnN0IHVzZURlbGVnYXRlID0gdGhpcy5zZXRBdHRyaWJ1dGVJbnRlcm5hbChlbCwgbmFtZSwgdW5kZWZpbmVkISwgbmFtZXNwYWNlKTtcblxuXHRcdGlmICh1c2VEZWxlZ2F0ZSkge1xuXHRcdFx0dGhpcy5kZWxlZ2F0ZS5yZW1vdmVBdHRyaWJ1dGUoZWwsIG5hbWUsIG5hbWVzcGFjZSk7XG5cdFx0fVxuXHR9XG5cblx0c2V0UHJvcGVydHkoZWw6IE5ndFJlbmRlcmVyTm9kZSwgbmFtZTogc3RyaW5nLCB2YWx1ZTogYW55KTogdm9pZCB7XG5cdFx0Y29uc3QgclMgPSBlbC5fX25ndF9yZW5kZXJlcl9fO1xuXHRcdGlmICghclMgfHwgclNbTmd0UmVuZGVyZXJDbGFzc0lkLmRlc3Ryb3llZF0pIHJldHVybjtcblxuXHRcdGlmIChyU1tOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gPT09ICd0aHJlZScpIHtcblx0XHRcdGlmIChuYW1lID09PSBTUEVDSUFMX1BST1BFUlRJRVMuUEFSQU1FVEVSUykge1xuXHRcdFx0XHQvLyBOT1RFOiBzaG9ydC1jdXQgZm9yIG51bGwgcmF5Y2FzdCB0byBwcmV2ZW50IHVwc3RyZWFtIGZyb20gY3JlYXRpbmcgYSBudWxsUmF5Y2FzdCBwcm9wZXJ0eVxuXHRcdFx0XHRpZiAoJ3JheWNhc3QnIGluIHZhbHVlICYmIHZhbHVlWydyYXljYXN0J10gPT09IG51bGwpIHtcblx0XHRcdFx0XHR2YWx1ZVsncmF5Y2FzdCddID0gKCkgPT4gbnVsbDtcblx0XHRcdFx0fVxuXHRcdFx0XHRhcHBseVByb3BzKGVsLCB2YWx1ZSk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3QgbG9jYWxTdGF0ZSA9IGdldExvY2FsU3RhdGUoZWwpO1xuXHRcdFx0Y29uc3QgcGFyZW50ID0gbG9jYWxTdGF0ZT8uaW5zdGFuY2VTdG9yZS5nZXQoJ3BhcmVudCcpIHx8IHJTW05ndFJlbmRlcmVyQ2xhc3NJZC5wYXJlbnRdO1xuXG5cdFx0XHQvLyBbcmF3VmFsdWVdXG5cdFx0XHRpZiAobG9jYWxTdGF0ZT8uaXNSYXcgJiYgbmFtZSA9PT0gU1BFQ0lBTF9QUk9QRVJUSUVTLlJBV19WQUxVRSkge1xuXHRcdFx0XHRyU1tOZ3RSZW5kZXJlckNsYXNzSWQucmF3VmFsdWVdID0gdmFsdWU7XG5cdFx0XHRcdGlmIChwYXJlbnQpIGF0dGFjaFRocmVlQ2hpbGQocGFyZW50LCBlbCk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gW2F0dGFjaF1cblx0XHRcdGlmIChuYW1lID09PSBTUEVDSUFMX1BST1BFUlRJRVMuQVRUQUNIKSB7XG5cdFx0XHRcdGlmIChsb2NhbFN0YXRlKVxuXHRcdFx0XHRcdGxvY2FsU3RhdGUuYXR0YWNoID0gQXJyYXkuaXNBcnJheSh2YWx1ZSlcblx0XHRcdFx0XHRcdD8gdmFsdWUubWFwKCh2KSA9PiB2LnRvU3RyaW5nKCkpXG5cdFx0XHRcdFx0XHQ6IHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJ1xuXHRcdFx0XHRcdFx0XHQ/IHZhbHVlXG5cdFx0XHRcdFx0XHRcdDogdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJ1xuXHRcdFx0XHRcdFx0XHRcdD8gdmFsdWUuc3BsaXQoJy4nKVxuXHRcdFx0XHRcdFx0XHRcdDogW3ZhbHVlXTtcblx0XHRcdFx0aWYgKHBhcmVudCkgYXR0YWNoVGhyZWVDaGlsZChwYXJlbnQsIGVsKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBOT1RFOiBzaG9ydC1jdXQgZm9yIG51bGwgcmF5Y2FzdCB0byBwcmV2ZW50IHVwc3RyZWFtIGZyb20gY3JlYXRpbmcgYSBudWxsUmF5Y2FzdCBwcm9wZXJ0eVxuXHRcdFx0aWYgKG5hbWUgPT09ICdyYXljYXN0JyAmJiB2YWx1ZSA9PT0gbnVsbCkge1xuXHRcdFx0XHR2YWx1ZSA9ICgpID0+IG51bGw7XG5cdFx0XHR9XG5cblx0XHRcdGFwcGx5UHJvcHMoZWwsIHsgW25hbWVdOiB2YWx1ZSB9KTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5kZWxlZ2F0ZS5zZXRQcm9wZXJ0eShlbCwgbmFtZSwgdmFsdWUpO1xuXHR9XG5cblx0bGlzdGVuKHRhcmdldDogTmd0UmVuZGVyZXJOb2RlLCBldmVudE5hbWU6IHN0cmluZywgY2FsbGJhY2s6IChldmVudDogYW55KSA9PiBib29sZWFuIHwgdm9pZCk6ICgpID0+IHZvaWQge1xuXHRcdGNvbnN0IHJTID0gdGFyZ2V0Ll9fbmd0X3JlbmRlcmVyX187XG5cblx0XHQvLyBpZiB0aGUgdGFyZ2V0IGRvZXNuJ3QgaGF2ZSBfX25ndF9yZW5kZXJlcl9fLCB3ZSBkZWxlZ2F0ZVxuXHRcdC8vIGlmIHRhcmdldCBpcyBET00gbm9kZSwgd2UgZGVsZWdhdGVcblx0XHRpZiAoIXJTIHx8IGlzRE9NKHRhcmdldCkpIHtcblx0XHRcdHJldHVybiB0aGlzLmRlbGVnYXRlLmxpc3Rlbih0YXJnZXQsIGV2ZW50TmFtZSwgY2FsbGJhY2spO1xuXHRcdH1cblxuXHRcdGlmIChyU1tOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gPT09ICd0aHJlZScpIHtcblx0XHRcdGNvbnN0IGluc3RhbmNlID0gdGFyZ2V0O1xuXHRcdFx0Y29uc3QgbG9jYWxTdGF0ZSA9IGdldExvY2FsU3RhdGUoaW5zdGFuY2UpO1xuXHRcdFx0Y29uc3QgcHJpb3JpdHkgPSBsb2NhbFN0YXRlPy5wcmlvcml0eSA/PyAwO1xuXHRcdFx0cmV0dXJuIHByb2Nlc3NUaHJlZUV2ZW50KGluc3RhbmNlLCBwcmlvcml0eSwgZXZlbnROYW1lLCBjYWxsYmFjayk7XG5cdFx0fVxuXG5cdFx0Ly8gQHRzLWV4cGVjdC1lcnJvciAtIHdlIGtub3cgdGhhdCB0YXJnZXQgaXMgbm90IERPTSBub2RlXG5cdFx0aWYgKHRhcmdldCA9PT0gdGhpcy5yb290U3RvcmUuc25hcHNob3Quc2NlbmUpIHtcblx0XHRcdGxldCBbZG9tVGFyZ2V0LCBldmVudF0gPSBldmVudE5hbWUuc3BsaXQoJzonKTtcblx0XHRcdGlmIChldmVudCA9PSBudWxsKSB7XG5cdFx0XHRcdGV2ZW50ID0gZG9tVGFyZ2V0O1xuXHRcdFx0XHRkb21UYXJnZXQgPSAnJztcblx0XHRcdH1cblx0XHRcdGNvbnN0IGV2ZW50VGFyZ2V0ID1cblx0XHRcdFx0ZG9tVGFyZ2V0ID09PSAnd2luZG93J1xuXHRcdFx0XHRcdD8gKHRhcmdldCBhcyBOZ3RBbnlSZWNvcmQpWydvd25lckRvY3VtZW50J11bJ2RlZmF1bHRWaWV3J11cblx0XHRcdFx0XHQ6ICh0YXJnZXQgYXMgTmd0QW55UmVjb3JkKVsnb3duZXJEb2N1bWVudCddO1xuXHRcdFx0cmV0dXJuIHRoaXMuZGVsZWdhdGUubGlzdGVuKGV2ZW50VGFyZ2V0LCBldmVudCwgY2FsbGJhY2spO1xuXHRcdH1cblxuXHRcdHJldHVybiAoKSA9PiB7fTtcblx0fVxuXG5cdHByaXZhdGUgZGVzdHJveUludGVybmFsKG5vZGU6IE5ndFJlbmRlcmVyTm9kZSwgcGFyZW50PzogTmd0UmVuZGVyZXJOb2RlKSB7XG5cdFx0Y29uc3QgclMgPSBub2RlLl9fbmd0X3JlbmRlcmVyX187XG5cdFx0aWYgKCFyUyB8fCByU1tOZ3RSZW5kZXJlckNsYXNzSWQuZGVzdHJveWVkXSkgcmV0dXJuO1xuXHRcdGlmIChyU1tOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gPT09ICd0aHJlZScpIHtcblx0XHRcdGNvbnN0IGxvY2FsU3RhdGUgPSBnZXRMb2NhbFN0YXRlKG5vZGUpO1xuXHRcdFx0aWYgKGxvY2FsU3RhdGU/Lmluc3RhbmNlU3RvcmUpIHtcblx0XHRcdFx0bG9jYWxTdGF0ZS5pbnN0YW5jZVN0b3JlLmdldCgnb2JqZWN0cycpLmZvckVhY2goKG9iaikgPT4gdGhpcy5kZXN0cm95SW50ZXJuYWwob2JqLCBwYXJlbnQpKTtcblx0XHRcdFx0bG9jYWxTdGF0ZS5pbnN0YW5jZVN0b3JlLmdldCgnbm9uT2JqZWN0cycpLmZvckVhY2goKG9iaikgPT4gdGhpcy5kZXN0cm95SW50ZXJuYWwob2JqLCBwYXJlbnQpKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKGxvY2FsU3RhdGU/Lm9uVXBkYXRlKSBkZWxldGUgbG9jYWxTdGF0ZS5vblVwZGF0ZTtcblx0XHRcdGlmIChsb2NhbFN0YXRlPy5vbkF0dGFjaCkgZGVsZXRlIGxvY2FsU3RhdGUub25BdHRhY2g7XG5cblx0XHRcdGRlbGV0ZSAobG9jYWxTdGF0ZSBhcyBOZ3RBbnlSZWNvcmQpWydvYmplY3RzJ107XG5cdFx0XHRkZWxldGUgKGxvY2FsU3RhdGUgYXMgTmd0QW55UmVjb3JkKVsnbm9uT2JqZWN0cyddO1xuXHRcdFx0ZGVsZXRlIChsb2NhbFN0YXRlIGFzIE5ndEFueVJlY29yZClbJ3BhcmVudCddO1xuXHRcdFx0ZGVsZXRlIChsb2NhbFN0YXRlIGFzIE5ndEFueVJlY29yZClbJ2FkZCddO1xuXHRcdFx0ZGVsZXRlIChsb2NhbFN0YXRlIGFzIE5ndEFueVJlY29yZClbJ3JlbW92ZSddO1xuXHRcdFx0ZGVsZXRlIChsb2NhbFN0YXRlIGFzIE5ndEFueVJlY29yZClbJ3N0b3JlJ107XG5cdFx0XHRkZWxldGUgKGxvY2FsU3RhdGUgYXMgTmd0QW55UmVjb3JkKVsnaGFuZGxlcnMnXTtcblxuXHRcdFx0aWYgKCFsb2NhbFN0YXRlPy5wcmltaXRpdmUpIHtcblx0XHRcdFx0ZGVsZXRlIChub2RlIGFzIE5ndEFueVJlY29yZClbJ19fbmd0X18nXTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoclNbTmd0UmVuZGVyZXJDbGFzc0lkLnR5cGVdID09PSAnY29tbWVudCcpIHtcblx0XHRcdHJTW05ndFJlbmRlcmVyQ2xhc3NJZC5pbmplY3RvckZhY3RvcnldID0gbnVsbCE7XG5cdFx0XHRkZWxldGUgKG5vZGUgYXMgTmd0QW55UmVjb3JkKVtTUEVDSUFMX0lOVEVSTkFMX0FERF9DT01NRU5UXTtcblx0XHRcdHRoaXMucmVtb3ZlQ29tbWVudE5vZGUobm9kZSwgdGhpcy5hcmdzQ29tbWVudE5vZGVzKTtcblx0XHR9XG5cblx0XHRpZiAoclNbTmd0UmVuZGVyZXJDbGFzc0lkLnR5cGVdID09PSAncG9ydGFsJykge1xuXHRcdFx0clNbTmd0UmVuZGVyZXJDbGFzc0lkLmluamVjdG9yRmFjdG9yeV0gPSBudWxsITtcblx0XHRcdHRoaXMucmVtb3ZlQ29tbWVudE5vZGUobm9kZSwgdGhpcy5wb3J0YWxDb21tZW50c05vZGVzKTtcblx0XHR9XG5cblx0XHQvLyBudWxsaWZ5IHBhcmVudFxuXHRcdHJTW05ndFJlbmRlcmVyQ2xhc3NJZC5wYXJlbnRdID0gbnVsbDtcblx0XHRmb3IgKGNvbnN0IHJlbmRlckNoaWxkIG9mIHJTW05ndFJlbmRlcmVyQ2xhc3NJZC5jaGlsZHJlbl0gfHwgW10pIHtcblx0XHRcdGlmIChyZW5kZXJDaGlsZC5fX25ndF9yZW5kZXJlcl9fPy5bTmd0UmVuZGVyZXJDbGFzc0lkLnR5cGVdID09PSAndGhyZWUnICYmIHBhcmVudCkge1xuXHRcdFx0XHRpZiAocGFyZW50Ll9fbmd0X3JlbmRlcmVyX18/LltOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gPT09ICd0aHJlZScpIHtcblx0XHRcdFx0XHRyZW1vdmVUaHJlZUNoaWxkKHJlbmRlckNoaWxkLCBwYXJlbnQsIHRydWUpO1xuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y29uc3QgY2xvc2VzdEluc3RhbmNlID0gZ2V0Q2xvc2VzdFBhcmVudFdpdGhJbnN0YW5jZShwYXJlbnQpO1xuXHRcdFx0XHRpZiAoY2xvc2VzdEluc3RhbmNlKSB7XG5cdFx0XHRcdFx0cmVtb3ZlVGhyZWVDaGlsZChyZW5kZXJDaGlsZCwgY2xvc2VzdEluc3RhbmNlLCB0cnVlKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0dGhpcy5kZXN0cm95SW50ZXJuYWwocmVuZGVyQ2hpbGQsIHBhcmVudCk7XG5cdFx0fVxuXG5cdFx0clNbTmd0UmVuZGVyZXJDbGFzc0lkLmNoaWxkcmVuXSA9IFtdO1xuXHRcdHJTW05ndFJlbmRlcmVyQ2xhc3NJZC5kZXN0cm95ZWRdID0gdHJ1ZTtcblx0XHRpZiAocGFyZW50KSB7XG5cdFx0XHRyZW1vdmVDaGlsZChwYXJlbnQsIG5vZGUpO1xuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgcmVtb3ZlQ29tbWVudE5vZGUobm9kZTogTmd0UmVuZGVyZXJOb2RlLCBub2RlczogTmd0UmVuZGVyZXJOb2RlW10pIHtcblx0XHRjb25zdCBpbmRleCA9IG5vZGVzLmZpbmRJbmRleCgoY29tbWVudCkgPT4gY29tbWVudCA9PT0gbm9kZSk7XG5cdFx0aWYgKGluZGV4ID4gLTEpIHtcblx0XHRcdG5vZGVzLnNwbGljZShpbmRleCwgMSk7XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSBwcm9jZXNzUG9ydGFsQ29udGFpbmVyKHBvcnRhbDogTmd0UmVuZGVyZXJOb2RlKSB7XG5cdFx0Y29uc3QgaW5qZWN0b3IgPSBwb3J0YWwuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQuaW5qZWN0b3JGYWN0b3J5XT8uKCk7XG5cdFx0aWYgKCFpbmplY3RvcikgcmV0dXJuO1xuXG5cdFx0Y29uc3QgcG9ydGFsU3RvcmUgPSBpbmplY3Rvci5nZXQoTkdUX1NUT1JFLCBudWxsKTtcblx0XHRpZiAoIXBvcnRhbFN0b3JlKSByZXR1cm47XG5cblx0XHRjb25zdCBwb3J0YWxDb250YWluZXIgPSBwb3J0YWxTdG9yZS5nZXQoJ3NjZW5lJyk7XG5cdFx0aWYgKCFwb3J0YWxDb250YWluZXIpIHJldHVybjtcblxuXHRcdGNvbnN0IGxvY2FsU3RhdGUgPSBnZXRMb2NhbFN0YXRlKHBvcnRhbENvbnRhaW5lcik7XG5cdFx0aWYgKGxvY2FsU3RhdGUpIHtcblx0XHRcdGxvY2FsU3RhdGUuc3RvcmUgPSBwb3J0YWxTdG9yZTtcblx0XHR9XG5cblx0XHRwb3J0YWwuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQucG9ydGFsQ29udGFpbmVyXSA9IGNyZWF0ZU5vZGUoJ3RocmVlJywgcG9ydGFsQ29udGFpbmVyLCB0aGlzLmRvY3VtZW50KTtcblx0fVxuXG5cdHByaXZhdGUgc2hvdWxkRmluZEdyYW5kcGFyZW50SW5zdGFuY2UocFJTOiBOZ3RSZW5kZXJlclN0YXRlLCBjUlM6IE5ndFJlbmRlcmVyU3RhdGUsIGNoaWxkOiBOZ3RSZW5kZXJlck5vZGUpIHtcblx0XHRjb25zdCBwVHlwZSA9IHBSU1tOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV07XG5cdFx0Y29uc3QgY1R5cGUgPSBjUlNbTmd0UmVuZGVyZXJDbGFzc0lkLnR5cGVdO1xuXG5cdFx0Y29uc3QgY0xTID0gZ2V0TG9jYWxTdGF0ZShjaGlsZCk7XG5cdFx0Ly8gaWYgY2hpbGQgaXMgdGhyZWUgYnV0IGhhdmVuJ3QgYmVlbiBhdHRhY2hlZCB0byBhIHBhcmVudCB5ZXRcblx0XHRjb25zdCBpc0RhbmdsaW5nVGhyZWVDaGlsZCA9IGNUeXBlID09PSAndGhyZWUnICYmICFjTFM/Lmluc3RhbmNlU3RvcmU/LmdldCgncGFyZW50Jyk7XG5cdFx0Ly8gb3IgYm90aCBwYXJlbnQgYW5kIGNoaWxkIGFyZSBET00gZWxlbWVudHNcblx0XHQvLyBvciB0aGV5IGFyZSBjb21wb3VuZCBBTkQgaGF2ZW4ndCBoYWQgYSBUSFJFRSBpbnN0YW5jZSB5ZXRcblx0XHRjb25zdCBpc1BhcmVudFN0aWxsRE9NID0gcFR5cGUgPT09ICdkb20nO1xuXHRcdGNvbnN0IGlzQ2hpbGRTdGlsbERPTSA9IGNUeXBlID09PSAnZG9tJztcblxuXHRcdHJldHVybiBpc0RhbmdsaW5nVGhyZWVDaGlsZCB8fCAoaXNQYXJlbnRTdGlsbERPTSAmJiBpc0NoaWxkU3RpbGxET00pIHx8IGlzUGFyZW50U3RpbGxET007XG5cdH1cblxuXHRwcml2YXRlIGdldE5ndEFyZ3MoKSB7XG5cdFx0bGV0IGRpcmVjdGl2ZTogTmd0QXJncyB8IHVuZGVmaW5lZDtcblxuXHRcdGNvbnN0IGRlc3Ryb3llZCA9IFtdO1xuXG5cdFx0bGV0IGkgPSB0aGlzLmFyZ3NDb21tZW50Tm9kZXMubGVuZ3RoIC0gMTtcblx0XHR3aGlsZSAoaSA+PSAwKSB7XG5cdFx0XHRjb25zdCBjb21tZW50ID0gdGhpcy5hcmdzQ29tbWVudE5vZGVzW2ldO1xuXHRcdFx0aWYgKGNvbW1lbnQuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQuZGVzdHJveWVkXSkge1xuXHRcdFx0XHRkZXN0cm95ZWQucHVzaChpKTtcblx0XHRcdFx0aS0tO1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblx0XHRcdGNvbnN0IGluamVjdG9yID0gY29tbWVudC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5pbmplY3RvckZhY3RvcnldKCk7XG5cdFx0XHRpZiAoIWluamVjdG9yKSB7XG5cdFx0XHRcdGktLTtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBpbnN0YW5jZSA9IGluamVjdG9yLmdldChOZ3RBcmdzLCBudWxsKTtcblx0XHRcdGlmIChpbnN0YW5jZSAmJiBpbnN0YW5jZS52YWxpZGF0ZSgpKSB7XG5cdFx0XHRcdGRpcmVjdGl2ZSA9IGluc3RhbmNlO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblxuXHRcdFx0aS0tO1xuXHRcdH1cblxuXHRcdGRlc3Ryb3llZC5mb3JFYWNoKChpbmRleCkgPT4ge1xuXHRcdFx0dGhpcy5hcmdzQ29tbWVudE5vZGVzLnNwbGljZShpbmRleCwgMSk7XG5cdFx0fSk7XG5cblx0XHRyZXR1cm4gZGlyZWN0aXZlO1xuXHR9XG5cblx0cHJpdmF0ZSB0cnlHZXRQb3J0YWxTdG9yZSgpIHtcblx0XHRsZXQgc3RvcmU6IE5ndFNpZ25hbFN0b3JlPE5ndFN0YXRlPiB8IHVuZGVmaW5lZDtcblx0XHRjb25zdCBkZXN0cm95ZWQgPSBbXTtcblx0XHQvLyB3ZSBvbmx5IGNhcmUgYWJvdXQgdGhlIHBvcnRhbCBzdGF0ZXMgYmVjYXVzZSBOZ3RTdG9yZSBvbmx5IGRpZmZlcnMgcGVyIFBvcnRhbFxuXHRcdGxldCBpID0gdGhpcy5wb3J0YWxDb21tZW50c05vZGVzLmxlbmd0aCAtIDE7XG5cdFx0d2hpbGUgKGkgPj0gMCkge1xuXHRcdFx0Ly8gbG9vcCB0aHJvdWdoIHRoZSBwb3J0YWwgc3RhdGUgYmFja3dhcmRzIHRvIGZpbmQgdGhlIGNsb3Nlc3QgTmd0U3RvcmVcblx0XHRcdGNvbnN0IHBvcnRhbCA9IHRoaXMucG9ydGFsQ29tbWVudHNOb2Rlc1tpXTtcblx0XHRcdGlmIChwb3J0YWwuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQuZGVzdHJveWVkXSkge1xuXHRcdFx0XHRkZXN0cm95ZWQucHVzaChpKTtcblx0XHRcdFx0aS0tO1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3QgaW5qZWN0b3IgPSBwb3J0YWwuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQuaW5qZWN0b3JGYWN0b3J5XSgpO1xuXHRcdFx0aWYgKCFpbmplY3Rvcikge1xuXHRcdFx0XHRpLS07XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgaW5zdGFuY2UgPSBpbmplY3Rvci5nZXQoTkdUX1NUT1JFLCBudWxsKTtcblx0XHRcdC8vIG9ubHkgdGhlIGluc3RhbmNlIHdpdGggcHJldmlvdXNSb290IHNob3VsZCBwYXNzXG5cdFx0XHRpZiAoaW5zdGFuY2UgJiYgaW5zdGFuY2UuZ2V0KCdwcmV2aW91c1Jvb3QnKSkge1xuXHRcdFx0XHRzdG9yZSA9IGluc3RhbmNlO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHRcdGktLTtcblx0XHR9XG5cblx0XHRkZXN0cm95ZWQuZm9yRWFjaCgoaW5kZXgpID0+IHtcblx0XHRcdHRoaXMucG9ydGFsQ29tbWVudHNOb2Rlcy5zcGxpY2UoaW5kZXgsIDEpO1xuXHRcdH0pO1xuXG5cdFx0cmV0dXJuIHN0b3JlIHx8IHRoaXMucm9vdFN0b3JlO1xuXHR9XG5cblx0Y3JlYXRlVGV4dCA9IHRoaXMuZGVsZWdhdGUuY3JlYXRlVGV4dC5iaW5kKHRoaXMuZGVsZWdhdGUpO1xuXHRkZXN0cm95ID0gdGhpcy5kZWxlZ2F0ZS5kZXN0cm95LmJpbmQodGhpcy5kZWxlZ2F0ZSk7XG5cdGRlc3Ryb3lOb2RlOiAoKG5vZGU6IGFueSkgPT4gdm9pZCkgfCBudWxsID0gbnVsbDtcblx0c2VsZWN0Um9vdEVsZW1lbnQgPSB0aGlzLmRlbGVnYXRlLnNlbGVjdFJvb3RFbGVtZW50LmJpbmQodGhpcy5kZWxlZ2F0ZSk7XG5cdG5leHRTaWJsaW5nID0gdGhpcy5kZWxlZ2F0ZS5uZXh0U2libGluZy5iaW5kKHRoaXMuZGVsZWdhdGUpO1xuXHRhZGRDbGFzcyA9IHRoaXMuZGVsZWdhdGUuYWRkQ2xhc3MuYmluZCh0aGlzLmRlbGVnYXRlKTtcblx0cmVtb3ZlQ2xhc3MgPSB0aGlzLmRlbGVnYXRlLnJlbW92ZUNsYXNzLmJpbmQodGhpcy5kZWxlZ2F0ZSk7XG5cdHNldFN0eWxlID0gdGhpcy5kZWxlZ2F0ZS5zZXRTdHlsZS5iaW5kKHRoaXMuZGVsZWdhdGUpO1xuXHRyZW1vdmVTdHlsZSA9IHRoaXMuZGVsZWdhdGUucmVtb3ZlU3R5bGUuYmluZCh0aGlzLmRlbGVnYXRlKTtcblx0c2V0VmFsdWUgPSB0aGlzLmRlbGVnYXRlLnNldFZhbHVlLmJpbmQodGhpcy5kZWxlZ2F0ZSk7XG5cdGdldCBkYXRhKCk6IHsgW2tleTogc3RyaW5nXTogYW55IH0ge1xuXHRcdHJldHVybiB0aGlzLmRlbGVnYXRlLmRhdGE7XG5cdH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3ZpZGVOZ3RSZW5kZXJlcihzdG9yZTogTmd0U2lnbmFsU3RvcmU8Tmd0U3RhdGU+KSB7XG5cdGNvbnN0IHByb3ZpZGVycyA9IFtcblx0XHROZ3RSZW5kZXJlckZhY3RvcnksXG5cdFx0eyBwcm92aWRlOiBSZW5kZXJlckZhY3RvcnkyLCB1c2VFeGlzdGluZzogTmd0UmVuZGVyZXJGYWN0b3J5IH0sXG5cdFx0cHJvdmlkZVN0b3JlKCgpID0+IHN0b3JlKSxcblx0XTtcblxuXHRyZXR1cm4gbWFrZUVudmlyb25tZW50UHJvdmlkZXJzKHByb3ZpZGVycyk7XG59XG5cbmV4cG9ydCB7IGV4dGVuZCB9IGZyb20gJy4vY2F0YWxvZ3VlJztcbmV4cG9ydCB7IEhUTUwsIFJPVVRFRF9TQ0VORSB9IGZyb20gJy4vY29uc3RhbnRzJztcbiJdfQ==
572
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvc3JjL2xpYi9yZW5kZXJlci9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUNOLFVBQVUsRUFFVixnQkFBZ0IsRUFFaEIsWUFBWSxFQUNaLE1BQU0sRUFDTix3QkFBd0IsRUFDeEIsU0FBUyxHQUNULE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE9BQU8sRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNyRCxPQUFPLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFFaEUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDakMsT0FBTyxFQUFrQixXQUFXLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNwRSxPQUFPLEVBQXFCLGVBQWUsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNqRSxPQUFPLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxlQUFlLEVBQUUsNEJBQTRCLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDcEgsT0FBTyxFQUdOLFFBQVEsRUFDUixVQUFVLEVBQ1YsNEJBQTRCLEVBQzVCLEtBQUssRUFDTCxXQUFXLEVBQ1gsU0FBUyxHQUNULE1BQU0sU0FBUyxDQUFDO0FBQ2pCLE9BQU8sRUFBc0IsZ0JBQWdCLEVBQUUsYUFBYSxFQUFFLGlCQUFpQixFQUFFLGdCQUFnQixFQUFFLE1BQU0sU0FBUyxDQUFDOztBQUduSCxNQUFNLE9BQU8sa0JBQWtCO0lBRC9CO1FBRVMsNEJBQXVC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TTtZQUNQLENBQUM7WUFDRCxDQUFDLEVBQUUsQ0FBQztRQUNMLENBQUM7UUFFRCxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDM0IsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDM0MsQ0FBQyxDQUFDLENBQUM7UUFFSCxPQUFPLEtBQUssSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ2hDLENBQUM7SUFZRCxJQUFJLElBQUk7UUFDUCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDO0lBQzNCLENBQUM7Q0FDRDtBQUVELE1BQU0sVUFBVSxrQkFBa0IsQ0FBQyxLQUErQjtJQUNqRSxNQUFNLFNBQVMsR0FBRztRQUNqQixrQkFBa0I7UUFDbEIsRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsV0FBVyxFQUFFLGtCQUFrQixFQUFFO1FBQzlELFlBQVksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUM7S0FDekIsQ0FBQztJQUVGLE9BQU8sd0JBQXdCLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDNUMsQ0FBQztBQUVELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDckMsT0FBTyxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsTUFBTSxhQUFhLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBET0NVTUVOVCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuXHRJbmplY3RhYmxlLFxuXHRSZW5kZXJlcjIsXG5cdFJlbmRlcmVyRmFjdG9yeTIsXG5cdFJlbmRlcmVyVHlwZTIsXG5cdGdldERlYnVnTm9kZSxcblx0aW5qZWN0LFxuXHRtYWtlRW52aXJvbm1lbnRQcm92aWRlcnMsXG5cdHVudHJhY2tlZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOZ3RBcmdzIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy9hcmdzJztcbmltcG9ydCB7IGdldExvY2FsU3RhdGUsIHByZXBhcmUgfSBmcm9tICcuLi9pbnN0YW5jZSc7XG5pbXBvcnQgeyBOR1RfU1RPUkUsIGluamVjdFN0b3JlLCBwcm92aWRlU3RvcmUgfSBmcm9tICcuLi9zdG9yZSc7XG5pbXBvcnQgeyBOZ3RBbnlSZWNvcmQsIE5ndEluc3RhbmNlTm9kZSwgTmd0TG9jYWxTdGF0ZSwgTmd0U3RhdGUgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBhcHBseVByb3BzIH0gZnJvbSAnLi4vdXRpbHMvYXBwbHktcHJvcHMnO1xuaW1wb3J0IHsgaXMgfSBmcm9tICcuLi91dGlscy9pcyc7XG5pbXBvcnQgeyBOZ3RTaWduYWxTdG9yZSwgc2lnbmFsU3RvcmUgfSBmcm9tICcuLi91dGlscy9zaWduYWwtc3RvcmUnO1xuaW1wb3J0IHsgTmd0QW55Q29uc3RydWN0b3IsIGluamVjdENhdGFsb2d1ZSB9IGZyb20gJy4vY2F0YWxvZ3VlJztcbmltcG9ydCB7IEhUTUwsIFJPVVRFRF9TQ0VORSwgU1BFQ0lBTF9ET01fVEFHLCBTUEVDSUFMX0lOVEVSTkFMX0FERF9DT01NRU5ULCBTUEVDSUFMX1BST1BFUlRJRVMgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQge1xuXHROZ3RSZW5kZXJlck5vZGUsXG5cdE5ndFJlbmRlcmVyU3RhdGUsXG5cdGFkZENoaWxkLFxuXHRjcmVhdGVOb2RlLFxuXHRnZXRDbG9zZXN0UGFyZW50V2l0aEluc3RhbmNlLFxuXHRpc0RPTSxcblx0cmVtb3ZlQ2hpbGQsXG5cdHNldFBhcmVudCxcbn0gZnJvbSAnLi9zdGF0ZSc7XG5pbXBvcnQgeyBOZ3RSZW5kZXJlckNsYXNzSWQsIGF0dGFjaFRocmVlQ2hpbGQsIGtlYmFiVG9QYXNjYWwsIHByb2Nlc3NUaHJlZUV2ZW50LCByZW1vdmVUaHJlZUNoaWxkIH0gZnJvbSAnLi91dGlscyc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBOZ3RSZW5kZXJlckZhY3RvcnkgaW1wbGVtZW50cyBSZW5kZXJlckZhY3RvcnkyIHtcblx0cHJpdmF0ZSBkZWxlZ2F0ZVJlbmRlcmVyRmFjdG9yeSA9IGluamVjdChSZW5kZXJlckZhY3RvcnkyLCB7IHNraXBTZWxmOiB0cnVlIH0pO1xuXHRwcml2YXRlIGRvY3VtZW50ID0gaW5qZWN0KERPQ1VNRU5UKTtcblx0cHJpdmF0ZSBjYXRhbG9ndWUgPSBpbmplY3RDYXRhbG9ndWUoKTtcblx0cHJpdmF0ZSByb290U3RvcmUgPSBpbmplY3RTdG9yZSgpO1xuXG5cdHByaXZhdGUgcG9ydGFsQ29tbWVudHNOb2RlczogQXJyYXk8Tmd0UmVuZGVyZXJOb2RlPiA9IFtdO1xuXHRwcml2YXRlIHJlbmRlcmVyTWFwID0gbmV3IE1hcDxzdHJpbmcsIFJlbmRlcmVyMj4oKTtcblx0cHJpdmF0ZSByb3V0ZWRTZXQgPSBuZXcgU2V0PHN0cmluZz4oKTtcblxuXHRjcmVhdGVSZW5kZXJlcihob3N0RWxlbWVudDogYW55LCB0eXBlOiBSZW5kZXJlclR5cGUyIHwgbnVsbCk6IFJlbmRlcmVyMiB7XG5cdFx0Y29uc3QgZGVsZWdhdGVSZW5kZXJlciA9IHRoaXMuZGVsZWdhdGVSZW5kZXJlckZhY3RvcnkuY3JlYXRlUmVuZGVyZXIoaG9zdEVsZW1lbnQsIHR5cGUpO1xuXG5cdFx0aWYgKCF0eXBlKSByZXR1cm4gZGVsZWdhdGVSZW5kZXJlcjtcblxuXHRcdC8vIE5PVEU6IG1pZ2h0IG5lZWQgdG8gcmV2aXNpdCB0aGlzXG5cdFx0aWYgKCh0eXBlIGFzIE5ndEFueVJlY29yZClbJ3R5cGUnXVtIVE1MXSkge1xuXHRcdFx0dGhpcy5yZW5kZXJlck1hcC5zZXQodHlwZS5pZCwgZGVsZWdhdGVSZW5kZXJlcik7XG5cdFx0XHRyZXR1cm4gZGVsZWdhdGVSZW5kZXJlcjtcblx0XHR9XG5cblx0XHRpZiAoKHR5cGUgYXMgTmd0QW55UmVjb3JkKVsndHlwZSddW1JPVVRFRF9TQ0VORV0pIHtcblx0XHRcdHRoaXMucm91dGVkU2V0LmFkZCh0eXBlLmlkKTtcblx0XHR9XG5cblx0XHRsZXQgcmVuZGVyZXIgPSB0aGlzLnJlbmRlcmVyTWFwLmdldCh0eXBlLmlkKTtcblx0XHRpZiAoIXJlbmRlcmVyKSB7XG5cdFx0XHR0aGlzLnJlbmRlcmVyTWFwLnNldChcblx0XHRcdFx0dHlwZS5pZCxcblx0XHRcdFx0KHJlbmRlcmVyID0gbmV3IE5ndFJlbmRlcmVyKFxuXHRcdFx0XHRcdGRlbGVnYXRlUmVuZGVyZXIsXG5cdFx0XHRcdFx0dGhpcy5yb290U3RvcmUsXG5cdFx0XHRcdFx0dGhpcy5kb2N1bWVudCxcblx0XHRcdFx0XHR0aGlzLnBvcnRhbENvbW1lbnRzTm9kZXMsXG5cdFx0XHRcdFx0dGhpcy5jYXRhbG9ndWUsXG5cdFx0XHRcdFx0Ly8gc2V0dGluZyByb290IHNjZW5lIGlmIHRoZXJlJ3Mgbm8gcm91dGVkIHNjZW5lIE9SIHRoaXMgY29tcG9uZW50IGlzIHRoZSByb3V0ZWQgU2NlbmVcblx0XHRcdFx0XHQhaG9zdEVsZW1lbnQgJiYgKHRoaXMucm91dGVkU2V0LnNpemUgPT09IDAgfHwgdGhpcy5yb3V0ZWRTZXQuaGFzKHR5cGUuaWQpKSxcblx0XHRcdFx0KSksXG5cdFx0XHQpO1xuXHRcdH1cblx0XHRyZXR1cm4gcmVuZGVyZXI7XG5cdH1cbn1cblxuZXhwb3J0IGNsYXNzIE5ndFJlbmRlcmVyIGltcGxlbWVudHMgUmVuZGVyZXIyIHtcblx0cHJpdmF0ZSBhcmdzQ29tbWVudE5vZGVzOiBBcnJheTxOZ3RSZW5kZXJlck5vZGU+ID0gW107XG5cblx0Y29uc3RydWN0b3IoXG5cdFx0cHJpdmF0ZSBkZWxlZ2F0ZTogUmVuZGVyZXIyLFxuXHRcdHByaXZhdGUgcm9vdFN0b3JlOiBOZ3RTaWduYWxTdG9yZTxOZ3RTdGF0ZT4sXG5cdFx0cHJpdmF0ZSBkb2N1bWVudDogRG9jdW1lbnQsXG5cdFx0cHJpdmF0ZSBwb3J0YWxDb21tZW50c05vZGVzOiBBcnJheTxOZ3RSZW5kZXJlck5vZGU+LFxuXHRcdHByaXZhdGUgY2F0YWxvZ3VlOiBSZWNvcmQ8c3RyaW5nLCBOZ3RBbnlDb25zdHJ1Y3Rvcj4sXG5cdFx0cHJpdmF0ZSBpc1Jvb3QgPSB0cnVlLFxuXHQpIHt9XG5cblx0Y3JlYXRlRWxlbWVudChuYW1lOiBzdHJpbmcsIG5hbWVzcGFjZT86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQpIHtcblx0XHRjb25zdCBlbGVtZW50ID0gdGhpcy5kZWxlZ2F0ZS5jcmVhdGVFbGVtZW50KG5hbWUsIG5hbWVzcGFjZSk7XG5cblx0XHQvLyBpZiB0aGVyZSdzIG5hbWVzcGFjZSwgd2UgZG9uJ3QgZG8gYW55dGhpbmdcblx0XHRpZiAobmFtZXNwYWNlKSB7XG5cdFx0XHRyZXR1cm4gY3JlYXRlTm9kZSgnZG9tJywgZWxlbWVudCwgdGhpcy5kb2N1bWVudCk7XG5cdFx0fVxuXG5cdFx0Ly8gb24gZmlyc3QgcGFzcywgd2UgcmV0dXJuIHRoZSBSb290IFNjZW5lIGFzIHRoZSByb290IG5vZGVcblx0XHRpZiAodGhpcy5pc1Jvb3QpIHtcblx0XHRcdHRoaXMuaXNSb290ID0gZmFsc2U7XG5cdFx0XHRjb25zdCBub2RlID0gY3JlYXRlTm9kZSgndGhyZWUnLCB0aGlzLnJvb3RTdG9yZS5zbmFwc2hvdC5zY2VuZSwgdGhpcy5kb2N1bWVudCk7XG5cdFx0XHRub2RlLl9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLmluamVjdG9yRmFjdG9yeV0gPSAoKSA9PiBnZXREZWJ1Z05vZGUoZWxlbWVudCk/LmluamVjdG9yO1xuXHRcdFx0cmV0dXJuIG5vZGU7XG5cdFx0fVxuXG5cdFx0aWYgKG5hbWUgPT09IFNQRUNJQUxfRE9NX1RBRy5OR1RfUE9SVEFMKSB7XG5cdFx0XHRyZXR1cm4gY3JlYXRlTm9kZSgncG9ydGFsJywgZWxlbWVudCwgdGhpcy5kb2N1bWVudCk7XG5cdFx0fVxuXG5cdFx0aWYgKG5hbWUgPT09IFNQRUNJQUxfRE9NX1RBRy5OR1RfVkFMVUUpIHtcblx0XHRcdGNvbnN0IGluc3RhbmNlU3RvcmUgPSBzaWduYWxTdG9yZSh7IHBhcmVudDogbnVsbCwgb2JqZWN0czogW10sIG5vbk9iamVjdHM6IFtdIH0pO1xuXHRcdFx0cmV0dXJuIGNyZWF0ZU5vZGUoXG5cdFx0XHRcdCd0aHJlZScsXG5cdFx0XHRcdE9iamVjdC5hc3NpZ24oXG5cdFx0XHRcdFx0eyBfX25ndF9yZW5kZXJlcl9fOiB7IHJhd1ZhbHVlOiB1bmRlZmluZWQgfSB9LFxuXHRcdFx0XHRcdC8vIE5PVEU6IHdlIGFzc2lnbiB0aGlzIG1hbnVhbGx5IHRvIGEgcmF3IHZhbHVlIG5vZGVcblx0XHRcdFx0XHQvLyBiZWNhdXNlIHdlIHNheSBpdCBpcyBhICd0aHJlZScgbm9kZSBidXQgd2UncmUgbm90IHVzaW5nIHByZXBhcmUoKVxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdF9fbmd0X186IHtcblx0XHRcdFx0XHRcdFx0aXNSYXc6IHRydWUsXG5cdFx0XHRcdFx0XHRcdGluc3RhbmNlU3RvcmUsXG5cdFx0XHRcdFx0XHRcdHNldFBhcmVudChwYXJlbnQ6IE5ndEluc3RhbmNlTm9kZSkge1xuXHRcdFx0XHRcdFx0XHRcdGluc3RhbmNlU3RvcmUudXBkYXRlKHsgcGFyZW50IH0pO1xuXHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHQpLFxuXHRcdFx0XHR0aGlzLmRvY3VtZW50LFxuXHRcdFx0KTtcblx0XHR9XG5cblx0XHRjb25zdCBbaW5qZWN0ZWRBcmdzXSA9IFt0aGlzLmdldE5ndEFyZ3MoKT8udmFsdWUgfHwgW11dO1xuXG5cdFx0aWYgKG5hbWUgPT09IFNQRUNJQUxfRE9NX1RBRy5OR1RfUFJJTUlUSVZFKSB7XG5cdFx0XHRpZiAoIWluamVjdGVkQXJnc1swXSkgdGhyb3cgbmV3IEVycm9yKGBbTkdUXSBuZ3QtcHJpbWl0aXZlIHdpdGhvdXQgYXJncyBpcyBpbnZhbGlkYCk7XG5cdFx0XHRjb25zdCBvYmplY3QgPSBpbmplY3RlZEFyZ3NbMF07XG5cdFx0XHRjb25zdCBsb2NhbFN0YXRlID0gZ2V0TG9jYWxTdGF0ZShvYmplY3QpO1xuXHRcdFx0aWYgKCFsb2NhbFN0YXRlKSB7XG5cdFx0XHRcdC8vIE5PVEU6IGlmIGFuIG9iamVjdCBpc24ndCBhbHJlYWR5IFwicHJlcGFyZWRcIiwgd2UgcHJlcGFyZSBpdFxuXHRcdFx0XHRwcmVwYXJlKG9iamVjdCwgeyBzdG9yZTogdGhpcy5yb290U3RvcmUsIHByaW1pdGl2ZTogdHJ1ZSB9KTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBjcmVhdGVOb2RlKCd0aHJlZScsIG9iamVjdCwgdGhpcy5kb2N1bWVudCk7XG5cdFx0fVxuXG5cdFx0Y29uc3QgdGhyZWVOYW1lID0ga2ViYWJUb1Bhc2NhbChuYW1lLnN0YXJ0c1dpdGgoJ25ndC0nKSA/IG5hbWUuc2xpY2UoNCkgOiBuYW1lKTtcblx0XHRjb25zdCB0aHJlZVRhcmdldCA9IHRoaXMuY2F0YWxvZ3VlW3RocmVlTmFtZV07XG5cblx0XHQvLyB3ZSBoYXZlIHRoZSBUSFJFRSBjb25zdHJ1Y3RvciBoZXJlLCBoYW5kbGUgaXRcblx0XHRpZiAodGhyZWVUYXJnZXQpIHtcblx0XHRcdGNvbnN0IGluc3RhbmNlID0gcHJlcGFyZShuZXcgdGhyZWVUYXJnZXQoLi4uaW5qZWN0ZWRBcmdzKSwgeyBzdG9yZTogdGhpcy5yb290U3RvcmUgfSk7XG5cdFx0XHRjb25zdCBub2RlID0gY3JlYXRlTm9kZSgndGhyZWUnLCBpbnN0YW5jZSwgdGhpcy5kb2N1bWVudCk7XG5cdFx0XHRjb25zdCBsb2NhbFN0YXRlID0gZ2V0TG9jYWxTdGF0ZShpbnN0YW5jZSkgYXMgTmd0TG9jYWxTdGF0ZTtcblxuXHRcdFx0Ly8gYXV0by1hdHRhY2ggZm9yIGdlb21ldHJ5IGFuZCBtYXRlcmlhbFxuXHRcdFx0aWYgKGlzLmdlb21ldHJ5KGluc3RhbmNlKSkge1xuXHRcdFx0XHRsb2NhbFN0YXRlLmF0dGFjaCA9IFsnZ2VvbWV0cnknXTtcblx0XHRcdH0gZWxzZSBpZiAoaXMubWF0ZXJpYWwoaW5zdGFuY2UpKSB7XG5cdFx0XHRcdGxvY2FsU3RhdGUuYXR0YWNoID0gWydtYXRlcmlhbCddO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gbm9kZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gY3JlYXRlTm9kZSgnZG9tJywgZWxlbWVudCwgdGhpcy5kb2N1bWVudCk7XG5cdH1cblxuXHRjcmVhdGVDb21tZW50KHZhbHVlOiBzdHJpbmcpIHtcblx0XHRjb25zdCBjb21tZW50ID0gdGhpcy5kZWxlZ2F0ZS5jcmVhdGVDb21tZW50KHZhbHVlKTtcblxuXHRcdC8vIE5PVEU6IHdlIGF0dGFjaCBhbiBhcnJvdyBmdW5jdGlvbiB0byB0aGUgQ29tbWVudCBub2RlXG5cdFx0Ly8gSW4gb3VyIGRpcmVjdGl2ZXMsIHdlIGNhbiBjYWxsIHRoaXMgZnVuY3Rpb24gdG8gdGhlbiBzdGFydCB0cmFja2luZyB0aGUgUmVuZGVyZXJOb2RlXG5cdFx0Ly8gdGhpcyBpcyBkb25lIHRvIGxpbWl0IHRoZSBhbW91bnQgb2YgTm9kZXMgd2UgbmVlZCB0byBwcm9jZXNzIGZvciBnZXRDcmVhdGlvblN0YXRlXG5cdFx0Y29tbWVudFtTUEVDSUFMX0lOVEVSTkFMX0FERF9DT01NRU5UXSA9IChub2RlOiBOZ3RSZW5kZXJlck5vZGUgfCAnYXJncycpID0+IHtcblx0XHRcdGlmIChub2RlID09PSAnYXJncycpIHtcblx0XHRcdFx0dGhpcy5hcmdzQ29tbWVudE5vZGVzLnB1c2goY29tbWVudCk7XG5cdFx0XHR9IGVsc2UgaWYgKHR5cGVvZiBub2RlID09PSAnb2JqZWN0Jykge1xuXHRcdFx0XHR0aGlzLnBvcnRhbENvbW1lbnRzTm9kZXMucHVzaChub2RlKTtcblx0XHRcdH1cblx0XHR9O1xuXG5cdFx0cmV0dXJuIGNyZWF0ZU5vZGUoJ2NvbW1lbnQnLCBjb21tZW50LCB0aGlzLmRvY3VtZW50KTtcblx0fVxuXG5cdGFwcGVuZENoaWxkKHBhcmVudDogTmd0UmVuZGVyZXJOb2RlLCBuZXdDaGlsZDogTmd0UmVuZGVyZXJOb2RlKTogdm9pZCB7XG5cdFx0Y29uc3QgcFJTID0gcGFyZW50Ll9fbmd0X3JlbmRlcmVyX187XG5cdFx0Y29uc3QgY1JTID0gbmV3Q2hpbGQuX19uZ3RfcmVuZGVyZXJfXztcblxuXHRcdGlmIChcblx0XHRcdHBSU1tOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gPT09ICdkb20nICYmXG5cdFx0XHQobmV3Q2hpbGQgaW5zdGFuY2VvZiBUZXh0IHx8IGNSU1tOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gPT09ICdkb20nKVxuXHRcdCkge1xuXHRcdFx0YWRkQ2hpbGQocGFyZW50LCBuZXdDaGlsZCk7XG5cblx0XHRcdGlmIChuZXdDaGlsZFsnX19uZ3RfZG9tX3BhcmVudF9fJ10gJiYgbmV3Q2hpbGRbJ19fbmd0X2RvbV9wYXJlbnRfXyddIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcblx0XHRcdFx0dGhpcy5kZWxlZ2F0ZS5hcHBlbmRDaGlsZChuZXdDaGlsZFsnX19uZ3RfZG9tX3BhcmVudF9fJ10sIG5ld0NoaWxkKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHR0aGlzLmRlbGVnYXRlLmFwcGVuZENoaWxkKHBhcmVudCwgbmV3Q2hpbGQpO1xuXHRcdFx0aWYgKGNSUykge1xuXHRcdFx0XHRzZXRQYXJlbnQobmV3Q2hpbGQsIHBhcmVudCk7XG5cdFx0XHRcdGlmICh0aGlzLnNob3VsZEZpbmRHcmFuZHBhcmVudEluc3RhbmNlKHBSUywgY1JTLCBuZXdDaGlsZCkpIHtcblx0XHRcdFx0XHQvLyB3ZSdsbCB0cnkgdG8gZ2V0IHRoZSBncmFuZHBhcmVudCBpbnN0YW5jZSBoZXJlIHNvIHRoYXQgd2UgY2FuIHJ1biBhcHBlbmRDaGlsZCB3aXRoIGJvdGggaW5zdGFuY2VzXG5cdFx0XHRcdFx0Y29uc3QgY2xvc2VzdEdyYW5kcGFyZW50SW5zdGFuY2UgPSBnZXRDbG9zZXN0UGFyZW50V2l0aEluc3RhbmNlKHBhcmVudCk7XG5cdFx0XHRcdFx0aWYgKGNsb3Nlc3RHcmFuZHBhcmVudEluc3RhbmNlKSB0aGlzLmFwcGVuZENoaWxkKGNsb3Nlc3RHcmFuZHBhcmVudEluc3RhbmNlLCBuZXdDaGlsZCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmIChjUlM/LltOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gPT09ICdjb21tZW50Jykge1xuXHRcdFx0c2V0UGFyZW50KG5ld0NoaWxkLCBwYXJlbnQpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHNldFBhcmVudChuZXdDaGlsZCwgcGFyZW50KTtcblx0XHRhZGRDaGlsZChwYXJlbnQsIG5ld0NoaWxkKTtcblxuXHRcdC8vIGlmIG5ldyBjaGlsZCBpcyBhIHBvcnRhbFxuXHRcdGlmIChjUlM/LltOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gPT09ICdwb3J0YWwnKSB7XG5cdFx0XHRpZiAoIWNSU1tOZ3RSZW5kZXJlckNsYXNzSWQucG9ydGFsQ29udGFpbmVyXSkgdGhpcy5wcm9jZXNzUG9ydGFsQ29udGFpbmVyKG5ld0NoaWxkKTtcblx0XHRcdGlmIChjUlNbTmd0UmVuZGVyZXJDbGFzc0lkLnBvcnRhbENvbnRhaW5lcl0pIHtcblx0XHRcdFx0dGhpcy5hcHBlbmRDaGlsZChwYXJlbnQsIGNSU1tOZ3RSZW5kZXJlckNsYXNzSWQucG9ydGFsQ29udGFpbmVyXSk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gaWYgcGFyZW50IGlzIGEgcG9ydGFsXG5cdFx0aWYgKHBSU1tOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gPT09ICdwb3J0YWwnKSB7XG5cdFx0XHRpZiAoIXBSU1tOZ3RSZW5kZXJlckNsYXNzSWQucG9ydGFsQ29udGFpbmVyXSkgdGhpcy5wcm9jZXNzUG9ydGFsQ29udGFpbmVyKHBhcmVudCk7XG5cblx0XHRcdGlmIChwUlNbTmd0UmVuZGVyZXJDbGFzc0lkLnBvcnRhbENvbnRhaW5lcl0pIHtcblx0XHRcdFx0dGhpcy5hcHBlbmRDaGlsZChwUlNbTmd0UmVuZGVyZXJDbGFzc0lkLnBvcnRhbENvbnRhaW5lcl0sIG5ld0NoaWxkKTtcblx0XHRcdH1cblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBpZiBib3RoIGFyZSB0aHJlZSBpbnN0YW5jZXMsIHN0cmFpZ2h0Zm9yd2FyZCBjYXNlXG5cdFx0aWYgKHBSU1tOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gPT09ICd0aHJlZScgJiYgY1JTPy5bTmd0UmVuZGVyZXJDbGFzc0lkLnR5cGVdID09PSAndGhyZWUnKSB7XG5cdFx0XHRjb25zdCBjTFMgPSBnZXRMb2NhbFN0YXRlKG5ld0NoaWxkKTtcblxuXHRcdFx0Ly8gaWYgY2hpbGQgYWxyZWFkeSBhdHRhY2hlZCB0byBhIHBhcmVudCwgc2tpcFxuXHRcdFx0aWYgKGNMUz8uaW5zdGFuY2VTdG9yZT8uZ2V0KCdwYXJlbnQnKSkgcmV0dXJuO1xuXHRcdFx0aWYgKHBhcmVudCA9PT0gbmV3Q2hpbGQpIHJldHVybjtcblxuXHRcdFx0Ly8gYXR0YWNoIFRIUkVFIGNoaWxkXG5cdFx0XHRhdHRhY2hUaHJlZUNoaWxkKHBhcmVudCwgbmV3Q2hpbGQpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIGlmIG9ubHkgdGhlIHBhcmVudCBpcyB0aGUgVEhSRUUgaW5zdGFuY2Vcblx0XHRpZiAocFJTW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXSA9PT0gJ3RocmVlJykge1xuXHRcdFx0Zm9yIChjb25zdCByZW5kZXJDaGlsZCBvZiBjUlM/LltOZ3RSZW5kZXJlckNsYXNzSWQuY2hpbGRyZW5dIHx8IFtdKSB7XG5cdFx0XHRcdHRoaXMuYXBwZW5kQ2hpbGQocGFyZW50LCByZW5kZXJDaGlsZCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMuc2hvdWxkRmluZEdyYW5kcGFyZW50SW5zdGFuY2UocFJTLCBjUlMsIG5ld0NoaWxkKSkge1xuXHRcdFx0Ly8gd2UnbGwgdHJ5IHRvIGdldCB0aGUgZ3JhbmRwYXJlbnQgaW5zdGFuY2UgaGVyZSBzbyB0aGF0IHdlIGNhbiBydW4gYXBwZW5kQ2hpbGQgd2l0aCBib3RoIGluc3RhbmNlc1xuXHRcdFx0Y29uc3QgY2xvc2VzdEdyYW5kcGFyZW50SW5zdGFuY2UgPSBnZXRDbG9zZXN0UGFyZW50V2l0aEluc3RhbmNlKHBhcmVudCk7XG5cdFx0XHRpZiAoY2xvc2VzdEdyYW5kcGFyZW50SW5zdGFuY2UpIHRoaXMuYXBwZW5kQ2hpbGQoY2xvc2VzdEdyYW5kcGFyZW50SW5zdGFuY2UsIG5ld0NoaWxkKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdH1cblxuXHRpbnNlcnRCZWZvcmUoXG5cdFx0cGFyZW50OiBOZ3RSZW5kZXJlck5vZGUsXG5cdFx0bmV3Q2hpbGQ6IE5ndFJlbmRlcmVyTm9kZSxcblx0XHQvLyBUT0RPOiB3ZSBtaWdodCBuZWVkIHRoZXNlP1xuXHRcdC8vIF9yZWZDaGlsZDogTmd0UmVuZGVyZXJOb2RlLFxuXHRcdC8vIF9pc01vdmU/OiBib29sZWFuIHwgdW5kZWZpbmVkLFxuXHQpOiB2b2lkIHtcblx0XHQvLyBOT1RFOiBub3Qgc3VyZSB3aHkgdGhpcyBpcyBoZXJlLiBpbnZlc3RpZ2F0ZSB3aGVuIHdlIGhhdmUgdGltZVxuXHRcdC8vIGlmIChwYXJlbnQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCAmJiAobmV3Q2hpbGQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCB8fCBuZXdDaGlsZCBpbnN0YW5jZW9mIFRleHQpKSB7XG5cdFx0Ly8gXHRyZXR1cm4gdGhpcy5kZWxlZ2F0ZS5hcHBlbmRDaGlsZChwYXJlbnQsIG5ld0NoaWxkKTtcblx0XHQvLyB9XG5cblx0XHRpZiAocGFyZW50ID09IG51bGwgfHwgIXBhcmVudC5fX25ndF9yZW5kZXJlcl9fIHx8IHBhcmVudCA9PT0gbmV3Q2hpbGQpIHJldHVybjtcblx0XHR0aGlzLmFwcGVuZENoaWxkKHBhcmVudCwgbmV3Q2hpbGQpO1xuXHR9XG5cblx0cmVtb3ZlQ2hpbGQocGFyZW50OiBOZ3RSZW5kZXJlck5vZGUgfCBudWxsLCBvbGRDaGlsZDogTmd0UmVuZGVyZXJOb2RlLCBpc0hvc3RFbGVtZW50PzogYm9vbGVhbiB8IHVuZGVmaW5lZCk6IHZvaWQge1xuXHRcdGlmIChwYXJlbnQgPT0gbnVsbCkge1xuXHRcdFx0cGFyZW50ID0gKHVudHJhY2tlZCgoKSA9PiBnZXRMb2NhbFN0YXRlKG9sZENoaWxkKT8ucGFyZW50KSB8fFxuXHRcdFx0XHRvbGRDaGlsZC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5wYXJlbnRdKSBhcyBOZ3RSZW5kZXJlck5vZGU7XG5cdFx0fVxuXG5cdFx0Y29uc3QgY1JTID0gb2xkQ2hpbGQuX19uZ3RfcmVuZGVyZXJfXztcblxuXHRcdC8vIGlmIHBhcmVudCBpcyBzdGlsbCBmYWxzeSwgd2UgZG9uJ3Qga25vdyB3aGF0IHRvIGRvIHdpdGggdGhlIHBhcmVudC5cblx0XHQvLyB3ZSdsbCBqdXN0IHJlbW92ZSB0aGUgY2hpbGQgYW5kIGRlc3Ryb3kgaXRcblx0XHRpZiAocGFyZW50ID09IG51bGwpIHtcblx0XHRcdGlmIChjUlMpIHtcblx0XHRcdFx0aWYgKGNSU1tOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gPT09ICd0aHJlZScpIHtcblx0XHRcdFx0XHRyZW1vdmVUaHJlZUNoaWxkKG9sZENoaWxkLCB1bmRlZmluZWQsIHRydWUpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHRoaXMuZGVzdHJveUludGVybmFsKG9sZENoaWxkLCB1bmRlZmluZWQpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Y29uc3QgcFJTID0gcGFyZW50Ll9fbmd0X3JlbmRlcmVyX187XG5cblx0XHRpZiAoXG5cdFx0XHQoIWNSUyB8fCAhcFJTKSAmJlxuXHRcdFx0cGFyZW50IGluc3RhbmNlb2YgRWxlbWVudCAmJlxuXHRcdFx0KG9sZENoaWxkIGluc3RhbmNlb2YgRWxlbWVudCB8fCBvbGRDaGlsZCBpbnN0YW5jZW9mIFRleHQgfHwgb2xkQ2hpbGQgaW5zdGFuY2VvZiBDb21tZW50KVxuXHRcdCkge1xuXHRcdFx0dGhpcy5kZWxlZ2F0ZS5yZW1vdmVDaGlsZChwYXJlbnQsIG9sZENoaWxkKTtcblx0XHRcdHRoaXMuZGVzdHJveUludGVybmFsKG9sZENoaWxkLCBwYXJlbnQpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmIChjUlNbTmd0UmVuZGVyZXJDbGFzc0lkLnR5cGVdID09PSAnZG9tJyAmJiAoIXBSUyB8fCBwUlNbTmd0UmVuZGVyZXJDbGFzc0lkLnR5cGVdID09PSAnZG9tJykpIHtcblx0XHRcdHRoaXMuZGVsZWdhdGUucmVtb3ZlQ2hpbGQocGFyZW50LCBvbGRDaGlsZCk7XG5cdFx0XHR0aGlzLmRlc3Ryb3lJbnRlcm5hbChvbGRDaGlsZCwgcGFyZW50KTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRpZiAocFJTW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXSA9PT0gJ3RocmVlJyAmJiBjUlNbTmd0UmVuZGVyZXJDbGFzc0lkLnR5cGVdID09PSAndGhyZWUnKSB7XG5cdFx0XHRyZW1vdmVUaHJlZUNoaWxkKG9sZENoaWxkLCBwYXJlbnQsIHRydWUpO1xuXHRcdFx0dGhpcy5kZXN0cm95SW50ZXJuYWwob2xkQ2hpbGQsIHBhcmVudCk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKFxuXHRcdFx0cFJTW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXSA9PT0gJ3BvcnRhbCcgJiZcblx0XHRcdHBSU1tOZ3RSZW5kZXJlckNsYXNzSWQucG9ydGFsQ29udGFpbmVyXT8uX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gPT09ICd0aHJlZSdcblx0XHQpIHtcblx0XHRcdHRoaXMucmVtb3ZlQ2hpbGQocFJTW05ndFJlbmRlcmVyQ2xhc3NJZC5wb3J0YWxDb250YWluZXJdLCBvbGRDaGlsZCwgaXNIb3N0RWxlbWVudCk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKHBSU1tOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gPT09ICd0aHJlZScpIHtcblx0XHRcdHRoaXMuZGVzdHJveUludGVybmFsKG9sZENoaWxkLCBwYXJlbnQpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGNvbnN0IGNsb3Nlc3RHcmFuZHBhcmVudEluc3RhbmNlID0gZ2V0Q2xvc2VzdFBhcmVudFdpdGhJbnN0YW5jZShwYXJlbnQpO1xuXHRcdGlmIChjbG9zZXN0R3JhbmRwYXJlbnRJbnN0YW5jZSkgdGhpcy5yZW1vdmVDaGlsZChjbG9zZXN0R3JhbmRwYXJlbnRJbnN0YW5jZSwgb2xkQ2hpbGQsIGlzSG9zdEVsZW1lbnQpO1xuXHRcdHRoaXMuZGVzdHJveUludGVybmFsKG9sZENoaWxkLCBjbG9zZXN0R3JhbmRwYXJlbnRJbnN0YW5jZSBhcyBOZ3RSZW5kZXJlck5vZGUpO1xuXHR9XG5cblx0cGFyZW50Tm9kZShub2RlOiBOZ3RSZW5kZXJlck5vZGUpIHtcblx0XHRjb25zdCByUyA9IG5vZGUuX19uZ3RfcmVuZGVyZXJfXztcblx0XHRpZiAoclM/LltOZ3RSZW5kZXJlckNsYXNzSWQucGFyZW50XSkgcmV0dXJuIHJTW05ndFJlbmRlcmVyQ2xhc3NJZC5wYXJlbnRdO1xuXHRcdHJldHVybiB0aGlzLmRlbGVnYXRlLnBhcmVudE5vZGUobm9kZSk7XG5cdH1cblxuXHRwcml2YXRlIHNldEF0dHJpYnV0ZUludGVybmFsKFxuXHRcdGVsOiBOZ3RSZW5kZXJlck5vZGUsXG5cdFx0bmFtZTogc3RyaW5nLFxuXHRcdHZhbHVlOiBzdHJpbmcsXG5cdFx0X25hbWVzcGFjZT86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQsXG5cdCk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IHJTID0gZWwuX19uZ3RfcmVuZGVyZXJfXztcblx0XHRpZiAoclNbTmd0UmVuZGVyZXJDbGFzc0lkLmRlc3Ryb3llZF0pIHJldHVybiBmYWxzZTtcblxuXHRcdGlmIChyU1tOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gPT09ICd0aHJlZScpIHtcblx0XHRcdGlmIChuYW1lID09PSBTUEVDSUFMX1BST1BFUlRJRVMuUkVOREVSX1BSSU9SSVRZKSB7XG5cdFx0XHRcdC8vIE5PVEU6IHByaW9yaXR5IG5lZWRzIHRvIGJlIHNldCBhcyBhbiBhdHRyaWJ1dGUgc3RyaW5nIHNvIHRoYXQgdGhleSBjYW4gYmUgc2V0IGFzIGVhcmx5IGFzIHBvc3NpYmxlXG5cdFx0XHRcdC8vIHdlIGNvbnZlcnQgdGhhdCBzdHJpbmcgdG8gYSBudW1iZXIuIGlmIGl0J3MgaW52YWxpZCwgZGVmYXVsdCAwXG5cdFx0XHRcdGxldCBwcmlvcml0eSA9IE51bWJlcih2YWx1ZSk7XG5cdFx0XHRcdGlmIChpc05hTihwcmlvcml0eSkpIHtcblx0XHRcdFx0XHRwcmlvcml0eSA9IDA7XG5cdFx0XHRcdFx0Y29uc29sZS53YXJuKGBbTkdUXSBcInByaW9yaXR5XCIgaXMgYW4gaW52YWxpZCBudW1iZXIsIGRlZmF1bHQgdG8gMGApO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnN0IGxvY2FsU3RhdGUgPSBnZXRMb2NhbFN0YXRlKGVsKTtcblx0XHRcdFx0aWYgKGxvY2FsU3RhdGUpIGxvY2FsU3RhdGUucHJpb3JpdHkgPSBwcmlvcml0eTtcblx0XHRcdH0gZWxzZSBpZiAobmFtZSA9PT0gU1BFQ0lBTF9QUk9QRVJUSUVTLkFUVEFDSCkge1xuXHRcdFx0XHQvLyBOT1RFOiBoYW5kbGUgYXR0YWNoIGFzIHN0cmluZ1xuXHRcdFx0XHRjb25zdCBwYXRocyA9IHZhbHVlLnNwbGl0KCcuJyk7XG5cdFx0XHRcdGlmIChwYXRocy5sZW5ndGgpIHtcblx0XHRcdFx0XHRjb25zdCBsb2NhbFN0YXRlID0gZ2V0TG9jYWxTdGF0ZShlbCk7XG5cdFx0XHRcdFx0aWYgKGxvY2FsU3RhdGUpIGxvY2FsU3RhdGUuYXR0YWNoID0gcGF0aHM7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAobmFtZSA9PT0gU1BFQ0lBTF9QUk9QRVJUSUVTLlJBV19WQUxVRSkge1xuXHRcdFx0XHQvLyBOT1RFOiBjb2VyY2lvblxuXHRcdFx0XHRsZXQgbWF5YmVDb2VyY2VkOiBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuID0gdmFsdWU7XG5cdFx0XHRcdGlmIChtYXliZUNvZXJjZWQgPT09ICcnIHx8IG1heWJlQ29lcmNlZCA9PT0gJ3RydWUnIHx8IG1heWJlQ29lcmNlZCA9PT0gJ2ZhbHNlJykge1xuXHRcdFx0XHRcdG1heWJlQ29lcmNlZCA9IG1heWJlQ29lcmNlZCA9PT0gJ3RydWUnIHx8IG1heWJlQ29lcmNlZCA9PT0gJyc7XG5cdFx0XHRcdH0gZWxzZSBpZiAoIWlzTmFOKE51bWJlcihtYXliZUNvZXJjZWQpKSkge1xuXHRcdFx0XHRcdG1heWJlQ29lcmNlZCA9IE51bWJlcihtYXliZUNvZXJjZWQpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJTW05ndFJlbmRlcmVyQ2xhc3NJZC5yYXdWYWx1ZV0gPSBtYXliZUNvZXJjZWQ7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRhcHBseVByb3BzKGVsLCB7IFtuYW1lXTogdmFsdWUgfSk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdHNldEF0dHJpYnV0ZShlbDogTmd0UmVuZGVyZXJOb2RlLCBuYW1lOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcsIG5hbWVzcGFjZT86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQpOiB2b2lkIHtcblx0XHRjb25zdCB1c2VEZWxlZ2F0ZSA9IHRoaXMuc2V0QXR0cmlidXRlSW50ZXJuYWwoZWwsIG5hbWUsIHZhbHVlLCBuYW1lc3BhY2UpO1xuXG5cdFx0aWYgKHVzZURlbGVnYXRlKSB7XG5cdFx0XHR0aGlzLmRlbGVnYXRlLnNldEF0dHJpYnV0ZShlbCwgbmFtZSwgdmFsdWUpO1xuXHRcdH1cblx0fVxuXG5cdHJlbW92ZUF0dHJpYnV0ZShlbDogTmd0UmVuZGVyZXJOb2RlLCBuYW1lOiBzdHJpbmcsIG5hbWVzcGFjZT86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQpOiB2b2lkIHtcblx0XHRjb25zdCB1c2VEZWxlZ2F0ZSA9IHRoaXMuc2V0QXR0cmlidXRlSW50ZXJuYWwoZWwsIG5hbWUsIHVuZGVmaW5lZCEsIG5hbWVzcGFjZSk7XG5cblx0XHRpZiAodXNlRGVsZWdhdGUpIHtcblx0XHRcdHRoaXMuZGVsZWdhdGUucmVtb3ZlQXR0cmlidXRlKGVsLCBuYW1lLCBuYW1lc3BhY2UpO1xuXHRcdH1cblx0fVxuXG5cdHNldFByb3BlcnR5KGVsOiBOZ3RSZW5kZXJlck5vZGUsIG5hbWU6IHN0cmluZywgdmFsdWU6IGFueSk6IHZvaWQge1xuXHRcdGNvbnN0IHJTID0gZWwuX19uZ3RfcmVuZGVyZXJfXztcblx0XHRpZiAoIXJTIHx8IHJTW05ndFJlbmRlcmVyQ2xhc3NJZC5kZXN0cm95ZWRdKSByZXR1cm47XG5cblx0XHRpZiAoclNbTmd0UmVuZGVyZXJDbGFzc0lkLnR5cGVdID09PSAndGhyZWUnKSB7XG5cdFx0XHRpZiAobmFtZSA9PT0gU1BFQ0lBTF9QUk9QRVJUSUVTLlBBUkFNRVRFUlMpIHtcblx0XHRcdFx0Ly8gTk9URTogc2hvcnQtY3V0IGZvciBudWxsIHJheWNhc3QgdG8gcHJldmVudCB1cHN0cmVhbSBmcm9tIGNyZWF0aW5nIGEgbnVsbFJheWNhc3QgcHJvcGVydHlcblx0XHRcdFx0aWYgKCdyYXljYXN0JyBpbiB2YWx1ZSAmJiB2YWx1ZVsncmF5Y2FzdCddID09PSBudWxsKSB7XG5cdFx0XHRcdFx0dmFsdWVbJ3JheWNhc3QnXSA9ICgpID0+IG51bGw7XG5cdFx0XHRcdH1cblx0XHRcdFx0YXBwbHlQcm9wcyhlbCwgdmFsdWUpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IGxvY2FsU3RhdGUgPSBnZXRMb2NhbFN0YXRlKGVsKTtcblx0XHRcdGNvbnN0IHBhcmVudCA9IGxvY2FsU3RhdGU/Lmluc3RhbmNlU3RvcmUuZ2V0KCdwYXJlbnQnKSB8fCByU1tOZ3RSZW5kZXJlckNsYXNzSWQucGFyZW50XTtcblxuXHRcdFx0Ly8gW3Jhd1ZhbHVlXVxuXHRcdFx0aWYgKGxvY2FsU3RhdGU/LmlzUmF3ICYmIG5hbWUgPT09IFNQRUNJQUxfUFJPUEVSVElFUy5SQVdfVkFMVUUpIHtcblx0XHRcdFx0clNbTmd0UmVuZGVyZXJDbGFzc0lkLnJhd1ZhbHVlXSA9IHZhbHVlO1xuXHRcdFx0XHRpZiAocGFyZW50KSBhdHRhY2hUaHJlZUNoaWxkKHBhcmVudCwgZWwpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdC8vIFthdHRhY2hdXG5cdFx0XHRpZiAobmFtZSA9PT0gU1BFQ0lBTF9QUk9QRVJUSUVTLkFUVEFDSCkge1xuXHRcdFx0XHRpZiAobG9jYWxTdGF0ZSlcblx0XHRcdFx0XHRsb2NhbFN0YXRlLmF0dGFjaCA9IEFycmF5LmlzQXJyYXkodmFsdWUpXG5cdFx0XHRcdFx0XHQ/IHZhbHVlLm1hcCgodikgPT4gdi50b1N0cmluZygpKVxuXHRcdFx0XHRcdFx0OiB0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbidcblx0XHRcdFx0XHRcdFx0PyB2YWx1ZVxuXHRcdFx0XHRcdFx0XHQ6IHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZydcblx0XHRcdFx0XHRcdFx0XHQ/IHZhbHVlLnNwbGl0KCcuJylcblx0XHRcdFx0XHRcdFx0XHQ6IFt2YWx1ZV07XG5cdFx0XHRcdGlmIChwYXJlbnQpIGF0dGFjaFRocmVlQ2hpbGQocGFyZW50LCBlbCk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gTk9URTogc2hvcnQtY3V0IGZvciBudWxsIHJheWNhc3QgdG8gcHJldmVudCB1cHN0cmVhbSBmcm9tIGNyZWF0aW5nIGEgbnVsbFJheWNhc3QgcHJvcGVydHlcblx0XHRcdGlmIChuYW1lID09PSAncmF5Y2FzdCcgJiYgdmFsdWUgPT09IG51bGwpIHtcblx0XHRcdFx0dmFsdWUgPSAoKSA9PiBudWxsO1xuXHRcdFx0fVxuXG5cdFx0XHRhcHBseVByb3BzKGVsLCB7IFtuYW1lXTogdmFsdWUgfSk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMuZGVsZWdhdGUuc2V0UHJvcGVydHkoZWwsIG5hbWUsIHZhbHVlKTtcblx0fVxuXG5cdGxpc3Rlbih0YXJnZXQ6IE5ndFJlbmRlcmVyTm9kZSwgZXZlbnROYW1lOiBzdHJpbmcsIGNhbGxiYWNrOiAoZXZlbnQ6IGFueSkgPT4gYm9vbGVhbiB8IHZvaWQpOiAoKSA9PiB2b2lkIHtcblx0XHRjb25zdCByUyA9IHRhcmdldC5fX25ndF9yZW5kZXJlcl9fO1xuXG5cdFx0Ly8gaWYgdGhlIHRhcmdldCBkb2Vzbid0IGhhdmUgX19uZ3RfcmVuZGVyZXJfXywgd2UgZGVsZWdhdGVcblx0XHQvLyBpZiB0YXJnZXQgaXMgRE9NIG5vZGUsIHdlIGRlbGVnYXRlXG5cdFx0aWYgKCFyUyB8fCBpc0RPTSh0YXJnZXQpKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5kZWxlZ2F0ZS5saXN0ZW4odGFyZ2V0LCBldmVudE5hbWUsIGNhbGxiYWNrKTtcblx0XHR9XG5cblx0XHRpZiAoclNbTmd0UmVuZGVyZXJDbGFzc0lkLnR5cGVdID09PSAndGhyZWUnKSB7XG5cdFx0XHRjb25zdCBpbnN0YW5jZSA9IHRhcmdldDtcblx0XHRcdGNvbnN0IGxvY2FsU3RhdGUgPSBnZXRMb2NhbFN0YXRlKGluc3RhbmNlKTtcblx0XHRcdGNvbnN0IHByaW9yaXR5ID0gbG9jYWxTdGF0ZT8ucHJpb3JpdHkgPz8gMDtcblx0XHRcdHJldHVybiBwcm9jZXNzVGhyZWVFdmVudChpbnN0YW5jZSwgcHJpb3JpdHksIGV2ZW50TmFtZSwgY2FsbGJhY2spO1xuXHRcdH1cblxuXHRcdC8vIEB0cy1leHBlY3QtZXJyb3IgLSB3ZSBrbm93IHRoYXQgdGFyZ2V0IGlzIG5vdCBET00gbm9kZVxuXHRcdGlmICh0YXJnZXQgPT09IHRoaXMucm9vdFN0b3JlLnNuYXBzaG90LnNjZW5lKSB7XG5cdFx0XHRsZXQgW2RvbVRhcmdldCwgZXZlbnRdID0gZXZlbnROYW1lLnNwbGl0KCc6Jyk7XG5cdFx0XHRpZiAoZXZlbnQgPT0gbnVsbCkge1xuXHRcdFx0XHRldmVudCA9IGRvbVRhcmdldDtcblx0XHRcdFx0ZG9tVGFyZ2V0ID0gJyc7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBldmVudFRhcmdldCA9XG5cdFx0XHRcdGRvbVRhcmdldCA9PT0gJ3dpbmRvdydcblx0XHRcdFx0XHQ/ICh0YXJnZXQgYXMgTmd0QW55UmVjb3JkKVsnb3duZXJEb2N1bWVudCddWydkZWZhdWx0VmlldyddXG5cdFx0XHRcdFx0OiAodGFyZ2V0IGFzIE5ndEFueVJlY29yZClbJ293bmVyRG9jdW1lbnQnXTtcblx0XHRcdHJldHVybiB0aGlzLmRlbGVnYXRlLmxpc3RlbihldmVudFRhcmdldCwgZXZlbnQsIGNhbGxiYWNrKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gKCkgPT4ge307XG5cdH1cblxuXHRwcml2YXRlIGRlc3Ryb3lJbnRlcm5hbChub2RlOiBOZ3RSZW5kZXJlck5vZGUsIHBhcmVudD86IE5ndFJlbmRlcmVyTm9kZSkge1xuXHRcdGNvbnN0IHJTID0gbm9kZS5fX25ndF9yZW5kZXJlcl9fO1xuXHRcdGlmICghclMgfHwgclNbTmd0UmVuZGVyZXJDbGFzc0lkLmRlc3Ryb3llZF0pIHJldHVybjtcblx0XHRpZiAoclNbTmd0UmVuZGVyZXJDbGFzc0lkLnR5cGVdID09PSAndGhyZWUnKSB7XG5cdFx0XHRjb25zdCBsb2NhbFN0YXRlID0gZ2V0TG9jYWxTdGF0ZShub2RlKTtcblx0XHRcdGlmIChsb2NhbFN0YXRlPy5pbnN0YW5jZVN0b3JlKSB7XG5cdFx0XHRcdGxvY2FsU3RhdGUuaW5zdGFuY2VTdG9yZS5nZXQoJ29iamVjdHMnKS5mb3JFYWNoKChvYmopID0+IHRoaXMuZGVzdHJveUludGVybmFsKG9iaiwgcGFyZW50KSk7XG5cdFx0XHRcdGxvY2FsU3RhdGUuaW5zdGFuY2VTdG9yZS5nZXQoJ25vbk9iamVjdHMnKS5mb3JFYWNoKChvYmopID0+IHRoaXMuZGVzdHJveUludGVybmFsKG9iaiwgcGFyZW50KSk7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChsb2NhbFN0YXRlPy5vblVwZGF0ZSkgZGVsZXRlIGxvY2FsU3RhdGUub25VcGRhdGU7XG5cdFx0XHRpZiAobG9jYWxTdGF0ZT8ub25BdHRhY2gpIGRlbGV0ZSBsb2NhbFN0YXRlLm9uQXR0YWNoO1xuXG5cdFx0XHRkZWxldGUgKGxvY2FsU3RhdGUgYXMgTmd0QW55UmVjb3JkKVsnb2JqZWN0cyddO1xuXHRcdFx0ZGVsZXRlIChsb2NhbFN0YXRlIGFzIE5ndEFueVJlY29yZClbJ25vbk9iamVjdHMnXTtcblx0XHRcdGRlbGV0ZSAobG9jYWxTdGF0ZSBhcyBOZ3RBbnlSZWNvcmQpWydwYXJlbnQnXTtcblx0XHRcdGRlbGV0ZSAobG9jYWxTdGF0ZSBhcyBOZ3RBbnlSZWNvcmQpWydhZGQnXTtcblx0XHRcdGRlbGV0ZSAobG9jYWxTdGF0ZSBhcyBOZ3RBbnlSZWNvcmQpWydyZW1vdmUnXTtcblx0XHRcdGRlbGV0ZSAobG9jYWxTdGF0ZSBhcyBOZ3RBbnlSZWNvcmQpWydzdG9yZSddO1xuXHRcdFx0ZGVsZXRlIChsb2NhbFN0YXRlIGFzIE5ndEFueVJlY29yZClbJ2hhbmRsZXJzJ107XG5cblx0XHRcdGlmICghbG9jYWxTdGF0ZT8ucHJpbWl0aXZlKSB7XG5cdFx0XHRcdGRlbGV0ZSAobm9kZSBhcyBOZ3RBbnlSZWNvcmQpWydfX25ndF9fJ107XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKHJTW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXSA9PT0gJ2NvbW1lbnQnKSB7XG5cdFx0XHRyU1tOZ3RSZW5kZXJlckNsYXNzSWQuaW5qZWN0b3JGYWN0b3J5XSA9IG51bGwhO1xuXHRcdFx0ZGVsZXRlIChub2RlIGFzIE5ndEFueVJlY29yZClbU1BFQ0lBTF9JTlRFUk5BTF9BRERfQ09NTUVOVF07XG5cdFx0XHR0aGlzLnJlbW92ZUNvbW1lbnROb2RlKG5vZGUsIHRoaXMuYXJnc0NvbW1lbnROb2Rlcyk7XG5cdFx0fVxuXG5cdFx0aWYgKHJTW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXSA9PT0gJ3BvcnRhbCcpIHtcblx0XHRcdHJTW05ndFJlbmRlcmVyQ2xhc3NJZC5pbmplY3RvckZhY3RvcnldID0gbnVsbCE7XG5cdFx0XHR0aGlzLnJlbW92ZUNvbW1lbnROb2RlKG5vZGUsIHRoaXMucG9ydGFsQ29tbWVudHNOb2Rlcyk7XG5cdFx0fVxuXG5cdFx0Ly8gbnVsbGlmeSBwYXJlbnRcblx0XHRyU1tOZ3RSZW5kZXJlckNsYXNzSWQucGFyZW50XSA9IG51bGw7XG5cdFx0Zm9yIChjb25zdCByZW5kZXJDaGlsZCBvZiByU1tOZ3RSZW5kZXJlckNsYXNzSWQuY2hpbGRyZW5dIHx8IFtdKSB7XG5cdFx0XHRpZiAocmVuZGVyQ2hpbGQuX19uZ3RfcmVuZGVyZXJfXz8uW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXSA9PT0gJ3RocmVlJyAmJiBwYXJlbnQpIHtcblx0XHRcdFx0aWYgKHBhcmVudC5fX25ndF9yZW5kZXJlcl9fPy5bTmd0UmVuZGVyZXJDbGFzc0lkLnR5cGVdID09PSAndGhyZWUnKSB7XG5cdFx0XHRcdFx0cmVtb3ZlVGhyZWVDaGlsZChyZW5kZXJDaGlsZCwgcGFyZW50LCB0cnVlKTtcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGNvbnN0IGNsb3Nlc3RJbnN0YW5jZSA9IGdldENsb3Nlc3RQYXJlbnRXaXRoSW5zdGFuY2UocGFyZW50KTtcblx0XHRcdFx0aWYgKGNsb3Nlc3RJbnN0YW5jZSkge1xuXHRcdFx0XHRcdHJlbW92ZVRocmVlQ2hpbGQocmVuZGVyQ2hpbGQsIGNsb3Nlc3RJbnN0YW5jZSwgdHJ1ZSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHRoaXMuZGVzdHJveUludGVybmFsKHJlbmRlckNoaWxkLCBwYXJlbnQpO1xuXHRcdH1cblxuXHRcdHJTW05ndFJlbmRlcmVyQ2xhc3NJZC5jaGlsZHJlbl0gPSBbXTtcblx0XHRyU1tOZ3RSZW5kZXJlckNsYXNzSWQuZGVzdHJveWVkXSA9IHRydWU7XG5cdFx0aWYgKHBhcmVudCkge1xuXHRcdFx0cmVtb3ZlQ2hpbGQocGFyZW50LCBub2RlKTtcblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIHJlbW92ZUNvbW1lbnROb2RlKG5vZGU6IE5ndFJlbmRlcmVyTm9kZSwgbm9kZXM6IE5ndFJlbmRlcmVyTm9kZVtdKSB7XG5cdFx0Y29uc3QgaW5kZXggPSBub2Rlcy5maW5kSW5kZXgoKGNvbW1lbnQpID0+IGNvbW1lbnQgPT09IG5vZGUpO1xuXHRcdGlmIChpbmRleCA+IC0xKSB7XG5cdFx0XHRub2Rlcy5zcGxpY2UoaW5kZXgsIDEpO1xuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgcHJvY2Vzc1BvcnRhbENvbnRhaW5lcihwb3J0YWw6IE5ndFJlbmRlcmVyTm9kZSkge1xuXHRcdGNvbnN0IGluamVjdG9yID0gcG9ydGFsLl9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLmluamVjdG9yRmFjdG9yeV0/LigpO1xuXHRcdGlmICghaW5qZWN0b3IpIHJldHVybjtcblxuXHRcdGNvbnN0IHBvcnRhbFN0b3JlID0gaW5qZWN0b3IuZ2V0KE5HVF9TVE9SRSwgbnVsbCk7XG5cdFx0aWYgKCFwb3J0YWxTdG9yZSkgcmV0dXJuO1xuXG5cdFx0Y29uc3QgcG9ydGFsQ29udGFpbmVyID0gcG9ydGFsU3RvcmUuZ2V0KCdzY2VuZScpO1xuXHRcdGlmICghcG9ydGFsQ29udGFpbmVyKSByZXR1cm47XG5cblx0XHRjb25zdCBsb2NhbFN0YXRlID0gZ2V0TG9jYWxTdGF0ZShwb3J0YWxDb250YWluZXIpO1xuXHRcdGlmIChsb2NhbFN0YXRlKSB7XG5cdFx0XHRsb2NhbFN0YXRlLnN0b3JlID0gcG9ydGFsU3RvcmU7XG5cdFx0fVxuXG5cdFx0cG9ydGFsLl9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLnBvcnRhbENvbnRhaW5lcl0gPSBjcmVhdGVOb2RlKCd0aHJlZScsIHBvcnRhbENvbnRhaW5lciwgdGhpcy5kb2N1bWVudCk7XG5cdH1cblxuXHRwcml2YXRlIHNob3VsZEZpbmRHcmFuZHBhcmVudEluc3RhbmNlKHBSUzogTmd0UmVuZGVyZXJTdGF0ZSwgY1JTOiBOZ3RSZW5kZXJlclN0YXRlLCBjaGlsZDogTmd0UmVuZGVyZXJOb2RlKSB7XG5cdFx0Y29uc3QgcFR5cGUgPSBwUlNbTmd0UmVuZGVyZXJDbGFzc0lkLnR5cGVdO1xuXHRcdGNvbnN0IGNUeXBlID0gY1JTW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXTtcblxuXHRcdGNvbnN0IGNMUyA9IGdldExvY2FsU3RhdGUoY2hpbGQpO1xuXHRcdC8vIGlmIGNoaWxkIGlzIHRocmVlIGJ1dCBoYXZlbid0IGJlZW4gYXR0YWNoZWQgdG8gYSBwYXJlbnQgeWV0XG5cdFx0Y29uc3QgaXNEYW5nbGluZ1RocmVlQ2hpbGQgPSBjVHlwZSA9PT0gJ3RocmVlJyAmJiAhY0xTPy5pbnN0YW5jZVN0b3JlPy5nZXQoJ3BhcmVudCcpO1xuXHRcdC8vIG9yIGJvdGggcGFyZW50IGFuZCBjaGlsZCBhcmUgRE9NIGVsZW1lbnRzXG5cdFx0Ly8gb3IgdGhleSBhcmUgY29tcG91bmQgQU5EIGhhdmVuJ3QgaGFkIGEgVEhSRUUgaW5zdGFuY2UgeWV0XG5cdFx0Y29uc3QgaXNQYXJlbnRTdGlsbERPTSA9IHBUeXBlID09PSAnZG9tJztcblx0XHRjb25zdCBpc0NoaWxkU3RpbGxET00gPSBjVHlwZSA9PT0gJ2RvbSc7XG5cblx0XHRyZXR1cm4gaXNEYW5nbGluZ1RocmVlQ2hpbGQgfHwgKGlzUGFyZW50U3RpbGxET00gJiYgaXNDaGlsZFN0aWxsRE9NKSB8fCBpc1BhcmVudFN0aWxsRE9NO1xuXHR9XG5cblx0cHJpdmF0ZSBnZXROZ3RBcmdzKCkge1xuXHRcdGxldCBkaXJlY3RpdmU6IE5ndEFyZ3MgfCB1bmRlZmluZWQ7XG5cblx0XHRjb25zdCBkZXN0cm95ZWQgPSBbXTtcblxuXHRcdGxldCBpID0gdGhpcy5hcmdzQ29tbWVudE5vZGVzLmxlbmd0aCAtIDE7XG5cdFx0d2hpbGUgKGkgPj0gMCkge1xuXHRcdFx0Y29uc3QgY29tbWVudCA9IHRoaXMuYXJnc0NvbW1lbnROb2Rlc1tpXTtcblx0XHRcdGlmIChjb21tZW50Ll9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLmRlc3Ryb3llZF0pIHtcblx0XHRcdFx0ZGVzdHJveWVkLnB1c2goaSk7XG5cdFx0XHRcdGktLTtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBpbmplY3RvciA9IGNvbW1lbnQuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQuaW5qZWN0b3JGYWN0b3J5XSgpO1xuXHRcdFx0aWYgKCFpbmplY3Rvcikge1xuXHRcdFx0XHRpLS07XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgaW5zdGFuY2UgPSBpbmplY3Rvci5nZXQoTmd0QXJncywgbnVsbCk7XG5cdFx0XHRpZiAoaW5zdGFuY2UgJiYgaW5zdGFuY2UudmFsaWRhdGUoKSkge1xuXHRcdFx0XHRkaXJlY3RpdmUgPSBpbnN0YW5jZTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cblx0XHRcdGktLTtcblx0XHR9XG5cblx0XHRkZXN0cm95ZWQuZm9yRWFjaCgoaW5kZXgpID0+IHtcblx0XHRcdHRoaXMuYXJnc0NvbW1lbnROb2Rlcy5zcGxpY2UoaW5kZXgsIDEpO1xuXHRcdH0pO1xuXG5cdFx0cmV0dXJuIGRpcmVjdGl2ZTtcblx0fVxuXG5cdHByaXZhdGUgdHJ5R2V0UG9ydGFsU3RvcmUoKSB7XG5cdFx0bGV0IHN0b3JlOiBOZ3RTaWduYWxTdG9yZTxOZ3RTdGF0ZT4gfCB1bmRlZmluZWQ7XG5cdFx0Y29uc3QgZGVzdHJveWVkID0gW107XG5cdFx0Ly8gd2Ugb25seSBjYXJlIGFib3V0IHRoZSBwb3J0YWwgc3RhdGVzIGJlY2F1c2UgTmd0U3RvcmUgb25seSBkaWZmZXJzIHBlciBQb3J0YWxcblx0XHRsZXQgaSA9IHRoaXMucG9ydGFsQ29tbWVudHNOb2Rlcy5sZW5ndGggLSAxO1xuXHRcdHdoaWxlIChpID49IDApIHtcblx0XHRcdC8vIGxvb3AgdGhyb3VnaCB0aGUgcG9ydGFsIHN0YXRlIGJhY2t3YXJkcyB0byBmaW5kIHRoZSBjbG9zZXN0IE5ndFN0b3JlXG5cdFx0XHRjb25zdCBwb3J0YWwgPSB0aGlzLnBvcnRhbENvbW1lbnRzTm9kZXNbaV07XG5cdFx0XHRpZiAocG9ydGFsLl9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLmRlc3Ryb3llZF0pIHtcblx0XHRcdFx0ZGVzdHJveWVkLnB1c2goaSk7XG5cdFx0XHRcdGktLTtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IGluamVjdG9yID0gcG9ydGFsLl9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLmluamVjdG9yRmFjdG9yeV0oKTtcblx0XHRcdGlmICghaW5qZWN0b3IpIHtcblx0XHRcdFx0aS0tO1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblx0XHRcdGNvbnN0IGluc3RhbmNlID0gaW5qZWN0b3IuZ2V0KE5HVF9TVE9SRSwgbnVsbCk7XG5cdFx0XHQvLyBvbmx5IHRoZSBpbnN0YW5jZSB3aXRoIHByZXZpb3VzUm9vdCBzaG91bGQgcGFzc1xuXHRcdFx0aWYgKGluc3RhbmNlICYmIGluc3RhbmNlLmdldCgncHJldmlvdXNSb290JykpIHtcblx0XHRcdFx0c3RvcmUgPSBpbnN0YW5jZTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0XHRpLS07XG5cdFx0fVxuXG5cdFx0ZGVzdHJveWVkLmZvckVhY2goKGluZGV4KSA9PiB7XG5cdFx0XHR0aGlzLnBvcnRhbENvbW1lbnRzTm9kZXMuc3BsaWNlKGluZGV4LCAxKTtcblx0XHR9KTtcblxuXHRcdHJldHVybiBzdG9yZSB8fCB0aGlzLnJvb3RTdG9yZTtcblx0fVxuXG5cdGNyZWF0ZVRleHQgPSB0aGlzLmRlbGVnYXRlLmNyZWF0ZVRleHQuYmluZCh0aGlzLmRlbGVnYXRlKTtcblx0ZGVzdHJveSA9IHRoaXMuZGVsZWdhdGUuZGVzdHJveS5iaW5kKHRoaXMuZGVsZWdhdGUpO1xuXHRkZXN0cm95Tm9kZTogKChub2RlOiBhbnkpID0+IHZvaWQpIHwgbnVsbCA9IG51bGw7XG5cdHNlbGVjdFJvb3RFbGVtZW50ID0gdGhpcy5kZWxlZ2F0ZS5zZWxlY3RSb290RWxlbWVudC5iaW5kKHRoaXMuZGVsZWdhdGUpO1xuXHRuZXh0U2libGluZyA9IHRoaXMuZGVsZWdhdGUubmV4dFNpYmxpbmcuYmluZCh0aGlzLmRlbGVnYXRlKTtcblx0YWRkQ2xhc3MgPSB0aGlzLmRlbGVnYXRlLmFkZENsYXNzLmJpbmQodGhpcy5kZWxlZ2F0ZSk7XG5cdHJlbW92ZUNsYXNzID0gdGhpcy5kZWxlZ2F0ZS5yZW1vdmVDbGFzcy5iaW5kKHRoaXMuZGVsZWdhdGUpO1xuXHRzZXRTdHlsZSA9IHRoaXMuZGVsZWdhdGUuc2V0U3R5bGUuYmluZCh0aGlzLmRlbGVnYXRlKTtcblx0cmVtb3ZlU3R5bGUgPSB0aGlzLmRlbGVnYXRlLnJlbW92ZVN0eWxlLmJpbmQodGhpcy5kZWxlZ2F0ZSk7XG5cdHNldFZhbHVlID0gdGhpcy5kZWxlZ2F0ZS5zZXRWYWx1ZS5iaW5kKHRoaXMuZGVsZWdhdGUpO1xuXHRnZXQgZGF0YSgpOiB7IFtrZXk6IHN0cmluZ106IGFueSB9IHtcblx0XHRyZXR1cm4gdGhpcy5kZWxlZ2F0ZS5kYXRhO1xuXHR9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm92aWRlTmd0UmVuZGVyZXIoc3RvcmU6IE5ndFNpZ25hbFN0b3JlPE5ndFN0YXRlPikge1xuXHRjb25zdCBwcm92aWRlcnMgPSBbXG5cdFx0Tmd0UmVuZGVyZXJGYWN0b3J5LFxuXHRcdHsgcHJvdmlkZTogUmVuZGVyZXJGYWN0b3J5MiwgdXNlRXhpc3Rpbmc6IE5ndFJlbmRlcmVyRmFjdG9yeSB9LFxuXHRcdHByb3ZpZGVTdG9yZSgoKSA9PiBzdG9yZSksXG5cdF07XG5cblx0cmV0dXJuIG1ha2VFbnZpcm9ubWVudFByb3ZpZGVycyhwcm92aWRlcnMpO1xufVxuXG5leHBvcnQgeyBleHRlbmQgfSBmcm9tICcuL2NhdGFsb2d1ZSc7XG5leHBvcnQgeyBIVE1MLCBST1VURURfU0NFTkUgfSBmcm9tICcuL2NvbnN0YW50cyc7XG4iXX0=
@@ -1746,9 +1746,13 @@ class NgtRenderer {
1746
1746
  const cRS = oldChild.__ngt_renderer__;
1747
1747
  // if parent is still falsy, we don't know what to do with the parent.
1748
1748
  // we'll just remove the child and destroy it
1749
- if (parent == null && cRS?.[0 /* NgtRendererClassId.type */] !== 'three') {
1750
- removeThreeChild(oldChild, undefined, true);
1751
- this.destroyInternal(oldChild, undefined);
1749
+ if (parent == null) {
1750
+ if (cRS) {
1751
+ if (cRS[0 /* NgtRendererClassId.type */] === 'three') {
1752
+ removeThreeChild(oldChild, undefined, true);
1753
+ }
1754
+ this.destroyInternal(oldChild, undefined);
1755
+ }
1752
1756
  return;
1753
1757
  }
1754
1758
  const pRS = parent.__ngt_renderer__;