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.
- package/esm2020/ezlibrary_v2.mjs +5 -0
- package/esm2020/lib/admin-service/admin-service.service.mjs +36 -0
- package/esm2020/lib/analysis-search/analysis-search.component.mjs +1083 -0
- package/esm2020/lib/assort-service/assort-service.service.mjs +31 -0
- package/esm2020/lib/attribute-definition/attribute-definition.component.mjs +231 -0
- package/esm2020/lib/auth/auth.guard.mjs +40 -0
- package/esm2020/lib/bi-service/bi.service.mjs +58 -0
- package/esm2020/lib/call-info/callinfo.component.mjs +126 -0
- package/esm2020/lib/comman-service/comman-service.service.mjs +679 -0
- package/esm2020/lib/comman-service/share-data-service.service.mjs +23 -0
- package/esm2020/lib/contact-search/contact-search.component.mjs +679 -0
- package/esm2020/lib/contact-service/contact-service.service.mjs +47 -0
- package/esm2020/lib/ezheader/header.component.mjs +383 -0
- package/esm2020/lib/ezlib.module.mjs +220 -0
- package/esm2020/lib/file-upload/fileupload.component.mjs +920 -0
- package/esm2020/lib/file-upload-log/file-upload-log.component.mjs +175 -0
- package/esm2020/lib/fileupload-module/fileupload-dashboard/fileupload-dashboard.component.mjs +14 -0
- package/esm2020/lib/fileupload-module/fileupload-routing.module.mjs +28 -0
- package/esm2020/lib/footer/footer.component.mjs +18 -0
- package/esm2020/lib/globle/common-pdf.service.mjs +28 -0
- package/esm2020/lib/globle/globle-env.service.mjs +45 -0
- package/esm2020/lib/globle/memo-report.service.mjs +2800 -0
- package/esm2020/lib/globle/pdf-service.service.mjs +18848 -0
- package/esm2020/lib/globle/shared-services.service.mjs +27 -0
- package/esm2020/lib/globle/upload-service.service.mjs +69 -0
- package/esm2020/lib/header/header.component.mjs +179 -0
- package/esm2020/lib/invalid/invalid.component.mjs +71 -0
- package/esm2020/lib/logout/logout.component.mjs +107 -0
- package/esm2020/lib/menu-right/menu-right.component.mjs +252 -0
- package/esm2020/lib/pipes/number-with-commas.pipe.mjs +24 -0
- package/esm2020/lib/pipes/order-by-pipe.pipe.mjs +17 -0
- package/esm2020/lib/pipes/selectedCount.mjs +19 -0
- package/esm2020/lib/pipes/sum.pipe.mjs +16 -0
- package/esm2020/lib/pkt-data/pkt-data.component.mjs +1107 -0
- package/esm2020/lib/pricing-service/pricing.service.mjs +58 -0
- package/esm2020/lib/qa-analysis/qa-analysis.component.mjs +1035 -0
- package/esm2020/lib/report-format/report-format.component.mjs +400 -0
- package/esm2020/lib/sessionend/session-end.guard.mjs +28 -0
- package/esm2020/lib/stock-service/lazyload.service.mjs +21 -0
- package/esm2020/lib/stock-service/stock-service.service.mjs +62 -0
- package/esm2020/lib/system-module/subform/subform.component.mjs +2481 -0
- package/esm2020/lib/system-module/system/system.component.mjs +959 -0
- package/esm2020/lib/system-module/system-service/system-service.service.mjs +85 -0
- package/esm2020/lib/system-module/system-service/upload-file.service.mjs +86 -0
- package/esm2020/lib/utility/app-no-dbl-click.directive.mjs +23 -0
- package/esm2020/lib/utility/constants.mjs +5 -0
- package/esm2020/lib/utility/contact-table-search.pipe.mjs +25 -0
- package/esm2020/lib/utility/formate-num-field.pipe.mjs +19 -0
- package/esm2020/lib/utility/search-pipe.pipe.mjs +26 -0
- package/esm2020/lib/utility/selective-preloading-strategy.mjs +23 -0
- package/esm2020/lib/utility/table-search.pipe.mjs +25 -0
- package/esm2020/lib/utility/tranform.directive.mjs +27 -0
- package/esm2020/lib/websearch-history/websearch-history.component.mjs +273 -0
- package/esm2020/public_api.mjs +57 -0
- package/ezlibrary_v2.d.ts +5 -0
- package/fesm2015/ezlibrary_v2.mjs +33543 -0
- package/fesm2015/ezlibrary_v2.mjs.map +1 -0
- package/fesm2020/ezlibrary_v2.mjs +33533 -0
- package/fesm2020/ezlibrary_v2.mjs.map +1 -0
- package/lib/admin-service/admin-service.service.d.ts +13 -0
- package/lib/analysis-search/analysis-search.component.d.ts +122 -0
- package/lib/assort-service/assort-service.service.d.ts +12 -0
- package/lib/attribute-definition/attribute-definition.component.d.ts +47 -0
- package/lib/auth/auth.guard.d.ts +16 -0
- package/lib/bi-service/bi.service.d.ts +20 -0
- package/lib/call-info/callinfo.component.d.ts +30 -0
- package/lib/comman-service/comman-service.service.d.ts +111 -0
- package/lib/comman-service/share-data-service.service.d.ts +10 -0
- package/lib/contact-search/contact-search.component.d.ts +115 -0
- package/lib/contact-service/contact-service.service.d.ts +15 -0
- package/lib/ezheader/header.component.d.ts +61 -0
- package/lib/ezlib.module.d.ts +47 -0
- package/lib/file-upload/fileupload.component.d.ts +131 -0
- package/lib/file-upload-log/file-upload-log.component.d.ts +53 -0
- package/lib/fileupload-module/fileupload-dashboard/fileupload-dashboard.component.d.ts +8 -0
- package/lib/fileupload-module/fileupload-routing.module.d.ts +7 -0
- package/lib/footer/footer.component.d.ts +9 -0
- package/lib/globle/common-pdf.service.d.ts +9 -0
- package/lib/globle/globle-env.service.d.ts +16 -0
- package/lib/globle/memo-report.service.d.ts +107 -0
- package/lib/globle/pdf-service.service.d.ts +459 -0
- package/lib/globle/shared-services.service.d.ts +12 -0
- package/lib/globle/upload-service.service.d.ts +20 -0
- package/lib/header/header.component.d.ts +45 -0
- package/lib/invalid/invalid.component.d.ts +12 -0
- package/lib/logout/logout.component.d.ts +21 -0
- package/lib/menu-right/menu-right.component.d.ts +47 -0
- package/lib/pipes/number-with-commas.pipe.d.ts +7 -0
- package/lib/pipes/order-by-pipe.pipe.d.ts +7 -0
- package/lib/pipes/selectedCount.d.ts +7 -0
- package/lib/pipes/sum.pipe.d.ts +7 -0
- package/lib/pkt-data/pkt-data.component.d.ts +189 -0
- package/lib/pricing-service/pricing.service.d.ts +20 -0
- package/lib/qa-analysis/qa-analysis.component.d.ts +99 -0
- package/lib/report-format/report-format.component.d.ts +74 -0
- package/lib/sessionend/session-end.guard.d.ts +10 -0
- package/lib/stock-service/lazyload.service.d.ts +7 -0
- package/lib/stock-service/stock-service.service.d.ts +19 -0
- package/lib/system-module/subform/subform.component.d.ts +227 -0
- package/lib/system-module/system/system.component.d.ts +113 -0
- package/lib/system-module/system-service/system-service.service.d.ts +23 -0
- package/lib/system-module/system-service/upload-file.service.d.ts +12 -0
- package/lib/utility/app-no-dbl-click.directive.d.ts +7 -0
- package/lib/utility/constants.d.ts +4 -0
- package/lib/utility/contact-table-search.pipe.d.ts +7 -0
- package/lib/utility/formate-num-field.pipe.d.ts +7 -0
- package/lib/utility/search-pipe.pipe.d.ts +7 -0
- package/lib/utility/selective-preloading-strategy.d.ts +9 -0
- package/lib/utility/table-search.pipe.d.ts +7 -0
- package/lib/utility/tranform.directive.d.ts +10 -0
- package/lib/websearch-history/websearch-history.component.d.ts +62 -0
- package/package.json +48 -0
- 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\"> {{status?.k}}</label>\r\n </ng-container>\r\n </li>\r\n </ul>\r\n \r\n <label class=\"text-capitalize lblcolor\"> <strong>Employee: </strong> </label>\r\n \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 \r\n <label class=\"text-capitalize lblcolor\"> <strong>Buyer: </strong> </label>\r\n \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 \r\n <label class=\"text-capitalize lblcolor\" *ngIf=\"showvender\"> <strong>Vender: </strong> </label>\r\n \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 \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 \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> ↑</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 <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> \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> -->\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\"> {{status?.k}}</label>\r\n </ng-container>\r\n </li>\r\n </ul>\r\n \r\n <label class=\"text-capitalize lblcolor\"> <strong>Employee: </strong> </label>\r\n \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 \r\n <label class=\"text-capitalize lblcolor\"> <strong>Buyer: </strong> </label>\r\n \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 \r\n <label class=\"text-capitalize lblcolor\" *ngIf=\"showvender\"> <strong>Vender: </strong> </label>\r\n \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 \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 \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> ↑</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 <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> \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> -->\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==
|