@universis/ngx-tables 0.6.7 → 0.6.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (27) hide show
  1. package/bundles/universis-ngx-tables.umd.js +252 -84
  2. package/bundles/universis-ngx-tables.umd.js.map +1 -1
  3. package/bundles/universis-ngx-tables.umd.min.js +1 -1
  4. package/bundles/universis-ngx-tables.umd.min.js.map +1 -1
  5. package/esm2015/lib/components/advanced-select/advanced-select.component.js +2 -2
  6. package/esm2015/lib/components/advanced-table/advanced-table-search.component.js +3 -3
  7. package/esm2015/lib/components/advanced-table/advanced-table.component.js +18 -6
  8. package/esm2015/lib/components/advanced-table/advanced-table.formatters.interface.js +4 -2
  9. package/esm2015/lib/components/advanced-table/advanced-table.formatters.js +195 -58
  10. package/esm2015/lib/components/advanced-table-modal/advanced-table-modal-base.component.js +17 -10
  11. package/esm2015/lib/tables.module.js +1 -3
  12. package/esm5/lib/components/advanced-select/advanced-select.component.js +2 -2
  13. package/esm5/lib/components/advanced-table/advanced-table-search.component.js +3 -3
  14. package/esm5/lib/components/advanced-table/advanced-table.component.js +18 -6
  15. package/esm5/lib/components/advanced-table/advanced-table.formatters.interface.js +4 -2
  16. package/esm5/lib/components/advanced-table/advanced-table.formatters.js +202 -67
  17. package/esm5/lib/components/advanced-table-modal/advanced-table-modal-base.component.js +12 -5
  18. package/esm5/lib/tables.module.js +1 -3
  19. package/fesm2015/universis-ngx-tables.js +233 -77
  20. package/fesm2015/universis-ngx-tables.js.map +1 -1
  21. package/fesm5/universis-ngx-tables.js +233 -81
  22. package/fesm5/universis-ngx-tables.js.map +1 -1
  23. package/lib/components/advanced-table/advanced-table.formatters.d.ts +15 -0
  24. package/lib/components/advanced-table/advanced-table.formatters.interface.d.ts +3 -1
  25. package/lib/components/advanced-table-modal/advanced-table-modal-base.component.d.ts +5 -1
  26. package/package.json +1 -1
  27. package/universis-ngx-tables.metadata.json +1 -1
@@ -78,7 +78,7 @@ export class AdvancedTableComponent {
78
78
  this.configChanges = new BehaviorSubject(null);
79
79
  this.height = 800;
80
80
  this.showActions = true;
81
- this.autoLoad = false;
81
+ this.autoLoad = true;
82
82
  this.load = new EventEmitter();
83
83
  this.init = new EventEmitter();
84
84
  this.reload = new EventEmitter();
@@ -516,7 +516,7 @@ export class AdvancedTableComponent {
516
516
  });
517
517
  if (items.length > 0) {
518
518
  Object.assign(columnDefinition, {
519
- afterRender(cell, cellData, rowData, rowIndex, colIndex) {
519
+ createdCell(cell, cellData, rowData, rowIndex, colIndex) {
520
520
  items.forEach((columnFormatter) => {
521
521
  const formatter = self._columnFormatters[columnFormatter.formatter];
522
522
  if (formatter && typeof formatter.afterRender === 'function') {
@@ -534,6 +534,14 @@ export class AdvancedTableComponent {
534
534
  render: formatter.render.bind(column),
535
535
  });
536
536
  }
537
+ if (formatter && typeof formatter.afterRender === 'function') {
538
+ Object.assign(columnDefinition, {
539
+ render: formatter.render.bind(column),
540
+ });
541
+ Object.assign(columnDefinition, {
542
+ createdCell: formatter.afterRender.bind(column),
543
+ });
544
+ }
537
545
  }
538
546
  return columnDefinition;
539
547
  });
@@ -593,7 +601,8 @@ export class AdvancedTableComponent {
593
601
  self.select.emit(row);
594
602
  });
595
603
  }
596
- tableElement.find('input.s-row').on('click', this.onSelectionChange.bind(this));
604
+ const elements = tableElement.find('input.s-row');
605
+ elements.off('click').on('click', this.onSelectionChange.bind(this));
597
606
  // make selection on current page
598
607
  const key = this.config.columns[0].property;
599
608
  if (this.selected.length > 0) {
@@ -805,6 +814,7 @@ export class AdvancedTableComponent {
805
814
  }
806
815
  else {
807
816
  Object.assign(settings, {
817
+ scrollY: this.scrollY,
808
818
  paging: this.paging,
809
819
  pageLength: this.pageLength,
810
820
  });
@@ -911,7 +921,7 @@ export class AdvancedTableComponent {
911
921
  if (item) {
912
922
  // redraw row
913
923
  row.data(item);
914
- jQuery(row.node()).find(':checkbox').on('click', this.onSelectionChange.bind(this));
924
+ jQuery(row.node()).find(':checkbox').off('click').on('click', this.onSelectionChange.bind(this));
915
925
  // if row is already selected
916
926
  if (checked) {
917
927
  this.selectRow(row, true);
@@ -949,6 +959,7 @@ export class AdvancedTableComponent {
949
959
  if (findItemIndex < 0) {
950
960
  // add row to selected rows
951
961
  this.selected.push(row);
962
+ this.selectedItems.emit(this.selected);
952
963
  }
953
964
  }
954
965
  else {
@@ -962,6 +973,7 @@ export class AdvancedTableComponent {
962
973
  });
963
974
  if (findItemIndex < 0) {
964
975
  this.unselected.push(row);
976
+ this.selectedItems.emit(this.selected);
965
977
  }
966
978
  }
967
979
  }
@@ -1043,7 +1055,7 @@ AdvancedTableComponent.decorators = [
1043
1055
  </div>
1044
1056
  `,
1045
1057
  encapsulation: ViewEncapsulation.None,
1046
- styles: ["table.dataTable thead .sorting{background-image:none}table.dataTable thead .sorting_asc{background-position:95% 60%;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAYAAABWdVznAAAACXBIWXMAAAsSAAALEgHS3X78AAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAEtJREFUKJFjYBgywAOKMQALFjE/BgaGTCibjYGBYRM+kz0ZGBh2MTAw8DAwMHAxMDBsY2BgCCBGMQzg1IRNMV5NuVAJXIALqmYwAgBBkAlPRCLcLwAAAABJRU5ErkJggg==)}table.dataTable thead .sorting_desc{background-position:95% 60%;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAYAAABWdVznAAAACXBIWXMAAArzAAAK8wHvFRX1AAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAFNJREFUKJHVzTEKgDAQRNGHZfBg2sSTeDMLKwXPYuVJbBKQQEyrH6bZ+cPyWWaElz4kR5cOJ1b0FXnBVRYjjmIUsGGqvX6OmnImYk+JLTkzpPyBGwrtCvfBe56nAAAAAElFTkSuQmCC)}table.dataTable thead th{color:#73818e;font-size:.75rem;font-weight:600;padding-top:16px;padding-bottom:4px;border-bottom:none;padding-left:8px}table.dataTable tbody tr:first-child td:first-child{border-radius:6px 0}table.dataTable tbody tr:first-child td:last-child{border-radius:0 6px}table.dataTable tbody tr{border-radius:6px}table.dataTable tbody tr td:first-child{border-left:1px solid #c2cfd6}table.dataTable tbody tr td:last-child{border-right:1px solid #c2cfd6}table.dataTable tbody tr td{padding-top:16px;padding-bottom:16px;border-top:1px solid #c2cfd6}table.dataTable tbody tr:last-child td:first-child{border-radius:0 0 0 6px}table.dataTable tbody tr:last-child td:last-child{border-radius:0 0 6px}table.dataTable tbody tr:last-child td{border-bottom:1px solid #c2cfd6}table.dataTable td.dataTables_empty{border:none!important}table.dataTable.no-footer{border-bottom:none}.dataTables_paginate .btn.previous{margin-right:8px}.dataTables_paginate .btn.next{margin-left:8px}.dataTables_info,.dataTables_paginate{margin-top:1rem}.dataTables_paginate span .btn{border-radius:1.5rem}.dataTables_filter{display:none}.dataTables_wrapper.no-footer .dataTables_scrollBody{border-bottom:0;overflow:auto}.dataTables_paginate{display:none}.dataTable.processing{opacity:15%}.dataTables_wrapper .dataTables_processing{background:0 0;position:absolute;display:inline-block;top:25%;z-index:5;color:#73818e}.text-decoration-line-through{text-decoration:line-through!important}tr.removed .checkbox+label{visibility:hidden}"]
1058
+ styles: ["table.dataTable thead .sorting{background-image:none}table.dataTable thead .sorting_asc{background-position:95% 60%;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAYAAABWdVznAAAACXBIWXMAAAsSAAALEgHS3X78AAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAEtJREFUKJFjYBgywAOKMQALFjE/BgaGTCibjYGBYRM+kz0ZGBh2MTAw8DAwMHAxMDBsY2BgCCBGMQzg1IRNMV5NuVAJXIALqmYwAgBBkAlPRCLcLwAAAABJRU5ErkJggg==)}table.dataTable thead .sorting_desc{background-position:95% 60%;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAYAAABWdVznAAAACXBIWXMAAArzAAAK8wHvFRX1AAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAFNJREFUKJHVzTEKgDAQRNGHZfBg2sSTeDMLKwXPYuVJbBKQQEyrH6bZ+cPyWWaElz4kR5cOJ1b0FXnBVRYjjmIUsGGqvX6OmnImYk+JLTkzpPyBGwrtCvfBe56nAAAAAElFTkSuQmCC)}table.dataTable thead th{color:#73818e;font-size:.75rem;font-weight:600;padding-top:16px;padding-bottom:4px;border-bottom:none;padding-left:8px}table.dataTable tbody tr:first-child td:first-child{border-radius:6px 0}table.dataTable tbody tr:first-child td:last-child{border-radius:0 6px}table.dataTable tbody tr{border-radius:6px}table.dataTable tbody tr td:first-child{border-left:1px solid #c2cfd6}table.dataTable tbody tr td:last-child{border-right:1px solid #c2cfd6}table.dataTable tbody tr td{padding-top:8px;padding-bottom:8px;border-top:1px solid #c2cfd6}table.dataTable tbody tr:last-child td:first-child{border-radius:0 0 0 6px}table.dataTable tbody tr:last-child td:last-child{border-radius:0 0 6px}table.dataTable tbody tr:last-child td{border-bottom:1px solid #c2cfd6}table.dataTable td.dataTables_empty{border:none!important}table.dataTable.no-footer{border-bottom:none}.dataTables_paginate .btn.previous{margin-right:8px}.dataTables_paginate .btn.next{margin-left:8px}.dataTables_info,.dataTables_paginate{margin-top:1rem}.dataTables_paginate span .btn{border-radius:1.5rem}.dataTables_filter{display:none}.dataTables_wrapper.no-footer .dataTables_scrollBody{border-bottom:0;overflow:auto}.dataTables_paginate{display:none}.dataTable.processing{opacity:15%}.dataTables_wrapper .dataTables_processing{background:0 0;position:absolute;display:inline-block;top:25%;z-index:5;color:#73818e}.text-decoration-line-through{text-decoration:line-through!important}tr.removed .checkbox+label{visibility:hidden}"]
1047
1059
  }] }
1048
1060
  ];
1049
1061
  /** @nocollapse */
@@ -1090,4 +1102,4 @@ AdvancedTableComponent.propDecorators = {
1090
1102
  query: [{ type: Input, args: ['query',] }]
1091
1103
  };
1092
1104
 
1093
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWR2YW5jZWQtdGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHVuaXZlcnNpcy9uZ3gtdGFibGVzLyIsInNvdXJjZXMiOlsibGliL2NvbXBvbmVudHMvYWR2YW5jZWQtdGFibGUvYWR2YW5jZWQtdGFibGUuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxpQkFBaUIsRUFDakIsU0FBUyxFQUNULFVBQVUsRUFBRSxZQUFZLEVBQ3hCLE1BQU0sRUFDTixjQUFjLEVBQ2QsUUFBUSxFQUNSLEtBQUssRUFDRyxNQUFNLEVBQ2QsU0FBUyxFQUNULGlCQUFpQixHQUdsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQztBQUNwRCxPQUFPLEVBQUMsYUFBYSxFQUFFLGdCQUFnQixFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDcEUsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBRy9DLE9BQU8sRUFBQyx1QkFBdUIsRUFBQyxNQUFNLDZCQUE2QixDQUFDO0FBQ3BFLE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQ3BELE9BQU8sRUFBQywyQkFBMkIsRUFBQyxNQUFNLDBDQUEwQyxDQUFDO0FBQ3JGLE9BQU8sRUFBZSxlQUFlLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDbkQsT0FBTyxFQUFDLFlBQVksRUFBRSxjQUFjLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQUUvRCxvRkFBb0Y7QUFDcEYsT0FBTyxLQUFLLE9BQU8sTUFBTSxRQUFRLENBQUM7QUFDbEMsT0FBTyxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sUUFBUSxDQUFDO0FBQ2hDLE9BQU8seUJBQXlCLENBQUM7QUFDakMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2xELDBFQUEwRTtB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QUMsWUFBWTtvQkF5QmxCLEtBQUssU0FBQyxPQUFPIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLFxuICBJbmplY3QsXG4gIEluamVjdGlvblRva2VuLFxuICBJbmplY3RvcixcbiAgSW5wdXQsIE9uRGVzdHJveSxcbiAgT25Jbml0LCBPdXRwdXQsXG4gIFZpZXdDaGlsZCxcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG4gIE9uQ2hhbmdlcyxcbiAgU2ltcGxlQ2hhbmdlcyxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0FuZ3VsYXJEYXRhQ29udGV4dH0gZnJvbSAnQHRoZW1vc3QvYW5ndWxhcic7XG5pbXBvcnQge1RyYW5zbGF0ZVBpcGUsIFRyYW5zbGF0ZVNlcnZpY2V9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHtBY3RpdmF0ZWRSb3V0ZX0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7VGFibGVDb25maWd1cmF0aW9ufSBmcm9tICcuL2FkdmFuY2VkLXRhYmxlLmludGVyZmFjZXMnO1xuaW1wb3J0IHtEYXRhU2VydmljZVF1ZXJ5UGFyYW1zfSBmcm9tICdAdGhlbW9zdC9jbGllbnQnO1xuaW1wb3J0IHtBZHZhbmNlZENvbHVtbkZvcm1hdHRlcn0gZnJvbSAnLi9hZHZhbmNlZC10YWJsZS5mb3JtYXR0ZXJzJztcbmltcG9ydCB7Q2xpZW50RGF0YVF1ZXJ5YWJsZX0gZnJvbSAnQHRoZW1vc3QvY2xpZW50JztcbmltcG9ydCB7QWR2YW5jZWRGaWx0ZXJWYWx1ZVByb3ZpZGVyfSBmcm9tICcuL2FkdmFuY2VkLWZpbHRlci12YWx1ZS1wcm92aWRlci5zZXJ2aWNlJztcbmltcG9ydCB7U3Vic2NyaXB0aW9uLCBCZWhhdmlvclN1YmplY3R9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtUZW1wbGF0ZVBpcGUsIExvYWRpbmdTZXJ2aWNlfSBmcm9tICdAdW5pdmVyc2lzL2NvbW1vbic7XG5pbXBvcnQge0lBZHZhbmNlZFRhYmxlRm9ybWF0dGVyc30gZnJvbSAnLi9hZHZhbmNlZC10YWJsZS5mb3JtYXR0ZXJzLmludGVyZmFjZSc7XG4vLyBpbXBvcnRhbnQgbm90ZTogdXNlIHRoaXMgaW1wb3J0IHRvIGF2b2lkIENhbm5vdCBjYWxsIGEgbmFtZXNwYWNlICgnanF1ZXJ5JykgZXJyb3JcbmltcG9ydCAqIGFzIGpRdWVyeV8gZnJvbSAnanF1ZXJ5JztcbmltcG9ydCAnZGF0YXRhYmxlcy5uZXQnO1xuaW1wb3J0IHt0ZW1wbGF0ZX0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCAnZGF0YXRhYmxlcy5uZXQtc2Nyb2xsZXInO1xuaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbi8vIHJlc3RvcmUganF1ZXJ5IGltcG9ydCB0byBhdm9pZCBDYW5ub3QgY2FsbCBhIG5hbWVzcGFjZSAoJ2pxdWVyeScpIGVycm9yXG5jb25zdCBqUXVlcnkgPSBqUXVlcnlfO1xuZXhwb3J0IGludGVyZmFjZSBBZHZhbmNlZFRhYmxlRGF0YVJlc3VsdCB7XG4gIHJlY29yZHNUb3RhbDogbnVtYmVyO1xuICByZWNvcmRzRmlsdGVyZWQ6IG51bWJlcjtcbiAgZGF0YTogQXJyYXk8YW55Pjtcbn1cblxuY29uc3QgRGF0YVRhYmxlc0FwaTogYW55ID0galF1ZXJ5LmZuLmRhdGFUYWJsZS5BcGk7XG5EYXRhVGFibGVzQXBpLnJlZ2lzdGVyKCAncHJvY2Vzc2luZygpJywgZnVuY3Rpb24oIHNob3c6IGFueSApIHtcbiAgICByZXR1cm4gdGhpcy5pdGVyYXRvcigndGFibGUnLCAoIGN0eDogYW55ICkgPT4ge1xuICAgICAgICBjdHgub0FwaS5fZm5Qcm9jZXNzaW5nRGlzcGxheSggY3R4LCBzaG93ICk7XG4gICAgfSApO1xufSk7XG5cbmNsYXNzIFRhYmxlVHJhbnNsYXRpb25DaGFuZ2VEZXRlY3RvciBleHRlbmRzIENoYW5nZURldGVjdG9yUmVmIHtcbiAgcHVibGljIGNoZWNrTm9DaGFuZ2VzKCk6IHZvaWQge1xuICB9XG5cbiAgcHVibGljIGRldGFjaCgpOiB2b2lkIHtcbiAgfVxuXG4gIHB1YmxpYyBkZXRlY3RDaGFuZ2VzKCk6IHZvaWQge1xuICB9XG5cbiAgcHVibGljIG1hcmtGb3JDaGVjaygpOiB2b2lkIHtcbiAgfVxuXG4gIHB1YmxpYyByZWF0dGFjaCgpOiB2b2lkIHtcbiAgfVxuXG59XG5cbmV4cG9ydCBsZXQgQ09MVU1OX0ZPUk1BVFRFUlMgPSBuZXcgSW5qZWN0aW9uVG9rZW4oJ2NvbHVtbi5mb3JtYXR0ZXJzJyk7XG5cbmNsYXNzIENvbHVtbkZvcm1hdHRlciBleHRlbmRzIEFkdmFuY2VkQ29sdW1uRm9ybWF0dGVyIHtcbiAgY29uc3RydWN0b3IocHJvdGVjdGVkIGluamVjdG9yOiBJbmplY3Rvcikge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICBwdWJsaWMgY2xhc3M6IHN0cmluZztcbiAgcHVibGljIGNsYXNzTmFtZTogc3RyaW5nO1xuICBwdWJsaWMgZGVmYXVsdENvbnRlbnQ6IHN0cmluZztcbiAgcHVibGljIGZvcm1hdFN0cmluZzogc3RyaW5nO1xuICBwdWJsaWMgZm9ybWF0dGVyOiBzdHJpbmc7XG4gIHB1YmxpYyBoaWRkZW46IGJvb2xlYW47XG4gIHB1YmxpYyBuYW1lOiBzdHJpbmc7XG4gIHB1YmxpYyBvcmRlcjogc3RyaW5nO1xuICBwdWJsaWMgcHJvcGVydHk6IHN0cmluZztcbiAgcHVibGljIHNvcnRhYmxlOiBib29sZWFuO1xuICBwdWJsaWMgdGl0bGU6IHN0cmluZztcblxuICBwdWJsaWMgcmVuZGVyKGRhdGE6IGFueSwgdHlwZTogYW55LCByb3c6IGFueSwgbWV0YTogYW55KSB7XG4gICAgLy9cbiAgfVxufVxuXG5mdW5jdGlvbiBmb3JjZUNhc3Q8VD4oaW5wdXQ6IGFueSk6IFQge1xuICByZXR1cm4gaW5wdXQ7XG59XG5cbmV4cG9ydCBjbGFzcyBBZHZhbmNlZFRhYmxlQ29uZmlndXJhdGlvbiB7XG4gIHB1YmxpYyBzdGF0aWMgY2FzdChpbnB1dDogYW55LCBjbG9uZT86IGJvb2xlYW4pOiBUYWJsZUNvbmZpZ3VyYXRpb24ge1xuICAgIGlmIChjbG9uZSkge1xuICAgICAgcmV0dXJuIGZvcmNlQ2FzdDxUYWJsZUNvbmZpZ3VyYXRpb24+KEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoaW5wdXQpKSk7XG4gICAgfVxuICAgIHJldHVybiBmb3JjZUNhc3Q8VGFibGVDb25maWd1cmF0aW9uPihpbnB1dCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0UmFuZG9tSWRlbnRpZmllcigpIHtcbiAgcmV0dXJuIChcbiAgICBOdW1iZXIoU3RyaW5nKE1hdGgucmFuZG9tKCkpLnNsaWNlKDIpKVxuICApLnRvU3RyaW5nKDM2KTtcbn1cblxuQENvbXBvbmVudCh7XG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogY29tcG9uZW50LXNlbGVjdG9yXG4gIHNlbGVjdG9yOiAnYXBwLWFkdmFuY2VkLXRhYmxlJyxcbiAgdGVtcGxhdGU6IGBcbiAgICA8dGFibGUgI3RhYmxlIGNsYXNzPVwiZGF0YVRhYmxlXCI+XG4gICAgPC90YWJsZT5cbiAgICA8ZGl2ICNlbXB0eVRhYmxlIGNsYXNzPVwiZC1ub25lXCI+XG4gICAgICA8ZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwibXQtNFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpY29uLWNpcmNsZSBiZy1ncmF5LTMwMCBib3JkZXItZ3JheS0xMDBcIj48L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtdC00XCI+XG4gICAgICAgICAgPGg0IGNsYXNzPVwiZm9udC0zeGwgdGV4dC1kYXJrXCIgW3RyYW5zbGF0ZV09XCInVGFibGVzLkVtcHR5VGFibGVUaXRsZSdcIj48L2g0PlxuICAgICAgICAgIDxwIGNsYXNzPVwiZm9udC1sZyB0ZXh0LWRhcmtcIiBbdHJhbnNsYXRlXT1cIidUYWJsZXMuRW1wdHlUYWJsZU1lc3NhZ2UnXCI+PC9wPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICBgLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBzdHlsZVVybHM6IFsnLi9hZHZhbmNlZC10YWJsZS5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBBZHZhbmNlZFRhYmxlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIE9uQ2hhbmdlcyB7XG5cbiAgcHJpdmF0ZSBfcXVlcnk6IENsaWVudERhdGFRdWVyeWFibGU7XG4gIHByaXZhdGUgX2NvbmZpZzogVGFibGVDb25maWd1cmF0aW9uO1xuICBwcml2YXRlIF9maXJzdExvYWQgPSB0cnVlO1xuICBwcml2YXRlIF9zaG93Rm9vdGVyID0gdHJ1ZTtcbiAgcHJpdmF0ZSBfc2hvd0hlYWRlciA9IHRydWU7XG4gIHByaXZhdGUgX3Nob3dQYWdpbmcgPSBmYWxzZTtcbiAgcHJpdmF0ZSBfaWQgPSBnZXRSYW5kb21JZGVudGlmaWVyKCk7XG4gIHB1YmxpYyBzbWFydFNlbGVjdCA9IGZhbHNlO1xuICBwdWJsaWMgY29uZmlnQ2hhbmdlcyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55PihudWxsKTtcblxuICBAVmlld0NoaWxkKCd0YWJsZScpIHB1YmxpYyB0YWJsZTogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgnZW1wdHlUYWJsZScpIHB1YmxpYyBlbXB0eVRhYmxlOiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdsb2FkaW5nVGFibGUnKSBwdWJsaWMgbG9hZGluZ1RhYmxlOiBFbGVtZW50UmVmO1xuICBASW5wdXQoKSBwdWJsaWMgaGVpZ2h0ID0gODAwO1xuICBASW5wdXQoKSBwdWJsaWMgc2hvd0FjdGlvbnMgPSB0cnVlO1xuICBASW5wdXQoKSBwdWJsaWMgYXV0b0xvYWQgPSBmYWxzZTtcbiAgQE91dHB1dCgnbG9hZCcpIHB1YmxpYyBsb2FkOiBFdmVudEVtaXR0ZXI8QWR2YW5jZWRUYWJsZURhdGFSZXN1bHQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxBZHZhbmNlZFRhYmxlRGF0YVJlc3VsdD4oKTtcbiAgQE91dHB1dCgnaW5pdCcpIHB1YmxpYyBpbml0OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBASW5wdXQoJ3JlbG9hZCcpIHB1YmxpYyByZWxvYWQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoJ3NlbGVjdCcpIHB1YmxpYyBzZWxlY3Q6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoJ3NlbGVjdGVkSXRlbXMnKSBwdWJsaWMgc2VsZWN0ZWRJdGVtczogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICBASW5wdXQoKSBwdWJsaWMgc2Nyb2xsYWJsZSA9IHRydWU7XG4gIEBJbnB1dCgpIHB1YmxpYyBzZXJ2ZXJTaWRlID0gdHJ1ZTtcbiAgQElucHV0KCkgcHVibGljIGxlbmd0aE1lbnUgPSBbNTAsIDEwMCwgMjAwLCA1MDBdO1xuICBASW5wdXQoKSBwdWJsaWMgcGFnaW5nID0gdHJ1ZTtcbiAgQElucHV0KCkgcHVibGljIHBhZ2VMZW5ndGggPSAyNTtcblxuICBASW5wdXQoKSBwdWJsaWMgc2Nyb2xsWSA9IDgwMDtcbiAgQElucHV0KCkgcHVibGljIHNjcm9sbFggPSB0cnVlO1xuICAvKipcbiAgICogRW5hYmxlcyByb3cgc2VsZWN0aW9uLiBUaGUgZGVmYXVsciB2YWx1ZSBpcyBmYWxzZVxuICAgKi9cbiAgQElucHV0KCkgcHVibGljIHNlbGVjdGFibGUgPSBmYWxzZTtcbiAgLyoqXG4gICAqIEVuYWJsZXMgb3IgZGlzYWJsZSBtdWx0aXBsZSBzZWxlY3Rpb24uIFRoZSBkZWZhdWx0IHZhbHVlcyBpcyB0cnVlLlxuICAgKi9cbiAgQElucHV0KCkgcHVibGljIG11bHRpcGxlU2VsZWN0ID0gdHJ1ZTtcbiAgLyoqXG4gICAqIEVuYWJsZXMgY3VzdG9tIHNlbGVjdGlvbiBhbmQgaGlkZXMgc2VsZWN0IGNvbHVtbi4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgIGZhbHNlXG4gICAqL1xuICBASW5wdXQoKSBwdWJsaWMgY3VzdG9tU2VsZWN0ID0gZmFsc2U7XG4gIEBJbnB1dCgpIHB1YmxpYyBzZWxlY3RlZCA9IFtdO1xuICBwdWJsaWMgdW5zZWxlY3RlZCA9IFtdO1xuICAvKipcbiAgICogR2V0cyBvciBzZXRzIGEgVVJMIHRvIGxvYWQgdGFibGUgY29uZmlndXJhdGlvbiBmcm9tXG4gICAqL1xuICBASW5wdXQoKSBwdWJsaWMgY29uZmlnU3JjOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEdldHMgb3Igc2V0cyB0YWJsZSBjb25maWd1cmF0aW9uXG4gICAqL1xuICBASW5wdXQoJ2NvbmZpZycpXG4gIHB1YmxpYyBzZXQgY29uZmlnKHZhbHVlOiBUYWJsZUNvbmZpZ3VyYXRpb24pIHtcbiAgICB0aGlzLl9jb25maWcgPSB2YWx1ZTtcbiAgICAvLyByYWlzZSBzdWJzY3JpcHRpb25cbiAgICB0aGlzLmNvbmZpZ0NoYW5nZXMubmV4dCh0aGlzLl9jb25maWcpO1xuICB9XG5cbiAgcHVibGljIGdldCBjb25maWcoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbmZpZztcbiAgfVxuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0YWJsZSBmb290ZXIgd2lsbCBiZSB2aXNpYmxlIG9yIG5vdFxuICAgKi9cbiAgQElucHV0KCdzaG93Rm9vdGVyJylcbiAgcHVibGljIHNldCBzaG93Rm9vdGVyKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5fc2hvd0Zvb3RlciA9IHZhbHVlO1xuICAgIC8vIHNob3cgb3IgaGlkZSBmb290ZXJcbiAgICBpZiAodGhpcy5fZWxlbWVudCAmJiB0aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgIGNvbnN0IGVsZW1lbnQgPSAoIHRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudCBhcyBIVE1MRGl2RWxlbWVudClcbiAgICAgICAgLnF1ZXJ5U2VsZWN0b3IoJy5kYXRhVGFibGVzX2luZm8nKTtcbiAgICAgIGlmIChlbGVtZW50ID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSgnZC1ub25lJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlbGVtZW50LmNsYXNzTGlzdC5hZGQoJ2Qtbm9uZScpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXQgc2hvd0Zvb3RlcigpIHtcbiAgICByZXR1cm4gdGhpcy5fc2hvd0Zvb3RlcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0YWJsZSBmb290ZXIgd2lsbCBiZSB2aXNpYmxlIG9yIG5vdFxuICAgKi9cbiAgIEBJbnB1dCgnc2hvd0hlYWRlcicpXG4gICBwdWJsaWMgc2V0IHNob3dIZWFkZXIodmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgdGhpcy5fc2hvd0hlYWRlciA9IHZhbHVlO1xuICAgICAvLyBzaG93IG9yIGhpZGUgZm9vdGVyXG4gICAgIGlmICh0aGlzLl9lbGVtZW50ICYmIHRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudCkge1xuICAgICAgIGNvbnN0IGVsZW1lbnQgPSAoIHRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudCBhcyBIVE1MRGl2RWxlbWVudClcbiAgICAgICAgIC5xdWVyeVNlbGVjdG9yKCcuZGF0YVRhYmxlPnRoZWFkJyk7XG4gICAgICAgaWYgKGVsZW1lbnQgPT0gbnVsbCkge1xuICAgICAgICAgcmV0dXJuO1xuICAgICAgIH1cbiAgICAgICBjb25zdCBkYXRhVGFibGUgPSAoIHRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudCBhcyBIVE1MRGl2RWxlbWVudCkucXVlcnlTZWxlY3RvcignLmRhdGFUYWJsZScpO1xuICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCdkLW5vbmUnKTtcbiAgICAgICAgIC8vIGFkZCB0b3AgbWFyZ2luXG4gICAgICAgICBkYXRhVGFibGUuY2xhc3NMaXN0LnJlbW92ZSgnbXQtMicpO1xuICAgICAgIH0gZWxzZSB7XG4gICAgICAgICBlbGVtZW50LmNsYXNzTGlzdC5hZGQoJ2Qtbm9uZScpO1xuICAgICAgICAgLy8gcmVtb3ZlIHRvcCBtYXJnaW5cbiAgICAgICAgIGRhdGFUYWJsZS5jbGFzc0xpc3QuYWRkKCdtdC0yJyk7XG4gICAgICAgfVxuICAgICB9XG4gICB9XG5cbiAgIHB1YmxpYyBnZXQgc2hvd0hlYWRlcigpIHtcbiAgICAgcmV0dXJuIHRoaXMuX3Nob3dIZWFkZXI7XG4gICB9XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIHBhZ2luZyBpbmZvcm1hdGlvbiB3aWxsIGJlIHZpc2libGUgb3Igbm90XG4gICAqL1xuICBASW5wdXQoJ3Nob3dQYWdpbmcnKVxuICBwdWJsaWMgc2V0IHNob3dQYWdpbmcodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9zaG93UGFnaW5nID0gdmFsdWU7XG4gICAgLy8gc2hvdyBvciBoaWRlIGZvb3RlclxuICAgIGlmICh0aGlzLl9lbGVtZW50ICYmIHRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudCkge1xuICAgICAgY29uc3QgZWxlbWVudCA9ICggdGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50IGFzIEhUTUxEaXZFbGVtZW50KVxuICAgICAgICAucXVlcnlTZWxlY3RvcignLmRhdGFUYWJsZXNfcGFnaW5hdGUnKTtcbiAgICAgIGlmIChlbGVtZW50ID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgIGpRdWVyeShlbGVtZW50KS5zaG93KCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBqUXVlcnkoZWxlbWVudCkuaGlkZSgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXQgc2hvd1BhZ2luZygpIHtcbiAgICByZXR1cm4gdGhpcy5fc2hvd1BhZ2luZztcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIG9yIHNldHMgYW4gYWN0aXZlIHF1ZXJ5IGZvciB0aGlzIHRhYmxlXG4gICAqL1xuICBASW5wdXQoJ3F1ZXJ5JylcbiAgcHVibGljIHNldCBxdWVyeSh2YWx1ZTogQ2xpZW50RGF0YVF1ZXJ5YWJsZSkge1xuICAgIHRoaXMuX3F1ZXJ5ID0gdmFsdWU7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHF1ZXJ5KCkge1xuICAgIHJldHVybiB0aGlzLl9xdWVyeTtcbiAgfVxuXG4gIHB1YmxpYyByZWFkb25seSB0cmFuc2xhdG9yOiBUcmFuc2xhdGVQaXBlO1xuICBwdWJsaWMgZGF0YVRhYmxlOiBhbnk7XG4gIHB1YmxpYyBkdE9wdGlvbnM6IGFueTtcbiAgcHJpdmF0ZSBsYXN0UXVlcnlQYXJhbXM6IERhdGFTZXJ2aWNlUXVlcnlQYXJhbXM7XG4gIHByaXZhdGUgcmVsb2FkU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBfY29udGV4dDogQW5ndWxhckRhdGFDb250ZXh0LFxuICAgICAgICAgICAgICBASW5qZWN0KENPTFVNTl9GT1JNQVRURVJTKSBwcml2YXRlIF9jb2x1bW5Gb3JtYXR0ZXJzOiBJQWR2YW5jZWRUYWJsZUZvcm1hdHRlcnMsXG4gICAgICAgICAgICAgIHByaXZhdGUgX2FjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICAgICAgICAgICAgcHJpdmF0ZSBfdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICAgICAgICAgICAgcHJpdmF0ZSBfaW5qZWN0b3I6IEluamVjdG9yLFxuICAgICAgICAgICAgICBwcml2YXRlIF9hZHZhbmNlZEZpbHRlclZhbHVlUHJvdmlkZXI6IEFkdmFuY2VkRmlsdGVyVmFsdWVQcm92aWRlcixcbiAgICAgICAgICAgICAgcHJpdmF0ZSBfZWxlbWVudDogRWxlbWVudFJlZixcbiAgICAgICAgICAgICAgcHJpdmF0ZSBfdGVtcGxhdGU6IFRlbXBsYXRlUGlwZSxcbiAgICAgICAgICAgICAgcHJpdmF0ZSBfbG9hZGluZzogTG9hZGluZ1NlcnZpY2UsXG4gICAgICAgICAgICAgIHByaXZhdGUgX2h0dHA6IEh0dHBDbGllbnQpIHtcbiAgICAvLyBpbml0aWFsaXplIHRyYW5zbGF0ZSBwaXBlXG4gICAgdGhpcy50cmFuc2xhdG9yID0gbmV3IFRyYW5zbGF0ZVBpcGUodGhpcy5fdHJhbnNsYXRlU2VydmljZSwgbmV3IFRhYmxlVHJhbnNsYXRpb25DaGFuZ2VEZXRlY3RvcigpKTtcbiAgICBqUXVlcnkuZm4uZGF0YVRhYmxlLmV4dC5jbGFzc2VzLnNQYWdlQnV0dG9uID0gJ2J0bic7XG4gICAgalF1ZXJ5LmZuLmRhdGFUYWJsZS5leHQuY2xhc3Nlcy5zUGFnZUJ1dHRvbkFjdGl2ZSA9ICdidG4gYnRuLWxpZ2h0JztcbiAgICB0aGlzLnJlbG9hZFN1YnNjcmlwdGlvbiA9IHRoaXMucmVsb2FkLnN1YnNjcmliZSgoZGF0YSkgPT4ge1xuICAgICAgdGhpcy5mZXRjaCgpO1xuICAgIH0pO1xuICB9XG5cbiAgLy8gc2ltcGxlIHNlYXJjaFxuICBwdWJsaWMgc2VhcmNoKHNlYXJjaFRleHQpIHtcbiAgICB0aGlzLnF1ZXJ5ID0gdGhpcy5xdWVyeSB8fCB0aGlzLl9jb250ZXh0Lm1vZGVsKHRoaXMuY29uZmlnLm1vZGVsKS5hc1F1ZXJ5YWJsZSgpO1xuICAgIGlmIChzZWFyY2hUZXh0ICYmIHRoaXMuY29uZmlnLnNlYXJjaEV4cHJlc3Npb24pIHtcbiAgICAgIC8vIHZhbGlkYXRlIHNlYXJjaCB0ZXh0IGluIGRvdWJsZSBxdW90ZXNcbiAgICAgIGlmICgvXlwiKC4qPylcIiQvLnRlc3Qoc2VhcmNoVGV4dCkpIHtcbiAgICAgICAgdGhpcy5xdWVyeS5zZXRQYXJhbSgnJGZpbHRlcicsXG4gICAgICAgICAgdGhpcy5fdGVtcGxhdGUudHJhbnNmb3JtKHRoaXMuY29uZmlnLnNlYXJjaEV4cHJlc3Npb24sIHtcbiAgICAgICAgICAgIHRleHQ6IHNlYXJjaFRleHQucmVwbGFjZSgvXlwifFwiJC9nLCAnJyksXG4gICAgICAgICAgfSkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gdHJ5IHRvIHNwbGl0IHdvcmRzXG4gICAgICAgIGNvbnN0IHdvcmRzID0gc2VhcmNoVGV4dC5zcGxpdCgnICcpO1xuICAgICAgICAvLyBqb2luIHdvcmRzIHRvIGEgc2luZ2xlIGZpbHRlclxuICAgICAgICBjb25zdCBmaWx0ZXIgPSB3b3Jkcy5tYXAoKHdvcmQpID0+IHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5fdGVtcGxhdGUudHJhbnNmb3JtKHRoaXMuY29uZmlnLnNlYXJjaEV4cHJlc3Npb24sIHtcbiAgICAgICAgICAgIHRleHQ6IHdvcmQsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pLmpvaW4oJyBhbmQgJyk7XG4gICAgICAgIC8vIHNldCBmaWx0ZXJcbiAgICAgICAgdGhpcy5xdWVyeS5zZXRQYXJhbSgnJGZpbHRlcicsIGZpbHRlcik7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGNsZWFyIGZpbHRlclxuICAgICAgdGhpcy5xdWVyeS5zZXRQYXJhbSgnJGZpbHRlcicsIG51bGwpO1xuICAgIH1cbiAgICB0aGlzLl9maXJzdExvYWQgPSBmYWxzZTtcbiAgICB0aGlzLmRhdGFUYWJsZS5kcmF3KCk7XG4gIH1cblxuICBwdWJsaWMgZmV0Y2goY2xlYXJTZWxlY3RlZD86IGJvb2xlYW4pIHtcbiAgICAvLyBpZiBkYXRhIHRhYmxlIGlzIG51bGxcbiAgICBpZiAodGhpcy5kYXRhVGFibGUgPT0gbnVsbCkge1xuICAgICAgLy8gaW5pdGlhbGl6ZSBkYXRhIHRhYmxlXG4gICAgICByZXR1cm4gdGhpcy5uZ09uSW5pdCgpO1xuICAgIH1cbiAgICAvLyBjbGVhciBzZWxlY3Rpb24gaWYgcGFyYW1ldGVyIGlzIG5vdCBkZWNsYXJlZCBvciBpdCdzIHRydWVcbiAgICBpZiAoY2xlYXJTZWxlY3RlZCA9PSBudWxsIHx8IGNsZWFyU2VsZWN0ZWQgPT09IHRydWUpIHtcbiAgICAgIC8vIHNldCBzbWFydCBzZWxlY3QgdG8gZmFsc2VcbiAgICAgIHRoaXMuc21hcnRTZWxlY3QgPSBmYWxzZTtcbiAgICAgIC8vIGNsZWFyIHNlbGVjdGVkIGl0ZW1zXG4gICAgICBpZiAodGhpcy5zZWxlY3RlZC5sZW5ndGgpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZC5zcGxpY2UoMCwgdGhpcy5zZWxlY3RlZC5sZW5ndGgpO1xuICAgICAgfVxuICAgICAgLy8gY2xlYXIgdW5zZWxlY3RlZCBpdGVtc1xuICAgICAgaWYgKHRoaXMudW5zZWxlY3RlZC5sZW5ndGgpIHtcbiAgICAgICAgdGhpcy51bnNlbGVjdGVkLnNwbGljZSgwLCB0aGlzLnVuc2VsZWN0ZWQubGVuZ3RoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gb3RoZXJ3aXNlIGxvYWQgZGF0YSBvbmx5XG4gICAgdGhpcy5kYXRhVGFibGUuZHJhdygpO1xuICB9XG5cbiAgcHVibGljIGRlc3Ryb3koKSB7XG4gICAgaWYgKHRoaXMuZGF0YVRhYmxlKSB7XG4gICAgICB0aGlzLmRhdGFUYWJsZS5kZXN0cm95KCk7XG4gICAgICB0aGlzLl9maXJzdExvYWQgPSB0cnVlO1xuICAgICAgalF1ZXJ5KHRoaXMudGFibGUubmF0aXZlRWxlbWVudCkuZW1wdHkoKTtcbiAgICAgIHRoaXMuZGF0YVRhYmxlID0gbnVsbDtcbiAgICAgIC8vIGNsZWFyIHNlbGVjdGVkIGl0ZW1zXG4gICAgICBpZiAodGhpcy5zZWxlY3RlZC5sZW5ndGgpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZC5zcGxpY2UoMCwgdGhpcy5zZWxlY3RlZC5sZW5ndGgpO1xuICAgICAgfVxuICAgICAgLy8gY2xlYXIgdW5zZWxlY3RlZCBpdGVtc1xuICAgICAgaWYgKHRoaXMudW5zZWxlY3RlZC5sZW5ndGgpIHtcbiAgICAgICAgdGhpcy51bnNlbGVjdGVkLnNwbGljZSgwLCB0aGlzLnVuc2VsZWN0ZWQubGVuZ3RoKTtcbiAgICAgIH1cbiAgICAgIC8vIHNldCBzbWFydCBzZWxlY3QgdG8gZmFsc2VcbiAgICAgIHRoaXMuc21hcnRTZWxlY3QgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2VsZWN0cyB0aGUgc3BlY2lmaWVkIGRhdGEgcm93XG4gICAqL1xuICBwdWJsaWMgc2VsZWN0Um93KHJvdzogYW55LCBzaWxlbnQ/OiBib29sZWFuKSB7XG4gICAgaWYgKHJvdykge1xuICAgICAgLy8gZ2V0IHJvd1xuICAgICAgY29uc3Qgcm93Tm9kZSA9IHJvdy5ub2RlKCk7XG4gICAgICAvLyBpZiBtdWx0aXBsZSBzZWxlY3QgaXMgZmFsc2VcbiAgICAgIGlmICh0aGlzLm11bHRpcGxlU2VsZWN0ID09PSBmYWxzZSkge1xuICAgICAgICBpZiAodGhpcy5jdXN0b21TZWxlY3QgPT09IGZhbHNlKSB7XG4gICAgICAgICAgLy8gZW51bWVyYXRlIHJvd1xuICAgICAgICAgIHRoaXMuZGF0YVRhYmxlLnJvd3MoKS5ub2RlcygpLmVhY2goKG5vZGU6IGFueSkgPT4ge1xuICAgICAgICAgICAgaWYgKG5vZGUgIT09IHJvd05vZGUpIHtcbiAgICAgICAgICAgICAgalF1ZXJ5KG5vZGUpLmZpbmQoJzpjaGVja2JveCcpLnByb3AoJ2NoZWNrZWQnLCBmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5kYXRhVGFibGUucm93cygnLnNlbGVjdGVkJykubm9kZXMoKS5lYWNoKChub2RlOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGlmIChub2RlICE9PSByb3dOb2RlKSB7XG4gICAgICAgICAgICAgIGpRdWVyeShub2RlKS5yZW1vdmVDbGFzcygnc2VsZWN0ZWQnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICAvLyBjbGVhciBzZWxlY3RlZFxuICAgICAgICB0aGlzLnNlbGVjdGVkLnNwbGljZSgwLCB0aGlzLnNlbGVjdGVkLmxlbmd0aCk7XG4gICAgICB9XG4gICAgICAvLyBpZiBjdXN0b20gc2VsZWN0IG1vZGUgaXMgb2ZmXG4gICAgICBpZiAodGhpcy5jdXN0b21TZWxlY3QgPT09IGZhbHNlKSB7XG4gICAgICAgIGpRdWVyeShyb3dOb2RlKS5maW5kKCc6Y2hlY2tib3gnKS5wcm9wKCdjaGVja2VkJywgdHJ1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBvdGhlcndpc2UgYWRkIGNsYXNzXG4gICAgICAgIGpRdWVyeShyb3cubm9kZSgpKS5hZGRDbGFzcygnc2VsZWN0ZWQnKTtcbiAgICAgIH1cbiAgICAgIC8vIGdldCByb3cgZGF0YVxuICAgICAgY29uc3Qga2V5ID0gdGhpcy5jb25maWcuY29sdW1uc1swXS5wcm9wZXJ0eSB8fCB0aGlzLmNvbmZpZy5jb2x1bW5zWzBdLm5hbWU7XG4gICAgICBjb25zdCBkYXRhID0gcm93LmRhdGEoKTtcbiAgICAgIC8vIHNlYXJjaCBzZWxlY3RlZCBpdGVtc1xuICAgICAgbGV0IGZpbmRJbmRleCA9IHRoaXMuc2VsZWN0ZWQuZmluZEluZGV4KCh4KSA9PiB7XG4gICAgICAgIHJldHVybiB4W2tleV0gPT09IGRhdGFba2V5XTtcbiAgICAgIH0pO1xuICAgICAgaWYgKGZpbmRJbmRleCA+PSAwKSB7XG4gICAgICAgIC8vIHJlbW92ZSBwcmV2aW91c2x5IHNlbGVjdGVkIHJvd1xuICAgICAgICB0aGlzLnNlbGVjdGVkLnNwbGljZShmaW5kSW5kZXgsIDEpO1xuICAgICAgfVxuICAgICAgdGhpcy5zZWxlY3RlZC5wdXNoKGRhdGEpO1xuICAgICAgLy8gdmFsaWRhdGUgdW5zZWxlY3RlZCBkYXRhXG4gICAgICBmaW5kSW5kZXggPSB0aGlzLnVuc2VsZWN0ZWQuZmluZEluZGV4KCh4KSA9PiB7XG4gICAgICAgIHJldHVybiB4W2tleV0gPT09IGRhdGFba2V5XTtcbiAgICAgIH0pO1xuICAgICAgaWYgKGZpbmRJbmRleCA+PSAwKSB7XG4gICAgICAgIC8vIHJlbW92ZSBwcmV2aW91c2x5IHNlbGVjdGVkIHJvd1xuICAgICAgICB0aGlzLnVuc2VsZWN0ZWQuc3BsaWNlKGZpbmRJbmRleCwgMSk7XG4gICAgICB9XG4gICAgICBpZiAoc2lsZW50KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcy5lbWl0KHRoaXMuc2VsZWN0ZWQpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBVbnNlbGVjdHMgdGhlIHNwZWNpZmllZCBkYXRhIHJvdyBpZiBpdCdzIHNlbGVjdGVkXG4gICAqL1xuICBwdWJsaWMgdW5TZWxlY3RSb3cocm93OiBhbnksIHNpbGVudD86IGJvb2xlYW4pIHtcbiAgICBpZiAocm93KSB7XG4gICAgICAvLyBpZiBjdXN0b20gc2VsZWN0IG1vZGUgaXMgb2ZmXG4gICAgICBpZiAodGhpcy5jdXN0b21TZWxlY3QgPT09IGZhbHNlKSB7XG4gICAgICAgIGpRdWVyeShyb3cubm9kZSgpKS5maW5kKCc6Y2hlY2tib3gnKS5wcm9wKCdjaGVja2VkJywgZmFsc2UpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gb3RoZXJ3aXNlIGFkZCBjbGFzc1xuICAgICAgICBqUXVlcnkocm93Lm5vZGUoKSkucmVtb3ZlQ2xhc3MoJ3NlbGVjdGVkJyk7XG4gICAgICB9XG4gICAgICAvLyBnZXQgZmlyc3QgY29sdW1uIGtleVxuICAgICAgY29uc3Qga2V5ID0gdGhpcy5jb25maWcuY29sdW1uc1swXS5wcm9wZXJ0eSB8fCB0aGlzLmNvbmZpZy5jb2x1bW5zWzBdLm5hbWU7XG4gICAgICBjb25zdCBkYXRhID0gcm93LmRhdGEoKTtcbiAgICAgIGNvbnN0IGlkID0gZGF0YVtrZXldO1xuICAgICAgbGV0IGZpbmRJbmRleCA9IHRoaXMuc2VsZWN0ZWQuZmluZEluZGV4KCh4KSA9PiB7XG4gICAgICAgIHJldHVybiB4W2tleV0gPT09IGlkO1xuICAgICAgfSk7XG4gICAgICBpZiAoZmluZEluZGV4ID49IDApIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZC5zcGxpY2UoZmluZEluZGV4LCAxKTtcbiAgICAgICAgaWYgKHRoaXMuc21hcnRTZWxlY3QpIHtcbiAgICAgICAgICAvLyBhZGQgdGhpcyByb3cgdG8gdW5zZWxlY3RlZCByb3dzXG4gICAgICAgICAgZmluZEluZGV4ID0gdGhpcy51bnNlbGVjdGVkLmZpbmRJbmRleCgoeCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHhba2V5XSA9PT0gaWQ7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgaWYgKGZpbmRJbmRleCA8IDApIHtcbiAgICAgICAgICAgIHRoaXMudW5zZWxlY3RlZC5wdXNoKGRhdGEpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoc2lsZW50KSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcy5lbWl0KHRoaXMuc2VsZWN0ZWQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBzZWxlY3RBbnkoKSB7XG4gICAgaWYgKHRoaXMuZGF0YVRhYmxlICYmIHRoaXMuc2VsZWN0YWJsZSkge1xuICAgICAgLy8gc2V0IHNtYXJ0IHNlbGVjdCBmbGFnXG4gICAgICB0aGlzLnNtYXJ0U2VsZWN0ID0gdHJ1ZTtcbiAgICAgIC8vIHNlbGVjdCBhbnkgcm93XG4gICAgICB0aGlzLmRhdGFUYWJsZS5yb3dzKCkuZXZlcnkoKGluZGV4OiBhbnkpID0+IHtcbiAgICAgICAgY29uc3Qgcm93ID0gdGhpcy5kYXRhVGFibGUucm93KCBpbmRleCApO1xuICAgICAgICB0aGlzLnNlbGVjdFJvdyhyb3csIHRydWUpO1xuICAgICAgfSk7XG4gICAgICAvLyBlbWl0IHNlbGVjdGlvbiBldmVudFxuICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zLmVtaXQodGhpcy5zZWxlY3RlZCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHNlbGVjdE5vbmUoKSB7XG4gICAgaWYgKHRoaXMuZGF0YVRhYmxlICYmIHRoaXMuc2VsZWN0YWJsZSkge1xuICAgICAgLy8gc2V0IHNtYXJ0IHNlbGVjdCBmbGFnXG4gICAgICB0aGlzLnNtYXJ0U2VsZWN0ID0gZmFsc2U7XG4gICAgICB0aGlzLnVuc2VsZWN0ZWQuc3BsaWNlKDAsIHRoaXMudW5zZWxlY3RlZC5sZW5ndGgpO1xuICAgICAgLy8gc2VsZWN0IGFueSByb3dcbiAgICAgIHRoaXMuZGF0YVRhYmxlLnJvd3MoKS5ldmVyeSgoaW5kZXg6IGFueSkgPT4ge1xuICAgICAgICBjb25zdCByb3cgPSB0aGlzLmRhdGFUYWJsZS5yb3coIGluZGV4ICk7XG4gICAgICAgIHRoaXMudW5TZWxlY3RSb3cocm93LCB0cnVlKTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5zZWxlY3RlZC5zcGxpY2UoMCwgdGhpcy5zZWxlY3RlZC5sZW5ndGgpO1xuICAgICAgLy8gZW1pdCBzZWxlY3Rpb24gZXZlbnRcbiAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcy5lbWl0KHRoaXMuc2VsZWN0ZWQpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyB0b2dnbGVTZWxlY3RSb3cocm93OiBhbnkpIHtcbiAgICBpZiAocm93KSB7XG4gICAgICBjb25zdCBkYXRhID0gcm93LmRhdGEoKTtcbiAgICAgIC8vIGdldCBmaXJzdCBjb2x1bW4ga2V5XG4gICAgICBjb25zdCBrZXkgPSB0aGlzLmNvbmZpZy5jb2x1bW5zWzBdLnByb3BlcnR5IHx8IHRoaXMuY29uZmlnLmNvbHVtbnNbMF0ubmFtZTtcbiAgICAgIC8vIGdldCBpZFxuICAgICAgY29uc3QgaWQgPSBkYXRhW2tleV07XG4gICAgICAvLyBmaW5kIGlmIHJvdyBpcyBzZWxlY3RlZFxuICAgICAgY29uc3QgZmluZEluZGV4ID0gdGhpcy5zZWxlY3RlZC5maW5kKCh4KSA9PiB7XG4gICAgICAgIHJldHVybiB4W2tleV0gPT09IGlkO1xuICAgICAgfSk7XG4gICAgICAvLyBpZiByb3cgaXMgc2VsZWN0ZWRcbiAgICAgIGlmIChmaW5kSW5kZXggPj0gMCkge1xuICAgICAgICAvLyB1bnNlbGVjdFxuICAgICAgICB0aGlzLnVuU2VsZWN0Um93KHJvdyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnNlbGVjdFJvdyhyb3cpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIG5vaW5zcGVjdGlvbiBKU01ldGhvZENhbkJlU3RhdGljXG4gIC8qKlxuICAgKiBEYXRhdGFibGVzIGNvbHVtbiByZW5kZXJlciBmb3Igc2VsZWN0IGNoZWNrYm94XG4gICAqIEBwYXJhbSBkYXRhXG4gICAqIEBwYXJhbSB0eXBlXG4gICAqIEBwYXJhbSByb3dcbiAgICogQHBhcmFtIG1ldGFcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHByaXZhdGUgX3JlbmRlclNlbGVjdChkYXRhLCB0eXBlLCByb3csIG1ldGEpIHtcbiAgICAvLyBnZXQgY29sdW1uXG4gICAgY29uc3QgY29sdW1uID0gbWV0YS5zZXR0aW5ncy5hb0NvbHVtbnNbbWV0YS5jb2xdO1xuICAgIGlmICh0eXBlb2YgY29sdW1uLnNlbGVjdFRlbXBsYXRlICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICBPYmplY3QuYXNzaWduKGNvbHVtbiwge1xuICAgICAgICBzZWxlY3RUZW1wbGF0ZTogdGVtcGxhdGUoYDxpbnB1dCBjbGFzcz1cImNoZWNrYm94IGNoZWNrYm94LXRoZW1lIHMtcm93XCIgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgaWQ9XCJzLSR7dGhpcy5faWR9LVxcJHttZXRhLnJvd31cIiBkYXRhLWlkPVwiXFwke2RhdGF9XCIgLz48bGFiZWwgZm9yPVwicy0ke3RoaXMuX2lkfS1cXCR7bWV0YS5yb3d9XCI+Jm5ic3A7PC9sYWJlbD5cbiAgICAgICAgYCksXG4gICAgICB9KTtcbiAgICB9XG4gICAgLy8gcmVuZGVyIHRlbXBsYXRlXG4gICAgcmV0dXJuIGNvbHVtbi5zZWxlY3RUZW1wbGF0ZSh7XG4gICAgICBtZXRhLFxuICAgICAgZGF0YSxcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpIHtcbiAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICBpZiAodGhpcy5kYXRhVGFibGUpIHtcbiAgICAgIHRoaXMuZGVzdHJveSgpO1xuICAgIH1cbiAgICBpZiAodGhpcy5jb25maWcpIHtcbiAgICAgIC8vIHBhcnNlIHByb3BlcnRpZXNcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5jb25maWcsICdzZWxlY3RhYmxlJykpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RhYmxlID0gdGhpcy5jb25maWcuc2VsZWN0YWJsZTtcbiAgICAgIH1cbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5jb25maWcsICdtdWx0aXBsZVNlbGVjdCcpKSB7XG4gICAgICAgIHRoaXMubXVsdGlwbGVTZWxlY3QgPSB0aGlzLmNvbmZpZy5tdWx0aXBsZVNlbGVjdDtcbiAgICAgIH1cbiAgICAgIC8vIHByZXBhcmUgY29uZmlndXJhdGlvbiBmb3IgY29sdW1uc1xuICAgICAgY29uc3QgdGFibGVDb2x1bW5zID0gdGhpcy5jb25maWcuY29sdW1uc1xuICAgICAgICAvLyBmaWx0ZXIgYWN0aW9uIGxpbmsgY29sdW1uXG4gICAgICAgIC5maWx0ZXIoKGNvbHVtbikgPT4ge1xuICAgICAgICAgIGlmIChjb2x1bW4uZm9ybWF0dGVyICYmIGNvbHVtbi5mb3JtYXR0ZXIgPT09ICdBY3Rpb25MaW5rRm9ybWF0dGVyJyAmJiB0aGlzLnNob3dBY3Rpb25zID09PSBmYWxzZSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSkubWFwKChjb2x1bW4pID0+IHtcbiAgICAgICAgICAvLyBjb252ZXJ0IGNvbHVtbiB0byBhZHZhbmNlIHRhYmxlIGNvbHVtblxuICAgICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKG5ldyBDb2x1bW5Gb3JtYXR0ZXIodGhpcy5faW5qZWN0b3IpLCBjb2x1bW4pO1xuICAgICAgICB9KS5tYXAoKGNvbHVtbikgPT4ge1xuICAgICAgICAgIGNvbnN0IGNvbHVtbkRlZmluaXRpb24gPSB7XG4gICAgICAgICAgICBkYXRhOiBjb2x1bW4ucHJvcGVydHkgfHwgY29sdW1uLm5hbWUsXG4gICAgICAgICAgICBkZWZhdWx0Q29udGVudDogY29sdW1uLmhhc093blByb3BlcnR5KCdkZWZhdWx0Q29udGVudCcpID8gY29sdW1uLmRlZmF1bHRDb250ZW50IDogJycsXG4gICAgICAgICAgICB0aXRsZTogdGhpcy50cmFuc2xhdG9yLnRyYW5zZm9ybShjb2x1bW4udGl0bGUpLFxuICAgICAgICAgICAgc29ydGFibGU6IGNvbHVtbi5oYXNPd25Qcm9wZXJ0eSgnc29ydGFibGUnKSA/IGNvbHVtbi5zb3J0YWJsZSA6IHRydWUsXG4gICAgICAgICAgICB2aXNpYmxlOiBjb2x1bW4uaGFzT3duUHJvcGVydHkoJ2hpZGRlbicpID8gIWNvbHVtbi5oaWRkZW4gOiB0cnVlLFxuICAgICAgICAgICAgbmFtZTogY29sdW1uLm5hbWUsXG4gICAgICAgICAgfTtcblxuICAgICAgICAgIGlmIChjb2x1bW4uY2xhc3NOYW1lKSB7XG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKGNvbHVtbkRlZmluaXRpb24sIHtcbiAgICAgICAgICAgICAgY2xhc3NOYW1lOiBjb2x1bW4uY2xhc3NOYW1lLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oY29sdW1uRGVmaW5pdGlvbiwge1xuICAgICAgICAgICAgICBjbGFzc05hbWU6ICcnLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGNvbHVtbi5mb3JtYXR0ZXJzKSB7XG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKGNvbHVtbkRlZmluaXRpb24sIHtcbiAgICAgICAgICAgICAgcmVuZGVyKGRhdGE6IGFueSwgdHlwZTogc3RyaW5nLCByb3c6IGFueSwgbWV0YTogYW55KSB7XG4gICAgICAgICAgICAgICAgbGV0IHJlc3VsdCA9IGRhdGE7XG4gICAgICAgICAgICAgICAgY29sdW1uLmZvcm1hdHRlcnMuZm9yRWFjaCgoY29sdW1uRm9ybWF0dGVyKSA9PiB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBmb3JtYXR0ZXIgPSBzZWxmLl9jb2x1bW5Gb3JtYXR0ZXJzW2NvbHVtbkZvcm1hdHRlci5mb3JtYXR0ZXJdO1xuICAgICAgICAgICAgICAgICAgaWYgKGZvcm1hdHRlciAmJiB0eXBlb2YgZm9ybWF0dGVyLnJlbmRlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICBjb2x1bW4uZm9ybWF0U3RyaW5nID0gY29sdW1uRm9ybWF0dGVyLmZvcm1hdFN0cmluZztcbiAgICAgICAgICAgICAgICAgICAgY29sdW1uLmZvcm1hdE9wdGlvbnMgPSBjb2x1bW5Gb3JtYXR0ZXIuZm9ybWF0T3B0aW9ucztcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGZvcm1hdHRlci5yZW5kZXIuYmluZChjb2x1bW4pKHJlc3VsdCwgdHlwZSwgcm93LCBtZXRhKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBkZWxldGUgY29sdW1uLmZvcm1hdFN0cmluZztcbiAgICAgICAgICAgICAgICBkZWxldGUgY29sdW1uLmZvcm1hdE9wdGlvbnM7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgLy8gY2hlY2sgaWYgY29sdW1uIGZvcm1hdHRlcnMgZXhwb3J0IGNyZWF0ZWRDZWxsIGV2ZW50XG4gICAgICAgICAgICBjb25zdCBpdGVtcyA9IGNvbHVtbi5mb3JtYXR0ZXJzLmZpbHRlcigoY29sdW1uRm9ybWF0dGVyKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiBjb2x1bW5Gb3JtYXR0ZXIuYWZ0ZXJSZW5kZXIgPT09ICdmdW5jdGlvbic7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmIChpdGVtcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oY29sdW1uRGVmaW5pdGlvbiwge1xuICAgICAgICAgICAgICAgIGFmdGVyUmVuZGVyKGNlbGw6IGFueSwgY2VsbERhdGE6IGFueSwgcm93RGF0YTogYW55LCByb3dJbmRleDogbnVtYmVyLCBjb2xJbmRleDogbnVtYmVyKSB7XG4gICAgICAgICAgICAgICAgICBpdGVtcy5mb3JFYWNoKChjb2x1bW5Gb3JtYXR0ZXIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZm9ybWF0dGVyID0gc2VsZi5fY29sdW1uRm9ybWF0dGVyc1tjb2x1bW5Gb3JtYXR0ZXIuZm9ybWF0dGVyXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZvcm1hdHRlciAmJiB0eXBlb2YgZm9ybWF0dGVyLmFmdGVyUmVuZGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgZm9ybWF0dGVyLmFmdGVyUmVuZGVyLmJpbmQoY29sdW1uKShjZWxsLCBjZWxsRGF0YSwgcm93RGF0YSwgcm93SW5kZXgsIGNvbEluZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChjb2x1bW4uZm9ybWF0dGVyKSB7XG4gICAgICAgICAgICBjb25zdCBmb3JtYXR0ZXIgPSBzZWxmLl9jb2x1bW5Gb3JtYXR0ZXJzW2NvbHVtbi5mb3JtYXR0ZXJdO1xuICAgICAgICAgICAgaWYgKGZvcm1hdHRlciAmJiB0eXBlb2YgZm9ybWF0dGVyLnJlbmRlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKGNvbHVtbkRlZmluaXRpb24sIHtcbiAgICAgICAgICAgICAgICByZW5kZXI6IGZvcm1hdHRlci5yZW5kZXIuYmluZChjb2x1bW4pLFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGNvbHVtbkRlZmluaXRpb247XG4gICAgICAgIH0pO1xuICAgICAgLy8gZ2V0IHRhYmxlIGVsZW1lbnRcbiAgICAgIGNvbnN0IHRhYmxlRWxlbWVudCA9IGpRdWVyeSh0aGlzLnRhYmxlLm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBuby1zaGFkb3dlZC12YXJpYWJsZVxuICAgICAgdGFibGVFbGVtZW50Lm9uKCdwcm9jZXNzaW5nLmR0JywgKGV2ZW50LCBzZXR0aW5ncywgcHJvY2Vzc2luZykgPT4ge1xuICAgICAgICBpZiAocHJvY2Vzc2luZykge1xuICAgICAgICAgIC8vIGNsZWFyIGVtcHR5IHRhYmxlIGVsZW1lbnRcbiAgICAgICAgICB0YWJsZUVsZW1lbnQuZmluZCgnLmRhdGFUYWJsZXNfZW1wdHknKS5odG1sKCcnKTtcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRhYmxlRWxlbWVudC5hZGRDbGFzcygncHJvY2Vzc2luZycpO1xuICAgICAgICAgIH0sIDApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGFibGVFbGVtZW50LnJlbW92ZUNsYXNzKCdwcm9jZXNzaW5nJyk7XG4gICAgICAgICAgfSwgMCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgLy8gYWxsb3cgc2VsZWN0aW9uXG4gICAgICBpZiAodGhpcy5zZWxlY3RhYmxlKSB7XG4gICAgICAgIC8vIGdldCBmaXJzdCBjb2x1bW4gKGFzIHJvdyBwcmltYXJ5IGtleSlcbiAgICAgICAgLy8gdG9kbzo6YWxsb3cgcm93IHByaW1hcnkga2V5IGNvbmZpZ3VyYXRpb25cbiAgICAgICAgY29uc3QgZmlyc3RDb2x1bW4gPSB0aGlzLmNvbmZpZy5jb2x1bW5zWzBdO1xuICAgICAgICAvLyBhZGQgc2VsZWN0IGNvbHVtblxuICAgICAgICBjb25zdCBzZWxlY3RDb2x1bW5EZWZpbml0aW9uID0ge1xuICAgICAgICAgIGNsYXNzTmFtZTogJ3RleHQtY2VudGVyIHBsLTQgcHItMCcsXG4gICAgICAgICAgZGF0YTogZmlyc3RDb2x1bW4ucHJvcGVydHkgfHwgZmlyc3RDb2x1bW4ubmFtZSxcbiAgICAgICAgICBkZWZhdWx0Q29udGVudDogJycsXG4gICAgICAgICAgdGl0bGU6ICcnLFxuICAgICAgICAgIHNvcnRhYmxlOiBmYWxzZSxcbiAgICAgICAgICB2aXNpYmxlOiAhdGhpcy5jdXN0b21TZWxlY3QsXG4gICAgICAgICAgbmFtZTogZmlyc3RDb2x1bW4ubmFtZSxcbiAgICAgICAgfTtcbiAgICAgICAgLy8gYXNzaWduIHJlbmRlcmVyXG4gICAgICAgIE9iamVjdC5hc3NpZ24oc2VsZWN0Q29sdW1uRGVmaW5pdGlvbiwge1xuICAgICAgICAgIHJlbmRlcjogdGhpcy5fcmVuZGVyU2VsZWN0LmJpbmQodGhpcyksXG4gICAgICAgIH0pO1xuICAgICAgICAvLyBhbmQgZmluYWxseSBhZGQgY29sdW1uXG4gICAgICAgIHRhYmxlQ29sdW1ucy51bnNoaWZ0KHNlbGVjdENvbHVtbkRlZmluaXRpb24pO1xuICAgICAgICAvLyB1c2VyIGludGVyZmFjZSBhZGRpdGlvbnNcbiAgICAgICAgLy8gaGFuZGxlIHBhZ2UgY2hhbmdlIGV2ZW50IChhIHRyaWNrIGZvciBmaXJpbmcgZHJhdy5kdCBldmVudHMpXG4gICAgICAgIHRhYmxlRWxlbWVudFxuICAgICAgICAgIC8vIGZvciBlYWNoIHBhZ2VcbiAgICAgICAgICAub24oJ3BhZ2UuZHQnLCAoJGV2ZW50KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBpbmZvID0gdGhpcy5kYXRhVGFibGUucGFnZS5pbmZvKCk7XG4gICAgICAgICAgfSlcbiAgICAgICAgICAvLyBoYW5kbGUgZHJhdyBldmVudHNcbiAgICAgICAgICAub24oJ2RyYXcuZHQnLCAoKSA9PiB7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmN1c3RvbVNlbGVjdCkge1xuICAgICAgICAgICAgICAvLyBlbmFibGUgcm93IHNlbGVjdGlvbiBldmVudFxuICAgICAgICAgICAgICB0YWJsZUVsZW1lbnQuZmluZCgndGJvZHknKS5vbignY2xpY2snLCAndHInLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAvLyBzZWxlY3Qgcm93XG4gICAgICAgICAgICAgICAgY29uc3Qgcm93ID0gc2VsZi5kYXRhVGFibGUucm93KHRoaXMpO1xuICAgICAgICAgICAgICAgIC8vIGFkZCByb3dcbiAgICAgICAgICAgICAgICBzZWxmLnNlbGVjdC5lbWl0KHJvdyk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGFibGVFbGVtZW50LmZpbmQoJ2lucHV0LnMtcm93Jykub24oJ2NsaWNrJywgdGhpcy5vblNlbGVjdGlvbkNoYW5nZS5iaW5kKHRoaXMpKTtcbiAgICAgICAgICAgIC8vIG1ha2Ugc2VsZWN0aW9uIG9uIGN1cnJlbnQgcGFnZVxuICAgICAgICAgICAgY29uc3Qga2V5ID0gdGhpcy5jb25maWcuY29sdW1uc1swXS5wcm9wZXJ0eTtcbiAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgLy8gZW51bWVyYXRlIHNlbGVjdGVkIGl0ZW1zXG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWQuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgICAgIC8vIGZpbmQgcm93IGlkZW50aWZpZXJcbiAgICAgICAgICAgICAgICBjb25zdCBpZCA9IGl0ZW1ba2V5XTtcbiAgICAgICAgICAgICAgICAvLyBpZiBpZGVudGlmaWVyIGlzIGRlZmluZWRcbiAgICAgICAgICAgICAgICBpZiAoaWQgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgLy8gdHJ5IHRvIGZpbmQgY2hlY2sgZWxlbWVudCB3aXRoIHRoaXMgaWRlbnRpZmllciBpbiBhdHRyaWJ1dGUgZGF0YS1pZFxuICAgICAgICAgICAgICAgICAgdGFibGVFbGVtZW50LmZpbmQoYGlucHV0W2RhdGEtaWQ9JyR7aWR9J11gKS5wcm9wKCdjaGVja2VkJywgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLnNtYXJ0U2VsZWN0KSB7XG4gICAgICAgICAgICAgIC8vIHNlbGVjdCByb3dzIHRoYXQgYXJlIG5vdCBzZWxlY3RlZFxuICAgICAgICAgICAgICAvLyBhbmQgZG8gbm90IGluY2x1ZGVkIGluIHVuc2VsZWN0ZWQgY29sbGVjdGlvblxuICAgICAgICAgICAgICB0YWJsZUVsZW1lbnQuZmluZCgnaW5wdXRbZGF0YS1pZF0nKS5lYWNoKChpbmRleCwgZWxlbWVudCkgPT4ge1xuICAgICAgICAgICAgICAgIC8vIGdldCBkYXRhIGlkXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMudW5zZWxlY3RlZC5maW5kSW5kZXgoKHgpID0+IHtcbiAgICAgICAgICAgICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTp0cmlwbGUtZXF1YWxzXG4gICAgICAgICAgICAgICAgICByZXR1cm4geFtrZXldID09IGpRdWVyeShlbGVtZW50KS5hdHRyKCdkYXRhLWlkJyk7XG4gICAgICAgICAgICAgICAgfSkgPCAwKSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdFJvdyh0aGlzLmRhdGFUYWJsZS5yb3coaW5kZXgpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdGVkLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICB0YWJsZUVsZW1lbnQuZmluZCgnaW5wdXRbZGF0YS1pZF0nKS5wcm9wKCdjaGVja2VkJywgZmFsc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgLy8gaW5pdGlhbGl6ZSBkYXRhIHRhYmxlXG4gICAgICBjb25zdCBzZXR0aW5ncyA9IHtcbiAgICAgICAgLy8gc2V0IGxlbmd0aCBtZW51XG4gICAgICAgIGxlbmd0aE1lbnU6IFs1LCAxMCwgNTAsIDEwMCwgMjAwLCA1MDBdLFxuICAgICAgICAvLyBoaWRlIGxlbmd0aCBtZW51XG4gICAgICAgIGxlbmd0aENoYW5nZTogZmFsc2UsXG4gICAgICAgIC8vIGVuYWJsZSBzZWFyY2ggYnV0IGhpZGUgc2VhcmNoIGJveCAoY3NzKVxuICAgICAgICBzZWFyY2hpbmc6IHRydWUsXG4gICAgICAgIC8vIGVuYWJsZSBkYXRhIHByb2Nlc3NpbmdcbiAgICAgICAgcHJvY2Vzc2luZzogdHJ1ZSxcbiAgICAgICAgLy8gZW5hYmxlIGdldHRpbmcgc2VydmVyIHNpZGUgZGF0YVxuICAgICAgICBzZXJ2ZXJTaWRlOiB0aGlzLnNlcnZlclNpZGUsXG4gICAgICAgIC8vIGVudW1lcmF0ZSB0YWJsZSBjb2x1bW5zXG4gICAgICAgIGNvbHVtbnM6IHRhYmxlQ29sdW1ucyxcbiAgICAgICAgb3JkZXI6IFtdLFxuICAgICAgICAvLyBzZXQgc2Nyb2xsIHhcbiAgICAgICAgc2Nyb2xsWDogdGhpcy5zY3JvbGxYLFxuICAgICAgICBkb206ICdCZnJ0aXAnLFxuICAgICAgICBhdXRvV2lkdGg6IGZhbHNlLFxuICAgICAgICBidXR0b25zOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgZXh0ZW5kOiAnZXhjZWwnLFxuICAgICAgICAgICAgZmlsZW5hbWU6IHRoaXMuY29uZmlnLnRpdGxlLFxuICAgICAgICAgICAgY2xhc3NOYW1lOiAnZC1ub25lJyxcbiAgICAgICAgICAgIGV4cG9ydE9wdGlvbnM6IHtcbiAgICAgICAgICAgICAgY29sdW1uczogJ3RoOm5vdCg6Zmlyc3QtY2hpbGQpJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgICAgLy8gZGVmaW5lIHNlcnZlciBkYXRhIGNhbGxiYWNrXG4gICAgICAgIGZuU2VydmVyRGF0YShzU291cmNlOiBhbnksIGFvRGF0YTogYW55LCBmbkNhbGxiYWNrOiBhbnksIG9TZXR0aW5nczogYW55KSB7XG4gICAgICAgICAgLy8gaWYgbWV0aG9kIGlzIGludm9rZWQgZm9yIHRoZSBmaXJzdCB0aW1lXG4gICAgICAgICAgaWYgKHNlbGYuX2ZpcnN0TG9hZCkge1xuICAgICAgICAgICAgLy8gZGlzYWJsZWQgZmlyc3QgbG9hZCBmbGFnXG4gICAgICAgICAgICBzZWxmLl9maXJzdExvYWQgPSBmYWxzZTtcbiAgICAgICAgICAgIC8vIGlmIGF1dG8gbG9hZCBpcyBkaXNhYmxlZFxuICAgICAgICAgICAgaWYgKHNlbGYuYXV0b0xvYWQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGVtcHR5RGF0YVNldCA9IHtcbiAgICAgICAgICAgICAgICByZWNvcmRzVG90YWw6IDAsXG4gICAgICAgICAgICAgICAgcmVjb3Jkc0ZpbHRlcmVkOiAwLFxuICAgICAgICAgICAgICAgIGRhdGE6IFtdLFxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAvLyBlbWl0IGVtcHR5IGRhdGFcbiAgICAgICAgICAgICAgc2VsZi5sb2FkLmVtaXQoZW1wdHlEYXRhU2V0KTtcbiAgICAgICAgICAgICAgLy8gcmV0dXJuIGVtcHR5IGRhdGFcbiAgICAgICAgICAgICAgcmV0dXJuIGZuQ2FsbGJhY2soZW1wdHlEYXRhU2V0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gZ2V0IGFjdGl2YXRlZCByb3V0ZSBwYXJhbXNcbiAgICAgICAgICBjb25zdCBxdWVyeVBhcmFtcyA9IHNlbGYuX2FjdGl2YXRlZFJvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1zO1xuICAgICAgICAgIC8vIGdldCBjb2x1bW5zXG4gICAgICAgICAgY29uc3QgY29sdW1ucyA9IGFvRGF0YVsxXS52YWx1ZTtcbiAgICAgICAgICAvLyBnZXQgb3JkZXIgZXhwcmVzc2lvblxuICAgICAgICAgIGNvbnN0IG9yZGVyID0gYW9EYXRhWzJdLnZhbHVlO1xuICAgICAgICAgIC8vIGdldCBza2lwIHJlY29yZHMgcGFyYW1cbiAgICAgICAgICBjb25zdCBza2lwID0gYW9EYXRhWzNdLnZhbHVlO1xuICAgICAgICAgIC8vIGdldCBwYWdlIHNpemUgcGFyYW1cbiAgICAgICAgICBjb25zdCB0b3AgPSBhb0RhdGFbNF0udmFsdWU7XG4gICAgICAgICAgLy8gZ2V0IHNlYXJjaCB2YWx1ZVxuICAgICAgICAgIGNvbnN0IHNlYXJjaFRleHQgPSBhb0RhdGFbNV0udmFsdWU7XG4gICAgICAgICAgLy8gZ2V0IGRhdGEgcXVlcnlhYmxlXG4gICAgICAgICAgY29uc3QgcSA9IHNlbGYuX3F1ZXJ5IGluc3RhbmNlb2YgQ2xpZW50RGF0YVF1ZXJ5YWJsZSA/IHNlbGYuX3F1ZXJ5IDogc2VsZi5fY29udGV4dC5tb2RlbChzZWxmLmNvbmZpZy5tb2RlbCkuYXNRdWVyeWFibGUoKTtcbiAgICAgICAgICAvLyBhcHBseSBwYWdpbmcgcGFyYW1zXG4gICAgICAgICAgaWYgKHRvcCkge1xuICAgICAgICAgICAgcS50YWtlKHRvcCkuc2tpcChza2lwKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gYXBwbHkgb3JkZXIgcGFyYW1zXG4gICAgICAgICAgaWYgKG9yZGVyICYmIG9yZGVyLmxlbmd0aCkge1xuICAgICAgICAgICAgLy8gZ2V0IG9yZGVyIHF1ZXJ5IGV4cHJlc3Npb25cbiAgICAgICAgICAgIGNvbnN0IG9yZGVyQnlTdHIgPSBvcmRlci5tYXAoKGV4cHIpID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRhYmxlQ29sdW1uc1tleHByLmNvbHVtbl0ubmFtZSArICcgJyArIGV4cHIuZGlyIHx8ICdhc2MnO1xuICAgICAgICAgICAgfSkuam9pbignLCcpO1xuICAgICAgICAgICAgLy8gc2V0IG9yZGVyXG4gICAgICAgICAgICBxLnNldFBhcmFtKCckb3JkZXJieScsIG9yZGVyQnlTdHIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBjb25maWd1cmUgJHNlbGVjdCBwYXJhbWV0ZXJcbiAgICAgICAgICBjb25zdCBzZWxlY3QgPSBzZWxmLmNvbmZpZy5jb2x1bW5zLmZpbHRlciggKGNvbHVtbikgPT4ge1xuICAgICAgICAgICAgaWYgKCBjb2x1bW4udmlydHVhbCA9PT0gdHJ1ZSApIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfSkubWFwKChjb2x1bW4pID0+IHtcbiAgICAgICAgICAgIGlmIChjb2x1bW4ucHJvcGVydHkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGNvbHVtbi5uYW1lICsgJyBhcyAnICsgY29sdW1uLnByb3BlcnR5O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGNvbHVtbi5uYW1lO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHEuc2VsZWN0LmFwcGx5KHEsIHNlbGVjdCk7XG4gICAgICAgICAgLy8gY29uZmlndXJlICRmaWx0ZXJcbiAgICAgICAgICBpZiAocXVlcnlQYXJhbXMuJGZpbHRlciAmJiBxdWVyeVBhcmFtcy4kZmlsdGVyLmxlbmd0aCkge1xuICAgICAgICAgICAgLy8gc2V0IHJvdXRlIGZpbHRlclxuICAgICAgICAgICAgY29uc3QgcVBhcmFtcyA9IHEuZ2V0UGFyYW1zKCk7XG4gICAgICAgICAgICBxLnNldFBhcmFtKCckZmlsdGVyJywgbnVsbCk7XG4gICAgICAgICAgICBjb25zdCBleHByZXNzaW9ucyA9IFsgcXVlcnlQYXJhbXMuJGZpbHRlciBdO1xuICAgICAgICAgICAgaWYgKHFQYXJhbXMuJGZpbHRlcikgeyBleHByZXNzaW9ucy5wdXNoKCcoJyArIHFQYXJhbXMuJGZpbHRlciArICcpJyApOyB9XG4gICAgICAgICAgICBxLmZpbHRlcihleHByZXNzaW9ucy5qb2luKCcgYW5kICcpKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gY2hlY2sgaWYgcXVlcnkgcGFyYW1ldGVycyBjb250YWluIGZpbHRlclxuICAgICAgICAgIGlmIChxdWVyeVBhcmFtcy4kZXhwYW5kICYmIHF1ZXJ5UGFyYW1zLiRleHBhbmQubGVuZ3RoKSB7XG4gICAgICAgICAgICAvLyBzZXQgcm91dGUgJGV4cGFuZFxuICAgICAgICAgICAgcS5zZXRQYXJhbSgnJGV4cGFuZCcsIHF1ZXJ5UGFyYW1zLiRleHBhbmQpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoc2VsZi5jb25maWcgJiYgc2VsZi5jb25maWcuZGVmYXVsdHMgJiYgc2VsZi5jb25maWcuZGVmYXVsdHMuZXhwYW5kKSB7XG4gICAgICAgICAgICBxLnNldFBhcmFtKCckZXhwYW5kJywgc2VsZi5jb25maWcuZGVmYXVsdHMuZXhwYW5kKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCFxLmdldFBhcmFtcygpWyckb3JkZXJieSddICYmIHNlbGYuY29uZmlnICYmIHNlbGYuY29uZmlnLmRlZmF1bHRzICYmIHNlbGYuY29uZmlnLmRlZmF1bHRzLm9yZGVyQnkpIHtcbiAgICAgICAgICAgIHEuc2V0UGFyYW0oJyRvcmRlcmJ5Jywgc2VsZi5jb25maWcuZGVmYXVsdHMub3JkZXJCeSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChzZWxmLmNvbmZpZyAmJiBzZWxmLmNvbmZpZy5kZWZhdWx0cyAmJiBzZWxmLmNvbmZpZy5kZWZhdWx0cy5ncm91cEJ5KSB7XG4gICAgICAgICAgICBxLnNldFBhcmFtKCckZ3JvdXBieScsIHNlbGYuY29uZmlnLmRlZmF1bHRzLmdyb3VwQnkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBhcHBlbmQgZGVmYXVsdCBmaWx0ZXJcbiAgICAgICAgICBpZiAoc2VsZi5jb25maWcgJiYgc2VsZi5jb25maWcuZGVmYXVsdHMgJiYgc2VsZi5jb25maWcuZGVmYXVsdHMuZmlsdGVyKSB7XG4gICAgICAgICAgICByZXR1cm4gc2VsZi5fYWR2YW5jZWRGaWx0ZXJWYWx1ZVByb3ZpZGVyLmFzeW5jQnVpbGRGaWx0ZXIoc2VsZi5jb25maWcuZGVmYXVsdHMuZmlsdGVyKS50aGVuKChkZWZhdWx0RmlsdGVyU3RyaW5nKSA9PiB7XG4gICAgICAgICAgICAgIGlmIChkZWZhdWx0RmlsdGVyU3RyaW5nKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcVBhcmFtcyA9IHEuZ2V0UGFyYW1zKCk7XG4gICAgICAgICAgICAgICAgcS5zZXRQYXJhbSgnJGZpbHRlcicsIG51bGwpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGV4cHJlc3Npb25zID0gWyBkZWZhdWx0RmlsdGVyU3RyaW5nIF07XG4gICAgICAgICAgICAgICAgaWYgKHFQYXJhbXMuJGZpbHRlcikgeyBleHByZXNzaW9ucy5wdXNoKCcoJyArIHFQYXJhbXMuJGZpbHRlciArICcpJyApOyB9XG4gICAgICAgICAgICAgICAgcS5maWx0ZXIoZXhwcmVzc2lvbnMuam9pbignIGFuZCAnKSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgc2VsZi5sYXN0UXVlcnlQYXJhbXMgPSBxLmdldFBhcmFtcygpO1xuICAgICAgICAgICAgICBxLmdldExpc3QoKS50aGVuKChpdGVtcykgPT4ge1xuICAgICAgICAgICAgICAgICAgY29uc3QgZGF0YVNldCA9IHtcbiAgICAgICAgICAgICAgICAgICAgcmVjb3Jkc1RvdGFsOiBpdGVtcy50b3RhbCxcbiAgICAgICAgICAgICAgICAgICAgcmVjb3Jkc0ZpbHRlcmVkOiBpdGVtcy50b3RhbCxcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogaXRlbXMudmFsdWUsXG4gICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgaWYgKGl0ZW1zLnRvdGFsID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYucmVzZXRFbXB0eVRhYmxlKCk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAvLyBlbWl0IGxvYWQgZXZlbnRcbiAgICAgICAgICAgICAgICAgIHNlbGYubG9hZC5lbWl0KGRhdGFTZXQpO1xuICAgICAgICAgICAgICAgICAgLy8gcmV0dXJuIGRhdGFcbiAgICAgICAgICAgICAgICAgIHJldHVybiBmbkNhbGxiYWNrKGRhdGFTZXQpO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pLmNhdGNoKChlcnIpID0+IHtcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignVEFCTEVTJywgZXJyKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBzZWxmLmxhc3RRdWVyeVBhcmFtcyA9IHEuZ2V0UGFyYW1zKCk7XG4gICAgICAgICAgcS5nZXRMaXN0KCkudGhlbigoaXRlbXMpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGFTZXQgPSB7XG4gICAgICAgICAgICAgIHJlY29yZHNUb3RhbDogaXRlbXMudG90YWwsXG4gICAgICAgICAgICAgIHJlY29yZHNGaWx0ZXJlZDogaXRlbXMudG90YWwsXG4gICAgICAgICAgICAgIGRhdGE6IGl0ZW1zLnZhbHVlLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmIChpdGVtcy50b3RhbCA9PT0gMCkge1xuICAgICAgICAgICAgICBzZWxmLnJlc2V0RW1wdHlUYWJsZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gZW1pdCBsb2FkIGV2ZW50XG4gICAgICAgICAgICBzZWxmLmxvYWQuZW1pdChkYXRhU2V0KTtcbiAgICAgICAgICAgIC8vIHJldHVybiBkYXRhXG4gICAgICAgICAgICByZXR1cm4gZm5DYWxsYmFjayhkYXRhU2V0KTtcbiAgICAgICAgICB9KS5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdUQUJMRVMnLCBlcnIpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBsYW5ndWFnZTogT2JqZWN0LmFzc2lnbih7IH0sIHNlbGYudHJhbnNsYXRvci50cmFuc2Zvcm0oJ1RhYmxlcy5EYXRhVGFibGUnKSxcbiAgICAgICAgICB7ZW1wdHlUYWJsZTogJyAnIH0pLFxuICAgICAgfTtcblxuICAgICAgaWYgKHRoaXMuc2Nyb2xsYWJsZSkge1xuICAgICAgICAvLyBzZXQgY29udGludW91cyBzY3JvbGxpbmdcbiAgICAgICAgT2JqZWN0LmFzc2lnbihzZXR0aW5ncywge1xuICAgICAgICAgIHNjcm9sbFk6IHRoaXMuc2Nyb2xsWSxcbiAgICAgICAgICBzY3JvbGxDb2xsYXBzZTogZmFsc2UsXG4gICAgICAgICAgc2Nyb2xsZXI6IHtcbiAgICAgICAgICAgIGxvYWRpbmdJbmRpY2F0b3I6IGZhbHNlLFxuICAgICAgICAgICAgZGlzcGxheUJ1ZmZlcjogMTAsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBPYmplY3QuYXNzaWduKHNldHRpbmdzLCB7XG4gICAgICAgICAgcGFnaW5nOiB0aGlzLnBhZ2luZyxcbiAgICAgICAgICBwYWdlTGVuZ3RoOiB0aGlzLnBhZ2VMZW5ndGgsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuc2VsZWN0YWJsZSkge1xuXG4gICAgICB9XG4gICAgICAvLyBoYW5kbGUgaW5pdC5kdCBldmVudCBhbmQgZW1pdCBsb2NhbCBldmVudFxuICAgICAgdGhpcy5kYXRhVGFibGUgPSB0YWJsZUVsZW1lbnQuRGF0YVRhYmxlKHNldHRpbmdzKTtcbiAgICAgIHRhYmxlRWxlbWVudC5vbignaW5pdC5kdCcsICgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuZGF0YVRhYmxlID09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gcmVzdG9yZSBkZWZhdWx0IGVtcHR5IHRhYmxlIGh0bWxcbiAgICAgICAgLy8gKGR1ZSB0byBuZyBhc3luYyBiaW5kaW5nKVxuICAgICAgICB0aGlzLmluaXQuZW1pdCh0aGlzLmRhdGFUYWJsZSk7XG4gICAgICB9KTtcblxuICAgICAgLy8gc2hvdyBvciBoaWRlIGhlYWRlclxuICAgICAgaWYgKCF0aGlzLnNob3dIZWFkZXIpIHtcbiAgICAgICAgKCB0aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQgYXMgSFRNTERpdkVsZW1lbnQpXG4gICAgICAgICAgLnF1ZXJ5U2VsZWN0b3IoJy5kYXRhVGFibGU+dGhlYWQnKS5jbGFzc0xpc3QuYWRkKCdkLW5vbmUnKTtcbiAgICAgICAgKCB0aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQgYXMgSFRNTERpdkVsZW1lbnQpXG4gICAgICAgICAgLnF1ZXJ5U2VsZWN0b3IoJy5kYXRhVGFibGUnKS5jbGFzc0xpc3QuYWRkKCdtdC0yJyk7XG4gICAgICB9XG5cbiAgICAgIC8vIHNob3cgb3IgaGlkZSBmb290ZXJcbiAgICAgIGlmICghdGhpcy5zaG93Rm9vdGVyKSB7XG4gICAgICAgICggdGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50IGFzIEhUTUxEaXZFbGVtZW50KVxuICAgICAgICAgIC5xdWVyeVNlbGVjdG9yKCcuZGF0YVRhYmxlc19pbmZvJykuY2xhc3NMaXN0LmFkZCgnZC1ub25lJyk7XG4gICAgICB9XG4gICAgICAvLyBzaG93IG9yIGhpZGUgcGFnZXJcbiAgICAgIGlmICh0aGlzLnNob3dQYWdpbmcpIHtcbiAgICAgICAgdGhpcy5zaG93UGFnaW5nID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBnZXQgbGFzdFF1ZXJ5KCk6IENsaWVudERhdGFRdWVyeWFibGUge1xuICAgIGlmICh0aGlzLmNvbmZpZyA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgaWYgKHRoaXMubGFzdFF1ZXJ5UGFyYW1zID09IG51bGwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCBxID0gdGhpcy5fY29udGV4dC5tb2RlbCh0aGlzLmNvbmZpZy5tb2RlbCkuYXNRdWVyeWFibGUoKTtcbiAgICBPYmplY3Qua2V5cyh0aGlzLmxhc3RRdWVyeVBhcmFtcykuZm9yRWFjaCggKGtleSkgPT4ge1xuICAgICAgcS5zZXRQYXJhbShrZXksIHRoaXMubGFzdFF1ZXJ5UGFyYW1zW2tleV0pO1xuICAgIH0pO1xuICAgIC8vIHJldHVybiBxdWVyeVxuICAgIHJldHVybiBxO1xuICB9XG5cbiAgLyoqXG4gICAqIEZldGNoZXMgYW5kIHVwZGF0ZXMgYSBzaW5nbGUgcm93XG4gICAqIEBwYXJhbSBmaW5kIC0gQW55IG9iamVjdCB3aGljaCBpcyBiZWluZyBjb252ZXJ0ZWQgdG8gYSBxdWVyeVxuICAgKi9cbiAgcHVibGljIGZldGNoT25lKGZpbmQ6IGFueSkge1xuICAgIGlmIChmaW5kID09IG51bGwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMuZGF0YVRhYmxlID09IG51bGwpIHtcbiAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5sYXN0UXVlcnlQYXJhbXMgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBnZXQgcm93c1xuICAgIGNvbnN0IHJvd3MgPSBBcnJheS5mcm9tKHRoaXMuZGF0YVRhYmxlLnJvd3MoKS5kYXRhKCkpO1xuICAgIGlmIChyb3dzICYmIHJvd3MubGVuZ3RoKSB7XG4gICAgICAvLyBmaW5kIHJlc3VsdFxuICAgICAgY29uc3QgZmluZEtleXMgPSBPYmplY3Qua2V5cyhmaW5kKTtcbiAgICAgIGlmIChmaW5kS2V5cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgLy8gZG8gbm90aGluZ1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICAvLyBmaW5kIHJvdyBpbmRleCBieSBzZWFyY2hpbmcgZWFjaCBwcm9wZXJ0eVxuICAgICAgY29uc3Qgcm93SW5kZXggPSByb3dzLmZpbmRJbmRleCgocm93OiBhbnkpID0+IHtcbiAgICAgICAgcmV0dXJuIGZpbmRLZXlzLm1hcCggKGtleSkgPT4ge1xuICAgICAgICAgIHJldHVybiByb3dba2V5XSA9PT0gZmluZFtrZXldO1xuICAgICAgICB9KS5maWx0ZXIoIChyZXMpID0+IHtcbiAgICAgICAgICByZXR1cm4gcmVzID09PSBmYWxzZTtcbiAgICAgICAgfSkubGVuZ3RoID09PSAwO1xuICAgICAgfSk7XG4gICAgICAvLyBpZiByb3cgaGFzIGJlZW4gZm91bmRcbiAgICAgIGlmIChyb3dJbmRleCA+PSAwKSB7XG4gICAgICAgIGNvbnN0IHF1ZXJ5ID0gdGhpcy5fY29udGV4dC5tb2RlbCh0aGlzLmNvbmZpZy5tb2RlbCkuYXNRdWVyeWFibGUoKTtcbiAgICAgICAgLy8gc2VsZWN0IGF0dHJpYnV0ZXNcbiAgICAgICAgcXVlcnkuc2V0UGFyYW0oJyRzZWxlY3QnLCB0aGlzLmxhc3RRdWVyeVBhcmFtcy4kc2VsZWN0KTtcbiAgICAgICAgLy8gYXBwbHkgZmlsdGVyIGZvciByb3dcbiAgICAgICAgZmluZEtleXMuZm9yRWFjaCggKGtleSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGNvbHVtbiA9IHRoaXMuY29uZmlnLmNvbHVtbnMuZmluZCggKGNvbCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGNvbC5wcm9wZXJ0eSA9PT0ga2V5IHx8IGNvbC5uYW1lID09PSBrZXk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgaWYgKGNvbHVtbikge1xuICAgICAgICAgICAgLy8gZ2V0IHByb3BlcnR5IG9yIG5hbWVcbiAgICAgICAgICAgIGNvbnN0IHByb3BlcnR5ID0gY29sdW1uLnByb3BlcnR5IHx8IGNvbHVtbi5uYW1lO1xuICAgICAgICAgICAgcXVlcnkuYW5kKHByb3BlcnR5KS5lcXVhbChmaW5kW2tleV0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBxdWVyeS5hbmQoa2V5KS5lcXVhbChmaW5kW2tleV0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIC8vIGFuZCBmaW5hbGx5IGdldCBpdGVtXG4gICAgICAgIHJldHVybiBxdWVyeS5nZXRJdGVtKCkudGhlbiggKGl0ZW0pID0+IHtcbiAgICAgICAgICAvLyBpZiBpdGVtIGV4aXN0c1xuICAgICAgICAgIGNvbnN0IHJvdyA9IHRoaXMuZGF0YVRhYmxlLnJvdyhyb3dJbmRleCk7XG4gICAgICAgICAgY29uc3QgY2hlY2tlZCA9IGpRdWVyeShyb3cubm9kZSgpKS5maW5kKCc6Y2hlY2tib3gnKS5wcm9wKCdjaGVja2VkJyk7XG4gICAgICAgICAgaWYgKGl0ZW0pIHtcbiAgICAgICAgICAgIC8vIHJlZHJhdyByb3dcbiAgICAgICAgICAgIHJvdy5kYXRhKGl0ZW0pO1xuICAgICAgICAgICAgalF1ZXJ5KHJvdy5ub2RlKCkpLmZpbmQoJzpjaGVja2JveCcpLm9uKCdjbGljaycsIHRoaXMub25TZWxlY3Rpb25DaGFuZ2UuYmluZCh0aGlzKSk7XG4gICAgICAgICAgICAvLyBpZiByb3cgaXMgYWxyZWFkeSBzZWxlY3RlZFxuICAgICAgICAgICAgaWYgKGNoZWNrZWQpIHtcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RSb3cocm93LCB0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnJlbG9hZFN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5yZWxvYWRTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlIHNlbGVjdGlvbiBjaGFuZ2VcbiAgICogQHBhcmFtICRldmVudFxuICAgKi9cbiAgcHVibGljIG9uU2VsZWN0aW9uQ2hhbmdlKCRldmVudCkge1xuICAgIGNvbnN0IGlucHV0ID0gICRldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudDtcbiAgICAvLyBnZXQgcm93IGZyb20gaWRcbiAgICBjb25zdCByb3dJbmRleCA9IHBhcnNlSW50KC8tKFxcZCspJC9nLmV4ZWMoaW5wdXQuaWQpWzFdLCAxMCk7XG4gICAgLy8gZ2V0IHJvd1xuICAgIGNvbnN0IHJvdyA9IHRoaXMuZGF0YVRhYmxlLnJvdyhyb3dJbmRleCkuZGF0YSgpO1xuICAgIC8vIGdldCByb3cgaWRlbnRpZmllclxuICAgIGlmIChyb3cpIHtcbiAgICAgIGNvbnN0IGtleSA9IHRoaXMuY29uZmlnLmNvbHVtbnNbMF0ucHJvcGVydHk7XG4gICAgICBjb25zdCBpZCA9IHJvd1trZXldO1xuICAgICAgbGV0IGZpbmRJdGVtSW5kZXggPSB0aGlzLnNlbGVjdGVkLmZpbmRJbmRleCgoaXRlbSkgPT4ge1xuICAgICAgICByZXR1cm4gaXRlbVtrZXldID09PSBpZDtcbiAgICAgIH0pO1xuICAgICAgaWYgKGlucHV0LmNoZWNrZWQpIHtcbiAgICAgICAgaWYgKGZpbmRJdGVtSW5kZXggPCAwKSB7XG4gICAgICAgICAgLy8gYWRkIHJvdyB0byBzZWxlY3RlZCByb3dzXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZC5wdXNoKHJvdyk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChmaW5kSXRlbUluZGV4ID49IDApIHtcbiAgICAgICAgICAvLyByZW1vdmUgc2VsZWN0ZWQgaXRlbVxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWQuc3BsaWNlKGZpbmRJdGVtSW5kZXgsIDEpO1xuICAgICAgICAgIGlmICh0aGlzLnNtYXJ0U2VsZWN0KSB7XG4gICAgICAgICAgICAvLyBhZGQgcm93IHRvIHVuc2VsZWN0ZWQgcm93c1xuICAgICAgICAgICAgZmluZEl0ZW1JbmRleCA9IHRoaXMudW5zZWxlY3RlZC5maW5kSW5kZXgoKGl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIGl0ZW1ba2V5XSA9PT0gaWQ7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmIChmaW5kSXRlbUluZGV4IDwgMCkge1xuICAgICAgICAgICAgICB0aGlzLnVuc2VsZWN0ZWQucHVzaChyb3cpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcmVzZXRFbXB0eVRhYmxlKCkge1xuICAgIC8vIHRoaXMgb3BlcmF0aW9uIGlzIGltcG9ydGFudFxuICAgIC8vIGR1ZSB0byBuZyBkYXRhIGJpbmRpbmdcbiAgICAvLyBlbXB0eSB0YWJsZSB0ZW1wbGF0ZSBoYXMgbm8gdHJhbnNsYXRlZCB0ZXh0IGR1cmluZyBuZ09uSW5pdCgpXG4gICAgaWYgKHRoaXMuZGF0YVRhYmxlICYmIHRoaXMuZGF0YVRhYmxlLmNvbnRleHRbMF0pIHtcbiAgICAgIHRoaXMuZGF0YVRhYmxlLmNvbnRleHRbMF0ub0xhbmd1YWdlLnNFbXB0eVRhYmxlID0gdGhpcy5lbXB0eVRhYmxlLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY2xlYXJFbXB0eVRhYmxlKCkge1xuICAgIGlmICh0aGlzLmRhdGFUYWJsZSAmJiB0aGlzLmRhdGFUYWJsZS5jb250ZXh0WzBdKSB7XG4gICAgICB0aGlzLmRhdGFUYWJsZS5jb250ZXh0WzBdLm9MYW5ndWFnZS5zRW1wdHlUYWJsZSA9ICcnO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBleHBvcnQoKSB7XG4gICAgY29uc3QgZWxlbWVudDogSFRNTEVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuZHQtYnV0dG9ucyAuYnV0dG9ucy1leGNlbCcpIGFzIEhUTUxFbGVtZW50O1xuICAgIGVsZW1lbnQuY2xpY2soKTtcbiAgfVxuXG4gIHB1YmxpYyBoYW5kbGVDb2x1bW5zKGNvbHVtbnNUb1Nob3cpIHtcbiAgICBjb25zdCB0YWJsZSA9IHRoaXMuZGF0YVRhYmxlO1xuICAgIHRoaXMuY29uZmlnLmNvbHVtbnMuc2xpY2UoMSkuZm9yRWFjaCgoY29sdW1uLCBpKSA9PiB7XG4gICAgICBpZiAoIWNvbHVtbi5oaWRkZW4pIHtcbiAgICAgICAgaWYgKGNvbHVtbnNUb1Nob3cuaW5jbHVkZXMoY29sdW1uLm5hbWUpKSB7XG4gICAgICAgICAgLy8gbm9pbnNwZWN0aW9uIFR5cGVTY3JpcHRWYWxpZGF0ZUpTVHlwZXNcbiAgICAgICAgICB0YWJsZS5jb2x1bW4oY29sdW1uLm5hbWUgKyAnOm5hbWUnKS52aXNpYmxlKHRydWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIG5vaW5zcGVjdGlvbiBUeXBlU2NyaXB0VmFsaWRhdGVKU1R5cGVzXG4gICAgICAgICAgdGFibGUuY29sdW1uKGNvbHVtbi5uYW1lICsgJzpuYW1lJykudmlzaWJsZShmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRDb25maWcoKSB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnO1xuICB9XG5cbiAgcHVibGljIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGNoYW5nZXMsICdjb25maWdTcmMnKSkge1xuICAgICAgaWYgKGNoYW5nZXMuY29uZmlnU3JjICE9IG51bGwpIHtcbiAgICAgICAgLy8gbG9hZCB0YWJsZSBjb25maWd1cmF0aW9uIG9uIGNoYW5nZVxuICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IHRyaXBsZS1lcXVhbHNcbiAgICAgICAgaWYgKGNoYW5nZXMuY29uZmlnU3JjLmN1cnJlbnRWYWx1ZSAmJiAoY2hhbmdlcy5jb25maWdTcmMuY3VycmVudFZhbHVlICE9IGNoYW5nZXMuY29uZmlnU3JjLnByZXZpb3VzVmFsdWUpKSB7XG4gICAgICAgICAgdGhpcy5faHR0cC5nZXQoY2hhbmdlcy5jb25maWdTcmMuY3VycmVudFZhbHVlKS50b1Byb21pc2UoKS50aGVuKChjb25maWc6IFRhYmxlQ29uZmlndXJhdGlvbikgPT4ge1xuICAgICAgICAgICAgLy8gc2V0IGNvbmZpZ3VyYXRpb25cbiAgICAgICAgICAgIHRoaXMuY29uZmlnID0gY29uZmlnO1xuICAgICAgICAgICAgLy8gZmV0Y2ggYW5kIHJlZHJhd1xuICAgICAgICAgICAgdGhpcy5mZXRjaCgpO1xuICAgICAgICAgIH0pLmNhdGNoKChlcnIpID0+IHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1RBQkxFUycsICdBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSBsb2FkaW5nIHRhYmxlIGNvbmZpZ3VyYXRpb24uJyk7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxufVxuIl19
1105
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWR2YW5jZWQtdGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHVuaXZlcnNpcy9uZ3gtdGFibGVzLyIsInNvdXJjZXMiOlsibGliL2NvbXBvbmVudHMvYWR2YW5jZWQtdGFibGUvYWR2YW5jZWQtdGFibGUuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxpQkFBaUIsRUFDakIsU0FBUyxFQUNULFVBQVUsRUFBRSxZQUFZLEVBQ3hCLE1BQU0sRUFDTixjQUFjLEVBQ2QsUUFBUSxFQUNSLEtBQUssRUFDRyxNQUFNLEVBQ2QsU0FBUyxFQUNULGlCQUFpQixHQUdsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQztBQUNwRCxPQUFPLEVBQUMsYUFBYSxFQUFFLGdCQUFnQixFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDcEUsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBRy9DLE9BQU8sRUFBQyx1QkFBdUIsRUFBQyxNQUFNLDZCQUE2QixDQUFDO0FBQ3BFLE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQ3BELE9BQU8sRUFBQywyQkFBMkIsRUFBQyxNQUFNLDBDQUEwQyxDQUFDO0FBQ3JGLE9BQU8sRUFBZSxlQUFlLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDbkQsT0FBTyxFQUFDLFlBQVksRUFBRSxjQUFjLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQUUvRCxvRkFBb0Y7QUFDcEYsT0FBTyxLQUFLLE9BQU8sTUFBTSxRQUFRLENBQUM7QUFDbEMsT0FBTyxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sUUFBUSxDQUFDO0FBQ2hDLE9BQU8seUJBQXlCLENBQUM7QUFDakMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2xELDBFQUEwRTtB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LFNBQUMsaUJBQWlCO1lBcFIvQixjQUFjO1lBREMsZ0JBQWdCO1lBVHJDLFFBQVE7WUFlRiwyQkFBMkI7WUFsQmpDLFVBQVU7WUFvQkosWUFBWTtZQUFFLGNBQWM7WUFPM0IsVUFBVTs7O29CQThHaEIsU0FBUyxTQUFDLE9BQU87eUJBQ2pCLFNBQVMsU0FBQyxZQUFZOzJCQUN0QixTQUFTLFNBQUMsY0FBYztxQkFDeEIsS0FBSzswQkFDTCxLQUFLO3VCQUNMLEtBQUs7bUJBQ0wsTUFBTSxTQUFDLE1BQU07bUJBQ2IsTUFBTSxTQUFDLE1BQU07cUJBQ2IsS0FBSyxTQUFDLFFBQVE7cUJBQ2QsTUFBTSxTQUFDLFFBQVE7NEJBQ2YsTUFBTSxTQUFDLGVBQWU7eUJBRXRCLEtBQUs7eUJBQ0wsS0FBSzt5QkFDTCxLQUFLO3FCQUNMLEtBQUs7eUJBQ0wsS0FBSztzQkFFTCxLQUFLO3NCQUNMLEtBQUs7eUJBSUwsS0FBSzs2QkFJTCxLQUFLOzJCQUlMLEtBQUs7dUJBQ0wsS0FBSzt3QkFLTCxLQUFLO3FCQUtMLEtBQUssU0FBQyxRQUFRO3lCQWNkLEtBQUssU0FBQyxZQUFZO3lCQXlCakIsS0FBSyxTQUFDLFlBQVk7eUJBOEJuQixLQUFLLFNBQUMsWUFBWTtvQkF5QmxCLEtBQUssU0FBQyxPQUFPIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLFxuICBJbmplY3QsXG4gIEluamVjdGlvblRva2VuLFxuICBJbmplY3RvcixcbiAgSW5wdXQsIE9uRGVzdHJveSxcbiAgT25Jbml0LCBPdXRwdXQsXG4gIFZpZXdDaGlsZCxcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG4gIE9uQ2hhbmdlcyxcbiAgU2ltcGxlQ2hhbmdlcyxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0FuZ3VsYXJEYXRhQ29udGV4dH0gZnJvbSAnQHRoZW1vc3QvYW5ndWxhcic7XG5pbXBvcnQge1RyYW5zbGF0ZVBpcGUsIFRyYW5zbGF0ZVNlcnZpY2V9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHtBY3RpdmF0ZWRSb3V0ZX0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7VGFibGVDb25maWd1cmF0aW9ufSBmcm9tICcuL2FkdmFuY2VkLXRhYmxlLmludGVyZmFjZXMnO1xuaW1wb3J0IHtEYXRhU2VydmljZVF1ZXJ5UGFyYW1zfSBmcm9tICdAdGhlbW9zdC9jbGllbnQnO1xuaW1wb3J0IHtBZHZhbmNlZENvbHVtbkZvcm1hdHRlcn0gZnJvbSAnLi9hZHZhbmNlZC10YWJsZS5mb3JtYXR0ZXJzJztcbmltcG9ydCB7Q2xpZW50RGF0YVF1ZXJ5YWJsZX0gZnJvbSAnQHRoZW1vc3QvY2xpZW50JztcbmltcG9ydCB7QWR2YW5jZWRGaWx0ZXJWYWx1ZVByb3ZpZGVyfSBmcm9tICcuL2FkdmFuY2VkLWZpbHRlci12YWx1ZS1wcm92aWRlci5zZXJ2aWNlJztcbmltcG9ydCB7U3Vic2NyaXB0aW9uLCBCZWhhdmlvclN1YmplY3R9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtUZW1wbGF0ZVBpcGUsIExvYWRpbmdTZXJ2aWNlfSBmcm9tICdAdW5pdmVyc2lzL2NvbW1vbic7XG5pbXBvcnQge0lBZHZhbmNlZFRhYmxlRm9ybWF0dGVyc30gZnJvbSAnLi9hZHZhbmNlZC10YWJsZS5mb3JtYXR0ZXJzLmludGVyZmFjZSc7XG4vLyBpbXBvcnRhbnQgbm90ZTogdXNlIHRoaXMgaW1wb3J0IHRvIGF2b2lkIENhbm5vdCBjYWxsIGEgbmFtZXNwYWNlICgnanF1ZXJ5JykgZXJyb3JcbmltcG9ydCAqIGFzIGpRdWVyeV8gZnJvbSAnanF1ZXJ5JztcbmltcG9ydCAnZGF0YXRhYmxlcy5uZXQnO1xuaW1wb3J0IHt0ZW1wbGF0ZX0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCAnZGF0YXRhYmxlcy5uZXQtc2Nyb2xsZXInO1xuaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbi8vIHJlc3RvcmUganF1ZXJ5IGltcG9ydCB0byBhdm9pZCBDYW5ub3QgY2FsbCBhIG5hbWVzcGFjZSAoJ2pxdWVyeScpIGVycm9yXG5jb25zdCBqUXVlcnkgPSBqUXVlcnlfO1xuZXhwb3J0IGludGVyZmFjZSBBZHZhbmNlZFRhYmxlRGF0YVJlc3VsdCB7XG4gIHJlY29yZHNUb3RhbDogbnVtYmVyO1xuICByZWNvcmRzRmlsdGVyZWQ6IG51bWJlcjtcbiAgZGF0YTogQXJyYXk8YW55Pjtcbn1cblxuY29uc3QgRGF0YVRhYmxlc0FwaTogYW55ID0galF1ZXJ5LmZuLmRhdGFUYWJsZS5BcGk7XG5EYXRhVGFibGVzQXBpLnJlZ2lzdGVyKCAncHJvY2Vzc2luZygpJywgZnVuY3Rpb24oIHNob3c6IGFueSApIHtcbiAgICByZXR1cm4gdGhpcy5pdGVyYXRvcigndGFibGUnLCAoIGN0eDogYW55ICkgPT4ge1xuICAgICAgICBjdHgub0FwaS5fZm5Qcm9jZXNzaW5nRGlzcGxheSggY3R4LCBzaG93ICk7XG4gICAgfSApO1xufSk7XG5cbmNsYXNzIFRhYmxlVHJhbnNsYXRpb25DaGFuZ2VEZXRlY3RvciBleHRlbmRzIENoYW5nZURldGVjdG9yUmVmIHtcbiAgcHVibGljIGNoZWNrTm9DaGFuZ2VzKCk6IHZvaWQge1xuICB9XG5cbiAgcHVibGljIGRldGFjaCgpOiB2b2lkIHtcbiAgfVxuXG4gIHB1YmxpYyBkZXRlY3RDaGFuZ2VzKCk6IHZvaWQge1xuICB9XG5cbiAgcHVibGljIG1hcmtGb3JDaGVjaygpOiB2b2lkIHtcbiAgfVxuXG4gIHB1YmxpYyByZWF0dGFjaCgpOiB2b2lkIHtcbiAgfVxuXG59XG5cbmV4cG9ydCBsZXQgQ09MVU1OX0ZPUk1BVFRFUlMgPSBuZXcgSW5qZWN0aW9uVG9rZW4oJ2NvbHVtbi5mb3JtYXR0ZXJzJyk7XG5cbmNsYXNzIENvbHVtbkZvcm1hdHRlciBleHRlbmRzIEFkdmFuY2VkQ29sdW1uRm9ybWF0dGVyIHtcbiAgY29uc3RydWN0b3IocHJvdGVjdGVkIGluamVjdG9yOiBJbmplY3Rvcikge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICBwdWJsaWMgY2xhc3M6IHN0cmluZztcbiAgcHVibGljIGNsYXNzTmFtZTogc3RyaW5nO1xuICBwdWJsaWMgZGVmYXVsdENvbnRlbnQ6IHN0cmluZztcbiAgcHVibGljIGZvcm1hdFN0cmluZzogc3RyaW5nO1xuICBwdWJsaWMgZm9ybWF0dGVyOiBzdHJpbmc7XG4gIHB1YmxpYyBoaWRkZW46IGJvb2xlYW47XG4gIHB1YmxpYyBuYW1lOiBzdHJpbmc7XG4gIHB1YmxpYyBvcmRlcjogc3RyaW5nO1xuICBwdWJsaWMgcHJvcGVydHk6IHN0cmluZztcbiAgcHVibGljIHNvcnRhYmxlOiBib29sZWFuO1xuICBwdWJsaWMgdGl0bGU6IHN0cmluZztcblxuICBwdWJsaWMgcmVuZGVyKGRhdGE6IGFueSwgdHlwZTogYW55LCByb3c6IGFueSwgbWV0YTogYW55KSB7XG4gICAgLy9cbiAgfVxufVxuXG5mdW5jdGlvbiBmb3JjZUNhc3Q8VD4oaW5wdXQ6IGFueSk6IFQge1xuICByZXR1cm4gaW5wdXQ7XG59XG5cbmV4cG9ydCBjbGFzcyBBZHZhbmNlZFRhYmxlQ29uZmlndXJhdGlvbiB7XG4gIHB1YmxpYyBzdGF0aWMgY2FzdChpbnB1dDogYW55LCBjbG9uZT86IGJvb2xlYW4pOiBUYWJsZUNvbmZpZ3VyYXRpb24ge1xuICAgIGlmIChjbG9uZSkge1xuICAgICAgcmV0dXJuIGZvcmNlQ2FzdDxUYWJsZUNvbmZpZ3VyYXRpb24+KEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoaW5wdXQpKSk7XG4gICAgfVxuICAgIHJldHVybiBmb3JjZUNhc3Q8VGFibGVDb25maWd1cmF0aW9uPihpbnB1dCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0UmFuZG9tSWRlbnRpZmllcigpIHtcbiAgcmV0dXJuIChcbiAgICBOdW1iZXIoU3RyaW5nKE1hdGgucmFuZG9tKCkpLnNsaWNlKDIpKVxuICApLnRvU3RyaW5nKDM2KTtcbn1cblxuQENvbXBvbmVudCh7XG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogY29tcG9uZW50LXNlbGVjdG9yXG4gIHNlbGVjdG9yOiAnYXBwLWFkdmFuY2VkLXRhYmxlJyxcbiAgdGVtcGxhdGU6IGBcbiAgICA8dGFibGUgI3RhYmxlIGNsYXNzPVwiZGF0YVRhYmxlXCI+XG4gICAgPC90YWJsZT5cbiAgICA8ZGl2ICNlbXB0eVRhYmxlIGNsYXNzPVwiZC1ub25lXCI+XG4gICAgICA8ZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwibXQtNFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpY29uLWNpcmNsZSBiZy1ncmF5LTMwMCBib3JkZXItZ3JheS0xMDBcIj48L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtdC00XCI+XG4gICAgICAgICAgPGg0IGNsYXNzPVwiZm9udC0zeGwgdGV4dC1kYXJrXCIgW3RyYW5zbGF0ZV09XCInVGFibGVzLkVtcHR5VGFibGVUaXRsZSdcIj48L2g0PlxuICAgICAgICAgIDxwIGNsYXNzPVwiZm9udC1sZyB0ZXh0LWRhcmtcIiBbdHJhbnNsYXRlXT1cIidUYWJsZXMuRW1wdHlUYWJsZU1lc3NhZ2UnXCI+PC9wPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICBgLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBzdHlsZVVybHM6IFsnLi9hZHZhbmNlZC10YWJsZS5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBBZHZhbmNlZFRhYmxlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIE9uQ2hhbmdlcyB7XG5cbiAgcHJpdmF0ZSBfcXVlcnk6IENsaWVudERhdGFRdWVyeWFibGU7XG4gIHByaXZhdGUgX2NvbmZpZzogVGFibGVDb25maWd1cmF0aW9uO1xuICBwcml2YXRlIF9maXJzdExvYWQgPSB0cnVlO1xuICBwcml2YXRlIF9zaG93Rm9vdGVyID0gdHJ1ZTtcbiAgcHJpdmF0ZSBfc2hvd0hlYWRlciA9IHRydWU7XG4gIHByaXZhdGUgX3Nob3dQYWdpbmcgPSBmYWxzZTtcbiAgcHJpdmF0ZSBfaWQgPSBnZXRSYW5kb21JZGVudGlmaWVyKCk7XG4gIHB1YmxpYyBzbWFydFNlbGVjdCA9IGZhbHNlO1xuICBwdWJsaWMgY29uZmlnQ2hhbmdlcyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55PihudWxsKTtcblxuICBAVmlld0NoaWxkKCd0YWJsZScpIHB1YmxpYyB0YWJsZTogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgnZW1wdHlUYWJsZScpIHB1YmxpYyBlbXB0eVRhYmxlOiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdsb2FkaW5nVGFibGUnKSBwdWJsaWMgbG9hZGluZ1RhYmxlOiBFbGVtZW50UmVmO1xuICBASW5wdXQoKSBwdWJsaWMgaGVpZ2h0ID0gODAwO1xuICBASW5wdXQoKSBwdWJsaWMgc2hvd0FjdGlvbnMgPSB0cnVlO1xuICBASW5wdXQoKSBwdWJsaWMgYXV0b0xvYWQgPSB0cnVlO1xuICBAT3V0cHV0KCdsb2FkJykgcHVibGljIGxvYWQ6IEV2ZW50RW1pdHRlcjxBZHZhbmNlZFRhYmxlRGF0YVJlc3VsdD4gPSBuZXcgRXZlbnRFbWl0dGVyPEFkdmFuY2VkVGFibGVEYXRhUmVzdWx0PigpO1xuICBAT3V0cHV0KCdpbml0JykgcHVibGljIGluaXQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBJbnB1dCgncmVsb2FkJykgcHVibGljIHJlbG9hZDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgnc2VsZWN0JykgcHVibGljIHNlbGVjdDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgnc2VsZWN0ZWRJdGVtcycpIHB1YmxpYyBzZWxlY3RlZEl0ZW1zOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIEBJbnB1dCgpIHB1YmxpYyBzY3JvbGxhYmxlID0gdHJ1ZTtcbiAgQElucHV0KCkgcHVibGljIHNlcnZlclNpZGUgPSB0cnVlO1xuICBASW5wdXQoKSBwdWJsaWMgbGVuZ3RoTWVudSA9IFs1MCwgMTAwLCAyMDAsIDUwMF07XG4gIEBJbnB1dCgpIHB1YmxpYyBwYWdpbmcgPSB0cnVlO1xuICBASW5wdXQoKSBwdWJsaWMgcGFnZUxlbmd0aCA9IDI1O1xuXG4gIEBJbnB1dCgpIHB1YmxpYyBzY3JvbGxZID0gODAwO1xuICBASW5wdXQoKSBwdWJsaWMgc2Nyb2xsWCA9IHRydWU7XG4gIC8qKlxuICAgKiBFbmFibGVzIHJvdyBzZWxlY3Rpb24uIFRoZSBkZWZhdWxyIHZhbHVlIGlzIGZhbHNlXG4gICAqL1xuICBASW5wdXQoKSBwdWJsaWMgc2VsZWN0YWJsZSA9IGZhbHNlO1xuICAvKipcbiAgICogRW5hYmxlcyBvciBkaXNhYmxlIG11bHRpcGxlIHNlbGVjdGlvbi4gVGhlIGRlZmF1bHQgdmFsdWVzIGlzIHRydWUuXG4gICAqL1xuICBASW5wdXQoKSBwdWJsaWMgbXVsdGlwbGVTZWxlY3QgPSB0cnVlO1xuICAvKipcbiAgICogRW5hYmxlcyBjdXN0b20gc2VsZWN0aW9uIGFuZCBoaWRlcyBzZWxlY3QgY29sdW1uLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAgZmFsc2VcbiAgICovXG4gIEBJbnB1dCgpIHB1YmxpYyBjdXN0b21TZWxlY3QgPSBmYWxzZTtcbiAgQElucHV0KCkgcHVibGljIHNlbGVjdGVkID0gW107XG4gIHB1YmxpYyB1bnNlbGVjdGVkID0gW107XG4gIC8qKlxuICAgKiBHZXRzIG9yIHNldHMgYSBVUkwgdG8gbG9hZCB0YWJsZSBjb25maWd1cmF0aW9uIGZyb21cbiAgICovXG4gIEBJbnB1dCgpIHB1YmxpYyBjb25maWdTcmM6IHN0cmluZztcblxuICAvKipcbiAgICogR2V0cyBvciBzZXRzIHRhYmxlIGNvbmZpZ3VyYXRpb25cbiAgICovXG4gIEBJbnB1dCgnY29uZmlnJylcbiAgcHVibGljIHNldCBjb25maWcodmFsdWU6IFRhYmxlQ29uZmlndXJhdGlvbikge1xuICAgIHRoaXMuX2NvbmZpZyA9IHZhbHVlO1xuICAgIC8vIHJhaXNlIHN1YnNjcmlwdGlvblxuICAgIHRoaXMuY29uZmlnQ2hhbmdlcy5uZXh0KHRoaXMuX2NvbmZpZyk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGNvbmZpZygpIHtcbiAgICByZXR1cm4gdGhpcy5fY29uZmlnO1xuICB9XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIHRhYmxlIGZvb3RlciB3aWxsIGJlIHZpc2libGUgb3Igbm90XG4gICAqL1xuICBASW5wdXQoJ3Nob3dGb290ZXInKVxuICBwdWJsaWMgc2V0IHNob3dGb290ZXIodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9zaG93Rm9vdGVyID0gdmFsdWU7XG4gICAgLy8gc2hvdyBvciBoaWRlIGZvb3RlclxuICAgIGlmICh0aGlzLl9lbGVtZW50ICYmIHRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudCkge1xuICAgICAgY29uc3QgZWxlbWVudCA9ICggdGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50IGFzIEhUTUxEaXZFbGVtZW50KVxuICAgICAgICAucXVlcnlTZWxlY3RvcignLmRhdGFUYWJsZXNfaW5mbycpO1xuICAgICAgaWYgKGVsZW1lbnQgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCdkLW5vbmUnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LmFkZCgnZC1ub25lJyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldCBzaG93Rm9vdGVyKCkge1xuICAgIHJldHVybiB0aGlzLl9zaG93Rm9vdGVyO1xuICB9XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIHRhYmxlIGZvb3RlciB3aWxsIGJlIHZpc2libGUgb3Igbm90XG4gICAqL1xuICAgQElucHV0KCdzaG93SGVhZGVyJylcbiAgIHB1YmxpYyBzZXQgc2hvd0hlYWRlcih2YWx1ZTogYm9vbGVhbikge1xuICAgICB0aGlzLl9zaG93SGVhZGVyID0gdmFsdWU7XG4gICAgIC8vIHNob3cgb3IgaGlkZSBmb290ZXJcbiAgICAgaWYgKHRoaXMuX2VsZW1lbnQgJiYgdGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAgY29uc3QgZWxlbWVudCA9ICggdGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50IGFzIEhUTUxEaXZFbGVtZW50KVxuICAgICAgICAgLnF1ZXJ5U2VsZWN0b3IoJy5kYXRhVGFibGU+dGhlYWQnKTtcbiAgICAgICBpZiAoZWxlbWVudCA9PSBudWxsKSB7XG4gICAgICAgICByZXR1cm47XG4gICAgICAgfVxuICAgICAgIGNvbnN0IGRhdGFUYWJsZSA9ICggdGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50IGFzIEhUTUxEaXZFbGVtZW50KS5xdWVyeVNlbGVjdG9yKCcuZGF0YVRhYmxlJyk7XG4gICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICBlbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoJ2Qtbm9uZScpO1xuICAgICAgICAgLy8gYWRkIHRvcCBtYXJnaW5cbiAgICAgICAgIGRhdGFUYWJsZS5jbGFzc0xpc3QucmVtb3ZlKCdtdC0yJyk7XG4gICAgICAgfSBlbHNlIHtcbiAgICAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LmFkZCgnZC1ub25lJyk7XG4gICAgICAgICAvLyByZW1vdmUgdG9wIG1hcmdpblxuICAgICAgICAgZGF0YVRhYmxlLmNsYXNzTGlzdC5hZGQoJ210LTInKTtcbiAgICAgICB9XG4gICAgIH1cbiAgIH1cblxuICAgcHVibGljIGdldCBzaG93SGVhZGVyKCkge1xuICAgICByZXR1cm4gdGhpcy5fc2hvd0hlYWRlcjtcbiAgIH1cblxuICAvKipcbiAgICogSW5kaWNhdGVzIHdoZXRoZXIgcGFnaW5nIGluZm9ybWF0aW9uIHdpbGwgYmUgdmlzaWJsZSBvciBub3RcbiAgICovXG4gIEBJbnB1dCgnc2hvd1BhZ2luZycpXG4gIHB1YmxpYyBzZXQgc2hvd1BhZ2luZyh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX3Nob3dQYWdpbmcgPSB2YWx1ZTtcbiAgICAvLyBzaG93IG9yIGhpZGUgZm9vdGVyXG4gICAgaWYgKHRoaXMuX2VsZW1lbnQgJiYgdGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50KSB7XG4gICAgICBjb25zdCBlbGVtZW50ID0gKCB0aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQgYXMgSFRNTERpdkVsZW1lbnQpXG4gICAgICAgIC5xdWVyeVNlbGVjdG9yKCcuZGF0YVRhYmxlc19wYWdpbmF0ZScpO1xuICAgICAgaWYgKGVsZW1lbnQgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgalF1ZXJ5KGVsZW1lbnQpLnNob3coKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGpRdWVyeShlbGVtZW50KS5oaWRlKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldCBzaG93UGFnaW5nKCkge1xuICAgIHJldHVybiB0aGlzLl9zaG93UGFnaW5nO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgb3Igc2V0cyBhbiBhY3RpdmUgcXVlcnkgZm9yIHRoaXMgdGFibGVcbiAgICovXG4gIEBJbnB1dCgncXVlcnknKVxuICBwdWJsaWMgc2V0IHF1ZXJ5KHZhbHVlOiBDbGllbnREYXRhUXVlcnlhYmxlKSB7XG4gICAgdGhpcy5fcXVlcnkgPSB2YWx1ZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgcXVlcnkoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3F1ZXJ5O1xuICB9XG5cbiAgcHVibGljIHJlYWRvbmx5IHRyYW5zbGF0b3I6IFRyYW5zbGF0ZVBpcGU7XG4gIHB1YmxpYyBkYXRhVGFibGU6IGFueTtcbiAgcHVibGljIGR0T3B0aW9uczogYW55O1xuICBwcml2YXRlIGxhc3RRdWVyeVBhcmFtczogRGF0YVNlcnZpY2VRdWVyeVBhcmFtcztcbiAgcHJpdmF0ZSByZWxvYWRTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9jb250ZXh0OiBBbmd1bGFyRGF0YUNvbnRleHQsXG4gICAgICAgICAgICAgIEBJbmplY3QoQ09MVU1OX0ZPUk1BVFRFUlMpIHByaXZhdGUgX2NvbHVtbkZvcm1hdHRlcnM6IElBZHZhbmNlZFRhYmxlRm9ybWF0dGVycyxcbiAgICAgICAgICAgICAgcHJpdmF0ZSBfYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgICAgICAgICAgICBwcml2YXRlIF90cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgICAgICAgICAgICBwcml2YXRlIF9pbmplY3RvcjogSW5qZWN0b3IsXG4gICAgICAgICAgICAgIHByaXZhdGUgX2FkdmFuY2VkRmlsdGVyVmFsdWVQcm92aWRlcjogQWR2YW5jZWRGaWx0ZXJWYWx1ZVByb3ZpZGVyLFxuICAgICAgICAgICAgICBwcml2YXRlIF9lbGVtZW50OiBFbGVtZW50UmVmLFxuICAgICAgICAgICAgICBwcml2YXRlIF90ZW1wbGF0ZTogVGVtcGxhdGVQaXBlLFxuICAgICAgICAgICAgICBwcml2YXRlIF9sb2FkaW5nOiBMb2FkaW5nU2VydmljZSxcbiAgICAgICAgICAgICAgcHJpdmF0ZSBfaHR0cDogSHR0cENsaWVudCkge1xuICAgIC8vIGluaXRpYWxpemUgdHJhbnNsYXRlIHBpcGVcbiAgICB0aGlzLnRyYW5zbGF0b3IgPSBuZXcgVHJhbnNsYXRlUGlwZSh0aGlzLl90cmFuc2xhdGVTZXJ2aWNlLCBuZXcgVGFibGVUcmFuc2xhdGlvbkNoYW5nZURldGVjdG9yKCkpO1xuICAgIGpRdWVyeS5mbi5kYXRhVGFibGUuZXh0LmNsYXNzZXMuc1BhZ2VCdXR0b24gPSAnYnRuJztcbiAgICBqUXVlcnkuZm4uZGF0YVRhYmxlLmV4dC5jbGFzc2VzLnNQYWdlQnV0dG9uQWN0aXZlID0gJ2J0biBidG4tbGlnaHQnO1xuICAgIHRoaXMucmVsb2FkU3Vic2NyaXB0aW9uID0gdGhpcy5yZWxvYWQuc3Vic2NyaWJlKChkYXRhKSA9PiB7XG4gICAgICB0aGlzLmZldGNoKCk7XG4gICAgfSk7XG4gIH1cblxuICAvLyBzaW1wbGUgc2VhcmNoXG4gIHB1YmxpYyBzZWFyY2goc2VhcmNoVGV4dCkge1xuICAgIHRoaXMucXVlcnkgPSB0aGlzLnF1ZXJ5IHx8IHRoaXMuX2NvbnRleHQubW9kZWwodGhpcy5jb25maWcubW9kZWwpLmFzUXVlcnlhYmxlKCk7XG4gICAgaWYgKHNlYXJjaFRleHQgJiYgdGhpcy5jb25maWcuc2VhcmNoRXhwcmVzc2lvbikge1xuICAgICAgLy8gdmFsaWRhdGUgc2VhcmNoIHRleHQgaW4gZG91YmxlIHF1b3Rlc1xuICAgICAgaWYgKC9eXCIoLio/KVwiJC8udGVzdChzZWFyY2hUZXh0KSkge1xuICAgICAgICB0aGlzLnF1ZXJ5LnNldFBhcmFtKCckZmlsdGVyJyxcbiAgICAgICAgICB0aGlzLl90ZW1wbGF0ZS50cmFuc2Zvcm0odGhpcy5jb25maWcuc2VhcmNoRXhwcmVzc2lvbiwge1xuICAgICAgICAgICAgdGV4dDogc2VhcmNoVGV4dC5yZXBsYWNlKC9eXCJ8XCIkL2csICcnKSxcbiAgICAgICAgICB9KSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyB0cnkgdG8gc3BsaXQgd29yZHNcbiAgICAgICAgY29uc3Qgd29yZHMgPSBzZWFyY2hUZXh0LnNwbGl0KCcgJyk7XG4gICAgICAgIC8vIGpvaW4gd29yZHMgdG8gYSBzaW5nbGUgZmlsdGVyXG4gICAgICAgIGNvbnN0IGZpbHRlciA9IHdvcmRzLm1hcCgod29yZCkgPT4ge1xuICAgICAgICAgIHJldHVybiB0aGlzLl90ZW1wbGF0ZS50cmFuc2Zvcm0odGhpcy5jb25maWcuc2VhcmNoRXhwcmVzc2lvbiwge1xuICAgICAgICAgICAgdGV4dDogd29yZCxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSkuam9pbignIGFuZCAnKTtcbiAgICAgICAgLy8gc2V0IGZpbHRlclxuICAgICAgICB0aGlzLnF1ZXJ5LnNldFBhcmFtKCckZmlsdGVyJywgZmlsdGVyKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gY2xlYXIgZmlsdGVyXG4gICAgICB0aGlzLnF1ZXJ5LnNldFBhcmFtKCckZmlsdGVyJywgbnVsbCk7XG4gICAgfVxuICAgIHRoaXMuX2ZpcnN0TG9hZCA9IGZhbHNlO1xuICAgIHRoaXMuZGF0YVRhYmxlLmRyYXcoKTtcbiAgfVxuXG4gIHB1YmxpYyBmZXRjaChjbGVhclNlbGVjdGVkPzogYm9vbGVhbikge1xuICAgIC8vIGlmIGRhdGEgdGFibGUgaXMgbnVsbFxuICAgIGlmICh0aGlzLmRhdGFUYWJsZSA9PSBudWxsKSB7XG4gICAgICAvLyBpbml0aWFsaXplIGRhdGEgdGFibGVcbiAgICAgIHJldHVybiB0aGlzLm5nT25Jbml0KCk7XG4gICAgfVxuICAgIC8vIGNsZWFyIHNlbGVjdGlvbiBpZiBwYXJhbWV0ZXIgaXMgbm90IGRlY2xhcmVkIG9yIGl0J3MgdHJ1ZVxuICAgIGlmIChjbGVhclNlbGVjdGVkID09IG51bGwgfHwgY2xlYXJTZWxlY3RlZCA9PT0gdHJ1ZSkge1xuICAgICAgLy8gc2V0IHNtYXJ0IHNlbGVjdCB0byBmYWxzZVxuICAgICAgdGhpcy5zbWFydFNlbGVjdCA9IGZhbHNlO1xuICAgICAgLy8gY2xlYXIgc2VsZWN0ZWQgaXRlbXNcbiAgICAgIGlmICh0aGlzLnNlbGVjdGVkLmxlbmd0aCkge1xuICAgICAgICB0aGlzLnNlbGVjdGVkLnNwbGljZSgwLCB0aGlzLnNlbGVjdGVkLmxlbmd0aCk7XG4gICAgICB9XG4gICAgICAvLyBjbGVhciB1bnNlbGVjdGVkIGl0ZW1zXG4gICAgICBpZiAodGhpcy51bnNlbGVjdGVkLmxlbmd0aCkge1xuICAgICAgICB0aGlzLnVuc2VsZWN0ZWQuc3BsaWNlKDAsIHRoaXMudW5zZWxlY3RlZC5sZW5ndGgpO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBvdGhlcndpc2UgbG9hZCBkYXRhIG9ubHlcbiAgICB0aGlzLmRhdGFUYWJsZS5kcmF3KCk7XG4gIH1cblxuICBwdWJsaWMgZGVzdHJveSgpIHtcbiAgICBpZiAodGhpcy5kYXRhVGFibGUpIHtcbiAgICAgIHRoaXMuZGF0YVRhYmxlLmRlc3Ryb3koKTtcbiAgICAgIHRoaXMuX2ZpcnN0TG9hZCA9IHRydWU7XG4gICAgICBqUXVlcnkodGhpcy50YWJsZS5uYXRpdmVFbGVtZW50KS5lbXB0eSgpO1xuICAgICAgdGhpcy5kYXRhVGFibGUgPSBudWxsO1xuICAgICAgLy8gY2xlYXIgc2VsZWN0ZWQgaXRlbXNcbiAgICAgIGlmICh0aGlzLnNlbGVjdGVkLmxlbmd0aCkge1xuICAgICAgICB0aGlzLnNlbGVjdGVkLnNwbGljZSgwLCB0aGlzLnNlbGVjdGVkLmxlbmd0aCk7XG4gICAgICB9XG4gICAgICAvLyBjbGVhciB1bnNlbGVjdGVkIGl0ZW1zXG4gICAgICBpZiAodGhpcy51bnNlbGVjdGVkLmxlbmd0aCkge1xuICAgICAgICB0aGlzLnVuc2VsZWN0ZWQuc3BsaWNlKDAsIHRoaXMudW5zZWxlY3RlZC5sZW5ndGgpO1xuICAgICAgfVxuICAgICAgLy8gc2V0IHNtYXJ0IHNlbGVjdCB0byBmYWxzZVxuICAgICAgdGhpcy5zbWFydFNlbGVjdCA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZWxlY3RzIHRoZSBzcGVjaWZpZWQgZGF0YSByb3dcbiAgICovXG4gIHB1YmxpYyBzZWxlY3RSb3cocm93OiBhbnksIHNpbGVudD86IGJvb2xlYW4pIHtcbiAgICBpZiAocm93KSB7XG4gICAgICAvLyBnZXQgcm93XG4gICAgICBjb25zdCByb3dOb2RlID0gcm93Lm5vZGUoKTtcbiAgICAgIC8vIGlmIG11bHRpcGxlIHNlbGVjdCBpcyBmYWxzZVxuICAgICAgaWYgKHRoaXMubXVsdGlwbGVTZWxlY3QgPT09IGZhbHNlKSB7XG4gICAgICAgIGlmICh0aGlzLmN1c3RvbVNlbGVjdCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAvLyBlbnVtZXJhdGUgcm93XG4gICAgICAgICAgdGhpcy5kYXRhVGFibGUucm93cygpLm5vZGVzKCkuZWFjaCgobm9kZTogYW55KSA9PiB7XG4gICAgICAgICAgICBpZiAobm9kZSAhPT0gcm93Tm9kZSkge1xuICAgICAgICAgICAgICBqUXVlcnkobm9kZSkuZmluZCgnOmNoZWNrYm94JykucHJvcCgnY2hlY2tlZCcsIGZhbHNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmRhdGFUYWJsZS5yb3dzKCcuc2VsZWN0ZWQnKS5ub2RlcygpLmVhY2goKG5vZGU6IGFueSkgPT4ge1xuICAgICAgICAgICAgaWYgKG5vZGUgIT09IHJvd05vZGUpIHtcbiAgICAgICAgICAgICAgalF1ZXJ5KG5vZGUpLnJlbW92ZUNsYXNzKCdzZWxlY3RlZCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIC8vIGNsZWFyIHNlbGVjdGVkXG4gICAgICAgIHRoaXMuc2VsZWN0ZWQuc3BsaWNlKDAsIHRoaXMuc2VsZWN0ZWQubGVuZ3RoKTtcbiAgICAgIH1cbiAgICAgIC8vIGlmIGN1c3RvbSBzZWxlY3QgbW9kZSBpcyBvZmZcbiAgICAgIGlmICh0aGlzLmN1c3RvbVNlbGVjdCA9PT0gZmFsc2UpIHtcbiAgICAgICAgalF1ZXJ5KHJvd05vZGUpLmZpbmQoJzpjaGVja2JveCcpLnByb3AoJ2NoZWNrZWQnLCB0cnVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIG90aGVyd2lzZSBhZGQgY2xhc3NcbiAgICAgICAgalF1ZXJ5KHJvdy5ub2RlKCkpLmFkZENsYXNzKCdzZWxlY3RlZCcpO1xuICAgICAgfVxuICAgICAgLy8gZ2V0IHJvdyBkYXRhXG4gICAgICBjb25zdCBrZXkgPSB0aGlzLmNvbmZpZy5jb2x1bW5zWzBdLnByb3BlcnR5IHx8IHRoaXMuY29uZmlnLmNvbHVtbnNbMF0ubmFtZTtcbiAgICAgIGNvbnN0IGRhdGEgPSByb3cuZGF0YSgpO1xuICAgICAgLy8gc2VhcmNoIHNlbGVjdGVkIGl0ZW1zXG4gICAgICBsZXQgZmluZEluZGV4ID0gdGhpcy5zZWxlY3RlZC5maW5kSW5kZXgoKHgpID0+IHtcbiAgICAgICAgcmV0dXJuIHhba2V5XSA9PT0gZGF0YVtrZXldO1xuICAgICAgfSk7XG4gICAgICBpZiAoZmluZEluZGV4ID49IDApIHtcbiAgICAgICAgLy8gcmVtb3ZlIHByZXZpb3VzbHkgc2VsZWN0ZWQgcm93XG4gICAgICAgIHRoaXMuc2VsZWN0ZWQuc3BsaWNlKGZpbmRJbmRleCwgMSk7XG4gICAgICB9XG4gICAgICB0aGlzLnNlbGVjdGVkLnB1c2goZGF0YSk7XG4gICAgICAvLyB2YWxpZGF0ZSB1bnNlbGVjdGVkIGRhdGFcbiAgICAgIGZpbmRJbmRleCA9IHRoaXMudW5zZWxlY3RlZC5maW5kSW5kZXgoKHgpID0+IHtcbiAgICAgICAgcmV0dXJuIHhba2V5XSA9PT0gZGF0YVtrZXldO1xuICAgICAgfSk7XG4gICAgICBpZiAoZmluZEluZGV4ID49IDApIHtcbiAgICAgICAgLy8gcmVtb3ZlIHByZXZpb3VzbHkgc2VsZWN0ZWQgcm93XG4gICAgICAgIHRoaXMudW5zZWxlY3RlZC5zcGxpY2UoZmluZEluZGV4LCAxKTtcbiAgICAgIH1cbiAgICAgIGlmIChzaWxlbnQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zLmVtaXQodGhpcy5zZWxlY3RlZCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFVuc2VsZWN0cyB0aGUgc3BlY2lmaWVkIGRhdGEgcm93IGlmIGl0J3Mgc2VsZWN0ZWRcbiAgICovXG4gIHB1YmxpYyB1blNlbGVjdFJvdyhyb3c6IGFueSwgc2lsZW50PzogYm9vbGVhbikge1xuICAgIGlmIChyb3cpIHtcbiAgICAgIC8vIGlmIGN1c3RvbSBzZWxlY3QgbW9kZSBpcyBvZmZcbiAgICAgIGlmICh0aGlzLmN1c3RvbVNlbGVjdCA9PT0gZmFsc2UpIHtcbiAgICAgICAgalF1ZXJ5KHJvdy5ub2RlKCkpLmZpbmQoJzpjaGVja2JveCcpLnByb3AoJ2NoZWNrZWQnLCBmYWxzZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBvdGhlcndpc2UgYWRkIGNsYXNzXG4gICAgICAgIGpRdWVyeShyb3cubm9kZSgpKS5yZW1vdmVDbGFzcygnc2VsZWN0ZWQnKTtcbiAgICAgIH1cbiAgICAgIC8vIGdldCBmaXJzdCBjb2x1bW4ga2V5XG4gICAgICBjb25zdCBrZXkgPSB0aGlzLmNvbmZpZy5jb2x1bW5zWzBdLnByb3BlcnR5IHx8IHRoaXMuY29uZmlnLmNvbHVtbnNbMF0ubmFtZTtcbiAgICAgIGNvbnN0IGRhdGEgPSByb3cuZGF0YSgpO1xuICAgICAgY29uc3QgaWQgPSBkYXRhW2tleV07XG4gICAgICBsZXQgZmluZEluZGV4ID0gdGhpcy5zZWxlY3RlZC5maW5kSW5kZXgoKHgpID0+IHtcbiAgICAgICAgcmV0dXJuIHhba2V5XSA9PT0gaWQ7XG4gICAgICB9KTtcbiAgICAgIGlmIChmaW5kSW5kZXggPj0gMCkge1xuICAgICAgICB0aGlzLnNlbGVjdGVkLnNwbGljZShmaW5kSW5kZXgsIDEpO1xuICAgICAgICBpZiAodGhpcy5zbWFydFNlbGVjdCkge1xuICAgICAgICAgIC8vIGFkZCB0aGlzIHJvdyB0byB1bnNlbGVjdGVkIHJvd3NcbiAgICAgICAgICBmaW5kSW5kZXggPSB0aGlzLnVuc2VsZWN0ZWQuZmluZEluZGV4KCh4KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4geFtrZXldID09PSBpZDtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBpZiAoZmluZEluZGV4IDwgMCkge1xuICAgICAgICAgICAgdGhpcy51bnNlbGVjdGVkLnB1c2goZGF0YSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChzaWxlbnQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zLmVtaXQodGhpcy5zZWxlY3RlZCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHNlbGVjdEFueSgpIHtcbiAgICBpZiAodGhpcy5kYXRhVGFibGUgJiYgdGhpcy5zZWxlY3RhYmxlKSB7XG4gICAgICAvLyBzZXQgc21hcnQgc2VsZWN0IGZsYWdcbiAgICAgIHRoaXMuc21hcnRTZWxlY3QgPSB0cnVlO1xuICAgICAgLy8gc2VsZWN0IGFueSByb3dcbiAgICAgIHRoaXMuZGF0YVRhYmxlLnJvd3MoKS5ldmVyeSgoaW5kZXg6IGFueSkgPT4ge1xuICAgICAgICBjb25zdCByb3cgPSB0aGlzLmRhdGFUYWJsZS5yb3coIGluZGV4ICk7XG4gICAgICAgIHRoaXMuc2VsZWN0Um93KHJvdywgdHJ1ZSk7XG4gICAgICB9KTtcbiAgICAgIC8vIGVtaXQgc2VsZWN0aW9uIGV2ZW50XG4gICAgICB0aGlzLnNlbGVjdGVkSXRlbXMuZW1pdCh0aGlzLnNlbGVjdGVkKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgc2VsZWN0Tm9uZSgpIHtcbiAgICBpZiAodGhpcy5kYXRhVGFibGUgJiYgdGhpcy5zZWxlY3RhYmxlKSB7XG4gICAgICAvLyBzZXQgc21hcnQgc2VsZWN0IGZsYWdcbiAgICAgIHRoaXMuc21hcnRTZWxlY3QgPSBmYWxzZTtcbiAgICAgIHRoaXMudW5zZWxlY3RlZC5zcGxpY2UoMCwgdGhpcy51bnNlbGVjdGVkLmxlbmd0aCk7XG4gICAgICAvLyBzZWxlY3QgYW55IHJvd1xuICAgICAgdGhpcy5kYXRhVGFibGUucm93cygpLmV2ZXJ5KChpbmRleDogYW55KSA9PiB7XG4gICAgICAgIGNvbnN0IHJvdyA9IHRoaXMuZGF0YVRhYmxlLnJvdyggaW5kZXggKTtcbiAgICAgICAgdGhpcy51blNlbGVjdFJvdyhyb3csIHRydWUpO1xuICAgICAgfSk7XG4gICAgICB0aGlzLnNlbGVjdGVkLnNwbGljZSgwLCB0aGlzLnNlbGVjdGVkLmxlbmd0aCk7XG4gICAgICAvLyBlbWl0IHNlbGVjdGlvbiBldmVudFxuICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zLmVtaXQodGhpcy5zZWxlY3RlZCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHRvZ2dsZVNlbGVjdFJvdyhyb3c6IGFueSkge1xuICAgIGlmIChyb3cpIHtcbiAgICAgIGNvbnN0IGRhdGEgPSByb3cuZGF0YSgpO1xuICAgICAgLy8gZ2V0IGZpcnN0IGNvbHVtbiBrZXlcbiAgICAgIGNvbnN0IGtleSA9IHRoaXMuY29uZmlnLmNvbHVtbnNbMF0ucHJvcGVydHkgfHwgdGhpcy5jb25maWcuY29sdW1uc1swXS5uYW1lO1xuICAgICAgLy8gZ2V0IGlkXG4gICAgICBjb25zdCBpZCA9IGRhdGFba2V5XTtcbiAgICAgIC8vIGZpbmQgaWYgcm93IGlzIHNlbGVjdGVkXG4gICAgICBjb25zdCBmaW5kSW5kZXggPSB0aGlzLnNlbGVjdGVkLmZpbmQoKHgpID0+IHtcbiAgICAgICAgcmV0dXJuIHhba2V5XSA9PT0gaWQ7XG4gICAgICB9KTtcbiAgICAgIC8vIGlmIHJvdyBpcyBzZWxlY3RlZFxuICAgICAgaWYgKGZpbmRJbmRleCA+PSAwKSB7XG4gICAgICAgIC8vIHVuc2VsZWN0XG4gICAgICAgIHRoaXMudW5TZWxlY3RSb3cocm93KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc2VsZWN0Um93KHJvdyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gbm9pbnNwZWN0aW9uIEpTTWV0aG9kQ2FuQmVTdGF0aWNcbiAgLyoqXG4gICAqIERhdGF0YWJsZXMgY29sdW1uIHJlbmRlcmVyIGZvciBzZWxlY3QgY2hlY2tib3hcbiAgICogQHBhcmFtIGRhdGFcbiAgICogQHBhcmFtIHR5cGVcbiAgICogQHBhcmFtIHJvd1xuICAgKiBAcGFyYW0gbWV0YVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcHJpdmF0ZSBfcmVuZGVyU2VsZWN0KGRhdGEsIHR5cGUsIHJvdywgbWV0YSkge1xuICAgIC8vIGdldCBjb2x1bW5cbiAgICBjb25zdCBjb2x1bW4gPSBtZXRhLnNldHRpbmdzLmFvQ29sdW1uc1ttZXRhLmNvbF07XG4gICAgaWYgKHR5cGVvZiBjb2x1bW4uc2VsZWN0VGVtcGxhdGUgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIE9iamVjdC5hc3NpZ24oY29sdW1uLCB7XG4gICAgICAgIHNlbGVjdFRlbXBsYXRlOiB0ZW1wbGF0ZShgPGlucHV0IGNsYXNzPVwiY2hlY2tib3ggY2hlY2tib3gtdGhlbWUgcy1yb3dcIiB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICBpZD1cInMtJHt0aGlzLl9pZH0tXFwke21ldGEucm93fVwiIGRhdGEtaWQ9XCJcXCR7ZGF0YX1cIiAvPjxsYWJlbCBmb3I9XCJzLSR7dGhpcy5faWR9LVxcJHttZXRhLnJvd31cIj4mbmJzcDs8L2xhYmVsPlxuICAgICAgICBgKSxcbiAgICAgIH0pO1xuICAgIH1cbiAgICAvLyByZW5kZXIgdGVtcGxhdGVcbiAgICByZXR1cm4gY29sdW1uLnNlbGVjdFRlbXBsYXRlKHtcbiAgICAgIG1ldGEsXG4gICAgICBkYXRhLFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIG5nT25Jbml0KCkge1xuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgIGlmICh0aGlzLmRhdGFUYWJsZSkge1xuICAgICAgdGhpcy5kZXN0cm95KCk7XG4gICAgfVxuICAgIGlmICh0aGlzLmNvbmZpZykge1xuICAgICAgLy8gcGFyc2UgcHJvcGVydGllc1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLmNvbmZpZywgJ3NlbGVjdGFibGUnKSkge1xuICAgICAgICB0aGlzLnNlbGVjdGFibGUgPSB0aGlzLmNvbmZpZy5zZWxlY3RhYmxlO1xuICAgICAgfVxuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLmNvbmZpZywgJ211bHRpcGxlU2VsZWN0JykpIHtcbiAgICAgICAgdGhpcy5tdWx0aXBsZVNlbGVjdCA9IHRoaXMuY29uZmlnLm11bHRpcGxlU2VsZWN0O1xuICAgICAgfVxuICAgICAgLy8gcHJlcGFyZSBjb25maWd1cmF0aW9uIGZvciBjb2x1bW5zXG4gICAgICBjb25zdCB0YWJsZUNvbHVtbnMgPSB0aGlzLmNvbmZpZy5jb2x1bW5zXG4gICAgICAgIC8vIGZpbHRlciBhY3Rpb24gbGluayBjb2x1bW5cbiAgICAgICAgLmZpbHRlcigoY29sdW1uKSA9PiB7XG4gICAgICAgICAgaWYgKGNvbHVtbi5mb3JtYXR0ZXIgJiYgY29sdW1uLmZvcm1hdHRlciA9PT0gJ0FjdGlvbkxpbmtGb3JtYXR0ZXInICYmIHRoaXMuc2hvd0FjdGlvbnMgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9KS5tYXAoKGNvbHVtbikgPT4ge1xuICAgICAgICAgIC8vIGNvbnZlcnQgY29sdW1uIHRvIGFkdmFuY2UgdGFibGUgY29sdW1uXG4gICAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24obmV3IENvbHVtbkZvcm1hdHRlcih0aGlzLl9pbmplY3RvciksIGNvbHVtbik7XG4gICAgICAgIH0pLm1hcCgoY29sdW1uKSA9PiB7XG4gICAgICAgICAgY29uc3QgY29sdW1uRGVmaW5pdGlvbiA9IHtcbiAgICAgICAgICAgIGRhdGE6IGNvbHVtbi5wcm9wZXJ0eSB8fCBjb2x1bW4ubmFtZSxcbiAgICAgICAgICAgIGRlZmF1bHRDb250ZW50OiBjb2x1bW4uaGFzT3duUHJvcGVydHkoJ2RlZmF1bHRDb250ZW50JykgPyBjb2x1bW4uZGVmYXVsdENvbnRlbnQgOiAnJyxcbiAgICAgICAgICAgIHRpdGxlOiB0aGlzLnRyYW5zbGF0b3IudHJhbnNmb3JtKGNvbHVtbi50aXRsZSksXG4gICAgICAgICAgICBzb3J0YWJsZTogY29sdW1uLmhhc093blByb3BlcnR5KCdzb3J0YWJsZScpID8gY29sdW1uLnNvcnRhYmxlIDogdHJ1ZSxcbiAgICAgICAgICAgIHZpc2libGU6IGNvbHVtbi5oYXNPd25Qcm9wZXJ0eSgnaGlkZGVuJykgPyAhY29sdW1uLmhpZGRlbiA6IHRydWUsXG4gICAgICAgICAgICBuYW1lOiBjb2x1bW4ubmFtZSxcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgaWYgKGNvbHVtbi5jbGFzc05hbWUpIHtcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oY29sdW1uRGVmaW5pdGlvbiwge1xuICAgICAgICAgICAgICBjbGFzc05hbWU6IGNvbHVtbi5jbGFzc05hbWUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihjb2x1bW5EZWZpbml0aW9uLCB7XG4gICAgICAgICAgICAgIGNsYXNzTmFtZTogJycsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoY29sdW1uLmZvcm1hdHRlcnMpIHtcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oY29sdW1uRGVmaW5pdGlvbiwge1xuICAgICAgICAgICAgICByZW5kZXIoZGF0YTogYW55LCB0eXBlOiBzdHJpbmcsIHJvdzogYW55LCBtZXRhOiBhbnkpIHtcbiAgICAgICAgICAgICAgICBsZXQgcmVzdWx0ID0gZGF0YTtcbiAgICAgICAgICAgICAgICBjb2x1bW4uZm9ybWF0dGVycy5mb3JFYWNoKChjb2x1bW5Gb3JtYXR0ZXIpID0+IHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGZvcm1hdHRlciA9IHNlbGYuX2NvbHVtbkZvcm1hdHRlcnNbY29sdW1uRm9ybWF0dGVyLmZvcm1hdHRlcl07XG4gICAgICAgICAgICAgICAgICBpZiAoZm9ybWF0dGVyICYmIHR5cGVvZiBmb3JtYXR0ZXIucmVuZGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbi5mb3JtYXRTdHJpbmcgPSBjb2x1bW5Gb3JtYXR0ZXIuZm9ybWF0U3RyaW5nO1xuICAgICAgICAgICAgICAgICAgICBjb2x1bW4uZm9ybWF0T3B0aW9ucyA9IGNvbHVtbkZvcm1hdHRlci5mb3JtYXRPcHRpb25zO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gZm9ybWF0dGVyLnJlbmRlci5iaW5kKGNvbHVtbikocmVzdWx0LCB0eXBlLCByb3csIG1ldGEpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBjb2x1bW4uZm9ybWF0U3RyaW5nO1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBjb2x1bW4uZm9ybWF0T3B0aW9ucztcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAvLyBjaGVjayBpZiBjb2x1bW4gZm9ybWF0dGVycyBleHBvcnQgY3JlYXRlZENlbGwgZXZlbnRcbiAgICAgICAgICAgIGNvbnN0IGl0ZW1zID0gY29sdW1uLmZvcm1hdHRlcnMuZmlsdGVyKChjb2x1bW5Gb3JtYXR0ZXIpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHlwZW9mIGNvbHVtbkZvcm1hdHRlci5hZnRlclJlbmRlciA9PT0gJ2Z1bmN0aW9uJztcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKGl0ZW1zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihjb2x1bW5EZWZpbml0aW9uLCB7XG4gICAgICAgICAgICAgICAgY3JlYXRlZENlbGwoY2VsbDogYW55LCBjZWxsRGF0YTogYW55LCByb3dEYXRhOiBhbnksIHJvd0luZGV4OiBudW1iZXIsIGNvbEluZGV4OiBudW1iZXIpIHtcbiAgICAgICAgICAgICAgICAgIGl0ZW1zLmZvckVhY2goKGNvbHVtbkZvcm1hdHRlcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBmb3JtYXR0ZXIgPSBzZWxmLl9jb2x1bW5Gb3JtYXR0ZXJzW2NvbHVtbkZvcm1hdHRlci5mb3JtYXR0ZXJdO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZm9ybWF0dGVyICYmIHR5cGVvZiBmb3JtYXR0ZXIuYWZ0ZXJSZW5kZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgICBmb3JtYXR0ZXIuYWZ0ZXJSZW5kZXIuYmluZChjb2x1bW4pKGNlbGwsIGNlbGxEYXRhLCByb3dEYXRhLCByb3dJbmRleCwgY29sSW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGNvbHVtbi5mb3JtYXR0ZXIpIHtcbiAgICAgICAgICAgIGNvbnN0IGZvcm1hdHRlciA9IHNlbGYuX2NvbHVtbkZvcm1hdHRlcnNbY29sdW1uLmZvcm1hdHRlcl07XG4gICAgICAgICAgICBpZiAoZm9ybWF0dGVyICYmIHR5cGVvZiBmb3JtYXR0ZXIucmVuZGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oY29sdW1uRGVmaW5pdGlvbiwge1xuICAgICAgICAgICAgICAgIHJlbmRlcjogZm9ybWF0dGVyLnJlbmRlci5iaW5kKGNvbHVtbiksXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGZvcm1hdHRlciAmJiB0eXBlb2YgZm9ybWF0dGVyLmFmdGVyUmVuZGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oY29sdW1uRGVmaW5pdGlvbiwge1xuICAgICAgICAgICAgICAgIHJlbmRlcjogZm9ybWF0dGVyLnJlbmRlci5iaW5kKGNvbHVtbiksXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKGNvbHVtbkRlZmluaXRpb24sIHtcbiAgICAgICAgICAgICAgICBjcmVhdGVkQ2VsbDogZm9ybWF0dGVyLmFmdGVyUmVuZGVyLmJpbmQoY29sdW1uKSxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBjb2x1bW5EZWZpbml0aW9uO1xuICAgICAgICB9KTtcbiAgICAgIC8vIGdldCB0YWJsZSBlbGVtZW50XG4gICAgICBjb25zdCB0YWJsZUVsZW1lbnQgPSBqUXVlcnkodGhpcy50YWJsZS5uYXRpdmVFbGVtZW50KTtcbiAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbm8tc2hhZG93ZWQtdmFyaWFibGVcbiAgICAgIHRhYmxlRWxlbWVudC5vbigncHJvY2Vzc2luZy5kdCcsIChldmVudCwgc2V0dGluZ3MsIHByb2Nlc3NpbmcpID0+IHtcbiAgICAgICAgaWYgKHByb2Nlc3NpbmcpIHtcbiAgICAgICAgICAvLyBjbGVhciBlbXB0eSB0YWJsZSBlbGVtZW50XG4gICAgICAgICAgdGFibGVFbGVtZW50LmZpbmQoJy5kYXRhVGFibGVzX2VtcHR5JykuaHRtbCgnJyk7XG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0YWJsZUVsZW1lbnQuYWRkQ2xhc3MoJ3Byb2Nlc3NpbmcnKTtcbiAgICAgICAgICB9LCAwKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRhYmxlRWxlbWVudC5yZW1vdmVDbGFzcygncHJvY2Vzc2luZycpO1xuICAgICAgICAgIH0sIDApO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIC8vIGFsbG93IHNlbGVjdGlvblxuICAgICAgaWYgKHRoaXMuc2VsZWN0YWJsZSkge1xuICAgICAgICAvLyBnZXQgZmlyc3QgY29sdW1uIChhcyByb3cgcHJpbWFyeSBrZXkpXG4gICAgICAgIC8vIHRvZG86OmFsbG93IHJvdyBwcmltYXJ5IGtleSBjb25maWd1cmF0aW9uXG4gICAgICAgIGNvbnN0IGZpcnN0Q29sdW1uID0gdGhpcy5jb25maWcuY29sdW1uc1swXTtcbiAgICAgICAgLy8gYWRkIHNlbGVjdCBjb2x1bW5cbiAgICAgICAgY29uc3Qgc2VsZWN0Q29sdW1uRGVmaW5pdGlvbiA9IHtcbiAgICAgICAgICBjbGFzc05hbWU6ICd0ZXh0LWNlbnRlciBwbC00IHByLTAnLFxuICAgICAgICAgIGRhdGE6IGZpcnN0Q29sdW1uLnByb3BlcnR5IHx8IGZpcnN0Q29sdW1uLm5hbWUsXG4gICAgICAgICAgZGVmYXVsdENvbnRlbnQ6ICcnLFxuICAgICAgICAgIHRpdGxlOiAnJyxcbiAgICAgICAgICBzb3J0YWJsZTogZmFsc2UsXG4gICAgICAgICAgdmlzaWJsZTogIXRoaXMuY3VzdG9tU2VsZWN0LFxuICAgICAgICAgIG5hbWU6IGZpcnN0Q29sdW1uLm5hbWUsXG4gICAgICAgIH07XG4gICAgICAgIC8vIGFzc2lnbiByZW5kZXJlclxuICAgICAgICBPYmplY3QuYXNzaWduKHNlbGVjdENvbHVtbkRlZmluaXRpb24sIHtcbiAgICAgICAgICByZW5kZXI6IHRoaXMuX3JlbmRlclNlbGVjdC5iaW5kKHRoaXMpLFxuICAgICAgICB9KTtcbiAgICAgICAgLy8gYW5kIGZpbmFsbHkgYWRkIGNvbHVtblxuICAgICAgICB0YWJsZUNvbHVtbnMudW5zaGlmdChzZWxlY3RDb2x1bW5EZWZpbml0aW9uKTtcbiAgICAgICAgLy8gdXNlciBpbnRlcmZhY2UgYWRkaXRpb25zXG4gICAgICAgIC8vIGhhbmRsZSBwYWdlIGNoYW5nZSBldmVudCAoYSB0cmljayBmb3IgZmlyaW5nIGRyYXcuZHQgZXZlbnRzKVxuICAgICAgICB0YWJsZUVsZW1lbnRcbiAgICAgICAgICAvLyBmb3IgZWFjaCBwYWdlXG4gICAgICAgICAgLm9uKCdwYWdlLmR0JywgKCRldmVudCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgaW5mbyA9IHRoaXMuZGF0YVRhYmxlLnBhZ2UuaW5mbygpO1xuICAgICAgICAgIH0pXG4gICAgICAgICAgLy8gaGFuZGxlIGRyYXcgZXZlbnRzXG4gICAgICAgICAgLm9uKCdkcmF3LmR0JywgKCkgPT4ge1xuXG4gICAgICAgICAgICBpZiAodGhpcy5jdXN0b21TZWxlY3QpIHtcbiAgICAgICAgICAgICAgLy8gZW5hYmxlIHJvdyBzZWxlY3Rpb24gZXZlbnRcbiAgICAgICAgICAgICAgdGFibGVFbGVtZW50LmZpbmQoJ3Rib2R5Jykub24oJ2NsaWNrJywgJ3RyJywgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgLy8gc2VsZWN0IHJvd1xuICAgICAgICAgICAgICAgIGNvbnN0IHJvdyA9IHNlbGYuZGF0YVRhYmxlLnJvdyh0aGlzKTtcbiAgICAgICAgICAgICAgICAvLyBhZGQgcm93XG4gICAgICAgICAgICAgICAgc2VsZi5zZWxlY3QuZW1pdChyb3cpO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRzID0gdGFibGVFbGVtZW50LmZpbmQoJ2lucHV0LnMtcm93Jyk7XG4gICAgICAgICAgICBlbGVtZW50cy5vZmYoJ2NsaWNrJykub24oJ2NsaWNrJywgdGhpcy5vblNlbGVjdGlvbkNoYW5nZS5iaW5kKHRoaXMpKTtcbiAgICAgICAgICAgIC8vIG1ha2Ugc2VsZWN0aW9uIG9uIGN1cnJlbnQgcGFnZVxuICAgICAgICAgICAgY29uc3Qga2V5ID0gdGhpcy5jb25maWcuY29sdW1uc1swXS5wcm9wZXJ0eTtcbiAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgLy8gZW51bWVyYXRlIHNlbGVjdGVkIGl0ZW1zXG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWQuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgICAgIC8vIGZpbmQgcm93IGlkZW50aWZpZXJcbiAgICAgICAgICAgICAgICBjb25zdCBpZCA9IGl0ZW1ba2V5XTtcbiAgICAgICAgICAgICAgICAvLyBpZiBpZGVudGlmaWVyIGlzIGRlZmluZWRcbiAgICAgICAgICAgICAgICBpZiAoaWQgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgLy8gdHJ5IHRvIGZpbmQgY2hlY2sgZWxlbWVudCB3aXRoIHRoaXMgaWRlbnRpZmllciBpbiBhdHRyaWJ1dGUgZGF0YS1pZFxuICAgICAgICAgICAgICAgICAgdGFibGVFbGVtZW50LmZpbmQoYGlucHV0W2RhdGEtaWQ9JyR7aWR9J11gKS5wcm9wKCdjaGVja2VkJywgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLnNtYXJ0U2VsZWN0KSB7XG4gICAgICAgICAgICAgIC8vIHNlbGVjdCByb3dzIHRoYXQgYXJlIG5vdCBzZWxlY3RlZFxuICAgICAgICAgICAgICAvLyBhbmQgZG8gbm90IGluY2x1ZGVkIGluIHVuc2VsZWN0ZWQgY29sbGVjdGlvblxuICAgICAgICAgICAgICB0YWJsZUVsZW1lbnQuZmluZCgnaW5wdXRbZGF0YS1pZF0nKS5lYWNoKChpbmRleCwgZWxlbWVudCkgPT4ge1xuICAgICAgICAgICAgICAgIC8vIGdldCBkYXRhIGlkXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMudW5zZWxlY3RlZC5maW5kSW5kZXgoKHgpID0+IHtcbiAgICAgICAgICAgICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTp0cmlwbGUtZXF1YWxzXG4gICAgICAgICAgICAgICAgICByZXR1cm4geFtrZXldID09IGpRdWVyeShlbGVtZW50KS5hdHRyKCdkYXRhLWlkJyk7XG4gICAgICAgICAgICAgICAgfSkgPCAwKSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdFJvdyh0aGlzLmRhdGFUYWJsZS5yb3coaW5kZXgpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdGVkLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICB0YWJsZUVsZW1lbnQuZmluZCgnaW5wdXRbZGF0YS1pZF0nKS5wcm9wKCdjaGVja2VkJywgZmFsc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgLy8gaW5pdGlhbGl6ZSBkYXRhIHRhYmxlXG4gICAgICBjb25zdCBzZXR0aW5ncyA9IHtcbiAgICAgICAgLy8gc2V0IGxlbmd0aCBtZW51XG4gICAgICAgIGxlbmd0aE1lbnU6IFs1LCAxMCwgNTAsIDEwMCwgMjAwLCA1MDBdLFxuICAgICAgICAvLyBoaWRlIGxlbmd0aCBtZW51XG4gICAgICAgIGxlbmd0aENoYW5nZTogZmFsc2UsXG4gICAgICAgIC8vIGVuYWJsZSBzZWFyY2ggYnV0IGhpZGUgc2VhcmNoIGJveCAoY3NzKVxuICAgICAgICBzZWFyY2hpbmc6IHRydWUsXG4gICAgICAgIC8vIGVuYWJsZSBkYXRhIHByb2Nlc3NpbmdcbiAgICAgICAgcHJvY2Vzc2luZzogdHJ1ZSxcbiAgICAgICAgLy8gZW5hYmxlIGdldHRpbmcgc2VydmVyIHNpZGUgZGF0YVxuICAgICAgICBzZXJ2ZXJTaWRlOiB0aGlzLnNlcnZlclNpZGUsXG4gICAgICAgIC8vIGVudW1lcmF0ZSB0YWJsZSBjb2x1bW5zXG4gICAgICAgIGNvbHVtbnM6IHRhYmxlQ29sdW1ucyxcbiAgICAgICAgb3JkZXI6IFtdLFxuICAgICAgICAvLyBzZXQgc2Nyb2xsIHhcbiAgICAgICAgc2Nyb2xsWDogdGhpcy5zY3JvbGxYLFxuICAgICAgICBkb206ICdCZnJ0aXAnLFxuICAgICAgICBhdXRvV2lkdGg6IGZhbHNlLFxuICAgICAgICBidXR0b25zOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgZXh0ZW5kOiAnZXhjZWwnLFxuICAgICAgICAgICAgZmlsZW5hbWU6IHRoaXMuY29uZmlnLnRpdGxlLFxuICAgICAgICAgICAgY2xhc3NOYW1lOiAnZC1ub25lJyxcbiAgICAgICAgICAgIGV4cG9ydE9wdGlvbnM6IHtcbiAgICAgICAgICAgICAgY29sdW1uczogJ3RoOm5vdCg6Zmlyc3QtY2hpbGQpJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgICAgLy8gZGVmaW5lIHNlcnZlciBkYXRhIGNhbGxiYWNrXG4gICAgICAgIGZuU2VydmVyRGF0YShzU291cmNlOiBhbnksIGFvRGF0YTogYW55LCBmbkNhbGxiYWNrOiBhbnksIG9TZXR0aW5nczogYW55KSB7XG4gICAgICAgICAgLy8gaWYgbWV0aG9kIGlzIGludm9rZWQgZm9yIHRoZSBmaXJzdCB0aW1lXG4gICAgICAgICAgaWYgKHNlbGYuX2ZpcnN0TG9hZCkge1xuICAgICAgICAgICAgLy8gZGlzYWJsZWQgZmlyc3QgbG9hZCBmbGFnXG4gICAgICAgICAgICBzZWxmLl9maXJzdExvYWQgPSBmYWxzZTtcbiAgICAgICAgICAgIC8vIGlmIGF1dG8gbG9hZCBpcyBkaXNhYmxlZFxuICAgICAgICAgICAgaWYgKHNlbGYuYXV0b0xvYWQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGVtcHR5RGF0YVNldCA9IHtcbiAgICAgICAgICAgICAgICByZWNvcmRzVG90YWw6IDAsXG4gICAgICAgICAgICAgICAgcmVjb3Jkc0ZpbHRlcmVkOiAwLFxuICAgICAgICAgICAgICAgIGRhdGE6IFtdLFxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAvLyBlbWl0IGVtcHR5IGRhdGFcbiAgICAgICAgICAgICAgc2VsZi5sb2FkLmVtaXQoZW1wdHlEYXRhU2V0KTtcbiAgICAgICAgICAgICAgLy8gcmV0dXJuIGVtcHR5IGRhdGFcbiAgICAgICAgICAgICAgcmV0dXJuIGZuQ2FsbGJhY2soZW1wdHlEYXRhU2V0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gZ2V0IGFjdGl2YXRlZCByb3V0ZSBwYXJhbXNcbiAgICAgICAgICBjb25zdCBxdWVyeVBhcmFtcyA9IHNlbGYuX2FjdGl2YXRlZFJvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1zO1xuICAgICAgICAgIC8vIGdldCBjb2x1bW5zXG4gICAgICAgICAgY29uc3QgY29sdW1ucyA9IGFvRGF0YVsxXS52YWx1ZTtcbiAgICAgICAgICAvLyBnZXQgb3JkZXIgZXhwcmVzc2lvblxuICAgICAgICAgIGNvbnN0IG9yZGVyID0gYW9EYXRhWzJdLnZhbHVlO1xuICAgICAgICAgIC8vIGdldCBza2lwIHJlY29yZHMgcGFyYW1cbiAgICAgICAgICBjb25zdCBza2lwID0gYW9EYXRhWzNdLnZhbHVlO1xuICAgICAgICAgIC8vIGdldCBwYWdlIHNpemUgcGFyYW1cbiAgICAgICAgICBjb25zdCB0b3AgPSBhb0RhdGFbNF0udmFsdWU7XG4gICAgICAgICAgLy8gZ2V0IHNlYXJjaCB2YWx1ZVxuICAgICAgICAgIGNvbnN0IHNlYXJjaFRleHQgPSBhb0RhdGFbNV0udmFsdWU7XG4gICAgICAgICAgLy8gZ2V0IGRhdGEgcXVlcnlhYmxlXG4gICAgICAgICAgY29uc3QgcSA9IHNlbGYuX3F1ZXJ5IGluc3RhbmNlb2YgQ2xpZW50RGF0YVF1ZXJ5YWJsZSA/IHNlbGYuX3F1ZXJ5IDogc2VsZi5fY29udGV4dC5tb2RlbChzZWxmLmNvbmZpZy5tb2RlbCkuYXNRdWVyeWFibGUoKTtcbiAgICAgICAgICAvLyBhcHBseSBwYWdpbmcgcGFyYW1zXG4gICAgICAgICAgaWYgKHRvcCkge1xuICAgICAgICAgICAgcS50YWtlKHRvcCkuc2tpcChza2lwKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gYXBwbHkgb3JkZXIgcGFyYW1zXG4gICAgICAgICAgaWYgKG9yZGVyICYmIG9yZGVyLmxlbmd0aCkge1xuICAgICAgICAgICAgLy8gZ2V0IG9yZGVyIHF1ZXJ5IGV4cHJlc3Npb25cbiAgICAgICAgICAgIGNvbnN0IG9yZGVyQnlTdHIgPSBvcmRlci5tYXAoKGV4cHIpID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRhYmxlQ29sdW1uc1tleHByLmNvbHVtbl0ubmFtZSArICcgJyArIGV4cHIuZGlyIHx8ICdhc2MnO1xuICAgICAgICAgICAgfSkuam9pbignLCcpO1xuICAgICAgICAgICAgLy8gc2V0IG9yZGVyXG4gICAgICAgICAgICBxLnNldFBhcmFtKCckb3JkZXJieScsIG9yZGVyQnlTdHIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBjb25maWd1cmUgJHNlbGVjdCBwYXJhbWV0ZXJcbiAgICAgICAgICBjb25zdCBzZWxlY3QgPSBzZWxmLmNvbmZpZy5jb2x1bW5zLmZpbHRlciggKGNvbHVtbikgPT4ge1xuICAgICAgICAgICAgaWYgKCBjb2x1bW4udmlydHVhbCA9PT0gdHJ1ZSApIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfSkubWFwKChjb2x1bW4pID0+IHtcbiAgICAgICAgICAgIGlmIChjb2x1bW4ucHJvcGVydHkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGNvbHVtbi5uYW1lICsgJyBhcyAnICsgY29sdW1uLnByb3BlcnR5O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGNvbHVtbi5uYW1lO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHEuc2VsZWN0LmFwcGx5KHEsIHNlbGVjdCk7XG4gICAgICAgICAgLy8gY29uZmlndXJlICRmaWx0ZXJcbiAgICAgICAgICBpZiAocXVlcnlQYXJhbXMuJGZpbHRlciAmJiBxdWVyeVBhcmFtcy4kZmlsdGVyLmxlbmd0aCkge1xuICAgICAgICAgICAgLy8gc2V0IHJvdXRlIGZpbHRlclxuICAgICAgICAgICAgY29uc3QgcVBhcmFtcyA9IHEuZ2V0UGFyYW1zKCk7XG4gICAgICAgICAgICBxLnNldFBhcmFtKCckZmlsdGVyJywgbnVsbCk7XG4gICAgICAgICAgICBjb25zdCBleHByZXNzaW9ucyA9IFsgcXVlcnlQYXJhbXMuJGZpbHRlciBdO1xuICAgICAgICAgICAgaWYgKHFQYXJhbXMuJGZpbHRlcikgeyBleHByZXNzaW9ucy5wdXNoKCcoJyArIHFQYXJhbXMuJGZpbHRlciArICcpJyApOyB9XG4gICAgICAgICAgICBxLmZpbHRlcihleHByZXNzaW9ucy5qb2luKCcgYW5kICcpKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gY2hlY2sgaWYgcXVlcnkgcGFyYW1ldGVycyBjb250YWluIGZpbHRlclxuICAgICAgICAgIGlmIChxdWVyeVBhcmFtcy4kZXhwYW5kICYmIHF1ZXJ5UGFyYW1zLiRleHBhbmQubGVuZ3RoKSB7XG4gICAgICAgICAgICAvLyBzZXQgcm91dGUgJGV4cGFuZFxuICAgICAgICAgICAgcS5zZXRQYXJhbSgnJGV4cGFuZCcsIHF1ZXJ5UGFyYW1zLiRleHBhbmQpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoc2VsZi5jb25maWcgJiYgc2VsZi5jb25maWcuZGVmYXVsdHMgJiYgc2VsZi5jb25maWcuZGVmYXVsdHMuZXhwYW5kKSB7XG4gICAgICAgICAgICBxLnNldFBhcmFtKCckZXhwYW5kJywgc2VsZi5jb25maWcuZGVmYXVsdHMuZXhwYW5kKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCFxLmdldFBhcmFtcygpWyckb3JkZXJieSddICYmIHNlbGYuY29uZmlnICYmIHNlbGYuY29uZmlnLmRlZmF1bHRzICYmIHNlbGYuY29uZmlnLmRlZmF1bHRzLm9yZGVyQnkpIHtcbiAgICAgICAgICAgIHEuc2V0UGFyYW0oJyRvcmRlcmJ5Jywgc2VsZi5jb25maWcuZGVmYXVsdHMub3JkZXJCeSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChzZWxmLmNvbmZpZyAmJiBzZWxmLmNvbmZpZy5kZWZhdWx0cyAmJiBzZWxmLmNvbmZpZy5kZWZhdWx0cy5ncm91cEJ5KSB7XG4gICAgICAgICAgICBxLnNldFBhcmFtKCckZ3JvdXBieScsIHNlbGYuY29uZmlnLmRlZmF1bHRzLmdyb3VwQnkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBhcHBlbmQgZGVmYXVsdCBmaWx0ZXJcbiAgICAgICAgICBpZiAoc2VsZi5jb25maWcgJiYgc2VsZi5jb25maWcuZGVmYXVsdHMgJiYgc2VsZi5jb25maWcuZGVmYXVsdHMuZmlsdGVyKSB7XG4gICAgICAgICAgICByZXR1cm4gc2VsZi5fYWR2YW5jZWRGaWx0ZXJWYWx1ZVByb3ZpZGVyLmFzeW5jQnVpbGRGaWx0ZXIoc2VsZi5jb25maWcuZGVmYXVsdHMuZmlsdGVyKS50aGVuKChkZWZhdWx0RmlsdGVyU3RyaW5nKSA9PiB7XG4gICAgICAgICAgICAgIGlmIChkZWZhdWx0RmlsdGVyU3RyaW5nKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcVBhcmFtcyA9IHEuZ2V0UGFyYW1zKCk7XG4gICAgICAgICAgICAgICAgcS5zZXRQYXJhbSgnJGZpbHRlcicsIG51bGwpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGV4cHJlc3Npb25zID0gWyBkZWZhdWx0RmlsdGVyU3RyaW5nIF07XG4gICAgICAgICAgICAgICAgaWYgKHFQYXJhbXMuJGZpbHRlcikgeyBleHByZXNzaW9ucy5wdXNoKCcoJyArIHFQYXJhbXMuJGZpbHRlciArICcpJyApOyB9XG4gICAgICAgICAgICAgICAgcS5maWx0ZXIoZXhwcmVzc2lvbnMuam9pbignIGFuZCAnKSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgc2VsZi5sYXN0UXVlcnlQYXJhbXMgPSBxLmdldFBhcmFtcygpO1xuICAgICAgICAgICAgICBxLmdldExpc3QoKS50aGVuKChpdGVtcykgPT4ge1xuICAgICAgICAgICAgICAgICAgY29uc3QgZGF0YVNldCA9IHtcbiAgICAgICAgICAgICAgICAgICAgcmVjb3Jkc1RvdGFsOiBpdGVtcy50b3RhbCxcbiAgICAgICAgICAgICAgICAgICAgcmVjb3Jkc0ZpbHRlcmVkOiBpdGVtcy50b3RhbCxcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogaXRlbXMudmFsdWUsXG4gICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgaWYgKGl0ZW1zLnRvdGFsID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYucmVzZXRFbXB0eVRhYmxlKCk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAvLyBlbWl0IGxvYWQgZXZlbnRcbiAgICAgICAgICAgICAgICAgIHNlbGYubG9hZC5lbWl0KGRhdGFTZXQpO1xuICAgICAgICAgICAgICAgICAgLy8gcmV0dXJuIGRhdGFcbiAgICAgICAgICAgICAgICAgIHJldHVybiBmbkNhbGxiYWNrKGRhdGFTZXQpO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pLmNhdGNoKChlcnIpID0+IHtcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignVEFCTEVTJywgZXJyKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBzZWxmLmxhc3RRdWVyeVBhcmFtcyA9IHEuZ2V0UGFyYW1zKCk7XG4gICAgICAgICAgcS5nZXRMaXN0KCkudGhlbigoaXRlbXMpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGFTZXQgPSB7XG4gICAgICAgICAgICAgIHJlY29yZHNUb3RhbDogaXRlbXMudG90YWwsXG4gICAgICAgICAgICAgIHJlY29yZHNGaWx0ZXJlZDogaXRlbXMudG90YWwsXG4gICAgICAgICAgICAgIGRhdGE6IGl0ZW1zLnZhbHVlLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmIChpdGVtcy50b3RhbCA9PT0gMCkge1xuICAgICAgICAgICAgICBzZWxmLnJlc2V0RW1wdHlUYWJsZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gZW1pdCBsb2FkIGV2ZW50XG4gICAgICAgICAgICBzZWxmLmxvYWQuZW1pdChkYXRhU2V0KTtcbiAgICAgICAgICAgIC8vIHJldHVybiBkYXRhXG4gICAgICAgICAgICByZXR1cm4gZm5DYWxsYmFjayhkYXRhU2V0KTtcbiAgICAgICAgICB9KS5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdUQUJMRVMnLCBlcnIpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBsYW5ndWFnZTogT2JqZWN0LmFzc2lnbih7IH0sIHNlbGYudHJhbnNsYXRvci50cmFuc2Zvcm0oJ1RhYmxlcy5EYXRhVGFibGUnKSxcbiAgICAgICAgICB7ZW1wdHlUYWJsZTogJyAnIH0pLFxuICAgICAgfTtcblxuICAgICAgaWYgKHRoaXMuc2Nyb2xsYWJsZSkge1xuICAgICAgICAvLyBzZXQgY29udGludW91cyBzY3JvbGxpbmdcbiAgICAgICAgT2JqZWN0LmFzc2lnbihzZXR0aW5ncywge1xuICAgICAgICAgIHNjcm9sbFk6IHRoaXMuc2Nyb2xsWSxcbiAgICAgICAgICBzY3JvbGxDb2xsYXBzZTogZmFsc2UsXG4gICAgICAgICAgc2Nyb2xsZXI6IHtcbiAgICAgICAgICAgIGxvYWRpbmdJbmRpY2F0b3I6IGZhbHNlLFxuICAgICAgICAgICAgZGlzcGxheUJ1ZmZlcjogMTAsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBPYmplY3QuYXNzaWduKHNldHRpbmdzLCB7XG4gICAgICAgICAgc2Nyb2xsWTogdGhpcy5zY3JvbGxZLFxuICAgICAgICAgIHBhZ2luZzogdGhpcy5wYWdpbmcsXG4gICAgICAgICAgcGFnZUxlbmd0aDogdGhpcy5wYWdlTGVuZ3RoLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnNlbGVjdGFibGUpIHtcblxuICAgICAgfVxuICAgICAgLy8gaGFuZGxlIGluaXQuZHQgZXZlbnQgYW5kIGVtaXQgbG9jYWwgZXZlbnRcbiAgICAgIHRoaXMuZGF0YVRhYmxlID0gdGFibGVFbGVtZW50LkRhdGFUYWJsZShzZXR0aW5ncyk7XG4gICAgICB0YWJsZUVsZW1lbnQub24oJ2luaXQuZHQnLCAoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmRhdGFUYWJsZSA9PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIHJlc3RvcmUgZGVmYXVsdCBlbXB0eSB0YWJsZSBodG1sXG4gICAgICAgIC8vIChkdWUgdG8gbmcgYXN5bmMgYmluZGluZylcbiAgICAgICAgdGhpcy5pbml0LmVtaXQodGhpcy5kYXRhVGFibGUpO1xuICAgICAgfSk7XG5cbiAgICAgIC8vIHNob3cgb3IgaGlkZSBoZWFkZXJcbiAgICAgIGlmICghdGhpcy5zaG93SGVhZGVyKSB7XG4gICAgICAgICggdGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50IGFzIEhUTUxEaXZFbGVtZW50KVxuICAgICAgICAgIC5xdWVyeVNlbGVjdG9yKCcuZGF0YVRhYmxlPnRoZWFkJykuY2xhc3NMaXN0LmFkZCgnZC1ub25lJyk7XG4gICAgICAgICggdGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50IGFzIEhUTUxEaXZFbGVtZW50KVxuICAgICAgICAgIC5xdWVyeVNlbGVjdG9yKCcuZGF0YVRhYmxlJykuY2xhc3NMaXN0LmFkZCgnbXQtMicpO1xuICAgICAgfVxuXG4gICAgICAvLyBzaG93IG9yIGhpZGUgZm9vdGVyXG4gICAgICBpZiAoIXRoaXMuc2hvd0Zvb3Rlcikge1xuICAgICAgICAoIHRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudCBhcyBIVE1MRGl2RWxlbWVudClcbiAgICAgICAgICAucXVlcnlTZWxlY3RvcignLmRhdGFUYWJsZXNfaW5mbycpLmNsYXNzTGlzdC5hZGQoJ2Qtbm9uZScpO1xuICAgICAgfVxuICAgICAgLy8gc2hvdyBvciBoaWRlIHBhZ2VyXG4gICAgICBpZiAodGhpcy5zaG93UGFnaW5nKSB7XG4gICAgICAgIHRoaXMuc2hvd1BhZ2luZyA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZ2V0IGxhc3RRdWVyeSgpOiBDbGllbnREYXRhUXVlcnlhYmxlIHtcbiAgICBpZiAodGhpcy5jb25maWcgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGlmICh0aGlzLmxhc3RRdWVyeVBhcmFtcyA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgY29uc3QgcSA9IHRoaXMuX2NvbnRleHQubW9kZWwodGhpcy5jb25maWcubW9kZWwpLmFzUXVlcnlhYmxlKCk7XG4gICAgT2JqZWN0LmtleXModGhpcy5sYXN0UXVlcnlQYXJhbXMpLmZvckVhY2goIChrZXkpID0+IHtcbiAgICAgIHEuc2V0UGFyYW0oa2V5LCB0aGlzLmxhc3RRdWVyeVBhcmFtc1trZXldKTtcbiAgICB9KTtcbiAgICAvLyByZXR1cm4gcXVlcnlcbiAgICByZXR1cm4gcTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGZXRjaGVzIGFuZCB1cGRhdGVzIGEgc2luZ2xlIHJvd1xuICAgKiBAcGFyYW0gZmluZCAtIEFueSBvYmplY3Qgd2hpY2ggaXMgYmVpbmcgY29udmVydGVkIHRvIGEgcXVlcnlcbiAgICovXG4gIHB1YmxpYyBmZXRjaE9uZShmaW5kOiBhbnkpIHtcbiAgICBpZiAoZmluZCA9PSBudWxsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLmRhdGFUYWJsZSA9PSBudWxsKSB7XG4gICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMubGFzdFF1ZXJ5UGFyYW1zID09IG51bGwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gZ2V0IHJvd3NcbiAgICBjb25zdCByb3dzID0gQXJyYXkuZnJvbSh0aGlzLmRhdGFUYWJsZS5yb3dzKCkuZGF0YSgpKTtcbiAgICBpZiAocm93cyAmJiByb3dzLmxlbmd0aCkge1xuICAgICAgLy8gZmluZCByZXN1bHRcbiAgICAgIGNvbnN0IGZpbmRLZXlzID0gT2JqZWN0LmtleXMoZmluZCk7XG4gICAgICBpZiAoZmluZEtleXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIC8vIGRvIG5vdGhpbmdcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgLy8gZmluZCByb3cgaW5kZXggYnkgc2VhcmNoaW5nIGVhY2ggcHJvcGVydHlcbiAgICAgIGNvbnN0IHJvd0luZGV4ID0gcm93cy5maW5kSW5kZXgoKHJvdzogYW55KSA9PiB7XG4gICAgICAgIHJldHVybiBmaW5kS2V5cy5tYXAoIChrZXkpID0+IHtcbiAgICAgICAgICByZXR1cm4gcm93W2tleV0gPT09IGZpbmRba2V5XTtcbiAgICAgICAgfSkuZmlsdGVyKCAocmVzKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHJlcyA9PT0gZmFsc2U7XG4gICAgICAgIH0pLmxlbmd0aCA9PT0gMDtcbiAgICAgIH0pO1xuICAgICAgLy8gaWYgcm93IGhhcyBiZWVuIGZvdW5kXG4gICAgICBpZiAocm93SW5kZXggPj0gMCkge1xuICAgICAgICBjb25zdCBxdWVyeSA9IHRoaXMuX2NvbnRleHQubW9kZWwodGhpcy5jb25maWcubW9kZWwpLmFzUXVlcnlhYmxlKCk7XG4gICAgICAgIC8vIHNlbGVjdCBhdHRyaWJ1dGVzXG4gICAgICAgIHF1ZXJ5LnNldFBhcmFtKCckc2VsZWN0JywgdGhpcy5sYXN0UXVlcnlQYXJhbXMuJHNlbGVjdCk7XG4gICAgICAgIC8vIGFwcGx5IGZpbHRlciBmb3Igcm93XG4gICAgICAgIGZpbmRLZXlzLmZvckVhY2goIChrZXkpID0+IHtcbiAgICAgICAgICBjb25zdCBjb2x1bW4gPSB0aGlzLmNvbmZpZy5jb2x1bW5zLmZpbmQoIChjb2wpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBjb2wucHJvcGVydHkgPT09IGtleSB8fCBjb2wubmFtZSA9PT0ga2V5O1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGlmIChjb2x1bW4pIHtcbiAgICAgICAgICAgIC8vIGdldCBwcm9wZXJ0eSBvciBuYW1lXG4gICAgICAgICAgICBjb25zdCBwcm9wZXJ0eSA9IGNvbHVtbi5wcm9wZXJ0eSB8fCBjb2x1bW4ubmFtZTtcbiAgICAgICAgICAgIHF1ZXJ5LmFuZChwcm9wZXJ0eSkuZXF1YWwoZmluZFtrZXldKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcXVlcnkuYW5kKGtleSkuZXF1YWwoZmluZFtrZXldKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICAvLyBhbmQgZmluYWxseSBnZXQgaXRlbVxuICAgICAgICByZXR1cm4gcXVlcnkuZ2V0SXRlbSgpLnRoZW4oIChpdGVtKSA9PiB7XG4gICAgICAgICAgLy8gaWYgaXRlbSBleGlzdHNcbiAgICAgICAgICBjb25zdCByb3cgPSB0aGlzLmRhdGFUYWJsZS5yb3cocm93SW5kZXgpO1xuICAgICAgICAgIGNvbnN0IGNoZWNrZWQgPSBqUXVlcnkocm93Lm5vZGUoKSkuZmluZCgnOmNoZWNrYm94JykucHJvcCgnY2hlY2tlZCcpO1xuICAgICAgICAgIGlmIChpdGVtKSB7XG4gICAgICAgICAgICAvLyByZWRyYXcgcm93XG4gICAgICAgICAgICByb3cuZGF0YShpdGVtKTtcbiAgICAgICAgICAgIGpRdWVyeShyb3cubm9kZSgpKS5maW5kKCc6Y2hlY2tib3gnKS5vZmYoJ2NsaWNrJykub24oJ2NsaWNrJywgdGhpcy5vblNlbGVjdGlvbkNoYW5nZS5iaW5kKHRoaXMpKTtcbiAgICAgICAgICAgIC8vIGlmIHJvdyBpcyBhbHJlYWR5IHNlbGVjdGVkXG4gICAgICAgICAgICBpZiAoY2hlY2tlZCkge1xuICAgICAgICAgICAgICB0aGlzLnNlbGVjdFJvdyhyb3csIHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucmVsb2FkU3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLnJlbG9hZFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGUgc2VsZWN0aW9uIGNoYW5nZVxuICAgKiBAcGFyYW0gJGV2ZW50XG4gICAqL1xuICBwdWJsaWMgb25TZWxlY3Rpb25DaGFuZ2UoJGV2ZW50KSB7XG4gICAgY29uc3QgaW5wdXQgPSAgJGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50O1xuICAgIC8vIGdldCByb3cgZnJvbSBpZFxuICAgIGNvbnN0IHJvd0luZGV4ID0gcGFyc2VJbnQoLy0oXFxkKykkL2cuZXhlYyhpbnB1dC5pZClbMV0sIDEwKTtcbiAgICAvLyBnZXQgcm93XG4gICAgY29uc3Qgcm93ID0gdGhpcy5kYXRhVGFibGUucm93KHJvd0luZGV4KS5kYXRhKCk7XG4gICAgLy8gZ2V0IHJvdyBpZGVudGlmaWVyXG4gICAgaWYgKHJvdykge1xuICAgICAgY29uc3Qga2V5ID0gdGhpcy5jb25maWcuY29sdW1uc1swXS5wcm9wZXJ0eTtcbiAgICAgIGNvbnN0IGlkID0gcm93W2tleV07XG4gICAgICBsZXQgZmluZEl0ZW1JbmRleCA9IHRoaXMuc2VsZWN0ZWQuZmluZEluZGV4KChpdGVtKSA9PiB7XG4gICAgICAgIHJldHVybiBpdGVtW2tleV0gPT09IGlkO1xuICAgICAgfSk7XG4gICAgICBpZiAoaW5wdXQuY2hlY2tlZCkge1xuICAgICAgICBpZiAoZmluZEl0ZW1JbmRleCA8IDApIHtcbiAgICAgICAgICAvLyBhZGQgcm93IHRvIHNlbGVjdGVkIHJvd3NcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkLnB1c2gocm93KTtcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMuZW1pdCh0aGlzLnNlbGVjdGVkKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGZpbmRJdGVtSW5kZXggPj0gMCkge1xuICAgICAgICAgIC8vIHJlbW92ZSBzZWxlY3RlZCBpdGVtXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZC5zcGxpY2UoZmluZEl0ZW1JbmRleCwgMSk7XG4gICAgICAgICAgaWYgKHRoaXMuc21hcnRTZWxlY3QpIHtcbiAgICAgICAgICAgIC8vIGFkZCByb3cgdG8gdW5zZWxlY3RlZCByb3dzXG4gICAgICAgICAgICBmaW5kSXRlbUluZGV4ID0gdGhpcy51bnNlbGVjdGVkLmZpbmRJbmRleCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgICByZXR1cm4gaXRlbVtrZXldID09PSBpZDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKGZpbmRJdGVtSW5kZXggPCAwKSB7XG4gICAgICAgICAgICAgIHRoaXMudW5zZWxlY3RlZC5wdXNoKHJvdyk7XG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcy5lbWl0KHRoaXMuc2VsZWN0ZWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcmVzZXRFbXB0eVRhYmxlKCkge1xuICAgIC8vIHRoaXMgb3BlcmF0aW9uIGlzIGltcG9ydGFudFxuICAgIC8vIGR1ZSB0byBuZyBkYXRhIGJpbmRpbmdcbiAgICAvLyBlbXB0eSB0YWJsZSB0ZW1wbGF0ZSBoYXMgbm8gdHJhbnNsYXRlZCB0ZXh0IGR1cmluZyBuZ09uSW5pdCgpXG4gICAgaWYgKHRoaXMuZGF0YVRhYmxlICYmIHRoaXMuZGF0YVRhYmxlLmNvbnRleHRbMF0pIHtcbiAgICAgIHRoaXMuZGF0YVRhYmxlLmNvbnRleHRbMF0ub0xhbmd1YWdlLnNFbXB0eVRhYmxlID0gdGhpcy5lbXB0eVRhYmxlLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY2xlYXJFbXB0eVRhYmxlKCkge1xuICAgIGlmICh0aGlzLmRhdGFUYWJsZSAmJiB0aGlzLmRhdGFUYWJsZS5jb250ZXh0WzBdKSB7XG4gICAgICB0aGlzLmRhdGFUYWJsZS5jb250ZXh0WzBdLm9MYW5ndWFnZS5zRW1wdHlUYWJsZSA9ICcnO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBleHBvcnQoKSB7XG4gICAgY29uc3QgZWxlbWVudDogSFRNTEVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuZHQtYnV0dG9ucyAuYnV0dG9ucy1leGNlbCcpIGFzIEhUTUxFbGVtZW50O1xuICAgIGVsZW1lbnQuY2xpY2soKTtcbiAgfVxuXG4gIHB1YmxpYyBoYW5kbGVDb2x1bW5zKGNvbHVtbnNUb1Nob3cpIHtcbiAgICBjb25zdCB0YWJsZSA9IHRoaXMuZGF0YVRhYmxlO1xuICAgIHRoaXMuY29uZmlnLmNvbHVtbnMuc2xpY2UoMSkuZm9yRWFjaCgoY29sdW1uLCBpKSA9PiB7XG4gICAgICBpZiAoIWNvbHVtbi5oaWRkZW4pIHtcbiAgICAgICAgaWYgKGNvbHVtbnNUb1Nob3cuaW5jbHVkZXMoY29sdW1uLm5hbWUpKSB7XG4gICAgICAgICAgLy8gbm9pbnNwZWN0aW9uIFR5cGVTY3JpcHRWYWxpZGF0ZUpTVHlwZXNcbiAgICAgICAgICB0YWJsZS5jb2x1bW4oY29sdW1uLm5hbWUgKyAnOm5hbWUnKS52aXNpYmxlKHRydWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIG5vaW5zcGVjdGlvbiBUeXBlU2NyaXB0VmFsaWRhdGVKU1R5cGVzXG4gICAgICAgICAgdGFibGUuY29sdW1uKGNvbHVtbi5uYW1lICsgJzpuYW1lJykudmlzaWJsZShmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRDb25maWcoKSB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnO1xuICB9XG5cbiAgcHVibGljIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGNoYW5nZXMsICdjb25maWdTcmMnKSkge1xuICAgICAgaWYgKGNoYW5nZXMuY29uZmlnU3JjICE9IG51bGwpIHtcbiAgICAgICAgLy8gbG9hZCB0YWJsZSBjb25maWd1cmF0aW9uIG9uIGNoYW5nZVxuICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IHRyaXBsZS1lcXVhbHNcbiAgICAgICAgaWYgKGNoYW5nZXMuY29uZmlnU3JjLmN1cnJlbnRWYWx1ZSAmJiAoY2hhbmdlcy5jb25maWdTcmMuY3VycmVudFZhbHVlICE9IGNoYW5nZXMuY29uZmlnU3JjLnByZXZpb3VzVmFsdWUpKSB7XG4gICAgICAgICAgdGhpcy5faHR0cC5nZXQoY2hhbmdlcy5jb25maWdTcmMuY3VycmVudFZhbHVlKS50b1Byb21pc2UoKS50aGVuKChjb25maWc6IFRhYmxlQ29uZmlndXJhdGlvbikgPT4ge1xuICAgICAgICAgICAgLy8gc2V0IGNvbmZpZ3VyYXRpb25cbiAgICAgICAgICAgIHRoaXMuY29uZmlnID0gY29uZmlnO1xuICAgICAgICAgICAgLy8gZmV0Y2ggYW5kIHJlZHJhd1xuICAgICAgICAgICAgdGhpcy5mZXRjaCgpO1xuICAgICAgICAgIH0pLmNhdGNoKChlcnIpID0+IHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1RBQkxFUycsICdBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSBsb2FkaW5nIHRhYmxlIGNvbmZpZ3VyYXRpb24uJyk7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxufVxuIl19
@@ -1,4 +1,4 @@
1
- import { ActionLinkFormatter, ButtonFormatter, DateTimeFormatter, LanguageFormatter, LinkFormatter, NestedPropertyFormatter, NgClassFormatter, SelectRowFormatter, TemplateFormatter, TranslationFormatter, TrueFalseFormatter, } from './advanced-table.formatters';
1
+ import { ActionLinkFormatter, ButtonFormatter, DateTimeFormatter, LanguageFormatter, LinkFormatter, NestedPropertyFormatter, NgClassFormatter, SelectRowFormatter, TemplateFormatter, TranslationFormatter, TrueFalseFormatter, ActionButtonFormatter, ActionSplitButtonFormatter, } from './advanced-table.formatters';
2
2
  export const FORMATTERS = {
3
3
  ActionLinkFormatter: new ActionLinkFormatter(),
4
4
  ButtonFormatter: new ButtonFormatter(),
@@ -11,6 +11,8 @@ export const FORMATTERS = {
11
11
  TemplateFormatter: new TemplateFormatter(),
12
12
  TranslationFormatter: new TranslationFormatter(),
13
13
  TrueFalseFormatter: new TrueFalseFormatter(),
14
+ ActionButtonFormatter: new ActionButtonFormatter(),
15
+ ActionSplitButtonFormatter: new ActionSplitButtonFormatter(),
14
16
  };
15
17
 
16
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWR2YW5jZWQtdGFibGUuZm9ybWF0dGVycy5pbnRlcmZhY2UuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AdW5pdmVyc2lzL25neC10YWJsZXMvIiwic291cmNlcyI6WyJsaWIvY29tcG9uZW50cy9hZHZhbmNlZC10YWJsZS9hZHZhbmNlZC10YWJsZS5mb3JtYXR0ZXJzLmludGVyZmFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsbUJBQW1CLEVBQUUsZUFBZSxFQUFFLGlCQUFpQixFQUFFLGlCQUFpQixFQUMxRSxhQUFhLEVBQ2IsdUJBQXVCLEVBQUUsZ0JBQWdCLEVBQUUsa0JBQWtCLEVBQzdELGlCQUFpQixFQUFFLG9CQUFvQixFQUN2QyxrQkFBa0IsR0FDbkIsTUFBTSw2QkFBNkIsQ0FBQztBQWVyQyxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQTZCO0lBQzlDLG1CQUFtQixFQUFFLElBQUksbUJBQW1CLEVBQUU7SUFDOUMsZUFBZSxFQUFFLElBQUksZUFBZSxFQUFFO0lBQ3RDLGlCQUFpQixFQUFFLElBQUksaUJBQWlCLEVBQUU7SUFDMUMsaUJBQWlCLEVBQUUsSUFBSSxpQkFBaUIsRUFBRTtJQUMxQyxhQUFhLEVBQUUsSUFBSSxhQUFhLEVBQUU7SUFDbEMsdUJBQXVCLEVBQUUsSUFBSSx1QkFBdUIsRUFBRTtJQUN0RCxnQkFBZ0IsRUFBRSxJQUFJLGdCQUFnQixFQUFFO0lBQ3hDLGtCQUFrQixFQUFFLElBQUksa0JBQWtCLEVBQUU7SUFDNUMsaUJBQWlCLEVBQUUsSUFBSSxpQkFBaUIsRUFBRTtJQUMxQyxvQkFBb0IsRUFBRSxJQUFJLG9CQUFvQixFQUFFO0lBQ2hELGtCQUFrQixFQUFFLElBQUksa0JBQWtCLEVBQUU7Q0FDakQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFjdGlvbkxpbmtGb3JtYXR0ZXIsIEJ1dHRvbkZvcm1hdHRlciwgRGF0ZVRpbWVGb3JtYXR0ZXIsIExhbmd1YWdlRm9ybWF0dGVyLFxuICBMaW5rRm9ybWF0dGVyLFxuICBOZXN0ZWRQcm9wZXJ0eUZvcm1hdHRlciwgTmdDbGFzc0Zvcm1hdHRlciwgU2VsZWN0Um93Rm9ybWF0dGVyLFxuICBUZW1wbGF0ZUZvcm1hdHRlciwgVHJhbnNsYXRpb25Gb3JtYXR0ZXIsXG4gIFRydWVGYWxzZUZvcm1hdHRlcixcbn0gZnJvbSAnLi9hZHZhbmNlZC10YWJsZS5mb3JtYXR0ZXJzJztcblxuZXhwb3J0IGludGVyZmFjZSBJQWR2YW5jZWRUYWJsZUZvcm1hdHRlcnMge1xuICBBY3Rpb25MaW5rRm9ybWF0dGVyPzogQWN0aW9uTGlua0Zvcm1hdHRlcjtcbiAgQnV0dG9uRm9ybWF0dGVyPzogQnV0dG9uRm9ybWF0dGVyO1xuICBEYXRlVGltZUZvcm1hdHRlcj86IERhdGVUaW1lRm9ybWF0dGVyO1xuICBMYW5ndWFnZUZvcm1hdHRlcj86IExhbmd1YWdlRm9ybWF0dGVyO1xuICBMaW5rRm9ybWF0dGVyPzogTGlua0Zvcm1hdHRlcjtcbiAgTmVzdGVkUHJvcGVydHlGb3JtYXR0ZXI/OiBOZXN0ZWRQcm9wZXJ0eUZvcm1hdHRlcjtcbiAgTmdDbGFzc0Zvcm1hdHRlcj86IE5nQ2xhc3NGb3JtYXR0ZXI7XG4gIFNlbGVjdFJvd0Zvcm1hdHRlcj86IFNlbGVjdFJvd0Zvcm1hdHRlcjtcbiAgVGVtcGxhdGVGb3JtYXR0ZXI/OiBUZW1wbGF0ZUZvcm1hdHRlcjtcbiAgVHJhbnNsYXRpb25Gb3JtYXR0ZXI/OiBUcmFuc2xhdGlvbkZvcm1hdHRlcjtcbiAgVHJ1ZUZhbHNlRm9ybWF0dGVyPzogVHJ1ZUZhbHNlRm9ybWF0dGVyO1xufVxuZXhwb3J0IGNvbnN0IEZPUk1BVFRFUlM6IElBZHZhbmNlZFRhYmxlRm9ybWF0dGVycyA9IHtcbiAgICAgIEFjdGlvbkxpbmtGb3JtYXR0ZXI6IG5ldyBBY3Rpb25MaW5rRm9ybWF0dGVyKCksXG4gICAgICBCdXR0b25Gb3JtYXR0ZXI6IG5ldyBCdXR0b25Gb3JtYXR0ZXIoKSxcbiAgICAgIERhdGVUaW1lRm9ybWF0dGVyOiBuZXcgRGF0ZVRpbWVGb3JtYXR0ZXIoKSxcbiAgICAgIExhbmd1YWdlRm9ybWF0dGVyOiBuZXcgTGFuZ3VhZ2VGb3JtYXR0ZXIoKSxcbiAgICAgIExpbmtGb3JtYXR0ZXI6IG5ldyBMaW5rRm9ybWF0dGVyKCksXG4gICAgICBOZXN0ZWRQcm9wZXJ0eUZvcm1hdHRlcjogbmV3IE5lc3RlZFByb3BlcnR5Rm9ybWF0dGVyKCksXG4gICAgICBOZ0NsYXNzRm9ybWF0dGVyOiBuZXcgTmdDbGFzc0Zvcm1hdHRlcigpLFxuICAgICAgU2VsZWN0Um93Rm9ybWF0dGVyOiBuZXcgU2VsZWN0Um93Rm9ybWF0dGVyKCksXG4gICAgICBUZW1wbGF0ZUZvcm1hdHRlcjogbmV3IFRlbXBsYXRlRm9ybWF0dGVyKCksXG4gICAgICBUcmFuc2xhdGlvbkZvcm1hdHRlcjogbmV3IFRyYW5zbGF0aW9uRm9ybWF0dGVyKCksXG4gICAgICBUcnVlRmFsc2VGb3JtYXR0ZXI6IG5ldyBUcnVlRmFsc2VGb3JtYXR0ZXIoKSxcbn07XG4iXX0=
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWR2YW5jZWQtdGFibGUuZm9ybWF0dGVycy5pbnRlcmZhY2UuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AdW5pdmVyc2lzL25neC10YWJsZXMvIiwic291cmNlcyI6WyJsaWIvY29tcG9uZW50cy9hZHZhbmNlZC10YWJsZS9hZHZhbmNlZC10YWJsZS5mb3JtYXR0ZXJzLmludGVyZmFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsbUJBQW1CLEVBQUUsZUFBZSxFQUFFLGlCQUFpQixFQUFFLGlCQUFpQixFQUMxRSxhQUFhLEVBQ2IsdUJBQXVCLEVBQUUsZ0JBQWdCLEVBQUUsa0JBQWtCLEVBQzdELGlCQUFpQixFQUFFLG9CQUFvQixFQUN2QyxrQkFBa0IsRUFBRSxxQkFBcUIsRUFBRSwwQkFBMEIsR0FDdEUsTUFBTSw2QkFBNkIsQ0FBQztBQWlCckMsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUE2QjtJQUM5QyxtQkFBbUIsRUFBRSxJQUFJLG1CQUFtQixFQUFFO0lBQzlDLGVBQWUsRUFBRSxJQUFJLGVBQWUsRUFBRTtJQUN0QyxpQkFBaUIsRUFBRSxJQUFJLGlCQUFpQixFQUFFO0lBQzFDLGlCQUFpQixFQUFFLElBQUksaUJBQWlCLEVBQUU7SUFDMUMsYUFBYSxFQUFFLElBQUksYUFBYSxFQUFFO0lBQ2xDLHVCQUF1QixFQUFFLElBQUksdUJBQXVCLEVBQUU7SUFDdEQsZ0JBQWdCLEVBQUUsSUFBSSxnQkFBZ0IsRUFBRTtJQUN4QyxrQkFBa0IsRUFBRSxJQUFJLGtCQUFrQixFQUFFO0lBQzVDLGlCQUFpQixFQUFFLElBQUksaUJBQWlCLEVBQUU7SUFDMUMsb0JBQW9CLEVBQUUsSUFBSSxvQkFBb0IsRUFBRTtJQUNoRCxrQkFBa0IsRUFBRSxJQUFJLGtCQUFrQixFQUFFO0lBQzVDLHFCQUFxQixFQUFFLElBQUkscUJBQXFCLEVBQUU7SUFDbEQsMEJBQTBCLEVBQUUsSUFBSSwwQkFBMEIsRUFBRTtDQUNqRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWN0aW9uTGlua0Zvcm1hdHRlciwgQnV0dG9uRm9ybWF0dGVyLCBEYXRlVGltZUZvcm1hdHRlciwgTGFuZ3VhZ2VGb3JtYXR0ZXIsXG4gIExpbmtGb3JtYXR0ZXIsXG4gIE5lc3RlZFByb3BlcnR5Rm9ybWF0dGVyLCBOZ0NsYXNzRm9ybWF0dGVyLCBTZWxlY3RSb3dGb3JtYXR0ZXIsXG4gIFRlbXBsYXRlRm9ybWF0dGVyLCBUcmFuc2xhdGlvbkZvcm1hdHRlcixcbiAgVHJ1ZUZhbHNlRm9ybWF0dGVyLCBBY3Rpb25CdXR0b25Gb3JtYXR0ZXIsIEFjdGlvblNwbGl0QnV0dG9uRm9ybWF0dGVyLFxufSBmcm9tICcuL2FkdmFuY2VkLXRhYmxlLmZvcm1hdHRlcnMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIElBZHZhbmNlZFRhYmxlRm9ybWF0dGVycyB7XG4gIEFjdGlvbkxpbmtGb3JtYXR0ZXI/OiBBY3Rpb25MaW5rRm9ybWF0dGVyO1xuICBCdXR0b25Gb3JtYXR0ZXI/OiBCdXR0b25Gb3JtYXR0ZXI7XG4gIERhdGVUaW1lRm9ybWF0dGVyPzogRGF0ZVRpbWVGb3JtYXR0ZXI7XG4gIExhbmd1YWdlRm9ybWF0dGVyPzogTGFuZ3VhZ2VGb3JtYXR0ZXI7XG4gIExpbmtGb3JtYXR0ZXI/OiBMaW5rRm9ybWF0dGVyO1xuICBOZXN0ZWRQcm9wZXJ0eUZvcm1hdHRlcj86IE5lc3RlZFByb3BlcnR5Rm9ybWF0dGVyO1xuICBOZ0NsYXNzRm9ybWF0dGVyPzogTmdDbGFzc0Zvcm1hdHRlcjtcbiAgU2VsZWN0Um93Rm9ybWF0dGVyPzogU2VsZWN0Um93Rm9ybWF0dGVyO1xuICBUZW1wbGF0ZUZvcm1hdHRlcj86IFRlbXBsYXRlRm9ybWF0dGVyO1xuICBUcmFuc2xhdGlvbkZvcm1hdHRlcj86IFRyYW5zbGF0aW9uRm9ybWF0dGVyO1xuICBUcnVlRmFsc2VGb3JtYXR0ZXI/OiBUcnVlRmFsc2VGb3JtYXR0ZXI7XG4gIEFjdGlvbkJ1dHRvbkZvcm1hdHRlcj86IEFjdGlvbkJ1dHRvbkZvcm1hdHRlcjtcbiAgQWN0aW9uU3BsaXRCdXR0b25Gb3JtYXR0ZXI/OiBBY3Rpb25TcGxpdEJ1dHRvbkZvcm1hdHRlcjtcbn1cbmV4cG9ydCBjb25zdCBGT1JNQVRURVJTOiBJQWR2YW5jZWRUYWJsZUZvcm1hdHRlcnMgPSB7XG4gICAgICBBY3Rpb25MaW5rRm9ybWF0dGVyOiBuZXcgQWN0aW9uTGlua0Zvcm1hdHRlcigpLFxuICAgICAgQnV0dG9uRm9ybWF0dGVyOiBuZXcgQnV0dG9uRm9ybWF0dGVyKCksXG4gICAgICBEYXRlVGltZUZvcm1hdHRlcjogbmV3IERhdGVUaW1lRm9ybWF0dGVyKCksXG4gICAgICBMYW5ndWFnZUZvcm1hdHRlcjogbmV3IExhbmd1YWdlRm9ybWF0dGVyKCksXG4gICAgICBMaW5rRm9ybWF0dGVyOiBuZXcgTGlua0Zvcm1hdHRlcigpLFxuICAgICAgTmVzdGVkUHJvcGVydHlGb3JtYXR0ZXI6IG5ldyBOZXN0ZWRQcm9wZXJ0eUZvcm1hdHRlcigpLFxuICAgICAgTmdDbGFzc0Zvcm1hdHRlcjogbmV3IE5nQ2xhc3NGb3JtYXR0ZXIoKSxcbiAgICAgIFNlbGVjdFJvd0Zvcm1hdHRlcjogbmV3IFNlbGVjdFJvd0Zvcm1hdHRlcigpLFxuICAgICAgVGVtcGxhdGVGb3JtYXR0ZXI6IG5ldyBUZW1wbGF0ZUZvcm1hdHRlcigpLFxuICAgICAgVHJhbnNsYXRpb25Gb3JtYXR0ZXI6IG5ldyBUcmFuc2xhdGlvbkZvcm1hdHRlcigpLFxuICAgICAgVHJ1ZUZhbHNlRm9ybWF0dGVyOiBuZXcgVHJ1ZUZhbHNlRm9ybWF0dGVyKCksXG4gICAgICBBY3Rpb25CdXR0b25Gb3JtYXR0ZXI6IG5ldyBBY3Rpb25CdXR0b25Gb3JtYXR0ZXIoKSxcbiAgICAgIEFjdGlvblNwbGl0QnV0dG9uRm9ybWF0dGVyOiBuZXcgQWN0aW9uU3BsaXRCdXR0b25Gb3JtYXR0ZXIoKSxcbn07XG4iXX0=