tango-app-ui-shared 3.3.1-beta.80 → 3.3.1-beta.82

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (88) hide show
  1. package/esm2022/lib/guards/auth.guard.mjs +3 -3
  2. package/esm2022/lib/i18n/translation.module.mjs +4 -4
  3. package/esm2022/lib/i18n/translation.service.mjs +3 -3
  4. package/esm2022/lib/interceptors/http-auth-interceptor.mjs +3 -3
  5. package/esm2022/lib/modules/common/common-shared.module.mjs +4 -4
  6. package/esm2022/lib/modules/common/custom-select/custom-select.component.mjs +3 -3
  7. package/esm2022/lib/modules/common/filters/filters.component.mjs +3 -3
  8. package/esm2022/lib/modules/common/pagination/pagination.component.mjs +3 -3
  9. package/esm2022/lib/modules/errors/error403/error403.component.mjs +3 -3
  10. package/esm2022/lib/modules/errors/error404/error404.component.mjs +3 -3
  11. package/esm2022/lib/modules/errors/error500/error500.component.mjs +3 -3
  12. package/esm2022/lib/modules/errors/errors-routing.module.mjs +4 -4
  13. package/esm2022/lib/modules/errors/errors.component.mjs +3 -3
  14. package/esm2022/lib/modules/errors/errors.module.mjs +4 -4
  15. package/esm2022/lib/modules/errors/invalid-ip/invalid-ip.component.mjs +3 -3
  16. package/esm2022/lib/modules/intro/contact-support/contact-support.component.mjs +3 -3
  17. package/esm2022/lib/modules/intro/intro-routing.module.mjs +4 -4
  18. package/esm2022/lib/modules/intro/intro.module.mjs +4 -4
  19. package/esm2022/lib/modules/intro/lead-intro/lead-intro.component.mjs +3 -3
  20. package/esm2022/lib/modules/layout/components/csm-assign-confirmation/csm-assign-confirmation.component.mjs +3 -3
  21. package/esm2022/lib/modules/layout/content/content.component.mjs +3 -3
  22. package/esm2022/lib/modules/layout/footer/footer.component.mjs +3 -3
  23. package/esm2022/lib/modules/layout/header/header-menu/header-menu.component.mjs +3 -3
  24. package/esm2022/lib/modules/layout/header/header.component.mjs +3 -3
  25. package/esm2022/lib/modules/layout/header/navbar/navbar.component.mjs +3 -3
  26. package/esm2022/lib/modules/layout/header/notifications-inner/notifications-inner.component.mjs +3 -3
  27. package/esm2022/lib/modules/layout/header/page-title/page-title.component.mjs +3 -3
  28. package/esm2022/lib/modules/layout/keenicon/keenicon.component.mjs +3 -3
  29. package/esm2022/lib/modules/layout/layout/layout.component.mjs +3 -3
  30. package/esm2022/lib/modules/layout/layout.module.mjs +4 -4
  31. package/esm2022/lib/modules/layout/scripts-init/scripts-init.component.mjs +3 -3
  32. package/esm2022/lib/modules/layout/scroll-top/scroll-top.component.mjs +3 -3
  33. package/esm2022/lib/modules/layout/sidebar/sidebar-footer/sidebar-footer.component.mjs +3 -3
  34. package/esm2022/lib/modules/layout/sidebar/sidebar-logo/sidebar-logo.component.mjs +3 -3
  35. package/esm2022/lib/modules/layout/sidebar/sidebar-menu/sidebar-menu.component.mjs +3 -3
  36. package/esm2022/lib/modules/layout/sidebar/sidebar.component.mjs +3 -3
  37. package/esm2022/lib/modules/layout/toolbar/accounting/accounting.component.mjs +3 -3
  38. package/esm2022/lib/modules/layout/toolbar/classic/classic.component.mjs +3 -3
  39. package/esm2022/lib/modules/layout/toolbar/client-settings/client-settings.component.mjs +3 -3
  40. package/esm2022/lib/modules/layout/toolbar/date-single-select/date-single-select.component.mjs +3 -3
  41. package/esm2022/lib/modules/layout/toolbar/datepicker/datepicker.component.mjs +3 -3
  42. package/esm2022/lib/modules/layout/toolbar/extended/extended.component.mjs +3 -3
  43. package/esm2022/lib/modules/layout/toolbar/reports/reports.component.mjs +3 -3
  44. package/esm2022/lib/modules/layout/toolbar/saas/saas.component.mjs +3 -3
  45. package/esm2022/lib/modules/layout/toolbar/single-store/single-store.component.mjs +3 -3
  46. package/esm2022/lib/modules/layout/toolbar/single-storedate/single-storedate.component.mjs +3 -3
  47. package/esm2022/lib/modules/layout/toolbar/storesingle/storesingle.component.mjs +3 -3
  48. package/esm2022/lib/modules/layout/toolbar/toolbar.component.mjs +5 -5
  49. package/esm2022/lib/modules/layout/toolbar/traffic-header/traffic-header/traffic-header.component.mjs +38 -52
  50. package/esm2022/lib/modules/layout/toolbar/traffic-nob/traffic-nob.component.mjs +3 -3
  51. package/esm2022/lib/modules/layout/toolbar/trax-header/trax-header.component.mjs +3 -3
  52. package/esm2022/lib/modules/layout/toolbar/trax-withoutdate/trax-withoutdate.component.mjs +3 -3
  53. package/esm2022/lib/modules/notification/conformation/conformation.component.mjs +3 -3
  54. package/esm2022/lib/modules/notification/notification/notification.component.mjs +3 -3
  55. package/esm2022/lib/modules/notification/notification-routing.module.mjs +4 -4
  56. package/esm2022/lib/modules/notification/notification.module.mjs +4 -4
  57. package/esm2022/lib/pipes/customDate.pipe.mjs +3 -3
  58. package/esm2022/lib/routes/route-wraper-modules/edge-wrapper.module.mjs +4 -4
  59. package/esm2022/lib/routes/route-wraper-modules/manage-wrapper.module.mjs +4 -4
  60. package/esm2022/lib/routes/route-wraper-modules/profile-wrapper.module.mjs +4 -4
  61. package/esm2022/lib/routes/route-wraper-modules/store-wrapper.module.mjs +4 -4
  62. package/esm2022/lib/routes/route-wraper-modules/ticket-wrapper.module.mjs +4 -4
  63. package/esm2022/lib/services/auth.service.mjs +3 -3
  64. package/esm2022/lib/services/notification.service.mjs +3 -3
  65. package/esm2022/lib/services/toast.service.mjs +3 -3
  66. package/fesm2022/{tango-app-ui-shared-edge-wrapper.module-fMqNK7aH.mjs → tango-app-ui-shared-edge-wrapper.module-CFDk0tvS.mjs} +5 -5
  67. package/fesm2022/tango-app-ui-shared-edge-wrapper.module-CFDk0tvS.mjs.map +1 -0
  68. package/fesm2022/{tango-app-ui-shared-intro.module-B4Y7T17r.mjs → tango-app-ui-shared-intro.module-DYh4ZRha.mjs} +15 -15
  69. package/fesm2022/{tango-app-ui-shared-intro.module-B4Y7T17r.mjs.map → tango-app-ui-shared-intro.module-DYh4ZRha.mjs.map} +1 -1
  70. package/fesm2022/{tango-app-ui-shared-manage-wrapper.module-YOr1-p9k.mjs → tango-app-ui-shared-manage-wrapper.module-BHyh4Njw.mjs} +5 -5
  71. package/fesm2022/tango-app-ui-shared-manage-wrapper.module-BHyh4Njw.mjs.map +1 -0
  72. package/fesm2022/{tango-app-ui-shared-notification.module-CW8hVnTe.mjs → tango-app-ui-shared-notification.module-C5ZmCf8U.mjs} +15 -15
  73. package/fesm2022/{tango-app-ui-shared-notification.module-CW8hVnTe.mjs.map → tango-app-ui-shared-notification.module-C5ZmCf8U.mjs.map} +1 -1
  74. package/fesm2022/{tango-app-ui-shared-profile-wrapper.module-DAb6dDVZ.mjs → tango-app-ui-shared-profile-wrapper.module-BNC1AGOk.mjs} +5 -5
  75. package/fesm2022/tango-app-ui-shared-profile-wrapper.module-BNC1AGOk.mjs.map +1 -0
  76. package/fesm2022/{tango-app-ui-shared-store-wrapper.module-DmkoVJ7n.mjs → tango-app-ui-shared-store-wrapper.module-DdaCYHdv.mjs} +5 -5
  77. package/fesm2022/tango-app-ui-shared-store-wrapper.module-DdaCYHdv.mjs.map +1 -0
  78. package/fesm2022/{tango-app-ui-shared-ticket-wrapper.module-XEAROmQk.mjs → tango-app-ui-shared-ticket-wrapper.module-r32uKkDO.mjs} +5 -5
  79. package/fesm2022/tango-app-ui-shared-ticket-wrapper.module-r32uKkDO.mjs.map +1 -0
  80. package/fesm2022/tango-app-ui-shared.mjs +203 -217
  81. package/fesm2022/tango-app-ui-shared.mjs.map +1 -1
  82. package/lib/modules/layout/toolbar/traffic-header/traffic-header/traffic-header.component.d.ts +1 -0
  83. package/package.json +1 -1
  84. package/fesm2022/tango-app-ui-shared-edge-wrapper.module-fMqNK7aH.mjs.map +0 -1
  85. package/fesm2022/tango-app-ui-shared-manage-wrapper.module-YOr1-p9k.mjs.map +0 -1
  86. package/fesm2022/tango-app-ui-shared-profile-wrapper.module-DAb6dDVZ.mjs.map +0 -1
  87. package/fesm2022/tango-app-ui-shared-store-wrapper.module-DmkoVJ7n.mjs.map +0 -1
  88. package/fesm2022/tango-app-ui-shared-ticket-wrapper.module-XEAROmQk.mjs.map +0 -1
@@ -289,7 +289,7 @@ export class TrafficHeaderComponent {
289
289
  onStartDateChange(event) {
290
290
  if (this.dayjs(event.startDate).isValid()) {
291
291
  this.isCustomDate = (m) => {
292
- const isValidDate = m > this.dayjs() || m > this.dayjs(event.startDate.add(180, "days"));
292
+ const isValidDate = m > this.dayjs() || m > this.dayjs(event.startDate.add(90, "days"));
293
293
  return isValidDate ? "invalid-date" : false;
294
294
  };
295
295
  }
@@ -455,76 +455,62 @@ export class TrafficHeaderComponent {
455
455
  const group = this.groupsData
456
456
  .filter(group => group.checked)
457
457
  .map(group => group.groupName);
458
- const data = { city, clusters: group, clientId: this.users.clientId ? this.users.clientId : this.selectedFilters.client };
458
+ const data = {
459
+ city,
460
+ clusters: group,
461
+ clientId: this.users.clientId || this.selectedFilters.client
462
+ };
459
463
  this.auth.getHeaderStores(data).subscribe({
460
464
  next: (res) => {
461
465
  if (res && res.code === 200) {
466
+ // Initialize stores from API response
462
467
  this.stores = res.data.storesData;
463
- // Retrieve checked store IDs from selectedFilters
468
+ // Check if there are previously selected stores
464
469
  const checkedStoreIds = this.selectedFilters?.stores
465
470
  ? this.selectedFilters.stores.filter((store) => store.checked).map((store) => store.storeId)
466
471
  : [];
472
+ // Sync the `checked` state
467
473
  this.stores.forEach(store => {
468
- if (checkedStoreIds.includes(store.storeId)) {
469
- store.checked = true; // Sync the checked state with full store list
470
- }
474
+ store.checked = checkedStoreIds.length
475
+ ? checkedStoreIds.includes(store.storeId) // Use previous selection
476
+ : true; // Default to true if no previous selection
471
477
  });
472
- // Map the stores and retain the 'checked' status
478
+ // Apply search filter if search text is present
473
479
  if (this.searchStoreText.length) {
474
- this.filteredStores = this.stores?.filter(store => store.storeName.toLowerCase().includes(this.searchStoreText));
480
+ this.filteredStores = this.stores.filter(store => store.storeName.toLowerCase().includes(this.searchStoreText.toLowerCase()));
475
481
  }
476
482
  else {
477
- this.filteredStores = this.stores;
478
- }
479
- // Ensure selectedFilters is in sync with filteredStores
480
- if (!this.selectedFilters.stores || !this.selectedFilters.stores.length) {
481
- this.stores.forEach(store => {
482
- store.checked = true; // Sync the checked state with full store list
483
- });
484
- // No previously selected stores, mark all as checked
485
- this.filteredStores = this.selectedFilters.stores = this.filteredStores.map(store => ({
486
- ...store,
487
- checked: true
488
- }));
483
+ this.filteredStores = [...this.stores];
489
484
  }
490
- else {
491
- // Update selectedFilters to reflect current state of stores
492
- this.selectedFilters.stores = this.filteredStores.map(store => ({
493
- ...store,
494
- checked: store.checked
495
- }));
496
- }
497
- // Update localStorage with the latest selectedFilters
485
+ // Update `selectedFilters.stores` to reflect the current state
486
+ this.selectedFilters.stores = this.filteredStores.map(store => ({
487
+ storeId: store.storeId,
488
+ storeName: store.storeName,
489
+ checked: store.checked
490
+ }));
491
+ // Save updated filters to localStorage
498
492
  localStorage.setItem('header-filters', JSON.stringify(this.selectedFilters));
499
- // Emit data via service
500
- // this.gs.dataRangeValue.next(this.selectedFilters);
501
- // Trigger change detection to reflect changes in the UI
493
+ // Trigger UI change detection
502
494
  this.cd.detectChanges();
503
495
  }
504
496
  else {
505
- this.stores = [];
506
- this.selectedFilters.stores = [];
507
- this.filteredStores = [];
508
- this.selectedFilters.stores = this.filteredStores.map(store => ({
509
- ...store,
510
- checked: false
511
- }));
512
- localStorage.setItem('header-filters', JSON.stringify(this.selectedFilters));
497
+ // Handle empty or error response
498
+ this.clearStoresState();
513
499
  }
514
500
  },
515
501
  error: (err) => {
516
- this.stores = [];
517
- this.selectedFilters.stores = this.filteredStores.map(store => ({
518
- ...store,
519
- checked: false
520
- }));
521
- this.filteredStores = [];
522
- this.selectedFilters.stores = [];
523
- localStorage.setItem('header-filters', JSON.stringify(this.selectedFilters));
524
502
  console.error("Failed to fetch stores", err);
525
- },
503
+ this.clearStoresState();
504
+ }
526
505
  });
527
506
  }
507
+ // Clear stores state and reset filters
508
+ clearStoresState() {
509
+ this.stores = [];
510
+ this.filteredStores = [];
511
+ this.selectedFilters.stores = [];
512
+ localStorage.setItem('header-filters', JSON.stringify(this.selectedFilters));
513
+ }
528
514
  resetSelectedStores() {
529
515
  this.filteredStores.forEach((store) => (store.checked = false));
530
516
  this.searchStoreText = "";
@@ -779,10 +765,10 @@ export class TrafficHeaderComponent {
779
765
  this.closeDropdown1();
780
766
  }
781
767
  }
782
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: TrafficHeaderComponent, deps: [{ token: i1.AuthService }, { token: i2.Router }, { token: i3.GlobalStateService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
783
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.11", type: TrafficHeaderComponent, selector: "lib-traffic-header", host: { listeners: { "document:click": "clickOutside($event)" } }, ngImport: i0, template: "<div class=\"me-3\">\r\n <label *ngIf=\"selectedLocationsLabel()\" class=\"badge badge-light-default mx-2\">{{selectedLocationsLabel()}} \r\n <span class=\"cursor-pointer\" (click)=\"removeLocation()\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\">\r\n <path d=\"M9 3L3 9M3 3L9 9\" stroke=\"#667085\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg></span>\r\n </label>\r\n <label *ngIf=\"selectedGroupsLabel()\" class=\"badge badge-light-default mx-2\">{{selectedGroupsLabel()}} \r\n <span class=\"cursor-pointer\" (click)=\"removeGroup()\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\">\r\n <path d=\"M9 3L3 9M3 3L9 9\" stroke=\"#667085\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg></span>\r\n </label>\r\n <label class=\"badge badge-light-default\">{{selectedStoresLabel()}}</label>\r\n</div>\r\n\r\n\r\n<div class=\"wrapper me-3\" *ngIf=\"(gs.userAccess | async)?.userType === 'tango'\">\r\n<lib-select [items]=\"clientList\" [multi]=\"false\" [searchField]=\"'clientName'\" [disabled]=\"false\" [idField]=\"'clientId'\"\r\n(selected)=\"onClientSelect($event)\" [selectedValues]=\"[selectedClient]\"></lib-select>\r\n</div>\r\n<div class=\"d-flex align-items-center position-relative my-1\">\r\n <span class=\"svg-icon svg-icon-1 position-absolute ms-3\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path\r\n d=\"M13.3333 1.66663V4.99996M6.66667 1.66663V4.99996M2.5 8.33329H17.5M4.16667 3.33329H15.8333C16.7538 3.33329 17.5 4.07948 17.5 4.99996V16.6666C17.5 17.5871 16.7538 18.3333 15.8333 18.3333H4.16667C3.24619 18.3333 2.5 17.5871 2.5 16.6666V4.99996C2.5 4.07948 3.24619 3.33329 4.16667 3.33329Z\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n <input class=\"fx-date-range form-control ps-14\" style=\"min-width: 260px !important;\" type=\"text\" matInput\r\n ngxDaterangepickerMd [drops]=\"'down'\" [opens]=\"'right'\" [ranges]=\"ranges\" [showCustomRangeLabel]=\"true\" [autoApply]=\"true\"\r\n [alwaysShowCalendars]=\"false\" [keepCalendarOpeningWithRange]=\"true\" [showCancel]=\"true\" autocomplete=\"off\"\r\n [(ngModel)]=\"selectedDateRange\" (startDateChanged)=\"onStartDateChange($event)\" [isCustomDate]=\"isCustomDate\"\r\n [locale]=\"{ format: 'DD-MM-YYYY', firstDay: 1, monthNames: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'] }\"\r\n (datesUpdated)=\"datechange($event)\" name=\"daterange\" [readonly]=\"true\" />\r\n</div>\r\n<div class=\"position-relative\">\r\n <button type=\"button\" (click)=\"opendropdown($event)\" class=\"btn btn-default mx-2 rounded-3 text-nowrap border-val\">\r\n <!-- <span class=\"me-2\">Filter</span> -->\r\n <svg class=\"pl-3\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M5 10H15M2.5 5H17.5M7.5 15H12.5\" stroke=\"#344054\" stroke-width=\"2\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </button>\r\n\r\n <div *ngIf=\"Opendropdown\" class=\"card p-5 dropdown1 position-absolute z-1 end-0\" style=\"z-index: 1 !important;\" (clickOutside)=\"closeDropdown1()\">\r\n <div class=\"dropdown-title d-flex justify-content-between mb-2\">Filter Options\r\n <button class=\"btn btn-outline w-25 ms-3 btn-resize\" (click)=\"Reset()\"> Reset </button>\r\n <button class=\"btn btn-primary w-25 btn-resize\" (click)=\"Apply()\">Apply</button>\r\n </div>\r\n\r\n <!-- Location Dropdown -->\r\n<div class=\"dropdown-container\" (clickOutside)=\"closeDropdown()\">\r\n <div class=\"dropdown-header\" (click)=\"toggleDropdown('location')\">\r\n <input \r\n type=\"text\" \r\n class=\"form-control dropdown-input cursor-pointer\" \r\n [value]=\"selectedLocationsLabel()\"\r\n readonly\r\n placeholder=\"Select locations...\"\r\n />\r\n </div>\r\n <div class=\"dropdown-menu custom-dropdown-menu\" *ngIf=\"dropdownOpen === 'location'\">\r\n <input \r\n type=\"text\" \r\n class=\"form-control mb-2 dropdown-search\" \r\n placeholder=\"Search locations...\" \r\n [(ngModel)]=\"searchLocationText\" \r\n (ngModelChange)=\"filterLocations()\" \r\n />\r\n <div class=\"form-check mb-2 dropdown-item custom-dropdown-item\">\r\n <input \r\n class=\"form-check-input cursor-pointer\" \r\n type=\"checkbox\" \r\n id=\"selectAllLocations\" \r\n [checked]=\"isAllLocationsSelected()\" \r\n (change)=\"toggleSelectAllLocations($event)\" \r\n />\r\n <label class=\"form-check-label\" for=\"selectAllLocations\">\r\n Select All Locations\r\n </label>\r\n </div>\r\n <div \r\n class=\"dropdown-item form-check custom-dropdown-item\" \r\n *ngFor=\"let location of filteredLocations\"\r\n >\r\n <input \r\n class=\"form-check-input cursor-pointer\" \r\n type=\"checkbox\" \r\n [id]=\"location.city\" \r\n [(ngModel)]=\"location.checked\"\r\n (change)=\"updateSelectedLocations()\" \r\n />\r\n <label class=\"form-check-label\" [for]=\"location.city\">\r\n {{ location.city }}\r\n </label>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<!-- Group Dropdown -->\r\n<div class=\"dropdown-container mt-3\" (clickOutside)=\"closeDropdown()\">\r\n <div class=\"dropdown-header\" (click)=\"toggleDropdown('group')\">\r\n <input \r\n type=\"text\" \r\n class=\"form-control dropdown-input cursor-pointer\" \r\n [value]=\"selectedGroupsLabel()\" readonly\r\n placeholder=\"Select clusters..\"\r\n />\r\n </div>\r\n <div class=\"dropdown-menu custom-dropdown-menu\" *ngIf=\"dropdownOpen === 'group'\">\r\n <input \r\n type=\"text\" \r\n class=\"form-control mb-2 dropdown-search\" \r\n placeholder=\"Search clusters...\" \r\n [(ngModel)]=\"searchGroupText\" \r\n (ngModelChange)=\"filterGroups()\" \r\n />\r\n <div class=\"form-check mb-2 dropdown-item custom-dropdown-item\">\r\n <input \r\n class=\"form-check-input cursor-pointer\" \r\n type=\"checkbox\" \r\n id=\"selectAllGroups\" \r\n [checked]=\"isAllGroupsSelected()\" \r\n (change)=\"toggleSelectAllGroups($event)\" \r\n />\r\n <label class=\"form-check-label\" for=\"selectAllGroups\">\r\n Select All\r\n </label>\r\n </div>\r\n <div \r\n class=\"dropdown-item form-check custom-dropdown-item\" \r\n *ngFor=\"let group of filteredGroups\"\r\n >\r\n <input \r\n class=\"form-check-input cursor-pointer\" \r\n type=\"checkbox\" \r\n [id]=\"group.groupName\"\r\n [(ngModel)]=\"group.checked\"\r\n (change)=\"updateSelectedGroups()\" \r\n />\r\n <label class=\"form-check-label\" [for]=\"group.groupName\">\r\n {{ group.groupName }}\r\n </label>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n\r\n<!-- Store Dropdown -->\r\n<div class=\"dropdown-container mt-3\" (clickOutside)=\"closeDropdown()\">\r\n <div class=\"dropdown-header\" (click)=\"toggleDropdown('store')\">\r\n <input \r\n type=\"text\" \r\n class=\"form-control dropdown-input cursor-pointer\"\r\n [value]=\"selectedStoresLabel()\"\r\n readonly\r\n placeholder=\"Select stores...\"\r\n />\r\n </div>\r\n <div class=\"dropdown-menu custom-dropdown-menu\" *ngIf=\"dropdownOpen === 'store'\">\r\n <input \r\n type=\"text\" \r\n class=\"form-control mb-2 dropdown-search \" \r\n placeholder=\"Search stores...\" \r\n [(ngModel)]=\"searchStoreText\" \r\n (ngModelChange)=\"filterStores()\" \r\n />\r\n <div class=\"form-check mb-2 dropdown-item custom-dropdown-item\">\r\n <input \r\n class=\"form-check-input cursor-pointer\" \r\n type=\"checkbox\" \r\n id=\"selectAllStores\" \r\n [checked]=\"isAllStoresSelected()\" \r\n (change)=\"toggleSelectAllStores($event)\" \r\n />\r\n <label class=\"form-check-label\" for=\"selectAllStores\">\r\n Select All\r\n </label>\r\n </div>\r\n <div \r\n class=\"dropdown-item form-check custom-dropdown-item\" \r\n *ngFor=\"let store of filteredStores\"\r\n >\r\n <input \r\n class=\"form-check-input\" \r\n type=\"checkbox\" \r\n [id]=\"store.storeId\"\r\n [(ngModel)]=\"store.checked\"\r\n (change)=\"updateSelectedStores()\" \r\n />\r\n <label class=\"form-check-label\" [for]=\"store.storeId\">\r\n {{ store.storeName }}\r\n </label>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n </div>\r\n</div>", styles: [".daterangepicker{display:block!important;top:153.85px!important;left:900px!important;right:0}.form-control{color:var(--Gray-700, #344054)!important;font-size:14px!important;font-weight:600;line-height:20px;text-transform:capitalize}::ng-deep .applyBtn{display:none!important}:host::ng-deep .md-drppicker .btn{line-height:10px!important}:host::ng-deep .daterangepicker-input+.ngx-daterangepicker-material .applyBtn{display:none}:host::ng-deep .md-drppicker.drops-down-right.ltr.double.show-ranges.shown{top:65px!important;left:-470px!important;height:365px!important}:host::ng-deep .md-drppicker .btn{border-radius:8px!important;border:1px solid var(--Primary-600, #00A3FF)!important;background:var(--Primary-600, #00A3FF)!important;box-shadow:0 1px 2px #1018280d!important;color:var(--White, #FFF)!important;font-size:14px!important;font-weight:600!important;line-height:20px;text-transform:capitalize}:host::ng-deep .md-drppicker .ranges ul li button{padding:12px 16px;width:160px;color:var(--Gray-700, #344054);font-size:14px;font-weight:400;line-height:20px;background:none;border:none;text-align:left;cursor:pointer}:host::ng-deep .md-drppicker td.active,:host::ng-deep .md-drppicker td.active:hover{background-color:#029cf4!important;border-radius:20px!important;color:var(--White, #FFF)!important;text-align:center!important;font-size:14px!important;font-weight:500!important;line-height:20px}:host::ng-deep .md-drppicker.ltr .ranges{float:left;margin-top:10px!important}:host::ng-deep .md-drppicker td.in-range{background:var(--Primary-50, #EAF8FF)}:host::ng-deep .md-drppicker .ranges ul li button.active{background:var(--Primary-50, #EAF8FF)!important;border-radius:8px!important;color:var(--Primary-700, #009BF3);font-size:14px!important;font-weight:500!important;line-height:20px!important}:host::ng-deep table th,:host::ng-deep table td{width:40px!important;height:40px!important;padding:10px 8px!important}:host::ng-deep .md-drppicker td.available.prev,:host::ng-deep .md-drppicker th.available.prev{background-image:url(data:image/svg+xml;base64,PHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgMy43IDYiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDMuNyA2IiB4bWw6c3BhY2U9InByZXNlcnZlIj4NCjxnPg0KCTxwYXRoIGQ9Ik0zLjcsMC43TDEuNCwzbDIuMywyLjNMMyw2TDAsM2wzLTNMMy43LDAuN3oiLz4NCjwvZz4NCjwvc3ZnPg0K)!important;background-repeat:no-repeat!important;background-size:.5em!important;background-position:center!important}:host::ng-deep .md-drppicker td.available.next,:host::ng-deep .md-drppicker th.available.next{background-image:url(data:image/svg+xml;base64,PHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgMy43IDYiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDMuNyA2IiB4bWw6c3BhY2U9InByZXNlcnZlIj4NCjxnPg0KCTxwYXRoIGQ9Ik0zLjcsMC43TDEuNCwzbDIuMywyLjNMMyw2TDAsM2wzLTNMMy43LDAuN3oiLz4NCjwvZz4NCjwvc3ZnPg0K)!important;background-repeat:no-repeat!important;background-size:.5em!important;background-position:center!important}:host::ng-deep table th{border-bottom:0px solid var(--Gray-200, #EAECF0)!important;background:transparent!important;color:var(--Gray-700, #344054)!important;text-align:center;font-size:16px!important;font-weight:500!important;line-height:24px}:host::ng-deep .md-drppicker .btn.btn-default{border-radius:8px!important;border:1px solid var(--Gray-300, #D0D5DD)!important;background:var(--White, #FFF)!important;box-shadow:0 1px 2px #1018280d!important;color:var(--Gray-700, #344054)!important;font-size:14px!important;font-weight:600!important;line-height:20px;text-transform:capitalize;margin-right:10px!important}:host::ng-deep .md-drppicker td.available.invalid-date{text-decoration:line-through;pointer-events:none;color:#a9a9a9}:host::ng-deep .md-drppicker td.available.today:not(.invalid-date){text-decoration:unset;pointer-events:unset;color:unset}.wrapper{min-width:200px}.btn-primary{line-height:18px!important}.filter-label{color:var(--Gray-500, #667085)!important;font-size:14px;font-style:normal;font-weight:600;line-height:20px;text-transform:capitalize}.position-relative{position:relative}.filter-icon{cursor:pointer}.dropdown-container{position:relative;display:inline-block;width:100%}.dropdown-header{cursor:pointer;width:100%}.form-control{color:var(--Gray-700, #344054)!important;font-size:14px!important;font-weight:600;line-height:20px;text-transform:capitalize;width:100%;box-sizing:border-box}.dropdown-menu{position:absolute;top:100%;left:0;right:0;border:1px solid #ccc;background-color:#fff;z-index:1000;max-height:230px;overflow-y:auto;display:block;box-sizing:border-box;padding:10px 5px}.dropdown-item{padding:6px 0}.dropdown-item:hover{background-color:#f1f1f1}.dropdown-item input[type=checkbox]{margin-right:10px}.custom-dropdown-menu{border-radius:4px;box-shadow:0 1px 2px #1018280d}.custom-dropdown-item{display:flex;align-items:center}.custom-dropdown-item input{margin-left:10px}.btn-resize{font-size:13px!important;height:29px!important;line-height:11px!important;padding:3px!important}.dropdown1{position:absolute;top:70px;min-width:270px!important}.dropdown1 .dropdown-title{color:var(--Gray-900, #101828);font-size:14px;font-weight:600;line-height:24px}.dropdown1 .dropdown{position:relative;display:inline-block}.dropdown1 .dropdown span{color:var(--Gray-700, #344054);font-size:14px;font-weight:600;line-height:20px}::ng-deep .dropdown1{z-index:1!important}.form-check-label{color:var(--Gray-700, #344054)!important;font-size:14px;font-style:normal;font-weight:500;line-height:20px}input[type=checkbox]{width:16px!important;height:16px!important;margin:0 5px;border-radius:4px!important;-webkit-appearance:none;-moz-appearance:none;-o-appearance:none;appearance:none;outline:1px solid var(--gray-300, #D0D5DD);box-shadow:none;font-size:.8em;text-align:center;line-height:1em;background:#fff}input[type=checkbox]:checked{outline:1px solid var(--primary-600, #00A3FF);background-color:var(--primary-50, #EAF8FF)}input[type=checkbox]:checked:after{content:\"\";transform:rotate(45deg);border-bottom:2px solid #00A3FF;border-right:2px solid #00A3FF;display:inline-block;width:.2em;padding-left:0;padding-top:9px;padding-right:4px}\n"], dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i5.CustomSelectComponent, selector: "lib-select", inputs: ["items", "searchField", "multi", "idField", "selectedValues", "disabled", "label"], outputs: ["selected"] }, { kind: "directive", type: i6.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i6.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i6.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i7.DaterangepickerDirective, selector: "input[ngxDaterangepickerMd]", inputs: ["minDate", "maxDate", "autoApply", "alwaysShowCalendars", "showCustomRangeLabel", "linkedCalendars", "dateLimit", "singleDatePicker", "showWeekNumbers", "showISOWeekNumbers", "showDropdowns", "isInvalidDate", "isCustomDate", "isTooltipDate", "showClearButton", "customRangeDirection", "ranges", "opens", "drops", "firstMonthDayClass", "lastMonthDayClass", "emptyWeekRowClass", "emptyWeekColumnClass", "firstDayOfNextMonthClass", "lastDayOfPreviousMonthClass", "keepCalendarOpeningWithRange", "showRangeLabelOnInput", "showCancel", "lockStartDate", "timePicker", "timePicker24Hour", "timePickerIncrement", "timePickerSeconds", "closeOnAutoApply", "endKeyHolder", "startKey", "locale", "endKey"], outputs: ["change", "rangeClicked", "datesUpdated", "startDateChanged", "endDateChanged", "clearClicked"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }] });
768
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TrafficHeaderComponent, deps: [{ token: i1.AuthService }, { token: i2.Router }, { token: i3.GlobalStateService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
769
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: TrafficHeaderComponent, selector: "lib-traffic-header", host: { listeners: { "document:click": "clickOutside($event)" } }, ngImport: i0, template: "<div class=\"me-3\">\r\n <label *ngIf=\"selectedLocationsLabel()\" class=\"badge badge-light-default mx-2\">{{selectedLocationsLabel()}} \r\n <span class=\"cursor-pointer\" (click)=\"removeLocation()\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\">\r\n <path d=\"M9 3L3 9M3 3L9 9\" stroke=\"#667085\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg></span>\r\n </label>\r\n <label *ngIf=\"selectedGroupsLabel()\" class=\"badge badge-light-default mx-2\">{{selectedGroupsLabel()}} \r\n <span class=\"cursor-pointer\" (click)=\"removeGroup()\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\">\r\n <path d=\"M9 3L3 9M3 3L9 9\" stroke=\"#667085\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg></span>\r\n </label>\r\n <label class=\"badge badge-light-default\">{{selectedStoresLabel()}}</label>\r\n</div>\r\n\r\n\r\n<div class=\"wrapper me-3\" *ngIf=\"(gs.userAccess | async)?.userType === 'tango'\">\r\n<lib-select [items]=\"clientList\" [multi]=\"false\" [searchField]=\"'clientName'\" [disabled]=\"false\" [idField]=\"'clientId'\"\r\n(selected)=\"onClientSelect($event)\" [selectedValues]=\"[selectedClient]\"></lib-select>\r\n</div>\r\n<div class=\"d-flex align-items-center position-relative my-1\">\r\n <span class=\"svg-icon svg-icon-1 position-absolute ms-3\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path\r\n d=\"M13.3333 1.66663V4.99996M6.66667 1.66663V4.99996M2.5 8.33329H17.5M4.16667 3.33329H15.8333C16.7538 3.33329 17.5 4.07948 17.5 4.99996V16.6666C17.5 17.5871 16.7538 18.3333 15.8333 18.3333H4.16667C3.24619 18.3333 2.5 17.5871 2.5 16.6666V4.99996C2.5 4.07948 3.24619 3.33329 4.16667 3.33329Z\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n <input class=\"fx-date-range form-control ps-14\" style=\"min-width: 260px !important;\" type=\"text\" matInput\r\n ngxDaterangepickerMd [drops]=\"'down'\" [opens]=\"'right'\" [ranges]=\"ranges\" [showCustomRangeLabel]=\"true\" [autoApply]=\"true\"\r\n [alwaysShowCalendars]=\"false\" [keepCalendarOpeningWithRange]=\"true\" [showCancel]=\"true\" autocomplete=\"off\"\r\n [(ngModel)]=\"selectedDateRange\" (startDateChanged)=\"onStartDateChange($event)\" [isCustomDate]=\"isCustomDate\"\r\n [locale]=\"{ format: 'DD-MM-YYYY', firstDay: 1, monthNames: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'] }\"\r\n (datesUpdated)=\"datechange($event)\" name=\"daterange\" [readonly]=\"true\" />\r\n</div>\r\n<div class=\"position-relative\">\r\n <button type=\"button\" (click)=\"opendropdown($event)\" class=\"btn btn-default mx-2 rounded-3 text-nowrap border-val\">\r\n <!-- <span class=\"me-2\">Filter</span> -->\r\n <svg class=\"pl-3\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M5 10H15M2.5 5H17.5M7.5 15H12.5\" stroke=\"#344054\" stroke-width=\"2\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </button>\r\n\r\n <div *ngIf=\"Opendropdown\" class=\"card p-5 dropdown1 position-absolute z-1 end-0\" style=\"z-index: 1 !important;\" (clickOutside)=\"closeDropdown1()\">\r\n <div class=\"dropdown-title d-flex justify-content-between mb-2\">Filter Options\r\n <button class=\"btn btn-outline w-25 ms-3 btn-resize\" (click)=\"Reset()\"> Reset </button>\r\n <button class=\"btn btn-primary w-25 btn-resize\" (click)=\"Apply()\">Apply</button>\r\n </div>\r\n\r\n <!-- Location Dropdown -->\r\n<div class=\"dropdown-container\" (clickOutside)=\"closeDropdown()\">\r\n <div class=\"dropdown-header\" (click)=\"toggleDropdown('location')\">\r\n <input \r\n type=\"text\" \r\n class=\"form-control dropdown-input cursor-pointer\" \r\n [value]=\"selectedLocationsLabel()\"\r\n readonly\r\n placeholder=\"Select locations...\"\r\n />\r\n </div>\r\n <div class=\"dropdown-menu custom-dropdown-menu\" *ngIf=\"dropdownOpen === 'location'\">\r\n <input \r\n type=\"text\" \r\n class=\"form-control mb-2 dropdown-search\" \r\n placeholder=\"Search locations...\" \r\n [(ngModel)]=\"searchLocationText\" \r\n (ngModelChange)=\"filterLocations()\" \r\n />\r\n <div class=\"form-check mb-2 dropdown-item custom-dropdown-item\">\r\n <input \r\n class=\"form-check-input cursor-pointer\" \r\n type=\"checkbox\" \r\n id=\"selectAllLocations\" \r\n [checked]=\"isAllLocationsSelected()\" \r\n (change)=\"toggleSelectAllLocations($event)\" \r\n />\r\n <label class=\"form-check-label\" for=\"selectAllLocations\">\r\n Select All Locations\r\n </label>\r\n </div>\r\n <div \r\n class=\"dropdown-item form-check custom-dropdown-item\" \r\n *ngFor=\"let location of filteredLocations\"\r\n >\r\n <input \r\n class=\"form-check-input cursor-pointer\" \r\n type=\"checkbox\" \r\n [id]=\"location.city\" \r\n [(ngModel)]=\"location.checked\"\r\n (change)=\"updateSelectedLocations()\" \r\n />\r\n <label class=\"form-check-label\" [for]=\"location.city\">\r\n {{ location.city }}\r\n </label>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<!-- Group Dropdown -->\r\n<div class=\"dropdown-container mt-3\" (clickOutside)=\"closeDropdown()\">\r\n <div class=\"dropdown-header\" (click)=\"toggleDropdown('group')\">\r\n <input \r\n type=\"text\" \r\n class=\"form-control dropdown-input cursor-pointer\" \r\n [value]=\"selectedGroupsLabel()\" readonly\r\n placeholder=\"Select clusters..\"\r\n />\r\n </div>\r\n <div class=\"dropdown-menu custom-dropdown-menu\" *ngIf=\"dropdownOpen === 'group'\">\r\n <input \r\n type=\"text\" \r\n class=\"form-control mb-2 dropdown-search\" \r\n placeholder=\"Search clusters...\" \r\n [(ngModel)]=\"searchGroupText\" \r\n (ngModelChange)=\"filterGroups()\" \r\n />\r\n <div class=\"form-check mb-2 dropdown-item custom-dropdown-item\">\r\n <input \r\n class=\"form-check-input cursor-pointer\" \r\n type=\"checkbox\" \r\n id=\"selectAllGroups\" \r\n [checked]=\"isAllGroupsSelected()\" \r\n (change)=\"toggleSelectAllGroups($event)\" \r\n />\r\n <label class=\"form-check-label\" for=\"selectAllGroups\">\r\n Select All\r\n </label>\r\n </div>\r\n <div \r\n class=\"dropdown-item form-check custom-dropdown-item\" \r\n *ngFor=\"let group of filteredGroups\"\r\n >\r\n <input \r\n class=\"form-check-input cursor-pointer\" \r\n type=\"checkbox\" \r\n [id]=\"group.groupName\"\r\n [(ngModel)]=\"group.checked\"\r\n (change)=\"updateSelectedGroups()\" \r\n />\r\n <label class=\"form-check-label\" [for]=\"group.groupName\">\r\n {{ group.groupName }}\r\n </label>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n\r\n<!-- Store Dropdown -->\r\n<div class=\"dropdown-container mt-3\" (clickOutside)=\"closeDropdown()\">\r\n <div class=\"dropdown-header\" (click)=\"toggleDropdown('store')\">\r\n <input \r\n type=\"text\" \r\n class=\"form-control dropdown-input cursor-pointer\"\r\n [value]=\"selectedStoresLabel()\"\r\n readonly\r\n placeholder=\"Select stores...\"\r\n />\r\n </div>\r\n <div class=\"dropdown-menu custom-dropdown-menu\" *ngIf=\"dropdownOpen === 'store'\">\r\n <input \r\n type=\"text\" \r\n class=\"form-control mb-2 dropdown-search \" \r\n placeholder=\"Search stores...\" \r\n [(ngModel)]=\"searchStoreText\" \r\n (ngModelChange)=\"filterStores()\" \r\n />\r\n <div class=\"form-check mb-2 dropdown-item custom-dropdown-item\">\r\n <input \r\n class=\"form-check-input cursor-pointer\" \r\n type=\"checkbox\" \r\n id=\"selectAllStores\" \r\n [checked]=\"isAllStoresSelected()\" \r\n (change)=\"toggleSelectAllStores($event)\" \r\n />\r\n <label class=\"form-check-label\" for=\"selectAllStores\">\r\n Select All\r\n </label>\r\n </div>\r\n <div \r\n class=\"dropdown-item form-check custom-dropdown-item\" \r\n *ngFor=\"let store of filteredStores\"\r\n >\r\n <input \r\n class=\"form-check-input\" \r\n type=\"checkbox\" \r\n [id]=\"store.storeId\"\r\n [(ngModel)]=\"store.checked\"\r\n (change)=\"updateSelectedStores()\" \r\n />\r\n <label class=\"form-check-label\" [for]=\"store.storeId\">\r\n {{ store.storeName }}\r\n </label>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n </div>\r\n</div>", styles: [".daterangepicker{display:block!important;top:153.85px!important;left:900px!important;right:0}.form-control{color:var(--Gray-700, #344054)!important;font-size:14px!important;font-weight:600;line-height:20px;text-transform:capitalize}::ng-deep .applyBtn{display:none!important}:host::ng-deep .md-drppicker .btn{line-height:10px!important}:host::ng-deep .daterangepicker-input+.ngx-daterangepicker-material .applyBtn{display:none}:host::ng-deep .md-drppicker.drops-down-right.ltr.double.show-ranges.shown{top:65px!important;left:-470px!important;height:365px!important}:host::ng-deep .md-drppicker .btn{border-radius:8px!important;border:1px solid var(--Primary-600, #00A3FF)!important;background:var(--Primary-600, #00A3FF)!important;box-shadow:0 1px 2px #1018280d!important;color:var(--White, #FFF)!important;font-size:14px!important;font-weight:600!important;line-height:20px;text-transform:capitalize}:host::ng-deep .md-drppicker .ranges ul li button{padding:12px 16px;width:160px;color:var(--Gray-700, #344054);font-size:14px;font-weight:400;line-height:20px;background:none;border:none;text-align:left;cursor:pointer}:host::ng-deep .md-drppicker td.active,:host::ng-deep .md-drppicker td.active:hover{background-color:#029cf4!important;border-radius:20px!important;color:var(--White, #FFF)!important;text-align:center!important;font-size:14px!important;font-weight:500!important;line-height:20px}:host::ng-deep .md-drppicker.ltr .ranges{float:left;margin-top:10px!important}:host::ng-deep .md-drppicker td.in-range{background:var(--Primary-50, #EAF8FF)}:host::ng-deep .md-drppicker .ranges ul li button.active{background:var(--Primary-50, #EAF8FF)!important;border-radius:8px!important;color:var(--Primary-700, #009BF3);font-size:14px!important;font-weight:500!important;line-height:20px!important}:host::ng-deep table th,:host::ng-deep table td{width:40px!important;height:40px!important;padding:10px 8px!important}:host::ng-deep .md-drppicker td.available.prev,:host::ng-deep .md-drppicker th.available.prev{background-image:url(data:image/svg+xml;base64,PHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgMy43IDYiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDMuNyA2IiB4bWw6c3BhY2U9InByZXNlcnZlIj4NCjxnPg0KCTxwYXRoIGQ9Ik0zLjcsMC43TDEuNCwzbDIuMywyLjNMMyw2TDAsM2wzLTNMMy43LDAuN3oiLz4NCjwvZz4NCjwvc3ZnPg0K)!important;background-repeat:no-repeat!important;background-size:.5em!important;background-position:center!important}:host::ng-deep .md-drppicker td.available.next,:host::ng-deep .md-drppicker th.available.next{background-image:url(data:image/svg+xml;base64,PHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgMy43IDYiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDMuNyA2IiB4bWw6c3BhY2U9InByZXNlcnZlIj4NCjxnPg0KCTxwYXRoIGQ9Ik0zLjcsMC43TDEuNCwzbDIuMywyLjNMMyw2TDAsM2wzLTNMMy43LDAuN3oiLz4NCjwvZz4NCjwvc3ZnPg0K)!important;background-repeat:no-repeat!important;background-size:.5em!important;background-position:center!important}:host::ng-deep table th{border-bottom:0px solid var(--Gray-200, #EAECF0)!important;background:transparent!important;color:var(--Gray-700, #344054)!important;text-align:center;font-size:16px!important;font-weight:500!important;line-height:24px}:host::ng-deep .md-drppicker .btn.btn-default{border-radius:8px!important;border:1px solid var(--Gray-300, #D0D5DD)!important;background:var(--White, #FFF)!important;box-shadow:0 1px 2px #1018280d!important;color:var(--Gray-700, #344054)!important;font-size:14px!important;font-weight:600!important;line-height:20px;text-transform:capitalize;margin-right:10px!important}:host::ng-deep .md-drppicker td.available.invalid-date{text-decoration:line-through;pointer-events:none;color:#a9a9a9}:host::ng-deep .md-drppicker td.available.today:not(.invalid-date){text-decoration:unset;pointer-events:unset;color:unset}.wrapper{min-width:200px}.btn-primary{line-height:18px!important}.filter-label{color:var(--Gray-500, #667085)!important;font-size:14px;font-style:normal;font-weight:600;line-height:20px;text-transform:capitalize}.position-relative{position:relative}.filter-icon{cursor:pointer}.dropdown-container{position:relative;display:inline-block;width:100%}.dropdown-header{cursor:pointer;width:100%}.form-control{color:var(--Gray-700, #344054)!important;font-size:14px!important;font-weight:600;line-height:20px;text-transform:capitalize;width:100%;box-sizing:border-box}.dropdown-menu{position:absolute;top:100%;left:0;right:0;border:1px solid #ccc;background-color:#fff;z-index:1000;max-height:230px;overflow-y:auto;display:block;box-sizing:border-box;padding:10px 5px}.dropdown-item{padding:6px 0}.dropdown-item:hover{background-color:#f1f1f1}.dropdown-item input[type=checkbox]{margin-right:10px}.custom-dropdown-menu{border-radius:4px;box-shadow:0 1px 2px #1018280d}.custom-dropdown-item{display:flex;align-items:center}.custom-dropdown-item input{margin-left:10px}.btn-resize{font-size:13px!important;height:29px!important;line-height:11px!important;padding:3px!important}.dropdown1{position:absolute;top:70px;min-width:270px!important}.dropdown1 .dropdown-title{color:var(--Gray-900, #101828);font-size:14px;font-weight:600;line-height:24px}.dropdown1 .dropdown{position:relative;display:inline-block}.dropdown1 .dropdown span{color:var(--Gray-700, #344054);font-size:14px;font-weight:600;line-height:20px}::ng-deep .dropdown1{z-index:1!important}.form-check-label{color:var(--Gray-700, #344054)!important;font-size:14px;font-style:normal;font-weight:500;line-height:20px}input[type=checkbox]{width:16px!important;height:16px!important;margin:0 5px;border-radius:4px!important;-webkit-appearance:none;-moz-appearance:none;-o-appearance:none;appearance:none;outline:1px solid var(--gray-300, #D0D5DD);box-shadow:none;font-size:.8em;text-align:center;line-height:1em;background:#fff}input[type=checkbox]:checked{outline:1px solid var(--primary-600, #00A3FF);background-color:var(--primary-50, #EAF8FF)}input[type=checkbox]:checked:after{content:\"\";transform:rotate(45deg);border-bottom:2px solid #00A3FF;border-right:2px solid #00A3FF;display:inline-block;width:.2em;padding-left:0;padding-top:9px;padding-right:4px}\n"], dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i5.CustomSelectComponent, selector: "lib-select", inputs: ["items", "searchField", "multi", "idField", "selectedValues", "disabled", "label"], outputs: ["selected"] }, { kind: "directive", type: i6.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i6.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i6.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i7.DaterangepickerDirective, selector: "input[ngxDaterangepickerMd]", inputs: ["minDate", "maxDate", "autoApply", "alwaysShowCalendars", "showCustomRangeLabel", "linkedCalendars", "dateLimit", "singleDatePicker", "showWeekNumbers", "showISOWeekNumbers", "showDropdowns", "isInvalidDate", "isCustomDate", "isTooltipDate", "showClearButton", "customRangeDirection", "ranges", "opens", "drops", "firstMonthDayClass", "lastMonthDayClass", "emptyWeekRowClass", "emptyWeekColumnClass", "firstDayOfNextMonthClass", "lastDayOfPreviousMonthClass", "keepCalendarOpeningWithRange", "showRangeLabelOnInput", "showCancel", "lockStartDate", "timePicker", "timePicker24Hour", "timePickerIncrement", "timePickerSeconds", "closeOnAutoApply", "endKeyHolder", "startKey", "locale", "endKey"], outputs: ["change", "rangeClicked", "datesUpdated", "startDateChanged", "endDateChanged", "clearClicked"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }] });
784
770
  }
