@mediusinc/mng-commons 0.15.1 → 0.16.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. package/esm2020/lib/components/action/action.component.mjs +7 -7
  2. package/esm2020/lib/components/action/editor/action-editor.component.mjs +41 -20
  3. package/esm2020/lib/components/action/route/action-route.component.mjs +3 -3
  4. package/esm2020/lib/components/form/editor/form-editor.component.mjs +29 -29
  5. package/esm2020/lib/components/form/formly/fields/formly-field-lookup-dialog/formly-field-lookup-dialog.component.mjs +3 -3
  6. package/esm2020/lib/components/form/formly/fields/formly-field-table-dialog-form/formly-field-table-dialog-form.component.mjs +13 -18
  7. package/esm2020/lib/components/form/formly/fields/formly-field-table-dialog-multiselect/formly-field-table-dialog-multiselect.component.mjs +7 -9
  8. package/esm2020/lib/components/layout/topbar.component.mjs +2 -2
  9. package/esm2020/lib/components/tableview/route/tableview-route.abstract.component.mjs +5 -5
  10. package/esm2020/lib/components/tableview/table/table.component.mjs +1 -1
  11. package/esm2020/lib/components/tableview/tableview.component.mjs +16 -14
  12. package/esm2020/lib/descriptors/action.descriptor.mjs +19 -13
  13. package/esm2020/lib/descriptors/editor.descriptor.mjs +5 -8
  14. package/esm2020/lib/descriptors/field.descriptor.mjs +2 -2
  15. package/esm2020/lib/descriptors/tableview.descriptor.mjs +32 -32
  16. package/esm2020/lib/descriptors/types/editor.type.mjs +8 -8
  17. package/esm2020/lib/models/view-container.model.mjs +1 -1
  18. package/esm2020/lib/router/tableview-route-builder.mjs +2 -2
  19. package/esm2020/lib/security/model/permissions.model.mjs +1 -9
  20. package/esm2020/lib/services/action-executor.service.mjs +8 -12
  21. package/esm2020/lib/services/commons.service.mjs +21 -10
  22. package/esm2020/lib/services/view-container.component.service.mjs +21 -8
  23. package/fesm2015/mediusinc-mng-commons.mjs +596 -562
  24. package/fesm2015/mediusinc-mng-commons.mjs.map +1 -1
  25. package/fesm2020/mediusinc-mng-commons.mjs +578 -546
  26. package/fesm2020/mediusinc-mng-commons.mjs.map +1 -1
  27. package/lib/components/action/editor/action-editor.component.d.ts +1 -2
  28. package/lib/components/form/editor/form-editor.component.d.ts +1 -1
  29. package/lib/components/form/formly/fields/formly-field-table-dialog-form/formly-field-table-dialog-form.component.d.ts +0 -3
  30. package/lib/components/form/formly/fields/formly-field-table-dialog-multiselect/formly-field-table-dialog-multiselect.component.d.ts +0 -2
  31. package/lib/components/tableview/tableview.component.d.ts +2 -2
  32. package/lib/descriptors/action.descriptor.d.ts +6 -4
  33. package/lib/descriptors/editor.descriptor.d.ts +5 -6
  34. package/lib/descriptors/tableview.descriptor.d.ts +5 -5
  35. package/lib/descriptors/types/editor.type.d.ts +2 -2
  36. package/lib/models/view-container.model.d.ts +31 -0
  37. package/lib/router/tableview-route-builder.d.ts +1 -1
  38. package/lib/security/model/permissions.model.d.ts +0 -7
  39. package/lib/services/commons.service.d.ts +4 -2
  40. package/lib/services/view-container.component.service.d.ts +12 -6
  41. package/package.json +1 -1
  42. package/scss/mng-overrides/_layout_dialog.scss +7 -8
  43. package/scss/mng-overrides/_theme_dialog.scss +57 -1
  44. package/scss/mng-overrides/_variables.scss +3 -0
  45. package/version-info.json +5 -5
@@ -553,4 +553,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.0", ngImpor
553
553
  type: ViewChild,
554
554
  args: [Table]
555
555
  }] } });
556
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL3RhYmxldmlldy90YWJsZS90YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvdGFibGV2aWV3L3RhYmxlL3RhYmxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFSCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULGVBQWUsRUFDZixZQUFZLEVBRVosS0FBSyxFQUlMLFFBQVEsRUFDUixNQUFNLEVBS04sU0FBUyxFQUNULFlBQVksRUFDZixNQUFNLGVBQWUsQ0FBQztBQUl2QixPQUFPLEVBQUMsZUFBZSxFQUEwQyxNQUFNLGFBQWEsQ0FBQztBQUNyRixPQUFPLEVBQUMsS0FBSyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3BDLE9BQU8sRUFBQyxlQUFlLEVBQUUsVUFBVSxFQUFFLGFBQWEsRUFBZ0IsWUFBWSxFQUFFLEVBQUUsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUNoRyxPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFbkMsT0FBTyxFQUFDLHFCQUFxQixFQUFFLGdCQUFnQixFQUFFLHVCQUF1QixFQUFFLGlCQUFpQixFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDeEgsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBRWxELE9BQU8sRUFBZ0csc0JBQXNCLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUMzSixPQUFPLEVBQUMsa0JBQWtCLEVBQUUsY0FBYyxFQUFFLHNCQUFzQixFQUFFLHVCQUF1QixFQUFFLGFBQWEsRUFBQyxNQUFNLDRCQUE0QixDQUFDO0FBQzlJLE9BQU8sRUFBQyxxQkFBcUIsRUFBRSxvQkFBb0IsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBR2hGLE9BQU8s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QUNOLGdCQUFnQjtzQkFBL0IsS0FBSztnQkFDVSxxQkFBcUI7c0JBQXBDLEtBQUs7Z0JBQ1Usb0JBQW9CO3NCQUFuQyxLQUFLO2dCQUdzQixnQkFBZ0I7c0JBQTNDLE1BQU07dUJBQUMsV0FBVztnQkFDUyxxQkFBcUI7c0JBQWhELE1BQU07dUJBQUMsV0FBVztnQkFDZSwyQkFBMkI7c0JBQTVELE1BQU07dUJBQUMsaUJBQWlCO2dCQUNrQiwwQkFBMEI7c0JBQXBFLE1BQU07dUJBQUMsMEJBQTBCO2dCQUNjLCtCQUErQjtzQkFBOUUsTUFBTTt1QkFBQywrQkFBK0I7Z0JBR08sU0FBUztzQkFBdEQsZUFBZTt1QkFBQyxvQkFBb0I7Z0JBQ08sVUFBVTtzQkFBckQsWUFBWTt1QkFBQyxxQkFBcUI7Z0JBQ1YsVUFBVTtzQkFBbEMsU0FBUzt1QkFBQyxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBBZnRlckNvbnRlbnRJbml0LFxuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENvbXBvbmVudCxcbiAgICBDb250ZW50Q2hpbGRyZW4sXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIEluamVjdG9yLFxuICAgIElucHV0LFxuICAgIE9uQ2hhbmdlcyxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIE9wdGlvbmFsLFxuICAgIE91dHB1dCxcbiAgICBRdWVyeUxpc3QsXG4gICAgU2ltcGxlQ2hhbmdlcyxcbiAgICBUZW1wbGF0ZVJlZixcbiAgICBUeXBlLFxuICAgIFZpZXdDaGlsZCxcbiAgICBWaWV3Q2hpbGRyZW5cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0FjdGl2YXRlZFJvdXRlLCBQYXJhbXMsIFJvdXRlcn0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcblxuaW1wb3J0IHtUcmFuc2xhdGVTZXJ2aWNlfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7RmlsdGVyTWF0Y2hNb2RlLCBGaWx0ZXJNZXRhZGF0YSwgTGF6eUxvYWRFdmVudCwgU29ydE1ldGF9IGZyb20gJ3ByaW1lbmcvYXBpJztcbmltcG9ydCB7VGFibGV9IGZyb20gJ3ByaW1lbmcvdGFibGUnO1xuaW1wb3J0IHtCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIFJlcGxheVN1YmplY3QsIFN1YnNjcmlwdGlvbiwgaXNPYnNlcnZhYmxlLCBvZn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge21hcH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQge01lZGl1c0ZpbHRlck1hdGNoVHlwZSwgTWVkaXVzUXVlcnlQYXJhbSwgTWVkaXVzUXVlcnlQYXJhbUJ1aWxkZXIsIE1lZGl1c1F1ZXJ5UmVzdWx0fSBmcm9tICcuLi8uLi8uLi9hcGkvbW9kZWxzJztcbmltcG9ydCB7TWVkaXVzUmVzdFV0aWx9IGZyb20gJy4uLy4uLy4uL2FwaS91dGlscyc7XG5pbXBvcnQge0lUYWJsZURhdGFQcm92aWRlcn0gZnJvbSAnLi4vLi4vLi4vZGF0YS1wcm92aWRlcnMnO1xuaW1wb3J0IHtBY3Rpb25EZXNjcmlwdG9yLCBDb2x1bW5EZXNjcmlwdG9yLCBGaWx0ZXJEZXNjcmlwdG9yLCBGaWx0ZXJMb29rdXBEZXNjcmlwdG9yLCBUYWJsZURlc2NyaXB0b3IsIFRhYmxlRHluYW1pY0Rlc2NyaXB0b3J9IGZyb20gJy4uLy4uLy4uL2Rlc2NyaXB0b3JzJztcbmltcG9ydCB7QWN0aW9uUG9zaXRpb25FbnVtLCBGaWx0ZXJUeXBlRW51bSwgVGFibGVGaWx0ZXJEaXNwbGF5RW51bSwgVGFibGVQYWdpbmF0aW9uTW9kZUVudW0sIFRhYmxlU2l6ZUVudW19IGZyb20gJy4uLy4uLy4uL2Rlc2NyaXB0b3JzL3R5cGVzJztcbmltcG9ydCB7TW5nQ29tcG9uZW50RGlyZWN0aXZlLCBNbmdUZW1wbGF0ZURpcmVjdGl2ZX0gZnJvbSAnLi4vLi4vLi4vZGlyZWN0aXZlcyc7XG5pbXBvcnQge0lWaWV3Q29udGFpbmVyfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMnO1xuaW1wb3J0IHtNbmdBY3Rpb25FeGVjdXRvclNlcnZpY2UsIE1uZ1ZpZXdDb250YWluZXJDb21wb25lbnRTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQge1N0eWxlc1V0aWx9IGZyb20gJy4uLy4uLy4uL3N0eWxlcyc7XG5pbXBvcnQge05vdGlmaWNhdGlvblV0aWx9IGZyb20gJy4uLy4uLy4uL3V0aWxzJztcbmltcG9ydCB7QWN0aW9uSW5zdGFuY2V9IGZyb20gJy4uLy4uL2FjdGlvbi9tb2RlbHMnO1xuaW1wb3J0IHtNbmdUYWJsZUNlbGxDbGlja0V2ZW50LCBNbmdUYWJsZUxvYWRFdmVudH0gZnJvbSAnLi4vbW9kZWxzJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdtbmctdGFibGUnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi90YWJsZS5jb21wb25lbnQuaHRtbCcsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgTW5nVGFibGVDb21wb25lbnQ8VCwgUz4gaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgQWZ0ZXJDb250ZW50SW5pdCwgT25EZXN0cm95IHtcbiAgICBwdWJsaWMgcmVhZG9ubHkgZmlsdGVyRGlzcGxheVJvdzogVGFibGVGaWx0ZXJEaXNwbGF5RW51bSA9IFRhYmxlRmlsdGVyRGlzcGxheUVudW0uUm93O1xuICAgIHB1YmxpYyByZWFkb25seSBmaWx0ZXJEaXNwbGF5TWVudTogVGFibGVGaWx0ZXJEaXNwbGF5RW51bSA9IFRhYmxlRmlsdGVyRGlzcGxheUVudW0uTWVudTtcblxuICAgIC8vIG1ldGFkYXRhIGlucHV0XG4gICAgQElucHV0KCdkZXNjcmlwdG9yJykgcHVibGljIGluaXRpYWxEZXNjcmlwdG9yITogVGFibGVEZXNjcmlwdG9yPFQ+O1xuICAgIHB1YmxpYyBkZXNjcmlwdG9yPzogVGFibGVEZXNjcmlwdG9yPFQ+O1xuXG4gICAgLy8gZGF0YSBzb3VyY2UgaW5wdXRzXG4gICAgQElucHV0KCkgcHVibGljIGl0ZW1zPzogT2JzZXJ2YWJsZTxBcnJheTxUPj4gfCBBcnJheTxUPjtcbiAgICBASW5wdXQoKSBwdWJsaWMgcXVlcnlSZXN1bHQ/OiBPYnNlcnZhYmxlPE1lZGl1c1F1ZXJ5UmVzdWx0PFQ+PiB8IE1lZGl1c1F1ZXJ5UmVzdWx0PFQ+O1xuICAgIEBJbnB1dCgpIHB1YmxpYyBsb2FkaW5nPzogT2JzZXJ2YWJsZTxib29sZWFuPiB8IGJvb2xlYW47XG4gICAgQElucHV0KCkgcHVibGljIGRhdGFQcm92aWRlcj86IElUYWJsZURhdGFQcm92aWRlcjxULCBhbnk+O1xuICAgIEBJbnB1dCgpIHB1YmxpYyB1c2VRdWVyeVBhcmFtcyA9IGZhbHNlO1xuXG4gICAgLy8gZXh0cmEgZmVhdHVyZXMgaW5wdXRcbiAgICBASW5wdXQoKSBwdWJsaWMgc2VsZWN0aW9uTW9kZSA9ICdtdWx0aXBsZSc7XG4gICAgQElucHV0KCkgcHVibGljIHNlbGVjdGlvbkVuYWJsZWQgPSBmYWxzZTtcblxuICAgIC8vIGFjdGlvbnNcbiAgICBASW5wdXQoKSBwdWJsaWMgYWN0aW9uczogQXJyYXk8QWN0aW9uRGVzY3JpcHRvcjxUPj4gPSBbXTtcblxuICAgIC8vIHZpc3VhbFxuICAgIEBJbnB1dCgpIHB1YmxpYyBpc0NvbHVtbkNsaWNrYWJsZT86IGJvb2xlYW47XG5cbiAgICAvLyBjb21wb25lbnQgaW5wdXRzXG4gICAgQElucHV0KCd2aWV3Q29udGFpbmVyJykgcHVibGljIHZpZXdDb250YWluZXJJbml0PzogSVZpZXdDb250YWluZXI8VCwgUz47XG4gICAgQElucHV0KCkgcHVibGljIGNhcHRpb25Db21wb25lbnQ/OiBUeXBlPGFueT47XG4gICAgQElucHV0KCkgcHVibGljIGNvbHVtbkFjdGlvbkNvbXBvbmVudD86IFR5cGU8YW55PjtcbiAgICBASW5wdXQoKSBwdWJsaWMgY29sdW1uQWN0aW9uTWluV2lkdGg6IG51bWJlciB8IG51bGwgPSBudWxsO1xuXG4gICAgLy8gZXZlbnQgb3V0cHV0c1xuICAgIEBPdXRwdXQoJ3RhYmxlTG9hZCcpIHB1YmxpYyBsb2FkRXZlbnRFbWl0dGVyID0gbmV3IEV2ZW50RW1pdHRlcjxNbmdUYWJsZUxvYWRFdmVudD4oKTtcbiAgICBAT3V0cHV0KCdjZWxsQ2xpY2snKSBwdWJsaWMgY2VsbENsaWNrRXZlbnRFbWl0dGVyID0gbmV3IEV2ZW50RW1pdHRlcjxNbmdUYWJsZUNlbGxDbGlja0V2ZW50PFQ+PigpO1xuICAgIEBPdXRwdXQoJ3NlbGVjdGlvbkNoYW5nZScpIHB1YmxpYyBzZWxlY3Rpb25DaGFuZ2VFdmVudEVtaXR0ZXIgPSBuZXcgRXZlbnRFbWl0dGVyPEFycmF5PFQ+PigpO1xuICAgIEBPdXRwdXQoJ2NhcHRpb25Db21wb25lbnRJbnN0YW5jZScpIHB1YmxpYyBjYXB0aW9uQ21wSW5zdEV2ZW50RW1pdHRlciA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICAgIEBPdXRwdXQoJ2NvbHVtbkFjdGlvbkNvbXBvbmVudEluc3RhbmNlJykgcHVibGljIGNvbHVtbkFjdGlvbkNtcEluc3RFdmVudEVtaXR0ZXIgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICAgIC8vIGNvbnRlbnQgYW5kIHZpZXcgcXVlcmllc1xuICAgIEBDb250ZW50Q2hpbGRyZW4oTW5nVGVtcGxhdGVEaXJlY3RpdmUpIHB1YmxpYyB0ZW1wbGF0ZXMhOiBRdWVyeUxpc3Q8TW5nVGVtcGxhdGVEaXJlY3RpdmU+O1xuICAgIEBWaWV3Q2hpbGRyZW4oTW5nQ29tcG9uZW50RGlyZWN0aXZlKSBwdWJsaWMgY29tcG9uZW50cyE6IFF1ZXJ5TGlzdDxNbmdDb21wb25lbnREaXJlY3RpdmU8YW55Pj47XG4gICAgQFZpZXdDaGlsZChUYWJsZSkgcHVibGljIHByaW1lVGFibGUhOiBUYWJsZTtcblxuICAgIC8vIHRlbXBsYXRlc1xuICAgIHB1YmxpYyBjYXB0aW9uVGVtcGxhdGU/OiBUZW1wbGF0ZVJlZjxhbnk+O1xuICAgIHB1YmxpYyBjb2x1bW5BY3Rpb25UZW1wbGF0ZT86IFRlbXBsYXRlUmVmPGFueT47XG4gICAgcHVibGljIGZvb3RlclRlbXBsYXRlPzogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIC8vIGRhdGEgcHJvdmlkZXIgYW5kIGl0ZW1zXG4gICAgcHVibGljIHVzZURhdGFQcm92aWRlciA9IGZhbHNlO1xuICAgIHByaXZhdGUgdXNlUXVlcnlQYXJhbXNJbml0aWFsaXplZFN1YmVqY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KGZhbHNlKTtcbiAgICBwdWJsaWMgdXNlUXVlcnlQYXJhbXNJbml0aWFsaXplZCQgPSB0aGlzLnVzZVF1ZXJ5UGFyYW1zSW5pdGlhbGl6ZWRTdWJlamN0LmFzT2JzZXJ2YWJsZSgpO1xuICAgIHB1YmxpYyBxdWVyeVJlc3VsdCQ/OiBPYnNlcnZhYmxlPE1lZGl1c1F1ZXJ5UmVzdWx0PFQ+PjtcbiAgICBwdWJsaWMgbG9hZGluZyQ/OiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuICAgIHB1YmxpYyBkYXRhUHJvdmlkZXJJbmZpbml0ZVNjcm9sbEl0ZW1zOiBBcnJheTxUPiA9IFtdO1xuICAgIHByaXZhdGUgaXRlbXNTdWJqZWN0ID0gbmV3IFJlcGxheVN1YmplY3Q8QXJyYXk8VD4+KDEpO1xuXG4gICAgcHJpdmF0ZSBxdWVyeVJlc3VsdFN1YnNjcmlwdGlvbj86IFN1YnNjcmlwdGlvbjtcblxuICAgIC8vIHBhZ2luYXRpb24sIHNvcnQgYW5kIGZpbHRlcnNcbiAgICBwdWJsaWMgcm93c1BlclBhZ2VPcHRpb25zITogQXJyYXk8bnVtYmVyPjtcbiAgICBwdWJsaWMgcm93cyE6IG51bWJlcjtcbiAgICBwdWJsaWMgb2Zmc2V0ID0gMDtcbiAgICBwdWJsaWMgbXVsdGlTb3J0TWV0YTogU29ydE1ldGFbXSB8IG51bGwgPSBudWxsO1xuICAgIHB1YmxpYyBmaWx0ZXJNZXRhZGF0YToge1tzOiBzdHJpbmddOiBGaWx0ZXJNZXRhZGF0YX0gPSB7fTtcblxuICAgIC8vIGluZmluaXRlIHNjcm9sbFxuICAgIHB1YmxpYyBpbmZpbml0ZVNjcm9sbCA9IGZhbHNlO1xuICAgIHB1YmxpYyBzY3JvbGxIZWlnaHQ6ICdmbGV4JyB8IG51bGwgPSBudWxsO1xuXG4gICAgLy8gdmlzdWFsXG4gICAgcHVibGljIGNsYXNzTmFtZSE6IHN0cmluZztcbiAgICBwdWJsaWMgdGFibGVGdWxsSGVpZ2h0T2Zmc2V0OiBudW1iZXIgfCBudWxsID0gbnVsbDtcbiAgICBwdWJsaWMgcm93SGVpZ2h0OiBudW1iZXIgfCBudWxsID0gbnVsbDtcblxuICAgIC8vIHNlbGVjdGlvblxuICAgIHB1YmxpYyBzZWxlY3Rpb246IEFycmF5PFQ+ID0gW107XG5cbiAgICAvLyBkYXRhIHByb3ZpZGVyXG4gICAgcHJpdmF0ZSBkYXRhUHJvdmlkZXJTZXJ2aWNlOiBhbnkgPSBudWxsO1xuICAgIHByaXZhdGUgZGF0YVByb3ZpZGVyUXVlcnlSZXN1bHRTdWJqZWN0ID0gbmV3IFJlcGxheVN1YmplY3Q8TWVkaXVzUXVlcnlSZXN1bHQ8VD4+KDEpO1xuICAgIHByaXZhdGUgZGF0YVByb3ZpZGVyTG9hZGluZ1N1YmplY3QgPSBuZXcgUmVwbGF5U3ViamVjdDxib29sZWFuPigxKTtcbiAgICBwcml2YXRlIGRhdGFQcm92aWRlckxhdGVzdExhenlMb2FkRXZlbnQ/OiBMYXp5TG9hZEV2ZW50O1xuICAgIHByaXZhdGUgZGF0YVByb3ZpZGVyTGF0ZXN0TGF6eUxvYWRFdmVudFZlcnNpb24gPSAwO1xuICAgIHByaXZhdGUgZGF0YVByb3ZpZGVyTGF0ZXN0UXVlcnlQYXJhbT86IE1lZGl1c1F1ZXJ5UGFyYW07XG4gICAgcHJpdmF0ZSBkYXRhUHJvdmlkZXJMYXRlc3RRdWVyeVBhcmFtVmVyc2lvbiA9IDA7XG4gICAgcHJpdmF0ZSBkYXRhUHJvdmlkZXJTdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG5cbiAgICAvLyBmaWx0ZXIsIHNvcnRcbiAgICBwdWJsaWMgaGFzQ29sdW1uRmlsdGVycyA9IGZhbHNlO1xuICAgIHByaXZhdGUgaXNGaWx0ZXJDaGFuZ2VkID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBpc1NvcnRDaGFuZ2VkID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBmaWx0ZXJEZXNjcmlwdG9yczogQXJyYXk8RmlsdGVyRGVzY3JpcHRvcjxhbnk+PiA9IFtdO1xuXG4gICAgLy8gYWN0aW9uc1xuICAgIHB1YmxpYyBzaG93SW5saW5lQWN0aW9uc0NvbHVtbiA9IGZhbHNlO1xuICAgIHB1YmxpYyByb3dDbGlja0FjdGlvbnM6IEFjdGlvbkRlc2NyaXB0b3I8VD5bXSA9IFtdO1xuICAgIHB1YmxpYyByb3dJbmxpbmVBY3Rpb25zOiBBY3Rpb25EZXNjcmlwdG9yPFQ+W10gPSBbXTtcblxuICAgIC8vIG90aGVyXG4gICAgcHJpdmF0ZSB2aWV3Q29udGFpbmVyPzogSVZpZXdDb250YWluZXI8VCwgUz47XG4gICAgcHJpdmF0ZSBzdWJzY3JpcHRpb25zOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgICAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxuICAgICAgICBwcml2YXRlIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICAgICAgcHJpdmF0ZSB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgYWN0aW9uRXhlY3V0b3I6IE1uZ0FjdGlvbkV4ZWN1dG9yU2VydmljZSxcbiAgICAgICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSB2aWV3Q29udGFpbmVyU2VydmljZTogTW5nVmlld0NvbnRhaW5lckNvbXBvbmVudFNlcnZpY2U8VCwgUz4gfCBudWxsXG4gICAgKSB7fVxuXG4gICAgcHVibGljIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLnZpZXdDb250YWluZXIgPSB0aGlzLnZpZXdDb250YWluZXJJbml0ID8/IHRoaXMudmlld0NvbnRhaW5lclNlcnZpY2UgPz8gdW5kZWZpbmVkO1xuXG4gICAgICAgIGlmICghKHRoaXMuaW5pdGlhbERlc2NyaXB0b3IgaW5zdGFuY2VvZiBUYWJsZUR5bmFtaWNEZXNjcmlwdG9yKSkge1xuICAgICAgICAgICAgdGhpcy5kZXNjcmlwdG9yID0gdGhpcy5pbml0aWFsRGVzY3JpcHRvcjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIG1hcCByb3cgc2V0dGluZ3NcbiAgICAgICAgdGhpcy5maWx0ZXJEZXNjcmlwdG9ycyA9IHRoaXMuZGVzY3JpcHRvcj8uY29sdW1ucy5maWx0ZXIoYyA9PiB0eXBlb2YgYy5maWx0ZXJEZXNjcmlwdG9yICE9PSAndW5kZWZpbmVkJykubWFwKGMgPT4gYy5maWx0ZXJEZXNjcmlwdG9yISkgPz8gW107XG4gICAgICAgIHRoaXMuaGFzQ29sdW1uRmlsdGVycyA9IHRoaXMuZmlsdGVyRGVzY3JpcHRvcnMubGVuZ3RoID4gMDtcbiAgICAgICAgdGhpcy5yb3dzID0gdGhpcy5kZXNjcmlwdG9yPy5kZWZhdWx0TnVtUm93cyA/PyAyNTtcbiAgICAgICAgdGhpcy5yb3dzUGVyUGFnZU9wdGlvbnMgPSB0aGlzLmRlc2NyaXB0b3I/LnJvd3NQZXJQYWdlT3B0aW9ucyA/PyBbMjUsIDUwLCAxMDBdO1xuXG4gICAgICAgIC8vIHByb2Nlc3MgYWN0aW9uc1xuICAgICAgICBmb3IgKGNvbnN0IGFjdGlvbiBvZiB0aGlzLmFjdGlvbnMpIHtcbiAgICAgICAgICAgIHN3aXRjaCAoYWN0aW9uLnBvc2l0aW9uKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBBY3Rpb25Qb3NpdGlvbkVudW0uUm93Q2xpY2s6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucm93Q2xpY2tBY3Rpb25zLnB1c2goYWN0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBBY3Rpb25Qb3NpdGlvbkVudW0uUm93SW5saW5lOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJvd0lubGluZUFjdGlvbnMucHVzaChhY3Rpb24pO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNob3dJbmxpbmVBY3Rpb25zQ29sdW1uID0gdHlwZW9mIHRoaXMuY29sdW1uQWN0aW9uQ29tcG9uZW50ICE9PSAndW5kZWZpbmVkJyB8fCB0aGlzLnJvd0lubGluZUFjdGlvbnMubGVuZ3RoID4gMDtcblxuICAgICAgICAvLyBkZWZpbmUgYWxsIHN0eWxlc1xuICAgICAgICB0aGlzLmNsYXNzTmFtZSA9IHRoaXMuZGVzY3JpcHRvcj8uY2xhc3NOYW1lID8/ICcnO1xuICAgICAgICB0aGlzLnRhYmxlRnVsbEhlaWdodE9mZnNldCA9IHRoaXMuZGVzY3JpcHRvcj8udGFibGVGdWxsSGVpZ2h0T2Zmc2V0ID8/IG51bGw7XG4gICAgICAgIHRoaXMucm93SGVpZ2h0ID0gdGhpcy5kZXNjcmlwdG9yPy5yb3dIZWlnaHQgPz8gbnVsbDtcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmlzQ29sdW1uQ2xpY2thYmxlID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgLy8gZGVmaW5lIGlmIGNlbGwgY2xpY2sgaXMgYmVpbmcgb2JzZXJ2ZWQgdmlhIG91dHB1dFxuICAgICAgICAgICAgdGhpcy5pc0NvbHVtbkNsaWNrYWJsZSA9IHRoaXMucm93Q2xpY2tBY3Rpb25zLmxlbmd0aCA+IDAgfHwgdGhpcy5jZWxsQ2xpY2tFdmVudEVtaXR0ZXIub2JzZXJ2ZWQ7XG4gICAgICAgIH1cbiAgICAgICAgc3dpdGNoICh0aGlzLmRlc2NyaXB0b3I/LnNpemUpIHtcbiAgICAgICAgICAgIGNhc2UgVGFibGVTaXplRW51bS5TbWFsbDpcbiAgICAgICAgICAgICAgICB0aGlzLmNsYXNzTmFtZSArPSAnIHAtZGF0YXRhYmxlLXNtJztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgVGFibGVTaXplRW51bS5MYXJnZTpcbiAgICAgICAgICAgICAgICB0aGlzLmNsYXNzTmFtZSArPSAnIHAtZGF0YXRhYmxlLWxnJztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5kZXNjcmlwdG9yPy5oYXNHcmlkbGluZXMpIHtcbiAgICAgICAgICAgIHRoaXMuY2xhc3NOYW1lICs9ICcgcC1kYXRhdGFibGUtZ3JpZGxpbmVzJztcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5kZXNjcmlwdG9yICYmICF0aGlzLmNvbHVtbkFjdGlvbk1pbldpZHRoKSB7XG4gICAgICAgICAgICB0aGlzLmNvbHVtbkFjdGlvbk1pbldpZHRoID0gU3R5bGVzVXRpbC5jYWxjdWxhdGVUYWJsZUNvbHVtbkFjdGlvbldpZHRoKFxuICAgICAgICAgICAgICAgIHRoaXMuZGVzY3JpcHRvciBhcyBUYWJsZURlc2NyaXB0b3I8dW5rbm93bj4sXG4gICAgICAgICAgICAgICAgdGhpcy5yb3dJbmxpbmVBY3Rpb25zIGFzIEFycmF5PEFjdGlvbkRlc2NyaXB0b3I8dW5rbm93bj4+XG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gY2hlY2sgaWYgaW5maW5pdGUgc2Nyb2xsXG4gICAgICAgIGlmICh0aGlzLmRlc2NyaXB0b3I/LnBhZ2luYXRpb25Nb2RlID09PSBUYWJsZVBhZ2luYXRpb25Nb2RlRW51bS5JbmZpbml0ZVNjcm9sbCkge1xuICAgICAgICAgICAgdGhpcy5pbmZpbml0ZVNjcm9sbCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLnNjcm9sbEhlaWdodCA9ICdmbGV4JztcbiAgICAgICAgICAgIHRoaXMudGFibGVGdWxsSGVpZ2h0T2Zmc2V0ID0gdGhpcy5kZXNjcmlwdG9yLnRhYmxlRnVsbEhlaWdodE9mZnNldCA/PyAzMTU7XG4gICAgICAgICAgICB0aGlzLnJvd0hlaWdodCA9IHRoaXMuZGVzY3JpcHRvci5yb3dIZWlnaHQgPz8gNDU7XG4gICAgICAgICAgICB0aGlzLnVzZVF1ZXJ5UGFyYW1zID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBjaGVjayBpZiBkYXRhIHByb3ZpZGVyIGlzIHN1cHBsaWVkLCBpZiBpcywgdXNlIGl0IHByaW1hcmlseVxuICAgICAgICBpZiAodGhpcy5kYXRhUHJvdmlkZXIpIHtcbiAgICAgICAgICAgIC8vIG1hcCBzdWJqZWN0cyB0byBvYnNlcnZhYmxlcyBhbmQgaW5pdGlhdGUgZGF0YVxuICAgICAgICAgICAgdGhpcy51c2VEYXRhUHJvdmlkZXIgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5xdWVyeVJlc3VsdCQgPSB0aGlzLmRhdGFQcm92aWRlclF1ZXJ5UmVzdWx0U3ViamVjdC5hc09ic2VydmFibGUoKTtcbiAgICAgICAgICAgIHRoaXMubG9hZGluZyQgPSB0aGlzLmRhdGFQcm92aWRlckxvYWRpbmdTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuICAgICAgICAgICAgY29uc3QgZW1wdHlRdWVyeVJlc3VsdCA9IG5ldyBNZWRpdXNRdWVyeVJlc3VsdDxUPigpO1xuICAgICAgICAgICAgZW1wdHlRdWVyeVJlc3VsdC5wYWdlRGF0YSA9IFtdO1xuICAgICAgICAgICAgZW1wdHlRdWVyeVJlc3VsdC5hbGxEYXRhQ291bnQgPSAwO1xuICAgICAgICAgICAgdGhpcy5kYXRhUHJvdmlkZXJMb2FkaW5nU3ViamVjdC5uZXh0KGZhbHNlKTtcbiAgICAgICAgICAgIHRoaXMuZGF0YVByb3ZpZGVyUXVlcnlSZXN1bHRTdWJqZWN0Lm5leHQoZW1wdHlRdWVyeVJlc3VsdCk7XG5cbiAgICAgICAgICAgIC8vIGluamVjdCBzZXJ2aWNlXG4gICAgICAgICAgICBpZiAodGhpcy5kYXRhUHJvdmlkZXIuc2VydmljZVR5cGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGFQcm92aWRlclNlcnZpY2UgPSB0aGlzLmluamVjdG9yLmdldDxhbnk+KHRoaXMuZGF0YVByb3ZpZGVyLnNlcnZpY2VUeXBlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgcmVsb2FkU3Vic2NyaXB0aW9uID0gdGhpcy5kYXRhUHJvdmlkZXIuZ2V0QWxsUmVsb2FkJC5zdWJzY3JpYmUoe1xuICAgICAgICAgICAgICAgIG5leHQ6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWxvYWQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2gocmVsb2FkU3Vic2NyaXB0aW9uKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIGlmIHF1ZXJ5IHJlc3VsdCBpcyBwcm92aWRlZCwgdXNlIGl0IGFzIHNlY29uZGFyeSBzb3VyY2Ugb3IgZWxzZSB0cnkgdG8gdXNlIGl0ZW1zXG4gICAgICAgICAgICBpZiAodGhpcy5xdWVyeVJlc3VsdCkge1xuICAgICAgICAgICAgICAgIHRoaXMucXVlcnlSZXN1bHQkID0gdGhpcy5xdWVyeVJlc3VsdCBpbnN0YW5jZW9mIE9ic2VydmFibGUgPyB0aGlzLnF1ZXJ5UmVzdWx0IDogb2YodGhpcy5xdWVyeVJlc3VsdCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMucXVlcnlSZXN1bHQkID0gKGlzT2JzZXJ2YWJsZSh0aGlzLml0ZW1zKSA/IHRoaXMuaXRlbXMgOiB0aGlzLml0ZW1zU3ViamVjdC5hc09ic2VydmFibGUoKSkucGlwZShcbiAgICAgICAgICAgICAgICAgICAgLy8gZGlzdGluY3RVbnRpbENoYW5nZWQoKHYxLCB2MikgPT4gdjEubGVuZ3RoID09PSB2Mi5sZW5ndGggJiZcbiAgICAgICAgICAgICAgICAgICAgLy8gICAgIHYxLmV2ZXJ5KCh2MWksIGlkeCkgPT4gdjFpW3RoaXMuZGVzY3JpcHRvci5kYXRhS2V5UHJvcGVydHldID09PSB2MltpZHhdW3RoaXMuZGVzY3JpcHRvci5kYXRhS2V5UHJvcGVydHldKSksXG4gICAgICAgICAgICAgICAgICAgIG1hcChpdGVtcyA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBxdWVyeVJlc3VsdCA9IG5ldyBNZWRpdXNRdWVyeVJlc3VsdDxUPigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcXVlcnlSZXN1bHQucGFnZURhdGEgPSBpdGVtcztcbiAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5UmVzdWx0LmFsbERhdGFDb3VudCA9IGl0ZW1zLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBxdWVyeVJlc3VsdDtcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGlmICghaXNPYnNlcnZhYmxlKHRoaXMuaXRlbXMpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXRlbXNTdWJqZWN0Lm5leHQodGhpcy5pdGVtcyA/PyBbXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmxvYWRpbmcgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nJCA9IHRoaXMubG9hZGluZyBpbnN0YW5jZW9mIE9ic2VydmFibGUgPyB0aGlzLmxvYWRpbmcgOiBvZih0aGlzLmxvYWRpbmcpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaW5pdGlhbFF1ZXJ5UGFyYW1NYXAgPSB0aGlzLnJvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1NYXA7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoaXMudXNlUXVlcnlQYXJhbXMgJiZcbiAgICAgICAgICAgICgoIWluaXRpYWxRdWVyeVBhcmFtTWFwLmhhcygnc29ydCcpICYmIHRoaXMuZGVzY3JpcHRvcj8uaGFzRGVmYXVsdFNvcnQpIHx8XG4gICAgICAgICAgICAgICAgKCFpbml0aWFsUXVlcnlQYXJhbU1hcC5oYXMoJ2ZpbHRlcicpICYmIHRoaXMuZmlsdGVyRGVzY3JpcHRvcnMuc29tZShmZCA9PiBmZC5oYXNEZWZhdWx0VmFsdWUpKSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgICAvLyBkZWZhdWx0IHNvcnQvZmlsdGVycyBhcmUgYXBwbGllZCwgbm8gYWRkaXRpb25hbCBmaWx0ZXJpbmcvc29ydGluZyBpcyBzcGVjaWZpZWQgaW4gcXVlcnkgcGFyYW1cbiAgICAgICAgICAgIC8vIHJlZGlyZWN0IG11c3QgYmUgZG9uZSBhdCBmaXJzdCBzdGVwXG4gICAgICAgICAgICBjb25zdCBtZWRpdXNRdWVyeVBhcmFtID0gTWVkaXVzUmVzdFV0aWwuZnJvbUFuZ3VsYXJRdWVyeVBhcmFtc1RvTWVkaXVzUXVlcnlQYXJhbXModGhpcy5yb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtcywgdGhpcy5maWx0ZXJEZXNjcmlwdG9ycywgdGhpcy5yb3dzUGVyUGFnZU9wdGlvbnNbMF0pO1xuXG4gICAgICAgICAgICBjb25zdCBldmVudDogTGF6eUxvYWRFdmVudCA9IHt9O1xuICAgICAgICAgICAgZXZlbnQubXVsdGlTb3J0TWV0YSA9IHRoaXMuY3JlYXRlU29ydE1ldGEobWVkaXVzUXVlcnlQYXJhbSk7XG4gICAgICAgICAgICBldmVudC5maWx0ZXJzID0gdGhpcy5jcmVhdGVGaWx0ZXJNZXRhKG1lZGl1c1F1ZXJ5UGFyYW0pO1xuXG4gICAgICAgICAgICAvLyBmaXJzdCBuYXZpZ2F0ZSB0byBjb3JyZWN0IHVybCB3aXRoIGRlZmF1bHQgZmlsdGVycy9zb3J0c1xuICAgICAgICAgICAgdGhpcy5yb3V0ZXJcbiAgICAgICAgICAgICAgICAubmF2aWdhdGUoW10sIHtcbiAgICAgICAgICAgICAgICAgICAgcmVsYXRpdmVUbzogdGhpcy5yb3V0ZSxcbiAgICAgICAgICAgICAgICAgICAgcmVwbGFjZVVybDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgcXVlcnlQYXJhbXM6IE1lZGl1c1Jlc3RVdGlsLmZyb21QcmltZUxhenlMb2FkRXZlbnRUb0FuZ3VsYXJRdWVyeVBhcmFtcyhldmVudCwgdGhpcy5yb3dzUGVyUGFnZU9wdGlvbnNbMF0pXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW5pdGlhbGl6ZURhdGFMb2FkaW5nVHJpZ2dlcnMoKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaW5pdGlhbGl6ZURhdGFMb2FkaW5nVHJpZ2dlcnMoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucXVlcnlSZXN1bHRTdWJzY3JpcHRpb24gPSB0aGlzLnF1ZXJ5UmVzdWx0JC5zdWJzY3JpYmUoZSA9PiAodGhpcy5xdWVyeVJlc3VsdCA9IGUpKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbmdBZnRlckNvbnRlbnRJbml0KCkge1xuICAgICAgICB0aGlzLnRlbXBsYXRlcy5mb3JFYWNoKHRlbXBsYXRlID0+IHtcbiAgICAgICAgICAgIHN3aXRjaCAodGVtcGxhdGUuZ2V0VHlwZSgpKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnY2FwdGlvbic6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2FwdGlvblRlbXBsYXRlID0gdGVtcGxhdGUudGVtcGxhdGU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ2NvbHVtbkFjdGlvbic6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29sdW1uQWN0aW9uVGVtcGxhdGUgPSB0ZW1wbGF0ZS50ZW1wbGF0ZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLnNob3dJbmxpbmVBY3Rpb25zQ29sdW1uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dJbmxpbmVBY3Rpb25zQ29sdW1uID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdmb290ZXInOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvb3RlclRlbXBsYXRlID0gdGVtcGxhdGUudGVtcGxhdGU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgICAgIGlmIChjaGFuZ2VzWydpdGVtcyddICYmICFjaGFuZ2VzWydpdGVtcyddLmZpcnN0Q2hhbmdlICYmIEFycmF5LmlzQXJyYXkoY2hhbmdlc1snaXRlbXMnXS5jdXJyZW50VmFsdWUpKSB7XG4gICAgICAgICAgICB0aGlzLml0ZW1zU3ViamVjdC5uZXh0KGNoYW5nZXNbJ2l0ZW1zJ10uY3VycmVudFZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy5kYXRhUHJvdmlkZXJTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMucXVlcnlSZXN1bHRTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKHMgPT4gcy51bnN1YnNjcmliZSgpKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVsb2FkKGVtaXRFdmVudCA9IGZhbHNlLCByZXNldFBhcmFtcyA9IGZhbHNlKSB7XG4gICAgICAgIGNvbnN0IHF1ZXJ5UGFyYW1zQnVpbGRlciA9IHJlc2V0UGFyYW1zXG4gICAgICAgICAgICA/IE1lZGl1c1F1ZXJ5UGFyYW1CdWlsZGVyLmNyZWF0ZSh0aGlzLnJvd3NQZXJQYWdlT3B0aW9uc1swXSwgMClcbiAgICAgICAgICAgIDogTWVkaXVzUXVlcnlQYXJhbUJ1aWxkZXIuY3JlYXRlRnJvbUV4aXN0aW5nKHRoaXMuZGF0YVByb3ZpZGVyTGF0ZXN0UXVlcnlQYXJhbSA/PyBuZXcgTWVkaXVzUXVlcnlQYXJhbSgpKVxuICAgICAgICAgICAgICAgICAgLndpdGhJdGVtc1BlclBhZ2UodGhpcy5yb3dzKVxuICAgICAgICAgICAgICAgICAgLndpdGhJdGVtc09mZnNldCh0aGlzLm9mZnNldCk7XG5cbiAgICAgICAgdGhpcy5sb2FkVGFibGVXaXRoRGF0YVByb3ZpZGVyKHF1ZXJ5UGFyYW1zQnVpbGRlci5idWlsZCgpLCBlbWl0RXZlbnQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvblRhYmxlTGF6eUxvYWQoZXZlbnQ6IExhenlMb2FkRXZlbnQpIHtcbiAgICAgICAgdGhpcy5kYXRhUHJvdmlkZXJMYXRlc3RMYXp5TG9hZEV2ZW50ID0gZXZlbnQ7XG4gICAgICAgIHRoaXMuZGF0YVByb3ZpZGVyTGF0ZXN0TGF6eUxvYWRFdmVudFZlcnNpb24rKztcblxuICAgICAgICBpZiAodGhpcy51c2VRdWVyeVBhcmFtcykge1xuICAgICAgICAgICAgaWYgKCFldmVudC5tdWx0aVNvcnRNZXRhIHx8IGV2ZW50Lm11bHRpU29ydE1ldGEubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgLy8gYWRkIGRlZmF1bHQgc29ydCBtZXRhIHRvIGV2ZW50IGlmIG5vdCBtdWx0aXNvcnQgbWV0YSBpcyBwcmVzZW50XG4gICAgICAgICAgICAgICAgZXZlbnQubXVsdGlTb3J0TWV0YSA9IHRoaXMuY3JlYXRlU29ydE1ldGEoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghZXZlbnQuZmlsdGVycykge1xuICAgICAgICAgICAgICAgIGV2ZW50LmZpbHRlcnMgPSB0aGlzLmNyZWF0ZUZpbHRlck1ldGEoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW10sIHtcbiAgICAgICAgICAgICAgICByZWxhdGl2ZVRvOiB0aGlzLnJvdXRlLFxuICAgICAgICAgICAgICAgIHJlcGxhY2VVcmw6IHRydWUsXG4gICAgICAgICAgICAgICAgcXVlcnlQYXJhbXM6IE1lZGl1c1Jlc3RVdGlsLmZyb21QcmltZUxhenlMb2FkRXZlbnRUb0FuZ3VsYXJRdWVyeVBhcmFtcyhldmVudCwgdGhpcy5yb3dzUGVyUGFnZU9wdGlvbnNbMF0pXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IG1lZGl1c1F1ZXJ5UGFyYW1zID0gZXZlbnQgPyBNZWRpdXNSZXN0VXRpbC5mcm9tUHJpbWVMYXp5TG9hZEV2ZW50VG9NZWRpdXNRdWVyeVBhcmFtcyhldmVudCkgOiBuZXcgTWVkaXVzUXVlcnlQYXJhbSgpO1xuICAgICAgICAgICAgdGhpcy5sb2FkVGFibGVXaXRoRGF0YVByb3ZpZGVyKG1lZGl1c1F1ZXJ5UGFyYW1zKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICBwdWJsaWMgb25UYWJsZVNvcnQoZXZlbnQ6IGFueSkge1xuICAgICAgICB0aGlzLmlzU29ydENoYW5nZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICBwdWJsaWMgb25UYWJsZUZpbHRlcihldmVudDogYW55KSB7XG4gICAgICAgIHRoaXMuaXNGaWx0ZXJDaGFuZ2VkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25DZWxsQ2xpY2soZXZlbnQ6IEV2ZW50LCBjb2w6IENvbHVtbkRlc2NyaXB0b3I8YW55LCBUPiwgaXRlbTogVCwgaWR4OiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgbW5nRXZlbnQgPSBuZXcgTW5nVGFibGVDZWxsQ2xpY2tFdmVudDxUPihjb2wsIGl0ZW0sIGlkeCk7XG4gICAgICAgIHRoaXMuY2VsbENsaWNrRXZlbnRFbWl0dGVyLm5leHQobW5nRXZlbnQpO1xuICAgICAgICBpZiAodGhpcy5yb3dDbGlja0FjdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGFjdGlvbiBvZiB0aGlzLnJvd0NsaWNrQWN0aW9ucykge1xuICAgICAgICAgICAgICAgIHRoaXMuYWN0aW9uRXhlY3V0b3IudHJpZ2dlclJvd0NsaWNrQWN0aW9uKGFjdGlvbiwgbW5nRXZlbnQsIHRoaXMucm91dGUsIHRoaXMuZGVzY3JpcHRvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgb25TZWxlY3Rpb25DaGFuZ2UoZXZlbnQ6IEFycmF5PFQ+KSB7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uQ2hhbmdlRXZlbnRFbWl0dGVyLmVtaXQoZXZlbnQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbkNhcHRpb25DbXBJbnN0PEM+KGluc3RhbmNlOiBDKSB7XG4gICAgICAgIHRoaXMuY2FwdGlvbkNtcEluc3RFdmVudEVtaXR0ZXIubmV4dChpbnN0YW5jZSk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uQ29sdW1uQWN0aW9uQ21wSW5zdDxDPihpbnN0YW5jZTogQykge1xuICAgICAgICB0aGlzLmNvbHVtbkFjdGlvbkNtcEluc3RFdmVudEVtaXR0ZXIubmV4dChpbnN0YW5jZSk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uQWN0aW9uRmluaXNoKHJ1blJlc3VsdDogQWN0aW9uSW5zdGFuY2U8VCwgdW5rbm93bj4pIHtcbiAgICAgICAgaWYgKCFydW5SZXN1bHQuZXJyb3IpIHtcbiAgICAgICAgICAgIHRoaXMucmVsb2FkKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGxvYWRUYWJsZVdpdGhEYXRhUHJvdmlkZXIocXVlcnlQYXJhbTogTWVkaXVzUXVlcnlQYXJhbSB8IG51bGwgPSBudWxsLCBlbWl0RXZlbnQgPSB0cnVlKSB7XG4gICAgICAgIGlmICghdGhpcy51c2VEYXRhUHJvdmlkZXIpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZGF0YVByb3ZpZGVyU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgICAgICB0aGlzLmRhdGFQcm92aWRlckxvYWRpbmdTdWJqZWN0Lm5leHQodHJ1ZSk7XG5cbiAgICAgICAgaWYgKCFxdWVyeVBhcmFtKSB7XG4gICAgICAgICAgICBxdWVyeVBhcmFtID0gTWVkaXVzUXVlcnlQYXJhbUJ1aWxkZXIuY3JlYXRlKHRoaXMucm93c1BlclBhZ2VPcHRpb25zWzBdKS5idWlsZCgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZGF0YVByb3ZpZGVyTGF0ZXN0UXVlcnlQYXJhbSA9IHF1ZXJ5UGFyYW07XG4gICAgICAgIHRoaXMuZGF0YVByb3ZpZGVyTGF0ZXN0UXVlcnlQYXJhbVZlcnNpb24rKztcblxuICAgICAgICBNZWRpdXNSZXN0VXRpbC5tb2RpZnlGaWx0ZXJQcm9wZXJ0aWVzKHF1ZXJ5UGFyYW0sIHRoaXMuZmlsdGVyRGVzY3JpcHRvcnMpO1xuXG4gICAgICAgIHRoaXMuZGF0YVByb3ZpZGVyU3Vic2NyaXB0aW9uID0gdGhpcy5kYXRhUHJvdmlkZXI/LmdldEFsbChxdWVyeVBhcmFtLCB0aGlzLmRhdGFQcm92aWRlclNlcnZpY2UpLnN1YnNjcmliZSh7XG4gICAgICAgICAgICBuZXh0OiByZXMgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmluaXRpYWxEZXNjcmlwdG9yIGluc3RhbmNlb2YgVGFibGVEeW5hbWljRGVzY3JpcHRvcikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRlc2NyaXB0b3IgPSB0aGlzLmluaXRpYWxEZXNjcmlwdG9yLnRvVGFibGVEZXNjcmlwdG9yRnJvbURhdGEocmVzKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5maWx0ZXJEZXNjcmlwdG9ycyA9IHRoaXMuZGVzY3JpcHRvci5jb2x1bW5zLmZpbHRlcihjID0+IHR5cGVvZiBjLmZpbHRlckRlc2NyaXB0b3IgIT09ICd1bmRlZmluZWQnKS5tYXAoYyA9PiBjLmZpbHRlckRlc2NyaXB0b3IhKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5oYXNDb2x1bW5GaWx0ZXJzID0gdGhpcy5maWx0ZXJEZXNjcmlwdG9ycy5sZW5ndGggPiAwO1xuICAgICAgICAgICAgICAgICAgICAvLyB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAvLyAgICAgdGhpcy5kZXNjcmlwdG9yID0gdGhpcy5pbml0aWFsRGVzY3JpcHRvci5vbkRhdGFSZWNlaXZlZFR5cGVCdWlsZGluZyhyZXMpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmluZmluaXRlU2Nyb2xsKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzRmlsdGVyQ2hhbmdlZCB8fCB0aGlzLmlzU29ydENoYW5nZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YVByb3ZpZGVySW5maW5pdGVTY3JvbGxJdGVtcyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YVByb3ZpZGVySW5maW5pdGVTY3JvbGxJdGVtcy5zcGxpY2UocXVlcnlQYXJhbSEuaXRlbXNPZmZzZXQgPz8gMCwgcXVlcnlQYXJhbSEuaXRlbXNQZXJQYWdlID8/IHRoaXMucm93cywgLi4uKHJlcy5wYWdlRGF0YSA/PyBbXSkpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGFQcm92aWRlckluZmluaXRlU2Nyb2xsSXRlbXMgPSBbLi4udGhpcy5kYXRhUHJvdmlkZXJJbmZpbml0ZVNjcm9sbEl0ZW1zXTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGFQcm92aWRlclF1ZXJ5UmVzdWx0U3ViamVjdC5uZXh0KHJlcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuaXNGaWx0ZXJDaGFuZ2VkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5pc1NvcnRDaGFuZ2VkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhUHJvdmlkZXJMb2FkaW5nU3ViamVjdC5uZXh0KGZhbHNlKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlcnJvcjogZXJyID0+IHtcbiAgICAgICAgICAgICAgICAvLyBUT0RPOiBjaGVjayB3aGF0IGhhcHBlbnMgb24gZXJyb3Igd2l0aCBubyBtb2RlbCBpbmlzaWRlIGRlc2NyaXB0b3JcbiAgICAgICAgICAgICAgICBOb3RpZmljYXRpb25VdGlsLnRhYmxlTm90aWZpY2F0aW9uRXJyb3IodGhpcy50cmFuc2xhdGUsIHRoaXMuZGVzY3JpcHRvciEsIGVyciwgdGhpcy52aWV3Q29udGFpbmVyKTtcbiAgICAgICAgICAgICAgICBjb25zdCBlbXB0eVF1ZXJ5UmVzdWx0ID0gbmV3IE1lZGl1c1F1ZXJ5UmVzdWx0PFQ+KCk7XG4gICAgICAgICAgICAgICAgZW1wdHlRdWVyeVJlc3VsdC5wYWdlRGF0YSA9IFtdO1xuICAgICAgICAgICAgICAgIGVtcHR5UXVlcnlSZXN1bHQuYWxsRGF0YUNvdW50ID0gMDtcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGFQcm92aWRlclF1ZXJ5UmVzdWx0U3ViamVjdC5uZXh0KGVtcHR5UXVlcnlSZXN1bHQpO1xuICAgICAgICAgICAgICAgIHRoaXMuZGF0YVByb3ZpZGVyTG9hZGluZ1N1YmplY3QubmV4dChmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChlbWl0RXZlbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IG1uZ0V2ZW50ID0gbmV3IE1uZ1RhYmxlTG9hZEV2ZW50KCk7XG4gICAgICAgICAgICBtbmdFdmVudC5vcmlnaW5hbEV2ZW50ID0gdGhpcy5kYXRhUHJvdmlkZXJMYXRlc3RMYXp5TG9hZEV2ZW50ID8/IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIG1uZ0V2ZW50LnF1ZXJ5UGFyYW0gPSBxdWVyeVBhcmFtO1xuICAgICAgICAgICAgdGhpcy5sb2FkRXZlbnRFbWl0dGVyLm5leHQobW5nRXZlbnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBsb2FkVGFibGVGcm9tUm91dGVVcGRhdGUocGFyYW1zOiBQYXJhbXMpIHtcbiAgICAgICAgY29uc3QgbWVkaXVzUXVlcnlQYXJhbSA9IE1lZGl1c1Jlc3RVdGlsLmZyb21Bbmd1bGFyUXVlcnlQYXJhbXNUb01lZGl1c1F1ZXJ5UGFyYW1zKHBhcmFtcywgdGhpcy5maWx0ZXJEZXNjcmlwdG9ycywgdGhpcy5yb3dzUGVyUGFnZU9wdGlvbnNbMF0pO1xuICAgICAgICBpZiAodGhpcy5kYXRhUHJvdmlkZXJMYXRlc3RMYXp5TG9hZEV2ZW50VmVyc2lvbiA8IHRoaXMuZGF0YVByb3ZpZGVyTGF0ZXN0UXVlcnlQYXJhbVZlcnNpb24gKyAxKSB7XG4gICAgICAgICAgICAvLyB1cGRhdGUgb25seSBpZiBuZXcgdmVyc2lvbiBmcm9tIHF1ZXJ5IHBhcmFtcyB3aWxsIGJlIGhpZ2hlclxuICAgICAgICAgICAgdGhpcy51cGRhdGVQcmltZVNvcnRBbmRGaWx0ZXIobWVkaXVzUXVlcnlQYXJhbSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy51c2VRdWVyeVBhcmFtc0luaXRpYWxpemVkU3ViZWpjdC5uZXh0KHRydWUpO1xuICAgICAgICB0aGlzLmxvYWRUYWJsZVdpdGhEYXRhUHJvdmlkZXIobWVkaXVzUXVlcnlQYXJhbSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVQcmltZVNvcnRBbmRGaWx0ZXIobWVkaXVzUXVlcnlQYXJhbTogTWVkaXVzUXVlcnlQYXJhbSkge1xuICAgICAgICB0aGlzLm11bHRpU29ydE1ldGEgPSB0aGlzLmNyZWF0ZVNvcnRNZXRhKG1lZGl1c1F1ZXJ5UGFyYW0pO1xuICAgICAgICB0aGlzLmZpbHRlck1ldGFkYXRhID0gdGhpcy5jcmVhdGVGaWx0ZXJNZXRhKG1lZGl1c1F1ZXJ5UGFyYW0pO1xuICAgICAgICB0aGlzLnJvd3MgPSBtZWRpdXNRdWVyeVBhcmFtPy5pdGVtc1BlclBhZ2UgPz8gdGhpcy5yb3dzUGVyUGFnZU9wdGlvbnNbMF07XG4gICAgICAgIHRoaXMub2Zmc2V0ID0gbWVkaXVzUXVlcnlQYXJhbT8uaXRlbXNPZmZzZXQgPz8gMDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNyZWF0ZUZpbHRlck1ldGEobWVkaXVzUXVlcnlQYXJhbT86IE1lZGl1c1F1ZXJ5UGFyYW0pIHtcbiAgICAgICAgbGV0IHBhcmFtczogTWVkaXVzUXVlcnlQYXJhbTtcbiAgICAgICAgaWYgKCFtZWRpdXNRdWVyeVBhcmFtKSB7XG4gICAgICAgICAgICBwYXJhbXMgPSBuZXcgTWVkaXVzUXVlcnlQYXJhbSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcGFyYW1zID0gbWVkaXVzUXVlcnlQYXJhbTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHByaW1lRmlsdGVyTWV0YToge1tzOiBzdHJpbmddOiBGaWx0ZXJNZXRhZGF0YX0gPSB7fTtcbiAgICAgICAgLy8gaWYgYW55IGZpbHRlciBpcyBwcmVzZW50LCBubyBkZWZhdWx0IGZpbHRlcnMgc2hvdWxkIGJlIGFwcGxpZWQhXG4gICAgICAgIGNvbnN0IGFwcGx5RGVmYXVsdEZpbHRlcnMgPSAocGFyYW1zLmZpbHRlclBhcmFtcz8ubGVuZ3RoID8/IDApID09PSAwO1xuXG4gICAgICAgIHRoaXMuZmlsdGVyRGVzY3JpcHRvcnMuZm9yRWFjaChmID0+IHtcbiAgICAgICAgICAgIGxldCBtYXRjaE1vZGU7XG4gICAgICAgICAgICBpZiAoZi5kZWZhdWx0RmlsdGVyTWF0Y2hNb2RlKSB7XG4gICAgICAgICAgICAgICAgbWF0Y2hNb2RlID0gZi5kZWZhdWx0RmlsdGVyTWF0Y2hNb2RlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKGYuZmlsdGVyVHlwZSkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIEZpbHRlclR5cGVFbnVtLlN0cmluZzpcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoTW9kZSA9IEZpbHRlck1hdGNoTW9kZS5DT05UQUlOUztcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIEZpbHRlclR5cGVFbnVtLkRhdGU6XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRjaE1vZGUgPSBGaWx0ZXJNYXRjaE1vZGUuREFURV9JUztcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIEZpbHRlclR5cGVFbnVtLkxvb2t1cDpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBGaWx0ZXJUeXBlRW51bS5Mb29rdXBFbnVtOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBsb29rdXBGaWx0ZXIgPSBmIGFzIEZpbHRlckxvb2t1cERlc2NyaXB0b3I8YW55PjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsb29rdXBGaWx0ZXIubXVsdGlzZWxlY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaE1vZGUgPSBGaWx0ZXJNYXRjaE1vZGUuSU47XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoTW9kZSA9IEZpbHRlck1hdGNoTW9kZS5FUVVBTFM7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hNb2RlID0gRmlsdGVyTWF0Y2hNb2RlLkVRVUFMUztcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IHZhbHVlID0gbnVsbDtcbiAgICAgICAgICAgIGlmIChhcHBseURlZmF1bHRGaWx0ZXJzKSB7XG4gICAgICAgICAgICAgICAgaWYgKGYuZGVmYXVsdFZhbHVlVG8gJiYgZi5kZWZhdWx0VmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBbZi5kZWZhdWx0VmFsdWUsIGYuZGVmYXVsdFZhbHVlVG9dO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZi5kZWZhdWx0VmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBmLmRlZmF1bHRWYWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHByaW1lRmlsdGVyTWV0YVtmLnByb3BlcnR5XSA9IHtcbiAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgICAgICAgbWF0Y2hNb2RlOiBtYXRjaE1vZGVcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHBhcmFtcy5maWx0ZXJQYXJhbXM/LmZvckVhY2goZiA9PiB7XG4gICAgICAgICAgICBjb25zdCBkZXNjcmlwdG9yID0gdGhpcy5maWx0ZXJEZXNjcmlwdG9ycy5maW5kKGZkID0+IGZkLmZpbHRlclByb3BlcnR5ID09PSBmLnByb3BlcnR5IHx8IGZkLnByb3BlcnR5ID09PSBmLnByb3BlcnR5KTtcbiAgICAgICAgICAgIGNvbnN0IG1hdGNoTW9kZSA9IGYuZmlsdGVyTWF0Y2hUeXBlICYmIGRlc2NyaXB0b3IgPyBNZWRpdXNSZXN0VXRpbC5nZXRNYXBwaW5nKGYuZmlsdGVyTWF0Y2hUeXBlLCBkZXNjcmlwdG9yLmZpbHRlclR5cGUsIDIpPy5bMF0gOiBNZWRpdXNGaWx0ZXJNYXRjaFR5cGUuRXF1YWxzO1xuICAgICAgICAgICAgaWYgKGRlc2NyaXB0b3IgJiYgbWF0Y2hNb2RlKSB7XG4gICAgICAgICAgICAgICAgbGV0IGZpbHRlclZhbHVlID0gZi5maWx0ZXJWYWx1ZTtcbiAgICAgICAgICAgICAgICBpZiAoZGVzY3JpcHRvci5maWx0ZXJUeXBlID09PSBGaWx0ZXJUeXBlRW51bS5EYXRlICYmIHR5cGVvZiBmaWx0ZXJWYWx1ZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBmaWx0ZXJWYWx1ZSA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIGZpbHRlclZhbHVlID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyVmFsdWUgPSBuZXcgRGF0ZShmaWx0ZXJWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLy8gaWYgcmFuZ2UgaXMgcHJvdmlkZWQsIHRha2UgdGhhdCBpbnRvIGFjY291bnRcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBmLmZpbHRlclZhbHVlVG8gPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBmLmZpbHRlclZhbHVlVG8gPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJWYWx1ZVRvID0gbmV3IERhdGUoZi5maWx0ZXJWYWx1ZVRvKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlclZhbHVlID0gW2ZpbHRlclZhbHVlLCBmaWx0ZXJWYWx1ZVRvXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBwcmltZUZpbHRlck1ldGFbZGVzY3JpcHRvci5wcm9wZXJ0eV0gPSB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmaWx0ZXJWYWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgbWF0Y2hNb2RlOiBtYXRjaE1vZGVcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHByaW1lRmlsdGVyTWV0YTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNyZWF0ZVNvcnRNZXRhKG1lZGl1c1F1ZXJ5UGFyYW0/OiBNZWRpdXNRdWVyeVBhcmFtKTogU29ydE1ldGFbXSB7XG4gICAgICAgIGxldCBwYXJhbXM6IE1lZGl1c1F1ZXJ5UGFyYW07XG4gICAgICAgIGlmICghbWVkaXVzUXVlcnlQYXJhbSkge1xuICAgICAgICAgICAgcGFyYW1zID0gbmV3IE1lZGl1c1F1ZXJ5UGFyYW0oKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBhcmFtcyA9IG1lZGl1c1F1ZXJ5UGFyYW07XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgc29ydE1ldGE6IFNvcnRNZXRhW107XG4gICAgICAgIGNvbnN0IGFwcGx5RGVmYXVsdFNvcnRzID0gKHBhcmFtcy5zb3J0UHJvcGVydHk/Lmxlbmd0aCA/PyAwKSA9PT0gMDtcblxuICAgICAgICBpZiAoYXBwbHlEZWZhdWx0U29ydHMgJiYgdGhpcy5kZXNjcmlwdG9yPy5oYXNEZWZhdWx0U29ydCkge1xuICAgICAgICAgICAgc29ydE1ldGEgPSB0aGlzLmRlc2NyaXB0b3IuZGVmYXVsdFNvcnRQcm9wZXJ0eS5tYXAoXG4gICAgICAgICAgICAgICAgKHAsIGlkeCkgPT5cbiAgICAgICAgICAgICAgICAgICAgPFNvcnRNZXRhPntcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkOiBwLFxuICAgICAgICAgICAgICAgICAgICAgICAgb3JkZXI6IHRoaXMuZGVzY3JpcHRvciEuZGVmYXVsdFNvcnRBc2NbaWR4XSA/IDEgOiAtMVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc29ydE1ldGEgPSBbXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHBhcmFtcy5zb3J0UHJvcGVydHk/LmZvckVhY2goKHMsIGlkeCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZXhpc3RpbmdJbmRleCA9IHNvcnRNZXRhLmZpbmRJbmRleCh2YWx1ZSA9PiB2YWx1ZS5maWVsZCA9PT0gcyk7XG4gICAgICAgICAgICBpZiAoZXhpc3RpbmdJbmRleCA+IC0xKSB7XG4gICAgICAgICAgICAgICAgc29ydE1ldGFbZXhpc3RpbmdJbmRleF0ub3JkZXIgPSBwYXJhbXMuc29ydEFzYz8uW2lkeF0gPz8gdHJ1ZSA/IDEgOiAtMTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgc29ydE1ldGEucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkOiBzLFxuICAgICAgICAgICAgICAgICAgICBvcmRlcjogcGFyYW1zLnNvcnRBc2M/LltpZHhdID8/IHRydWUgPyAxIDogLTFcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHNvcnRNZXRhO1xuICAgIH1cblxuICAgIHByaXZhdGUgaW5pdGlhbGl6ZURhdGFMb2FkaW5nVHJpZ2dlcnMoKSB7XG4gICAgICAgIGlmICh0aGlzLnVzZVF1ZXJ5UGFyYW1zKSB7XG4gICAgICAgICAgICAvLyB0cmlnZ2VyIHRhYmxlIGxvYWRzIGZyb20gcm91dGUgdXBkYXRlc1xuICAgICAgICAgICAgY29uc3Qgc3Vic2NyaXB0aW9uID0gdGhpcy5yb3V0ZS5xdWVyeVBhcmFtcy5zdWJzY3JpYmUocXAgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMubG9hZFRhYmxlRnJvbVJvdXRlVXBkYXRlKHFwKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goc3Vic2NyaXB0aW9uKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIGxvYWQgZGF0YSBpbW1lZGlhdGVseSBieSBjcmVhdGluZyBkZWZhdWx0IHNvcnRzIGFuZCBmaWx0ZXJzIChwcmltZW5nIHdpbGwgdHJpZ2dlciBvbkxhenlMb2FkIGV2ZW50IG9uIHNvcnQmZmlsdGVyIG1ldGFkYXRhIGNoYW5nZSlcbiAgICAgICAgICAgIGNvbnN0IGRlZmF1bHRTb3J0ID0gdGhpcy5jcmVhdGVTb3J0TWV0YSgpO1xuICAgICAgICAgICAgaWYgKGRlZmF1bHRTb3J0Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLm11bHRpU29ydE1ldGEgPSBkZWZhdWx0U29ydDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgZGVmYXVsdEZpbHRlciA9IHRoaXMuY3JlYXRlRmlsdGVyTWV0YSgpO1xuICAgICAgICAgICAgaWYgKGRlZmF1bHRGaWx0ZXIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZpbHRlck1ldGFkYXRhID0gZGVmYXVsdEZpbHRlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cbiIsIjxkaXYgW3N0eWxlLmhlaWdodF09XCJzY3JvbGxIZWlnaHQgPT09ICdmbGV4JyA/ICdjYWxjKDEwMHZoIC0gJyArIHRhYmxlRnVsbEhlaWdodE9mZnNldCArICdweCknIDogbnVsbFwiPlxuICAgIDwhLS0gTVVTVCBOT1QgdXNlIG9ic2VydmFibGUgZm9yIHZhbHVlIHdoZW4gdXNpbmcgdmlydHVhbCBzY3JvbGwgLSBkb2VzIG5vdCB3b3JrIGZvciBzb21lIHJlYXNvbiAtLT5cbiAgICA8cC10YWJsZVxuICAgICAgICAqbmdJZj1cIiF1c2VRdWVyeVBhcmFtcyB8fCAodXNlUXVlcnlQYXJhbXNJbml0aWFsaXplZCQgfCBhc3luYylcIlxuICAgICAgICBbdmFsdWVdPVwiaW5maW5pdGVTY3JvbGwgPyBkYXRhUHJvdmlkZXJJbmZpbml0ZVNjcm9sbEl0ZW1zIDogKHF1ZXJ5UmVzdWx0JCB8IGFzeW5jKT8ucGFnZURhdGEgPz8gW11cIlxuICAgICAgICBbZGF0YUtleV09XCIkYW55KGRlc2NyaXB0b3I/LmRhdGFLZXlQcm9wZXJ0eSA/PyBudWxsKVwiXG4gICAgICAgIFtsYXp5XT1cInVzZURhdGFQcm92aWRlclwiXG4gICAgICAgIFtsb2FkaW5nXT1cIihsb2FkaW5nJCB8IGFzeW5jKSA/PyBmYWxzZVwiXG4gICAgICAgIFtwYWdpbmF0b3JdPVwidXNlRGF0YVByb3ZpZGVyICYmICFpbmZpbml0ZVNjcm9sbFwiXG4gICAgICAgIFtyb3dzXT1cIiRhbnkoaW5maW5pdGVTY3JvbGwgPyAyMCA6IHJvd3MpXCJcbiAgICAgICAgW2ZpcnN0XT1cIiRhbnkoaW5maW5pdGVTY3JvbGwgPyAwIDogb2Zmc2V0KVwiXG4gICAgICAgIFt0b3RhbFJlY29yZHNdPVwiJGFueShpbmZpbml0ZVNjcm9sbCA/IG51bGwgOiAocXVlcnlSZXN1bHQkIHwgYXN5bmMpPy5hbGxEYXRhQ291bnQgPz8gMClcIlxuICAgICAgICBbcm93c1BlclBhZ2VPcHRpb25zXT1cIiRhbnkoaW5maW5pdGVTY3JvbGwgPyBudWxsIDogcm93c1BlclBhZ2VPcHRpb25zKVwiXG4gICAgICAgIFtzaG93Q3VycmVudFBhZ2VSZXBvcnRdPVwiIWluZmluaXRlU2Nyb2xsXCJcbiAgICAgICAgW2N1cnJlbnRQYWdlUmVwb3J0VGVtcGxhdGVdPVwiJ21uZ1RhYmxlLnBhZ2luYXRpb25Nc2cnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgW211bHRpU29ydE1ldGFdPVwiJGFueShtdWx0aVNvcnRNZXRhKVwiXG4gICAgICAgIFtmaWx0ZXJzXT1cImZpbHRlck1ldGFkYXRhXCJcbiAgICAgICAgWyhzZWxlY3Rpb24pXT1cInNlbGVjdGlvblwiXG4gICAgICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwib25TZWxlY3Rpb25DaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgIFtzY3JvbGxhYmxlXT1cImluZmluaXRlU2Nyb2xsXCJcbiAgICAgICAgW3ZpcnR1YWxTY3JvbGxdPVwiaW5maW5pdGVTY3JvbGxcIlxuICAgICAgICBbdmlydHVhbFJvd0hlaWdodF09XCIkYW55KHJvd0hlaWdodClcIlxuICAgICAgICBbc2Nyb2xsSGVpZ2h0XT1cIiRhbnkoc2Nyb2xsSGVpZ2h0KVwiXG4gICAgICAgIFtzZWxlY3Rpb25Nb2RlXT1cIiRhbnkoc2VsZWN0aW9uRW5hYmxlZCA/IHNlbGVjdGlvbk1vZGUgOiBudWxsKVwiXG4gICAgICAgIFtyb3dIb3Zlcl09XCJkZXNjcmlwdG9yPy5oYXNIb3ZlciA/PyB0cnVlXCJcbiAgICAgICAgW3N0eWxlQ2xhc3NdPVwiY2xhc3NOYW1lXCJcbiAgICAgICAgKG9uTGF6eUxvYWQpPVwib25UYWJsZUxhenlMb2FkKCRldmVudClcIlxuICAgICAgICAob25Tb3J0KT1cIm9uVGFibGVTb3J0KCRldmVudClcIlxuICAgICAgICAob25GaWx0ZXIpPVwib25UYWJsZUZpbHRlcigkZXZlbnQpXCJcbiAgICAgICAgc29ydE1vZGU9XCJtdWx0aXBsZVwiXG4gICAgICAgIHJlc3BvbnNpdmVMYXlvdXQ9XCJzY3JvbGxcIlxuICAgICAgICBbcmVzaXphYmxlQ29sdW1uc109XCJ0cnVlXCJcbiAgICAgICAgW2F1dG9MYXlvdXRdPVwidHJ1ZVwiPlxuICAgICAgICA8bmctdGVtcGxhdGUgKm5nSWY9XCJjYXB0aW9uVGVtcGxhdGUgfHwgY2FwdGlvbkNvbXBvbmVudCB8fCBkZXNjcmlwdG9yPy50aXRsZVwiIHBUZW1wbGF0ZT1cImNhcHRpb25cIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjYXB0aW9uVGVtcGxhdGU7IGVsc2UgY29tcG9uZW50T3JEZWZhdWx0Q2FwdGlvblwiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjYXB0aW9uVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNjb21wb25lbnRPckRlZmF1bHRDYXB0aW9uPlxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJjYXB0aW9uQ29tcG9uZW50OyBlbHNlIGRlZmF1bHRDYXB0aW9uXCIgW21uZ0NvbXBvbmVudF09XCJjYXB0aW9uQ29tcG9uZW50XCIgKGluc3RhbmNlQ3JlYXRlZCk9XCJvbkNhcHRpb25DbXBJbnN0KCRldmVudClcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHRDYXB0aW9uPlxuICAgICAgICAgICAgICAgICAgICA8aDUgY2xhc3M9XCJwLTAgbS0wXCI+e3sgZGVzY3JpcHRvcj8udGl0bGUgfX08L2g1PlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJoZWFkZXJcIj5cbiAgICAgICAgICAgIDx0ciAqbmdJZj1cIiFkZXNjcmlwdG9yPy5oaWRlSGVhZGVyXCIgY2xhc3M9XCJtbmctdGFibGUtaGVhZGVyXCIgW2NsYXNzXT1cImRlc2NyaXB0b3I/LmhlYWRlckNsYXNzTmFtZVwiPlxuICAgICAgICAgICAgICAgIDx0aCAqbmdJZj1cInNlbGVjdGlvbkVuYWJsZWQgJiYgc2VsZWN0aW9uTW9kZSA9PT0gJ211bHRpcGxlJ1wiPlxuICAgICAgICAgICAgICAgICAgICA8cC10YWJsZUhlYWRlckNoZWNrYm94PjwvcC10YWJsZUhlYWRlckNoZWNrYm94PlxuICAgICAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgICAgICAgPCEtLSBXZSBuZWVkIHRoZSBsaW5lIGJlbG93LCBiZWNhdXNlIG90aGVyd2lzZSBwLXRhYmxlUmFkaW9CdXR0b24gc2hpZnRzIHRoZSByZXN0IG9mIHRoZSBjb2x1bW5zIGluIHRhYmxlIC0tPlxuICAgICAgICAgICAgICAgIDx0aCAqbmdJZj1cInNlbGVjdGlvbkVuYWJsZWQgJiYgc2VsZWN0aW9uTW9kZSA9PT0gJ3NpbmdsZSdcIiBzdHlsZT1cIm1pbi13aWR0aDogMzZweFwiPjwvdGg+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY29sIG9mIGRlc2NyaXB0b3I/LmNvbHVtbnNcIj5cbiAgICAgICAgICAgICAgICAgICAgPHRoICpuZ0lmPVwiY29sLmlzU29ydEVuYWJsZWRcIiBbcFNvcnRhYmxlQ29sdW1uXT1cImNvbC5wcm9wZXJ0eVwiIFtzdHlsZS53aWR0aC4lXT1cImNvbC53aWR0aFwiIFtzdHlsZS5taW4td2lkdGgucHhdPVwiY29sLm1pbldpZHRoXCIgW2NsYXNzXT1cImNvbC5oZWFkZXJDbGFzc05hbWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGNvbC50aXRsZSA/PyAoY29sLnByb3BlcnR5IHwgaTE4blByb3BlcnR5OiBkZXNjcmlwdG9yIS5tb2RlbCkgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cC1zb3J0SWNvbiBbZmllbGRdPVwiY29sLnByb3BlcnR5XCI+PC9wLXNvcnRJY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtbmctdGFibGUtY29sdW1uLWZpbHRlclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImNvbC5maWx0ZXJEZXNjcmlwdG9yICYmIGRlc2NyaXB0b3IhLmZpbHRlckRpc3BsYXkgPT09IGZpbHRlckRpc3BsYXlNZW51XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtbC1hdXRvXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc3BsYXldPVwiZGVzY3JpcHRvciEuZmlsdGVyRGlzcGxheVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkZXNjcmlwdG9yXT1cImNvbC5maWx0ZXJEZXNjcmlwdG9yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tbmctdGFibGUtY29sdW1uLWZpbHRlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L3RoPlxuICAgICAgICAgICAgICAgICAgICA8dGggKm5nSWY9XCIhY29sLmlzU29ydEVuYWJsZWRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IGNvbC50aXRsZSA/PyAoY29sLnByb3BlcnR5IHwgaTE4blByb3BlcnR5OiBkZXNjcmlwdG9yIS5tb2RlbCkgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1uZy10YWJsZS1jb2x1bW4tZmlsdGVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY29sLmZpbHRlckRlc2NyaXB0b3IgJiYgZGVzY3JpcHRvciEuZmlsdGVyRGlzcGxheSA9PT0gZmlsdGVyRGlzcGxheU1lbnVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1sLWF1dG9cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzcGxheV09XCJkZXNjcmlwdG9yIS5maWx0ZXJEaXNwbGF5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rlc2NyaXB0b3JdPVwiY29sLmZpbHRlckRlc2NyaXB0b3JcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21uZy10YWJsZS1jb2x1bW4tZmlsdGVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPHRoICpuZ0lmPVwic2hvd0lubGluZUFjdGlvbnNDb2x1bW5cIj48L3RoPlxuICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgIDx0ciAqbmdJZj1cImRlc2NyaXB0b3I/LmZpbHRlckRpc3BsYXkgPT09IGZpbHRlckRpc3BsYXlSb3cgJiYgaGFzQ29sdW1uRmlsdGVyc1wiIGNsYXNzPVwibW5nLWNvbHVtbi1maWx0ZXItcm93XCI+XG4gICAgICAgICAgICAgICAgPCEtLSBXZSBuZWVkIHRoZSBsaW5lIGJlbG93LCBiZWNhdXNlIG90aGVyd2lzZSBwLXRhYmxlUmFkaW9CdXR0b24gc2hpZnRzIHRoZSByZXN0IG9mIHRoZSBjb2x1bW5zIGluIHRhYmxlIC0tPlxuICAgICAgICAgICAgICAgIDx0aCAqbmdJZj1cInNlbGVjdGlvbkVuYWJsZWQgJiYgc2VsZWN0aW9uTW9kZSA9PT0gJ3NpbmdsZSdcIiBzdHlsZT1cIm1pbi13aWR0aDogMzZweFwiPjwvdGg+XG4gICAgICAgICAgICAgICAgPHRoXG4gICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBjb2wgb2YgZGVzY3JpcHRvcj8uY29sdW1uc1wiXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCIoY29sLmZpbHRlckRlc2NyaXB0b3IgPyAnbW5nLWNvbHVtbi1maWx0ZXItJyArIGNvbC5maWx0ZXJEZXNjcmlwdG9yLmZpbHRlclR5cGUgKyAnICcgOiAnICcpICsgY29sLmZpbHRlckRlc2NyaXB0b3I/LmNvbHVtbkNsYXNzTmFtZVwiXG4gICAgICAgICAgICAgICAgICAgIFtzdHlsZS53aWR0aC4lXT1cImNvbC5maWx0ZXJEZXNjcmlwdG9yPy5jb2x1bW5XaWR0aCA/PyBjb2wud2lkdGhcIlxuICAgICAgICAgICAgICAgICAgICBbc3R5bGUubWluLXdpZHRoLnB4XT1cImNvbC5maWx0ZXJEZXNjcmlwdG9yPy5jb2x1bW5NaW5XaWR0aCA/PyBjb2wubWluV2lkdGhcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXhcIiAqbmdJZj1cImNvbC5maWx0ZXJEZXNjcmlwdG9yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bW5nLXRhYmxlLWNvbHVtbi1maWx0ZXIgW2Rpc3BsYXldPVwiZGVzY3JpcHRvciEuZmlsdGVyRGlzcGxheVwiIFtkZXNjcmlwdG9yXT1cImNvbC5maWx0ZXJEZXNjcmlwdG9yXCI+PC9tbmctdGFibGUtY29sdW1uLWZpbHRlcj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgICAgICA8dGggKm5nSWY9XCJzaG93SW5saW5lQWN0aW9uc0NvbHVtblwiPjwvdGg+XG4gICAgICAgICAgICA8L3RyPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJib2R5XCIgbGV0LWl0ZW0gbGV0LWlkeD1cInJvd0luZGV4XCI+XG4gICAgICAgICAgICA8dHIgW3N0eWxlLmhlaWdodC5weF09XCJyb3dIZWlnaHRcIiBbY2xhc3NdPVwiZGVzY3JpcHRvcj8ucm93Q2xhc3NOYW1lIHwgbW5nQ2xhc3NNYXBQaXBlOiBkZXNjcmlwdG9yPy5yb3dDbGFzc05hbWVNYXBGbjppdGVtXCI+XG4gICAgICAgICAgICAgICAgPHRkICpuZ0lmPVwic2VsZWN0aW9uRW5hYmxlZCAmJiBzZWxlY3Rpb25Nb2RlID09PSAnbXVsdGlwbGUnXCIgc3R5bGU9XCJ3aWR0aDogM3JlbVwiPlxuICAgICAgICAgICAgICAgICAgICA8cC10YWJsZUNoZWNrYm94IFt2YWx1ZV09XCJpdGVtXCI+PC9wLXRhYmxlQ2hlY2tib3g+XG4gICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICA8dGQgKm5nSWY9XCJzZWxlY3Rpb25FbmFibGVkICYmIHNlbGVjdGlvbk1vZGUgPT09ICdzaW5nbGUnXCIgc3R5bGU9XCJ3aWR0aDogM3JlbVwiPlxuICAgICAgICAgICAgICAgICAgICA8cC10YWJsZVJhZGlvQnV0dG9uIFt2YWx1ZV09XCJpdGVtXCI+PC9wLXRhYmxlUmFkaW9CdXR0b24+XG4gICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICA8dGRcbiAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGNvbCBvZiBkZXNjcmlwdG9yPy5jb2x1bW5zXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uQ2VsbENsaWNrKCRldmVudCwgY29sLCBpdGVtLCBpZHgpXCJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cImNvbC5jbGFzc05hbWVcIlxuICAgICAgICAgICAgICAgICAgICBbY2xhc3MuY2xpY2thYmxlXT1cImlzQ29sdW1uQ2xpY2thYmxlXCJcbiAgICAgICAgICAgICAgICAgICAgW3N0eWxlLndpZHRoLiVdPVwiY29sLndpZHRoXCJcbiAgICAgICAgICAgICAgICAgICAgW3N0eWxlLm1pbi13aWR0aC5weF09XCJjb2wubWluV2lkdGhcIj5cbiAgICAgICAgICAgICAgICAgICAgPG1uZy10YWJsZS1jb2x1bW4tdmFsdWUgW2Rlc2NyaXB0b3JdPVwiY29sXCIgW2l0ZW1dPVwiaXRlbVwiPjwvbW5nLXRhYmxlLWNvbHVtbi12YWx1ZT5cbiAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgIDx0ZCAqbmdJZj1cInNob3dJbmxpbmVBY3Rpb25zQ29sdW1uXCIgY2xhc3M9XCJjb2x1bW4tYWN0aW9uIHRleHQtcmlnaHRcIiBbc3R5bGUubWluLXdpZHRoLnB4XT1cImNvbHVtbkFjdGlvbk1pbldpZHRoXCI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2x1bW5BY3Rpb25UZW1wbGF0ZTsgZWxzZSBzaG93Q29sdW1uQWN0aW9uQ29tcG9uZW50T3JEZWZhdWx0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiY29sdW1uQWN0aW9uVGVtcGxhdGU7IGNvbnRleHQ6IHtyb3dJdGVtOiBpdGVtLCByb3dJbmRleDogaWR4fVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNzaG93Q29sdW1uQWN0aW9uQ29tcG9uZW50T3JEZWZhdWx0PlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImNvbHVtbkFjdGlvbkNvbXBvbmVudDsgZWxzZSBkZWZhdWx0Q29sdW1uQWN0aW9uc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW21uZ0NvbXBvbmVudF09XCJjb2x1bW5BY3Rpb25Db21wb25lbnQhXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW5zdGFuY2VDcmVhdGVkKT1cIm9uQ29sdW1uQWN0aW9uQ21wSW5zdCgkZXZlbnQpXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHRDb2x1bW5BY3Rpb25zPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1uZy1hY3Rpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgYWN0aW9uIG9mIHJvd0lubGluZUFjdGlvbnNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthY3Rpb25dPVwiYWN0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaXRlbV09XCJpdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaXRlbUlkXT1cImRlc2NyaXB0b3I/Lm1vZGVsPy5pZFByb3BlcnR5TmFtZSA/IGl0ZW1bZGVzY3JpcHRvciEubW9kZWwhLmlkUHJvcGVydHlOYW1lIV0gOiBudWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYWN0aW9uRGF0YV09XCJ7aXRlbUluZGV4OiBpZHh9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZmluaXNoKT1cIm9uQWN0aW9uRmluaXNoKCRldmVudClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbW5nLWFjdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgPC90cj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwibG9hZGluZ2JvZHlcIj5cbiAgICAgICAgICAgIDx0ciBbc3R5bGUuaGVpZ2h0LnB4XT1cInJvd0hlaWdodFwiPlxuICAgICAgICAgICAgICAgIDx0ZCBbYXR0ci5jb2xzcGFuXT1cIihkZXNjcmlwdG9yPy5jb2x1bW5zPy5sZW5ndGggPz8gMCkgKyAoc2hvd0lubGluZUFjdGlvbnNDb2x1bW4gPyAxIDogMCkgKyAoc2VsZWN0aW9uRW5hYmxlZCA/IDEgOiAwKVwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibG9hZGluZy10ZXh0XCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxwLXNrZWxldG9uIFtuZ1N0eWxlXT1cInt3aWR0aDogJzEwMCUnfVwiPjwvcC1za2VsZXRvbj5cbiAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgPC90cj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiZW1wdHltZXNzYWdlXCI+XG4gICAgICAgICAgICA8dHIgW3N0eWxlLmhlaWdodC5weF09XCJyb3dIZWlnaHRcIj5cbiAgICAgICAgICAgICAgICA8dGQgW2F0dHIuY29sc3Bhbl09XCIoZGVzY3JpcHRvcj8uY29sdW1ucz8ubGVuZ3RoID8/IDApICsgKHNob3dJbmxpbmVBY3Rpb25zQ29sdW1uID8gMSA6IDApICsgKHNlbGVjdGlvbkVuYWJsZWQgPyAxIDogMClcIj5cbiAgICAgICAgICAgICAgICAgICAge3sgJ21uZ1RhYmxlLm5vSXRlbXMnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgIDwvdHI+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICAgICAgPG5nLXRlbXBsYXRlICpuZ0lmPVwiZm9vdGVyVGVtcGxhdGVcIiBwVGVtcGxhdGU9XCJzdW1tYXJ5XCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImZvb3RlclRlbXBsYXRlXCIgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntxdWVyeVJlc3VsdDogcXVlcnlSZXN1bHR9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9wLXRhYmxlPlxuPC9kaXY+XG4iXX0=
556
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL3RhYmxldmlldy90YWJsZS90YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvdGFibGV2aWV3L3RhYmxlL3RhYmxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFSCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULGVBQWUsRUFDZixZQUFZLEVBRVosS0FBSyxFQUlMLFFBQVEsRUFDUixNQUFNLEVBS04sU0FBUyxFQUNULFlBQVksRUFDZixNQUFNLGVBQWUsQ0FBQztBQUl2QixPQUFPLEVBQUMsZUFBZSxFQUEwQyxNQUFNLGFBQWEsQ0FBQztBQUNyRixPQUFPLEVBQUMsS0FBSyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3BDLE9BQU8sRUFBQyxlQUFlLEVBQUUsVUFBVSxFQUFFLGFBQWEsRUFBZ0IsWUFBWSxFQUFFLEVBQUUsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUNoRyxPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFbkMsT0FBTyxFQUFDLHFCQUFxQixFQUFFLGdCQUFnQixFQUFFLHVCQUF1QixFQUFFLGlCQUFpQixFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDeEgsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBRWxELE9BQU8sRUFBZ0csc0JBQXNCLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUMzSixPQUFPLEVBQUMsa0JBQWtCLEVBQUUsY0FBYyxFQUFFLHNCQUFzQixFQUFFLHVCQUF1QixFQUFFLGFBQWEsRUFBQyxNQUFNLDRCQUE0QixDQUFDO0FBQzlJLE9BQU8sRUFBQyxxQkFBcUIsRUFBRSxvQkFBb0IsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBR2hGLE9BQU8s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QUNOLGdCQUFnQjtzQkFBL0IsS0FBSztnQkFDVSxxQkFBcUI7c0JBQXBDLEtBQUs7Z0JBQ1Usb0JBQW9CO3NCQUFuQyxLQUFLO2dCQUdzQixnQkFBZ0I7c0JBQTNDLE1BQU07dUJBQUMsV0FBVztnQkFDUyxxQkFBcUI7c0JBQWhELE1BQU07dUJBQUMsV0FBVztnQkFDZSwyQkFBMkI7c0JBQTVELE1BQU07dUJBQUMsaUJBQWlCO2dCQUNrQiwwQkFBMEI7c0JBQXBFLE1BQU07dUJBQUMsMEJBQTBCO2dCQUNjLCtCQUErQjtzQkFBOUUsTUFBTTt1QkFBQywrQkFBK0I7Z0JBR08sU0FBUztzQkFBdEQsZUFBZTt1QkFBQyxvQkFBb0I7Z0JBQ08sVUFBVTtzQkFBckQsWUFBWTt1QkFBQyxxQkFBcUI7Z0JBQ1YsVUFBVTtzQkFBbEMsU0FBUzt1QkFBQyxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBBZnRlckNvbnRlbnRJbml0LFxuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENvbXBvbmVudCxcbiAgICBDb250ZW50Q2hpbGRyZW4sXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIEluamVjdG9yLFxuICAgIElucHV0LFxuICAgIE9uQ2hhbmdlcyxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIE9wdGlvbmFsLFxuICAgIE91dHB1dCxcbiAgICBRdWVyeUxpc3QsXG4gICAgU2ltcGxlQ2hhbmdlcyxcbiAgICBUZW1wbGF0ZVJlZixcbiAgICBUeXBlLFxuICAgIFZpZXdDaGlsZCxcbiAgICBWaWV3Q2hpbGRyZW5cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0FjdGl2YXRlZFJvdXRlLCBQYXJhbXMsIFJvdXRlcn0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcblxuaW1wb3J0IHtUcmFuc2xhdGVTZXJ2aWNlfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7RmlsdGVyTWF0Y2hNb2RlLCBGaWx0ZXJNZXRhZGF0YSwgTGF6eUxvYWRFdmVudCwgU29ydE1ldGF9IGZyb20gJ3ByaW1lbmcvYXBpJztcbmltcG9ydCB7VGFibGV9IGZyb20gJ3ByaW1lbmcvdGFibGUnO1xuaW1wb3J0IHtCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIFJlcGxheVN1YmplY3QsIFN1YnNjcmlwdGlvbiwgaXNPYnNlcnZhYmxlLCBvZn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge21hcH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQge01lZGl1c0ZpbHRlck1hdGNoVHlwZSwgTWVkaXVzUXVlcnlQYXJhbSwgTWVkaXVzUXVlcnlQYXJhbUJ1aWxkZXIsIE1lZGl1c1F1ZXJ5UmVzdWx0fSBmcm9tICcuLi8uLi8uLi9hcGkvbW9kZWxzJztcbmltcG9ydCB7TWVkaXVzUmVzdFV0aWx9IGZyb20gJy4uLy4uLy4uL2FwaS91dGlscyc7XG5pbXBvcnQge0lUYWJsZURhdGFQcm92aWRlcn0gZnJvbSAnLi4vLi4vLi4vZGF0YS1wcm92aWRlcnMnO1xuaW1wb3J0IHtBY3Rpb25EZXNjcmlwdG9yLCBDb2x1bW5EZXNjcmlwdG9yLCBGaWx0ZXJEZXNjcmlwdG9yLCBGaWx0ZXJMb29rdXBEZXNjcmlwdG9yLCBUYWJsZURlc2NyaXB0b3IsIFRhYmxlRHluYW1pY0Rlc2NyaXB0b3J9IGZyb20gJy4uLy4uLy4uL2Rlc2NyaXB0b3JzJztcbmltcG9ydCB7QWN0aW9uUG9zaXRpb25FbnVtLCBGaWx0ZXJUeXBlRW51bSwgVGFibGVGaWx0ZXJEaXNwbGF5RW51bSwgVGFibGVQYWdpbmF0aW9uTW9kZUVudW0sIFRhYmxlU2l6ZUVudW19IGZyb20gJy4uLy4uLy4uL2Rlc2NyaXB0b3JzL3R5cGVzJztcbmltcG9ydCB7TW5nQ29tcG9uZW50RGlyZWN0aXZlLCBNbmdUZW1wbGF0ZURpcmVjdGl2ZX0gZnJvbSAnLi4vLi4vLi4vZGlyZWN0aXZlcyc7XG5pbXBvcnQge0lWaWV3Q29udGFpbmVyfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMnO1xuaW1wb3J0IHtNbmdBY3Rpb25FeGVjdXRvclNlcnZpY2UsIE1uZ1ZpZXdDb250YWluZXJDb21wb25lbnRTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQge1N0eWxlc1V0aWx9IGZyb20gJy4uLy4uLy4uL3N0eWxlcyc7XG5pbXBvcnQge05vdGlmaWNhdGlvblV0aWx9IGZyb20gJy4uLy4uLy4uL3V0aWxzJztcbmltcG9ydCB7QWN0aW9uSW5zdGFuY2V9IGZyb20gJy4uLy4uL2FjdGlvbi9tb2RlbHMnO1xuaW1wb3J0IHtNbmdUYWJsZUNlbGxDbGlja0V2ZW50LCBNbmdUYWJsZUxvYWRFdmVudH0gZnJvbSAnLi4vbW9kZWxzJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdtbmctdGFibGUnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi90YWJsZS5jb21wb25lbnQuaHRtbCcsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgTW5nVGFibGVDb21wb25lbnQ8VCwgUz4gaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgQWZ0ZXJDb250ZW50SW5pdCwgT25EZXN0cm95IHtcbiAgICBwdWJsaWMgcmVhZG9ubHkgZmlsdGVyRGlzcGxheVJvdzogVGFibGVGaWx0ZXJEaXNwbGF5RW51bSA9IFRhYmxlRmlsdGVyRGlzcGxheUVudW0uUm93O1xuICAgIHB1YmxpYyByZWFkb25seSBmaWx0ZXJEaXNwbGF5TWVudTogVGFibGVGaWx0ZXJEaXNwbGF5RW51bSA9IFRhYmxlRmlsdGVyRGlzcGxheUVudW0uTWVudTtcblxuICAgIC8vIG1ldGFkYXRhIGlucHV0XG4gICAgQElucHV0KCdkZXNjcmlwdG9yJykgcHVibGljIGluaXRpYWxEZXNjcmlwdG9yITogVGFibGVEZXNjcmlwdG9yPFQ+O1xuICAgIHB1YmxpYyBkZXNjcmlwdG9yPzogVGFibGVEZXNjcmlwdG9yPFQ+O1xuXG4gICAgLy8gZGF0YSBzb3VyY2UgaW5wdXRzXG4gICAgQElucHV0KCkgcHVibGljIGl0ZW1zPzogT2JzZXJ2YWJsZTxBcnJheTxUPj4gfCBBcnJheTxUPjtcbiAgICBASW5wdXQoKSBwdWJsaWMgcXVlcnlSZXN1bHQ/OiBPYnNlcnZhYmxlPE1lZGl1c1F1ZXJ5UmVzdWx0PFQ+PiB8IE1lZGl1c1F1ZXJ5UmVzdWx0PFQ+O1xuICAgIEBJbnB1dCgpIHB1YmxpYyBsb2FkaW5nPzogT2JzZXJ2YWJsZTxib29sZWFuPiB8IGJvb2xlYW47XG4gICAgQElucHV0KCkgcHVibGljIGRhdGFQcm92aWRlcj86IElUYWJsZURhdGFQcm92aWRlcjxULCBhbnk+O1xuICAgIEBJbnB1dCgpIHB1YmxpYyB1c2VRdWVyeVBhcmFtcyA9IGZhbHNlO1xuXG4gICAgLy8gZXh0cmEgZmVhdHVyZXMgaW5wdXRcbiAgICBASW5wdXQoKSBwdWJsaWMgc2VsZWN0aW9uTW9kZSA9ICdtdWx0aXBsZSc7XG4gICAgQElucHV0KCkgcHVibGljIHNlbGVjdGlvbkVuYWJsZWQgPSBmYWxzZTtcblxuICAgIC8vIGFjdGlvbnNcbiAgICBASW5wdXQoKSBwdWJsaWMgYWN0aW9uczogQXJyYXk8QWN0aW9uRGVzY3JpcHRvcjxUPj4gPSBbXTtcblxuICAgIC8vIHZpc3VhbFxuICAgIEBJbnB1dCgpIHB1YmxpYyBpc0NvbHVtbkNsaWNrYWJsZT86IGJvb2xlYW47XG5cbiAgICAvLyBjb21wb25lbnQgaW5wdXRzXG4gICAgQElucHV0KCd2aWV3Q29udGFpbmVyJykgcHVibGljIHZpZXdDb250YWluZXJJbml0PzogSVZpZXdDb250YWluZXI8VCwgUz47XG4gICAgQElucHV0KCkgcHVibGljIGNhcHRpb25Db21wb25lbnQ/OiBUeXBlPGFueT47XG4gICAgQElucHV0KCkgcHVibGljIGNvbHVtbkFjdGlvbkNvbXBvbmVudD86IFR5cGU8YW55PjtcbiAgICBASW5wdXQoKSBwdWJsaWMgY29sdW1uQWN0aW9uTWluV2lkdGg6IG51bWJlciB8IG51bGwgPSBudWxsO1xuXG4gICAgLy8gZXZlbnQgb3V0cHV0c1xuICAgIEBPdXRwdXQoJ3RhYmxlTG9hZCcpIHB1YmxpYyBsb2FkRXZlbnRFbWl0dGVyID0gbmV3IEV2ZW50RW1pdHRlcjxNbmdUYWJsZUxvYWRFdmVudD4oKTtcbiAgICBAT3V0cHV0KCdjZWxsQ2xpY2snKSBwdWJsaWMgY2VsbENsaWNrRXZlbnRFbWl0dGVyID0gbmV3IEV2ZW50RW1pdHRlcjxNbmdUYWJsZUNlbGxDbGlja0V2ZW50PFQ+PigpO1xuICAgIEBPdXRwdXQoJ3NlbGVjdGlvbkNoYW5nZScpIHB1YmxpYyBzZWxlY3Rpb25DaGFuZ2VFdmVudEVtaXR0ZXIgPSBuZXcgRXZlbnRFbWl0dGVyPEFycmF5PFQ+PigpO1xuICAgIEBPdXRwdXQoJ2NhcHRpb25Db21wb25lbnRJbnN0YW5jZScpIHB1YmxpYyBjYXB0aW9uQ21wSW5zdEV2ZW50RW1pdHRlciA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICAgIEBPdXRwdXQoJ2NvbHVtbkFjdGlvbkNvbXBvbmVudEluc3RhbmNlJykgcHVibGljIGNvbHVtbkFjdGlvbkNtcEluc3RFdmVudEVtaXR0ZXIgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICAgIC8vIGNvbnRlbnQgYW5kIHZpZXcgcXVlcmllc1xuICAgIEBDb250ZW50Q2hpbGRyZW4oTW5nVGVtcGxhdGVEaXJlY3RpdmUpIHB1YmxpYyB0ZW1wbGF0ZXMhOiBRdWVyeUxpc3Q8TW5nVGVtcGxhdGVEaXJlY3RpdmU+O1xuICAgIEBWaWV3Q2hpbGRyZW4oTW5nQ29tcG9uZW50RGlyZWN0aXZlKSBwdWJsaWMgY29tcG9uZW50cyE6IFF1ZXJ5TGlzdDxNbmdDb21wb25lbnREaXJlY3RpdmU8YW55Pj47XG4gICAgQFZpZXdDaGlsZChUYWJsZSkgcHVibGljIHByaW1lVGFibGUhOiBUYWJsZTtcblxuICAgIC8vIHRlbXBsYXRlc1xuICAgIHB1YmxpYyBjYXB0aW9uVGVtcGxhdGU/OiBUZW1wbGF0ZVJlZjxhbnk+O1xuICAgIHB1YmxpYyBjb2x1bW5BY3Rpb25UZW1wbGF0ZT86IFRlbXBsYXRlUmVmPGFueT47XG4gICAgcHVibGljIGZvb3RlclRlbXBsYXRlPzogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIC8vIGRhdGEgcHJvdmlkZXIgYW5kIGl0ZW1zXG4gICAgcHVibGljIHVzZURhdGFQcm92aWRlciA9IGZhbHNlO1xuICAgIHByaXZhdGUgdXNlUXVlcnlQYXJhbXNJbml0aWFsaXplZFN1YmVqY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KGZhbHNlKTtcbiAgICBwdWJsaWMgdXNlUXVlcnlQYXJhbXNJbml0aWFsaXplZCQgPSB0aGlzLnVzZVF1ZXJ5UGFyYW1zSW5pdGlhbGl6ZWRTdWJlamN0LmFzT2JzZXJ2YWJsZSgpO1xuICAgIHB1YmxpYyBxdWVyeVJlc3VsdCQ/OiBPYnNlcnZhYmxlPE1lZGl1c1F1ZXJ5UmVzdWx0PFQ+PjtcbiAgICBwdWJsaWMgbG9hZGluZyQ/OiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuICAgIHB1YmxpYyBkYXRhUHJvdmlkZXJJbmZpbml0ZVNjcm9sbEl0ZW1zOiBBcnJheTxUPiA9IFtdO1xuICAgIHByaXZhdGUgaXRlbXNTdWJqZWN0ID0gbmV3IFJlcGxheVN1YmplY3Q8QXJyYXk8VD4+KDEpO1xuXG4gICAgcHJpdmF0ZSBxdWVyeVJlc3VsdFN1YnNjcmlwdGlvbj86IFN1YnNjcmlwdGlvbjtcblxuICAgIC8vIHBhZ2luYXRpb24sIHNvcnQgYW5kIGZpbHRlcnNcbiAgICBwdWJsaWMgcm93c1BlclBhZ2VPcHRpb25zITogQXJyYXk8bnVtYmVyPjtcbiAgICBwdWJsaWMgcm93cyE6IG51bWJlcjtcbiAgICBwdWJsaWMgb2Zmc2V0ID0gMDtcbiAgICBwdWJsaWMgbXVsdGlTb3J0TWV0YTogU29ydE1ldGFbXSB8IG51bGwgPSBudWxsO1xuICAgIHB1YmxpYyBmaWx0ZXJNZXRhZGF0YToge1tzOiBzdHJpbmddOiBGaWx0ZXJNZXRhZGF0YX0gPSB7fTtcblxuICAgIC8vIGluZmluaXRlIHNjcm9sbFxuICAgIHB1YmxpYyBpbmZpbml0ZVNjcm9sbCA9IGZhbHNlO1xuICAgIHB1YmxpYyBzY3JvbGxIZWlnaHQ6ICdmbGV4JyB8IG51bGwgPSBudWxsO1xuXG4gICAgLy8gdmlzdWFsXG4gICAgcHVibGljIGNsYXNzTmFtZSE6IHN0cmluZztcbiAgICBwdWJsaWMgdGFibGVGdWxsSGVpZ2h0T2Zmc2V0OiBudW1iZXIgfCBudWxsID0gbnVsbDtcbiAgICBwdWJsaWMgcm93SGVpZ2h0OiBudW1iZXIgfCBudWxsID0gbnVsbDtcblxuICAgIC8vIHNlbGVjdGlvblxuICAgIHB1YmxpYyBzZWxlY3Rpb246IEFycmF5PFQ+ID0gW107XG5cbiAgICAvLyBkYXRhIHByb3ZpZGVyXG4gICAgcHJpdmF0ZSBkYXRhUHJvdmlkZXJTZXJ2aWNlOiBhbnkgPSBudWxsO1xuICAgIHByaXZhdGUgZGF0YVByb3ZpZGVyUXVlcnlSZXN1bHRTdWJqZWN0ID0gbmV3IFJlcGxheVN1YmplY3Q8TWVkaXVzUXVlcnlSZXN1bHQ8VD4+KDEpO1xuICAgIHByaXZhdGUgZGF0YVByb3ZpZGVyTG9hZGluZ1N1YmplY3QgPSBuZXcgUmVwbGF5U3ViamVjdDxib29sZWFuPigxKTtcbiAgICBwcml2YXRlIGRhdGFQcm92aWRlckxhdGVzdExhenlMb2FkRXZlbnQ/OiBMYXp5TG9hZEV2ZW50O1xuICAgIHByaXZhdGUgZGF0YVByb3ZpZGVyTGF0ZXN0TGF6eUxvYWRFdmVudFZlcnNpb24gPSAwO1xuICAgIHByaXZhdGUgZGF0YVByb3ZpZGVyTGF0ZXN0UXVlcnlQYXJhbT86IE1lZGl1c1F1ZXJ5UGFyYW07XG4gICAgcHJpdmF0ZSBkYXRhUHJvdmlkZXJMYXRlc3RRdWVyeVBhcmFtVmVyc2lvbiA9IDA7XG4gICAgcHJpdmF0ZSBkYXRhUHJvdmlkZXJTdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG5cbiAgICAvLyBmaWx0ZXIsIHNvcnRcbiAgICBwdWJsaWMgaGFzQ29sdW1uRmlsdGVycyA9IGZhbHNlO1xuICAgIHByaXZhdGUgaXNGaWx0ZXJDaGFuZ2VkID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBpc1NvcnRDaGFuZ2VkID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBmaWx0ZXJEZXNjcmlwdG9yczogQXJyYXk8RmlsdGVyRGVzY3JpcHRvcjxhbnk+PiA9IFtdO1xuXG4gICAgLy8gYWN0aW9uc1xuICAgIHB1YmxpYyBzaG93SW5saW5lQWN0aW9uc0NvbHVtbiA9IGZhbHNlO1xuICAgIHB1YmxpYyByb3dDbGlja0FjdGlvbnM6IEFjdGlvbkRlc2NyaXB0b3I8VD5bXSA9IFtdO1xuICAgIHB1YmxpYyByb3dJbmxpbmVBY3Rpb25zOiBBY3Rpb25EZXNjcmlwdG9yPFQ+W10gPSBbXTtcblxuICAgIC8vIG90aGVyXG4gICAgcHJpdmF0ZSB2aWV3Q29udGFpbmVyPzogSVZpZXdDb250YWluZXI8VCwgUz47XG4gICAgcHJpdmF0ZSBzdWJzY3JpcHRpb25zOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgICAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxuICAgICAgICBwcml2YXRlIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICAgICAgcHJpdmF0ZSB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgYWN0aW9uRXhlY3V0b3I6IE1uZ0FjdGlvbkV4ZWN1dG9yU2VydmljZSxcbiAgICAgICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSB2aWV3Q29udGFpbmVyU2VydmljZTogTW5nVmlld0NvbnRhaW5lckNvbXBvbmVudFNlcnZpY2U8VCwgUz4gfCBudWxsXG4gICAgKSB7fVxuXG4gICAgcHVibGljIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLnZpZXdDb250YWluZXIgPSB0aGlzLnZpZXdDb250YWluZXJJbml0ID8/IHRoaXMudmlld0NvbnRhaW5lclNlcnZpY2UgPz8gdW5kZWZpbmVkO1xuXG4gICAgICAgIGlmICghKHRoaXMuaW5pdGlhbERlc2NyaXB0b3IgaW5zdGFuY2VvZiBUYWJsZUR5bmFtaWNEZXNjcmlwdG9yKSkge1xuICAgICAgICAgICAgdGhpcy5kZXNjcmlwdG9yID0gdGhpcy5pbml0aWFsRGVzY3JpcHRvcjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIG1hcCByb3cgc2V0dGluZ3NcbiAgICAgICAgdGhpcy5maWx0ZXJEZXNjcmlwdG9ycyA9IHRoaXMuZGVzY3JpcHRvcj8uY29sdW1ucy5maWx0ZXIoYyA9PiB0eXBlb2YgYy5maWx0ZXJEZXNjcmlwdG9yICE9PSAndW5kZWZpbmVkJykubWFwKGMgPT4gYy5maWx0ZXJEZXNjcmlwdG9yISkgPz8gW107XG4gICAgICAgIHRoaXMuaGFzQ29sdW1uRmlsdGVycyA9IHRoaXMuZmlsdGVyRGVzY3JpcHRvcnMubGVuZ3RoID4gMDtcbiAgICAgICAgdGhpcy5yb3dzID0gdGhpcy5kZXNjcmlwdG9yPy5kZWZhdWx0TnVtUm93cyA/PyAyNTtcbiAgICAgICAgdGhpcy5yb3dzUGVyUGFnZU9wdGlvbnMgPSB0aGlzLmRlc2NyaXB0b3I/LnJvd3NQZXJQYWdlT3B0aW9ucyA/PyBbMjUsIDUwLCAxMDBdO1xuXG4gICAgICAgIC8vIHByb2Nlc3MgYWN0aW9uc1xuICAgICAgICBmb3IgKGNvbnN0IGFjdGlvbiBvZiB0aGlzLmFjdGlvbnMpIHtcbiAgICAgICAgICAgIHN3aXRjaCAoYWN0aW9uLnBvc2l0aW9uKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBBY3Rpb25Qb3NpdGlvbkVudW0uUm93Q2xpY2s6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucm93Q2xpY2tBY3Rpb25zLnB1c2goYWN0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBBY3Rpb25Qb3NpdGlvbkVudW0uUm93SW5saW5lOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJvd0lubGluZUFjdGlvbnMucHVzaChhY3Rpb24pO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNob3dJbmxpbmVBY3Rpb25zQ29sdW1uID0gdHlwZW9mIHRoaXMuY29sdW1uQWN0aW9uQ29tcG9uZW50ICE9PSAndW5kZWZpbmVkJyB8fCB0aGlzLnJvd0lubGluZUFjdGlvbnMubGVuZ3RoID4gMDtcblxuICAgICAgICAvLyBkZWZpbmUgYWxsIHN0eWxlc1xuICAgICAgICB0aGlzLmNsYXNzTmFtZSA9IHRoaXMuZGVzY3JpcHRvcj8uY2xhc3NOYW1lID8/ICcnO1xuICAgICAgICB0aGlzLnRhYmxlRnVsbEhlaWdodE9mZnNldCA9IHRoaXMuZGVzY3JpcHRvcj8udGFibGVGdWxsSGVpZ2h0T2Zmc2V0ID8/IG51bGw7XG4gICAgICAgIHRoaXMucm93SGVpZ2h0ID0gdGhpcy5kZXNjcmlwdG9yPy5yb3dIZWlnaHQgPz8gbnVsbDtcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmlzQ29sdW1uQ2xpY2thYmxlID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgLy8gZGVmaW5lIGlmIGNlbGwgY2xpY2sgaXMgYmVpbmcgb2JzZXJ2ZWQgdmlhIG91dHB1dFxuICAgICAgICAgICAgdGhpcy5pc0NvbHVtbkNsaWNrYWJsZSA9IHRoaXMucm93Q2xpY2tBY3Rpb25zLmxlbmd0aCA+IDAgfHwgdGhpcy5jZWxsQ2xpY2tFdmVudEVtaXR0ZXIub2JzZXJ2ZWQ7XG4gICAgICAgIH1cbiAgICAgICAgc3dpdGNoICh0aGlzLmRlc2NyaXB0b3I/LnNpemUpIHtcbiAgICAgICAgICAgIGNhc2UgVGFibGVTaXplRW51bS5TbWFsbDpcbiAgICAgICAgICAgICAgICB0aGlzLmNsYXNzTmFtZSArPSAnIHAtZGF0YXRhYmxlLXNtJztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgVGFibGVTaXplRW51bS5MYXJnZTpcbiAgICAgICAgICAgICAgICB0aGlzLmNsYXNzTmFtZSArPSAnIHAtZGF0YXRhYmxlLWxnJztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5kZXNjcmlwdG9yPy5oYXNHcmlkbGluZXMpIHtcbiAgICAgICAgICAgIHRoaXMuY2xhc3NOYW1lICs9ICcgcC1kYXRhdGFibGUtZ3JpZGxpbmVzJztcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5kZXNjcmlwdG9yICYmICF0aGlzLmNvbHVtbkFjdGlvbk1pbldpZHRoKSB7XG4gICAgICAgICAgICB0aGlzLmNvbHVtbkFjdGlvbk1pbldpZHRoID0gU3R5bGVzVXRpbC5jYWxjdWxhdGVUYWJsZUNvbHVtbkFjdGlvbldpZHRoKFxuICAgICAgICAgICAgICAgIHRoaXMuZGVzY3JpcHRvciBhcyBUYWJsZURlc2NyaXB0b3I8dW5rbm93bj4sXG4gICAgICAgICAgICAgICAgdGhpcy5yb3dJbmxpbmVBY3Rpb25zIGFzIEFycmF5PEFjdGlvbkRlc2NyaXB0b3I8dW5rbm93bj4+XG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gY2hlY2sgaWYgaW5maW5pdGUgc2Nyb2xsXG4gICAgICAgIGlmICh0aGlzLmRlc2NyaXB0b3I/LnBhZ2luYXRpb25Nb2RlID09PSBUYWJsZVBhZ2luYXRpb25Nb2RlRW51bS5JbmZpbml0ZVNjcm9sbCkge1xuICAgICAgICAgICAgdGhpcy5pbmZpbml0ZVNjcm9sbCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLnNjcm9sbEhlaWdodCA9ICdmbGV4JztcbiAgICAgICAgICAgIHRoaXMudGFibGVGdWxsSGVpZ2h0T2Zmc2V0ID0gdGhpcy5kZXNjcmlwdG9yLnRhYmxlRnVsbEhlaWdodE9mZnNldCA/PyAzMTU7XG4gICAgICAgICAgICB0aGlzLnJvd0hlaWdodCA9IHRoaXMuZGVzY3JpcHRvci5yb3dIZWlnaHQgPz8gNDU7XG4gICAgICAgICAgICB0aGlzLnVzZVF1ZXJ5UGFyYW1zID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBjaGVjayBpZiBkYXRhIHByb3ZpZGVyIGlzIHN1cHBsaWVkLCBpZiBpcywgdXNlIGl0IHByaW1hcmlseVxuICAgICAgICBpZiAodGhpcy5kYXRhUHJvdmlkZXIpIHtcbiAgICAgICAgICAgIC8vIG1hcCBzdWJqZWN0cyB0byBvYnNlcnZhYmxlcyBhbmQgaW5pdGlhdGUgZGF0YVxuICAgICAgICAgICAgdGhpcy51c2VEYXRhUHJvdmlkZXIgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5xdWVyeVJlc3VsdCQgPSB0aGlzLmRhdGFQcm92aWRlclF1ZXJ5UmVzdWx0U3ViamVjdC5hc09ic2VydmFibGUoKTtcbiAgICAgICAgICAgIHRoaXMubG9hZGluZyQgPSB0aGlzLmRhdGFQcm92aWRlckxvYWRpbmdTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuICAgICAgICAgICAgY29uc3QgZW1wdHlRdWVyeVJlc3VsdCA9IG5ldyBNZWRpdXNRdWVyeVJlc3VsdDxUPigpO1xuICAgICAgICAgICAgZW1wdHlRdWVyeVJlc3VsdC5wYWdlRGF0YSA9IFtdO1xuICAgICAgICAgICAgZW1wdHlRdWVyeVJlc3VsdC5hbGxEYXRhQ291bnQgPSAwO1xuICAgICAgICAgICAgdGhpcy5kYXRhUHJvdmlkZXJMb2FkaW5nU3ViamVjdC5uZXh0KGZhbHNlKTtcbiAgICAgICAgICAgIHRoaXMuZGF0YVByb3ZpZGVyUXVlcnlSZXN1bHRTdWJqZWN0Lm5leHQoZW1wdHlRdWVyeVJlc3VsdCk7XG5cbiAgICAgICAgICAgIC8vIGluamVjdCBzZXJ2aWNlXG4gICAgICAgICAgICBpZiAodGhpcy5kYXRhUHJvdmlkZXIuc2VydmljZVR5cGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGFQcm92aWRlclNlcnZpY2UgPSB0aGlzLmluamVjdG9yLmdldDxhbnk+KHRoaXMuZGF0YVByb3ZpZGVyLnNlcnZpY2VUeXBlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgcmVsb2FkU3Vic2NyaXB0aW9uID0gdGhpcy5kYXRhUHJvdmlkZXIuZ2V0QWxsUmVsb2FkJC5zdWJzY3JpYmUoe1xuICAgICAgICAgICAgICAgIG5leHQ6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWxvYWQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHJlbG9hZFN1YnNjcmlwdGlvbik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBpZiBxdWVyeSByZXN1bHQgaXMgcHJvdmlkZWQsIHVzZSBpdCBhcyBzZWNvbmRhcnkgc291cmNlIG9yIGVsc2UgdHJ5IHRvIHVzZSBpdGVtc1xuICAgICAgICAgICAgaWYgKHRoaXMucXVlcnlSZXN1bHQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnF1ZXJ5UmVzdWx0JCA9IHRoaXMucXVlcnlSZXN1bHQgaW5zdGFuY2VvZiBPYnNlcnZhYmxlID8gdGhpcy5xdWVyeVJlc3VsdCA6IG9mKHRoaXMucXVlcnlSZXN1bHQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnF1ZXJ5UmVzdWx0JCA9IChpc09ic2VydmFibGUodGhpcy5pdGVtcykgPyB0aGlzLml0ZW1zIDogdGhpcy5pdGVtc1N1YmplY3QuYXNPYnNlcnZhYmxlKCkpLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgIC8vIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCh2MSwgdjIpID0+IHYxLmxlbmd0aCA9PT0gdjIubGVuZ3RoICYmXG4gICAgICAgICAgICAgICAgICAgIC8vICAgICB2MS5ldmVyeSgodjFpLCBpZHgpID0+IHYxaVt0aGlzLmRlc2NyaXB0b3IuZGF0YUtleVByb3BlcnR5XSA9PT0gdjJbaWR4XVt0aGlzLmRlc2NyaXB0b3IuZGF0YUtleVByb3BlcnR5XSkpLFxuICAgICAgICAgICAgICAgICAgICBtYXAoaXRlbXMgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcXVlcnlSZXN1bHQgPSBuZXcgTWVkaXVzUXVlcnlSZXN1bHQ8VD4oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5UmVzdWx0LnBhZ2VEYXRhID0gaXRlbXM7XG4gICAgICAgICAgICAgICAgICAgICAgICBxdWVyeVJlc3VsdC5hbGxEYXRhQ291bnQgPSBpdGVtcy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcXVlcnlSZXN1bHQ7XG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBpZiAoIWlzT2JzZXJ2YWJsZSh0aGlzLml0ZW1zKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLml0ZW1zU3ViamVjdC5uZXh0KHRoaXMuaXRlbXMgPz8gW10pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0eXBlb2YgdGhpcy5sb2FkaW5nICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZyQgPSB0aGlzLmxvYWRpbmcgaW5zdGFuY2VvZiBPYnNlcnZhYmxlID8gdGhpcy5sb2FkaW5nIDogb2YodGhpcy5sb2FkaW5nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGluaXRpYWxRdWVyeVBhcmFtTWFwID0gdGhpcy5yb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtTWFwO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLnVzZVF1ZXJ5UGFyYW1zICYmXG4gICAgICAgICAgICAoKCFpbml0aWFsUXVlcnlQYXJhbU1hcC5oYXMoJ3NvcnQnKSAmJiB0aGlzLmRlc2NyaXB0b3I/Lmhhc0RlZmF1bHRTb3J0KSB8fFxuICAgICAgICAgICAgICAgICghaW5pdGlhbFF1ZXJ5UGFyYW1NYXAuaGFzKCdmaWx0ZXInKSAmJiB0aGlzLmZpbHRlckRlc2NyaXB0b3JzLnNvbWUoZmQgPT4gZmQuaGFzRGVmYXVsdFZhbHVlKSkpXG4gICAgICAgICkge1xuICAgICAgICAgICAgLy8gZGVmYXVsdCBzb3J0L2ZpbHRlcnMgYXJlIGFwcGxpZWQsIG5vIGFkZGl0aW9uYWwgZmlsdGVyaW5nL3NvcnRpbmcgaXMgc3BlY2lmaWVkIGluIHF1ZXJ5IHBhcmFtXG4gICAgICAgICAgICAvLyByZWRpcmVjdCBtdXN0IGJlIGRvbmUgYXQgZmlyc3Qgc3RlcFxuICAgICAgICAgICAgY29uc3QgbWVkaXVzUXVlcnlQYXJhbSA9IE1lZGl1c1Jlc3RVdGlsLmZyb21Bbmd1bGFyUXVlcnlQYXJhbXNUb01lZGl1c1F1ZXJ5UGFyYW1zKHRoaXMucm91dGUuc25hcHNob3QucXVlcnlQYXJhbXMsIHRoaXMuZmlsdGVyRGVzY3JpcHRvcnMsIHRoaXMucm93c1BlclBhZ2VPcHRpb25zWzBdKTtcblxuICAgICAgICAgICAgY29uc3QgZXZlbnQ6IExhenlMb2FkRXZlbnQgPSB7fTtcbiAgICAgICAgICAgIGV2ZW50Lm11bHRpU29ydE1ldGEgPSB0aGlzLmNyZWF0ZVNvcnRNZXRhKG1lZGl1c1F1ZXJ5UGFyYW0pO1xuICAgICAgICAgICAgZXZlbnQuZmlsdGVycyA9IHRoaXMuY3JlYXRlRmlsdGVyTWV0YShtZWRpdXNRdWVyeVBhcmFtKTtcblxuICAgICAgICAgICAgLy8gZmlyc3QgbmF2aWdhdGUgdG8gY29ycmVjdCB1cmwgd2l0aCBkZWZhdWx0IGZpbHRlcnMvc29ydHNcbiAgICAgICAgICAgIHRoaXMucm91dGVyXG4gICAgICAgICAgICAgICAgLm5hdmlnYXRlKFtdLCB7XG4gICAgICAgICAgICAgICAgICAgIHJlbGF0aXZlVG86IHRoaXMucm91dGUsXG4gICAgICAgICAgICAgICAgICAgIHJlcGxhY2VVcmw6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIHF1ZXJ5UGFyYW1zOiBNZWRpdXNSZXN0VXRpbC5mcm9tUHJpbWVMYXp5TG9hZEV2ZW50VG9Bbmd1bGFyUXVlcnlQYXJhbXMoZXZlbnQsIHRoaXMucm93c1BlclBhZ2VPcHRpb25zWzBdKVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmluaXRpYWxpemVEYXRhTG9hZGluZ1RyaWdnZXJzKCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmluaXRpYWxpemVEYXRhTG9hZGluZ1RyaWdnZXJzKCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnF1ZXJ5UmVzdWx0U3Vic2NyaXB0aW9uID0gdGhpcy5xdWVyeVJlc3VsdCQuc3Vic2NyaWJlKGUgPT4gKHRoaXMucXVlcnlSZXN1bHQgPSBlKSk7XG4gICAgfVxuXG4gICAgcHVibGljIG5nQWZ0ZXJDb250ZW50SW5pdCgpIHtcbiAgICAgICAgdGhpcy50ZW1wbGF0ZXMuZm9yRWFjaCh0ZW1wbGF0ZSA9PiB7XG4gICAgICAgICAgICBzd2l0Y2ggKHRlbXBsYXRlLmdldFR5cGUoKSkge1xuICAgICAgICAgICAgICAgIGNhc2UgJ2NhcHRpb24nOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNhcHRpb25UZW1wbGF0ZSA9IHRlbXBsYXRlLnRlbXBsYXRlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdjb2x1bW5BY3Rpb24nOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbHVtbkFjdGlvblRlbXBsYXRlID0gdGVtcGxhdGUudGVtcGxhdGU7XG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5zaG93SW5saW5lQWN0aW9uc0NvbHVtbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93SW5saW5lQWN0aW9uc0NvbHVtbiA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnZm9vdGVyJzpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb290ZXJUZW1wbGF0ZSA9IHRlbXBsYXRlLnRlbXBsYXRlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgICAgICBpZiAoY2hhbmdlc1snaXRlbXMnXSAmJiAhY2hhbmdlc1snaXRlbXMnXS5maXJzdENoYW5nZSAmJiBBcnJheS5pc0FycmF5KGNoYW5nZXNbJ2l0ZW1zJ10uY3VycmVudFZhbHVlKSkge1xuICAgICAgICAgICAgdGhpcy5pdGVtc1N1YmplY3QubmV4dChjaGFuZ2VzWydpdGVtcyddLmN1cnJlbnRWYWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMuZGF0YVByb3ZpZGVyU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgICAgICB0aGlzLnF1ZXJ5UmVzdWx0U3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChzID0+IHMudW5zdWJzY3JpYmUoKSk7XG4gICAgfVxuXG4gICAgcHVibGljIHJlbG9hZChlbWl0RXZlbnQgPSBmYWxzZSwgcmVzZXRQYXJhbXMgPSBmYWxzZSkge1xuICAgICAgICBjb25zdCBxdWVyeVBhcmFtc0J1aWxkZXIgPSByZXNldFBhcmFtc1xuICAgICAgICAgICAgPyBNZWRpdXNRdWVyeVBhcmFtQnVpbGRlci5jcmVhdGUodGhpcy5yb3dzUGVyUGFnZU9wdGlvbnNbMF0sIDApXG4gICAgICAgICAgICA6IE1lZGl1c1F1ZXJ5UGFyYW1CdWlsZGVyLmNyZWF0ZUZyb21FeGlzdGluZyh0aGlzLmRhdGFQcm92aWRlckxhdGVzdFF1ZXJ5UGFyYW0gPz8gbmV3IE1lZGl1c1F1ZXJ5UGFyYW0oKSlcbiAgICAgICAgICAgICAgICAgIC53aXRoSXRlbXNQZXJQYWdlKHRoaXMucm93cylcbiAgICAgICAgICAgICAgICAgIC53aXRoSXRlbXNPZmZzZXQodGhpcy5vZmZzZXQpO1xuXG4gICAgICAgIHRoaXMubG9hZFRhYmxlV2l0aERhdGFQcm92aWRlcihxdWVyeVBhcmFtc0J1aWxkZXIuYnVpbGQoKSwgZW1pdEV2ZW50KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25UYWJsZUxhenlMb2FkKGV2ZW50OiBMYXp5TG9hZEV2ZW50KSB7XG4gICAgICAgIHRoaXMuZGF0YVByb3ZpZGVyTGF0ZXN0TGF6eUxvYWRFdmVudCA9IGV2ZW50O1xuICAgICAgICB0aGlzLmRhdGFQcm92aWRlckxhdGVzdExhenlMb2FkRXZlbnRWZXJzaW9uKys7XG5cbiAgICAgICAgaWYgKHRoaXMudXNlUXVlcnlQYXJhbXMpIHtcbiAgICAgICAgICAgIGlmICghZXZlbnQubXVsdGlTb3J0TWV0YSB8fCBldmVudC5tdWx0aVNvcnRNZXRhLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIC8vIGFkZCBkZWZhdWx0IHNvcnQgbWV0YSB0byBldmVudCBpZiBub3QgbXVsdGlzb3J0IG1ldGEgaXMgcHJlc2VudFxuICAgICAgICAgICAgICAgIGV2ZW50Lm11bHRpU29ydE1ldGEgPSB0aGlzLmNyZWF0ZVNvcnRNZXRhKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIWV2ZW50LmZpbHRlcnMpIHtcbiAgICAgICAgICAgICAgICBldmVudC5maWx0ZXJzID0gdGhpcy5jcmVhdGVGaWx0ZXJNZXRhKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtdLCB7XG4gICAgICAgICAgICAgICAgcmVsYXRpdmVUbzogdGhpcy5yb3V0ZSxcbiAgICAgICAgICAgICAgICByZXBsYWNlVXJsOiB0cnVlLFxuICAgICAgICAgICAgICAgIHF1ZXJ5UGFyYW1zOiBNZWRpdXNSZXN0VXRpbC5mcm9tUHJpbWVMYXp5TG9hZEV2ZW50VG9Bbmd1bGFyUXVlcnlQYXJhbXMoZXZlbnQsIHRoaXMucm93c1BlclBhZ2VPcHRpb25zWzBdKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBtZWRpdXNRdWVyeVBhcmFtcyA9IGV2ZW50ID8gTWVkaXVzUmVzdFV0aWwuZnJvbVByaW1lTGF6eUxvYWRFdmVudFRvTWVkaXVzUXVlcnlQYXJhbXMoZXZlbnQpIDogbmV3IE1lZGl1c1F1ZXJ5UGFyYW0oKTtcbiAgICAgICAgICAgIHRoaXMubG9hZFRhYmxlV2l0aERhdGFQcm92aWRlcihtZWRpdXNRdWVyeVBhcmFtcyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgcHVibGljIG9uVGFibGVTb3J0KGV2ZW50OiBhbnkpIHtcbiAgICAgICAgdGhpcy5pc1NvcnRDaGFuZ2VkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgcHVibGljIG9uVGFibGVGaWx0ZXIoZXZlbnQ6IGFueSkge1xuICAgICAgICB0aGlzLmlzRmlsdGVyQ2hhbmdlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgcHVibGljIG9uQ2VsbENsaWNrKGV2ZW50OiBFdmVudCwgY29sOiBDb2x1bW5EZXNjcmlwdG9yPGFueSwgVD4sIGl0ZW06IFQsIGlkeDogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IG1uZ0V2ZW50ID0gbmV3IE1uZ1RhYmxlQ2VsbENsaWNrRXZlbnQ8VD4oY29sLCBpdGVtLCBpZHgpO1xuICAgICAgICB0aGlzLmNlbGxDbGlja0V2ZW50RW1pdHRlci5uZXh0KG1uZ0V2ZW50KTtcbiAgICAgICAgaWYgKHRoaXMucm93Q2xpY2tBY3Rpb25zLmxlbmd0aCkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBhY3Rpb24gb2YgdGhpcy5yb3dDbGlja0FjdGlvbnMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFjdGlvbkV4ZWN1dG9yLnRyaWdnZXJSb3dDbGlja0FjdGlvbihhY3Rpb24sIG1uZ0V2ZW50LCB0aGlzLnJvdXRlLCB0aGlzLmRlc2NyaXB0b3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIG9uU2VsZWN0aW9uQ2hhbmdlKGV2ZW50OiBBcnJheTxUPikge1xuICAgICAgICB0aGlzLnNlbGVjdGlvbkNoYW5nZUV2ZW50RW1pdHRlci5lbWl0KGV2ZW50KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25DYXB0aW9uQ21wSW5zdDxDPihpbnN0YW5jZTogQykge1xuICAgICAgICB0aGlzLmNhcHRpb25DbXBJbnN0RXZlbnRFbWl0dGVyLm5leHQoaW5zdGFuY2UpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbkNvbHVtbkFjdGlvbkNtcEluc3Q8Qz4oaW5zdGFuY2U6IEMpIHtcbiAgICAgICAgdGhpcy5jb2x1bW5BY3Rpb25DbXBJbnN0RXZlbnRFbWl0dGVyLm5leHQoaW5zdGFuY2UpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbkFjdGlvbkZpbmlzaChydW5SZXN1bHQ6IEFjdGlvbkluc3RhbmNlPFQsIHVua25vd24+KSB7XG4gICAgICAgIGlmICghcnVuUmVzdWx0LmVycm9yKSB7XG4gICAgICAgICAgICB0aGlzLnJlbG9hZCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBsb2FkVGFibGVXaXRoRGF0YVByb3ZpZGVyKHF1ZXJ5UGFyYW06IE1lZGl1c1F1ZXJ5UGFyYW0gfCBudWxsID0gbnVsbCwgZW1pdEV2ZW50ID0gdHJ1ZSkge1xuICAgICAgICBpZiAoIXRoaXMudXNlRGF0YVByb3ZpZGVyKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmRhdGFQcm92aWRlclN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgdGhpcy5kYXRhUHJvdmlkZXJMb2FkaW5nU3ViamVjdC5uZXh0KHRydWUpO1xuXG4gICAgICAgIGlmICghcXVlcnlQYXJhbSkge1xuICAgICAgICAgICAgcXVlcnlQYXJhbSA9IE1lZGl1c1F1ZXJ5UGFyYW1CdWlsZGVyLmNyZWF0ZSh0aGlzLnJvd3NQZXJQYWdlT3B0aW9uc1swXSkuYnVpbGQoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmRhdGFQcm92aWRlckxhdGVzdFF1ZXJ5UGFyYW0gPSBxdWVyeVBhcmFtO1xuICAgICAgICB0aGlzLmRhdGFQcm92aWRlckxhdGVzdFF1ZXJ5UGFyYW1WZXJzaW9uKys7XG5cbiAgICAgICAgTWVkaXVzUmVzdFV0aWwubW9kaWZ5RmlsdGVyUHJvcGVydGllcyhxdWVyeVBhcmFtLCB0aGlzLmZpbHRlckRlc2NyaXB0b3JzKTtcblxuICAgICAgICB0aGlzLmRhdGFQcm92aWRlclN1YnNjcmlwdGlvbiA9IHRoaXMuZGF0YVByb3ZpZGVyPy5nZXRBbGwocXVlcnlQYXJhbSwgdGhpcy5kYXRhUHJvdmlkZXJTZXJ2aWNlKS5zdWJzY3JpYmUoe1xuICAgICAgICAgICAgbmV4dDogcmVzID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pbml0aWFsRGVzY3JpcHRvciBpbnN0YW5jZW9mIFRhYmxlRHluYW1pY0Rlc2NyaXB0b3IpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXNjcmlwdG9yID0gdGhpcy5pbml0aWFsRGVzY3JpcHRvci50b1RhYmxlRGVzY3JpcHRvckZyb21EYXRhKHJlcyk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVyRGVzY3JpcHRvcnMgPSB0aGlzLmRlc2NyaXB0b3IuY29sdW1ucy5maWx0ZXIoYyA9PiB0eXBlb2YgYy5maWx0ZXJEZXNjcmlwdG9yICE9PSAndW5kZWZpbmVkJykubWFwKGMgPT4gYy5maWx0ZXJEZXNjcmlwdG9yISk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaGFzQ29sdW1uRmlsdGVycyA9IHRoaXMuZmlsdGVyRGVzY3JpcHRvcnMubGVuZ3RoID4gMDtcbiAgICAgICAgICAgICAgICAgICAgLy8gfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gICAgIHRoaXMuZGVzY3JpcHRvciA9IHRoaXMuaW5pdGlhbERlc2NyaXB0b3Iub25EYXRhUmVjZWl2ZWRUeXBlQnVpbGRpbmcocmVzKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pbmZpbml0ZVNjcm9sbCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5pc0ZpbHRlckNoYW5nZWQgfHwgdGhpcy5pc1NvcnRDaGFuZ2VkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGFQcm92aWRlckluZmluaXRlU2Nyb2xsSXRlbXMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGFQcm92aWRlckluZmluaXRlU2Nyb2xsSXRlbXMuc3BsaWNlKHF1ZXJ5UGFyYW0hLml0ZW1zT2Zmc2V0ID8/IDAsIHF1ZXJ5UGFyYW0hLml0ZW1zUGVyUGFnZSA/PyB0aGlzLnJvd3MsIC4uLihyZXMucGFnZURhdGEgPz8gW10pKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhUHJvdmlkZXJJbmZpbml0ZVNjcm9sbEl0ZW1zID0gWy4uLnRoaXMuZGF0YVByb3ZpZGVySW5maW5pdGVTY3JvbGxJdGVtc107XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhUHJvdmlkZXJRdWVyeVJlc3VsdFN1YmplY3QubmV4dChyZXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLmlzRmlsdGVyQ2hhbmdlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuaXNTb3J0Q2hhbmdlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuZGF0YVByb3ZpZGVyTG9hZGluZ1N1YmplY3QubmV4dChmYWxzZSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3I6IGVyciA9PiB7XG4gICAgICAgICAgICAgICAgLy8gVE9ETzogY2hlY2sgd2hhdCBoYXBwZW5zIG9uIGVycm9yIHdpdGggbm8gbW9kZWwgaW5pc2lkZSBkZXNjcmlwdG9yXG4gICAgICAgICAgICAgICAgTm90aWZpY2F0aW9uVXRpbC50YWJsZU5vdGlmaWNhdGlvbkVycm9yKHRoaXMudHJhbnNsYXRlLCB0aGlzLmRlc2NyaXB0b3IhLCBlcnIsIHRoaXMudmlld0NvbnRhaW5lcik7XG4gICAgICAgICAgICAgICAgY29uc3QgZW1wdHlRdWVyeVJlc3VsdCA9IG5ldyBNZWRpdXNRdWVyeVJlc3VsdDxUPigpO1xuICAgICAgICAgICAgICAgIGVtcHR5UXVlcnlSZXN1bHQucGFnZURhdGEgPSBbXTtcbiAgICAgICAgICAgICAgICBlbXB0eVF1ZXJ5UmVzdWx0LmFsbERhdGFDb3VudCA9IDA7XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhUHJvdmlkZXJRdWVyeVJlc3VsdFN1YmplY3QubmV4dChlbXB0eVF1ZXJ5UmVzdWx0KTtcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGFQcm92aWRlckxvYWRpbmdTdWJqZWN0Lm5leHQoZmFsc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAoZW1pdEV2ZW50KSB7XG4gICAgICAgICAgICBjb25zdCBtbmdFdmVudCA9IG5ldyBNbmdUYWJsZUxvYWRFdmVudCgpO1xuICAgICAgICAgICAgbW5nRXZlbnQub3JpZ2luYWxFdmVudCA9IHRoaXMuZGF0YVByb3ZpZGVyTGF0ZXN0TGF6eUxvYWRFdmVudCA/PyB1bmRlZmluZWQ7XG4gICAgICAgICAgICBtbmdFdmVudC5xdWVyeVBhcmFtID0gcXVlcnlQYXJhbTtcbiAgICAgICAgICAgIHRoaXMubG9hZEV2ZW50RW1pdHRlci5uZXh0KG1uZ0V2ZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgbG9hZFRhYmxlRnJvbVJvdXRlVXBkYXRlKHBhcmFtczogUGFyYW1zKSB7XG4gICAgICAgIGNvbnN0IG1lZGl1c1F1ZXJ5UGFyYW0gPSBNZWRpdXNSZXN0VXRpbC5mcm9tQW5ndWxhclF1ZXJ5UGFyYW1zVG9NZWRpdXNRdWVyeVBhcmFtcyhwYXJhbXMsIHRoaXMuZmlsdGVyRGVzY3JpcHRvcnMsIHRoaXMucm93c1BlclBhZ2VPcHRpb25zWzBdKTtcbiAgICAgICAgaWYgKHRoaXMuZGF0YVByb3ZpZGVyTGF0ZXN0TGF6eUxvYWRFdmVudFZlcnNpb24gPCB0aGlzLmRhdGFQcm92aWRlckxhdGVzdFF1ZXJ5UGFyYW1WZXJzaW9uICsgMSkge1xuICAgICAgICAgICAgLy8gdXBkYXRlIG9ubHkgaWYgbmV3IHZlcnNpb24gZnJvbSBxdWVyeSBwYXJhbXMgd2lsbCBiZSBoaWdoZXJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlUHJpbWVTb3J0QW5kRmlsdGVyKG1lZGl1c1F1ZXJ5UGFyYW0pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudXNlUXVlcnlQYXJhbXNJbml0aWFsaXplZFN1YmVqY3QubmV4dCh0cnVlKTtcbiAgICAgICAgdGhpcy5sb2FkVGFibGVXaXRoRGF0YVByb3ZpZGVyKG1lZGl1c1F1ZXJ5UGFyYW0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlUHJpbWVTb3J0QW5kRmlsdGVyKG1lZGl1c1F1ZXJ5UGFyYW06IE1lZGl1c1F1ZXJ5UGFyYW0pIHtcbiAgICAgICAgdGhpcy5tdWx0aVNvcnRNZXRhID0gdGhpcy5jcmVhdGVTb3J0TWV0YShtZWRpdXNRdWVyeVBhcmFtKTtcbiAgICAgICAgdGhpcy5maWx0ZXJNZXRhZGF0YSA9IHRoaXMuY3JlYXRlRmlsdGVyTWV0YShtZWRpdXNRdWVyeVBhcmFtKTtcbiAgICAgICAgdGhpcy5yb3dzID0gbWVkaXVzUXVlcnlQYXJhbT8uaXRlbXNQZXJQYWdlID8/IHRoaXMucm93c1BlclBhZ2VPcHRpb25zWzBdO1xuICAgICAgICB0aGlzLm9mZnNldCA9IG1lZGl1c1F1ZXJ5UGFyYW0/Lml0ZW1zT2Zmc2V0ID8/IDA7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjcmVhdGVGaWx0ZXJNZXRhKG1lZGl1c1F1ZXJ5UGFyYW0/OiBNZWRpdXNRdWVyeVBhcmFtKSB7XG4gICAgICAgIGxldCBwYXJhbXM6IE1lZGl1c1F1ZXJ5UGFyYW07XG4gICAgICAgIGlmICghbWVkaXVzUXVlcnlQYXJhbSkge1xuICAgICAgICAgICAgcGFyYW1zID0gbmV3IE1lZGl1c1F1ZXJ5UGFyYW0oKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBhcmFtcyA9IG1lZGl1c1F1ZXJ5UGFyYW07XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwcmltZUZpbHRlck1ldGE6IHtbczogc3RyaW5nXTogRmlsdGVyTWV0YWRhdGF9ID0ge307XG4gICAgICAgIC8vIGlmIGFueSBmaWx0ZXIgaXMgcHJlc2VudCwgbm8gZGVmYXVsdCBmaWx0ZXJzIHNob3VsZCBiZSBhcHBsaWVkIVxuICAgICAgICBjb25zdCBhcHBseURlZmF1bHRGaWx0ZXJzID0gKHBhcmFtcy5maWx0ZXJQYXJhbXM/Lmxlbmd0aCA/PyAwKSA9PT0gMDtcblxuICAgICAgICB0aGlzLmZpbHRlckRlc2NyaXB0b3JzLmZvckVhY2goZiA9PiB7XG4gICAgICAgICAgICBsZXQgbWF0Y2hNb2RlO1xuICAgICAgICAgICAgaWYgKGYuZGVmYXVsdEZpbHRlck1hdGNoTW9kZSkge1xuICAgICAgICAgICAgICAgIG1hdGNoTW9kZSA9IGYuZGVmYXVsdEZpbHRlck1hdGNoTW9kZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoIChmLmZpbHRlclR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBGaWx0ZXJUeXBlRW51bS5TdHJpbmc6XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRjaE1vZGUgPSBGaWx0ZXJNYXRjaE1vZGUuQ09OVEFJTlM7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBGaWx0ZXJUeXBlRW51bS5EYXRlOlxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hNb2RlID0gRmlsdGVyTWF0Y2hNb2RlLkRBVEVfSVM7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBGaWx0ZXJUeXBlRW51bS5Mb29rdXA6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgRmlsdGVyVHlwZUVudW0uTG9va3VwRW51bToge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbG9va3VwRmlsdGVyID0gZiBhcyBGaWx0ZXJMb29rdXBEZXNjcmlwdG9yPGFueT47XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobG9va3VwRmlsdGVyLm11bHRpc2VsZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hNb2RlID0gRmlsdGVyTWF0Y2hNb2RlLklOO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaE1vZGUgPSBGaWx0ZXJNYXRjaE1vZGUuRVFVQUxTO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoTW9kZSA9IEZpbHRlck1hdGNoTW9kZS5FUVVBTFM7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxldCB2YWx1ZSA9IG51bGw7XG4gICAgICAgICAgICBpZiAoYXBwbHlEZWZhdWx0RmlsdGVycykge1xuICAgICAgICAgICAgICAgIGlmIChmLmRlZmF1bHRWYWx1ZVRvICYmIGYuZGVmYXVsdFZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gW2YuZGVmYXVsdFZhbHVlLCBmLmRlZmF1bHRWYWx1ZVRvXTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGYuZGVmYXVsdFZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gZi5kZWZhdWx0VmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBwcmltZUZpbHRlck1ldGFbZi5wcm9wZXJ0eV0gPSB7XG4gICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgICAgICAgIG1hdGNoTW9kZTogbWF0Y2hNb2RlXG4gICAgICAgICAgICB9O1xuICAgICAgICB9KTtcblxuICAgICAgICBwYXJhbXMuZmlsdGVyUGFyYW1zPy5mb3JFYWNoKGYgPT4ge1xuICAgICAgICAgICAgY29uc3QgZGVzY3JpcHRvciA9IHRoaXMuZmlsdGVyRGVzY3JpcHRvcnMuZmluZChmZCA9PiBmZC5maWx0ZXJQcm9wZXJ0eSA9PT0gZi5wcm9wZXJ0eSB8fCBmZC5wcm9wZXJ0eSA9PT0gZi5wcm9wZXJ0eSk7XG4gICAgICAgICAgICBjb25zdCBtYXRjaE1vZGUgPSBmLmZpbHRlck1hdGNoVHlwZSAmJiBkZXNjcmlwdG9yID8gTWVkaXVzUmVzdFV0aWwuZ2V0TWFwcGluZyhmLmZpbHRlck1hdGNoVHlwZSwgZGVzY3JpcHRvci5maWx0ZXJUeXBlLCAyKT8uWzBdIDogTWVkaXVzRmlsdGVyTWF0Y2hUeXBlLkVxdWFscztcbiAgICAgICAgICAgIGlmIChkZXNjcmlwdG9yICYmIG1hdGNoTW9kZSkge1xuICAgICAgICAgICAgICAgIGxldCBmaWx0ZXJWYWx1ZSA9IGYuZmlsdGVyVmFsdWU7XG4gICAgICAgICAgICAgICAgaWYgKGRlc2NyaXB0b3IuZmlsdGVyVHlwZSA9PT0gRmlsdGVyVHlwZUVudW0uRGF0ZSAmJiB0eXBlb2YgZmlsdGVyVmFsdWUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZmlsdGVyVmFsdWUgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBmaWx0ZXJWYWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlclZhbHVlID0gbmV3IERhdGUoZmlsdGVyVmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8vIGlmIHJhbmdlIGlzIHByb3ZpZGVkLCB0YWtlIHRoYXQgaW50byBhY2NvdW50XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZi5maWx0ZXJWYWx1ZVRvID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgZi5maWx0ZXJWYWx1ZVRvID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZmlsdGVyVmFsdWVUbyA9IG5ldyBEYXRlKGYuZmlsdGVyVmFsdWVUbyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJWYWx1ZSA9IFtmaWx0ZXJWYWx1ZSwgZmlsdGVyVmFsdWVUb107XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcHJpbWVGaWx0ZXJNZXRhW2Rlc2NyaXB0b3IucHJvcGVydHldID0ge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZmlsdGVyVmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIG1hdGNoTW9kZTogbWF0Y2hNb2RlXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBwcmltZUZpbHRlck1ldGE7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjcmVhdGVTb3J0TWV0YShtZWRpdXNRdWVyeVBhcmFtPzogTWVkaXVzUXVlcnlQYXJhbSk6IFNvcnRNZXRhW10ge1xuICAgICAgICBsZXQgcGFyYW1zOiBNZWRpdXNRdWVyeVBhcmFtO1xuICAgICAgICBpZiAoIW1lZGl1c1F1ZXJ5UGFyYW0pIHtcbiAgICAgICAgICAgIHBhcmFtcyA9IG5ldyBNZWRpdXNRdWVyeVBhcmFtKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwYXJhbXMgPSBtZWRpdXNRdWVyeVBhcmFtO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHNvcnRNZXRhOiBTb3J0TWV0YVtdO1xuICAgICAgICBjb25zdCBhcHBseURlZmF1bHRTb3J0cyA9IChwYXJhbXMuc29ydFByb3BlcnR5Py5sZW5ndGggPz8gMCkgPT09IDA7XG5cbiAgICAgICAgaWYgKGFwcGx5RGVmYXVsdFNvcnRzICYmIHRoaXMuZGVzY3JpcHRvcj8uaGFzRGVmYXVsdFNvcnQpIHtcbiAgICAgICAgICAgIHNvcnRNZXRhID0gdGhpcy5kZXNjcmlwdG9yLmRlZmF1bHRTb3J0UHJvcGVydHkubWFwKFxuICAgICAgICAgICAgICAgIChwLCBpZHgpID0+XG4gICAgICAgICAgICAgICAgICAgIDxTb3J0TWV0YT57XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWVsZDogcCxcbiAgICAgICAgICAgICAgICAgICAgICAgIG9yZGVyOiB0aGlzLmRlc2NyaXB0b3IhLmRlZmF1bHRTb3J0QXNjW2lkeF0gPyAxIDogLTFcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHNvcnRNZXRhID0gW107XG4gICAgICAgIH1cblxuICAgICAgICBwYXJhbXMuc29ydFByb3BlcnR5Py5mb3JFYWNoKChzLCBpZHgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGV4aXN0aW5nSW5kZXggPSBzb3J0TWV0YS5maW5kSW5kZXgodmFsdWUgPT4gdmFsdWUuZmllbGQgPT09IHMpO1xuICAgICAgICAgICAgaWYgKGV4aXN0aW5nSW5kZXggPiAtMSkge1xuICAgICAgICAgICAgICAgIHNvcnRNZXRhW2V4aXN0aW5nSW5kZXhdLm9yZGVyID0gcGFyYW1zLnNvcnRBc2M/LltpZHhdID8/IHRydWUgPyAxIDogLTE7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHNvcnRNZXRhLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICBmaWVsZDogcyxcbiAgICAgICAgICAgICAgICAgICAgb3JkZXI6IHBhcmFtcy5zb3J0QXNjPy5baWR4XSA/PyB0cnVlID8gMSA6IC0xXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBzb3J0TWV0YTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGluaXRpYWxpemVEYXRhTG9hZGluZ1RyaWdnZXJzKCkge1xuICAgICAgICBpZiAodGhpcy51c2VRdWVyeVBhcmFtcykge1xuICAgICAgICAgICAgLy8gdHJpZ2dlciB0YWJsZSBsb2FkcyBmcm9tIHJvdXRlIHVwZGF0ZXNcbiAgICAgICAgICAgIGNvbnN0IHN1YnNjcmlwdGlvbiA9IHRoaXMucm91dGUucXVlcnlQYXJhbXMuc3Vic2NyaWJlKHFwID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRUYWJsZUZyb21Sb3V0ZVVwZGF0ZShxcCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHN1YnNjcmlwdGlvbik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBsb2FkIGRhdGEgaW1tZWRpYXRlbHkgYnkgY3JlYXRpbmcgZGVmYXVsdCBzb3J0cyBhbmQgZmlsdGVycyAocHJpbWVuZyB3aWxsIHRyaWdnZXIgb25MYXp5TG9hZCBldmVudCBvbiBzb3J0JmZpbHRlciBtZXRhZGF0YSBjaGFuZ2UpXG4gICAgICAgICAgICBjb25zdCBkZWZhdWx0U29ydCA9IHRoaXMuY3JlYXRlU29ydE1ldGEoKTtcbiAgICAgICAgICAgIGlmIChkZWZhdWx0U29ydC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5tdWx0aVNvcnRNZXRhID0gZGVmYXVsdFNvcnQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGRlZmF1bHRGaWx0ZXIgPSB0aGlzLmNyZWF0ZUZpbHRlck1ldGEoKTtcbiAgICAgICAgICAgIGlmIChkZWZhdWx0RmlsdGVyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5maWx0ZXJNZXRhZGF0YSA9IGRlZmF1bHRGaWx0ZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCI8ZGl2IFtzdHlsZS5oZWlnaHRdPVwic2Nyb2xsSGVpZ2h0ID09PSAnZmxleCcgPyAnY2FsYygxMDB2aCAtICcgKyB0YWJsZUZ1bGxIZWlnaHRPZmZzZXQgKyAncHgpJyA6IG51bGxcIj5cbiAgICA8IS0tIE1VU1QgTk9UIHVzZSBvYnNlcnZhYmxlIGZvciB2YWx1ZSB3aGVuIHVzaW5nIHZpcnR1YWwgc2Nyb2xsIC0gZG9lcyBub3Qgd29yayBmb3Igc29tZSByZWFzb24gLS0+XG4gICAgPHAtdGFibGVcbiAgICAgICAgKm5nSWY9XCIhdXNlUXVlcnlQYXJhbXMgfHwgKHVzZVF1ZXJ5UGFyYW1zSW5pdGlhbGl6ZWQkIHwgYXN5bmMpXCJcbiAgICAgICAgW3ZhbHVlXT1cImluZmluaXRlU2Nyb2xsID8gZGF0YVByb3ZpZGVySW5maW5pdGVTY3JvbGxJdGVtcyA6IChxdWVyeVJlc3VsdCQgfCBhc3luYyk/LnBhZ2VEYXRhID8/IFtdXCJcbiAgICAgICAgW2RhdGFLZXldPVwiJGFueShkZXNjcmlwdG9yPy5kYXRhS2V5UHJvcGVydHkgPz8gbnVsbClcIlxuICAgICAgICBbbGF6eV09XCJ1c2VEYXRhUHJvdmlkZXJcIlxuICAgICAgICBbbG9hZGluZ109XCIobG9hZGluZyQgfCBhc3luYykgPz8gZmFsc2VcIlxuICAgICAgICBbcGFnaW5hdG9yXT1cInVzZURhdGFQcm92aWRlciAmJiAhaW5maW5pdGVTY3JvbGxcIlxuICAgICAgICBbcm93c109XCIkYW55KGluZmluaXRlU2Nyb2xsID8gMjAgOiByb3dzKVwiXG4gICAgICAgIFtmaXJzdF09XCIkYW55KGluZmluaXRlU2Nyb2xsID8gMCA6IG9mZnNldClcIlxuICAgICAgICBbdG90YWxSZWNvcmRzXT1cIiRhbnkoaW5maW5pdGVTY3JvbGwgPyBudWxsIDogKHF1ZXJ5UmVzdWx0JCB8IGFzeW5jKT8uYWxsRGF0YUNvdW50ID8/IDApXCJcbiAgICAgICAgW3Jvd3NQZXJQYWdlT3B0aW9uc109XCIkYW55KGluZmluaXRlU2Nyb2xsID8gbnVsbCA6IHJvd3NQZXJQYWdlT3B0aW9ucylcIlxuICAgICAgICBbc2hvd0N1cnJlbnRQYWdlUmVwb3J0XT1cIiFpbmZpbml0ZVNjcm9sbFwiXG4gICAgICAgIFtjdXJyZW50UGFnZVJlcG9ydFRlbXBsYXRlXT1cIidtbmdUYWJsZS5wYWdpbmF0aW9uTXNnJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgIFttdWx0aVNvcnRNZXRhXT1cIiRhbnkobXVsdGlTb3J0TWV0YSlcIlxuICAgICAgICBbZmlsdGVyc109XCJmaWx0ZXJNZXRhZGF0YVwiXG4gICAgICAgIFsoc2VsZWN0aW9uKV09XCJzZWxlY3Rpb25cIlxuICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cIm9uU2VsZWN0aW9uQ2hhbmdlKCRldmVudClcIlxuICAgICAgICBbc2Nyb2xsYWJsZV09XCJpbmZpbml0ZVNjcm9sbFwiXG4gICAgICAgIFt2aXJ0dWFsU2Nyb2xsXT1cImluZmluaXRlU2Nyb2xsXCJcbiAgICAgICAgW3ZpcnR1YWxSb3dIZWlnaHRdPVwiJGFueShyb3dIZWlnaHQpXCJcbiAgICAgICAgW3Njcm9sbEhlaWdodF09XCIkYW55KHNjcm9sbEhlaWdodClcIlxuICAgICAgICBbc2VsZWN0aW9uTW9kZV09XCIkYW55KHNlbGVjdGlvbkVuYWJsZWQgPyBzZWxlY3Rpb25Nb2RlIDogbnVsbClcIlxuICAgICAgICBbcm93SG92ZXJdPVwiZGVzY3JpcHRvcj8uaGFzSG92ZXIgPz8gdHJ1ZVwiXG4gICAgICAgIFtzdHlsZUNsYXNzXT1cImNsYXNzTmFtZVwiXG4gICAgICAgIChvbkxhenlMb2FkKT1cIm9uVGFibGVMYXp5TG9hZCgkZXZlbnQpXCJcbiAgICAgICAgKG9uU29ydCk9XCJvblRhYmxlU29ydCgkZXZlbnQpXCJcbiAgICAgICAgKG9uRmlsdGVyKT1cIm9uVGFibGVGaWx0ZXIoJGV2ZW50KVwiXG4gICAgICAgIHNvcnRNb2RlPVwibXVsdGlwbGVcIlxuICAgICAgICByZXNwb25zaXZlTGF5b3V0PVwic2Nyb2xsXCJcbiAgICAgICAgW3Jlc2l6YWJsZUNvbHVtbnNdPVwidHJ1ZVwiXG4gICAgICAgIFthdXRvTGF5b3V0XT1cInRydWVcIj5cbiAgICAgICAgPG5nLXRlbXBsYXRlICpuZ0lmPVwiY2FwdGlvblRlbXBsYXRlIHx8IGNhcHRpb25Db21wb25lbnQgfHwgZGVzY3JpcHRvcj8udGl0bGVcIiBwVGVtcGxhdGU9XCJjYXB0aW9uXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY2FwdGlvblRlbXBsYXRlOyBlbHNlIGNvbXBvbmVudE9yRGVmYXVsdENhcHRpb25cIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiY2FwdGlvblRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjY29tcG9uZW50T3JEZWZhdWx0Q2FwdGlvbj5cbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiY2FwdGlvbkNvbXBvbmVudDsgZWxzZSBkZWZhdWx0Q2FwdGlvblwiIFttbmdDb21wb25lbnRdPVwiY2FwdGlvbkNvbXBvbmVudFwiIChpbnN0YW5jZUNyZWF0ZWQpPVwib25DYXB0aW9uQ21wSW5zdCgkZXZlbnQpXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0Q2FwdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgPGg1IGNsYXNzPVwicC0wIG0tMFwiPnt7IGRlc2NyaXB0b3I/LnRpdGxlIH19PC9oNT5cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiaGVhZGVyXCI+XG4gICAgICAgICAgICA8dHIgKm5nSWY9XCIhZGVzY3JpcHRvcj8uaGlkZUhlYWRlclwiIGNsYXNzPVwibW5nLXRhYmxlLWhlYWRlclwiIFtjbGFzc109XCJkZXNjcmlwdG9yPy5oZWFkZXJDbGFzc05hbWVcIj5cbiAgICAgICAgICAgICAgICA8dGggKm5nSWY9XCJzZWxlY3Rpb25FbmFibGVkICYmIHNlbGVjdGlvbk1vZGUgPT09ICdtdWx0aXBsZSdcIj5cbiAgICAgICAgICAgICAgICAgICAgPHAtdGFibGVIZWFkZXJDaGVja2JveD48L3AtdGFibGVIZWFkZXJDaGVja2JveD5cbiAgICAgICAgICAgICAgICA8L3RoPlxuICAgICAgICAgICAgICAgIDwhLS0gV2UgbmVlZCB0aGUgbGluZSBiZWxvdywgYmVjYXVzZSBvdGhlcndpc2UgcC10YWJsZVJhZGlvQnV0dG9uIHNoaWZ0cyB0aGUgcmVzdCBvZiB0aGUgY29sdW1ucyBpbiB0YWJsZSAtLT5cbiAgICAgICAgICAgICAgICA8dGggKm5nSWY9XCJzZWxlY3Rpb25FbmFibGVkICYmIHNlbGVjdGlvbk1vZGUgPT09ICdzaW5nbGUnXCIgc3R5bGU9XCJtaW4td2lkdGg6IDM2cHhcIj48L3RoPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGNvbCBvZiBkZXNjcmlwdG9yPy5jb2x1bW5zXCI+XG4gICAgICAgICAgICAgICAgICAgIDx0aCAqbmdJZj1cImNvbC5pc1NvcnRFbmFibGVkXCIgW3BTb3J0YWJsZUNvbHVtbl09XCJjb2wucHJvcGVydHlcIiBbc3R5bGUud2lkdGguJV09XCJjb2wud2lkdGhcIiBbc3R5bGUubWluLXdpZHRoLnB4XT1cImNvbC5taW5XaWR0aFwiIFtjbGFzc109XCJjb2wuaGVhZGVyQ2xhc3NOYW1lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBjb2wudGl0bGUgPz8gKGNvbC5wcm9wZXJ0eSB8IGkxOG5Qcm9wZXJ0eTogZGVzY3JpcHRvciEubW9kZWwpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAtc29ydEljb24gW2ZpZWxkXT1cImNvbC5wcm9wZXJ0eVwiPjwvcC1zb3J0SWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bW5nLXRhYmxlLWNvbHVtbi1maWx0ZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJjb2wuZmlsdGVyRGVzY3JpcHRvciAmJiBkZXNjcmlwdG9yIS5maWx0ZXJEaXNwbGF5ID09PSBmaWx0ZXJEaXNwbGF5TWVudVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWwtYXV0b1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNwbGF5XT1cImRlc2NyaXB0b3IhLmZpbHRlckRpc3BsYXlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGVzY3JpcHRvcl09XCJjb2wuZmlsdGVyRGVzY3JpcHRvclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbW5nLXRhYmxlLWNvbHVtbi1maWx0ZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgICAgICAgICAgPHRoICpuZ0lmPVwiIWNvbC5pc1NvcnRFbmFibGVkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBjb2wudGl0bGUgPz8gKGNvbC5wcm9wZXJ0eSB8IGkxOG5Qcm9wZXJ0eTogZGVzY3JpcHRvciEubW9kZWwpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtbmctdGFibGUtY29sdW1uLWZpbHRlclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImNvbC5maWx0ZXJEZXNjcmlwdG9yICYmIGRlc2NyaXB0b3IhLmZpbHRlckRpc3BsYXkgPT09IGZpbHRlckRpc3BsYXlNZW51XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtbC1hdXRvXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc3BsYXldPVwiZGVzY3JpcHRvciEuZmlsdGVyRGlzcGxheVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkZXNjcmlwdG9yXT1cImNvbC5maWx0ZXJEZXNjcmlwdG9yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tbmctdGFibGUtY29sdW1uLWZpbHRlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICA8L3RoPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDx0aCAqbmdJZj1cInNob3dJbmxpbmVBY3Rpb25zQ29sdW1uXCI+PC90aD5cbiAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICA8dHIgKm5nSWY9XCJkZXNjcmlwdG9yPy5maWx0ZXJEaXNwbGF5ID09PSBmaWx0ZXJEaXNwbGF5Um93ICYmIGhhc0NvbHVtbkZpbHRlcnNcIiBjbGFzcz1cIm1uZy1jb2x1bW4tZmlsdGVyLXJvd1wiPlxuICAgICAgICAgICAgICAgIDwhLS0gV2UgbmVlZCB0aGUgbGluZSBiZWxvdywgYmVjYXVzZSBvdGhlcndpc2UgcC10YWJsZVJhZGlvQnV0dG9uIHNoaWZ0cyB0aGUgcmVzdCBvZiB0aGUgY29sdW1ucyBpbiB0YWJsZSAtLT5cbiAgICAgICAgICAgICAgICA8dGggKm5nSWY9XCJzZWxlY3Rpb25FbmFibGVkICYmIHNlbGVjdGlvbk1vZGUgPT09ICdzaW5nbGUnXCIgc3R5bGU9XCJtaW4td2lkdGg6IDM2cHhcIj48L3RoPlxuICAgICAgICAgICAgICAgIDx0aFxuICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgY29sIG9mIGRlc2NyaXB0b3I/LmNvbHVtbnNcIlxuICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwiKGNvbC5maWx0ZXJEZXNjcmlwdG9yID8gJ21uZy1jb2x1bW4tZmlsdGVyLScgKyBjb2wuZmlsdGVyRGVzY3JpcHRvci5maWx0ZXJUeXBlICsgJyAnIDogJyAnKSArIGNvbC5maWx0ZXJEZXNjcmlwdG9yPy5jb2x1bW5DbGFzc05hbWVcIlxuICAgICAgICAgICAgICAgICAgICBbc3R5bGUud2lkdGguJV09XCJjb2wuZmlsdGVyRGVzY3JpcHRvcj8uY29sdW1uV2lkdGggPz8gY29sLndpZHRoXCJcbiAgICAgICAgICAgICAgICAgICAgW3N0eWxlLm1pbi13aWR0aC5weF09XCJjb2wuZmlsdGVyRGVzY3JpcHRvcj8uY29sdW1uTWluV2lkdGggPz8gY29sLm1pbldpZHRoXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4XCIgKm5nSWY9XCJjb2wuZmlsdGVyRGVzY3JpcHRvclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1uZy10YWJsZS1jb2x1bW4tZmlsdGVyIFtkaXNwbGF5XT1cImRlc2NyaXB0b3IhLmZpbHRlckRpc3BsYXlcIiBbZGVzY3JpcHRvcl09XCJjb2wuZmlsdGVyRGVzY3JpcHRvclwiPjwvbW5nLXRhYmxlLWNvbHVtbi1maWx0ZXI+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgICAgICAgPHRoICpuZ0lmPVwic2hvd0lubGluZUFjdGlvbnNDb2x1bW5cIj48L3RoPlxuICAgICAgICAgICAgPC90cj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiYm9keVwiIGxldC1pdGVtIGxldC1pZHg9XCJyb3dJbmRleFwiPlxuICAgICAgICAgICAgPHRyIFtzdHlsZS5oZWlnaHQucHhdPVwicm93SGVpZ2h0XCIgW2NsYXNzXT1cImRlc2NyaXB0b3I/LnJvd0NsYXNzTmFtZSB8IG1uZ0NsYXNzTWFwUGlwZTogZGVzY3JpcHRvcj8ucm93Q2xhc3NOYW1lTWFwRm46aXRlbVwiPlxuICAgICAgICAgICAgICAgIDx0ZCAqbmdJZj1cInNlbGVjdGlvbkVuYWJsZWQgJiYgc2VsZWN0aW9uTW9kZSA9PT0gJ211bHRpcGxlJ1wiIHN0eWxlPVwid2lkdGg6IDNyZW1cIj5cbiAgICAgICAgICAgICAgICAgICAgPHAtdGFibGVDaGVja2JveCBbdmFsdWVdPVwiaXRlbVwiPjwvcC10YWJsZUNoZWNrYm94PlxuICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgPHRkICpuZ0lmPVwic2VsZWN0aW9uRW5hYmxlZCAmJiBzZWxlY3Rpb25Nb2RlID09PSAnc2luZ2xlJ1wiIHN0eWxlPVwid2lkdGg6IDNyZW1cIj5cbiAgICAgICAgICAgICAgICAgICAgPHAtdGFibGVSYWRpb0J1dHRvbiBbdmFsdWVdPVwiaXRlbVwiPjwvcC10YWJsZVJhZGlvQnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgPHRkXG4gICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBjb2wgb2YgZGVzY3JpcHRvcj8uY29sdW1uc1wiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkNlbGxDbGljaygkZXZlbnQsIGNvbCwgaXRlbSwgaWR4KVwiXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJjb2wuY2xhc3NOYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmNsaWNrYWJsZV09XCJpc0NvbHVtbkNsaWNrYWJsZVwiXG4gICAgICAgICAgICAgICAgICAgIFtzdHlsZS53aWR0aC4lXT1cImNvbC53aWR0aFwiXG4gICAgICAgICAgICAgICAgICAgIFtzdHlsZS5taW4td2lkdGgucHhdPVwiY29sLm1pbldpZHRoXCI+XG4gICAgICAgICAgICAgICAgICAgIDxtbmctdGFibGUtY29sdW1uLXZhbHVlIFtkZXNjcmlwdG9yXT1cImNvbFwiIFtpdGVtXT1cIml0ZW1cIj48L21uZy10YWJsZS1jb2x1bW4tdmFsdWU+XG4gICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICA8dGQgKm5nSWY9XCJzaG93SW5saW5lQWN0aW9uc0NvbHVtblwiIGNsYXNzPVwiY29sdW1uLWFjdGlvbiB0ZXh0LXJpZ2h0XCIgW3N0eWxlLm1pbi13aWR0aC5weF09XCJjb2x1bW5BY3Rpb25NaW5XaWR0aFwiPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sdW1uQWN0aW9uVGVtcGxhdGU7IGVsc2Ugc2hvd0NvbHVtbkFjdGlvbkNvbXBvbmVudE9yRGVmYXVsdFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImNvbHVtbkFjdGlvblRlbXBsYXRlOyBjb250ZXh0OiB7cm93SXRlbTogaXRlbSwgcm93SW5kZXg6IGlkeH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjc2hvd0NvbHVtbkFjdGlvbkNvbXBvbmVudE9yRGVmYXVsdD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJjb2x1bW5BY3Rpb25Db21wb25lbnQ7IGVsc2UgZGVmYXVsdENvbHVtbkFjdGlvbnNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttbmdDb21wb25lbnRdPVwiY29sdW1uQWN0aW9uQ29tcG9uZW50IVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGluc3RhbmNlQ3JlYXRlZCk9XCJvbkNvbHVtbkFjdGlvbkNtcEluc3QoJGV2ZW50KVwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0Q29sdW1uQWN0aW9ucz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtbmctYWN0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGFjdGlvbiBvZiByb3dJbmxpbmVBY3Rpb25zXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYWN0aW9uXT1cImFjdGlvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2l0ZW1dPVwiaXRlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2l0ZW1JZF09XCJkZXNjcmlwdG9yPy5tb2RlbD8uaWRQcm9wZXJ0eU5hbWUgPyBpdGVtW2Rlc2NyaXB0b3IhLm1vZGVsIS5pZFByb3BlcnR5TmFtZSFdIDogbnVsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2FjdGlvbkRhdGFdPVwie2l0ZW1JbmRleDogaWR4fVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZpbmlzaCk9XCJvbkFjdGlvbkZpbmlzaCgkZXZlbnQpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21uZy1hY3Rpb24+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgIDwvdHI+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImxvYWRpbmdib2R5XCI+XG4gICAgICAgICAgICA8dHIgW3N0eWxlLmhlaWdodC5weF09XCJyb3dIZWlnaHRcIj5cbiAgICAgICAgICAgICAgICA8dGQgW2F0dHIuY29sc3Bhbl09XCIoZGVzY3JpcHRvcj8uY29sdW1ucz8ubGVuZ3RoID8/IDApICsgKHNob3dJbmxpbmVBY3Rpb25zQ29sdW1uID8gMSA6IDApICsgKHNlbGVjdGlvbkVuYWJsZWQgPyAxIDogMClcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxvYWRpbmctdGV4dFwiPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8cC1za2VsZXRvbiBbbmdTdHlsZV09XCJ7d2lkdGg6ICcxMDAlJ31cIj48L3Atc2tlbGV0b24+XG4gICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgIDwvdHI+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImVtcHR5bWVzc2FnZVwiPlxuICAgICAgICAgICAgPHRyIFtzdHlsZS5oZWlnaHQucHhdPVwicm93SGVpZ2h0XCI+XG4gICAgICAgICAgICAgICAgPHRkIFthdHRyLmNvbHNwYW5dPVwiKGRlc2NyaXB0b3I/LmNvbHVtbnM/Lmxlbmd0aCA/PyAwKSArIChzaG93SW5saW5lQWN0aW9uc0NvbHVtbiA/IDEgOiAwKSArIChzZWxlY3Rpb25FbmFibGVkID8gMSA6IDApXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7ICdtbmdUYWJsZS5ub0l0ZW1zJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICA8L3RyPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgICAgIDxuZy10ZW1wbGF0ZSAqbmdJZj1cImZvb3RlclRlbXBsYXRlXCIgcFRlbXBsYXRlPVwic3VtbWFyeVwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJmb290ZXJUZW1wbGF0ZVwiIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7cXVlcnlSZXN1bHQ6IHF1ZXJ5UmVzdWx0fVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvcC10YWJsZT5cbjwvZGl2PlxuIl19
@@ -3,6 +3,7 @@ import { ConfirmationService, MessageService } from 'primeng/api';
3
3
  import { ActionPositionEnum } from '../../descriptors/types';
4
4
  import { MngTemplateDirective } from '../../directives';
5
5
  import { MngViewContainerComponentService } from '../../services';
6
+ import { TableviewActionDefaultCategories } from '../action/models';
6
7
  import { MngTableComponent } from './table/table.component';
7
8
  import * as i0 from "@angular/core";
8
9
  import * as i1 from "@angular/router";
@@ -26,8 +27,7 @@ export class MngTableviewComponent {
26
27
  this.actionExecutor = actionExecutor;
27
28
  this.viewContainerService = viewContainerService;
28
29
  this.actions = [];
29
- this.rowClickActions = [];
30
- this.rowInlineActions = [];
30
+ this.tableActions = [];
31
31
  this.toolbarLeftActions = [];
32
32
  this.toolbarRightActions = [];
33
33
  this.subscriptions = [];
@@ -35,28 +35,27 @@ export class MngTableviewComponent {
35
35
  this.selectedItems = [];
36
36
  }
37
37
  ngOnInit() {
38
- this.viewContainerService.actions = this.actions;
38
+ this.viewContainerService.setActions(this.actions);
39
39
  if (this.dataProvider) {
40
40
  this.viewContainerService.dataProvider = this.dataProvider;
41
41
  }
42
- const reloadTableSubscription = this.viewContainerService.reloadTable.subscribe(() => {
42
+ const reloadTableSubscription = this.viewContainerService.getTableReload$().subscribe(() => {
43
43
  this.reloadTable();
44
44
  });
45
45
  this.subscriptions.push(reloadTableSubscription);
46
- for (const action of this.actions) {
46
+ for (const action of this.actions.filter(value => value.positionTableviewCategories?.includes(TableviewActionDefaultCategories.READ) ?? true)) {
47
47
  switch (action.position) {
48
- case ActionPositionEnum.RowClick:
49
- this.rowClickActions.push(action);
50
- break;
51
- case ActionPositionEnum.RowInline:
52
- this.rowInlineActions.push(action);
53
- break;
54
48
  case ActionPositionEnum.ToolbarLeft:
55
49
  this.toolbarLeftActions.push(action);
56
50
  break;
57
51
  case ActionPositionEnum.ToolbarRight:
58
52
  this.toolbarRightActions.push(action);
59
53
  break;
54
+ case ActionPositionEnum.TableHeader:
55
+ case ActionPositionEnum.RowInline:
56
+ case ActionPositionEnum.RowClick:
57
+ this.tableActions.push(action);
58
+ break;
60
59
  }
61
60
  }
62
61
  this.toolbarRightActions = this.toolbarRightActions.reverse();
@@ -80,6 +79,9 @@ export class MngTableviewComponent {
80
79
  getDataProvider() {
81
80
  return this.dataProvider;
82
81
  }
82
+ getActions() {
83
+ return this.actions;
84
+ }
83
85
  reloadTable() {
84
86
  this.tableComponent?.reload();
85
87
  }
@@ -91,10 +93,10 @@ export class MngTableviewComponent {
91
93
  }
92
94
  }
93
95
  MngTableviewComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: MngTableviewComponent, deps: [{ token: i1.ActivatedRoute }, { token: i2.MessageService }, { token: i3.TranslateService }, { token: i4.DialogService }, { token: i2.ConfirmationService }, { token: i5.MngActionExecutorService }, { token: i5.MngViewContainerComponentService }], target: i0.ɵɵFactoryTarget.Component });
94
- MngTableviewComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.0", type: MngTableviewComponent, selector: "mng-tableview", inputs: { descriptor: "descriptor", dataProvider: "dataProvider", actions: "actions" }, providers: [MessageService, ConfirmationService, MngViewContainerComponentService], queries: [{ propertyName: "templates", predicate: MngTemplateDirective }], viewQueries: [{ propertyName: "tableComponent", first: true, predicate: MngTableComponent, descendants: true }], ngImport: i0, template: "<div class=\"mng-tableview\">\n <p-toast></p-toast>\n\n <div class=\"card\">\n <p-toolbar styleClass=\"mb-4\" *ngIf=\"toolbarLeftActions.length > 0 || toolbarRightActions.length > 0\">\n <ng-template pTemplate=\"left\">\n <mng-action *ngFor=\"let action of toolbarLeftActions\" [action]=\"action\" [queryParam]=\"tableQueryParam\" [selectedItems]=\"selectedItems\"></mng-action>\n </ng-template>\n\n <ng-template pTemplate=\"right\">\n <mng-action *ngFor=\"let action of toolbarRightActions\" [action]=\"action\" [queryParam]=\"tableQueryParam\" [selectedItems]=\"selectedItems\"></mng-action>\n </ng-template>\n </p-toolbar>\n\n <mng-table\n [descriptor]=\"descriptor.table\"\n [dataProvider]=\"dataProvider\"\n [useQueryParams]=\"true\"\n [actions]=\"actions\"\n [selectionEnabled]=\"hasItemSelectionAction\"\n [selectionMode]=\"'multiple'\"\n (tableLoad)=\"onTableLoad($event)\"\n (selectionChange)=\"selectionChange($event)\">\n <ng-template mngTemplate=\"caption\">\n <div class=\"flex flex-column md:flex-row md:justify-content-between table-header\">\n <h5 class=\"p-0 m-0\">{{ descriptor.tableTitle ?? '' | translate }}</h5>\n </div>\n </ng-template>\n\n <ng-template let-queryResult=\"queryResult\" mngTemplate=\"footer\">\n <ng-container *ngIf=\"footerTemplate\" [ngTemplateOutlet]=\"footerTemplate\" [ngTemplateOutletContext]=\"{queryResult: queryResult}\"></ng-container>\n </ng-template>\n </mng-table>\n </div>\n\n <router-outlet></router-outlet>\n</div>\n", dependencies: [{ kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.RouterOutlet, selector: "router-outlet", outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "directive", type: i2.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "component", type: i7.Toast, selector: "p-toast", inputs: ["key", "autoZIndex", "baseZIndex", "style", "styleClass", "position", "preventOpenDuplicates", "preventDuplicates", "showTransformOptions", "hideTransformOptions", "showTransitionOptions", "hideTransitionOptions", "breakpoints"], outputs: ["onClose"] }, { kind: "component", type: i8.Toolbar, selector: "p-toolbar", inputs: ["style", "styleClass"] }, { kind: "directive", type: i9.MngTemplateDirective, selector: "[mngTemplate]", inputs: ["type", "mngTemplate"] }, { kind: "component", type: i10.MngTableComponent, selector: "mng-table", inputs: ["descriptor", "items", "queryResult", "loading", "dataProvider", "useQueryParams", "selectionMode", "selectionEnabled", "actions", "isColumnClickable", "viewContainer", "captionComponent", "columnActionComponent", "columnActionMinWidth"], outputs: ["tableLoad", "cellClick", "selectionChange", "captionComponentInstance", "columnActionComponentInstance"] }, { kind: "component", type: i11.MngActionComponent, selector: "mng-action", inputs: ["action", "item", "itemId", "actionData", "queryParam", "dataProvider", "disabled", "loading", "viewContainer", "selectedItems"], outputs: ["finish"] }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }] });
96
+ MngTableviewComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.0", type: MngTableviewComponent, selector: "mng-tableview", inputs: { descriptor: "descriptor", dataProvider: "dataProvider", actions: "actions" }, providers: [MessageService, ConfirmationService, MngViewContainerComponentService], queries: [{ propertyName: "templates", predicate: MngTemplateDirective }], viewQueries: [{ propertyName: "tableComponent", first: true, predicate: MngTableComponent, descendants: true }], ngImport: i0, template: "<div class=\"mng-tableview\">\n <p-toast></p-toast>\n\n <div class=\"card\">\n <p-toolbar styleClass=\"mb-4\" *ngIf=\"toolbarLeftActions.length > 0 || toolbarRightActions.length > 0\">\n <ng-template pTemplate=\"left\">\n <mng-action *ngFor=\"let action of toolbarLeftActions\" [action]=\"action\" [queryParam]=\"tableQueryParam\" [selectedItems]=\"selectedItems\"></mng-action>\n </ng-template>\n\n <ng-template pTemplate=\"right\">\n <mng-action *ngFor=\"let action of toolbarRightActions\" [action]=\"action\" [queryParam]=\"tableQueryParam\" [selectedItems]=\"selectedItems\"></mng-action>\n </ng-template>\n </p-toolbar>\n\n <mng-table\n [descriptor]=\"descriptor.table\"\n [dataProvider]=\"dataProvider\"\n [useQueryParams]=\"true\"\n [actions]=\"tableActions\"\n [selectionEnabled]=\"hasItemSelectionAction\"\n [selectionMode]=\"'multiple'\"\n (tableLoad)=\"onTableLoad($event)\"\n (selectionChange)=\"selectionChange($event)\">\n <ng-template mngTemplate=\"caption\">\n <div class=\"flex flex-column md:flex-row md:justify-content-between table-header\">\n <h5 class=\"p-0 m-0\">{{ descriptor.tableTitle ?? '' | translate }}</h5>\n </div>\n </ng-template>\n\n <ng-template let-queryResult=\"queryResult\" mngTemplate=\"footer\">\n <ng-container *ngIf=\"footerTemplate\" [ngTemplateOutlet]=\"footerTemplate\" [ngTemplateOutletContext]=\"{queryResult: queryResult}\"></ng-container>\n </ng-template>\n </mng-table>\n </div>\n\n <router-outlet></router-outlet>\n</div>\n", dependencies: [{ kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.RouterOutlet, selector: "router-outlet", outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "directive", type: i2.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "component", type: i7.Toast, selector: "p-toast", inputs: ["key", "autoZIndex", "baseZIndex", "style", "styleClass", "position", "preventOpenDuplicates", "preventDuplicates", "showTransformOptions", "hideTransformOptions", "showTransitionOptions", "hideTransitionOptions", "breakpoints"], outputs: ["onClose"] }, { kind: "component", type: i8.Toolbar, selector: "p-toolbar", inputs: ["style", "styleClass"] }, { kind: "directive", type: i9.MngTemplateDirective, selector: "[mngTemplate]", inputs: ["type", "mngTemplate"] }, { kind: "component", type: i10.MngTableComponent, selector: "mng-table", inputs: ["descriptor", "items", "queryResult", "loading", "dataProvider", "useQueryParams", "selectionMode", "selectionEnabled", "actions", "isColumnClickable", "viewContainer", "captionComponent", "columnActionComponent", "columnActionMinWidth"], outputs: ["tableLoad", "cellClick", "selectionChange", "captionComponentInstance", "columnActionComponentInstance"] }, { kind: "component", type: i11.MngActionComponent, selector: "mng-action", inputs: ["action", "item", "itemId", "actionData", "queryParam", "dataProvider", "disabled", "loading", "viewContainer", "selectedItems"], outputs: ["finish"] }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }] });
95
97
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: MngTableviewComponent, decorators: [{
96
98
  type: Component,
97
- args: [{ selector: 'mng-tableview', providers: [MessageService, ConfirmationService, MngViewContainerComponentService], template: "<div class=\"mng-tableview\">\n <p-toast></p-toast>\n\n <div class=\"card\">\n <p-toolbar styleClass=\"mb-4\" *ngIf=\"toolbarLeftActions.length > 0 || toolbarRightActions.length > 0\">\n <ng-template pTemplate=\"left\">\n <mng-action *ngFor=\"let action of toolbarLeftActions\" [action]=\"action\" [queryParam]=\"tableQueryParam\" [selectedItems]=\"selectedItems\"></mng-action>\n </ng-template>\n\n <ng-template pTemplate=\"right\">\n <mng-action *ngFor=\"let action of toolbarRightActions\" [action]=\"action\" [queryParam]=\"tableQueryParam\" [selectedItems]=\"selectedItems\"></mng-action>\n </ng-template>\n </p-toolbar>\n\n <mng-table\n [descriptor]=\"descriptor.table\"\n [dataProvider]=\"dataProvider\"\n [useQueryParams]=\"true\"\n [actions]=\"actions\"\n [selectionEnabled]=\"hasItemSelectionAction\"\n [selectionMode]=\"'multiple'\"\n (tableLoad)=\"onTableLoad($event)\"\n (selectionChange)=\"selectionChange($event)\">\n <ng-template mngTemplate=\"caption\">\n <div class=\"flex flex-column md:flex-row md:justify-content-between table-header\">\n <h5 class=\"p-0 m-0\">{{ descriptor.tableTitle ?? '' | translate }}</h5>\n </div>\n </ng-template>\n\n <ng-template let-queryResult=\"queryResult\" mngTemplate=\"footer\">\n <ng-container *ngIf=\"footerTemplate\" [ngTemplateOutlet]=\"footerTemplate\" [ngTemplateOutletContext]=\"{queryResult: queryResult}\"></ng-container>\n </ng-template>\n </mng-table>\n </div>\n\n <router-outlet></router-outlet>\n</div>\n" }]
99
+ args: [{ selector: 'mng-tableview', providers: [MessageService, ConfirmationService, MngViewContainerComponentService], template: "<div class=\"mng-tableview\">\n <p-toast></p-toast>\n\n <div class=\"card\">\n <p-toolbar styleClass=\"mb-4\" *ngIf=\"toolbarLeftActions.length > 0 || toolbarRightActions.length > 0\">\n <ng-template pTemplate=\"left\">\n <mng-action *ngFor=\"let action of toolbarLeftActions\" [action]=\"action\" [queryParam]=\"tableQueryParam\" [selectedItems]=\"selectedItems\"></mng-action>\n </ng-template>\n\n <ng-template pTemplate=\"right\">\n <mng-action *ngFor=\"let action of toolbarRightActions\" [action]=\"action\" [queryParam]=\"tableQueryParam\" [selectedItems]=\"selectedItems\"></mng-action>\n </ng-template>\n </p-toolbar>\n\n <mng-table\n [descriptor]=\"descriptor.table\"\n [dataProvider]=\"dataProvider\"\n [useQueryParams]=\"true\"\n [actions]=\"tableActions\"\n [selectionEnabled]=\"hasItemSelectionAction\"\n [selectionMode]=\"'multiple'\"\n (tableLoad)=\"onTableLoad($event)\"\n (selectionChange)=\"selectionChange($event)\">\n <ng-template mngTemplate=\"caption\">\n <div class=\"flex flex-column md:flex-row md:justify-content-between table-header\">\n <h5 class=\"p-0 m-0\">{{ descriptor.tableTitle ?? '' | translate }}</h5>\n </div>\n </ng-template>\n\n <ng-template let-queryResult=\"queryResult\" mngTemplate=\"footer\">\n <ng-container *ngIf=\"footerTemplate\" [ngTemplateOutlet]=\"footerTemplate\" [ngTemplateOutletContext]=\"{queryResult: queryResult}\"></ng-container>\n </ng-template>\n </mng-table>\n </div>\n\n <router-outlet></router-outlet>\n</div>\n" }]
98
100
  }], ctorParameters: function () { return [{ type: i1.ActivatedRoute }, { type: i2.MessageService }, { type: i3.TranslateService }, { type: i4.DialogService }, { type: i2.ConfirmationService }, { type: i5.MngActionExecutorService }, { type: i5.MngViewContainerComponentService }]; }, propDecorators: { descriptor: [{
99
101
  type: Input
100
102
  }], dataProvider: [{
@@ -108,4 +110,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.0", ngImpor
108
110
  type: ContentChildren,
109
111
  args: [MngTemplateDirective]
110
112
  }] } });
