ezlibrary_v2 0.0.1

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 (113) hide show
  1. package/esm2020/ezlibrary_v2.mjs +5 -0
  2. package/esm2020/lib/admin-service/admin-service.service.mjs +36 -0
  3. package/esm2020/lib/analysis-search/analysis-search.component.mjs +1083 -0
  4. package/esm2020/lib/assort-service/assort-service.service.mjs +31 -0
  5. package/esm2020/lib/attribute-definition/attribute-definition.component.mjs +231 -0
  6. package/esm2020/lib/auth/auth.guard.mjs +40 -0
  7. package/esm2020/lib/bi-service/bi.service.mjs +58 -0
  8. package/esm2020/lib/call-info/callinfo.component.mjs +126 -0
  9. package/esm2020/lib/comman-service/comman-service.service.mjs +679 -0
  10. package/esm2020/lib/comman-service/share-data-service.service.mjs +23 -0
  11. package/esm2020/lib/contact-search/contact-search.component.mjs +679 -0
  12. package/esm2020/lib/contact-service/contact-service.service.mjs +47 -0
  13. package/esm2020/lib/ezheader/header.component.mjs +383 -0
  14. package/esm2020/lib/ezlib.module.mjs +220 -0
  15. package/esm2020/lib/file-upload/fileupload.component.mjs +920 -0
  16. package/esm2020/lib/file-upload-log/file-upload-log.component.mjs +175 -0
  17. package/esm2020/lib/fileupload-module/fileupload-dashboard/fileupload-dashboard.component.mjs +14 -0
  18. package/esm2020/lib/fileupload-module/fileupload-routing.module.mjs +28 -0
  19. package/esm2020/lib/footer/footer.component.mjs +18 -0
  20. package/esm2020/lib/globle/common-pdf.service.mjs +28 -0
  21. package/esm2020/lib/globle/globle-env.service.mjs +45 -0
  22. package/esm2020/lib/globle/memo-report.service.mjs +2800 -0
  23. package/esm2020/lib/globle/pdf-service.service.mjs +18848 -0
  24. package/esm2020/lib/globle/shared-services.service.mjs +27 -0
  25. package/esm2020/lib/globle/upload-service.service.mjs +69 -0
  26. package/esm2020/lib/header/header.component.mjs +179 -0
  27. package/esm2020/lib/invalid/invalid.component.mjs +71 -0
  28. package/esm2020/lib/logout/logout.component.mjs +107 -0
  29. package/esm2020/lib/menu-right/menu-right.component.mjs +252 -0
  30. package/esm2020/lib/pipes/number-with-commas.pipe.mjs +24 -0
  31. package/esm2020/lib/pipes/order-by-pipe.pipe.mjs +17 -0
  32. package/esm2020/lib/pipes/selectedCount.mjs +19 -0
  33. package/esm2020/lib/pipes/sum.pipe.mjs +16 -0
  34. package/esm2020/lib/pkt-data/pkt-data.component.mjs +1107 -0
  35. package/esm2020/lib/pricing-service/pricing.service.mjs +58 -0
  36. package/esm2020/lib/qa-analysis/qa-analysis.component.mjs +1035 -0
  37. package/esm2020/lib/report-format/report-format.component.mjs +400 -0
  38. package/esm2020/lib/sessionend/session-end.guard.mjs +28 -0
  39. package/esm2020/lib/stock-service/lazyload.service.mjs +21 -0
  40. package/esm2020/lib/stock-service/stock-service.service.mjs +62 -0
  41. package/esm2020/lib/system-module/subform/subform.component.mjs +2481 -0
  42. package/esm2020/lib/system-module/system/system.component.mjs +959 -0
  43. package/esm2020/lib/system-module/system-service/system-service.service.mjs +85 -0
  44. package/esm2020/lib/system-module/system-service/upload-file.service.mjs +86 -0
  45. package/esm2020/lib/utility/app-no-dbl-click.directive.mjs +23 -0
  46. package/esm2020/lib/utility/constants.mjs +5 -0
  47. package/esm2020/lib/utility/contact-table-search.pipe.mjs +25 -0
  48. package/esm2020/lib/utility/formate-num-field.pipe.mjs +19 -0
  49. package/esm2020/lib/utility/search-pipe.pipe.mjs +26 -0
  50. package/esm2020/lib/utility/selective-preloading-strategy.mjs +23 -0
  51. package/esm2020/lib/utility/table-search.pipe.mjs +25 -0
  52. package/esm2020/lib/utility/tranform.directive.mjs +27 -0
  53. package/esm2020/lib/websearch-history/websearch-history.component.mjs +273 -0
  54. package/esm2020/public_api.mjs +57 -0
  55. package/ezlibrary_v2.d.ts +5 -0
  56. package/fesm2015/ezlibrary_v2.mjs +33543 -0
  57. package/fesm2015/ezlibrary_v2.mjs.map +1 -0
  58. package/fesm2020/ezlibrary_v2.mjs +33533 -0
  59. package/fesm2020/ezlibrary_v2.mjs.map +1 -0
  60. package/lib/admin-service/admin-service.service.d.ts +13 -0
  61. package/lib/analysis-search/analysis-search.component.d.ts +122 -0
  62. package/lib/assort-service/assort-service.service.d.ts +12 -0
  63. package/lib/attribute-definition/attribute-definition.component.d.ts +47 -0
  64. package/lib/auth/auth.guard.d.ts +16 -0
  65. package/lib/bi-service/bi.service.d.ts +20 -0
  66. package/lib/call-info/callinfo.component.d.ts +30 -0
  67. package/lib/comman-service/comman-service.service.d.ts +111 -0
  68. package/lib/comman-service/share-data-service.service.d.ts +10 -0
  69. package/lib/contact-search/contact-search.component.d.ts +115 -0
  70. package/lib/contact-service/contact-service.service.d.ts +15 -0
  71. package/lib/ezheader/header.component.d.ts +61 -0
  72. package/lib/ezlib.module.d.ts +47 -0
  73. package/lib/file-upload/fileupload.component.d.ts +131 -0
  74. package/lib/file-upload-log/file-upload-log.component.d.ts +53 -0
  75. package/lib/fileupload-module/fileupload-dashboard/fileupload-dashboard.component.d.ts +8 -0
  76. package/lib/fileupload-module/fileupload-routing.module.d.ts +7 -0
  77. package/lib/footer/footer.component.d.ts +9 -0
  78. package/lib/globle/common-pdf.service.d.ts +9 -0
  79. package/lib/globle/globle-env.service.d.ts +16 -0
  80. package/lib/globle/memo-report.service.d.ts +107 -0
  81. package/lib/globle/pdf-service.service.d.ts +459 -0
  82. package/lib/globle/shared-services.service.d.ts +12 -0
  83. package/lib/globle/upload-service.service.d.ts +20 -0
  84. package/lib/header/header.component.d.ts +45 -0
  85. package/lib/invalid/invalid.component.d.ts +12 -0
  86. package/lib/logout/logout.component.d.ts +21 -0
  87. package/lib/menu-right/menu-right.component.d.ts +47 -0
  88. package/lib/pipes/number-with-commas.pipe.d.ts +7 -0
  89. package/lib/pipes/order-by-pipe.pipe.d.ts +7 -0
  90. package/lib/pipes/selectedCount.d.ts +7 -0
  91. package/lib/pipes/sum.pipe.d.ts +7 -0
  92. package/lib/pkt-data/pkt-data.component.d.ts +189 -0
  93. package/lib/pricing-service/pricing.service.d.ts +20 -0
  94. package/lib/qa-analysis/qa-analysis.component.d.ts +99 -0
  95. package/lib/report-format/report-format.component.d.ts +74 -0
  96. package/lib/sessionend/session-end.guard.d.ts +10 -0
  97. package/lib/stock-service/lazyload.service.d.ts +7 -0
  98. package/lib/stock-service/stock-service.service.d.ts +19 -0
  99. package/lib/system-module/subform/subform.component.d.ts +227 -0
  100. package/lib/system-module/system/system.component.d.ts +113 -0
  101. package/lib/system-module/system-service/system-service.service.d.ts +23 -0
  102. package/lib/system-module/system-service/upload-file.service.d.ts +12 -0
  103. package/lib/utility/app-no-dbl-click.directive.d.ts +7 -0
  104. package/lib/utility/constants.d.ts +4 -0
  105. package/lib/utility/contact-table-search.pipe.d.ts +7 -0
  106. package/lib/utility/formate-num-field.pipe.d.ts +7 -0
  107. package/lib/utility/search-pipe.pipe.d.ts +7 -0
  108. package/lib/utility/selective-preloading-strategy.d.ts +9 -0
  109. package/lib/utility/table-search.pipe.d.ts +7 -0
  110. package/lib/utility/tranform.directive.d.ts +10 -0
  111. package/lib/websearch-history/websearch-history.component.d.ts +62 -0
  112. package/package.json +48 -0
  113. package/public_api.d.ts +52 -0
