mmhglobal-dynamicform 2.21.0 → 2.22.0

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.
Files changed (29) hide show
  1. package/README.md +21 -0
  2. package/esm2020/lib/components/fieldbase.component.mjs +2 -3
  3. package/esm2020/lib/services/main.service.mjs +2 -1
  4. package/esm2020/lib/services/zcomponent.service.mjs +7 -1
  5. package/esm2020/lib/uicontent/uicontent.component.mjs +15 -15
  6. package/esm2020/lib/uiheader/uiheader.component.mjs +16 -19
  7. package/esm2020/lib/uivalidationmessage/uivalidationmessage.component.mjs +10 -12
  8. package/esm2020/lib/zgrid/zgrid.component.mjs +3 -3
  9. package/esm2020/lib/zmodal/zmodal-mobile.component.mjs +17 -16
  10. package/esm2020/lib/zmodal/zmodal.component.mjs +15 -14
  11. package/esm2020/lib/znumeric/znumeric.component.mjs +3 -3
  12. package/esm2020/lib/zpostselectinput/zpostselectinput.component.mjs +2 -2
  13. package/esm2020/lib/zreport/zreport.component.mjs +73 -29
  14. package/esm2020/lib/zselectmultiple/zselectmultiple.component.mjs +2 -2
  15. package/esm2020/lib/ztext/ztext.component.mjs +3 -3
  16. package/esm2020/public-api.mjs +2 -2
  17. package/fesm2015/mmhglobal-dynamicform.mjs +1194 -1147
  18. package/fesm2015/mmhglobal-dynamicform.mjs.map +1 -1
  19. package/fesm2020/mmhglobal-dynamicform.mjs +1227 -1180
  20. package/fesm2020/mmhglobal-dynamicform.mjs.map +1 -1
  21. package/lib/services/zcomponent.service.d.ts +1 -0
  22. package/lib/uicontent/uicontent.component.d.ts +3 -1
  23. package/lib/uiheader/uiheader.component.d.ts +3 -1
  24. package/lib/uivalidationmessage/uivalidationmessage.component.d.ts +3 -2
  25. package/lib/zmodal/zmodal-mobile.component.d.ts +4 -1
  26. package/lib/zmodal/zmodal.component.d.ts +3 -1
  27. package/lib/zreport/zreport.component.d.ts +16 -11
  28. package/package.json +1 -1
  29. package/public-api.d.ts +1 -0
@@ -518,7 +518,7 @@ export class ZgridComponent extends DataListingFieldBase {
518
518
  this.pageSizes = [5, 10, 20, 50, 100, 200, 500];
519
519
  this.previousNext = this.data['EnablePreviousNextButton'] || false;
520
520
  // [Mobile] Disable page sizes if PageSizes is explicitly set to false or on a mobile screen.
521
- if (this.data.PageSizes === false || ZComponentHelper.isMobileScreen()) {
521
+ if (this.data.PageSizes === false || this.isMobileScreen()) {
522
522
  this.pageSizes = false;
523
523
  }
524
524
  // Configure pagination settings.
@@ -546,7 +546,7 @@ export class ZgridComponent extends DataListingFieldBase {
546
546
  this.subscription.unsubscribe();
547
547
  }
548
548
  // From here will call zgrid.binding.directive.
549
- // Subscribe to get from directive and set to component
549
+ // Subscribe to get from directive and set to component
550
550
  this.subscription = this.gridSubject.pipe(tap(gridDirective => {
551
551
  // Set the zgrid property based on the emitted gridDirective.
552
552
  this.zgrid = gridDirective;
@@ -1030,4 +1030,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
1030
1030
  type: ViewChild,
1031
1031
  args: [ElementContainerDirective, { static: true }]
1032
1032
  }] } });
1033
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiemdyaWQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbW1oZ2xvYmFsLWR5bmFtaWNmb3JtL3NyYy9saWIvemdyaWQvemdyaWQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbW1oZ2xvYmFsLWR5bmFtaWNmb3JtL3NyYy9saWIvemdyaWQvemdyaWQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0JBQStCO0FBQy9CLE9BQU8sRUFBRSxTQUFTLEVBQXFCLFNBQVMsRUFBdUMsTUFBTSxlQUFlLENBQUM7QUFDN0csT0FBTyxFQUFFLFNBQVMsRUFBZSxVQUFVLEVBQUUsV0FBVyxFQUFlLE1BQU0sZ0JBQWdCLENBQUM7QUFHOUYsNkJBQTZCO0FBRTdCLDhCQUE4QjtBQUM5QixPQUFPLEVBQWMsRUFBRSxFQUFFLE9BQU8sRUFBZ0IsS0FBSyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBR3JELE9BQU8sRUFBeUIsT0FBTyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDNUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFHbkUsMkNBQTJDO0FBQzNDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBRXBGLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ2xGLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRTFELE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBRXJGLE9BQU8sRUFFRyxNQUFNLEVBQWMsZ0JBQWdCLEVBRTdDLE1BQU0saUJBQWlCLENBQUM7QUFDekIsT0FBTyxFQUFFLGVBQWUsRUFBRSxr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QUN2QixJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO1FBQ3BDLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0lBQzVDLENBQUM7OzJHQTVvQ1UsY0FBYzsrRkFBZCxjQUFjLDZGQUNkLGdCQUFnQixtRkFDaEIseUJBQXlCLHFGQzdEdEMsMDAxQkF5WUEsOGlqQ0RuVmM7UUFDViw0QkFBNEI7S0FDN0I7MkZBR1UsY0FBYztrQkFUMUIsU0FBUzsrQkFDRSxXQUFXLGNBR1Q7d0JBQ1YsNEJBQTRCO3FCQUM3QjtxY0FJbUMsVUFBVTtzQkFBN0MsU0FBUzt1QkFBQyxnQkFBZ0I7Z0JBQzZCLGdCQUFnQjtzQkFBdkUsU0FBUzt1QkFBQyx5QkFBeUIsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyIvKioqKioqKioqKiBBbmd1bGFyICoqKioqKioqKiovXHJcbmltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBPbkRlc3Ryb3ksIFZpZXdDaGlsZCwgQWZ0ZXJWaWV3Q2hlY2tlZCwgQ2hhbmdlRGV0ZWN0b3JSZWYgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBGb3JtR3JvdXAsIEZvcm1CdWlsZGVyLCBWYWxpZGF0b3JzLCBGb3JtQ29udHJvbCwgVmFsaWRhdG9yRm4gfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tIFwiQGFuZ3VsYXIvcm91dGVyXCI7XHJcblxyXG4vKioqKioqKioqKiBJb25pYyAqKioqKioqKioqL1xyXG5cclxuLyoqKioqKioqKiogUGx1Z2luICoqKioqKioqKiovXHJcbmltcG9ydCB7IE9ic2VydmFibGUsIG9mLCBTdWJqZWN0LCBTdWJzY3JpcHRpb24sIGRlbGF5IH0gZnJvbSBcInJ4anNcIjtcclxuaW1wb3J0IHsgdGFwLCBtYXAsIHN3aXRjaE1hcCB9IGZyb20gXCJyeGpzL29wZXJhdG9yc1wiO1xyXG5pbXBvcnQgeyBFeGNlbEV4cG9ydERhdGEgfSBmcm9tICdAcHJvZ3Jlc3Mva2VuZG8tYW5ndWxhci1leGNlbC1leHBvcnQnO1xyXG5pbXBvcnQgeyBHcmlkSXRlbSwgU2VsZWN0YWJsZVNldHRpbmdzIH0gZnJvbSAnQHByb2dyZXNzL2tlbmRvLWFuZ3VsYXItZ3JpZCc7XHJcbmltcG9ydCB7IFNvcnREZXNjcmlwdG9yLCBTdGF0ZSwgcHJvY2VzcyB9IGZyb20gXCJAcHJvZ3Jlc3Mva2VuZG8tZGF0YS1xdWVyeVwiO1xyXG5pbXBvcnQgeyBUb29sdGlwRGlyZWN0aXZlIH0gZnJvbSAnQHByb2dyZXNzL2tlbmRvLWFuZ3VsYXItdG9vbHRpcCc7XHJcbmltcG9ydCB7IEdyaWREYXRhUmVzdWx0LCBEYXRhU3RhdGVDaGFuZ2VFdmVudCwgUGFnZUNoYW5nZUV2ZW50LCBDZWxsQ2xpY2tFdmVudCwgR3JpZENvbXBvbmVudCwgUm93QXJncyB9IGZyb20gXCJAcHJvZ3Jlc3Mva2VuZG8tYW5ndWxhci1ncmlkXCI7XHJcblxyXG4vKioqKioqKioqKiBDb21wb25lbnQgJiBTZXJ2aWNlICoqKioqKioqKiovXHJcbmltcG9ydCB7IERhdGFMaXN0aW5nRmllbGRCYXNlIH0gZnJvbSBcIi4uL2NvbXBvbmVudHMvZGF0YWxpc3RpbmdmaWVsZGJhc2UuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IFpDb21wb25lbnRTZXJ2aWNlIH0gZnJvbSBcIi4uL3NlcnZpY2VzL3pjb21wb25lbnQuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBoaWRlQW5kU2hvd1ZlcnRpY2FsQW5pbWF0aW9uIH0gZnJvbSBcIi4uL2FuaW1hdGlvbnMvY29tcG9uZW50LWFuaW1hdGlvbnNcIjtcclxuaW1wb3J0IHsgQ29tcG9uZW50Q29uc3RhbnQgfSBmcm9tIFwiLi4vY29uc3RhbnRzL2NvbnN0YW50XCI7XHJcbmltcG9ydCB7IE1haW5TZXJ2aWNlIH0gZnJvbSBcIi4uL3NlcnZpY2VzL21haW4uc2VydmljZVwiO1xyXG5pbXBvcnQgeyBFbGVtZW50Q29udGFpbmVyRGlyZWN0aXZlIH0gZnJvbSBcIi4uL2RpcmVjdGl2ZXMvZWxlbWVudGNvbnRhaW5lci5kaXJlY3RpdmVcIjtcclxuaW1wb3J0IHsgWkdyaWRCaW5kaW5nRGlyZWN0aXZlIH0gZnJvbSBcIi4vemdyaWQuYmluZGluZy5kaXJlY3RpdmVcIjtcclxuaW1wb3J0IHtcclxuICBXZWJBcGlTZXJ2aWNlLCBUb2FzdFNlcnZpY2UsXHJcbiAgWkZpZWxkLCBaR3JvdXAsIFpDb21wb25lbnQsIFpDb21wb25lbnRIZWxwZXIsIFpDb21wb25lbnRPdXRwdXRFdmVudCwgWkNvcmVTZXJ2aWNlLCBTdG9yYWdlU2Vzc2lvblNlcnZpY2UsIEZvbnRBd2VTb21lU2VydmljZSxcclxuICBaR3JpZFBvc3RBcGlQYXJhbXMsIFpHcmlkU2V0dGluZ3MsIFpHcmlkQ3VzdG9tQ29sdW1uLCBPZmZsaW5lRGF0YWJhc2VTZXJ2aWNlLCBKc29uQ2FjaGVcclxufSBmcm9tICdtbWhnbG9iYWwtemNvcmUnO1xyXG5pbXBvcnQgeyBHcmlkU2V0dGluZ1R5cGUsIEdyaWRTdGF0ZUxvZ2ljVHlwZSwgWkdyaWRTZXJ2aWNlIH0gZnJvbSBcIi4vemdyaWQuc2VydmljZVwiO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBaR3JpZCB7XHJcbiAgcGFyYW1zOiBaR3JpZFBvc3RBcGlQYXJhbXM7XHJcbiAgc3RhdGU6IFN0YXRlO1xyXG4gIGNvbHVtbnM6IGFueVtdO1xyXG4gIHBhZ2luYXRpb25BcGlQb3N0VXJsOiBzdHJpbmc7XHJcbiAgZGF0YTogWkZpZWxkO1xyXG4gIGdyb3VwOiBaR3JvdXA7XHJcbiAgemdyaWQ6IFpHcmlkQmluZGluZ0RpcmVjdGl2ZTtcclxuICBpbmxpbmVFZGl0ZWRGb3JtR3JvdXBzOiBGb3JtR3JvdXA7XHJcbiAgZ2V0R3JpZERhdGE6ICgpID0+IGFueVtdO1xyXG4gIGdldERhdGE6ICgpID0+IHZvaWQ7XHJcbiAgY2xlYXJEYXRhOiAoKSA9PiB2b2lkO1xyXG4gIHNldERhdGE6IChkYXRhOiBhbnkpID0+IHZvaWQ7XHJcbiAgc2V0Q29sdW1uczogKGNvbHVtbkZpZWxkc05hbWU6IHN0cmluZywgY29sdW1uczogQXJyYXk8WkdyaWRDdXN0b21Db2x1bW4+KSA9PiB2b2lkO1xyXG4gICRzZXRDb2x1bW5zOiAoY29sdW1uRmllbGRzTmFtZTogc3RyaW5nLCBjb2x1bW5zOiBBcnJheTxaR3JpZEN1c3RvbUNvbHVtbj4pID0+IE9ic2VydmFibGU8YW55PjtcclxuICBnZXRGb3JtQ29udHJvbERhdGEoKTogYW55W107XHJcbn1cclxuXHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogXCJhcHAtemdyaWRcIixcclxuICB0ZW1wbGF0ZVVybDogXCIuL3pncmlkLmNvbXBvbmVudC5odG1sXCIsXHJcbiAgc3R5bGVVcmxzOiBbXCIuL3pncmlkLmNvbXBvbmVudC5zY3NzXCJdLFxyXG4gIGFuaW1hdGlvbnM6IFtcclxuICAgIGhpZGVBbmRTaG93VmVydGljYWxBbmltYXRpb25cclxuICBdXHJcbn0pXHJcblxyXG5leHBvcnQgY2xhc3MgWmdyaWRDb21wb25lbnQgZXh0ZW5kcyBEYXRhTGlzdGluZ0ZpZWxkQmFzZSBpbXBsZW1lbnRzIFpDb21wb25lbnQsIE9uSW5pdCwgQWZ0ZXJWaWV3Q2hlY2tlZCwgT25EZXN0cm95IHtcclxuICBAVmlld0NoaWxkKFRvb2x0aXBEaXJlY3RpdmUpIHB1YmxpYyB0b29sdGlwRGlyOiBUb29sdGlwRGlyZWN0aXZlO1xyXG4gIEBWaWV3Q2hpbGQoRWxlbWVudENvbnRhaW5lckRpcmVjdGl2ZSwgeyBzdGF0aWM6IHRydWUgfSkgZWxlbWVudENvbnRhaW5lciE6IEVsZW1lbnRDb250YWluZXJEaXJlY3RpdmU7XHJcbiAgLy8gQFZpZXdDaGlsZChaR3JpZEJpbmRpbmdEaXJlY3RpdmUsIHsgc3RhdGljOiBmYWxzZSB9KSB6Z3JpZDogWkdyaWRCaW5kaW5nRGlyZWN0aXZlO1xyXG5cclxuICB6Z3JpZDogYW55ID0gbnVsbDtcclxuICBvYXV0aFVybDogc3RyaW5nID0gbnVsbDtcclxuICBncmlkRGF0YTogR3JpZERhdGFSZXN1bHQ7XHJcbiAgc2VsZWN0YWJsZVNldHRpbmdzOiBTZWxlY3RhYmxlU2V0dGluZ3M7XHJcbiAgbXlTZWxlY3Rpb246IGFueVtdID0gW107XHJcbiAgaW5saW5lRWRpdGVkRm9ybUdyb3VwcyA9IHt9O1xyXG4gIHB1YmxpYyBmb3JtR3JvdXA6IEZvcm1Hcm91cDsgLy8gZm9yIGtlbmRvIGdyaWQgYnVpbHQtaW5cclxuICBwdWJsaWMgcHJldmlvdXNOZXh0OiBib29sZWFuO1xyXG4gIHB1YmxpYyBncmlkQnRuO1xyXG4gIHB1YmxpYyBwYWdlYWJsZTogYW55ID0gZmFsc2U7XHJcbiAgcHVibGljIGZpbHRlckdyb3VwID0gbmV3IFpHcm91cCgpO1xyXG4gIHB1YmxpYyBhZHZmaWx0ZXJHcm91cCA9IG5ldyBaR3JvdXAoKTtcclxuICBwdWJsaWMgaXNTaG93QWR2RmlsdGVyID0gZmFsc2U7XHJcbiAgcHVibGljIGdyaWRUaXRsZTogYW55O1xyXG4gIHB1YmxpYyBpc0lubGluZUVkaXRJbnB1dEZpZWxkTG9hZGluZyA9IGZhbHNlO1xyXG4gIHByaXZhdGUgdGVtcElubGluZUVkaXRlZEZvcm1Hcm91cHM7XHJcbiAgcHJpdmF0ZSBpc0NvbHVtbkhlYWRlclRyYW5zbGF0ZWQgPSBmYWxzZTtcclxuICBwdWJsaWMgc2hvd1Jlc3RvcmVHcmlkU2V0dGluZ0J1dHRvbjogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuXHJcbiAgcGFyYW1zOiBaR3JpZFBvc3RBcGlQYXJhbXMgPSB7XHJcbiAgICByZWZlcklkOiBudWxsLFxyXG4gICAgcGFnZU5vOiAwLFxyXG4gICAgcGFnZVNpemU6IDIwLFxyXG4gICAgc29ydENvbHVtbk5hbWU6IFwiXCIsXHJcbiAgICBzb3J0T3JkZXI6IFwiXCIsXHJcbiAgICBzb3J0Q29sdW1uTmFtZXM6IFtdLFxyXG4gICAgc29ydE9yZGVyczogW10sXHJcbiAgICBmaWx0ZXJQYXJhbXM6IFtdLFxyXG4gICAgcGFyYW1ldGVyczogXCJcIixcclxuICAgIGZpbHRlcnM6IFwiXCIsXHJcbiAgICBjb2x1bW5zOiBcIlwiLFxyXG4gICAgZ3JhbnRUeXBlOiA0XHJcbiAgfTtcclxuXHJcbiAgZ3JpZFN1YmplY3Q6IFN1YmplY3Q8YW55PiA9IG5ldyBTdWJqZWN0PGFueT4oKTtcclxuXHJcbiAgY29sdW1uczogYW55W107XHJcbiAgZ2VuZXJhdGVIaWRkZW5Db2x1bW5zRmllbGQ6IGFueVtdO1xyXG4gIGVkaXRhYmxlQ29sdW1uczogYW55W107XHJcbiAgc3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XHJcbiAgcGFnZVNpemVzOiBib29sZWFuIHwgYW55W107XHJcbiAgZ3JpZFN0b3JhZ2VLZXk6IHN0cmluZztcclxuICBncmlkRGVmYXVsdFN0YXRlRXhpc3Q6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBpc05ldzogYm9vbGVhbiA9IHRydWU7XHJcbiAgcHJpdmF0ZSBlZGl0ZWRSb3dJbmRleDogbnVtYmVyOyBcclxuICBwdWJsaWMgZ3JpZFNldHRpbmc6IFpHcmlkU2V0dGluZ3M7XHJcbjtcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHB1YmxpYyBjb21wb25lbnRTZXJ2aWNlOiBaQ29tcG9uZW50U2VydmljZSxcclxuICAgIHB1YmxpYyBmb250QXdlU29tZVNlcnZpY2U6IEZvbnRBd2VTb21lU2VydmljZSxcclxuICAgIHByaXZhdGUgYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlLFxyXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcclxuICAgIHByaXZhdGUgZm9ybUJ1aWxkZXI6IEZvcm1CdWlsZGVyLCBcclxuICAgIHByaXZhdGUgd2ViQXBpU2VydmljZTogV2ViQXBpU2VydmljZSxcclxuICAgIHByaXZhdGUgdG9hc3RTZXJ2aWNlOiBUb2FzdFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHpjb3JlU2VydmljZTogWkNvcmVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBzdG9yYWdlU2VydmljZTogU3RvcmFnZVNlc3Npb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBtYWluU2VydmljZTogTWFpblNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICBwcml2YXRlIGdyaWRTZXJ2aWNlOiBaR3JpZFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIG9mZmxpbmVEYXRhYmFzZVNlcnZpY2U6IE9mZmxpbmVEYXRhYmFzZVNlcnZpY2VcclxuICApIHtcclxuICAgIHN1cGVyKGNvbXBvbmVudFNlcnZpY2UpO1xyXG4gICAgdGhpcy5vYXV0aFVybCA9IHRoaXMuemNvcmVTZXJ2aWNlLmdldEVudmlyb25tZW50KCkuZTFPYXV0aFVybCArIFwiL1wiO1xyXG4gICAgdGhpcy5hbGxSZXN1bHRzID0gdGhpcy5hbGxSZXN1bHRzLmJpbmQodGhpcyk7XHJcbiAgICB0aGlzLnJlZnJlc2hEYXRhID0gdGhpcy5yZWZyZXNoRGF0YS5iaW5kKHRoaXMpO1xyXG4gICAgdGhpcy5jbGVhckRhdGEgPSB0aGlzLmNsZWFyRGF0YS5iaW5kKHRoaXMpOyBcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCkgeyBcclxuICAgIHN1cGVyLnNldHVwSW5uZXJGaWVsZCgpO1xyXG4gICAgdGhpcy5zZXR1cEZpbHRlckZlYXR1cmUoKTtcclxuICAgIHRoaXMuc2V0dXBHcmlkQnV0dG9ucygpO1xyXG4gICAgdGhpcy5zZXR1cEdyaWRDb21wb25lbnRBdHRyaWJ1dGVzKCk7XHJcbiAgICB0aGlzLmdyaWRTZXR0aW5nID0geyBncmlkU3RhdGU6IHRoaXMuZ3JpZFNlcnZpY2Uuc2V0dXBHcmlkU2V0dGluZyh0aGlzLmRhdGEpIH07XHJcblxyXG4gICAgdGhpcy5zZXR1cFN1YnNjcmlwdGlvbkZvckdyaWRTdWJqZWN0KCk7XHJcblxyXG4gICAgc3VwZXIudHJhbnNsYXRlVG9vbEJhckl0ZW1zKCkucGlwZSh0YXAoKCkgPT4ge1xyXG4gICAgICB0aGlzLmdyaWRDYWxsYmFjayh0aGlzLmdyb3VwKTtcclxuICAgIH0pKS5zdWJzY3JpYmUoKTtcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgIHRoaXMuY29tcG9uZW50U2VydmljZS5kZWNyZW1lbnRDb21wb25lbnRDb3VudGVyRm9yRmllbGQodGhpcy5kYXRhKTtcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3Q2hlY2tlZCgpIHtcclxuICAgIGNvbnN0IGlzQmFja05hdmlnYXRlZCA9IChzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKFwibmF2aWdhdGVkUmVsb2FkR3JpZFwiKSA9PT0gJ3RydWUnKTtcclxuXHJcbiAgICBpZiAoaXNCYWNrTmF2aWdhdGVkKSB7XHJcbiAgICAgIGlmICghdGhpcy5pc1VzZUxvY2FsRGF0YSgpKSB7XHJcbiAgICAgICAgdGhpcy5nZXREYXRhKCk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnNldChcIm5hdmlnYXRlZFJlbG9hZEdyaWRcIiwgSlNPTi5zdHJpbmdpZnkoZmFsc2UpKTtcclxuICAgIH0gXHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpIHtcclxuICAgIGlmICh0aGlzLnN1YnNjcmlwdGlvbikge1xyXG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8jcmVnaW9uIEdyaWQgU3RhdGUgKHBhZ2luYXRpb24sIHNvcnRhYmxlLCBmaWx0ZXIsIG9yZGVyaW5nKVxyXG4gIHB1YmxpYyBkYXRhU3RhdGVDaGFuZ2Uoc3RhdGU6IERhdGFTdGF0ZUNoYW5nZUV2ZW50KTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuaXNVc2VMb2NhbERhdGEoKSkge1xyXG4gICAgICB0aGlzLnpncmlkLmRhdGFTdGF0ZUNoYW5nZShzdGF0ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZmlsdGVyYWJsZSh2YWx1ZTogYW55KSB7XHJcbiAgICBpZiAodmFsdWUgPT09IGZhbHNlKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNvcnRhYmxlKHZhbHVlOiBhbnkpIHtcclxuICAgIGlmICh2YWx1ZSA9PT0gZmFsc2UpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbG9ja2VkKGNvbFNldHRpbmc6IGFueSkge1xyXG4gICAgaWYgKGNvbFNldHRpbmdbJ3Bpbm5lZExlZnQnXSA9PSB0cnVlKSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgLy8jcmVnaW9uIEdyaWQgQ29sdW1uc1xyXG4gIHB1YmxpYyBpc1NlbGVjdE9wdGlvbigpIHtcclxuICAgIGlmICh0aGlzLmRhdGEuU2VsZWN0T3B0aW9ucykge1xyXG4gICAgICB0aGlzLnNlbGVjdGFibGVTZXR0aW5ncyA9IHtcclxuICAgICAgICBjaGVja2JveE9ubHk6IGZhbHNlLFxyXG4gICAgICAgIG1vZGU6ICh0aGlzLmRhdGEuU2VsZWN0T3B0aW9ucz8udG9Mb3dlckNhc2UoKSA9PT0gXCJtdWx0aXBsZVwiKSA/IFwibXVsdGlwbGVcIiA6IFwic2luZ2xlXCJcclxuICAgICAgfTtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0Q29sdW1ucyhjb2x1bW5OYW1lOiBzdHJpbmcsIGNvbHVtbnM6IEFycmF5PFpHcmlkQ3VzdG9tQ29sdW1uPikge1xyXG4gICAgdGhpcy5ncm91cFtjb2x1bW5OYW1lXSA9IHRoaXMud3JhcENvbHVtbk5hbWVzSW5GaWVsZEVsZW1lbnQoY29sdW1ucyk7XHJcbiAgICB0aGlzLmdlbmVyYXRlR3JpZENvbHVtbnMoKS5zdWJzY3JpYmUoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyAkc2V0Q29sdW1ucyhjb2x1bW5OYW1lOiBzdHJpbmcsIGNvbHVtbnM6IEFycmF5PFpHcmlkQ3VzdG9tQ29sdW1uPik6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICB0aGlzLmdyb3VwW2NvbHVtbk5hbWVdID0gdGhpcy53cmFwQ29sdW1uTmFtZXNJbkZpZWxkRWxlbWVudChjb2x1bW5zKTtcclxuICAgIHJldHVybiB0aGlzLmdlbmVyYXRlR3JpZENvbHVtbnMoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgd3JhcENvbHVtbk5hbWVzSW5GaWVsZEVsZW1lbnQoY29sdW1uTGlzdDogQXJyYXk8WkdyaWRDdXN0b21Db2x1bW4+KSB7XHJcbiAgICByZXR1cm4gb2YoY29sdW1uTGlzdC5tYXAoYyA9PiB7XHJcbiAgICAgIGNvbnN0IGlzSGlkZGVuOiBib29sZWFuID0gYy5IaWRkZW47XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgTmFtZTogYy5OYW1lLFxyXG4gICAgICAgIFZhbHVlOiBjLkNvZGUsXHJcbiAgICAgICAgVHlwZTogYy5UeXBlLFxyXG4gICAgICAgIGdyaWRDb2xWaXNpYmxlOiAhaXNIaWRkZW4sXHJcbiAgICAgICAgRW5hYmxlR3JpZFZhbHVlOiBjLkVuYWJsZUdyaWRWYWx1ZSB8fCBmYWxzZSxcclxuICAgICAgICB3aWR0aDogMTAwICsgYy5OYW1lLmxlbmd0aCAqIDQsXHJcbiAgICAgICAgZW5hYmxlRmlsdGVyaW5nOiBmYWxzZSxcclxuICAgICAgICBlbmFibGVTb3J0aW5nOiB0cnVlLFxyXG4gICAgICAgIGVuYWJsZVBpbm5pbmc6IHRydWUsXHJcbiAgICAgICAgRGl2Q2xhc3M6IFwiY29sLXhzLTEyIGNvbC1zbS02XCIsXHJcbiAgICAgICAgSXNFZGl0YWJsZUluR3JpZDogYy5FZGl0YWJsZVxyXG4gICAgICB9O1xyXG4gICAgfSkpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZW5lcmF0ZUdyaWRDb2x1bW5zKGdyaWRTZXR0aW5nPzogWkdyaWRTZXR0aW5ncyk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICBjb25zdCBjb2x1bW5GaWVsZHMkOiBPYnNlcnZhYmxlPGFueT4gPSBaQ29tcG9uZW50SGVscGVyLmdldEdyb3VwVmFsdWUoXHJcbiAgICAgIHRoaXMuZGF0YS5Db2x1bW5GaWVsZHMsXHJcbiAgICAgIHRoaXMuZ3JvdXBcclxuICAgICkgfHwgb2YoW10pO1xyXG5cclxuICAgIGlmICghdGhpcy5kYXRhLkNvbHVtbkZpZWxkcykge1xyXG4gICAgICBjb25zb2xlLndhcm4oJ0ludmFsaWQvRW1wdHkgZ3JpZCgnICsgdGhpcy5kYXRhLk5hbWUgKyAnKSBjb2x1bW5GaWVsZCcpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghY29sdW1uRmllbGRzJCkge1xyXG4gICAgICBjb25zb2xlLmxvZygnRmFpbCB0byBnZW5lcmF0ZSBncmlkIGNvbHVtbiBmaWVsZHMuJyk7XHJcbiAgICAgIGNvbnNvbGUubG9nKHRoaXMuZGF0YS5Db2x1bW5GaWVsZHMpO1xyXG4gICAgICBjb25zb2xlLmxvZyh0aGlzLmdyb3VwKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gY29sdW1uRmllbGRzJC5waXBlKFxyXG4gICAgICB0YXAoY29sdW1uRmllbGQgPT4ge1xyXG4gICAgICAgIGlmICghY29sdW1uRmllbGQpIHtcclxuICAgICAgICAgIGNvbnNvbGUud2FybignSW52YWxpZC9FbXB0eSBncmlkKCcgKyB0aGlzLmRhdGEuTmFtZSArICcpIGRhdGEgdG8gZ2VuZXJhdGUgY29sdW1uJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgeyBcclxuICAgICAgICAgIHRoaXMuY29sdW1ucyA9IFtdO1xyXG4gICAgICAgICAgY29uc3QgZ2VuZXJhdGVIaWRkZW5Db2x1bW5zID0gW107XHJcbiAgICAgICAgICAgXHJcbiAgICAgICAgICBaQ29tcG9uZW50SGVscGVyLmdldEdyaWRDb2x1bW5zKHtcclxuICAgICAgICAgICAgY29sdW1uRmllbGQ6ICBjb2x1bW5GaWVsZCxcclxuICAgICAgICAgICAgY29sdW1uczogdGhpcy5jb2x1bW5zLFxyXG4gICAgICAgICAgICBncm91cDogdGhpcy5ncm91cCxcclxuICAgICAgICAgICAgY29sdW1uQ29uZmlndXJhdGlvbnM6IGdyaWRTZXR0aW5nPy5jb2x1bW5Db25maWd1cmF0aW9ucyxcclxuICAgICAgICAgICAgZ2VuZXJhdGVIaWRkZW5Db2x1bW5zOiBnZW5lcmF0ZUhpZGRlbkNvbHVtbnMsXHJcbiAgICAgICAgICAgIGdyaWRBdHRyaWJ1dGVzOiB0aGlzLmRhdGEgXHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICBpZiAoZ2VuZXJhdGVIaWRkZW5Db2x1bW5zLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgdGhpcy5nZW5lcmF0ZUhpZGRlbkNvbHVtbnNGaWVsZCA9IFtdO1xyXG4gICAgICAgICAgICBjb25zdCBnZW5lcmF0ZUhpZGRlbkNvbHVtbnNGaWVsZCA9IGdlbmVyYXRlSGlkZGVuQ29sdW1ucy5tYXAoZmllbGQgPT4gKHsgZmllbGQ6IGZpZWxkLCBWaXNpYmxlOiB0cnVlLCBJc1JlcXVpcmVkOiBmYWxzZSwgVmFsdWU6IGZpZWxkIH0pKTtcclxuICAgICAgICAgICAgZm9yIChjb25zdCBmaWVsZCBvZiBnZW5lcmF0ZUhpZGRlbkNvbHVtbnNGaWVsZCkge1xyXG4gICAgICAgICAgICAgIHRoaXMuZ2VuZXJhdGVIaWRkZW5Db2x1bW5zRmllbGQucHVzaChmaWVsZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pLFxyXG4gICAgICBzd2l0Y2hNYXAoKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiBzdXBlci50cmFuc2xhdGVDb2x1bW5IZWFkZXIodGhpcy5jb2x1bW5zKTtcclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBnZXRJY29uTmFtZShncmlkQ2VsbFJlcGxhY2VWYWx1ZTogYW55LCB2YWx1ZTogYW55KSB7XHJcbiAgICBpZiAoZ3JpZENlbGxSZXBsYWNlVmFsdWUgJiYgZ3JpZENlbGxSZXBsYWNlVmFsdWVbdmFsdWVdKSB7XHJcbiAgICAgIHJldHVybiBaQ29tcG9uZW50SGVscGVyLmdldEZvbnRBd2Vzb21lKGdyaWRDZWxsUmVwbGFjZVZhbHVlW3ZhbHVlXSwgdGhpcy5mb250QXdlU29tZVNlcnZpY2UpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiAnJztcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8vI3JlZ2lvbiBncmlkIHN0eWxpbmdcclxuICBwdWJsaWMgY2VsbFN0eWxlQ29uZGl0aW9uKGNvbCwgY29sVmFsdWU6IGFueSkge1xyXG4gICAgaWYgKGNvbFsnQ2VsbFN0eWxlQ29uZGl0aW9uJ10pIHtcclxuICAgICAgY29uc3QgY29uZGl0aW9uSGlnaGxpZ2h0Y29sOiBbXSA9IGNvbFsnQ2VsbFN0eWxlQ29uZGl0aW9uJ107XHJcbiAgICAgIGxldCBjb25kaXRpb25SZXN1bHQgPSBmYWxzZTtcclxuXHJcbiAgICAgIGNvbmRpdGlvbkhpZ2hsaWdodGNvbC5mb3JFYWNoKGRhdGEgPT4ge1xyXG4gICAgICAgIGlmICghY29uZGl0aW9uUmVzdWx0KSB7XHJcbiAgICAgICAgICBpZiAoZGF0YVsnVmFsdWUnXSA9PSBjb2xWYWx1ZSkge1xyXG4gICAgICAgICAgICBjb25kaXRpb25SZXN1bHQgPSB0cnVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcblxyXG4gICAgICByZXR1cm4gY29uZGl0aW9uUmVzdWx0O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldENlbGxTdHlsZUNvbmRpdGlvbihjb2wsIGNvbFZhbHVlOiBhbnkpIHtcclxuICAgIGlmIChjb2xbJ0NlbGxTdHlsZUNvbmRpdGlvbiddKSB7XHJcbiAgICAgIGNvbnN0IGNvbmRpdGlvbkhpZ2hsaWdodGNvbDogW10gPSBjb2xbJ0NlbGxTdHlsZUNvbmRpdGlvbiddO1xyXG4gICAgICBsZXQgY29uZGl0aW9uUmVzdWx0ID0gJyc7XHJcblxyXG4gICAgICBjb25kaXRpb25IaWdobGlnaHRjb2wuZm9yRWFjaChkYXRhID0+IHtcclxuICAgICAgICBpZiAoZGF0YVsnVmFsdWUnXSA9PSBjb2xWYWx1ZSkge1xyXG4gICAgICAgICAgaWYgKGRhdGFbJ0JhY2tncm91bmRDb2xvciddKSB7XHJcbiAgICAgICAgICAgIGNvbmRpdGlvblJlc3VsdCA9ICdiYWNrZ3JvdW5kLWNvbG9yOicgKyBkYXRhWydCYWNrZ3JvdW5kQ29sb3InXSArICc7JztcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpZiAoZGF0YVsnQ29sb3InXSkge1xyXG4gICAgICAgICAgICBjb25kaXRpb25SZXN1bHQgKz0gJ2NvbG9yOicgKyBkYXRhWydDb2xvciddICsgJzsnO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGlmIChkYXRhWydTdHlsZUV4cHJlc3Npb24nXSkge1xyXG4gICAgICAgICAgICBjb25kaXRpb25SZXN1bHQgKz0gZGF0YVsnU3R5bGVFeHByZXNzaW9uJ107XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIHJldHVybiBjb25kaXRpb25SZXN1bHQ7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICAvLyNyZWdpb24gT25jZWxsIGNsaWNrIGhhbmRsaW5nXHJcbiAgLy8gMS4gaW5DZWxsIEVkaXRcclxuICAvLyAyLiBPbkl0ZW1DbGlja1xyXG4gIC8vIDMuIE5hdmlnYXRlIHRvIEZvcm0gUGFnZVxyXG4gIC8vIDQuIFNob3cgRm9ybSBQYWdlIGluIHRoZSBzYW1lIHBhZ2UgKERFQyBhbmQgRHJhd2VyKVxyXG4gIHB1YmxpYyBjZWxsQ2xpY2tIYW5kbGVyKGV2ZW50OiBDZWxsQ2xpY2tFdmVudCkge1xyXG4gICAgY29uc3QgZGlzYWJsZUFsbENvbHVtbkNlbGxDbGlja0hhbmRsZXIgPSB0aGlzLmRhdGEuRGlzYWJsZUNlbGxDbGlja0hhbmRsZXIgPyB0aGlzLmRhdGEuRGlzYWJsZUNlbGxDbGlja0hhbmRsZXIgOiBmYWxzZTtcclxuICAgIGNvbnN0IGlzQ29tbWFuZENvbHVtbiA9IGV2ZW50LmNvbHVtbi5jb25zdHJ1Y3Rvci5uYW1lID09ICdDb21tYW5kQ29sdW1uQ29tcG9uZW50JyA/IHRydWUgOiBmYWxzZTtcclxuXHJcbiAgICBpZiAodGhpcy50b29sdGlwRGlyKSB7XHJcbiAgICAgIHRoaXMudG9vbHRpcERpci5oaWRlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFkaXNhYmxlQWxsQ29sdW1uQ2VsbENsaWNrSGFuZGxlciAmJiAhaXNDb21tYW5kQ29sdW1uKSB7XHJcbiAgICAgIGNvbnN0IGluQ2VsbEVkaXRhYmxlID0gdGhpcy5kYXRhLkluQ2VsbEVkaXRhYmxlID8gdGhpcy5kYXRhLkluQ2VsbEVkaXRhYmxlIDogZmFsc2U7XHJcbiAgICAgIGlmIChpbkNlbGxFZGl0YWJsZSkge1xyXG4gICAgICAgIHRoaXMuZWRpdGFibGVDb2x1bW5zID0gdGhpcy5jb2x1bW5zLmZpbHRlcihzID0+IHMuaXNFZGl0YWJsZUluRGF0YUl0ZW0gPT09IHRydWUpO1xyXG4gICAgICAgIGlmICghIXRoaXMuZWRpdGFibGVDb2x1bW5zKSB7XHJcbiAgICAgICAgICB0aGlzLmVkaXRhYmxlQ29sdW1ucy5tYXAocyA9PiBldmVudC5zZW5kZXIuZWRpdENlbGwoZXZlbnQucm93SW5kZXgsIGV2ZW50LmNvbHVtbkluZGV4LCB0aGlzLmNyZWF0ZUZvcm1Hcm91cChldmVudC5kYXRhSXRlbSwgcy5maWVsZCkpKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJjZWxsQ2xpY2sgZXZlbnQ6IFwiLCBldmVudCk7XHJcbiAgICAgICAgLy90aGlzLmNhY2hlU2VydmljZS5zZXQoJ2xhc3RDbGlja2VkR3JpZFJlY29yZCcsIGV2ZW50KTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuZGF0YS5Pbkl0ZW1DbGljaykge1xyXG4gICAgICAgICAgY29uc3QgZnVuYyA9IFpDb21wb25lbnRIZWxwZXIuZ2V0R3JvdXBFdmFsVmFsdWUuY2FsbCh0aGlzLCB0aGlzLmRhdGEuT25JdGVtQ2xpY2spO1xyXG4gICAgICAgICAgaWYgKHR5cGVvZiBmdW5jID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNhbGxGdW5jID0gZnVuYy5iaW5kKHRoaXMuZ3JvdXAuY3RybFNjb3BlKTtcclxuICAgICAgICAgICAgY2FsbEZ1bmMoZXZlbnQpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIC8vIHN0b3JlIGNsaWNrZWQgaWQgYW5kIGFjdGlvbiBhcyBlZGl0IHRvIHRoZSBzZXNzaW9uIHN0b3JhZ2VcclxuICAgICAgICAgIC8vIE9uSXRlbUNsaWNrLCBwcm9qZWN0IGhhdmUgdG8gc2V0IHRoZW1zZWxmLlxyXG4gICAgICAgICAgdGhpcy5tYWluU2VydmljZS5zZXROYXZpZ2F0aW9uUGFyYW1zKFtldmVudC5kYXRhSXRlbS5JZCwgJ2VkaXQnXSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmVkaXRNb2RlbChldmVudC5kYXRhSXRlbSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBlZGl0Q2VsbENsb3NlSGFuZGxlcihhcmdzOiBhbnkpIHtcclxuICAgIGNvbnN0IHsgZm9ybUdyb3VwLCBkYXRhSXRlbSB9ID0gYXJncztcclxuICAgIGlmICghZm9ybUdyb3VwLnZhbGlkKSB7XHJcbiAgICAgIGFyZ3MucHJldmVudERlZmF1bHQoKTtcclxuICAgIH0gZWxzZSBpZiAoZm9ybUdyb3VwLmRpcnR5KSB7XHJcbiAgICAgIHRoaXMuZWRpdGFibGVDb2x1bW5zID0gdGhpcy5jb2x1bW5zLmZpbHRlcihzID0+IHMuaXNFZGl0YWJsZUluRGF0YUl0ZW0gPT09IHRydWUpO1xyXG4gICAgICB0aGlzLmVkaXRhYmxlQ29sdW1ucy5tYXAocyA9PlxyXG4gICAgICAgIE9iamVjdC5hc3NpZ24oZGF0YUl0ZW0sIHsgW3MuZmllbGRdOiBmb3JtR3JvdXAudmFsdWVbcy5maWVsZF0gfSkpO1xyXG4gICAgICB0aGlzLm15U2VsZWN0aW9uLm1hcChzID0+IChzLklkID09PSBkYXRhSXRlbS5JZCkgPyBPYmplY3QuYXNzaWduKHMsIGRhdGFJdGVtKSA6IG51bGwpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIG9uTmF2aWdhdGVUbyhldmVudDogYW55LCBjbGlja0FjdGlvbjogYW55LCByb3dEYXRhOiBhbnksIGNlbGxEYXRhOiBzdHJpbmcpIHtcclxuICAgIC8vIGNvbnN0IG4gPSBjb2xTZXR0aW5nLm5hdmlnYXRlVG8ucmVwbGFjZSgnLzppZCcsIGNlbGxEYXRhKTtcclxuICAgIGNvbnN0IG4gPSBaQ29tcG9uZW50SGVscGVyLmdldEdyb3VwRXZhbFZhbHVlLmNhbGwodGhpcywgY2xpY2tBY3Rpb24uQ2xpY2spO1xyXG4gICAgaWYgKG4pIHtcclxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgIHRoaXMuZ3JvdXAuc3ViamVjdC5uZXh0KHtcclxuICAgICAgICB0eXBlOiAnemdyaWQtb25OYXZpZ2F0ZVRvJyxcclxuICAgICAgICB0YXJnZXQ6IGNsaWNrQWN0aW9uLkNsaWNrLFxyXG4gICAgICAgIHJvd0RhdGE6IHJvd0RhdGEsXHJcbiAgICAgICAgZGF0YTogY2VsbERhdGFcclxuICAgICAgfSBhcyBaQ29tcG9uZW50T3V0cHV0RXZlbnQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBlZGl0TW9kZWwoZGF0YUl0ZW06IGFueSkge1xyXG4gICAgaWYgKHRoaXMuZGF0YS5FZGl0Q2xpY2tVUkwpIHtcclxuICAgICAgLy8gRWRpdCBpbmNlbGwgZmllbGRcclxuICAgICAgY29uc3QgY29sRmllbGRzID0gWkNvbXBvbmVudEhlbHBlci5nZXRHcm91cFZhbHVlKHRoaXMuZGF0YS5Db2x1bW5GaWVsZHMsIHRoaXMuZ3JvdXApO1xyXG4gICAgICB0aGlzLmdyb3VwLnN1YmplY3QubmV4dCh7XHJcbiAgICAgICAgdHlwZTogXCJ6Z3JpZC1jZWxsQ2xpY2tcIixcclxuICAgICAgICB0YXJnZXQ6IHRoaXMuZGF0YS5FZGl0Q2xpY2tVUkwsXHJcbiAgICAgICAgZGF0YTogZGF0YUl0ZW0sXHJcbiAgICAgICAgY29sdW1uRmllbGRzJDogY29sRmllbGRzXHJcbiAgICAgIH0gYXMgWkNvbXBvbmVudE91dHB1dEV2ZW50KTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHRoaXMuZGF0YVsnQ29udGFpbmVyRm9ybSddKSB7XHJcbiAgICAgIHRoaXMuc2hvd0Zvcm1QYWdlLmVtaXQodHJ1ZSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW3RoaXMuZ3JvdXAuZWRpdE1vZGVsVVJMXSwge1xyXG4gICAgICAgIHJlbGF0aXZlVG86IHRoaXMuYWN0aXZhdGVkUm91dGUsXHJcbiAgICAgICAgLy9za2lwTG9jYXRpb25DaGFuZ2U6IGZhbHNlXHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgLy8vLyBXaGVuIGNsaWNrZWQgcm91dGUgdG8gcGFnZVxyXG4gICAgICAvL3RoaXMucm91dGVyLm5hdmlnYXRlKFt0aGlzLmdyb3VwLmVkaXRNb2RlbFVSTCwgZGF0YUl0ZW0uSWQsICdlZGl0J10sIHtcclxuICAgICAgLy8gIHJlbGF0aXZlVG86IHRoaXMuYWN0aXZhdGVkUm91dGVcclxuICAgICAgLy99KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBvbkJ0bkNsaWNrKGV2ZW50OiBhbnksIGNvbFNldHRpbmc6IGFueSwgcm93RGF0YTogYW55LCBjZWxsRGF0YTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLm9uTmF2aWdhdGVUbyhldmVudCwgY29sU2V0dGluZywgcm93RGF0YSwgY2VsbERhdGEpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjcmVhdGVGb3JtR3JvdXAoZGF0YUl0ZW06IGFueSwgZmllbGROYW1lOiBhbnkpOiBGb3JtR3JvdXAge1xyXG4gICAgcmV0dXJuIHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe1xyXG4gICAgICBbZmllbGROYW1lXTogZGF0YUl0ZW1bZmllbGROYW1lXVxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICAvLyNyZWdpb24gSGVscGVyIGZ1bmN0aW9uc1xyXG4gIHB1YmxpYyBnZXRDbGFzcyhkYXRhSXRlbTogYW55LCBjb2w6IGFueSkge1xyXG4gICAgbGV0IG5nQ2xhc3MgPSBcImdyaWRDZWxsIFwiO1xyXG4gICAgaWYgKGNvbC5maWVsZFR5cGUgPT09ICdudW1iZXInIHx8IGNvbC5maWVsZFR5cGUgPT09ICdjdXJyZW5jeScgfHwgY29sLmZpZWxkVHlwZSA9PT0gJ3pudW1lcmljJykge1xyXG4gICAgICBuZ0NsYXNzICs9IFwicmlnaHRBbGlnbmVkIFwiO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChkYXRhSXRlbVtjb2wuZmllbGQgKyAnX0NsYXNzJ10pIHtcclxuICAgICAgbmdDbGFzcyArPSBkYXRhSXRlbVtjb2wuZmllbGQgKyAnX0NsYXNzJ10gKyBcIiBcIjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoY29sLkNsYXNzKSB7XHJcbiAgICAgIG5nQ2xhc3MgKz0gY29sLkNsYXNzICsgXCIgXCI7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGNvbC5Qb3BPdmVyQ29udGVudCkge1xyXG4gICAgICBuZ0NsYXNzICs9IFwiIHdpdGhQb3BvdmVySW5HcmlkXCI7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG5nQ2xhc3M7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0Rm9ybWF0KGNvbDogYW55LCBkZWZhdWx0Rm9ybWF0PzogYW55KSB7XHJcbiAgICBsZXQgZm9ybWF0ID0gXCJcIjtcclxuICAgIGlmIChjb2wuRm9ybWF0T3B0aW9ucyA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIGZvcm1hdCA9IGRlZmF1bHRGb3JtYXQgPyBkZWZhdWx0Rm9ybWF0IDogXCJcIjtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IGZvcm1hdEFyciA9IGNvbC5Gb3JtYXRPcHRpb25zLnNwbGl0KFwiLlwiKVxyXG4gICAgICBsZXQgZHAgPSAwO1xyXG5cclxuICAgICAgaWYgKGZvcm1hdEFyci5sZW5ndGggPiAxKSB7XHJcbiAgICAgICAgZHAgPSBmb3JtYXRBcnJbMV0ubGVuZ3RoO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoZHAgIT09IDApIHtcclxuICAgICAgICBmb3JtYXQgPSBcIjEuXCIgKyBkcCArIFwiLVwiICsgZHA7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBmb3JtYXQ7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYWxsUmVzdWx0cygpOiBPYnNlcnZhYmxlPEV4Y2VsRXhwb3J0RGF0YT4ge1xyXG4gICAgY29uc3QgZ3JpZENvbnRyb2wgPSB0aGlzLnpncmlkIGFzIFpHcmlkO1xyXG4gICAgY29uc3QgZ3JpZENvbXBvbmVudCA9IHRoaXMuemdyaWQuZ3JpZCBhcyBHcmlkQ29tcG9uZW50O1xyXG4gICAgY29uc3QgZGF0YSA9IGdyaWRDb21wb25lbnQuZGF0YSBhcyBHcmlkRGF0YVJlc3VsdDtcclxuXHJcbiAgICBjb25zdCBwYWdpbmF0aW9uQXBpUG9zdFVybCA9IGdyaWRDb250cm9sLnBhZ2luYXRpb25BcGlQb3N0VXJsO1xyXG5cclxuICAgIC8vIE5lZWQgdG8gY2xvbmUsIGlmIG5vdCB3aWxsIGFmZmVjdCB0aGUgZ3JpZCBwYXJhbXMuXHJcbiAgICBjb25zdCBwYXJhbXMgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLnBhcmFtcyk7XHJcbiAgICBwYXJhbXMucGFnZU5vID0gMDtcclxuICAgIHBhcmFtcy5wYWdlU2l6ZSA9IGRhdGEudG90YWw7XHJcblxyXG4gICAgcmV0dXJuIHRoaXMud2ViQXBpU2VydmljZS5odHRwUG9zdCQocGFnaW5hdGlvbkFwaVBvc3RVcmwsIHBhcmFtcykucGlwZShcclxuICAgICAgbWFwKChkYXRhOiBhbnkpID0+IHtcclxuICAgICAgICBjb25zdCByZXN1bHQ6IEV4Y2VsRXhwb3J0RGF0YSA9IHtcclxuICAgICAgICAgIGRhdGE6IHByb2Nlc3MoZGF0YS5kYXRhU2V0LCB7fSkuZGF0YVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHJlZnJlc2hHcmlkKGV2ZW50OiBaQ29tcG9uZW50T3V0cHV0RXZlbnQsIGdyb3VwOiBaR3JvdXAsIG1lOiBhbnkpIHtcclxuICAgIGNvbnN0IF9ncmlkT3B0aW9uU2VnbWVudCA9IGV2ZW50LnRhcmdldC50cmltKCkuc3BsaXQoJy4nKTtcclxuICAgIGNvbnN0IF9ncmlkT3B0aW9uID0gX2dyaWRPcHRpb25TZWdtZW50WzFdO1xyXG4gICAgaWYgKF9ncmlkT3B0aW9uKSB7XHJcbiAgICAgIGNvbnN0IHpncmlkQ29udHJvbCA9IGdyb3VwW19ncmlkT3B0aW9uXSBhcyBaR3JpZDtcclxuICAgICAgaWYgKHpncmlkQ29udHJvbCkge1xyXG4gICAgICAgIHpncmlkQ29udHJvbC5nZXREYXRhKCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ1VuYWJsZSB0byBmaW5kIGdyaWQgdmFsdWU6ICcgKyBfZ3JpZE9wdGlvbik7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKCdJbnZhbGlkIHJlZnJlc2hHcmlkIGV2ZW50OiAnLCBldmVudCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcmVmcmVzaERhdGEoKSB7XHJcbiAgICB0aGlzLmdldERhdGEoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBjbGVhckRhdGEoKSB7XHJcbiAgICB0aGlzLnpncmlkLmNsZWFyRGF0YSgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNob3dUb29sdGlwKGU6IE1vdXNlRXZlbnQpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmRhdGEuSXNTaG93VG9vbFRpcCA9PT0gZmFsc2UpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgY29uc3QgZWxlbWVudCA9IGUudGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xyXG5cclxuICAgIGxldCBpc0NvbW1hbmRDb2x1bW4gPSBmYWxzZTtcclxuICAgIGVsZW1lbnQuY2xhc3NMaXN0LmZvckVhY2goZGF0YSA9PiB7XHJcbiAgICAgIGlmIChkYXRhID09ICdrLWNvbW1hbmQtY2VsbCcpIHtcclxuICAgICAgICBpc0NvbW1hbmRDb2x1bW4gPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICBpZiAoIWlzQ29tbWFuZENvbHVtbiAmJlxyXG4gICAgICAoXHJcbiAgICAgICAgKChlbGVtZW50Lm5vZGVOYW1lID09PSAnVEQnIHx8IGVsZW1lbnQubm9kZU5hbWUgPT09ICdUSCcpICYmIGVsZW1lbnQub2Zmc2V0V2lkdGggPCAoZWxlbWVudC5zY3JvbGxXaWR0aCkpIHx8XHJcbiAgICAgICAgKGVsZW1lbnQubm9kZU5hbWUgPT09ICdTUEFOJyAmJiBlbGVtZW50LmNsYXNzTGlzdCAmJiBlbGVtZW50LmNsYXNzTGlzdC5sZW5ndGggPiAwICYmIGVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKCdncmlkLWNlbGwtZGF0YScpICYmIGVsZW1lbnQucGFyZW50RWxlbWVudC5vZmZzZXRXaWR0aCA8IChlbGVtZW50LnBhcmVudEVsZW1lbnQuc2Nyb2xsV2lkdGgpKSlcclxuICAgICkge1xyXG4gICAgICB0aGlzLnRvb2x0aXBEaXIudG9nZ2xlKGVsZW1lbnQpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMudG9vbHRpcERpci5oaWRlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcm93U2VsZWN0aW9uS2V5KGNvbnRleHQ6IFJvd0FyZ3MpOiBhbnkge1xyXG4gICAgcmV0dXJuIGNvbnRleHQuZGF0YUl0ZW07XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0U2VsZWN0ZWRWYWx1ZXMoKTogYW55IHtcclxuICAgIHJldHVybiB0aGlzLm15U2VsZWN0aW9uO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldERhdGEoKSB7XHJcbiAgICBpZiAodGhpcy56Z3JpZCkge1xyXG4gICAgICB0aGlzLmlubGluZUVkaXRlZEZvcm1Hcm91cHMgPSB7fTtcclxuICAgICAgdGhpcy56Z3JpZC5nZXREYXRhQmluZGluZygpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGNvbnNvbGUud2FybigndGhpcy56Z3JpZCBpcyB1bmRlZmluZWQuJyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0R3JpZERhdGEoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5pc1VzZUxvY2FsRGF0YSgpID8gKHRoaXMuemdyaWQuZGF0YSB8fCB0aGlzLnpncmlkLm9yaWdpbmFsRGF0YSkgOiAodGhpcy56Z3JpZC5ncmlkLmRhdGEgJiYgdGhpcy56Z3JpZC5ncmlkLmRhdGEuZGF0YSA/IHRoaXMuemdyaWQuZ3JpZC5kYXRhLmRhdGEgOiBbXSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0RGF0YSA9IChnRGF0YTogYW55KSA9PiB7XHJcbiAgICBpZiAodGhpcy56Z3JpZCkge1xyXG4gICAgICBpZiAodGhpcy5pc1VzZUxvY2FsRGF0YSgpKSB7XHJcbiAgICAgICAgdGhpcy56Z3JpZC5kYXRhID0gZ0RhdGE7XHJcbiAgICAgICAgaWYgKCF0aGlzLmRhdGEuRGlzYWJsZUF1dG9BcHBlbmRHcmlkRGF0ZUZpbHRlckNvbCkge1xyXG4gICAgICAgICAgdGhpcy5zZXREYXRlQ29sRm9yRmlsdGVyaW5nKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMuemdyaWQuZ3JpZC5kYXRhID0ge1xyXG4gICAgICAgICAgZGF0YTogZ0RhdGEsXHJcbiAgICAgICAgICB0b3RhbDogZ0RhdGEudG90YWxDb3VudFxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICB0aGlzLnNldHVwR3JpZFdpdGhJbmxpbmVFZGl0KCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgY29uc29sZS5sb2coJ3pncmlkIGlzIG51bGwgZm9yIHNldERhdGEuJyk7XHJcbiAgICAgIGNvbnNvbGUubG9nKHRoaXMuZGF0YSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0SGVhZGVyVGV4dChjb2x1bW5OYW1lOiBzdHJpbmcsIG5ld0hlYWRlclRpdGxlOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IGdyaWRDb2x1bW5zID0gdGhpcy5jb2x1bW5zO1xyXG4gICAgZ3JpZENvbHVtbnMuZm9yRWFjaCgoY29sOiBhbnkpID0+IHtcclxuICAgICAgaWYgKGNvbC5OYW1lID09PSBjb2x1bW5OYW1lKSB7XHJcbiAgICAgICAgY29sLnRpdGxlID0gbmV3SGVhZGVyVGl0bGU7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHRyYWNrQnkoaW5kZXg6IG51bWJlciwgaXRlbTogR3JpZEl0ZW0pOiBhbnkge1xyXG4gICAgLy9jb25zb2xlLmxvZyhpdGVtLmRhdGFbJ0lkJ10gfHwgaW5kZXgpO1xyXG4gICAgcmV0dXJuIGluZGV4O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpc1VzZUxvY2FsRGF0YSgpOiBib29sZWFuIHtcclxuICAgIGlmICh0aGlzLmRhdGEuRGF0YVNvdXJjZSkge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAvL3JldHVybiBaQ29tcG9uZW50SGVscGVyLmlzTnVsbFVuZGVmaW5lZEVtcHR5KHRoaXMuZGF0YS5SZXNvdXJjZVVSTCk7XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICAvLyNyZWdpb24gZ3JpZCBzZXR1cFxyXG4gIHByaXZhdGUgc2V0dXBHcmlkQ29tcG9uZW50QXR0cmlidXRlcygpIHtcclxuICAgIC8vIEdyaWQgZGVmYXVsdCBzZXR0aW5nXHJcbiAgICB0aGlzLmdyaWRUaXRsZSA9IHRoaXMuZGF0YS5UaXRsZTtcclxuICAgIHRoaXMuY29sdW1ucyA9IFtdO1xyXG4gICAgdGhpcy5wYWdlU2l6ZXMgPSBbNSwgMTAsIDIwLCA1MCwgMTAwLCAyMDAsIDUwMF07XHJcbiAgICB0aGlzLnByZXZpb3VzTmV4dCA9IHRoaXMuZGF0YVsnRW5hYmxlUHJldmlvdXNOZXh0QnV0dG9uJ10gfHwgZmFsc2U7XHJcblxyXG4gICAgLy8gW01vYmlsZV0gRGlzYWJsZSBwYWdlIHNpemVzIGlmIFBhZ2VTaXplcyBpcyBleHBsaWNpdGx5IHNldCB0byBmYWxzZSBvciBvbiBhIG1vYmlsZSBzY3JlZW4uXHJcbiAgICBpZiAodGhpcy5kYXRhLlBhZ2VTaXplcyA9PT0gZmFsc2UgfHwgWkNvbXBvbmVudEhlbHBlci5pc01vYmlsZVNjcmVlbigpKSB7XHJcbiAgICAgIHRoaXMucGFnZVNpemVzID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQ29uZmlndXJlIHBhZ2luYXRpb24gc2V0dGluZ3MuXHJcbiAgICB0aGlzLnBhZ2VhYmxlID0gdGhpcy5kYXRhLnBhZ2VBYmxlICE9IHVuZGVmaW5lZCA/IHRoaXMuZGF0YS5wYWdlQWJsZSA6IHtcclxuICAgICAgcmVzcG9uc2l2ZTogdHJ1ZSxcclxuICAgICAgYnV0dG9uQ291bnQ6IDMsXHJcbiAgICAgIHBhZ2VTaXplczogdGhpcy5wYWdlU2l6ZXMsXHJcbiAgICAgIHByZXZpb3VzTmV4dDogdGhpcy5wcmV2aW91c05leHQsXHJcbiAgICB9O1xyXG5cclxuICAgIC8vIENvbmZpZ3VyZSBncmlkIHNlbGVjdGlvbiBvcHRpb25zIGlmIHNldCBTZWxlY3RPcHRpb25zIGluIGZpZWxkIGVsZW1lbnQgYXR0cmlidXRlLlxyXG4gICAgaWYgKHRoaXMuZGF0YS5TZWxlY3RPcHRpb25zKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0YWJsZVNldHRpbmdzID0ge1xyXG4gICAgICAgIC8vIGNoZWNrYm94T25seTogdGhpcy5jaGVja2JveE9ubHksXHJcbiAgICAgICAgbW9kZTogdGhpcy5kYXRhLlNlbGVjdE9wdGlvbnMudG9Mb3dlckNhc2UoKSA9PT0gJ3NpbmdsZScgPyAnc2luZ2xlJyA6ICdtdWx0aXBsZSdcclxuICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBCaW5kIGNvbXBvbmVudCB0byBncm91cCB1c2luZyB0aGUgcHJvdmlkZWQgVmFsdWUgc2V0IGluIGZpZWxkIGVsZW1lbnQgYXR0cmlidXRlLlxyXG4gICAgaWYgKHRoaXMuZGF0YS5WYWx1ZS5zdGFydHNXaXRoKCdncm91cC4nKSkge1xyXG4gICAgICB0aGlzLmdyb3VwW3RoaXMuZGF0YS5WYWx1ZS5zbGljZSg2KV0gPSB0aGlzO1xyXG4gICAgfSBcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0dXBTdWJzY3JpcHRpb25Gb3JHcmlkU3ViamVjdCgpIHtcclxuICAgIC8vIFVuc3Vic2NyaWJlIGZyb20gYW55IGV4aXN0aW5nIHN1YnNjcmlwdGlvbnMgdG8gYXZvaWQgbWVtb3J5IGxlYWtzLlxyXG4gICAgaWYgKHRoaXMuc3Vic2NyaXB0aW9uKSB7XHJcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gRnJvbSBoZXJlIHdpbGwgY2FsbCB6Z3JpZC5iaW5kaW5nLmRpcmVjdGl2ZS5cclxuICAgIC8vIFN1YnNjcmliZSB0byBnZXQgZnJvbSBkaXJlY3RpdmUgYW5kIHNldCB0byBjb21wb25lbnQgXHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbiA9IHRoaXMuZ3JpZFN1YmplY3QucGlwZShcclxuICAgICAgdGFwKGdyaWREaXJlY3RpdmUgPT4ge1xyXG4gICAgICAgIC8vIFNldCB0aGUgemdyaWQgcHJvcGVydHkgYmFzZWQgb24gdGhlIGVtaXR0ZWQgZ3JpZERpcmVjdGl2ZS5cclxuICAgICAgICB0aGlzLnpncmlkID0gZ3JpZERpcmVjdGl2ZTtcclxuICAgICAgIFxyXG4gICAgICAgIC8vIFVwZGF0ZSB0aGUgY29sdW1ucyBwcm9wZXJ0eSB3aXRoIHRoZSBncmlkIGNvbHVtbnMgZnJvbSBncmlkRGlyZWN0aXZlLlxyXG4gICAgICAgIHRoaXMuY29sdW1ucyA9IHRoaXMuemdyaWQuZ3JpZFNldHRpbmcuY29sdW1ucztcclxuXHJcbiAgICAgICAgLy8gQ2hlY2sgaWYgYXV0b21hdGljIGFwcGVuZGluZyBvZiBhIGdyaWQgZGF0ZSBmaWx0ZXIgY29sdW1uIGlzIG5vdCBkaXNhYmxlZC5cclxuICAgICAgICBpZiAoIXRoaXMuZGF0YS5EaXNhYmxlQXV0b0FwcGVuZEdyaWREYXRlRmlsdGVyQ29sKSB7XHJcbiAgICAgICAgICB0aGlzLnNldERhdGVDb2xGb3JGaWx0ZXJpbmcoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIFNldCB1cCBncmlkIHdpdGggaW5saW5lIGVkaXRpbmcuXHJcbiAgICAgICAgdGhpcy5zZXR1cEdyaWRXaXRoSW5saW5lRWRpdCgpO1xyXG5cclxuICAgICAgICAvLyBTZXQgdXAgYSBwb3BvdmVyIGZlYXR1cmUgYmFzZWQgb24gY29sdW1ucyBhbmQgZ3JpZCBkYXRhLlxyXG4gICAgICAgIHRoaXMuc2V0dXBQb3BvdmVyRmVhdHVyZSh0aGlzLmNvbHVtbnMsIHRoaXMuZ2V0R3JpZERhdGEoKSk7XHJcbiAgICAgIH0pLFxyXG4gICAgICBzd2l0Y2hNYXAoKCkgPT4ge1xyXG4gICAgICAgIC8vIENoZWNrIGlmIGNvbHVtbiBoZWFkZXJzIGhhdmUgYWxyZWFkeSBiZWVuIHRyYW5zbGF0ZWQuXHJcbiAgICAgICAgaWYgKHRoaXMuaXNDb2x1bW5IZWFkZXJUcmFuc2xhdGVkKSB7XHJcbiAgICAgICAgICByZXR1cm4gb2Yoe30pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gTWFyayBjb2x1bW4gaGVhZGVycyBhcyB0cmFuc2xhdGVkIGFuZCBwZXJmb3JtIHRoZSB0cmFuc2xhdGlvbi5cclxuICAgICAgICB0aGlzLmlzQ29sdW1uSGVhZGVyVHJhbnNsYXRlZCA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHN1cGVyLnRyYW5zbGF0ZUNvbHVtbkhlYWRlcih0aGlzLmNvbHVtbnMpO1xyXG4gICAgICB9KVxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzYXZlR3JpZFNldHRpbmdzKCk6IHZvaWQgeyAgXHJcbiAgICBjb25zdCBncmlkU3RhdGVMb2dpYyA9IHRoaXMuZ3JpZFNlcnZpY2UuZ2V0R3JpZFN0YXRlTG9naWModGhpcy5kYXRhKTsgXHJcbiAgICBjb25zdCBjYWNoZU5hbWUgPSB0aGlzLmdyaWRTZXJ2aWNlLmdldEdyaWRTdGF0ZUNhY2hlU3RvcmFnZUtleShHcmlkU2V0dGluZ1R5cGUuU2F2ZWRTZXR0aW5nLCB0aGlzLmRhdGEpO1xyXG4gICBcclxuICAgIHRoaXMuemdyaWQuZ3JpZFNldHRpbmcuY29sdW1uQ29uZmlndXJhdGlvbnMgPSBaQ29tcG9uZW50SGVscGVyLmdldEdyaWRDb2x1bW5zQ29uZmlnKHRoaXMuemdyaWQuZ3JpZC5jb2x1bW5zKTtcclxuXHJcbiAgICBjb25zdCBzZXR0aW5nQ29uZmlnOiBaR3JpZFNldHRpbmdzID0ge1xyXG4gICAgICBjb2x1bW5Db25maWd1cmF0aW9uczogdGhpcy56Z3JpZC5ncmlkU2V0dGluZy5jb2x1bW5Db25maWd1cmF0aW9uc1xyXG4gICAgfTtcclxuXHJcbiAgICBpZiAoZ3JpZFN0YXRlTG9naWMgPT09IEdyaWRTdGF0ZUxvZ2ljVHlwZS5TZXR0aW5nT25seSApIHtcclxuICAgICAgc2V0dGluZ0NvbmZpZy5ncmlkU3RhdGUgPSB0aGlzLnpncmlkLmdyaWRTZXR0aW5nLmdyaWRTdGF0ZTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBncmlkU2V0dGluZyA9IEpTT04uc3RyaW5naWZ5KHNldHRpbmdDb25maWcpO1xyXG4gICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbShjYWNoZU5hbWUsIGdyaWRTZXR0aW5nKTtcclxuICAgICBcclxuICAgIGNvbnN0IGpzb25DYWNoZTogSnNvbkNhY2hlID0ge1xyXG4gICAgICBGaWxlTmFtZTogY2FjaGVOYW1lLFxyXG4gICAgICBKc29uQ29udGVudDogZ3JpZFNldHRpbmdcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLm9mZmxpbmVEYXRhYmFzZVNlcnZpY2Uuc2F2ZUpzb25DYWNoZShqc29uQ2FjaGUpLnN1YnNjcmliZSgpOyBcclxuXHJcbiAgICB0aGlzLnNob3dIaWRlUmVzdG9yZUdyaWRTZXR0aW5nQnV0dG9uKCk7XHJcbiAgICB0aGlzLnRvYXN0U2VydmljZS5zaG93KCdHcmlkIFNldHRpbmcgU2F2ZWQnLCBcInRvcFwiLCB0cnVlLCAyMDAwLCAnc3VjY2VzcycpOyBcclxuICB9XHJcbiAgIFxyXG4gIHB1YmxpYyByZXN0b3JlR3JpZFNldHRpbmdzKCkge1xyXG4gICAgdGhpcy5jb2x1bW5zLnNvcnQoKGEsIGIpID0+IGEub3JpZ2luYWxPcmRlckluZGV4IC0gYi5vcmlnaW5hbE9yZGVySW5kZXgpO1xyXG4gICAgdGhpcy5nZW5lcmF0ZUdyaWRDb2x1bW5zKCkuc3Vic2NyaWJlKHJlc3AgPT4ge1xyXG4gICAgICB0aGlzLmdldERhdGEoKTtcclxuICAgIH0pO1xyXG4gICAgY29uc3QgY2FjaGVOYW1lID0gdGhpcy5ncmlkU2VydmljZS5nZXRHcmlkU3RhdGVDYWNoZVN0b3JhZ2VLZXkoR3JpZFNldHRpbmdUeXBlLlNhdmVkU2V0dGluZywgdGhpcy5kYXRhKTtcclxuICAgIHNlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0oY2FjaGVOYW1lKTtcclxuXHJcbiAgICB0aGlzLnNob3dIaWRlUmVzdG9yZUdyaWRTZXR0aW5nQnV0dG9uKCk7XHJcblxyXG4gICAgdGhpcy5vZmZsaW5lRGF0YWJhc2VTZXJ2aWNlLnJlbW92ZUpzb25DYWNoZSh7XHJcbiAgICAgIEZpbGVOYW1lOiBjYWNoZU5hbWVcclxuICAgIH0pLnN1YnNjcmliZSgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdyaWRDYWxsYmFjayhncm91cDogWkdyb3VwKSB7XHJcbiAgICBpZiAodGhpcy5kYXRhWydBZnRlcmxvYWRDYWxsYmFjayddKSB7XHJcbiAgICAgIGNvbnN0IG1lID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcyk7XHJcblxyXG4gICAgICB0aGlzLmdyb3VwLnN1YmplY3QubmV4dCh7XHJcbiAgICAgICAgdHlwZTogXCJ6Z3JpZC1BZnRlcmxvYWRDYWxsYmFja1wiLFxyXG4gICAgICAgIHRhcmdldDogdGhpcy5kYXRhWydBZnRlcmxvYWRDYWxsYmFjayddLFxyXG4gICAgICAgIGRhdGE6IG1lXHJcbiAgICAgIH0gYXMgWkNvbXBvbmVudE91dHB1dEV2ZW50KTtcclxuICAgIH1cclxuICB9XHJcbiAgXHJcbiAgcHJpdmF0ZSBzZXR1cEdyaWRCdXR0b25zKCkge1xyXG4gICAgaWYgKHRoaXMuZGF0YS5HcmlkQnV0dG9uRmllbGROYW1lX1dGIHx8IHRoaXMuZGF0YS5HcmlkQnV0dG9uRmllbGROYW1lKSB7XHJcbiAgICAgIHRoaXMuZ3JpZEJ0biA9IHtcclxuICAgICAgICBSZWFkT25seTogZmFsc2UsXHJcbiAgICAgICAgVmlzaWJsZTogdHJ1ZSxcclxuICAgICAgICBJc1JlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgICBXb3JrZmxvd0NvZGU6IHRoaXMuZGF0YS5HcmlkQnV0dG9uRmllbGROYW1lX1dGLFxyXG4gICAgICAgIFZhbHVlOiB0aGlzLmRhdGEuR3JpZEJ1dHRvbkZpZWxkTmFtZSxcclxuICAgICAgICBUeXBlOiB0aGlzLmRhdGEuR3JpZEJ1dHRvbkZpZWxkTmFtZV9XRiA/IFwiendvcmtmbG93YnV0dG9uc1wiIDogXCJ6YnV0dG9uc1wiXHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnNob3dIaWRlUmVzdG9yZUdyaWRTZXR0aW5nQnV0dG9uKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldERhdGVDb2xGb3JGaWx0ZXJpbmcoKSB7XHJcbiAgICBjb25zdCBncmlkRGF0YSA9IHRoaXMuZ2V0R3JpZERhdGEoKTtcclxuICAgIGlmICh0aGlzLmlzVXNlTG9jYWxEYXRhKCkgJiYgZ3JpZERhdGEgJiYgZ3JpZERhdGEubGVuZ3RoID4gMCkge1xyXG4gICAgICBjb25zdCBkYXRlQ29sID0gT2JqZWN0LmtleXMoZ3JpZERhdGFbMF0pLmZpbHRlcih4ID0+IHguaW5jbHVkZXMoXCJEYXRlXCIpICYmICF4LmVuZHNXaXRoKENvbXBvbmVudENvbnN0YW50LkdyaWRDb2xEYXRlRmlsdGVyU3VmZml4KSk7XHJcbiAgICAgIGlmIChkYXRlQ29sICYmIGRhdGVDb2wubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIGdyaWREYXRhLmZvckVhY2goZGF0YSA9PiB7XHJcbiAgICAgICAgICBkYXRlQ29sLmZvckVhY2goY29sTmFtZSA9PiB7XHJcbiAgICAgICAgICAgIGRhdGFbYCR7Y29sTmFtZX0ke0NvbXBvbmVudENvbnN0YW50LkdyaWRDb2xEYXRlRmlsdGVyU3VmZml4fWBdID0gbmV3IERhdGUoZGF0YVtjb2xOYW1lXSk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzaG93SGlkZVJlc3RvcmVHcmlkU2V0dGluZ0J1dHRvbigpIHsgXHJcbiAgICBpZiAodGhpcy5kYXRhLkNhY2hlSW5mbz8uRW5hYmxlU2F2ZVN0YXRlKSB7XHJcbiAgICAgIGNvbnN0IHNldHRpbmdDYWNoZU5hbWUgPSB0aGlzLmdyaWRTZXJ2aWNlLmdldEdyaWRTdGF0ZUNhY2hlU3RvcmFnZUtleShHcmlkU2V0dGluZ1R5cGUuU2F2ZWRTZXR0aW5nLCB0aGlzLmRhdGEpO1xyXG4gICAgICBjb25zdCBzZXR0aW5nQ2FjaGVWYWx1ZSA9IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oc2V0dGluZ0NhY2hlTmFtZSk7XHJcblxyXG4gICAgICB0aGlzLnNob3dSZXN0b3JlR3JpZFNldHRpbmdCdXR0b24gPSBzZXR0aW5nQ2FjaGVWYWx1ZSA/IHRydWUgOiBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uXHJcbiAgIFxyXG4gIC8vI3JlZ2lvbiBHcmlkIGNvbmZpZ3VyYXRpb24gZnVuY3Rpb25cclxuICBwdWJsaWMgZ3JpZEN1c3RvbUFkZENvbW1hbmQoZ3JvdXA6IFpHcm91cCk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICAvLyBkZWNsYXJlIGJ1dHRvbiBvbmNsaWNrIGV2ZW50IG5hbWUgYmFzZSBvbiBncmlkIG5hbWUgKyBwcmVmaXhcclxuICAgIGNvbnN0IGdyaWRBZGRCdXR0b25FdmVudE5hbWUgPSB0aGlzLmRhdGEuTmFtZSArICdfQ3VzdG9tQWRkQnV0dG9uT25DbGljayc7XHJcbiAgICBpZiAoIXRoaXMuZ3JvdXBbZ3JpZEFkZEJ1dHRvbkV2ZW50TmFtZV0pIHtcclxuICAgICAgcmV0dXJuIG9mKHt9KTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdGhpcy5ncm91cFtncmlkQWRkQnV0dG9uRXZlbnROYW1lXShncm91cCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ3JpZEN1c3RvbVJlc2V0Q29tbWFuZChncm91cDogWkdyb3VwKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIC8vIGRlY2xhcmUgYnV0dG9uIG9uY2xpY2sgZXZlbnQgbmFtZSBiYXNlIG9uIGdyaWQgbmFtZSArIHByZWZpeFxyXG4gICAgY29uc3QgZ3JpZFJlc2V0QnV0dG9uRXZlbnROYW1lID0gdGhpcy5kYXRhLk5hbWUgKyAnX0N1c3RvbVJlc2V0QnV0dG9uT25DbGljayc7XHJcbiAgICBpZiAoIXRoaXMuZ3JvdXBbZ3JpZFJlc2V0QnV0dG9uRXZlbnROYW1lXSkge1xyXG4gICAgICByZXR1cm4gb2Yoe30pO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aGlzLmdyb3VwW2dyaWRSZXNldEJ1dHRvbkV2ZW50TmFtZV0oZ3JvdXApO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdyaWRDdXN0b21SZW1vdmVDb21tYW5kKGRhdGFJdGVtOiBhbnksIHJvd0luZGV4OiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgLy8gZGVjbGFyZSBidXR0b24gb25jbGljayBldmVudCBuYW1lIGJhc2Ugb24gZ3JpZCBuYW1lICsgcHJlZml4XHJcbiAgICBjb25zdCBncmlkUmVzZXRCdXR0b25FdmVudE5hbWUgPSB0aGlzLmRhdGEuTmFtZSArICdfQ3VzdG9tUmVtb3ZlQnV0dG9uT25DbGljayc7XHJcbiAgICBpZiAoIXRoaXMuZ3JvdXBbZ3JpZFJlc2V0QnV0dG9uRXZlbnROYW1lXSkge1xyXG4gICAgICByZXR1cm4gb2Yoe30pO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aGlzLmdyb3VwW2dyaWRSZXNldEJ1dHRvbkV2ZW50TmFtZV0oZGF0YUl0ZW0sIHJvd0luZGV4KTtcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8vI3JlZ2lvbiBJbmxpbmUgRWRpdFxyXG4gIHByaXZhdGUgY3JlYXRlRm9ybUNvbnRyb2xzKGdyaWRDb2xzOiBBcnJheTxhbnk+KSB7XHJcbiAgICBsZXQgY291bnRlckluZGV4ID0gMDtcclxuICAgIC8vIFRvIGZvcmNlIGVsZW1lbnQgdG8gcmViaW5kIGRhdGFcclxuICAgIHRoaXMuaXNJbmxpbmVFZGl0SW5wdXRGaWVsZExvYWRpbmcgPSB0cnVlO1xyXG4gICAgdGhpcy56Z3JpZC5ncmlkLmxvYWRpbmcgPSB0cnVlO1xyXG4gICAgb2YoW10pLnBpcGUoZGVsYXkoMCksIHRhcCgoKSA9PiB7XHJcbiAgICAgIHRoaXMuaW5saW5lRWRpdGVkRm9ybUdyb3VwcyA9IHRoaXMuaW5saW5lRWRpdGVkRm9ybUdyb3VwcyB8fCB7fTtcclxuICAgICAgY29uc3QgZ3JpZERhdGEgPSB0aGlzLmdldEdyaWREYXRhKCk7XHJcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGdyaWREYXRhKSkge1xyXG4gICAgICAgIGdyaWREYXRhLmZvckVhY2goZCA9PiB7XHJcbiAgICAgICAgICBjb25zdCBpdGVtcyA9IHt9O1xyXG4gICAgICAgICAgZ3JpZENvbHMuZm9yRWFjaChjID0+IHtcclxuICAgICAgICAgICAgY29uc3QgaXNWaXNpYmxlID0gWkNvbXBvbmVudEhlbHBlci5pc1Zpc2libGVGb3JtQ29udHJvbCh0aGlzLCBjLmZpZWxkKTtcclxuICAgICAgICAgICAgY29uc3QgaXNSZXF1aXJlZCA9IFpDb21wb25lbnRIZWxwZXIuaXNSZXF1aXJlZEZvcm1Db250cm9sKHRoaXMsIGMuZmllbGQpO1xyXG4gICAgICAgICAgICBjb25zdCB2YWxpZGF0b3JzOiBWYWxpZGF0b3JGbltdID0gWkNvbXBvbmVudEhlbHBlci5nZXRWYWxpZGF0b3JzKGMuZmllbGQsIGlzVmlzaWJsZSwgaXNSZXF1aXJlZCwgdGhpcy5ncm91cCk7XHJcbiAgICAgICAgICAgIGl0ZW1zW2MuZmllbGRdID0gbmV3IEZvcm1Db250cm9sKGRbYy5maWVsZF0sIHZhbGlkYXRvcnMpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICBjb25zdCBmb3JtR3JvdXAgPSBuZXcgRm9ybUdyb3VwKGl0ZW1zKTtcclxuXHJcbiAgICAgICAgICBpZiAoZFtcIklkXCJdKSB7XHJcbiAgICAgICAgICAgIGl0ZW1zW1wiSWRcIl0gPSBpdGVtc1tcIklkXCJdIHx8IG5ldyBGb3JtQ29udHJvbCh7IHZhbHVlOiBkW1wiSWRcIl0sIGRpc2FibGVkOiBmYWxzZSB9KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBkW1wiSWRcIl0gPSBjb3VudGVySW5kZXgrKztcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMuaW5saW5lRWRpdGVkRm9ybUdyb3Vwc1tkW1wiSWRcIl1dID0gZm9ybUdyb3VwO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuaXNJbmxpbmVFZGl0SW5wdXRGaWVsZExvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgdGhpcy56Z3JpZC5ncmlkLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgdGhpcy50ZW1wSW5saW5lRWRpdGVkRm9ybUdyb3VwcyA9IHRoaXMuaW5saW5lRWRpdGVkRm9ybUdyb3VwcztcclxuICAgIH0pKS5zdWJzY3JpYmUoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRJbmxpbmVGaWVsZCh2YWx1ZTogYW55KSB7XHJcbiAgICByZXR1cm4gdGhpcy5jb2x1bW5zLmZpbmQoeCA9PiB4LlZhbHVlID09PSB2YWx1ZSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0SW5saW5lRm9ybShkYXRhOiBhbnksIHJvd0luZGV4OiBudW1iZXIpIHtcclxuICAgIHZhciBrZXkgPSAoZGF0YVtcIklkXCJdIHx8IGRhdGFbXCJJZFwiXSA9PSAwKSA/IGRhdGFbXCJJZFwiXSA6IHJvd0luZGV4O1xyXG4gICAgaWYgKHRoaXMuaXNJbmxpbmVFZGl0SW5wdXRGaWVsZExvYWRpbmcpIHtcclxuICAgICAgcmV0dXJuIHRoaXMudGVtcElubGluZUVkaXRlZEZvcm1Hcm91cHNba2V5XSB8fCB0aGlzLnRlbXBJbmxpbmVFZGl0ZWRGb3JtR3JvdXBzWzBdO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuaW5saW5lRWRpdGVkRm9ybUdyb3Vwc1trZXldO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldEZvcm1Db250cm9sRGF0YSgpOiBhbnlbXSB7XHJcbiAgICBjb25zdCBkYXRhID0gW107XHJcbiAgICBmb3IgKGNvbnN0IGsgb2YgT2JqZWN0LmtleXModGhpcy5pbmxpbmVFZGl0ZWRGb3JtR3JvdXBzKSkge1xyXG4gICAgICBkYXRhLnB1c2godGhpcy5pbmxpbmVFZGl0ZWRGb3JtR3JvdXBzW2tdPy52YWx1ZSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZGF0YTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0dXBHcmlkV2l0aElubGluZUVkaXQoKSB7XHJcbiAgICBpZiAodGhpcy5oYXNJbmxpbmVFZGl0Q29sdW1uKHRoaXMuY29sdW1ucykpIHtcclxuICAgICAgdGhpcy50ZW1wSW5saW5lRWRpdGVkRm9ybUdyb3VwcyA9IHRoaXMuaW5saW5lRWRpdGVkRm9ybUdyb3VwcztcclxuICAgICAgdGhpcy5pbmxpbmVFZGl0ZWRGb3JtR3JvdXBzID0ge307XHJcbiAgICAgIHRoaXMuY3JlYXRlRm9ybUNvbnRyb2xzKHRoaXMuY29sdW1ucy5jb25jYXQodGhpcy5nZW5lcmF0ZUhpZGRlbkNvbHVtbnNGaWVsZCB8fCBbXSkpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGlzSW5saW5lRm9ybUdyb3VwSGFzVmFsdWUoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5pbmxpbmVFZGl0ZWRGb3JtR3JvdXBzICYmIE9iamVjdC5rZXlzKHRoaXMuaW5saW5lRWRpdGVkRm9ybUdyb3VwcykubGVuZ3RoID4gMDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaGFzSW5saW5lRWRpdENvbHVtbihncmlkQ29scyk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIGdyaWRDb2xzICYmIGdyaWRDb2xzLnNvbWUoYyA9PiBjLmlzRWRpdGFibGVJbkdyaWQpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldENlbGxTdHlsZUZvcklubGluZUVkaXQoY29sdW1uRmllbGQ6IFpGaWVsZCwgZGF0YUl0ZW06IGFueSwgcm93SW5kZXg6IG51bWJlcik6IGFueSB7XHJcbiAgICBjb25zdCBmb3JtID0gdGhpcy5nZXRJbmxpbmVGb3JtKGRhdGFJdGVtLCByb3dJbmRleCkgYXMgRm9ybUdyb3VwO1xyXG4gICAgaWYgKCFmb3JtKSB7XHJcbiAgICAgIHJldHVybiB7fTtcclxuICAgIH1cclxuICAgIGNvbnN0IHN0eWxlID0gY29sdW1uRmllbGRbYFN0eWxlMTBgXTtcclxuICAgIGNvbnN0IGZ1bmMgPSBaQ29tcG9uZW50SGVscGVyLmdldEdyb3VwRXZhbFZhbHVlLmNhbGwodGhpcywgc3R5bGUpO1xyXG4gICAgaWYgKHR5cGVvZiBmdW5jID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgIGNvbnN0IGNhbGxGdW5jID0gZnVuYy5iaW5kKHRoaXMuZ3JvdXAuY3RybFNjb3BlKTtcclxuICAgICAgcmV0dXJuIGNhbGxGdW5jKGZvcm0udmFsdWUpO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAodHlwZW9mIGZ1bmMgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgIHJldHVybiBmdW5jO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHN0eWxlO1xyXG4gIH1cclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgLy8jcmVnaW9uIEV2ZW50XHJcbiAgcHVibGljIGJlZm9yZUdyaWRHZXREYXRhKGdyb3VwOiBaR3JvdXAsIG1lOiBhbnkpIHtcclxuICAgIGNvbnNvbGUud2FybihcImJlZm9yZURhdGFCaW5kaW5nIHRyaWdnZXJlZFwiKTtcclxuICAgIGlmICghZ3JvdXAuYmVmb3JlR3JpZEdldERhdGEpIHtcclxuICAgICAgY29uc29sZS53YXJuKFwiZ3JvdXAuYmVmb3JlRGF0YUJpbmRpbmcgaXMgdW5kZWZpbmVkXCIpO1xyXG4gICAgICByZXR1cm4gb2YodHJ1ZSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZ3JvdXAuYmVmb3JlR3JpZEdldERhdGEoZ3JvdXAsIG1lKTtcclxuICB9XHJcbiAgICBcclxuICAvLyBTb3VyY2U6IGh0dHBzOi8vd3d3LnRlbGVyaWsuY29tL2ZvcnVtcy9rZW5kby1hbmd1bGFyLWdyaWQtYmxhbmstc3BhY2UtaW4tdGhlLWVuZC13aGVuLXlvdS1yZXNpemUocmVkdWNlKS1hbnktY29sdW1uXHJcbiAgcHVibGljIGFkanVzdFdpZHRoVXBvblJlc2l6ZSgpIHtcclxuICAgIGNvbnN0IHRhYmxlV2lkdGggPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLmstZ3JpZC10YWJsZVwiKVtgb2Zmc2V0V2lkdGhgXTtcclxuICAgIGNvbnN0IGNvbnRlbnRXaWR0aCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIuay1ncmlkLWNvbnRlbnRcIilbYG9mZnNldFdpZHRoYF07XHJcbiAgICBpZiAodGFibGVXaWR0aCA8IGNvbnRlbnRXaWR0aCkge1xyXG4gICAgICBjb25zdCBjdXJyZW50TGFzdENvbFdpZHRoID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5rLWdyaWQtY29udGVudCAuay1ncmlkLXRhYmxlIHRyIHRkOmxhc3Qtb2YtdHlwZVwiKVtgb2Zmc2V0V2lkdGhgXTtcclxuXHJcbiAgICAgIHRoaXMuY29sdW1uc1t0aGlzLmNvbHVtbnMubGVuZ3RoIC0gMV0ud2lkdGggPSBjdXJyZW50TGFzdENvbFdpZHRoICsgKGNvbnRlbnRXaWR0aCAtIHRhYmxlV2lkdGgpIC0gMTA7IC8vIGFjY291bnQgZm9yIHRoZSB2ZXJ0aWNhbCBzY3JvbGxiYXI7XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICAvLyNyZWdpb24gb25DaGFuZ2UgRXZlbnRzXHJcbiAgcHVibGljIGZpbHRlckNoYW5nZShldmVudDogYW55KTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuaXNVc2VMb2NhbERhdGEoKSkge1xyXG4gICAgICB0aGlzLmdyaWRTZXR0aW5nID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy56Z3JpZC5ncmlkU2V0dGluZyk7XHJcbiAgICAgIHRoaXMuemdyaWQuZmlsdGVyQ2hhbmdlKGV2ZW50KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBwYWdlQ2hhbmdlKGV2ZW50OiBQYWdlQ2hhbmdlRXZlbnQpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5pc1VzZUxvY2FsRGF0YSgpKSB7XHJcbiAgICAgIHRoaXMuZ3JpZFNldHRpbmcgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLnpncmlkLmdyaWRTZXR0aW5nKTtcclxuICAgICAgdGhpcy56Z3JpZC5wYWdlQ2hhbmdlKGV2ZW50KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBzb3J0Q2hhbmdlKHNvcnQ6IFNvcnREZXNjcmlwdG9yW10pOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5pc1VzZUxvY2FsRGF0YSgpKSB7XHJcbiAgICAgIHRoaXMuZ3JpZFNldHRpbmcgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLnpncmlkLmdyaWRTZXR0aW5nKTtcclxuICAgICAgdGhpcy56Z3JpZC5zb3J0Q2hhbmdlKHNvcnQpO1xyXG4gICAgfVxyXG4gIH1cclxuICAgXHJcbiAgcHVibGljIGluQ2VsbENoZWNrQm94T25DaGFuZ2UoZXZlbnQ6IGFueSwgcm93SW5kZXg6IGFueSwgY29sdW1uOiBhbnkpIHtcclxuICAgIGNvbnN0IGlzQ2hlY2tlZCA9IGV2ZW50LmRldGFpbC5jaGVja2VkO1xyXG4gICAgY29uc3QgZ0RhdGEgPSB0aGlzLmdldEdyaWREYXRhKCk7XHJcbiAgICBnRGF0YVtyb3dJbmRleF1bY29sdW1uLlZhbHVlXSA9IGlzQ2hlY2tlZDtcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8vI3JlZ2lvbiBjb21tYW5kIGhhbmRsZXJcclxuICBwdWJsaWMgYWRkSGFuZGxlcih7IHNlbmRlciB9KSB7XHJcbiAgICB0aGlzLmlzTmV3ID0gdHJ1ZTtcclxuXHJcbiAgICAvLyBjbG9zZSBhbnkgZXhpc3RpbmcgZWRpdG9yXHJcbiAgICB0aGlzLmNsb3NlRWRpdG9yKHNlbmRlcik7XHJcblxyXG4gICAgLy8gbG9vcCBhbGwgY29sdW1uIHRvIGdldCB2YWxpZGF0aW9uIGFuZCBjcmVhdGUgZm9ybSBjb250cm9sXHJcbiAgICBjb25zdCBjb2xGb3JtQ29udHJvbCA9IHt9O1xyXG4gICAgdGhpcy5jb2x1bW5zLmZvckVhY2goY29sID0+IHtcclxuICAgICAgY29uc3QgdmFsaWRhdG9yczogVmFsaWRhdG9yRm5bXSA9IFtdO1xyXG4gICAgICBpZiAoY29sLklzUmVxdWlyZWQpIHtcclxuICAgICAgICB2YWxpZGF0b3JzLnB1c2goVmFsaWRhdG9ycy5yZXF1aXJlZCk7XHJcbiAgICAgICAgaWYgKGNvbC5UeXBlID09PSAnenRleHRlZGl0b3InKSB7XHJcbiAgICAgICAgICB2YWxpZGF0b3JzLnB1c2goWkNvbXBvbmVudEhlbHBlci5yZXF1aXJlZFZhbGlkYXRvcl9XaXRob3V0V2hpdGVTcGFjZXNfVGV4dEVkaXRvcik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgdmFsaWRhdG9ycy5wdXNoKFpDb21wb25lbnRIZWxwZXIucmVxdWlyZWRWYWxpZGF0b3JfV2l0aG91dFdoaXRlU3BhY2VzKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvbC5WYWxpZGF0b3JQYXR0ZXJuKSB7XHJcbiAgICAgICAgdmFsaWRhdG9ycy5wdXNoKFZhbGlkYXRvcnMucGF0dGVybihjb2wuVmFsaWRhdG9yUGF0dGVybikpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb2xGb3JtQ29udHJvbFtjb2wuVmFsdWVdID0gbmV3IEZvcm1Db250cm9sKG51bGwsIHZhbGlkYXRvcnMpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gc2V0IGZvcm0gY29udHJvbCBvYmplY3QgdG8gZm9ybSBncm91cFxyXG4gICAgdGhpcy5mb3JtR3JvdXAgPSBuZXcgRm9ybUdyb3VwKGNvbEZvcm1Db250cm9sKTtcclxuXHJcbiAgICAvLyBhZGQgdG8gZ3JpZCByb3dcclxuICAgIHNlbmRlci5hZGRSb3codGhpcy5mb3JtR3JvdXApO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNhdmVIYW5kbGVyKHsgc2VuZGVyLCByb3dJbmRleCwgZm9ybUdyb3VwLCBpc05ldyB9KTogdm9pZCB7XHJcbiAgICAvLyBHZXQgdGhlIGV4aXN0aW5nIGRhdGEgZnJvbSB0aGUgZ3JpZFxyXG4gICAgY29uc3QgZ3JpZEV4aXN0aW5nRGF0YSA9IHRoaXMuZ2V0R3JpZERhdGEoKTtcclxuXHJcbiAgICAvLyBDaGVjayBpZiB0aGUgZm9ybSBpcyB2YWxpZFxyXG4gICAgaWYgKGZvcm1Hcm91cC52YWxpZCkge1xyXG4gICAgICAvLyBDaGVjayBmb3IgYSB1bmlxdWUga2V5IGZpZWxkXHJcbiAgICAgIGNvbnN0IHVuaXF1ZUtleSA9IHRoaXMuZGF0YVsnVW5pcXVlS2V5J107XHJcbiAgICAgIGlmICh1bmlxdWVLZXkpIHtcclxuICAgICAgICAvLyBHZXQgdGhlIHVuaXF1ZSBrZXkgdmFsdWUgZnJvbSB0aGUgZm9ybVxyXG4gICAgICAgIGNvbnN0IGZvcm1VbmlxdWVLZXlWYWx1ZSA9IGZvcm1Hcm91cC52YWx1ZVt1bmlxdWVLZXldO1xyXG5cclxuICAgICAgICAvLyBDaGVjayBpZiB0aGVyZSBpcyBhIGR1cGxpY2F0ZSB2YWx1ZVxyXG4gICAgICAgIGNvbnN0IGlzRHVwbGljYXRlID0gZ3JpZEV4aXN0aW5nRGF0YS5zb21lKGRhdGEgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgLy8gSWYgZWRpdGluZyBhbiBleGlzdGluZyByb3csIHNraXAgdGhlIGN1cnJlbnQgcm93IGJlaW5nIGVkaXRlZFxyXG4gICAgICAgICAgICAhaXNOZXcgJiZcclxuICAgICAgICAgICAgcm93SW5kZXggIT09IHVuZGVmaW5lZCAmJlxyXG4gICAgICAgICAgICAvLyBDaGVjayBpZiB0aGUgdW5pcXVlIGtleSB2YWx1ZSBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgZ3JpZFxyXG4gICAgICAgICAgICBkYXRhW3VuaXF1ZUtleV0gPT09IGZvcm1VbmlxdWVLZXlWYWx1ZSAmJlxyXG4gICAgICAgICAgICAvLyBTa2lwIGNoZWNraW5nIGFnYWluc3QgdGhlIGN1cnJlbnQgcm93IGJlaW5nIGVkaXRlZFxyXG4gICAgICAgICAgICBkYXRhW3VuaXF1ZUtleV0gIT09IGdyaWRFeGlzdGluZ0RhdGFbcm93SW5kZXhdW3VuaXF1ZUtleV1cclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIC8vIElmIHRoZXJlIGlzIGEgZHVwbGljYXRlIHZhbHVlLCBzaG93IGFuIGVycm9yIG1lc3NhZ2UgYW5kIHJldHVybiB3aXRob3V0IHNhdmluZ1xyXG4gICAgICAgIGlmIChpc0R1cGxpY2F0ZSkge1xyXG4gICAgICAgICAgdGhpcy50b2FzdFNlcnZpY2Uuc2hvdygnRXJyb3Igb2NjdXI6IER1cGxpY2F0ZWQgdW5pcXVlIGZpZWxkIGVudHJ5LicsICd0b3AnLCB0cnVlLCAzMDAwLCAnZGFuZ2VyJyk7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBJZiB0aGUgdW5pcXVlIGtleSB2YWx1ZSBpcyB2YWxpZCBhbmQgdGhlcmUgYXJlIG5vIGR1cGxpY2F0ZXMsIHNhdmUgdGhlIGRhdGFcclxuICAgICAgaWYgKGlzTmV3KSB7XHJcbiAgICAgICAgLy8gQWRkIGEgbmV3IHJvdyB0byB0aGUgZ3JpZCBkYXRhXHJcbiAgICAgICAgZ3JpZEV4aXN0aW5nRGF0YS5wdXNoKGZvcm1Hcm91cC52YWx1ZSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgLy8gVXBkYXRlIGFuIGV4aXN0aW5nIHJvdyBpbiB0aGUgZ3JpZCBkYXRhXHJcbiAgICAgICAgZ3JpZEV4aXN0aW5nRGF0YVtyb3dJbmRleF0gPSBmb3JtR3JvdXAudmFsdWU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIFVwZGF0ZSB0aGUgZ3JpZCBkYXRhIGFuZCBjbG9zZSB0aGUgcm93IGVkaXRvclxyXG4gICAgICB0aGlzLnNldERhdGEoZ3JpZEV4aXN0aW5nRGF0YSk7XHJcbiAgICAgIHNlbmRlci5jbG9zZVJvdyhyb3dJbmRleCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY2FuY2VsSGFuZGxlcih7IHNlbmRlciwgcm93SW5kZXggfSkge1xyXG4gICAgLy8gY2FuY2VsIGFueSBleGlzdGluZyBlZGl0b3JcclxuICAgIHNlbmRlci5jbG9zZVJvdyhyb3dJbmRleCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZWRpdEhhbmRsZXIoeyBzZW5kZXIsIHJvd0luZGV4LCBkYXRhSXRlbSB9KSB7XHJcbiAgICAvLyBTZXQgYSBmbGFnIHRvIGluZGljYXRlIHRoYXQgdGhlIHJvdyBiZWluZyBlZGl0ZWQgaXMgbm90IGEgbmV3IHJvd1xyXG4gICAgdGhpcy5pc05ldyA9IGZhbHNlO1xyXG5cclxuICAgIC8vIENsb3NlIGFueSBleGlzdGluZyBlZGl0b3JcclxuICAgIHRoaXMuY2xvc2VFZGl0b3Ioc2VuZGVyKTtcclxuXHJcbiAgICAvLyBsb29wIGFsbCBjb2x1bW4gdG8gZ2V0IHZhbGlkYXRpb24gYW5kIGNyZWF0ZSBmb3JtIGNvbnRyb2wsIGFwcGVuZCBjdXJyZW50IHJvdyB2YWx1ZVxyXG4gICAgY29uc3QgY29sRm9ybUNvbnRyb2wgPSB7fTtcclxuICAgIHRoaXMuY29sdW1ucy5mb3JFYWNoKGNvbCA9PiB7XHJcbiAgICAgIGNvbnN0IHZhbGlkYXRvcnM6IFZhbGlkYXRvckZuW10gPSBbXTtcclxuICAgICAgaWYgKGNvbC5Jc1JlcXVpcmVkKSB7XHJcbiAgICAgICAgdmFsaWRhdG9ycy5wdXNoKFZhbGlkYXRvcnMucmVxdWlyZWQpO1xyXG4gICAgICAgIGlmIChjb2wuVHlwZSA9PT0gJ3p0ZXh0ZWRpdG9yJykge1xyXG4gICAgICAgICAgdmFsaWRhdG9ycy5wdXNoKFpDb21wb25lbnRIZWxwZXIucmVxdWlyZWRWYWxpZGF0b3JfV2l0aG91dFdoaXRlU3BhY2VzX1RleHRFZGl0b3IpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIHZhbGlkYXRvcnMucHVzaChaQ29tcG9uZW50SGVscGVyLnJlcXVpcmVkVmFsaWRhdG9yX1dpdGhvdXRXaGl0ZVNwYWNlcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb2wuVmFsaWRhdG9yUGF0dGVybikge1xyXG4gICAgICAgIHZhbGlkYXRvcnMucHVzaChWYWxpZGF0b3JzLnBhdHRlcm4oY29sLlZhbGlkYXRvclBhdHRlcm4pKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgY29sRm9ybUNvbnRyb2xbY29sLlZhbHVlXSA9IG5ldyBGb3JtQ29udHJvbChkYXRhSXRlbVtjb2wuVmFsdWVdLCB2YWxpZGF0b3JzKTtcclxuICAgIH0pO1xyXG5cclxuICAgIC8vIHNldCBmb3JtIGNvbnRyb2wgb2JqZWN0IHRvIGZvcm0gZ3JvdXBcclxuICAgIHRoaXMuZm9ybUdyb3VwID0gbmV3IEZvcm1Hcm91cChjb2xGb3JtQ29udHJvbCk7XHJcblxyXG4gICAgLy8gU2V0IHRoZSBmb3JtIGdyb3VwIG9uIHRoZSByb3cgYmVpbmcgZWRpdGVkXHJcbiAgICB0aGlzLmVkaXRlZFJvd0luZGV4ID0gcm93SW5kZXg7XHJcbiAgICBzZW5kZXIuZWRpdFJvdyhyb3dJbmRleCwgdGhpcy5mb3JtR3JvdXApO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHJlbW92ZUhhbmRsZXIoeyBzZW5kZXIsIGRhdGFJdGVtIH0pIHtcclxuICAgIGNvbnN0IGdEYXRhID0gdGhpcy5nZXRHcmlkRGF0YSgpO1xyXG4gICAgY29uc3QgaW5kZXggPSB0aGlzLmdldEl0ZW1JbmRleChkYXRhSXRlbSwgZ0RhdGEsIHRoaXMuZGF0YVsnVW5pcXVlS2V5J10pO1xyXG4gICAgZ0RhdGEuc3BsaWNlKGluZGV4LCAxKTtcclxuXHJcbiAgICAvLyBVcGRhdGUgdGhlIGRhdGEgaW4gdGhlIGdyaWRcclxuICAgIHRoaXMuc2V0RGF0YShnRGF0YSk7XHJcblxyXG4gICAgc2VuZGVyLmNhbmNlbENlbGwoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY2xvc2VFZGl0b3IoZ3JpZCwgcm93SW5kZXggPSB0aGlzLmVkaXRlZFJvd0luZGV4KSB7XHJcbiAgICBncmlkLmNsb3NlUm93KHJvd0luZGV4KTtcclxuICAgIHRoaXMuZWRpdGVkUm93SW5kZXggPSB1bmRlZmluZWQ7XHJcbiAgICB0aGlzLmZvcm1Hcm91cCA9IHVuZGVmaW5lZDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0SXRlbUluZGV4KGl0ZW06IGFueSwgZGF0YTogYW55W10sIGtleTogc3RyaW5nKTogbnVtYmVyIHtcclxuICAgIGZvciAobGV0IGlkeCA9IDA7IGlkeCA8IGRhdGEubGVuZ3RoOyBpZHgrKykge1xyXG4gICAgICBpZiAoZGF0YVtpZHhdW2tleV0gPT09IGl0ZW1ba2V5XSkge1xyXG4gICAgICAgIHJldHVybiBpZHg7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gLTE7XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICAvLyNyZWdpb24gR3JpZCBGaWx0ZXJcclxuICBwcml2YXRlIHNldHVwRmlsdGVyRmVhdHVyZSgpIHtcclxuICAgIGlmICh0aGlzLmRhdGEuR3JpZEZpbHRlckJhckZpZWxkKSB7XHJcbiAgICAgIHRoaXMuZmlsdGVyR3JvdXAgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLmdyb3VwKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmRhdGEuR3JpZEFkdkZpbHRlckJhckZpZWxkKSB7XHJcbiAgICAgIHRoaXMuYWR2ZmlsdGVyR3JvdXAgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLmdyb3VwKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZWFyY2goKSB7XHJcbiAgICBjb25zdCBmb3JtID0gdGhpcy5maWx0ZXJHcm91cC5mb3JtO1xyXG4gICAgY29uc3QgY29udHJvbHMgPSBmb3JtLmNvbnRyb2xzO1xyXG5cclxuICAgIGlmICh0aGlzLmlzU2hvd0FkdkZpbHRlcikge1xyXG4gICAgICBjb25zdCBhZHZmb3JtID0gdGhpcy5hZHZmaWx0ZXJHcm91cC5mb3JtO1xyXG4gICAgICBjb25zdCBhZHZjb250cm9scyA9IGFkdmZvcm0uY29udHJvbHM7XHJcbiAgICAgIGZvciAoY29uc3QgYyBvZiBPYmplY3Qua2V5cyhhZHZjb250cm9scykpIHtcclxuICAgICAgICBjb250cm9sc1tjXSA9IGFkdmNvbnRyb2xzW2NdO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuZGF0YS5GaWx0ZXJTZWFyY2gpIHtcclxuICAgICAgdGhpcy5ncm91cC5zdWJqZWN0Lm5leHQoe1xyXG4gICAgICAgIHR5cGU6IFwiemdyaWQtZmlsdGVyc2VhcmNoXCIsXHJcbiAgICAgICAgdGFyZ2V0OiB0aGlzLmRhdGEuRmlsdGVyU2VhcmNoLFxyXG4gICAgICAgIGRhdGE6IHsgZm9ybWNvbnRyb2xzOiBjb250cm9scyB9LFxyXG4gICAgICB9IGFzIFpDb21wb25lbnRPdXRwdXRFdmVudCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5wYXJhbXMuZmlsdGVyUGFyYW1zID0gW107XHJcbiAgICAgIE9iamVjdC5rZXlzKGNvbnRyb2xzKS5mb3JFYWNoKGNvbnRyb2xOYW1lID0+IHtcclxuICAgICAgICBpZiAoY29udHJvbHNbY29udHJvbE5hbWVdLnZhbHVlKSB7XHJcbiAgICAgICAgICBjb25zdCBmaWVsZCA9IFpDb21wb25lbnRIZWxwZXIuZ2V0RmllbGRGcm9tRmllbGRzQnlWYWx1ZSh0aGlzLmZpbHRlckdyb3VwLmZpZWxkcywgY29udHJvbE5hbWUpIHx8IFpDb21wb25lbnRIZWxwZXIuZ2V0RmllbGRGcm9tRmllbGRzQnlWYWx1ZSh0aGlzLmFkdmZpbHRlckdyb3VwLmZpZWxkcywgY29udHJvbE5hbWUpO1xyXG4gICAgICAgICAgdGhpcy5wYXJhbXMuZmlsdGVyUGFyYW1zLnB1c2goe1xyXG4gICAgICAgICAgICBrZXk6IGZpZWxkLlZhbHVlRXhwciB8fCBmaWVsZC5WYWx1ZSxcclxuICAgICAgICAgICAgb3BzOiB0aGlzLm1hcEZpbHRlck9wZXJhdG9yQnlGaWVsZFR5cGUoZmllbGQpLFxyXG4gICAgICAgICAgICB2YWx1ZTogY29udHJvbHNbY29udHJvbE5hbWVdLnZhbHVlXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMuZ2V0RGF0YSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGNhbmNlbEVkaXQoKSB7XHJcbiAgICB0aGlzLmNsZWFyRmlsdGVyRGF0YSh0aGlzLmZpbHRlckdyb3VwKTtcclxuICAgIGlmICh0aGlzLmRhdGEuR3JpZEFkdkZpbHRlckJhckZpZWxkKSB7XHJcbiAgICAgIHRoaXMuY2xlYXJGaWx0ZXJEYXRhKHRoaXMuYWR2ZmlsdGVyR3JvdXApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjbGVhckZpbHRlckRhdGEoZ3JvdXA6IFpHcm91cCkge1xyXG4gICAgY29uc3QgZm9ybSA9IGdyb3VwLmZvcm0gYXMgRm9ybUdyb3VwO1xyXG4gICAgY29uc3QgY29udHJvbHMgPSBmb3JtLmNvbnRyb2xzO1xyXG4gICAgT2JqZWN0LmtleXMoY29udHJvbHMpLmZvckVhY2goY29udHJvbE5hbWUgPT4ge1xyXG4gICAgICBaQ29tcG9uZW50SGVscGVyLnNldE1vZGVsVmFsdWUoY29udHJvbE5hbWUsIG51bGwsIGdyb3VwLCB0cnVlKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFkdmFuY2VkU2VhcmNoKCkge1xyXG4gICAgdGhpcy5pc1Nob3dBZHZGaWx0ZXIgPSAhdGhpcy5pc1Nob3dBZHZGaWx0ZXI7XHJcbiAgICBpZiAoIXRoaXMuaXNTaG93QWR2RmlsdGVyKSB7XHJcbiAgICAgIHRoaXMuY2xlYXJGaWx0ZXJEYXRhKHRoaXMuYWR2ZmlsdGVyR3JvdXApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBtYXBGaWx0ZXJPcGVyYXRvckJ5RmllbGRUeXBlKGZpZWxkOiBaRmllbGQpIHtcclxuICAgIHN3aXRjaCAoZmllbGQuVHlwZSkge1xyXG4gICAgICBjYXNlIFwibnVtYmVyXCI6XHJcbiAgICAgIGNhc2UgXCJudW1lcmljXCI6XHJcbiAgICAgIGNhc2UgXCJkYXRlXCI6XHJcbiAgICAgIGNhc2UgXCJlbWFpbFwiOlxyXG4gICAgICBjYXNlIFwicGFzc3dvcmRcIjpcclxuICAgICAgY2FzZSBcInRlbFwiOlxyXG4gICAgICBjYXNlIFwidGV4dFwiOlxyXG4gICAgICBjYXNlIFwidXJsXCI6XHJcbiAgICAgIGNhc2UgXCJjdXJyZW5jeVwiOlxyXG4gICAgICBjYXNlIFwidGV4dGFyZWFcIjpcclxuICAgICAgICBpZiAoIWZpZWxkWydGaWx0ZXJDb250YWluc1VzaW5nRXF1YWwnXSkge1xyXG4gICAgICAgICAgcmV0dXJuIFwiY29udGFpbnNcIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIFwiPT1cIjtcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICByZXR1cm4gXCI9XCI7XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICAvLyNyZWdpb24gZ3JpZCBjb21tb24gc2V0dGluZyBmdW5jdGlvblxyXG4gIHB1YmxpYyBzZXQgc2V0R3JpZFRpdGxlKG5ld1RpdGxlOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuZ3JpZFRpdGxlID0gbmV3VGl0bGU7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0IHNldEdyaWRTdGF0ZShzdGF0ZTogU3RhdGUpIHtcclxuICAgIHRoaXMuZ3JpZFNldHRpbmcuZ3JpZFN0YXRlID0gc3RhdGU7XHJcbiAgICB0aGlzLnpncmlkLmdyaWRTZXR0aW5nLmdyaWRTdGF0ZSA9IHN0YXRlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldEdyaWRUb0ZpcnN0UGFnZSgpIHtcclxuICAgIHRoaXMuZ3JpZFNldHRpbmcuZ3JpZFN0YXRlLnNraXAgPSAwO1xyXG4gICAgdGhpcy56Z3JpZC5ncmlkU2V0dGluZy5ncmlkU3RhdGUuc2tpcCA9IDA7XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvblxyXG59XHJcbiIsIjwhLS1cclxuPGRpdiBzdHlsZT1cIm1hcmdpbjogMTBweFwiPlxyXG4gIDxkaXYgY2xhc3M9XCJjYXJkXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJsb2NrIGstZm9ybVwiPlxyXG4gICAgICAgICAgPGZpZWxkc2V0PlxyXG4gICAgICAgICAgICA8bGVnZW5kPkJpbmRpbmcgdHlwZXM8L2xlZ2VuZD5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImstZm9ybS1maWVsZFwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4+QmluZCB0aGUgZGF0YSB0bzo8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgWyhuZ01vZGVsKV09XCJiaW5kaW5nVHlwZVwiIHR5cGU9XCJyYWRpb1wiIG5hbWU9XCJtb2RlXCIgaWQ9XCJhcnJheVwiIHZhbHVlPVwiYXJyYXlcIiBjbGFzcz1cImstcmFkaW9cIlxyXG4gICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJjaGFuZ2VCaW5kaW5nVHlwZSgkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJrLXJhZGlvLWxhYmVsXCIgZm9yPVwiYXJyYXlcIj5BcnJheSBvYmplY3Q8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgPGlucHV0IFsobmdNb2RlbCldPVwiYmluZGluZ1R5cGVcIiB0eXBlPVwicmFkaW9cIiBuYW1lPVwibW9kZVwiIGlkPVwiZ3JpZERhdGFSZXN1bHRcIiB2YWx1ZT1cImdyaWREYXRhUmVzdWx0XCIgY2xhc3M9XCJrLXJhZGlvXCJcclxuICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwiY2hhbmdlQmluZGluZ1R5cGUoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiay1yYWRpby1sYWJlbFwiIGZvcj1cImdyaWREYXRhUmVzdWx0XCI+R3JpZERhdGFSZXN1bHQgb2JqZWN0PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCBbKG5nTW9kZWwpXT1cImJpbmRpbmdUeXBlXCIgdHlwZT1cInJhZGlvXCIgbmFtZT1cIm1vZGVcIiBpZD1cImFzeW5jXCIgdmFsdWU9XCJhc3luY1wiIGNsYXNzPVwiay1yYWRpb1wiXHJcbiAgICAgICAgICAgICAgICAoY2hhbmdlKT1cImNoYW5nZUJpbmRpbmdUeXBlKCRldmVudClcIj5cclxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImstcmFkaW8tbGFiZWxcIiBmb3I9XCJhc3luY1wiPkFzeW5jaHJvbm91cyBzb3VyY2U8L2xhYmVsPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZmllbGRzZXQ+XHJcbiAgICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L2Rpdj4gLS0+XHJcbjxkaXYgY2xhc3M9XCJncmlkLWNvbnRhaW5lciBlMXRhZy1zdHlsZVwiIFtuZ0NsYXNzXT1cImRhdGEuQ2xhc3NcIiBbc3R5bGVdPVwiY29tcG9uZW50UHJvcGVydGllcy5zdHlsZS5zdHlsZVwiPlxyXG5cclxuICA8IS0tIDxkaXYgKm5nSWY9XCJkYXRhLlRpdGxlXCIgY2xhc3M9XCJncmlkVGl0bGVcIj57e2RhdGEuVGl0bGV9fTwvZGl2PiAtLT5cclxuICA8bmctdGVtcGxhdGUgI3RlbXBsYXRlIGxldC1hbmNob3I+XHJcbiAgICA8c3Bhbj57eyBhbmNob3IubmF0aXZlRWxlbWVudC5pbm5lclRleHQgfX08L3NwYW4+XHJcbiAgPC9uZy10ZW1wbGF0ZT5cclxuICA8a2VuZG8tcG9wb3ZlciAjZ3JpZFBvcE92ZXIgW3Bvc2l0aW9uXT1cImRhdGEuUG9wT3ZlclBvc2l0aW9uIHx8ICdib3R0b20nXCIgW3RlbXBsYXRlRGF0YV09XCJnZXRDb250ZXh0RGF0YS5iaW5kKHRoaXMpXCI+XHJcbiAgICA8IS0tIDxuZy10ZW1wbGF0ZSBrZW5kb1BvcG92ZXJUaXRsZVRlbXBsYXRlIGxldC1kYXRhPVwiZGF0YVwiID5cclxuICAgICAgPGRpdiBbc3R5bGVdPVwiZGF0YS5UaXRsZVN0eWxlXCIgKm5nSWY9XCJkYXRhICYmIGRhdGEuVGl0bGVcIiBbaW5uZXJIVE1MXT1cImRhdGEuVGl0bGVcIj48L2Rpdj5cclxuICAgIDwvbmctdGVtcGxhdGU+IC0tPlxyXG4gICAgPG5nLXRlbXBsYXRlIGtlbmRvUG9wb3ZlckJvZHlUZW1wbGF0ZSBsZXQtZGF0YT1cImRhdGFcIj5cclxuICAgICAgPGRpdiBbc3R5bGVdPVwiZGF0YS5Cb2R5U3R5bGVcIiBjbGFzcz1cInBvcG92ZXJib2R5XCIgKm5nSWY9XCJkYXRhICYmIGRhdGEuQm9keVwiIFtpbm5lckhUTUxdPVwiZGF0YS5Cb2R5IHwgaHRtbFNhbml0aXplXCIgW25nQ2xhc3NdPVwiZGF0YS5Cb2R5Q2xhc3NcIiAobW91c2VsZWF2ZSk9XCJjbG9zZVBvcE92ZXIuY2FsbCh0aGlzLCAkZXZlbnQpXCI+PC9kaXY+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG4gIDwva2VuZG8tcG9wb3Zlcj5cclxuXHJcbiAgPGRpdiBrZW5kb1Rvb2x0aXAgc2hvd09uPVwibm9uZVwiIFt0b29sdGlwVGVtcGxhdGVdPVwidGVtcGxhdGVcIiBmaWx0ZXI9XCIuay1ncmlkIHRkXCIgKG1vdXNlb3Zlcik9XCJzaG93VG9vbHRpcCgkZXZlbnQpXCIgW3N0eWxlXT1cImNvbXBvbmVudFByb3BlcnRpZXMuc3R5bGUuc3R5bGUxXCIgY2xhc3M9XCJlMXRhZy1zdHlsZTFcIj5cclxuICAgIDxkaXYga2VuZG9Qb3BvdmVyQ29udGFpbmVyIFtwb3BvdmVyXT1cImdyaWRQb3BPdmVyXCIgZmlsdGVyPVwiZGl2LmdyaWRDZWxsLndpdGhQb3BvdmVySW5HcmlkXCIgc2hvd09uPVwibm9uZVwiIGtlbmRvUG9wb3ZlckNvbnRhaW5lciAjcG9wb3ZlcmNvbnRhaW5lcj1cImtlbmRvUG9wb3ZlckNvbnRhaW5lclwiPlxyXG4gICAgICA8a2VuZG8tZ3JpZCBbemdyaWRiaW5kaW5nXT1cIntkYXRhOiBkYXRhLCBncm91cDogZ3JvdXAsIHBhcmFtczogcGFyYW1zLCBncmlkU3ViamVjdDogZ3JpZFN1YmplY3QsIGdyaWRTZXR0aW5nOiBncmlkU2V0dGluZ31cIiBbbmdDbGFzc109XCJkYXRhLkNsYXNzXCIgY2xhc3M9XCJkZXNrdG9wLWdyaWQgZTF0YWctc3R5bGUyXCJcclxuICAgICAgICAgICAgICAgICAgW3Njcm9sbGFibGVdPVwiZGF0YS5zY3JvbGxBYmxlID09PSBmYWxzZSA/ICdub25lJyA6ICdzY3JvbGxhYmxlJ1wiXHJcbiAgICAgICAgICAgICAgICAgIFtwYWdlYWJsZV09XCJwYWdlYWJsZVwiXHJcbiAgICAgICAgICAgICAgICAgIFtjbGFzcy5oaWRlbi1wYWdlcl09XCIhcGFnZWFibGVcIlxyXG4gICAgICAgICAgICAgICAgICBbcGFnZVNpemVdPVwiZ3JpZFNldHRpbmcuZ3JpZFN0YXRlLnRha2VcIlxyXG4gICAgICAgICAgICAgICAgICBbc2tpcF09XCJncmlkU2V0dGluZy5ncmlkU3RhdGUuc2tpcFwiXHJcbiAgICAgICAgICAgICAgICAgIFtzb3J0XT1cImdyaWRTZXR0aW5nLmdyaWRTdGF0ZS5zb3J0XCJcclxuICAgICAgICAgICAgICAgICAgW3NvcnRhYmxlXT1cInthbGxvd1Vuc29ydDogdHJ1ZSxtb2RlOiAnbXVsdGlwbGUnfVwiXHJcbiAgICAgICAgICAgICAgICAgIFtmaWx0ZXJdPVwiZ3JpZFNldHRpbmcuZ3JpZFN0YXRlLmZpbHRlclwiXHJcbiAgICAgICAgICAgICAgICAgIFtmaWx0ZXJhYmxlXT1cImRhdGEuZW5hYmxlRmlsdGVyaW5nICE9PSBmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgIFtyZXNpemFibGVdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgIFtyZW9yZGVyYWJsZV09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgW2NvbHVtbk1lbnVdPVwiZGF0YS5EaXNhYmxlR3JpZENvbHVtbk1lbnUgPyBmYWxzZSA6IHsgZmlsdGVyOiB0cnVlIH1cIlxyXG4gICAgICAgICAgICAgICAgICBbaGlkZGVuXT1cIiEoISFjb21wb25lbnRQcm9wZXJ0aWVzLmlzVmlzaWJsZUZpZWxkID8gZ3JvdXBbY29tcG9uZW50UHJvcGVydGllcy5pc1Zpc2libGVGaWVsZF0gOiBjb21wb25lbnRQcm9wZXJ0aWVzLmlzVmlzaWJsZSlcIlxyXG4gICAgICAgICAgICAgICAgICAoY2VsbENsaWNrKT1cImNlbGxDbGlja0hhbmRsZXIoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgIChjZWxsQ2xvc2UpPVwiZWRpdENlbGxDbG9zZUhhbmRsZXIoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgIChkYXRhU3RhdGVDaGFuZ2UpPVwiZGF0YVN0YXRlQ2hhbmdlKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAocGFnZUNoYW5nZSk9XCJwYWdlQ2hhbmdlKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAoc29ydENoYW5nZSk9XCJzb3J0Q2hhbmdlKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAoZmlsdGVyQ2hhbmdlKT1cImZpbHRlckNoYW5nZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgW2tlbmRvR3JpZFNlbGVjdEJ5XT1cInJvd1NlbGVjdGlvbktleVwiXHJcbiAgICAgICAgICAgICAgICAgIFtzZWxlY3RhYmxlXT1cInNlbGVjdGFibGVTZXR0aW5nc1wiXHJcbiAgICAgICAgICAgICAgICAgIFsoc2VsZWN0ZWRLZXlzKV09XCJteVNlbGVjdGlvblwiXHJcbiAgICAgICAgICAgICAgICAgIFtzdHlsZV09XCJjb21wb25lbnRQcm9wZXJ0aWVzLnN0eWxlLnN0eWxlMlwiXHJcbiAgICAgICAgICAgICAgICAgIFt0cmFja0J5XT1cInRyYWNrQnlcIlxyXG4gICAgICAgICAgICAgICAgICAoY2FuY2VsKT1cImNhbmNlbEhhbmRsZXIoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgIChzYXZlKT1cInNhdmVIYW5kbGVyKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAocmVtb3ZlKT1cInJlbW92ZUhhbmRsZXIoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgIChlZGl0KT1cImVkaXRIYW5kbGVyKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAoYWRkKT1cImFkZEhhbmRsZXIoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgIChjb2x1bW5SZXNpemUpPVwiYWRqdXN0V2lkdGhVcG9uUmVzaXplKClcIlxyXG4gICAgICAgICAgICAgICAgICBbcm93Q2xhc3NdPVwicm93Q2FsbGJhY2suYmluZCh0aGlzKVwiPlxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSBrZW5kb0dyaWRUb29sYmFyVGVtcGxhdGVcclxuICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJkYXRhLkFsbG93UmVmcmVzaEJ1dHRvbiB8fCBkYXRhLkFsbG93RXhwb3J0IHx8IGRhdGEuQWxsb3dTYXZlU3RhdGUgfHwgZGF0YS5UaXRsZSB8fCBkYXRhLkdyaWRCdXR0b25GaWVsZE5hbWVfV0YgfHwgZGF0YS5HcmlkQnV0dG9uRmllbGROYW1lIHx8IGRhdGEuRW5hYmxlR3JpZENvbW1hbmQgfHwgZGF0YS5FbmFibGVDdXN0b21BZGRDb21tYW5kIHx8IGRhdGEuRW5hYmxlQ3VzdG9tUmVzZXRDb21tYW5kXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidG9vbGJhci1sZWZ0LWl0ZW1cIiAqbmdJZj1cImdyaWRUaXRsZSB8fCBkYXRhLkFsbG93UmVmcmVzaEJ1dHRvbiB8fCBkYXRhLkFsbG93RXhwb3J0XCI+XHJcbiAgICAgICAgICAgIDwhLS0gPGZhLWljb24gKm5nSWY9XCJkYXRhLkljb25cIiBjbGFzcz1cImdyaWRUaXRsZUljb25cIiBbaWNvbl09XCJkYXRhLkljb25cIj48L2ZhLWljb24+IC0tPlxyXG4gICAgICAgICAgICA8a2VuZG8tbGFiZWwgY2xhc3M9XCJncmlkVGl0bGVcIj57eyBncmlkVGl0bGUgfX08L2tlbmRvLWxhYmVsPlxyXG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImxlZnQtYnV0dG9uc1wiIGtlbmRvQnV0dG9uIChjbGljayk9XCJyZWZyZXNoRGF0YSgpXCJcclxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImRhdGEuQWxsb3dSZWZyZXNoQnV0dG9uXCI+XHJcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJrLWljb24gay1ncmlkLWJ1dHRvbiBrLWktcmVmcmVzaC1zbVwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGtlbmRvR3JpZEV4Y2VsQ29tbWFuZCAqbmdJZj1cImRhdGEuQWxsb3dFeHBvcnRcIj5cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImstaWNvbiBrLWktZmlsZS1leGNlbFwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICB7eyBnZXRUb29sQmFySXRlbUxhYmVsTmFtZSgnRXhwb3J0IERhdGEgdG8gRXhjZWwnKSB9fVxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInRvb2xiYXItcmlnaHQtaXRlbVwiICpuZ0lmPVwiZ3JpZEJ0biB8fCBkYXRhLkNhY2hlSW5mbz8uRW5hYmxlU2F2ZVN0YXRlIHx8IGdyaWREZWZhdWx0U3RhdGVFeGlzdCB8fCBkYXRhLkVuYWJsZUdyaWRDb21tYW5kIHx8IGRhdGEuRW5hYmxlQ3VzdG9tQWRkQ29tbWFuZCB8fCBkYXRhLkVuYWJsZUN1c3RvbVJlc2V0Q29tbWFuZFwiPlxyXG4gICAgICAgICAgICA8YXBwLXp3b3JrZmxvd2J1dHRvbnMgKm5nSWY9XCJncmlkQnRuICYmIGdyaWRCdG4uVHlwZSA9PT0gJ3p3b3JrZmxvd2J1dHRvbnMnXCIgW2RhdGFdPVwiZ3JpZEJ0blwiIFtncm91cF09XCJncm91cFwiIFtmb3JtXT1cImZvcm1cIj48L2FwcC16d29ya2Zsb3didXR0b25zPlxyXG4gICAgICAgICAgICA8YXBwLXpidXR0b25zICpuZ0lmPVwiZ3JpZEJ0biAmJiBncmlkQnRuLlR5cGUgPT09ICd6YnV0dG9ucydcIiBbZGF0YV09XCJncmlkQnRuXCIgW2dyb3VwXT1cImdyb3VwXCIgW2Zvcm1dPVwiZm9ybVwiPjwvYXBwLXpidXR0b25zPlxyXG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBrZW5kb0J1dHRvbiAoY2xpY2spPVwic2F2ZUdyaWRTZXR0aW5ncygpXCIgKm5nSWY9XCJkYXRhLkNhY2hlSW5mbz8uRW5hYmxlU2F2ZVN0YXRlXCI+XHJcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJrLWljb24gay1pY29uLXdpdGgtdGV4dCBrLWktc3RhclwiPjwvc3Bhbj57eyBnZXRUb29sQmFySXRlbUxhYmVsTmFtZSgnU2F2ZSBTZXR0aW5ncycpIH19XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBrZW5kb0J1dHRvbiAoY2xpY2spPVwicmVzdG9yZUdyaWRTZXR0aW5ncygpXCIgKm5nSWY9XCJzaG93UmVzdG9yZUdyaWRTZXR0aW5nQnV0dG9uXCI+XHJcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJrLWljb24gay1pY29uLXdpdGgtdGV4dCBrLWktc3Rhci1vdXRsaW5lXCI+PC9zcGFuPnt7IGdldFRvb2xCYXJJdGVtTGFiZWxOYW1lKCdSZXN0b3JlIFNldHRpbmdzJykgfX1cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGtlbmRvR3JpZEFkZENvbW1hbmQgKm5nSWY9XCJkYXRhLkVuYWJsZUdyaWRDb21tYW5kXCI+XHJcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJrLWljb24gay1pY29uLXdpdGgtdGV4dCBrLWktYWRkXCI+PC9zcGFuPnt7IGdldFRvb2xCYXJJdGVtTGFiZWxOYW1lKGRhdGEuQWRkQ29tbWFuZEJ1dHRvbk5hbWUgPyBkYXRhLkFkZENvbW1hbmRCdXR0b25OYW1lOiAnQWRkJykgfX1cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGtlbmRvQnV0dG9uIChjbGljayk9XCJncmlkQ3VzdG9tQWRkQ29tbWFuZChncm91cClcIiAqbmdJZj1cImRhdGEuRW5hYmxlQ3VzdG9tQWRkQ29tbWFuZFwiPlxyXG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiay1pY29uIGstaWNvbi13aXRoLXRleHQgay1pLWFkZFwiPjwvc3Bhbj57eyBnZXRUb29sQmFySXRlbUxhYmVsTmFtZShkYXRhLkFkZENvbW1hbmRCdXR0b25OYW1lID8gZGF0YS5BZGRDb21tYW5kQnV0dG9uTmFtZTogJ0FkZCcpIH19XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBrZW5kb0J1dHRvbiAoY2xpY2spPVwiZ3JpZEN1c3RvbVJlc2V0Q29tbWFuZChncm91cClcIiAqbmdJZj1cImRhdGEuRW5hYmxlQ3VzdG9tUmVzZXRDb21tYW5kXCI+XHJcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJrLWljb24gay1pY29uLXdpdGgtdGV4dCBrLWktdHJhc2hcIj48L3NwYW4+e3sgZ2V0VG9vbEJhckl0ZW1MYWJlbE5hbWUoZGF0YS5SZXNldENvbW1hbmRCdXR0b25OYW1lID8gZGF0YS5SZXNldENvbW1hbmRCdXR0b25OYW1lOiAnUmVzZXQnKSB9fVxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZpbHRlci1jb250YWluZXJcIiAqbmdJZj1cImRhdGEuR3JpZEZpbHRlckJhckZpZWxkXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJub3JtYWwtZmlsdGVyLWNvbnRhaW5lclwiPlxyXG4gICAgICAgICAgICAgIDxhcHAtemZvcm0gY2xhc3M9XCJmaWx0ZXItZmllbGRzXCIgW2dyb3VwXT1cImZpbHRlckdyb3VwXCIgW2ZpZWxkTmFtZV09XCJkYXRhLkdyaWRGaWx0ZXJCYXJGaWVsZFwiPjwvYXBwLXpmb3JtPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWx0ZXItYnV0dG9uc1wiIFtuZ0NsYXNzXT1cImRhdGEuQ2xhc3NcIj5cclxuICAgICAgICAgICAgICAgIDxpb24tYnV0dG9uIGZpbGw9XCJzb2xpZFwiIHNpemU9XCJkZWZhdWx0XCIgc3Ryb25nPVwidHJ1ZVwiIGNvbG9yPVwicHJpbWFyeVwiIChjbGljayk9XCJzZWFyY2goKVwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZmEtaWNvbiBpY29uPVwic2VhcmNoXCI+PC9mYS1pY29uPlxyXG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImJ0bi1sYWJlbCBpb24tdGV4dC1jYXBpdGFsaXplXCI+e3sgZ2V0VG9vbEJhckl0ZW1MYWJlbE5hbWUoJ1NlYXJjaCcpIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9pb24tYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGlvbi1idXR0b24gZmlsbD1cIm91dGxpbmVcIiBzaXplPVwiZGVmYXVsdFwiIHN0cm9uZz1cInRydWVcIiBjb2xvcj1cInByaW1hcnlcIiAoY2xpY2spPVwiY2FuY2VsRWRpdCgpXCIgKm5nSWY9XCJkYXRhLklzU2hvd0dyaWRDYW5jZWxGaWx0ZXJCdXR0b25cIj5cclxuICAgICAgICAgICAgICAgICAgPGZhLWljb24gaWNvbj1cInRpbWVzXCI+PC9mYS1pY29uPlxyXG4gICAgICAgICAgICAgICAgPC9pb24tYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGlvbi1idXR0b24gZmlsbD1cInNvbGlkXCIgc2l6ZT1cImRlZmF1bHRcIiBzdHJvbmc9XCJ0cnVlXCIgW25nQ2xhc3NdPVwiaXNTaG93QWR2RmlsdGVyID8gJ3RvZ2dsZU9uJyA6ICd0b2dnbGVPZmYnXCIgKGNsaWNrKT1cImFkdmFuY2VkU2VhcmNoKClcIiAqbmdJZj1cImRhdGEuR3JpZEFkdkZpbHRlckJhckZpZWxkXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxmYS1pY29uIGljb249XCJzbGlkZXJzLWhcIj48L2ZhLWljb24+XHJcbiAgICAgICAgICAgICAgICA8L2lvbi1idXR0b24+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8YXBwLXpmb3JtICpuZ0lmPVwiZGF0YS5HcmlkQWR2RmlsdGVyQmFyRmllbGRcIiBjbGFzcz1cInRvLXByZWxvYWQtdGhlLWZpZWxkc1wiIFtncm91cF09XCJhZHZmaWx0ZXJHcm91cFwiIFtmaWVsZE5hbWVdPVwiZGF0YS5HcmlkQWR2RmlsdGVyQmFyRmllbGRcIiBzdHlsZT1cImRpc3BsYXk6bm9uZTtcIj48L2FwcC16Zm9ybT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFkdi1maWx0ZXItY29udGFpbmVyXCIgKm5nSWY9XCJpc1Nob3dBZHZGaWx0ZXJcIiBbQGhpZGVBbmRTaG93QW5pbWF0aW9uXT5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWR2LWZpbHRlci1zZXBlcmF0b3JcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuPlxyXG4gICAgICAgICAgICAgICAgICB7eyBnZXRUb29sQmFySXRlbUxhYmVsTmFtZSgnQWR2YW5jZWQgU2VhcmNoJykgfX1cclxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8YXBwLXpmb3JtIGNsYXNzPVwiYWR2ZmlsdGVyLWZpZWxkc1wiIFtncm91cF09XCJhZHZmaWx0ZXJHcm91cFwiIFtmaWVsZE5hbWVdPVwiZGF0YS5HcmlkQWR2RmlsdGVyQmFyRmllbGRcIj48L2FwcC16Zm9ybT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgIDxrZW5kby1ncmlkLWNoZWNrYm94LWNvbHVtbiAqbmdJZj1cIiEhZGF0YS5TZWxlY3RPcHRpb25zXCIgW3dpZHRoXT1cIjYwXCIgc2hvd1NlbGVjdEFsbD1cInRydWVcIiBbY29sdW1uTWVudV09XCJ0cnVlXCI+XHJcbiAgICAgICAgPC9rZW5kby1ncmlkLWNoZWNrYm94LWNvbHVtbj5cclxuICAgICAgICA8a2VuZG8tZ3JpZC1jb2x1bW4gW3N0eWxlXT1cImdldEdyaWRDb2x1bW5TdHlsZSgpXCIgY2xhc3M9XCJlMXRhZy1zdHlsZTNcIiAqbmdGb3I9XCJsZXQgY29sIG9mIGNvbHVtbnM7XCIgW2ZpZWxkXT1cImNvbC5maWVsZFwiIFt0aXRsZV09XCJjb2wudGl0bGVcIiBbd2lkdGhdPVwiY29sLndpZHRoXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgW21pblJlc2l6YWJsZVdpZHRoXT1cImNvbC5taW5SZXNpemFibGVXaWR0aFwiIFtmaWx0ZXJdPVwiY29sLmZpbHRlclwiIFtmaWx0ZXJhYmxlXT1cImZpbHRlcmFibGUoY29sLmVuYWJsZUZpbHRlcmluZylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBbc29ydGFibGVdPVwic29ydGFibGUoY29sLmVuYWJsZVNvcnRpbmcpXCIgW2hlYWRlclN0eWxlXT1cImdldEdyaWRIZWFkZXJTdHlsZSgpXCIgaGVhZGVyQ2xhc3M9XCJlMXRhZy1zdHlsZTRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBbZm9vdGVyU3R5bGVdPVwiZ2V0R3JpZEZvb3RlclN0eWxlKClcIiBmb290ZXJDbGFzcz1cImUxdGFnLXN0eWxlOVwiIFtoaWRkZW5dPVwiY29sLmhpZGRlblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtYXRdPVwiY29sLmZvcm1hdFwiIFtjbGFzc109XCJjb2wuQ2xhc3NcIiBbbG9ja2VkXT1cImxvY2tlZChjb2wpXCIgZWRpdG9yPVwibnVtZXJpY1wiIFtjb2x1bW5NZW51XT1cIiFjb2wuZGlzYWJsZUNvbHVtbk1lbnVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBbZWRpdG9yXT1cImNvbC5lZGl0b3JUeXBlXCI+XHJcbiAgICAgICAgICA8ZGl2IFtuZ1N3aXRjaF09XCJ0cnVlXCI+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nU3dpdGNoQ2FzZT1cImNvbC5maWVsZFR5cGUgPT09ICdudW1iZXInXHJcbiAgICAgICAgICAgICAgIHx8IGNvbC5maWVsZFR5cGUgPT09ICdjdXJyZW5jeSdcclxuICAgICAgICAgICAgICAgfHwgY29sLmZpZWxkVHlwZSA9PT0gJ3pudW1lcmljJ1wiPlxyXG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBrZW5kb0dyaWRGaWx0ZXJDZWxsVGVtcGxhdGUgbGV0LWZpbHRlciBsZXQtY29sdW1uPVwiY29sdW1uXCI+XHJcbiAgICAgICAgICAgICAgICA8a2VuZG8tZ3JpZC1udW1lcmljLWZpbHRlci1jZWxsIFtzaG93T3BlcmF0b3JzXT1cImRhdGEuSXNTaG93R3JpZEZpbHRlck9wZXJhdG9yXCIgW2NvbHVtbl09XCJjb2x1bW5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZmlsdGVyXT1cImZpbHRlclwiIG9wZXJhdG9yPVwiZXFcIj5cclxuICAgICAgICAgICAgICAgICAgPGtlbmRvLWZpbHRlci1lcS1vcGVyYXRvcj48L2tlbmRvLWZpbHRlci1lcS1vcGVyYXRvcj5cclxuICAgICAgICAgICAgICAgICAgPGtlbmRvLWZpbHRlci1uZXEtb3BlcmF0b3I+PC9rZW5kby1maWx0ZXItbmVxLW9wZXJhdG9yPlxyXG4gICAgICAgICAgICAgICAgICA8a2VuZG8tZmlsdGVyLWx0LW9wZXJhdG9yPjwva2VuZG8tZmlsdGVyLWx0LW9wZXJhdG9yPlxyXG4gICAgICAgICAgICAgICAgICA8a2VuZG8tZmlsdGVyLWx0ZS1vcGVyYXRvcj48L2tlbmRvLWZpbHRlci1sdGUtb3BlcmF0b3I+XHJcbiAgICAgICAgICAgICAgICAgIDxrZW5kby1maWx0ZXItZ3Qtb3BlcmF0b3I+PC9rZW5kby1maWx0ZXItZ3Qtb3BlcmF0b3I+XHJcbiAgICAgICAgICAgICAgICAgIDxrZW5kby1maWx0ZXItZ3RlLW9wZXJhdG9yPjwva2VuZG8tZmlsdGVyLWd0ZS1vcGVyYXRvcj5cclxuICAgICAgICAgICAgICAgICAgPGtlbmRvLWZpbHRlci1pc251bGwtb3BlcmF0b3I+PC9rZW5kby1maWx0ZXItaXNudWxsLW9wZXJhdG9yPlxyXG4gICAgICAgICAgICAgICAgICA8a2VuZG8tZmlsdGVyLWlzbm90bnVsbC1vcGVyYXRvcj48L2tlbmRvLWZpbHRlci1pc25vdG51bGwtb3BlcmF0b3I+XHJcbiAgICAgICAgICAgICAgICA8L2tlbmRvLWdyaWQtbnVtZXJpYy1maWx0ZXItY2VsbD5cclxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiAqbmdTd2l0Y2hDYXNlPVwiY29sLmZpZWxkVHlwZSA9PSAnemRhdGUnXHJcbiAgICAgICAgICAgICAgIHx8IGNvbC5maWVsZFR5cGUgPT09ICd6dGltZSdcclxuICAgICAgICAgICAgICAgfHwgY29sLmZpZWxkVHlwZSA9PT0gJ3pkYXRldGltZSdcclxuICAgICAgICAgICAgICAgfHwgY29sLmZpZWxkVHlwZSA9PT0gJ3p1aWRhdGV0aW1lJ1wiPlxyXG4gICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJjb2wuZmlsdGVyQnlEYXRlUmFuZ2UgPT09IHRydWVcIj5cclxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBrZW5kb0dyaWRGaWx0ZXJDZWxsVGVtcGxhdGUgbGV0LWZpbHRlciBsZXQtY29sdW1uPVwiY29sdW1uXCIgb3BlcmF0b3I9XCJsdGVcIj5cclxuICAgICAgICAgICAgICAgICAgPGRhdGUtcmFuZ2UtZmlsdGVyLWNlbGwgW3Nob3dPcGVyYXRvcnNdPVwiZGF0YS5Jc1Nob3dHcmlkRmlsdGVyT3BlcmF0b3JcIiBjbGFzcz1cImRhdGUtcmFuZ2UtZmlsdGVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2ZpbHRlcl09XCJmaWx0ZXJcIiBbZmllbGRdPVwiY29sLmZpZWxkXCIgW2RhdGFdPVwiZGF0YVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxrZW5kby1maWx0ZXItbHQtb3BlcmF0b3I+PC9rZW5kby1maWx0ZXItbHQtb3BlcmF0b3I+XHJcbiAgICAgICAgICAgICAgICAgICAgPGtlbmRvLWZpbHRlci1sdGUtb3BlcmF0b3I+PC9rZW5kby1maWx0ZXItbHRlLW9wZXJhdG9yPlxyXG4gICAgICAgICAgICAgICAgICAgIDxrZW5kby1maWx0ZXItZ3Qtb3BlcmF0b3I+PC9rZW5kby1maWx0ZXItZ3Qtb3BlcmF0b3I+XHJcbiAgICAgICAgICAgICAgICAgICAgPGtlbmRvLWZpbHRlci1ndGUtb3BlcmF0b3I+PC9rZW5kby1maWx0ZXItZ3RlLW9wZXJhdG9yPlxyXG4gICAgICAgICAgICAgICAgICAgIDxrZW5kby1maWx0ZXItaXNudWxsLW9wZXJhdG9yPjwva2VuZG8tZmlsdGVyLWlzbnVsbC1vcGVyYXRvcj5cclxuICAgICAgICAgICAgICAgICAgICA8a2VuZG8tZmlsdGVyLWlzbm90bnVsbC1vcGVyYXRvcj48L2tlbmRvLWZpbHRlci1pc25vdG51bGwtb3BlcmF0b3I+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGF0ZS1yYW5nZS1maWx0ZXItY2VsbD5cclxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImNvbC5maWx0ZXJCeURhdGVSYW5nZSA9PT0gZmFsc2VcIj5cclxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBrZW5kb0dyaWRGaWx0ZXJDZWxsVGVtcGxhdGUgbGV0LWZpbHRlciBsZXQtY29sdW1uPVwiY29sdW1uXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxrZW5kby1ncmlkLWRhdGUtZmlsdGVyLWNlbGwgW3Nob3dPcGVyYXRvcnNdPVwiZGF0YS5Jc1Nob3dHcmlkRmlsdGVyT3BlcmF0b3JcIiBbY29sdW1uXT1cImNvbHVtblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2ZpbHRlcl09XCJmaWx0ZXJcIiBvcGVyYXRvcj1cImx0ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxrZW5kby1maWx0ZXItbHQtb3BlcmF0b3I+PC9rZW5kby1maWx0ZXItbHQtb3BlcmF0b3I+XHJcbiAgICAgICAgICAgICAgICAgICAgPGtlbmRvLWZpbHRlci1sdGUtb3BlcmF0b3I+PC9rZW5kby1maWx0ZXItbHRlLW9wZXJhdG9yPlxyXG4gICAgICAgICAgICAgICAgICAgIDxrZW5kby1maWx0ZXItZ3Qtb3BlcmF0b3I+PC9rZW5kby1maWx0ZXItZ3Qtb3BlcmF0b3I+XHJcbiAgICAgICAgICAgICAgICAgICAgPGtlbmRvLWZpbHRlci1ndGUtb3BlcmF0b3I+PC9rZW5kby1maWx0ZXItZ3RlLW9wZXJhdG9yPlxyXG4gICAgICAgICAgICAgICAgICAgIDxrZW5kby1maWx0ZXItaXNudWxsLW9wZXJhdG9yPjwva2VuZG8tZmlsdGVyLWlzbnVsbC1vcGVyYXRvcj5cclxuICAgICAgICAgICAgICAgICAgICA8a2VuZG8tZmlsdGVyLWlzbm90bnVsbC1vcGVyYXRvcj48L2tlbmRvLWZpbHRlci1pc25vdG51bGwtb3BlcmF0b3I+XHJcbiAgICAgICAgICAgICAgICAgIDwva2VuZG8tZ3JpZC1kYXRlLWZpbHRlci1jZWxsPlxyXG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nU3dpdGNoQ2FzZT1cImNvbC5maWVsZFR5cGUgPT09ICdjaGVja2JveCdcIj5cclxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUga2VuZG9HcmlkRmlsdGVyQ2VsbFRlbXBsYXRlIGxldC1maWx0ZXIgbGV0LWNvbHVtbj1cImNvbHVtblwiPlxyXG4gICAgICAgICAgICAgICAgPGtlbmRvLWdyaWQtYm9vbGVhbi1maWx0ZXItY2VsbCBbY29sdW1uXT1cImNvbHVtblwiIFtmaWx0ZXJdPVwiZmlsdGVyXCIgb3BlcmF0b3I9XCJlcVwiPlxyXG4gICAgICAgICAgICAgICAgPC9rZW5kby1ncmlkLWJvb2xlYW4tZmlsdGVyLWNlbGw+XHJcbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nU3dpdGNoRGVmYXVsdD5cclxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUga2VuZG9HcmlkRmlsdGVyQ2VsbFRlbXBsYXRlIGxldC1maWx0ZXIgbGV0LWNvbHVtbj1cImNvbHVtblwiPlxyXG4gICAgICAgICAgICAgICAgPGtlbmRvLWdyaWQtc3RyaW5nLWZpbHRlci1jZWxsIFtzaG93T3BlcmF0b3JzXT1cImRhdGEuSXNTaG93R3JpZEZpbHRlck9wZXJhdG9yXCIgW2NvbHVtbl09XCJjb2x1bW5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmaWx0ZXJdPVwiZmlsdGVyXCIgb3BlcmF0b3I9XCJjb250YWluc1wiPlxyXG4gICAgICAgICAgICAgICAgICA8a2VuZG8tZmlsdGVyLWNvbnRhaW5zLW9wZXJhdG9yPjwva2VuZG8tZmlsdGVyLWNvbnRhaW5zLW9wZXJhdG9yPlxyXG4gICAgICAgICAgICAgICAgICA8a2VuZG8tZmlsdGVyLWVxLW9wZXJhdG9yPjwva2VuZG8tZmlsdGVyLWVxLW9wZXJhdG9yPlxyXG4gICAgICAgICAgICAgICAgICA8a2VuZG8tZmlsdGVyLW5lcS1vcGVyYXRvcj48L2tlbmRvLWZpbHRlci1uZXEtb3BlcmF0b3I+XHJcbiAgICAgICAgICAgICAgICAgIDxrZW5kby1maWx0ZXItc3RhcnRzd2l0aC1vcGVyYXRvcj48L2tlbmRvLWZpbHRlci1zdGFydHN3aXRoLW9wZXJhdG9yPlxyXG4gICAgICAgICAgICAgICAgICA8a2VuZG8tZmlsdGVyLWVuZHN3aXRoLW9wZXJhdG9yPjwva2VuZG8tZmlsdGVyLWVuZHN3aXRoLW9wZXJhdG9yPlxyXG4gICAgICAgICAgICAgICAgICA8a2VuZG8tZmlsdGVyLWlzbnVsbC1vcGVyYXRvcj48L2tlbmRvLWZpbHRlci1pc251bGwtb3BlcmF0b3I+XHJcbiAgICAgICAgICAgICAgICAgIDxrZW5kby1maWx0ZXItaXNub3RudWxsLW9wZXJhdG9yPjwva2VuZG8tZmlsdGVyLWlzbm90bnVsbC1vcGVyYXRvcj5cclxuICAgICAgICAgICAgICAgIDwva2VuZG8tZ3JpZC1zdHJpbmctZmlsdGVyLWNlbGw+XHJcbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwhLS0gR3JpZCBFZGl0IFRlbXBsYXRlIC0tPlxyXG4gICAgICAgICAgPG5nLXRlbXBsYXRlIGtlbmRvR3JpZEVkaXRUZW1wbGF0ZSAqbmdJZj1cImRhdGEuRW5hYmxlR3JpZENvbW1hbmQgXCIgbGV0LWRhdGFJdGVtPVwiZGF0YUl0ZW1cIiBsZXQtY29sdW1uPVwiY29sXCIgbGV0LWZvcm1Hcm91cD1cImZvcm1Hcm91cFwiIGxldC1pc05ldz1cImlzTmV3XCI+XHJcbiAgICAgICAgICAgIDxkaXYgW25nU3dpdGNoXT1cImNvbC5maWVsZFR5cGVcIj5cclxuICAgICAgICAgICAgICA8ZGl2ICpuZ1N3aXRjaENhc2U9XCInbnVtYmVyJ1wiPlxyXG4gICAgICAgICAgICAgICAgPGtlbmRvLW51bWVyaWN0ZXh0Ym94ICNjZWxsQW5jaG9yIFtmb3JtQ29udHJvbF09XCJmb3JtR3JvdXAuZ2V0KGNvbC5maWVsZClcIj48L2tlbmRvLW51bWVyaWN0ZXh0Ym94PlxyXG4gICAgICAgICAgICAgICAgPGtlbmRvLXBvcHVwIFthbmNob3JdPVwiY2VsbEFuY2hvci5udW1lcmljSW5wdXRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZm9ybUdyb3VwLmdldChjb2wuZmllbGQpLmludmFsaWQgJiYgIShpc05ldyAmJiBmb3JtR3JvdXAuZ2V0KGNvbC5maWVsZCkudW50b3VjaGVkKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9wdXBDbGFzcz1cImstd2lkZ2V0IGstdG9vbHRpcCBrLXRvb2x0aXAtdmFsaWRhdGlvbiBrLWludmFsaWQtbXNnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cInBhZGRpbmctbGVmdDogMnB4OyBvcGFjaXR5OiAwLjU7XCI+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiay1pY29uIGstaS13YXJuaW5nXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8aW9uLWxhYmVsIHN0eWxlPVwicGFkZGluZy10b3A6IDFweDsgcGFkZGluZy1sZWZ0OiAzcHg7XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImZvcm1Hcm91cC5nZXQoY29sLmZpZWxkKS5pbnZhbGlkICYmICFmb3JtR3JvdXAuZ2V0KGNvbC5maWVsZCkudW50b3VjaGVkICYmIGZvcm1Hcm91cC5nZXQoY29sLmZpZWxkKS5lcnJvcnM/LnJlcXVpcmVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3sgY29sLk5hbWUgfX0gcmVxdWlyZWQuXHJcbiAgICAgICAgICAgICAgICAgIDwvaW9uLWxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICA8aW9uLWxhYmVsIHN0eWxlPVwicGFkZGluZy10b3A6IDFweDsgcGFkZGluZy1sZWZ0OiAzcHg7XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImZvcm1Hcm91cC5nZXQoY29sLmZpZWxkKS5pbnZhbGlkICYmICFmb3JtR3JvdXAuZ2V0KGNvbC5maWVsZCkudW50b3VjaGVkICYmIGZvcm1Hcm91cC5nZXQoY29sLmZpZWxkKS5lcnJvcnM/LnBhdHRlcm5cIj5cclxuICAgICAgICAgICAgICAgICAgICB7eyBjb2wuVmFsaWRhdG9yTWVzc2FnZSA/IGNvbC5WYWxpZGF0b3JNZXNzYWdlIDogXCJQbGVhc2UgY2hlY2sgdGhlIGlucHV0IHZhbHVlLlwiIH19XHJcbiAgICAgICAgICAgICAgICAgIDwvaW9uLWxhYmVsPlxyXG4gICAgICAgICAgICAgICAgPC9rZW5kby1wb3B1cD5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2ICpuZ1N3aXRjaERlZmF1bHQ+XHJcbiAgICAgICAgICAgICAgICA8a2VuZG8tdGV4dGJveCAjY2VsbEFuY2hvciBbZm9ybUNvbnRyb2xdPVwiZm9ybUdyb3VwLmdldChjb2wuZmllbGQpXCI+PC9rZW5kby10ZXh0Ym94PlxyXG4gICAgICAgICAgICAgICAgPGtlbmRvLXBvcHVwIFthbmNob3JdPVwiY2VsbEFuY2hvci5pbnB1dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJmb3JtR3JvdXAuZ2V0KGNvbC5maWVsZCkuaW52YWxpZCAmJiAhKGlzTmV3ICYmIGZvcm1Hcm91cC5nZXQoY29sLmZpZWxkKS51bnRvdWNoZWQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3B1cENsYXNzPVwiay13aWRnZXQgay10b29sdGlwIGstdG9vbHRpcC12YWxpZGF0aW9uIGstaW52YWxpZC1tc2dcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwicGFkZGluZy1sZWZ0OiAycHg7IG9wYWNpdHk6IDAuNTtcIj5cclxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJrLWljb24gay1pLXdhcm5pbmdcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDwhLS08aW9uLWxhYmVsIHN0eWxlPVwicGFkZGluZy10b3A6IDFweDsgcGFkZGluZy1sZWZ0OiAzcHg7XCI+e3sgY29sLk5hbWUgfX0gaXMgcmVxdWlyZWQuPC9pb24tbGFiZWw+LS0+XHJcbiAgICAgICAgICAgICAgICAgIC1sXHJcblxyXG4gICAgICAgICAgICAgICAgICA8aW9uLWxhYmVsIHN0eWxlPVwicGFkZGluZy10b3A6IDFweDsgcGFkZGluZy1sZWZ0OiAzcHg7XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImZvcm1Hcm91cC5nZXQoY29sLmZpZWxkKS5pbnZhbGlkICYmICFmb3JtR3JvdXAuZ2V0KGNvbC5maWVsZCkudW50b3VjaGVkICYmIGZvcm1Hcm91cC5nZXQoY29sLmZpZWxkKS5lcnJvcnM/LnJlcXVpcmVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3sgY29sLk5hbWUgfX0gcmVxdWlyZWQuXHJcbiAgICAgICAgICAgICAgICAgIDwvaW9uLWxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICA8aW9uLWxhYmVsIHN0eWxlPVwicGFkZGluZy10b3A6IDFweDsgcGFkZGluZy1sZWZ0OiAzcHg7XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImZvcm1Hcm91cC5nZXQoY29sLmZpZWxkKS5pbnZhbGlkICYmICFmb3JtR3JvdXAuZ2V0KGNvbC5maWVsZCkudW50b3VjaGVkICYmIGZvcm1Hcm91cC5nZXQoY29sLmZpZWxkKS5lcnJvcnM/LnBhdHRlcm5cIj5cclxuICAgICAgICAgICAgICAgICAgICB7eyBjb2wuVmFsaWRhdG9yTWVzc2FnZSA/IGNvbC5WYWxpZGF0b3JNZXNzYWdlIDogXCJQbGVhc2UgY2hlY2sgdGhlIGlucHV0IHZhbHVlLlwiIH19XHJcbiAgICAgICAgICAgICAgICAgIDwvaW9uLWxhYmVsPlxyXG4gICAgICAgICAgICAgICAgPC9rZW5kby1wb3B1cD5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgPG5nLXRlbXBsYXRlIGtlbmRvR3JpZENlbGxUZW1wbGF0ZSBsZXQtZGF0YUl0ZW0gbGV0LXJvd0luZGV4PVwicm93SW5kZXhcIj5cclxuICAgICAgICAgICAgPGRpdiBzdHlsZT1cIm1hcmdpbjogMXB4IDA7XCIgKm5nSWY9XCIhY29sLmNsaWNrYWJsZUljb25zICYmIGNvbC5pc0VkaXRhYmxlSW5HcmlkICE9PSB0cnVlXCJcclxuICAgICAgICAgICAgICAgICBbbmdTd2l0Y2hdPVwiY29sLmZpZWxkVHlwZVwiIFtuZ0NsYXNzXT1cImdldENsYXNzKGRhdGFJdGVtLCBjb2wpXCIgW3N0eWxlXT1cImdldENlbGxTdHlsZShjb2wsIGRhdGFJdGVtKVwiIFthdHRyLmRhdGEtaWRdPVwiZGF0YUl0ZW0uSWRcIiBbYXR0ci5jb2x1bW4tbmFtZV09XCJjb2wuZmllbGRcIlxyXG4gICAgICAgICAgICAgICAgIChtb3VzZWVudGVyKT1cInNob3dQb3BPdmVyKGNvbCwgJGV2ZW50KVwiIChtb3VzZWxlYXZlKT1cImNsb3NlUG9wT3ZlcigkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIid6ZGF0ZSdcIiBjbGFzcz1cImdyaWQtY2VsbC1kYXRhXCI+XHJcbiAgICAgICAgICAgICAgICB7eyBkYXRhSXRlbVtjb2wuZmllbGRdIHwgZGF0ZTogJ2RkL01NL3l5eXknIH19XHJcbiAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInenRpbWUnXCIgY2xhc3M9XCJncmlkLWNlbGwtZGF0YVwiPlxyXG4gICAgICAgICAgICAgICAge3sgZGF0YUl0ZW1bY29sLmZpZWxkXSB8IGRhdGU6ICdISDptbScgfX1cclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIid6c2hvcnRkYXRlJ1wiIGNsYXNzPVwiZ3JpZC1jZWxsLWRhdGFcIj5cclxuICAgICAgICAgICAgICAgIHt7IGRhdGFJdGVtW2NvbC5maWVsZF0gfCBkYXRlOiAnTU1NIHl5eXknIH19XHJcbiAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInemRhdGV0aW1lJ1wiIGNsYXNzPVwiZ3JpZC1jZWxsLWRhdGFcIj5cclxuICAgICAgICAgICAgICAgIHt7IGRhdGFJdGVtW2NvbC5maWVsZF0gfCBkYXRlOiAnZGQvTU0veXl5eSBoaDptbTpzcyBhYScgfX1cclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIid6dWlkYXRldGltZSdcIiBjbGFzcz1cImdyaWQtY2VsbC1kYXRhXCI+XHJcbiAgICAgICAgICAgICAgICB7eyBkYXRhSXRlbVtjb2wuZmllbGRdIHwgZGF0ZTogJ2RkL01NL3l5eXkgaGg6bW06c3MgYWEnIH19XHJcbiAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInbnVtYmVyJ1wiIGNsYXNzPVwiZ3JpZC1jZWxsLWRhdGFcIj5cclxuICAgICAgICAgICAgICAgIHt7IGRhdGFJdGVtW2NvbC5maWVsZF0gfCBudW1iZXIgfX1cclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIidjdXJyZW5jeSdcIiBjbGFzcz1cImdyaWQtY2VsbC1kYXRhXCI+XHJcbiAgICAgICAgICAgICAgICB7eyBkYXRhSXRlbVtjb2wuZmllbGRdIHwgbnVtYmVyOiBnZXRGb3JtYXQoY29sLCAnMS4yLTInKSB9fVxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ3pudW1lcmljJ1wiIGNsYXNzPVwiZ3JpZC1jZWxsLWRhdGFcIj5cclxuICAgICAgICAgICAgICAgIHt7IGRhdGFJdGVtW2NvbC5maWVsZF0gfCBudW1iZXI6IGdldEZvcm1hdChjb2wpIH19XHJcbiAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCIndXJsJ1wiIHN0eWxlPVwiY29sb3I6IGJsdWU7IGN1cnNvcjogcG9pbnRlcjsgdGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTtcIiBjbGFzcz1cImdyaWQtY2VsbC1kYXRhXCI+XHJcbiAgICAgICAgICAgICAgICB7eyBkYXRhSXRlbVtjb2wuZmllbGRdIH19XHJcbiAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaERlZmF1bHQ+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVwibWFyZ2luOiA1cHggMDtcIiAqbmdJZj1cImNvbC5ncmlkQ2VsbFJlcGxhY2VWYWx1ZSAmJiBnZXRJY29uTmFtZShjb2wuZ3JpZENlbGxSZXBsYWNlVmFsdWUsIGRhdGFJdGVtW2NvbC5maWVsZF0pICE9PSAnJ1wiPlxyXG4gICAgICAgICAgICAgICAgICA8ZmEtaWNvbiBbaWNvbl09XCJnZXRJY29uTmFtZShjb2wuZ3JpZENlbGxSZXBsYWNlVmFsdWUsIGRhdGFJdGVtW2NvbC5maWVsZF0pXCI+PC9mYS1pY29uPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiIWNvbC5ncmlkQ2VsbFJlcGxhY2VWYWx1ZVwiIFtuZ1N3aXRjaF09XCJjZWxsU3R5bGVDb25kaXRpb24oY29sLCBkYXRhSXRlbVtjb2wuZmllbGRdKVwiPlxyXG4gICAgICAgICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPXRydWU+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNlbGxTdHlsZUNvbmRpdGlvbkRlZmF1bHRcIiBbc3R5bGVdPVwic2V0Q2VsbFN0eWxlQ29uZGl0aW9uKGNvbCwgZGF0YUl0ZW1bY29sLmZpZWxkXSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZ3JpZC1jZWxsLWRhdGFcIj57eyBkYXRhSXRlbVtjb2wuZmllbGRdIH19IDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hEZWZhdWx0PlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZ3JpZC1jZWxsLWRhdGFcIj57eyBkYXRhSXRlbVtjb2wuZmllbGRdIH19IDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPCEtLSA8c3BhbiAqbmdJZj1cIiEhY29sLm5hdmlnYXRlVG9cIiAoY2xpY2spPVwib25OYXZpZ2F0ZVRvKCRldmVudCwgY29sLCBkYXRhSXRlbSwgZGF0YUl0ZW1bY29sLmZpZWxkXSlcIj5cclxuICAgICAgICAgICAgPGlvbi1idXR0b24gY29sb3I9XCJsaWdodFwiIHNpemU9XCJzbWFsbFwiPlxyXG4gICAgICAgICAgICB7eyBjb2wuQ2xpY2thYmxlSWNvbnMgfX1cclxuICAgICAgICAgICAgPGlvbi1pY29uIHNsb3Q9IFwiZW5kXCIgbmFtZT1cImFycm93LWZvcndhcmRcIj48L2lvbi1pY29uPlxyXG4gICAgICAgICAgICA8L2lvbi1idXR0b24+XHJcbiAgICAgICAgICAgIDwvc3Bhbj4gLS0+XHJcbiAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJtYXJnaW46IDVweCAwO1wiICpuZ0lmPVwiY29sLmlzRWRpdGFibGVJbkdyaWQgPT09IHRydWUgJiYgaXNJbmxpbmVGb3JtR3JvdXBIYXNWYWx1ZSgpICYmICFpc0lubGluZUVkaXRJbnB1dEZpZWxkTG9hZGluZyAmJiAhY29sLmdyaWRDZWxsUmVwbGFjZVZhbHVlXCIgW3N0eWxlXT1cImNvbXBvbmVudFByb3BlcnRpZXMuc3R5bGUuc3R5bGU1XCJcclxuICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJnZXRDbGFzcyhkYXRhSXRlbSwgY29sKVwiIGNsYXNzPVwiZTF0YWctc3R5bGU1XCIgW3N0eWxlXT1cImdldENlbGxTdHlsZUZvcklubGluZUVkaXQoY29sLCBkYXRhSXRlbSwgcm93SW5kZXgpXCI+XHJcbiAgICAgICAgICAgICAgPGFwcC16aW5wdXQtY29udGFpbmVyIFtkYXRhXT1cImdldElubGluZUZpZWxkKGNvbC5maWVsZClcIiBbZ3JvdXBdPVwiZ3JvdXBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZm9ybV09XCJnZXRJbmxpbmVGb3JtKGRhdGFJdGVtLCByb3dJbmRleClcIiBbY29udGFpbmVyRmllbGRdPVwiY29udGFpbmVyRmllbGRcIiBbc3R5bGVdPVwiY29tcG9uZW50UHJvcGVydGllcy5zdHlsZS5zdHlsZTZcIiBjbGFzcz1cImUxdGFnLXN0eWxlNlwiPlxyXG4gICAgICAgICAgICAgIDwvYXBwLXppbnB1dC1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8c3BhbiBzdHlsZT1cIm1hcmdpbi10b3A6IDEwcHg7XCIgKm5nRm9yPVwibGV0IGljb24gb2YgY29sLmNsaWNrYWJsZUljb25zXCI+XHJcbiAgICAgICAgICAgICAgPHNwYW4gW25nQ2xhc3NdPVwiaWNvbi5DbGFzcyA/IGljb24uQ2xhc3MgOiAnJ1wiICpuZ0lmPVwiISFpY29uICYmICghIWRhdGFJdGVtLldGU19TdGF0dXNDb2RlICYmICEhaWNvbilcclxuICAgICAgICAgICAgICA/IGRhdGFJdGVtLldGU19TdGF0dXNDb2RlICE9PSBpY29uLldGU19TdGF0dXNDb2RlXHJcbiAgICAgICAgICAgICAgOiB0cnVlO1xyXG4gICAgICAgICAgICBlbHNlIGRpc2FibGVkQnV0dG9uXCIgKGNsaWNrKT1cIm9uQnRuQ2xpY2soJGV2ZW50LCBpY29uLCBkYXRhSXRlbSwgZGF0YUl0ZW1bY29sLmZpZWxkXSlcIj5cclxuICAgICAgICAgICAgICAgIHt7aWNvbi5OYW1lIHx8IGRhdGFJdGVtW2NvbC5maWVsZF19fSA8ZmEtaWNvbiBbaWNvbl09XCJpY29uLkljb25cIiBzdHlsZT1cInBhZGRpbmc6IDRweCA2cHg7XCI+XHJcbiAgICAgICAgICAgICAgICA8L2ZhLWljb24+XHJcbiAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZGlzYWJsZWRCdXR0b24+XHJcbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICA8IS0tIDxzdHJvbmc+e3sgZGF0YUl0ZW1bY29sLmZpZWxkXSB9fTwvc3Ryb25nPiAtLT5cclxuICAgICAgICAgICAgPCEtLSA8c3BhbiBjbGFzcz1cInt7ZGF0YUl0ZW0uRGlzY29udGludWVkID8gJ2Rpc2NvbnRpbnVlZCcgOiAnYWN0aXZlJ319XCI+XHJcbiAgICAgICAgICAgICAge3tkYXRhSXRlbS5EaXNjb250aW51ZWQgPyBcImRpc2NvbnRpbnVlZFwiIDogXCJhY3RpdmVcIn19XHJcbiAgICAgICAgICAgIDwvc3Bhbj4gLS0+XHJcbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgPG5nLXRlbXBsYXRlIGtlbmRvR3JpZEZvb3RlclRlbXBsYXRlIGxldC1jb2x1bW4gbGV0LWNvbHVtbkluZGV4PVwiY29sdW1uSW5kZXhcIiAqbmdJZj1cImRhdGEuRW5hYmxlQWdncmVnYXRlXCI+XHJcbiAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJtYXJnaW46IDVweCAwO1wiIFtuZ1N3aXRjaF09XCJjb2wuZmllbGRUeXBlXCIgW3N0eWxlXT1cImNvbXBvbmVudFByb3BlcnRpZXMuc3R5bGUuc3R5bGU3XCIgY2xhc3M9XCJlMXRhZy1zdHlsZTdcIj5cclxuICAgICAgICAgICAgICB7e2NvbC5hZ2dyZWdhdGVUeXBlfX1cclxuICAgICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ3pkYXRlJ1wiPlxyXG4gICAgICAgICAgICAgICAge3sgY29sLmFnZ3JlZ2F0ZVZhbHVlIHwgZGF0ZTogJ2RkL01NL3l5eXknIH19XHJcbiAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInenRpbWUnXCI+XHJcbiAgICAgICAgICAgICAgICB7eyBjb2wuYWdncmVnYXRlVmFsdWUgfCBkYXRlOiAnSEg6bW0nIH19XHJcbiAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInenNob3J0ZGF0ZSdcIj5cclxuICAgICAgICAgICAgICAgIHt7IGNvbC5hZ2dyZWdhdGVWYWx1ZSB8IGRhdGU6ICdNTU0geXl5eScgfX1cclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIid6ZGF0ZXRpbWUnXCI+XHJcbiAgICAgICAgICAgICAgICB7eyBjb2wuYWdncmVnYXRlVmFsdWUgfCBkYXRlOiAnZGQvTU0veXl5eSBoaDptbTpzcyBhYScgfX1cclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIid6dWlkYXRldGltZSdcIj5cclxuICAgICAgICAgICAgICAgIHt7IGNvbC5hZ2dyZWdhdGVWYWx1ZSB8IGRhdGU6ICdkZC9NTS95eXl5IGhoOm1tOnNzIGFhJyB9fVxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ251bWJlcidcIj5cclxuICAgICAgICAgICAgICAgIHt7IGNvbC5hZ2dyZWdhdGVWYWx1ZSB8IG51bWJlciB9fVxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ2N1cnJlbmN5J1wiPlxyXG4gICAgICAgICAgICAgICAge3sgY29sLmFnZ3JlZ2F0ZVZhbHVlIHwgbnVtYmVyOiBnZXRGb3JtYXQoY29sLCAnMS4yLjInKSB9fVxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ3pudW1lcmljJ1wiPlxyXG4gICAgICAgICAgICAgICAge3sgY29sLmFnZ3JlZ2F0ZVZhbHVlIHwgbnVtYmVyOiBnZXRGb3JtYXQoY29sKSB9fVxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ3VybCdcIiBzdHlsZT1cImNvbG9yOiBibHVlOyBjdXJzb3I6IHBvaW50ZXI7IHRleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7XCI+XHJcbiAgICAgICAgICAgICAgICB7eyBjb2wuYWdncmVnYXRlVmFsdWUgfX1cclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoRGVmYXVsdD5cclxuICAgICAgICAgICAgICAgIHt7IGNvbC5hZ2dyZWdhdGVWYWx1ZSB9fVxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgIDwva2VuZG8tZ3JpZC1jb2x1bW4+XHJcbiAgICAgICAgPGtlbmRvLWdyaWQtY29tbWFuZC1jb2x1bW4gKm5nSWY9XCJkYXRhLkVuYWJsZUdyaWRDb21tYW5kXCIgd2lkdGg9XCIxODBcIiBbY29sdW1uTWVudV09XCJmYWxzZVwiIFtzdHlsZV09XCJjb21wb25lbnRQcm9wZXJ0aWVzLnN0eWxlLnN0eWxlOFwiIGNsYXNzPVwiZTF0YWctc3R5bGU4XCI+XHJcbiAgICAgICAgICA8bmctdGVtcGxhdGUga2VuZG9HcmlkQ2VsbFRlbXBsYXRlIGxldC1pc05ldz1cImlzTmV3XCI+XHJcbiAgICAgICAgICAgIDxidXR0b24ga2VuZG9HcmlkU2F2ZUNvbW1hbmQ+XHJcbiAgICAgICAgICAgICAge3sgaXNOZXcgPyAnU2F2ZScgOiAnVXBkYXRlJyB9fVxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPGJ1dHRvbiBrZW5kb0dyaWRDYW5jZWxDb21tYW5kIFtwcmltYXJ5XT1cInRydWVcIj5cclxuICAgICAgICAgICAgICB7eyBpc05ldyA/ICdEaXNjYXJkIGNoYW5nZXMnIDogJ0NhbmNlbCcgfX1cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDxidXR0b24ga2VuZG9HcmlkRWRpdENvbW1hbmQ+XHJcbiAgICAgICAgICAgICAge3sgXCJFZGl0XCIgfX1cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDxidXR0b24ga2VuZG9HcmlkUmVtb3ZlQ29tbWFuZD5cclxuICAgICAgICAgICAgICB7eyBcIlJlbW92ZVwiIH19XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICA8L2tlbmRvLWdyaWQtY29tbWFuZC1jb2x1bW4+XHJcbiAgICAgICAgPGtlbmRvLWdyaWQtY29tbWFuZC1jb2x1bW4gKm5nSWY9XCJkYXRhLkVuYWJsZUN1c3RvbVJlbW92ZUNvbW1hbmRcIiB3aWR0aD1cIjE4MFwiIFtjb2x1bW5NZW51XT1cImZhbHNlXCIgW3N0eWxlXT1cImNvbXBvbmVudFByb3BlcnRpZXMuc3R5bGUuc3R5bGU4XCIgY2xhc3M9XCJlMXRhZy1zdHlsZThcIj5cclxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSBrZW5kb0dyaWRDZWxsVGVtcGxhdGUgbGV0LWlzTmV3PVwiaXNOZXdcIiBsZXQtZGF0YUl0ZW0gbGV0LXJvd0luZGV4PVwicm93SW5kZXhcIj5cclxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIga2VuZG9CdXR0b24gKGNsaWNrKT1cImdyaWRDdXN0b21SZW1vdmVDb21tYW5kKGRhdGFJdGVtLCByb3dJbmRleClcIiAqbmdJZj1cImRhdGEuRW5hYmxlQ3VzdG9tUmVtb3ZlQ29tbWFuZFwiPlxyXG4gICAgICAgICAgICAgIHt7IFwiUmVtb3ZlXCIgfX1cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgIDwva2VuZG8tZ3JpZC1jb21tYW5kLWNvbHVtbj5cclxuICAgICAgICA8a2VuZG8tZ3JpZC1leGNlbCBmaWxlTmFtZT1cIkV4cG9ydC54bHN4XCIgW2ZldGNoRGF0YV09XCJhbGxSZXN1bHRzXCI+PC9rZW5kby1ncmlkLWV4Y2VsPlxyXG4gICAgICA8L2tlbmRvLWdyaWQ+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuICA8IS0tIGZvciBERUMgYXV0byBzY3JvbGxpbmcgLS0+XHJcbiAgPGRpdiBpZD1cImVuZC1vZi1ncmlkXCI+PC9kaXY+XHJcbjwvZGl2PlxyXG5cclxuIl19
1033
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiemdyaWQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbW1oZ2xvYmFsLWR5bmFtaWNmb3JtL3NyYy9saWIvemdyaWQvemdyaWQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbW1oZ2xvYmFsLWR5bmFtaWNmb3JtL3NyYy9saWIvemdyaWQvemdyaWQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0JBQStCO0FBQy9CLE9BQU8sRUFBRSxTQUFTLEVBQXFCLFNBQVMsRUFBdUMsTUFBTSxlQUFlLENBQUM7QUFDN0csT0FBTyxFQUFFLFNBQVMsRUFBZSxVQUFVLEVBQUUsV0FBVyxFQUFlLE1BQU0sZ0JBQWdCLENBQUM7QUFHOUYsNkJBQTZCO0FBRTdCLDhCQUE4QjtBQUM5QixPQUFPLEVBQWMsRUFBRSxFQUFFLE9BQU8sRUFBZ0IsS0FBSyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBR3JELE9BQU8sRUFBeUIsT0FBTyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDNUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFHbkUsMkNBQTJDO0FBQzNDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBRXBGLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ2xGLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRTFELE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBRXJGLE9BQU8sRUFFRyxNQUFNLEVBQWMsZ0JBQWdCLEVBRTdDLE1BQU0saUJBQWlCLENBQUM7QUFDekIsT0FBTyxFQUFFLGVBQWUsRUFBRSxr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dkIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztRQUNwQyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztJQUM1QyxDQUFDOzsyR0E1b0NVLGNBQWM7K0ZBQWQsY0FBYyw2RkFDZCxnQkFBZ0IsbUZBQ2hCLHlCQUF5QixxRkM3RHRDLDAwMUJBeVlBLDhpakNEblZjO1FBQ1YsNEJBQTRCO0tBQzdCOzJGQUdVLGNBQWM7a0JBVDFCLFNBQVM7K0JBQ0UsV0FBVyxjQUdUO3dCQUNWLDRCQUE0QjtxQkFDN0I7cWNBSW1DLFVBQVU7c0JBQTdDLFNBQVM7dUJBQUMsZ0JBQWdCO2dCQUM2QixnQkFBZ0I7c0JBQXZFLFNBQVM7dUJBQUMseUJBQXlCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiLyoqKioqKioqKiogQW5ndWxhciAqKioqKioqKioqL1xyXG5pbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgT25EZXN0cm95LCBWaWV3Q2hpbGQsIEFmdGVyVmlld0NoZWNrZWQsIENoYW5nZURldGVjdG9yUmVmIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgRm9ybUdyb3VwLCBGb3JtQnVpbGRlciwgVmFsaWRhdG9ycywgRm9ybUNvbnRyb2wsIFZhbGlkYXRvckZuIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSBcIkBhbmd1bGFyL3JvdXRlclwiO1xyXG5cclxuLyoqKioqKioqKiogSW9uaWMgKioqKioqKioqKi9cclxuXHJcbi8qKioqKioqKioqIFBsdWdpbiAqKioqKioqKioqL1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBvZiwgU3ViamVjdCwgU3Vic2NyaXB0aW9uLCBkZWxheSB9IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7IHRhcCwgbWFwLCBzd2l0Y2hNYXAgfSBmcm9tIFwicnhqcy9vcGVyYXRvcnNcIjtcclxuaW1wb3J0IHsgRXhjZWxFeHBvcnREYXRhIH0gZnJvbSAnQHByb2dyZXNzL2tlbmRvLWFuZ3VsYXItZXhjZWwtZXhwb3J0JztcclxuaW1wb3J0IHsgR3JpZEl0ZW0sIFNlbGVjdGFibGVTZXR0aW5ncyB9IGZyb20gJ0Bwcm9ncmVzcy9rZW5kby1hbmd1bGFyLWdyaWQnO1xyXG5pbXBvcnQgeyBTb3J0RGVzY3JpcHRvciwgU3RhdGUsIHByb2Nlc3MgfSBmcm9tIFwiQHByb2dyZXNzL2tlbmRvLWRhdGEtcXVlcnlcIjtcclxuaW1wb3J0IHsgVG9vbHRpcERpcmVjdGl2ZSB9IGZyb20gJ0Bwcm9ncmVzcy9rZW5kby1hbmd1bGFyLXRvb2x0aXAnO1xyXG5pbXBvcnQgeyBHcmlkRGF0YVJlc3VsdCwgRGF0YVN0YXRlQ2hhbmdlRXZlbnQsIFBhZ2VDaGFuZ2VFdmVudCwgQ2VsbENsaWNrRXZlbnQsIEdyaWRDb21wb25lbnQsIFJvd0FyZ3MgfSBmcm9tIFwiQHByb2dyZXNzL2tlbmRvLWFuZ3VsYXItZ3JpZFwiO1xyXG5cclxuLyoqKioqKioqKiogQ29tcG9uZW50ICYgU2VydmljZSAqKioqKioqKioqL1xyXG5pbXBvcnQgeyBEYXRhTGlzdGluZ0ZpZWxkQmFzZSB9IGZyb20gXCIuLi9jb21wb25lbnRzL2RhdGFsaXN0aW5nZmllbGRiYXNlLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBaQ29tcG9uZW50U2VydmljZSB9IGZyb20gXCIuLi9zZXJ2aWNlcy96Y29tcG9uZW50LnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgaGlkZUFuZFNob3dWZXJ0aWNhbEFuaW1hdGlvbiB9IGZyb20gXCIuLi9hbmltYXRpb25zL2NvbXBvbmVudC1hbmltYXRpb25zXCI7XHJcbmltcG9ydCB7IENvbXBvbmVudENvbnN0YW50IH0gZnJvbSBcIi4uL2NvbnN0YW50cy9jb25zdGFudFwiO1xyXG5pbXBvcnQgeyBNYWluU2VydmljZSB9IGZyb20gXCIuLi9zZXJ2aWNlcy9tYWluLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgRWxlbWVudENvbnRhaW5lckRpcmVjdGl2ZSB9IGZyb20gXCIuLi9kaXJlY3RpdmVzL2VsZW1lbnRjb250YWluZXIuZGlyZWN0aXZlXCI7XHJcbmltcG9ydCB7IFpHcmlkQmluZGluZ0RpcmVjdGl2ZSB9IGZyb20gXCIuL3pncmlkLmJpbmRpbmcuZGlyZWN0aXZlXCI7XHJcbmltcG9ydCB7XHJcbiAgV2ViQXBpU2VydmljZSwgVG9hc3RTZXJ2aWNlLFxyXG4gIFpGaWVsZCwgWkdyb3VwLCBaQ29tcG9uZW50LCBaQ29tcG9uZW50SGVscGVyLCBaQ29tcG9uZW50T3V0cHV0RXZlbnQsIFpDb3JlU2VydmljZSwgU3RvcmFnZVNlc3Npb25TZXJ2aWNlLCBGb250QXdlU29tZVNlcnZpY2UsXHJcbiAgWkdyaWRQb3N0QXBpUGFyYW1zLCBaR3JpZFNldHRpbmdzLCBaR3JpZEN1c3RvbUNvbHVtbiwgT2ZmbGluZURhdGFiYXNlU2VydmljZSwgSnNvbkNhY2hlXHJcbn0gZnJvbSAnbW1oZ2xvYmFsLXpjb3JlJztcclxuaW1wb3J0IHsgR3JpZFNldHRpbmdUeXBlLCBHcmlkU3RhdGVMb2dpY1R5cGUsIFpHcmlkU2VydmljZSB9IGZyb20gXCIuL3pncmlkLnNlcnZpY2VcIjtcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgWkdyaWQge1xyXG4gIHBhcmFtczogWkdyaWRQb3N0QXBpUGFyYW1zO1xyXG4gIHN0YXRlOiBTdGF0ZTtcclxuICBjb2x1bW5zOiBhbnlbXTtcclxuICBwYWdpbmF0aW9uQXBpUG9zdFVybDogc3RyaW5nO1xyXG4gIGRhdGE6IFpGaWVsZDtcclxuICBncm91cDogWkdyb3VwO1xyXG4gIHpncmlkOiBaR3JpZEJpbmRpbmdEaXJlY3RpdmU7XHJcbiAgaW5saW5lRWRpdGVkRm9ybUdyb3VwczogRm9ybUdyb3VwO1xyXG4gIGdldEdyaWREYXRhOiAoKSA9PiBhbnlbXTtcclxuICBnZXREYXRhOiAoKSA9PiB2b2lkO1xyXG4gIGNsZWFyRGF0YTogKCkgPT4gdm9pZDtcclxuICBzZXREYXRhOiAoZGF0YTogYW55KSA9PiB2b2lkO1xyXG4gIHNldENvbHVtbnM6IChjb2x1bW5GaWVsZHNOYW1lOiBzdHJpbmcsIGNvbHVtbnM6IEFycmF5PFpHcmlkQ3VzdG9tQ29sdW1uPikgPT4gdm9pZDtcclxuICAkc2V0Q29sdW1uczogKGNvbHVtbkZpZWxkc05hbWU6IHN0cmluZywgY29sdW1uczogQXJyYXk8WkdyaWRDdXN0b21Db2x1bW4+KSA9PiBPYnNlcnZhYmxlPGFueT47XHJcbiAgZ2V0Rm9ybUNvbnRyb2xEYXRhKCk6IGFueVtdO1xyXG59XHJcblxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6IFwiYXBwLXpncmlkXCIsXHJcbiAgdGVtcGxhdGVVcmw6IFwiLi96Z3JpZC5jb21wb25lbnQuaHRtbFwiLFxyXG4gIHN0eWxlVXJsczogW1wiLi96Z3JpZC5jb21wb25lbnQuc2Nzc1wiXSxcclxuICBhbmltYXRpb25zOiBbXHJcbiAgICBoaWRlQW5kU2hvd1ZlcnRpY2FsQW5pbWF0aW9uXHJcbiAgXVxyXG59KVxyXG5cclxuZXhwb3J0IGNsYXNzIFpncmlkQ29tcG9uZW50IGV4dGVuZHMgRGF0YUxpc3RpbmdGaWVsZEJhc2UgaW1wbGVtZW50cyBaQ29tcG9uZW50LCBPbkluaXQsIEFmdGVyVmlld0NoZWNrZWQsIE9uRGVzdHJveSB7XHJcbiAgQFZpZXdDaGlsZChUb29sdGlwRGlyZWN0aXZlKSBwdWJsaWMgdG9vbHRpcERpcjogVG9vbHRpcERpcmVjdGl2ZTtcclxuICBAVmlld0NoaWxkKEVsZW1lbnRDb250YWluZXJEaXJlY3RpdmUsIHsgc3RhdGljOiB0cnVlIH0pIGVsZW1lbnRDb250YWluZXIhOiBFbGVtZW50Q29udGFpbmVyRGlyZWN0aXZlO1xyXG4gIC8vIEBWaWV3Q2hpbGQoWkdyaWRCaW5kaW5nRGlyZWN0aXZlLCB7IHN0YXRpYzogZmFsc2UgfSkgemdyaWQ6IFpHcmlkQmluZGluZ0RpcmVjdGl2ZTtcclxuXHJcbiAgemdyaWQ6IGFueSA9IG51bGw7XHJcbiAgb2F1dGhVcmw6IHN0cmluZyA9IG51bGw7XHJcbiAgZ3JpZERhdGE6IEdyaWREYXRhUmVzdWx0O1xyXG4gIHNlbGVjdGFibGVTZXR0aW5nczogU2VsZWN0YWJsZVNldHRpbmdzO1xyXG4gIG15U2VsZWN0aW9uOiBhbnlbXSA9IFtdO1xyXG4gIGlubGluZUVkaXRlZEZvcm1Hcm91cHMgPSB7fTtcclxuICBwdWJsaWMgZm9ybUdyb3VwOiBGb3JtR3JvdXA7IC8vIGZvciBrZW5kbyBncmlkIGJ1aWx0LWluXHJcbiAgcHVibGljIHByZXZpb3VzTmV4dDogYm9vbGVhbjtcclxuICBwdWJsaWMgZ3JpZEJ0bjtcclxuICBwdWJsaWMgcGFnZWFibGU6IGFueSA9IGZhbHNlO1xyXG4gIHB1YmxpYyBmaWx0ZXJHcm91cCA9IG5ldyBaR3JvdXAoKTtcclxuICBwdWJsaWMgYWR2ZmlsdGVyR3JvdXAgPSBuZXcgWkdyb3VwKCk7XHJcbiAgcHVibGljIGlzU2hvd0FkdkZpbHRlciA9IGZhbHNlO1xyXG4gIHB1YmxpYyBncmlkVGl0bGU6IGFueTtcclxuICBwdWJsaWMgaXNJbmxpbmVFZGl0SW5wdXRGaWVsZExvYWRpbmcgPSBmYWxzZTtcclxuICBwcml2YXRlIHRlbXBJbmxpbmVFZGl0ZWRGb3JtR3JvdXBzO1xyXG4gIHByaXZhdGUgaXNDb2x1bW5IZWFkZXJUcmFuc2xhdGVkID0gZmFsc2U7XHJcbiAgcHVibGljIHNob3dSZXN0b3JlR3JpZFNldHRpbmdCdXR0b246IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcblxyXG4gIHBhcmFtczogWkdyaWRQb3N0QXBpUGFyYW1zID0ge1xyXG4gICAgcmVmZXJJZDogbnVsbCxcclxuICAgIHBhZ2VObzogMCxcclxuICAgIHBhZ2VTaXplOiAyMCxcclxuICAgIHNvcnRDb2x1bW5OYW1lOiBcIlwiLFxyXG4gICAgc29ydE9yZGVyOiBcIlwiLFxyXG4gICAgc29ydENvbHVtbk5hbWVzOiBbXSxcclxuICAgIHNvcnRPcmRlcnM6IFtdLFxyXG4gICAgZmlsdGVyUGFyYW1zOiBbXSxcclxuICAgIHBhcmFtZXRlcnM6IFwiXCIsXHJcbiAgICBmaWx0ZXJzOiBcIlwiLFxyXG4gICAgY29sdW1uczogXCJcIixcclxuICAgIGdyYW50VHlwZTogNFxyXG4gIH07XHJcblxyXG4gIGdyaWRTdWJqZWN0OiBTdWJqZWN0PGFueT4gPSBuZXcgU3ViamVjdDxhbnk+KCk7XHJcblxyXG4gIGNvbHVtbnM6IGFueVtdO1xyXG4gIGdlbmVyYXRlSGlkZGVuQ29sdW1uc0ZpZWxkOiBhbnlbXTtcclxuICBlZGl0YWJsZUNvbHVtbnM6IGFueVtdO1xyXG4gIHN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xyXG4gIHBhZ2VTaXplczogYm9vbGVhbiB8IGFueVtdO1xyXG4gIGdyaWRTdG9yYWdlS2V5OiBzdHJpbmc7XHJcbiAgZ3JpZERlZmF1bHRTdGF0ZUV4aXN0OiBib29sZWFuID0gZmFsc2U7XHJcbiAgaXNOZXc6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIHByaXZhdGUgZWRpdGVkUm93SW5kZXg6IG51bWJlcjtcclxuICBwdWJsaWMgZ3JpZFNldHRpbmc6IFpHcmlkU2V0dGluZ3M7XHJcbiAgO1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHVibGljIGNvbXBvbmVudFNlcnZpY2U6IFpDb21wb25lbnRTZXJ2aWNlLFxyXG4gICAgcHVibGljIGZvbnRBd2VTb21lU2VydmljZTogRm9udEF3ZVNvbWVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBhY3RpdmF0ZWRSb3V0ZTogQWN0aXZhdGVkUm91dGUsXHJcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxyXG4gICAgcHJpdmF0ZSBmb3JtQnVpbGRlcjogRm9ybUJ1aWxkZXIsXHJcbiAgICBwcml2YXRlIHdlYkFwaVNlcnZpY2U6IFdlYkFwaVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHRvYXN0U2VydmljZTogVG9hc3RTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB6Y29yZVNlcnZpY2U6IFpDb3JlU2VydmljZSxcclxuICAgIHByaXZhdGUgc3RvcmFnZVNlcnZpY2U6IFN0b3JhZ2VTZXNzaW9uU2VydmljZSxcclxuICAgIHByaXZhdGUgbWFpblNlcnZpY2U6IE1haW5TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgcHJpdmF0ZSBncmlkU2VydmljZTogWkdyaWRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBvZmZsaW5lRGF0YWJhc2VTZXJ2aWNlOiBPZmZsaW5lRGF0YWJhc2VTZXJ2aWNlXHJcbiAgKSB7XHJcbiAgICBzdXBlcihjb21wb25lbnRTZXJ2aWNlKTtcclxuICAgIHRoaXMub2F1dGhVcmwgPSB0aGlzLnpjb3JlU2VydmljZS5nZXRFbnZpcm9ubWVudCgpLmUxT2F1dGhVcmwgKyBcIi9cIjtcclxuICAgIHRoaXMuYWxsUmVzdWx0cyA9IHRoaXMuYWxsUmVzdWx0cy5iaW5kKHRoaXMpO1xyXG4gICAgdGhpcy5yZWZyZXNoRGF0YSA9IHRoaXMucmVmcmVzaERhdGEuYmluZCh0aGlzKTtcclxuICAgIHRoaXMuY2xlYXJEYXRhID0gdGhpcy5jbGVhckRhdGEuYmluZCh0aGlzKTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgc3VwZXIuc2V0dXBJbm5lckZpZWxkKCk7XHJcbiAgICB0aGlzLnNldHVwRmlsdGVyRmVhdHVyZSgpO1xyXG4gICAgdGhpcy5zZXR1cEdyaWRCdXR0b25zKCk7XHJcbiAgICB0aGlzLnNldHVwR3JpZENvbXBvbmVudEF0dHJpYnV0ZXMoKTtcclxuICAgIHRoaXMuZ3JpZFNldHRpbmcgPSB7IGdyaWRTdGF0ZTogdGhpcy5ncmlkU2VydmljZS5zZXR1cEdyaWRTZXR0aW5nKHRoaXMuZGF0YSkgfTtcclxuXHJcbiAgICB0aGlzLnNldHVwU3Vic2NyaXB0aW9uRm9yR3JpZFN1YmplY3QoKTtcclxuXHJcbiAgICBzdXBlci50cmFuc2xhdGVUb29sQmFySXRlbXMoKS5waXBlKHRhcCgoKSA9PiB7XHJcbiAgICAgIHRoaXMuZ3JpZENhbGxiYWNrKHRoaXMuZ3JvdXApO1xyXG4gICAgfSkpLnN1YnNjcmliZSgpO1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgdGhpcy5jb21wb25lbnRTZXJ2aWNlLmRlY3JlbWVudENvbXBvbmVudENvdW50ZXJGb3JGaWVsZCh0aGlzLmRhdGEpO1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdDaGVja2VkKCkge1xyXG4gICAgY29uc3QgaXNCYWNrTmF2aWdhdGVkID0gKHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oXCJuYXZpZ2F0ZWRSZWxvYWRHcmlkXCIpID09PSAndHJ1ZScpO1xyXG5cclxuICAgIGlmIChpc0JhY2tOYXZpZ2F0ZWQpIHtcclxuICAgICAgaWYgKCF0aGlzLmlzVXNlTG9jYWxEYXRhKCkpIHtcclxuICAgICAgICB0aGlzLmdldERhdGEoKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgIHRoaXMuc3RvcmFnZVNlcnZpY2Uuc2V0KFwibmF2aWdhdGVkUmVsb2FkR3JpZFwiLCBKU09OLnN0cmluZ2lmeShmYWxzZSkpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICBpZiAodGhpcy5zdWJzY3JpcHRpb24pIHtcclxuICAgICAgdGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vI3JlZ2lvbiBHcmlkIFN0YXRlIChwYWdpbmF0aW9uLCBzb3J0YWJsZSwgZmlsdGVyLCBvcmRlcmluZylcclxuICBwdWJsaWMgZGF0YVN0YXRlQ2hhbmdlKHN0YXRlOiBEYXRhU3RhdGVDaGFuZ2VFdmVudCk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLmlzVXNlTG9jYWxEYXRhKCkpIHtcclxuICAgICAgdGhpcy56Z3JpZC5kYXRhU3RhdGVDaGFuZ2Uoc3RhdGUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGZpbHRlcmFibGUodmFsdWU6IGFueSkge1xyXG4gICAgaWYgKHZhbHVlID09PSBmYWxzZSkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzb3J0YWJsZSh2YWx1ZTogYW55KSB7XHJcbiAgICBpZiAodmFsdWUgPT09IGZhbHNlKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGxvY2tlZChjb2xTZXR0aW5nOiBhbnkpIHtcclxuICAgIGlmIChjb2xTZXR0aW5nWydwaW5uZWRMZWZ0J10gPT0gdHJ1ZSkge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8vI3JlZ2lvbiBHcmlkIENvbHVtbnNcclxuICBwdWJsaWMgaXNTZWxlY3RPcHRpb24oKSB7XHJcbiAgICBpZiAodGhpcy5kYXRhLlNlbGVjdE9wdGlvbnMpIHtcclxuICAgICAgdGhpcy5zZWxlY3RhYmxlU2V0dGluZ3MgPSB7XHJcbiAgICAgICAgY2hlY2tib3hPbmx5OiBmYWxzZSxcclxuICAgICAgICBtb2RlOiAodGhpcy5kYXRhLlNlbGVjdE9wdGlvbnM/LnRvTG93ZXJDYXNlKCkgPT09IFwibXVsdGlwbGVcIikgPyBcIm11bHRpcGxlXCIgOiBcInNpbmdsZVwiXHJcbiAgICAgIH07XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldENvbHVtbnMoY29sdW1uTmFtZTogc3RyaW5nLCBjb2x1bW5zOiBBcnJheTxaR3JpZEN1c3RvbUNvbHVtbj4pIHtcclxuICAgIHRoaXMuZ3JvdXBbY29sdW1uTmFtZV0gPSB0aGlzLndyYXBDb2x1bW5OYW1lc0luRmllbGRFbGVtZW50KGNvbHVtbnMpO1xyXG4gICAgdGhpcy5nZW5lcmF0ZUdyaWRDb2x1bW5zKCkuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgJHNldENvbHVtbnMoY29sdW1uTmFtZTogc3RyaW5nLCBjb2x1bW5zOiBBcnJheTxaR3JpZEN1c3RvbUNvbHVtbj4pOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgdGhpcy5ncm91cFtjb2x1bW5OYW1lXSA9IHRoaXMud3JhcENvbHVtbk5hbWVzSW5GaWVsZEVsZW1lbnQoY29sdW1ucyk7XHJcbiAgICByZXR1cm4gdGhpcy5nZW5lcmF0ZUdyaWRDb2x1bW5zKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHdyYXBDb2x1bW5OYW1lc0luRmllbGRFbGVtZW50KGNvbHVtbkxpc3Q6IEFycmF5PFpHcmlkQ3VzdG9tQ29sdW1uPikge1xyXG4gICAgcmV0dXJuIG9mKGNvbHVtbkxpc3QubWFwKGMgPT4ge1xyXG4gICAgICBjb25zdCBpc0hpZGRlbjogYm9vbGVhbiA9IGMuSGlkZGVuO1xyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIE5hbWU6IGMuTmFtZSxcclxuICAgICAgICBWYWx1ZTogYy5Db2RlLFxyXG4gICAgICAgIFR5cGU6IGMuVHlwZSxcclxuICAgICAgICBncmlkQ29sVmlzaWJsZTogIWlzSGlkZGVuLFxyXG4gICAgICAgIEVuYWJsZUdyaWRWYWx1ZTogYy5FbmFibGVHcmlkVmFsdWUgfHwgZmFsc2UsXHJcbiAgICAgICAgd2lkdGg6IDEwMCArIGMuTmFtZS5sZW5ndGggKiA0LFxyXG4gICAgICAgIGVuYWJsZUZpbHRlcmluZzogZmFsc2UsXHJcbiAgICAgICAgZW5hYmxlU29ydGluZzogdHJ1ZSxcclxuICAgICAgICBlbmFibGVQaW5uaW5nOiB0cnVlLFxyXG4gICAgICAgIERpdkNsYXNzOiBcImNvbC14cy0xMiBjb2wtc20tNlwiLFxyXG4gICAgICAgIElzRWRpdGFibGVJbkdyaWQ6IGMuRWRpdGFibGVcclxuICAgICAgfTtcclxuICAgIH0pKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2VuZXJhdGVHcmlkQ29sdW1ucyhncmlkU2V0dGluZz86IFpHcmlkU2V0dGluZ3MpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgY29uc3QgY29sdW1uRmllbGRzJDogT2JzZXJ2YWJsZTxhbnk+ID0gWkNvbXBvbmVudEhlbHBlci5nZXRHcm91cFZhbHVlKFxyXG4gICAgICB0aGlzLmRhdGEuQ29sdW1uRmllbGRzLFxyXG4gICAgICB0aGlzLmdyb3VwXHJcbiAgICApIHx8IG9mKFtdKTtcclxuXHJcbiAgICBpZiAoIXRoaXMuZGF0YS5Db2x1bW5GaWVsZHMpIHtcclxuICAgICAgY29uc29sZS53YXJuKCdJbnZhbGlkL0VtcHR5IGdyaWQoJyArIHRoaXMuZGF0YS5OYW1lICsgJykgY29sdW1uRmllbGQnKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIWNvbHVtbkZpZWxkcyQpIHtcclxuICAgICAgY29uc29sZS5sb2coJ0ZhaWwgdG8gZ2VuZXJhdGUgZ3JpZCBjb2x1bW4gZmllbGRzLicpO1xyXG4gICAgICBjb25zb2xlLmxvZyh0aGlzLmRhdGEuQ29sdW1uRmllbGRzKTtcclxuICAgICAgY29uc29sZS5sb2codGhpcy5ncm91cCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGNvbHVtbkZpZWxkcyQucGlwZShcclxuICAgICAgdGFwKGNvbHVtbkZpZWxkID0+IHtcclxuICAgICAgICBpZiAoIWNvbHVtbkZpZWxkKSB7XHJcbiAgICAgICAgICBjb25zb2xlLndhcm4oJ0ludmFsaWQvRW1wdHkgZ3JpZCgnICsgdGhpcy5kYXRhLk5hbWUgKyAnKSBkYXRhIHRvIGdlbmVyYXRlIGNvbHVtbicpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuY29sdW1ucyA9IFtdO1xyXG4gICAgICAgICAgY29uc3QgZ2VuZXJhdGVIaWRkZW5Db2x1bW5zID0gW107XHJcblxyXG4gICAgICAgICAgWkNvbXBvbmVudEhlbHBlci5nZXRHcmlkQ29sdW1ucyh7XHJcbiAgICAgICAgICAgIGNvbHVtbkZpZWxkOiBjb2x1bW5GaWVsZCxcclxuICAgICAgICAgICAgY29sdW1uczogdGhpcy5jb2x1bW5zLFxyXG4gICAgICAgICAgICBncm91cDogdGhpcy5ncm91cCxcclxuICAgICAgICAgICAgY29sdW1uQ29uZmlndXJhdGlvbnM6IGdyaWRTZXR0aW5nPy5jb2x1bW5Db25maWd1cmF0aW9ucyxcclxuICAgICAgICAgICAgZ2VuZXJhdGVIaWRkZW5Db2x1bW5zOiBnZW5lcmF0ZUhpZGRlbkNvbHVtbnMsXHJcbiAgICAgICAgICAgIGdyaWRBdHRyaWJ1dGVzOiB0aGlzLmRhdGFcclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgIGlmIChnZW5lcmF0ZUhpZGRlbkNvbHVtbnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICB0aGlzLmdlbmVyYXRlSGlkZGVuQ29sdW1uc0ZpZWxkID0gW107XHJcbiAgICAgICAgICAgIGNvbnN0IGdlbmVyYXRlSGlkZGVuQ29sdW1uc0ZpZWxkID0gZ2VuZXJhdGVIaWRkZW5Db2x1bW5zLm1hcChmaWVsZCA9PiAoeyBmaWVsZDogZmllbGQsIFZpc2libGU6IHRydWUsIElzUmVxdWlyZWQ6IGZhbHNlLCBWYWx1ZTogZmllbGQgfSkpO1xyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGZpZWxkIG9mIGdlbmVyYXRlSGlkZGVuQ29sdW1uc0ZpZWxkKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5nZW5lcmF0ZUhpZGRlbkNvbHVtbnNGaWVsZC5wdXNoKGZpZWxkKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSksXHJcbiAgICAgIHN3aXRjaE1hcCgoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHN1cGVyLnRyYW5zbGF0ZUNvbHVtbkhlYWRlcih0aGlzLmNvbHVtbnMpO1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGdldEljb25OYW1lKGdyaWRDZWxsUmVwbGFjZVZhbHVlOiBhbnksIHZhbHVlOiBhbnkpIHtcclxuICAgIGlmIChncmlkQ2VsbFJlcGxhY2VWYWx1ZSAmJiBncmlkQ2VsbFJlcGxhY2VWYWx1ZVt2YWx1ZV0pIHtcclxuICAgICAgcmV0dXJuIFpDb21wb25lbnRIZWxwZXIuZ2V0Rm9udEF3ZXNvbWUoZ3JpZENlbGxSZXBsYWNlVmFsdWVbdmFsdWVdLCB0aGlzLmZvbnRBd2VTb21lU2VydmljZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuICcnO1xyXG4gIH1cclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgLy8jcmVnaW9uIGdyaWQgc3R5bGluZ1xyXG4gIHB1YmxpYyBjZWxsU3R5bGVDb25kaXRpb24oY29sLCBjb2xWYWx1ZTogYW55KSB7XHJcbiAgICBpZiAoY29sWydDZWxsU3R5bGVDb25kaXRpb24nXSkge1xyXG4gICAgICBjb25zdCBjb25kaXRpb25IaWdobGlnaHRjb2w6IFtdID0gY29sWydDZWxsU3R5bGVDb25kaXRpb24nXTtcclxuICAgICAgbGV0IGNvbmRpdGlvblJlc3VsdCA9IGZhbHNlO1xyXG5cclxuICAgICAgY29uZGl0aW9uSGlnaGxpZ2h0Y29sLmZvckVhY2goZGF0YSA9PiB7XHJcbiAgICAgICAgaWYgKCFjb25kaXRpb25SZXN1bHQpIHtcclxuICAgICAgICAgIGlmIChkYXRhWydWYWx1ZSddID09IGNvbFZhbHVlKSB7XHJcbiAgICAgICAgICAgIGNvbmRpdGlvblJlc3VsdCA9IHRydWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIHJldHVybiBjb25kaXRpb25SZXN1bHQ7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0Q2VsbFN0eWxlQ29uZGl0aW9uKGNvbCwgY29sVmFsdWU6IGFueSkge1xyXG4gICAgaWYgKGNvbFsnQ2VsbFN0eWxlQ29uZGl0aW9uJ10pIHtcclxuICAgICAgY29uc3QgY29uZGl0aW9uSGlnaGxpZ2h0Y29sOiBbXSA9IGNvbFsnQ2VsbFN0eWxlQ29uZGl0aW9uJ107XHJcbiAgICAgIGxldCBjb25kaXRpb25SZXN1bHQgPSAnJztcclxuXHJcbiAgICAgIGNvbmRpdGlvbkhpZ2hsaWdodGNvbC5mb3JFYWNoKGRhdGEgPT4ge1xyXG4gICAgICAgIGlmIChkYXRhWydWYWx1ZSddID09IGNvbFZhbHVlKSB7XHJcbiAgICAgICAgICBpZiAoZGF0YVsnQmFja2dyb3VuZENvbG9yJ10pIHtcclxuICAgICAgICAgICAgY29uZGl0aW9uUmVzdWx0ID0gJ2JhY2tncm91bmQtY29sb3I6JyArIGRhdGFbJ0JhY2tncm91bmRDb2xvciddICsgJzsnO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGlmIChkYXRhWydDb2xvciddKSB7XHJcbiAgICAgICAgICAgIGNvbmRpdGlvblJlc3VsdCArPSAnY29sb3I6JyArIGRhdGFbJ0NvbG9yJ10gKyAnOyc7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKGRhdGFbJ1N0eWxlRXhwcmVzc2lvbiddKSB7XHJcbiAgICAgICAgICAgIGNvbmRpdGlvblJlc3VsdCArPSBkYXRhWydTdHlsZUV4cHJlc3Npb24nXTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgcmV0dXJuIGNvbmRpdGlvblJlc3VsdDtcclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8vI3JlZ2lvbiBPbmNlbGwgY2xpY2sgaGFuZGxpbmdcclxuICAvLyAxLiBpbkNlbGwgRWRpdFxyXG4gIC8vIDIuIE9uSXRlbUNsaWNrXHJcbiAgLy8gMy4gTmF2aWdhdGUgdG8gRm9ybSBQYWdlXHJcbiAgLy8gNC4gU2hvdyBGb3JtIFBhZ2UgaW4gdGhlIHNhbWUgcGFnZSAoREVDIGFuZCBEcmF3ZXIpXHJcbiAgcHVibGljIGNlbGxDbGlja0hhbmRsZXIoZXZlbnQ6IENlbGxDbGlja0V2ZW50KSB7XHJcbiAgICBjb25zdCBkaXNhYmxlQWxsQ29sdW1uQ2VsbENsaWNrSGFuZGxlciA9IHRoaXMuZGF0YS5EaXNhYmxlQ2VsbENsaWNrSGFuZGxlciA/IHRoaXMuZGF0YS5EaXNhYmxlQ2VsbENsaWNrSGFuZGxlciA6IGZhbHNlO1xyXG4gICAgY29uc3QgaXNDb21tYW5kQ29sdW1uID0gZXZlbnQuY29sdW1uLmNvbnN0cnVjdG9yLm5hbWUgPT0gJ0NvbW1hbmRDb2x1bW5Db21wb25lbnQnID8gdHJ1ZSA6IGZhbHNlO1xyXG5cclxuICAgIGlmICh0aGlzLnRvb2x0aXBEaXIpIHtcclxuICAgICAgdGhpcy50b29sdGlwRGlyLmhpZGUoKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIWRpc2FibGVBbGxDb2x1bW5DZWxsQ2xpY2tIYW5kbGVyICYmICFpc0NvbW1hbmRDb2x1bW4pIHtcclxuICAgICAgY29uc3QgaW5DZWxsRWRpdGFibGUgPSB0aGlzLmRhdGEuSW5DZWxsRWRpdGFibGUgPyB0aGlzLmRhdGEuSW5DZWxsRWRpdGFibGUgOiBmYWxzZTtcclxuICAgICAgaWYgKGluQ2VsbEVkaXRhYmxlKSB7XHJcbiAgICAgICAgdGhpcy5lZGl0YWJsZUNvbHVtbnMgPSB0aGlzLmNvbHVtbnMuZmlsdGVyKHMgPT4gcy5pc0VkaXRhYmxlSW5EYXRhSXRlbSA9PT0gdHJ1ZSk7XHJcbiAgICAgICAgaWYgKCEhdGhpcy5lZGl0YWJsZUNvbHVtbnMpIHtcclxuICAgICAgICAgIHRoaXMuZWRpdGFibGVDb2x1bW5zLm1hcChzID0+IGV2ZW50LnNlbmRlci5lZGl0Q2VsbChldmVudC5yb3dJbmRleCwgZXZlbnQuY29sdW1uSW5kZXgsIHRoaXMuY3JlYXRlRm9ybUdyb3VwKGV2ZW50LmRhdGFJdGVtLCBzLmZpZWxkKSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zb2xlLmxvZyhcImNlbGxDbGljayBldmVudDogXCIsIGV2ZW50KTtcclxuICAgICAgICAvL3RoaXMuY2FjaGVTZXJ2aWNlLnNldCgnbGFzdENsaWNrZWRHcmlkUmVjb3JkJywgZXZlbnQpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5kYXRhLk9uSXRlbUNsaWNrKSB7XHJcbiAgICAgICAgICBjb25zdCBmdW5jID0gWkNvbXBvbmVudEhlbHBlci5nZXRHcm91cEV2YWxWYWx1ZS5jYWxsKHRoaXMsIHRoaXMuZGF0YS5Pbkl0ZW1DbGljayk7XHJcbiAgICAgICAgICBpZiAodHlwZW9mIGZ1bmMgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgY29uc3QgY2FsbEZ1bmMgPSBmdW5jLmJpbmQodGhpcy5ncm91cC5jdHJsU2NvcGUpO1xyXG4gICAgICAgICAgICBjYWxsRnVuYyhldmVudCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgLy8gc3RvcmUgY2xpY2tlZCBpZCBhbmQgYWN0aW9uIGFzIGVkaXQgdG8gdGhlIHNlc3Npb24gc3RvcmFnZVxyXG4gICAgICAgICAgLy8gT25JdGVtQ2xpY2ssIHByb2plY3QgaGF2ZSB0byBzZXQgdGhlbXNlbGYuXHJcbiAgICAgICAgICB0aGlzLm1haW5TZXJ2aWNlLnNldE5hdmlnYXRpb25QYXJhbXMoW2V2ZW50LmRhdGFJdGVtLklkLCAnZWRpdCddKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuZWRpdE1vZGVsKGV2ZW50LmRhdGFJdGVtKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGVkaXRDZWxsQ2xvc2VIYW5kbGVyKGFyZ3M6IGFueSkge1xyXG4gICAgY29uc3QgeyBmb3JtR3JvdXAsIGRhdGFJdGVtIH0gPSBhcmdzO1xyXG4gICAgaWYgKCFmb3JtR3JvdXAudmFsaWQpIHtcclxuICAgICAgYXJncy5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgfSBlbHNlIGlmIChmb3JtR3JvdXAuZGlydHkpIHtcclxuICAgICAgdGhpcy5lZGl0YWJsZUNvbHVtbnMgPSB0aGlzLmNvbHVtbnMuZmlsdGVyKHMgPT4gcy5pc0VkaXRhYmxlSW5EYXRhSXRlbSA9PT0gdHJ1ZSk7XHJcbiAgICAgIHRoaXMuZWRpdGFibGVDb2x1bW5zLm1hcChzID0+XHJcbiAgICAgICAgT2JqZWN0LmFzc2lnbihkYXRhSXRlbSwgeyBbcy5maWVsZF06IGZvcm1Hcm91cC52YWx1ZVtzLmZpZWxkXSB9KSk7XHJcbiAgICAgIHRoaXMubXlTZWxlY3Rpb24ubWFwKHMgPT4gKHMuSWQgPT09IGRhdGFJdGVtLklkKSA/IE9iamVjdC5hc3NpZ24ocywgZGF0YUl0ZW0pIDogbnVsbCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb25OYXZpZ2F0ZVRvKGV2ZW50OiBhbnksIGNsaWNrQWN0aW9uOiBhbnksIHJvd0RhdGE6IGFueSwgY2VsbERhdGE6IHN0cmluZykge1xyXG4gICAgLy8gY29uc3QgbiA9IGNvbFNldHRpbmcubmF2aWdhdGVUby5yZXBsYWNlKCcvOmlkJywgY2VsbERhdGEpO1xyXG4gICAgY29uc3QgbiA9IFpDb21wb25lbnRIZWxwZXIuZ2V0R3JvdXBFdmFsVmFsdWUuY2FsbCh0aGlzLCBjbGlja0FjdGlvbi5DbGljayk7XHJcbiAgICBpZiAobikge1xyXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgdGhpcy5ncm91cC5zdWJqZWN0Lm5leHQoe1xyXG4gICAgICAgIHR5cGU6ICd6Z3JpZC1vbk5hdmlnYXRlVG8nLFxyXG4gICAgICAgIHRhcmdldDogY2xpY2tBY3Rpb24uQ2xpY2ssXHJcbiAgICAgICAgcm93RGF0YTogcm93RGF0YSxcclxuICAgICAgICBkYXRhOiBjZWxsRGF0YVxyXG4gICAgICB9IGFzIFpDb21wb25lbnRPdXRwdXRFdmVudCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGVkaXRNb2RlbChkYXRhSXRlbTogYW55KSB7XHJcbiAgICBpZiAodGhpcy5kYXRhLkVkaXRDbGlja1VSTCkge1xyXG4gICAgICAvLyBFZGl0IGluY2VsbCBmaWVsZFxyXG4gICAgICBjb25zdCBjb2xGaWVsZHMgPSBaQ29tcG9uZW50SGVscGVyLmdldEdyb3VwVmFsdWUodGhpcy5kYXRhLkNvbHVtbkZpZWxkcywgdGhpcy5ncm91cCk7XHJcbiAgICAgIHRoaXMuZ3JvdXAuc3ViamVjdC5uZXh0KHtcclxuICAgICAgICB0eXBlOiBcInpncmlkLWNlbGxDbGlja1wiLFxyXG4gICAgICAgIHRhcmdldDogdGhpcy5kYXRhLkVkaXRDbGlja1VSTCxcclxuICAgICAgICBkYXRhOiBkYXRhSXRlbSxcclxuICAgICAgICBjb2x1bW5GaWVsZHMkOiBjb2xGaWVsZHNcclxuICAgICAgfSBhcyBaQ29tcG9uZW50T3V0cHV0RXZlbnQpO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAodGhpcy5kYXRhWydDb250YWluZXJGb3JtJ10pIHtcclxuICAgICAgdGhpcy5zaG93Rm9ybVBhZ2UuZW1pdCh0cnVlKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbdGhpcy5ncm91cC5lZGl0TW9kZWxVUkxdLCB7XHJcbiAgICAgICAgcmVsYXRpdmVUbzogdGhpcy5hY3RpdmF0ZWRSb3V0ZSxcclxuICAgICAgICAvL3NraXBMb2NhdGlvbkNoYW5nZTogZmFsc2VcclxuICAgICAgfSk7XHJcblxyXG4gICAgICAvLy8vIFdoZW4gY2xpY2tlZCByb3V0ZSB0byBwYWdlXHJcbiAgICAgIC8vdGhpcy5yb3V0ZXIubmF2aWdhdGUoW3RoaXMuZ3JvdXAuZWRpdE1vZGVsVVJMLCBkYXRhSXRlbS5JZCwgJ2VkaXQnXSwge1xyXG4gICAgICAvLyAgcmVsYXRpdmVUbzogdGhpcy5hY3RpdmF0ZWRSb3V0ZVxyXG4gICAgICAvL30pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIG9uQnRuQ2xpY2soZXZlbnQ6IGFueSwgY29sU2V0dGluZzogYW55LCByb3dEYXRhOiBhbnksIGNlbGxEYXRhOiBzdHJpbmcpIHtcclxuICAgIHRoaXMub25OYXZpZ2F0ZVRvKGV2ZW50LCBjb2xTZXR0aW5nLCByb3dEYXRhLCBjZWxsRGF0YSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNyZWF0ZUZvcm1Hcm91cChkYXRhSXRlbTogYW55LCBmaWVsZE5hbWU6IGFueSk6IEZvcm1Hcm91cCB7XHJcbiAgICByZXR1cm4gdGhpcy5mb3JtQnVpbGRlci5ncm91cCh7XHJcbiAgICAgIFtmaWVsZE5hbWVdOiBkYXRhSXRlbVtmaWVsZE5hbWVdXHJcbiAgICB9KTtcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8vI3JlZ2lvbiBIZWxwZXIgZnVuY3Rpb25zXHJcbiAgcHVibGljIGdldENsYXNzKGRhdGFJdGVtOiBhbnksIGNvbDogYW55KSB7XHJcbiAgICBsZXQgbmdDbGFzcyA9IFwiZ3JpZENlbGwgXCI7XHJcbiAgICBpZiAoY29sLmZpZWxkVHlwZSA9PT0gJ251bWJlcicgfHwgY29sLmZpZWxkVHlwZSA9PT0gJ2N1cnJlbmN5JyB8fCBjb2wuZmllbGRUeXBlID09PSAnem51bWVyaWMnKSB7XHJcbiAgICAgIG5nQ2xhc3MgKz0gXCJyaWdodEFsaWduZWQgXCI7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGRhdGFJdGVtW2NvbC5maWVsZCArICdfQ2xhc3MnXSkge1xyXG4gICAgICBuZ0NsYXNzICs9IGRhdGFJdGVtW2NvbC5maWVsZCArICdfQ2xhc3MnXSArIFwiIFwiO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChjb2wuQ2xhc3MpIHtcclxuICAgICAgbmdDbGFzcyArPSBjb2wuQ2xhc3MgKyBcIiBcIjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoY29sLlBvcE92ZXJDb250ZW50KSB7XHJcbiAgICAgIG5nQ2xhc3MgKz0gXCIgd2l0aFBvcG92ZXJJbkdyaWRcIjtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbmdDbGFzcztcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRGb3JtYXQoY29sOiBhbnksIGRlZmF1bHRGb3JtYXQ/OiBhbnkpIHtcclxuICAgIGxldCBmb3JtYXQgPSBcIlwiO1xyXG4gICAgaWYgKGNvbC5Gb3JtYXRPcHRpb25zID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgZm9ybWF0ID0gZGVmYXVsdEZvcm1hdCA/IGRlZmF1bHRGb3JtYXQgOiBcIlwiO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgZm9ybWF0QXJyID0gY29sLkZvcm1hdE9wdGlvbnMuc3BsaXQoXCIuXCIpXHJcbiAgICAgIGxldCBkcCA9IDA7XHJcblxyXG4gICAgICBpZiAoZm9ybWF0QXJyLmxlbmd0aCA+IDEpIHtcclxuICAgICAgICBkcCA9IGZvcm1hdEFyclsxXS5sZW5ndGg7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChkcCAhPT0gMCkge1xyXG4gICAgICAgIGZvcm1hdCA9IFwiMS5cIiArIGRwICsgXCItXCIgKyBkcDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZvcm1hdDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhbGxSZXN1bHRzKCk6IE9ic2VydmFibGU8RXhjZWxFeHBvcnREYXRhPiB7XHJcbiAgICBjb25zdCBncmlkQ29udHJvbCA9IHRoaXMuemdyaWQgYXMgWkdyaWQ7XHJcbiAgICBjb25zdCBncmlkQ29tcG9uZW50ID0gdGhpcy56Z3JpZC5ncmlkIGFzIEdyaWRDb21wb25lbnQ7XHJcbiAgICBjb25zdCBkYXRhID0gZ3JpZENvbXBvbmVudC5kYXRhIGFzIEdyaWREYXRhUmVzdWx0O1xyXG5cclxuICAgIGNvbnN0IHBhZ2luYXRpb25BcGlQb3N0VXJsID0gZ3JpZENvbnRyb2wucGFnaW5hdGlvbkFwaVBvc3RVcmw7XHJcblxyXG4gICAgLy8gTmVlZCB0byBjbG9uZSwgaWYgbm90IHdpbGwgYWZmZWN0IHRoZSBncmlkIHBhcmFtcy5cclxuICAgIGNvbnN0IHBhcmFtcyA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMucGFyYW1zKTtcclxuICAgIHBhcmFtcy5wYWdlTm8gPSAwO1xyXG4gICAgcGFyYW1zLnBhZ2VTaXplID0gZGF0YS50b3RhbDtcclxuXHJcbiAgICByZXR1cm4gdGhpcy53ZWJBcGlTZXJ2aWNlLmh0dHBQb3N0JChwYWdpbmF0aW9uQXBpUG9zdFVybCwgcGFyYW1zKS5waXBlKFxyXG4gICAgICBtYXAoKGRhdGE6IGFueSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHJlc3VsdDogRXhjZWxFeHBvcnREYXRhID0ge1xyXG4gICAgICAgICAgZGF0YTogcHJvY2VzcyhkYXRhLmRhdGFTZXQsIHt9KS5kYXRhXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcmVmcmVzaEdyaWQoZXZlbnQ6IFpDb21wb25lbnRPdXRwdXRFdmVudCwgZ3JvdXA6IFpHcm91cCwgbWU6IGFueSkge1xyXG4gICAgY29uc3QgX2dyaWRPcHRpb25TZWdtZW50ID0gZXZlbnQudGFyZ2V0LnRyaW0oKS5zcGxpdCgnLicpO1xyXG4gICAgY29uc3QgX2dyaWRPcHRpb24gPSBfZ3JpZE9wdGlvblNlZ21lbnRbMV07XHJcbiAgICBpZiAoX2dyaWRPcHRpb24pIHtcclxuICAgICAgY29uc3QgemdyaWRDb250cm9sID0gZ3JvdXBbX2dyaWRPcHRpb25dIGFzIFpHcmlkO1xyXG4gICAgICBpZiAoemdyaWRDb250cm9sKSB7XHJcbiAgICAgICAgemdyaWRDb250cm9sLmdldERhdGEoKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zb2xlLmxvZygnVW5hYmxlIHRvIGZpbmQgZ3JpZCB2YWx1ZTogJyArIF9ncmlkT3B0aW9uKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc29sZS5sb2coJ0ludmFsaWQgcmVmcmVzaEdyaWQgZXZlbnQ6ICcsIGV2ZW50KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyByZWZyZXNoRGF0YSgpIHtcclxuICAgIHRoaXMuZ2V0RGF0YSgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGNsZWFyRGF0YSgpIHtcclxuICAgIHRoaXMuemdyaWQuY2xlYXJEYXRhKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2hvd1Rvb2x0aXAoZTogTW91c2VFdmVudCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuZGF0YS5Jc1Nob3dUb29sVGlwID09PSBmYWxzZSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBjb25zdCBlbGVtZW50ID0gZS50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XHJcblxyXG4gICAgbGV0IGlzQ29tbWFuZENvbHVtbiA9IGZhbHNlO1xyXG4gICAgZWxlbWVudC5jbGFzc0xpc3QuZm9yRWFjaChkYXRhID0+IHtcclxuICAgICAgaWYgKGRhdGEgPT0gJ2stY29tbWFuZC1jZWxsJykge1xyXG4gICAgICAgIGlzQ29tbWFuZENvbHVtbiA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIGlmICghaXNDb21tYW5kQ29sdW1uICYmXHJcbiAgICAgIChcclxuICAgICAgICAoKGVsZW1lbnQubm9kZU5hbWUgPT09ICdURCcgfHwgZWxlbWVudC5ub2RlTmFtZSA9PT0gJ1RIJykgJiYgZWxlbWVudC5vZmZzZXRXaWR0aCA8IChlbGVtZW50LnNjcm9sbFdpZHRoKSkgfHxcclxuICAgICAgICAoZWxlbWVudC5ub2RlTmFtZSA9PT0gJ1NQQU4nICYmIGVsZW1lbnQuY2xhc3NMaXN0ICYmIGVsZW1lbnQuY2xhc3NMaXN0Lmxlbmd0aCA+IDAgJiYgZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoJ2dyaWQtY2VsbC1kYXRhJykgJiYgZWxlbWVudC5wYXJlbnRFbGVtZW50Lm9mZnNldFdpZHRoIDwgKGVsZW1lbnQucGFyZW50RWxlbWVudC5zY3JvbGxXaWR0aCkpKVxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMudG9vbHRpcERpci50b2dnbGUoZWxlbWVudCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy50b29sdGlwRGlyLmhpZGUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyByb3dTZWxlY3Rpb25LZXkoY29udGV4dDogUm93QXJncyk6IGFueSB7XHJcbiAgICByZXR1cm4gY29udGV4dC5kYXRhSXRlbTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRTZWxlY3RlZFZhbHVlcygpOiBhbnkge1xyXG4gICAgcmV0dXJuIHRoaXMubXlTZWxlY3Rpb247XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0RGF0YSgpIHtcclxuICAgIGlmICh0aGlzLnpncmlkKSB7XHJcbiAgICAgIHRoaXMuaW5saW5lRWRpdGVkRm9ybUdyb3VwcyA9IHt9O1xyXG4gICAgICB0aGlzLnpncmlkLmdldERhdGFCaW5kaW5nKCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgY29uc29sZS53YXJuKCd0aGlzLnpncmlkIGlzIHVuZGVmaW5lZC4nKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRHcmlkRGF0YSgpIHtcclxuICAgIHJldHVybiB0aGlzLmlzVXNlTG9jYWxEYXRhKCkgPyAodGhpcy56Z3JpZC5kYXRhIHx8IHRoaXMuemdyaWQub3JpZ2luYWxEYXRhKSA6ICh0aGlzLnpncmlkLmdyaWQuZGF0YSAmJiB0aGlzLnpncmlkLmdyaWQuZGF0YS5kYXRhID8gdGhpcy56Z3JpZC5ncmlkLmRhdGEuZGF0YSA6IFtdKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXREYXRhID0gKGdEYXRhOiBhbnkpID0+IHtcclxuICAgIGlmICh0aGlzLnpncmlkKSB7XHJcbiAgICAgIGlmICh0aGlzLmlzVXNlTG9jYWxEYXRhKCkpIHtcclxuICAgICAgICB0aGlzLnpncmlkLmRhdGEgPSBnRGF0YTtcclxuICAgICAgICBpZiAoIXRoaXMuZGF0YS5EaXNhYmxlQXV0b0FwcGVuZEdyaWREYXRlRmlsdGVyQ29sKSB7XHJcbiAgICAgICAgICB0aGlzLnNldERhdGVDb2xGb3JGaWx0ZXJpbmcoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy56Z3JpZC5ncmlkLmRhdGEgPSB7XHJcbiAgICAgICAgICBkYXRhOiBnRGF0YSxcclxuICAgICAgICAgIHRvdGFsOiBnRGF0YS50b3RhbENvdW50XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuc2V0dXBHcmlkV2l0aElubGluZUVkaXQoKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBjb25zb2xlLmxvZygnemdyaWQgaXMgbnVsbCBmb3Igc2V0RGF0YS4nKTtcclxuICAgICAgY29uc29sZS5sb2codGhpcy5kYXRhKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRIZWFkZXJUZXh0KGNvbHVtbk5hbWU6IHN0cmluZywgbmV3SGVhZGVyVGl0bGU6IHN0cmluZykge1xyXG4gICAgY29uc3QgZ3JpZENvbHVtbnMgPSB0aGlzLmNvbHVtbnM7XHJcbiAgICBncmlkQ29sdW1ucy5mb3JFYWNoKChjb2w6IGFueSkgPT4ge1xyXG4gICAgICBpZiAoY29sLk5hbWUgPT09IGNvbHVtbk5hbWUpIHtcclxuICAgICAgICBjb2wudGl0bGUgPSBuZXdIZWFkZXJUaXRsZTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgdHJhY2tCeShpbmRleDogbnVtYmVyLCBpdGVtOiBHcmlkSXRlbSk6IGFueSB7XHJcbiAgICAvL2NvbnNvbGUubG9nKGl0ZW0uZGF0YVsnSWQnXSB8fCBpbmRleCk7XHJcbiAgICByZXR1cm4gaW5kZXg7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGlzVXNlTG9jYWxEYXRhKCk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKHRoaXMuZGF0YS5EYXRhU291cmNlKSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBmYWxzZTtcclxuICAgIC8vcmV0dXJuIFpDb21wb25lbnRIZWxwZXIuaXNOdWxsVW5kZWZpbmVkRW1wdHkodGhpcy5kYXRhLlJlc291cmNlVVJMKTtcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8vI3JlZ2lvbiBncmlkIHNldHVwXHJcbiAgcHJpdmF0ZSBzZXR1cEdyaWRDb21wb25lbnRBdHRyaWJ1dGVzKCkge1xyXG4gICAgLy8gR3JpZCBkZWZhdWx0IHNldHRpbmdcclxuICAgIHRoaXMuZ3JpZFRpdGxlID0gdGhpcy5kYXRhLlRpdGxlO1xyXG4gICAgdGhpcy5jb2x1bW5zID0gW107XHJcbiAgICB0aGlzLnBhZ2VTaXplcyA9IFs1LCAxMCwgMjAsIDUwLCAxMDAsIDIwMCwgNTAwXTtcclxuICAgIHRoaXMucHJldmlvdXNOZXh0ID0gdGhpcy5kYXRhWydFbmFibGVQcmV2aW91c05leHRCdXR0b24nXSB8fCBmYWxzZTtcclxuXHJcbiAgICAvLyBbTW9iaWxlXSBEaXNhYmxlIHBhZ2Ugc2l6ZXMgaWYgUGFnZVNpemVzIGlzIGV4cGxpY2l0bHkgc2V0IHRvIGZhbHNlIG9yIG9uIGEgbW9iaWxlIHNjcmVlbi5cclxuICAgIGlmICh0aGlzLmRhdGEuUGFnZVNpemVzID09PSBmYWxzZSB8fCB0aGlzLmlzTW9iaWxlU2NyZWVuKCkpIHtcclxuICAgICAgdGhpcy5wYWdlU2l6ZXMgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBDb25maWd1cmUgcGFnaW5hdGlvbiBzZXR0aW5ncy5cclxuICAgIHRoaXMucGFnZWFibGUgPSB0aGlzLmRhdGEucGFnZUFibGUgIT0gdW5kZWZpbmVkID8gdGhpcy5kYXRhLnBhZ2VBYmxlIDoge1xyXG4gICAgICByZXNwb25zaXZlOiB0cnVlLFxyXG4gICAgICBidXR0b25Db3VudDogMyxcclxuICAgICAgcGFnZVNpemVzOiB0aGlzLnBhZ2VTaXplcyxcclxuICAgICAgcHJldmlvdXNOZXh0OiB0aGlzLnByZXZpb3VzTmV4dCxcclxuICAgIH07XHJcblxyXG4gICAgLy8gQ29uZmlndXJlIGdyaWQgc2VsZWN0aW9uIG9wdGlvbnMgaWYgc2V0IFNlbGVjdE9wdGlvbnMgaW4gZmllbGQgZWxlbWVudCBhdHRyaWJ1dGUuXHJcbiAgICBpZiAodGhpcy5kYXRhLlNlbGVjdE9wdGlvbnMpIHtcclxuICAgICAgdGhpcy5zZWxlY3RhYmxlU2V0dGluZ3MgPSB7XHJcbiAgICAgICAgLy8gY2hlY2tib3hPbmx5OiB0aGlzLmNoZWNrYm94T25seSxcclxuICAgICAgICBtb2RlOiB0aGlzLmRhdGEuU2VsZWN0T3B0aW9ucy50b0xvd2VyQ2FzZSgpID09PSAnc2luZ2xlJyA/ICdzaW5nbGUnIDogJ211bHRpcGxlJ1xyXG4gICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEJpbmQgY29tcG9uZW50IHRvIGdyb3VwIHVzaW5nIHRoZSBwcm92aWRlZCBWYWx1ZSBzZXQgaW4gZmllbGQgZWxlbWVudCBhdHRyaWJ1dGUuXHJcbiAgICBpZiAodGhpcy5kYXRhLlZhbHVlLnN0YXJ0c1dpdGgoJ2dyb3VwLicpKSB7XHJcbiAgICAgIHRoaXMuZ3JvdXBbdGhpcy5kYXRhLlZhbHVlLnNsaWNlKDYpXSA9IHRoaXM7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldHVwU3Vic2NyaXB0aW9uRm9yR3JpZFN1YmplY3QoKSB7XHJcbiAgICAvLyBVbnN1YnNjcmliZSBmcm9tIGFueSBleGlzdGluZyBzdWJzY3JpcHRpb25zIHRvIGF2b2lkIG1lbW9yeSBsZWFrcy5cclxuICAgIGlmICh0aGlzLnN1YnNjcmlwdGlvbikge1xyXG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEZyb20gaGVyZSB3aWxsIGNhbGwgemdyaWQuYmluZGluZy5kaXJlY3RpdmUuXHJcbiAgICAvLyBTdWJzY3JpYmUgdG8gZ2V0IGZyb20gZGlyZWN0aXZlIGFuZCBzZXQgdG8gY29tcG9uZW50XHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbiA9IHRoaXMuZ3JpZFN1YmplY3QucGlwZShcclxuICAgICAgdGFwKGdyaWREaXJlY3RpdmUgPT4ge1xyXG4gICAgICAgIC8vIFNldCB0aGUgemdyaWQgcHJvcGVydHkgYmFzZWQgb24gdGhlIGVtaXR0ZWQgZ3JpZERpcmVjdGl2ZS5cclxuICAgICAgICB0aGlzLnpncmlkID0gZ3JpZERpcmVjdGl2ZTtcclxuXHJcbiAgICAgICAgLy8gVXBkYXRlIHRoZSBjb2x1bW5zIHByb3BlcnR5IHdpdGggdGhlIGdyaWQgY29sdW1ucyBmcm9tIGdyaWREaXJlY3RpdmUuXHJcbiAgICAgICAgdGhpcy5jb2x1bW5zID0gdGhpcy56Z3JpZC5ncmlkU2V0dGluZy5jb2x1bW5zO1xyXG5cclxuICAgICAgICAvLyBDaGVjayBpZiBhdXRvbWF0aWMgYXBwZW5kaW5nIG9mIGEgZ3JpZCBkYXRlIGZpbHRlciBjb2x1bW4gaXMgbm90IGRpc2FibGVkLlxyXG4gICAgICAgIGlmICghdGhpcy5kYXRhLkRpc2FibGVBdXRvQXBwZW5kR3JpZERhdGVGaWx0ZXJDb2wpIHtcclxuICAgICAgICAgIHRoaXMuc2V0RGF0ZUNvbEZvckZpbHRlcmluZygpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gU2V0IHVwIGdyaWQgd2l0aCBpbmxpbmUgZWRpdGluZy5cclxuICAgICAgICB0aGlzLnNldHVwR3JpZFdpdGhJbmxpbmVFZGl0KCk7XHJcblxyXG4gICAgICAgIC8vIFNldCB1cCBhIHBvcG92ZXIgZmVhdHVyZSBiYXNlZCBvbiBjb2x1bW5zIGFuZCBncmlkIGRhdGEuXHJcbiAgICAgICAgdGhpcy5zZXR1cFBvcG92ZXJGZWF0dXJlKHRoaXMuY29sdW1ucywgdGhpcy5nZXRHcmlkRGF0YSgpKTtcclxuICAgICAgfSksXHJcbiAgICAgIHN3aXRjaE1hcCgoKSA9PiB7XHJcbiAgICAgICAgLy8gQ2hlY2sgaWYgY29sdW1uIGhlYWRlcnMgaGF2ZSBhbHJlYWR5IGJlZW4gdHJhbnNsYXRlZC5cclxuICAgICAgICBpZiAodGhpcy5pc0NvbHVtbkhlYWRlclRyYW5zbGF0ZWQpIHtcclxuICAgICAgICAgIHJldHVybiBvZih7fSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBNYXJrIGNvbHVtbiBoZWFkZXJzIGFzIHRyYW5zbGF0ZWQgYW5kIHBlcmZvcm0gdGhlIHRyYW5zbGF0aW9uLlxyXG4gICAgICAgIHRoaXMuaXNDb2x1bW5IZWFkZXJUcmFuc2xhdGVkID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gc3VwZXIudHJhbnNsYXRlQ29sdW1uSGVhZGVyKHRoaXMuY29sdW1ucyk7XHJcbiAgICAgIH0pXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNhdmVHcmlkU2V0dGluZ3MoKTogdm9pZCB7XHJcbiAgICBjb25zdCBncmlkU3RhdGVMb2dpYyA9IHRoaXMuZ3JpZFNlcnZpY2UuZ2V0R3JpZFN0YXRlTG9naWModGhpcy5kYXRhKTtcclxuICAgIGNvbnN0IGNhY2hlTmFtZSA9IHRoaXMuZ3JpZFNlcnZpY2UuZ2V0R3JpZFN0YXRlQ2FjaGVTdG9yYWdlS2V5KEdyaWRTZXR0aW5nVHlwZS5TYXZlZFNldHRpbmcsIHRoaXMuZGF0YSk7XHJcblxyXG4gICAgdGhpcy56Z3JpZC5ncmlkU2V0dGluZy5jb2x1bW5Db25maWd1cmF0aW9ucyA9IFpDb21wb25lbnRIZWxwZXIuZ2V0R3JpZENvbHVtbnNDb25maWcodGhpcy56Z3JpZC5ncmlkLmNvbHVtbnMpO1xyXG5cclxuICAgIGNvbnN0IHNldHRpbmdDb25maWc6IFpHcmlkU2V0dGluZ3MgPSB7XHJcbiAgICAgIGNvbHVtbkNvbmZpZ3VyYXRpb25zOiB0aGlzLnpncmlkLmdyaWRTZXR0aW5nLmNvbHVtbkNvbmZpZ3VyYXRpb25zXHJcbiAgICB9O1xyXG5cclxuICAgIGlmIChncmlkU3RhdGVMb2dpYyA9PT0gR3JpZFN0YXRlTG9naWNUeXBlLlNldHRpbmdPbmx5KSB7XHJcbiAgICAgIHNldHRpbmdDb25maWcuZ3JpZFN0YXRlID0gdGhpcy56Z3JpZC5ncmlkU2V0dGluZy5ncmlkU3RhdGU7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgZ3JpZFNldHRpbmcgPSBKU09OLnN0cmluZ2lmeShzZXR0aW5nQ29uZmlnKTtcclxuICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oY2FjaGVOYW1lLCBncmlkU2V0dGluZyk7XHJcblxyXG4gICAgY29uc3QganNvbkNhY2hlOiBKc29uQ2FjaGUgPSB7XHJcbiAgICAgIEZpbGVOYW1lOiBjYWNoZU5hbWUsXHJcbiAgICAgIEpzb25Db250ZW50OiBncmlkU2V0dGluZ1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMub2ZmbGluZURhdGFiYXNlU2VydmljZS5zYXZlSnNvbkNhY2hlKGpzb25DYWNoZSkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgdGhpcy5zaG93SGlkZVJlc3RvcmVHcmlkU2V0dGluZ0J1dHRvbigpO1xyXG4gICAgdGhpcy50b2FzdFNlcnZpY2Uuc2hvdygnR3JpZCBTZXR0aW5nIFNhdmVkJywgXCJ0b3BcIiwgdHJ1ZSwgMjAwMCwgJ3N1Y2Nlc3MnKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyByZXN0b3JlR3JpZFNldHRpbmdzKCkge1xyXG4gICAgdGhpcy5jb2x1bW5zLnNvcnQoKGEsIGIpID0+IGEub3JpZ2luYWxPcmRlckluZGV4IC0gYi5vcmlnaW5hbE9yZGVySW5kZXgpO1xyXG4gICAgdGhpcy5nZW5lcmF0ZUdyaWRDb2x1bW5zKCkuc3Vic2NyaWJlKHJlc3AgPT4ge1xyXG4gICAgICB0aGlzLmdldERhdGEoKTtcclxuICAgIH0pO1xyXG4gICAgY29uc3QgY2FjaGVOYW1lID0gdGhpcy5ncmlkU2VydmljZS5nZXRHcmlkU3RhdGVDYWNoZVN0b3JhZ2VLZXkoR3JpZFNldHRpbmdUeXBlLlNhdmVkU2V0dGluZywgdGhpcy5kYXRhKTtcclxuICAgIHNlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0oY2FjaGVOYW1lKTtcclxuXHJcbiAgICB0aGlzLnNob3dIaWRlUmVzdG9yZUdyaWRTZXR0aW5nQnV0dG9uKCk7XHJcblxyXG4gICAgdGhpcy5vZmZsaW5lRGF0YWJhc2VTZXJ2aWNlLnJlbW92ZUpzb25DYWNoZSh7XHJcbiAgICAgIEZpbGVOYW1lOiBjYWNoZU5hbWVcclxuICAgIH0pLnN1YnNjcmliZSgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdyaWRDYWxsYmFjayhncm91cDogWkdyb3VwKSB7XHJcbiAgICBpZiAodGhpcy5kYXRhWydBZnRlcmxvYWRDYWxsYmFjayddKSB7XHJcbiAgICAgIGNvbnN0IG1lID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcyk7XHJcblxyXG4gICAgICB0aGlzLmdyb3VwLnN1YmplY3QubmV4dCh7XHJcbiAgICAgICAgdHlwZTogXCJ6Z3JpZC1BZnRlcmxvYWRDYWxsYmFja1wiLFxyXG4gICAgICAgIHRhcmdldDogdGhpcy5kYXRhWydBZnRlcmxvYWRDYWxsYmFjayddLFxyXG4gICAgICAgIGRhdGE6IG1lXHJcbiAgICAgIH0gYXMgWkNvbXBvbmVudE91dHB1dEV2ZW50KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0dXBHcmlkQnV0dG9ucygpIHtcclxuICAgIGlmICh0aGlzLmRhdGEuR3JpZEJ1dHRvbkZpZWxkTmFtZV9XRiB8fCB0aGlzLmRhdGEuR3JpZEJ1dHRvbkZpZWxkTmFtZSkge1xyXG4gICAgICB0aGlzLmdyaWRCdG4gPSB7XHJcbiAgICAgICAgUmVhZE9ubHk6IGZhbHNlLFxyXG4gICAgICAgIFZpc2libGU6IHRydWUsXHJcbiAgICAgICAgSXNSZXF1aXJlZDogZmFsc2UsXHJcbiAgICAgICAgV29ya2Zsb3dDb2RlOiB0aGlzLmRhdGEuR3JpZEJ1dHRvbkZpZWxkTmFtZV9XRixcclxuICAgICAgICBWYWx1ZTogdGhpcy5kYXRhLkdyaWRCdXR0b25GaWVsZE5hbWUsXHJcbiAgICAgICAgVHlwZTogdGhpcy5kYXRhLkdyaWRCdXR0b25GaWVsZE5hbWVfV0YgPyBcInp3b3JrZmxvd2J1dHRvbnNcIiA6IFwiemJ1dHRvbnNcIlxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zaG93SGlkZVJlc3RvcmVHcmlkU2V0dGluZ0J1dHRvbigpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXREYXRlQ29sRm9yRmlsdGVyaW5nKCkge1xyXG4gICAgY29uc3QgZ3JpZERhdGEgPSB0aGlzLmdldEdyaWREYXRhKCk7XHJcbiAgICBpZiAodGhpcy5pc1VzZUxvY2FsRGF0YSgpICYmIGdyaWREYXRhICYmIGdyaWREYXRhLmxlbmd0aCA+IDApIHtcclxuICAgICAgY29uc3QgZGF0ZUNvbCA9IE9iamVjdC5rZXlzKGdyaWREYXRhWzBdKS5maWx0ZXIoeCA9PiB4LmluY2x1ZGVzKFwiRGF0ZVwiKSAmJiAheC5lbmRzV2l0aChDb21wb25lbnRDb25zdGFudC5HcmlkQ29sRGF0ZUZpbHRlclN1ZmZpeCkpO1xyXG4gICAgICBpZiAoZGF0ZUNvbCAmJiBkYXRlQ29sLmxlbmd0aCA+IDApIHtcclxuICAgICAgICBncmlkRGF0YS5mb3JFYWNoKGRhdGEgPT4ge1xyXG4gICAgICAgICAgZGF0ZUNvbC5mb3JFYWNoKGNvbE5hbWUgPT4ge1xyXG4gICAgICAgICAgICBkYXRhW2Ake2NvbE5hbWV9JHtDb21wb25lbnRDb25zdGFudC5HcmlkQ29sRGF0ZUZpbHRlclN1ZmZpeH1gXSA9IG5ldyBEYXRlKGRhdGFbY29sTmFtZV0pO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2hvd0hpZGVSZXN0b3JlR3JpZFNldHRpbmdCdXR0b24oKSB7XHJcbiAgICBpZiAodGhpcy5kYXRhLkNhY2hlSW5mbz8uRW5hYmxlU2F2ZVN0YXRlKSB7XHJcbiAgICAgIGNvbnN0IHNldHRpbmdDYWNoZU5hbWUgPSB0aGlzLmdyaWRTZXJ2aWNlLmdldEdyaWRTdGF0ZUNhY2hlU3RvcmFnZUtleShHcmlkU2V0dGluZ1R5cGUuU2F2ZWRTZXR0aW5nLCB0aGlzLmRhdGEpO1xyXG4gICAgICBjb25zdCBzZXR0aW5nQ2FjaGVWYWx1ZSA9IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oc2V0dGluZ0NhY2hlTmFtZSk7XHJcblxyXG4gICAgICB0aGlzLnNob3dSZXN0b3JlR3JpZFNldHRpbmdCdXR0b24gPSBzZXR0aW5nQ2FjaGVWYWx1ZSA/IHRydWUgOiBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8vI3JlZ2lvbiBHcmlkIGNvbmZpZ3VyYXRpb24gZnVuY3Rpb25cclxuICBwdWJsaWMgZ3JpZEN1c3RvbUFkZENvbW1hbmQoZ3JvdXA6IFpHcm91cCk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICAvLyBkZWNsYXJlIGJ1dHRvbiBvbmNsaWNrIGV2ZW50IG5hbWUgYmFzZSBvbiBncmlkIG5hbWUgKyBwcmVmaXhcclxuICAgIGNvbnN0IGdyaWRBZGRCdXR0b25FdmVudE5hbWUgPSB0aGlzLmRhdGEuTmFtZSArICdfQ3VzdG9tQWRkQnV0dG9uT25DbGljayc7XHJcbiAgICBpZiAoIXRoaXMuZ3JvdXBbZ3JpZEFkZEJ1dHRvbkV2ZW50TmFtZV0pIHtcclxuICAgICAgcmV0dXJuIG9mKHt9KTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdGhpcy5ncm91cFtncmlkQWRkQnV0dG9uRXZlbnROYW1lXShncm91cCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ3JpZEN1c3RvbVJlc2V0Q29tbWFuZChncm91cDogWkdyb3VwKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIC8vIGRlY2xhcmUgYnV0dG9uIG9uY2xpY2sgZXZlbnQgbmFtZSBiYXNlIG9uIGdyaWQgbmFtZSArIHByZWZpeFxyXG4gICAgY29uc3QgZ3JpZFJlc2V0QnV0dG9uRXZlbnROYW1lID0gdGhpcy5kYXRhLk5hbWUgKyAnX0N1c3RvbVJlc2V0QnV0dG9uT25DbGljayc7XHJcbiAgICBpZiAoIXRoaXMuZ3JvdXBbZ3JpZFJlc2V0QnV0dG9uRXZlbnROYW1lXSkge1xyXG4gICAgICByZXR1cm4gb2Yoe30pO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aGlzLmdyb3VwW2dyaWRSZXNldEJ1dHRvbkV2ZW50TmFtZV0oZ3JvdXApO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdyaWRDdXN0b21SZW1vdmVDb21tYW5kKGRhdGFJdGVtOiBhbnksIHJvd0luZGV4OiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgLy8gZGVjbGFyZSBidXR0b24gb25jbGljayBldmVudCBuYW1lIGJhc2Ugb24gZ3JpZCBuYW1lICsgcHJlZml4XHJcbiAgICBjb25zdCBncmlkUmVzZXRCdXR0b25FdmVudE5hbWUgPSB0aGlzLmRhdGEuTmFtZSArICdfQ3VzdG9tUmVtb3ZlQnV0dG9uT25DbGljayc7XHJcbiAgICBpZiAoIXRoaXMuZ3JvdXBbZ3JpZFJlc2V0QnV0dG9uRXZlbnROYW1lXSkge1xyXG4gICAgICByZXR1cm4gb2Yoe30pO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aGlzLmdyb3VwW2dyaWRSZXNldEJ1dHRvbkV2ZW50TmFtZV0oZGF0YUl0ZW0sIHJvd0luZGV4KTtcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8vI3JlZ2lvbiBJbmxpbmUgRWRpdFxyXG4gIHByaXZhdGUgY3JlYXRlRm9ybUNvbnRyb2xzKGdyaWRDb2xzOiBBcnJheTxhbnk+KSB7XHJcbiAgICBsZXQgY291bnRlckluZGV4ID0gMDtcclxuICAgIC8vIFRvIGZvcmNlIGVsZW1lbnQgdG8gcmViaW5kIGRhdGFcclxuICAgIHRoaXMuaXNJbmxpbmVFZGl0SW5wdXRGaWVsZExvYWRpbmcgPSB0cnVlO1xyXG4gICAgdGhpcy56Z3JpZC5ncmlkLmxvYWRpbmcgPSB0cnVlO1xyXG4gICAgb2YoW10pLnBpcGUoZGVsYXkoMCksIHRhcCgoKSA9PiB7XHJcbiAgICAgIHRoaXMuaW5saW5lRWRpdGVkRm9ybUdyb3VwcyA9IHRoaXMuaW5saW5lRWRpdGVkRm9ybUdyb3VwcyB8fCB7fTtcclxuICAgICAgY29uc3QgZ3JpZERhdGEgPSB0aGlzLmdldEdyaWREYXRhKCk7XHJcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGdyaWREYXRhKSkge1xyXG4gICAgICAgIGdyaWREYXRhLmZvckVhY2goZCA9PiB7XHJcbiAgICAgICAgICBjb25zdCBpdGVtcyA9IHt9O1xyXG4gICAgICAgICAgZ3JpZENvbHMuZm9yRWFjaChjID0+IHtcclxuICAgICAgICAgICAgY29uc3QgaXNWaXNpYmxlID0gWkNvbXBvbmVudEhlbHBlci5pc1Zpc2libGVGb3JtQ29udHJvbCh0aGlzLCBjLmZpZWxkKTtcclxuICAgICAgICAgICAgY29uc3QgaXNSZXF1aXJlZCA9IFpDb21wb25lbnRIZWxwZXIuaXNSZXF1aXJlZEZvcm1Db250cm9sKHRoaXMsIGMuZmllbGQpO1xyXG4gICAgICAgICAgICBjb25zdCB2YWxpZGF0b3JzOiBWYWxpZGF0b3JGbltdID0gWkNvbXBvbmVudEhlbHBlci5nZXRWYWxpZGF0b3JzKGMuZmllbGQsIGlzVmlzaWJsZSwgaXNSZXF1aXJlZCwgdGhpcy5ncm91cCk7XHJcbiAgICAgICAgICAgIGl0ZW1zW2MuZmllbGRdID0gbmV3IEZvcm1Db250cm9sKGRbYy5maWVsZF0sIHZhbGlkYXRvcnMpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICBjb25zdCBmb3JtR3JvdXAgPSBuZXcgRm9ybUdyb3VwKGl0ZW1zKTtcclxuXHJcbiAgICAgICAgICBpZiAoZFtcIklkXCJdKSB7XHJcbiAgICAgICAgICAgIGl0ZW1zW1wiSWRcIl0gPSBpdGVtc1tcIklkXCJdIHx8IG5ldyBGb3JtQ29udHJvbCh7IHZhbHVlOiBkW1wiSWRcIl0sIGRpc2FibGVkOiBmYWxzZSB9KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBkW1wiSWRcIl0gPSBjb3VudGVySW5kZXgrKztcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMuaW5saW5lRWRpdGVkRm9ybUdyb3Vwc1tkW1wiSWRcIl1dID0gZm9ybUdyb3VwO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuaXNJbmxpbmVFZGl0SW5wdXRGaWVsZExvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgdGhpcy56Z3JpZC5ncmlkLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgdGhpcy50ZW1wSW5saW5lRWRpdGVkRm9ybUdyb3VwcyA9IHRoaXMuaW5saW5lRWRpdGVkRm9ybUdyb3VwcztcclxuICAgIH0pKS5zdWJzY3JpYmUoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRJbmxpbmVGaWVsZCh2YWx1ZTogYW55KSB7XHJcbiAgICByZXR1cm4gdGhpcy5jb2x1bW5zLmZpbmQoeCA9PiB4LlZhbHVlID09PSB2YWx1ZSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0SW5saW5lRm9ybShkYXRhOiBhbnksIHJvd0luZGV4OiBudW1iZXIpIHtcclxuICAgIHZhciBrZXkgPSAoZGF0YVtcIklkXCJdIHx8IGRhdGFbXCJJZFwiXSA9PSAwKSA/IGRhdGFbXCJJZFwiXSA6IHJvd0luZGV4O1xyXG4gICAgaWYgKHRoaXMuaXNJbmxpbmVFZGl0SW5wdXRGaWVsZExvYWRpbmcpIHtcclxuICAgICAgcmV0dXJuIHRoaXMudGVtcElubGluZUVkaXRlZEZvcm1Hcm91cHNba2V5XSB8fCB0aGlzLnRlbXBJbmxpbmVFZGl0ZWRGb3JtR3JvdXBzWzBdO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuaW5saW5lRWRpdGVkRm9ybUdyb3Vwc1trZXldO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldEZvcm1Db250cm9sRGF0YSgpOiBhbnlbXSB7XHJcbiAgICBjb25zdCBkYXRhID0gW107XHJcbiAgICBmb3IgKGNvbnN0IGsgb2YgT2JqZWN0LmtleXModGhpcy5pbmxpbmVFZGl0ZWRGb3JtR3JvdXBzKSkge1xyXG4gICAgICBkYXRhLnB1c2godGhpcy5pbmxpbmVFZGl0ZWRGb3JtR3JvdXBzW2tdPy52YWx1ZSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZGF0YTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0dXBHcmlkV2l0aElubGluZUVkaXQoKSB7XHJcbiAgICBpZiAodGhpcy5oYXNJbmxpbmVFZGl0Q29sdW1uKHRoaXMuY29sdW1ucykpIHtcclxuICAgICAgdGhpcy50ZW1wSW5saW5lRWRpdGVkRm9ybUdyb3VwcyA9IHRoaXMuaW5saW5lRWRpdGVkRm9ybUdyb3VwcztcclxuICAgICAgdGhpcy5pbmxpbmVFZGl0ZWRGb3JtR3JvdXBzID0ge307XHJcbiAgICAgIHRoaXMuY3JlYXRlRm9ybUNvbnRyb2xzKHRoaXMuY29sdW1ucy5jb25jYXQodGhpcy5nZW5lcmF0ZUhpZGRlbkNvbHVtbnNGaWVsZCB8fCBbXSkpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGlzSW5saW5lRm9ybUdyb3VwSGFzVmFsdWUoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5pbmxpbmVFZGl0ZWRGb3JtR3JvdXBzICYmIE9iamVjdC5rZXlzKHRoaXMuaW5saW5lRWRpdGVkRm9ybUdyb3VwcykubGVuZ3RoID4gMDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaGFzSW5saW5lRWRpdENvbHVtbihncmlkQ29scyk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIGdyaWRDb2xzICYmIGdyaWRDb2xzLnNvbWUoYyA9PiBjLmlzRWRpdGFibGVJbkdyaWQpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldENlbGxTdHlsZUZvcklubGluZUVkaXQoY29sdW1uRmllbGQ6IFpGaWVsZCwgZGF0YUl0ZW06IGFueSwgcm93SW5kZXg6IG51bWJlcik6IGFueSB7XHJcbiAgICBjb25zdCBmb3JtID0gdGhpcy5nZXRJbmxpbmVGb3JtKGRhdGFJdGVtLCByb3dJbmRleCkgYXMgRm9ybUdyb3VwO1xyXG4gICAgaWYgKCFmb3JtKSB7XHJcbiAgICAgIHJldHVybiB7fTtcclxuICAgIH1cclxuICAgIGNvbnN0IHN0eWxlID0gY29sdW1uRmllbGRbYFN0eWxlMTBgXTtcclxuICAgIGNvbnN0IGZ1bmMgPSBaQ29tcG9uZW50SGVscGVyLmdldEdyb3VwRXZhbFZhbHVlLmNhbGwodGhpcywgc3R5bGUpO1xyXG4gICAgaWYgKHR5cGVvZiBmdW5jID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgIGNvbnN0IGNhbGxGdW5jID0gZnVuYy5iaW5kKHRoaXMuZ3JvdXAuY3RybFNjb3BlKTtcclxuICAgICAgcmV0dXJuIGNhbGxGdW5jKGZvcm0udmFsdWUpO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAodHlwZW9mIGZ1bmMgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgIHJldHVybiBmdW5jO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHN0eWxlO1xyXG4gIH1cclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgLy8jcmVnaW9uIEV2ZW50XHJcbiAgcHVibGljIGJlZm9yZUdyaWRHZXREYXRhKGdyb3VwOiBaR3JvdXAsIG1lOiBhbnkpIHtcclxuICAgIGNvbnNvbGUud2FybihcImJlZm9yZURhdGFCaW5kaW5nIHRyaWdnZXJlZFwiKTtcclxuICAgIGlmICghZ3JvdXAuYmVmb3JlR3JpZEdldERhdGEpIHtcclxuICAgICAgY29uc29sZS53YXJuKFwiZ3JvdXAuYmVmb3JlRGF0YUJpbmRpbmcgaXMgdW5kZWZpbmVkXCIpO1xyXG4gICAgICByZXR1cm4gb2YodHJ1ZSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZ3JvdXAuYmVmb3JlR3JpZEdldERhdGEoZ3JvdXAsIG1lKTtcclxuICB9XHJcblxyXG4gIC8vIFNvdXJjZTogaHR0cHM6Ly93d3cudGVsZXJpay5jb20vZm9ydW1zL2tlbmRvLWFuZ3VsYXItZ3JpZC1ibGFuay1zcGFjZS1pbi10aGUtZW5kLXdoZW4teW91LXJlc2l6ZShyZWR1Y2UpLWFueS1jb2x1bW5cclxuICBwdWJsaWMgYWRqdXN0V2lkdGhVcG9uUmVzaXplKCkge1xyXG4gICAgY29uc3QgdGFibGVXaWR0aCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIuay1ncmlkLXRhYmxlXCIpW2BvZmZzZXRXaWR0aGBdO1xyXG4gICAgY29uc3QgY29udGVudFdpZHRoID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5rLWdyaWQtY29udGVudFwiKVtgb2Zmc2V0V2lkdGhgXTtcclxuICAgIGlmICh0YWJsZVdpZHRoIDwgY29udGVudFdpZHRoKSB7XHJcbiAgICAgIGNvbnN0IGN1cnJlbnRMYXN0Q29sV2lkdGggPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLmstZ3JpZC1jb250ZW50IC5rLWdyaWQtdGFibGUgdHIgdGQ6bGFzdC1vZi10eXBlXCIpW2BvZmZzZXRXaWR0aGBdO1xyXG5cclxuICAgICAgdGhpcy5jb2x1bW5zW3RoaXMuY29sdW1ucy5sZW5ndGggLSAxXS53aWR0aCA9IGN1cnJlbnRMYXN0Q29sV2lkdGggKyAoY29udGVudFdpZHRoIC0gdGFibGVXaWR0aCkgLSAxMDsgLy8gYWNjb3VudCBmb3IgdGhlIHZlcnRpY2FsIHNjcm9sbGJhcjtcclxuICAgIH1cclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8vI3JlZ2lvbiBvbkNoYW5nZSBFdmVudHNcclxuICBwdWJsaWMgZmlsdGVyQ2hhbmdlKGV2ZW50OiBhbnkpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5pc1VzZUxvY2FsRGF0YSgpKSB7XHJcbiAgICAgIHRoaXMuZ3JpZFNldHRpbmcgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLnpncmlkLmdyaWRTZXR0aW5nKTtcclxuICAgICAgdGhpcy56Z3JpZC5maWx0ZXJDaGFuZ2UoZXZlbnQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHBhZ2VDaGFuZ2UoZXZlbnQ6IFBhZ2VDaGFuZ2VFdmVudCk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLmlzVXNlTG9jYWxEYXRhKCkpIHtcclxuICAgICAgdGhpcy5ncmlkU2V0dGluZyA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuemdyaWQuZ3JpZFNldHRpbmcpO1xyXG4gICAgICB0aGlzLnpncmlkLnBhZ2VDaGFuZ2UoZXZlbnQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHNvcnRDaGFuZ2Uoc29ydDogU29ydERlc2NyaXB0b3JbXSk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLmlzVXNlTG9jYWxEYXRhKCkpIHtcclxuICAgICAgdGhpcy5ncmlkU2V0dGluZyA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuemdyaWQuZ3JpZFNldHRpbmcpO1xyXG4gICAgICB0aGlzLnpncmlkLnNvcnRDaGFuZ2Uoc29ydCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaW5DZWxsQ2hlY2tCb3hPbkNoYW5nZShldmVudDogYW55LCByb3dJbmRleDogYW55LCBjb2x1bW46IGFueSkge1xyXG4gICAgY29uc3QgaXNDaGVja2VkID0gZXZlbnQuZGV0YWlsLmNoZWNrZWQ7XHJcbiAgICBjb25zdCBnRGF0YSA9IHRoaXMuZ2V0R3JpZERhdGEoKTtcclxuICAgIGdEYXRhW3Jvd0luZGV4XVtjb2x1bW4uVmFsdWVdID0gaXNDaGVja2VkO1xyXG4gIH1cclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgLy8jcmVnaW9uIGNvbW1hbmQgaGFuZGxlclxyXG4gIHB1YmxpYyBhZGRIYW5kbGVyKHsgc2VuZGVyIH0pIHtcclxuICAgIHRoaXMuaXNOZXcgPSB0cnVlO1xyXG5cclxuICAgIC8vIGNsb3NlIGFueSBleGlzdGluZyBlZGl0b3JcclxuICAgIHRoaXMuY2xvc2VFZGl0b3Ioc2VuZGVyKTtcclxuXHJcbiAgICAvLyBsb29wIGFsbCBjb2x1bW4gdG8gZ2V0IHZhbGlkYXRpb24gYW5kIGNyZWF0ZSBmb3JtIGNvbnRyb2xcclxuICAgIGNvbnN0IGNvbEZvcm1Db250cm9sID0ge307XHJcbiAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaChjb2wgPT4ge1xyXG4gICAgICBjb25zdCB2YWxpZGF0b3JzOiBWYWxpZGF0b3JGbltdID0gW107XHJcbiAgICAgIGlmIChjb2wuSXNSZXF1aXJlZCkge1xyXG4gICAgICAgIHZhbGlkYXRvcnMucHVzaChWYWxpZGF0b3JzLnJlcXVpcmVkKTtcclxuICAgICAgICBpZiAoY29sLlR5cGUgPT09ICd6dGV4dGVkaXRvcicpIHtcclxuICAgICAgICAgIHZhbGlkYXRvcnMucHVzaChaQ29tcG9uZW50SGVscGVyLnJlcXVpcmVkVmFsaWRhdG9yX1dpdGhvdXRXaGl0ZVNwYWNlc19UZXh0RWRpdG9yKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICB2YWxpZGF0b3JzLnB1c2goWkNvbXBvbmVudEhlbHBlci5yZXF1aXJlZFZhbGlkYXRvcl9XaXRob3V0V2hpdGVTcGFjZXMpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBpZiAoY29sLlZhbGlkYXRvclBhdHRlcm4pIHtcclxuICAgICAgICB2YWxpZGF0b3JzLnB1c2goVmFsaWRhdG9ycy5wYXR0ZXJuKGNvbC5WYWxpZGF0b3JQYXR0ZXJuKSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbEZvcm1Db250cm9sW2NvbC5WYWx1ZV0gPSBuZXcgRm9ybUNvbnRyb2wobnVsbCwgdmFsaWRhdG9ycyk7XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBzZXQgZm9ybSBjb250cm9sIG9iamVjdCB0byBmb3JtIGdyb3VwXHJcbiAgICB0aGlzLmZvcm1Hcm91cCA9IG5ldyBGb3JtR3JvdXAoY29sRm9ybUNvbnRyb2wpO1xyXG5cclxuICAgIC8vIGFkZCB0byBncmlkIHJvd1xyXG4gICAgc2VuZGVyLmFkZFJvdyh0aGlzLmZvcm1Hcm91cCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2F2ZUhhbmRsZXIoeyBzZW5kZXIsIHJvd0luZGV4LCBmb3JtR3JvdXAsIGlzTmV3IH0pOiB2b2lkIHtcclxuICAgIC8vIEdldCB0aGUgZXhpc3RpbmcgZGF0YSBmcm9tIHRoZSBncmlkXHJcbiAgICBjb25zdCBncmlkRXhpc3RpbmdEYXRhID0gdGhpcy5nZXRHcmlkRGF0YSgpO1xyXG5cclxuICAgIC8vIENoZWNrIGlmIHRoZSBmb3JtIGlzIHZhbGlkXHJcbiAgICBpZiAoZm9ybUdyb3VwLnZhbGlkKSB7XHJcbiAgICAgIC8vIENoZWNrIGZvciBhIHVuaXF1ZSBrZXkgZmllbGRcclxuICAgICAgY29uc3QgdW5pcXVlS2V5ID0gdGhpcy5kYXRhWydVbmlxdWVLZXknXTtcclxuICAgICAgaWYgKHVuaXF1ZUtleSkge1xyXG4gICAgICAgIC8vIEdldCB0aGUgdW5pcXVlIGtleSB2YWx1ZSBmcm9tIHRoZSBmb3JtXHJcbiAgICAgICAgY29uc3QgZm9ybVVuaXF1ZUtleVZhbHVlID0gZm9ybUdyb3VwLnZhbHVlW3VuaXF1ZUtleV07XHJcblxyXG4gICAgICAgIC8vIENoZWNrIGlmIHRoZXJlIGlzIGEgZHVwbGljYXRlIHZhbHVlXHJcbiAgICAgICAgY29uc3QgaXNEdXBsaWNhdGUgPSBncmlkRXhpc3RpbmdEYXRhLnNvbWUoZGF0YSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAvLyBJZiBlZGl0aW5nIGFuIGV4aXN0aW5nIHJvdywgc2tpcCB0aGUgY3VycmVudCByb3cgYmVpbmcgZWRpdGVkXHJcbiAgICAgICAgICAgICFpc05ldyAmJlxyXG4gICAgICAgICAgICByb3dJbmRleCAhPT0gdW5kZWZpbmVkICYmXHJcbiAgICAgICAgICAgIC8vIENoZWNrIGlmIHRoZSB1bmlxdWUga2V5IHZhbHVlIGFscmVhZHkgZXhpc3RzIGluIHRoZSBncmlkXHJcbiAgICAgICAgICAgIGRhdGFbdW5pcXVlS2V5XSA9PT0gZm9ybVVuaXF1ZUtleVZhbHVlICYmXHJcbiAgICAgICAgICAgIC8vIFNraXAgY2hlY2tpbmcgYWdhaW5zdCB0aGUgY3VycmVudCByb3cgYmVpbmcgZWRpdGVkXHJcbiAgICAgICAgICAgIGRhdGFbdW5pcXVlS2V5XSAhPT0gZ3JpZEV4aXN0aW5nRGF0YVtyb3dJbmRleF1bdW5pcXVlS2V5XVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgLy8gSWYgdGhlcmUgaXMgYSBkdXBsaWNhdGUgdmFsdWUsIHNob3cgYW4gZXJyb3IgbWVzc2FnZSBhbmQgcmV0dXJuIHdpdGhvdXQgc2F2aW5nXHJcbiAgICAgICAgaWYgKGlzRHVwbGljYXRlKSB7XHJcbiAgICAgICAgICB0aGlzLnRvYXN0U2VydmljZS5zaG93KCdFcnJvciBvY2N1cjogRHVwbGljYXRlZCB1bmlxdWUgZmllbGQgZW50cnkuJywgJ3RvcCcsIHRydWUsIDMwMDAsICdkYW5nZXInKTtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIElmIHRoZSB1bmlxdWUga2V5IHZhbHVlIGlzIHZhbGlkIGFuZCB0aGVyZSBhcmUgbm8gZHVwbGljYXRlcywgc2F2ZSB0aGUgZGF0YVxyXG4gICAgICBpZiAoaXNOZXcpIHtcclxuICAgICAgICAvLyBBZGQgYSBuZXcgcm93IHRvIHRoZSBncmlkIGRhdGFcclxuICAgICAgICBncmlkRXhpc3RpbmdEYXRhLnB1c2goZm9ybUdyb3VwLnZhbHVlKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAvLyBVcGRhdGUgYW4gZXhpc3Rpbmcgcm93IGluIHRoZSBncmlkIGRhdGFcclxuICAgICAgICBncmlkRXhpc3RpbmdEYXRhW3Jvd0luZGV4XSA9IGZvcm1Hcm91cC52YWx1ZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gVXBkYXRlIHRoZSBncmlkIGRhdGEgYW5kIGNsb3NlIHRoZSByb3cgZWRpdG9yXHJcbiAgICAgIHRoaXMuc2V0RGF0YShncmlkRXhpc3RpbmdEYXRhKTtcclxuICAgICAgc2VuZGVyLmNsb3NlUm93KHJvd0luZGV4KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBjYW5jZWxIYW5kbGVyKHsgc2VuZGVyLCByb3dJbmRleCB9KSB7XHJcbiAgICAvLyBjYW5jZWwgYW55IGV4aXN0aW5nIGVkaXRvclxyXG4gICAgc2VuZGVyLmNsb3NlUm93KHJvd0luZGV4KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBlZGl0SGFuZGxlcih7IHNlbmRlciwgcm93SW5kZXgsIGRhdGFJdGVtIH0pIHtcclxuICAgIC8vIFNldCBhIGZsYWcgdG8gaW5kaWNhdGUgdGhhdCB0aGUgcm93IGJlaW5nIGVkaXRlZCBpcyBub3QgYSBuZXcgcm93XHJcbiAgICB0aGlzLmlzTmV3ID0gZmFsc2U7XHJcblxyXG4gICAgLy8gQ2xvc2UgYW55IGV4aXN0aW5nIGVkaXRvclxyXG4gICAgdGhpcy5jbG9zZUVkaXRvcihzZW5kZXIpO1xyXG5cclxuICAgIC8vIGxvb3AgYWxsIGNvbHVtbiB0byBnZXQgdmFsaWRhdGlvbiBhbmQgY3JlYXRlIGZvcm0gY29udHJvbCwgYXBwZW5kIGN1cnJlbnQgcm93IHZhbHVlXHJcbiAgICBjb25zdCBjb2xGb3JtQ29udHJvbCA9IHt9O1xyXG4gICAgdGhpcy5jb2x1bW5zLmZvckVhY2goY29sID0+IHtcclxuICAgICAgY29uc3QgdmFsaWRhdG9yczogVmFsaWRhdG9yRm5bXSA9IFtdO1xyXG4gICAgICBpZiAoY29sLklzUmVxdWlyZWQpIHtcclxuICAgICAgICB2YWxpZGF0b3JzLnB1c2goVmFsaWRhdG9ycy5yZXF1aXJlZCk7XHJcbiAgICAgICAgaWYgKGNvbC5UeXBlID09PSAnenRleHRlZGl0b3InKSB7XHJcbiAgICAgICAgICB2YWxpZGF0b3JzLnB1c2goWkNvbXBvbmVudEhlbHBlci5yZXF1aXJlZFZhbGlkYXRvcl9XaXRob3V0V2hpdGVTcGFjZXNfVGV4dEVkaXRvcik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgdmFsaWRhdG9ycy5wdXNoKFpDb21wb25lbnRIZWxwZXIucmVxdWlyZWRWYWxpZGF0b3JfV2l0aG91dFdoaXRlU3BhY2VzKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvbC5WYWxpZGF0b3JQYXR0ZXJuKSB7XHJcbiAgICAgICAgdmFsaWRhdG9ycy5wdXNoKFZhbGlkYXRvcnMucGF0dGVybihjb2wuVmFsaWRhdG9yUGF0dGVybikpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb2xGb3JtQ29udHJvbFtjb2wuVmFsdWVdID0gbmV3IEZvcm1Db250cm9sKGRhdGFJdGVtW2NvbC5WYWx1ZV0sIHZhbGlkYXRvcnMpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gc2V0IGZvcm0gY29udHJvbCBvYmplY3QgdG8gZm9ybSBncm91cFxyXG4gICAgdGhpcy5mb3JtR3JvdXAgPSBuZXcgRm9ybUdyb3VwKGNvbEZvcm1Db250cm9sKTtcclxuXHJcbiAgICAvLyBTZXQgdGhlIGZvcm0gZ3JvdXAgb24gdGhlIHJvdyBiZWluZyBlZGl0ZWRcclxuICAgIHRoaXMuZWRpdGVkUm93SW5kZXggPSByb3dJbmRleDtcclxuICAgIHNlbmRlci5lZGl0Um93KHJvd0luZGV4LCB0aGlzLmZvcm1Hcm91cCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcmVtb3ZlSGFuZGxlcih7IHNlbmRlciwgZGF0YUl0ZW0gfSkge1xyXG4gICAgY29uc3QgZ0RhdGEgPSB0aGlzLmdldEdyaWREYXRhKCk7XHJcbiAgICBjb25zdCBpbmRleCA9IHRoaXMuZ2V0SXRlbUluZGV4KGRhdGFJdGVtLCBnRGF0YSwgdGhpcy5kYXRhWydVbmlxdWVLZXknXSk7XHJcbiAgICBnRGF0YS5zcGxpY2UoaW5kZXgsIDEpO1xyXG5cclxuICAgIC8vIFVwZGF0ZSB0aGUgZGF0YSBpbiB0aGUgZ3JpZFxyXG4gICAgdGhpcy5zZXREYXRhKGdEYXRhKTtcclxuXHJcbiAgICBzZW5kZXIuY2FuY2VsQ2VsbCgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjbG9zZUVkaXRvcihncmlkLCByb3dJbmRleCA9IHRoaXMuZWRpdGVkUm93SW5kZXgpIHtcclxuICAgIGdyaWQuY2xvc2VSb3cocm93SW5kZXgpO1xyXG4gICAgdGhpcy5lZGl0ZWRSb3dJbmRleCA9IHVuZGVmaW5lZDtcclxuICAgIHRoaXMuZm9ybUdyb3VwID0gdW5kZWZpbmVkO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRJdGVtSW5kZXgoaXRlbTogYW55LCBkYXRhOiBhbnlbXSwga2V5OiBzdHJpbmcpOiBudW1iZXIge1xyXG4gICAgZm9yIChsZXQgaWR4ID0gMDsgaWR4IDwgZGF0YS5sZW5ndGg7IGlkeCsrKSB7XHJcbiAgICAgIGlmIChkYXRhW2lkeF1ba2V5XSA9PT0gaXRlbVtrZXldKSB7XHJcbiAgICAgICAgcmV0dXJuIGlkeDtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiAtMTtcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8vI3JlZ2lvbiBHcmlkIEZpbHRlclxyXG4gIHByaXZhdGUgc2V0dXBGaWx0ZXJGZWF0dXJlKCkge1xyXG4gICAgaWYgKHRoaXMuZGF0YS5HcmlkRmlsdGVyQmFyRmllbGQpIHtcclxuICAgICAgdGhpcy5maWx0ZXJHcm91cCA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuZ3JvdXApO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuZGF0YS5HcmlkQWR2RmlsdGVyQmFyRmllbGQpIHtcclxuICAgICAgdGhpcy5hZHZmaWx0ZXJHcm91cCA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuZ3JvdXApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHNlYXJjaCgpIHtcclxuICAgIGNvbnN0IGZvcm0gPSB0aGlzLmZpbHRlckdyb3VwLmZvcm07XHJcbiAgICBjb25zdCBjb250cm9scyA9IGZvcm0uY29udHJvbHM7XHJcblxyXG4gICAgaWYgKHRoaXMuaXNTaG93QWR2RmlsdGVyKSB7XHJcbiAgICAgIGNvbnN0IGFkdmZvcm0gPSB0aGlzLmFkdmZpbHRlckdyb3VwLmZvcm07XHJcbiAgICAgIGNvbnN0IGFkdmNvbnRyb2xzID0gYWR2Zm9ybS5jb250cm9scztcclxuICAgICAgZm9yIChjb25zdCBjIG9mIE9iamVjdC5rZXlzKGFkdmNvbnRyb2xzKSkge1xyXG4gICAgICAgIGNvbnRyb2xzW2NdID0gYWR2Y29udHJvbHNbY107XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5kYXRhLkZpbHRlclNlYXJjaCkge1xyXG4gICAgICB0aGlzLmdyb3VwLnN1YmplY3QubmV4dCh7XHJcbiAgICAgICAgdHlwZTogXCJ6Z3JpZC1maWx0ZXJzZWFyY2hcIixcclxuICAgICAgICB0YXJnZXQ6IHRoaXMuZGF0YS5GaWx0ZXJTZWFyY2gsXHJcbiAgICAgICAgZGF0YTogeyBmb3JtY29udHJvbHM6IGNvbnRyb2xzIH0sXHJcbiAgICAgIH0gYXMgWkNvbXBvbmVudE91dHB1dEV2ZW50KTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLnBhcmFtcy5maWx0ZXJQYXJhbXMgPSBbXTtcclxuICAgICAgT2JqZWN0LmtleXMoY29udHJvbHMpLmZvckVhY2goY29udHJvbE5hbWUgPT4ge1xyXG4gICAgICAgIGlmIChjb250cm9sc1tjb250cm9sTmFtZV0udmFsdWUpIHtcclxuICAgICAgICAgIGNvbnN0IGZpZWxkID0gWkNvbXBvbmVudEhlbHBlci5nZXRGaWVsZEZyb21GaWVsZHNCeVZhbHVlKHRoaXMuZmlsdGVyR3JvdXAuZmllbGRzLCBjb250cm9sTmFtZSkgfHwgWkNvbXBvbmVudEhlbHBlci5nZXRGaWVsZEZyb21GaWVsZHNCeVZhbHVlKHRoaXMuYWR2ZmlsdGVyR3JvdXAuZmllbGRzLCBjb250cm9sTmFtZSk7XHJcbiAgICAgICAgICB0aGlzLnBhcmFtcy5maWx0ZXJQYXJhbXMucHVzaCh7XHJcbiAgICAgICAgICAgIGtleTogZmllbGQuVmFsdWVFeHByIHx8IGZpZWxkLlZhbHVlLFxyXG4gICAgICAgICAgICBvcHM6IHRoaXMubWFwRmlsdGVyT3BlcmF0b3JCeUZpZWxkVHlwZShmaWVsZCksXHJcbiAgICAgICAgICAgIHZhbHVlOiBjb250cm9sc1tjb250cm9sTmFtZV0udmFsdWVcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy5nZXREYXRhKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY2FuY2VsRWRpdCgpIHtcclxuICAgIHRoaXMuY2xlYXJGaWx0ZXJEYXRhKHRoaXMuZmlsdGVyR3JvdXApO1xyXG4gICAgaWYgKHRoaXMuZGF0YS5HcmlkQWR2RmlsdGVyQmFyRmllbGQpIHtcclxuICAgICAgdGhpcy5jbGVhckZpbHRlckRhdGEodGhpcy5hZHZmaWx0ZXJHcm91cCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNsZWFyRmlsdGVyRGF0YShncm91cDogWkdyb3VwKSB7XHJcbiAgICBjb25zdCBmb3JtID0gZ3JvdXAuZm9ybSBhcyBGb3JtR3JvdXA7XHJcbiAgICBjb25zdCBjb250cm9scyA9IGZvcm0uY29udHJvbHM7XHJcbiAgICBPYmplY3Qua2V5cyhjb250cm9scykuZm9yRWFjaChjb250cm9sTmFtZSA9PiB7XHJcbiAgICAgIFpDb21wb25lbnRIZWxwZXIuc2V0TW9kZWxWYWx1ZShjb250cm9sTmFtZSwgbnVsbCwgZ3JvdXAsIHRydWUpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYWR2YW5jZWRTZWFyY2goKSB7XHJcbiAgICB0aGlzLmlzU2hvd0FkdkZpbHRlciA9ICF0aGlzLmlzU2hvd0FkdkZpbHRlcjtcclxuICAgIGlmICghdGhpcy5pc1Nob3dBZHZGaWx0ZXIpIHtcclxuICAgICAgdGhpcy5jbGVhckZpbHRlckRhdGEodGhpcy5hZHZmaWx0ZXJHcm91cCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG1hcEZpbHRlck9wZXJhdG9yQnlGaWVsZFR5cGUoZmllbGQ6IFpGaWVsZCkge1xyXG4gICAgc3dpdGNoIChmaWVsZC5UeXBlKSB7XHJcbiAgICAgIGNhc2UgXCJudW1iZXJcIjpcclxuICAgICAgY2FzZSBcIm51bWVyaWNcIjpcclxuICAgICAgY2FzZSBcImRhdGVcIjpcclxuICAgICAgY2FzZSBcImVtYWlsXCI6XHJcbiAgICAgIGNhc2UgXCJwYXNzd29yZFwiOlxyXG4gICAgICBjYXNlIFwidGVsXCI6XHJcbiAgICAgIGNhc2UgXCJ0ZXh0XCI6XHJcbiAgICAgIGNhc2UgXCJ1cmxcIjpcclxuICAgICAgY2FzZSBcImN1cnJlbmN5XCI6XHJcbiAgICAgIGNhc2UgXCJ0ZXh0YXJlYVwiOlxyXG4gICAgICAgIGlmICghZmllbGRbJ0ZpbHRlckNvbnRhaW5zVXNpbmdFcXVhbCddKSB7XHJcbiAgICAgICAgICByZXR1cm4gXCJjb250YWluc1wiO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gXCI9PVwiO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHJldHVybiBcIj1cIjtcclxuICAgIH1cclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8vI3JlZ2lvbiBncmlkIGNvbW1vbiBzZXR0aW5nIGZ1bmN0aW9uXHJcbiAgcHVibGljIHNldCBzZXRHcmlkVGl0bGUobmV3VGl0bGU6IHN0cmluZykge1xyXG4gICAgdGhpcy5ncmlkVGl0bGUgPSBuZXdUaXRsZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgc2V0R3JpZFN0YXRlKHN0YXRlOiBTdGF0ZSkge1xyXG4gICAgdGhpcy5ncmlkU2V0dGluZy5ncmlkU3RhdGUgPSBzdGF0ZTtcclxuICAgIHRoaXMuemdyaWQuZ3JpZFNldHRpbmcuZ3JpZFN0YXRlID0gc3RhdGU7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0R3JpZFRvRmlyc3RQYWdlKCkge1xyXG4gICAgdGhpcy5ncmlkU2V0dGluZy5ncmlkU3RhdGUuc2tpcCA9IDA7XHJcbiAgICB0aGlzLnpncmlkLmdyaWRTZXR0aW5nLmdyaWRTdGF0ZS5za2lwID0gMDtcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uXHJcbn1cclxuIiwiPCEtLVxyXG48ZGl2IHN0eWxlPVwibWFyZ2luOiAxMHB4XCI+XHJcbiAgPGRpdiBjbGFzcz1cImNhcmRcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYmxvY2sgay1mb3JtXCI+XHJcbiAgICAgICAgICA8ZmllbGRzZXQ+XHJcbiAgICAgICAgICAgIDxsZWdlbmQ+QmluZGluZyB0eXBlczwvbGVnZW5kPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiay1mb3JtLWZpZWxkXCI+XHJcbiAgICAgICAgICAgICAgICA8c3Bhbj5CaW5kIHRoZSBkYXRhIHRvOjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCBbKG5nTW9kZWwpXT1cImJpbmRpbmdUeXBlXCIgdHlwZT1cInJhZGlvXCIgbmFtZT1cIm1vZGVcIiBpZD1cImFycmF5XCIgdmFsdWU9XCJhcnJheVwiIGNsYXNzPVwiay1yYWRpb1wiXHJcbiAgICAgICAgICAgICAgICAoY2hhbmdlKT1cImNoYW5nZUJpbmRpbmdUeXBlKCRldmVudClcIj5cclxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImstcmFkaW8tbGFiZWxcIiBmb3I9XCJhcnJheVwiPkFycmF5IG9iamVjdDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgWyhuZ01vZGVsKV09XCJiaW5kaW5nVHlwZVwiIHR5cGU9XCJyYWRpb1wiIG5hbWU9XCJtb2RlXCIgaWQ9XCJncmlkRGF0YVJlc3VsdFwiIHZhbHVlPVwiZ3JpZERhdGFSZXN1bHRcIiBjbGFzcz1cImstcmFkaW9cIlxyXG4gICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJjaGFuZ2VCaW5kaW5nVHlwZSgkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJrLXJhZGlvLWxhYmVsXCIgZm9yPVwiZ3JpZERhdGFSZXN1bHRcIj5HcmlkRGF0YVJlc3VsdCBvYmplY3Q8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgPGlucHV0IFsobmdNb2RlbCldPVwiYmluZGluZ1R5cGVcIiB0eXBlPVwicmFkaW9cIiBuYW1lPVwibW9kZVwiIGlkPVwiYXN5bmNcIiB2YWx1ZT1cImFzeW5jXCIgY2xhc3M9XCJrLXJhZGlvXCJcclxuICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwiY2hhbmdlQmluZGluZ1R5cGUoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiay1yYWRpby1sYWJlbFwiIGZvcj1cImFzeW5jXCI+QXN5bmNocm9ub3VzIHNvdXJjZTwvbGFiZWw+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9maWVsZHNldD5cclxuICAgICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PiAtLT5cclxuPGRpdiBjbGFzcz1cImdyaWQtY29udGFpbmVyIGUxdGFnLXN0eWxlXCIgW25nQ2xhc3NdPVwiZGF0YS5DbGFzc1wiIFtzdHlsZV09XCJjb21wb25lbnRQcm9wZXJ0aWVzLnN0eWxlLnN0eWxlXCI+XHJcblxyXG4gIDwhLS0gPGRpdiAqbmdJZj1cImRhdGEuVGl0bGVcIiBjbGFzcz1cImdyaWRUaXRsZVwiPnt7ZGF0YS5UaXRsZX19PC9kaXY+IC0tPlxyXG4gIDxuZy10ZW1wbGF0ZSAjdGVtcGxhdGUgbGV0LWFuY2hvcj5cclxuICAgIDxzcGFuPnt7IGFuY2hvci5uYXRpdmVFbGVtZW50LmlubmVyVGV4dCB9fTwvc3Bhbj5cclxuICA8L25nLXRlbXBsYXRlPlxyXG4gIDxrZW5kby1wb3BvdmVyICNncmlkUG9wT3ZlciBbcG9zaXRpb25dPVwiZGF0YS5Qb3BPdmVyUG9zaXRpb24gfHwgJ2JvdHRvbSdcIiBbdGVtcGxhdGVEYXRhXT1cImdldENvbnRleHREYXRhLmJpbmQodGhpcylcIj5cclxuICAgIDwhLS0gPG5nLXRlbXBsYXRlIGtlbmRvUG9wb3ZlclRpdGxlVGVtcGxhdGUgbGV0LWRhdGE9XCJkYXRhXCIgPlxyXG4gICAgICA8ZGl2IFtzdHlsZV09XCJkYXRhLlRpdGxlU3R5bGVcIiAqbmdJZj1cImRhdGEgJiYgZGF0YS5UaXRsZVwiIFtpbm5lckhUTUxdPVwiZGF0YS5UaXRsZVwiPjwvZGl2PlxyXG4gICAgPC9uZy10ZW1wbGF0ZT4gLS0+XHJcbiAgICA8bmctdGVtcGxhdGUga2VuZG9Qb3BvdmVyQm9keVRlbXBsYXRlIGxldC1kYXRhPVwiZGF0YVwiPlxyXG4gICAgICA8ZGl2IFtzdHlsZV09XCJkYXRhLkJvZHlTdHlsZVwiIGNsYXNzPVwicG9wb3ZlcmJvZHlcIiAqbmdJZj1cImRhdGEgJiYgZGF0YS5Cb2R5XCIgW2lubmVySFRNTF09XCJkYXRhLkJvZHkgfCBodG1sU2FuaXRpemVcIiBbbmdDbGFzc109XCJkYXRhLkJvZHlDbGFzc1wiIChtb3VzZWxlYXZlKT1cImNsb3NlUG9wT3Zlci5jYWxsKHRoaXMsICRldmVudClcIj48L2Rpdj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgPC9rZW5kby1wb3BvdmVyPlxyXG5cclxuICA8ZGl2IGtlbmRvVG9vbHRpcCBzaG93T249XCJub25lXCIgW3Rvb2x0aXBUZW1wbGF0ZV09XCJ0ZW1wbGF0ZVwiIGZpbHRlcj1cIi5rLWdyaWQgdGRcIiAobW91c2VvdmVyKT1cInNob3dUb29sdGlwKCRldmVudClcIiBbc3R5bGVdPVwiY29tcG9uZW50UHJvcGVydGllcy5zdHlsZS5zdHlsZTFcIiBjbGFzcz1cImUxdGFnLXN0eWxlMVwiPlxyXG4gICAgPGRpdiBrZW5kb1BvcG92ZXJDb250YWluZXIgW3BvcG92ZXJdPVwiZ3JpZFBvcE92ZXJcIiBmaWx0ZXI9XCJkaXYuZ3JpZENlbGwud2l0aFBvcG92ZXJJbkdyaWRcIiBzaG93T249XCJub25lXCIga2VuZG9Qb3BvdmVyQ29udGFpbmVyICNwb3BvdmVyY29udGFpbmVyPVwia2VuZG9Qb3BvdmVyQ29udGFpbmVyXCI+XHJcbiAgICAgIDxrZW5kby1ncmlkIFt6Z3JpZGJpbmRpbmddPVwie2RhdGE6IGRhdGEsIGdyb3VwOiBncm91cCwgcGFyYW1zOiBwYXJhbXMsIGdyaWRTdWJqZWN0OiBncmlkU3ViamVjdCwgZ3JpZFNldHRpbmc6IGdyaWRTZXR0aW5nfVwiIFtuZ0NsYXNzXT1cImRhdGEuQ2xhc3NcIiBjbGFzcz1cImRlc2t0b3AtZ3JpZCBlMXRhZy1zdHlsZTJcIlxyXG4gICAgICAgICAgICAgICAgICBbc2Nyb2xsYWJsZV09XCJkYXRhLnNjcm9sbEFibGUgPT09IGZhbHNlID8gJ25vbmUnIDogJ3Njcm9sbGFibGUnXCJcclxuICAgICAgICAgICAgICAgICAgW3BhZ2VhYmxlXT1cInBhZ2VhYmxlXCJcclxuICAgICAgICAgICAgICAgICAgW2NsYXNzLmhpZGVuLXBhZ2VyXT1cIiFwYWdlYWJsZVwiXHJcbiAgICAgICAgICAgICAgICAgIFtwYWdlU2l6ZV09XCJncmlkU2V0dGluZy5ncmlkU3RhdGUudGFrZVwiXHJcbiAgICAgICAgICAgICAgICAgIFtza2lwXT1cImdyaWRTZXR0aW5nLmdyaWRTdGF0ZS5za2lwXCJcclxuICAgICAgICAgICAgICAgICAgW3NvcnRdPVwiZ3JpZFNldHRpbmcuZ3JpZFN0YXRlLnNvcnRcIlxyXG4gICAgICAgICAgICAgICAgICBbc29ydGFibGVdPVwie2FsbG93VW5zb3J0OiB0cnVlLG1vZGU6ICdtdWx0aXBsZSd9XCJcclxuICAgICAgICAgICAgICAgICAgW2ZpbHRlcl09XCJncmlkU2V0dGluZy5ncmlkU3RhdGUuZmlsdGVyXCJcclxuICAgICAgICAgICAgICAgICAgW2ZpbHRlcmFibGVdPVwiZGF0YS5lbmFibGVGaWx0ZXJpbmcgIT09IGZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgW3Jlc2l6YWJsZV09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgW3Jlb3JkZXJhYmxlXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICBbY29sdW1uTWVudV09XCJkYXRhLkRpc2FibGVHcmlkQ29sdW1uTWVudSA/IGZhbHNlIDogeyBmaWx0ZXI6IHRydWUgfVwiXHJcbiAgICAgICAgICAgICAgICAgIFtoaWRkZW5dPVwiISghIWNvbXBvbmVudFByb3BlcnRpZXMuaXNWaXNpYmxlRmllbGQgPyBncm91cFtjb21wb25lbnRQcm9wZXJ0aWVzLmlzVmlzaWJsZUZpZWxkXSA6IGNvbXBvbmVudFByb3BlcnRpZXMuaXNWaXNpYmxlKVwiXHJcbiAgICAgICAgICAgICAgICAgIChjZWxsQ2xpY2spPVwiY2VsbENsaWNrSGFuZGxlcigkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgKGNlbGxDbG9zZSk9XCJlZGl0Q2VsbENsb3NlSGFuZGxlcigkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgKGRhdGFTdGF0ZUNoYW5nZSk9XCJkYXRhU3RhdGVDaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgIChwYWdlQ2hhbmdlKT1cInBhZ2VDaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgIChzb3J0Q2hhbmdlKT1cInNvcnRDaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgIChmaWx0ZXJDaGFuZ2UpPVwiZmlsdGVyQ2hhbmdlKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICBba2VuZG9HcmlkU2VsZWN0QnldPVwicm93U2VsZWN0aW9uS2V5XCJcclxuICAgICAgICAgICAgICAgICAgW3NlbGVjdGFibGVdPVwic2VsZWN0YWJsZVNldHRpbmdzXCJcclxuICAgICAgICAgICAgICAgICAgWyhzZWxlY3RlZEtleXMpXT1cIm15U2VsZWN0aW9uXCJcclxuICAgICAgICAgICAgICAgICAgW3N0eWxlXT1cImNvbXBvbmVudFByb3BlcnRpZXMuc3R5bGUuc3R5bGUyXCJcclxuICAgICAgICAgICAgICAgICAgW3RyYWNrQnldPVwidHJhY2tCeVwiXHJcbiAgICAgICAgICAgICAgICAgIChjYW5jZWwpPVwiY2FuY2VsSGFuZGxlcigkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgKHNhdmUpPVwic2F2ZUhhbmRsZXIoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgIChyZW1vdmUpPVwicmVtb3ZlSGFuZGxlcigkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgKGVkaXQpPVwiZWRpdEhhbmRsZXIoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgIChhZGQpPVwiYWRkSGFuZGxlcigkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgKGNvbHVtblJlc2l6ZSk9XCJhZGp1c3RXaWR0aFVwb25SZXNpemUoKVwiXHJcbiAgICAgICAgICAgICAgICAgIFtyb3dDbGFzc109XCJyb3dDYWxsYmFjay5iaW5kKHRoaXMpXCI+XHJcbiAgICAgICAgPG5nLXRlbXBsYXRlIGtlbmRvR3JpZFRvb2xiYXJUZW1wbGF0ZVxyXG4gICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImRhdGEuQWxsb3dSZWZyZXNoQnV0dG9uIHx8IGRhdGEuQWxsb3dFeHBvcnQgfHwgZGF0YS5BbGxvd1NhdmVTdGF0ZSB8fCBkYXRhLlRpdGxlIHx8IGRhdGEuR3JpZEJ1dHRvbkZpZWxkTmFtZV9XRiB8fCBkYXRhLkdyaWRCdXR0b25GaWVsZE5hbWUgfHwgZGF0YS5FbmFibGVHcmlkQ29tbWFuZCB8fCBkYXRhLkVuYWJsZUN1c3RvbUFkZENvbW1hbmQgfHwgZGF0YS5FbmFibGVDdXN0b21SZXNldENvbW1hbmRcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0b29sYmFyLWxlZnQtaXRlbVwiICpuZ0lmPVwiZ3JpZFRpdGxlIHx8IGRhdGEuQWxsb3dSZWZyZXNoQnV0dG9uIHx8IGRhdGEuQWxsb3dFeHBvcnRcIj5cclxuICAgICAgICAgICAgPCEtLSA8ZmEtaWNvbiAqbmdJZj1cImRhdGEuSWNvblwiIGNsYXNzPVwiZ3JpZFRpdGxlSWNvblwiIFtpY29uXT1cImRhdGEuSWNvblwiPjwvZmEtaWNvbj4gLS0+XHJcbiAgICAgICAgICAgIDxrZW5kby1sYWJlbCBjbGFzcz1cImdyaWRUaXRsZVwiPnt7IGdyaWRUaXRsZSB9fTwva2VuZG8tbGFiZWw+XHJcbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwibGVmdC1idXR0b25zXCIga2VuZG9CdXR0b24gKGNsaWNrKT1cInJlZnJlc2hEYXRhKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZGF0YS5BbGxvd1JlZnJlc2hCdXR0b25cIj5cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImstaWNvbiBrLWdyaWQtYnV0dG9uIGstaS1yZWZyZXNoLXNtXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIga2VuZG9HcmlkRXhjZWxDb21tYW5kICpuZ0lmPVwiZGF0YS5BbGxvd0V4cG9ydFwiPlxyXG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiay1pY29uIGstaS1maWxlLWV4Y2VsXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgIHt7IGdldFRvb2xCYXJJdGVtTGFiZWxOYW1lKCdFeHBvcnQgRGF0YSB0byBFeGNlbCcpIH19XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidG9vbGJhci1yaWdodC1pdGVtXCIgKm5nSWY9XCJncmlkQnRuIHx8IGRhdGEuQ2FjaGVJbmZvPy5FbmFibGVTYXZlU3RhdGUgfHwgZ3JpZERlZmF1bHRTdGF0ZUV4aXN0IHx8IGRhdGEuRW5hYmxlR3JpZENvbW1hbmQgfHwgZGF0YS5FbmFibGVDdXN0b21BZGRDb21tYW5kIHx8IGRhdGEuRW5hYmxlQ3VzdG9tUmVzZXRDb21tYW5kXCI+XHJcbiAgICAgICAgICAgIDxhcHAtendvcmtmbG93YnV0dG9ucyAqbmdJZj1cImdyaWRCdG4gJiYgZ3JpZEJ0bi5UeXBlID09PSAnendvcmtmbG93YnV0dG9ucydcIiBbZGF0YV09XCJncmlkQnRuXCIgW2dyb3VwXT1cImdyb3VwXCIgW2Zvcm1dPVwiZm9ybVwiPjwvYXBwLXp3b3JrZmxvd2J1dHRvbnM+XHJcbiAgICAgICAgICAgIDxhcHAtemJ1dHRvbnMgKm5nSWY9XCJncmlkQnRuICYmIGdyaWRCdG4uVHlwZSA9PT0gJ3pidXR0b25zJ1wiIFtkYXRhXT1cImdyaWRCdG5cIiBbZ3JvdXBdPVwiZ3JvdXBcIiBbZm9ybV09XCJmb3JtXCI+PC9hcHAtemJ1dHRvbnM+XHJcbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGtlbmRvQnV0dG9uIChjbGljayk9XCJzYXZlR3JpZFNldHRpbmdzKClcIiAqbmdJZj1cImRhdGEuQ2FjaGVJbmZvPy5FbmFibGVTYXZlU3RhdGVcIj5cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImstaWNvbiBrLWljb24td2l0aC10ZXh0IGstaS1zdGFyXCI+PC9zcGFuPnt7IGdldFRvb2xCYXJJdGVtTGFiZWxOYW1lKCdTYXZlIFNldHRpbmdzJykgfX1cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGtlbmRvQnV0dG9uIChjbGljayk9XCJyZXN0b3JlR3JpZFNldHRpbmdzKClcIiAqbmdJZj1cInNob3dSZXN0b3JlR3JpZFNldHRpbmdCdXR0b25cIj5cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImstaWNvbiBrLWljb24td2l0aC10ZXh0IGstaS1zdGFyLW91dGxpbmVcIj48L3NwYW4+e3sgZ2V0VG9vbEJhckl0ZW1MYWJlbE5hbWUoJ1Jlc3RvcmUgU2V0dGluZ3MnKSB9fVxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIga2VuZG9HcmlkQWRkQ29tbWFuZCAqbmdJZj1cImRhdGEuRW5hYmxlR3JpZENvbW1hbmRcIj5cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImstaWNvbiBrLWljb24td2l0aC10ZXh0IGstaS1hZGRcIj48L3NwYW4+e3sgZ2V0VG9vbEJhckl0ZW1MYWJlbE5hbWUoZGF0YS5BZGRDb21tYW5kQnV0dG9uTmFtZSA/IGRhdGEuQWRkQ29tbWFuZEJ1dHRvbk5hbWU6ICdBZGQnKSB9fVxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIga2VuZG9CdXR0b24gKGNsaWNrKT1cImdyaWRDdXN0b21BZGRDb21tYW5kKGdyb3VwKVwiICpuZ0lmPVwiZGF0YS5FbmFibGVDdXN0b21BZGRDb21tYW5kXCI+XHJcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJrLWljb24gay1pY29uLXdpdGgtdGV4dCBrLWktYWRkXCI+PC9zcGFuPnt7IGdldFRvb2xCYXJJdGVtTGFiZWxOYW1lKGRhdGEuQWRkQ29tbWFuZEJ1dHRvbk5hbWUgPyBkYXRhLkFkZENvbW1hbmRCdXR0b25OYW1lOiAnQWRkJykgfX1cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGtlbmRvQnV0dG9uIChjbGljayk9XCJncmlkQ3VzdG9tUmVzZXRDb21tYW5kKGdyb3VwKVwiICpuZ0lmPVwiZGF0YS5FbmFibGVDdXN0b21SZXNldENvbW1hbmRcIj5cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImstaWNvbiBrLWljb24td2l0aC10ZXh0IGstaS10cmFzaFwiPjwvc3Bhbj57eyBnZXRUb29sQmFySXRlbUxhYmVsTmFtZShkYXRhLlJlc2V0Q29tbWFuZEJ1dHRvbk5hbWUgPyBkYXRhLlJlc2V0Q29tbWFuZEJ1dHRvbk5hbWU6ICdSZXNldCcpIH19XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmlsdGVyLWNvbnRhaW5lclwiICpuZ0lmPVwiZGF0YS5HcmlkRmlsdGVyQmFyRmllbGRcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5vcm1hbC1maWx0ZXItY29udGFpbmVyXCI+XHJcbiAgICAgICAgICAgICAgPGFwcC16Zm9ybSBjbGFzcz1cImZpbHRlci1maWVsZHNcIiBbZ3JvdXBdPVwiZmlsdGVyR3JvdXBcIiBbZmllbGROYW1lXT1cImRhdGEuR3JpZEZpbHRlckJhckZpZWxkXCI+PC9hcHAtemZvcm0+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZpbHRlci1idXR0b25zXCIgW25nQ2xhc3NdPVwiZGF0YS5DbGFzc1wiPlxyXG4gICAgICAgICAgICAgICAgPGlvbi1idXR0b24gZmlsbD1cInNvbGlkXCIgc2l6ZT1cImRlZmF1bHRcIiBzdHJvbmc9XCJ0cnVlXCIgY29sb3I9XCJwcmltYXJ5XCIgKGNsaWNrKT1cInNlYXJjaCgpXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxmYS1pY29uIGljb249XCJzZWFyY2hcIj48L2ZhLWljb24+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYnRuLWxhYmVsIGlvbi10ZXh0LWNhcGl0YWxpemVcIj57eyBnZXRUb29sQmFySXRlbUxhYmVsTmFtZSgnU2VhcmNoJykgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2lvbi1idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8aW9uLWJ1dHRvbiBmaWxsPVwib3V0bGluZVwiIHNpemU9XCJkZWZhdWx0XCIgc3Ryb25nPVwidHJ1ZVwiIGNvbG9yPVwicHJpbWFyeVwiIChjbGljayk9XCJjYW5jZWxFZGl0KClcIiAqbmdJZj1cImRhdGEuSXNTaG93R3JpZENhbmNlbEZpbHRlckJ1dHRvblwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZmEtaWNvbiBpY29uPVwidGltZXNcIj48L2ZhLWljb24+XHJcbiAgICAgICAgICAgICAgICA8L2lvbi1idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8aW9uLWJ1dHRvbiBmaWxsPVwic29saWRcIiBzaXplPVwiZGVmYXVsdFwiIHN0cm9uZz1cInRydWVcIiBbbmdDbGFzc109XCJpc1Nob3dBZHZGaWx0ZXIgPyAndG9nZ2xlT24nIDogJ3RvZ2dsZU9mZidcIiAoY2xpY2spPVwiYWR2YW5jZWRTZWFyY2goKVwiICpuZ0lmPVwiZGF0YS5HcmlkQWR2RmlsdGVyQmFyRmllbGRcIj5cclxuICAgICAgICAgICAgICAgICAgPGZhLWljb24gaWNvbj1cInNsaWRlcnMtaFwiPjwvZmEtaWNvbj5cclxuICAgICAgICAgICAgICAgIDwvaW9uLWJ1dHRvbj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxhcHAtemZvcm0gKm5nSWY9XCJkYXRhLkdyaWRBZHZGaWx0ZXJCYXJGaWVsZFwiIGNsYXNzPVwidG8tcHJlbG9hZC10aGUtZmllbGRzXCIgW2dyb3VwXT1cImFkdmZpbHRlckdyb3VwXCIgW2ZpZWxkTmFtZV09XCJkYXRhLkdyaWRBZHZGaWx0ZXJCYXJGaWVsZFwiIHN0eWxlPVwiZGlzcGxheTpub25lO1wiPjwvYXBwLXpmb3JtPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWR2LWZpbHRlci1jb250YWluZXJcIiAqbmdJZj1cImlzU2hvd0FkdkZpbHRlclwiIFtAaGlkZUFuZFNob3dBbmltYXRpb25dPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhZHYtZmlsdGVyLXNlcGVyYXRvclwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4+XHJcbiAgICAgICAgICAgICAgICAgIHt7IGdldFRvb2xCYXJJdGVtTGFiZWxOYW1lKCdBZHZhbmNlZCBTZWFyY2gnKSB9fVxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxhcHAtemZvcm0gY2xhc3M9XCJhZHZmaWx0ZXItZmllbGRzXCIgW2dyb3VwXT1cImFkdmZpbHRlckdyb3VwXCIgW2ZpZWxkTmFtZV09XCJkYXRhLkdyaWRBZHZGaWx0ZXJCYXJGaWVsZFwiPjwvYXBwLXpmb3JtPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgPGtlbmRvLWdyaWQtY2hlY2tib3gtY29sdW1uICpuZ0lmPVwiISFkYXRhLlNlbGVjdE9wdGlvbnNcIiBbd2lkdGhdPVwiNjBcIiBzaG93U2VsZWN0QWxsPVwidHJ1ZVwiIFtjb2x1bW5NZW51XT1cInRydWVcIj5cclxuICAgICAgICA8L2tlbmRvLWdyaWQtY2hlY2tib3gtY29sdW1uPlxyXG4gICAgICAgIDxrZW5kby1ncmlkLWNvbHVtbiBbc3R5bGVdPVwiZ2V0R3JpZENvbHVtblN0eWxlKClcIiBjbGFzcz1cImUxdGFnLXN0eWxlM1wiICpuZ0Zvcj1cImxldCBjb2wgb2YgY29sdW1ucztcIiBbZmllbGRdPVwiY29sLmZpZWxkXCIgW3RpdGxlXT1cImNvbC50aXRsZVwiIFt3aWR0aF09XCJjb2wud2lkdGhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBbbWluUmVzaXphYmxlV2lkdGhdPVwiY29sLm1pblJlc2l6YWJsZVdpZHRoXCIgW2ZpbHRlcl09XCJjb2wuZmlsdGVyXCIgW2ZpbHRlcmFibGVdPVwiZmlsdGVyYWJsZShjb2wuZW5hYmxlRmlsdGVyaW5nKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzb3J0YWJsZV09XCJzb3J0YWJsZShjb2wuZW5hYmxlU29ydGluZylcIiBbaGVhZGVyU3R5bGVdPVwiZ2V0R3JpZEhlYWRlclN0eWxlKClcIiBoZWFkZXJDbGFzcz1cImUxdGFnLXN0eWxlNFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb290ZXJTdHlsZV09XCJnZXRHcmlkRm9vdGVyU3R5bGUoKVwiIGZvb3RlckNsYXNzPVwiZTF0YWctc3R5bGU5XCIgW2hpZGRlbl09XCJjb2wuaGlkZGVuXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1hdF09XCJjb2wuZm9ybWF0XCIgW2NsYXNzXT1cImNvbC5DbGFzc1wiIFtsb2NrZWRdPVwibG9ja2VkKGNvbClcIiBlZGl0b3I9XCJudW1lcmljXCIgW2NvbHVtbk1lbnVdPVwiIWNvbC5kaXNhYmxlQ29sdW1uTWVudVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFtlZGl0b3JdPVwiY29sLmVkaXRvclR5cGVcIj5cclxuICAgICAgICAgIDxkaXYgW25nU3dpdGNoXT1cInRydWVcIj5cclxuICAgICAgICAgICAgPGRpdiAqbmdTd2l0Y2hDYXNlPVwiY29sLmZpZWxkVHlwZSA9PT0gJ251bWJlcidcclxuICAgICAgICAgICAgICAgfHwgY29sLmZpZWxkVHlwZSA9PT0gJ2N1cnJlbmN5J1xyXG4gICAgICAgICAgICAgICB8fCBjb2wuZmllbGRUeXBlID09PSAnem51bWVyaWMnXCI+XHJcbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGtlbmRvR3JpZEZpbHRlckNlbGxUZW1wbGF0ZSBsZXQtZmlsdGVyIGxldC1jb2x1bW49XCJjb2x1bW5cIj5cclxuICAgICAgICAgICAgICAgIDxrZW5kby1ncmlkLW51bWVyaWMtZmlsdGVyLWNlbGwgW3Nob3dPcGVyYXRvcnNdPVwiZGF0YS5Jc1Nob3dHcmlkRmlsdGVyT3BlcmF0b3JcIiBbY29sdW1uXT1cImNvbHVtblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmaWx0ZXJdPVwiZmlsdGVyXCIgb3BlcmF0b3I9XCJlcVwiPlxyXG4gICAgICAgICAgICAgICAgICA8a2VuZG8tZmlsdGVyLWVxLW9wZXJhdG9yPjwva2VuZG8tZmlsdGVyLWVxLW9wZXJhdG9yPlxyXG4gICAgICAgICAgICAgICAgICA8a2VuZG8tZmlsdGVyLW5lcS1vcGVyYXRvcj48L2tlbmRvLWZpbHRlci1uZXEtb3BlcmF0b3I+XHJcbiAgICAgICAgICAgICAgICAgIDxrZW5kby1maWx0ZXItbHQtb3BlcmF0b3I+PC9rZW5kby1maWx0ZXItbHQtb3BlcmF0b3I+XHJcbiAgICAgICAgICAgICAgICAgIDxrZW5kby1maWx0ZXItbHRlLW9wZXJhdG9yPjwva2VuZG8tZmlsdGVyLWx0ZS1vcGVyYXRvcj5cclxuICAgICAgICAgICAgICAgICAgPGtlbmRvLWZpbHRlci1ndC1vcGVyYXRvcj48L2tlbmRvLWZpbHRlci1ndC1vcGVyYXRvcj5cclxuICAgICAgICAgICAgICAgICAgPGtlbmRvLWZpbHRlci1ndGUtb3BlcmF0b3I+PC9rZW5kby1maWx0ZXItZ3RlLW9wZXJhdG9yPlxyXG4gICAgICAgICAgICAgICAgICA8a2VuZG8tZmlsdGVyLWlzbnVsbC1vcGVyYXRvcj48L2tlbmRvLWZpbHRlci1pc251bGwtb3BlcmF0b3I+XHJcbiAgICAgICAgICAgICAgICAgIDxrZW5kby1maWx0ZXItaXNub3RudWxsLW9wZXJhdG9yPjwva2VuZG8tZmlsdGVyLWlzbm90bnVsbC1vcGVyYXRvcj5cclxuICAgICAgICAgICAgICAgIDwva2VuZG8tZ3JpZC1udW1lcmljLWZpbHRlci1jZWxsPlxyXG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ1N3aXRjaENhc2U9XCJjb2wuZmllbGRUeXBlID09ICd6ZGF0ZSdcclxuICAgICAgICAgICAgICAgfHwgY29sLmZpZWxkVHlwZSA9PT0gJ3p0aW1lJ1xyXG4gICAgICAgICAgICAgICB8fCBjb2wuZmllbGRUeXBlID09PSAnemRhdGV0aW1lJ1xyXG4gICAgICAgICAgICAgICB8fCBjb2wuZmllbGRUeXBlID09PSAnenVpZGF0ZXRpbWUnXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImNvbC5maWx0ZXJCeURhdGVSYW5nZSA9PT0gdHJ1ZVwiPlxyXG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGtlbmRvR3JpZEZpbHRlckNlbGxUZW1wbGF0ZSBsZXQtZmlsdGVyIGxldC1jb2x1bW49XCJjb2x1bW5cIiBvcGVyYXRvcj1cImx0ZVwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGF0ZS1yYW5nZS1maWx0ZXItY2VsbCBbc2hvd09wZXJhdG9yc109XCJkYXRhLklzU2hvd0dyaWRGaWx0ZXJPcGVyYXRvclwiIGNsYXNzPVwiZGF0ZS1yYW5nZS1maWx0ZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZmlsdGVyXT1cImZpbHRlclwiIFtmaWVsZF09XCJjb2wuZmllbGRcIiBbZGF0YV09XCJkYXRhXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGtlbmRvLWZpbHRlci1sdC1vcGVyYXRvcj48L2tlbmRvLWZpbHRlci1sdC1vcGVyYXRvcj5cclxuICAgICAgICAgICAgICAgICAgICA8a2VuZG8tZmlsdGVyLWx0ZS1vcGVyYXRvcj48L2tlbmRvLWZpbHRlci1sdGUtb3BlcmF0b3I+XHJcbiAgICAgICAgICAgICAgICAgICAgPGtlbmRvLWZpbHRlci1ndC1vcGVyYXRvcj48L2tlbmRvLWZpbHRlci1ndC1vcGVyYXRvcj5cclxuICAgICAgICAgICAgICAgICAgICA8a2VuZG8tZmlsdGVyLWd0ZS1vcGVyYXRvcj48L2tlbmRvLWZpbHRlci1ndGUtb3BlcmF0b3I+XHJcbiAgICAgICAgICAgICAgICAgICAgPGtlbmRvLWZpbHRlci1pc251bGwtb3BlcmF0b3I+PC9rZW5kby1maWx0ZXItaXNudWxsLW9wZXJhdG9yPlxyXG4gICAgICAgICAgICAgICAgICAgIDxrZW5kby1maWx0ZXItaXNub3RudWxsLW9wZXJhdG9yPjwva2VuZG8tZmlsdGVyLWlzbm90bnVsbC1vcGVyYXRvcj5cclxuICAgICAgICAgICAgICAgICAgPC9kYXRlLXJhbmdlLWZpbHRlci1jZWxsPlxyXG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiY29sLmZpbHRlckJ5RGF0ZVJhbmdlID09PSBmYWxzZVwiPlxyXG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGtlbmRvR3JpZEZpbHRlckNlbGxUZW1wbGF0ZSBsZXQtZmlsdGVyIGxldC1jb2x1bW49XCJjb2x1bW5cIj5cclxuICAgICAgICAgICAgICAgICAgPGtlbmRvLWdyaWQtZGF0ZS1maWx0ZXItY2VsbCBbc2hvd09wZXJhdG9yc109XCJkYXRhLklzU2hvd0dyaWRGaWx0ZXJPcGVyYXRvclwiIFtjb2x1bW5dPVwiY29sdW1uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZmlsdGVyXT1cImZpbHRlclwiIG9wZXJhdG9yPVwibHRlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGtlbmRvLWZpbHRlci1sdC1vcGVyYXRvcj48L2tlbmRvLWZpbHRlci1sdC1vcGVyYXRvcj5cclxuICAgICAgICAgICAgICAgICAgICA8a2VuZG8tZmlsdGVyLWx0ZS1vcGVyYXRvcj48L2tlbmRvLWZpbHRlci1sdGUtb3BlcmF0b3I+XHJcbiAgICAgICAgICAgICAgICAgICAgPGtlbmRvLWZpbHRlci1ndC1vcGVyYXRvcj48L2tlbmRvLWZpbHRlci1ndC1vcGVyYXRvcj5cclxuICAgICAgICAgICAgICAgICAgICA8a2VuZG8tZmlsdGVyLWd0ZS1vcGVyYXRvcj48L2tlbmRvLWZpbHRlci1ndGUtb3BlcmF0b3I+XHJcbiAgICAgICAgICAgICAgICAgICAgPGtlbmRvLWZpbHRlci1pc251bGwtb3BlcmF0b3I+PC9rZW5kby1maWx0ZXItaXNudWxsLW9wZXJhdG9yPlxyXG4gICAgICAgICAgICAgICAgICAgIDxrZW5kby1maWx0ZXItaXNub3RudWxsLW9wZXJhdG9yPjwva2VuZG8tZmlsdGVyLWlzbm90bnVsbC1vcGVyYXRvcj5cclxuICAgICAgICAgICAgICAgICAgPC9rZW5kby1ncmlkLWRhdGUtZmlsdGVyLWNlbGw+XHJcbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiAqbmdTd2l0Y2hDYXNlPVwiY29sLmZpZWxkVHlwZSA9PT0gJ2NoZWNrYm94J1wiPlxyXG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBrZW5kb0dyaWRGaWx0ZXJDZWxsVGVtcGxhdGUgbGV0LWZpbHRlciBsZXQtY29sdW1uPVwiY29sdW1uXCI+XHJcbiAgICAgICAgICAgICAgICA8a2VuZG8tZ3JpZC1ib29sZWFuLWZpbHRlci1jZWxsIFtjb2x1bW5dPVwiY29sdW1uXCIgW2ZpbHRlcl09XCJmaWx0ZXJcIiBvcGVyYXRvcj1cImVxXCI+XHJcbiAgICAgICAgICAgICAgICA8L2tlbmRvLWdyaWQtYm9vbGVhbi1maWx0ZXItY2VsbD5cclxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiAqbmdTd2l0Y2hEZWZhdWx0PlxyXG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBrZW5kb0dyaWRGaWx0ZXJDZWxsVGVtcGxhdGUgbGV0LWZpbHRlciBsZXQtY29sdW1uPVwiY29sdW1uXCI+XHJcbiAgICAgICAgICAgICAgICA8a2VuZG8tZ3JpZC1zdHJpbmctZmlsdGVyLWNlbGwgW3Nob3dPcGVyYXRvcnNdPVwiZGF0YS5Jc1Nob3dHcmlkRmlsdGVyT3BlcmF0b3JcIiBbY29sdW1uXT1cImNvbHVtblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2ZpbHRlcl09XCJmaWx0ZXJcIiBvcGVyYXRvcj1cImNvbnRhaW5zXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxrZW5kby1maWx0ZXItY29udGFpbnMtb3BlcmF0b3I+PC9rZW5kby1maWx0ZXItY29udGFpbnMtb3BlcmF0b3I+XHJcbiAgICAgICAgICAgICAgICAgIDxrZW5kby1maWx0ZXItZXEtb3BlcmF0b3I+PC9rZW5kby1maWx0ZXItZXEtb3BlcmF0b3I+XHJcbiAgICAgICAgICAgICAgICAgIDxrZW5kby1maWx0ZXItbmVxLW9wZXJhdG9yPjwva2VuZG8tZmlsdGVyLW5lcS1vcGVyYXRvcj5cclxuICAgICAgICAgICAgICAgICAgPGtlbmRvLWZpbHRlci1zdGFydHN3aXRoLW9wZXJhdG9yPjwva2VuZG8tZmlsdGVyLXN0YXJ0c3dpdGgtb3BlcmF0b3I+XHJcbiAgICAgICAgICAgICAgICAgIDxrZW5kby1maWx0ZXItZW5kc3dpdGgtb3BlcmF0b3I+PC9rZW5kby1maWx0ZXItZW5kc3dpdGgtb3BlcmF0b3I+XHJcbiAgICAgICAgICAgICAgICAgIDxrZW5kby1maWx0ZXItaXNudWxsLW9wZXJhdG9yPjwva2VuZG8tZmlsdGVyLWlzbnVsbC1vcGVyYXRvcj5cclxuICAgICAgICAgICAgICAgICAgPGtlbmRvLWZpbHRlci1pc25vdG51bGwtb3BlcmF0b3I+PC9rZW5kby1maWx0ZXItaXNub3RudWxsLW9wZXJhdG9yPlxyXG4gICAgICAgICAgICAgICAgPC9rZW5kby1ncmlkLXN0cmluZy1maWx0ZXItY2VsbD5cclxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPCEtLSBHcmlkIEVkaXQgVGVtcGxhdGUgLS0+XHJcbiAgICAgICAgICA8bmctdGVtcGxhdGUga2VuZG9HcmlkRWRpdFRlbXBsYXRlICpuZ0lmPVwiZGF0YS5FbmFibGVHcmlkQ29tbWFuZCBcIiBsZXQtZGF0YUl0ZW09XCJkYXRhSXRlbVwiIGxldC1jb2x1bW49XCJjb2xcIiBsZXQtZm9ybUdyb3VwPVwiZm9ybUdyb3VwXCIgbGV0LWlzTmV3PVwiaXNOZXdcIj5cclxuICAgICAgICAgICAgPGRpdiBbbmdTd2l0Y2hdPVwiY29sLmZpZWxkVHlwZVwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgKm5nU3dpdGNoQ2FzZT1cIidudW1iZXInXCI+XHJcbiAgICAgICAgICAgICAgICA8a2VuZG8tbnVtZXJpY3RleHRib3ggI2NlbGxBbmNob3IgW2Zvcm1Db250cm9sXT1cImZvcm1Hcm91cC5nZXQoY29sLmZpZWxkKVwiPjwva2VuZG8tbnVtZXJpY3RleHRib3g+XHJcbiAgICAgICAgICAgICAgICA8a2VuZG8tcG9wdXAgW2FuY2hvcl09XCJjZWxsQW5jaG9yLm51bWVyaWNJbnB1dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJmb3JtR3JvdXAuZ2V0KGNvbC5maWVsZCkuaW52YWxpZCAmJiAhKGlzTmV3ICYmIGZvcm1Hcm91cC5nZXQoY29sLmZpZWxkKS51bnRvdWNoZWQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3B1cENsYXNzPVwiay13aWRnZXQgay10b29sdGlwIGstdG9vbHRpcC12YWxpZGF0aW9uIGstaW52YWxpZC1tc2dcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwicGFkZGluZy1sZWZ0OiAycHg7IG9wYWNpdHk6IDAuNTtcIj5cclxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJrLWljb24gay1pLXdhcm5pbmdcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDxpb24tbGFiZWwgc3R5bGU9XCJwYWRkaW5nLXRvcDogMXB4OyBwYWRkaW5nLWxlZnQ6IDNweDtcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZm9ybUdyb3VwLmdldChjb2wuZmllbGQpLmludmFsaWQgJiYgIWZvcm1Hcm91cC5nZXQoY29sLmZpZWxkKS51bnRvdWNoZWQgJiYgZm9ybUdyb3VwLmdldChjb2wuZmllbGQpLmVycm9ycz8ucmVxdWlyZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICB7eyBjb2wuTmFtZSB9fSByZXF1aXJlZC5cclxuICAgICAgICAgICAgICAgICAgPC9pb24tbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgIDxpb24tbGFiZWwgc3R5bGU9XCJwYWRkaW5nLXRvcDogMXB4OyBwYWRkaW5nLWxlZnQ6IDNweDtcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZm9ybUdyb3VwLmdldChjb2wuZmllbGQpLmludmFsaWQgJiYgIWZvcm1Hcm91cC5nZXQoY29sLmZpZWxkKS51bnRvdWNoZWQgJiYgZm9ybUdyb3VwLmdldChjb2wuZmllbGQpLmVycm9ycz8ucGF0dGVyblwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7IGNvbC5WYWxpZGF0b3JNZXNzYWdlID8gY29sLlZhbGlkYXRvck1lc3NhZ2UgOiBcIlBsZWFzZSBjaGVjayB0aGUgaW5wdXQgdmFsdWUuXCIgfX1cclxuICAgICAgICAgICAgICAgICAgPC9pb24tbGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8L2tlbmRvLXBvcHVwPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgKm5nU3dpdGNoRGVmYXVsdD5cclxuICAgICAgICAgICAgICAgIDxrZW5kby10ZXh0Ym94ICNjZWxsQW5jaG9yIFtmb3JtQ29udHJvbF09XCJmb3JtR3JvdXAuZ2V0KGNvbC5maWVsZClcIj48L2tlbmRvLXRleHRib3g+XHJcbiAgICAgICAgICAgICAgICA8a2VuZG8tcG9wdXAgW2FuY2hvcl09XCJjZWxsQW5jaG9yLmlucHV0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImZvcm1Hcm91cC5nZXQoY29sLmZpZWxkKS5pbnZhbGlkICYmICEoaXNOZXcgJiYgZm9ybUdyb3VwLmdldChjb2wuZmllbGQpLnVudG91Y2hlZClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcHVwQ2xhc3M9XCJrLXdpZGdldCBrLXRvb2x0aXAgay10b29sdGlwLXZhbGlkYXRpb24gay1pbnZhbGlkLW1zZ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJwYWRkaW5nLWxlZnQ6IDJweDsgb3BhY2l0eTogMC41O1wiPlxyXG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImstaWNvbiBrLWktd2FybmluZ1wiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgPCEtLTxpb24tbGFiZWwgc3R5bGU9XCJwYWRkaW5nLXRvcDogMXB4OyBwYWRkaW5nLWxlZnQ6IDNweDtcIj57eyBjb2wuTmFtZSB9fSBpcyByZXF1aXJlZC48L2lvbi1sYWJlbD4tLT5cclxuICAgICAgICAgICAgICAgICAgLWxcclxuXHJcbiAgICAgICAgICAgICAgICAgIDxpb24tbGFiZWwgc3R5bGU9XCJwYWRkaW5nLXRvcDogMXB4OyBwYWRkaW5nLWxlZnQ6IDNweDtcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZm9ybUdyb3VwLmdldChjb2wuZmllbGQpLmludmFsaWQgJiYgIWZvcm1Hcm91cC5nZXQoY29sLmZpZWxkKS51bnRvdWNoZWQgJiYgZm9ybUdyb3VwLmdldChjb2wuZmllbGQpLmVycm9ycz8ucmVxdWlyZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICB7eyBjb2wuTmFtZSB9fSByZXF1aXJlZC5cclxuICAgICAgICAgICAgICAgICAgPC9pb24tbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgIDxpb24tbGFiZWwgc3R5bGU9XCJwYWRkaW5nLXRvcDogMXB4OyBwYWRkaW5nLWxlZnQ6IDNweDtcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZm9ybUdyb3VwLmdldChjb2wuZmllbGQpLmludmFsaWQgJiYgIWZvcm1Hcm91cC5nZXQoY29sLmZpZWxkKS51bnRvdWNoZWQgJiYgZm9ybUdyb3VwLmdldChjb2wuZmllbGQpLmVycm9ycz8ucGF0dGVyblwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7IGNvbC5WYWxpZGF0b3JNZXNzYWdlID8gY29sLlZhbGlkYXRvck1lc3NhZ2UgOiBcIlBsZWFzZSBjaGVjayB0aGUgaW5wdXQgdmFsdWUuXCIgfX1cclxuICAgICAgICAgICAgICAgICAgPC9pb24tbGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8L2tlbmRvLXBvcHVwPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICA8bmctdGVtcGxhdGUga2VuZG9HcmlkQ2VsbFRlbXBsYXRlIGxldC1kYXRhSXRlbSBsZXQtcm93SW5kZXg9XCJyb3dJbmRleFwiPlxyXG4gICAgICAgICAgICA8ZGl2IHN0eWxlPVwibWFyZ2luOiAxcHggMDtcIiAqbmdJZj1cIiFjb2wuY2xpY2thYmxlSWNvbnMgJiYgY29sLmlzRWRpdGFibGVJbkdyaWQgIT09IHRydWVcIlxyXG4gICAgICAgICAgICAgICAgIFtuZ1N3aXRjaF09XCJjb2wuZmllbGRUeXBlXCIgW25nQ2xhc3NdPVwiZ2V0Q2xhc3MoZGF0YUl0ZW0sIGNvbClcIiBbc3R5bGVdPVwiZ2V0Q2VsbFN0eWxlKGNvbCwgZGF0YUl0ZW0pXCIgW2F0dHIuZGF0YS1pZF09XCJkYXRhSXRlbS5JZFwiIFthdHRyLmNvbHVtbi1uYW1lXT1cImNvbC5maWVsZFwiXHJcbiAgICAgICAgICAgICAgICAgKG1vdXNlZW50ZXIpPVwic2hvd1BvcE92ZXIoY29sLCAkZXZlbnQpXCIgKG1vdXNlbGVhdmUpPVwiY2xvc2VQb3BPdmVyKCRldmVudClcIj5cclxuICAgICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ3pkYXRlJ1wiIGNsYXNzPVwiZ3JpZC1jZWxsLWRhdGFcIj5cclxuICAgICAgICAgICAgICAgIHt7IGRhdGFJdGVtW2NvbC5maWVsZF0gfCBkYXRlOiAnZGQvTU0veXl5eScgfX1cclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIid6dGltZSdcIiBjbGFzcz1cImdyaWQtY2VsbC1kYXRhXCI+XHJcbiAgICAgICAgICAgICAgICB7eyBkYXRhSXRlbVtjb2wuZmllbGRdIHwgZGF0ZTogJ0hIOm1tJyB9fVxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ3pzaG9ydGRhdGUnXCIgY2xhc3M9XCJncmlkLWNlbGwtZGF0YVwiPlxyXG4gICAgICAgICAgICAgICAge3sgZGF0YUl0ZW1bY29sLmZpZWxkXSB8IGRhdGU6ICdNTU0geXl5eScgfX1cclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIid6ZGF0ZXRpbWUnXCIgY2xhc3M9XCJncmlkLWNlbGwtZGF0YVwiPlxyXG4gICAgICAgICAgICAgICAge3sgZGF0YUl0ZW1bY29sLmZpZWxkXSB8IGRhdGU6ICdkZC9NTS95eXl5IGhoOm1tOnNzIGFhJyB9fVxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ3p1aWRhdGV0aW1lJ1wiIGNsYXNzPVwiZ3JpZC1jZWxsLWRhdGFcIj5cclxuICAgICAgICAgICAgICAgIHt7IGRhdGFJdGVtW2NvbC5maWVsZF0gfCBkYXRlOiAnZGQvTU0veXl5eSBoaDptbTpzcyBhYScgfX1cclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIidudW1iZXInXCIgY2xhc3M9XCJncmlkLWNlbGwtZGF0YVwiPlxyXG4gICAgICAgICAgICAgICAge3sgZGF0YUl0ZW1bY29sLmZpZWxkXSB8IG51bWJlciB9fVxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ2N1cnJlbmN5J1wiIGNsYXNzPVwiZ3JpZC1jZWxsLWRhdGFcIj5cclxuICAgICAgICAgICAgICAgIHt7IGRhdGFJdGVtW2NvbC5maWVsZF0gfCBudW1iZXI6IGdldEZvcm1hdChjb2wsICcxLjItMicpIH19XHJcbiAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInem51bWVyaWMnXCIgY2xhc3M9XCJncmlkLWNlbGwtZGF0YVwiPlxyXG4gICAgICAgICAgICAgICAge3sgZGF0YUl0ZW1bY29sLmZpZWxkXSB8IG51bWJlcjogZ2V0Rm9ybWF0KGNvbCkgfX1cclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIid1cmwnXCIgc3R5bGU9XCJjb2xvcjogYmx1ZTsgY3Vyc29yOiBwb2ludGVyOyB0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lO1wiIGNsYXNzPVwiZ3JpZC1jZWxsLWRhdGFcIj5cclxuICAgICAgICAgICAgICAgIHt7IGRhdGFJdGVtW2NvbC5maWVsZF0gfX1cclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoRGVmYXVsdD5cclxuICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJtYXJnaW46IDVweCAwO1wiICpuZ0lmPVwiY29sLmdyaWRDZWxsUmVwbGFjZVZhbHVlICYmIGdldEljb25OYW1lKGNvbC5ncmlkQ2VsbFJlcGxhY2VWYWx1ZSwgZGF0YUl0ZW1bY29sLmZpZWxkXSkgIT09ICcnXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxmYS1pY29uIFtpY29uXT1cImdldEljb25OYW1lKGNvbC5ncmlkQ2VsbFJlcGxhY2VWYWx1ZSwgZGF0YUl0ZW1bY29sLmZpZWxkXSlcIj48L2ZhLWljb24+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIhY29sLmdyaWRDZWxsUmVwbGFjZVZhbHVlXCIgW25nU3dpdGNoXT1cImNlbGxTdHlsZUNvbmRpdGlvbihjb2wsIGRhdGFJdGVtW2NvbC5maWVsZF0pXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9dHJ1ZT5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2VsbFN0eWxlQ29uZGl0aW9uRGVmYXVsdFwiIFtzdHlsZV09XCJzZXRDZWxsU3R5bGVDb25kaXRpb24oY29sLCBkYXRhSXRlbVtjb2wuZmllbGRdKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJncmlkLWNlbGwtZGF0YVwiPnt7IGRhdGFJdGVtW2NvbC5maWVsZF0gfX0gPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaERlZmF1bHQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJncmlkLWNlbGwtZGF0YVwiPnt7IGRhdGFJdGVtW2NvbC5maWVsZF0gfX0gPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8IS0tIDxzcGFuICpuZ0lmPVwiISFjb2wubmF2aWdhdGVUb1wiIChjbGljayk9XCJvbk5hdmlnYXRlVG8oJGV2ZW50LCBjb2wsIGRhdGFJdGVtLCBkYXRhSXRlbVtjb2wuZmllbGRdKVwiPlxyXG4gICAgICAgICAgICA8aW9uLWJ1dHRvbiBjb2xvcj1cImxpZ2h0XCIgc2l6ZT1cInNtYWxsXCI+XHJcbiAgICAgICAgICAgIHt7IGNvbC5DbGlja2FibGVJY29ucyB9fVxyXG4gICAgICAgICAgICA8aW9uLWljb24gc2xvdD0gXCJlbmRcIiBuYW1lPVwiYXJyb3ctZm9yd2FyZFwiPjwvaW9uLWljb24+XHJcbiAgICAgICAgICAgIDwvaW9uLWJ1dHRvbj5cclxuICAgICAgICAgICAgPC9zcGFuPiAtLT5cclxuICAgICAgICAgICAgPGRpdiBzdHlsZT1cIm1hcmdpbjogNXB4IDA7XCIgKm5nSWY9XCJjb2wuaXNFZGl0YWJsZUluR3JpZCA9PT0gdHJ1ZSAmJiBpc0lubGluZUZvcm1Hcm91cEhhc1ZhbHVlKCkgJiYgIWlzSW5saW5lRWRpdElucHV0RmllbGRMb2FkaW5nICYmICFjb2wuZ3JpZENlbGxSZXBsYWNlVmFsdWVcIiBbc3R5bGVdPVwiY29tcG9uZW50UHJvcGVydGllcy5zdHlsZS5zdHlsZTVcIlxyXG4gICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImdldENsYXNzKGRhdGFJdGVtLCBjb2wpXCIgY2xhc3M9XCJlMXRhZy1zdHlsZTVcIiBbc3R5bGVdPVwiZ2V0Q2VsbFN0eWxlRm9ySW5saW5lRWRpdChjb2wsIGRhdGFJdGVtLCByb3dJbmRleClcIj5cclxuICAgICAgICAgICAgICA8YXBwLXppbnB1dC1jb250YWluZXIgW2RhdGFdPVwiZ2V0SW5saW5lRmllbGQoY29sLmZpZWxkKVwiIFtncm91cF09XCJncm91cFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtXT1cImdldElubGluZUZvcm0oZGF0YUl0ZW0sIHJvd0luZGV4KVwiIFtjb250YWluZXJGaWVsZF09XCJjb250YWluZXJGaWVsZFwiIFtzdHlsZV09XCJjb21wb25lbnRQcm9wZXJ0aWVzLnN0eWxlLnN0eWxlNlwiIGNsYXNzPVwiZTF0YWctc3R5bGU2XCI+XHJcbiAgICAgICAgICAgICAgPC9hcHAtemlucHV0LWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxzcGFuIHN0eWxlPVwibWFyZ2luLXRvcDogMTBweDtcIiAqbmdGb3I9XCJsZXQgaWNvbiBvZiBjb2wuY2xpY2thYmxlSWNvbnNcIj5cclxuICAgICAgICAgICAgICA8c3BhbiBbbmdDbGFzc109XCJpY29uLkNsYXNzID8gaWNvbi5DbGFzcyA6ICcnXCIgKm5nSWY9XCIhIWljb24gJiYgKCEhZGF0YUl0ZW0uV0ZTX1N0YXR1c0NvZGUgJiYgISFpY29uKVxyXG4gICAgICAgICAgICAgID8gZGF0YUl0ZW0uV0ZTX1N0YXR1c0NvZGUgIT09IGljb24uV0ZTX1N0YXR1c0NvZGVcclxuICAgICAgICAgICAgICA6IHRydWU7XHJcbiAgICAgICAgICAgIGVsc2UgZGlzYWJsZWRCdXR0b25cIiAoY2xpY2spPVwib25CdG5DbGljaygkZXZlbnQsIGljb24sIGRhdGFJdGVtLCBkYXRhSXRlbVtjb2wuZmllbGRdKVwiPlxyXG4gICAgICAgICAgICAgICAge3tpY29uLk5hbWUgfHwgZGF0YUl0ZW1bY29sLmZpZWxkXX19IDxmYS1pY29uIFtpY29uXT1cImljb24uSWNvblwiIHN0eWxlPVwicGFkZGluZzogNHB4IDZweDtcIj5cclxuICAgICAgICAgICAgICAgIDwvZmEtaWNvbj5cclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNkaXNhYmxlZEJ1dHRvbj5cclxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDwhLS0gPHN0cm9uZz57eyBkYXRhSXRlbVtjb2wuZmllbGRdIH19PC9zdHJvbmc+IC0tPlxyXG4gICAgICAgICAgICA8IS0tIDxzcGFuIGNsYXNzPVwie3tkYXRhSXRlbS5EaXNjb250aW51ZWQgPyAnZGlzY29udGludWVkJyA6ICdhY3RpdmUnfX1cIj5cclxuICAgICAgICAgICAgICB7e2RhdGFJdGVtLkRpc2NvbnRpbnVlZCA/IFwiZGlzY29udGludWVkXCIgOiBcImFjdGl2ZVwifX1cclxuICAgICAgICAgICAgPC9zcGFuPiAtLT5cclxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICA8bmctdGVtcGxhdGUga2VuZG9HcmlkRm9vdGVyVGVtcGxhdGUgbGV0LWNvbHVtbiBsZXQtY29sdW1uSW5kZXg9XCJjb2x1bW5JbmRleFwiICpuZ0lmPVwiZGF0YS5FbmFibGVBZ2dyZWdhdGVcIj5cclxuICAgICAgICAgICAgPGRpdiBzdHlsZT1cIm1hcmdpbjogNXB4IDA7XCIgW25nU3dpdGNoXT1cImNvbC5maWVsZFR5cGVcIiBbc3R5bGVdPVwiY29tcG9uZW50UHJvcGVydGllcy5zdHlsZS5zdHlsZTdcIiBjbGFzcz1cImUxdGFnLXN0eWxlN1wiPlxyXG4gICAgICAgICAgICAgIHt7Y29sLmFnZ3JlZ2F0ZVR5cGV9fVxyXG4gICAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInemRhdGUnXCI+XHJcbiAgICAgICAgICAgICAgICB7eyBjb2wuYWdncmVnYXRlVmFsdWUgfCBkYXRlOiAnZGQvTU0veXl5eScgfX1cclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIid6dGltZSdcIj5cclxuICAgICAgICAgICAgICAgIHt7IGNvbC5hZ2dyZWdhdGVWYWx1ZSB8IGRhdGU6ICdISDptbScgfX1cclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIid6c2hvcnRkYXRlJ1wiPlxyXG4gICAgICAgICAgICAgICAge3sgY29sLmFnZ3JlZ2F0ZVZhbHVlIHwgZGF0ZTogJ01NTSB5eXl5JyB9fVxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ3pkYXRldGltZSdcIj5cclxuICAgICAgICAgICAgICAgIHt7IGNvbC5hZ2dyZWdhdGVWYWx1ZSB8IGRhdGU6ICdkZC9NTS95eXl5IGhoOm1tOnNzIGFhJyB9fVxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ3p1aWRhdGV0aW1lJ1wiPlxyXG4gICAgICAgICAgICAgICAge3sgY29sLmFnZ3JlZ2F0ZVZhbHVlIHwgZGF0ZTogJ2RkL01NL3l5eXkgaGg6bW06c3MgYWEnIH19XHJcbiAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInbnVtYmVyJ1wiPlxyXG4gICAgICAgICAgICAgICAge3sgY29sLmFnZ3JlZ2F0ZVZhbHVlIHwgbnVtYmVyIH19XHJcbiAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInY3VycmVuY3knXCI+XHJcbiAgICAgICAgICAgICAgICB7eyBjb2wuYWdncmVnYXRlVmFsdWUgfCBudW1iZXI6IGdldEZvcm1hdChjb2wsICcxLjIuMicpIH19XHJcbiAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInem51bWVyaWMnXCI+XHJcbiAgICAgICAgICAgICAgICB7eyBjb2wuYWdncmVnYXRlVmFsdWUgfCBudW1iZXI6IGdldEZvcm1hdChjb2wpIH19XHJcbiAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCIndXJsJ1wiIHN0eWxlPVwiY29sb3I6IGJsdWU7IGN1cnNvcjogcG9pbnRlcjsgdGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTtcIj5cclxuICAgICAgICAgICAgICAgIHt7IGNvbC5hZ2dyZWdhdGVWYWx1ZSB9fVxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hEZWZhdWx0PlxyXG4gICAgICAgICAgICAgICAge3sgY29sLmFnZ3JlZ2F0ZVZhbHVlIH19XHJcbiAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgPC9rZW5kby1ncmlkLWNvbHVtbj5cclxuICAgICAgICA8a2VuZG8tZ3JpZC1jb21tYW5kLWNvbHVtbiAqbmdJZj1cImRhdGEuRW5hYmxlR3JpZENvbW1hbmRcIiB3aWR0aD1cIjE4MFwiIFtjb2x1bW5NZW51XT1cImZhbHNlXCIgW3N0eWxlXT1cImNvbXBvbmVudFByb3BlcnRpZXMuc3R5bGUuc3R5bGU4XCIgY2xhc3M9XCJlMXRhZy1zdHlsZThcIj5cclxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSBrZW5kb0dyaWRDZWxsVGVtcGxhdGUgbGV0LWlzTmV3PVwiaXNOZXdcIj5cclxuICAgICAgICAgICAgPGJ1dHRvbiBrZW5kb0dyaWRTYXZlQ29tbWFuZD5cclxuICAgICAgICAgICAgICB7eyBpc05ldyA/ICdTYXZlJyA6ICdVcGRhdGUnIH19XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8YnV0dG9uIGtlbmRvR3JpZENhbmNlbENvbW1hbmQgW3ByaW1hcnldPVwidHJ1ZVwiPlxyXG4gICAgICAgICAgICAgIHt7IGlzTmV3ID8gJ0Rpc2NhcmQgY2hhbmdlcycgOiAnQ2FuY2VsJyB9fVxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPGJ1dHRvbiBrZW5kb0dyaWRFZGl0Q29tbWFuZD5cclxuICAgICAgICAgICAgICB7eyBcIkVkaXRcIiB9fVxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPGJ1dHRvbiBrZW5kb0dyaWRSZW1vdmVDb21tYW5kPlxyXG4gICAgICAgICAgICAgIHt7IFwiUmVtb3ZlXCIgfX1cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgIDwva2VuZG8tZ3JpZC1jb21tYW5kLWNvbHVtbj5cclxuICAgICAgICA8a2VuZG8tZ3JpZC1jb21tYW5kLWNvbHVtbiAqbmdJZj1cImRhdGEuRW5hYmxlQ3VzdG9tUmVtb3ZlQ29tbWFuZFwiIHdpZHRoPVwiMTgwXCIgW2NvbHVtbk1lbnVdPVwiZmFsc2VcIiBbc3R5bGVdPVwiY29tcG9uZW50UHJvcGVydGllcy5zdHlsZS5zdHlsZThcIiBjbGFzcz1cImUxdGFnLXN0eWxlOFwiPlxyXG4gICAgICAgICAgPG5nLXRlbXBsYXRlIGtlbmRvR3JpZENlbGxUZW1wbGF0ZSBsZXQtaXNOZXc9XCJpc05ld1wiIGxldC1kYXRhSXRlbSBsZXQtcm93SW5kZXg9XCJyb3dJbmRleFwiPlxyXG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBrZW5kb0J1dHRvbiAoY2xpY2spPVwiZ3JpZEN1c3RvbVJlbW92ZUNvbW1hbmQoZGF0YUl0ZW0sIHJvd0luZGV4KVwiICpuZ0lmPVwiZGF0YS5FbmFibGVDdXN0b21SZW1vdmVDb21tYW5kXCI+XHJcbiAgICAgICAgICAgICAge3sgXCJSZW1vdmVcIiB9fVxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgPC9rZW5kby1ncmlkLWNvbW1hbmQtY29sdW1uPlxyXG4gICAgICAgIDxrZW5kby1ncmlkLWV4Y2VsIGZpbGVOYW1lPVwiRXhwb3J0Lnhsc3hcIiBbZmV0Y2hEYXRhXT1cImFsbFJlc3VsdHNcIj48L2tlbmRvLWdyaWQtZXhjZWw+XHJcbiAgICAgIDwva2VuZG8tZ3JpZD5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG4gIDwhLS0gZm9yIERFQyBhdXRvIHNjcm9sbGluZyAtLT5cclxuICA8ZGl2IGlkPVwiZW5kLW9mLWdyaWRcIj48L2Rpdj5cclxuPC9kaXY+XHJcblxyXG4iXX0=