@adins/ucviewgeneric 2.3.3 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/README.md +12 -4
  2. package/adins-ucviewgeneric.d.ts +1 -0
  3. package/esm2020/adins-ucviewgeneric.mjs +5 -0
  4. package/esm2020/lib/model/uc-view-generic-obj.model.mjs +29 -0
  5. package/esm2020/lib/ucviewgeneric.component.mjs +418 -0
  6. package/esm2020/lib/ucviewgeneric.module.mjs +34 -0
  7. package/esm2020/lib/ucviewgeneric.service.mjs +14 -0
  8. package/esm2020/public-api.mjs +7 -0
  9. package/fesm2015/adins-ucviewgeneric.mjs +495 -0
  10. package/fesm2015/adins-ucviewgeneric.mjs.map +1 -0
  11. package/fesm2020/adins-ucviewgeneric.mjs +495 -0
  12. package/fesm2020/adins-ucviewgeneric.mjs.map +1 -0
  13. package/lib/model/uc-view-generic-obj.model.d.ts +2 -0
  14. package/lib/ucviewgeneric.component.d.ts +6 -0
  15. package/lib/ucviewgeneric.module.d.ts +9 -0
  16. package/lib/ucviewgeneric.service.d.ts +3 -0
  17. package/package.json +24 -13
  18. package/adins-ucviewgeneric.metadata.json +0 -1
  19. package/bundles/adins-ucviewgeneric.umd.js +0 -643
  20. package/bundles/adins-ucviewgeneric.umd.js.map +0 -1
  21. package/bundles/adins-ucviewgeneric.umd.min.js +0 -2
  22. package/bundles/adins-ucviewgeneric.umd.min.js.map +0 -1
  23. package/esm2015/adins-ucviewgeneric.js +0 -9
  24. package/esm2015/lib/model/envi-obj.model.js +0 -17
  25. package/esm2015/lib/model/uc-view-generic-obj.model.js +0 -63
  26. package/esm2015/lib/ucviewgeneric.component.js +0 -557
  27. package/esm2015/lib/ucviewgeneric.module.js +0 -25
  28. package/esm2015/lib/ucviewgeneric.service.js +0 -18
  29. package/esm2015/public-api.js +0 -11
  30. package/esm5/adins-ucviewgeneric.js +0 -9
  31. package/esm5/lib/model/envi-obj.model.js +0 -19
  32. package/esm5/lib/model/uc-view-generic-obj.model.js +0 -71
  33. package/esm5/lib/ucviewgeneric.component.js +0 -613
  34. package/esm5/lib/ucviewgeneric.module.js +0 -29
  35. package/esm5/lib/ucviewgeneric.service.js +0 -21
  36. package/esm5/public-api.js +0 -11
  37. package/fesm2015/adins-ucviewgeneric.js +0 -585
  38. package/fesm2015/adins-ucviewgeneric.js.map +0 -1
  39. package/fesm5/adins-ucviewgeneric.js +0 -646
  40. package/fesm5/adins-ucviewgeneric.js.map +0 -1
  41. package/lib/model/envi-obj.model.d.ts +0 -5