@@ -0,0 +1,1083 @@
1
+ import { ToastrService } from 'ngx-toastr';
2
+ import { NgxSpinnerService } from "ngx-spinner";
3
+ import { BiService } from './../bi-service/bi.service';
4
+ import { CommanServiceService } from '../comman-service/comman-service.service';
5
+ import { Component } from '@angular/core';
6
+ import { Router, ActivatedRoute } from '@angular/router';
7
+ import * as i0 from "@angular/core";
8
+ import * as i1 from "../comman-service/comman-service.service";
9
+ import * as i2 from "./../bi-service/bi.service";
10
+ import * as i3 from "ngx-spinner";
11
+ import * as i4 from "ngx-toastr";
12
+ import * as i5 from "@angular/router";
13
+ import * as i6 from "ng-select";
14
+ import * as i7 from "angular2-multiselect-dropdown";
15
+ import * as i8 from "@angular/forms";
16
+ import * as i9 from "@angular/common";
17
+ export class AnalysisSearchComponent {
18
+ constructor(cs, bis, _spinnerService, toastr, router, route) {
19
+ this.cs = cs;
20
+ this.bis = bis;
21
+ this._spinnerService = _spinnerService;
22
+ this.toastr = toastr;
23
+ this.router = router;
24
+ this.route = route;
25
+ this.bi_sale_dys = [];
26
+ this.statusList = [];
27
+ this.sizePrp = [];
28
+ this.biPeriodList = [];
29
+ this.selectedStatus = [];
30
+ // anaAllGrpStt = ['Marketing', 'Sold'];
31
+ this.anaAllGrpStt = [];
32
+ this.callFrom = '';
33
+ this.trm = "";
34
+ this.selectedCriteria = [];
35
+ this.searchId = [];
36
+ this.period = 1;
37
+ this.p1 = new Array(2);
38
+ this.p2 = new Array(2);
39
+ this.p3 = new Array(2);
40
+ this.p4 = new Array(2);
41
+ this.viewFormate = 'grid';
42
+ this.groups = [];
43
+ // p1date = new Date().toISOString().substr(0, 10);
44
+ // p2date = new Date().toISOString().substr(0, 10);
45
+ this.cnt = 1;
46
+ this.modifySch = [];
47
+ this.terms = [];
48
+ this.dropdownList = [];
49
+ this.selectedItems = [];
50
+ this.dropdownSettings = {};
51
+ this.venderList = [];
52
+ this.showvender = false;
53
+ this.anaAllGrpSttLBL = [];
54
+ this.soldStatus = [];
55
+ this.otherStatus = [];
56
+ this.pattr = '';
57
+ this.pattrType = '';
58
+ this.pattrVal = '';
59
+ this.oac = {};
60
+ this.arrayConversion = value => value.split();
61
+ }
62
+ ;
63
+ onItemSelect(item) {
64
+ console.log(item);
65
+ console.log(this.selectedItems);
66
+ }
67
+ OnItemDeSelect(item) {
68
+ console.log(item);
69
+ console.log(this.selectedItems);
70
+ }
71
+ onSelectAll(items) {
72
+ console.log(items);
73
+ }
74
+ onDeSelectAll(items) {
75
+ console.log(items);
76
+ }
77
+ loadAnalysisSearchPage() {
78
+ this.formname = this.route.snapshot.params['frmnme'];
79
+ this.showvender = false;
80
+ this.searchId = [];
81
+ let reqObj = {};
82
+ reqObj['formNme'] = this.route.snapshot.params['frmnme'];
83
+ console.log(JSON.stringify(reqObj));
84
+ this.bis.data(reqObj, 'load', 'marketing/search')
85
+ .subscribe(data => {
86
+ this._spinnerService.hide();
87
+ if (data.status == 'SUCCESS') {
88
+ let res = data.result;
89
+ debugger;
90
+ console.log(res);
91
+ this.bi_sale_dys = res.bi_sale_dys;
92
+ this.attrStructureDtl = res.attrStructureDtl;
93
+ this.attrStructureDtl.forEach(ele1 => {
94
+ ele1.component.forEach(ele2 => {
95
+ if (ele2.attr == 'sz') {
96
+ ele2.prpList.forEach(element => {
97
+ let subObj = {};
98
+ // subObj['label'] = element.print;
99
+ // subObj['val'] = element.val;
100
+ // subObj['value'] = element.sort;
101
+ subObj['itemName'] = element.print;
102
+ subObj['id'] = element.sort;
103
+ this.sizePrp.push(subObj);
104
+ });
105
+ ele2.prpList = this.sizePrp;
106
+ }
107
+ ele2.values = [];
108
+ });
109
+ });
110
+ this.statusList = res.statusList;
111
+ this.groups = res.attrGridFormat;
112
+ this.viewGrp = this.groups[0];
113
+ this.viewOptions = res.pageDefination.trns_buttons;
114
+ let vender = res.pageDefination.add_new || [];
115
+ if (vender.length > 0) {
116
+ this.showvender = true;
117
+ }
118
+ this.employees = res.employeeList;
119
+ this.biPeriodList = res.bi_period;
120
+ this.onChangeSalePeriod(0);
121
+ this.salePeriod = "0";
122
+ setTimeout(() => {
123
+ if (this.attrStructureDtl.length != null) {
124
+ let stts = JSON.parse(localStorage.getItem('BIanaStt'));
125
+ if (localStorage.getItem('BIcall') != null && this.attrStructureDtl.length > 0) {
126
+ this.modifySearchFun();
127
+ let crtwt = localStorage.getItem('BIcrtwt');
128
+ if (crtwt != null && crtwt != undefined && crtwt != "") {
129
+ let wt = JSON.parse(crtwt);
130
+ if (wt != null && wt != undefined && wt != "") {
131
+ document.getElementById('crtwt0').value = wt[0];
132
+ document.getElementById('crtwt1').value = wt[1];
133
+ }
134
+ }
135
+ let byr = JSON.parse(localStorage.getItem('BIbyr'));
136
+ if (byr != null && byr != undefined && byr != "") {
137
+ let buyerList = [];
138
+ buyerList.push(byr);
139
+ let id = byr['value'];
140
+ this.buyers = buyerList;
141
+ this.selectedSugg = id; //JSON.parse(localStorage.getItem('byr'));
142
+ }
143
+ let emp = localStorage.getItem('BIeId');
144
+ if (emp != null && emp != undefined && emp != "") {
145
+ this.empId = emp;
146
+ }
147
+ let pfrm = localStorage.getItem('BIpFrom');
148
+ if (pfrm != null && pfrm != undefined && pfrm != "") {
149
+ document.getElementById('pFrom').value = JSON.parse(pfrm);
150
+ }
151
+ let pto = localStorage.getItem('BIpTo');
152
+ if (pto != null && pto != undefined && pto != "") {
153
+ document.getElementById('pTo').value = JSON.parse(pto);
154
+ }
155
+ let saleP = localStorage.getItem('BIsalePeriod');
156
+ if (saleP != null && saleP != undefined && saleP != "") {
157
+ this.salePeriod = saleP;
158
+ }
159
+ let period = localStorage.getItem('BIPeriod');
160
+ if (period != null && period != undefined && period != "") {
161
+ this.period = period;
162
+ }
163
+ stts = JSON.parse(localStorage.getItem('BIanaStt'));
164
+ if (stts != null && stts != undefined && stts.length < 1) {
165
+ stts.forEach(element => {
166
+ if (document.getElementById(element).checked == 'false') {
167
+ document.getElementById(element).click();
168
+ }
169
+ });
170
+ }
171
+ let szs = JSON.parse(localStorage.getItem('BIsize'));
172
+ {
173
+ if (szs != null && szs != undefined && szs.length > 0) {
174
+ this.szprp = szs;
175
+ }
176
+ }
177
+ if (stts != null) {
178
+ if (stts.includes('mkt')) {
179
+ document.getElementById('Marketing').click();
180
+ }
181
+ if (stts.includes('sold')) {
182
+ document.getElementById('Sold').click();
183
+ }
184
+ if (stts.includes('cs')) {
185
+ document.getElementById('Consignment').click();
186
+ }
187
+ if (stts.includes('asrt')) {
188
+ document.getElementById('Assort').click();
189
+ }
190
+ if (stts.includes('lab')) {
191
+ document.getElementById('Lab').click();
192
+ }
193
+ }
194
+ }
195
+ else {
196
+ document.getElementById('Marketing').click();
197
+ document.getElementById('Sold').click();
198
+ }
199
+ // else {
200
+ // document.getElementById('Marketing').click();
201
+ // document.getElementById('Sold').click();
202
+ // }
203
+ // if (this.selectedSugg != undefined || this.selectedSugg != null || this.selectedSugg != "") {
204
+ // localStorage.removeItem('BIbyr');
205
+ // }
206
+ // if (this.empId != undefined || this.empId != null || this.empId != "") {
207
+ // localStorage.removeItem('BIeId');
208
+ // }
209
+ // localStorage.removeItem('BIcrtwt');
210
+ // localStorage.removeItem('BIsize');
211
+ this.addScrollBar();
212
+ localStorage.removeItem('BIcall');
213
+ ////// this.clearLocalStorages();
214
+ }
215
+ }, 500);
216
+ }
217
+ else {
218
+ this._spinnerService.hide();
219
+ this.toastr.error(data.message);
220
+ }
221
+ }, error => {
222
+ this._spinnerService.hide();
223
+ this.toastr.error(error);
224
+ });
225
+ }
226
+ selectAll(attcompoObj, e) {
227
+ if (e.target.checked == false) {
228
+ attcompoObj.prpList.map(value => { document.getElementById(attcompoObj.attr + '_' + value.val).click(); });
229
+ }
230
+ else {
231
+ attcompoObj.prpList.map(value => {
232
+ if (attcompoObj.values.indexOf(value.sort) != -1) {
233
+ }
234
+ else {
235
+ document.getElementById(attcompoObj.attr + '_' + value.val).click();
236
+ }
237
+ });
238
+ }
239
+ }
240
+ addScrollBar() {
241
+ let divs = document.querySelectorAll('[id^="scr_"]');
242
+ divs.forEach((element, index) => {
243
+ let offsetwi = 0;
244
+ let scrollwi = 0;
245
+ let div = document.getElementById(element.id);
246
+ offsetwi = div.offsetWidth;
247
+ scrollwi = div.scrollWidth;
248
+ if (offsetwi != scrollwi) {
249
+ let pele = div.parentElement;
250
+ let fchild = pele.firstElementChild;
251
+ let lchild = pele.lastElementChild;
252
+ document.getElementById(fchild.id).style.display = 'block';
253
+ document.getElementById(lchild.id).style.display = 'block';
254
+ pele.style.paddingLeft = "30px";
255
+ pele.style.paddingRight = "30px";
256
+ }
257
+ });
258
+ }
259
+ onselect(bId) {
260
+ // console.log(bId);
261
+ let obj = this.buyers.find(x => x.value == bId);
262
+ localStorage.setItem('BIbyr', JSON.stringify(obj));
263
+ }
264
+ getBuyers(employee) {
265
+ // this.buyers = [];
266
+ if (employee == undefined || employee == '')
267
+ return;
268
+ let reqObj = {};
269
+ reqObj['empIdn'] = this.empId;
270
+ reqObj['likeStr'] = employee;
271
+ reqObj['formNme'] = this.route.snapshot.params['frmnme'];
272
+ reqObj['key'] = 'buyername';
273
+ reqObj['stt'] = '-1';
274
+ console.log(reqObj);
275
+ this.bis.data(reqObj, 'loadBuyer', 'marketing/search')
276
+ .subscribe(data => {
277
+ let res = data.result;
278
+ this.buyers = res.buyerList.map(option => ({
279
+ value: option.k,
280
+ label: option.v
281
+ }));
282
+ this._spinnerService.hide();
283
+ }, error => {
284
+ this._spinnerService.hide();
285
+ this.toastr.error(error);
286
+ });
287
+ }
288
+ getVender(e) {
289
+ // this.buyers = [];
290
+ let reqObj = {};
291
+ reqObj['likeStr'] = e;
292
+ reqObj['formNme'] = this.route.snapshot.params['frmnme'];
293
+ reqObj['typ'] = 'vender';
294
+ console.log(reqObj);
295
+ this.bis.data(reqObj, 'loadBuyer', 'marketing/search')
296
+ .subscribe(data => {
297
+ let res = data.result;
298
+ this.venderList = res.buyerList.map(option => ({
299
+ value: option.k,
300
+ label: option.v
301
+ }));
302
+ this._spinnerService.hide();
303
+ }, error => {
304
+ this._spinnerService.hide();
305
+ this.toastr.error(error);
306
+ });
307
+ }
308
+ leftScroll(div) {
309
+ document.querySelector('div.' + div).scrollLeft -= 250;
310
+ }
311
+ rightScroll(div) {
312
+ document.querySelector('div.' + div).scrollLeft += 250;
313
+ }
314
+ checkBoxFun(attOj, val, status, id) {
315
+ console.log(attOj.attr);
316
+ if (id == 'tinge_No BGM' && status == true) {
317
+ document.getElementById('milky_na').click();
318
+ document.getElementById('tinge_BR').disabled = true;
319
+ document.getElementById('tinge_GR').disabled = true;
320
+ document.getElementById('tinge_MT').disabled = true;
321
+ document.getElementById('milky_ml1').disabled = true;
322
+ document.getElementById('milky_ml2').disabled = true;
323
+ document.getElementById('milky_ml3').disabled = true;
324
+ document.getElementById('milky_ml4').disabled = true;
325
+ document.getElementById('tinge_15@20@25').style.backgroundColor = '#ddd';
326
+ document.getElementById('tinge_35@40@45@50@55').style.backgroundColor = '#ddd';
327
+ document.getElementById('tinge_60@61@62@63').style.backgroundColor = '#ddd';
328
+ document.getElementById('milky_7').style.backgroundColor = '#ddd';
329
+ document.getElementById('milky_15').style.backgroundColor = '#ddd';
330
+ document.getElementById('milky_20').style.backgroundColor = '#ddd';
331
+ document.getElementById('milky_30').style.backgroundColor = '#ddd';
332
+ }
333
+ else if (id == 'tinge_No BGM' && status == false) {
334
+ document.getElementById('milky_na').click();
335
+ document.getElementById('tinge_BR').disabled = false;
336
+ document.getElementById('tinge_GR').disabled = false;
337
+ document.getElementById('tinge_MT').disabled = false;
338
+ document.getElementById('milky_ml1').disabled = false;
339
+ document.getElementById('milky_ml2').disabled = false;
340
+ document.getElementById('milky_ml3').disabled = false;
341
+ document.getElementById('milky_ml4').disabled = false;
342
+ document.getElementById('tinge_15@20@25').style.backgroundColor = '#fff';
343
+ document.getElementById('tinge_35@40@45@50@55').style.backgroundColor = '#fff';
344
+ document.getElementById('tinge_60@61@62@63').style.backgroundColor = '#fff';
345
+ document.getElementById('milky_7').style.backgroundColor = '#fff';
346
+ document.getElementById('milky_15').style.backgroundColor = '#fff';
347
+ document.getElementById('milky_20').style.backgroundColor = '#fff';
348
+ document.getElementById('milky_30').style.backgroundColor = '#fff';
349
+ }
350
+ // this.active = true;
351
+ // let ele = document.getElementById('pr_' + val);
352
+ // if (attOj.attr == 'sh') {
353
+ // if (status == true) {
354
+ // ele.classList.add("selectedRow");
355
+ // } else {
356
+ // ele.classList.remove("selectedRow");
357
+ // }
358
+ // }
359
+ let found = 0;
360
+ let found2 = 0;
361
+ attOj.values.forEach((element, index) => {
362
+ if (status == false && element == val) {
363
+ attOj.values.splice(index, 1);
364
+ document.getElementById('all' + attOj.attr).checked = false;
365
+ return;
366
+ }
367
+ else if (status == true && element == val) {
368
+ found = 1;
369
+ return;
370
+ }
371
+ });
372
+ this.modifySch.forEach((element, index) => {
373
+ if (status == false && element == id) {
374
+ this.modifySch.splice(index, 1);
375
+ return;
376
+ }
377
+ else if (status == true && element == id) {
378
+ found2 = 1;
379
+ return;
380
+ }
381
+ });
382
+ if (status) {
383
+ if (attOj.attr == 'sz') {
384
+ attOj.values.push(val[val.length - 1]);
385
+ this.modifySch.push(id[id.length - 1]);
386
+ }
387
+ else {
388
+ attOj.values.push(val);
389
+ this.modifySch.push(id);
390
+ }
391
+ }
392
+ localStorage.setItem('BImodifySearchString', this.modifySch);
393
+ // console.log(attOj, val, status, id);
394
+ this.attrMaker('c');
395
+ }
396
+ selectEle(c, s) {
397
+ if (c == 0) {
398
+ if (s == true) {
399
+ document.getElementById('ct_ex').click();
400
+ document.getElementById('po_ex').click();
401
+ document.getElementById('sy_ex').click();
402
+ document.getElementById("two").checked = false;
403
+ document.getElementById("three").checked = false;
404
+ this.two = true;
405
+ this.three = true;
406
+ this.thvgup = true;
407
+ }
408
+ else {
409
+ document.getElementById('ct_ex').click();
410
+ document.getElementById('po_ex').click();
411
+ document.getElementById('sy_ex').click();
412
+ this.two = false;
413
+ this.three = false;
414
+ this.thvgup = false;
415
+ }
416
+ }
417
+ else if (c == 1) {
418
+ if (s == true) {
419
+ document.getElementById('ct_ex').click();
420
+ document.getElementById('po_ex').click();
421
+ document.getElementById("one").checked = false;
422
+ document.getElementById("three").checked = false;
423
+ document.getElementById("thvgup").checked = false;
424
+ this.one = true;
425
+ this.three = true;
426
+ this.thvgup = true;
427
+ }
428
+ else {
429
+ document.getElementById('ct_ex').click();
430
+ document.getElementById('po_ex').click();
431
+ this.one = false;
432
+ this.three = false;
433
+ this.thvgup = false;
434
+ }
435
+ }
436
+ else if (c == 2) {
437
+ if (s == true) {
438
+ document.getElementById('ct_vg').click();
439
+ document.getElementById('po_vg').click();
440
+ document.getElementById('sy_vg').click();
441
+ document.getElementById("one").checked = false;
442
+ document.getElementById("two").checked = false;
443
+ document.getElementById("thvgup").checked = false;
444
+ this.one = true;
445
+ this.two = true;
446
+ this.thvgup = true;
447
+ }
448
+ else {
449
+ document.getElementById('ct_vg').click();
450
+ document.getElementById('po_vg').click();
451
+ document.getElementById('sy_vg').click();
452
+ this.one = false;
453
+ this.two = false;
454
+ this.thvgup = false;
455
+ }
456
+ }
457
+ else if (c == 3) {
458
+ if (s == true) {
459
+ document.getElementById('ct_ex').click();
460
+ document.getElementById('po_ex').click();
461
+ document.getElementById('sy_ex').click();
462
+ document.getElementById('ct_vg').click();
463
+ document.getElementById('po_vg').click();
464
+ document.getElementById('sy_vg').click();
465
+ document.getElementById("one").checked = false;
466
+ document.getElementById("two").checked = false;
467
+ document.getElementById("three").checked = false;
468
+ this.one = true;
469
+ this.two = true;
470
+ this.three = true;
471
+ }
472
+ else {
473
+ document.getElementById('ct_ex').click();
474
+ document.getElementById('po_ex').click();
475
+ document.getElementById('sy_ex').click();
476
+ document.getElementById('ct_vg').click();
477
+ document.getElementById('po_vg').click();
478
+ document.getElementById('sy_vg').click();
479
+ this.one = false;
480
+ this.two = false;
481
+ this.three = false;
482
+ }
483
+ }
484
+ }
485
+ singleVal(attOj, val, i) {
486
+ if (i == "t") {
487
+ let spaceTocomma = val.replace(/[ ,]+/g, ",");
488
+ let newLineToComma = spaceTocomma.replace(/\n/g, ",");
489
+ let plines = newLineToComma.split(',');
490
+ plines = plines.filter(v => v != '');
491
+ plines = plines.filter(v => v != ' ');
492
+ attOj.values = [...plines];
493
+ this.attrMaker('c');
494
+ return;
495
+ }
496
+ if (val != '') {
497
+ attOj.values.push(val);
498
+ }
499
+ else {
500
+ attOj.values.splice(i, 1);
501
+ }
502
+ console.log(attOj);
503
+ this.attrMaker('t');
504
+ }
505
+ onDateChange(attrObj, val, i) {
506
+ let attr = attrObj.attr;
507
+ let frmId = attr + 0;
508
+ let frmVal = document.getElementById(frmId).value;
509
+ attrObj.values.push(frmVal);
510
+ attrObj.values.push(val); //tovalue
511
+ this.attrMaker('t');
512
+ }
513
+ modifySearchFun() {
514
+ // localStorage.removeItem('Mfoogle');
515
+ // let byr = JSON.parse( localStorage.getItem('byr'));
516
+ // this.trm = localStorage.getItem('trm');
517
+ var event = new Event('change');
518
+ if (localStorage.getItem('BIcall') != null == null) {
519
+ return;
520
+ }
521
+ else {
522
+ if (localStorage.getItem('BImodifySchTxt') != null) {
523
+ this.modfytxt.forEach((ele, index) => {
524
+ if (ele.id != null) {
525
+ document.getElementById(ele.id).value = ele.val;
526
+ let id = document.getElementById(ele.id);
527
+ id.dispatchEvent(event);
528
+ }
529
+ });
530
+ }
531
+ this.modify.forEach((ele, index) => {
532
+ document.getElementById(ele).click();
533
+ if (index + 1 == this.modify.length) {
534
+ localStorage.removeItem('BIcall');
535
+ // setTimeout(function removelocals() {
536
+ // localStorage.removeItem('modifySearchString');
537
+ // localStorage.removeItem('modifySchTxt');
538
+ // localStorage.removeItem('modifystat');
539
+ // }, 500)
540
+ }
541
+ localStorage.removeItem('BIcall'); // for resetting after modify search
542
+ });
543
+ }
544
+ }
545
+ range(attOj, val, index) {
546
+ let txtObj = {};
547
+ let valu = val.target.value;
548
+ let first = attOj.values[0];
549
+ let second = attOj.values[1];
550
+ // console.log(second);
551
+ // if (index == 0 && second == undefined) {
552
+ // (document.getElementById(oppid) as any).value = valu;
553
+ // attOj.values[index] = valu;
554
+ // attOj.values[opp] = valu;
555
+ // } else if (index == 1 && first == undefined) {
556
+ // (document.getElementById(oppid) as any).value = valu;
557
+ // attOj.values[index] = valu;
558
+ // attOj.values[opp] = valu;
559
+ // } else {
560
+ // attOj.values[index] = valu;
561
+ // }
562
+ // attOj.values[index] = valu;
563
+ if (valu != '') {
564
+ attOj.values[index] = valu;
565
+ }
566
+ else {
567
+ attOj.values.splice(index, 1);
568
+ }
569
+ // console.log(attOj.values);
570
+ // if (val.target.value == '') {
571
+ // this.modifyTxt.forEach((element, index) => {
572
+ // if (element.id == id) {
573
+ // this.modifyTxt.splice(index, 1);
574
+ // localStorage.setItem('modifySchTxt', JSON.stringify(this.modifyTxt));
575
+ // }
576
+ // });
577
+ // } else {
578
+ // txtObj['id'] = id;
579
+ // txtObj['val'] = attOj.values[index];
580
+ // this.modifyTxt.push(txtObj);
581
+ // localStorage.setItem('modifySchTxt', JSON.stringify(this.modifyTxt));
582
+ // }
583
+ this.attrMaker('c');
584
+ }
585
+ additional(attOj, val, index, call) {
586
+ this.callFrom = call;
587
+ let txtObj = {};
588
+ let valu = val.target.value;
589
+ let first = attOj.values[0];
590
+ let second = attOj.values[1];
591
+ if (valu != '') {
592
+ attOj.values[index] = valu;
593
+ }
594
+ else {
595
+ attOj.values.splice(index, 1);
596
+ }
597
+ let fcw = document.getElementById('crtwt0').value;
598
+ let tcw = document.getElementById('crtwt1').value;
599
+ // if (attOj.values.length == 2) {
600
+ if (fcw != null && fcw != undefined && fcw != "" && tcw != null && tcw != undefined && tcw != "") {
601
+ // localStorage.setItem('BIcrtwt', JSON.stringify(attOj.values));
602
+ localStorage.setItem('BIcrtwt', JSON.stringify([fcw, tcw]));
603
+ this.attrMaker('c');
604
+ }
605
+ }
606
+ multiselect(attOj, val) {
607
+ localStorage.setItem('size', val);
608
+ attOj.values = [];
609
+ var tempArr = [];
610
+ val.forEach(element => {
611
+ if (element != '' && element != null) {
612
+ if (attOj.values.indexOf(val) != -1) {
613
+ }
614
+ else {
615
+ // attOj.values.push(element);
616
+ attOj.values.push(element.id);
617
+ tempArr.push(element);
618
+ localStorage.setItem('BIsize', JSON.stringify(tempArr));
619
+ }
620
+ }
621
+ });
622
+ this.attrMaker('c');
623
+ }
624
+ deselect(attOj, val) {
625
+ attOj.values = [];
626
+ localStorage.removeItem('BIsize');
627
+ this.attrMaker('c');
628
+ }
629
+ attrMaker(c) {
630
+ if (c == 'c') {
631
+ this.attr = '';
632
+ this.attrType = '';
633
+ this.attrVal = '';
634
+ this.attrStructureDtl.forEach(ele1 => {
635
+ ele1.component.forEach(ele2 => {
636
+ if (ele2.values.length > 0) {
637
+ this.attr += ele2.attr + "#";
638
+ this.attrType += ele2.dataType + "#";
639
+ if (ele2.dataType == 'd')
640
+ this.attrVal += ele2.values.join("@").replace(/-/g, '') + "#";
641
+ else
642
+ this.attrVal += ele2.values.join("@") + "#";
643
+ }
644
+ });
645
+ });
646
+ }
647
+ else if (c == 't') {
648
+ this.attr = '';
649
+ this.attrType = '';
650
+ this.attrVal = '';
651
+ this.attrStructureDtl.forEach(ele1 => {
652
+ ele1.component.forEach(ele2 => {
653
+ if (ele2.values.length > 0) {
654
+ // this.attr += ele2.attr + "#";
655
+ // this.attrType += ele2.dataType + "#";
656
+ // this.attrVal += ele2.values[0].split(' ').join('@') + "#";
657
+ if (this.attr != undefined) {
658
+ this.attr += ele2.attr + "#";
659
+ this.attrType += ele2.dataType + "#";
660
+ this.attrVal += ele2.values.join("@").replace(/-/g, '') + "#";
661
+ }
662
+ else {
663
+ this.attr = ele2.attr + "#";
664
+ this.attrType = ele2.dataType + "#";
665
+ this.attrVal = ele2.values.join("@").replace(/-/g, '') + "#";
666
+ }
667
+ console.log(ele2.values);
668
+ }
669
+ });
670
+ });
671
+ }
672
+ console.log(this.attr, this.attrType, this.attrVal);
673
+ }
674
+ getVal(v, s) {
675
+ if (s == true) {
676
+ if (this.selectedStatus.indexOf(v) != -1) {
677
+ }
678
+ else {
679
+ this.selectedStatus.push(v);
680
+ }
681
+ }
682
+ else {
683
+ let index = this.selectedStatus.indexOf(v);
684
+ this.selectedStatus.splice(index, 1);
685
+ }
686
+ this.setStt(v, s);
687
+ console.log(this.selectedStatus);
688
+ }
689
+ setStt(v, s) {
690
+ if (s == true) {
691
+ if (this.anaAllGrpStt.indexOf(v.key) != -1) {
692
+ }
693
+ else {
694
+ this.anaAllGrpStt.push(v.key);
695
+ this.anaAllGrpSttLBL.push(v.label);
696
+ }
697
+ }
698
+ else {
699
+ let anaindex = this.anaAllGrpStt.indexOf(v.key);
700
+ let analblindex = this.anaAllGrpSttLBL.indexOf(v.label);
701
+ this.anaAllGrpSttLBL.splice(analblindex, 1);
702
+ this.anaAllGrpStt.splice(anaindex, 1);
703
+ }
704
+ localStorage.setItem('BIanaStt', JSON.stringify(this.anaAllGrpStt));
705
+ localStorage.setItem('BIanaSttLBL', JSON.stringify(this.anaAllGrpSttLBL));
706
+ console.log(this.anaAllGrpStt);
707
+ }
708
+ addDate(val, index, call) {
709
+ if (index == 0) {
710
+ this.first = new Date(val);
711
+ this.gPfrom = val;
712
+ }
713
+ else {
714
+ this.second = new Date(val);
715
+ this.gPto = val;
716
+ }
717
+ this.pattr = '';
718
+ this.pattrType = '';
719
+ // this.pattrVal = '';
720
+ this.p1;
721
+ if (val != '' && val != null) {
722
+ this.pattr = 'sal_dte';
723
+ this.pattrType = 'd';
724
+ if (call == 'p1') {
725
+ this.p1[index] = val.replace(/-/g, '');
726
+ this.pattrVal = this.p1.join("@");
727
+ }
728
+ else if (call == 'p2') {
729
+ this.p2[index] = val.replace(/-/g, '');
730
+ this.pattrVal += this.p2.join("@") + '~';
731
+ }
732
+ else if (call == 'p3') {
733
+ this.p3[index] = val.replace(/-/g, '');
734
+ this.pattrVal += this.p3.join("@") + '~';
735
+ }
736
+ else if (call == 'p4') {
737
+ this.p4[index] = val.replace(/-/g, '');
738
+ this.pattrVal += this.p4.join("@") + '~';
739
+ }
740
+ }
741
+ // console.log(this.pattrVal);
742
+ this.attrMaker('c');
743
+ }
744
+ onChangeSalePeriod(days) {
745
+ // this.period = 1;
746
+ let dt = new Date();
747
+ dt.setDate(dt.getDate() - days);
748
+ let month = '' + (dt.getMonth() + 1), day = '' + dt.getDate(), year = dt.getFullYear();
749
+ if (month.length < 2)
750
+ month = '0' + month;
751
+ if (day.length < 2)
752
+ day = '0' + day;
753
+ let backDt = [year, month, day].join('-');
754
+ document.getElementById('pFrom').value = backDt;
755
+ let d = new Date(), tmonth = '' + (d.getMonth() + 1), tday = '' + d.getDate(), tyear = d.getFullYear();
756
+ if (tmonth.length < 2)
757
+ tmonth = '0' + tmonth;
758
+ if (tday.length < 2)
759
+ tday = '0' + tday;
760
+ let tdate = [tyear, tmonth, tday].join('-');
761
+ document.getElementById('pTo').value = tdate;
762
+ this.addDate(backDt, 0, 'p1');
763
+ this.addDate(tdate, 1, 'p1');
764
+ }
765
+ viewResult(type) {
766
+ if (type == 'grid') {
767
+ this.getSchResult('g');
768
+ localStorage.setItem('viewType', 'gridView');
769
+ if (this.viewGrp != undefined) {
770
+ localStorage.setItem('anaGrpType', JSON.stringify(this.viewGrp));
771
+ }
772
+ }
773
+ else if (type == 'packetView') {
774
+ this.getSchResult('p');
775
+ localStorage.setItem('viewType', 'listView');
776
+ }
777
+ if (this.empId != null && this.empId != undefined && this.empId != "") {
778
+ localStorage.setItem('BIeId', this.empId);
779
+ }
780
+ if (this.salePeriod != undefined && this.salePeriod != null && this.salePeriod != "") {
781
+ localStorage.setItem('BIsalePeriod', this.salePeriod);
782
+ }
783
+ // if (this.period != undefined && this.period != null && this.period != "") {
784
+ // localStorage.setItem('BIPeriod', this.salePeriod);
785
+ // }
786
+ }
787
+ getSchResult(view) {
788
+ let frmdt = document.getElementById('pFrom').value;
789
+ let todt = document.getElementById('pTo').value;
790
+ let fromDate = new Date(frmdt);
791
+ let toDate = new Date(todt);
792
+ let diffDays = Math.round(Math.abs((fromDate - toDate) / (24 * 60 * 60 * 1000)));
793
+ localStorage.setItem('diff', diffDays);
794
+ localStorage.setItem('stt', JSON.stringify(this.defaultStatusList));
795
+ if (this.oac && this.oac != null && Object.keys(this.oac).length > 0) {
796
+ localStorage.setItem('BIacwt', JSON.stringify(this.oac));
797
+ }
798
+ this.selectedStatus.forEach(ele1 => {
799
+ let lKey = (ele1.k).toLowerCase();
800
+ let lVal = ele1.v;
801
+ if (lKey == 'sold') {
802
+ this.soldStatus = [...lVal.split()];
803
+ }
804
+ else {
805
+ let temp = this.arrayConversion(lVal);
806
+ this.otherStatus = this.otherStatus.concat(temp);
807
+ }
808
+ });
809
+ this.getSchId(this.otherStatus, view);
810
+ }
811
+ onPeriodChange(period) {
812
+ this.period = period;
813
+ }
814
+ getSchId(status, view) {
815
+ // debugger
816
+ // let fromDate: any = new Date(this.first.getFullYear(), this.first.getMonth(), this.first.getDate());
817
+ // let toDate: any = new Date(this.second.getFullYear(), this.second.getMonth(), this.second.getDate());
818
+ // let frmdt = (document.getElementById('pFrom') as any).value;
819
+ // let todt = (document.getElementById('pTo') as any).value;
820
+ // let diffDays: any = Math.round(Math.abs((frmdt - todt) / (24 * 60 * 60 * 1000)));
821
+ // localStorage.setItem('diff', diffDays);
822
+ let crtfrm = document.getElementById('crtwt0').value;
823
+ let crtto = document.getElementById('crtwt1').value;
824
+ if (crtfrm != null && crtfrm != undefined && crtfrm != "" && crtto != null && crtto != undefined && crtto != "" && crtfrm > 0 && crtto > 0) {
825
+ crtfrm = parseFloat(crtfrm);
826
+ crtto = parseFloat(crtto);
827
+ this.attrStructureDtl.forEach(ele1 => {
828
+ ele1.component.forEach(ele2 => {
829
+ if (ele2.attr == 'crtwt') {
830
+ ele2.values = [crtfrm, crtto];
831
+ // this.attr += ele2.attr + "#";
832
+ // this.attrType += ele2.dataType + "#";
833
+ // this.attrVal += ele2.values.join("@") + "#";
834
+ }
835
+ });
836
+ });
837
+ this.attrMaker('c');
838
+ }
839
+ debugger;
840
+ console.log("status", status);
841
+ let reqObj = {};
842
+ reqObj['formNme'] = this.route.snapshot.params['frmnme'];
843
+ reqObj['count'] = 'N';
844
+ if (this.attr.indexOf('vnm') == -1)
845
+ reqObj['statusList'] = status;
846
+ if (this.modulename == 'inward') {
847
+ this.attr = this.attr + "pur#";
848
+ this.attrType = this.attrType + "c#";
849
+ this.attrVal = this.attrVal + "60#";
850
+ }
851
+ if (status.length != 0) {
852
+ reqObj['attr'] = this.attr.endsWith('#') ? this.attr.slice(0, -1) : this.attr;
853
+ reqObj['attrType'] = this.attrType.endsWith('#') ? this.attrType.slice(0, -1) : this.attrType;
854
+ reqObj['attrVal'] = this.attrVal.endsWith('#') ? this.attrVal.slice(0, -1) : this.attrVal;
855
+ }
856
+ else {
857
+ this.getSoldSchId(this.soldStatus, view);
858
+ return;
859
+ }
860
+ console.log(reqObj);
861
+ console.log(JSON.stringify(reqObj));
862
+ this._spinnerService.show();
863
+ this.bis.data(reqObj, 'searchCount', 'marketing/search')
864
+ .subscribe(response => {
865
+ console.log(response);
866
+ if (response.status == 'SUCCESS') {
867
+ this._spinnerService.hide();
868
+ let result = response.result;
869
+ this.schId = result.searchIdn;
870
+ this.schId = '';
871
+ if (this.attr.indexOf('vnm') == -1)
872
+ this.searchId.push(response.searchIdn);
873
+ else {
874
+ this.searchId = [];
875
+ this.searchId.push(response.searchIdn);
876
+ }
877
+ if (status.length != 0) {
878
+ localStorage.setItem('srcIdns', this.searchId);
879
+ if (view == 'g') {
880
+ if (this.soldStatus.length != 0) {
881
+ this.getSoldSchId(this.soldStatus, view);
882
+ return;
883
+ }
884
+ else {
885
+ this.router.navigate([this.modulename + '/analysis-result/' + this.route.snapshot.params['frmnme']]);
886
+ }
887
+ }
888
+ else if (view == 'p') {
889
+ if (this.soldStatus.length != 0) {
890
+ this.getSoldSchId(this.soldStatus, view);
891
+ return;
892
+ }
893
+ else {
894
+ this.router.navigate([this.modulename + '/pkt-list/' + this.route.snapshot.params['frmnme']]);
895
+ }
896
+ }
897
+ }
898
+ }
899
+ else {
900
+ this._spinnerService.hide();
901
+ this.toastr.error(response.message);
902
+ }
903
+ });
904
+ }
905
+ getSoldSchId(status, view) {
906
+ let crtfrm = document.getElementById('crtwt0').value;
907
+ let crtto = document.getElementById('crtwt1').value;
908
+ if (crtfrm != null && crtfrm != undefined && crtfrm != "" && crtto != null && crtto != undefined && crtto != "" && crtfrm > 0 && crtto > 0) {
909
+ crtfrm = parseFloat(crtfrm);
910
+ crtto = parseFloat(crtto);
911
+ this.attrStructureDtl.forEach(ele1 => {
912
+ ele1.component.forEach(ele2 => {
913
+ if (ele2.attr == 'crtwt') {
914
+ ele2.values = [crtfrm, crtto];
915
+ // this.attr += ele2.attr + "#";
916
+ // this.attrType += ele2.dataType + "#";
917
+ // this.attrVal += ele2.values.join("@") + "#";
918
+ }
919
+ });
920
+ });
921
+ this.attrMaker('c');
922
+ }
923
+ localStorage.setItem('BIPeriod', this.period);
924
+ // if (this.pObj != null && this.pObj != {} && this.schId.pObj != undefined) {
925
+ // localStorage.setItem('BIpFrom', JSON.stringify(this.pObj));
926
+ // }
927
+ console.log(status);
928
+ let reqObj = {};
929
+ reqObj['formNme'] = this.route.snapshot.params['frmnme'];
930
+ // if (this.selectedSugg != undefined) {
931
+ // reqObj['buyerIdn'] = this.selectedSugg;
932
+ // }
933
+ reqObj['count'] = 'N';
934
+ reqObj['statusList'] = status;
935
+ if (status.length != 0) {
936
+ debugger;
937
+ if (this.pattr != '') {
938
+ let pfrm = document.getElementById('pFrom').value;
939
+ let pto = document.getElementById('pTo').value;
940
+ console.log("indexvnm", this.attr.indexOf("vnm"));
941
+ if (this.pattr == 'sal_dte' && this.attr.indexOf('sal_dte') == -1 && this.attr.indexOf("vnm") == -1) {
942
+ this.attr += this.pattr;
943
+ this.attrType += this.pattrType;
944
+ let p1 = pfrm.replace(/-/g, '');
945
+ let p2 = pto.replace(/-/g, '');
946
+ this.attrVal += p1 + '@' + p2;
947
+ }
948
+ if (this.attr.indexOf("vnm") == -1 && this.pattr != 'sal_dte' && this.pattr != '#sal_dte') {
949
+ this.attr += this.pattr;
950
+ this.attrType += this.pattrType;
951
+ this.attrVal += this.pattrVal;
952
+ }
953
+ // if (this.gPfrom != null && this.gPfrom != "" && this.gPfrom != undefined) {
954
+ // localStorage.setItem('BIpFrom', JSON.stringify(this.gPfrom));
955
+ // }
956
+ // if (this.gPto != null && this.gPto != "" && this.gPto != undefined) {
957
+ // localStorage.setItem('BIpTo', JSON.stringify(this.gPto));
958
+ // }
959
+ localStorage.setItem('BIpFrom', JSON.stringify(pfrm));
960
+ localStorage.setItem('BIpTo', JSON.stringify(pto));
961
+ }
962
+ if (this.selectedSugg != undefined) {
963
+ this.attr += '#sal_byr';
964
+ this.attrType += '#t';
965
+ this.attrVal += '#' + this.selectedSugg;
966
+ }
967
+ if (this.empId != undefined) {
968
+ //reqObj['empIdn'] = this.empId;
969
+ this.attr += '#sal_emp';
970
+ this.attrType += '#t';
971
+ this.attrVal += '#' + this.empId;
972
+ localStorage.setItem('BIEmp', JSON.stringify(this.empId));
973
+ }
974
+ reqObj['attr'] = this.attr.endsWith('#') ? this.attr.slice(0, -1) : this.attr;
975
+ reqObj['attrType'] = this.attrType.endsWith('#') ? this.attrType.slice(0, -1) : this.attrType;
976
+ reqObj['attrVal'] = this.attrVal.endsWith('#') ? this.attrVal.slice(0, -1) : this.attrVal;
977
+ }
978
+ else {
979
+ return;
980
+ }
981
+ this.searchId = this.searchId || [];
982
+ console.log(reqObj);
983
+ console.log(JSON.stringify(reqObj));
984
+ var isExcute = true;
985
+ if (this.attr.indexOf("vnm") != -1 && this.searchId.length > 0)
986
+ isExcute = false;
987
+ if (isExcute) {
988
+ this._spinnerService.show();
989
+ this.bis.data(reqObj, 'searchCount', 'marketing/search')
990
+ .subscribe(response => {
991
+ console.log(response);
992
+ if (response.status == 'SUCCESS') {
993
+ this._spinnerService.hide();
994
+ let result = response.result;
995
+ this.schId = result.searchIdn;
996
+ //this.schId = '';
997
+ this.cnt++;
998
+ this.searchId.push(response.searchIdn);
999
+ localStorage.setItem('srcIdns', this.searchId);
1000
+ console.log("view", view);
1001
+ if (view == 'g') {
1002
+ this.router.navigate([this.modulename + '/analysis-result/' + this.route.snapshot.params['frmnme']]);
1003
+ }
1004
+ else if (view == 'p') {
1005
+ this.router.navigate([this.modulename + '/pkt-list/' + this.route.snapshot.params['frmnme']]);
1006
+ }
1007
+ }
1008
+ else {
1009
+ this._spinnerService.hide();
1010
+ this.toastr.error(response.message);
1011
+ }
1012
+ });
1013
+ }
1014
+ else {
1015
+ if (view == 'g') {
1016
+ this.router.navigate([this.modulename + '/analysis-result/' + this.route.snapshot.params['frmnme']]);
1017
+ }
1018
+ else if (view == 'p') {
1019
+ this.router.navigate([this.modulename + '/pkt-list/' + this.route.snapshot.params['frmnme']]);
1020
+ }
1021
+ }
1022
+ }
1023
+ clearLocalStorages() {
1024
+ localStorage.removeItem('BIPeriod');
1025
+ localStorage.removeItem('BIacwt');
1026
+ localStorage.removeItem('BIanaStt');
1027
+ localStorage.removeItem('BIanaSttLBL');
1028
+ localStorage.removeItem('BImodifySearchString');
1029
+ localStorage.removeItem('BIpFrom');
1030
+ localStorage.removeItem('BIpTo');
1031
+ localStorage.removeItem('BIsalePeriod');
1032
+ localStorage.removeItem('stt');
1033
+ localStorage.removeItem('diff');
1034
+ localStorage.removeItem('BIeId');
1035
+ localStorage.removeItem('BIEmp');
1036
+ localStorage.removeItem('BIbyr');
1037
+ localStorage.removeItem('BIcall');
1038
+ localStorage.removeItem('BILegends');
1039
+ localStorage.removeItem('BIcrtwt');
1040
+ localStorage.removeItem('BI-PKT_GROUP_BY');
1041
+ localStorage.removeItem('BI-gridAvg');
1042
+ }
1043
+ ngOnInit() {
1044
+ this.route.params.subscribe((params) => {
1045
+ this.dropdownSettings = {
1046
+ enableFilterSelectAll: false,
1047
+ singleSelection: false,
1048
+ text: "Select sizes",
1049
+ selectAllText: 'Select All',
1050
+ unSelectAllText: 'UnSelect All',
1051
+ enableSearchFilter: true,
1052
+ classes: "myclass custom-class",
1053
+ escapeToClose: true
1054
+ };
1055
+ this.cUrl = this.router.url;
1056
+ this.modulename = this.cUrl.split('/')[1];
1057
+ let biCall = localStorage.getItem('BIcall') || '';
1058
+ if (biCall != '') {
1059
+ if (localStorage.getItem('BImodifySearchString') != null) {
1060
+ this.modify = localStorage.getItem('BImodifySearchString').split(',');
1061
+ }
1062
+ if (localStorage.getItem('BImodifySchTxt') != null) {
1063
+ this.modfytxt = JSON.parse(localStorage.getItem('BImodifySchTxt'));
1064
+ }
1065
+ if (localStorage.getItem('BImodifystat') != null) {
1066
+ this.modfystat = localStorage.getItem('BImodifystat');
1067
+ }
1068
+ }
1069
+ else {
1070
+ this.clearLocalStorages();
1071
+ }
1072
+ console.log(this.anaAllGrpStt);
1073
+ this.loadAnalysisSearchPage();
1074
+ });
1075
+ }
1076
+ }
1077
+ /** @nocollapse */ /** @nocollapse */ AnalysisSearchComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: AnalysisSearchComponent, deps: [{ token: i1.CommanServiceService }, { token: i2.BiService }, { token: i3.NgxSpinnerService }, { token: i4.ToastrService }, { token: i5.Router }, { token: i5.ActivatedRoute }], target: i0.ɵɵFactoryTarget.Component });
1078
+ /** @nocollapse */ /** @nocollapse */ AnalysisSearchComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: AnalysisSearchComponent, selector: "app-analysis-search", ngImport: i0, template: "<div class=\"mt\">\r\n <div class=\"panel panel-default\">\r\n <div class=\"panel-heading\">\r\n <h3 class=\"panel-title\">Analysis Search\r\n <span class=\"f-12\">({{cs.cDate | date:'medium'}})</span>\r\n </h3>\r\n </div>\r\n </div>\r\n <div class=\"content-frame\">\r\n <div class=\"content-frame-body\" style=\"margin-left:0;\">\r\n <div class=\"panel panel-default\">\r\n <div class=\"panel-body\">\r\n <div class=\"infoSec\">\r\n <div class=\"row\">\r\n <div class=\"col-sm-12\">\r\n <form class=\"form-inline\" target=\"_blank\">\r\n <label class=\"text-capitalize lblcolor\"> <strong>Status: </strong> </label>\r\n <ul class=\"ulclass\">\r\n <li *ngFor=\"let status of statusList\">\r\n <ng-container *ngIf=\"status.k != ''\">\r\n <input id=\"{{status?.k}}\" type=\"checkbox\" name=\"anaStatus\" value=\"{{status?.v}}\"\r\n (change)=\"getVal(status, $event.target.checked);\">\r\n <label for=\"{{status?.v}}\" class=\"text-capitalize\"> &nbsp;{{status?.k}}</label>\r\n </ng-container>\r\n </li>\r\n </ul>\r\n &nbsp;\r\n <label class=\"text-capitalize lblcolor\"> <strong>Employee: </strong> </label>\r\n &nbsp;\r\n <select class=\"form-control\" name=\"employee\" [(ngModel)]=\"empId\">\r\n <option>Select </option>\r\n <option *ngFor=\"let employee of employees\" value=\"{{employee?.k}}\">{{employee?.v}}\r\n </option>\r\n </select>\r\n &nbsp;\r\n <label class=\"text-capitalize lblcolor\"> <strong>Buyer: </strong> </label>\r\n &nbsp;\r\n <div style=\"width:200px;display: inline-block;\">\r\n <ng-select style=\"z-index: 5;\" placeholder=\"Select Buyers\" [allowClear]=\"true\" [options]=\"buyers\"\r\n [(ngModel)]=\"selectedSugg\" name=\"buyer\" (filterInputChanged)=\"getBuyers($event)\"\r\n (selected)=\"onselect(selectedSugg)\">\r\n </ng-select>\r\n </div>\r\n &nbsp;\r\n <label class=\"text-capitalize lblcolor\" *ngIf=\"showvender\"> <strong>Vender: </strong> </label>\r\n &nbsp;\r\n <div style=\"width:200px;display: inline-block;\" *ngIf=\"showvender\">\r\n <ng-select style=\"z-index: 5;\" placeholder=\"Select Vender\" [allowClear]=\"true\" [options]=\"venderList\"\r\n [(ngModel)]=\"vender\" name=\"vender\" (filterInputChanged)=\"getVender($event)\"\r\n >\r\n </ng-select>\r\n </div>\r\n <!-- (selected)=\"getTerms(selectedSugg)\" -->\r\n </form>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <span> <strong> Period: </strong> </span>\r\n <div style=\"width: 115px;display: inline-block;\">\r\n <!-- <input type=\"number\" class=\"form-control\" value=\"1\" [(ngModel)]=\"period\" /> -->\r\n <select class=\"form-control\" [(ngModel)]=\"period\" (change)=\"onPeriodChange(period)\">\r\n <option>Select </option>\r\n <option *ngFor=\"let bi of biPeriodList\" value=\"{{bi?.k}}\">{{bi?.v}}\r\n </option>\r\n </select>\r\n </div>\r\n <div class=\"periodicsch\">\r\n <div class=\"periodicdate\">\r\n <strong>P1</strong>\r\n From <input type=\"date\" class=\"form-control\" id=\"pFrom\"\r\n (blur)=\"addDate($event.target.value,0,'p1');\">\r\n To <input type=\"date\" class=\"form-control\" id=\"pTo\" (blur)=\"addDate($event.target.value,1,'p1');\">\r\n &nbsp;&nbsp;\r\n\r\n <!-- <strong>P2</strong>\r\n From <input type=\"date\" class=\"form-control\" (change)=\"addDate($event.target.value,0,'p2');\">\r\n To <input type=\"date\" class=\"form-control\" (change)=\"addDate($event.target.value,1,'p2');\"> -->\r\n </div>\r\n\r\n <!-- <div class=\"periodicdate\">\r\n <strong>P3</strong>\r\n From <input type=\"date\" class=\"form-control\" (change)=\"addDate($event.target.value,0,'p3');\">\r\n To <input type=\"date\" class=\"form-control\" (change)=\"addDate($event.target.value,1, 'p3');\">\r\n &nbsp;&nbsp;\r\n <strong>P4</strong>\r\n From <input type=\"date\" class=\"form-control\" (change)=\"addDate($event.target.value,0,'p4');\">\r\n To <input type=\"date\" class=\"form-control\" (change)=\"addDate($event.target.value,1,'p4');\">\r\n </div> -->\r\n </div>\r\n <div class=\"periodicsch\">\r\n <strong>Sale Days</strong>\r\n <select class=\"form-control\" id=\"salePeriod\" [(ngModel)]=\"salePeriod\"\r\n (change)=onChangeSalePeriod(salePeriod)>\r\n <option *ngFor=\"let days of bi_sale_dys\" value=\"{{days.k}}\">{{days.v}}</option>\r\n </select>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"searchsec\">\r\n <div class=\"tabssec\">\r\n <ul class=\"nav nav-tabs\" style=\"margin: 10px 0;\" role=\"tablist\">\r\n <li role=\"presentation\" *ngFor=\"let attrStructure of attrStructureDtl;\"\r\n (click)=\"cs.scrollToDiv(attrStructure.grp)\"><a href=\"#{{attrStructure.grp}}\" aria-controls=\"home\"\r\n role=\"tab\" data-toggle=\"tab\">{{attrStructure.grp}}</a></li>\r\n \r\n </ul>\r\n </div>\r\n <div class=\"schcrateria\">\r\n <div style=\"margin-bottom: 10px;\" id=\"{{attrStructure.grp}}\"\r\n *ngFor=\"let attrStructure of attrStructureDtl;\">\r\n <div class=\"grpheader\">\r\n <h6>{{attrStructure.grp}}</h6>\r\n </div>\r\n <div class=\"row\">\r\n <ng-container *ngFor=\"let attcompo of attrStructure.component;let i = index\">\r\n\r\n <div id=\"{{attrStructure.grp}}\">\r\n <label class=\"control-label headers col-md-1 text-right\" *ngIf=\"attcompo.attr == 'ct'\"\r\n style=\"margin-top: 10px;\">CPS</label>\r\n <div class=\"col-md-11\" *ngIf=\"attcompo.attr == 'ct'\"\r\n style=\"overflow-x: auto;white-space: nowrap;margin-top: 10px;\">\r\n <div class=\"ck-button\">\r\n <div class=\"outChkCls\">\r\n <label style=\"margin-bottom: 0;\">\r\n <input type=\"checkbox\" id=\"one\" class=\"prntchk\" [disabled]=\"one\"\r\n (click)=\"selectEle(0 , $event.target.checked);\">\r\n <span>3EX</span>\r\n </label>\r\n </div>\r\n </div>\r\n <!-- <div class=\"ck-button\">\r\n <div class=\"outChkCls\">\r\n <label style=\"margin-bottom: 0;\">\r\n <input type=\"checkbox\" id=\"two\" class=\"prntchk\" [disabled]=\"two\" (click)=\"selectEle(1 , $event.target.checked);\">\r\n <span>2EX</span>\r\n </label>\r\n </div>\r\n </div> -->\r\n <div class=\"ck-button\">\r\n <div class=\"outChkCls\">\r\n <label style=\"margin-bottom: 0;\">\r\n <input type=\"checkbox\" id=\"thvgup\" class=\"prntchk\" [disabled]=\"thvgup\"\r\n (click)=\"selectEle(3 , $event.target.checked);\">\r\n <span><b> &uarr;</b> 3VG</span>\r\n </label>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n\r\n <div class=\"col-md-1\">\r\n <label style=\"margin-top:15px;\"\r\n [ngStyle]=\"{'margin-top':((attcompo.dataType == 't' && attcompo.attr=='vnm') || attcompo.dataType == 'd' || attcompo.dataType == 'n' )?'30px':'15px'}\"\r\n class=\"pull-right\">{{attcompo.print}}</label>\r\n </div>\r\n <div class=\"col-md-{{attcompo.displayType}}\"\r\n [ngStyle]=\"{'overflow-x' : attcompo.attr == 'sz' ? 'unset': 'auto'}\"\r\n style=\"margin-top: 10px;white-space: nowrap;\">\r\n <!-- <span id=\"l{{attcompo.attr}}\" class=\"button larr\" *ngIf=\"attcompo.dataType == 'c' && attcompo.attr != 'sz'\"\r\n (click)=\"leftScroll(attcompo.attr+''+attcompo.dataType)\"><i style=\"font-size: 16px;color: #3b5998;\"\r\n class=\"fa fa-chevron-left\" aria-hidden=\"true\"></i></span>\r\n <div style=\"overflow-x: auto;\" class=\"{{attcompo.attr+''+attcompo.dataType}}\" id=\"scr_{{attcompo.displayType+''+attcompo.attr+''+attcompo.dataType}}\">\r\n <ng-container *ngFor=\"let prpLst of attcompo.prpList;let i =index\">\r\n <div style=\"display: inline-block;\">\r\n <div class=\"ck-button\" *ngIf=\"attcompo.dataType == 'c' && attcompo.attr != 'sz'\" id=\"{{attcompo.attr+'_'+prpLst.sort}}\">\r\n <div class=\"outChkCls\">\r\n <label style=\"margin-bottom: 0;\">\r\n <input type=\"checkbox\" value=\"{{prpLst.sort}}\" name=\"{{prpLst.sort}}\" id=\"{{attcompo.attr+'_'+prpLst.val}}\"\r\n (click)=\"checkBoxFun(attcompo, prpLst.sort, $event.target.checked,attcompo.attr+'_'+prpLst.val)\">\r\n <span>{{prpLst.print}}</span>\r\n </label>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n <span id=\"r{{attcompo.attr}}\" class=\"button rarr\" *ngIf=\"attcompo.dataType == 'c' && attcompo.attr != 'sz'\"\r\n (click)=\"rightScroll(attcompo.attr+''+attcompo.dataType)\"><i style=\"font-size: 16px;color: #3b5998;\"\r\n class=\"fa fa-chevron-right\" aria-hidden=\"true\"></i></span> -->\r\n <span id=\"l{{attcompo.attr}}\" class=\"button larr\"\r\n *ngIf=\"attcompo.dataType == 'c' && attcompo.attr != 'sz'\"\r\n (click)=\"leftScroll(attcompo.attr+''+attcompo.dataType)\"><i\r\n style=\"font-size: 16px;color: #3b5998;\" class=\"fa fa-chevron-left\"\r\n aria-hidden=\"true\"></i></span>\r\n <div style=\"overflow-x: hidden;\" class=\"{{attcompo.attr+''+attcompo.dataType}}\"\r\n id=\"scr_{{attcompo.displayType+''+attcompo.attr+''+attcompo.dataType}}\">\r\n <div style=\"display: inline-block;\">\r\n <div class=\"ck-button\" *ngIf=\"attcompo.dataType == 'c' && attcompo.attr != 'sz'\">\r\n <div class=\"outChkCls\">\r\n <label style=\"margin-bottom: 0;\">\r\n <input type=\"checkbox\" [checked]=\"chk\" id=\"all{{attcompo.attr}}\"\r\n (click)=\"selectAll(attcompo, $event);\">\r\n <span>All</span>\r\n </label>\r\n </div>\r\n </div>\r\n </div>\r\n <ng-container *ngFor=\"let prpLst of attcompo.prpList;let i =index\">\r\n <div style=\"display: inline-block;\">\r\n <div class=\"ck-button\" *ngIf=\"attcompo.dataType == 'c' && attcompo.attr != 'sz'\"\r\n id=\"{{attcompo.attr+'_'+prpLst.sort}}\">\r\n <div class=\"outChkCls\">\r\n <label style=\"margin-bottom: 0;\">\r\n <input type=\"checkbox\" value=\"{{prpLst.sort}}\" name=\"{{prpLst.sort}}\"\r\n id=\"{{attcompo.attr+'_'+prpLst.val}}\"\r\n (click)=\"checkBoxFun(attcompo, prpLst.sort, $event.target.checked,attcompo.attr+'_'+prpLst.val)\">\r\n <span>{{prpLst.print}}</span>\r\n </label>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n <span id=\"r{{attcompo.attr}}\" class=\"button rarr\"\r\n *ngIf=\"attcompo.dataType == 'c' && attcompo.attr != 'sz'\"\r\n (click)=\"rightScroll(attcompo.attr+''+attcompo.dataType)\"><i\r\n style=\"font-size: 16px;color: #3b5998;\" class=\"fa fa-chevron-right\"\r\n aria-hidden=\"true\"></i></span>\r\n <div *ngIf=\"attcompo.attr == 'sz'\"\r\n [ngStyle]=\"{'margin-top' : attcompo.attr == 'sz' ? '-20px' : '0'}\">\r\n\r\n\r\n <!-- <ng-select placeholder=\"Select Sizes\" id=\"{{attcompo.attr}}\" [options]=\"attcompo.prpList\"\r\n [(ngModel)]=\"szprp\" name=\"{{attcompo.attr}}\" [multiple]=\"true\"\r\n (deselected)=\"multiselect(attcompo,szprp)\" (selected)=\"multiselect(attcompo,szprp)\"\r\n [allowClear]=\"true\">\r\n <ng-template #optionTemplate let-option=\"option\">\r\n <div class=\"famfamfam-flags {{option?.value.toLowerCase()}}\"></div>\r\n {{option?.label}}\r\n </ng-template>\r\n </ng-select> -->\r\n\r\n\r\n <angular2-multiselect [data]=\"attcompo.prpList\" [(ngModel)]=\"szprp\"\r\n [settings]=\"dropdownSettings\" (onSelect)=\"multiselect(attcompo,szprp)\"\r\n (onDeSelect)=\"multiselect(attcompo,szprp)\" (onSelectAll)=\"multiselect(attcompo,szprp)\"\r\n (onDeSelectAll)=\"deselect(attcompo,szprp)\">\r\n </angular2-multiselect>\r\n\r\n\r\n\r\n\r\n\r\n\r\n </div>\r\n <div style=\"overflow-x: hidden;\" *ngIf=\"attcompo.dataType == 'n'\">\r\n <div class=\"col-md-6\">\r\n <input type=\"number\" class=\"form-control form-control-sm\" id=\"{{attcompo.attr+''+0}}\"\r\n name=\"{{attcompo.attr}}\" (change)=\"additional(attcompo,$event,0, 'cwrtm')\"\r\n placeholder=\"From\">\r\n </div>\r\n <div class=\"col-md-6\" style=\"margin: 0;\">\r\n <input type=\"number\" class=\"form-control form-control-sm\" id=\"{{attcompo.attr+1}}\"\r\n name=\"{{attcompo.attr}}\" (change)=\"additional(attcompo,$event,1, 'cwrtm')\"\r\n placeholder=\"To\">\r\n </div>\r\n <!-- <span *ngIf=\"attcompo.attr == 'crtwt'\" class=\"addbtn\" (click)=\"addCwrt();\"><i [ngClass]=\"tg == true ? 'fa fa-minus' : 'fa fa-plus'\"\r\n aria-hidden=\"true\"></i></span>\r\n <div *ngIf=\"attcompo.attr == 'crtwt' && tg\">\r\n <ul class=\"additionalDiv\">\r\n <li *ngFor=\"let wtg of wtgArry;let i = index\">\r\n {{i+1}}\r\n <input type=\"text\" (change)=\"additional(wtg, $event, 0, 'cwrtc')\" style=\"border-radius: 2px;border: 1px solid #c9c9c9;height: 25px;\">\r\n &nbsp;&nbsp;&nbsp; <input type=\"text\" (change)=\"additional(wtg, $event, 1,'cwrtc')\"\r\n style=\"border-radius: 2px;border: 1px solid #c9c9c9;height: 25px;\">\r\n </li>\r\n </ul>\r\n </div> -->\r\n </div>\r\n <div *ngIf=\"attcompo.dataType == 't'\">\r\n <div>\r\n\r\n <textarea class=\"form-control form-control-sm\" id=\"{{attcompo.attr+''+0}}\"\r\n name=\"{{attcompo.attr}}\" (change)=\"singleVal(attcompo,$event.target.value, 't')\"\r\n cols=\"50\" rows=\"3\"></textarea>\r\n\r\n <!-- <input type=\"text\" id=\"{{attcompo.attr+''+0}}\" style=\"width:20%\" name=\"{{attcompo.attr}}\"\r\n (change)=\"singleVal(attcompo,$event.target.value, 't')\" class=\"form-control form-control-sm\"> -->\r\n </div>\r\n </div>\r\n\r\n\r\n <!-- <div *ngIf=\"attcompo.dataType == 'd'\">\r\n <div>\r\n <input type=\"date\" id=\"{{attcompo.attr+''+0}}\" name=\"{{attcompo.attr}}\" (blur)=\"singleVal(attcompo,$event.target.value, 0)\"\r\n class=\"form-control form-control-sm\">\r\n </div>\r\n </div> -->\r\n\r\n\r\n <div *ngIf=\"attcompo.dataType == 'd'\">\r\n <div class=\"form-row\">\r\n <div class=\"form-group col-md-6\">\r\n <input type=\"date\" #todte id=\"{{attcompo.attr+''+0}}\" name=\"{{attcompo.attr}}\"\r\n placeholder=\"From\" class=\"form-control form-control-sm\">\r\n </div>\r\n <div class=\"form-group col-md-6\" style=\"margin: 0;\">\r\n <input type=\"date\" id=\"{{attcompo.attr+''+1}}\" name=\"{{attcompo.attr}}\"\r\n (blur)=\"onDateChange(attcompo,$event.target.value,1)\"\r\n class=\"form-control form-control-sm\" placeholder=\"To\">\r\n </div>\r\n </div>\r\n </div>\r\n\r\n\r\n </div>\r\n <div *ngIf=\"(i+1)%3==0\" style=\"clear:both\"></div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n\r\n \r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"pagefooter\">\r\n <div class=\"col-md-6\">\r\n </div>\r\n <div class=\"col-md-6\">\r\n <form class=\"form-inline\">\r\n <div class=\"pull-right\">\r\n <span class=\"schCount\" *ngIf=\"count > '0'\">Count : {{count}}</span>\r\n <select class=\"form-control\" name=\"viewGrp\" [(ngModel)]=\"viewGrp\">\r\n <option>Select Group</option>\r\n <option *ngFor=\"let group of groups\" [ngValue]=\"group\">{{group.name}}</option>\r\n </select> &nbsp;\r\n <!-- <select class=\"form-control\" name=\"viewFormate\" [(ngModel)]=\"viewFormate\">\r\n <option>Select </option>\r\n <option *ngFor=\"let view of viewOptions\" value=\"{{view?.form_field}}\">{{view?.form_field_title}}\r\n </option>\r\n </select> &nbsp; -->\r\n <!-- <a class=\"btn btn-success\" (click)=\"viewResult();\" target=\"_blank\">Submit</a> -->\r\n <!-- [(ngModel)]=\"viewFormate\" -->\r\n <ng-container *ngFor=\"let view of viewOptions\">\r\n <a class=\"btn btn-success\" (click)=\"viewResult(view.form_field);\" target=\"_blank\"\r\n style=\"margin-right: 15px;\">{{view?.form_field_title}}</a>\r\n </ng-container>\r\n\r\n\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>", styles: [".ulclass{padding:0;list-style:none;display:inline-block;margin:0}.ulclass li{display:inline-block;margin:0 5px}.ulclass li label{vertical-align:middle}.pagefooter{position:fixed;bottom:0;width:100%;text-align:right;padding:10px 10px 10px 0;background:#1b1e24;z-index:99;left:0}.nav-tabs>li>a{padding:0 10px;border-top:2px solid transparent;border-bottom:2px solid transparent;font-size:12px}.nav-tabs>li.active>a{border-top:2px solid transparent;border-bottom:2px solid #3b5998}.schcrateria{margin:10px 0;height:calc(100vh - 295px);overflow:auto}.grpheader{padding:5px;background:#3b5998;color:#fff;margin:2px 0}.grpheader h6{color:#fff;margin:0}.larr{position:absolute;left:0;top:50%;transform:translateY(-50%);display:none;padding:5px;cursor:pointer}.rarr{position:absolute;right:0;top:50%;transform:translateY(-50%);display:none;padding:5px;cursor:pointer}.periodicsch{display:inline-block;margin:5px 10px 0}.periodicdate{margin-bottom:5px}.periodicdate input[type=date]{width:145px;display:inline-block}.schCount{color:#fff;margin-right:25px;font-weight:700;font-size:14px}\n"], components: [{ type: i6.SelectComponent, selector: "ng-select", inputs: ["options", "allowClear", "disabled", "multiple", "noFilter", "notFoundMsg", "placeholder", "filterPlaceholder", "label", "highlightColor", "highlightTextColor"], outputs: ["opened", "closed", "selected", "deselected", "focus", "blur", "noOptionsFound", "filterInputChanged"] }, { type: i7.AngularMultiSelect, selector: "angular2-multiselect", inputs: ["settings", "data", "loading"], outputs: ["onSelect", "onDeSelect", "onSelectAll", "onDeSelectAll", "onOpen", "onClose", "onScrollToEnd", "onFilterSelectAll", "onFilterDeSelectAll", "onAddFilterNewItem", "onGroupSelect", "onGroupDeSelect"] }], directives: [{ type: i8.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i8.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i8.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i9.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i8.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { type: i8.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i8.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i8.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { type: i8.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { type: i9.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }], pipes: { "date": i9.DatePipe } });
1079
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: AnalysisSearchComponent, decorators: [{
1080
+ type: Component,
1081
+ args: [{ selector: 'app-analysis-search', template: "<div class=\"mt\">\r\n <div class=\"panel panel-default\">\r\n <div class=\"panel-heading\">\r\n <h3 class=\"panel-title\">Analysis Search\r\n <span class=\"f-12\">({{cs.cDate | date:'medium'}})</span>\r\n </h3>\r\n </div>\r\n </div>\r\n <div class=\"content-frame\">\r\n <div class=\"content-frame-body\" style=\"margin-left:0;\">\r\n <div class=\"panel panel-default\">\r\n <div class=\"panel-body\">\r\n <div class=\"infoSec\">\r\n <div class=\"row\">\r\n <div class=\"col-sm-12\">\r\n <form class=\"form-inline\" target=\"_blank\">\r\n <label class=\"text-capitalize lblcolor\"> <strong>Status: </strong> </label>\r\n <ul class=\"ulclass\">\r\n <li *ngFor=\"let status of statusList\">\r\n <ng-container *ngIf=\"status.k != ''\">\r\n <input id=\"{{status?.k}}\" type=\"checkbox\" name=\"anaStatus\" value=\"{{status?.v}}\"\r\n (change)=\"getVal(status, $event.target.checked);\">\r\n <label for=\"{{status?.v}}\" class=\"text-capitalize\"> &nbsp;{{status?.k}}</label>\r\n </ng-container>\r\n </li>\r\n </ul>\r\n &nbsp;\r\n <label class=\"text-capitalize lblcolor\"> <strong>Employee: </strong> </label>\r\n &nbsp;\r\n <select class=\"form-control\" name=\"employee\" [(ngModel)]=\"empId\">\r\n <option>Select </option>\r\n <option *ngFor=\"let employee of employees\" value=\"{{employee?.k}}\">{{employee?.v}}\r\n </option>\r\n </select>\r\n &nbsp;\r\n <label class=\"text-capitalize lblcolor\"> <strong>Buyer: </strong> </label>\r\n &nbsp;\r\n <div style=\"width:200px;display: inline-block;\">\r\n <ng-select style=\"z-index: 5;\" placeholder=\"Select Buyers\" [allowClear]=\"true\" [options]=\"buyers\"\r\n [(ngModel)]=\"selectedSugg\" name=\"buyer\" (filterInputChanged)=\"getBuyers($event)\"\r\n (selected)=\"onselect(selectedSugg)\">\r\n </ng-select>\r\n </div>\r\n &nbsp;\r\n <label class=\"text-capitalize lblcolor\" *ngIf=\"showvender\"> <strong>Vender: </strong> </label>\r\n &nbsp;\r\n <div style=\"width:200px;display: inline-block;\" *ngIf=\"showvender\">\r\n <ng-select style=\"z-index: 5;\" placeholder=\"Select Vender\" [allowClear]=\"true\" [options]=\"venderList\"\r\n [(ngModel)]=\"vender\" name=\"vender\" (filterInputChanged)=\"getVender($event)\"\r\n >\r\n </ng-select>\r\n </div>\r\n <!-- (selected)=\"getTerms(selectedSugg)\" -->\r\n </form>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <span> <strong> Period: </strong> </span>\r\n <div style=\"width: 115px;display: inline-block;\">\r\n <!-- <input type=\"number\" class=\"form-control\" value=\"1\" [(ngModel)]=\"period\" /> -->\r\n <select class=\"form-control\" [(ngModel)]=\"period\" (change)=\"onPeriodChange(period)\">\r\n <option>Select </option>\r\n <option *ngFor=\"let bi of biPeriodList\" value=\"{{bi?.k}}\">{{bi?.v}}\r\n </option>\r\n </select>\r\n </div>\r\n <div class=\"periodicsch\">\r\n <div class=\"periodicdate\">\r\n <strong>P1</strong>\r\n From <input type=\"date\" class=\"form-control\" id=\"pFrom\"\r\n (blur)=\"addDate($event.target.value,0,'p1');\">\r\n To <input type=\"date\" class=\"form-control\" id=\"pTo\" (blur)=\"addDate($event.target.value,1,'p1');\">\r\n &nbsp;&nbsp;\r\n\r\n <!-- <strong>P2</strong>\r\n From <input type=\"date\" class=\"form-control\" (change)=\"addDate($event.target.value,0,'p2');\">\r\n To <input type=\"date\" class=\"form-control\" (change)=\"addDate($event.target.value,1,'p2');\"> -->\r\n </div>\r\n\r\n <!-- <div class=\"periodicdate\">\r\n <strong>P3</strong>\r\n From <input type=\"date\" class=\"form-control\" (change)=\"addDate($event.target.value,0,'p3');\">\r\n To <input type=\"date\" class=\"form-control\" (change)=\"addDate($event.target.value,1, 'p3');\">\r\n &nbsp;&nbsp;\r\n <strong>P4</strong>\r\n From <input type=\"date\" class=\"form-control\" (change)=\"addDate($event.target.value,0,'p4');\">\r\n To <input type=\"date\" class=\"form-control\" (change)=\"addDate($event.target.value,1,'p4');\">\r\n </div> -->\r\n </div>\r\n <div class=\"periodicsch\">\r\n <strong>Sale Days</strong>\r\n <select class=\"form-control\" id=\"salePeriod\" [(ngModel)]=\"salePeriod\"\r\n (change)=onChangeSalePeriod(salePeriod)>\r\n <option *ngFor=\"let days of bi_sale_dys\" value=\"{{days.k}}\">{{days.v}}</option>\r\n </select>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"searchsec\">\r\n <div class=\"tabssec\">\r\n <ul class=\"nav nav-tabs\" style=\"margin: 10px 0;\" role=\"tablist\">\r\n <li role=\"presentation\" *ngFor=\"let attrStructure of attrStructureDtl;\"\r\n (click)=\"cs.scrollToDiv(attrStructure.grp)\"><a href=\"#{{attrStructure.grp}}\" aria-controls=\"home\"\r\n role=\"tab\" data-toggle=\"tab\">{{attrStructure.grp}}</a></li>\r\n \r\n </ul>\r\n </div>\r\n <div class=\"schcrateria\">\r\n <div style=\"margin-bottom: 10px;\" id=\"{{attrStructure.grp}}\"\r\n *ngFor=\"let attrStructure of attrStructureDtl;\">\r\n <div class=\"grpheader\">\r\n <h6>{{attrStructure.grp}}</h6>\r\n </div>\r\n <div class=\"row\">\r\n <ng-container *ngFor=\"let attcompo of attrStructure.component;let i = index\">\r\n\r\n <div id=\"{{attrStructure.grp}}\">\r\n <label class=\"control-label headers col-md-1 text-right\" *ngIf=\"attcompo.attr == 'ct'\"\r\n style=\"margin-top: 10px;\">CPS</label>\r\n <div class=\"col-md-11\" *ngIf=\"attcompo.attr == 'ct'\"\r\n style=\"overflow-x: auto;white-space: nowrap;margin-top: 10px;\">\r\n <div class=\"ck-button\">\r\n <div class=\"outChkCls\">\r\n <label style=\"margin-bottom: 0;\">\r\n <input type=\"checkbox\" id=\"one\" class=\"prntchk\" [disabled]=\"one\"\r\n (click)=\"selectEle(0 , $event.target.checked);\">\r\n <span>3EX</span>\r\n </label>\r\n </div>\r\n </div>\r\n <!-- <div class=\"ck-button\">\r\n <div class=\"outChkCls\">\r\n <label style=\"margin-bottom: 0;\">\r\n <input type=\"checkbox\" id=\"two\" class=\"prntchk\" [disabled]=\"two\" (click)=\"selectEle(1 , $event.target.checked);\">\r\n <span>2EX</span>\r\n </label>\r\n </div>\r\n </div> -->\r\n <div class=\"ck-button\">\r\n <div class=\"outChkCls\">\r\n <label style=\"margin-bottom: 0;\">\r\n <input type=\"checkbox\" id=\"thvgup\" class=\"prntchk\" [disabled]=\"thvgup\"\r\n (click)=\"selectEle(3 , $event.target.checked);\">\r\n <span><b> &uarr;</b> 3VG</span>\r\n </label>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n\r\n <div class=\"col-md-1\">\r\n <label style=\"margin-top:15px;\"\r\n [ngStyle]=\"{'margin-top':((attcompo.dataType == 't' && attcompo.attr=='vnm') || attcompo.dataType == 'd' || attcompo.dataType == 'n' )?'30px':'15px'}\"\r\n class=\"pull-right\">{{attcompo.print}}</label>\r\n </div>\r\n <div class=\"col-md-{{attcompo.displayType}}\"\r\n [ngStyle]=\"{'overflow-x' : attcompo.attr == 'sz' ? 'unset': 'auto'}\"\r\n style=\"margin-top: 10px;white-space: nowrap;\">\r\n <!-- <span id=\"l{{attcompo.attr}}\" class=\"button larr\" *ngIf=\"attcompo.dataType == 'c' && attcompo.attr != 'sz'\"\r\n (click)=\"leftScroll(attcompo.attr+''+attcompo.dataType)\"><i style=\"font-size: 16px;color: #3b5998;\"\r\n class=\"fa fa-chevron-left\" aria-hidden=\"true\"></i></span>\r\n <div style=\"overflow-x: auto;\" class=\"{{attcompo.attr+''+attcompo.dataType}}\" id=\"scr_{{attcompo.displayType+''+attcompo.attr+''+attcompo.dataType}}\">\r\n <ng-container *ngFor=\"let prpLst of attcompo.prpList;let i =index\">\r\n <div style=\"display: inline-block;\">\r\n <div class=\"ck-button\" *ngIf=\"attcompo.dataType == 'c' && attcompo.attr != 'sz'\" id=\"{{attcompo.attr+'_'+prpLst.sort}}\">\r\n <div class=\"outChkCls\">\r\n <label style=\"margin-bottom: 0;\">\r\n <input type=\"checkbox\" value=\"{{prpLst.sort}}\" name=\"{{prpLst.sort}}\" id=\"{{attcompo.attr+'_'+prpLst.val}}\"\r\n (click)=\"checkBoxFun(attcompo, prpLst.sort, $event.target.checked,attcompo.attr+'_'+prpLst.val)\">\r\n <span>{{prpLst.print}}</span>\r\n </label>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n <span id=\"r{{attcompo.attr}}\" class=\"button rarr\" *ngIf=\"attcompo.dataType == 'c' && attcompo.attr != 'sz'\"\r\n (click)=\"rightScroll(attcompo.attr+''+attcompo.dataType)\"><i style=\"font-size: 16px;color: #3b5998;\"\r\n class=\"fa fa-chevron-right\" aria-hidden=\"true\"></i></span> -->\r\n <span id=\"l{{attcompo.attr}}\" class=\"button larr\"\r\n *ngIf=\"attcompo.dataType == 'c' && attcompo.attr != 'sz'\"\r\n (click)=\"leftScroll(attcompo.attr+''+attcompo.dataType)\"><i\r\n style=\"font-size: 16px;color: #3b5998;\" class=\"fa fa-chevron-left\"\r\n aria-hidden=\"true\"></i></span>\r\n <div style=\"overflow-x: hidden;\" class=\"{{attcompo.attr+''+attcompo.dataType}}\"\r\n id=\"scr_{{attcompo.displayType+''+attcompo.attr+''+attcompo.dataType}}\">\r\n <div style=\"display: inline-block;\">\r\n <div class=\"ck-button\" *ngIf=\"attcompo.dataType == 'c' && attcompo.attr != 'sz'\">\r\n <div class=\"outChkCls\">\r\n <label style=\"margin-bottom: 0;\">\r\n <input type=\"checkbox\" [checked]=\"chk\" id=\"all{{attcompo.attr}}\"\r\n (click)=\"selectAll(attcompo, $event);\">\r\n <span>All</span>\r\n </label>\r\n </div>\r\n </div>\r\n </div>\r\n <ng-container *ngFor=\"let prpLst of attcompo.prpList;let i =index\">\r\n <div style=\"display: inline-block;\">\r\n <div class=\"ck-button\" *ngIf=\"attcompo.dataType == 'c' && attcompo.attr != 'sz'\"\r\n id=\"{{attcompo.attr+'_'+prpLst.sort}}\">\r\n <div class=\"outChkCls\">\r\n <label style=\"margin-bottom: 0;\">\r\n <input type=\"checkbox\" value=\"{{prpLst.sort}}\" name=\"{{prpLst.sort}}\"\r\n id=\"{{attcompo.attr+'_'+prpLst.val}}\"\r\n (click)=\"checkBoxFun(attcompo, prpLst.sort, $event.target.checked,attcompo.attr+'_'+prpLst.val)\">\r\n <span>{{prpLst.print}}</span>\r\n </label>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n <span id=\"r{{attcompo.attr}}\" class=\"button rarr\"\r\n *ngIf=\"attcompo.dataType == 'c' && attcompo.attr != 'sz'\"\r\n (click)=\"rightScroll(attcompo.attr+''+attcompo.dataType)\"><i\r\n style=\"font-size: 16px;color: #3b5998;\" class=\"fa fa-chevron-right\"\r\n aria-hidden=\"true\"></i></span>\r\n <div *ngIf=\"attcompo.attr == 'sz'\"\r\n [ngStyle]=\"{'margin-top' : attcompo.attr == 'sz' ? '-20px' : '0'}\">\r\n\r\n\r\n <!-- <ng-select placeholder=\"Select Sizes\" id=\"{{attcompo.attr}}\" [options]=\"attcompo.prpList\"\r\n [(ngModel)]=\"szprp\" name=\"{{attcompo.attr}}\" [multiple]=\"true\"\r\n (deselected)=\"multiselect(attcompo,szprp)\" (selected)=\"multiselect(attcompo,szprp)\"\r\n [allowClear]=\"true\">\r\n <ng-template #optionTemplate let-option=\"option\">\r\n <div class=\"famfamfam-flags {{option?.value.toLowerCase()}}\"></div>\r\n {{option?.label}}\r\n </ng-template>\r\n </ng-select> -->\r\n\r\n\r\n <angular2-multiselect [data]=\"attcompo.prpList\" [(ngModel)]=\"szprp\"\r\n [settings]=\"dropdownSettings\" (onSelect)=\"multiselect(attcompo,szprp)\"\r\n (onDeSelect)=\"multiselect(attcompo,szprp)\" (onSelectAll)=\"multiselect(attcompo,szprp)\"\r\n (onDeSelectAll)=\"deselect(attcompo,szprp)\">\r\n </angular2-multiselect>\r\n\r\n\r\n\r\n\r\n\r\n\r\n </div>\r\n <div style=\"overflow-x: hidden;\" *ngIf=\"attcompo.dataType == 'n'\">\r\n <div class=\"col-md-6\">\r\n <input type=\"number\" class=\"form-control form-control-sm\" id=\"{{attcompo.attr+''+0}}\"\r\n name=\"{{attcompo.attr}}\" (change)=\"additional(attcompo,$event,0, 'cwrtm')\"\r\n placeholder=\"From\">\r\n </div>\r\n <div class=\"col-md-6\" style=\"margin: 0;\">\r\n <input type=\"number\" class=\"form-control form-control-sm\" id=\"{{attcompo.attr+1}}\"\r\n name=\"{{attcompo.attr}}\" (change)=\"additional(attcompo,$event,1, 'cwrtm')\"\r\n placeholder=\"To\">\r\n </div>\r\n <!-- <span *ngIf=\"attcompo.attr == 'crtwt'\" class=\"addbtn\" (click)=\"addCwrt();\"><i [ngClass]=\"tg == true ? 'fa fa-minus' : 'fa fa-plus'\"\r\n aria-hidden=\"true\"></i></span>\r\n <div *ngIf=\"attcompo.attr == 'crtwt' && tg\">\r\n <ul class=\"additionalDiv\">\r\n <li *ngFor=\"let wtg of wtgArry;let i = index\">\r\n {{i+1}}\r\n <input type=\"text\" (change)=\"additional(wtg, $event, 0, 'cwrtc')\" style=\"border-radius: 2px;border: 1px solid #c9c9c9;height: 25px;\">\r\n &nbsp;&nbsp;&nbsp; <input type=\"text\" (change)=\"additional(wtg, $event, 1,'cwrtc')\"\r\n style=\"border-radius: 2px;border: 1px solid #c9c9c9;height: 25px;\">\r\n </li>\r\n </ul>\r\n </div> -->\r\n </div>\r\n <div *ngIf=\"attcompo.dataType == 't'\">\r\n <div>\r\n\r\n <textarea class=\"form-control form-control-sm\" id=\"{{attcompo.attr+''+0}}\"\r\n name=\"{{attcompo.attr}}\" (change)=\"singleVal(attcompo,$event.target.value, 't')\"\r\n cols=\"50\" rows=\"3\"></textarea>\r\n\r\n <!-- <input type=\"text\" id=\"{{attcompo.attr+''+0}}\" style=\"width:20%\" name=\"{{attcompo.attr}}\"\r\n (change)=\"singleVal(attcompo,$event.target.value, 't')\" class=\"form-control form-control-sm\"> -->\r\n </div>\r\n </div>\r\n\r\n\r\n <!-- <div *ngIf=\"attcompo.dataType == 'd'\">\r\n <div>\r\n <input type=\"date\" id=\"{{attcompo.attr+''+0}}\" name=\"{{attcompo.attr}}\" (blur)=\"singleVal(attcompo,$event.target.value, 0)\"\r\n class=\"form-control form-control-sm\">\r\n </div>\r\n </div> -->\r\n\r\n\r\n <div *ngIf=\"attcompo.dataType == 'd'\">\r\n <div class=\"form-row\">\r\n <div class=\"form-group col-md-6\">\r\n <input type=\"date\" #todte id=\"{{attcompo.attr+''+0}}\" name=\"{{attcompo.attr}}\"\r\n placeholder=\"From\" class=\"form-control form-control-sm\">\r\n </div>\r\n <div class=\"form-group col-md-6\" style=\"margin: 0;\">\r\n <input type=\"date\" id=\"{{attcompo.attr+''+1}}\" name=\"{{attcompo.attr}}\"\r\n (blur)=\"onDateChange(attcompo,$event.target.value,1)\"\r\n class=\"form-control form-control-sm\" placeholder=\"To\">\r\n </div>\r\n </div>\r\n </div>\r\n\r\n\r\n </div>\r\n <div *ngIf=\"(i+1)%3==0\" style=\"clear:both\"></div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n\r\n \r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"pagefooter\">\r\n <div class=\"col-md-6\">\r\n </div>\r\n <div class=\"col-md-6\">\r\n <form class=\"form-inline\">\r\n <div class=\"pull-right\">\r\n <span class=\"schCount\" *ngIf=\"count > '0'\">Count : {{count}}</span>\r\n <select class=\"form-control\" name=\"viewGrp\" [(ngModel)]=\"viewGrp\">\r\n <option>Select Group</option>\r\n <option *ngFor=\"let group of groups\" [ngValue]=\"group\">{{group.name}}</option>\r\n </select> &nbsp;\r\n <!-- <select class=\"form-control\" name=\"viewFormate\" [(ngModel)]=\"viewFormate\">\r\n <option>Select </option>\r\n <option *ngFor=\"let view of viewOptions\" value=\"{{view?.form_field}}\">{{view?.form_field_title}}\r\n </option>\r\n </select> &nbsp; -->\r\n <!-- <a class=\"btn btn-success\" (click)=\"viewResult();\" target=\"_blank\">Submit</a> -->\r\n <!-- [(ngModel)]=\"viewFormate\" -->\r\n <ng-container *ngFor=\"let view of viewOptions\">\r\n <a class=\"btn btn-success\" (click)=\"viewResult(view.form_field);\" target=\"_blank\"\r\n style=\"margin-right: 15px;\">{{view?.form_field_title}}</a>\r\n </ng-container>\r\n\r\n\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>", styles: [".ulclass{padding:0;list-style:none;display:inline-block;margin:0}.ulclass li{display:inline-block;margin:0 5px}.ulclass li label{vertical-align:middle}.pagefooter{position:fixed;bottom:0;width:100%;text-align:right;padding:10px 10px 10px 0;background:#1b1e24;z-index:99;left:0}.nav-tabs>li>a{padding:0 10px;border-top:2px solid transparent;border-bottom:2px solid transparent;font-size:12px}.nav-tabs>li.active>a{border-top:2px solid transparent;border-bottom:2px solid #3b5998}.schcrateria{margin:10px 0;height:calc(100vh - 295px);overflow:auto}.grpheader{padding:5px;background:#3b5998;color:#fff;margin:2px 0}.grpheader h6{color:#fff;margin:0}.larr{position:absolute;left:0;top:50%;transform:translateY(-50%);display:none;padding:5px;cursor:pointer}.rarr{position:absolute;right:0;top:50%;transform:translateY(-50%);display:none;padding:5px;cursor:pointer}.periodicsch{display:inline-block;margin:5px 10px 0}.periodicdate{margin-bottom:5px}.periodicdate input[type=date]{width:145px;display:inline-block}.schCount{color:#fff;margin-right:25px;font-weight:700;font-size:14px}\n"] }]
1082
+ }], ctorParameters: function () { return [{ type: i1.CommanServiceService }, { type: i2.BiService }, { type: i3.NgxSpinnerService }, { type: i4.ToastrService }, { type: i5.Router }, { type: i5.ActivatedRoute }]; } });
1083
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5hbHlzaXMtc2VhcmNoLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2V6bGliL3NyYy9saWIvYW5hbHlzaXMtc2VhcmNoL2FuYWx5c2lzLXNlYXJjaC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lemxpYi9zcmMvbGliL2FuYWx5c2lzLXNlYXJjaC9hbmFseXNpcy1zZWFyY2guY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUMzQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDaEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQ2hGLE9BQU8sRUFBRSxTQUFTLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDbEQsT0FBTyxFQUFFLE1BQU0sRUFBRSxjQUFjLEVBQVMsTUFBTSxpQkFBaUIsQ0FBQzs7Ozs7Ozs7Ozs7QUFRaEUsTUFBTSxPQUFPLHVCQUF1QjtJQUVsQyxZQUNTLEVBQXdCLEVBQ3ZCLEdBQWMsRUFDZCxlQUFrQyxFQUNsQyxNQUFxQixFQUNyQixNQUFjLEVBQ2QsS0FBcUI7UUFMdEIsT0FBRSxHQUFGLEVBQUUsQ0FBc0I7UUFDdkIsUUFBRyxHQUFILEdBQUcsQ0FBVztRQUNkLG9CQUFlLEdBQWYsZUFBZSxDQUFtQjtRQUNsQyxXQUFNLEdBQU4sTUFBTSxDQUFlO1FBQ3JCLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxVQUFLLEdBQUwsS0FBSyxDQUFnQjtRQUkvQixnQkFBVyxHQUFHLEVBQUUsQ0FBQztRQUVqQixlQUFVLEdBQUcsRUFBRSxDQUFDO1FBQ2hCLFlBQU8sR0FBRyxFQUFFLENBQUM7UUFDYixpQkFBWSxHQUFHLEVB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RCxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUUvQixJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztRQUNoQyxDQUFDLENBQUMsQ0FBQztJQUVILENBQUM7OzBKQXByQ1UsdUJBQXVCOzhJQUF2Qix1QkFBdUIsMkRDYnBDLHFoc0JBaVdROzJGRHBWSyx1QkFBdUI7a0JBTG5DLFNBQVM7K0JBQ0UscUJBQXFCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVG9hc3RyU2VydmljZSB9IGZyb20gJ25neC10b2FzdHInO1xyXG5pbXBvcnQgeyBOZ3hTcGlubmVyU2VydmljZSB9IGZyb20gXCJuZ3gtc3Bpbm5lclwiO1xyXG5pbXBvcnQgeyBCaVNlcnZpY2UgfSBmcm9tICcuLy4uL2JpLXNlcnZpY2UvYmkuc2VydmljZSc7XHJcbmltcG9ydCB7IENvbW1hblNlcnZpY2VTZXJ2aWNlIH0gZnJvbSAnLi4vY29tbWFuLXNlcnZpY2UvY29tbWFuLXNlcnZpY2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFJvdXRlciwgQWN0aXZhdGVkUm91dGUgLFBhcmFtc30gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuXHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2FwcC1hbmFseXNpcy1zZWFyY2gnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9hbmFseXNpcy1zZWFyY2guY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2FuYWx5c2lzLXNlYXJjaC5jb21wb25lbnQuY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIEFuYWx5c2lzU2VhcmNoQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwdWJsaWMgY3M6IENvbW1hblNlcnZpY2VTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBiaXM6IEJpU2VydmljZSxcclxuICAgIHByaXZhdGUgX3NwaW5uZXJTZXJ2aWNlOiBOZ3hTcGlubmVyU2VydmljZSAsXHJcbiAgICBwcml2YXRlIHRvYXN0cjogVG9hc3RyU2VydmljZSxcclxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXHJcbiAgICBwcml2YXRlIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZVxyXG4gICkgeyB9XHJcblxyXG4gIGF0dHJTdHJ1Y3R1cmVEdGw7XHJcbiAgYmlfc2FsZV9keXMgPSBbXTtcclxuICBzYWxlUGVyaW9kO1xyXG4gIHN0YXR1c0xpc3QgPSBbXTtcclxuICBzaXplUHJwID0gW107XHJcbiAgYmlQZXJpb2RMaXN0ID0gW107XHJcbiAgdmlld09wdGlvbnM7XHJcbiAgZW1wbG95ZWVzO1xyXG4gIGVtcElkO1xyXG4gIGJ1eWVycztcclxuICBzZWxlY3RlZFN1Z2c7XHJcbiAgaGVhZGVyO1xyXG4gIHNjaElkO1xyXG4gIGNvdW50O1xyXG4gIGRlZmF1bHRTdGF0dXNMaXN0O1xyXG4gIHNlbGVjdGVkU3RhdHVzID0gW107XHJcbiAgLy8gYW5hQWxsR3JwU3R0ID0gWydNYXJrZXRpbmcnLCAnU29sZCddO1xyXG4gIGFuYUFsbEdycFN0dCA9IFtdO1xyXG4gIGNoaztcclxuXHJcblxyXG4gIG5ld0Fyck9iajtcclxuICBhdHRyO1xyXG4gIGF0dHJUeXBlO1xyXG4gIGF0dHJWYWw7XHJcbiAgYXR0cnQ7XHJcbiAgYXR0clR5cGV0XHJcbiAgYXR0clZhbHQ7XHJcbiAgY2FsbEZyb20gPSAnJztcclxuICB0cm06IGFueSA9IFwiXCI7XHJcbiAgc2VsZWN0ZWRDcml0ZXJpYSA9IFtdO1xyXG4gIHNlYXJjaElkOiBhbnkgPSBbXTtcclxuICBwZXJpb2Q6IGFueSA9IDE7XHJcbiAgcDE6IGFueSA9IG5ldyBBcnJheSgyKTtcclxuICBwMiA9IG5ldyBBcnJheSgyKTtcclxuICBwMyA9IG5ldyBBcnJheSgyKTtcclxuICBwNCA9IG5ldyBBcnJheSgyKTtcclxuICB2aWV3Rm9ybWF0ZSA9ICdncmlkJztcclxuICBncm91cHMgPSBbXTtcclxuICB2aWV3R3JwO1xyXG4gIC8vIHAxZGF0ZSA9IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKS5zdWJzdHIoMCwgMTApO1xyXG4gIC8vIHAyZGF0ZSA9IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKS5zdWJzdHIoMCwgMTApO1xyXG4gIGNudCA9IDE7XHJcbiAgbW9kZnl0eHQ7XHJcbiAgbW9kaWZ5O1xyXG4gIDtcclxuICBtb2RpZnlTY2g6IGFueSA9IFtdOyBtb2RmeXN0YXRcclxuICB0ZXJtcyA9IFtdO1xyXG5cclxuICBmb3JtbmFtZTtcclxuICBkcm9wZG93bkxpc3QgPSBbXTtcclxuICBzZWxlY3RlZEl0ZW1zID0gW107XHJcbiAgZHJvcGRvd25TZXR0aW5ncyA9IHt9O1xyXG4gIHZlbmRlckxpc3Q9W107XHJcbiAgdmVuZGVyO1xyXG4gIHN6cHJwO1xyXG4gIGF0dHJpYnV0ZTtcclxuICBtb2R1bGVuYW1lO1xyXG4gIGNVcmw7XHJcbiAgc2hvd3ZlbmRlcj1mYWxzZTtcclxuICBvbkl0ZW1TZWxlY3QoaXRlbTogYW55KSB7XHJcbiAgICBjb25zb2xlLmxvZyhpdGVtKTtcclxuICAgIGNvbnNvbGUubG9nKHRoaXMuc2VsZWN0ZWRJdGVtcyk7XHJcbiAgfVxyXG4gIE9uSXRlbURlU2VsZWN0KGl0ZW06IGFueSkge1xyXG4gICAgY29uc29sZS5sb2coaXRlbSk7XHJcbiAgICBjb25zb2xlLmxvZyh0aGlzLnNlbGVjdGVkSXRlbXMpO1xyXG4gIH1cclxuICBvblNlbGVjdEFsbChpdGVtczogYW55KSB7XHJcbiAgICBjb25zb2xlLmxvZyhpdGVtcyk7XHJcbiAgfVxyXG4gIG9uRGVTZWxlY3RBbGwoaXRlbXM6IGFueSkge1xyXG4gICAgY29uc29sZS5sb2coaXRlbXMpO1xyXG4gIH1cclxuICBsb2FkQW5hbHlzaXNTZWFyY2hQYWdlKCkge1xyXG4gICB0aGlzLmZvcm1uYW1lPXRoaXMucm91dGUuc25hcHNob3QucGFyYW1zWydmcm1ubWUnXTtcclxuICAgIHRoaXMuc2hvd3ZlbmRlcj1mYWxzZTtcclxuICAgIHRoaXMuc2VhcmNoSWQ9W107XHJcbiAgICBsZXQgcmVxT2JqID0ge307XHJcbiAgICByZXFPYmpbJ2Zvcm1ObWUnXSA9IHRoaXMucm91dGUuc25hcHNob3QucGFyYW1zWydmcm1ubWUnXTtcclxuICAgIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KHJlcU9iaikpO1xyXG4gICAgdGhpcy5iaXMuZGF0YShyZXFPYmosICdsb2FkJywgJ21hcmtldGluZy9zZWFyY2gnKVxyXG4gICAgICAuc3Vic2NyaWJlKGRhdGEgPT4ge1xyXG4gICAgICAgIHRoaXMuX3NwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgICBpZiAoZGF0YS5zdGF0dXMgPT0gJ1NVQ0NFU1MnKSB7XHJcbiAgICAgICAgICBsZXQgcmVzID0gZGF0YS5yZXN1bHQ7XHJcbiAgICAgICAgICBkZWJ1Z2dlclxyXG4gICAgICAgICAgY29uc29sZS5sb2cocmVzKTtcclxuICAgICAgICAgIHRoaXMuYmlfc2FsZV9keXMgPSByZXMuYmlfc2FsZV9keXM7XHJcbiAgICAgICAgICB0aGlzLmF0dHJTdHJ1Y3R1cmVEdGwgPSByZXMuYXR0clN0cnVjdHVyZUR0bDtcclxuICAgICAgICAgIHRoaXMuYXR0clN0cnVjdHVyZUR0bC5mb3JFYWNoKGVsZTEgPT4ge1xyXG4gICAgICAgICAgICBlbGUxLmNvbXBvbmVudC5mb3JFYWNoKGVsZTIgPT4ge1xyXG4gICAgICAgICAgICAgIGlmIChlbGUyLmF0dHIgPT0gJ3N6Jykge1xyXG4gICAgICAgICAgICAgICAgZWxlMi5wcnBMaXN0LmZvckVhY2goZWxlbWVudCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIGxldCBzdWJPYmogPSB7fTtcclxuICAgICAgICAgICAgICAgICAgLy8gc3ViT2JqWydsYWJlbCddID0gZWxlbWVudC5wcmludDtcclxuICAgICAgICAgICAgICAgICAgLy8gc3ViT2JqWyd2YWwnXSA9IGVsZW1lbnQudmFsO1xyXG4gICAgICAgICAgICAgICAgICAvLyBzdWJPYmpbJ3ZhbHVlJ10gPSBlbGVtZW50LnNvcnQ7XHJcblxyXG4gICAgICAgICAgICAgICAgICBzdWJPYmpbJ2l0ZW1OYW1lJ10gPSBlbGVtZW50LnByaW50O1xyXG4gICAgICAgICAgICAgICAgICBzdWJPYmpbJ2lkJ10gPSBlbGVtZW50LnNvcnQ7XHJcblxyXG4gICAgICAgICAgICAgICAgICB0aGlzLnNpemVQcnAucHVzaChzdWJPYmopO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICBlbGUyLnBycExpc3QgPSB0aGlzLnNpemVQcnA7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGVsZTIudmFsdWVzID0gW107XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICB0aGlzLnN0YXR1c0xpc3QgPSByZXMuc3RhdHVzTGlzdDtcclxuICAgICAgICAgIHRoaXMuZ3JvdXBzID0gcmVzLmF0dHJHcmlkRm9ybWF0O1xyXG4gICAgICAgICAgdGhpcy52aWV3R3JwID0gdGhpcy5ncm91cHNbMF07XHJcbiAgICAgICAgICB0aGlzLnZpZXdPcHRpb25zID0gcmVzLnBhZ2VEZWZpbmF0aW9uLnRybnNfYnV0dG9ucztcclxuICAgICAgICAgIGxldCB2ZW5kZXIgPSByZXMucGFnZURlZmluYXRpb24uYWRkX25ld3x8W107XHJcbiAgICAgICAgICBpZih2ZW5kZXIubGVuZ3RoPjApe1xyXG4gICAgICAgICAgICB0aGlzLnNob3d2ZW5kZXI9dHJ1ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMuZW1wbG95ZWVzID0gcmVzLmVtcGxveWVlTGlzdDtcclxuICAgICAgICAgIHRoaXMuYmlQZXJpb2RMaXN0ID0gcmVzLmJpX3BlcmlvZDtcclxuICAgICAgICAgIHRoaXMub25DaGFuZ2VTYWxlUGVyaW9kKDApO1xyXG4gICAgICAgICAgdGhpcy5zYWxlUGVyaW9kID0gXCIwXCI7XHJcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuYXR0clN0cnVjdHVyZUR0bC5sZW5ndGggIT0gbnVsbCkge1xyXG5cclxuICAgICAgICAgICAgICBsZXQgc3R0cyA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ0JJYW5hU3R0JykpO1xyXG4gICAgICAgICAgICAgIGlmIChsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnQkljYWxsJykgIT0gbnVsbCAmJiB0aGlzLmF0dHJTdHJ1Y3R1cmVEdGwubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tb2RpZnlTZWFyY2hGdW4oKTtcclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgY3J0d3QgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnQkljcnR3dCcpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGNydHd0ICE9IG51bGwgJiYgY3J0d3QgIT0gdW5kZWZpbmVkICYmIGNydHd0ICE9IFwiXCIpIHtcclxuICAgICAgICAgICAgICAgICAgbGV0IHd0ID0gSlNPTi5wYXJzZShjcnR3dClcclxuICAgICAgICAgICAgICAgICAgaWYgKHd0ICE9IG51bGwgJiYgd3QgIT0gdW5kZWZpbmVkICYmIHd0ICE9IFwiXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NydHd0MCcpIGFzIGFueSkudmFsdWUgPSB3dFswXTtcclxuICAgICAgICAgICAgICAgICAgICAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NydHd0MScpIGFzIGFueSkudmFsdWUgPSB3dFsxXTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuXHJcblxyXG4gICAgICAgICAgICAgICAgbGV0IGJ5ciA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ0JJYnlyJykpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGJ5ciAhPSBudWxsICYmIGJ5ciAhPSB1bmRlZmluZWQgJiYgYnlyICE9IFwiXCIpIHtcclxuICAgICAgICAgICAgICAgICAgbGV0IGJ1eWVyTGlzdCA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICBidXllckxpc3QucHVzaChieXIpO1xyXG4gICAgICAgICAgICAgICAgICBsZXQgaWQgPSBieXJbJ3ZhbHVlJ107XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuYnV5ZXJzID0gYnV5ZXJMaXN0O1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkU3VnZyA9IGlkOy8vSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnYnlyJykpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGxldCBlbXAgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnQkllSWQnKTtcclxuICAgICAgICAgICAgICAgIGlmIChlbXAgIT0gbnVsbCAmJiBlbXAgIT0gdW5kZWZpbmVkICYmIGVtcCAhPSBcIlwiKSB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuZW1wSWQgPSBlbXA7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBsZXQgcGZybSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdCSXBGcm9tJyk7XHJcbiAgICAgICAgICAgICAgICBpZiAocGZybSAhPSBudWxsICYmIHBmcm0gIT0gdW5kZWZpbmVkICYmIHBmcm0gIT0gXCJcIikge1xyXG4gICAgICAgICAgICAgICAgICAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3BGcm9tJykgYXMgYW55KS52YWx1ZSA9IEpTT04ucGFyc2UocGZybSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgbGV0IHB0byA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdCSXBUbycpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHB0byAhPSBudWxsICYmIHB0byAhPSB1bmRlZmluZWQgJiYgcHRvICE9IFwiXCIpIHtcclxuICAgICAgICAgICAgICAgICAgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwVG8nKSBhcyBhbnkpLnZhbHVlID0gSlNPTi5wYXJzZShwdG8pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICBcclxuXHJcblxyXG4gICAgICAgICAgICAgICAgbGV0IHNhbGVQID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ0JJc2FsZVBlcmlvZCcpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHNhbGVQICE9IG51bGwgJiYgc2FsZVAgIT0gdW5kZWZpbmVkICYmIHNhbGVQICE9IFwiXCIpIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5zYWxlUGVyaW9kID0gc2FsZVA7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgbGV0IHBlcmlvZCA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdCSVBlcmlvZCcpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHBlcmlvZCAhPSBudWxsICYmIHBlcmlvZCAhPSB1bmRlZmluZWQgJiYgcGVyaW9kICE9IFwiXCIpIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5wZXJpb2QgPSBwZXJpb2Q7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG5cclxuXHJcblxyXG4gICAgICAgICAgICAgICAgc3R0cyA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ0JJYW5hU3R0JykpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHN0dHMgIT0gbnVsbCAmJiBzdHRzICE9IHVuZGVmaW5lZCAmJiBzdHRzLmxlbmd0aCA8IDEpIHtcclxuICAgICAgICAgICAgICAgICAgc3R0cy5mb3JFYWNoKGVsZW1lbnQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICgoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZWxlbWVudCkgYXMgYW55KS5jaGVja2VkID09ICdmYWxzZScpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGVsZW1lbnQpLmNsaWNrKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGxldCBzenMgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdCSXNpemUnKSlcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgaWYgKHN6cyAhPSBudWxsICYmIHN6cyAhPSB1bmRlZmluZWQgJiYgc3pzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnN6cHJwID0gc3pzO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoc3R0cyAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgIGlmIChzdHRzLmluY2x1ZGVzKCdta3QnKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdNYXJrZXRpbmcnKS5jbGljaygpO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIGlmIChzdHRzLmluY2x1ZGVzKCdzb2xkJykpIHtcclxuICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnU29sZCcpLmNsaWNrKCk7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgaWYgKHN0dHMuaW5jbHVkZXMoJ2NzJykpIHtcclxuICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnQ29uc2lnbm1lbnQnKS5jbGljaygpO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIGlmIChzdHRzLmluY2x1ZGVzKCdhc3J0JykpIHtcclxuICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnQXNzb3J0JykuY2xpY2soKTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICBpZiAoc3R0cy5pbmNsdWRlcygnbGFiJykpIHtcclxuICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnTGFiJykuY2xpY2soKTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnTWFya2V0aW5nJykuY2xpY2soKTtcclxuICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdTb2xkJykuY2xpY2soKTtcclxuICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgIC8vIGVsc2Uge1xyXG4gICAgICAgICAgICAgIC8vICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ01hcmtldGluZycpLmNsaWNrKCk7XHJcbiAgICAgICAgICAgICAgLy8gICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnU29sZCcpLmNsaWNrKCk7XHJcblxyXG4gICAgICAgICAgICAgIC8vIH1cclxuXHJcblxyXG4gICAgICAgICAgICAgIC8vIGlmICh0aGlzLnNlbGVjdGVkU3VnZyAhPSB1bmRlZmluZWQgfHwgdGhpcy5zZWxlY3RlZFN1Z2cgIT0gbnVsbCB8fCB0aGlzLnNlbGVjdGVkU3VnZyAhPSBcIlwiKSB7XHJcbiAgICAgICAgICAgICAgLy8gICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgnQklieXInKTtcclxuICAgICAgICAgICAgICAvLyB9XHJcbiAgICAgICAgICAgICAgLy8gaWYgKHRoaXMuZW1wSWQgIT0gdW5kZWZpbmVkIHx8IHRoaXMuZW1wSWQgIT0gbnVsbCB8fCB0aGlzLmVtcElkICE9IFwiXCIpIHtcclxuICAgICAgICAgICAgICAvLyAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKCdCSWVJZCcpO1xyXG4gICAgICAgICAgICAgIC8vIH1cclxuICAgICAgICAgICAgICAvLyBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgnQkljcnR3dCcpO1xyXG5cclxuICAgICAgICAgICAgICAvLyBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgnQklzaXplJyk7XHJcblxyXG5cclxuICAgICAgICAgICAgICB0aGlzLmFkZFNjcm9sbEJhcigpO1xyXG4gICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKCdCSWNhbGwnKTtcclxuICAgICAgICAgICAgICAvLy8vLy8gIHRoaXMuY2xlYXJMb2NhbFN0b3JhZ2VzKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0sIDUwMCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuX3NwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgICAgIHRoaXMudG9hc3RyLmVycm9yKGRhdGEubWVzc2FnZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LCBlcnJvciA9PiB7XHJcbiAgICAgICAgdGhpcy5fc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgICAgIHRoaXMudG9hc3RyLmVycm9yKGVycm9yKTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBzZWxlY3RBbGwoYXR0Y29tcG9PYmosIGUpIHtcclxuICAgIGlmIChlLnRhcmdldC5jaGVja2VkID09IGZhbHNlKSB7XHJcbiAgICAgIGF0dGNvbXBvT2JqLnBycExpc3QubWFwKHZhbHVlID0+IHsgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYXR0Y29tcG9PYmouYXR0ciArICdfJyArIHZhbHVlLnZhbCkuY2xpY2soKTsgfSlcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGF0dGNvbXBvT2JqLnBycExpc3QubWFwKHZhbHVlID0+IHtcclxuICAgICAgICBpZiAoYXR0Y29tcG9PYmoudmFsdWVzLmluZGV4T2YodmFsdWUuc29ydCkgIT0gLTEpIHtcclxuICAgICAgICB9IGVsc2UgeyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChhdHRjb21wb09iai5hdHRyICsgJ18nICsgdmFsdWUudmFsKS5jbGljaygpOyB9XHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhZGRTY3JvbGxCYXIoKSB7XHJcbiAgICBsZXQgZGl2cyA9IChkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdbaWRePVwic2NyX1wiXScpIGFzIGFueSk7XHJcbiAgICBkaXZzLmZvckVhY2goKGVsZW1lbnQsIGluZGV4KSA9PiB7XHJcbiAgICAgIGxldCBvZmZzZXR3aSA9IDA7XHJcbiAgICAgIGxldCBzY3JvbGx3aSA9IDA7XHJcbiAgICAgIGxldCBkaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChlbGVtZW50LmlkKTtcclxuICAgICAgb2Zmc2V0d2kgPSBkaXYub2Zmc2V0V2lkdGg7XHJcbiAgICAgIHNjcm9sbHdpID0gZGl2LnNjcm9sbFdpZHRoO1xyXG4gICAgICBpZiAob2Zmc2V0d2kgIT0gc2Nyb2xsd2kpIHtcclxuICAgICAgICBsZXQgcGVsZSA9IGRpdi5wYXJlbnRFbGVtZW50O1xyXG4gICAgICAgIGxldCBmY2hpbGQ6IGFueSA9IHBlbGUuZmlyc3RFbGVtZW50Q2hpbGQ7XHJcbiAgICAgICAgbGV0IGxjaGlsZDogYW55ID0gcGVsZS5sYXN0RWxlbWVudENoaWxkO1xyXG4gICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGZjaGlsZC5pZCkuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XHJcbiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQobGNoaWxkLmlkKS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcclxuICAgICAgICBwZWxlLnN0eWxlLnBhZGRpbmdMZWZ0ID0gXCIzMHB4XCI7XHJcbiAgICAgICAgcGVsZS5zdHlsZS5wYWRkaW5nUmlnaHQgPSBcIjMwcHhcIjtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBvbnNlbGVjdChiSWQpIHtcclxuICAgIC8vIGNvbnNvbGUubG9nKGJJZCk7XHJcbiAgICBsZXQgb2JqID0gdGhpcy5idXllcnMuZmluZCh4ID0+IHgudmFsdWUgPT0gYklkKTtcclxuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdCSWJ5cicsIEpTT04uc3RyaW5naWZ5KG9iaikpO1xyXG4gIH1cclxuXHJcbiAgZ2V0QnV5ZXJzKGVtcGxveWVlKSB7XHJcbiAgICAvLyB0aGlzLmJ1eWVycyA9IFtdO1xyXG4gICAgaWYgKGVtcGxveWVlID09IHVuZGVmaW5lZCB8fCBlbXBsb3llZSA9PSAnJykgcmV0dXJuO1xyXG4gICAgbGV0IHJlcU9iaiA9IHt9O1xyXG4gICAgcmVxT2JqWydlbXBJZG4nXSA9IHRoaXMuZW1wSWQ7XHJcbiAgICByZXFPYmpbJ2xpa2VTdHInXSA9IGVtcGxveWVlO1xyXG4gICAgcmVxT2JqWydmb3JtTm1lJ10gPXRoaXMucm91dGUuc25hcHNob3QucGFyYW1zWydmcm1ubWUnXTtcclxuICAgIHJlcU9ialsna2V5J10gPSAnYnV5ZXJuYW1lJztcclxuICAgIHJlcU9ialsnc3R0J10gPSAnLTEnO1xyXG4gICAgY29uc29sZS5sb2cocmVxT2JqKTtcclxuICAgIHRoaXMuYmlzLmRhdGEocmVxT2JqLCAnbG9hZEJ1eWVyJywgJ21hcmtldGluZy9zZWFyY2gnKVxyXG4gICAgICAuc3Vic2NyaWJlKGRhdGEgPT4ge1xyXG4gICAgICAgIGxldCByZXMgPSBkYXRhLnJlc3VsdDtcclxuICAgICAgICB0aGlzLmJ1eWVycyA9IHJlcy5idXllckxpc3QubWFwKG9wdGlvbiA9PiAoe1xyXG4gICAgICAgICAgdmFsdWU6IG9wdGlvbi5rLFxyXG4gICAgICAgICAgbGFiZWw6IG9wdGlvbi52XHJcbiAgICAgICAgfSkpO1xyXG4gICAgICAgIHRoaXMuX3NwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgfSwgZXJyb3IgPT4ge1xyXG4gICAgICAgIHRoaXMuX3NwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcihlcnJvcik7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0VmVuZGVyKGUpIHtcclxuICAgIC8vIHRoaXMuYnV5ZXJzID0gW107XHJcbiAgICBsZXQgcmVxT2JqID0ge307XHJcbiAgICByZXFPYmpbJ2xpa2VTdHInXSA9IGVcclxuICAgIHJlcU9ialsnZm9ybU5tZSddID10aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtc1snZnJtbm1lJ107XHJcbiAgICByZXFPYmpbJ3R5cCddID0gJ3ZlbmRlcic7XHJcbiAgICBjb25zb2xlLmxvZyhyZXFPYmopO1xyXG4gICAgdGhpcy5iaXMuZGF0YShyZXFPYmosICdsb2FkQnV5ZXInLCAnbWFya2V0aW5nL3NlYXJjaCcpXHJcbiAgICAgIC5zdWJzY3JpYmUoZGF0YSA9PiB7XHJcbiAgICAgICAgbGV0IHJlcyA9IGRhdGEucmVzdWx0O1xyXG4gICAgICAgIHRoaXMudmVuZGVyTGlzdCA9IHJlcy5idXllckxpc3QubWFwKG9wdGlvbiA9PiAoe1xyXG4gICAgICAgICAgdmFsdWU6IG9wdGlvbi5rLFxyXG4gICAgICAgICAgbGFiZWw6IG9wdGlvbi52XHJcbiAgICAgICAgfSkpO1xyXG4gICAgICAgIHRoaXMuX3NwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgfSwgZXJyb3IgPT4ge1xyXG4gICAgICAgIHRoaXMuX3NwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcihlcnJvcik7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbGVmdFNjcm9sbChkaXYpIHtcclxuICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2Rpdi4nICsgZGl2KS5zY3JvbGxMZWZ0IC09IDI1MDtcclxuICB9XHJcblxyXG4gIHJpZ2h0U2Nyb2xsKGRpdikge1xyXG4gICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcignZGl2LicgKyBkaXYpLnNjcm9sbExlZnQgKz0gMjUwO1xyXG4gIH1cclxuXHJcbiAgY2hlY2tCb3hGdW4oYXR0T2osIHZhbCwgc3RhdHVzLCBpZCkge1xyXG4gICAgY29uc29sZS5sb2coYXR0T2ouYXR0cik7XHJcbiAgICBpZiAoaWQgPT0gJ3RpbmdlX05vIEJHTScgJiYgc3RhdHVzID09IHRydWUpIHtcclxuICAgICAgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtaWxreV9uYScpIGFzIGFueSkuY2xpY2soKTtcclxuICAgICAgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0aW5nZV9CUicpIGFzIGFueSkuZGlzYWJsZWQgPSB0cnVlO1xyXG4gICAgICAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RpbmdlX0dSJykgYXMgYW55KS5kaXNhYmxlZCA9IHRydWU7XHJcbiAgICAgIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGluZ2VfTVQnKSBhcyBhbnkpLmRpc2FibGVkID0gdHJ1ZTtcclxuICAgICAgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtaWxreV9tbDEnKSBhcyBhbnkpLmRpc2FibGVkID0gdHJ1ZTtcclxuICAgICAgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtaWxreV9tbDInKSBhcyBhbnkpLmRpc2FibGVkID0gdHJ1ZTtcclxuICAgICAgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtaWxreV9tbDMnKSBhcyBhbnkpLmRpc2FibGVkID0gdHJ1ZTtcclxuICAgICAgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtaWxreV9tbDQnKSBhcyBhbnkpLmRpc2FibGVkID0gdHJ1ZTtcclxuXHJcbiAgICAgIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGluZ2VfMTVAMjBAMjUnKSBhcyBhbnkpLnN0eWxlLmJhY2tncm91bmRDb2xvciA9ICcjZGRkJztcclxuICAgICAgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0aW5nZV8zNUA0MEA0NUA1MEA1NScpIGFzIGFueSkuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gJyNkZGQnO1xyXG4gICAgICAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RpbmdlXzYwQDYxQDYyQDYzJykgYXMgYW55KS5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSAnI2RkZCc7XHJcbiAgICAgIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWlsa3lfNycpIGFzIGFueSkuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gJyNkZGQnO1xyXG4gICAgICAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21pbGt5XzE1JykgYXMgYW55KS5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSAnI2RkZCc7XHJcbiAgICAgIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWlsa3lfMjAnKSBhcyBhbnkpLnN0eWxlLmJhY2tncm91bmRDb2xvciA9ICcjZGRkJztcclxuICAgICAgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtaWxreV8zMCcpIGFzIGFueSkuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gJyNkZGQnO1xyXG4gICAgfSBlbHNlIGlmIChpZCA9PSAndGluZ2VfTm8gQkdNJyAmJiBzdGF0dXMgPT0gZmFsc2UpIHtcclxuICAgICAgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtaWxreV9uYScpIGFzIGFueSkuY2xpY2soKTtcclxuICAgICAgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0aW5nZV9CUicpIGFzIGFueSkuZGlzYWJsZWQgPSBmYWxzZTtcclxuICAgICAgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0aW5nZV9HUicpIGFzIGFueSkuZGlzYWJsZWQgPSBmYWxzZTtcclxuICAgICAgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0aW5nZV9NVCcpIGFzIGFueSkuZGlzYWJsZWQgPSBmYWxzZTtcclxuICAgICAgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtaWxreV9tbDEnKSBhcyBhbnkpLmRpc2FibGVkID0gZmFsc2U7XHJcbiAgICAgIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWlsa3lfbWwyJykgYXMgYW55KS5kaXNhYmxlZCA9IGZhbHNlO1xyXG4gICAgICAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21pbGt5X21sMycpIGFzIGFueSkuZGlzYWJsZWQgPSBmYWxzZTtcclxuICAgICAgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtaWxreV9tbDQnKSBhcyBhbnkpLmRpc2FibGVkID0gZmFsc2U7XHJcblxyXG4gICAgICAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RpbmdlXzE1QDIwQDI1JykgYXMgYW55KS5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSAnI2ZmZic7XHJcbiAgICAgIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGluZ2VfMzVANDBANDVANTBANTUnKSBhcyBhbnkpLnN0eWxlLmJhY2tncm91bmRDb2xvciA9ICcjZmZmJztcclxuICAgICAgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0aW5nZV82MEA2MUA2MkA2MycpIGFzIGFueSkuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gJyNmZmYnO1xyXG4gICAgICAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21pbGt5XzcnKSBhcyBhbnkpLnN0eWxlLmJhY2tncm91bmRDb2xvciA9ICcjZmZmJztcclxuICAgICAgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtaWxreV8xNScpIGFzIGFueSkuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gJyNmZmYnO1xyXG4gICAgICAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21pbGt5XzIwJykgYXMgYW55KS5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSAnI2ZmZic7XHJcbiAgICAgIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWlsa3lfMzAnKSBhcyBhbnkpLnN0eWxlLmJhY2tncm91bmRDb2xvciA9ICcjZmZmJztcclxuICAgIH1cclxuICAgIC8vIHRoaXMuYWN0aXZlID0gdHJ1ZTtcclxuICAgIC8vIGxldCBlbGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncHJfJyArIHZhbCk7XHJcbiAgICAvLyBpZiAoYXR0T2ouYXR0ciA9PSAnc2gnKSB7XHJcbiAgICAvLyAgIGlmIChzdGF0dXMgPT0gdHJ1ZSkge1xyXG4gICAgLy8gICAgIGVsZS5jbGFzc0xpc3QuYWRkKFwic2VsZWN0ZWRSb3dcIik7XHJcbiAgICAvLyAgIH0gZWxzZSB7XHJcbiAgICAvLyAgICAgZWxlLmNsYXNzTGlzdC5yZW1vdmUoXCJzZWxlY3RlZFJvd1wiKTtcclxuICAgIC8vICAgfVxyXG4gICAgLy8gfVxyXG4gICAgbGV0IGZvdW5kID0gMDtcclxuICAgIGxldCBmb3VuZDIgPSAwO1xyXG4gICAgYXR0T2oudmFsdWVzLmZvckVhY2goKGVsZW1lbnQsIGluZGV4KSA9PiB7XHJcbiAgICAgIGlmIChzdGF0dXMgPT0gZmFsc2UgJiYgZWxlbWVudCA9PSB2YWwpIHtcclxuICAgICAgICBhdHRPai52YWx1ZXMuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2FsbCcgKyBhdHRPai5hdHRyKSBhcyBhbnkpLmNoZWNrZWQgPSBmYWxzZTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH0gZWxzZSBpZiAoc3RhdHVzID09IHRydWUgJiYgZWxlbWVudCA9PSB2YWwpIHtcclxuICAgICAgICBmb3VuZCA9IDE7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHRoaXMubW9kaWZ5U2NoLmZvckVhY2goKGVsZW1lbnQsIGluZGV4KSA9PiB7XHJcbiAgICAgIGlmIChzdGF0dXMgPT0gZmFsc2UgJiYgZWxlbWVudCA9PSBpZCkge1xyXG4gICAgICAgIHRoaXMubW9kaWZ5U2NoLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9IGVsc2UgaWYgKHN0YXR1cyA9PSB0cnVlICYmIGVsZW1lbnQgPT0gaWQpIHtcclxuICAgICAgICBmb3VuZDIgPSAxO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICBpZiAoc3RhdHVzKSB7XHJcbiAgICAgIGlmIChhdHRPai5hdHRyID09ICdzeicpIHtcclxuICAgICAgICBhdHRPai52YWx1ZXMucHVzaCh2YWxbdmFsLmxlbmd0aCAtIDFdKTtcclxuICAgICAgICB0aGlzLm1vZGlmeVNjaC5wdXNoKGlkW2lkLmxlbmd0aCAtIDFdKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBhdHRPai52YWx1ZXMucHVzaCh2YWwpO1xyXG4gICAgICAgIHRoaXMubW9kaWZ5U2NoLnB1c2goaWQpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnQkltb2RpZnlTZWFyY2hTdHJpbmcnLCB0aGlzLm1vZGlmeVNjaCk7XHJcblxyXG4gICAgLy8gY29uc29sZS5sb2coYXR0T2osIHZhbCwgc3RhdHVzLCBpZCk7XHJcbiAgICB0aGlzLmF0dHJNYWtlcignYycpO1xyXG4gIH1cclxuXHJcbiAgb25lO1xyXG4gIHR3bztcclxuICB0aHJlZTtcclxuICB0aHZndXA7XHJcbiAgZXhSYXRlO1xyXG4gIHNlbGVjdEVsZShjLCBzKSB7XHJcbiAgICBpZiAoYyA9PSAwKSB7XHJcbiAgICAgIGlmIChzID09IHRydWUpIHtcclxuICAgICAgICAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2N0X2V4JykgYXMgYW55KS5jbGljaygpO1xyXG4gICAgICAgIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncG9fZXgnKSBhcyBhbnkpLmNsaWNrKCk7XHJcbiAgICAgICAgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzeV9leCcpIGFzIGFueSkuY2xpY2soKTtcclxuICAgICAgICAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJ0d29cIikgYXMgYW55KS5jaGVja2VkID0gZmFsc2U7XHJcbiAgICAgICAgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwidGhyZWVcIikgYXMgYW55KS5jaGVja2VkID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy50d28gPSB0cnVlO1xyXG4gICAgICAgIHRoaXMudGhyZWUgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMudGh2Z3VwID0gdHJ1ZTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2N0X2V4JykgYXMgYW55KS5jbGljaygpO1xyXG4gICAgICAgIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncG9fZXgnKSBhcyBhbnkpLmNsaWNrKCk7XHJcbiAgICAgICAgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzeV9leCcpIGFzIGFueSkuY2xpY2soKTtcclxuICAgICAgICB0aGlzLnR3byA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMudGhyZWUgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnRodmd1cCA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKGMgPT0gMSkge1xyXG4gICAgICBpZiAocyA9PSB0cnVlKSB7XHJcbiAgICAgICAgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjdF9leCcpIGFzIGFueSkuY2xpY2soKTtcclxuICAgICAgICAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3BvX2V4JykgYXMgYW55KS5jbGljaygpO1xyXG4gICAgICAgIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcIm9uZVwiKSBhcyBhbnkpLmNoZWNrZWQgPSBmYWxzZTtcclxuICAgICAgICAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJ0aHJlZVwiKSBhcyBhbnkpLmNoZWNrZWQgPSBmYWxzZTtcclxuICAgICAgICAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJ0aHZndXBcIikgYXMgYW55KS5jaGVja2VkID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5vbmUgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMudGhyZWUgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMudGh2Z3VwID0gdHJ1ZTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2N0X2V4JykgYXMgYW55KS5jbGljaygpO1xyXG4gICAgICAgIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncG9fZXgnKSBhcyBhbnkpLmNsaWNrKCk7XHJcbiAgICAgICAgdGhpcy5vbmUgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnRocmVlID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy50aHZndXAgPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmIChjID09IDIpIHtcclxuICAgICAgaWYgKHMgPT0gdHJ1ZSkge1xyXG4gICAgICAgIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY3RfdmcnKSBhcyBhbnkpLmNsaWNrKCk7XHJcbiAgICAgICAgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwb192ZycpIGFzIGFueSkuY2xpY2soKTtcclxuICAgICAgICAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3N5X3ZnJykgYXMgYW55KS5jbGljaygpO1xyXG4gICAgICAgIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcIm9uZVwiKSBhcyBhbnkpLmNoZWNrZWQgPSBmYWxzZTtcclxuICAgICAgICAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJ0d29cIikgYXMgYW55KS5jaGVja2VkID0gZmFsc2U7XHJcbiAgICAgICAgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwidGh2Z3VwXCIpIGFzIGFueSkuY2hlY2tlZCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMub25lID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnR3byA9IHRydWU7XHJcbiAgICAgICAgdGhpcy50aHZndXAgPSB0cnVlO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY3RfdmcnKSBhcyBhbnkpLmNsaWNrKCk7XHJcbiAgICAgICAgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwb192ZycpIGFzIGFueSkuY2xpY2soKTtcclxuICAgICAgICAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3N5X3ZnJykgYXMgYW55KS5jbGljaygpO1xyXG4gICAgICAgIHRoaXMub25lID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy50d28gPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnRodmd1cCA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKGMgPT0gMykge1xyXG4gICAgICBpZiAocyA9PSB0cnVlKSB7XHJcbiAgICAgICAgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjdF9leCcpIGFzIGFueSkuY2xpY2soKTtcclxuICAgICAgICAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3BvX2V4JykgYXMgYW55KS5jbGljaygpO1xyXG4gICAgICAgIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc3lfZXgnKSBhcyBhbnkpLmNsaWNrKCk7XHJcbiAgICAgICAgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjdF92ZycpIGFzIGFueSkuY2xpY2soKTtcclxuICAgICAgICAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3BvX3ZnJykgYXMgYW55KS5jbGljaygpO1xyXG4gICAgICAgIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc3lfdmcnKSBhcyBhbnkpLmNsaWNrKCk7XHJcbiAgICAgICAgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwib25lXCIpIGFzIGFueSkuY2hlY2tlZCA9IGZhbHNlO1xyXG4gICAgICAgIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInR3b1wiKSBhcyBhbnkpLmNoZWNrZWQgPSBmYWxzZTtcclxuICAgICAgICAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJ0aHJlZVwiKSBhcyBhbnkpLmNoZWNrZWQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLm9uZSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy50d28gPSB0cnVlO1xyXG4gICAgICAgIHRoaXMudGhyZWUgPSB0cnVlO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY3RfZXgnKSBhcyBhbnkpLmNsaWNrKCk7XHJcbiAgICAgICAgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwb19leCcpIGFzIGFueSkuY2xpY2soKTtcclxuICAgICAgICAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3N5X2V4JykgYXMgYW55KS5jbGljaygpO1xyXG4gICAgICAgIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY3RfdmcnKSBhcyBhbnkpLmNsaWNrKCk7XHJcbiAgICAgICAgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwb192ZycpIGFzIGFueSkuY2xpY2soKTtcclxuICAgICAgICAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3N5X3ZnJykgYXMgYW55KS5jbGljaygpO1xyXG4gICAgICAgIHRoaXMub25lID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy50d28gPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnRocmVlID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbiAgc2luZ2xlVmFsKGF0dE9qLCB2YWwsIGkpIHtcclxuXHJcbiAgICBpZiAoaSA9PSBcInRcIikge1xyXG4gICAgICBsZXQgc3BhY2VUb2NvbW1hID0gdmFsLnJlcGxhY2UoL1sgLF0rL2csIFwiLFwiKTtcclxuICAgICAgbGV0IG5ld0xpbmVUb0NvbW1hID0gc3BhY2VUb2NvbW1hLnJlcGxhY2UoL1xcbi9nLCBcIixcIik7XHJcbiAgICAgIGxldCBwbGluZXMgPSBuZXdMaW5lVG9Db21tYS5zcGxpdCgnLCcpO1xyXG4gICAgICBwbGluZXMgPSBwbGluZXMuZmlsdGVyKHYgPT4gdiAhPSAnJyk7XHJcbiAgICAgIHBsaW5lcyA9IHBsaW5lcy5maWx0ZXIodiA9PiB2ICE9ICcgJyk7XHJcbiAgICAgIGF0dE9qLnZhbHVlcyA9IFsuLi5wbGluZXNdO1xyXG4gICAgICB0aGlzLmF0dHJNYWtlcignYycpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG5cclxuICAgIGlmICh2YWwgIT0gJycpIHtcclxuICAgICAgYXR0T2oudmFsdWVzLnB1c2godmFsKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGF0dE9qLnZhbHVlcy5zcGxpY2UoaSwgMSk7XHJcbiAgICB9XHJcbiAgICBjb25zb2xlLmxvZyhhdHRPaik7XHJcbiAgICB0aGlzLmF0dHJNYWtlcigndCcpO1xyXG4gIH1cclxuXHJcbiAgb25EYXRlQ2hhbmdlKGF0dHJPYmosIHZhbCwgaSkge1xyXG4gICAgbGV0IGF0dHIgPSBhdHRyT2JqLmF0dHI7XHJcbiAgICBsZXQgZnJtSWQgPSBhdHRyICsgMDtcclxuICAgIGxldCBmcm1WYWwgPSAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZnJtSWQpIGFzIGFueSkudmFsdWU7XHJcbiAgICBhdHRyT2JqLnZhbHVlcy5wdXNoKGZybVZhbCk7XHJcblxyXG4gICAgYXR0ck9iai52YWx1ZXMucHVzaCh2YWwpOyAvL3RvdmFsdWVcclxuXHJcblxyXG4gICAgdGhpcy5hdHRyTWFrZXIoJ3QnKTtcclxuICB9XHJcblxyXG4gIG1vZGlmeVNlYXJjaEZ1bigpIHtcclxuICAgIC8vIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKCdNZm9vZ2xlJyk7XHJcbiAgICAvLyBsZXQgYnlyID0gIEpTT04ucGFyc2UoIGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdieXInKSk7XHJcblxyXG4gICAgLy8gdGhpcy50cm0gPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgndHJtJyk7XHJcbiAgICB2YXIgZXZlbnQgPSBuZXcgRXZlbnQoJ2NoYW5nZScpO1xyXG4gICAgaWYgKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdCSWNhbGwnKSAhPSBudWxsID09IG51bGwpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdCSW1vZGlmeVNjaFR4dCcpICE9IG51bGwpIHtcclxuICAgICAgICB0aGlzLm1vZGZ5dHh0LmZvckVhY2goKGVsZSwgaW5kZXgpID0+IHtcclxuICAgICAgICAgIGlmIChlbGUuaWQgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZWxlLmlkKSBhcyBhbnkpLnZhbHVlID0gZWxlLnZhbFxyXG4gICAgICAgICAgICBsZXQgaWQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChlbGUuaWQpO1xyXG4gICAgICAgICAgICBpZC5kaXNwYXRjaEV2ZW50KGV2ZW50KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMubW9kaWZ5LmZvckVhY2goKGVsZSwgaW5kZXgpID0+IHtcclxuICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChlbGUpLmNsaWNrKCk7XHJcbiAgICAgICAgaWYgKGluZGV4ICsgMSA9PSB0aGlzLm1vZGlmeS5sZW5ndGgpIHtcclxuICAgICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKCdCSWNhbGwnKTtcclxuICAgICAgICAgIC8vIHNldFRpbWVvdXQoZnVuY3Rpb24gcmVtb3ZlbG9jYWxzKCkge1xyXG4gICAgICAgICAgLy8gICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgnbW9kaWZ5U2VhcmNoU3RyaW5nJyk7XHJcbiAgICAgICAgICAvLyAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKCdtb2RpZnlTY2hUeHQnKTtcclxuICAgICAgICAgIC8vICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oJ21vZGlmeXN0YXQnKTtcclxuICAgICAgICAgIC8vIH0sIDUwMClcclxuICAgICAgICB9XHJcbiAgICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oJ0JJY2FsbCcpOyAgLy8gZm9yIHJlc2V0dGluZyBhZnRlciBtb2RpZnkgc2VhcmNoXHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgfVxyXG4gIHJhbmdlKGF0dE9qLCB2YWwsIGluZGV4KSB7XHJcbiAgICBsZXQgdHh0T2JqID0ge31cclxuICAgIGxldCB2YWx1ID0gdmFsLnRhcmdldC52YWx1ZTtcclxuICAgIGxldCBmaXJzdCA9IGF0dE9qLnZhbHVlc1swXTtcclxuICAgIGxldCBzZWNvbmQgPSBhdHRPai52YWx1ZXNbMV07XHJcbiAgICAvLyBjb25zb2xlLmxvZyhzZWNvbmQpO1xyXG4gICAgLy8gaWYgKGluZGV4ID09IDAgJiYgc2Vjb25kID09IHVuZGVmaW5lZCkge1xyXG4gICAgLy8gICAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQob3BwaWQpIGFzIGFueSkudmFsdWUgPSB2YWx1O1xyXG4gICAgLy8gICBhdHRPai52YWx1ZXNbaW5kZXhdID0gdmFsdTtcclxuICAgIC8vICAgYXR0T2oudmFsdWVzW29wcF0gPSB2YWx1O1xyXG4gICAgLy8gfSBlbHNlIGlmIChpbmRleCA9PSAxICYmIGZpcnN0ID09IHVuZGVmaW5lZCkge1xyXG4gICAgLy8gICAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQob3BwaWQpIGFzIGFueSkudmFsdWUgPSB2YWx1O1xyXG4gICAgLy8gICBhdHRPai52YWx1ZXNbaW5kZXhdID0gdmFsdTtcclxuICAgIC8vICAgYXR0T2oudmFsdWVzW29wcF0gPSB2YWx1O1xyXG4gICAgLy8gfSBlbHNlIHtcclxuICAgIC8vICAgYXR0T2oudmFsdWVzW2luZGV4XSA9IHZhbHU7XHJcbiAgICAvLyB9XHJcbiAgICAvLyBhdHRPai52YWx1ZXNbaW5kZXhdID0gdmFsdTtcclxuICAgIGlmICh2YWx1ICE9ICcnKSB7XHJcbiAgICAgIGF0dE9qLnZhbHVlc1tpbmRleF0gPSB2YWx1O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgYXR0T2oudmFsdWVzLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICB9XHJcbiAgICAvLyBjb25zb2xlLmxvZyhhdHRPai52YWx1ZXMpO1xyXG4gICAgLy8gaWYgKHZhbC50YXJnZXQudmFsdWUgPT0gJycpIHtcclxuICAgIC8vICAgdGhpcy5tb2RpZnlUeHQuZm9yRWFjaCgoZWxlbWVudCwgaW5kZXgpID0+IHtcclxuICAgIC8vICAgICBpZiAoZWxlbWVudC5pZCA9PSBpZCkge1xyXG4gICAgLy8gICAgICAgdGhpcy5tb2RpZnlUeHQuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgIC8vICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdtb2RpZnlTY2hUeHQnLCBKU09OLnN0cmluZ2lmeSh0aGlzLm1vZGlmeVR4dCkpO1xyXG4gICAgLy8gICAgIH1cclxuICAgIC8vICAgfSk7XHJcbiAgICAvLyB9IGVsc2Uge1xyXG4gICAgLy8gICB0eHRPYmpbJ2lkJ10gPSBpZDtcclxuICAgIC8vICAgdHh0T2JqWyd2YWwnXSA9IGF0dE9qLnZhbHVlc1tpbmRleF07XHJcbiAgICAvLyAgIHRoaXMubW9kaWZ5VHh0LnB1c2godHh0T2JqKTtcclxuICAgIC8vICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ21vZGlmeVNjaFR4dCcsIEpTT04uc3RyaW5naWZ5KHRoaXMubW9kaWZ5VHh0KSk7XHJcbiAgICAvLyB9XHJcbiAgICB0aGlzLmF0dHJNYWtlcignYycpO1xyXG4gIH1cclxuXHJcbiAgYWRkaXRpb25hbChhdHRPaiwgdmFsLCBpbmRleCwgY2FsbCkge1xyXG4gICAgdGhpcy5jYWxsRnJvbSA9IGNhbGw7XHJcbiAgICBsZXQgdHh0T2JqID0ge31cclxuICAgIGxldCB2YWx1ID0gdmFsLnRhcmdldC52YWx1ZTtcclxuICAgIGxldCBmaXJzdCA9IGF0dE9qLnZhbHVlc1swXTtcclxuICAgIGxldCBzZWNvbmQgPSBhdHRPai52YWx1ZXNbMV07XHJcbiAgICBpZiAodmFsdSAhPSAnJykge1xyXG4gICAgICBhdHRPai52YWx1ZXNbaW5kZXhdID0gdmFsdTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGF0dE9qLnZhbHVlcy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBmY3cgPSAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NydHd0MCcpIGFzIGFueSkudmFsdWU7XHJcbiAgICBsZXQgdGN3ID0gKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjcnR3dDEnKSBhcyBhbnkpLnZhbHVlO1xyXG5cclxuICAgIC8vIGlmIChhdHRPai52YWx1ZXMubGVuZ3RoID09IDIpIHtcclxuICAgIGlmIChmY3cgIT0gbnVsbCAmJiBmY3cgIT0gdW5kZWZpbmVkICYmIGZjdyAhPSBcIlwiICYmIHRjdyAhPSBudWxsICYmIHRjdyAhPSB1bmRlZmluZWQgJiYgdGN3ICE9IFwiXCIpIHtcclxuXHJcblxyXG4gICAgICAvLyBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnQkljcnR3dCcsIEpTT04uc3RyaW5naWZ5KGF0dE9qLnZhbHVlcykpO1xyXG4gICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnQkljcnR3dCcsIEpTT04uc3RyaW5naWZ5KFtmY3csIHRjd10pKTtcclxuXHJcbiAgICAgIHRoaXMuYXR0ck1ha2VyKCdjJyk7XHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcbiAgbXVsdGlzZWxlY3QoYXR0T2osIHZhbCkge1xyXG4gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ3NpemUnLCB2YWwpO1xyXG4gICAgYXR0T2oudmFsdWVzID0gW107XHJcbiAgICB2YXIgdGVtcEFyciA9IFtdO1xyXG4gICAgdmFsLmZvckVhY2goZWxlbWVudCA9PiB7XHJcbiAgICAgIGlmIChlbGVtZW50ICE9ICcnICYmIGVsZW1lbnQgIT0gbnVsbCkge1xyXG4gICAgICAgIGlmIChhdHRPai52YWx1ZXMuaW5kZXhPZih2YWwpICE9IC0xKSB7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIC8vIGF0dE9qLnZhbHVlcy5wdXNoKGVsZW1lbnQpO1xyXG4gICAgICAgICAgYXR0T2oudmFsdWVzLnB1c2goZWxlbWVudC5pZCk7XHJcbiAgICAgICAgICB0ZW1wQXJyLnB1c2goZWxlbWVudCk7XHJcbiAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnQklzaXplJywgSlNPTi5zdHJpbmdpZnkodGVtcEFycikpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICB0aGlzLmF0dHJNYWtlcignYycpO1xyXG4gIH1cclxuXHJcbiAgZGVzZWxlY3QoYXR0T2osIHZhbCkge1xyXG4gICAgYXR0T2oudmFsdWVzID0gW107XHJcbiAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgnQklzaXplJyk7XHJcbiAgICB0aGlzLmF0dHJNYWtlcignYycpO1xyXG4gIH1cclxuXHJcbiAgYXR0ck1ha2VyKGMpIHtcclxuICAgIGlmIChjID09ICdjJykge1xyXG4gICAgICB0aGlzLmF0dHIgPSAnJztcclxuICAgICAgdGhpcy5hdHRyVHlwZSA9ICcnO1xyXG4gICAgICB0aGlzLmF0dHJWYWwgPSAnJztcclxuICAgICAgdGhpcy5hdHRyU3RydWN0dXJlRHRsLmZvckVhY2goZWxlMSA9PiB7XHJcbiAgICAgICAgZWxlMS5jb21wb25lbnQuZm9yRWFjaChlbGUyID0+IHtcclxuICAgICAgICAgIGlmIChlbGUyLnZhbHVlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYXR0ciArPSBlbGUyLmF0dHIgKyBcIiNcIjtcclxuICAgICAgICAgICAgdGhpcy5hdHRyVHlwZSArPSBlbGUyLmRhdGFUeXBlICsgXCIjXCI7XHJcbiAgICAgICAgICAgIGlmKGVsZTIuZGF0YVR5cGU9PSdkJylcclxuICAgICAgICAgICAgdGhpcy5hdHRyVmFsICs9IGVsZTIudmFsdWVzLmpvaW4oXCJAXCIpLnJlcGxhY2UoLy0vZywgJycpICsgXCIjXCI7XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgdGhpcy5hdHRyVmFsICs9IGVsZTIudmFsdWVzLmpvaW4oXCJAXCIpICsgXCIjXCI7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIGlmIChjID09ICd0Jykge1xyXG4gICAgICB0aGlzLmF0dHIgPSAnJztcclxuICAgICAgdGhpcy5hdHRyVHlwZSA9ICcnO1xyXG4gICAgICB0aGlzLmF0dHJWYWwgPSAnJztcclxuICAgICAgdGhpcy5hdHRyU3RydWN0dXJlRHRsLmZvckVhY2goZWxlMSA9PiB7XHJcbiAgICAgICAgZWxlMS5jb21wb25lbnQuZm9yRWFjaChlbGUyID0+IHtcclxuICAgICAgICAgIGlmIChlbGUyLnZhbHVlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIC8vIHRoaXMuYXR0ciArPSBlbGUyLmF0dHIgKyBcIiNcIjtcclxuICAgICAgICAgICAgLy8gdGhpcy5hdHRyVHlwZSArPSBlbGUyLmRhdGFUeXBlICsgXCIjXCI7XHJcbiAgICAgICAgICAgIC8vIHRoaXMuYXR0clZhbCArPSBlbGUyLnZhbHVlc1swXS5zcGxpdCgnICcpLmpvaW4oJ0AnKSArIFwiI1wiO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5hdHRyICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgIHRoaXMuYXR0ciArPSBlbGUyLmF0dHIgKyBcIiNcIjtcclxuICAgICAgICAgICAgICB0aGlzLmF0dHJUeXBlICs9IGVsZTIuZGF0YVR5cGUgKyBcIiNcIjtcclxuICAgICAgICAgICAgICB0aGlzLmF0dHJWYWwgKz0gZWxlMi52YWx1ZXMuam9pbihcIkBcIikucmVwbGFjZSgvLS9nLCAnJykgKyBcIiNcIjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICB0aGlzLmF0dHIgPSBlbGUyLmF0dHIgKyBcIiNcIjtcclxuICAgICAgICAgICAgICB0aGlzLmF0dHJUeXBlID0gZWxlMi5kYXRhVHlwZSArIFwiI1wiO1xyXG4gICAgICAgICAgICAgIHRoaXMuYXR0clZhbCA9IGVsZTIudmFsdWVzLmpvaW4oXCJAXCIpLnJlcGxhY2UoLy0vZywgJycpICsgXCIjXCI7XHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhlbGUyLnZhbHVlcyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgY29uc29sZS5sb2codGhpcy5hdHRyLCB0aGlzLmF0dHJUeXBlLCB0aGlzLmF0dHJWYWwpO1xyXG4gIH1cclxuXHJcbiAgZ2V0VmFsKHYsIHMpIHtcclxuICAgIGlmIChzID09IHRydWUpIHtcclxuICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRTdGF0dXMuaW5kZXhPZih2KSAhPSAtMSkge1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRTdGF0dXMucHVzaCh2KVxyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBsZXQgaW5kZXggPSB0aGlzLnNlbGVjdGVkU3RhdHVzLmluZGV4T2Yodik7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRTdGF0dXMuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnNldFN0dCh2LCBzKVxyXG5cclxuXHJcbiAgICBjb25zb2xlLmxvZyh0aGlzLnNlbGVjdGVkU3RhdHVzKTtcclxuXHJcbiAgfVxyXG4gIGFuYUFsbEdycFN0dExCTCA9IFtdO1xyXG4gIHNldFN0dCh2LCBzKSB7XHJcbiAgICBpZiAocyA9PSB0cnVlKSB7XHJcbiAgICAgIGlmICh0aGlzLmFuYUFsbEdycFN0dC5pbmRleE9mKHYua2V5KSAhPSAtMSkge1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMuYW5hQWxsR3JwU3R0LnB1c2godi5rZXkpO1xyXG4gICAgICAgIHRoaXMuYW5hQWxsR3JwU3R0TEJMLnB1c2godi5sYWJlbCk7XHJcblxyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBsZXQgYW5haW5kZXggPSB0aGlzLmFuYUFsbEdycFN0dC5pbmRleE9mKHYua2V5KTtcclxuICAgICAgbGV0IGFuYWxibGluZGV4ID0gdGhpcy5hbmFBbGxHcnBTdHRMQkwuaW5kZXhPZih2LmxhYmVsKTtcclxuICAgICAgdGhpcy5hbmFBbGxHcnBTdHRMQkwuc3BsaWNlKGFuYWxibGluZGV4LCAxKTtcclxuICAgICAgdGhpcy5hbmFBbGxHcnBTdHQuc3BsaWNlKGFuYWluZGV4LCAxKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ0JJYW5hU3R0JywgSlNPTi5zdHJpbmdpZnkodGhpcy5hbmFBbGxHcnBTdHQpKTtcclxuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdCSWFuYVN0dExCTCcsIEpTT04uc3RyaW5naWZ5KHRoaXMuYW5hQWxsR3JwU3R0TEJMKSk7XHJcblxyXG4gICAgY29uc29sZS5sb2codGhpcy5hbmFBbGxHcnBTdHQpO1xyXG5cclxuICB9XHJcblxyXG4gIHNvbGRTdGF0dXMgPSBbXTtcclxuICBvdGhlclN0YXR1cyA9IFtdO1xyXG5cclxuICBwYXR0ciA9ICcnO1xyXG4gIHBhdHRyVHlwZSA9ICcnO1xyXG4gIHBhdHRyVmFsID0gJyc7XHJcbiAgZmlyc3Q7XHJcbiAgc2Vjb25kO1xyXG4gIGdQZnJvbTtcclxuICBnUHRvO1xyXG4gIGFkZERhdGUodmFsLCBpbmRleCwgY2FsbCkge1xyXG4gICAgaWYgKGluZGV4ID09IDApIHtcclxuICAgICAgdGhpcy5maXJzdCA9IG5ldyBEYXRlKHZhbCk7XHJcbiAgICAgIHRoaXMuZ1Bmcm9tID0gdmFsO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zZWNvbmQgPSBuZXcgRGF0ZSh2YWwpO1xyXG4gICAgICB0aGlzLmdQdG8gPSB2YWw7XHJcbiAgICB9XHJcbiAgICB0aGlzLnBhdHRyID0gJyc7XHJcbiAgICB0aGlzLnBhdHRyVHlwZSA9ICcnO1xyXG4gICAgLy8gdGhpcy5wYXR0clZhbCA9ICcnO1xyXG4gICAgdGhpcy5wMVxyXG4gICAgaWYgKHZhbCAhPSAnJyAmJiB2YWwgIT0gbnVsbCkge1xyXG4gICAgICB0aGlzLnBhdHRyID0gJ3NhbF9kdGUnO1xyXG4gICAgICB0aGlzLnBhdHRyVHlwZSA9ICdkJztcclxuICAgICAgaWYgKGNhbGwgPT0gJ3AxJykge1xyXG4gICAgICAgIHRoaXMucDFbaW5kZXhdID0gdmFsLnJlcGxhY2UoLy0vZywgJycpO1xyXG4gICAgICAgIHRoaXMucGF0dHJWYWwgPSB0aGlzLnAxLmpvaW4oXCJAXCIpO1xyXG4gICAgICB9IGVsc2UgaWYgKGNhbGwgPT0gJ3AyJykge1xyXG4gICAgICAgIHRoaXMucDJbaW5kZXhdID0gdmFsLnJlcGxhY2UoLy0vZywgJycpO1xyXG4gICAgICAgIHRoaXMucGF0dHJWYWwgKz0gdGhpcy5wMi5qb2luKFwiQFwiKSArICd+JztcclxuICAgICAgfSBlbHNlIGlmIChjYWxsID09ICdwMycpIHtcclxuICAgICAgICB0aGlzLnAzW2luZGV4XSA9IHZhbC5yZXBsYWNlKC8tL2csICcnKTtcclxuICAgICAgICB0aGlzLnBhdHRyVmFsICs9IHRoaXMucDMuam9pbihcIkBcIikgKyAnfic7XHJcbiAgICAgIH0gZWxzZSBpZiAoY2FsbCA9PSAncDQnKSB7XHJcbiAgICAgICAgdGhpcy5wNFtpbmRleF0gPSB2YWwucmVwbGFjZSgvLS9nLCAnJyk7XHJcbiAgICAgICAgdGhpcy5wYXR0clZhbCArPSB0aGlzLnA0LmpvaW4oXCJAXCIpICsgJ34nO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICAvLyBjb25zb2xlLmxvZyh0aGlzLnBhdHRyVmFsKTtcclxuICAgIHRoaXMuYXR0ck1ha2VyKCdjJyk7XHJcblxyXG4gIH1cclxuXHJcbiAgb25DaGFuZ2VTYWxlUGVyaW9kKGRheXMpIHtcclxuICAgIC8vIHRoaXMucGVyaW9kID0gMTtcclxuICAgIGxldCBkdCA9IG5ldyBEYXRlKCk7XHJcbiAgICBkdC5zZXREYXRlKGR0LmdldERhdGUoKSAtIGRheXMpO1xyXG4gICAgbGV0IG1vbnRoID0gJycgKyAoZHQuZ2V0TW9udGgoKSArIDEpLFxyXG4gICAgICBkYXkgPSAnJyArIGR0LmdldERhdGUoKSxcclxuICAgICAgeWVhciA9IGR0LmdldEZ1bGxZZWFyKCk7XHJcbiAgICBpZiAobW9udGgubGVuZ3RoIDwgMikgbW9udGggPSAnMCcgKyBtb250aDtcclxuICAgIGlmIChkYXkubGVuZ3RoIDwgMikgZGF5ID0gJzAnICsgZGF5O1xyXG4gICAgbGV0IGJhY2tEdCA9IFt5ZWFyLCBtb250aCwgZGF5XS5qb2luKCctJyk7XHJcblxyXG4gICAgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwRnJvbScpIGFzIGFueSkudmFsdWUgPSBiYWNrRHQ7XHJcblxyXG5cclxuICAgIGxldCBkID0gbmV3IERhdGUoKSxcclxuICAgICAgdG1vbnRoID0gJycgKyAoZC5nZXRNb250aCgpICsgMSksXHJcbiAgICAgIHRkYXkgPSAnJyArIGQuZ2V0RGF0ZSgpLFxyXG4gICAgICB0eWVhciA9IGQuZ2V0RnVsbFllYXIoKTtcclxuICAgIGlmICh0bW9udGgubGVuZ3RoIDwgMikgdG1vbnRoID0gJzAnICsgdG1vbnRoO1xyXG4gICAgaWYgKHRkYXkubGVuZ3RoIDwgMikgdGRheSA9ICcwJyArIHRkYXk7XHJcbiAgICBsZXQgdGRhdGUgPSBbdHllYXIsIHRtb250aCwgdGRheV0uam9pbignLScpO1xyXG4gICAgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwVG8nKSBhcyBhbnkpLnZhbHVlID0gdGRhdGU7XHJcblxyXG5cclxuICAgIHRoaXMuYWRkRGF0ZShiYWNrRHQsIDAsICdwMScpO1xyXG4gICAgdGhpcy5hZGREYXRlKHRkYXRlLCAxLCAncDEnKTtcclxuXHJcblxyXG4gIH1cclxuXHJcbiAgdmlld1Jlc3VsdCh0eXBlKSB7XHJcbiBcclxuICAgIGlmICh0eXBlID09ICdncmlkJykge1xyXG4gICAgICB0aGlzLmdldFNjaFJlc3VsdCgnZycpO1xyXG4gICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgndmlld1R5cGUnLCAnZ3JpZFZpZXcnKTtcclxuICAgICAgaWYgKHRoaXMudmlld0dycCAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnYW5hR3JwVHlwZScsIEpTT04uc3RyaW5naWZ5KHRoaXMudmlld0dycCkpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT0gJ3BhY2tldFZpZXcnKSB7XHJcbiAgICAgIHRoaXMuZ2V0U2NoUmVzdWx0KCdwJyk7XHJcbiAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCd2aWV3VHlwZScsICdsaXN0VmlldycpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuZW1wSWQgIT0gbnVsbCAmJiB0aGlzLmVtcElkICE9IHVuZGVmaW5lZCAmJiB0aGlzLmVtcElkICE9IFwiXCIpIHtcclxuICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ0JJZUlkJywgdGhpcy5lbXBJZCk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIGlmICh0aGlzLnNhbGVQZXJpb2QgIT0gdW5kZWZpbmVkICYmIHRoaXMuc2FsZVBlcmlvZCAhPSBudWxsICYmIHRoaXMuc2FsZVBlcmlvZCAhPSBcIlwiKSB7XHJcbiAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdCSXNhbGVQZXJpb2QnLCB0aGlzLnNhbGVQZXJpb2QpO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvLyBpZiAodGhpcy5wZXJpb2QgIT0gdW5kZWZpbmVkICYmIHRoaXMucGVyaW9kICE9IG51bGwgJiYgdGhpcy5wZXJpb2QgIT0gXCJcIikge1xyXG4gICAgLy8gICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnQklQZXJpb2QnLCB0aGlzLnNhbGVQZXJpb2QpO1xyXG4gICAgLy8gfVxyXG5cclxuICAgXHJcblxyXG5cclxuICB9XHJcblxyXG4gIG9hYyA9IHt9O1xyXG4gIGdldFNjaFJlc3VsdCh2aWV3KSB7XHJcbiAgICBcclxuICAgIGxldCBmcm1kdCA9IChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncEZyb20nKSBhcyBhbnkpLnZhbHVlO1xyXG4gICAgbGV0IHRvZHQgPSAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3BUbycpIGFzIGFueSkudmFsdWU7XHJcblxyXG4gICAgbGV0IGZyb21EYXRlOiBhbnkgPSBuZXcgRGF0ZShmcm1kdCk7XHJcbiAgICBsZXQgdG9EYXRlOiBhbnkgPSBuZXcgRGF0ZSh0b2R0KTtcclxuICAgIFxyXG4gICBcclxuICAgIGxldCBkaWZmRGF5czogYW55ID0gTWF0aC5yb3VuZChNYXRoLmFicygoZnJvbURhdGUgLSB0b0RhdGUpIC8gKDI0ICogNjAgKiA2MCAqIDEwMDApKSk7XHJcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnZGlmZicsIGRpZmZEYXlzKTtcclxuXHJcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnc3R0JywgSlNPTi5zdHJpbmdpZnkodGhpcy5kZWZhdWx0U3RhdHVzTGlzdCkpO1xyXG4gICAgaWYgKHRoaXMub2FjICYmIHRoaXMub2FjICE9IG51bGwgJiYgT2JqZWN0LmtleXModGhpcy5vYWMpLmxlbmd0aCA+IDApIHtcclxuICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ0JJYWN3dCcsIEpTT04uc3RyaW5naWZ5KHRoaXMub2FjKSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnNlbGVjdGVkU3RhdHVzLmZvckVhY2goZWxlMSA9PiB7XHJcbiAgICAgIGxldCBsS2V5ID0gKGVsZTEuaykudG9Mb3dlckNhc2UoKTtcclxuICAgICAgbGV0IGxWYWwgPSBlbGUxLnY7XHJcbiAgICAgIGlmIChsS2V5ID09ICdzb2xkJykge1xyXG4gICAgICAgIHRoaXMuc29sZFN0YXR1cyA9IFsuLi5sVmFsLnNwbGl0KCldO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGxldCB0ZW1wID0gdGhpcy5hcnJheUNvbnZlcnNpb24obFZhbCk7XHJcbiAgICAgICAgdGhpcy5vdGhlclN0YXR1cyA9IHRoaXMub3RoZXJTdGF0dXMuY29uY2F0KHRlbXApO1xyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIFxyXG4gICAgdGhpcy5nZXRTY2hJZCh0aGlzLm90aGVyU3RhdHVzLCB2aWV3KTtcclxuICB9XHJcblxyXG4gIG9uUGVyaW9kQ2hhbmdlKHBlcmlvZCkge1xyXG4gICAgdGhpcy5wZXJpb2QgPSBwZXJpb2Q7XHJcbiAgfVxyXG5cclxuICBnZXRTY2hJZChzdGF0dXMsIHZpZXcpIHtcclxuXHJcbiAvLyBkZWJ1Z2dlclxyXG4gICAgLy8gbGV0IGZyb21EYXRlOiBhbnkgPSBuZXcgRGF0ZSh0aGlzLmZpcnN0LmdldEZ1bGxZZWFyKCksIHRoaXMuZmlyc3QuZ2V0TW9udGgoKSwgdGhpcy5maXJzdC5nZXREYXRlKCkpO1xyXG4gICAgLy8gbGV0IHRvRGF0ZTogYW55ID0gbmV3IERhdGUodGhpcy5zZWNvbmQuZ2V0RnVsbFllYXIoKSwgdGhpcy5zZWNvbmQuZ2V0TW9udGgoKSwgdGhpcy5zZWNvbmQuZ2V0RGF0ZSgpKTtcclxuICAgIC8vIGxldCBmcm1kdCA9IChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncEZyb20nKSBhcyBhbnkpLnZhbHVlO1xyXG4gICAgLy8gbGV0IHRvZHQgPSAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3BUbycpIGFzIGFueSkudmFsdWU7XHJcblxyXG4gICAgLy8gbGV0IGRpZmZEYXlzOiBhbnkgPSBNYXRoLnJvdW5kKE1hdGguYWJzKChmcm1kdCAtIHRvZHQpIC8gKDI0ICogNjAgKiA2MCAqIDEwMDApKSk7XHJcbiAgICAvLyBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnZGlmZicsIGRpZmZEYXlzKTtcclxuXHJcbiAgICBsZXQgY3J0ZnJtID0gKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjcnR3dDAnKSBhcyBhbnkpLnZhbHVlO1xyXG4gICAgbGV0IGNydHRvID0gKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjcnR3dDEnKSBhcyBhbnkpLnZhbHVlO1xyXG5cclxuICAgIGlmIChjcnRmcm0gIT0gbnVsbCAmJiBjcnRmcm0gIT0gdW5kZWZpbmVkICYmIGNydGZybSAhPSBcIlwiICYmIGNydHRvICE9IG51bGwgJiYgY3J0dG8gIT0gdW5kZWZpbmVkICYmIGNydHRvICE9IFwiXCIgJiYgY3J0ZnJtID4gMCAmJiBjcnR0byA+IDApIHtcclxuICAgICAgY3J0ZnJtID0gcGFyc2VGbG9hdChjcnRmcm0pO1xyXG4gICAgICBjcnR0byA9IHBhcnNlRmxvYXQoY3J0dG8pO1xyXG4gICAgICB0aGlzLmF0dHJTdHJ1Y3R1cmVEdGwuZm9yRWFjaChlbGUxID0+IHtcclxuICAgICAgICBlbGUxLmNvbXBvbmVudC5mb3JFYWNoKGVsZTIgPT4ge1xyXG4gICAgICAgICAgaWYgKGVsZTIuYXR0ciA9PSAnY3J0d3QnKSB7XHJcbiAgICAgICAgICAgIGVsZTIudmFsdWVzID0gW2NydGZybSwgY3J0dG9dO1xyXG4gICAgICAgICAgICAvLyB0aGlzLmF0dHIgKz0gZWxlMi5hdHRyICsgXCIjXCI7XHJcbiAgICAgICAgICAgIC8vIHRoaXMuYXR0clR5cGUgKz0gZWxlMi5kYXRhVHlwZSArIFwiI1wiO1xyXG4gICAgICAgICAgICAvLyB0aGlzLmF0dHJWYWwgKz0gZWxlMi52YWx1ZXMuam9pbihcIkBcIikgKyBcIiNcIjtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgdGhpcy5hdHRyTWFrZXIoJ2MnKTtcclxuXHJcbiAgICB9XHJcblxyXG5cclxuICAgZGVidWdnZXJcclxuICAgIGNvbnNvbGUubG9nKFwic3RhdHVzXCIsc3RhdHVzKTtcclxuICAgIGxldCByZXFPYmogPSB7fTtcclxuICAgIHJlcU9ialsnZm9ybU5tZSddID10aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtc1snZnJtbm1lJ107XHJcbiAgICByZXFPYmpbJ2NvdW50J10gPSAnTic7XHJcbiAgICBpZih0aGlzLmF0dHIuaW5kZXhPZigndm5tJyk9PS0xKVxyXG4gICAgICByZXFPYmpbJ3N0YXR1c0xpc3QnXSA9IHN0YXR1cztcclxuICAgICAgaWYodGhpcy5tb2R1bGVuYW1lPT0naW53YXJkJyl7XHJcbiAgICAgIHRoaXMuYXR0cj10aGlzLmF0dHIrXCJwdXIjXCI7XHJcbiAgICAgIHRoaXMuYXR0clR5cGU9dGhpcy5hdHRyVHlwZStcImMjXCI7XHJcbiAgICAgIHRoaXMuYXR0clZhbD10aGlzLmF0dHJWYWwrXCI2MCNcIjtcclxuICAgICAgfVxyXG4gICAgaWYgKHN0YXR1cy5sZW5ndGggIT0gMCkge1xyXG4gICAgIFxyXG4gICAgICByZXFPYmpbJ2F0dHInXSA9IHRoaXMuYXR0ci5lbmRzV2l0aCgnIycpID8gdGhpcy5hdHRyLnNsaWNlKDAsIC0xKSA6IHRoaXMuYXR0cjtcclxuICAgICAgcmVxT2JqWydhdHRyVHlwZSddID0gdGhpcy5hdHRyVHlwZS5lbmRzV2l0aCgnIycpID8gdGhpcy5hdHRyVHlwZS5zbGljZSgwLCAtMSkgOiB0aGlzLmF0dHJUeXBlO1xyXG4gICAgICByZXFPYmpbJ2F0dHJWYWwnXSA9IHRoaXMuYXR0clZhbC5lbmRzV2l0aCgnIycpID8gdGhpcy5hdHRyVmFsLnNsaWNlKDAsIC0xKSA6IHRoaXMuYXR0clZhbDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZ2V0U29sZFNjaElkKHRoaXMuc29sZFN0YXR1cywgdmlldyk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbnNvbGUubG9nKHJlcU9iaik7XHJcbiAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeShyZXFPYmopKTtcclxuXHJcbiAgICB0aGlzLl9zcGlubmVyU2VydmljZS5zaG93KCk7XHJcbiAgICB0aGlzLmJpcy5kYXRhKHJlcU9iaiwgJ3NlYXJjaENvdW50JywgJ21hcmtldGluZy9zZWFyY2gnKVxyXG4gICAgICAuc3Vic2NyaWJlKHJlc3BvbnNlID0+IHtcclxuXHJcbiAgICAgICAgY29uc29sZS5sb2cocmVzcG9uc2UpO1xyXG4gICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT0gJ1NVQ0NFU1MnKSB7XHJcbiAgICAgICAgICB0aGlzLl9zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgICAgICBsZXQgcmVzdWx0ID0gcmVzcG9uc2UucmVzdWx0O1xyXG4gICAgICAgICAgdGhpcy5zY2hJZCA9IHJlc3VsdC5zZWFyY2hJZG47XHJcbiAgICAgICAgICB0aGlzLnNjaElkID0gJyc7XHJcbiAgICAgICAgICBpZih0aGlzLmF0dHIuaW5kZXhPZigndm5tJyk9PS0xKVxyXG4gICAgICAgICAgdGhpcy5zZWFyY2hJZC5wdXNoKHJlc3BvbnNlLnNlYXJjaElkbik7XHJcbiAgICAgICAgICBlbHNle1xyXG4gICAgICAgICAgICB0aGlzLnNlYXJjaElkPVtdO1xyXG4gICAgICAgICAgICB0aGlzLnNlYXJjaElkLnB1c2gocmVzcG9uc2Uuc2VhcmNoSWRuKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChzdGF0dXMubGVuZ3RoICE9IDApIHtcclxuICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ3NyY0lkbnMnLCB0aGlzLnNlYXJjaElkKTtcclxuICAgICAgICAgICAgaWYgKHZpZXcgPT0gJ2cnKSB7XHJcbiAgICAgICAgICAgICAgaWYgKHRoaXMuc29sZFN0YXR1cy5sZW5ndGggIT0gMCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5nZXRTb2xkU2NoSWQodGhpcy5zb2xkU3RhdHVzLCB2aWV3KTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW3RoaXMubW9kdWxlbmFtZSsnL2FuYWx5c2lzLXJlc3VsdC8nK3RoaXMucm91dGUuc25hcHNob3QucGFyYW1zWydmcm1ubWUnXV0pO1xyXG4gICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodmlldyA9PSAncCcpIHtcclxuICAgICAgICAgICAgICBpZiAodGhpcy5zb2xkU3RhdHVzLmxlbmd0aCAhPSAwKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdldFNvbGRTY2hJZCh0aGlzLnNvbGRTdGF0dXMsIHZpZXcpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbdGhpcy5tb2R1bGVuYW1lKycvcGt0LWxpc3QvJyt0aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtc1snZnJtbm1lJ11dKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5fc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgICAgICAgdGhpcy50b2FzdHIuZXJyb3IocmVzcG9uc2UubWVzc2FnZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gIH1cclxuICBnZXRTb2xkU2NoSWQoc3RhdHVzLCB2aWV3KSB7XHJcblxyXG4gICAgbGV0IGNydGZybSA9IChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY3J0d3QwJykgYXMgYW55KS52YWx1ZTtcclxuICAgIGxldCBjcnR0byA9IChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY3J0d3QxJykgYXMgYW55KS52YWx1ZTtcclxuXHJcbiAgICBpZiAoY3J0ZnJtICE9IG51bGwgJiYgY3J0ZnJtICE9IHVuZGVmaW5lZCAmJiBjcnRmcm0gIT0gXCJcIiAmJiBjcnR0byAhPSBudWxsICYmIGNydHRvICE9IHVuZGVmaW5lZCAmJiBjcnR0byAhPSBcIlwiICYmIGNydGZybSA+IDAgJiYgY3J0dG8gPiAwKSB7XHJcbiAgICAgIGNydGZybSA9IHBhcnNlRmxvYXQoY3J0ZnJtKTtcclxuICAgICAgY3J0dG8gPSBwYXJzZUZsb2F0KGNydHRvKTtcclxuICAgICAgdGhpcy5hdHRyU3RydWN0dXJlRHRsLmZvckVhY2goZWxlMSA9PiB7XHJcbiAgICAgICAgZWxlMS5jb21wb25lbnQuZm9yRWFjaChlbGUyID0+IHtcclxuICAgICAgICAgIGlmIChlbGUyLmF0dHIgPT0gJ2NydHd0Jykge1xyXG4gICAgICAgICAgICBlbGUyLnZhbHVlcyA9IFtjcnRmcm0sIGNydHRvXTtcclxuICAgICAgICAgICAgLy8gdGhpcy5hdHRyICs9IGVsZTIuYXR0ciArIFwiI1wiO1xyXG4gICAgICAgICAgICAvLyB0aGlzLmF0dHJUeXBlICs9IGVsZTIuZGF0YVR5cGUgKyBcIiNcIjtcclxuICAgICAgICAgICAgLy8gdGhpcy5hdHRyVmFsICs9IGVsZTIudmFsdWVzLmpvaW4oXCJAXCIpICsgXCIjXCI7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLmF0dHJNYWtlcignYycpO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnQklQZXJpb2QnLCB0aGlzLnBlcmlvZCk7XHJcbiAgICAvLyBpZiAodGhpcy5wT2JqICE9IG51bGwgJiYgdGhpcy5wT2JqICE9IHt9ICYmIHRoaXMuc2NoSWQucE9iaiAhPSB1bmRlZmluZWQpIHtcclxuICAgIC8vICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ0JJcEZyb20nLCBKU09OLnN0cmluZ2lmeSh0aGlzLnBPYmopKTtcclxuICAgIC8vIH1cclxuICAgIGNvbnNvbGUubG9nKHN0YXR1cyk7XHJcbiAgICBsZXQgcmVxT2JqID0ge307XHJcbiAgICByZXFPYmpbJ2Zvcm1ObWUnXSA9dGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXNbJ2ZybW5tZSddO1xyXG5cclxuICAgIC8vIGlmICh0aGlzLnNlbGVjdGVkU3VnZyAhPSB1bmRlZmluZWQpIHtcclxuICAgIC8vICAgcmVxT2JqWydidXllcklkbiddID0gdGhpcy5zZWxlY3RlZFN1Z2c7XHJcbiAgICAvLyB9XHJcblxyXG4gICAgcmVxT2JqWydjb3VudCddID0gJ04nO1xyXG4gICAgcmVxT2JqWydzdGF0dXNMaXN0J10gPSBzdGF0dXM7XHJcbiAgICBpZiAoc3RhdHVzLmxlbmd0aCAhPSAwKSB7XHJcbiAgICAgIGRlYnVnZ2VyXHJcbiAgICAgIGlmICh0aGlzLnBhdHRyICE9ICcnKSB7XHJcbiAgICAgICAgbGV0IHBmcm0gPSAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3BGcm9tJykgYXMgYW55KS52YWx1ZTtcclxuICAgICAgICBsZXQgcHRvID0gKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwVG8nKSBhcyBhbnkpLnZhbHVlO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFwiaW5kZXh2bm1cIix0aGlzLmF0dHIuaW5kZXhPZihcInZubVwiKSlcclxuICAgICAgICBpZiAodGhpcy5wYXR0ciA9PSAnc2FsX2R0ZScgJiYgdGhpcy5hdHRyLmluZGV4T2YoJ3NhbF9kdGUnKSA9PS0xICYmIHRoaXMuYXR0ci5pbmRleE9mKFwidm5tXCIpPT0tMSkge1xyXG4gICAgICAgICAgdGhpcy5hdHRyICs9IHRoaXMucGF0dHI7XHJcbiAgICAgICAgICB0aGlzLmF0dHJUeXBlICs9IHRoaXMucGF0dHJUeXBlO1xyXG5cclxuICAgICAgICAgIGxldCBwMSA9IHBmcm0ucmVwbGFjZSgvLS9nLCAnJyk7XHJcbiAgICAgICAgICBsZXQgcDIgPSBwdG8ucmVwbGFjZSgvLS9nLCAnJyk7XHJcblxyXG5cclxuICAgICAgICAgIHRoaXMuYXR0clZhbCArPSBwMSArICdAJyArIHAyO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuYXR0ci5pbmRleE9mKFwidm5tXCIpPT0tMSAgJiYgdGhpcy5wYXR0ciAhPSAnc2FsX2R0ZScgICYmIHRoaXMucGF0dHIgIT0gJyNzYWxfZHRlJykge1xyXG4gICAgICAgICAgdGhpcy5hdHRyICs9IHRoaXMucGF0dHI7XHJcbiAgICAgICAgICB0aGlzLmF0dHJUeXBlICs9IHRoaXMucGF0dHJUeXBlO1xyXG4gICAgICAgICAgdGhpcy5hdHRyVmFsICs9IHRoaXMucGF0dHJWYWw7XHJcbiAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgICAgLy8gaWYgKHRoaXMuZ1Bmcm9tICE9IG51bGwgJiYgdGhpcy5nUGZyb20gIT0gXCJcIiAmJiB0aGlzLmdQZnJvbSAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgICAvLyAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdCSXBGcm9tJywgSlNPTi5zdHJpbmdpZnkodGhpcy5nUGZyb20pKTtcclxuICAgICAgICAvLyB9XHJcbiAgICAgICAgLy8gaWYgKHRoaXMuZ1B0byAhPSBudWxsICYmIHRoaXMuZ1B0byAhPSBcIlwiICYmIHRoaXMuZ1B0byAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgICAvLyAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdCSXBUbycsIEpTT04uc3RyaW5naWZ5KHRoaXMuZ1B0bykpO1xyXG4gICAgICAgIC8vIH1cclxuXHJcblxyXG4gICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdCSXBGcm9tJywgSlNPTi5zdHJpbmdpZnkocGZybSkpO1xyXG4gICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdCSXBUbycsIEpTT04uc3RyaW5naWZ5KHB0bykpO1xyXG5cclxuXHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRTdWdnICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIHRoaXMuYXR0ciArPSAnI3NhbF9ieXInO1xyXG4gICAgICAgIHRoaXMuYXR0clR5cGUgKz0gJyN0JztcclxuICAgICAgICB0aGlzLmF0dHJWYWwgKz0gJyMnICsgdGhpcy5zZWxlY3RlZFN1Z2c7XHJcblxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodGhpcy5lbXBJZCAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgICAvL3JlcU9ialsnZW1wSWRuJ10gPSB0aGlzLmVtcElkO1xyXG4gICAgICAgIHRoaXMuYXR0ciArPSAnI3NhbF9lbXAnO1xyXG4gICAgICAgIHRoaXMuYXR0clR5cGUgKz0gJyN0JztcclxuICAgICAgICB0aGlzLmF0dHJWYWwgKz0gJyMnICsgdGhpcy5lbXBJZDtcclxuXHJcbiAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ0JJRW1wJywgSlNPTi5zdHJpbmdpZnkodGhpcy5lbXBJZCkpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXFPYmpbJ2F0dHInXSA9IHRoaXMuYXR0ci5lbmRzV2l0aCgnIycpID8gdGhpcy5hdHRyLnNsaWNlKDAsIC0xKSA6IHRoaXMuYXR0cjtcclxuICAgICAgcmVxT2JqWydhdHRyVHlwZSddID0gdGhpcy5hdHRyVHlwZS5lbmRzV2l0aCgnIycpID8gdGhpcy5hdHRyVHlwZS5zbGljZSgwLCAtMSkgOiB0aGlzLmF0dHJUeXBlO1xyXG4gICAgICByZXFPYmpbJ2F0dHJWYWwnXSA9IHRoaXMuYXR0clZhbC5lbmRzV2l0aCgnIycpID8gdGhpcy5hdHRyVmFsLnNsaWNlKDAsIC0xKSA6IHRoaXMuYXR0clZhbDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuc2VhcmNoSWQ9dGhpcy5zZWFyY2hJZHx8W107XHJcbiAgICBjb25zb2xlLmxvZyhyZXFPYmopO1xyXG4gICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkocmVxT2JqKSk7XHJcbiAgICB2YXIgaXNFeGN1dGUgPXRydWU7XHJcbiAgICBpZih0aGlzLmF0dHIuaW5kZXhPZihcInZubVwiKSE9LTEgJiYgdGhpcy5zZWFyY2hJZC5sZW5ndGg+MClcclxuICAgICAgaXNFeGN1dGUgPWZhbHNlO1xyXG4gICAgaWYoaXNFeGN1dGUpe1xyXG4gICAgdGhpcy5fc3Bpbm5lclNlcnZpY2Uuc2hvdygpO1xyXG4gICAgdGhpcy5iaXMuZGF0YShyZXFPYmosICdzZWFyY2hDb3VudCcsICdtYXJrZXRpbmcvc2VhcmNoJylcclxuICAgICAgLnN1YnNjcmliZShyZXNwb25zZSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5sb2cocmVzcG9uc2UpO1xyXG4gICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT0gJ1NVQ0NFU1MnKSB7XHJcbiAgICAgICAgICB0aGlzLl9zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgICAgICBsZXQgcmVzdWx0ID0gcmVzcG9uc2UucmVzdWx0O1xyXG4gICAgICAgICAgdGhpcy5zY2hJZCA9IHJlc3VsdC5zZWFyY2hJZG47XHJcbiAgICAgICAgICAvL3RoaXMuc2NoSWQgPSAnJztcclxuICAgICAgICAgIHRoaXMuY250Kys7XHJcbiAgICAgICAgICB0aGlzLnNlYXJjaElkLnB1c2gocmVzcG9uc2Uuc2VhcmNoSWRuKTtcclxuICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdzcmNJZG5zJywgdGhpcy5zZWFyY2hJZCk7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZyhcInZpZXdcIiwgdmlldyk7XHJcbiAgICAgICAgICBpZiAodmlldyA9PSAnZycpIHtcclxuXHJcbiAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFt0aGlzLm1vZHVsZW5hbWUrJy9hbmFseXNpcy1yZXN1bHQvJyt0aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtc1snZnJtbm1lJ11dKTtcclxuICAgICAgICAgIH0gZWxzZSBpZiAodmlldyA9PSAncCcpIHtcclxuXHJcbiAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFt0aGlzLm1vZHVsZW5hbWUrJy9wa3QtbGlzdC8nK3RoaXMucm91dGUuc25hcHNob3QucGFyYW1zWydmcm1ubWUnXV0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLl9zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcihyZXNwb25zZS5tZXNzYWdlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcblxyXG4gICAgfWVsc2V7XHJcbiAgICAgIGlmICh2aWV3ID09ICdnJykge1xyXG5cclxuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbdGhpcy5tb2R1bGVuYW1lKycvYW5hbHlzaXMtcmVzdWx0LycrdGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXNbJ2ZybW5tZSddXSk7XHJcbiAgICAgIH0gZWxzZSBpZiAodmlldyA9PSAncCcpIHtcclxuXHJcbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW3RoaXMubW9kdWxlbmFtZSsnL3BrdC1saXN0LycrdGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXNbJ2ZybW5tZSddXSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIFxyXG4gIH1cclxuXHJcbiAgYXJyYXlDb252ZXJzaW9uID0gdmFsdWUgPT4gdmFsdWUuc3BsaXQoKTtcclxuXHJcblxyXG4gIGNsZWFyTG9jYWxTdG9yYWdlcygpIHtcclxuICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKCdCSVBlcmlvZCcpO1xyXG4gICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oJ0JJYWN3dCcpO1xyXG4gICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oJ0JJYW5hU3R0Jyk7XHJcbiAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgnQklhbmFTdHRMQkwnKTtcclxuICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKCdCSW1vZGlmeVNlYXJjaFN0cmluZycpO1xyXG4gICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oJ0JJcEZyb20nKTtcclxuICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKCdCSXBUbycpO1xyXG4gICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oJ0JJc2FsZVBlcmlvZCcpO1xyXG4gICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oJ3N0dCcpO1xyXG4gICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oJ2RpZmYnKTtcclxuICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKCdCSWVJZCcpO1xyXG4gICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oJ0JJRW1wJyk7XHJcbiAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgnQklieXInKTtcclxuICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKCdCSWNhbGwnKTtcclxuICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKCdCSUxlZ2VuZHMnKTtcclxuICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKCdCSWNydHd0Jyk7XHJcbiAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgnQkktUEtUX0dST1VQX0JZJyk7XHJcbiAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgnQkktZ3JpZEF2ZycpOyBcclxuICB9XHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLnJvdXRlLnBhcmFtcy5zdWJzY3JpYmUoKHBhcmFtczogUGFyYW1zKSA9PiB7XHJcbiAgICB0aGlzLmRyb3Bkb3duU2V0dGluZ3MgPSB7XHJcbiAgICAgIGVuYWJsZUZpbHRlclNlbGVjdEFsbDogZmFsc2UsXHJcbiAgICAgIHNpbmdsZVNlbGVjdGlvbjogZmFsc2UsXHJcbiAgICAgIHRleHQ6IFwiU2VsZWN0IHNpemVzXCIsXHJcbiAgICAgIHNlbGVjdEFsbFRleHQ6ICdTZWxlY3QgQWxsJyxcclxuICAgICAgdW5TZWxlY3RBbGxUZXh0OiAnVW5TZWxlY3QgQWxsJyxcclxuICAgICAgZW5hYmxlU2VhcmNoRmlsdGVyOiB0cnVlLFxyXG4gICAgICBjbGFzc2VzOiBcIm15Y2xhc3MgY3VzdG9tLWNsYXNzXCIsXHJcbiAgICAgIGVzY2FwZVRvQ2xvc2U6IHRydWVcclxuICAgIH07XHJcbiAgICB0aGlzLmNVcmwgPSB0aGlzLnJvdXRlci51cmw7XHJcbiAgICB0aGlzLm1vZHVsZW5hbWU9dGhpcy5jVXJsLnNwbGl0KCcvJylbMV07XHJcbmxldCBiaUNhbGwgPWxvY2FsU3RvcmFnZS5nZXRJdGVtKCdCSWNhbGwnKSB8fCcnO1xyXG4gICAgaWYgKGJpQ2FsbCAhPSAnJykge1xyXG4gICAgICBpZiAobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ0JJbW9kaWZ5U2VhcmNoU3RyaW5nJykgIT0gbnVsbCkge1xyXG4gICAgICAgIHRoaXMubW9kaWZ5ID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ0JJbW9kaWZ5U2VhcmNoU3RyaW5nJykuc3BsaXQoJywnKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ0JJbW9kaWZ5U2NoVHh0JykgIT0gbnVsbCkge1xyXG4gICAgICAgIHRoaXMubW9kZnl0eHQgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdCSW1vZGlmeVNjaFR4dCcpKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ0JJbW9kaWZ5c3RhdCcpICE9IG51bGwpIHtcclxuICAgICAgICB0aGlzLm1vZGZ5c3RhdCA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdCSW1vZGlmeXN0YXQnKTtcclxuICAgICAgfVxyXG4gICAgICBcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5jbGVhckxvY2FsU3RvcmFnZXMoKTtcclxuICAgIH1cclxuICAgIGNvbnNvbGUubG9nKHRoaXMuYW5hQWxsR3JwU3R0KTtcclxuXHJcbiAgICB0aGlzLmxvYWRBbmFseXNpc1NlYXJjaFBhZ2UoKTtcclxuICB9KTtcclxuXHJcbiAgfVxyXG5cclxufVxyXG5cclxuXHJcbi8vIGxldCByZXNvYmogPSB7fVxyXG4vLyByZXNvYmpbJ2VtcGlkJ10gPSB0aGlzLmVtcElkO1xyXG4vLyByZXNvYmpbJ2J1eWVyaWQnXSA9IHRoaXMuc2VsZWN0ZWRTdWdnO1xyXG4vLyAvLyByZXNvYmpbJ3RybWlkJ10gPSB0aGlzLnRybS5idXllcl90ZXJtc19pZG47XHJcbi8vIHJlc29ialsnZXhyYXRlJ10gPSB0aGlzLnRybS54cnRlO1xyXG4vLyBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgncmVzcmVxcGFyYScsIEpTT04uc3RyaW5naWZ5KHJlc29iaikpO1xyXG4vLyBpZiAodGhpcy5zZWFyY2hEZXNjLmxlbmd0aCA+IDEpIHtcclxuLy8gICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnc3JjSWRucycsIEpTT04uc3RyaW5naWZ5KHRoaXMuc2VhcmNoRGVzYykpO1xyXG4vLyAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdyZXNyZXFwYXJhJywgSlNPTi5zdHJpbmdpZnkocmVzb2JqKSlcclxuLy8gICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy9zb2xpdGFpcmVzL3Jlc3VsdC8nLCAnc3RvY2tSZXN1bHRGb3JtJ10pOy8vdGhpcy5zY2hJZFxyXG4vLyB9XHJcbi8vIGVsc2Uge1xyXG4vLyAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdyZXNyZXFwYXJhJywgSlNPTi5zdHJpbmdpZnkocmVzb2JqKSlcclxuLy8gICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnc3JjSWRucycsIEpTT04uc3RyaW5naWZ5KHRoaXMuc2VhcmNoRGVzYykpO1xyXG4vLyAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL3NvbGl0YWlyZXMvcmVzdWx0LycsICdzdG9ja1Jlc3VsdEZvcm0nXSk7XHJcbi8vIH0iLCI8ZGl2IGNsYXNzPVwibXRcIj5cclxuICA8ZGl2IGNsYXNzPVwicGFuZWwgcGFuZWwtZGVmYXVsdFwiPlxyXG4gICAgPGRpdiBjbGFzcz1cInBhbmVsLWhlYWRpbmdcIj5cclxuICAgICAgPGgzIGNsYXNzPVwicGFuZWwtdGl0bGVcIj5BbmFseXNpcyBTZWFyY2hcclxuICAgICAgICA8c3BhbiBjbGFzcz1cImYtMTJcIj4oe3tjcy5jRGF0ZSB8IGRhdGU6J21lZGl1bSd9fSk8L3NwYW4+XHJcbiAgICAgIDwvaDM+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuICA8ZGl2IGNsYXNzPVwiY29udGVudC1mcmFtZVwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbnRlbnQtZnJhbWUtYm9keVwiIHN0eWxlPVwibWFyZ2luLWxlZnQ6MDtcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cInBhbmVsIHBhbmVsLWRlZmF1bHRcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicGFuZWwtYm9keVwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImluZm9TZWNcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTJcIj5cclxuICAgICAgICAgICAgICAgIDxmb3JtIGNsYXNzPVwiZm9ybS1pbmxpbmVcIiB0YXJnZXQ9XCJfYmxhbmtcIj5cclxuICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwidGV4dC1jYXBpdGFsaXplIGxibGNvbG9yXCI+IDxzdHJvbmc+U3RhdHVzOiA8L3N0cm9uZz4gPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgPHVsIGNsYXNzPVwidWxjbGFzc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsaSAqbmdGb3I9XCJsZXQgc3RhdHVzIG9mIHN0YXR1c0xpc3RcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzdGF0dXMuayAhPSAnJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgaWQ9XCJ7e3N0YXR1cz8ua319XCIgdHlwZT1cImNoZWNrYm94XCIgbmFtZT1cImFuYVN0YXR1c1wiIHZhbHVlPVwie3tzdGF0dXM/LnZ9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJnZXRWYWwoc3RhdHVzLCAkZXZlbnQudGFyZ2V0LmNoZWNrZWQpO1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwie3tzdGF0dXM/LnZ9fVwiIGNsYXNzPVwidGV4dC1jYXBpdGFsaXplXCI+ICZuYnNwO3t7c3RhdHVzPy5rfX08L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgICAgICAgJm5ic3A7XHJcbiAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInRleHQtY2FwaXRhbGl6ZSBsYmxjb2xvclwiPiA8c3Ryb25nPkVtcGxveWVlOiA8L3N0cm9uZz4gPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgJm5ic3A7XHJcbiAgICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBuYW1lPVwiZW1wbG95ZWVcIiBbKG5nTW9kZWwpXT1cImVtcElkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbj5TZWxlY3QgPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgZW1wbG95ZWUgb2YgZW1wbG95ZWVzXCIgdmFsdWU9XCJ7e2VtcGxveWVlPy5rfX1cIj57e2VtcGxveWVlPy52fX1cclxuICAgICAgICAgICAgICAgICAgICA8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICZuYnNwO1xyXG4gICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJ0ZXh0LWNhcGl0YWxpemUgbGJsY29sb3JcIj4gPHN0cm9uZz5CdXllcjogPC9zdHJvbmc+IDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICZuYnNwO1xyXG4gICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVwid2lkdGg6MjAwcHg7ZGlzcGxheTogaW5saW5lLWJsb2NrO1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1zZWxlY3Qgc3R5bGU9XCJ6LWluZGV4OiA1O1wiIHBsYWNlaG9sZGVyPVwiU2VsZWN0IEJ1eWVyc1wiIFthbGxvd0NsZWFyXT1cInRydWVcIiBbb3B0aW9uc109XCJidXllcnNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJzZWxlY3RlZFN1Z2dcIiBuYW1lPVwiYnV5ZXJcIiAoZmlsdGVySW5wdXRDaGFuZ2VkKT1cImdldEJ1eWVycygkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgIChzZWxlY3RlZCk9XCJvbnNlbGVjdChzZWxlY3RlZFN1Z2cpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy1zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAmbmJzcDtcclxuICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwidGV4dC1jYXBpdGFsaXplIGxibGNvbG9yXCIgKm5nSWY9XCJzaG93dmVuZGVyXCI+IDxzdHJvbmc+VmVuZGVyOiA8L3N0cm9uZz4gPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgJm5ic3A7XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJ3aWR0aDoyMDBweDtkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XCIgKm5nSWY9XCJzaG93dmVuZGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLXNlbGVjdCBzdHlsZT1cInotaW5kZXg6IDU7XCIgcGxhY2Vob2xkZXI9XCJTZWxlY3QgVmVuZGVyXCIgW2FsbG93Q2xlYXJdPVwidHJ1ZVwiIFtvcHRpb25zXT1cInZlbmRlckxpc3RcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJ2ZW5kZXJcIiBuYW1lPVwidmVuZGVyXCIgKGZpbHRlcklucHV0Q2hhbmdlZCk9XCJnZXRWZW5kZXIoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy1zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8IS0tIChzZWxlY3RlZCk9XCJnZXRUZXJtcyhzZWxlY3RlZFN1Z2cpXCIgLS0+XHJcbiAgICAgICAgICAgICAgICA8L2Zvcm0+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4+IDxzdHJvbmc+IFBlcmlvZDogPC9zdHJvbmc+IDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJ3aWR0aDogMTE1cHg7ZGlzcGxheTogaW5saW5lLWJsb2NrO1wiPlxyXG4gICAgICAgICAgICAgICAgICA8IS0tIDxpbnB1dCB0eXBlPVwibnVtYmVyXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiB2YWx1ZT1cIjFcIiBbKG5nTW9kZWwpXT1cInBlcmlvZFwiIC8+IC0tPlxyXG4gICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1jb250cm9sXCIgWyhuZ01vZGVsKV09XCJwZXJpb2RcIiAoY2hhbmdlKT1cIm9uUGVyaW9kQ2hhbmdlKHBlcmlvZClcIj5cclxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uPlNlbGVjdCA8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBiaSBvZiBiaVBlcmlvZExpc3RcIiB2YWx1ZT1cInt7Ymk/Lmt9fVwiPnt7Ymk/LnZ9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBlcmlvZGljc2NoXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwZXJpb2RpY2RhdGVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3Ryb25nPlAxPC9zdHJvbmc+XHJcbiAgICAgICAgICAgICAgICAgICAgRnJvbSA8aW5wdXQgdHlwZT1cImRhdGVcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIGlkPVwicEZyb21cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgKGJsdXIpPVwiYWRkRGF0ZSgkZXZlbnQudGFyZ2V0LnZhbHVlLDAsJ3AxJyk7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgVG8gPGlucHV0IHR5cGU9XCJkYXRlXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBpZD1cInBUb1wiIChibHVyKT1cImFkZERhdGUoJGV2ZW50LnRhcmdldC52YWx1ZSwxLCdwMScpO1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICZuYnNwOyZuYnNwO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tIDxzdHJvbmc+UDI8L3N0cm9uZz5cclxuICAgICAgICAgICAgICAgICAgICBGcm9tIDxpbnB1dCB0eXBlPVwiZGF0ZVwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgKGNoYW5nZSk9XCJhZGREYXRlKCRldmVudC50YXJnZXQudmFsdWUsMCwncDInKTtcIj5cclxuICAgICAgICAgICAgICAgICAgICBUbyA8aW5wdXQgdHlwZT1cImRhdGVcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIChjaGFuZ2UpPVwiYWRkRGF0ZSgkZXZlbnQudGFyZ2V0LnZhbHVlLDEsJ3AyJyk7XCI+IC0tPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cInBlcmlvZGljZGF0ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzdHJvbmc+UDM8L3N0cm9uZz5cclxuICAgICAgICAgICAgICAgICAgICBGcm9tIDxpbnB1dCB0eXBlPVwiZGF0ZVwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgKGNoYW5nZSk9XCJhZGREYXRlKCRldmVudC50YXJnZXQudmFsdWUsMCwncDMnKTtcIj5cclxuICAgICAgICAgICAgICAgICAgICBUbyA8aW5wdXQgdHlwZT1cImRhdGVcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIChjaGFuZ2UpPVwiYWRkRGF0ZSgkZXZlbnQudGFyZ2V0LnZhbHVlLDEsICdwMycpO1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICZuYnNwOyZuYnNwO1xyXG4gICAgICAgICAgICAgICAgICAgIDxzdHJvbmc+UDQ8L3N0cm9uZz5cclxuICAgICAgICAgICAgICAgICAgICBGcm9tIDxpbnB1dCB0eXBlPVwiZGF0ZVwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgKGNoYW5nZSk9XCJhZGREYXRlKCRldmVudC50YXJnZXQudmFsdWUsMCwncDQnKTtcIj5cclxuICAgICAgICAgICAgICAgICAgICBUbyA8aW5wdXQgdHlwZT1cImRhdGVcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIChjaGFuZ2UpPVwiYWRkRGF0ZSgkZXZlbnQudGFyZ2V0LnZhbHVlLDEsJ3A0Jyk7XCI+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PiAtLT5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBlcmlvZGljc2NoXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxzdHJvbmc+U2FsZSBEYXlzPC9zdHJvbmc+XHJcbiAgICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBpZD1cInNhbGVQZXJpb2RcIiBbKG5nTW9kZWwpXT1cInNhbGVQZXJpb2RcIlxyXG4gICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPW9uQ2hhbmdlU2FsZVBlcmlvZChzYWxlUGVyaW9kKT5cclxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBkYXlzIG9mIGJpX3NhbGVfZHlzXCIgdmFsdWU9XCJ7e2RheXMua319XCI+e3tkYXlzLnZ9fTwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cclxuXHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VhcmNoc2VjXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFic3NlY1wiPlxyXG4gICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJuYXYgbmF2LXRhYnNcIiBzdHlsZT1cIm1hcmdpbjogMTBweCAwO1wiIHJvbGU9XCJ0YWJsaXN0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxpIHJvbGU9XCJwcmVzZW50YXRpb25cIiAqbmdGb3I9XCJsZXQgYXR0clN0cnVjdHVyZSBvZiBhdHRyU3RydWN0dXJlRHRsO1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY3Muc2Nyb2xsVG9EaXYoYXR0clN0cnVjdHVyZS5ncnApXCI+PGEgaHJlZj1cIiN7e2F0dHJTdHJ1Y3R1cmUuZ3JwfX1cIiBhcmlhLWNvbnRyb2xzPVwiaG9tZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvbGU9XCJ0YWJcIiBkYXRhLXRvZ2dsZT1cInRhYlwiPnt7YXR0clN0cnVjdHVyZS5ncnB9fTwvYT48L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2NoY3JhdGVyaWFcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT1cIm1hcmdpbi1ib3R0b206IDEwcHg7XCIgaWQ9XCJ7e2F0dHJTdHJ1Y3R1cmUuZ3JwfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBhdHRyU3RydWN0dXJlIG9mIGF0dHJTdHJ1Y3R1cmVEdGw7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImdycGhlYWRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGg2Pnt7YXR0clN0cnVjdHVyZS5ncnB9fTwvaDY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgYXR0Y29tcG8gb2YgYXR0clN0cnVjdHVyZS5jb21wb25lbnQ7bGV0IGkgPSBpbmRleFwiPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD1cInt7YXR0clN0cnVjdHVyZS5ncnB9fVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbnRyb2wtbGFiZWwgaGVhZGVycyBjb2wtbWQtMSB0ZXh0LXJpZ2h0XCIgKm5nSWY9XCJhdHRjb21wby5hdHRyID09ICdjdCdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJtYXJnaW4tdG9wOiAxMHB4O1wiPkNQUzwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMVwiICpuZ0lmPVwiYXR0Y29tcG8uYXR0ciA9PSAnY3QnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwib3ZlcmZsb3cteDogYXV0bzt3aGl0ZS1zcGFjZTogbm93cmFwO21hcmdpbi10b3A6IDEwcHg7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2stYnV0dG9uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJvdXRDaGtDbHNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgc3R5bGU9XCJtYXJnaW4tYm90dG9tOiAwO1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGlkPVwib25lXCIgY2xhc3M9XCJwcm50Y2hrXCIgW2Rpc2FibGVkXT1cIm9uZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3RFbGUoMCAsICRldmVudC50YXJnZXQuY2hlY2tlZCk7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj4zRVg8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cImNrLWJ1dHRvblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJvdXRDaGtDbHNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBzdHlsZT1cIm1hcmdpbi1ib3R0b206IDA7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBpZD1cInR3b1wiIGNsYXNzPVwicHJudGNoa1wiIFtkaXNhYmxlZF09XCJ0d29cIiAoY2xpY2spPVwic2VsZWN0RWxlKDEgLCAkZXZlbnQudGFyZ2V0LmNoZWNrZWQpO1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj4yRVg8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2stYnV0dG9uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJvdXRDaGtDbHNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgc3R5bGU9XCJtYXJnaW4tYm90dG9tOiAwO1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGlkPVwidGh2Z3VwXCIgY2xhc3M9XCJwcm50Y2hrXCIgW2Rpc2FibGVkXT1cInRodmd1cFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3RFbGUoMyAsICRldmVudC50YXJnZXQuY2hlY2tlZCk7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj48Yj4gJnVhcnI7PC9iPiAzVkc8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgXHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgc3R5bGU9XCJtYXJnaW4tdG9wOjE1cHg7XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cInsnbWFyZ2luLXRvcCc6KChhdHRjb21wby5kYXRhVHlwZSA9PSAndCcgJiYgYXR0Y29tcG8uYXR0cj09J3ZubScpIHx8IGF0dGNvbXBvLmRhdGFUeXBlID09ICdkJyB8fCBhdHRjb21wby5kYXRhVHlwZSA9PSAnbicgKT8nMzBweCc6JzE1cHgnfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInB1bGwtcmlnaHRcIj57e2F0dGNvbXBvLnByaW50fX08L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC17e2F0dGNvbXBvLmRpc3BsYXlUeXBlfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cInsnb3ZlcmZsb3cteCcgOiBhdHRjb21wby5hdHRyID09ICdzeicgPyAndW5zZXQnOiAnYXV0byd9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cIm1hcmdpbi10b3A6IDEwcHg7d2hpdGUtc3BhY2U6IG5vd3JhcDtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDxzcGFuIGlkPVwibHt7YXR0Y29tcG8uYXR0cn19XCIgY2xhc3M9XCJidXR0b24gbGFyclwiICpuZ0lmPVwiYXR0Y29tcG8uZGF0YVR5cGUgPT0gJ2MnICYmIGF0dGNvbXBvLmF0dHIgIT0gJ3N6J1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwibGVmdFNjcm9sbChhdHRjb21wby5hdHRyKycnK2F0dGNvbXBvLmRhdGFUeXBlKVwiPjxpIHN0eWxlPVwiZm9udC1zaXplOiAxNnB4O2NvbG9yOiAjM2I1OTk4O1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmEgZmEtY2hldnJvbi1sZWZ0XCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVwib3ZlcmZsb3cteDogYXV0bztcIiBjbGFzcz1cInt7YXR0Y29tcG8uYXR0cisnJythdHRjb21wby5kYXRhVHlwZX19XCIgaWQ9XCJzY3Jfe3thdHRjb21wby5kaXNwbGF5VHlwZSsnJythdHRjb21wby5hdHRyKycnK2F0dGNvbXBvLmRhdGFUeXBlfX1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHBycExzdCBvZiBhdHRjb21wby5wcnBMaXN0O2xldCBpID1pbmRleFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVwiZGlzcGxheTogaW5saW5lLWJsb2NrO1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjay1idXR0b25cIiAqbmdJZj1cImF0dGNvbXBvLmRhdGFUeXBlID09ICdjJyAmJiBhdHRjb21wby5hdHRyICE9ICdzeidcIiBpZD1cInt7YXR0Y29tcG8uYXR0cisnXycrcHJwTHN0LnNvcnR9fVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm91dENoa0Nsc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgc3R5bGU9XCJtYXJnaW4tYm90dG9tOiAwO1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiB2YWx1ZT1cInt7cHJwTHN0LnNvcnR9fVwiIG5hbWU9XCJ7e3BycExzdC5zb3J0fX1cIiBpZD1cInt7YXR0Y29tcG8uYXR0cisnXycrcHJwTHN0LnZhbH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjaGVja0JveEZ1bihhdHRjb21wbywgcHJwTHN0LnNvcnQsICRldmVudC50YXJnZXQuY2hlY2tlZCxhdHRjb21wby5hdHRyKydfJytwcnBMc3QudmFsKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7cHJwTHN0LnByaW50fX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBpZD1cInJ7e2F0dGNvbXBvLmF0dHJ9fVwiIGNsYXNzPVwiYnV0dG9uIHJhcnJcIiAqbmdJZj1cImF0dGNvbXBvLmRhdGFUeXBlID09ICdjJyAmJiBhdHRjb21wby5hdHRyICE9ICdzeidcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInJpZ2h0U2Nyb2xsKGF0dGNvbXBvLmF0dHIrJycrYXR0Y29tcG8uZGF0YVR5cGUpXCI+PGkgc3R5bGU9XCJmb250LXNpemU6IDE2cHg7Y29sb3I6ICMzYjU5OTg7XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmYSBmYS1jaGV2cm9uLXJpZ2h0XCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPjwvc3Bhbj4gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gaWQ9XCJse3thdHRjb21wby5hdHRyfX1cIiBjbGFzcz1cImJ1dHRvbiBsYXJyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiYXR0Y29tcG8uZGF0YVR5cGUgPT0gJ2MnICYmIGF0dGNvbXBvLmF0dHIgIT0gJ3N6J1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwibGVmdFNjcm9sbChhdHRjb21wby5hdHRyKycnK2F0dGNvbXBvLmRhdGFUeXBlKVwiPjxpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiZm9udC1zaXplOiAxNnB4O2NvbG9yOiAjM2I1OTk4O1wiIGNsYXNzPVwiZmEgZmEtY2hldnJvbi1sZWZ0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVwib3ZlcmZsb3cteDogaGlkZGVuO1wiIGNsYXNzPVwie3thdHRjb21wby5hdHRyKycnK2F0dGNvbXBvLmRhdGFUeXBlfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJzY3Jfe3thdHRjb21wby5kaXNwbGF5VHlwZSsnJythdHRjb21wby5hdHRyKycnK2F0dGNvbXBvLmRhdGFUeXBlfX1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjay1idXR0b25cIiAqbmdJZj1cImF0dGNvbXBvLmRhdGFUeXBlID09ICdjJyAmJiBhdHRjb21wby5hdHRyICE9ICdzeidcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwib3V0Q2hrQ2xzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgc3R5bGU9XCJtYXJnaW4tYm90dG9tOiAwO1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgW2NoZWNrZWRdPVwiY2hrXCIgaWQ9XCJhbGx7e2F0dGNvbXBvLmF0dHJ9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdEFsbChhdHRjb21wbywgJGV2ZW50KTtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+QWxsPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHBycExzdCBvZiBhdHRjb21wby5wcnBMaXN0O2xldCBpID1pbmRleFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVwiZGlzcGxheTogaW5saW5lLWJsb2NrO1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjay1idXR0b25cIiAqbmdJZj1cImF0dGNvbXBvLmRhdGFUeXBlID09ICdjJyAmJiBhdHRjb21wby5hdHRyICE9ICdzeidcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJ7e2F0dGNvbXBvLmF0dHIrJ18nK3BycExzdC5zb3J0fX1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJvdXRDaGtDbHNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIHN0eWxlPVwibWFyZ2luLWJvdHRvbTogMDtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgdmFsdWU9XCJ7e3BycExzdC5zb3J0fX1cIiBuYW1lPVwie3twcnBMc3Quc29ydH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwie3thdHRjb21wby5hdHRyKydfJytwcnBMc3QudmFsfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImNoZWNrQm94RnVuKGF0dGNvbXBvLCBwcnBMc3Quc29ydCwgJGV2ZW50LnRhcmdldC5jaGVja2VkLGF0dGNvbXBvLmF0dHIrJ18nK3BycExzdC52YWwpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3twcnBMc3QucHJpbnR9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGlkPVwicnt7YXR0Y29tcG8uYXR0cn19XCIgY2xhc3M9XCJidXR0b24gcmFyclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImF0dGNvbXBvLmRhdGFUeXBlID09ICdjJyAmJiBhdHRjb21wby5hdHRyICE9ICdzeidcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInJpZ2h0U2Nyb2xsKGF0dGNvbXBvLmF0dHIrJycrYXR0Y29tcG8uZGF0YVR5cGUpXCI+PGlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJmb250LXNpemU6IDE2cHg7Y29sb3I6ICMzYjU5OTg7XCIgY2xhc3M9XCJmYSBmYS1jaGV2cm9uLXJpZ2h0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiYXR0Y29tcG8uYXR0ciA9PSAnc3onXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cInsnbWFyZ2luLXRvcCcgOiBhdHRjb21wby5hdHRyID09ICdzeicgPyAnLTIwcHgnIDogJzAnfVwiPlxyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDxuZy1zZWxlY3QgcGxhY2Vob2xkZXI9XCJTZWxlY3QgU2l6ZXNcIiBpZD1cInt7YXR0Y29tcG8uYXR0cn19XCIgW29wdGlvbnNdPVwiYXR0Y29tcG8ucHJwTGlzdFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwic3pwcnBcIiBuYW1lPVwie3thdHRjb21wby5hdHRyfX1cIiBbbXVsdGlwbGVdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkZXNlbGVjdGVkKT1cIm11bHRpc2VsZWN0KGF0dGNvbXBvLHN6cHJwKVwiIChzZWxlY3RlZCk9XCJtdWx0aXNlbGVjdChhdHRjb21wbyxzenBycClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYWxsb3dDbGVhcl09XCJ0cnVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjb3B0aW9uVGVtcGxhdGUgbGV0LW9wdGlvbj1cIm9wdGlvblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmYW1mYW1mYW0tZmxhZ3Mge3tvcHRpb24/LnZhbHVlLnRvTG93ZXJDYXNlKCl9fVwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7b3B0aW9uPy5sYWJlbH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXNlbGVjdD4gLS0+XHJcblxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhbmd1bGFyMi1tdWx0aXNlbGVjdCBbZGF0YV09XCJhdHRjb21wby5wcnBMaXN0XCIgWyhuZ01vZGVsKV09XCJzenBycFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzZXR0aW5nc109XCJkcm9wZG93blNldHRpbmdzXCIgKG9uU2VsZWN0KT1cIm11bHRpc2VsZWN0KGF0dGNvbXBvLHN6cHJwKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvbkRlU2VsZWN0KT1cIm11bHRpc2VsZWN0KGF0dGNvbXBvLHN6cHJwKVwiIChvblNlbGVjdEFsbCk9XCJtdWx0aXNlbGVjdChhdHRjb21wbyxzenBycClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob25EZVNlbGVjdEFsbCk9XCJkZXNlbGVjdChhdHRjb21wbyxzenBycClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYW5ndWxhcjItbXVsdGlzZWxlY3Q+XHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT1cIm92ZXJmbG93LXg6IGhpZGRlbjtcIiAqbmdJZj1cImF0dGNvbXBvLmRhdGFUeXBlID09ICduJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZm9ybS1jb250cm9sLXNtXCIgaWQ9XCJ7e2F0dGNvbXBvLmF0dHIrJycrMH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwie3thdHRjb21wby5hdHRyfX1cIiAoY2hhbmdlKT1cImFkZGl0aW9uYWwoYXR0Y29tcG8sJGV2ZW50LDAsICdjd3J0bScpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkZyb21cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCIgc3R5bGU9XCJtYXJnaW46IDA7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZm9ybS1jb250cm9sLXNtXCIgaWQ9XCJ7e2F0dGNvbXBvLmF0dHIrMX19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwie3thdHRjb21wby5hdHRyfX1cIiAoY2hhbmdlKT1cImFkZGl0aW9uYWwoYXR0Y29tcG8sJGV2ZW50LDEsICdjd3J0bScpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlRvXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPHNwYW4gKm5nSWY9XCJhdHRjb21wby5hdHRyID09ICdjcnR3dCdcIiBjbGFzcz1cImFkZGJ0blwiIChjbGljayk9XCJhZGRDd3J0KCk7XCI+PGkgW25nQ2xhc3NdPVwidGcgPT0gdHJ1ZSA/ICdmYSBmYS1taW51cycgOiAnZmEgZmEtcGx1cydcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiYXR0Y29tcG8uYXR0ciA9PSAnY3J0d3QnICYmIHRnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bCBjbGFzcz1cImFkZGl0aW9uYWxEaXZcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgKm5nRm9yPVwibGV0IHd0ZyBvZiB3dGdBcnJ5O2xldCBpID0gaW5kZXhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7aSsxfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIChjaGFuZ2UpPVwiYWRkaXRpb25hbCh3dGcsICRldmVudCwgMCwgJ2N3cnRjJylcIiBzdHlsZT1cImJvcmRlci1yYWRpdXM6IDJweDtib3JkZXI6IDFweCBzb2xpZCAjYzljOWM5O2hlaWdodDogMjVweDtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyA8aW5wdXQgdHlwZT1cInRleHRcIiAoY2hhbmdlKT1cImFkZGl0aW9uYWwod3RnLCAkZXZlbnQsIDEsJ2N3cnRjJylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cImJvcmRlci1yYWRpdXM6IDJweDtib3JkZXI6IDFweCBzb2xpZCAjYzljOWM5O2hlaWdodDogMjVweDtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJhdHRjb21wby5kYXRhVHlwZSA9PSAndCdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGV4dGFyZWEgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZm9ybS1jb250cm9sLXNtXCIgaWQ9XCJ7e2F0dGNvbXBvLmF0dHIrJycrMH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwie3thdHRjb21wby5hdHRyfX1cIiAoY2hhbmdlKT1cInNpbmdsZVZhbChhdHRjb21wbywkZXZlbnQudGFyZ2V0LnZhbHVlLCAndCcpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xzPVwiNTBcIiByb3dzPVwiM1wiPjwvdGV4dGFyZWE+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDxpbnB1dCB0eXBlPVwidGV4dFwiIGlkPVwie3thdHRjb21wby5hdHRyKycnKzB9fVwiIHN0eWxlPVwid2lkdGg6MjAlXCIgbmFtZT1cInt7YXR0Y29tcG8uYXR0cn19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cInNpbmdsZVZhbChhdHRjb21wbywkZXZlbnQudGFyZ2V0LnZhbHVlLCAndCcpXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZm9ybS1jb250cm9sLXNtXCI+IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDxkaXYgKm5nSWY9XCJhdHRjb21wby5kYXRhVHlwZSA9PSAnZCdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiZGF0ZVwiIGlkPVwie3thdHRjb21wby5hdHRyKycnKzB9fVwiIG5hbWU9XCJ7e2F0dGNvbXBvLmF0dHJ9fVwiIChibHVyKT1cInNpbmdsZVZhbChhdHRjb21wbywkZXZlbnQudGFyZ2V0LnZhbHVlLCAwKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZm9ybS1jb250cm9sLXNtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4gLS0+XHJcblxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiYXR0Y29tcG8uZGF0YVR5cGUgPT0gJ2QnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1yb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgY29sLW1kLTZcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImRhdGVcIiAjdG9kdGUgaWQ9XCJ7e2F0dGNvbXBvLmF0dHIrJycrMH19XCIgbmFtZT1cInt7YXR0Y29tcG8uYXR0cn19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiRnJvbVwiIGNsYXNzPVwiZm9ybS1jb250cm9sIGZvcm0tY29udHJvbC1zbVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgY29sLW1kLTZcIiBzdHlsZT1cIm1hcmdpbjogMDtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImRhdGVcIiBpZD1cInt7YXR0Y29tcG8uYXR0cisnJysxfX1cIiBuYW1lPVwie3thdHRjb21wby5hdHRyfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGJsdXIpPVwib25EYXRlQ2hhbmdlKGF0dGNvbXBvLCRldmVudC50YXJnZXQudmFsdWUsMSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZm9ybS1jb250cm9sLXNtXCIgcGxhY2Vob2xkZXI9XCJUb1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiKGkrMSklMz09MFwiIHN0eWxlPVwiY2xlYXI6Ym90aFwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicGFnZWZvb3RlclwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCI+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiPlxyXG4gICAgICAgICAgICAgICAgICA8Zm9ybSBjbGFzcz1cImZvcm0taW5saW5lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB1bGwtcmlnaHRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic2NoQ291bnRcIiAqbmdJZj1cImNvdW50ID4gJzAnXCI+Q291bnQgOiB7e2NvdW50fX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1jb250cm9sXCIgbmFtZT1cInZpZXdHcnBcIiBbKG5nTW9kZWwpXT1cInZpZXdHcnBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbj5TZWxlY3QgR3JvdXA8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgZ3JvdXAgb2YgZ3JvdXBzXCIgW25nVmFsdWVdPVwiZ3JvdXBcIj57e2dyb3VwLm5hbWV9fTwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+ICZuYnNwO1xyXG4gICAgICAgICAgICAgICAgICAgICAgPCEtLSA8c2VsZWN0IGNsYXNzPVwiZm9ybS1jb250cm9sXCIgbmFtZT1cInZpZXdGb3JtYXRlXCIgWyhuZ01vZGVsKV09XCJ2aWV3Rm9ybWF0ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uPlNlbGVjdCA8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgdmlldyBvZiB2aWV3T3B0aW9uc1wiIHZhbHVlPVwie3t2aWV3Py5mb3JtX2ZpZWxkfX1cIj57e3ZpZXc/LmZvcm1fZmllbGRfdGl0bGV9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PiAmbmJzcDsgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8IS0tIDxhIGNsYXNzPVwiYnRuIGJ0bi1zdWNjZXNzXCIgKGNsaWNrKT1cInZpZXdSZXN1bHQoKTtcIiB0YXJnZXQ9XCJfYmxhbmtcIj5TdWJtaXQ8L2E+IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPCEtLSBbKG5nTW9kZWwpXT1cInZpZXdGb3JtYXRlXCIgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCB2aWV3IG9mIHZpZXdPcHRpb25zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwiYnRuIGJ0bi1zdWNjZXNzXCIgKGNsaWNrKT1cInZpZXdSZXN1bHQodmlldy5mb3JtX2ZpZWxkKTtcIiAgdGFyZ2V0PVwiX2JsYW5rXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cIm1hcmdpbi1yaWdodDogMTVweDtcIj57e3ZpZXc/LmZvcm1fZmllbGRfdGl0bGV9fTwvYT5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZm9ybT5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PiJdfQ==