tango-app-ui-manage-tickets 3.7.0-beta.60 → 3.7.0-beta.62

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 (177) hide show
  1. package/esm2022/lib/components/add-csm-modal/add-csm-modal.component.mjs +98 -0
  2. package/esm2022/lib/components/audit-log/audit-log.component.mjs +11 -0
  3. package/esm2022/lib/components/audit-mapping-list/audit-mapping-list.component.mjs +486 -0
  4. package/esm2022/lib/components/audit-metrics/audit-metrics.component.mjs +298 -0
  5. package/esm2022/lib/components/audit-report-popup/audit-report-popup.component.mjs +389 -0
  6. package/esm2022/lib/components/audit-retag/audit-retag.component.mjs +472 -0
  7. package/esm2022/lib/components/comment-model/comment-model.component.mjs +58 -0
  8. package/esm2022/lib/components/count/count.component.mjs +89 -0
  9. package/esm2022/lib/components/custom-select/custom-select.component.mjs +187 -0
  10. package/esm2022/lib/components/filter-options/filter-options.component.mjs +41 -0
  11. package/esm2022/lib/components/footfall-dic/footfall-dic.component.mjs +1061 -0
  12. package/esm2022/lib/components/footfall-dicview/footfall-dicview.component.mjs +1014 -0
  13. package/esm2022/lib/components/footfall-popup/footfall-popup.component.mjs +15 -0
  14. package/esm2022/lib/components/group-select/group-select.component.mjs +155 -0
  15. package/esm2022/lib/components/re-trigger/re-trigger.component.mjs +96 -0
  16. package/esm2022/lib/components/reactive-select/reactive-select.component.mjs +108 -0
  17. package/esm2022/lib/components/remove-audit/remove-audit.component.mjs +81 -0
  18. package/esm2022/lib/components/start-audit/start-audit.component.mjs +761 -0
  19. package/esm2022/lib/components/tango-manage-tickets/tango-manage-tickets.component.mjs +131 -0
  20. package/esm2022/lib/components/ticket-filter-panel/ticket-filter-panel.component.mjs +435 -0
  21. package/esm2022/lib/components/ticket-footfall-new/ticket-footfall-new.component.mjs +2748 -0
  22. package/esm2022/lib/components/ticketclosepopup/ticketclosepopup.component.mjs +43 -0
  23. package/esm2022/lib/components/tickets/tickets.component.mjs +847 -0
  24. package/esm2022/lib/components/viewcategory/viewcategory.component.mjs +89 -0
  25. package/esm2022/lib/services/audit.service.mjs +88 -0
  26. package/esm2022/lib/services/excel.service.mjs +45 -0
  27. package/esm2022/lib/services/ticket.service.mjs +319 -0
  28. package/esm2022/lib/services/timer.service.mjs +84 -0
  29. package/esm2022/lib/tango-manage-tickets-routing.module.mjs +44 -0
  30. package/esm2022/lib/tango-manage-tickets.module.mjs +109 -0
  31. package/esm2022/public-api.mjs +6 -0
  32. package/esm2022/tango-app-ui-manage-tickets.mjs +5 -0
  33. package/fesm2022/tango-app-ui-manage-tickets.mjs +10165 -0
  34. package/fesm2022/tango-app-ui-manage-tickets.mjs.map +1 -0
  35. package/index.d.ts +5 -0
  36. package/lib/components/add-csm-modal/add-csm-modal.component.d.ts +30 -0
  37. package/lib/components/audit-log/audit-log.component.d.ts +5 -0
  38. package/lib/components/audit-mapping-list/audit-mapping-list.component.d.ts +73 -0
  39. package/lib/components/audit-metrics/audit-metrics.component.d.ts +59 -0
  40. package/lib/components/audit-report-popup/audit-report-popup.component.d.ts +52 -0
  41. package/lib/components/audit-retag/audit-retag.component.d.ts +59 -0
  42. package/lib/components/comment-model/comment-model.component.d.ts +17 -0
  43. package/lib/components/count/count.component.d.ts +23 -0
  44. package/lib/components/custom-select/custom-select.component.d.ts +35 -0
  45. package/lib/components/filter-options/filter-options.component.d.ts +15 -0
  46. package/lib/components/footfall-dic/footfall-dic.component.d.ts +143 -0
  47. package/lib/components/footfall-dicview/footfall-dicview.component.d.ts +132 -0
  48. package/lib/components/footfall-popup/footfall-popup.component.d.ts +8 -0
  49. package/lib/components/group-select/group-select.component.d.ts +33 -0
  50. package/lib/components/re-trigger/re-trigger.component.d.ts +32 -0
  51. package/lib/components/reactive-select/reactive-select.component.d.ts +32 -0
  52. package/lib/components/remove-audit/remove-audit.component.d.ts +16 -0
  53. package/lib/components/start-audit/start-audit.component.d.ts +86 -0
  54. package/lib/components/tango-manage-tickets/tango-manage-tickets.component.d.ts +28 -0
  55. package/lib/components/ticket-filter-panel/ticket-filter-panel.component.d.ts +79 -0
  56. package/lib/components/ticket-footfall-new/ticket-footfall-new.component.d.ts +287 -0
  57. package/lib/components/ticketclosepopup/ticketclosepopup.component.d.ts +15 -0
  58. package/lib/components/tickets/tickets.component.d.ts +88 -0
  59. package/lib/components/viewcategory/viewcategory.component.d.ts +16 -0
  60. package/lib/services/audit.service.d.ts +36 -0
  61. package/lib/services/excel.service.d.ts +10 -0
  62. package/lib/services/ticket.service.d.ts +87 -0
  63. package/lib/services/timer.service.d.ts +22 -0
  64. package/lib/tango-manage-tickets-routing.module.d.ts +7 -0
  65. package/lib/tango-manage-tickets.module.d.ts +38 -0
  66. package/package.json +25 -12
  67. package/{src/public-api.ts → public-api.d.ts} +2 -8
  68. package/.eslintrc.json +0 -37
  69. package/ng-package.json +0 -7
  70. package/src/lib/components/add-csm-modal/add-csm-modal.component.html +0 -32
  71. package/src/lib/components/add-csm-modal/add-csm-modal.component.scss +0 -14
  72. package/src/lib/components/add-csm-modal/add-csm-modal.component.spec.ts +0 -23
  73. package/src/lib/components/add-csm-modal/add-csm-modal.component.ts +0 -94
  74. package/src/lib/components/audit-log/audit-log.component.html +0 -1
  75. package/src/lib/components/audit-log/audit-log.component.scss +0 -0
  76. package/src/lib/components/audit-log/audit-log.component.spec.ts +0 -23
  77. package/src/lib/components/audit-log/audit-log.component.ts +0 -10
  78. package/src/lib/components/audit-mapping-list/audit-mapping-list.component.html +0 -234
  79. package/src/lib/components/audit-mapping-list/audit-mapping-list.component.scss +0 -186
  80. package/src/lib/components/audit-mapping-list/audit-mapping-list.component.spec.ts +0 -23
  81. package/src/lib/components/audit-mapping-list/audit-mapping-list.component.ts +0 -520
  82. package/src/lib/components/audit-metrics/audit-metrics.component.html +0 -345
  83. package/src/lib/components/audit-metrics/audit-metrics.component.scss +0 -34
  84. package/src/lib/components/audit-metrics/audit-metrics.component.spec.ts +0 -23
  85. package/src/lib/components/audit-metrics/audit-metrics.component.ts +0 -292
  86. package/src/lib/components/audit-report-popup/audit-report-popup.component.html +0 -111
  87. package/src/lib/components/audit-report-popup/audit-report-popup.component.scss +0 -101
  88. package/src/lib/components/audit-report-popup/audit-report-popup.component.spec.ts +0 -23
  89. package/src/lib/components/audit-report-popup/audit-report-popup.component.ts +0 -397
  90. package/src/lib/components/audit-retag/audit-retag.component.html +0 -129
  91. package/src/lib/components/audit-retag/audit-retag.component.scss +0 -146
  92. package/src/lib/components/audit-retag/audit-retag.component.spec.ts +0 -23
  93. package/src/lib/components/audit-retag/audit-retag.component.ts +0 -489
  94. package/src/lib/components/comment-model/comment-model.component.html +0 -24
  95. package/src/lib/components/comment-model/comment-model.component.scss +0 -20
  96. package/src/lib/components/comment-model/comment-model.component.spec.ts +0 -23
  97. package/src/lib/components/comment-model/comment-model.component.ts +0 -53
  98. package/src/lib/components/count/count.component.html +0 -54
  99. package/src/lib/components/count/count.component.scss +0 -14
  100. package/src/lib/components/count/count.component.spec.ts +0 -23
  101. package/src/lib/components/count/count.component.ts +0 -82
  102. package/src/lib/components/custom-select/custom-select.component.html +0 -134
  103. package/src/lib/components/custom-select/custom-select.component.scss +0 -204
  104. package/src/lib/components/custom-select/custom-select.component.spec.ts +0 -23
  105. package/src/lib/components/custom-select/custom-select.component.ts +0 -189
  106. package/src/lib/components/filter-options/filter-options.component.html +0 -51
  107. package/src/lib/components/filter-options/filter-options.component.scss +0 -102
  108. package/src/lib/components/filter-options/filter-options.component.spec.ts +0 -23
  109. package/src/lib/components/filter-options/filter-options.component.ts +0 -38
  110. package/src/lib/components/footfall-dic/footfall-dic.component.html +0 -1275
  111. package/src/lib/components/footfall-dic/footfall-dic.component.scss +0 -273
  112. package/src/lib/components/footfall-dic/footfall-dic.component.spec.ts +0 -23
  113. package/src/lib/components/footfall-dic/footfall-dic.component.ts +0 -1206
  114. package/src/lib/components/footfall-dicview/footfall-dicview.component.html +0 -1136
  115. package/src/lib/components/footfall-dicview/footfall-dicview.component.scss +0 -416
  116. package/src/lib/components/footfall-dicview/footfall-dicview.component.spec.ts +0 -23
  117. package/src/lib/components/footfall-dicview/footfall-dicview.component.ts +0 -1168
  118. package/src/lib/components/footfall-popup/footfall-popup.component.html +0 -61
  119. package/src/lib/components/footfall-popup/footfall-popup.component.scss +0 -20
  120. package/src/lib/components/footfall-popup/footfall-popup.component.spec.ts +0 -23
  121. package/src/lib/components/footfall-popup/footfall-popup.component.ts +0 -12
  122. package/src/lib/components/group-select/group-select.component.html +0 -44
  123. package/src/lib/components/group-select/group-select.component.scss +0 -144
  124. package/src/lib/components/group-select/group-select.component.spec.ts +0 -23
  125. package/src/lib/components/group-select/group-select.component.ts +0 -145
  126. package/src/lib/components/re-trigger/re-trigger.component.html +0 -53
  127. package/src/lib/components/re-trigger/re-trigger.component.scss +0 -16
  128. package/src/lib/components/re-trigger/re-trigger.component.spec.ts +0 -23
  129. package/src/lib/components/re-trigger/re-trigger.component.ts +0 -96
  130. package/src/lib/components/reactive-select/reactive-select.component.html +0 -18
  131. package/src/lib/components/reactive-select/reactive-select.component.scss +0 -52
  132. package/src/lib/components/reactive-select/reactive-select.component.spec.ts +0 -23
  133. package/src/lib/components/reactive-select/reactive-select.component.ts +0 -104
  134. package/src/lib/components/remove-audit/remove-audit.component.html +0 -38
  135. package/src/lib/components/remove-audit/remove-audit.component.scss +0 -27
  136. package/src/lib/components/remove-audit/remove-audit.component.spec.ts +0 -23
  137. package/src/lib/components/remove-audit/remove-audit.component.ts +0 -81
  138. package/src/lib/components/start-audit/start-audit.component.html +0 -174
  139. package/src/lib/components/start-audit/start-audit.component.scss +0 -185
  140. package/src/lib/components/start-audit/start-audit.component.spec.ts +0 -23
  141. package/src/lib/components/start-audit/start-audit.component.ts +0 -761
  142. package/src/lib/components/tango-manage-tickets/tango-manage-tickets.component.html +0 -43
  143. package/src/lib/components/tango-manage-tickets/tango-manage-tickets.component.scss +0 -35
  144. package/src/lib/components/tango-manage-tickets/tango-manage-tickets.component.spec.ts +0 -23
  145. package/src/lib/components/tango-manage-tickets/tango-manage-tickets.component.ts +0 -118
  146. package/src/lib/components/ticket-filter-panel/ticket-filter-panel.component.html +0 -386
  147. package/src/lib/components/ticket-filter-panel/ticket-filter-panel.component.scss +0 -87
  148. package/src/lib/components/ticket-filter-panel/ticket-filter-panel.component.spec.ts +0 -23
  149. package/src/lib/components/ticket-filter-panel/ticket-filter-panel.component.ts +0 -494
  150. package/src/lib/components/ticket-footfall-new/ticket-footfall-new.component.html +0 -4743
  151. package/src/lib/components/ticket-footfall-new/ticket-footfall-new.component.scss +0 -1208
  152. package/src/lib/components/ticket-footfall-new/ticket-footfall-new.component.spec.ts +0 -23
  153. package/src/lib/components/ticket-footfall-new/ticket-footfall-new.component.ts +0 -3351
  154. package/src/lib/components/ticketclosepopup/ticketclosepopup.component.html +0 -100
  155. package/src/lib/components/ticketclosepopup/ticketclosepopup.component.scss +0 -34
  156. package/src/lib/components/ticketclosepopup/ticketclosepopup.component.spec.ts +0 -23
  157. package/src/lib/components/ticketclosepopup/ticketclosepopup.component.ts +0 -48
  158. package/src/lib/components/tickets/tickets.component.html +0 -451
  159. package/src/lib/components/tickets/tickets.component.scss +0 -131
  160. package/src/lib/components/tickets/tickets.component.spec.ts +0 -23
  161. package/src/lib/components/tickets/tickets.component.ts +0 -809
  162. package/src/lib/components/viewcategory/viewcategory.component.html +0 -38
  163. package/src/lib/components/viewcategory/viewcategory.component.scss +0 -29
  164. package/src/lib/components/viewcategory/viewcategory.component.spec.ts +0 -23
  165. package/src/lib/components/viewcategory/viewcategory.component.ts +0 -79
  166. package/src/lib/services/audit.service.spec.ts +0 -16
  167. package/src/lib/services/audit.service.ts +0 -98
  168. package/src/lib/services/excel.service.ts +0 -48
  169. package/src/lib/services/ticket.service.spec.ts +0 -16
  170. package/src/lib/services/ticket.service.ts +0 -501
  171. package/src/lib/services/timer.service.spec.ts +0 -16
  172. package/src/lib/services/timer.service.ts +0 -92
  173. package/src/lib/tango-manage-tickets-routing.module.ts +0 -37
  174. package/src/lib/tango-manage-tickets.module.ts +0 -68
  175. package/tsconfig.lib.json +0 -14
  176. package/tsconfig.lib.prod.json +0 -10
  177. package/tsconfig.spec.json +0 -14