@@ -0,0 +1,418 @@
1
+ import { Component, Input, Output, EventEmitter } from '@angular/core';
2
+ import { ActivatedRoute } from '@angular/router';
3
+ import { HttpClient } from '@angular/common/http';
4
+ import { UcViewGenericObj } from './model/uc-view-generic-obj.model';
5
+ import { TranslateService } from '@ngx-translate/core';
6
+ import { CookieService } from 'ngx-cookie';
7
+ import * as CryptoJS from 'crypto-js';
8
+ import * as i0 from "@angular/core";
9
+ import * as i1 from "@angular/router";
10
+ import * as i2 from "@angular/common/http";
11
+ import * as i3 from "@ngx-translate/core";
12
+ import * as i4 from "ngx-cookie";
13
+ import * as i5 from "@adins/uc-subsection";
14
+ import * as i6 from "@angular/common";
15
+ export class UcviewgenericComponent {
16
+ constructor(route, http, translateService, cookieService) {
17
+ this.route = route;
18
+ this.http = http;
19
+ this.translateService = translateService;
20
+ this.cookieService = cookieService;
21
+ this.viewGenericObj = new UcViewGenericObj();
22
+ this.callback = new EventEmitter();
23
+ this.UserAccess = JSON.parse(this.GetCookie(this.cookieService, "UserAccess"));
24
+ this.viewList = "";
25
+ this.isReady = false;
26
+ this.IsCard = true;
27
+ this.route.queryParams.subscribe(params => {
28
+ this.getList = params;
29
+ });
30
+ this.translateService.setDefaultLang('en');
31
+ this.translateService.use(localStorage.getItem('lang') || 'en');
32
+ }
33
+ ngOnInit() {
34
+ console.log("viewgeneric");
35
+ this.initiateForm();
36
+ this.CheckIsCard();
37
+ }
38
+ CheckIsCard() {
39
+ if (this.viewGenericObj.IsCard == undefined || this.viewGenericObj.IsCard == null)
40
+ return;
41
+ this.IsCard = this.viewGenericObj.IsCard;
42
+ }
43
+ initiateForm() {
44
+ if (this.viewGenericObj.dataInput !== undefined) {
45
+ this.setConfiguration(this.viewGenericObj.dataInput);
46
+ return;
47
+ }
48
+ this.getJSON(this.viewGenericObj.viewInput).subscribe(data => {
49
+ this.setConfiguration(data);
50
+ });
51
+ }
52
+ setConfiguration(data) {
53
+ this.viewList = data;
54
+ this.viewInfoObjList = [];
55
+ for (let j = 0; j < this.viewList.subsection.length; j++) {
56
+ this.viewInfoObjList.push(j);
57
+ }
58
+ for (let i = 0; i < this.viewList.subsection.length; i++) {
59
+ if (this.viewList.subsection[i].querystring != null) {
60
+ let queryObj;
61
+ if (this.viewGenericObj.whereValue.length == 0) {
62
+ this.viewList.subsection[i].querystring.whereQuery = Object.values(this.getList);
63
+ }
64
+ else {
65
+ this.viewList.subsection[i].querystring.whereQuery = this.viewGenericObj.whereValue;
66
+ }
67
+ if (this.viewList.subsection[i].mainInfoPath != undefined && this.viewList.subsection[i].mainInfoPath != "") {
68
+ if (this.viewGenericObj.viewEnvironment != undefined && this.viewGenericObj.viewEnvironment != "") {
69
+ this.viewList.subsection[i].fullpath = this.viewGenericObj.viewEnvironment + this.viewList.subsection[i].mainInfoPath;
70
+ }
71
+ else {
72
+ this.viewList.subsection[i].fullpath = this.viewList.subsection[i].mainInfoUrl;
73
+ }
74
+ }
75
+ else {
76
+ this.viewList.subsection[i].fullpath = this.viewList.subsection[i].mainInfoUrl;
77
+ }
78
+ queryObj = {
79
+ querystring: this.viewList.subsection[i].querystring
80
+ };
81
+ this.http.post(this.viewList.subsection[i].fullpath, queryObj).subscribe((response) => {
82
+ this.viewInfoObjList[i] = response["Data"][0];
83
+ for (let y = 0; y < this.viewList.subsection[i].mainInfo.length; y++) {
84
+ if (this.viewList.subsection[i].mainInfo[y].propertyList != undefined && this.viewList.subsection[i].mainInfo[y].propertyList.length != 0) {
85
+ const propertyList = this.viewList.subsection[i].mainInfo[y].propertyList;
86
+ let concat = "";
87
+ for (let z = 0; z < propertyList.length; z++) {
88
+ concat = concat + propertyList[z].prefix + this.viewInfoObjList[i][propertyList[z].property] + propertyList[z].suffix;
89
+ }
90
+ this.viewList.subsection[i].mainInfo[y].concat = concat;
91
+ }
92
+ //switch case
93
+ if (this.viewList.subsection[i].mainInfo[y].type == "switch") {
94
+ for (let z = 0; z < this.viewList.subsection[i].mainInfo[y].case.length; z++) {
95
+ let Empty = new Array();
96
+ this.viewList.subsection[i].mainInfo[y].case[z].Hidden = false;
97
+ //check hideIfEmpty
98
+ if (this.viewList.subsection[i].mainInfo[y].case[z].result.hideIfEmpty != undefined && this.viewList.subsection[i].mainInfo[y].case[z].result.hideIfEmpty != null) {
99
+ if (this.viewList.subsection[i].mainInfo[y].case[z].result.type != "concat") {
100
+ Empty.push(this.viewInfoObjList[i][this.viewList.subsection[i].mainInfo[y].case[z].result.property] != undefined
101
+ && this.viewInfoObjList[i][this.viewList.subsection[i].mainInfo[y].case[z].result.property] != null
102
+ && this.viewInfoObjList[i][this.viewList.subsection[i].mainInfo[y].case[z].result.property] != "" ? false : true);
103
+ }
104
+ else { // type concat
105
+ if (this.viewList.subsection[i].mainInfo[y].case[z].result.propertyList != undefined && this.viewList.subsection[i].mainInfo[y].case[z].result.propertyList.length != 0) {
106
+ const propertyList = this.viewList.subsection[i].mainInfo[y].case[z].result.propertyList;
107
+ let concat = "";
108
+ for (let a = 0; a < propertyList.length; a++) {
109
+ concat = concat + propertyList[a].prefix + this.viewInfoObjList[i][propertyList[a].property] + propertyList[a].suffix;
110
+ Empty.push(this.viewInfoObjList[i][propertyList[a].property] != undefined
111
+ && this.viewInfoObjList[i][propertyList[a].property] != null
112
+ && this.viewInfoObjList[i][propertyList[a].property] != "" ? false : true);
113
+ }
114
+ this.viewList.subsection[i].mainInfo[y].case[z].result.concat = concat;
115
+ }
116
+ }
117
+ if (Empty.includes(true) && this.viewList.subsection[i].mainInfo[y].case[z].result.hideIfEmpty) {
118
+ this.viewList.subsection[i].mainInfo[y].case[z].Hidden = true;
119
+ this.viewList.subsection[i].mainInfo[y].isHide = true;
120
+ }
121
+ }
122
+ else {
123
+ //concat
124
+ if (this.viewList.subsection[i].mainInfo[y].case[z].result.propertyList != undefined && this.viewList.subsection[i].mainInfo[y].case[z].result.propertyList.length != 0) {
125
+ const propertyList = this.viewList.subsection[i].mainInfo[y].case[z].result.propertyList;
126
+ let concat = "";
127
+ for (let a = 0; a < propertyList.length; a++) {
128
+ concat = concat + propertyList[a].prefix + this.viewInfoObjList[i][propertyList[a].property] + propertyList[a].suffix;
129
+ }
130
+ this.viewList.subsection[i].mainInfo[y].case[z].result.concat = concat;
131
+ }
132
+ }
133
+ }
134
+ }
135
+ if (this.viewList.subsection[i].mainInfo[y].type == "link" && (this.viewGenericObj.navigationConst != undefined || this.viewGenericObj.navigationConst != null)) {
136
+ let tempLink = this.viewGenericObj.navigationConst[this.viewList.subsection[i].mainInfo[y].path];
137
+ if (tempLink != undefined && tempLink != null) {
138
+ this.viewList.subsection[i].mainInfo[y].path = tempLink;
139
+ }
140
+ }
141
+ if (this.viewList.subsection[i].mainInfo[y].type == "link"
142
+ && this.viewGenericObj.listEnvironments != undefined && this.viewGenericObj.listEnvironments.length != 0) {
143
+ for (let z = 0; z < this.viewGenericObj.listEnvironments.length; z++) {
144
+ if (this.viewList.subsection[i].mainInfo[y].environment == this.viewGenericObj.listEnvironments[z].environment) {
145
+ this.viewList.subsection[i].mainInfo[y].isFullpath = true;
146
+ this.viewList.subsection[i].mainInfo[y].fullpath = this.viewGenericObj.listEnvironments[z].url + this.viewList.subsection[i].mainInfo[y].path;
147
+ break;
148
+ }
149
+ }
150
+ }
151
+ else if (this.viewList.subsection[i].mainInfo[y].type == "link") {
152
+ this.viewList.subsection[i].mainInfo[y].isFullpath = false;
153
+ this.viewList.subsection[i].mainInfo[y].fullpath = this.viewList.subsection[i].mainInfo[y].path;
154
+ }
155
+ }
156
+ this.isReady = true;
157
+ }, (error) => {
158
+ console.log(error);
159
+ });
160
+ }
161
+ else {
162
+ if (this.viewList.subsection[i].mainInfoPath != undefined && this.viewList.subsection[i].mainInfoPath != "") {
163
+ if (this.viewGenericObj.viewEnvironment != undefined && this.viewGenericObj.viewEnvironment != "") {
164
+ this.viewList.subsection[i].fullpath = this.viewGenericObj.viewEnvironment + this.viewList.subsection[i].mainInfoPath;
165
+ }
166
+ else {
167
+ this.viewList.subsection[i].fullpath = this.viewList.subsection[i].mainInfoUrl;
168
+ }
169
+ }
170
+ else {
171
+ this.viewList.subsection[i].fullpath = this.viewList.subsection[i].mainInfoUrl;
172
+ }
173
+ this.http.post(this.viewList.subsection[i].fullpath, this.getList).subscribe((response) => {
174
+ this.viewInfoObjList[i] = response["Data"];
175
+ }, (error) => {
176
+ console.log(error);
177
+ });
178
+ }
179
+ }
180
+ }
181
+ getJSON(url) {
182
+ return this.http.get(url);
183
+ }
184
+ GetCookie(cookieService, key) {
185
+ let value = cookieService.get(key);
186
+ if (value == undefined || value.trim() == '')
187
+ return null;
188
+ return this.DecryptString(value, "AdInsFOU12345678");
189
+ }
190
+ DecryptString(chipperText, chipperKey) {
191
+ if (chipperKey == undefined || chipperKey.trim() == '' ||
192
+ chipperText == undefined || chipperText.trim() == '')
193
+ return chipperText;
194
+ let chipperKeyArr = CryptoJS.enc.Utf8.parse(chipperKey);
195
+ let iv = CryptoJS.lib.WordArray.create([0x00, 0x00, 0x00, 0x00]);
196
+ let decrypted = CryptoJS.AES.decrypt(chipperText, chipperKeyArr, { iv: iv });
197
+ let plainText = decrypted.toString(CryptoJS.enc.Utf8);
198
+ return plainText;
199
+ }
200
+ genAction(viewObj, param) {
201
+ let arrList = {};
202
+ for (let i = 0; i < param.length; i++) {
203
+ if (viewObj[param[i].type] != undefined || viewObj[param[i].property] != undefined) {
204
+ arrList[param[i].type] = viewObj[param[i].property];
205
+ }
206
+ else {
207
+ arrList[param[i].type] = param[i].property;
208
+ }
209
+ }
210
+ return arrList;
211
+ }
212
+ genRouterLink(urlLink) {
213
+ let tempLink = urlLink;
214
+ if (this.viewGenericObj.navigationConst != undefined && this.viewGenericObj.navigationConst[urlLink] != null) {
215
+ tempLink = this.viewGenericObj.navigationConst[urlLink];
216
+ }
217
+ return tempLink;
218
+ }
219
+ redirectFullPath(fullpath, param, target) {
220
+ let queryParam = "";
221
+ const ListObj = Object.keys(param);
222
+ for (let i = 0; i < ListObj.length; i++) {
223
+ if (queryParam != "") {
224
+ queryParam = queryParam + "&" + ListObj[i] + "=" + param[ListObj[i]];
225
+ }
226
+ else {
227
+ queryParam = ListObj[i] + "=" + param[ListObj[i]];
228
+ }
229
+ }
230
+ window.open(fullpath + "?" + queryParam, target);
231
+ }
232
+ callbackFunction(item, key = "") {
233
+ let CBObj = {
234
+ ViewObj: item,
235
+ Key: key
236
+ };
237
+ this.callback.emit(CBObj);
238
+ }
239
+ switchCase(item, condList) {
240
+ let condition = false;
241
+ if (!item)
242
+ return false;
243
+ for (let i = 0; i < condList.conditions.length; i++) {
244
+ if (condList.conditions[i].restriction == "EQ") {
245
+ if (condList.conditions[i].isUser != true) {
246
+ if (item[condList.conditions[i].property] == condList.conditions[i].value) {
247
+ condition = true;
248
+ }
249
+ else {
250
+ condition = false;
251
+ break;
252
+ }
253
+ }
254
+ else {
255
+ if (item[condList.conditions[i].property] == this.UserAccess["UserName"]) {
256
+ condition = true;
257
+ }
258
+ else {
259
+ condition = false;
260
+ break;
261
+ }
262
+ }
263
+ }
264
+ else if (condList.conditions[i].restriction == "NEQ") {
265
+ if (condList.conditions[i].isUser != true) {
266
+ if (item[condList.conditions[i].property] != condList.conditions[i].value) {
267
+ condition = true;
268
+ }
269
+ else {
270
+ condition = false;
271
+ break;
272
+ }
273
+ }
274
+ else {
275
+ if (item[condList.conditions[i].property] != this.UserAccess["UserName"]) {
276
+ condition = true;
277
+ }
278
+ else {
279
+ condition = false;
280
+ break;
281
+ }
282
+ }
283
+ }
284
+ else if (condList.conditions[i].restriction == "GT") {
285
+ if (condList.conditions[i].isUser != true) {
286
+ if (item[condList.conditions[i].property] > condList.conditions[i].value) {
287
+ condition = true;
288
+ }
289
+ else {
290
+ condition = false;
291
+ break;
292
+ }
293
+ }
294
+ else {
295
+ if (item[condList.conditions[i].property] > this.UserAccess["UserName"]) {
296
+ condition = true;
297
+ }
298
+ else {
299
+ condition = false;
300
+ break;
301
+ }
302
+ }
303
+ }
304
+ else if (condList.conditions[i].restriction == "GTE") {
305
+ if (condList.conditions[i].isUser != true) {
306
+ if (item[condList.conditions[i].property] >= condList.conditions[i].value) {
307
+ condition = true;
308
+ }
309
+ else {
310
+ condition = false;
311
+ break;
312
+ }
313
+ }
314
+ else {
315
+ if (item[condList.conditions[i].property] >= this.UserAccess["UserName"]) {
316
+ condition = true;
317
+ }
318
+ else {
319
+ condition = false;
320
+ break;
321
+ }
322
+ }
323
+ }
324
+ else if (condList.conditions[i].restriction == "LT") {
325
+ if (condList.conditions[i].isUser != true) {
326
+ if (item[condList.conditions[i].property] < condList.conditions[i].value) {
327
+ condition = true;
328
+ }
329
+ else {
330
+ condition = false;
331
+ break;
332
+ }
333
+ }
334
+ else {
335
+ if (item[condList.conditions[i].property] < this.UserAccess["UserName"]) {
336
+ condition = true;
337
+ }
338
+ else {
339
+ condition = false;
340
+ break;
341
+ }
342
+ }
343
+ }
344
+ else if (condList.conditions[i].restriction == "LTE") {
345
+ if (condList.conditions[i].isUser != true) {
346
+ if (item[condList.conditions[i].property] <= condList.conditions[i].value) {
347
+ condition = true;
348
+ }
349
+ else {
350
+ condition = false;
351
+ break;
352
+ }
353
+ }
354
+ else {
355
+ if (item[condList.conditions[i].property] <= this.UserAccess["UserName"]) {
356
+ condition = true;
357
+ }
358
+ else {
359
+ condition = false;
360
+ break;
361
+ }
362
+ }
363
+ }
364
+ else if (condList.conditions[i].restriction == "IN") {
365
+ if (condList.conditions[i].isUser != true) {
366
+ if (condList.conditions[i].value.findIndex(x => x == item[condList.conditions[i].property]) >= 0) {
367
+ condition = true;
368
+ }
369
+ else {
370
+ condition = false;
371
+ break;
372
+ }
373
+ }
374
+ else {
375
+ if (condList.conditions[i].value.findIndex(x => x == this.UserAccess["UserName"]) >= 0) {
376
+ condition = true;
377
+ }
378
+ else {
379
+ condition = false;
380
+ break;
381
+ }
382
+ }
383
+ }
384
+ else if (condList.conditions[i].restriction == "NIN") {
385
+ if (condList.conditions[i].isUser != true) {
386
+ if (condList.conditions[i].value.findIndex(x => x == item[condList.conditions[i].property]) == -1) {
387
+ condition = true;
388
+ }
389
+ else {
390
+ condition = false;
391
+ break;
392
+ }
393
+ }
394
+ else {
395
+ if (condList.conditions[i].value.findIndex(x => x == this.UserAccess["UserName"]) == -1) {
396
+ condition = true;
397
+ }
398
+ else {
399
+ condition = false;
400
+ break;
401
+ }
402
+ }
403
+ }
404
+ }
405
+ return condition;
406
+ }
407
+ }
408
+ /** @nocollapse */ UcviewgenericComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: UcviewgenericComponent, deps: [{ token: i1.ActivatedRoute }, { token: i2.HttpClient }, { token: i3.TranslateService }, { token: i4.CookieService }], target: i0.ɵɵFactoryTarget.Component });
409
+ /** @nocollapse */ UcviewgenericComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: UcviewgenericComponent, selector: "lib-ucviewgeneric", inputs: { viewGenericObj: "viewGenericObj" }, outputs: { callback: "callback" }, ngImport: i0, template: "<section id=\"horizontal-form-layouts\">\r\n <div class=\"row text-left\">\r\n <div class=\"col-md-12\">\r\n <div [ngClass]=\"IsCard ? 'card' : ''\" *ngIf=\"isReady\">\r\n <div class=\"pl-3 mb-2 mt-2\" *ngIf=\"viewList?.title != ''\">\r\n <h4 class=\"card-title ucSearch-title\" id=\"horz-layout-colored-controls\" translate>{{viewList.title}}</h4>\r\n </div>\r\n <div class=\"card-body\" *ngFor=\"let ss of viewList?.subsection;let i = index;\">\r\n <div class=\"px-3\">\r\n <lib-ucSubsection *ngIf=\"ss.subsection != ''\" [id]=\"ss.subSectionId + 'id'\" [title]=\"ss.subSectionTitle\"\r\n [panel]=\"ss.subSectionId\">\r\n </lib-ucSubsection>\r\n <div class=\"form-body\" [id]='ss.subSectionId'>\r\n <div class=\"form-group row\">\r\n <div *ngFor=\"let mi of ss?.mainInfo\"\r\n [ngClass]=\"{ 'col-md-6': mi.isHide == undefined || !mi.isHide || (viewInfoObjList[i][mi.property] != '' && viewInfoObjList[i][mi.property] != null)}\">\r\n <span\r\n *ngIf=\"mi.isHide == undefined || !mi.isHide || (viewInfoObjList[i][mi.property] != '' && viewInfoObjList[i][mi.property] != null)\">\r\n <div class=\"row\">\r\n <div class=\"col-md-6\" *ngIf=\"mi.type != 'switch'\">\r\n <label class=\"label-control\"\r\n [ngClass]=\"mi.customClassLabel != undefined ? mi.customClassLabel : ''\" translate>{{mi.label}}</label>\r\n </div>\r\n <div class=\"col-md-6\" *ngIf=\"mi.type == 'switch'\">\r\n <div *ngFor=\"let case of mi?.case\">\r\n <div *ngIf=\"switchCase(viewInfoObjList[i],case)\">\r\n <label class=\"label-control\"\r\n [ngClass]=\"mi.customClassLabel != undefined ? mi.customClassLabel : ''\" translate>{{case.result.label}}</label>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"viewInfoObjList[i] != undefined\" class=\"col-md-6\" [ngClass]=\"{ 'text-left': mi.position == 'left',\r\n 'text-right': mi.position == 'right', 'text-center': mi.position == 'center' }\">\r\n <span\r\n *ngIf=\"(mi.type == 'boolean' && viewInfoObjList[i][mi.property] != null) || (viewInfoObjList[i][mi.property] != '' && viewInfoObjList[i][mi.property] != null) || mi.type == 'switch' || mi.type =='concat'; then nonEmptyLabel else emptyLabel\"></span>\r\n <ng-template #emptyLabel>\r\n <label class=\"label-control\"\r\n [ngClass]=\"mi.customClassProperty != undefined ? mi.customClassProperty : ''\"\r\n translate>-</label>\r\n </ng-template>\r\n <ng-template #nonEmptyLabel>\r\n <span *ngIf=\"mi.type == 'text'\">\r\n <label\r\n *ngIf=\"viewInfoObjList[i][mi.property] != '' && viewInfoObjList[i][mi.property] != null\"\r\n class=\"label-control breakword\"\r\n [ngClass]=\"mi.customClassProperty != undefined ? mi.customClassProperty : ''\" translate>\r\n {{ viewInfoObjList[i][mi.property] }}\r\n </label>\r\n <label\r\n *ngIf=\"viewInfoObjList[i][mi.property] == '' || viewInfoObjList[i][mi.property] == null\"\r\n class=\"label-control\"\r\n [ngClass]=\"mi.customClassProperty != undefined ? mi.customClassProperty : ''\" translate>-\r\n </label>\r\n </span>\r\n <label *ngIf=\"mi.type == 'currency'\" class=\"label-control\"\r\n [ngClass]=\"mi.customClassProperty != undefined ? mi.customClassProperty : ''\" translate>\r\n {{ viewInfoObjList[i][mi.property] | number: mi?.precision ? mi?.precision : '0.2' :'en-US'}} <span *ngIf=\"mi?.IsPrcnt\">&nbsp;%</span> </label>\r\n <label *ngIf=\"mi.type == 'date'\" class=\"label-control\"\r\n [ngClass]=\"mi.customClassProperty != undefined ? mi.customClassProperty : ''\" translate>\r\n {{ viewInfoObjList[i][mi.property] | date: (mi?.dateFormat) ? mi?.dateFormat : 'dd-MMM-yyyy'}} </label>\r\n <label *ngIf=\"mi.type == 'link'\" class=\"label-control\"\r\n [ngClass]=\"mi.customClassProperty != undefined ? mi.customClassProperty : ''\" translate>\r\n <a *ngIf=\"!mi?.isFullpath\" [routerLink]=\"genRouterLink(mi.path)\" [target]=\"mi.target\"\r\n [queryParams]=\"genAction(viewInfoObjList[i], mi.param)\">\r\n <span *ngIf=\"(mi.isCurrency != undefined && mi.isCurrency)\">{{\r\n viewInfoObjList[i][mi.property] | number:'.2':'en-US' }}</span>\r\n <span *ngIf=\"(mi.isCurrency == undefined || !mi.isCurrency)\">{{\r\n viewInfoObjList[i][mi.property] }}</span>\r\n </a>\r\n <a *ngIf=\"mi?.isFullpath\" href=\"javascript:void(0);\"\r\n (click)=\"redirectFullPath(mi.fullpath, genAction(viewInfoObjList[i], mi.param), mi.target)\">\r\n <span *ngIf=\"(mi.isCurrency != undefined && mi.isCurrency)\">{{\r\n viewInfoObjList[i][mi.property] | number:'.2':'en-US' }}</span>\r\n <span *ngIf=\"(mi.isCurrency == undefined || !mi.isCurrency)\">{{\r\n viewInfoObjList[i][mi.property] }}</span>\r\n </a>\r\n </label>\r\n <label *ngIf=\"mi.type == 'callback'\" class=\"label-control\"\r\n [ngClass]=\"mi.customClassProperty != undefined ? mi.customClassProperty : ''\" translate>\r\n <a href=\"javascript:void(0);\" (click)=\"callbackFunction(viewInfoObjList[i], mi.key)\">\r\n {{ viewInfoObjList[i][mi.property] }}\r\n </a>\r\n </label>\r\n <textarea *ngIf=\"mi.type == 'textarea'\" class=\"form-control\" readonly\r\n [ngClass]=\"mi.customClassProperty != undefined ? mi.customClassProperty : ''\"\r\n translate> {{ viewInfoObjList[i][mi.property] }} </textarea>\r\n <span *ngIf=\"mi.type == 'boolean'\"\r\n [ngClass]=\"mi.customClassProperty != undefined ? mi.customClassProperty : ''\" translate>\r\n <label *ngIf=\"viewInfoObjList[i][mi.property] == true\">Yes</label>\r\n <label *ngIf=\"viewInfoObjList[i][mi.property] == false\">No</label>\r\n <!-- <label\r\n *ngIf=\"viewInfoObjList[i][mi.property] == '' || viewInfoObjList[i][mi.property] == null\">-</label> -->\r\n </span>\r\n <span *ngIf=\"mi.type == 'concat'\">\r\n <label class=\"label-control breakword\"\r\n [ngClass]=\"mi.customClassProperty != undefined ? mi.customClassProperty : ''\" translate>\r\n {{ mi.concat }}\r\n </label>\r\n </span>\r\n <span *ngIf=\"mi.type == 'switch'\">\r\n <span *ngFor=\"let cs of mi?.case\">\r\n <span *ngIf=\"switchCase(viewInfoObjList[i],cs) && !cs.Hidden\">\r\n <span class=\"label-control breakword\"\r\n [ngClass]=\"mi.customClassProperty != undefined ? mi.customClassProperty : ''\"\r\n translate *ngIf=\"cs.result.type == 'text'\">{{ viewInfoObjList[i][cs.result.property]\r\n }}\r\n </span>\r\n <span [ngClass]=\"mi.customClassProperty != undefined ? mi.customClassProperty : ''\"\r\n translate *ngIf=\"cs.result.type == 'decimal'\">{{\r\n viewInfoObjList[i][cs.result.property] | number:'.2':'en-US' }}</span>\r\n <span [ngClass]=\"mi.customClassProperty != undefined ? mi.customClassProperty : ''\"\r\n translate *ngIf=\"cs.result.type == 'date'\">{{ viewInfoObjList[i][cs.result.property] |\r\n date: 'dd-MMM-yyyy' }}\r\n </span>\r\n <span *ngIf=\"cs.result.type == 'link'\"\r\n [ngClass]=\"mi.customClassProperty != undefined ? mi.customClassProperty : ''\"\r\n translate>\r\n <a [target]=\"cs.result.target\" [routerLink]=\"genRouterLink(cs.result.path)\"\r\n [queryParams]=\"genAction(viewInfoObjList[i],cs.result.param)\">\r\n <span *ngIf=\"(mi.isCurrency != undefined && mi.isCurrency)\">{{\r\n viewInfoObjList[i][cs.result.property] | number:'.2':'en-US' }}</span>\r\n <span *ngIf=\"(mi.isCurrency == undefined || !mi.isCurrency)\">{{\r\n viewInfoObjList[i][cs.result.property] }}</span>\r\n </a>\r\n </span>\r\n <span *ngIf=\"cs.result.type == 'boolean'\"\r\n [ngClass]=\"mi.customClassProperty != undefined ? mi.customClassProperty : ''\"\r\n translate>\r\n <span *ngIf=\"viewInfoObjList[i][cs.result.property] == 'true'\">Yes</span>\r\n <span *ngIf=\"viewInfoObjList[i][cs.result.property] == 'false'\">No</span>\r\n </span>\r\n <span *ngIf=\"cs.result.type == 'concat'\">\r\n <label class=\"label-control breakword\"\r\n [ngClass]=\"mi.customClassProperty != undefined ? mi.customClassProperty : ''\" translate>\r\n {{ cs.result.concat }}\r\n </label>\r\n </span>\r\n <span *ngIf=\"cs.result.type == 'callback'\">\r\n <span\r\n *ngIf=\"cs.result.isText != undefined && cs.result.isText; then textCallback else iconCallback\"></span>\r\n <ng-template #textCallback>\r\n <span>\r\n <a href=\"javascript:void(0);\" (click)=\"callbackFunction(viewInfoObjList[i], cs.result.key)\">{{\r\n viewInfoObjList[i][cs.result.property] }}</a>\r\n </span>\r\n </ng-template>\r\n <ng-template #iconCallback>\r\n <span>\r\n <a [ngClass]=\"[cs.result.tooltip != undefined && cs.result.tooltip != '' ? 'tooltips' : '', cs.result.anchor == undefined || cs.result.anchor == '' ? 'success p-0' : cs.result.anchor]\"\r\n (click)=\"callbackFunction(viewInfoObjList[i], cs.result.key)\">\r\n <i class=\"font-medium-3 mr-2\"\r\n [ngClass]=\" cs.result.icon == undefined || cs.result.icon == '' ? 'ft-edit-2' : cs.result.icon \">\r\n </i>\r\n <span *ngIf=\"cs.result.tooltip != undefined && cs.result.tooltip != ''\"\r\n [ngClass]=\"cs.result.tooltip != undefined && cs.result.tooltip != '' ? 'tooltipstext' : ''\">\r\n {{cs.result.tooltip}}\r\n </span>\r\n </a>\r\n </span>\r\n </ng-template>\r\n </span>\r\n </span>\r\n </span>\r\n </span>\r\n </ng-template>\r\n </div>\r\n </div>\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</section>", components: [{ type: i5.UcSubsectionComponent, selector: "lib-ucSubsection", inputs: ["title", "panel", "id"] }], directives: [{ type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i6.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i3.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i1.RouterLinkWithHref, selector: "a[routerLink],area[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "preserveFragment", "skipLocationChange", "replaceUrl", "state", "relativeTo", "routerLink"] }], pipes: { "number": i6.DecimalPipe, "date": i6.DatePipe } });
410
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: UcviewgenericComponent, decorators: [{
411
+ type: Component,
412
+ args: [{ selector: 'lib-ucviewgeneric', styles: [], template: "<section id=\"horizontal-form-layouts\">\r\n <div class=\"row text-left\">\r\n <div class=\"col-md-12\">\r\n <div [ngClass]=\"IsCard ? 'card' : ''\" *ngIf=\"isReady\">\r\n <div class=\"pl-3 mb-2 mt-2\" *ngIf=\"viewList?.title != ''\">\r\n <h4 class=\"card-title ucSearch-title\" id=\"horz-layout-colored-controls\" translate>{{viewList.title}}</h4>\r\n </div>\r\n <div class=\"card-body\" *ngFor=\"let ss of viewList?.subsection;let i = index;\">\r\n <div class=\"px-3\">\r\n <lib-ucSubsection *ngIf=\"ss.subsection != ''\" [id]=\"ss.subSectionId + 'id'\" [title]=\"ss.subSectionTitle\"\r\n [panel]=\"ss.subSectionId\">\r\n </lib-ucSubsection>\r\n <div class=\"form-body\" [id]='ss.subSectionId'>\r\n <div class=\"form-group row\">\r\n <div *ngFor=\"let mi of ss?.mainInfo\"\r\n [ngClass]=\"{ 'col-md-6': mi.isHide == undefined || !mi.isHide || (viewInfoObjList[i][mi.property] != '' && viewInfoObjList[i][mi.property] != null)}\">\r\n <span\r\n *ngIf=\"mi.isHide == undefined || !mi.isHide || (viewInfoObjList[i][mi.property] != '' && viewInfoObjList[i][mi.property] != null)\">\r\n <div class=\"row\">\r\n <div class=\"col-md-6\" *ngIf=\"mi.type != 'switch'\">\r\n <label class=\"label-control\"\r\n [ngClass]=\"mi.customClassLabel != undefined ? mi.customClassLabel : ''\" translate>{{mi.label}}</label>\r\n </div>\r\n <div class=\"col-md-6\" *ngIf=\"mi.type == 'switch'\">\r\n <div *ngFor=\"let case of mi?.case\">\r\n <div *ngIf=\"switchCase(viewInfoObjList[i],case)\">\r\n <label class=\"label-control\"\r\n [ngClass]=\"mi.customClassLabel != undefined ? mi.customClassLabel : ''\" translate>{{case.result.label}}</label>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"viewInfoObjList[i] != undefined\" class=\"col-md-6\" [ngClass]=\"{ 'text-left': mi.position == 'left',\r\n 'text-right': mi.position == 'right', 'text-center': mi.position == 'center' }\">\r\n <span\r\n *ngIf=\"(mi.type == 'boolean' && viewInfoObjList[i][mi.property] != null) || (viewInfoObjList[i][mi.property] != '' && viewInfoObjList[i][mi.property] != null) || mi.type == 'switch' || mi.type =='concat'; then nonEmptyLabel else emptyLabel\"></span>\r\n <ng-template #emptyLabel>\r\n <label class=\"label-control\"\r\n [ngClass]=\"mi.customClassProperty != undefined ? mi.customClassProperty : ''\"\r\n translate>-</label>\r\n </ng-template>\r\n <ng-template #nonEmptyLabel>\r\n <span *ngIf=\"mi.type == 'text'\">\r\n <label\r\n *ngIf=\"viewInfoObjList[i][mi.property] != '' && viewInfoObjList[i][mi.property] != null\"\r\n class=\"label-control breakword\"\r\n [ngClass]=\"mi.customClassProperty != undefined ? mi.customClassProperty : ''\" translate>\r\n {{ viewInfoObjList[i][mi.property] }}\r\n </label>\r\n <label\r\n *ngIf=\"viewInfoObjList[i][mi.property] == '' || viewInfoObjList[i][mi.property] == null\"\r\n class=\"label-control\"\r\n [ngClass]=\"mi.customClassProperty != undefined ? mi.customClassProperty : ''\" translate>-\r\n </label>\r\n </span>\r\n <label *ngIf=\"mi.type == 'currency'\" class=\"label-control\"\r\n [ngClass]=\"mi.customClassProperty != undefined ? mi.customClassProperty : ''\" translate>\r\n {{ viewInfoObjList[i][mi.property] | number: mi?.precision ? mi?.precision : '0.2' :'en-US'}} <span *ngIf=\"mi?.IsPrcnt\">&nbsp;%</span> </label>\r\n <label *ngIf=\"mi.type == 'date'\" class=\"label-control\"\r\n [ngClass]=\"mi.customClassProperty != undefined ? mi.customClassProperty : ''\" translate>\r\n {{ viewInfoObjList[i][mi.property] | date: (mi?.dateFormat) ? mi?.dateFormat : 'dd-MMM-yyyy'}} </label>\r\n <label *ngIf=\"mi.type == 'link'\" class=\"label-control\"\r\n [ngClass]=\"mi.customClassProperty != undefined ? mi.customClassProperty : ''\" translate>\r\n <a *ngIf=\"!mi?.isFullpath\" [routerLink]=\"genRouterLink(mi.path)\" [target]=\"mi.target\"\r\n [queryParams]=\"genAction(viewInfoObjList[i], mi.param)\">\r\n <span *ngIf=\"(mi.isCurrency != undefined && mi.isCurrency)\">{{\r\n viewInfoObjList[i][mi.property] | number:'.2':'en-US' }}</span>\r\n <span *ngIf=\"(mi.isCurrency == undefined || !mi.isCurrency)\">{{\r\n viewInfoObjList[i][mi.property] }}</span>\r\n </a>\r\n <a *ngIf=\"mi?.isFullpath\" href=\"javascript:void(0);\"\r\n (click)=\"redirectFullPath(mi.fullpath, genAction(viewInfoObjList[i], mi.param), mi.target)\">\r\n <span *ngIf=\"(mi.isCurrency != undefined && mi.isCurrency)\">{{\r\n viewInfoObjList[i][mi.property] | number:'.2':'en-US' }}</span>\r\n <span *ngIf=\"(mi.isCurrency == undefined || !mi.isCurrency)\">{{\r\n viewInfoObjList[i][mi.property] }}</span>\r\n </a>\r\n </label>\r\n <label *ngIf=\"mi.type == 'callback'\" class=\"label-control\"\r\n [ngClass]=\"mi.customClassProperty != undefined ? mi.customClassProperty : ''\" translate>\r\n <a href=\"javascript:void(0);\" (click)=\"callbackFunction(viewInfoObjList[i], mi.key)\">\r\n {{ viewInfoObjList[i][mi.property] }}\r\n </a>\r\n </label>\r\n <textarea *ngIf=\"mi.type == 'textarea'\" class=\"form-control\" readonly\r\n [ngClass]=\"mi.customClassProperty != undefined ? mi.customClassProperty : ''\"\r\n translate> {{ viewInfoObjList[i][mi.property] }} </textarea>\r\n <span *ngIf=\"mi.type == 'boolean'\"\r\n [ngClass]=\"mi.customClassProperty != undefined ? mi.customClassProperty : ''\" translate>\r\n <label *ngIf=\"viewInfoObjList[i][mi.property] == true\">Yes</label>\r\n <label *ngIf=\"viewInfoObjList[i][mi.property] == false\">No</label>\r\n <!-- <label\r\n *ngIf=\"viewInfoObjList[i][mi.property] == '' || viewInfoObjList[i][mi.property] == null\">-</label> -->\r\n </span>\r\n <span *ngIf=\"mi.type == 'concat'\">\r\n <label class=\"label-control breakword\"\r\n [ngClass]=\"mi.customClassProperty != undefined ? mi.customClassProperty : ''\" translate>\r\n {{ mi.concat }}\r\n </label>\r\n </span>\r\n <span *ngIf=\"mi.type == 'switch'\">\r\n <span *ngFor=\"let cs of mi?.case\">\r\n <span *ngIf=\"switchCase(viewInfoObjList[i],cs) && !cs.Hidden\">\r\n <span class=\"label-control breakword\"\r\n [ngClass]=\"mi.customClassProperty != undefined ? mi.customClassProperty : ''\"\r\n translate *ngIf=\"cs.result.type == 'text'\">{{ viewInfoObjList[i][cs.result.property]\r\n }}\r\n </span>\r\n <span [ngClass]=\"mi.customClassProperty != undefined ? mi.customClassProperty : ''\"\r\n translate *ngIf=\"cs.result.type == 'decimal'\">{{\r\n viewInfoObjList[i][cs.result.property] | number:'.2':'en-US' }}</span>\r\n <span [ngClass]=\"mi.customClassProperty != undefined ? mi.customClassProperty : ''\"\r\n translate *ngIf=\"cs.result.type == 'date'\">{{ viewInfoObjList[i][cs.result.property] |\r\n date: 'dd-MMM-yyyy' }}\r\n </span>\r\n <span *ngIf=\"cs.result.type == 'link'\"\r\n [ngClass]=\"mi.customClassProperty != undefined ? mi.customClassProperty : ''\"\r\n translate>\r\n <a [target]=\"cs.result.target\" [routerLink]=\"genRouterLink(cs.result.path)\"\r\n [queryParams]=\"genAction(viewInfoObjList[i],cs.result.param)\">\r\n <span *ngIf=\"(mi.isCurrency != undefined && mi.isCurrency)\">{{\r\n viewInfoObjList[i][cs.result.property] | number:'.2':'en-US' }}</span>\r\n <span *ngIf=\"(mi.isCurrency == undefined || !mi.isCurrency)\">{{\r\n viewInfoObjList[i][cs.result.property] }}</span>\r\n </a>\r\n </span>\r\n <span *ngIf=\"cs.result.type == 'boolean'\"\r\n [ngClass]=\"mi.customClassProperty != undefined ? mi.customClassProperty : ''\"\r\n translate>\r\n <span *ngIf=\"viewInfoObjList[i][cs.result.property] == 'true'\">Yes</span>\r\n <span *ngIf=\"viewInfoObjList[i][cs.result.property] == 'false'\">No</span>\r\n </span>\r\n <span *ngIf=\"cs.result.type == 'concat'\">\r\n <label class=\"label-control breakword\"\r\n [ngClass]=\"mi.customClassProperty != undefined ? mi.customClassProperty : ''\" translate>\r\n {{ cs.result.concat }}\r\n </label>\r\n </span>\r\n <span *ngIf=\"cs.result.type == 'callback'\">\r\n <span\r\n *ngIf=\"cs.result.isText != undefined && cs.result.isText; then textCallback else iconCallback\"></span>\r\n <ng-template #textCallback>\r\n <span>\r\n <a href=\"javascript:void(0);\" (click)=\"callbackFunction(viewInfoObjList[i], cs.result.key)\">{{\r\n viewInfoObjList[i][cs.result.property] }}</a>\r\n </span>\r\n </ng-template>\r\n <ng-template #iconCallback>\r\n <span>\r\n <a [ngClass]=\"[cs.result.tooltip != undefined && cs.result.tooltip != '' ? 'tooltips' : '', cs.result.anchor == undefined || cs.result.anchor == '' ? 'success p-0' : cs.result.anchor]\"\r\n (click)=\"callbackFunction(viewInfoObjList[i], cs.result.key)\">\r\n <i class=\"font-medium-3 mr-2\"\r\n [ngClass]=\" cs.result.icon == undefined || cs.result.icon == '' ? 'ft-edit-2' : cs.result.icon \">\r\n </i>\r\n <span *ngIf=\"cs.result.tooltip != undefined && cs.result.tooltip != ''\"\r\n [ngClass]=\"cs.result.tooltip != undefined && cs.result.tooltip != '' ? 'tooltipstext' : ''\">\r\n {{cs.result.tooltip}}\r\n </span>\r\n </a>\r\n </span>\r\n </ng-template>\r\n </span>\r\n </span>\r\n </span>\r\n </span>\r\n </ng-template>\r\n </div>\r\n </div>\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</section>" }]
413
+ }], ctorParameters: function () { return [{ type: i1.ActivatedRoute }, { type: i2.HttpClient }, { type: i3.TranslateService }, { type: i4.CookieService }]; }, propDecorators: { viewGenericObj: [{
414
+ type: Input
415
+ }], callback: [{
416
+ type: Output
417
+ }] } });
418
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWN2aWV3Z2VuZXJpYy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy91Y3ZpZXdnZW5lcmljL3NyYy9saWIvdWN2aWV3Z2VuZXJpYy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy91Y3ZpZXdnZW5lcmljL3NyYy9saWIvdWN2aWV3Z2VuZXJpYy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9FLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFbEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDckUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUMzQyxPQUFPLEtBQUssUUFBUSxNQUFNLFdBQVcsQ0FBQzs7Ozs7Ozs7QUFPdEMsTUFBTSxPQUFPLHNCQUFzQjtJQVdqQyxZQUFvQixLQUFxQixFQUFVLElBQWdCLEVBQVUsZ0JBQWtDLEVBQVUsYUFBNEI7UUFBakksVUFBSyxHQUFMLEtBQUssQ0FBZ0I7UUFBVSxTQUFJLEdBQUosSUFBSSxDQUFZO1FBQVUscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUFVLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBVDVJLG1CQUFjLEdBQXFCLElBQUksZ0JBQWdCLEVBQUUsQ0FBQztRQUN6RCxhQUFRLEdBQXNCLElBQUksWUFBWSxFQUFFLENBQUM7UUFDM0QsZUFBVSxHQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENB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QyxDQUFDLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLFNBQVM7K0NBQzNHLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksSUFBSTsrQ0FDaEcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7cUNBQ3JIO3lDQUFNLEVBQUMsY0FBYzt3Q0FDcEIsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxZQUFZLElBQUksU0FBUyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFOzRDQUN2SyxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUM7NENBQ3pGLElBQUksTUFBTSxHQUFHLEVBQUUsQ0FBQzs0Q0FDaEIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFlBQVksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0RBQzVDLE1BQU0sR0FBRyxNQUFNLEdBQUcsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO2dEQUN0SCxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLFNBQVM7dURBQ3BFLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLElBQUk7dURBQ3pELElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQzs2Q0FDOUU7NENBQ0QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQzt5Q0FDeEU7cUNBQ0Y7b0NBRUQsSUFBSSxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRTt3Q0FDOUYsSUFBSSxD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UDtpQkFDRjtxQkFBTTtvQkFDTCxJQUFJLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUU7d0JBQ3ZGLFNBQVMsR0FBRyxJQUFJLENBQUM7cUJBQ2xCO3lCQUFNO3dCQUNMLFNBQVMsR0FBRyxLQUFLLENBQUM7d0JBQ2xCLE1BQU07cUJBQ1A7aUJBQ0Y7YUFDRjtTQUNGO1FBQ0QsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQzs7dUlBdFhVLHNCQUFzQjsySEFBdEIsc0JBQXNCLDBJQ2RuQyxnMGFBZ0xVOzRGRGxLRyxzQkFBc0I7a0JBTGxDLFNBQVM7K0JBQ0UsbUJBQW1CLFVBRXJCLEVBQUU7eUxBSUQsY0FBYztzQkFBdEIsS0FBSztnQkFDSSxRQUFRO3NCQUFqQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIElucHV0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgVWNWaWV3R2VuZXJpY09iaiB9IGZyb20gJy4vbW9kZWwvdWMtdmlldy1nZW5lcmljLW9iai5tb2RlbCc7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcclxuaW1wb3J0IHsgQ29va2llU2VydmljZSB9IGZyb20gJ25neC1jb29raWUnO1xyXG5pbXBvcnQgKiBhcyBDcnlwdG9KUyBmcm9tICdjcnlwdG8tanMnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdsaWItdWN2aWV3Z2VuZXJpYycsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3Vjdmlld2dlbmVyaWMuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlczogW11cclxufSlcclxuZXhwb3J0IGNsYXNzIFVjdmlld2dlbmVyaWNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG5cclxuICBASW5wdXQoKSB2aWV3R2VuZXJpY09iajogVWNWaWV3R2VuZXJpY09iaiA9IG5ldyBVY1ZpZXdHZW5lcmljT2JqKCk7XHJcbiAgQE91dHB1dCgpIGNhbGxiYWNrOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBVc2VyQWNjZXNzOiBhbnkgPSBKU09OLnBhcnNlKHRoaXMuR2V0Q29va2llKHRoaXMuY29va2llU2VydmljZSwgXCJVc2VyQWNjZXNzXCIpKTtcclxuICB2aWV3TGlzdDogYW55ID0gXCJcIjtcclxuICBnZXRMaXN0OiBhbnk7XHJcbiAgdmlld0luZm9PYmpMaXN0OiBhbnk7XHJcbiAgaXNSZWFkeTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIElzQ2FyZDogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcm91dGU6IEFjdGl2YXRlZFJvdXRlLCBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsIHByaXZhdGUgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSwgcHJpdmF0ZSBjb29raWVTZXJ2aWNlOiBDb29raWVTZXJ2aWNlKSB7XHJcbiAgICB0aGlzLnJvdXRlLnF1ZXJ5UGFyYW1zLnN1YnNjcmliZShwYXJhbXMgPT4ge1xyXG4gICAgICB0aGlzLmdldExpc3QgPSBwYXJhbXM7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2Uuc2V0RGVmYXVsdExhbmcoJ2VuJyk7XHJcbiAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudXNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdsYW5nJykgfHwgJ2VuJyk7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIGNvbnNvbGUubG9nKFwidmlld2dlbmVyaWNcIik7XHJcbiAgICB0aGlzLmluaXRpYXRlRm9ybSgpO1xyXG4gICAgdGhpcy5DaGVja0lzQ2FyZCgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBDaGVja0lzQ2FyZCgpIHtcclxuICAgIGlmICh0aGlzLnZpZXdHZW5lcmljT2JqLklzQ2FyZCA9PSB1bmRlZmluZWQgfHwgdGhpcy52aWV3R2VuZXJpY09iai5Jc0NhcmQgPT0gbnVsbCkgcmV0dXJuO1xyXG4gICAgdGhpcy5Jc0NhcmQgPSB0aGlzLnZpZXdHZW5lcmljT2JqLklzQ2FyZDtcclxuICB9XHJcblxyXG4gIGluaXRpYXRlRm9ybSgpIHtcclxuICAgIGlmICh0aGlzLnZpZXdHZW5lcmljT2JqLmRhdGFJbnB1dCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRoaXMuc2V0Q29uZmlndXJhdGlvbih0aGlzLnZpZXdHZW5lcmljT2JqLmRhdGFJbnB1dCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuZ2V0SlNPTih0aGlzLnZpZXdHZW5lcmljT2JqLnZpZXdJbnB1dCkuc3Vic2NyaWJlKGRhdGEgPT4ge1xyXG4gICAgICB0aGlzLnNldENvbmZpZ3VyYXRpb24oZGF0YSk7XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgc2V0Q29uZmlndXJhdGlvbihkYXRhKSB7XHJcbiAgICB0aGlzLnZpZXdMaXN0ID0gZGF0YTtcclxuICAgIHRoaXMudmlld0luZm9PYmpMaXN0ID0gW107XHJcblxyXG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLnZpZXdMaXN0LnN1YnNlY3Rpb24ubGVuZ3RoOyBqKyspIHtcclxuICAgICAgdGhpcy52aWV3SW5mb09iakxpc3QucHVzaChqKTtcclxuICAgIH1cclxuXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMudmlld0xpc3Quc3Vic2VjdGlvbi5sZW5ndGg7IGkrKykge1xyXG4gICAgICBpZiAodGhpcy52aWV3TGlzdC5zdWJzZWN0aW9uW2ldLnF1ZXJ5c3RyaW5nICE9IG51bGwpIHtcclxuICAgICAgICBsZXQgcXVlcnlPYmo6IGFueTtcclxuICAgICAgICBpZiAodGhpcy52aWV3R2VuZXJpY09iai53aGVyZVZhbHVlLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgICAgICB0aGlzLnZpZXdMaXN0LnN1YnNlY3Rpb25baV0ucXVlcnlzdHJpbmcud2hlcmVRdWVyeSA9ICg8YW55Pk9iamVjdCkudmFsdWVzKHRoaXMuZ2V0TGlzdCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMudmlld0xpc3Quc3Vic2VjdGlvbltpXS5xdWVyeXN0cmluZy53aGVyZVF1ZXJ5ID0gdGhpcy52aWV3R2VuZXJpY09iai53aGVyZVZhbHVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMudmlld0xpc3Quc3Vic2VjdGlvbltpXS5tYWluSW5mb1BhdGggIT0gdW5kZWZpbmVkICYmIHRoaXMudmlld0xpc3Quc3Vic2VjdGlvbltpXS5tYWluSW5mb1BhdGggIT0gXCJcIikge1xyXG4gICAgICAgICAgaWYgKHRoaXMudmlld0dlbmVyaWNPYmoudmlld0Vudmlyb25tZW50ICE9IHVuZGVmaW5lZCAmJiB0aGlzLnZpZXdHZW5lcmljT2JqLnZpZXdFbnZpcm9ubWVudCAhPSBcIlwiKSB7XHJcbiAgICAgICAgICAgIHRoaXMudmlld0xpc3Quc3Vic2VjdGlvbltpXS5mdWxscGF0aCA9IHRoaXMudmlld0dlbmVyaWNPYmoudmlld0Vudmlyb25tZW50ICsgdGhpcy52aWV3TGlzdC5zdWJzZWN0aW9uW2ldLm1haW5JbmZvUGF0aDtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMudmlld0xpc3Quc3Vic2VjdGlvbltpXS5mdWxscGF0aCA9IHRoaXMudmlld0xpc3Quc3Vic2VjdGlvbltpXS5tYWluSW5mb1VybDtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy52aWV3TGlzdC5zdWJzZWN0aW9uW2ldLmZ1bGxwYXRoID0gdGhpcy52aWV3TGlzdC5zdWJzZWN0aW9uW2ldLm1haW5JbmZvVXJsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcXVlcnlPYmogPSB7XHJcbiAgICAgICAgICBxdWVyeXN0cmluZzogdGhpcy52aWV3TGlzdC5zdWJzZWN0aW9uW2ldLnF1ZXJ5c3RyaW5nXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuaHR0cC5wb3N0KHRoaXMudmlld0xpc3Quc3Vic2VjdGlvbltpXS5mdWxscGF0aCwgcXVlcnlPYmopLnN1YnNjcmliZShcclxuICAgICAgICAgIChyZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnZpZXdJbmZvT2JqTGlzdFtpXSA9IHJlc3BvbnNlW1wiRGF0YVwiXVswXTtcclxuXHJcbiAgICAgICAgICAgIGZvciAobGV0IHkgPSAwOyB5IDwgdGhpcy52aWV3TGlzdC5zdWJzZWN0aW9uW2ldLm1haW5JbmZvLmxlbmd0aDsgeSsrKSB7XHJcbiAgICAgICAgICAgICAgaWYgKHRoaXMudmlld0xpc3Quc3Vic2VjdGlvbltpXS5tYWluSW5mb1t5XS5wcm9wZXJ0eUxpc3QgIT0gdW5kZWZpbmVkICYmIHRoaXMudmlld0xpc3Quc3Vic2VjdGlvbltpXS5tYWluSW5mb1t5XS5wcm9wZXJ0eUxpc3QubGVuZ3RoICE9IDApIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHByb3BlcnR5TGlzdCA9IHRoaXMudmlld0xpc3Quc3Vic2VjdGlvbltpXS5tYWluSW5mb1t5XS5wcm9wZXJ0eUxpc3Q7XHJcbiAgICAgICAgICAgICAgICBsZXQgY29uY2F0ID0gXCJcIjtcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IHogPSAwOyB6IDwgcHJvcGVydHlMaXN0Lmxlbmd0aDsgeisrKSB7XHJcbiAgICAgICAgICAgICAgICAgIGNvbmNhdCA9IGNvbmNhdCArIHByb3BlcnR5TGlzdFt6XS5wcmVmaXggKyB0aGlzLnZpZXdJbmZvT2JqTGlzdFtpXVtwcm9wZXJ0eUxpc3Rbel0ucHJvcGVydHldICsgcHJvcGVydHlMaXN0W3pdLnN1ZmZpeDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMudmlld0xpc3Quc3Vic2VjdGlvbltpXS5tYWluSW5mb1t5XS5jb25jYXQgPSBjb25jYXQ7XHJcbiAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAvL3N3aXRjaCBjYXNlXHJcbiAgICAgICAgICAgICAgaWYgKHRoaXMudmlld0xpc3Quc3Vic2VjdGlvbltpXS5tYWluSW5mb1t5XS50eXBlID09IFwic3dpdGNoXCIpIHtcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IHogPSAwOyB6IDwgdGhpcy52aWV3TGlzdC5zdWJzZWN0aW9uW2ldLm1haW5JbmZvW3ldLmNhc2UubGVuZ3RoOyB6KyspIHtcclxuICAgICAgICAgICAgICAgICAgbGV0IEVtcHR5ID0gbmV3IEFycmF5PGJvb2xlYW4+KCk7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMudmlld0xpc3Quc3Vic2VjdGlvbltpXS5tYWluSW5mb1t5XS5jYXNlW3pdLkhpZGRlbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAvL2NoZWNrIGhpZGVJZkVtcHR5XHJcbiAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnZpZXdMaXN0LnN1YnNlY3Rpb25baV0ubWFpbkluZm9beV0uY2FzZVt6XS5yZXN1bHQuaGlkZUlmRW1wdHkgIT0gdW5kZWZpbmVkICYmIHRoaXMudmlld0xpc3Quc3Vic2VjdGlvbltpXS5tYWluSW5mb1t5XS5jYXNlW3pdLnJlc3VsdC5oaWRlSWZFbXB0eSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMudmlld0xpc3Quc3Vic2VjdGlvbltpXS5tYWluSW5mb1t5XS5jYXNlW3pdLnJlc3VsdC50eXBlICE9IFwiY29uY2F0XCIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIEVtcHR5LnB1c2godGhpcy52aWV3SW5mb09iakxpc3RbaV1bdGhpcy52aWV3TGlzdC5zdWJzZWN0aW9uW2ldLm1haW5JbmZvW3ldLmNhc2Vbel0ucmVzdWx0LnByb3BlcnR5XSAhPSB1bmRlZmluZWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgJiYgdGhpcy52aWV3SW5mb09iakxpc3RbaV1bdGhpcy52aWV3TGlzdC5zdWJzZWN0aW9uW2ldLm1haW5JbmZvW3ldLmNhc2Vbel0ucmVzdWx0LnByb3BlcnR5XSAhPSBudWxsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICYmIHRoaXMudmlld0luZm9PYmpMaXN0W2ldW3RoaXMudmlld0xpc3Quc3Vic2VjdGlvbltpXS5tYWluSW5mb1t5XS5jYXNlW3pdLnJlc3VsdC5wcm9wZXJ0eV0gIT0gXCJcIiA/IGZhbHNlIDogdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsvLyB0eXBlIGNvbmNhdFxyXG4gICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMudmlld0xpc3Quc3Vic2VjdGlvbltpXS5tYWluSW5mb1t5XS5jYXNlW3pdLnJlc3VsdC5wcm9wZXJ0eUxpc3QgIT0gdW5kZWZpbmVkICYmIHRoaXMudmlld0xpc3Quc3Vic2VjdGlvbltpXS5tYWluSW5mb1t5XS5jYXNlW3pdLnJlc3VsdC5wcm9wZXJ0eUxpc3QubGVuZ3RoICE9IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJvcGVydHlMaXN0ID0gdGhpcy52aWV3TGlzdC5zdWJzZWN0aW9uW2ldLm1haW5JbmZvW3ldLmNhc2Vbel0ucmVzdWx0LnByb3BlcnR5TGlzdDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNvbmNhdCA9IFwiXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGEgPSAwOyBhIDwgcHJvcGVydHlMaXN0Lmxlbmd0aDsgYSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uY2F0ID0gY29uY2F0ICsgcHJvcGVydHlMaXN0W2FdLnByZWZpeCArIHRoaXMudmlld0luZm9PYmpMaXN0W2ldW3Byb3BlcnR5TGlzdFthXS5wcm9wZXJ0eV0gKyBwcm9wZXJ0eUxpc3RbYV0uc3VmZml4O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIEVtcHR5LnB1c2godGhpcy52aWV3SW5mb09iakxpc3RbaV1bcHJvcGVydHlMaXN0W2FdLnByb3BlcnR5XSAhPSB1bmRlZmluZWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHRoaXMudmlld0luZm9PYmpMaXN0W2ldW3Byb3BlcnR5TGlzdFthXS5wcm9wZXJ0eV0gIT0gbnVsbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgdGhpcy52aWV3SW5mb09iakxpc3RbaV1bcHJvcGVydHlMaXN0W2FdLnByb3BlcnR5XSAhPSBcIlwiID8gZmFsc2UgOiB0cnVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnZpZXdMaXN0LnN1YnNlY3Rpb25baV0ubWFpbkluZm9beV0uY2FzZVt6XS5yZXN1bHQuY29uY2F0ID0gY29uY2F0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKEVtcHR5LmluY2x1ZGVzKHRydWUpICYmIHRoaXMudmlld0xpc3Quc3Vic2VjdGlvbltpXS5tYWluSW5mb1t5XS5jYXNlW3pdLnJlc3VsdC5oaWRlSWZFbXB0eSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy52aWV3TGlzdC5zdWJzZWN0aW9uW2ldLm1haW5JbmZvW3ldLmNhc2Vbel0uSGlkZGVuID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMudmlld0xpc3Quc3Vic2VjdGlvbltpXS5tYWluSW5mb1t5XS5pc0hpZGUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAvL2NvbmNhdFxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnZpZXdMaXN0LnN1YnNlY3Rpb25baV0ubWFpbkluZm9beV0uY2FzZVt6XS5yZXN1bHQucHJvcGVydHlMaXN0ICE9IHVuZGVmaW5lZCAmJiB0aGlzLnZpZXdMaXN0LnN1YnNlY3Rpb25baV0ubWFpbkluZm9beV0uY2FzZVt6XS5yZXN1bHQucHJvcGVydHlMaXN0Lmxlbmd0aCAhPSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwcm9wZXJ0eUxpc3QgPSB0aGlzLnZpZXdMaXN0LnN1YnNlY3Rpb25baV0ubWFpbkluZm9beV0uY2FzZVt6XS5yZXN1bHQucHJvcGVydHlMaXN0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgbGV0IGNvbmNhdCA9IFwiXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBhID0gMDsgYSA8IHByb3BlcnR5TGlzdC5sZW5ndGg7IGErKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25jYXQgPSBjb25jYXQgKyBwcm9wZXJ0eUxpc3RbYV0ucHJlZml4ICsgdGhpcy52aWV3SW5mb09iakxpc3RbaV1bcHJvcGVydHlMaXN0W2FdLnByb3BlcnR5XSArIHByb3BlcnR5TGlzdFthXS5zdWZmaXg7XHJcbiAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLnZpZXdMaXN0LnN1YnNlY3Rpb25baV0ubWFpbkluZm9beV0uY2FzZVt6XS5yZXN1bHQuY29uY2F0ID0gY29uY2F0O1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgaWYgKHRoaXMudmlld0xpc3Quc3Vic2VjdGlvbltpXS5tYWluSW5mb1t5XS50eXBlID09IFwibGlua1wiICYmICh0aGlzLnZpZXdHZW5lcmljT2JqLm5hdmlnYXRpb25Db25zdCAhPSB1bmRlZmluZWQgfHwgdGhpcy52aWV3R2VuZXJpY09iai5uYXZpZ2F0aW9uQ29uc3QgIT0gbnVsbCkpIHtcclxuICAgICAgICAgICAgICAgIGxldCB0ZW1wTGluayA9IHRoaXMudmlld0dlbmVyaWNPYmoubmF2aWdhdGlvbkNvbnN0W3RoaXMudmlld0xpc3Quc3Vic2VjdGlvbltpXS5tYWluSW5mb1t5XS5wYXRoXTtcclxuICAgICAgICAgICAgICAgIGlmICh0ZW1wTGluayAhPSB1bmRlZmluZWQgJiYgdGVtcExpbmsgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLnZpZXdMaXN0LnN1YnNlY3Rpb25baV0ubWFpbkluZm9beV0ucGF0aCA9IHRlbXBMaW5rO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBpZiAodGhpcy52aWV3TGlzdC5zdWJzZWN0aW9uW2ldLm1haW5JbmZvW3ldLnR5cGUgPT0gXCJsaW5rXCJcclxuICAgICAgICAgICAgICAgICYmIHRoaXMudmlld0dlbmVyaWNPYmoubGlzdEVudmlyb25tZW50cyAhPSB1bmRlZmluZWQgJiYgdGhpcy52aWV3R2VuZXJpY09iai5saXN0RW52aXJvbm1lbnRzLmxlbmd0aCAhPSAwKSB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCB6ID0gMDsgeiA8IHRoaXMudmlld0dlbmVyaWNPYmoubGlzdEVudmlyb25tZW50cy5sZW5ndGg7IHorKykge1xyXG4gICAgICAgICAgICAgICAgICBpZiAodGhpcy52aWV3TGlzdC5zdWJzZWN0aW9uW2ldLm1haW5JbmZvW3ldLmVudmlyb25tZW50ID09IHRoaXMudmlld0dlbmVyaWNPYmoubGlzdEVudmlyb25tZW50c1t6XS5lbnZpcm9ubWVudCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudmlld0xpc3Quc3Vic2VjdGlvbltpXS5tYWluSW5mb1t5XS5pc0Z1bGxwYXRoID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnZpZXdMaXN0LnN1YnNlY3Rpb25baV0ubWFpbkluZm9beV0uZnVsbHBhdGggPSB0aGlzLnZpZXdHZW5lcmljT2JqLmxpc3RFbnZpcm9ubWVudHNbel0udXJsICsgdGhpcy52aWV3TGlzdC5zdWJzZWN0aW9uW2ldLm1haW5JbmZvW3ldLnBhdGg7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMudmlld0xpc3Quc3Vic2VjdGlvbltpXS5tYWluSW5mb1t5XS50eXBlID09IFwibGlua1wiKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZpZXdMaXN0LnN1YnNlY3Rpb25baV0ubWFpbkluZm9beV0uaXNGdWxscGF0aCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy52aWV3TGlzdC5zdWJzZWN0aW9uW2ldLm1haW5JbmZvW3ldLmZ1bGxwYXRoID0gdGhpcy52aWV3TGlzdC5zdWJzZWN0aW9uW2ldLm1haW5JbmZvW3ldLnBhdGg7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuaXNSZWFkeSA9IHRydWU7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGVycm9yKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGlmICh0aGlzLnZpZXdMaXN0LnN1YnNlY3Rpb25baV0ubWFpbkluZm9QYXRoICE9IHVuZGVmaW5lZCAmJiB0aGlzLnZpZXdMaXN0LnN1YnNlY3Rpb25baV0ubWFpbkluZm9QYXRoICE9IFwiXCIpIHtcclxuICAgICAgICAgIGlmICh0aGlzLnZpZXdHZW5lcmljT2JqLnZpZXdFbnZpcm9ubWVudCAhPSB1bmRlZmluZWQgJiYgdGhpcy52aWV3R2VuZXJpY09iai52aWV3RW52aXJvbm1lbnQgIT0gXCJcIikge1xyXG4gICAgICAgICAgICB0aGlzLnZpZXdMaXN0LnN1YnNlY3Rpb25baV0uZnVsbHBhdGggPSB0aGlzLnZpZXdHZW5lcmljT2JqLnZpZXdFbnZpcm9ubWVudCArIHRoaXMudmlld0xpc3Quc3Vic2VjdGlvbltpXS5tYWluSW5mb1BhdGg7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnZpZXdMaXN0LnN1YnNlY3Rpb25baV0uZnVsbHBhdGggPSB0aGlzLnZpZXdMaXN0LnN1YnNlY3Rpb25baV0ubWFpbkluZm9Vcmw7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMudmlld0xpc3Quc3Vic2VjdGlvbltpXS5mdWxscGF0aCA9IHRoaXMudmlld0xpc3Quc3Vic2VjdGlvbltpXS5tYWluSW5mb1VybDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuaHR0cC5wb3N0KHRoaXMudmlld0xpc3Quc3Vic2VjdGlvbltpXS5mdWxscGF0aCwgdGhpcy5nZXRMaXN0KS5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAocmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgICAgdGhpcy52aWV3SW5mb09iakxpc3RbaV0gPSByZXNwb25zZVtcIkRhdGFcIl07XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGVycm9yKTtcclxuICAgICAgICAgIH0pXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRKU09OKHVybDogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KHVybCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIEdldENvb2tpZShjb29raWVTZXJ2aWNlOiBDb29raWVTZXJ2aWNlLCBrZXk6IHN0cmluZykge1xyXG4gICAgbGV0IHZhbHVlID0gY29va2llU2VydmljZS5nZXQoa2V5KTtcclxuICAgIGlmICh2YWx1ZSA9PSB1bmRlZmluZWQgfHwgdmFsdWUudHJpbSgpID09ICcnKSByZXR1cm4gbnVsbDtcclxuICAgIHJldHVybiB0aGlzLkRlY3J5cHRTdHJpbmcodmFsdWUsIFwiQWRJbnNGT1UxMjM0NTY3OFwiKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgRGVjcnlwdFN0cmluZyhjaGlwcGVyVGV4dDogc3RyaW5nLCBjaGlwcGVyS2V5OiBzdHJpbmcpIHtcclxuICAgIGlmIChcclxuICAgICAgY2hpcHBlcktleSA9PSB1bmRlZmluZWQgfHwgY2hpcHBlcktleS50cmltKCkgPT0gJycgfHxcclxuICAgICAgY2hpcHBlclRleHQgPT0gdW5kZWZpbmVkIHx8IGNoaXBwZXJUZXh0LnRyaW0oKSA9PSAnJ1xyXG4gICAgKSByZXR1cm4gY2hpcHBlclRleHQ7XHJcbiAgICBsZXQgY2hpcHBlcktleUFyciA9IENyeXB0b0pTLmVuYy5VdGY4LnBhcnNlKGNoaXBwZXJLZXkpO1xyXG4gICAgbGV0IGl2ID0gQ3J5cHRvSlMubGliLldvcmRBcnJheS5jcmVhdGUoWzB4MDAsIDB4MDAsIDB4MDAsIDB4MDBdKTtcclxuICAgIGxldCBkZWNyeXB0ZWQgPSBDcnlwdG9KUy5BRVMuZGVjcnlwdChjaGlwcGVyVGV4dCwgY2hpcHBlcktleUFyciwgeyBpdjogaXYgfSk7XHJcbiAgICBsZXQgcGxhaW5UZXh0ID0gZGVjcnlwdGVkLnRvU3RyaW5nKENyeXB0b0pTLmVuYy5VdGY4KTtcclxuICAgIHJldHVybiBwbGFpblRleHQ7XHJcbiAgfVxyXG5cclxuICBnZW5BY3Rpb24odmlld09iaiwgcGFyYW0pIHtcclxuICAgIGxldCBhcnJMaXN0ID0ge307XHJcblxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYXJhbS5sZW5ndGg7IGkrKykge1xyXG4gICAgICBpZiAodmlld09ialtwYXJhbVtpXS50eXBlXSAhPSB1bmRlZmluZWQgfHwgdmlld09ialtwYXJhbVtpXS5wcm9wZXJ0eV0gIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgYXJyTGlzdFtwYXJhbVtpXS50eXBlXSA9IHZpZXdPYmpbcGFyYW1baV0ucHJvcGVydHldO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGFyckxpc3RbcGFyYW1baV0udHlwZV0gPSBwYXJhbVtpXS5wcm9wZXJ0eTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGFyckxpc3Q7XHJcbiAgfVxyXG5cclxuICBnZW5Sb3V0ZXJMaW5rKHVybExpbms6IHN0cmluZykge1xyXG4gICAgbGV0IHRlbXBMaW5rID0gdXJsTGluaztcclxuICAgIGlmICh0aGlzLnZpZXdHZW5lcmljT2JqLm5hdmlnYXRpb25Db25zdCAhPSB1bmRlZmluZWQgJiYgdGhpcy52aWV3R2VuZXJpY09iai5uYXZpZ2F0aW9uQ29uc3RbdXJsTGlua10gIT0gbnVsbCkge1xyXG4gICAgICB0ZW1wTGluayA9IHRoaXMudmlld0dlbmVyaWNPYmoubmF2aWdhdGlvbkNvbnN0W3VybExpbmtdO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRlbXBMaW5rO1xyXG4gIH1cclxuXHJcbiAgcmVkaXJlY3RGdWxsUGF0aChmdWxscGF0aDogc3RyaW5nLCBwYXJhbTogT2JqZWN0LCB0YXJnZXQ6IHN0cmluZykge1xyXG4gICAgbGV0IHF1ZXJ5UGFyYW0gPSBcIlwiO1xyXG4gICAgY29uc3QgTGlzdE9iaiA9IE9iamVjdC5rZXlzKHBhcmFtKTtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgTGlzdE9iai5sZW5ndGg7IGkrKykge1xyXG4gICAgICBpZiAocXVlcnlQYXJhbSAhPSBcIlwiKSB7XHJcbiAgICAgICAgcXVlcnlQYXJhbSA9IHF1ZXJ5UGFyYW0gKyBcIiZcIiArIExpc3RPYmpbaV0gKyBcIj1cIiArIHBhcmFtW0xpc3RPYmpbaV1dO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHF1ZXJ5UGFyYW0gPSBMaXN0T2JqW2ldICsgXCI9XCIgKyBwYXJhbVtMaXN0T2JqW2ldXTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgd2luZG93Lm9wZW4oZnVsbHBhdGggKyBcIj9cIiArIHF1ZXJ5UGFyYW0sIHRhcmdldCk7XHJcbiAgfVxyXG5cclxuICBjYWxsYmFja0Z1bmN0aW9uKGl0ZW0sIGtleTogc3RyaW5nID0gXCJcIikge1xyXG4gICAgbGV0IENCT2JqID0ge1xyXG4gICAgICBWaWV3T2JqOiBpdGVtLFxyXG4gICAgICBLZXk6IGtleVxyXG4gICAgfVxyXG4gICAgdGhpcy5jYWxsYmFjay5lbWl0KENCT2JqKTtcclxuICB9XHJcblxyXG4gIHN3aXRjaENhc2UoaXRlbSwgY29uZExpc3QpIHtcclxuICAgIGxldCBjb25kaXRpb24gPSBmYWxzZTtcclxuICAgIGlmICghaXRlbSkgcmV0dXJuIGZhbHNlO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb25kTGlzdC5jb25kaXRpb25zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGlmIChjb25kTGlzdC5jb25kaXRpb25zW2ldLnJlc3RyaWN0aW9uID09IFwiRVFcIikge1xyXG4gICAgICAgIGlmIChjb25kTGlzdC5jb25kaXRpb25zW2ldLmlzVXNlciAhPSB0cnVlKSB7XHJcbiAgICAgICAgICBpZiAoaXRlbVtjb25kTGlzdC5jb25kaXRpb25zW2ldLnByb3BlcnR5XSA9PSBjb25kTGlzdC5jb25kaXRpb25zW2ldLnZhbHVlKSB7XHJcbiAgICAgICAgICAgIGNvbmRpdGlvbiA9IHRydWU7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25kaXRpb24gPSBmYWxzZTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGlmIChpdGVtW2NvbmRMaXN0LmNvbmRpdGlvbnNbaV0ucHJvcGVydHldID09IHRoaXMuVXNlckFjY2Vzc1tcIlVzZXJOYW1lXCJdKSB7XHJcbiAgICAgICAgICAgIGNvbmRpdGlvbiA9IHRydWU7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25kaXRpb24gPSBmYWxzZTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2UgaWYgKGNvbmRMaXN0LmNvbmRpdGlvbnNbaV0ucmVzdHJpY3Rpb24gPT0gXCJORVFcIikge1xyXG4gICAgICAgIGlmIChjb25kTGlzdC5jb25kaXRpb25zW2ldLmlzVXNlciAhPSB0cnVlKSB7XHJcbiAgICAgICAgICBpZiAoaXRlbVtjb25kTGlzdC5jb25kaXRpb25zW2ldLnByb3BlcnR5XSAhPSBjb25kTGlzdC5jb25kaXRpb25zW2ldLnZhbHVlKSB7XHJcbiAgICAgICAgICAgIGNvbmRpdGlvbiA9IHRydWU7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25kaXRpb24gPSBmYWxzZTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGlmIChpdGVtW2NvbmRMaXN0LmNvbmRpdGlvbnNbaV0ucHJvcGVydHldICE9IHRoaXMuVXNlckFjY2Vzc1tcIlVzZXJOYW1lXCJdKSB7XHJcbiAgICAgICAgICAgIGNvbmRpdGlvbiA9IHRydWU7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25kaXRpb24gPSBmYWxzZTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2UgaWYgKGNvbmRMaXN0LmNvbmRpdGlvbnNbaV0ucmVzdHJpY3Rpb24gPT0gXCJHVFwiKSB7XHJcbiAgICAgICAgaWYgKGNvbmRMaXN0LmNvbmRpdGlvbnNbaV0uaXNVc2VyICE9IHRydWUpIHtcclxuICAgICAgICAgIGlmIChpdGVtW2NvbmRMaXN0LmNvbmRpdGlvbnNbaV0ucHJvcGVydHldID4gY29uZExpc3QuY29uZGl0aW9uc1tpXS52YWx1ZSkge1xyXG4gICAgICAgICAgICBjb25kaXRpb24gPSB0cnVlO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29uZGl0aW9uID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBpZiAoaXRlbVtjb25kTGlzdC5jb25kaXRpb25zW2ldLnByb3BlcnR5XSA+IHRoaXMuVXNlckFjY2Vzc1tcIlVzZXJOYW1lXCJdKSB7XHJcbiAgICAgICAgICAgIGNvbmRpdGlvbiA9IHRydWU7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25kaXRpb24gPSBmYWxzZTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2UgaWYgKGNvbmRMaXN0LmNvbmRpdGlvbnNbaV0ucmVzdHJpY3Rpb24gPT0gXCJHVEVcIikge1xyXG4gICAgICAgIGlmIChjb25kTGlzdC5jb25kaXRpb25zW2ldLmlzVXNlciAhPSB0cnVlKSB7XHJcbiAgICAgICAgICBpZiAoaXRlbVtjb25kTGlzdC5jb25kaXRpb25zW2ldLnByb3BlcnR5XSA+PSBjb25kTGlzdC5jb25kaXRpb25zW2ldLnZhbHVlKSB7XHJcbiAgICAgICAgICAgIGNvbmRpdGlvbiA9IHRydWU7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25kaXRpb24gPSBmYWxzZTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGlmIChpdGVtW2NvbmRMaXN0LmNvbmRpdGlvbnNbaV0ucHJvcGVydHldID49IHRoaXMuVXNlckFjY2Vzc1tcIlVzZXJOYW1lXCJdKSB7XHJcbiAgICAgICAgICAgIGNvbmRpdGlvbiA9IHRydWU7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25kaXRpb24gPSBmYWxzZTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2UgaWYgKGNvbmRMaXN0LmNvbmRpdGlvbnNbaV0ucmVzdHJpY3Rpb24gPT0gXCJMVFwiKSB7XHJcbiAgICAgICAgaWYgKGNvbmRMaXN0LmNvbmRpdGlvbnNbaV0uaXNVc2VyICE9IHRydWUpIHtcclxuICAgICAgICAgIGlmIChpdGVtW2NvbmRMaXN0LmNvbmRpdGlvbnNbaV0ucHJvcGVydHldIDwgY29uZExpc3QuY29uZGl0aW9uc1tpXS52YWx1ZSkge1xyXG4gICAgICAgICAgICBjb25kaXRpb24gPSB0cnVlO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29uZGl0aW9uID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBpZiAoaXRlbVtjb25kTGlzdC5jb25kaXRpb25zW2ldLnByb3BlcnR5XSA8IHRoaXMuVXNlckFjY2Vzc1tcIlVzZXJOYW1lXCJdKSB7XHJcbiAgICAgICAgICAgIGNvbmRpdGlvbiA9IHRydWU7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25kaXRpb24gPSBmYWxzZTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2UgaWYgKGNvbmRMaXN0LmNvbmRpdGlvbnNbaV0ucmVzdHJpY3Rpb24gPT0gXCJMVEVcIikge1xyXG4gICAgICAgIGlmIChjb25kTGlzdC5jb25kaXRpb25zW2ldLmlzVXNlciAhPSB0cnVlKSB7XHJcbiAgICAgICAgICBpZiAoaXRlbVtjb25kTGlzdC5jb25kaXRpb25zW2ldLnByb3BlcnR5XSA8PSBjb25kTGlzdC5jb25kaXRpb25zW2ldLnZhbHVlKSB7XHJcbiAgICAgICAgICAgIGNvbmRpdGlvbiA9IHRydWU7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25kaXRpb24gPSBmYWxzZTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGlmIChpdGVtW2NvbmRMaXN0LmNvbmRpdGlvbnNbaV0ucHJvcGVydHldIDw9IHRoaXMuVXNlckFjY2Vzc1tcIlVzZXJOYW1lXCJdKSB7XHJcbiAgICAgICAgICAgIGNvbmRpdGlvbiA9IHRydWU7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25kaXRpb24gPSBmYWxzZTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2UgaWYgKGNvbmRMaXN0LmNvbmRpdGlvbnNbaV0ucmVzdHJpY3Rpb24gPT0gXCJJTlwiKSB7XHJcbiAgICAgICAgaWYgKGNvbmRMaXN0LmNvbmRpdGlvbnNbaV0uaXNVc2VyICE9IHRydWUpIHtcclxuICAgICAgICAgIGlmIChjb25kTGlzdC5jb25kaXRpb25zW2ldLnZhbHVlLmZpbmRJbmRleCh4ID0+IHggPT0gaXRlbVtjb25kTGlzdC5jb25kaXRpb25zW2ldLnByb3BlcnR5XSkgPj0gMCkge1xyXG4gICAgICAgICAgICBjb25kaXRpb24gPSB0cnVlO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29uZGl0aW9uID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBpZiAoY29uZExpc3QuY29uZGl0aW9uc1tpXS52YWx1ZS5maW5kSW5kZXgoeCA9PiB4ID09IHRoaXMuVXNlckFjY2Vzc1tcIlVzZXJOYW1lXCJdKSA+PSAwKSB7XHJcbiAgICAgICAgICAgIGNvbmRpdGlvbiA9IHRydWU7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25kaXRpb24gPSBmYWxzZTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2UgaWYgKGNvbmRMaXN0LmNvbmRpdGlvbnNbaV0ucmVzdHJpY3Rpb24gPT0gXCJOSU5cIikge1xyXG4gICAgICAgIGlmIChjb25kTGlzdC5jb25kaXRpb25zW2ldLmlzVXNlciAhPSB0cnVlKSB7XHJcbiAgICAgICAgICBpZiAoY29uZExpc3QuY29uZGl0aW9uc1tpXS52YWx1ZS5maW5kSW5kZXgoeCA9PiB4ID09IGl0ZW1bY29uZExpc3QuY29uZGl0aW9uc1tpXS5wcm9wZXJ0eV0pID09IC0xKSB7XHJcbiAgICAgICAgICAgIGNvbmRpdGlvbiA9IHRydWU7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25kaXRpb24gPSBmYWxzZTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGlmIChjb25kTGlzdC5jb25kaXRpb25zW2ldLnZhbHVlLmZpbmRJbmRleCh4ID0+IHggPT0gdGhpcy5Vc2VyQWNjZXNzW1wiVXNlck5hbWVcIl0pID09IC0xKSB7XHJcbiAgICAgICAgICAgIGNvbmRpdGlvbiA9IHRydWU7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25kaXRpb24gPSBmYWxzZTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY29uZGl0aW9uO1xyXG4gIH1cclxufVxyXG4iLCI8c2VjdGlvbiBpZD1cImhvcml6b250YWwtZm9ybS1sYXlvdXRzXCI+XHJcbiAgPGRpdiBjbGFzcz1cInJvdyB0ZXh0LWxlZnRcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cclxuICAgICAgPGRpdiBbbmdDbGFzc109XCJJc0NhcmQgPyAnY2FyZCcgOiAnJ1wiICpuZ0lmPVwiaXNSZWFkeVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJwbC0zIG1iLTIgbXQtMlwiICpuZ0lmPVwidmlld0xpc3Q/LnRpdGxlICE9ICcnXCI+XHJcbiAgICAgICAgICA8aDQgY2xhc3M9XCJjYXJkLXRpdGxlIHVjU2VhcmNoLXRpdGxlXCIgaWQ9XCJob3J6LWxheW91dC1jb2xvcmVkLWNvbnRyb2xzXCIgdHJhbnNsYXRlPnt7dmlld0xpc3QudGl0bGV9fTwvaDQ+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keVwiICpuZ0Zvcj1cImxldCBzcyBvZiB2aWV3TGlzdD8uc3Vic2VjdGlvbjtsZXQgaSA9IGluZGV4O1wiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInB4LTNcIj5cclxuICAgICAgICAgICAgPGxpYi11Y1N1YnNlY3Rpb24gKm5nSWY9XCJzcy5zdWJzZWN0aW9uICE9ICcnXCIgW2lkXT1cInNzLnN1YlNlY3Rpb25JZCArICdpZCdcIiBbdGl0bGVdPVwic3Muc3ViU2VjdGlvblRpdGxlXCJcclxuICAgICAgICAgICAgICBbcGFuZWxdPVwic3Muc3ViU2VjdGlvbklkXCI+XHJcbiAgICAgICAgICAgIDwvbGliLXVjU3Vic2VjdGlvbj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tYm9keVwiIFtpZF09J3NzLnN1YlNlY3Rpb25JZCc+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgcm93XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBtaSBvZiBzcz8ubWFpbkluZm9cIlxyXG4gICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdjb2wtbWQtNic6IG1pLmlzSGlkZSA9PSB1bmRlZmluZWQgfHwgIW1pLmlzSGlkZSB8fCAodmlld0luZm9PYmpMaXN0W2ldW21pLnByb3BlcnR5XSAhPSAnJyAmJiB2aWV3SW5mb09iakxpc3RbaV1bbWkucHJvcGVydHldICE9IG51bGwpfVwiPlxyXG4gICAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwibWkuaXNIaWRlID09IHVuZGVmaW5lZCB8fCAhbWkuaXNIaWRlIHx8ICh2aWV3SW5mb09iakxpc3RbaV1bbWkucHJvcGVydHldICE9ICcnICYmIHZpZXdJbmZvT2JqTGlzdFtpXVttaS5wcm9wZXJ0eV0gIT0gbnVsbClcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTZcIiAqbmdJZj1cIm1pLnR5cGUgIT0gJ3N3aXRjaCdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwibGFiZWwtY29udHJvbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwibWkuY3VzdG9tQ2xhc3NMYWJlbCAhPSB1bmRlZmluZWQgPyBtaS5jdXN0b21DbGFzc0xhYmVsIDogJydcIiB0cmFuc2xhdGU+e3ttaS5sYWJlbH19PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCIgKm5nSWY9XCJtaS50eXBlID09ICdzd2l0Y2gnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGNhc2Ugb2YgbWk/LmNhc2VcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwic3dpdGNoQ2FzZSh2aWV3SW5mb09iakxpc3RbaV0sY2FzZSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImxhYmVsLWNvbnRyb2xcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJtaS5jdXN0b21DbGFzc0xhYmVsICE9IHVuZGVmaW5lZCA/IG1pLmN1c3RvbUNsYXNzTGFiZWwgOiAnJ1wiIHRyYW5zbGF0ZT57e2Nhc2UucmVzdWx0LmxhYmVsfX08L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInZpZXdJbmZvT2JqTGlzdFtpXSAhPSB1bmRlZmluZWRcIiBjbGFzcz1cImNvbC1tZC02XCIgW25nQ2xhc3NdPVwieyAndGV4dC1sZWZ0JzogbWkucG9zaXRpb24gPT0gJ2xlZnQnLFxyXG4gICAgICAgICAgICAgICAgICAgICd0ZXh0LXJpZ2h0JzogbWkucG9zaXRpb24gPT0gJ3JpZ2h0JywgJ3RleHQtY2VudGVyJzogbWkucG9zaXRpb24gPT0gJ2NlbnRlcicgfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiKG1pLnR5cGUgPT0gJ2Jvb2xlYW4nICYmIHZpZXdJbmZvT2JqTGlzdFtpXVttaS5wcm9wZXJ0eV0gIT0gbnVsbCkgfHwgKHZpZXdJbmZvT2JqTGlzdFtpXVttaS5wcm9wZXJ0eV0gIT0gJycgJiYgdmlld0luZm9PYmpMaXN0W2ldW21pLnByb3BlcnR5XSAhPSBudWxsKSB8fCBtaS50eXBlID09ICdzd2l0Y2gnIHx8IG1pLnR5cGUgPT0nY29uY2F0JzsgdGhlbiBub25FbXB0eUxhYmVsIGVsc2UgZW1wdHlMYWJlbFwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNlbXB0eUxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImxhYmVsLWNvbnRyb2xcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwibWkuY3VzdG9tQ2xhc3NQcm9wZXJ0eSAhPSB1bmRlZmluZWQgPyBtaS5jdXN0b21DbGFzc1Byb3BlcnR5IDogJydcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNsYXRlPi08L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI25vbkVtcHR5TGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJtaS50eXBlID09ICd0ZXh0J1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwidmlld0luZm9PYmpMaXN0W2ldW21pLnByb3BlcnR5XSAhPSAnJyAmJiB2aWV3SW5mb09iakxpc3RbaV1bbWkucHJvcGVydHldICE9IG51bGxcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImxhYmVsLWNvbnRyb2wgYnJlYWt3b3JkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwibWkuY3VzdG9tQ2xhc3NQcm9wZXJ0eSAhPSB1bmRlZmluZWQgPyBtaS5jdXN0b21DbGFzc1Byb3BlcnR5IDogJydcIiB0cmFuc2xhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IHZpZXdJbmZvT2JqTGlzdFtpXVttaS5wcm9wZXJ0eV0gfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJ2aWV3SW5mb09iakxpc3RbaV1bbWkucHJvcGVydHldID09ICcnIHx8IHZpZXdJbmZvT2JqTGlzdFtpXVttaS5wcm9wZXJ0eV0gPT0gbnVsbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibGFiZWwtY29udHJvbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIm1pLmN1c3RvbUNsYXNzUHJvcGVydHkgIT0gdW5kZWZpbmVkID8gbWkuY3VzdG9tQ2xhc3NQcm9wZXJ0eSA6ICcnXCIgdHJhbnNsYXRlPi1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCAqbmdJZj1cIm1pLnR5cGUgPT0gJ2N1cnJlbmN5J1wiIGNsYXNzPVwibGFiZWwtY29udHJvbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJtaS5jdXN0b21DbGFzc1Byb3BlcnR5ICE9IHVuZGVmaW5lZCA/IG1pLmN1c3RvbUNsYXNzUHJvcGVydHkgOiAnJ1wiIHRyYW5zbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IHZpZXdJbmZvT2JqTGlzdFtpXVttaS5wcm9wZXJ0eV0gfCBudW1iZXI6IG1pPy5wcmVjaXNpb24gPyBtaT8ucHJlY2lzaW9uIDogJzAuMicgOidlbi1VUyd9fSA8c3BhbiAqbmdJZj1cIm1pPy5Jc1ByY250XCI+Jm5ic3A7JTwvc3Bhbj4gPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgKm5nSWY9XCJtaS50eXBlID09ICdkYXRlJ1wiIGNsYXNzPVwibGFiZWwtY29udHJvbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJtaS5jdXN0b21DbGFzc1Byb3BlcnR5ICE9IHVuZGVmaW5lZCA/IG1pLmN1c3RvbUNsYXNzUHJvcGVydHkgOiAnJ1wiIHRyYW5zbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IHZpZXdJbmZvT2JqTGlzdFtpXVttaS5wcm9wZXJ0eV0gfCBkYXRlOiAobWk/LmRhdGVGb3JtYXQpID8gbWk/LmRhdGVGb3JtYXQgOiAnZGQtTU1NLXl5eXknfX0gPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgKm5nSWY9XCJtaS50eXBlID09ICdsaW5rJ1wiIGNsYXNzPVwibGFiZWwtY29udHJvbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJtaS5jdXN0b21DbGFzc1Byb3BlcnR5ICE9IHVuZGVmaW5lZCA/IG1pLmN1c3RvbUNsYXNzUHJvcGVydHkgOiAnJ1wiIHRyYW5zbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhICpuZ0lmPVwiIW1pPy5pc0Z1bGxwYXRoXCIgW3JvdXRlckxpbmtdPVwiZ2VuUm91dGVyTGluayhtaS5wYXRoKVwiIFt0YXJnZXRdPVwibWkudGFyZ2V0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3F1ZXJ5UGFyYW1zXT1cImdlbkFjdGlvbih2aWV3SW5mb09iakxpc3RbaV0sIG1pLnBhcmFtKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIihtaS5pc0N1cnJlbmN5ICE9IHVuZGVmaW5lZCAmJiBtaS5pc0N1cnJlbmN5KVwiPnt7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlld0luZm9PYmpMaXN0W2ldW21pLnByb3BlcnR5XSB8IG51bWJlcjonLjInOidlbi1VUycgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiKG1pLmlzQ3VycmVuY3kgPT0gdW5kZWZpbmVkIHx8ICFtaS5pc0N1cnJlbmN5KVwiPnt7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlld0luZm9PYmpMaXN0W2ldW21pLnByb3BlcnR5XSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhICpuZ0lmPVwibWk/LmlzRnVsbHBhdGhcIiBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApO1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJyZWRpcmVjdEZ1bGxQYXRoKG1pLmZ1bGxwYXRoLCBnZW5BY3Rpb24odmlld0luZm9PYmpMaXN0W2ldLCBtaS5wYXJhbSksIG1pLnRhcmdldClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIobWkuaXNDdXJyZW5jeSAhPSB1bmRlZmluZWQgJiYgbWkuaXNDdXJyZW5jeSlcIj57e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdJbmZvT2JqTGlzdFtpXVttaS5wcm9wZXJ0eV0gfCBudW1iZXI6Jy4yJzonZW4tVVMnIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIihtaS5pc0N1cnJlbmN5ID09IHVuZGVmaW5lZCB8fCAhbWkuaXNDdXJyZW5jeSlcIj57e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdJbmZvT2JqTGlzdFtpXVttaS5wcm9wZXJ0eV0gfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgKm5nSWY9XCJtaS50eXBlID09ICdjYWxsYmFjaydcIiBjbGFzcz1cImxhYmVsLWNvbnRyb2xcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwibWkuY3VzdG9tQ2xhc3NQcm9wZXJ0eSAhPSB1bmRlZmluZWQgPyBtaS5jdXN0b21DbGFzc1Byb3BlcnR5IDogJydcIiB0cmFuc2xhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApO1wiIChjbGljayk9XCJjYWxsYmFja0Z1bmN0aW9uKHZpZXdJbmZvT2JqTGlzdFtpXSwgbWkua2V5KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyB2aWV3SW5mb09iakxpc3RbaV1bbWkucHJvcGVydHldIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8dGV4dGFyZWEgKm5nSWY9XCJtaS50eXBlID09ICd0ZXh0YXJlYSdcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIHJlYWRvbmx5XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJtaS5jdXN0b21DbGFzc1Byb3BlcnR5ICE9IHVuZGVmaW5lZCA/IG1pLmN1c3RvbUNsYXNzUHJvcGVydHkgOiAnJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2xhdGU+IHt7IHZpZXdJbmZvT2JqTGlzdFtpXVttaS5wcm9wZXJ0eV0gfX0gPC90ZXh0YXJlYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIm1pLnR5cGUgPT0gJ2Jvb2xlYW4nXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIm1pLmN1c3RvbUNsYXNzUHJvcGVydHkgIT0gdW5kZWZpbmVkID8gbWkuY3VzdG9tQ2xhc3NQcm9wZXJ0eSA6ICcnXCIgdHJhbnNsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsICpuZ0lmPVwidmlld0luZm9PYmpMaXN0W2ldW21pLnByb3BlcnR5XSA9PSB0cnVlXCI+WWVzPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCAqbmdJZj1cInZpZXdJbmZvT2JqTGlzdFtpXVttaS5wcm9wZXJ0eV0gPT0gZmFsc2VcIj5ObzwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDxsYWJlbFxyXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwidmlld0luZm9PYmpMaXN0W2ldW21pLnByb3BlcnR5XSA9PSAnJyB8fCB2aWV3SW5mb09iakxpc3RbaV1bbWkucHJvcGVydHldID09IG51bGxcIj4tPC9sYWJlbD4gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwibWkudHlwZSA9PSAnY29uY2F0J1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwibGFiZWwtY29udHJvbCBicmVha3dvcmRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJtaS5jdXN0b21DbGFzc1Byb3BlcnR5ICE9IHVuZGVmaW5lZCA/IG1pLmN1c3RvbUNsYXNzUHJvcGVydHkgOiAnJ1wiIHRyYW5zbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgbWkuY29uY2F0IH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIm1pLnR5cGUgPT0gJ3N3aXRjaCdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0Zvcj1cImxldCBjcyBvZiBtaT8uY2FzZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cInN3aXRjaENhc2Uodmlld0luZm9PYmpMaXN0W2ldLGNzKSAmJiAhY3MuSGlkZGVuXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbC1jb250cm9sIGJyZWFrd29yZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJtaS5jdXN0b21DbGFzc1Byb3BlcnR5ICE9IHVuZGVmaW5lZCA/IG1pLmN1c3RvbUNsYXNzUHJvcGVydHkgOiAnJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2xhdGUgKm5nSWY9XCJjcy5yZXN1bHQudHlwZSA9PSAndGV4dCdcIj57eyB2aWV3SW5mb09iakxpc3RbaV1bY3MucmVzdWx0LnByb3BlcnR5XVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gW25nQ2xhc3NdPVwibWkuY3VzdG9tQ2xhc3NQcm9wZXJ0eSAhPSB1bmRlZmluZWQgPyBtaS5jdXN0b21DbGFzc1Byb3BlcnR5IDogJydcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNsYXRlICpuZ0lmPVwiY3MucmVzdWx0LnR5cGUgPT0gJ2RlY2ltYWwnXCI+e3tcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdJbmZvT2JqTGlzdFtpXVtjcy5yZXN1bHQucHJvcGVydHldIHwgbnVtYmVyOicuMic6J2VuLVVTJyB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBbbmdDbGFzc109XCJtaS5jdXN0b21DbGFzc1Byb3BlcnR5ICE9IHVuZGVmaW5lZCA/IG1pLmN1c3RvbUNsYXNzUHJvcGVydHkgOiAnJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2xhdGUgKm5nSWY9XCJjcy5yZXN1bHQudHlwZSA9PSAnZGF0ZSdcIj57eyB2aWV3SW5mb09iakxpc3RbaV1bY3MucmVzdWx0LnByb3BlcnR5XSB8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRlOiAnZGQtTU1NLXl5eXknIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiY3MucmVzdWx0LnR5cGUgPT0gJ2xpbmsnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIm1pLmN1c3RvbUNsYXNzUHJvcGVydHkgIT0gdW5kZWZpbmVkID8gbWkuY3VzdG9tQ2xhc3NQcm9wZXJ0eSA6ICcnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIFt0YXJnZXRdPVwiY3MucmVzdWx0LnRhcmdldFwiIFtyb3V0ZXJMaW5rXT1cImdlblJvdXRlckxpbmsoY3MucmVzdWx0LnBhdGgpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3F1ZXJ5UGFyYW1zXT1cImdlbkFjdGlvbih2aWV3SW5mb09iakxpc3RbaV0sY3MucmVzdWx0LnBhcmFtKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIihtaS5pc0N1cnJlbmN5ICE9IHVuZGVmaW5lZCAmJiBtaS5pc0N1cnJlbmN5KVwiPnt7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlld0luZm9PYmpMaXN0W2ldW2NzLnJlc3VsdC5wcm9wZXJ0eV0gfCBudW1iZXI6Jy4yJzonZW4tVVMnIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIihtaS5pc0N1cnJlbmN5ID09IHVuZGVmaW5lZCB8fCAhbWkuaXNDdXJyZW5jeSlcIj57e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdJbmZvT2JqTGlzdFtpXVtjcy5yZXN1bHQucHJvcGVydHldIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImNzLnJlc3VsdC50eXBlID09ICdib29sZWFuJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJtaS5jdXN0b21DbGFzc1Byb3BlcnR5ICE9IHVuZGVmaW5lZCA/IG1pLmN1c3RvbUNsYXNzUHJvcGVydHkgOiAnJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2xhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cInZpZXdJbmZvT2JqTGlzdFtpXVtjcy5yZXN1bHQucHJvcGVydHldID09ICd0cnVlJ1wiPlllczwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwidmlld0luZm9PYmpMaXN0W2ldW2NzLnJlc3VsdC5wcm9wZXJ0eV0gPT0gJ2ZhbHNlJ1wiPk5vPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImNzLnJlc3VsdC50eXBlID09ICdjb25jYXQnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJsYWJlbC1jb250cm9sIGJyZWFrd29yZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIm1pLmN1c3RvbUNsYXNzUHJvcGVydHkgIT0gdW5kZWZpbmVkID8gbWkuY3VzdG9tQ2xhc3NQcm9wZXJ0eSA6ICcnXCIgdHJhbnNsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBjcy5yZXN1bHQuY29uY2F0IH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImNzLnJlc3VsdC50eXBlID09ICdjYWxsYmFjaydcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY3MucmVzdWx0LmlzVGV4dCAhPSB1bmRlZmluZWQgJiYgY3MucmVzdWx0LmlzVGV4dDsgdGhlbiB0ZXh0Q2FsbGJhY2sgZWxzZSBpY29uQ2FsbGJhY2tcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI3RleHRDYWxsYmFjaz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cImphdmFzY3JpcHQ6dm9pZCgwKTtcIiAoY2xpY2spPVwiY2FsbGJhY2tGdW5jdGlvbih2aWV3SW5mb09iakxpc3RbaV0sIGNzLnJlc3VsdC5rZXkpXCI+e3tcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdJbmZvT2JqTGlzdFtpXVtjcy5yZXN1bHQucHJvcGVydHldIH19PC9hPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNpY29uQ2FsbGJhY2s+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIFtuZ0NsYXNzXT1cIltjcy5yZXN1bHQudG9vbHRpcCAhPSB1bmRlZmluZWQgJiYgY3MucmVzdWx0LnRvb2x0aXAgIT0gJycgPyAndG9vbHRpcHMnIDogJycsIGNzLnJlc3VsdC5hbmNob3IgPT0gdW5kZWZpbmVkIHx8IGNzLnJlc3VsdC5hbmNob3IgPT0gJycgPyAnc3VjY2VzcyBwLTAnIDogY3MucmVzdWx0LmFuY2hvcl1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImNhbGxiYWNrRnVuY3Rpb24odmlld0luZm9PYmpMaXN0W2ldLCBjcy5yZXN1bHQua2V5KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmb250LW1lZGl1bS0zIG1yLTJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCIgY3MucmVzdWx0Lmljb24gPT0gdW5kZWZpbmVkIHx8IGNzLnJlc3VsdC5pY29uID09ICcnID8gJ2Z0LWVkaXQtMicgOiBjcy5yZXN1bHQuaWNvbiBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiY3MucmVzdWx0LnRvb2x0aXAgIT0gdW5kZWZpbmVkICYmIGNzLnJlc3VsdC50b29sdGlwICE9ICcnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiY3MucmVzdWx0LnRvb2x0aXAgIT0gdW5kZWZpbmVkICYmIGNzLnJlc3VsdC50b29sdGlwICE9ICcnID8gJ3Rvb2x0aXBzdGV4dCcgOiAnJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2NzLnJlc3VsdC50b29sdGlwfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L3NlY3Rpb24+Il19