785
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: TrafficHeaderComponent, decorators: [{
771
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TrafficHeaderComponent, decorators: [{
786
772
  type: Component,
787
773
  args: [{ selector: "lib-traffic-header", template: "<div class=\"me-3\">\r\n <label *ngIf=\"selectedLocationsLabel()\" class=\"badge badge-light-default mx-2\">{{selectedLocationsLabel()}} \r\n <span class=\"cursor-pointer\" (click)=\"removeLocation()\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\">\r\n <path d=\"M9 3L3 9M3 3L9 9\" stroke=\"#667085\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg></span>\r\n </label>\r\n <label *ngIf=\"selectedGroupsLabel()\" class=\"badge badge-light-default mx-2\">{{selectedGroupsLabel()}} \r\n <span class=\"cursor-pointer\" (click)=\"removeGroup()\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\">\r\n <path d=\"M9 3L3 9M3 3L9 9\" stroke=\"#667085\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg></span>\r\n </label>\r\n <label class=\"badge badge-light-default\">{{selectedStoresLabel()}}</label>\r\n</div>\r\n\r\n\r\n<div class=\"wrapper me-3\" *ngIf=\"(gs.userAccess | async)?.userType === 'tango'\">\r\n<lib-select [items]=\"clientList\" [multi]=\"false\" [searchField]=\"'clientName'\" [disabled]=\"false\" [idField]=\"'clientId'\"\r\n(selected)=\"onClientSelect($event)\" [selectedValues]=\"[selectedClient]\"></lib-select>\r\n</div>\r\n<div class=\"d-flex align-items-center position-relative my-1\">\r\n <span class=\"svg-icon svg-icon-1 position-absolute ms-3\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path\r\n d=\"M13.3333 1.66663V4.99996M6.66667 1.66663V4.99996M2.5 8.33329H17.5M4.16667 3.33329H15.8333C16.7538 3.33329 17.5 4.07948 17.5 4.99996V16.6666C17.5 17.5871 16.7538 18.3333 15.8333 18.3333H4.16667C3.24619 18.3333 2.5 17.5871 2.5 16.6666V4.99996C2.5 4.07948 3.24619 3.33329 4.16667 3.33329Z\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n <input class=\"fx-date-range form-control ps-14\" style=\"min-width: 260px !important;\" type=\"text\" matInput\r\n ngxDaterangepickerMd [drops]=\"'down'\" [opens]=\"'right'\" [ranges]=\"ranges\" [showCustomRangeLabel]=\"true\" [autoApply]=\"true\"\r\n [alwaysShowCalendars]=\"false\" [keepCalendarOpeningWithRange]=\"true\" [showCancel]=\"true\" autocomplete=\"off\"\r\n [(ngModel)]=\"selectedDateRange\" (startDateChanged)=\"onStartDateChange($event)\" [isCustomDate]=\"isCustomDate\"\r\n [locale]=\"{ format: 'DD-MM-YYYY', firstDay: 1, monthNames: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'] }\"\r\n (datesUpdated)=\"datechange($event)\" name=\"daterange\" [readonly]=\"true\" />\r\n</div>\r\n<div class=\"position-relative\">\r\n <button type=\"button\" (click)=\"opendropdown($event)\" class=\"btn btn-default mx-2 rounded-3 text-nowrap border-val\">\r\n <!-- <span class=\"me-2\">Filter</span> -->\r\n <svg class=\"pl-3\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M5 10H15M2.5 5H17.5M7.5 15H12.5\" stroke=\"#344054\" stroke-width=\"2\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </button>\r\n\r\n <div *ngIf=\"Opendropdown\" class=\"card p-5 dropdown1 position-absolute z-1 end-0\" style=\"z-index: 1 !important;\" (clickOutside)=\"closeDropdown1()\">\r\n <div class=\"dropdown-title d-flex justify-content-between mb-2\">Filter Options\r\n <button class=\"btn btn-outline w-25 ms-3 btn-resize\" (click)=\"Reset()\"> Reset </button>\r\n <button class=\"btn btn-primary w-25 btn-resize\" (click)=\"Apply()\">Apply</button>\r\n </div>\r\n\r\n <!-- Location Dropdown -->\r\n<div class=\"dropdown-container\" (clickOutside)=\"closeDropdown()\">\r\n <div class=\"dropdown-header\" (click)=\"toggleDropdown('location')\">\r\n <input \r\n type=\"text\" \r\n class=\"form-control dropdown-input cursor-pointer\" \r\n [value]=\"selectedLocationsLabel()\"\r\n readonly\r\n placeholder=\"Select locations...\"\r\n />\r\n </div>\r\n <div class=\"dropdown-menu custom-dropdown-menu\" *ngIf=\"dropdownOpen === 'location'\">\r\n <input \r\n type=\"text\" \r\n class=\"form-control mb-2 dropdown-search\" \r\n placeholder=\"Search locations...\" \r\n [(ngModel)]=\"searchLocationText\" \r\n (ngModelChange)=\"filterLocations()\" \r\n />\r\n <div class=\"form-check mb-2 dropdown-item custom-dropdown-item\">\r\n <input \r\n class=\"form-check-input cursor-pointer\" \r\n type=\"checkbox\" \r\n id=\"selectAllLocations\" \r\n [checked]=\"isAllLocationsSelected()\" \r\n (change)=\"toggleSelectAllLocations($event)\" \r\n />\r\n <label class=\"form-check-label\" for=\"selectAllLocations\">\r\n Select All Locations\r\n </label>\r\n </div>\r\n <div \r\n class=\"dropdown-item form-check custom-dropdown-item\" \r\n *ngFor=\"let location of filteredLocations\"\r\n >\r\n <input \r\n class=\"form-check-input cursor-pointer\" \r\n type=\"checkbox\" \r\n [id]=\"location.city\" \r\n [(ngModel)]=\"location.checked\"\r\n (change)=\"updateSelectedLocations()\" \r\n />\r\n <label class=\"form-check-label\" [for]=\"location.city\">\r\n {{ location.city }}\r\n </label>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<!-- Group Dropdown -->\r\n<div class=\"dropdown-container mt-3\" (clickOutside)=\"closeDropdown()\">\r\n <div class=\"dropdown-header\" (click)=\"toggleDropdown('group')\">\r\n <input \r\n type=\"text\" \r\n class=\"form-control dropdown-input cursor-pointer\" \r\n [value]=\"selectedGroupsLabel()\" readonly\r\n placeholder=\"Select clusters..\"\r\n />\r\n </div>\r\n <div class=\"dropdown-menu custom-dropdown-menu\" *ngIf=\"dropdownOpen === 'group'\">\r\n <input \r\n type=\"text\" \r\n class=\"form-control mb-2 dropdown-search\" \r\n placeholder=\"Search clusters...\" \r\n [(ngModel)]=\"searchGroupText\" \r\n (ngModelChange)=\"filterGroups()\" \r\n />\r\n <div class=\"form-check mb-2 dropdown-item custom-dropdown-item\">\r\n <input \r\n class=\"form-check-input cursor-pointer\" \r\n type=\"checkbox\" \r\n id=\"selectAllGroups\" \r\n [checked]=\"isAllGroupsSelected()\" \r\n (change)=\"toggleSelectAllGroups($event)\" \r\n />\r\n <label class=\"form-check-label\" for=\"selectAllGroups\">\r\n Select All\r\n </label>\r\n </div>\r\n <div \r\n class=\"dropdown-item form-check custom-dropdown-item\" \r\n *ngFor=\"let group of filteredGroups\"\r\n >\r\n <input \r\n class=\"form-check-input cursor-pointer\" \r\n type=\"checkbox\" \r\n [id]=\"group.groupName\"\r\n [(ngModel)]=\"group.checked\"\r\n (change)=\"updateSelectedGroups()\" \r\n />\r\n <label class=\"form-check-label\" [for]=\"group.groupName\">\r\n {{ group.groupName }}\r\n </label>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n\r\n<!-- Store Dropdown -->\r\n<div class=\"dropdown-container mt-3\" (clickOutside)=\"closeDropdown()\">\r\n <div class=\"dropdown-header\" (click)=\"toggleDropdown('store')\">\r\n <input \r\n type=\"text\" \r\n class=\"form-control dropdown-input cursor-pointer\"\r\n [value]=\"selectedStoresLabel()\"\r\n readonly\r\n placeholder=\"Select stores...\"\r\n />\r\n </div>\r\n <div class=\"dropdown-menu custom-dropdown-menu\" *ngIf=\"dropdownOpen === 'store'\">\r\n <input \r\n type=\"text\" \r\n class=\"form-control mb-2 dropdown-search \" \r\n placeholder=\"Search stores...\" \r\n [(ngModel)]=\"searchStoreText\" \r\n (ngModelChange)=\"filterStores()\" \r\n />\r\n <div class=\"form-check mb-2 dropdown-item custom-dropdown-item\">\r\n <input \r\n class=\"form-check-input cursor-pointer\" \r\n type=\"checkbox\" \r\n id=\"selectAllStores\" \r\n [checked]=\"isAllStoresSelected()\" \r\n (change)=\"toggleSelectAllStores($event)\" \r\n />\r\n <label class=\"form-check-label\" for=\"selectAllStores\">\r\n Select All\r\n </label>\r\n </div>\r\n <div \r\n class=\"dropdown-item form-check custom-dropdown-item\" \r\n *ngFor=\"let store of filteredStores\"\r\n >\r\n <input \r\n class=\"form-check-input\" \r\n type=\"checkbox\" \r\n [id]=\"store.storeId\"\r\n [(ngModel)]=\"store.checked\"\r\n (change)=\"updateSelectedStores()\" \r\n />\r\n <label class=\"form-check-label\" [for]=\"store.storeId\">\r\n {{ store.storeName }}\r\n </label>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n </div>\r\n</div>", styles: [".daterangepicker{display:block!important;top:153.85px!important;left:900px!important;right:0}.form-control{color:var(--Gray-700, #344054)!important;font-size:14px!important;font-weight:600;line-height:20px;text-transform:capitalize}::ng-deep .applyBtn{display:none!important}:host::ng-deep .md-drppicker .btn{line-height:10px!important}:host::ng-deep .daterangepicker-input+.ngx-daterangepicker-material .applyBtn{display:none}:host::ng-deep .md-drppicker.drops-down-right.ltr.double.show-ranges.shown{top:65px!important;left:-470px!important;height:365px!important}:host::ng-deep .md-drppicker .btn{border-radius:8px!important;border:1px solid var(--Primary-600, #00A3FF)!important;background:var(--Primary-600, #00A3FF)!important;box-shadow:0 1px 2px #1018280d!important;color:var(--White, #FFF)!important;font-size:14px!important;font-weight:600!important;line-height:20px;text-transform:capitalize}:host::ng-deep .md-drppicker .ranges ul li button{padding:12px 16px;width:160px;color:var(--Gray-700, #344054);font-size:14px;font-weight:400;line-height:20px;background:none;border:none;text-align:left;cursor:pointer}:host::ng-deep .md-drppicker td.active,:host::ng-deep .md-drppicker td.active:hover{background-color:#029cf4!important;border-radius:20px!important;color:var(--White, #FFF)!important;text-align:center!important;font-size:14px!important;font-weight:500!important;line-height:20px}:host::ng-deep .md-drppicker.ltr .ranges{float:left;margin-top:10px!important}:host::ng-deep .md-drppicker td.in-range{background:var(--Primary-50, #EAF8FF)}:host::ng-deep .md-drppicker .ranges ul li button.active{background:var(--Primary-50, #EAF8FF)!important;border-radius:8px!important;color:var(--Primary-700, #009BF3);font-size:14px!important;font-weight:500!important;line-height:20px!important}:host::ng-deep table th,:host::ng-deep table td{width:40px!important;height:40px!important;padding:10px 8px!important}:host::ng-deep .md-drppicker td.available.prev,:host::ng-deep .md-drppicker th.available.prev{background-image:url(data:image/svg+xml;base64,PHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgMy43IDYiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDMuNyA2IiB4bWw6c3BhY2U9InByZXNlcnZlIj4NCjxnPg0KCTxwYXRoIGQ9Ik0zLjcsMC43TDEuNCwzbDIuMywyLjNMMyw2TDAsM2wzLTNMMy43LDAuN3oiLz4NCjwvZz4NCjwvc3ZnPg0K)!important;background-repeat:no-repeat!important;background-size:.5em!important;background-position:center!important}:host::ng-deep .md-drppicker td.available.next,:host::ng-deep .md-drppicker th.available.next{background-image:url(data:image/svg+xml;base64,PHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgMy43IDYiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDMuNyA2IiB4bWw6c3BhY2U9InByZXNlcnZlIj4NCjxnPg0KCTxwYXRoIGQ9Ik0zLjcsMC43TDEuNCwzbDIuMywyLjNMMyw2TDAsM2wzLTNMMy43LDAuN3oiLz4NCjwvZz4NCjwvc3ZnPg0K)!important;background-repeat:no-repeat!important;background-size:.5em!important;background-position:center!important}:host::ng-deep table th{border-bottom:0px solid var(--Gray-200, #EAECF0)!important;background:transparent!important;color:var(--Gray-700, #344054)!important;text-align:center;font-size:16px!important;font-weight:500!important;line-height:24px}:host::ng-deep .md-drppicker .btn.btn-default{border-radius:8px!important;border:1px solid var(--Gray-300, #D0D5DD)!important;background:var(--White, #FFF)!important;box-shadow:0 1px 2px #1018280d!important;color:var(--Gray-700, #344054)!important;font-size:14px!important;font-weight:600!important;line-height:20px;text-transform:capitalize;margin-right:10px!important}:host::ng-deep .md-drppicker td.available.invalid-date{text-decoration:line-through;pointer-events:none;color:#a9a9a9}:host::ng-deep .md-drppicker td.available.today:not(.invalid-date){text-decoration:unset;pointer-events:unset;color:unset}.wrapper{min-width:200px}.btn-primary{line-height:18px!important}.filter-label{color:var(--Gray-500, #667085)!important;font-size:14px;font-style:normal;font-weight:600;line-height:20px;text-transform:capitalize}.position-relative{position:relative}.filter-icon{cursor:pointer}.dropdown-container{position:relative;display:inline-block;width:100%}.dropdown-header{cursor:pointer;width:100%}.form-control{color:var(--Gray-700, #344054)!important;font-size:14px!important;font-weight:600;line-height:20px;text-transform:capitalize;width:100%;box-sizing:border-box}.dropdown-menu{position:absolute;top:100%;left:0;right:0;border:1px solid #ccc;background-color:#fff;z-index:1000;max-height:230px;overflow-y:auto;display:block;box-sizing:border-box;padding:10px 5px}.dropdown-item{padding:6px 0}.dropdown-item:hover{background-color:#f1f1f1}.dropdown-item input[type=checkbox]{margin-right:10px}.custom-dropdown-menu{border-radius:4px;box-shadow:0 1px 2px #1018280d}.custom-dropdown-item{display:flex;align-items:center}.custom-dropdown-item input{margin-left:10px}.btn-resize{font-size:13px!important;height:29px!important;line-height:11px!important;padding:3px!important}.dropdown1{position:absolute;top:70px;min-width:270px!important}.dropdown1 .dropdown-title{color:var(--Gray-900, #101828);font-size:14px;font-weight:600;line-height:24px}.dropdown1 .dropdown{position:relative;display:inline-block}.dropdown1 .dropdown span{color:var(--Gray-700, #344054);font-size:14px;font-weight:600;line-height:20px}::ng-deep .dropdown1{z-index:1!important}.form-check-label{color:var(--Gray-700, #344054)!important;font-size:14px;font-style:normal;font-weight:500;line-height:20px}input[type=checkbox]{width:16px!important;height:16px!important;margin:0 5px;border-radius:4px!important;-webkit-appearance:none;-moz-appearance:none;-o-appearance:none;appearance:none;outline:1px solid var(--gray-300, #D0D5DD);box-shadow:none;font-size:.8em;text-align:center;line-height:1em;background:#fff}input[type=checkbox]:checked{outline:1px solid var(--primary-600, #00A3FF);background-color:var(--primary-50, #EAF8FF)}input[type=checkbox]:checked:after{content:\"\";transform:rotate(45deg);border-bottom:2px solid #00A3FF;border-right:2px solid #00A3FF;display:inline-block;width:.2em;padding-left:0;padding-top:9px;padding-right:4px}\n"] }]
788
774
  }], ctorParameters: () => [{ type: i1.AuthService }, { type: i2.Router }, { type: i3.GlobalStateService }, { type: i0.ChangeDetectorRef }], propDecorators: { onClick: [{
@@ -792,4 +778,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImpo
792
778
  type: HostListener,
793
779
  args: ["document:click", ["$event"]]
794
780
  }] } });
