tango-app-ui-manage-stores 3.0.17-dev → 3.0.19-dev

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (29) hide show
  1. package/esm2022/lib/components/add-stores/add-stores.component.mjs +57 -62
  2. package/esm2022/lib/components/add-stores-form/add-stores-form.component.mjs +27 -40
  3. package/esm2022/lib/components/create-group/create-group.component.mjs +23 -14
  4. package/esm2022/lib/components/group-delete-popup/group-delete-popup.component.mjs +3 -3
  5. package/esm2022/lib/components/group-details/group-details.component.mjs +302 -70
  6. package/esm2022/lib/components/tango-manage-groups/tango-manage-groups.component.mjs +24 -18
  7. package/esm2022/lib/components/tango-manage-stores/tango-manage-stores.component.mjs +27 -16
  8. package/esm2022/lib/guards/store-edit.guard.mjs +16 -0
  9. package/esm2022/lib/route-wrappers/edge-wrapper.module.mjs +18 -0
  10. package/esm2022/lib/services/excel.service.mjs +3 -3
  11. package/esm2022/lib/services/group.service.mjs +3 -3
  12. package/esm2022/lib/services/stores.service.mjs +29 -13
  13. package/esm2022/lib/tango-manage-stores-routing.module.mjs +15 -7
  14. package/esm2022/lib/tango-manage-stores.module.mjs +4 -4
  15. package/esm2022/lib/utils/filters/filters.component.mjs +3 -3
  16. package/fesm2022/tango-app-ui-manage-stores-edge-wrapper.module-DM8Er_Bd.mjs +21 -0
  17. package/fesm2022/tango-app-ui-manage-stores-edge-wrapper.module-DM8Er_Bd.mjs.map +1 -0
  18. package/fesm2022/tango-app-ui-manage-stores.mjs +667 -398
  19. package/fesm2022/tango-app-ui-manage-stores.mjs.map +1 -1
  20. package/lib/components/add-stores/add-stores.component.d.ts +5 -1
  21. package/lib/components/add-stores-form/add-stores-form.component.d.ts +4 -4
  22. package/lib/components/create-group/create-group.component.d.ts +2 -2
  23. package/lib/components/group-details/group-details.component.d.ts +30 -11
  24. package/lib/components/tango-manage-groups/tango-manage-groups.component.d.ts +6 -7
  25. package/lib/components/tango-manage-stores/tango-manage-stores.component.d.ts +4 -1
  26. package/lib/guards/store-edit.guard.d.ts +2 -0
  27. package/lib/route-wrappers/edge-wrapper.module.d.ts +7 -0
  28. package/lib/services/stores.service.d.ts +3 -0
  29. package/package.json +1 -1
@@ -3,15 +3,20 @@ import Swal from "sweetalert2";
3
3
  import { read, utils } from "xlsx";
4
4
  import * as i0 from "@angular/core";
5
5
  import * as i1 from "../../services/stores.service";
6
- import * as i2 from "@angular/router";
6
+ import * as i2 from "tango-app-ui-shared";
7
+ import * as i3 from "@angular/router";
7
8
  export class AddStoresComponent {
8
9
  storeService;
10
+ ts;
11
+ router;
9
12
  inputFile;
10
13
  phoneRegex = /^(\d{3})?\d{10}$/;
11
14
  emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
12
15
  $headerFilters;
13
- constructor(storeService) {
16
+ constructor(storeService, ts, router) {
14
17
  this.storeService = storeService;
18
+ this.ts = ts;
19
+ this.router = router;
15
20
  let data = JSON.parse(localStorage.getItem('header-filters') || '');
16
21
  this.$headerFilters = data;
17
22
  }
@@ -29,15 +34,7 @@ export class AddStoresComponent {
29
34
  const wsname = wb.SheetNames[0];
30
35
  const ws = wb.Sheets[wsname];
31
36
  if (wb.SheetNames[0] != "StoreData") {
32
- Swal.fire({
33
- icon: "error",
34
- text: "Please Upload the Valid File",
35
- showCancelButton: false,
36
- showConfirmButton: true,
37
- confirmButtonColor: "#009EF7",
38
- heightAuto: false,
39
- confirmButtonText: "OK",
40
- });
37
+ this.ts.getErrorToast("Please Upload the Valid File");
41
38
  return;
42
39
  }
43
40
  data = utils.sheet_to_json(ws);
@@ -55,7 +52,9 @@ export class AddStoresComponent {
55
52
  errMsgs.push(this.validateField(data[i].SpocEmail, "spoc email", i, this.emailRegex));
56
53
  errMsgs.push(this.validateField(data[i].SpocContact, "spoc contact", i, this.phoneRegex));
57
54
  errMsgs.push(this.validateField(data[i].TimeZone, "timezone", i));
58
- errMsgs.push(this.validateField(data[i].CameraCount, "camera count", i));
55
+ // errMsgs.push(
56
+ // this.validateField(data[i].CameraCount, "camera count", i)
57
+ // );
59
58
  errMsgs.push(this.validateField(data[i].Latitude, "latitude", i));
60
59
  errMsgs.push(this.validateField(data[i].Longitude, "longitude", i));
61
60
  errMsgs = errMsgs.filter((x) => x != null);
@@ -114,7 +113,7 @@ export class AddStoresComponent {
114
113
  processedArray.push({
115
114
  storeName: data[i].StoreName,
116
115
  storeType: { type: data[i].StoreType },
117
- edge: { camDetails: { cameras: data[i].CameraCount } },
116
+ // edge: { camDetails: { cameras: data[i].CameraCount } },
118
117
  spocDetails: {
119
118
  name: data[i].SpocName,
120
119
  email: data[i].SpocEmail,
@@ -128,59 +127,55 @@ export class AddStoresComponent {
128
127
  });
129
128
  })
130
129
  .catch((error) => {
131
- Swal.fire({
132
- icon: "error",
133
- text: `Please Upload the File with Valid latitude and longitude in row ${i + 1}`,
134
- showCancelButton: false,
135
- showConfirmButton: true,
136
- confirmButtonColor: "#009EF7",
137
- heightAuto: false,
138
- confirmButtonText: "OK",
139
- });
130
+ this.ts.getErrorToast(`Please Upload the File with Valid latitude and longitude in row ${i + 1}`);
140
131
  });
141
132
  promises.push(promise);
142
133
  }
143
134
  Promise.all(promises)
144
135
  .then(() => {
145
136
  this.storeService
146
- .storeBulkUpload({ stores: processedArray, clientId: this.$headerFilters?.client })
147
- .subscribe((res) => {
148
- if (res.code == 200) {
149
- Swal.fire({
150
- icon: "success",
151
- heightAuto: false,
152
- html: `<h3>Stores have been uploaded Successfully!</h3>`,
153
- });
154
- }
155
- }, (error) => {
156
- if (error.code == 400) {
157
- Swal.fire({
158
- icon: "error",
159
- text: error,
160
- heightAuto: false,
161
- showConfirmButton: true,
162
- confirmButtonText: "OK",
163
- });
164
- }
165
- else {
166
- Swal.fire({
167
- icon: "error",
168
- text: "Unable to create stores!",
169
- heightAuto: false,
170
- showConfirmButton: true,
171
- confirmButtonText: "OK",
172
- });
173
- }
137
+ .storeBulkUpload({
138
+ stores: processedArray,
139
+ clientId: this.$headerFilters?.client,
140
+ })
141
+ .subscribe({
142
+ next: (res) => {
143
+ if (res && res.code == 200) {
144
+ this.ts.getSuccessToast("Stores have been uploaded Successfully!");
145
+ if (res.data.stores && res.data.stores.length) {
146
+ let bulkTicketsBody = res.data.stores.map((storeId) => {
147
+ return {
148
+ storeId: storeId,
149
+ Date: new Date().toISOString().split("T")[0],
150
+ issueType: "installation",
151
+ };
152
+ });
153
+ this.storeService.bulkInfraTicket(bulkTicketsBody).subscribe({
154
+ next: (res) => {
155
+ if (res && res.code) {
156
+ this.ts.getSuccessToast('Store Installation Tickets created successfully!');
157
+ this.router.navigate(["/manage/stores"]);
158
+ }
159
+ },
160
+ error: (err) => {
161
+ this.ts.getErrorToast('Unable to create store installation Tickets!');
162
+ }
163
+ });
164
+ }
165
+ }
166
+ },
167
+ error: (error) => {
168
+ if (error.code == 400) {
169
+ this.ts.getErrorToast(error);
170
+ }
171
+ else {
172
+ this.ts.getErrorToast("Unable to create stores!");
173
+ }
174
+ },
174
175
  });
175
176
  })
176
177
  .catch((error) => {
177
- Swal.fire({
178
- icon: "error",
179
- text: "Unable to create stores!",
180
- heightAuto: false,
181
- showConfirmButton: true,
182
- confirmButtonText: "OK",
183
- });
178
+ this.ts.getErrorToast("Unable to create stores!");
184
179
  });
185
180
  };
186
181
  $("#kt_create_account_form_account_type_personal").val("");
@@ -206,14 +201,14 @@ export class AddStoresComponent {
206
201
  }
207
202
  return null;
208
203
  }
209
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: AddStoresComponent, deps: [{ token: i1.StoresService }], target: i0.ɵɵFactoryTarget.Component });
210
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.2", type: AddStoresComponent, selector: "lib-add-stores", viewQueries: [{ propertyName: "inputFile", first: true, predicate: ["inputFile"], descendants: true }], ngImport: i0, template: "<div class=\"card\">\r\n <div class=\"card-body d-flex flex-center flex-column p-9\">\r\n <div class=\"mb-5\">\r\n <div class=\"symbol symbol-75px symbol-circle\">\r\n <img alt=\"Pic\" src=\"./assets/tango/Icons/add-store-icon.svg\">\r\n </div>\r\n </div>\r\n <a class=\"fs-4 text-gray-800 text-hover-primary fw-bolder mb-0 title cursor-pointer\"> Add stores </a>\r\n <div class=\"fw-bold text-gray-500 my-6\">\r\n <ul class=\"text-gray-400 fw-bold fs-6\">\r\n <li>Use the template to upload multiple stores at once.</li>\r\n <li>Download the template here -\r\n <a href=\"../../assets/files/storesUploadTemplate.xlsx\" download>\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=\"M17.5 12.5V15.8333C17.5 16.2754 17.3244 16.6993 17.0118 17.0118C16.6993 17.3244 16.2754 17.5 15.8333 17.5H4.16667C3.72464 17.5 3.30072 17.3244 2.98816 17.0118C2.67559 16.6993 2.5 16.2754 2.5 15.8333V12.5M5.83333 8.33333L10 12.5M10 12.5L14.1667 8.33333M10 12.5V2.5\"\r\n stroke=\"#009BF3\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n <span class=\"template ms-2\">Download Template</span>\r\n </a>\r\n </li>\r\n <li>Add your data to the Template File</li>\r\n <li>Upload it below for processing</li>\r\n </ul>\r\n </div>\r\n <div class=\"d-flex flex-center flex-wrap mb-5\">\r\n <input name=\"accountType\" type=\"radio\" id=\"kt_create_account_form_account_type_personal\" value=\"personal\"\r\n class=\"btn-check\" ng-reflect-name=\"accountType\" ng-reflect-form-control-name=\"accountType\"\r\n (change)=\"onUpload($event)\"\r\n ng-reflect-value=\"personal\" type=\"file\" #inputFile />\r\n <label for=\"kt_create_account_form_account_type_personal\"\r\n class=\"btn btn-outline btn-primary bg-primary btn-outline-default rounded-3 w-50 p-4 mt-5\"><span\r\n class=\"fw-bold fs-4\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"21\" height=\"20\" viewBox=\"0 0 21 20\"\r\n fill=\"none\">\r\n <path\r\n d=\"M18 12.5V15.8333C18 16.2754 17.8244 16.6993 17.5118 17.0118C17.1993 17.3244 16.7754 17.5 16.3333 17.5H4.66667C4.22464 17.5 3.80072 17.3244 3.48816 17.0118C3.17559 16.6993 3 16.2754 3 15.8333V12.5M14.6667 6.66667L10.5 2.5M10.5 2.5L6.33333 6.66667M10.5 2.5V12.5\"\r\n stroke=\"white\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg> \r\n <span class=\"text-white mx-2\">Add Multiple Stores</span></span>\r\n </label>\r\n <p class=\"text-gray-400 fw-bold my-3\">\r\n <span class=\"line-bg \"><svg width=\"224\" height=\"2\" viewBox=\"0 0 124 2\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect y=\"0.5\" width=\"123.333\" height=\"1\" fill=\"#EAECF0\" />\r\n </svg>\r\n </span><span class=\"mx-2\">Or </span> <span class=\"line-bg \"><svg width=\"224\" height=\"2\" viewBox=\"0 0 124 2\"\r\n fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect y=\"0.5\" width=\"123.333\" height=\"1\" fill=\"#EAECF0\" />\r\n </svg>\r\n </span>\r\n </p>\r\n <input type=\"radio\" id=\"kt_account_team_size_select_1\" value=\"1-1\" routerLink=\"/manage/stores/add-single-store\"\r\n class=\"btn-check ng-untouched ng-pristine ng-valid\" />\r\n <label for=\"kt_account_team_size_select_1\"\r\n class=\"btn btn-outline btn-outline-default rounded-3 w-50 p-4 mt-3\">\r\n <svg width=\"17\" height=\"16\" viewBox=\"0 0 17 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M1.18015 3.80378L1.1269 3.88695C0.568863 4.874 1.16469 6.12143 2.2363 6.26452C2.33339 6.27639 2.42373 6.28267 2.512 6.28267C3.09015 6.28267 3.60132 6.03465 3.95759 5.64792L4.51093 5.0473L5.06238 5.64965C5.41432 6.03407 5.92433 6.28267 6.50639 6.28267C7.08583 6.28267 7.59877 6.03372 7.95039 5.64965L8.50358 5.04541L9.05676 5.64965C9.40839 6.03372 9.92133 6.28267 10.5008 6.28267C11.0802 6.28267 11.5932 6.03372 11.9448 5.64965L12.498 5.04541L13.0511 5.64965C13.4028 6.03372 13.9157 6.28267 14.4952 6.28267C14.5805 6.28267 14.6736 6.27638 14.77 6.26462C15.8652 6.1153 16.463 4.80103 15.8243 3.80428C15.8242 3.80423 15.8242 3.80417 15.8242 3.80411L14.066 1.0627L14.066 1.0627L14.0651 1.06123C14.0499 1.0374 14.0124 1.01184 13.9652 1.01184H3.03581C2.98866 1.01184 2.95117 1.0374 2.93597 1.06124L2.93535 1.0622L1.18015 3.80378ZM14.1516 8.73706V11.869V12.619H13.4016H3.59943H2.84943V11.869V8.73753C2.7392 8.74573 2.62768 8.74994 2.51507 8.74994C2.47276 8.74994 2.43074 8.74931 2.389 8.74809V11.869V13.8035C2.389 14.4469 2.9229 14.988 3.59943 14.988H13.4016C14.0781 14.988 14.612 14.4469 14.612 13.8035V11.869V8.74827C14.5722 8.74937 14.5322 8.74994 14.4921 8.74994C14.3777 8.74994 14.2641 8.74559 14.1516 8.73706Z\" stroke=\"#344054\" stroke-width=\"1.5\"/>\r\n </svg>\r\n <span class=\"fw-bold fs-4 mx-2\">\r\n Add Single\r\n Store</span></label>\r\n </div>\r\n \r\n </div>\r\n", styles: [".title{color:var(--Gray-900, #101828)!important;text-align:center;font-family:Inter;font-size:20px!important;font-weight:600;line-height:30px}li{color:var(--Gray-700, #344054)!important;font-family:Inter;font-size:14px!important;font-weight:500!important;line-height:30px;list-style:decimal!important}::ng-deep .modal-content{border-radius:12px!important}.template{color:var(--Primary-700, #009BF3)!important;font-family:Inter;font-size:14px!important;font-weight:600;line-height:20px;text-transform:capitalize}.or-condition{color:var(--Gray-700, #344054)!important;text-align:center;font-size:12px!important;font-weight:500!important;line-height:18px}\n"], dependencies: [{ kind: "directive", type: i2.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }] });
204
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: AddStoresComponent, deps: [{ token: i1.StoresService }, { token: i2.ToastService }, { token: i3.Router }], target: i0.ɵɵFactoryTarget.Component });
205
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.8", type: AddStoresComponent, selector: "lib-add-stores", viewQueries: [{ propertyName: "inputFile", first: true, predicate: ["inputFile"], descendants: true }], ngImport: i0, template: "<div class=\"card\">\r\n <div class=\"card-body d-flex flex-center flex-column p-9\">\r\n <div class=\"mb-5\">\r\n <div class=\"symbol symbol-75px symbol-circle\">\r\n <img alt=\"Pic\" src=\"./assets/tango/Icons/add-store-icon.svg\">\r\n </div>\r\n </div>\r\n <a class=\"fs-4 text-gray-800 text-hover-primary fw-bolder mb-0 title cursor-pointer\"> Add stores </a>\r\n <div class=\"fw-bold text-gray-500 my-6\">\r\n <ul class=\"text-gray-400 fw-bold fs-6\">\r\n <li>Use the template to upload multiple stores at once.</li>\r\n <li>Download the template here -\r\n <a href=\"../../assets/files/storesUploadTemplate.xlsx\" download>\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=\"M17.5 12.5V15.8333C17.5 16.2754 17.3244 16.6993 17.0118 17.0118C16.6993 17.3244 16.2754 17.5 15.8333 17.5H4.16667C3.72464 17.5 3.30072 17.3244 2.98816 17.0118C2.67559 16.6993 2.5 16.2754 2.5 15.8333V12.5M5.83333 8.33333L10 12.5M10 12.5L14.1667 8.33333M10 12.5V2.5\"\r\n stroke=\"#009BF3\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n <span class=\"template ms-2\">Download Template</span>\r\n </a>\r\n </li>\r\n <li>Add your data to the Template File</li>\r\n <li>Upload it below for processing</li>\r\n </ul>\r\n </div>\r\n <div class=\"d-flex flex-center flex-wrap mb-5\">\r\n <input name=\"accountType\" type=\"radio\" id=\"kt_create_account_form_account_type_personal\" value=\"personal\"\r\n class=\"btn-check\" ng-reflect-name=\"accountType\" ng-reflect-form-control-name=\"accountType\"\r\n (change)=\"onUpload($event)\"\r\n ng-reflect-value=\"personal\" type=\"file\" #inputFile />\r\n <label for=\"kt_create_account_form_account_type_personal\"\r\n class=\"btn btn-outline btn-primary bg-primary btn-outline-default rounded-3 w-50 p-4 mt-5\"><span\r\n class=\"fw-bold fs-4\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"21\" height=\"20\" viewBox=\"0 0 21 20\"\r\n fill=\"none\">\r\n <path\r\n d=\"M18 12.5V15.8333C18 16.2754 17.8244 16.6993 17.5118 17.0118C17.1993 17.3244 16.7754 17.5 16.3333 17.5H4.66667C4.22464 17.5 3.80072 17.3244 3.48816 17.0118C3.17559 16.6993 3 16.2754 3 15.8333V12.5M14.6667 6.66667L10.5 2.5M10.5 2.5L6.33333 6.66667M10.5 2.5V12.5\"\r\n stroke=\"white\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg> \r\n <span class=\"text-white mx-2\">Add Multiple Stores</span></span>\r\n </label>\r\n <p class=\"text-gray-400 fw-bold my-3\">\r\n <span class=\"line-bg \"><svg width=\"224\" height=\"2\" viewBox=\"0 0 124 2\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect y=\"0.5\" width=\"123.333\" height=\"1\" fill=\"#EAECF0\" />\r\n </svg>\r\n </span><span class=\"mx-2\">Or </span> <span class=\"line-bg \"><svg width=\"224\" height=\"2\" viewBox=\"0 0 124 2\"\r\n fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect y=\"0.5\" width=\"123.333\" height=\"1\" fill=\"#EAECF0\" />\r\n </svg>\r\n </span>\r\n </p>\r\n <input type=\"radio\" id=\"kt_account_team_size_select_1\" value=\"1-1\" routerLink=\"/manage/stores/add-single-store\"\r\n class=\"btn-check ng-untouched ng-pristine ng-valid\" />\r\n <label for=\"kt_account_team_size_select_1\"\r\n class=\"btn btn-outline btn-outline-default rounded-3 w-50 p-4 mt-3\">\r\n <svg width=\"17\" height=\"16\" viewBox=\"0 0 17 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M1.18015 3.80378L1.1269 3.88695C0.568863 4.874 1.16469 6.12143 2.2363 6.26452C2.33339 6.27639 2.42373 6.28267 2.512 6.28267C3.09015 6.28267 3.60132 6.03465 3.95759 5.64792L4.51093 5.0473L5.06238 5.64965C5.41432 6.03407 5.92433 6.28267 6.50639 6.28267C7.08583 6.28267 7.59877 6.03372 7.95039 5.64965L8.50358 5.04541L9.05676 5.64965C9.40839 6.03372 9.92133 6.28267 10.5008 6.28267C11.0802 6.28267 11.5932 6.03372 11.9448 5.64965L12.498 5.04541L13.0511 5.64965C13.4028 6.03372 13.9157 6.28267 14.4952 6.28267C14.5805 6.28267 14.6736 6.27638 14.77 6.26462C15.8652 6.1153 16.463 4.80103 15.8243 3.80428C15.8242 3.80423 15.8242 3.80417 15.8242 3.80411L14.066 1.0627L14.066 1.0627L14.0651 1.06123C14.0499 1.0374 14.0124 1.01184 13.9652 1.01184H3.03581C2.98866 1.01184 2.95117 1.0374 2.93597 1.06124L2.93535 1.0622L1.18015 3.80378ZM14.1516 8.73706V11.869V12.619H13.4016H3.59943H2.84943V11.869V8.73753C2.7392 8.74573 2.62768 8.74994 2.51507 8.74994C2.47276 8.74994 2.43074 8.74931 2.389 8.74809V11.869V13.8035C2.389 14.4469 2.9229 14.988 3.59943 14.988H13.4016C14.0781 14.988 14.612 14.4469 14.612 13.8035V11.869V8.74827C14.5722 8.74937 14.5322 8.74994 14.4921 8.74994C14.3777 8.74994 14.2641 8.74559 14.1516 8.73706Z\" stroke=\"#344054\" stroke-width=\"1.5\"/>\r\n </svg>\r\n <span class=\"fw-bold fs-4 mx-2\">\r\n Add Single\r\n Store</span></label>\r\n </div>\r\n \r\n </div>\r\n", styles: [".title{color:var(--Gray-900, #101828)!important;text-align:center;font-family:Inter;font-size:20px!important;font-weight:600;line-height:30px}li{color:var(--Gray-700, #344054)!important;font-family:Inter;font-size:14px!important;font-weight:500!important;line-height:30px;list-style:decimal!important}::ng-deep .modal-content{border-radius:12px!important}.template{color:var(--Primary-700, #009BF3)!important;font-family:Inter;font-size:14px!important;font-weight:600;line-height:20px;text-transform:capitalize}.or-condition{color:var(--Gray-700, #344054)!important;text-align:center;font-size:12px!important;font-weight:500!important;line-height:18px}\n"], dependencies: [{ kind: "directive", type: i3.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }] });
211
206
  }
