@vgroup/dialbox 0.4.163 → 0.4.164

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.
@@ -283,6 +283,23 @@ export class DialboxComponent {
283
283
  if (!!incomingCallData?.length) {
284
284
  // this.incomingCallsList = incomingCallData.participants.filter((item: any) => !item.isLeft) || [];
285
285
  this.incomingCallsList = incomingCallData || [];
286
+ let parentCall = [];
287
+ this.notificationCallList.forEach((call) => {
288
+ incomingCallData.forEach((item) => {
289
+ let info = item.participants.find((resInfo) => resInfo.id === call.participantId);
290
+ // return info?.id
291
+ if (info) {
292
+ parentCall.push(info.id);
293
+ }
294
+ });
295
+ });
296
+ if (parentCall.length > 0) {
297
+ this.notificationCallList = this.notificationCallList.filter((item) => !parentCall.includes(item));
298
+ this.incomingCallsList = [...this.incomingCallsList, this.notificationCallList];
299
+ }
300
+ else {
301
+ this.incomingCallsList = [...this.incomingCallsList, this.notificationCallList];
302
+ }
286
303
  this.isCallInProgress = true;
287
304
  this.isDialpadHidden = false;
288
305
  this.isIncomingCallnotification = false;
@@ -486,11 +503,14 @@ export class DialboxComponent {
486
503
  let incomingCall = {
487
504
  conferenceId: 'no',
488
505
  isActive: true,
506
+ isIncomingCall: true,
507
+ participantId: this.incomingCallnotification.data.data?.participantId,
489
508
  participants: [
490
509
  { direction: "incoming-call", img: 'assets/images/user.jpg', isIncomingCall: true, isHold: false, isConference: false, isAcceptCall: false, dial: true, phone: this.incomingCallnotification.data.data?.fromNumber, participantId: this.incomingCallnotification.data.data?.participantId, name: this.incomingCallnotification.data.data?.fromName, time: '', id: this.incomingCallnotification.data.data?.participantId }
491
510
  ]
492
511
  };
493
512
  this.incomingCallsList.push(incomingCall);
513
+ this.notificationCallList.push(incomingCall);
494
514
  if (this.incomingCallnotification.data.data?.participantId) {
495
515
  this.isCallInProgress = true;
496
516
  }
@@ -1402,4 +1422,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
1402
1422
  }], numberDialed: [{
1403
1423
  type: Output
1404
1424
  }] } });
1405
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhbGJveC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9kaWFsYm94L3NyYy9saWIvZGlhbGJveC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9kaWFsYm94L3NyYy9saWIvZGlhbGJveC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQW9DLFNBQVMsRUFBYyxZQUFZLEVBQWdCLEtBQUssRUFBcUIsTUFBTSxFQUFpQixTQUFTLEVBQXFCLE1BQU0sZUFBZSxDQUFDO0FBRW5NLE9BQU8sSUFBSSxNQUFNLGFBQWEsQ0FBQztBQUkvQixPQUFtQyxFQUFFLFNBQVMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDbkMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQTs7Ozs7Ozs7Ozs7QUFZbkMsTUFBTSxPQUFPLGdCQUFnQjtJQVUzQixJQUFhLGVBQWUsQ0FBQyxLQUFjO1FBQ3pDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxLQUFLLENBQUM7UUFDOUIsSUFBSSxDQUFDLEtBQUssRUFBRTtZQUNWLDZEQUE2RDtZQUM3RCxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztTQUN6QjtJQUNILENBQUM7SUFrRUQsSUFBSSxlQUFlO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDO0lBQy9CLENBQUM7SUE4REQsWUFDVSxhQUE0QixFQUM1QixVQUE0QixFQUM1QixNQUFpQixFQUNqQixTQUEyQixFQUMzQixnQkFBa0MsRUFDbEMsR0FBc0IsRUFDdEIsTUFBYyxFQUNkLDBCQUFzRDtRQVB0RCxrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUM1QixlQUFVLEdBQVYsVUFBVSxDQUFrQjtRQUM1QixXQUFNLEdBQU4sTUFBTSxDQUFXO1FBQ2pCLGNBQVMsR0FBVCxT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RCxnREFBZ0Q7WUFDaEQsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFO2dCQUNyQixZQUFZLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO2FBQ2pDO1lBRUQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxzQ0FBc0MsQ0FBQyxDQUFDO1NBRXJEO1FBQUMsT0FBTyxLQUFLLEVBQUU7WUFDZCxPQUFPLENBQUMsS0FBSyxDQUFDLGlDQUFpQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1NBQ3pEO0lBQ0gsQ0FBQzs7OEdBaDhDVSxnQkFBZ0I7a0dBQWhCLGdCQUFnQiwwc0JDcEI3Qiw2b1pBNE9BOzRGRHhOYSxnQkFBZ0I7a0JBTDVCLFNBQVM7K0JBQ0UsYUFBYTt1VEFRZCxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFHTyxlQUFlO3NCQUEzQixLQUFLO2dCQU9HLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDRyx3QkFBd0I7c0JBQWhDLEtBQUs7Z0JBbUVJLGlCQUFpQjtzQkFBMUIsTUFBTTtnQkFDRyxhQUFhO3NCQUF0QixNQUFNO2dCQUNHLFlBQVk7c0JBQXJCLE1BQU07Z0JBQ0csYUFBYTtzQkFBdEIsTUFBTTtnQkFDRyx5QkFBeUI7c0JBQWxDLE1BQU07Z0JBQ0cscUJBQXFCO3NCQUE5QixNQUFNO2dCQUNpQixnQkFBZ0I7c0JBQXZDLFNBQVM7dUJBQUMsV0FBVztnQkFHWixZQUFZO3NCQUFyQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBIb3N0TGlzdGVuZXIsIElucHV0LCBPbkNoYW5nZXMsIE9uSW5pdCwgT3V0cHV0LCBTaW1wbGVDaGFuZ2VzLCBWaWV3Q2hpbGQsIFZpZXdFbmNhcHN1bGF0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBUd2lsaW9TZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlL3R3aWxpby5zZXJ2aWNlJztcbmltcG9ydCBzd2FsIGZyb20gJ3N3ZWV0YWxlcnQyJztcbmltcG9ydCB7IEV4dGVuc2lvblNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2UvZXh0ZW5zaW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ2FsbGVySWREaWFsb2dDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvY2FsbGVyLWlkLWRpYWxvZy9jYWxsZXItaWQtZGlhbG9nLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBNYXREaWFsb2cgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuaW1wb3J0IHBhcnNlUGhvbmVOdW1iZXJGcm9tU3RyaW5nLCB7IEFzWW91VHlwZSB9IGZyb20gJ2xpYnBob25lbnVtYmVyLWpzJztcbmltcG9ydCB7IGtleXBhZCB9IGZyb20gJy4uL2tleXBhZCc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJ1xuaW1wb3J0IHsgSXBBZGRyZXNzU2VydmljZSB9IGZyb20gJy4vc2VydmljZS9pcC1hZGRyZXNzLnNlcnZpY2UnO1xuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IENhbGwgfSBmcm9tICdAdHdpbGlvL3ZvaWNlLXNkayc7XG5pbXBvcnQgeyBJbmNvbWVpbmdDYWxsU29ja2V0U2VydmljZSB9IGZyb20gJy4vc2VydmljZS9pbmNvbWVpbmctY2FsbC1zb2NrZXQuc2VydmljZSc7XG5cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbGliLWRpYWxib3gnLFxuICB0ZW1wbGF0ZVVybDogJy4vZGlhbGJveC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2RpYWxib3guY29tcG9uZW50LmNzcyddXG59KVxuZXhwb3J0IGNsYXNzIERpYWxib3hDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uQ2hhbmdlcyB7XG4gIFxuICBwcml2YXRlIF9pc0RpYWxwYWRIaWRkZW46IGJvb2xlYW4gPSB0cnVlO1xuICAvLyBMZXQgdGhlIGxpYnJhcnkgZGVjaWRlIHRvIGF1dG8tb3BlbiBvbiBpbmNvbWluZyBjYWxsIHdpdGhvdXQgaG9zdCB3aXJpbmdcbiAgQElucHV0KCkgYXV0b09wZW5PbkluY29taW5nOiBib29sZWFuID0gdHJ1ZTtcbiAgQElucHV0KCkgY29udGFjdEluZm86IGFueTsgIFxuICBASW5wdXQoKSBkZXZpY2VJZDogYW55OyAgXG4gIEBJbnB1dCgpIHVzZXJJZDogYW55OyAgXG4gIGlzSW5jb21pbmdDYWxsbm90aWZpY2F0aW9uOiBhbnkgPSBmYWxzZTtcbiAgXG4gIEBJbnB1dCgpIHNldCBpc0RpYWxwYWRIaWRkZW4odmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9pc0RpYWxwYWRIaWRkZW4gPSB2YWx1ZTtcbiAgICBpZiAoIXZhbHVlKSB7XG4gICAgICAvLyBXaGVuIGRpYWxwYWQgYmVjb21lcyB2aXNpYmxlLCBlbnN1cmUgVHdpbGlvIGlzIGluaXRpYWxpemVkXG4gICAgICB0aGlzLmluaXRpYWxpemVUd2lsaW8oKTtcbiAgICB9XG4gIH1cbiAgQElucHV0KCkgaW5jb21pbmdDYWxsRGF0YTogYW55XG4gIEBJbnB1dCgpIGluY29taW5nQ2FsbG5vdGlmaWNhdGlvbjogYW55O1xuICBjb25mZXJlbmNlQ2FsbEluZm86IGFueSA9IHtcbiAgICAgICAgICAgIFwiY3JlYXRlZEF0XCI6IFwiVHVlIERlYyAzMCAwNzo1Mzo1MSBVVEMgMjAyNVwiLFxuICAgICAgICAgICAgXCJjb25mZXJlbmNlTmFtZVwiOiBcImNvbmZfNjk1Mzg1MGYxNTIyODAwYzRmM2NjNzE1XCIsXG4gICAgICAgICAgICBcImNvbmZlcmVuY2VJZFwiOiBcIjY5NTM4NTBmMTUyMjgwMGM0ZjNjYzcxNVwiLFxuICAgICAgICAgICAgXCJjb25mZXJlbmNlU3RhdHVzXCI6IFwiY29tcGxldGVkXCIsXG4gICAgICAgICAgICBcImlzQWN0aXZlXCI6IGZhbHNlLFxuICAgICAgICAgICAgXCJjb25mZXJlbmNlU2lkXCI6IFwiQ0ZhMzhlYWIxMzg2M2E2YWY5ODI3YjM0ODEyMGUzNjliOFwiLFxuICAgICAgICAgICAgXCJwYXJ0aWNpcGFudHNcIjogW1xuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgXCJjYWxsRHVyYXRpb25cIjogODgsXG4gICAgICAgICAgICAgICAgICAgIFwiY2FsbFNpZFwiOiBcIkNBNDhhYmJhNTFkYTQ3YzMyNzQ5YmE1NjhkN2Y0ZWNjY2FcIixcbiAgICAgICAgICAgICAgICAgICAgXCJyb2xlXCI6IFwiY2FsbGVlXCIsXG4gICAgICAgICAgICAgICAgICAgIFwiam9pbmVkQXRcIjogXCJUdWUgRGVjIDMwIDA3OjUzOjU0IFVUQyAyMDI1XCIsXG4gICAgICAgICAgICAgICAgICAgIFwiaXNIb2xkXCI6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBcImlzQ29uZmVyZW5jZVwiOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBcInVzZXJJZFwiOiBcIjY5MzkyYzY3MDY2NWI5NThkYjg3Njg4OFwiLFxuICAgICAgICAgICAgICAgICAgICBcImZvcndhcmRlZFRvXCI6IFwiXCIsXG4gICAgICAgICAgICAgICAgICAgIFwibGVmdEF0XCI6IFwiVHVlIERlYyAzMCAwNzo1NToyNSBVVEMgMjAyNVwiLFxuICAgICAgICAgICAgICAgICAgICBcImR1cmF0aW9uXCI6IDIsXG4gICAgICAgICAgICAgICAgICAgIFwiaXNMZWZ0XCI6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIFwiY29uZmVyZW5jZUlkXCI6IFwiNjk1Mzg1MGYxNTIyODAwYzRmM2NjNzE1XCIsXG4gICAgICAgICAgICAgICAgICAgIFwiZnJvbVwiOiBcIisxMjI1MjUxOTg4NlwiLFxuICAgICAgICAgICAgICAgICAgICBcInRvXCI6IFwiKzkxNjM1MzY0NTg0NFwiLFxuICAgICAgICAgICAgICAgICAgICBcInN0YXR1c1wiOiBcImNvbXBsZXRlZFwiLFxuICAgICAgICAgICAgICAgICAgICBcImRpcmVjdGlvblwiOiBcIm91dGdvaW5nLWNhbGxcIlxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBcImNhbGxEdXJhdGlvblwiOiA2NSxcbiAgICAgICAgICAgICAgICAgICAgXCJjYWxsU2lkXCI6IFwiQ0FjYmMyODZhOWU2NTU5ZjFhM2YxYjUxZjQ4Y2UzZjczYlwiLFxuICAgICAgICAgICAgICAgICAgICBcInJvbGVcIjogXCJjYWxsZWVcIixcbiAgICAgICAgICAgICAgICAgICAgXCJqb2luZWRBdFwiOiBcIlR1ZSBEZWMgMzAgMDc6NTQ6MTQgVVRDIDIwMjVcIixcbiAgICAgICAgICAgICAgICAgICAgXCJpc0hvbGRcIjogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIFwiaXNDb25mZXJlbmNlXCI6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIFwidXNlcklkXCI6IFwiNjkzOTJjNjcwNjY1Yjk1OGRiODc2ODg4XCIsXG4gICAgICAgICAgICAgICAgICAgIFwiZm9yd2FyZGVkVG9cIjogXCJcIixcbiAgICAgICAgICAgICAgICAgICAgXCJsZWZ0QXRcIjogXCJUdWUgRGVjIDMwIDA3OjU1OjI1IFVUQyAyMDI1XCIsXG4gICAgICAgICAgICAgICAgICAgIFwiZHVyYXRpb25cIjogMixcbiAgICAgICAgICAgICAgICAgICAgXCJpc0xlZnRcIjogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgXCJjb25mZXJlbmNlSWRcIjogXCI2OTUzODUwZjE1MjI4MDBjNGYzY2M3MTVcIixcbiAgICAgICAgICAgICAgICAgICAgXCJ0b05hbWVcIjogXCJUZXN0ICBcIixcbiAgICAgICAgICAgICAgICAgICAgXCJmcm9tTmFtZVwiOiBcIlRlc3QgIFwiLFxuICAgICAgICAgICAgICAgICAgICBcImZyb21cIjogXCIrMTIyNTI1MTk4ODZcIixcbiAgICAgICAgICAgICAgICAgICAgXCJ0b1wiOiBcIis5MTYzNTQ1NjQ3MzNcIixcbiAgICAgICAgICAgICAgICAgICAgXCJzdGF0dXNcIjogXCJjb21wbGV0ZWRcIixcbiAgICAgICAgICAgICAgICAgICAgXCJkaXJlY3Rpb25cIjogXCJvdXRnb2luZy1jYWxsXCJcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgXCJjYWxsRHVyYXRpb25cIjogMjUsXG4gICAgICAgICAgICAgICAgICAgIFwiY2FsbFNpZFwiOiBcIkNBMmZiNmI4OTNjZjQwNmMwMzMzMTFlM2IxMWQ2ZTc2MGZcIixcbiAgICAgICAgICAgICAgICAgICAgXCJqb2luZWRBdFwiOiBcIlR1ZSBEZWMgMzAgMDc6NTU6MDYgVVRDIDIwMjVcIixcbiAgICAgICAgICAgICAgICAgICAgXCJpc0hvbGRcIjogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIFwiaXNDb25mZXJlbmNlXCI6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIFwiZm9yd2FyZGVkVG9cIjogXCJcIixcbiAgICAgICAgICAgICAgICAgICAgXCJkdXJhdGlvblwiOiAxLFxuICAgICAgICAgICAgICAgICAgICBcImlzTGVmdFwiOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBcImNvbmZlcmVuY2VJZFwiOiBcIjY5NTM4NTBmMTUyMjgwMGM0ZjNjYzcxNVwiLFxuICAgICAgICAgICAgICAgICAgICBcImZyb21cIjogXCIrMTYwOTgwNjUwODhcIixcbiAgICAgICAgICAgICAgICAgICAgXCJ0b1wiOiBcIisxMjI1MjMwMjQ3MFwiLFxuICAgICAgICAgICAgICAgICAgICBcInN0YXR1c1wiOiBcIm5vLWFuc3dlclwiLFxuICAgICAgICAgICAgICAgICAgICBcImRpcmVjdGlvblwiOiBcImluY29taW5nLWNhbGxcIlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF1cbiAgICAgICAgfTtcbiAgZ2V0IGlzRGlhbHBhZEhpZGRlbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5faXNEaWFscGFkSGlkZGVuO1xuICB9XG4gIEBPdXRwdXQoKSBjbG9zZURpYWxwYWRFdmVudDogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBAT3V0cHV0KCkgY2FsbEluaXRpYXRlZDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIGVuZENhbGxFdmVudDogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBAT3V0cHV0KCkgbWluaW1pc2VFdmVudDogRXZlbnRFbWl0dGVyPGJvb2xlYW4+ID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuICBAT3V0cHV0KCkgaW5jb21pbmdDYWxsc05ld0luZm9FdmVudDogRXZlbnRFbWl0dGVyPGFueVtdPiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55W10+KCk7XG4gIEBPdXRwdXQoKSBpbmNvbWluZ0NhbGxJbml0aWF0ZWQ6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgQFZpZXdDaGlsZCgnZGlhbElucHV0JykgZGlhbElucHV0RWxlbWVudCE6IEVsZW1lbnRSZWY7XG5cbiAgXG4gIEBPdXRwdXQoKSBudW1iZXJEaWFsZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcblxuXG4gIGlzQ2FsbEluUHJvZ3Jlc3M6IGJvb2xlYW4gPSBmYWxzZTtcbiAga2V5cGFkVmFsID0ga2V5cGFkO1xuICBcbiAgc2hvd0lucHV0Q2xlYXJCdG46IGJvb2xlYW4gPSBmYWxzZTtcbiAgZGlhbGVkTnVtYmVyOiBzdHJpbmcgPSAnJztcbiAgY29udGFjdExpc3Q6IGFueVtdID0gW107XG4gIGZpbHRlcmVkQ29udGFjdExpc3Q6IGFueVtdID0gW107XG4gIGNhbGxlcklkTGlzdDogYW55W10gPSBbXTtcbiAgc2VsZWN0ZWRDYWxsZXJJZDogYW55O1xuICBpc0NhbGxlcklkSGlkZGVuOiBib29sZWFuID0gdHJ1ZTtcblxuICBpc1RyaWFsUGVyaW9kT3ZlcjogYm9vbGVhbiA9IGZhbHNlO1xuICBpc1BheW1lbnREdWU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgdGVybWluYXRlQ2FsbCA9IGZhbHNlO1xuICB0b2FzdFRpbWVvdXQgPSA3MDAwO1xuICBjYWxsTnVtYmVyVG9hc3QgPSB7XG4gICAgc2hvdzogZmFsc2UsXG4gICAgdHlwZTogJ2FsZXJ0LXN1Y2Nlc3MnLFxuICAgIG51bWJlcjogJycsXG4gICAgZGlzcGxheU51bTogJydcbiAgfVxuICBjYWxsRGF0YTogYW55ID0ge1xuICAgIHBob25lOiAnJyxcbiAgICBkaXNwbGF5TnVtOiAnJyxcbiAgICBkaWFsOiBmYWxzZSxcbiAgICBuYW1lOiAnJyxcbiAgICBpbWc6ICdhc3NldHMvaW1hZ2VzL3VzZXIuanBnJyxcbiAgICBpc0luY29taW5nQ2FsbDogZmFsc2UsXG4gICAgZXh0TnVtOicnXG4gIH07XG4gIGxhc3REaWFsZWQ6IHsgbmFtZT86IHN0cmluZzsgaW1hZ2U/OiBzdHJpbmc7IG51bWJlcjogc3RyaW5nIH0gfCBudWxsID0gbnVsbDtcbiAgc2FuaXRpemVkTnVtOiBhbnk7XG4gIGRpYWxBbGVydCA9IHtcbiAgICBtc2c6ICcnLFxuICAgIHNob3c6IGZhbHNlXG4gIH1cbiAgdG9rZW4/OnN0cmluZztcbiBcbiAgc2hvd0RlZGljYXRlZFBvcHVwOmJvb2xlYW4gPSBmYWxzZTtcbiAgbmV3SW5jb21pbmdDYWxsczogYW55ID0gW107XG4gIGluY29taW5nQ2FsbHNMaXN0OiBhbnkgPSBbXTtcbiAgbmV3SW5jb21pbmdDYWxsRGF0YT86Q2FsbDtcbiAgcHJpdmF0ZSBzdWJzY3JpcHRpb25zOiBTdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG4gIGNhbGxQcmVmZXJlbmNlOiBhbnk7XG4gIHNoYWtlRGVkaWNhdGVkQnRuOiBib29sZWFuID0gZmFsc2U7XG4gIGlzU21hcnREaWFsQ2FsbDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIHByaXZhdGUgaXNJbml0aWFsaXplZCA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKCAgXG4gICAgcHJpdmF0ZSB0d2lsaW9TZXJ2aWNlOiBUd2lsaW9TZXJ2aWNlLFxuICAgIHByaXZhdGUgZXh0U2VydmljZTogRXh0ZW5zaW9uU2VydmljZSxcbiAgICBwcml2YXRlIGRpYWxvZzogTWF0RGlhbG9nLFxuICAgIHByaXZhdGUgaXBTZXJ2aWNlOiBJcEFkZHJlc3NTZXJ2aWNlLFxuICAgIHByaXZhdGUgZXh0ZW5zaW9uU2VydmljZTogRXh0ZW5zaW9uU2VydmljZSxcbiAgICBwcml2YXRlIGNkazogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcbiAgICBwcml2YXRlIGluY29tZWluZ0NhbGxTb2NrZXRTZXJ2aWNlOiBJbmNvbWVpbmdDYWxsU29ja2V0U2VydmljZSxcbiAgKSB7IFxuICAgIC8vIEluaXRpYWxpemUgaWYgZGlhbHBhZCBpcyB2aXNpYmxlIGJ5IGRlZmF1bHRcbiAgICBpZiAoIXRoaXMuaXNEaWFscGFkSGlkZGVuKSB7XG4gICAgICBjb25zb2xlLmxvZygnc2ZzZGZkc2YnKVxuICAgICAgdGhpcy5pbml0aWFsaXplVHdpbGlvKCk7XG4gICAgfVxuICAgIHRoaXMuaW5jb21laW5nQ2FsbFNvY2tldFNlcnZpY2UuY3JlYXRlQXVkaW9CYXNlKCk7XG4gICAgY29uc29sZS5sb2coJ0RpYWxib3hDb21wb25lbnQgY29uc3RydWN0b3InKTtcbiAgfVxuICBwcml2YXRlIGluaXRpYWxpemVUd2lsaW8oKSB7XG4gICAgaWYgKCF0aGlzLmlzSW5pdGlhbGl6ZWQpIHtcbiAgICAgIHRoaXMudG9rZW4gPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnZXh0X3Rva2VuJykgfHwgJyc7XG4gICAgICBpZiAoIXRoaXMudG9rZW4pIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignTm8gYXV0aGVudGljYXRpb24gdG9rZW4gZm91bmQnKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgXG4gICAgICB0aGlzLmlzSW5pdGlhbGl6ZWQgPSB0cnVlO1xuICAgICAgXG4gICAgICAvLyBJbml0aWFsaXplIFR3aWxpbyBzZXJ2aWNlXG4gICAgICB0aGlzLnR3aWxpb1NlcnZpY2UuaW5pdGlhbGl6ZVR3aWxpb0RldmljZSh0aGlzLmRldmljZUlkKTtcbiAgICB9XG4gIH1cbiAgLy8gbmdPbkNoYW5nZSgpIHtcbiAgLy8gICB0aGlzLmluaXRpYWxpemVUd2lsaW8oKTtcbiAgLy8gfVxuXG4gIC8vIG5nT25Jbml0KCkge1xuICAvLyAgIHRyeSB7XG4gIC8vICAgICB0aGlzLmdldENvbnRhY3RMaXN0KCk7XG4gIC8vICAgICB0aGlzLmdldFVzZXJDYWxsU2V0dGluZygpO1xuICAgICAgXG4gIC8vICAgICAvLyBTdWJzY3JpYmUgdG8gZGlhbCBudW1iZXIgZXZlbnRzXG4gIC8vICAgICBjb25zdCBzdWIxID0gdGhpcy50d2lsaW9TZXJ2aWNlLmRpYWxOdW1iZXJGcm9tT3RoZXJNb2R1bGUuc3Vic2NyaWJlKChjb250YWN0OiBhbnkpID0+IHtcbiAgLy8gICAgICAgaWYgKGNvbnRhY3QubnVtYmVyKSB7XG4gIC8vICAgICAgICAgdGhpcy5pc1NtYXJ0RGlhbENhbGwgPSBmYWxzZTtcbiAgLy8gICAgICAgICBpZiAoY29udGFjdC5pc0RpYWxGcm9tSGlzdG9yeSkge1xuICAvLyAgICAgICAgICAgLy9oYW5kbGUgZGlhbGluZyBmcm9tIGhpc3RvcnkgcGFnZVxuICAvLyAgICAgICAgICAgaWYoY29udGFjdC5jYWxsZXJJZCA9PSAnc21hcnREaWFsaW5nJyl7XG4gICAgICAgICAgICAgXG4gIC8vICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDYWxsZXJJZCA9IHsgbnVtYmVyOiBjb250YWN0LmZyb20gfTtcbiAgLy8gICAgICAgICAgICAgdGhpcy5pc1NtYXJ0RGlhbENhbGwgPSB0cnVlO1xuICAvLyAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgLy8gICAgICAgICAgICAgICB0aGlzLmlzRGlhbHBhZEhpZGRlbiA9IGZhbHNlO1xuICAvLyAgICAgICAgICAgICB9LCAyMDAwKTtcbiAgLy8gICAgICAgICAgICAgdGhpcy5jYWxsRGF0YS5waG9uZSA9IGNvbnRhY3QubnVtYmVyO1xuICAvLyAgICAgICAgICAgICB0aGlzLmNhbGxEYXRhLm5hbWUgPSBjb250YWN0Lm5hbWU7XG4gIC8vICAgICAgICAgICAgIHRoaXMuY2FsbERhdGEuaW1nID0gY29udGFjdC5pbWc7XG4gIC8vICAgICAgICAgICAgIHRoaXMuY2FsbERhdGEuZnJvbSA9IGNvbnRhY3QuZnJvbTtcbiAgLy8gICAgICAgICAgICAgdGhpcy5zYW5pdGl6ZWROdW0gPSBjb250YWN0Lm51bWJlcjtcbiAgLy8gICAgICAgICAgICAgdGhpcy5nZXRVc2VySW5mb3JtYXRpb24oY29udGFjdCk7XG4gIC8vICAgICAgICAgICAvLyB0aGlzLmluY29taW5nQ2FsbHNMaXN0LnB1c2goY29udGFjdClcbiAgLy8gICAgICAgICAgIHRoaXMuaW5pdGlhdGVDYWxsKCk7XG4gIC8vICAgICAgICAgfWVsc2V7XG4gIC8vICAgICAgICAgICB0aGlzLmdldFVzZXJDYWxsU2V0dGluZygpO1xuICAvLyAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gIC8vICAgICAgICAgICAgIHRoaXMuaXNEaWFscGFkSGlkZGVuID0gZmFsc2U7XG4gIC8vICAgICAgICAgICB9LCAxMDAwKTtcbiAgLy8gICAgICAgICAgIHRoaXMuZ2V0VXNlckluZm9ybWF0aW9uKGNvbnRhY3QpO1xuICAvLyAgICAgICAgICAgLy8gdGhpcy5pbmNvbWluZ0NhbGxzTGlzdC5wdXNoKGNvbnRhY3QpXG4gIC8vICAgICAgICAgICAgIHRoaXMuZGlhbGVkTnVtYmVyID0gY29udGFjdC5udW1iZXI7XG4gIC8vICAgICAgICAgICAgIHRoaXMuc2FuaXRpemVkTnVtID0gY29udGFjdC5udW1iZXI7XG4gIC8vICAgICAgICAgICB9XG4gIC8vICAgICAgICAgfSBlbHNlIHtcbiAgLy8gICAgICAgICAgIGlmIChjb250YWN0LmNhbGxlcklkID09ICdhbHdheXNBc2snIHx8IGNvbnRhY3QuY2FsbGVySWQgPT0gJ3NtYXJ0RGlhbGluZycpIHtcbiAgLy8gICAgICAgICAgICAgdGhpcy5nZXRVc2VyQ2FsbFNldHRpbmcoKTtcbiAgLy8gICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gIC8vICAgICAgICAgICAgICAgdGhpcy5pc0RpYWxwYWRIaWRkZW4gPSBmYWxzZTtcbiAgLy8gICAgICAgICAgICAgfSwgMTAwMCk7XG4gIC8vICAgICAgICAgICAgIHRoaXMuZGlhbGVkTnVtYmVyID0gY29udGFjdC5udW1iZXI7XG4gIC8vICAgICAgICAgICAgIHRoaXMuc2FuaXRpemVkTnVtID0gY29udGFjdC5udW1iZXI7XG4gICAgICAgICAgICAgIFxuICAvLyAgICAgICAgICAgfSBlbHNlIHtcbiAgLy8gICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gIC8vICAgICAgICAgICAgICAgdGhpcy5pc0RpYWxwYWRIaWRkZW4gPSBmYWxzZTtcbiAgLy8gICAgICAgICAgICAgfSwgMjAwMCk7XG4gIC8vICAgICAgICAgICAgIHRoaXMuY2FsbERhdGEucGhvbmUgPSBjb250YWN0Lm51bWJlcjtcbiAgLy8gICAgICAgICAgICAgdGhpcy5jYWxsRGF0YS5uYW1lID0gY29udGFjdC5uYW1lO1xuICAvLyAgICAgICAgICAgICB0aGlzLmNhbGxEYXRhLmltZyA9IGNvbnRhY3QuaW1nO1xuICAvLyAgICAgICAgICAgICB0aGlzLnNhbml0aXplZE51bSA9IGNvbnRhY3QubnVtYmVyO1xuICAvLyAgICAgICAgICAgICB0aGlzLmluaXRpYXRlQ2FsbCgpO1xuICAvLyAgICAgICAgICAgfVxuICAvLyAgICAgICAgIH1cbiAgICAgICAgICBcbiAgLy8gICAgICAgfVxuICAvLyAgICAgfSlcbiAgXG4gIC8vICAgICAvLyBoYW5kbGUgaW5jb21pbmcgY2FsbFxuICAvLyAgICAgY29uc3Qgc3ViMiA9IHRoaXMudHdpbGlvU2VydmljZS5jdXJyZW50Q2FsbC5zdWJzY3JpYmUoaW5jb21pbmdDYWxsRGF0YSA9PiB7XG4gIC8vICAgICAgIC8vIGlmIChpbmNvbWluZ0NhbGxEYXRhKSB7XG4gIC8vICAgICAgIC8vICAgdGhpcy5pc0NhbGxJblByb2dyZXNzID0gdHJ1ZTtcbiAgLy8gICAgICAgLy8gICB0aGlzLmlzRGlhbHBhZEhpZGRlbiA9IGZhbHNlO1xuICAvLyAgICAgICAvLyAgIHRoaXMuY2FsbERhdGEucGhvbmUgPSBpbmNvbWluZ0NhbGxEYXRhLnBhcmFtZXRlcnMuRnJvbTtcbiAgLy8gICAgICAgLy8gICB0aGlzLmNhbGxEYXRhLm5hbWUgPSBpbmNvbWluZ0NhbGxEYXRhLmN1c3RvbVBhcmFtZXRlcnMuZ2V0KCduYW1lJyk7XG4gIC8vICAgICAgIC8vICAgdGhpcy5jYWxsRGF0YS5pbWcgPSBpbmNvbWluZ0NhbGxEYXRhLmN1c3RvbVBhcmFtZXRlcnMuZ2V0KCdpbWFnZScpO1xuICAvLyAgICAgICAvLyAgIHRoaXMuY2FsbERhdGEuaXNJbmNvbWluZ0NhbGwgPSB0cnVlO1xuICAvLyAgICAgICAvLyB9XG4gIC8vICAgICAgIGlmIChpbmNvbWluZ0NhbGxEYXRhKSB7XG4gIC8vICAgICAgICAgaWYgKHRoaXMuaXNDYWxsSW5Qcm9ncmVzcykge1xuICAvLyAgICAgICAgICAgdGhpcy5uZXdJbmNvbWluZ0NhbGxzLnB1c2goaW5jb21pbmdDYWxsRGF0YSk7XG4gIC8vICAgICAgICAgICB0aGlzLmdldFVzZXJJbmZvcm1hdGlvbihpbmNvbWluZ0NhbGxEYXRhKTtcbiAgLy8gICAgICAgICB9IGVsc2Uge1xuICAvLyAgICAgICAgICAgdGhpcy5pc0NhbGxJblByb2dyZXNzID0gdHJ1ZTtcbiAgLy8gICAgICAgICAgIHRoaXMuaXNEaWFscGFkSGlkZGVuID0gZmFsc2U7XG4gIC8vICAgICAgICAgICB0aGlzLmNhbGxEYXRhLnBob25lID0gaW5jb21pbmdDYWxsRGF0YS5wYXJhbWV0ZXJzWydGcm9tJ107XG5cbiAgLy8gICAgICAgICAgIHRoaXMuZ2V0VXNlckluZm9ybWF0aW9uKGluY29taW5nQ2FsbERhdGEpO1xuICAvLyAgICAgICAgICAgdGhpcy5jYWxsRGF0YS5uYW1lID0gaW5jb21pbmdDYWxsRGF0YS5jdXN0b21QYXJhbWV0ZXJzLmdldCgnbmFtZScpO1xuICAvLyAgICAgICAgICAgdGhpcy5jYWxsRGF0YS5pbWcgPSBpbmNvbWluZ0NhbGxEYXRhLmN1c3RvbVBhcmFtZXRlcnMuZ2V0KCdpbWFnZScpIHx8ICdhc3NldHMvaW1hZ2VzL3VzZXIuanBnJztcbiAgLy8gICAgICAgICAgIHRoaXMuY2FsbERhdGEuaXNJbmNvbWluZ0NhbGwgPSB0cnVlO1xuICAvLyAgICAgICAgIH1cbiAgLy8gICAgICAgICBpbmNvbWluZ0NhbGxEYXRhLm9uKCdjYW5jZWwnLCAoKSA9PiB7XG4gIC8vICAgICAgICAgICB0aGlzLmluY29taW5nQ2FsbHNMaXN0ID0gdGhpcy5pbmNvbWluZ0NhbGxzTGlzdC5maWx0ZXIoKGl0ZW06IGFueSkgPT4gaXRlbS5wYXJhbWV0ZXJzLkNhbGxTaWQgIT09IGluY29taW5nQ2FsbERhdGEucGFyYW1ldGVyc1snQ2FsbFNpZCddKTtcbiAgLy8gICAgICAgICAgIGlmKHRoaXMuaW5jb21pbmdDYWxsc0xpc3QubGVuZ3RoID09IDApe1xuICAvLyAgICAgICAgICAgICB0aGlzLmlzQ2FsbEluUHJvZ3Jlc3MgPSBmYWxzZTtcbiAgLy8gICAgICAgICAgIH1cbiAgLy8gICAgICAgICB9KTtcblxuICAvLyAgICAgICAgIGluY29taW5nQ2FsbERhdGEub24oJ2Rpc2Nvbm5lY3QnLCAoKSA9PiB7XG4gIC8vICAgICAgICAgICAgIHRoaXMuaW5jb21pbmdDYWxsc0xpc3QgPSB0aGlzLmluY29taW5nQ2FsbHNMaXN0LmZpbHRlcigoaXRlbTogYW55KSA9PiBpdGVtLnBhcmFtZXRlcnMuQ2FsbFNpZCAhPT0gaW5jb21pbmdDYWxsRGF0YS5wYXJhbWV0ZXJzWydDYWxsU2lkJ10pO1xuICAvLyAgICAgICAgICAgICBpZih0aGlzLmluY29taW5nQ2FsbHNMaXN0Lmxlbmd0aCA9PSAwKXtcbiAgLy8gICAgICAgICAgICAgICB0aGlzLmlzQ2FsbEluUHJvZ3Jlc3MgPSBmYWxzZTtcbiAgLy8gICAgICAgICAgICAgfVxuICAvLyAgICAgICAgIH0pO1xuICAvLyAgICAgICB9XG4gIC8vICAgICB9KTtcblxuICAvLyAgICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZChzdWIxKTtcbiAgLy8gICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQoc3ViMik7XG4gIC8vICAgfWNhdGNoKGUpe1xuICAvLyAgICAgY29uc29sZS5sb2coZSlcbiAgLy8gICB9XG4gICAgXG4gIC8vIH1cblxuXG5cbiAgbmdPbkluaXQoKSB7XG4gICAgY29uc29sZS5sb2coJ25nT25Jbml0JylcbiAgICAvLyBFbnN1cmUgVHdpbGlvIGlzIGluaXRpYWxpemVkIGV2ZW4gd2hlbiBkaWFscGFkIHN0YXJ0cyBoaWRkZW4sXG4gICAgLy8gc28gd2UgY2FuIGF1dG8tb3BlbiBvbiBpbmNvbWluZyBjYWxscy5cbiAgICB0aGlzLmluaXRpYWxpemVUd2lsaW8oKTtcbiAgICB0aGlzLmluY29tZWluZ0NhbGxTb2NrZXRTZXJ2aWNlLmNvbm5lY3QodGhpcy5kZXZpY2VJZCk7XG4gICAgdHJ5e1xuICAgICAgICAgIHRoaXMuaW5jb21laW5nQ2FsbFNvY2tldFNlcnZpY2UubGlzdGVuKCkuc3Vic2NyaWJlKGFzeW5jKGluY29taW5nQ2FsbERhdGE6IGFueSkgPT4ge1xuICAgICAgICAgIC8vIGNvbnN0IGRhdGEgPSBKU09OLnBhcnNlKGluY29taW5nQ2FsbERhdGEuZGF0YSk7XG4gICAgICAgICAgLy8gY29uc29sZS5sb2coXCJXUyBFdmVudCBSZWNlaXZlZDpcIiwgaW5jb21pbmdDYWxsRGF0YSk7XG4gICAgICAgICAgLy8gY29uc29sZS5sb2coXCJXUyBFdmVudCBSZWNlaXZlZDpcIiwgaW5jb21pbmdDYWxsRGF0YS5kYXRhKTtcbiAgICAgICAgICB0aGlzLnR3aWxpb1NlcnZpY2UuY29uZmVyZW5jZUNhbGxJbmZvID0gaW5jb21pbmdDYWxsRGF0YTtcbiAgICAgICAgICBpZighIWluY29taW5nQ2FsbERhdGE/Lmxlbmd0aCl7XG4gICAgICAgICAgICAvLyB0aGlzLmluY29taW5nQ2FsbHNMaXN0ID0gaW5jb21pbmdDYWxsRGF0YS5wYXJ0aWNpcGFudHMuZmlsdGVyKChpdGVtOiBhbnkpID0+ICFpdGVtLmlzTGVmdCkgfHwgW107XG4gICAgICAgICAgICB0aGlzLmluY29taW5nQ2FsbHNMaXN0ID0gaW5jb21pbmdDYWxsRGF0YSB8fCBbXTtcbiAgICAgICAgICAgICAgICB0aGlzLmlzQ2FsbEluUHJvZ3Jlc3MgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMuaXNEaWFscGFkSGlkZGVuID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5pc0luY29taW5nQ2FsbG5vdGlmaWNhdGlvbiA9IGZhbHNlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgaWYoIXRoaXMuaXNJbmNvbWluZ0NhbGxub3RpZmljYXRpb24pe1xuICAgICAgICAgICAgICAgIHRoaXMuY2FsbERhdGEgPSBbXTtcbiAgICAgICAgICAgICAgICB0aGlzLmluY29taW5nQ2FsbHNMaXN0ID0gW107XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgLy8gdGhpcy5pc0NhbGxJblByb2dyZXNzID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgLy8gaW5jb21pbmdDYWxsRGF0YS5wYXJ0aWNpcGFudHMubGVuZ3RoID8gaW5jb21pbmdDYWxsRGF0YS5wYXJ0aWNpcGFudHMuZmlsdGVyKChpdGVtOiBhbnkpID0+ICFpdGVtLmlzTGVmdCkgOiBbXTtcbiAgICAgIC8vICB0aGlzLmluaXRpYWxpemVUd2lsaW8oKTtcbiAgICAgIC8vIGlmIChpbmNvbWluZ0NhbGxEYXRhLnR5cGUgPT09IFwiL2luY29taW5nL2NhbGxcIikge1xuICAgICAgLy8gICBpZiAoaW5jb21pbmdDYWxsRGF0YSkge1xuICAgICAgLy8gICAgIGlmICh0aGlzLmF1dG9PcGVuT25JbmNvbWluZyAmJiB0aGlzLl9pc0RpYWxwYWRIaWRkZW4pIHtcbiAgICAgIC8vICAgICAgIHRoaXMuX2lzRGlhbHBhZEhpZGRlbiA9IGZhbHNlO1xuICAgICAgLy8gICAgIH1cblxuICAgICAgLy8gICAgIGlmICh0aGlzLmlzQ2FsbEluUHJvZ3Jlc3MpIHtcbiAgICAgIC8vICAgICAgIHRoaXMubmV3SW5jb21pbmdDYWxscy5wdXNoKGluY29taW5nQ2FsbERhdGEpO1xuICAgICAgLy8gICAgICAgY29uc29sZS5sb2coJzMyNScsIGluY29taW5nQ2FsbERhdGEpXG4gICAgICAvLyAgICAgICB0aGlzLmdldFVzZXJJbmZvcm1hdGlvbihpbmNvbWluZ0NhbGxEYXRhKTtcbiAgICAgIC8vICAgICB9IGVsc2Uge1xuICAgICAgLy8gICAgICAgaW5jb21pbmdDYWxsRGF0YVsnaXNGaXJzdENhbGwnXSA9IHRydWU7XG4gICAgICAvLyAgICAgICBjb25zb2xlLmxvZygnZGQxJylcbiAgICAgIC8vICAgICAgIHRoaXMuaXNDYWxsSW5Qcm9ncmVzcyA9IHRydWU7XG4gICAgICAvLyAgICAgICB0aGlzLmlzRGlhbHBhZEhpZGRlbiA9IGZhbHNlO1xuICAgICAgLy8gICAgICAgdGhpcy5jYWxsRGF0YS5waG9uZSA9IGluY29taW5nQ2FsbERhdGEucGFyYW1ldGVyc1snRnJvbSddO1xuICAgICAgLy8gICAgICAgY29uc29sZS5sb2coJ2RkMicpXG4gICAgICAvLyAgICAgICB0aGlzLmdldFVzZXJJbmZvcm1hdGlvbihpbmNvbWluZ0NhbGxEYXRhKTtcbiAgICAgIC8vICAgICAgIHRoaXMuY2FsbERhdGEubmFtZSA9IGluY29taW5nQ2FsbERhdGEuY3VzdG9tUGFyYW1ldGVycy5nZXQoJ25hbWUnKTtcbiAgICAgIC8vICAgICAgIHRoaXMuY2FsbERhdGEuaW1nID0gaW5jb21pbmdDYWxsRGF0YS5jdXN0b21QYXJhbWV0ZXJzLmdldCgnaW1hZ2UnKSB8fCAnYXNzZXRzL2ltYWdlcy91c2VyLmpwZyc7XG4gICAgICAvLyAgICAgICB0aGlzLmNhbGxEYXRhLmlzSW5jb21pbmdDYWxsID0gdHJ1ZTtcbiAgICAgIC8vICAgICB9XG4gICAgICAvLyAgICAgaW5jb21pbmdDYWxsRGF0YS5vbignY2FuY2VsJywgKCkgPT4ge1xuICAgICAgLy8gICAgICAgdGhpcy5pbmNvbWluZ0NhbGxzTGlzdCA9IHRoaXMuaW5jb21pbmdDYWxsc0xpc3QuZmlsdGVyKChpdGVtOiBhbnkpID0+IGl0ZW0ucGFyYW1ldGVyc1snQ2FsbFNpZCddICE9PSBpbmNvbWluZ0NhbGxEYXRhLnBhcmFtZXRlcnNbJ0NhbGxTaWQnXSk7XG4gICAgICAvLyAgICAgICAvLyBpZih0aGlzLmluY29taW5nQ2FsbHNMaXN0Lmxlbmd0aCA9PSAwKXtcbiAgICAgIC8vICAgICAgIC8vICAgY29uc29sZS5sb2coJ2RkMycpXG4gICAgICAvLyAgICAgICAvLyAgIHRoaXMuaXNDYWxsSW5Qcm9ncmVzcyA9IGZhbHNlO1xuICAgICAgLy8gICAgICAgLy8gfVxuICAgICAgLy8gICAgIH0pO1xuXG4gICAgICAvLyAgICAgaW5jb21pbmdDYWxsRGF0YS5vbignZGlzY29ubmVjdCcsICgpID0+IHtcbiAgICAgIC8vICAgICAgICAgdGhpcy5pbmNvbWluZ0NhbGxzTGlzdCA9IHRoaXMuaW5jb21pbmdDYWxsc0xpc3QuZmlsdGVyKChpdGVtOiBhbnkpID0+IGl0ZW0ucGFyYW1ldGVyc1snQ2FsbFNpZCddICE9PSBpbmNvbWluZ0NhbGxEYXRhLnBhcmFtZXRlcnNbJ0NhbGxTaWQnXSk7XG4gICAgICAvLyAgICAgICAgIC8vIGlmKHRoaXMuaW5jb21pbmdDYWxsc0xpc3QubGVuZ3RoID09IDApe1xuICAgICAgLy8gICAgICAgICAvLyAgIGNvbnNvbGUubG9nKCdkZDQnKVxuICAgICAgLy8gICAgICAgICAvLyAgIHRoaXMuaXNDYWxsSW5Qcm9ncmVzcyA9IGZhbHNlO1xuICAgICAgLy8gICAgICAgICAvLyB9XG4gICAgICAvLyAgICAgfSk7XG4gICAgICAvLyAgIH1cbiAgICAgIC8vIH1cbiAgICB9KTtcbiAgICAgIHRoaXMudG9rZW4gPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnZXh0X3Rva2VuJykgfHwgJyc7XG4gICAgICAvL3RoaXMuaXNDYWxsSW5Qcm9ncmVzcyA9IHRydWU7XG4gICAgICB0aGlzLmdldENvbnRhY3RMaXN0KCk7XG4gICAgICBcbiAgICAgIHRoaXMuZ2V0VXNlckNhbGxTZXR0aW5nKCk7XG4gICAgICBjb25zdCBzdWIxID0gdGhpcy50d2lsaW9TZXJ2aWNlLmRpYWxOdW1iZXJGcm9tT3RoZXJNb2R1bGUuc3Vic2NyaWJlKChjb250YWN0OmFueSkgPT4ge1xuICAgICAgICBpZiAoY29udGFjdC5udW1iZXIpIHtcbiAgICAgICAgICB0aGlzLmlzU21hcnREaWFsQ2FsbCA9IGZhbHNlO1xuICAgICAgICAgIGlmIChjb250YWN0LmlzRGlhbEZyb21IaXN0b3J5KSB7XG4gICAgICAgICAgICAvL2hhbmRsZSBkaWFsaW5nIGZyb20gaGlzdG9yeSBwYWdlXG4gICAgICAgICAgICBpZihjb250YWN0LmNhbGxlcklkID09ICdzbWFydERpYWxpbmcnKXtcbiAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZENhbGxlcklkID0geyBudW1iZXI6IGNvbnRhY3QuZnJvbSB9O1xuICAgICAgICAgICAgICB0aGlzLmlzU21hcnREaWFsQ2FsbCA9IHRydWU7XG4gICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuaXNEaWFscGFkSGlkZGVuID0gZmFsc2U7XG4gICAgICAgICAgICAgIH0sIDIwMDApO1xuICAgICAgICAgICAgICB0aGlzLmNhbGxEYXRhLnBob25lID0gY29udGFjdC5udW1iZXI7XG4gICAgICAgICAgICAgIHRoaXMuY2FsbERhdGEubmFtZSA9IGNvbnRhY3QubmFtZTtcbiAgICAgICAgICAgICAgdGhpcy5jYWxsRGF0YS5pbWcgPSBjb250YWN0LmltZztcbiAgICAgICAgICAgICAgdGhpcy5jYWxsRGF0YS5mcm9tID0gY29udGFjdC5mcm9tO1xuICAgICAgICAgICAgICB0aGlzLnNhbml0aXplZE51bSA9IGNvbnRhY3QubnVtYmVyO1xuICAgICAgICAgICAgICBjb25zb2xlLmxvZygnMjc0JywgY29udGFjdClcbiAgICAgICAgICAgICAgdGhpcy5nZXRVc2VySW5mb3JtYXRpb24oY29udGFjdCk7XG4gICAgICAgICAgICAvLyB0aGlzLmluY29taW5nQ2FsbHNMaXN0LnB1c2goY29udGFjdClcbiAgICAgICAgICAgIHRoaXMuaW5pdGlhdGVDYWxsKCk7XG4gICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICB0aGlzLmdldFVzZXJDYWxsU2V0dGluZygpO1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuaXNEaWFscGFkSGlkZGVuID0gZmFsc2U7XG4gICAgICAgICAgICB9LCAxMDAwKTtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCcyODInLCBjb250YWN0KVxuICAgICAgICAgICAgdGhpcy5nZXRVc2VySW5mb3JtYXRpb24oY29udGFjdCk7XG4gICAgICAgICAgICAvLyB0aGlzLmluY29taW5nQ2FsbHNMaXN0LnB1c2goY29udGFjdClcbiAgICAgICAgICAgICAgdGhpcy5kaWFsZWROdW1iZXIgPSBjb250YWN0Lm51bWJlcjtcbiAgICAgICAgICAgICAgdGhpcy5zYW5pdGl6ZWROdW0gPSBjb250YWN0Lm51bWJlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKGNvbnRhY3QuY2FsbGVySWQgPT0gJ2Fsd2F5c0FzaycgfHwgY29udGFjdC5jYWxsZXJJZCA9PSAnc21hcnREaWFsaW5nJykge1xuICAgICAgICAgICAgICB0aGlzLmdldFVzZXJDYWxsU2V0dGluZygpO1xuICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmlzRGlhbHBhZEhpZGRlbiA9IGZhbHNlO1xuICAgICAgICAgICAgICB9LCAxMDAwKTtcbiAgICAgICAgICAgICAgdGhpcy5kaWFsZWROdW1iZXIgPSBjb250YWN0Lm51bWJlcjtcbiAgICAgICAgICAgICAgdGhpcy5zYW5pdGl6ZWROdW0gPSBjb250YWN0Lm51bWJlcjtcbiAgICAgICAgICAgICAgXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmlzRGlhbHBhZEhpZGRlbiA9IGZhbHNlO1xuICAgICAgICAgICAgICB9LCAyMDAwKTtcbiAgICAgICAgICAgICAgdGhpcy5jYWxsRGF0YS5waG9uZSA9IGNvbnRhY3QubnVtYmVyO1xuICAgICAgICAgICAgICB0aGlzLmNhbGxEYXRhLm5hbWUgPSBjb250YWN0Lm5hbWU7XG4gICAgICAgICAgICAgIHRoaXMuY2FsbERhdGEuaW1nID0gY29udGFjdC5pbWc7XG4gICAgICAgICAgICAgIHRoaXMuc2FuaXRpemVkTnVtID0gY29udGFjdC5udW1iZXI7XG4gICAgICAgICAgICAgIHRoaXMuaW5pdGlhdGVDYWxsKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIFxuICAgICAgICB9XG4gICAgICB9KVxuICBcbiAgICAgIC8vIGhhbmRsZSBpbmNvbWluZyBjYWxsIChtYW5hZ2VkIGludGVybmFsbHk7IGhvc3QgbmVlZCBub3QgcGFzcyBpbmNvbWluZ0NhbGxEYXRhKVxuICAgICAgY29uc3Qgc3ViMiA9IHRoaXMudHdpbGlvU2VydmljZS5jdXJyZW50Q2FsbC5zdWJzY3JpYmUoKGluY29taW5nQ2FsbERhdGE6IGFueSkgPT4ge1xuICAgICAgICAvLyBpZiAoaW5jb21pbmdDYWxsRGF0YSkge1xuICAgICAgICAvLyAgIHRoaXMuaXNDYWxsSW5Qcm9ncmVzcyA9IHRydWU7XG4gICAgICAgIC8vICAgdGhpcy5pc0RpYWxwYWRIaWRkZW4gPSBmYWxzZTtcbiAgICAgICAgLy8gICB0aGlzLmNhbGxEYXRhLnBob25lID0gaW5jb21pbmdDYWxsRGF0YS5wYXJhbWV0ZXJzLkZyb207XG4gICAgICAgIC8vICAgdGhpcy5jYWxsRGF0YS5uYW1lID0gaW5jb21pbmdDYWxsRGF0YS5jdXN0b21QYXJhbWV0ZXJzLmdldCgnbmFtZScpO1xuICAgICAgICAvLyAgIHRoaXMuY2FsbERhdGEuaW1nID0gaW5jb21pbmdDYWxsRGF0YS5jdXN0b21QYXJhbWV0ZXJzLmdldCgnaW1hZ2UnKTtcbiAgICAgICAgLy8gICB0aGlzLmNhbGxEYXRhLmlzSW5jb21pbmdDYWxsID0gdHJ1ZTtcbiAgICAgICAgLy8gfVxuICAgICAgICBpZiAoaW5jb21pbmdDYWxsRGF0YSkge1xuICAgICAgICAgIGlmICh0aGlzLmF1dG9PcGVuT25JbmNvbWluZyAmJiB0aGlzLl9pc0RpYWxwYWRIaWRkZW4pIHtcbiAgICAgICAgICAgIHRoaXMuX2lzRGlhbHBhZEhpZGRlbiA9IGZhbHNlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh0aGlzLmlzQ2FsbEluUHJvZ3Jlc3MpIHtcbiAgICAgICAgICAgIHRoaXMubmV3SW5jb21pbmdDYWxscy5wdXNoKGluY29taW5nQ2FsbERhdGEpO1xuICAgICAgICAgICAgY29uc29sZS5sb2coJzMyNScsIGluY29taW5nQ2FsbERhdGEpXG4gICAgICAgICAgICB0aGlzLmdldFVzZXJJbmZvcm1hdGlvbihpbmNvbWluZ0NhbGxEYXRhKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaW5jb21pbmdDYWxsRGF0YVsnaXNGaXJzdENhbGwnXSA9IHRydWU7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnZGQxJylcbiAgICAgICAgICAgIC8vIHRoaXMuaXNDYWxsSW5Qcm9ncmVzcyA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmlzRGlhbHBhZEhpZGRlbiA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5jYWxsRGF0YS5waG9uZSA9IGluY29taW5nQ2FsbERhdGEucGFyYW1ldGVyc1snRnJvbSddO1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ2RkMicpXG4gICAgICAgICAgICB0aGlzLmdldFVzZXJJbmZvcm1hdGlvbihpbmNvbWluZ0NhbGxEYXRhKTtcbiAgICAgICAgICAgIHRoaXMuY2FsbERhdGEubmFtZSA9IGluY29taW5nQ2FsbERhdGEuY3VzdG9tUGFyYW1ldGVycy5nZXQoJ25hbWUnKTtcbiAgICAgICAgICAgIHRoaXMuY2FsbERhdGEuaW1nID0gaW5jb21pbmdDYWxsRGF0YS5jdXN0b21QYXJhbWV0ZXJzLmdldCgnaW1hZ2UnKSB8fCAnYXNzZXRzL2ltYWdlcy91c2VyLmpwZyc7XG4gICAgICAgICAgICB0aGlzLmNhbGxEYXRhLmlzSW5jb21pbmdDYWxsID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaW5jb21pbmdDYWxsRGF0YS5vbignY2FuY2VsJywgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5pbmNvbWluZ0NhbGxzTGlzdCA9IHRoaXMuaW5jb21pbmdDYWxsc0xpc3QuZmlsdGVyKChpdGVtOiBhbnkpID0+IGl0ZW0ucGFyYW1ldGVyc1snQ2FsbFNpZCddICE9PSBpbmNvbWluZ0NhbGxEYXRhLnBhcmFtZXRlcnNbJ0NhbGxTaWQnXSk7XG4gICAgICAgICAgICAvLyBpZih0aGlzLmluY29taW5nQ2FsbHNMaXN0Lmxlbmd0aCA9PSAwKXtcbiAgICAgICAgICAgIC8vICAgY29uc29sZS5sb2coJ2RkMycpXG4gICAgICAgICAgICAvLyAgIHRoaXMuaXNDYWxsSW5Qcm9ncmVzcyA9IGZhbHNlO1xuICAgICAgICAgICAgLy8gfVxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgaW5jb21pbmdDYWxsRGF0YS5vbignZGlzY29ubmVjdCcsICgpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5pbmNvbWluZ0NhbGxzTGlzdCA9IHRoaXMuaW5jb21pbmdDYWxsc0xpc3QuZmlsdGVyKChpdGVtOiBhbnkpID0+IGl0ZW0ucGFyYW1ldGVyc1snQ2FsbFNpZCddICE9PSBpbmNvbWluZ0NhbGxEYXRhLnBhcmFtZXRlcnNbJ0NhbGxTaWQnXSk7XG4gICAgICAgICAgICAgIC8vIGlmKHRoaXMuaW5jb21pbmdDYWxsc0xpc3QubGVuZ3RoID09IDApe1xuICAgICAgICAgICAgICAvLyAgIGNvbnNvbGUubG9nKCdkZDQnKVxuICAgICAgICAgICAgICAvLyAgIHRoaXMuaXNDYWxsSW5Qcm9ncmVzcyA9IGZhbHNlO1xuICAgICAgICAgICAgICAvLyB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKHN1YjEpO1xuICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZChzdWIyKTtcbiAgICB9Y2F0Y2goZSl7XG4gICAgICBjb25zb2xlLmxvZyhlKVxuICAgIH1cbiAgfVxuXG4gIFxuICBnZXRVc2VySW5mb3JtYXRpb24oaW5jb21pbmdDYWxsRGF0YTogYW55KSB7XG4gICAgLy8gY29uc29sZS5sb2coJ2dldFVzZXJJbmZvcm1hdGlvbicsIGluY29taW5nQ2FsbERhdGEpO1xuICAgIGxldCBkYXRhID0gdGhpcy5mcm9tRW50cmllcyhBcnJheS5mcm9tKGluY29taW5nQ2FsbERhdGEuY3VzdG9tUGFyYW1ldGVycy5lbnRyaWVzKCkpKTtcbiAgICBjb25zb2xlLmxvZygnMzY2LS0tJywgZGF0YSlcbiAgICB0aGlzLmV4dGVuc2lvblNlcnZpY2UuZ2V0VXNlckluZm9ybWF0aW9uKGRhdGFbJ3R3aWxpb0F1dGhJZCddKS5zdWJzY3JpYmUoXG4gICAgcmVzcG9uc2UgPT4ge1xuICAgICAgaW5jb21pbmdDYWxsRGF0YVsndXNlckluZm8nXT1yZXNwb25zZVxuICAgICAgY29uc3QgYWxyZWFkeUV4aXN0cyA9IHRoaXMuaW5jb21pbmdDYWxsc0xpc3Quc29tZSgoY2FsbDogYW55KSA9PiBjYWxsLnBhcmFtZXRlcnM/LkNhbGxTaWQgPT09IGluY29taW5nQ2FsbERhdGEucGFyYW1ldGVycz8uQ2FsbFNpZCk7XG4gICAgICBpZighYWxyZWFkeUV4aXN0cyl7XG4gICAgICAgIHRoaXMuaW5jb21pbmdDYWxsc0xpc3QucHVzaChpbmNvbWluZ0NhbGxEYXRhKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuY2RrLmRldGVjdENoYW5nZXMoKTtcbiAgICB9LCBlcnJvciA9PiB7XG4gICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBzdGFydGluZyByZWNvcmRpbmcnLCBlcnJvcik7XG4gICAgfSk7XG4gIH1cblxuICBmcm9tRW50cmllcyhlbnRyaWVzOiBbc3RyaW5nLCBhbnldW10pOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHtcbiAgICByZXR1cm4gZW50cmllcy5yZWR1Y2UoKGFjYywgW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICBhY2Nba2V5XSA9IHZhbHVlO1xuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCB7fSBhcyBSZWNvcmQ8c3RyaW5nLCBhbnk+KTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICB0aGlzLnJlZ2lzdGVyRHJhZ0VsZW1lbnQoKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZihjaGFuZ2VzWydpbmNvbWluZ0NhbGxub3RpZmljYXRpb24nXSkge1xuICAgICAgY29uc29sZS5sb2coJ2luY29taW5nQ2FsbG5vdGlmaWNhdGlvbicsIGNoYW5nZXNbJ2luY29taW5nQ2FsbG5vdGlmaWNhdGlvbiddLmN1cnJlbnRWYWx1ZSk7XG4gICAgICB0aGlzLmlzSW5jb21pbmdDYWxsbm90aWZpY2F0aW9uID0gdHJ1ZTtcbiAgICAgIC8vIGxldCBwYXlsb2FkID0ge1xuICAgICAgLy8gICByZWNvcmRJZDogdGhpcy5pbmNvbWluZ0NhbGxub3RpZmljYXRpb24uZGF0YS5kYXRhLnBhcnRpY2lwYW50SWQsXG4gICAgICAvLyAgIGlwQWRkcmVzczogJycsXG4gICAgICAvLyAgIGlwQ291bnRyeTogJycsXG4gICAgICAvLyAgIGNhbGxTdGF0dXM6ICdhbnN3ZXJlZCcsXG4gICAgICAvLyAgIGRldmljZUlkOiB0aGlzLmRldmljZUlkLFxuICAgICAgLy8gICBjb25mZXJlbmNlSWQ6IHRoaXMuaW5jb21pbmdDYWxsbm90aWZpY2F0aW9uLmRhdGEuZGF0YS5jb25mZXJlbmNlSWQgfHwgJ25vJ1xuICAgICAgLy8gfVxuICAgICAgbGV0IGluY29taW5nQ2FsbD0ge1xuICAgICAgICBjb25mZXJlbmNlSWQ6ICdubycsXG4gICAgICAgIGlzQWN0aXZlOiB0cnVlLFxuICAgICAgICBwYXJ0aWNpcGFudHM6IFtcbiAgICAgICAgICB7ZGlyZWN0aW9uOiBcImluY29taW5nLWNhbGxcIiwgIGltZzogJ2Fzc2V0cy9pbWFnZXMvdXNlci5qcGcnLCBpc0luY29taW5nQ2FsbDogdHJ1ZSwgaXNIb2xkOiBmYWxzZSwgaXNDb25mZXJlbmNlOiBmYWxzZSwgaXNBY2NlcHRDYWxsOiBmYWxzZSwgZGlhbDogdHJ1ZSwgcGhvbmU6IHRoaXMuaW5jb21pbmdDYWxsbm90aWZpY2F0aW9uLmRhdGEuZGF0YT8uZnJvbU51bWJlciwgcGFydGljaXBhbnRJZDogdGhpcy5pbmNvbWluZ0NhbGxub3RpZmljYXRpb24uZGF0YS5kYXRhPy5wYXJ0aWNpcGFudElkLCBuYW1lOiB0aGlzLmluY29taW5nQ2FsbG5vdGlmaWNhdGlvbi5kYXRhLmRhdGE/LmZyb21OYW1lLCB0aW1lOicnLCBpZDogdGhpcy5pbmNvbWluZ0NhbGxub3RpZmljYXRpb24uZGF0YS5kYXRhPy5wYXJ0aWNpcGFudElkfVxuICAgICAgICBdXG4gICAgICB9XG4gICAgICB0aGlzLmluY29taW5nQ2FsbHNMaXN0LnB1c2goaW5jb21pbmdDYWxsKVxuICAgICAgaWYodGhpcy5pbmNvbWluZ0NhbGxub3RpZmljYXRpb24uZGF0YS5kYXRhPy5wYXJ0aWNpcGFudElkKXtcbiAgICAgICAgdGhpcy5pc0NhbGxJblByb2dyZXNzID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIC8vIHRoaXMuZXh0ZW5zaW9uU2VydmljZS5zZXRJbmNvbWluZ0NhbGxTdGF0dXMocGF5bG9hZCkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xuICAgICAgLy8gICBjb25zb2xlLmxvZyhyZXMpXG4gICAgICAvLyB9KVxuICAgIH1cbiAgICBpZihjaGFuZ2VzWydkZXZpY2VJZCddKSB7XG4gICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnZGV2aWNlSWQnLCBjaGFuZ2VzWydkZXZpY2VJZCddLmN1cnJlbnRWYWx1ZSk7XG4gICAgICB0aGlzLnR3aWxpb1NlcnZpY2UuZGV2aWNlSWQgPSBjaGFuZ2VzWydkZXZpY2VJZCddLmN1cnJlbnRWYWx1ZTtcbiAgICAgIGNvbnNvbGUubG9nKCdTZXQgZGV2aWNlSWQgaW4gbG9jYWxTdG9yYWdlOicsIGNoYW5nZXNbJ2RldmljZUlkJ10uY3VycmVudFZhbHVlKTtcbiAgICB9XG4gICAgaWYodGhpcy51c2VySWQpIHtcbiAgICAgIHRoaXMuZXh0ZW5zaW9uU2VydmljZS51c2VySWQgPSB0aGlzLnVzZXJJZDtcbiAgICB9XG4gICAgaWYgKGNoYW5nZXNbJ2lzRGlhbHBhZEhpZGRlbiddICYmICF0aGlzLmlzRGlhbHBhZEhpZGRlbikge1xuICAgICAgdGhpcy5nZXRDb250YWN0TGlzdCgpO1xuICAgICAgdGhpcy5nZXRVc2VyQ2FsbFNldHRpbmcoKTtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLmRpYWxJbnB1dEVsZW1lbnQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgfSwgMCk7XG4gICAgICBpZih0aGlzLmluY29taW5nQ2FsbERhdGEpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNDYWxsSW5Qcm9ncmVzcykge1xuICAgICAgICAgIHRoaXMubmV3SW5jb21pbmdDYWxscy5wdXNoKHRoaXMuaW5jb21pbmdDYWxsRGF0YSk7XG4gICAgICAgICAgY29uc29sZS5sb2coJzQwNCcsIHRoaXMuaW5jb21pbmdDYWxsRGF0YSlcbiAgICAgICAgICB0aGlzLmdldFVzZXJJbmZvcm1hdGlvbih0aGlzLmluY29taW5nQ2FsbERhdGEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnNvbGUubG9nKCdkZDUnKVxuICAgICAgICAgIHRoaXMuaXNDYWxsSW5Qcm9ncmVzcyA9IHRydWU7XG4gICAgICAgICAgdGhpcy5pc0RpYWxwYWRIaWRkZW4gPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLmNhbGxEYXRhLnBob25lID0gdGhpcy5pbmNvbWluZ0NhbGxEYXRhLnBhcmFtZXRlcnNbJ0Zyb20nXTtcbiAgICAgICAgICBjb25zb2xlLmxvZygnNDExJywgdGhpcy5pbmNvbWluZ0NhbGxEYXRhKVxuICAgICAgICAgIHRoaXMuZ2V0VXNlckluZm9ybWF0aW9uKHRoaXMuaW5jb21pbmdDYWxsRGF0YSk7XG4gICAgICAgICAgdGhpcy5jYWxsRGF0YS5uYW1lID0gdGhpcy5pbmNvbWluZ0NhbGxEYXRhLmN1c3RvbVBhcmFtZXRlcnMuZ2V0KCduYW1lJyk7XG4gICAgICAgICAgdGhpcy5jYWxsRGF0YS5pbWcgPSB0aGlzLmluY29taW5nQ2FsbERhdGEuY3VzdG9tUGFyYW1ldGVycy5nZXQoJ2ltYWdlJykgfHwgJ2Fzc2V0cy9pbWFnZXMvdXNlci5qcGcnO1xuICAgICAgICAgIHRoaXMuY2FsbERhdGEuaXNJbmNvbWluZ0NhbGwgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaW5jb21pbmdDYWxsRGF0YS5vbignY2FuY2VsJywgKCkgPT4ge1xuICAgICAgICAgIHRoaXMuaW5jb21pbmdDYWxsc0xpc3QgPSB0aGlzLmluY29taW5nQ2FsbHNMaXN0LmZpbHRlcigoaXRlbTogYW55KSA9PiBpdGVtLnBhcmFtZXRlcnNbJ0NhbGxTaWQnXSAhPT0gdGhpcy5pbmNvbWluZ0NhbGxEYXRhLnBhcmFtZXRlcnNbJ0NhbGxTaWQnXSk7XG4gICAgICAgICAgLy8gaWYodGhpcy5pbmNvbWluZ0NhbGxzTGlzdC5sZW5ndGggPT0gMCl7XG4gICAgICAgICAgLy8gICBjb25zb2xlLmxvZygnZGQ2JylcbiAgICAgICAgICAvLyAgIHRoaXMuaXNDYWxsSW5Qcm9ncmVzcyA9IGZhbHNlO1xuICAgICAgICAgIC8vIH1cbiAgICAgICAgICB0aGlzLmluY29taW5nQ2FsbERhdGEuZGlzY29ubmVjdCgpO1xuICAgICAgICB9KTtcbiAgICAgICAgXG4gICAgICAgIHRoaXMuaW5jb21pbmdDYWxsRGF0YS5vbignZGlzY29ubmVjdCcsICgpID0+IHtcbiAgICAgICAgICB0aGlzLmluY29taW5nQ2FsbHNMaXN0ID0gdGhpcy5pbmNvbWluZ0NhbGxzTGlzdC5maWx0ZXIoKGl0ZW06IGFueSkgPT4gaXRlbS5wYXJhbWV0ZXJzWydDYWxsU2lkJ10gIT09IHRoaXMuaW5jb21pbmdDYWxsRGF0YS5wYXJhbWV0ZXJzWydDYWxsU2lkJ10pO1xuICAgICAgICAgIHRoaXMuaW5jb21pbmdDYWxsRGF0YS5kaXNjb25uZWN0KCk7XG4gICAgICAgICAgLy8gaWYodGhpcy5pbmNvbWluZ0NhbGxzTGlzdC5sZW5ndGggPT0gMCl7XG4gICAgICAgICAgLy8gICBjb25zb2xlLmxvZygnZGQ3JylcbiAgICAgICAgICAvLyAgIHRoaXMuaXNDYWxsSW5Qcm9ncmVzcyA9IGZhbHNlO1xuICAgICAgICAgIC8vIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChjaGFuZ2VzWydjb250YWN0SW5mbyddICYmIHRoaXMuY29udGFjdEluZm8pIHtcbiAgICAgIGxldCBjb250YWN0ID0gdGhpcy5jb250YWN0SW5mbztcbiAgICBpZiAoY29udGFjdC5udW1iZXIpIHtcbiAgICAgIHRoaXMuaXNTbWFydERpYWxDYWxsID0gZmFsc2U7XG4gICAgICB0aGlzLmRpYWxlZE51bWJlciA9IGNvbnRhY3QubnVtYmVyO1xuICAgICAgaWYgKGNvbnRhY3QuaXNEaWFsRnJvbUhpc3RvcnkpIHtcbiAgICAgICAgLy9oYW5kbGUgZGlhbGluZyBmcm9tIGhpc3RvcnkgcGFnZVxuICAgICAgICBpZihjb250YWN0LmNhbGxlcklkID09ICdzbWFydERpYWxpbmcnKXtcbiAgICAgICAgIFxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDYWxsZXJJZCA9IHsgbnVtYmVyOiBjb250YWN0LmZyb20gfTtcbiAgICAgICAgICB0aGlzLmlzU21hcnREaWFsQ2FsbCA9IHRydWU7XG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmlzRGlhbHBhZEhpZGRlbiA9IGZhbHNlO1xuICAgICAgICAgIH0sIDIwMDApO1xuICAgICAgICAgIHRoaXMuY2FsbERhdGEucGhvbmUgPSBjb250YWN0Lm51bWJlcjtcbiAgICAgICAgICB0aGlzLmNhbGxEYXRhLm5hbWUgPSBjb250YWN0Lm5hbWU7XG4gICAgICAgICAgdGhpcy5jYWxsRGF0YS5pbWcgPSBjb250YWN0LmltZztcbiAgICAgICAgICB0aGlzLmNhbGxEYXRhLmZyb20gPSBjb250YWN0LmZyb207XG4gICAgICAgICAgdGhpcy5zYW5pdGl6ZWROdW0gPSBjb250YWN0Lm51bWJlcjtcbiAgICAgICAgICBjb25zb2xlLmxvZygnMjc0JywgY29udGFjdClcbiAgICAgICAgICB0aGlzLmdldFVzZXJJbmZvcm1hdGlvbihjb250YWN0KTtcbiAgICAgICAgICBjb25zb2xlLmxvZygnNDU0JywgY29udGFjdClcbiAgICAgICAgLy8gdGhpcy5pbmNvbWluZ0NhbGxzTGlzdC5wdXNoKGNvbnRhY3QpXG4gICAgICAgIHRoaXMuaW5pdGlhdGVDYWxsKCk7XG4gICAgICB9ZWxzZXtcbiAgICAgICAgdGhpcy5nZXRVc2VyQ2FsbFNldHRpbmcoKTtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5pc0RpYWxwYWRIaWRkZW4gPSBmYWxzZTtcbiAgICAgICAgfSwgMTAwMCk7XG4gICAgICAgIGNvbnNvbGUubG9nKCcyODInLCBjb250YWN0KVxuICAgICAgICB0aGlzLmdldFVzZXJJbmZvcm1hdGlvbihjb250YWN0KTtcbiAgICAgICAgY29uc29sZS5sb2coJzQ2NCcsIGNvbnRhY3QpXG4gICAgICAgIC8vIHRoaXMuaW5jb21pbmdDYWxsc0xpc3QucHVzaChjb250YWN0KVxuICAgICAgICAgIHRoaXMuZGlhbGVkTnVtYmVyID0gY29udGFjdC5udW1iZXI7XG4gICAgICAgICAgdGhpcy5zYW5pdGl6ZWROdW0gPSBjb250YWN0Lm51bWJlcjtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGNvbnRhY3QuY2FsbGVySWQgPT0gJ2Fsd2F5c0FzaycgfHwgY29udGFjdC5jYWxsZXJJZCA9PSAnc21hcnREaWFsaW5nJykge1xuICAgICAgICAgIHRoaXMuZ2V0VXNlckNhbGxTZXR0aW5nKCk7XG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmlzRGlhbHBhZEhpZGRlbiA9IGZhbHNlO1xuICAgICAgICAgIH0sIDEwMDApO1xuICAgICAgICAgIHRoaXMuZGlhbGVkTnVtYmVyID0gY29udGFjdC5udW1iZXI7XG4gICAgICAgICAgdGhpcy5zYW5pdGl6ZWROdW0gPSBjb250YWN0Lm51bWJlcjtcbiAgICAgICAgICBcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuaXNEaWFscGFkSGlkZGVuID0gZmFsc2U7XG4gICAgICAgICAgfSwgMjAwMCk7XG4gICAgICAgICAgdGhpcy5jYWxsRGF0YS5waG9uZSA9IGNvbnRhY3QubnVtYmVyO1xuICAgICAgICAgIHRoaXMuY2FsbERhdGEubmFtZSA9IGNvbnRhY3QubmFtZTtcbiAgICAgICAgICB0aGlzLmNhbGxEYXRhLmltZyA9IGNvbnRhY3QuaW1nO1xuICAgICAgICAgIHRoaXMuc2FuaXRpemVkTnVtID0gY29udGFjdC5udW1iZXI7XG4gICAgICAgICAgdGhpcy5pbml0aWF0ZUNhbGwoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgXG4gICAgfVxuICB9XG4gIH1cbiAgcHJpdmF0ZSByZWdpc3RlckRyYWdFbGVtZW50KCkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBlbG1udCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkcmFncGFyZW50MScpO1xuICAgICAgaWYgKCFlbG1udCkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdEcmFnIGVsZW1lbnQgbm90IGZvdW5kJyk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgbGV0IHBvczEgPSAwLCBwb3MyID0gMCwgcG9zMyA9IDAsIHBvczQgPSAwO1xuXG4gICAgICBjb25zdCBkcmFnTW91c2VEb3duID0gKGU6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gZS50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgIGlmICh0YXJnZXQudGFnTmFtZS50b0xvd2VyQ2FzZSgpID09PSAnaW5wdXQnKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBwb3MzID0gZS5jbGllbnRYO1xuICAgICAgICBwb3M0ID0gZS5jbGllbnRZO1xuICAgICAgICBcbiAgICAgICAgY29uc3Qgb25Nb3VzZU1vdmUgPSAobW92ZUV2ZW50OiBNb3VzZUV2ZW50KSA9PiBlbGVtZW50RHJhZyhtb3ZlRXZlbnQpO1xuICAgICAgICBjb25zdCBvbk1vdXNlVXAgPSAoKSA9PiB7XG4gICAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIG9uTW91c2VVcCk7XG4gICAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgb25Nb3VzZU1vdmUpO1xuICAgICAgICB9O1xuXG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIG9uTW91c2VNb3ZlKTtcbiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIG9uTW91c2VVcCk7XG4gICAgICB9O1xuXG4gICAgICBjb25zdCBlbGVtZW50RHJhZyA9IChlOiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgcG9zMSA9IHBvczMgLSBlLmNsaWVudFg7XG4gICAgICAgIHBvczIgPSBwb3M0IC0gZS5jbGllbnRZO1xuICAgICAgICBwb3MzID0gZS5jbGllbnRYO1xuICAgICAgICBwb3M0ID0gZS5jbGllbnRZO1xuICAgICAgICBcbiAgICAgICAgZWxtbnQuc3R5bGUudG9wID0gKGVsbW50Lm9mZnNldFRvcCAtIHBvczIpICsgJ3B4JztcbiAgICAgICAgZWxtbnQuc3R5bGUubGVmdCA9IChlbG1udC5vZmZzZXRMZWZ0IC0gcG9zMSkgKyAncHgnO1xuICAgICAgfTtcblxuICAgICAgLy8gQ2hlY2sgZm9yIGhlYWRlciBlbGVtZW50XG4gICAgICBjb25zdCBoZWFkZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChlbG1udC5pZCArICdoZWFkZXInKTtcbiAgICAgIGlmIChoZWFkZXIpIHtcbiAgICAgICAgaGVhZGVyLm9ubW91c2Vkb3duID0gZHJhZ01vdXNlRG93bjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVsbW50Lm9ubW91c2Vkb3duID0gZHJhZ01vdXNlRG93bjtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zb2xlLmxvZyhlKVxuICAgIH1cbiAgfVxuXG4gIGFkZE51bWJlcihudW06IGFueSkge1xuICAgIGlmICggbnVtID09ICcjJyB8fCBudW0gPT0gJyonIHx8bnVtID09ICcrJyB8fCBOdW1iZXIuaXNJbnRlZ2VyKG51bSkpIHtcbiAgICAgIGlmIChudW0gPT0gJyMnKSB7XG4gICAgICAgIG5ldyBBdWRpbyhgL2Fzc2V0cy9kaWFsLXRvbmVzL2R0bWYvZHRtZi1oYXNoLS5tcDNgKS5wbGF5KCk7XG4gICAgICB9IGVsc2UgaWYgKG51bSA9PSAnKicpIHtcbiAgICAgICAgbmV3IEF1ZGlvKGAvYXNzZXRzL2RpYWwtdG9uZXMvZHRtZi9kdG1mLXN0YXItLm1wM2ApLnBsYXkoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5ldyBBdWRpbyhgL2Fzc2V0cy9kaWFsLXRvbmVzL2R0bWYvZHRtZi0ke251bX0tLm1wM2ApLnBsYXkoKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5kaWFsZWROdW1iZXIgKz0gbnVtO1xuICAgICAgdGhpcy5zaG93SW5wdXRDbGVhckJ0biA9IHRydWU7XG5cbiAgICAgIHRoaXMubnVtYmVyRGlhbGVkLmVtaXQodGhpcy5kaWFsZWROdW1iZXIpO1xuXG4gICAgICB0aGlzLm9uRGlhbElucHV0Q2hhbmdlKHRoaXMuZGlhbGVkTnVtYmVyKVxuICAgICAgLy8gdGhpcy5kaWFsSW5wdXRSZWYubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgIH1lbHNlIGlmKG51bSA9PT0gJ3ZvaWNlbWFpbCcpe1xuICAgICAgLy8gdGhpcy5zaG93RGVkaWNhdGVkUG9wdXAgPSB0cnVlO1xuICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWydleHRlbnNpb24vdm9pY2VtYWlsLycrdGhpcy50b2tlbl0pO1xuICAgIH1cbiAgfVxuICBcbiAgaGlkZURpYWxwYWQoKSB7XG4gICAgdGhpcy5pc0RpYWxwYWRIaWRkZW4gPSB0cnVlO1xuICAgIHRoaXMuY2xvc2VEaWFscGFkRXZlbnQuZW1pdCgpO1xuICAgIHRoaXMuY2xlYXJBbGxEaWFsZWQoKTtcbiAgICB0aGlzLmZpbHRlcmVkQ29udGFjdExpc3QgPSBbXTtcbiAgfVxuICBcbiAgb25EaWFsSW5wdXRDaGFuZ2UoaW5wdXRWYWw6IGFueSkge1xuICAgIHRyeSB7XG4gICAgICAvLyBVcGRhdGVkIHJlZ2V4IHRvIGluY2x1ZGUgeCwgWCwgZXh0LiwgRXh0LiwgYW5kICxcbiAgICAgIGNvbnN0IGlzTnVtZXJpY0lucHV0ID0gL15bXFxkXFxzK1xcLV0rJC8udGVzdChpbnB1dFZhbCk7XG4gICAgICBsZXQgbWFpbk51bWJlciA9IGlucHV0VmFsO1xuXG4gICAgICAvLyBDaGVjayBmb3IgZXh0ZW5zaW9uIGluZGljYXRvcnMgYW5kIHNwbGl0IHRoZSBpbnB1dFxuICAgICAgY29uc3QgZXh0TWF0Y2ggPSBpbnB1dFZhbC5tYXRjaCgvKHh8WHxleHRcXC58RXh0XFwufCwpKC4qKS8pO1xuICAgICAgaWYgKGV4dE1hdGNoKSB7XG4gICAgICAgIG1haW5OdW1iZXIgPSBpbnB1dFZhbC5zdWJzdHJpbmcoMCwgZXh0TWF0Y2guaW5kZXgpLnRyaW0oKTtcbiAgICAgICAgdGhpcy5jYWxsRGF0YS5leHROdW0gPSBleHRNYXRjaFsyXS50cmltKCk7XG4gICAgICB9XG4gICAgICB0aGlzLnNhbml0aXplZE51bSA9IGlzTnVtZXJpY0lucHV0ID8gbWFpbk51bWJlci5yZXBsYWNlKC9bXFxzXFwtXSsvZywgJycpIDogbWFpbk51bWJlcjtcblxuICAgICAgdGhpcy5jYWxsRGF0YS5waG9uZSA9IGlzTnVtZXJpY0lucHV0ID8gdGhpcy5zYW5pdGl6ZWROdW0gOiAnJztcbiAgICAgIHRoaXMuc2hvd0lucHV0Q2xlYXJCdG4gPSBpbnB1dFZhbC5sZW5ndGggPiAwO1xuXG4gICAgICBpZiAoaXNOdW1lcmljSW5wdXQpIHtcbiAgICAgICAgdGhpcy5kaWFsZWROdW1iZXIgPSBuZXcgQXNZb3VUeXBlKCkuaW5wdXQodGhpcy5zYW5pdGl6ZWROdW0pO1xuICAgICAgfVxuXG4gICAgICAvLyBlbWl0IGN1cnJlbnQgbnVtYmVyIHdoZW5ldmVyIGlucHV0IGNoYW5nZXNcbiAgICAgIHRoaXMubnVtYmVyRGlhbGVkLmVtaXQodGhpcy5kaWFsZWROdW1iZXIpO1xuXG4gICAgICBpZiAoaW5wdXRWYWwubGVuZ3RoID4gMikge1xuICAgICAgICB0aGlzLmZpbHRlcmVkQ29udGFjdExpc3QgPSBbXTtcbiAgICAgICAgdGhpcy5jb250YWN0TGlzdC5mb3JFYWNoKGNvbnRhY3QgPT4ge1xuICAgICAgICAgIGNvbnN0IGZ1bGxOYW1lID0gYCR7Y29udGFjdC5maXJzdE5hbWV9ICR7Y29udGFjdC5taWRkbGVOYW1lfSAke2NvbnRhY3QubGFzdE5hbWV9YC50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgIGlmKGZ1bGxOYW1lLmluY2x1ZGVzKHRoaXMuc2FuaXRpemVkTnVtLnRvTG93ZXJDYXNlKCkpIHx8IGNvbnRhY3QubnVtYmVyc0xpc3Quc29tZSgobnVtOiBhbnkpID0+IG51bS5udW1iZXIuaW5jbHVkZXModGhpcy5zYW5pdGl6ZWROdW0pKSkge1xuICAgICAgICAgICAgdGhpcy5maWx0ZXJlZENvbnRhY3RMaXN0LnB1c2goY29udGFjdCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5maWx0ZXJlZENvbnRhY3RMaXN0ID0gdGhpcy5maWx0ZXJlZENvbnRhY3RMaXN0LnNsaWNlKDAsIDIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5maWx0ZXJlZENvbnRhY3RMaXN0ID0gW107XG4gICAgICB9XG5cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zb2xlLmxvZyhlKTtcbiAgICB9XG4gIH1cblxuICBnZXRGaXJzdExldHRlcihuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBuYW1lID8gbmFtZS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSA6ICcnO1xuICB9XG4gIGNsZWFySW5wdXQoKSB7XG4gICAgaWYgKHRoaXMuZGlhbGVkTnVtYmVyLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuZGlhbGVkTnVtYmVyID0gdGhpcy5kaWFsZWROdW1iZXIuc2xpY2UoMCwgLTEpO1xuICAgICAgdGhpcy5zaG93SW5wdXRDbGVhckJ0biA9IHRoaXMuZGlhbGVkTnVtYmVyLmxlbmd0aCAhPT0gMDtcblxuICAgICAgdGhpcy5vbkRpYWxJbnB1dENoYW5nZSh0aGlzLmRpYWxlZE51bWJlcilcbiAgICB9XG4gIH1cbiAgY2xlYXJBbGxEaWFsZWQoKSB7XG4gICAgdGhpcy5kaWFsZWROdW1iZXIgPSAnJztcbiAgICB0aGlzLnNhbml0aXplZE51bSA9ICcnO1xuICAgIHRoaXMuc2hvd0lucHV0Q2xlYXJCdG4gPSBmYWxzZTtcbiAgfVxuICBnZXRDYWxsZXJJZExpc3QoKSB7XG4gICAgdGhpcy5leHRTZXJ2aWNlLmRpc3BsYXlJRCh0aGlzLnRva2VuIHx8ICcnKS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XG4gICAgICAvL3RoaXMuY2FsbGVySWRMaXN0ID0gcmVzLmNhbGxlcklkTGlzdC5maWx0ZXIoaXRlbSA9PiBpdGVtLnR5cGUgPT09IFwiQzJDIFNvZnRwaG9uZSBOdW1iZXJcIik7XG4gICAgICB0aGlzLmNhbGxlcklkTGlzdCA9IHJlcy5jYWxsZXJJZExpc3QuZmlsdGVyKChpdGVtOiBhbnkpID0+IGl0ZW0udm9pY2VGZWF0dXJlID09PSB0cnVlKTtcbiAgICAgIC8vIHRoaXMuY2FsbGVySWRMaXN0ID0gcmVzLmNhbGxlcklkTGlzdDtcbiAgICAgIGlmICh0aGlzLmNhbGxlcklkTGlzdC5sZW5ndGggPT0gMSkge1xuICAgICAgICB0aGlzLnNlbGVjdGVkQ2FsbGVySWQgPSB0aGlzLmNhbGxlcklkTGlzdFswXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICh0aGlzLmNhbGxQcmVmZXJlbmNlID09PSAnYWx3YXlzQXNrJyB8fCB0aGlzLmNhbGxQcmVmZXJlbmNlID09PSAnc21hcnREaWFsaW5nJykge1xuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDYWxsZXJJZCA9IG51bGw7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5zZWxlY3RlZENhbGxlcklkID0gdGhpcy5jYWxsZXJJZExpc3QuZmluZChpdGVtID0+IChpdGVtLm51bWJlciA9PSB0aGlzLmNhbGxQcmVmZXJlbmNlKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICBnZXRDb250YWN0TGlzdCgpIHtcbiAgICB0aGlzLnR3aWxpb1NlcnZpY2UuZ2V0Q29udGFjdExpc3QoKS5zdWJzY3JpYmUoKHJlc3A6IGFueSkgPT4ge1xuICAgICAgaWYgKHJlc3AucmVzcG9uc2UgPT0gJ1N1Y2Nlc3MnKSB7XG4gICAgICAgIHRoaXMuY29udGFjdExpc3QgPSByZXNwLnBob25lQm9vaztcbiAgICAgIH1cbiAgICB9LCBlcnIgPT4ge1xuICAgICAgY29uc29sZS5sb2coZXJyKVxuICAgIH0pXG4gIH1cbiAgZ2V0RnVsbE5hbWUoY29udGFjdDogYW55KTogc3RyaW5nIHtcbiAgICBsZXQgZnVsbE5hbWUgPSBjb250YWN0LmZpcnN0TmFtZSB8fCAnJztcbiAgICBpZiAoY29udGFjdC5taWRkbGVOYW1lKSB7XG4gICAgICBmdWxsTmFtZSArPSBgICR7Y29udGFjdC5taWRkbGVOYW1lfWA7XG4gICAgfVxuICAgIGlmIChjb250YWN0Lmxhc3ROYW1lKSB7XG4gICAgICBmdWxsTmFtZSArPSBgICR7Y29udGFjdC5sYXN0TmFtZX1gO1xuICAgIH1cbiAgICByZXR1cm4gZnVsbE5hbWUudHJpbSgpO1xuICB9XG5cblxuICB0b2dnbGVDYWxsZXJJZERpdigpIHtcbiAgICB0aGlzLmlzQ2FsbGVySWRIaWRkZW4gPSAhdGhpcy5pc0NhbGxlcklkSGlkZGVuO1xuICB9XG5cbiAgb25Db250YWN0U2VsZWN0KGNvbnRhY3Q6IGFueSkge1xuICAgIHRoaXMuZGlhbGVkTnVtYmVyID0gY29udGFjdC5udW1iZXJzTGlzdFswXS5udW1iZXI7XG4gICAgdGhpcy5jYWxsRGF0YS5uYW1lID0gdGhpcy5nZXRGdWxsTmFtZShjb250YWN0KTtcbiAgICB0aGlzLmNhbGxEYXRhLmltZyA9IGNvbnRhY3QuaW1hZ2UgfHwgJ2Fzc2V0cy9pbWFnZXMvdXNlci5qcGcnO1xuICAgIHRoaXMub25EaWFsSW5wdXRDaGFuZ2UodGhpcy5kaWFsZWROdW1iZXIpO1xuICAgIHRoaXMuZmlsdGVyZWRDb250YWN0TGlzdCA9IFtdO1xuICB9XG5cbiAgZW5kQ2FsbCgpIHtcbiAgICB0cnkge1xuICAgICAgY29uc29sZS5sb2coJ0VuZGluZyBjYWxsJyk7XG4gICAgICBjb25zb2xlLmxvZygnZGQ4JylcbiAgICAgIHRoaXMuaXNDYWxsSW5Qcm9ncmVzcyA9IGZhbHNlO1xuICAgICAgdGhpcy5maWx0ZXJlZENvbnRhY3RMaXN0ID0gW107XG4gICAgICBcbiAgICAgIC8vIFJlc2V0IGNhbGwgZGF0YVxuICAgICAgdGhpcy5jYWxsRGF0YSA9IHtcbiAgICAgICAgcGhvbmU6ICcnLFxuICAgICAgICBuYW1lOiAnJyxcbiAgICAgICAgaW1nOiAnYXNzZXRzL2ltYWdlcy91c2VyLmpwZycsXG4gICAgICAgIGlzSW5jb21pbmdDYWxsOiBmYWxzZSxcbiAgICAgICAgZGlhbDogZmFsc2UsXG4gICAgICAgIGRpc3BsYXlOdW06ICcnLFxuICAgICAgICBleHROdW06ICcnXG4gICAgICB9O1xuICAgICAgXG4gICAgICAvLyBSZXNldCBkaWFsZWQgbnVtYmVyXG4gICAgICB0aGlzLmRpYWxlZE51bWJlciA9ICcnO1xuICAgICAgdGhpcy5zYW5pdGl6ZWROdW0gPSAnJztcbiAgICAgIFxuICAgICAgLy8gRW1pdCBlbmQgY2FsbCBldmVudFxuICAgICAgdGhpcy5lbmRDYWxsRXZlbnQuZW1pdCgpO1xuICAgICAgY29uc29sZS5sb2coJ0NhbGwgZW5kZWQgc3VjY2Vzc2Z1bGx5Jyk7XG4gICAgICBcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgaW4gZW5kQ2FsbDonLCBlcnJvcik7XG4gICAgICAvLyBFdmVuIGlmIHRoZXJlJ3MgYW4gZXJyb3IsIHRyeSB0byByZXNldCB0aGUgc3RhdGVcbiAgICAgIGNvbnNvbGUubG9nKCdkZDknKVxuICAgICAgdGhpcy5pc0NhbGxJblByb2dyZXNzID0gZmFsc2U7XG4gICAgICB0aGlzLmNhbGxEYXRhID0ge1xuICAgICAgICBwaG9uZTogJycsXG4gICAgICAgIG5hbWU6ICcnLFxuICAgICAgICBpbWc6ICdhc3NldHMvaW1hZ2VzL3VzZXIuanBnJyxcbiAgICAgICAgaXNJbmNvbWluZ0NhbGw6IGZhbHNlLFxuICAgICAgICBkaWFsOiBmYWxzZSxcbiAgICAgICAgZGlzcGxheU51bTogJycsXG4gICAgICAgIGV4dE51bTogJydcbiAgICAgIH07XG4gICAgICB0aGlzLmVuZENhbGxFdmVudC5lbWl0KCk7XG4gICAgfVxuICB9XG5cbiAgLy8gYXN5bmMgaW5pdGlhdGVDYWxsKCkge1xuICAvLyAgIHRyeSB7XG4gIC8vICAgICBjb25zb2xlLmxvZygnSW5pdGlhdGluZyBjYWxsIHdpdGggbnVtYmVyOicsIHRoaXMuZGlhbGVkTnVtYmVyKTtcbiAgICAgIFxuICAvLyAgICAgaWYgKCF0aGlzLmRpYWxlZE51bWJlciAmJiB0aGlzLmxhc3REaWFsZWQpIHtcbiAgLy8gICAgICAgY29uc29sZS5sb2coJ1VzaW5nIGxhc3QgZGlhbGVkIG51bWJlcjonLCB0aGlzLmxhc3REaWFsZWQubnVtYmVyKTtcbiAgLy8gICAgICAgdGhpcy5zYW5pdGl6ZWROdW0gPSB0aGlzLmxhc3REaWFsZWQubnVtYmVyO1xuICAvLyAgICAgfVxuXG4gIC8vICAgICBjb25zdCBpc0ludmFsaWQgPSBhd2FpdCB0aGlzLmlzSW52YWxpZE51bWJlcigpO1xuICAvLyAgICAgaWYgKGlzSW52YWxpZCkge1xuICAvLyAgICAgICBjb25zb2xlLmVycm9yKCdJbnZhbGlkIG51bWJlciBmb3JtYXQnKTtcbiAgLy8gICAgICAgcmV0dXJuIGZhbHNlO1xuICAvLyAgICAgfVxuXG4gIC8vICAgICB0aGlzLnNhdmVMYXN0RGlhbGVkKCk7XG4gIC8vICAgICB0aGlzLmlzU2F2ZWRDb250YWN0RGlhbGxlZCgpO1xuICAgICAgXG4gIC8vICAgICAvLyBDaGVjayBwYXltZW50IHN0YXR1c1xuICAvLyAgICAgdGhpcy5pc1BheW1lbnREdWUgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgncGF5bWVudER1ZScpID09PSAndHJ1ZSc7XG4gIC8vICAgICBpZiAodGhpcy5pc1BheW1lbnREdWUpIHtcbiAgLy8gICAgICAgY29uc29sZS53YXJuKCdQYXltZW50IGlzIGR1ZScpO1xuICAvLyAgICAgICBzd2FsKCdXYXJuaW5nJywgJ1BsZWFzZSBub3RlIHRoYXQgeW91ciBwYXltZW50IGlzIGR1ZS4gVG8gY29udGludWUgdXNpbmcgb3VyIHNlcnZpY2VzLCBraW5kbHkgc3Vic2NyaWJlIHRvIGF2b2lkIGludGVycnVwdGlvbnMuJyk7XG4gIC8vICAgICAgIHJldHVybiBmYWxzZTtcbiAgLy8gICAgIH1cblxuICAvLyAgICAgLy8gQ2hlY2sgaWYgZGlhbGluZyBvd24gbnVtYmVyXG4gIC8vICAgICBpZiAodGhpcy5zYW5pdGl6ZWROdW0gPT09IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCd0d2lsaW9OdW1iZXInKSkge1xuICAvLyAgICAgICBjb25zb2xlLmVycm9yKCdBdHRlbXB0ZWQgdG8gZGlhbCBvd24gbnVtYmVyJyk7XG4gIC8vICAgICAgIHN3YWwoJ0Vycm9yJywgJ1lvdSBjYW5ub3QgZGlhbCB5b3VyIG93biBudW1iZXInKTtcbiAgLy8gICAgICAgcmV0dXJuIGZhbHNlO1xuICAvLyAgICAgfVxuXG4gIC8vICAgICAvLyBDaGVjayBtaWNyb3Bob25lIHBlcm1pc3Npb25zXG4gIC8vICAgICBjb25zdCBoYXNQZXJtaXNzaW9uID0gYXdhaXQgdGhpcy5jaGVja01pY3JvcGhvbmVQZXJtaXNzaW9uKCk7XG4gIC8vICAgICBpZiAoIWhhc1Blcm1pc3Npb24pIHtcbiAgLy8gICAgICAgY29uc29sZS53YXJuKCdNaWNyb3Bob25lIHBlcm1pc3Npb24gbm90IGdyYW50ZWQnKTtcbiAgLy8gICAgICAgYXdhaXQgdGhpcy5hc2tGb3JNaWNyb3Bob25lUGVybWlzc2lvbigpO1xuICAvLyAgICAgICByZXR1cm4gZmFsc2U7XG4gIC8vICAgICB9XG5cbiAgLy8gICAgIGlmICghdGhpcy5zZWxlY3RlZENhbGxlcklkKSB7XG4gIC8vICAgICAgIGNvbnNvbGUuZXJyb3IoJ05vIGNhbGxlciBJRCBzZWxlY3RlZCcpO1xuICAvLyAgICAgICB0aGlzLnNoYWtlRGVkaWNhdGVkQnRuID0gdHJ1ZTtcbiAgLy8gICAgICAgdGhpcy5zaG93RGlhbEFsZXJ0KCdQbGVhc2Ugc2VsZWN0IGEgQzJDIG51bWJlciB0byBjYWxsIGZyb20nKTtcbiAgLy8gICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gIC8vICAgICAgICAgdGhpcy5zaGFrZURlZGljYXRlZEJ0biA9IGZhbHNlO1xuICAvLyAgICAgICB9LCAzMDAwKTtcbiAgLy8gICAgICAgcmV0dXJuIGZhbHNlO1xuICAvLyAgICAgfVxuXG4gIC8vICAgICBjb25zb2xlLmxvZygnR2V0dGluZyBudW1iZXIgd2l0aCBjb3VudHJ5IGNvZGUuLi4nKTtcbiAgLy8gICAgIHRoaXMuY2FsbERhdGEuZGlzcGxheU51bSA9ICcnO1xuICAgICAgXG4gIC8vICAgICB0cnkge1xuICAvLyAgICAgICBhd2FpdCB0aGlzLmdldFRvTnVtYmVyKHRoaXMuc2FuaXRpemVkTnVtKTtcbiAgLy8gICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gIC8vICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGdldHRpbmcgbnVtYmVyIHdpdGggY291bnRyeSBjb2RlOicsIGVycm9yKTtcbiAgLy8gICAgICAgdGhpcy5zaG93RGlhbEFsZXJ0KCdFcnJvciBwcm9jZXNzaW5nIG51bWJlci4gUGxlYXNlIHRyeSBhZ2Fpbi4nKTtcbiAgLy8gICAgICAgcmV0dXJuIGZhbHNlO1xuICAvLyAgICAgfVxuXG4gIC8vICAgICBpZiAodGhpcy50ZXJtaW5hdGVDYWxsKSB7XG4gIC8vICAgICAgIGNvbnNvbGUubG9nKCdDYWxsIHRlcm1pbmF0ZWQgYnkgdXNlcicpO1xuICAvLyAgICAgICB0aGlzLnRlcm1pbmF0ZUNhbGwgPSBmYWxzZTtcbiAgLy8gICAgICAgcmV0dXJuIGZhbHNlO1xuICAvLyAgICAgfVxuXG4gIC8vICAgICAvLyBQcmVwYXJlIGNhbGwgZGF0YVxuICAvLyAgICAgdGhpcy5jYWxsRGF0YSA9IHtcbiAgLy8gICAgICAgLi4udGhpcy5jYWxsRGF0YSxcbiAgLy8gICAgICAgcGhvbmU6IHRoaXMuc2FuaXRpemVkTnVtLFxuICAvLyAgICAgICBpc0luY29taW5nQ2FsbDogZmFsc2UsXG4gIC8vICAgICAgIGRpYWw6IHRydWUsXG4gIC8vICAgICAgIGZyb206IHRoaXMuaXNTbWFydERpYWxDYWxsID8gdGhpcy5jYWxsRGF0YS5mcm9tIDogdGhpcy5zZWxlY3RlZENhbGxlcklkLm51bWJlcixcbiAgLy8gICAgICAgdGltZXN0YW1wOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKClcbiAgLy8gICAgIH07XG5cbiAgLy8gICAgIGNvbnNvbGUubG9nKCdJbml0aWF0aW5nIGNhbGwgd2l0aCBkYXRhOicsIHRoaXMuY2FsbERhdGEpO1xuICAvLyAgICAgdGhpcy5pc0NhbGxJblByb2dyZXNzID0gdHJ1ZTtcbiAgLy8gICAgIHRoaXMuY2FsbEluaXRpYXRlZC5lbWl0KHsgLi4udGhpcy5jYWxsRGF0YSB9KTtcbiAgICAgIFxuICAvLyAgICAgcmV0dXJuIHRydWU7XG4gICAgICBcbiAgLy8gICB9IGNhdGNoIChlcnJvcikge1xuICAvLyAgICAgY29uc29sZS5lcnJvcignRXJyb3IgaW4gaW5pdGlhdGVDYWxsOicsIGVycm9yKTtcbiAgLy8gICAgIHRoaXMuc2hvd0RpYWxBbGVydCgnRmFpbGVkIHRvIGluaXRpYXRlIGNhbGwuIFBsZWFzZSB0cnkgYWdhaW4uJyk7XG4gIC8vICAgICB0aGlzLmlzQ2FsbEluUHJvZ3Jlc3MgPSBmYWxzZTtcbiAgLy8gICAgIHJldHVybiBmYWxzZTtcbiAgLy8gICB9XG4gIC8vICAgICAvL3RoaXMuY2xlYXJBbGxEaWFsZWQoKTtcbiAgLy8gICAvLyB9IGVsc2Uge1xuICAvLyAgIC8vICAgc3dhbCgnRXJyb3InLCAnVHJpYWwgcGVyaW9kIGlzIG92ZXIuIFBsZWFzZSBzZXR1cCBwYXltZW50IG1ldGhvZCB0byBjb250aW51ZSBzZXJ2aWNlcycpXG4gIC8vICAgLy8gfVxuICAvLyB9XG5cblxuICAvLyAgYXN5bmMgaW5pdGlhdGVDYWxsKCkge1xuICAvLyAgIGlmICghdGhpcy5kaWFsZWROdW1iZXIgJiYgdGhpcy5sYXN0RGlhbGVkKSB7XG4gIC8vICAgICB0aGlzLnNhbml0aXplZE51bSA9IHRoaXMubGFzdERpYWxlZC5udW1iZXI7XG4gIC8vICAgfVxuICAvLyAgIGNvbnN0IGlzSW52YWxpZCA9IGF3YWl0IHRoaXMuaXNJbnZhbGlkTnVtYmVyKCk7XG4gIC8vICAgaWYgKGlzSW52YWxpZCkge1xuICAvLyAgICAgcmV0dXJuIGZhbHNlO1xuICAvLyAgIH1cbiAgLy8gICB0aGlzLnNhdmVMYXN0RGlhbGVkKCk7XG4gIC8vICAgdGhpcy5pc1NhdmVkQ29udGFjdERpYWxsZWQoKTtcbiAgLy8gICAvL2xldCBpc0NhbGxlcklkU2V0ID0gYXdhaXQgdGhpcy5pc0NhbGxlcklkU2V0KCk7XG4gIC8vICAgdGhpcy5pc1BheW1lbnREdWUgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgncGF5bWVudER1ZScpID09ICdmYWxzZScgPyBmYWxzZSA6IHRydWU7XG4gIC8vICAgaWYgKHRoaXMuaXNQYXltZW50RHVlKSB7XG4gIC8vICAgICBzd2FsKCdXYXJuaW5nJywgJ1BsZWFzZSBub3RlIHRoYXQgeW91ciBwYXltZW50IGlzIGR1ZSwgVG8gY29udGludWUgb24geW91ciBzZXJ2aWNlcyBraW5kbHkgc3Vic2NyaWJlIHRvIHVzZSB1bmludGVycnVwdGVkIHNlcnZpY2VzLicpO1xuICAvLyAgICAgcmV0dXJuO1xuICAvLyAgIH1cbiAgLy8gICB0aGlzLmlzVHJpYWxQZXJpb2RPdmVyID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3RyaWFsT3ZlcicpID09ICdmYWxzZScgPyBmYWxzZSA6IHRydWU7XG4gIC8vICAgLy8gaWYgKCF0aGlzLmlzVHJpYWxQZXJpb2RPdmVyKSB7XG4gIC8vICAgICBpZiAodGhpcy5zYW5pdGl6ZWROdW0gPT0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3R3aWxpb051bWJlcicpKSB7XG4gIC8vICAgICAgIHN3YWwoJ0Vycm9yJywgJ1lvdSBjYW4gbm90IGRpYWwgdGhpcyBudW1iZXInKTtcbiAgLy8gICAgICAgcmV0dXJuO1xuICAvLyAgICAgfVxuXG4gIC8vICAgICBjb25zdCBoYXNQZXJtaXNzaW9uID0gYXdhaXQgdGhpcy5jaGVja01pY3JvcGhvbmVQZXJtaXNzaW9uKCk7XG4gIC8vICAgICBpZiAoaGFzUGVybWlzc2lvbikge1xuICAvLyAgICAgICBpZiAodGhpcy5zZWxlY3RlZENhbGxlcklkKSB7XG4gIC8vICAgICAgICAgLy9jbGVhciBkaXNwbGF5TnVtIGlmIHZhbHVlIGlzIGJpbmRlZCBmcm9tIHByZXZpb3VzIGNhbGxcbiAgLy8gICAgICAgICB0aGlzLmNhbGxEYXRhLmRpc3BsYXlOdW0gPSAnJztcbiAgLy8gICAgICAgICAvLyBnZXQgbnVtYmVyIHRvIGJlIGRpYWxsZWQgZnJvbSBiYWNrZW5kXG4gIC8vICAgICAgICAgYXdhaXQgdGhpcy5nZXRUb051bWJlcih0aGlzLnNhbml0aXplZE51bSk7XG4gIC8vICAgICAgICAgaWYgKHRoaXMudGVybWluYXRlQ2FsbCkge1xuICAvLyAgICAgICAgICAgdGhpcy50ZXJtaW5hdGVDYWxsID0gZmFsc2U7XG4gIC8vICAgICAgICAgICByZXR1cm47XG4gIC8vICAgICAgICAgfVxuICAvLyAgICAgICAgIHRoaXMuY2FsbERhdGEucGhvbmUgPSB0aGlzLnNhbml0aXplZE51bTtcbiAgLy8gICAgICAgICB0aGlzLmNhbGxEYXRhLmlzSW5jb21pbmdDYWxsID0gZmFsc2U7XG4gIC8vICAgICAgICAgdGhpcy5jYWxsRGF0YS5kaWFsID0gdHJ1ZTtcbiAgLy8gICAgICAgICBpZiAoIXRoaXMuaXNTbWFydERpYWxDYWxsKSB7XG4gIC8vICAgICAgICAgICB0aGlzLmNhbGxEYXRhLmZyb20gPSB0aGlzLnNlbGVjdGVkQ2FsbGVySWQubnVtYmVyO1xuICAvLyAgICAgICAgIH1cbiAgICAgICAgICBcbiAgLy8gICAgICAgICB0aGlzLmlzQ2FsbEluUHJvZ3Jlc3MgPSB0cnVlO1xuICAvLyAgICAgICAgICAgICAgIHRoaXMuY2FsbERhdGEgPSB7XG4gIC8vICAgICAgICAgICAgICAgLi4udGhpcy5jYWxsRGF0YSxcbiAgLy8gICAgICAgICAgICAgICBwaG9uZTogdGhpcy5zYW5pdGl6ZWROdW0sXG4gIC8vICAgICAgICAgICAgICAgaXNJbmNvbWluZ0NhbGw6IGZhbHNlLFxuICAvLyAgICAgICAgICAgICAgIGRpYWw6IHRydWUsXG4gIC8vICAgICAgICAgICAgICAgZnJvbTogdGhpcy5pc1NtYXJ0RGlhbENhbGwgPyB0aGlzLmNhbGxEYXRhLmZyb20gOiB0aGlzLnNlbGVjdGVkQ2FsbGVySWQubnVtYmVyLFxuICAvLyAgICAgICAgICAgICAgIHRpbWVzdGFtcDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpXG4gIC8vICAgICAgICAgICAgIH07XG5cbiAgLy8gICAgICAgICAgICAgY29uc29sZS5sb2coJ0luaXRpYXRpbmcgY2FsbCB3aXRoIGRhdGE6JywgdGhpcy5jYWxsRGF0YSk7XG4gIC8vICAgICAgICAgICAgIHRoaXMuaXNDYWxsSW5Qcm9ncmVzcyA9IHRydWU7XG4gIC8vICAgICAgICAgICAgIHRoaXMuY2FsbEluaXRpYXRlZC5lbWl0KHsgLi4udGhpcy5jYWxsRGF0YSB9KTtcbiAgLy8gICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgLy8gICAgICAgfSBlbHNlIHtcbiAgLy8gICAgICAgICB0aGlzLnNoYWtlRGVkaWNhdGVkQnRuID0gdHJ1ZTtcbiAgLy8gICAgICAgICB0aGlzLnNob3dEaWFsQWxlcnQoJ1NlbGVjdCBhIEMyQyBudW1iZXIgdG8gY2FsbCcpO1xuICAvLyAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAvLyAgICAgICAgICAgdGhpcy5zaGFrZURlZGljYXRlZEJ0biA9IGZhbHNlO1xuICAvLyAgICAgICAgIH0sIDMwMDApO1xuICAvLyAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgLy8gICAgICAgfVxuICAvLyAgICAgICAvL3RoaXMuY2FsbGluZ09wZW5FdmVudC5lbWl0KHsgcGhvbmU6IHRoaXMuZGlhbGVkTnVtYmVyIH0pO1xuICAvLyAgICAgfSBlbHNlIHtcbiAgLy8gICAgICAgYXdhaXQgdGhpcy5hc2tGb3JNaWNyb3Bob25lUGVybWlzc2lvbigpO1xuICAvLyAgICAgfVxuICAvLyAgICAgLy90aGlzLmNsZWFyQWxsRGlhbGVkKCk7XG4gIC8vICAgLy8gfSBlbHNlIHtcbiAgLy8gICAvLyAgIHN3YWwoJ0Vycm9yJywgJ1RyaWFsIHBlcmlvZCBpcyBvdmVyLiBQbGVhc2Ugc2V0dXAgcGF5bWVudCBtZXRob2QgdG8gY29udGludWUgc2VydmljZXMnKVxuICAvLyAgIC8vIH1cbiAgLy8gfVxuXG5cbiAgLy8gYXN5bmMgaW5pdGlhdGVDYWxsKCkge1xuICAvLyAgIHRyeXtcbiAgLy8gICAgIGlmICghdGhpcy5kaWFsZWROdW1iZXIgJiYgdGhpcy5sYXN0RGlhbGVkKSB7XG4gIC8vICAgICAgIHRoaXMuc2FuaXRpemVkTnVtID0gdGhpcy5sYXN0RGlhbGVkLm51bWJlcjtcbiAgLy8gICAgIH1cblxuICAvLyAgICAgY29uc3QgaXNJbnZhbGlkID0gYXdhaXQgdGhpcy5pc0ludmFsaWROdW1iZXIoKTtcbiAgLy8gICAgIGlmIChpc0ludmFsaWQpIHtcbiAgLy8gICAgICAgcmV0dXJuIGZhbHNlO1xuICAvLyAgICAgfVxuICAvLyAgICAgdGhpcy5zYXZlTGFzdERpYWxlZCgpO1xuICAvLyAgICAgdGhpcy5pc1NhdmVkQ29udGFjdERpYWxsZWQoKTtcbiAgLy8gICAgIC8vbGV0IGlzQ2FsbGVySWRTZXQgPSBhd2FpdCB0aGlzLmlzQ2FsbGVySWRTZXQoKTtcblxuICAvLyAgICAgdGhpcy5pc1BheW1lbnREdWUgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgncGF5bWVudER1ZScpID09ICdmYWxzZScgPyBmYWxzZSA6IHRydWU7XG4gIC8vICAgICBpZiAodGhpcy5pc1BheW1lbnREdWUpIHtcbiAgLy8gICAgICAgc3dhbCgnV2FybmluZycsICdQbGVhc2Ugbm90ZSB0aGF0IHlvdXIgcGF5bWVudCBpcyBkdWUsIFRvIGNvbnRpbnVlIG9uIHlvdXIgc2VydmljZXMga2luZGx5IHN1YnNjcmliZSB0byB1c2UgdW5pbnRlcnJ1cHRlZCBzZXJ2aWNlcy4nKTtcbiAgLy8gICAgICAgcmV0dXJuIGZhbHNlO1xuICAvLyAgICAgfVxuXG4gIC8vICAgICB0aGlzLmlzVHJpYWxQZXJpb2RPdmVyID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3RyaWFsT3ZlcicpID09ICdmYWxzZScgPyBmYWxzZSA6IHRydWU7XG4gIC8vICAgICAvLyBpZiAoIXRoaXMuaXNUcmlhbFBlcmlvZE92ZXIpIHtcbiAgLy8gICAgICAgaWYgKHRoaXMuc2FuaXRpemVkTnVtID09IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCd0d2lsaW9OdW1iZXInKSkge1xuICAvLyAgICAgICAgIHN3YWwoJ0Vycm9yJywgJ1lvdSBjYW4gbm90IGRpYWwgdGhpcyBudW1iZXInKTtcbiAgLy8gICAgICAgICByZXR1cm4gZmFsc2U7XG4gIC8vICAgICAgIH1cblxuICAvLyAgICAgICBjb25zdCBoYXNQZXJtaXNzaW9uID0gYXdhaXQgdGhpcy5jaGVja01pY3JvcGhvbmVQZXJtaXNzaW9uKCk7XG4gIC8vICAgICAgIGlmIChoYXNQZXJtaXNzaW9uKSB7XG4gIC8vICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRDYWxsZXJJZCkge1xuICAvLyAgICAgICAgICAgLy9jbGVhciBkaXNwbGF5TnVtIGlmIHZhbHVlIGlzIGJpbmRlZCBmcm9tIHByZXZpb3VzIGNhbGxcbiAgLy8gICAgICAgICAgIHRoaXMuY2FsbERhdGEuZGlzcGxheU51bSA9ICcnO1xuICAvLyAgICAgICAgICAgLy8gZ2V0IG51bWJlciB0byBiZSBkaWFsbGVkIGZyb20gYmFja2VuZFxuICAvLyAgICAgICAgICAgYXdhaXQgdGhpcy5nZXRUb051bWJlcih0aGlzLnNhbml0aXplZE51bSk7XG4gIC8vICAgICAgICAgICBpZiAodGhpcy50ZXJtaW5hdGVDYWxsKSB7XG4gIC8vICAgICAgICAgICAgIHRoaXMudGVybWluYXRlQ2FsbCA9IGZhbHNlO1xuICAvLyAgICAgICAgICAgICByZXR1cm47XG4gIC8vICAgICAgICAgICB9XG4gIC8vICAgICAgICAgICB0aGlzLmNhbGxEYXRhLnBob25lID0gdGhpcy5zYW5pdGl6ZWROdW07XG4gIC8vICAgICAgICAgICB0aGlzLmNhbGxEYXRhLmlzSW5jb21pbmdDYWxsID0gZmFsc2U7XG4gIC8vICAgICAgICAgICB0aGlzLmNhbGxEYXRhLmRpYWwgPSB0cnVlO1xuICAvLyAgICAgICAgICAgaWYgKCF0aGlzLmlzU21hcnREaWFsQ2FsbCkge1xuICAvLyAgICAgICAgICAgICB0aGlzLmNhbGxEYXRhLmZyb20gPSB0aGlzLnNlbGVjdGVkQ2FsbGVySWQubnVtYmVyO1xuICAvLyAgICAgICAgICAgfVxuICAgICAgICAgICAgXG4gIC8vICAgICAgICAgICB0aGlzLmlzQ2FsbEluUHJvZ3Jlc3MgPSB0cnVlO1xuICAvLyAgICAgICAgICAgICAgICAgdGhpcy5jYWxsRGF0YSA9IHtcbiAgLy8gICAgICAgICAgICAgICAgIC4uLnRoaXMuY2FsbERhdGEsXG4gIC8vICAgICAgICAgICAgICAgICBwaG9uZTogdGhpcy5zYW5pdGl6ZWROdW0sXG4gIC8vICAgICAgICAgICAgICAgICBpc0luY29taW5nQ2FsbDogZmFsc2UsXG4gIC8vICAgICAgICAgICAgICAgICBkaWFsOiB0cnVlLFxuICAvLyAgICAgICAgICAgICAgICAgZnJvbTogdGhpcy5pc1NtYXJ0RGlhbENhbGwgPyB0aGlzLmNhbGxEYXRhLmZyb20gOiB0aGlzLnNlbGVjdGVkQ2FsbGVySWQubnVtYmVyLFxuICAvLyAgICAgICAgICAgICAgICAgdGltZXN0YW1wOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKClcbiAgLy8gICAgICAgICAgICAgICB9O1xuXG4gIC8vICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ0luaXRpYXRpbmcgY2FsbCB3aXRoIGRhdGE6JywgdGhpcy5jYWxsRGF0YSk7XG4gIC8vICAgICAgICAgICAgICAgdGhpcy5pc0NhbGxJblByb2dyZXNzID0gdHJ1ZTtcbiAgLy8gICAgICAgICAgICAgICB0aGlzLmNhbGxJbml0aWF0ZWQuZW1pdCh7IC4uLnRoaXMuY2FsbERhdGEgfSk7XG4gIC8vICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgLy8gICAgICAgICB9IGVsc2Uge1xuICAvLyAgICAgICAgICAgdGhpcy5zaGFrZURlZGljYXRlZEJ0biA9IHRydWU7XG4gIC8vICAgICAgICAgICB0aGlzLnNob3dEaWFsQWxlcnQoJ1NlbGVjdCBhIEMyQyBudW1iZXIgdG8gY2FsbCcpO1xuICAvLyAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gIC8vICAgICAgICAgICAgIHRoaXMuc2hha2VEZWRpY2F0ZWRCdG4gPSBmYWxzZTtcbiAgLy8gICAgICAgICAgIH0sIDMwMDApO1xuICAvLyAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAvLyAgICAgICAgIH1cbiAgLy8gICAgICAgICAvL3RoaXMuY2FsbGluZ09wZW5FdmVudC5lbWl0KHsgcGhvbmU6IHRoaXMuZGlhbGVkTnVtYmVyIH0pO1xuICAvLyAgICAgICB9IGVsc2Uge1xuICAvLyAgICAgICAgIGF3YWl0IHRoaXMuYXNrRm9yTWljcm9waG9uZVBlcm1pc3Npb24oKTtcbiAgLy8gICAgICAgfVxuICAvLyAgICAgICAvL3RoaXMuY2xlYXJBbGxEaWFsZWQoKTtcbiAgLy8gICAgIC8vIH0gZWxzZSB7XG4gIC8vICAgICAvLyAgIHN3YWwoJ0Vycm9yJywgJ1RyaWFsIHBlcmlvZCBpcyBvdmVyLiBQbGVhc2Ugc2V0dXAgcGF5bWVudCBtZXRob2QgdG8gY29udGludWUgc2VydmljZXMnKVxuICAvLyAgICAgLy8gfVxuICAvLyAgIH1jYXRjaChlKXtcbiAgLy8gICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGluIGluaXRpYXRlQ2FsbDonLCBlKTtcblxuICAvLyAgICAgdGhpcy5zaG93RGlhbEFsZXJ0KCdGYWlsZWQgdG8gaW5pdGlhdGUgY2FsbC4gUGxlYXNlIHRyeSBhZ2Fpbi4nKTtcblxuICAvLyAgICAgdGhpcy5pc0NhbGxJblByb2dyZXNzID0gZmFsc2U7XG5cbiAgLy8gICAgIHJldHVybiBmYWxzZTtcbiAgLy8gICB9XG4gIC8vIH1cblxuXG4gIGFzeW5jIGluaXRpYXRlQ2FsbCgpIHtcbiAgICB0cnkge1xuICAgICAgaWYgKCF0aGlzLmRpYWxlZE51bWJlciAmJiB0aGlzLmxhc3REaWFsZWQpIHtcbiAgICAgICAgdGhpcy5zYW5pdGl6ZWROdW0gPSB0aGlzLmxhc3REaWFsZWQubnVtYmVyO1xuICAgICAgfVxuICBcbiAgICAgIGNvbnN0IGlzSW52YWxpZCA9IGF3YWl0IHRoaXMuaXNJbnZhbGlkTnVtYmVyKCk7XG4gICAgICBpZiAoaXNJbnZhbGlkKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHRoaXMuc2F2ZUxhc3REaWFsZWQoKTtcbiAgICAgIHRoaXMuaXNTYXZlZENvbnRhY3REaWFsbGVkKCk7XG4gIFxuICAgICAgdGhpcy5pc1BheW1lbnREdWUgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgncGF5bWVudER1ZScpID09PSAnZmFsc2UnID8gZmFsc2UgOiB0cnVlO1xuICAgICAgaWYgKHRoaXMuaXNQYXltZW50RHVlKSB7XG4gICAgICAgIHN3YWwoJ1dhcm5pbmcnLCAnUGxlYXNlIG5vdGUgdGhhdCB5b3VyIHBheW1lbnQgaXMgZHVlLCBUbyBjb250aW51ZSBvbiB5b3VyIHNlcnZpY2VzIGtpbmRseSBzdWJzY3JpYmUgdG8gdXNlIHVuaW50ZXJydXB0ZWQgc2VydmljZXMuJyk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgXG4gICAgICB0aGlzLmlzVHJpYWxQZXJpb2RPdmVyID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3RyaWFsT3ZlcicpID09PSAnZmFsc2UnID8gZmFsc2UgOiB0cnVlO1xuICAgICAgXG4gICAgICBpZiAodGhpcy5zYW5pdGl6ZWROdW0gPT09IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCd0d2lsaW9OdW1iZXInKSkge1xuICAgICAgICBzd2FsKCdFcnJvcicsICdZb3UgY2FuIG5vdCBkaWFsIHRoaXMgbnVtYmVyJyk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgXG4gICAgICBjb25zdCBoYXNQZXJtaXNzaW9uID0gYXdhaXQgdGhpcy5jaGVja01pY3JvcGhvbmVQZXJtaXNzaW9uKCk7XG4gICAgICBpZiAoIWhhc1Blcm1pc3Npb24pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5hc2tGb3JNaWNyb3Bob25lUGVybWlzc2lvbigpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gIFxuICAgICAgaWYgKCF0aGlzLnNlbGVjdGVkQ2FsbGVySWQpIHtcbiAgICAgICAgdGhpcy5zaGFrZURlZGljYXRlZEJ0biA9IHRydWU7XG4gICAgICAgIHRoaXMuc2hvd0RpYWxBbGVydCgnU2VsZWN0IGEgQzJDIG51bWJlciB0byBjYWxsJyk7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuc2hha2VEZWRpY2F0ZWRCdG4gPSBmYWxzZTtcbiAgICAgICAgfSwgMzAwMCk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgXG4gICAgICAvLyBDbGVhciBkaXNwbGF5TnVtIGlmIHZhbHVlIGlzIGJvdW5kIGZyb20gcHJldmlvdXMgY2FsbFxuICAgICAgdGhpcy5jYWxsRGF0YS5kaXNwbGF5TnVtID0gJyc7XG4gICAgICBcbiAgICAgIC8vIEdldCBudW1iZXIgdG8gYmUgZGlhbGVkIGZyb20gYmFja2VuZFxuICAgICAgYXdhaXQgdGhpcy5nZXRUb051bWJlcih0aGlzLnNhbml0aXplZE51bSk7XG4gICAgICBpZiAodGhpcy50ZXJtaW5hdGVDYWxsKSB7XG4gICAgICAgIHRoaXMudGVybWluYXRlQ2FsbCA9IGZhbHNlO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gIFxuICAgICAgLy8gVXBkYXRlIGNhbGwgZGF0YSBpbiBhIHNpbmdsZSBvcGVyYXRpb25cbiAgICAgIHRoaXMuY2FsbERhdGEgPSB7XG4gICAgICAgIC4uLnRoaXMuY2FsbERhdGEsXG4gICAgICAgIHBob25lOiB0aGlzLnNhbml0aXplZE51bSxcbiAgICAgICAgaXNJbmNvbWluZ0NhbGw6IGZhbHNlLFxuICAgICAgICBkaWFsOiB0cnVlLFxuICAgICAgICBmcm9tOiB0aGlzLmlzU21hcnREaWFsQ2FsbCA/IHRoaXMuY2FsbERhdGEuZnJvbSA6IHRoaXMuc2VsZWN0ZWRDYWxsZXJJZC5udW1iZXIsXG4gICAgICAgIHRpbWVzdGFtcDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpXG4gICAgICB9O1xuICBcbiAgICAgIC8vIGNvbnNvbGUubG9nKCdJbml0aWF0aW5nIGNhbGwgd2l0aCBkYXRhOicsIHRoaXMuY2FsbERhdGEpO1xuICAgICAgY29uc29sZS5sb2coJ2RkMTAnKVxuICAgICAgdGhpcy5pc0NhbGxJblByb2dyZXNzID0gdHJ1ZTtcbiAgICAgIHRoaXMuY2FsbEluaXRpYXRlZC5lbWl0KHsgLi4udGhpcy5jYWxsRGF0YSB9KTtcbiAgICAgIHJldHVybiB0cnVlO1xuICBcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyBjb25zb2xlLmVycm9yKCdFcnJvciBpbiBpbml0aWF0ZUNhbGw6JywgZSk7XG4gICAgICB0aGlzLnNob3dEaWFsQWxlcnQoJ0ZhaWxlZCB0byBpbml0aWF0ZSBjYWxsLiBQbGVhc2UgdHJ5IGFnYWluLicpO1xuICAgICAgY29uc29sZS5sb2coJ2RkMTEnKVxuICAgICAgdGhpcy5pc0NhbGxJblByb2dyZXNzID0gZmFsc2U7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgaXNJbnZhbGlkTnVtYmVyKCkge1xuICAgIHRyeSB7XG4gICAgICBpZih0aGlzLnNhbml0aXplZE51bSA9PSAnJyl7XG4gICAgICAgIHRoaXMuc2hvd0RpYWxBbGVydCgnSW52YWxpZCBOdW1iZXInKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBjb25zdCB2YWxpZE51bWJlclBhdHRlcm4gPSAvXlsrXFxkXFxzKCktXSokLzsgLy8gUmVndWxhciBleHByZXNzaW9uIHRvIG1hdGNoIHZhbGlkIGNoYXJhY3RlcnNcbiAgICAgIGNvbnN0IHBob25lTnVtYmVyID0gdGhpcy5zYW5pdGl6ZWROdW07XG4gICAgICBpZiAoIXZhbGlkTnVtYmVyUGF0dGVybi50ZXN0KHBob25lTnVtYmVyKSkge1xuICAgICAgICB0aGlzLnNob3dEaWFsQWxlcnQoJ0ludmFsaWQgTnVtYmVyJyk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aGlzLnNob3dEaWFsQWxlcnQoJ0ludmFsaWQgTnVtYmVyJyk7XG4gICAgICByZXR1cm4gdHJ1ZTsgLy8gUmV0dXJuIHRydWUgaWYgYW4gZXJyb3Igb2NjdXJyZWQsIG1lYW5pbmcgdGhlIG51bWJlciBpcyBpbnZhbGlkXG4gICAgfVxuICB9XG4gIFxuICBzYXZlTGFzdERpYWxlZCgpIHtcbiAgICBjb25zdCBjb250YWN0ID0gdGhpcy5maWx0ZXJlZENvbnRhY3RMaXN0LmZpbmQoKGM6IGFueSkgPT4gYy5udW1iZXJzTGlzdC5zb21lKChuOiBhbnkpID0+IG4ubnVtYmVyID09PSB0aGlzLmRpYWxlZE51bWJlcikpO1xuICAgIGlmIChjb250YWN0KSB7XG4gICAgICB0aGlzLmxhc3REaWFsZWQgPSB7XG4gICAgICAgIG5hbWU6IGNvbnRhY3QubmFtZSxcbiAgICAgICAgaW1hZ2U6IGNvbnRhY3QuaW1hZ2UsXG4gICAgICAgIG51bWJlcjogdGhpcy5kaWFsZWROdW1iZXJcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmKHRoaXMuZGlhbGVkTnVtYmVyKXtcbiAgICAgICAgdGhpcy5sYXN0RGlhbGVkID0geyBudW1iZXI6IHRoaXMuZGlhbGVkTnVtYmVyIH07XG4gICAgICB9XG4gICAgICBcbiAgICB9XG4gIH1cbiAgaXNTYXZlZENvbnRhY3REaWFsbGVkKCl7XG4gICAgbGV0IHBob25lTnVtID0gdGhpcy5zYW5pdGl6ZWROdW0ucmVwbGFjZSgvXFxzKy9nLCAnJyk7XG4gICAgbGV0IGNvbnRhY3QgPSAgdGhpcy5jb250YWN0TGlzdC5maWx0ZXIoKGNvbnRhY3Q6IGFueSkgPT4ge1xuICAgICAgcmV0dXJuIGNvbnRhY3QubnVtYmVyc0xpc3Quc29tZSgobnVtOiBhbnkpID0+IG51bS5udW1iZXIgPT09IHBob25lTnVtKVxuICAgIH0pO1xuICAgIGlmKGNvbnRhY3QubGVuZ3RoKXtcbiAgICAgIHRoaXMuY2FsbERhdGEubmFtZSA9IGAke2NvbnRhY3RbMF0uZmlyc3ROYW1lfSAke2NvbnRhY3RbMF0ubWlkZGxlTmFtZX0gJHtjb250YWN0WzBdLmxhc3ROYW1lfWAudG9Mb3dlckNhc2UoKTtcbiAgICAgIHRoaXMuY2FsbERhdGEuaW1nID0gY29udGFjdFswXS5pbWFnZSB8fCAnYXNzZXRzL2ltYWdlcy91c2VyLmpwZyc7XG4gICAgICB0aGlzLmNhbGxEYXRhLnBob25lID0gdGhpcy5zYW5pdGl6ZWROdW07XG5cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgc2hvd0RpYWxBbGVydChtZXNzYWdlOiBzdHJpbmcpIHtcbiAgICB0aGlzLmRpYWxBbGVydCA9IHtcbiAgICAgIG1zZzogbWVzc2FnZSxcbiAgICAgIHNob3c6IHRydWVcbiAgICB9O1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5kaWFsQWxlcnQuc2hvdyA9IGZhbHNlO1xuICAgIH0sIDMwMDApO1xuICB9XG4gIGFzeW5jIGlzQ2FsbGVySWRTZXQoKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHRrbiA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdleHRfdG9rZW4nKTtcbiAgICAgIGNvbnN0IHJlczogYW55ID0gYXdhaXQgdGhpcy5leHRTZXJ2aWNlLmZldGNoQ2FsbGVySWQodGtuIHx8ICcnKS50b1Byb21pc2UoKTtcbiAgICAgIGlmIChyZXMuc3RhdHVzID09IDIwMCkge1xuICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgndHJpYWxPdmVyJywgcmVzLnRyaWFsT3Zlcik7XG4gICAgICAgIHRoaXMudHdpbGlvU2VydmljZS5pc1RyaWFsT3Zlci5uZXh0KHJlcy50cmlhbE92ZXIpO1xuICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgncGF5bWVudER1ZScsIHJlcy5wYXltZW50RHVlKTtcbiAgICAgICAgdGhpcy50d2lsaW9TZXJ2aWNlLmlzUGF5bWVudER1ZS5uZXh0KHJlcy5wYXltZW50RHVlKTtcbiAgICAgIH1cbiAgICAgIGlmIChyZXMuY2FsbGVyaWQpIHtcbiAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ2NhbGxlcklEJywgcmVzLmNhbGxlcmlkKTtcblxuICAgICAgICB0aGlzLmV4dFNlcnZpY2UuY2hhbmdlTWVzc2FnZShyZXMuY2FsbGVyaWQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ2NhbGxlcklEJywgJ05vdCBzZXQnKTtcbiAgICAgICAgdGhpcy5leHRTZXJ2aWNlLmNoYW5nZU1lc3NhZ2UoJ05vdCBzZXQnKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIChsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnY2FsbGVySUQnKSAhPT0gJ05vdCBzZXQnKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zb2xlLmxvZyhlKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbiAgYXN5bmMgY2hlY2tNaWNyb3Bob25lUGVybWlzc2lvbigpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgc3RyZWFtID0gYXdhaXQgbmF2aWdhdG9yLm1lZGlhRGV2aWNlcy5nZXRVc2VyTWVkaWEoeyBhdWRpbzogdHJ1ZSB9KTtcbiAgICAgIHN0cmVhbS5nZXRUcmFja3MoKS5mb3JFYWNoKHRyYWNrID0+IHRyYWNrLnN0b3AoKSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKChlcnJvciBhcyBhbnkpLm5hbWUgPT09ICdOb3RBbGxvd2VkRXJyb3InKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgYXN5bmMgYXNrRm9yTWljcm9waG9uZVBlcm1pc3Npb24oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHN0cmVhbSA9IGF3YWl0IG5hdmlnYXRvci5tZWRpYURldmljZXMuZ2V0VXNlck1lZGlhKHsgYXVkaW86IHRydWUgfSk7XG4gICAgICBzdHJlYW0uZ2V0VHJhY2tzKCkuZm9yRWFjaCh0cmFjayA9PiB0cmFjay5zdG9wKCkpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdVc2VyIGRlbmllZCBtaWNyb3Bob25lIHBlcm1pc3Npb246JywgZXJyb3IpO1xuICAgIH1cbiAgfVxuICAvLyBiZWxvdyBmdW5jdGlvbiBpcyB0byBnZXQgdGhlIGNvdW50cnkgY29kZSB3aXRoIG51bWJlciBmcm9tIHNlcnZlciBcbiAgYXN5bmMgZ2V0VG9OdW1iZXIoZGlhbGVkTnVtYmVyOiBzdHJpbmcpIHtcbiAgICBcbiAgICAgIGlmIChkaWFsZWROdW1iZXJbMF0gIT09ICcrJykge1xuICAgICAgICAvLyB0aGlzIGlzIGNhc2Ugd2hlbiB1c2VyIGdlb2xvY2F0aW9uIGRpYWwgY29kZSBpcyBvblxuICAgICAgICBsZXQgaXBBZGRyZXNzOiBhbnkgPSBhd2FpdCB0aGlzLmlwU2VydmljZS5nZXRJcEFkZHJlc3NJbmZvKCkudG9Qcm9taXNlKCk7XG4gICAgICAgIGNvbnN0IHJlczogYW55ID0gYXdhaXQgdGhpcy50d2lsaW9TZXJ2aWNlLmdldFRvTnVtYmVyKGRpYWxlZE51bWJlcixpcEFkZHJlc3MuYWRkcmVzcy5jb3VudHJ5Q29kZSkudG9Qcm9taXNlKCk7XG4gICAgICAgIGlmIChyZXMuc3RhdHVzID09IDIwMCkge1xuICAgICAgICAgIHRoaXMudG9hc3RUaW1lb3V0ID0gcmVzLnRpbWVJbnRlcnZhbCAqIDEwMDA7XG4gICAgICAgICAgYXdhaXQgdGhpcy5zaG93TnVtYmVyVG9hc3QocmVzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICB9XG4gIGlzQWxlcnRFbmFibGUoKSB7XG4gICAgcmV0dXJuIGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdpc0FsZXJ0RW5hYmxlJyk7XG4gIH1cbiAgYXN5bmMgc2hvd051bWJlclRvYXN0KGRhdGE6IGFueSkge1xuICAgIC8vIGNvbnN0IGlzQWxlcnRPbiA9IChsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnaXNDb3VudHJ5Q29kZVRvYXN0T24nKSk7XG4gICAgLy8gaWYgKGlzQWxlcnRPbiA9PSAndHJ1ZScpIHtcbiAgICAgIHRoaXMuY2FsbE51bWJlclRvYXN0LnNob3cgPSB0cnVlO1xuICAgICAgdGhpcy5jYWxsTnVtYmVyVG9hc3QubnVtYmVyID0gZGF0YS50b051bWJlcjtcbiAgICAgIHRoaXMuY2FsbE51bWJlclRvYXN0LmRpc3BsYXlOdW0gPSBkYXRhLmRpc3BsYXlOdW1iZXI7XG4gICAgLy8gfVxuICAgIFxuICAgIFxuICAgIHRoaXMuY2FsbERhdGEuZGlzcGxheU51bSA9IGRhdGEuZGlzcGxheU51bWJlcjtcbiAgICAvL3RoaXMuY2FsbERhdGEucGhvbmUgPSBkYXRhLnRvTnVtYmVyO1xuICAgIGF3YWl0IHRoaXMuZGVsYXkodGhpcy50b2FzdFRpbWVvdXQpO1xuICAgIHRoaXMuZGlhbGVkTnVtYmVyID0gZGF0YS50b051bWJlcjtcbiAgICB0aGlzLnNhbml0aXplZE51bSA9IGRhdGEudG9OdW1iZXI7XG4gICAgdGhpcy5jYWxsTnVtYmVyVG9hc3Quc2hvdyA9IGZhbHNlO1xuICAgIHRoaXMuY2FsbE51bWJlclRvYXN0Lm51bWJlciA9ICcnO1xuICAgIHRoaXMuY2FsbE51bWJlclRvYXN0LmRpc3BsYXlOdW0gPSAnJztcbiAgfVxuICBkZWxheShtczogbnVtYmVyKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KHJlc29sdmUgPT4gc2V0VGltZW91dChyZXNvbHZlLCBtcykpO1xuICB9XG4gIGlzTWluaW1pc2VkOiBib29sZWFuID0gZmFsc2U7XG4gIG9uTWluaW1pc2UoaXNNaW5pbWlzZWQ6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmlzTWluaW1pc2VkID0gaXNNaW5pbWlzZWQ7XG4gICAgdGhpcy5taW5pbWlzZUV2ZW50LmVtaXQoaXNNaW5pbWlzZWQpO1xuICB9XG4gIGhhbmRsZU51bWJlclBhc3RlKGV2ZW50OiBDbGlwYm9hcmRFdmVudCk6IHZvaWQge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgY29uc3QgY2xpcGJvYXJkRGF0YSA9IGV2ZW50LmNsaXBib2FyZERhdGEgfHwgKHdpbmRvdyBhcyBhbnkpLmNsaXBib2FyZERhdGE7XG4gICAgY29uc3QgcGFzdGVkRGF0YSA9IGNsaXBib2FyZERhdGEuZ2V0RGF0YSgndGV4dCcpO1xuXG4gICAgLy8gTG9nIHRoZSBwYXN0ZWQgY29udGVudCB0byB0aGUgY29uc29sZVxuICAgIGlmKHBhc3RlZERhdGEpe1xuICAgICAgdGhpcy5kaWFsZWROdW1iZXIgPSBwYXN0ZWREYXRhO1xuICAgICAgdGhpcy5zYW5pdGl6ZWROdW0gPSBwYXN0ZWREYXRhO1xuICAgIH1cbiAgICBcbiAgfVxuICBvbkVudGVyKG51bTpzdHJpbmcpIHtcbiAgICAvLyBjb25zb2xlLmxvZyhudW0sICdudW1iZXIgZm4nKVxuICAgIHRoaXMuZGlhbGVkTnVtYmVyID0gdGhpcy5kaWFsZWROdW1iZXIgK251bTtcbiAgICB0aGlzLnNhbml0aXplZE51bSA9IHRoaXMuZGlhbGVkTnVtYmVyO1xuICAgIHRoaXMuc2hvd0lucHV0Q2xlYXJCdG4gPSB0cnVlO1xuICAgIHRoaXMubnVtYmVyRGlhbGVkLmVtaXQodGhpcy5kaWFsZWROdW1iZXIpO1xuICB9XG4gIFxuICBnZXRVc2VyQ2FsbFNldHRpbmcoKSB7XG4gICAgY29uc3QgdGtuID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2V4dF90b2tlbicpO1xuICAgIHRoaXMuZXh0U2VydmljZS5mZXRjaENhbGxlcklkKHRrbiB8fCAnJykuc3Vic2NyaWJlKChyZXNwOiBhbnkpID0+IHtcbiAgICAgIGlmIChyZXNwLnN0YXR1cyA9PSAyMDApIHtcbiAgICAgICAgLy90aGlzLmNhbGxQcmVmZXJuY2UgPSByZXNwLnVzZXJTZXR0aW5nO1xuICAgICAgICB0aGlzLmNhbGxQcmVmZXJlbmNlID0gcmVzcC5jYWxsZXJpZDtcbiAgICAgICAgdGhpcy5nZXRDYWxsZXJJZExpc3QoKTtcbiAgICAgIH1cbiAgICB9KVxuICB9XG4gIG9uRGVkaWNhdGVkTnVtU2VsZWN0KGlkOiBhbnkpIHtcbiAgICB0aGlzLnNlbGVjdGVkQ2FsbGVySWQgPSBpZDtcbiAgICB0aGlzLmlzQ2FsbGVySWRIaWRkZW4gPSB0cnVlO1xuICAgIHRoaXMuZXh0U2VydmljZS5zZXRDYWxsZXJJZChpZCk7XG4gIH1cbiAgY2FuY2VsRGlhbE51bWJlcigpIHtcbiAgICB0aGlzLnRlcm1pbmF0ZUNhbGwgPSB0cnVlO1xuICAgIHRoaXMuY2FsbE51bWJlclRvYXN0LnNob3cgPSBmYWxzZTtcbiAgfVxuXG4gIGhhbmRsZURpdktleWRvd24oZXY6YW55KXtcbiAgICBpZih0aGlzLmRpYWxlZE51bWJlci5sZW5ndGggPT0gMCl7XG4gICAgICB0aGlzLmRpYWxJbnB1dEVsZW1lbnQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgIH1cbiAgICBpZiAoZXYua2V5ID09PSAnRW50ZXInKSB7XG4gICAgICAvLyBDaGVjayBpZiB0aGUgZGlhbHBhZCBpcyBvcGVuXG4gICAgICBpZiAoIXRoaXMuaXNEaWFscGFkSGlkZGVuKSB7XG4gICAgICAgIGlmKHRoaXMuZGlhbGVkTnVtYmVyLmxlbmd0aCA+IDIgJiYgdGhpcy5zZWxlY3RlZENhbGxlcklkKXtcbiAgICAgICAgICB0aGlzLmluaXRpYXRlQ2FsbCgpO1xuICAgICAgICB9XG4gICAgICAgIGlmKCF0aGlzLnNlbGVjdGVkQ2FsbGVySWQpe1xuICAgICAgICAgIHRoaXMuc2hha2VEZWRpY2F0ZWRCdG4gPSB0cnVlO1xuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zaGFrZURlZGljYXRlZEJ0biA9IGZhbHNlO1xuICAgICAgICAgIH0sIDEwMDAwKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICBvbkNhbGxCdG5Nb3VzZUVudGVyKGV2OiBhbnkpIHtcbiAgICBpZiAoIXRoaXMuc2VsZWN0ZWRDYWxsZXJJZCB8fCAodGhpcy5zZWxlY3RlZENhbGxlcklkID09ICdhbHdheXNBc2snKSB8fCAodGhpcy5zZWxlY3RlZENhbGxlcklkID09ICdzbWFydERpYWxpbmcnKSkge1xuICAgICAgdGhpcy5zaGFrZURlZGljYXRlZEJ0biA9IHRydWU7XG4gICAgfVxuXG4gIH1cbiAgb25DYWxsQnRuTW91c2VMZWF2ZShldjogYW55KSB7XG4gICAgaWYgKCF0aGlzLnNlbGVjdGVkQ2FsbGVySWQgfHwgKHRoaXMuc2VsZWN0ZWRDYWxsZXJJZCA9PSAnYWx3YXlzQXNrJykgfHwgKHRoaXMuc2VsZWN0ZWRDYWxsZXJJZCA9PSAnc21hcnREaWFsaW5nJykpIHtcbiAgICAgIHRoaXMuc2hha2VEZWRpY2F0ZWRCdG4gPSBmYWxzZTtcbiAgICB9XG4gIH1cbiAgYWNjZXB0TmV3SW5jb21pbmdDYWxsKGNhbGw6IENhbGwpIHtcbiAgICAvL2ZpcnN0IGN1dCB0aGUgY3VycmVudCBjYWxsXG4gICAgLy90aGlzLmNhbGxEYXRhID0gY2FsbDtcbiAgICB0aGlzLm5ld0luY29taW5nQ2FsbERhdGEgPSBjYWxsO1xuICB9XG4gIHJlamVjdE5ld0luY29taW5nQ2FsbChjYWxsOiBDYWxsKSB7XG4gICAgY2FsbC5yZWplY3QoKTtcbiAgICB0aGlzLm5ld0luY29taW5nQ2FsbHMgPSB0aGlzLm5ld0luY29taW5nQ2FsbHMuZmlsdGVyKChpdGVtOiBhbnkpID0+IGl0ZW0ucGFyYW1ldGVycy5DYWxsU2lkICE9PSBjYWxsLnBhcmFtZXRlcnNbJ0NhbGxTaWQnXSk7XG4gICAgdGhpcy5pbmNvbWluZ0NhbGxzTGlzdCA9IHRoaXMuaW5jb21pbmdDYWxsc0xpc3QuZmlsdGVyKChpdGVtOiBhbnkpID0+IGl0ZW0ucGFyYW1ldGVycy5DYWxsU2lkICE9PSBjYWxsLnBhcmFtZXRlcnNbJ0NhbGxTaWQnXSk7XG4gIH1cbiAgbmV3SW5jb21pbmdDYWxsSW5pdGlhdGVkKCkge1xuICAgIGNvbnNvbGUubG9nKCdkZDEyJylcbiAgICB0aGlzLmlzQ2FsbEluUHJvZ3Jlc3MgPSB0cnVlO1xuICAgIHRoaXMubmV3SW5jb21pbmdDYWxscyA9IFtdO1xuICAgIHRoaXMuaW5jb21pbmdDYWxsSW5pdGlhdGVkLmVtaXQoKTtcbiAgfVxuICBpbmNvbWluZ0NhbGxzTmV3SW5mbyhkYXRhOmFueSl7XG4gICAgdGhpcy5pbmNvbWluZ0NhbGxzTGlzdCA9IGRhdGE7XG4gICAgdGhpcy5pbmNvbWluZ0NhbGxzTmV3SW5mb0V2ZW50LmVtaXQoZGF0YSk7XG4gIH1cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnNvbGUubG9nKCdDbGVhbmluZyB1cCBDMmNEaWFscGFkQ29tcG9uZW50Jyk7XG4gICAgICBcbiAgICAgIC8vIFVuc3Vic2NyaWJlIGZyb20gYWxsIHN1YnNjcmlwdGlvbnNcbiAgICAgIGlmICh0aGlzLnN1YnNjcmlwdGlvbnMpIHtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnVuc3Vic2NyaWJlKCk7XG4gICAgICB9XG4gICAgICAvLyBDbGVhbiB1cCBUd2lsaW8gZGV2aWNlIHdoZW4gY29tcG9uZW50IGlzIGRlc3Ryb3llZFxuICAgICAgaWYgKHRoaXMudHdpbGlvU2VydmljZVsnZGV2aWNlJ10pIHtcbiAgICAgICAgdGhpcy50d2lsaW9TZXJ2aWNlWydkZXZpY2UnXS5kZXN0cm95KCk7XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIEVuZCBhbnkgYWN0aXZlIGNhbGxcbiAgICAgIGlmICh0aGlzLmlzQ2FsbEluUHJvZ3Jlc3MpIHtcbiAgICAgICAgdGhpcy5lbmRDYWxsKCk7XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIENsZWFyIGFueSB0aW1lb3V0cyBvciBpbnRlcnZhbHMgaWYgdGhleSBleGlzdFxuICAgICAgaWYgKHRoaXMudG9hc3RUaW1lb3V0KSB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLnRvYXN0VGltZW91dCk7XG4gICAgICB9XG4gICAgICBcbiAgICAgIGNvbnNvbGUubG9nKCdDMmNEaWFscGFkQ29tcG9uZW50IGNsZWFudXAgY29tcGxldGUnKTtcbiAgICAgIFxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBkdXJpbmcgY29tcG9uZW50IGNsZWFudXA6JywgZXJyb3IpO1xuICAgIH1cbiAgfVxufVxuIiwiPGRpdiBpZD1cImRyYWdwYXJlbnQxXCIgW25nU3R5bGVdPVwieydkaXNwbGF5Jzppc0RpYWxwYWRIaWRkZW4gPyAnbm9uZSc6ICdibG9jayd9XCI+XHJcbiAgPGxpYi1jYWxsLXByb2dyZXNzICpuZ0lmPVwiaXNDYWxsSW5Qcm9ncmVzc1wiXHJcbiAgIChlbmRDYWxsRXZlbnQpPVwiZW5kQ2FsbCgpXCJcclxuICAgKG1pbmltaXNlRXZlbnQpPVwib25NaW5pbWlzZSgkZXZlbnQpXCJcclxuICAgKGluY29taW5nQ2FsbEluaXRpYXRlZCk9XCJuZXdJbmNvbWluZ0NhbGxJbml0aWF0ZWQoKVwiXHJcbiAgIFtuZXdJbmNvbWluZ0NhbGxEYXRhXT1cIm5ld0luY29taW5nQ2FsbERhdGFcIlxyXG4gICBbZGV2aWNlSWRdPVwiZGV2aWNlSWRcIlxyXG4gICBbbmV3SW5jb21pbmdDYWxsc0xpc3RdPVwiaW5jb21pbmdDYWxsc0xpc3RcIlxyXG4gICAoaW5jb21pbmdDYWxsc05ld0luZm8pPVwiaW5jb21pbmdDYWxsc05ld0luZm8oJGV2ZW50KVwiXHJcbiAgIFtzZWxlY3RlZENhbGxlcklkXT1cInNlbGVjdGVkQ2FsbGVySWRcIlxyXG4gICBbY29uZmVyZW5jZUNhbGxJbmZvXT1cImNvbmZlcmVuY2VDYWxsSW5mb1wiXHJcbiAgIFtjYWxsRGF0YV09XCJjYWxsRGF0YVwiPlxyXG4gIDwvbGliLWNhbGwtcHJvZ3Jlc3M+XHJcbiAgPCEtLSA8YnV0dG9uIChjbGljayk9XCJpc0NhbGxJblByb2dyZXNzID0gdHJ1ZVwiPmNhbGw8L2J1dHRvbj4gLS0+XHJcbiAgPGRpdiBjbGFzcz1cImRpYWxwYWQtY29udGFpbmVyXCIgKm5nSWY9XCIhaXNDYWxsSW5Qcm9ncmVzc1wiIFtuZ0NsYXNzXT1cInsnbWluaS1kaWFscGFkJzogaXNNaW5pbWlzZWR9XCIgdGFiaW5kZXg9XCIwXCIgKGtleWRvd24pPVwiaGFuZGxlRGl2S2V5ZG93bigkZXZlbnQpXCI+XHJcbiAgICA8ZGl2IGlkPVwidG9wUGFuZWxcIiBbbmdTdHlsZV09XCJ7J2hlaWdodCc6IGNhbGxlcklkTGlzdC5sZW5ndGggPyAnNDAlJyA6ICczOSUnfVwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZGlhbHBhZC1hbGVydHNcIiAqbmdJZj1cImRpYWxBbGVydC5zaG93XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm5vLXNlbGVjdGlvbi1hbGVydFwiPlxyXG4gICAgICAgICAgPCEtLSA8cCBjbGFzcz1cIm1iLTBcIj5TZWxlY3QgQzJDIG51bWJlciB0byBjYWxsPC9wPiAtLT5cclxuICAgICAgICAgIDxwIGNsYXNzPVwibWItMFwiPnt7ZGlhbEFsZXJ0Lm1zZ319PC9wPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJmYSBmYS10aW1lc1wiIChjbGljayk9XCJzaGFrZURlZGljYXRlZEJ0biA9IGZhbHNlXCI+PC9zcGFuPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cImRpYWxwYWQtYWxlcnRzXCIgKm5nSWY9XCJjYWxsTnVtYmVyVG9hc3Quc2hvd1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJkaWFsYm94LXBvcDEgYWxlcnQgZmFkZSBzaG93XCIgW25nQ2xhc3NdPVwiY2FsbE51bWJlclRvYXN0LnR5cGVcIiByb2xlPVwiYWxlcnRcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW5cIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgtZ3Jvdy0xIG15LWF1dG8gdGV4dC1sZWZ0XCI+XHJcbiAgICAgICAgICAgICAgWW91J3IgY2FsbGluZyA8c3Ryb25nPnt7Y2FsbE51bWJlclRvYXN0LmRpc3BsYXlOdW19fTwvc3Ryb25nPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtcmlnaHRcIj5cclxuICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1saW5rIGJ0bi1kaXNjIHAtMCBweC0xXCIgKGNsaWNrKT1cImNhbmNlbERpYWxOdW1iZXIoKVwiPkNhbmNlbCBDYWxsPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgPCEtLSA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1saW5rIGJ0bi1zdWNjZXNzIGJ0bi1kaXNjIHAtMCBweC0yXCI+Q29udGludWU8L2J1dHRvbj4gLS0+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICBcclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBzdHlsZT1cInBhZGRpbmc6IDAgMThweFwiIChwYXN0ZSk9XCJoYW5kbGVOdW1iZXJQYXN0ZSgkZXZlbnQpXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBtdC0yXCI+XHJcbiAgICAgICAgICA8cD48L3A+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWQgZGlhbC1jbG9zZS1idG5cIiAoY2xpY2spPVwiaGlkZURpYWxwYWQoKVwiPlxyXG4gICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiBoZWlnaHQ9XCIyNHB4XCIgdmlld0JveD1cIjAgLTk2MCA5NjAgOTYwXCIgd2lkdGg9XCIyNHB4XCIgZmlsbD1cIiNmZmZmZmZcIj48cGF0aCBkPVwibTI1Ni0yMDAtNTYtNTYgMjI0LTIyNC0yMjQtMjI0IDU2LTU2IDIyNCAyMjQgMjI0LTIyNCA1NiA1Ni0yMjQgMjI0IDIyNCAyMjQtNTYgNTYtMjI0LTIyNC0yMjQgMjI0WlwiLz48L3N2Zz5cclxuICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtYm94XCI+XHJcbiAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiAjZGlhbElucHV0IHBsYWNlaG9sZGVyPVwiRW50ZXIgYSBuYW1lIG9yIG51bWJlclwiIHRhYmluZGV4PVwiMVwiIFsobmdNb2RlbCldPVwiZGlhbGVkTnVtYmVyXCIgKG5nTW9kZWxDaGFuZ2UpPVwib25EaWFsSW5wdXRDaGFuZ2UoJGV2ZW50KVwiLz5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiXCIgaWQ9XCJpbnB1dC1jbGVhci1idG5cIiAoY2xpY2spPVwiY2xlYXJJbnB1dCgpXCIgKm5nSWY9XCJzaG93SW5wdXRDbGVhckJ0blwiPlxyXG4gICAgICAgICAgICA8c3ZnIHdpZHRoPVwiNTBweFwiIGhlaWdodD1cIjMwcHhcIiB2aWV3Qm94PVwiMCAxMCA0MCA2MFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB4bWxuczp4bGluaz1cImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtcIiB2ZXJzaW9uPVwiMS4xXCIgYmFzZVByb2ZpbGU9XCJmdWxsXCIgZW5hYmxlLWJhY2tncm91bmQ9XCJuZXcgMCAwIDc2LjAwIDc2LjAwXCIgeG1sOnNwYWNlPVwicHJlc2VydmVcIj5cclxuICAgICAgICAgICAgICA8cGF0aCBmaWxsPVwiIzVkNjA2MVwiIGZpbGwtb3BhY2l0eT1cIjFcIiBzdHJva2Utd2lkdGg9XCIwLjJcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIGQ9XCJNIDQ3LjUyODIsNDIuOTQ5N0wgNDIuNTc4NCwzOEwgNDcuNTI4MiwzMy4wNTAyTCA0NC45NDk3LDMwLjQ3MThMIDQwLDM1LjQyMTZMIDM1LjA1MDIsMzAuNDcxOEwgMzIuNDcxOCwzMy4wNTAyTCAzNy40MjE2LDM4TCAzMi40NzE4LDQyLjk0OTdMIDM1LjA1MDIsNDUuNTI4MkwgNDAsNDAuNTc4NEwgNDQuOTQ5Nyw0NS41MjgyTCA0Ny41MjgyLDQyLjk0OTcgWiBNIDE4LjAxNDcsNDEuNTM1NUwgMjYuOTY0Niw1MC40ODU0QyAyOC4wNjgzLDUxLjU4OSAyOSw1MiAzMSw1MkwgNTIsNTJDIDU0Ljc2MTQsNTIgNTcsNDkuNzYxNCA1Nyw0N0wgNTcsMjlDIDU3LDI2LjIzODYgNTQuNzYxNCwyNCA1MiwyNEwgMzEsMjRDIDI5LDI0IDI4LjA2ODMsMjQuNDExMyAyNi45NjQ2LDI1LjUxNDlMIDE4LjAxNDcsMzQuNDY0NUMgMTYuMDYyMSwzNi40MTcxIDE2LjA2MjEsMzkuNTgyOSAxOC4wMTQ3LDQxLjUzNTUgWiBNIDMxLDQ5QyAzMCw0OSAyOS42MDQ4LDQ4Ljg4MjggMjkuMDg2LDQ4LjM2NDFMIDIwLjEzNjEsMzkuNDE0MkMgMTkuMzU1LDM4LjYzMzIgMTkuMzU1LDM3LjM2NjkgMjAuMTM2MSwzNi41ODU4TCAyOS4wODYsMjcuNjM2MkMgMjkuNjA0OCwyNy4xMTc1IDMwLDI3IDMxLDI3LjAwMDFMIDUyLDI3LjAwMDFDIDUzLjEwNDYsMjcuMDAwMSA1NCwyNy44OTU1IDU0LDI5LjAwMDFMIDU0LDQ3LjAwMDFDIDU0LDQ4LjEwNDYgNTMuMTA0Niw0OS4wMDAxIDUyLDQ5LjAwMDFMIDMxLDQ5IFogXCIvPlxyXG4gICAgICAgICAgICA8L3N2Zz4gICAgICAgIFxyXG4gICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJpbnB1dC1pbmZvLWljb25cIiBwbGFjZW1lbnQ9XCJib3R0b20tcmlnaHRcIiB0b29sdGlwQ2xhc3M9XCJpbnB1dC10b29sdGlwXCIgbmdiVG9vbHRpcD1cIkZvciBleHRlbnNpb24gZGlhbGluZywgdXNlIGZvcm1hdHMgbGlrZSArMTIzNDU2Nzg5MTAgeDEyMywrMTIzNDU2Nzg5MTAgZXh0LjEyMywgKzEyMzQ1Njc4OTEwLDEyM1wiPjxpIGNsYXNzPVwiZmEgZmEtaW5mby1jaXJjbGVcIj48L2k+PC9zcGFuPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJndWlkZVwiICpuZ0lmPVwiY2FsbGVySWRMaXN0Lmxlbmd0aCAmJiAhKGRpYWxlZE51bWJlci5sZW5ndGggPiAyKVwiPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJndWlkZXRleHRcIj5QbGVhc2UgZW50ZXIgYSBudW1iZXIgb3Igc2VsZWN0IGEgc2F2ZWQgY29udGFjdDwvc3Bhbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJpbnB1dC1lcnJvclwiICpuZ0lmPVwiZGlhbEFsZXJ0LnNob3dcIj5cclxuICAgICAgICAgIDxzcGFuPnt7ZGlhbEFsZXJ0Lm1zZ319PC9zcGFuPlxyXG4gICAgICAgIDwvZGl2PiAtLT5cclxuICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRhY3QtY2FyZFwiICpuZ0Zvcj1cImxldCBjb250YWN0IG9mIGZpbHRlcmVkQ29udGFjdExpc3RcIiAoY2xpY2spPVwib25Db250YWN0U2VsZWN0KGNvbnRhY3QpXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250YWN0LWltZ1wiPlxyXG4gICAgICAgICAgICAgIDxpbWcgW3NyY109XCJjb250YWN0LmltYWdlXCIgYWx0PVwidXNlciBpbWFnZVwiIGxvYWRpbmc9XCJsYXp5XCIgKm5nSWY9XCJjb250YWN0LmltYWdlIGVsc2UgYWxwaGFOYW1lXCIvPlxyXG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjYWxwaGFOYW1lPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb250YWN0LWFscGhhLWltZ1wiPnt7Z2V0Rmlyc3RMZXR0ZXIoY29udGFjdC5maXJzdE5hbWUpfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250YWN0LWRldGFpbHNcIj5cclxuICAgICAgICAgICAgICA8cCBzdHlsZT1cIm1hcmdpbi1ib3R0b206IDRweFwiIGNsYXNzPVwiY29udGFjdC1uYW1lXCI+e3tnZXRGdWxsTmFtZShjb250YWN0KSB9fTwvcD5cclxuICAgICAgICAgICAgICA8cD57e2NvbnRhY3QubnVtYmVyc0xpc3RbMF0ubnVtYmVyfX08L3A+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwid2F2ZS1jb250YWluZXJcIj5cclxuICAgICAgICA8c3ZnXHJcbiAgICAgICAgICBjbGFzcz1cIndhdmVzXCJcclxuICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxyXG4gICAgICAgICAgeG1sbnM6eGxpbms9XCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCJcclxuICAgICAgICAgIHZpZXdCb3g9XCIwIDI0IDE1MCAyOFwiXHJcbiAgICAgICAgICBwcmVzZXJ2ZUFzcGVjdFJhdGlvPVwibm9uZVwiXHJcbiAgICAgICAgICBzaGFwZS1yZW5kZXJpbmc9XCJhdXRvXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8ZGVmcz5cclxuICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICBpZD1cImdlbnRsZS13YXZlXCJcclxuICAgICAgICAgICAgICBkPVwiTS0xNjAgNDRjMzAgMCA1OC0xOCA4OC0xOHMgNTggMTggODggMTggNTgtMTggODgtMTggNTggMTggODggMTggdjQ0aC0zNTJ6XCJcclxuICAgICAgICAgICAgLz5cclxuICAgICAgICAgIDwvZGVmcz5cclxuICAgICAgICAgIDxnIGNsYXNzPVwicGFyYWxsYXhcIj5cclxuICAgICAgICAgICAgPHVzZVxyXG4gICAgICAgICAgICAgIHhsaW5rOmhyZWY9XCIjZ2VudGxlLXdhdmVcIlxyXG4gICAgICAgICAgICAgIHg9XCI0OFwiXHJcbiAgICAgICAgICAgICAgeT1cIjBcIlxyXG4gICAgICAgICAgICAgIGZpbGw9XCJyZ2JhKDI1NSwyNTUsMjU1LDAuNylcIlxyXG4gICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICA8dXNlXHJcbiAgICAgICAgICAgICAgeGxpbms6aHJlZj1cIiNnZW50bGUtd2F2ZVwiXHJcbiAgICAgICAgICAgICAgeD1cIjQ4XCJcclxuICAgICAgICAgICAgICB5PVwiM1wiXHJcbiAgICAgICAgICAgICAgZmlsbD1cInJnYmEoMjU1LDI1NSwyNTUsMC41KVwiXHJcbiAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgIDwhLS0gPHVzZVxyXG4gICAgICAgICAgICAgIHhsaW5rOmhyZWY9XCIjZ2VudGxlLXdhdmVcIlxyXG4gICAgICAgICAgICAgIHg9XCI0OFwiXHJcbiAgICAgICAgICAgICAgeT1cIjVcIlxyXG4gICAgICAgICAgICAgIGZpbGw9XCJyZ2JhKDI1NSwyNTUsMjU1LDAuMylcIlxyXG4gICAgICAgICAgICAvPiAtLT5cclxuICAgICAgICAgICAgPHVzZSB4bGluazpocmVmPVwiI2dlbnRsZS13YXZlXCIgeD1cIjQ4XCIgeT1cIjdcIiBmaWxsPVwiI2ZmZlwiIC8+XHJcbiAgICAgICAgICA8L2c+XHJcbiAgICAgICAgPC9zdmc+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwiYnRuLWNvbnRhaW5lclwiICpuZ0lmPVwiIWlzTWluaW1pc2VkXCI+XHJcbiAgICAgIDxidXR0b24gY2xhc3M9XCJkaWFsLWJ0blwiICpuZ0Zvcj1cImxldCBrZXkgb2Yga2V5cGFkVmFsO2xldCBpID0gaW5kZXhcIlxyXG4gICAgICAoa2V5ZG93bi5lbnRlcik9XCJvbkVudGVyKGtleS5udW0pXCIgKGNsaWNrKT1cImFkZE51bWJlcihrZXkubnVtKVwiXHJcbiAgICAgIFtuZ1N0eWxlXT1cInsnbWFyZ2luLXRvcCc6IGtleS50ZXh0ID09PSAnKycgPyAnM3B4JyA6ICcwJ31cIlxyXG4gICAgICAgW3RhYmluZGV4XT1cImRpYWxlZE51bWJlci5sZW5ndGggPyAnMCc6IGkrMlwiIGxvbmdQcmVzcyAobG9uZ1ByZXNzKT1cImFkZE51bWJlcihrZXkudGV4dClcIiBzaG9ydFByZXNzIChzaG9ydFByZXNzKT1cImFkZE51bWJlcihrZXkubnVtKVwiPlxyXG4gICAgICAgIHt7a2V5Lm51bX19IFxyXG4gICAgICAgIDxzcGFuICpuZ0lmPVwia2V5Lm51bSA9PSAxO2Vsc2Ugb3RoZXJUaGFuT25lXCIgY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkIHZvaWNlbWFpbFwiPlxyXG4gICAgICAgICAgdm9pY2VtYWlsXHJcbiAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjb3RoZXJUaGFuT25lPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJidG4tYWxiaGFiZXRzXCIgW25nQ2xhc3NdPVwieydwbHVzU2lnbic6IGtleS50ZXh0ID09PSAnKyd9XCI+e3trZXkudGV4dCA/IGtleS50ZXh0IDogJyZuYnNwOyd9fTwvc3Bhbj5cclxuICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImNhbGwtYnRuLWNvbnRhaW5lclwiICpuZ0lmPVwiIWlzTWluaW1pc2VkXCIgKG1vdXNlZW50ZXIpPVwib25DYWxsQnRuTW91c2VFbnRlcigkZXZlbnQpXCIgKG1vdXNlbGVhdmUpPVwib25DYWxsQnRuTW91c2VMZWF2ZSgkZXZlbnQpXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjYWxsLWJ0blwiIChjbGljayk9XCJpbml0aWF0ZUNhbGwoKVwiIFt0YWJpbmRleF09XCJkaWFsZWROdW1iZXIubGVuZ3RoID8gJzInOiAnMTUnXCJcclxuICAgICAgICBbbmdTdHlsZV09XCJ7J3BvaW50ZXItZXZlbnRzJzogZGlhbGVkTnVtYmVyLmxlbmd0aCAmJiBzZWxlY3RlZENhbGxlcklkID8gJ2F1dG8nIDogJ25vbmUnLCAnb3BhY2l0eSc6IGRpYWxlZE51bWJlci5sZW5ndGggJiYgc2VsZWN0ZWRDYWxsZXJJZCA/ICcxJyA6ICcwLjUnfVwiPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiIHN0eWxlPVwiY29sb3I6IHdoaXRlXCI+XHJcbiAgICAgICAgICBjYWxsXHJcbiAgICAgICAgPC9zcGFuPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiAqbmdJZj1cImNhbGxlcklkTGlzdC5sZW5ndGggJiYgIWlzTWluaW1pc2VkXCIgY2xhc3M9XCJwb3NpdGlvbi1yZWxhdGl2ZVwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwic2hvd25DYWxsZXJJZFwiICpuZ0lmPVwic2VsZWN0ZWRDYWxsZXJJZDsgZWxzZSBhc2tCbG9ja1wiIChjbGljayk9XCJ0b2dnbGVDYWxsZXJJZERpdigpXCI+XHJcbiAgICAgICAgPGRpdj5cclxuICAgICAgICAgIDxzcGFuIFtuZ0NsYXNzXT1cIidmaSBmaS0nICsgc2VsZWN0ZWRDYWxsZXJJZD8uaXNvQ29kZT8udG9Mb3dlckNhc2UoKVwiPjwvc3Bhbj5cclxuICAgICAgICAgIHt7c2VsZWN0ZWRDYWxsZXJJZD8ubnVtYmVyfX1cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxuZy10ZW1wbGF0ZSAjYXNrQmxvY2s+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInNob3duQ2FsbGVySWRcIiAgKGNsaWNrKT1cInRvZ2dsZUNhbGxlcklkRGl2KClcIiBbbmdDbGFzc109XCJ7ICd0aWx0LXNoYWtpbmcnOiBzaGFrZURlZGljYXRlZEJ0biB9XCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXJcIj5cclxuICAgICAgICAgICAgPGg1IGNsYXNzPVwibWItMFwiPlNlbGVjdCBDMkMgbnVtYmVyPC9oNT5cclxuICAgICAgICAgICAgPCEtLSA8c3BhbiBjbGFzcz1cIm1sLTJcIiBzdHlsZT1cIm9wYWNpdHk6Ljg7bWFyZ2luLXRvcDoycHhcIj5cclxuICAgICAgICAgICAgICA8aW1nIHNyYz1cImFzc2V0cy9pbWFnZXMvaWNvbl9kb3duX2Fycm93LnN2Z1wiIGFsdD1cImRvd25cIiB3aWR0aD1cIjEwcHhcIj5cclxuICAgICAgICAgICAgPC9zcGFuPiAtLT5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmYSBmYS1hbmdsZS1kb3duIG1sLTIgdGV4dC1ibHVlXCIgc3R5bGU9XCJtYXJnaW4tdG9wOjJweFwiPjwvc3Bhbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZ3VpZGUyXCIgKm5nSWY9XCJzaGFrZURlZGljYXRlZEJ0blwiPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwiZ3VpZGV0ZXh0XCI+UGxlYXNlIHNlbGVjdCBhIG51bWJlciBmcm9tIGJlbG93IGRyb3Bkb3duPC9zcGFuPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXYgKm5nSWY9XCJjYWxsZXJJZExpc3QubGVuZ3RoOyBlbHNlIG5vQ2FsbGVySWRNZXNzYWdlXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY2FsbGVyLWlkLWxpc3QtY29udGFpbmVyXCIgKm5nSWY9XCJjYWxsZXJJZExpc3QubGVuZ3RoICYmICFpc01pbmltaXNlZFwiIGlkPVwiY2FsbGVySWRDb250YWluZXJcIiAgW25nQ2xhc3NdPVwieyd2aXNpYmxlJzogIWlzQ2FsbGVySWRIaWRkZW59XCIgPlxyXG4gICAgICA8ZGl2IHN0eWxlPVwiZGlzcGxheTogZmxleDsganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuXCI+XHJcbiAgICAgICAgPCEtLSA8aDQ+U2VsZWN0IEMyQyBTb2Z0cGhvbmUgTnVtYmVyPC9oND4gLS0+XHJcbiAgICAgICAgIDxoND5NYWtlIG91dGdvaW5nIGNhbGwgdXNpbmc8L2g0PlxyXG4gICAgICAgIDxzcGFuXHJcbiAgICAgICAgICBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIlxyXG4gICAgICAgICAgc3R5bGU9XCJjdXJzb3I6IHBvaW50ZXJcIlxyXG4gICAgICAgICAgKGNsaWNrKT1cImlzQ2FsbGVySWRIaWRkZW4gPSB0cnVlXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICBjbG9zZVxyXG4gICAgICAgIDwvc3Bhbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDx1bD5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjYWxsZXJJZCBvZiBjYWxsZXJJZExpc3RcIj5cclxuICAgICAgICAgIDxsaSBbbmdDbGFzc109XCJ7J3NlbGVjdGVkQ2FsbGVySWRDbGFzcyc6IGNhbGxlcklkPy5udW1iZXIgPT0gc2VsZWN0ZWRDYWxsZXJJZD8ubnVtYmVyfVwiIChjbGljayk9XCJvbkRlZGljYXRlZE51bVNlbGVjdChjYWxsZXJJZClcIj5cclxuICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICA8c3BhbiBbbmdDbGFzc109XCInZmkgZmktJyArIGNhbGxlcklkPy5pc29Db2RlPy50b0xvd2VyQ2FzZSgpXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgIHt7Y2FsbGVySWQ/Lm51bWJlcn19XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8c3Bhbj57e2NhbGxlcklkPy5jb3VudHJ5TmFtZX19PC9zcGFuPlxyXG4gICAgICAgICAgPC9saT5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgPC91bD5cclxuICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8bmctdGVtcGxhdGUgI25vQ2FsbGVySWRNZXNzYWdlPlxyXG4gICAgICA8c3BhbiBjbGFzcz1cIm5vLWNhbGxlci1pZC1tZXNzYWdlXCI+VG8gbWFrZSBhbnkgdm9pY2UgY2FsbHMsIHBsZWFzZSA8YSByb3V0ZXJMaW5rPVwiL2V4dGVuc2lvbi9kZWRpY2F0ZWRudW1iZXIve3t0b2tlbn19XCIgY2xhc3M9XCJjbGljay1oZXJlLWxpbmtcIiB0aXRsZT1cIlNldHRpbmdzID4gQzJDIE51bWJlclwiPnN1YnNjcmliZTwvYT4gdG8gYSB2b2ljZSBjYXBhYmxlIEMyQyBOdW1iZXIuXHJcbiAgICAgIDwvc3Bhbj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZGVkaWNhdGVkLW92ZXJsYXlcIiAqbmdJZj1cInNob3dEZWRpY2F0ZWRQb3B1cFwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY2FyZCBkZWRpY2F0ZWROdW1Qb3B1cFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWhlYWRlciBjaG9vc2VEZWRpY2F0ZWRIZWFkZXJcIj5cclxuICAgICAgICAgIDxoNT5DaG9vc2UgQzJDIE51bWJlcjwvaDU+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWQgZGlhbC1jbG9zZS1idG5cIiAoY2xpY2spPVwic2hvd0RlZGljYXRlZFBvcHVwID0gZmFsc2VcIj5jbG9zZTwvc3Bhbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5IGRlZGljYXRlZE51bUxpc3RcIj5cclxuICAgICAgICAgIDx1bD5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY2FsbGVySWQgb2YgY2FsbGVySWRMaXN0XCI+XHJcbiAgICAgICAgICAgICAgPGxpIFtuZ0NsYXNzXT1cInsnc2VsZWN0ZWRDYWxsZXJJZENsYXNzJzogY2FsbGVySWQ/Lm51bWJlciA9PSBzZWxlY3RlZENhbGxlcklkPy5udW1iZXJ9XCIgKGNsaWNrKT1cInNob3dEZWRpY2F0ZWRQb3B1cCA9IGZhbHNlXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8c3BhbiBbbmdDbGFzc109XCInZmkgZmktJyArIGNhbGxlcklkPy5pc29Db2RlPy50b0xvd2VyQ2FzZSgpXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICB7e2NhbGxlcklkPy5udW1iZXJ9fVxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8c3Bhbj57e2NhbGxlcklkPy5jb3VudHJ5TmFtZX19PC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgPC91bD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDwhLS0gPGRpdiBjbGFzcz1cImluY29taW5nLWNhbGwtd2lkZ2V0XCIgKm5nRm9yPVwibGV0IGNhbGwgb2YgbmV3SW5jb21pbmdDYWxscztsZXQgaSA9IGluZGV4XCIgW25nU3R5bGVdPVwieyd0b3AnOiAoMzAgKyBpICogNzIpICsgJ3B4J31cIj5cclxuICAgICAgPGRpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiaW5jLXVzZXItaW1nXCI+XHJcbiAgICAgICAgICA8aW1nIHNyYz1cImFzc2V0cy9pbWFnZXMvdXNlci5qcGdcIiBhbHQ9XCJ1c2VyIGltYWdlXCI+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgXHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZmxleC1ncm93LTFcIj5cclxuICAgICAgICA8cCBjbGFzcz1cImluYy11c2VyLW5hbWVcIj57e2NhbGwuY3VzdG9tUGFyYW1ldGVycy5nZXQoJ25hbWUnKX19PC9wPlxyXG4gICAgICAgIDxwPnt7Y2FsbC5wYXJhbWV0ZXJzLkZyb219fTwvcD5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXhcIj5cclxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiaW5jLWNhbGwtYnRuIGluYy1hY2NlcHQtYnRuIG1yLTJcIiAoY2xpY2spPVwiYWNjZXB0TmV3SW5jb21pbmdDYWxsKGNhbGwpXCI+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIiBzdHlsZT1cImNvbG9yOiB3aGl0ZVwiPlxyXG4gICAgICAgICAgICBjYWxsXHJcbiAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImluYy1jYWxsLWJ0biBpbmMtcmVqZWN0LWJ0blwiIChjbGljayk9XCJyZWplY3ROZXdJbmNvbWluZ0NhbGwoY2FsbClcIj5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiIHN0eWxlPVwiY29sb3I6IHdoaXRlXCI+XHJcbiAgICAgICAgICAgIGNhbGxfZW5kXHJcbiAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgIFxyXG4gICAgPC9kaXY+IC0tPlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuIl19
1425
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhbGJveC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9kaWFsYm94L3NyYy9saWIvZGlhbGJveC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9kaWFsYm94L3NyYy9saWIvZGlhbGJveC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQW9DLFNBQVMsRUFBYyxZQUFZLEVBQWdCLEtBQUssRUFBcUIsTUFBTSxFQUFpQixTQUFTLEVBQXFCLE1BQU0sZUFBZSxDQUFDO0FBRW5NLE9BQU8sSUFBSSxNQUFNLGFBQWEsQ0FBQztBQUkvQixPQUFtQyxFQUFFLFNBQVMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDbkMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQTs7Ozs7Ozs7Ozs7QUFZbkMsTUFBTSxPQUFPLGdCQUFnQjtJQVczQixJQUFhLGVBQWUsQ0FBQyxLQUFjO1FBQ3pDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxLQUFLLENBQUM7UUFDOUIsSUFBSSxDQUFDLEtBQUssRUFBRTtZQUNWLDZEQUE2RDtZQUM3RCxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztTQUN6QjtJQUNILENBQUM7SUFrRUQsSUFBSSxlQUFlO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDO0lBQy9CLENBQUM7SUE4REQsWUFDVSxhQUE0QixFQUM1QixVQUE0QixFQUM1QixNQUFpQixFQUNqQixTQUEyQixFQUMzQixnQkFBa0MsRUFDbEMsR0FBc0IsRUFDdEIsTUFBYyxFQUNkLDBCQUFzRDtRQVB0RCxrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUM1QixlQUFVLEdBQVYsVUFBVSxDQUFrQjtRQUM1QixXQUFNLEdBQU4sTUFBTSxDQUFXO1FBQ2pCLGNBQVMsR0FBVCxT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WUFFRCxnREFBZ0Q7WUFDaEQsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFO2dCQUNyQixZQUFZLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO2FBQ2pDO1lBRUQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxzQ0FBc0MsQ0FBQyxDQUFDO1NBRXJEO1FBQUMsT0FBTyxLQUFLLEVBQUU7WUFDZCxPQUFPLENBQUMsS0FBSyxDQUFDLGlDQUFpQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1NBQ3pEO0lBQ0gsQ0FBQzs7OEdBcDlDVSxnQkFBZ0I7a0dBQWhCLGdCQUFnQiwwc0JDcEI3Qiw2b1pBNE9BOzRGRHhOYSxnQkFBZ0I7a0JBTDVCLFNBQVM7K0JBQ0UsYUFBYTt1VEFRZCxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFJTyxlQUFlO3NCQUEzQixLQUFLO2dCQU9HLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDRyx3QkFBd0I7c0JBQWhDLEtBQUs7Z0JBbUVJLGlCQUFpQjtzQkFBMUIsTUFBTTtnQkFDRyxhQUFhO3NCQUF0QixNQUFNO2dCQUNHLFlBQVk7c0JBQXJCLE1BQU07Z0JBQ0csYUFBYTtzQkFBdEIsTUFBTTtnQkFDRyx5QkFBeUI7c0JBQWxDLE1BQU07Z0JBQ0cscUJBQXFCO3NCQUE5QixNQUFNO2dCQUNpQixnQkFBZ0I7c0JBQXZDLFNBQVM7dUJBQUMsV0FBVztnQkFHWixZQUFZO3NCQUFyQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBIb3N0TGlzdGVuZXIsIElucHV0LCBPbkNoYW5nZXMsIE9uSW5pdCwgT3V0cHV0LCBTaW1wbGVDaGFuZ2VzLCBWaWV3Q2hpbGQsIFZpZXdFbmNhcHN1bGF0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBUd2lsaW9TZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlL3R3aWxpby5zZXJ2aWNlJztcbmltcG9ydCBzd2FsIGZyb20gJ3N3ZWV0YWxlcnQyJztcbmltcG9ydCB7IEV4dGVuc2lvblNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2UvZXh0ZW5zaW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ2FsbGVySWREaWFsb2dDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvY2FsbGVyLWlkLWRpYWxvZy9jYWxsZXItaWQtZGlhbG9nLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBNYXREaWFsb2cgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuaW1wb3J0IHBhcnNlUGhvbmVOdW1iZXJGcm9tU3RyaW5nLCB7IEFzWW91VHlwZSB9IGZyb20gJ2xpYnBob25lbnVtYmVyLWpzJztcbmltcG9ydCB7IGtleXBhZCB9IGZyb20gJy4uL2tleXBhZCc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJ1xuaW1wb3J0IHsgSXBBZGRyZXNzU2VydmljZSB9IGZyb20gJy4vc2VydmljZS9pcC1hZGRyZXNzLnNlcnZpY2UnO1xuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IENhbGwgfSBmcm9tICdAdHdpbGlvL3ZvaWNlLXNkayc7XG5pbXBvcnQgeyBJbmNvbWVpbmdDYWxsU29ja2V0U2VydmljZSB9IGZyb20gJy4vc2VydmljZS9pbmNvbWVpbmctY2FsbC1zb2NrZXQuc2VydmljZSc7XG5cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbGliLWRpYWxib3gnLFxuICB0ZW1wbGF0ZVVybDogJy4vZGlhbGJveC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2RpYWxib3guY29tcG9uZW50LmNzcyddXG59KVxuZXhwb3J0IGNsYXNzIERpYWxib3hDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uQ2hhbmdlcyB7XG4gIFxuICBwcml2YXRlIF9pc0RpYWxwYWRIaWRkZW46IGJvb2xlYW4gPSB0cnVlO1xuICAvLyBMZXQgdGhlIGxpYnJhcnkgZGVjaWRlIHRvIGF1dG8tb3BlbiBvbiBpbmNvbWluZyBjYWxsIHdpdGhvdXQgaG9zdCB3aXJpbmdcbiAgQElucHV0KCkgYXV0b09wZW5PbkluY29taW5nOiBib29sZWFuID0gdHJ1ZTtcbiAgQElucHV0KCkgY29udGFjdEluZm86IGFueTsgIFxuICBASW5wdXQoKSBkZXZpY2VJZDogYW55OyAgXG4gIEBJbnB1dCgpIHVzZXJJZDogYW55OyAgXG4gIGlzSW5jb21pbmdDYWxsbm90aWZpY2F0aW9uOiBhbnkgPSBmYWxzZTtcbiAgbm90aWZpY2F0aW9uQ2FsbExpc3Q6IGFueTtcbiAgXG4gIEBJbnB1dCgpIHNldCBpc0RpYWxwYWRIaWRkZW4odmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9pc0RpYWxwYWRIaWRkZW4gPSB2YWx1ZTtcbiAgICBpZiAoIXZhbHVlKSB7XG4gICAgICAvLyBXaGVuIGRpYWxwYWQgYmVjb21lcyB2aXNpYmxlLCBlbnN1cmUgVHdpbGlvIGlzIGluaXRpYWxpemVkXG4gICAgICB0aGlzLmluaXRpYWxpemVUd2lsaW8oKTtcbiAgICB9XG4gIH1cbiAgQElucHV0KCkgaW5jb21pbmdDYWxsRGF0YTogYW55XG4gIEBJbnB1dCgpIGluY29taW5nQ2FsbG5vdGlmaWNhdGlvbjogYW55O1xuICBjb25mZXJlbmNlQ2FsbEluZm86IGFueSA9IHtcbiAgICAgICAgICAgIFwiY3JlYXRlZEF0XCI6IFwiVHVlIERlYyAzMCAwNzo1Mzo1MSBVVEMgMjAyNVwiLFxuICAgICAgICAgICAgXCJjb25mZXJlbmNlTmFtZVwiOiBcImNvbmZfNjk1Mzg1MGYxNTIyODAwYzRmM2NjNzE1XCIsXG4gICAgICAgICAgICBcImNvbmZlcmVuY2VJZFwiOiBcIjY5NTM4NTBmMTUyMjgwMGM0ZjNjYzcxNVwiLFxuICAgICAgICAgICAgXCJjb25mZXJlbmNlU3RhdHVzXCI6IFwiY29tcGxldGVkXCIsXG4gICAgICAgICAgICBcImlzQWN0aXZlXCI6IGZhbHNlLFxuICAgICAgICAgICAgXCJjb25mZXJlbmNlU2lkXCI6IFwiQ0ZhMzhlYWIxMzg2M2E2YWY5ODI3YjM0ODEyMGUzNjliOFwiLFxuICAgICAgICAgICAgXCJwYXJ0aWNpcGFudHNcIjogW1xuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgXCJjYWxsRHVyYXRpb25cIjogODgsXG4gICAgICAgICAgICAgICAgICAgIFwiY2FsbFNpZFwiOiBcIkNBNDhhYmJhNTFkYTQ3YzMyNzQ5YmE1NjhkN2Y0ZWNjY2FcIixcbiAgICAgICAgICAgICAgICAgICAgXCJyb2xlXCI6IFwiY2FsbGVlXCIsXG4gICAgICAgICAgICAgICAgICAgIFwiam9pbmVkQXRcIjogXCJUdWUgRGVjIDMwIDA3OjUzOjU0IFVUQyAyMDI1XCIsXG4gICAgICAgICAgICAgICAgICAgIFwiaXNIb2xkXCI6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBcImlzQ29uZmVyZW5jZVwiOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBcInVzZXJJZFwiOiBcIjY5MzkyYzY3MDY2NWI5NThkYjg3Njg4OFwiLFxuICAgICAgICAgICAgICAgICAgICBcImZvcndhcmRlZFRvXCI6IFwiXCIsXG4gICAgICAgICAgICAgICAgICAgIFwibGVmdEF0XCI6IFwiVHVlIERlYyAzMCAwNzo1NToyNSBVVEMgMjAyNVwiLFxuICAgICAgICAgICAgICAgICAgICBcImR1cmF0aW9uXCI6IDIsXG4gICAgICAgICAgICAgICAgICAgIFwiaXNMZWZ0XCI6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIFwiY29uZmVyZW5jZUlkXCI6IFwiNjk1Mzg1MGYxNTIyODAwYzRmM2NjNzE1XCIsXG4gICAgICAgICAgICAgICAgICAgIFwiZnJvbVwiOiBcIisxMjI1MjUxOTg4NlwiLFxuICAgICAgICAgICAgICAgICAgICBcInRvXCI6IFwiKzkxNjM1MzY0NTg0NFwiLFxuICAgICAgICAgICAgICAgICAgICBcInN0YXR1c1wiOiBcImNvbXBsZXRlZFwiLFxuICAgICAgICAgICAgICAgICAgICBcImRpcmVjdGlvblwiOiBcIm91dGdvaW5nLWNhbGxcIlxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBcImNhbGxEdXJhdGlvblwiOiA2NSxcbiAgICAgICAgICAgICAgICAgICAgXCJjYWxsU2lkXCI6IFwiQ0FjYmMyODZhOWU2NTU5ZjFhM2YxYjUxZjQ4Y2UzZjczYlwiLFxuICAgICAgICAgICAgICAgICAgICBcInJvbGVcIjogXCJjYWxsZWVcIixcbiAgICAgICAgICAgICAgICAgICAgXCJqb2luZWRBdFwiOiBcIlR1ZSBEZWMgMzAgMDc6NTQ6MTQgVVRDIDIwMjVcIixcbiAgICAgICAgICAgICAgICAgICAgXCJpc0hvbGRcIjogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIFwiaXNDb25mZXJlbmNlXCI6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIFwidXNlcklkXCI6IFwiNjkzOTJjNjcwNjY1Yjk1OGRiODc2ODg4XCIsXG4gICAgICAgICAgICAgICAgICAgIFwiZm9yd2FyZGVkVG9cIjogXCJcIixcbiAgICAgICAgICAgICAgICAgICAgXCJsZWZ0QXRcIjogXCJUdWUgRGVjIDMwIDA3OjU1OjI1IFVUQyAyMDI1XCIsXG4gICAgICAgICAgICAgICAgICAgIFwiZHVyYXRpb25cIjogMixcbiAgICAgICAgICAgICAgICAgICAgXCJpc0xlZnRcIjogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgXCJjb25mZXJlbmNlSWRcIjogXCI2OTUzODUwZjE1MjI4MDBjNGYzY2M3MTVcIixcbiAgICAgICAgICAgICAgICAgICAgXCJ0b05hbWVcIjogXCJUZXN0ICBcIixcbiAgICAgICAgICAgICAgICAgICAgXCJmcm9tTmFtZVwiOiBcIlRlc3QgIFwiLFxuICAgICAgICAgICAgICAgICAgICBcImZyb21cIjogXCIrMTIyNTI1MTk4ODZcIixcbiAgICAgICAgICAgICAgICAgICAgXCJ0b1wiOiBcIis5MTYzNTQ1NjQ3MzNcIixcbiAgICAgICAgICAgICAgICAgICAgXCJzdGF0dXNcIjogXCJjb21wbGV0ZWRcIixcbiAgICAgICAgICAgICAgICAgICAgXCJkaXJlY3Rpb25cIjogXCJvdXRnb2luZy1jYWxsXCJcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgXCJjYWxsRHVyYXRpb25cIjogMjUsXG4gICAgICAgICAgICAgICAgICAgIFwiY2FsbFNpZFwiOiBcIkNBMmZiNmI4OTNjZjQwNmMwMzMzMTFlM2IxMWQ2ZTc2MGZcIixcbiAgICAgICAgICAgICAgICAgICAgXCJqb2luZWRBdFwiOiBcIlR1ZSBEZWMgMzAgMDc6NTU6MDYgVVRDIDIwMjVcIixcbiAgICAgICAgICAgICAgICAgICAgXCJpc0hvbGRcIjogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIFwiaXNDb25mZXJlbmNlXCI6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIFwiZm9yd2FyZGVkVG9cIjogXCJcIixcbiAgICAgICAgICAgICAgICAgICAgXCJkdXJhdGlvblwiOiAxLFxuICAgICAgICAgICAgICAgICAgICBcImlzTGVmdFwiOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBcImNvbmZlcmVuY2VJZFwiOiBcIjY5NTM4NTBmMTUyMjgwMGM0ZjNjYzcxNVwiLFxuICAgICAgICAgICAgICAgICAgICBcImZyb21cIjogXCIrMTYwOTgwNjUwODhcIixcbiAgICAgICAgICAgICAgICAgICAgXCJ0b1wiOiBcIisxMjI1MjMwMjQ3MFwiLFxuICAgICAgICAgICAgICAgICAgICBcInN0YXR1c1wiOiBcIm5vLWFuc3dlclwiLFxuICAgICAgICAgICAgICAgICAgICBcImRpcmVjdGlvblwiOiBcImluY29taW5nLWNhbGxcIlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF1cbiAgICAgICAgfTtcbiAgZ2V0IGlzRGlhbHBhZEhpZGRlbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5faXNEaWFscGFkSGlkZGVuO1xuICB9XG4gIEBPdXRwdXQoKSBjbG9zZURpYWxwYWRFdmVudDogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBAT3V0cHV0KCkgY2FsbEluaXRpYXRlZDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIGVuZENhbGxFdmVudDogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBAT3V0cHV0KCkgbWluaW1pc2VFdmVudDogRXZlbnRFbWl0dGVyPGJvb2xlYW4+ID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuICBAT3V0cHV0KCkgaW5jb21pbmdDYWxsc05ld0luZm9FdmVudDogRXZlbnRFbWl0dGVyPGFueVtdPiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55W10+KCk7XG4gIEBPdXRwdXQoKSBpbmNvbWluZ0NhbGxJbml0aWF0ZWQ6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgQFZpZXdDaGlsZCgnZGlhbElucHV0JykgZGlhbElucHV0RWxlbWVudCE6IEVsZW1lbnRSZWY7XG5cbiAgXG4gIEBPdXRwdXQoKSBudW1iZXJEaWFsZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcblxuXG4gIGlzQ2FsbEluUHJvZ3Jlc3M6IGJvb2xlYW4gPSBmYWxzZTtcbiAga2V5cGFkVmFsID0ga2V5cGFkO1xuICBcbiAgc2hvd0lucHV0Q2xlYXJCdG46IGJvb2xlYW4gPSBmYWxzZTtcbiAgZGlhbGVkTnVtYmVyOiBzdHJpbmcgPSAnJztcbiAgY29udGFjdExpc3Q6IGFueVtdID0gW107XG4gIGZpbHRlcmVkQ29udGFjdExpc3Q6IGFueVtdID0gW107XG4gIGNhbGxlcklkTGlzdDogYW55W10gPSBbXTtcbiAgc2VsZWN0ZWRDYWxsZXJJZDogYW55O1xuICBpc0NhbGxlcklkSGlkZGVuOiBib29sZWFuID0gdHJ1ZTtcblxuICBpc1RyaWFsUGVyaW9kT3ZlcjogYm9vbGVhbiA9IGZhbHNlO1xuICBpc1BheW1lbnREdWU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgdGVybWluYXRlQ2FsbCA9IGZhbHNlO1xuICB0b2FzdFRpbWVvdXQgPSA3MDAwO1xuICBjYWxsTnVtYmVyVG9hc3QgPSB7XG4gICAgc2hvdzogZmFsc2UsXG4gICAgdHlwZTogJ2FsZXJ0LXN1Y2Nlc3MnLFxuICAgIG51bWJlcjogJycsXG4gICAgZGlzcGxheU51bTogJydcbiAgfVxuICBjYWxsRGF0YTogYW55ID0ge1xuICAgIHBob25lOiAnJyxcbiAgICBkaXNwbGF5TnVtOiAnJyxcbiAgICBkaWFsOiBmYWxzZSxcbiAgICBuYW1lOiAnJyxcbiAgICBpbWc6ICdhc3NldHMvaW1hZ2VzL3VzZXIuanBnJyxcbiAgICBpc0luY29taW5nQ2FsbDogZmFsc2UsXG4gICAgZXh0TnVtOicnXG4gIH07XG4gIGxhc3REaWFsZWQ6IHsgbmFtZT86IHN0cmluZzsgaW1hZ2U/OiBzdHJpbmc7IG51bWJlcjogc3RyaW5nIH0gfCBudWxsID0gbnVsbDtcbiAgc2FuaXRpemVkTnVtOiBhbnk7XG4gIGRpYWxBbGVydCA9IHtcbiAgICBtc2c6ICcnLFxuICAgIHNob3c6IGZhbHNlXG4gIH1cbiAgdG9rZW4/OnN0cmluZztcbiBcbiAgc2hvd0RlZGljYXRlZFBvcHVwOmJvb2xlYW4gPSBmYWxzZTtcbiAgbmV3SW5jb21pbmdDYWxsczogYW55ID0gW107XG4gIGluY29taW5nQ2FsbHNMaXN0OiBhbnkgPSBbXTtcbiAgbmV3SW5jb21pbmdDYWxsRGF0YT86Q2FsbDtcbiAgcHJpdmF0ZSBzdWJzY3JpcHRpb25zOiBTdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG4gIGNhbGxQcmVmZXJlbmNlOiBhbnk7XG4gIHNoYWtlRGVkaWNhdGVkQnRuOiBib29sZWFuID0gZmFsc2U7XG4gIGlzU21hcnREaWFsQ2FsbDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIHByaXZhdGUgaXNJbml0aWFsaXplZCA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKCAgXG4gICAgcHJpdmF0ZSB0d2lsaW9TZXJ2aWNlOiBUd2lsaW9TZXJ2aWNlLFxuICAgIHByaXZhdGUgZXh0U2VydmljZTogRXh0ZW5zaW9uU2VydmljZSxcbiAgICBwcml2YXRlIGRpYWxvZzogTWF0RGlhbG9nLFxuICAgIHByaXZhdGUgaXBTZXJ2aWNlOiBJcEFkZHJlc3NTZXJ2aWNlLFxuICAgIHByaXZhdGUgZXh0ZW5zaW9uU2VydmljZTogRXh0ZW5zaW9uU2VydmljZSxcbiAgICBwcml2YXRlIGNkazogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcbiAgICBwcml2YXRlIGluY29tZWluZ0NhbGxTb2NrZXRTZXJ2aWNlOiBJbmNvbWVpbmdDYWxsU29ja2V0U2VydmljZSxcbiAgKSB7IFxuICAgIC8vIEluaXRpYWxpemUgaWYgZGlhbHBhZCBpcyB2aXNpYmxlIGJ5IGRlZmF1bHRcbiAgICBpZiAoIXRoaXMuaXNEaWFscGFkSGlkZGVuKSB7XG4gICAgICBjb25zb2xlLmxvZygnc2ZzZGZkc2YnKVxuICAgICAgdGhpcy5pbml0aWFsaXplVHdpbGlvKCk7XG4gICAgfVxuICAgIHRoaXMuaW5jb21laW5nQ2FsbFNvY2tldFNlcnZpY2UuY3JlYXRlQXVkaW9CYXNlKCk7XG4gICAgY29uc29sZS5sb2coJ0RpYWxib3hDb21wb25lbnQgY29uc3RydWN0b3InKTtcbiAgfVxuICBwcml2YXRlIGluaXRpYWxpemVUd2lsaW8oKSB7XG4gICAgaWYgKCF0aGlzLmlzSW5pdGlhbGl6ZWQpIHtcbiAgICAgIHRoaXMudG9rZW4gPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnZXh0X3Rva2VuJykgfHwgJyc7XG4gICAgICBpZiAoIXRoaXMudG9rZW4pIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignTm8gYXV0aGVudGljYXRpb24gdG9rZW4gZm91bmQnKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgXG4gICAgICB0aGlzLmlzSW5pdGlhbGl6ZWQgPSB0cnVlO1xuICAgICAgXG4gICAgICAvLyBJbml0aWFsaXplIFR3aWxpbyBzZXJ2aWNlXG4gICAgICB0aGlzLnR3aWxpb1NlcnZpY2UuaW5pdGlhbGl6ZVR3aWxpb0RldmljZSh0aGlzLmRldmljZUlkKTtcbiAgICB9XG4gIH1cbiAgLy8gbmdPbkNoYW5nZSgpIHtcbiAgLy8gICB0aGlzLmluaXRpYWxpemVUd2lsaW8oKTtcbiAgLy8gfVxuXG4gIC8vIG5nT25Jbml0KCkge1xuICAvLyAgIHRyeSB7XG4gIC8vICAgICB0aGlzLmdldENvbnRhY3RMaXN0KCk7XG4gIC8vICAgICB0aGlzLmdldFVzZXJDYWxsU2V0dGluZygpO1xuICAgICAgXG4gIC8vICAgICAvLyBTdWJzY3JpYmUgdG8gZGlhbCBudW1iZXIgZXZlbnRzXG4gIC8vICAgICBjb25zdCBzdWIxID0gdGhpcy50d2lsaW9TZXJ2aWNlLmRpYWxOdW1iZXJGcm9tT3RoZXJNb2R1bGUuc3Vic2NyaWJlKChjb250YWN0OiBhbnkpID0+IHtcbiAgLy8gICAgICAgaWYgKGNvbnRhY3QubnVtYmVyKSB7XG4gIC8vICAgICAgICAgdGhpcy5pc1NtYXJ0RGlhbENhbGwgPSBmYWxzZTtcbiAgLy8gICAgICAgICBpZiAoY29udGFjdC5pc0RpYWxGcm9tSGlzdG9yeSkge1xuICAvLyAgICAgICAgICAgLy9oYW5kbGUgZGlhbGluZyBmcm9tIGhpc3RvcnkgcGFnZVxuICAvLyAgICAgICAgICAgaWYoY29udGFjdC5jYWxsZXJJZCA9PSAnc21hcnREaWFsaW5nJyl7XG4gICAgICAgICAgICAgXG4gIC8vICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDYWxsZXJJZCA9IHsgbnVtYmVyOiBjb250YWN0LmZyb20gfTtcbiAgLy8gICAgICAgICAgICAgdGhpcy5pc1NtYXJ0RGlhbENhbGwgPSB0cnVlO1xuICAvLyAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgLy8gICAgICAgICAgICAgICB0aGlzLmlzRGlhbHBhZEhpZGRlbiA9IGZhbHNlO1xuICAvLyAgICAgICAgICAgICB9LCAyMDAwKTtcbiAgLy8gICAgICAgICAgICAgdGhpcy5jYWxsRGF0YS5waG9uZSA9IGNvbnRhY3QubnVtYmVyO1xuICAvLyAgICAgICAgICAgICB0aGlzLmNhbGxEYXRhLm5hbWUgPSBjb250YWN0Lm5hbWU7XG4gIC8vICAgICAgICAgICAgIHRoaXMuY2FsbERhdGEuaW1nID0gY29udGFjdC5pbWc7XG4gIC8vICAgICAgICAgICAgIHRoaXMuY2FsbERhdGEuZnJvbSA9IGNvbnRhY3QuZnJvbTtcbiAgLy8gICAgICAgICAgICAgdGhpcy5zYW5pdGl6ZWROdW0gPSBjb250YWN0Lm51bWJlcjtcbiAgLy8gICAgICAgICAgICAgdGhpcy5nZXRVc2VySW5mb3JtYXRpb24oY29udGFjdCk7XG4gIC8vICAgICAgICAgICAvLyB0aGlzLmluY29taW5nQ2FsbHNMaXN0LnB1c2goY29udGFjdClcbiAgLy8gICAgICAgICAgIHRoaXMuaW5pdGlhdGVDYWxsKCk7XG4gIC8vICAgICAgICAgfWVsc2V7XG4gIC8vICAgICAgICAgICB0aGlzLmdldFVzZXJDYWxsU2V0dGluZygpO1xuICAvLyAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gIC8vICAgICAgICAgICAgIHRoaXMuaXNEaWFscGFkSGlkZGVuID0gZmFsc2U7XG4gIC8vICAgICAgICAgICB9LCAxMDAwKTtcbiAgLy8gICAgICAgICAgIHRoaXMuZ2V0VXNlckluZm9ybWF0aW9uKGNvbnRhY3QpO1xuICAvLyAgICAgICAgICAgLy8gdGhpcy5pbmNvbWluZ0NhbGxzTGlzdC5wdXNoKGNvbnRhY3QpXG4gIC8vICAgICAgICAgICAgIHRoaXMuZGlhbGVkTnVtYmVyID0gY29udGFjdC5udW1iZXI7XG4gIC8vICAgICAgICAgICAgIHRoaXMuc2FuaXRpemVkTnVtID0gY29udGFjdC5udW1iZXI7XG4gIC8vICAgICAgICAgICB9XG4gIC8vICAgICAgICAgfSBlbHNlIHtcbiAgLy8gICAgICAgICAgIGlmIChjb250YWN0LmNhbGxlcklkID09ICdhbHdheXNBc2snIHx8IGNvbnRhY3QuY2FsbGVySWQgPT0gJ3NtYXJ0RGlhbGluZycpIHtcbiAgLy8gICAgICAgICAgICAgdGhpcy5nZXRVc2VyQ2FsbFNldHRpbmcoKTtcbiAgLy8gICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gIC8vICAgICAgICAgICAgICAgdGhpcy5pc0RpYWxwYWRIaWRkZW4gPSBmYWxzZTtcbiAgLy8gICAgICAgICAgICAgfSwgMTAwMCk7XG4gIC8vICAgICAgICAgICAgIHRoaXMuZGlhbGVkTnVtYmVyID0gY29udGFjdC5udW1iZXI7XG4gIC8vICAgICAgICAgICAgIHRoaXMuc2FuaXRpemVkTnVtID0gY29udGFjdC5udW1iZXI7XG4gICAgICAgICAgICAgIFxuICAvLyAgICAgICAgICAgfSBlbHNlIHtcbiAgLy8gICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gIC8vICAgICAgICAgICAgICAgdGhpcy5pc0RpYWxwYWRIaWRkZW4gPSBmYWxzZTtcbiAgLy8gICAgICAgICAgICAgfSwgMjAwMCk7XG4gIC8vICAgICAgICAgICAgIHRoaXMuY2FsbERhdGEucGhvbmUgPSBjb250YWN0Lm51bWJlcjtcbiAgLy8gICAgICAgICAgICAgdGhpcy5jYWxsRGF0YS5uYW1lID0gY29udGFjdC5uYW1lO1xuICAvLyAgICAgICAgICAgICB0aGlzLmNhbGxEYXRhLmltZyA9IGNvbnRhY3QuaW1nO1xuICAvLyAgICAgICAgICAgICB0aGlzLnNhbml0aXplZE51bSA9IGNvbnRhY3QubnVtYmVyO1xuICAvLyAgICAgICAgICAgICB0aGlzLmluaXRpYXRlQ2FsbCgpO1xuICAvLyAgICAgICAgICAgfVxuICAvLyAgICAgICAgIH1cbiAgICAgICAgICBcbiAgLy8gICAgICAgfVxuICAvLyAgICAgfSlcbiAgXG4gIC8vICAgICAvLyBoYW5kbGUgaW5jb21pbmcgY2FsbFxuICAvLyAgICAgY29uc3Qgc3ViMiA9IHRoaXMudHdpbGlvU2VydmljZS5jdXJyZW50Q2FsbC5zdWJzY3JpYmUoaW5jb21pbmdDYWxsRGF0YSA9PiB7XG4gIC8vICAgICAgIC8vIGlmIChpbmNvbWluZ0NhbGxEYXRhKSB7XG4gIC8vICAgICAgIC8vICAgdGhpcy5pc0NhbGxJblByb2dyZXNzID0gdHJ1ZTtcbiAgLy8gICAgICAgLy8gICB0aGlzLmlzRGlhbHBhZEhpZGRlbiA9IGZhbHNlO1xuICAvLyAgICAgICAvLyAgIHRoaXMuY2FsbERhdGEucGhvbmUgPSBpbmNvbWluZ0NhbGxEYXRhLnBhcmFtZXRlcnMuRnJvbTtcbiAgLy8gICAgICAgLy8gICB0aGlzLmNhbGxEYXRhLm5hbWUgPSBpbmNvbWluZ0NhbGxEYXRhLmN1c3RvbVBhcmFtZXRlcnMuZ2V0KCduYW1lJyk7XG4gIC8vICAgICAgIC8vICAgdGhpcy5jYWxsRGF0YS5pbWcgPSBpbmNvbWluZ0NhbGxEYXRhLmN1c3RvbVBhcmFtZXRlcnMuZ2V0KCdpbWFnZScpO1xuICAvLyAgICAgICAvLyAgIHRoaXMuY2FsbERhdGEuaXNJbmNvbWluZ0NhbGwgPSB0cnVlO1xuICAvLyAgICAgICAvLyB9XG4gIC8vICAgICAgIGlmIChpbmNvbWluZ0NhbGxEYXRhKSB7XG4gIC8vICAgICAgICAgaWYgKHRoaXMuaXNDYWxsSW5Qcm9ncmVzcykge1xuICAvLyAgICAgICAgICAgdGhpcy5uZXdJbmNvbWluZ0NhbGxzLnB1c2goaW5jb21pbmdDYWxsRGF0YSk7XG4gIC8vICAgICAgICAgICB0aGlzLmdldFVzZXJJbmZvcm1hdGlvbihpbmNvbWluZ0NhbGxEYXRhKTtcbiAgLy8gICAgICAgICB9IGVsc2Uge1xuICAvLyAgICAgICAgICAgdGhpcy5pc0NhbGxJblByb2dyZXNzID0gdHJ1ZTtcbiAgLy8gICAgICAgICAgIHRoaXMuaXNEaWFscGFkSGlkZGVuID0gZmFsc2U7XG4gIC8vICAgICAgICAgICB0aGlzLmNhbGxEYXRhLnBob25lID0gaW5jb21pbmdDYWxsRGF0YS5wYXJhbWV0ZXJzWydGcm9tJ107XG5cbiAgLy8gICAgICAgICAgIHRoaXMuZ2V0VXNlckluZm9ybWF0aW9uKGluY29taW5nQ2FsbERhdGEpO1xuICAvLyAgICAgICAgICAgdGhpcy5jYWxsRGF0YS5uYW1lID0gaW5jb21pbmdDYWxsRGF0YS5jdXN0b21QYXJhbWV0ZXJzLmdldCgnbmFtZScpO1xuICAvLyAgICAgICAgICAgdGhpcy5jYWxsRGF0YS5pbWcgPSBpbmNvbWluZ0NhbGxEYXRhLmN1c3RvbVBhcmFtZXRlcnMuZ2V0KCdpbWFnZScpIHx8ICdhc3NldHMvaW1hZ2VzL3VzZXIuanBnJztcbiAgLy8gICAgICAgICAgIHRoaXMuY2FsbERhdGEuaXNJbmNvbWluZ0NhbGwgPSB0cnVlO1xuICAvLyAgICAgICAgIH1cbiAgLy8gICAgICAgICBpbmNvbWluZ0NhbGxEYXRhLm9uKCdjYW5jZWwnLCAoKSA9PiB7XG4gIC8vICAgICAgICAgICB0aGlzLmluY29taW5nQ2FsbHNMaXN0ID0gdGhpcy5pbmNvbWluZ0NhbGxzTGlzdC5maWx0ZXIoKGl0ZW06IGFueSkgPT4gaXRlbS5wYXJhbWV0ZXJzLkNhbGxTaWQgIT09IGluY29taW5nQ2FsbERhdGEucGFyYW1ldGVyc1snQ2FsbFNpZCddKTtcbiAgLy8gICAgICAgICAgIGlmKHRoaXMuaW5jb21pbmdDYWxsc0xpc3QubGVuZ3RoID09IDApe1xuICAvLyAgICAgICAgICAgICB0aGlzLmlzQ2FsbEluUHJvZ3Jlc3MgPSBmYWxzZTtcbiAgLy8gICAgICAgICAgIH1cbiAgLy8gICAgICAgICB9KTtcblxuICAvLyAgICAgICAgIGluY29taW5nQ2FsbERhdGEub24oJ2Rpc2Nvbm5lY3QnLCAoKSA9PiB7XG4gIC8vICAgICAgICAgICAgIHRoaXMuaW5jb21pbmdDYWxsc0xpc3QgPSB0aGlzLmluY29taW5nQ2FsbHNMaXN0LmZpbHRlcigoaXRlbTogYW55KSA9PiBpdGVtLnBhcmFtZXRlcnMuQ2FsbFNpZCAhPT0gaW5jb21pbmdDYWxsRGF0YS5wYXJhbWV0ZXJzWydDYWxsU2lkJ10pO1xuICAvLyAgICAgICAgICAgICBpZih0aGlzLmluY29taW5nQ2FsbHNMaXN0Lmxlbmd0aCA9PSAwKXtcbiAgLy8gICAgICAgICAgICAgICB0aGlzLmlzQ2FsbEluUHJvZ3Jlc3MgPSBmYWxzZTtcbiAgLy8gICAgICAgICAgICAgfVxuICAvLyAgICAgICAgIH0pO1xuICAvLyAgICAgICB9XG4gIC8vICAgICB9KTtcblxuICAvLyAgICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZChzdWIxKTtcbiAgLy8gICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQoc3ViMik7XG4gIC8vICAgfWNhdGNoKGUpe1xuICAvLyAgICAgY29uc29sZS5sb2coZSlcbiAgLy8gICB9XG4gICAgXG4gIC8vIH1cblxuXG5cbiAgbmdPbkluaXQoKSB7XG4gICAgY29uc29sZS5sb2coJ25nT25Jbml0JylcbiAgICAvLyBFbnN1cmUgVHdpbGlvIGlzIGluaXRpYWxpemVkIGV2ZW4gd2hlbiBkaWFscGFkIHN0YXJ0cyBoaWRkZW4sXG4gICAgLy8gc28gd2UgY2FuIGF1dG8tb3BlbiBvbiBpbmNvbWluZyBjYWxscy5cbiAgICB0aGlzLmluaXRpYWxpemVUd2lsaW8oKTtcbiAgICB0aGlzLmluY29tZWluZ0NhbGxTb2NrZXRTZXJ2aWNlLmNvbm5lY3QodGhpcy5kZXZpY2VJZCk7XG4gICAgdHJ5e1xuICAgICAgICAgIHRoaXMuaW5jb21laW5nQ2FsbFNvY2tldFNlcnZpY2UubGlzdGVuKCkuc3Vic2NyaWJlKGFzeW5jKGluY29taW5nQ2FsbERhdGE6IGFueSkgPT4ge1xuICAgICAgICAgIC8vIGNvbnN0IGRhdGEgPSBKU09OLnBhcnNlKGluY29taW5nQ2FsbERhdGEuZGF0YSk7XG4gICAgICAgICAgLy8gY29uc29sZS5sb2coXCJXUyBFdmVudCBSZWNlaXZlZDpcIiwgaW5jb21pbmdDYWxsRGF0YSk7XG4gICAgICAgICAgLy8gY29uc29sZS5sb2coXCJXUyBFdmVudCBSZWNlaXZlZDpcIiwgaW5jb21pbmdDYWxsRGF0YS5kYXRhKTtcbiAgICAgICAgICB0aGlzLnR3aWxpb1NlcnZpY2UuY29uZmVyZW5jZUNhbGxJbmZvID0gaW5jb21pbmdDYWxsRGF0YTtcbiAgICAgICAgICBpZighIWluY29taW5nQ2FsbERhdGE/Lmxlbmd0aCl7XG4gICAgICAgICAgICAvLyB0aGlzLmluY29taW5nQ2FsbHNMaXN0ID0gaW5jb21pbmdDYWxsRGF0YS5wYXJ0aWNpcGFudHMuZmlsdGVyKChpdGVtOiBhbnkpID0+ICFpdGVtLmlzTGVmdCkgfHwgW107XG4gICAgICAgICAgICB0aGlzLmluY29taW5nQ2FsbHNMaXN0ID0gaW5jb21pbmdDYWxsRGF0YSB8fCBbXTtcbiAgICAgICAgICAgIGxldCBwYXJlbnRDYWxsOiBzdHJpbmdbXSA9IFtdXG4gICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvbkNhbGxMaXN0LmZvckVhY2goKGNhbGw6IGFueSkgPT4ge1xuICAgICAgICAgICAgICBpbmNvbWluZ0NhbGxEYXRhLmZvckVhY2goKGl0ZW06IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgbGV0IGluZm8gPSAgaXRlbS5wYXJ0aWNpcGFudHMuZmluZCgocmVzSW5mbzogYW55KSA9PiByZXNJbmZvLmlkID09PSBjYWxsLnBhcnRpY2lwYW50SWQpXG4gICAgICAgICAgICAgIC8vICByZXR1cm4gaW5mbz8uaWRcbiAgICAgICAgICAgICAgIGlmKGluZm8pIHtcbiAgICAgICAgICAgICAgICAgcGFyZW50Q2FsbC5wdXNoKGluZm8uaWQpO1xuICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYocGFyZW50Q2FsbC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uQ2FsbExpc3QgPSB0aGlzLm5vdGlmaWNhdGlvbkNhbGxMaXN0LmZpbHRlcigoaXRlbTphbnkpID0+ICFwYXJlbnRDYWxsLmluY2x1ZGVzKGl0ZW0pKTtcbiAgICAgICAgICAgICAgdGhpcy5pbmNvbWluZ0NhbGxzTGlzdCA9IFsuLi50aGlzLmluY29taW5nQ2FsbHNMaXN0LCB0aGlzLm5vdGlmaWNhdGlvbkNhbGxMaXN0XVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGhpcy5pbmNvbWluZ0NhbGxzTGlzdCA9IFsuLi50aGlzLmluY29taW5nQ2FsbHNMaXN0LCB0aGlzLm5vdGlmaWNhdGlvbkNhbGxMaXN0XVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuaXNDYWxsSW5Qcm9ncmVzcyA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5pc0RpYWxwYWRIaWRkZW4gPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLmlzSW5jb21pbmdDYWxsbm90aWZpY2F0aW9uID0gZmFsc2U7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBpZighdGhpcy5pc0luY29taW5nQ2FsbG5vdGlmaWNhdGlvbil7XG4gICAgICAgICAgICAgICAgdGhpcy5jYWxsRGF0YSA9IFtdO1xuICAgICAgICAgICAgICAgIHRoaXMuaW5jb21pbmdDYWxsc0xpc3QgPSBbXTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAvLyB0aGlzLmlzQ2FsbEluUHJvZ3Jlc3MgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAvLyBpbmNvbWluZ0NhbGxEYXRhLnBhcnRpY2lwYW50cy5sZW5ndGggPyBpbmNvbWluZ0NhbGxEYXRhLnBhcnRpY2lwYW50cy5maWx0ZXIoKGl0ZW06IGFueSkgPT4gIWl0ZW0uaXNMZWZ0KSA6IFtdO1xuICAgICAgLy8gIHRoaXMuaW5pdGlhbGl6ZVR3aWxpbygpO1xuICAgICAgLy8gaWYgKGluY29taW5nQ2FsbERhdGEudHlwZSA9PT0gXCIvaW5jb21pbmcvY2FsbFwiKSB7XG4gICAgICAvLyAgIGlmIChpbmNvbWluZ0NhbGxEYXRhKSB7XG4gICAgICAvLyAgICAgaWYgKHRoaXMuYXV0b09wZW5PbkluY29taW5nICYmIHRoaXMuX2lzRGlhbHBhZEhpZGRlbikge1xuICAgICAgLy8gICAgICAgdGhpcy5faXNEaWFscGFkSGlkZGVuID0gZmFsc2U7XG4gICAgICAvLyAgICAgfVxuXG4gICAgICAvLyAgICAgaWYgKHRoaXMuaXNDYWxsSW5Qcm9ncmVzcykge1xuICAgICAgLy8gICAgICAgdGhpcy5uZXdJbmNvbWluZ0NhbGxzLnB1c2goaW5jb21pbmdDYWxsRGF0YSk7XG4gICAgICAvLyAgICAgICBjb25zb2xlLmxvZygnMzI1JywgaW5jb21pbmdDYWxsRGF0YSlcbiAgICAgIC8vICAgICAgIHRoaXMuZ2V0VXNlckluZm9ybWF0aW9uKGluY29taW5nQ2FsbERhdGEpO1xuICAgICAgLy8gICAgIH0gZWxzZSB7XG4gICAgICAvLyAgICAgICBpbmNvbWluZ0NhbGxEYXRhWydpc0ZpcnN0Q2FsbCddID0gdHJ1ZTtcbiAgICAgIC8vICAgICAgIGNvbnNvbGUubG9nKCdkZDEnKVxuICAgICAgLy8gICAgICAgdGhpcy5pc0NhbGxJblByb2dyZXNzID0gdHJ1ZTtcbiAgICAgIC8vICAgICAgIHRoaXMuaXNEaWFscGFkSGlkZGVuID0gZmFsc2U7XG4gICAgICAvLyAgICAgICB0aGlzLmNhbGxEYXRhLnBob25lID0gaW5jb21pbmdDYWxsRGF0YS5wYXJhbWV0ZXJzWydGcm9tJ107XG4gICAgICAvLyAgICAgICBjb25zb2xlLmxvZygnZGQyJylcbiAgICAgIC8vICAgICAgIHRoaXMuZ2V0VXNlckluZm9ybWF0aW9uKGluY29taW5nQ2FsbERhdGEpO1xuICAgICAgLy8gICAgICAgdGhpcy5jYWxsRGF0YS5uYW1lID0gaW5jb21pbmdDYWxsRGF0YS5jdXN0b21QYXJhbWV0ZXJzLmdldCgnbmFtZScpO1xuICAgICAgLy8gICAgICAgdGhpcy5jYWxsRGF0YS5pbWcgPSBpbmNvbWluZ0NhbGxEYXRhLmN1c3RvbVBhcmFtZXRlcnMuZ2V0KCdpbWFnZScpIHx8ICdhc3NldHMvaW1hZ2VzL3VzZXIuanBnJztcbiAgICAgIC8vICAgICAgIHRoaXMuY2FsbERhdGEuaXNJbmNvbWluZ0NhbGwgPSB0cnVlO1xuICAgICAgLy8gICAgIH1cbiAgICAgIC8vICAgICBpbmNvbWluZ0NhbGxEYXRhLm9uKCdjYW5jZWwnLCAoKSA9PiB7XG4gICAgICAvLyAgICAgICB0aGlzLmluY29taW5nQ2FsbHNMaXN0ID0gdGhpcy5pbmNvbWluZ0NhbGxzTGlzdC5maWx0ZXIoKGl0ZW06IGFueSkgPT4gaXRlbS5wYXJhbWV0ZXJzWydDYWxsU2lkJ10gIT09IGluY29taW5nQ2FsbERhdGEucGFyYW1ldGVyc1snQ2FsbFNpZCddKTtcbiAgICAgIC8vICAgICAgIC8vIGlmKHRoaXMuaW5jb21pbmdDYWxsc0xpc3QubGVuZ3RoID09IDApe1xuICAgICAgLy8gICAgICAgLy8gICBjb25zb2xlLmxvZygnZGQzJylcbiAgICAgIC8vICAgICAgIC8vICAgdGhpcy5pc0NhbGxJblByb2dyZXNzID0gZmFsc2U7XG4gICAgICAvLyAgICAgICAvLyB9XG4gICAgICAvLyAgICAgfSk7XG5cbiAgICAgIC8vICAgICBpbmNvbWluZ0NhbGxEYXRhLm9uKCdkaXNjb25uZWN0JywgKCkgPT4ge1xuICAgICAgLy8gICAgICAgICB0aGlzLmluY29taW5nQ2FsbHNMaXN0ID0gdGhpcy5pbmNvbWluZ0NhbGxzTGlzdC5maWx0ZXIoKGl0ZW06IGFueSkgPT4gaXRlbS5wYXJhbWV0ZXJzWydDYWxsU2lkJ10gIT09IGluY29taW5nQ2FsbERhdGEucGFyYW1ldGVyc1snQ2FsbFNpZCddKTtcbiAgICAgIC8vICAgICAgICAgLy8gaWYodGhpcy5pbmNvbWluZ0NhbGxzTGlzdC5sZW5ndGggPT0gMCl7XG4gICAgICAvLyAgICAgICAgIC8vICAgY29uc29sZS5sb2coJ2RkNCcpXG4gICAgICAvLyAgICAgICAgIC8vICAgdGhpcy5pc0NhbGxJblByb2dyZXNzID0gZmFsc2U7XG4gICAgICAvLyAgICAgICAgIC8vIH1cbiAgICAgIC8vICAgICB9KTtcbiAgICAgIC8vICAgfVxuICAgICAgLy8gfVxuICAgIH0pO1xuICAgICAgdGhpcy50b2tlbiA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdleHRfdG9rZW4nKSB8fCAnJztcbiAgICAgIC8vdGhpcy5pc0NhbGxJblByb2dyZXNzID0gdHJ1ZTtcbiAgICAgIHRoaXMuZ2V0Q29udGFjdExpc3QoKTtcbiAgICAgIFxuICAgICAgdGhpcy5nZXRVc2VyQ2FsbFNldHRpbmcoKTtcbiAgICAgIGNvbnN0IHN1YjEgPSB0aGlzLnR3aWxpb1NlcnZpY2UuZGlhbE51bWJlckZyb21PdGhlck1vZHVsZS5zdWJzY3JpYmUoKGNvbnRhY3Q6YW55KSA9PiB7XG4gICAgICAgIGlmIChjb250YWN0Lm51bWJlcikge1xuICAgICAgICAgIHRoaXMuaXNTbWFydERpYWxDYWxsID0gZmFsc2U7XG4gICAgICAgICAgaWYgKGNvbnRhY3QuaXNEaWFsRnJvbUhpc3RvcnkpIHtcbiAgICAgICAgICAgIC8vaGFuZGxlIGRpYWxpbmcgZnJvbSBoaXN0b3J5IHBhZ2VcbiAgICAgICAgICAgIGlmKGNvbnRhY3QuY2FsbGVySWQgPT0gJ3NtYXJ0RGlhbGluZycpe1xuICAgICAgICAgICAgIFxuICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkQ2FsbGVySWQgPSB7IG51bWJlcjogY29udGFjdC5mcm9tIH07XG4gICAgICAgICAgICAgIHRoaXMuaXNTbWFydERpYWxDYWxsID0gdHJ1ZTtcbiAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5pc0RpYWxwYWRIaWRkZW4gPSBmYWxzZTtcbiAgICAgICAgICAgICAgfSwgMjAwMCk7XG4gICAgICAgICAgICAgIHRoaXMuY2FsbERhdGEucGhvbmUgPSBjb250YWN0Lm51bWJlcjtcbiAgICAgICAgICAgICAgdGhpcy5jYWxsRGF0YS5uYW1lID0gY29udGFjdC5uYW1lO1xuICAgICAgICAgICAgICB0aGlzLmNhbGxEYXRhLmltZyA9IGNvbnRhY3QuaW1nO1xuICAgICAgICAgICAgICB0aGlzLmNhbGxEYXRhLmZyb20gPSBjb250YWN0LmZyb207XG4gICAgICAgICAgICAgIHRoaXMuc2FuaXRpemVkTnVtID0gY29udGFjdC5udW1iZXI7XG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKCcyNzQnLCBjb250YWN0KVxuICAgICAgICAgICAgICB0aGlzLmdldFVzZXJJbmZvcm1hdGlvbihjb250YWN0KTtcbiAgICAgICAgICAgIC8vIHRoaXMuaW5jb21pbmdDYWxsc0xpc3QucHVzaChjb250YWN0KVxuICAgICAgICAgICAgdGhpcy5pbml0aWF0ZUNhbGwoKTtcbiAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgIHRoaXMuZ2V0VXNlckNhbGxTZXR0aW5nKCk7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5pc0RpYWxwYWRIaWRkZW4gPSBmYWxzZTtcbiAgICAgICAgICAgIH0sIDEwMDApO1xuICAgICAgICAgICAgY29uc29sZS5sb2coJzI4MicsIGNvbnRhY3QpXG4gICAgICAgICAgICB0aGlzLmdldFVzZXJJbmZvcm1hdGlvbihjb250YWN0KTtcbiAgICAgICAgICAgIC8vIHRoaXMuaW5jb21pbmdDYWxsc0xpc3QucHVzaChjb250YWN0KVxuICAgICAgICAgICAgICB0aGlzLmRpYWxlZE51bWJlciA9IGNvbnRhY3QubnVtYmVyO1xuICAgICAgICAgICAgICB0aGlzLnNhbml0aXplZE51bSA9IGNvbnRhY3QubnVtYmVyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoY29udGFjdC5jYWxsZXJJZCA9PSAnYWx3YXlzQXNrJyB8fCBjb250YWN0LmNhbGxlcklkID09ICdzbWFydERpYWxpbmcnKSB7XG4gICAgICAgICAgICAgIHRoaXMuZ2V0VXNlckNhbGxTZXR0aW5nKCk7XG4gICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuaXNEaWFscGFkSGlkZGVuID0gZmFsc2U7XG4gICAgICAgICAgICAgIH0sIDEwMDApO1xuICAgICAgICAgICAgICB0aGlzLmRpYWxlZE51bWJlciA9IGNvbnRhY3QubnVtYmVyO1xuICAgICAgICAgICAgICB0aGlzLnNhbml0aXplZE51bSA9IGNvbnRhY3QubnVtYmVyO1xuICAgICAgICAgICAgICBcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuaXNEaWFscGFkSGlkZGVuID0gZmFsc2U7XG4gICAgICAgICAgICAgIH0sIDIwMDApO1xuICAgICAgICAgICAgICB0aGlzLmNhbGxEYXRhLnBob25lID0gY29udGFjdC5udW1iZXI7XG4gICAgICAgICAgICAgIHRoaXMuY2FsbERhdGEubmFtZSA9IGNvbnRhY3QubmFtZTtcbiAgICAgICAgICAgICAgdGhpcy5jYWxsRGF0YS5pbWcgPSBjb250YWN0LmltZztcbiAgICAgICAgICAgICAgdGhpcy5zYW5pdGl6ZWROdW0gPSBjb250YWN0Lm51bWJlcjtcbiAgICAgICAgICAgICAgdGhpcy5pbml0aWF0ZUNhbGwoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgXG4gICAgICAgIH1cbiAgICAgIH0pXG4gIFxuICAgICAgLy8gaGFuZGxlIGluY29taW5nIGNhbGwgKG1hbmFnZWQgaW50ZXJuYWxseTsgaG9zdCBuZWVkIG5vdCBwYXNzIGluY29taW5nQ2FsbERhdGEpXG4gICAgICBjb25zdCBzdWIyID0gdGhpcy50d2lsaW9TZXJ2aWNlLmN1cnJlbnRDYWxsLnN1YnNjcmliZSgoaW5jb21pbmdDYWxsRGF0YTogYW55KSA9PiB7XG4gICAgICAgIC8vIGlmIChpbmNvbWluZ0NhbGxEYXRhKSB7XG4gICAgICAgIC8vICAgdGhpcy5pc0NhbGxJblByb2dyZXNzID0gdHJ1ZTtcbiAgICAgICAgLy8gICB0aGlzLmlzRGlhbHBhZEhpZGRlbiA9IGZhbHNlO1xuICAgICAgICAvLyAgIHRoaXMuY2FsbERhdGEucGhvbmUgPSBpbmNvbWluZ0NhbGxEYXRhLnBhcmFtZXRlcnMuRnJvbTtcbiAgICAgICAgLy8gICB0aGlzLmNhbGxEYXRhLm5hbWUgPSBpbmNvbWluZ0NhbGxEYXRhLmN1c3RvbVBhcmFtZXRlcnMuZ2V0KCduYW1lJyk7XG4gICAgICAgIC8vICAgdGhpcy5jYWxsRGF0YS5pbWcgPSBpbmNvbWluZ0NhbGxEYXRhLmN1c3RvbVBhcmFtZXRlcnMuZ2V0KCdpbWFnZScpO1xuICAgICAgICAvLyAgIHRoaXMuY2FsbERhdGEuaXNJbmNvbWluZ0NhbGwgPSB0cnVlO1xuICAgICAgICAvLyB9XG4gICAgICAgIGlmIChpbmNvbWluZ0NhbGxEYXRhKSB7XG4gICAgICAgICAgaWYgKHRoaXMuYXV0b09wZW5PbkluY29taW5nICYmIHRoaXMuX2lzRGlhbHBhZEhpZGRlbikge1xuICAgICAgICAgICAgdGhpcy5faXNEaWFscGFkSGlkZGVuID0gZmFsc2U7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHRoaXMuaXNDYWxsSW5Qcm9ncmVzcykge1xuICAgICAgICAgICAgdGhpcy5uZXdJbmNvbWluZ0NhbGxzLnB1c2goaW5jb21pbmdDYWxsRGF0YSk7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnMzI1JywgaW5jb21pbmdDYWxsRGF0YSlcbiAgICAgICAgICAgIHRoaXMuZ2V0VXNlckluZm9ybWF0aW9uKGluY29taW5nQ2FsbERhdGEpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpbmNvbWluZ0NhbGxEYXRhWydpc0ZpcnN0Q2FsbCddID0gdHJ1ZTtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdkZDEnKVxuICAgICAgICAgICAgLy8gdGhpcy5pc0NhbGxJblByb2dyZXNzID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuaXNEaWFscGFkSGlkZGVuID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmNhbGxEYXRhLnBob25lID0gaW5jb21pbmdDYWxsRGF0YS5wYXJhbWV0ZXJzWydGcm9tJ107XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnZGQyJylcbiAgICAgICAgICAgIHRoaXMuZ2V0VXNlckluZm9ybWF0aW9uKGluY29taW5nQ2FsbERhdGEpO1xuICAgICAgICAgICAgdGhpcy5jYWxsRGF0YS5uYW1lID0gaW5jb21pbmdDYWxsRGF0YS5jdXN0b21QYXJhbWV0ZXJzLmdldCgnbmFtZScpO1xuICAgICAgICAgICAgdGhpcy5jYWxsRGF0YS5pbWcgPSBpbmNvbWluZ0NhbGxEYXRhLmN1c3RvbVBhcmFtZXRlcnMuZ2V0KCdpbWFnZScpIHx8ICdhc3NldHMvaW1hZ2VzL3VzZXIuanBnJztcbiAgICAgICAgICAgIHRoaXMuY2FsbERhdGEuaXNJbmNvbWluZ0NhbGwgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpbmNvbWluZ0NhbGxEYXRhLm9uKCdjYW5jZWwnLCAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmluY29taW5nQ2FsbHNMaXN0ID0gdGhpcy5pbmNvbWluZ0NhbGxzTGlzdC5maWx0ZXIoKGl0ZW06IGFueSkgPT4gaXRlbS5wYXJhbWV0ZXJzWydDYWxsU2lkJ10gIT09IGluY29taW5nQ2FsbERhdGEucGFyYW1ldGVyc1snQ2FsbFNpZCddKTtcbiAgICAgICAgICAgIC8vIGlmKHRoaXMuaW5jb21pbmdDYWxsc0xpc3QubGVuZ3RoID09IDApe1xuICAgICAgICAgICAgLy8gICBjb25zb2xlLmxvZygnZGQzJylcbiAgICAgICAgICAgIC8vICAgdGhpcy5pc0NhbGxJblByb2dyZXNzID0gZmFsc2U7XG4gICAgICAgICAgICAvLyB9XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBpbmNvbWluZ0NhbGxEYXRhLm9uKCdkaXNjb25uZWN0JywgKCkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLmluY29taW5nQ2FsbHNMaXN0ID0gdGhpcy5pbmNvbWluZ0NhbGxzTGlzdC5maWx0ZXIoKGl0ZW06IGFueSkgPT4gaXRlbS5wYXJhbWV0ZXJzWydDYWxsU2lkJ10gIT09IGluY29taW5nQ2FsbERhdGEucGFyYW1ldGVyc1snQ2FsbFNpZCddKTtcbiAgICAgICAgICAgICAgLy8gaWYodGhpcy5pbmNvbWluZ0NhbGxzTGlzdC5sZW5ndGggPT0gMCl7XG4gICAgICAgICAgICAgIC8vICAgY29uc29sZS5sb2coJ2RkNCcpXG4gICAgICAgICAgICAgIC8vICAgdGhpcy5pc0NhbGxJblByb2dyZXNzID0gZmFsc2U7XG4gICAgICAgICAgICAgIC8vIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQoc3ViMSk7XG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKHN1YjIpO1xuICAgIH1jYXRjaChlKXtcbiAgICAgIGNvbnNvbGUubG9nKGUpXG4gICAgfVxuICB9XG5cbiAgXG4gIGdldFVzZXJJbmZvcm1hdGlvbihpbmNvbWluZ0NhbGxEYXRhOiBhbnkpIHtcbiAgICAvLyBjb25zb2xlLmxvZygnZ2V0VXNlckluZm9ybWF0aW9uJywgaW5jb21pbmdDYWxsRGF0YSk7XG4gICAgbGV0IGRhdGEgPSB0aGlzLmZyb21FbnRyaWVzKEFycmF5LmZyb20oaW5jb21pbmdDYWxsRGF0YS5jdXN0b21QYXJhbWV0ZXJzLmVudHJpZXMoKSkpO1xuICAgIGNvbnNvbGUubG9nKCczNjYtLS0nLCBkYXRhKVxuICAgIHRoaXMuZXh0ZW5zaW9uU2VydmljZS5nZXRVc2VySW5mb3JtYXRpb24oZGF0YVsndHdpbGlvQXV0aElkJ10pLnN1YnNjcmliZShcbiAgICByZXNwb25zZSA9PiB7XG4gICAgICBpbmNvbWluZ0NhbGxEYXRhWyd1c2VySW5mbyddPXJlc3BvbnNlXG4gICAgICBjb25zdCBhbHJlYWR5RXhpc3RzID0gdGhpcy5pbmNvbWluZ0NhbGxzTGlzdC5zb21lKChjYWxsOiBhbnkpID0+IGNhbGwucGFyYW1ldGVycz8uQ2FsbFNpZCA9PT0gaW5jb21pbmdDYWxsRGF0YS5wYXJhbWV0ZXJzPy5DYWxsU2lkKTtcbiAgICAgIGlmKCFhbHJlYWR5RXhpc3RzKXtcbiAgICAgICAgdGhpcy5pbmNvbWluZ0NhbGxzTGlzdC5wdXNoKGluY29taW5nQ2FsbERhdGEpO1xuICAgICAgfVxuICAgICAgdGhpcy5jZGsuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH0sIGVycm9yID0+IHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHN0YXJ0aW5nIHJlY29yZGluZycsIGVycm9yKTtcbiAgICB9KTtcbiAgfVxuXG4gIGZyb21FbnRyaWVzKGVudHJpZXM6IFtzdHJpbmcsIGFueV1bXSk6IFJlY29yZDxzdHJpbmcsIGFueT4ge1xuICAgIHJldHVybiBlbnRyaWVzLnJlZHVjZSgoYWNjLCBba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgIGFjY1trZXldID0gdmFsdWU7XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sIHt9IGFzIFJlY29yZDxzdHJpbmcsIGFueT4pO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIHRoaXMucmVnaXN0ZXJEcmFnRWxlbWVudCgpO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmKGNoYW5nZXNbJ2luY29taW5nQ2FsbG5vdGlmaWNhdGlvbiddKSB7XG4gICAgICBjb25zb2xlLmxvZygnaW5jb21pbmdDYWxsbm90aWZpY2F0aW9uJywgY2hhbmdlc1snaW5jb21pbmdDYWxsbm90aWZpY2F0aW9uJ10uY3VycmVudFZhbHVlKTtcbiAgICAgIHRoaXMuaXNJbmNvbWluZ0NhbGxub3RpZmljYXRpb24gPSB0cnVlO1xuICAgICAgLy8gbGV0IHBheWxvYWQgPSB7XG4gICAgICAvLyAgIHJlY29yZElkOiB0aGlzLmluY29taW5nQ2FsbG5vdGlmaWNhdGlvbi5kYXRhLmRhdGEucGFydGljaXBhbnRJZCxcbiAgICAgIC8vICAgaXBBZGRyZXNzOiAnJyxcbiAgICAgIC8vICAgaXBDb3VudHJ5OiAnJyxcbiAgICAgIC8vICAgY2FsbFN0YXR1czogJ2Fuc3dlcmVkJyxcbiAgICAgIC8vICAgZGV2aWNlSWQ6IHRoaXMuZGV2aWNlSWQsXG4gICAgICAvLyAgIGNvbmZlcmVuY2VJZDogdGhpcy5pbmNvbWluZ0NhbGxub3RpZmljYXRpb24uZGF0YS5kYXRhLmNvbmZlcmVuY2VJZCB8fCAnbm8nXG4gICAgICAvLyB9XG4gICAgICBsZXQgaW5jb21pbmdDYWxsPSB7XG4gICAgICAgIGNvbmZlcmVuY2VJZDogJ25vJyxcbiAgICAgICAgaXNBY3RpdmU6IHRydWUsXG4gICAgICAgIGlzSW5jb21pbmdDYWxsOiB0cnVlLFxuICAgICAgICBwYXJ0aWNpcGFudElkOiB0aGlzLmluY29taW5nQ2FsbG5vdGlmaWNhdGlvbi5kYXRhLmRhdGE/LnBhcnRpY2lwYW50SWQsXG4gICAgICAgIHBhcnRpY2lwYW50czogW1xuICAgICAgICAgIHtkaXJlY3Rpb246IFwiaW5jb21pbmctY2FsbFwiLCAgaW1nOiAnYXNzZXRzL2ltYWdlcy91c2VyLmpwZycsIGlzSW5jb21pbmdDYWxsOiB0cnVlLCBpc0hvbGQ6IGZhbHNlLCBpc0NvbmZlcmVuY2U6IGZhbHNlLCBpc0FjY2VwdENhbGw6IGZhbHNlLCBkaWFsOiB0cnVlLCBwaG9uZTogdGhpcy5pbmNvbWluZ0NhbGxub3RpZmljYXRpb24uZGF0YS5kYXRhPy5mcm9tTnVtYmVyLCBwYXJ0aWNpcGFudElkOiB0aGlzLmluY29taW5nQ2FsbG5vdGlmaWNhdGlvbi5kYXRhLmRhdGE/LnBhcnRpY2lwYW50SWQsIG5hbWU6IHRoaXMuaW5jb21pbmdDYWxsbm90aWZpY2F0aW9uLmRhdGEuZGF0YT8uZnJvbU5hbWUsIHRpbWU6JycsIGlkOiB0aGlzLmluY29taW5nQ2FsbG5vdGlmaWNhdGlvbi5kYXRhLmRhdGE/LnBhcnRpY2lwYW50SWR9XG4gICAgICAgIF1cbiAgICAgIH1cbiAgICAgIHRoaXMuaW5jb21pbmdDYWxsc0xpc3QucHVzaChpbmNvbWluZ0NhbGwpXG4gICAgICB0aGlzLm5vdGlmaWNhdGlvbkNhbGxMaXN0LnB1c2goaW5jb21pbmdDYWxsKVxuICAgICAgaWYodGhpcy5pbmNvbWluZ0NhbGxub3RpZmljYXRpb24uZGF0YS5kYXRhPy5wYXJ0aWNpcGFudElkKXtcbiAgICAgICAgdGhpcy5pc0NhbGxJblByb2dyZXNzID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIC8vIHRoaXMuZXh0ZW5zaW9uU2VydmljZS5zZXRJbmNvbWluZ0NhbGxTdGF0dXMocGF5bG9hZCkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xuICAgICAgLy8gICBjb25zb2xlLmxvZyhyZXMpXG4gICAgICAvLyB9KVxuICAgIH1cbiAgICBpZihjaGFuZ2VzWydkZXZpY2VJZCddKSB7XG4gICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnZGV2aWNlSWQnLCBjaGFuZ2VzWydkZXZpY2VJZCddLmN1cnJlbnRWYWx1ZSk7XG4gICAgICB0aGlzLnR3aWxpb1NlcnZpY2UuZGV2aWNlSWQgPSBjaGFuZ2VzWydkZXZpY2VJZCddLmN1cnJlbnRWYWx1ZTtcbiAgICAgIGNvbnNvbGUubG9nKCdTZXQgZGV2aWNlSWQgaW4gbG9jYWxTdG9yYWdlOicsIGNoYW5nZXNbJ2RldmljZUlkJ10uY3VycmVudFZhbHVlKTtcbiAgICB9XG4gICAgaWYodGhpcy51c2VySWQpIHtcbiAgICAgIHRoaXMuZXh0ZW5zaW9uU2VydmljZS51c2VySWQgPSB0aGlzLnVzZXJJZDtcbiAgICB9XG4gICAgaWYgKGNoYW5nZXNbJ2lzRGlhbHBhZEhpZGRlbiddICYmICF0aGlzLmlzRGlhbHBhZEhpZGRlbikge1xuICAgICAgdGhpcy5nZXRDb250YWN0TGlzdCgpO1xuICAgICAgdGhpcy5nZXRVc2VyQ2FsbFNldHRpbmcoKTtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLmRpYWxJbnB1dEVsZW1lbnQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgfSwgMCk7XG4gICAgICBpZih0aGlzLmluY29taW5nQ2FsbERhdGEpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNDYWxsSW5Qcm9ncmVzcykge1xuICAgICAgICAgIHRoaXMubmV3SW5jb21pbmdDYWxscy5wdXNoKHRoaXMuaW5jb21pbmdDYWxsRGF0YSk7XG4gICAgICAgICAgY29uc29sZS5sb2coJzQwNCcsIHRoaXMuaW5jb21pbmdDYWxsRGF0YSlcbiAgICAgICAgICB0aGlzLmdldFVzZXJJbmZvcm1hdGlvbih0aGlzLmluY29taW5nQ2FsbERhdGEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnNvbGUubG9nKCdkZDUnKVxuICAgICAgICAgIHRoaXMuaXNDYWxsSW5Qcm9ncmVzcyA9IHRydWU7XG4gICAgICAgICAgdGhpcy5pc0RpYWxwYWRIaWRkZW4gPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLmNhbGxEYXRhLnBob25lID0gdGhpcy5pbmNvbWluZ0NhbGxEYXRhLnBhcmFtZXRlcnNbJ0Zyb20nXTtcbiAgICAgICAgICBjb25zb2xlLmxvZygnNDExJywgdGhpcy5pbmNvbWluZ0NhbGxEYXRhKVxuICAgICAgICAgIHRoaXMuZ2V0VXNlckluZm9ybWF0aW9uKHRoaXMuaW5jb21pbmdDYWxsRGF0YSk7XG4gICAgICAgICAgdGhpcy5jYWxsRGF0YS5uYW1lID0gdGhpcy5pbmNvbWluZ0NhbGxEYXRhLmN1c3RvbVBhcmFtZXRlcnMuZ2V0KCduYW1lJyk7XG4gICAgICAgICAgdGhpcy5jYWxsRGF0YS5pbWcgPSB0aGlzLmluY29taW5nQ2FsbERhdGEuY3VzdG9tUGFyYW1ldGVycy5nZXQoJ2ltYWdlJykgfHwgJ2Fzc2V0cy9pbWFnZXMvdXNlci5qcGcnO1xuICAgICAgICAgIHRoaXMuY2FsbERhdGEuaXNJbmNvbWluZ0NhbGwgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaW5jb21pbmdDYWxsRGF0YS5vbignY2FuY2VsJywgKCkgPT4ge1xuICAgICAgICAgIHRoaXMuaW5jb21pbmdDYWxsc0xpc3QgPSB0aGlzLmluY29taW5nQ2FsbHNMaXN0LmZpbHRlcigoaXRlbTogYW55KSA9PiBpdGVtLnBhcmFtZXRlcnNbJ0NhbGxTaWQnXSAhPT0gdGhpcy5pbmNvbWluZ0NhbGxEYXRhLnBhcmFtZXRlcnNbJ0NhbGxTaWQnXSk7XG4gICAgICAgICAgLy8gaWYodGhpcy5pbmNvbWluZ0NhbGxzTGlzdC5sZW5ndGggPT0gMCl7XG4gICAgICAgICAgLy8gICBjb25zb2xlLmxvZygnZGQ2JylcbiAgICAgICAgICAvLyAgIHRoaXMuaXNDYWxsSW5Qcm9ncmVzcyA9IGZhbHNlO1xuICAgICAgICAgIC8vIH1cbiAgICAgICAgICB0aGlzLmluY29taW5nQ2FsbERhdGEuZGlzY29ubmVjdCgpO1xuICAgICAgICB9KTtcbiAgICAgICAgXG4gICAgICAgIHRoaXMuaW5jb21pbmdDYWxsRGF0YS5vbignZGlzY29ubmVjdCcsICgpID0+IHtcbiAgICAgICAgICB0aGlzLmluY29taW5nQ2FsbHNMaXN0ID0gdGhpcy5pbmNvbWluZ0NhbGxzTGlzdC5maWx0ZXIoKGl0ZW06IGFueSkgPT4gaXRlbS5wYXJhbWV0ZXJzWydDYWxsU2lkJ10gIT09IHRoaXMuaW5jb21pbmdDYWxsRGF0YS5wYXJhbWV0ZXJzWydDYWxsU2lkJ10pO1xuICAgICAgICAgIHRoaXMuaW5jb21pbmdDYWxsRGF0YS5kaXNjb25uZWN0KCk7XG4gICAgICAgICAgLy8gaWYodGhpcy5pbmNvbWluZ0NhbGxzTGlzdC5sZW5ndGggPT0gMCl7XG4gICAgICAgICAgLy8gICBjb25zb2xlLmxvZygnZGQ3JylcbiAgICAgICAgICAvLyAgIHRoaXMuaXNDYWxsSW5Qcm9ncmVzcyA9IGZhbHNlO1xuICAgICAgICAgIC8vIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChjaGFuZ2VzWydjb250YWN0SW5mbyddICYmIHRoaXMuY29udGFjdEluZm8pIHtcbiAgICAgIGxldCBjb250YWN0ID0gdGhpcy5jb250YWN0SW5mbztcbiAgICBpZiAoY29udGFjdC5udW1iZXIpIHtcbiAgICAgIHRoaXMuaXNTbWFydERpYWxDYWxsID0gZmFsc2U7XG4gICAgICB0aGlzLmRpYWxlZE51bWJlciA9IGNvbnRhY3QubnVtYmVyO1xuICAgICAgaWYgKGNvbnRhY3QuaXNEaWFsRnJvbUhpc3RvcnkpIHtcbiAgICAgICAgLy9oYW5kbGUgZGlhbGluZyBmcm9tIGhpc3RvcnkgcGFnZVxuICAgICAgICBpZihjb250YWN0LmNhbGxlcklkID09ICdzbWFydERpYWxpbmcnKXtcbiAgICAgICAgIFxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDYWxsZXJJZCA9IHsgbnVtYmVyOiBjb250YWN0LmZyb20gfTtcbiAgICAgICAgICB0aGlzLmlzU21hcnREaWFsQ2FsbCA9IHRydWU7XG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmlzRGlhbHBhZEhpZGRlbiA9IGZhbHNlO1xuICAgICAgICAgIH0sIDIwMDApO1xuICAgICAgICAgIHRoaXMuY2FsbERhdGEucGhvbmUgPSBjb250YWN0Lm51bWJlcjtcbiAgICAgICAgICB0aGlzLmNhbGxEYXRhLm5hbWUgPSBjb250YWN0Lm5hbWU7XG4gICAgICAgICAgdGhpcy5jYWxsRGF0YS5pbWcgPSBjb250YWN0LmltZztcbiAgICAgICAgICB0aGlzLmNhbGxEYXRhLmZyb20gPSBjb250YWN0LmZyb207XG4gICAgICAgICAgdGhpcy5zYW5pdGl6ZWROdW0gPSBjb250YWN0Lm51bWJlcjtcbiAgICAgICAgICBjb25zb2xlLmxvZygnMjc0JywgY29udGFjdClcbiAgICAgICAgICB0aGlzLmdldFVzZXJJbmZvcm1hdGlvbihjb250YWN0KTtcbiAgICAgICAgICBjb25zb2xlLmxvZygnNDU0JywgY29udGFjdClcbiAgICAgICAgLy8gdGhpcy5pbmNvbWluZ0NhbGxzTGlzdC5wdXNoKGNvbnRhY3QpXG4gICAgICAgIHRoaXMuaW5pdGlhdGVDYWxsKCk7XG4gICAgICB9ZWxzZXtcbiAgICAgICAgdGhpcy5nZXRVc2VyQ2FsbFNldHRpbmcoKTtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5pc0RpYWxwYWRIaWRkZW4gPSBmYWxzZTtcbiAgICAgICAgfSwgMTAwMCk7XG4gICAgICAgIGNvbnNvbGUubG9nKCcyODInLCBjb250YWN0KVxuICAgICAgICB0aGlzLmdldFVzZXJJbmZvcm1hdGlvbihjb250YWN0KTtcbiAgICAgICAgY29uc29sZS5sb2coJzQ2NCcsIGNvbnRhY3QpXG4gICAgICAgIC8vIHRoaXMuaW5jb21pbmdDYWxsc0xpc3QucHVzaChjb250YWN0KVxuICAgICAgICAgIHRoaXMuZGlhbGVkTnVtYmVyID0gY29udGFjdC5udW1iZXI7XG4gICAgICAgICAgdGhpcy5zYW5pdGl6ZWROdW0gPSBjb250YWN0Lm51bWJlcjtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGNvbnRhY3QuY2FsbGVySWQgPT0gJ2Fsd2F5c0FzaycgfHwgY29udGFjdC5jYWxsZXJJZCA9PSAnc21hcnREaWFsaW5nJykge1xuICAgICAgICAgIHRoaXMuZ2V0VXNlckNhbGxTZXR0aW5nKCk7XG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmlzRGlhbHBhZEhpZGRlbiA9IGZhbHNlO1xuICAgICAgICAgIH0sIDEwMDApO1xuICAgICAgICAgIHRoaXMuZGlhbGVkTnVtYmVyID0gY29udGFjdC5udW1iZXI7XG4gICAgICAgICAgdGhpcy5zYW5pdGl6ZWROdW0gPSBjb250YWN0Lm51bWJlcjtcbiAgICAgICAgICBcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuaXNEaWFscGFkSGlkZGVuID0gZmFsc2U7XG4gICAgICAgICAgfSwgMjAwMCk7XG4gICAgICAgICAgdGhpcy5jYWxsRGF0YS5waG9uZSA9IGNvbnRhY3QubnVtYmVyO1xuICAgICAgICAgIHRoaXMuY2FsbERhdGEubmFtZSA9IGNvbnRhY3QubmFtZTtcbiAgICAgICAgICB0aGlzLmNhbGxEYXRhLmltZyA9IGNvbnRhY3QuaW1nO1xuICAgICAgICAgIHRoaXMuc2FuaXRpemVkTnVtID0gY29udGFjdC5udW1iZXI7XG4gICAgICAgICAgdGhpcy5pbml0aWF0ZUNhbGwoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgXG4gICAgfVxuICB9XG4gIH1cbiAgcHJpdmF0ZSByZWdpc3RlckRyYWdFbGVtZW50KCkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBlbG1udCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkcmFncGFyZW50MScpO1xuICAgICAgaWYgKCFlbG1udCkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdEcmFnIGVsZW1lbnQgbm90IGZvdW5kJyk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgbGV0IHBvczEgPSAwLCBwb3MyID0gMCwgcG9zMyA9IDAsIHBvczQgPSAwO1xuXG4gICAgICBjb25zdCBkcmFnTW91c2VEb3duID0gKGU6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gZS50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgIGlmICh0YXJnZXQudGFnTmFtZS50b0xvd2VyQ2FzZSgpID09PSAnaW5wdXQnKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBwb3MzID0gZS5jbGllbnRYO1xuICAgICAgICBwb3M0ID0gZS5jbGllbnRZO1xuICAgICAgICBcbiAgICAgICAgY29uc3Qgb25Nb3VzZU1vdmUgPSAobW92ZUV2ZW50OiBNb3VzZUV2ZW50KSA9PiBlbGVtZW50RHJhZyhtb3ZlRXZlbnQpO1xuICAgICAgICBjb25zdCBvbk1vdXNlVXAgPSAoKSA9PiB7XG4gICAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIG9uTW91c2VVcCk7XG4gICAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgb25Nb3VzZU1vdmUpO1xuICAgICAgICB9O1xuXG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIG9uTW91c2VNb3ZlKTtcbiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIG9uTW91c2VVcCk7XG4gICAgICB9O1xuXG4gICAgICBjb25zdCBlbGVtZW50RHJhZyA9IChlOiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgcG9zMSA9IHBvczMgLSBlLmNsaWVudFg7XG4gICAgICAgIHBvczIgPSBwb3M0IC0gZS5jbGllbnRZO1xuICAgICAgICBwb3MzID0gZS5jbGllbnRYO1xuICAgICAgICBwb3M0ID0gZS5jbGllbnRZO1xuICAgICAgICBcbiAgICAgICAgZWxtbnQuc3R5bGUudG9wID0gKGVsbW50Lm9mZnNldFRvcCAtIHBvczIpICsgJ3B4JztcbiAgICAgICAgZWxtbnQuc3R5bGUubGVmdCA9IChlbG1udC5vZmZzZXRMZWZ0IC0gcG9zMSkgKyAncHgnO1xuICAgICAgfTtcblxuICAgICAgLy8gQ2hlY2sgZm9yIGhlYWRlciBlbGVtZW50XG4gICAgICBjb25zdCBoZWFkZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChlbG1udC5pZCArICdoZWFkZXInKTtcbiAgICAgIGlmIChoZWFkZXIpIHtcbiAgICAgICAgaGVhZGVyLm9ubW91c2Vkb3duID0gZHJhZ01vdXNlRG93bjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVsbW50Lm9ubW91c2Vkb3duID0gZHJhZ01vdXNlRG93bjtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zb2xlLmxvZyhlKVxuICAgIH1cbiAgfVxuXG4gIGFkZE51bWJlcihudW06IGFueSkge1xuICAgIGlmICggbnVtID09ICcjJyB8fCBudW0gPT0gJyonIHx8bnVtID09ICcrJyB8fCBOdW1iZXIuaXNJbnRlZ2VyKG51bSkpIHtcbiAgICAgIGlmIChudW0gPT0gJyMnKSB7XG4gICAgICAgIG5ldyBBdWRpbyhgL2Fzc2V0cy9kaWFsLXRvbmVzL2R0bWYvZHRtZi1oYXNoLS5tcDNgKS5wbGF5KCk7XG4gICAgICB9IGVsc2UgaWYgKG51bSA9PSAnKicpIHtcbiAgICAgICAgbmV3IEF1ZGlvKGAvYXNzZXRzL2RpYWwtdG9uZXMvZHRtZi9kdG1mLXN0YXItLm1wM2ApLnBsYXkoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5ldyBBdWRpbyhgL2Fzc2V0cy9kaWFsLXRvbmVzL2R0bWYvZHRtZi0ke251bX0tLm1wM2ApLnBsYXkoKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5kaWFsZWROdW1iZXIgKz0gbnVtO1xuICAgICAgdGhpcy5zaG93SW5wdXRDbGVhckJ0biA9IHRydWU7XG5cbiAgICAgIHRoaXMubnVtYmVyRGlhbGVkLmVtaXQodGhpcy5kaWFsZWROdW1iZXIpO1xuXG4gICAgICB0aGlzLm9uRGlhbElucHV0Q2hhbmdlKHRoaXMuZGlhbGVkTnVtYmVyKVxuICAgICAgLy8gdGhpcy5kaWFsSW5wdXRSZWYubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgIH1lbHNlIGlmKG51bSA9PT0gJ3ZvaWNlbWFpbCcpe1xuICAgICAgLy8gdGhpcy5zaG93RGVkaWNhdGVkUG9wdXAgPSB0cnVlO1xuICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWydleHRlbnNpb24vdm9pY2VtYWlsLycrdGhpcy50b2tlbl0pO1xuICAgIH1cbiAgfVxuICBcbiAgaGlkZURpYWxwYWQoKSB7XG4gICAgdGhpcy5pc0RpYWxwYWRIaWRkZW4gPSB0cnVlO1xuICAgIHRoaXMuY2xvc2VEaWFscGFkRXZlbnQuZW1pdCgpO1xuICAgIHRoaXMuY2xlYXJBbGxEaWFsZWQoKTtcbiAgICB0aGlzLmZpbHRlcmVkQ29udGFjdExpc3QgPSBbXTtcbiAgfVxuICBcbiAgb25EaWFsSW5wdXRDaGFuZ2UoaW5wdXRWYWw6IGFueSkge1xuICAgIHRyeSB7XG4gICAgICAvLyBVcGRhdGVkIHJlZ2V4IHRvIGluY2x1ZGUgeCwgWCwgZXh0LiwgRXh0LiwgYW5kICxcbiAgICAgIGNvbnN0IGlzTnVtZXJpY0lucHV0ID0gL15bXFxkXFxzK1xcLV0rJC8udGVzdChpbnB1dFZhbCk7XG4gICAgICBsZXQgbWFpbk51bWJlciA9IGlucHV0VmFsO1xuXG4gICAgICAvLyBDaGVjayBmb3IgZXh0ZW5zaW9uIGluZGljYXRvcnMgYW5kIHNwbGl0IHRoZSBpbnB1dFxuICAgICAgY29uc3QgZXh0TWF0Y2ggPSBpbnB1dFZhbC5tYXRjaCgvKHh8WHxleHRcXC58RXh0XFwufCwpKC4qKS8pO1xuICAgICAgaWYgKGV4dE1hdGNoKSB7XG4gICAgICAgIG1haW5OdW1iZXIgPSBpbnB1dFZhbC5zdWJzdHJpbmcoMCwgZXh0TWF0Y2guaW5kZXgpLnRyaW0oKTtcbiAgICAgICAgdGhpcy5jYWxsRGF0YS5leHROdW0gPSBleHRNYXRjaFsyXS50cmltKCk7XG4gICAgICB9XG4gICAgICB0aGlzLnNhbml0aXplZE51bSA9IGlzTnVtZXJpY0lucHV0ID8gbWFpbk51bWJlci5yZXBsYWNlKC9bXFxzXFwtXSsvZywgJycpIDogbWFpbk51bWJlcjtcblxuICAgICAgdGhpcy5jYWxsRGF0YS5waG9uZSA9IGlzTnVtZXJpY0lucHV0ID8gdGhpcy5zYW5pdGl6ZWROdW0gOiAnJztcbiAgICAgIHRoaXMuc2hvd0lucHV0Q2xlYXJCdG4gPSBpbnB1dFZhbC5sZW5ndGggPiAwO1xuXG4gICAgICBpZiAoaXNOdW1lcmljSW5wdXQpIHtcbiAgICAgICAgdGhpcy5kaWFsZWROdW1iZXIgPSBuZXcgQXNZb3VUeXBlKCkuaW5wdXQodGhpcy5zYW5pdGl6ZWROdW0pO1xuICAgICAgfVxuXG4gICAgICAvLyBlbWl0IGN1cnJlbnQgbnVtYmVyIHdoZW5ldmVyIGlucHV0IGNoYW5nZXNcbiAgICAgIHRoaXMubnVtYmVyRGlhbGVkLmVtaXQodGhpcy5kaWFsZWROdW1iZXIpO1xuXG4gICAgICBpZiAoaW5wdXRWYWwubGVuZ3RoID4gMikge1xuICAgICAgICB0aGlzLmZpbHRlcmVkQ29udGFjdExpc3QgPSBbXTtcbiAgICAgICAgdGhpcy5jb250YWN0TGlzdC5mb3JFYWNoKGNvbnRhY3QgPT4ge1xuICAgICAgICAgIGNvbnN0IGZ1bGxOYW1lID0gYCR7Y29udGFjdC5maXJzdE5hbWV9ICR7Y29udGFjdC5taWRkbGVOYW1lfSAke2NvbnRhY3QubGFzdE5hbWV9YC50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgIGlmKGZ1bGxOYW1lLmluY2x1ZGVzKHRoaXMuc2FuaXRpemVkTnVtLnRvTG93ZXJDYXNlKCkpIHx8IGNvbnRhY3QubnVtYmVyc0xpc3Quc29tZSgobnVtOiBhbnkpID0+IG51bS5udW1iZXIuaW5jbHVkZXModGhpcy5zYW5pdGl6ZWROdW0pKSkge1xuICAgICAgICAgICAgdGhpcy5maWx0ZXJlZENvbnRhY3RMaXN0LnB1c2goY29udGFjdCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5maWx0ZXJlZENvbnRhY3RMaXN0ID0gdGhpcy5maWx0ZXJlZENvbnRhY3RMaXN0LnNsaWNlKDAsIDIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5maWx0ZXJlZENvbnRhY3RMaXN0ID0gW107XG4gICAgICB9XG5cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zb2xlLmxvZyhlKTtcbiAgICB9XG4gIH1cblxuICBnZXRGaXJzdExldHRlcihuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBuYW1lID8gbmFtZS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSA6ICcnO1xuICB9XG4gIGNsZWFySW5wdXQoKSB7XG4gICAgaWYgKHRoaXMuZGlhbGVkTnVtYmVyLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuZGlhbGVkTnVtYmVyID0gdGhpcy5kaWFsZWROdW1iZXIuc2xpY2UoMCwgLTEpO1xuICAgICAgdGhpcy5zaG93SW5wdXRDbGVhckJ0biA9IHRoaXMuZGlhbGVkTnVtYmVyLmxlbmd0aCAhPT0gMDtcblxuICAgICAgdGhpcy5vbkRpYWxJbnB1dENoYW5nZSh0aGlzLmRpYWxlZE51bWJlcilcbiAgICB9XG4gIH1cbiAgY2xlYXJBbGxEaWFsZWQoKSB7XG4gICAgdGhpcy5kaWFsZWROdW1iZXIgPSAnJztcbiAgICB0aGlzLnNhbml0aXplZE51bSA9ICcnO1xuICAgIHRoaXMuc2hvd0lucHV0Q2xlYXJCdG4gPSBmYWxzZTtcbiAgfVxuICBnZXRDYWxsZXJJZExpc3QoKSB7XG4gICAgdGhpcy5leHRTZXJ2aWNlLmRpc3BsYXlJRCh0aGlzLnRva2VuIHx8ICcnKS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XG4gICAgICAvL3RoaXMuY2FsbGVySWRMaXN0ID0gcmVzLmNhbGxlcklkTGlzdC5maWx0ZXIoaXRlbSA9PiBpdGVtLnR5cGUgPT09IFwiQzJDIFNvZnRwaG9uZSBOdW1iZXJcIik7XG4gICAgICB0aGlzLmNhbGxlcklkTGlzdCA9IHJlcy5jYWxsZXJJZExpc3QuZmlsdGVyKChpdGVtOiBhbnkpID0+IGl0ZW0udm9pY2VGZWF0dXJlID09PSB0cnVlKTtcbiAgICAgIC8vIHRoaXMuY2FsbGVySWRMaXN0ID0gcmVzLmNhbGxlcklkTGlzdDtcbiAgICAgIGlmICh0aGlzLmNhbGxlcklkTGlzdC5sZW5ndGggPT0gMSkge1xuICAgICAgICB0aGlzLnNlbGVjdGVkQ2FsbGVySWQgPSB0aGlzLmNhbGxlcklkTGlzdFswXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICh0aGlzLmNhbGxQcmVmZXJlbmNlID09PSAnYWx3YXlzQXNrJyB8fCB0aGlzLmNhbGxQcmVmZXJlbmNlID09PSAnc21hcnREaWFsaW5nJykge1xuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDYWxsZXJJZCA9IG51bGw7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5zZWxlY3RlZENhbGxlcklkID0gdGhpcy5jYWxsZXJJZExpc3QuZmluZChpdGVtID0+IChpdGVtLm51bWJlciA9PSB0aGlzLmNhbGxQcmVmZXJlbmNlKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICBnZXRDb250YWN0TGlzdCgpIHtcbiAgICB0aGlzLnR3aWxpb1NlcnZpY2UuZ2V0Q29udGFjdExpc3QoKS5zdWJzY3JpYmUoKHJlc3A6IGFueSkgPT4ge1xuICAgICAgaWYgKHJlc3AucmVzcG9uc2UgPT0gJ1N1Y2Nlc3MnKSB7XG4gICAgICAgIHRoaXMuY29udGFjdExpc3QgPSByZXNwLnBob25lQm9vaztcbiAgICAgIH1cbiAgICB9LCBlcnIgPT4ge1xuICAgICAgY29uc29sZS5sb2coZXJyKVxuICAgIH0pXG4gIH1cbiAgZ2V0RnVsbE5hbWUoY29udGFjdDogYW55KTogc3RyaW5nIHtcbiAgICBsZXQgZnVsbE5hbWUgPSBjb250YWN0LmZpcnN0TmFtZSB8fCAnJztcbiAgICBpZiAoY29udGFjdC5taWRkbGVOYW1lKSB7XG4gICAgICBmdWxsTmFtZSArPSBgICR7Y29udGFjdC5taWRkbGVOYW1lfWA7XG4gICAgfVxuICAgIGlmIChjb250YWN0Lmxhc3ROYW1lKSB7XG4gICAgICBmdWxsTmFtZSArPSBgICR7Y29udGFjdC5sYXN0TmFtZX1gO1xuICAgIH1cbiAgICByZXR1cm4gZnVsbE5hbWUudHJpbSgpO1xuICB9XG5cblxuICB0b2dnbGVDYWxsZXJJZERpdigpIHtcbiAgICB0aGlzLmlzQ2FsbGVySWRIaWRkZW4gPSAhdGhpcy5pc0NhbGxlcklkSGlkZGVuO1xuICB9XG5cbiAgb25Db250YWN0U2VsZWN0KGNvbnRhY3Q6IGFueSkge1xuICAgIHRoaXMuZGlhbGVkTnVtYmVyID0gY29udGFjdC5udW1iZXJzTGlzdFswXS5udW1iZXI7XG4gICAgdGhpcy5jYWxsRGF0YS5uYW1lID0gdGhpcy5nZXRGdWxsTmFtZShjb250YWN0KTtcbiAgICB0aGlzLmNhbGxEYXRhLmltZyA9IGNvbnRhY3QuaW1hZ2UgfHwgJ2Fzc2V0cy9pbWFnZXMvdXNlci5qcGcnO1xuICAgIHRoaXMub25EaWFsSW5wdXRDaGFuZ2UodGhpcy5kaWFsZWROdW1iZXIpO1xuICAgIHRoaXMuZmlsdGVyZWRDb250YWN0TGlzdCA9IFtdO1xuICB9XG5cbiAgZW5kQ2FsbCgpIHtcbiAgICB0cnkge1xuICAgICAgY29uc29sZS5sb2coJ0VuZGluZyBjYWxsJyk7XG4gICAgICBjb25zb2xlLmxvZygnZGQ4JylcbiAgICAgIHRoaXMuaXNDYWxsSW5Qcm9ncmVzcyA9IGZhbHNlO1xuICAgICAgdGhpcy5maWx0ZXJlZENvbnRhY3RMaXN0ID0gW107XG4gICAgICBcbiAgICAgIC8vIFJlc2V0IGNhbGwgZGF0YVxuICAgICAgdGhpcy5jYWxsRGF0YSA9IHtcbiAgICAgICAgcGhvbmU6ICcnLFxuICAgICAgICBuYW1lOiAnJyxcbiAgICAgICAgaW1nOiAnYXNzZXRzL2ltYWdlcy91c2VyLmpwZycsXG4gICAgICAgIGlzSW5jb21pbmdDYWxsOiBmYWxzZSxcbiAgICAgICAgZGlhbDogZmFsc2UsXG4gICAgICAgIGRpc3BsYXlOdW06ICcnLFxuICAgICAgICBleHROdW06ICcnXG4gICAgICB9O1xuICAgICAgXG4gICAgICAvLyBSZXNldCBkaWFsZWQgbnVtYmVyXG4gICAgICB0aGlzLmRpYWxlZE51bWJlciA9ICcnO1xuICAgICAgdGhpcy5zYW5pdGl6ZWROdW0gPSAnJztcbiAgICAgIFxuICAgICAgLy8gRW1pdCBlbmQgY2FsbCBldmVudFxuICAgICAgdGhpcy5lbmRDYWxsRXZlbnQuZW1pdCgpO1xuICAgICAgY29uc29sZS5sb2coJ0NhbGwgZW5kZWQgc3VjY2Vzc2Z1bGx5Jyk7XG4gICAgICBcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgaW4gZW5kQ2FsbDonLCBlcnJvcik7XG4gICAgICAvLyBFdmVuIGlmIHRoZXJlJ3MgYW4gZXJyb3IsIHRyeSB0byByZXNldCB0aGUgc3RhdGVcbiAgICAgIGNvbnNvbGUubG9nKCdkZDknKVxuICAgICAgdGhpcy5pc0NhbGxJblByb2dyZXNzID0gZmFsc2U7XG4gICAgICB0aGlzLmNhbGxEYXRhID0ge1xuICAgICAgICBwaG9uZTogJycsXG4gICAgICAgIG5hbWU6ICcnLFxuICAgICAgICBpbWc6ICdhc3NldHMvaW1hZ2VzL3VzZXIuanBnJyxcbiAgICAgICAgaXNJbmNvbWluZ0NhbGw6IGZhbHNlLFxuICAgICAgICBkaWFsOiBmYWxzZSxcbiAgICAgICAgZGlzcGxheU51bTogJycsXG4gICAgICAgIGV4dE51bTogJydcbiAgICAgIH07XG4gICAgICB0aGlzLmVuZENhbGxFdmVudC5lbWl0KCk7XG4gICAgfVxuICB9XG5cbiAgLy8gYXN5bmMgaW5pdGlhdGVDYWxsKCkge1xuICAvLyAgIHRyeSB7XG4gIC8vICAgICBjb25zb2xlLmxvZygnSW5pdGlhdGluZyBjYWxsIHdpdGggbnVtYmVyOicsIHRoaXMuZGlhbGVkTnVtYmVyKTtcbiAgICAgIFxuICAvLyAgICAgaWYgKCF0aGlzLmRpYWxlZE51bWJlciAmJiB0aGlzLmxhc3REaWFsZWQpIHtcbiAgLy8gICAgICAgY29uc29sZS5sb2coJ1VzaW5nIGxhc3QgZGlhbGVkIG51bWJlcjonLCB0aGlzLmxhc3REaWFsZWQubnVtYmVyKTtcbiAgLy8gICAgICAgdGhpcy5zYW5pdGl6ZWROdW0gPSB0aGlzLmxhc3REaWFsZWQubnVtYmVyO1xuICAvLyAgICAgfVxuXG4gIC8vICAgICBjb25zdCBpc0ludmFsaWQgPSBhd2FpdCB0aGlzLmlzSW52YWxpZE51bWJlcigpO1xuICAvLyAgICAgaWYgKGlzSW52YWxpZCkge1xuICAvLyAgICAgICBjb25zb2xlLmVycm9yKCdJbnZhbGlkIG51bWJlciBmb3JtYXQnKTtcbiAgLy8gICAgICAgcmV0dXJuIGZhbHNlO1xuICAvLyAgICAgfVxuXG4gIC8vICAgICB0aGlzLnNhdmVMYXN0RGlhbGVkKCk7XG4gIC8vICAgICB0aGlzLmlzU2F2ZWRDb250YWN0RGlhbGxlZCgpO1xuICAgICAgXG4gIC8vICAgICAvLyBDaGVjayBwYXltZW50IHN0YXR1c1xuICAvLyAgICAgdGhpcy5pc1BheW1lbnREdWUgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgncGF5bWVudER1ZScpID09PSAndHJ1ZSc7XG4gIC8vICAgICBpZiAodGhpcy5pc1BheW1lbnREdWUpIHtcbiAgLy8gICAgICAgY29uc29sZS53YXJuKCdQYXltZW50IGlzIGR1ZScpO1xuICAvLyAgICAgICBzd2FsKCdXYXJuaW5nJywgJ1BsZWFzZSBub3RlIHRoYXQgeW91ciBwYXltZW50IGlzIGR1ZS4gVG8gY29udGludWUgdXNpbmcgb3VyIHNlcnZpY2VzLCBraW5kbHkgc3Vic2NyaWJlIHRvIGF2b2lkIGludGVycnVwdGlvbnMuJyk7XG4gIC8vICAgICAgIHJldHVybiBmYWxzZTtcbiAgLy8gICAgIH1cblxuICAvLyAgICAgLy8gQ2hlY2sgaWYgZGlhbGluZyBvd24gbnVtYmVyXG4gIC8vICAgICBpZiAodGhpcy5zYW5pdGl6ZWROdW0gPT09IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCd0d2lsaW9OdW1iZXInKSkge1xuICAvLyAgICAgICBjb25zb2xlLmVycm9yKCdBdHRlbXB0ZWQgdG8gZGlhbCBvd24gbnVtYmVyJyk7XG4gIC8vICAgICAgIHN3YWwoJ0Vycm9yJywgJ1lvdSBjYW5ub3QgZGlhbCB5b3VyIG93biBudW1iZXInKTtcbiAgLy8gICAgICAgcmV0dXJuIGZhbHNlO1xuICAvLyAgICAgfVxuXG4gIC8vICAgICAvLyBDaGVjayBtaWNyb3Bob25lIHBlcm1pc3Npb25zXG4gIC8vICAgICBjb25zdCBoYXNQZXJtaXNzaW9uID0gYXdhaXQgdGhpcy5jaGVja01pY3JvcGhvbmVQZXJtaXNzaW9uKCk7XG4gIC8vICAgICBpZiAoIWhhc1Blcm1pc3Npb24pIHtcbiAgLy8gICAgICAgY29uc29sZS53YXJuKCdNaWNyb3Bob25lIHBlcm1pc3Npb24gbm90IGdyYW50ZWQnKTtcbiAgLy8gICAgICAgYXdhaXQgdGhpcy5hc2tGb3JNaWNyb3Bob25lUGVybWlzc2lvbigpO1xuICAvLyAgICAgICByZXR1cm4gZmFsc2U7XG4gIC8vICAgICB9XG5cbiAgLy8gICAgIGlmICghdGhpcy5zZWxlY3RlZENhbGxlcklkKSB7XG4gIC8vICAgICAgIGNvbnNvbGUuZXJyb3IoJ05vIGNhbGxlciBJRCBzZWxlY3RlZCcpO1xuICAvLyAgICAgICB0aGlzLnNoYWtlRGVkaWNhdGVkQnRuID0gdHJ1ZTtcbiAgLy8gICAgICAgdGhpcy5zaG93RGlhbEFsZXJ0KCdQbGVhc2Ugc2VsZWN0IGEgQzJDIG51bWJlciB0byBjYWxsIGZyb20nKTtcbiAgLy8gICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gIC8vICAgICAgICAgdGhpcy5zaGFrZURlZGljYXRlZEJ0biA9IGZhbHNlO1xuICAvLyAgICAgICB9LCAzMDAwKTtcbiAgLy8gICAgICAgcmV0dXJuIGZhbHNlO1xuICAvLyAgICAgfVxuXG4gIC8vICAgICBjb25zb2xlLmxvZygnR2V0dGluZyBudW1iZXIgd2l0aCBjb3VudHJ5IGNvZGUuLi4nKTtcbiAgLy8gICAgIHRoaXMuY2FsbERhdGEuZGlzcGxheU51bSA9ICcnO1xuICAgICAgXG4gIC8vICAgICB0cnkge1xuICAvLyAgICAgICBhd2FpdCB0aGlzLmdldFRvTnVtYmVyKHRoaXMuc2FuaXRpemVkTnVtKTtcbiAgLy8gICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gIC8vICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGdldHRpbmcgbnVtYmVyIHdpdGggY291bnRyeSBjb2RlOicsIGVycm9yKTtcbiAgLy8gICAgICAgdGhpcy5zaG93RGlhbEFsZXJ0KCdFcnJvciBwcm9jZXNzaW5nIG51bWJlci4gUGxlYXNlIHRyeSBhZ2Fpbi4nKTtcbiAgLy8gICAgICAgcmV0dXJuIGZhbHNlO1xuICAvLyAgICAgfVxuXG4gIC8vICAgICBpZiAodGhpcy50ZXJtaW5hdGVDYWxsKSB7XG4gIC8vICAgICAgIGNvbnNvbGUubG9nKCdDYWxsIHRlcm1pbmF0ZWQgYnkgdXNlcicpO1xuICAvLyAgICAgICB0aGlzLnRlcm1pbmF0ZUNhbGwgPSBmYWxzZTtcbiAgLy8gICAgICAgcmV0dXJuIGZhbHNlO1xuICAvLyAgICAgfVxuXG4gIC8vICAgICAvLyBQcmVwYXJlIGNhbGwgZGF0YVxuICAvLyAgICAgdGhpcy5jYWxsRGF0YSA9IHtcbiAgLy8gICAgICAgLi4udGhpcy5jYWxsRGF0YSxcbiAgLy8gICAgICAgcGhvbmU6IHRoaXMuc2FuaXRpemVkTnVtLFxuICAvLyAgICAgICBpc0luY29taW5nQ2FsbDogZmFsc2UsXG4gIC8vICAgICAgIGRpYWw6IHRydWUsXG4gIC8vICAgICAgIGZyb206IHRoaXMuaXNTbWFydERpYWxDYWxsID8gdGhpcy5jYWxsRGF0YS5mcm9tIDogdGhpcy5zZWxlY3RlZENhbGxlcklkLm51bWJlcixcbiAgLy8gICAgICAgdGltZXN0YW1wOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKClcbiAgLy8gICAgIH07XG5cbiAgLy8gICAgIGNvbnNvbGUubG9nKCdJbml0aWF0aW5nIGNhbGwgd2l0aCBkYXRhOicsIHRoaXMuY2FsbERhdGEpO1xuICAvLyAgICAgdGhpcy5pc0NhbGxJblByb2dyZXNzID0gdHJ1ZTtcbiAgLy8gICAgIHRoaXMuY2FsbEluaXRpYXRlZC5lbWl0KHsgLi4udGhpcy5jYWxsRGF0YSB9KTtcbiAgICAgIFxuICAvLyAgICAgcmV0dXJuIHRydWU7XG4gICAgICBcbiAgLy8gICB9IGNhdGNoIChlcnJvcikge1xuICAvLyAgICAgY29uc29sZS5lcnJvcignRXJyb3IgaW4gaW5pdGlhdGVDYWxsOicsIGVycm9yKTtcbiAgLy8gICAgIHRoaXMuc2hvd0RpYWxBbGVydCgnRmFpbGVkIHRvIGluaXRpYXRlIGNhbGwuIFBsZWFzZSB0cnkgYWdhaW4uJyk7XG4gIC8vICAgICB0aGlzLmlzQ2FsbEluUHJvZ3Jlc3MgPSBmYWxzZTtcbiAgLy8gICAgIHJldHVybiBmYWxzZTtcbiAgLy8gICB9XG4gIC8vICAgICAvL3RoaXMuY2xlYXJBbGxEaWFsZWQoKTtcbiAgLy8gICAvLyB9IGVsc2Uge1xuICAvLyAgIC8vICAgc3dhbCgnRXJyb3InLCAnVHJpYWwgcGVyaW9kIGlzIG92ZXIuIFBsZWFzZSBzZXR1cCBwYXltZW50IG1ldGhvZCB0byBjb250aW51ZSBzZXJ2aWNlcycpXG4gIC8vICAgLy8gfVxuICAvLyB9XG5cblxuICAvLyAgYXN5bmMgaW5pdGlhdGVDYWxsKCkge1xuICAvLyAgIGlmICghdGhpcy5kaWFsZWROdW1iZXIgJiYgdGhpcy5sYXN0RGlhbGVkKSB7XG4gIC8vICAgICB0aGlzLnNhbml0aXplZE51bSA9IHRoaXMubGFzdERpYWxlZC5udW1iZXI7XG4gIC8vICAgfVxuICAvLyAgIGNvbnN0IGlzSW52YWxpZCA9IGF3YWl0IHRoaXMuaXNJbnZhbGlkTnVtYmVyKCk7XG4gIC8vICAgaWYgKGlzSW52YWxpZCkge1xuICAvLyAgICAgcmV0dXJuIGZhbHNlO1xuICAvLyAgIH1cbiAgLy8gICB0aGlzLnNhdmVMYXN0RGlhbGVkKCk7XG4gIC8vICAgdGhpcy5pc1NhdmVkQ29udGFjdERpYWxsZWQoKTtcbiAgLy8gICAvL2xldCBpc0NhbGxlcklkU2V0ID0gYXdhaXQgdGhpcy5pc0NhbGxlcklkU2V0KCk7XG4gIC8vICAgdGhpcy5pc1BheW1lbnREdWUgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgncGF5bWVudER1ZScpID09ICdmYWxzZScgPyBmYWxzZSA6IHRydWU7XG4gIC8vICAgaWYgKHRoaXMuaXNQYXltZW50RHVlKSB7XG4gIC8vICAgICBzd2FsKCdXYXJuaW5nJywgJ1BsZWFzZSBub3RlIHRoYXQgeW91ciBwYXltZW50IGlzIGR1ZSwgVG8gY29udGludWUgb24geW91ciBzZXJ2aWNlcyBraW5kbHkgc3Vic2NyaWJlIHRvIHVzZSB1bmludGVycnVwdGVkIHNlcnZpY2VzLicpO1xuICAvLyAgICAgcmV0dXJuO1xuICAvLyAgIH1cbiAgLy8gICB0aGlzLmlzVHJpYWxQZXJpb2RPdmVyID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3RyaWFsT3ZlcicpID09ICdmYWxzZScgPyBmYWxzZSA6IHRydWU7XG4gIC8vICAgLy8gaWYgKCF0aGlzLmlzVHJpYWxQZXJpb2RPdmVyKSB7XG4gIC8vICAgICBpZiAodGhpcy5zYW5pdGl6ZWROdW0gPT0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3R3aWxpb051bWJlcicpKSB7XG4gIC8vICAgICAgIHN3YWwoJ0Vycm9yJywgJ1lvdSBjYW4gbm90IGRpYWwgdGhpcyBudW1iZXInKTtcbiAgLy8gICAgICAgcmV0dXJuO1xuICAvLyAgICAgfVxuXG4gIC8vICAgICBjb25zdCBoYXNQZXJtaXNzaW9uID0gYXdhaXQgdGhpcy5jaGVja01pY3JvcGhvbmVQZXJtaXNzaW9uKCk7XG4gIC8vICAgICBpZiAoaGFzUGVybWlzc2lvbikge1xuICAvLyAgICAgICBpZiAodGhpcy5zZWxlY3RlZENhbGxlcklkKSB7XG4gIC8vICAgICAgICAgLy9jbGVhciBkaXNwbGF5TnVtIGlmIHZhbHVlIGlzIGJpbmRlZCBmcm9tIHByZXZpb3VzIGNhbGxcbiAgLy8gICAgICAgICB0aGlzLmNhbGxEYXRhLmRpc3BsYXlOdW0gPSAnJztcbiAgLy8gICAgICAgICAvLyBnZXQgbnVtYmVyIHRvIGJlIGRpYWxsZWQgZnJvbSBiYWNrZW5kXG4gIC8vICAgICAgICAgYXdhaXQgdGhpcy5nZXRUb051bWJlcih0aGlzLnNhbml0aXplZE51bSk7XG4gIC8vICAgICAgICAgaWYgKHRoaXMudGVybWluYXRlQ2FsbCkge1xuICAvLyAgICAgICAgICAgdGhpcy50ZXJtaW5hdGVDYWxsID0gZmFsc2U7XG4gIC8vICAgICAgICAgICByZXR1cm47XG4gIC8vICAgICAgICAgfVxuICAvLyAgICAgICAgIHRoaXMuY2FsbERhdGEucGhvbmUgPSB0aGlzLnNhbml0aXplZE51bTtcbiAgLy8gICAgICAgICB0aGlzLmNhbGxEYXRhLmlzSW5jb21pbmdDYWxsID0gZmFsc2U7XG4gIC8vICAgICAgICAgdGhpcy5jYWxsRGF0YS5kaWFsID0gdHJ1ZTtcbiAgLy8gICAgICAgICBpZiAoIXRoaXMuaXNTbWFydERpYWxDYWxsKSB7XG4gIC8vICAgICAgICAgICB0aGlzLmNhbGxEYXRhLmZyb20gPSB0aGlzLnNlbGVjdGVkQ2FsbGVySWQubnVtYmVyO1xuICAvLyAgICAgICAgIH1cbiAgICAgICAgICBcbiAgLy8gICAgICAgICB0aGlzLmlzQ2FsbEluUHJvZ3Jlc3MgPSB0cnVlO1xuICAvLyAgICAgICAgICAgICAgIHRoaXMuY2FsbERhdGEgPSB7XG4gIC8vICAgICAgICAgICAgICAgLi4udGhpcy5jYWxsRGF0YSxcbiAgLy8gICAgICAgICAgICAgICBwaG9uZTogdGhpcy5zYW5pdGl6ZWROdW0sXG4gIC8vICAgICAgICAgICAgICAgaXNJbmNvbWluZ0NhbGw6IGZhbHNlLFxuICAvLyAgICAgICAgICAgICAgIGRpYWw6IHRydWUsXG4gIC8vICAgICAgICAgICAgICAgZnJvbTogdGhpcy5pc1NtYXJ0RGlhbENhbGwgPyB0aGlzLmNhbGxEYXRhLmZyb20gOiB0aGlzLnNlbGVjdGVkQ2FsbGVySWQubnVtYmVyLFxuICAvLyAgICAgICAgICAgICAgIHRpbWVzdGFtcDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpXG4gIC8vICAgICAgICAgICAgIH07XG5cbiAgLy8gICAgICAgICAgICAgY29uc29sZS5sb2coJ0luaXRpYXRpbmcgY2FsbCB3aXRoIGRhdGE6JywgdGhpcy5jYWxsRGF0YSk7XG4gIC8vICAgICAgICAgICAgIHRoaXMuaXNDYWxsSW5Qcm9ncmVzcyA9IHRydWU7XG4gIC8vICAgICAgICAgICAgIHRoaXMuY2FsbEluaXRpYXRlZC5lbWl0KHsgLi4udGhpcy5jYWxsRGF0YSB9KTtcbiAgLy8gICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgLy8gICAgICAgfSBlbHNlIHtcbiAgLy8gICAgICAgICB0aGlzLnNoYWtlRGVkaWNhdGVkQnRuID0gdHJ1ZTtcbiAgLy8gICAgICAgICB0aGlzLnNob3dEaWFsQWxlcnQoJ1NlbGVjdCBhIEMyQyBudW1iZXIgdG8gY2FsbCcpO1xuICAvLyAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAvLyAgICAgICAgICAgdGhpcy5zaGFrZURlZGljYXRlZEJ0biA9IGZhbHNlO1xuICAvLyAgICAgICAgIH0sIDMwMDApO1xuICAvLyAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgLy8gICAgICAgfVxuICAvLyAgICAgICAvL3RoaXMuY2FsbGluZ09wZW5FdmVudC5lbWl0KHsgcGhvbmU6IHRoaXMuZGlhbGVkTnVtYmVyIH0pO1xuICAvLyAgICAgfSBlbHNlIHtcbiAgLy8gICAgICAgYXdhaXQgdGhpcy5hc2tGb3JNaWNyb3Bob25lUGVybWlzc2lvbigpO1xuICAvLyAgICAgfVxuICAvLyAgICAgLy90aGlzLmNsZWFyQWxsRGlhbGVkKCk7XG4gIC8vICAgLy8gfSBlbHNlIHtcbiAgLy8gICAvLyAgIHN3YWwoJ0Vycm9yJywgJ1RyaWFsIHBlcmlvZCBpcyBvdmVyLiBQbGVhc2Ugc2V0dXAgcGF5bWVudCBtZXRob2QgdG8gY29udGludWUgc2VydmljZXMnKVxuICAvLyAgIC8vIH1cbiAgLy8gfVxuXG5cbiAgLy8gYXN5bmMgaW5pdGlhdGVDYWxsKCkge1xuICAvLyAgIHRyeXtcbiAgLy8gICAgIGlmICghdGhpcy5kaWFsZWROdW1iZXIgJiYgdGhpcy5sYXN0RGlhbGVkKSB7XG4gIC8vICAgICAgIHRoaXMuc2FuaXRpemVkTnVtID0gdGhpcy5sYXN0RGlhbGVkLm51bWJlcjtcbiAgLy8gICAgIH1cblxuICAvLyAgICAgY29uc3QgaXNJbnZhbGlkID0gYXdhaXQgdGhpcy5pc0ludmFsaWROdW1iZXIoKTtcbiAgLy8gICAgIGlmIChpc0ludmFsaWQpIHtcbiAgLy8gICAgICAgcmV0dXJuIGZhbHNlO1xuICAvLyAgICAgfVxuICAvLyAgICAgdGhpcy5zYXZlTGFzdERpYWxlZCgpO1xuICAvLyAgICAgdGhpcy5pc1NhdmVkQ29udGFjdERpYWxsZWQoKTtcbiAgLy8gICAgIC8vbGV0IGlzQ2FsbGVySWRTZXQgPSBhd2FpdCB0aGlzLmlzQ2FsbGVySWRTZXQoKTtcblxuICAvLyAgICAgdGhpcy5pc1BheW1lbnREdWUgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgncGF5bWVudER1ZScpID09ICdmYWxzZScgPyBmYWxzZSA6IHRydWU7XG4gIC8vICAgICBpZiAodGhpcy5pc1BheW1lbnREdWUpIHtcbiAgLy8gICAgICAgc3dhbCgnV2FybmluZycsICdQbGVhc2Ugbm90ZSB0aGF0IHlvdXIgcGF5bWVudCBpcyBkdWUsIFRvIGNvbnRpbnVlIG9uIHlvdXIgc2VydmljZXMga2luZGx5IHN1YnNjcmliZSB0byB1c2UgdW5pbnRlcnJ1cHRlZCBzZXJ2aWNlcy4nKTtcbiAgLy8gICAgICAgcmV0dXJuIGZhbHNlO1xuICAvLyAgICAgfVxuXG4gIC8vICAgICB0aGlzLmlzVHJpYWxQZXJpb2RPdmVyID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3RyaWFsT3ZlcicpID09ICdmYWxzZScgPyBmYWxzZSA6IHRydWU7XG4gIC8vICAgICAvLyBpZiAoIXRoaXMuaXNUcmlhbFBlcmlvZE92ZXIpIHtcbiAgLy8gICAgICAgaWYgKHRoaXMuc2FuaXRpemVkTnVtID09IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCd0d2lsaW9OdW1iZXInKSkge1xuICAvLyAgICAgICAgIHN3YWwoJ0Vycm9yJywgJ1lvdSBjYW4gbm90IGRpYWwgdGhpcyBudW1iZXInKTtcbiAgLy8gICAgICAgICByZXR1cm4gZmFsc2U7XG4gIC8vICAgICAgIH1cblxuICAvLyAgICAgICBjb25zdCBoYXNQZXJtaXNzaW9uID0gYXdhaXQgdGhpcy5jaGVja01pY3JvcGhvbmVQZXJtaXNzaW9uKCk7XG4gIC8vICAgICAgIGlmIChoYXNQZXJtaXNzaW9uKSB7XG4gIC8vICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRDYWxsZXJJZCkge1xuICAvLyAgICAgICAgICAgLy9jbGVhciBkaXNwbGF5TnVtIGlmIHZhbHVlIGlzIGJpbmRlZCBmcm9tIHByZXZpb3VzIGNhbGxcbiAgLy8gICAgICAgICAgIHRoaXMuY2FsbERhdGEuZGlzcGxheU51bSA9ICcnO1xuICAvLyAgICAgICAgICAgLy8gZ2V0IG51bWJlciB0byBiZSBkaWFsbGVkIGZyb20gYmFja2VuZFxuICAvLyAgICAgICAgICAgYXdhaXQgdGhpcy5nZXRUb051bWJlcih0aGlzLnNhbml0aXplZE51bSk7XG4gIC8vICAgICAgICAgICBpZiAodGhpcy50ZXJtaW5hdGVDYWxsKSB7XG4gIC8vICAgICAgICAgICAgIHRoaXMudGVybWluYXRlQ2FsbCA9IGZhbHNlO1xuICAvLyAgICAgICAgICAgICByZXR1cm47XG4gIC8vICAgICAgICAgICB9XG4gIC8vICAgICAgICAgICB0aGlzLmNhbGxEYXRhLnBob25lID0gdGhpcy5zYW5pdGl6ZWROdW07XG4gIC8vICAgICAgICAgICB0aGlzLmNhbGxEYXRhLmlzSW5jb21pbmdDYWxsID0gZmFsc2U7XG4gIC8vICAgICAgICAgICB0aGlzLmNhbGxEYXRhLmRpYWwgPSB0cnVlO1xuICAvLyAgICAgICAgICAgaWYgKCF0aGlzLmlzU21hcnREaWFsQ2FsbCkge1xuICAvLyAgICAgICAgICAgICB0aGlzLmNhbGxEYXRhLmZyb20gPSB0aGlzLnNlbGVjdGVkQ2FsbGVySWQubnVtYmVyO1xuICAvLyAgICAgICAgICAgfVxuICAgICAgICAgICAgXG4gIC8vICAgICAgICAgICB0aGlzLmlzQ2FsbEluUHJvZ3Jlc3MgPSB0cnVlO1xuICAvLyAgICAgICAgICAgICAgICAgdGhpcy5jYWxsRGF0YSA9IHtcbiAgLy8gICAgICAgICAgICAgICAgIC4uLnRoaXMuY2FsbERhdGEsXG4gIC8vICAgICAgICAgICAgICAgICBwaG9uZTogdGhpcy5zYW5pdGl6ZWROdW0sXG4gIC8vICAgICAgICAgICAgICAgICBpc0luY29taW5nQ2FsbDogZmFsc2UsXG4gIC8vICAgICAgICAgICAgICAgICBkaWFsOiB0cnVlLFxuICAvLyAgICAgICAgICAgICAgICAgZnJvbTogdGhpcy5pc1NtYXJ0RGlhbENhbGwgPyB0aGlzLmNhbGxEYXRhLmZyb20gOiB0aGlzLnNlbGVjdGVkQ2FsbGVySWQubnVtYmVyLFxuICAvLyAgICAgICAgICAgICAgICAgdGltZXN0YW1wOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKClcbiAgLy8gICAgICAgICAgICAgICB9O1xuXG4gIC8vICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ0luaXRpYXRpbmcgY2FsbCB3aXRoIGRhdGE6JywgdGhpcy5jYWxsRGF0YSk7XG4gIC8vICAgICAgICAgICAgICAgdGhpcy5pc0NhbGxJblByb2dyZXNzID0gdHJ1ZTtcbiAgLy8gICAgICAgICAgICAgICB0aGlzLmNhbGxJbml0aWF0ZWQuZW1pdCh7IC4uLnRoaXMuY2FsbERhdGEgfSk7XG4gIC8vICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgLy8gICAgICAgICB9IGVsc2Uge1xuICAvLyAgICAgICAgICAgdGhpcy5zaGFrZURlZGljYXRlZEJ0biA9IHRydWU7XG4gIC8vICAgICAgICAgICB0aGlzLnNob3dEaWFsQWxlcnQoJ1NlbGVjdCBhIEMyQyBudW1iZXIgdG8gY2FsbCcpO1xuICAvLyAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gIC8vICAgICAgICAgICAgIHRoaXMuc2hha2VEZWRpY2F0ZWRCdG4gPSBmYWxzZTtcbiAgLy8gICAgICAgICAgIH0sIDMwMDApO1xuICAvLyAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAvLyAgICAgICAgIH1cbiAgLy8gICAgICAgICAvL3RoaXMuY2FsbGluZ09wZW5FdmVudC5lbWl0KHsgcGhvbmU6IHRoaXMuZGlhbGVkTnVtYmVyIH0pO1xuICAvLyAgICAgICB9IGVsc2Uge1xuICAvLyAgICAgICAgIGF3YWl0IHRoaXMuYXNrRm9yTWljcm9waG9uZVBlcm1pc3Npb24oKTtcbiAgLy8gICAgICAgfVxuICAvLyAgICAgICAvL3RoaXMuY2xlYXJBbGxEaWFsZWQoKTtcbiAgLy8gICAgIC8vIH0gZWxzZSB7XG4gIC8vICAgICAvLyAgIHN3YWwoJ0Vycm9yJywgJ1RyaWFsIHBlcmlvZCBpcyBvdmVyLiBQbGVhc2Ugc2V0dXAgcGF5bWVudCBtZXRob2QgdG8gY29udGludWUgc2VydmljZXMnKVxuICAvLyAgICAgLy8gfVxuICAvLyAgIH1jYXRjaChlKXtcbiAgLy8gICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGluIGluaXRpYXRlQ2FsbDonLCBlKTtcblxuICAvLyAgICAgdGhpcy5zaG93RGlhbEFsZXJ0KCdGYWlsZWQgdG8gaW5pdGlhdGUgY2FsbC4gUGxlYXNlIHRyeSBhZ2Fpbi4nKTtcblxuICAvLyAgICAgdGhpcy5pc0NhbGxJblByb2dyZXNzID0gZmFsc2U7XG5cbiAgLy8gICAgIHJldHVybiBmYWxzZTtcbiAgLy8gICB9XG4gIC8vIH1cblxuXG4gIGFzeW5jIGluaXRpYXRlQ2FsbCgpIHtcbiAgICB0cnkge1xuICAgICAgaWYgKCF0aGlzLmRpYWxlZE51bWJlciAmJiB0aGlzLmxhc3REaWFsZWQpIHtcbiAgICAgICAgdGhpcy5zYW5pdGl6ZWROdW0gPSB0aGlzLmxhc3REaWFsZWQubnVtYmVyO1xuICAgICAgfVxuICBcbiAgICAgIGNvbnN0IGlzSW52YWxpZCA9IGF3YWl0IHRoaXMuaXNJbnZhbGlkTnVtYmVyKCk7XG4gICAgICBpZiAoaXNJbnZhbGlkKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHRoaXMuc2F2ZUxhc3REaWFsZWQoKTtcbiAgICAgIHRoaXMuaXNTYXZlZENvbnRhY3REaWFsbGVkKCk7XG4gIFxuICAgICAgdGhpcy5pc1BheW1lbnREdWUgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgncGF5bWVudER1ZScpID09PSAnZmFsc2UnID8gZmFsc2UgOiB0cnVlO1xuICAgICAgaWYgKHRoaXMuaXNQYXltZW50RHVlKSB7XG4gICAgICAgIHN3YWwoJ1dhcm5pbmcnLCAnUGxlYXNlIG5vdGUgdGhhdCB5b3VyIHBheW1lbnQgaXMgZHVlLCBUbyBjb250aW51ZSBvbiB5b3VyIHNlcnZpY2VzIGtpbmRseSBzdWJzY3JpYmUgdG8gdXNlIHVuaW50ZXJydXB0ZWQgc2VydmljZXMuJyk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgXG4gICAgICB0aGlzLmlzVHJpYWxQZXJpb2RPdmVyID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3RyaWFsT3ZlcicpID09PSAnZmFsc2UnID8gZmFsc2UgOiB0cnVlO1xuICAgICAgXG4gICAgICBpZiAodGhpcy5zYW5pdGl6ZWROdW0gPT09IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCd0d2lsaW9OdW1iZXInKSkge1xuICAgICAgICBzd2FsKCdFcnJvcicsICdZb3UgY2FuIG5vdCBkaWFsIHRoaXMgbnVtYmVyJyk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgXG4gICAgICBjb25zdCBoYXNQZXJtaXNzaW9uID0gYXdhaXQgdGhpcy5jaGVja01pY3JvcGhvbmVQZXJtaXNzaW9uKCk7XG4gICAgICBpZiAoIWhhc1Blcm1pc3Npb24pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5hc2tGb3JNaWNyb3Bob25lUGVybWlzc2lvbigpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gIFxuICAgICAgaWYgKCF0aGlzLnNlbGVjdGVkQ2FsbGVySWQpIHtcbiAgICAgICAgdGhpcy5zaGFrZURlZGljYXRlZEJ0biA9IHRydWU7XG4gICAgICAgIHRoaXMuc2hvd0RpYWxBbGVydCgnU2VsZWN0IGEgQzJDIG51bWJlciB0byBjYWxsJyk7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuc2hha2VEZWRpY2F0ZWRCdG4gPSBmYWxzZTtcbiAgICAgICAgfSwgMzAwMCk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgXG4gICAgICAvLyBDbGVhciBkaXNwbGF5TnVtIGlmIHZhbHVlIGlzIGJvdW5kIGZyb20gcHJldmlvdXMgY2FsbFxuICAgICAgdGhpcy5jYWxsRGF0YS5kaXNwbGF5TnVtID0gJyc7XG4gICAgICBcbiAgICAgIC8vIEdldCBudW1iZXIgdG8gYmUgZGlhbGVkIGZyb20gYmFja2VuZFxuICAgICAgYXdhaXQgdGhpcy5nZXRUb051bWJlcih0aGlzLnNhbml0aXplZE51bSk7XG4gICAgICBpZiAodGhpcy50ZXJtaW5hdGVDYWxsKSB7XG4gICAgICAgIHRoaXMudGVybWluYXRlQ2FsbCA9IGZhbHNlO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gIFxuICAgICAgLy8gVXBkYXRlIGNhbGwgZGF0YSBpbiBhIHNpbmdsZSBvcGVyYXRpb25cbiAgICAgIHRoaXMuY2FsbERhdGEgPSB7XG4gICAgICAgIC4uLnRoaXMuY2FsbERhdGEsXG4gICAgICAgIHBob25lOiB0aGlzLnNhbml0aXplZE51bSxcbiAgICAgICAgaXNJbmNvbWluZ0NhbGw6IGZhbHNlLFxuICAgICAgICBkaWFsOiB0cnVlLFxuICAgICAgICBmcm9tOiB0aGlzLmlzU21hcnREaWFsQ2FsbCA/IHRoaXMuY2FsbERhdGEuZnJvbSA6IHRoaXMuc2VsZWN0ZWRDYWxsZXJJZC5udW1iZXIsXG4gICAgICAgIHRpbWVzdGFtcDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpXG4gICAgICB9O1xuICBcbiAgICAgIC8vIGNvbnNvbGUubG9nKCdJbml0aWF0aW5nIGNhbGwgd2l0aCBkYXRhOicsIHRoaXMuY2FsbERhdGEpO1xuICAgICAgY29uc29sZS5sb2coJ2RkMTAnKVxuICAgICAgdGhpcy5pc0NhbGxJblByb2dyZXNzID0gdHJ1ZTtcbiAgICAgIHRoaXMuY2FsbEluaXRpYXRlZC5lbWl0KHsgLi4udGhpcy5jYWxsRGF0YSB9KTtcbiAgICAgIHJldHVybiB0cnVlO1xuICBcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyBjb25zb2xlLmVycm9yKCdFcnJvciBpbiBpbml0aWF0ZUNhbGw6JywgZSk7XG4gICAgICB0aGlzLnNob3dEaWFsQWxlcnQoJ0ZhaWxlZCB0byBpbml0aWF0ZSBjYWxsLiBQbGVhc2UgdHJ5IGFnYWluLicpO1xuICAgICAgY29uc29sZS5sb2coJ2RkMTEnKVxuICAgICAgdGhpcy5pc0NhbGxJblByb2dyZXNzID0gZmFsc2U7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgaXNJbnZhbGlkTnVtYmVyKCkge1xuICAgIHRyeSB7XG4gICAgICBpZih0aGlzLnNhbml0aXplZE51bSA9PSAnJyl7XG4gICAgICAgIHRoaXMuc2hvd0RpYWxBbGVydCgnSW52YWxpZCBOdW1iZXInKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBjb25zdCB2YWxpZE51bWJlclBhdHRlcm4gPSAvXlsrXFxkXFxzKCktXSokLzsgLy8gUmVndWxhciBleHByZXNzaW9uIHRvIG1hdGNoIHZhbGlkIGNoYXJhY3RlcnNcbiAgICAgIGNvbnN0IHBob25lTnVtYmVyID0gdGhpcy5zYW5pdGl6ZWROdW07XG4gICAgICBpZiAoIXZhbGlkTnVtYmVyUGF0dGVybi50ZXN0KHBob25lTnVtYmVyKSkge1xuICAgICAgICB0aGlzLnNob3dEaWFsQWxlcnQoJ0ludmFsaWQgTnVtYmVyJyk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aGlzLnNob3dEaWFsQWxlcnQoJ0ludmFsaWQgTnVtYmVyJyk7XG4gICAgICByZXR1cm4gdHJ1ZTsgLy8gUmV0dXJuIHRydWUgaWYgYW4gZXJyb3Igb2NjdXJyZWQsIG1lYW5pbmcgdGhlIG51bWJlciBpcyBpbnZhbGlkXG4gICAgfVxuICB9XG4gIFxuICBzYXZlTGFzdERpYWxlZCgpIHtcbiAgICBjb25zdCBjb250YWN0ID0gdGhpcy5maWx0ZXJlZENvbnRhY3RMaXN0LmZpbmQoKGM6IGFueSkgPT4gYy5udW1iZXJzTGlzdC5zb21lKChuOiBhbnkpID0+IG4ubnVtYmVyID09PSB0aGlzLmRpYWxlZE51bWJlcikpO1xuICAgIGlmIChjb250YWN0KSB7XG4gICAgICB0aGlzLmxhc3REaWFsZWQgPSB7XG4gICAgICAgIG5hbWU6IGNvbnRhY3QubmFtZSxcbiAgICAgICAgaW1hZ2U6IGNvbnRhY3QuaW1hZ2UsXG4gICAgICAgIG51bWJlcjogdGhpcy5kaWFsZWROdW1iZXJcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmKHRoaXMuZGlhbGVkTnVtYmVyKXtcbiAgICAgICAgdGhpcy5sYXN0RGlhbGVkID0geyBudW1iZXI6IHRoaXMuZGlhbGVkTnVtYmVyIH07XG4gICAgICB9XG4gICAgICBcbiAgICB9XG4gIH1cbiAgaXNTYXZlZENvbnRhY3REaWFsbGVkKCl7XG4gICAgbGV0IHBob25lTnVtID0gdGhpcy5zYW5pdGl6ZWROdW0ucmVwbGFjZSgvXFxzKy9nLCAnJyk7XG4gICAgbGV0IGNvbnRhY3QgPSAgdGhpcy5jb250YWN0TGlzdC5maWx0ZXIoKGNvbnRhY3Q6IGFueSkgPT4ge1xuICAgICAgcmV0dXJuIGNvbnRhY3QubnVtYmVyc0xpc3Quc29tZSgobnVtOiBhbnkpID0+IG51bS5udW1iZXIgPT09IHBob25lTnVtKVxuICAgIH0pO1xuICAgIGlmKGNvbnRhY3QubGVuZ3RoKXtcbiAgICAgIHRoaXMuY2FsbERhdGEubmFtZSA9IGAke2NvbnRhY3RbMF0uZmlyc3ROYW1lfSAke2NvbnRhY3RbMF0ubWlkZGxlTmFtZX0gJHtjb250YWN0WzBdLmxhc3ROYW1lfWAudG9Mb3dlckNhc2UoKTtcbiAgICAgIHRoaXMuY2FsbERhdGEuaW1nID0gY29udGFjdFswXS5pbWFnZSB8fCAnYXNzZXRzL2ltYWdlcy91c2VyLmpwZyc7XG4gICAgICB0aGlzLmNhbGxEYXRhLnBob25lID0gdGhpcy5zYW5pdGl6ZWROdW07XG5cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgc2hvd0RpYWxBbGVydChtZXNzYWdlOiBzdHJpbmcpIHtcbiAgICB0aGlzLmRpYWxBbGVydCA9IHtcbiAgICAgIG1zZzogbWVzc2FnZSxcbiAgICAgIHNob3c6IHRydWVcbiAgICB9O1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5kaWFsQWxlcnQuc2hvdyA9IGZhbHNlO1xuICAgIH0sIDMwMDApO1xuICB9XG4gIGFzeW5jIGlzQ2FsbGVySWRTZXQoKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHRrbiA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdleHRfdG9rZW4nKTtcbiAgICAgIGNvbnN0IHJlczogYW55ID0gYXdhaXQgdGhpcy5leHRTZXJ2aWNlLmZldGNoQ2FsbGVySWQodGtuIHx8ICcnKS50b1Byb21pc2UoKTtcbiAgICAgIGlmIChyZXMuc3RhdHVzID09IDIwMCkge1xuICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgndHJpYWxPdmVyJywgcmVzLnRyaWFsT3Zlcik7XG4gICAgICAgIHRoaXMudHdpbGlvU2VydmljZS5pc1RyaWFsT3Zlci5uZXh0KHJlcy50cmlhbE92ZXIpO1xuICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgncGF5bWVudER1ZScsIHJlcy5wYXltZW50RHVlKTtcbiAgICAgICAgdGhpcy50d2lsaW9TZXJ2aWNlLmlzUGF5bWVudER1ZS5uZXh0KHJlcy5wYXltZW50RHVlKTtcbiAgICAgIH1cbiAgICAgIGlmIChyZXMuY2FsbGVyaWQpIHtcbiAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ2NhbGxlcklEJywgcmVzLmNhbGxlcmlkKTtcblxuICAgICAgICB0aGlzLmV4dFNlcnZpY2UuY2hhbmdlTWVzc2FnZShyZXMuY2FsbGVyaWQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ2NhbGxlcklEJywgJ05vdCBzZXQnKTtcbiAgICAgICAgdGhpcy5leHRTZXJ2aWNlLmNoYW5nZU1lc3NhZ2UoJ05vdCBzZXQnKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIChsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnY2FsbGVySUQnKSAhPT0gJ05vdCBzZXQnKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zb2xlLmxvZyhlKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbiAgYXN5bmMgY2hlY2tNaWNyb3Bob25lUGVybWlzc2lvbigpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgc3RyZWFtID0gYXdhaXQgbmF2aWdhdG9yLm1lZGlhRGV2aWNlcy5nZXRVc2VyTWVkaWEoeyBhdWRpbzogdHJ1ZSB9KTtcbiAgICAgIHN0cmVhbS5nZXRUcmFja3MoKS5mb3JFYWNoKHRyYWNrID0+IHRyYWNrLnN0b3AoKSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKChlcnJvciBhcyBhbnkpLm5hbWUgPT09ICdOb3RBbGxvd2VkRXJyb3InKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgYXN5bmMgYXNrRm9yTWljcm9waG9uZVBlcm1pc3Npb24oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHN0cmVhbSA9IGF3YWl0IG5hdmlnYXRvci5tZWRpYURldmljZXMuZ2V0VXNlck1lZGlhKHsgYXVkaW86IHRydWUgfSk7XG4gICAgICBzdHJlYW0uZ2V0VHJhY2tzKCkuZm9yRWFjaCh0cmFjayA9PiB0cmFjay5zdG9wKCkpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdVc2VyIGRlbmllZCBtaWNyb3Bob25lIHBlcm1pc3Npb246JywgZXJyb3IpO1xuICAgIH1cbiAgfVxuICAvLyBiZWxvdyBmdW5jdGlvbiBpcyB0byBnZXQgdGhlIGNvdW50cnkgY29kZSB3aXRoIG51bWJlciBmcm9tIHNlcnZlciBcbiAgYXN5bmMgZ2V0VG9OdW1iZXIoZGlhbGVkTnVtYmVyOiBzdHJpbmcpIHtcbiAgICBcbiAgICAgIGlmIChkaWFsZWROdW1iZXJbMF0gIT09ICcrJykge1xuICAgICAgICAvLyB0aGlzIGlzIGNhc2Ugd2hlbiB1c2VyIGdlb2xvY2F0aW9uIGRpYWwgY29kZSBpcyBvblxuICAgICAgICBsZXQgaXBBZGRyZXNzOiBhbnkgPSBhd2FpdCB0aGlzLmlwU2VydmljZS5nZXRJcEFkZHJlc3NJbmZvKCkudG9Qcm9taXNlKCk7XG4gICAgICAgIGNvbnN0IHJlczogYW55ID0gYXdhaXQgdGhpcy50d2lsaW9TZXJ2aWNlLmdldFRvTnVtYmVyKGRpYWxlZE51bWJlcixpcEFkZHJlc3MuYWRkcmVzcy5jb3VudHJ5Q29kZSkudG9Qcm9taXNlKCk7XG4gICAgICAgIGlmIChyZXMuc3RhdHVzID09IDIwMCkge1xuICAgICAgICAgIHRoaXMudG9hc3RUaW1lb3V0ID0gcmVzLnRpbWVJbnRlcnZhbCAqIDEwMDA7XG4gICAgICAgICAgYXdhaXQgdGhpcy5zaG93TnVtYmVyVG9hc3QocmVzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICB9XG4gIGlzQWxlcnRFbmFibGUoKSB7XG4gICAgcmV0dXJuIGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdpc0FsZXJ0RW5hYmxlJyk7XG4gIH1cbiAgYXN5bmMgc2hvd051bWJlclRvYXN0KGRhdGE6IGFueSkge1xuICAgIC8vIGNvbnN0IGlzQWxlcnRPbiA9IChsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnaXNDb3VudHJ5Q29kZVRvYXN0T24nKSk7XG4gICAgLy8gaWYgKGlzQWxlcnRPbiA9PSAndHJ1ZScpIHtcbiAgICAgIHRoaXMuY2FsbE51bWJlclRvYXN0LnNob3cgPSB0cnVlO1xuICAgICAgdGhpcy5jYWxsTnVtYmVyVG9hc3QubnVtYmVyID0gZGF0YS50b051bWJlcjtcbiAgICAgIHRoaXMuY2FsbE51bWJlclRvYXN0LmRpc3BsYXlOdW0gPSBkYXRhLmRpc3BsYXlOdW1iZXI7XG4gICAgLy8gfVxuICAgIFxuICAgIFxuICAgIHRoaXMuY2FsbERhdGEuZGlzcGxheU51bSA9IGRhdGEuZGlzcGxheU51bWJlcjtcbiAgICAvL3RoaXMuY2FsbERhdGEucGhvbmUgPSBkYXRhLnRvTnVtYmVyO1xuICAgIGF3YWl0IHRoaXMuZGVsYXkodGhpcy50b2FzdFRpbWVvdXQpO1xuICAgIHRoaXMuZGlhbGVkTnVtYmVyID0gZGF0YS50b051bWJlcjtcbiAgICB0aGlzLnNhbml0aXplZE51bSA9IGRhdGEudG9OdW1iZXI7XG4gICAgdGhpcy5jYWxsTnVtYmVyVG9hc3Quc2hvdyA9IGZhbHNlO1xuICAgIHRoaXMuY2FsbE51bWJlclRvYXN0Lm51bWJlciA9ICcnO1xuICAgIHRoaXMuY2FsbE51bWJlclRvYXN0LmRpc3BsYXlOdW0gPSAnJztcbiAgfVxuICBkZWxheShtczogbnVtYmVyKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KHJlc29sdmUgPT4gc2V0VGltZW91dChyZXNvbHZlLCBtcykpO1xuICB9XG4gIGlzTWluaW1pc2VkOiBib29sZWFuID0gZmFsc2U7XG4gIG9uTWluaW1pc2UoaXNNaW5pbWlzZWQ6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmlzTWluaW1pc2VkID0gaXNNaW5pbWlzZWQ7XG4gICAgdGhpcy5taW5pbWlzZUV2ZW50LmVtaXQoaXNNaW5pbWlzZWQpO1xuICB9XG4gIGhhbmRsZU51bWJlclBhc3RlKGV2ZW50OiBDbGlwYm9hcmRFdmVudCk6IHZvaWQge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgY29uc3QgY2xpcGJvYXJkRGF0YSA9IGV2ZW50LmNsaXBib2FyZERhdGEgfHwgKHdpbmRvdyBhcyBhbnkpLmNsaXBib2FyZERhdGE7XG4gICAgY29uc3QgcGFzdGVkRGF0YSA9IGNsaXBib2FyZERhdGEuZ2V0RGF0YSgndGV4dCcpO1xuXG4gICAgLy8gTG9nIHRoZSBwYXN0ZWQgY29udGVudCB0byB0aGUgY29uc29sZVxuICAgIGlmKHBhc3RlZERhdGEpe1xuICAgICAgdGhpcy5kaWFsZWROdW1iZXIgPSBwYXN0ZWREYXRhO1xuICAgICAgdGhpcy5zYW5pdGl6ZWROdW0gPSBwYXN0ZWREYXRhO1xuICAgIH1cbiAgICBcbiAgfVxuICBvbkVudGVyKG51bTpzdHJpbmcpIHtcbiAgICAvLyBjb25zb2xlLmxvZyhudW0sICdudW1iZXIgZm4nKVxuICAgIHRoaXMuZGlhbGVkTnVtYmVyID0gdGhpcy5kaWFsZWROdW1iZXIgK251bTtcbiAgICB0aGlzLnNhbml0aXplZE51bSA9IHRoaXMuZGlhbGVkTnVtYmVyO1xuICAgIHRoaXMuc2hvd0lucHV0Q2xlYXJCdG4gPSB0cnVlO1xuICAgIHRoaXMubnVtYmVyRGlhbGVkLmVtaXQodGhpcy5kaWFsZWROdW1iZXIpO1xuICB9XG4gIFxuICBnZXRVc2VyQ2FsbFNldHRpbmcoKSB7XG4gICAgY29uc3QgdGtuID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2V4dF90b2tlbicpO1xuICAgIHRoaXMuZXh0U2VydmljZS5mZXRjaENhbGxlcklkKHRrbiB8fCAnJykuc3Vic2NyaWJlKChyZXNwOiBhbnkpID0+IHtcbiAgICAgIGlmIChyZXNwLnN0YXR1cyA9PSAyMDApIHtcbiAgICAgICAgLy90aGlzLmNhbGxQcmVmZXJuY2UgPSByZXNwLnVzZXJTZXR0aW5nO1xuICAgICAgICB0aGlzLmNhbGxQcmVmZXJlbmNlID0gcmVzcC5jYWxsZXJpZDtcbiAgICAgICAgdGhpcy5nZXRDYWxsZXJJZExpc3QoKTtcbiAgICAgIH1cbiAgICB9KVxuICB9XG4gIG9uRGVkaWNhdGVkTnVtU2VsZWN0KGlkOiBhbnkpIHtcbiAgICB0aGlzLnNlbGVjdGVkQ2FsbGVySWQgPSBpZDtcbiAgICB0aGlzLmlzQ2FsbGVySWRIaWRkZW4gPSB0cnVlO1xuICAgIHRoaXMuZXh0U2VydmljZS5zZXRDYWxsZXJJZChpZCk7XG4gIH1cbiAgY2FuY2VsRGlhbE51bWJlcigpIHtcbiAgICB0aGlzLnRlcm1pbmF0ZUNhbGwgPSB0cnVlO1xuICAgIHRoaXMuY2FsbE51bWJlclRvYXN0LnNob3cgPSBmYWxzZTtcbiAgfVxuXG4gIGhhbmRsZURpdktleWRvd24oZXY6YW55KXtcbiAgICBpZih0aGlzLmRpYWxlZE51bWJlci5sZW5ndGggPT0gMCl7XG4gICAgICB0aGlzLmRpYWxJbnB1dEVsZW1lbnQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgIH1cbiAgICBpZiAoZXYua2V5ID09PSAnRW50ZXInKSB7XG4gICAgICAvLyBDaGVjayBpZiB0aGUgZGlhbHBhZCBpcyBvcGVuXG4gICAgICBpZiAoIXRoaXMuaXNEaWFscGFkSGlkZGVuKSB7XG4gICAgICAgIGlmKHRoaXMuZGlhbGVkTnVtYmVyLmxlbmd0aCA+IDIgJiYgdGhpcy5zZWxlY3RlZENhbGxlcklkKXtcbiAgICAgICAgICB0aGlzLmluaXRpYXRlQ2FsbCgpO1xuICAgICAgICB9XG4gICAgICAgIGlmKCF0aGlzLnNlbGVjdGVkQ2FsbGVySWQpe1xuICAgICAgICAgIHRoaXMuc2hha2VEZWRpY2F0ZWRCdG4gPSB0cnVlO1xuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zaGFrZURlZGljYXRlZEJ0biA9IGZhbHNlO1xuICAgICAgICAgIH0sIDEwMDAwKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICBvbkNhbGxCdG5Nb3VzZUVudGVyKGV2OiBhbnkpIHtcbiAgICBpZiAoIXRoaXMuc2VsZWN0ZWRDYWxsZXJJZCB8fCAodGhpcy5zZWxlY3RlZENhbGxlcklkID09ICdhbHdheXNBc2snKSB8fCAodGhpcy5zZWxlY3RlZENhbGxlcklkID09ICdzbWFydERpYWxpbmcnKSkge1xuICAgICAgdGhpcy5zaGFrZURlZGljYXRlZEJ0biA9IHRydWU7XG4gICAgfVxuXG4gIH1cbiAgb25DYWxsQnRuTW91c2VMZWF2ZShldjogYW55KSB7XG4gICAgaWYgKCF0aGlzLnNlbGVjdGVkQ2FsbGVySWQgfHwgKHRoaXMuc2VsZWN0ZWRDYWxsZXJJZCA9PSAnYWx3YXlzQXNrJykgfHwgKHRoaXMuc2VsZWN0ZWRDYWxsZXJJZCA9PSAnc21hcnREaWFsaW5nJykpIHtcbiAgICAgIHRoaXMuc2hha2VEZWRpY2F0ZWRCdG4gPSBmYWxzZTtcbiAgICB9XG4gIH1cbiAgYWNjZXB0TmV3SW5jb21pbmdDYWxsKGNhbGw6IENhbGwpIHtcbiAgICAvL2ZpcnN0IGN1dCB0aGUgY3VycmVudCBjYWxsXG4gICAgLy90aGlzLmNhbGxEYXRhID0gY2FsbDtcbiAgICB0aGlzLm5ld0luY29taW5nQ2FsbERhdGEgPSBjYWxsO1xuICB9XG4gIHJlamVjdE5ld0luY29taW5nQ2FsbChjYWxsOiBDYWxsKSB7XG4gICAgY2FsbC5yZWplY3QoKTtcbiAgICB0aGlzLm5ld0luY29taW5nQ2FsbHMgPSB0aGlzLm5ld0luY29taW5nQ2FsbHMuZmlsdGVyKChpdGVtOiBhbnkpID0+IGl0ZW0ucGFyYW1ldGVycy5DYWxsU2lkICE9PSBjYWxsLnBhcmFtZXRlcnNbJ0NhbGxTaWQnXSk7XG4gICAgdGhpcy5pbmNvbWluZ0NhbGxzTGlzdCA9IHRoaXMuaW5jb21pbmdDYWxsc0xpc3QuZmlsdGVyKChpdGVtOiBhbnkpID0+IGl0ZW0ucGFyYW1ldGVycy5DYWxsU2lkICE9PSBjYWxsLnBhcmFtZXRlcnNbJ0NhbGxTaWQnXSk7XG4gIH1cbiAgbmV3SW5jb21pbmdDYWxsSW5pdGlhdGVkKCkge1xuICAgIGNvbnNvbGUubG9nKCdkZDEyJylcbiAgICB0aGlzLmlzQ2FsbEluUHJvZ3Jlc3MgPSB0cnVlO1xuICAgIHRoaXMubmV3SW5jb21pbmdDYWxscyA9IFtdO1xuICAgIHRoaXMuaW5jb21pbmdDYWxsSW5pdGlhdGVkLmVtaXQoKTtcbiAgfVxuICBpbmNvbWluZ0NhbGxzTmV3SW5mbyhkYXRhOmFueSl7XG4gICAgdGhpcy5pbmNvbWluZ0NhbGxzTGlzdCA9IGRhdGE7XG4gICAgdGhpcy5pbmNvbWluZ0NhbGxzTmV3SW5mb0V2ZW50LmVtaXQoZGF0YSk7XG4gIH1cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnNvbGUubG9nKCdDbGVhbmluZyB1cCBDMmNEaWFscGFkQ29tcG9uZW50Jyk7XG4gICAgICBcbiAgICAgIC8vIFVuc3Vic2NyaWJlIGZyb20gYWxsIHN1YnNjcmlwdGlvbnNcbiAgICAgIGlmICh0aGlzLnN1YnNjcmlwdGlvbnMpIHtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnVuc3Vic2NyaWJlKCk7XG4gICAgICB9XG4gICAgICAvLyBDbGVhbiB1cCBUd2lsaW8gZGV2aWNlIHdoZW4gY29tcG9uZW50IGlzIGRlc3Ryb3llZFxuICAgICAgaWYgKHRoaXMudHdpbGlvU2VydmljZVsnZGV2aWNlJ10pIHtcbiAgICAgICAgdGhpcy50d2lsaW9TZXJ2aWNlWydkZXZpY2UnXS5kZXN0cm95KCk7XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIEVuZCBhbnkgYWN0aXZlIGNhbGxcbiAgICAgIGlmICh0aGlzLmlzQ2FsbEluUHJvZ3Jlc3MpIHtcbiAgICAgICAgdGhpcy5lbmRDYWxsKCk7XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIENsZWFyIGFueSB0aW1lb3V0cyBvciBpbnRlcnZhbHMgaWYgdGhleSBleGlzdFxuICAgICAgaWYgKHRoaXMudG9hc3RUaW1lb3V0KSB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLnRvYXN0VGltZW91dCk7XG4gICAgICB9XG4gICAgICBcbiAgICAgIGNvbnNvbGUubG9nKCdDMmNEaWFscGFkQ29tcG9uZW50IGNsZWFudXAgY29tcGxldGUnKTtcbiAgICAgIFxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBkdXJpbmcgY29tcG9uZW50IGNsZWFudXA6JywgZXJyb3IpO1xuICAgIH1cbiAgfVxufVxuIiwiPGRpdiBpZD1cImRyYWdwYXJlbnQxXCIgW25nU3R5bGVdPVwieydkaXNwbGF5Jzppc0RpYWxwYWRIaWRkZW4gPyAnbm9uZSc6ICdibG9jayd9XCI+XHJcbiAgPGxpYi1jYWxsLXByb2dyZXNzICpuZ0lmPVwiaXNDYWxsSW5Qcm9ncmVzc1wiXHJcbiAgIChlbmRDYWxsRXZlbnQpPVwiZW5kQ2FsbCgpXCJcclxuICAgKG1pbmltaXNlRXZlbnQpPVwib25NaW5pbWlzZSgkZXZlbnQpXCJcclxuICAgKGluY29taW5nQ2FsbEluaXRpYXRlZCk9XCJuZXdJbmNvbWluZ0NhbGxJbml0aWF0ZWQoKVwiXHJcbiAgIFtuZXdJbmNvbWluZ0NhbGxEYXRhXT1cIm5ld0luY29taW5nQ2FsbERhdGFcIlxyXG4gICBbZGV2aWNlSWRdPVwiZGV2aWNlSWRcIlxyXG4gICBbbmV3SW5jb21pbmdDYWxsc0xpc3RdPVwiaW5jb21pbmdDYWxsc0xpc3RcIlxyXG4gICAoaW5jb21pbmdDYWxsc05ld0luZm8pPVwiaW5jb21pbmdDYWxsc05ld0luZm8oJGV2ZW50KVwiXHJcbiAgIFtzZWxlY3RlZENhbGxlcklkXT1cInNlbGVjdGVkQ2FsbGVySWRcIlxyXG4gICBbY29uZmVyZW5jZUNhbGxJbmZvXT1cImNvbmZlcmVuY2VDYWxsSW5mb1wiXHJcbiAgIFtjYWxsRGF0YV09XCJjYWxsRGF0YVwiPlxyXG4gIDwvbGliLWNhbGwtcHJvZ3Jlc3M+XHJcbiAgPCEtLSA8YnV0dG9uIChjbGljayk9XCJpc0NhbGxJblByb2dyZXNzID0gdHJ1ZVwiPmNhbGw8L2J1dHRvbj4gLS0+XHJcbiAgPGRpdiBjbGFzcz1cImRpYWxwYWQtY29udGFpbmVyXCIgKm5nSWY9XCIhaXNDYWxsSW5Qcm9ncmVzc1wiIFtuZ0NsYXNzXT1cInsnbWluaS1kaWFscGFkJzogaXNNaW5pbWlzZWR9XCIgdGFiaW5kZXg9XCIwXCIgKGtleWRvd24pPVwiaGFuZGxlRGl2S2V5ZG93bigkZXZlbnQpXCI+XHJcbiAgICA8ZGl2IGlkPVwidG9wUGFuZWxcIiBbbmdTdHlsZV09XCJ7J2hlaWdodCc6IGNhbGxlcklkTGlzdC5sZW5ndGggPyAnNDAlJyA6ICczOSUnfVwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZGlhbHBhZC1hbGVydHNcIiAqbmdJZj1cImRpYWxBbGVydC5zaG93XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm5vLXNlbGVjdGlvbi1hbGVydFwiPlxyXG4gICAgICAgICAgPCEtLSA8cCBjbGFzcz1cIm1iLTBcIj5TZWxlY3QgQzJDIG51bWJlciB0byBjYWxsPC9wPiAtLT5cclxuICAgICAgICAgIDxwIGNsYXNzPVwibWItMFwiPnt7ZGlhbEFsZXJ0Lm1zZ319PC9wPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJmYSBmYS10aW1lc1wiIChjbGljayk9XCJzaGFrZURlZGljYXRlZEJ0biA9IGZhbHNlXCI+PC9zcGFuPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cImRpYWxwYWQtYWxlcnRzXCIgKm5nSWY9XCJjYWxsTnVtYmVyVG9hc3Quc2hvd1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJkaWFsYm94LXBvcDEgYWxlcnQgZmFkZSBzaG93XCIgW25nQ2xhc3NdPVwiY2FsbE51bWJlclRvYXN0LnR5cGVcIiByb2xlPVwiYWxlcnRcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW5cIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgtZ3Jvdy0xIG15LWF1dG8gdGV4dC1sZWZ0XCI+XHJcbiAgICAgICAgICAgICAgWW91J3IgY2FsbGluZyA8c3Ryb25nPnt7Y2FsbE51bWJlclRvYXN0LmRpc3BsYXlOdW19fTwvc3Ryb25nPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtcmlnaHRcIj5cclxuICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1saW5rIGJ0bi1kaXNjIHAtMCBweC0xXCIgKGNsaWNrKT1cImNhbmNlbERpYWxOdW1iZXIoKVwiPkNhbmNlbCBDYWxsPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgPCEtLSA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1saW5rIGJ0bi1zdWNjZXNzIGJ0bi1kaXNjIHAtMCBweC0yXCI+Q29udGludWU8L2J1dHRvbj4gLS0+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICBcclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBzdHlsZT1cInBhZGRpbmc6IDAgMThweFwiIChwYXN0ZSk9XCJoYW5kbGVOdW1iZXJQYXN0ZSgkZXZlbnQpXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBtdC0yXCI+XHJcbiAgICAgICAgICA8cD48L3A+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWQgZGlhbC1jbG9zZS1idG5cIiAoY2xpY2spPVwiaGlkZURpYWxwYWQoKVwiPlxyXG4gICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiBoZWlnaHQ9XCIyNHB4XCIgdmlld0JveD1cIjAgLTk2MCA5NjAgOTYwXCIgd2lkdGg9XCIyNHB4XCIgZmlsbD1cIiNmZmZmZmZcIj48cGF0aCBkPVwibTI1Ni0yMDAtNTYtNTYgMjI0LTIyNC0yMjQtMjI0IDU2LTU2IDIyNCAyMjQgMjI0LTIyNCA1NiA1Ni0yMjQgMjI0IDIyNCAyMjQtNTYgNTYtMjI0LTIyNC0yMjQgMjI0WlwiLz48L3N2Zz5cclxuICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtYm94XCI+XHJcbiAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiAjZGlhbElucHV0IHBsYWNlaG9sZGVyPVwiRW50ZXIgYSBuYW1lIG9yIG51bWJlclwiIHRhYmluZGV4PVwiMVwiIFsobmdNb2RlbCldPVwiZGlhbGVkTnVtYmVyXCIgKG5nTW9kZWxDaGFuZ2UpPVwib25EaWFsSW5wdXRDaGFuZ2UoJGV2ZW50KVwiLz5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiXCIgaWQ9XCJpbnB1dC1jbGVhci1idG5cIiAoY2xpY2spPVwiY2xlYXJJbnB1dCgpXCIgKm5nSWY9XCJzaG93SW5wdXRDbGVhckJ0blwiPlxyXG4gICAgICAgICAgICA8c3ZnIHdpZHRoPVwiNTBweFwiIGhlaWdodD1cIjMwcHhcIiB2aWV3Qm94PVwiMCAxMCA0MCA2MFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB4bWxuczp4bGluaz1cImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtcIiB2ZXJzaW9uPVwiMS4xXCIgYmFzZVByb2ZpbGU9XCJmdWxsXCIgZW5hYmxlLWJhY2tncm91bmQ9XCJuZXcgMCAwIDc2LjAwIDc2LjAwXCIgeG1sOnNwYWNlPVwicHJlc2VydmVcIj5cclxuICAgICAgICAgICAgICA8cGF0aCBmaWxsPVwiIzVkNjA2MVwiIGZpbGwtb3BhY2l0eT1cIjFcIiBzdHJva2Utd2lkdGg9XCIwLjJcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIGQ9XCJNIDQ3LjUyODIsNDIuOTQ5N0wgNDIuNTc4NCwzOEwgNDcuNTI4MiwzMy4wNTAyTCA0NC45NDk3LDMwLjQ3MThMIDQwLDM1LjQyMTZMIDM1LjA1MDIsMzAuNDcxOEwgMzIuNDcxOCwzMy4wNTAyTCAzNy40MjE2LDM4TCAzMi40NzE4LDQyLjk0OTdMIDM1LjA1MDIsNDUuNTI4MkwgNDAsNDAuNTc4NEwgNDQuOTQ5Nyw0NS41MjgyTCA0Ny41MjgyLDQyLjk0OTcgWiBNIDE4LjAxNDcsNDEuNTM1NUwgMjYuOTY0Niw1MC40ODU0QyAyOC4wNjgzLDUxLjU4OSAyOSw1MiAzMSw1MkwgNTIsNTJDIDU0Ljc2MTQsNTIgNTcsNDkuNzYxNCA1Nyw0N0wgNTcsMjlDIDU3LDI2LjIzODYgNTQuNzYxNCwyNCA1MiwyNEwgMzEsMjRDIDI5LDI0IDI4LjA2ODMsMjQuNDExMyAyNi45NjQ2LDI1LjUxNDlMIDE4LjAxNDcsMzQuNDY0NUMgMTYuMDYyMSwzNi40MTcxIDE2LjA2MjEsMzkuNTgyOSAxOC4wMTQ3LDQxLjUzNTUgWiBNIDMxLDQ5QyAzMCw0OSAyOS42MDQ4LDQ4Ljg4MjggMjkuMDg2LDQ4LjM2NDFMIDIwLjEzNjEsMzkuNDE0MkMgMTkuMzU1LDM4LjYzMzIgMTkuMzU1LDM3LjM2NjkgMjAuMTM2MSwzNi41ODU4TCAyOS4wODYsMjcuNjM2MkMgMjkuNjA0OCwyNy4xMTc1IDMwLDI3IDMxLDI3LjAwMDFMIDUyLDI3LjAwMDFDIDUzLjEwNDYsMjcuMDAwMSA1NCwyNy44OTU1IDU0LDI5LjAwMDFMIDU0LDQ3LjAwMDFDIDU0LDQ4LjEwNDYgNTMuMTA0Niw0OS4wMDAxIDUyLDQ5LjAwMDFMIDMxLDQ5IFogXCIvPlxyXG4gICAgICAgICAgICA8L3N2Zz4gICAgICAgIFxyXG4gICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJpbnB1dC1pbmZvLWljb25cIiBwbGFjZW1lbnQ9XCJib3R0b20tcmlnaHRcIiB0b29sdGlwQ2xhc3M9XCJpbnB1dC10b29sdGlwXCIgbmdiVG9vbHRpcD1cIkZvciBleHRlbnNpb24gZGlhbGluZywgdXNlIGZvcm1hdHMgbGlrZSArMTIzNDU2Nzg5MTAgeDEyMywrMTIzNDU2Nzg5MTAgZXh0LjEyMywgKzEyMzQ1Njc4OTEwLDEyM1wiPjxpIGNsYXNzPVwiZmEgZmEtaW5mby1jaXJjbGVcIj48L2k+PC9zcGFuPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJndWlkZVwiICpuZ0lmPVwiY2FsbGVySWRMaXN0Lmxlbmd0aCAmJiAhKGRpYWxlZE51bWJlci5sZW5ndGggPiAyKVwiPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJndWlkZXRleHRcIj5QbGVhc2UgZW50ZXIgYSBudW1iZXIgb3Igc2VsZWN0IGEgc2F2ZWQgY29udGFjdDwvc3Bhbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJpbnB1dC1lcnJvclwiICpuZ0lmPVwiZGlhbEFsZXJ0LnNob3dcIj5cclxuICAgICAgICAgIDxzcGFuPnt7ZGlhbEFsZXJ0Lm1zZ319PC9zcGFuPlxyXG4gICAgICAgIDwvZGl2PiAtLT5cclxuICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRhY3QtY2FyZFwiICpuZ0Zvcj1cImxldCBjb250YWN0IG9mIGZpbHRlcmVkQ29udGFjdExpc3RcIiAoY2xpY2spPVwib25Db250YWN0U2VsZWN0KGNvbnRhY3QpXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250YWN0LWltZ1wiPlxyXG4gICAgICAgICAgICAgIDxpbWcgW3NyY109XCJjb250YWN0LmltYWdlXCIgYWx0PVwidXNlciBpbWFnZVwiIGxvYWRpbmc9XCJsYXp5XCIgKm5nSWY9XCJjb250YWN0LmltYWdlIGVsc2UgYWxwaGFOYW1lXCIvPlxyXG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjYWxwaGFOYW1lPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb250YWN0LWFscGhhLWltZ1wiPnt7Z2V0Rmlyc3RMZXR0ZXIoY29udGFjdC5maXJzdE5hbWUpfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250YWN0LWRldGFpbHNcIj5cclxuICAgICAgICAgICAgICA8cCBzdHlsZT1cIm1hcmdpbi1ib3R0b206IDRweFwiIGNsYXNzPVwiY29udGFjdC1uYW1lXCI+e3tnZXRGdWxsTmFtZShjb250YWN0KSB9fTwvcD5cclxuICAgICAgICAgICAgICA8cD57e2NvbnRhY3QubnVtYmVyc0xpc3RbMF0ubnVtYmVyfX08L3A+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwid2F2ZS1jb250YWluZXJcIj5cclxuICAgICAgICA8c3ZnXHJcbiAgICAgICAgICBjbGFzcz1cIndhdmVzXCJcclxuICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxyXG4gICAgICAgICAgeG1sbnM6eGxpbms9XCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCJcclxuICAgICAgICAgIHZpZXdCb3g9XCIwIDI0IDE1MCAyOFwiXHJcbiAgICAgICAgICBwcmVzZXJ2ZUFzcGVjdFJhdGlvPVwibm9uZVwiXHJcbiAgICAgICAgICBzaGFwZS1yZW5kZXJpbmc9XCJhdXRvXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8ZGVmcz5cclxuICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICBpZD1cImdlbnRsZS13YXZlXCJcclxuICAgICAgICAgICAgICBkPVwiTS0xNjAgNDRjMzAgMCA1OC0xOCA4OC0xOHMgNTggMTggODggMTggNTgtMTggODgtMTggNTggMTggODggMTggdjQ0aC0zNTJ6XCJcclxuICAgICAgICAgICAgLz5cclxuICAgICAgICAgIDwvZGVmcz5cclxuICAgICAgICAgIDxnIGNsYXNzPVwicGFyYWxsYXhcIj5cclxuICAgICAgICAgICAgPHVzZVxyXG4gICAgICAgICAgICAgIHhsaW5rOmhyZWY9XCIjZ2VudGxlLXdhdmVcIlxyXG4gICAgICAgICAgICAgIHg9XCI0OFwiXHJcbiAgICAgICAgICAgICAgeT1cIjBcIlxyXG4gICAgICAgICAgICAgIGZpbGw9XCJyZ2JhKDI1NSwyNTUsMjU1LDAuNylcIlxyXG4gICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICA8dXNlXHJcbiAgICAgICAgICAgICAgeGxpbms6aHJlZj1cIiNnZW50bGUtd2F2ZVwiXHJcbiAgICAgICAgICAgICAgeD1cIjQ4XCJcclxuICAgICAgICAgICAgICB5PVwiM1wiXHJcbiAgICAgICAgICAgICAgZmlsbD1cInJnYmEoMjU1LDI1NSwyNTUsMC41KVwiXHJcbiAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgIDwhLS0gPHVzZVxyXG4gICAgICAgICAgICAgIHhsaW5rOmhyZWY9XCIjZ2VudGxlLXdhdmVcIlxyXG4gICAgICAgICAgICAgIHg9XCI0OFwiXHJcbiAgICAgICAgICAgICAgeT1cIjVcIlxyXG4gICAgICAgICAgICAgIGZpbGw9XCJyZ2JhKDI1NSwyNTUsMjU1LDAuMylcIlxyXG4gICAgICAgICAgICAvPiAtLT5cclxuICAgICAgICAgICAgPHVzZSB4bGluazpocmVmPVwiI2dlbnRsZS13YXZlXCIgeD1cIjQ4XCIgeT1cIjdcIiBmaWxsPVwiI2ZmZlwiIC8+XHJcbiAgICAgICAgICA8L2c+XHJcbiAgICAgICAgPC9zdmc+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwiYnRuLWNvbnRhaW5lclwiICpuZ0lmPVwiIWlzTWluaW1pc2VkXCI+XHJcbiAgICAgIDxidXR0b24gY2xhc3M9XCJkaWFsLWJ0blwiICpuZ0Zvcj1cImxldCBrZXkgb2Yga2V5cGFkVmFsO2xldCBpID0gaW5kZXhcIlxyXG4gICAgICAoa2V5ZG93bi5lbnRlcik9XCJvbkVudGVyKGtleS5udW0pXCIgKGNsaWNrKT1cImFkZE51bWJlcihrZXkubnVtKVwiXHJcbiAgICAgIFtuZ1N0eWxlXT1cInsnbWFyZ2luLXRvcCc6IGtleS50ZXh0ID09PSAnKycgPyAnM3B4JyA6ICcwJ31cIlxyXG4gICAgICAgW3RhYmluZGV4XT1cImRpYWxlZE51bWJlci5sZW5ndGggPyAnMCc6IGkrMlwiIGxvbmdQcmVzcyAobG9uZ1ByZXNzKT1cImFkZE51bWJlcihrZXkudGV4dClcIiBzaG9ydFByZXNzIChzaG9ydFByZXNzKT1cImFkZE51bWJlcihrZXkubnVtKVwiPlxyXG4gICAgICAgIHt7a2V5Lm51bX19IFxyXG4gICAgICAgIDxzcGFuICpuZ0lmPVwia2V5Lm51bSA9PSAxO2Vsc2Ugb3RoZXJUaGFuT25lXCIgY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkIHZvaWNlbWFpbFwiPlxyXG4gICAgICAgICAgdm9pY2VtYWlsXHJcbiAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjb3RoZXJUaGFuT25lPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJidG4tYWxiaGFiZXRzXCIgW25nQ2xhc3NdPVwieydwbHVzU2lnbic6IGtleS50ZXh0ID09PSAnKyd9XCI+e3trZXkudGV4dCA/IGtleS50ZXh0IDogJyZuYnNwOyd9fTwvc3Bhbj5cclxuICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImNhbGwtYnRuLWNvbnRhaW5lclwiICpuZ0lmPVwiIWlzTWluaW1pc2VkXCIgKG1vdXNlZW50ZXIpPVwib25DYWxsQnRuTW91c2VFbnRlcigkZXZlbnQpXCIgKG1vdXNlbGVhdmUpPVwib25DYWxsQnRuTW91c2VMZWF2ZSgkZXZlbnQpXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjYWxsLWJ0blwiIChjbGljayk9XCJpbml0aWF0ZUNhbGwoKVwiIFt0YWJpbmRleF09XCJkaWFsZWROdW1iZXIubGVuZ3RoID8gJzInOiAnMTUnXCJcclxuICAgICAgICBbbmdTdHlsZV09XCJ7J3BvaW50ZXItZXZlbnRzJzogZGlhbGVkTnVtYmVyLmxlbmd0aCAmJiBzZWxlY3RlZENhbGxlcklkID8gJ2F1dG8nIDogJ25vbmUnLCAnb3BhY2l0eSc6IGRpYWxlZE51bWJlci5sZW5ndGggJiYgc2VsZWN0ZWRDYWxsZXJJZCA/ICcxJyA6ICcwLjUnfVwiPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiIHN0eWxlPVwiY29sb3I6IHdoaXRlXCI+XHJcbiAgICAgICAgICBjYWxsXHJcbiAgICAgICAgPC9zcGFuPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiAqbmdJZj1cImNhbGxlcklkTGlzdC5sZW5ndGggJiYgIWlzTWluaW1pc2VkXCIgY2xhc3M9XCJwb3NpdGlvbi1yZWxhdGl2ZVwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwic2hvd25DYWxsZXJJZFwiICpuZ0lmPVwic2VsZWN0ZWRDYWxsZXJJZDsgZWxzZSBhc2tCbG9ja1wiIChjbGljayk9XCJ0b2dnbGVDYWxsZXJJZERpdigpXCI+XHJcbiAgICAgICAgPGRpdj5cclxuICAgICAgICAgIDxzcGFuIFtuZ0NsYXNzXT1cIidmaSBmaS0nICsgc2VsZWN0ZWRDYWxsZXJJZD8uaXNvQ29kZT8udG9Mb3dlckNhc2UoKVwiPjwvc3Bhbj5cclxuICAgICAgICAgIHt7c2VsZWN0ZWRDYWxsZXJJZD8ubnVtYmVyfX1cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxuZy10ZW1wbGF0ZSAjYXNrQmxvY2s+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInNob3duQ2FsbGVySWRcIiAgKGNsaWNrKT1cInRvZ2dsZUNhbGxlcklkRGl2KClcIiBbbmdDbGFzc109XCJ7ICd0aWx0LXNoYWtpbmcnOiBzaGFrZURlZGljYXRlZEJ0biB9XCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXJcIj5cclxuICAgICAgICAgICAgPGg1IGNsYXNzPVwibWItMFwiPlNlbGVjdCBDMkMgbnVtYmVyPC9oNT5cclxuICAgICAgICAgICAgPCEtLSA8c3BhbiBjbGFzcz1cIm1sLTJcIiBzdHlsZT1cIm9wYWNpdHk6Ljg7bWFyZ2luLXRvcDoycHhcIj5cclxuICAgICAgICAgICAgICA8aW1nIHNyYz1cImFzc2V0cy9pbWFnZXMvaWNvbl9kb3duX2Fycm93LnN2Z1wiIGFsdD1cImRvd25cIiB3aWR0aD1cIjEwcHhcIj5cclxuICAgICAgICAgICAgPC9zcGFuPiAtLT5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmYSBmYS1hbmdsZS1kb3duIG1sLTIgdGV4dC1ibHVlXCIgc3R5bGU9XCJtYXJnaW4tdG9wOjJweFwiPjwvc3Bhbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZ3VpZGUyXCIgKm5nSWY9XCJzaGFrZURlZGljYXRlZEJ0blwiPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwiZ3VpZGV0ZXh0XCI+UGxlYXNlIHNlbGVjdCBhIG51bWJlciBmcm9tIGJlbG93IGRyb3Bkb3duPC9zcGFuPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXYgKm5nSWY9XCJjYWxsZXJJZExpc3QubGVuZ3RoOyBlbHNlIG5vQ2FsbGVySWRNZXNzYWdlXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY2FsbGVyLWlkLWxpc3QtY29udGFpbmVyXCIgKm5nSWY9XCJjYWxsZXJJZExpc3QubGVuZ3RoICYmICFpc01pbmltaXNlZFwiIGlkPVwiY2FsbGVySWRDb250YWluZXJcIiAgW25nQ2xhc3NdPVwieyd2aXNpYmxlJzogIWlzQ2FsbGVySWRIaWRkZW59XCIgPlxyXG4gICAgICA8ZGl2IHN0eWxlPVwiZGlzcGxheTogZmxleDsganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuXCI+XHJcbiAgICAgICAgPCEtLSA8aDQ+U2VsZWN0IEMyQyBTb2Z0cGhvbmUgTnVtYmVyPC9oND4gLS0+XHJcbiAgICAgICAgIDxoND5NYWtlIG91dGdvaW5nIGNhbGwgdXNpbmc8L2g0PlxyXG4gICAgICAgIDxzcGFuXHJcbiAgICAgICAgICBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIlxyXG4gICAgICAgICAgc3R5bGU9XCJjdXJzb3I6IHBvaW50ZXJcIlxyXG4gICAgICAgICAgKGNsaWNrKT1cImlzQ2FsbGVySWRIaWRkZW4gPSB0cnVlXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICBjbG9zZVxyXG4gICAgICAgIDwvc3Bhbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDx1bD5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjYWxsZXJJZCBvZiBjYWxsZXJJZExpc3RcIj5cclxuICAgICAgICAgIDxsaSBbbmdDbGFzc109XCJ7J3NlbGVjdGVkQ2FsbGVySWRDbGFzcyc6IGNhbGxlcklkPy5udW1iZXIgPT0gc2VsZWN0ZWRDYWxsZXJJZD8ubnVtYmVyfVwiIChjbGljayk9XCJvbkRlZGljYXRlZE51bVNlbGVjdChjYWxsZXJJZClcIj5cclxuICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICA8c3BhbiBbbmdDbGFzc109XCInZmkgZmktJyArIGNhbGxlcklkPy5pc29Db2RlPy50b0xvd2VyQ2FzZSgpXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgIHt7Y2FsbGVySWQ/Lm51bWJlcn19XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8c3Bhbj57e2NhbGxlcklkPy5jb3VudHJ5TmFtZX19PC9zcGFuPlxyXG4gICAgICAgICAgPC9saT5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgPC91bD5cclxuICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8bmctdGVtcGxhdGUgI25vQ2FsbGVySWRNZXNzYWdlPlxyXG4gICAgICA8c3BhbiBjbGFzcz1cIm5vLWNhbGxlci1pZC1tZXNzYWdlXCI+VG8gbWFrZSBhbnkgdm9pY2UgY2FsbHMsIHBsZWFzZSA8YSByb3V0ZXJMaW5rPVwiL2V4dGVuc2lvbi9kZWRpY2F0ZWRudW1iZXIve3t0b2tlbn19XCIgY2xhc3M9XCJjbGljay1oZXJlLWxpbmtcIiB0aXRsZT1cIlNldHRpbmdzID4gQzJDIE51bWJlclwiPnN1YnNjcmliZTwvYT4gdG8gYSB2b2ljZSBjYXBhYmxlIEMyQyBOdW1iZXIuXHJcbiAgICAgIDwvc3Bhbj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZGVkaWNhdGVkLW92ZXJsYXlcIiAqbmdJZj1cInNob3dEZWRpY2F0ZWRQb3B1cFwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY2FyZCBkZWRpY2F0ZWROdW1Qb3B1cFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWhlYWRlciBjaG9vc2VEZWRpY2F0ZWRIZWFkZXJcIj5cclxuICAgICAgICAgIDxoNT5DaG9vc2UgQzJDIE51bWJlcjwvaDU+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWQgZGlhbC1jbG9zZS1idG5cIiAoY2xpY2spPVwic2hvd0RlZGljYXRlZFBvcHVwID0gZmFsc2VcIj5jbG9zZTwvc3Bhbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5IGRlZGljYXRlZE51bUxpc3RcIj5cclxuICAgICAgICAgIDx1bD5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY2FsbGVySWQgb2YgY2FsbGVySWRMaXN0XCI+XHJcbiAgICAgICAgICAgICAgPGxpIFtuZ0NsYXNzXT1cInsnc2VsZWN0ZWRDYWxsZXJJZENsYXNzJzogY2FsbGVySWQ/Lm51bWJlciA9PSBzZWxlY3RlZENhbGxlcklkPy5udW1iZXJ9XCIgKGNsaWNrKT1cInNob3dEZWRpY2F0ZWRQb3B1cCA9IGZhbHNlXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8c3BhbiBbbmdDbGFzc109XCInZmkgZmktJyArIGNhbGxlcklkPy5pc29Db2RlPy50b0xvd2VyQ2FzZSgpXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICB7e2NhbGxlcklkPy5udW1iZXJ9fVxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8c3Bhbj57e2NhbGxlcklkPy5jb3VudHJ5TmFtZX19PC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgPC91bD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDwhLS0gPGRpdiBjbGFzcz1cImluY29taW5nLWNhbGwtd2lkZ2V0XCIgKm5nRm9yPVwibGV0IGNhbGwgb2YgbmV3SW5jb21pbmdDYWxscztsZXQgaSA9IGluZGV4XCIgW25nU3R5bGVdPVwieyd0b3AnOiAoMzAgKyBpICogNzIpICsgJ3B4J31cIj5cclxuICAgICAgPGRpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiaW5jLXVzZXItaW1nXCI+XHJcbiAgICAgICAgICA8aW1nIHNyYz1cImFzc2V0cy9pbWFnZXMvdXNlci5qcGdcIiBhbHQ9XCJ1c2VyIGltYWdlXCI+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgXHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZmxleC1ncm93LTFcIj5cclxuICAgICAgICA8cCBjbGFzcz1cImluYy11c2VyLW5hbWVcIj57e2NhbGwuY3VzdG9tUGFyYW1ldGVycy5nZXQoJ25hbWUnKX19PC9wPlxyXG4gICAgICAgIDxwPnt7Y2FsbC5wYXJhbWV0ZXJzLkZyb219fTwvcD5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXhcIj5cclxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiaW5jLWNhbGwtYnRuIGluYy1hY2NlcHQtYnRuIG1yLTJcIiAoY2xpY2spPVwiYWNjZXB0TmV3SW5jb21pbmdDYWxsKGNhbGwpXCI+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIiBzdHlsZT1cImNvbG9yOiB3aGl0ZVwiPlxyXG4gICAgICAgICAgICBjYWxsXHJcbiAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImluYy1jYWxsLWJ0biBpbmMtcmVqZWN0LWJ0blwiIChjbGljayk9XCJyZWplY3ROZXdJbmNvbWluZ0NhbGwoY2FsbClcIj5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiIHN0eWxlPVwiY29sb3I6IHdoaXRlXCI+XHJcbiAgICAgICAgICAgIGNhbGxfZW5kXHJcbiAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgIFxyXG4gICAgPC9kaXY+IC0tPlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuIl19