@posiwise/resource-contact-us 0.0.8 → 0.0.9
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.
|
@@ -217,7 +217,6 @@ export class Trial4ContactUsComponent extends AppBaseComponent {
|
|
|
217
217
|
this.observer = new IntersectionObserver(([entry]) => {
|
|
218
218
|
if (entry.isIntersecting) {
|
|
219
219
|
this.isFooterVisible = true;
|
|
220
|
-
console.log(this.isFooterVisible, "hey");
|
|
221
220
|
this.cdr.detectChanges();
|
|
222
221
|
this.observer?.disconnect();
|
|
223
222
|
}
|
|
@@ -339,7 +338,6 @@ export class Trial4ContactUsComponent extends AppBaseComponent {
|
|
|
339
338
|
if (!this.hubspot?.length) {
|
|
340
339
|
return null;
|
|
341
340
|
}
|
|
342
|
-
console.log('this.hubspot', this.hubspot);
|
|
343
341
|
return this.hubspot.find(item => item.position === 'footer') ?? null;
|
|
344
342
|
}
|
|
345
343
|
navigateToBookMeeting() {
|
|
@@ -510,4 +508,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImpo
|
|
|
510
508
|
}], userLoggedIn: [{
|
|
511
509
|
type: Input
|
|
512
510
|
}] } });
|
|
513
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb3VyY2UtY29udGFjdC11cy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3Jlc291cmNlLWNvbnRhY3QtdXMvc3JjL2xpYi9yZXNvdXJjZS1jb250YWN0LXVzL3Jlc291cmNlLWNvbnRhY3QtdXMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9yZXNvdXJjZS1jb250YWN0LXVzL3NyYy9saWIvcmVzb3VyY2UtY29udGFjdC11cy9yZXNvdXJjZS1jb250YWN0LXVzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN6RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUVILHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULFVBQVUsRUFDVixNQUFNLEVBQ04sUUFBUSxFQUNSLEtBQUssRUFLTCxXQUFXLEVBQ1gsU0FBUyxFQUNaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxrQkFBa0IsRUFBb0IsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbEYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRXpELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRTFGLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDeEQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1B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LFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csb0JBQW9CO3NCQUE1QixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUdHLFlBQVk7c0JBQXBCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBtb3ZlSXRlbUluQXJyYXkgfSBmcm9tICdAYW5ndWxhci9jZGsvZHJhZy1kcm9wJztcbmltcG9ydCB7IERPQ1VNRU5UIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgRWxlbWVudFJlZixcbiAgICBJbmplY3QsXG4gICAgSW5qZWN0b3IsXG4gICAgSW5wdXQsXG4gICAgT25DaGFuZ2VzLFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgU2ltcGxlQ2hhbmdlcyxcbiAgICBUZW1wbGF0ZVJlZixcbiAgICBWaWV3Q2hpbGRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBVbnR5cGVkRm9ybUJ1aWxkZXIsIFVudHlwZWRGb3JtR3JvdXAsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcblxuaW1wb3J0IHsgQWRtaW5TZXJ2aWNlIH0gZnJvbSAnQHBvc2l3aXNlL2FkbWluLW1vZHVsZS11dGlscyc7XG5pbXBvcnQgeyBBcHBCYXNlQ29tcG9uZW50IH0gZnJvbSAnQHBvc2l3aXNlL2FwcC1iYXNlLWNvbXBvbmVudCc7XG5pbXBvcnQgeyBBYlRlc3RTZXJ2aWNlLCBBdXRoU2VydmljZSwgVmFsaWRhdGlvblNlcnZpY2UgfSBmcm9tICdAcG9zaXdpc2UvY29tbW9uLXNlcnZpY2VzJztcbmltcG9ydCB7IFVzZXIgfSBmcm9tICdAcG9zaXdpc2UvY29tbW9uLXV0aWxpdGllcyc7XG5pbXBvcnQgeyBIZWxwZXJTZXJ2aWNlIH0gZnJvbSAnQHBvc2l3aXNlL2hlbHBlci1zZXJ2aWNlJztcbmltcG9ydCB7IENybVNlcnZpY2UgfSBmcm9tICdAcG9zaXdpc2Uvc21hcnQtY3JtLXNoYXJlZCc7XG5pbXBvcnQgeyBDdXN0b21VcGxvYWRlckNvbXBvbmVudCB9IGZyb20gJ0Bwb3Npd2lzZS91dGlscyc7XG5cbmltcG9ydCB7IFN0YXR1c0NvZGVzIH0gZnJvbSAnaHR0cC1zdGF0dXMtY29kZXMnO1xuaW1wb3J0IFN3YWwgZnJvbSAnc3dlZXRhbGVydDInO1xuXG5pbXBvcnQgeyBOZ2JNb2RhbCB9IGZyb20gJ0BuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwJztcblxuaW1wb3J0IHsgUmVzb3VyY2VNb2RhbENvbnRleHQgfSBmcm9tICcuLi9zaGFyZWQvcmVzb3VyY2UtbW9kYWwuaW50ZXJmYWNlJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdwdy10cmlhbC00LWNvbnRhY3QtdXMnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9yZXNvdXJjZS1jb250YWN0LXVzLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9yZXNvdXJjZS1jb250YWN0LXVzLmNvbXBvbmVudC5zY3NzJ10sXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgVHJpYWw0Q29udGFjdFVzQ29tcG9uZW50XG4gICAgZXh0ZW5kcyBBcHBCYXNlQ29tcG9uZW50XG4gICAgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95XG57XG4gICAgQFZpZXdDaGlsZCgnZm9vdGVyU2VjdGlvbicsIHsgc3RhdGljOiB0cnVlIH0pIGZvb3RlclNlY3Rpb24hOiBFbGVtZW50UmVmO1xuICAgIEBWaWV3Q2hpbGQoJ2Jvb2tNZWV0aW5nJywgeyBzdGF0aWM6IHRydWUgfSkgY29udGVudDogVGVtcGxhdGVSZWY8UmVzb3VyY2VNb2RhbENvbnRleHQ+O1xuICAgIEBWaWV3Q2hpbGQoJ2VkaXRGb290ZXJMaW5rc01vZGFsJykgZWRpdEZvb3RlckxpbmtzTW9kYWw6IFRlbXBsYXRlUmVmPEN1c3RvbVVwbG9hZGVyQ29tcG9uZW50PjtcbiAgICBAVmlld0NoaWxkKCdsb2dvTW9kYWwnKSBsb2dvTW9kYWw6IFRlbXBsYXRlUmVmPEN1c3RvbVVwbG9hZGVyQ29tcG9uZW50PjtcbiAgICBAVmlld0NoaWxkKCdsb2dvVXBsb2FkZXInKSBsb2dvVXBsb2FkZXI6IEN1c3RvbVVwbG9hZGVyQ29tcG9uZW50O1xuICAgIEBWaWV3Q2hpbGQoJ2h1YnNwb3RFZGl0TW9kYWwnKSBodWJzcG90RWRpdE1vZGFsOiBUZW1wbGF0ZVJlZjxSZXNvdXJjZU1vZGFsQ29udGV4dD47XG4gICAgQFZpZXdDaGlsZCgnc29jaWFsRWRpdE1vZGFsJykgc29jaWFsRWRpdE1vZGFsOiBUZW1wbGF0ZVJlZjxDdXN0b21VcGxvYWRlckNvbXBvbmVudD47XG4gICAgQFZpZXdDaGlsZCgncXVlc3Rpb25zRWRpdE1vZGFsJykgcXVlc3Rpb25zRWRpdE1vZGFsOiBUZW1wbGF0ZVJlZjxDdXN0b21VcGxvYWRlckNvbXBvbmVudD47XG5cbiAgICBlZGl0aW5nUXVlc3Rpb25zID0gW107XG4gICAgaXNIdWJzcG90UmVhZHk6IGJvb2xlYW47XG5cbiAgICBpc0Zvb3RlclZpc2libGUgPSBmYWxzZTtcbiAgICBwcml2YXRlIG9ic2VydmVyPzogSW50ZXJzZWN0aW9uT2JzZXJ2ZXI7XG5cbiAgICBvcGVuUXVlc3Rpb25zRWRpdE1vZGFsKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmVkaXRpbmdRdWVzdGlvbnMgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuZWRpdGluZ1F1ZXN0aW9ucyA/PyBbXSkpO1xuICAgICAgICB0aGlzLm1vZGFsU2VydmljZS5vcGVuKHRoaXMucXVlc3Rpb25zRWRpdE1vZGFsLCB7IGNlbnRlcmVkOiB0cnVlLCBzaXplOiAnbGcnIH0pO1xuICAgIH1cblxuICAgIGVkaXRpbmdZb3V0dWJlVXJsOiBzdHJpbmc7XG4gICAgZWRpdGluZ0xpbmtlZEluVXJsOiBzdHJpbmc7XG4gICAgZWRpdGluZ0NvbXBhbnlOYW1lOiBzdHJpbmc7XG5cbiAgICBmb3JtOiBVbnR5cGVkRm9ybUdyb3VwO1xuXG4gICAgcmVjYXB0Y2hhID0gbnVsbDtcblxuICAgIHByZXZpZXdEYXRhO1xuXG4gICAgQElucHV0KCkgc3Vic2NyaXB0aW9uSWQgPSB0aGlzLmFwcENvbmZpZy5jcm0uc3Vic2NyaXB0aW9uX2lkO1xuICAgIEBJbnB1dCgpIHNvdXJjZUlkID0gdGhpcy5hcHBDb25maWcuY3JtLnNvdXJjZV9pZDtcbiAgICBASW5wdXQoKSBtYXN0ZXJTdWJzY3JpcHRpb25JZCA9IHRoaXMuYXBwQ29uZmlnLm1hc3Rlcl9zdWJzY3JpcHRpb24uc3Vic2NyaXB0aW9uX2lkO1xuICAgIEBJbnB1dCgpIGV4cGVyaW1lbnROYW1lO1xuICAgIEBJbnB1dCgpIG1pY3Jvc2VydmljZU5hbWU7XG4gICAgQElucHV0KCkgc2hhcmROYW1lO1xuICAgIEBJbnB1dCgpIHVzZXI6IFVzZXI7XG5cbiAgICBjYW5FZGl0UmVzb3VyY2VzVmFsdWUgPSBmYWxzZTtcbiAgICBASW5wdXQoKSB1c2VyTG9nZ2VkSW46IGJvb2xlYW47XG5cbiAgICBpZDtcblxuICAgIGxvZ28gPSB0aGlzLmFwcENvbmZpZz8uY29tcGFueT8ubG9nb3M/Lm1haW5fY29udHJhc3Q/LnVybDtcbiAgICB0cmlhbEJnSW1hZ2UyID0gdGhpcy5hcHBDb25maWc/LnNpZ251cF9jb25maWcudHJpYWw/LmltYWdlX2JnMj8udXJsO1xuICAgIHRvc0lkID0gdGhpcy5hcHBDb25maWc/Lm1haW5fdG9zX2lkO1xuICAgIGRlc2NyaXB0aW9uID0gdGhpcy5hcHBDb25maWcuY29tcGFueS5kZXNjcmlwdGlvbjtcbiAgICBlbWFpbCA9IHRoaXMuYXBwQ29uZmlnLmNvbXBhbnkuZW1haWw7XG4gICAgY29tcGFueU5hbWUgPSB0aGlzLmFwcENvbmZpZy5jb21wYW55Lm5hbWU7XG4gICAgc3RyZWV0ID0gdGhpcy5hcHBDb25maWcuY29tcGFueS5zdHJlZXQ7XG4gICAgcXVlc3Rpb25zID0gdGhpcy5hcHBDb25maWc/LnBhZ2VzX2NvbmZpZz8uY29udGFjdF91cz8ucXVlc3Rpb25zO1xuICAgIGh1YnNwb3QgPSB0aGlzLmFwcENvbmZpZz8ucGFnZXNfY29uZmlnPy5jb250YWN0X3VzPy5odWJzcG90O1xuICAgIGZvb3RlckxpbmtzID0gdGhpcy5hcHBDb25maWc/LnBhZ2VzX2NvbmZpZz8uZm9vdGVyX2xpbmtzPy5pdGVtcztcblxuICAgIGZvb3RlckxpbmtzRGF0YSA9IHRoaXMuYXBwQ29uZmlnPy5wYWdlc19jb25maWc/LmZvb3Rlcl9saW5rcztcblxuICAgIHlvdXR1YmVVcmwgPSB0aGlzLmFwcENvbmZpZy5zb2NpYWw/LnlvdXR1YmVfdXJsO1xuICAgIGxpbmtlZEluVXJsID0gdGhpcy5hcHBDb25maWcuc29jaWFsPy5saW5rZWRpbl91cmw7XG4gICAgZG9tYWluSWQgPSB0aGlzLmFwcENvbmZpZy5kb21haW5faWQ7XG5cbiAgICBlZGl0aW5nRW1haWwgPSB0aGlzLmVtYWlsO1xuICAgIGlzRWRpdGluZ0VtYWlsID0gZmFsc2U7XG5cbiAgICBlZGl0aW5nSHVic3BvdEh0bWw6IHN0cmluZztcbiAgICBlZGl0aW5nSHVic3BvdElkOiBzdHJpbmc7XG4gICAgY2FwdGNoYUtleVYyOiBzdHJpbmc7XG4gICAgaHVic3BvdEh0bWw7XG5cbiAgICBhYlRlc3RzO1xuXG4gICAgc3VibWl0dGVkID0gZmFsc2U7XG4gICAgaXNDYXB0Y2hhVmVyaWZpZWQgPSBmYWxzZTtcbiAgICBpc0VtYWlsVmFsaWQgPSB0cnVlO1xuICAgIGlzRWRpdGluZ1N0cmVldCA9IGZhbHNlO1xuXG4gICAgcHNhT3B0aW9ucztcblxuICAgIHF1ZXN0aW9uO1xuXG4gICAgZWRpdGluZ0Zvb3RlckxpbmtzID0ge1xuICAgICAgICBpdGVtczogW11cbiAgICB9O1xuICAgIGVkaXRpbmdTdHJlZXQ6IHN0cmluZztcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGZiOiBVbnR5cGVkRm9ybUJ1aWxkZXIsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgYXV0aFNlcnZpY2U6IEF1dGhTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGNybVNlcnZpY2U6IENybVNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgc2FuaXRpemVyOiBEb21TYW5pdGl6ZXIsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgYWRtaW5TZXJ2aWNlOiBBZG1pblNlcnZpY2UsXG4gICAgICAgIGluamVjdG9yOiBJbmplY3RvcixcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBhYlRlc3RTZXJ2aWNlOiBBYlRlc3RTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IG1vZGFsU2VydmljZTogTmdiTW9kYWwsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgQEluamVjdChET0NVTUVOVCkgcHJpdmF0ZSByZWFkb25seSBkb2N1bWVudDogRG9jdW1lbnRcbiAgICApIHtcbiAgICAgICAgc3VwZXIoaW5qZWN0b3IpO1xuICAgICAgICB0aGlzLmNhcHRjaGFLZXlWMiA9IHRoaXMuYXBwQ29uZmlnLmludGVncmF0aW9ucy5jYXB0Y2hhX2tleV9WMjtcbiAgICAgICAgdGhpcy5jb250YWN0VXNGb3JtKCk7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4gKHRoaXMuaXNIdWJzcG90UmVhZHkgPSB0cnVlKSwgMjAwMCk7XG4gICAgICAgIGlmICh0aGlzLnVzZXJMb2dnZWRJbikge1xuICAgICAgICAgICAgdGhpcy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbSQoJ3Byb2R1Y3QnKS5zdWJzY3JpYmUocmVzID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBkYXRhID0gcmVzID8gSlNPTi5wYXJzZShyZXMpIDogbnVsbDtcbiAgICAgICAgICAgICAgICB0aGlzLmlkID0gZGF0YT8uc3Vic2NyaXB0aW9uSWQ7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnByZXZpZXdEYXRhID0ge1xuICAgICAgICAgICAgdXJsOiB0aGlzLmxvZ28sXG4gICAgICAgICAgICBuYW1lOiAnbG9nb19tYWluX2NvbnRyYXN0LnBuZydcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5lZGl0aW5nU3RyZWV0ID0gdGhpcy5zdHJlZXQ7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXMuYXBwQ29uZmlnLnBhZ2VzX2NvbmZpZz8uYWJfdGVzdHMpKSB7XG4gICAgICAgICAgICB0aGlzLmFiVGVzdHMgPSB0aGlzLmFwcENvbmZpZy5wYWdlc19jb25maWcuYWJfdGVzdHMuZmluZChcbiAgICAgICAgICAgICAgICB0ZXN0ID0+IHRlc3QuZGVzY3JpcHRpb24gPT09ICdjb250YWN0LXVzJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRoaXMubWljcm9zZXJ2aWNlTmFtZSA9IHRoaXMuYWJUZXN0cz8ubWljcm9zZXJ2aWNlX25hbWU7XG4gICAgICAgICAgICB0aGlzLmV4cGVyaW1lbnROYW1lID0gdGhpcy5hYlRlc3RzPy5leHBlcmltZW50X25hbWU7XG4gICAgICAgICAgICB0aGlzLnNoYXJkTmFtZSA9IHRoaXMuYWJUZXN0cz8uZGJfc2hhcmQ7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBmb290ZXJJdGVtID0gdGhpcy5nZXRGb290ZXJIdWJzcG90Rm9ybSgpO1xuICAgICAgICBpZiAoZm9vdGVySXRlbT8uZGl2KSB7XG4gICAgICAgICAgICAvLyBOT1NPTkFSOiBUcnVzdGVkIEhUTUwgY29udGVudCBpcyBoYW5kbGVkIHNhZmVseSBoZXJlXG4gICAgICAgICAgICB0aGlzLmh1YnNwb3RIdG1sID0gdGhpcy5zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdEh0bWwoZm9vdGVySXRlbS5kaXYpOyAvLyBOT1NPTkFSXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5lZGl0aW5nUXVlc3Rpb25zID0gdGhpcy5xdWVzdGlvbnM7XG4gICAgICAgIHRoaXMucXVlc3Rpb24gPSB0aGlzLnF1ZXN0aW9ucz8uWzBdPy5xdWVzdGlvbjtcbiAgICAgICAgdGhpcy5wc2FPcHRpb25zID0gW1xuICAgICAgICAgICAgeyBsYWJlbDogJ1NlbGVjdCBQU0EnLCB2YWx1ZTogJycgfSxcbiAgICAgICAgICAgIC4uLih0aGlzLnF1ZXN0aW9ucz8uWzBdPy5vcHRpb25zID8/IFtdKVxuICAgICAgICAgICAgICAgIC5maWx0ZXIocSA9PiBxLm9wdGlvbj8udHJpbSgpKVxuICAgICAgICAgICAgICAgIC5tYXAocSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICBsYWJlbDogcS5vcHRpb24sXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBxLm9wdGlvblxuICAgICAgICAgICAgICAgIH0pKVxuICAgICAgICBdO1xuICAgIH1cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgICAgIGlmIChjaGFuZ2VzWyd1c2VyJ10gfHwgY2hhbmdlc1sndXNlckxvZ2dlZEluJ10pIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnVzZXJMb2dnZWRJbiAmJiB0aGlzLnVzZXIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUNhbkVkaXRSZXNvdXJjZXNWYWx1ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgb3BlbkxvZ29FZGl0TW9kYWwoKTogdm9pZCB7XG4gICAgICAgIHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4odGhpcy5sb2dvTW9kYWwsIHtcbiAgICAgICAgICAgIGNlbnRlcmVkOiB0cnVlLFxuICAgICAgICAgICAgc2l6ZTogJ21kJ1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBvblNhdmVGaWxlKGV2ZW50KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgICAgIGNvbnN0IGRhdGEgPSB7IHN1YnNjcmlwdGlvbl9pZDogdGhpcy5zdWJzY3JpcHRpb25JZCB9O1xuXG4gICAgICAgIGlmIChldmVudC5maWxlIGluc3RhbmNlb2YgRmlsZSkge1xuICAgICAgICAgICAgZGF0YVtldmVudC5uYW1lXSA9IGV2ZW50LmZpbGU7XG4gICAgICAgIH0gZWxzZSBpZiAoZXZlbnQuZmlsZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgZGF0YVtgcmVtb3ZlXyR7ZXZlbnQubmFtZX1gXSA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBkYXRhKSB7XG4gICAgICAgICAgICBmb3JtRGF0YS5hcHBlbmQoa2V5LCBkYXRhW2tleV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5hZG1pblNlcnZpY2UudXBkYXRlRG9tYWluQ29uZmlnKHRoaXMuZG9tYWluSWQsIGZvcm1EYXRhKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgaWYgKGV2ZW50LmZpbGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ28gPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGV2ZW50LmZpbGUpO1xuICAgICAgICAgICAgICAgIHRoaXMubW9kYWxTZXJ2aWNlLmRpc21pc3NBbGwoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMudG9hc3Quc3VjY2VzcyhldmVudC5maWxlID8gJ0xvZ28gdXBkYXRlZCcgOiAnTG9nbyByZW1vdmVkJyk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHNhdmVRdWVzdGlvbnMobW9kYWwpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgdXBkYXRlRGF0YSA9IHtcbiAgICAgICAgICAgIGNvbnRhY3RfdXM6IHtcbiAgICAgICAgICAgICAgICAuLi50aGlzLmFwcENvbmZpZy5wYWdlc19jb25maWc/LmNvbnRhY3RfdXMsXG4gICAgICAgICAgICAgICAgcXVlc3Rpb25zOiB0aGlzLmVkaXRpbmdRdWVzdGlvbnNcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzdWJzY3JpcHRpb25faWQ6IHRoaXMuaWRcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLmFkbWluU2VydmljZS51cGRhdGVEb21haW5Db25maWcodGhpcy5kb21haW5JZCwgdXBkYXRlRGF0YSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMucXVlc3Rpb25zID0gdGhpcy5lZGl0aW5nUXVlc3Rpb25zO1xuICAgICAgICAgICAgdGhpcy50b2FzdC5zdWNjZXNzKCdRdWVzdGlvbnMgdXBkYXRlZCcpO1xuICAgICAgICAgICAgdGhpcy5xdWVzdGlvbiA9IHRoaXMuZWRpdGluZ1F1ZXN0aW9ucz8uWzBdPy5xdWVzdGlvbjtcbiAgICAgICAgICAgIGlmICh0aGlzLmVkaXRpbmdRdWVzdGlvbnM/LlswXT8ub3B0aW9ucz8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMucHNhT3B0aW9ucyA9IFtcbiAgICAgICAgICAgICAgICAgICAgeyBsYWJlbDogJ1NlbGVjdCBQU0EnLCB2YWx1ZTogJycgfSxcbiAgICAgICAgICAgICAgICAgICAgLi4uKHRoaXMucXVlc3Rpb25zPy5bMF0/Lm9wdGlvbnMgPz8gW10pXG4gICAgICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKHEgPT4gcS5vcHRpb24/LnRyaW0oKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIC5tYXAocSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiBxLm9wdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogcS5vcHRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMucHNhT3B0aW9ucyA9IFtdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBtb2RhbC5jbG9zZSgpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhZGROZXdRdWVzdGlvbigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5lZGl0aW5nUXVlc3Rpb25zLnB1c2goeyBxdWVzdGlvbjogJycsIG9wdGlvbnM6IFtdIH0pO1xuICAgIH1cblxuICAgIGFkZFF1ZXN0aW9uT3B0aW9uKHFJbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZWRpdGluZ1F1ZXN0aW9uc1txSW5kZXhdLm9wdGlvbnMucHVzaCh7IG9wdGlvbjogJycgfSk7XG4gICAgfVxuXG4gICAgcmVtb3ZlUXVlc3Rpb25PcHRpb24ocUluZGV4OiBudW1iZXIsIG9wdEluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5lZGl0aW5nUXVlc3Rpb25zW3FJbmRleF0ub3B0aW9ucy5zcGxpY2Uob3B0SW5kZXgsIDEpO1xuICAgIH1cblxuICAgIGRyb3BRdWVzdGlvbnMoZXZlbnQpOiB2b2lkIHtcbiAgICAgICAgbW92ZUl0ZW1JbkFycmF5KHRoaXMuZWRpdGluZ1F1ZXN0aW9ucywgZXZlbnQucHJldmlvdXNJbmRleCwgZXZlbnQuY3VycmVudEluZGV4KTtcbiAgICB9XG5cbiAgICBkcm9wUXVlc3Rpb25PcHRpb25zKHFJbmRleDogbnVtYmVyLCBldmVudCk6IHZvaWQge1xuICAgICAgICBtb3ZlSXRlbUluQXJyYXkoXG4gICAgICAgICAgICB0aGlzLmVkaXRpbmdRdWVzdGlvbnNbcUluZGV4XS5vcHRpb25zLFxuICAgICAgICAgICAgZXZlbnQucHJldmlvdXNJbmRleCxcbiAgICAgICAgICAgIGV2ZW50LmN1cnJlbnRJbmRleFxuICAgICAgICApO1xuICAgIH1cblxuICAgIG9wZW5Tb2NpYWxFZGl0TW9kYWwoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZWRpdGluZ1lvdXR1YmVVcmwgPSB0aGlzLnlvdXR1YmVVcmw7XG4gICAgICAgIHRoaXMuZWRpdGluZ0xpbmtlZEluVXJsID0gdGhpcy5saW5rZWRJblVybDtcbiAgICAgICAgdGhpcy5lZGl0aW5nQ29tcGFueU5hbWUgPSB0aGlzLmNvbXBhbnlOYW1lO1xuXG4gICAgICAgIHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4odGhpcy5zb2NpYWxFZGl0TW9kYWwsIHsgY2VudGVyZWQ6IHRydWUsIHNpemU6ICdsZycgfSk7XG4gICAgfVxuXG4gICAgc2F2ZVNvY2lhbExpbmtzKG1vZGFsKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHVwZGF0ZURhdGEgPSB7XG4gICAgICAgICAgICB5b3V0dWJlX3VybDogdGhpcy5lZGl0aW5nWW91dHViZVVybCxcbiAgICAgICAgICAgIGxpbmtlZGluX3VybDogdGhpcy5lZGl0aW5nTGlua2VkSW5VcmwsXG4gICAgICAgICAgICBjb21wYW55X25hbWU6IHRoaXMuZWRpdGluZ0NvbXBhbnlOYW1lLFxuICAgICAgICAgICAgc3Vic2NyaXB0aW9uX2lkOiB0aGlzLmlkXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5hZG1pblNlcnZpY2UudXBkYXRlRG9tYWluQ29uZmlnKHRoaXMuZG9tYWluSWQsIHVwZGF0ZURhdGEpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnlvdXR1YmVVcmwgPSB0aGlzLmVkaXRpbmdZb3V0dWJlVXJsO1xuICAgICAgICAgICAgdGhpcy5saW5rZWRJblVybCA9IHRoaXMuZWRpdGluZ0xpbmtlZEluVXJsO1xuICAgICAgICAgICAgdGhpcy5jb21wYW55TmFtZSA9IHRoaXMuZWRpdGluZ0NvbXBhbnlOYW1lO1xuICAgICAgICAgICAgdGhpcy50b2FzdC5zdWNjZXNzKCdTb2NpYWwgbGlua3MgYW5kIGNvbXBhbnkgbmFtZSB1cGRhdGVkJyk7XG4gICAgICAgICAgICBtb2RhbC5jbG9zZSgpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBoYXNWYWxpZE9wdGlvbnMoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnF1ZXN0aW9ucz8uWzBdPy5vcHRpb25zPy5zb21lKG9wdCA9PiBvcHQub3B0aW9uPy50cmltKCkpO1xuICAgIH1cblxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAgICAgdGhpcy53YXRjaElmcmFtZUhlaWdodENoYW5nZSgpO1xuICAgICAgICB0aGlzLm9ic2VydmVyID0gbmV3IEludGVyc2VjdGlvbk9ic2VydmVyKFxuICAgICAgICAgICAgKFtlbnRyeV0pID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZW50cnkuaXNJbnRlcnNlY3RpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc0Zvb3RlclZpc2libGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyggdGhpcy5pc0Zvb3RlclZpc2libGUsIFwiaGV5XCIpXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vYnNlcnZlcj8uZGlzY29ubmVjdCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7IHRocmVzaG9sZDogMC4xIH1cbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLm9ic2VydmVyLm9ic2VydmUodGhpcy5mb290ZXJTZWN0aW9uLm5hdGl2ZUVsZW1lbnQpO1xuICAgIH1cblxuICAgIG9wZW5FZGl0Rm9vdGVyTGlua3NNb2RhbChjb250ZW50KTogdm9pZCB7XG4gICAgICAgIHRoaXMuZm9vdGVyTGlua3NEYXRhID0gdGhpcy5mb290ZXJMaW5rc0RhdGEgPz8ge307XG4gICAgICAgIHRoaXMuZm9vdGVyTGlua3NEYXRhLml0ZW1zID0gdGhpcy5mb290ZXJMaW5rc0RhdGEuaXRlbXMgPz8gW107XG4gICAgICAgIHRoaXMuZWRpdGluZ0Zvb3RlckxpbmtzID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLmZvb3RlckxpbmtzRGF0YSkpO1xuXG4gICAgICAgIHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oY29udGVudCwge1xuICAgICAgICAgICAgc2l6ZTogJ2xnJyxcbiAgICAgICAgICAgIGNlbnRlcmVkOiB0cnVlLFxuICAgICAgICAgICAgd2luZG93Q2xhc3M6ICdtb2RhbC1ob2xkZXInXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgd2F0Y2hJZnJhbWVIZWlnaHRDaGFuZ2UoKSB7XG4gICAgICAgIGNvbnN0IGlmcmFtZSA9IHRoaXMuZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmh1YnNwb3QtY29udGFpbmVyJyk7XG4gICAgICAgIGlmICghaWZyYW1lKSByZXR1cm47XG4gICAgICAgIGNvbnN0IGludGVydmFsID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbmV3SGVpZ2h0ID0gaWZyYW1lWydvZmZzZXRIZWlnaHQnXTtcbiAgICAgICAgICAgIGlmIChuZXdIZWlnaHQgPT09IDI1MCkge1xuICAgICAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwoaW50ZXJ2YWwpO1xuICAgICAgICAgICAgICAgIHRoaXMuY2FsbEFiVGVzdEZpbmlzaCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LCAzMDApO1xuICAgIH1cblxuICAgIC8vIE5ldyBtZXRob2QgdG8gaGFuZGxlIEh1YnNwb3QgY29udGVudCBsb2FkaW5nXG4gICAgb25IdWJzcG90TG9hZChldmVudDogRXZlbnQpIHtcbiAgICAgICAgY29uc3QgY29udGFpbmVyID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxEaXZFbGVtZW50O1xuICAgICAgICBjb250YWluZXIuY2xhc3NMaXN0LmFkZCgnY29udGVudC1sb2FkZWQnKTtcblxuICAgICAgICAvLyBPcHRpb25hbDogVHJpZ2dlciBsYXlvdXQgcmVjYWxjdWxhdGlvblxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHdpbmRvdy5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgncmVzaXplJykpO1xuICAgICAgICB9LCAxMDApO1xuICAgIH1cblxuICAgIHByaXZhdGUgY2FsbEFiVGVzdEZpbmlzaCgpIHtcbiAgICAgICAgaWYgKHRoaXMuZXhwZXJpbWVudE5hbWUgJiYgdGhpcy5taWNyb3NlcnZpY2VOYW1lKSB7XG4gICAgICAgICAgICB0aGlzLmFiVGVzdFNlcnZpY2VcbiAgICAgICAgICAgICAgICAuZmluaXNoQUJFeHBlcmltZW50KHRoaXMuZXhwZXJpbWVudE5hbWUsIHRoaXMubWljcm9zZXJ2aWNlTmFtZSlcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tb2RhbFNlcnZpY2Uub3Blbih0aGlzLmNvbnRlbnQsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNlbnRlcmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93Q2xhc3M6ICdtb2RhbC1ob2xkZXInXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY29udGFjdFVzRm9ybSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5mb3JtID0gdGhpcy5mYi5ncm91cCh7XG4gICAgICAgICAgICBmaXJzdF9uYW1lOiBbJycsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxuICAgICAgICAgICAgbGFzdF9uYW1lOiBbJyddLFxuICAgICAgICAgICAgY29tcGFueTogWycnXSxcbiAgICAgICAgICAgIHBzYTogWycnXSxcbiAgICAgICAgICAgIGVucXVpcnk6IFsnJywgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXG4gICAgICAgICAgICBlbWFpbDogWycnLCBWYWxpZGF0b3JzLnJlcXVpcmVkXVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBvblN1Ym1pdCgpIHtcbiAgICAgICAgdGhpcy5zdWJtaXR0ZWQgPSB0cnVlO1xuICAgICAgICBpZiAodGhpcy5mb3JtLnZhbGlkKSB7XG4gICAgICAgICAgICB0aGlzLmlzQ2FwdGNoYVZlcmlmaWVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuc3VibWl0dGVkID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBoYW5kbGVTdWNjZXNzKHRva2VuOiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKHRva2VuKSB7XG4gICAgICAgICAgICB0aGlzLmF1dGhTZXJ2aWNlLnZhbGlkYXRlUmVDYXB0Y2hhKHRva2VuKS5zdWJzY3JpYmUoKGlzU3VjY2VzczogYm9vbGVhbikgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChpc1N1Y2Nlc3MgJiYgdGhpcy5mb3JtLnZhbGlkKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRhdGEgPSB7IC4uLnRoaXMuZm9ybS5nZXRSYXdWYWx1ZSgpIH07XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZvcm1hdHRlZEVucXVpcnkgPSBgJHtkYXRhLmVucXVpcnl9OyBRdWVzdGlvbjogJHt0aGlzLnF1ZXN0aW9ufTsgQW5zd2VyOiAke2RhdGEucHNhfWA7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHBvc3REYXRhID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3RfbmFtZTogYCR7ZGF0YS5maXJzdF9uYW1lfWAsXG4gICAgICAgICAgICAgICAgICAgICAgICBsYXN0X25hbWU6IGAke2RhdGEuZmlyc3RfbmFtZX1gLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29tcGFueTogYCR7ZGF0YS5maXJzdF9uYW1lfWAsXG4gICAgICAgICAgICAgICAgICAgICAgICBlbWFpbDogYCR7ZGF0YS5lbWFpbH1gLFxuICAgICAgICAgICAgICAgICAgICAgICAgZW5xdWlyeTogdGhpcy5wc2FPcHRpb25zLmxlbmd0aCA/IGZvcm1hdHRlZEVucXVpcnkgOiBgJHtkYXRhLmVucXVpcnl9YCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBzYTogZGF0YS5wc2EsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdWJzY3JpcHRpb25faWQ6IHRoaXMuc3Vic2NyaXB0aW9uSWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBjcm1fc291cmNlX2lkOiB0aGlzLnNvdXJjZUlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWFzdGVyX3N1YnNjcmlwdGlvbl9pZDogdGhpcy5tYXN0ZXJTdWJzY3JpcHRpb25JZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vdGlmeV91c2VyOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzX21hbnVhbDogZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNybVNlcnZpY2UucG9zdENybUxlYWQodGhpcy5zdWJzY3JpcHRpb25JZCwgcG9zdERhdGEpLnN1YnNjcmliZShyZXNwID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vICBleGFtcGxlIG9mIHNuaXBwZXQgdG8gY2xvc2UgdGhlIGV4cGVyaW1lbnQgYW5kIHRyYWNrIGluIEdBXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzcD8uc3RhdHVzID09PSBTdGF0dXNDb2Rlcy5PSykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ29vZ2xlQW5hbHl0aWNzU2VydmljZS5zZW5kRXZlbnQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICduZXctbGVhZC1yZWdpc3RyYXRpb24nLCAvLyBjYXRlZ29yeSwgZWc6IHZpZGVvc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3Vic2NyaWJlLXN1Y2Nlc3MnLCAvLyBhY3Rpb24sIGVnOiBQbGF5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb21pbmctc29vbi10aHJlZScsIC8vIGxhYmVsLCBlZzogQ2hhcHB5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgLy8gdmFsdWUsIGVnOiAxMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZXhwZXJpbWVudE5hbWUgJiYgdGhpcy5taWNyb3NlcnZpY2VOYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWJUZXN0U2VydmljZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmZpbmlzaEFCRXhwZXJpbWVudCh0aGlzLmV4cGVyaW1lbnROYW1lLCB0aGlzLm1pY3Jvc2VydmljZU5hbWUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1vZGFsU2VydmljZS5vcGVuKHRoaXMuY29udGVudCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZW50ZXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93Q2xhc3M6ICdtb2RhbC1ob2xkZXInXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTd2FsLmZpcmUocmVzcC5tZXNzYWdlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm0ucmVzZXQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaXNDYXB0Y2hhVmVyaWZpZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzY3JvbGxUb1RvcCgpIHtcbiAgICAgICAgdGhpcy5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wID0gMDtcbiAgICB9XG5cbiAgICBnZXRGb290ZXJIdWJzcG90Rm9ybSgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmh1YnNwb3Q/Lmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgY29uc29sZS5sb2coJ3RoaXMuaHVic3BvdCcsIHRoaXMuaHVic3BvdCk7XG4gICAgICAgIHJldHVybiB0aGlzLmh1YnNwb3QuZmluZChpdGVtID0+IGl0ZW0ucG9zaXRpb24gPT09ICdmb290ZXInKSA/PyBudWxsO1xuICAgIH1cblxuICAgIG5hdmlnYXRlVG9Cb29rTWVldGluZygpIHtcbiAgICAgICAgY29uc3QgYm9va0RlbW9VcmwgPVxuICAgICAgICAgICAgdGhpcy5hcHBDb25maWc/LnNpZ251cF9jb25maWc/LnRyaWFsPy5ib29rX2RlbW9fdXJsID8/XG4gICAgICAgICAgICAnaHR0cHM6Ly9jYWxlbmRseS5jb20vY2xvdWRvbGl2ZSc7XG4gICAgICAgIHdpbmRvdy5vcGVuKGJvb2tEZW1vVXJsLCAnX2JsYW5rJywgJ25vcmVmZXJyZXIgbm9vcGVuZXInKTtcbiAgICB9XG5cbiAgICB2YWxpZGF0ZUVtYWlsKCkge1xuICAgICAgICBjb25zdCBlbWFpbCA9IHRoaXMuZm9ybS5nZXQoJ2VtYWlsJykudmFsdWU7XG4gICAgICAgIGlmIChlbWFpbCkge1xuICAgICAgICAgICAgdGhpcy5pc0VtYWlsVmFsaWQgPSBWYWxpZGF0aW9uU2VydmljZS5lbWFpbChlbWFpbCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmlzRW1haWxWYWxpZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhZGRGb290ZXJMaW5rKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmVkaXRpbmdGb290ZXJMaW5rcy5pdGVtcy5wdXNoKHtcbiAgICAgICAgICAgIHRpdGxlOiAnJyxcbiAgICAgICAgICAgIHBhdGg6ICcnLFxuICAgICAgICAgICAgc3VidGl0bGVzOiBbXVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICByZW1vdmVGb290ZXJMaW5rKGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5lZGl0aW5nRm9vdGVyTGlua3MuaXRlbXMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9XG5cbiAgICBhZGRTdWJ0aXRsZShmb290ZXJJbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZWRpdGluZ0Zvb3RlckxpbmtzLml0ZW1zW2Zvb3RlckluZGV4XS5zdWJ0aXRsZXMucHVzaCh7XG4gICAgICAgICAgICB0aXRsZTogJycsXG4gICAgICAgICAgICBwYXRoOiAnJ1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICByZW1vdmVTdWJ0aXRsZShmb290ZXJJbmRleDogbnVtYmVyLCBzdWJ0aXRsZUluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5lZGl0aW5nRm9vdGVyTGlua3MuaXRlbXNbZm9vdGVySW5kZXhdLnN1YnRpdGxlcy5zcGxpY2Uoc3VidGl0bGVJbmRleCwgMSk7XG4gICAgfVxuXG4gICAgZHJvcEZvb3RlckxpbmtzKGV2ZW50KSB7XG4gICAgICAgIG1vdmVJdGVtSW5BcnJheSh0aGlzLmVkaXRpbmdGb290ZXJMaW5rcy5pdGVtcywgZXZlbnQucHJldmlvdXNJbmRleCwgZXZlbnQuY3VycmVudEluZGV4KTtcbiAgICB9XG5cbiAgICBkcm9wU3VidGl0bGVzKGZvb3RlckluZGV4OiBudW1iZXIsIGV2ZW50KSB7XG4gICAgICAgIG1vdmVJdGVtSW5BcnJheShcbiAgICAgICAgICAgIHRoaXMuZWRpdGluZ0Zvb3RlckxpbmtzLml0ZW1zW2Zvb3RlckluZGV4XS5zdWJ0aXRsZXMsXG4gICAgICAgICAgICBldmVudC5wcmV2aW91c0luZGV4LFxuICAgICAgICAgICAgZXZlbnQuY3VycmVudEluZGV4XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgc2F2ZUZvb3RlckxpbmtzKG1vZGFsKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHVwZGF0ZWRDb25maWcgPSB7XG4gICAgICAgICAgICBmb290ZXJfbGlua3M6IHRoaXMuZWRpdGluZ0Zvb3RlckxpbmtzLFxuICAgICAgICAgICAgc3Vic2NyaXB0aW9uX2lkOiB0aGlzLmlkXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5hZG1pblNlcnZpY2VcbiAgICAgICAgICAgIC51cGRhdGVEb21haW5Db25maWcodGhpcy5hcHBDb25maWc/LmRvbWFpbl9pZCwgdXBkYXRlZENvbmZpZylcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMudG9hc3Quc3VjY2VzcygnRm9vdGVyIGxpbmtzIHVwZGF0ZWQnKTtcbiAgICAgICAgICAgICAgICB0aGlzLmZvb3RlckxpbmtzID0gWy4uLnRoaXMuZWRpdGluZ0Zvb3RlckxpbmtzLml0ZW1zXTtcbiAgICAgICAgICAgICAgICB0aGlzLmZvb3RlckxpbmtzRGF0YSA9IHsgLi4udGhpcy5lZGl0aW5nRm9vdGVyTGlua3MgfTtcbiAgICAgICAgICAgICAgICBtb2RhbC5jbG9zZSgpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgc2F2ZUVtYWlsKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmVtYWlsID0gdGhpcy5lZGl0aW5nRW1haWw7XG5cbiAgICAgICAgdGhpcy5hZG1pblNlcnZpY2VcbiAgICAgICAgICAgIC51cGRhdGVEb21haW5Db25maWcodGhpcy5hcHBDb25maWc/LmRvbWFpbl9pZCwge1xuICAgICAgICAgICAgICAgIGNvbXBhbnlfZW1haWw6IHRoaXMuZWRpdGluZ0VtYWlsLFxuICAgICAgICAgICAgICAgIHN1YnNjcmlwdGlvbl9pZDogdGhpcy5pZFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMudG9hc3Quc3VjY2VzcygnRW1haWwgdXBkYXRlZCcpO1xuICAgICAgICAgICAgICAgIHRoaXMuaXNFZGl0aW5nRW1haWwgPSBmYWxzZTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHNhdmVTdHJlZXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuYWRtaW5TZXJ2aWNlXG4gICAgICAgICAgICAudXBkYXRlRG9tYWluQ29uZmlnKHRoaXMuYXBwQ29uZmlnPy5kb21haW5faWQsIHtcbiAgICAgICAgICAgICAgICBjb21wYW55X2FkZHJlc3M6IHRoaXMuZWRpdGluZ1N0cmVldCxcbiAgICAgICAgICAgICAgICBzdWJzY3JpcHRpb25faWQ6IHRoaXMuaWRcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnRvYXN0LnN1Y2Nlc3MoJ1N0cmVldCB1cGRhdGVkJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5zdHJlZXQgPSB0aGlzLmVkaXRpbmdTdHJlZXQ7XG4gICAgICAgICAgICAgICAgdGhpcy5pc0VkaXRpbmdTdHJlZXQgPSBmYWxzZTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIGNhbmNlbFN0cmVldCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5lZGl0aW5nU3RyZWV0ID0gdGhpcy5zdHJlZXQ7XG4gICAgICAgIHRoaXMuaXNFZGl0aW5nU3RyZWV0ID0gZmFsc2U7XG4gICAgfVxuXG4gICAgb3Blbkh1YnNwb3RFZGl0TW9kYWwoZm9vdGVySXRlbSk6IHZvaWQge1xuICAgICAgICB0aGlzLmVkaXRpbmdIdWJzcG90SHRtbCA9IGZvb3Rlckl0ZW0uZGl2O1xuICAgICAgICB0aGlzLmVkaXRpbmdIdWJzcG90SWQgPSBmb290ZXJJdGVtLmlkO1xuICAgICAgICB0aGlzLm1vZGFsU2VydmljZS5vcGVuKHRoaXMuaHVic3BvdEVkaXRNb2RhbCwgeyBjZW50ZXJlZDogdHJ1ZSwgc2l6ZTogJ2xnJyB9KTtcbiAgICB9XG5cbiAgICBzYXZlSHVic3BvdEh0bWwobW9kYWwpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgdXBkYXRlZENvbmZpZyA9IHtcbiAgICAgICAgICAgIGNvbnRhY3RfdXM6IHtcbiAgICAgICAgICAgICAgICAuLi50aGlzLmFwcENvbmZpZz8ucGFnZXNfY29uZmlnPy5jb250YWN0X3VzLFxuICAgICAgICAgICAgICAgIGh1YnNwb3Q6IFtcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6ICc3NDIzNjM5JyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiAnZm9vdGVyJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpdjogdGhpcy5lZGl0aW5nSHVic3BvdEh0bWxcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzdWJzY3JpcHRpb25faWQ6IHRoaXMuaWRcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLmFkbWluU2VydmljZVxuICAgICAgICAgICAgLnVwZGF0ZURvbWFpbkNvbmZpZyh0aGlzLmFwcENvbmZpZz8uZG9tYWluX2lkLCB1cGRhdGVkQ29uZmlnKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gTk9TT05BUjogVHJ1c3RlZCBIVE1MIGNvbnRlbnQgaXMgaGFuZGxlZCBzYWZlbHkgaGVyZVxuICAgICAgICAgICAgICAgIHRoaXMuaHVic3BvdEh0bWwgPSB0aGlzLnNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0SHRtbCh0aGlzLmVkaXRpbmdIdWJzcG90SHRtbCk7IC8vIE5PU09OQVJcbiAgICAgICAgICAgICAgICB0aGlzLnRvYXN0LnN1Y2Nlc3MoJ0h1YnNwb3QgRW1iZWQgdXBkYXRlZCcpO1xuICAgICAgICAgICAgICAgIG1vZGFsLmNsb3NlKCk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG4gICAgcHJpdmF0ZSB1cGRhdGVDYW5FZGl0UmVzb3VyY2VzVmFsdWUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY2FuRWRpdFJlc291cmNlc1ZhbHVlID0gSGVscGVyU2VydmljZS5jYW5FZGl0UmVzb3VyY2VzKFxuICAgICAgICAgICAgdGhpcy51c2VyLFxuICAgICAgICAgICAgdGhpcy51c2VyTG9nZ2VkSW4sXG4gICAgICAgICAgICB0aGlzLnBlcm1pc3Npb25TZXJ2aWNlXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgY2FuRWRpdFJlc291cmNlcygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FuRWRpdFJlc291cmNlc1ZhbHVlO1xuICAgIH1cblxuICAgIG92ZXJyaWRlIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLm9ic2VydmVyPy5kaXNjb25uZWN0KCk7XG4gICAgfVxufVxuIiwiPHNlY3Rpb24gICNmb290ZXJTZWN0aW9uIGNsYXNzPVwiYmctYmxhY2sgdGV4dC13aGl0ZSBweS01IGZvb3Rlci1zZWN0aW9uXCI+XG4gIDxkaXYgY2xhc3M9XCJjb250YWluZXJcIiAqbmdJZj1cImlzRm9vdGVyVmlzaWJsZVwiPlxuICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cblxuICAgICAgPCEtLSBMRUZUIENPTFVNTiAtLT5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNiBtYi00IGQtZmxleCBmbGV4LWNvbHVtbiBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlblwiIFtuZ0NsYXNzXT1cInsgJ3NpdGUtY29sdW1uJzogZ2V0Rm9vdGVySHVic3BvdEZvcm0oKSB9XCI+XG4gICAgICAgIDxkaXY+XG4gICAgICAgICAgPGgzIGNsYXNzPVwibWItNCBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1lLTIgdGV4dC13aGl0ZVwiPlNpdGUgTWFwOjwvc3Bhbj5cbiAgICAgICAgICAgIDxpICpuZ0lmPVwiY2FuRWRpdFJlc291cmNlc1ZhbHVlXCIgY2xhc3M9XCJmYSBmYS1lZGl0IGluLXBhZ2UtZWRpdC1pY29uIGN1cnNvci1wb2ludGVyIHRleHQtd2hpdGUgbXMtM1wiIChjbGljayk9XCJvcGVuRWRpdEZvb3RlckxpbmtzTW9kYWwoZWRpdEZvb3RlckxpbmtzTW9kYWwpXCIgKGtleWRvd24uZW50ZXIpPVwib3BlbkVkaXRGb290ZXJMaW5rc01vZGFsKGVkaXRGb290ZXJMaW5rc01vZGFsKVwiIChrZXlkb3duLnNwYWNlKT1cIm9wZW5FZGl0Rm9vdGVyTGlua3NNb2RhbChlZGl0Rm9vdGVyTGlua3NNb2RhbClcIiBuZ2JUb29sdGlwPVwiRWRpdCBGb290ZXIgTGlua3NcIj48L2k+XG4gICAgICAgICAgPC9oMz5cbiAgICAgICAgICA8dWwgY2xhc3M9XCJtdC00XCI+XG4gICAgICAgICAgICA8bGkgcm91dGVyTGluaz1cIi9cIlxuICAgICAgICAgICAgY2xhc3M9XCJjdXJzb3ItcG9pbnRlciB1c2VyLWluZm8tbGFiZWwgbGluay1sYWJlbFwiPiBIb21lIDwvbGk+XG4gICAgICAgICAgICA8bGkgKm5nRm9yPVwibGV0IGxpbmsgb2YgZm9vdGVyTGlua3NcIiBbcm91dGVyTGlua109XCJsaW5rPy5wYXRoXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJjdXJzb3ItcG9pbnRlciB1c2VyLWluZm8tbGFiZWwgbGluay1sYWJlbCBtdC00XCI+PHNwYW4gICpuZ0lmPVwibGluaz8udGl0bGVcIj57e2xpbms/LnRpdGxlfX08L3NwYW4+IDwvbGk+XG4gICAgICAgICAgICA8bGkgcm91dGVyTGluaz1cIi9sb2dpblwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXIgdXNlci1pbmZvLWxhYmVsIG10LTQgbGluay1sYWJlbFwiPiBMb2cgaW4gPC9saT5cbiAgICAgICAgICAgIDxsaSBbcm91dGVyTGlua109XCInL3ByaXZhY3ktYW5kLXRvcy8nICsgdG9zSWRcIlxuICAgICAgICAgICAgICBjbGFzcz1cImN1cnNvci1wb2ludGVyIHVzZXItaW5mby1sYWJlbCBtdC00IGxpbmstbGFiZWxcIj4gUHJpdmFjeSBzdGF0ZW1lbnQgPC9saT5cbiAgICAgICAgICA8L3VsPlxuICAgICAgICAgIDxwIGNsYXNzPVwiYWRkcmVzcy1zZWN0aW9uIGVtYWlsLXNlY3Rpb24gbWItNFwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ1c2VyLWluZm8tbGFiZWxcIj5FbWFpbDogPC9zcGFuPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpc0VkaXRpbmdFbWFpbDsgZWxzZSBlZGl0RW1haWxcIj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ1c2VyLWluZm9cIj57eyBlbWFpbCB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPGkgKm5nSWY9XCJjYW5FZGl0UmVzb3VyY2VzVmFsdWVcIiBjbGFzcz1cImZhIGZhLWVkaXQgaW4tcGFnZS1lZGl0LWljb24gdGV4dC13aGl0ZSBjdXJzb3ItcG9pbnRlciBtcy0zXCIgKGNsaWNrKT1cImlzRWRpdGluZ0VtYWlsID0gdHJ1ZVwiIChrZXlkb3duLmVudGVyKT1cImlzRWRpdGluZ0VtYWlsID0gdHJ1ZVwiIChrZXlkb3duLnNwYWNlKT1cImlzRWRpdGluZ0VtYWlsID0gdHJ1ZVwiPjwvaT5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI2VkaXRFbWFpbD5cbiAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZC1pbmxpbmUgdy1hdXRvXCJcbiAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImVkaXRpbmdFbWFpbFwiXG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1wcmltYXJ5IG1zLTJcIiAoY2xpY2spPVwic2F2ZUVtYWlsKClcIj5TYXZlPC9idXR0b24+XG4gICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1zZWNvbmRhcnkgbXMtMlwiIChjbGljayk9XCJpc0VkaXRpbmdFbWFpbCA9IGZhbHNlXCI+Q2FuY2VsPC9idXR0b24+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJlbWFpbC1zZWN0aW9uIG10LTMgYWRkcmVzcy10ZXh0XCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInVzZXItaW5mby1sYWJlbFwiPlxuICAgICAgICAgICAgICBBZGRyZXNzOlxuICAgICAgICAgICAgICA8aSAqbmdJZj1cImNhbkVkaXRSZXNvdXJjZXNWYWx1ZVwiXG4gICAgICAgICAgICAgICAgIGNsYXNzPVwiZmEgZmEtZWRpdCBpbi1wYWdlLWVkaXQtaWNvbiBjdXJzb3ItcG9pbnRlciBtcy0yIHRleHQtd2hpdGVcIlxuICAgICAgICAgICAgICAgICB0aXRsZT1cIkVkaXQgQWRkcmVzc1wiXG4gICAgICAgICAgICAgICAgIChjbGljayk9XCJpc0VkaXRpbmdTdHJlZXQgPSB0cnVlXCJcbiAgICAgICAgICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwiaXNFZGl0aW5nU3RyZWV0ID0gdHJ1ZVwiXG4gICAgICAgICAgICAgICAgIChrZXlkb3duLnNwYWNlKT1cImlzRWRpdGluZ1N0cmVldCA9IHRydWVcIj48L2k+XG4gICAgICAgICAgICA8L3NwYW4+PGJyLz5cblxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpc0VkaXRpbmdTdHJlZXQ7IGVsc2UgZWRpdFN0cmVldEJsb2NrXCI+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYWRkcmVzcy10ZXh0IHVzZXItaW5mb1wiPnt7IHN0cmVldCB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI2VkaXRTdHJlZXRCbG9jaz5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgbXQtM1wiPlxuICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImZvcm0tY29udHJvbCBmb3JtLWNvbnRyb2wtc21cIiBbKG5nTW9kZWwpXT1cImVkaXRpbmdTdHJlZXRcIiAvPlxuICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1wcmltYXJ5IG1zLTJcIiAoY2xpY2spPVwic2F2ZVN0cmVldCgpXCI+U2F2ZTwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1zZWNvbmRhcnkgbXMtMlwiIChjbGljayk9XCJjYW5jZWxTdHJlZXQoKVwiPkNhbmNlbDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXhcIj5cbiAgICAgICAgICA8aW1nIFtzcmNdPVwibG9nb1wiXG4gICAgICAgICAgICAgICBhbHQ9XCJDb21wYW55IGxvZ29cIlxuICAgICAgICAgICAgICAgY2xhc3M9XCJpbWctZmx1aWQgbXQtNCBsb2dvLWltYWdlIGN1cnNvci1wb2ludGVyXCJcbiAgICAgICAgICAgICAgIHdpZHRoPVwiMTYwXCJcbiAgICAgICAgICAgICAgIGhlaWdodD1cIjM1XCJcbiAgICAgICAgICAgICAgIChjbGljayk9XCJzY3JvbGxUb1RvcCgpXCJcbiAgICAgICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cInNjcm9sbFRvVG9wKClcIlxuICAgICAgICAgICAgICAgKGtleWRvd24uc3BhY2UpPVwic2Nyb2xsVG9Ub3AoKVwiXG4gICAgICAgICAgICAgICB0aXRsZT1cIkNsaWNrIHRvIGdvIHRvIHRvcCBvZiBwYWdlXCIgLz5cbiAgICAgICAgICA8aSAqbmdJZj1cImNhbkVkaXRSZXNvdXJjZXNWYWx1ZVwiXG4gICAgICAgICAgICAgY2xhc3M9XCJmYSBmYS1lZGl0IGluLXBhZ2UtZWRpdC1pY29uIGZhLXNtIG1zLTMgY3Vyc29yLXBvaW50ZXIgdGV4dC13aGl0ZSBhbGlnbi1zZWxmLWNlbnRlciBtdC0zXCJcbiAgICAgICAgICAgICAoY2xpY2spPVwib3BlbkxvZ29FZGl0TW9kYWwoKVwiXG4gICAgICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwib3BlbkxvZ29FZGl0TW9kYWwoKVwiXG4gICAgICAgICAgICAgKGtleWRvd24uc3BhY2UpPVwib3BlbkxvZ29FZGl0TW9kYWwoKVwiXG4gICAgICAgICAgICAgdGl0bGU9XCJFZGl0IExvZ29cIj48L2k+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDwhLS0gUklHSFQgQ09MVU1OIC0tPlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCIgKm5nSWY9XCJpc0Zvb3RlclZpc2libGVcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImdldEZvb3Rlckh1YnNwb3RGb3JtKCkgYXMgZm9vdGVySXRlbTsgZWxzZSBkZWZhdWx0Rm9ybVwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleFwiPlxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJodWJzcG90LWNvbnRhaW5lciB3LTEwMCBjb250ZW50LWxvYWRlZFwiXG4gICAgICAgICAgICAgICAgW2lubmVySFRNTF09XCJodWJzcG90SHRtbFwiXG4gICAgICAgICAgICAgICAgKGxvYWQpPVwib25IdWJzcG90TG9hZCgkZXZlbnQpXCI+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8aSAqbmdJZj1cImNhbkVkaXRSZXNvdXJjZXNWYWx1ZVwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiZmEgZmEtZWRpdCBpbi1wYWdlLWVkaXQtaWNvbiB0ZXh0LXdoaXRlIGN1cnNvci1wb2ludGVyXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cIm9wZW5IdWJzcG90RWRpdE1vZGFsKGZvb3Rlckl0ZW0pXCJcbiAgICAgICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwib3Blbkh1YnNwb3RFZGl0TW9kYWwoZm9vdGVySXRlbSlcIlxuICAgICAgICAgICAgICAoa2V5ZG93bi5zcGFjZSk9XCJvcGVuSHVic3BvdEVkaXRNb2RhbChmb290ZXJJdGVtKVwiXG4gICAgICAgICAgICAgIHRpdGxlPVwiRWRpdCBIdWJzcG90IEVtYmVkXCI+PC9pPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHRGb3JtPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXhcIj5cbiAgICAgICAgICAgICAgICA8aDMgY2xhc3M9XCJ0ZXh0LXdoaXRlIG1iLTRcIj4gPHNwYW4gY2xhc3M9XCJ0ZXh0LXdoaXRlXCI+R2V0IGluIHRvdWNoOjwvc3Bhbj48L2gzPlxuICAgICAgICAgICAgICAgIDxpICpuZ0lmPVwiY2FuRWRpdFJlc291cmNlc1ZhbHVlXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImZhIGZhLWVkaXQgaW4tcGFnZS1lZGl0LWljb24gdGV4dC13aGl0ZSBjdXJzb3ItcG9pbnRlciBtcy0zIG10LTJcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJvcGVuUXVlc3Rpb25zRWRpdE1vZGFsKClcIlxuICAgICAgICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cIm9wZW5RdWVzdGlvbnNFZGl0TW9kYWwoKVwiXG4gICAgICAgICAgICAgICAgKGtleWRvd24uc3BhY2UpPVwib3BlblF1ZXN0aW9uc0VkaXRNb2RhbCgpXCJcbiAgICAgICAgICAgICAgICB0aXRsZT1cIkVkaXQgUXVlc3Rpb25zXCI+PC9pPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGFjdC1mb3JtXCI+XG4gICAgICAgICAgICAgIDxmb3JtIFtmb3JtR3JvdXBdPVwiZm9ybVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZW1haWxcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZmllbGRcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwiZW1haWxcIj5FbWFpbDo8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LTEwMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtYi0xXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJlbWFpbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImVtYWlsXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHB3LWZpZWxkLWVycm9yLWRpc3BsYXkgW2Rpc3BsYXlFcnJvcl09XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIWZvcm0uZ2V0KCdlbWFpbCcpLnZhbGlkICYmIChmb3JtLmdldCgnZW1haWwnKS50b3VjaGVkIHx8IHN1Ym1pdHRlZClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICBlcnJvck1zZz1cIkVtYWlsIGlzIHJlcXVpcmVkXCI+XG4gICAgICAgICAgICAgICAgICAgIDwvcHctZmllbGQtZXJyb3ItZGlzcGxheT5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWZpZWxkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImZpcnN0X25hbWVcIj5GaXJzdCBuYW1lOjwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInctMTAwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgaW5wdXQgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJmaXJzdF9uYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImZpcnN0X25hbWVcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8cHctZmllbGQtZXJyb3ItZGlzcGxheSBbZGlzcGxheUVycm9yXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAhZm9ybS5nZXQoJ2ZpcnN0X25hbWUnKS52YWxpZCAmJiAoZm9ybS5nZXQoJ2ZpcnN0X25hbWUnKS50b3VjaGVkIHx8IHN1Ym1pdHRlZClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICBlcnJvck1zZz1cIkZpcnN0IG5hbWUgaXMgcmVxdWlyZWRcIj5cbiAgICAgICAgICAgICAgICAgICAgPC9wdy1maWVsZC1lcnJvci1kaXNwbGF5PlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZmllbGRcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwibGFzdF9uYW1lXCI+TGFzdCBuYW1lOjwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwibGFzdF9uYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImxhc3RfbmFtZVwiIC8+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1maWVsZFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJjb21wYW55XCI+Q29tcGFueTo8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBpZD1cImNvbXBhbnlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiY29tcGFueVwiIC8+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1maWVsZFwiICpuZ0lmPVwiaGFzVmFsaWRPcHRpb25zKClcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwicHNhXCIgY2xhc3M9XCJzZWxlY3QtbGFiZWxcIj57e3F1ZXN0aW9ufX08L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgIDxwLWRyb3Bkb3duXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJwc2FcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW29wdGlvbnNdPVwicHNhT3B0aW9uc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ1NlbGVjdCBQU0EnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlQ2xhc3M9XCJpbnB1dC1zZWxlY3RcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8L3AtZHJvcGRvd24+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1maWVsZFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJlbnF1aXJ5XCIgY2xhc3M9XCJzZWxlY3QtbGFiZWxcIj5Ib3cgY2FuIHdlIGhlbHAgeW91PzwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImVucXVpcnktZmllbGRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSAgaWQ9XCJlbnF1aXJ5XCIgZm9ybUNvbnRyb2xOYW1lPVwiZW5xdWlyeVwiIGNsYXNzPVwiXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGV4dGFyZWE+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxwdy1maWVsZC1lcnJvci1kaXNwbGF5IFtkaXNwbGF5RXJyb3JdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICFmb3JtLmdldCgnZW5xdWlyeScpLnZhbGlkICYmIChmb3JtLmdldCgnZW5xdWlyeScpLnRvdWNoZWQgfHwgc3VibWl0dGVkKVxuICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgIGVycm9yTXNnPVwiRW5xdWlyeSBpcyByZXF1aXJlZFwiPlxuICAgICAgICAgICAgICAgICAgICA8L3B3LWZpZWxkLWVycm9yLWRpc3BsYXk+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtZW5kXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FwdGNoYS13cmFwcGVyLWNvbnRhaW5lclwiXG4gICAgICAgICAgICAgICAgICAqbmdJZj1cImlzQ2FwdGNoYVZlcmlmaWVkXCI+XG4gICAgICAgICAgICAgICAgICA8bmd4LXJlY2FwdGNoYTIgW25nTW9kZWxPcHRpb25zXT1cInsgc3RhbmRhbG9uZTogdHJ1ZSB9XCJcbiAgICAgICAgICAgICAgICAgICAgW3NpdGVLZXldPVwiY2FwdGNoYUtleVYyXCJcbiAgICAgICAgICAgICAgICAgICAgc2l6ZT1cIm5vcm1hbFwiXG4gICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwicmVjYXB0Y2hhXCJcbiAgICAgICAgICAgICAgICAgICAgKHN1Y2Nlc3MpPVwiaGFuZGxlU3VjY2VzcygkZXZlbnQpXCI+XG4gICAgICAgICAgICAgICAgICA8L25neC1yZWNhcHRjaGEyPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uU3VibWl0KClcIlxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIiFpc0NhcHRjaGFWZXJpZmllZFwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwic2lnbi1idG4gc2lnbi1oZWFkZXItYnRuIG10LTNcIj5cbiAgICAgICAgICAgICAgICAgICAge3sgJ0J1dHRvbi5TdWJtaXQnIHwgdHJhbnNsb2NvIH19XG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIG10LTRcIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpY29ucyBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxhIFtldmVudFRyYWNrZXJdPVwie1xuICAgICAgICAgICAgICAgICAgICAgICAgY2F0ZWdvcnk6ICd5b3V0dWJlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbjogJ2NsaWNrJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiAnY2xvdWRvbGl2ZS1sYW5kaW5nLXBhZ2UtYicsXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogMVxuICAgICAgICAgICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgICAgICAgICAgIFtocmVmXT1cInlvdXR1YmVVcmxcIlxuICAgICAgICAgICAgICAgICAgICAgIHRhcmdldD1cIl9ibGFua1wiXG4gICAgICAgICAgICAgICAgICAgICAgcmVsPVwibm9vcGVuZXIgbm9yZWZlcnJlclwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPVwiL2Fzc2V0cy9pbWcvaWNvbnMveW91dHViZS5wbmdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJpbWctZmx1aWQgeW91dHViZS1pY29uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPVwiNTRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0PVwiNTRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgYWx0PVwiXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgICAgICA8YSBbZXZlbnRUcmFja2VyXT1cIntcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhdGVnb3J5OiAnbGlua2VkaW4nLFxuICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uOiAnY2xpY2snLFxuICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6ICdjbG91ZG9saXZlLWxhbmRpbmctcGFnZS1iJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiAxXG4gICAgICAgICAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAgICAgICAgICAgW2hyZWZdPVwibGlua2VkSW5VcmxcIlxuICAgICAgICAgICAgICAgICAgICAgIHRhcmdldD1cIl9ibGFua1wiXG4gICAgICAgICAgICAgICAgICAgICAgcmVsPVwibm9vcGVuZXIgbm9yZWZlcnJlclwiXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtcy0zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9XCIvYXNzZXRzL2ltZy9pY29ucy9zb2NpYWwvbGlua2VkaW4uc3ZnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaW1nLWZsdWlkIGxpbmtlZGluLWljb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg9XCI0OFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ9XCI0OFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBhbHQ9XCJcIiAvPlxuICAgICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgICAgIDxpICpuZ0lmPVwiY2FuRWRpdFJlc291cmNlc1ZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmYSBmYS1lZGl0IGluLXBhZ2UtZWRpdC1pY29uIHRleHQtd2hpdGUgY3Vyc29yLXBvaW50ZXIgbXMtM1wiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvcGVuU29jaWFsRWRpdE1vZGFsKClcIlxuICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJvcGVuU29jaWFsRWRpdE1vZGFsKClcIlxuICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bi5zcGFjZSk9XCJvcGVuU29jaWFsRWRpdE1vZGFsKClcIlxuICAgICAgICAgICAgICAgICAgICB0aXRsZT1cIkVkaXQgU29jaWFsIExpbmtzICYgQ29tcGFueSBOYW1lXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29weXJpZ2h0IHRleHQtd2hpdGVcIj5cbiAgICAgICAgICAgICAgICAgICAgMjAyNSB7e2NvbXBhbnlOYW1lfX0uXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9mb3JtPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9zZWN0aW9uPlxuXG5cblxuPG5nLXRlbXBsYXRlICNib29rTWVldGluZ1xuICBsZXQtbW9kYWw+XG4gIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXJcIj5cbiAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIlxuICAgICAgY2xhc3M9XCJidG4tY2xvc2UgZmxvYXQtZW5kXCJcbiAgICAgIGFyaWEtbGFiZWw9XCJDbG9zZVwiXG4gICAgICAoY2xpY2spPVwibW9kYWwuZGlzbWlzcygpXCI+XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keVwiPlxuICAgIDxoMyBjbGFzcz1cInRleHQtY2VudGVyIG1vZGFsLWJhc2ljLXRpdGxlXCI+XG4gICAgICBUaGFua3MgZm9yIGdldHRpbmcgaW4gdG91Y2ghIE91ciB0ZWFtIHdpbGwgYmUgaW4gY29udGFjdCBzaG9ydGx5LCBvciB3ZVxuICAgICAgY2FuIGNvbXBhcmUgY2FsZW5kYXJzIG5vdyAmYW1wOyBzY2hlZHVsZSBhIHRpbWVcbiAgICA8L2gzPlxuICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiXG4gICAgICBbZXZlbnRUcmFja2VyXT1cIntcbiAgICAgICAgY2F0ZWdvcnk6ICdyZXF1ZXN0LWRlbW8nLFxuICAgICAgICBhY3Rpb246ICdjbGljaycsXG4gICAgICAgIGxhYmVsOiAnY2xvdWRvbGl2ZS1sYW5kaW5nLXBhZ2UtYicsXG4gICAgICAgIHZhbHVlOiAxXG4gICAgICB9XCJcbiAgICAgIChjbGljayk9XCJuYXZpZ2F0ZVRvQm9va01lZXRpbmcoKVwiXG4gICAgICBjbGFzcz1cInNpZ24tYnRuIHNpZ24taGVhZGVyLWJ0biBteC1hdXRvIGQtYmxvY2sgbWItM1wiPlxuICAgICAgTGV0J3MgZG8gaXRcbiAgICA8L2J1dHRvbj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG5cbjxuZy10ZW1wbGF0ZSAjZWRpdEZvb3RlckxpbmtzTW9kYWwgbGV0LW1vZGFsPlxuICA8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyXCI+XG4gICAgPGg1IGNsYXNzPVwibW9kYWwtdGl0bGVcIj5FZGl0IEZvb3RlciBMaW5rczwvaDU+XG4gICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4tY2xvc2VcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIiAoY2xpY2spPVwibW9kYWwuZGlzbWlzcygpXCI+PC9idXR0b24+XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5XCI+XG4gICAgPGg0IGNsYXNzPVwibWItM1wiPkZvb3RlciBMaW5rcyBTZWN0aW9uPC9oND5cbiAgICA8ZGl2IGNka0Ryb3BMaXN0IChjZGtEcm9wTGlzdERyb3BwZWQpPVwiZHJvcEZvb3RlckxpbmtzKCRldmVudClcIj5cbiAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGZvb3RlciBvZiBlZGl0aW5nRm9vdGVyTGlua3MuaXRlbXM7IGxldCBpID0gaW5kZXhcIiBjbGFzcz1cImJvcmRlciBwLTMgbWItM1wiIGNka0RyYWc+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTUgbWItMlwiPlxuICAgICAgICAgICAgPGxhYmVsIGZvcj1cImZvb3RlclRpdGxle3tpfX1cIiBjbGFzcz1cImZvcm0tbGFiZWxcIj5UaXRsZTwvbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgaWQ9XCJmb290ZXJUaXRsZXt7aX19XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBbKG5nTW9kZWwpXT1cImZvb3Rlci50aXRsZVwiIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC01IG1iLTJcIj5cbiAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJmb290ZXJQYXRoe3tpfX1cIiBjbGFzcz1cImZvcm0tbGFiZWxcIj5QYXRoPC9sYWJlbD5cbiAgICAgICAgICAgIDxpbnB1dCBpZD1cImZvb3RlclBhdGh7e2l9fVwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgWyhuZ01vZGVsKV09XCJmb290ZXIucGF0aFwiIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0yIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXIgbXQtNFwiPlxuICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS10cmFzaCBpbi1wYWdlLXRyYXNoLWljb24gdGV4dC1kYW5nZXIgY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwicmVtb3ZlRm9vdGVyTGluayhpKVwiIChrZXlkb3duLmVudGVyKT1cInJlbW92ZUZvb3RlckxpbmsoaSlcIiAoa2V5ZG93bi5zcGFjZSk9XCJyZW1vdmVGb290ZXJMaW5rKGkpXCI+PC9pPlxuICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1iYXJzIGluLXBhZ2UtYmFycy1pY29uIGN1cnNvci1tb3ZlXCIgY2RrRHJhZ0hhbmRsZT48L2k+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDwhLS0gU3VidGl0bGVzIC0tPlxuICAgICAgICA8ZGl2IGNka0Ryb3BMaXN0IChjZGtEcm9wTGlzdERyb3BwZWQpPVwiZHJvcFN1YnRpdGxlcyhpLCAkZXZlbnQpXCI+XG4gICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgc3ViIG9mIGZvb3Rlci5zdWJ0aXRsZXM7IGxldCBqID0gaW5kZXhcIiBjbGFzcz1cInJvdyBib3JkZXIgcC0zIG1iLTIgYWxpZ24taXRlbXMtY2VudGVyXCIgY2RrRHJhZz5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNVwiPlxuICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwic3VidGl0bGVUaXRsZXt7aX19e3tqfX1cIiBjbGFzcz1cImZvcm0tbGFiZWxcIj5TdWJ0aXRsZSBUaXRsZTwvbGFiZWw+XG4gICAgICAgICAgICAgIDxpbnB1dCBpZD1cInN1YnRpdGxlVGl0bGV7e2l9fXt7an19XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBbKG5nTW9kZWwpXT1cInN1Yi50aXRsZVwiIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNVwiPlxuICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwic3VidGl0bGVQYXRoe3tpfX17e2p9fVwiIGNsYXNzPVwiZm9ybS1sYWJlbFwiPlN1YnRpdGxlIFBhdGg8L2xhYmVsPlxuICAgICAgICAgICAgICA8aW5wdXQgaWQ9XCJzdWJ0aXRsZVBhdGh7e2l9fXt7an19XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBbKG5nTW9kZWwpXT1cInN1Yi5wYXRoXCIgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0yIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXIgbXQtNFwiPlxuICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXRyYXNoIGluLXBhZ2UtdHJhc2gtaWNvbiB0ZXh0LWRhbmdlciBjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJyZW1vdmVTdWJ0aXRsZShpLCBqKVwiIChrZXlkb3duLmVudGVyKT1cInJlbW92ZVN1YnRpdGxlKGksIGopXCIgKGtleWRvd24uc3BhY2UpPVwicmVtb3ZlU3VidGl0bGUoaSwgailcIj48L2k+XG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtYmFycyBjdXJzb3ItbW92ZSBpbi1wYWdlLWJhcnMtaWNvblwiIGNka0RyYWdIYW5kbGU+PC9pPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLW91dGxpbmUtcHJpbWFyeSBidG4tc20gbXQtMlwiIChjbGljayk9XCJhZGRTdWJ0aXRsZShpKVwiPlxuICAgICAgICAgICsgQWRkIFN1YnRpdGxlXG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IG10LTNcIiAoY2xpY2spPVwiYWRkRm9vdGVyTGluaygpXCI+XG4gICAgICArIEFkZCBGb290ZXIgTGlua1xuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cblxuICA8ZGl2IGNsYXNzPVwibW9kYWwtZm9vdGVyXCI+XG4gICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tc2Vjb25kYXJ5XCIgKGNsaWNrKT1cIm1vZGFsLmRpc21pc3MoKVwiPkNhbmNlbDwvYnV0dG9uPlxuICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIiAoY2xpY2spPVwic2F2ZUZvb3RlckxpbmtzKG1vZGFsKVwiPlNhdmU8L2J1dHRvbj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG5cblxuXG5cbjxuZy10ZW1wbGF0ZSAjbG9nb01vZGFsIGxldC1tb2RhbD5cbiAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlclwiPlxuICAgIDxoNSBjbGFzcz1cIm1vZGFsLXRpdGxlXCI+VXBsb2FkIExvZ288L2g1PlxuICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuLWNsb3NlXCIgYXJpYS1sYWJlbD1cIkNsb3NlXCIgKGNsaWNrKT1cIm1vZGFsLmRpc21pc3MoKVwiPjwvYnV0dG9uPlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cIm1vZGFsLWJvZHlcIj5cbiAgICA8cHctY3VzdG9tLXVwbG9hZGVyXG4gICAgICBbYXNwZWN0UmF0aW9dPVwiJ2Z1bGxMb2dvJ1wiXG4gICAgICBbdGl0bGVdPVwiJ01haW4gQ29udHJhc3QgTG9nbydcIlxuICAgICAgW2NvbnRyb2xOYW1lXT1cIidsb2dvX21haW5fY29udHJhc3QnXCJcbiAgICAgIFtwcmV2aWV3RGF0YV09XCJwcmV2aWV3RGF0YVwiXG4gICAgICAoc2F2ZUV2ZW50KT1cIm9uU2F2ZUZpbGUoJGV2ZW50KVwiPlxuICAgIDwvcHctY3VzdG9tLXVwbG9hZGVyPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cblxuXG48bmctdGVtcGxhdGUgI2h1YnNwb3RFZGl0TW9kYWwgbGV0LW1vZGFsPlxuICA8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyXCI+XG4gICAgPGg1IGNsYXNzPVwibW9kYWwtdGl0bGVcIj5FZGl0IEh1YnNwb3QgRW1iZWQ8L2g1PlxuICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuLWNsb3NlXCIgYXJpYS1sYWJlbD1cIkNsb3NlXCIgKGNsaWNrKT1cIm1vZGFsLmRpc21pc3MoKVwiPjwvYnV0dG9uPlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cIm1vZGFsLWJvZHlcIj5cbiAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxuICAgICAgPGxhYmVsIGZvcj1cImh1YnNwb3RJZFwiIGNsYXNzPVwiZm9ybS1sYWJlbFwiPkh1YnNwb3QgSUQ8L2xhYmVsPlxuICAgICAgPGlucHV0IGlkPVwiaHVic3BvdElkXCIgWyhuZ01vZGVsKV09XCJlZGl0aW5nSHVic3BvdElkXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiAvPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJtYi0zXCI+XG4gICAgICA8bGFiZWwgZm9yPVwiaHVic3BvdEVtYmVkRGl2XCIgY2xhc3M9XCJmb3JtLWxhYmVsXCI+RW1iZWQgRElWPC9sYWJlbD5cbiAgICAgIDx0ZXh0YXJlYSBpZD1cImh1YnNwb3RFbWJlZERpdlwiIFsobmdNb2RlbCldPVwiZWRpdGluZ0h1YnNwb3RIdG1sXCIgcm93cz1cIjhcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiPjwvdGV4dGFyZWE+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPVwibW9kYWwtZm9vdGVyXCI+XG4gICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiIChjbGljayk9XCJzYXZlSHVic3BvdEh0bWwobW9kYWwpXCI+U2F2ZTwvYnV0dG9uPlxuICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXNlY29uZGFyeVwiIChjbGljayk9XCJtb2RhbC5kaXNtaXNzKClcIj5DYW5jZWw8L2J1dHRvbj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG5cbjxuZy10ZW1wbGF0ZSAjc29jaWFsRWRpdE1vZGFsIGxldC1tb2RhbD5cbiAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlclwiPlxuICAgIDxoNSBjbGFzcz1cIm1vZGFsLXRpdGxlXCI+RWRpdCBTb2NpYWwgTGlua3MgJiBDb21wYW55IE5hbWU8L2g1PlxuICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuLWNsb3NlXCIgYXJpYS1sYWJlbD1cIkNsb3NlXCIgKGNsaWNrKT1cIm1vZGFsLmRpc21pc3MoKVwiPjwvYnV0dG9uPlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cIm1vZGFsLWJvZHlcIj5cbiAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxuICAgICAgPGxhYmVsIGZvcj1cInlvdXR1YmVVcmxcIiBjbGFzcz1cImZvcm0tbGFiZWxcIj5Zb3VUdWJlIFVSTDwvbGFiZWw+XG4gICAgICA8aW5wdXQgaWQ9XCJ5b3V0dWJlVXJsXCIgWyhuZ01vZGVsKV09XCJlZGl0aW5nWW91dHViZVVybFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgLz5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxuICAgICAgPGxhYmVsIGZvcj1cImxpbmtlZGluVXJsXCIgY2xhc3M9XCJmb3JtLWxhYmVsXCI+TGlua2VkSW4gVVJMPC9sYWJlbD5cbiAgICAgIDxpbnB1dCBpZD1cImxpbmtlZGluVXJsXCIgWyhuZ01vZGVsKV09XCJlZGl0aW5nTGlua2VkSW5VcmxcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIC8+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cIm1iLTNcIj5cbiAgICAgIDxsYWJlbCBmb3I9XCJjb21wYW55TmFtZVwiIGNsYXNzPVwiZm9ybS1sYWJlbFwiPkNvbXBhbnkgTmFtZTwvbGFiZWw+XG4gICAgICA8aW5wdXQgaWQ9XCJjb21wYW55TmFtZVwiIFsobmdNb2RlbCldPVwiZWRpdGluZ0NvbXBhbnlOYW1lXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiAvPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cIm1vZGFsLWZvb3RlclwiPlxuICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIiAoY2xpY2spPVwic2F2ZVNvY2lhbExpbmtzKG1vZGFsKVwiPlNhdmU8L2J1dHRvbj5cbiAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1zZWNvbmRhcnlcIiAoY2xpY2spPVwibW9kYWwuZGlzbWlzcygpXCI+Q2FuY2VsPC9idXR0b24+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuXG5cbjxuZy10ZW1wbGF0ZSAjcXVlc3Rpb25zRWRpdE1vZGFsIGxldC1tb2RhbD5cbiAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlclwiPlxuICAgIDxoNSBjbGFzcz1cIm1vZGFsLXRpdGxlXCI+RWRpdCBRdWVzdGlvbnM8L2g1PlxuICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuLWNsb3NlXCIgYXJpYS1sYWJlbD1cIkNsb3NlXCIgKGNsaWNrKT1cIm1vZGFsLmRpc21pc3MoKVwiPjwvYnV0dG9uPlxuICA8L2Rpdj5cblxuICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keVwiPlxuICAgIDxoNCBjbGFzcz1cIm1iLTNcIj5RdWVzdGlvbnMgU2VjdGlvbjwvaDQ+XG4gICAgPGRpdiBjZGtEcm9wTGlzdCAoY2RrRHJvcExpc3REcm9wcGVkKT1cImRyb3BRdWVzdGlvbnMoJGV2ZW50KVwiPlxuICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgcSBvZiBlZGl0aW5nUXVlc3Rpb25zOyBsZXQgaSA9IGluZGV4XCIgY2xhc3M9XCJib3JkZXIgcC0zIG1iLTNcIiBjZGtEcmFnPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMSBtYi0yXCI+XG4gICAgICAgICAgICA8bGFiZWwgZm9yPVwicXVlc3Rpb25UZXh0e3tpfX1cIiBjbGFzcz1cImZvcm0tbGFiZWxcIj5RdWVzdGlvbjwvbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgaWQ9XCJxdWVzdGlvblRleHR7e2l9fVwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgWyhuZ01vZGVsKV09XCJxLnF1ZXN0aW9uXCIgcGxhY2Vob2xkZXI9XCJFbnRlciBxdWVzdGlvblwiIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kIGFsaWduLWl0ZW1zLXN0YXJ0IG10LTRcIj5cbiAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtYmFycyBpbi1wYWdlLWJhcnMtaWNvbiBjdXJzb3ItbW92ZVwiIGNka0RyYWdIYW5kbGU+PC9pPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8IS0tIE9wdGlvbnMgU2VjdGlvbiAtLT5cbiAgICAgICAgPGRpdiBjZGtEcm9wTGlzdCAoY2RrRHJvcExpc3REcm9wcGVkKT1cImRyb3BRdWVzdGlvbk9wdGlvbnMoaSwgJGV2ZW50KVwiPlxuICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IG9wdCBvZiBxLm9wdGlvbnM7IGxldCBqID0gaW5kZXhcIiBjbGFzcz1cInJvdyBib3JkZXIgcC0zIG1iLTIgYWxpZ24taXRlbXMtY2VudGVyXCIgY2RrRHJhZz5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNyBtYi0yXCI+XG4gICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJxdWVzdGlvbk9wdGlvbnt7aX19e3tqfX1cIiBjbGFzcz1cImZvcm0tbGFiZWxcIj5PcHRpb248L2xhYmVsPlxuICAgICAgICAgICAgICA8aW5wdXQgaWQ9XCJxdWVzdGlvbk9wdGlvbnt7aX19e3tqfX1cIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIFsobmdNb2RlbCldPVwib3B0Lm9wdGlvblwiIHBsYWNlaG9sZGVyPVwiRW50ZXIgb3B0aW9uXCIgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0yIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXIgbXQtNFwiPlxuICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXRyYXNoIGluLXBhZ2UtdHJhc2gtaWNvbiB0ZXh0LWRhbmdlciBjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJyZW1vdmVRdWVzdGlvbk9wdGlvbihpLCBqKVwiIChrZXlkb3duLmVudGVyKT1cInJlbW92ZVF1ZXN0aW9uT3B0aW9uKGksIGopXCIgKGtleWRvd24uZW50ZXIpPVwicmVtb3ZlUXVlc3Rpb25PcHRpb24oaSwgailcIj48L2k+XG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtYmFycyBpbi1wYWdlLWJhcnMtaWNvbiBjdXJzb3ItbW92ZVwiIGNka0RyYWdIYW5kbGU+PC9pPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLW91dGxpbmUtcHJpbWFyeSBidG4tc20gbXQtMlwiIChjbGljayk9XCJhZGRRdWVzdGlvbk9wdGlvbihpKVwiPisgQWRkIE9wdGlvbjwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IG10LTNcIiAoY2xpY2spPVwiYWRkTmV3UXVlc3Rpb24oKVwiPisgQWRkIFF1ZXN0aW9uPC9idXR0b24+XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9XCJtb2RhbC1mb290ZXJcIj5cbiAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1zZWNvbmRhcnlcIiAoY2xpY2spPVwibW9kYWwuZGlzbWlzcygpXCI+Q2FuY2VsPC9idXR0b24+XG4gICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiIChjbGljayk9XCJzYXZlUXVlc3Rpb25zKG1vZGFsKVwiPlNhdmU8L2J1dHRvbj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG5cblxuIl19
|
|
511
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb3VyY2UtY29udGFjdC11cy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3Jlc291cmNlLWNvbnRhY3QtdXMvc3JjL2xpYi9yZXNvdXJjZS1jb250YWN0LXVzL3Jlc291cmNlLWNvbnRhY3QtdXMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9yZXNvdXJjZS1jb250YWN0LXVzL3NyYy9saWIvcmVzb3VyY2UtY29udGFjdC11cy9yZXNvdXJjZS1jb250YWN0LXVzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN6RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUVILHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULFVBQVUsRUFDVixNQUFNLEVBQ04sUUFBUSxFQUNSLEtBQUssRUFLTCxXQUFXLEVBQ1gsU0FBUyxFQUNaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxrQkFBa0IsRUFBb0IsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbEYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRXpELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRTFGLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDeEQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1B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STtzQkFBWixLQUFLO2dCQUdHLFlBQVk7c0JBQXBCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBtb3ZlSXRlbUluQXJyYXkgfSBmcm9tICdAYW5ndWxhci9jZGsvZHJhZy1kcm9wJztcbmltcG9ydCB7IERPQ1VNRU5UIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgRWxlbWVudFJlZixcbiAgICBJbmplY3QsXG4gICAgSW5qZWN0b3IsXG4gICAgSW5wdXQsXG4gICAgT25DaGFuZ2VzLFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgU2ltcGxlQ2hhbmdlcyxcbiAgICBUZW1wbGF0ZVJlZixcbiAgICBWaWV3Q2hpbGRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBVbnR5cGVkRm9ybUJ1aWxkZXIsIFVudHlwZWRGb3JtR3JvdXAsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcblxuaW1wb3J0IHsgQWRtaW5TZXJ2aWNlIH0gZnJvbSAnQHBvc2l3aXNlL2FkbWluLW1vZHVsZS11dGlscyc7XG5pbXBvcnQgeyBBcHBCYXNlQ29tcG9uZW50IH0gZnJvbSAnQHBvc2l3aXNlL2FwcC1iYXNlLWNvbXBvbmVudCc7XG5pbXBvcnQgeyBBYlRlc3RTZXJ2aWNlLCBBdXRoU2VydmljZSwgVmFsaWRhdGlvblNlcnZpY2UgfSBmcm9tICdAcG9zaXdpc2UvY29tbW9uLXNlcnZpY2VzJztcbmltcG9ydCB7IFVzZXIgfSBmcm9tICdAcG9zaXdpc2UvY29tbW9uLXV0aWxpdGllcyc7XG5pbXBvcnQgeyBIZWxwZXJTZXJ2aWNlIH0gZnJvbSAnQHBvc2l3aXNlL2hlbHBlci1zZXJ2aWNlJztcbmltcG9ydCB7IENybVNlcnZpY2UgfSBmcm9tICdAcG9zaXdpc2Uvc21hcnQtY3JtLXNoYXJlZCc7XG5pbXBvcnQgeyBDdXN0b21VcGxvYWRlckNvbXBvbmVudCB9IGZyb20gJ0Bwb3Npd2lzZS91dGlscyc7XG5cbmltcG9ydCB7IFN0YXR1c0NvZGVzIH0gZnJvbSAnaHR0cC1zdGF0dXMtY29kZXMnO1xuaW1wb3J0IFN3YWwgZnJvbSAnc3dlZXRhbGVydDInO1xuXG5pbXBvcnQgeyBOZ2JNb2RhbCB9IGZyb20gJ0BuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwJztcblxuaW1wb3J0IHsgUmVzb3VyY2VNb2RhbENvbnRleHQgfSBmcm9tICcuLi9zaGFyZWQvcmVzb3VyY2UtbW9kYWwuaW50ZXJmYWNlJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdwdy10cmlhbC00LWNvbnRhY3QtdXMnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9yZXNvdXJjZS1jb250YWN0LXVzLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9yZXNvdXJjZS1jb250YWN0LXVzLmNvbXBvbmVudC5zY3NzJ10sXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgVHJpYWw0Q29udGFjdFVzQ29tcG9uZW50XG4gICAgZXh0ZW5kcyBBcHBCYXNlQ29tcG9uZW50XG4gICAgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95XG57XG4gICAgQFZpZXdDaGlsZCgnZm9vdGVyU2VjdGlvbicsIHsgc3RhdGljOiB0cnVlIH0pIGZvb3RlclNlY3Rpb24hOiBFbGVtZW50UmVmO1xuICAgIEBWaWV3Q2hpbGQoJ2Jvb2tNZWV0aW5nJywgeyBzdGF0aWM6IHRydWUgfSkgY29udGVudDogVGVtcGxhdGVSZWY8UmVzb3VyY2VNb2RhbENvbnRleHQ+O1xuICAgIEBWaWV3Q2hpbGQoJ2VkaXRGb290ZXJMaW5rc01vZGFsJykgZWRpdEZvb3RlckxpbmtzTW9kYWw6IFRlbXBsYXRlUmVmPEN1c3RvbVVwbG9hZGVyQ29tcG9uZW50PjtcbiAgICBAVmlld0NoaWxkKCdsb2dvTW9kYWwnKSBsb2dvTW9kYWw6IFRlbXBsYXRlUmVmPEN1c3RvbVVwbG9hZGVyQ29tcG9uZW50PjtcbiAgICBAVmlld0NoaWxkKCdsb2dvVXBsb2FkZXInKSBsb2dvVXBsb2FkZXI6IEN1c3RvbVVwbG9hZGVyQ29tcG9uZW50O1xuICAgIEBWaWV3Q2hpbGQoJ2h1YnNwb3RFZGl0TW9kYWwnKSBodWJzcG90RWRpdE1vZGFsOiBUZW1wbGF0ZVJlZjxSZXNvdXJjZU1vZGFsQ29udGV4dD47XG4gICAgQFZpZXdDaGlsZCgnc29jaWFsRWRpdE1vZGFsJykgc29jaWFsRWRpdE1vZGFsOiBUZW1wbGF0ZVJlZjxDdXN0b21VcGxvYWRlckNvbXBvbmVudD47XG4gICAgQFZpZXdDaGlsZCgncXVlc3Rpb25zRWRpdE1vZGFsJykgcXVlc3Rpb25zRWRpdE1vZGFsOiBUZW1wbGF0ZVJlZjxDdXN0b21VcGxvYWRlckNvbXBvbmVudD47XG5cbiAgICBlZGl0aW5nUXVlc3Rpb25zID0gW107XG4gICAgaXNIdWJzcG90UmVhZHk6IGJvb2xlYW47XG5cbiAgICBpc0Zvb3RlclZpc2libGUgPSBmYWxzZTtcbiAgICBwcml2YXRlIG9ic2VydmVyPzogSW50ZXJzZWN0aW9uT2JzZXJ2ZXI7XG5cbiAgICBvcGVuUXVlc3Rpb25zRWRpdE1vZGFsKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmVkaXRpbmdRdWVzdGlvbnMgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuZWRpdGluZ1F1ZXN0aW9ucyA/PyBbXSkpO1xuICAgICAgICB0aGlzLm1vZGFsU2VydmljZS5vcGVuKHRoaXMucXVlc3Rpb25zRWRpdE1vZGFsLCB7IGNlbnRlcmVkOiB0cnVlLCBzaXplOiAnbGcnIH0pO1xuICAgIH1cblxuICAgIGVkaXRpbmdZb3V0dWJlVXJsOiBzdHJpbmc7XG4gICAgZWRpdGluZ0xpbmtlZEluVXJsOiBzdHJpbmc7XG4gICAgZWRpdGluZ0NvbXBhbnlOYW1lOiBzdHJpbmc7XG5cbiAgICBmb3JtOiBVbnR5cGVkRm9ybUdyb3VwO1xuXG4gICAgcmVjYXB0Y2hhID0gbnVsbDtcblxuICAgIHByZXZpZXdEYXRhO1xuXG4gICAgQElucHV0KCkgc3Vic2NyaXB0aW9uSWQgPSB0aGlzLmFwcENvbmZpZy5jcm0uc3Vic2NyaXB0aW9uX2lkO1xuICAgIEBJbnB1dCgpIHNvdXJjZUlkID0gdGhpcy5hcHBDb25maWcuY3JtLnNvdXJjZV9pZDtcbiAgICBASW5wdXQoKSBtYXN0ZXJTdWJzY3JpcHRpb25JZCA9IHRoaXMuYXBwQ29uZmlnLm1hc3Rlcl9zdWJzY3JpcHRpb24uc3Vic2NyaXB0aW9uX2lkO1xuICAgIEBJbnB1dCgpIGV4cGVyaW1lbnROYW1lO1xuICAgIEBJbnB1dCgpIG1pY3Jvc2VydmljZU5hbWU7XG4gICAgQElucHV0KCkgc2hhcmROYW1lO1xuICAgIEBJbnB1dCgpIHVzZXI6IFVzZXI7XG5cbiAgICBjYW5FZGl0UmVzb3VyY2VzVmFsdWUgPSBmYWxzZTtcbiAgICBASW5wdXQoKSB1c2VyTG9nZ2VkSW46IGJvb2xlYW47XG5cbiAgICBpZDtcblxuICAgIGxvZ28gPSB0aGlzLmFwcENvbmZpZz8uY29tcGFueT8ubG9nb3M/Lm1haW5fY29udHJhc3Q/LnVybDtcbiAgICB0cmlhbEJnSW1hZ2UyID0gdGhpcy5hcHBDb25maWc/LnNpZ251cF9jb25maWcudHJpYWw/LmltYWdlX2JnMj8udXJsO1xuICAgIHRvc0lkID0gdGhpcy5hcHBDb25maWc/Lm1haW5fdG9zX2lkO1xuICAgIGRlc2NyaXB0aW9uID0gdGhpcy5hcHBDb25maWcuY29tcGFueS5kZXNjcmlwdGlvbjtcbiAgICBlbWFpbCA9IHRoaXMuYXBwQ29uZmlnLmNvbXBhbnkuZW1haWw7XG4gICAgY29tcGFueU5hbWUgPSB0aGlzLmFwcENvbmZpZy5jb21wYW55Lm5hbWU7XG4gICAgc3RyZWV0ID0gdGhpcy5hcHBDb25maWcuY29tcGFueS5zdHJlZXQ7XG4gICAgcXVlc3Rpb25zID0gdGhpcy5hcHBDb25maWc/LnBhZ2VzX2NvbmZpZz8uY29udGFjdF91cz8ucXVlc3Rpb25zO1xuICAgIGh1YnNwb3QgPSB0aGlzLmFwcENvbmZpZz8ucGFnZXNfY29uZmlnPy5jb250YWN0X3VzPy5odWJzcG90O1xuICAgIGZvb3RlckxpbmtzID0gdGhpcy5hcHBDb25maWc/LnBhZ2VzX2NvbmZpZz8uZm9vdGVyX2xpbmtzPy5pdGVtcztcblxuICAgIGZvb3RlckxpbmtzRGF0YSA9IHRoaXMuYXBwQ29uZmlnPy5wYWdlc19jb25maWc/LmZvb3Rlcl9saW5rcztcblxuICAgIHlvdXR1YmVVcmwgPSB0aGlzLmFwcENvbmZpZy5zb2NpYWw/LnlvdXR1YmVfdXJsO1xuICAgIGxpbmtlZEluVXJsID0gdGhpcy5hcHBDb25maWcuc29jaWFsPy5saW5rZWRpbl91cmw7XG4gICAgZG9tYWluSWQgPSB0aGlzLmFwcENvbmZpZy5kb21haW5faWQ7XG5cbiAgICBlZGl0aW5nRW1haWwgPSB0aGlzLmVtYWlsO1xuICAgIGlzRWRpdGluZ0VtYWlsID0gZmFsc2U7XG5cbiAgICBlZGl0aW5nSHVic3BvdEh0bWw6IHN0cmluZztcbiAgICBlZGl0aW5nSHVic3BvdElkOiBzdHJpbmc7XG4gICAgY2FwdGNoYUtleVYyOiBzdHJpbmc7XG4gICAgaHVic3BvdEh0bWw7XG5cbiAgICBhYlRlc3RzO1xuXG4gICAgc3VibWl0dGVkID0gZmFsc2U7XG4gICAgaXNDYXB0Y2hhVmVyaWZpZWQgPSBmYWxzZTtcbiAgICBpc0VtYWlsVmFsaWQgPSB0cnVlO1xuICAgIGlzRWRpdGluZ1N0cmVldCA9IGZhbHNlO1xuXG4gICAgcHNhT3B0aW9ucztcblxuICAgIHF1ZXN0aW9uO1xuXG4gICAgZWRpdGluZ0Zvb3RlckxpbmtzID0ge1xuICAgICAgICBpdGVtczogW11cbiAgICB9O1xuICAgIGVkaXRpbmdTdHJlZXQ6IHN0cmluZztcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGZiOiBVbnR5cGVkRm9ybUJ1aWxkZXIsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgYXV0aFNlcnZpY2U6IEF1dGhTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGNybVNlcnZpY2U6IENybVNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgc2FuaXRpemVyOiBEb21TYW5pdGl6ZXIsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgYWRtaW5TZXJ2aWNlOiBBZG1pblNlcnZpY2UsXG4gICAgICAgIGluamVjdG9yOiBJbmplY3RvcixcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBhYlRlc3RTZXJ2aWNlOiBBYlRlc3RTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IG1vZGFsU2VydmljZTogTmdiTW9kYWwsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgQEluamVjdChET0NVTUVOVCkgcHJpdmF0ZSByZWFkb25seSBkb2N1bWVudDogRG9jdW1lbnRcbiAgICApIHtcbiAgICAgICAgc3VwZXIoaW5qZWN0b3IpO1xuICAgICAgICB0aGlzLmNhcHRjaGFLZXlWMiA9IHRoaXMuYXBwQ29uZmlnLmludGVncmF0aW9ucy5jYXB0Y2hhX2tleV9WMjtcbiAgICAgICAgdGhpcy5jb250YWN0VXNGb3JtKCk7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4gKHRoaXMuaXNIdWJzcG90UmVhZHkgPSB0cnVlKSwgMjAwMCk7XG4gICAgICAgIGlmICh0aGlzLnVzZXJMb2dnZWRJbikge1xuICAgICAgICAgICAgdGhpcy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbSQoJ3Byb2R1Y3QnKS5zdWJzY3JpYmUocmVzID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBkYXRhID0gcmVzID8gSlNPTi5wYXJzZShyZXMpIDogbnVsbDtcbiAgICAgICAgICAgICAgICB0aGlzLmlkID0gZGF0YT8uc3Vic2NyaXB0aW9uSWQ7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnByZXZpZXdEYXRhID0ge1xuICAgICAgICAgICAgdXJsOiB0aGlzLmxvZ28sXG4gICAgICAgICAgICBuYW1lOiAnbG9nb19tYWluX2NvbnRyYXN0LnBuZydcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5lZGl0aW5nU3RyZWV0ID0gdGhpcy5zdHJlZXQ7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXMuYXBwQ29uZmlnLnBhZ2VzX2NvbmZpZz8uYWJfdGVzdHMpKSB7XG4gICAgICAgICAgICB0aGlzLmFiVGVzdHMgPSB0aGlzLmFwcENvbmZpZy5wYWdlc19jb25maWcuYWJfdGVzdHMuZmluZChcbiAgICAgICAgICAgICAgICB0ZXN0ID0+IHRlc3QuZGVzY3JpcHRpb24gPT09ICdjb250YWN0LXVzJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRoaXMubWljcm9zZXJ2aWNlTmFtZSA9IHRoaXMuYWJUZXN0cz8ubWljcm9zZXJ2aWNlX25hbWU7XG4gICAgICAgICAgICB0aGlzLmV4cGVyaW1lbnROYW1lID0gdGhpcy5hYlRlc3RzPy5leHBlcmltZW50X25hbWU7XG4gICAgICAgICAgICB0aGlzLnNoYXJkTmFtZSA9IHRoaXMuYWJUZXN0cz8uZGJfc2hhcmQ7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBmb290ZXJJdGVtID0gdGhpcy5nZXRGb290ZXJIdWJzcG90Rm9ybSgpO1xuICAgICAgICBpZiAoZm9vdGVySXRlbT8uZGl2KSB7XG4gICAgICAgICAgICAvLyBOT1NPTkFSOiBUcnVzdGVkIEhUTUwgY29udGVudCBpcyBoYW5kbGVkIHNhZmVseSBoZXJlXG4gICAgICAgICAgICB0aGlzLmh1YnNwb3RIdG1sID0gdGhpcy5zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdEh0bWwoZm9vdGVySXRlbS5kaXYpOyAvLyBOT1NPTkFSXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5lZGl0aW5nUXVlc3Rpb25zID0gdGhpcy5xdWVzdGlvbnM7XG4gICAgICAgIHRoaXMucXVlc3Rpb24gPSB0aGlzLnF1ZXN0aW9ucz8uWzBdPy5xdWVzdGlvbjtcbiAgICAgICAgdGhpcy5wc2FPcHRpb25zID0gW1xuICAgICAgICAgICAgeyBsYWJlbDogJ1NlbGVjdCBQU0EnLCB2YWx1ZTogJycgfSxcbiAgICAgICAgICAgIC4uLih0aGlzLnF1ZXN0aW9ucz8uWzBdPy5vcHRpb25zID8/IFtdKVxuICAgICAgICAgICAgICAgIC5maWx0ZXIocSA9PiBxLm9wdGlvbj8udHJpbSgpKVxuICAgICAgICAgICAgICAgIC5tYXAocSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICBsYWJlbDogcS5vcHRpb24sXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBxLm9wdGlvblxuICAgICAgICAgICAgICAgIH0pKVxuICAgICAgICBdO1xuICAgIH1cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgICAgIGlmIChjaGFuZ2VzWyd1c2VyJ10gfHwgY2hhbmdlc1sndXNlckxvZ2dlZEluJ10pIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnVzZXJMb2dnZWRJbiAmJiB0aGlzLnVzZXIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUNhbkVkaXRSZXNvdXJjZXNWYWx1ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgb3BlbkxvZ29FZGl0TW9kYWwoKTogdm9pZCB7XG4gICAgICAgIHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4odGhpcy5sb2dvTW9kYWwsIHtcbiAgICAgICAgICAgIGNlbnRlcmVkOiB0cnVlLFxuICAgICAgICAgICAgc2l6ZTogJ21kJ1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBvblNhdmVGaWxlKGV2ZW50KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgICAgIGNvbnN0IGRhdGEgPSB7IHN1YnNjcmlwdGlvbl9pZDogdGhpcy5zdWJzY3JpcHRpb25JZCB9O1xuXG4gICAgICAgIGlmIChldmVudC5maWxlIGluc3RhbmNlb2YgRmlsZSkge1xuICAgICAgICAgICAgZGF0YVtldmVudC5uYW1lXSA9IGV2ZW50LmZpbGU7XG4gICAgICAgIH0gZWxzZSBpZiAoZXZlbnQuZmlsZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgZGF0YVtgcmVtb3ZlXyR7ZXZlbnQubmFtZX1gXSA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBkYXRhKSB7XG4gICAgICAgICAgICBmb3JtRGF0YS5hcHBlbmQoa2V5LCBkYXRhW2tleV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5hZG1pblNlcnZpY2UudXBkYXRlRG9tYWluQ29uZmlnKHRoaXMuZG9tYWluSWQsIGZvcm1EYXRhKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgaWYgKGV2ZW50LmZpbGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ28gPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGV2ZW50LmZpbGUpO1xuICAgICAgICAgICAgICAgIHRoaXMubW9kYWxTZXJ2aWNlLmRpc21pc3NBbGwoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMudG9hc3Quc3VjY2VzcyhldmVudC5maWxlID8gJ0xvZ28gdXBkYXRlZCcgOiAnTG9nbyByZW1vdmVkJyk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHNhdmVRdWVzdGlvbnMobW9kYWwpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgdXBkYXRlRGF0YSA9IHtcbiAgICAgICAgICAgIGNvbnRhY3RfdXM6IHtcbiAgICAgICAgICAgICAgICAuLi50aGlzLmFwcENvbmZpZy5wYWdlc19jb25maWc/LmNvbnRhY3RfdXMsXG4gICAgICAgICAgICAgICAgcXVlc3Rpb25zOiB0aGlzLmVkaXRpbmdRdWVzdGlvbnNcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzdWJzY3JpcHRpb25faWQ6IHRoaXMuaWRcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLmFkbWluU2VydmljZS51cGRhdGVEb21haW5Db25maWcodGhpcy5kb21haW5JZCwgdXBkYXRlRGF0YSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMucXVlc3Rpb25zID0gdGhpcy5lZGl0aW5nUXVlc3Rpb25zO1xuICAgICAgICAgICAgdGhpcy50b2FzdC5zdWNjZXNzKCdRdWVzdGlvbnMgdXBkYXRlZCcpO1xuICAgICAgICAgICAgdGhpcy5xdWVzdGlvbiA9IHRoaXMuZWRpdGluZ1F1ZXN0aW9ucz8uWzBdPy5xdWVzdGlvbjtcbiAgICAgICAgICAgIGlmICh0aGlzLmVkaXRpbmdRdWVzdGlvbnM/LlswXT8ub3B0aW9ucz8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMucHNhT3B0aW9ucyA9IFtcbiAgICAgICAgICAgICAgICAgICAgeyBsYWJlbDogJ1NlbGVjdCBQU0EnLCB2YWx1ZTogJycgfSxcbiAgICAgICAgICAgICAgICAgICAgLi4uKHRoaXMucXVlc3Rpb25zPy5bMF0/Lm9wdGlvbnMgPz8gW10pXG4gICAgICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKHEgPT4gcS5vcHRpb24/LnRyaW0oKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIC5tYXAocSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiBxLm9wdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogcS5vcHRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMucHNhT3B0aW9ucyA9IFtdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBtb2RhbC5jbG9zZSgpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhZGROZXdRdWVzdGlvbigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5lZGl0aW5nUXVlc3Rpb25zLnB1c2goeyBxdWVzdGlvbjogJycsIG9wdGlvbnM6IFtdIH0pO1xuICAgIH1cblxuICAgIGFkZFF1ZXN0aW9uT3B0aW9uKHFJbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZWRpdGluZ1F1ZXN0aW9uc1txSW5kZXhdLm9wdGlvbnMucHVzaCh7IG9wdGlvbjogJycgfSk7XG4gICAgfVxuXG4gICAgcmVtb3ZlUXVlc3Rpb25PcHRpb24ocUluZGV4OiBudW1iZXIsIG9wdEluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5lZGl0aW5nUXVlc3Rpb25zW3FJbmRleF0ub3B0aW9ucy5zcGxpY2Uob3B0SW5kZXgsIDEpO1xuICAgIH1cblxuICAgIGRyb3BRdWVzdGlvbnMoZXZlbnQpOiB2b2lkIHtcbiAgICAgICAgbW92ZUl0ZW1JbkFycmF5KHRoaXMuZWRpdGluZ1F1ZXN0aW9ucywgZXZlbnQucHJldmlvdXNJbmRleCwgZXZlbnQuY3VycmVudEluZGV4KTtcbiAgICB9XG5cbiAgICBkcm9wUXVlc3Rpb25PcHRpb25zKHFJbmRleDogbnVtYmVyLCBldmVudCk6IHZvaWQge1xuICAgICAgICBtb3ZlSXRlbUluQXJyYXkoXG4gICAgICAgICAgICB0aGlzLmVkaXRpbmdRdWVzdGlvbnNbcUluZGV4XS5vcHRpb25zLFxuICAgICAgICAgICAgZXZlbnQucHJldmlvdXNJbmRleCxcbiAgICAgICAgICAgIGV2ZW50LmN1cnJlbnRJbmRleFxuICAgICAgICApO1xuICAgIH1cblxuICAgIG9wZW5Tb2NpYWxFZGl0TW9kYWwoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZWRpdGluZ1lvdXR1YmVVcmwgPSB0aGlzLnlvdXR1YmVVcmw7XG4gICAgICAgIHRoaXMuZWRpdGluZ0xpbmtlZEluVXJsID0gdGhpcy5saW5rZWRJblVybDtcbiAgICAgICAgdGhpcy5lZGl0aW5nQ29tcGFueU5hbWUgPSB0aGlzLmNvbXBhbnlOYW1lO1xuXG4gICAgICAgIHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4odGhpcy5zb2NpYWxFZGl0TW9kYWwsIHsgY2VudGVyZWQ6IHRydWUsIHNpemU6ICdsZycgfSk7XG4gICAgfVxuXG4gICAgc2F2ZVNvY2lhbExpbmtzKG1vZGFsKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHVwZGF0ZURhdGEgPSB7XG4gICAgICAgICAgICB5b3V0dWJlX3VybDogdGhpcy5lZGl0aW5nWW91dHViZVVybCxcbiAgICAgICAgICAgIGxpbmtlZGluX3VybDogdGhpcy5lZGl0aW5nTGlua2VkSW5VcmwsXG4gICAgICAgICAgICBjb21wYW55X25hbWU6IHRoaXMuZWRpdGluZ0NvbXBhbnlOYW1lLFxuICAgICAgICAgICAgc3Vic2NyaXB0aW9uX2lkOiB0aGlzLmlkXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5hZG1pblNlcnZpY2UudXBkYXRlRG9tYWluQ29uZmlnKHRoaXMuZG9tYWluSWQsIHVwZGF0ZURhdGEpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnlvdXR1YmVVcmwgPSB0aGlzLmVkaXRpbmdZb3V0dWJlVXJsO1xuICAgICAgICAgICAgdGhpcy5saW5rZWRJblVybCA9IHRoaXMuZWRpdGluZ0xpbmtlZEluVXJsO1xuICAgICAgICAgICAgdGhpcy5jb21wYW55TmFtZSA9IHRoaXMuZWRpdGluZ0NvbXBhbnlOYW1lO1xuICAgICAgICAgICAgdGhpcy50b2FzdC5zdWNjZXNzKCdTb2NpYWwgbGlua3MgYW5kIGNvbXBhbnkgbmFtZSB1cGRhdGVkJyk7XG4gICAgICAgICAgICBtb2RhbC5jbG9zZSgpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBoYXNWYWxpZE9wdGlvbnMoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnF1ZXN0aW9ucz8uWzBdPy5vcHRpb25zPy5zb21lKG9wdCA9PiBvcHQub3B0aW9uPy50cmltKCkpO1xuICAgIH1cblxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAgICAgdGhpcy53YXRjaElmcmFtZUhlaWdodENoYW5nZSgpO1xuICAgICAgICB0aGlzLm9ic2VydmVyID0gbmV3IEludGVyc2VjdGlvbk9ic2VydmVyKFxuICAgICAgICAgICAgKFtlbnRyeV0pID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZW50cnkuaXNJbnRlcnNlY3RpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc0Zvb3RlclZpc2libGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub2JzZXJ2ZXI/LmRpc2Nvbm5lY3QoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgeyB0aHJlc2hvbGQ6IDAuMSB9XG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5vYnNlcnZlci5vYnNlcnZlKHRoaXMuZm9vdGVyU2VjdGlvbi5uYXRpdmVFbGVtZW50KTtcbiAgICB9XG5cbiAgICBvcGVuRWRpdEZvb3RlckxpbmtzTW9kYWwoY29udGVudCk6IHZvaWQge1xuICAgICAgICB0aGlzLmZvb3RlckxpbmtzRGF0YSA9IHRoaXMuZm9vdGVyTGlua3NEYXRhID8/IHt9O1xuICAgICAgICB0aGlzLmZvb3RlckxpbmtzRGF0YS5pdGVtcyA9IHRoaXMuZm9vdGVyTGlua3NEYXRhLml0ZW1zID8/IFtdO1xuICAgICAgICB0aGlzLmVkaXRpbmdGb290ZXJMaW5rcyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5mb290ZXJMaW5rc0RhdGEpKTtcblxuICAgICAgICB0aGlzLm1vZGFsU2VydmljZS5vcGVuKGNvbnRlbnQsIHtcbiAgICAgICAgICAgIHNpemU6ICdsZycsXG4gICAgICAgICAgICBjZW50ZXJlZDogdHJ1ZSxcbiAgICAgICAgICAgIHdpbmRvd0NsYXNzOiAnbW9kYWwtaG9sZGVyJ1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHdhdGNoSWZyYW1lSGVpZ2h0Q2hhbmdlKCkge1xuICAgICAgICBjb25zdCBpZnJhbWUgPSB0aGlzLmRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5odWJzcG90LWNvbnRhaW5lcicpO1xuICAgICAgICBpZiAoIWlmcmFtZSkgcmV0dXJuO1xuICAgICAgICBjb25zdCBpbnRlcnZhbCA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG5ld0hlaWdodCA9IGlmcmFtZVsnb2Zmc2V0SGVpZ2h0J107XG4gICAgICAgICAgICBpZiAobmV3SGVpZ2h0ID09PSAyNTApIHtcbiAgICAgICAgICAgICAgICBjbGVhckludGVydmFsKGludGVydmFsKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNhbGxBYlRlc3RGaW5pc2goKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgMzAwKTtcbiAgICB9XG5cbiAgICAvLyBOZXcgbWV0aG9kIHRvIGhhbmRsZSBIdWJzcG90IGNvbnRlbnQgbG9hZGluZ1xuICAgIG9uSHVic3BvdExvYWQoZXZlbnQ6IEV2ZW50KSB7XG4gICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IGV2ZW50LnRhcmdldCBhcyBIVE1MRGl2RWxlbWVudDtcbiAgICAgICAgY29udGFpbmVyLmNsYXNzTGlzdC5hZGQoJ2NvbnRlbnQtbG9hZGVkJyk7XG5cbiAgICAgICAgLy8gT3B0aW9uYWw6IFRyaWdnZXIgbGF5b3V0IHJlY2FsY3VsYXRpb25cbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB3aW5kb3cuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoJ3Jlc2l6ZScpKTtcbiAgICAgICAgfSwgMTAwKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNhbGxBYlRlc3RGaW5pc2goKSB7XG4gICAgICAgIGlmICh0aGlzLmV4cGVyaW1lbnROYW1lICYmIHRoaXMubWljcm9zZXJ2aWNlTmFtZSkge1xuICAgICAgICAgICAgdGhpcy5hYlRlc3RTZXJ2aWNlXG4gICAgICAgICAgICAgICAgLmZpbmlzaEFCRXhwZXJpbWVudCh0aGlzLmV4cGVyaW1lbnROYW1lLCB0aGlzLm1pY3Jvc2VydmljZU5hbWUpXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4odGhpcy5jb250ZW50LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjZW50ZXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvd0NsYXNzOiAnbW9kYWwtaG9sZGVyJ1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbnRhY3RVc0Zvcm0oKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZm9ybSA9IHRoaXMuZmIuZ3JvdXAoe1xuICAgICAgICAgICAgZmlyc3RfbmFtZTogWycnLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcbiAgICAgICAgICAgIGxhc3RfbmFtZTogWycnXSxcbiAgICAgICAgICAgIGNvbXBhbnk6IFsnJ10sXG4gICAgICAgICAgICBwc2E6IFsnJ10sXG4gICAgICAgICAgICBlbnF1aXJ5OiBbJycsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxuICAgICAgICAgICAgZW1haWw6IFsnJywgVmFsaWRhdG9ycy5yZXF1aXJlZF1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgb25TdWJtaXQoKSB7XG4gICAgICAgIHRoaXMuc3VibWl0dGVkID0gdHJ1ZTtcbiAgICAgICAgaWYgKHRoaXMuZm9ybS52YWxpZCkge1xuICAgICAgICAgICAgdGhpcy5pc0NhcHRjaGFWZXJpZmllZCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLnN1Ym1pdHRlZCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaGFuZGxlU3VjY2Vzcyh0b2tlbjogc3RyaW5nKSB7XG4gICAgICAgIGlmICh0b2tlbikge1xuICAgICAgICAgICAgdGhpcy5hdXRoU2VydmljZS52YWxpZGF0ZVJlQ2FwdGNoYSh0b2tlbikuc3Vic2NyaWJlKChpc1N1Y2Nlc3M6IGJvb2xlYW4pID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoaXNTdWNjZXNzICYmIHRoaXMuZm9ybS52YWxpZCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBkYXRhID0geyAuLi50aGlzLmZvcm0uZ2V0UmF3VmFsdWUoKSB9O1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBmb3JtYXR0ZWRFbnF1aXJ5ID0gYCR7ZGF0YS5lbnF1aXJ5fTsgUXVlc3Rpb246ICR7dGhpcy5xdWVzdGlvbn07IEFuc3dlcjogJHtkYXRhLnBzYX1gO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBwb3N0RGF0YSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0X25hbWU6IGAke2RhdGEuZmlyc3RfbmFtZX1gLFxuICAgICAgICAgICAgICAgICAgICAgICAgbGFzdF9uYW1lOiBgJHtkYXRhLmZpcnN0X25hbWV9YCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBhbnk6IGAke2RhdGEuZmlyc3RfbmFtZX1gLFxuICAgICAgICAgICAgICAgICAgICAgICAgZW1haWw6IGAke2RhdGEuZW1haWx9YCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGVucXVpcnk6IHRoaXMucHNhT3B0aW9ucy5sZW5ndGggPyBmb3JtYXR0ZWRFbnF1aXJ5IDogYCR7ZGF0YS5lbnF1aXJ5fWAsXG4gICAgICAgICAgICAgICAgICAgICAgICBwc2E6IGRhdGEucHNhLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3Vic2NyaXB0aW9uX2lkOiB0aGlzLnN1YnNjcmlwdGlvbklkLFxuICAgICAgICAgICAgICAgICAgICAgICAgY3JtX3NvdXJjZV9pZDogdGhpcy5zb3VyY2VJZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hc3Rlcl9zdWJzY3JpcHRpb25faWQ6IHRoaXMubWFzdGVyU3Vic2NyaXB0aW9uSWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBub3RpZnlfdXNlcjogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBpc19tYW51YWw6IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jcm1TZXJ2aWNlLnBvc3RDcm1MZWFkKHRoaXMuc3Vic2NyaXB0aW9uSWQsIHBvc3REYXRhKS5zdWJzY3JpYmUocmVzcCA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyAgZXhhbXBsZSBvZiBzbmlwcGV0IHRvIGNsb3NlIHRoZSBleHBlcmltZW50IGFuZCB0cmFjayBpbiBHQVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3A/LnN0YXR1cyA9PT0gU3RhdHVzQ29kZXMuT0spIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdvb2dsZUFuYWx5dGljc1NlcnZpY2Uuc2VuZEV2ZW50KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbmV3LWxlYWQtcmVnaXN0cmF0aW9uJywgLy8gY2F0ZWdvcnksIGVnOiB2aWRlb3NcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N1YnNjcmliZS1zdWNjZXNzJywgLy8gYWN0aW9uLCBlZzogUGxheVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY29taW5nLXNvb24tdGhyZWUnLCAvLyBsYWJlbCwgZWc6IENoYXBweVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIC8vIHZhbHVlLCBlZzogMTBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmV4cGVyaW1lbnROYW1lICYmIHRoaXMubWljcm9zZXJ2aWNlTmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFiVGVzdFNlcnZpY2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5maW5pc2hBQkV4cGVyaW1lbnQodGhpcy5leHBlcmltZW50TmFtZSwgdGhpcy5taWNyb3NlcnZpY2VOYW1lKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tb2RhbFNlcnZpY2Uub3Blbih0aGlzLmNvbnRlbnQsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VudGVyZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvd0NsYXNzOiAnbW9kYWwtaG9sZGVyJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3dhbC5maXJlKHJlc3AubWVzc2FnZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtLnJlc2V0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlzQ2FwdGNoYVZlcmlmaWVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc2Nyb2xsVG9Ub3AoKSB7XG4gICAgICAgIHRoaXMuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcCA9IDA7XG4gICAgfVxuXG4gICAgZ2V0Rm9vdGVySHVic3BvdEZvcm0oKSB7XG4gICAgICAgIGlmICghdGhpcy5odWJzcG90Py5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmh1YnNwb3QuZmluZChpdGVtID0+IGl0ZW0ucG9zaXRpb24gPT09ICdmb290ZXInKSA/PyBudWxsO1xuICAgIH1cblxuICAgIG5hdmlnYXRlVG9Cb29rTWVldGluZygpIHtcbiAgICAgICAgY29uc3QgYm9va0RlbW9VcmwgPVxuICAgICAgICAgICAgdGhpcy5hcHBDb25maWc/LnNpZ251cF9jb25maWc/LnRyaWFsPy5ib29rX2RlbW9fdXJsID8/XG4gICAgICAgICAgICAnaHR0cHM6Ly9jYWxlbmRseS5jb20vY2xvdWRvbGl2ZSc7XG4gICAgICAgIHdpbmRvdy5vcGVuKGJvb2tEZW1vVXJsLCAnX2JsYW5rJywgJ25vcmVmZXJyZXIgbm9vcGVuZXInKTtcbiAgICB9XG5cbiAgICB2YWxpZGF0ZUVtYWlsKCkge1xuICAgICAgICBjb25zdCBlbWFpbCA9IHRoaXMuZm9ybS5nZXQoJ2VtYWlsJykudmFsdWU7XG4gICAgICAgIGlmIChlbWFpbCkge1xuICAgICAgICAgICAgdGhpcy5pc0VtYWlsVmFsaWQgPSBWYWxpZGF0aW9uU2VydmljZS5lbWFpbChlbWFpbCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmlzRW1haWxWYWxpZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhZGRGb290ZXJMaW5rKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmVkaXRpbmdGb290ZXJMaW5rcy5pdGVtcy5wdXNoKHtcbiAgICAgICAgICAgIHRpdGxlOiAnJyxcbiAgICAgICAgICAgIHBhdGg6ICcnLFxuICAgICAgICAgICAgc3VidGl0bGVzOiBbXVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICByZW1vdmVGb290ZXJMaW5rKGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5lZGl0aW5nRm9vdGVyTGlua3MuaXRlbXMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9XG5cbiAgICBhZGRTdWJ0aXRsZShmb290ZXJJbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZWRpdGluZ0Zvb3RlckxpbmtzLml0ZW1zW2Zvb3RlckluZGV4XS5zdWJ0aXRsZXMucHVzaCh7XG4gICAgICAgICAgICB0aXRsZTogJycsXG4gICAgICAgICAgICBwYXRoOiAnJ1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICByZW1vdmVTdWJ0aXRsZShmb290ZXJJbmRleDogbnVtYmVyLCBzdWJ0aXRsZUluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5lZGl0aW5nRm9vdGVyTGlua3MuaXRlbXNbZm9vdGVySW5kZXhdLnN1YnRpdGxlcy5zcGxpY2Uoc3VidGl0bGVJbmRleCwgMSk7XG4gICAgfVxuXG4gICAgZHJvcEZvb3RlckxpbmtzKGV2ZW50KSB7XG4gICAgICAgIG1vdmVJdGVtSW5BcnJheSh0aGlzLmVkaXRpbmdGb290ZXJMaW5rcy5pdGVtcywgZXZlbnQucHJldmlvdXNJbmRleCwgZXZlbnQuY3VycmVudEluZGV4KTtcbiAgICB9XG5cbiAgICBkcm9wU3VidGl0bGVzKGZvb3RlckluZGV4OiBudW1iZXIsIGV2ZW50KSB7XG4gICAgICAgIG1vdmVJdGVtSW5BcnJheShcbiAgICAgICAgICAgIHRoaXMuZWRpdGluZ0Zvb3RlckxpbmtzLml0ZW1zW2Zvb3RlckluZGV4XS5zdWJ0aXRsZXMsXG4gICAgICAgICAgICBldmVudC5wcmV2aW91c0luZGV4LFxuICAgICAgICAgICAgZXZlbnQuY3VycmVudEluZGV4XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgc2F2ZUZvb3RlckxpbmtzKG1vZGFsKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHVwZGF0ZWRDb25maWcgPSB7XG4gICAgICAgICAgICBmb290ZXJfbGlua3M6IHRoaXMuZWRpdGluZ0Zvb3RlckxpbmtzLFxuICAgICAgICAgICAgc3Vic2NyaXB0aW9uX2lkOiB0aGlzLmlkXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5hZG1pblNlcnZpY2VcbiAgICAgICAgICAgIC51cGRhdGVEb21haW5Db25maWcodGhpcy5hcHBDb25maWc/LmRvbWFpbl9pZCwgdXBkYXRlZENvbmZpZylcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMudG9hc3Quc3VjY2VzcygnRm9vdGVyIGxpbmtzIHVwZGF0ZWQnKTtcbiAgICAgICAgICAgICAgICB0aGlzLmZvb3RlckxpbmtzID0gWy4uLnRoaXMuZWRpdGluZ0Zvb3RlckxpbmtzLml0ZW1zXTtcbiAgICAgICAgICAgICAgICB0aGlzLmZvb3RlckxpbmtzRGF0YSA9IHsgLi4udGhpcy5lZGl0aW5nRm9vdGVyTGlua3MgfTtcbiAgICAgICAgICAgICAgICBtb2RhbC5jbG9zZSgpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgc2F2ZUVtYWlsKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmVtYWlsID0gdGhpcy5lZGl0aW5nRW1haWw7XG5cbiAgICAgICAgdGhpcy5hZG1pblNlcnZpY2VcbiAgICAgICAgICAgIC51cGRhdGVEb21haW5Db25maWcodGhpcy5hcHBDb25maWc/LmRvbWFpbl9pZCwge1xuICAgICAgICAgICAgICAgIGNvbXBhbnlfZW1haWw6IHRoaXMuZWRpdGluZ0VtYWlsLFxuICAgICAgICAgICAgICAgIHN1YnNjcmlwdGlvbl9pZDogdGhpcy5pZFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMudG9hc3Quc3VjY2VzcygnRW1haWwgdXBkYXRlZCcpO1xuICAgICAgICAgICAgICAgIHRoaXMuaXNFZGl0aW5nRW1haWwgPSBmYWxzZTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHNhdmVTdHJlZXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuYWRtaW5TZXJ2aWNlXG4gICAgICAgICAgICAudXBkYXRlRG9tYWluQ29uZmlnKHRoaXMuYXBwQ29uZmlnPy5kb21haW5faWQsIHtcbiAgICAgICAgICAgICAgICBjb21wYW55X2FkZHJlc3M6IHRoaXMuZWRpdGluZ1N0cmVldCxcbiAgICAgICAgICAgICAgICBzdWJzY3JpcHRpb25faWQ6IHRoaXMuaWRcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnRvYXN0LnN1Y2Nlc3MoJ1N0cmVldCB1cGRhdGVkJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5zdHJlZXQgPSB0aGlzLmVkaXRpbmdTdHJlZXQ7XG4gICAgICAgICAgICAgICAgdGhpcy5pc0VkaXRpbmdTdHJlZXQgPSBmYWxzZTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIGNhbmNlbFN0cmVldCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5lZGl0aW5nU3RyZWV0ID0gdGhpcy5zdHJlZXQ7XG4gICAgICAgIHRoaXMuaXNFZGl0aW5nU3RyZWV0ID0gZmFsc2U7XG4gICAgfVxuXG4gICAgb3Blbkh1YnNwb3RFZGl0TW9kYWwoZm9vdGVySXRlbSk6IHZvaWQge1xuICAgICAgICB0aGlzLmVkaXRpbmdIdWJzcG90SHRtbCA9IGZvb3Rlckl0ZW0uZGl2O1xuICAgICAgICB0aGlzLmVkaXRpbmdIdWJzcG90SWQgPSBmb290ZXJJdGVtLmlkO1xuICAgICAgICB0aGlzLm1vZGFsU2VydmljZS5vcGVuKHRoaXMuaHVic3BvdEVkaXRNb2RhbCwgeyBjZW50ZXJlZDogdHJ1ZSwgc2l6ZTogJ2xnJyB9KTtcbiAgICB9XG5cbiAgICBzYXZlSHVic3BvdEh0bWwobW9kYWwpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgdXBkYXRlZENvbmZpZyA9IHtcbiAgICAgICAgICAgIGNvbnRhY3RfdXM6IHtcbiAgICAgICAgICAgICAgICAuLi50aGlzLmFwcENvbmZpZz8ucGFnZXNfY29uZmlnPy5jb250YWN0X3VzLFxuICAgICAgICAgICAgICAgIGh1YnNwb3Q6IFtcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6ICc3NDIzNjM5JyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiAnZm9vdGVyJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpdjogdGhpcy5lZGl0aW5nSHVic3BvdEh0bWxcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzdWJzY3JpcHRpb25faWQ6IHRoaXMuaWRcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLmFkbWluU2VydmljZVxuICAgICAgICAgICAgLnVwZGF0ZURvbWFpbkNvbmZpZyh0aGlzLmFwcENvbmZpZz8uZG9tYWluX2lkLCB1cGRhdGVkQ29uZmlnKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gTk9TT05BUjogVHJ1c3RlZCBIVE1MIGNvbnRlbnQgaXMgaGFuZGxlZCBzYWZlbHkgaGVyZVxuICAgICAgICAgICAgICAgIHRoaXMuaHVic3BvdEh0bWwgPSB0aGlzLnNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0SHRtbCh0aGlzLmVkaXRpbmdIdWJzcG90SHRtbCk7IC8vIE5PU09OQVJcbiAgICAgICAgICAgICAgICB0aGlzLnRvYXN0LnN1Y2Nlc3MoJ0h1YnNwb3QgRW1iZWQgdXBkYXRlZCcpO1xuICAgICAgICAgICAgICAgIG1vZGFsLmNsb3NlKCk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG4gICAgcHJpdmF0ZSB1cGRhdGVDYW5FZGl0UmVzb3VyY2VzVmFsdWUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY2FuRWRpdFJlc291cmNlc1ZhbHVlID0gSGVscGVyU2VydmljZS5jYW5FZGl0UmVzb3VyY2VzKFxuICAgICAgICAgICAgdGhpcy51c2VyLFxuICAgICAgICAgICAgdGhpcy51c2VyTG9nZ2VkSW4sXG4gICAgICAgICAgICB0aGlzLnBlcm1pc3Npb25TZXJ2aWNlXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgY2FuRWRpdFJlc291cmNlcygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FuRWRpdFJlc291cmNlc1ZhbHVlO1xuICAgIH1cblxuICAgIG92ZXJyaWRlIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLm9ic2VydmVyPy5kaXNjb25uZWN0KCk7XG4gICAgfVxufVxuIiwiPHNlY3Rpb24gICNmb290ZXJTZWN0aW9uIGNsYXNzPVwiYmctYmxhY2sgdGV4dC13aGl0ZSBweS01IGZvb3Rlci1zZWN0aW9uXCI+XG4gIDxkaXYgY2xhc3M9XCJjb250YWluZXJcIiAqbmdJZj1cImlzRm9vdGVyVmlzaWJsZVwiPlxuICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cblxuICAgICAgPCEtLSBMRUZUIENPTFVNTiAtLT5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNiBtYi00IGQtZmxleCBmbGV4LWNvbHVtbiBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlblwiIFtuZ0NsYXNzXT1cInsgJ3NpdGUtY29sdW1uJzogZ2V0Rm9vdGVySHVic3BvdEZvcm0oKSB9XCI+XG4gICAgICAgIDxkaXY+XG4gICAgICAgICAgPGgzIGNsYXNzPVwibWItNCBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1lLTIgdGV4dC13aGl0ZVwiPlNpdGUgTWFwOjwvc3Bhbj5cbiAgICAgICAgICAgIDxpICpuZ0lmPVwiY2FuRWRpdFJlc291cmNlc1ZhbHVlXCIgY2xhc3M9XCJmYSBmYS1lZGl0IGluLXBhZ2UtZWRpdC1pY29uIGN1cnNvci1wb2ludGVyIHRleHQtd2hpdGUgbXMtM1wiIChjbGljayk9XCJvcGVuRWRpdEZvb3RlckxpbmtzTW9kYWwoZWRpdEZvb3RlckxpbmtzTW9kYWwpXCIgKGtleWRvd24uZW50ZXIpPVwib3BlbkVkaXRGb290ZXJMaW5rc01vZGFsKGVkaXRGb290ZXJMaW5rc01vZGFsKVwiIChrZXlkb3duLnNwYWNlKT1cIm9wZW5FZGl0Rm9vdGVyTGlua3NNb2RhbChlZGl0Rm9vdGVyTGlua3NNb2RhbClcIiBuZ2JUb29sdGlwPVwiRWRpdCBGb290ZXIgTGlua3NcIj48L2k+XG4gICAgICAgICAgPC9oMz5cbiAgICAgICAgICA8dWwgY2xhc3M9XCJtdC00XCI+XG4gICAgICAgICAgICA8bGkgcm91dGVyTGluaz1cIi9cIlxuICAgICAgICAgICAgY2xhc3M9XCJjdXJzb3ItcG9pbnRlciB1c2VyLWluZm8tbGFiZWwgbGluay1sYWJlbFwiPiBIb21lIDwvbGk+XG4gICAgICAgICAgICA8bGkgKm5nRm9yPVwibGV0IGxpbmsgb2YgZm9vdGVyTGlua3NcIiBbcm91dGVyTGlua109XCJsaW5rPy5wYXRoXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJjdXJzb3ItcG9pbnRlciB1c2VyLWluZm8tbGFiZWwgbGluay1sYWJlbCBtdC00XCI+PHNwYW4gICpuZ0lmPVwibGluaz8udGl0bGVcIj57e2xpbms/LnRpdGxlfX08L3NwYW4+IDwvbGk+XG4gICAgICAgICAgICA8bGkgcm91dGVyTGluaz1cIi9sb2dpblwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXIgdXNlci1pbmZvLWxhYmVsIG10LTQgbGluay1sYWJlbFwiPiBMb2cgaW4gPC9saT5cbiAgICAgICAgICAgIDxsaSBbcm91dGVyTGlua109XCInL3ByaXZhY3ktYW5kLXRvcy8nICsgdG9zSWRcIlxuICAgICAgICAgICAgICBjbGFzcz1cImN1cnNvci1wb2ludGVyIHVzZXItaW5mby1sYWJlbCBtdC00IGxpbmstbGFiZWxcIj4gUHJpdmFjeSBzdGF0ZW1lbnQgPC9saT5cbiAgICAgICAgICA8L3VsPlxuICAgICAgICAgIDxwIGNsYXNzPVwiYWRkcmVzcy1zZWN0aW9uIGVtYWlsLXNlY3Rpb24gbWItNFwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ1c2VyLWluZm8tbGFiZWxcIj5FbWFpbDogPC9zcGFuPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpc0VkaXRpbmdFbWFpbDsgZWxzZSBlZGl0RW1haWxcIj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ1c2VyLWluZm9cIj57eyBlbWFpbCB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPGkgKm5nSWY9XCJjYW5FZGl0UmVzb3VyY2VzVmFsdWVcIiBjbGFzcz1cImZhIGZhLWVkaXQgaW4tcGFnZS1lZGl0LWljb24gdGV4dC13aGl0ZSBjdXJzb3ItcG9pbnRlciBtcy0zXCIgKGNsaWNrKT1cImlzRWRpdGluZ0VtYWlsID0gdHJ1ZVwiIChrZXlkb3duLmVudGVyKT1cImlzRWRpdGluZ0VtYWlsID0gdHJ1ZVwiIChrZXlkb3duLnNwYWNlKT1cImlzRWRpdGluZ0VtYWlsID0gdHJ1ZVwiPjwvaT5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI2VkaXRFbWFpbD5cbiAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZC1pbmxpbmUgdy1hdXRvXCJcbiAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImVkaXRpbmdFbWFpbFwiXG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1wcmltYXJ5IG1zLTJcIiAoY2xpY2spPVwic2F2ZUVtYWlsKClcIj5TYXZlPC9idXR0b24+XG4gICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1zZWNvbmRhcnkgbXMtMlwiIChjbGljayk9XCJpc0VkaXRpbmdFbWFpbCA9IGZhbHNlXCI+Q2FuY2VsPC9idXR0b24+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJlbWFpbC1zZWN0aW9uIG10LTMgYWRkcmVzcy10ZXh0XCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInVzZXItaW5mby1sYWJlbFwiPlxuICAgICAgICAgICAgICBBZGRyZXNzOlxuICAgICAgICAgICAgICA8aSAqbmdJZj1cImNhbkVkaXRSZXNvdXJjZXNWYWx1ZVwiXG4gICAgICAgICAgICAgICAgIGNsYXNzPVwiZmEgZmEtZWRpdCBpbi1wYWdlLWVkaXQtaWNvbiBjdXJzb3ItcG9pbnRlciBtcy0yIHRleHQtd2hpdGVcIlxuICAgICAgICAgICAgICAgICB0aXRsZT1cIkVkaXQgQWRkcmVzc1wiXG4gICAgICAgICAgICAgICAgIChjbGljayk9XCJpc0VkaXRpbmdTdHJlZXQgPSB0cnVlXCJcbiAgICAgICAgICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwiaXNFZGl0aW5nU3RyZWV0ID0gdHJ1ZVwiXG4gICAgICAgICAgICAgICAgIChrZXlkb3duLnNwYWNlKT1cImlzRWRpdGluZ1N0cmVldCA9IHRydWVcIj48L2k+XG4gICAgICAgICAgICA8L3NwYW4+PGJyLz5cblxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpc0VkaXRpbmdTdHJlZXQ7IGVsc2UgZWRpdFN0cmVldEJsb2NrXCI+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYWRkcmVzcy10ZXh0IHVzZXItaW5mb1wiPnt7IHN0cmVldCB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI2VkaXRTdHJlZXRCbG9jaz5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgbXQtM1wiPlxuICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImZvcm0tY29udHJvbCBmb3JtLWNvbnRyb2wtc21cIiBbKG5nTW9kZWwpXT1cImVkaXRpbmdTdHJlZXRcIiAvPlxuICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1wcmltYXJ5IG1zLTJcIiAoY2xpY2spPVwic2F2ZVN0cmVldCgpXCI+U2F2ZTwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1zZWNvbmRhcnkgbXMtMlwiIChjbGljayk9XCJjYW5jZWxTdHJlZXQoKVwiPkNhbmNlbDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXhcIj5cbiAgICAgICAgICA8aW1nIFtzcmNdPVwibG9nb1wiXG4gICAgICAgICAgICAgICBhbHQ9XCJDb21wYW55IGxvZ29cIlxuICAgICAgICAgICAgICAgY2xhc3M9XCJpbWctZmx1aWQgbXQtNCBsb2dvLWltYWdlIGN1cnNvci1wb2ludGVyXCJcbiAgICAgICAgICAgICAgIHdpZHRoPVwiMTYwXCJcbiAgICAgICAgICAgICAgIGhlaWdodD1cIjM1XCJcbiAgICAgICAgICAgICAgIChjbGljayk9XCJzY3JvbGxUb1RvcCgpXCJcbiAgICAgICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cInNjcm9sbFRvVG9wKClcIlxuICAgICAgICAgICAgICAgKGtleWRvd24uc3BhY2UpPVwic2Nyb2xsVG9Ub3AoKVwiXG4gICAgICAgICAgICAgICB0aXRsZT1cIkNsaWNrIHRvIGdvIHRvIHRvcCBvZiBwYWdlXCIgLz5cbiAgICAgICAgICA8aSAqbmdJZj1cImNhbkVkaXRSZXNvdXJjZXNWYWx1ZVwiXG4gICAgICAgICAgICAgY2xhc3M9XCJmYSBmYS1lZGl0IGluLXBhZ2UtZWRpdC1pY29uIGZhLXNtIG1zLTMgY3Vyc29yLXBvaW50ZXIgdGV4dC13aGl0ZSBhbGlnbi1zZWxmLWNlbnRlciBtdC0zXCJcbiAgICAgICAgICAgICAoY2xpY2spPVwib3BlbkxvZ29FZGl0TW9kYWwoKVwiXG4gICAgICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwib3BlbkxvZ29FZGl0TW9kYWwoKVwiXG4gICAgICAgICAgICAgKGtleWRvd24uc3BhY2UpPVwib3BlbkxvZ29FZGl0TW9kYWwoKVwiXG4gICAgICAgICAgICAgdGl0bGU9XCJFZGl0IExvZ29cIj48L2k+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDwhLS0gUklHSFQgQ09MVU1OIC0tPlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCIgKm5nSWY9XCJpc0Zvb3RlclZpc2libGVcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImdldEZvb3Rlckh1YnNwb3RGb3JtKCkgYXMgZm9vdGVySXRlbTsgZWxzZSBkZWZhdWx0Rm9ybVwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleFwiPlxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJodWJzcG90LWNvbnRhaW5lciB3LTEwMCBjb250ZW50LWxvYWRlZFwiXG4gICAgICAgICAgICAgICAgW2lubmVySFRNTF09XCJodWJzcG90SHRtbFwiXG4gICAgICAgICAgICAgICAgKGxvYWQpPVwib25IdWJzcG90TG9hZCgkZXZlbnQpXCI+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8aSAqbmdJZj1cImNhbkVkaXRSZXNvdXJjZXNWYWx1ZVwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiZmEgZmEtZWRpdCBpbi1wYWdlLWVkaXQtaWNvbiB0ZXh0LXdoaXRlIGN1cnNvci1wb2ludGVyXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cIm9wZW5IdWJzcG90RWRpdE1vZGFsKGZvb3Rlckl0ZW0pXCJcbiAgICAgICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwib3Blbkh1YnNwb3RFZGl0TW9kYWwoZm9vdGVySXRlbSlcIlxuICAgICAgICAgICAgICAoa2V5ZG93bi5zcGFjZSk9XCJvcGVuSHVic3BvdEVkaXRNb2RhbChmb290ZXJJdGVtKVwiXG4gICAgICAgICAgICAgIHRpdGxlPVwiRWRpdCBIdWJzcG90IEVtYmVkXCI+PC9pPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHRGb3JtPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXhcIj5cbiAgICAgICAgICAgICAgICA8aDMgY2xhc3M9XCJ0ZXh0LXdoaXRlIG1iLTRcIj4gPHNwYW4gY2xhc3M9XCJ0ZXh0LXdoaXRlXCI+R2V0IGluIHRvdWNoOjwvc3Bhbj48L2gzPlxuICAgICAgICAgICAgICAgIDxpICpuZ0lmPVwiY2FuRWRpdFJlc291cmNlc1ZhbHVlXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImZhIGZhLWVkaXQgaW4tcGFnZS1lZGl0LWljb24gdGV4dC13aGl0ZSBjdXJzb3ItcG9pbnRlciBtcy0zIG10LTJcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJvcGVuUXVlc3Rpb25zRWRpdE1vZGFsKClcIlxuICAgICAgICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cIm9wZW5RdWVzdGlvbnNFZGl0TW9kYWwoKVwiXG4gICAgICAgICAgICAgICAgKGtleWRvd24uc3BhY2UpPVwib3BlblF1ZXN0aW9uc0VkaXRNb2RhbCgpXCJcbiAgICAgICAgICAgICAgICB0aXRsZT1cIkVkaXQgUXVlc3Rpb25zXCI+PC9pPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGFjdC1mb3JtXCI+XG4gICAgICAgICAgICAgIDxmb3JtIFtmb3JtR3JvdXBdPVwiZm9ybVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZW1haWxcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZmllbGRcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwiZW1haWxcIj5FbWFpbDo8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LTEwMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtYi0xXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJlbWFpbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImVtYWlsXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHB3LWZpZWxkLWVycm9yLWRpc3BsYXkgW2Rpc3BsYXlFcnJvcl09XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIWZvcm0uZ2V0KCdlbWFpbCcpLnZhbGlkICYmIChmb3JtLmdldCgnZW1haWwnKS50b3VjaGVkIHx8IHN1Ym1pdHRlZClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICBlcnJvck1zZz1cIkVtYWlsIGlzIHJlcXVpcmVkXCI+XG4gICAgICAgICAgICAgICAgICAgIDwvcHctZmllbGQtZXJyb3ItZGlzcGxheT5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWZpZWxkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImZpcnN0X25hbWVcIj5GaXJzdCBuYW1lOjwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInctMTAwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgaW5wdXQgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJmaXJzdF9uYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImZpcnN0X25hbWVcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8cHctZmllbGQtZXJyb3ItZGlzcGxheSBbZGlzcGxheUVycm9yXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAhZm9ybS5nZXQoJ2ZpcnN0X25hbWUnKS52YWxpZCAmJiAoZm9ybS5nZXQoJ2ZpcnN0X25hbWUnKS50b3VjaGVkIHx8IHN1Ym1pdHRlZClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICBlcnJvck1zZz1cIkZpcnN0IG5hbWUgaXMgcmVxdWlyZWRcIj5cbiAgICAgICAgICAgICAgICAgICAgPC9wdy1maWVsZC1lcnJvci1kaXNwbGF5PlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZmllbGRcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwibGFzdF9uYW1lXCI+TGFzdCBuYW1lOjwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwibGFzdF9uYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImxhc3RfbmFtZVwiIC8+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1maWVsZFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJjb21wYW55XCI+Q29tcGFueTo8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBpZD1cImNvbXBhbnlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiY29tcGFueVwiIC8+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1maWVsZFwiICpuZ0lmPVwiaGFzVmFsaWRPcHRpb25zKClcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwicHNhXCIgY2xhc3M9XCJzZWxlY3QtbGFiZWxcIj57e3F1ZXN0aW9ufX08L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgIDxwLWRyb3Bkb3duXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJwc2FcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW29wdGlvbnNdPVwicHNhT3B0aW9uc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ1NlbGVjdCBQU0EnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlQ2xhc3M9XCJpbnB1dC1zZWxlY3RcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8L3AtZHJvcGRvd24+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1maWVsZFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJlbnF1aXJ5XCIgY2xhc3M9XCJzZWxlY3QtbGFiZWxcIj5Ib3cgY2FuIHdlIGhlbHAgeW91PzwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImVucXVpcnktZmllbGRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSAgaWQ9XCJlbnF1aXJ5XCIgZm9ybUNvbnRyb2xOYW1lPVwiZW5xdWlyeVwiIGNsYXNzPVwiXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGV4dGFyZWE+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxwdy1maWVsZC1lcnJvci1kaXNwbGF5IFtkaXNwbGF5RXJyb3JdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICFmb3JtLmdldCgnZW5xdWlyeScpLnZhbGlkICYmIChmb3JtLmdldCgnZW5xdWlyeScpLnRvdWNoZWQgfHwgc3VibWl0dGVkKVxuICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgIGVycm9yTXNnPVwiRW5xdWlyeSBpcyByZXF1aXJlZFwiPlxuICAgICAgICAgICAgICAgICAgICA8L3B3LWZpZWxkLWVycm9yLWRpc3BsYXk+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtZW5kXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FwdGNoYS13cmFwcGVyLWNvbnRhaW5lclwiXG4gICAgICAgICAgICAgICAgICAqbmdJZj1cImlzQ2FwdGNoYVZlcmlmaWVkXCI+XG4gICAgICAgICAgICAgICAgICA8bmd4LXJlY2FwdGNoYTIgW25nTW9kZWxPcHRpb25zXT1cInsgc3RhbmRhbG9uZTogdHJ1ZSB9XCJcbiAgICAgICAgICAgICAgICAgICAgW3NpdGVLZXldPVwiY2FwdGNoYUtleVYyXCJcbiAgICAgICAgICAgICAgICAgICAgc2l6ZT1cIm5vcm1hbFwiXG4gICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwicmVjYXB0Y2hhXCJcbiAgICAgICAgICAgICAgICAgICAgKHN1Y2Nlc3MpPVwiaGFuZGxlU3VjY2VzcygkZXZlbnQpXCI+XG4gICAgICAgICAgICAgICAgICA8L25neC1yZWNhcHRjaGEyPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uU3VibWl0KClcIlxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIiFpc0NhcHRjaGFWZXJpZmllZFwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwic2lnbi1idG4gc2lnbi1oZWFkZXItYnRuIG10LTNcIj5cbiAgICAgICAgICAgICAgICAgICAge3sgJ0J1dHRvbi5TdWJtaXQnIHwgdHJhbnNsb2NvIH19XG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIG10LTRcIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpY29ucyBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxhIFtldmVudFRyYWNrZXJdPVwie1xuICAgICAgICAgICAgICAgICAgICAgICAgY2F0ZWdvcnk6ICd5b3V0dWJlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbjogJ2NsaWNrJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiAnY2xvdWRvbGl2ZS1sYW5kaW5nLXBhZ2UtYicsXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogMVxuICAgICAgICAgICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgICAgICAgICAgIFtocmVmXT1cInlvdXR1YmVVcmxcIlxuICAgICAgICAgICAgICAgICAgICAgIHRhcmdldD1cIl9ibGFua1wiXG4gICAgICAgICAgICAgICAgICAgICAgcmVsPVwibm9vcGVuZXIgbm9yZWZlcnJlclwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPVwiL2Fzc2V0cy9pbWcvaWNvbnMveW91dHViZS5wbmdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJpbWctZmx1aWQgeW91dHViZS1pY29uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPVwiNTRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0PVwiNTRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgYWx0PVwiXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgICAgICA8YSBbZXZlbnRUcmFja2VyXT1cIntcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhdGVnb3J5OiAnbGlua2VkaW4nLFxuICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uOiAnY2xpY2snLFxuICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6ICdjbG91ZG9saXZlLWxhbmRpbmctcGFnZS1iJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiAxXG4gICAgICAgICAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAgICAgICAgICAgW2hyZWZdPVwibGlua2VkSW5VcmxcIlxuICAgICAgICAgICAgICAgICAgICAgIHRhcmdldD1cIl9ibGFua1wiXG4gICAgICAgICAgICAgICAgICAgICAgcmVsPVwibm9vcGVuZXIgbm9yZWZlcnJlclwiXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtcy0zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9XCIvYXNzZXRzL2ltZy9pY29ucy9zb2NpYWwvbGlua2VkaW4uc3ZnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaW1nLWZsdWlkIGxpbmtlZGluLWljb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg9XCI0OFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ9XCI0OFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBhbHQ9XCJcIiAvPlxuICAgICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgICAgIDxpICpuZ0lmPVwiY2FuRWRpdFJlc291cmNlc1ZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmYSBmYS1lZGl0IGluLXBhZ2UtZWRpdC1pY29uIHRleHQtd2hpdGUgY3Vyc29yLXBvaW50ZXIgbXMtM1wiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvcGVuU29jaWFsRWRpdE1vZGFsKClcIlxuICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJvcGVuU29jaWFsRWRpdE1vZGFsKClcIlxuICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bi5zcGFjZSk9XCJvcGVuU29jaWFsRWRpdE1vZGFsKClcIlxuICAgICAgICAgICAgICAgICAgICB0aXRsZT1cIkVkaXQgU29jaWFsIExpbmtzICYgQ29tcGFueSBOYW1lXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29weXJpZ2h0IHRleHQtd2hpdGVcIj5cbiAgICAgICAgICAgICAgICAgICAgMjAyNSB7e2NvbXBhbnlOYW1lfX0uXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9mb3JtPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9zZWN0aW9uPlxuXG5cblxuPG5nLXRlbXBsYXRlICNib29rTWVldGluZ1xuICBsZXQtbW9kYWw+XG4gIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXJcIj5cbiAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIlxuICAgICAgY2xhc3M9XCJidG4tY2xvc2UgZmxvYXQtZW5kXCJcbiAgICAgIGFyaWEtbGFiZWw9XCJDbG9zZVwiXG4gICAgICAoY2xpY2spPVwibW9kYWwuZGlzbWlzcygpXCI+XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keVwiPlxuICAgIDxoMyBjbGFzcz1cInRleHQtY2VudGVyIG1vZGFsLWJhc2ljLXRpdGxlXCI+XG4gICAgICBUaGFua3MgZm9yIGdldHRpbmcgaW4gdG91Y2ghIE91ciB0ZWFtIHdpbGwgYmUgaW4gY29udGFjdCBzaG9ydGx5LCBvciB3ZVxuICAgICAgY2FuIGNvbXBhcmUgY2FsZW5kYXJzIG5vdyAmYW1wOyBzY2hlZHVsZSBhIHRpbWVcbiAgICA8L2gzPlxuICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiXG4gICAgICBbZXZlbnRUcmFja2VyXT1cIntcbiAgICAgICAgY2F0ZWdvcnk6ICdyZXF1ZXN0LWRlbW8nLFxuICAgICAgICBhY3Rpb246ICdjbGljaycsXG4gICAgICAgIGxhYmVsOiAnY2xvdWRvbGl2ZS1sYW5kaW5nLXBhZ2UtYicsXG4gICAgICAgIHZhbHVlOiAxXG4gICAgICB9XCJcbiAgICAgIChjbGljayk9XCJuYXZpZ2F0ZVRvQm9va01lZXRpbmcoKVwiXG4gICAgICBjbGFzcz1cInNpZ24tYnRuIHNpZ24taGVhZGVyLWJ0biBteC1hdXRvIGQtYmxvY2sgbWItM1wiPlxuICAgICAgTGV0J3MgZG8gaXRcbiAgICA8L2J1dHRvbj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG5cbjxuZy10ZW1wbGF0ZSAjZWRpdEZvb3RlckxpbmtzTW9kYWwgbGV0LW1vZGFsPlxuICA8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyXCI+XG4gICAgPGg1IGNsYXNzPVwibW9kYWwtdGl0bGVcIj5FZGl0IEZvb3RlciBMaW5rczwvaDU+XG4gICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4tY2xvc2VcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIiAoY2xpY2spPVwibW9kYWwuZGlzbWlzcygpXCI+PC9idXR0b24+XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5XCI+XG4gICAgPGg0IGNsYXNzPVwibWItM1wiPkZvb3RlciBMaW5rcyBTZWN0aW9uPC9oND5cbiAgICA8ZGl2IGNka0Ryb3BMaXN0IChjZGtEcm9wTGlzdERyb3BwZWQpPVwiZHJvcEZvb3RlckxpbmtzKCRldmVudClcIj5cbiAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGZvb3RlciBvZiBlZGl0aW5nRm9vdGVyTGlua3MuaXRlbXM7IGxldCBpID0gaW5kZXhcIiBjbGFzcz1cImJvcmRlciBwLTMgbWItM1wiIGNka0RyYWc+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTUgbWItMlwiPlxuICAgICAgICAgICAgPGxhYmVsIGZvcj1cImZvb3RlclRpdGxle3tpfX1cIiBjbGFzcz1cImZvcm0tbGFiZWxcIj5UaXRsZTwvbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgaWQ9XCJmb290ZXJUaXRsZXt7aX19XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBbKG5nTW9kZWwpXT1cImZvb3Rlci50aXRsZVwiIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC01IG1iLTJcIj5cbiAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJmb290ZXJQYXRoe3tpfX1cIiBjbGFzcz1cImZvcm0tbGFiZWxcIj5QYXRoPC9sYWJlbD5cbiAgICAgICAgICAgIDxpbnB1dCBpZD1cImZvb3RlclBhdGh7e2l9fVwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgWyhuZ01vZGVsKV09XCJmb290ZXIucGF0aFwiIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0yIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXIgbXQtNFwiPlxuICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS10cmFzaCBpbi1wYWdlLXRyYXNoLWljb24gdGV4dC1kYW5nZXIgY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwicmVtb3ZlRm9vdGVyTGluayhpKVwiIChrZXlkb3duLmVudGVyKT1cInJlbW92ZUZvb3RlckxpbmsoaSlcIiAoa2V5ZG93bi5zcGFjZSk9XCJyZW1vdmVGb290ZXJMaW5rKGkpXCI+PC9pPlxuICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1iYXJzIGluLXBhZ2UtYmFycy1pY29uIGN1cnNvci1tb3ZlXCIgY2RrRHJhZ0hhbmRsZT48L2k+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDwhLS0gU3VidGl0bGVzIC0tPlxuICAgICAgICA8ZGl2IGNka0Ryb3BMaXN0IChjZGtEcm9wTGlzdERyb3BwZWQpPVwiZHJvcFN1YnRpdGxlcyhpLCAkZXZlbnQpXCI+XG4gICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgc3ViIG9mIGZvb3Rlci5zdWJ0aXRsZXM7IGxldCBqID0gaW5kZXhcIiBjbGFzcz1cInJvdyBib3JkZXIgcC0zIG1iLTIgYWxpZ24taXRlbXMtY2VudGVyXCIgY2RrRHJhZz5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNVwiPlxuICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwic3VidGl0bGVUaXRsZXt7aX19e3tqfX1cIiBjbGFzcz1cImZvcm0tbGFiZWxcIj5TdWJ0aXRsZSBUaXRsZTwvbGFiZWw+XG4gICAgICAgICAgICAgIDxpbnB1dCBpZD1cInN1YnRpdGxlVGl0bGV7e2l9fXt7an19XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBbKG5nTW9kZWwpXT1cInN1Yi50aXRsZVwiIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNVwiPlxuICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwic3VidGl0bGVQYXRoe3tpfX17e2p9fVwiIGNsYXNzPVwiZm9ybS1sYWJlbFwiPlN1YnRpdGxlIFBhdGg8L2xhYmVsPlxuICAgICAgICAgICAgICA8aW5wdXQgaWQ9XCJzdWJ0aXRsZVBhdGh7e2l9fXt7an19XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBbKG5nTW9kZWwpXT1cInN1Yi5wYXRoXCIgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0yIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXIgbXQtNFwiPlxuICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXRyYXNoIGluLXBhZ2UtdHJhc2gtaWNvbiB0ZXh0LWRhbmdlciBjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJyZW1vdmVTdWJ0aXRsZShpLCBqKVwiIChrZXlkb3duLmVudGVyKT1cInJlbW92ZVN1YnRpdGxlKGksIGopXCIgKGtleWRvd24uc3BhY2UpPVwicmVtb3ZlU3VidGl0bGUoaSwgailcIj48L2k+XG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtYmFycyBjdXJzb3ItbW92ZSBpbi1wYWdlLWJhcnMtaWNvblwiIGNka0RyYWdIYW5kbGU+PC9pPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLW91dGxpbmUtcHJpbWFyeSBidG4tc20gbXQtMlwiIChjbGljayk9XCJhZGRTdWJ0aXRsZShpKVwiPlxuICAgICAgICAgICsgQWRkIFN1YnRpdGxlXG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IG10LTNcIiAoY2xpY2spPVwiYWRkRm9vdGVyTGluaygpXCI+XG4gICAgICArIEFkZCBGb290ZXIgTGlua1xuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cblxuICA8ZGl2IGNsYXNzPVwibW9kYWwtZm9vdGVyXCI+XG4gICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tc2Vjb25kYXJ5XCIgKGNsaWNrKT1cIm1vZGFsLmRpc21pc3MoKVwiPkNhbmNlbDwvYnV0dG9uPlxuICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIiAoY2xpY2spPVwic2F2ZUZvb3RlckxpbmtzKG1vZGFsKVwiPlNhdmU8L2J1dHRvbj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG5cblxuXG5cbjxuZy10ZW1wbGF0ZSAjbG9nb01vZGFsIGxldC1tb2RhbD5cbiAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlclwiPlxuICAgIDxoNSBjbGFzcz1cIm1vZGFsLXRpdGxlXCI+VXBsb2FkIExvZ288L2g1PlxuICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuLWNsb3NlXCIgYXJpYS1sYWJlbD1cIkNsb3NlXCIgKGNsaWNrKT1cIm1vZGFsLmRpc21pc3MoKVwiPjwvYnV0dG9uPlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cIm1vZGFsLWJvZHlcIj5cbiAgICA8cHctY3VzdG9tLXVwbG9hZGVyXG4gICAgICBbYXNwZWN0UmF0aW9dPVwiJ2Z1bGxMb2dvJ1wiXG4gICAgICBbdGl0bGVdPVwiJ01haW4gQ29udHJhc3QgTG9nbydcIlxuICAgICAgW2NvbnRyb2xOYW1lXT1cIidsb2dvX21haW5fY29udHJhc3QnXCJcbiAgICAgIFtwcmV2aWV3RGF0YV09XCJwcmV2aWV3RGF0YVwiXG4gICAgICAoc2F2ZUV2ZW50KT1cIm9uU2F2ZUZpbGUoJGV2ZW50KVwiPlxuICAgIDwvcHctY3VzdG9tLXVwbG9hZGVyPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cblxuXG48bmctdGVtcGxhdGUgI2h1YnNwb3RFZGl0TW9kYWwgbGV0LW1vZGFsPlxuICA8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyXCI+XG4gICAgPGg1IGNsYXNzPVwibW9kYWwtdGl0bGVcIj5FZGl0IEh1YnNwb3QgRW1iZWQ8L2g1PlxuICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuLWNsb3NlXCIgYXJpYS1sYWJlbD1cIkNsb3NlXCIgKGNsaWNrKT1cIm1vZGFsLmRpc21pc3MoKVwiPjwvYnV0dG9uPlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cIm1vZGFsLWJvZHlcIj5cbiAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxuICAgICAgPGxhYmVsIGZvcj1cImh1YnNwb3RJZFwiIGNsYXNzPVwiZm9ybS1sYWJlbFwiPkh1YnNwb3QgSUQ8L2xhYmVsPlxuICAgICAgPGlucHV0IGlkPVwiaHVic3BvdElkXCIgWyhuZ01vZGVsKV09XCJlZGl0aW5nSHVic3BvdElkXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiAvPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJtYi0zXCI+XG4gICAgICA8bGFiZWwgZm9yPVwiaHVic3BvdEVtYmVkRGl2XCIgY2xhc3M9XCJmb3JtLWxhYmVsXCI+RW1iZWQgRElWPC9sYWJlbD5cbiAgICAgIDx0ZXh0YXJlYSBpZD1cImh1YnNwb3RFbWJlZERpdlwiIFsobmdNb2RlbCldPVwiZWRpdGluZ0h1YnNwb3RIdG1sXCIgcm93cz1cIjhcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiPjwvdGV4dGFyZWE+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPVwibW9kYWwtZm9vdGVyXCI+XG4gICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiIChjbGljayk9XCJzYXZlSHVic3BvdEh0bWwobW9kYWwpXCI+U2F2ZTwvYnV0dG9uPlxuICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXNlY29uZGFyeVwiIChjbGljayk9XCJtb2RhbC5kaXNtaXNzKClcIj5DYW5jZWw8L2J1dHRvbj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG5cbjxuZy10ZW1wbGF0ZSAjc29jaWFsRWRpdE1vZGFsIGxldC1tb2RhbD5cbiAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlclwiPlxuICAgIDxoNSBjbGFzcz1cIm1vZGFsLXRpdGxlXCI+RWRpdCBTb2NpYWwgTGlua3MgJiBDb21wYW55IE5hbWU8L2g1PlxuICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuLWNsb3NlXCIgYXJpYS1sYWJlbD1cIkNsb3NlXCIgKGNsaWNrKT1cIm1vZGFsLmRpc21pc3MoKVwiPjwvYnV0dG9uPlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cIm1vZGFsLWJvZHlcIj5cbiAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxuICAgICAgPGxhYmVsIGZvcj1cInlvdXR1YmVVcmxcIiBjbGFzcz1cImZvcm0tbGFiZWxcIj5Zb3VUdWJlIFVSTDwvbGFiZWw+XG4gICAgICA8aW5wdXQgaWQ9XCJ5b3V0dWJlVXJsXCIgWyhuZ01vZGVsKV09XCJlZGl0aW5nWW91dHViZVVybFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgLz5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxuICAgICAgPGxhYmVsIGZvcj1cImxpbmtlZGluVXJsXCIgY2xhc3M9XCJmb3JtLWxhYmVsXCI+TGlua2VkSW4gVVJMPC9sYWJlbD5cbiAgICAgIDxpbnB1dCBpZD1cImxpbmtlZGluVXJsXCIgWyhuZ01vZGVsKV09XCJlZGl0aW5nTGlua2VkSW5VcmxcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIC8+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cIm1iLTNcIj5cbiAgICAgIDxsYWJlbCBmb3I9XCJjb21wYW55TmFtZVwiIGNsYXNzPVwiZm9ybS1sYWJlbFwiPkNvbXBhbnkgTmFtZTwvbGFiZWw+XG4gICAgICA8aW5wdXQgaWQ9XCJjb21wYW55TmFtZVwiIFsobmdNb2RlbCldPVwiZWRpdGluZ0NvbXBhbnlOYW1lXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiAvPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cIm1vZGFsLWZvb3RlclwiPlxuICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIiAoY2xpY2spPVwic2F2ZVNvY2lhbExpbmtzKG1vZGFsKVwiPlNhdmU8L2J1dHRvbj5cbiAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1zZWNvbmRhcnlcIiAoY2xpY2spPVwibW9kYWwuZGlzbWlzcygpXCI+Q2FuY2VsPC9idXR0b24+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuXG5cbjxuZy10ZW1wbGF0ZSAjcXVlc3Rpb25zRWRpdE1vZGFsIGxldC1tb2RhbD5cbiAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlclwiPlxuICAgIDxoNSBjbGFzcz1cIm1vZGFsLXRpdGxlXCI+RWRpdCBRdWVzdGlvbnM8L2g1PlxuICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuLWNsb3NlXCIgYXJpYS1sYWJlbD1cIkNsb3NlXCIgKGNsaWNrKT1cIm1vZGFsLmRpc21pc3MoKVwiPjwvYnV0dG9uPlxuICA8L2Rpdj5cblxuICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keVwiPlxuICAgIDxoNCBjbGFzcz1cIm1iLTNcIj5RdWVzdGlvbnMgU2VjdGlvbjwvaDQ+XG4gICAgPGRpdiBjZGtEcm9wTGlzdCAoY2RrRHJvcExpc3REcm9wcGVkKT1cImRyb3BRdWVzdGlvbnMoJGV2ZW50KVwiPlxuICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgcSBvZiBlZGl0aW5nUXVlc3Rpb25zOyBsZXQgaSA9IGluZGV4XCIgY2xhc3M9XCJib3JkZXIgcC0zIG1iLTNcIiBjZGtEcmFnPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMSBtYi0yXCI+XG4gICAgICAgICAgICA8bGFiZWwgZm9yPVwicXVlc3Rpb25UZXh0e3tpfX1cIiBjbGFzcz1cImZvcm0tbGFiZWxcIj5RdWVzdGlvbjwvbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgaWQ9XCJxdWVzdGlvblRleHR7e2l9fVwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgWyhuZ01vZGVsKV09XCJxLnF1ZXN0aW9uXCIgcGxhY2Vob2xkZXI9XCJFbnRlciBxdWVzdGlvblwiIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kIGFsaWduLWl0ZW1zLXN0YXJ0IG10LTRcIj5cbiAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtYmFycyBpbi1wYWdlLWJhcnMtaWNvbiBjdXJzb3ItbW92ZVwiIGNka0RyYWdIYW5kbGU+PC9pPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8IS0tIE9wdGlvbnMgU2VjdGlvbiAtLT5cbiAgICAgICAgPGRpdiBjZGtEcm9wTGlzdCAoY2RrRHJvcExpc3REcm9wcGVkKT1cImRyb3BRdWVzdGlvbk9wdGlvbnMoaSwgJGV2ZW50KVwiPlxuICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IG9wdCBvZiBxLm9wdGlvbnM7IGxldCBqID0gaW5kZXhcIiBjbGFzcz1cInJvdyBib3JkZXIgcC0zIG1iLTIgYWxpZ24taXRlbXMtY2VudGVyXCIgY2RrRHJhZz5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNyBtYi0yXCI+XG4gICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJxdWVzdGlvbk9wdGlvbnt7aX19e3tqfX1cIiBjbGFzcz1cImZvcm0tbGFiZWxcIj5PcHRpb248L2xhYmVsPlxuICAgICAgICAgICAgICA8aW5wdXQgaWQ9XCJxdWVzdGlvbk9wdGlvbnt7aX19e3tqfX1cIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIFsobmdNb2RlbCldPVwib3B0Lm9wdGlvblwiIHBsYWNlaG9sZGVyPVwiRW50ZXIgb3B0aW9uXCIgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0yIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXIgbXQtNFwiPlxuICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXRyYXNoIGluLXBhZ2UtdHJhc2gtaWNvbiB0ZXh0LWRhbmdlciBjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJyZW1vdmVRdWVzdGlvbk9wdGlvbihpLCBqKVwiIChrZXlkb3duLmVudGVyKT1cInJlbW92ZVF1ZXN0aW9uT3B0aW9uKGksIGopXCIgKGtleWRvd24uZW50ZXIpPVwicmVtb3ZlUXVlc3Rpb25PcHRpb24oaSwgailcIj48L2k+XG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtYmFycyBpbi1wYWdlLWJhcnMtaWNvbiBjdXJzb3ItbW92ZVwiIGNka0RyYWdIYW5kbGU+PC9pPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLW91dGxpbmUtcHJpbWFyeSBidG4tc20gbXQtMlwiIChjbGljayk9XCJhZGRRdWVzdGlvbk9wdGlvbihpKVwiPisgQWRkIE9wdGlvbjwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IG10LTNcIiAoY2xpY2spPVwiYWRkTmV3UXVlc3Rpb24oKVwiPisgQWRkIFF1ZXN0aW9uPC9idXR0b24+XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9XCJtb2RhbC1mb290ZXJcIj5cbiAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1zZWNvbmRhcnlcIiAoY2xpY2spPVwibW9kYWwuZGlzbWlzcygpXCI+Q2FuY2VsPC9idXR0b24+XG4gICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiIChjbGljayk9XCJzYXZlUXVlc3Rpb25zKG1vZGFsKVwiPlNhdmU8L2J1dHRvbj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG5cblxuIl19
|
|
@@ -223,7 +223,6 @@ class Trial4ContactUsComponent extends AppBaseComponent {
|
|
|
223
223
|
this.observer = new IntersectionObserver(([entry]) => {
|
|
224
224
|
if (entry.isIntersecting) {
|
|
225
225
|
this.isFooterVisible = true;
|
|
226
|
-
console.log(this.isFooterVisible, "hey");
|
|
227
226
|
this.cdr.detectChanges();
|
|
228
227
|
this.observer?.disconnect();
|
|
229
228
|
}
|
|
@@ -345,7 +344,6 @@ class Trial4ContactUsComponent extends AppBaseComponent {
|
|
|
345
344
|
if (!this.hubspot?.length) {
|
|
346
345
|
return null;
|
|
347
346
|
}
|
|
348
|
-
console.log('this.hubspot', this.hubspot);
|
|
349
347
|
return this.hubspot.find(item => item.position === 'footer') ?? null;
|
|
350
348
|
}
|
|
351
349
|
navigateToBookMeeting() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"posiwise-resource-contact-us.mjs","sources":["../../../../libs/resource-contact-us/src/lib/resource-contact-us/resource-contact-us.component.ts","../../../../libs/resource-contact-us/src/lib/resource-contact-us/resource-contact-us.component.html","../../../../libs/resource-contact-us/src/lib/resource-contact-us/resource-contact-us.module.ts","../../../../libs/resource-contact-us/src/lib/demo-cards/demo-cards.component.ts","../../../../libs/resource-contact-us/src/lib/demo-cards/demo-cards.component.html","../../../../libs/resource-contact-us/src/lib/demo-cards/demo-cards.module.ts","../../../../libs/resource-contact-us/src/posiwise-resource-contact-us.ts"],"sourcesContent":["import { moveItemInArray } from '@angular/cdk/drag-drop';\nimport { DOCUMENT } from '@angular/common';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n Inject,\n Injector,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n SimpleChanges,\n TemplateRef,\n ViewChild\n} from '@angular/core';\nimport { UntypedFormBuilder, UntypedFormGroup, Validators } from '@angular/forms';\nimport { DomSanitizer } from '@angular/platform-browser';\n\nimport { AdminService } from '@posiwise/admin-module-utils';\nimport { AppBaseComponent } from '@posiwise/app-base-component';\nimport { AbTestService, AuthService, ValidationService } from '@posiwise/common-services';\nimport { User } from '@posiwise/common-utilities';\nimport { HelperService } from '@posiwise/helper-service';\nimport { CrmService } from '@posiwise/smart-crm-shared';\nimport { CustomUploaderComponent } from '@posiwise/utils';\n\nimport { StatusCodes } from 'http-status-codes';\nimport Swal from 'sweetalert2';\n\nimport { NgbModal } from '@ng-bootstrap/ng-bootstrap';\n\nimport { ResourceModalContext } from '../shared/resource-modal.interface';\n\n@Component({\n selector: 'pw-trial-4-contact-us',\n templateUrl: './resource-contact-us.component.html',\n styleUrls: ['./resource-contact-us.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class Trial4ContactUsComponent\n extends AppBaseComponent\n implements OnInit, AfterViewInit, OnChanges, OnDestroy\n{\n @ViewChild('footerSection', { static: true }) footerSection!: ElementRef;\n @ViewChild('bookMeeting', { static: true }) content: TemplateRef<ResourceModalContext>;\n @ViewChild('editFooterLinksModal') editFooterLinksModal: TemplateRef<CustomUploaderComponent>;\n @ViewChild('logoModal') logoModal: TemplateRef<CustomUploaderComponent>;\n @ViewChild('logoUploader') logoUploader: CustomUploaderComponent;\n @ViewChild('hubspotEditModal') hubspotEditModal: TemplateRef<ResourceModalContext>;\n @ViewChild('socialEditModal') socialEditModal: TemplateRef<CustomUploaderComponent>;\n @ViewChild('questionsEditModal') questionsEditModal: TemplateRef<CustomUploaderComponent>;\n\n editingQuestions = [];\n isHubspotReady: boolean;\n\n isFooterVisible = false;\n private observer?: IntersectionObserver;\n\n openQuestionsEditModal(): void {\n this.editingQuestions = JSON.parse(JSON.stringify(this.editingQuestions ?? []));\n this.modalService.open(this.questionsEditModal, { centered: true, size: 'lg' });\n }\n\n editingYoutubeUrl: string;\n editingLinkedInUrl: string;\n editingCompanyName: string;\n\n form: UntypedFormGroup;\n\n recaptcha = null;\n\n previewData;\n\n @Input() subscriptionId = this.appConfig.crm.subscription_id;\n @Input() sourceId = this.appConfig.crm.source_id;\n @Input() masterSubscriptionId = this.appConfig.master_subscription.subscription_id;\n @Input() experimentName;\n @Input() microserviceName;\n @Input() shardName;\n @Input() user: User;\n\n canEditResourcesValue = false;\n @Input() userLoggedIn: boolean;\n\n id;\n\n logo = this.appConfig?.company?.logos?.main_contrast?.url;\n trialBgImage2 = this.appConfig?.signup_config.trial?.image_bg2?.url;\n tosId = this.appConfig?.main_tos_id;\n description = this.appConfig.company.description;\n email = this.appConfig.company.email;\n companyName = this.appConfig.company.name;\n street = this.appConfig.company.street;\n questions = this.appConfig?.pages_config?.contact_us?.questions;\n hubspot = this.appConfig?.pages_config?.contact_us?.hubspot;\n footerLinks = this.appConfig?.pages_config?.footer_links?.items;\n\n footerLinksData = this.appConfig?.pages_config?.footer_links;\n\n youtubeUrl = this.appConfig.social?.youtube_url;\n linkedInUrl = this.appConfig.social?.linkedin_url;\n domainId = this.appConfig.domain_id;\n\n editingEmail = this.email;\n isEditingEmail = false;\n\n editingHubspotHtml: string;\n editingHubspotId: string;\n captchaKeyV2: string;\n hubspotHtml;\n\n abTests;\n\n submitted = false;\n isCaptchaVerified = false;\n isEmailValid = true;\n isEditingStreet = false;\n\n psaOptions;\n\n question;\n\n editingFooterLinks = {\n items: []\n };\n editingStreet: string;\n\n constructor(\n private readonly fb: UntypedFormBuilder,\n private readonly authService: AuthService,\n private readonly crmService: CrmService,\n private readonly sanitizer: DomSanitizer,\n private readonly adminService: AdminService,\n injector: Injector,\n private readonly abTestService: AbTestService,\n private readonly modalService: NgbModal,\n private readonly cdr: ChangeDetectorRef,\n @Inject(DOCUMENT) private readonly document: Document\n ) {\n super(injector);\n this.captchaKeyV2 = this.appConfig.integrations.captcha_key_V2;\n this.contactUsForm();\n }\n\n ngOnInit() {\n setTimeout(() => (this.isHubspotReady = true), 2000);\n if (this.userLoggedIn) {\n this.localStorage.getItem$('product').subscribe(res => {\n const data = res ? JSON.parse(res) : null;\n this.id = data?.subscriptionId;\n });\n }\n this.previewData = {\n url: this.logo,\n name: 'logo_main_contrast.png'\n };\n this.editingStreet = this.street;\n if (Array.isArray(this.appConfig.pages_config?.ab_tests)) {\n this.abTests = this.appConfig.pages_config.ab_tests.find(\n test => test.description === 'contact-us'\n );\n this.microserviceName = this.abTests?.microservice_name;\n this.experimentName = this.abTests?.experiment_name;\n this.shardName = this.abTests?.db_shard;\n }\n\n const footerItem = this.getFooterHubspotForm();\n if (footerItem?.div) {\n // NOSONAR: Trusted HTML content is handled safely here\n this.hubspotHtml = this.sanitizer.bypassSecurityTrustHtml(footerItem.div); // NOSONAR\n }\n this.editingQuestions = this.questions;\n this.question = this.questions?.[0]?.question;\n this.psaOptions = [\n { label: 'Select PSA', value: '' },\n ...(this.questions?.[0]?.options ?? [])\n .filter(q => q.option?.trim())\n .map(q => ({\n label: q.option,\n value: q.option\n }))\n ];\n }\n ngOnChanges(changes: SimpleChanges) {\n if (changes['user'] || changes['userLoggedIn']) {\n if (this.userLoggedIn && this.user) {\n this.updateCanEditResourcesValue();\n }\n }\n }\n\n openLogoEditModal(): void {\n this.modalService.open(this.logoModal, {\n centered: true,\n size: 'md'\n });\n }\n\n onSaveFile(event): void {\n const formData = new FormData();\n const data = { subscription_id: this.subscriptionId };\n\n if (event.file instanceof File) {\n data[event.name] = event.file;\n } else if (event.file === null) {\n data[`remove_${event.name}`] = true;\n }\n\n for (const key in data) {\n formData.append(key, data[key]);\n }\n\n this.adminService.updateDomainConfig(this.domainId, formData).subscribe(() => {\n if (event.file) {\n this.logo = URL.createObjectURL(event.file);\n this.modalService.dismissAll();\n }\n this.toast.success(event.file ? 'Logo updated' : 'Logo removed');\n });\n }\n\n saveQuestions(modal): void {\n const updateData = {\n contact_us: {\n ...this.appConfig.pages_config?.contact_us,\n questions: this.editingQuestions\n },\n subscription_id: this.id\n };\n\n this.adminService.updateDomainConfig(this.domainId, updateData).subscribe(() => {\n this.questions = this.editingQuestions;\n this.toast.success('Questions updated');\n this.question = this.editingQuestions?.[0]?.question;\n if (this.editingQuestions?.[0]?.options?.length > 0) {\n this.psaOptions = [\n { label: 'Select PSA', value: '' },\n ...(this.questions?.[0]?.options ?? [])\n .filter(q => q.option?.trim())\n .map(q => ({\n label: q.option,\n value: q.option\n }))\n ];\n } else {\n this.psaOptions = [];\n }\n\n modal.close();\n });\n }\n\n addNewQuestion(): void {\n this.editingQuestions.push({ question: '', options: [] });\n }\n\n addQuestionOption(qIndex: number): void {\n this.editingQuestions[qIndex].options.push({ option: '' });\n }\n\n removeQuestionOption(qIndex: number, optIndex: number): void {\n this.editingQuestions[qIndex].options.splice(optIndex, 1);\n }\n\n dropQuestions(event): void {\n moveItemInArray(this.editingQuestions, event.previousIndex, event.currentIndex);\n }\n\n dropQuestionOptions(qIndex: number, event): void {\n moveItemInArray(\n this.editingQuestions[qIndex].options,\n event.previousIndex,\n event.currentIndex\n );\n }\n\n openSocialEditModal(): void {\n this.editingYoutubeUrl = this.youtubeUrl;\n this.editingLinkedInUrl = this.linkedInUrl;\n this.editingCompanyName = this.companyName;\n\n this.modalService.open(this.socialEditModal, { centered: true, size: 'lg' });\n }\n\n saveSocialLinks(modal): void {\n const updateData = {\n youtube_url: this.editingYoutubeUrl,\n linkedin_url: this.editingLinkedInUrl,\n company_name: this.editingCompanyName,\n subscription_id: this.id\n };\n\n this.adminService.updateDomainConfig(this.domainId, updateData).subscribe(() => {\n this.youtubeUrl = this.editingYoutubeUrl;\n this.linkedInUrl = this.editingLinkedInUrl;\n this.companyName = this.editingCompanyName;\n this.toast.success('Social links and company name updated');\n modal.close();\n });\n }\n\n hasValidOptions(): boolean {\n return this.questions?.[0]?.options?.some(opt => opt.option?.trim());\n }\n\n ngAfterViewInit() {\n this.watchIframeHeightChange();\n this.observer = new IntersectionObserver(\n ([entry]) => {\n if (entry.isIntersecting) {\n this.isFooterVisible = true;\n console.log( this.isFooterVisible, \"hey\")\n this.cdr.detectChanges();\n this.observer?.disconnect();\n }\n },\n { threshold: 0.1 }\n );\n\n this.observer.observe(this.footerSection.nativeElement);\n }\n\n openEditFooterLinksModal(content): void {\n this.footerLinksData = this.footerLinksData ?? {};\n this.footerLinksData.items = this.footerLinksData.items ?? [];\n this.editingFooterLinks = JSON.parse(JSON.stringify(this.footerLinksData));\n\n this.modalService.open(content, {\n size: 'lg',\n centered: true,\n windowClass: 'modal-holder'\n });\n }\n\n private watchIframeHeightChange() {\n const iframe = this.document.querySelector('.hubspot-container');\n if (!iframe) return;\n const interval = setInterval(() => {\n const newHeight = iframe['offsetHeight'];\n if (newHeight === 250) {\n clearInterval(interval);\n this.callAbTestFinish();\n }\n }, 300);\n }\n\n // New method to handle Hubspot content loading\n onHubspotLoad(event: Event) {\n const container = event.target as HTMLDivElement;\n container.classList.add('content-loaded');\n\n // Optional: Trigger layout recalculation\n setTimeout(() => {\n window.dispatchEvent(new Event('resize'));\n }, 100);\n }\n\n private callAbTestFinish() {\n if (this.experimentName && this.microserviceName) {\n this.abTestService\n .finishABExperiment(this.experimentName, this.microserviceName)\n .subscribe(() => {\n this.modalService.open(this.content, {\n centered: true,\n windowClass: 'modal-holder'\n });\n });\n }\n }\n\n contactUsForm(): void {\n this.form = this.fb.group({\n first_name: ['', Validators.required],\n last_name: [''],\n company: [''],\n psa: [''],\n enquiry: ['', Validators.required],\n email: ['', Validators.required]\n });\n }\n\n onSubmit() {\n this.submitted = true;\n if (this.form.valid) {\n this.isCaptchaVerified = true;\n this.submitted = false;\n }\n }\n\n handleSuccess(token: string) {\n if (token) {\n this.authService.validateReCaptcha(token).subscribe((isSuccess: boolean) => {\n if (isSuccess && this.form.valid) {\n const data = { ...this.form.getRawValue() };\n const formattedEnquiry = `${data.enquiry}; Question: ${this.question}; Answer: ${data.psa}`;\n const postData = {\n first_name: `${data.first_name}`,\n last_name: `${data.first_name}`,\n company: `${data.first_name}`,\n email: `${data.email}`,\n enquiry: this.psaOptions.length ? formattedEnquiry : `${data.enquiry}`,\n psa: data.psa,\n subscription_id: this.subscriptionId,\n crm_source_id: this.sourceId,\n master_subscription_id: this.masterSubscriptionId,\n notify_user: false,\n is_manual: false\n };\n\n this.crmService.postCrmLead(this.subscriptionId, postData).subscribe(resp => {\n // example of snippet to close the experiment and track in GA\n if (resp?.status === StatusCodes.OK) {\n this.googleAnalyticsService.sendEvent(\n 'new-lead-registration', // category, eg: videos\n 'subscribe-success', // action, eg: Play\n 'coming-soon-three', // label, eg: Chappy\n 1 // value, eg: 10\n );\n if (this.experimentName && this.microserviceName) {\n this.abTestService\n .finishABExperiment(this.experimentName, this.microserviceName)\n .subscribe(() => {\n this.modalService.open(this.content, {\n centered: true,\n windowClass: 'modal-holder'\n });\n });\n } else {\n Swal.fire(resp.message);\n }\n }\n this.form.reset();\n this.isCaptchaVerified = false;\n });\n }\n });\n }\n }\n\n scrollToTop() {\n this.document.documentElement.scrollTop = 0;\n }\n\n getFooterHubspotForm() {\n if (!this.hubspot?.length) {\n return null;\n }\n console.log('this.hubspot', this.hubspot);\n return this.hubspot.find(item => item.position === 'footer') ?? null;\n }\n\n navigateToBookMeeting() {\n const bookDemoUrl =\n this.appConfig?.signup_config?.trial?.book_demo_url ??\n 'https://calendly.com/cloudolive';\n window.open(bookDemoUrl, '_blank', 'noreferrer noopener');\n }\n\n validateEmail() {\n const email = this.form.get('email').value;\n if (email) {\n this.isEmailValid = ValidationService.email(email);\n } else {\n this.isEmailValid = true;\n }\n }\n\n addFooterLink(): void {\n this.editingFooterLinks.items.push({\n title: '',\n path: '',\n subtitles: []\n });\n }\n\n removeFooterLink(index: number): void {\n this.editingFooterLinks.items.splice(index, 1);\n }\n\n addSubtitle(footerIndex: number): void {\n this.editingFooterLinks.items[footerIndex].subtitles.push({\n title: '',\n path: ''\n });\n }\n\n removeSubtitle(footerIndex: number, subtitleIndex: number): void {\n this.editingFooterLinks.items[footerIndex].subtitles.splice(subtitleIndex, 1);\n }\n\n dropFooterLinks(event) {\n moveItemInArray(this.editingFooterLinks.items, event.previousIndex, event.currentIndex);\n }\n\n dropSubtitles(footerIndex: number, event) {\n moveItemInArray(\n this.editingFooterLinks.items[footerIndex].subtitles,\n event.previousIndex,\n event.currentIndex\n );\n }\n\n saveFooterLinks(modal): void {\n const updatedConfig = {\n footer_links: this.editingFooterLinks,\n subscription_id: this.id\n };\n\n this.adminService\n .updateDomainConfig(this.appConfig?.domain_id, updatedConfig)\n .subscribe(() => {\n this.toast.success('Footer links updated');\n this.footerLinks = [...this.editingFooterLinks.items];\n this.footerLinksData = { ...this.editingFooterLinks };\n modal.close();\n });\n }\n\n saveEmail(): void {\n this.email = this.editingEmail;\n\n this.adminService\n .updateDomainConfig(this.appConfig?.domain_id, {\n company_email: this.editingEmail,\n subscription_id: this.id\n })\n .subscribe(() => {\n this.toast.success('Email updated');\n this.isEditingEmail = false;\n });\n }\n\n saveStreet(): void {\n this.adminService\n .updateDomainConfig(this.appConfig?.domain_id, {\n company_address: this.editingStreet,\n subscription_id: this.id\n })\n .subscribe(() => {\n this.toast.success('Street updated');\n this.street = this.editingStreet;\n this.isEditingStreet = false;\n });\n }\n\n cancelStreet(): void {\n this.editingStreet = this.street;\n this.isEditingStreet = false;\n }\n\n openHubspotEditModal(footerItem): void {\n this.editingHubspotHtml = footerItem.div;\n this.editingHubspotId = footerItem.id;\n this.modalService.open(this.hubspotEditModal, { centered: true, size: 'lg' });\n }\n\n saveHubspotHtml(modal): void {\n const updatedConfig = {\n contact_us: {\n ...this.appConfig?.pages_config?.contact_us,\n hubspot: [\n {\n id: '7423639',\n position: 'footer',\n div: this.editingHubspotHtml\n }\n ]\n },\n subscription_id: this.id\n };\n\n this.adminService\n .updateDomainConfig(this.appConfig?.domain_id, updatedConfig)\n .subscribe(() => {\n // NOSONAR: Trusted HTML content is handled safely here\n this.hubspotHtml = this.sanitizer.bypassSecurityTrustHtml(this.editingHubspotHtml); // NOSONAR\n this.toast.success('Hubspot Embed updated');\n modal.close();\n });\n }\n private updateCanEditResourcesValue(): void {\n this.canEditResourcesValue = HelperService.canEditResources(\n this.user,\n this.userLoggedIn,\n this.permissionService\n );\n }\n\n canEditResources(): boolean {\n return this.canEditResourcesValue;\n }\n\n override ngOnDestroy(): void {\n this.observer?.disconnect();\n }\n}\n","<section #footerSection class=\"bg-black text-white py-5 footer-section\">\n <div class=\"container\" *ngIf=\"isFooterVisible\">\n <div class=\"row\">\n\n <!-- LEFT COLUMN -->\n <div class=\"col-md-6 mb-4 d-flex flex-column justify-content-between\" [ngClass]=\"{ 'site-column': getFooterHubspotForm() }\">\n <div>\n <h3 class=\"mb-4 d-flex align-items-center\">\n <span class=\"me-2 text-white\">Site Map:</span>\n <i *ngIf=\"canEditResourcesValue\" class=\"fa fa-edit in-page-edit-icon cursor-pointer text-white ms-3\" (click)=\"openEditFooterLinksModal(editFooterLinksModal)\" (keydown.enter)=\"openEditFooterLinksModal(editFooterLinksModal)\" (keydown.space)=\"openEditFooterLinksModal(editFooterLinksModal)\" ngbTooltip=\"Edit Footer Links\"></i>\n </h3>\n <ul class=\"mt-4\">\n <li routerLink=\"/\"\n class=\"cursor-pointer user-info-label link-label\"> Home </li>\n <li *ngFor=\"let link of footerLinks\" [routerLink]=\"link?.path\"\n class=\"cursor-pointer user-info-label link-label mt-4\"><span *ngIf=\"link?.title\">{{link?.title}}</span> </li>\n <li routerLink=\"/login\"\n class=\"cursor-pointer user-info-label mt-4 link-label\"> Log in </li>\n <li [routerLink]=\"'/privacy-and-tos/' + tosId\"\n class=\"cursor-pointer user-info-label mt-4 link-label\"> Privacy statement </li>\n </ul>\n <p class=\"address-section email-section mb-4\">\n <span class=\"user-info-label\">Email: </span>\n <ng-container *ngIf=\"!isEditingEmail; else editEmail\">\n <span class=\"user-info\">{{ email }}</span>\n <i *ngIf=\"canEditResourcesValue\" class=\"fa fa-edit in-page-edit-icon text-white cursor-pointer ms-3\" (click)=\"isEditingEmail = true\" (keydown.enter)=\"isEditingEmail = true\" (keydown.space)=\"isEditingEmail = true\"></i>\n </ng-container>\n\n <ng-template #editEmail>\n <input\n class=\"form-control d-inline w-auto\"\n [(ngModel)]=\"editingEmail\"\n />\n <button class=\"btn btn-sm btn-primary ms-2\" (click)=\"saveEmail()\">Save</button>\n <button class=\"btn btn-sm btn-secondary ms-2\" (click)=\"isEditingEmail = false\">Cancel</button>\n </ng-template>\n </p>\n <span class=\"email-section mt-3 address-text\">\n <span class=\"user-info-label\">\n Address:\n <i *ngIf=\"canEditResourcesValue\"\n class=\"fa fa-edit in-page-edit-icon cursor-pointer ms-2 text-white\"\n title=\"Edit Address\"\n (click)=\"isEditingStreet = true\"\n (keydown.enter)=\"isEditingStreet = true\"\n (keydown.space)=\"isEditingStreet = true\"></i>\n </span><br/>\n\n <ng-container *ngIf=\"!isEditingStreet; else editStreetBlock\">\n <span class=\"address-text user-info\">{{ street }}</span>\n </ng-container>\n\n <ng-template #editStreetBlock>\n <div class=\"d-flex align-items-center mt-3\">\n <input class=\"form-control form-control-sm\" [(ngModel)]=\"editingStreet\" />\n <button class=\"btn btn-sm btn-primary ms-2\" (click)=\"saveStreet()\">Save</button>\n <button class=\"btn btn-sm btn-secondary ms-2\" (click)=\"cancelStreet()\">Cancel</button>\n </div>\n </ng-template>\n\n </span>\n\n </div>\n <div class=\"d-flex\">\n <img [src]=\"logo\"\n alt=\"Company logo\"\n class=\"img-fluid mt-4 logo-image cursor-pointer\"\n width=\"160\"\n height=\"35\"\n (click)=\"scrollToTop()\"\n (keydown.enter)=\"scrollToTop()\"\n (keydown.space)=\"scrollToTop()\"\n title=\"Click to go to top of page\" />\n <i *ngIf=\"canEditResourcesValue\"\n class=\"fa fa-edit in-page-edit-icon fa-sm ms-3 cursor-pointer text-white align-self-center mt-3\"\n (click)=\"openLogoEditModal()\"\n (keydown.enter)=\"openLogoEditModal()\"\n (keydown.space)=\"openLogoEditModal()\"\n title=\"Edit Logo\"></i>\n </div>\n </div>\n\n <!-- RIGHT COLUMN -->\n <div class=\"col-md-6\" *ngIf=\"isFooterVisible\">\n <ng-container *ngIf=\"getFooterHubspotForm() as footerItem; else defaultForm\">\n <div class=\"d-flex\">\n <div\n class=\"hubspot-container w-100 content-loaded\"\n [innerHTML]=\"hubspotHtml\"\n (load)=\"onHubspotLoad($event)\">\n </div>\n <i *ngIf=\"canEditResourcesValue\"\n class=\"fa fa-edit in-page-edit-icon text-white cursor-pointer\"\n (click)=\"openHubspotEditModal(footerItem)\"\n (keydown.enter)=\"openHubspotEditModal(footerItem)\"\n (keydown.space)=\"openHubspotEditModal(footerItem)\"\n title=\"Edit Hubspot Embed\"></i>\n </div>\n </ng-container>\n\n <ng-template #defaultForm>\n <div class=\"d-flex\">\n <h3 class=\"text-white mb-4\"> <span class=\"text-white\">Get in touch:</span></h3>\n <i *ngIf=\"canEditResourcesValue\"\n class=\"fa fa-edit in-page-edit-icon text-white cursor-pointer ms-3 mt-2\"\n (click)=\"openQuestionsEditModal()\"\n (keydown.enter)=\"openQuestionsEditModal()\"\n (keydown.space)=\"openQuestionsEditModal()\"\n title=\"Edit Questions\"></i>\n </div>\n <div class=\"contact-form\">\n <form [formGroup]=\"form\">\n <div class=\"mb-3\">\n <div class=\"email\">\n <div class=\"form-field\">\n <label for=\"email\">Email:</label>\n <div class=\"w-100\">\n <input type=\"text\"\n class=\"mb-1\"\n id=\"email\"\n formControlName=\"email\" />\n <pw-field-error-display [displayError]=\"\n !form.get('email').valid && (form.get('email').touched || submitted)\n \"\n errorMsg=\"Email is required\">\n </pw-field-error-display>\n </div>\n </div>\n <div class=\"form-field\">\n <label for=\"first_name\">First name:</label>\n <div class=\"w-100\">\n <input input type=\"text\"\n id=\"first_name\"\n formControlName=\"first_name\" />\n <pw-field-error-display [displayError]=\"\n !form.get('first_name').valid && (form.get('first_name').touched || submitted)\n \"\n errorMsg=\"First name is required\">\n </pw-field-error-display>\n </div>\n </div>\n <div class=\"form-field\">\n <label for=\"last_name\">Last name:</label>\n <input type=\"text\"\n id=\"last_name\"\n formControlName=\"last_name\" />\n </div>\n <div class=\"form-field\">\n <label for=\"company\">Company:</label>\n <input type=\"text\"\n id=\"company\"\n formControlName=\"company\" />\n </div>\n <div class=\"form-field\" *ngIf=\"hasValidOptions()\">\n <label for=\"psa\" class=\"select-label\">{{question}}</label>\n <p-dropdown\n formControlName=\"psa\"\n [options]=\"psaOptions\"\n [placeholder]=\"'Select PSA'\"\n styleClass=\"input-select\">\n </p-dropdown>\n </div>\n <div class=\"form-field\">\n <label for=\"enquiry\" class=\"select-label\">How can we help you?</label>\n <div class=\"enquiry-field\">\n <textarea id=\"enquiry\" formControlName=\"enquiry\" class=\"\">\n </textarea>\n <pw-field-error-display [displayError]=\"\n !form.get('enquiry').valid && (form.get('enquiry').touched || submitted)\n \"\n errorMsg=\"Enquiry is required\">\n </pw-field-error-display>\n </div>\n </div>\n </div>\n </div>\n <div class=\"text-end\">\n <div class=\"captcha-wrapper-container\"\n *ngIf=\"isCaptchaVerified\">\n <ngx-recaptcha2 [ngModelOptions]=\"{ standalone: true }\"\n [siteKey]=\"captchaKeyV2\"\n size=\"normal\"\n [(ngModel)]=\"recaptcha\"\n (success)=\"handleSuccess($event)\">\n </ngx-recaptcha2>\n </div>\n <button type=\"submit\"\n (click)=\"onSubmit()\"\n *ngIf=\"!isCaptchaVerified\"\n class=\"sign-btn sign-header-btn mt-3\">\n {{ 'Button.Submit' | transloco }}\n </button>\n </div>\n\n <div class=\"d-flex align-items-center mt-4\">\n <div class=\"icons d-flex align-items-center\">\n <a [eventTracker]=\"{\n category: 'youtube',\n action: 'click',\n label: 'cloudolive-landing-page-b',\n value: 1\n }\"\n [href]=\"youtubeUrl\"\n target=\"_blank\"\n rel=\"noopener noreferrer\">\n <img src=\"/assets/img/icons/youtube.png\"\n class=\"img-fluid youtube-icon\"\n width=\"54\"\n height=\"54\"\n alt=\"\" />\n </a>\n <a [eventTracker]=\"{\n category: 'linkedin',\n action: 'click',\n label: 'cloudolive-landing-page-b',\n value: 1\n }\"\n [href]=\"linkedInUrl\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n class=\"ms-3\">\n <img src=\"/assets/img/icons/social/linkedin.svg\"\n class=\"img-fluid linkedin-icon\"\n width=\"48\"\n height=\"48\"\n alt=\"\" />\n </a>\n <i *ngIf=\"canEditResourcesValue\"\n class=\"fa fa-edit in-page-edit-icon text-white cursor-pointer ms-3\"\n (click)=\"openSocialEditModal()\"\n (keydown.enter)=\"openSocialEditModal()\"\n (keydown.space)=\"openSocialEditModal()\"\n title=\"Edit Social Links & Company Name\"></i>\n </div>\n <div class=\"copyright text-white\">\n 2025 {{companyName}}.\n </div>\n </div>\n </form>\n </div>\n </ng-template>\n </div>\n </div>\n </div>\n</section>\n\n\n\n<ng-template #bookMeeting\n let-modal>\n <div class=\"modal-header\">\n <button type=\"button\"\n class=\"btn-close float-end\"\n aria-label=\"Close\"\n (click)=\"modal.dismiss()\">\n </button>\n </div>\n <div class=\"modal-body\">\n <h3 class=\"text-center modal-basic-title\">\n Thanks for getting in touch! Our team will be in contact shortly, or we\n can compare calendars now & schedule a time\n </h3>\n <button type=\"button\"\n [eventTracker]=\"{\n category: 'request-demo',\n action: 'click',\n label: 'cloudolive-landing-page-b',\n value: 1\n }\"\n (click)=\"navigateToBookMeeting()\"\n class=\"sign-btn sign-header-btn mx-auto d-block mb-3\">\n Let's do it\n </button>\n </div>\n</ng-template>\n\n\n<ng-template #editFooterLinksModal let-modal>\n <div class=\"modal-header\">\n <h5 class=\"modal-title\">Edit Footer Links</h5>\n <button type=\"button\" class=\"btn-close\" aria-label=\"Close\" (click)=\"modal.dismiss()\"></button>\n </div>\n\n <div class=\"modal-body\">\n <h4 class=\"mb-3\">Footer Links Section</h4>\n <div cdkDropList (cdkDropListDropped)=\"dropFooterLinks($event)\">\n <div *ngFor=\"let footer of editingFooterLinks.items; let i = index\" class=\"border p-3 mb-3\" cdkDrag>\n <div class=\"row\">\n <div class=\"col-md-5 mb-2\">\n <label for=\"footerTitle{{i}}\" class=\"form-label\">Title</label>\n <input id=\"footerTitle{{i}}\" class=\"form-control\" [(ngModel)]=\"footer.title\" />\n </div>\n <div class=\"col-md-5 mb-2\">\n <label for=\"footerPath{{i}}\" class=\"form-label\">Path</label>\n <input id=\"footerPath{{i}}\" class=\"form-control\" [(ngModel)]=\"footer.path\" />\n </div>\n <div class=\"col-md-2 d-flex justify-content-between align-items-center mt-4\">\n <i class=\"fa fa-trash in-page-trash-icon text-danger cursor-pointer\" (click)=\"removeFooterLink(i)\" (keydown.enter)=\"removeFooterLink(i)\" (keydown.space)=\"removeFooterLink(i)\"></i>\n <i class=\"fa fa-bars in-page-bars-icon cursor-move\" cdkDragHandle></i>\n </div>\n </div>\n\n <!-- Subtitles -->\n <div cdkDropList (cdkDropListDropped)=\"dropSubtitles(i, $event)\">\n <div *ngFor=\"let sub of footer.subtitles; let j = index\" class=\"row border p-3 mb-2 align-items-center\" cdkDrag>\n <div class=\"col-md-5\">\n <label for=\"subtitleTitle{{i}}{{j}}\" class=\"form-label\">Subtitle Title</label>\n <input id=\"subtitleTitle{{i}}{{j}}\" class=\"form-control\" [(ngModel)]=\"sub.title\" />\n </div>\n <div class=\"col-md-5\">\n <label for=\"subtitlePath{{i}}{{j}}\" class=\"form-label\">Subtitle Path</label>\n <input id=\"subtitlePath{{i}}{{j}}\" class=\"form-control\" [(ngModel)]=\"sub.path\" />\n </div>\n <div class=\"col-md-2 d-flex justify-content-between align-items-center mt-4\">\n <i class=\"fa fa-trash in-page-trash-icon text-danger cursor-pointer\" (click)=\"removeSubtitle(i, j)\" (keydown.enter)=\"removeSubtitle(i, j)\" (keydown.space)=\"removeSubtitle(i, j)\"></i>\n <i class=\"fa fa-bars cursor-move in-page-bars-icon\" cdkDragHandle></i>\n </div>\n </div>\n </div>\n\n <button class=\"btn btn-outline-primary btn-sm mt-2\" (click)=\"addSubtitle(i)\">\n + Add Subtitle\n </button>\n </div>\n </div>\n\n <button class=\"btn btn-primary mt-3\" (click)=\"addFooterLink()\">\n + Add Footer Link\n </button>\n </div>\n\n <div class=\"modal-footer\">\n <button class=\"btn btn-secondary\" (click)=\"modal.dismiss()\">Cancel</button>\n <button class=\"btn btn-primary\" (click)=\"saveFooterLinks(modal)\">Save</button>\n </div>\n</ng-template>\n\n\n\n\n\n<ng-template #logoModal let-modal>\n <div class=\"modal-header\">\n <h5 class=\"modal-title\">Upload Logo</h5>\n <button type=\"button\" class=\"btn-close\" aria-label=\"Close\" (click)=\"modal.dismiss()\"></button>\n </div>\n <div class=\"modal-body\">\n <pw-custom-uploader\n [aspectRatio]=\"'fullLogo'\"\n [title]=\"'Main Contrast Logo'\"\n [controlName]=\"'logo_main_contrast'\"\n [previewData]=\"previewData\"\n (saveEvent)=\"onSaveFile($event)\">\n </pw-custom-uploader>\n </div>\n</ng-template>\n\n\n\n<ng-template #hubspotEditModal let-modal>\n <div class=\"modal-header\">\n <h5 class=\"modal-title\">Edit Hubspot Embed</h5>\n <button type=\"button\" class=\"btn-close\" aria-label=\"Close\" (click)=\"modal.dismiss()\"></button>\n </div>\n <div class=\"modal-body\">\n <div class=\"mb-3\">\n <label for=\"hubspotId\" class=\"form-label\">Hubspot ID</label>\n <input id=\"hubspotId\" [(ngModel)]=\"editingHubspotId\" class=\"form-control\" />\n </div>\n <div class=\"mb-3\">\n <label for=\"hubspotEmbedDiv\" class=\"form-label\">Embed DIV</label>\n <textarea id=\"hubspotEmbedDiv\" [(ngModel)]=\"editingHubspotHtml\" rows=\"8\" class=\"form-control\"></textarea>\n </div>\n </div>\n <div class=\"modal-footer\">\n <button class=\"btn btn-primary\" (click)=\"saveHubspotHtml(modal)\">Save</button>\n <button class=\"btn btn-secondary\" (click)=\"modal.dismiss()\">Cancel</button>\n </div>\n</ng-template>\n\n\n<ng-template #socialEditModal let-modal>\n <div class=\"modal-header\">\n <h5 class=\"modal-title\">Edit Social Links & Company Name</h5>\n <button type=\"button\" class=\"btn-close\" aria-label=\"Close\" (click)=\"modal.dismiss()\"></button>\n </div>\n <div class=\"modal-body\">\n <div class=\"mb-3\">\n <label for=\"youtubeUrl\" class=\"form-label\">YouTube URL</label>\n <input id=\"youtubeUrl\" [(ngModel)]=\"editingYoutubeUrl\" class=\"form-control\" />\n </div>\n <div class=\"mb-3\">\n <label for=\"linkedinUrl\" class=\"form-label\">LinkedIn URL</label>\n <input id=\"linkedinUrl\" [(ngModel)]=\"editingLinkedInUrl\" class=\"form-control\" />\n </div>\n <div class=\"mb-3\">\n <label for=\"companyName\" class=\"form-label\">Company Name</label>\n <input id=\"companyName\" [(ngModel)]=\"editingCompanyName\" class=\"form-control\" />\n </div>\n </div>\n <div class=\"modal-footer\">\n <button class=\"btn btn-primary\" (click)=\"saveSocialLinks(modal)\">Save</button>\n <button class=\"btn btn-secondary\" (click)=\"modal.dismiss()\">Cancel</button>\n </div>\n</ng-template>\n\n\n\n<ng-template #questionsEditModal let-modal>\n <div class=\"modal-header\">\n <h5 class=\"modal-title\">Edit Questions</h5>\n <button type=\"button\" class=\"btn-close\" aria-label=\"Close\" (click)=\"modal.dismiss()\"></button>\n </div>\n\n <div class=\"modal-body\">\n <h4 class=\"mb-3\">Questions Section</h4>\n <div cdkDropList (cdkDropListDropped)=\"dropQuestions($event)\">\n <div *ngFor=\"let q of editingQuestions; let i = index\" class=\"border p-3 mb-3\" cdkDrag>\n <div class=\"row\">\n <div class=\"col-md-11 mb-2\">\n <label for=\"questionText{{i}}\" class=\"form-label\">Question</label>\n <input id=\"questionText{{i}}\" class=\"form-control\" [(ngModel)]=\"q.question\" placeholder=\"Enter question\" />\n </div>\n <div class=\"col-md-1 d-flex justify-content-end align-items-start mt-4\">\n <i class=\"fa fa-bars in-page-bars-icon cursor-move\" cdkDragHandle></i>\n </div>\n </div>\n\n <!-- Options Section -->\n <div cdkDropList (cdkDropListDropped)=\"dropQuestionOptions(i, $event)\">\n <div *ngFor=\"let opt of q.options; let j = index\" class=\"row border p-3 mb-2 align-items-center\" cdkDrag>\n <div class=\"col-md-7 mb-2\">\n <label for=\"questionOption{{i}}{{j}}\" class=\"form-label\">Option</label>\n <input id=\"questionOption{{i}}{{j}}\" class=\"form-control\" [(ngModel)]=\"opt.option\" placeholder=\"Enter option\" />\n </div>\n <div class=\"col-md-2 d-flex justify-content-between align-items-center mt-4\">\n <i class=\"fa fa-trash in-page-trash-icon text-danger cursor-pointer\" (click)=\"removeQuestionOption(i, j)\" (keydown.enter)=\"removeQuestionOption(i, j)\" (keydown.enter)=\"removeQuestionOption(i, j)\"></i>\n <i class=\"fa fa-bars in-page-bars-icon cursor-move\" cdkDragHandle></i>\n </div>\n </div>\n </div>\n\n <button class=\"btn btn-outline-primary btn-sm mt-2\" (click)=\"addQuestionOption(i)\">+ Add Option</button>\n </div>\n </div>\n\n <button class=\"btn btn-primary mt-3\" (click)=\"addNewQuestion()\">+ Add Question</button>\n </div>\n\n <div class=\"modal-footer\">\n <button class=\"btn btn-secondary\" (click)=\"modal.dismiss()\">Cancel</button>\n <button class=\"btn btn-primary\" (click)=\"saveQuestions(modal)\">Save</button>\n </div>\n</ng-template>\n\n\n\n","import { CommonModule } from '@angular/common';\nimport { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { RouterModule } from '@angular/router';\n\nimport { AdminModuleUtilsModule } from '@posiwise/admin-module-utils';\nimport { CoreTranslocoModule } from '@posiwise/core-transloco';\nimport { DirectivesModule } from '@posiwise/directives';\nimport { PipesModule } from '@posiwise/pipes';\nimport { FieldErrorDisplayModule } from '@posiwise/utils';\n\nimport { NgxCaptchaModule } from 'ngx-captcha';\nimport { DropdownModule } from 'primeng/dropdown';\n\nimport { Trial4ContactUsComponent } from './resource-contact-us.component';\n\n@NgModule({\n declarations: [Trial4ContactUsComponent],\n imports: [\n CommonModule,\n FieldErrorDisplayModule,\n DropdownModule,\n ReactiveFormsModule,\n NgxCaptchaModule,\n RouterModule,\n PipesModule,\n FormsModule,\n CoreTranslocoModule,\n AdminModuleUtilsModule,\n DirectivesModule\n ],\n exports: [\n Trial4ContactUsComponent,\n CommonModule,\n FieldErrorDisplayModule,\n DropdownModule,\n ReactiveFormsModule,\n NgxCaptchaModule,\n RouterModule,\n PipesModule,\n FormsModule,\n CoreTranslocoModule,\n AdminModuleUtilsModule,\n DirectivesModule\n ],\n schemas: [CUSTOM_ELEMENTS_SCHEMA]\n})\nexport class Trial4SharedContactUsModule {}\n","import { moveItemInArray } from '@angular/cdk/drag-drop';\nimport {\n Component,\n Injector,\n Input,\n OnChanges,\n OnInit,\n SimpleChanges,\n TemplateRef,\n ViewChild\n} from '@angular/core';\nimport { DomSanitizer } from '@angular/platform-browser';\n\nimport { AdminService } from '@posiwise/admin-module-utils';\nimport { AppBaseComponent } from '@posiwise/app-base-component';\nimport { User } from '@posiwise/common-utilities';\nimport { HelperService } from '@posiwise/helper-service';\nimport { CustomUploaderComponent } from '@posiwise/utils';\n\nimport { NgbModal } from '@ng-bootstrap/ng-bootstrap';\n\n@Component({\n selector: 'pw-demo-card',\n templateUrl: './demo-cards.component.html',\n styleUrls: ['./demo-cards.component.scss']\n})\nexport class DemoCardsComponent extends AppBaseComponent implements OnInit, OnChanges {\n @Input() user: User;\n @Input() userLoggedIn: boolean;\n\n bookingLinks;\n editingBookingLinks = [];\n\n domainId = this.appConfig?.domain_id;\n subscriptionId: string;\n\n canEditResourcesValue;\n\n @ViewChild('editBookLinksModal', { static: true })\n editBookLinksModal!: TemplateRef<CustomUploaderComponent>;\n\n constructor(\n private readonly sanitizer: DomSanitizer,\n private readonly modalService: NgbModal,\n private readonly adminService: AdminService,\n injector: Injector\n ) {\n super(injector);\n }\n\n ngOnInit() {\n if (this.userLoggedIn) {\n this.localStorage.getItem$('product').subscribe(res => {\n const data = res ? JSON.parse(res) : null;\n this.subscriptionId = data?.subscriptionId;\n });\n }\n\n this.bookingLinks = (this.appConfig?.pages_config?.book_demo?.items ?? [])\n .filter(link => link?.url)\n .map(link => ({\n ...link,\n // NOSONAR: Trusted iframe URL content is handled safely here\n url: this.sanitizer.bypassSecurityTrustResourceUrl(link.url) // NOSONAR\n }));\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes['user'] || changes['userLoggedIn']) {\n if (this.userLoggedIn && this.user) {\n this.updateCanEditResourcesValue();\n }\n }\n }\n\n openEditBookLinks(modal) {\n this.editingBookingLinks = JSON.parse(\n JSON.stringify(this.appConfig?.pages_config?.book_demo?.items ?? [])\n );\n this.modalService.open(modal, { size: 'lg', centered: true, windowClass: 'modal-holder' });\n }\n\n addBookingLink() {\n this.editingBookingLinks.push({ title: '', url: '' });\n }\n\n removeBookDemoLink(i: number) {\n this.editingBookingLinks.splice(i, 1);\n }\n\n dropBookingLink(event) {\n moveItemInArray(this.editingBookingLinks, event.previousIndex, event.currentIndex);\n }\n\n saveBookingLinks(modal) {\n this.adminService\n .updateDomainConfig(this.domainId, {\n book_demo: {\n ...this.appConfig?.pages_config?.book_demo,\n items: this.editingBookingLinks\n },\n subscription_id: this.subscriptionId\n })\n .subscribe(() => {\n this.toast.success('Booking links updated');\n this.bookingLinks = this.editingBookingLinks\n .filter(link => link?.url)\n .map(link => ({\n ...link,\n // NOSONAR: Trusted iframe URL content is handled safely here\n url: this.sanitizer.bypassSecurityTrustResourceUrl(link.url) // NOSONAR\n }));\n this.appConfig.pages_config.book_demo.items = [...this.editingBookingLinks]; // ✅ Like CTAs\n modal.close();\n });\n }\n private updateCanEditResourcesValue(): void {\n this.canEditResourcesValue = HelperService.canEditResources(\n this.user,\n this.userLoggedIn,\n this.permissionService\n );\n }\n\n canEditResources(): boolean {\n return this.canEditResourcesValue;\n }\n}\n","<!-- EDIT ICON -->\n\n<!-- DEMO LINKS -->\n<div class=\"row text-center\">\n <i *ngIf=\"canEditResourcesValue\"\n class=\"fa fa-edit in-page-edit-icon mb-3 cursor-pointer\"\n title=\"Edit Booking Links\"\n (click)=\"openEditBookLinks(editBookLinksModal)\"\n (keydown.enter)=\"openEditBookLinks(editBookLinksModal)\"\n (keydown.space)=\"openEditBookLinks(editBookLinksModal)\">\n </i>\n <div class=\"col-md-6 col-lg-4\" *ngFor=\"let link of bookingLinks\">\n <h5 class=\"mb-3\" *ngIf=\"link?.url && link?.title\">{{ link?.title }}</h5>\n <iframe *ngIf=\"link?.url\"\n [src]=\"link?.url\"\n width=\"100%\"\n title=\"Booking frame\"\n height=\"600\"\n class=\"iframe-no-border\">\n </iframe>\n </div>\n</div>\n\n<!-- MODAL TEMPLATE -->\n<ng-template #editBookLinksModal let-modal>\n <div class=\"modal-header\">\n <h5 class=\"modal-title\">Edit Book Demo Links</h5>\n <button type=\"button\" class=\"btn-close\" (click)=\"modal.dismiss()\" aria-label=\"Close\"></button>\n </div>\n\n <div class=\"modal-body\">\n <div cdkDropList (cdkDropListDropped)=\"dropBookingLink($event)\">\n <div *ngFor=\"let item of editingBookingLinks; let i = index\" class=\"card p-3 mb-3\" cdkDrag>\n <div class=\"row\">\n <div class=\"col-md-5\">\n <label for=\"demoLinkTitle{{i}}\" class=\"form-label\">Link Title</label>\n <input id=\"demoLinkTitle{{i}}\" class=\"form-control\" [(ngModel)]=\"item.title\" />\n </div>\n <div class=\"col-md-5\">\n <label for=\"demoLinkUrl{{i}}\" class=\"form-label\">Link URL</label>\n <input id=\"demoLinkUrl{{i}}\" class=\"form-control\" [(ngModel)]=\"item.url\" />\n </div>\n <div class=\"col-sm-1 d-flex justify-content-end mt-3\">\n <i\n ngbTooltip=\"Remove\"\n (click)=\"removeBookDemoLink(i)\"\n (keydown.enter)=\"removeBookDemoLink(i)\"\n (keydown.space)=\"removeBookDemoLink(i)\"\n class=\"fa fa-trash in-page-trash-icon delete-icon text-danger\"\n aria-hidden=\"true\"\n ></i>\n </div>\n\n <div class=\"col-sm-1 d-flex justify-content-end mt-3\">\n <i\n class=\"fa fa-bars in-page-bars-icon cursor-move\"\n cdkDragHandle\n ngbTooltip=\"Drag to reorder\"\n aria-hidden=\"true\"\n ></i>\n </div>\n </div>\n\n </div>\n </div>\n\n <button class=\"btn btn-outline-primary mt-3\" (click)=\"addBookingLink()\">\n <i class=\"fa fa-plus me-1\"></i> Add Book Demo Link\n </button>\n </div>\n\n <div class=\"modal-footer\">\n <button class=\"btn btn-secondary\" (click)=\"modal.dismiss()\">Cancel</button>\n <button class=\"btn btn-primary\" (click)=\"saveBookingLinks(modal)\">Save</button>\n </div>\n</ng-template>\n","import { DragDropModule } from '@angular/cdk/drag-drop';\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\n\nimport { AdminModuleUtilsModule } from '@posiwise/admin-module-utils';\nimport { DirectivesModule } from '@posiwise/directives';\nimport { PipesModule } from '@posiwise/pipes';\n\nimport { NgbModalModule } from '@ng-bootstrap/ng-bootstrap';\n\nimport { DemoCardsComponent } from './demo-cards.component';\n\n@NgModule({\n declarations: [DemoCardsComponent],\n imports: [\n CommonModule,\n FormsModule,\n DragDropModule,\n NgbModalModule,\n DirectivesModule,\n PipesModule,\n AdminModuleUtilsModule\n ],\n exports: [DemoCardsComponent]\n})\nexport class DemoCardsModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i2","i3","i4","i5","i6"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"posiwise-resource-contact-us.mjs","sources":["../../../../libs/resource-contact-us/src/lib/resource-contact-us/resource-contact-us.component.ts","../../../../libs/resource-contact-us/src/lib/resource-contact-us/resource-contact-us.component.html","../../../../libs/resource-contact-us/src/lib/resource-contact-us/resource-contact-us.module.ts","../../../../libs/resource-contact-us/src/lib/demo-cards/demo-cards.component.ts","../../../../libs/resource-contact-us/src/lib/demo-cards/demo-cards.component.html","../../../../libs/resource-contact-us/src/lib/demo-cards/demo-cards.module.ts","../../../../libs/resource-contact-us/src/posiwise-resource-contact-us.ts"],"sourcesContent":["import { moveItemInArray } from '@angular/cdk/drag-drop';\nimport { DOCUMENT } from '@angular/common';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n Inject,\n Injector,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n SimpleChanges,\n TemplateRef,\n ViewChild\n} from '@angular/core';\nimport { UntypedFormBuilder, UntypedFormGroup, Validators } from '@angular/forms';\nimport { DomSanitizer } from '@angular/platform-browser';\n\nimport { AdminService } from '@posiwise/admin-module-utils';\nimport { AppBaseComponent } from '@posiwise/app-base-component';\nimport { AbTestService, AuthService, ValidationService } from '@posiwise/common-services';\nimport { User } from '@posiwise/common-utilities';\nimport { HelperService } from '@posiwise/helper-service';\nimport { CrmService } from '@posiwise/smart-crm-shared';\nimport { CustomUploaderComponent } from '@posiwise/utils';\n\nimport { StatusCodes } from 'http-status-codes';\nimport Swal from 'sweetalert2';\n\nimport { NgbModal } from '@ng-bootstrap/ng-bootstrap';\n\nimport { ResourceModalContext } from '../shared/resource-modal.interface';\n\n@Component({\n selector: 'pw-trial-4-contact-us',\n templateUrl: './resource-contact-us.component.html',\n styleUrls: ['./resource-contact-us.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class Trial4ContactUsComponent\n extends AppBaseComponent\n implements OnInit, AfterViewInit, OnChanges, OnDestroy\n{\n @ViewChild('footerSection', { static: true }) footerSection!: ElementRef;\n @ViewChild('bookMeeting', { static: true }) content: TemplateRef<ResourceModalContext>;\n @ViewChild('editFooterLinksModal') editFooterLinksModal: TemplateRef<CustomUploaderComponent>;\n @ViewChild('logoModal') logoModal: TemplateRef<CustomUploaderComponent>;\n @ViewChild('logoUploader') logoUploader: CustomUploaderComponent;\n @ViewChild('hubspotEditModal') hubspotEditModal: TemplateRef<ResourceModalContext>;\n @ViewChild('socialEditModal') socialEditModal: TemplateRef<CustomUploaderComponent>;\n @ViewChild('questionsEditModal') questionsEditModal: TemplateRef<CustomUploaderComponent>;\n\n editingQuestions = [];\n isHubspotReady: boolean;\n\n isFooterVisible = false;\n private observer?: IntersectionObserver;\n\n openQuestionsEditModal(): void {\n this.editingQuestions = JSON.parse(JSON.stringify(this.editingQuestions ?? []));\n this.modalService.open(this.questionsEditModal, { centered: true, size: 'lg' });\n }\n\n editingYoutubeUrl: string;\n editingLinkedInUrl: string;\n editingCompanyName: string;\n\n form: UntypedFormGroup;\n\n recaptcha = null;\n\n previewData;\n\n @Input() subscriptionId = this.appConfig.crm.subscription_id;\n @Input() sourceId = this.appConfig.crm.source_id;\n @Input() masterSubscriptionId = this.appConfig.master_subscription.subscription_id;\n @Input() experimentName;\n @Input() microserviceName;\n @Input() shardName;\n @Input() user: User;\n\n canEditResourcesValue = false;\n @Input() userLoggedIn: boolean;\n\n id;\n\n logo = this.appConfig?.company?.logos?.main_contrast?.url;\n trialBgImage2 = this.appConfig?.signup_config.trial?.image_bg2?.url;\n tosId = this.appConfig?.main_tos_id;\n description = this.appConfig.company.description;\n email = this.appConfig.company.email;\n companyName = this.appConfig.company.name;\n street = this.appConfig.company.street;\n questions = this.appConfig?.pages_config?.contact_us?.questions;\n hubspot = this.appConfig?.pages_config?.contact_us?.hubspot;\n footerLinks = this.appConfig?.pages_config?.footer_links?.items;\n\n footerLinksData = this.appConfig?.pages_config?.footer_links;\n\n youtubeUrl = this.appConfig.social?.youtube_url;\n linkedInUrl = this.appConfig.social?.linkedin_url;\n domainId = this.appConfig.domain_id;\n\n editingEmail = this.email;\n isEditingEmail = false;\n\n editingHubspotHtml: string;\n editingHubspotId: string;\n captchaKeyV2: string;\n hubspotHtml;\n\n abTests;\n\n submitted = false;\n isCaptchaVerified = false;\n isEmailValid = true;\n isEditingStreet = false;\n\n psaOptions;\n\n question;\n\n editingFooterLinks = {\n items: []\n };\n editingStreet: string;\n\n constructor(\n private readonly fb: UntypedFormBuilder,\n private readonly authService: AuthService,\n private readonly crmService: CrmService,\n private readonly sanitizer: DomSanitizer,\n private readonly adminService: AdminService,\n injector: Injector,\n private readonly abTestService: AbTestService,\n private readonly modalService: NgbModal,\n private readonly cdr: ChangeDetectorRef,\n @Inject(DOCUMENT) private readonly document: Document\n ) {\n super(injector);\n this.captchaKeyV2 = this.appConfig.integrations.captcha_key_V2;\n this.contactUsForm();\n }\n\n ngOnInit() {\n setTimeout(() => (this.isHubspotReady = true), 2000);\n if (this.userLoggedIn) {\n this.localStorage.getItem$('product').subscribe(res => {\n const data = res ? JSON.parse(res) : null;\n this.id = data?.subscriptionId;\n });\n }\n this.previewData = {\n url: this.logo,\n name: 'logo_main_contrast.png'\n };\n this.editingStreet = this.street;\n if (Array.isArray(this.appConfig.pages_config?.ab_tests)) {\n this.abTests = this.appConfig.pages_config.ab_tests.find(\n test => test.description === 'contact-us'\n );\n this.microserviceName = this.abTests?.microservice_name;\n this.experimentName = this.abTests?.experiment_name;\n this.shardName = this.abTests?.db_shard;\n }\n\n const footerItem = this.getFooterHubspotForm();\n if (footerItem?.div) {\n // NOSONAR: Trusted HTML content is handled safely here\n this.hubspotHtml = this.sanitizer.bypassSecurityTrustHtml(footerItem.div); // NOSONAR\n }\n this.editingQuestions = this.questions;\n this.question = this.questions?.[0]?.question;\n this.psaOptions = [\n { label: 'Select PSA', value: '' },\n ...(this.questions?.[0]?.options ?? [])\n .filter(q => q.option?.trim())\n .map(q => ({\n label: q.option,\n value: q.option\n }))\n ];\n }\n ngOnChanges(changes: SimpleChanges) {\n if (changes['user'] || changes['userLoggedIn']) {\n if (this.userLoggedIn && this.user) {\n this.updateCanEditResourcesValue();\n }\n }\n }\n\n openLogoEditModal(): void {\n this.modalService.open(this.logoModal, {\n centered: true,\n size: 'md'\n });\n }\n\n onSaveFile(event): void {\n const formData = new FormData();\n const data = { subscription_id: this.subscriptionId };\n\n if (event.file instanceof File) {\n data[event.name] = event.file;\n } else if (event.file === null) {\n data[`remove_${event.name}`] = true;\n }\n\n for (const key in data) {\n formData.append(key, data[key]);\n }\n\n this.adminService.updateDomainConfig(this.domainId, formData).subscribe(() => {\n if (event.file) {\n this.logo = URL.createObjectURL(event.file);\n this.modalService.dismissAll();\n }\n this.toast.success(event.file ? 'Logo updated' : 'Logo removed');\n });\n }\n\n saveQuestions(modal): void {\n const updateData = {\n contact_us: {\n ...this.appConfig.pages_config?.contact_us,\n questions: this.editingQuestions\n },\n subscription_id: this.id\n };\n\n this.adminService.updateDomainConfig(this.domainId, updateData).subscribe(() => {\n this.questions = this.editingQuestions;\n this.toast.success('Questions updated');\n this.question = this.editingQuestions?.[0]?.question;\n if (this.editingQuestions?.[0]?.options?.length > 0) {\n this.psaOptions = [\n { label: 'Select PSA', value: '' },\n ...(this.questions?.[0]?.options ?? [])\n .filter(q => q.option?.trim())\n .map(q => ({\n label: q.option,\n value: q.option\n }))\n ];\n } else {\n this.psaOptions = [];\n }\n\n modal.close();\n });\n }\n\n addNewQuestion(): void {\n this.editingQuestions.push({ question: '', options: [] });\n }\n\n addQuestionOption(qIndex: number): void {\n this.editingQuestions[qIndex].options.push({ option: '' });\n }\n\n removeQuestionOption(qIndex: number, optIndex: number): void {\n this.editingQuestions[qIndex].options.splice(optIndex, 1);\n }\n\n dropQuestions(event): void {\n moveItemInArray(this.editingQuestions, event.previousIndex, event.currentIndex);\n }\n\n dropQuestionOptions(qIndex: number, event): void {\n moveItemInArray(\n this.editingQuestions[qIndex].options,\n event.previousIndex,\n event.currentIndex\n );\n }\n\n openSocialEditModal(): void {\n this.editingYoutubeUrl = this.youtubeUrl;\n this.editingLinkedInUrl = this.linkedInUrl;\n this.editingCompanyName = this.companyName;\n\n this.modalService.open(this.socialEditModal, { centered: true, size: 'lg' });\n }\n\n saveSocialLinks(modal): void {\n const updateData = {\n youtube_url: this.editingYoutubeUrl,\n linkedin_url: this.editingLinkedInUrl,\n company_name: this.editingCompanyName,\n subscription_id: this.id\n };\n\n this.adminService.updateDomainConfig(this.domainId, updateData).subscribe(() => {\n this.youtubeUrl = this.editingYoutubeUrl;\n this.linkedInUrl = this.editingLinkedInUrl;\n this.companyName = this.editingCompanyName;\n this.toast.success('Social links and company name updated');\n modal.close();\n });\n }\n\n hasValidOptions(): boolean {\n return this.questions?.[0]?.options?.some(opt => opt.option?.trim());\n }\n\n ngAfterViewInit() {\n this.watchIframeHeightChange();\n this.observer = new IntersectionObserver(\n ([entry]) => {\n if (entry.isIntersecting) {\n this.isFooterVisible = true;\n this.cdr.detectChanges();\n this.observer?.disconnect();\n }\n },\n { threshold: 0.1 }\n );\n\n this.observer.observe(this.footerSection.nativeElement);\n }\n\n openEditFooterLinksModal(content): void {\n this.footerLinksData = this.footerLinksData ?? {};\n this.footerLinksData.items = this.footerLinksData.items ?? [];\n this.editingFooterLinks = JSON.parse(JSON.stringify(this.footerLinksData));\n\n this.modalService.open(content, {\n size: 'lg',\n centered: true,\n windowClass: 'modal-holder'\n });\n }\n\n private watchIframeHeightChange() {\n const iframe = this.document.querySelector('.hubspot-container');\n if (!iframe) return;\n const interval = setInterval(() => {\n const newHeight = iframe['offsetHeight'];\n if (newHeight === 250) {\n clearInterval(interval);\n this.callAbTestFinish();\n }\n }, 300);\n }\n\n // New method to handle Hubspot content loading\n onHubspotLoad(event: Event) {\n const container = event.target as HTMLDivElement;\n container.classList.add('content-loaded');\n\n // Optional: Trigger layout recalculation\n setTimeout(() => {\n window.dispatchEvent(new Event('resize'));\n }, 100);\n }\n\n private callAbTestFinish() {\n if (this.experimentName && this.microserviceName) {\n this.abTestService\n .finishABExperiment(this.experimentName, this.microserviceName)\n .subscribe(() => {\n this.modalService.open(this.content, {\n centered: true,\n windowClass: 'modal-holder'\n });\n });\n }\n }\n\n contactUsForm(): void {\n this.form = this.fb.group({\n first_name: ['', Validators.required],\n last_name: [''],\n company: [''],\n psa: [''],\n enquiry: ['', Validators.required],\n email: ['', Validators.required]\n });\n }\n\n onSubmit() {\n this.submitted = true;\n if (this.form.valid) {\n this.isCaptchaVerified = true;\n this.submitted = false;\n }\n }\n\n handleSuccess(token: string) {\n if (token) {\n this.authService.validateReCaptcha(token).subscribe((isSuccess: boolean) => {\n if (isSuccess && this.form.valid) {\n const data = { ...this.form.getRawValue() };\n const formattedEnquiry = `${data.enquiry}; Question: ${this.question}; Answer: ${data.psa}`;\n const postData = {\n first_name: `${data.first_name}`,\n last_name: `${data.first_name}`,\n company: `${data.first_name}`,\n email: `${data.email}`,\n enquiry: this.psaOptions.length ? formattedEnquiry : `${data.enquiry}`,\n psa: data.psa,\n subscription_id: this.subscriptionId,\n crm_source_id: this.sourceId,\n master_subscription_id: this.masterSubscriptionId,\n notify_user: false,\n is_manual: false\n };\n\n this.crmService.postCrmLead(this.subscriptionId, postData).subscribe(resp => {\n // example of snippet to close the experiment and track in GA\n if (resp?.status === StatusCodes.OK) {\n this.googleAnalyticsService.sendEvent(\n 'new-lead-registration', // category, eg: videos\n 'subscribe-success', // action, eg: Play\n 'coming-soon-three', // label, eg: Chappy\n 1 // value, eg: 10\n );\n if (this.experimentName && this.microserviceName) {\n this.abTestService\n .finishABExperiment(this.experimentName, this.microserviceName)\n .subscribe(() => {\n this.modalService.open(this.content, {\n centered: true,\n windowClass: 'modal-holder'\n });\n });\n } else {\n Swal.fire(resp.message);\n }\n }\n this.form.reset();\n this.isCaptchaVerified = false;\n });\n }\n });\n }\n }\n\n scrollToTop() {\n this.document.documentElement.scrollTop = 0;\n }\n\n getFooterHubspotForm() {\n if (!this.hubspot?.length) {\n return null;\n }\n return this.hubspot.find(item => item.position === 'footer') ?? null;\n }\n\n navigateToBookMeeting() {\n const bookDemoUrl =\n this.appConfig?.signup_config?.trial?.book_demo_url ??\n 'https://calendly.com/cloudolive';\n window.open(bookDemoUrl, '_blank', 'noreferrer noopener');\n }\n\n validateEmail() {\n const email = this.form.get('email').value;\n if (email) {\n this.isEmailValid = ValidationService.email(email);\n } else {\n this.isEmailValid = true;\n }\n }\n\n addFooterLink(): void {\n this.editingFooterLinks.items.push({\n title: '',\n path: '',\n subtitles: []\n });\n }\n\n removeFooterLink(index: number): void {\n this.editingFooterLinks.items.splice(index, 1);\n }\n\n addSubtitle(footerIndex: number): void {\n this.editingFooterLinks.items[footerIndex].subtitles.push({\n title: '',\n path: ''\n });\n }\n\n removeSubtitle(footerIndex: number, subtitleIndex: number): void {\n this.editingFooterLinks.items[footerIndex].subtitles.splice(subtitleIndex, 1);\n }\n\n dropFooterLinks(event) {\n moveItemInArray(this.editingFooterLinks.items, event.previousIndex, event.currentIndex);\n }\n\n dropSubtitles(footerIndex: number, event) {\n moveItemInArray(\n this.editingFooterLinks.items[footerIndex].subtitles,\n event.previousIndex,\n event.currentIndex\n );\n }\n\n saveFooterLinks(modal): void {\n const updatedConfig = {\n footer_links: this.editingFooterLinks,\n subscription_id: this.id\n };\n\n this.adminService\n .updateDomainConfig(this.appConfig?.domain_id, updatedConfig)\n .subscribe(() => {\n this.toast.success('Footer links updated');\n this.footerLinks = [...this.editingFooterLinks.items];\n this.footerLinksData = { ...this.editingFooterLinks };\n modal.close();\n });\n }\n\n saveEmail(): void {\n this.email = this.editingEmail;\n\n this.adminService\n .updateDomainConfig(this.appConfig?.domain_id, {\n company_email: this.editingEmail,\n subscription_id: this.id\n })\n .subscribe(() => {\n this.toast.success('Email updated');\n this.isEditingEmail = false;\n });\n }\n\n saveStreet(): void {\n this.adminService\n .updateDomainConfig(this.appConfig?.domain_id, {\n company_address: this.editingStreet,\n subscription_id: this.id\n })\n .subscribe(() => {\n this.toast.success('Street updated');\n this.street = this.editingStreet;\n this.isEditingStreet = false;\n });\n }\n\n cancelStreet(): void {\n this.editingStreet = this.street;\n this.isEditingStreet = false;\n }\n\n openHubspotEditModal(footerItem): void {\n this.editingHubspotHtml = footerItem.div;\n this.editingHubspotId = footerItem.id;\n this.modalService.open(this.hubspotEditModal, { centered: true, size: 'lg' });\n }\n\n saveHubspotHtml(modal): void {\n const updatedConfig = {\n contact_us: {\n ...this.appConfig?.pages_config?.contact_us,\n hubspot: [\n {\n id: '7423639',\n position: 'footer',\n div: this.editingHubspotHtml\n }\n ]\n },\n subscription_id: this.id\n };\n\n this.adminService\n .updateDomainConfig(this.appConfig?.domain_id, updatedConfig)\n .subscribe(() => {\n // NOSONAR: Trusted HTML content is handled safely here\n this.hubspotHtml = this.sanitizer.bypassSecurityTrustHtml(this.editingHubspotHtml); // NOSONAR\n this.toast.success('Hubspot Embed updated');\n modal.close();\n });\n }\n private updateCanEditResourcesValue(): void {\n this.canEditResourcesValue = HelperService.canEditResources(\n this.user,\n this.userLoggedIn,\n this.permissionService\n );\n }\n\n canEditResources(): boolean {\n return this.canEditResourcesValue;\n }\n\n override ngOnDestroy(): void {\n this.observer?.disconnect();\n }\n}\n","<section #footerSection class=\"bg-black text-white py-5 footer-section\">\n <div class=\"container\" *ngIf=\"isFooterVisible\">\n <div class=\"row\">\n\n <!-- LEFT COLUMN -->\n <div class=\"col-md-6 mb-4 d-flex flex-column justify-content-between\" [ngClass]=\"{ 'site-column': getFooterHubspotForm() }\">\n <div>\n <h3 class=\"mb-4 d-flex align-items-center\">\n <span class=\"me-2 text-white\">Site Map:</span>\n <i *ngIf=\"canEditResourcesValue\" class=\"fa fa-edit in-page-edit-icon cursor-pointer text-white ms-3\" (click)=\"openEditFooterLinksModal(editFooterLinksModal)\" (keydown.enter)=\"openEditFooterLinksModal(editFooterLinksModal)\" (keydown.space)=\"openEditFooterLinksModal(editFooterLinksModal)\" ngbTooltip=\"Edit Footer Links\"></i>\n </h3>\n <ul class=\"mt-4\">\n <li routerLink=\"/\"\n class=\"cursor-pointer user-info-label link-label\"> Home </li>\n <li *ngFor=\"let link of footerLinks\" [routerLink]=\"link?.path\"\n class=\"cursor-pointer user-info-label link-label mt-4\"><span *ngIf=\"link?.title\">{{link?.title}}</span> </li>\n <li routerLink=\"/login\"\n class=\"cursor-pointer user-info-label mt-4 link-label\"> Log in </li>\n <li [routerLink]=\"'/privacy-and-tos/' + tosId\"\n class=\"cursor-pointer user-info-label mt-4 link-label\"> Privacy statement </li>\n </ul>\n <p class=\"address-section email-section mb-4\">\n <span class=\"user-info-label\">Email: </span>\n <ng-container *ngIf=\"!isEditingEmail; else editEmail\">\n <span class=\"user-info\">{{ email }}</span>\n <i *ngIf=\"canEditResourcesValue\" class=\"fa fa-edit in-page-edit-icon text-white cursor-pointer ms-3\" (click)=\"isEditingEmail = true\" (keydown.enter)=\"isEditingEmail = true\" (keydown.space)=\"isEditingEmail = true\"></i>\n </ng-container>\n\n <ng-template #editEmail>\n <input\n class=\"form-control d-inline w-auto\"\n [(ngModel)]=\"editingEmail\"\n />\n <button class=\"btn btn-sm btn-primary ms-2\" (click)=\"saveEmail()\">Save</button>\n <button class=\"btn btn-sm btn-secondary ms-2\" (click)=\"isEditingEmail = false\">Cancel</button>\n </ng-template>\n </p>\n <span class=\"email-section mt-3 address-text\">\n <span class=\"user-info-label\">\n Address:\n <i *ngIf=\"canEditResourcesValue\"\n class=\"fa fa-edit in-page-edit-icon cursor-pointer ms-2 text-white\"\n title=\"Edit Address\"\n (click)=\"isEditingStreet = true\"\n (keydown.enter)=\"isEditingStreet = true\"\n (keydown.space)=\"isEditingStreet = true\"></i>\n </span><br/>\n\n <ng-container *ngIf=\"!isEditingStreet; else editStreetBlock\">\n <span class=\"address-text user-info\">{{ street }}</span>\n </ng-container>\n\n <ng-template #editStreetBlock>\n <div class=\"d-flex align-items-center mt-3\">\n <input class=\"form-control form-control-sm\" [(ngModel)]=\"editingStreet\" />\n <button class=\"btn btn-sm btn-primary ms-2\" (click)=\"saveStreet()\">Save</button>\n <button class=\"btn btn-sm btn-secondary ms-2\" (click)=\"cancelStreet()\">Cancel</button>\n </div>\n </ng-template>\n\n </span>\n\n </div>\n <div class=\"d-flex\">\n <img [src]=\"logo\"\n alt=\"Company logo\"\n class=\"img-fluid mt-4 logo-image cursor-pointer\"\n width=\"160\"\n height=\"35\"\n (click)=\"scrollToTop()\"\n (keydown.enter)=\"scrollToTop()\"\n (keydown.space)=\"scrollToTop()\"\n title=\"Click to go to top of page\" />\n <i *ngIf=\"canEditResourcesValue\"\n class=\"fa fa-edit in-page-edit-icon fa-sm ms-3 cursor-pointer text-white align-self-center mt-3\"\n (click)=\"openLogoEditModal()\"\n (keydown.enter)=\"openLogoEditModal()\"\n (keydown.space)=\"openLogoEditModal()\"\n title=\"Edit Logo\"></i>\n </div>\n </div>\n\n <!-- RIGHT COLUMN -->\n <div class=\"col-md-6\" *ngIf=\"isFooterVisible\">\n <ng-container *ngIf=\"getFooterHubspotForm() as footerItem; else defaultForm\">\n <div class=\"d-flex\">\n <div\n class=\"hubspot-container w-100 content-loaded\"\n [innerHTML]=\"hubspotHtml\"\n (load)=\"onHubspotLoad($event)\">\n </div>\n <i *ngIf=\"canEditResourcesValue\"\n class=\"fa fa-edit in-page-edit-icon text-white cursor-pointer\"\n (click)=\"openHubspotEditModal(footerItem)\"\n (keydown.enter)=\"openHubspotEditModal(footerItem)\"\n (keydown.space)=\"openHubspotEditModal(footerItem)\"\n title=\"Edit Hubspot Embed\"></i>\n </div>\n </ng-container>\n\n <ng-template #defaultForm>\n <div class=\"d-flex\">\n <h3 class=\"text-white mb-4\"> <span class=\"text-white\">Get in touch:</span></h3>\n <i *ngIf=\"canEditResourcesValue\"\n class=\"fa fa-edit in-page-edit-icon text-white cursor-pointer ms-3 mt-2\"\n (click)=\"openQuestionsEditModal()\"\n (keydown.enter)=\"openQuestionsEditModal()\"\n (keydown.space)=\"openQuestionsEditModal()\"\n title=\"Edit Questions\"></i>\n </div>\n <div class=\"contact-form\">\n <form [formGroup]=\"form\">\n <div class=\"mb-3\">\n <div class=\"email\">\n <div class=\"form-field\">\n <label for=\"email\">Email:</label>\n <div class=\"w-100\">\n <input type=\"text\"\n class=\"mb-1\"\n id=\"email\"\n formControlName=\"email\" />\n <pw-field-error-display [displayError]=\"\n !form.get('email').valid && (form.get('email').touched || submitted)\n \"\n errorMsg=\"Email is required\">\n </pw-field-error-display>\n </div>\n </div>\n <div class=\"form-field\">\n <label for=\"first_name\">First name:</label>\n <div class=\"w-100\">\n <input input type=\"text\"\n id=\"first_name\"\n formControlName=\"first_name\" />\n <pw-field-error-display [displayError]=\"\n !form.get('first_name').valid && (form.get('first_name').touched || submitted)\n \"\n errorMsg=\"First name is required\">\n </pw-field-error-display>\n </div>\n </div>\n <div class=\"form-field\">\n <label for=\"last_name\">Last name:</label>\n <input type=\"text\"\n id=\"last_name\"\n formControlName=\"last_name\" />\n </div>\n <div class=\"form-field\">\n <label for=\"company\">Company:</label>\n <input type=\"text\"\n id=\"company\"\n formControlName=\"company\" />\n </div>\n <div class=\"form-field\" *ngIf=\"hasValidOptions()\">\n <label for=\"psa\" class=\"select-label\">{{question}}</label>\n <p-dropdown\n formControlName=\"psa\"\n [options]=\"psaOptions\"\n [placeholder]=\"'Select PSA'\"\n styleClass=\"input-select\">\n </p-dropdown>\n </div>\n <div class=\"form-field\">\n <label for=\"enquiry\" class=\"select-label\">How can we help you?</label>\n <div class=\"enquiry-field\">\n <textarea id=\"enquiry\" formControlName=\"enquiry\" class=\"\">\n </textarea>\n <pw-field-error-display [displayError]=\"\n !form.get('enquiry').valid && (form.get('enquiry').touched || submitted)\n \"\n errorMsg=\"Enquiry is required\">\n </pw-field-error-display>\n </div>\n </div>\n </div>\n </div>\n <div class=\"text-end\">\n <div class=\"captcha-wrapper-container\"\n *ngIf=\"isCaptchaVerified\">\n <ngx-recaptcha2 [ngModelOptions]=\"{ standalone: true }\"\n [siteKey]=\"captchaKeyV2\"\n size=\"normal\"\n [(ngModel)]=\"recaptcha\"\n (success)=\"handleSuccess($event)\">\n </ngx-recaptcha2>\n </div>\n <button type=\"submit\"\n (click)=\"onSubmit()\"\n *ngIf=\"!isCaptchaVerified\"\n class=\"sign-btn sign-header-btn mt-3\">\n {{ 'Button.Submit' | transloco }}\n </button>\n </div>\n\n <div class=\"d-flex align-items-center mt-4\">\n <div class=\"icons d-flex align-items-center\">\n <a [eventTracker]=\"{\n category: 'youtube',\n action: 'click',\n label: 'cloudolive-landing-page-b',\n value: 1\n }\"\n [href]=\"youtubeUrl\"\n target=\"_blank\"\n rel=\"noopener noreferrer\">\n <img src=\"/assets/img/icons/youtube.png\"\n class=\"img-fluid youtube-icon\"\n width=\"54\"\n height=\"54\"\n alt=\"\" />\n </a>\n <a [eventTracker]=\"{\n category: 'linkedin',\n action: 'click',\n label: 'cloudolive-landing-page-b',\n value: 1\n }\"\n [href]=\"linkedInUrl\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n class=\"ms-3\">\n <img src=\"/assets/img/icons/social/linkedin.svg\"\n class=\"img-fluid linkedin-icon\"\n width=\"48\"\n height=\"48\"\n alt=\"\" />\n </a>\n <i *ngIf=\"canEditResourcesValue\"\n class=\"fa fa-edit in-page-edit-icon text-white cursor-pointer ms-3\"\n (click)=\"openSocialEditModal()\"\n (keydown.enter)=\"openSocialEditModal()\"\n (keydown.space)=\"openSocialEditModal()\"\n title=\"Edit Social Links & Company Name\"></i>\n </div>\n <div class=\"copyright text-white\">\n 2025 {{companyName}}.\n </div>\n </div>\n </form>\n </div>\n </ng-template>\n </div>\n </div>\n </div>\n</section>\n\n\n\n<ng-template #bookMeeting\n let-modal>\n <div class=\"modal-header\">\n <button type=\"button\"\n class=\"btn-close float-end\"\n aria-label=\"Close\"\n (click)=\"modal.dismiss()\">\n </button>\n </div>\n <div class=\"modal-body\">\n <h3 class=\"text-center modal-basic-title\">\n Thanks for getting in touch! Our team will be in contact shortly, or we\n can compare calendars now & schedule a time\n </h3>\n <button type=\"button\"\n [eventTracker]=\"{\n category: 'request-demo',\n action: 'click',\n label: 'cloudolive-landing-page-b',\n value: 1\n }\"\n (click)=\"navigateToBookMeeting()\"\n class=\"sign-btn sign-header-btn mx-auto d-block mb-3\">\n Let's do it\n </button>\n </div>\n</ng-template>\n\n\n<ng-template #editFooterLinksModal let-modal>\n <div class=\"modal-header\">\n <h5 class=\"modal-title\">Edit Footer Links</h5>\n <button type=\"button\" class=\"btn-close\" aria-label=\"Close\" (click)=\"modal.dismiss()\"></button>\n </div>\n\n <div class=\"modal-body\">\n <h4 class=\"mb-3\">Footer Links Section</h4>\n <div cdkDropList (cdkDropListDropped)=\"dropFooterLinks($event)\">\n <div *ngFor=\"let footer of editingFooterLinks.items; let i = index\" class=\"border p-3 mb-3\" cdkDrag>\n <div class=\"row\">\n <div class=\"col-md-5 mb-2\">\n <label for=\"footerTitle{{i}}\" class=\"form-label\">Title</label>\n <input id=\"footerTitle{{i}}\" class=\"form-control\" [(ngModel)]=\"footer.title\" />\n </div>\n <div class=\"col-md-5 mb-2\">\n <label for=\"footerPath{{i}}\" class=\"form-label\">Path</label>\n <input id=\"footerPath{{i}}\" class=\"form-control\" [(ngModel)]=\"footer.path\" />\n </div>\n <div class=\"col-md-2 d-flex justify-content-between align-items-center mt-4\">\n <i class=\"fa fa-trash in-page-trash-icon text-danger cursor-pointer\" (click)=\"removeFooterLink(i)\" (keydown.enter)=\"removeFooterLink(i)\" (keydown.space)=\"removeFooterLink(i)\"></i>\n <i class=\"fa fa-bars in-page-bars-icon cursor-move\" cdkDragHandle></i>\n </div>\n </div>\n\n <!-- Subtitles -->\n <div cdkDropList (cdkDropListDropped)=\"dropSubtitles(i, $event)\">\n <div *ngFor=\"let sub of footer.subtitles; let j = index\" class=\"row border p-3 mb-2 align-items-center\" cdkDrag>\n <div class=\"col-md-5\">\n <label for=\"subtitleTitle{{i}}{{j}}\" class=\"form-label\">Subtitle Title</label>\n <input id=\"subtitleTitle{{i}}{{j}}\" class=\"form-control\" [(ngModel)]=\"sub.title\" />\n </div>\n <div class=\"col-md-5\">\n <label for=\"subtitlePath{{i}}{{j}}\" class=\"form-label\">Subtitle Path</label>\n <input id=\"subtitlePath{{i}}{{j}}\" class=\"form-control\" [(ngModel)]=\"sub.path\" />\n </div>\n <div class=\"col-md-2 d-flex justify-content-between align-items-center mt-4\">\n <i class=\"fa fa-trash in-page-trash-icon text-danger cursor-pointer\" (click)=\"removeSubtitle(i, j)\" (keydown.enter)=\"removeSubtitle(i, j)\" (keydown.space)=\"removeSubtitle(i, j)\"></i>\n <i class=\"fa fa-bars cursor-move in-page-bars-icon\" cdkDragHandle></i>\n </div>\n </div>\n </div>\n\n <button class=\"btn btn-outline-primary btn-sm mt-2\" (click)=\"addSubtitle(i)\">\n + Add Subtitle\n </button>\n </div>\n </div>\n\n <button class=\"btn btn-primary mt-3\" (click)=\"addFooterLink()\">\n + Add Footer Link\n </button>\n </div>\n\n <div class=\"modal-footer\">\n <button class=\"btn btn-secondary\" (click)=\"modal.dismiss()\">Cancel</button>\n <button class=\"btn btn-primary\" (click)=\"saveFooterLinks(modal)\">Save</button>\n </div>\n</ng-template>\n\n\n\n\n\n<ng-template #logoModal let-modal>\n <div class=\"modal-header\">\n <h5 class=\"modal-title\">Upload Logo</h5>\n <button type=\"button\" class=\"btn-close\" aria-label=\"Close\" (click)=\"modal.dismiss()\"></button>\n </div>\n <div class=\"modal-body\">\n <pw-custom-uploader\n [aspectRatio]=\"'fullLogo'\"\n [title]=\"'Main Contrast Logo'\"\n [controlName]=\"'logo_main_contrast'\"\n [previewData]=\"previewData\"\n (saveEvent)=\"onSaveFile($event)\">\n </pw-custom-uploader>\n </div>\n</ng-template>\n\n\n\n<ng-template #hubspotEditModal let-modal>\n <div class=\"modal-header\">\n <h5 class=\"modal-title\">Edit Hubspot Embed</h5>\n <button type=\"button\" class=\"btn-close\" aria-label=\"Close\" (click)=\"modal.dismiss()\"></button>\n </div>\n <div class=\"modal-body\">\n <div class=\"mb-3\">\n <label for=\"hubspotId\" class=\"form-label\">Hubspot ID</label>\n <input id=\"hubspotId\" [(ngModel)]=\"editingHubspotId\" class=\"form-control\" />\n </div>\n <div class=\"mb-3\">\n <label for=\"hubspotEmbedDiv\" class=\"form-label\">Embed DIV</label>\n <textarea id=\"hubspotEmbedDiv\" [(ngModel)]=\"editingHubspotHtml\" rows=\"8\" class=\"form-control\"></textarea>\n </div>\n </div>\n <div class=\"modal-footer\">\n <button class=\"btn btn-primary\" (click)=\"saveHubspotHtml(modal)\">Save</button>\n <button class=\"btn btn-secondary\" (click)=\"modal.dismiss()\">Cancel</button>\n </div>\n</ng-template>\n\n\n<ng-template #socialEditModal let-modal>\n <div class=\"modal-header\">\n <h5 class=\"modal-title\">Edit Social Links & Company Name</h5>\n <button type=\"button\" class=\"btn-close\" aria-label=\"Close\" (click)=\"modal.dismiss()\"></button>\n </div>\n <div class=\"modal-body\">\n <div class=\"mb-3\">\n <label for=\"youtubeUrl\" class=\"form-label\">YouTube URL</label>\n <input id=\"youtubeUrl\" [(ngModel)]=\"editingYoutubeUrl\" class=\"form-control\" />\n </div>\n <div class=\"mb-3\">\n <label for=\"linkedinUrl\" class=\"form-label\">LinkedIn URL</label>\n <input id=\"linkedinUrl\" [(ngModel)]=\"editingLinkedInUrl\" class=\"form-control\" />\n </div>\n <div class=\"mb-3\">\n <label for=\"companyName\" class=\"form-label\">Company Name</label>\n <input id=\"companyName\" [(ngModel)]=\"editingCompanyName\" class=\"form-control\" />\n </div>\n </div>\n <div class=\"modal-footer\">\n <button class=\"btn btn-primary\" (click)=\"saveSocialLinks(modal)\">Save</button>\n <button class=\"btn btn-secondary\" (click)=\"modal.dismiss()\">Cancel</button>\n </div>\n</ng-template>\n\n\n\n<ng-template #questionsEditModal let-modal>\n <div class=\"modal-header\">\n <h5 class=\"modal-title\">Edit Questions</h5>\n <button type=\"button\" class=\"btn-close\" aria-label=\"Close\" (click)=\"modal.dismiss()\"></button>\n </div>\n\n <div class=\"modal-body\">\n <h4 class=\"mb-3\">Questions Section</h4>\n <div cdkDropList (cdkDropListDropped)=\"dropQuestions($event)\">\n <div *ngFor=\"let q of editingQuestions; let i = index\" class=\"border p-3 mb-3\" cdkDrag>\n <div class=\"row\">\n <div class=\"col-md-11 mb-2\">\n <label for=\"questionText{{i}}\" class=\"form-label\">Question</label>\n <input id=\"questionText{{i}}\" class=\"form-control\" [(ngModel)]=\"q.question\" placeholder=\"Enter question\" />\n </div>\n <div class=\"col-md-1 d-flex justify-content-end align-items-start mt-4\">\n <i class=\"fa fa-bars in-page-bars-icon cursor-move\" cdkDragHandle></i>\n </div>\n </div>\n\n <!-- Options Section -->\n <div cdkDropList (cdkDropListDropped)=\"dropQuestionOptions(i, $event)\">\n <div *ngFor=\"let opt of q.options; let j = index\" class=\"row border p-3 mb-2 align-items-center\" cdkDrag>\n <div class=\"col-md-7 mb-2\">\n <label for=\"questionOption{{i}}{{j}}\" class=\"form-label\">Option</label>\n <input id=\"questionOption{{i}}{{j}}\" class=\"form-control\" [(ngModel)]=\"opt.option\" placeholder=\"Enter option\" />\n </div>\n <div class=\"col-md-2 d-flex justify-content-between align-items-center mt-4\">\n <i class=\"fa fa-trash in-page-trash-icon text-danger cursor-pointer\" (click)=\"removeQuestionOption(i, j)\" (keydown.enter)=\"removeQuestionOption(i, j)\" (keydown.enter)=\"removeQuestionOption(i, j)\"></i>\n <i class=\"fa fa-bars in-page-bars-icon cursor-move\" cdkDragHandle></i>\n </div>\n </div>\n </div>\n\n <button class=\"btn btn-outline-primary btn-sm mt-2\" (click)=\"addQuestionOption(i)\">+ Add Option</button>\n </div>\n </div>\n\n <button class=\"btn btn-primary mt-3\" (click)=\"addNewQuestion()\">+ Add Question</button>\n </div>\n\n <div class=\"modal-footer\">\n <button class=\"btn btn-secondary\" (click)=\"modal.dismiss()\">Cancel</button>\n <button class=\"btn btn-primary\" (click)=\"saveQuestions(modal)\">Save</button>\n </div>\n</ng-template>\n\n\n\n","import { CommonModule } from '@angular/common';\nimport { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { RouterModule } from '@angular/router';\n\nimport { AdminModuleUtilsModule } from '@posiwise/admin-module-utils';\nimport { CoreTranslocoModule } from '@posiwise/core-transloco';\nimport { DirectivesModule } from '@posiwise/directives';\nimport { PipesModule } from '@posiwise/pipes';\nimport { FieldErrorDisplayModule } from '@posiwise/utils';\n\nimport { NgxCaptchaModule } from 'ngx-captcha';\nimport { DropdownModule } from 'primeng/dropdown';\n\nimport { Trial4ContactUsComponent } from './resource-contact-us.component';\n\n@NgModule({\n declarations: [Trial4ContactUsComponent],\n imports: [\n CommonModule,\n FieldErrorDisplayModule,\n DropdownModule,\n ReactiveFormsModule,\n NgxCaptchaModule,\n RouterModule,\n PipesModule,\n FormsModule,\n CoreTranslocoModule,\n AdminModuleUtilsModule,\n DirectivesModule\n ],\n exports: [\n Trial4ContactUsComponent,\n CommonModule,\n FieldErrorDisplayModule,\n DropdownModule,\n ReactiveFormsModule,\n NgxCaptchaModule,\n RouterModule,\n PipesModule,\n FormsModule,\n CoreTranslocoModule,\n AdminModuleUtilsModule,\n DirectivesModule\n ],\n schemas: [CUSTOM_ELEMENTS_SCHEMA]\n})\nexport class Trial4SharedContactUsModule {}\n","import { moveItemInArray } from '@angular/cdk/drag-drop';\nimport {\n Component,\n Injector,\n Input,\n OnChanges,\n OnInit,\n SimpleChanges,\n TemplateRef,\n ViewChild\n} from '@angular/core';\nimport { DomSanitizer } from '@angular/platform-browser';\n\nimport { AdminService } from '@posiwise/admin-module-utils';\nimport { AppBaseComponent } from '@posiwise/app-base-component';\nimport { User } from '@posiwise/common-utilities';\nimport { HelperService } from '@posiwise/helper-service';\nimport { CustomUploaderComponent } from '@posiwise/utils';\n\nimport { NgbModal } from '@ng-bootstrap/ng-bootstrap';\n\n@Component({\n selector: 'pw-demo-card',\n templateUrl: './demo-cards.component.html',\n styleUrls: ['./demo-cards.component.scss']\n})\nexport class DemoCardsComponent extends AppBaseComponent implements OnInit, OnChanges {\n @Input() user: User;\n @Input() userLoggedIn: boolean;\n\n bookingLinks;\n editingBookingLinks = [];\n\n domainId = this.appConfig?.domain_id;\n subscriptionId: string;\n\n canEditResourcesValue;\n\n @ViewChild('editBookLinksModal', { static: true })\n editBookLinksModal!: TemplateRef<CustomUploaderComponent>;\n\n constructor(\n private readonly sanitizer: DomSanitizer,\n private readonly modalService: NgbModal,\n private readonly adminService: AdminService,\n injector: Injector\n ) {\n super(injector);\n }\n\n ngOnInit() {\n if (this.userLoggedIn) {\n this.localStorage.getItem$('product').subscribe(res => {\n const data = res ? JSON.parse(res) : null;\n this.subscriptionId = data?.subscriptionId;\n });\n }\n\n this.bookingLinks = (this.appConfig?.pages_config?.book_demo?.items ?? [])\n .filter(link => link?.url)\n .map(link => ({\n ...link,\n // NOSONAR: Trusted iframe URL content is handled safely here\n url: this.sanitizer.bypassSecurityTrustResourceUrl(link.url) // NOSONAR\n }));\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes['user'] || changes['userLoggedIn']) {\n if (this.userLoggedIn && this.user) {\n this.updateCanEditResourcesValue();\n }\n }\n }\n\n openEditBookLinks(modal) {\n this.editingBookingLinks = JSON.parse(\n JSON.stringify(this.appConfig?.pages_config?.book_demo?.items ?? [])\n );\n this.modalService.open(modal, { size: 'lg', centered: true, windowClass: 'modal-holder' });\n }\n\n addBookingLink() {\n this.editingBookingLinks.push({ title: '', url: '' });\n }\n\n removeBookDemoLink(i: number) {\n this.editingBookingLinks.splice(i, 1);\n }\n\n dropBookingLink(event) {\n moveItemInArray(this.editingBookingLinks, event.previousIndex, event.currentIndex);\n }\n\n saveBookingLinks(modal) {\n this.adminService\n .updateDomainConfig(this.domainId, {\n book_demo: {\n ...this.appConfig?.pages_config?.book_demo,\n items: this.editingBookingLinks\n },\n subscription_id: this.subscriptionId\n })\n .subscribe(() => {\n this.toast.success('Booking links updated');\n this.bookingLinks = this.editingBookingLinks\n .filter(link => link?.url)\n .map(link => ({\n ...link,\n // NOSONAR: Trusted iframe URL content is handled safely here\n url: this.sanitizer.bypassSecurityTrustResourceUrl(link.url) // NOSONAR\n }));\n this.appConfig.pages_config.book_demo.items = [...this.editingBookingLinks]; // ✅ Like CTAs\n modal.close();\n });\n }\n private updateCanEditResourcesValue(): void {\n this.canEditResourcesValue = HelperService.canEditResources(\n this.user,\n this.userLoggedIn,\n this.permissionService\n );\n }\n\n canEditResources(): boolean {\n return this.canEditResourcesValue;\n }\n}\n","<!-- EDIT ICON -->\n\n<!-- DEMO LINKS -->\n<div class=\"row text-center\">\n <i *ngIf=\"canEditResourcesValue\"\n class=\"fa fa-edit in-page-edit-icon mb-3 cursor-pointer\"\n title=\"Edit Booking Links\"\n (click)=\"openEditBookLinks(editBookLinksModal)\"\n (keydown.enter)=\"openEditBookLinks(editBookLinksModal)\"\n (keydown.space)=\"openEditBookLinks(editBookLinksModal)\">\n </i>\n <div class=\"col-md-6 col-lg-4\" *ngFor=\"let link of bookingLinks\">\n <h5 class=\"mb-3\" *ngIf=\"link?.url && link?.title\">{{ link?.title }}</h5>\n <iframe *ngIf=\"link?.url\"\n [src]=\"link?.url\"\n width=\"100%\"\n title=\"Booking frame\"\n height=\"600\"\n class=\"iframe-no-border\">\n </iframe>\n </div>\n</div>\n\n<!-- MODAL TEMPLATE -->\n<ng-template #editBookLinksModal let-modal>\n <div class=\"modal-header\">\n <h5 class=\"modal-title\">Edit Book Demo Links</h5>\n <button type=\"button\" class=\"btn-close\" (click)=\"modal.dismiss()\" aria-label=\"Close\"></button>\n </div>\n\n <div class=\"modal-body\">\n <div cdkDropList (cdkDropListDropped)=\"dropBookingLink($event)\">\n <div *ngFor=\"let item of editingBookingLinks; let i = index\" class=\"card p-3 mb-3\" cdkDrag>\n <div class=\"row\">\n <div class=\"col-md-5\">\n <label for=\"demoLinkTitle{{i}}\" class=\"form-label\">Link Title</label>\n <input id=\"demoLinkTitle{{i}}\" class=\"form-control\" [(ngModel)]=\"item.title\" />\n </div>\n <div class=\"col-md-5\">\n <label for=\"demoLinkUrl{{i}}\" class=\"form-label\">Link URL</label>\n <input id=\"demoLinkUrl{{i}}\" class=\"form-control\" [(ngModel)]=\"item.url\" />\n </div>\n <div class=\"col-sm-1 d-flex justify-content-end mt-3\">\n <i\n ngbTooltip=\"Remove\"\n (click)=\"removeBookDemoLink(i)\"\n (keydown.enter)=\"removeBookDemoLink(i)\"\n (keydown.space)=\"removeBookDemoLink(i)\"\n class=\"fa fa-trash in-page-trash-icon delete-icon text-danger\"\n aria-hidden=\"true\"\n ></i>\n </div>\n\n <div class=\"col-sm-1 d-flex justify-content-end mt-3\">\n <i\n class=\"fa fa-bars in-page-bars-icon cursor-move\"\n cdkDragHandle\n ngbTooltip=\"Drag to reorder\"\n aria-hidden=\"true\"\n ></i>\n </div>\n </div>\n\n </div>\n </div>\n\n <button class=\"btn btn-outline-primary mt-3\" (click)=\"addBookingLink()\">\n <i class=\"fa fa-plus me-1\"></i> Add Book Demo Link\n </button>\n </div>\n\n <div class=\"modal-footer\">\n <button class=\"btn btn-secondary\" (click)=\"modal.dismiss()\">Cancel</button>\n <button class=\"btn btn-primary\" (click)=\"saveBookingLinks(modal)\">Save</button>\n </div>\n</ng-template>\n","import { DragDropModule } from '@angular/cdk/drag-drop';\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\n\nimport { AdminModuleUtilsModule } from '@posiwise/admin-module-utils';\nimport { DirectivesModule } from '@posiwise/directives';\nimport { PipesModule } from '@posiwise/pipes';\n\nimport { NgbModalModule } from '@ng-bootstrap/ng-bootstrap';\n\nimport { DemoCardsComponent } from './demo-cards.component';\n\n@NgModule({\n declarations: [DemoCardsComponent],\n imports: [\n CommonModule,\n FormsModule,\n DragDropModule,\n NgbModalModule,\n DirectivesModule,\n PipesModule,\n AdminModuleUtilsModule\n ],\n exports: [DemoCardsComponent]\n})\nexport class DemoCardsModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i2","i3","i4","i5","i6"],"mappings":"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"}
|