@gsp-svc/formdoc-upload 0.2.20 → 1.1.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.
@@ -53,6 +53,7 @@ export class FileUploadComponent {
53
53
  this.isWhiteList = false;
54
54
  this.bufferSize = 5 * 1024 * 1024;
55
55
  this.selectedFileCount = 0;
56
+ this.uploadBtnDisabled = false;
56
57
  this.uploadIconAddress = this.createBaseUrl('/platform/runtime/dfs/images/upload.svg');
57
58
  this.uploadLittleIconAddress = this.createBaseUrl('/platform/runtime/dfs/images/uploadIcon.svg');
58
59
  this.hasSelectedFile = false;
@@ -74,6 +75,7 @@ export class FileUploadComponent {
74
75
  this.uploadedFileInfoList = [];
75
76
  this.oldUploadedFileList = [];
76
77
  //uploadedNameList = [];
78
+ this.uploadInfoErrorMessage = "";
77
79
  this.sameNameAllowed = true;
78
80
  this.maxFileSize = 0;
79
81
  this.checkboxPos = { top: '0px' };
@@ -145,7 +147,13 @@ export class FileUploadComponent {
145
147
  * @return {?}
146
148
  */
147
149
  res => {
148
- if (res != null && res.error == null) {
150
+ if (res.error != null) {
151
+ this.uploadInfoErrorMessage = res.error.Message;
152
+ // console.log('获取上传信息报错,错误信息为:',errMsg);
153
+ return;
154
+ }
155
+ else {
156
+ this.uploadBtnDisabled = false;
149
157
  this.sameNameAllowed = res.sameNameAllowed;
150
158
  this.maxFileSize = parseInt(JSON.parse(res.validateConfiguration).maxFileSize);
151
159
  this.isWhiteList = JSON.parse(res.validateConfiguration).whiteList;
@@ -182,6 +190,17 @@ export class FileUploadComponent {
182
190
  // message: this.localepipe.transform('uploading')
183
191
  // });
184
192
  }
193
+ /**
194
+ * @return {?}
195
+ */
196
+ getRightClass() {
197
+ if (this.uploadBtnDisabled) {
198
+ return 'btn btn-primary btn-lg disabled';
199
+ }
200
+ else {
201
+ return 'btn btn-primary btn-lg';
202
+ }
203
+ }
185
204
  /**
186
205
  * @param {?} name
187
206
  * @return {?}
@@ -211,6 +230,11 @@ export class FileUploadComponent {
211
230
  * @return {?}
212
231
  */
213
232
  fileSelected($event) {
233
+ if (this.uploadInfoErrorMessage) {
234
+ this.msgService.error(this.uploadInfoErrorMessage);
235
+ this.uploadBtnDisabled = true;
236
+ return;
237
+ }
214
238
  this.hasSelectedFile = true;
215
239
  this.selectedFiles = document.querySelector('#file');
216
240
  if (this.fileCount > 0) {
@@ -244,11 +268,19 @@ export class FileUploadComponent {
244
268
  }
245
269
  }
246
270
  /** @type {?} */
247
- let invalidCharList = this.findInvalidCharacter(selectedFile.name);
271
+ const invalidCharList = this.findInvalidCharacter(selectedFile.name);
272
+ /** @type {?} */
273
+ let invalidCharListFilter = invalidCharList.filter((/**
274
+ * @param {?} s
275
+ * @return {?}
276
+ */
277
+ (s) => {
278
+ return s && s.trim();
279
+ }));
248
280
  /** @type {?} */
249
281
  let errorMessage = "";
250
- if (invalidCharList.length > 0) {
251
- invalidCharList.forEach((/**
282
+ if (invalidCharListFilter.length > 0) {
283
+ invalidCharListFilter.forEach((/**
252
284
  * @param {?} element
253
285
  * @param {?} index
254
286
  * @return {?}
@@ -257,7 +289,7 @@ export class FileUploadComponent {
257
289
  errorMessage += "\"";
258
290
  errorMessage += element;
259
291
  errorMessage += "\"";
260
- errorMessage += (index === invalidCharList.length - 1) ? "" : ",";
292
+ errorMessage += (index === invalidCharListFilter.length - 1) ? "" : ",";
261
293
  }));
262
294
  if (this.selectedFiles.files.length === 1) {
263
295
  selectedFile.isAllowedUpload = false;
@@ -486,7 +518,8 @@ export class FileUploadComponent {
486
518
  extensionDropListId: 0,
487
519
  extensionName: "",
488
520
  securityDropListId: 0,
489
- securityInfo: this.securityInfoList[0]
521
+ securityInfo: this.securityInfoList[0],
522
+ style: {}
490
523
  };
491
524
  if (this.storageExtension != null)
492
525
  fileInfo.extensionName = this.defaultPropertyName;
@@ -513,6 +546,9 @@ export class FileUploadComponent {
513
546
  else if (type.includes("powerpoint") || type.includes("presentation")) {
514
547
  this.addDocInfo(selectedFile, fileInfo, DocType.Powerpoint);
515
548
  }
549
+ else if (type.includes("zip") || selectedFile.name.includes(".rar")) {
550
+ this.addDocInfo(selectedFile, fileInfo, DocType.Zip);
551
+ }
516
552
  else {
517
553
  this.addDocInfo(selectedFile, fileInfo, DocType.Other);
518
554
  // let name: string = selectedFile.name;
@@ -536,6 +572,7 @@ export class FileUploadComponent {
536
572
  uploadFileInfo.metadataId = uuid;
537
573
  uploadFileInfo.fileName = fileInfo.name;
538
574
  uploadFileInfo.fileSize = fileInfo.size;
575
+ uploadFileInfo.originalSize = fileInfo.fileSize;
539
576
  uploadFileInfo.state = state;
540
577
  uploadFileInfo.securityInfo = this.securityInfoList[0];
541
578
  //判断是否支持分片上传
@@ -660,6 +697,8 @@ export class FileUploadComponent {
660
697
  let formData = new FormData();
661
698
  formData.append('uploadEntity', JSON.stringify(entity));
662
699
  formData.append('file', selectedFile);
700
+ /** @type {?} */
701
+ let intervalId;
663
702
  this.uploadSingleFile(formData).subscribe((/**
664
703
  * @param {?} res
665
704
  * @return {?}
@@ -677,26 +716,66 @@ export class FileUploadComponent {
677
716
  this.uploadedFileInfoList = this.uploadedFileInfoList.concat(uploadFileInfo);
678
717
  this.uploadedFileTotal++;
679
718
  }
719
+ clearInterval(intervalId);
720
+ }));
721
+ /** @type {?} */
722
+ let index = -1;
723
+ this.files.forEach((/**
724
+ * @param {?} x
725
+ * @return {?}
726
+ */
727
+ x => {
728
+ if (x.name == fileInfo.name) {
729
+ if (index == -1)
730
+ index = this.files.indexOf(x);
731
+ }
680
732
  }));
733
+ if (index != -1 && index != this.files.length - 1) {
734
+ this.files.splice(index, 1);
735
+ this.uploadFileInfoList.splice(index, 1);
736
+ this.uploadedFileInfoList.splice(index, 1);
737
+ this.uploadedFileTotal--;
738
+ }
739
+ intervalId = setInterval((/**
740
+ * @return {?}
741
+ */
742
+ () => {
743
+ this.getUploadProcess(entity.metadataId).subscribe((/**
744
+ * @param {?} res
745
+ * @return {?}
746
+ */
747
+ res => {
748
+ if (res.error != null)
749
+ this.files[this.files.indexOf(fileInfo)].uploadProcess = 10;
750
+ else {
751
+ if (res < 10)
752
+ res = 10;
753
+ if (res > 90)
754
+ res = 90;
755
+ this.files[this.files.indexOf(fileInfo)].uploadProcess = res;
756
+ }
757
+ }));
758
+ }), 200);
681
759
  }
760
+ }
761
+ /**
762
+ * @param {?} metadataId
763
+ * @return {?}
764
+ */
765
+ getUploadProcess(metadataId) {
682
766
  /** @type {?} */
683
- let index = -1;
684
- this.files.forEach((/**
685
- * @param {?} x
767
+ let url = "/api/runtime/dfs/v1.0/formdoc/upload/process?metadataid=" + metadataId;
768
+ return this.httpclient.get(url).pipe(tap((/**
769
+ * @param {?} res
686
770
  * @return {?}
687
771
  */
688
- x => {
689
- if (x.name == fileInfo.name) {
690
- if (index == -1)
691
- index = this.files.indexOf(x);
692
- }
693
- }));
694
- if (index != -1 && index != this.files.length - 1) {
695
- this.files.splice(index, 1);
696
- this.uploadFileInfoList.splice(index, 1);
697
- this.uploadedFileInfoList.splice(index, 1);
698
- //this.uploadedFileTotal--;
699
- }
772
+ res => { })), catchError((/**
773
+ * @param {?} error
774
+ * @return {?}
775
+ */
776
+ (error) => {
777
+ return of(error);
778
+ })));
700
779
  }
701
780
  /**
702
781
  * @param {?} formdata
@@ -976,6 +1055,11 @@ export class FileUploadComponent {
976
1055
  this.files.push(fileInfo);
977
1056
  break;
978
1057
  }
1058
+ case DocType.Zip: {
1059
+ fileInfo.source = this.createBaseUrl("/platform/runtime/dfs/images/zip.png");
1060
+ this.files.push(fileInfo);
1061
+ break;
1062
+ }
979
1063
  case DocType.Powerpoint: {
980
1064
  fileInfo.source = this.createBaseUrl("/platform/runtime/dfs/images/ppt.png");
981
1065
  this.files.push(fileInfo);
@@ -1003,6 +1087,7 @@ export class FileUploadComponent {
1003
1087
  imgUrl = sanitizer.bypassSecurityTrustResourceUrl(imgUrl);
1004
1088
  }
1005
1089
  fileInfo.source = imgUrl;
1090
+ fileInfo.style = { "max-width": "120px", "max-height": "118px" };
1006
1091
  this.files.push(fileInfo);
1007
1092
  //因为异步处理的差异,补偿一次删除
1008
1093
  /** @type {?} */
@@ -1239,8 +1324,8 @@ export class FileUploadComponent {
1239
1324
  FileUploadComponent.decorators = [
1240
1325
  { type: Component, args: [{
1241
1326
  selector: 'app-file-upload',
1242
- template: "<div *ngIf=\"hasSelectedFile\">\n\n <div class=\"farris-header\" style=\"height: 50px; width: 100%\">\n <div class=\"btn btn-secondary upload_button\">\n <img [src]=\"uploadLittleIconAddress\">\n <span>{{'uploadFile' | locale}} </span>\n <input type=\"file\" (focus)=\"showLoading()\" (change)=\"fileSelected($event)\" id=\"file\" multiple=\"multiple\"\n title=\"\" [accept]=\"fileType\">\n </div>\n\n\n <button *ngIf=\"showType==0 && !fileAllSelected && files.length >0 \" style=\"padding-left: 20px\"\n class=\"btn-link btn ng-star-inserted\" (click)=\"selectAllFile()\">{{'selectAll' | locale}}</button>\n <button *ngIf=\"showType==0 && fileAllSelected && files.length >0 \" style=\"padding-left: 20px\"\n class=\"btn-link btn ng-star-inserted\" (click)=\"selectAllFile()\">{{'selectNull' | locale}}</button>\n <button *ngIf=\"showType==0 && selectedFileCount>0\" style=\"padding-left: 20px\"\n class=\"btn-link btn ng-star-inserted\" (click)=\"listMultipleDeleteFile()\">{{'delete' | locale}}</button>\n\n <button *ngIf=\"showType==1 && selectedFileCount>0\" style=\"padding-left: 20px\"\n class=\"btn-link btn ng-star-inserted\" (click)=\"listMultipleDeleteFile()\">{{'delete' | locale}}</button>\n\n <farris-radio-group class=\"button_group_upload\" [(model)]=\"radioButtonGroupValue\" [horizontal]=\"false\">\n <farris-radio-button [label]=\"'showByGroup'\" (click)=\"showByGroup()\">\n <span class=\"f-icon f-icon-sudoku-new\"> </span>\n </farris-radio-button>\n <farris-radio-button [label]=\"'showByList'\" (click)=\"showByList()\">\n <span class=\"f-icon f-icon-page-title-define\"> </span>\n </farris-radio-button>\n\n </farris-radio-group>\n\n <!-- <kendo-buttongroup [selection]=\"'single'\" class=\"button_group_upload \"\n style=\"background-color: #ffffff; color: #388FFF;border: 1px solid #ddd;\" look=\"flat\">\n <button kendoButton [selected]=\"true\" [toggleable]=\"true\"\n [imageUrl]=\"'/platform/runtime/dfs/images/piclist.png'\" (click)=\"showByGroup()\"></button>\n <button kendoButton [toggleable]=\"true\" [imageUrl]=\"'/platform/runtime/dfs/images/queuelist.png'\"\n (click)=\"showByList()\"></button>\n </kendo-buttongroup> -->\n\n\n </div>\n\n <!-- <div class=\"progress\" style=\"height: 12px;\">\n <div class=\"progress-bar\" role=\"progressbar\" [ngStyle]=\"uploadProcess\"></div>\n </div> -->\n\n <div class=\"pic_list\" *ngIf=\"showType==0\">\n <ul *ngFor=\"let file of files\">\n <li (mouseenter)=\"mouseOver(file)\" (mouseleave)=\"mouseOut(file)\">\n <div *ngIf=\"file.isUploading\">\n <farris-progress [type]=\"'circle'\" [percent]=\"file.uploadProcess\" [strokeLinecap]=\"'square'\"\n [status]=\"'active'\"></farris-progress>\n </div>\n\n <table *ngIf=\"!file.uploadResult && !file.isUploading\"\n style=\"margin: 0 auto; border: 1px solid #ddd; width: 135px; height: 160px;\">\n <tr style=\"margin: 0 auto ; height: 80px;\">\n <td style=\"text-align: center\"><span class=\"f-icon f-icon-warn\"></span></td>\n </tr>\n <tr style=\"margin: 0 auto ; height: 30px;\">\n <td style=\"text-align: center\"> {{'uploadFailure' | locale}} </td>\n </tr>\n <tr>\n <td style=\"text-align: center\"><button style=\"margin: 0 auto ; height: 20px; \"\n class=\"btn-link btn ng-star-inserted\" (click)=\"showErrorMessage(file)\">{{'detail' |\n locale}}</button></td>\n </tr>\n </table>\n <div *ngIf=\"!file.isUploading && file.uploadResult\" style=\"border: 1px solid #ddd;\">\n <img [src]='file.source'>\n <div *ngIf=\"haveExtensionProperty\"\n style=\"width: 133px; height: 25px; background-color: white; position: absolute;bottom: 0; \">\n\n <div style=\"width: 100px;height: 25px;position:absolute;margin: 0 17px;\">\n <farris-combo-list [(ngModel)]=\"file.extensionDropListId\" [data]=\"propertiesNames\"\n [idField]=\"'id'\" [textField]=\"'name'\" (selectChange)=\"typeChange($event,file)\"\n [enableClear]=\"false\">\n <!-- <ng-template #itemTemp let-item>\n <div class=\"combo-list\">\n <span [class]=\"'combo-list-circle combo-list-'+item.state\"></span>\n <span class=\"combo-list-label\">{{item.label}}</span>\n </div>\n </ng-template> -->\n </farris-combo-list>\n </div>\n </div>\n <div *ngIf=\"haveSecurityInfo\"\n style=\"width: 133px; height: 25px; background-color: white; position: absolute;bottom: 0; \">\n\n <div style=\"width: 100px;height: 25px;position:absolute;margin: 0 17px;\">\n <farris-combo-list [(ngModel)]=\"file.extensionDropListId\" [data]=\"securityInfoList\"\n [idField]=\"'id'\" [textField]=\"'name'\" (selectChange)=\"securityChange($event,file)\"\n [enableClear]=\"false\">\n <!-- <ng-template #itemTemp let-item>\n <div class=\"combo-list\">\n <span [class]=\"'combo-list-circle combo-list-'+item.state\"></span>\n <span class=\"combo-list-label\">{{item.label}}</span>\n </div>\n </ng-template> -->\n </farris-combo-list>\n </div>\n </div>\n </div>\n <table *ngIf=\"!file.isUploading\">\n <tr style=\"height: 20px\">\n <td style=\"width: 15px; vertical-align: middle; text-align: center\">\n <!-- <input type=\"checkbox\" [id]=\"file.name\" (click)=\"checkoutSelectFile(file.name)\"> -->\n <div class=\"farris-input-wrap\" style=\"height: 20px\" (click)=\"checkoutSelectFile(file)\">\n <div class=\"custom-control custom-checkbox\" style=\"margin: 4px 0 0;height: 20px;\"\n [ngStyle]=\"checkboxPos\">\n <input class=\"custom-control-input\" type=\"checkbox\" [id]=\"file.name\"\n [(ngModel)]=\"file.selectd\">\n <label class=\"custom-control-label\"\n style=\"padding: 0 0 10px 0; position: relative; top: -8px;\"></label>\n </div>\n </div>\n </td>\n <td style=\"width: 120px; vertical-align: middle; text-align: center\" [title]=\"file.name\">\n {{file.picListDisplayName}}</td>\n </tr>\n </table>\n <!-- <span>{{file.picListDisplayName}}</span> -->\n <!-- <p class=\"filename\">{{file.picListDisplayName}}</p> -->\n <button *ngIf=\"!file.isUploading && file.mouseOn\"\n style=\"position: absolute; top: 0; right: 0px; width: 24px; height: 24px; border: none;\"\n (click)=\"listDeleteFile(file)\">\n <span style=\"position: relative; right: 2px; \" class=\"f-icon f-icon-delete\"> </span>\n </button>\n <!-- <button *ngIf=\"file.hasUploaded\" class=\"k-primary\" kendoButton [icon]=\"'check'\" [disabled]=\"true\"></button> -->\n </li>\n </ul>\n <br>\n </div>\n\n <div class=\"queue_list\" *ngIf=\"showType==1\">\n <table>\n <tr style=\"height: 50px; table-layout:fixed;\">\n <th style=\"width: 40px; vertical-align: middle; text-align: center\">\n <!-- <input type=\"checkbox\" id=\"allCheckBox\" (click)=\"selectAllFile()\"> -->\n <div class=\"farris-input-wrap\" (click)=\"selectAllFile()\">\n <div class=\"custom-control custom-checkbox\" style=\"margin: 4px 0 0\">\n <input class=\"custom-control-input\" type=\"checkbox\" id=\"allCheckBox\"\n [(ngModel)]=\"fileAllSelected\">\n <label class=\"custom-control-label\" style=\"padding: 0\"></label>\n </div>\n </div>\n </th>\n <th style=\"vertical-align: middle\" [ngStyle]=\"queueListStyle\">{{'fileName' | locale}}</th>\n <th style=\"width: 100px; vertical-align: middle\">{{'size' | locale}}</th>\n <th style=\"width: 170px; vertical-align: middle; text-align: center\">{{'state' | locale}}</th>\n <th *ngIf=\"haveExtensionProperty\" style=\"width: 100px; vertical-align: middle; text-align: center\">\n {{storageExtension.extensionName}}\n </th>\n <th style=\"width: 140px; vertical-align: middle; text-align: center\">{{'operation' | locale}}</th>\n </tr>\n </table>\n <div style=\"height: 370px; overflow: auto;\">\n <table>\n <tr *ngFor=\"let file of files\" style=\"height: 40px\">\n <td colspan=\"5\" *ngIf=\"file.isUploading\">\n <!-- <div style=\"width:100%; display: table-cell; vertical-align: middle; text-align: center; \"> -->\n <div style=\"width: 500px;margin:0 auto\">\n <farris-progress [percent]=\"file.uploadProcess\" [status]=\"'active'\">\n </farris-progress>\n </div>\n\n </td>\n <td *ngIf=\"!file.isUploading\" style=\" width: 40px; vertical-align: middle; text-align: center\">\n <!-- <input type=\"checkbox\" [id]=\"file.name\" (click)=\"checkoutSelectFile(file.name)\"> -->\n <div class=\"farris-input-wrap\" (click)=\"checkoutSelectFile(file)\">\n <div class=\"custom-control custom-checkbox\" style=\"margin: 4px 0 0\">\n <input class=\"custom-control-input\" type=\"checkbox\" [id]=\"file.name\"\n [(ngModel)]=\"file.selectd\">\n <label class=\"custom-control-label\" style=\"padding: 0\"></label>\n </div>\n </div>\n </td>\n <td *ngIf=\"!file.isUploading\" style=\"vertical-align: middle\" [ngStyle]=\"queueListStyle\">\n {{file.queueListDisplayName}}</td>\n <td *ngIf=\"!file.isUploading\" style=\"width: 100px; vertical-align: middle\">{{file.size}}</td>\n <td *ngIf=\"!file.isUploading\" style=\"text-align: center; width: 170px; vertical-align: middle;\">\n <table *ngIf=\"!file.uploadResult\" style=\"margin: 0 auto\">\n <tr style=\"margin: 0 auto\">\n <td><span class=\"f-icon f-icon-error\"></span></td>\n <td> {{'uploadFailure' | locale}} </td>\n <td><button style=\"height: 24px\" class=\"btn-link btn ng-star-inserted\"\n (click)=\"showErrorMessage(file)\">{{'detail' | locale}}</button></td>\n </tr>\n </table>\n <!-- <span *ngIf=\"!file.uploadResult\"><span class=\"f-icon f-icon-error\"></span> \u4E0A\u4F20\u5931\u8D25 <button\n class=\"btn-link btn ng-star-inserted\" (click)=\"showErrorMessage(file)\">\u8BE6\u60C5</button></span> -->\n <span *ngIf=\"file.uploadResult\"><span class=\"f-icon f-icon-success\"></span> {{'uploadSucceed' |\n locale}}</span>\n </td>\n <td *ngIf=\"!file.isUploading&&haveExtensionProperty\"\n style=\"text-align: center; width: 100px; vertical-align: middle;\">\n <farris-combo-list [(ngModel)]=\"file.extensionDropListId\" [data]=\"propertiesNames\"\n [idField]=\"'id'\" [textField]=\"'name'\" (selectChange)=\"typeChange($event,file)\"\n [enableClear]=\"false\">\n <!-- <ng-template #itemTemp let-item>\n <div class=\"combo-list\">\n <span [class]=\"'combo-list-circle combo-list-'+item.state\"></span>\n <span class=\"combo-list-label\">{{item.label}}</span>\n </div>\n </ng-template> -->\n </farris-combo-list>\n </td>\n <td *ngIf=\"!file.isUploading&&haveSecurityInfo\"\n style=\"text-align: center; width: 100px; vertical-align: middle;\">\n <farris-combo-list [(ngModel)]=\"file.extensionDropListId\" [data]=\"securityInfoList\"\n [idField]=\"'id'\" [textField]=\"'name'\" (selectChange)=\"securityChange($event,file)\"\n [enableClear]=\"false\">\n <!-- <ng-template #itemTemp let-item>\n <div class=\"combo-list\">\n <span [class]=\"'combo-list-circle combo-list-'+item.state\"></span>\n <span class=\"combo-list-label\">{{item.label}}</span>\n </div>\n </ng-template> -->\n </farris-combo-list>\n </td>\n\n <td *ngIf=\"!file.isUploading\" style=\"text-align: center; width: 140px; vertical-align: middle;\">\n <!-- <button *ngIf=\"file.uploadResult\" class=\"btn-link btn ng-star-inserted\" (click)=\"retryUploadFile(file.name)\">\u91CD\u8BD5</button> -->\n <button class=\"btn-link btn ng-star-inserted\" style=\"margin: 0 auto\"\n (click)=\"listDeleteFile(file)\">{{'delete' | locale}}</button>\n </td>\n\n </tr>\n </table>\n </div>\n </div>\n</div>\n\n<div *ngIf=\"!hasSelectedFile\" class='home_page'>\n <img [src]=\"uploadIconAddress\">\n <div>\n <span class=\"btn btn-primary btn-lg\">{{'uploadFile' | locale}} </span>\n <input type=\"file\" (change)=\"fileSelected($event)\" id=\"file\" multiple=\"multiple\" title=\"\" [accept]=\"fileType\">\n <!-- <input type=\"file\" (focus)=\"showLoading()\" (change)=\"fileSelected($event)\" id=\"file\" multiple=\"multiple\" title=\"\" [accept]=\"fileType\"> -->\n </div>\n</div>",
1243
- styles: [".home_page{text-align:center}.home_page img{position:absolute;top:180px;margin-left:-35px;width:70px;height:56px}.home_page div{position:absolute;left:50%;top:255px;margin-left:-75px;width:150px;height:32px;overflow:hidden}.home_page div span{width:150px;height:32px;position:absolute;z-index:10;left:0}.home_page div input{position:absolute;left:0;top:0;opacity:0;filter:'alpha(opacity=0)';z-index:11}.upload_button{width:110px;height:32px;overflow:hidden}.upload_button span{position:relative;right:-4px;top:4px;width:56px;height:22px;font-size:14px}.upload_button input{height:32px;width:110px;position:absolute;left:22px;top:12px;opacity:0;filter:'alpha(opacity=0)';overflow:hidden}.upload_button img{position:relative;left:-6px;top:3px;width:14px;height:14px}.button_group_upload{position:absolute;right:18px;top:12px;height:26px;width:90px}.button_group_upload button{height:26px;width:26px}.fileinput-button{position:absolute;right:60px;bottom:40px;overflow:hidden;width:24px;height:24px;border-radius:12px;transform:scale(2.5);-ms-transform:scale(2.5);-moz-transform:scale(2.5);-webkit-transform:scale(2.5);-o-transform:scale(2.5);color:#0686fd}.fileinput-button input{position:absolute;left:0;top:0;opacity:0;filter:'alpha(opacity=0)'}.pic-droplist{height:24px;color:#e0e1e2;background-color:#e0e1e2}.pic-droplist input-group{display:table-cell;width:100px;text-align:center;border:0}.pic-droplist input-group div{border:0}.pic-droplist input-group div div,.pic-droplist input-group div input{background-color:#e0e1e2}.pic_list{padding:0;height:415px;overflow-y:auto;overflow-x:hidden}.pic_list ul{padding:0;list-style:none;width:100%;margin:20px 0 0 20px}.pic_list ul li{height:179px;width:135px;margin:8px 0 8px 12px;float:left;overflow:hidden;align-items:center;position:relative}.pic_list ul li div{width:135px;height:159px;margin:auto;display:table-cell;vertical-align:middle;text-align:center;position:relative}.pic_list ul li div img{max-width:120px;max-height:118px;align-items:center;margin:auto;vertical-align:middle;text-align:center}.pic_list ul li span.filename{width:100px;text-align:center;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.queue_list{display:block;height:420px;overflow-y:auto}.file_list{list-style:none;margin:0;padding:0;overflow-x:hidden;overflow-y:auto}.file_list li{height:50px;line-height:35px;font-size:16px;position:relative}.file_list li button{float:right;top:6px;right:10px;width:20px}.file_list li p.title{padding:0 0 0 6px;margin:0 210px 0 0}.file_list li p.size{position:absolute;width:100px;top:0;right:100px}"]
1327
+ template: "<div *ngIf=\"hasSelectedFile\">\r\n\r\n <div class=\"farris-header\" style=\"height: 50px; width: 100%\">\r\n <div class=\"btn btn-secondary upload_button\">\r\n <img [src]=\"uploadLittleIconAddress\">\r\n <span>{{'uploadFile' | locale}} </span>\r\n <input type=\"file\" (focus)=\"showLoading()\" (change)=\"fileSelected($event)\" id=\"file\" multiple=\"multiple\"\r\n title=\"\" [accept]=\"fileType\" [disabled]=\"uploadBtnDisabled\">\r\n </div>\r\n\r\n\r\n <button *ngIf=\"showType==0 && !fileAllSelected && files.length >0 \" style=\"padding-left: 20px\"\r\n class=\"btn-link btn ng-star-inserted\" (click)=\"selectAllFile()\">{{'selectAll' | locale}}</button>\r\n <button *ngIf=\"showType==0 && fileAllSelected && files.length >0 \" style=\"padding-left: 20px\"\r\n class=\"btn-link btn ng-star-inserted\" (click)=\"selectAllFile()\">{{'selectNull' | locale}}</button>\r\n <button *ngIf=\"showType==0 && selectedFileCount>0\" style=\"padding-left: 20px\"\r\n class=\"btn-link btn ng-star-inserted\" (click)=\"listMultipleDeleteFile()\">{{'delete' | locale}}</button>\r\n\r\n <button *ngIf=\"showType==1 && selectedFileCount>0\" style=\"padding-left: 20px\"\r\n class=\"btn-link btn ng-star-inserted\" (click)=\"listMultipleDeleteFile()\">{{'delete' | locale}}</button>\r\n <span class=\"help_text\" *ngIf=\"files.length >0\">\u6587\u4EF6\u4E2A\u6570\uFF1A{{files.length}}</span>\r\n\r\n <farris-radio-group class=\"button_group_upload\" [(model)]=\"radioButtonGroupValue\" [horizontal]=\"false\">\r\n <farris-radio-button [label]=\"'showByGroup'\" (click)=\"showByGroup()\">\r\n <span class=\"f-icon f-icon-sudoku-new\"> </span>\r\n </farris-radio-button>\r\n <farris-radio-button [label]=\"'showByList'\" (click)=\"showByList()\">\r\n <span class=\"f-icon f-icon-page-title-define\"> </span>\r\n </farris-radio-button>\r\n\r\n </farris-radio-group>\r\n\r\n <!-- <kendo-buttongroup [selection]=\"'single'\" class=\"button_group_upload \"\r\n style=\"background-color: #ffffff; color: #388FFF;border: 1px solid #ddd;\" look=\"flat\">\r\n <button kendoButton [selected]=\"true\" [toggleable]=\"true\"\r\n [imageUrl]=\"'/platform/runtime/dfs/images/piclist.png'\" (click)=\"showByGroup()\"></button>\r\n <button kendoButton [toggleable]=\"true\" [imageUrl]=\"'/platform/runtime/dfs/images/queuelist.png'\"\r\n (click)=\"showByList()\"></button>\r\n </kendo-buttongroup> -->\r\n\r\n\r\n </div>\r\n\r\n <!-- <div class=\"progress\" style=\"height: 12px;\">\r\n <div class=\"progress-bar\" role=\"progressbar\" [ngStyle]=\"uploadProcess\"></div>\r\n </div> -->\r\n\r\n <div class=\"pic_list\" *ngIf=\"showType==0\">\r\n <ul *ngFor=\"let file of files\">\r\n <li (mouseenter)=\"mouseOver(file)\" (mouseleave)=\"mouseOut(file)\">\r\n <div *ngIf=\"file.isUploading\">\r\n <farris-progress [type]=\"'circle'\" [percent]=\"file.uploadProcess\" [strokeLinecap]=\"'square'\"\r\n [status]=\"'active'\"></farris-progress>\r\n </div>\r\n\r\n <table *ngIf=\"!file.uploadResult && !file.isUploading\"\r\n style=\"margin: 0 auto; border: 1px solid #ddd; width: 135px; height: 160px;\">\r\n <tr style=\"margin: 0 auto ; height: 80px;\">\r\n <td style=\"text-align: center\"><span class=\"f-icon f-icon-warn\"></span></td>\r\n </tr>\r\n <tr style=\"margin: 0 auto ; height: 30px;\">\r\n <td style=\"text-align: center\"> {{'uploadFailure' | locale}} </td>\r\n </tr>\r\n <tr>\r\n <td style=\"text-align: center\"><button style=\"margin: 0 auto ; height: 20px; \"\r\n class=\"btn-link btn ng-star-inserted\" (click)=\"showErrorMessage(file)\">{{'detail' |\r\n locale}}</button></td>\r\n </tr>\r\n </table>\r\n <div *ngIf=\"!file.isUploading && file.uploadResult\" style=\"border: 1px solid #ddd;\">\r\n <img [src]='file.source' [ngStyle]=\"file.style\">\r\n <div *ngIf=\"haveExtensionProperty\"\r\n style=\"width: 133px; height: 25px; background-color: white; position: absolute;bottom: 0; \">\r\n\r\n <div style=\"width: 100px;height: 25px;position:absolute;margin: 0 17px;\">\r\n <farris-combo-list [(ngModel)]=\"file.extensionDropListId\" [data]=\"propertiesNames\"\r\n [idField]=\"'id'\" [textField]=\"'name'\" (selectChange)=\"typeChange($event,file)\"\r\n [enableClear]=\"false\">\r\n <!-- <ng-template #itemTemp let-item>\r\n <div class=\"combo-list\">\r\n <span [class]=\"'combo-list-circle combo-list-'+item.state\"></span>\r\n <span class=\"combo-list-label\">{{item.label}}</span>\r\n </div>\r\n </ng-template> -->\r\n </farris-combo-list>\r\n </div>\r\n </div>\r\n <div *ngIf=\"haveSecurityInfo\"\r\n style=\"width: 133px; height: 25px; background-color: white; position: absolute;bottom: 0; \">\r\n\r\n <div style=\"width: 100px;height: 25px;position:absolute;margin: 0 17px;\">\r\n <farris-combo-list [(ngModel)]=\"file.extensionDropListId\" [data]=\"securityInfoList\"\r\n [idField]=\"'id'\" [textField]=\"'name'\" (selectChange)=\"securityChange($event,file)\"\r\n [enableClear]=\"false\">\r\n <!-- <ng-template #itemTemp let-item>\r\n <div class=\"combo-list\">\r\n <span [class]=\"'combo-list-circle combo-list-'+item.state\"></span>\r\n <span class=\"combo-list-label\">{{item.label}}</span>\r\n </div>\r\n </ng-template> -->\r\n </farris-combo-list>\r\n </div>\r\n </div>\r\n </div>\r\n <table *ngIf=\"!file.isUploading\">\r\n <tr style=\"height: 20px\">\r\n <td style=\"width: 15px; vertical-align: middle; text-align: center\">\r\n <!-- <input type=\"checkbox\" [id]=\"file.name\" (click)=\"checkoutSelectFile(file.name)\"> -->\r\n <div class=\"farris-input-wrap\" style=\"height: 20px\" (click)=\"checkoutSelectFile(file)\">\r\n <div class=\"custom-control custom-checkbox\" style=\"margin: 4px 0 0;height: 20px;\"\r\n [ngStyle]=\"checkboxPos\">\r\n <input class=\"custom-control-input\" type=\"checkbox\" [id]=\"file.name\"\r\n [(ngModel)]=\"file.selectd\">\r\n <label class=\"custom-control-label\"\r\n style=\"padding: 0 0 10px 0; position: relative; top: -8px;\"></label>\r\n </div>\r\n </div>\r\n </td>\r\n <td style=\"width: 120px; vertical-align: middle; text-align: center\" [title]=\"file.name\">\r\n {{file.picListDisplayName}}</td>\r\n </tr>\r\n </table>\r\n <!-- <span>{{file.picListDisplayName}}</span> -->\r\n <!-- <p class=\"filename\">{{file.picListDisplayName}}</p> -->\r\n <button *ngIf=\"!file.isUploading && file.mouseOn\"\r\n style=\"position: absolute; top: 0; right: 0px; width: 24px; height: 24px; border: none;\"\r\n (click)=\"listDeleteFile(file)\">\r\n <span style=\"position: relative; right: 2px; \" class=\"f-icon f-icon-delete\"> </span>\r\n </button>\r\n <!-- <button *ngIf=\"file.hasUploaded\" class=\"k-primary\" kendoButton [icon]=\"'check'\" [disabled]=\"true\"></button> -->\r\n </li>\r\n </ul>\r\n <br>\r\n </div>\r\n\r\n <div class=\"queue_list\" *ngIf=\"showType==1\">\r\n <table>\r\n <tr style=\"height: 50px; table-layout:fixed;\">\r\n <th style=\"width: 40px; vertical-align: middle; text-align: center\">\r\n <!-- <input type=\"checkbox\" id=\"allCheckBox\" (click)=\"selectAllFile()\"> -->\r\n <div class=\"farris-input-wrap\" (click)=\"selectAllFile()\">\r\n <div class=\"custom-control custom-checkbox\" style=\"margin: 4px 0 0\">\r\n <input class=\"custom-control-input\" type=\"checkbox\" id=\"allCheckBox\"\r\n [(ngModel)]=\"fileAllSelected\">\r\n <label class=\"custom-control-label\" style=\"padding: 0\"></label>\r\n </div>\r\n </div>\r\n </th>\r\n <th style=\"vertical-align: middle\" [ngStyle]=\"queueListStyle\">{{'fileName' | locale}}</th>\r\n <th style=\"width: 100px; vertical-align: middle\">{{'size' | locale}}</th>\r\n <th style=\"width: 170px; vertical-align: middle; text-align: center\">{{'state' | locale}}</th>\r\n <th *ngIf=\"haveExtensionProperty\" style=\"width: 100px; vertical-align: middle; text-align: center\">\r\n {{storageExtension.extensionName}}\r\n </th>\r\n <th style=\"width: 140px; vertical-align: middle; text-align: center\">{{'operation' | locale}}</th>\r\n </tr>\r\n </table>\r\n <div style=\"height: 370px; overflow: auto;\">\r\n <table>\r\n <tr *ngFor=\"let file of files\" style=\"height: 40px\">\r\n <td colspan=\"5\" *ngIf=\"file.isUploading\">\r\n <!-- <div style=\"width:100%; display: table-cell; vertical-align: middle; text-align: center; \"> -->\r\n <div style=\"width: 500px;margin:0 auto\">\r\n <farris-progress [percent]=\"file.uploadProcess\" [status]=\"'active'\">\r\n </farris-progress>\r\n </div>\r\n\r\n </td>\r\n <td *ngIf=\"!file.isUploading\" style=\" width: 40px; vertical-align: middle; text-align: center\">\r\n <!-- <input type=\"checkbox\" [id]=\"file.name\" (click)=\"checkoutSelectFile(file.name)\"> -->\r\n <div class=\"farris-input-wrap\" (click)=\"checkoutSelectFile(file)\">\r\n <div class=\"custom-control custom-checkbox\" style=\"margin: 4px 0 0\">\r\n <input class=\"custom-control-input\" type=\"checkbox\" [id]=\"file.name\"\r\n [(ngModel)]=\"file.selectd\">\r\n <label class=\"custom-control-label\" style=\"padding: 0\"></label>\r\n </div>\r\n </div>\r\n </td>\r\n <td *ngIf=\"!file.isUploading\" style=\"vertical-align: middle\" [ngStyle]=\"queueListStyle\">\r\n {{file.queueListDisplayName}}</td>\r\n <td *ngIf=\"!file.isUploading\" style=\"width: 100px; vertical-align: middle\">{{file.size}}</td>\r\n <td *ngIf=\"!file.isUploading\" style=\"text-align: center; width: 170px; vertical-align: middle;\">\r\n <table *ngIf=\"!file.uploadResult\" style=\"margin: 0 auto\">\r\n <tr style=\"margin: 0 auto\">\r\n <td><span class=\"f-icon f-icon-error\"></span></td>\r\n <td> {{'uploadFailure' | locale}} </td>\r\n <td><button style=\"height: 24px\" class=\"btn-link btn ng-star-inserted\"\r\n (click)=\"showErrorMessage(file)\">{{'detail' | locale}}</button></td>\r\n </tr>\r\n </table>\r\n <!-- <span *ngIf=\"!file.uploadResult\"><span class=\"f-icon f-icon-error\"></span> \u4E0A\u4F20\u5931\u8D25 <button\r\n class=\"btn-link btn ng-star-inserted\" (click)=\"showErrorMessage(file)\">\u8BE6\u60C5</button></span> -->\r\n <span *ngIf=\"file.uploadResult\"><span class=\"f-icon f-icon-success\"></span> {{'uploadSucceed' |\r\n locale}}</span>\r\n </td>\r\n <td *ngIf=\"!file.isUploading&&haveExtensionProperty\"\r\n style=\"text-align: center; width: 100px; vertical-align: middle;\">\r\n <farris-combo-list [(ngModel)]=\"file.extensionDropListId\" [data]=\"propertiesNames\"\r\n [idField]=\"'id'\" [textField]=\"'name'\" (selectChange)=\"typeChange($event,file)\"\r\n [enableClear]=\"false\">\r\n <!-- <ng-template #itemTemp let-item>\r\n <div class=\"combo-list\">\r\n <span [class]=\"'combo-list-circle combo-list-'+item.state\"></span>\r\n <span class=\"combo-list-label\">{{item.label}}</span>\r\n </div>\r\n </ng-template> -->\r\n </farris-combo-list>\r\n </td>\r\n <td *ngIf=\"!file.isUploading&&haveSecurityInfo\"\r\n style=\"text-align: center; width: 100px; vertical-align: middle;\">\r\n <farris-combo-list [(ngModel)]=\"file.extensionDropListId\" [data]=\"securityInfoList\"\r\n [idField]=\"'id'\" [textField]=\"'name'\" (selectChange)=\"securityChange($event,file)\"\r\n [enableClear]=\"false\">\r\n <!-- <ng-template #itemTemp let-item>\r\n <div class=\"combo-list\">\r\n <span [class]=\"'combo-list-circle combo-list-'+item.state\"></span>\r\n <span class=\"combo-list-label\">{{item.label}}</span>\r\n </div>\r\n </ng-template> -->\r\n </farris-combo-list>\r\n </td>\r\n\r\n <td *ngIf=\"!file.isUploading\" style=\"text-align: center; width: 140px; vertical-align: middle;\">\r\n <!-- <button *ngIf=\"file.uploadResult\" class=\"btn-link btn ng-star-inserted\" (click)=\"retryUploadFile(file.name)\">\u91CD\u8BD5</button> -->\r\n <button class=\"btn-link btn ng-star-inserted\" style=\"margin: 0 auto\"\r\n (click)=\"listDeleteFile(file)\">{{'delete' | locale}}</button>\r\n </td>\r\n\r\n </tr>\r\n </table>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<div *ngIf=\"!hasSelectedFile\" class='home_page'>\r\n <img [src]=\"uploadIconAddress\">\r\n <div>\r\n <span [class]=\"getRightClass()\">{{'uploadFile' | locale}} </span>\r\n <input type=\"file\" style=\"height: 32px;\" (change)=\"fileSelected($event)\" id=\"file\" multiple=\"multiple\" title=\"\" [accept]=\"fileType\" [disabled]=\"uploadBtnDisabled\">\r\n <!-- <input type=\"file\" (focus)=\"showLoading()\" (change)=\"fileSelected($event)\" id=\"file\" multiple=\"multiple\" title=\"\" [accept]=\"fileType\"> -->\r\n </div>\r\n</div>\r\n",
1328
+ styles: [".home_page{text-align:center}.home_page img{position:absolute;top:180px;margin-left:-35px;width:70px;height:56px}.home_page div{position:absolute;left:50%;top:255px;margin-left:-75px;width:150px;height:32px;overflow:hidden}.home_page div span{width:150px;height:32px;position:absolute;z-index:10;left:0}.home_page div input{position:absolute;left:0;top:0;opacity:0;filter:'alpha(opacity=0)';z-index:11}.upload_button{width:110px;height:32px;overflow:hidden}.upload_button span{position:relative;right:-4px;top:4px;width:56px;height:22px;font-size:14px}.upload_button input{height:32px;width:110px;position:absolute;left:22px;top:12px;opacity:0;filter:'alpha(opacity=0)';overflow:hidden}.upload_button img{position:relative;left:-6px;top:3px;width:14px;height:14px}.button_group_upload{position:absolute;right:18px;top:12px;height:26px;width:90px}.button_group_upload button{height:26px;width:26px}.fileinput-button{position:absolute;right:60px;bottom:40px;overflow:hidden;width:24px;height:24px;border-radius:12px;transform:scale(2.5);-ms-transform:scale(2.5);-moz-transform:scale(2.5);-webkit-transform:scale(2.5);-o-transform:scale(2.5);color:#0686fd}.fileinput-button input{position:absolute;left:0;top:0;opacity:0;filter:'alpha(opacity=0)'}.pic-droplist{height:24px;color:#e0e1e2;background-color:#e0e1e2}.pic-droplist input-group{display:table-cell;width:100px;text-align:center;border:0}.pic-droplist input-group div{border:0}.pic-droplist input-group div div,.pic-droplist input-group div input{background-color:#e0e1e2}.pic_list{padding:0;height:400px;overflow-y:auto;overflow-x:hidden}.pic_list ul{padding:0;list-style:none;width:100%;margin:20px 0 0 20px}.pic_list ul li{height:179px;width:135px;margin:8px 0 8px 12px;float:left;overflow:hidden;align-items:center;position:relative}.pic_list ul li div{width:135px;height:159px;margin:auto;display:table-cell;vertical-align:middle;text-align:center;position:relative}.pic_list ul li div img{max-width:60px;max-height:60px;align-items:center;margin:auto;vertical-align:middle;text-align:center}.pic_list ul li span.filename{width:100px;text-align:center;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.queue_list{display:block;height:420px;overflow-y:auto}.file_list{list-style:none;margin:0;padding:0;overflow-x:hidden;overflow-y:auto}.file_list li{height:50px;line-height:35px;font-size:16px;position:relative}.file_list li button{float:right;top:6px;right:10px;width:20px}.file_list li p.title{padding:0 0 0 6px;margin:0 210px 0 0}.file_list li p.size{position:absolute;width:100px;top:0;right:100px}input#file:disabled{cursor:not-allowed}.help_text{color:rgba(0,0,0,.35);position:absolute;top:16px;right:120px}"]
1244
1329
  }] }
1245
1330
  ];
1246
1331
  /** @nocollapse */
@@ -1302,6 +1387,8 @@ if (false) {
1302
1387
  /** @type {?} */
1303
1388
  FileUploadComponent.prototype.selectedFileCount;
1304
1389
  /** @type {?} */
1390
+ FileUploadComponent.prototype.uploadBtnDisabled;
1391
+ /** @type {?} */
1305
1392
  FileUploadComponent.prototype.uploadIconAddress;
1306
1393
  /** @type {?} */
1307
1394
  FileUploadComponent.prototype.uploadLittleIconAddress;
@@ -1346,6 +1433,8 @@ if (false) {
1346
1433
  /** @type {?} */
1347
1434
  FileUploadComponent.prototype.oldUploadedFileList;
1348
1435
  /** @type {?} */
1436
+ FileUploadComponent.prototype.uploadInfoErrorMessage;
1437
+ /** @type {?} */
1349
1438
  FileUploadComponent.prototype.sameNameAllowed;
1350
1439
  /** @type {?} */
1351
1440
  FileUploadComponent.prototype.maxFileSize;
@@ -1399,4 +1488,4 @@ if (false) {
1399
1488
  FileUploadComponent.prototype.injector;
1400
1489
  /* Skipping unhandled member: ;*/
1401
1490
  }
1402
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS11cGxvYWQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGdzcC1zdmMvZm9ybWRvYy11cGxvYWQvIiwic291cmNlcyI6WyJsaWIvdXBsb2FkL2ZpbGUtdXBsb2FkL2ZpbGUtdXBsb2FkLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxLQUFLLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXRHLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUU1QyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdEQsT0FBTyxFQUFjLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUV0QyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXJDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBRXZFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNwRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDekQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUUxRSxP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O0lBQzVCLDZDQUE4Qjs7SUFDOUIsbURBQW1DOztJQUNuQyx3REFBeUM7O0lBQ3pDLHNEQUF1Qzs7SUFDdkMsdURBQXdDOztJQUN4QyxnREFBNEI7O0lBQzVCLDhDQUEwQjs7SUFDMUIsdUNBQXFCOztJQUNyQixzQ0FBeUI7O0lBQ3pCLDBDQUEwQjs7SUFDMUIseUNBQTZCOztJQUM3Qiw0Q0FBbUI7O0lBQ25CLG9EQUFzQjs7SUFDdEIsZ0RBQThCOztJQUU5QixnREFBa0Y7O0lBQ2xGLHNEQUE0Rjs7SUFFNUYsOENBQWlDOztJQUVqQyw4Q0FBaUM7O0lBRWpDLDRDQUFnQzs7SUFFaEMsNkNBQStDOztJQUUvQywyQ0FBaUQ7O0lBRWpELCtDQUF5RDs7SUFFekQsNENBQThDOztJQUM5Qyw4Q0FBZ0Q7O0lBR2hELCtDQUFtQzs7SUFFbkMsa0RBQWlDOztJQUNqQyw4Q0FBdUM7O0lBRXZDLCtDQUF3Qzs7SUFFeEMsNkNBQW9DOztJQUVwQyw0Q0FBMkI7O0lBRTNCLGdEQUE4Qjs7SUFFOUIsaURBQTRCOztJQUU1QixvREFBdUM7O0lBRXZDLCtDQUFrQzs7SUFFbEMsbURBQTBCOztJQUMxQixrREFBeUI7O0lBR3pCLDhDQUF1Qjs7SUFDdkIsMENBQXdCOztJQUN4Qix1Q0FBaUI7O0lBQ2pCLHlDQUEwQjs7SUFDMUIseUNBQXVCOztJQUN2QiwwQ0FBNEI7O0lBUzVCLHFDQUF3Qjs7SUFDeEIscUNBQXdCOztJQUN4Qix1Q0FBZ0M7O0lBQ2hDLHdDQUErQjs7SUFDL0Isd0NBQWtDOztJQUNsQywyQ0FBcUQ7O0lBQ3JELDZDQUFrQzs7SUFFbEMscUNBQThDOztJQWlFOUMsd0NBQXNCOztJQTZyQnRCLGdEQUE0Qzs7Ozs7SUE3d0JoQyx5Q0FBbUM7Ozs7O0lBQUUsNENBQW9DOzs7OztJQUFFLDBDQUFtQzs7Ozs7SUFBRSx1Q0FBMkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgSW5wdXQsIFZpZXdDaGlsZCwgVGVtcGxhdGVSZWYsIEluamVjdG9yLCBMT0NBTEVfSUQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRmlsZUluZm8gfSBmcm9tICcuLi9lbnRpdHkvZmlsZWluZm8nO1xyXG5pbXBvcnQgeyBEb2NUeXBlIH0gZnJvbSAnLi4vZW50aXR5L2RvY3R5cGUnO1xyXG5pbXBvcnQgeyBHc3BGb3JtRG9jSW5mbyB9IGZyb20gJy4uL2VudGl0eS9nc3Bmb3JtZG9jaW5mbyc7XHJcbmltcG9ydCB7IE9wZXJhdGluZ01vZGVzIH0gZnJvbSAnLi4vZW50aXR5L29wZXJhdGluZ21vZGVzJztcclxuaW1wb3J0IHsgVXBsb2FkU2VydmljZSB9IGZyb20gJy4uL3VwbG9hZC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVXBsb2FkRmlsZUluZm8gfSBmcm9tICcuLi9lbnRpdHkvdXBsb2FkZmlsZWluZm8nO1xyXG5pbXBvcnQgeyBNZXNzYWdlclNlcnZpY2UgfSBmcm9tICdAZmFycmlzL3VpLW1lc3NhZ2VyJztcclxuaW1wb3J0IHsgY2F0Y2hFcnJvciwgbWFwLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUsIG9mIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IEdzcEZvcm1VcGxvYWRFbnRpdHkgfSBmcm9tICcuLi9lbnRpdHkvZ3NwZm9ybXVwbG9hZGVudGl0eSc7XHJcbmltcG9ydCB7IFVVSUQgfSBmcm9tICdhbmd1bGFyMi11dWlkJztcclxuaW1wb3J0IHsgU3RvcmFnZUV4dGVuc2lvbiB9IGZyb20gJy4uL2VudGl0eS9zdG9yYWdlZXh0ZW5zaW9uJztcclxuaW1wb3J0IHsgRXhTdG9yYWdlRmlsZUluZm8gfSBmcm9tICcuLi9lbnRpdHkvZXh0ZW5zaW9uc3RvcmFnZWZpbGVpbmZvJztcclxuaW1wb3J0IHsgRHJvcExpc3RFbnRpdHkgfSBmcm9tICcuLi9lbnRpdHkvZHJvcGxpc3RlbnRpdHknO1xyXG5pbXBvcnQgeyBMb2FkaW5nU2VydmljZSB9IGZyb20gJ0BmYXJyaXMvdWktbG9hZGluZyc7XHJcbmltcG9ydCB7IERvbVNhbml0aXplciB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xyXG5pbXBvcnQgeyBGaWxlU3RhdGUgfSBmcm9tICcuLi9lbnRpdHkvZmlsZXN0YXRlJztcclxuaW1wb3J0IHsgTG9jYWxMYW5nUGlwZSB9IGZyb20gJy4uLy4uL2xvY2FsLnBpcGUnO1xyXG5pbXBvcnQgeyBHc3BEb2NTZWN1cml0eUJhc2VJbmZvIH0gZnJvbSAnLi4vZW50aXR5L2dzcGRvY3NlY3VyaXR5YmFzZWluZm8nO1xyXG5pbXBvcnQgeyBTZWN1cml0eUVudGl0eSB9IGZyb20gJy4uL2VudGl0eS9zZWN1cml0eWVudGl0eSc7XHJcbmltcG9ydCB7IEh0dHBDbGllbnQsIEh0dHBFcnJvclJlc3BvbnNlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBJbml0TXVsdGlVcGxvYWRSZXF1ZXN0IH0gZnJvbSAnLi4vZW50aXR5L2luaXRtdWx0aXVwbG9hZHJlcXVlc3QnO1xyXG5pbXBvcnQgeyBDb21wbGV0ZU11bHRpVXBsb2FkUmVxdWVzdCB9IGZyb20gJy4uL2VudGl0eS9jb21wbGV0ZW11bHRpdXBsb2FkcmVxdWVzdCc7XHJcbmltcG9ydCB7IEdzcEZvcm1TdHJlYW1FbnRpdHkgfSBmcm9tICcuLi9lbnRpdHkvZ3NwZm9ybXN0cmVhbWVudGl0eSc7XHJcbmltcG9ydCB7IE11bHRpVXBsb2FkUmVxdWVzdCB9IGZyb20gJy4uL2VudGl0eS9tdWx0aXVwbG9hZHJlcXVlc3QnO1xyXG5pbXBvcnQgeyBNdWx0aVVwbG9hZFJlc3VsdCB9IGZyb20gJy4uL2VudGl0eS9tdWx0aXVwbG9hZHJlc3VsdCc7XHJcbmltcG9ydCB7IEJhc2VQYXRoU2VydmljZSB9IGZyb20gJ0BmYXJyaXMvcnRmJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXBwLWZpbGUtdXBsb2FkJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vZmlsZS11cGxvYWQuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2ZpbGUtdXBsb2FkLmNvbXBvbmVudC5jc3MnXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIEZpbGVVcGxvYWRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG5cclxuICBmaWxlczogRmlsZUluZm9bXSA9IFtdO1xyXG4gIG1ldGFkYXRhSWRMaXN0OiBzdHJpbmdbXSA9IFtdO1xyXG4gIHVwbG9hZEZpbGVJbmZvTGlzdDogVXBsb2FkRmlsZUluZm9bXSA9IFtdO1xyXG4gIGVyckZpbGVMaXN0OiBzdHJpbmdbXSA9IFtdO1xyXG4gIGVyclR5cGVMaXN0OiBzdHJpbmdbXSA9IFtdO1xyXG4gIG51bGxGaWxlTGlzdDogc3RyaW5nW10gPSBbXTtcclxuICBiZXlvbmRGaWxlTGlzdDogc3RyaW5nW10gPSBbXTtcclxuICBmaWxlTmFtZU92ZXJzaXplTGlzdCA6c3RyaW5nIFtdPVtdO1xyXG4gIGludmFsaWRDaGFyYWN0ZXJzRmlsZUxpc3Q6IHN0cmluZ1tdID0gW107XHJcbiAgaW52YWxpZEV4dE5hbWVzRmlsZUxpc3Q6IHN0cmluZ1tdID0gW107XHJcbiAgdW5yZWNvZ25pemVkVHlwZUZpbGVMaXN0OiBzdHJpbmdbXSA9IFtdO1xyXG4gIGludmFsaWRDaGFyYWN0ZXJzOnN0cmluZz0nJztcclxuICBpbnZhbGlkRXh0TmFtZXM6c3RyaW5nPScnO1xyXG4gIHNob3dUeXBlOiBudW1iZXIgPSAwO1xyXG4gIG1vdXNlT246IGJvb2xlYW4gPSBmYWxzZTtcclxuICBpc1doaXRlTGlzdDpib29sZWFuPWZhbHNlO1xyXG4gIGJ1ZmZlclNpemUgPSA1ICogMTAyNCAqIDEwMjQ7XHJcbiAgc2VsZWN0ZWRGaWxlczogYW55O1xyXG4gIHJhZGlvQnV0dG9uR3JvdXBWYWx1ZTtcclxuICBzZWxlY3RlZEZpbGVDb3VudDogbnVtYmVyID0gMDtcclxuXHJcbiAgdXBsb2FkSWNvbkFkZHJlc3MgPSB0aGlzLmNyZWF0ZUJhc2VVcmwoJy9wbGF0Zm9ybS9ydW50aW1lL2Rmcy9pbWFnZXMvdXBsb2FkLnN2ZycpO1xyXG4gIHVwbG9hZExpdHRsZUljb25BZGRyZXNzID0gdGhpcy5jcmVhdGVCYXNlVXJsKCcvcGxhdGZvcm0vcnVudGltZS9kZnMvaW1hZ2VzL3VwbG9hZEljb24uc3ZnJyk7XHJcblxyXG4gIGhhc1NlbGVjdGVkRmlsZTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBmaWxlQWxsU2VsZWN0ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgdXBsb2FkUHJvY2VzcyA9IHsgd2lkdGg6ICcwJScgfTtcclxuXHJcbiAgZmlsZVRvdGFsQ2h1bms6IHsgW2tleTogc3RyaW5nXTogbnVtYmVyIH0gPSB7fTtcclxuXHJcbiAgcmVxdWVzdEFycmF5OiBBcnJheTxPYnNlcnZhYmxlPGFueT4+ID0gbmV3IEFycmF5O1xyXG5cclxuICByZXF1ZXN0Qm9keUFycmF5OiBBcnJheTxHc3BGb3JtVXBsb2FkRW50aXR5PiA9IG5ldyBBcnJheTtcclxuXHJcbiAgdXBsb2FkZWRDaHVuazogeyBba2V5OiBzdHJpbmddOiBudW1iZXIgfSA9IHt9O1xyXG4gIHVwbG9hZGVkUHJvY2VzczogeyBba2V5OiBzdHJpbmddOiBudW1iZXIgfSA9IHt9O1xyXG5cclxuICAvL2FsbFNlbGVjdGVkOiBib29sZWFuID0gdHJ1ZTtcclxuICBzdG9yYWdlRXh0ZW5zaW9uOiBTdG9yYWdlRXh0ZW5zaW9uO1xyXG5cclxuICBkZWZhdWx0UHJvcGVydHlOYW1lOiBzdHJpbmcgPSBcIlwiO1xyXG4gIHByb3BlcnRpZXNOYW1lczogRHJvcExpc3RFbnRpdHlbXSA9IFtdO1xyXG5cclxuICBzZWN1cml0eUluZm9MaXN0OiBTZWN1cml0eUVudGl0eVtdID0gW107XHJcblxyXG4gIHF1ZXVlTGlzdFN0eWxlID0geyB3aWR0aDogJzQ4MHB4JyB9O1xyXG5cclxuICBkcm9wTGlzdFZhbHVlOiBzdHJpbmcgPSBcIlwiO1xyXG5cclxuICB1cGxvYWRlZEZpbGVUb3RhbDogbnVtYmVyID0gMDtcclxuXHJcbiAgYWxsb3dlZE11bHRpVXBsb2FkOiBib29sZWFuO1xyXG5cclxuICBoYXZlRXh0ZW5zaW9uUHJvcGVydHk6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgaGF2ZVNlY3VyaXR5SW5mbzogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICB1cGxvYWRlZEZpbGVJbmZvTGlzdCA9IFtdO1xyXG4gIG9sZFVwbG9hZGVkRmlsZUxpc3QgPSBbXTtcclxuICAvL3VwbG9hZGVkTmFtZUxpc3QgPSBbXTtcclxuXHJcbiAgc2FtZU5hbWVBbGxvd2VkID0gdHJ1ZTtcclxuICBtYXhGaWxlU2l6ZTogbnVtYmVyID0gMDs7XHJcbiAgbG9jYWxlaWQ6IHN0cmluZztcclxuICBsb2NhbGVwaXBlOiBMb2NhbExhbmdQaXBlO1xyXG4gIGh0dHBjbGllbnQ6IEh0dHBDbGllbnQ7XHJcbiAgY2hlY2tib3hQb3MgPSB7IHRvcDogJzBweCcgfVxyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIG1zZ1NlcnZpY2U6IE1lc3NhZ2VyU2VydmljZSwgcHJpdmF0ZSB1cGxvYWRTZXJ2aWNlOiBVcGxvYWRTZXJ2aWNlLCBwcml2YXRlIGxvYWRTZXJ2aWNlOiBMb2FkaW5nU2VydmljZSwgcHJpdmF0ZSBpbmplY3Rvcj86IEluamVjdG9yKSB7XHJcbiAgICBpZiAodGhpcy5pbmplY3Rvcikge1xyXG4gICAgICB0aGlzLmh0dHBjbGllbnQgPSB0aGlzLmluamVjdG9yLmdldChIdHRwQ2xpZW50KTtcclxuICAgICAgdGhpcy5sb2NhbGVpZCA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwibGFuZ3VhZ2VDb2RlXCIpIHx8IHRoaXMuaW5qZWN0b3IuZ2V0KExPQ0FMRV9JRCk7XHJcbiAgICAgIHRoaXMubG9jYWxlcGlwZSA9IG5ldyBMb2NhbExhbmdQaXBlKHRoaXMubG9jYWxlaWQpO1xyXG4gICAgfVxyXG4gIH1cclxuICBASW5wdXQoKSBmb3JtSWQ6IHN0cmluZztcclxuICBASW5wdXQoKSByb290SWQ6IHN0cmluZztcclxuICBASW5wdXQoKSBmaWxlVHlwZTogc3RyaW5nID0gXCIqXCI7XHJcbiAgQElucHV0KCkgZmlsZUNvdW50OiBudW1iZXIgPSAwO1xyXG4gIEBJbnB1dCgpIG9sZElkTGlzdDogc3RyaW5nW10gPSBbXTtcclxuICBASW5wdXQoKSBzZWN1cml0eUluZm86IEdzcERvY1NlY3VyaXR5QmFzZUluZm8gPSBudWxsO1xyXG4gIEBJbnB1dCgpIGZpbGVOYW1lTGVuZ3RoIDpudW1iZXI9MDtcclxuXHJcbiAgQFZpZXdDaGlsZCgnb3BDZWxsJykgb3BDZWxsOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIGlmIChuYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoJ0ZpcmVmb3gnKSA+PSAwKVxyXG4gICAgICB0aGlzLmNoZWNrYm94UG9zLnRvcCA9ICcxNHB4JztcclxuICAgIC8vaWYgKHRoaXMuc3RvcmFnZVNlcnZpY2UgIT0gbnVsbCkge1xyXG4gICAgaWYgKHRoaXMuc2VjdXJpdHlJbmZvICE9IG51bGwpIHtcclxuICAgICAgdGhpcy51cGxvYWRTZXJ2aWNlLmdldFNlY3VyaXR5SW5mb0xpc3QodGhpcy5zZWN1cml0eUluZm8pLnN1YnNjcmliZShcclxuICAgICAgICByZXMgPT4ge1xyXG4gICAgICAgICAgdGhpcy5oYXZlU2VjdXJpdHlJbmZvID0gdHJ1ZTtcclxuICAgICAgICAgIGxldCBpID0gMDtcclxuICAgICAgICAgIHJlcy5mb3JFYWNoKGVsZW1lbnQgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnNlY3VyaXR5SW5mb0xpc3QucHVzaCh7IGlkOiBpLnRvU3RyaW5nKCksIHNlY3VyaXR5SWQ6IGVsZW1lbnQuc2VjdXJpdHlJZCwgc2VjdXJpdHlMZXZlbDogZWxlbWVudC5zZWN1cml0eUxldmVsLCBuYW1lOiBlbGVtZW50Lm5hbWUgfSk7XHJcbiAgICAgICAgICAgIGkrKztcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgKVxyXG4gICAgfVxyXG4gICAgdGhpcy51cGxvYWRTZXJ2aWNlLmdldFN0b3JhZ2VFeHRlbnNpb25JbmZvKCkuc3Vic2NyaWJlKFxyXG4gICAgICByZXMgPT4ge1xyXG4gICAgICAgIGlmIChyZXMgIT0gbnVsbCAmJiByZXMuZXJyb3IgPT0gbnVsbCkge1xyXG4gICAgICAgICAgdGhpcy5zdG9yYWdlRXh0ZW5zaW9uID0gcmVzO1xyXG4gICAgICAgICAgdGhpcy5kZWZhdWx0UHJvcGVydHlOYW1lID0gdGhpcy5zdG9yYWdlRXh0ZW5zaW9uLmRlZmF1bHRQcm9wZXJ0eU5hbWU7XHJcbiAgICAgICAgICB0aGlzLnByb3BlcnRpZXNOYW1lcy5wdXNoKHsgaWQ6IFwiMFwiLCBuYW1lOiB0aGlzLnN0b3JhZ2VFeHRlbnNpb24uZGVmYXVsdFByb3BlcnR5TmFtZSB9KTtcclxuICAgICAgICAgIGxldCBpID0gMDtcclxuICAgICAgICAgIC8vIHRoaXMucHJvcGVydGllc05hbWVzLnB1c2goLi4uKHRoaXMuc3RvcmFnZUV4dGVuc2lvbi5leHRlbnNpb25Qcm9wZXJ0eU5hbWVMaXN0KSk7XHJcbiAgICAgICAgICB0aGlzLnN0b3JhZ2VFeHRlbnNpb24uZXh0ZW5zaW9uUHJvcGVydHlOYW1lTGlzdC5mb3JFYWNoKGVsZW1lbnQgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnByb3BlcnRpZXNOYW1lcy5wdXNoKHsgaWQ6ICgrK2kpLnRvU3RyaW5nKCksIG5hbWU6IGVsZW1lbnQgfSk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIHRoaXMucXVldWVMaXN0U3R5bGUud2lkdGggPSAnMzgwcHgnO1xyXG4gICAgICAgICAgdGhpcy5oYXZlRXh0ZW5zaW9uUHJvcGVydHkgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgKVxyXG5cclxuICAgIHRoaXMudXBsb2FkU2VydmljZS5nZXRVcGxvYWRJbmZvKHRoaXMucm9vdElkKS5zdWJzY3JpYmUoXHJcbiAgICAgIHJlcyA9PiB7XHJcbiAgICAgICAgaWYgKHJlcyAhPSBudWxsICYmIHJlcy5lcnJvciA9PSBudWxsKSB7XHJcbiAgICAgICAgICB0aGlzLnNhbWVOYW1lQWxsb3dlZCA9IHJlcy5zYW1lTmFtZUFsbG93ZWQ7XHJcbiAgICAgICAgICB0aGlzLm1heEZpbGVTaXplID0gcGFyc2VJbnQoSlNPTi5wYXJzZShyZXMudmFsaWRhdGVDb25maWd1cmF0aW9uKS5tYXhGaWxlU2l6ZSk7XHJcbiAgICAgICAgICB0aGlzLmlzV2hpdGVMaXN0ID0gSlNPTi5wYXJzZShyZXMudmFsaWRhdGVDb25maWd1cmF0aW9uKS53aGl0ZUxpc3Q7XHJcbiAgICAgICAgICB0aGlzLmludmFsaWRDaGFyYWN0ZXJzID0gSlNPTi5wYXJzZShyZXMudmFsaWRhdGVDb25maWd1cmF0aW9uKS5pbnZhbGlkQ2hhcmFjdGVycztcclxuICAgICAgICAgIHRoaXMuaW52YWxpZEV4dE5hbWVzID0gSlNPTi5wYXJzZShyZXMudmFsaWRhdGVDb25maWd1cmF0aW9uKS5pbnZhbGlkRXh0TmFtZXMudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICAgIHRoaXMuYWxsb3dlZE11bHRpVXBsb2FkID0gcmVzLmFsbG93ZWRNdWx0aVVwbG9hZDtcclxuICAgICAgICAgIGlmICghdGhpcy5zYW1lTmFtZUFsbG93ZWQpIHtcclxuICAgICAgICAgICAgdGhpcy51cGxvYWRTZXJ2aWNlLmdldFVwbG9hZGVkRmlsZUluZm9MaXN0KHRoaXMuZm9ybUlkLCB0aGlzLnJvb3RJZCkuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgICAgIHJlcyA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAocmVzICE9IG51bGwgJiYgcmVzLmVycm9yID09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy51cGxvYWRlZEZpbGVJbmZvTGlzdCA9IHJlcztcclxuICAgICAgICAgICAgICAgICAgdGhpcy5vbGRVcGxvYWRlZEZpbGVMaXN0ID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShyZXMpKTs7XHJcblxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgKVxyXG4gICAgaWYgKHRoaXMub2xkSWRMaXN0ICE9IG51bGwgJiYgdGhpcy5vbGRJZExpc3QubGVuZ3RoID4gMCkge1xyXG4gICAgICAvLyB0aGlzLnVwbG9hZFNlcnZpY2UuY2FuY2VsKHRoaXMub2xkSWRMaXN0LCB0aGlzLnJvb3RJZCkuc3Vic2NyaWJlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5yYWRpb0J1dHRvbkdyb3VwVmFsdWUgPSAnc2hvd0J5R3JvdXAnO1xyXG4gIH1cclxuXHJcbiAgdG90YWxMb2FkOiBhbnkgPSBudWxsO1xyXG5cclxuICBzaG93TG9hZGluZygpIHtcclxuICAgIHRoaXMuaGFzU2VsZWN0ZWRGaWxlID0gdHJ1ZTtcclxuICAgIC8vIGlmICh0aGlzLnRvdGFsTG9hZCA9PSBudWxsKVxyXG4gICAgLy8gICB0aGlzLnRvdGFsTG9hZCA9IHRoaXMubG9hZFNlcnZpY2Uuc2hvdyh7XHJcbiAgICAvLyAgICAgbWVzc2FnZTogdGhpcy5sb2NhbGVwaXBlLnRyYW5zZm9ybSgndXBsb2FkaW5nJylcclxuICAgIC8vICAgfSk7XHJcbiAgfVxyXG5cclxuICBmaW5kSW52YWxpZENoYXJhY3RlcihuYW1lOiBzdHJpbmcpOiBzdHJpbmdbXSB7XHJcbiAgICBsZXQgY2hhckxpc3Q6IHN0cmluZ1tdID0gW107XHJcbiAgICB0aGlzLmludmFsaWRDaGFyYWN0ZXJzLnNwbGl0KCd8JykuZm9yRWFjaChlbGVtZW50ID0+IHtcclxuICAgICAgaWYgKG5hbWUuaW5kZXhPZihlbGVtZW50KSA+PSAwKVxyXG4gICAgICAgIGNoYXJMaXN0LnB1c2goZWxlbWVudCk7XHJcbiAgICB9KVxyXG5cclxuICAgIHJldHVybiBjaGFyTGlzdDtcclxuICB9XHJcblxyXG5cclxuICBoYXNGaWxlVHlwZShmaWxlKSB7XHJcbiAgICByZXR1cm4gZmlsZS5uYW1lLmluY2x1ZGVzKCcuJyk7XHJcbiAgfVxyXG5cclxuICBmaWxlU2VsZWN0ZWQoJGV2ZW50KSB7XHJcblxyXG4gICAgdGhpcy5oYXNTZWxlY3RlZEZpbGUgPSB0cnVlO1xyXG4gICAgdGhpcy5zZWxlY3RlZEZpbGVzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI2ZpbGUnKTtcclxuXHJcbiAgICBpZiAodGhpcy5maWxlQ291bnQgPiAwKSB7XHJcbiAgICAgIGlmICh0aGlzLnNlbGVjdGVkRmlsZXMuZmlsZXMubGVuZ3RoICsgdGhpcy5maWxlcy5sZW5ndGggPiB0aGlzLmZpbGVDb3VudCkge1xyXG4gICAgICAgIGxldCBzZWxlY3RlZE51bTogbnVtYmVyID0gKHRoaXMuc2VsZWN0ZWRGaWxlcy5maWxlcy5sZW5ndGggYXMgbnVtYmVyKSArIHRoaXMuZmlsZXMubGVuZ3RoO1xyXG4gICAgICAgIHRoaXMubXNnU2VydmljZS53YXJuaW5nKHRoaXMubG9jYWxlcGlwZS50cmFuc2Zvcm0oJ3NlbGVjdGVkQ291bnQnKSArIHNlbGVjdGVkTnVtICsgdGhpcy5sb2NhbGVwaXBlLnRyYW5zZm9ybSgnbGltaXRDb3VudCcpICsgdGhpcy5maWxlQ291bnQgKyB0aGlzLmxvY2FsZXBpcGUudHJhbnNmb3JtKCdyZWNob29zZUZpbGUnKSk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy90aGlzLmZsYWcgPSAwO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnNlbGVjdGVkRmlsZXMuZmlsZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgbGV0IHNlbGVjdGVkRmlsZSA9IHRoaXMuc2VsZWN0ZWRGaWxlcy5maWxlc1tpXTtcclxuICAgICAgc2VsZWN0ZWRGaWxlLmlzQWxsb3dlZFVwbG9hZD10cnVlO1xyXG4gICAgICAvL3NlbGVjdGVkRmlsZS5zbGljZVxyXG4gICAgICBsZXQgdXVpZCA9IFVVSUQuVVVJRCgpO1xyXG5cclxuICAgICAgaWYgKHNlbGVjdGVkRmlsZS5zaXplID09IDApIHtcclxuICAgICAgICB0aGlzLm51bGxGaWxlTGlzdC5wdXNoKHNlbGVjdGVkRmlsZS5uYW1lKTtcclxuICAgICAgICBjb250aW51ZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYodGhpcy5maWxlTmFtZUxlbmd0aD4wICYmIHNlbGVjdGVkRmlsZS5uYW1lLmxlbmd0aCA+dGhpcy5maWxlTmFtZUxlbmd0aCl7XHJcbiAgICAgICAgdGhpcy5maWxlTmFtZU92ZXJzaXplTGlzdC5wdXNoKHNlbGVjdGVkRmlsZS5uYW1lKTtcclxuICAgICAgICBjb250aW51ZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHRoaXMubWF4RmlsZVNpemUgIT0gbnVsbCAmJiB0aGlzLm1heEZpbGVTaXplID4gMCkge1xyXG4gICAgICAgIGlmIChzZWxlY3RlZEZpbGUuc2l6ZSA+IHRoaXMubWF4RmlsZVNpemUgKiAxMDAwKSB7XHJcbiAgICAgICAgICB0aGlzLmJleW9uZEZpbGVMaXN0LnB1c2goc2VsZWN0ZWRGaWxlLm5hbWUpO1xyXG4gICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBsZXQgaW52YWxpZENoYXJMaXN0ID0gdGhpcy5maW5kSW52YWxpZENoYXJhY3RlcihzZWxlY3RlZEZpbGUubmFtZSk7XHJcbiAgICAgIGxldCBlcnJvck1lc3NhZ2UgPSBcIlwiXHJcbiAgICAgIGlmIChpbnZhbGlkQ2hhckxpc3QubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIGludmFsaWRDaGFyTGlzdC5mb3JFYWNoKChlbGVtZW50LGluZGV4KSA9PiB7XHJcbiAgICAgICAgICBlcnJvck1lc3NhZ2UgKz0gXCJcXFwiXCI7XHJcbiAgICAgICAgICBlcnJvck1lc3NhZ2UgKz0gZWxlbWVudDtcclxuICAgICAgICAgIGVycm9yTWVzc2FnZSArPSBcIlxcXCJcIjtcclxuICAgICAgICAgIGVycm9yTWVzc2FnZSArPSAoaW5kZXggPT09IGludmFsaWRDaGFyTGlzdC5sZW5ndGgtMSk/XCJcIjpcIixcIjtcclxuICAgICAgICB9KVxyXG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkRmlsZXMuZmlsZXMubGVuZ3RoID09PSAxKXtcclxuICAgICAgICAgIHNlbGVjdGVkRmlsZS5pc0FsbG93ZWRVcGxvYWQgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMubXNnU2VydmljZS53YXJuaW5nKHRoaXMubG9jYWxlcGlwZS50cmFuc2Zvcm0oJ2ludmFsaWRDaGFyYWN0ZXJzJykgKyBlcnJvck1lc3NhZ2UgKyB0aGlzLmxvY2FsZXBpcGUudHJhbnNmb3JtKCdyZWNob29zZUZpbGUnKSk7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkRmlsZXMuZmlsZXMubGVuZ3RoPjEpe1xyXG4gICAgICAgICAgc2VsZWN0ZWRGaWxlLmlzQWxsb3dlZFVwbG9hZCA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5pbnZhbGlkQ2hhcmFjdGVyc0ZpbGVMaXN0LnB1c2goc2VsZWN0ZWRGaWxlLm5hbWUpO1xyXG4gICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKCF0aGlzLmhhc0ZpbGVUeXBlKHNlbGVjdGVkRmlsZSkpIHtcclxuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZEZpbGVzLmZpbGVzLmxlbmd0aCA9PT0gMSkge1xyXG4gICAgICAgICAgc2VsZWN0ZWRGaWxlLmlzQWxsb3dlZFVwbG9hZCA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5tc2dTZXJ2aWNlLndhcm5pbmcoc2VsZWN0ZWRGaWxlLm5hbWUgKyB0aGlzLmxvY2FsZXBpcGUudHJhbnNmb3JtKCdVbnJlY29nbml6ZWRGaWxlVHlwZScpICsgdGhpcy5sb2NhbGVwaXBlLnRyYW5zZm9ybSgncmVjaG9vc2VGaWxlJykpO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZEZpbGVzLmZpbGVzLmxlbmd0aCA+IDEpIHtcclxuICAgICAgICAgIHNlbGVjdGVkRmlsZS5pc0FsbG93ZWRVcGxvYWQgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMudW5yZWNvZ25pemVkVHlwZUZpbGVMaXN0LnB1c2goc2VsZWN0ZWRGaWxlLm5hbWUpO1xyXG4gICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBsZXQgY3VyRmlsZVN1ZmZpeCA9IHNlbGVjdGVkRmlsZS5uYW1lLnNwbGl0KCcuJylbMV07XHJcbiAgICAgIGxldCBjdXJGaWxlU3VmZml4ID0gc2VsZWN0ZWRGaWxlLm5hbWUuc3Vic3RyKHNlbGVjdGVkRmlsZS5uYW1lLmxhc3RJbmRleE9mKCcuJykgKyAxKS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICBjb25zdCBleHROYW1lcz10aGlzLmxpc3RUb1N0cmluZyh0aGlzLmludmFsaWRFeHROYW1lcy5zcGxpdCgnfCcpKTtcclxuICAgICAgY29uc3QgZXh0TmFtZXNBcnkgPSB0aGlzLmludmFsaWRFeHROYW1lcy5zcGxpdCgnfCcpO1xyXG4gICAgICBpZiAoIXRoaXMuaXNXaGl0ZUxpc3QgJiYgZXh0TmFtZXNBcnkuaW5jbHVkZXMoY3VyRmlsZVN1ZmZpeCkpe1xyXG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkRmlsZXMuZmlsZXMubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgICAgICBzZWxlY3RlZEZpbGUuaXNBbGxvd2VkVXBsb2FkID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLm1zZ1NlcnZpY2Uud2FybmluZyhzZWxlY3RlZEZpbGUubmFtZSArIHRoaXMubG9jYWxlcGlwZS50cmFuc2Zvcm0oJ2ludmFsaWRFeHROYW1lcycpICsgdGhpcy5sb2NhbGVwaXBlLnRyYW5zZm9ybSgnYmxhY2tFeHROYW1lcycpICsgZXh0TmFtZXMgKyB0aGlzLmxvY2FsZXBpcGUudHJhbnNmb3JtKCdyZWNob29zZUZpbGUnKSk7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkRmlsZXMuZmlsZXMubGVuZ3RoID4gMSkge1xyXG4gICAgICAgICAgc2VsZWN0ZWRGaWxlLmlzQWxsb3dlZFVwbG9hZCA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5pbnZhbGlkRXh0TmFtZXNGaWxlTGlzdC5wdXNoKHNlbGVjdGVkRmlsZS5uYW1lKTtcclxuICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5pc1doaXRlTGlzdCAmJiAhZXh0TmFtZXNBcnkuaW5jbHVkZXMoY3VyRmlsZVN1ZmZpeCkpIHtcclxuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZEZpbGVzLmZpbGVzLmxlbmd0aCA9PT0gMSkge1xyXG4gICAgICAgICAgc2VsZWN0ZWRGaWxlLmlzQWxsb3dlZFVwbG9hZCA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5tc2dTZXJ2aWNlLndhcm5pbmcoc2VsZWN0ZWRGaWxlLm5hbWUgKyB0aGlzLmxvY2FsZXBpcGUudHJhbnNmb3JtKCdpbnZhbGlkRXh0TmFtZXMnKSArIHRoaXMubG9jYWxlcGlwZS50cmFuc2Zvcm0oJ3doaXRlRXh0TmFtZXMnKSArIGV4dE5hbWVzICsgdGhpcy5sb2NhbGVwaXBlLnRyYW5zZm9ybSgncmVjaG9vc2VGaWxlJykpO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZEZpbGVzLmZpbGVzLmxlbmd0aCA+IDEpIHtcclxuICAgICAgICAgIHNlbGVjdGVkRmlsZS5pc0FsbG93ZWRVcGxvYWQgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMuaW52YWxpZEV4dE5hbWVzRmlsZUxpc3QucHVzaChzZWxlY3RlZEZpbGUubmFtZSk7XHJcbiAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICghdGhpcy5zYW1lTmFtZUFsbG93ZWQpIHtcclxuICAgICAgICBpZiAodGhpcy51cGxvYWRlZEZpbGVJbmZvTGlzdC5maW5kKHggPT4geC5maWxlTmFtZSA9PSBzZWxlY3RlZEZpbGUubmFtZSkgIT0gbnVsbCkge1xyXG5cclxuICAgICAgICAgIGNvbnN0IG1zZyA9IHRoaXMubXNnU2VydmljZS5zaG93KCd3YXJuaW5nJywgdGhpcy5sb2NhbGVwaXBlLnRyYW5zZm9ybSgnaGF2ZVNhbWVOYW1lJykgKyBzZWxlY3RlZEZpbGUubmFtZSwge1xyXG4gICAgICAgICAgICBpbml0aWFsU3RhdGU6IHtcclxuICAgICAgICAgICAgICBidXR0b25zOiBbXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgIHRleHQ6IHRoaXMubG9jYWxlcGlwZS50cmFuc2Zvcm0oJ3JlbmFtZScpLFxyXG4gICAgICAgICAgICAgICAgICBjbHM6ICdidG4gYnRuLXNlY29uZGFyeScsXHJcbiAgICAgICAgICAgICAgICAgIGhhbmRsZTogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBvbGROYW1lOiBzdHJpbmcgPSBzZWxlY3RlZEZpbGUubmFtZTtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgbmV3TmFtZVxyXG4gICAgICAgICAgICAgICAgICAgIGxldCBmbGFnID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgaSA9IDE7XHJcbiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGZsYWcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIG5ld05hbWUgPSBvbGROYW1lLnN1YnN0cmluZygwLCBvbGROYW1lLmxhc3RJbmRleE9mKCcuJykpICsgJygnICsgaSArICcpJyArIG9sZE5hbWUuc3Vic3RyaW5nKG9sZE5hbWUubGFzdEluZGV4T2YoJy4nKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy51cGxvYWRlZEZpbGVJbmZvTGlzdC5maW5kKHggPT4geC5maWxlTmFtZSA9PSBuZXdOYW1lKSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGkrKztcclxuICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmxhZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51cGxvYWRGaWxlKHV1aWQsIHNlbGVjdGVkRmlsZSwgbmV3TmFtZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgbXNnLmNsb3NlKCk7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgIHRleHQ6IHRoaXMubG9jYWxlcGlwZS50cmFuc2Zvcm0oJ3JlcGxhY2UnKSxcclxuICAgICAgICAgICAgICAgICAgY2xzOiAnYnRuIGJ0bi1zZWNvbmRhcnknLFxyXG4gICAgICAgICAgICAgICAgICBoYW5kbGU6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB1dWlkID0gdGhpcy51cGxvYWRlZEZpbGVJbmZvTGlzdC5maW5kKHggPT4geC5maWxlTmFtZSA9PSBzZWxlY3RlZEZpbGUubmFtZSkubWV0YWRhdGFJZDtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnVwbG9hZEZpbGUodXVpZCwgc2VsZWN0ZWRGaWxlLCBzZWxlY3RlZEZpbGUubmFtZSwgRmlsZVN0YXRlLlVwZGF0ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51cGxvYWRlZEZpbGVUb3RhbC0tO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm9sZFVwbG9hZGVkRmlsZUxpc3QuZmluZCh4ID0+IHguZmlsZU5hbWUgPT0gc2VsZWN0ZWRGaWxlLm5hbWUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLnVwbG9hZGVkRmlsZVRvdGFsKys7XHJcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLnVwbG9hZGVkRmlsZUluZm9MaXN0LnNwbGljZSh0aGlzLnVwbG9hZGVkRmlsZUluZm9MaXN0LmluZGV4T2YodGhpcy51cGxvYWRlZEZpbGVJbmZvTGlzdC5maWx0ZXIoeCA9PiB4LmZpbGVOYW1lID09IHNlbGVjdGVkRmlsZS5uYW1lKVswXSksIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBtc2cuY2xvc2UoKTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgdGV4dDogdGhpcy5sb2NhbGVwaXBlLnRyYW5zZm9ybSgnY2FuY2VsJyksXHJcbiAgICAgICAgICAgICAgICAgIGNsczogJ2J0biBidG4tc2Vjb25kYXJ5JyxcclxuICAgICAgICAgICAgICAgICAgaGFuZGxlOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgbXNnLmNsb3NlKCk7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBdXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHNlbGVjdGVkRmlsZS5pc0FsbG93ZWRVcGxvYWQgPT09IHRydWUpe1xyXG4gICAgICAgIHRoaXMudXBsb2FkRmlsZSh1dWlkLCBzZWxlY3RlZEZpbGUsIHNlbGVjdGVkRmlsZS5uYW1lKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmVyckZpbGVMaXN0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgbGV0IG5hbWU6IHN0cmluZyA9IHRoaXMubGlzdFRvU3RyaW5nKHRoaXMuZXJyRmlsZUxpc3QpO1xyXG4gICAgICB0aGlzLm1zZ1NlcnZpY2Uud2FybmluZyh0aGlzLmxvY2FsZXBpcGUudHJhbnNmb3JtKCdoYXZlU2FtZU5hbWUnKSArIG5hbWUgKyB0aGlzLmxvY2FsZXBpcGUudHJhbnNmb3JtKCdyZWNob29zZUZpbGUnKSk7XHJcbiAgICAgIHRoaXMuZXJyRmlsZUxpc3QgPSBbXTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5udWxsRmlsZUxpc3QubGVuZ3RoID4gMCkge1xyXG4gICAgICBsZXQgbmFtZTogc3RyaW5nID0gdGhpcy5saXN0VG9TdHJpbmcodGhpcy5udWxsRmlsZUxpc3QpO1xyXG4gICAgICB0aGlzLm1zZ1NlcnZpY2Uud2FybmluZyhuYW1lICsgdGhpcy5sb2NhbGVwaXBlLnRyYW5zZm9ybSgnc2l6ZVplcm8nKSArIHRoaXMubG9jYWxlcGlwZS50cmFuc2Zvcm0oJ3JlY2hvb3NlRmlsZScpKTtcclxuICAgICAgdGhpcy5udWxsRmlsZUxpc3QgPSBbXTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5maWxlTmFtZU92ZXJzaXplTGlzdC5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGxldCBuYW1lOiBzdHJpbmcgPSB0aGlzLmxpc3RUb1N0cmluZyh0aGlzLmZpbGVOYW1lT3ZlcnNpemVMaXN0KTtcclxuICAgICAgdGhpcy5tc2dTZXJ2aWNlLndhcm5pbmcobmFtZSArIHRoaXMubG9jYWxlcGlwZS50cmFuc2Zvcm0oJ2ZpbGVOYW1lT3ZlclNpemUnKSArdGhpcy5maWxlTmFtZUxlbmd0aCsgdGhpcy5sb2NhbGVwaXBlLnRyYW5zZm9ybSgncmVjaG9vc2VGaWxlJykpO1xyXG4gICAgICB0aGlzLmZpbGVOYW1lT3ZlcnNpemVMaXN0ID0gW107XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuYmV5b25kRmlsZUxpc3QubGVuZ3RoID4gMCkge1xyXG4gICAgICBsZXQgbmFtZTogc3RyaW5nID0gdGhpcy5saXN0VG9TdHJpbmcodGhpcy5iZXlvbmRGaWxlTGlzdCk7XHJcbiAgICAgIHRoaXMubXNnU2VydmljZS53YXJuaW5nKG5hbWUgKyB0aGlzLmxvY2FsZXBpcGUudHJhbnNmb3JtKCdzaXplTWF4JykgKyB0aGlzLm1heEZpbGVTaXplICsgXCJLQlwiICsgdGhpcy5sb2NhbGVwaXBlLnRyYW5zZm9ybSgncmVjaG9vc2VGaWxlJykpO1xyXG4gICAgICB0aGlzLmJleW9uZEZpbGVMaXN0ID0gW107XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuaW52YWxpZENoYXJhY3RlcnNGaWxlTGlzdC5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGxldCBuYW1lOiBzdHJpbmcgPSB0aGlzLmxpc3RUb1N0cmluZyh0aGlzLmludmFsaWRDaGFyYWN0ZXJzRmlsZUxpc3QpO1xyXG4gICAgICB0aGlzLm1zZ1NlcnZpY2Uud2FybmluZyhuYW1lICsgdGhpcy5sb2NhbGVwaXBlLnRyYW5zZm9ybSgnaW52YWxpZENoYXJhY3RlcnMnKSArIHRoaXMubG9jYWxlcGlwZS50cmFuc2Zvcm0oJ3JlY2hvb3NlRmlsZScpKTtcclxuICAgICAgdGhpcy5pbnZhbGlkQ2hhcmFjdGVyc0ZpbGVMaXN0ID0gW107XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuaW52YWxpZEV4dE5hbWVzRmlsZUxpc3QubGVuZ3RoID4gMCkge1xyXG4gICAgICBsZXQgbmFtZTogc3RyaW5nID0gdGhpcy5saXN0VG9TdHJpbmcodGhpcy5pbnZhbGlkRXh0TmFtZXNGaWxlTGlzdCk7XHJcbiAgICAgIHRoaXMubXNnU2VydmljZS53YXJuaW5nKG5hbWUgKyB0aGlzLmxvY2FsZXBpcGUudHJhbnNmb3JtKCdpbnZhbGlkRXh0TmFtZXMnKSArIHRoaXMubG9jYWxlcGlwZS50cmFuc2Zvcm0oJ3JlY2hvb3NlRmlsZScpKTtcclxuICAgICAgdGhpcy5pbnZhbGlkRXh0TmFtZXNGaWxlTGlzdCA9IFtdO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLnVucmVjb2duaXplZFR5cGVGaWxlTGlzdC5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGxldCBuYW1lOiBzdHJpbmcgPSB0aGlzLmxpc3RUb1N0cmluZyh0aGlzLnVucmVjb2duaXplZFR5cGVGaWxlTGlzdCk7XHJcbiAgICAgIHRoaXMubXNnU2VydmljZS53YXJuaW5nKG5hbWUgKyB0aGlzLmxvY2FsZXBpcGUudHJhbnNmb3JtKCdVbnJlY29nbml6ZWRGaWxlVHlwZScpICsgdGhpcy5sb2NhbGVwaXBlLnRyYW5zZm9ybSgncmVjaG9vc2VGaWxlJykpO1xyXG4gICAgICB0aGlzLnVucmVjb2duaXplZFR5cGVGaWxlTGlzdCA9IFtdO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZmlsZXMgPSB0aGlzLmZpbGVzLnNsaWNlKCk7XHJcbiAgICB0aGlzLmZpbGVBbGxTZWxlY3RlZCA9IGZhbHNlO1xyXG4gICAgJGV2ZW50LnRhcmdldC52YWx1ZSA9ICcnO1xyXG4gICAgLy8gbG9hZGluZy5jbG9zZSgpO1xyXG4gIH1cclxuXHJcbiAgc2hvd0Vycm9yTWVzc2FnZShmaWxlKSB7XHJcbiAgICB0aGlzLm1zZ1NlcnZpY2UuZXJyb3IodGhpcy5sb2NhbGVwaXBlLnRyYW5zZm9ybSgndXBsb2FkRmFpbHVyZScpICsgZmlsZS5lcnJvck1lc3NhZ2UpO1xyXG4gIH1cclxuXHJcbiAgaGFuZGxlRmlsZUluZm8odXVpZDogc3RyaW5nLCBzZWxlY3RlZEZpbGUsIGZpbGVOYW1lOiBzdHJpbmcpOiBhbnkge1xyXG5cclxuICAgIGxldCBmaWxlSW5mbzogRmlsZUluZm87XHJcblxyXG4gICAgZmlsZUluZm8gPSB7XHJcbiAgICAgIGlkOiB1dWlkLFxyXG4gICAgICBuYW1lOiBmaWxlTmFtZSxcclxuICAgICAgdHlwZTogc2VsZWN0ZWRGaWxlLnR5cGUsXHJcbiAgICAgIHNvdXJjZTogXCJcIixcclxuICAgICAgc2l6ZTogdGhpcy5nZXRGaWxlU2l6ZShzZWxlY3RlZEZpbGUuc2l6ZSksXHJcbiAgICAgIGZpbGVTaXplOiBzZWxlY3RlZEZpbGUuc2l6ZSxcclxuICAgICAgcGljTGlzdERpc3BsYXlOYW1lOiB0aGlzLmdldFBpY0xpc3REaXNwbGF5TmFtZShmaWxlTmFtZSksXHJcbiAgICAgIHF1ZXVlTGlzdERpc3BsYXlOYW1lOiB0aGlzLmdldFF1ZXVlRGlzcGxheU5hbWUoZmlsZU5hbWUpLFxyXG4gICAgICAvL2NvbnRlbnQ6IHJlYWRlci5yZXN1bHQudG9TdHJpbmcoKSxcclxuICAgICAgaGFzVXBsb2FkZWQ6IGZhbHNlLFxyXG4gICAgICBtb3VzZU9uOiBmYWxzZSxcclxuICAgICAgc2VsZWN0ZDogZmFsc2UsXHJcbiAgICAgIGlzVXBsb2FkaW5nOiB0cnVlLFxyXG4gICAgICB1cGxvYWRSZXN1bHQ6IGZhbHNlLFxyXG4gICAgICB1cGxvYWRQcm9jZXNzOiAwLFxyXG4gICAgICBlcnJvck1lc3NhZ2U6IFwiXCIsXHJcbiAgICAgIGV4dGVuc2lvbkRyb3BMaXN0SWQ6IDAsXHJcbiAgICAgIGV4dGVuc2lvbk5hbWU6IFwiXCIsXHJcbiAgICAgIHNlY3VyaXR5RHJvcExpc3RJZDogMCxcclxuICAgICAgc2VjdXJpdHlJbmZvOiB0aGlzLnNlY3VyaXR5SW5mb0xpc3RbMF1cclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5zdG9yYWdlRXh0ZW5zaW9uICE9IG51bGwpXHJcbiAgICAgIGZpbGVJbmZvLmV4dGVuc2lvbk5hbWUgPSB0aGlzLmRlZmF1bHRQcm9wZXJ0eU5hbWU7XHJcblxyXG5cclxuICAgIGxldCB0eXBlOiBzdHJpbmcgPSBzZWxlY3RlZEZpbGUudHlwZTtcclxuICAgIGlmICh0eXBlLmluY2x1ZGVzKFwidGlmZlwiKSkge1xyXG4gICAgICB0aGlzLmFkZERvY0luZm8oc2VsZWN0ZWRGaWxlLCBmaWxlSW5mbywgRG9jVHlwZS5PdGhlcik7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh0eXBlLmluY2x1ZGVzKFwiaW1hZ2VcIikpIHtcclxuICAgICAgdGhpcy5hZGREb2NJbmZvKHNlbGVjdGVkRmlsZSwgZmlsZUluZm8sIERvY1R5cGUuSW1hZ2UpO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAodHlwZS5pbmNsdWRlcyhcIndvcmRcIikpIHtcclxuICAgICAgdGhpcy5hZGREb2NJbmZvKHNlbGVjdGVkRmlsZSwgZmlsZUluZm8sIERvY1R5cGUuV29yZCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh0eXBlLmluY2x1ZGVzKFwicGRmXCIpKSB7XHJcbiAgICAgIHRoaXMuYWRkRG9jSW5mbyhzZWxlY3RlZEZpbGUsIGZpbGVJbmZvLCBEb2NUeXBlLlBkZik7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh0eXBlLmluY2x1ZGVzKFwicGxhaW5cIikpIHtcclxuICAgICAgdGhpcy5hZGREb2NJbmZvKHNlbGVjdGVkRmlsZSwgZmlsZUluZm8sIERvY1R5cGUuVHh0KTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHR5cGUuaW5jbHVkZXMoXCJzaGVldFwiKSB8fCB0eXBlLmluY2x1ZGVzKFwiZXhjZWxcIikpIHtcclxuICAgICAgdGhpcy5hZGREb2NJbmZvKHNlbGVjdGVkRmlsZSwgZmlsZUluZm8sIERvY1R5cGUuRXhjZWwpXHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh0eXBlLmluY2x1ZGVzKFwicG93ZXJwb2ludFwiKSB8fCB0eXBlLmluY2x1ZGVzKFwicHJlc2VudGF0aW9uXCIpKSB7XHJcbiAgICAgIHRoaXMuYWRkRG9jSW5mbyhzZWxlY3RlZEZpbGUsIGZpbGVJbmZvLCBEb2NUeXBlLlBvd2VycG9pbnQpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMuYWRkRG9jSW5mbyhzZWxlY3RlZEZpbGUsIGZpbGVJbmZvLCBEb2NUeXBlLk90aGVyKTtcclxuICAgICAgLy8gbGV0IG5hbWU6IHN0cmluZyA9IHNlbGVjdGVkRmlsZS5uYW1lO1xyXG4gICAgICAvLyBsZXQgZXJyVHlwZSA9IG5hbWUuc3Vic3RyaW5nKHNlbGVjdGVkRmlsZS5uYW1lLmxhc3RJbmRleE9mKCcuJykpO1xyXG4gICAgICAvLyB0aGlzLmVyclR5cGVMaXN0LnB1c2goZXJyVHlwZSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmlsZUluZm87XHJcbiAgfVxyXG5cclxuICB1cGxvYWRGaWxlKHV1aWQ6IHN0cmluZywgc2VsZWN0ZWRGaWxlLCBmaWxlTmFtZTogc3RyaW5nLCBzdGF0ZTogRmlsZVN0YXRlID0gRmlsZVN0YXRlLk5ldykge1xyXG5cclxuICAgIGxldCBmaWxlSW5mbyA9IHRoaXMuaGFuZGxlRmlsZUluZm8odXVpZCwgc2VsZWN0ZWRGaWxlLCBmaWxlTmFtZSk7XHJcblxyXG4gICAgbGV0IHVwbG9hZEZpbGVJbmZvID0gbmV3IFVwbG9hZEZpbGVJbmZvKCk7XHJcblxyXG4gICAgdXBsb2FkRmlsZUluZm8ubWV0YWRhdGFJZCA9IHV1aWQ7XHJcbiAgICB1cGxvYWRGaWxlSW5mby5maWxlTmFtZSA9IGZpbGVJbmZvLm5hbWU7XHJcbiAgICB1cGxvYWRGaWxlSW5mby5maWxlU2l6ZSA9IGZpbGVJbmZvLnNpemU7XHJcbiAgICB1cGxvYWRGaWxlSW5mby5zdGF0ZSA9IHN0YXRlO1xyXG4gICAgdXBsb2FkRmlsZUluZm8uc2VjdXJpdHlJbmZvID0gdGhpcy5zZWN1cml0eUluZm9MaXN0WzBdO1xyXG5cclxuXHJcbiAgICAvL+WIpOaWreaYr+WQpuaUr+aMgeWIhueJh+S4iuS8oFxyXG4gICAgaWYgKHRoaXMuYWxsb3dlZE11bHRpVXBsb2FkKSB7XHJcblxyXG4gICAgICAvL+aUr+aMgeWIhueJh+S4iuS8oFxyXG4gICAgICBsZXQgaW5pdFJlcXVlc3Q6IEluaXRNdWx0aVVwbG9hZFJlcXVlc3QgPSBuZXcgSW5pdE11bHRpVXBsb2FkUmVxdWVzdDtcclxuXHJcbiAgICAgIGluaXRSZXF1ZXN0LnBhdGggPSB0aGlzLmZvcm1JZDtcclxuICAgICAgaW5pdFJlcXVlc3QubWV0YWRhdGFJZCA9IHV1aWQ7XHJcbiAgICAgIGluaXRSZXF1ZXN0LnJvb3RJZCA9IHRoaXMucm9vdElkO1xyXG4gICAgICBpbml0UmVxdWVzdC5zaXplID0gZmlsZUluZm8uZmlsZVNpemU7XHJcbiAgICAgIGluaXRSZXF1ZXN0LmZpbGVOYW1lID0gZmlsZU5hbWU7XHJcblxyXG4gICAgICAvL+WIneWni+WMluWIhueJh1xyXG4gICAgICB0aGlzLmluaXRNdWx0aVVwbG9hZChpbml0UmVxdWVzdCkuc3Vic2NyaWJlKHJlcyA9PiB7XHJcbiAgICAgICAgaWYgKHJlcy5lcnJvciAhPSBudWxsKSB7XHJcbiAgICAgICAgICB0aGlzLmZpbGVzW3RoaXMuZmlsZXMuaW5kZXhPZihmaWxlSW5mbyldLnVwbG9hZFJlc3VsdCA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5maWxlc1t0aGlzLmZpbGVzLmluZGV4T2YoZmlsZUluZm8pXS5pc1VwbG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5maWxlc1t0aGlzLmZpbGVzLmluZGV4T2YoZmlsZUluZm8pXS5lcnJvck1lc3NhZ2UgPSByZXMuZXJyb3IuTWVzc2FnZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgbGV0IHVwbG9hZElkID0gcmVzLnVwbG9hZElkO1xyXG4gICAgICAgICAgbGV0IGNodW5rVG90YWw6IG51bWJlciA9IE1hdGguY2VpbChzZWxlY3RlZEZpbGUuc2l6ZSAvIHRoaXMuYnVmZmVyU2l6ZSk7XHJcbiAgICAgICAgICBsZXQgY2h1bmtJbmRleDogbnVtYmVyID0gMDtcclxuXHJcbiAgICAgICAgICBsZXQgbXVsdGlSZXN1bHRMaXN0OiBNdWx0aVVwbG9hZFJlc3VsdFtdID0gW107XHJcblxyXG4gICAgICAgICAgdGhpcy5maWxlVG90YWxDaHVua1t1dWlkXSA9IGNodW5rVG90YWw7XHJcbiAgICAgICAgICB0aGlzLnVwbG9hZGVkQ2h1bmtbdXVpZF0gPSAwO1xyXG5cclxuICAgICAgICAgIHdoaWxlIChjaHVua0luZGV4IDwgY2h1bmtUb3RhbCkge1xyXG5cclxuICAgICAgICAgICAgbGV0IG5leHRTaXplID0gTWF0aC5taW4oKGNodW5rSW5kZXggKyAxKSAqIHRoaXMuYnVmZmVyU2l6ZSwgc2VsZWN0ZWRGaWxlLnNpemUpO1xyXG4gICAgICAgICAgICBsZXQgZmlsZURhdGEgPSBzZWxlY3RlZEZpbGUuc2xpY2UoY2h1bmtJbmRleCAqIHRoaXMuYnVmZmVyU2l6ZSwgbmV4dFNpemUpO1xyXG5cclxuICAgICAgICAgICAgbGV0IG11bHRpUmVxdWVzdCA9IG5ldyBNdWx0aVVwbG9hZFJlcXVlc3Q7XHJcbiAgICAgICAgICAgIG11bHRpUmVxdWVzdC5tZXRhZGF0YUlkID0gdXVpZDtcclxuICAgICAgICAgICAgbXVsdGlSZXF1ZXN0LnJvb3RJZCA9IHRoaXMucm9vdElkO1xyXG4gICAgICAgICAgICBtdWx0aVJlcXVlc3QudXBsb2FkSWQgPSB1cGxvYWRJZDtcclxuICAgICAgICAgICAgbXVsdGlSZXF1ZXN0LmluZGV4ID0gY2h1bmtJbmRleDtcclxuICAgICAgICAgICAgbXVsdGlSZXF1ZXN0LnRvdGFsID0gY2h1bmtUb3RhbDtcclxuICAgICAgICAgICAgbXVsdGlSZXF1ZXN0LnNpemUgPSBmaWxlRGF0YS5zaXplO1xyXG5cclxuICAgICAgICAgICAgbGV0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XHJcbiAgICAgICAgICAgIGZvcm1EYXRhLmFwcGVuZCgnbXVsdGlSZXF1ZXN0JywgSlNPTi5zdHJpbmdpZnkobXVsdGlSZXF1ZXN0KSk7XHJcbiAgICAgICAgICAgIGZvcm1EYXRhLmFwcGVuZCgnZmlsZScsIGZpbGVEYXRhKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMubXVsdGlVcGxvYWQoZm9ybURhdGEpLnN1YnNjcmliZShyZXMgPT4ge1xyXG4gICAgICAgICAgICAgIGlmIChyZXMuZXJyb3IgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5maWxlc1t0aGlzLmZpbGVzLmluZGV4T2YoZmlsZUluZm8pXS51cGxvYWRSZXN1bHQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZmlsZXNbdGhpcy5maWxlcy5pbmRleE9mKGZpbGVJbmZvKV0uaXNVcGxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZmlsZXNbdGhpcy5maWxlcy5pbmRleE9mKGZpbGVJbmZvKV0uZXJyb3JNZXNzYWdlID0gcmVzLmVycm9yLk1lc3NhZ2U7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIG11bHRpUmVzdWx0TGlzdC5wdXNoKHJlcy5yZXN1bHQpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy51cGxvYWRlZENodW5rW3V1aWRdKys7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmZpbGVzW3RoaXMuZmlsZXMuaW5kZXhPZihmaWxlSW5mbyldLnVwbG9hZFByb2Nlc3MgPSBOdW1iZXIucGFyc2VJbnQoKHRoaXMudXBsb2FkZWRDaHVua1t1dWlkXSAvIHRoaXMuZmlsZVRvdGFsQ2h1bmtbdXVpZF0gKiAxMDApLnRvRml4ZWQoMCkpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMudXBsb2FkZWRDaHVua1t1dWlkXSA9PSB0aGlzLmZpbGVUb3RhbENodW5rW3V1aWRdKSB7XHJcbiAgICAgICAgICAgICAgICAgIGlmIChtdWx0aVJlc3VsdExpc3QubGVuZ3RoID09IHRoaXMuZmlsZVRvdGFsQ2h1bmtbdXVpZF0pIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNvbXBsZXRlTXVsdGlVcGxvYWRSZXF1ZXN0OiBDb21wbGV0ZU11bHRpVXBsb2FkUmVxdWVzdCA9IG5ldyBDb21wbGV0ZU11bHRpVXBsb2FkUmVxdWVzdDtcclxuICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZU11bHRpVXBsb2FkUmVxdWVzdC5tZXRhZGF0YUlkID0gdXVpZDtcclxuICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZU11bHRpVXBsb2FkUmVxdWVzdC5wYXJ0TGlzdCA9IG11bHRpUmVzdWx0TGlzdDtcclxuICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZU11bHRpVXBsb2FkUmVxdWVzdC5yb290SWQgPSB0aGlzLnJvb3RJZDtcclxuICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZU11bHRpVXBsb2FkUmVxdWVzdC51cGxvYWRJZCA9IHVwbG9hZElkO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbXBsZXRlTXVsdGlVcGxvYWRSZXF1ZXN0LnNpemUgPSBmaWxlSW5mby5maWxlU2l6ZTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5oYXZlRXh0ZW5zaW9uUHJvcGVydHkpXHJcbiAgICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZU11bHRpVXBsb2FkUmVxdWVzdC5leFByb3BlcnR5TmFtZSA9IHRoaXMuZGVmYXVsdFByb3BlcnR5TmFtZTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbXBsZXRlTXVsdGlVcGxvYWQoY29tcGxldGVNdWx0aVVwbG9hZFJlcXVlc3QpLnN1YnNjcmliZShyZXMgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgaWYgKHJlcy5zdGF0dXMgIT0gMjAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmlsZXNbdGhpcy5maWxlcy5pbmRleE9mKGZpbGVJbmZvKV0udXBsb2FkUmVzdWx0ID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmlsZXNbdGhpcy5maWxlcy5pbmRleE9mKGZpbGVJbmZvKV0uaXNVcGxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5maWxlc1t0aGlzLmZpbGVzLmluZGV4T2YoZmlsZUluZm8pXS5lcnJvck1lc3NhZ2UgPSByZXMuZXJyb3IuTWVzc2FnZTtcclxuICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmlsZXNbdGhpcy5maWxlcy5pbmRleE9mKGZpbGVJbmZvKV0udXBsb2FkUmVzdWx0ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5maWxlc1t0aGlzLmZpbGVzLmluZGV4T2YoZmlsZUluZm8pXS5pc1VwbG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnVwbG9hZEZpbGVJbmZvTGlzdCA9IHRoaXMudXBsb2FkRmlsZUluZm9MaXN0LmNvbmNhdCh1cGxvYWRGaWxlSW5mbyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudXBsb2FkZWRGaWxlSW5mb0xpc3QgPSB0aGlzLnVwbG9hZGVkRmlsZUluZm9MaXN0LmNvbmNhdCh1cGxvYWRGaWxlSW5mbyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudXBsb2FkZWRGaWxlVG90YWwrKztcclxuICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgIC8v5ZCO5Y+w5byC5q2l5ou85o6l5paH5qGjXHJcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5maWxlc1t0aGlzLmZpbGVzLmluZGV4T2YoZmlsZUluZm8pXS51cGxvYWRSZXN1bHQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmZpbGVzW3RoaXMuZmlsZXMuaW5kZXhPZihmaWxlSW5mbyldLmlzVXBsb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5maWxlc1t0aGlzLmZpbGVzLmluZGV4T2YoZmlsZUluZm8pXS5lcnJvck1lc3NhZ2UgPSB0aGlzLmxvY2FsZXBpcGUudHJhbnNmb3JtKCdtaXNtYXRjaENodW5rU2l6ZScpO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSlcclxuXHJcbiAgICAgICAgICAgIGNodW5rSW5kZXggPSBjaHVua0luZGV4ICsgMTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICB9KVxyXG5cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGxldCBlbnRpdHkgPSBuZXcgR3NwRm9ybVN0cmVhbUVudGl0eTtcclxuICAgICAgZW50aXR5LmZvcm1JZCA9IHRoaXMuZm9ybUlkO1xyXG4gICAgICBlbnRpdHkubWV0YWRhdGFJZCA9IHV1aWQ7XHJcbiAgICAgIGVudGl0eS5tb2RlID0gT3BlcmF0aW5nTW9kZXMuVGVtcDtcclxuICAgICAgZW50aXR5LnJvb3RJZCA9IHRoaXMucm9vdElkO1xyXG4gICAgICBlbnRpdHkuc2l6ZSA9IHNlbGVjdGVkRmlsZS5zaXplO1xyXG4gICAgICBlbnRpdHkuZmlsZU5hbWUgPSBmaWxlTmFtZTtcclxuICAgICAgaWYgKHRoaXMuaGF2ZUV4dGVuc2lvblByb3BlcnR5KVxyXG4gICAgICAgIGVudGl0eS5leFByb3BlcnR5TmFtZSA9IHRoaXMuZGVmYXVsdFByb3BlcnR5TmFtZTtcclxuXHJcbiAgICAgIGxldCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xyXG4gICAgICBmb3JtRGF0YS5hcHBlbmQoJ3VwbG9hZEVudGl0eScsIEpTT04uc3RyaW5naWZ5KGVudGl0eSkpO1xyXG4gICAgICBmb3JtRGF0YS5hcHBlbmQoJ2ZpbGUnLCBzZWxlY3RlZEZpbGUpO1xyXG5cclxuICAgICAgdGhpcy51cGxvYWRTaW5nbGVGaWxlKGZvcm1EYXRhKS5zdWJzY3JpYmUocmVzID0+IHtcclxuICAgICAgICBpZiAocmVzICE9IG51bGwpIHtcclxuICAgICAgICAgIHRoaXMuZmlsZXNbdGhpcy5maWxlcy5pbmRleE9mKGZpbGVJbmZvKV0udXBsb2FkUmVzdWx0ID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLmZpbGVzW3RoaXMuZmlsZXMuaW5kZXhPZihmaWxlSW5mbyldLmlzVXBsb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLmZpbGVzW3RoaXMuZmlsZXMuaW5kZXhPZihmaWxlSW5mbyldLmVycm9yTWVzc2FnZSA9IHJlcy5lcnJvci5NZXNzYWdlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmZpbGVzW3RoaXMuZmlsZXMuaW5kZXhPZihmaWxlSW5mbyldLnVwbG9hZFJlc3VsdCA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLmZpbGVzW3RoaXMuZmlsZXMuaW5kZXhPZihmaWxlSW5mbyldLmlzVXBsb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLnVwbG9hZEZpbGVJbmZvTGlzdCA9IHRoaXMudXBsb2FkRmlsZUluZm9MaXN0LmNvbmNhdCh1cGxvYWRGaWxlSW5mbyk7XHJcbiAgICAgICAgICB0aGlzLnVwbG9hZGVkRmlsZUluZm9MaXN0ID0gdGhpcy51cGxvYWRlZEZpbGVJbmZvTGlzdC5jb25jYXQodXBsb2FkRmlsZUluZm8pO1xyXG4gICAgICAgICAgdGhpcy51cGxvYWRlZEZpbGVUb3RhbCsrO1xyXG5cclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcblxyXG4gICAgfVxyXG5cclxuXHJcblxyXG4gICAgbGV0IGluZGV4ID0gLTE7XHJcbiAgICB0aGlzLmZpbGVzLmZvckVhY2goeCA9PiB7XHJcbiAgICAgIGlmICh4Lm5hbWUgPT0gZmlsZUluZm8ubmFtZSkge1xyXG4gICAgICAgIGlmIChpbmRleCA9PSAtMSlcclxuICAgICAgICAgIGluZGV4ID0gdGhpcy5maWxlcy5pbmRleE9mKHgpO1xyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gICAgaWYgKGluZGV4ICE9IC0xICYmIGluZGV4ICE9IHRoaXMuZmlsZXMubGVuZ3RoIC0gMSkge1xyXG4gICAgICB0aGlzLmZpbGVzLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgIHRoaXMudXBsb2FkRmlsZUluZm9MaXN0LnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgIHRoaXMudXBsb2FkZWRGaWxlSW5mb0xpc3Quc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgLy90aGlzLnVwbG9hZGVkRmlsZVRvdGFsLS07XHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcblxyXG4gIHVwbG9hZFNpbmdsZUZpbGUoZm9ybWRhdGE6IEZvcm1EYXRhKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuXHJcbiAgICBsZXQgdXJsID0gXCIvYXBpL3J1bnRpbWUvZGZzL3YxLjAvZm9ybWRvYy9zaW5nbGVcIjtcclxuICAgIGNvbnN0IGJhc2VVcmwgPSBCYXNlUGF0aFNlcnZpY2UuY29udmVydFBhdGgodXJsKTtcclxuICAgIHJldHVybiB0aGlzLmh0dHBjbGllbnQucG9zdChiYXNlVXJsLCBmb3JtZGF0YSkucGlwZShcclxuICAgICAgdGFwKHJlcyA9PiB7IH0pLFxyXG4gICAgICBjYXRjaEVycm9yKChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IHtcclxuICAgICAgICByZXR1cm4gb2YoZXJyb3IpO1xyXG4gICAgICB9KSk7XHJcbiAgfVxyXG5cclxuICB1cGxvYWRTbGljZUZpbGUoZm9ybWRhdGE6IEZvcm1EYXRhKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuXHJcbiAgICBsZXQgdXJsID0gXCIvYXBpL3J1bnRpbWUvZGZzL3YxLjAvZm9ybWRvYy9zbGljZVwiO1xyXG4gICAgY29uc3QgYmFzZVVybCA9IEJhc2VQYXRoU2VydmljZS5jb252ZXJ0UGF0aCh1cmwpO1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cGNsaWVudC5wb3N0KGJhc2VVcmwsIGZvcm1kYXRhKS5waXBlKFxyXG4gICAgICB0YXAocmVzID0+IHsgfSksXHJcbiAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4ge1xyXG4gICAgICAgIHJldHVybiBvZihlcnJvcik7XHJcbiAgICAgIH0pKTtcclxuICB9XHJcblxyXG4gIGluaXRNdWx0aVVwbG9hZChyZXF1ZXN0OiBJbml0TXVsdGlVcGxvYWRSZXF1ZXN0KTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuXHJcbiAgICBsZXQgdXJsID0gXCIvYXBpL3J1bnRpbWUvZGZzL3YxLjAvZm9ybWRvYy9tdWx0aS9pbml0XCI7XHJcbiAgICBjb25zdCBiYXNlVXJsID0gQmFzZVBhdGhTZXJ2aWNlLmNvbnZlcnRQYXRoKHVybCk7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwY2xpZW50LnBvc3QoYmFzZVVybCwgcmVxdWVzdCkucGlwZShcclxuICAgICAgdGFwKHJlcyA9PiB7IH0pLFxyXG4gICAgICBjYXRjaEVycm9yKChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IHtcclxuICAgICAgICByZXR1cm4gb2YoZXJyb3IpO1xyXG4gICAgICB9KSk7XHJcbiAgfVxyXG5cclxuICBtdWx0aVVwbG9hZChmb3JtZGF0YTogRm9ybURhdGEpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG5cclxuICAgIGxldCB1cmwgPSBcIi9hcGkvcnVudGltZS9kZnMvdjEuMC9mb3JtZG9jL211bHRpL3VwbG9hZFwiO1xyXG4gICAgY29uc3QgYmFzZVVybCA9IEJhc2VQYXRoU2VydmljZS5jb252ZXJ0UGF0aCh1cmwpO1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cGNsaWVudC5wb3N0KGJhc2VVcmwsIGZvcm1kYXRhKS5waXBlKFxyXG4gICAgICB0YXAocmVzID0+IHsgfSksXHJcbiAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4ge1xyXG4gICAgICAgIHJldHVybiBvZihlcnJvcik7XHJcbiAgICAgIH0pKTtcclxuICB9XHJcblxyXG4gIGNvbXBsZXRlTXVsdGlVcGxvYWQocmVxdWVzdDogQ29tcGxldGVNdWx0aVVwbG9hZFJlcXVlc3QpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG5cclxuICAgIGxldCB1cmwgPSBcIi9hcGkvcnVudGltZS9kZnMvdjEuMC9mb3JtZG9jL211bHRpL2NvbXBsZXRlXCI7XHJcbiAgICBjb25zdCBiYXNlVXJsID0gQmFzZVBhdGhTZXJ2aWNlLmNvbnZlcnRQYXRoKHVybCk7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwY2xpZW50LnBvc3QoYmFzZVVybCwgcmVxdWVzdCkucGlwZShcclxuICAgICAgdGFwKHJlcyA9PiB7IH0pLFxyXG4gICAgICBjYXRjaEVycm9yKChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IHtcclxuICAgICAgICByZXR1cm4gb2YoZXJyb3IpO1xyXG4gICAgICB9KSk7XHJcbiAgfVxyXG5cclxuXHJcblxyXG4gIHNlbGVjdEFsbEZpbGUoKSB7XHJcblxyXG4gICAgaWYgKCF0aGlzLmZpbGVBbGxTZWxlY3RlZCkge1xyXG4gICAgICB0aGlzLmZpbGVzLmZvckVhY2goZWxlbWVudCA9PiB7XHJcblxyXG4gICAgICAgIGVsZW1lbnQuc2VsZWN0ZCA9IHRydWU7XHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLmZpbGVBbGxTZWxlY3RlZCA9IHRydWU7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRGaWxlQ291bnQgPSB0aGlzLmZpbGVzLmxlbmd0aDtcclxuXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmZpbGVzLmZvckVhY2goZWxlbWVudCA9PiB7XHJcblxyXG4gICAgICAgIGVsZW1lbnQuc2VsZWN0ZCA9IGZhbHNlO1xyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy5maWxlQWxsU2VsZWN0ZWQgPSBmYWxzZTtcclxuICAgICAgdGhpcy5zZWxlY3RlZEZpbGVDb3VudCA9IDA7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgY2hlY2tvdXRTZWxlY3RGaWxlKGZpbGU6IEZpbGVJbmZvKSB7XHJcbiAgICAvLyBsZXQgb2JqOiBhbnkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChmaWxlTmFtZSk7XHJcbiAgICBmaWxlLnNlbGVjdGQgPSAhZmlsZS5zZWxlY3RkO1xyXG4gICAgaWYgKGZpbGUuc2VsZWN0ZClcclxuICAgICAgdGhpcy5zZWxlY3RlZEZpbGVDb3VudCsrO1xyXG4gICAgZWxzZVxyXG4gICAgICB0aGlzLnNlbGVjdGVkRmlsZUNvdW50LS07XHJcbiAgICBpZiAodGhpcy5zZWxlY3RlZEZpbGVDb3VudCA9PSB0aGlzLmZpbGVzLmxlbmd0aCkge1xyXG4gICAgICB0aGlzLmZpbGVBbGxTZWxlY3RlZCA9IHRydWU7XHJcbiAgICAgIC8vdGhpcy5pc0ZpbGVBbGxTZWxlY3RlZCgpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMuZmlsZUFsbFNlbGVjdGVkID0gZmFsc2U7XHJcbiAgICAgIC8vdGhpcy5pc0ZpbGVBbGxTZWxlY3RlZCgpO1xyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG4gIGxpc3REZWxldGVGaWxlKGZpbGVJbmZvOiBGaWxlSW5mbykge1xyXG4gICAgaWYgKGZpbGVJbmZvLnNlbGVjdGQpXHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRGaWxlQ291bnQtLTtcclxuICAgIC8vY29uc29sZS5sb2coZmlsZU5hbWUpO1xyXG4gICAgdGhpcy5maWxlcy5zcGxpY2UodGhpcy5maWxlcy5pbmRleE9mKGZpbGVJbmZvKSwgMSk7XHJcbiAgICBpZiAoZmlsZUluZm8udXBsb2FkUmVzdWx0KSB7XHJcbiAgICAgIGxldCBpZExpc3Q6IHN0cmluZ1tdID0gW107XHJcbiAgICAgIGlkTGlzdC5wdXNoKGZpbGVJbmZvLmlkKTtcclxuICAgICAgdGhpcy51cGxvYWRTZXJ2aWNlLmNhbmNlbChpZExpc3QsIHRoaXMucm9vdElkKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICAgIHRoaXMudXBsb2FkRmlsZUluZm9MaXN0LnNwbGljZSh0aGlzLnVwbG9hZEZpbGVJbmZvTGlzdC5pbmRleE9mKHRoaXMudXBsb2FkRmlsZUluZm9MaXN0LmZpbHRlcih4ID0+IHguZmlsZU5hbWUgPT0gZmlsZUluZm8ubmFtZSlbMF0pLCAxKTtcclxuICAgICAgdGhpcy51cGxvYWRlZEZpbGVJbmZvTGlzdC5zcGxpY2UodGhpcy51cGxvYWRlZEZpbGVJbmZvTGlzdC5pbmRleE9mKHRoaXMudXBsb2FkZWRGaWxlSW5mb0xpc3QuZmlsdGVyKHggPT4geC5maWxlTmFtZSA9PSBmaWxlSW5mby5uYW1lKVswXSksIDEpO1xyXG4gICAgICB0aGlzLnVwbG9hZGVkRmlsZVRvdGFsLS07XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5zZWxlY3RlZEZpbGVDb3VudCA9PSAwKVxyXG4gICAgICB0aGlzLmZpbGVBbGxTZWxlY3RlZCA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgbGlzdE11bHRpcGxlRGVsZXRlRmlsZSgpIHtcclxuICAgIGxldCBzZWxlY3RlZEZpbGU6IEZpbGVJbmZvW10gPSBbXTtcclxuICAgIHRoaXMuZmlsZXMuZm9yRWFjaChlbGVtZW50ID0+IHtcclxuICAgICAgbGV0IG9iajogYW55ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZWxlbWVudC5uYW1lKTtcclxuICAgICAgaWYgKG9iai5jaGVja2VkKVxyXG4gICAgICAgIHNlbGVjdGVkRmlsZS5wdXNoKGVsZW1lbnQpO1xyXG4gICAgfSlcclxuICAgIGxldCBtZXRhZGF0YUxpc3Q6IHN0cmluZ1tdID0gW107XHJcbiAgICBzZWxlY3RlZEZpbGUuZm9yRWFjaChlbGVtZW50ID0+IHtcclxuICAgICAgbWV0YWRhdGFMaXN0LnB1c2goZWxlbWVudC5pZCk7XHJcbiAgICAgIHRoaXMuZmlsZXMuc3BsaWNlKHRoaXMuZmlsZXMuaW5kZXhPZihlbGVtZW50KSwgMSk7XHJcbiAgICAgIGlmIChlbGVtZW50LnVwbG9hZFJlc3VsdCkge1xyXG5cclxuICAgICAgICB0aGlzLnVwbG9hZEZpbGVJbmZvTGlzdC5zcGxpY2UodGhpcy51cGxvYWRGaWxlSW5mb0xpc3QuaW5kZXhPZih0aGlzLnVwbG9hZEZpbGVJbmZvTGlzdC5maWx0ZXIoeCA9PiB4LmZpbGVOYW1lID09IGVsZW1lbnQubmFtZSlbMF0pLCAxKTtcclxuICAgICAgICB0aGlzLnVwbG9hZGVkRmlsZUluZm9MaXN0LnNwbGljZSh0aGlzLnVwbG9hZGVkRmlsZUluZm9MaXN0LmluZGV4T2YodGhpcy51cGxvYWRlZEZpbGVJbmZvTGlzdC5maWx0ZXIoeCA9PiB4LmZpbGVOYW1lID09IGVsZW1lbnQubmFtZSlbMF0pLCAxKTtcclxuICAgICAgICB0aGlzLnVwbG9hZGVkRmlsZVRvdGFsLS07XHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgICB0aGlzLnVwbG9hZFNlcnZpY2UuY2FuY2VsKG1ldGFkYXRhTGlzdCwgdGhpcy5yb290SWQpLnN1YnNjcmliZSgpO1xyXG5cclxuICAgIGxldCBhbGxCb3g6IGFueSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiYWxsQ2hlY2tCb3hcIik7XHJcbiAgICBpZiAoYWxsQm94ICE9IG51bGwpXHJcbiAgICAgIGFsbEJveC5jaGVja2VkID0gZmFsc2U7XHJcbiAgICB0aGlzLnNlbGVjdGVkRmlsZUNvdW50ID0gMDtcclxuICAgIHRoaXMuZmlsZUFsbFNlbGVjdGVkID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuXHJcbiAgZ2V0UGljTGlzdERpc3BsYXlOYW1lKGZpbGVOYW1lOiBzdHJpbmcpIHtcclxuICAgIGlmIChmaWxlTmFtZS5sZW5ndGggPD0gMTApXHJcbiAgICAgIHJldHVybiBmaWxlTmFtZTtcclxuICAgIGVsc2Uge1xyXG4gICAgICBsZXQgaGVhZENvbnRlbnQgPSBmaWxlTmFtZS5zdWJzdHJpbmcoMCwgMik7XHJcbiAgICAgIGxldCB0YWlsQ29udGVudCA9IGZpbGVOYW1lLnN1YnN0cmluZyhmaWxlTmFtZS5sYXN0SW5kZXhPZignLicpIC0gMik7XHJcbiAgICAgIHJldHVybiBoZWFkQ29udGVudCArIFwi4oCmXCIgKyB0YWlsQ29udGVudDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldFF1ZXVlRGlzcGxheU5hbWUoZmlsZU5hbWU6IHN0cmluZykge1xyXG4gICAgcmV0dXJuIGZpbGVOYW1lO1xyXG4gIH1cclxuXHJcbiAgYWRkRG9jSW5mbyhzZWxlY3RkRmlsZSwgZmlsZUluZm86IEZpbGVJbmZvLCBkb2NUeXBlOiBEb2NUeXBlKSB7XHJcblxyXG4gICAgc3dpdGNoIChkb2NUeXBlKSB7XHJcbiAgICAgIGNhc2UgRG9jVHlwZS5Xb3JkOiB7XHJcbiAgICAgICAgZmlsZUluZm8uc291cmNlID0gdGhpcy5jcmVhdGVCYXNlVXJsKFwiL3BsYXRmb3JtL3J1bnRpbWUvZGZzL2ltYWdlcy93b3JkLnBuZ1wiKTtcclxuICAgICAgICB0aGlzLmZpbGVzLnB1c2goZmlsZUluZm8pO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjYXNlIERvY1R5cGUuUGRmOiB7XHJcbiAgICAgICAgZmlsZUluZm8uc291cmNlID0gdGhpcy5jcmVhdGVCYXNlVXJsKFwiL3BsYXRmb3JtL3J1bnRpbWUvZGZzL2ltYWdlcy9wZGYucG5nXCIpO1xyXG4gICAgICAgIHRoaXMuZmlsZXMucHVzaChmaWxlSW5mbyk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNhc2UgRG9jVHlwZS5FeGNlbDoge1xyXG4gICAgICAgIGZpbGVJbmZvLnNvdXJjZSA9IHRoaXMuY3JlYXRlQmFzZVVybChcIi9wbGF0Zm9ybS9ydW50aW1lL2Rmcy9pbWFnZXMvZXhjZWwucG5nXCIpO1xyXG4gICAgICAgIHRoaXMuZmlsZXMucHVzaChmaWxlSW5mbyk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNhc2UgRG9jVHlwZS5UeHQ6IHtcclxuICAgICAgICBmaWxlSW5mby5zb3VyY2UgPSB0aGlzLmNyZWF0ZUJhc2VVcmwoXCIvcGxhdGZvcm0vcnVudGltZS9kZnMvaW1hZ2VzL3R4dC5wbmdcIik7XHJcbiAgICAgICAgdGhpcy5maWxlcy5wdXNoKGZpbGVJbmZvKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG5cclxuICAgICAgY2FzZSBEb2NUeXBlLlBvd2VycG9pbnQ6IHtcclxuICAgICAgICBmaWxlSW5mby5zb3VyY2UgPSB0aGlzLmNyZWF0ZUJhc2VVcmwoXCIvcGxhdGZvcm0vcnVudGltZS9kZnMvaW1hZ2VzL3BwdC5wbmdcIik7XHJcbiAgICAgICAgdGhpcy5maWxlcy5wdXNoKGZpbGVJbmZvKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG5cclxuICAgICAgY2FzZSBEb2NUeXBlLk90aGVyOiB7XHJcbiAgICAgICAgZmlsZUluZm8uc291cmNlID0gdGhpcy5jcmVhdGVCYXNlVXJsKFwiL3BsYXRmb3JtL3J1bnRpbWUvZGZzL2ltYWdlcy9maWxlLnBuZ1wiKTtcclxuICAgICAgICB0aGlzLmZpbGVzLnB1c2goZmlsZUluZm8pO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjYXNlIERvY1R5cGUuSW1hZ2U6IHtcclxuICAgICAgICBsZXQgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcclxuICAgICAgICByZWFkZXIucmVhZEFzRGF0YVVSTChzZWxlY3RkRmlsZSk7XHJcbiAgICAgICAgcmVhZGVyLm9ubG9hZCA9IChfZXZlbnQpID0+IHtcclxuICAgICAgICAgIGxldCBpbWdVcmwgPSByZWFkZXIucmVzdWx0O1xyXG4gICAgICAgICAgaWYgKHRoaXMuaW5qZWN0b3IgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICBsZXQgc2FuaXRpemVyID0gdGhpcy5pbmplY3Rvci5nZXQoRG9tU2FuaXRpemVyKTtcclxuICAgICAgICAgICAgaW1nVXJsID0gc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RSZXNvdXJjZVVybChpbWdVcmwpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZmlsZUluZm8uc291cmNlID0gaW1nVXJsO1xyXG4gICAgICAgICAgdGhpcy5maWxlcy5wdXNoKGZpbGVJbmZvKTtcclxuXHJcbiAgICAgICAgICAvL+WboOS4uuW8guatpeWkhOeQhueahOW3ruW8gu+8jOihpeWBv+S4gOasoeWIoOmZpFxyXG4gICAgICAgICAgbGV0IGluZGV4ID0gLTE7XHJcbiAgICAgICAgICB0aGlzLmZpbGVzLmZvckVhY2goeCA9PiB7XHJcbiAgICAgICAgICAgIGlmICh4Lm5hbWUgPT0gZmlsZUluZm8ubmFtZSkge1xyXG4gICAgICAgICAgICAgIGlmIChpbmRleCA9PSAtMSlcclxuICAgICAgICAgICAgICAgIGluZGV4ID0gdGhpcy5maWxlcy5pbmRleE9mKHgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgaWYgKGluZGV4ICE9IC0xICYmIGluZGV4ICE9IHRoaXMuZmlsZXMubGVuZ3RoIC0gMSkge1xyXG4gICAgICAgICAgICB0aGlzLmZpbGVzLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgICAgIHRoaXMudXBsb2FkRmlsZUluZm9MaXN0LnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgICAgIHRoaXMudXBsb2FkZWRGaWxlSW5mb0xpc3Quc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcbiAgbGlzdFRvU3RyaW5nKHN0ckxpc3Q6IHN0cmluZ1tdKSB7XHJcbiAgICBjb25zdCByZXN1bHQgPSBzdHJMaXN0LmZpbHRlcihpdGVtID0+IGl0ZW0udHJpbSgpICE9PSAnJyk7XHJcbiAgICBsZXQgbmFtZTogc3RyaW5nID0gXCJcIjtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmVzdWx0Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIG5hbWUgKz0gcmVzdWx0W2ldICsgKGkgPT09IHJlc3VsdC5sZW5ndGggLSAxID8gXCJcIiA6IFwiLFwiKTtcclxuICAgIH1cclxuICAgIHJldHVybiBuYW1lO1xyXG4gIH1cclxuXHJcbiAgc2VjdXJpdHlDaGFuZ2UoJGV2ZW50OiBhbnksIGZpbGU6IEZpbGVJbmZvKSB7XHJcbiAgICBmaWxlLnNlY3VyaXR5SW5mbyA9ICRldmVudC5kYXRhO1xyXG4gICAgbGV0IHVwbG9hZEZpbGUgPSB0aGlzLnVwbG9hZEZpbGVJbmZvTGlzdC5maWx0ZXIoeCA9PiB4Lm1ldGFkYXRhSWQgPSBmaWxlLmlkKVswXTtcclxuICAgIHVwbG9hZEZpbGUuc2VjdXJpdHlJbmZvID0gJGV2ZW50LmRhdGE7XHJcbiAgfVxyXG5cclxuXHJcbiAgZXhTdG9yYWdlRmlsZUxpc3Q6IEV4U3RvcmFnZUZpbGVJbmZvW10gPSBbXTtcclxuXHJcbiAgdHlwZUNoYW5nZSgkZXZlbnQ6IGFueSwgZmlsZTogRmlsZUluZm8pIHtcclxuICAgIGZpbGUuZXh0ZW5zaW9uTmFtZSA9ICRldmVudC5kYXRhLm5hbWU7XHJcbiAgICBsZXQgZXhTdG9yYWdlRmlsZUluZm86IEV4U3RvcmFnZUZpbGVJbmZvID0gbmV3IEV4U3RvcmFnZUZpbGVJbmZvO1xyXG4gICAgaWYgKGZpbGUuZXh0ZW5zaW9uTmFtZSA9PSB0aGlzLnN0b3JhZ2VFeHRlbnNpb24uZGVmYXVsdFByb3BlcnR5TmFtZSkge1xyXG4gICAgICBpZiAodGhpcy5leFN0b3JhZ2VGaWxlTGlzdC5maWx0ZXIoeCA9PiB4Lm1ldGFkYXRhSWQgPT0gZmlsZS5pZCkubGVuZ3RoID4gMClcclxuICAgICAgICB0aGlzLmV4U3RvcmFnZUZpbGVMaXN0LnNwbGljZSh0aGlzLmV4U3RvcmFnZUZpbGVMaXN0LmZpbmRJbmRleCh4ID0+IHgubWV0YWRhdGFJZCA9PSBmaWxlLmlkKSwgMSlcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICh0aGlzLmV4U3RvcmFnZUZpbGVMaXN0LmZpbHRlcih4ID0+IHgubWV0YWRhdGFJZCA9PSBmaWxlLmlkKS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgZXhTdG9yYWdlRmlsZUluZm8gPSB0aGlzLmV4U3RvcmFnZUZpbGVMaXN0LmZpbHRlcih4ID0+IHgubWV0YWRhdGFJZCA9PSBmaWxlLmlkKVswXTtcclxuICAgICAgICBleFN0b3JhZ2VGaWxlSW5mby5leFByb3BlcnR5TmFtZSA9IGZpbGUuZXh0ZW5zaW9uTmFtZTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBleFN0b3JhZ2VGaWxlSW5mby5tZXRhZGF0YUlkID0gZmlsZS5pZDtcclxuICAgICAgICBleFN0b3JhZ2VGaWxlSW5mby5leFByb3BlcnR5TmFtZSA9IGZpbGUuZXh0ZW5zaW9uTmFtZTtcclxuICAgICAgICB0aGlzLmV4U3RvcmFnZUZpbGVMaXN0LnB1c2goZXhTdG9yYWdlRmlsZUluZm8pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB1cGxvYWQoKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIGlmICh0aGlzLnVwbG9hZGVkRmlsZVRvdGFsICE9IHRoaXMuZmlsZXMuZmlsdGVyKHggPT4geC5pc1VwbG9hZGluZyB8fCB4LnVwbG9hZFJlc3VsdCkubGVuZ3RoKSB7XHJcblxyXG4gICAgICB0aGlzLm1zZ1NlcnZpY2Uud2FybmluZyh0aGlzLmxvY2FsZXBpcGUudHJhbnNmb3JtKCd3YWl0JykpO1xyXG4gICAgICByZXR1cm4gb2YoZmFsc2UpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuaGF2ZVNlY3VyaXR5SW5mbykge1xyXG4gICAgICB0aGlzLnVwbG9hZFNlcnZpY2Uuc2F2ZVNlY3VyaXR5SW5mbyh0aGlzLnVwbG9hZEZpbGVJbmZvTGlzdCwgdGhpcy5yb290SWQpLnN1YnNjcmliZSgpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuc3RvcmFnZUV4dGVuc2lvbiA9PSBudWxsKVxyXG4gICAgICByZXR1cm4gb2YodGhpcy51cGxvYWRGaWxlSW5mb0xpc3QpO1xyXG4gICAgZWxzZSB7XHJcbiAgICAgIGlmICh0aGlzLmV4U3RvcmFnZUZpbGVMaXN0Lmxlbmd0aCA9PSAwKVxyXG4gICAgICAgIHJldHVybiBvZih0aGlzLnVwbG9hZEZpbGVJbmZvTGlzdCk7XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGNvbnN0IGxvYWRpbmcgPSB0aGlzLmxvYWRTZXJ2aWNlLnNob3coe1xyXG4gICAgICAgICAgbWVzc2FnZTogdGhpcy5sb2NhbGVwaXBlLnRyYW5zZm9ybSgnc2F2ZVRvJykgKyB0aGlzLnN0b3JhZ2VFeHRlbnNpb24uZXh0ZW5zaW9uTmFtZVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiB0aGlzLnVwbG9hZFNlcnZpY2UuY2hhbmdlU3RvcmFnZUluc3RhbmNlKHRoaXMuZXhTdG9yYWdlRmlsZUxpc3QsIHRoaXMucm9vdElkKS5waXBlKFxyXG4gICAgICAgICAgbWFwKHJlcyA9PiB7XHJcbiAgICAgICAgICAgIC8vIGlmIChyZXMgIT0gbnVsbClcclxuICAgICAgICAgICAgLy8gICB0aGlzLm1zZ1NlcnZpY2UuZXJyb3IoJ+S/neWtmOWIsCcgKyB0aGlzLnN0b3JhZ2VFeHRlbnNpb24uZXh0ZW5zaW9uTmFtZSArIFwi5aSx6LSl77yM5LiK5Lyg5paH5Lu26Ieq5Yqo5L+d5a2Y5YiwXCIgKyB0aGlzLnN0b3JhZ2VFeHRlbnNpb24uZGVmYXVsdFByb3BlcnR5TmFtZSArIFwi5a2Y5YKo44CCXCIgKyByZXMuZXJyb3IuTWVzc2FnZSk7XHJcbiAgICAgICAgICAgIGxvYWRpbmcuY2xvc2UoKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMudXBsb2FkRmlsZUluZm9MaXN0O1xyXG4gICAgICAgICAgfSkpXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNhbmNlbCgpIHtcclxuICAgIGlmICh0aGlzLnVwbG9hZEZpbGVJbmZvTGlzdC5sZW5ndGggPT0gMClcclxuICAgICAgcmV0dXJuO1xyXG4gICAgdGhpcy51cGxvYWRGaWxlSW5mb0xpc3QuZm9yRWFjaChlbGVtZW50ID0+IHtcclxuICAgICAgdGhpcy5tZXRhZGF0YUlkTGlzdC5wdXNoKGVsZW1lbnQubWV0YWRhdGFJZCk7XHJcbiAgICB9KVxyXG4gICAgdGhpcy51cGxvYWRTZXJ2aWNlLmNhbmNlbCh0aGlzLm1ldGFkYXRhSWRMaXN0LCB0aGlzLnJvb3RJZCkuc3Vic2NyaWJlKCk7XHJcblxyXG4gIH1cclxuXHJcbiAgZ2V0VXBsb2FkRmlsZUluZm9MaXN0KCkge1xyXG4gICAgcmV0dXJuIHRoaXMudXBsb2FkRmlsZUluZm9MaXN0O1xyXG4gIH1cclxuXHJcbiAgZGVsZXRlKGZpbGUpIHtcclxuICAgIHRoaXMuZmlsZXMuc3BsaWNlKHRoaXMuZmlsZXMuaW5kZXhPZihmaWxlKSwgMSk7XHJcbiAgICBpZiAoZmlsZS51cGxvYWRSZXN1bHQpXHJcbiAgICAgIHRoaXMudXBsb2FkZWRGaWxlVG90YWwtLTtcclxuICAgIGlmICh0aGlzLmV4U3RvcmFnZUZpbGVMaXN0LmZpbHRlcih4ID0+IHgubWV0YWRhdGFJZCA9PSBmaWxlLmlkKS5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMuZXhTdG9yYWdlRmlsZUxpc3Quc3BsaWNlKHRoaXMuZXhTdG9yYWdlRmlsZUxpc3QuZmluZEluZGV4KHggPT4geC5tZXRhZGF0YUlkID09IGZpbGUuaWQpLCAxKTtcclxuICAgIH1cclxuXHJcbiAgfVxyXG5cclxuICBnZXRGaWxlU2l6ZShzaXplOiBudW1iZXIpIHtcclxuICAgIGlmIChzaXplIDwgMTAyNDAwKVxyXG4gICAgICByZXR1cm4gKHNpemUgLyAxMDI0KS50b0ZpeGVkKDEpICsgXCJLXCI7XHJcbiAgICBlbHNlIGlmIChzaXplIDwgMTAyNCAqIDEwMjQpXHJcbiAgICAgIHJldHVybiAoc2l6ZSAvIDEwMjQpLnRvRml4ZWQoMCkgKyBcIktcIjtcclxuICAgIGVsc2UgaWYgKHNpemUgPCAxMDAgKiAxMDI0ICogMTAyNClcclxuICAgICAgcmV0dXJuIChzaXplIC8gMTAyNCAvIDEwMjQpLnRvRml4ZWQoMSkgKyBcIk1cIjtcclxuICAgIGVsc2UgaWYgKHNpemUgPCAxMDI0ICogMTAyNCAqIDEwMjQpXHJcbiAgICAgIHJldHVybiAoc2l6ZSAvIDEwMjQgLyAxMDI0KS50b0ZpeGVkKDApICsgXCJNXCI7XHJcbiAgICBlbHNlXHJcbiAgICAgIHJldHVybiAoc2l6ZSAvIDEwMjQgLyAxMDI0IC8gMTAyNCkudG9GaXhlZCgxKSArIFwiR1wiO1xyXG4gIH1cclxuICBzaG93QnlHcm91cCgpIHtcclxuICAgIHRoaXMuc2hvd1R5cGUgPSAwO1xyXG4gICAgLy8gdGhpcy5zZWxlY3RlZEZpbGVDb3VudCA9IDA7XHJcbiAgfVxyXG5cclxuICBzaG93QnlMaXN0KCkge1xyXG4gICAgdGhpcy5zaG93VHlwZSA9IDE7XHJcbiAgICAvLyB0aGlzLnNlbGVjdGVkRmlsZUNvdW50ID0gMDtcclxuICAgIGlmICh0aGlzLnNlbGVjdGVkRmlsZUNvdW50ICE9IDAgJiYgdGhpcy5zZWxlY3RlZEZpbGVDb3VudCA9PSB0aGlzLmZpbGVzLmxlbmd0aCkge1xyXG4gICAgICB0aGlzLmZpbGVBbGxTZWxlY3RlZCA9IHRydWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBtb3VzZU92ZXIoZmlsZSkge1xyXG4gICAgZmlsZS5tb3VzZU9uID0gdHJ1ZTtcclxuICB9XHJcbiAgbW91c2VPdXQoZmlsZSkge1xyXG4gICAgZmlsZS5tb3VzZU9uID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBjcmVhdGVCYXNlVXJsKG9sZFVybDogc3RyaW5nKSB7XHJcbiAgICBjb25zdCBiYXNlVXJsID0gQmFzZVBhdGhTZXJ2aWNlLmNvbnZlcnRQYXRoKG9sZFVybClcclxuICAgIHJldHVybiBiYXNlVXJsO1xyXG4gIH1cclxufVxyXG5cclxuXHJcbiJdfQ==
1491
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS11cGxvYWQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGdzcC1zdmMvZm9ybWRvYy11cGxvYWQvIiwic291cmNlcyI6WyJsaWIvdXBsb2FkL2ZpbGUtdXBsb2FkL2ZpbGUtdXBsb2FkLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxLQUFLLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXRHLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUU1QyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdEQsT0FBTyxFQUFjLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUV0QyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXJDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBRXZFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNwRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDekQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUUxRSxPQUFPLEVBQUUsVUFBVSxFQUFxQixNQUFNLHNCQUFzQixDQUFDO0FBQ3JFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQzFFLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQ2xGLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBRWxFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFPOUMsTUFBTSxPQUFPLG1CQUFtQjs7Ozs7OztJQTBFOUIsWUFBb0IsVUFBMkIsRUFBVSxhQUE0QixFQUFVLFdBQTJCLEVBQVUsUUFBbUI7UUFBbkksZUFBVSxHQUFWLFVBQVUsQ0FBaUI7UUFBVSxrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUFVLGdCQUFXLEdBQVgsV0FBVyxDQUFnQjtRQUFVLGFBQVEsR0FBUixRQUFRLENBQVc7UUF4RXZKLFVBQUssR0FBZSxFQUFFLENBQUM7UUFDdkIsbUJBQWMsR0FBYSxFQUFFLENBQUM7UUFDOUIsdUJBQWtCLEdBQXFCLEVBQUUsQ0FBQztRQUMxQyxnQkFBVyxHQUFhLEVBQUUsQ0FBQztRQUMzQixnQkFBVyxHQUFhLEVBQUUsQ0FBQztRQUMzQixpQkFBWSxHQUFhLEVBQUUsQ0FBQztRQUM1QixtQkFBYyxHQUFhLEVBQUUsQ0FBQztRQUM5Qix5QkFBb0IsR0FBYSxFQUFFLENBQUM7UUFDcEMsOEJBQXlCLEdBQWEsRUFBRSxDQUFDO1FBQ3pDLDRCQUF1QixHQUFhLEVBQUUsQ0FBQztRQUN2Qyw2QkFBd0IsR0FBYSxFQUFFLENBQUM7UUFDeEMsc0JBQWlCLEdBQVcsRUFBRSxDQUFDO1FBQy9CLG9CQUFlLEdBQVcsRUFBRSxDQUFDO1FBQzdCLGFBQVEsR0FBVyxDQUFDLENBQUM7UUFDckIsWUFBTyxHQUFZLEtBQUssQ0FBQztRQUN6QixnQkFBVyxHQUFZLEtBQUssQ0FBQztRQUM3QixlQUFVLEdBQUcsQ0FBQyxHQUFHLElBQUksR0FBRyxJQUFJLENBQUM7UUFHN0Isc0JBQWlCLEdBQVcsQ0FBQyxDQUFDO1FBQzlCLHNCQUFpQixHQUFZLEtBQUssQ0FBQztRQUVuQyxzQkFBaUIsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLHlDQUF5QyxDQUFDLENBQUM7UUFDbEYsNEJBQXVCLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyw2Q0FBNkMsQ0FBQyxDQUFDO1FBRTVGLG9CQUFlLEdBQVksS0FBSyxDQUFDO1FBRWpDLG9CQUFlLEdBQVksS0FBSyxDQUFDO1FBRWpDLGtCQUFhLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUM7UUFFaEMsbUJBQWMsR0FBOEIsRUFBRSxDQUFDO1FBRS9DLGlCQUFZLEdBQTJCLElBQUksS0FBSyxDQUFDO1FBRWpELHFCQUFnQixHQUErQixJQUFJLEtBQUssQ0FBQztRQUV6RCxrQkFBYSxHQUE4QixFQUFFLENBQUM7UUFDOUMsb0JBQWUsR0FBOEIsRUFBRSxDQUFDO1FBS2hELHdCQUFtQixHQUFXLEVBQUUsQ0FBQztRQUNqQyxvQkFBZSxHQUFxQixFQUFFLENBQUM7UUFFdkMscUJBQWdCLEdBQXFCLEVBQUUsQ0FBQztRQUV4QyxtQkFBYyxHQUFHLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxDQUFDO1FBRXBDLGtCQUFhLEdBQVcsRUFBRSxDQUFDO1FBRTNCLHNCQUFpQixHQUFXLENBQUMsQ0FBQztRQUk5QiwwQkFBcUIsR0FBWSxLQUFLLENBQUM7UUFFdkMscUJBQWdCLEdBQVksS0FBSyxDQUFDO1FBRWxDLHlCQUFvQixHQUFHLEVBQUUsQ0FBQztRQUMxQix3QkFBbUIsR0FBRyxFQUFFLENBQUM7O1FBRXpCLDJCQUFzQixHQUFXLEVBQUUsQ0FBQztRQUVwQyxvQkFBZSxHQUFHLElBQUksQ0FBQztRQUN2QixnQkFBVyxHQUFXLENBQUMsQ0FBQztRQUl4QixnQkFBVyxHQUFHLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxDQUFBO1FBV25CLGFBQVEsR0FBVyxHQUFHLENBQUM7UUFDdkIsY0FBUyxHQUFXLENBQUMsQ0FBQztRQUN0QixjQUFTLEdBQWEsRUFBRSxDQUFDO1FBQ3pCLGlCQUFZLEdBQTJCLElBQUksQ0FBQztRQUM1QyxtQkFBYyxHQUFXLENBQUMsQ0FBQztRQXFFcEMsY0FBUyxHQUFRLElBQUksQ0FBQztRQXN2QnRCLHNCQUFpQixHQUF3QixFQUFFLENBQUM7UUF2MEIxQyxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDakIsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUNoRCxJQUFJLENBQUMsUUFBUSxHQUFHLFlBQVksQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDckYsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLGFBQWEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDcEQ7SUFDSCxDQUFDO0lBWnVCLENBQUM7Ozs7SUF1QnpCLFFBQVE7UUFDTixJQUFJLFNBQVMsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUM7WUFDN0MsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDO1FBQ2hDLG9DQUFvQztRQUNwQyxJQUFJLElBQUksQ0FBQyxZQUFZLElBQUksSUFBSSxFQUFFO1lBQzdCLElBQUksQ0FBQyxhQUFhLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLFNBQVM7Ozs7WUFDakUsR0FBRyxDQUFDLEVBQUU7Z0JBQ0osSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQzs7b0JBQ3pCLENBQUMsR0FBRyxDQUFDO2dCQUNULEdBQUcsQ0FBQyxPQUFPOzs7O2dCQUFDLE9BQU8sQ0FBQyxFQUFFO29CQUNwQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxVQUFVLEVBQUUsT0FBTyxDQUFDLFVBQVUsRUFBRSxhQUFhLEVBQUUsT0FBTyxDQUFDLGFBQWEsRUFBRSxJQUFJLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7b0JBQzNJLENBQUMsRUFBRSxDQUFDO2dCQUNOLENBQUMsRUFBQyxDQUFDO1lBQ0wsQ0FBQyxFQUNGLENBQUE7U0FDRjtRQUNELElBQUksQ0FBQyxhQUFhLENBQUMsdUJBQXVCLEVBQUUsQ0FBQyxTQUFTOzs7O1FBQ3BELEdBQUcsQ0FBQyxFQUFFO1lBQ0osSUFBSSxHQUFHLElBQUksSUFBSSxJQUFJLEdBQUcsQ0FBQyxLQUFLLElBQUksSUFBSSxFQUFFO2dCQUNwQyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsR0FBRyxDQUFDO2dCQUM1QixJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLG1CQUFtQixDQUFDO2dCQUNyRSxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLENBQUM7O29CQUNwRixDQUFDLEdBQUcsQ0FBQztnQkFDVCxtRkFBbUY7Z0JBQ25GLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyx5QkFBeUIsQ0FBQyxPQUFPOzs7O2dCQUFDLE9BQU8sQ0FBQyxFQUFFO29CQUNoRSxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7Z0JBQ3JFLENBQUMsRUFBQyxDQUFDO2dCQUNILElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxHQUFHLE9BQU8sQ0FBQztnQkFDcEMsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQzthQUNuQztRQUNILENBQUMsRUFDRixDQUFBO1FBRUQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFNBQVM7Ozs7UUFBQyxHQUFHLENBQUMsRUFBRTtZQUM1RCxJQUFJLEdBQUcsQ0FBQyxLQUFLLElBQUksSUFBSSxFQUFFO2dCQUNyQixJQUFJLENBQUMsc0JBQXNCLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUM7Z0JBQ2hELHlDQUF5QztnQkFDekMsT0FBTzthQUNSO2lCQUFNO2dCQUNMLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxLQUFLLENBQUM7Z0JBQy9CLElBQUksQ0FBQyxlQUFlLEdBQUcsR0FBRyxDQUFDLGVBQWUsQ0FBQztnQkFDM0MsSUFBSSxDQUFDLFdBQVcsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMscUJBQXFCLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQztnQkFDL0UsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLFNBQVMsQ0FBQztnQkFDbkUsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLHFCQUFxQixDQUFDLENBQUMsaUJBQWlCLENBQUM7Z0JBQ2pGLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMscUJBQXFCLENBQUMsQ0FBQyxlQUFlLENBQUMsV0FBVyxFQUFFLENBQUM7Z0JBQzNGLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxHQUFHLENBQUMsa0JBQWtCLENBQUM7Z0JBQ2pELElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFO29CQUN6QixJQUFJLENBQUMsYUFBYSxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFNBQVM7Ozs7b0JBQzVFLEdBQUcsQ0FBQyxFQUFFO3dCQUNKLElBQUksR0FBRyxJQUFJLElBQUksSUFBSSxHQUFHLENBQUMsS0FBSyxJQUFJLElBQUksRUFBRTs0QkFDcEMsSUFBSSxDQUFDLG9CQUFvQixHQUFHLEdBQUcsQ0FBQzs0QkFDaEMsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDOzRCQUFBLENBQUM7eUJBQzdEO29CQUNILENBQUMsRUFDRixDQUFBO2lCQUNGO2FBQ0Y7UUFDSCxDQUFDLEVBQUMsQ0FBQTtRQUNGLElBQUksSUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ3ZELHNFQUFzRTtTQUN2RTtRQUVELElBQUksQ0FBQyxxQkFBcUIsR0FBRyxhQUFhLENBQUM7SUFDN0MsQ0FBQzs7OztJQUlELFdBQVc7UUFDVCxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQztRQUM1Qiw4QkFBOEI7UUFDOUIsNkNBQTZDO1FBQzdDLHNEQUFzRDtRQUN0RCxRQUFRO0lBQ1YsQ0FBQzs7OztJQUVELGFBQWE7UUFDWCxJQUFJLElBQUksQ0FBQyxpQkFBaUIsRUFBRTtZQUMxQixPQUFPLGlDQUFpQyxDQUFDO1NBQzFDO2FBQU07WUFDTCxPQUFPLHdCQUF3QixDQUFDO1NBQ2pDO0lBQ0gsQ0FBQzs7Ozs7SUFFRCxvQkFBb0IsQ0FBQyxJQUFZOztZQUMzQixRQUFRLEdBQWEsRUFBRTtRQUMzQixJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU87Ozs7UUFBQyxPQUFPLENBQUMsRUFBRTtZQUNsRCxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztnQkFDNUIsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMzQixDQUFDLEVBQUMsQ0FBQTtRQUVGLE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7Ozs7O0lBR0QsV0FBVyxDQUFDLElBQUk7UUFDZCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2pDLENBQUM7Ozs7O0lBRUQsWUFBWSxDQUFDLE1BQU07UUFDakIsSUFBSSxJQUFJLENBQUMsc0JBQXNCLEVBQUU7WUFDL0IsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLENBQUM7WUFDbkQsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQztZQUM5QixPQUFPO1NBQ1I7UUFFRCxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQztRQUM1QixJQUFJLENBQUMsYUFBYSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFckQsSUFBSSxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsRUFBRTtZQUN0QixJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFOztvQkFDcEUsV0FBVyxHQUFXLENBQUMsbUJBQUEsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFVLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU07Z0JBQ3pGLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLGVBQWUsQ0FBQyxHQUFHLFdBQVcsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3pMLE9BQU87YUFDUjtTQUNGO1FBRUQsZ0JBQWdCO1FBQ2hCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7O2dCQUNwRCxZQUFZLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBQzlDLFlBQVksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDOzs7Z0JBRWhDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFO1lBRXRCLElBQUksWUFBWSxDQUFDLElBQUksSUFBSSxDQUFDLEVBQUU7Z0JBQzFCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDMUMsU0FBUzthQUNWO1lBRUQsSUFBSSxJQUFJLENBQUMsY0FBYyxHQUFHLENBQUMsSUFBSSxZQUFZLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsY0FBYyxFQUFFO2dCQUM3RSxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDbEQsU0FBUzthQUNWO1lBRUQsSUFBSSxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsRUFBRTtnQkFDcEQsSUFBSSxZQUFZLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxFQUFFO29CQUMvQyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQzVDLFNBQVM7aUJBQ1Y7YUFDRjs7a0JBRUssZUFBZSxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDOztnQkFDaEUscUJBQXFCLEdBQUcsZUFBZSxDQUFDLE1BQU07Ozs7WUFBQyxDQUFDLENBQUMsRUFBRSxFQUFFO2dCQUN2RCxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDdkIsQ0FBQyxFQUFDOztnQkFDRSxZQUFZLEdBQUcsRUFBRTtZQUNyQixJQUFJLHFCQUFxQixDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7Z0JBQ3BDLHFCQUFxQixDQUFDLE9BQU87Ozs7O2dCQUFDLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxFQUFFO29CQUMvQyxZQUFZLElBQUksSUFBSSxDQUFDO29CQUNyQixZQUFZLElBQUksT0FBTyxDQUFDO29CQUN4QixZQUFZLElBQUksSUFBSSxDQUFDO29CQUNyQixZQUFZLElBQUksQ0FBQyxLQUFLLEtBQUsscUJBQXFCLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztnQkFDMUUsQ0FBQyxFQUFDLENBQUE7Z0JBQ0YsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO29CQUN6QyxZQUFZLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQztvQkFDckMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsbUJBQW1CLENBQUMsR0FBRyxZQUFZLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQztvQkFDbkksT0FBTztpQkFDUjtnQkFDRCxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7b0JBQ3ZDLFlBQVksQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDO29CQUNyQyxJQUFJLENBQUMseUJBQXlCLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDdkQsU0FBUztpQkFDVjthQUVGO1lBRUQsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLEVBQUU7Z0JBQ25DLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtvQkFDekMsWUFBWSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUM7b0JBQ3JDLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsc0JBQXNCLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDO29CQUMzSSxPQUFPO2lCQUNSO2dCQUNELElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtvQkFDdkMsWUFBWSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUM7b0JBQ3JDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUN0RCxTQUFTO2lCQUNWO2FBQ0Y7OztnQkFHRyxhQUFhLEdBQUcsWUFBWSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFOztrQkFDNUYsUUFBUSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7O2tCQUM3RCxXQUFXLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDO1lBQ25ELElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxJQUFJLFdBQVcsQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLEVBQUU7Z0JBQzVELElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtvQkFDekMsWUFBWSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUM7b0JBQ3JDLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsaUJBQWlCLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxlQUFlLENBQUMsR0FBRyxRQUFRLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQztvQkFDOUwsT0FBTztpQkFDUjtnQkFDRCxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7b0JBQ3ZDLFlBQVksQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDO29CQUNyQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDckQsU0FBUztpQkFDVjthQUNGO1lBQ0QsSUFBSSxJQUFJLENBQUMsV0FBVyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsRUFBRTtnQkFDNUQsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO29CQUN6QyxZQUFZLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQztvQkFDckMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLGVBQWUsQ0FBQyxHQUFHLFFBQVEsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDO29CQUM5TCxPQUFPO2lCQUNSO2dCQUNELElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtvQkFDdkMsWUFBWSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUM7b0JBQ3JDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUNyRCxTQUFTO2lCQUNWO2FBQ0Y7WUFFRCxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRTtnQkFDekIsSUFBSSxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSTs7OztnQkFBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLElBQUksWUFBWSxDQUFDLElBQUksRUFBQyxJQUFJLElBQUksRUFBRTs7MEJBRTFFLEdBQUcsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLEdBQUcsWUFBWSxDQUFDLElBQUksRUFBRTt3QkFDekcsWUFBWSxFQUFFOzRCQUNaLE9BQU8sRUFBRTtnQ0FDUDtvQ0FDRSxJQUFJLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDO29DQUN6QyxHQUFHLEVBQUUsbUJBQW1CO29DQUN4QixNQUFNOzs7b0NBQUUsR0FBRyxFQUFFOzs0Q0FDUCxPQUFPLEdBQVcsWUFBWSxDQUFDLElBQUk7OzRDQUNuQyxPQUFPOzs0Q0FDUCxJQUFJLEdBQUcsSUFBSTs7NENBQ1gsQ0FBQyxHQUFHLENBQUM7d0NBQ1QsT0FBTyxJQUFJLEVBQUU7NENBQ1gsT0FBTyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQzs0Q0FDdkgsSUFBSSxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSTs7Ozs0Q0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLElBQUksT0FBTyxFQUFDLElBQUksSUFBSSxFQUFFO2dEQUN0RSxDQUFDLEVBQUUsQ0FBQzs2Q0FDTDs7Z0RBRUMsSUFBSSxHQUFHLEtBQUssQ0FBQzt5Q0FDaEI7d0NBRUQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsWUFBWSxFQUFFLE9BQU8sQ0FBQyxDQUFDO3dDQUM3QyxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUM7b0NBQ2QsQ0FBQyxDQUFBO2lDQUNGO2dDQUNEO29DQUNFLElBQUksRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUM7b0NBQzFDLEdBQUcsRUFBRSxtQkFBbUI7b0NBQ3hCLE1BQU07OztvQ0FBRSxHQUFHLEVBQUU7d0NBQ1gsSUFBSSxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJOzs7O3dDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsSUFBSSxZQUFZLENBQUMsSUFBSSxFQUFDLENBQUMsVUFBVSxDQUFDO3dDQUN2RixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxZQUFZLEVBQUUsWUFBWSxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7d0NBQ3pFLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO3dDQUN6QixJQUFJLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJOzs7O3dDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsSUFBSSxZQUFZLENBQUMsSUFBSSxFQUFDLEVBQUU7NENBQ3ZFLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDOzRDQUN6QixJQUFJLENBQUMsb0JBQW9CLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLE1BQU07Ozs7NENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxJQUFJLFlBQVksQ0FBQyxJQUFJLEVBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO3lDQUNuSjt3Q0FDRCxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUM7b0NBQ2QsQ0FBQyxDQUFBO2lDQUNGO2dDQUNEO29DQUNFLElBQUksRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUM7b0NBQ3pDLEdBQUcsRUFBRSxtQkFBbUI7b0NBQ3hCLE1BQU07OztvQ0FBRSxHQUFHLEVBQUU7d0NBQ1gsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDO29DQUNkLENBQUMsQ0FBQTtpQ0FDRjs2QkFDRjt5QkFDRjtxQkFDRixDQUFDO29CQUNGLFNBQVM7aUJBQ1Y7YUFDRjtZQUNELElBQUksWUFBWSxDQUFDLGVBQWUsS0FBSyxJQUFJLEVBQUU7Z0JBQ3pDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLFlBQVksRUFBRSxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDeEQ7U0FDRjtRQUVELElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFOztnQkFDM0IsSUFBSSxHQUFXLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQztZQUN0RCxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQztZQUN0SCxJQUFJLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztTQUN2QjtRQUVELElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFOztnQkFDNUIsSUFBSSxHQUFXLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQztZQUN2RCxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQztZQUNsSCxJQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQztTQUN4QjtRQUVELElBQUksSUFBSSxDQUFDLG9CQUFvQixDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7O2dCQUNwQyxJQUFJLEdBQVcsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUM7WUFDL0QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLGtCQUFrQixDQUFDLEdBQUcsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDO1lBQ2hKLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxFQUFFLENBQUM7U0FDaEM7UUFFRCxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTs7Z0JBQzlCLElBQUksR0FBVyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUM7WUFDekQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUM7WUFDM0ksSUFBSSxDQUFDLGNBQWMsR0FBRyxFQUFFLENBQUM7U0FDMUI7UUFFRCxJQUFJLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFOztnQkFDekMsSUFBSSxHQUFXLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLHlCQUF5QixDQUFDO1lBQ3BFLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUM7WUFDM0gsSUFBSSxDQUFDLHlCQUF5QixHQUFHLEVBQUUsQ0FBQztTQUNyQztRQUVELElBQUksSUFBSSxDQUFDLHVCQUF1QixDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7O2dCQUN2QyxJQUFJLEdBQVcsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsdUJBQXVCLENBQUM7WUFDbEUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLGlCQUFpQixDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQztZQUN6SCxJQUFJLENBQUMsdUJBQXVCLEdBQUcsRUFBRSxDQUFDO1NBQ25DO1FBRUQsSUFBSSxJQUFJLENBQUMsd0JBQXdCLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTs7Z0JBQ3hDLElBQUksR0FBVyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQztZQUNuRSxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsc0JBQXNCLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDO1lBQzlILElBQUksQ0FBQyx3QkFBd0IsR0FBRyxFQUFFLENBQUM7U0FDcEM7UUFFRCxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDaEMsSUFBSSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUM7UUFDN0IsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO1FBQ3pCLG1CQUFtQjtJQUNyQixDQUFDOzs7OztJQUVELGdCQUFnQixDQUFDLElBQUk7UUFDbkIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUFDLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ3hGLENBQUM7Ozs7Ozs7SUFFRCxjQUFjLENBQUMsSUFBWSxFQUFFLFlBQVksRUFBRSxRQUFnQjs7WUFFckQsUUFBa0I7UUFFdEIsUUFBUSxHQUFHO1lBQ1QsRUFBRSxFQUFFLElBQUk7WUFDUixJQUFJLEVBQUUsUUFBUTtZQUNkLElBQUksRUFBRSxZQUFZLENBQUMsSUFBSTtZQUN2QixNQUFNLEVBQUUsRUFBRTtZQUNWLElBQUksRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUM7WUFDekMsUUFBUSxFQUFFLFlBQVksQ0FBQyxJQUFJO1lBQzNCLGtCQUFrQixFQUFFLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxRQUFRLENBQUM7WUFDeEQsb0JBQW9CLEVBQUUsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFFBQVEsQ0FBQzs7WUFFeEQsV0FBVyxFQUFFLEtBQUs7WUFDbEIsT0FBTyxFQUFFLEtBQUs7WUFDZCxPQUFPLEVBQUUsS0FBSztZQUNkLFdBQVcsRUFBRSxJQUFJO1lBQ2pCLFlBQVksRUFBRSxLQUFLO1lBQ25CLGFBQWEsRUFBRSxDQUFDO1lBQ2hCLFlBQVksRUFBRSxFQUFFO1lBQ2hCLG1CQUFtQixFQUFFLENBQUM7WUFDdEIsYUFBYSxFQUFFLEVBQUU7WUFDakIsa0JBQWtCLEVBQUUsQ0FBQztZQUNyQixZQUFZLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQztZQUN0QyxLQUFLLEVBQUUsRUFBRTtTQUNWLENBQUE7UUFFRCxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsSUFBSSxJQUFJO1lBQy9CLFFBQVEsQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDOztZQUdoRCxJQUFJLEdBQVcsWUFBWSxDQUFDLElBQUk7UUFDcEMsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ3pCLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxFQUFFLFFBQVEsRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDeEQ7YUFDSSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQUU7WUFDL0IsSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLEVBQUUsUUFBUSxFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUN4RDthQUNJLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUM5QixJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksRUFBRSxRQUFRLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ3ZEO2FBQ0ksSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQzdCLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxFQUFFLFFBQVEsRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDdEQ7YUFDSSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQUU7WUFDL0IsSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLEVBQUUsUUFBUSxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUN0RDthQUNJLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ3pELElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxFQUFFLFFBQVEsRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUE7U0FDdkQ7YUFDSSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsRUFBRTtZQUNyRSxJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksRUFBRSxRQUFRLEVBQUUsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1NBQzdEO2FBQ0ksSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLFlBQVksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ25FLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxFQUFFLFFBQVEsRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDdEQ7YUFDSTtZQUNILElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxFQUFFLFFBQVEsRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDdkQsd0NBQXdDO1lBQ3hDLG9FQUFvRTtZQUNwRSxrQ0FBa0M7U0FDbkM7UUFDRCxPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDOzs7Ozs7OztJQUVELFVBQVUsQ0FBQyxJQUFZLEVBQUUsWUFBWSxFQUFFLFFBQWdCLEVBQUUsUUFBbUIsU0FBUyxDQUFDLEdBQUc7O1lBRW5GLFFBQVEsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxZQUFZLEVBQUUsUUFBUSxDQUFDOztZQUU1RCxjQUFjLEdBQUcsSUFBSSxjQUFjLEVBQUU7UUFFekMsY0FBYyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7UUFDakMsY0FBYyxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDO1FBQ3hDLGNBQWMsQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQztRQUN4QyxjQUFjLENBQUMsWUFBWSxHQUFHLFFBQVEsQ0FBQyxRQUFRLENBQUM7UUFDaEQsY0FBYyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDN0IsY0FBYyxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFHdkQsWUFBWTtRQUNaLElBQUksSUFBSSxDQUFDLGtCQUFrQixFQUFFOzs7Z0JBR3ZCLFdBQVcsR0FBMkIsSUFBSSxzQkFBc0I7WUFFcEUsV0FBVyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1lBQy9CLFdBQVcsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO1lBQzlCLFdBQVcsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztZQUNqQyxXQUFXLENBQUMsSUFBSSxHQUFHLFFBQVEsQ0FBQyxRQUFRLENBQUM7WUFDckMsV0FBVyxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7WUFFaEMsT0FBTztZQUNQLElBQUksQ0FBQyxlQUFlLENBQUMsV0FBVyxDQUFDLENBQUMsU0FBUzs7OztZQUFDLEdBQUcsQ0FBQyxFQUFFO2dCQUNoRCxJQUFJLEdBQUcsQ0FBQyxLQUFLLElBQUksSUFBSSxFQUFFO29CQUNyQixJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztvQkFDOUQsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7b0JBQzdELElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxZQUFZLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUM7aUJBQzNFO3FCQUFNOzt3QkFDRCxRQUFRLEdBQUcsR0FBRyxDQUFDLFFBQVE7O3dCQUN2QixVQUFVLEdBQVcsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7O3dCQUNuRSxVQUFVLEdBQVcsQ0FBQzs7d0JBRXRCLGVBQWUsR0FBd0IsRUFBRTtvQkFFN0MsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsR0FBRyxVQUFVLENBQUM7b0JBQ3ZDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO29CQUU3QixPQUFPLFVBQVUsR0FBRyxVQUFVLEVBQUU7OzRCQUUxQixRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxFQUFFLFlBQVksQ0FBQyxJQUFJLENBQUM7OzRCQUMxRSxRQUFRLEdBQUcsWUFBWSxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUM7OzRCQUVyRSxZQUFZLEdBQUcsSUFBSSxrQkFBa0I7d0JBQ3pDLFlBQVksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO3dCQUMvQixZQUFZLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7d0JBQ2xDLFlBQVksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO3dCQUNqQyxZQUFZLENBQUMsS0FBSyxHQUFHLFVBQVUsQ0FBQzt3QkFDaEMsWUFBWSxDQUFDLEtBQUssR0FBRyxVQUFVLENBQUM7d0JBQ2hDLFlBQVksQ0FBQyxJQUFJLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQzs7NEJBRTlCLFFBQVEsR0FBRyxJQUFJLFFBQVEsRUFBRTt3QkFDN0IsUUFBUSxDQUFDLE1BQU0sQ0FBQyxjQUFjLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO3dCQUM5RCxRQUFRLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQzt3QkFFbEMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxTQUFTOzs7O3dCQUFDLEdBQUcsQ0FBQyxFQUFFOzRCQUN6QyxJQUFJLEdBQUcsQ0FBQyxLQUFLLElBQUksSUFBSSxFQUFFO2dDQUNyQixJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztnQ0FDOUQsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7Z0NBQzdELElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxZQUFZLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUM7NkJBQzNFO2lDQUFNO2dDQUNMLGVBQWUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dDQUNqQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7Z0NBQzNCLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxhQUFhLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQ0FDbEosSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEVBQUU7b0NBQ3pELElBQUksZUFBZSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxFQUFFOzs0Q0FFbkQsMEJBQTBCLEdBQStCLElBQUksMEJBQTBCO3dDQUMzRiwwQkFBMEIsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO3dDQUM3QywwQkFBMEIsQ0FBQyxRQUFRLEdBQUcsZUFBZSxDQUFDO3dDQUN0RCwwQkFBMEIsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQzt3Q0FDaEQsMEJBQTBCLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQzt3Q0FDL0MsMEJBQTBCLENBQUMsSUFBSSxHQUFHLFFBQVEsQ0FBQyxRQUFRLENBQUM7d0NBQ3BELElBQUksSUFBSSxDQUFDLHFCQUFxQjs0Q0FDNUIsMEJBQTBCLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQzt3Q0FDdkUsSUFBSSxDQUFDLG1CQUFtQixDQUFDLDBCQUEwQixDQUFDLENBQUMsU0FBUzs7Ozt3Q0FBQyxHQUFHLENBQUMsRUFBRTs0Q0FDbkUsSUFBSSxHQUFHLENBQUMsTUFBTSxJQUFJLEdBQUcsRUFBRTtnREFDckIsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7Z0RBQzlELElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO2dEQUM3RCxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsWUFBWSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDOzZDQUMzRTtpREFBTTtnREFDTCxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztnREFDN0QsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7Z0RBQzdELElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO2dEQUN6RSxJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztnREFDN0UsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7NkNBRzFCO3dDQUNILENBQUMsRUFBQyxDQUFBO3dDQUNGLFVBQVU7cUNBQ1g7eUNBQU07d0NBQ0wsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7d0NBQzlELElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO3dDQUM3RCxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLG1CQUFtQixDQUFDLENBQUM7cUNBQ3hHO2lDQUVGOzZCQUNGO3dCQUNILENBQUMsRUFBQyxDQUFBO3dCQUVGLFVBQVUsR0FBRyxVQUFVLEdBQUcsQ0FBQyxDQUFDO3FCQUM3QjtpQkFDRjtZQUlILENBQUMsRUFBQyxDQUFBO1NBRUg7YUFBTTs7Z0JBQ0QsTUFBTSxHQUFHLElBQUksbUJBQW1CO1lBQ3BDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztZQUM1QixNQUFNLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztZQUN6QixNQUFNLENBQUMsSUFBSSxHQUFHLGNBQWMsQ0FBQyxJQUFJLENBQUM7WUFDbEMsTUFBTSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1lBQzVCLE1BQU0sQ0FBQyxJQUFJLEdBQUcsWUFBWSxDQUFDLElBQUksQ0FBQztZQUNoQyxNQUFNLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztZQUMzQixJQUFJLElBQUksQ0FBQyxxQkFBcUI7Z0JBQzVCLE1BQU0sQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDOztnQkFFL0MsUUFBUSxHQUFHLElBQUksUUFBUSxFQUFFO1lBQzdCLFFBQVEsQ0FBQyxNQUFNLENBQUMsY0FBYyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztZQUN4RCxRQUFRLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxZQUFZLENBQUMsQ0FBQzs7Z0JBR2xDLFVBQVU7WUFFZCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLENBQUMsU0FBUzs7OztZQUFDLEdBQUcsQ0FBQyxFQUFFO2dCQUM5QyxJQUFJLEdBQUcsSUFBSSxJQUFJLEVBQUU7b0JBQ2YsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7b0JBQzlELElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO29CQUM3RCxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsWUFBWSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDO2lCQUMzRTtxQkFBTTtvQkFDTCxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztvQkFDN0QsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7b0JBQzdELElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO29CQUN6RSxJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztvQkFDN0UsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7aUJBRTFCO2dCQUNELGFBQWEsQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUM1QixDQUFDLEVBQUMsQ0FBQTs7Z0JBRUUsS0FBSyxHQUFHLENBQUMsQ0FBQztZQUNkLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTzs7OztZQUFDLENBQUMsQ0FBQyxFQUFFO2dCQUNyQixJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksUUFBUSxDQUFDLElBQUksRUFBRTtvQkFDM0IsSUFBSSxLQUFLLElBQUksQ0FBQyxDQUFDO3dCQUNiLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztpQkFDakM7WUFDSCxDQUFDLEVBQUMsQ0FBQTtZQUNGLElBQUksS0FBSyxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7Z0JBQ2pELElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDNUIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQ3pDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUMzQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQzthQUMxQjtZQUVELFVBQVUsR0FBRyxXQUFXOzs7WUFBQyxHQUFHLEVBQUU7Z0JBQzVCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsU0FBUzs7OztnQkFBQyxHQUFHLENBQUMsRUFBRTtvQkFDdkQsSUFBSSxHQUFHLENBQUMsS0FBSyxJQUFJLElBQUk7d0JBQ25CLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxhQUFhLEdBQUcsRUFBRSxDQUFDO3lCQUN6RDt3QkFDSCxJQUFJLEdBQUcsR0FBRyxFQUFFOzRCQUNWLEdBQUcsR0FBRyxFQUFFLENBQUM7d0JBQ1gsSUFBSSxHQUFHLEdBQUcsRUFBRTs0QkFDVixHQUFHLEdBQUcsRUFBRSxDQUFDO3dCQUNYLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxhQUFhLEdBQUcsR0FBRyxDQUFDO3FCQUM5RDtnQkFDSCxDQUFDLEVBQUMsQ0FBQTtZQUNKLENBQUMsR0FBRSxHQUFHLENBQUMsQ0FBQztTQUNUO0lBRUgsQ0FBQzs7Ozs7SUFFRCxnQkFBZ0IsQ0FBQyxVQUFrQjs7WUFFN0IsR0FBRyxHQUFHLDBEQUEwRCxHQUFHLFVBQVU7UUFFakYsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQ2xDLEdBQUc7Ozs7UUFBQyxHQUFHLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBQyxFQUNmLFVBQVU7Ozs7UUFBQyxDQUFDLEtBQXdCLEVBQUUsRUFBRTtZQUN0QyxPQUFPLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNuQixDQUFDLEVBQUMsQ0FBQyxDQUFDO0lBQ1IsQ0FBQzs7Ozs7SUFFRCxnQkFBZ0IsQ0FBQyxRQUFrQjs7WUFFN0IsR0FBRyxHQUFHLHNDQUFzQzs7Y0FDMUMsT0FBTyxHQUFHLGVBQWUsQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDO1FBQ2hELE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FDakQsR0FBRzs7OztRQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFDLEVBQ2YsVUFBVTs7OztRQUFDLENBQUMsS0FBd0IsRUFBRSxFQUFFO1lBQ3RDLE9BQU8sRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ25CLENBQUMsRUFBQyxDQUFDLENBQUM7SUFDUixDQUFDOzs7OztJQUVELGVBQWUsQ0FBQyxRQUFrQjs7WUFFNUIsR0FBRyxHQUFHLHFDQUFxQzs7Y0FDekMsT0FBTyxHQUFHLGVBQWUsQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDO1FBQ2hELE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FDakQsR0FBRzs7OztRQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFDLEVBQ2YsVUFBVTs7OztRQUFDLENBQUMsS0FBd0IsRUFBRSxFQUFFO1lBQ3RDLE9BQU8sRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ25CLENBQUMsRUFBQyxDQUFDLENBQUM7SUFDUixDQUFDOzs7OztJQUVELGVBQWUsQ0FBQyxPQUErQjs7WUFFekMsR0FBRyxHQUFHLDBDQUEwQzs7Y0FDOUMsT0FBTyxHQUFHLGVBQWUsQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDO1FBQ2hELE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FDaEQsR0FBRzs7OztRQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFDLEVBQ2YsVUFBVTs7OztRQUFDLENBQUMsS0FBd0IsRUFBRSxFQUFFO1lBQ3RDLE9BQU8sRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ25CLENBQUMsRUFBQyxDQUFDLENBQUM7SUFDUixDQUFDOzs7OztJQUVELFdBQVcsQ0FBQyxRQUFrQjs7WUFFeEIsR0FBRyxHQUFHLDRDQUE0Qzs7Y0FDaEQsT0FBTyxHQUFHLGVBQWUsQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDO1FBQ2hELE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FDakQsR0FBRzs7OztRQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFDLEVBQ2YsVUFBVTs7OztRQUFDLENBQUMsS0FBd0IsRUFBRSxFQUFFO1lBQ3RDLE9BQU8sRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ25CLENBQUMsRUFBQyxDQUFDLENBQUM7SUFDUixDQUFDOzs7OztJQUVELG1CQUFtQixDQUFDLE9BQW1DOztZQUVqRCxHQUFHLEdBQUcsOENBQThDOztjQUNsRCxPQUFPLEdBQUcsZUFBZSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUM7UUFDaEQsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUNoRCxHQUFHOzs7O1FBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUMsRUFDZixVQUFVOzs7O1FBQUMsQ0FBQyxLQUF3QixFQUFFLEVBQUU7WUFDdEMsT0FBTyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbkIsQ0FBQyxFQUFDLENBQUMsQ0FBQztJQUNSLENBQUM7Ozs7SUFJRCxhQUFhO1FBRVgsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUU7WUFDekIsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPOzs7O1lBQUMsT0FBTyxDQUFDLEVBQUU7Z0JBRTNCLE9BQU8sQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1lBQ3pCLENBQUMsRUFBQyxDQUFDO1lBQ0gsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7WUFDNUIsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO1NBRTVDO2FBQU07WUFDTCxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU87Ozs7WUFBQyxPQUFPLENBQUMsRUFBRTtnQkFFM0IsT0FBTyxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7WUFDMUIsQ0FBQyxFQUFDLENBQUM7WUFDSCxJQUFJLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQztZQUM3QixJQUFJLENBQUMsaUJBQWlCLEdBQUcsQ0FBQyxDQUFDO1NBQzVCO0lBQ0gsQ0FBQzs7Ozs7SUFHRCxrQkFBa0IsQ0FBQyxJQUFjO1FBQy9CLG9EQUFvRDtRQUNwRCxJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztRQUM3QixJQUFJLElBQUksQ0FBQyxPQUFPO1lBQ2QsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7O1lBRXpCLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQzNCLElBQUksSUFBSSxDQUFDLGlCQUFpQixJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFO1lBQy9DLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDO1lBQzVCLDJCQUEyQjtTQUM1QjthQUNJO1lBQ0gsSUFBSSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUM7WUFDN0IsMkJBQTJCO1NBQzVCO0lBRUgsQ0FBQzs7Ozs7SUFFRCxjQUFjLENBQUMsUUFBa0I7UUFDL0IsSUFBSSxRQUFRLENBQUMsT0FBTztZQUNsQixJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUMzQix3QkFBd0I7UUFDeEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDbkQsSUFBSSxRQUFRLENBQUMsWUFBWSxFQUFFOztnQkFDckIsTUFBTSxHQUFhLEVBQUU7WUFDekIsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDekIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUUzRCxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU07Ozs7WUFBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLElBQUksUUFBUSxDQUFDLElBQUksRUFBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDeEksSUFBSSxDQUFDLG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNOzs7O1lBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxJQUFJLFFBQVEsQ0FBQyxJQUFJLEVBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQzlJLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1NBQzFCO1FBQ0QsSUFBSSxJQUFJLENBQUMsaUJBQWlCLElBQUksQ0FBQztZQUM3QixJQUFJLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQztJQUNqQyxDQUFDOzs7O0lBRUQsc0JBQXNCOztZQUNoQixZQUFZLEdBQWUsRUFBRTtRQUNqQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU87Ozs7UUFBQyxPQUFPLENBQUMsRUFBRTs7Z0JBQ3ZCLEdBQUcsR0FBUSxRQUFRLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7WUFDcEQsSUFBSSxHQUFHLENBQUMsT0FBTztnQkFDYixZQUFZLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQy9CLENBQUMsRUFBQyxDQUFBOztZQUNFLFlBQVksR0FBYSxFQUFFO1FBQy9CLFlBQVksQ0FBQyxPQUFPOzs7O1FBQUMsT0FBTyxDQUFDLEVBQUU7WUFDN0IsWUFBWSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDOUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDbEQsSUFBSSxPQUFPLENBQUMsWUFBWSxFQUFFO2dCQUV4QixJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU07Ozs7Z0JBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxJQUFJLE9BQU8sQ0FBQyxJQUFJLEVBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUN2SSxJQUFJLENBQUMsb0JBQW9CLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLE1BQU07Ozs7Z0JBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxJQUFJLE9BQU8sQ0FBQyxJQUFJLEVBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUM3SSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQzthQUMxQjtRQUNILENBQUMsRUFBQyxDQUFBO1FBQ0YsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQzs7WUFFN0QsTUFBTSxHQUFRLFFBQVEsQ0FBQyxjQUFjLENBQUMsYUFBYSxDQUFDO1FBQ3hELElBQUksTUFBTSxJQUFJLElBQUk7WUFDaEIsTUFBTSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7UUFDekIsSUFBSSxDQUFDLGlCQUFpQixHQUFHLENBQUMsQ0FBQztRQUMzQixJQUFJLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQztJQUMvQixDQUFDOzs7OztJQUdELHFCQUFxQixDQUFDLFFBQWdCO1FBQ3BDLElBQUksUUFBUSxDQUFDLE1BQU0sSUFBSSxFQUFFO1lBQ3ZCLE9BQU8sUUFBUSxDQUFDO2FBQ2I7O2dCQUNDLFdBQVcsR0FBRyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7O2dCQUN0QyxXQUFXLEdBQUcsUUFBUSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNuRSxPQUFPLFdBQVcsR0FBRyxHQUFHLEdBQUcsV0FBVyxDQUFDO1NBQ3hDO0lBQ0gsQ0FBQzs7Ozs7SUFFRCxtQkFBbUIsQ0FBQyxRQUFnQjtRQUNsQyxPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDOzs7Ozs7O0lBRUQsVUFBVSxDQUFDLFdBQVcsRUFBRSxRQUFrQixFQUFFLE9BQWdCO1FBRTFELFFBQVEsT0FBTyxFQUFFO1lBQ2YsS0FBSyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ2pCLFFBQVEsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyx1Q0FBdUMsQ0FBQyxDQUFDO2dCQUM5RSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDMUIsTUFBTTthQUNQO1lBRUQsS0FBSyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ2hCLFFBQVEsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxzQ0FBc0MsQ0FBQyxDQUFDO2dCQUM3RSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDMUIsTUFBTTthQUNQO1lBRUQsS0FBSyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ2xCLFFBQVEsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyx3Q0FBd0MsQ0FBQyxDQUFDO2dCQUMvRSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDMUIsTUFBTTthQUNQO1lBRUQsS0FBSyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ2hCLFFBQVEsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxzQ0FBc0MsQ0FBQyxDQUFDO2dCQUM3RSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDMUIsTUFBTTthQUNQO1lBRUQsS0FBSyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ2hCLFFBQVEsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxzQ0FBc0MsQ0FBQyxDQUFDO2dCQUM3RSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDMUIsTUFBTTthQUNQO1lBRUQsS0FBSyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUM7Z0JBQ3ZCLFFBQVEsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxzQ0FBc0MsQ0FBQyxDQUFDO2dCQUM3RSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDMUIsTUFBTTthQUNQO1lBRUQsS0FBSyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ2xCLFFBQVEsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyx1Q0FBdUMsQ0FBQyxDQUFDO2dCQUM5RSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDMUIsTUFBTTthQUNQO1lBRUQsS0FBSyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7O29CQUNkLE1BQU0sR0FBRyxJQUFJLFVBQVUsRUFBRTtnQkFDN0IsTUFBTSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsQ0FBQztnQkFDbEMsTUFBTSxDQUFDLE1BQU07Ozs7Z0JBQUcsQ0FBQyxNQUFNLEVBQUUsRUFBRTs7d0JBQ3JCLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTTtvQkFDMUIsSUFBSSxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksRUFBRTs7NEJBQ3JCLFNBQVMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUM7d0JBQy9DLE1BQU0sR0FBRyxTQUFTLENBQUMsOEJBQThCLENBQUMsTUFBTSxDQUFDLENBQUM7cUJBQzNEO29CQUNELFFBQVEsQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO29CQUN6QixRQUFRLENBQUMsS0FBSyxHQUFHLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsT0FBTyxFQUFFLENBQUE7b0JBQ2hFLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDOzs7d0JBR3RCLEtBQUssR0FBRyxDQUFDLENBQUM7b0JBQ2QsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPOzs7O29CQUFDLENBQUMsQ0FBQyxFQUFFO3dCQUNyQixJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksUUFBUSxDQUFDLElBQUksRUFBRTs0QkFDM0IsSUFBSSxLQUFLLElBQUksQ0FBQyxDQUFDO2dDQUNiLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQzt5QkFDakM7b0JBQ0gsQ0FBQyxFQUFDLENBQUE7b0JBQ0YsSUFBSSxLQUFLLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTt3QkFDakQsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO3dCQUM1QixJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQzt3QkFDekMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7cUJBQzVDO2dCQUNILENBQUMsQ0FBQSxDQUFBO2FBQ0Y7U0FFRjtJQUVILENBQUM7Ozs7O0lBRUQsWUFBWSxDQUFDLE9BQWlCOztjQUN0QixNQUFNLEdBQUcsT0FBTyxDQUFDLE1BQU07Ozs7UUFBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUM7O1lBQ3JELElBQUksR0FBVyxFQUFFO1FBQ3JCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ3RDLElBQUksSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDMUQ7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7Ozs7OztJQUVELGNBQWMsQ0FBQyxNQUFXLEVBQUUsSUFBYztRQUN4QyxJQUFJLENBQUMsWUFBWSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUM7O1lBQzVCLFVBQVUsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTTs7OztRQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxDQUFDO1FBQy9FLFVBQVUsQ0FBQyxZQUFZLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQztJQUN4QyxDQUFDOzs7Ozs7SUFLRCxVQUFVLENBQUMsTUFBVyxFQUFFLElBQWM7UUFDcEMsSUFBSSxDQUFDLGFBQWEsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQzs7WUFDbEMsaUJBQWlCLEdBQXNCLElBQUksaUJBQWlCO1FBQ2hFLElBQUksSUFBSSxDQUFDLGFBQWEsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsbUJBQW1CLEVBQUU7WUFDbkUsSUFBSSxJQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTTs7OztZQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsRUFBRSxFQUFDLENBQUMsTUFBTSxHQUFHLENBQUM7Z0JBQ3hFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFNBQVM7Ozs7Z0JBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxFQUFFLEVBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQTtTQUNuRzthQUFNO1lBQ0wsSUFBSSxJQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTTs7OztZQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsRUFBRSxFQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtnQkFDMUUsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU07Ozs7Z0JBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDbkYsaUJBQWlCLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUM7YUFDdkQ7aUJBQU07Z0JBQ0wsaUJBQWlCLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7Z0JBQ3ZDLGlCQUFpQixDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDO2dCQUN0RCxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7YUFDaEQ7U0FDRjtJQUNILENBQUM7Ozs7SUFFRCxNQUFNO1FBQ0osSUFBSSxJQUFJLENBQUMsaUJBQWlCLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNOzs7O1FBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsV0FBVyxJQUFJLENBQUMsQ0FBQyxZQUFZLEVBQUMsQ0FBQyxNQUFNLEVBQUU7WUFFNUYsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztZQUMzRCxPQUFPLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUNsQjtRQUNELElBQUksSUFBSSxDQUFDLGdCQUFnQixFQUFFO1lBQ3pCLElBQUksQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztTQUN2RjtRQUNELElBQUksSUFBSSxDQUFDLGdCQUFnQixJQUFJLElBQUk7WUFDL0IsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUM7YUFDaEM7WUFDSCxJQUFJLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLElBQUksQ0FBQztnQkFDcEMsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUM7aUJBQ2hDOztzQkFDRyxPQUFPLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUM7b0JBQ3BDLE9BQU8sRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsYUFBYTtpQkFDbkYsQ0FBQztnQkFDRixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQ3ZGLEdBQUc7Ozs7Z0JBQUMsR0FBRyxDQUFDLEVBQUU7b0JBQ1IsbUJBQW1CO29CQUNuQixpS0FBaUs7b0JBQ2pLLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQztvQkFDaEIsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUM7Z0JBQ2pDLENBQUMsRUFBQyxDQUFDLENBQUE7YUFDTjtTQUNGO0lBQ0gsQ0FBQzs7OztJQUVELE1BQU07UUFDSixJQUFJLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLElBQUksQ0FBQztZQUNyQyxPQUFPO1FBQ1QsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE9BQU87Ozs7UUFBQyxPQUFPLENBQUMsRUFBRTtZQUN4QyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDL0MsQ0FBQyxFQUFDLENBQUE7UUFDRixJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUUxRSxDQUFDOzs7O0lBRUQscUJBQXFCO1FBQ25CLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDO0lBQ2pDLENBQUM7Ozs7O0lBRUQsTUFBTSxDQUFDLElBQUk7UUFDVCxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUMvQyxJQUFJLElBQUksQ0FBQyxZQUFZO1lBQ25CLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQzNCLElBQUksSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU07Ozs7UUFBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLEVBQUUsRUFBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDMUUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsU0FBUzs7OztZQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsRUFBRSxFQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7U0FDbEc7SUFFSCxDQUFDOzs7OztJQUVELFdBQVcsQ0FBQyxJQUFZO1FBQ3RCLElBQUksSUFBSSxHQUFHLE1BQU07WUFDZixPQUFPLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7YUFDbkMsSUFBSSxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUk7WUFDekIsT0FBTyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO2FBQ25DLElBQUksSUFBSSxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsSUFBSTtZQUMvQixPQUFPLENBQUMsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO2FBQzFDLElBQUksSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSTtZQUNoQyxPQUFPLENBQUMsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDOztZQUU3QyxPQUFPLENBQUMsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztJQUN4RCxDQUFDOzs7O0lBQ0QsV0FBVztRQUNULElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDO1FBQ2xCLDhCQUE4QjtJQUNoQyxDQUFDOzs7O0lBRUQsVUFBVTtRQUNSLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDO1FBQ2xCLDhCQUE4QjtRQUM5QixJQUFJLElBQUksQ0FBQyxpQkFBaUIsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLGlCQUFpQixJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFO1lBQzlFLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDO1NBQzdCO0lBQ0gsQ0FBQzs7Ozs7SUFFRCxTQUFTLENBQUMsSUFBSTtRQUNaLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO0lBQ3RCLENBQUM7Ozs7O0lBQ0QsUUFBUSxDQUFDLElBQUk7UUFDWCxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztJQUN2QixDQUFDOzs7OztJQUVELGFBQWEsQ0FBQyxNQUFjOztjQUNwQixPQUFPLEdBQUcsZUFBZSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUM7UUFDbkQsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQzs7O1lBbmdDRixTQUFTLFNBQUM7Z0JBQ1QsUUFBUSxFQUFFLGlCQUFpQjtnQkFDM0Isc3ZnQkFBMkM7O2FBRTVDOzs7O1lBMUJRLGVBQWU7WUFGZixhQUFhO1lBVWIsY0FBYztZQWZvQyxRQUFROzs7cUJBbUhoRSxLQUFLO3FCQUNMLEtBQUs7dUJBQ0wsS0FBSzt3QkFDTCxLQUFLO3dCQUNMLEtBQUs7MkJBQ0wsS0FBSzs2QkFDTCxLQUFLO3FCQUVMLFNBQVMsU0FBQyxRQUFROzs7O0lBdkZuQixvQ0FBdUI7O0lBQ3ZCLDZDQUE4Qjs7SUFDOUIsaURBQTBDOztJQUMxQywwQ0FBMkI7O0lBQzNCLDBDQUEyQjs7SUFDM0IsMkNBQTRCOztJQUM1Qiw2Q0FBOEI7O0lBQzlCLG1EQUFvQzs7SUFDcEMsd0RBQXlDOztJQUN6QyxzREFBdUM7O0lBQ3ZDLHVEQUF3Qzs7SUFDeEMsZ0RBQStCOztJQUMvQiw4Q0FBNkI7O0lBQzdCLHVDQUFxQjs7SUFDckIsc0NBQXlCOztJQUN6QiwwQ0FBNkI7O0lBQzdCLHlDQUE2Qjs7SUFDN0IsNENBQW1COztJQUNuQixvREFBc0I7O0lBQ3RCLGdEQUE4Qjs7SUFDOUIsZ0RBQW1DOztJQUVuQyxnREFBa0Y7O0lBQ2xGLHNEQUE0Rjs7SUFFNUYsOENBQWlDOztJQUVqQyw4Q0FBaUM7O0lBRWpDLDRDQUFnQzs7SUFFaEMsNkNBQStDOztJQUUvQywyQ0FBaUQ7O0lBRWpELCtDQUF5RDs7SUFFekQsNENBQThDOztJQUM5Qyw4Q0FBZ0Q7O0lBR2hELCtDQUFtQzs7SUFFbkMsa0RBQWlDOztJQUNqQyw4Q0FBdUM7O0lBRXZDLCtDQUF3Qzs7SUFFeEMsNkNBQW9DOztJQUVwQyw0Q0FBMkI7O0lBRTNCLGdEQUE4Qjs7SUFFOUIsaURBQTRCOztJQUU1QixvREFBdUM7O0lBRXZDLCtDQUFrQzs7SUFFbEMsbURBQTBCOztJQUMxQixrREFBeUI7O0lBRXpCLHFEQUFvQzs7SUFFcEMsOENBQXVCOztJQUN2QiwwQ0FBd0I7O0lBQ3hCLHVDQUFpQjs7SUFDakIseUNBQTBCOztJQUMxQix5Q0FBdUI7O0lBQ3ZCLDBDQUE0Qjs7SUFTNUIscUNBQXdCOztJQUN4QixxQ0FBd0I7O0lBQ3hCLHVDQUFnQzs7SUFDaEMsd0NBQStCOztJQUMvQix3Q0FBa0M7O0lBQ2xDLDJDQUFxRDs7SUFDckQsNkNBQW9DOztJQUVwQyxxQ0FBOEM7O0lBbUU5Qyx3Q0FBc0I7O0lBc3ZCdEIsZ0RBQTRDOzs7OztJQXgwQmhDLHlDQUFtQzs7Ozs7SUFBRSw0Q0FBb0M7Ozs7O0lBQUUsMENBQW1DOzs7OztJQUFFLHVDQUEyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBJbnB1dCwgVmlld0NoaWxkLCBUZW1wbGF0ZVJlZiwgSW5qZWN0b3IsIExPQ0FMRV9JRCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGaWxlSW5mbyB9IGZyb20gJy4uL2VudGl0eS9maWxlaW5mbyc7XHJcbmltcG9ydCB7IERvY1R5cGUgfSBmcm9tICcuLi9lbnRpdHkvZG9jdHlwZSc7XHJcbmltcG9ydCB7IEdzcEZvcm1Eb2NJbmZvIH0gZnJvbSAnLi4vZW50aXR5L2dzcGZvcm1kb2NpbmZvJztcclxuaW1wb3J0IHsgT3BlcmF0aW5nTW9kZXMgfSBmcm9tICcuLi9lbnRpdHkvb3BlcmF0aW5nbW9kZXMnO1xyXG5pbXBvcnQgeyBVcGxvYWRTZXJ2aWNlIH0gZnJvbSAnLi4vdXBsb2FkLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBVcGxvYWRGaWxlSW5mbyB9IGZyb20gJy4uL2VudGl0eS91cGxvYWRmaWxlaW5mbyc7XHJcbmltcG9ydCB7IE1lc3NhZ2VyU2VydmljZSB9IGZyb20gJ0BmYXJyaXMvdWktbWVzc2FnZXInO1xyXG5pbXBvcnQgeyBjYXRjaEVycm9yLCBtYXAsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgb2YgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgR3NwRm9ybVVwbG9hZEVudGl0eSB9IGZyb20gJy4uL2VudGl0eS9nc3Bmb3JtdXBsb2FkZW50aXR5JztcclxuaW1wb3J0IHsgVVVJRCB9IGZyb20gJ2FuZ3VsYXIyLXV1aWQnO1xyXG5pbXBvcnQgeyBTdG9yYWdlRXh0ZW5zaW9uIH0gZnJvbSAnLi4vZW50aXR5L3N0b3JhZ2VleHRlbnNpb24nO1xyXG5pbXBvcnQgeyBFeFN0b3JhZ2VGaWxlSW5mbyB9IGZyb20gJy4uL2VudGl0eS9leHRlbnNpb25zdG9yYWdlZmlsZWluZm8nO1xyXG5pbXBvcnQgeyBEcm9wTGlzdEVudGl0eSB9IGZyb20gJy4uL2VudGl0eS9kcm9wbGlzdGVudGl0eSc7XHJcbmltcG9ydCB7IExvYWRpbmdTZXJ2aWNlIH0gZnJvbSAnQGZhcnJpcy91aS1sb2FkaW5nJztcclxuaW1wb3J0IHsgRG9tU2FuaXRpemVyIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XHJcbmltcG9ydCB7IEZpbGVTdGF0ZSB9IGZyb20gJy4uL2VudGl0eS9maWxlc3RhdGUnO1xyXG5pbXBvcnQgeyBMb2NhbExhbmdQaXBlIH0gZnJvbSAnLi4vLi4vbG9jYWwucGlwZSc7XHJcbmltcG9ydCB7IEdzcERvY1NlY3VyaXR5QmFzZUluZm8gfSBmcm9tICcuLi9lbnRpdHkvZ3NwZG9jc2VjdXJpdHliYXNlaW5mbyc7XHJcbmltcG9ydCB7IFNlY3VyaXR5RW50aXR5IH0gZnJvbSAnLi4vZW50aXR5L3NlY3VyaXR5ZW50aXR5JztcclxuaW1wb3J0IHsgSHR0cENsaWVudCwgSHR0cEVycm9yUmVzcG9uc2UgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IEluaXRNdWx0aVVwbG9hZFJlcXVlc3QgfSBmcm9tICcuLi9lbnRpdHkvaW5pdG11bHRpdXBsb2FkcmVxdWVzdCc7XHJcbmltcG9ydCB7IENvbXBsZXRlTXVsdGlVcGxvYWRSZXF1ZXN0IH0gZnJvbSAnLi4vZW50aXR5L2NvbXBsZXRlbXVsdGl1cGxvYWRyZXF1ZXN0JztcclxuaW1wb3J0IHsgR3NwRm9ybVN0cmVhbUVudGl0eSB9IGZyb20gJy4uL2VudGl0eS9nc3Bmb3Jtc3RyZWFtZW50aXR5JztcclxuaW1wb3J0IHsgTXVsdGlVcGxvYWRSZXF1ZXN0IH0gZnJvbSAnLi4vZW50aXR5L211bHRpdXBsb2FkcmVxdWVzdCc7XHJcbmltcG9ydCB7IE11bHRpVXBsb2FkUmVzdWx0IH0gZnJvbSAnLi4vZW50aXR5L211bHRpdXBsb2FkcmVzdWx0JztcclxuaW1wb3J0IHsgQmFzZVBhdGhTZXJ2aWNlIH0gZnJvbSAnQGZhcnJpcy9ydGYnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhcHAtZmlsZS11cGxvYWQnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9maWxlLXVwbG9hZC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vZmlsZS11cGxvYWQuY29tcG9uZW50LmNzcyddLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgRmlsZVVwbG9hZENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcblxyXG4gIGZpbGVzOiBGaWxlSW5mb1tdID0gW107XHJcbiAgbWV0YWRhdGFJZExpc3Q6IHN0cmluZ1tdID0gW107XHJcbiAgdXBsb2FkRmlsZUluZm9MaXN0OiBVcGxvYWRGaWxlSW5mb1tdID0gW107XHJcbiAgZXJyRmlsZUxpc3Q6IHN0cmluZ1tdID0gW107XHJcbiAgZXJyVHlwZUxpc3Q6IHN0cmluZ1tdID0gW107XHJcbiAgbnVsbEZpbGVMaXN0OiBzdHJpbmdbXSA9IFtdO1xyXG4gIGJleW9uZEZpbGVMaXN0OiBzdHJpbmdbXSA9IFtdO1xyXG4gIGZpbGVOYW1lT3ZlcnNpemVMaXN0OiBzdHJpbmdbXSA9IFtdO1xyXG4gIGludmFsaWRDaGFyYWN0ZXJzRmlsZUxpc3Q6IHN0cmluZ1tdID0gW107XHJcbiAgaW52YWxpZEV4dE5hbWVzRmlsZUxpc3Q6IHN0cmluZ1tdID0gW107XHJcbiAgdW5yZWNvZ25pemVkVHlwZUZpbGVMaXN0OiBzdHJpbmdbXSA9IFtdO1xyXG4gIGludmFsaWRDaGFyYWN0ZXJzOiBzdHJpbmcgPSAnJztcclxuICBpbnZhbGlkRXh0TmFtZXM6IHN0cmluZyA9ICcnO1xyXG4gIHNob3dUeXBlOiBudW1iZXIgPSAwO1xyXG4gIG1vdXNlT246IGJvb2xlYW4gPSBmYWxzZTtcclxuICBpc1doaXRlTGlzdDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGJ1ZmZlclNpemUgPSA1ICogMTAyNCAqIDEwMjQ7XHJcbiAgc2VsZWN0ZWRGaWxlczogYW55O1xyXG4gIHJhZGlvQnV0dG9uR3JvdXBWYWx1ZTtcclxuICBzZWxlY3RlZEZpbGVDb3VudDogbnVtYmVyID0gMDtcclxuICB1cGxvYWRCdG5EaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICB1cGxvYWRJY29uQWRkcmVzcyA9IHRoaXMuY3JlYXRlQmFzZVVybCgnL3BsYXRmb3JtL3J1bnRpbWUvZGZzL2ltYWdlcy91cGxvYWQuc3ZnJyk7XHJcbiAgdXBsb2FkTGl0dGxlSWNvbkFkZHJlc3MgPSB0aGlzLmNyZWF0ZUJhc2VVcmwoJy9wbGF0Zm9ybS9ydW50aW1lL2Rmcy9pbWFnZXMvdXBsb2FkSWNvbi5zdmcnKTtcclxuXHJcbiAgaGFzU2VsZWN0ZWRGaWxlOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIGZpbGVBbGxTZWxlY3RlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICB1cGxvYWRQcm9jZXNzID0geyB3aWR0aDogJzAlJyB9O1xyXG5cclxuICBmaWxlVG90YWxDaHVuazogeyBba2V5OiBzdHJpbmddOiBudW1iZXIgfSA9IHt9O1xyXG5cclxuICByZXF1ZXN0QXJyYXk6IEFycmF5PE9ic2VydmFibGU8YW55Pj4gPSBuZXcgQXJyYXk7XHJcblxyXG4gIHJlcXVlc3RCb2R5QXJyYXk6IEFycmF5PEdzcEZvcm1VcGxvYWRFbnRpdHk+ID0gbmV3IEFycmF5O1xyXG5cclxuICB1cGxvYWRlZENodW5rOiB7IFtrZXk6IHN0cmluZ106IG51bWJlciB9ID0ge307XHJcbiAgdXBsb2FkZWRQcm9jZXNzOiB7IFtrZXk6IHN0cmluZ106IG51bWJlciB9ID0ge307XHJcblxyXG4gIC8vYWxsU2VsZWN0ZWQ6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIHN0b3JhZ2VFeHRlbnNpb246IFN0b3JhZ2VFeHRlbnNpb247XHJcblxyXG4gIGRlZmF1bHRQcm9wZXJ0eU5hbWU6IHN0cmluZyA9IFwiXCI7XHJcbiAgcHJvcGVydGllc05hbWVzOiBEcm9wTGlzdEVudGl0eVtdID0gW107XHJcblxyXG4gIHNlY3VyaXR5SW5mb0xpc3Q6IFNlY3VyaXR5RW50aXR5W10gPSBbXTtcclxuXHJcbiAgcXVldWVMaXN0U3R5bGUgPSB7IHdpZHRoOiAnNDgwcHgnIH07XHJcblxyXG4gIGRyb3BMaXN0VmFsdWU6IHN0cmluZyA9IFwiXCI7XHJcblxyXG4gIHVwbG9hZGVkRmlsZVRvdGFsOiBudW1iZXIgPSAwO1xyXG5cclxuICBhbGxvd2VkTXVsdGlVcGxvYWQ6IGJvb2xlYW47XHJcblxyXG4gIGhhdmVFeHRlbnNpb25Qcm9wZXJ0eTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBoYXZlU2VjdXJpdHlJbmZvOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIHVwbG9hZGVkRmlsZUluZm9MaXN0ID0gW107XHJcbiAgb2xkVXBsb2FkZWRGaWxlTGlzdCA9IFtdO1xyXG4gIC8vdXBsb2FkZWROYW1lTGlzdCA9IFtdO1xyXG4gIHVwbG9hZEluZm9FcnJvck1lc3NhZ2U6IHN0cmluZyA9IFwiXCI7XHJcblxyXG4gIHNhbWVOYW1lQWxsb3dlZCA9IHRydWU7XHJcbiAgbWF4RmlsZVNpemU6IG51bWJlciA9IDA7O1xyXG4gIGxvY2FsZWlkOiBzdHJpbmc7XHJcbiAgbG9jYWxlcGlwZTogTG9jYWxMYW5nUGlwZTtcclxuICBodHRwY2xpZW50OiBIdHRwQ2xpZW50O1xyXG4gIGNoZWNrYm94UG9zID0geyB0b3A6ICcwcHgnIH1cclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBtc2dTZXJ2aWNlOiBNZXNzYWdlclNlcnZpY2UsIHByaXZhdGUgdXBsb2FkU2VydmljZTogVXBsb2FkU2VydmljZSwgcHJpdmF0ZSBsb2FkU2VydmljZTogTG9hZGluZ1NlcnZpY2UsIHByaXZhdGUgaW5qZWN0b3I/OiBJbmplY3Rvcikge1xyXG4gICAgaWYgKHRoaXMuaW5qZWN0b3IpIHtcclxuICAgICAgdGhpcy5odHRwY2xpZW50ID0gdGhpcy5pbmplY3Rvci5nZXQoSHR0cENsaWVudCk7XHJcbiAgICAgIHRoaXMubG9jYWxlaWQgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcImxhbmd1YWdlQ29kZVwiKSB8fCB0aGlzLmluamVjdG9yLmdldChMT0NBTEVfSUQpO1xyXG4gICAgICB0aGlzLmxvY2FsZXBpcGUgPSBuZXcgTG9jYWxMYW5nUGlwZSh0aGlzLmxvY2FsZWlkKTtcclxuICAgIH1cclxuICB9XHJcbiAgQElucHV0KCkgZm9ybUlkOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgcm9vdElkOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgZmlsZVR5cGU6IHN0cmluZyA9IFwiKlwiO1xyXG4gIEBJbnB1dCgpIGZpbGVDb3VudDogbnVtYmVyID0gMDtcclxuICBASW5wdXQoKSBvbGRJZExpc3Q6IHN0cmluZ1tdID0gW107XHJcbiAgQElucHV0KCkgc2VjdXJpdHlJbmZvOiBHc3BEb2NTZWN1cml0eUJhc2VJbmZvID0gbnVsbDtcclxuICBASW5wdXQoKSBmaWxlTmFtZUxlbmd0aDogbnVtYmVyID0gMDtcclxuXHJcbiAgQFZpZXdDaGlsZCgnb3BDZWxsJykgb3BDZWxsOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIGlmIChuYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoJ0ZpcmVmb3gnKSA+PSAwKVxyXG4gICAgICB0aGlzLmNoZWNrYm94UG9zLnRvcCA9ICcxNHB4JztcclxuICAgIC8vaWYgKHRoaXMuc3RvcmFnZVNlcnZpY2UgIT0gbnVsbCkge1xyXG4gICAgaWYgKHRoaXMuc2VjdXJpdHlJbmZvICE9IG51bGwpIHtcclxuICAgICAgdGhpcy51cGxvYWRTZXJ2aWNlLmdldFNlY3VyaXR5SW5mb0xpc3QodGhpcy5zZWN1cml0eUluZm8pLnN1YnNjcmliZShcclxuICAgICAgICByZXMgPT4ge1xyXG4gICAgICAgICAgdGhpcy5oYXZlU2VjdXJpdHlJbmZvID0gdHJ1ZTtcclxuICAgICAgICAgIGxldCBpID0gMDtcclxuICAgICAgICAgIHJlcy5mb3JFYWNoKGVsZW1lbnQgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnNlY3VyaXR5SW5mb0xpc3QucHVzaCh7IGlkOiBpLnRvU3RyaW5nKCksIHNlY3VyaXR5SWQ6IGVsZW1lbnQuc2VjdXJpdHlJZCwgc2VjdXJpdHlMZXZlbDogZWxlbWVudC5zZWN1cml0eUxldmVsLCBuYW1lOiBlbGVtZW50Lm5hbWUgfSk7XHJcbiAgICAgICAgICAgIGkrKztcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgKVxyXG4gICAgfVxyXG4gICAgdGhpcy51cGxvYWRTZXJ2aWNlLmdldFN0b3JhZ2VFeHRlbnNpb25JbmZvKCkuc3Vic2NyaWJlKFxyXG4gICAgICByZXMgPT4ge1xyXG4gICAgICAgIGlmIChyZXMgIT0gbnVsbCAmJiByZXMuZXJyb3IgPT0gbnVsbCkge1xyXG4gICAgICAgICAgdGhpcy5zdG9yYWdlRXh0ZW5zaW9uID0gcmVzO1xyXG4gICAgICAgICAgdGhpcy5kZWZhdWx0UHJvcGVydHlOYW1lID0gdGhpcy5zdG9yYWdlRXh0ZW5zaW9uLmRlZmF1bHRQcm9wZXJ0eU5hbWU7XHJcbiAgICAgICAgICB0aGlzLnByb3BlcnRpZXNOYW1lcy5wdXNoKHsgaWQ6IFwiMFwiLCBuYW1lOiB0aGlzLnN0b3JhZ2VFeHRlbnNpb24uZGVmYXVsdFByb3BlcnR5TmFtZSB9KTtcclxuICAgICAgICAgIGxldCBpID0gMDtcclxuICAgICAgICAgIC8vIHRoaXMucHJvcGVydGllc05hbWVzLnB1c2goLi4uKHRoaXMuc3RvcmFnZUV4dGVuc2lvbi5leHRlbnNpb25Qcm9wZXJ0eU5hbWVMaXN0KSk7XHJcbiAgICAgICAgICB0aGlzLnN0b3JhZ2VFeHRlbnNpb24uZXh0ZW5zaW9uUHJvcGVydHlOYW1lTGlzdC5mb3JFYWNoKGVsZW1lbnQgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnByb3BlcnRpZXNOYW1lcy5wdXNoKHsgaWQ6ICgrK2kpLnRvU3RyaW5nKCksIG5hbWU6IGVsZW1lbnQgfSk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIHRoaXMucXVldWVMaXN0U3R5bGUud2lkdGggPSAnMzgwcHgnO1xyXG4gICAgICAgICAgdGhpcy5oYXZlRXh0ZW5zaW9uUHJvcGVydHkgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgKVxyXG5cclxuICAgIHRoaXMudXBsb2FkU2VydmljZS5nZXRVcGxvYWRJbmZvKHRoaXMucm9vdElkKS5zdWJzY3JpYmUocmVzID0+IHtcclxuICAgICAgaWYgKHJlcy5lcnJvciAhPSBudWxsKSB7XHJcbiAgICAgICAgdGhpcy51cGxvYWRJbmZvRXJyb3JNZXNzYWdlID0gcmVzLmVycm9yLk1lc3NhZ2U7XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2coJ+iOt+WPluS4iuS8oOS/oeaBr+aKpemUme+8jOmUmeivr+S/oeaBr+S4uu+8micsZXJyTXNnKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy51cGxvYWRCdG5EaXNhYmxlZCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc2FtZU5hbWVBbGxvd2VkID0gcmVzLnNhbWVOYW1lQWxsb3dlZDtcclxuICAgICAgICB0aGlzLm1heEZpbGVTaXplID0gcGFyc2VJbnQoSlNPTi5wYXJzZShyZXMudmFsaWRhdGVDb25maWd1cmF0aW9uKS5tYXhGaWxlU2l6ZSk7XHJcbiAgICAgICAgdGhpcy5pc1doaXRlTGlzdCA9IEpTT04ucGFyc2UocmVzLnZhbGlkYXRlQ29uZmlndXJhdGlvbikud2hpdGVMaXN0O1xyXG4gICAgICAgIHRoaXMuaW52YWxpZENoYXJhY3RlcnMgPSBKU09OLnBhcnNlKHJlcy52YWxpZGF0ZUNvbmZpZ3VyYXRpb24pLmludmFsaWRDaGFyYWN0ZXJzO1xyXG4gICAgICAgIHRoaXMuaW52YWxpZEV4dE5hbWVzID0gSlNPTi5wYXJzZShyZXMudmFsaWRhdGVDb25maWd1cmF0aW9uKS5pbnZhbGlkRXh0TmFtZXMudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICB0aGlzLmFsbG93ZWRNdWx0aVVwbG9hZCA9IHJlcy5hbGxvd2VkTXVsdGlVcGxvYWQ7XHJcbiAgICAgICAgaWYgKCF0aGlzLnNhbWVOYW1lQWxsb3dlZCkge1xyXG4gICAgICAgICAgdGhpcy51cGxvYWRTZXJ2aWNlLmdldFVwbG9hZGVkRmlsZUluZm9MaXN0KHRoaXMuZm9ybUlkLCB0aGlzLnJvb3RJZCkuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgICByZXMgPT4ge1xyXG4gICAgICAgICAgICAgIGlmIChyZXMgIT0gbnVsbCAmJiByZXMuZXJyb3IgPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy51cGxvYWRlZEZpbGVJbmZvTGlzdCA9IHJlcztcclxuICAgICAgICAgICAgICAgIHRoaXMub2xkVXBsb2FkZWRGaWxlTGlzdCA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkocmVzKSk7O1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSlcclxuICAgIGlmICh0aGlzLm9sZElkTGlzdCAhPSBudWxsICYmIHRoaXMub2xkSWRMaXN0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgLy8gdGhpcy51cGxvYWRTZXJ2aWNlLmNhbmNlbCh0aGlzLm9sZElkTGlzdCwgdGhpcy5yb290SWQpLnN1YnNjcmliZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucmFkaW9CdXR0b25Hcm91cFZhbHVlID0gJ3Nob3dCeUdyb3VwJztcclxuICB9XHJcblxyXG4gIHRvdGFsTG9hZDogYW55ID0gbnVsbDtcclxuXHJcbiAgc2hvd0xvYWRpbmcoKSB7XHJcbiAgICB0aGlzLmhhc1NlbGVjdGVkRmlsZSA9IHRydWU7XHJcbiAgICAvLyBpZiAodGhpcy50b3RhbExvYWQgPT0gbnVsbClcclxuICAgIC8vICAgdGhpcy50b3RhbExvYWQgPSB0aGlzLmxvYWRTZXJ2aWNlLnNob3coe1xyXG4gICAgLy8gICAgIG1lc3NhZ2U6IHRoaXMubG9jYWxlcGlwZS50cmFuc2Zvcm0oJ3VwbG9hZGluZycpXHJcbiAgICAvLyAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0UmlnaHRDbGFzcygpIHtcclxuICAgIGlmICh0aGlzLnVwbG9hZEJ0bkRpc2FibGVkKSB7XHJcbiAgICAgIHJldHVybiAnYnRuIGJ0bi1wcmltYXJ5IGJ0bi1sZyBkaXNhYmxlZCc7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gJ2J0biBidG4tcHJpbWFyeSBidG4tbGcnO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZmluZEludmFsaWRDaGFyYWN0ZXIobmFtZTogc3RyaW5nKTogc3RyaW5nW10ge1xyXG4gICAgbGV0IGNoYXJMaXN0OiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgdGhpcy5pbnZhbGlkQ2hhcmFjdGVycy5zcGxpdCgnfCcpLmZvckVhY2goZWxlbWVudCA9PiB7XHJcbiAgICAgIGlmIChuYW1lLmluZGV4T2YoZWxlbWVudCkgPj0gMClcclxuICAgICAgICBjaGFyTGlzdC5wdXNoKGVsZW1lbnQpO1xyXG4gICAgfSlcclxuXHJcbiAgICByZXR1cm4gY2hhckxpc3Q7XHJcbiAgfVxyXG5cclxuXHJcbiAgaGFzRmlsZVR5cGUoZmlsZSkge1xyXG4gICAgcmV0dXJuIGZpbGUubmFtZS5pbmNsdWRlcygnLicpO1xyXG4gIH1cclxuXHJcbiAgZmlsZVNlbGVjdGVkKCRldmVudCkge1xyXG4gICAgaWYgKHRoaXMudXBsb2FkSW5mb0Vycm9yTWVzc2FnZSkge1xyXG4gICAgICB0aGlzLm1zZ1NlcnZpY2UuZXJyb3IodGhpcy51cGxvYWRJbmZvRXJyb3JNZXNzYWdlKTtcclxuICAgICAgdGhpcy51cGxvYWRCdG5EaXNhYmxlZCA9IHRydWU7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmhhc1NlbGVjdGVkRmlsZSA9IHRydWU7XHJcbiAgICB0aGlzLnNlbGVjdGVkRmlsZXMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjZmlsZScpO1xyXG5cclxuICAgIGlmICh0aGlzLmZpbGVDb3VudCA+IDApIHtcclxuICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRGaWxlcy5maWxlcy5sZW5ndGggKyB0aGlzLmZpbGVzLmxlbmd0aCA+IHRoaXMuZmlsZUNvdW50KSB7XHJcbiAgICAgICAgbGV0IHNlbGVjdGVkTnVtOiBudW1iZXIgPSAodGhpcy5zZWxlY3RlZEZpbGVzLmZpbGVzLmxlbmd0aCBhcyBudW1iZXIpICsgdGhpcy5maWxlcy5sZW5ndGg7XHJcbiAgICAgICAgdGhpcy5tc2dTZXJ2aWNlLndhcm5pbmcodGhpcy5sb2NhbGVwaXBlLnRyYW5zZm9ybSgnc2VsZWN0ZWRDb3VudCcpICsgc2VsZWN0ZWROdW0gKyB0aGlzLmxvY2FsZXBpcGUudHJhbnNmb3JtKCdsaW1pdENvdW50JykgKyB0aGlzLmZpbGVDb3VudCArIHRoaXMubG9jYWxlcGlwZS50cmFuc2Zvcm0oJ3JlY2hvb3NlRmlsZScpKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvL3RoaXMuZmxhZyA9IDA7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuc2VsZWN0ZWRGaWxlcy5maWxlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBsZXQgc2VsZWN0ZWRGaWxlID0gdGhpcy5zZWxlY3RlZEZpbGVzLmZpbGVzW2ldO1xyXG4gICAgICBzZWxlY3RlZEZpbGUuaXNBbGxvd2VkVXBsb2FkID0gdHJ1ZTtcclxuICAgICAgLy9zZWxlY3RlZEZpbGUuc2xpY2VcclxuICAgICAgbGV0IHV1aWQgPSBVVUlELlVVSUQoKTtcclxuXHJcbiAgICAgIGlmIChzZWxlY3RlZEZpbGUuc2l6ZSA9PSAwKSB7XHJcbiAgICAgICAgdGhpcy5udWxsRmlsZUxpc3QucHVzaChzZWxlY3RlZEZpbGUubmFtZSk7XHJcbiAgICAgICAgY29udGludWU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLmZpbGVOYW1lTGVuZ3RoID4gMCAmJiBzZWxlY3RlZEZpbGUubmFtZS5sZW5ndGggPiB0aGlzLmZpbGVOYW1lTGVuZ3RoKSB7XHJcbiAgICAgICAgdGhpcy5maWxlTmFtZU92ZXJzaXplTGlzdC5wdXNoKHNlbGVjdGVkRmlsZS5uYW1lKTtcclxuICAgICAgICBjb250aW51ZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHRoaXMubWF4RmlsZVNpemUgIT0gbnVsbCAmJiB0aGlzLm1heEZpbGVTaXplID4gMCkge1xyXG4gICAgICAgIGlmIChzZWxlY3RlZEZpbGUuc2l6ZSA+IHRoaXMubWF4RmlsZVNpemUgKiAxMDAwKSB7XHJcbiAgICAgICAgICB0aGlzLmJleW9uZEZpbGVMaXN0LnB1c2goc2VsZWN0ZWRGaWxlLm5hbWUpO1xyXG4gICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCBpbnZhbGlkQ2hhckxpc3QgPSB0aGlzLmZpbmRJbnZhbGlkQ2hhcmFjdGVyKHNlbGVjdGVkRmlsZS5uYW1lKTtcclxuICAgICAgbGV0IGludmFsaWRDaGFyTGlzdEZpbHRlciA9IGludmFsaWRDaGFyTGlzdC5maWx0ZXIoKHMpID0+IHtcclxuICAgICAgICByZXR1cm4gcyAmJiBzLnRyaW0oKTtcclxuICAgICAgfSk7XHJcbiAgICAgIGxldCBlcnJvck1lc3NhZ2UgPSBcIlwiXHJcbiAgICAgIGlmIChpbnZhbGlkQ2hhckxpc3RGaWx0ZXIubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIGludmFsaWRDaGFyTGlzdEZpbHRlci5mb3JFYWNoKChlbGVtZW50LCBpbmRleCkgPT4ge1xyXG4gICAgICAgICAgZXJyb3JNZXNzYWdlICs9IFwiXFxcIlwiO1xyXG4gICAgICAgICAgZXJyb3JNZXNzYWdlICs9IGVsZW1lbnQ7XHJcbiAgICAgICAgICBlcnJvck1lc3NhZ2UgKz0gXCJcXFwiXCI7XHJcbiAgICAgICAgICBlcnJvck1lc3NhZ2UgKz0gKGluZGV4ID09PSBpbnZhbGlkQ2hhckxpc3RGaWx0ZXIubGVuZ3RoIC0gMSkgPyBcIlwiIDogXCIsXCI7XHJcbiAgICAgICAgfSlcclxuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZEZpbGVzLmZpbGVzLmxlbmd0aCA9PT0gMSkge1xyXG4gICAgICAgICAgc2VsZWN0ZWRGaWxlLmlzQWxsb3dlZFVwbG9hZCA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5tc2dTZXJ2aWNlLndhcm5pbmcodGhpcy5sb2NhbGVwaXBlLnRyYW5zZm9ybSgnaW52YWxpZENoYXJhY3RlcnMnKSArIGVycm9yTWVzc2FnZSArIHRoaXMubG9jYWxlcGlwZS50cmFuc2Zvcm0oJ3JlY2hvb3NlRmlsZScpKTtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRGaWxlcy5maWxlcy5sZW5ndGggPiAxKSB7XHJcbiAgICAgICAgICBzZWxlY3RlZEZpbGUuaXNBbGxvd2VkVXBsb2FkID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLmludmFsaWRDaGFyYWN0ZXJzRmlsZUxpc3QucHVzaChzZWxlY3RlZEZpbGUubmFtZSk7XHJcbiAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoIXRoaXMuaGFzRmlsZVR5cGUoc2VsZWN0ZWRGaWxlKSkge1xyXG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkRmlsZXMuZmlsZXMubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgICAgICBzZWxlY3RlZEZpbGUuaXNBbGxvd2VkVXBsb2FkID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLm1zZ1NlcnZpY2Uud2FybmluZyhzZWxlY3RlZEZpbGUubmFtZSArIHRoaXMubG9jYWxlcGlwZS50cmFuc2Zvcm0oJ1VucmVjb2duaXplZEZpbGVUeXBlJykgKyB0aGlzLmxvY2FsZXBpcGUudHJhbnNmb3JtKCdyZWNob29zZUZpbGUnKSk7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkRmlsZXMuZmlsZXMubGVuZ3RoID4gMSkge1xyXG4gICAgICAgICAgc2VsZWN0ZWRGaWxlLmlzQWxsb3dlZFVwbG9hZCA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy51bnJlY29nbml6ZWRUeXBlRmlsZUxpc3QucHVzaChzZWxlY3RlZEZpbGUubmFtZSk7XHJcbiAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIGxldCBjdXJGaWxlU3VmZml4ID0gc2VsZWN0ZWRGaWxlLm5hbWUuc3BsaXQoJy4nKVsxXTtcclxuICAgICAgbGV0IGN1ckZpbGVTdWZmaXggPSBzZWxlY3RlZEZpbGUubmFtZS5zdWJzdHIoc2VsZWN0ZWRGaWxlLm5hbWUubGFzdEluZGV4T2YoJy4nKSArIDEpLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgIGNvbnN0IGV4dE5hbWVzID0gdGhpcy5saXN0VG9TdHJpbmcodGhpcy5pbnZhbGlkRXh0TmFtZXMuc3BsaXQoJ3wnKSk7XHJcbiAgICAgIGNvbnN0IGV4dE5hbWVzQXJ5ID0gdGhpcy5pbnZhbGlkRXh0TmFtZXMuc3BsaXQoJ3wnKTtcclxuICAgICAgaWYgKCF0aGlzLmlzV2hpdGVMaXN0ICYmIGV4dE5hbWVzQXJ5LmluY2x1ZGVzKGN1ckZpbGVTdWZmaXgpKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRGaWxlcy5maWxlcy5sZW5ndGggPT09IDEpIHtcclxuICAgICAgICAgIHNlbGVjdGVkRmlsZS5pc0FsbG93ZWRVcGxvYWQgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMubXNnU2VydmljZS53YXJuaW5nKHNlbGVjdGVkRmlsZS5uYW1lICsgdGhpcy5sb2NhbGVwaXBlLnRyYW5zZm9ybSgnaW52YWxpZEV4dE5hbWVzJykgKyB0aGlzLmxvY2FsZXBpcGUudHJhbnNmb3JtKCdibGFja0V4dE5hbWVzJykgKyBleHROYW1lcyArIHRoaXMubG9jYWxlcGlwZS50cmFuc2Zvcm0oJ3JlY2hvb3NlRmlsZScpKTtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRGaWxlcy5maWxlcy5sZW5ndGggPiAxKSB7XHJcbiAgICAgICAgICBzZWxlY3RlZEZpbGUuaXNBbGxvd2VkVXBsb2FkID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLmludmFsaWRFeHROYW1lc0ZpbGVMaXN0LnB1c2goc2VsZWN0ZWRGaWxlLm5hbWUpO1xyXG4gICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLmlzV2hpdGVMaXN0ICYmICFleHROYW1lc0FyeS5pbmNsdWRlcyhjdXJGaWxlU3VmZml4KSkge1xyXG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkRmlsZXMuZmlsZXMubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgICAgICBzZWxlY3RlZEZpbGUuaXNBbGxvd2VkVXBsb2FkID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLm1zZ1NlcnZpY2Uud2FybmluZyhzZWxlY3RlZEZpbGUubmFtZSArIHRoaXMubG9jYWxlcGlwZS50cmFuc2Zvcm0oJ2ludmFsaWRFeHROYW1lcycpICsgdGhpcy5sb2NhbGVwaXBlLnRyYW5zZm9ybSgnd2hpdGVFeHROYW1lcycpICsgZXh0TmFtZXMgKyB0aGlzLmxvY2FsZXBpcGUudHJhbnNmb3JtKCdyZWNob29zZUZpbGUnKSk7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkRmlsZXMuZmlsZXMubGVuZ3RoID4gMSkge1xyXG4gICAgICAgICAgc2VsZWN0ZWRGaWxlLmlzQWxsb3dlZFVwbG9hZCA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5pbnZhbGlkRXh0TmFtZXNGaWxlTGlzdC5wdXNoKHNlbGVjdGVkRmlsZS5uYW1lKTtcclxuICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKCF0aGlzLnNhbWVOYW1lQWxsb3dlZCkge1xyXG4gICAgICAgIGlmICh0aGlzLnVwbG9hZGVkRmlsZUluZm9MaXN0LmZpbmQoeCA9PiB4LmZpbGVOYW1lID09IHNlbGVjdGVkRmlsZS5uYW1lKSAhPSBudWxsKSB7XHJcblxyXG4gICAgICAgICAgY29uc3QgbXNnID0gdGhpcy5tc2dTZXJ2aWNlLnNob3coJ3dhcm5pbmcnLCB0aGlzLmxvY2FsZXBpcGUudHJhbnNmb3JtKCdoYXZlU2FtZU5hbWUnKSArIHNlbGVjdGVkRmlsZS5uYW1lLCB7XHJcbiAgICAgICAgICAgIGluaXRpYWxTdGF0ZToge1xyXG4gICAgICAgICAgICAgIGJ1dHRvbnM6IFtcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgdGV4dDogdGhpcy5sb2NhbGVwaXBlLnRyYW5zZm9ybSgncmVuYW1lJyksXHJcbiAgICAgICAgICAgICAgICAgIGNsczogJ2J0biBidG4tc2Vjb25kYXJ5JyxcclxuICAgICAgICAgICAgICAgICAgaGFuZGxlOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IG9sZE5hbWU6IHN0cmluZyA9IHNlbGVjdGVkRmlsZS5uYW1lO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBuZXdOYW1lXHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGZsYWcgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBpID0gMTtcclxuICAgICAgICAgICAgICAgICAgICB3aGlsZSAoZmxhZykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgbmV3TmFtZSA9IG9sZE5hbWUuc3Vic3RyaW5nKDAsIG9sZE5hbWUubGFzdEluZGV4T2YoJy4nKSkgKyAnKCcgKyBpICsgJyknICsgb2xkTmFtZS5zdWJzdHJpbmcob2xkTmFtZS5sYXN0SW5kZXhPZignLicpKTtcclxuICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnVwbG9hZGVkRmlsZUluZm9MaXN0LmZpbmQoeCA9PiB4LmZpbGVOYW1lID09IG5ld05hbWUpICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaSsrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmbGFnID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnVwbG9hZEZpbGUodXVpZCwgc2VsZWN0ZWRGaWxlLCBuZXdOYW1lKTtcclxuICAgICAgICAgICAgICAgICAgICBtc2cuY2xvc2UoKTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgdGV4dDogdGhpcy5sb2NhbGVwaXBlLnRyYW5zZm9ybSgncmVwbGFjZScpLFxyXG4gICAgICAgICAgICAgICAgICBjbHM6ICdidG4gYnRuLXNlY29uZGFyeScsXHJcbiAgICAgICAgICAgICAgICAgIGhhbmRsZTogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHV1aWQgPSB0aGlzLnVwbG9hZGVkRmlsZUluZm9MaXN0LmZpbmQoeCA9PiB4LmZpbGVOYW1lID09IHNlbGVjdGVkRmlsZS5uYW1lKS5tZXRhZGF0YUlkO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXBsb2FkRmlsZSh1dWlkLCBzZWxlY3RlZEZpbGUsIHNlbGVjdGVkRmlsZS5uYW1lLCBGaWxlU3RhdGUuVXBkYXRlKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnVwbG9hZGVkRmlsZVRvdGFsLS07XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMub2xkVXBsb2FkZWRGaWxlTGlzdC5maW5kKHggPT4geC5maWxlTmFtZSA9PSBzZWxlY3RlZEZpbGUubmFtZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMudXBsb2FkZWRGaWxlVG90YWwrKztcclxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMudXBsb2FkZWRGaWxlSW5mb0xpc3Quc3BsaWNlKHRoaXMudXBsb2FkZWRGaWxlSW5mb0xpc3QuaW5kZXhPZih0aGlzLnVwbG9hZGVkRmlsZUluZm9MaXN0LmZpbHRlcih4ID0+IHguZmlsZU5hbWUgPT0gc2VsZWN0ZWRGaWxlLm5hbWUpWzBdKSwgMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIG1zZy5jbG9zZSgpO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICB0ZXh0OiB0aGlzLmxvY2FsZXBpcGUudHJhbnNmb3JtKCdjYW5jZWwnKSxcclxuICAgICAgICAgICAgICAgICAgY2xzOiAnYnRuIGJ0bi1zZWNvbmRhcnknLFxyXG4gICAgICAgICAgICAgICAgICBoYW5kbGU6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBtc2cuY2xvc2UoKTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIF1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBpZiAoc2VsZWN0ZWRGaWxlLmlzQWxsb3dlZFVwbG9hZCA9PT0gdHJ1ZSkge1xyXG4gICAgICAgIHRoaXMudXBsb2FkRmlsZSh1dWlkLCBzZWxlY3RlZEZpbGUsIHNlbGVjdGVkRmlsZS5uYW1lKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmVyckZpbGVMaXN0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgbGV0IG5hbWU6IHN0cmluZyA9IHRoaXMubGlzdFRvU3RyaW5nKHRoaXMuZXJyRmlsZUxpc3QpO1xyXG4gICAgICB0aGlzLm1zZ1NlcnZpY2Uud2FybmluZyh0aGlzLmxvY2FsZXBpcGUudHJhbnNmb3JtKCdoYXZlU2FtZU5hbWUnKSArIG5hbWUgKyB0aGlzLmxvY2FsZXBpcGUudHJhbnNmb3JtKCdyZWNob29zZUZpbGUnKSk7XHJcbiAgICAgIHRoaXMuZXJyRmlsZUxpc3QgPSBbXTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5udWxsRmlsZUxpc3QubGVuZ3RoID4gMCkge1xyXG4gICAgICBsZXQgbmFtZTogc3RyaW5nID0gdGhpcy5saXN0VG9TdHJpbmcodGhpcy5udWxsRmlsZUxpc3QpO1xyXG4gICAgICB0aGlzLm1zZ1NlcnZpY2Uud2FybmluZyhuYW1lICsgdGhpcy5sb2NhbGVwaXBlLnRyYW5zZm9ybSgnc2l6ZVplcm8nKSArIHRoaXMubG9jYWxlcGlwZS50cmFuc2Zvcm0oJ3JlY2hvb3NlRmlsZScpKTtcclxuICAgICAgdGhpcy5udWxsRmlsZUxpc3QgPSBbXTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5maWxlTmFtZU92ZXJzaXplTGlzdC5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGxldCBuYW1lOiBzdHJpbmcgPSB0aGlzLmxpc3RUb1N0cmluZyh0aGlzLmZpbGVOYW1lT3ZlcnNpemVMaXN0KTtcclxuICAgICAgdGhpcy5tc2dTZXJ2aWNlLndhcm5pbmcobmFtZSArIHRoaXMubG9jYWxlcGlwZS50cmFuc2Zvcm0oJ2ZpbGVOYW1lT3ZlclNpemUnKSArIHRoaXMuZmlsZU5hbWVMZW5ndGggKyB0aGlzLmxvY2FsZXBpcGUudHJhbnNmb3JtKCdyZWNob29zZUZpbGUnKSk7XHJcbiAgICAgIHRoaXMuZmlsZU5hbWVPdmVyc2l6ZUxpc3QgPSBbXTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5iZXlvbmRGaWxlTGlzdC5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGxldCBuYW1lOiBzdHJpbmcgPSB0aGlzLmxpc3RUb1N0cmluZyh0aGlzLmJleW9uZEZpbGVMaXN0KTtcclxuICAgICAgdGhpcy5tc2dTZXJ2aWNlLndhcm5pbmcobmFtZSArIHRoaXMubG9jYWxlcGlwZS50cmFuc2Zvcm0oJ3NpemVNYXgnKSArIHRoaXMubWF4RmlsZVNpemUgKyBcIktCXCIgKyB0aGlzLmxvY2FsZXBpcGUudHJhbnNmb3JtKCdyZWNob29zZUZpbGUnKSk7XHJcbiAgICAgIHRoaXMuYmV5b25kRmlsZUxpc3QgPSBbXTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5pbnZhbGlkQ2hhcmFjdGVyc0ZpbGVMaXN0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgbGV0IG5hbWU6IHN0cmluZyA9IHRoaXMubGlzdFRvU3RyaW5nKHRoaXMuaW52YWxpZENoYXJhY3RlcnNGaWxlTGlzdCk7XHJcbiAgICAgIHRoaXMubXNnU2VydmljZS53YXJuaW5nKG5hbWUgKyB0aGlzLmxvY2FsZXBpcGUudHJhbnNmb3JtKCdpbnZhbGlkQ2hhcmFjdGVycycpICsgdGhpcy5sb2NhbGVwaXBlLnRyYW5zZm9ybSgncmVjaG9vc2VGaWxlJykpO1xyXG4gICAgICB0aGlzLmludmFsaWRDaGFyYWN0ZXJzRmlsZUxpc3QgPSBbXTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5pbnZhbGlkRXh0TmFtZXNGaWxlTGlzdC5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGxldCBuYW1lOiBzdHJpbmcgPSB0aGlzLmxpc3RUb1N0cmluZyh0aGlzLmludmFsaWRFeHROYW1lc0ZpbGVMaXN0KTtcclxuICAgICAgdGhpcy5tc2dTZXJ2aWNlLndhcm5pbmcobmFtZSArIHRoaXMubG9jYWxlcGlwZS50cmFuc2Zvcm0oJ2ludmFsaWRFeHROYW1lcycpICsgdGhpcy5sb2NhbGVwaXBlLnRyYW5zZm9ybSgncmVjaG9vc2VGaWxlJykpO1xyXG4gICAgICB0aGlzLmludmFsaWRFeHROYW1lc0ZpbGVMaXN0ID0gW107XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMudW5yZWNvZ25pemVkVHlwZUZpbGVMaXN0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgbGV0IG5hbWU6IHN0cmluZyA9IHRoaXMubGlzdFRvU3RyaW5nKHRoaXMudW5yZWNvZ25pemVkVHlwZUZpbGVMaXN0KTtcclxuICAgICAgdGhpcy5tc2dTZXJ2aWNlLndhcm5pbmcobmFtZSArIHRoaXMubG9jYWxlcGlwZS50cmFuc2Zvcm0oJ1VucmVjb2duaXplZEZpbGVUeXBlJykgKyB0aGlzLmxvY2FsZXBpcGUudHJhbnNmb3JtKCdyZWNob29zZUZpbGUnKSk7XHJcbiAgICAgIHRoaXMudW5yZWNvZ25pemVkVHlwZUZpbGVMaXN0ID0gW107XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5maWxlcyA9IHRoaXMuZmlsZXMuc2xpY2UoKTtcclxuICAgIHRoaXMuZmlsZUFsbFNlbGVjdGVkID0gZmFsc2U7XHJcbiAgICAkZXZlbnQudGFyZ2V0LnZhbHVlID0gJyc7XHJcbiAgICAvLyBsb2FkaW5nLmNsb3NlKCk7XHJcbiAgfVxyXG5cclxuICBzaG93RXJyb3JNZXNzYWdlKGZpbGUpIHtcclxuICAgIHRoaXMubXNnU2VydmljZS5lcnJvcih0aGlzLmxvY2FsZXBpcGUudHJhbnNmb3JtKCd1cGxvYWRGYWlsdXJlJykgKyBmaWxlLmVycm9yTWVzc2FnZSk7XHJcbiAgfVxyXG5cclxuICBoYW5kbGVGaWxlSW5mbyh1dWlkOiBzdHJpbmcsIHNlbGVjdGVkRmlsZSwgZmlsZU5hbWU6IHN0cmluZyk6IGFueSB7XHJcblxyXG4gICAgbGV0IGZpbGVJbmZvOiBGaWxlSW5mbztcclxuXHJcbiAgICBmaWxlSW5mbyA9IHtcclxuICAgICAgaWQ6IHV1aWQsXHJcbiAgICAgIG5hbWU6IGZpbGVOYW1lLFxyXG4gICAgICB0eXBlOiBzZWxlY3RlZEZpbGUudHlwZSxcclxuICAgICAgc291cmNlOiBcIlwiLFxyXG4gICAgICBzaXplOiB0aGlzLmdldEZpbGVTaXplKHNlbGVjdGVkRmlsZS5zaXplKSxcclxuICAgICAgZmlsZVNpemU6IHNlbGVjdGVkRmlsZS5zaXplLFxyXG4gICAgICBwaWNMaXN0RGlzcGxheU5hbWU6IHRoaXMuZ2V0UGljTGlzdERpc3BsYXlOYW1lKGZpbGVOYW1lKSxcclxuICAgICAgcXVldWVMaXN0RGlzcGxheU5hbWU6IHRoaXMuZ2V0UXVldWVEaXNwbGF5TmFtZShmaWxlTmFtZSksXHJcbiAgICAgIC8vY29udGVudDogcmVhZGVyLnJlc3VsdC50b1N0cmluZygpLFxyXG4gICAgICBoYXNVcGxvYWRlZDogZmFsc2UsXHJcbiAgICAgIG1vdXNlT246IGZhbHNlLFxyXG4gICAgICBzZWxlY3RkOiBmYWxzZSxcclxuICAgICAgaXNVcGxvYWRpbmc6IHRydWUsXHJcbiAgICAgIHVwbG9hZFJlc3VsdDogZmFsc2UsXHJcbiAgICAgIHVwbG9hZFByb2Nlc3M6IDAsXHJcbiAgICAgIGVycm9yTWVzc2FnZTogXCJcIixcclxuICAgICAgZXh0ZW5zaW9uRHJvcExpc3RJZDogMCxcclxuICAgICAgZXh0ZW5zaW9uTmFtZTogXCJcIixcclxuICAgICAgc2VjdXJpdHlEcm9wTGlzdElkOiAwLFxyXG4gICAgICBzZWN1cml0eUluZm86IHRoaXMuc2VjdXJpdHlJbmZvTGlzdFswXSxcclxuICAgICAgc3R5bGU6IHt9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuc3RvcmFnZUV4dGVuc2lvbiAhPSBudWxsKVxyXG4gICAgICBmaWxlSW5mby5leHRlbnNpb25OYW1lID0gdGhpcy5kZWZhdWx0UHJvcGVydHlOYW1lO1xyXG5cclxuXHJcbiAgICBsZXQgdHlwZTogc3RyaW5nID0gc2VsZWN0ZWRGaWxlLnR5cGU7XHJcbiAgICBpZiAodHlwZS5pbmNsdWRlcyhcInRpZmZcIikpIHtcclxuICAgICAgdGhpcy5hZGREb2NJbmZvKHNlbGVjdGVkRmlsZSwgZmlsZUluZm8sIERvY1R5cGUuT3RoZXIpO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAodHlwZS5pbmNsdWRlcyhcImltYWdlXCIpKSB7XHJcbiAgICAgIHRoaXMuYWRkRG9jSW5mbyhzZWxlY3RlZEZpbGUsIGZpbGVJbmZvLCBEb2NUeXBlLkltYWdlKTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHR5cGUuaW5jbHVkZXMoXCJ3b3JkXCIpKSB7XHJcbiAgICAgIHRoaXMuYWRkRG9jSW5mbyhzZWxlY3RlZEZpbGUsIGZpbGVJbmZvLCBEb2NUeXBlLldvcmQpO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAodHlwZS5pbmNsdWRlcyhcInBkZlwiKSkge1xyXG4gICAgICB0aGlzLmFkZERvY0luZm8oc2VsZWN0ZWRGaWxlLCBmaWxlSW5mbywgRG9jVHlwZS5QZGYpO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAodHlwZS5pbmNsdWRlcyhcInBsYWluXCIpKSB7XHJcbiAgICAgIHRoaXMuYWRkRG9jSW5mbyhzZWxlY3RlZEZpbGUsIGZpbGVJbmZvLCBEb2NUeXBlLlR4dCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh0eXBlLmluY2x1ZGVzKFwic2hlZXRcIikgfHwgdHlwZS5pbmNsdWRlcyhcImV4Y2VsXCIpKSB7XHJcbiAgICAgIHRoaXMuYWRkRG9jSW5mbyhzZWxlY3RlZEZpbGUsIGZpbGVJbmZvLCBEb2NUeXBlLkV4Y2VsKVxyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAodHlwZS5pbmNsdWRlcyhcInBvd2VycG9pbnRcIikgfHwgdHlwZS5pbmNsdWRlcyhcInByZXNlbnRhdGlvblwiKSkge1xyXG4gICAgICB0aGlzLmFkZERvY0luZm8oc2VsZWN0ZWRGaWxlLCBmaWxlSW5mbywgRG9jVHlwZS5Qb3dlcnBvaW50KTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHR5cGUuaW5jbHVkZXMoXCJ6aXBcIikgfHwgc2VsZWN0ZWRGaWxlLm5hbWUuaW5jbHVkZXMoXCIucmFyXCIpKSB7XHJcbiAgICAgIHRoaXMuYWRkRG9jSW5mbyhzZWxlY3RlZEZpbGUsIGZpbGVJbmZvLCBEb2NUeXBlLlppcCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5hZGREb2NJbmZvKHNlbGVjdGVkRmlsZSwgZmlsZUluZm8sIERvY1R5cGUuT3RoZXIpO1xyXG4gICAgICAvLyBsZXQgbmFtZTogc3RyaW5nID0gc2VsZWN0ZWRGaWxlLm5hbWU7XHJcbiAgICAgIC8vIGxldCBlcnJUeXBlID0gbmFtZS5zdWJzdHJpbmcoc2VsZWN0ZWRGaWxlLm5hbWUubGFzdEluZGV4T2YoJy4nKSk7XHJcbiAgICAgIC8vIHRoaXMuZXJyVHlwZUxpc3QucHVzaChlcnJUeXBlKTtcclxuICAgIH1cclxuICAgIHJldHVybiBmaWxlSW5mbztcclxuICB9XHJcblxyXG4gIHVwbG9hZEZpbGUodXVpZDogc3RyaW5nLCBzZWxlY3RlZEZpbGUsIGZpbGVOYW1lOiBzdHJpbmcsIHN0YXRlOiBGaWxlU3RhdGUgPSBGaWxlU3RhdGUuTmV3KSB7XHJcblxyXG4gICAgbGV0IGZpbGVJbmZvID0gdGhpcy5oYW5kbGVGaWxlSW5mbyh1dWlkLCBzZWxlY3RlZEZpbGUsIGZpbGVOYW1lKTtcclxuXHJcbiAgICBsZXQgdXBsb2FkRmlsZUluZm8gPSBuZXcgVXBsb2FkRmlsZUluZm8oKTtcclxuXHJcbiAgICB1cGxvYWRGaWxlSW5mby5tZXRhZGF0YUlkID0gdXVpZDtcclxuICAgIHVwbG9hZEZpbGVJbmZvLmZpbGVOYW1lID0gZmlsZUluZm8ubmFtZTtcclxuICAgIHVwbG9hZEZpbGVJbmZvLmZpbGVTaXplID0gZmlsZUluZm8uc2l6ZTtcclxuICAgIHVwbG9hZEZpbGVJbmZvLm9yaWdpbmFsU2l6ZSA9IGZpbGVJbmZvLmZpbGVTaXplO1xyXG4gICAgdXBsb2FkRmlsZUluZm8uc3RhdGUgPSBzdGF0ZTtcclxuICAgIHVwbG9hZEZpbGVJbmZvLnNlY3VyaXR5SW5mbyA9IHRoaXMuc2VjdXJpdHlJbmZvTGlzdFswXTtcclxuXHJcblxyXG4gICAgLy/liKTmlq3mmK/lkKbmlK/mjIHliIbniYfkuIrkvKBcclxuICAgIGlmICh0aGlzLmFsbG93ZWRNdWx0aVVwbG9hZCkge1xyXG5cclxuICAgICAgLy/mlK/mjIHliIbniYfkuIrkvKBcclxuICAgICAgbGV0IGluaXRSZXF1ZXN0OiBJbml0TXVsdGlVcGxvYWRSZXF1ZXN0ID0gbmV3IEluaXRNdWx0aVVwbG9hZFJlcXVlc3Q7XHJcblxyXG4gICAgICBpbml0UmVxdWVzdC5wYXRoID0gdGhpcy5mb3JtSWQ7XHJcbiAgICAgIGluaXRSZXF1ZXN0Lm1ldGFkYXRhSWQgPSB1dWlkO1xyXG4gICAgICBpbml0UmVxdWVzdC5yb290SWQgPSB0aGlzLnJvb3RJZDtcclxuICAgICAgaW5pdFJlcXVlc3Quc2l6ZSA9IGZpbGVJbmZvLmZpbGVTaXplO1xyXG4gICAgICBpbml0UmVxdWVzdC5maWxlTmFtZSA9IGZpbGVOYW1lO1xyXG5cclxuICAgICAgLy/liJ3lp4vljJbliIbniYdcclxuICAgICAgdGhpcy5pbml0TXVsdGlVcGxvYWQoaW5pdFJlcXVlc3QpLnN1YnNjcmliZShyZXMgPT4ge1xyXG4gICAgICAgIGlmIChyZXMuZXJyb3IgIT0gbnVsbCkge1xyXG4gICAgICAgICAgdGhpcy5maWxlc1t0aGlzLmZpbGVzLmluZGV4T2YoZmlsZUluZm8pXS51cGxvYWRSZXN1bHQgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMuZmlsZXNbdGhpcy5maWxlcy5pbmRleE9mKGZpbGVJbmZvKV0uaXNVcGxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMuZmlsZXNbdGhpcy5maWxlcy5pbmRleE9mKGZpbGVJbmZvKV0uZXJyb3JNZXNzYWdlID0gcmVzLmVycm9yLk1lc3NhZ2U7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGxldCB1cGxvYWRJZCA9IHJlcy51cGxvYWRJZDtcclxuICAgICAgICAgIGxldCBjaHVua1RvdGFsOiBudW1iZXIgPSBNYXRoLmNlaWwoc2VsZWN0ZWRGaWxlLnNpemUgLyB0aGlzLmJ1ZmZlclNpemUpO1xyXG4gICAgICAgICAgbGV0IGNodW5rSW5kZXg6IG51bWJlciA9IDA7XHJcblxyXG4gICAgICAgICAgbGV0IG11bHRpUmVzdWx0TGlzdDogTXVsdGlVcGxvYWRSZXN1bHRbXSA9IFtdO1xyXG5cclxuICAgICAgICAgIHRoaXMuZmlsZVRvdGFsQ2h1bmtbdXVpZF0gPSBjaHVua1RvdGFsO1xyXG4gICAgICAgICAgdGhpcy51cGxvYWRlZENodW5rW3V1aWRdID0gMDtcclxuXHJcbiAgICAgICAgICB3aGlsZSAoY2h1bmtJbmRleCA8IGNodW5rVG90YWwpIHtcclxuXHJcbiAgICAgICAgICAgIGxldCBuZXh0U2l6ZSA9IE1hdGgubWluKChjaHVua0luZGV4ICsgMSkgKiB0aGlzLmJ1ZmZlclNpemUsIHNlbGVjdGVkRmlsZS5zaXplKTtcclxuICAgICAgICAgICAgbGV0IGZpbGVEYXRhID0gc2VsZWN0ZWRGaWxlLnNsaWNlKGNodW5rSW5kZXggKiB0aGlzLmJ1ZmZlclNpemUsIG5leHRTaXplKTtcclxuXHJcbiAgICAgICAgICAgIGxldCBtdWx0aVJlcXVlc3QgPSBuZXcgTXVsdGlVcGxvYWRSZXF1ZXN0O1xyXG4gICAgICAgICAgICBtdWx0aVJlcXVlc3QubWV0YWRhdGFJZCA9IHV1aWQ7XHJcbiAgICAgICAgICAgIG11bHRpUmVxdWVzdC5yb290SWQgPSB0aGlzLnJvb3RJZDtcclxuICAgICAgICAgICAgbXVsdGlSZXF1ZXN0LnVwbG9hZElkID0gdXBsb2FkSWQ7XHJcbiAgICAgICAgICAgIG11bHRpUmVxdWVzdC5pbmRleCA9IGNodW5rSW5kZXg7XHJcbiAgICAgICAgICAgIG11bHRpUmVxdWVzdC50b3RhbCA9IGNodW5rVG90YWw7XHJcbiAgICAgICAgICAgIG11bHRpUmVxdWVzdC5zaXplID0gZmlsZURhdGEuc2l6ZTtcclxuXHJcbiAgICAgICAgICAgIGxldCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xyXG4gICAgICAgICAgICBmb3JtRGF0YS5hcHBlbmQoJ211bHRpUmVxdWVzdCcsIEpTT04uc3RyaW5naWZ5KG11bHRpUmVxdWVzdCkpO1xyXG4gICAgICAgICAgICBmb3JtRGF0YS5hcHBlbmQoJ2ZpbGUnLCBmaWxlRGF0YSk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLm11bHRpVXBsb2FkKGZvcm1EYXRhKS5zdWJzY3JpYmUocmVzID0+IHtcclxuICAgICAgICAgICAgICBpZiAocmVzLmVycm9yICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZmlsZXNbdGhpcy5maWxlcy5pbmRleE9mKGZpbGVJbmZvKV0udXBsb2FkUmVzdWx0ID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmZpbGVzW3RoaXMuZmlsZXMuaW5kZXhPZihmaWxlSW5mbyldLmlzVXBsb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmZpbGVzW3RoaXMuZmlsZXMuaW5kZXhPZihmaWxlSW5mbyldLmVycm9yTWVzc2FnZSA9IHJlcy5lcnJvci5NZXNzYWdlO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBtdWx0aVJlc3VsdExpc3QucHVzaChyZXMucmVzdWx0KTtcclxuICAgICAgICAgICAgICAgIHRoaXMudXBsb2FkZWRDaHVua1t1dWlkXSsrO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5maWxlc1t0aGlzLmZpbGVzLmluZGV4T2YoZmlsZUluZm8pXS51cGxvYWRQcm9jZXNzID0gTnVtYmVyLnBhcnNlSW50KCh0aGlzLnVwbG9hZGVkQ2h1bmtbdXVpZF0gLyB0aGlzLmZpbGVUb3RhbENodW5rW3V1aWRdICogMTAwKS50b0ZpeGVkKDApKTtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnVwbG9hZGVkQ2h1bmtbdXVpZF0gPT0gdGhpcy5maWxlVG90YWxDaHVua1t1dWlkXSkge1xyXG4gICAgICAgICAgICAgICAgICBpZiAobXVsdGlSZXN1bHRMaXN0Lmxlbmd0aCA9PSB0aGlzLmZpbGVUb3RhbENodW5rW3V1aWRdKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGxldCBjb21wbGV0ZU11bHRpVXBsb2FkUmVxdWVzdDogQ29tcGxldGVNdWx0aVVwbG9hZFJlcXVlc3QgPSBuZXcgQ29tcGxldGVNdWx0aVVwbG9hZFJlcXVlc3Q7XHJcbiAgICAgICAgICAgICAgICAgICAgY29tcGxldGVNdWx0aVVwbG9hZFJlcXVlc3QubWV0YWRhdGFJZCA9IHV1aWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgY29tcGxldGVNdWx0aVVwbG9hZFJlcXVlc3QucGFydExpc3QgPSBtdWx0aVJlc3VsdExpc3Q7XHJcbiAgICAgICAgICAgICAgICAgICAgY29tcGxldGVNdWx0aVVwbG9hZFJlcXVlc3Qucm9vdElkID0gdGhpcy5yb290SWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgY29tcGxldGVNdWx0aVVwbG9hZFJlcXVlc3QudXBsb2FkSWQgPSB1cGxvYWRJZDtcclxuICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZU11bHRpVXBsb2FkUmVxdWVzdC5zaXplID0gZmlsZUluZm8uZmlsZVNpemU7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaGF2ZUV4dGVuc2lvblByb3BlcnR5KVxyXG4gICAgICAgICAgICAgICAgICAgICAgY29tcGxldGVNdWx0aVVwbG9hZFJlcXVlc3QuZXhQcm9wZXJ0eU5hbWUgPSB0aGlzLmRlZmF1bHRQcm9wZXJ0eU5hbWU7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb21wbGV0ZU11bHRpVXBsb2FkKGNvbXBsZXRlTXVsdGlVcGxvYWRSZXF1ZXN0KS5zdWJzY3JpYmUocmVzID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXMuc3RhdHVzICE9IDIwMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZpbGVzW3RoaXMuZmlsZXMuaW5kZXhPZihmaWxlSW5mbyldLnVwbG9hZFJlc3VsdCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZpbGVzW3RoaXMuZmlsZXMuaW5kZXhPZihmaWxlSW5mbyldLmlzVXBsb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmlsZXNbdGhpcy5maWxlcy5pbmRleE9mKGZpbGVJbmZvKV0uZXJyb3JNZXNzYWdlID0gcmVzLmVycm9yLk1lc3NhZ2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZpbGVzW3RoaXMuZmlsZXMuaW5kZXhPZihmaWxlSW5mbyldLnVwbG9hZFJlc3VsdCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmlsZXNbdGhpcy5maWxlcy5pbmRleE9mKGZpbGVJbmZvKV0uaXNVcGxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy51cGxvYWRGaWxlSW5mb0xpc3QgPSB0aGlzLnVwbG9hZEZpbGVJbmZvTGlzdC5jb25jYXQodXBsb2FkRmlsZUluZm8pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnVwbG9hZGVkRmlsZUluZm9MaXN0ID0gdGhpcy51cGxvYWRlZEZpbGVJbmZvTGlzdC5jb25jYXQodXBsb2FkRmlsZUluZm8pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnVwbG9hZGVkRmlsZVRvdGFsKys7XHJcblxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgIC8v5ZCO5Y+w5byC5q2l5ou85o6l5paH5qGjXHJcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5maWxlc1t0aGlzLmZpbGVzLmluZGV4T2YoZmlsZUluZm8pXS51cGxvYWRSZXN1bHQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmZpbGVzW3RoaXMuZmlsZXMuaW5kZXhPZihmaWxlSW5mbyldLmlzVXBsb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5maWxlc1t0aGlzLmZpbGVzLmluZGV4T2YoZmlsZUluZm8pXS5lcnJvck1lc3NhZ2UgPSB0aGlzLmxvY2FsZXBpcGUudHJhbnNmb3JtKCdtaXNtYXRjaENodW5rU2l6ZScpO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSlcclxuXHJcbiAgICAgICAgICAgIGNodW5rSW5kZXggPSBjaHVua0luZGV4ICsgMTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG5cclxuXHJcbiAgICAgIH0pXHJcblxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgbGV0IGVudGl0eSA9IG5ldyBHc3BGb3JtU3RyZWFtRW50aXR5O1xyXG4gICAgICBlbnRpdHkuZm9ybUlkID0gdGhpcy5mb3JtSWQ7XHJcbiAgICAgIGVudGl0eS5tZXRhZGF0YUlkID0gdXVpZDtcclxuICAgICAgZW50aXR5Lm1vZGUgPSBPcGVyYXRpbmdNb2Rlcy5UZW1wO1xyXG4gICAgICBlbnRpdHkucm9vdElkID0gdGhpcy5yb290SWQ7XHJcbiAgICAgIGVudGl0eS5zaXplID0gc2VsZWN0ZWRGaWxlLnNpemU7XHJcbiAgICAgIGVudGl0eS5maWxlTmFtZSA9IGZpbGVOYW1lO1xyXG4gICAgICBpZiAodGhpcy5oYXZlRXh0ZW5zaW9uUHJvcGVydHkpXHJcbiAgICAgICAgZW50aXR5LmV4UHJvcGVydHlOYW1lID0gdGhpcy5kZWZhdWx0UHJvcGVydHlOYW1lO1xyXG5cclxuICAgICAgbGV0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XHJcbiAgICAgIGZvcm1EYXRhLmFwcGVuZCgndXBsb2FkRW50aXR5JywgSlNPTi5zdHJpbmdpZnkoZW50aXR5KSk7XHJcbiAgICAgIGZvcm1EYXRhLmFwcGVuZCgnZmlsZScsIHNlbGVjdGVkRmlsZSk7XHJcblxyXG5cclxuICAgICAgbGV0IGludGVydmFsSWQ7XHJcblxyXG4gICAgICB0aGlzLnVwbG9hZFNpbmdsZUZpbGUoZm9ybURhdGEpLnN1YnNjcmliZShyZXMgPT4ge1xyXG4gICAgICAgIGlmIChyZXMgIT0gbnVsbCkge1xyXG4gICAgICAgICAgdGhpcy5maWxlc1t0aGlzLmZpbGVzLmluZGV4T2YoZmlsZUluZm8pXS51cGxvYWRSZXN1bHQgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMuZmlsZXNbdGhpcy5maWxlcy5pbmRleE9mKGZpbGVJbmZvKV0uaXNVcGxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMuZmlsZXNbdGhpcy5maWxlcy5pbmRleE9mKGZpbGVJbmZvKV0uZXJyb3JNZXNzYWdlID0gcmVzLmVycm9yLk1lc3NhZ2U7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuZmlsZXNbdGhpcy5maWxlcy5pbmRleE9mKGZpbGVJbmZvKV0udXBsb2FkUmVzdWx0ID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuZmlsZXNbdGhpcy5maWxlcy5pbmRleE9mKGZpbGVJbmZvKV0uaXNVcGxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMudXBsb2FkRmlsZUluZm9MaXN0ID0gdGhpcy51cGxvYWRGaWxlSW5mb0xpc3QuY29uY2F0KHVwbG9hZEZpbGVJbmZvKTtcclxuICAgICAgICAgIHRoaXMudXBsb2FkZWRGaWxlSW5mb0xpc3QgPSB0aGlzLnVwbG9hZGVkRmlsZUluZm9MaXN0LmNvbmNhdCh1cGxvYWRGaWxlSW5mbyk7XHJcbiAgICAgICAgICB0aGlzLnVwbG9hZGVkRmlsZVRvdGFsKys7XHJcblxyXG4gICAgICAgIH1cclxuICAgICAgICBjbGVhckludGVydmFsKGludGVydmFsSWQpO1xyXG4gICAgICB9KVxyXG5cclxuICAgICAgbGV0IGluZGV4ID0gLTE7XHJcbiAgICAgIHRoaXMuZmlsZXMuZm9yRWFjaCh4ID0+IHtcclxuICAgICAgICBpZiAoeC5uYW1lID09IGZpbGVJbmZvLm5hbWUpIHtcclxuICAgICAgICAgIGlmIChpbmRleCA9PSAtMSlcclxuICAgICAgICAgICAgaW5kZXggPSB0aGlzLmZpbGVzLmluZGV4T2YoeCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgICBpZiAoaW5kZXggIT0gLTEgJiYgaW5kZXggIT0gdGhpcy5maWxlcy5sZW5ndGggLSAxKSB7XHJcbiAgICAgICAgdGhpcy5maWxlcy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgIHRoaXMudXBsb2FkRmlsZUluZm9MaXN0LnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgdGhpcy51cGxvYWRlZEZpbGVJbmZvTGlzdC5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgIHRoaXMudXBsb2FkZWRGaWxlVG90YWwtLTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaW50ZXJ2YWxJZCA9IHNldEludGVydmFsKCgpID0+IHtcclxuICAgICAgICB0aGlzLmdldFVwbG9hZFByb2Nlc3MoZW50aXR5Lm1ldGFkYXRhSWQpLnN1YnNjcmliZShyZXMgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlcy5lcnJvciAhPSBudWxsKVxyXG4gICAgICAgICAgICB0aGlzLmZpbGVzW3RoaXMuZmlsZXMuaW5kZXhPZihmaWxlSW5mbyldLnVwbG9hZFByb2Nlc3MgPSAxMDtcclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAocmVzIDwgMTApXHJcbiAgICAgICAgICAgICAgcmVzID0gMTA7XHJcbiAgICAgICAgICAgIGlmIChyZXMgPiA5MClcclxuICAgICAgICAgICAgICByZXMgPSA5MDtcclxuICAgICAgICAgICAgdGhpcy5maWxlc1t0aGlzLmZpbGVzLmluZGV4T2YoZmlsZUluZm8pXS51cGxvYWRQcm9jZXNzID0gcmVzO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgIH0sIDIwMCk7XHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcbiAgZ2V0VXBsb2FkUHJvY2VzcyhtZXRhZGF0YUlkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG5cclxuICAgIGxldCB1cmwgPSBcIi9hcGkvcnVudGltZS9kZnMvdjEuMC9mb3JtZG9jL3VwbG9hZC9wcm9jZXNzP21ldGFkYXRhaWQ9XCIgKyBtZXRhZGF0YUlkO1xyXG5cclxuICAgIHJldHVybiB0aGlzLmh0dHBjbGllbnQuZ2V0KHVybCkucGlwZShcclxuICAgICAgdGFwKHJlcyA9PiB7IH0pLFxyXG4gICAgICBjYXRjaEVycm9yKChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IHtcclxuICAgICAgICByZXR1cm4gb2YoZXJyb3IpO1xyXG4gICAgICB9KSk7XHJcbiAgfVxyXG5cclxuICB1cGxvYWRTaW5nbGVGaWxlKGZvcm1kYXRhOiBGb3JtRGF0YSk6IE9ic2VydmFibGU8YW55PiB7XHJcblxyXG4gICAgbGV0IHVybCA9IFwiL2FwaS9ydW50aW1lL2Rmcy92MS4wL2Zvcm1kb2Mvc2luZ2xlXCI7XHJcbiAgICBjb25zdCBiYXNlVXJsID0gQmFzZVBhdGhTZXJ2aWNlLmNvbnZlcnRQYXRoKHVybCk7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwY2xpZW50LnBvc3QoYmFzZVVybCwgZm9ybWRhdGEpLnBpcGUoXHJcbiAgICAgIHRhcChyZXMgPT4geyB9KSxcclxuICAgICAgY2F0Y2hFcnJvcigoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIG9mKGVycm9yKTtcclxuICAgICAgfSkpO1xyXG4gIH1cclxuXHJcbiAgdXBsb2FkU2xpY2VGaWxlKGZvcm1kYXRhOiBGb3JtRGF0YSk6IE9ic2VydmFibGU8YW55PiB7XHJcblxyXG4gICAgbGV0IHVybCA9IFwiL2FwaS9ydW50aW1lL2Rmcy92MS4wL2Zvcm1kb2Mvc2xpY2VcIjtcclxuICAgIGNvbnN0IGJhc2VVcmwgPSBCYXNlUGF0aFNlcnZpY2UuY29udmVydFBhdGgodXJsKTtcclxuICAgIHJldHVybiB0aGlzLmh0dHBjbGllbnQucG9zdChiYXNlVXJsLCBmb3JtZGF0YSkucGlwZShcclxuICAgICAgdGFwKHJlcyA9PiB7IH0pLFxyXG4gICAgICBjYXRjaEVycm9yKChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IHtcclxuICAgICAgICByZXR1cm4gb2YoZXJyb3IpO1xyXG4gICAgICB9KSk7XHJcbiAgfVxyXG5cclxuICBpbml0TXVsdGlVcGxvYWQocmVxdWVzdDogSW5pdE11bHRpVXBsb2FkUmVxdWVzdCk6IE9ic2VydmFibGU8YW55PiB7XHJcblxyXG4gICAgbGV0IHVybCA9IFwiL2FwaS9ydW50aW1lL2Rmcy92MS4wL2Zvcm1kb2MvbXVsdGkvaW5pdFwiO1xyXG4gICAgY29uc3QgYmFzZVVybCA9IEJhc2VQYXRoU2VydmljZS5jb252ZXJ0UGF0aCh1cmwpO1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cGNsaWVudC5wb3N0KGJhc2VVcmwsIHJlcXVlc3QpLnBpcGUoXHJcbiAgICAgIHRhcChyZXMgPT4geyB9KSxcclxuICAgICAgY2F0Y2hFcnJvcigoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIG9mKGVycm9yKTtcclxuICAgICAgfSkpO1xyXG4gIH1cclxuXHJcbiAgbXVsdGlVcGxvYWQoZm9ybWRhdGE6IEZvcm1EYXRhKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuXHJcbiAgICBsZXQgdXJsID0gXCIvYXBpL3J1bnRpbWUvZGZzL3YxLjAvZm9ybWRvYy9tdWx0aS91cGxvYWRcIjtcclxuICAgIGNvbnN0IGJhc2VVcmwgPSBCYXNlUGF0aFNlcnZpY2UuY29udmVydFBhdGgodXJsKTtcclxuICAgIHJldHVybiB0aGlzLmh0dHBjbGllbnQucG9zdChiYXNlVXJsLCBmb3JtZGF0YSkucGlwZShcclxuICAgICAgdGFwKHJlcyA9PiB7IH0pLFxyXG4gICAgICBjYXRjaEVycm9yKChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IHtcclxuICAgICAgICByZXR1cm4gb2YoZXJyb3IpO1xyXG4gICAgICB9KSk7XHJcbiAgfVxyXG5cclxuICBjb21wbGV0ZU11bHRpVXBsb2FkKHJlcXVlc3Q6IENvbXBsZXRlTXVsdGlVcGxvYWRSZXF1ZXN0KTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuXHJcbiAgICBsZXQgdXJsID0gXCIvYXBpL3J1bnRpbWUvZGZzL3YxLjAvZm9ybWRvYy9tdWx0aS9jb21wbGV0ZVwiO1xyXG4gICAgY29uc3QgYmFzZVVybCA9IEJhc2VQYXRoU2VydmljZS5jb252ZXJ0UGF0aCh1cmwpO1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cGNsaWVudC5wb3N0KGJhc2VVcmwsIHJlcXVlc3QpLnBpcGUoXHJcbiAgICAgIHRhcChyZXMgPT4geyB9KSxcclxuICAgICAgY2F0Y2hFcnJvcigoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIG9mKGVycm9yKTtcclxuICAgICAgfSkpO1xyXG4gIH1cclxuXHJcblxyXG5cclxuICBzZWxlY3RBbGxGaWxlKCkge1xyXG5cclxuICAgIGlmICghdGhpcy5maWxlQWxsU2VsZWN0ZWQpIHtcclxuICAgICAgdGhpcy5maWxlcy5mb3JFYWNoKGVsZW1lbnQgPT4ge1xyXG5cclxuICAgICAgICBlbGVtZW50LnNlbGVjdGQgPSB0cnVlO1xyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy5maWxlQWxsU2VsZWN0ZWQgPSB0cnVlO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkRmlsZUNvdW50ID0gdGhpcy5maWxlcy5sZW5ndGg7XHJcblxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5maWxlcy5mb3JFYWNoKGVsZW1lbnQgPT4ge1xyXG5cclxuICAgICAgICBlbGVtZW50LnNlbGVjdGQgPSBmYWxzZTtcclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMuZmlsZUFsbFNlbGVjdGVkID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRGaWxlQ291bnQgPSAwO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG4gIGNoZWNrb3V0U2VsZWN0RmlsZShmaWxlOiBGaWxlSW5mbykge1xyXG4gICAgLy8gbGV0IG9iajogYW55ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZmlsZU5hbWUpO1xyXG4gICAgZmlsZS5zZWxlY3RkID0gIWZpbGUuc2VsZWN0ZDtcclxuICAgIGlmIChmaWxlLnNlbGVjdGQpXHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRGaWxlQ291bnQrKztcclxuICAgIGVsc2VcclxuICAgICAgdGhpcy5zZWxlY3RlZEZpbGVDb3VudC0tO1xyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRGaWxlQ291bnQgPT0gdGhpcy5maWxlcy5sZW5ndGgpIHtcclxuICAgICAgdGhpcy5maWxlQWxsU2VsZWN0ZWQgPSB0cnVlO1xyXG4gICAgICAvL3RoaXMuaXNGaWxlQWxsU2VsZWN0ZWQoKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLmZpbGVBbGxTZWxlY3RlZCA9IGZhbHNlO1xyXG4gICAgICAvL3RoaXMuaXNGaWxlQWxsU2VsZWN0ZWQoKTtcclxuICAgIH1cclxuXHJcbiAgfVxyXG5cclxuICBsaXN0RGVsZXRlRmlsZShmaWxlSW5mbzogRmlsZUluZm8pIHtcclxuICAgIGlmIChmaWxlSW5mby5zZWxlY3RkKVxyXG4gICAgICB0aGlzLnNlbGVjdGVkRmlsZUNvdW50LS07XHJcbiAgICAvL2NvbnNvbGUubG9nKGZpbGVOYW1lKTtcclxuICAgIHRoaXMuZmlsZXMuc3BsaWNlKHRoaXMuZmlsZXMuaW5kZXhPZihmaWxlSW5mbyksIDEpO1xyXG4gICAgaWYgKGZpbGVJbmZvLnVwbG9hZFJlc3VsdCkge1xyXG4gICAgICBsZXQgaWRMaXN0OiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgICBpZExpc3QucHVzaChmaWxlSW5mby5pZCk7XHJcbiAgICAgIHRoaXMudXBsb2FkU2VydmljZS5jYW5jZWwoaWRMaXN0LCB0aGlzLnJvb3RJZCkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgICB0aGlzLnVwbG9hZEZpbGVJbmZvTGlzdC5zcGxpY2UodGhpcy51cGxvYWRGaWxlSW5mb0xpc3QuaW5kZXhPZih0aGlzLnVwbG9hZEZpbGVJbmZvTGlzdC5maWx0ZXIoeCA9PiB4LmZpbGVOYW1lID09IGZpbGVJbmZvLm5hbWUpWzBdKSwgMSk7XHJcbiAgICAgIHRoaXMudXBsb2FkZWRGaWxlSW5mb0xpc3Quc3BsaWNlKHRoaXMudXBsb2FkZWRGaWxlSW5mb0xpc3QuaW5kZXhPZih0aGlzLnVwbG9hZGVkRmlsZUluZm9MaXN0LmZpbHRlcih4ID0+IHguZmlsZU5hbWUgPT0gZmlsZUluZm8ubmFtZSlbMF0pLCAxKTtcclxuICAgICAgdGhpcy51cGxvYWRlZEZpbGVUb3RhbC0tO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRGaWxlQ291bnQgPT0gMClcclxuICAgICAgdGhpcy5maWxlQWxsU2VsZWN0ZWQgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIGxpc3RNdWx0aXBsZURlbGV0ZUZpbGUoKSB7XHJcbiAgICBsZXQgc2VsZWN0ZWRGaWxlOiBGaWxlSW5mb1tdID0gW107XHJcbiAgICB0aGlzLmZpbGVzLmZvckVhY2goZWxlbWVudCA9PiB7XHJcbiAgICAgIGxldCBvYmo6IGFueSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGVsZW1lbnQubmFtZSk7XHJcbiAgICAgIGlmIChvYmouY2hlY2tlZClcclxuICAgICAgICBzZWxlY3RlZEZpbGUucHVzaChlbGVtZW50KTtcclxuICAgIH0pXHJcbiAgICBsZXQgbWV0YWRhdGFMaXN0OiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgc2VsZWN0ZWRGaWxlLmZvckVhY2goZWxlbWVudCA9PiB7XHJcbiAgICAgIG1ldGFkYXRhTGlzdC5wdXNoKGVsZW1lbnQuaWQpO1xyXG4gICAgICB0aGlzLmZpbGVzLnNwbGljZSh0aGlzLmZpbGVzLmluZGV4T2YoZWxlbWVudCksIDEpO1xyXG4gICAgICBpZiAoZWxlbWVudC51cGxvYWRSZXN1bHQpIHtcclxuXHJcbiAgICAgICAgdGhpcy51cGxvYWRGaWxlSW5mb0xpc3Quc3BsaWNlKHRoaXMudXBsb2FkRmlsZUluZm9MaXN0LmluZGV4T2YodGhpcy51cGxvYWRGaWxlSW5mb0xpc3QuZmlsdGVyKHggPT4geC5maWxlTmFtZSA9PSBlbGVtZW50Lm5hbWUpWzBdKSwgMSk7XHJcbiAgICAgICAgdGhpcy51cGxvYWRlZEZpbGVJbmZvTGlzdC5zcGxpY2UodGhpcy51cGxvYWRlZEZpbGVJbmZvTGlzdC5pbmRleE9mKHRoaXMudXBsb2FkZWRGaWxlSW5mb0xpc3QuZmlsdGVyKHggPT4geC5maWxlTmFtZSA9PSBlbGVtZW50Lm5hbWUpWzBdKSwgMSk7XHJcbiAgICAgICAgdGhpcy51cGxvYWRlZEZpbGVUb3RhbC0tO1xyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gICAgdGhpcy51cGxvYWRTZXJ2aWNlLmNhbmNlbChtZXRhZGF0YUxpc3QsIHRoaXMucm9vdElkKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICBsZXQgYWxsQm94OiBhbnkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImFsbENoZWNrQm94XCIpO1xyXG4gICAgaWYgKGFsbEJveCAhPSBudWxsKVxyXG4gICAgICBhbGxCb3guY2hlY2tlZCA9IGZhbHNlO1xyXG4gICAgdGhpcy5zZWxlY3RlZEZpbGVDb3VudCA9IDA7XHJcbiAgICB0aGlzLmZpbGVBbGxTZWxlY3RlZCA9IGZhbHNlO1xyXG4gIH1cclxuXHJcblxyXG4gIGdldFBpY0xpc3REaXNwbGF5TmFtZShmaWxlTmFtZTogc3RyaW5nKSB7XHJcbiAgICBpZiAoZmlsZU5hbWUubGVuZ3RoIDw9IDEwKVxyXG4gICAgICByZXR1cm4gZmlsZU5hbWU7XHJcbiAgICBlbHNlIHtcclxuICAgICAgbGV0IGhlYWRDb250ZW50ID0gZmlsZU5hbWUuc3Vic3RyaW5nKDAsIDIpO1xyXG4gICAgICBsZXQgdGFpbENvbnRlbnQgPSBmaWxlTmFtZS5zdWJzdHJpbmcoZmlsZU5hbWUubGFzdEluZGV4T2YoJy4nKSAtIDIpO1xyXG4gICAgICByZXR1cm4gaGVhZENvbnRlbnQgKyBcIuKAplwiICsgdGFpbENvbnRlbnQ7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRRdWV1ZURpc3BsYXlOYW1lKGZpbGVOYW1lOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiBmaWxlTmFtZTtcclxuICB9XHJcblxyXG4gIGFkZERvY0luZm8oc2VsZWN0ZEZpbGUsIGZpbGVJbmZvOiBGaWxlSW5mbywgZG9jVHlwZTogRG9jVHlwZSkge1xyXG5cclxuICAgIHN3aXRjaCAoZG9jVHlwZSkge1xyXG4gICAgICBjYXNlIERvY1R5cGUuV29yZDoge1xyXG4gICAgICAgIGZpbGVJbmZvLnNvdXJjZSA9IHRoaXMuY3JlYXRlQmFzZVVybChcIi9wbGF0Zm9ybS9ydW50aW1lL2Rmcy9pbWFnZXMvd29yZC5wbmdcIik7XHJcbiAgICAgICAgdGhpcy5maWxlcy5wdXNoKGZpbGVJbmZvKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG5cclxuICAgICAgY2FzZSBEb2NUeXBlLlBkZjoge1xyXG4gICAgICAgIGZpbGVJbmZvLnNvdXJjZSA9IHRoaXMuY3JlYXRlQmFzZVVybChcIi9wbGF0Zm9ybS9ydW50aW1lL2Rmcy9pbWFnZXMvcGRmLnBuZ1wiKTtcclxuICAgICAgICB0aGlzLmZpbGVzLnB1c2goZmlsZUluZm8pO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjYXNlIERvY1R5cGUuRXhjZWw6IHtcclxuICAgICAgICBmaWxlSW5mby5zb3VyY2UgPSB0aGlzLmNyZWF0ZUJhc2VVcmwoXCIvcGxhdGZvcm0vcnVudGltZS9kZnMvaW1hZ2VzL2V4Y2VsLnBuZ1wiKTtcclxuICAgICAgICB0aGlzLmZpbGVzLnB1c2goZmlsZUluZm8pO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjYXNlIERvY1R5cGUuVHh0OiB7XHJcbiAgICAgICAgZmlsZUluZm8uc291cmNlID0gdGhpcy5jcmVhdGVCYXNlVXJsKFwiL3BsYXRmb3JtL3J1bnRpbWUvZGZzL2ltYWdlcy90eHQucG5nXCIpO1xyXG4gICAgICAgIHRoaXMuZmlsZXMucHVzaChmaWxlSW5mbyk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNhc2UgRG9jVHlwZS5aaXA6IHtcclxuICAgICAgICBmaWxlSW5mby5zb3VyY2UgPSB0aGlzLmNyZWF0ZUJhc2VVcmwoXCIvcGxhdGZvcm0vcnVudGltZS9kZnMvaW1hZ2VzL3ppcC5wbmdcIik7XHJcbiAgICAgICAgdGhpcy5maWxlcy5wdXNoKGZpbGVJbmZvKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG5cclxuICAgICAgY2FzZSBEb2NUeXBlLlBvd2VycG9pbnQ6IHtcclxuICAgICAgICBmaWxlSW5mby5zb3VyY2UgPSB0aGlzLmNyZWF0ZUJhc2VVcmwoXCIvcGxhdGZvcm0vcnVudGltZS9kZnMvaW1hZ2VzL3BwdC5wbmdcIik7XHJcbiAgICAgICAgdGhpcy5maWxlcy5wdXNoKGZpbGVJbmZvKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG5cclxuICAgICAgY2FzZSBEb2NUeXBlLk90aGVyOiB7XHJcbiAgICAgICAgZmlsZUluZm8uc291cmNlID0gdGhpcy5jcmVhdGVCYXNlVXJsKFwiL3BsYXRmb3JtL3J1bnRpbWUvZGZzL2ltYWdlcy9maWxlLnBuZ1wiKTtcclxuICAgICAgICB0aGlzLmZpbGVzLnB1c2goZmlsZUluZm8pO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjYXNlIERvY1R5cGUuSW1hZ2U6IHtcclxuICAgICAgICBsZXQgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcclxuICAgICAgICByZWFkZXIucmVhZEFzRGF0YVVSTChzZWxlY3RkRmlsZSk7XHJcbiAgICAgICAgcmVhZGVyLm9ubG9hZCA9IChfZXZlbnQpID0+IHtcclxuICAgICAgICAgIGxldCBpbWdVcmwgPSByZWFkZXIucmVzdWx0O1xyXG4gICAgICAgICAgaWYgKHRoaXMuaW5qZWN0b3IgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICBsZXQgc2FuaXRpemVyID0gdGhpcy5pbmplY3Rvci5nZXQoRG9tU2FuaXRpemVyKTtcclxuICAgICAgICAgICAgaW1nVXJsID0gc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RSZXNvdXJjZVVybChpbWdVcmwpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZmlsZUluZm8uc291cmNlID0gaW1nVXJsO1xyXG4gICAgICAgICAgZmlsZUluZm8uc3R5bGUgPSB7IFwibWF4LXdpZHRoXCI6IFwiMTIwcHhcIiwgXCJtYXgtaGVpZ2h0XCI6IFwiMTE4cHhcIiB9XHJcbiAgICAgICAgICB0aGlzLmZpbGVzLnB1c2goZmlsZUluZm8pO1xyXG5cclxuICAgICAgICAgIC8v5Zug5Li65byC5q2l5aSE55CG55qE5beu5byC77yM6KGl5YG/5LiA5qyh5Yig6ZmkXHJcbiAgICAgICAgICBsZXQgaW5kZXggPSAtMTtcclxuICAgICAgICAgIHRoaXMuZmlsZXMuZm9yRWFjaCh4ID0+IHtcclxuICAgICAgICAgICAgaWYgKHgubmFtZSA9PSBmaWxlSW5mby5uYW1lKSB7XHJcbiAgICAgICAgICAgICAgaWYgKGluZGV4ID09IC0xKVxyXG4gICAgICAgICAgICAgICAgaW5kZXggPSB0aGlzLmZpbGVzLmluZGV4T2YoeCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICBpZiAoaW5kZXggIT0gLTEgJiYgaW5kZXggIT0gdGhpcy5maWxlcy5sZW5ndGggLSAxKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZmlsZXMuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICAgICAgdGhpcy51cGxvYWRGaWxlSW5mb0xpc3Quc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICAgICAgdGhpcy51cGxvYWRlZEZpbGVJbmZvTGlzdC5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgfVxyXG5cclxuICBsaXN0VG9TdHJpbmcoc3RyTGlzdDogc3RyaW5nW10pIHtcclxuICAgIGNvbnN0IHJlc3VsdCA9IHN0ckxpc3QuZmlsdGVyKGl0ZW0gPT4gaXRlbS50cmltKCkgIT09ICcnKTtcclxuICAgIGxldCBuYW1lOiBzdHJpbmcgPSBcIlwiO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZXN1bHQubGVuZ3RoOyBpKyspIHtcclxuICAgICAgbmFtZSArPSByZXN1bHRbaV0gKyAoaSA9PT0gcmVzdWx0Lmxlbmd0aCAtIDEgPyBcIlwiIDogXCIsXCIpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG5hbWU7XHJcbiAgfVxyXG5cclxuICBzZWN1cml0eUNoYW5nZSgkZXZlbnQ6IGFueSwgZmlsZTogRmlsZUluZm8pIHtcclxuICAgIGZpbGUuc2VjdXJpdHlJbmZvID0gJGV2ZW50LmRhdGE7XHJcbiAgICBsZXQgdXBsb2FkRmlsZSA9IHRoaXMudXBsb2FkRmlsZUluZm9MaXN0LmZpbHRlcih4ID0+IHgubWV0YWRhdGFJZCA9IGZpbGUuaWQpWzBdO1xyXG4gICAgdXBsb2FkRmlsZS5zZWN1cml0eUluZm8gPSAkZXZlbnQuZGF0YTtcclxuICB9XHJcblxyXG5cclxuICBleFN0b3JhZ2VGaWxlTGlzdDogRXhTdG9yYWdlRmlsZUluZm9bXSA9IFtdO1xyXG5cclxuICB0eXBlQ2hhbmdlKCRldmVudDogYW55LCBmaWxlOiBGaWxlSW5mbykge1xyXG4gICAgZmlsZS5leHRlbnNpb25OYW1lID0gJGV2ZW50LmRhdGEubmFtZTtcclxuICAgIGxldCBleFN0b3JhZ2VGaWxlSW5mbzogRXhTdG9yYWdlRmlsZUluZm8gPSBuZXcgRXhTdG9yYWdlRmlsZUluZm87XHJcbiAgICBpZiAoZmlsZS5leHRlbnNpb25OYW1lID09IHRoaXMuc3RvcmFnZUV4dGVuc2lvbi5kZWZhdWx0UHJvcGVydHlOYW1lKSB7XHJcbiAgICAgIGlmICh0aGlzLmV4U3RvcmFnZUZpbGVMaXN0LmZpbHRlcih4ID0+IHgubWV0YWRhdGFJZCA9PSBmaWxlLmlkKS5sZW5ndGggPiAwKVxyXG4gICAgICAgIHRoaXMuZXhTdG9yYWdlRmlsZUxpc3Quc3BsaWNlKHRoaXMuZXhTdG9yYWdlRmlsZUxpc3QuZmluZEluZGV4KHggPT4geC5tZXRhZGF0YUlkID09IGZpbGUuaWQpLCAxKVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKHRoaXMuZXhTdG9yYWdlRmlsZUxpc3QuZmlsdGVyKHggPT4geC5tZXRhZGF0YUlkID09IGZpbGUuaWQpLmxlbmd0aCA+IDApIHtcclxuICAgICAgICBleFN0b3JhZ2VGaWxlSW5mbyA9IHRoaXMuZXhTdG9yYWdlRmlsZUxpc3QuZmlsdGVyKHggPT4geC5tZXRhZGF0YUlkID09IGZpbGUuaWQpWzBdO1xyXG4gICAgICAgIGV4U3RvcmFnZUZpbGVJbmZvLmV4UHJvcGVydHlOYW1lID0gZmlsZS5leHRlbnNpb25OYW1lO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGV4U3RvcmFnZUZpbGVJbmZvLm1ldGFkYXRhSWQgPSBmaWxlLmlkO1xyXG4gICAgICAgIGV4U3RvcmFnZUZpbGVJbmZvLmV4UHJvcGVydHlOYW1lID0gZmlsZS5leHRlbnNpb25OYW1lO1xyXG4gICAgICAgIHRoaXMuZXhTdG9yYWdlRmlsZUxpc3QucHVzaChleFN0b3JhZ2VGaWxlSW5mbyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHVwbG9hZCgpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgaWYgKHRoaXMudXBsb2FkZWRGaWxlVG90YWwgIT0gdGhpcy5maWxlcy5maWx0ZXIoeCA9PiB4LmlzVXBsb2FkaW5nIHx8IHgudXBsb2FkUmVzdWx0KS5sZW5ndGgpIHtcclxuXHJcbiAgICAgIHRoaXMubXNnU2VydmljZS53YXJuaW5nKHRoaXMubG9jYWxlcGlwZS50cmFuc2Zvcm0oJ3dhaXQnKSk7XHJcbiAgICAgIHJldHVybiBvZihmYWxzZSk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5oYXZlU2VjdXJpdHlJbmZvKSB7XHJcbiAgICAgIHRoaXMudXBsb2FkU2VydmljZS5zYXZlU2VjdXJpdHlJbmZvKHRoaXMudXBsb2FkRmlsZUluZm9MaXN0LCB0aGlzLnJvb3RJZCkuc3Vic2NyaWJlKCk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5zdG9yYWdlRXh0ZW5zaW9uID09IG51bGwpXHJcbiAgICAgIHJldHVybiBvZih0aGlzLnVwbG9hZEZpbGVJbmZvTGlzdCk7XHJcbiAgICBlbHNlIHtcclxuICAgICAgaWYgKHRoaXMuZXhTdG9yYWdlRmlsZUxpc3QubGVuZ3RoID09IDApXHJcbiAgICAgICAgcmV0dXJuIG9mKHRoaXMudXBsb2FkRmlsZUluZm9MaXN0KTtcclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgY29uc3QgbG9hZGluZyA9IHRoaXMubG9hZFNlcnZpY2Uuc2hvdyh7XHJcbiAgICAgICAgICBtZXNzYWdlOiB0aGlzLmxvY2FsZXBpcGUudHJhbnNmb3JtKCdzYXZlVG8nKSArIHRoaXMuc3RvcmFnZUV4dGVuc2lvbi5leHRlbnNpb25OYW1lXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudXBsb2FkU2VydmljZS5jaGFuZ2VTdG9yYWdlSW5zdGFuY2UodGhpcy5leFN0b3JhZ2VGaWxlTGlzdCwgdGhpcy5yb290SWQpLnBpcGUoXHJcbiAgICAgICAgICBtYXAocmVzID0+IHtcclxuICAgICAgICAgICAgLy8gaWYgKHJlcyAhPSBudWxsKVxyXG4gICAgICAgICAgICAvLyAgIHRoaXMubXNnU2VydmljZS5lcnJvcign5L+d5a2Y5YiwJyArIHRoaXMuc3RvcmFnZUV4dGVuc2lvbi5leHRlbnNpb25OYW1lICsgXCLlpLHotKXvvIzkuIrkvKDmlofku7boh6rliqjkv53lrZjliLBcIiArIHRoaXMuc3RvcmFnZUV4dGVuc2lvbi5kZWZhdWx0UHJvcGVydHlOYW1lICsgXCLlrZjlgqjjgIJcIiArIHJlcy5lcnJvci5NZXNzYWdlKTtcclxuICAgICAgICAgICAgbG9hZGluZy5jbG9zZSgpO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy51cGxvYWRGaWxlSW5mb0xpc3Q7XHJcbiAgICAgICAgICB9KSlcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2FuY2VsKCkge1xyXG4gICAgaWYgKHRoaXMudXBsb2FkRmlsZUluZm9MaXN0Lmxlbmd0aCA9PSAwKVxyXG4gICAgICByZXR1cm47XHJcbiAgICB0aGlzLnVwbG9hZEZpbGVJbmZvTGlzdC5mb3JFYWNoKGVsZW1lbnQgPT4ge1xyXG4gICAgICB0aGlzLm1ldGFkYXRhSWRMaXN0LnB1c2goZWxlbWVudC5tZXRhZGF0YUlkKTtcclxuICAgIH0pXHJcbiAgICB0aGlzLnVwbG9hZFNlcnZpY2UuY2FuY2VsKHRoaXMubWV0YWRhdGFJZExpc3QsIHRoaXMucm9vdElkKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgfVxyXG5cclxuICBnZXRVcGxvYWRGaWxlSW5mb0xpc3QoKSB7XHJcbiAgICByZXR1cm4gdGhpcy51cGxvYWRGaWxlSW5mb0xpc3Q7XHJcbiAgfVxyXG5cclxuICBkZWxldGUoZmlsZSkge1xyXG4gICAgdGhpcy5maWxlcy5zcGxpY2UodGhpcy5maWxlcy5pbmRleE9mKGZpbGUpLCAxKTtcclxuICAgIGlmIChmaWxlLnVwbG9hZFJlc3VsdClcclxuICAgICAgdGhpcy51cGxvYWRlZEZpbGVUb3RhbC0tO1xyXG4gICAgaWYgKHRoaXMuZXhTdG9yYWdlRmlsZUxpc3QuZmlsdGVyKHggPT4geC5tZXRhZGF0YUlkID09IGZpbGUuaWQpLmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy5leFN0b3JhZ2VGaWxlTGlzdC5zcGxpY2UodGhpcy5leFN0b3JhZ2VGaWxlTGlzdC5maW5kSW5kZXgoeCA9PiB4Lm1ldGFkYXRhSWQgPT0gZmlsZS5pZCksIDEpO1xyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG4gIGdldEZpbGVTaXplKHNpemU6IG51bWJlcikge1xyXG4gICAgaWYgKHNpemUgPCAxMDI0MDApXHJcbiAgICAgIHJldHVybiAoc2l6ZSAvIDEwMjQpLnRvRml4ZWQoMSkgKyBcIktcIjtcclxuICAgIGVsc2UgaWYgKHNpemUgPCAxMDI0ICogMTAyNClcclxuICAgICAgcmV0dXJuIChzaXplIC8gMTAyNCkudG9GaXhlZCgwKSArIFwiS1wiO1xyXG4gICAgZWxzZSBpZiAoc2l6ZSA8IDEwMCAqIDEwMjQgKiAxMDI0KVxyXG4gICAgICByZXR1cm4gKHNpemUgLyAxMDI0IC8gMTAyNCkudG9GaXhlZCgxKSArIFwiTVwiO1xyXG4gICAgZWxzZSBpZiAoc2l6ZSA8IDEwMjQgKiAxMDI0ICogMTAyNClcclxuICAgICAgcmV0dXJuIChzaXplIC8gMTAyNCAvIDEwMjQpLnRvRml4ZWQoMCkgKyBcIk1cIjtcclxuICAgIGVsc2VcclxuICAgICAgcmV0dXJuIChzaXplIC8gMTAyNCAvIDEwMjQgLyAxMDI0KS50b0ZpeGVkKDEpICsgXCJHXCI7XHJcbiAgfVxyXG4gIHNob3dCeUdyb3VwKCkge1xyXG4gICAgdGhpcy5zaG93VHlwZSA9IDA7XHJcbiAgICAvLyB0aGlzLnNlbGVjdGVkRmlsZUNvdW50ID0gMDtcclxuICB9XHJcblxyXG4gIHNob3dCeUxpc3QoKSB7XHJcbiAgICB0aGlzLnNob3dUeXBlID0gMTtcclxuICAgIC8vIHRoaXMuc2VsZWN0ZWRGaWxlQ291bnQgPSAwO1xyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRGaWxlQ291bnQgIT0gMCAmJiB0aGlzLnNlbGVjdGVkRmlsZUNvdW50ID09IHRoaXMuZmlsZXMubGVuZ3RoKSB7XHJcbiAgICAgIHRoaXMuZmlsZUFsbFNlbGVjdGVkID0gdHJ1ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG1vdXNlT3ZlcihmaWxlKSB7XHJcbiAgICBmaWxlLm1vdXNlT24gPSB0cnVlO1xyXG4gIH1cclxuICBtb3VzZU91dChmaWxlKSB7XHJcbiAgICBmaWxlLm1vdXNlT24gPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIGNyZWF0ZUJhc2VVcmwob2xkVXJsOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IGJhc2VVcmwgPSBCYXNlUGF0aFNlcnZpY2UuY29udmVydFBhdGgob2xkVXJsKVxyXG4gICAgcmV0dXJuIGJhc2VVcmw7XHJcbiAgfVxyXG59XHJcblxyXG5cclxuIl19