111
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGV2aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy90YWJsZXZpZXcvdGFibGV2aWV3LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy90YWJsZXZpZXcvdGFibGV2aWV3LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBbUIsU0FBUyxFQUFFLGVBQWUsRUFBRSxLQUFLLEVBQTZDLFNBQVMsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUl4SSxPQUFPLEVBQUMsbUJBQW1CLEVBQUUsY0FBYyxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBT2hFLE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLHlCQUF5QixDQUFDO0FBQzNELE9BQU8sRUFBQyxvQkFBb0IsRUFBQyxNQUFNLGtCQUFrQixDQUFDO0FBRXRELE9BQU8sRUFBMkIsZ0NBQWdDLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUUxRixPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQzs7Ozs7Ozs7Ozs7OztBQU8xRCxNQUFNLE9BQU8scUJBQXFCO0lBc0I5QixZQUNZLEtBQXFCLEVBQ3JCLGNBQThCLEVBQzlCLGdCQUFrQyxFQUNsQyxhQUE0QixFQUM1QixtQkFBd0MsRUFDeEMsY0FBd0MsRUFDeEMsb0JBQTREO1FBTjVELFVBQUssR0FBTCxLQUFLLENBQWdCO1FBQ3JCLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUM5QixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQ2xDLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQzVCLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBcUI7UUFDeEMsbUJBQWMsR0FBZCxjQUFjLENBQTBCO1FBQ3hDLHlCQUFvQixHQUFwQixvQkFBb0IsQ0FBd0M7UUExQnhELFlBQU8sR0FBK0IsRUFBRSxD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LGVBQWUsQ0FBQyxhQUF1QjtRQUMxQyxJQUFJLENBQUMsYUFBYSxHQUFHLGFBQWEsQ0FBQztJQUN2QyxDQUFDOztrSEFqR1EscUJBQXFCO3NHQUFyQixxQkFBcUIsZ0lBRm5CLENBQUMsY0FBYyxFQUFFLG1CQUFtQixFQUFFLGdDQUFnQyxDQUFDLG9EQXFCakUsb0JBQW9CLDZFQWQxQixpQkFBaUIsZ0RDNUJoQyxzdkRBcUNBOzJGRGRhLHFCQUFxQjtrQkFMakMsU0FBUzsrQkFDSSxlQUFlLGFBRWQsQ0FBQyxjQUFjLEVBQUUsbUJBQW1CLEVBQUUsZ0NBQWdDLENBQUM7cVRBR2xFLFVBQVU7c0JBQXpCLEtBQUs7Z0JBQ1UsWUFBWTtzQkFBM0IsS0FBSztnQkFDVSxPQUFPO3NCQUF0QixLQUFLO2dCQUUrQixjQUFjO3NCQUFsRCxTQUFTO3VCQUFDLGlCQUFpQjtnQkFja0IsU0FBUztzQkFBdEQsZUFBZTt1QkFBQyxvQkFBb0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0FmdGVyQ29udGVudEluaXQsIENvbXBvbmVudCwgQ29udGVudENoaWxkcmVuLCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIFF1ZXJ5TGlzdCwgVGVtcGxhdGVSZWYsIFZpZXdDaGlsZH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0FjdGl2YXRlZFJvdXRlfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuXG5pbXBvcnQge1RyYW5zbGF0ZVNlcnZpY2V9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHtDb25maXJtYXRpb25TZXJ2aWNlLCBNZXNzYWdlU2VydmljZX0gZnJvbSAncHJpbWVuZy9hcGknO1xuaW1wb3J0IHtEaWFsb2dTZXJ2aWNlfSBmcm9tICdwcmltZW5nL2R5bmFtaWNkaWFsb2cnO1xuaW1wb3J0IHtTdWJzY3JpcHRpb259IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQge01lZGl1c1F1ZXJ5UGFyYW19IGZyb20gJy4uLy4uL2FwaS9tb2RlbHMnO1xuaW1wb3J0IHtJRGF0YVByb3ZpZGVyLCBJVGFibGV2aWV3RGF0YVByb3ZpZGVyfSBmcm9tICcuLi8uLi9kYXRhLXByb3ZpZGVycyc7XG5pbXBvcnQge0FjdGlvbkRlc2NyaXB0b3IsIFRhYmxldmlld0Rlc2NyaXB0b3J9IGZyb20gJy4uLy4uL2Rlc2NyaXB0b3JzJztcbmltcG9ydCB7QWN0aW9uUG9zaXRpb25FbnVtfSBmcm9tICcuLi8uLi9kZXNjcmlwdG9ycy90eXBlcyc7XG5pbXBvcnQge01uZ1RlbXBsYXRlRGlyZWN0aXZlfSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzJztcbmltcG9ydCB7SVZpZXdDb250YWluZXJ9IGZyb20gJy4uLy4uL21vZGVscyc7XG5pbXBvcnQge01uZ0FjdGlvbkV4ZWN1dG9yU2VydmljZSwgTW5nVmlld0NvbnRhaW5lckNvbXBvbmVudFNlcnZpY2V9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7TW5nVGFibGVMb2FkRXZlbnR9IGZyb20gJy4vbW9kZWxzJztcbmltcG9ydCB7TW5nVGFibGVDb21wb25lbnR9IGZyb20gJy4vdGFibGUvdGFibGUuY29tcG9uZW50JztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdtbmctdGFibGV2aWV3JyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vdGFibGV2aWV3LmNvbXBvbmVudC5odG1sJyxcbiAgICBwcm92aWRlcnM6IFtNZXNzYWdlU2VydmljZSwgQ29uZmlybWF0aW9uU2VydmljZSwgTW5nVmlld0NvbnRhaW5lckNvbXBvbmVudFNlcnZpY2VdXG59KVxuZXhwb3J0IGNsYXNzIE1uZ1RhYmxldmlld0NvbXBvbmVudDxULCBTPiBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBBZnRlckNvbnRlbnRJbml0LCBJVmlld0NvbnRhaW5lcjxULCBTPiB7XG4gICAgQElucHV0KCkgcHVibGljIGRlc2NyaXB0b3IhOiBUYWJsZXZpZXdEZXNjcmlwdG9yPFQ+O1xuICAgIEBJbnB1dCgpIHB1YmxpYyBkYXRhUHJvdmlkZXI/OiBJVGFibGV2aWV3RGF0YVByb3ZpZGVyPFQsIFM+O1xuICAgIEBJbnB1dCgpIHB1YmxpYyBhY3Rpb25zOiBBcnJheTxBY3Rpb25EZXNjcmlwdG9yPFQ+PiA9IFtdO1xuXG4gICAgQFZpZXdDaGlsZChNbmdUYWJsZUNvbXBvbmVudCkgcHVibGljIHRhYmxlQ29tcG9uZW50PzogTW5nVGFibGVDb21wb25lbnQ8VCwgUz47XG5cbiAgICBwdWJsaWMgcm93Q2xpY2tBY3Rpb25zOiBBY3Rpb25EZXNjcmlwdG9yPFQ+W10gPSBbXTtcbiAgICBwdWJsaWMgcm93SW5saW5lQWN0aW9uczogQWN0aW9uRGVzY3JpcHRvcjxUPltdID0gW107XG4gICAgcHVibGljIHRvb2xiYXJMZWZ0QWN0aW9uczogQWN0aW9uRGVzY3JpcHRvcjxUPltdID0gW107XG4gICAgcHVibGljIHRvb2xiYXJSaWdodEFjdGlvbnM6IEFjdGlvbkRlc2NyaXB0b3I8VD5bXSA9IFtdO1xuXG4gICAgcHVibGljIHRhYmxlUXVlcnlQYXJhbT86IE1lZGl1c1F1ZXJ5UGFyYW07XG5cbiAgICBwcml2YXRlIHN1YnNjcmlwdGlvbnM6IFN1YnNjcmlwdGlvbltdID0gW107XG5cbiAgICBwdWJsaWMgaGFzSXRlbVNlbGVjdGlvbkFjdGlvbiA9IGZhbHNlO1xuICAgIHB1YmxpYyBzZWxlY3RlZEl0ZW1zOiBUW10gPSBbXTtcblxuICAgIEBDb250ZW50Q2hpbGRyZW4oTW5nVGVtcGxhdGVEaXJlY3RpdmUpIHB1YmxpYyB0ZW1wbGF0ZXMhOiBRdWVyeUxpc3Q8TW5nVGVtcGxhdGVEaXJlY3RpdmU+O1xuICAgIHB1YmxpYyBmb290ZXJUZW1wbGF0ZT86IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSByb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgICAgIHByaXZhdGUgbWVzc2FnZVNlcnZpY2U6IE1lc3NhZ2VTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgZGlhbG9nU2VydmljZTogRGlhbG9nU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBjb25maXJtYXRpb25TZXJ2aWNlOiBDb25maXJtYXRpb25TZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGFjdGlvbkV4ZWN1dG9yOiBNbmdBY3Rpb25FeGVjdXRvclNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgdmlld0NvbnRhaW5lclNlcnZpY2U6IE1uZ1ZpZXdDb250YWluZXJDb21wb25lbnRTZXJ2aWNlPFQsIFM+XG4gICAgKSB7fVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMudmlld0NvbnRhaW5lclNlcnZpY2UuYWN0aW9ucyA9IHRoaXMuYWN0aW9ucztcblxuICAgICAgICBpZiAodGhpcy5kYXRhUHJvdmlkZXIpIHtcbiAgICAgICAgICAgIHRoaXMudmlld0NvbnRhaW5lclNlcnZpY2UuZGF0YVByb3ZpZGVyID0gdGhpcy5kYXRhUHJvdmlkZXI7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVsb2FkVGFibGVTdWJzY3JpcHRpb24gPSB0aGlzLnZpZXdDb250YWluZXJTZXJ2aWNlLnJlbG9hZFRhYmxlLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnJlbG9hZFRhYmxlKCk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChyZWxvYWRUYWJsZVN1YnNjcmlwdGlvbik7XG5cbiAgICAgICAgZm9yIChjb25zdCBhY3Rpb24gb2YgdGhpcy5hY3Rpb25zKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKGFjdGlvbi5wb3NpdGlvbikge1xuICAgICAgICAgICAgICAgIGNhc2UgQWN0aW9uUG9zaXRpb25FbnVtLlJvd0NsaWNrOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJvd0NsaWNrQWN0aW9ucy5wdXNoKGFjdGlvbik7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgQWN0aW9uUG9zaXRpb25FbnVtLlJvd0lubGluZTpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yb3dJbmxpbmVBY3Rpb25zLnB1c2goYWN0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBBY3Rpb25Qb3NpdGlvbkVudW0uVG9vbGJhckxlZnQ6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudG9vbGJhckxlZnRBY3Rpb25zLnB1c2goYWN0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBBY3Rpb25Qb3NpdGlvbkVudW0uVG9vbGJhclJpZ2h0OlxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRvb2xiYXJSaWdodEFjdGlvbnMucHVzaChhY3Rpb24pO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudG9vbGJhclJpZ2h0QWN0aW9ucyA9IHRoaXMudG9vbGJhclJpZ2h0QWN0aW9ucy5yZXZlcnNlKCk7XG5cbiAgICAgICAgdGhpcy5oYXNJdGVtU2VsZWN0aW9uQWN0aW9uID0gWy4uLnRoaXMudG9vbGJhckxlZnRBY3Rpb25zLCAuLi50aGlzLnRvb2xiYXJSaWdodEFjdGlvbnNdLnNvbWUoZSA9PiBlLmhhc0l0ZW1zU2VsZWN0aW9uKTtcbiAgICB9XG5cbiAgICBuZ0FmdGVyQ29udGVudEluaXQoKSB7XG4gICAgICAgIHRoaXMudGVtcGxhdGVzLmZvckVhY2godGVtcGxhdGUgPT4ge1xuICAgICAgICAgICAgc3dpdGNoICh0ZW1wbGF0ZS5nZXRUeXBlKCkpIHtcbiAgICAgICAgICAgICAgICBjYXNlICdmb290ZXInOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvb3RlclRlbXBsYXRlID0gdGVtcGxhdGUudGVtcGxhdGU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2gocyA9PiBzLnVuc3Vic2NyaWJlKCkpO1xuICAgIH1cblxuICAgIGdldE1lc3NhZ2VTZXJ2aWNlKCk6IE1lc3NhZ2VTZXJ2aWNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWVzc2FnZVNlcnZpY2U7XG4gICAgfVxuXG4gICAgZ2V0RGF0YVByb3ZpZGVyKCk6IElEYXRhUHJvdmlkZXI8VCwgUz4gfCB1bmRlZmluZWQge1xuICAgICAgICByZXR1cm4gdGhpcy5kYXRhUHJvdmlkZXI7XG4gICAgfVxuXG4gICAgcHVibGljIHJlbG9hZFRhYmxlKCkge1xuICAgICAgICB0aGlzLnRhYmxlQ29tcG9uZW50Py5yZWxvYWQoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25UYWJsZUxvYWQoZXZlbnQ6IE1uZ1RhYmxlTG9hZEV2ZW50KSB7XG4gICAgICAgIHRoaXMudGFibGVRdWVyeVBhcmFtID0gZXZlbnQucXVlcnlQYXJhbTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2VsZWN0aW9uQ2hhbmdlKHNlbGVjdGVkSXRlbXM6IEFycmF5PFQ+KTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcyA9IHNlbGVjdGVkSXRlbXM7XG4gICAgfVxufVxuIiwiPGRpdiBjbGFzcz1cIm1uZy10YWJsZXZpZXdcIj5cbiAgICA8cC10b2FzdD48L3AtdG9hc3Q+XG5cbiAgICA8ZGl2IGNsYXNzPVwiY2FyZFwiPlxuICAgICAgICA8cC10b29sYmFyIHN0eWxlQ2xhc3M9XCJtYi00XCIgKm5nSWY9XCJ0b29sYmFyTGVmdEFjdGlvbnMubGVuZ3RoID4gMCB8fCB0b29sYmFyUmlnaHRBY3Rpb25zLmxlbmd0aCA+IDBcIj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJsZWZ0XCI+XG4gICAgICAgICAgICAgICAgPG1uZy1hY3Rpb24gKm5nRm9yPVwibGV0IGFjdGlvbiBvZiB0b29sYmFyTGVmdEFjdGlvbnNcIiBbYWN0aW9uXT1cImFjdGlvblwiIFtxdWVyeVBhcmFtXT1cInRhYmxlUXVlcnlQYXJhbVwiIFtzZWxlY3RlZEl0ZW1zXT1cInNlbGVjdGVkSXRlbXNcIj48L21uZy1hY3Rpb24+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwicmlnaHRcIj5cbiAgICAgICAgICAgICAgICA8bW5nLWFjdGlvbiAqbmdGb3I9XCJsZXQgYWN0aW9uIG9mIHRvb2xiYXJSaWdodEFjdGlvbnNcIiBbYWN0aW9uXT1cImFjdGlvblwiIFtxdWVyeVBhcmFtXT1cInRhYmxlUXVlcnlQYXJhbVwiIFtzZWxlY3RlZEl0ZW1zXT1cInNlbGVjdGVkSXRlbXNcIj48L21uZy1hY3Rpb24+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L3AtdG9vbGJhcj5cblxuICAgICAgICA8bW5nLXRhYmxlXG4gICAgICAgICAgICBbZGVzY3JpcHRvcl09XCJkZXNjcmlwdG9yLnRhYmxlXCJcbiAgICAgICAgICAgIFtkYXRhUHJvdmlkZXJdPVwiZGF0YVByb3ZpZGVyXCJcbiAgICAgICAgICAgIFt1c2VRdWVyeVBhcmFtc109XCJ0cnVlXCJcbiAgICAgICAgICAgIFthY3Rpb25zXT1cImFjdGlvbnNcIlxuICAgICAgICAgICAgW3NlbGVjdGlvbkVuYWJsZWRdPVwiaGFzSXRlbVNlbGVjdGlvbkFjdGlvblwiXG4gICAgICAgICAgICBbc2VsZWN0aW9uTW9kZV09XCInbXVsdGlwbGUnXCJcbiAgICAgICAgICAgICh0YWJsZUxvYWQpPVwib25UYWJsZUxvYWQoJGV2ZW50KVwiXG4gICAgICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cInNlbGVjdGlvbkNoYW5nZSgkZXZlbnQpXCI+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgbW5nVGVtcGxhdGU9XCJjYXB0aW9uXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2x1bW4gbWQ6ZmxleC1yb3cgbWQ6anVzdGlmeS1jb250ZW50LWJldHdlZW4gdGFibGUtaGVhZGVyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxoNSBjbGFzcz1cInAtMCBtLTBcIj57eyBkZXNjcmlwdG9yLnRhYmxlVGl0bGUgPz8gJycgfCB0cmFuc2xhdGUgfX08L2g1PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGxldC1xdWVyeVJlc3VsdD1cInF1ZXJ5UmVzdWx0XCIgbW5nVGVtcGxhdGU9XCJmb290ZXJcIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZm9vdGVyVGVtcGxhdGVcIiBbbmdUZW1wbGF0ZU91dGxldF09XCJmb290ZXJUZW1wbGF0ZVwiIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7cXVlcnlSZXN1bHQ6IHF1ZXJ5UmVzdWx0fVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9tbmctdGFibGU+XG4gICAgPC9kaXY+XG5cbiAgICA8cm91dGVyLW91dGxldD48L3JvdXRlci1vdXRsZXQ+XG48L2Rpdj5cbiJdfQ==
113
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGV2aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy90YWJsZXZpZXcvdGFibGV2aWV3LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy90YWJsZXZpZXcvdGFibGV2aWV3LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBbUIsU0FBUyxFQUFFLGVBQWUsRUFBRSxLQUFLLEVBQTZDLFNBQVMsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUl4SSxPQUFPLEVBQUMsbUJBQW1CLEVBQUUsY0FBYyxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBT2hFLE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLHlCQUF5QixDQUFDO0FBQzNELE9BQU8sRUFBQyxvQkFBb0IsRUFBQyxNQUFNLGtCQUFrQixDQUFDO0FBRXRELE9BQU8sRUFBMkIsZ0NBQWdDLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUMxRixPQUFPLEVBQUMsZ0NBQWdDLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQztBQUVsRSxPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQzs7Ozs7Ozs7Ozs7OztBQU8xRCxNQUFNLE9BQU8scUJBQXFCO0lBcUI5QixZQUNZLEtBQXFCLEVBQ3JCLGNBQThCLEVBQzlCLGdCQUFrQyxFQUNsQyxhQUE0QixFQUM1QixtQkFBd0MsRUFDeEMsY0FBd0MsRUFDeEMsb0JBQTREO1FBTjVELFVBQUssR0FBTCxLQUFLLENBQWdCO1FBQ3JCLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUM5QixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQ2xDLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQzVCLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBcUI7UUFDeEMsbUJBQWMsR0FBZCxjQUFjLENBQTBCO1FBQ3hDLHlCQUFv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O0lBQ3hCLENBQUM7SUFFTSxXQUFXO1FBQ2QsSUFBSSxDQUFDLGNBQWMsRUFBRSxNQUFNLEVBQUUsQ0FBQztJQUNsQyxDQUFDO0lBRU0sV0FBVyxDQUFDLEtBQXdCO1FBQ3ZDLElBQUksQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDLFVBQVUsQ0FBQztJQUM1QyxDQUFDO0lBRU0sZUFBZSxDQUFDLGFBQXVCO1FBQzFDLElBQUksQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFDO0lBQ3ZDLENBQUM7O2tIQW5HUSxxQkFBcUI7c0dBQXJCLHFCQUFxQixnSUFGbkIsQ0FBQyxjQUFjLEVBQUUsbUJBQW1CLEVBQUUsZ0NBQWdDLENBQUMsb0RBb0JqRSxvQkFBb0IsNkVBYjFCLGlCQUFpQixnREM3QmhDLDJ2REFxQ0E7MkZEYmEscUJBQXFCO2tCQUxqQyxTQUFTOytCQUNJLGVBQWUsYUFFZCxDQUFDLGNBQWMsRUFBRSxtQkFBbUIsRUFBRSxnQ0FBZ0MsQ0FBQztxVEFHbEUsVUFBVTtzQkFBekIsS0FBSztnQkFDVSxZQUFZO3NCQUEzQixLQUFLO2dCQUNVLE9BQU87c0JBQXRCLEtBQUs7Z0JBRStCLGNBQWM7c0JBQWxELFNBQVM7dUJBQUMsaUJBQWlCO2dCQWFrQixTQUFTO3NCQUF0RCxlQUFlO3VCQUFDLG9CQUFvQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7QWZ0ZXJDb250ZW50SW5pdCwgQ29tcG9uZW50LCBDb250ZW50Q2hpbGRyZW4sIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgUXVlcnlMaXN0LCBUZW1wbGF0ZVJlZiwgVmlld0NoaWxkfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7QWN0aXZhdGVkUm91dGV9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5cbmltcG9ydCB7VHJhbnNsYXRlU2VydmljZX0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQge0NvbmZpcm1hdGlvblNlcnZpY2UsIE1lc3NhZ2VTZXJ2aWNlfSBmcm9tICdwcmltZW5nL2FwaSc7XG5pbXBvcnQge0RpYWxvZ1NlcnZpY2V9IGZyb20gJ3ByaW1lbmcvZHluYW1pY2RpYWxvZyc7XG5pbXBvcnQge1N1YnNjcmlwdGlvbn0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7TWVkaXVzUXVlcnlQYXJhbX0gZnJvbSAnLi4vLi4vYXBpL21vZGVscyc7XG5pbXBvcnQge0lEYXRhUHJvdmlkZXIsIElUYWJsZXZpZXdEYXRhUHJvdmlkZXJ9IGZyb20gJy4uLy4uL2RhdGEtcHJvdmlkZXJzJztcbmltcG9ydCB7QWN0aW9uRGVzY3JpcHRvciwgVGFibGV2aWV3RGVzY3JpcHRvcn0gZnJvbSAnLi4vLi4vZGVzY3JpcHRvcnMnO1xuaW1wb3J0IHtBY3Rpb25Qb3NpdGlvbkVudW19IGZyb20gJy4uLy4uL2Rlc2NyaXB0b3JzL3R5cGVzJztcbmltcG9ydCB7TW5nVGVtcGxhdGVEaXJlY3RpdmV9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMnO1xuaW1wb3J0IHtJVmlld0NvbnRhaW5lcn0gZnJvbSAnLi4vLi4vbW9kZWxzJztcbmltcG9ydCB7TW5nQWN0aW9uRXhlY3V0b3JTZXJ2aWNlLCBNbmdWaWV3Q29udGFpbmVyQ29tcG9uZW50U2VydmljZX0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHtUYWJsZXZpZXdBY3Rpb25EZWZhdWx0Q2F0ZWdvcmllc30gZnJvbSAnLi4vYWN0aW9uL21vZGVscyc7XG5pbXBvcnQge01uZ1RhYmxlTG9hZEV2ZW50fSBmcm9tICcuL21vZGVscyc7XG5pbXBvcnQge01uZ1RhYmxlQ29tcG9uZW50fSBmcm9tICcuL3RhYmxlL3RhYmxlLmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnbW5nLXRhYmxldmlldycsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3RhYmxldmlldy5jb21wb25lbnQuaHRtbCcsXG4gICAgcHJvdmlkZXJzOiBbTWVzc2FnZVNlcnZpY2UsIENvbmZpcm1hdGlvblNlcnZpY2UsIE1uZ1ZpZXdDb250YWluZXJDb21wb25lbnRTZXJ2aWNlXVxufSlcbmV4cG9ydCBjbGFzcyBNbmdUYWJsZXZpZXdDb21wb25lbnQ8VCwgUz4gaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgQWZ0ZXJDb250ZW50SW5pdCwgSVZpZXdDb250YWluZXI8VCwgUz4ge1xuICAgIEBJbnB1dCgpIHB1YmxpYyBkZXNjcmlwdG9yITogVGFibGV2aWV3RGVzY3JpcHRvcjxUPjtcbiAgICBASW5wdXQoKSBwdWJsaWMgZGF0YVByb3ZpZGVyPzogSVRhYmxldmlld0RhdGFQcm92aWRlcjxULCBTPjtcbiAgICBASW5wdXQoKSBwdWJsaWMgYWN0aW9uczogQXJyYXk8QWN0aW9uRGVzY3JpcHRvcjxUPj4gPSBbXTtcblxuICAgIEBWaWV3Q2hpbGQoTW5nVGFibGVDb21wb25lbnQpIHB1YmxpYyB0YWJsZUNvbXBvbmVudD86IE1uZ1RhYmxlQ29tcG9uZW50PFQsIFM+O1xuXG4gICAgcHVibGljIHRhYmxlQWN0aW9uczogQWN0aW9uRGVzY3JpcHRvcjxUPltdID0gW107XG4gICAgcHVibGljIHRvb2xiYXJMZWZ0QWN0aW9uczogQWN0aW9uRGVzY3JpcHRvcjxUPltdID0gW107XG4gICAgcHVibGljIHRvb2xiYXJSaWdodEFjdGlvbnM6IEFjdGlvbkRlc2NyaXB0b3I8VD5bXSA9IFtdO1xuXG4gICAgcHVibGljIHRhYmxlUXVlcnlQYXJhbT86IE1lZGl1c1F1ZXJ5UGFyYW07XG5cbiAgICBwcml2YXRlIHN1YnNjcmlwdGlvbnM6IFN1YnNjcmlwdGlvbltdID0gW107XG5cbiAgICBwdWJsaWMgaGFzSXRlbVNlbGVjdGlvbkFjdGlvbiA9IGZhbHNlO1xuICAgIHB1YmxpYyBzZWxlY3RlZEl0ZW1zOiBUW10gPSBbXTtcblxuICAgIEBDb250ZW50Q2hpbGRyZW4oTW5nVGVtcGxhdGVEaXJlY3RpdmUpIHB1YmxpYyB0ZW1wbGF0ZXMhOiBRdWVyeUxpc3Q8TW5nVGVtcGxhdGVEaXJlY3RpdmU+O1xuICAgIHB1YmxpYyBmb290ZXJUZW1wbGF0ZT86IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSByb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgICAgIHByaXZhdGUgbWVzc2FnZVNlcnZpY2U6IE1lc3NhZ2VTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgZGlhbG9nU2VydmljZTogRGlhbG9nU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBjb25maXJtYXRpb25TZXJ2aWNlOiBDb25maXJtYXRpb25TZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGFjdGlvbkV4ZWN1dG9yOiBNbmdBY3Rpb25FeGVjdXRvclNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgdmlld0NvbnRhaW5lclNlcnZpY2U6IE1uZ1ZpZXdDb250YWluZXJDb21wb25lbnRTZXJ2aWNlPFQsIFM+XG4gICAgKSB7fVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMudmlld0NvbnRhaW5lclNlcnZpY2Uuc2V0QWN0aW9ucyh0aGlzLmFjdGlvbnMpO1xuXG4gICAgICAgIGlmICh0aGlzLmRhdGFQcm92aWRlcikge1xuICAgICAgICAgICAgdGhpcy52aWV3Q29udGFpbmVyU2VydmljZS5kYXRhUHJvdmlkZXIgPSB0aGlzLmRhdGFQcm92aWRlcjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZWxvYWRUYWJsZVN1YnNjcmlwdGlvbiA9IHRoaXMudmlld0NvbnRhaW5lclNlcnZpY2UuZ2V0VGFibGVSZWxvYWQkKCkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMucmVsb2FkVGFibGUoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHJlbG9hZFRhYmxlU3Vic2NyaXB0aW9uKTtcblxuICAgICAgICBmb3IgKGNvbnN0IGFjdGlvbiBvZiB0aGlzLmFjdGlvbnMuZmlsdGVyKHZhbHVlID0+IHZhbHVlLnBvc2l0aW9uVGFibGV2aWV3Q2F0ZWdvcmllcz8uaW5jbHVkZXMoVGFibGV2aWV3QWN0aW9uRGVmYXVsdENhdGVnb3JpZXMuUkVBRCkgPz8gdHJ1ZSkpIHtcbiAgICAgICAgICAgIHN3aXRjaCAoYWN0aW9uLnBvc2l0aW9uKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBBY3Rpb25Qb3NpdGlvbkVudW0uVG9vbGJhckxlZnQ6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudG9vbGJhckxlZnRBY3Rpb25zLnB1c2goYWN0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBBY3Rpb25Qb3NpdGlvbkVudW0uVG9vbGJhclJpZ2h0OlxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRvb2xiYXJSaWdodEFjdGlvbnMucHVzaChhY3Rpb24pO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIEFjdGlvblBvc2l0aW9uRW51bS5UYWJsZUhlYWRlcjpcbiAgICAgICAgICAgICAgICBjYXNlIEFjdGlvblBvc2l0aW9uRW51bS5Sb3dJbmxpbmU6XG4gICAgICAgICAgICAgICAgY2FzZSBBY3Rpb25Qb3NpdGlvbkVudW0uUm93Q2xpY2s6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudGFibGVBY3Rpb25zLnB1c2goYWN0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnRvb2xiYXJSaWdodEFjdGlvbnMgPSB0aGlzLnRvb2xiYXJSaWdodEFjdGlvbnMucmV2ZXJzZSgpO1xuXG4gICAgICAgIHRoaXMuaGFzSXRlbVNlbGVjdGlvbkFjdGlvbiA9IFsuLi50aGlzLnRvb2xiYXJMZWZ0QWN0aW9ucywgLi4udGhpcy50b29sYmFyUmlnaHRBY3Rpb25zXS5zb21lKGUgPT4gZS5oYXNJdGVtc1NlbGVjdGlvbik7XG4gICAgfVxuXG4gICAgbmdBZnRlckNvbnRlbnRJbml0KCkge1xuICAgICAgICB0aGlzLnRlbXBsYXRlcy5mb3JFYWNoKHRlbXBsYXRlID0+IHtcbiAgICAgICAgICAgIHN3aXRjaCAodGVtcGxhdGUuZ2V0VHlwZSgpKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnZm9vdGVyJzpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb290ZXJUZW1wbGF0ZSA9IHRlbXBsYXRlLnRlbXBsYXRlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKHMgPT4gcy51bnN1YnNjcmliZSgpKTtcbiAgICB9XG5cbiAgICBnZXRNZXNzYWdlU2VydmljZSgpOiBNZXNzYWdlU2VydmljZSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1lc3NhZ2VTZXJ2aWNlO1xuICAgIH1cblxuICAgIGdldERhdGFQcm92aWRlcigpOiBJRGF0YVByb3ZpZGVyPFQsIFM+IHwgdW5kZWZpbmVkIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YVByb3ZpZGVyO1xuICAgIH1cblxuICAgIGdldEFjdGlvbnMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFjdGlvbnM7XG4gICAgfVxuXG4gICAgcHVibGljIHJlbG9hZFRhYmxlKCkge1xuICAgICAgICB0aGlzLnRhYmxlQ29tcG9uZW50Py5yZWxvYWQoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25UYWJsZUxvYWQoZXZlbnQ6IE1uZ1RhYmxlTG9hZEV2ZW50KSB7XG4gICAgICAgIHRoaXMudGFibGVRdWVyeVBhcmFtID0gZXZlbnQucXVlcnlQYXJhbTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2VsZWN0aW9uQ2hhbmdlKHNlbGVjdGVkSXRlbXM6IEFycmF5PFQ+KTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcyA9IHNlbGVjdGVkSXRlbXM7XG4gICAgfVxufVxuIiwiPGRpdiBjbGFzcz1cIm1uZy10YWJsZXZpZXdcIj5cbiAgICA8cC10b2FzdD48L3AtdG9hc3Q+XG5cbiAgICA8ZGl2IGNsYXNzPVwiY2FyZFwiPlxuICAgICAgICA8cC10b29sYmFyIHN0eWxlQ2xhc3M9XCJtYi00XCIgKm5nSWY9XCJ0b29sYmFyTGVmdEFjdGlvbnMubGVuZ3RoID4gMCB8fCB0b29sYmFyUmlnaHRBY3Rpb25zLmxlbmd0aCA+IDBcIj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJsZWZ0XCI+XG4gICAgICAgICAgICAgICAgPG1uZy1hY3Rpb24gKm5nRm9yPVwibGV0IGFjdGlvbiBvZiB0b29sYmFyTGVmdEFjdGlvbnNcIiBbYWN0aW9uXT1cImFjdGlvblwiIFtxdWVyeVBhcmFtXT1cInRhYmxlUXVlcnlQYXJhbVwiIFtzZWxlY3RlZEl0ZW1zXT1cInNlbGVjdGVkSXRlbXNcIj48L21uZy1hY3Rpb24+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwicmlnaHRcIj5cbiAgICAgICAgICAgICAgICA8bW5nLWFjdGlvbiAqbmdGb3I9XCJsZXQgYWN0aW9uIG9mIHRvb2xiYXJSaWdodEFjdGlvbnNcIiBbYWN0aW9uXT1cImFjdGlvblwiIFtxdWVyeVBhcmFtXT1cInRhYmxlUXVlcnlQYXJhbVwiIFtzZWxlY3RlZEl0ZW1zXT1cInNlbGVjdGVkSXRlbXNcIj48L21uZy1hY3Rpb24+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L3AtdG9vbGJhcj5cblxuICAgICAgICA8bW5nLXRhYmxlXG4gICAgICAgICAgICBbZGVzY3JpcHRvcl09XCJkZXNjcmlwdG9yLnRhYmxlXCJcbiAgICAgICAgICAgIFtkYXRhUHJvdmlkZXJdPVwiZGF0YVByb3ZpZGVyXCJcbiAgICAgICAgICAgIFt1c2VRdWVyeVBhcmFtc109XCJ0cnVlXCJcbiAgICAgICAgICAgIFthY3Rpb25zXT1cInRhYmxlQWN0aW9uc1wiXG4gICAgICAgICAgICBbc2VsZWN0aW9uRW5hYmxlZF09XCJoYXNJdGVtU2VsZWN0aW9uQWN0aW9uXCJcbiAgICAgICAgICAgIFtzZWxlY3Rpb25Nb2RlXT1cIidtdWx0aXBsZSdcIlxuICAgICAgICAgICAgKHRhYmxlTG9hZCk9XCJvblRhYmxlTG9hZCgkZXZlbnQpXCJcbiAgICAgICAgICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwic2VsZWN0aW9uQ2hhbmdlKCRldmVudClcIj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBtbmdUZW1wbGF0ZT1cImNhcHRpb25cIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbHVtbiBtZDpmbGV4LXJvdyBtZDpqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiB0YWJsZS1oZWFkZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGg1IGNsYXNzPVwicC0wIG0tMFwiPnt7IGRlc2NyaXB0b3IudGFibGVUaXRsZSA/PyAnJyB8IHRyYW5zbGF0ZSB9fTwvaDU+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgbGV0LXF1ZXJ5UmVzdWx0PVwicXVlcnlSZXN1bHRcIiBtbmdUZW1wbGF0ZT1cImZvb3RlclwiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJmb290ZXJUZW1wbGF0ZVwiIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImZvb3RlclRlbXBsYXRlXCIgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntxdWVyeVJlc3VsdDogcXVlcnlSZXN1bHR9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L21uZy10YWJsZT5cbiAgICA8L2Rpdj5cblxuICAgIDxyb3V0ZXItb3V0bGV0Pjwvcm91dGVyLW91dGxldD5cbjwvZGl2PlxuIl19