795
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhZmZpYy1oZWFkZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFuZ28tYXBwLXNoYXJlZC9zcmMvbGliL21vZHVsZXMvbGF5b3V0L3Rvb2xiYXIvdHJhZmZpYy1oZWFkZXIvdHJhZmZpYy1oZWFkZXIvdHJhZmZpYy1oZWFkZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFuZ28tYXBwLXNoYXJlZC9zcmMvbGliL21vZHVsZXMvbGF5b3V0L3Rvb2xiYXIvdHJhZmZpYy1oZWFkZXIvdHJhZmZpYy1oZWFkZXIvdHJhZmZpYy1oZWFkZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFNBQVMsRUFDVCxZQUFZLEdBRWIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8saUJBQWlCLENBQUM7Ozs7Ozs7OztBQVN6QixNQUFNLE9BQU8sc0JBQXNCO0lBcUN2QjtJQUE4QjtJQUMvQjtJQUNDO0lBdENWLEtBQUssR0FBRyxLQUFLLENBQUM7SUFDZCxZQUFZLEdBQUcsQ0FBQyxDQUFjLEVBQUUsRUFBRTtRQUNoQyxNQUFNLFdBQVcsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3JDLE9BQU8sV0FBVyxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztJQUM5QyxDQUFDLENBQUM7SUFFRixpQkFBaUIsR0FBUSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQztRQUNoRSxPQUFPLEVBQUUsS0FBSyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsR0FBRSxDQUFDO0lBQ3pDLGVB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Y3RvclJlZixcclxuICBDb21wb25lbnQsXHJcbiAgSG9zdExpc3RlbmVyLFxyXG4gIE9uSW5pdCxcclxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgZGF5anMgZnJvbSBcImRheWpzXCI7XHJcbmltcG9ydCBcImRheWpzL2xvY2FsZS9lblwiO1xyXG5pbXBvcnQgeyBBdXRoU2VydmljZSB9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9zZXJ2aWNlcy9hdXRoLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgR2xvYmFsU3RhdGVTZXJ2aWNlIH0gZnJvbSBcInRhbmdvLWFwcC11aS1nbG9iYWxcIjtcclxuaW1wb3J0IHsgTmF2aWdhdGlvbkVuZCwgUm91dGVyIH0gZnJvbSBcIkBhbmd1bGFyL3JvdXRlclwiO1xyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogXCJsaWItdHJhZmZpYy1oZWFkZXJcIixcclxuICB0ZW1wbGF0ZVVybDogXCIuL3RyYWZmaWMtaGVhZGVyLmNvbXBvbmVudC5odG1sXCIsXHJcbiAgc3R5bGVVcmw6IFwiLi90cmFmZmljLWhlYWRlci5jb21wb25lbnQuc2Nzc1wiLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgVHJhZmZpY0hlYWRlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgZGF5anMgPSBkYXlqcztcclxuICBpc0N1c3RvbURhdGUgPSAobTogZGF5anMuRGF5anMpID0+IHtcclxuICAgIGNvbnN0IGlzVmFsaWREYXRlID0gbSA+IHRoaXMuZGF5anMoKTtcclxuICAgIHJldHVybiBpc1ZhbGlkRGF0ZSA/IFwiaW52YWxpZC1kYXRlXCIgOiBmYWxzZTtcclxuICB9O1xyXG5cclxuICBzZWxlY3RlZERhdGVSYW5nZTogYW55ID0geyBzdGFydERhdGU6IGRheWpzKCkuc3VidHJhY3QoMzAsICdkYXlzJyksXHJcbiAgICBlbmREYXRlOiBkYXlqcygpLnN1YnRyYWN0KDEsIFwiZGF5c1wiKSx9O1xyXG4gIHNlbGVjdGVkRmlsdGVyczogYW55ID0ge1xyXG4gICAgY2xpZW50OiBudWxsLFxyXG4gICAgY2xpZW50TmFtZTogbnVsbCxcclxuICAgIGNsaWVudHM6IFtdLFxyXG4gICAgc3RvcmU6IG51bGwsXHJcbiAgICBzdG9yZXM6IFtdLFxyXG4gICAgZGF0ZTogbnVsbCxcclxuICAgIGdyb3VwOiBbXSxcclxuICAgIGxvY2F0aW9uOiBbXSxcclxuICB9O1xyXG4gIE9wZW5kcm9wZG93bjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGRyb3Bkb3duT3Blbjogc3RyaW5nIHwgbnVsbCA9IG51bGw7IC8vICdsb2NhdGlvbicgb3IgJ2dyb3VwJ1xyXG4gIHNlYXJjaExvY2F0aW9uVGV4dDogc3RyaW5nID0gXCJcIjtcclxuICBzZWFyY2hHcm91cFRleHQ6IHN0cmluZyA9IFwiXCI7XHJcbiAgbG9jYXRpb25zOiBhbnlbXSA9IFtdO1xyXG4gIGZpbHRlcmVkTG9jYXRpb25zOiBhbnlbXSA9IFtdO1xyXG4gIGdyb3Vwc0RhdGE6IGFueVtdID0gW107XHJcbiAgZmlsdGVyZWRHcm91cHM6IGFueVtdID0gW107XHJcbiAgZmlsdGVyZWRTdG9yZXM6IGFueVtdID0gW107XHJcbiAgc3RvcmVzOmFueVtdID0gW11cclxuICBzZWFyY2hTdG9yZVRleHQ6c3RyaW5nID0gJyc7XHJcbiAgY2xpZW50TGlzdDphbnkgPSBbXVxyXG4gIHNlbGVjdGVkQ2xpZW50OmFueVxyXG4gIGxvY2F0aW9uTGFiZWw6IGFueVtdPVtdO1xyXG4gIGdyb3VwTGFiZWw6IGFueVtdPVtdO1xyXG4gIHVzZXJzOiBhbnk7XHJcbiAgdXJsOiBhbnk7XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGF1dGg6IEF1dGhTZXJ2aWNlLCAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxyXG4gICAgcHVibGljIGdzOiBHbG9iYWxTdGF0ZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGNkOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICApIHt9XHJcblxyXG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmNsaWNrJywgWyckZXZlbnQnXSlcclxuICBvbkNsaWNrIChldmVudDogTW91c2VFdmVudCkge1xyXG4gICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xyXG4gICAgaWYoIXRhcmdldC5jbG9zZXN0KCcuZHJvcGRvd24xJykpIHtcclxuICAgICAgdGhpcy5PcGVuZHJvcGRvd24gPSBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcbiAgY2xvc2VEcm9wZG93bjEoKXtcclxuICAgIHRoaXMuT3BlbmRyb3Bkb3duID0gZmFsc2U7XHJcbiAgfVxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgLy8gdGhpcy5zZXRSYW5nZXNCYXNlZE9uUm91dGUoKTtcclxuXHJcbiAgICAvLyBMaXN0ZW4gZm9yIHJvdXRlIGNoYW5nZXMgdG8gdXBkYXRlIHJhbmdlc1xyXG4gICAgLy8gdGhpcy5yb3V0ZXI/LmV2ZW50cz8uc3Vic2NyaWJlKChldmVudCkgPT4ge1xyXG4gICAgLy8gICBpZiAoZXZlbnQgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uRW5kKSB7XHJcbiAgICAvLyAgICAgdGhpcy5zZXRSYW5nZXNCYXNlZE9uUm91dGUoKTtcclxuICAgIC8vICAgfVxyXG4gICAgLy8gfSk7XHJcbiAgICB0aGlzLnVybCA9IHRoaXMucm91dGVyLnVybC5zcGxpdChcIj9cIilbMF0uc3BsaXQoJy8nKTtcclxuICAgIGNvbnN0IHVzZXIgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCd1c2VyLWluZm8nKSBhcyBzdHJpbmcpO1xyXG4gICAgdGhpcy51c2VycyA9IHVzZXI7XHJcbiAgICB0aGlzLmdzPy5tYW5hZ2VSZWZyZXNoVHJpZ2dlcj8uc3Vic2NyaWJlKChlKSA9PiB7ICAgICAgXHJcbiAgICAgIGlmIChlKSB7XHJcbiAgICAgICAgaWYgKHVzZXIudXNlclR5cGUgPT09ICd0YW5nbycpIHtcclxuICAgICAgICB0aGlzLmdldENsaWVudCgpO1xyXG4gICAgICAgIH0gZWxzZXtcclxuICAgICAgICAgIGNvbnN0IHN0b3JlZEZpbHRlcnMgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcImhlYWRlci1maWx0ZXJzXCIpO1xyXG4gICAgICAgICAgaWYgKHN0b3JlZEZpbHRlcnMpIHtcclxuICAgICAgICAgIGNvbnN0IGhlYWRlckZpbHRlcnMgPSBKU09OLnBhcnNlKHN0b3JlZEZpbHRlcnMpO1xyXG4gICAgICAgICAgdGhpcy5maWx0ZXJlZFN0b3JlcyA9IGhlYWRlckZpbHRlcnM/LnN0b3Jlcy5tYXAoKHN0b3JlOmFueSkgPT4gKHtcclxuICAgICAgICAgICAgLi4uc3RvcmUsXHJcbiAgICAgICAgICAgIGNoZWNrZWQ6IHN0b3JlLmNoZWNrZWRcclxuICAgICAgICAgIH0pKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuIFxyXG4gICAgLy8gRmV0Y2ggY2xpZW50IGRhdGEgaWYgdGhlIHVzZXIgaXMgb2YgdHlwZSAndGFuZ28nXHJcbiAgICBpZiAodXNlci51c2VyVHlwZSA9PT0gJ3RhbmdvJykge1xyXG4gICAgICB0aGlzLmdldENsaWVudCgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5nZXRMb2NhdGlvbnMoKTtcclxuICAgICAgdGhpcy5nZXRHcm91cHMoKTtcclxuICAgICAgdGhpcy5nZXRTdG9yZSgpO1xyXG4vLyAgICAgICB0aGlzLmVtaXRBbmRTdG9yZUZpbHRlcnMoKTtcclxuLy8gY29uc29sZS5sb2coXCIxXCIpXHJcbiAgICB9XHJcbiAgIFxyXG4gICAgLy8gTG9hZCBmaWx0ZXJzIGZyb20gbG9jYWxTdG9yYWdlIGlmIHRoZXkgZXhpc3RcclxuICAgIGNvbnN0IHN0b3JlZEZpbHRlcnMgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcImhlYWRlci1maWx0ZXJzXCIpO1xyXG4gICAgaWYgKHN0b3JlZEZpbHRlcnMpIHtcclxuICAgICAgY29uc3QgaGVhZGVyRmlsdGVycyA9IEpTT04ucGFyc2Uoc3RvcmVkRmlsdGVycyk7XHJcbiAgXHJcbiAgICAgIC8vIEluaXRpYWxpemUgc2VsZWN0ZWRGaWx0ZXJzIHdpdGggZGVmYXVsdHMgb3IgZXhpc3RpbmcgdmFsdWVzXHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRGaWx0ZXJzID0ge1xyXG4gICAgICAgIGNsaWVudDogaGVhZGVyRmlsdGVycy5jbGllbnQgfHwgdGhpcy51c2Vycy5jbGllbnQsXHJcbiAgICAgICAgY2xpZW50TmFtZTogaGVhZGVyRmlsdGVycy5jbGllbnROYW1lIHx8ICcnLFxyXG4gICAgICAgIGNsaWVudHM6IGhlYWRlckZpbHRlcnMuY2xpZW50cyB8fCBbXSxcclxuICAgICAgICBzdG9yZTogaGVhZGVyRmlsdGVycy5zdG9yZSB8fCBudWxsLFxyXG4gICAgICAgIGRhdGU6IGhlYWRlckZpbHRlcnMuZGF0ZSB8fCB7fSxcclxuICAgICAgICBzdG9yZXM6IGhlYWRlckZpbHRlcnMuc3RvcmVzIHx8IFtdLFxyXG4gICAgICAgIGdyb3VwOiBoZWFkZXJGaWx0ZXJzLmdyb3VwIHx8IFtdLFxyXG4gICAgICAgIGxvY2F0aW9uOiBoZWFkZXJGaWx0ZXJzLmxvY2F0aW9uIHx8IFtdXHJcbiAgICAgIH07XHJcbiAgXHJcbiAgICAgIC8vIFN5bmMgZmlsdGVyZWQgZGF0YSB3aXRoIHN0b3JlZCBzZWxlY3Rpb25zXHJcbiAgICAgIHRoaXMuZmlsdGVyZWRMb2NhdGlvbnMgPSB0aGlzLnN5bmNXaXRoTG9jYWxTdG9yYWdlKGhlYWRlckZpbHRlcnMubG9jYXRpb24pO1xyXG4gICAgICB0aGlzLmZpbHRlcmVkR3JvdXBzID0gdGhpcy5zeW5jV2l0aExvY2FsU3RvcmFnZShoZWFkZXJGaWx0ZXJzLmdyb3VwKTtcclxuICAgICAgdGhpcy5maWx0ZXJlZFN0b3JlcyA9IHRoaXMuc3luY1dpdGhMb2NhbFN0b3JhZ2UoaGVhZGVyRmlsdGVycy5zdG9yZXMpO1xyXG4gIFxyXG4gICAgICAvLyBGb3JtYXQgZGF0ZSByYW5nZSBpZiBpdCBleGlzdHNcclxuICAgICAgaWYgKGhlYWRlckZpbHRlcnMuZGF0ZSkge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWREYXRlUmFuZ2UgPSB7XHJcbiAgICAgICAgICBzdGFydERhdGU6IHRoaXMuZGF5anMoaGVhZGVyRmlsdGVycy5kYXRlLnN0YXJ0RGF0ZSwgXCJZWVlZLU1NLUREXCIpLmZvcm1hdChcIkRELU1NLVlZWVlcIiksXHJcbiAgICAgICAgICBlbmREYXRlOiB0aGlzLmRheWpzKGhlYWRlckZpbHRlcnMuZGF0ZS5lbmREYXRlLCBcIllZWVktTU0tRERcIikuZm9ybWF0KFwiREQtTU0tWVlZWVwiKSxcclxuICAgICAgICB9O1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWREYXRlUmFuZ2UgPSB7XHJcbiAgICAgICAgICBzdGFydERhdGU6IHRoaXMuZGF5anModGhpcy5zZWxlY3RlZERhdGVSYW5nZS5zdGFydERhdGUsIFwiWVlZWS1NTS1ERFwiKS5mb3JtYXQoXCJERC1NTS1ZWVlZXCIpLFxyXG4gICAgICAgICAgZW5kRGF0ZTogdGhpcy5kYXlqcyh0aGlzLnNlbGVjdGVkRGF0ZVJhbmdlLmVuZERhdGUsIFwiWVlZWS1NTS1ERFwiKS5mb3JtYXQoXCJERC1NTS1ZWVlZXCIpLFxyXG4gICAgICAgIH07XHJcbiAgICAgIH1cclxuICAgICAgLy8gY29uc29sZS5sb2coXCIzXCIpXHJcbiAgICAgIC8vIEVtaXQgZGF0YSB2aWEgc2VydmljZSBhbmQgdXBkYXRlIGxvY2FsU3RvcmFnZVxyXG50aGlzLmVtaXRBbmRTdG9yZUZpbHRlcnMoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIEluaXRpYWxpemUgZW1wdHkgc3RhdGVzIGlmIG5vIGhlYWRlciBmaWx0ZXJzIGFyZSBwcmVzZW50IGluIGxvY2FsU3RvcmFnZVxyXG4gICAgICB0aGlzLnJlc2V0RmlsdGVycygpO1xyXG4gICAgICAvLyBjb25zb2xlLmxvZyhcIjJcIilcclxuICAgIH1cclxuICB9XHJcbiAgcHJpdmF0ZSBzeW5jV2l0aExvY2FsU3RvcmFnZShpdGVtczogYW55W10pOiBhbnlbXSB7XHJcbiAgICByZXR1cm4gaXRlbXNcclxuICAgICAgPyBpdGVtcy5tYXAoKGl0ZW06IGFueSkgPT4gKHtcclxuICAgICAgICAgIC4uLml0ZW0sXHJcbiAgICAgICAgICBjaGVja2VkOiBpdGVtLmNoZWNrZWQgPT09IHRydWVcclxuICAgICAgICB9KSlcclxuICAgICAgOiBbXTtcclxuICB9XHJcbiAgXHJcbiAgcHJpdmF0ZSBlbWl0QW5kU3RvcmVGaWx0ZXJzKCk6IHZvaWQge1xyXG4gICAgdGhpcy5ncy5kYXRhUmFuZ2VWYWx1ZS5uZXh0KHRoaXMuc2VsZWN0ZWRGaWx0ZXJzKTtcclxuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFwiaGVhZGVyLWZpbHRlcnNcIiwgSlNPTi5zdHJpbmdpZnkodGhpcy5zZWxlY3RlZEZpbHRlcnMpKTtcclxuICAgIC8vIGNvbnNvbGUubG9nKFwiMVwiKVxyXG4gIH1cclxuICBcclxuICAvKipcclxuICAgKiBSZXNldCBzZWxlY3RlZEZpbHRlcnMgYW5kIGFsbCByZWxhdGVkIGFycmF5cyB0byBlbXB0eSBzdGF0ZXNcclxuICAgKi9cclxuICBwcml2YXRlIHJlc2V0RmlsdGVycygpOiB2b2lkIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRGaWx0ZXJzID0ge1xyXG4gICAgICBjbGllbnQ6IG51bGwsXHJcbiAgICAgIGNsaWVudE5hbWU6ICcnLFxyXG4gICAgICBjbGllbnRzOiBbXSxcclxuICAgICAgc3RvcmU6IG51bGwsXHJcbiAgICAgIGRhdGU6IHt9LFxyXG4gICAgICBzdG9yZXM6IFtdLFxyXG4gICAgICBncm91cDogW10sXHJcbiAgICAgIGxvY2F0aW9uOiBbXVxyXG4gICAgfTtcclxuICAgIHRoaXMuZmlsdGVyZWRMb2NhdGlvbnMgPSBbXTtcclxuICAgIHRoaXMuZmlsdGVyZWRHcm91cHMgPSBbXTtcclxuICAgIHRoaXMuZmlsdGVyZWRTdG9yZXMgPSBbXTtcclxuICB9XHJcbmdldENsaWVudCgpe1xyXG4gIHRoaXMuYXV0aC5nZXRDbGllbnRzKCkuc3Vic2NyaWJlKHtcclxuICAgIG5leHQ6IChlKSA9PiB7XHJcbiAgICAgIGlmIChlKSB7XHJcbiAgICAgICAgdGhpcy5jbGllbnRMaXN0ID0gZS5kYXRhLnJlc3VsdDtcclxuICAgICAgICBjb25zdCBoZWFkZXJGaWx0ZXJzOiBhbnkgPSBKU09OLnBhcnNlKFxyXG4gICAgICAgICAgbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJoZWFkZXItZmlsdGVyc1wiKSB8fCBcInt9XCJcclxuICAgICAgICApO1xyXG4gICAgICAgIGlmIChoZWFkZXJGaWx0ZXJzLmNsaWVudCkge1xyXG4gICAgICAgICAgdGhpcy5jbGllbnRMaXN0LmZpbmQoKG9iajogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChvYmouY2xpZW50SWQgPT09IGhlYWRlckZpbHRlcnMuY2xpZW50KSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZENsaWVudCA9IG9iajtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkRmlsdGVycy5jbGllbnQgPSBoZWFkZXJGaWx0ZXJzLmNsaWVudDtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRGaWx0ZXJzLmNsaWVudE5hbWUgPSBoZWFkZXJGaWx0ZXJzLmNsaWVudE5hbWU7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkRmlsdGVycy5jbGllbnRzID0gaGVhZGVyRmlsdGVycy5jbGllbnRzO1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZEZpbHRlcnMuc3RvcmUgPSBoZWFkZXJGaWx0ZXJzLnN0b3JlO1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZEZpbHRlcnMuZGF0ZSA9IGhlYWRlckZpbHRlcnMuZGF0ZTtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRGaWx0ZXJzLnN0b3JlcyA9IGhlYWRlckZpbHRlcnMuc3RvcmVzO1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZEZpbHRlcnMuZ3JvdXAgPSBoZWFkZXJGaWx0ZXJzLmdyb3VwO1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZEZpbHRlcnMubG9jYXRpb24gPSBoZWFkZXJGaWx0ZXJzLmxvY2F0aW9uO1xyXG4gICAgICAgICAgdGhpcy5ncy5kYXRhUmFuZ2VWYWx1ZS5uZXh0KHRoaXMuc2VsZWN0ZWRGaWx0ZXJzKTtcclxuICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwiMlwiKVxyXG4gICAgICAgICAgICAgICAgIC8vIEVuc3VyZSBsb2NhdGlvbnMgYW5kIGdyb3VwcyBhcmUgbG9hZGVkIGJlZm9yZSBmZXRjaGluZyBzdG9yZXNcclxuIHRoaXMuZ2V0TG9jYXRpb25zKCk7XHJcbiB0aGlzLmdldEdyb3VwcygpO1xyXG4gIC8vIEZldGNoIHN0b3JlcyBvbmx5IGFmdGVyIGxvY2F0aW9ucyBhbmQgZ3JvdXBzIGFyZSBzZXRcclxuICB0aGlzLmdldFN0b3JlKCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZENsaWVudCA9IHRoaXMuY2xpZW50TGlzdFswXTtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkRmlsdGVycy5jbGllbnQgPSAgdGhpcy5zZWxlY3RlZENsaWVudC5jbGllbnRJZDtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkRmlsdGVycy5jbGllbnROYW1lID0gdGhpcy5zZWxlY3RlZENsaWVudC5jbGllbnROYW1lXHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRGaWx0ZXJzLmNsaWVudHMgPSBoZWFkZXJGaWx0ZXJzLmNsaWVudHM7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRGaWx0ZXJzLnN0b3JlID0gaGVhZGVyRmlsdGVycy5zdG9yZTtcclxuICAgICAgdGhpcy5zZWxlY3RlZEZpbHRlcnMuZGF0ZSA9IGhlYWRlckZpbHRlcnMuZGF0ZTtcclxuICAgICAgdGhpcy5zZWxlY3RlZEZpbHRlcnMuc3RvcmVzID0gaGVhZGVyRmlsdGVycy5zdG9yZXM7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRGaWx0ZXJzLmdyb3VwID0gaGVhZGVyRmlsdGVycy5ncm91cDtcclxuICAgICAgdGhpcy5zZWxlY3RlZEZpbHRlcnMubG9jYXRpb24gPSBoZWFkZXJGaWx0ZXJzLmxvY2F0aW9uO1xyXG4gICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFxyXG4gICAgICAgICAgXCJoZWFkZXItZmlsdGVyc1wiLFxyXG4gICAgICAgICAgSlNPTi5zdHJpbmdpZnkodGhpcy5zZWxlY3RlZEZpbHRlcnMpIFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5ncy5kYXRhUmFuZ2VWYWx1ZS5uZXh0KHRoaXMuc2VsZWN0ZWRGaWx0ZXJzKTtcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhcIjNcIilcclxuICAgICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgICAgICAgLy8gRW5zdXJlIGxvY2F0aW9ucyBhbmQgZ3JvdXBzIGFyZSBsb2FkZWQgYmVmb3JlIGZldGNoaW5nIHN0b3Jlc1xyXG4gdGhpcy5nZXRMb2NhdGlvbnMoKTtcclxuIHRoaXMuZ2V0R3JvdXBzKCk7XHJcbiAgLy8gRmV0Y2ggc3RvcmVzIG9ubHkgYWZ0ZXIgbG9jYXRpb25zIGFuZCBncm91cHMgYXJlIHNldFxyXG4gIHRoaXMuZ2V0U3RvcmUoKTtcclxuICAgICAgfVxyXG5cclxuXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkQ2xpZW50ID0gdGhpcy5jbGllbnRMaXN0WzBdO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkRmlsdGVycy5jbGllbnQgPSAgdGhpcy5zZWxlY3RlZENsaWVudC5jbGllbnRJZDtcclxuICAgICAgdGhpcy5zZWxlY3RlZEZpbHRlcnMuY2xpZW50TmFtZSA9IHRoaXMuc2VsZWN0ZWRDbGllbnQuY2xpZW50TmFtZVxyXG4gICAgICAgLy8gRW5zdXJlIGxvY2F0aW9ucyBhbmQgZ3JvdXBzIGFyZSBsb2FkZWQgYmVmb3JlIGZldGNoaW5nIHN0b3Jlc1xyXG4gdGhpcy5nZXRMb2NhdGlvbnMoKTtcclxuIHRoaXMuZ2V0R3JvdXBzKCk7XHJcbiAvLyBGZXRjaCBzdG9yZXMgb25seSBhZnRlciBsb2NhdGlvbnMgYW5kIGdyb3VwcyBhcmUgc2V0XHJcbiB0aGlzLmdldFN0b3JlKCk7XHJcbiAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFxyXG4gICAgICAgIFwiaGVhZGVyLWZpbHRlcnNcIixcclxuICAgICAgICBKU09OLnN0cmluZ2lmeSh0aGlzLnNlbGVjdGVkRmlsdGVycykgXHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMuZ3MuZGF0YVJhbmdlVmFsdWUubmV4dCh0aGlzLnNlbGVjdGVkRmlsdGVycyk7XHJcbiAgICAgIC8vIGNvbnNvbGUubG9nKFwiNFwiKVxyXG4gICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcclxuICAgIH1cclxuICAgIH0sXHJcbiAgfSk7XHJcbn1cclxub25DbGllbnRTZWxlY3QoZXZlbnQ6IGFueSk6IHZvaWQge1xyXG4gIC8vIFVwZGF0ZSB0aGUgc2VsZWN0ZWQgY2xpZW50XHJcbiAgdGhpcy5zZWxlY3RlZENsaWVudCA9IGV2ZW50O1xyXG4gIC8vIENsZWFyIHByZXZpb3VzIGZpbHRlcmVkIGRhdGEgYW5kIHNlbGVjdGlvbnNcclxuICB0aGlzLmZpbHRlcmVkR3JvdXBzID0gW107XHJcbiAgdGhpcy5maWx0ZXJlZFN0b3JlcyA9IFtdO1xyXG4gIHRoaXMuZmlsdGVyZWRMb2NhdGlvbnMgPSBbXTtcclxuICB0aGlzLnNlbGVjdGVkRmlsdGVycy5zdG9yZXMgPSBbXTtcclxuICB0aGlzLnNlbGVjdGVkRmlsdGVycy5ncm91cCA9IFtdO1xyXG4gIHRoaXMuc2VsZWN0ZWRGaWx0ZXJzLmxvY2F0aW9uID0gW107XHJcblxyXG4gIC8vIEZldGNoIGhlYWRlciBmaWx0ZXJzIGZyb20gbG9jYWxTdG9yYWdlXHJcbiAgY29uc3QgaGVhZGVyRmlsdGVyczogYW55ID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcImhlYWRlci1maWx0ZXJzXCIpIHx8IFwie31cIik7XHJcbiAgXHJcbiAgLy8gVXBkYXRlIHRoZSBzZWxlY3RlZCBmaWx0ZXJzIHdpdGggdGhlIG5ldyBjbGllbnRcclxuICB0aGlzLnNlbGVjdGVkRmlsdGVycy5jbGllbnQgPSB0aGlzLnNlbGVjdGVkQ2xpZW50LmNsaWVudElkO1xyXG4gIHRoaXMuc2VsZWN0ZWRGaWx0ZXJzLmNsaWVudE5hbWUgPSB0aGlzLnNlbGVjdGVkQ2xpZW50LmNsaWVudE5hbWU7XHJcbiAgXHJcbiAgLy8gUmVtb3ZlIG9sZCBzdG9yZSwgZ3JvdXAsIGFuZCBsb2NhdGlvbiBkYXRhIGZyb20gdGhlIGhlYWRlciBmaWx0ZXJzXHJcbiAgZGVsZXRlIGhlYWRlckZpbHRlcnMuc3RvcmVzO1xyXG4gIGRlbGV0ZSBoZWFkZXJGaWx0ZXJzLmdyb3VwcztcclxuICBkZWxldGUgaGVhZGVyRmlsdGVycy5sb2NhdGlvbjtcclxuICBcclxuICAvLyBGZXRjaCBuZXcgZGF0YSBiYXNlZCBvbiB0aGUgbmV3IGNsaWVudFxyXG4gIHRoaXMuZ2V0TG9jYXRpb25zKCk7XHJcbiAgdGhpcy5nZXRTdG9yZSgpO1xyXG4gIHRoaXMuZ2V0R3JvdXBzKCk7XHJcblxyXG4gIC8vIFVwZGF0ZSBsb2NhbFN0b3JhZ2Ugd2l0aCB0aGUgbmV3IGNsaWVudCBzZWxlY3Rpb24gYW5kIGVtcHR5IGZpbHRlciBkYXRhXHJcbiAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ2hlYWRlci1maWx0ZXJzJywgSlNPTi5zdHJpbmdpZnkodGhpcy5zZWxlY3RlZEZpbHRlcnMpKTtcclxuICB3aW5kb3cubG9jYXRpb24ucmVsb2FkKClcclxuICAvLyBFbWl0IGRhdGEgdG8gdGhlIGdsb2JhbCBzZXJ2aWNlXHJcbiAgLy8gdGhpcy5ncy5kYXRhUmFuZ2VWYWx1ZS5uZXh0KHRoaXMuc2VsZWN0ZWRGaWx0ZXJzKTtcclxuICAvLyBUcmlnZ2VyIGNoYW5nZSBkZXRlY3Rpb24gdG8gcmVmbGVjdCBVSSBjaGFuZ2VzXHJcbiAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XHJcbn1cclxuXHJcblxyXG5cclxucmFuZ2VzOmFueSA9IHtcclxuICBUb2RheTogW2RheWpzKCksIGRheWpzKCldLFxyXG4gIFllc3RlcmRheTogW2RheWpzKCkuc3VidHJhY3QoMSwgJ2RheXMnKSwgZGF5anMoKS5zdWJ0cmFjdCgxLCAnZGF5cycpXSxcclxuICAnVGhpcyBXZWVrJzogW2RheWpzKCkuc3VidHJhY3QoNywgJ2RheXMnKSwgZGF5anMoKS5zdWJ0cmFjdCgxLCAnZGF5cycpXSxcclxuICAnTGFzdCBXZWVrJzogW1xyXG4gICAgZGF5anMoKS5zdWJ0cmFjdCgxNCwgJ2RheXMnKS5zdGFydE9mKCdkYXknKSxcclxuICAgIGRheWpzKCkuc3VidHJhY3QoOCwgJ2RheXMnKS5lbmRPZignZGF5JyksXHJcbiAgXSxcclxuICAnVGhpcyBNb250aCc6IFtkYXlqcygpLnN1YnRyYWN0KDMwLCAnZGF5cycpLCBkYXlqcygpLnN1YnRyYWN0KDEsICdkYXlzJyldLFxyXG4gICdMYXN0IE1vbnRoJzogW1xyXG4gICAgZGF5anMoKS5zdWJ0cmFjdCgxLCAnbW9udGgnKS5zdGFydE9mKCdtb250aCcpLFxyXG4gICAgZGF5anMoKS5zdWJ0cmFjdCgxLCAnbW9udGgnKS5lbmRPZignbW9udGgnKSxcclxuICBdLFxyXG59O1xyXG5cclxuICBvblN0YXJ0RGF0ZUNoYW5nZShldmVudDogYW55KSB7XHJcbiAgICBpZiAodGhpcy5kYXlqcyhldmVudC5zdGFydERhdGUpLmlzVmFsaWQoKSkge1xyXG4gICAgIFxyXG4gICAgICB0aGlzLmlzQ3VzdG9tRGF0ZSA9IChtOiBkYXlqcy5EYXlqcykgPT4ge1xyXG4gICAgICAgIGNvbnN0IGlzVmFsaWREYXRlID1cclxuICAgICAgICAgIG0gPiB0aGlzLmRheWpzKCkgfHwgbSA+IHRoaXMuZGF5anMoZXZlbnQuc3RhcnREYXRlLmFkZCgxODAsIFwiZGF5c1wiKSk7XHJcbiAgICAgICAgcmV0dXJuIGlzVmFsaWREYXRlID8gXCJpbnZhbGlkLWRhdGVcIiA6IGZhbHNlO1xyXG4gICAgICB9O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZGF0ZWNoYW5nZShldmVudDogYW55KSB7XHJcbiAgICBpZiAoZXZlbnQgJiYgZXZlbnQuc3RhcnREYXRlICYmIGV2ZW50LmVuZERhdGUpIHtcclxuICAgICAgaWYgKFxyXG4gICAgICAgIHRoaXMuZGF5anMoZXZlbnQuc3RhcnREYXRlKS5pc1ZhbGlkKCkgJiZcclxuICAgICAgICB0aGlzLmRheWpzKGV2ZW50LmVuZERhdGUpLmlzVmFsaWQoKVxyXG4gICAgICApIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkRGF0ZVJhbmdlLnN0YXJ0RGF0ZSA9IGV2ZW50LnN0YXJ0RGF0ZTtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkRGF0ZVJhbmdlLmVuZERhdGUgPSBldmVudC5lbmREYXRlO1xyXG4gICAgICAgIHZhciBkYXRldGltZSA9IHtcclxuICAgICAgICAgIHN0YXJ0RGF0ZTogdGhpcy5kYXlqcyhldmVudC5zdGFydERhdGUsIFwiREQtTU0tWVlZWVwiKS5mb3JtYXQoXHJcbiAgICAgICAgICAgIFwiWVlZWS1NTS1ERFwiXHJcbiAgICAgICAgICApLFxyXG4gICAgICAgICAgZW5kRGF0ZTogdGhpcy5kYXlqcyhldmVudC5lbmREYXRlLCBcIkRELU1NLVlZWVlcIikuZm9ybWF0KFwiWVlZWS1NTS1ERFwiKSxcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRGaWx0ZXJzLmRhdGUgPSBkYXRldGltZTtcclxuICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShcclxuICAgICAgICAgIFwiaGVhZGVyLWZpbHRlcnNcIixcclxuICAgICAgICAgIEpTT04uc3RyaW5naWZ5KHRoaXMuc2VsZWN0ZWRGaWx0ZXJzKVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpXHJcbiAgICAgIC8vIHRoaXMuZ3MuZGF0YVJhbmdlVmFsdWUubmV4dCh0aGlzLnNlbGVjdGVkRmlsdGVycyk7XHJcbiAgICAgIH1cclxuICAgIH0gXHJcbiAgfVxyXG4gIG9wZW5kcm9wZG93bihlOk1vdXNlRXZlbnQpIHtcclxuICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICB0aGlzLk9wZW5kcm9wZG93biA9ICF0aGlzLk9wZW5kcm9wZG93bjtcclxuICB9XHJcbiAgZ2V0TG9jYXRpb25zKCk6IHZvaWQge1xyXG4gICAgLy8gY29uc3QgaGVhZGVyRmlsdGVyczogYW55ID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcImhlYWRlci1maWx0ZXJzXCIpIHx8IFwie31cIik7XHJcbiAgICBsZXQgb2JqID17XHJcbiAgICAgY2xpZW50SWQ6IHRoaXMuc2VsZWN0ZWRGaWx0ZXJzLmNsaWVudCA/IHRoaXMuc2VsZWN0ZWRGaWx0ZXJzLmNsaWVudCA6dGhpcy51c2Vycy5jbGllbnRJZCxcclxuICAgICBjaXR5OiBbXSxcclxuICAgICBncm91cDogW10sXHJcbiAgICB9XHJcbiAgICB0aGlzLmF1dGguZ2V0TG9jYXRpb24ob2JqKS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICBsZXQgY2l0eUxpc3QgPSB0aGlzLnNlbGVjdGVkRmlsdGVycz8ubG9jYXRpb24/LmZpbHRlcigobG9jYXRpb246YW55KSA9PiBsb2NhdGlvbi5jaGVja2VkKS5tYXAoKGxvYzphbnkpID0+IGxvYy5jaXR5KTtcclxuICAgICAgICAvLyBNYXAgdGhlIGZldGNoZWQgbG9jYXRpb25zIHdpdGggZGVmYXVsdCB1bmNoZWNrZWQgc3RhdGVcclxuICAgICAgICB0aGlzLmxvY2F0aW9ucyA9IHJlcz8uZGF0YT8ubG9jYXRpb25EYXRhLm1hcCgoY2l0eTogYW55KSA9PiAoe1xyXG4gICAgICAgICAgY2l0eTogY2l0eS5jaXR5LFxyXG4gICAgICAgICAgY2hlY2tlZDogY2l0eUxpc3Q/LmluY2x1ZGVzKGNpdHkuY2l0eSkgPyB0cnVlIDogZmFsc2UgLFxyXG4gICAgICAgIH0pKTtcclxuICBcclxuICAgICAgICAvLyBTeW5jIHRoZSBmZXRjaGVkIGxvY2F0aW9ucyB3aXRoIGFueSBzdG9yZWQgY2hlY2tlZCB2YWx1ZXMgaW4gbG9jYWxTdG9yYWdlXHJcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRGaWx0ZXJzLmxvY2F0aW9uICYmIEFycmF5LmlzQXJyYXkodGhpcy5zZWxlY3RlZEZpbHRlcnMubG9jYXRpb24pKSB7XHJcbiAgICAgICAgICB0aGlzLmZpbHRlcmVkTG9jYXRpb25zID0gdGhpcy5sb2NhdGlvbnMubWFwKGxvY2F0aW9uID0+IHtcclxuICAgICAgICAgICAgY29uc3QgbWF0Y2hlZExvY2F0aW9uID0gdGhpcy5zZWxlY3RlZEZpbHRlcnMubG9jYXRpb24uZmluZCgobG9jOiBhbnkpID0+IGxvYy5jaXR5ID09PSBsb2NhdGlvbi5jaXR5KTtcclxuICAgICAgICAgICAgcmV0dXJuIG1hdGNoZWRMb2NhdGlvbiA/IHsgLi4ubG9jYXRpb24sIGNoZWNrZWQ6IG1hdGNoZWRMb2NhdGlvbi5jaGVja2VkIH0gOiBsb2NhdGlvbjtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmZpbHRlcmVkTG9jYXRpb25zID0gdGhpcy5sb2NhdGlvbnM7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZih0aGlzLnNlYXJjaExvY2F0aW9uVGV4dCkge1xyXG4gICAgICAgICAgdGhpcy5maWx0ZXJlZExvY2F0aW9ucyA9IHRoaXMubG9jYXRpb25zLmZpbHRlcigobG9jYXRpb246YW55KSA9PiBsb2NhdGlvbi5jaXR5LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModGhpcy5zZWFyY2hMb2NhdGlvblRleHQudG9Mb3dlckNhc2UoKSkpXHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcjogKGVycikgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJGYWlsZWQgdG8gZmV0Y2ggbG9jYXRpb25zXCIsIGVycik7XHJcbiAgICAgIH0sXHJcbiAgICB9KTtcclxuICB9XHJcbiAgXHJcbiAgaXNBbGxMb2NhdGlvbnNTZWxlY3RlZCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmZpbHRlcmVkTG9jYXRpb25zLmV2ZXJ5KGxvY2F0aW9uID0+IGxvY2F0aW9uLmNoZWNrZWQpO1xyXG5cclxuICB9XHJcbiAgXHJcbiAgc2VsZWN0ZWRMb2NhdGlvbnNMYWJlbCgpOiBzdHJpbmcge1xyXG4gICAgY29uc3Qgc2VsZWN0ZWRMb2NhdGlvbnMgPSB0aGlzLmxvY2F0aW9uTGFiZWwgPSB0aGlzLnNlYXJjaExvY2F0aW9uVGV4dC5sZW5ndGggPyB0aGlzLmxvY2F0aW9uc1xyXG4gICAgICAuZmlsdGVyKGxvY2F0aW9uID0+IGxvY2F0aW9uLmNoZWNrZWQpLm1hcChsb2NhdGlvbiA9PiBsb2NhdGlvbi5jaXR5KSA6ICB0aGlzLmZpbHRlcmVkTG9jYXRpb25zXHJcbiAgICAgIC5maWx0ZXIobG9jYXRpb24gPT4gbG9jYXRpb24uY2hlY2tlZCkubWFwKGxvY2F0aW9uID0+IGxvY2F0aW9uLmNpdHkpO1xyXG4gICAgcmV0dXJuIHNlbGVjdGVkTG9jYXRpb25zLmxlbmd0aCA9PT0gMFxyXG4gICAgICA/ICcnXHJcbiAgICAgIDogc2VsZWN0ZWRMb2NhdGlvbnMubGVuZ3RoID09PSAxXHJcbiAgICAgID8gc2VsZWN0ZWRMb2NhdGlvbnNbMF1cclxuICAgICAgOiBgJHtzZWxlY3RlZExvY2F0aW9ucy5sZW5ndGh9IGxvY2F0aW9uc2A7XHJcbiAgfVxyXG5cclxuICByZW1vdmVMb2NhdGlvbigpOiB2b2lkIHtcclxuICAgIHRoaXMuUmVzZXQoKTtcclxuICB9XHJcbiAgXHJcbiAgZ2V0R3JvdXBzKCk6IHZvaWQgeyAgICBcclxuICAgIGNvbnN0IGNpdHkgPSB0aGlzLmxvY2F0aW9uc1xyXG4gICAgICAuZmlsdGVyKGxvY2F0aW9uID0+IGxvY2F0aW9uLmNoZWNrZWQpXHJcbiAgICAgIC5tYXAobG9jYXRpb24gPT4gbG9jYXRpb24uY2l0eSk7XHJcbiAgICBjb25zdCBvYmogPSB7IGNpdHksY2xpZW50SWQ6dGhpcy5zZWxlY3RlZEZpbHRlcnMuY2xpZW50ID8gdGhpcy5zZWxlY3RlZEZpbHRlcnMuY2xpZW50IDp0aGlzLnVzZXJzLmNsaWVudElkLGdyb3VwOltdIH07XHJcbiAgICB0aGlzLmF1dGguZ2V0R3JvdXBzKG9iaikuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgbGV0IGNoZWNrZWRHcm91cCA9IHRoaXMuc2VsZWN0ZWRGaWx0ZXJzPy5ncm91cD8uZmlsdGVyKChncm91cDphbnkpID0+IGdyb3VwLmNoZWNrZWQpLm1hcCgoZ3JvdXA6YW55KSA9PiBncm91cC5ncm91cE5hbWUpO1xyXG4gICAgICAgIGNvbnN0IGNvbWJpbmVkR3JvdXBzID0gcmVzPy5kYXRhPy5ncm91cERhdGE/Lm1hcCgoZ3JvdXBOYW1lOiBhbnkpID0+ICh7XHJcbiAgICAgICAgICBncm91cE5hbWU6IGdyb3VwTmFtZS5ncm91cE5hbWUsXHJcbiAgICAgICAgICBjaGVja2VkOiBjaGVja2VkR3JvdXA/LmluY2x1ZGVzKGdyb3VwTmFtZS5ncm91cE5hbWUpID8gdHJ1ZSA6IGZhbHNlLFxyXG4gICAgICAgIH0pKTtcclxuICAgICAgICB0aGlzLmdyb3Vwc0RhdGEgPSBjb21iaW5lZEdyb3VwcztcclxuICAgICAgICBpZih0aGlzLnNlYXJjaEdyb3VwVGV4dC5sZW5ndGgpIHtcclxuICAgICAgICAgIHRoaXMuZmlsdGVyZWRHcm91cHMgPSBjb21iaW5lZEdyb3Vwcy5maWx0ZXIoKGl0ZW06YW55KSA9PiBpdGVtLmdyb3VwTmFtZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHRoaXMuc2VhcmNoR3JvdXBUZXh0KSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5maWx0ZXJlZEdyb3VwcyA9IGNvbWJpbmVkR3JvdXBzO1xyXG4gICAgICAgIH1cclxuICBcclxuICAgICAgICAvLyBBdXRvLWZldGNoIHN0b3JlcyB3aGVuIGdyb3VwcyBhcmUgc2VsZWN0ZWRcclxuICAgICAgICBjb25zdCBzZWxlY3RlZEdyb3VwcyA9IHRoaXMuZ3JvdXBzRGF0YS5maWx0ZXIoKGdyb3VwKSA9PiBncm91cC5jaGVja2VkKS5tYXAoKGdyb3VwKSA9PiBncm91cC5ncm91cE5hbWUpO1xyXG4gICAgICAgIGlmIChzZWxlY3RlZEdyb3Vwcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICB0aGlzLmdldFN0b3JlKCk7IC8vIEZldGNoIHN0b3JlcyBiYXNlZCBvbiBzZWxlY3RlZCBncm91cHNcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOiAoZXJyKSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihcIkZhaWxlZCB0byBmZXRjaCBncm91cHNcIiwgZXJyKTtcclxuICAgICAgfSxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgdG9nZ2xlRHJvcGRvd24odHlwZTogJ2xvY2F0aW9uJyB8ICdncm91cCcgfCAnc3RvcmUnKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5kcm9wZG93bk9wZW4gPT09IHR5cGUpIHtcclxuICAgICAgLy8gSWYgdGhlIGRyb3Bkb3duIGlzIG9wZW4sIGNsb3NlIGl0IGFuZCBhdm9pZCByZXNldHRpbmcgdGhlIHNlbGVjdGVkIHZhbHVlcyB1bm5lY2Vzc2FyaWx5XHJcbiAgICAgIHRoaXMuZHJvcGRvd25PcGVuID0gbnVsbDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIE9wZW4gdGhlIHNwZWNpZmljIGRyb3Bkb3duIGFuZCBoYW5kbGUgZGF0YSBmZXRjaGluZyBvbmx5IGlmIG5lY2Vzc2FyeVxyXG4gICAgICB0aGlzLmRyb3Bkb3duT3BlbiA9IHR5cGU7XHJcbiAgXHJcbiAgICAgIGlmICh0eXBlID09PSAnZ3JvdXAnKSB7XHJcbiAgICAgICAgLy8gRmV0Y2ggZ3JvdXBzIG9ubHkgaWYgdGhlcmUgYXJlIHNlbGVjdGVkIGNpdGllcyBhbmQgbm8gYWN0aXZlIHNlYXJjaCB0ZXh0XHJcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRDaXRpZXMgPSB0aGlzLmxvY2F0aW9uc1xyXG4gICAgICAgICAgLmZpbHRlcigobG9jYXRpb24pID0+IGxvY2F0aW9uLmNoZWNrZWQpXHJcbiAgICAgICAgICAubWFwKChsb2NhdGlvbikgPT4gbG9jYXRpb24uY2l0eSk7XHJcbiAgXHJcbiAgICAgICAgLy8gRmV0Y2ggZ3JvdXBzIG9ubHkgaWYgbG9jYXRpb25zIGFyZSBzZWxlY3RlZCwgbm8gc2VhcmNoIHRleHQgZXhpc3RzLCBhbmQgZHJvcGRvd24gaXMgb3BlbmVkXHJcbiAgICAgIGlmICh0aGlzLmZpbHRlcmVkTG9jYXRpb25zLmxlbmd0aCA+IDAgfHwgKHNlbGVjdGVkQ2l0aWVzLmxlbmd0aCA+IDAgJiYgIXRoaXMuc2VhcmNoR3JvdXBUZXh0LnRyaW0oKSkpIHtcclxuICAgICAgICB0aGlzLmdldEdyb3VwcygpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuZmlsdGVyZWRHcm91cHMgPSBbXTsgLy8gQ2xlYXIgZ3JvdXBzIGlmIG5vIGxvY2F0aW9ucyBhcmUgc2VsZWN0ZWRcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICh0eXBlID09PSAnc3RvcmUnKSB7XHJcbiAgICAgIC8vIEZldGNoIHN0b3JlcyBvbmx5IGlmIG5vdCBhbHJlYWR5IGZldGNoZWQgYW5kIG5vIHNlYXJjaCB0ZXh0IGlzIGFjdGl2ZVxyXG4gICAgICBpZiAoKCF0aGlzLmZpbHRlcmVkU3RvcmVzIHx8IHRoaXMuZmlsdGVyZWRTdG9yZXMubGVuZ3RoID09PSAwKSAmJiAhdGhpcy5zZWFyY2hTdG9yZVRleHQudHJpbSgpKSB7XHJcbiAgICAgICAgdGhpcy5nZXRTdG9yZSgpO1xyXG4gICAgICB9IFxyXG4gICAgfVxyXG4gICAgfVxyXG4gIH1cclxuICBcclxuICBcclxuICBoYW5kbGVHcm91cERyb3Bkb3duQ2xpY2soKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5kcm9wZG93bk9wZW4gPT09ICdncm91cCcpIHtcclxuICAgICAgdGhpcy5yZXNldFNlbGVjdGVkR3JvdXBzKCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnRvZ2dsZURyb3Bkb3duKCdncm91cCcpO1xyXG4gIH1cclxuXHJcbiAgcmVzZXRTZWxlY3RlZEdyb3VwcygpOiB2b2lkIHtcclxuICAgIHRoaXMuZmlsdGVyZWRHcm91cHMuZm9yRWFjaCgoZ3JvdXApID0+IChncm91cC5jaGVja2VkID0gZmFsc2UpKTtcclxuICAgIHRoaXMuc2VhcmNoR3JvdXBUZXh0ID0gXCJcIjtcclxuICB9XHJcbiAgc2VsZWN0ZWRHcm91cHNMYWJlbCgpOiBzdHJpbmcge1xyXG4gICAgY29uc3Qgc2VsZWN0ZWRHcm91cHMgPSB0aGlzLmdyb3VwTGFiZWwgPSB0aGlzLnNlYXJjaEdyb3VwVGV4dC5sZW5ndGggPyB0aGlzLmdyb3Vwc0RhdGEuZmlsdGVyKChncm91cCkgPT4gZ3JvdXAuY2hlY2tlZCkgOiB0aGlzLmZpbHRlcmVkR3JvdXBzLmZpbHRlcigoZ3JvdXApID0+IGdyb3VwLmNoZWNrZWQpO1xyXG4gICAgcmV0dXJuIHNlbGVjdGVkR3JvdXBzLmxlbmd0aCA9PT0gMFxyXG4gICAgICA/IFwiXCJcclxuICAgICAgOiBzZWxlY3RlZEdyb3Vwcy5sZW5ndGggPT09IDFcclxuICAgICAgPyBzZWxlY3RlZEdyb3Vwc1swXS5ncm91cE5hbWVcclxuICAgICAgOiBgJHtzZWxlY3RlZEdyb3Vwcy5sZW5ndGh9IGdyb3Vwc2A7XHJcbiAgfVxyXG4gIHJlbW92ZUdyb3VwKCk6IHZvaWQge1xyXG4gICAgdGhpcy5SZXNldCgpO1xyXG4gICBcclxuICB9XHJcbiAgXHJcblxyXG4gIGlzQWxsR3JvdXBzU2VsZWN0ZWQoKTogYm9vbGVhbiB7XHJcbiAgICBcclxuICAgIHJldHVybiB0aGlzLmZpbHRlcmVkR3JvdXBzLmxlbmd0aCA/IHRoaXMuZmlsdGVyZWRHcm91cHMuZXZlcnkoKGdyb3VwKSA9PiBncm91cC5jaGVja2VkKSA6IGZhbHNlO1xyXG4gIH1cclxuICAgICAgICBcclxuICBnZXRTdG9yZSgpOiB2b2lkIHtcclxuICAgIGNvbnN0IGNpdHkgPSB0aGlzLmxvY2F0aW9uc1xyXG4gICAgICAuZmlsdGVyKGxvY2F0aW9uID0+IGxvY2F0aW9uLmNoZWNrZWQpXHJcbiAgICAgIC5tYXAobG9jYXRpb24gPT4gbG9jYXRpb24uY2l0eSk7XHJcbiAgXHJcbiAgICBjb25zdCBncm91cCA9IHRoaXMuZ3JvdXBzRGF0YVxyXG4gICAgICAuZmlsdGVyKGdyb3VwID0+IGdyb3VwLmNoZWNrZWQpXHJcbiAgICAgIC5tYXAoZ3JvdXAgPT4gZ3JvdXAuZ3JvdXBOYW1lKTtcclxuICBcclxuICAgIGNvbnN0IGRhdGEgPSB7IGNpdHksIGNsdXN0ZXJzOmdyb3VwLCBjbGllbnRJZDogdGhpcy51c2Vycy5jbGllbnRJZCA/IHRoaXMudXNlcnMuY2xpZW50SWQgOiB0aGlzLnNlbGVjdGVkRmlsdGVycy5jbGllbnQgfTtcclxuICBcclxuICAgIHRoaXMuYXV0aC5nZXRIZWFkZXJTdG9yZXMoZGF0YSkuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgaWYocmVzICYmcmVzLmNvZGUgPT09MjAwKXtcclxuICAgICAgICB0aGlzLnN0b3JlcyA9IHJlcy5kYXRhLnN0b3Jlc0RhdGE7ICAgICAgXHJcbiAgICAgICAgLy8gUmV0cmlldmUgY2hlY2tlZCBzdG9yZSBJRHMgZnJvbSBzZWxlY3RlZEZpbHRlcnNcclxuICAgICAgICBjb25zdCBjaGVja2VkU3RvcmVJZHMgPSB0aGlzLnNlbGVjdGVkRmlsdGVycz8uc3RvcmVzXHJcbiAgICAgICAgICA/IHRoaXMuc2VsZWN0ZWRGaWx0ZXJzLnN0b3Jlcy5maWx0ZXIoKHN0b3JlOiBhbnkpID0+IHN0b3JlLmNoZWNrZWQpLm1hcCgoc3RvcmU6IGFueSkgPT4gc3RvcmUuc3RvcmVJZClcclxuICAgICAgICAgIDogW107XHJcblxyXG4gICAgICAgIHRoaXMuc3RvcmVzLmZvckVhY2goc3RvcmUgPT4ge1xyXG4gICAgICAgICAgaWYgKGNoZWNrZWRTdG9yZUlkcy5pbmNsdWRlcyhzdG9yZS5zdG9yZUlkKSkge1xyXG4gICAgICAgICAgICBzdG9yZS5jaGVja2VkID0gdHJ1ZTsgLy8gU3luYyB0aGUgY2hlY2tlZCBzdGF0ZSB3aXRoIGZ1bGwgc3RvcmUgbGlzdFxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIFxyXG4gIFxyXG4gICAgICAgIC8vIE1hcCB0aGUgc3RvcmVzIGFuZCByZXRhaW4gdGhlICdjaGVja2VkJyBzdGF0dXNcclxuICAgICAgICBpZih0aGlzLnNlYXJjaFN0b3JlVGV4dC5sZW5ndGgpIHtcclxuICAgICAgICAgIHRoaXMuZmlsdGVyZWRTdG9yZXMgPSB0aGlzLnN0b3Jlcz8uZmlsdGVyKHN0b3JlID0+IHN0b3JlLnN0b3JlTmFtZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHRoaXMuc2VhcmNoU3RvcmVUZXh0KSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5maWx0ZXJlZFN0b3JlcyA9IHRoaXMuc3RvcmVzO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBFbnN1cmUgc2VsZWN0ZWRGaWx0ZXJzIGlzIGluIHN5bmMgd2l0aCBmaWx0ZXJlZFN0b3Jlc1xyXG4gICAgICAgIGlmICghdGhpcy5zZWxlY3RlZEZpbHRlcnMuc3RvcmVzIHx8ICF0aGlzLnNlbGVjdGVkRmlsdGVycy5zdG9yZXMubGVuZ3RoKSB7XHJcbiAgICAgICAgICB0aGlzLnN0b3Jlcy5mb3JFYWNoKHN0b3JlID0+IHtcclxuICAgICAgICAgICAgc3RvcmUuY2hlY2tlZCA9IHRydWU7IC8vIFN5bmMgdGhlIGNoZWNrZWQgc3RhdGUgd2l0aCBmdWxsIHN0b3JlIGxpc3RcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgXHJcbiAgICAgICAgICAvLyBObyBwcmV2aW91c2x5IHNlbGVjdGVkIHN0b3JlcywgbWFyayBhbGwgYXMgY2hlY2tlZFxyXG4gICAgICAgdGhpcy5maWx0ZXJlZFN0b3JlcyA9IHRoaXMuc2VsZWN0ZWRGaWx0ZXJzLnN0b3JlcyA9IHRoaXMuZmlsdGVyZWRTdG9yZXMubWFwKHN0b3JlID0+ICh7XHJcbiAgICAgICAgICAgIC4uLnN0b3JlLFxyXG4gICAgICAgICAgICBjaGVja2VkOiB0cnVlXHJcbiAgICAgICAgICB9KSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIC8vIFVwZGF0ZSBzZWxlY3RlZEZpbHRlcnMgdG8gcmVmbGVjdCBjdXJyZW50IHN0YXRlIG9mIHN0b3Jlc1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZEZpbHRlcnMuc3RvcmVzID0gdGhpcy5maWx0ZXJlZFN0b3Jlcy5tYXAoc3RvcmUgPT4gKHtcclxuICAgICAgICAgICAgLi4uc3RvcmUsXHJcbiAgICAgICAgICAgIGNoZWNrZWQ6IHN0b3JlLmNoZWNrZWRcclxuICAgICAgICAgIH0pKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gVXBkYXRlIGxvY2FsU3RvcmFnZSB3aXRoIHRoZSBsYXRlc3Qgc2VsZWN0ZWRGaWx0ZXJzXHJcbiAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ2hlYWRlci1maWx0ZXJzJywgSlNPTi5zdHJpbmdpZnkodGhpcy5zZWxlY3RlZEZpbHRlcnMpKTtcclxuICBcclxuICAgICAgICAvLyBFbWl0IGRhdGEgdmlhIHNlcnZpY2VcclxuICAgICAgICAvLyB0aGlzLmdzLmRhdGFSYW5nZVZhbHVlLm5leHQodGhpcy5zZWxlY3RlZEZpbHRlcnMpO1xyXG4gICAgICAgIC8vIFRyaWdnZXIgY2hhbmdlIGRldGVjdGlvbiB0byByZWZsZWN0IGNoYW5nZXMgaW4gdGhlIFVJXHJcbiAgICAgICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5zdG9yZXMgPVtdO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRGaWx0ZXJzLnN0b3Jlcz1bXTtcclxuICAgICAgICB0aGlzLmZpbHRlcmVkU3RvcmVzID1bXTtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkRmlsdGVycy5zdG9yZXMgPSB0aGlzLmZpbHRlcmVkU3RvcmVzLm1hcChzdG9yZSA9PiAoe1xyXG4gICAgICAgICAgLi4uc3RvcmUsXHJcbiAgICAgICAgICBjaGVja2VkOiBmYWxzZVxyXG4gICAgICAgIH0pKTtcclxuICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnaGVhZGVyLWZpbHRlcnMnLCBKU09OLnN0cmluZ2lmeSh0aGlzLnNlbGVjdGVkRmlsdGVycykpO1xyXG4gICAgICB9XHJcbiAgICB9LFxyXG4gICAgICBlcnJvcjogKGVycikgPT4ge1xyXG4gICAgICAgIHRoaXMuc3RvcmVzID1bXTsgICBcclxuICAgICAgICB0aGlzLnNlbGVjdGVkRmlsdGVycy5zdG9yZXMgPSB0aGlzLmZpbHRlcmVkU3RvcmVzLm1hcChzdG9yZSA9PiAoe1xyXG4gICAgICAgICAgLi4uc3RvcmUsXHJcbiAgICAgICAgICBjaGVja2VkOiBmYWxzZVxyXG4gICAgICAgIH0pKTtcclxuICAgICAgICB0aGlzLmZpbHRlcmVkU3RvcmVzID1bXTtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkRmlsdGVycy5zdG9yZXM9W107XHJcbiAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ2hlYWRlci1maWx0ZXJzJywgSlNPTi5zdHJpbmdpZnkodGhpcy5zZWxlY3RlZEZpbHRlcnMpKTtcclxuICAgICAgICBjb25zb2xlLmVycm9yKFwiRmFpbGVkIHRvIGZldGNoIHN0b3Jlc1wiLCBlcnIpO1xyXG4gICAgICB9LFxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIFxyXG5cclxuICByZXNldFNlbGVjdGVkU3RvcmVzKCk6IHZvaWQge1xyXG4gICAgdGhpcy5maWx0ZXJlZFN0b3Jlcy5mb3JFYWNoKChzdG9yZSkgPT4gKHN0b3JlLmNoZWNrZWQgPSBmYWxzZSkpO1xyXG4gICAgdGhpcy5zZWFyY2hTdG9yZVRleHQgPSBcIlwiO1xyXG4gIH1cclxuXHJcbiAgc2VsZWN0ZWRTdG9yZXNMYWJlbCgpOiBzdHJpbmcge1xyXG4gICAgY29uc3Qgc2VsZWN0ZWRTdG9yZXMgPSB0aGlzLnNlYXJjaFN0b3JlVGV4dC5sZW5ndGggPyB0aGlzLnN0b3Jlcy5maWx0ZXIoKHN0b3JlKSA9PiBzdG9yZS5jaGVja2VkKSA6IHRoaXMuZmlsdGVyZWRTdG9yZXMuZmlsdGVyKChzdG9yZSkgPT4gc3RvcmUuY2hlY2tlZCk7XHJcbiAgICByZXR1cm4gc2VsZWN0ZWRTdG9yZXMubGVuZ3RoID09PSAwXHJcbiAgICAgID8gXCIwIFN0b3Jlc1wiXHJcbiAgICAgIDogc2VsZWN0ZWRTdG9yZXMubGVuZ3RoID09PSAxXHJcbiAgICAgID8gc2VsZWN0ZWRTdG9yZXNbMF0uc3RvcmVOYW1lXHJcbiAgICAgIDogYCR7c2VsZWN0ZWRTdG9yZXMubGVuZ3RofSBTdG9yZXNgO1xyXG4gIH1cclxuXHJcbiAgaXNBbGxTdG9yZXNTZWxlY3RlZCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmZpbHRlcmVkU3RvcmVzLmxlbmd0aCA+IDAgJiYgdGhpcy5maWx0ZXJlZFN0b3Jlcy5ldmVyeShzdG9yZSA9PiBzdG9yZS5jaGVja2VkKTtcclxuICB9XHJcbi8vIE1ldGhvZCB0byBoYW5kbGUgZHJvcGRvd24gaXRlbSBzZWxlY3Rpb25cclxudXBkYXRlU2VsZWN0ZWRTdG9yZXMoKTogdm9pZCB7XHJcbiAgdGhpcy5maWx0ZXJlZFN0b3Jlcy5mb3JFYWNoKHN0b3JlID0+IHtcclxuICAgIGNvbnN0IGZpbHRlcmVkU3RvcmUgPSB0aGlzLnN0b3Jlcy5maW5kSW5kZXgoZlN0b3JlID0+IGZTdG9yZS5zdG9yZUlkID09PSBzdG9yZS5zdG9yZUlkKTtcclxuICAgIGlmIChmaWx0ZXJlZFN0b3JlICE9IC0xKSB7XHJcbiAgICAgIHRoaXMuc3RvcmVzW2ZpbHRlcmVkU3RvcmVdLmNoZWNrZWQgPSBzdG9yZS5jaGVja2VkOyAvLyBTeW5jIHRoZSBjaGVja2VkIHN0YXRlIHdpdGggZnVsbCBzdG9yZSBsaXN0XHJcbiAgICB9XHJcbiAgfSk7ICBcclxuICAvLyBVcGRhdGUgc2VsZWN0ZWRGaWx0ZXJzIGJhc2VkIG9uIHRoZSBjdXJyZW50IHN0b3JlIHNlbGVjdGlvblxyXG4gIHRoaXMuc2VsZWN0ZWRGaWx0ZXJzLnN0b3JlcyA9IHRoaXMuc3RvcmVzLmZpbHRlcihzdG9yZSA9PiBzdG9yZS5jaGVja2VkKTtcclxuXHJcbiAgLy8gVXBkYXRlIGxvY2FsU3RvcmFnZSB3aXRoIHRoZSBsYXRlc3Qgc2VsZWN0aW9uXHJcbiAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ2hlYWRlci1maWx0ZXJzJywgSlNPTi5zdHJpbmdpZnkodGhpcy5zZWxlY3RlZEZpbHRlcnMpKTtcclxuXHJcbiAgLy8gRW1pdCB1cGRhdGVkIGZpbHRlcnMgdmlhIHNlcnZpY2VcclxuICAvLyB0aGlzLmdzLmRhdGFSYW5nZVZhbHVlLm5leHQodGhpcy5zZWxlY3RlZEZpbHRlcnMpO1xyXG5cclxuICAvLyBUcmlnZ2VyIGNoYW5nZSBkZXRlY3Rpb24gaWYgbmVjZXNzYXJ5XHJcbiAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XHJcbn1cclxuICB0b2dnbGVTZWxlY3RBbGxMb2NhdGlvbnMoZXZlbnQ6IGFueSk6IHZvaWQge1xyXG4gICAgY29uc3QgaXNDaGVja2VkID0gZXZlbnQudGFyZ2V0LmNoZWNrZWQ7XHJcbiAgICB0aGlzLmZpbHRlcmVkTG9jYXRpb25zLmZvckVhY2goKGxvY2F0aW9uKSA9PiAobG9jYXRpb24uY2hlY2tlZCA9IGlzQ2hlY2tlZCkpO1xyXG4gICAgdGhpcy51cGRhdGVTZWxlY3RlZExvY2F0aW9ucygpO1xyXG4gIH1cclxuXHJcbiAgdG9nZ2xlU2VsZWN0QWxsU3RvcmVzKGV2ZW50OiBFdmVudCk6IHZvaWQge1xyXG4gICAgY29uc3QgY2hlY2tlZCA9IChldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkuY2hlY2tlZDtcclxuICBcclxuICAgIC8vIEFwcGx5IHRoZSBzZWxlY3Rpb24gdG8gYm90aCBmaWx0ZXJlZCBhbmQgZnVsbCBsaXN0IG9mIHN0b3Jlc1xyXG4gICAgdGhpcy5maWx0ZXJlZFN0b3Jlcy5mb3JFYWNoKHN0b3JlID0+IHN0b3JlLmNoZWNrZWQgPSBjaGVja2VkKTtcclxuICAgIHRoaXMuc3RvcmVzLmZvckVhY2goc3RvcmUgPT4ge1xyXG4gICAgICBjb25zdCBmaWx0ZXJlZFN0b3JlID0gdGhpcy5maWx0ZXJlZFN0b3Jlcy5maW5kKGZTdG9yZSA9PiBmU3RvcmUuc3RvcmVJZCA9PT0gc3RvcmUuc3RvcmVJZCk7XHJcbiAgICAgIGlmIChmaWx0ZXJlZFN0b3JlKSB7XHJcbiAgICAgICAgc3RvcmUuY2hlY2tlZCA9IGNoZWNrZWQ7IC8vIFN5bmMgdGhlIGNoZWNrZWQgc3RhdGUgd2l0aCBmdWxsIHN0b3JlIGxpc3RcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgXHJcbiAgICAvLyBVcGRhdGUgdGhlIHNlbGVjdGVkIHN0b3JlcyBhbmQgcGVyc2lzdCB0aGUgc2VsZWN0aW9uXHJcbiAgICB0aGlzLnVwZGF0ZVNlbGVjdGVkU3RvcmVzKCk7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVTZWxlY3RlZExvY2F0aW9ucygpOiB2b2lkIHtcclxuICAgIC8vIFdoZW4gbG9jYXRpb25zIGFyZSBzZWxlY3RlZCwgZmV0Y2ggdGhlIHJlbGF0ZWQgZ3JvdXBzXHJcbiAgICBjb25zdCBzZWxlY3RlZENpdGllcyA9IHRoaXMuZmlsdGVyZWRMb2NhdGlvbnNcclxuICAgICAgLmZpbHRlcigobG9jYXRpb24pID0+IGxvY2F0aW9uLmNoZWNrZWQpXHJcbiAgICAgIC5tYXAoKGxvY2F0aW9uKSA9PiBsb2NhdGlvbi5jaXR5KTtcclxuICAgIHRoaXMuZmlsdGVyZWRMb2NhdGlvbnMuZm9yRWFjaCgobG9jYXRpb246YW55KSA9PiB7XHJcbiAgICAgIGxldCBmaW5kTG9jYXRpb25JbmRleCA9IHRoaXMubG9jYXRpb25zLmZpbmRJbmRleCgobG9jOmFueSkgPT4gbG9jLmNpdHkgPT0gbG9jYXRpb24uY2l0eSk7XHJcbiAgICAgIGlmKGZpbmRMb2NhdGlvbkluZGV4ICE9IC0xKSB7XHJcbiAgICAgICAgdGhpcy5sb2NhdGlvbnNbZmluZExvY2F0aW9uSW5kZXhdLmNoZWNrZWQgPSBsb2NhdGlvbi5jaGVja2VkO1xyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gICAgaWYgKHNlbGVjdGVkQ2l0aWVzLmxlbmd0aCA+IDAgfHwgIXNlbGVjdGVkQ2l0aWVzLmxlbmd0aCkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkRmlsdGVycy5zdG9yZXMgPVtdO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkRmlsdGVycy5sb2NhdGlvbiA9IHRoaXMubG9jYXRpb25zO1xyXG4gICAgICB0aGlzLmdldEdyb3VwcygpOyAvLyBGZXRjaCBncm91cHMgYmFzZWQgb24gc2VsZWN0ZWQgY2l0aWVzXHJcbiAgICAgIC8vIElmIHRoZXJlIGFyZSBzZWxlY3RlZCBncm91cHMsIGZldGNoIHRoZSBzdG9yZXMgYmFzZWQgb24gc2VsZWN0ZWQgZ3JvdXBzXHJcbiAgICAgIHRoaXMuZ2V0U3RvcmUoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZmlsdGVyZWRHcm91cHMgPSBbXTsgLy8gQ2xlYXIgZ3JvdXBzIGlmIG5vIGxvY2F0aW9ucyBhcmUgc2VsZWN0ZWRcclxuICAgICAgdGhpcy5zZWxlY3RlZEZpbHRlcnMubG9jYXRpb24gPSBbXVxyXG4gICAgfVxyXG4gICAgdGhpcy5zZWxlY3RlZEZpbHRlcnMuZ3JvdXAgPSBbXTtcclxuICBcclxuICAgIHRoaXMuZmlsdGVyZWRTdG9yZXMgPSBbXTsgLy8gUmVzZXQgc3RvcmVzIGFzIHdlbGxcclxuICAgIHRoaXMuc2VhcmNoR3JvdXBUZXh0ID0gJyc7XHJcbiAgICB0aGlzLnNlYXJjaFN0b3JlVGV4dCA9ICcnO1xyXG4gICAgLy8gdGhpcy5PcGVuZHJvcGRvd24gPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIHRvZ2dsZVNlbGVjdEFsbEdyb3VwcyhldmVudDogYW55KTogdm9pZCB7XHJcbiAgICBjb25zdCBpc0NoZWNrZWQgPSBldmVudC50YXJnZXQuY2hlY2tlZDtcclxuICAgIHRoaXMuZmlsdGVyZWRHcm91cHMuZm9yRWFjaCgoZ3JvdXApID0+IChncm91cC5jaGVja2VkID0gaXNDaGVja2VkKSk7XHJcbiAgICB0aGlzLnVwZGF0ZVNlbGVjdGVkR3JvdXBzKCk7XHJcbiAgICAvLyBpZiAoIWlzQ2hlY2tlZCkge1xyXG4gICAgLy8gICB0aGlzLnNlbGVjdGVkRmlsdGVycy5zdG9yZXMgPVtdO1xyXG4gICAgLy8gICAgLy8gSWYgdGhlcmUgYXJlIHNlbGVjdGVkIGdyb3VwcywgZmV0Y2ggdGhlIHN0b3JlcyBiYXNlZCBvbiBzZWxlY3RlZCBncm91cHNcclxuICAgIC8vICAgIHRoaXMuZ2V0U3RvcmUoKTtcclxuICAgIC8vICB9XHJcbiAgfVxyXG5cclxuICB1cGRhdGVTZWxlY3RlZEdyb3VwcygpOiB2b2lkIHtcclxuICAgIC8vIEZldGNoIHRoZSByZWxldmFudCBzdG9yZXMgYWZ0ZXIgZ3JvdXBzIGFyZSBzZWxlY3RlZFxyXG4gICAgY29uc3Qgc2VsZWN0ZWRHcm91cHMgPSB0aGlzLmZpbHRlcmVkR3JvdXBzXHJcbiAgICAgIC5maWx0ZXIoKGdyb3VwKSA9PiBncm91cC5jaGVja2VkKVxyXG4gICAgICAubWFwKChncm91cCkgPT4gZ3JvdXAuZ3JvdXBOYW1lKTtcclxuXHJcbiAgICB0aGlzLmZpbHRlcmVkR3JvdXBzLmZvckVhY2goKGdyb3VwOmFueSkgPT4ge1xyXG4gICAgICBsZXQgZmluZEdyb3VwSW5kZXggPSB0aGlzLmdyb3Vwc0RhdGEuZmluZEluZGV4KChpdGVtOmFueSkgPT4gaXRlbS5ncm91cE5hbWUgPT0gZ3JvdXAuZ3JvdXBOYW1lKTtcclxuICAgICAgaWYoZmluZEdyb3VwSW5kZXggIT0gLTEpIHtcclxuICAgICAgICB0aGlzLmdyb3Vwc0RhdGFbZmluZEdyb3VwSW5kZXhdLmNoZWNrZWQgPSBncm91cC5jaGVja2VkO1xyXG4gICAgICB9XHJcbiAgICB9KSBcclxuICAgIGlmIChzZWxlY3RlZEdyb3Vwcy5sZW5ndGggPiAwIHx8ICFzZWxlY3RlZEdyb3Vwcy5sZW5ndGgpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZEZpbHRlcnMuc3RvcmVzID1bXTtcclxuICAgICAgLy8gSWYgdGhlcmUgYXJlIHNlbGVjdGVkIGdyb3VwcywgZmV0Y2ggdGhlIHN0b3JlcyBiYXNlZCBvbiBzZWxlY3RlZCBncm91cHNcclxuICAgICAgdGhpcy5nZXRTdG9yZSgpO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkRmlsdGVycy5ncm91cCA9IHRoaXMuZ3JvdXBzRGF0YTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIElmIG5vIGdyb3VwcyBhcmUgc2VsZWN0ZWQsIGNsZWFyIHRoZSBzdG9yZXMgbGlzdFxyXG4gICAgICB0aGlzLmZpbHRlcmVkU3RvcmVzID0gW107XHJcbiAgICAgIFxyXG4gICAgICAvLyBBbHNvLCB1cGRhdGUgbG9jYWxTdG9yYWdlIHRvIHJlZmxlY3QgdGhlIGNsZWFyZWQgc3RvcmUgc2VsZWN0aW9uXHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRGaWx0ZXJzLnN0b3JlcyA9IFtdO1xyXG4gICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnaGVhZGVyLWZpbHRlcnMnLCBKU09OLnN0cmluZ2lmeSh0aGlzLnNlbGVjdGVkRmlsdGVycykpO1xyXG4gIFxyXG4gICAgICAvLyBFbWl0IGRhdGEgdmlhIHNlcnZpY2VcclxuICAgICAgLy8gdGhpcy5ncy5kYXRhUmFuZ2VWYWx1ZS5uZXh0KHRoaXMuc2VsZWN0ZWRGaWx0ZXJzKTtcclxuICAgIH1cclxuICBcclxuICAgIC8vIENsZWFyIHRoZSBzZWFyY2ggc3RvcmUgdGV4dCB3aGVuIGdyb3VwcyBhcmUgdXBkYXRlZFxyXG4gICAgdGhpcy5zZWFyY2hTdG9yZVRleHQgPSAnJztcclxuICB9XHJcbiAgXHJcblxyXG4gIFJlc2V0KCk6IHZvaWQge1xyXG4gICAgc2V0VGltZW91dCgoKT0+e1xyXG4gICAgIC8vIENsZWFyIHNlbGVjdGVkIGdyb3Vwcywgc3RvcmVzLCBhbmQgbG9jYXRpb25zXHJcbiAgdGhpcy5maWx0ZXJlZEdyb3VwcyA9IFtdO1xyXG4gIHRoaXMuZmlsdGVyZWRTdG9yZXMgPSBbXTtcclxuICB0aGlzLmZpbHRlcmVkTG9jYXRpb25zID0gW107IC8vIFJlc2V0IGxvY2F0aW9ucyBhcyB3ZWxsXHJcblxyXG4gIC8vIENsZWFyIHNlYXJjaCBpbnB1dCBmaWVsZHNcclxuICB0aGlzLnNlYXJjaExvY2F0aW9uVGV4dCA9IFwiXCI7XHJcbiAgdGhpcy5zZWFyY2hHcm91cFRleHQgPSBcIlwiO1xyXG4gIHRoaXMuc2VhcmNoU3RvcmVUZXh0ID0gXCJcIjtcclxuIFxyXG4gIC8vIEZldGNoIGxvY2F0aW9ucywgZ3JvdXBzLCBhbmQgc3RvcmVzIGFnYWluXHJcbiAgdGhpcy5nZXRMb2NhdGlvbnMoKTtcclxuICB0aGlzLmdldFN0b3JlKCk7XHJcbiAgdGhpcy5nZXRHcm91cHMoKTtcclxuICAvLyBSZXNldCB0aGUgZmlsdGVycyBpbiBzZWxlY3RlZEZpbHRlcnNcclxuICB0aGlzLnNlbGVjdGVkRmlsdGVycyA9IHtcclxuICAgIC4uLnRoaXMuc2VsZWN0ZWRGaWx0ZXJzLFxyXG4gICAgc3RvcmVzOiBbXSwgIC8vIENsZWFyIHN0b3JlcyBzZWxlY3Rpb25cclxuICAgIGdyb3VwOiBbXSwgICAvLyBDbGVhciBncm91cHMgc2VsZWN0aW9uXHJcbiAgICBsb2NhdGlvbjogW10gLy8gQ2xlYXIgbG9jYXRpb25zIHNlbGVjdGlvblxyXG4gIH07XHJcblxyXG4gIC8vIC8vIE9uY2Ugc3RvcmVzIGFyZSBmZXRjaGVkLCBtYXJrIGFsbCBhcyBjaGVja2VkXHJcbiAgLy8gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgLy8gICB0aGlzLmZpbHRlcmVkU3RvcmVzID0gdGhpcy5zdG9yZXMubWFwKHN0b3JlID0+ICh7XHJcbiAgLy8gICAgIC4uLnN0b3JlLFxyXG4gIC8vICAgICBjaGVja2VkOiB0cnVlICAvLyBNYXJrIGFsbCBzdG9yZXMgYXMgY2hlY2tlZFxyXG4gIC8vICAgfSkpO1xyXG5cclxuICAvLyAgIC8vIFN5bmMgc2VsZWN0ZWRGaWx0ZXJzIHdpdGggdGhlIHVwZGF0ZWQgc3RvcmUgc3RhdGVcclxuICAvLyAgIHRoaXMuc2VsZWN0ZWRGaWx0ZXJzLnN0b3JlcyA9IHRoaXMuZmlsdGVyZWRTdG9yZXMubWFwKHN0b3JlID0+ICh7XHJcbiAgLy8gICAgIC4uLnN0b3JlLFxyXG4gIC8vICAgICBjaGVja2VkOiB0cnVlXHJcbiAgLy8gICB9KSk7XHJcblxyXG4gICAgLy8gVXBkYXRlIGxvY2FsU3RvcmFnZSB3aXRoIHRoZSBsYXRlc3Qgc2VsZWN0ZWRGaWx0ZXJzXHJcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnaGVhZGVyLWZpbHRlcnMnLCBKU09OLnN0cmluZ2lmeSh0aGlzLnNlbGVjdGVkRmlsdGVycykpO1xyXG4gd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpXHJcbiAgICAvLyBFbWl0IHRoZSByZXNldCBmaWx0ZXJzIHRvIHVwZGF0ZSBvdGhlciBjb21wb25lbnRzIGlmIG5lZWRlZFxyXG4gICAgLy8gdGhpcy5ncy5kYXRhUmFuZ2VWYWx1ZS5uZXh0KHRoaXMuc2VsZWN0ZWRGaWx0ZXJzKTtcclxuICAgIC8vIFRyaWdnZXIgY2hhbmdlIGRldGVjdGlvblxyXG4gICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgIC8vIEFkZGluZyBhIHNsaWdodCBkZWxheSB0byBlbnN1cmUgc3RvcmVzIGFyZSBmZXRjaGVkIGZpcnN0XHJcbiBcclxuICBcclxuICAgIC8vIENsb3NlIGRyb3Bkb3duIGFmdGVyIHJlc2V0IGlmIG5lY2Vzc2FyeVxyXG4gICAgdGhpcy5PcGVuZHJvcGRvd24gPSBmYWxzZTtcclxuICB9LDEwMClcclxuICB9XHJcbiAgXHJcbiAgXHJcbiAgXHJcbiAgQXBwbHkoKTogdm9pZCB7XHJcbiAgICAvLyBDbG9zZSB0aGUgZHJvcGRvd25cclxuICAgIHRoaXMuT3BlbmRyb3Bkb3duID0gZmFsc2U7XHJcbiAgXHJcbiAgICAvLyBGZXRjaCBleGlzdGluZyBmaWx0ZXJzIGZyb20gbG9jYWxTdG9yYWdlXHJcbiAgICBjb25zdCBoZWFkZXJGaWx0ZXJzOiBhbnkgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwiaGVhZGVyLWZpbHRlcnNcIikgfHwgXCJ7fVwiKTtcclxuICAgIHRoaXMuc2VsZWN0ZWRGaWx0ZXJzLnN0b3JlID0gIG51bGxcclxuICBcclxuICAgIC8vIEVuc3VyZSBjdXJyZW50IHNlbGVjdGlvbnMgYXJlIHJlZmxlY3RlZFxyXG4gICAgdGhpcy5zZWxlY3RlZEZpbHRlcnMubG9jYXRpb24gPSB0aGlzLmxvY2F0aW9ucztcclxuICAgIHRoaXMuc2VsZWN0ZWRGaWx0ZXJzLmdyb3VwID0gdGhpcy5ncm91cHNEYXRhO1xyXG4gICAgdGhpcy5zZWxlY3RlZEZpbHRlcnMuc3RvcmVzID0gaGVhZGVyRmlsdGVycy5zdG9yZXMgPyBoZWFkZXJGaWx0ZXJzLnN0b3JlcyA6IHRoaXMuc3RvcmVzO1xyXG4gIFxyXG4gIFxyXG4gICAgLy8gU3RvcmUgdXBkYXRlZCBmaWx0ZXJzIGJhY2sgaW4gbG9jYWxTdG9yYWdlXHJcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShcImhlYWRlci1maWx0ZXJzXCIsIEpTT04uc3RyaW5naWZ5KHRoaXMuc2VsZWN0ZWRGaWx0ZXJzKSk7XHJcbiAgICAvLyB0aGlzLmdzLmRhdGFSYW5nZVZhbHVlLm5leHQodGhpcy5zZWxlY3RlZEZpbHRlcnMpO1xyXG4gICAgd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpXHJcbiAgICAvLyBFbWl0IHRoZSB1cGRhdGVkIGZpbHRlcnMgdmlhIHRoZSBzZXJ2aWNlXHJcbiAgICAvLyB0aGlzLmdzLmRhdGFSYW5nZVZhbHVlLm5leHQodGhpcy5zZWxlY3RlZEZpbHRlcnMpO1xyXG4gICAgLy8gVHJpZ2dlciByZWZyZXNoIGlmIG5lY2Vzc2FyeVxyXG4gICAgLy8gdGhpcy5ncy5tYW5hZ2VSZWZyZXNoVHJpZ2dlci5uZXh0KHRydWUpO1xyXG4gICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG4gIFxyXG4gIGZpbHRlckxvY2F0aW9ucygpOiB2b2lkIHsgICAgXHJcbiAgICBjb25zdCBzZWFyY2hUZXh0ID0gdGhpcy5zZWFyY2hMb2NhdGlvblRleHQudG9Mb3dlckNhc2UoKTtcclxuICAgIFxyXG4gICAgaWYgKHNlYXJjaFRleHQpIHtcclxuICAgICAgLy8gUHJlc2VydmUgdGhlIGNoZWNrZWQgc3RhdGUgZHVyaW5nIGZpbHRlcmluZ1xyXG4gICAgICB0aGlzLmZpbHRlcmVkTG9jYXRpb25zID0gdGhpcy5sb2NhdGlvbnNcclxuICAgICAgICAubWFwKGxvY2F0aW9uID0+ICh7XHJcbiAgICAgICAgICAuLi5sb2NhdGlvbixcclxuICAgICAgICAgIGNoZWNrZWQ6IHRoaXMuZmlsdGVyZWRMb2NhdGlvbnMuZmluZChsID0+IGwuY2l0eSA9PT0gbG9jYXRpb24uY2l0eSk/LmNoZWNrZWQgfHwgZmFsc2VcclxuICAgICAgICB9KSlcclxuICAgICAgICAuZmlsdGVyKGxvY2F0aW9uID0+XHJcbiAgICAgICAgICBsb2NhdGlvbj8uY2l0eT8udG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhzZWFyY2hUZXh0KVxyXG4gICAgICAgICk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBSZXN0b3JlIHRoZSBvcmlnaW5hbCBjaGVja2VkIHN0YXRlIHdoZW4gc2VhcmNoIHRleHQgaXMgY2xlYXJlZFxyXG4gICAgICB0aGlzLmZpbHRlcmVkTG9jYXRpb25zID0gdGhpcy5sb2NhdGlvbnMubWFwKGxvY2F0aW9uID0+ICh7XHJcbiAgICAgICAgLi4ubG9jYXRpb24sXHJcbiAgICAgICAgY2hlY2tlZDogdGhpcy5zZWxlY3RlZEZpbHRlcnMubG9jYXRpb24uZmluZCgobDphbnkpID0+IGwuY2l0eSA9PT0gbG9jYXRpb24uY2l0eSk/LmNoZWNrZWQgfHwgZmFsc2VcclxuICAgICAgfSkpO1xyXG4gICAgfVxyXG4gIH1cclxuICBcclxuXHJcbiAgZmlsdGVyR3JvdXBzKCk6IHZvaWQgeyAgXHJcbiAgICBjb25zdCBzZWFyY2hUZXh0ID0gdGhpcy5zZWFyY2hHcm91cFRleHQudG9Mb3dlckNhc2UoKTtcclxuICAgIFxyXG4gICAgaWYgKHNlYXJjaFRleHQpIHtcclxuICAgICAgLy8gUHJlc2VydmUgdGhlIGNoZWNrZWQgc3RhdGUgZHVyaW5nIGZpbHRlcmluZ1xyXG4gICAgICB0aGlzLmZpbHRlcmVkR3JvdXBzID0gdGhpcy5ncm91cHNEYXRhXHJcbiAgICAgICAgLm1hcChncm91cCA9PiAoe1xyXG4gICAgICAgICAgLi4uZ3JvdXAsXHJcbiAgICAgICAgICBjaGVja2VkOiB0aGlzLmZpbHRlcmVkR3JvdXBzLmZpbmQoZyA9PiBnLmdyb3VwTmFtZSA9PT0gZ3JvdXAuZ3JvdXBOYW1lKT8uY2hlY2tlZCB8fCBmYWxzZVxyXG4gICAgICAgIH0pKVxyXG4gICAgICAgIC5maWx0ZXIoZ3JvdXAgPT5cclxuICAgICAgICAgIGdyb3VwPy5ncm91cE5hbWU/LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoc2VhcmNoVGV4dClcclxuICAgICAgICApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gUmVzdG9yZSB0aGUgb3JpZ2luYWwgY2hlY2tlZCBzdGF0ZSB3aGVuIHNlYXJjaCB0ZXh0IGlzIGNsZWFyZWRcclxuICAgICAgdGhpcy5maWx0ZXJlZEdyb3VwcyA9IHRoaXMuZ3JvdXBzRGF0YS5tYXAoZ3JvdXAgPT4gKHtcclxuICAgICAgICAuLi5ncm91cCxcclxuICAgICAgICBjaGVja2VkOiB0aGlzLnNlbGVjdGVkRmlsdGVycy5ncm91cC5maW5kKChnOmFueSkgPT4gZy5ncm91cE5hbWUgPT09IGdyb3VwLmdyb3VwTmFtZSk/LmNoZWNrZWQgfHwgZmFsc2VcclxuICAgICAgfSkpO1xyXG4gICAgfVxyXG4gIH1cclxuICBcclxuICBcclxuICBmaWx0ZXJTdG9yZXMoKTogdm9pZCB7XHJcbiAgICBjb25zdCBzZWFyY2hUZXh0ID0gdGhpcy5zZWFyY2hTdG9yZVRleHQudG9Mb3dlckNhc2UoKTtcclxuICAgIC8vIFByZXNlcnZlIGNoZWNrZWQgc3RhdGVzIGR1cmluZyBmaWx0ZXJpbmdcclxuICAgIGlmIChzZWFyY2hUZXh0KSB7XHJcbiAgICAgIC8vIEZpbHRlciBiYXNlZCBvbiBzZWFyY2ggdGV4dCB3aGlsZSBwcmVzZXJ2aW5nIGNoZWNrZWQgc3RhdGVcclxuICAgICAgdGhpcy5maWx0ZXJlZFN0b3JlcyA9IHRoaXMuc3RvcmVzXHJcbiAgICAgICAgLm1hcChzdG9yZSA9PiAoe1xyXG4gICAgICAgICAgLi4uc3RvcmUsXHJcbiAgICAgICAgICAvLyBDaGVjayBpZiB0aGUgc3RvcmUgaXMgYWxyZWFkeSBjaGVja2VkIGluIGZpbHRlcmVkU3RvcmVzLCBmYWxsYmFjayB0byBvcmlnaW5hbCBzdG9yZXMnIGNoZWNrZWQgc3RhdGVcclxuICAgICAgICAgIGNoZWNrZWQ6IHRoaXMuc2VsZWN0ZWRGaWx0ZXJzLnN0b3Jlcy5maW5kKChzOiBhbnkpID0+IHMuc3RvcmVJZCA9PT0gc3RvcmUuc3RvcmVJZCk/LmNoZWNrZWQgfHwgc3RvcmUuY2hlY2tlZCB8fCBmYWxzZVxyXG4gICAgICAgIH0pKVxyXG4gICAgICAgIC5maWx0ZXIoc3RvcmUgPT4gc3RvcmUuc3RvcmVOYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoc2VhcmNoVGV4dCkpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gV2hlbiB0aGUgc2VhcmNoIHRleHQgaXMgY2xlYXJlZCwgcmVzdG9yZSB0aGUgb3JpZ2luYWwgbGlzdCB3aXRoIHByZXNlcnZlZCBjaGVja2VkIHN0YXRlc1xyXG4gICAgICB0aGlzLmZpbHRlcmVkU3RvcmVzID0gdGhpcy5zdG9yZXMubWFwKHN0b3JlID0+ICh7XHJcbiAgICAgICAgLi4uc3RvcmUsXHJcbiAgICAgICAgLy8gUHJlc2VydmUgdGhlIGNoZWNrZWQgc3RhdGUgYmFzZWQgb24gdGhlIHNlbGVjdGVkIGZpbHRlcnNcclxuICAgICAgICBjaGVja2VkOiB0aGlzLnNlbGVjdGVkRmlsdGVycy5zdG9yZXMuZmluZCgoczogYW55KSA9PiBzLnN0b3JlSWQgPT09IHN0b3JlLnN0b3JlSWQpPy5jaGVja2VkIHx8IHN0b3JlLmNoZWNrZWQgfHwgZmFsc2VcclxuICAgICAgfSkpO1xyXG4gICAgfVxyXG4gIH1cclxuICBcclxuICBcclxuICAgXHJcbiAgY2xvc2VEcm9wZG93bigpOiB2b2lkIHtcclxuICAgIHRoaXMuZHJvcGRvd25PcGVuID0gbnVsbDtcclxuICB9XHJcblxyXG4gIEBIb3N0TGlzdGVuZXIoXCJkb2N1bWVudDpjbGlja1wiLCBbXCIkZXZlbnRcIl0pXHJcbiAgY2xpY2tPdXRzaWRlKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XHJcbiAgICBjb25zdCBjbGlja2VkSW5zaWRlID0gKGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudCkuY2xvc2VzdChcclxuICAgICAgXCIuZHJvcGRvd24tY29udGFpbmVyXCJcclxuICAgICk7XHJcbiAgICBjb25zdCBjbGlja2Vkb3V0U2lkZSA9IChldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQpLmNsb3Nlc3QoXHJcbiAgICAgIFwiLmRyb3Bkb3duMVwiXHJcbiAgICApO1xyXG4gICAgaWYgKCFjbGlja2VkSW5zaWRlKSB7XHJcbiAgICAgIHRoaXMuY2xvc2VEcm9wZG93bigpO1xyXG4gICAgfVxyXG4gICAgaWYoIWNsaWNrZWRvdXRTaWRlKSB7XHJcbiAgICAgIHRoaXMuY2xvc2VEcm9wZG93bjEoKTtcclxuICAgIH1cclxuXHJcbiAgfVxyXG59XHJcbmludGVyZmFjZSBDaXR5IHtcclxuICBjaXR5OiBzdHJpbmc7XHJcbn1cclxuXHJcbmludGVyZmFjZSBMb2NhdGlvbiB7XHJcbiAgY2l0eTogQ2l0eTtcclxuICBjaGVja2VkOiBib29sZWFuO1xyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJtZS0zXCI+XHJcbiAgICA8bGFiZWwgKm5nSWY9XCJzZWxlY3RlZExvY2F0aW9uc0xhYmVsKClcIiBjbGFzcz1cImJhZGdlIGJhZGdlLWxpZ2h0LWRlZmF1bHQgbXgtMlwiPnt7c2VsZWN0ZWRMb2NhdGlvbnNMYWJlbCgpfX0gXHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJyZW1vdmVMb2NhdGlvbigpXCI+PHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxMlwiIGhlaWdodD1cIjEyXCIgdmlld0JveD1cIjAgMCAxMiAxMlwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgPHBhdGggZD1cIk05IDNMMyA5TTMgM0w5IDlcIiBzdHJva2U9XCIjNjY3MDg1XCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxyXG4gICAgICAgIDwvc3ZnPjwvc3Bhbj5cclxuICAgIDwvbGFiZWw+XHJcbiAgICA8bGFiZWwgKm5nSWY9XCJzZWxlY3RlZEdyb3Vwc0xhYmVsKClcIiAgY2xhc3M9XCJiYWRnZSBiYWRnZS1saWdodC1kZWZhdWx0IG14LTJcIj57e3NlbGVjdGVkR3JvdXBzTGFiZWwoKX19IFxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwicmVtb3ZlR3JvdXAoKVwiPjxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMTJcIiBoZWlnaHQ9XCIxMlwiIHZpZXdCb3g9XCIwIDAgMTIgMTJcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgIDxwYXRoIGQ9XCJNOSAzTDMgOU0zIDNMOSA5XCIgc3Ryb2tlPVwiIzY2NzA4NVwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cclxuICAgICAgICA8L3N2Zz48L3NwYW4+XHJcbiAgICA8L2xhYmVsPlxyXG4gICAgPGxhYmVsICBjbGFzcz1cImJhZGdlIGJhZGdlLWxpZ2h0LWRlZmF1bHRcIj57e3NlbGVjdGVkU3RvcmVzTGFiZWwoKX19PC9sYWJlbD5cclxuPC9kaXY+XHJcblxyXG5cclxuPGRpdiBjbGFzcz1cIndyYXBwZXIgbWUtM1wiICpuZ0lmPVwiKGdzLnVzZXJBY2Nlc3MgfCBhc3luYyk/LnVzZXJUeXBlID09PSAndGFuZ28nXCI+XHJcbjxsaWItc2VsZWN0IFtpdGVtc109XCJjbGllbnRMaXN0XCIgW211bHRpXT1cImZhbHNlXCIgW3NlYXJjaEZpZWxkXT1cIidjbGllbnROYW1lJ1wiIFtkaXNhYmxlZF09XCJmYWxzZVwiIFtpZEZpZWxkXT1cIidjbGllbnRJZCdcIlxyXG4oc2VsZWN0ZWQpPVwib25DbGllbnRTZWxlY3QoJGV2ZW50KVwiIFtzZWxlY3RlZFZhbHVlc109XCJbc2VsZWN0ZWRDbGllbnRdXCI+PC9saWItc2VsZWN0PlxyXG48L2Rpdj5cclxuPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgcG9zaXRpb24tcmVsYXRpdmUgbXktMVwiPlxyXG4gICAgPHNwYW4gY2xhc3M9XCJzdmctaWNvbiBzdmctaWNvbi0xIHBvc2l0aW9uLWFic29sdXRlIG1zLTNcIj5cclxuICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgIGQ9XCJNMTMuMzMzMyAxLjY2NjYzVjQuOTk5OTZNNi42NjY2NyAxLjY2NjYzVjQuOTk5OTZNMi41IDguMzMzMjlIMTcuNU00LjE2NjY3IDMuMzMzMjlIMTUuODMzM0MxNi43NTM4IDMuMzMzMjkgMTcuNSA0LjA3OTQ4IDE3LjUgNC45OTk5NlYxNi42NjY2QzE3LjUgMTcuNTg3MSAxNi43NTM4IDE4LjMzMzMgMTUuODMzMyAxOC4zMzMzSDQuMTY2NjdDMy4yNDYxOSAxOC4zMzMzIDIuNSAxNy41ODcxIDIuNSAxNi42NjY2VjQuOTk5OTZDMi41IDQuMDc5NDggMy4yNDYxOSAzLjMzMzI5IDQuMTY2NjcgMy4zMzMyOVpcIlxyXG4gICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzM0NDA1NFwiIHN0cm9rZS13aWR0aD1cIjEuNjdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgIDwvc3ZnPlxyXG4gICAgPC9zcGFuPlxyXG4gICAgPGlucHV0IGNsYXNzPVwiZngtZGF0ZS1yYW5nZSBmb3JtLWNvbnRyb2wgcHMtMTRcIiBzdHlsZT1cIm1pbi13aWR0aDogMjYwcHggIWltcG9ydGFudDtcIiB0eXBlPVwidGV4dFwiIG1hdElucHV0XHJcbiAgICAgICAgbmd4RGF0ZXJhbmdlcGlja2VyTWQgW2Ryb3BzXT1cIidkb3duJ1wiIFtvcGVuc109XCIncmlnaHQnXCIgW3Jhbmdlc109XCJyYW5nZXNcIiBbc2hvd0N1c3RvbVJhbmdlTGFiZWxdPVwidHJ1ZVwiIFthdXRvQXBwbHldPVwidHJ1ZVwiXHJcbiAgICAgICAgW2Fsd2F5c1Nob3dDYWxlbmRhcnNdPVwiZmFsc2VcIiBba2VlcENhbGVuZGFyT3BlbmluZ1dpdGhSYW5nZV09XCJ0cnVlXCIgW3Nob3dDYW5jZWxdPVwidHJ1ZVwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiXHJcbiAgICAgICAgWyhuZ01vZGVsKV09XCJzZWxlY3RlZERhdGVSYW5nZVwiIChzdGFydERhdGVDaGFuZ2VkKT1cIm9uU3RhcnREYXRlQ2hhbmdlKCRldmVudClcIiBbaXNDdXN0b21EYXRlXT1cImlzQ3VzdG9tRGF0ZVwiXHJcbiAgICAgICAgW2xvY2FsZV09XCJ7IGZvcm1hdDogJ0RELU1NLVlZWVknLCBmaXJzdERheTogMSwgbW9udGhOYW1lczogWydKYW51YXJ5JywgJ0ZlYnJ1YXJ5JywgJ01hcmNoJywgJ0FwcmlsJywgJ01heScsICdKdW5lJywgJ0p1bHknLCAnQXVndXN0JywgJ1NlcHRlbWJlcicsICdPY3RvYmVyJywgJ05vdmVtYmVyJywgJ0RlY2VtYmVyJ10gfVwiXHJcbiAgICAgICAgKGRhdGVzVXBkYXRlZCk9XCJkYXRlY2hhbmdlKCRldmVudClcIiBuYW1lPVwiZGF0ZXJhbmdlXCIgW3JlYWRvbmx5XT1cInRydWVcIiAvPlxyXG48L2Rpdj5cclxuPGRpdiBjbGFzcz1cInBvc2l0aW9uLXJlbGF0aXZlXCI+XHJcbiAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwib3BlbmRyb3Bkb3duKCRldmVudClcIiAgY2xhc3M9XCJidG4gYnRuLWRlZmF1bHQgbXgtMiByb3VuZGVkLTMgdGV4dC1ub3dyYXAgYm9yZGVyLXZhbFwiPlxyXG4gICAgICAgIDwhLS0gPHNwYW4gY2xhc3M9XCJtZS0yXCI+RmlsdGVyPC9zcGFuPiAtLT5cclxuICAgICAgICA8c3ZnIGNsYXNzPVwicGwtM1wiIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICAgICAgPHBhdGggZD1cIk01IDEwSDE1TTIuNSA1SDE3LjVNNy41IDE1SDEyLjVcIiBzdHJva2U9XCIjMzQ0MDU0XCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgIDwvc3ZnPlxyXG4gICAgPC9idXR0b24+XHJcblxyXG4gICAgPGRpdiAqbmdJZj1cIk9wZW5kcm9wZG93blwiIGNsYXNzPVwiY2FyZCBwLTUgZHJvcGRvd24xIHBvc2l0aW9uLWFic29sdXRlIHotMSBlbmQtMFwiIHN0eWxlPVwiei1pbmRleDogMSAhaW1wb3J0YW50O1wiIChjbGlja091dHNpZGUpPVwiY2xvc2VEcm9wZG93bjEoKVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJkcm9wZG93bi10aXRsZSBkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gbWItMlwiPkZpbHRlciBPcHRpb25zXHJcbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLW91dGxpbmUgdy0yNSBtcy0zIGJ0bi1yZXNpemVcIiAoY2xpY2spPVwiUmVzZXQoKVwiPiBSZXNldCA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSB3LTI1ICBidG4tcmVzaXplXCIgKGNsaWNrKT1cIkFwcGx5KClcIj5BcHBseTwvYnV0dG9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICA8IS0tIExvY2F0aW9uIERyb3Bkb3duIC0tPlxyXG48ZGl2IGNsYXNzPVwiZHJvcGRvd24tY29udGFpbmVyXCIgKGNsaWNrT3V0c2lkZSk9XCJjbG9zZURyb3Bkb3duKClcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJkcm9wZG93bi1oZWFkZXJcIiAoY2xpY2spPVwidG9nZ2xlRHJvcGRvd24oJ2xvY2F0aW9uJylcIj5cclxuICAgICAgICA8aW5wdXQgXHJcbiAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCIgXHJcbiAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIGRyb3Bkb3duLWlucHV0IGN1cnNvci1wb2ludGVyXCIgXHJcbiAgICAgICAgICAgIFt2YWx1ZV09XCJzZWxlY3RlZExvY2F0aW9uc0xhYmVsKClcIlxyXG4gICAgICAgICAgICByZWFkb25seVxyXG4gICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlbGVjdCBsb2NhdGlvbnMuLi5cIlxyXG4gICAgICAgIC8+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJkcm9wZG93bi1tZW51IGN1c3RvbS1kcm9wZG93bi1tZW51XCIgKm5nSWY9XCJkcm9wZG93bk9wZW4gPT09ICdsb2NhdGlvbidcIj5cclxuICAgICAgICA8aW5wdXQgXHJcbiAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCIgXHJcbiAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIG1iLTIgZHJvcGRvd24tc2VhcmNoXCIgXHJcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VhcmNoIGxvY2F0aW9ucy4uLlwiIFxyXG4gICAgICAgICAgICBbKG5nTW9kZWwpXT1cInNlYXJjaExvY2F0aW9uVGV4dFwiIFxyXG4gICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJmaWx0ZXJMb2NhdGlvbnMoKVwiIFxyXG4gICAgICAgIC8+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY2hlY2sgbWItMiBkcm9wZG93bi1pdGVtIGN1c3RvbS1kcm9wZG93bi1pdGVtXCI+XHJcbiAgICAgICAgICAgIDxpbnB1dCBcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dCBjdXJzb3ItcG9pbnRlclwiIFxyXG4gICAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCIgXHJcbiAgICAgICAgICAgICAgICBpZD1cInNlbGVjdEFsbExvY2F0aW9uc1wiIFxyXG4gICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwiaXNBbGxMb2NhdGlvbnNTZWxlY3RlZCgpXCIgXHJcbiAgICAgICAgICAgICAgICAoY2hhbmdlKT1cInRvZ2dsZVNlbGVjdEFsbExvY2F0aW9ucygkZXZlbnQpXCIgXHJcbiAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tY2hlY2stbGFiZWxcIiBmb3I9XCJzZWxlY3RBbGxMb2NhdGlvbnNcIj5cclxuICAgICAgICAgICAgICAgIFNlbGVjdCBBbGwgTG9jYXRpb25zXHJcbiAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBcclxuICAgICAgICAgICAgY2xhc3M9XCJkcm9wZG93bi1pdGVtIGZvcm0tY2hlY2sgY3VzdG9tLWRyb3Bkb3duLWl0ZW1cIiBcclxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IGxvY2F0aW9uIG9mIGZpbHRlcmVkTG9jYXRpb25zXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICAgIDxpbnB1dCBcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dCBjdXJzb3ItcG9pbnRlclwiIFxyXG4gICAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCIgXHJcbiAgICAgICAgICAgICAgICBbaWRdPVwibG9jYXRpb24uY2l0eVwiIFxyXG4gICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJsb2NhdGlvbi5jaGVja2VkXCJcclxuICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwidXBkYXRlU2VsZWN0ZWRMb2NhdGlvbnMoKVwiIFxyXG4gICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsXCIgW2Zvcl09XCJsb2NhdGlvbi5jaXR5XCI+XHJcbiAgICAgICAgICAgICAgICB7eyBsb2NhdGlvbi5jaXR5IH19XHJcbiAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuPC9kaXY+XHJcblxyXG48IS0tIEdyb3VwIERyb3Bkb3duIC0tPlxyXG48ZGl2IGNsYXNzPVwiZHJvcGRvd24tY29udGFpbmVyIG10LTNcIiAoY2xpY2tPdXRzaWRlKT1cImNsb3NlRHJvcGRvd24oKVwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImRyb3Bkb3duLWhlYWRlclwiIChjbGljayk9XCJ0b2dnbGVEcm9wZG93bignZ3JvdXAnKVwiPlxyXG4gICAgICAgIDxpbnB1dCBcclxuICAgICAgICAgICAgdHlwZT1cInRleHRcIiBcclxuICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZHJvcGRvd24taW5wdXQgY3Vyc29yLXBvaW50ZXJcIiBcclxuICAgICAgICAgICAgW3ZhbHVlXT1cInNlbGVjdGVkR3JvdXBzTGFiZWwoKVwiIHJlYWRvbmx5XHJcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VsZWN0IGNsdXN0ZXJzLi5cIlxyXG4gICAgICAgIC8+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJkcm9wZG93bi1tZW51IGN1c3RvbS1kcm9wZG93bi1tZW51XCIgKm5nSWY9XCJkcm9wZG93bk9wZW4gPT09ICdncm91cCdcIj5cclxuICAgICAgICA8aW5wdXQgXHJcbiAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCIgXHJcbiAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIG1iLTIgZHJvcGRvd24tc2VhcmNoXCIgXHJcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VhcmNoIGNsdXN0ZXJzLi4uXCIgXHJcbiAgICAgICAgICAgIFsobmdNb2RlbCldPVwic2VhcmNoR3JvdXBUZXh0XCIgXHJcbiAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImZpbHRlckdyb3VwcygpXCIgXHJcbiAgICAgICAgLz5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jaGVjayBtYi0yIGRyb3Bkb3duLWl0ZW0gY3VzdG9tLWRyb3Bkb3duLWl0ZW1cIj5cclxuICAgICAgICAgICAgPGlucHV0IFxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0IGN1cnNvci1wb2ludGVyXCIgXHJcbiAgICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIiBcclxuICAgICAgICAgICAgICAgIGlkPVwic2VsZWN0QWxsR3JvdXBzXCIgXHJcbiAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJpc0FsbEdyb3Vwc1NlbGVjdGVkKClcIiBcclxuICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwidG9nZ2xlU2VsZWN0QWxsR3JvdXBzKCRldmVudClcIiBcclxuICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1jaGVjay1sYWJlbFwiIGZvcj1cInNlbGVjdEFsbEdyb3Vwc1wiPlxyXG4gICAgICAgICAgICAgICAgU2VsZWN0IEFsbFxyXG4gICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgXHJcbiAgICAgICAgICAgIGNsYXNzPVwiZHJvcGRvd24taXRlbSBmb3JtLWNoZWNrIGN1c3RvbS1kcm9wZG93bi1pdGVtXCIgXHJcbiAgICAgICAgICAgICpuZ0Zvcj1cImxldCBncm91cCBvZiBmaWx0ZXJlZEdyb3Vwc1wiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgICA8aW5wdXQgXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY2hlY2staW5wdXQgY3Vyc29yLXBvaW50ZXJcIiBcclxuICAgICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiIFxyXG4gICAgICAgICAgICAgICAgW2lkXT1cImdyb3VwLmdyb3VwTmFtZVwiXHJcbiAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImdyb3VwLmNoZWNrZWRcIlxyXG4gICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJ1cGRhdGVTZWxlY3RlZEdyb3VwcygpXCIgXHJcbiAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tY2hlY2stbGFiZWxcIiBbZm9yXT1cImdyb3VwLmdyb3VwTmFtZVwiPlxyXG4gICAgICAgICAgICAgICAge3sgZ3JvdXAuZ3JvdXBOYW1lIH19XHJcbiAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuPC9kaXY+XHJcblxyXG5cclxuPCEtLSBTdG9yZSBEcm9wZG93biAtLT5cclxuPGRpdiBjbGFzcz1cImRyb3Bkb3duLWNvbnRhaW5lciBtdC0zXCIgKGNsaWNrT3V0c2lkZSk9XCJjbG9zZURyb3Bkb3duKClcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJkcm9wZG93bi1oZWFkZXJcIiAoY2xpY2spPVwidG9nZ2xlRHJvcGRvd24oJ3N0b3JlJylcIj5cclxuICAgICAgICA8aW5wdXQgXHJcbiAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCIgXHJcbiAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIGRyb3Bkb3duLWlucHV0IGN1cnNvci1wb2ludGVyXCJcclxuICAgICAgICAgICAgW3ZhbHVlXT1cInNlbGVjdGVkU3RvcmVzTGFiZWwoKVwiXHJcbiAgICAgICAgICAgIHJlYWRvbmx5XHJcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VsZWN0IHN0b3Jlcy4uLlwiXHJcbiAgICAgICAgLz5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImRyb3Bkb3duLW1lbnUgY3VzdG9tLWRyb3Bkb3duLW1lbnVcIiAqbmdJZj1cImRyb3Bkb3duT3BlbiA9PT0gJ3N0b3JlJ1wiPlxyXG4gICAgICAgIDxpbnB1dCBcclxuICAgICAgICAgICAgdHlwZT1cInRleHRcIiBcclxuICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2wgbWItMiBkcm9wZG93bi1zZWFyY2ggXCIgXHJcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VhcmNoIHN0b3Jlcy4uLlwiIFxyXG4gICAgICAgICAgICBbKG5nTW9kZWwpXT1cInNlYXJjaFN0b3JlVGV4dFwiIFxyXG4gICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJmaWx0ZXJTdG9yZXMoKVwiIFxyXG4gICAgICAgIC8+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY2hlY2sgbWItMiBkcm9wZG93bi1pdGVtIGN1c3RvbS1kcm9wZG93bi1pdGVtXCI+XHJcbiAgICAgICAgICAgIDxpbnB1dCBcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dCBjdXJzb3ItcG9pbnRlclwiIFxyXG4gICAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCIgXHJcbiAgICAgICAgICAgICAgICBpZD1cInNlbGVjdEFsbFN0b3Jlc1wiIFxyXG4gICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwiaXNBbGxTdG9yZXNTZWxlY3RlZCgpXCIgXHJcbiAgICAgICAgICAgICAgICAoY2hhbmdlKT1cInRvZ2dsZVNlbGVjdEFsbFN0b3JlcygkZXZlbnQpXCIgXHJcbiAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tY2hlY2stbGFiZWxcIiBmb3I9XCJzZWxlY3RBbGxTdG9yZXNcIj5cclxuICAgICAgICAgICAgICAgIFNlbGVjdCBBbGxcclxuICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IFxyXG4gICAgICAgICAgICBjbGFzcz1cImRyb3Bkb3duLWl0ZW0gZm9ybS1jaGVjayBjdXN0b20tZHJvcGRvd24taXRlbVwiIFxyXG4gICAgICAgICAgICAqbmdGb3I9XCJsZXQgc3RvcmUgb2YgZmlsdGVyZWRTdG9yZXNcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgICAgPGlucHV0IFxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0XCIgXHJcbiAgICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIiBcclxuICAgICAgICAgICAgICAgIFtpZF09XCJzdG9yZS5zdG9yZUlkXCJcclxuICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwic3RvcmUuY2hlY2tlZFwiXHJcbiAgICAgICAgICAgICAgICAoY2hhbmdlKT1cInVwZGF0ZVNlbGVjdGVkU3RvcmVzKClcIiBcclxuICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1jaGVjay1sYWJlbFwiIFtmb3JdPVwic3RvcmUuc3RvcmVJZFwiPlxyXG4gICAgICAgICAgICAgICAge3sgc3RvcmUuc3RvcmVOYW1lIH19XHJcbiAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuPC9kaXY+XHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PiJdfQ==
781
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhZmZpYy1oZWFkZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFuZ28tYXBwLXNoYXJlZC9zcmMvbGliL21vZHVsZXMvbGF5b3V0L3Rvb2xiYXIvdHJhZmZpYy1oZWFkZXIvdHJhZmZpYy1oZWFkZXIvdHJhZmZpYy1oZWFkZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFuZ28tYXBwLXNoYXJlZC9zcmMvbGliL21vZHVsZXMvbGF5b3V0L3Rvb2xiYXIvdHJhZmZpYy1oZWFkZXIvdHJhZmZpYy1oZWFkZXIvdHJhZmZpYy1oZWFkZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFNBQVMsRUFDVCxZQUFZLEdBRWIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8saUJBQWlCLENBQUM7Ozs7Ozs7OztBQVN6QixNQUFNLE9BQU8sc0JBQXNCO0lBcUN2QjtJQUE4QjtJQUMvQjtJQUNDO0lBdENWLEtBQUssR0FBRyxLQUFLLENBQUM7SUFDZCxZQUFZLEdBQUcsQ0FBQyxDQUFjLEVBQUUsRUFBRTtRQUNoQyxNQUFNLFdBQVcsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3JDLE9BQU8sV0FBVyxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztJQUM5QyxDQUFDLENBQUM7SUFFRixpQkFBaUIsR0FBUSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQztRQUNoRSxPQUFPLEVBQUUsS0FBSyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsR0FBRSxDQUFDO0lBQ3pDLGVB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LFlBQVk7dUJBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBMHlCMUMsWUFBWTtzQkFEWCxZQUFZO3VCQUFDLGdCQUFnQixFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICBDb21wb25lbnQsXHJcbiAgSG9zdExpc3RlbmVyLFxyXG4gIE9uSW5pdCxcclxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgZGF5anMgZnJvbSBcImRheWpzXCI7XHJcbmltcG9ydCBcImRheWpzL2xvY2FsZS9lblwiO1xyXG5pbXBvcnQgeyBBdXRoU2VydmljZSB9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9zZXJ2aWNlcy9hdXRoLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgR2xvYmFsU3RhdGVTZXJ2aWNlIH0gZnJvbSBcInRhbmdvLWFwcC11aS1nbG9iYWxcIjtcclxuaW1wb3J0IHsgTmF2aWdhdGlvbkVuZCwgUm91dGVyIH0gZnJvbSBcIkBhbmd1bGFyL3JvdXRlclwiO1xyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogXCJsaWItdHJhZmZpYy1oZWFkZXJcIixcclxuICB0ZW1wbGF0ZVVybDogXCIuL3RyYWZmaWMtaGVhZGVyLmNvbXBvbmVudC5odG1sXCIsXHJcbiAgc3R5bGVVcmw6IFwiLi90cmFmZmljLWhlYWRlci5jb21wb25lbnQuc2Nzc1wiLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgVHJhZmZpY0hlYWRlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgZGF5anMgPSBkYXlqcztcclxuICBpc0N1c3RvbURhdGUgPSAobTogZGF5anMuRGF5anMpID0+IHtcclxuICAgIGNvbnN0IGlzVmFsaWREYXRlID0gbSA+IHRoaXMuZGF5anMoKTtcclxuICAgIHJldHVybiBpc1ZhbGlkRGF0ZSA/IFwiaW52YWxpZC1kYXRlXCIgOiBmYWxzZTtcclxuICB9O1xyXG5cclxuICBzZWxlY3RlZERhdGVSYW5nZTogYW55ID0geyBzdGFydERhdGU6IGRheWpzKCkuc3VidHJhY3QoMzAsICdkYXlzJyksXHJcbiAgICBlbmREYXRlOiBkYXlqcygpLnN1YnRyYWN0KDEsIFwiZGF5c1wiKSx9O1xyXG4gIHNlbGVjdGVkRmlsdGVyczogYW55ID0ge1xyXG4gICAgY2xpZW50OiBudWxsLFxyXG4gICAgY2xpZW50TmFtZTogbnVsbCxcclxuICAgIGNsaWVudHM6IFtdLFxyXG4gICAgc3RvcmU6IG51bGwsXHJcbiAgICBzdG9yZXM6IFtdLFxyXG4gICAgZGF0ZTogbnVsbCxcclxuICAgIGdyb3VwOiBbXSxcclxuICAgIGxvY2F0aW9uOiBbXSxcclxuICB9O1xyXG4gIE9wZW5kcm9wZG93bjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGRyb3Bkb3duT3Blbjogc3RyaW5nIHwgbnVsbCA9IG51bGw7IC8vICdsb2NhdGlvbicgb3IgJ2dyb3VwJ1xyXG4gIHNlYXJjaExvY2F0aW9uVGV4dDogc3RyaW5nID0gXCJcIjtcclxuICBzZWFyY2hHcm91cFRleHQ6IHN0cmluZyA9IFwiXCI7XHJcbiAgbG9jYXRpb25zOiBhbnlbXSA9IFtdO1xyXG4gIGZpbHRlcmVkTG9jYXRpb25zOiBhbnlbXSA9IFtdO1xyXG4gIGdyb3Vwc0RhdGE6IGFueVtdID0gW107XHJcbiAgZmlsdGVyZWRHcm91cHM6IGFueVtdID0gW107XHJcbiAgZmlsdGVyZWRTdG9yZXM6IGFueVtdID0gW107XHJcbiAgc3RvcmVzOmFueVtdID0gW11cclxuICBzZWFyY2hTdG9yZVRleHQ6c3RyaW5nID0gJyc7XHJcbiAgY2xpZW50TGlzdDphbnkgPSBbXVxyXG4gIHNlbGVjdGVkQ2xpZW50OmFueVxyXG4gIGxvY2F0aW9uTGFiZWw6IGFueVtdPVtdO1xyXG4gIGdyb3VwTGFiZWw6IGFueVtdPVtdO1xyXG4gIHVzZXJzOiBhbnk7XHJcbiAgdXJsOiBhbnk7XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGF1dGg6IEF1dGhTZXJ2aWNlLCAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxyXG4gICAgcHVibGljIGdzOiBHbG9iYWxTdGF0ZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGNkOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICApIHt9XHJcblxyXG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmNsaWNrJywgWyckZXZlbnQnXSlcclxuICBvbkNsaWNrIChldmVudDogTW91c2VFdmVudCkge1xyXG4gICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xyXG4gICAgaWYoIXRhcmdldC5jbG9zZXN0KCcuZHJvcGRvd24xJykpIHtcclxuICAgICAgdGhpcy5PcGVuZHJvcGRvd24gPSBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcbiAgY2xvc2VEcm9wZG93bjEoKXtcclxuICAgIHRoaXMuT3BlbmRyb3Bkb3duID0gZmFsc2U7XHJcbiAgfVxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgLy8gdGhpcy5zZXRSYW5nZXNCYXNlZE9uUm91dGUoKTtcclxuXHJcbiAgICAvLyBMaXN0ZW4gZm9yIHJvdXRlIGNoYW5nZXMgdG8gdXBkYXRlIHJhbmdlc1xyXG4gICAgLy8gdGhpcy5yb3V0ZXI/LmV2ZW50cz8uc3Vic2NyaWJlKChldmVudCkgPT4ge1xyXG4gICAgLy8gICBpZiAoZXZlbnQgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uRW5kKSB7XHJcbiAgICAvLyAgICAgdGhpcy5zZXRSYW5nZXNCYXNlZE9uUm91dGUoKTtcclxuICAgIC8vICAgfVxyXG4gICAgLy8gfSk7XHJcbiAgICB0aGlzLnVybCA9IHRoaXMucm91dGVyLnVybC5zcGxpdChcIj9cIilbMF0uc3BsaXQoJy8nKTtcclxuICAgIGNvbnN0IHVzZXIgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCd1c2VyLWluZm8nKSBhcyBzdHJpbmcpO1xyXG4gICAgdGhpcy51c2VycyA9IHVzZXI7XHJcbiAgICB0aGlzLmdzPy5tYW5hZ2VSZWZyZXNoVHJpZ2dlcj8uc3Vic2NyaWJlKChlKSA9PiB7ICAgICAgXHJcbiAgICAgIGlmIChlKSB7XHJcbiAgICAgICAgaWYgKHVzZXIudXNlclR5cGUgPT09ICd0YW5nbycpIHtcclxuICAgICAgICB0aGlzLmdldENsaWVudCgpO1xyXG4gICAgICAgIH0gZWxzZXtcclxuICAgICAgICAgIGNvbnN0IHN0b3JlZEZpbHRlcnMgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcImhlYWRlci1maWx0ZXJzXCIpO1xyXG4gICAgICAgICAgaWYgKHN0b3JlZEZpbHRlcnMpIHtcclxuICAgICAgICAgIGNvbnN0IGhlYWRlckZpbHRlcnMgPSBKU09OLnBhcnNlKHN0b3JlZEZpbHRlcnMpO1xyXG4gICAgICAgICAgdGhpcy5maWx0ZXJlZFN0b3JlcyA9IGhlYWRlckZpbHRlcnM/LnN0b3Jlcy5tYXAoKHN0b3JlOmFueSkgPT4gKHtcclxuICAgICAgICAgICAgLi4uc3RvcmUsXHJcbiAgICAgICAgICAgIGNoZWNrZWQ6IHN0b3JlLmNoZWNrZWRcclxuICAgICAgICAgIH0pKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuIFxyXG4gICAgLy8gRmV0Y2ggY2xpZW50IGRhdGEgaWYgdGhlIHVzZXIgaXMgb2YgdHlwZSAndGFuZ28nXHJcbiAgICBpZiAodXNlci51c2VyVHlwZSA9PT0gJ3RhbmdvJykge1xyXG4gICAgICB0aGlzLmdldENsaWVudCgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5nZXRMb2NhdGlvbnMoKTtcclxuICAgICAgdGhpcy5nZXRHcm91cHMoKTtcclxuICAgICAgdGhpcy5nZXRTdG9yZSgpO1xyXG4vLyAgICAgICB0aGlzLmVtaXRBbmRTdG9yZUZpbHRlcnMoKTtcclxuLy8gY29uc29sZS5sb2coXCIxXCIpXHJcbiAgICB9XHJcbiAgIFxyXG4gICAgLy8gTG9hZCBmaWx0ZXJzIGZyb20gbG9jYWxTdG9yYWdlIGlmIHRoZXkgZXhpc3RcclxuICAgIGNvbnN0IHN0b3JlZEZpbHRlcnMgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcImhlYWRlci1maWx0ZXJzXCIpO1xyXG4gICAgaWYgKHN0b3JlZEZpbHRlcnMpIHtcclxuICAgICAgY29uc3QgaGVhZGVyRmlsdGVycyA9IEpTT04ucGFyc2Uoc3RvcmVkRmlsdGVycyk7XHJcbiAgXHJcbiAgICAgIC8vIEluaXRpYWxpemUgc2VsZWN0ZWRGaWx0ZXJzIHdpdGggZGVmYXVsdHMgb3IgZXhpc3RpbmcgdmFsdWVzXHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRGaWx0ZXJzID0ge1xyXG4gICAgICAgIGNsaWVudDogaGVhZGVyRmlsdGVycy5jbGllbnQgfHwgdGhpcy51c2Vycy5jbGllbnQsXHJcbiAgICAgICAgY2xpZW50TmFtZTogaGVhZGVyRmlsdGVycy5jbGllbnROYW1lIHx8ICcnLFxyXG4gICAgICAgIGNsaWVudHM6IGhlYWRlckZpbHRlcnMuY2xpZW50cyB8fCBbXSxcclxuICAgICAgICBzdG9yZTogaGVhZGVyRmlsdGVycy5zdG9yZSB8fCBudWxsLFxyXG4gICAgICAgIGRhdGU6IGhlYWRlckZpbHRlcnMuZGF0ZSB8fCB7fSxcclxuICAgICAgICBzdG9yZXM6IGhlYWRlckZpbHRlcnMuc3RvcmVzIHx8IFtdLFxyXG4gICAgICAgIGdyb3VwOiBoZWFkZXJGaWx0ZXJzLmdyb3VwIHx8IFtdLFxyXG4gICAgICAgIGxvY2F0aW9uOiBoZWFkZXJGaWx0ZXJzLmxvY2F0aW9uIHx8IFtdXHJcbiAgICAgIH07XHJcbiAgXHJcbiAgICAgIC8vIFN5bmMgZmlsdGVyZWQgZGF0YSB3aXRoIHN0b3JlZCBzZWxlY3Rpb25zXHJcbiAgICAgIHRoaXMuZmlsdGVyZWRMb2NhdGlvbnMgPSB0aGlzLnN5bmNXaXRoTG9jYWxTdG9yYWdlKGhlYWRlckZpbHRlcnMubG9jYXRpb24pO1xyXG4gICAgICB0aGlzLmZpbHRlcmVkR3JvdXBzID0gdGhpcy5zeW5jV2l0aExvY2FsU3RvcmFnZShoZWFkZXJGaWx0ZXJzLmdyb3VwKTtcclxuICAgICAgdGhpcy5maWx0ZXJlZFN0b3JlcyA9IHRoaXMuc3luY1dpdGhMb2NhbFN0b3JhZ2UoaGVhZGVyRmlsdGVycy5zdG9yZXMpO1xyXG4gIFxyXG4gICAgICAvLyBGb3JtYXQgZGF0ZSByYW5nZSBpZiBpdCBleGlzdHNcclxuICAgICAgaWYgKGhlYWRlckZpbHRlcnMuZGF0ZSkge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWREYXRlUmFuZ2UgPSB7XHJcbiAgICAgICAgICBzdGFydERhdGU6IHRoaXMuZGF5anMoaGVhZGVyRmlsdGVycy5kYXRlLnN0YXJ0RGF0ZSwgXCJZWVlZLU1NLUREXCIpLmZvcm1hdChcIkRELU1NLVlZWVlcIiksXHJcbiAgICAgICAgICBlbmREYXRlOiB0aGlzLmRheWpzKGhlYWRlckZpbHRlcnMuZGF0ZS5lbmREYXRlLCBcIllZWVktTU0tRERcIikuZm9ybWF0KFwiREQtTU0tWVlZWVwiKSxcclxuICAgICAgICB9O1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWREYXRlUmFuZ2UgPSB7XHJcbiAgICAgICAgICBzdGFydERhdGU6IHRoaXMuZGF5anModGhpcy5zZWxlY3RlZERhdGVSYW5nZS5zdGFydERhdGUsIFwiWVlZWS1NTS1ERFwiKS5mb3JtYXQoXCJERC1NTS1ZWVlZXCIpLFxyXG4gICAgICAgICAgZW5kRGF0ZTogdGhpcy5kYXlqcyh0aGlzLnNlbGVjdGVkRGF0ZVJhbmdlLmVuZERhdGUsIFwiWVlZWS1NTS1ERFwiKS5mb3JtYXQoXCJERC1NTS1ZWVlZXCIpLFxyXG4gICAgICAgIH07XHJcbiAgICAgIH1cclxuICAgICAgLy8gY29uc29sZS5sb2coXCIzXCIpXHJcbiAgICAgIC8vIEVtaXQgZGF0YSB2aWEgc2VydmljZSBhbmQgdXBkYXRlIGxvY2FsU3RvcmFnZVxyXG50aGlzLmVtaXRBbmRTdG9yZUZpbHRlcnMoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIEluaXRpYWxpemUgZW1wdHkgc3RhdGVzIGlmIG5vIGhlYWRlciBmaWx0ZXJzIGFyZSBwcmVzZW50IGluIGxvY2FsU3RvcmFnZVxyXG4gICAgICB0aGlzLnJlc2V0RmlsdGVycygpO1xyXG4gICAgICAvLyBjb25zb2xlLmxvZyhcIjJcIilcclxuICAgIH1cclxuICB9XHJcbiAgcHJpdmF0ZSBzeW5jV2l0aExvY2FsU3RvcmFnZShpdGVtczogYW55W10pOiBhbnlbXSB7XHJcbiAgICByZXR1cm4gaXRlbXNcclxuICAgICAgPyBpdGVtcy5tYXAoKGl0ZW06IGFueSkgPT4gKHtcclxuICAgICAgICAgIC4uLml0ZW0sXHJcbiAgICAgICAgICBjaGVja2VkOiBpdGVtLmNoZWNrZWQgPT09IHRydWVcclxuICAgICAgICB9KSlcclxuICAgICAgOiBbXTtcclxuICB9XHJcbiAgXHJcbiAgcHJpdmF0ZSBlbWl0QW5kU3RvcmVGaWx0ZXJzKCk6IHZvaWQge1xyXG4gICAgdGhpcy5ncy5kYXRhUmFuZ2VWYWx1ZS5uZXh0KHRoaXMuc2VsZWN0ZWRGaWx0ZXJzKTtcclxuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFwiaGVhZGVyLWZpbHRlcnNcIiwgSlNPTi5zdHJpbmdpZnkodGhpcy5zZWxlY3RlZEZpbHRlcnMpKTtcclxuICAgIC8vIGNvbnNvbGUubG9nKFwiMVwiKVxyXG4gIH1cclxuICBcclxuICAvKipcclxuICAgKiBSZXNldCBzZWxlY3RlZEZpbHRlcnMgYW5kIGFsbCByZWxhdGVkIGFycmF5cyB0byBlbXB0eSBzdGF0ZXNcclxuICAgKi9cclxuICBwcml2YXRlIHJlc2V0RmlsdGVycygpOiB2b2lkIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRGaWx0ZXJzID0ge1xyXG4gICAgICBjbGllbnQ6IG51bGwsXHJcbiAgICAgIGNsaWVudE5hbWU6ICcnLFxyXG4gICAgICBjbGllbnRzOiBbXSxcclxuICAgICAgc3RvcmU6IG51bGwsXHJcbiAgICAgIGRhdGU6IHt9LFxyXG4gICAgICBzdG9yZXM6IFtdLFxyXG4gICAgICBncm91cDogW10sXHJcbiAgICAgIGxvY2F0aW9uOiBbXVxyXG4gICAgfTtcclxuICAgIHRoaXMuZmlsdGVyZWRMb2NhdGlvbnMgPSBbXTtcclxuICAgIHRoaXMuZmlsdGVyZWRHcm91cHMgPSBbXTtcclxuICAgIHRoaXMuZmlsdGVyZWRTdG9yZXMgPSBbXTtcclxuICB9XHJcbmdldENsaWVudCgpe1xyXG4gIHRoaXMuYXV0aC5nZXRDbGllbnRzKCkuc3Vic2NyaWJlKHtcclxuICAgIG5leHQ6IChlKSA9PiB7XHJcbiAgICAgIGlmIChlKSB7XHJcbiAgICAgICAgdGhpcy5jbGllbnRMaXN0ID0gZS5kYXRhLnJlc3VsdDtcclxuICAgICAgICBjb25zdCBoZWFkZXJGaWx0ZXJzOiBhbnkgPSBKU09OLnBhcnNlKFxyXG4gICAgICAgICAgbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJoZWFkZXItZmlsdGVyc1wiKSB8fCBcInt9XCJcclxuICAgICAgICApO1xyXG4gICAgICAgIGlmIChoZWFkZXJGaWx0ZXJzLmNsaWVudCkge1xyXG4gICAgICAgICAgdGhpcy5jbGllbnRMaXN0LmZpbmQoKG9iajogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChvYmouY2xpZW50SWQgPT09IGhlYWRlckZpbHRlcnMuY2xpZW50KSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZENsaWVudCA9IG9iajtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkRmlsdGVycy5jbGllbnQgPSBoZWFkZXJGaWx0ZXJzLmNsaWVudDtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRGaWx0ZXJzLmNsaWVudE5hbWUgPSBoZWFkZXJGaWx0ZXJzLmNsaWVudE5hbWU7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkRmlsdGVycy5jbGllbnRzID0gaGVhZGVyRmlsdGVycy5jbGllbnRzO1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZEZpbHRlcnMuc3RvcmUgPSBoZWFkZXJGaWx0ZXJzLnN0b3JlO1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZEZpbHRlcnMuZGF0ZSA9IGhlYWRlckZpbHRlcnMuZGF0ZTtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRGaWx0ZXJzLnN0b3JlcyA9IGhlYWRlckZpbHRlcnMuc3RvcmVzO1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZEZpbHRlcnMuZ3JvdXAgPSBoZWFkZXJGaWx0ZXJzLmdyb3VwO1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZEZpbHRlcnMubG9jYXRpb24gPSBoZWFkZXJGaWx0ZXJzLmxvY2F0aW9uO1xyXG4gICAgICAgICAgdGhpcy5ncy5kYXRhUmFuZ2VWYWx1ZS5uZXh0KHRoaXMuc2VsZWN0ZWRGaWx0ZXJzKTtcclxuICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwiMlwiKVxyXG4gICAgICAgICAgICAgICAgIC8vIEVuc3VyZSBsb2NhdGlvbnMgYW5kIGdyb3VwcyBhcmUgbG9hZGVkIGJlZm9yZSBmZXRjaGluZyBzdG9yZXNcclxuIHRoaXMuZ2V0TG9jYXRpb25zKCk7XHJcbiB0aGlzLmdldEdyb3VwcygpO1xyXG4gIC8vIEZldGNoIHN0b3JlcyBvbmx5IGFmdGVyIGxvY2F0aW9ucyBhbmQgZ3JvdXBzIGFyZSBzZXRcclxuICB0aGlzLmdldFN0b3JlKCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZENsaWVudCA9IHRoaXMuY2xpZW50TGlzdFswXTtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkRmlsdGVycy5jbGllbnQgPSAgdGhpcy5zZWxlY3RlZENsaWVudC5jbGllbnRJZDtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkRmlsdGVycy5jbGllbnROYW1lID0gdGhpcy5zZWxlY3RlZENsaWVudC5jbGllbnROYW1lXHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRGaWx0ZXJzLmNsaWVudHMgPSBoZWFkZXJGaWx0ZXJzLmNsaWVudHM7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRGaWx0ZXJzLnN0b3JlID0gaGVhZGVyRmlsdGVycy5zdG9yZTtcclxuICAgICAgdGhpcy5zZWxlY3RlZEZpbHRlcnMuZGF0ZSA9IGhlYWRlckZpbHRlcnMuZGF0ZTtcclxuICAgICAgdGhpcy5zZWxlY3RlZEZpbHRlcnMuc3RvcmVzID0gaGVhZGVyRmlsdGVycy5zdG9yZXM7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRGaWx0ZXJzLmdyb3VwID0gaGVhZGVyRmlsdGVycy5ncm91cDtcclxuICAgICAgdGhpcy5zZWxlY3RlZEZpbHRlcnMubG9jYXRpb24gPSBoZWFkZXJGaWx0ZXJzLmxvY2F0aW9uO1xyXG4gICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFxyXG4gICAgICAgICAgXCJoZWFkZXItZmlsdGVyc1wiLFxyXG4gICAgICAgICAgSlNPTi5zdHJpbmdpZnkodGhpcy5zZWxlY3RlZEZpbHRlcnMpIFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5ncy5kYXRhUmFuZ2VWYWx1ZS5uZXh0KHRoaXMuc2VsZWN0ZWRGaWx0ZXJzKTtcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhcIjNcIilcclxuICAgICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgICAgICAgLy8gRW5zdXJlIGxvY2F0aW9ucyBhbmQgZ3JvdXBzIGFyZSBsb2FkZWQgYmVmb3JlIGZldGNoaW5nIHN0b3Jlc1xyXG4gdGhpcy5nZXRMb2NhdGlvbnMoKTtcclxuIHRoaXMuZ2V0R3JvdXBzKCk7XHJcbiAgLy8gRmV0Y2ggc3RvcmVzIG9ubHkgYWZ0ZXIgbG9jYXRpb25zIGFuZCBncm91cHMgYXJlIHNldFxyXG4gIHRoaXMuZ2V0U3RvcmUoKTtcclxuICAgICAgfVxyXG5cclxuXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkQ2xpZW50ID0gdGhpcy5jbGllbnRMaXN0WzBdO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkRmlsdGVycy5jbGllbnQgPSAgdGhpcy5zZWxlY3RlZENsaWVudC5jbGllbnRJZDtcclxuICAgICAgdGhpcy5zZWxlY3RlZEZpbHRlcnMuY2xpZW50TmFtZSA9IHRoaXMuc2VsZWN0ZWRDbGllbnQuY2xpZW50TmFtZVxyXG4gICAgICAgLy8gRW5zdXJlIGxvY2F0aW9ucyBhbmQgZ3JvdXBzIGFyZSBsb2FkZWQgYmVmb3JlIGZldGNoaW5nIHN0b3Jlc1xyXG4gdGhpcy5nZXRMb2NhdGlvbnMoKTtcclxuIHRoaXMuZ2V0R3JvdXBzKCk7XHJcbiAvLyBGZXRjaCBzdG9yZXMgb25seSBhZnRlciBsb2NhdGlvbnMgYW5kIGdyb3VwcyBhcmUgc2V0XHJcbiB0aGlzLmdldFN0b3JlKCk7XHJcbiAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFxyXG4gICAgICAgIFwiaGVhZGVyLWZpbHRlcnNcIixcclxuICAgICAgICBKU09OLnN0cmluZ2lmeSh0aGlzLnNlbGVjdGVkRmlsdGVycykgXHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMuZ3MuZGF0YVJhbmdlVmFsdWUubmV4dCh0aGlzLnNlbGVjdGVkRmlsdGVycyk7XHJcbiAgICAgIC8vIGNvbnNvbGUubG9nKFwiNFwiKVxyXG4gICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcclxuICAgIH1cclxuICAgIH0sXHJcbiAgfSk7XHJcbn1cclxub25DbGllbnRTZWxlY3QoZXZlbnQ6IGFueSk6IHZvaWQge1xyXG4gIC8vIFVwZGF0ZSB0aGUgc2VsZWN0ZWQgY2xpZW50XHJcbiAgdGhpcy5zZWxlY3RlZENsaWVudCA9IGV2ZW50O1xyXG4gIC8vIENsZWFyIHByZXZpb3VzIGZpbHRlcmVkIGRhdGEgYW5kIHNlbGVjdGlvbnNcclxuICB0aGlzLmZpbHRlcmVkR3JvdXBzID0gW107XHJcbiAgdGhpcy5maWx0ZXJlZFN0b3JlcyA9IFtdO1xyXG4gIHRoaXMuZmlsdGVyZWRMb2NhdGlvbnMgPSBbXTtcclxuICB0aGlzLnNlbGVjdGVkRmlsdGVycy5zdG9yZXMgPSBbXTtcclxuICB0aGlzLnNlbGVjdGVkRmlsdGVycy5ncm91cCA9IFtdO1xyXG4gIHRoaXMuc2VsZWN0ZWRGaWx0ZXJzLmxvY2F0aW9uID0gW107XHJcblxyXG4gIC8vIEZldGNoIGhlYWRlciBmaWx0ZXJzIGZyb20gbG9jYWxTdG9yYWdlXHJcbiAgY29uc3QgaGVhZGVyRmlsdGVyczogYW55ID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcImhlYWRlci1maWx0ZXJzXCIpIHx8IFwie31cIik7XHJcbiAgXHJcbiAgLy8gVXBkYXRlIHRoZSBzZWxlY3RlZCBmaWx0ZXJzIHdpdGggdGhlIG5ldyBjbGllbnRcclxuICB0aGlzLnNlbGVjdGVkRmlsdGVycy5jbGllbnQgPSB0aGlzLnNlbGVjdGVkQ2xpZW50LmNsaWVudElkO1xyXG4gIHRoaXMuc2VsZWN0ZWRGaWx0ZXJzLmNsaWVudE5hbWUgPSB0aGlzLnNlbGVjdGVkQ2xpZW50LmNsaWVudE5hbWU7XHJcbiAgXHJcbiAgLy8gUmVtb3ZlIG9sZCBzdG9yZSwgZ3JvdXAsIGFuZCBsb2NhdGlvbiBkYXRhIGZyb20gdGhlIGhlYWRlciBmaWx0ZXJzXHJcbiAgZGVsZXRlIGhlYWRlckZpbHRlcnMuc3RvcmVzO1xyXG4gIGRlbGV0ZSBoZWFkZXJGaWx0ZXJzLmdyb3VwcztcclxuICBkZWxldGUgaGVhZGVyRmlsdGVycy5sb2NhdGlvbjtcclxuICBcclxuICAvLyBGZXRjaCBuZXcgZGF0YSBiYXNlZCBvbiB0aGUgbmV3IGNsaWVudFxyXG4gIHRoaXMuZ2V0TG9jYXRpb25zKCk7XHJcbiAgdGhpcy5nZXRTdG9yZSgpO1xyXG4gIHRoaXMuZ2V0R3JvdXBzKCk7XHJcblxyXG4gIC8vIFVwZGF0ZSBsb2NhbFN0b3JhZ2Ugd2l0aCB0aGUgbmV3IGNsaWVudCBzZWxlY3Rpb24gYW5kIGVtcHR5IGZpbHRlciBkYXRhXHJcbiAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ2hlYWRlci1maWx0ZXJzJywgSlNPTi5zdHJpbmdpZnkodGhpcy5zZWxlY3RlZEZpbHRlcnMpKTtcclxuICB3aW5kb3cubG9jYXRpb24ucmVsb2FkKClcclxuICAvLyBFbWl0IGRhdGEgdG8gdGhlIGdsb2JhbCBzZXJ2aWNlXHJcbiAgLy8gdGhpcy5ncy5kYXRhUmFuZ2VWYWx1ZS5uZXh0KHRoaXMuc2VsZWN0ZWRGaWx0ZXJzKTtcclxuICAvLyBUcmlnZ2VyIGNoYW5nZSBkZXRlY3Rpb24gdG8gcmVmbGVjdCBVSSBjaGFuZ2VzXHJcbiAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XHJcbn1cclxuXHJcblxyXG5cclxucmFuZ2VzOmFueSA9IHtcclxuICBUb2RheTogW2RheWpzKCksIGRheWpzKCldLFxyXG4gIFllc3RlcmRheTogW2RheWpzKCkuc3VidHJhY3QoMSwgJ2RheXMnKSwgZGF5anMoKS5zdWJ0cmFjdCgxLCAnZGF5cycpXSxcclxuICAnVGhpcyBXZWVrJzogW2RheWpzKCkuc3VidHJhY3QoNywgJ2RheXMnKSwgZGF5anMoKS5zdWJ0cmFjdCgxLCAnZGF5cycpXSxcclxuICAnTGFzdCBXZWVrJzogW1xyXG4gICAgZGF5anMoKS5zdWJ0cmFjdCgxNCwgJ2RheXMnKS5zdGFydE9mKCdkYXknKSxcclxuICAgIGRheWpzKCkuc3VidHJhY3QoOCwgJ2RheXMnKS5lbmRPZignZGF5JyksXHJcbiAgXSxcclxuICAnVGhpcyBNb250aCc6IFtkYXlqcygpLnN1YnRyYWN0KDMwLCAnZGF5cycpLCBkYXlqcygpLnN1YnRyYWN0KDEsICdkYXlzJyldLFxyXG4gICdMYXN0IE1vbnRoJzogW1xyXG4gICAgZGF5anMoKS5zdWJ0cmFjdCgxLCAnbW9udGgnKS5zdGFydE9mKCdtb250aCcpLFxyXG4gICAgZGF5anMoKS5zdWJ0cmFjdCgxLCAnbW9udGgnKS5lbmRPZignbW9udGgnKSxcclxuICBdLFxyXG59O1xyXG5cclxuICBvblN0YXJ0RGF0ZUNoYW5nZShldmVudDogYW55KSB7XHJcbiAgICBpZiAodGhpcy5kYXlqcyhldmVudC5zdGFydERhdGUpLmlzVmFsaWQoKSkge1xyXG4gICAgIFxyXG4gICAgICB0aGlzLmlzQ3VzdG9tRGF0ZSA9IChtOiBkYXlqcy5EYXlqcykgPT4ge1xyXG4gICAgICAgIGNvbnN0IGlzVmFsaWREYXRlID1cclxuICAgICAgICAgIG0gPiB0aGlzLmRheWpzKCkgfHwgbSA+IHRoaXMuZGF5anMoZXZlbnQuc3RhcnREYXRlLmFkZCg5MCwgXCJkYXlzXCIpKTtcclxuICAgICAgICByZXR1cm4gaXNWYWxpZERhdGUgPyBcImludmFsaWQtZGF0ZVwiIDogZmFsc2U7XHJcbiAgICAgIH07XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBkYXRlY2hhbmdlKGV2ZW50OiBhbnkpIHtcclxuICAgIGlmIChldmVudCAmJiBldmVudC5zdGFydERhdGUgJiYgZXZlbnQuZW5kRGF0ZSkge1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgdGhpcy5kYXlqcyhldmVudC5zdGFydERhdGUpLmlzVmFsaWQoKSAmJlxyXG4gICAgICAgIHRoaXMuZGF5anMoZXZlbnQuZW5kRGF0ZSkuaXNWYWxpZCgpXHJcbiAgICAgICkge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWREYXRlUmFuZ2Uuc3RhcnREYXRlID0gZXZlbnQuc3RhcnREYXRlO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWREYXRlUmFuZ2UuZW5kRGF0ZSA9IGV2ZW50LmVuZERhdGU7XHJcbiAgICAgICAgdmFyIGRhdGV0aW1lID0ge1xyXG4gICAgICAgICAgc3RhcnREYXRlOiB0aGlzLmRheWpzKGV2ZW50LnN0YXJ0RGF0ZSwgXCJERC1NTS1ZWVlZXCIpLmZvcm1hdChcclxuICAgICAgICAgICAgXCJZWVlZLU1NLUREXCJcclxuICAgICAgICAgICksXHJcbiAgICAgICAgICBlbmREYXRlOiB0aGlzLmRheWpzKGV2ZW50LmVuZERhdGUsIFwiREQtTU0tWVlZWVwiKS5mb3JtYXQoXCJZWVlZLU1NLUREXCIpLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEZpbHRlcnMuZGF0ZSA9IGRhdGV0aW1lO1xyXG4gICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFxyXG4gICAgICAgICAgXCJoZWFkZXItZmlsdGVyc1wiLFxyXG4gICAgICAgICAgSlNPTi5zdHJpbmdpZnkodGhpcy5zZWxlY3RlZEZpbHRlcnMpXHJcbiAgICAgICAgKTtcclxuICAgICAgICB3aW5kb3cubG9jYXRpb24ucmVsb2FkKClcclxuICAgICAgLy8gdGhpcy5ncy5kYXRhUmFuZ2VWYWx1ZS5uZXh0KHRoaXMuc2VsZWN0ZWRGaWx0ZXJzKTtcclxuICAgICAgfVxyXG4gICAgfSBcclxuICB9XHJcbiAgb3BlbmRyb3Bkb3duKGU6TW91c2VFdmVudCkge1xyXG4gICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgIHRoaXMuT3BlbmRyb3Bkb3duID0gIXRoaXMuT3BlbmRyb3Bkb3duO1xyXG4gIH1cclxuICBnZXRMb2NhdGlvbnMoKTogdm9pZCB7XHJcbiAgICAvLyBjb25zdCBoZWFkZXJGaWx0ZXJzOiBhbnkgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwiaGVhZGVyLWZpbHRlcnNcIikgfHwgXCJ7fVwiKTtcclxuICAgIGxldCBvYmogPXtcclxuICAgICBjbGllbnRJZDogdGhpcy5zZWxlY3RlZEZpbHRlcnMuY2xpZW50ID8gdGhpcy5zZWxlY3RlZEZpbHRlcnMuY2xpZW50IDp0aGlzLnVzZXJzLmNsaWVudElkLFxyXG4gICAgIGNpdHk6IFtdLFxyXG4gICAgIGdyb3VwOiBbXSxcclxuICAgIH1cclxuICAgIHRoaXMuYXV0aC5nZXRMb2NhdGlvbihvYmopLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIGxldCBjaXR5TGlzdCA9IHRoaXMuc2VsZWN0ZWRGaWx0ZXJzPy5sb2NhdGlvbj8uZmlsdGVyKChsb2NhdGlvbjphbnkpID0+IGxvY2F0aW9uLmNoZWNrZWQpLm1hcCgobG9jOmFueSkgPT4gbG9jLmNpdHkpO1xyXG4gICAgICAgIC8vIE1hcCB0aGUgZmV0Y2hlZCBsb2NhdGlvbnMgd2l0aCBkZWZhdWx0IHVuY2hlY2tlZCBzdGF0ZVxyXG4gICAgICAgIHRoaXMubG9jYXRpb25zID0gcmVzPy5kYXRhPy5sb2NhdGlvbkRhdGEubWFwKChjaXR5OiBhbnkpID0+ICh7XHJcbiAgICAgICAgICBjaXR5OiBjaXR5LmNpdHksXHJcbiAgICAgICAgICBjaGVja2VkOiBjaXR5TGlzdD8uaW5jbHVkZXMoY2l0eS5jaXR5KSA/IHRydWUgOiBmYWxzZSAsXHJcbiAgICAgICAgfSkpO1xyXG4gIFxyXG4gICAgICAgIC8vIFN5bmMgdGhlIGZldGNoZWQgbG9jYXRpb25zIHdpdGggYW55IHN0b3JlZCBjaGVja2VkIHZhbHVlcyBpbiBsb2NhbFN0b3JhZ2VcclxuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZEZpbHRlcnMubG9jYXRpb24gJiYgQXJyYXkuaXNBcnJheSh0aGlzLnNlbGVjdGVkRmlsdGVycy5sb2NhdGlvbikpIHtcclxuICAgICAgICAgIHRoaXMuZmlsdGVyZWRMb2NhdGlvbnMgPSB0aGlzLmxvY2F0aW9ucy5tYXAobG9jYXRpb24gPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBtYXRjaGVkTG9jYXRpb24gPSB0aGlzLnNlbGVjdGVkRmlsdGVycy5sb2NhdGlvbi5maW5kKChsb2M6IGFueSkgPT4gbG9jLmNpdHkgPT09IGxvY2F0aW9uLmNpdHkpO1xyXG4gICAgICAgICAgICByZXR1cm4gbWF0Y2hlZExvY2F0aW9uID8geyAuLi5sb2NhdGlvbiwgY2hlY2tlZDogbWF0Y2hlZExvY2F0aW9uLmNoZWNrZWQgfSA6IGxvY2F0aW9uO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuZmlsdGVyZWRMb2NhdGlvbnMgPSB0aGlzLmxvY2F0aW9ucztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKHRoaXMuc2VhcmNoTG9jYXRpb25UZXh0KSB7XHJcbiAgICAgICAgICB0aGlzLmZpbHRlcmVkTG9jYXRpb25zID0gdGhpcy5sb2NhdGlvbnMuZmlsdGVyKChsb2NhdGlvbjphbnkpID0+IGxvY2F0aW9uLmNpdHkudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh0aGlzLnNlYXJjaExvY2F0aW9uVGV4dC50b0xvd2VyQ2FzZSgpKSlcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOiAoZXJyKSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihcIkZhaWxlZCB0byBmZXRjaCBsb2NhdGlvbnNcIiwgZXJyKTtcclxuICAgICAgfSxcclxuICAgIH0pO1xyXG4gIH1cclxuICBcclxuICBpc0FsbExvY2F0aW9uc1NlbGVjdGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuZmlsdGVyZWRMb2NhdGlvbnMuZXZlcnkobG9jYXRpb24gPT4gbG9jYXRpb24uY2hlY2tlZCk7XHJcblxyXG4gIH1cclxuICBcclxuICBzZWxlY3RlZExvY2F0aW9uc0xhYmVsKCk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBzZWxlY3RlZExvY2F0aW9ucyA9IHRoaXMubG9jYXRpb25MYWJlbCA9IHRoaXMuc2VhcmNoTG9jYXRpb25UZXh0Lmxlbmd0aCA/IHRoaXMubG9jYXRpb25zXHJcbiAgICAgIC5maWx0ZXIobG9jYXRpb24gPT4gbG9jYXRpb24uY2hlY2tlZCkubWFwKGxvY2F0aW9uID0+IGxvY2F0aW9uLmNpdHkpIDogIHRoaXMuZmlsdGVyZWRMb2NhdGlvbnNcclxuICAgICAgLmZpbHRlcihsb2NhdGlvbiA9PiBsb2NhdGlvbi5jaGVja2VkKS5tYXAobG9jYXRpb24gPT4gbG9jYXRpb24uY2l0eSk7XHJcbiAgICByZXR1cm4gc2VsZWN0ZWRMb2NhdGlvbnMubGVuZ3RoID09PSAwXHJcbiAgICAgID8gJydcclxuICAgICAgOiBzZWxlY3RlZExvY2F0aW9ucy5sZW5ndGggPT09IDFcclxuICAgICAgPyBzZWxlY3RlZExvY2F0aW9uc1swXVxyXG4gICAgICA6IGAke3NlbGVjdGVkTG9jYXRpb25zLmxlbmd0aH0gbG9jYXRpb25zYDtcclxuICB9XHJcblxyXG4gIHJlbW92ZUxvY2F0aW9uKCk6IHZvaWQge1xyXG4gICAgdGhpcy5SZXNldCgpO1xyXG4gIH1cclxuICBcclxuICBnZXRHcm91cHMoKTogdm9pZCB7ICAgIFxyXG4gICAgY29uc3QgY2l0eSA9IHRoaXMubG9jYXRpb25zXHJcbiAgICAgIC5maWx0ZXIobG9jYXRpb24gPT4gbG9jYXRpb24uY2hlY2tlZClcclxuICAgICAgLm1hcChsb2NhdGlvbiA9PiBsb2NhdGlvbi5jaXR5KTtcclxuICAgIGNvbnN0IG9iaiA9IHsgY2l0eSxjbGllbnRJZDp0aGlzLnNlbGVjdGVkRmlsdGVycy5jbGllbnQgPyB0aGlzLnNlbGVjdGVkRmlsdGVycy5jbGllbnQgOnRoaXMudXNlcnMuY2xpZW50SWQsZ3JvdXA6W10gfTtcclxuICAgIHRoaXMuYXV0aC5nZXRHcm91cHMob2JqKS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICBsZXQgY2hlY2tlZEdyb3VwID0gdGhpcy5zZWxlY3RlZEZpbHRlcnM/Lmdyb3VwPy5maWx0ZXIoKGdyb3VwOmFueSkgPT4gZ3JvdXAuY2hlY2tlZCkubWFwKChncm91cDphbnkpID0+IGdyb3VwLmdyb3VwTmFtZSk7XHJcbiAgICAgICAgY29uc3QgY29tYmluZWRHcm91cHMgPSByZXM/LmRhdGE/Lmdyb3VwRGF0YT8ubWFwKChncm91cE5hbWU6IGFueSkgPT4gKHtcclxuICAgICAgICAgIGdyb3VwTmFtZTogZ3JvdXBOYW1lLmdyb3VwTmFtZSxcclxuICAgICAgICAgIGNoZWNrZWQ6IGNoZWNrZWRHcm91cD8uaW5jbHVkZXMoZ3JvdXBOYW1lLmdyb3VwTmFtZSkgPyB0cnVlIDogZmFsc2UsXHJcbiAgICAgICAgfSkpO1xyXG4gICAgICAgIHRoaXMuZ3JvdXBzRGF0YSA9IGNvbWJpbmVkR3JvdXBzO1xyXG4gICAgICAgIGlmKHRoaXMuc2VhcmNoR3JvdXBUZXh0Lmxlbmd0aCkge1xyXG4gICAgICAgICAgdGhpcy5maWx0ZXJlZEdyb3VwcyA9IGNvbWJpbmVkR3JvdXBzLmZpbHRlcigoaXRlbTphbnkpID0+IGl0ZW0uZ3JvdXBOYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModGhpcy5zZWFyY2hHcm91cFRleHQpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmZpbHRlcmVkR3JvdXBzID0gY29tYmluZWRHcm91cHM7XHJcbiAgICAgICAgfVxyXG4gIFxyXG4gICAgICAgIC8vIEF1dG8tZmV0Y2ggc3RvcmVzIHdoZW4gZ3JvdXBzIGFyZSBzZWxlY3RlZFxyXG4gICAgICAgIGNvbnN0IHNlbGVjdGVkR3JvdXBzID0gdGhpcy5ncm91cHNEYXRhLmZpbHRlcigoZ3JvdXApID0+IGdyb3VwLmNoZWNrZWQpLm1hcCgoZ3JvdXApID0+IGdyb3VwLmdyb3VwTmFtZSk7XHJcbiAgICAgICAgaWYgKHNlbGVjdGVkR3JvdXBzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIHRoaXMuZ2V0U3RvcmUoKTsgLy8gRmV0Y2ggc3RvcmVzIGJhc2VkIG9uIHNlbGVjdGVkIGdyb3Vwc1xyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAgZXJyb3I6IChlcnIpID0+IHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKFwiRmFpbGVkIHRvIGZldGNoIGdyb3Vwc1wiLCBlcnIpO1xyXG4gICAgICB9LFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICB0b2dnbGVEcm9wZG93bih0eXBlOiAnbG9jYXRpb24nIHwgJ2dyb3VwJyB8ICdzdG9yZScpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmRyb3Bkb3duT3BlbiA9PT0gdHlwZSkge1xyXG4gICAgICAvLyBJZiB0aGUgZHJvcGRvd24gaXMgb3BlbiwgY2xvc2UgaXQgYW5kIGF2b2lkIHJlc2V0dGluZyB0aGUgc2VsZWN0ZWQgdmFsdWVzIHVubmVjZXNzYXJpbHlcclxuICAgICAgdGhpcy5kcm9wZG93bk9wZW4gPSBudWxsO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gT3BlbiB0aGUgc3BlY2lmaWMgZHJvcGRvd24gYW5kIGhhbmRsZSBkYXRhIGZldGNoaW5nIG9ubHkgaWYgbmVjZXNzYXJ5XHJcbiAgICAgIHRoaXMuZHJvcGRvd25PcGVuID0gdHlwZTtcclxuICBcclxuICAgICAgaWYgKHR5cGUgPT09ICdncm91cCcpIHtcclxuICAgICAgICAvLyBGZXRjaCBncm91cHMgb25seSBpZiB0aGVyZSBhcmUgc2VsZWN0ZWQgY2l0aWVzIGFuZCBubyBhY3RpdmUgc2VhcmNoIHRleHRcclxuICAgICAgICBjb25zdCBzZWxlY3RlZENpdGllcyA9IHRoaXMubG9jYXRpb25zXHJcbiAgICAgICAgICAuZmlsdGVyKChsb2NhdGlvbikgPT4gbG9jYXRpb24uY2hlY2tlZClcclxuICAgICAgICAgIC5tYXAoKGxvY2F0aW9uKSA9PiBsb2NhdGlvbi5jaXR5KTtcclxuICBcclxuICAgICAgICAvLyBGZXRjaCBncm91cHMgb25seSBpZiBsb2NhdGlvbnMgYXJlIHNlbGVjdGVkLCBubyBzZWFyY2ggdGV4dCBleGlzdHMsIGFuZCBkcm9wZG93biBpcyBvcGVuZWRcclxuICAgICAgaWYgKHRoaXMuZmlsdGVyZWRMb2NhdGlvbnMubGVuZ3RoID4gMCB8fCAoc2VsZWN0ZWRDaXRpZXMubGVuZ3RoID4gMCAmJiAhdGhpcy5zZWFyY2hHcm91cFRleHQudHJpbSgpKSkge1xyXG4gICAgICAgIHRoaXMuZ2V0R3JvdXBzKCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5maWx0ZXJlZEdyb3VwcyA9IFtdOyAvLyBDbGVhciBncm91cHMgaWYgbm8gbG9jYXRpb25zIGFyZSBzZWxlY3RlZFxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHR5cGUgPT09ICdzdG9yZScpIHtcclxuICAgICAgLy8gRmV0Y2ggc3RvcmVzIG9ubHkgaWYgbm90IGFscmVhZHkgZmV0Y2hlZCBhbmQgbm8gc2VhcmNoIHRleHQgaXMgYWN0aXZlXHJcbiAgICAgIGlmICgoIXRoaXMuZmlsdGVyZWRTdG9yZXMgfHwgdGhpcy5maWx0ZXJlZFN0b3Jlcy5sZW5ndGggPT09IDApICYmICF0aGlzLnNlYXJjaFN0b3JlVGV4dC50cmltKCkpIHtcclxuICAgICAgICB0aGlzLmdldFN0b3JlKCk7XHJcbiAgICAgIH0gXHJcbiAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG4gIFxyXG4gIFxyXG4gIGhhbmRsZUdyb3VwRHJvcGRvd25DbGljaygpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmRyb3Bkb3duT3BlbiA9PT0gJ2dyb3VwJykge1xyXG4gICAgICB0aGlzLnJlc2V0U2VsZWN0ZWRHcm91cHMoKTtcclxuICAgIH1cclxuICAgIHRoaXMudG9nZ2xlRHJvcGRvd24oJ2dyb3VwJyk7XHJcbiAgfVxyXG5cclxuICByZXNldFNlbGVjdGVkR3JvdXBzKCk6IHZvaWQge1xyXG4gICAgdGhpcy5maWx0ZXJlZEdyb3Vwcy5mb3JFYWNoKChncm91cCkgPT4gKGdyb3VwLmNoZWNrZWQgPSBmYWxzZSkpO1xyXG4gICAgdGhpcy5zZWFyY2hHcm91cFRleHQgPSBcIlwiO1xyXG4gIH1cclxuICBzZWxlY3RlZEdyb3Vwc0xhYmVsKCk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBzZWxlY3RlZEdyb3VwcyA9IHRoaXMuZ3JvdXBMYWJlbCA9IHRoaXMuc2VhcmNoR3JvdXBUZXh0Lmxlbmd0aCA/IHRoaXMuZ3JvdXBzRGF0YS5maWx0ZXIoKGdyb3VwKSA9PiBncm91cC5jaGVja2VkKSA6IHRoaXMuZmlsdGVyZWRHcm91cHMuZmlsdGVyKChncm91cCkgPT4gZ3JvdXAuY2hlY2tlZCk7XHJcbiAgICByZXR1cm4gc2VsZWN0ZWRHcm91cHMubGVuZ3RoID09PSAwXHJcbiAgICAgID8gXCJcIlxyXG4gICAgICA6IHNlbGVjdGVkR3JvdXBzLmxlbmd0aCA9PT0gMVxyXG4gICAgICA/IHNlbGVjdGVkR3JvdXBzWzBdLmdyb3VwTmFtZVxyXG4gICAgICA6IGAke3NlbGVjdGVkR3JvdXBzLmxlbmd0aH0gZ3JvdXBzYDtcclxuICB9XHJcbiAgcmVtb3ZlR3JvdXAoKTogdm9pZCB7XHJcbiAgICB0aGlzLlJlc2V0KCk7XHJcbiAgIFxyXG4gIH1cclxuICBcclxuXHJcbiAgaXNBbGxHcm91cHNTZWxlY3RlZCgpOiBib29sZWFuIHtcclxuICAgIFxyXG4gICAgcmV0dXJuIHRoaXMuZmlsdGVyZWRHcm91cHMubGVuZ3RoID8gdGhpcy5maWx0ZXJlZEdyb3Vwcy5ldmVyeSgoZ3JvdXApID0+IGdyb3VwLmNoZWNrZWQpIDogZmFsc2U7XHJcbiAgfVxyXG4gICAgICAgIFxyXG4gIGdldFN0b3JlKCk6IHZvaWQge1xyXG4gICAgY29uc3QgY2l0eSA9IHRoaXMubG9jYXRpb25zXHJcbiAgICAgIC5maWx0ZXIobG9jYXRpb24gPT4gbG9jYXRpb24uY2hlY2tlZClcclxuICAgICAgLm1hcChsb2NhdGlvbiA9PiBsb2NhdGlvbi5jaXR5KTtcclxuICBcclxuICAgIGNvbnN0IGdyb3VwID0gdGhpcy5ncm91cHNEYXRhXHJcbiAgICAgIC5maWx0ZXIoZ3JvdXAgPT4gZ3JvdXAuY2hlY2tlZClcclxuICAgICAgLm1hcChncm91cCA9PiBncm91cC5ncm91cE5hbWUpO1xyXG4gIFxyXG4gICAgY29uc3QgZGF0YSA9IHtcclxuICAgICAgY2l0eSxcclxuICAgICAgY2x1c3RlcnM6IGdyb3VwLFxyXG4gICAgICBjbGllbnRJZDogdGhpcy51c2Vycy5jbGllbnRJZCB8fCB0aGlzLnNlbGVjdGVkRmlsdGVycy5jbGllbnRcclxuICAgIH07XHJcbiAgXHJcbiAgICB0aGlzLmF1dGguZ2V0SGVhZGVyU3RvcmVzKGRhdGEpLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChyZXMgJiYgcmVzLmNvZGUgPT09IDIwMCkge1xyXG4gICAgICAgICAgLy8gSW5pdGlhbGl6ZSBzdG9yZXMgZnJvbSBBUEkgcmVzcG9uc2VcclxuICAgICAgICAgIHRoaXMuc3RvcmVzID0gcmVzLmRhdGEuc3RvcmVzRGF0YTtcclxuICBcclxuICAgICAgICAgIC8vIENoZWNrIGlmIHRoZXJlIGFyZSBwcmV2aW91c2x5IHNlbGVjdGVkIHN0b3Jlc1xyXG4gICAgICAgICAgY29uc3QgY2hlY2tlZFN0b3JlSWRzID0gdGhpcy5zZWxlY3RlZEZpbHRlcnM/LnN0b3Jlc1xyXG4gICAgICAgICAgICA/IHRoaXMuc2VsZWN0ZWRGaWx0ZXJzLnN0b3Jlcy5maWx0ZXIoKHN0b3JlOmFueSkgPT4gc3RvcmUuY2hlY2tlZCkubWFwKChzdG9yZTphbnkpID0+IHN0b3JlLnN0b3JlSWQpXHJcbiAgICAgICAgICAgIDogW107XHJcbiAgXHJcbiAgICAgICAgICAvLyBTeW5jIHRoZSBgY2hlY2tlZGAgc3RhdGVcclxuICAgICAgICAgIHRoaXMuc3RvcmVzLmZvckVhY2goc3RvcmUgPT4ge1xyXG4gICAgICAgICAgICBzdG9yZS5jaGVja2VkID0gY2hlY2tlZFN0b3JlSWRzLmxlbmd0aFxyXG4gICAgICAgICAgICAgID8gY2hlY2tlZFN0b3JlSWRzLmluY2x1ZGVzKHN0b3JlLnN0b3JlSWQpIC8vIFVzZSBwcmV2aW91cyBzZWxlY3Rpb25cclxuICAgICAgICAgICAgICA6IHRydWU7IC8vIERlZmF1bHQgdG8gdHJ1ZSBpZiBubyBwcmV2aW91cyBzZWxlY3Rpb25cclxuICAgICAgICAgIH0pO1xyXG4gIFxyXG4gICAgICAgICAgLy8gQXBwbHkgc2VhcmNoIGZpbHRlciBpZiBzZWFyY2ggdGV4dCBpcyBwcmVzZW50XHJcbiAgICAgICAgICBpZiAodGhpcy5zZWFyY2hTdG9yZVRleHQubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZmlsdGVyZWRTdG9yZXMgPSB0aGlzLnN0b3Jlcy5maWx0ZXIoc3RvcmUgPT5cclxuICAgICAgICAgICAgICBzdG9yZS5zdG9yZU5hbWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh0aGlzLnNlYXJjaFN0b3JlVGV4dC50b0xvd2VyQ2FzZSgpKVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5maWx0ZXJlZFN0b3JlcyA9IFsuLi50aGlzLnN0b3Jlc107XHJcbiAgICAgICAgICB9XHJcbiAgXHJcbiAgICAgICAgICAvLyBVcGRhdGUgYHNlbGVjdGVkRmlsdGVycy5zdG9yZXNgIHRvIHJlZmxlY3QgdGhlIGN1cnJlbnQgc3RhdGVcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRGaWx0ZXJzLnN0b3JlcyA9IHRoaXMuZmlsdGVyZWRTdG9yZXMubWFwKHN0b3JlID0+ICh7XHJcbiAgICAgICAgICAgIHN0b3JlSWQ6IHN0b3JlLnN0b3JlSWQsXHJcbiAgICAgICAgICAgIHN0b3JlTmFtZTogc3RvcmUuc3RvcmVOYW1lLFxyXG4gICAgICAgICAgICBjaGVja2VkOiBzdG9yZS5jaGVja2VkXHJcbiAgICAgICAgICB9KSk7XHJcbiAgXHJcbiAgICAgICAgICAvLyBTYXZlIHVwZGF0ZWQgZmlsdGVycyB0byBsb2NhbFN0b3JhZ2VcclxuICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdoZWFkZXItZmlsdGVycycsIEpTT04uc3RyaW5naWZ5KHRoaXMuc2VsZWN0ZWRGaWx0ZXJzKSk7XHJcbiAgXHJcbiAgICAgICAgICAvLyBUcmlnZ2VyIFVJIGNoYW5nZSBkZXRlY3Rpb25cclxuICAgICAgICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAvLyBIYW5kbGUgZW1wdHkgb3IgZXJyb3IgcmVzcG9uc2VcclxuICAgICAgICAgIHRoaXMuY2xlYXJTdG9yZXNTdGF0ZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAgZXJyb3I6IChlcnIpID0+IHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKFwiRmFpbGVkIHRvIGZldGNoIHN0b3Jlc1wiLCBlcnIpO1xyXG4gICAgICAgIHRoaXMuY2xlYXJTdG9yZXNTdGF0ZSgpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcbiAgXHJcbiAgLy8gQ2xlYXIgc3RvcmVzIHN0YXRlIGFuZCByZXNldCBmaWx0ZXJzXHJcbiAgcHJpdmF0ZSBjbGVhclN0b3Jlc1N0YXRlKCk6IHZvaWQge1xyXG4gICAgdGhpcy5zdG9yZXMgPSBbXTtcclxuICAgIHRoaXMuZmlsdGVyZWRTdG9yZXMgPSBbXTtcclxuICAgIHRoaXMuc2VsZWN0ZWRGaWx0ZXJzLnN0b3JlcyA9IFtdO1xyXG4gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ2hlYWRlci1maWx0ZXJzJywgSlNPTi5zdHJpbmdpZnkodGhpcy5zZWxlY3RlZEZpbHRlcnMpKTtcclxuICB9XHJcbiAgXHJcbiAgXHJcblxyXG4gIFxyXG4gIFxyXG5cclxuICByZXNldFNlbGVjdGVkU3RvcmVzKCk6IHZvaWQge1xyXG4gICAgdGhpcy5maWx0ZXJlZFN0b3Jlcy5mb3JFYWNoKChzdG9yZSkgPT4gKHN0b3JlLmNoZWNrZWQgPSBmYWxzZSkpO1xyXG4gICAgdGhpcy5zZWFyY2hTdG9yZVRleHQgPSBcIlwiO1xyXG4gIH1cclxuXHJcbiAgc2VsZWN0ZWRTdG9yZXNMYWJlbCgpOiBzdHJpbmcge1xyXG4gICAgY29uc3Qgc2VsZWN0ZWRTdG9yZXMgPSB0aGlzLnNlYXJjaFN0b3JlVGV4dC5sZW5ndGggPyB0aGlzLnN0b3Jlcy5maWx0ZXIoKHN0b3JlKSA9PiBzdG9yZS5jaGVja2VkKSA6IHRoaXMuZmlsdGVyZWRTdG9yZXMuZmlsdGVyKChzdG9yZSkgPT4gc3RvcmUuY2hlY2tlZCk7XHJcbiAgICByZXR1cm4gc2VsZWN0ZWRTdG9yZXMubGVuZ3RoID09PSAwXHJcbiAgICAgID8gXCIwIFN0b3Jlc1wiXHJcbiAgICAgIDogc2VsZWN0ZWRTdG9yZXMubGVuZ3RoID09PSAxXHJcbiAgICAgID8gc2VsZWN0ZWRTdG9yZXNbMF0uc3RvcmVOYW1lXHJcbiAgICAgIDogYCR7c2VsZWN0ZWRTdG9yZXMubGVuZ3RofSBTdG9yZXNgO1xyXG4gIH1cclxuXHJcbiAgaXNBbGxTdG9yZXNTZWxlY3RlZCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmZpbHRlcmVkU3RvcmVzLmxlbmd0aCA+IDAgJiYgdGhpcy5maWx0ZXJlZFN0b3Jlcy5ldmVyeShzdG9yZSA9PiBzdG9yZS5jaGVja2VkKTtcclxuICB9XHJcbi8vIE1ldGhvZCB0byBoYW5kbGUgZHJvcGRvd24gaXRlbSBzZWxlY3Rpb25cclxudXBkYXRlU2VsZWN0ZWRTdG9yZXMoKTogdm9pZCB7XHJcbiAgdGhpcy5maWx0ZXJlZFN0b3Jlcy5mb3JFYWNoKHN0b3JlID0+IHtcclxuICAgIGNvbnN0IGZpbHRlcmVkU3RvcmUgPSB0aGlzLnN0b3Jlcy5maW5kSW5kZXgoZlN0b3JlID0+IGZTdG9yZS5zdG9yZUlkID09PSBzdG9yZS5zdG9yZUlkKTtcclxuICAgIGlmIChmaWx0ZXJlZFN0b3JlICE9IC0xKSB7XHJcbiAgICAgIHRoaXMuc3RvcmVzW2ZpbHRlcmVkU3RvcmVdLmNoZWNrZWQgPSBzdG9yZS5jaGVja2VkOyAvLyBTeW5jIHRoZSBjaGVja2VkIHN0YXRlIHdpdGggZnVsbCBzdG9yZSBsaXN0XHJcbiAgICB9XHJcbiAgfSk7ICBcclxuICAvLyBVcGRhdGUgc2VsZWN0ZWRGaWx0ZXJzIGJhc2VkIG9uIHRoZSBjdXJyZW50IHN0b3JlIHNlbGVjdGlvblxyXG4gIHRoaXMuc2VsZWN0ZWRGaWx0ZXJzLnN0b3JlcyA9IHRoaXMuc3RvcmVzLmZpbHRlcihzdG9yZSA9PiBzdG9yZS5jaGVja2VkKTtcclxuXHJcbiAgLy8gVXBkYXRlIGxvY2FsU3RvcmFnZSB3aXRoIHRoZSBsYXRlc3Qgc2VsZWN0aW9uXHJcbiAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ2hlYWRlci1maWx0ZXJzJywgSlNPTi5zdHJpbmdpZnkodGhpcy5zZWxlY3RlZEZpbHRlcnMpKTtcclxuXHJcbiAgLy8gRW1pdCB1cGRhdGVkIGZpbHRlcnMgdmlhIHNlcnZpY2VcclxuICAvLyB0aGlzLmdzLmRhdGFSYW5nZVZhbHVlLm5leHQodGhpcy5zZWxlY3RlZEZpbHRlcnMpO1xyXG5cclxuICAvLyBUcmlnZ2VyIGNoYW5nZSBkZXRlY3Rpb24gaWYgbmVjZXNzYXJ5XHJcbiAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XHJcbn1cclxuICB0b2dnbGVTZWxlY3RBbGxMb2NhdGlvbnMoZXZlbnQ6IGFueSk6IHZvaWQge1xyXG4gICAgY29uc3QgaXNDaGVja2VkID0gZXZlbnQudGFyZ2V0LmNoZWNrZWQ7XHJcbiAgICB0aGlzLmZpbHRlcmVkTG9jYXRpb25zLmZvckVhY2goKGxvY2F0aW9uKSA9PiAobG9jYXRpb24uY2hlY2tlZCA9IGlzQ2hlY2tlZCkpO1xyXG4gICAgdGhpcy51cGRhdGVTZWxlY3RlZExvY2F0aW9ucygpO1xyXG4gIH1cclxuXHJcbiAgdG9nZ2xlU2VsZWN0QWxsU3RvcmVzKGV2ZW50OiBFdmVudCk6IHZvaWQge1xyXG4gICAgY29uc3QgY2hlY2tlZCA9IChldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkuY2hlY2tlZDtcclxuICBcclxuICAgIC8vIEFwcGx5IHRoZSBzZWxlY3Rpb24gdG8gYm90aCBmaWx0ZXJlZCBhbmQgZnVsbCBsaXN0IG9mIHN0b3Jlc1xyXG4gICAgdGhpcy5maWx0ZXJlZFN0b3Jlcy5mb3JFYWNoKHN0b3JlID0+IHN0b3JlLmNoZWNrZWQgPSBjaGVja2VkKTtcclxuICAgIHRoaXMuc3RvcmVzLmZvckVhY2goc3RvcmUgPT4ge1xyXG4gICAgICBjb25zdCBmaWx0ZXJlZFN0b3JlID0gdGhpcy5maWx0ZXJlZFN0b3Jlcy5maW5kKGZTdG9yZSA9PiBmU3RvcmUuc3RvcmVJZCA9PT0gc3RvcmUuc3RvcmVJZCk7XHJcbiAgICAgIGlmIChmaWx0ZXJlZFN0b3JlKSB7XHJcbiAgICAgICAgc3RvcmUuY2hlY2tlZCA9IGNoZWNrZWQ7IC8vIFN5bmMgdGhlIGNoZWNrZWQgc3RhdGUgd2l0aCBmdWxsIHN0b3JlIGxpc3RcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgXHJcbiAgICAvLyBVcGRhdGUgdGhlIHNlbGVjdGVkIHN0b3JlcyBhbmQgcGVyc2lzdCB0aGUgc2VsZWN0aW9uXHJcbiAgICB0aGlzLnVwZGF0ZVNlbGVjdGVkU3RvcmVzKCk7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVTZWxlY3RlZExvY2F0aW9ucygpOiB2b2lkIHtcclxuICAgIC8vIFdoZW4gbG9jYXRpb25zIGFyZSBzZWxlY3RlZCwgZmV0Y2ggdGhlIHJlbGF0ZWQgZ3JvdXBzXHJcbiAgICBjb25zdCBzZWxlY3RlZENpdGllcyA9IHRoaXMuZmlsdGVyZWRMb2NhdGlvbnNcclxuICAgICAgLmZpbHRlcigobG9jYXRpb24pID0+IGxvY2F0aW9uLmNoZWNrZWQpXHJcbiAgICAgIC5tYXAoKGxvY2F0aW9uKSA9PiBsb2NhdGlvbi5jaXR5KTtcclxuICAgIHRoaXMuZmlsdGVyZWRMb2NhdGlvbnMuZm9yRWFjaCgobG9jYXRpb246YW55KSA9PiB7XHJcbiAgICAgIGxldCBmaW5kTG9jYXRpb25JbmRleCA9IHRoaXMubG9jYXRpb25zLmZpbmRJbmRleCgobG9jOmFueSkgPT4gbG9jLmNpdHkgPT0gbG9jYXRpb24uY2l0eSk7XHJcbiAgICAgIGlmKGZpbmRMb2NhdGlvbkluZGV4ICE9IC0xKSB7XHJcbiAgICAgICAgdGhpcy5sb2NhdGlvbnNbZmluZExvY2F0aW9uSW5kZXhdLmNoZWNrZWQgPSBsb2NhdGlvbi5jaGVja2VkO1xyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gICAgaWYgKHNlbGVjdGVkQ2l0aWVzLmxlbmd0aCA+IDAgfHwgIXNlbGVjdGVkQ2l0aWVzLmxlbmd0aCkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkRmlsdGVycy5zdG9yZXMgPVtdO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkRmlsdGVycy5sb2NhdGlvbiA9IHRoaXMubG9jYXRpb25zO1xyXG4gICAgICB0aGlzLmdldEdyb3VwcygpOyAvLyBGZXRjaCBncm91cHMgYmFzZWQgb24gc2VsZWN0ZWQgY2l0aWVzXHJcbiAgICAgIC8vIElmIHRoZXJlIGFyZSBzZWxlY3RlZCBncm91cHMsIGZldGNoIHRoZSBzdG9yZXMgYmFzZWQgb24gc2VsZWN0ZWQgZ3JvdXBzXHJcbiAgICAgIHRoaXMuZ2V0U3RvcmUoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZmlsdGVyZWRHcm91cHMgPSBbXTsgLy8gQ2xlYXIgZ3JvdXBzIGlmIG5vIGxvY2F0aW9ucyBhcmUgc2VsZWN0ZWRcclxuICAgICAgdGhpcy5zZWxlY3RlZEZpbHRlcnMubG9jYXRpb24gPSBbXVxyXG4gICAgfVxyXG4gICAgdGhpcy5zZWxlY3RlZEZpbHRlcnMuZ3JvdXAgPSBbXTtcclxuICBcclxuICAgIHRoaXMuZmlsdGVyZWRTdG9yZXMgPSBbXTsgLy8gUmVzZXQgc3RvcmVzIGFzIHdlbGxcclxuICAgIHRoaXMuc2VhcmNoR3JvdXBUZXh0ID0gJyc7XHJcbiAgICB0aGlzLnNlYXJjaFN0b3JlVGV4dCA9ICcnO1xyXG4gICAgLy8gdGhpcy5PcGVuZHJvcGRvd24gPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIHRvZ2dsZVNlbGVjdEFsbEdyb3VwcyhldmVudDogYW55KTogdm9pZCB7XHJcbiAgICBjb25zdCBpc0NoZWNrZWQgPSBldmVudC50YXJnZXQuY2hlY2tlZDtcclxuICAgIHRoaXMuZmlsdGVyZWRHcm91cHMuZm9yRWFjaCgoZ3JvdXApID0+IChncm91cC5jaGVja2VkID0gaXNDaGVja2VkKSk7XHJcbiAgICB0aGlzLnVwZGF0ZVNlbGVjdGVkR3JvdXBzKCk7XHJcbiAgICAvLyBpZiAoIWlzQ2hlY2tlZCkge1xyXG4gICAgLy8gICB0aGlzLnNlbGVjdGVkRmlsdGVycy5zdG9yZXMgPVtdO1xyXG4gICAgLy8gICAgLy8gSWYgdGhlcmUgYXJlIHNlbGVjdGVkIGdyb3VwcywgZmV0Y2ggdGhlIHN0b3JlcyBiYXNlZCBvbiBzZWxlY3RlZCBncm91cHNcclxuICAgIC8vICAgIHRoaXMuZ2V0U3RvcmUoKTtcclxuICAgIC8vICB9XHJcbiAgfVxyXG5cclxuICB1cGRhdGVTZWxlY3RlZEdyb3VwcygpOiB2b2lkIHtcclxuICAgIC8vIEZldGNoIHRoZSByZWxldmFudCBzdG9yZXMgYWZ0ZXIgZ3JvdXBzIGFyZSBzZWxlY3RlZFxyXG4gICAgY29uc3Qgc2VsZWN0ZWRHcm91cHMgPSB0aGlzLmZpbHRlcmVkR3JvdXBzXHJcbiAgICAgIC5maWx0ZXIoKGdyb3VwKSA9PiBncm91cC5jaGVja2VkKVxyXG4gICAgICAubWFwKChncm91cCkgPT4gZ3JvdXAuZ3JvdXBOYW1lKTtcclxuXHJcbiAgICB0aGlzLmZpbHRlcmVkR3JvdXBzLmZvckVhY2goKGdyb3VwOmFueSkgPT4ge1xyXG4gICAgICBsZXQgZmluZEdyb3VwSW5kZXggPSB0aGlzLmdyb3Vwc0RhdGEuZmluZEluZGV4KChpdGVtOmFueSkgPT4gaXRlbS5ncm91cE5hbWUgPT0gZ3JvdXAuZ3JvdXBOYW1lKTtcclxuICAgICAgaWYoZmluZEdyb3VwSW5kZXggIT0gLTEpIHtcclxuICAgICAgICB0aGlzLmdyb3Vwc0RhdGFbZmluZEdyb3VwSW5kZXhdLmNoZWNrZWQgPSBncm91cC5jaGVja2VkO1xyXG4gICAgICB9XHJcbiAgICB9KSBcclxuICAgIGlmIChzZWxlY3RlZEdyb3Vwcy5sZW5ndGggPiAwIHx8ICFzZWxlY3RlZEdyb3Vwcy5sZW5ndGgpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZEZpbHRlcnMuc3RvcmVzID1bXTtcclxuICAgICAgLy8gSWYgdGhlcmUgYXJlIHNlbGVjdGVkIGdyb3VwcywgZmV0Y2ggdGhlIHN0b3JlcyBiYXNlZCBvbiBzZWxlY3RlZCBncm91cHNcclxuICAgICAgdGhpcy5nZXRTdG9yZSgpO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkRmlsdGVycy5ncm91cCA9IHRoaXMuZ3JvdXBzRGF0YTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIElmIG5vIGdyb3VwcyBhcmUgc2VsZWN0ZWQsIGNsZWFyIHRoZSBzdG9yZXMgbGlzdFxyXG4gICAgICB0aGlzLmZpbHRlcmVkU3RvcmVzID0gW107XHJcbiAgICAgIFxyXG4gICAgICAvLyBBbHNvLCB1cGRhdGUgbG9jYWxTdG9yYWdlIHRvIHJlZmxlY3QgdGhlIGNsZWFyZWQgc3RvcmUgc2VsZWN0aW9uXHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRGaWx0ZXJzLnN0b3JlcyA9IFtdO1xyXG4gICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnaGVhZGVyLWZpbHRlcnMnLCBKU09OLnN0cmluZ2lmeSh0aGlzLnNlbGVjdGVkRmlsdGVycykpO1xyXG4gIFxyXG4gICAgICAvLyBFbWl0IGRhdGEgdmlhIHNlcnZpY2VcclxuICAgICAgLy8gdGhpcy5ncy5kYXRhUmFuZ2VWYWx1ZS5uZXh0KHRoaXMuc2VsZWN0ZWRGaWx0ZXJzKTtcclxuICAgIH1cclxuICBcclxuICAgIC8vIENsZWFyIHRoZSBzZWFyY2ggc3RvcmUgdGV4dCB3aGVuIGdyb3VwcyBhcmUgdXBkYXRlZFxyXG4gICAgdGhpcy5zZWFyY2hTdG9yZVRleHQgPSAnJztcclxuICB9XHJcbiAgXHJcblxyXG4gIFJlc2V0KCk6IHZvaWQge1xyXG4gICAgc2V0VGltZW91dCgoKT0+e1xyXG4gICAgIC8vIENsZWFyIHNlbGVjdGVkIGdyb3Vwcywgc3RvcmVzLCBhbmQgbG9jYXRpb25zXHJcbiAgdGhpcy5maWx0ZXJlZEdyb3VwcyA9IFtdO1xyXG4gIHRoaXMuZmlsdGVyZWRTdG9yZXMgPSBbXTtcclxuICB0aGlzLmZpbHRlcmVkTG9jYXRpb25zID0gW107IC8vIFJlc2V0IGxvY2F0aW9ucyBhcyB3ZWxsXHJcblxyXG4gIC8vIENsZWFyIHNlYXJjaCBpbnB1dCBmaWVsZHNcclxuICB0aGlzLnNlYXJjaExvY2F0aW9uVGV4dCA9IFwiXCI7XHJcbiAgdGhpcy5zZWFyY2hHcm91cFRleHQgPSBcIlwiO1xyXG4gIHRoaXMuc2VhcmNoU3RvcmVUZXh0ID0gXCJcIjtcclxuIFxyXG4gIC8vIEZldGNoIGxvY2F0aW9ucywgZ3JvdXBzLCBhbmQgc3RvcmVzIGFnYWluXHJcbiAgdGhpcy5nZXRMb2NhdGlvbnMoKTtcclxuICB0aGlzLmdldFN0b3JlKCk7XHJcbiAgdGhpcy5nZXRHcm91cHMoKTtcclxuICAvLyBSZXNldCB0aGUgZmlsdGVycyBpbiBzZWxlY3RlZEZpbHRlcnNcclxuICB0aGlzLnNlbGVjdGVkRmlsdGVycyA9IHtcclxuICAgIC4uLnRoaXMuc2VsZWN0ZWRGaWx0ZXJzLFxyXG4gICAgc3RvcmVzOiBbXSwgIC8vIENsZWFyIHN0b3JlcyBzZWxlY3Rpb25cclxuICAgIGdyb3VwOiBbXSwgICAvLyBDbGVhciBncm91cHMgc2VsZWN0aW9uXHJcbiAgICBsb2NhdGlvbjogW10gLy8gQ2xlYXIgbG9jYXRpb25zIHNlbGVjdGlvblxyXG4gIH07XHJcblxyXG4gIC8vIC8vIE9uY2Ugc3RvcmVzIGFyZSBmZXRjaGVkLCBtYXJrIGFsbCBhcyBjaGVja2VkXHJcbiAgLy8gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgLy8gICB0aGlzLmZpbHRlcmVkU3RvcmVzID0gdGhpcy5zdG9yZXMubWFwKHN0b3JlID0+ICh7XHJcbiAgLy8gICAgIC4uLnN0b3JlLFxyXG4gIC8vICAgICBjaGVja2VkOiB0cnVlICAvLyBNYXJrIGFsbCBzdG9yZXMgYXMgY2hlY2tlZFxyXG4gIC8vICAgfSkpO1xyXG5cclxuICAvLyAgIC8vIFN5bmMgc2VsZWN0ZWRGaWx0ZXJzIHdpdGggdGhlIHVwZGF0ZWQgc3RvcmUgc3RhdGVcclxuICAvLyAgIHRoaXMuc2VsZWN0ZWRGaWx0ZXJzLnN0b3JlcyA9IHRoaXMuZmlsdGVyZWRTdG9yZXMubWFwKHN0b3JlID0+ICh7XHJcbiAgLy8gICAgIC4uLnN0b3JlLFxyXG4gIC8vICAgICBjaGVja2VkOiB0cnVlXHJcbiAgLy8gICB9KSk7XHJcblxyXG4gICAgLy8gVXBkYXRlIGxvY2FsU3RvcmFnZSB3aXRoIHRoZSBsYXRlc3Qgc2VsZWN0ZWRGaWx0ZXJzXHJcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnaGVhZGVyLWZpbHRlcnMnLCBKU09OLnN0cmluZ2lmeSh0aGlzLnNlbGVjdGVkRmlsdGVycykpO1xyXG4gd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpXHJcbiAgICAvLyBFbWl0IHRoZSByZXNldCBmaWx0ZXJzIHRvIHVwZGF0ZSBvdGhlciBjb21wb25lbnRzIGlmIG5lZWRlZFxyXG4gICAgLy8gdGhpcy5ncy5kYXRhUmFuZ2VWYWx1ZS5uZXh0KHRoaXMuc2VsZWN0ZWRGaWx0ZXJzKTtcclxuICAgIC8vIFRyaWdnZXIgY2hhbmdlIGRldGVjdGlvblxyXG4gICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgIC8vIEFkZGluZyBhIHNsaWdodCBkZWxheSB0byBlbnN1cmUgc3RvcmVzIGFyZSBmZXRjaGVkIGZpcnN0XHJcbiBcclxuICBcclxuICAgIC8vIENsb3NlIGRyb3Bkb3duIGFmdGVyIHJlc2V0IGlmIG5lY2Vzc2FyeVxyXG4gICAgdGhpcy5PcGVuZHJvcGRvd24gPSBmYWxzZTtcclxuICB9LDEwMClcclxuICB9XHJcbiAgXHJcbiAgXHJcbiAgXHJcbiAgQXBwbHkoKTogdm9pZCB7XHJcbiAgICAvLyBDbG9zZSB0aGUgZHJvcGRvd25cclxuICAgIHRoaXMuT3BlbmRyb3Bkb3duID0gZmFsc2U7XHJcbiAgXHJcbiAgICAvLyBGZXRjaCBleGlzdGluZyBmaWx0ZXJzIGZyb20gbG9jYWxTdG9yYWdlXHJcbiAgICBjb25zdCBoZWFkZXJGaWx0ZXJzOiBhbnkgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwiaGVhZGVyLWZpbHRlcnNcIikgfHwgXCJ7fVwiKTtcclxuICAgIHRoaXMuc2VsZWN0ZWRGaWx0ZXJzLnN0b3JlID0gIG51bGxcclxuICBcclxuICAgIC8vIEVuc3VyZSBjdXJyZW50IHNlbGVjdGlvbnMgYXJlIHJlZmxlY3RlZFxyXG4gICAgdGhpcy5zZWxlY3RlZEZpbHRlcnMubG9jYXRpb24gPSB0aGlzLmxvY2F0aW9ucztcclxuICAgIHRoaXMuc2VsZWN0ZWRGaWx0ZXJzLmdyb3VwID0gdGhpcy5ncm91cHNEYXRhO1xyXG4gICAgdGhpcy5zZWxlY3RlZEZpbHRlcnMuc3RvcmVzID0gaGVhZGVyRmlsdGVycy5zdG9yZXMgPyBoZWFkZXJGaWx0ZXJzLnN0b3JlcyA6IHRoaXMuc3RvcmVzO1xyXG4gIFxyXG4gIFxyXG4gICAgLy8gU3RvcmUgdXBkYXRlZCBmaWx0ZXJzIGJhY2sgaW4gbG9jYWxTdG9yYWdlXHJcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShcImhlYWRlci1maWx0ZXJzXCIsIEpTT04uc3RyaW5naWZ5KHRoaXMuc2VsZWN0ZWRGaWx0ZXJzKSk7XHJcbiAgICAvLyB0aGlzLmdzLmRhdGFSYW5nZVZhbHVlLm5leHQodGhpcy5zZWxlY3RlZEZpbHRlcnMpO1xyXG4gICAgd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpXHJcbiAgICAvLyBFbWl0IHRoZSB1cGRhdGVkIGZpbHRlcnMgdmlhIHRoZSBzZXJ2aWNlXHJcbiAgICAvLyB0aGlzLmdzLmRhdGFSYW5nZVZhbHVlLm5leHQodGhpcy5zZWxlY3RlZEZpbHRlcnMpO1xyXG4gICAgLy8gVHJpZ2dlciByZWZyZXNoIGlmIG5lY2Vzc2FyeVxyXG4gICAgLy8gdGhpcy5ncy5tYW5hZ2VSZWZyZXNoVHJpZ2dlci5uZXh0KHRydWUpO1xyXG4gICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG4gIFxyXG4gIGZpbHRlckxvY2F0aW9ucygpOiB2b2lkIHsgICAgXHJcbiAgICBjb25zdCBzZWFyY2hUZXh0ID0gdGhpcy5zZWFyY2hMb2NhdGlvblRleHQudG9Mb3dlckNhc2UoKTtcclxuICAgIFxyXG4gICAgaWYgKHNlYXJjaFRleHQpIHtcclxuICAgICAgLy8gUHJlc2VydmUgdGhlIGNoZWNrZWQgc3RhdGUgZHVyaW5nIGZpbHRlcmluZ1xyXG4gICAgICB0aGlzLmZpbHRlcmVkTG9jYXRpb25zID0gdGhpcy5sb2NhdGlvbnNcclxuICAgICAgICAubWFwKGxvY2F0aW9uID0+ICh7XHJcbiAgICAgICAgICAuLi5sb2NhdGlvbixcclxuICAgICAgICAgIGNoZWNrZWQ6IHRoaXMuZmlsdGVyZWRMb2NhdGlvbnMuZmluZChsID0+IGwuY2l0eSA9PT0gbG9jYXRpb24uY2l0eSk/LmNoZWNrZWQgfHwgZmFsc2VcclxuICAgICAgICB9KSlcclxuICAgICAgICAuZmlsdGVyKGxvY2F0aW9uID0+XHJcbiAgICAgICAgICBsb2NhdGlvbj8uY2l0eT8udG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhzZWFyY2hUZXh0KVxyXG4gICAgICAgICk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBSZXN0b3JlIHRoZSBvcmlnaW5hbCBjaGVja2VkIHN0YXRlIHdoZW4gc2VhcmNoIHRleHQgaXMgY2xlYXJlZFxyXG4gICAgICB0aGlzLmZpbHRlcmVkTG9jYXRpb25zID0gdGhpcy5sb2NhdGlvbnMubWFwKGxvY2F0aW9uID0+ICh7XHJcbiAgICAgICAgLi4ubG9jYXRpb24sXHJcbiAgICAgICAgY2hlY2tlZDogdGhpcy5zZWxlY3RlZEZpbHRlcnMubG9jYXRpb24uZmluZCgobDphbnkpID0+IGwuY2l0eSA9PT0gbG9jYXRpb24uY2l0eSk/LmNoZWNrZWQgfHwgZmFsc2VcclxuICAgICAgfSkpO1xyXG4gICAgfVxyXG4gIH1cclxuICBcclxuXHJcbiAgZmlsdGVyR3JvdXBzKCk6IHZvaWQgeyAgXHJcbiAgICBjb25zdCBzZWFyY2hUZXh0ID0gdGhpcy5zZWFyY2hHcm91cFRleHQudG9Mb3dlckNhc2UoKTtcclxuICAgIFxyXG4gICAgaWYgKHNlYXJjaFRleHQpIHtcclxuICAgICAgLy8gUHJlc2VydmUgdGhlIGNoZWNrZWQgc3RhdGUgZHVyaW5nIGZpbHRlcmluZ1xyXG4gICAgICB0aGlzLmZpbHRlcmVkR3JvdXBzID0gdGhpcy5ncm91cHNEYXRhXHJcbiAgICAgICAgLm1hcChncm91cCA9PiAoe1xyXG4gICAgICAgICAgLi4uZ3JvdXAsXHJcbiAgICAgICAgICBjaGVja2VkOiB0aGlzLmZpbHRlcmVkR3JvdXBzLmZpbmQoZyA9PiBnLmdyb3VwTmFtZSA9PT0gZ3JvdXAuZ3JvdXBOYW1lKT8uY2hlY2tlZCB8fCBmYWxzZVxyXG4gICAgICAgIH0pKVxyXG4gICAgICAgIC5maWx0ZXIoZ3JvdXAgPT5cclxuICAgICAgICAgIGdyb3VwPy5ncm91cE5hbWU/LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoc2VhcmNoVGV4dClcclxuICAgICAgICApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gUmVzdG9yZSB0aGUgb3JpZ2luYWwgY2hlY2tlZCBzdGF0ZSB3aGVuIHNlYXJjaCB0ZXh0IGlzIGNsZWFyZWRcclxuICAgICAgdGhpcy5maWx0ZXJlZEdyb3VwcyA9IHRoaXMuZ3JvdXBzRGF0YS5tYXAoZ3JvdXAgPT4gKHtcclxuICAgICAgICAuLi5ncm91cCxcclxuICAgICAgICBjaGVja2VkOiB0aGlzLnNlbGVjdGVkRmlsdGVycy5ncm91cC5maW5kKChnOmFueSkgPT4gZy5ncm91cE5hbWUgPT09IGdyb3VwLmdyb3VwTmFtZSk/LmNoZWNrZWQgfHwgZmFsc2VcclxuICAgICAgfSkpO1xyXG4gICAgfVxyXG4gIH1cclxuICBcclxuICBcclxuICBmaWx0ZXJTdG9yZXMoKTogdm9pZCB7XHJcbiAgICBjb25zdCBzZWFyY2hUZXh0ID0gdGhpcy5zZWFyY2hTdG9yZVRleHQudG9Mb3dlckNhc2UoKTtcclxuICAgIC8vIFByZXNlcnZlIGNoZWNrZWQgc3RhdGVzIGR1cmluZyBmaWx0ZXJpbmdcclxuICAgIGlmIChzZWFyY2hUZXh0KSB7XHJcbiAgICAgIC8vIEZpbHRlciBiYXNlZCBvbiBzZWFyY2ggdGV4dCB3aGlsZSBwcmVzZXJ2aW5nIGNoZWNrZWQgc3RhdGVcclxuICAgICAgdGhpcy5maWx0ZXJlZFN0b3JlcyA9IHRoaXMuc3RvcmVzXHJcbiAgICAgICAgLm1hcChzdG9yZSA9PiAoe1xyXG4gICAgICAgICAgLi4uc3RvcmUsXHJcbiAgICAgICAgICAvLyBDaGVjayBpZiB0aGUgc3RvcmUgaXMgYWxyZWFkeSBjaGVja2VkIGluIGZpbHRlcmVkU3RvcmVzLCBmYWxsYmFjayB0byBvcmlnaW5hbCBzdG9yZXMnIGNoZWNrZWQgc3RhdGVcclxuICAgICAgICAgIGNoZWNrZWQ6IHRoaXMuc2VsZWN0ZWRGaWx0ZXJzLnN0b3Jlcy5maW5kKChzOiBhbnkpID0+IHMuc3RvcmVJZCA9PT0gc3RvcmUuc3RvcmVJZCk/LmNoZWNrZWQgfHwgc3RvcmUuY2hlY2tlZCB8fCBmYWxzZVxyXG4gICAgICAgIH0pKVxyXG4gICAgICAgIC5maWx0ZXIoc3RvcmUgPT4gc3RvcmUuc3RvcmVOYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoc2VhcmNoVGV4dCkpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gV2hlbiB0aGUgc2VhcmNoIHRleHQgaXMgY2xlYXJlZCwgcmVzdG9yZSB0aGUgb3JpZ2luYWwgbGlzdCB3aXRoIHByZXNlcnZlZCBjaGVja2VkIHN0YXRlc1xyXG4gICAgICB0aGlzLmZpbHRlcmVkU3RvcmVzID0gdGhpcy5zdG9yZXMubWFwKHN0b3JlID0+ICh7XHJcbiAgICAgICAgLi4uc3RvcmUsXHJcbiAgICAgICAgLy8gUHJlc2VydmUgdGhlIGNoZWNrZWQgc3RhdGUgYmFzZWQgb24gdGhlIHNlbGVjdGVkIGZpbHRlcnNcclxuICAgICAgICBjaGVja2VkOiB0aGlzLnNlbGVjdGVkRmlsdGVycy5zdG9yZXMuZmluZCgoczogYW55KSA9PiBzLnN0b3JlSWQgPT09IHN0b3JlLnN0b3JlSWQpPy5jaGVja2VkIHx8IHN0b3JlLmNoZWNrZWQgfHwgZmFsc2VcclxuICAgICAgfSkpO1xyXG4gICAgfVxyXG4gIH1cclxuICBcclxuICBcclxuICAgXHJcbiAgY2xvc2VEcm9wZG93bigpOiB2b2lkIHtcclxuICAgIHRoaXMuZHJvcGRvd25PcGVuID0gbnVsbDtcclxuICB9XHJcblxyXG4gIEBIb3N0TGlzdGVuZXIoXCJkb2N1bWVudDpjbGlja1wiLCBbXCIkZXZlbnRcIl0pXHJcbiAgY2xpY2tPdXRzaWRlKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XHJcbiAgICBjb25zdCBjbGlja2VkSW5zaWRlID0gKGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudCkuY2xvc2VzdChcclxuICAgICAgXCIuZHJvcGRvd24tY29udGFpbmVyXCJcclxuICAgICk7XHJcbiAgICBjb25zdCBjbGlja2Vkb3V0U2lkZSA9IChldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQpLmNsb3Nlc3QoXHJcbiAgICAgIFwiLmRyb3Bkb3duMVwiXHJcbiAgICApO1xyXG4gICAgaWYgKCFjbGlja2VkSW5zaWRlKSB7XHJcbiAgICAgIHRoaXMuY2xvc2VEcm9wZG93bigpO1xyXG4gICAgfVxyXG4gICAgaWYoIWNsaWNrZWRvdXRTaWRlKSB7XHJcbiAgICAgIHRoaXMuY2xvc2VEcm9wZG93bjEoKTtcclxuICAgIH1cclxuXHJcbiAgfVxyXG59XHJcbmludGVyZmFjZSBDaXR5IHtcclxuICBjaXR5OiBzdHJpbmc7XHJcbn1cclxuXHJcbmludGVyZmFjZSBMb2NhdGlvbiB7XHJcbiAgY2l0eTogQ2l0eTtcclxuICBjaGVja2VkOiBib29sZWFuO1xyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJtZS0zXCI+XHJcbiAgICA8bGFiZWwgKm5nSWY9XCJzZWxlY3RlZExvY2F0aW9uc0xhYmVsKClcIiBjbGFzcz1cImJhZGdlIGJhZGdlLWxpZ2h0LWRlZmF1bHQgbXgtMlwiPnt7c2VsZWN0ZWRMb2NhdGlvbnNMYWJlbCgpfX0gXHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJyZW1vdmVMb2NhdGlvbigpXCI+PHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxMlwiIGhlaWdodD1cIjEyXCIgdmlld0JveD1cIjAgMCAxMiAxMlwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgPHBhdGggZD1cIk05IDNMMyA5TTMgM0w5IDlcIiBzdHJva2U9XCIjNjY3MDg1XCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxyXG4gICAgICAgIDwvc3ZnPjwvc3Bhbj5cclxuICAgIDwvbGFiZWw+XHJcbiAgICA8bGFiZWwgKm5nSWY9XCJzZWxlY3RlZEdyb3Vwc0xhYmVsKClcIiAgY2xhc3M9XCJiYWRnZSBiYWRnZS1saWdodC1kZWZhdWx0IG14LTJcIj57e3NlbGVjdGVkR3JvdXBzTGFiZWwoKX19IFxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwicmVtb3ZlR3JvdXAoKVwiPjxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMTJcIiBoZWlnaHQ9XCIxMlwiIHZpZXdCb3g9XCIwIDAgMTIgMTJcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgIDxwYXRoIGQ9XCJNOSAzTDMgOU0zIDNMOSA5XCIgc3Ryb2tlPVwiIzY2NzA4NVwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cclxuICAgICAgICA8L3N2Zz48L3NwYW4+XHJcbiAgICA8L2xhYmVsPlxyXG4gICAgPGxhYmVsICBjbGFzcz1cImJhZGdlIGJhZGdlLWxpZ2h0LWRlZmF1bHRcIj57e3NlbGVjdGVkU3RvcmVzTGFiZWwoKX19PC9sYWJlbD5cclxuPC9kaXY+XHJcblxyXG5cclxuPGRpdiBjbGFzcz1cIndyYXBwZXIgbWUtM1wiICpuZ0lmPVwiKGdzLnVzZXJBY2Nlc3MgfCBhc3luYyk/LnVzZXJUeXBlID09PSAndGFuZ28nXCI+XHJcbjxsaWItc2VsZWN0IFtpdGVtc109XCJjbGllbnRMaXN0XCIgW211bHRpXT1cImZhbHNlXCIgW3NlYXJjaEZpZWxkXT1cIidjbGllbnROYW1lJ1wiIFtkaXNhYmxlZF09XCJmYWxzZVwiIFtpZEZpZWxkXT1cIidjbGllbnRJZCdcIlxyXG4oc2VsZWN0ZWQpPVwib25DbGllbnRTZWxlY3QoJGV2ZW50KVwiIFtzZWxlY3RlZFZhbHVlc109XCJbc2VsZWN0ZWRDbGllbnRdXCI+PC9saWItc2VsZWN0PlxyXG48L2Rpdj5cclxuPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgcG9zaXRpb24tcmVsYXRpdmUgbXktMVwiPlxyXG4gICAgPHNwYW4gY2xhc3M9XCJzdmctaWNvbiBzdmctaWNvbi0xIHBvc2l0aW9uLWFic29sdXRlIG1zLTNcIj5cclxuICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgIGQ9XCJNMTMuMzMzMyAxLjY2NjYzVjQuOTk5OTZNNi42NjY2NyAxLjY2NjYzVjQuOTk5OTZNMi41IDguMzMzMjlIMTcuNU00LjE2NjY3IDMuMzMzMjlIMTUuODMzM0MxNi43NTM4IDMuMzMzMjkgMTcuNSA0LjA3OTQ4IDE3LjUgNC45OTk5NlYxNi42NjY2QzE3LjUgMTcuNTg3MSAxNi43NTM4IDE4LjMzMzMgMTUuODMzMyAxOC4zMzMzSDQuMTY2NjdDMy4yNDYxOSAxOC4zMzMzIDIuNSAxNy41ODcxIDIuNSAxNi42NjY2VjQuOTk5OTZDMi41IDQuMDc5NDggMy4yNDYxOSAzLjMzMzI5IDQuMTY2NjcgMy4zMzMyOVpcIlxyXG4gICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzM0NDA1NFwiIHN0cm9rZS13aWR0aD1cIjEuNjdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgIDwvc3ZnPlxyXG4gICAgPC9zcGFuPlxyXG4gICAgPGlucHV0IGNsYXNzPVwiZngtZGF0ZS1yYW5nZSBmb3JtLWNvbnRyb2wgcHMtMTRcIiBzdHlsZT1cIm1pbi13aWR0aDogMjYwcHggIWltcG9ydGFudDtcIiB0eXBlPVwidGV4dFwiIG1hdElucHV0XHJcbiAgICAgICAgbmd4RGF0ZXJhbmdlcGlja2VyTWQgW2Ryb3BzXT1cIidkb3duJ1wiIFtvcGVuc109XCIncmlnaHQnXCIgW3Jhbmdlc109XCJyYW5nZXNcIiBbc2hvd0N1c3RvbVJhbmdlTGFiZWxdPVwidHJ1ZVwiIFthdXRvQXBwbHldPVwidHJ1ZVwiXHJcbiAgICAgICAgW2Fsd2F5c1Nob3dDYWxlbmRhcnNdPVwiZmFsc2VcIiBba2VlcENhbGVuZGFyT3BlbmluZ1dpdGhSYW5nZV09XCJ0cnVlXCIgW3Nob3dDYW5jZWxdPVwidHJ1ZVwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiXHJcbiAgICAgICAgWyhuZ01vZGVsKV09XCJzZWxlY3RlZERhdGVSYW5nZVwiIChzdGFydERhdGVDaGFuZ2VkKT1cIm9uU3RhcnREYXRlQ2hhbmdlKCRldmVudClcIiBbaXNDdXN0b21EYXRlXT1cImlzQ3VzdG9tRGF0ZVwiXHJcbiAgICAgICAgW2xvY2FsZV09XCJ7IGZvcm1hdDogJ0RELU1NLVlZWVknLCBmaXJzdERheTogMSwgbW9udGhOYW1lczogWydKYW51YXJ5JywgJ0ZlYnJ1YXJ5JywgJ01hcmNoJywgJ0FwcmlsJywgJ01heScsICdKdW5lJywgJ0p1bHknLCAnQXVndXN0JywgJ1NlcHRlbWJlcicsICdPY3RvYmVyJywgJ05vdmVtYmVyJywgJ0RlY2VtYmVyJ10gfVwiXHJcbiAgICAgICAgKGRhdGVzVXBkYXRlZCk9XCJkYXRlY2hhbmdlKCRldmVudClcIiBuYW1lPVwiZGF0ZXJhbmdlXCIgW3JlYWRvbmx5XT1cInRydWVcIiAvPlxyXG48L2Rpdj5cclxuPGRpdiBjbGFzcz1cInBvc2l0aW9uLXJlbGF0aXZlXCI+XHJcbiAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwib3BlbmRyb3Bkb3duKCRldmVudClcIiAgY2xhc3M9XCJidG4gYnRuLWRlZmF1bHQgbXgtMiByb3VuZGVkLTMgdGV4dC1ub3dyYXAgYm9yZGVyLXZhbFwiPlxyXG4gICAgICAgIDwhLS0gPHNwYW4gY2xhc3M9XCJtZS0yXCI+RmlsdGVyPC9zcGFuPiAtLT5cclxuICAgICAgICA8c3ZnIGNsYXNzPVwicGwtM1wiIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICAgICAgPHBhdGggZD1cIk01IDEwSDE1TTIuNSA1SDE3LjVNNy41IDE1SDEyLjVcIiBzdHJva2U9XCIjMzQ0MDU0XCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgIDwvc3ZnPlxyXG4gICAgPC9idXR0b24+XHJcblxyXG4gICAgPGRpdiAqbmdJZj1cIk9wZW5kcm9wZG93blwiIGNsYXNzPVwiY2FyZCBwLTUgZHJvcGRvd24xIHBvc2l0aW9uLWFic29sdXRlIHotMSBlbmQtMFwiIHN0eWxlPVwiei1pbmRleDogMSAhaW1wb3J0YW50O1wiIChjbGlja091dHNpZGUpPVwiY2xvc2VEcm9wZG93bjEoKVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJkcm9wZG93bi10aXRsZSBkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gbWItMlwiPkZpbHRlciBPcHRpb25zXHJcbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLW91dGxpbmUgdy0yNSBtcy0zIGJ0bi1yZXNpemVcIiAoY2xpY2spPVwiUmVzZXQoKVwiPiBSZXNldCA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSB3LTI1ICBidG4tcmVzaXplXCIgKGNsaWNrKT1cIkFwcGx5KClcIj5BcHBseTwvYnV0dG9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICA8IS0tIExvY2F0aW9uIERyb3Bkb3duIC0tPlxyXG48ZGl2IGNsYXNzPVwiZHJvcGRvd24tY29udGFpbmVyXCIgKGNsaWNrT3V0c2lkZSk9XCJjbG9zZURyb3Bkb3duKClcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJkcm9wZG93bi1oZWFkZXJcIiAoY2xpY2spPVwidG9nZ2xlRHJvcGRvd24oJ2xvY2F0aW9uJylcIj5cclxuICAgICAgICA8aW5wdXQgXHJcbiAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCIgXHJcbiAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIGRyb3Bkb3duLWlucHV0IGN1cnNvci1wb2ludGVyXCIgXHJcbiAgICAgICAgICAgIFt2YWx1ZV09XCJzZWxlY3RlZExvY2F0aW9uc0xhYmVsKClcIlxyXG4gICAgICAgICAgICByZWFkb25seVxyXG4gICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlbGVjdCBsb2NhdGlvbnMuLi5cIlxyXG4gICAgICAgIC8+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJkcm9wZG93bi1tZW51IGN1c3RvbS1kcm9wZG93bi1tZW51XCIgKm5nSWY9XCJkcm9wZG93bk9wZW4gPT09ICdsb2NhdGlvbidcIj5cclxuICAgICAgICA8aW5wdXQgXHJcbiAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCIgXHJcbiAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIG1iLTIgZHJvcGRvd24tc2VhcmNoXCIgXHJcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VhcmNoIGxvY2F0aW9ucy4uLlwiIFxyXG4gICAgICAgICAgICBbKG5nTW9kZWwpXT1cInNlYXJjaExvY2F0aW9uVGV4dFwiIFxyXG4gICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJmaWx0ZXJMb2NhdGlvbnMoKVwiIFxyXG4gICAgICAgIC8+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY2hlY2sgbWItMiBkcm9wZG93bi1pdGVtIGN1c3RvbS1kcm9wZG93bi1pdGVtXCI+XHJcbiAgICAgICAgICAgIDxpbnB1dCBcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dCBjdXJzb3ItcG9pbnRlclwiIFxyXG4gICAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCIgXHJcbiAgICAgICAgICAgICAgICBpZD1cInNlbGVjdEFsbExvY2F0aW9uc1wiIFxyXG4gICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwiaXNBbGxMb2NhdGlvbnNTZWxlY3RlZCgpXCIgXHJcbiAgICAgICAgICAgICAgICAoY2hhbmdlKT1cInRvZ2dsZVNlbGVjdEFsbExvY2F0aW9ucygkZXZlbnQpXCIgXHJcbiAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tY2hlY2stbGFiZWxcIiBmb3I9XCJzZWxlY3RBbGxMb2NhdGlvbnNcIj5cclxuICAgICAgICAgICAgICAgIFNlbGVjdCBBbGwgTG9jYXRpb25zXHJcbiAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBcclxuICAgICAgICAgICAgY2xhc3M9XCJkcm9wZG93bi1pdGVtIGZvcm0tY2hlY2sgY3VzdG9tLWRyb3Bkb3duLWl0ZW1cIiBcclxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IGxvY2F0aW9uIG9mIGZpbHRlcmVkTG9jYXRpb25zXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICAgIDxpbnB1dCBcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dCBjdXJzb3ItcG9pbnRlclwiIFxyXG4gICAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCIgXHJcbiAgICAgICAgICAgICAgICBbaWRdPVwibG9jYXRpb24uY2l0eVwiIFxyXG4gICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJsb2NhdGlvbi5jaGVja2VkXCJcclxuICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwidXBkYXRlU2VsZWN0ZWRMb2NhdGlvbnMoKVwiIFxyXG4gICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsXCIgW2Zvcl09XCJsb2NhdGlvbi5jaXR5XCI+XHJcbiAgICAgICAgICAgICAgICB7eyBsb2NhdGlvbi5jaXR5IH19XHJcbiAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuPC9kaXY+XHJcblxyXG48IS0tIEdyb3VwIERyb3Bkb3duIC0tPlxyXG48ZGl2IGNsYXNzPVwiZHJvcGRvd24tY29udGFpbmVyIG10LTNcIiAoY2xpY2tPdXRzaWRlKT1cImNsb3NlRHJvcGRvd24oKVwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImRyb3Bkb3duLWhlYWRlclwiIChjbGljayk9XCJ0b2dnbGVEcm9wZG93bignZ3JvdXAnKVwiPlxyXG4gICAgICAgIDxpbnB1dCBcclxuICAgICAgICAgICAgdHlwZT1cInRleHRcIiBcclxuICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZHJvcGRvd24taW5wdXQgY3Vyc29yLXBvaW50ZXJcIiBcclxuICAgICAgICAgICAgW3ZhbHVlXT1cInNlbGVjdGVkR3JvdXBzTGFiZWwoKVwiIHJlYWRvbmx5XHJcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VsZWN0IGNsdXN0ZXJzLi5cIlxyXG4gICAgICAgIC8+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJkcm9wZG93bi1tZW51IGN1c3RvbS1kcm9wZG93bi1tZW51XCIgKm5nSWY9XCJkcm9wZG93bk9wZW4gPT09ICdncm91cCdcIj5cclxuICAgICAgICA8aW5wdXQgXHJcbiAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCIgXHJcbiAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIG1iLTIgZHJvcGRvd24tc2VhcmNoXCIgXHJcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VhcmNoIGNsdXN0ZXJzLi4uXCIgXHJcbiAgICAgICAgICAgIFsobmdNb2RlbCldPVwic2VhcmNoR3JvdXBUZXh0XCIgXHJcbiAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImZpbHRlckdyb3VwcygpXCIgXHJcbiAgICAgICAgLz5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jaGVjayBtYi0yIGRyb3Bkb3duLWl0ZW0gY3VzdG9tLWRyb3Bkb3duLWl0ZW1cIj5cclxuICAgICAgICAgICAgPGlucHV0IFxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0IGN1cnNvci1wb2ludGVyXCIgXHJcbiAgICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIiBcclxuICAgICAgICAgICAgICAgIGlkPVwic2VsZWN0QWxsR3JvdXBzXCIgXHJcbiAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJpc0FsbEdyb3Vwc1NlbGVjdGVkKClcIiBcclxuICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwidG9nZ2xlU2VsZWN0QWxsR3JvdXBzKCRldmVudClcIiBcclxuICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1jaGVjay1sYWJlbFwiIGZvcj1cInNlbGVjdEFsbEdyb3Vwc1wiPlxyXG4gICAgICAgICAgICAgICAgU2VsZWN0IEFsbFxyXG4gICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgXHJcbiAgICAgICAgICAgIGNsYXNzPVwiZHJvcGRvd24taXRlbSBmb3JtLWNoZWNrIGN1c3RvbS1kcm9wZG93bi1pdGVtXCIgXHJcbiAgICAgICAgICAgICpuZ0Zvcj1cImxldCBncm91cCBvZiBmaWx0ZXJlZEdyb3Vwc1wiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgICA8aW5wdXQgXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY2hlY2staW5wdXQgY3Vyc29yLXBvaW50ZXJcIiBcclxuICAgICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiIFxyXG4gICAgICAgICAgICAgICAgW2lkXT1cImdyb3VwLmdyb3VwTmFtZVwiXHJcbiAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImdyb3VwLmNoZWNrZWRcIlxyXG4gICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJ1cGRhdGVTZWxlY3RlZEdyb3VwcygpXCIgXHJcbiAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tY2hlY2stbGFiZWxcIiBbZm9yXT1cImdyb3VwLmdyb3VwTmFtZVwiPlxyXG4gICAgICAgICAgICAgICAge3sgZ3JvdXAuZ3JvdXBOYW1lIH19XHJcbiAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuPC9kaXY+XHJcblxyXG5cclxuPCEtLSBTdG9yZSBEcm9wZG93biAtLT5cclxuPGRpdiBjbGFzcz1cImRyb3Bkb3duLWNvbnRhaW5lciBtdC0zXCIgKGNsaWNrT3V0c2lkZSk9XCJjbG9zZURyb3Bkb3duKClcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJkcm9wZG93bi1oZWFkZXJcIiAoY2xpY2spPVwidG9nZ2xlRHJvcGRvd24oJ3N0b3JlJylcIj5cclxuICAgICAgICA8aW5wdXQgXHJcbiAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCIgXHJcbiAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIGRyb3Bkb3duLWlucHV0IGN1cnNvci1wb2ludGVyXCJcclxuICAgICAgICAgICAgW3ZhbHVlXT1cInNlbGVjdGVkU3RvcmVzTGFiZWwoKVwiXHJcbiAgICAgICAgICAgIHJlYWRvbmx5XHJcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VsZWN0IHN0b3Jlcy4uLlwiXHJcbiAgICAgICAgLz5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImRyb3Bkb3duLW1lbnUgY3VzdG9tLWRyb3Bkb3duLW1lbnVcIiAqbmdJZj1cImRyb3Bkb3duT3BlbiA9PT0gJ3N0b3JlJ1wiPlxyXG4gICAgICAgIDxpbnB1dCBcclxuICAgICAgICAgICAgdHlwZT1cInRleHRcIiBcclxuICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2wgbWItMiBkcm9wZG93bi1zZWFyY2ggXCIgXHJcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VhcmNoIHN0b3Jlcy4uLlwiIFxyXG4gICAgICAgICAgICBbKG5nTW9kZWwpXT1cInNlYXJjaFN0b3JlVGV4dFwiIFxyXG4gICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJmaWx0ZXJTdG9yZXMoKVwiIFxyXG4gICAgICAgIC8+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY2hlY2sgbWItMiBkcm9wZG93bi1pdGVtIGN1c3RvbS1kcm9wZG93bi1pdGVtXCI+XHJcbiAgICAgICAgICAgIDxpbnB1dCBcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dCBjdXJzb3ItcG9pbnRlclwiIFxyXG4gICAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCIgXHJcbiAgICAgICAgICAgICAgICBpZD1cInNlbGVjdEFsbFN0b3Jlc1wiIFxyXG4gICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwiaXNBbGxTdG9yZXNTZWxlY3RlZCgpXCIgXHJcbiAgICAgICAgICAgICAgICAoY2hhbmdlKT1cInRvZ2dsZVNlbGVjdEFsbFN0b3JlcygkZXZlbnQpXCIgXHJcbiAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tY2hlY2stbGFiZWxcIiBmb3I9XCJzZWxlY3RBbGxTdG9yZXNcIj5cclxuICAgICAgICAgICAgICAgIFNlbGVjdCBBbGxcclxuICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IFxyXG4gICAgICAgICAgICBjbGFzcz1cImRyb3Bkb3duLWl0ZW0gZm9ybS1jaGVjayBjdXN0b20tZHJvcGRvd24taXRlbVwiIFxyXG4gICAgICAgICAgICAqbmdGb3I9XCJsZXQgc3RvcmUgb2YgZmlsdGVyZWRTdG9yZXNcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgICAgPGlucHV0IFxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0XCIgXHJcbiAgICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIiBcclxuICAgICAgICAgICAgICAgIFtpZF09XCJzdG9yZS5zdG9yZUlkXCJcclxuICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwic3RvcmUuY2hlY2tlZFwiXHJcbiAgICAgICAgICAgICAgICAoY2hhbmdlKT1cInVwZGF0ZVNlbGVjdGVkU3RvcmVzKClcIiBcclxuICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1jaGVjay1sYWJlbFwiIFtmb3JdPVwic3RvcmUuc3RvcmVJZFwiPlxyXG4gICAgICAgICAgICAgICAge3sgc3RvcmUuc3RvcmVOYW1lIH19XHJcbiAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuPC9kaXY+XHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PiJdfQ==