212
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: AddStoresComponent, decorators: [{
207
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: AddStoresComponent, decorators: [{
213
208
  type: Component,
214
209
  args: [{ selector: "lib-add-stores", template: "<div class=\"card\">\r\n <div class=\"card-body d-flex flex-center flex-column p-9\">\r\n <div class=\"mb-5\">\r\n <div class=\"symbol symbol-75px symbol-circle\">\r\n <img alt=\"Pic\" src=\"./assets/tango/Icons/add-store-icon.svg\">\r\n </div>\r\n </div>\r\n <a class=\"fs-4 text-gray-800 text-hover-primary fw-bolder mb-0 title cursor-pointer\"> Add stores </a>\r\n <div class=\"fw-bold text-gray-500 my-6\">\r\n <ul class=\"text-gray-400 fw-bold fs-6\">\r\n <li>Use the template to upload multiple stores at once.</li>\r\n <li>Download the template here -\r\n <a href=\"../../assets/files/storesUploadTemplate.xlsx\" download>\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=\"M17.5 12.5V15.8333C17.5 16.2754 17.3244 16.6993 17.0118 17.0118C16.6993 17.3244 16.2754 17.5 15.8333 17.5H4.16667C3.72464 17.5 3.30072 17.3244 2.98816 17.0118C2.67559 16.6993 2.5 16.2754 2.5 15.8333V12.5M5.83333 8.33333L10 12.5M10 12.5L14.1667 8.33333M10 12.5V2.5\"\r\n stroke=\"#009BF3\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n <span class=\"template ms-2\">Download Template</span>\r\n </a>\r\n </li>\r\n <li>Add your data to the Template File</li>\r\n <li>Upload it below for processing</li>\r\n </ul>\r\n </div>\r\n <div class=\"d-flex flex-center flex-wrap mb-5\">\r\n <input name=\"accountType\" type=\"radio\" id=\"kt_create_account_form_account_type_personal\" value=\"personal\"\r\n class=\"btn-check\" ng-reflect-name=\"accountType\" ng-reflect-form-control-name=\"accountType\"\r\n (change)=\"onUpload($event)\"\r\n ng-reflect-value=\"personal\" type=\"file\" #inputFile />\r\n <label for=\"kt_create_account_form_account_type_personal\"\r\n class=\"btn btn-outline btn-primary bg-primary btn-outline-default rounded-3 w-50 p-4 mt-5\"><span\r\n class=\"fw-bold fs-4\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"21\" height=\"20\" viewBox=\"0 0 21 20\"\r\n fill=\"none\">\r\n <path\r\n d=\"M18 12.5V15.8333C18 16.2754 17.8244 16.6993 17.5118 17.0118C17.1993 17.3244 16.7754 17.5 16.3333 17.5H4.66667C4.22464 17.5 3.80072 17.3244 3.48816 17.0118C3.17559 16.6993 3 16.2754 3 15.8333V12.5M14.6667 6.66667L10.5 2.5M10.5 2.5L6.33333 6.66667M10.5 2.5V12.5\"\r\n stroke=\"white\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg> \r\n <span class=\"text-white mx-2\">Add Multiple Stores</span></span>\r\n </label>\r\n <p class=\"text-gray-400 fw-bold my-3\">\r\n <span class=\"line-bg \"><svg width=\"224\" height=\"2\" viewBox=\"0 0 124 2\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect y=\"0.5\" width=\"123.333\" height=\"1\" fill=\"#EAECF0\" />\r\n </svg>\r\n </span><span class=\"mx-2\">Or </span> <span class=\"line-bg \"><svg width=\"224\" height=\"2\" viewBox=\"0 0 124 2\"\r\n fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect y=\"0.5\" width=\"123.333\" height=\"1\" fill=\"#EAECF0\" />\r\n </svg>\r\n </span>\r\n </p>\r\n <input type=\"radio\" id=\"kt_account_team_size_select_1\" value=\"1-1\" routerLink=\"/manage/stores/add-single-store\"\r\n class=\"btn-check ng-untouched ng-pristine ng-valid\" />\r\n <label for=\"kt_account_team_size_select_1\"\r\n class=\"btn btn-outline btn-outline-default rounded-3 w-50 p-4 mt-3\">\r\n <svg width=\"17\" height=\"16\" viewBox=\"0 0 17 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M1.18015 3.80378L1.1269 3.88695C0.568863 4.874 1.16469 6.12143 2.2363 6.26452C2.33339 6.27639 2.42373 6.28267 2.512 6.28267C3.09015 6.28267 3.60132 6.03465 3.95759 5.64792L4.51093 5.0473L5.06238 5.64965C5.41432 6.03407 5.92433 6.28267 6.50639 6.28267C7.08583 6.28267 7.59877 6.03372 7.95039 5.64965L8.50358 5.04541L9.05676 5.64965C9.40839 6.03372 9.92133 6.28267 10.5008 6.28267C11.0802 6.28267 11.5932 6.03372 11.9448 5.64965L12.498 5.04541L13.0511 5.64965C13.4028 6.03372 13.9157 6.28267 14.4952 6.28267C14.5805 6.28267 14.6736 6.27638 14.77 6.26462C15.8652 6.1153 16.463 4.80103 15.8243 3.80428C15.8242 3.80423 15.8242 3.80417 15.8242 3.80411L14.066 1.0627L14.066 1.0627L14.0651 1.06123C14.0499 1.0374 14.0124 1.01184 13.9652 1.01184H3.03581C2.98866 1.01184 2.95117 1.0374 2.93597 1.06124L2.93535 1.0622L1.18015 3.80378ZM14.1516 8.73706V11.869V12.619H13.4016H3.59943H2.84943V11.869V8.73753C2.7392 8.74573 2.62768 8.74994 2.51507 8.74994C2.47276 8.74994 2.43074 8.74931 2.389 8.74809V11.869V13.8035C2.389 14.4469 2.9229 14.988 3.59943 14.988H13.4016C14.0781 14.988 14.612 14.4469 14.612 13.8035V11.869V8.74827C14.5722 8.74937 14.5322 8.74994 14.4921 8.74994C14.3777 8.74994 14.2641 8.74559 14.1516 8.73706Z\" stroke=\"#344054\" stroke-width=\"1.5\"/>\r\n </svg>\r\n <span class=\"fw-bold fs-4 mx-2\">\r\n Add Single\r\n Store</span></label>\r\n </div>\r\n \r\n </div>\r\n", styles: [".title{color:var(--Gray-900, #101828)!important;text-align:center;font-family:Inter;font-size:20px!important;font-weight:600;line-height:30px}li{color:var(--Gray-700, #344054)!important;font-family:Inter;font-size:14px!important;font-weight:500!important;line-height:30px;list-style:decimal!important}::ng-deep .modal-content{border-radius:12px!important}.template{color:var(--Primary-700, #009BF3)!important;font-family:Inter;font-size:14px!important;font-weight:600;line-height:20px;text-transform:capitalize}.or-condition{color:var(--Gray-700, #344054)!important;text-align:center;font-size:12px!important;font-weight:500!important;line-height:18px}\n"] }]
215
- }], ctorParameters: () => [{ type: i1.StoresService }], propDecorators: { inputFile: [{
210
+ }], ctorParameters: () => [{ type: i1.StoresService }, { type: i2.ToastService }, { type: i3.Router }], propDecorators: { inputFile: [{
216
211
  type: ViewChild,
217
212
  args: ["inputFile"]
218
213
  }] } });
219
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkLXN0b3Jlcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby1tYW5hZ2Utc3RvcmVzL3NyYy9saWIvY29tcG9uZW50cy9hZGQtc3RvcmVzL2FkZC1zdG9yZXMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFuZ28tbWFuYWdlLXN0b3Jlcy9zcmMvbGliL2NvbXBvbmVudHMvYWRkLXN0b3Jlcy9hZGQtc3RvcmVzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWMsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2pFLE9BQU8sSUFBSSxNQUFNLGFBQWEsQ0FBQztBQUMvQixPQUFPLEVBQVksSUFBSSxFQUFFLEtBQUssRUFBYSxNQUFNLE1BQU0sQ0FBQzs7OztBQWtCeEQsTUFBTSxPQUFPLGtCQUFrQjtJQU9UO0lBTkksU0FBUyxDQUFhO0lBRTlDLFVBQVUsR0FBVyxrQkFBa0IsQ0FBQztJQUN4QyxVQUFVLEdBQVcsNEJBQTRCLENBQUM7SUFDbEQsY0FBYyxDQUFNO0lBRXBCLFlBQW9CLFlBQTJCO1FBQTNCLGlCQUFZLEdBQVosWUFBWSxDQUFlO1FBQzdDLElBQUksSUFBSSxHQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ3hFLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO0lBQzdCLENBQUM7SUFFRCxRQUFRLENBQUMsQ0FBTTtRQUNiLElBQUksSUFBcUIsQ0FBQztRQUMxQixNQUFNLE1BQU0sR0FBK0IsQ0FBQyxDQUFDLE1BQU0sQ0FBQztRQUNwRCxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUMzQixJQUFJLENBQUMsU0FBUyxDQUFD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QUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsRUFBRSxDQUFDO1FBQzlDLElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDVixPQUFPLGdCQUFnQixTQUFTLENBQUMsV0FBVyxFQUFFLFdBQVcsR0FBRyxHQUFHLENBQUMsRUFBRSxDQUFDO1NBQ3BFO1FBQ0QsSUFBSSxPQUFPLEtBQUssSUFBSSxRQUFRLEVBQUU7WUFDNUIsSUFBSSxLQUFLLENBQUMsSUFBSSxFQUFFLEtBQUssWUFBWSxDQUFDLElBQUksRUFBRSxFQUFFO2dCQUN4QyxPQUFPLHFCQUFxQixTQUFTLENBQUMsV0FBVyxFQUFFLFdBQVcsR0FBRyxHQUFHLENBQUMsRUFBRSxDQUFDO2FBQ3pFO1lBQ0QsSUFBSSxLQUFLLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFO2dCQUN0QyxPQUFPLHNCQUFzQixTQUFTLENBQUMsV0FBVyxFQUFFLFdBQ2xELEdBQUcsR0FBRyxDQUNSLEVBQUUsQ0FBQzthQUNKO1NBQ0Y7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7dUdBM09VLGtCQUFrQjsyRkFBbEIsa0JBQWtCLDhKQ3BCL0IsMHJLQWlFQTs7MkZEN0NhLGtCQUFrQjtrQkFMOUIsU0FBUzsrQkFDRSxnQkFBZ0I7a0ZBS0YsU0FBUztzQkFBaEMsU0FBUzt1QkFBQyxXQUFXIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBWaWV3Q2hpbGQgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgU3dhbCBmcm9tIFwic3dlZXRhbGVydDJcIjtcclxuaW1wb3J0IHsgV29ya0Jvb2ssIHJlYWQsIHV0aWxzLCBXb3JrU2hlZXQgfSBmcm9tIFwieGxzeFwiO1xyXG5pbXBvcnQgeyBTdG9yZXNTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL3N0b3Jlcy5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IFN0b3JlQnVsa0l0ZW0gfSBmcm9tIFwiLi4vLi4vaW50ZXJmYWNlcy9zdG9yZS5pbnRlcmZhY2VcIjtcclxuXHJcbmRlY2xhcmUgdmFyICQ6IGFueTtcclxuaW50ZXJmYWNlIExvY2F0aW9uRGV0YWlscyB7XHJcbiAgY2l0eTogc3RyaW5nO1xyXG4gIHN0YXRlOiBzdHJpbmc7XHJcbiAgY291bnRyeTogc3RyaW5nO1xyXG4gIHBpbmNvZGU6IHN0cmluZztcclxuICBhZGRyZXNzOiBzdHJpbmc7XHJcbn1cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiBcImxpYi1hZGQtc3RvcmVzXCIsXHJcbiAgdGVtcGxhdGVVcmw6IFwiLi9hZGQtc3RvcmVzLmNvbXBvbmVudC5odG1sXCIsXHJcbiAgc3R5bGVVcmw6IFwiLi9hZGQtc3RvcmVzLmNvbXBvbmVudC5zY3NzXCIsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBZGRTdG9yZXNDb21wb25lbnQge1xyXG4gIEBWaWV3Q2hpbGQoXCJpbnB1dEZpbGVcIikgaW5wdXRGaWxlOiBFbGVtZW50UmVmO1xyXG5cclxuICBwaG9uZVJlZ2V4OiBSZWdFeHAgPSAvXihcXGR7M30pP1xcZHsxMH0kLztcclxuICBlbWFpbFJlZ2V4OiBSZWdFeHAgPSAvXlteXFxzQF0rQFteXFxzQF0rXFwuW15cXHNAXSskLztcclxuICAkaGVhZGVyRmlsdGVyczogYW55O1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHN0b3JlU2VydmljZTogU3RvcmVzU2VydmljZSkge1xyXG4gICAgbGV0IGRhdGE6YW55ID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnaGVhZGVyLWZpbHRlcnMnKSB8fCAnJyk7XHJcbiAgICB0aGlzLiRoZWFkZXJGaWx0ZXJzID0gZGF0YTtcclxuICB9XHJcblxyXG4gIG9uVXBsb2FkKGU6IGFueSkge1xyXG4gICAgbGV0IGRhdGE6IFN0b3JlQnVsa0l0ZW1bXTtcclxuICAgIGNvbnN0IHRhcmdldDogRGF0YVRyYW5zZmVyID0gPERhdGFUcmFuc2Zlcj5lLnRhcmdldDtcclxuICAgIGlmICh0YXJnZXQuZmlsZXMubGVuZ3RoID4gMSkge1xyXG4gICAgICB0aGlzLmlucHV0RmlsZS5uYXRpdmVFbGVtZW50LnZhbHVlID0gXCJcIjtcclxuICAgIH1cclxuICAgIGlmICghIXRhcmdldC5maWxlc1swXS5uYW1lLm1hdGNoKC8oLnhsc3wueGxzeCkvKSkge1xyXG4gICAgICBjb25zdCByZWFkZXI6IEZpbGVSZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xyXG4gICAgICByZWFkZXIub25sb2FkID0gKGU6IGFueSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGJzdHI6IHN0cmluZyA9IGUudGFyZ2V0LnJlc3VsdDtcclxuICAgICAgICBjb25zdCB3YjogV29ya0Jvb2sgPSByZWFkKGJzdHIsIHsgdHlwZTogXCJiaW5hcnlcIiB9KTtcclxuICAgICAgICBjb25zdCB3c25hbWU6IHN0cmluZyA9IHdiLlNoZWV0TmFtZXNbMF07XHJcbiAgICAgICAgY29uc3Qgd3M6IFdvcmtTaGVldCA9IHdiLlNoZWV0c1t3c25hbWVdO1xyXG4gICAgICAgIGlmICh3Yi5TaGVldE5hbWVzWzBdICE9IFwiU3RvcmVEYXRhXCIpIHtcclxuICAgICAgICAgIFN3YWwuZmlyZSh7XHJcbiAgICAgICAgICAgIGljb246IFwiZXJyb3JcIixcclxuICAgICAgICAgICAgdGV4dDogXCJQbGVhc2UgVXBsb2FkIHRoZSBWYWxpZCBGaWxlXCIsXHJcbiAgICAgICAgICAgIHNob3dDYW5jZWxCdXR0b246IGZhbHNlLFxyXG4gICAgICAgICAgICBzaG93Q29uZmlybUJ1dHRvbjogdHJ1ZSxcclxuICAgICAgICAgICAgY29uZmlybUJ1dHRvbkNvbG9yOiBcIiMwMDlFRjdcIixcclxuICAgICAgICAgICAgaGVpZ2h0QXV0bzogZmFsc2UsXHJcbiAgICAgICAgICAgIGNvbmZpcm1CdXR0b25UZXh0OiBcIk9LXCIsXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgZGF0YSA9IHV0aWxzLnNoZWV0X3RvX2pzb24od3MpO1xyXG4gICAgICB9O1xyXG5cclxuICAgICAgcmVhZGVyLnJlYWRBc0JpbmFyeVN0cmluZyh0YXJnZXQuZmlsZXNbMF0pO1xyXG5cclxuICAgICAgcmVhZGVyLm9ubG9hZGVuZCA9IGFzeW5jIChlKSA9PiB7XHJcbiAgICAgICAgbGV0IHByb2Nlc3NlZEFycmF5OiBhbnlbXSA9IFtdO1xyXG4gICAgICAgIGxldCBlcnJNc2dzOiBhbnlbXSA9IFtdO1xyXG4gICAgICAgIGxldCBwcm9taXNlcyA9IFtdO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGF0YS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgZXJyTXNncy5wdXNoKHRoaXMudmFsaWRhdGVGaWVsZChkYXRhW2ldLlN0b3JlTmFtZSwgXCJzdG9yZSBuYW1lXCIsIGkpKTtcclxuICAgICAgICAgIGVyck1zZ3MucHVzaCh0aGlzLnZhbGlkYXRlRmllbGQoZGF0YVtpXS5TdG9yZVR5cGUsIFwic3RvcmUgdHlwZVwiLCBpKSk7XHJcbiAgICAgICAgICBlcnJNc2dzLnB1c2godGhpcy52YWxpZGF0ZUZpZWxkKGRhdGFbaV0uU3BvY05hbWUsIFwic3BvYyBuYW1lXCIsIGkpKTtcclxuICAgICAgICAgIGVyck1zZ3MucHVzaChcclxuICAgICAgICAgICAgdGhpcy52YWxpZGF0ZUZpZWxkKGRhdGFbaV0uQnVzaW5lc3NUeXBlLCBcImJ1c2luZXNzIHR5cGVcIiwgaSlcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBlcnJNc2dzLnB1c2goXHJcbiAgICAgICAgICAgIHRoaXMudmFsaWRhdGVGaWVsZChcclxuICAgICAgICAgICAgICBkYXRhW2ldLlNwb2NFbWFpbCxcclxuICAgICAgICAgICAgICBcInNwb2MgZW1haWxcIixcclxuICAgICAgICAgICAgICBpLFxyXG4gICAgICAgICAgICAgIHRoaXMuZW1haWxSZWdleFxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgZXJyTXNncy5wdXNoKFxyXG4gICAgICAgICAgICB0aGlzLnZhbGlkYXRlRmllbGQoXHJcbiAgICAgICAgICAgICAgZGF0YVtpXS5TcG9jQ29udGFjdCxcclxuICAgICAgICAgICAgICBcInNwb2MgY29udGFjdFwiLFxyXG4gICAgICAgICAgICAgIGksXHJcbiAgICAgICAgICAgICAgdGhpcy5waG9uZVJlZ2V4XHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBlcnJNc2dzLnB1c2godGhpcy52YWxpZGF0ZUZpZWxkKGRhdGFbaV0uVGltZVpvbmUsIFwidGltZXpvbmVcIiwgaSkpO1xyXG4gICAgICAgICAgZXJyTXNncy5wdXNoKFxyXG4gICAgICAgICAgICB0aGlzLnZhbGlkYXRlRmllbGQoZGF0YVtpXS5DYW1lcmFDb3VudCwgXCJjYW1lcmEgY291bnRcIiwgaSlcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBlcnJNc2dzLnB1c2godGhpcy52YWxpZGF0ZUZpZWxkKGRhdGFbaV0uTGF0aXR1ZGUsIFwibGF0aXR1ZGVcIiwgaSkpO1xyXG4gICAgICAgICAgZXJyTXNncy5wdXNoKHRoaXMudmFsaWRhdGVGaWVsZChkYXRhW2ldLkxvbmdpdHVkZSwgXCJsb25naXR1ZGVcIiwgaSkpO1xyXG5cclxuICAgICAgICAgIGVyck1zZ3MgPSBlcnJNc2dzLmZpbHRlcigoeCkgPT4geCAhPSBudWxsKTtcclxuICAgICAgICAgIGlmIChlcnJNc2dzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgbGV0IGVycm9ycyA9IGVyck1zZ3Muam9pbihcIjxicj5cIik7XHJcbiAgICAgICAgICAgIFN3YWwuZmlyZSh7XHJcbiAgICAgICAgICAgICAgaWNvbjogXCJlcnJvclwiLFxyXG4gICAgICAgICAgICAgIGh0bWw6IGVycm9ycyxcclxuICAgICAgICAgICAgICBjdXN0b21DbGFzczoge1xyXG4gICAgICAgICAgICAgICAgaHRtbENvbnRhaW5lcjogXCJlcnJvci1odG1sY29udGFpbmVyLWNsYXNzXCIsXHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICBoZWlnaHRBdXRvOiBmYWxzZSxcclxuICAgICAgICAgICAgICBzaG93Q2FuY2VsQnV0dG9uOiBmYWxzZSxcclxuICAgICAgICAgICAgICBzaG93Q29uZmlybUJ1dHRvbjogdHJ1ZSxcclxuICAgICAgICAgICAgICBjb25maXJtQnV0dG9uQ29sb3I6IFwiIzAwOUVGN1wiLFxyXG4gICAgICAgICAgICAgIGNvbmZpcm1CdXR0b25UZXh0OiBcIk9LXCIsXHJcbiAgICAgICAgICAgIH0pLnRoZW4oKHJlc3VsdCkgPT4ge30pO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgY29uc3QgcHJvbWlzZSA9IHRoaXMuc3RvcmVTZXJ2aWNlXHJcbiAgICAgICAgICAgIC5nZXRBZGRyZXNzKE51bWJlcihkYXRhW2ldLkxhdGl0dWRlKSwgTnVtYmVyKGRhdGFbaV0uTG9uZ2l0dWRlKSlcclxuICAgICAgICAgICAgLnRoZW4oKHBsYWNlRGF0YTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgbGV0IHN0b3JlUHJvZmlsZTogYW55ID0ge1xyXG4gICAgICAgICAgICAgICAgYWRkcmVzczogXCJcIixcclxuICAgICAgICAgICAgICAgIGNvdW50cnk6IFwiXCIsXHJcbiAgICAgICAgICAgICAgICBzdGF0ZTogXCJcIixcclxuICAgICAgICAgICAgICAgIGNpdHk6IFwiXCIsXHJcbiAgICAgICAgICAgICAgICBwaW5jb2RlOiBcIlwiLFxyXG4gICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgZm9yIChjb25zdCBjb21wb25lbnQgb2YgcGxhY2VEYXRhLmFkZHJlc3NfY29tcG9uZW50cykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdHlwZXMgPSBjb21wb25lbnQudHlwZXM7XHJcbiAgICAgICAgICAgICAgICBpZiAodHlwZXMuaW5jbHVkZXMoXCJsb2NhbGl0eVwiKSkge1xyXG4gICAgICAgICAgICAgICAgICBzdG9yZVByb2ZpbGUuY2l0eSA9IGNvbXBvbmVudC5sb25nX25hbWU7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVzLmluY2x1ZGVzKFwiYWRtaW5pc3RyYXRpdmVfYXJlYV9sZXZlbF8xXCIpKSB7XHJcbiAgICAgICAgICAgICAgICAgIHN0b3JlUHJvZmlsZS5zdGF0ZSA9IGNvbXBvbmVudC5sb25nX25hbWU7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVzLmluY2x1ZGVzKFwiY291bnRyeVwiKSkge1xyXG4gICAgICAgICAgICAgICAgICBzdG9yZVByb2ZpbGUuY291bnRyeSA9IGNvbXBvbmVudC5sb25nX25hbWU7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVzLmluY2x1ZGVzKFwicG9zdGFsX2NvZGVcIikpIHtcclxuICAgICAgICAgICAgICAgICAgc3RvcmVQcm9maWxlLnBpbmNvZGUgPSBjb21wb25lbnQubG9uZ19uYW1lO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChcclxuICAgICAgICAgICAgICAgICAgdHlwZXMuaW5jbHVkZXMoXCJwcmVtaXNlXCIpIHx8XHJcbiAgICAgICAgICAgICAgICAgIHR5cGVzLmluY2x1ZGVzKFwic3VibG9jYWxpdHlfbGV2ZWxfMlwiKSB8fFxyXG4gICAgICAgICAgICAgICAgICB0eXBlcy5pbmNsdWRlcyhcInN1YmxvY2FsaXR5X2xldmVsXzFcIilcclxuICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICBpZiAoY29tcG9uZW50LmxvbmdfbmFtZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHN0b3JlUHJvZmlsZS5hZGRyZXNzICs9IGNvbXBvbmVudC5sb25nX25hbWUgKyBcIixcIjtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBpZiAoc3RvcmVQcm9maWxlLmFkZHJlc3MpIHtcclxuICAgICAgICAgICAgICAgIHN0b3JlUHJvZmlsZS5hZGRyZXNzID0gc3RvcmVQcm9maWxlLmFkZHJlc3Muc2xpY2UoMCwgLTEpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBkYXRhW2ldW1wic3RvcmVQcm9maWxlXCJdID0gc3RvcmVQcm9maWxlO1xyXG4gICAgICAgICAgICAgIHByb2Nlc3NlZEFycmF5LnB1c2goe1xyXG4gICAgICAgICAgICAgICAgc3RvcmVOYW1lOiBkYXRhW2ldLlN0b3JlTmFtZSxcclxuICAgICAgICAgICAgICAgIHN0b3JlVHlwZTogeyB0eXBlOiBkYXRhW2ldLlN0b3JlVHlwZSB9LFxyXG4gICAgICAgICAgICAgICAgZWRnZTogeyBjYW1EZXRhaWxzOiB7IGNhbWVyYXM6IGRhdGFbaV0uQ2FtZXJhQ291bnQgfSB9LFxyXG4gICAgICAgICAgICAgICAgc3BvY0RldGFpbHM6IHtcclxuICAgICAgICAgICAgICAgICAgbmFtZTogZGF0YVtpXS5TcG9jTmFtZSxcclxuICAgICAgICAgICAgICAgICAgZW1haWw6IGRhdGFbaV0uU3BvY0VtYWlsLFxyXG4gICAgICAgICAgICAgICAgICBjb250YWN0OiBkYXRhW2ldLlNwb2NDb250YWN0LnRvU3RyaW5nKCksXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgc3RvcmVQcm9maWxlOiB7XHJcbiAgICAgICAgICAgICAgICAgIC4uLmRhdGFbaV0uc3RvcmVQcm9maWxlLFxyXG4gICAgICAgICAgICAgICAgICAuLi57IHRpbWVab25lOiBkYXRhW2ldLlRpbWVab25lIH0sXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgYnVzaW5lc3NUeXBlOiBkYXRhW2ldLkJ1c2luZXNzVHlwZSxcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLmNhdGNoKChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgICAgIFN3YWwuZmlyZSh7XHJcbiAgICAgICAgICAgICAgICBpY29uOiBcImVycm9yXCIsXHJcbiAgICAgICAgICAgICAgICB0ZXh0OiBgUGxlYXNlIFVwbG9hZCB0aGUgRmlsZSB3aXRoIFZhbGlkIGxhdGl0dWRlIGFuZCBsb25naXR1ZGUgaW4gcm93ICR7XHJcbiAgICAgICAgICAgICAgICAgIGkgKyAxXHJcbiAgICAgICAgICAgICAgICB9YCxcclxuICAgICAgICAgICAgICAgIHNob3dDYW5jZWxCdXR0b246IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgc2hvd0NvbmZpcm1CdXR0b246IHRydWUsXHJcbiAgICAgICAgICAgICAgICBjb25maXJtQnV0dG9uQ29sb3I6IFwiIzAwOUVGN1wiLFxyXG4gICAgICAgICAgICAgICAgaGVpZ2h0QXV0bzogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBjb25maXJtQnV0dG9uVGV4dDogXCJPS1wiLFxyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIHByb21pc2VzLnB1c2gocHJvbWlzZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBQcm9taXNlLmFsbChwcm9taXNlcylcclxuICAgICAgICAgIC50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5zdG9yZVNlcnZpY2VcclxuICAgICAgICAgICAgICAuc3RvcmVCdWxrVXBsb2FkKHsgc3RvcmVzOiBwcm9jZXNzZWRBcnJheSwgY2xpZW50SWQ6IHRoaXMuJGhlYWRlckZpbHRlcnM/LmNsaWVudCB9KVxyXG4gICAgICAgICAgICAgIC5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAgICAgICAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgaWYgKHJlcy5jb2RlID09IDIwMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIFN3YWwuZmlyZSh7XHJcbiAgICAgICAgICAgICAgICAgICAgICBpY29uOiBcInN1Y2Nlc3NcIixcclxuICAgICAgICAgICAgICAgICAgICAgIGhlaWdodEF1dG86IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgaHRtbDogYDxoMz5TdG9yZXMgaGF2ZSBiZWVuIHVwbG9hZGVkIFN1Y2Nlc3NmdWxseSE8L2gzPmAsXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAoZXJyb3I6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICBpZiAoZXJyb3IuY29kZSA9PSA0MDApIHtcclxuICAgICAgICAgICAgICAgICAgICBTd2FsLmZpcmUoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgaWNvbjogXCJlcnJvclwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgdGV4dDogZXJyb3IsXHJcbiAgICAgICAgICAgICAgICAgICAgICBoZWlnaHRBdXRvOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICAgIHNob3dDb25maXJtQnV0dG9uOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgY29uZmlybUJ1dHRvblRleHQ6IFwiT0tcIixcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBTd2FsLmZpcmUoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgaWNvbjogXCJlcnJvclwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgdGV4dDogXCJVbmFibGUgdG8gY3JlYXRlIHN0b3JlcyFcIixcclxuICAgICAgICAgICAgICAgICAgICAgIGhlaWdodEF1dG86IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgc2hvd0NvbmZpcm1CdXR0b246IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICBjb25maXJtQnV0dG9uVGV4dDogXCJPS1wiLFxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICAuY2F0Y2goKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICAgIFN3YWwuZmlyZSh7XHJcbiAgICAgICAgICAgICAgaWNvbjogXCJlcnJvclwiLFxyXG4gICAgICAgICAgICAgIHRleHQ6IFwiVW5hYmxlIHRvIGNyZWF0ZSBzdG9yZXMhXCIsXHJcbiAgICAgICAgICAgICAgaGVpZ2h0QXV0bzogZmFsc2UsXHJcbiAgICAgICAgICAgICAgc2hvd0NvbmZpcm1CdXR0b246IHRydWUsXHJcbiAgICAgICAgICAgICAgY29uZmlybUJ1dHRvblRleHQ6IFwiT0tcIixcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgfTtcclxuICAgICAgJChcIiNrdF9jcmVhdGVfYWNjb3VudF9mb3JtX2FjY291bnRfdHlwZV9wZXJzb25hbFwiKS52YWwoXCJcIik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB2YWxpZGF0ZUZpZWxkKFxyXG4gICAgdmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCB8IG51bGwgfCBudW1iZXIsXHJcbiAgICBmaWVsZE5hbWU6IHN0cmluZyxcclxuICAgIHJvdzogbnVtYmVyLFxyXG4gICAgcmVnZXg/OiBSZWdFeHBcclxuICApOiBzdHJpbmcgfCBudWxsIHtcclxuICAgIGlmICh0eXBlb2YgdmFsdWUgIT09IFwic3RyaW5nXCIgJiYgdHlwZW9mIHZhbHVlICE9PSBcIm51bWJlclwiKSB7XHJcbiAgICAgIHJldHVybiBgSW52YWxpZCB2YWx1ZSBmb3IgJHtmaWVsZE5hbWUudG9Mb3dlckNhc2UoKX0gaW4gcm93ICR7cm93ICsgMX1gO1xyXG4gICAgfVxyXG4gICAgY29uc3QgZGVmYXVsdFZhbHVlID0gYHBsZWFzZSBlbnRlciB0aGUgJHtmaWVsZE5hbWVcclxuICAgICAgLnRvTG93ZXJDYXNlKClcclxuICAgICAgLnJlcGxhY2UoL1xcYlxcdy9nLCAobCkgPT4gbC50b1VwcGVyQ2FzZSgpKX1gO1xyXG4gICAgaWYgKCF2YWx1ZSkge1xyXG4gICAgICByZXR1cm4gYFBsZWFzZSBlbnRlciAke2ZpZWxkTmFtZS50b0xvd2VyQ2FzZSgpfSBpbiByb3cgJHtyb3cgKyAxfWA7XHJcbiAgICB9XHJcbiAgICBpZiAodHlwZW9mIHZhbHVlID09IFwic3RyaW5nXCIpIHtcclxuICAgICAgaWYgKHZhbHVlLnRyaW0oKSA9PT0gZGVmYXVsdFZhbHVlLnRyaW0oKSkge1xyXG4gICAgICAgIHJldHVybiBgSW52YWxpZCB2YWx1ZSBmb3IgJHtmaWVsZE5hbWUudG9Mb3dlckNhc2UoKX0gaW4gcm93ICR7cm93ICsgMX1gO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChyZWdleCAmJiAhcmVnZXgudGVzdCh2YWx1ZS50cmltKCkpKSB7XHJcbiAgICAgICAgcmV0dXJuIGBQbGVhc2UgZW50ZXIgdmFsaWQgJHtmaWVsZE5hbWUudG9Mb3dlckNhc2UoKX0gaW4gcm93ICR7XHJcbiAgICAgICAgICByb3cgKyAxXHJcbiAgICAgICAgfWA7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwiY2FyZFwiPlxyXG4gIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHkgZC1mbGV4IGZsZXgtY2VudGVyIGZsZXgtY29sdW1uIHAtOVwiPlxyXG4gICAgPGRpdiBjbGFzcz1cIm1iLTVcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cInN5bWJvbCBzeW1ib2wtNzVweCBzeW1ib2wtY2lyY2xlXCI+XHJcbiAgICAgICAgPGltZyBhbHQ9XCJQaWNcIiBzcmM9XCIuL2Fzc2V0cy90YW5nby9JY29ucy9hZGQtc3RvcmUtaWNvbi5zdmdcIj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxhIGNsYXNzPVwiZnMtNCB0ZXh0LWdyYXktODAwIHRleHQtaG92ZXItcHJpbWFyeSBmdy1ib2xkZXIgbWItMCB0aXRsZSBjdXJzb3ItcG9pbnRlclwiPiBBZGQgc3RvcmVzIDwvYT5cclxuICAgIDxkaXYgY2xhc3M9XCJmdy1ib2xkIHRleHQtZ3JheS01MDAgbXktNlwiPlxyXG4gICAgICA8dWwgY2xhc3M9XCJ0ZXh0LWdyYXktNDAwIGZ3LWJvbGQgZnMtNlwiPlxyXG4gICAgICAgIDxsaT5Vc2UgdGhlIHRlbXBsYXRlIHRvIHVwbG9hZCBtdWx0aXBsZSBzdG9yZXMgYXQgb25jZS48L2xpPlxyXG4gICAgICAgIDxsaT5Eb3dubG9hZCB0aGUgdGVtcGxhdGUgaGVyZSAtXHJcbiAgICAgICAgICA8YSBocmVmPVwiLi4vLi4vYXNzZXRzL2ZpbGVzL3N0b3Jlc1VwbG9hZFRlbXBsYXRlLnhsc3hcIiBkb3dubG9hZD5cclxuICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgIGQ9XCJNMTcuNSAxMi41VjE1LjgzMzNDMTcuNSAxNi4yNzU0IDE3LjMyNDQgMTYuNjk5MyAxNy4wMTE4IDE3LjAxMThDMTYuNjk5MyAxNy4zMjQ0IDE2LjI3NTQgMTcuNSAxNS44MzMzIDE3LjVINC4xNjY2N0MzLjcyNDY0IDE3LjUgMy4zMDA3MiAxNy4zMjQ0IDIuOTg4MTYgMTcuMDExOEMyLjY3NTU5IDE2LjY5OTMgMi41IDE2LjI3NTQgMi41IDE1LjgzMzNWMTIuNU01LjgzMzMzIDguMzMzMzNMMTAgMTIuNU0xMCAxMi41TDE0LjE2NjcgOC4zMzMzM00xMCAxMi41VjIuNVwiXHJcbiAgICAgICAgICAgICAgICBzdHJva2U9XCIjMDA5QkYzXCIgc3Ryb2tlLXdpZHRoPVwiMS42N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRlbXBsYXRlIG1zLTJcIj5Eb3dubG9hZCBUZW1wbGF0ZTwvc3Bhbj5cclxuICAgICAgICAgIDwvYT5cclxuICAgICAgICA8L2xpPlxyXG4gICAgICAgIDxsaT5BZGQgeW91ciBkYXRhIHRvIHRoZSBUZW1wbGF0ZSBGaWxlPC9saT5cclxuICAgICAgICA8bGk+VXBsb2FkIGl0IGJlbG93IGZvciBwcm9jZXNzaW5nPC9saT5cclxuICAgICAgPC91bD5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LWNlbnRlciBmbGV4LXdyYXAgbWItNVwiPlxyXG4gICAgICA8aW5wdXQgbmFtZT1cImFjY291bnRUeXBlXCIgdHlwZT1cInJhZGlvXCIgaWQ9XCJrdF9jcmVhdGVfYWNjb3VudF9mb3JtX2FjY291bnRfdHlwZV9wZXJzb25hbFwiIHZhbHVlPVwicGVyc29uYWxcIlxyXG4gICAgICAgIGNsYXNzPVwiYnRuLWNoZWNrXCIgbmctcmVmbGVjdC1uYW1lPVwiYWNjb3VudFR5cGVcIiBuZy1yZWZsZWN0LWZvcm0tY29udHJvbC1uYW1lPVwiYWNjb3VudFR5cGVcIlxyXG4gICAgICAgIChjaGFuZ2UpPVwib25VcGxvYWQoJGV2ZW50KVwiXHJcbiAgICAgICAgbmctcmVmbGVjdC12YWx1ZT1cInBlcnNvbmFsXCIgdHlwZT1cImZpbGVcIiAjaW5wdXRGaWxlIC8+XHJcbiAgICAgIDxsYWJlbCBmb3I9XCJrdF9jcmVhdGVfYWNjb3VudF9mb3JtX2FjY291bnRfdHlwZV9wZXJzb25hbFwiXHJcbiAgICAgICAgY2xhc3M9XCJidG4gYnRuLW91dGxpbmUgYnRuLXByaW1hcnkgYmctcHJpbWFyeSBidG4tb3V0bGluZS1kZWZhdWx0IHJvdW5kZWQtMyB3LTUwIHAtNCBtdC01XCI+PHNwYW5cclxuICAgICAgICAgIGNsYXNzPVwiZnctYm9sZCBmcy00XCI+XHJcbiAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjIxXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIxIDIwXCJcclxuICAgICAgICAgICAgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICBkPVwiTTE4IDEyLjVWMTUuODMzM0MxOCAxNi4yNzU0IDE3LjgyNDQgMTYuNjk5MyAxNy41MTE4IDE3LjAxMThDMTcuMTk5MyAxNy4zMjQ0IDE2Ljc3NTQgMTcuNSAxNi4zMzMzIDE3LjVINC42NjY2N0M0LjIyNDY0IDE3LjUgMy44MDA3MiAxNy4zMjQ0IDMuNDg4MTYgMTcuMDExOEMzLjE3NTU5IDE2LjY5OTMgMyAxNi4yNzU0IDMgMTUuODMzM1YxMi41TTE0LjY2NjcgNi42NjY2N0wxMC41IDIuNU0xMC41IDIuNUw2LjMzMzMzIDYuNjY2NjdNMTAuNSAyLjVWMTIuNVwiXHJcbiAgICAgICAgICAgICAgc3Ryb2tlPVwid2hpdGVcIiBzdHJva2Utd2lkdGg9XCIxLjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgIDwvc3ZnPiBcclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC13aGl0ZSBteC0yXCI+QWRkIE11bHRpcGxlIFN0b3Jlczwvc3Bhbj48L3NwYW4+XHJcbiAgICAgIDwvbGFiZWw+XHJcbiAgICAgIDxwIGNsYXNzPVwidGV4dC1ncmF5LTQwMCBmdy1ib2xkIG15LTNcIj5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cImxpbmUtYmcgXCI+PHN2ZyB3aWR0aD1cIjIyNFwiIGhlaWdodD1cIjJcIiB2aWV3Qm94PVwiMCAwIDEyNCAyXCIgZmlsbD1cIm5vbmVcIlxyXG4gICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICAgICAgICAgIDxyZWN0IHk9XCIwLjVcIiB3aWR0aD1cIjEyMy4zMzNcIiBoZWlnaHQ9XCIxXCIgZmlsbD1cIiNFQUVDRjBcIiAvPlxyXG4gICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgPC9zcGFuPjxzcGFuIGNsYXNzPVwibXgtMlwiPk9yIDwvc3Bhbj4gPHNwYW4gY2xhc3M9XCJsaW5lLWJnIFwiPjxzdmcgd2lkdGg9XCIyMjRcIiBoZWlnaHQ9XCIyXCIgdmlld0JveD1cIjAgMCAxMjQgMlwiXHJcbiAgICAgICAgICAgIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxyXG4gICAgICAgICAgICA8cmVjdCB5PVwiMC41XCIgd2lkdGg9XCIxMjMuMzMzXCIgaGVpZ2h0PVwiMVwiIGZpbGw9XCIjRUFFQ0YwXCIgLz5cclxuICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgIDwvc3Bhbj5cclxuICAgICAgPC9wPlxyXG4gICAgICA8aW5wdXQgdHlwZT1cInJhZGlvXCIgaWQ9XCJrdF9hY2NvdW50X3RlYW1fc2l6ZV9zZWxlY3RfMVwiIHZhbHVlPVwiMS0xXCIgcm91dGVyTGluaz1cIi9tYW5hZ2Uvc3RvcmVzL2FkZC1zaW5nbGUtc3RvcmVcIlxyXG4gICAgICAgIGNsYXNzPVwiYnRuLWNoZWNrIG5nLXVudG91Y2hlZCBuZy1wcmlzdGluZSBuZy12YWxpZFwiIC8+XHJcbiAgICAgIDxsYWJlbCBmb3I9XCJrdF9hY2NvdW50X3RlYW1fc2l6ZV9zZWxlY3RfMVwiXHJcbiAgICAgICAgY2xhc3M9XCJidG4gYnRuLW91dGxpbmUgYnRuLW91dGxpbmUtZGVmYXVsdCByb3VuZGVkLTMgdy01MCBwLTQgbXQtM1wiPlxyXG4gICAgICAgIDxzdmcgd2lkdGg9XCIxN1wiIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAxNyAxNlwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxyXG4gICAgICAgICAgPHBhdGggZD1cIk0xLjE4MDE1IDMuODAzNzhMMS4xMjY5IDMuODg2OTVDMC41Njg4NjMgNC44NzQgMS4xNjQ2OSA2LjEyMTQzIDIuMjM2MyA2LjI2NDUyQzIuMzMzMzkgNi4yNzYzOSAyLjQyMzczIDYuMjgyNjcgMi41MTIgNi4yODI2N0MzLjA5MDE1IDYuMjgyNjcgMy42MDEzMiA2LjAzNDY1IDMuOTU3NTkgNS42NDc5Mkw0LjUxMDkzIDUuMDQ3M0w1LjA2MjM4IDUuNjQ5NjVDNS40MTQzMiA2LjAzNDA3IDUuOTI0MzMgNi4yODI2NyA2LjUwNjM5IDYuMjgyNjdDNy4wODU4MyA2LjI4MjY3IDcuNTk4NzcgNi4wMzM3MiA3Ljk1MDM5IDUuNjQ5NjVMOC41MDM1OCA1LjA0NTQxTDkuMDU2NzYgNS42NDk2NUM5LjQwODM5IDYuMDMzNzIgOS45MjEzMyA2LjI4MjY3IDEwLjUwMDggNi4yODI2N0MxMS4wODAyIDYuMjgyNjcgMTEuNTkzMiA2LjAzMzcyIDExLjk0NDggNS42NDk2NUwxMi40OTggNS4wNDU0MUwxMy4wNTExIDUuNjQ5NjVDMTMuNDAyOCA2LjAzMzcyIDEzLjkxNTcgNi4yODI2NyAxNC40OTUyIDYuMjgyNjdDMTQuNTgwNSA2LjI4MjY3IDE0LjY3MzYgNi4yNzYzOCAxNC43NyA2LjI2NDYyQzE1Ljg2NTIgNi4xMTUzIDE2LjQ2MyA0LjgwMTAzIDE1LjgyNDMgMy44MDQyOEMxNS44MjQyIDMuODA0MjMgMTUuODI0MiAzLjgwNDE3IDE1LjgyNDIgMy44MDQxMUwxNC4wNjYgMS4wNjI3TDE0LjA2NiAxLjA2MjdMMTQuMDY1MSAxLjA2MTIzQzE0LjA0OTkgMS4wMzc0IDE0LjAxMjQgMS4wMTE4NCAxMy45NjUyIDEuMDExODRIMy4wMzU4MUMyLjk4ODY2IDEuMDExODQgMi45NTExNyAxLjAzNzQgMi45MzU5NyAxLjA2MTI0TDIuOTM1MzUgMS4wNjIyTDEuMTgwMTUgMy44MDM3OFpNMTQuMTUxNiA4LjczNzA2VjExLjg2OVYxMi42MTlIMTMuNDAxNkgzLjU5OTQzSDIuODQ5NDNWMTEuODY5VjguNzM3NTNDMi43MzkyIDguNzQ1NzMgMi42Mjc2OCA4Ljc0OTk0IDIuNTE1MDcgOC43NDk5NEMyLjQ3Mjc2IDguNzQ5OTQgMi40MzA3NCA4Ljc0OTMxIDIuMzg5IDguNzQ4MDlWMTEuODY5VjEzLjgwMzVDMi4zODkgMTQuNDQ2OSAyLjkyMjkgMTQuOTg4IDMuNTk5NDMgMTQuOTg4SDEzLjQwMTZDMTQuMDc4MSAxNC45ODggMTQuNjEyIDE0LjQ0NjkgMTQuNjEyIDEzLjgwMzVWMTEuODY5VjguNzQ4MjdDMTQuNTcyMiA4Ljc0OTM3IDE0LjUzMjIgOC43NDk5NCAxNC40OTIxIDguNzQ5OTRDMTQuMzc3NyA4Ljc0OTk0IDE0LjI2NDEgOC43NDU1OSAxNC4xNTE2IDguNzM3MDZaXCIgc3Ryb2tlPVwiIzM0NDA1NFwiIHN0cm9rZS13aWR0aD1cIjEuNVwiLz5cclxuICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwiZnctYm9sZCBmcy00IG14LTJcIj5cclxuICAgICAgICAgICAgQWRkIFNpbmdsZVxyXG4gICAgICAgICAgU3RvcmU8L3NwYW4+PC9sYWJlbD5cclxuICAgIDwvZGl2PlxyXG4gIFxyXG4gIDwvZGl2PlxyXG4iXX0=
214
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkLXN0b3Jlcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby1tYW5hZ2Utc3RvcmVzL3NyYy9saWIvY29tcG9uZW50cy9hZGQtc3RvcmVzL2FkZC1zdG9yZXMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFuZ28tbWFuYWdlLXN0b3Jlcy9zcmMvbGliL2NvbXBvbmVudHMvYWRkLXN0b3Jlcy9hZGQtc3RvcmVzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWMsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2pFLE9BQU8sSUFBSSxNQUFNLGFBQWEsQ0FBQztBQUMvQixPQUFPLEVBQVksSUFBSSxFQUFFLEtBQUssRUFBYSxNQUFNLE1BQU0sQ0FBQzs7Ozs7QUFheEQsTUFBTSxPQUFPLGtCQUFrQjtJQU9UO0lBQW9DO0lBQXlCO0lBTnpELFNBQVMsQ0FBYTtJQUU5QyxVQUFVLEdBQVcsa0JBQWtCLENBQUM7SUFDeEMsVUFBVSxHQUFXLDRCQUE0QixDQUFDO0lBQ2xELGNBQWMsQ0FBTTtJQUVwQixZQUFvQixZQUEyQixFQUFTLEVBQWdCLEVBQVMsTUFBYztRQUEzRSxpQkFBWSxHQUFaLFlBQVksQ0FBZTtRQUFTLE9BQUUsR0FBRixFQUFFLENBQWM7UUFBUyxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQzdGLElBQUksSUFBSSxHQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ3hFLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO0lBQzdCLENBQUM7SUFFRCxRQUFRLENBQUMsQ0FBTTtRQUNiLElBQUksSUFBcUIsQ0FBQztRQUMxQixNQUFNLE1BQU0sR0FBK0IsQ0FBQyxDQUFDLE1B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QUNELE1BQU0sWUFBWSxHQUFHLG9CQUFvQixTQUFTO2FBQy9DLFdBQVcsRUFBRTthQUNiLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxFQUFFLENBQUM7UUFDOUMsSUFBSSxDQUFDLEtBQUssRUFBRTtZQUNWLE9BQU8sZ0JBQWdCLFNBQVMsQ0FBQyxXQUFXLEVBQUUsV0FBVyxHQUFHLEdBQUcsQ0FBQyxFQUFFLENBQUM7U0FDcEU7UUFDRCxJQUFJLE9BQU8sS0FBSyxJQUFJLFFBQVEsRUFBRTtZQUM1QixJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUUsS0FBSyxZQUFZLENBQUMsSUFBSSxFQUFFLEVBQUU7Z0JBQ3hDLE9BQU8scUJBQXFCLFNBQVMsQ0FBQyxXQUFXLEVBQUUsV0FBVyxHQUFHLEdBQUcsQ0FBQyxFQUFFLENBQUM7YUFDekU7WUFDRCxJQUFJLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUU7Z0JBQ3RDLE9BQU8sc0JBQXNCLFNBQVMsQ0FBQyxXQUFXLEVBQUUsV0FDbEQsR0FBRyxHQUFHLENBQ1IsRUFBRSxDQUFDO2FBQ0o7U0FDRjtRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQzt1R0E5TlUsa0JBQWtCOzJGQUFsQixrQkFBa0IsOEpDZi9CLDByS0FpRUE7OzJGRGxEYSxrQkFBa0I7a0JBTDlCLFNBQVM7K0JBQ0UsZ0JBQWdCO2tJQUtGLFNBQVM7c0JBQWhDLFNBQVM7dUJBQUMsV0FBVyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgVmlld0NoaWxkIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IFN3YWwgZnJvbSBcInN3ZWV0YWxlcnQyXCI7XHJcbmltcG9ydCB7IFdvcmtCb29rLCByZWFkLCB1dGlscywgV29ya1NoZWV0IH0gZnJvbSBcInhsc3hcIjtcclxuaW1wb3J0IHsgU3RvcmVzU2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9zdG9yZXMuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBTdG9yZUJ1bGtJdGVtIH0gZnJvbSBcIi4uLy4uL2ludGVyZmFjZXMvc3RvcmUuaW50ZXJmYWNlXCI7XHJcbmltcG9ydCB7IFRvYXN0U2VydmljZSB9IGZyb20gXCJ0YW5nby1hcHAtdWktc2hhcmVkXCI7XHJcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gXCJAYW5ndWxhci9yb3V0ZXJcIjtcclxuXHJcbmRlY2xhcmUgdmFyICQ6IGFueTtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiBcImxpYi1hZGQtc3RvcmVzXCIsXHJcbiAgdGVtcGxhdGVVcmw6IFwiLi9hZGQtc3RvcmVzLmNvbXBvbmVudC5odG1sXCIsXHJcbiAgc3R5bGVVcmw6IFwiLi9hZGQtc3RvcmVzLmNvbXBvbmVudC5zY3NzXCIsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBZGRTdG9yZXNDb21wb25lbnQge1xyXG4gIEBWaWV3Q2hpbGQoXCJpbnB1dEZpbGVcIikgaW5wdXRGaWxlOiBFbGVtZW50UmVmO1xyXG5cclxuICBwaG9uZVJlZ2V4OiBSZWdFeHAgPSAvXihcXGR7M30pP1xcZHsxMH0kLztcclxuICBlbWFpbFJlZ2V4OiBSZWdFeHAgPSAvXlteXFxzQF0rQFteXFxzQF0rXFwuW15cXHNAXSskLztcclxuICAkaGVhZGVyRmlsdGVyczogYW55O1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHN0b3JlU2VydmljZTogU3RvcmVzU2VydmljZSxwcml2YXRlIHRzOiBUb2FzdFNlcnZpY2UscHJpdmF0ZSByb3V0ZXI6IFJvdXRlcikge1xyXG4gICAgbGV0IGRhdGE6YW55ID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnaGVhZGVyLWZpbHRlcnMnKSB8fCAnJyk7XHJcbiAgICB0aGlzLiRoZWFkZXJGaWx0ZXJzID0gZGF0YTtcclxuICB9XHJcblxyXG4gIG9uVXBsb2FkKGU6IGFueSkge1xyXG4gICAgbGV0IGRhdGE6IFN0b3JlQnVsa0l0ZW1bXTtcclxuICAgIGNvbnN0IHRhcmdldDogRGF0YVRyYW5zZmVyID0gPERhdGFUcmFuc2Zlcj5lLnRhcmdldDtcclxuICAgIGlmICh0YXJnZXQuZmlsZXMubGVuZ3RoID4gMSkge1xyXG4gICAgICB0aGlzLmlucHV0RmlsZS5uYXRpdmVFbGVtZW50LnZhbHVlID0gXCJcIjtcclxuICAgIH1cclxuICAgIGlmICghIXRhcmdldC5maWxlc1swXS5uYW1lLm1hdGNoKC8oLnhsc3wueGxzeCkvKSkge1xyXG4gICAgICBjb25zdCByZWFkZXI6IEZpbGVSZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xyXG4gICAgICByZWFkZXIub25sb2FkID0gKGU6IGFueSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGJzdHI6IHN0cmluZyA9IGUudGFyZ2V0LnJlc3VsdDtcclxuICAgICAgICBjb25zdCB3YjogV29ya0Jvb2sgPSByZWFkKGJzdHIsIHsgdHlwZTogXCJiaW5hcnlcIiB9KTtcclxuICAgICAgICBjb25zdCB3c25hbWU6IHN0cmluZyA9IHdiLlNoZWV0TmFtZXNbMF07XHJcbiAgICAgICAgY29uc3Qgd3M6IFdvcmtTaGVldCA9IHdiLlNoZWV0c1t3c25hbWVdO1xyXG4gICAgICAgIGlmICh3Yi5TaGVldE5hbWVzWzBdICE9IFwiU3RvcmVEYXRhXCIpIHtcclxuICAgICAgICAgIHRoaXMudHMuZ2V0RXJyb3JUb2FzdChcIlBsZWFzZSBVcGxvYWQgdGhlIFZhbGlkIEZpbGVcIik7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGRhdGEgPSB1dGlscy5zaGVldF90b19qc29uKHdzKTtcclxuICAgICAgfTtcclxuXHJcbiAgICAgIHJlYWRlci5yZWFkQXNCaW5hcnlTdHJpbmcodGFyZ2V0LmZpbGVzWzBdKTtcclxuXHJcbiAgICAgIHJlYWRlci5vbmxvYWRlbmQgPSBhc3luYyAoZSkgPT4ge1xyXG4gICAgICAgIGxldCBwcm9jZXNzZWRBcnJheTogYW55W10gPSBbXTtcclxuICAgICAgICBsZXQgZXJyTXNnczogYW55W10gPSBbXTtcclxuICAgICAgICBsZXQgcHJvbWlzZXMgPSBbXTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgIGVyck1zZ3MucHVzaCh0aGlzLnZhbGlkYXRlRmllbGQoZGF0YVtpXS5TdG9yZU5hbWUsIFwic3RvcmUgbmFtZVwiLCBpKSk7XHJcbiAgICAgICAgICBlcnJNc2dzLnB1c2godGhpcy52YWxpZGF0ZUZpZWxkKGRhdGFbaV0uU3RvcmVUeXBlLCBcInN0b3JlIHR5cGVcIiwgaSkpO1xyXG4gICAgICAgICAgZXJyTXNncy5wdXNoKHRoaXMudmFsaWRhdGVGaWVsZChkYXRhW2ldLlNwb2NOYW1lLCBcInNwb2MgbmFtZVwiLCBpKSk7XHJcbiAgICAgICAgICBlcnJNc2dzLnB1c2goXHJcbiAgICAgICAgICAgIHRoaXMudmFsaWRhdGVGaWVsZChkYXRhW2ldLkJ1c2luZXNzVHlwZSwgXCJidXNpbmVzcyB0eXBlXCIsIGkpXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgZXJyTXNncy5wdXNoKFxyXG4gICAgICAgICAgICB0aGlzLnZhbGlkYXRlRmllbGQoXHJcbiAgICAgICAgICAgICAgZGF0YVtpXS5TcG9jRW1haWwsXHJcbiAgICAgICAgICAgICAgXCJzcG9jIGVtYWlsXCIsXHJcbiAgICAgICAgICAgICAgaSxcclxuICAgICAgICAgICAgICB0aGlzLmVtYWlsUmVnZXhcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGVyck1zZ3MucHVzaChcclxuICAgICAgICAgICAgdGhpcy52YWxpZGF0ZUZpZWxkKFxyXG4gICAgICAgICAgICAgIGRhdGFbaV0uU3BvY0NvbnRhY3QsXHJcbiAgICAgICAgICAgICAgXCJzcG9jIGNvbnRhY3RcIixcclxuICAgICAgICAgICAgICBpLFxyXG4gICAgICAgICAgICAgIHRoaXMucGhvbmVSZWdleFxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgZXJyTXNncy5wdXNoKHRoaXMudmFsaWRhdGVGaWVsZChkYXRhW2ldLlRpbWVab25lLCBcInRpbWV6b25lXCIsIGkpKTtcclxuICAgICAgICAgIC8vIGVyck1zZ3MucHVzaChcclxuICAgICAgICAgIC8vICAgdGhpcy52YWxpZGF0ZUZpZWxkKGRhdGFbaV0uQ2FtZXJhQ291bnQsIFwiY2FtZXJhIGNvdW50XCIsIGkpXHJcbiAgICAgICAgICAvLyApO1xyXG4gICAgICAgICAgZXJyTXNncy5wdXNoKHRoaXMudmFsaWRhdGVGaWVsZChkYXRhW2ldLkxhdGl0dWRlLCBcImxhdGl0dWRlXCIsIGkpKTtcclxuICAgICAgICAgIGVyck1zZ3MucHVzaCh0aGlzLnZhbGlkYXRlRmllbGQoZGF0YVtpXS5Mb25naXR1ZGUsIFwibG9uZ2l0dWRlXCIsIGkpKTtcclxuXHJcbiAgICAgICAgICBlcnJNc2dzID0gZXJyTXNncy5maWx0ZXIoKHgpID0+IHggIT0gbnVsbCk7XHJcbiAgICAgICAgICBpZiAoZXJyTXNncy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGxldCBlcnJvcnMgPSBlcnJNc2dzLmpvaW4oXCI8YnI+XCIpO1xyXG4gICAgICAgICAgICBTd2FsLmZpcmUoe1xyXG4gICAgICAgICAgICAgIGljb246IFwiZXJyb3JcIixcclxuICAgICAgICAgICAgICBodG1sOiBlcnJvcnMsXHJcbiAgICAgICAgICAgICAgY3VzdG9tQ2xhc3M6IHtcclxuICAgICAgICAgICAgICAgIGh0bWxDb250YWluZXI6IFwiZXJyb3ItaHRtbGNvbnRhaW5lci1jbGFzc1wiLFxyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgaGVpZ2h0QXV0bzogZmFsc2UsXHJcbiAgICAgICAgICAgICAgc2hvd0NhbmNlbEJ1dHRvbjogZmFsc2UsXHJcbiAgICAgICAgICAgICAgc2hvd0NvbmZpcm1CdXR0b246IHRydWUsXHJcbiAgICAgICAgICAgICAgY29uZmlybUJ1dHRvbkNvbG9yOiBcIiMwMDlFRjdcIixcclxuICAgICAgICAgICAgICBjb25maXJtQnV0dG9uVGV4dDogXCJPS1wiLFxyXG4gICAgICAgICAgICB9KS50aGVuKChyZXN1bHQpID0+IHt9KTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGNvbnN0IHByb21pc2UgPSB0aGlzLnN0b3JlU2VydmljZVxyXG4gICAgICAgICAgICAuZ2V0QWRkcmVzcyhOdW1iZXIoZGF0YVtpXS5MYXRpdHVkZSksIE51bWJlcihkYXRhW2ldLkxvbmdpdHVkZSkpXHJcbiAgICAgICAgICAgIC50aGVuKChwbGFjZURhdGE6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgIGxldCBzdG9yZVByb2ZpbGU6IGFueSA9IHtcclxuICAgICAgICAgICAgICAgIGFkZHJlc3M6IFwiXCIsXHJcbiAgICAgICAgICAgICAgICBjb3VudHJ5OiBcIlwiLFxyXG4gICAgICAgICAgICAgICAgc3RhdGU6IFwiXCIsXHJcbiAgICAgICAgICAgICAgICBjaXR5OiBcIlwiLFxyXG4gICAgICAgICAgICAgICAgcGluY29kZTogXCJcIixcclxuICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgIGZvciAoY29uc3QgY29tcG9uZW50IG9mIHBsYWNlRGF0YS5hZGRyZXNzX2NvbXBvbmVudHMpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHR5cGVzID0gY29tcG9uZW50LnR5cGVzO1xyXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVzLmluY2x1ZGVzKFwibG9jYWxpdHlcIikpIHtcclxuICAgICAgICAgICAgICAgICAgc3RvcmVQcm9maWxlLmNpdHkgPSBjb21wb25lbnQubG9uZ19uYW1lO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlcy5pbmNsdWRlcyhcImFkbWluaXN0cmF0aXZlX2FyZWFfbGV2ZWxfMVwiKSkge1xyXG4gICAgICAgICAgICAgICAgICBzdG9yZVByb2ZpbGUuc3RhdGUgPSBjb21wb25lbnQubG9uZ19uYW1lO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlcy5pbmNsdWRlcyhcImNvdW50cnlcIikpIHtcclxuICAgICAgICAgICAgICAgICAgc3RvcmVQcm9maWxlLmNvdW50cnkgPSBjb21wb25lbnQubG9uZ19uYW1lO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlcy5pbmNsdWRlcyhcInBvc3RhbF9jb2RlXCIpKSB7XHJcbiAgICAgICAgICAgICAgICAgIHN0b3JlUHJvZmlsZS5waW5jb2RlID0gY29tcG9uZW50LmxvbmdfbmFtZTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgICAgICAgICAgICAgIHR5cGVzLmluY2x1ZGVzKFwicHJlbWlzZVwiKSB8fFxyXG4gICAgICAgICAgICAgICAgICB0eXBlcy5pbmNsdWRlcyhcInN1YmxvY2FsaXR5X2xldmVsXzJcIikgfHxcclxuICAgICAgICAgICAgICAgICAgdHlwZXMuaW5jbHVkZXMoXCJzdWJsb2NhbGl0eV9sZXZlbF8xXCIpXHJcbiAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgaWYgKGNvbXBvbmVudC5sb25nX25hbWUpIHtcclxuICAgICAgICAgICAgICAgICAgICBzdG9yZVByb2ZpbGUuYWRkcmVzcyArPSBjb21wb25lbnQubG9uZ19uYW1lICsgXCIsXCI7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgaWYgKHN0b3JlUHJvZmlsZS5hZGRyZXNzKSB7XHJcbiAgICAgICAgICAgICAgICBzdG9yZVByb2ZpbGUuYWRkcmVzcyA9IHN0b3JlUHJvZmlsZS5hZGRyZXNzLnNsaWNlKDAsIC0xKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgZGF0YVtpXVtcInN0b3JlUHJvZmlsZVwiXSA9IHN0b3JlUHJvZmlsZTtcclxuICAgICAgICAgICAgICBwcm9jZXNzZWRBcnJheS5wdXNoKHtcclxuICAgICAgICAgICAgICAgIHN0b3JlTmFtZTogZGF0YVtpXS5TdG9yZU5hbWUsXHJcbiAgICAgICAgICAgICAgICBzdG9yZVR5cGU6IHsgdHlwZTogZGF0YVtpXS5TdG9yZVR5cGUgfSxcclxuICAgICAgICAgICAgICAgIC8vIGVkZ2U6IHsgY2FtRGV0YWlsczogeyBjYW1lcmFzOiBkYXRhW2ldLkNhbWVyYUNvdW50IH0gfSxcclxuICAgICAgICAgICAgICAgIHNwb2NEZXRhaWxzOiB7XHJcbiAgICAgICAgICAgICAgICAgIG5hbWU6IGRhdGFbaV0uU3BvY05hbWUsXHJcbiAgICAgICAgICAgICAgICAgIGVtYWlsOiBkYXRhW2ldLlNwb2NFbWFpbCxcclxuICAgICAgICAgICAgICAgICAgY29udGFjdDogZGF0YVtpXS5TcG9jQ29udGFjdC50b1N0cmluZygpLFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHN0b3JlUHJvZmlsZToge1xyXG4gICAgICAgICAgICAgICAgICAuLi5kYXRhW2ldLnN0b3JlUHJvZmlsZSxcclxuICAgICAgICAgICAgICAgICAgLi4ueyB0aW1lWm9uZTogZGF0YVtpXS5UaW1lWm9uZSB9LFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGJ1c2luZXNzVHlwZTogZGF0YVtpXS5CdXNpbmVzc1R5cGUsXHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5jYXRjaCgoZXJyb3IpID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLnRzLmdldEVycm9yVG9hc3QoXHJcbiAgICAgICAgICAgICAgICBgUGxlYXNlIFVwbG9hZCB0aGUgRmlsZSB3aXRoIFZhbGlkIGxhdGl0dWRlIGFuZCBsb25naXR1ZGUgaW4gcm93ICR7XHJcbiAgICAgICAgICAgICAgICAgIGkgKyAxXHJcbiAgICAgICAgICAgICAgICB9YFxyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgcHJvbWlzZXMucHVzaChwcm9taXNlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIFByb21pc2UuYWxsKHByb21pc2VzKVxyXG4gICAgICAgICAgLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnN0b3JlU2VydmljZVxyXG4gICAgICAgICAgICAgIC5zdG9yZUJ1bGtVcGxvYWQoe1xyXG4gICAgICAgICAgICAgICAgc3RvcmVzOiBwcm9jZXNzZWRBcnJheSxcclxuICAgICAgICAgICAgICAgIGNsaWVudElkOiB0aGlzLiRoZWFkZXJGaWx0ZXJzPy5jbGllbnQsXHJcbiAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICAgICAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICBpZiAocmVzICYmIHJlcy5jb2RlID09IDIwMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudHMuZ2V0U3VjY2Vzc1RvYXN0KFwiU3RvcmVzIGhhdmUgYmVlbiB1cGxvYWRlZCBTdWNjZXNzZnVsbHkhXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKHJlcy5kYXRhLnN0b3JlcyAmJiByZXMuZGF0YS5zdG9yZXMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBsZXQgYnVsa1RpY2tldHNCb2R5OiBhbnkgPSByZXMuZGF0YS5zdG9yZXMubWFwKChzdG9yZUlkOmFueSk9PntcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBzdG9yZUlkOiBzdG9yZUlkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIERhdGU6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKS5zcGxpdChcIlRcIilbMF0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaXNzdWVUeXBlOiBcImluc3RhbGxhdGlvblwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0b3JlU2VydmljZS5idWxrSW5mcmFUaWNrZXQoYnVsa1RpY2tldHNCb2R5KS5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXh0OihyZXM6YW55KT0+e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHJlcyAmJiByZXMuY29kZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50cy5nZXRTdWNjZXNzVG9hc3QoJ1N0b3JlIEluc3RhbGxhdGlvbiBUaWNrZXRzIGNyZWF0ZWQgc3VjY2Vzc2Z1bGx5IScpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW1wiL21hbmFnZS9zdG9yZXNcIl0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I6KGVycjphbnkpPT57XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50cy5nZXRFcnJvclRvYXN0KCdVbmFibGUgdG8gY3JlYXRlIHN0b3JlIGluc3RhbGxhdGlvbiBUaWNrZXRzIScpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBlcnJvcjogKGVycm9yOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgaWYgKGVycm9yLmNvZGUgPT0gNDAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50cy5nZXRFcnJvclRvYXN0KGVycm9yKTtcclxuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRzLmdldEVycm9yVG9hc3QoXCJVbmFibGUgdG8gY3JlYXRlIHN0b3JlcyFcIik7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgLmNhdGNoKChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnRzLmdldEVycm9yVG9hc3QoXCJVbmFibGUgdG8gY3JlYXRlIHN0b3JlcyFcIik7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgfTtcclxuICAgICAgJChcIiNrdF9jcmVhdGVfYWNjb3VudF9mb3JtX2FjY291bnRfdHlwZV9wZXJzb25hbFwiKS52YWwoXCJcIik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB2YWxpZGF0ZUZpZWxkKFxyXG4gICAgdmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCB8IG51bGwgfCBudW1iZXIsXHJcbiAgICBmaWVsZE5hbWU6IHN0cmluZyxcclxuICAgIHJvdzogbnVtYmVyLFxyXG4gICAgcmVnZXg/OiBSZWdFeHBcclxuICApOiBzdHJpbmcgfCBudWxsIHtcclxuICAgIGlmICh0eXBlb2YgdmFsdWUgIT09IFwic3RyaW5nXCIgJiYgdHlwZW9mIHZhbHVlICE9PSBcIm51bWJlclwiKSB7XHJcbiAgICAgIHJldHVybiBgSW52YWxpZCB2YWx1ZSBmb3IgJHtmaWVsZE5hbWUudG9Mb3dlckNhc2UoKX0gaW4gcm93ICR7cm93ICsgMX1gO1xyXG4gICAgfVxyXG4gICAgY29uc3QgZGVmYXVsdFZhbHVlID0gYHBsZWFzZSBlbnRlciB0aGUgJHtmaWVsZE5hbWVcclxuICAgICAgLnRvTG93ZXJDYXNlKClcclxuICAgICAgLnJlcGxhY2UoL1xcYlxcdy9nLCAobCkgPT4gbC50b1VwcGVyQ2FzZSgpKX1gO1xyXG4gICAgaWYgKCF2YWx1ZSkge1xyXG4gICAgICByZXR1cm4gYFBsZWFzZSBlbnRlciAke2ZpZWxkTmFtZS50b0xvd2VyQ2FzZSgpfSBpbiByb3cgJHtyb3cgKyAxfWA7XHJcbiAgICB9XHJcbiAgICBpZiAodHlwZW9mIHZhbHVlID09IFwic3RyaW5nXCIpIHtcclxuICAgICAgaWYgKHZhbHVlLnRyaW0oKSA9PT0gZGVmYXVsdFZhbHVlLnRyaW0oKSkge1xyXG4gICAgICAgIHJldHVybiBgSW52YWxpZCB2YWx1ZSBmb3IgJHtmaWVsZE5hbWUudG9Mb3dlckNhc2UoKX0gaW4gcm93ICR7cm93ICsgMX1gO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChyZWdleCAmJiAhcmVnZXgudGVzdCh2YWx1ZS50cmltKCkpKSB7XHJcbiAgICAgICAgcmV0dXJuIGBQbGVhc2UgZW50ZXIgdmFsaWQgJHtmaWVsZE5hbWUudG9Mb3dlckNhc2UoKX0gaW4gcm93ICR7XHJcbiAgICAgICAgICByb3cgKyAxXHJcbiAgICAgICAgfWA7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwiY2FyZFwiPlxyXG4gIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHkgZC1mbGV4IGZsZXgtY2VudGVyIGZsZXgtY29sdW1uIHAtOVwiPlxyXG4gICAgPGRpdiBjbGFzcz1cIm1iLTVcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cInN5bWJvbCBzeW1ib2wtNzVweCBzeW1ib2wtY2lyY2xlXCI+XHJcbiAgICAgICAgPGltZyBhbHQ9XCJQaWNcIiBzcmM9XCIuL2Fzc2V0cy90YW5nby9JY29ucy9hZGQtc3RvcmUtaWNvbi5zdmdcIj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxhIGNsYXNzPVwiZnMtNCB0ZXh0LWdyYXktODAwIHRleHQtaG92ZXItcHJpbWFyeSBmdy1ib2xkZXIgbWItMCB0aXRsZSBjdXJzb3ItcG9pbnRlclwiPiBBZGQgc3RvcmVzIDwvYT5cclxuICAgIDxkaXYgY2xhc3M9XCJmdy1ib2xkIHRleHQtZ3JheS01MDAgbXktNlwiPlxyXG4gICAgICA8dWwgY2xhc3M9XCJ0ZXh0LWdyYXktNDAwIGZ3LWJvbGQgZnMtNlwiPlxyXG4gICAgICAgIDxsaT5Vc2UgdGhlIHRlbXBsYXRlIHRvIHVwbG9hZCBtdWx0aXBsZSBzdG9yZXMgYXQgb25jZS48L2xpPlxyXG4gICAgICAgIDxsaT5Eb3dubG9hZCB0aGUgdGVtcGxhdGUgaGVyZSAtXHJcbiAgICAgICAgICA8YSBocmVmPVwiLi4vLi4vYXNzZXRzL2ZpbGVzL3N0b3Jlc1VwbG9hZFRlbXBsYXRlLnhsc3hcIiBkb3dubG9hZD5cclxuICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgIGQ9XCJNMTcuNSAxMi41VjE1LjgzMzNDMTcuNSAxNi4yNzU0IDE3LjMyNDQgMTYuNjk5MyAxNy4wMTE4IDE3LjAxMThDMTYuNjk5MyAxNy4zMjQ0IDE2LjI3NTQgMTcuNSAxNS44MzMzIDE3LjVINC4xNjY2N0MzLjcyNDY0IDE3LjUgMy4zMDA3MiAxNy4zMjQ0IDIuOTg4MTYgMTcuMDExOEMyLjY3NTU5IDE2LjY5OTMgMi41IDE2LjI3NTQgMi41IDE1LjgzMzNWMTIuNU01LjgzMzMzIDguMzMzMzNMMTAgMTIuNU0xMCAxMi41TDE0LjE2NjcgOC4zMzMzM00xMCAxMi41VjIuNVwiXHJcbiAgICAgICAgICAgICAgICBzdHJva2U9XCIjMDA5QkYzXCIgc3Ryb2tlLXdpZHRoPVwiMS42N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRlbXBsYXRlIG1zLTJcIj5Eb3dubG9hZCBUZW1wbGF0ZTwvc3Bhbj5cclxuICAgICAgICAgIDwvYT5cclxuICAgICAgICA8L2xpPlxyXG4gICAgICAgIDxsaT5BZGQgeW91ciBkYXRhIHRvIHRoZSBUZW1wbGF0ZSBGaWxlPC9saT5cclxuICAgICAgICA8bGk+VXBsb2FkIGl0IGJlbG93IGZvciBwcm9jZXNzaW5nPC9saT5cclxuICAgICAgPC91bD5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LWNlbnRlciBmbGV4LXdyYXAgbWItNVwiPlxyXG4gICAgICA8aW5wdXQgbmFtZT1cImFjY291bnRUeXBlXCIgdHlwZT1cInJhZGlvXCIgaWQ9XCJrdF9jcmVhdGVfYWNjb3VudF9mb3JtX2FjY291bnRfdHlwZV9wZXJzb25hbFwiIHZhbHVlPVwicGVyc29uYWxcIlxyXG4gICAgICAgIGNsYXNzPVwiYnRuLWNoZWNrXCIgbmctcmVmbGVjdC1uYW1lPVwiYWNjb3VudFR5cGVcIiBuZy1yZWZsZWN0LWZvcm0tY29udHJvbC1uYW1lPVwiYWNjb3VudFR5cGVcIlxyXG4gICAgICAgIChjaGFuZ2UpPVwib25VcGxvYWQoJGV2ZW50KVwiXHJcbiAgICAgICAgbmctcmVmbGVjdC12YWx1ZT1cInBlcnNvbmFsXCIgdHlwZT1cImZpbGVcIiAjaW5wdXRGaWxlIC8+XHJcbiAgICAgIDxsYWJlbCBmb3I9XCJrdF9jcmVhdGVfYWNjb3VudF9mb3JtX2FjY291bnRfdHlwZV9wZXJzb25hbFwiXHJcbiAgICAgICAgY2xhc3M9XCJidG4gYnRuLW91dGxpbmUgYnRuLXByaW1hcnkgYmctcHJpbWFyeSBidG4tb3V0bGluZS1kZWZhdWx0IHJvdW5kZWQtMyB3LTUwIHAtNCBtdC01XCI+PHNwYW5cclxuICAgICAgICAgIGNsYXNzPVwiZnctYm9sZCBmcy00XCI+XHJcbiAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjIxXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIxIDIwXCJcclxuICAgICAgICAgICAgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICBkPVwiTTE4IDEyLjVWMTUuODMzM0MxOCAxNi4yNzU0IDE3LjgyNDQgMTYuNjk5MyAxNy41MTE4IDE3LjAxMThDMTcuMTk5MyAxNy4zMjQ0IDE2Ljc3NTQgMTcuNSAxNi4zMzMzIDE3LjVINC42NjY2N0M0LjIyNDY0IDE3LjUgMy44MDA3MiAxNy4zMjQ0IDMuNDg4MTYgMTcuMDExOEMzLjE3NTU5IDE2LjY5OTMgMyAxNi4yNzU0IDMgMTUuODMzM1YxMi41TTE0LjY2NjcgNi42NjY2N0wxMC41IDIuNU0xMC41IDIuNUw2LjMzMzMzIDYuNjY2NjdNMTAuNSAyLjVWMTIuNVwiXHJcbiAgICAgICAgICAgICAgc3Ryb2tlPVwid2hpdGVcIiBzdHJva2Utd2lkdGg9XCIxLjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgIDwvc3ZnPiBcclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC13aGl0ZSBteC0yXCI+QWRkIE11bHRpcGxlIFN0b3Jlczwvc3Bhbj48L3NwYW4+XHJcbiAgICAgIDwvbGFiZWw+XHJcbiAgICAgIDxwIGNsYXNzPVwidGV4dC1ncmF5LTQwMCBmdy1ib2xkIG15LTNcIj5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cImxpbmUtYmcgXCI+PHN2ZyB3aWR0aD1cIjIyNFwiIGhlaWdodD1cIjJcIiB2aWV3Qm94PVwiMCAwIDEyNCAyXCIgZmlsbD1cIm5vbmVcIlxyXG4gICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICAgICAgICAgIDxyZWN0IHk9XCIwLjVcIiB3aWR0aD1cIjEyMy4zMzNcIiBoZWlnaHQ9XCIxXCIgZmlsbD1cIiNFQUVDRjBcIiAvPlxyXG4gICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgPC9zcGFuPjxzcGFuIGNsYXNzPVwibXgtMlwiPk9yIDwvc3Bhbj4gPHNwYW4gY2xhc3M9XCJsaW5lLWJnIFwiPjxzdmcgd2lkdGg9XCIyMjRcIiBoZWlnaHQ9XCIyXCIgdmlld0JveD1cIjAgMCAxMjQgMlwiXHJcbiAgICAgICAgICAgIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxyXG4gICAgICAgICAgICA8cmVjdCB5PVwiMC41XCIgd2lkdGg9XCIxMjMuMzMzXCIgaGVpZ2h0PVwiMVwiIGZpbGw9XCIjRUFFQ0YwXCIgLz5cclxuICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgIDwvc3Bhbj5cclxuICAgICAgPC9wPlxyXG4gICAgICA8aW5wdXQgdHlwZT1cInJhZGlvXCIgaWQ9XCJrdF9hY2NvdW50X3RlYW1fc2l6ZV9zZWxlY3RfMVwiIHZhbHVlPVwiMS0xXCIgcm91dGVyTGluaz1cIi9tYW5hZ2Uvc3RvcmVzL2FkZC1zaW5nbGUtc3RvcmVcIlxyXG4gICAgICAgIGNsYXNzPVwiYnRuLWNoZWNrIG5nLXVudG91Y2hlZCBuZy1wcmlzdGluZSBuZy12YWxpZFwiIC8+XHJcbiAgICAgIDxsYWJlbCBmb3I9XCJrdF9hY2NvdW50X3RlYW1fc2l6ZV9zZWxlY3RfMVwiXHJcbiAgICAgICAgY2xhc3M9XCJidG4gYnRuLW91dGxpbmUgYnRuLW91dGxpbmUtZGVmYXVsdCByb3VuZGVkLTMgdy01MCBwLTQgbXQtM1wiPlxyXG4gICAgICAgIDxzdmcgd2lkdGg9XCIxN1wiIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAxNyAxNlwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxyXG4gICAgICAgICAgPHBhdGggZD1cIk0xLjE4MDE1IDMuODAzNzhMMS4xMjY5IDMuODg2OTVDMC41Njg4NjMgNC44NzQgMS4xNjQ2OSA2LjEyMTQzIDIuMjM2MyA2LjI2NDUyQzIuMzMzMzkgNi4yNzYzOSAyLjQyMzczIDYuMjgyNjcgMi41MTIgNi4yODI2N0MzLjA5MDE1IDYuMjgyNjcgMy42MDEzMiA2LjAzNDY1IDMuOTU3NTkgNS42NDc5Mkw0LjUxMDkzIDUuMDQ3M0w1LjA2MjM4IDUuNjQ5NjVDNS40MTQzMiA2LjAzNDA3IDUuOTI0MzMgNi4yODI2NyA2LjUwNjM5IDYuMjgyNjdDNy4wODU4MyA2LjI4MjY3IDcuNTk4NzcgNi4wMzM3MiA3Ljk1MDM5IDUuNjQ5NjVMOC41MDM1OCA1LjA0NTQxTDkuMDU2NzYgNS42NDk2NUM5LjQwODM5IDYuMDMzNzIgOS45MjEzMyA2LjI4MjY3IDEwLjUwMDggNi4yODI2N0MxMS4wODAyIDYuMjgyNjcgMTEuNTkzMiA2LjAzMzcyIDExLjk0NDggNS42NDk2NUwxMi40OTggNS4wNDU0MUwxMy4wNTExIDUuNjQ5NjVDMTMuNDAyOCA2LjAzMzcyIDEzLjkxNTcgNi4yODI2NyAxNC40OTUyIDYuMjgyNjdDMTQuNTgwNSA2LjI4MjY3IDE0LjY3MzYgNi4yNzYzOCAxNC43NyA2LjI2NDYyQzE1Ljg2NTIgNi4xMTUzIDE2LjQ2MyA0LjgwMTAzIDE1LjgyNDMgMy44MDQyOEMxNS44MjQyIDMuODA0MjMgMTUuODI0MiAzLjgwNDE3IDE1LjgyNDIgMy44MDQxMUwxNC4wNjYgMS4wNjI3TDE0LjA2NiAxLjA2MjdMMTQuMDY1MSAxLjA2MTIzQzE0LjA0OTkgMS4wMzc0IDE0LjAxMjQgMS4wMTE4NCAxMy45NjUyIDEuMDExODRIMy4wMzU4MUMyLjk4ODY2IDEuMDExODQgMi45NTExNyAxLjAzNzQgMi45MzU5NyAxLjA2MTI0TDIuOTM1MzUgMS4wNjIyTDEuMTgwMTUgMy44MDM3OFpNMTQuMTUxNiA4LjczNzA2VjExLjg2OVYxMi42MTlIMTMuNDAxNkgzLjU5OTQzSDIuODQ5NDNWMTEuODY5VjguNzM3NTNDMi43MzkyIDguNzQ1NzMgMi42Mjc2OCA4Ljc0OTk0IDIuNTE1MDcgOC43NDk5NEMyLjQ3Mjc2IDguNzQ5OTQgMi40MzA3NCA4Ljc0OTMxIDIuMzg5IDguNzQ4MDlWMTEuODY5VjEzLjgwMzVDMi4zODkgMTQuNDQ2OSAyLjkyMjkgMTQuOTg4IDMuNTk5NDMgMTQuOTg4SDEzLjQwMTZDMTQuMDc4MSAxNC45ODggMTQuNjEyIDE0LjQ0NjkgMTQuNjEyIDEzLjgwMzVWMTEuODY5VjguNzQ4MjdDMTQuNTcyMiA4Ljc0OTM3IDE0LjUzMjIgOC43NDk5NCAxNC40OTIxIDguNzQ5OTRDMTQuMzc3NyA4Ljc0OTk0IDE0LjI2NDEgOC43NDU1OSAxNC4xNTE2IDguNzM3MDZaXCIgc3Ryb2tlPVwiIzM0NDA1NFwiIHN0cm9rZS13aWR0aD1cIjEuNVwiLz5cclxuICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwiZnctYm9sZCBmcy00IG14LTJcIj5cclxuICAgICAgICAgICAgQWRkIFNpbmdsZVxyXG4gICAgICAgICAgU3RvcmU8L3NwYW4+PC9sYWJlbD5cclxuICAgIDwvZGl2PlxyXG4gIFxyXG4gIDwvZGl2PlxyXG4iXX0=