@@ -0,0 +1,472 @@
1
+ import { Component, HostListener } from '@angular/core';
2
+ import * as LZString from 'lz-string';
3
+ import { RemoveAuditComponent } from '../remove-audit/remove-audit.component';
4
+ import { AuditReportPopupComponent } from '../audit-report-popup/audit-report-popup.component';
5
+ import { Subject, takeUntil } from 'rxjs';
6
+ import { ViewcategoryComponent } from '../viewcategory/viewcategory.component';
7
+ import * as i0 from "@angular/core";
8
+ import * as i1 from "@ng-bootstrap/ng-bootstrap";
9
+ import * as i2 from "@angular/router";
10
+ import * as i3 from "../../services/audit.service";
11
+ import * as i4 from "tango-app-ui-shared";
12
+ import * as i5 from "../../services/timer.service";
13
+ import * as i6 from "@angular/common";
14
+ export class AuditRetagComponent {
15
+ modalService;
16
+ router;
17
+ $api;
18
+ toastr;
19
+ route;
20
+ timerService;
21
+ cd;
22
+ totalfile = 0;
23
+ customer = 0;
24
+ junk = 0;
25
+ employee = 0;
26
+ junkimage = [];
27
+ retagimage = [];
28
+ submitvalue = true;
29
+ auditmappingdata = [];
30
+ customercount = 0;
31
+ junkcount = 0;
32
+ employeecount = 0;
33
+ employeimage = [];
34
+ filedetails = {};
35
+ auditLoading = false;
36
+ selectedType;
37
+ destroy$ = new Subject();
38
+ timePassed = 0;
39
+ subscription = null;
40
+ formattedTime = '00:00:00';
41
+ openmodel = false;
42
+ category = [];
43
+ handleKeyPress(event) {
44
+ if (this.openmodel)
45
+ return;
46
+ // if (event.key === 'g' || event.code === 'KeyG') {
47
+ // var group = this.auditmappingdata.filter((data: any) => data.selected === true)
48
+ // if (group.length > 0) {
49
+ // if (group.length == 1) {
50
+ // this.toastr.getErrorToast('Please Select multiple file then add to Group')
51
+ // } else {
52
+ // let dummyarray = group.shift()
53
+ // var groupimages: any = []
54
+ // group.forEach((data: any) => {
55
+ // this.auditmappingdata.splice(this.auditmappingdata.findIndex(({ img_name }: { img_name: string }) => img_name == data.img_name), 1);
56
+ // groupimages.push(data.mappedid[0])
57
+ // })
58
+ // dummyarray.count = dummyarray.count + groupimages.length
59
+ // dummyarray.selected = false
60
+ // dummyarray.mappedid = [...dummyarray.mappedid, ...groupimages]
61
+ // const jsonString = JSON.stringify(this.auditmappingdata);
62
+ // const compressedData = LZString.compress(jsonString);
63
+ // sessionStorage.setItem('audit', compressedData)
64
+ // }
65
+ // // this.initial_data_loading()
66
+ // } else {
67
+ // this.toastr.getErrorToast('Please Select file then add to Group')
68
+ // }
69
+ // }
70
+ const pressed = (event.key || '').toLowerCase();
71
+ const matched = this.category.find((m) => {
72
+ if (!m.key)
73
+ return false;
74
+ const mapKey = m.key.toLowerCase();
75
+ // match by event.key (preferred) OR by event.code like 'KeyJ'
76
+ return pressed === mapKey || event.code === `Key${mapKey.toUpperCase()}`;
77
+ });
78
+ console.log(matched);
79
+ if (!matched)
80
+ return;
81
+ if (matched) {
82
+ var newData = this.auditmappingdata.filter((data) => data.selected === true);
83
+ if (newData.length > 0) {
84
+ var oldData = JSON.parse(sessionStorage.getItem(matched?.type) || '{}');
85
+ if (Number(oldData.length) > 0) {
86
+ newData = [...oldData, ...newData];
87
+ }
88
+ else {
89
+ newData = newData;
90
+ }
91
+ this.category.map((data) => {
92
+ if (data.type === matched?.type) {
93
+ data.count = newData.length;
94
+ }
95
+ });
96
+ sessionStorage.setItem(matched?.type, JSON.stringify(newData));
97
+ this.auditmappingdata = this.auditmappingdata.filter((data) => data.selected === false);
98
+ const jsonString = JSON.stringify(this.auditmappingdata);
99
+ const compressedData = LZString.compress(jsonString);
100
+ sessionStorage.setItem('audit', compressedData);
101
+ this.toastr.getSuccessToast(`${matched?.type} Added Succesfully!`);
102
+ }
103
+ else {
104
+ this.toastr.getErrorToast(`Please Select file then add to ${matched?.type} `);
105
+ }
106
+ }
107
+ }
108
+ constructor(modalService, router, $api, toastr, route, timerService, cd) {
109
+ this.modalService = modalService;
110
+ this.router = router;
111
+ this.$api = $api;
112
+ this.toastr = toastr;
113
+ this.route = route;
114
+ this.timerService = timerService;
115
+ this.cd = cd;
116
+ this.selectedType = this.route.snapshot.paramMap.get('type');
117
+ }
118
+ ngOnInit() {
119
+ this.getAuditConfig();
120
+ if (this.retagimage.length == 0) {
121
+ this.submitvalue = false;
122
+ }
123
+ this.auditLoading = false;
124
+ this.setTimer();
125
+ }
126
+ getAuditConfig() {
127
+ let filedata = JSON.parse(sessionStorage.getItem('totalfiles') || '{}');
128
+ this.$api.getAuditconfig(filedata?.filedetails?.clientId).pipe(takeUntil(this.destroy$)).subscribe({
129
+ next: (res) => {
130
+ if (res && res?.code == 200) {
131
+ console.log(res.data.footfallDirectoryConfigs.taggingLimitation);
132
+ this.category = res.data.footfallDirectoryConfigs.taggingLimitation;
133
+ this.initial_data_loading();
134
+ }
135
+ }
136
+ });
137
+ }
138
+ setTimer() {
139
+ this.subscription = this.timerService.getTimePassed().subscribe(time => {
140
+ this.timePassed = time;
141
+ this.formattedTime = this.timerService.formatTime(time);
142
+ this.cd.detectChanges();
143
+ });
144
+ this.timerService.startTimer();
145
+ document.addEventListener('mousemove', this.handleGlobalMouseEvent);
146
+ document.addEventListener('click', this.handleGlobalMouseEvent);
147
+ document.addEventListener('mouseenter', this.handleGlobalMouseEvent);
148
+ document.addEventListener('scroll', this.handleGlobalMouseEvent);
149
+ }
150
+ handleGlobalMouseEvent = () => {
151
+ this.timerService.startTimer();
152
+ };
153
+ ngOnDestroy() {
154
+ this.destroy$.next(true);
155
+ this.destroy$.complete();
156
+ document.removeEventListener('mousemove', this.handleGlobalMouseEvent);
157
+ document.removeEventListener('click', this.handleGlobalMouseEvent);
158
+ document.removeEventListener('mouseenter', this.handleGlobalMouseEvent);
159
+ document.removeEventListener('scroll', this.handleGlobalMouseEvent);
160
+ this.timerService.clearTimer();
161
+ }
162
+ initial_data_loading() {
163
+ if ('audit' in sessionStorage) {
164
+ let stringifydata = sessionStorage.getItem('audit') || '{}';
165
+ const decompressedData = LZString.decompress(stringifydata);
166
+ var auditdata = JSON.parse(decompressedData || '{}');
167
+ if (auditdata.length > 0) {
168
+ this.auditmappingdata = auditdata;
169
+ this.customercount = this.auditmappingdata.length;
170
+ }
171
+ else {
172
+ this.auditmappingdata = [];
173
+ this.customercount = 0;
174
+ }
175
+ }
176
+ this.category.map((data) => {
177
+ var count = JSON.parse(sessionStorage.getItem(data.type) || '{}');
178
+ data.count = count?.length;
179
+ });
180
+ if ('retag' in sessionStorage) {
181
+ var retagdata = JSON.parse(sessionStorage.getItem('retag') || '{}');
182
+ if (retagdata.length > 0) {
183
+ this.retagimage = retagdata;
184
+ this.submitvalue = true;
185
+ }
186
+ else {
187
+ this.retagimage = [];
188
+ }
189
+ }
190
+ if ('totalfiles' in sessionStorage) {
191
+ var files = JSON.parse(sessionStorage.getItem('totalfiles') || '{}');
192
+ this.totalfile = files?.totalfiles;
193
+ this.filedetails = files?.filedetails;
194
+ }
195
+ }
196
+ getmappingdata() {
197
+ this.auditLoading = false;
198
+ var totalfile = JSON.parse(sessionStorage.getItem('totalfiles') || '{}');
199
+ this.filedetails = totalfile?.filedetails;
200
+ var payload = {
201
+ storeId: totalfile?.filedetails?.storeId,
202
+ fileDate: totalfile?.filedetails?.Date,
203
+ auditId: totalfile?.auditId,
204
+ count: totalfile?.totalfiles
205
+ };
206
+ this.$api.getAuditmappinglist(payload).pipe(takeUntil(this.destroy$)).subscribe({
207
+ next: (res) => {
208
+ if (res && res?.code == 200) {
209
+ this.auditLoading = false;
210
+ sessionStorage.removeItem('retag');
211
+ this.retagimage = [];
212
+ this.category.map((data) => {
213
+ let filterData = res?.data?.result?.draftedData?.filter((x) => x.type === data.type);
214
+ data.value = filterData[0]?.value && filterData[0]?.value.length > 0 ? filterData[0]?.value : [];
215
+ data.count = data?.value?.length;
216
+ sessionStorage.setItem(data?.type, JSON.stringify(data?.value && data?.value.length > 0 ? data?.value : []));
217
+ });
218
+ let customerData = res?.data?.result?.draftedData?.filter((x) => x.type === 'customer');
219
+ this.auditmappingdata = customerData[0]?.value;
220
+ const jsonString = JSON.stringify(customerData[0]?.value);
221
+ const compressedData = LZString.compress(jsonString);
222
+ sessionStorage.setItem('audit', compressedData);
223
+ this.initial_data_loading();
224
+ }
225
+ },
226
+ error: (err) => {
227
+ },
228
+ });
229
+ }
230
+ reviewdata() {
231
+ this.submitvalue = false;
232
+ var totalfile = JSON.parse(sessionStorage.getItem('totalfiles') || '{}');
233
+ if ('audit' in sessionStorage) {
234
+ let stringifydata = sessionStorage.getItem('audit') || '{}';
235
+ const decompressedData = LZString.decompress(stringifydata);
236
+ var auditdata = JSON.parse(decompressedData || '{}');
237
+ if (auditdata.length > 0) {
238
+ this.auditmappingdata = auditdata;
239
+ this.customercount = this.auditmappingdata.length;
240
+ }
241
+ }
242
+ if ('retag' in sessionStorage) {
243
+ var retagdata = JSON.parse(sessionStorage.getItem('retag') || '{}');
244
+ this.retagimage = retagdata;
245
+ this.auditmappingdata = [...this.auditmappingdata, ...this.retagimage];
246
+ const jsonString = JSON.stringify(this.auditmappingdata);
247
+ const compressedData = LZString.compress(jsonString);
248
+ sessionStorage.setItem('audit', compressedData);
249
+ sessionStorage.removeItem('retag');
250
+ this.retagimage = [];
251
+ }
252
+ let stringifydata = sessionStorage.getItem('audit') || '{}';
253
+ const decompressedData = LZString.decompress(stringifydata);
254
+ var customer = JSON.parse(decompressedData || '{}');
255
+ let storedData = [
256
+ {
257
+ type: "customer",
258
+ value: customer ? customer : [],
259
+ }
260
+ ];
261
+ this.category.map((data) => {
262
+ let sessionvalue = JSON.parse(sessionStorage.getItem(data.type) || '{}');
263
+ storedData.push({
264
+ type: data.type,
265
+ value: sessionvalue && sessionvalue.length > 0 ? sessionvalue : []
266
+ });
267
+ });
268
+ console.log("🚀 ~ StartAuditComponent ~ Reviewdata ~ storedData:", storedData);
269
+ var inserobj = {
270
+ storeId: totalfile?.filedetails?.storeId,
271
+ auditId: totalfile?.auditId ? totalfile?.auditId : totalfile?.filedetails.auditId,
272
+ fileDate: totalfile?.filedetails?.Date,
273
+ totalCount: totalfile?.totalfiles ? totalfile.totalfiles : 0,
274
+ retagCount: 0,
275
+ timeSpent: this.timePassed,
276
+ retagImage: [],
277
+ draftedData: storedData
278
+ };
279
+ this.$api.saveDraft(inserobj).pipe(takeUntil(this.destroy$)).subscribe({
280
+ next: (res) => {
281
+ if (res && res.code == 200) {
282
+ this.getmappingdata();
283
+ this.router.navigate(["/manage/tickets/mapping-list",]);
284
+ }
285
+ },
286
+ error: (err) => {
287
+ this.toastr.getErrorToast(err?.error);
288
+ },
289
+ });
290
+ }
291
+ retagallowDrop(event) {
292
+ event.preventDefault();
293
+ }
294
+ dragStart(event) {
295
+ event.dataTransfer.setData("text/plain", event.target.id);
296
+ }
297
+ dropretag(event) {
298
+ event.preventDefault();
299
+ const dropretagimage = event.dataTransfer.getData('text/plain');
300
+ event.target.appendChild(document.getElementById(dropretagimage));
301
+ const dropzone = dropretagimage;
302
+ this.auditmappingdata.map((data) => {
303
+ if (data.img_id == dropzone.id) {
304
+ if (data.mappedid.length > 0) {
305
+ var findone = this.auditmappingdata.filter((data) => data.img_name == dropretagimage);
306
+ if (findone.length > 0) {
307
+ data.count = data.count + findone[0].count;
308
+ data.mappedid = [...data.mappedid, ...findone[0].mappedid];
309
+ }
310
+ if ('duplicate' in sessionStorage) {
311
+ let filedata = JSON.parse(sessionStorage.getItem('duplicate') || '{}');
312
+ filedata = [...filedata, ...findone];
313
+ sessionStorage.setItem('duplicate', JSON.stringify(filedata));
314
+ }
315
+ else {
316
+ sessionStorage.setItem('duplicate', JSON.stringify(findone));
317
+ let filedata = JSON.parse(sessionStorage.getItem('duplicate') || '{}');
318
+ console.log("🚀 ~ StartAuditComponent ~ dropImage ~ filedata:", filedata);
319
+ }
320
+ this.category.map((data) => {
321
+ var count = JSON.parse(sessionStorage.getItem(data.type) || '{}');
322
+ data.count = count?.length;
323
+ });
324
+ console.log("🚀 ~ AuditRetagComponent ~ dropretag ~ this.category:", this.category);
325
+ }
326
+ else {
327
+ data.count = data.count + 1,
328
+ data.mappedid.push(dropretagimage);
329
+ }
330
+ }
331
+ });
332
+ }
333
+ selectretagimage(res) {
334
+ this.retagimage.map((data) => {
335
+ if (data.img_id == res) {
336
+ if (data.mappedid.length == 1) {
337
+ data.selected = !data.selected;
338
+ }
339
+ }
340
+ });
341
+ }
342
+ selectgroupimage(res) {
343
+ this.auditmappingdata.map((data) => {
344
+ if (data.img_id == res) {
345
+ if (data.mappedid.length == 1) {
346
+ data.selected = !data.selected;
347
+ }
348
+ }
349
+ });
350
+ }
351
+ removeaudit(data) {
352
+ const modalRef = this.modalService.open(RemoveAuditComponent, {
353
+ size: 'lg',
354
+ centered: true,
355
+ backdrop: 'static',
356
+ keyboard: false
357
+ });
358
+ modalRef.componentInstance.data = data;
359
+ modalRef.closed.subscribe((res) => {
360
+ if (res && res?.reload) {
361
+ this.initial_data_loading();
362
+ }
363
+ });
364
+ }
365
+ submitaudit() {
366
+ const modalRef = this.modalService.open(AuditReportPopupComponent, {
367
+ size: 'lg',
368
+ centered: true,
369
+ backdrop: 'static',
370
+ keyboard: false
371
+ });
372
+ modalRef.componentInstance.selectedType = this.selectedType;
373
+ modalRef.closed;
374
+ }
375
+ viewcategory(data) {
376
+ const modalRef = this.modalService.open(ViewcategoryComponent, {
377
+ size: 'lg',
378
+ centered: true,
379
+ backdrop: 'static',
380
+ keyboard: false
381
+ });
382
+ modalRef.componentInstance.data = data;
383
+ modalRef.componentInstance.imageList = data,
384
+ modalRef.closed.subscribe((res) => {
385
+ if (res && res?.reload) {
386
+ this.initial_data_loading();
387
+ }
388
+ });
389
+ }
390
+ dropImage(event) {
391
+ const htmltag = event.dataTransfer.getData('text/html');
392
+ var Name = getTagNameFromHTML(htmltag);
393
+ const dropZone = event.target;
394
+ // console.log(Name)
395
+ // debugger
396
+ if (Name == 'customer' || Name == 'retag') {
397
+ event.preventDefault();
398
+ const draggedImageId = event.dataTransfer.getData('text/plain');
399
+ const draggedImage = document.getElementById(draggedImageId);
400
+ event.target.appendChild(draggedImage);
401
+ this.auditmappingdata.map((data, index) => {
402
+ if (data.img_id === dropZone.id) {
403
+ let findone = [];
404
+ const retagdata = JSON.parse(sessionStorage.getItem('retag') || '[]');
405
+ this.retagimage = retagdata;
406
+ findone = this.retagimage.filter((imgData) => imgData.img_id === draggedImageId);
407
+ if (findone.length === 0) {
408
+ findone = this.auditmappingdata.filter((imgData) => imgData.img_id === draggedImageId);
409
+ }
410
+ this.retagimage = this.retagimage.filter((imgData) => imgData.img_id !== draggedImageId);
411
+ sessionStorage.setItem('retag', JSON.stringify(this.retagimage));
412
+ console.log("🚀 ~ AuditRetagComponent ~ dropImage ~ findone:", findone);
413
+ if (findone.length > 0) {
414
+ data.count += findone[0].count;
415
+ data.mappedid = [...data.mappedid, ...findone[0]];
416
+ if ('duplicate' in sessionStorage) {
417
+ let filedata = JSON.parse(sessionStorage.getItem('duplicate') || '{}');
418
+ filedata = [...filedata, ...findone];
419
+ sessionStorage.setItem('duplicate', JSON.stringify(filedata));
420
+ }
421
+ else {
422
+ sessionStorage.setItem('duplicate', JSON.stringify(findone));
423
+ let filedata = JSON.parse(sessionStorage.getItem('duplicate') || '{}');
424
+ console.log("🚀 ~ StartAuditComponent ~ dropImage ~ filedata:", filedata);
425
+ }
426
+ }
427
+ else {
428
+ data.count += 1;
429
+ data.mappedid.push(draggedImageId);
430
+ }
431
+ }
432
+ });
433
+ if (Name == 'customer') {
434
+ this.auditmappingdata.splice(this.auditmappingdata.findIndex(({ img_id }) => img_id == draggedImageId), 1);
435
+ this.auditmappingdata.map((data) => data.selected = false);
436
+ }
437
+ this.customercount = this.auditmappingdata?.length;
438
+ const jsonString = JSON.stringify(this.auditmappingdata);
439
+ const compressedData = LZString.compress(jsonString);
440
+ sessionStorage.setItem('audit', compressedData);
441
+ var retagdata = JSON.parse(sessionStorage.getItem('retag') || '{}');
442
+ this.retagimage = retagdata;
443
+ if (this.retagimage.length == 0) {
444
+ this.submitvalue = false;
445
+ }
446
+ this.category.map((data) => {
447
+ var count = JSON.parse(sessionStorage.getItem(data.type) || '{}');
448
+ data.count = count?.length;
449
+ });
450
+ }
451
+ function getTagNameFromHTML(html) {
452
+ var tempElement = document.createElement('div');
453
+ tempElement.innerHTML = html;
454
+ var firstChild = tempElement.firstChild;
455
+ if (firstChild.hasAttribute('name')) {
456
+ var namePropertyValue = firstChild.getAttribute('name');
457
+ return namePropertyValue;
458
+ }
459
+ return null;
460
+ }
461
+ }
462
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AuditRetagComponent, deps: [{ token: i1.NgbModal }, { token: i2.Router }, { token: i3.AuditService }, { token: i4.ToastService }, { token: i2.ActivatedRoute }, { token: i5.TimerService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
463
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: AuditRetagComponent, selector: "lib-audit-retag", host: { listeners: { "window:keydown": "handleKeyPress($event)" } }, ngImport: i0, template: "<div class=\"card\">\r\n <div class=\"card-header\">\r\n <div class=\"card-title\">\r\n <h3 class=\"flex-column\">\r\n <div class=\"card-label\">\r\n <span>{{filedetails?.storeId}}</span>\r\n <span class=\"mx-3 arrow-code\"> - </span>\r\n <span>{{filedetails?.Date}}</span>\r\n </div>\r\n </h3>\r\n <div class=\"rounded-3 ms-3 d-flex align-items-center bg-timer\">\r\n <span class=\"me-3 text-timer fw-semibold\">{{ formattedTime }}</span>\r\n <span><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <path\r\n d=\"M9.16667 2.87071C9.16667 2.62023 9.26617 2.38001 9.44329 2.20289C9.62041 2.02577 9.86063 1.92627 10.1111 1.92627H13.8889C14.1394 1.92627 14.3796 2.02577 14.5567 2.20289C14.7338 2.38001 14.8333 2.62023 14.8333 2.87071C14.8333 3.1212 14.7338 3.36142 14.5567 3.53854C14.3796 3.71565 14.1394 3.81516 13.8889 3.81516H12.9444V5.07442L12.9432 5.12605C14.5396 5.30097 16.0528 5.92787 17.3053 6.93308L17.3141 6.92553L18.2585 5.98108C18.374 5.85676 18.5208 5.76588 18.6835 5.71801C18.8463 5.67014 19.019 5.66706 19.1833 5.70908C19.3477 5.75111 19.4977 5.83669 19.6175 5.9568C19.7373 6.07692 19.8225 6.22713 19.8641 6.3916C19.906 6.55578 19.903 6.72823 19.8554 6.89085C19.8077 7.05348 19.7172 7.20029 19.5933 7.3159L18.6489 8.26034L18.6413 8.26915C19.6403 9.51974 20.2658 11.027 20.446 12.6174C20.6261 14.2078 20.3536 15.8167 19.6597 17.2591C18.9658 18.7014 17.8788 19.9185 16.5237 20.7704C15.1686 21.6222 13.6006 22.0741 12 22.0741C10.3994 22.0741 8.83137 21.6222 7.47629 20.7704C6.12122 19.9185 5.03419 18.7014 4.3403 17.2591C3.64641 15.8167 3.37386 14.2078 3.55402 12.6174C3.73418 11.027 4.35973 9.51974 5.35867 8.26915L5.35111 8.26034L4.40667 7.3159C4.23964 7.1369 4.14865 6.90003 4.15287 6.65524C4.1571 6.41045 4.25622 6.17687 4.42934 6.00375C4.60246 5.83063 4.83604 5.73151 5.08083 5.72728C5.32562 5.72306 5.56249 5.81405 5.74149 5.98108L6.68593 6.92553L6.69474 6.93308C7.94681 5.92809 9.45963 5.3012 11.0556 5.12605V3.81516H10.1111C9.86063 3.81516 9.62041 3.71565 9.44329 3.53854C9.26617 3.36142 9.16667 3.1212 9.16667 2.87071ZM12 20.1855C13.7535 20.1854 15.4352 19.4886 16.675 18.2485C17.9148 17.0085 18.6113 15.3267 18.6111 13.5732C18.6109 11.8196 17.9142 10.138 16.6741 8.89813C15.4341 7.65831 13.7523 6.96188 11.9987 6.96204C10.2452 6.96221 8.56354 7.65896 7.32372 8.89902C6.0839 10.1391 5.38747 11.8209 5.38763 13.5744C5.3878 15.328 6.08455 17.0096 7.32461 18.2494C8.56467 19.4893 10.2465 20.1857 12 20.1855ZM12.4899 11.7485L14.1647 10.0737C14.2517 9.98343 14.3559 9.91143 14.4711 9.86188C14.5863 9.81233 14.7102 9.78622 14.8356 9.78507C14.9611 9.78392 15.0854 9.80776 15.2015 9.85519C15.3176 9.90262 15.4231 9.9727 15.5118 10.0613C15.6005 10.15 15.6707 10.2554 15.7182 10.3714C15.7658 10.4875 15.7897 10.6118 15.7887 10.7372C15.7877 10.8626 15.7617 10.9866 15.7122 11.1018C15.6628 11.2171 15.5909 11.3213 15.5007 11.4085L13.8259 13.0846C13.9003 13.3645 13.9095 13.6579 13.8526 13.942C13.7958 14.226 13.6745 14.4933 13.4981 14.7231C13.3217 14.9529 13.0949 15.1391 12.8352 15.2675C12.5754 15.3958 12.2897 15.4628 12 15.4633C11.7327 15.461 11.4688 15.4019 11.226 15.29C10.9832 15.1781 10.767 15.0159 10.5916 14.8141C10.4162 14.6123 10.2857 14.3755 10.2087 14.1195C10.1316 13.8635 10.1099 13.594 10.1448 13.329C10.1798 13.0639 10.2706 12.8093 10.4114 12.582C10.5522 12.3547 10.7396 12.1599 10.9613 12.0104C11.183 11.861 11.4339 11.7604 11.6974 11.7152C11.9609 11.6701 12.231 11.6814 12.4899 11.7485Z\"\r\n fill=\"black\" />\r\n </svg></span>\r\n </div>\r\n </div>\r\n <div class=\"card-toolbar\">\r\n <div class=\"d-flex\">\r\n <div class=\"d-flex align-items-center position-relative my-1\">\r\n <a class=\"btn btn-sm btn-default btn-outline py-2 mx-2\" (click)=\"reviewdata()\"><span\r\n class=\"svg-icon svg-icon-primary svg-icon-2x\"><svg xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path\r\n d=\"M15.8337 10.0001H4.16699M4.16699 10.0001L10.0003 15.8334M4.16699 10.0001L10.0003 4.16675\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></span><span class=\"ms-3\">Back to Review</span></a>\r\n <button class=\"btn btn-sm btn-primary py-2 mx-2\" [disabled]=\"submitvalue\"\r\n (click)=\"submitaudit()\">Submit\r\n <span class=\"svg-icon svg-icon-primary svg-icon-2x\"><svg xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path\r\n d=\"M4.16699 10.0001H15.8337M15.8337 10.0001L10.0003 4.16675M15.8337 10.0001L10.0003 15.8334\"\r\n stroke=\"white\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></span>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"card-header\">\r\n <h3 class=\"card-title align-items-center flex-row\">\r\n <span class=\"card-label text-dark\">Total Files - <span>{{totalfile}}</span></span>\r\n \r\n </h3>\r\n <div class=\"card-toolbar \">\r\n <div class=\"d-flex\">\r\n <div class=\"d-flex align-items-center position-relative my-1\">\r\n <span class=\"me-3 text fw-semibold\">Unique Customers <span\r\n class=\" badge badge-light-primary\">{{auditmappingdata?.length ? auditmappingdata?.length :\r\n 0}}</span></span>\r\n <div *ngFor=\"let item of category\">\r\n <button class=\"btn btn-outline text w-semibold btn-sm py-2 butn-flag mx-2\" (click)=\"viewcategory(item)\" [disabled]=\"!item?.count\">View\r\n {{item?.name}}\r\n <span class=\" badge badge-light-primary\">{{item?.count}}</span> </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<div class=\"row\">\r\n <div *ngIf=\"auditLoading\" class=\"card mt-5\">\r\n <div class=\"card-body h-500px\">\r\n <div class=\"row loader d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- <h5 class=\"text-dark-600 fw-bold text-center mt-5\">Loading Audit file......</h5> -->\r\n </div>\r\n </div>\r\n <div *ngIf=\"!auditLoading\" class=\"col-md-5\">\r\n <div class=\"card mt-5\">\r\n <div class=\"card-body h-1000px\">\r\n <div class=\"card-label fw-bold\">Images for Retagging</div>\r\n <div class=\"text-sub mt-2 fw-semibold\">Drag and Drop on correct customers</div>\r\n <div class=\"item\" *ngFor=\"let obj1 of retagimage\" (dragover)=\"retagallowDrop($event)\">\r\n <img draggable=\"true\" (dragstart)=\"dragStart($event)\" id=\"{{obj1.img_id}}\" [src]=\"obj1.img_path\"\r\n class=\"my-3 mx-4 img-ret\" (click)=\"selectretagimage(obj1.img_id)\" name=\"retag\">\r\n <div class=\"text-center m-0 fs-7 fw-bold\">{{obj1.img_name}}</div>\r\n <span *ngIf=\"obj1.selected\" class=\"notify-badge1 nwbg\"><i class=\"fa fa-check colorvalue\"\r\n aria-hidden=\"true\" style=\"font-size:15px;color:#00A3FF\"></i></span>\r\n <span class=\"notify-badge cursor-pointer\" (click)=\"removeaudit(obj1)\"\r\n *ngIf=\"obj1.count>1\">{{obj1.count}}</span>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"!auditLoading\" class=\"col-md-7\">\r\n <div class=\"card mt-5\">\r\n <div class=\"card-body h-1000px\">\r\n <div class=\"card-label fw-bold\">Unique Customers <span class=\"card-label\">{{auditmappingdata?.length ?\r\n auditmappingdata?.length : 0}}</span></div>\r\n <div class=\"item\" *ngFor=\"let obj of auditmappingdata;let i=index\" style=\"padding: 10px;\">\r\n\r\n <img class=\"mx-3 mb-5 img\" [src]=\"obj.img_path\" id=\"{{obj.img_id}}\" alt=\"Image\" name=\"customer\"\r\n (dragover)=\"retagallowDrop($event)\" (drop)=\"dropImage($event)\" draggable=\"true\"\r\n (dragstart)=\"dragStart($event)\" (click)=\"selectgroupimage(obj.img_id )\">\r\n <div class=\"text-center m-0 fs-7 fw-bold\">{{obj.img_name}}</div>\r\n <span *ngIf=\"obj.selected\" class=\"notify-badge1\"><i class=\"fa fa-check\" aria-hidden=\"true\"\r\n style=\"font-size:15px;color:#00A3FF\"></i></span>\r\n\r\n <span class=\"notify-badge cursor-pointer\" (click)=\"removeaudit(obj)\"\r\n *ngIf=\"obj.count>1\">{{obj.count}}</span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n\r\n</div>", styles: [".img{width:90px;height:200px}.text{color:var(--Gray-700, #344054);font-size:14px;line-height:20px}.text-sub{color:var(--Gray-500, #667085)!important;font-family:Inter;font-size:14px!important;font-weight:400!important;line-height:20px}.card-label{font-family:Inter;font-style:normal;font-size:18px!important}.text-col{font-family:Inter;font-style:normal;font-weight:400;font-size:14px;line-height:17px;color:#3f4254}.img-ret{width:90px;height:170px}.butn:hover{color:#009ef7!important}.butn-flag{border:1px solid #009ef7!important;border-right-style:none!important;border-radius:.5rem 0rem 0rem .5rem!important;padding:calc(.25rem + 1px) calc(1.5rem + 1px)!important;background-color:#fff!important}.butn-flag1{border:1px solid #009ef7!important;border-radius:0rem .5rem .5rem 0rem!important;padding:calc(.25rem + 1px) calc(1.5rem + 1px)!important;background-color:#fff!important}.btn.btn-light-primary:hover:not(.btn-active){background-color:#fff!important}.btn-check:checked+.btn.btn-light-primary,.btn-check:active+.btn.btn-light-primary,.btn.btn-light-primary:focus:not(.btn-active),.btn.btn-light-primary:hover:not(.btn-active),.btn.btn-light-primary:active:not(.btn-active),.btn.btn-light-primary.active,.btn.btn-light-primary.show,.show>.btn.btn-light-primary{background-color:#fff!important}.butn{border:1px solid #009ef7!important;padding:calc(.65rem + 1px) calc(1.5rem + 1px)!important}.h-800px{min-height:120px;max-height:auto}.h-500{min-height:300px}.h-1000px{overflow:auto}.item{position:relative;padding-top:20px;display:inline-block}.notify-badge{position:absolute;right:0;top:195px;background:var(--Primary-50, #EAF8FF);border:2px solid var(--Primary-600, #00A3FF);text-align:center;border-radius:6px;color:#00a3ff;padding:5px 10px;font-size:15px}.notify-badge1{position:absolute;right:14px;top:5px;background:var(--Primary-50, #EAF8FF);text-align:center;border-radius:6px;border:2px solid var(--Primary-600, #00A3FF);color:#00a3ff;padding:0 7px;font-size:19px}.colorvalue{font-size:20px;color:#fff}.nwbg{top:23px!important;right:7px!important}.svg-icon.svg-icon-2x svg{width:20px!important;height:20px!important}.btn-outline{border-radius:8px;border:1px solid var(--Gray-300, #D0D5DD);background:var(--White, #FFF);box-shadow:0 1px 2px #1018280d;color:var(--Gray-700, #344054);font-size:14px;font-weight:500;line-height:24px}.text-timer{color:var(--Gray-900, #101828);font-size:24px;line-height:32px}.bg-timer{border-radius:12px;background:var(--Primary-25, #F6FCFF);padding:4px}\n"], dependencies: [{ kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
464
+ }
465
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AuditRetagComponent, decorators: [{
466
+ type: Component,
467
+ args: [{ selector: 'lib-audit-retag', template: "<div class=\"card\">\r\n <div class=\"card-header\">\r\n <div class=\"card-title\">\r\n <h3 class=\"flex-column\">\r\n <div class=\"card-label\">\r\n <span>{{filedetails?.storeId}}</span>\r\n <span class=\"mx-3 arrow-code\"> - </span>\r\n <span>{{filedetails?.Date}}</span>\r\n </div>\r\n </h3>\r\n <div class=\"rounded-3 ms-3 d-flex align-items-center bg-timer\">\r\n <span class=\"me-3 text-timer fw-semibold\">{{ formattedTime }}</span>\r\n <span><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <path\r\n d=\"M9.16667 2.87071C9.16667 2.62023 9.26617 2.38001 9.44329 2.20289C9.62041 2.02577 9.86063 1.92627 10.1111 1.92627H13.8889C14.1394 1.92627 14.3796 2.02577 14.5567 2.20289C14.7338 2.38001 14.8333 2.62023 14.8333 2.87071C14.8333 3.1212 14.7338 3.36142 14.5567 3.53854C14.3796 3.71565 14.1394 3.81516 13.8889 3.81516H12.9444V5.07442L12.9432 5.12605C14.5396 5.30097 16.0528 5.92787 17.3053 6.93308L17.3141 6.92553L18.2585 5.98108C18.374 5.85676 18.5208 5.76588 18.6835 5.71801C18.8463 5.67014 19.019 5.66706 19.1833 5.70908C19.3477 5.75111 19.4977 5.83669 19.6175 5.9568C19.7373 6.07692 19.8225 6.22713 19.8641 6.3916C19.906 6.55578 19.903 6.72823 19.8554 6.89085C19.8077 7.05348 19.7172 7.20029 19.5933 7.3159L18.6489 8.26034L18.6413 8.26915C19.6403 9.51974 20.2658 11.027 20.446 12.6174C20.6261 14.2078 20.3536 15.8167 19.6597 17.2591C18.9658 18.7014 17.8788 19.9185 16.5237 20.7704C15.1686 21.6222 13.6006 22.0741 12 22.0741C10.3994 22.0741 8.83137 21.6222 7.47629 20.7704C6.12122 19.9185 5.03419 18.7014 4.3403 17.2591C3.64641 15.8167 3.37386 14.2078 3.55402 12.6174C3.73418 11.027 4.35973 9.51974 5.35867 8.26915L5.35111 8.26034L4.40667 7.3159C4.23964 7.1369 4.14865 6.90003 4.15287 6.65524C4.1571 6.41045 4.25622 6.17687 4.42934 6.00375C4.60246 5.83063 4.83604 5.73151 5.08083 5.72728C5.32562 5.72306 5.56249 5.81405 5.74149 5.98108L6.68593 6.92553L6.69474 6.93308C7.94681 5.92809 9.45963 5.3012 11.0556 5.12605V3.81516H10.1111C9.86063 3.81516 9.62041 3.71565 9.44329 3.53854C9.26617 3.36142 9.16667 3.1212 9.16667 2.87071ZM12 20.1855C13.7535 20.1854 15.4352 19.4886 16.675 18.2485C17.9148 17.0085 18.6113 15.3267 18.6111 13.5732C18.6109 11.8196 17.9142 10.138 16.6741 8.89813C15.4341 7.65831 13.7523 6.96188 11.9987 6.96204C10.2452 6.96221 8.56354 7.65896 7.32372 8.89902C6.0839 10.1391 5.38747 11.8209 5.38763 13.5744C5.3878 15.328 6.08455 17.0096 7.32461 18.2494C8.56467 19.4893 10.2465 20.1857 12 20.1855ZM12.4899 11.7485L14.1647 10.0737C14.2517 9.98343 14.3559 9.91143 14.4711 9.86188C14.5863 9.81233 14.7102 9.78622 14.8356 9.78507C14.9611 9.78392 15.0854 9.80776 15.2015 9.85519C15.3176 9.90262 15.4231 9.9727 15.5118 10.0613C15.6005 10.15 15.6707 10.2554 15.7182 10.3714C15.7658 10.4875 15.7897 10.6118 15.7887 10.7372C15.7877 10.8626 15.7617 10.9866 15.7122 11.1018C15.6628 11.2171 15.5909 11.3213 15.5007 11.4085L13.8259 13.0846C13.9003 13.3645 13.9095 13.6579 13.8526 13.942C13.7958 14.226 13.6745 14.4933 13.4981 14.7231C13.3217 14.9529 13.0949 15.1391 12.8352 15.2675C12.5754 15.3958 12.2897 15.4628 12 15.4633C11.7327 15.461 11.4688 15.4019 11.226 15.29C10.9832 15.1781 10.767 15.0159 10.5916 14.8141C10.4162 14.6123 10.2857 14.3755 10.2087 14.1195C10.1316 13.8635 10.1099 13.594 10.1448 13.329C10.1798 13.0639 10.2706 12.8093 10.4114 12.582C10.5522 12.3547 10.7396 12.1599 10.9613 12.0104C11.183 11.861 11.4339 11.7604 11.6974 11.7152C11.9609 11.6701 12.231 11.6814 12.4899 11.7485Z\"\r\n fill=\"black\" />\r\n </svg></span>\r\n </div>\r\n </div>\r\n <div class=\"card-toolbar\">\r\n <div class=\"d-flex\">\r\n <div class=\"d-flex align-items-center position-relative my-1\">\r\n <a class=\"btn btn-sm btn-default btn-outline py-2 mx-2\" (click)=\"reviewdata()\"><span\r\n class=\"svg-icon svg-icon-primary svg-icon-2x\"><svg xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path\r\n d=\"M15.8337 10.0001H4.16699M4.16699 10.0001L10.0003 15.8334M4.16699 10.0001L10.0003 4.16675\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></span><span class=\"ms-3\">Back to Review</span></a>\r\n <button class=\"btn btn-sm btn-primary py-2 mx-2\" [disabled]=\"submitvalue\"\r\n (click)=\"submitaudit()\">Submit\r\n <span class=\"svg-icon svg-icon-primary svg-icon-2x\"><svg xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path\r\n d=\"M4.16699 10.0001H15.8337M15.8337 10.0001L10.0003 4.16675M15.8337 10.0001L10.0003 15.8334\"\r\n stroke=\"white\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></span>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"card-header\">\r\n <h3 class=\"card-title align-items-center flex-row\">\r\n <span class=\"card-label text-dark\">Total Files - <span>{{totalfile}}</span></span>\r\n \r\n </h3>\r\n <div class=\"card-toolbar \">\r\n <div class=\"d-flex\">\r\n <div class=\"d-flex align-items-center position-relative my-1\">\r\n <span class=\"me-3 text fw-semibold\">Unique Customers <span\r\n class=\" badge badge-light-primary\">{{auditmappingdata?.length ? auditmappingdata?.length :\r\n 0}}</span></span>\r\n <div *ngFor=\"let item of category\">\r\n <button class=\"btn btn-outline text w-semibold btn-sm py-2 butn-flag mx-2\" (click)=\"viewcategory(item)\" [disabled]=\"!item?.count\">View\r\n {{item?.name}}\r\n <span class=\" badge badge-light-primary\">{{item?.count}}</span> </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<div class=\"row\">\r\n <div *ngIf=\"auditLoading\" class=\"card mt-5\">\r\n <div class=\"card-body h-500px\">\r\n <div class=\"row loader d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- <h5 class=\"text-dark-600 fw-bold text-center mt-5\">Loading Audit file......</h5> -->\r\n </div>\r\n </div>\r\n <div *ngIf=\"!auditLoading\" class=\"col-md-5\">\r\n <div class=\"card mt-5\">\r\n <div class=\"card-body h-1000px\">\r\n <div class=\"card-label fw-bold\">Images for Retagging</div>\r\n <div class=\"text-sub mt-2 fw-semibold\">Drag and Drop on correct customers</div>\r\n <div class=\"item\" *ngFor=\"let obj1 of retagimage\" (dragover)=\"retagallowDrop($event)\">\r\n <img draggable=\"true\" (dragstart)=\"dragStart($event)\" id=\"{{obj1.img_id}}\" [src]=\"obj1.img_path\"\r\n class=\"my-3 mx-4 img-ret\" (click)=\"selectretagimage(obj1.img_id)\" name=\"retag\">\r\n <div class=\"text-center m-0 fs-7 fw-bold\">{{obj1.img_name}}</div>\r\n <span *ngIf=\"obj1.selected\" class=\"notify-badge1 nwbg\"><i class=\"fa fa-check colorvalue\"\r\n aria-hidden=\"true\" style=\"font-size:15px;color:#00A3FF\"></i></span>\r\n <span class=\"notify-badge cursor-pointer\" (click)=\"removeaudit(obj1)\"\r\n *ngIf=\"obj1.count>1\">{{obj1.count}}</span>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"!auditLoading\" class=\"col-md-7\">\r\n <div class=\"card mt-5\">\r\n <div class=\"card-body h-1000px\">\r\n <div class=\"card-label fw-bold\">Unique Customers <span class=\"card-label\">{{auditmappingdata?.length ?\r\n auditmappingdata?.length : 0}}</span></div>\r\n <div class=\"item\" *ngFor=\"let obj of auditmappingdata;let i=index\" style=\"padding: 10px;\">\r\n\r\n <img class=\"mx-3 mb-5 img\" [src]=\"obj.img_path\" id=\"{{obj.img_id}}\" alt=\"Image\" name=\"customer\"\r\n (dragover)=\"retagallowDrop($event)\" (drop)=\"dropImage($event)\" draggable=\"true\"\r\n (dragstart)=\"dragStart($event)\" (click)=\"selectgroupimage(obj.img_id )\">\r\n <div class=\"text-center m-0 fs-7 fw-bold\">{{obj.img_name}}</div>\r\n <span *ngIf=\"obj.selected\" class=\"notify-badge1\"><i class=\"fa fa-check\" aria-hidden=\"true\"\r\n style=\"font-size:15px;color:#00A3FF\"></i></span>\r\n\r\n <span class=\"notify-badge cursor-pointer\" (click)=\"removeaudit(obj)\"\r\n *ngIf=\"obj.count>1\">{{obj.count}}</span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n\r\n</div>", styles: [".img{width:90px;height:200px}.text{color:var(--Gray-700, #344054);font-size:14px;line-height:20px}.text-sub{color:var(--Gray-500, #667085)!important;font-family:Inter;font-size:14px!important;font-weight:400!important;line-height:20px}.card-label{font-family:Inter;font-style:normal;font-size:18px!important}.text-col{font-family:Inter;font-style:normal;font-weight:400;font-size:14px;line-height:17px;color:#3f4254}.img-ret{width:90px;height:170px}.butn:hover{color:#009ef7!important}.butn-flag{border:1px solid #009ef7!important;border-right-style:none!important;border-radius:.5rem 0rem 0rem .5rem!important;padding:calc(.25rem + 1px) calc(1.5rem + 1px)!important;background-color:#fff!important}.butn-flag1{border:1px solid #009ef7!important;border-radius:0rem .5rem .5rem 0rem!important;padding:calc(.25rem + 1px) calc(1.5rem + 1px)!important;background-color:#fff!important}.btn.btn-light-primary:hover:not(.btn-active){background-color:#fff!important}.btn-check:checked+.btn.btn-light-primary,.btn-check:active+.btn.btn-light-primary,.btn.btn-light-primary:focus:not(.btn-active),.btn.btn-light-primary:hover:not(.btn-active),.btn.btn-light-primary:active:not(.btn-active),.btn.btn-light-primary.active,.btn.btn-light-primary.show,.show>.btn.btn-light-primary{background-color:#fff!important}.butn{border:1px solid #009ef7!important;padding:calc(.65rem + 1px) calc(1.5rem + 1px)!important}.h-800px{min-height:120px;max-height:auto}.h-500{min-height:300px}.h-1000px{overflow:auto}.item{position:relative;padding-top:20px;display:inline-block}.notify-badge{position:absolute;right:0;top:195px;background:var(--Primary-50, #EAF8FF);border:2px solid var(--Primary-600, #00A3FF);text-align:center;border-radius:6px;color:#00a3ff;padding:5px 10px;font-size:15px}.notify-badge1{position:absolute;right:14px;top:5px;background:var(--Primary-50, #EAF8FF);text-align:center;border-radius:6px;border:2px solid var(--Primary-600, #00A3FF);color:#00a3ff;padding:0 7px;font-size:19px}.colorvalue{font-size:20px;color:#fff}.nwbg{top:23px!important;right:7px!important}.svg-icon.svg-icon-2x svg{width:20px!important;height:20px!important}.btn-outline{border-radius:8px;border:1px solid var(--Gray-300, #D0D5DD);background:var(--White, #FFF);box-shadow:0 1px 2px #1018280d;color:var(--Gray-700, #344054);font-size:14px;font-weight:500;line-height:24px}.text-timer{color:var(--Gray-900, #101828);font-size:24px;line-height:32px}.bg-timer{border-radius:12px;background:var(--Primary-25, #F6FCFF);padding:4px}\n"] }]
468
+ }], ctorParameters: () => [{ type: i1.NgbModal }, { type: i2.Router }, { type: i3.AuditService }, { type: i4.ToastService }, { type: i2.ActivatedRoute }, { type: i5.TimerService }, { type: i0.ChangeDetectorRef }], propDecorators: { handleKeyPress: [{
469
+ type: HostListener,
470
+ args: ['window:keydown', ['$event']]
471
+ }] } });
472
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXVkaXQtcmV0YWcuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFuZ28tbWFuYWdlLXRpY2tldHMvc3JjL2xpYi9jb21wb25lbnRzL2F1ZGl0LXJldGFnL2F1ZGl0LXJldGFnLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RhbmdvLW1hbmFnZS10aWNrZXRzL3NyYy9saWIvY29tcG9uZW50cy9hdWRpdC1yZXRhZy9hdWRpdC1yZXRhZy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLFlBQVksRUFBZ0MsTUFBTSxlQUFlLENBQUM7QUFDOUYsT0FBTyxLQUFLLFFBQVEsTUFBTSxXQUFXLENBQUM7QUFLdEMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDOUUsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sb0RBQW9ELENBQUM7QUFDL0YsT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBRXhELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHdDQUF3QyxDQUFDOzs7Ozs7OztBQU8vRSxNQUFNLE9BQU8sbUJBQW1CO0lBeUZYO0lBQWdDO0lBQXdCO0lBQ2pFO0lBQThCO0lBQStCO0lBQW9DO0lBeEYzRyxTQUFTLEdBQUcsQ0FBQyxDQUFDO0lBQ2QsUUFBUSxHQUFHLENBQUMsQ0FBQztJQUNiLElBQUksR0FBRyxDQUFDLENBQUM7SUFDVCxRQUFRLEdBQUcsQ0FBQyxDQUFDO0lBQ2IsU0FBUyxHQUFRLEVBQUUsQ0FBQTtJQUNuQixVQUFVLEdBQVEsRUFBRSxDQUFBO0lBQ3BCLFdBQVcsR0FBWSxJQUFJLENBQUM7SUFDNUIsZ0JBQWdCLEdBQVEsRUFBRSxDQUFDO0lBQzNCLGFBQWEsR0FBUSxDQUFDLENBQUM7SUFDdkIsU0FB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ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBIb3N0TGlzdGVuZXIsIE9uRGVzdHJveSwgQ2hhbmdlRGV0ZWN0b3JSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0ICogYXMgTFpTdHJpbmcgZnJvbSAnbHotc3RyaW5nJztcclxuaW1wb3J0IHsgVG9hc3RTZXJ2aWNlIH0gZnJvbSAndGFuZ28tYXBwLXVpLXNoYXJlZCc7XHJcbmltcG9ydCB7IEF1ZGl0U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2F1ZGl0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBOZ2JNb2RhbCB9IGZyb20gJ0BuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwJztcclxuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IFJlbW92ZUF1ZGl0Q29tcG9uZW50IH0gZnJvbSAnLi4vcmVtb3ZlLWF1ZGl0L3JlbW92ZS1hdWRpdC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBBdWRpdFJlcG9ydFBvcHVwQ29tcG9uZW50IH0gZnJvbSAnLi4vYXVkaXQtcmVwb3J0LXBvcHVwL2F1ZGl0LXJlcG9ydC1wb3B1cC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBTdWJqZWN0LCB0YWtlVW50aWwsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBUaW1lclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy90aW1lci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVmlld2NhdGVnb3J5Q29tcG9uZW50IH0gZnJvbSAnLi4vdmlld2NhdGVnb3J5L3ZpZXdjYXRlZ29yeS5jb21wb25lbnQnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdsaWItYXVkaXQtcmV0YWcnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9hdWRpdC1yZXRhZy5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmw6ICcuL2F1ZGl0LXJldGFnLmNvbXBvbmVudC5zY3NzJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgQXVkaXRSZXRhZ0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuXHJcbiAgdG90YWxmaWxlID0gMDtcclxuICBjdXN0b21lciA9IDA7XHJcbiAganVuayA9IDA7XHJcbiAgZW1wbG95ZWUgPSAwO1xyXG4gIGp1bmtpbWFnZTogYW55ID0gW11cclxuICByZXRhZ2ltYWdlOiBhbnkgPSBbXVxyXG4gIHN1Ym1pdHZhbHVlOiBib29sZWFuID0gdHJ1ZTtcclxuICBhdWRpdG1hcHBpbmdkYXRhOiBhbnkgPSBbXTtcclxuICBjdXN0b21lcmNvdW50OiBhbnkgPSAwO1xyXG4gIGp1bmtjb3VudDogYW55ID0gMDtcclxuICBlbXBsb3llZWNvdW50OiBhbnkgPSAwO1xyXG4gIGVtcGxveWVpbWFnZTogYW55ID0gW107XHJcbiAgZmlsZWRldGFpbHM6IGFueSA9IHt9O1xyXG4gIGF1ZGl0TG9hZGluZyA9IGZhbHNlO1xyXG4gIHNlbGVjdGVkVHlwZTogYW55O1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgZGVzdHJveSQgPSBuZXcgU3ViamVjdCgpO1xyXG4gIHRpbWVQYXNzZWQ6IG51bWJlciA9IDA7XHJcbiAgc3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gfCBudWxsID0gbnVsbDtcclxuICBmb3JtYXR0ZWRUaW1lOiBzdHJpbmcgPSAnMDA6MDA6MDAnO1xyXG5cclxuICBvcGVubW9kZWw6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBjYXRlZ29yeTogYW55ID0gW11cclxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6a2V5ZG93bicsIFsnJGV2ZW50J10pXHJcbiAgaGFuZGxlS2V5UHJlc3MoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcclxuICAgIGlmICh0aGlzLm9wZW5tb2RlbCkgcmV0dXJuO1xyXG4gICAgLy8gaWYgKGV2ZW50LmtleSA9PT0gJ2cnIHx8IGV2ZW50LmNvZGUgPT09ICdLZXlHJykge1xyXG4gICAgLy8gICB2YXIgZ3JvdXAgPSB0aGlzLmF1ZGl0bWFwcGluZ2RhdGEuZmlsdGVyKChkYXRhOiBhbnkpID0+IGRhdGEuc2VsZWN0ZWQgPT09IHRydWUpXHJcbiAgICAvLyAgIGlmIChncm91cC5sZW5ndGggPiAwKSB7XHJcbiAgICAvLyAgICAgaWYgKGdyb3VwLmxlbmd0aCA9PSAxKSB7XHJcbiAgICAvLyAgICAgICB0aGlzLnRvYXN0ci5nZXRFcnJvclRvYXN0KCdQbGVhc2UgU2VsZWN0IG11bHRpcGxlIGZpbGUgdGhlbiBhZGQgdG8gR3JvdXAnKVxyXG4gICAgLy8gICAgIH0gZWxzZSB7XHJcbiAgICAvLyAgICAgICBsZXQgZHVtbXlhcnJheSA9IGdyb3VwLnNoaWZ0KClcclxuICAgIC8vICAgICAgIHZhciBncm91cGltYWdlczogYW55ID0gW11cclxuICAgIC8vICAgICAgIGdyb3VwLmZvckVhY2goKGRhdGE6IGFueSkgPT4ge1xyXG4gICAgLy8gICAgICAgICB0aGlzLmF1ZGl0bWFwcGluZ2RhdGEuc3BsaWNlKHRoaXMuYXVkaXRtYXBwaW5nZGF0YS5maW5kSW5kZXgoKHsgaW1nX25hbWUgfTogeyBpbWdfbmFtZTogc3RyaW5nIH0pID0+IGltZ19uYW1lID09IGRhdGEuaW1nX25hbWUpLCAxKTtcclxuICAgIC8vICAgICAgICAgZ3JvdXBpbWFnZXMucHVzaChkYXRhLm1hcHBlZGlkWzBdKVxyXG4gICAgLy8gICAgICAgfSlcclxuICAgIC8vICAgICAgIGR1bW15YXJyYXkuY291bnQgPSBkdW1teWFycmF5LmNvdW50ICsgZ3JvdXBpbWFnZXMubGVuZ3RoXHJcbiAgICAvLyAgICAgICBkdW1teWFycmF5LnNlbGVjdGVkID0gZmFsc2VcclxuXHJcbiAgICAvLyAgICAgICBkdW1teWFycmF5Lm1hcHBlZGlkID0gWy4uLmR1bW15YXJyYXkubWFwcGVkaWQsIC4uLmdyb3VwaW1hZ2VzXVxyXG4gICAgLy8gICAgICAgY29uc3QganNvblN0cmluZyA9IEpTT04uc3RyaW5naWZ5KHRoaXMuYXVkaXRtYXBwaW5nZGF0YSk7XHJcbiAgICAvLyAgICAgICBjb25zdCBjb21wcmVzc2VkRGF0YSA9IExaU3RyaW5nLmNvbXByZXNzKGpzb25TdHJpbmcpO1xyXG4gICAgLy8gICAgICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSgnYXVkaXQnLCBjb21wcmVzc2VkRGF0YSlcclxuICAgIC8vICAgICB9XHJcblxyXG4gICAgLy8gICAgIC8vIHRoaXMuaW5pdGlhbF9kYXRhX2xvYWRpbmcoKVxyXG4gICAgLy8gICB9IGVsc2Uge1xyXG4gICAgLy8gICAgIHRoaXMudG9hc3RyLmdldEVycm9yVG9hc3QoJ1BsZWFzZSBTZWxlY3QgZmlsZSB0aGVuIGFkZCB0byBHcm91cCcpXHJcbiAgICAvLyAgIH1cclxuICAgIC8vIH1cclxuICAgIGNvbnN0IHByZXNzZWQgPSAoZXZlbnQua2V5IHx8ICcnKS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgY29uc3QgbWF0Y2hlZCA9IHRoaXMuY2F0ZWdvcnkuZmluZCgobTogYW55KSA9PiB7XHJcbiAgICAgIGlmICghbS5rZXkpIHJldHVybiBmYWxzZTtcclxuICAgICAgY29uc3QgbWFwS2V5ID0gbS5rZXkudG9Mb3dlckNhc2UoKTtcclxuICAgICAgLy8gbWF0Y2ggYnkgZXZlbnQua2V5IChwcmVmZXJyZWQpIE9SIGJ5IGV2ZW50LmNvZGUgbGlrZSAnS2V5SidcclxuICAgICAgcmV0dXJuIHByZXNzZWQgPT09IG1hcEtleSB8fCBldmVudC5jb2RlID09PSBgS2V5JHttYXBLZXkudG9VcHBlckNhc2UoKX1gO1xyXG4gICAgfSk7XHJcbiAgICBjb25zb2xlLmxvZyhtYXRjaGVkKVxyXG4gICAgaWYgKCFtYXRjaGVkKSByZXR1cm5cclxuICAgIGlmIChtYXRjaGVkKSB7XHJcbiAgICAgIHZhciBuZXdEYXRhID0gdGhpcy5hdWRpdG1hcHBpbmdkYXRhLmZpbHRlcigoZGF0YTogYW55KSA9PiBkYXRhLnNlbGVjdGVkID09PSB0cnVlKVxyXG4gICAgICBpZiAobmV3RGF0YS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgdmFyIG9sZERhdGEgPSBKU09OLnBhcnNlKHNlc3Npb25TdG9yYWdlLmdldEl0ZW0obWF0Y2hlZD8udHlwZSkgfHwgJ3t9JylcclxuICAgICAgICBpZiAoTnVtYmVyKG9sZERhdGEubGVuZ3RoKSA+IDApIHtcclxuICAgICAgICAgIG5ld0RhdGEgPSBbLi4ub2xkRGF0YSwgLi4ubmV3RGF0YV1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgbmV3RGF0YSA9IG5ld0RhdGFcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5jYXRlZ29yeS5tYXAoKGRhdGE6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKGRhdGEudHlwZSA9PT0gbWF0Y2hlZD8udHlwZSkge1xyXG4gICAgICAgICAgICBkYXRhLmNvdW50ID0gbmV3RGF0YS5sZW5ndGhcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0obWF0Y2hlZD8udHlwZSwgSlNPTi5zdHJpbmdpZnkobmV3RGF0YSkpXHJcbiAgICAgICAgdGhpcy5hdWRpdG1hcHBpbmdkYXRhID0gdGhpcy5hdWRpdG1hcHBpbmdkYXRhLmZpbHRlcigoZGF0YTogYW55KSA9PiBkYXRhLnNlbGVjdGVkID09PSBmYWxzZSlcclxuICAgICAgICBjb25zdCBqc29uU3RyaW5nID0gSlNPTi5zdHJpbmdpZnkodGhpcy5hdWRpdG1hcHBpbmdkYXRhKTtcclxuICAgICAgICBjb25zdCBjb21wcmVzc2VkRGF0YSA9IExaU3RyaW5nLmNvbXByZXNzKGpzb25TdHJpbmcpO1xyXG4gICAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oJ2F1ZGl0JywgY29tcHJlc3NlZERhdGEpXHJcbiAgICAgICAgdGhpcy50b2FzdHIuZ2V0U3VjY2Vzc1RvYXN0KGAke21hdGNoZWQ/LnR5cGV9IEFkZGVkIFN1Y2Nlc2Z1bGx5IWApO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMudG9hc3RyLmdldEVycm9yVG9hc3QoYFBsZWFzZSBTZWxlY3QgZmlsZSB0aGVuIGFkZCB0byAke21hdGNoZWQ/LnR5cGV9IGApXHJcbiAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gIH1cclxuICBjb25zdHJ1Y3RvcihwdWJsaWMgbW9kYWxTZXJ2aWNlOiBOZ2JNb2RhbCwgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlciwgcHJpdmF0ZSAkYXBpOiBBdWRpdFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHRvYXN0cjogVG9hc3RTZXJ2aWNlLCBwcml2YXRlIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSwgcHJpdmF0ZSB0aW1lclNlcnZpY2U6IFRpbWVyU2VydmljZSwgcHJpdmF0ZSBjZDogQ2hhbmdlRGV0ZWN0b3JSZWYpIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRUeXBlID0gdGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbU1hcC5nZXQoJ3R5cGUnKVxyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmdldEF1ZGl0Q29uZmlnKClcclxuICAgIGlmICh0aGlzLnJldGFnaW1hZ2UubGVuZ3RoID09IDApIHtcclxuICAgICAgdGhpcy5zdWJtaXR2YWx1ZSA9IGZhbHNlO1xyXG4gICAgfVxyXG4gICAgdGhpcy5hdWRpdExvYWRpbmcgPSBmYWxzZVxyXG4gICAgdGhpcy5zZXRUaW1lcigpO1xyXG4gIH1cclxuICBnZXRBdWRpdENvbmZpZygpIHtcclxuXHJcbiAgICBsZXQgZmlsZWRhdGEgPSBKU09OLnBhcnNlKHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ3RvdGFsZmlsZXMnKSB8fCAne30nKVxyXG4gICAgdGhpcy4kYXBpLmdldEF1ZGl0Y29uZmlnKGZpbGVkYXRhPy5maWxlZGV0YWlscz8uY2xpZW50SWQpLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAocmVzICYmIHJlcz8uY29kZSA9PSAyMDApIHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKHJlcy5kYXRhLmZvb3RmYWxsRGlyZWN0b3J5Q29uZmlncy50YWdnaW5nTGltaXRhdGlvbilcclxuICAgICAgICAgIHRoaXMuY2F0ZWdvcnkgPSByZXMuZGF0YS5mb290ZmFsbERpcmVjdG9yeUNvbmZpZ3MudGFnZ2luZ0xpbWl0YXRpb25cclxuICAgICAgICAgIHRoaXMuaW5pdGlhbF9kYXRhX2xvYWRpbmcoKVxyXG5cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG4gIHNldFRpbWVyKCkge1xyXG4gICAgdGhpcy5zdWJzY3JpcHRpb24gPSB0aGlzLnRpbWVyU2VydmljZS5nZXRUaW1lUGFzc2VkKCkuc3Vic2NyaWJlKHRpbWUgPT4ge1xyXG4gICAgICB0aGlzLnRpbWVQYXNzZWQgPSB0aW1lO1xyXG4gICAgICB0aGlzLmZvcm1hdHRlZFRpbWUgPSB0aGlzLnRpbWVyU2VydmljZS5mb3JtYXRUaW1lKHRpbWUpO1xyXG4gICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcclxuICAgIH0pO1xyXG4gICAgdGhpcy50aW1lclNlcnZpY2Uuc3RhcnRUaW1lcigpO1xyXG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgdGhpcy5oYW5kbGVHbG9iYWxNb3VzZUV2ZW50KTtcclxuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5oYW5kbGVHbG9iYWxNb3VzZUV2ZW50KTtcclxuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZW50ZXInLCB0aGlzLmhhbmRsZUdsb2JhbE1vdXNlRXZlbnQpO1xyXG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdGhpcy5oYW5kbGVHbG9iYWxNb3VzZUV2ZW50KTtcclxuICB9XHJcblxyXG4gIGhhbmRsZUdsb2JhbE1vdXNlRXZlbnQgPSAoKTogdm9pZCA9PiB7XHJcbiAgICB0aGlzLnRpbWVyU2VydmljZS5zdGFydFRpbWVyKCk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuZGVzdHJveSQubmV4dCh0cnVlKTtcclxuICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcclxuICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHRoaXMuaGFuZGxlR2xvYmFsTW91c2VFdmVudCk7XHJcbiAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMuaGFuZGxlR2xvYmFsTW91c2VFdmVudCk7XHJcbiAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZWVudGVyJywgdGhpcy5oYW5kbGVHbG9iYWxNb3VzZUV2ZW50KTtcclxuICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHRoaXMuaGFuZGxlR2xvYmFsTW91c2VFdmVudCk7XHJcbiAgICB0aGlzLnRpbWVyU2VydmljZS5jbGVhclRpbWVyKClcclxuXHJcbiAgfVxyXG5cclxuICBpbml0aWFsX2RhdGFfbG9hZGluZygpIHtcclxuICAgIGlmICgnYXVkaXQnIGluIHNlc3Npb25TdG9yYWdlKSB7XHJcbiAgICAgIGxldCBzdHJpbmdpZnlkYXRhID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgnYXVkaXQnKSB8fCAne30nXHJcbiAgICAgIGNvbnN0IGRlY29tcHJlc3NlZERhdGEgPSBMWlN0cmluZy5kZWNvbXByZXNzKHN0cmluZ2lmeWRhdGEpO1xyXG4gICAgICB2YXIgYXVkaXRkYXRhID0gSlNPTi5wYXJzZShkZWNvbXByZXNzZWREYXRhIHx8ICd7fScpXHJcbiAgICAgIGlmIChhdWRpdGRhdGEubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIHRoaXMuYXVkaXRtYXBwaW5nZGF0YSA9IGF1ZGl0ZGF0YTtcclxuICAgICAgICB0aGlzLmN1c3RvbWVyY291bnQgPSB0aGlzLmF1ZGl0bWFwcGluZ2RhdGEubGVuZ3RoXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5hdWRpdG1hcHBpbmdkYXRhID0gW11cclxuICAgICAgICB0aGlzLmN1c3RvbWVyY291bnQgPSAwXHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmNhdGVnb3J5Lm1hcCgoZGF0YTogYW55KSA9PiB7XHJcbiAgICAgIHZhciBjb3VudCA9IEpTT04ucGFyc2Uoc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShkYXRhLnR5cGUpIHx8ICd7fScpXHJcbiAgICAgIGRhdGEuY291bnQgPSBjb3VudD8ubGVuZ3RoXHJcbiAgICB9KVxyXG4gICAgaWYgKCdyZXRhZycgaW4gc2Vzc2lvblN0b3JhZ2UpIHtcclxuICAgICAgdmFyIHJldGFnZGF0YSA9IEpTT04ucGFyc2Uoc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgncmV0YWcnKSB8fCAne30nKVxyXG4gICAgICBpZiAocmV0YWdkYXRhLmxlbmd0aCA+IDApIHtcclxuICAgICAgICB0aGlzLnJldGFnaW1hZ2UgPSByZXRhZ2RhdGE7XHJcbiAgICAgICAgdGhpcy5zdWJtaXR2YWx1ZSA9IHRydWU7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5yZXRhZ2ltYWdlID0gW107XHJcbiAgICAgIH1cclxuICAgICAgXHJcbiAgICB9XHJcbiAgIFxyXG4gICAgaWYgKCd0b3RhbGZpbGVzJyBpbiBzZXNzaW9uU3RvcmFnZSkge1xyXG4gICAgICB2YXIgZmlsZXMgPSBKU09OLnBhcnNlKHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ3RvdGFsZmlsZXMnKSB8fCAne30nKVxyXG4gICAgICB0aGlzLnRvdGFsZmlsZSA9IGZpbGVzPy50b3RhbGZpbGVzXHJcbiAgICAgIHRoaXMuZmlsZWRldGFpbHMgPSBmaWxlcz8uZmlsZWRldGFpbHNcclxuXHJcbiAgICB9XHJcbiAgfVxyXG4gIGdldG1hcHBpbmdkYXRhKCkge1xyXG4gICAgdGhpcy5hdWRpdExvYWRpbmcgPSBmYWxzZVxyXG4gICAgdmFyIHRvdGFsZmlsZTogYW55ID0gSlNPTi5wYXJzZShzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCd0b3RhbGZpbGVzJykgfHwgJ3t9Jyk7XHJcbiAgICB0aGlzLmZpbGVkZXRhaWxzID0gdG90YWxmaWxlPy5maWxlZGV0YWlsc1xyXG5cclxuICAgIHZhciBwYXlsb2FkOiBhbnkgPSB7XHJcbiAgICAgIHN0b3JlSWQ6IHRvdGFsZmlsZT8uZmlsZWRldGFpbHM/LnN0b3JlSWQsXHJcbiAgICAgIGZpbGVEYXRlOiB0b3RhbGZpbGU/LmZpbGVkZXRhaWxzPy5EYXRlLFxyXG4gICAgICBhdWRpdElkOiB0b3RhbGZpbGU/LmF1ZGl0SWQsXHJcbiAgICAgIGNvdW50OiB0b3RhbGZpbGU/LnRvdGFsZmlsZXNcclxuICAgIH1cclxuICAgIHRoaXMuJGFwaS5nZXRBdWRpdG1hcHBpbmdsaXN0KHBheWxvYWQpLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAocmVzICYmIHJlcz8uY29kZSA9PSAyMDApIHtcclxuICAgICAgICAgIHRoaXMuYXVkaXRMb2FkaW5nID0gZmFsc2VcclxuICAgICAgICAgIHNlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0oJ3JldGFnJylcclxuICAgICAgICAgIHRoaXMucmV0YWdpbWFnZSA9IFtdXHJcbiAgICAgICAgICB0aGlzLmNhdGVnb3J5Lm1hcCgoZGF0YTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGxldCBmaWx0ZXJEYXRhID0gcmVzPy5kYXRhPy5yZXN1bHQ/LmRyYWZ0ZWREYXRhPy5maWx0ZXIoKHg6IGFueSkgPT4geC50eXBlID09PSBkYXRhLnR5cGUpXHJcbiAgICAgICAgICAgIGRhdGEudmFsdWUgPSBmaWx0ZXJEYXRhWzBdPy52YWx1ZSAmJiBmaWx0ZXJEYXRhWzBdPy52YWx1ZS5sZW5ndGggPiAwID8gZmlsdGVyRGF0YVswXT8udmFsdWUgOiBbXVxyXG4gICAgICAgICAgICBkYXRhLmNvdW50ID0gZGF0YT8udmFsdWU/Lmxlbmd0aFxyXG4gICAgICAgICAgICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKGRhdGE/LnR5cGUsIEpTT04uc3RyaW5naWZ5KGRhdGE/LnZhbHVlICYmIGRhdGE/LnZhbHVlLmxlbmd0aCA+IDAgPyBkYXRhPy52YWx1ZSA6IFtdKSlcclxuXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgbGV0IGN1c3RvbWVyRGF0YSA9IHJlcz8uZGF0YT8ucmVzdWx0Py5kcmFmdGVkRGF0YT8uZmlsdGVyKCh4OiBhbnkpID0+IHgudHlwZSA9PT0gJ2N1c3RvbWVyJylcclxuXHJcbiAgICAgICAgICB0aGlzLmF1ZGl0bWFwcGluZ2RhdGEgPSBjdXN0b21lckRhdGFbMF0/LnZhbHVlXHJcbiAgICAgICAgICBjb25zdCBqc29uU3RyaW5nID0gSlNPTi5zdHJpbmdpZnkoY3VzdG9tZXJEYXRhWzBdPy52YWx1ZSk7XHJcbiAgICAgICAgICBjb25zdCBjb21wcmVzc2VkRGF0YSA9IExaU3RyaW5nLmNvbXByZXNzKGpzb25TdHJpbmcpO1xyXG4gICAgICAgICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSgnYXVkaXQnLCBjb21wcmVzc2VkRGF0YSlcclxuICAgICAgICAgIHRoaXMuaW5pdGlhbF9kYXRhX2xvYWRpbmcoKVxyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAgZXJyb3I6IChlcnI6IGFueSkgPT4ge1xyXG5cclxuICAgICAgfSxcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICByZXZpZXdkYXRhKCkge1xyXG4gICAgdGhpcy5zdWJtaXR2YWx1ZSA9IGZhbHNlO1xyXG4gICAgdmFyIHRvdGFsZmlsZTogYW55ID0gSlNPTi5wYXJzZShzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCd0b3RhbGZpbGVzJykgfHwgJ3t9Jyk7XHJcbiAgICBpZiAoJ2F1ZGl0JyBpbiBzZXNzaW9uU3RvcmFnZSkge1xyXG4gICAgICBsZXQgc3RyaW5naWZ5ZGF0YSA9IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ2F1ZGl0JykgfHwgJ3t9J1xyXG4gICAgICBjb25zdCBkZWNvbXByZXNzZWREYXRhID0gTFpTdHJpbmcuZGVjb21wcmVzcyhzdHJpbmdpZnlkYXRhKTtcclxuICAgICAgdmFyIGF1ZGl0ZGF0YSA9IEpTT04ucGFyc2UoZGVjb21wcmVzc2VkRGF0YSB8fCAne30nKVxyXG4gICAgICBpZiAoYXVkaXRkYXRhLmxlbmd0aCA+IDApIHtcclxuICAgICAgICB0aGlzLmF1ZGl0bWFwcGluZ2RhdGEgPSBhdWRpdGRhdGE7XHJcbiAgICAgICAgdGhpcy5jdXN0b21lcmNvdW50ID0gdGhpcy5hdWRpdG1hcHBpbmdkYXRhLmxlbmd0aDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKCdyZXRhZycgaW4gc2Vzc2lvblN0b3JhZ2UpIHtcclxuICAgICAgdmFyIHJldGFnZGF0YSA9IEpTT04ucGFyc2Uoc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgncmV0YWcnKSB8fCAne30nKVxyXG4gICAgICB0aGlzLnJldGFnaW1hZ2UgPSByZXRhZ2RhdGE7XHJcbiAgICAgIHRoaXMuYXVkaXRtYXBwaW5nZGF0YSA9IFsuLi50aGlzLmF1ZGl0bWFwcGluZ2RhdGEsIC4uLnRoaXMucmV0YWdpbWFnZV1cclxuICAgICAgY29uc3QganNvblN0cmluZyA9IEpTT04uc3RyaW5naWZ5KHRoaXMuYXVkaXRtYXBwaW5nZGF0YSk7XHJcbiAgICAgIGNvbnN0IGNvbXByZXNzZWREYXRhID0gTFpTdHJpbmcuY29tcHJlc3MoanNvblN0cmluZyk7XHJcbiAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oJ2F1ZGl0JywgY29tcHJlc3NlZERhdGEpXHJcbiAgICAgIHNlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0oJ3JldGFnJylcclxuICAgICAgdGhpcy5yZXRhZ2ltYWdlID0gW107XHJcbiAgICB9XHJcbiAgICBsZXQgc3RyaW5naWZ5ZGF0YSA9IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ2F1ZGl0JykgfHwgJ3t9J1xyXG4gICAgY29uc3QgZGVjb21wcmVzc2VkRGF0YSA9IExaU3RyaW5nLmRlY29tcHJlc3Moc3RyaW5naWZ5ZGF0YSk7XHJcbiAgICB2YXIgY3VzdG9tZXIgPSBKU09OLnBhcnNlKGRlY29tcHJlc3NlZERhdGEgfHwgJ3t9JylcclxuICAgIGxldCBzdG9yZWREYXRhID0gW1xyXG4gICAgICB7XHJcbiAgICAgICAgdHlwZTogXCJjdXN0b21lclwiLFxyXG4gICAgICAgIHZhbHVlOiBjdXN0b21lciA/IGN1c3RvbWVyIDogW10sXHJcbiAgICAgIH1cclxuICAgIF1cclxuXHJcbiAgICB0aGlzLmNhdGVnb3J5Lm1hcCgoZGF0YTogYW55KSA9PiB7XHJcbiAgICAgIGxldCBzZXNzaW9udmFsdWUgPSBKU09OLnBhcnNlKHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oZGF0YS50eXBlKSB8fCAne30nKTtcclxuICAgICAgc3RvcmVkRGF0YS5wdXNoKHtcclxuICAgICAgICB0eXBlOiBkYXRhLnR5cGUsXHJcbiAgICAgICAgdmFsdWU6IHNlc3Npb252YWx1ZSAmJiBzZXNzaW9udmFsdWUubGVuZ3RoID4gMCA/IHNlc3Npb252YWx1ZSA6IFtdXHJcbiAgICAgIH0pXHJcbiAgICB9KVxyXG4gICAgY29uc29sZS5sb2coXCLwn5qAIH4gU3RhcnRBdWRpdENvbXBvbmVudCB+IFJldmlld2RhdGEgfiBzdG9yZWREYXRhOlwiLCBzdG9yZWREYXRhKVxyXG4gICAgdmFyIGluc2Vyb2JqOiBhbnkgPSB7XHJcblxyXG4gICAgICBzdG9yZUlkOiB0b3RhbGZpbGU/LmZpbGVkZXRhaWxzPy5zdG9yZUlkLFxyXG4gICAgICBhdWRpdElkOiB0b3RhbGZpbGU/LmF1ZGl0SWQgPyB0b3RhbGZpbGU/LmF1ZGl0SWQgOiB0b3RhbGZpbGU/LmZpbGVkZXRhaWxzLmF1ZGl0SWQsXHJcbiAgICAgIGZpbGVEYXRlOiB0b3RhbGZpbGU/LmZpbGVkZXRhaWxzPy5EYXRlLFxyXG4gICAgICB0b3RhbENvdW50OiB0b3RhbGZpbGU/LnRvdGFsZmlsZXMgPyB0b3RhbGZpbGUudG90YWxmaWxlcyA6IDAsXHJcbiAgICAgIHJldGFnQ291bnQ6IDAsXHJcbiAgICAgIHRpbWVTcGVudDogdGhpcy50aW1lUGFzc2VkLFxyXG4gICAgICByZXRhZ0ltYWdlOiBbXSxcclxuICAgICAgZHJhZnRlZERhdGE6IHN0b3JlZERhdGFcclxuICAgIH1cclxuICAgIHRoaXMuJGFwaS5zYXZlRHJhZnQoaW5zZXJvYmopLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAocmVzICYmIHJlcy5jb2RlID09IDIwMCkge1xyXG4gICAgICAgICAgdGhpcy5nZXRtYXBwaW5nZGF0YSgpO1xyXG4gICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW1wiL21hbmFnZS90aWNrZXRzL21hcHBpbmctbGlzdFwiLF0pXHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcjogKGVycjogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy50b2FzdHIuZ2V0RXJyb3JUb2FzdChlcnI/LmVycm9yKVxyXG4gICAgICB9LFxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIHJldGFnYWxsb3dEcm9wKGV2ZW50OiBhbnkpIHtcclxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgfVxyXG4gIGRyYWdTdGFydChldmVudDogYW55KSB7XHJcbiAgICBldmVudC5kYXRhVHJhbnNmZXIuc2V0RGF0YShcInRleHQvcGxhaW5cIiwgZXZlbnQudGFyZ2V0LmlkKTtcclxuICB9XHJcblxyXG4gIGRyb3ByZXRhZyhldmVudDogYW55KSB7XHJcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgY29uc3QgZHJvcHJldGFnaW1hZ2UgPSBldmVudC5kYXRhVHJhbnNmZXIuZ2V0RGF0YSgndGV4dC9wbGFpbicpO1xyXG4gICAgZXZlbnQudGFyZ2V0LmFwcGVuZENoaWxkKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGRyb3ByZXRhZ2ltYWdlKSk7XHJcbiAgICBjb25zdCBkcm9wem9uZTogYW55ID0gZHJvcHJldGFnaW1hZ2U7XHJcbiAgICB0aGlzLmF1ZGl0bWFwcGluZ2RhdGEubWFwKChkYXRhOiBhbnkpID0+IHtcclxuXHJcbiAgICAgIGlmIChkYXRhLmltZ19pZCA9PSBkcm9wem9uZS5pZCkge1xyXG4gICAgICAgIGlmIChkYXRhLm1hcHBlZGlkLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIHZhciBmaW5kb25lID0gdGhpcy5hdWRpdG1hcHBpbmdkYXRhLmZpbHRlcigoZGF0YTogYW55KSA9PiBkYXRhLmltZ19uYW1lID09IGRyb3ByZXRhZ2ltYWdlKVxyXG4gICAgICAgICAgaWYgKGZpbmRvbmUubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBkYXRhLmNvdW50ID0gZGF0YS5jb3VudCArIGZpbmRvbmVbMF0uY291bnRcclxuICAgICAgICAgICAgZGF0YS5tYXBwZWRpZCA9IFsuLi5kYXRhLm1hcHBlZGlkLCAuLi5maW5kb25lWzBdLm1hcHBlZGlkXVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKCdkdXBsaWNhdGUnIGluIHNlc3Npb25TdG9yYWdlKSB7XHJcbiAgICAgICAgICAgIGxldCBmaWxlZGF0YSA9IEpTT04ucGFyc2Uoc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgnZHVwbGljYXRlJykgfHwgJ3t9JylcclxuICAgICAgICAgICAgZmlsZWRhdGEgPSBbLi4uZmlsZWRhdGEsIC4uLmZpbmRvbmVdXHJcbiAgICAgICAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oJ2R1cGxpY2F0ZScsIEpTT04uc3RyaW5naWZ5KGZpbGVkYXRhKSlcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oJ2R1cGxpY2F0ZScsIEpTT04uc3RyaW5naWZ5KGZpbmRvbmUpKVxyXG4gICAgICAgICAgICBsZXQgZmlsZWRhdGEgPSBKU09OLnBhcnNlKHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ2R1cGxpY2F0ZScpIHx8ICd7fScpXHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwi8J+agCB+IFN0YXJ0QXVkaXRDb21wb25lbnQgfiBkcm9wSW1hZ2UgfiBmaWxlZGF0YTpcIiwgZmlsZWRhdGEpXHJcblxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5jYXRlZ29yeS5tYXAoKGRhdGE6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICB2YXIgY291bnQgPSBKU09OLnBhcnNlKHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oZGF0YS50eXBlKSB8fCAne30nKVxyXG4gICAgICAgICAgICBkYXRhLmNvdW50ID0gY291bnQ/Lmxlbmd0aFxyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgIGNvbnNvbGUubG9nKFwi8J+agCB+IEF1ZGl0UmV0YWdDb21wb25lbnQgfiBkcm9wcmV0YWcgfiB0aGlzLmNhdGVnb3J5OlwiLCB0aGlzLmNhdGVnb3J5KVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBkYXRhLmNvdW50ID0gZGF0YS5jb3VudCArIDEsXHJcbiAgICAgICAgICAgIGRhdGEubWFwcGVkaWQucHVzaChkcm9wcmV0YWdpbWFnZSlcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBzZWxlY3RyZXRhZ2ltYWdlKHJlczogYW55KSB7XHJcbiAgICB0aGlzLnJldGFnaW1hZ2UubWFwKChkYXRhOiBhbnkpID0+IHtcclxuICAgICAgaWYgKGRhdGEuaW1nX2lkID09IHJlcykge1xyXG4gICAgICAgIGlmIChkYXRhLm1hcHBlZGlkLmxlbmd0aCA9PSAxKSB7XHJcbiAgICAgICAgICBkYXRhLnNlbGVjdGVkID0gIWRhdGEuc2VsZWN0ZWRcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBzZWxlY3Rncm91cGltYWdlKHJlczogYW55KSB7XHJcbiAgICB0aGlzLmF1ZGl0bWFwcGluZ2RhdGEubWFwKChkYXRhOiBhbnkpID0+IHtcclxuICAgICAgaWYgKGRhdGEuaW1nX2lkID09IHJlcykge1xyXG4gICAgICAgIGlmIChkYXRhLm1hcHBlZGlkLmxlbmd0aCA9PSAxKSB7XHJcbiAgICAgICAgICBkYXRhLnNlbGVjdGVkID0gIWRhdGEuc2VsZWN0ZWRcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICByZW1vdmVhdWRpdChkYXRhOiBhbnkpIHtcclxuICAgIGNvbnN0IG1vZGFsUmVmID0gdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihSZW1vdmVBdWRpdENvbXBvbmVudCwge1xyXG4gICAgICBzaXplOiAnbGcnLFxyXG4gICAgICBjZW50ZXJlZDogdHJ1ZSxcclxuICAgICAgYmFja2Ryb3A6ICdzdGF0aWMnLFxyXG4gICAgICBrZXlib2FyZDogZmFsc2VcclxuICAgIH0pXHJcbiAgICBtb2RhbFJlZi5jb21wb25lbnRJbnN0YW5jZS5kYXRhID0gZGF0YTtcclxuICAgIG1vZGFsUmVmLmNsb3NlZC5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XHJcbiAgICAgIGlmIChyZXMgJiYgcmVzPy5yZWxvYWQpIHtcclxuICAgICAgICB0aGlzLmluaXRpYWxfZGF0YV9sb2FkaW5nKClcclxuICAgICAgfVxyXG4gICAgfSlcclxuXHJcbiAgfVxyXG4gIHN1Ym1pdGF1ZGl0KCkge1xyXG4gICAgY29uc3QgbW9kYWxSZWYgPSB0aGlzLm1vZGFsU2VydmljZS5vcGVuKEF1ZGl0UmVwb3J0UG9wdXBDb21wb25lbnQsIHtcclxuICAgICAgc2l6ZTogJ2xnJyxcclxuICAgICAgY2VudGVyZWQ6IHRydWUsXHJcbiAgICAgIGJhY2tkcm9wOiAnc3RhdGljJyxcclxuICAgICAga2V5Ym9hcmQ6IGZhbHNlXHJcbiAgICB9KVxyXG4gICAgbW9kYWxSZWYuY29tcG9uZW50SW5zdGFuY2Uuc2VsZWN0ZWRUeXBlID0gdGhpcy5zZWxlY3RlZFR5cGU7XHJcbiAgICBtb2RhbFJlZi5jbG9zZWQ7XHJcbiAgfVxyXG5cclxuXHJcbiAgdmlld2NhdGVnb3J5KGRhdGE6IGFueSkge1xyXG4gICAgY29uc3QgbW9kYWxSZWYgPSB0aGlzLm1vZGFsU2VydmljZS5vcGVuKFZpZXdjYXRlZ29yeUNvbXBvbmVudCwge1xyXG4gICAgICBzaXplOiAnbGcnLFxyXG4gICAgICBjZW50ZXJlZDogdHJ1ZSxcclxuICAgICAgYmFja2Ryb3A6ICdzdGF0aWMnLFxyXG4gICAgICBrZXlib2FyZDogZmFsc2VcclxuICAgIH0pXHJcbiAgICBtb2RhbFJlZi5jb21wb25lbnRJbnN0YW5jZS5kYXRhID0gZGF0YVxyXG4gICAgbW9kYWxSZWYuY29tcG9uZW50SW5zdGFuY2UuaW1hZ2VMaXN0ID0gZGF0YSxcclxuICAgICAgbW9kYWxSZWYuY2xvc2VkLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAocmVzICYmIHJlcz8ucmVsb2FkKSB7XHJcbiAgICAgICAgICB0aGlzLmluaXRpYWxfZGF0YV9sb2FkaW5nKClcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgfVxyXG5cclxuICBkcm9wSW1hZ2UoZXZlbnQ6IGFueSkge1xyXG4gICAgY29uc3QgaHRtbHRhZyA9IGV2ZW50LmRhdGFUcmFuc2Zlci5nZXREYXRhKCd0ZXh0L2h0bWwnKTtcclxuICAgIHZhciBOYW1lID0gZ2V0VGFnTmFtZUZyb21IVE1MKGh0bWx0YWcpO1xyXG4gICAgY29uc3QgZHJvcFpvbmUgPSBldmVudC50YXJnZXQ7XHJcbiAgICAvLyBjb25zb2xlLmxvZyhOYW1lKVxyXG4gICAgLy8gZGVidWdnZXJcclxuICAgIGlmIChOYW1lID09ICdjdXN0b21lcicgfHwgTmFtZSA9PSAncmV0YWcnKSB7XHJcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgIGNvbnN0IGRyYWdnZWRJbWFnZUlkID0gZXZlbnQuZGF0YVRyYW5zZmVyLmdldERhdGEoJ3RleHQvcGxhaW4nKTtcclxuICAgICAgY29uc3QgZHJhZ2dlZEltYWdlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZHJhZ2dlZEltYWdlSWQpO1xyXG4gICAgICBldmVudC50YXJnZXQuYXBwZW5kQ2hpbGQoZHJhZ2dlZEltYWdlKTtcclxuICAgICAgdGhpcy5hdWRpdG1hcHBpbmdkYXRhLm1hcCgoZGF0YTogYW55LCBpbmRleDogbnVtYmVyKSA9PiB7XHJcblxyXG4gICAgICAgIGlmIChkYXRhLmltZ19pZCA9PT0gZHJvcFpvbmUuaWQpIHtcclxuICAgICAgICAgIGxldCBmaW5kb25lID0gW107XHJcbiAgICAgICAgICBjb25zdCByZXRhZ2RhdGEgPSBKU09OLnBhcnNlKHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ3JldGFnJykgfHwgJ1tdJyk7XHJcbiAgICAgICAgICB0aGlzLnJldGFnaW1hZ2UgPSByZXRhZ2RhdGE7XHJcbiAgICAgICAgICBmaW5kb25lID0gdGhpcy5yZXRhZ2ltYWdlLmZpbHRlcigoaW1nRGF0YTogYW55KSA9PiBpbWdEYXRhLmltZ19pZCA9PT0gZHJhZ2dlZEltYWdlSWQpO1xyXG4gICAgICAgICAgaWYgKGZpbmRvbmUubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgIGZpbmRvbmUgPSB0aGlzLmF1ZGl0bWFwcGluZ2RhdGEuZmlsdGVyKChpbWdEYXRhOiBhbnkpID0+IGltZ0RhdGEuaW1nX2lkID09PSBkcmFnZ2VkSW1hZ2VJZCk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgdGhpcy5yZXRhZ2ltYWdlID0gdGhpcy5yZXRhZ2ltYWdlLmZpbHRlcigoaW1nRGF0YTogYW55KSA9PiBpbWdEYXRhLmltZ19pZCAhPT0gZHJhZ2dlZEltYWdlSWQpO1xyXG4gICAgICAgICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSgncmV0YWcnLCBKU09OLnN0cmluZ2lmeSh0aGlzLnJldGFnaW1hZ2UpKTtcclxuXHJcbiAgICAgICAgICBjb25zb2xlLmxvZyhcIvCfmoAgfiBBdWRpdFJldGFnQ29tcG9uZW50IH4gZHJvcEltYWdlIH4gZmluZG9uZTpcIiwgZmluZG9uZSlcclxuICAgICAgICAgIGlmIChmaW5kb25lLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgZGF0YS5jb3VudCArPSBmaW5kb25lWzBdLmNvdW50O1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgZGF0YS5tYXBwZWRpZCA9IFsuLi5kYXRhLm1hcHBlZGlkLCAuLi5maW5kb25lWzBdXTtcclxuICAgICAgICAgICAgaWYgKCdkdXBsaWNhdGUnIGluIHNlc3Npb25TdG9yYWdlKSB7XHJcbiAgICAgICAgICAgICAgbGV0IGZpbGVkYXRhID0gSlNPTi5wYXJzZShzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCdkdXBsaWNhdGUnKSB8fCAne30nKVxyXG4gICAgICAgICAgICAgIGZpbGVkYXRhID0gWy4uLmZpbGVkYXRhLCAuLi5maW5kb25lXVxyXG4gICAgICAgICAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oJ2R1cGxpY2F0ZScsIEpTT04uc3RyaW5naWZ5KGZpbGVkYXRhKSlcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKCdkdXBsaWNhdGUnLCBKU09OLnN0cmluZ2lmeShmaW5kb25lKSlcclxuICAgICAgICAgICAgICBsZXQgZmlsZWRhdGEgPSBKU09OLnBhcnNlKHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ2R1cGxpY2F0ZScpIHx8ICd7fScpXHJcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coXCLwn5qAIH4gU3RhcnRBdWRpdENvbXBvbmVudCB+IGRyb3BJbWFnZSB+IGZpbGVkYXRhOlwiLCBmaWxlZGF0YSlcclxuXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGRhdGEuY291bnQgKz0gMTtcclxuICAgICAgICAgICAgZGF0YS5tYXBwZWRpZC5wdXNoKGRyYWdnZWRJbWFnZUlkKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICAgIGlmIChOYW1lID09ICdjdXN0b21lcicpIHtcclxuICAgICAgICB0aGlzLmF1ZGl0bWFwcGluZ2RhdGEuc3BsaWNlKHRoaXMuYXVkaXRtYXBwaW5nZGF0YS5maW5kSW5kZXgoKHsgaW1nX2lkIH06IHsgaW1nX2lkOiBzdHJpbmcgfSkgPT4gaW1nX2lkID09IGRyYWdnZWRJbWFnZUlkKSwgMSk7XHJcbiAgICAgICAgdGhpcy5hdWRpdG1hcHBpbmdkYXRhLm1hcCgoZGF0YTogYW55KSA9PiBkYXRhLnNlbGVjdGVkID0gZmFsc2UpXHJcbiAgICAgIH1cclxuXHJcblxyXG4gICAgICB0aGlzLmN1c3RvbWVyY291bnQgPSB0aGlzLmF1ZGl0bWFwcGluZ2RhdGE/Lmxlbmd0aDtcclxuICAgICAgY29uc3QganNvblN0cmluZyA9IEpTT04uc3RyaW5naWZ5KHRoaXMuYXVkaXRtYXBwaW5nZGF0YSk7XHJcbiAgICAgIGNvbnN0IGNvbXByZXNzZWREYXRhID0gTFpTdHJpbmcuY29tcHJlc3MoanNvblN0cmluZyk7XHJcbiAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oJ2F1ZGl0JywgY29tcHJlc3NlZERhdGEpXHJcbiAgICAgIHZhciByZXRhZ2RhdGEgPSBKU09OLnBhcnNlKHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ3JldGFnJykgfHwgJ3t9JylcclxuICAgICAgdGhpcy5yZXRhZ2ltYWdlID0gcmV0YWdkYXRhO1xyXG4gICAgICBpZiAodGhpcy5yZXRhZ2ltYWdlLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgICAgdGhpcy5zdWJtaXR2YWx1ZSA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuY2F0ZWdvcnkubWFwKChkYXRhOiBhbnkpID0+IHtcclxuICAgICAgICB2YXIgY291bnQgPSBKU09OLnBhcnNlKHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oZGF0YS50eXBlKSB8fCAne30nKVxyXG4gICAgICAgIGRhdGEuY291bnQgPSBjb3VudD8ubGVuZ3RoXHJcbiAgICAgIH0pXHJcbiAgICB9XHJcblxyXG5cclxuXHJcbiAgICBmdW5jdGlvbiBnZXRUYWdOYW1lRnJvbUhUTUwoaHRtbDogYW55KSB7XHJcbiAgICAgIHZhciB0ZW1wRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xyXG4gICAgICB0ZW1wRWxlbWVudC5pbm5lckhUTUwgPSBodG1sO1xyXG4gICAgICB2YXIgZmlyc3RDaGlsZDogYW55ID0gdGVtcEVsZW1lbnQuZmlyc3RDaGlsZDtcclxuICAgICAgaWYgKGZpcnN0Q2hpbGQuaGFzQXR0cmlidXRlKCduYW1lJykpIHtcclxuICAgICAgICB2YXIgbmFtZVByb3BlcnR5VmFsdWUgPSBmaXJzdENoaWxkLmdldEF0dHJpYnV0ZSgnbmFtZScpO1xyXG4gICAgICAgIHJldHVybiBuYW1lUHJvcGVydHlWYWx1ZTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJjYXJkXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXJcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC10aXRsZVwiPlxyXG4gICAgICAgICAgICA8aDMgY2xhc3M9XCJmbGV4LWNvbHVtblwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtbGFiZWxcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3Bhbj57e2ZpbGVkZXRhaWxzPy5zdG9yZUlkfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJteC0zIGFycm93LWNvZGVcIj4gLSA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3tmaWxlZGV0YWlscz8uRGF0ZX19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvaDM+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3VuZGVkLTMgbXMtMyBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGJnLXRpbWVyXCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1lLTMgdGV4dC10aW1lciBmdy1zZW1pYm9sZFwiPnt7IGZvcm1hdHRlZFRpbWUgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8c3Bhbj48c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNOS4xNjY2NyAyLjg3MDcxQzkuMTY2NjcgMi42MjAyMyA5LjI2NjE3IDIuMzgwMDEgOS40NDMyOSAyLjIwMjg5QzkuNjIwNDEgMi4wMjU3NyA5Ljg2MDYzIDEuOTI2MjcgMTAuMTExMSAxLjkyNjI3SDEzLjg4ODlDMTQuMTM5NCAxLjkyNjI3IDE0LjM3OTYgMi4wMjU3NyAxNC41NTY3IDIuMjAyODlDMTQuNzMzOCAyLjM4MDAxIDE0LjgzMzMgMi42MjAyMyAxNC44MzMzIDIuODcwNzFDMTQuODMzMyAzLjEyMTIgMTQuNzMzOCAzLjM2MTQyIDE0LjU1NjcgMy41Mzg1NEMxNC4zNzk2IDMuNzE1NjUgMTQuMTM5NCAzLjgxNTE2IDEzLjg4ODkgMy44MTUxNkgxMi45NDQ0VjUuMDc0NDJMMTIuOTQzMiA1LjEyNjA1QzE0LjUzOTYgNS4zMDA5NyAxNi4wNTI4IDUuOTI3ODcgMTcuMzA1MyA2LjkzMzA4TDE3LjMxNDEgNi45MjU1M0wxOC4yNTg1IDUuOTgxMDhDMTguMzc0IDUuODU2NzYgMTguNTIwOCA1Ljc2NTg4IDE4LjY4MzUgNS43MTgwMUMxOC44NDYzIDUuNjcwMTQgMTkuMDE5IDUuNjY3MDYgMTkuMTgzMyA1LjcwOTA4QzE5LjM0NzcgNS43NTExMSAxOS40OTc3IDUuODM2NjkgMTkuNjE3NSA1Ljk1NjhDMTkuNzM3MyA2LjA3NjkyIDE5LjgyMjUgNi4yMjcxMyAxOS44NjQxIDYuMzkxNkMxOS45MDYgNi41NTU3OCAxOS45MDMgNi43MjgyMyAxOS44NTU0IDYuODkwODVDMTkuODA3NyA3LjA1MzQ4IDE5LjcxNzIgNy4yMDAyOSAxOS41OTMzIDcuMzE1OUwxOC42NDg5IDguMjYwMzRMMTguNjQxMyA4LjI2OTE1QzE5LjY0MDMgOS41MTk3NCAyMC4yNjU4IDExLjAyNyAyMC40NDYgMTIuNjE3NEMyMC42MjYxIDE0LjIwNzggMjAuMzUzNiAxNS44MTY3IDE5LjY1OTcgMTcuMjU5MUMxOC45NjU4IDE4LjcwMTQgMTcuODc4OCAxOS45MTg1IDE2LjUyMzcgMjAuNzcwNEMxNS4xNjg2IDIxLjYyMjIgMTMuNjAwNiAyMi4wNzQxIDEyIDIyLjA3NDFDMTAuMzk5NCAyMi4wNzQxIDguODMxMzcgMjEuNjIyMiA3LjQ3NjI5IDIwLjc3MDRDNi4xMjEyMiAxOS45MTg1IDUuMDM0MTkgMTguNzAxNCA0LjM0MDMgMTcuMjU5MUMzLjY0NjQxIDE1LjgxNjcgMy4zNzM4NiAxNC4yMDc4IDMuNTU0MDIgMTIuNjE3NEMzLjczNDE4IDExLjAyNyA0LjM1OTczIDkuNTE5NzQgNS4zNTg2NyA4LjI2OTE1TDUuMzUxMTEgOC4yNjAzNEw0LjQwNjY3IDcuMzE1OUM0LjIzOTY0IDcuMTM2OSA0LjE0ODY1IDYuOTAwMDMgNC4xNTI4NyA2LjY1NTI0QzQuMTU3MSA2LjQxMDQ1IDQuMjU2MjIgNi4xNzY4NyA0LjQyOTM0IDYuMDAzNzVDNC42MDI0NiA1LjgzMDYzIDQuODM2MDQgNS43MzE1MSA1LjA4MDgzIDUuNzI3MjhDNS4zMjU2MiA1LjcyMzA2IDUuNTYyNDkgNS44MTQwNSA1Ljc0MTQ5IDUuOTgxMDhMNi42ODU5MyA2LjkyNTUzTDYuNjk0NzQgNi45MzMwOEM3Ljk0NjgxIDUuOTI4MDkgOS40NTk2MyA1LjMwMTIgMTEuMDU1NiA1LjEyNjA1VjMuODE1MTZIMTAuMTExMUM5Ljg2MDYzIDMuODE1MTYgOS42MjA0MSAzLjcxNTY1IDkuNDQzMjkgMy41Mzg1NEM5LjI2NjE3IDMuMzYxNDIgOS4xNjY2NyAzLjEyMTIgOS4xNjY2NyAyLjg3MDcxWk0xMiAyMC4xODU1QzEzLjc1MzUgMjAuMTg1NCAxNS40MzUyIDE5LjQ4ODYgMTYuNjc1IDE4LjI0ODVDMTcuOTE0OCAxNy4wMDg1IDE4LjYxMTMgMTUuMzI2NyAxOC42MTExIDEzLjU3MzJDMTguNjEwOSAxMS44MTk2IDE3LjkxNDIgMTAuMTM4IDE2LjY3NDEgOC44OTgxM0MxNS40MzQxIDcuNjU4MzEgMTMuNzUyMyA2Ljk2MTg4IDExLjk5ODcgNi45NjIwNEMxMC4yNDUyIDYuOTYyMjEgOC41NjM1NCA3LjY1ODk2IDcuMzIzNzIgOC44OTkwMkM2LjA4MzkgMTAuMTM5MSA1LjM4NzQ3IDExLjgyMDkgNS4zODc2MyAxMy41NzQ0QzUuMzg3OCAxNS4zMjggNi4wODQ1NSAxNy4wMDk2IDcuMzI0NjEgMTguMjQ5NEM4LjU2NDY3IDE5LjQ4OTMgMTAuMjQ2NSAyMC4xODU3IDEyIDIwLjE4NTVaTTEyLjQ4OTkgMTEuNzQ4NUwxNC4xNjQ3IDEwLjA3MzdDMTQuMjUxNyA5Ljk4MzQzIDE0LjM1NTkgOS45MTE0MyAxNC40NzExIDkuODYxODhDMTQuNTg2MyA5LjgxMjMzIDE0LjcxMDIgOS43ODYyMiAxNC44MzU2IDkuNzg1MDdDMTQuOTYxMSA5Ljc4MzkyIDE1LjA4NTQgOS44MDc3NiAxNS4yMDE1IDkuODU1MTlDMTUuMzE3NiA5LjkwMjYyIDE1LjQyMzEgOS45NzI3IDE1LjUxMTggMTAuMDYxM0MxNS42MDA1IDEwLjE1IDE1LjY3MDcgMTAuMjU1NCAxNS43MTgyIDEwLjM3MTRDMTUuNzY1OCAxMC40ODc1IDE1Ljc4OTcgMTAuNjExOCAxNS43ODg3IDEwLjczNzJDMTUuNzg3NyAxMC44NjI2IDE1Ljc2MTcgMTAuOTg2NiAxNS43MTIyIDExLjEwMThDMTUuNjYyOCAxMS4yMTcxIDE1LjU5MDkgMTEuMzIxMyAxNS41MDA3IDExLjQwODVMMTMuODI1OSAxMy4wODQ2QzEzLjkwMDMgMTMuMzY0NSAxMy45MDk1IDEzLjY1NzkgMTMuODUyNiAxMy45NDJDMTMuNzk1OCAxNC4yMjYgMTMuNjc0NSAxNC40OTMzIDEzLjQ5ODEgMTQuNzIzMUMxMy4zMjE3IDE0Ljk1MjkgMTMuMDk0OSAxNS4xMzkxIDEyLjgzNTIgMTUuMjY3NUMxMi41NzU0IDE1LjM5NTggMTIuMjg5NyAxNS40NjI4IDEyIDE1LjQ2MzNDMTEuNzMyNyAxNS40NjEgMTEuNDY4OCAxNS40MDE5IDExLjIyNiAxNS4yOUMxMC45ODMyIDE1LjE3ODEgMTAuNzY3IDE1LjAxNTkgMTAuNTkxNiAxNC44MTQxQzEwLjQxNjIgMTQuNjEyMyAxMC4yODU3IDE0LjM3NTUgMTAuMjA4NyAxNC4xMTk1QzEwLjEzMTYgMTMuODYzNSAxMC4xMDk5IDEzLjU5NCAxMC4xNDQ4IDEzLjMyOUMxMC4xNzk4IDEzLjA2MzkgMTAuMjcwNiAxMi44MDkzIDEwLjQxMTQgMTIuNTgyQzEwLjU1MjIgMTIuMzU0NyAxMC43Mzk2IDEyLjE1OTkgMTAuOTYxMyAxMi4wMTA0QzExLjE4MyAxMS44NjEgMTEuNDMzOSAxMS43NjA0IDExLjY5NzQgMTEuNzE1MkMxMS45NjA5IDExLjY3MDEgMTIuMjMxIDExLjY4MTQgMTIuNDg5OSAxMS43NDg1WlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwiYmxhY2tcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3ZnPjwvc3Bhbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtdG9vbGJhclwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBwb3NpdGlvbi1yZWxhdGl2ZSBteS0xXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1kZWZhdWx0IGJ0bi1vdXRsaW5lIHB5LTIgbXgtMlwiIChjbGljayk9XCJyZXZpZXdkYXRhKClcIj48c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzdmctaWNvbiBzdmctaWNvbi1wcmltYXJ5IHN2Zy1pY29uLTJ4XCI+PHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTE1LjgzMzcgMTAuMDAwMUg0LjE2Njk5TTQuMTY2OTkgMTAuMDAwMUwxMC4wMDAzIDE1LjgzMzRNNC4xNjY5OSAxMC4wMDAxTDEwLjAwMDMgNC4xNjY3NVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiMzNDQwNTRcIiBzdHJva2Utd2lkdGg9XCIxLjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPjwvc3Bhbj48c3BhbiBjbGFzcz1cIm1zLTNcIj5CYWNrIHRvIFJldmlldzwvc3Bhbj48L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tc20gYnRuLXByaW1hcnkgcHktMiBteC0yXCIgW2Rpc2FibGVkXT1cInN1Ym1pdHZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInN1Ym1pdGF1ZGl0KClcIj5TdWJtaXRcclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzdmctaWNvbiBzdmctaWNvbi1wcmltYXJ5IHN2Zy1pY29uLTJ4XCI+PHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTQuMTY2OTkgMTAuMDAwMUgxNS44MzM3TTE1LjgzMzcgMTAuMDAwMUwxMC4wMDAzIDQuMTY2NzVNMTUuODMzNyAxMC4wMDAxTDEwLjAwMDMgMTUuODMzNFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIndoaXRlXCIgc3Ryb2tlLXdpZHRoPVwiMS42N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXJcIj5cclxuICAgICAgICA8aDMgY2xhc3M9XCJjYXJkLXRpdGxlIGFsaWduLWl0ZW1zLWNlbnRlciBmbGV4LXJvd1wiPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNhcmQtbGFiZWwgdGV4dC1kYXJrXCI+VG90YWwgRmlsZXMgLSA8c3Bhbj57e3RvdGFsZmlsZX19PC9zcGFuPjwvc3Bhbj5cclxuICAgICAgICAgXHJcbiAgICAgICAgPC9oMz5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC10b29sYmFyIFwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBwb3NpdGlvbi1yZWxhdGl2ZSBteS0xXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtZS0zIHRleHQgZnctc2VtaWJvbGRcIj5VbmlxdWUgQ3VzdG9tZXJzIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIiBiYWRnZSBiYWRnZS1saWdodC1wcmltYXJ5XCI+e3thdWRpdG1hcHBpbmdkYXRhPy5sZW5ndGggPyBhdWRpdG1hcHBpbmdkYXRhPy5sZW5ndGggOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgMH19PC9zcGFuPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgICAqbmdGb3I9XCJsZXQgaXRlbSBvZiBjYXRlZ29yeVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLW91dGxpbmUgdGV4dCB3LXNlbWlib2xkIGJ0bi1zbSBweS0yIGJ1dG4tZmxhZyBteC0yXCIgKGNsaWNrKT1cInZpZXdjYXRlZ29yeShpdGVtKVwiIFtkaXNhYmxlZF09XCIhaXRlbT8uY291bnRcIj5WaWV3XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7aXRlbT8ubmFtZX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiIGJhZGdlIGJhZGdlLWxpZ2h0LXByaW1hcnlcIj57e2l0ZW0/LmNvdW50fX08L3NwYW4+IDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuPC9kaXY+XHJcblxyXG48ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICA8ZGl2ICpuZ0lmPVwiYXVkaXRMb2FkaW5nXCIgY2xhc3M9XCJjYXJkIG10LTVcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5IGgtNTAwcHhcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBsb2FkZXIgZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2hpbW1lclwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3cmFwcGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSB0aXRsZVwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgbGlua1wiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgZGVzY3JpcHRpb25cIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNoaW1tZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwid3JhcHBlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgdGl0bGVcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGxpbmtcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGRlc2NyaXB0aW9uXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwhLS0gPGg1IGNsYXNzPVwidGV4dC1kYXJrLTYwMCBmdy1ib2xkIHRleHQtY2VudGVyIG10LTVcIj5Mb2FkaW5nIEF1ZGl0IGZpbGUuLi4uLi48L2g1PiAtLT5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiAqbmdJZj1cIiFhdWRpdExvYWRpbmdcIiBjbGFzcz1cImNvbC1tZC01XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQgbXQtNVwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5IGgtMTAwMHB4XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1sYWJlbCBmdy1ib2xkXCI+SW1hZ2VzIGZvciBSZXRhZ2dpbmc8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LXN1YiBtdC0yIGZ3LXNlbWlib2xkXCI+RHJhZyBhbmQgRHJvcCBvbiBjb3JyZWN0IGN1c3RvbWVyczwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIml0ZW1cIiAqbmdGb3I9XCJsZXQgb2JqMSBvZiByZXRhZ2ltYWdlXCIgKGRyYWdvdmVyKT1cInJldGFnYWxsb3dEcm9wKCRldmVudClcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aW1nIGRyYWdnYWJsZT1cInRydWVcIiAoZHJhZ3N0YXJ0KT1cImRyYWdTdGFydCgkZXZlbnQpXCIgaWQ9XCJ7e29iajEuaW1nX2lkfX1cIiBbc3JjXT1cIm9iajEuaW1nX3BhdGhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm15LTMgbXgtNCBpbWctcmV0XCIgKGNsaWNrKT1cInNlbGVjdHJldGFnaW1hZ2Uob2JqMS5pbWdfaWQpXCIgbmFtZT1cInJldGFnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtY2VudGVyIG0tMCBmcy03IGZ3LWJvbGRcIj57e29iajEuaW1nX25hbWV9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwib2JqMS5zZWxlY3RlZFwiIGNsYXNzPVwibm90aWZ5LWJhZGdlMSBud2JnXCI+PGkgY2xhc3M9XCJmYSBmYS1jaGVjayBjb2xvcnZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIHN0eWxlPVwiZm9udC1zaXplOjE1cHg7Y29sb3I6IzAwQTNGRlwiPjwvaT48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJub3RpZnktYmFkZ2UgY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwicmVtb3ZlYXVkaXQob2JqMSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIm9iajEuY291bnQ+MVwiPnt7b2JqMS5jb3VudH19PC9zcGFuPlxyXG5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiAqbmdJZj1cIiFhdWRpdExvYWRpbmdcIiBjbGFzcz1cImNvbC1tZC03XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQgbXQtNVwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5IGgtMTAwMHB4XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1sYWJlbCBmdy1ib2xkXCI+VW5pcXVlIEN1c3RvbWVycyA8c3BhbiBjbGFzcz1cImNhcmQtbGFiZWxcIj57e2F1ZGl0bWFwcGluZ2RhdGE/Lmxlbmd0aCA/XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF1ZGl0bWFwcGluZ2RhdGE/Lmxlbmd0aCA6IDB9fTwvc3Bhbj48L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpdGVtXCIgKm5nRm9yPVwibGV0IG9iaiBvZiBhdWRpdG1hcHBpbmdkYXRhO2xldCBpPWluZGV4XCIgc3R5bGU9XCJwYWRkaW5nOiAxMHB4O1wiPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwibXgtMyBtYi01IGltZ1wiIFtzcmNdPVwib2JqLmltZ19wYXRoXCIgaWQ9XCJ7e29iai5pbWdfaWR9fVwiIGFsdD1cIkltYWdlXCIgbmFtZT1cImN1c3RvbWVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGRyYWdvdmVyKT1cInJldGFnYWxsb3dEcm9wKCRldmVudClcIiAoZHJvcCk9XCJkcm9wSW1hZ2UoJGV2ZW50KVwiIGRyYWdnYWJsZT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoZHJhZ3N0YXJ0KT1cImRyYWdTdGFydCgkZXZlbnQpXCIgKGNsaWNrKT1cInNlbGVjdGdyb3VwaW1hZ2Uob2JqLmltZ19pZCApXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtY2VudGVyIG0tMCBmcy03IGZ3LWJvbGRcIj57e29iai5pbWdfbmFtZX19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJvYmouc2VsZWN0ZWRcIiBjbGFzcz1cIm5vdGlmeS1iYWRnZTFcIj48aSBjbGFzcz1cImZhIGZhLWNoZWNrXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiZm9udC1zaXplOjE1cHg7Y29sb3I6IzAwQTNGRlwiPjwvaT48L3NwYW4+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibm90aWZ5LWJhZGdlIGN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cInJlbW92ZWF1ZGl0KG9iailcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIm9iai5jb3VudD4xXCI+e3tvYmouY291bnR9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICA8L2Rpdj5cclxuXHJcbjwvZGl2PiJdfQ==