valtech-components 4.0.72 → 4.0.73

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 (52) hide show
  1. package/esm2022/lib/components/molecules/chip-group/chip-group.component.mjs +2 -4
  2. package/esm2022/lib/components/molecules/command-display/command-display.component.mjs +2 -4
  3. package/esm2022/lib/components/molecules/comment/comment.component.mjs +2 -4
  4. package/esm2022/lib/components/molecules/content-reaction/content-reaction.component.mjs +2 -4
  5. package/esm2022/lib/components/molecules/date-input/date-input.component.mjs +2 -4
  6. package/esm2022/lib/components/molecules/date-picker/date-picker.component.mjs +2 -4
  7. package/esm2022/lib/components/molecules/features-list/features-list.component.mjs +2 -4
  8. package/esm2022/lib/components/molecules/font-size-selector/font-size-selector.component.mjs +2 -4
  9. package/esm2022/lib/components/molecules/pagination/pagination.component.mjs +2 -4
  10. package/esm2022/lib/components/molecules/password-input/password-input.component.mjs +2 -4
  11. package/esm2022/lib/components/molecules/permission-selector/permission-selector.component.mjs +2 -4
  12. package/esm2022/lib/components/molecules/rating/rating.component.mjs +2 -4
  13. package/esm2022/lib/components/molecules/ticket-card/ticket-card.component.mjs +2 -4
  14. package/esm2022/lib/components/organisms/about-view/about-view.component.mjs +2 -4
  15. package/esm2022/lib/components/organisms/account-view/account-view.component.mjs +2 -4
  16. package/esm2022/lib/components/organisms/api-key-create-modal/api-key-create-modal.component.mjs +3 -7
  17. package/esm2022/lib/components/organisms/api-keys-modal/api-keys-modal.component.mjs +3 -7
  18. package/esm2022/lib/components/organisms/api-keys-view/api-keys-view.component.mjs +2 -4
  19. package/esm2022/lib/components/organisms/auth-cta/auth-cta.component.mjs +2 -4
  20. package/esm2022/lib/components/organisms/create-org-modal/create-org-modal.component.mjs +2 -4
  21. package/esm2022/lib/components/organisms/delete-account-modal/delete-account-modal.component.mjs +2 -4
  22. package/esm2022/lib/components/organisms/edit-org-modal/edit-org-modal.component.mjs +2 -4
  23. package/esm2022/lib/components/organisms/field-list/field-list.component.mjs +2 -4
  24. package/esm2022/lib/components/organisms/invite-member-modal/invite-member-modal.component.mjs +2 -4
  25. package/esm2022/lib/components/organisms/member-detail-modal/member-detail-modal.component.mjs +3 -7
  26. package/esm2022/lib/components/organisms/member-import-modal/member-import-modal.component.mjs +3 -7
  27. package/esm2022/lib/components/organisms/notification-preferences-view/notification-preferences-view.component.mjs +2 -4
  28. package/esm2022/lib/components/organisms/notifications-view/notifications-view.component.mjs +2 -4
  29. package/esm2022/lib/components/organisms/org-info-sheet/org-info-sheet.component.mjs +2 -4
  30. package/esm2022/lib/components/organisms/organization-view/organization-view.component.mjs +2 -4
  31. package/esm2022/lib/components/organisms/permissions-view/permissions-view.component.mjs +2 -4
  32. package/esm2022/lib/components/organisms/preferences-view/preferences-view.component.mjs +2 -4
  33. package/esm2022/lib/components/organisms/profile-view/profile-view.component.mjs +2 -4
  34. package/esm2022/lib/components/organisms/qr-scanner/qr-scanner.component.mjs +2 -4
  35. package/esm2022/lib/components/organisms/security-view/security-view.component.mjs +2 -4
  36. package/esm2022/lib/components/organisms/settings-hub/settings-hub.component.mjs +3 -7
  37. package/esm2022/lib/components/organisms/share-profile-modal/share-profile-modal.component.mjs +2 -4
  38. package/esm2022/lib/components/organisms/switch-org-modal/switch-org-modal.component.mjs +2 -4
  39. package/esm2022/lib/components/organisms/transfer-ownership-modal/transfer-ownership-modal.component.mjs +3 -7
  40. package/esm2022/lib/services/i18n/i18n.service.mjs +21 -1
  41. package/esm2022/lib/version.mjs +2 -2
  42. package/fesm2022/valtech-components.mjs +66 -136
  43. package/fesm2022/valtech-components.mjs.map +1 -1
  44. package/lib/components/atoms/rights-footer/rights-footer.component.d.ts +2 -2
  45. package/lib/components/molecules/cta-card/cta-card.component.d.ts +1 -1
  46. package/lib/components/molecules/metric-card/metric-card.component.d.ts +1 -1
  47. package/lib/components/organisms/article/article.component.d.ts +5 -5
  48. package/lib/components/organisms/auth-cta/auth-cta.component.d.ts +1 -1
  49. package/lib/components/organisms/landing-steps/landing-steps.component.d.ts +1 -1
  50. package/lib/services/i18n/i18n.service.d.ts +7 -0
  51. package/lib/version.d.ts +1 -1
  52. package/package.json +1 -1
@@ -77,14 +77,10 @@ export class MemberImportModalComponent {
77
77
  return this.t('summary');
78
78
  return `${this.t('summary')}: ${s.created} ${this.t('created')} · ${s.assigned} ${this.t('assigned')} · ${s.skipped} ${this.t('skipped')} · ${s.failed} ${this.t('failed')}`;
79
79
  });
80
- if (!this.i18n.hasNamespace(DEFAULT_NAMESPACE)) {
81
- this.i18n.registerContent(DEFAULT_NAMESPACE, MEMBER_IMPORT_MODAL_I18N);
82
- }
80
+ this.i18n.registerDefaults(DEFAULT_NAMESPACE, MEMBER_IMPORT_MODAL_I18N);
83
81
  }
84
82
  ngOnInit() {
85
- if (!this.i18n.hasNamespace(this.i18nNamespace)) {
86
- this.i18n.registerContent(this.i18nNamespace, MEMBER_IMPORT_MODAL_I18N);
87
- }
83
+ this.i18n.registerDefaults(this.i18nNamespace, MEMBER_IMPORT_MODAL_I18N);
88
84
  }
89
85
  /** Carga un archivo CSV seleccionado: lee su texto al textarea (`csv`). */
90
86
  onFileSelected(event) {
@@ -481,4 +477,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
481
477
  }], i18nNamespace: [{
482
478
  type: Input
483
479
  }] } });
484
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVtYmVyLWltcG9ydC1tb2RhbC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvb3JnYW5pc21zL21lbWJlci1pbXBvcnQtbW9kYWwvbWVtYmVyLWltcG9ydC1tb2RhbC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkYsT0FBTyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMvRSxPQUFPLEVBQ0wsU0FBUyxFQUNULFVBQVUsRUFDVixVQUFVLEVBQ1YsU0FBUyxFQUNULE9BQU8sRUFDUCxVQUFVLEVBQ1YsV0FBVyxFQUNYLFVBQVUsR0FDWCxNQUFNLDJCQUEyQixDQUFDO0FBQ25DLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDcEMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFekUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDekUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ2hFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNuRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxtREFBbUQsQ0FBQztBQUN4RixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxxREFBcUQsQ0FBQztBQUM5RixPQUFPLEVBQUUsZUFBZSxFQUFpQixTQUFTLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFeEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3JELE9BQU8sRUFBRSxV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QUFXLDhWQUNYLG1CQUFtQiwrQkFDbkIsU0FBUyxvR0FDVCxVQUFVLG1GQUNWLFVBQVUsOEVBQ1YsU0FBUyxvUEFDVCxVQUFVLHdLQUNWLFdBQVcsaWFBQ1gsVUFBVSx5R0FDVixPQUFPLDJKQUNQLGdCQUFnQiwyRUFDaEIsYUFBYSx3RUFDYixjQUFjLHlFQUNkLHVCQUF1QiwwRkFDdkIsbUJBQW1COzs0RkF3U1YsMEJBQTBCO2tCQTFUdEMsU0FBUzsrQkFDRSx5QkFBeUIsY0FDdkIsSUFBSSxXQUNQO3dCQUNQLFdBQVc7d0JBQ1gsbUJBQW1CO3dCQUNuQixTQUFTO3dCQUNULFVBQVU7d0JBQ1YsVUFBVTt3QkFDVixTQUFTO3dCQUNULFVBQVU7d0JBQ1YsV0FBVzt3QkFDWCxVQUFVO3dCQUNWLE9BQU87d0JBQ1AsZ0JBQWdCO3dCQUNoQixhQUFhO3dCQUNiLGNBQWM7d0JBQ2QsdUJBQXVCO3dCQUN2QixtQkFBbUI7cUJBQ3BCLFlBQ1M7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTBJVDt3REFpS1EsS0FBSztzQkFBYixLQUFLO2dCQUdHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBR0csU0FBUztzQkFBakIsS0FBSztnQkFHRyxTQUFTO3NCQUFqQixLQUFLO2dCQUdHLGFBQWE7c0JBQXJCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIGNvbXB1dGVkLCBpbmplY3QsIElucHV0LCBPbkluaXQsIHNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUNvbnRyb2wsIEZvcm1zTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtcbiAgSW9uQnV0dG9uLFxuICBJb25CdXR0b25zLFxuICBJb25Db250ZW50LFxuICBJb25IZWFkZXIsXG4gIElvbkljb24sXG4gIElvblNwaW5uZXIsXG4gIElvblRleHRhcmVhLFxuICBJb25Ub29sYmFyLFxufSBmcm9tICdAaW9uaWMvYW5ndWxhci9zdGFuZGFsb25lJztcbmltcG9ydCB7IGFkZEljb25zIH0gZnJvbSAnaW9uaWNvbnMnO1xuaW1wb3J0IHsgY2xvdWRVcGxvYWRPdXRsaW5lLCBkb2N1bWVudFRleHRPdXRsaW5lIH0gZnJvbSAnaW9uaWNvbnMvaWNvbnMnO1xuXG5pbXBvcnQgeyBEaXNwbGF5Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vYXRvbXMvZGlzcGxheS9kaXNwbGF5LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUZXh0Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vYXRvbXMvdGV4dC90ZXh0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUaXRsZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2F0b21zL3RpdGxlL3RpdGxlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDaGVja0lucHV0Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vbW9sZWN1bGVzL2NoZWNrLWlucHV0L2NoZWNrLWlucHV0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTZWFyY2hTZWxlY3RvckNvbXBvbmVudCB9IGZyb20gJy4uLy4uL21vbGVjdWxlcy9zZWxlY3QtaW5wdXQvc2VsZWN0LWlucHV0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDb21wb25lbnRTdGF0ZXMsIElucHV0TWV0YWRhdGEsIElucHV0VHlwZSB9IGZyb20gJy4uLy4uL3R5cGVzJztcblxuaW1wb3J0IHsgSTE4blNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9pMThuJztcbmltcG9ydCB7IE9yZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9vcmcvb3JnLnNlcnZpY2UnO1xuaW1wb3J0IHtcbiAgSW1wb3J0TWVtYmVyc1Jlc3BvbnNlLFxuICBJbXBvcnRPbkNvbmZsaWN0LFxuICBJbXBvcnRSb3dSZXN1bHQsXG4gIEltcG9ydFVzZXJSb3csXG4gIE9yZ1JvbGUsXG4gIHJlc29sdmVSb2xlTGFiZWwsXG59IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL29yZy90eXBlcyc7XG5cbmltcG9ydCB7IE1FTUJFUl9JTVBPUlRfTU9EQUxfSTE4TiB9IGZyb20gJy4vbWVtYmVyLWltcG9ydC1tb2RhbC5pMThuJztcblxuY29uc3QgREVGQVVMVF9OQU1FU1BBQ0UgPSAnU2V0dGluZ3MuSW1wb3J0TW9kYWwnO1xuXG5hZGRJY29ucyh7IGNsb3VkVXBsb2FkT3V0bGluZSwgZG9jdW1lbnRUZXh0T3V0bGluZSB9KTtcblxuLyoqXG4gKiBgdmFsLW1lbWJlci1pbXBvcnQtbW9kYWxgIOKAlCBwYW5lbCBkZSBjYXJnYSBtYXNpdmEgZGUgbWllbWJyb3MgKEFEUi0wMjMgZmFzZSA2KS5cbiAqXG4gKiBFbCBhZG1pbiBwZWdhIHVuIENTViAoYGVtYWlsLG5vbWJyZSxyb2xgKTsgZWwgbW9kYWwgbG8gcGFyc2VhIGEgZmlsYXMgeSBsbGFtYVxuICogYE9yZ1NlcnZpY2UuaW1wb3J0TWVtYmVyc2AuIE11ZXN0cmEgZWwgcmVzdWx0YWRvIHBvci1maWxhIChwYXJ0aWFsIHN1Y2Nlc3MpOlxuICogYGNyZWF0ZWRgIC8gYGFzc2lnbmVkYCAvIGBza2lwcGVkYCAvIGBlcnJvcmAuIEhlYWRlciBjYW7Ds25pY28gKFJlZ2xhICM1KS5cbiAqXG4gKiBBdXRvLXJlZ2lzdHJhIGRlZmF1bHRzIGkxOG4gKGVzL2VuKSBlbiBgU2V0dGluZ3MuSW1wb3J0TW9kYWxgLlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd2YWwtbWVtYmVyLWltcG9ydC1tb2RhbCcsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBGb3Jtc01vZHVsZSxcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICAgIElvbkhlYWRlcixcbiAgICBJb25Ub29sYmFyLFxuICAgIElvbkJ1dHRvbnMsXG4gICAgSW9uQnV0dG9uLFxuICAgIElvbkNvbnRlbnQsXG4gICAgSW9uVGV4dGFyZWEsXG4gICAgSW9uU3Bpbm5lcixcbiAgICBJb25JY29uLFxuICAgIERpc3BsYXlDb21wb25lbnQsXG4gICAgVGV4dENvbXBvbmVudCxcbiAgICBUaXRsZUNvbXBvbmVudCxcbiAgICBTZWFyY2hTZWxlY3RvckNvbXBvbmVudCxcbiAgICBDaGVja0lucHV0Q29tcG9uZW50LFxuICBdLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxpb24taGVhZGVyPlxuICAgICAgPGlvbi10b29sYmFyPlxuICAgICAgICA8aW9uLWJ1dHRvbnMgc2xvdD1cImVuZFwiPlxuICAgICAgICAgIDxpb24tYnV0dG9uIGZpbGw9XCJjbGVhclwiIGNvbG9yPVwiZGFya1wiIHNoYXBlPVwicm91bmRcIiAoY2xpY2spPVwiZGlzbWlzcygpXCI+XG4gICAgICAgICAgICA8c3Ryb25nPnt7IHQoJ2Nsb3NlJykgfX08L3N0cm9uZz5cbiAgICAgICAgICA8L2lvbi1idXR0b24+XG4gICAgICAgIDwvaW9uLWJ1dHRvbnM+XG4gICAgICA8L2lvbi10b29sYmFyPlxuICAgIDwvaW9uLWhlYWRlcj5cblxuICAgIDxpb24tY29udGVudCBjbGFzcz1cImlvbi1wYWRkaW5nXCI+XG4gICAgICA8dmFsLWRpc3BsYXkgW3Byb3BzXT1cInsgY29udGVudDogdCgndGl0bGUnKSwgc2l6ZTogJ3NtYWxsJywgY29sb3I6ICdkYXJrJyB9XCIgLz5cbiAgICAgIDx2YWwtdGl0bGUgW3Byb3BzXT1cInsgY29udGVudDogdCgnc3VidGl0bGUnKSwgc2l6ZTogJ2xhcmdlJywgY29sb3I6ICcnLCBib2xkOiBmYWxzZSB9XCIgLz5cblxuICAgICAgQGlmICghcmVzdWx0cygpKSB7XG4gICAgICAgIEBpZiAocm9sZXNIaW50KCkpIHtcbiAgICAgICAgICA8dmFsLXRleHRcbiAgICAgICAgICAgIGNsYXNzPVwiaW1wb3J0LXJvbGVzLWhpbnRcIlxuICAgICAgICAgICAgW3Byb3BzXT1cInsgY29udGVudDogcm9sZXNIaW50KCksIHNpemU6ICdzbWFsbCcsIGNvbG9yOiAnbWVkaXVtJywgYm9sZDogZmFsc2UgfVwiXG4gICAgICAgICAgLz5cbiAgICAgICAgfVxuXG4gICAgICAgIDwhLS0gU2VsZWN0b3IgZGUgbcOpdG9kbyBkZSBpbXBvcnRhY2nDs24gLS0+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJpbXBvcnQtc2VjdGlvblwiPlxuICAgICAgICAgIDx2YWwtdGl0bGUgW3Byb3BzXT1cInsgY29udGVudDogdCgnaW1wb3J0TWV0aG9kTGFiZWwnKSwgc2l6ZTogJ3NtYWxsJywgY29sb3I6ICdkYXJrJywgYm9sZDogdHJ1ZSB9XCIgLz5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW1wb3J0LW1ldGhvZC1jYXJkc1wiPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJpbXBvcnQtbWV0aG9kLWNhcmRcIlxuICAgICAgICAgICAgICBbY2xhc3MuaW1wb3J0LW1ldGhvZC1jYXJkLS1hY3RpdmVdPVwiaW1wb3J0TW9kZSgpID09PSAnZmlsZSdcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiaW1wb3J0TW9kZS5zZXQoJ2ZpbGUnKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxpb24taWNvbiBuYW1lPVwiY2xvdWQtdXBsb2FkLW91dGxpbmVcIiBjbGFzcz1cImltcG9ydC1tZXRob2QtY2FyZF9faWNvblwiIC8+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaW1wb3J0LW1ldGhvZC1jYXJkX190aXRsZVwiPnt7IHQoJ2ltcG9ydE1ldGhvZEZpbGUnKSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpbXBvcnQtbWV0aG9kLWNhcmRfX2hpbnRcIj57eyB0KCdpbXBvcnRNZXRob2RGaWxlSGludCcpIH19PC9zcGFuPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICBjbGFzcz1cImltcG9ydC1tZXRob2QtY2FyZFwiXG4gICAgICAgICAgICAgIFtjbGFzcy5pbXBvcnQtbWV0aG9kLWNhcmQtLWFjdGl2ZV09XCJpbXBvcnRNb2RlKCkgPT09ICdwYXN0ZSdcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiaW1wb3J0TW9kZS5zZXQoJ3Bhc3RlJylcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8aW9uLWljb24gbmFtZT1cImRvY3VtZW50LXRleHQtb3V0bGluZVwiIGNsYXNzPVwiaW1wb3J0LW1ldGhvZC1jYXJkX19pY29uXCIgLz5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpbXBvcnQtbWV0aG9kLWNhcmRfX3RpdGxlXCI+e3sgdCgnaW1wb3J0TWV0aG9kUGFzdGUnKSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpbXBvcnQtbWV0aG9kLWNhcmRfX2hpbnRcIj57eyB0KCdpbXBvcnRNZXRob2RQYXN0ZUhpbnQnKSB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8IS0tIFN1YmlkYSBkZSBhcmNoaXZvIChsYWJlbCB0cmljayDigJQgZ2VzdG8gY29uZmlhYmxlIGVuIGlPUy9QV0EpIC0tPlxuICAgICAgICBAaWYgKGltcG9ydE1vZGUoKSA9PT0gJ2ZpbGUnKSB7XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImltcG9ydC1zZWN0aW9uXCI+XG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJpbXBvcnQtdXBsb2FkX19idG5cIj5cbiAgICAgICAgICAgICAgPGlvbi1pY29uIG5hbWU9XCJjbG91ZC11cGxvYWQtb3V0bGluZVwiIC8+XG4gICAgICAgICAgICAgIDxzcGFuPnt7IHQoJ3VwbG9hZEZpbGUnKSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJmaWxlXCIgYWNjZXB0PVwiLmNzdix0ZXh0L2Nzdix0ZXh0L3BsYWluXCIgKGNoYW5nZSk9XCJvbkZpbGVTZWxlY3RlZCgkZXZlbnQpXCIgLz5cbiAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICBAaWYgKGZpbGVOYW1lKCkpIHtcbiAgICAgICAgICAgICAgPHAgY2xhc3M9XCJpbXBvcnQtZmlsZS1sb2FkZWRcIj5cbiAgICAgICAgICAgICAgICB7eyB0KCdmaWxlTG9hZGVkJykucmVwbGFjZSgne25hbWV9JywgZmlsZU5hbWUoKSkgfX1cbiAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG5cbiAgICAgICAgPCEtLSBQZWdhciBDU1YgLS0+XG4gICAgICAgIEBpZiAoaW1wb3J0TW9kZSgpID09PSAncGFzdGUnKSB7XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImltcG9ydC1zZWN0aW9uXCI+XG4gICAgICAgICAgICA8aW9uLXRleHRhcmVhXG4gICAgICAgICAgICAgIGNsYXNzPVwiaW1wb3J0LWNzdlwiXG4gICAgICAgICAgICAgIFthdXRvR3Jvd109XCJ0cnVlXCJcbiAgICAgICAgICAgICAgW3Jvd3NdPVwiNlwiXG4gICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJ0KCdjc3ZQbGFjZWhvbGRlcicpXCJcbiAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJjc3ZcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuXG4gICAgICAgIDwhLS0gU2kgaHVibyBjYXJnYSBkZSBhcmNoaXZvLCBtb3N0cmFyIHRleHRhcmVhIGRlIHNvbG8gbGVjdHVyYSBwYXJhIHJldmlzYXIgLS0+XG4gICAgICAgIEBpZiAoaW1wb3J0TW9kZSgpID09PSAnZmlsZScgJiYgY3N2KSB7XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImltcG9ydC1zZWN0aW9uXCI+XG4gICAgICAgICAgICA8aW9uLXRleHRhcmVhIGNsYXNzPVwiaW1wb3J0LWNzdlwiIFthdXRvR3Jvd109XCJ0cnVlXCIgW3Jvd3NdPVwiNFwiIFtyZWFkb25seV09XCJ0cnVlXCIgW3ZhbHVlXT1cImNzdlwiIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cblxuICAgICAgICA8IS0tIENvbmZsaWN0bzogc2VsZWN0IC0tPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiaW1wb3J0LXNlY3Rpb25cIj5cbiAgICAgICAgICA8dmFsLXRpdGxlIFtwcm9wc109XCJ7IGNvbnRlbnQ6IHQoJ29uQ29uZmxpY3RMYWJlbCcpLCBzaXplOiAnc21hbGwnLCBjb2xvcjogJ2RhcmsnLCBib2xkOiB0cnVlIH1cIiAvPlxuICAgICAgICAgIDx2YWwtc2VsZWN0LWlucHV0IFtwcm9wc109XCJjb25mbGljdFNlbGVjdFByb3BzKClcIiAvPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8IS0tIEFjdGl2YWNpw7NuOiB2YWwtY2hlY2staW5wdXQgLS0+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJpbXBvcnQtc2VjdGlvblwiPlxuICAgICAgICAgIDx2YWwtY2hlY2staW5wdXQgW3Byb3BzXT1cInNlbmRBY3RpdmF0aW9uUHJvcHMoKVwiIC8+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIEBpZiAoZXJyb3JNc2coKSkge1xuICAgICAgICAgIDxwIGNsYXNzPVwiaW1wb3J0LWVycm9yXCI+e3sgZXJyb3JNc2coKSB9fTwvcD5cbiAgICAgICAgfVxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJpbXBvcnQtYWN0aW9uc1wiPlxuICAgICAgICAgIDxpb24tYnV0dG9uIGV4cGFuZD1cImJsb2NrXCIgY29sb3I9XCJkYXJrXCIgc2hhcGU9XCJyb3VuZFwiIFtkaXNhYmxlZF09XCJzdWJtaXR0aW5nKClcIiAoY2xpY2spPVwic3VibWl0KClcIj5cbiAgICAgICAgICAgIEBpZiAoc3VibWl0dGluZygpKSB7XG4gICAgICAgICAgICAgIDxpb24tc3Bpbm5lciBuYW1lPVwiZG90c1wiIC8+XG4gICAgICAgICAgICAgICZuYnNwO3t7IHQoJ3N1Ym1pdHRpbmcnKSB9fVxuICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgIHt7IHQoJ3N1Ym1pdCcpIH19XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9pb24tYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIH0gQGVsc2Uge1xuICAgICAgICA8IS0tIFJlc3VsdGFkb3MgLS0+XG4gICAgICAgIDx2YWwtdGl0bGUgW3Byb3BzXT1cInsgY29udGVudDogc3VtbWFyeUxhYmVsKCksIHNpemU6ICdsYXJnZScsIGNvbG9yOiAnJywgYm9sZDogdHJ1ZSB9XCIgLz5cbiAgICAgICAgPGRpdiBjbGFzcz1cImltcG9ydC1yZXN1bHRzXCI+XG4gICAgICAgICAgQGZvciAociBvZiByZXN1bHRzKCkhLnJlc3VsdHM7IHRyYWNrIHIuZW1haWwpIHtcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbXBvcnQtcm93IGltcG9ydC1yb3ctLXt7IHIuc3RhdHVzIH19XCI+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaW1wb3J0LXJvd19fZW1haWxcIj57eyByLmVtYWlsIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImltcG9ydC1yb3dfX3N0YXR1c1wiPnt7IHN0YXR1c0xhYmVsKHIpIH19PC9zcGFuPlxuICAgICAgICAgICAgICBAaWYgKHIucmVhc29uKSB7XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpbXBvcnQtcm93X19yZWFzb25cIj57eyByLnJlYXNvbiB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImltcG9ydC1hY3Rpb25zXCI+XG4gICAgICAgICAgPGlvbi1idXR0b24gZXhwYW5kPVwiYmxvY2tcIiBmaWxsPVwib3V0bGluZVwiIGNvbG9yPVwiZGFya1wiIHNoYXBlPVwicm91bmRcIiAoY2xpY2spPVwicmVzZXQoKVwiPlxuICAgICAgICAgICAge3sgdCgnYWdhaW4nKSB9fVxuICAgICAgICAgIDwvaW9uLWJ1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1jbG9zZS1ib3R0b21cIj5cbiAgICAgICAgPGlvbi1idXR0b24gZXhwYW5kPVwiYmxvY2tcIiBmaWxsPVwib3V0bGluZVwiIGNvbG9yPVwiZGFya1wiIHNoYXBlPVwicm91bmRcIiAoY2xpY2spPVwiZGlzbWlzcygpXCI+XG4gICAgICAgICAge3sgdCgnY2xvc2UnKSB9fVxuICAgICAgICA8L2lvbi1idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L2lvbi1jb250ZW50PlxuICBgLFxuICBzdHlsZXM6IFtcbiAgICBgXG4gICAgICB2YWwtZGlzcGxheSB7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICBtYXJnaW4tYm90dG9tOiA0cHg7XG4gICAgICB9XG4gICAgICB2YWwtdGl0bGUge1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogOHB4O1xuICAgICAgfVxuICAgICAgLmltcG9ydC1yb2xlcy1oaW50IHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDI0cHg7XG4gICAgICB9XG4gICAgICAuaW1wb3J0LXNlY3Rpb24ge1xuICAgICAgICBtYXJnaW4tYm90dG9tOiAyOHB4O1xuICAgICAgfVxuICAgICAgLmltcG9ydC1zZWN0aW9uIHZhbC10aXRsZSB7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDEwcHg7XG4gICAgICB9XG4gICAgICAuaW1wb3J0LW1ldGhvZC1jYXJkcyB7XG4gICAgICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyIDFmcjtcbiAgICAgICAgZ2FwOiAxMnB4O1xuICAgICAgfVxuICAgICAgLmltcG9ydC1tZXRob2QtY2FyZCB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xuICAgICAgICBnYXA6IDRweDtcbiAgICAgICAgcGFkZGluZzogMTRweCAxNnB4O1xuICAgICAgICBib3JkZXI6IDEuNXB4IHNvbGlkIHZhcigtLWlvbi1jb2xvci1saWdodC1zaGFkZSwgI2Q3ZDhkYSk7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDEycHg7XG4gICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWlvbi1jb2xvci1saWdodCk7XG4gICAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgICAgICAgdHJhbnNpdGlvbjpcbiAgICAgICAgICBib3JkZXItY29sb3IgMC4xNXMgZWFzZSxcbiAgICAgICAgICBiYWNrZ3JvdW5kIDAuMTVzIGVhc2U7XG4gICAgICB9XG4gICAgICAuaW1wb3J0LW1ldGhvZC1jYXJkOmhvdmVyIHtcbiAgICAgICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1pb24tY29sb3ItbWVkaXVtLCAjOTI5NDljKTtcbiAgICAgIH1cbiAgICAgIC5pbXBvcnQtbWV0aG9kLWNhcmQtLWFjdGl2ZSB7XG4gICAgICAgIGJvcmRlci1jb2xvcjogdmFyKC0taW9uLWNvbG9yLXByaW1hcnksICM3MDI2ZGYpO1xuICAgICAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0taW9uLWNvbG9yLXByaW1hcnksICM3MDI2ZGYpIDYlLCB2YXIoLS1pb24tY29sb3ItbGlnaHQpKTtcbiAgICAgIH1cbiAgICAgIC5pbXBvcnQtbWV0aG9kLWNhcmRfX2ljb24ge1xuICAgICAgICBmb250LXNpemU6IDEuMzc1cmVtO1xuICAgICAgICBjb2xvcjogdmFyKC0taW9uLWNvbG9yLW1lZGl1bS1zaGFkZSwgIzZiNmU3Nik7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDRweDtcbiAgICAgIH1cbiAgICAgIC5pbXBvcnQtbWV0aG9kLWNhcmQtLWFjdGl2ZSAuaW1wb3J0LW1ldGhvZC1jYXJkX19pY29uIHtcbiAgICAgICAgY29sb3I6IHZhcigtLWlvbi1jb2xvci1wcmltYXJ5LCAjNzAyNmRmKTtcbiAgICAgIH1cbiAgICAgIC5pbXBvcnQtbWV0aG9kLWNhcmRfX3RpdGxlIHtcbiAgICAgICAgZm9udC1zaXplOiAwLjg3NXJlbTtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgICAgY29sb3I6IHZhcigtLWlvbi1jb2xvci1kYXJrKTtcbiAgICAgIH1cbiAgICAgIC5pbXBvcnQtbWV0aG9kLWNhcmRfX2hpbnQge1xuICAgICAgICBmb250LXNpemU6IDAuNzVyZW07XG4gICAgICAgIGNvbG9yOiB2YXIoLS1pb24tY29sb3ItbWVkaXVtLCAjOTI5NDljKTtcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMztcbiAgICAgIH1cbiAgICAgIC5pbXBvcnQtdXBsb2FkX19idG4ge1xuICAgICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAgZ2FwOiA4cHg7XG4gICAgICAgIHBhZGRpbmc6IDEwcHggMTZweDtcbiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0taW9uLWNvbG9yLW1lZGl1bSwgIzkyOTQ5Yyk7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDEwcHg7XG4gICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWlvbi1jb2xvci1saWdodCk7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1pb24tY29sb3ItZGFyayk7XG4gICAgICAgIGZvbnQtc2l6ZTogMC44NzVyZW07XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgICAgdHJhbnNpdGlvbjogYm9yZGVyLWNvbG9yIDAuMTVzIGVhc2U7XG4gICAgICB9XG4gICAgICAuaW1wb3J0LXVwbG9hZF9fYnRuOmhvdmVyIHtcbiAgICAgICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1pb24tY29sb3ItcHJpbWFyeSwgIzcwMjZkZik7XG4gICAgICB9XG4gICAgICAuaW1wb3J0LXVwbG9hZF9fYnRuIGlvbi1pY29uIHtcbiAgICAgICAgZm9udC1zaXplOiAxLjI1cmVtO1xuICAgICAgfVxuICAgICAgLmltcG9ydC11cGxvYWRfX2J0biBpbnB1dFt0eXBlPSdmaWxlJ10ge1xuICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgfVxuICAgICAgLmltcG9ydC1maWxlLWxvYWRlZCB7XG4gICAgICAgIG1hcmdpbjogMTBweCAwIDAgMDtcbiAgICAgICAgZm9udC1zaXplOiAwLjgxMjVyZW07XG4gICAgICAgIGNvbG9yOiB2YXIoLS1pb24tY29sb3ItbWVkaXVtLXNoYWRlLCAjNmI2ZTc2KTtcbiAgICAgIH1cbiAgICAgIC5pbXBvcnQtY3N2IHtcbiAgICAgICAgLS1iYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogMTBweDtcbiAgICAgICAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTtcbiAgICAgICAgZm9udC1zaXplOiAwLjgxMjVyZW07XG4gICAgICB9XG4gICAgICAuaW1wb3J0LWVycm9yIHtcbiAgICAgICAgbWFyZ2luOiAwIDAgMTJweCAwO1xuICAgICAgICBmb250LXNpemU6IDAuODc1cmVtO1xuICAgICAgICBjb2xvcjogdmFyKC0taW9uLWNvbG9yLWRhbmdlciwgI2MwMzkyYik7XG4gICAgICB9XG4gICAgICAuaW1wb3J0LWFjdGlvbnMge1xuICAgICAgICBtYXJnaW4tdG9wOiA4cHg7XG4gICAgICB9XG4gICAgICAubW9kYWwtY2xvc2UtYm90dG9tIHtcbiAgICAgICAgbWFyZ2luLXRvcDogMTJweDtcbiAgICAgIH1cbiAgICAgIC5pbXBvcnQtcmVzdWx0cyB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgIGdhcDogNnB4O1xuICAgICAgICBtYXJnaW46IDEycHggMDtcbiAgICAgIH1cbiAgICAgIC5pbXBvcnQtcm93IHtcbiAgICAgICAgZGlzcGxheTogZ3JpZDtcbiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnIgYXV0bztcbiAgICAgICAgZ3JpZC1yb3ctZ2FwOiAycHg7XG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgIHBhZGRpbmc6IDEwcHggMTJweDtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4O1xuICAgICAgICBib3JkZXItbGVmdDogM3B4IHNvbGlkIHZhcigtLWlvbi1jb2xvci1tZWRpdW0pO1xuICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1pb24tY29sb3ItbGlnaHQpO1xuICAgICAgICBmb250LXNpemU6IDAuODc1cmVtO1xuICAgICAgfVxuICAgICAgLmltcG9ydC1yb3ctLWNyZWF0ZWQge1xuICAgICAgICBib3JkZXItbGVmdC1jb2xvcjogdmFyKC0taW9uLWNvbG9yLXN1Y2Nlc3MsICMyZGQzNmYpO1xuICAgICAgfVxuICAgICAgLmltcG9ydC1yb3ctLWFzc2lnbmVkIHtcbiAgICAgICAgYm9yZGVyLWxlZnQtY29sb3I6IHZhcigtLWlvbi1jb2xvci1wcmltYXJ5LCAjNzAyNmRmKTtcbiAgICAgIH1cbiAgICAgIC5pbXBvcnQtcm93LS1za2lwcGVkIHtcbiAgICAgICAgYm9yZGVyLWxlZnQtY29sb3I6IHZhcigtLWlvbi1jb2xvci1tZWRpdW0sICM5Mjk0OWMpO1xuICAgICAgfVxuICAgICAgLmltcG9ydC1yb3ctLWVycm9yIHtcbiAgICAgICAgYm9yZGVyLWxlZnQtY29sb3I6IHZhcigtLWlvbi1jb2xvci1kYW5nZXIsICNjMDM5MmIpO1xuICAgICAgfVxuICAgICAgLmltcG9ydC1yb3dfX2VtYWlsIHtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgICAgY29sb3I6IHZhcigtLWlvbi1jb2xvci1kYXJrKTtcbiAgICAgIH1cbiAgICAgIC5pbXBvcnQtcm93X19zdGF0dXMge1xuICAgICAgICB0ZXh0LWFsaWduOiByaWdodDtcbiAgICAgICAgY29sb3I6IHZhcigtLWlvbi1jb2xvci1tZWRpdW0tc2hhZGUsICM2YjZlNzYpO1xuICAgICAgfVxuICAgICAgLmltcG9ydC1yb3dfX3JlYXNvbiB7XG4gICAgICAgIGdyaWQtY29sdW1uOiAxIC8gLTE7XG4gICAgICAgIGZvbnQtc2l6ZTogMC43NXJlbTtcbiAgICAgICAgY29sb3I6IHZhcigtLWlvbi1jb2xvci1kYW5nZXIsICNjMDM5MmIpO1xuICAgICAgfVxuICAgIGAsXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIE1lbWJlckltcG9ydE1vZGFsQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgcHJpdmF0ZSBpMThuID0gaW5qZWN0KEkxOG5TZXJ2aWNlKTtcbiAgcHJpdmF0ZSBvcmdTZXJ2aWNlID0gaW5qZWN0KE9yZ1NlcnZpY2UpO1xuXG4gIC8qKiBPcmcgZGVzdGlubyBkZWwgaW1wb3J0LiAqL1xuICBASW5wdXQoKSBvcmdJZCA9ICcnO1xuXG4gIC8qKiBOb21icmVzIGRlIHJvbGVzIGRpc3BvbmlibGVzIChwYXJhIGVsIGhpbnQpLiBPcGNpb25hbC4gKi9cbiAgQElucHV0KCkgYXZhaWxhYmxlUm9sZXM6IE9yZ1JvbGVbXSA9IFtdO1xuXG4gIC8qKiBDYWxsYmFjayB0cmFzIHVuYSBpbXBvcnRhY2nDs24gZXhpdG9zYSAo4omlMSBmaWxhIHByb2Nlc2FkYSkg4oCUIHJlZnJlc2NhIGxhIGxpc3RhLiAqL1xuICBASW5wdXQoKSBvblN1Y2Nlc3M/OiAoKSA9PiB2b2lkO1xuXG4gIC8qKiBJbnllY3RhZG8gcG9yIGBNb2RhbFNlcnZpY2Uub3BlbmAuICovXG4gIEBJbnB1dCgpIF9tb2RhbFJlZj86IHsgZGlzbWlzczogKGRhdGE/OiB1bmtub3duLCByb2xlPzogc3RyaW5nKSA9PiB2b2lkIH07XG5cbiAgLyoqIE5hbWVzcGFjZSBpMThuLiAqL1xuICBASW5wdXQoKSBpMThuTmFtZXNwYWNlID0gREVGQVVMVF9OQU1FU1BBQ0U7XG5cbiAgY3N2ID0gJyc7XG5cbiAgcmVhZG9ubHkgaW1wb3J0TW9kZSA9IHNpZ25hbDwnZmlsZScgfCAncGFzdGUnPignZmlsZScpO1xuXG4gIHJlYWRvbmx5IG9uQ29uZmxpY3RDb250cm9sID0gbmV3IEZvcm1Db250cm9sPHN0cmluZz4oJ2Fzc2lnblJvbGUnKTtcbiAgcmVhZG9ubHkgc2VuZEFjdGl2YXRpb25Db250cm9sID0gbmV3IEZvcm1Db250cm9sPGJvb2xlYW4+KHRydWUpO1xuXG4gIHJlYWRvbmx5IGNvbmZsaWN0U2VsZWN0UHJvcHMgPSBjb21wdXRlZDxQYXJ0aWFsPElucHV0TWV0YWRhdGE+PigoKSA9PiAoe1xuICAgIGNvbnRyb2w6IHRoaXMub25Db25mbGljdENvbnRyb2wgYXMgRm9ybUNvbnRyb2wsXG4gICAgbGFiZWw6ICcnLFxuICAgIHBsYWNlaG9sZGVyOiB0aGlzLnQoJ29uQ29uZmxpY3RMYWJlbCcpLFxuICAgIHR5cGU6IElucHV0VHlwZS5TRUxFQ1QsXG4gICAgc3RhdGU6IENvbXBvbmVudFN0YXRlcy5FTkFCTEVELFxuICAgIG9wdGlvbnM6IFtcbiAgICAgIHsgaWQ6ICdhc3NpZ25Sb2xlJywgbmFtZTogdGhpcy50KCdjb25mbGljdEFzc2lnbicpLCBvcmRlcjogMCB9LFxuICAgICAgeyBpZDogJ3NraXAnLCBuYW1lOiB0aGlzLnQoJ2NvbmZsaWN0U2tpcCcpLCBvcmRlcjogMSB9LFxuICAgICAgeyBpZDogJ2Vycm9yJywgbmFtZTogdGhpcy50KCdjb25mbGljdEVycm9yJyksIG9yZGVyOiAyIH0sXG4gICAgXSxcbiAgfSkpO1xuXG4gIHJlYWRvbmx5IHNlbmRBY3RpdmF0aW9uUHJvcHMgPSBjb21wdXRlZChcbiAgICAoKSA9PlxuICAgICAgKHtcbiAgICAgICAgY29udHJvbDogdGhpcy5zZW5kQWN0aXZhdGlvbkNvbnRyb2wgYXMgRm9ybUNvbnRyb2wsXG4gICAgICAgIGxhYmVsOiB0aGlzLnQoJ3NlbmRBY3RpdmF0aW9uJyksXG4gICAgICAgIHR5cGU6IElucHV0VHlwZS5DSEVDSyxcbiAgICAgICAgc3RhdGU6IENvbXBvbmVudFN0YXRlcy5FTkFCTEVELFxuICAgICAgICBsYWJlbFBsYWNlbWVudDogJ2VuZCcsXG4gICAgICB9KSBhcyBJbnB1dE1ldGFkYXRhXG4gICk7XG5cbiAgcmVhZG9ubHkgc3VibWl0dGluZyA9IHNpZ25hbChmYWxzZSk7XG4gIHJlYWRvbmx5IGVycm9yTXNnID0gc2lnbmFsKCcnKTtcbiAgcmVhZG9ubHkgcmVzdWx0cyA9IHNpZ25hbDxJbXBvcnRNZW1iZXJzUmVzcG9uc2UgfCBudWxsPihudWxsKTtcbiAgLyoqIE5vbWJyZSBkZWwgYXJjaGl2byBDU1YgY2FyZ2FkbyAodmFjw61vIHNpIHNlIHBlZ8OzIG1hbnVhbG1lbnRlKS4gKi9cbiAgcmVhZG9ubHkgZmlsZU5hbWUgPSBzaWduYWwoJycpO1xuXG4gIHJlYWRvbmx5IHJvbGVzSGludCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBpZiAoIXRoaXMuYXZhaWxhYmxlUm9sZXMubGVuZ3RoKSByZXR1cm4gJyc7XG4gICAgY29uc3QgbGFuZyA9IHRoaXMuaTE4bi5sYW5nKCk7XG4gICAgY29uc3QgbmFtZXMgPSB0aGlzLmF2YWlsYWJsZVJvbGVzLm1hcChyID0+IHJlc29sdmVSb2xlTGFiZWwociwgbGFuZykpLmpvaW4oJywgJyk7XG4gICAgcmV0dXJuIGAke3RoaXMudCgncm9sZXNBdmFpbGFibGUnKX0gJHtuYW1lc31gO1xuICB9KTtcblxuICByZWFkb25seSBzdW1tYXJ5TGFiZWwgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgcyA9IHRoaXMucmVzdWx0cygpPy5zdW1tYXJ5O1xuICAgIGlmICghcykgcmV0dXJuIHRoaXMudCgnc3VtbWFyeScpO1xuICAgIHJldHVybiBgJHt0aGlzLnQoJ3N1bW1hcnknKX06ICR7cy5jcmVhdGVkfSAke3RoaXMudCgnY3JlYXRlZCcpfSDCtyAke3MuYXNzaWduZWR9ICR7dGhpcy50KFxuICAgICAgJ2Fzc2lnbmVkJ1xuICAgICl9IMK3ICR7cy5za2lwcGVkfSAke3RoaXMudCgnc2tpcHBlZCcpfSDCtyAke3MuZmFpbGVkfSAke3RoaXMudCgnZmFpbGVkJyl9YDtcbiAgfSk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgaWYgKCF0aGlzLmkxOG4uaGFzTmFtZXNwYWNlKERFRkFVTFRfTkFNRVNQQUNFKSkge1xuICAgICAgdGhpcy5pMThuLnJlZ2lzdGVyQ29udGVudChERUZBVUxUX05BTUVTUEFDRSwgTUVNQkVSX0lNUE9SVF9NT0RBTF9JMThOKTtcbiAgICB9XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuaTE4bi5oYXNOYW1lc3BhY2UodGhpcy5pMThuTmFtZXNwYWNlKSkge1xuICAgICAgdGhpcy5pMThuLnJlZ2lzdGVyQ29udGVudCh0aGlzLmkxOG5OYW1lc3BhY2UsIE1FTUJFUl9JTVBPUlRfTU9EQUxfSTE4Tik7XG4gICAgfVxuICB9XG5cbiAgLyoqIENhcmdhIHVuIGFyY2hpdm8gQ1NWIHNlbGVjY2lvbmFkbzogbGVlIHN1IHRleHRvIGFsIHRleHRhcmVhIChgY3N2YCkuICovXG4gIG9uRmlsZVNlbGVjdGVkKGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IGlucHV0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG4gICAgY29uc3QgZmlsZSA9IGlucHV0LmZpbGVzPy5bMF07XG4gICAgaWYgKCFmaWxlKSByZXR1cm47XG4gICAgdGhpcy5lcnJvck1zZy5zZXQoJycpO1xuICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XG4gICAgcmVhZGVyLm9ubG9hZCA9ICgpID0+IHtcbiAgICAgIHRoaXMuY3N2ID0gU3RyaW5nKHJlYWRlci5yZXN1bHQgPz8gJycpO1xuICAgICAgdGhpcy5maWxlTmFtZS5zZXQoZmlsZS5uYW1lKTtcbiAgICB9O1xuICAgIHJlYWRlci5vbmVycm9yID0gKCkgPT4gdGhpcy5lcnJvck1zZy5zZXQodGhpcy50KCdmaWxlUmVhZEVycm9yJykpO1xuICAgIHJlYWRlci5yZWFkQXNUZXh0KGZpbGUpO1xuICAgIC8vIFBlcm1pdGUgcmUtc2VsZWNjaW9uYXIgZWwgbWlzbW8gYXJjaGl2byAoZWwgY2hhbmdlIG5vIGRpc3BhcmEgc2kgbm8gc2UgbGltcGlhKS5cbiAgICBpbnB1dC52YWx1ZSA9ICcnO1xuICB9XG5cbiAgLyoqIFBhcnNlYSBlbCBDU1YgcGVnYWRvIGEgZmlsYXMge2VtYWlsLG5hbWUscm9sZU5hbWV9LiBUb2xlcmEgaGVhZGVyLiAqL1xuICBwcml2YXRlIHBhcnNlQ3N2KCk6IEltcG9ydFVzZXJSb3dbXSB7XG4gICAgY29uc3Qgcm93czogSW1wb3J0VXNlclJvd1tdID0gW107XG4gICAgZm9yIChjb25zdCByYXcgb2YgdGhpcy5jc3Yuc3BsaXQoL1xccj9cXG4vKSkge1xuICAgICAgY29uc3QgbGluZSA9IHJhdy50cmltKCk7XG4gICAgICBpZiAoIWxpbmUpIGNvbnRpbnVlO1xuICAgICAgY29uc3QgY29scyA9IGxpbmUuc3BsaXQoJywnKS5tYXAoYyA9PiBjLnRyaW0oKSk7XG4gICAgICBjb25zdCBlbWFpbCA9IChjb2xzWzBdID8/ICcnKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgLy8gU2FsdGFyIGhlYWRlciAocHJpbWVyYSBjb2wgXCJlbWFpbFwiKSBvIGzDrW5lYXMgc2luIEAuXG4gICAgICBpZiAoIWVtYWlsIHx8ICFlbWFpbC5pbmNsdWRlcygnQCcpKSBjb250aW51ZTtcbiAgICAgIHJvd3MucHVzaCh7IGVtYWlsLCBuYW1lOiBjb2xzWzFdID8/ICcnLCByb2xlTmFtZTogY29sc1syXSA/PyAnJyB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHJvd3M7XG4gIH1cblxuICBzdWJtaXQoKTogdm9pZCB7XG4gICAgdGhpcy5lcnJvck1zZy5zZXQoJycpO1xuICAgIGNvbnN0IHVzZXJzID0gdGhpcy5wYXJzZUNzdigpO1xuICAgIGlmICh1c2Vycy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMuZXJyb3JNc2cuc2V0KHRoaXMudCgnbm9Sb3dzJykpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodXNlcnMuc29tZSh1ID0+ICF1LnJvbGVOYW1lKSkge1xuICAgICAgdGhpcy5lcnJvck1zZy5zZXQodGhpcy50KCdwYXJzZUVycm9yJykpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuc3VibWl0dGluZy5zZXQodHJ1ZSk7XG4gICAgdGhpcy5vcmdTZXJ2aWNlXG4gICAgICAuaW1wb3J0TWVtYmVycyh0aGlzLm9yZ0lkLCB7XG4gICAgICAgIHVzZXJzLFxuICAgICAgICBvbkNvbmZsaWN0OiAodGhpcy5vbkNvbmZsaWN0Q29udHJvbC52YWx1ZSA/PyAnYXNzaWduUm9sZScpIGFzIEltcG9ydE9uQ29uZmxpY3QsXG4gICAgICAgIHNlbmRBY3RpdmF0aW9uOiB0aGlzLnNlbmRBY3RpdmF0aW9uQ29udHJvbC52YWx1ZSA/PyB0cnVlLFxuICAgICAgfSlcbiAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiByZXMgPT4ge1xuICAgICAgICAgIHRoaXMuc3VibWl0dGluZy5zZXQoZmFsc2UpO1xuICAgICAgICAgIHRoaXMucmVzdWx0cy5zZXQocmVzKTtcbiAgICAgICAgICAvLyBSZWZyZXNjYXIgbGlzdGEgZGVsIGNvbnN1bWVyIHNpIGh1Ym8gYWx0YXMvYXNpZ25hY2lvbmVzIGVmZWN0aXZhcy5cbiAgICAgICAgICBpZiAocmVzLnN1bW1hcnkuY3JlYXRlZCArIHJlcy5zdW1tYXJ5LmFzc2lnbmVkID4gMCkge1xuICAgICAgICAgICAgdGhpcy5vblN1Y2Nlc3M/LigpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6IGVyciA9PiB7XG4gICAgICAgICAgdGhpcy5zdWJtaXR0aW5nLnNldChmYWxzZSk7XG4gICAgICAgICAgdGhpcy5lcnJvck1zZy5zZXQoZXJyPy5lcnJvcj8ubWVzc2FnZSA/PyB0aGlzLnQoJ2dlbmVyaWNFcnJvcicpKTtcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICB9XG5cbiAgc3RhdHVzTGFiZWwocjogSW1wb3J0Um93UmVzdWx0KTogc3RyaW5nIHtcbiAgICBjb25zdCBiYXNlID0gdGhpcy50KHIuc3RhdHVzID09PSAnZXJyb3InID8gJ2ZhaWxlZCcgOiByLnN0YXR1cyk7XG4gICAgaWYgKHIuc3RhdHVzID09PSAnY3JlYXRlZCcgJiYgci5hY3RpdmF0aW9uKSB7XG4gICAgICByZXR1cm4gYCR7YmFzZX0gwrcgJHt0aGlzLnQoci5hY3RpdmF0aW9uID09PSAnc2VudCcgPyAnYWN0aXZhdGlvblNlbnQnIDogJ2FjdGl2YXRpb25QZW5kaW5nJyl9YDtcbiAgICB9XG4gICAgcmV0dXJuIGJhc2U7XG4gIH1cblxuICByZXNldCgpOiB2b2lkIHtcbiAgICB0aGlzLmNzdiA9ICcnO1xuICAgIHRoaXMuZmlsZU5hbWUuc2V0KCcnKTtcbiAgICB0aGlzLmVycm9yTXNnLnNldCgnJyk7XG4gICAgdGhpcy5yZXN1bHRzLnNldChudWxsKTtcbiAgICB0aGlzLmltcG9ydE1vZGUuc2V0KCdmaWxlJyk7XG4gIH1cblxuICBkaXNtaXNzKCk6IHZvaWQge1xuICAgIHRoaXMuX21vZGFsUmVmPy5kaXNtaXNzKG51bGwsICdjYW5jZWwnKTtcbiAgfVxuXG4gIHQoa2V5OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmkxOG4udChrZXksIHRoaXMuaTE4bk5hbWVzcGFjZSk7XG4gIH1cbn1cbiJdfQ==
480
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVtYmVyLWltcG9ydC1tb2RhbC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvb3JnYW5pc21zL21lbWJlci1pbXBvcnQtbW9kYWwvbWVtYmVyLWltcG9ydC1tb2RhbC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkYsT0FBTyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMvRSxPQUFPLEVBQ0wsU0FBUyxFQUNULFVBQVUsRUFDVixVQUFVLEVBQ1YsU0FBUyxFQUNULE9BQU8sRUFDUCxVQUFVLEVBQ1YsV0FBVyxFQUNYLFVBQVUsR0FDWCxNQUFNLDJCQUEyQixDQUFDO0FBQ25DLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDcEMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFekUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDekUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ2hFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNuRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxtREFBbUQsQ0FBQztBQUN4RixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxxREFBcUQsQ0FBQztBQUM5RixPQUFPLEVBQUUsZUFBZSxFQUFpQixTQUFTLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFeEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3JELE9BQU8sRUFBRSxV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QixtQkFBbUI7OzRGQXdTViwwQkFBMEI7a0JBMVR0QyxTQUFTOytCQUNFLHlCQUF5QixjQUN2QixJQUFJLFdBQ1A7d0JBQ1AsV0FBVzt3QkFDWCxtQkFBbUI7d0JBQ25CLFNBQVM7d0JBQ1QsVUFBVTt3QkFDVixVQUFVO3dCQUNWLFNBQVM7d0JBQ1QsVUFBVTt3QkFDVixXQUFXO3dCQUNYLFVBQVU7d0JBQ1YsT0FBTzt3QkFDUCxnQkFBZ0I7d0JBQ2hCLGFBQWE7d0JBQ2IsY0FBYzt3QkFDZCx1QkFBdUI7d0JBQ3ZCLG1CQUFtQjtxQkFDcEIsWUFDUzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBMElUO3dEQWlLUSxLQUFLO3NCQUFiLEtBQUs7Z0JBR0csY0FBYztzQkFBdEIsS0FBSztnQkFHRyxTQUFTO3NCQUFqQixLQUFLO2dCQUdHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBR0csYUFBYTtzQkFBckIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgY29tcHV0ZWQsIGluamVjdCwgSW5wdXQsIE9uSW5pdCwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQ29udHJvbCwgRm9ybXNNb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge1xuICBJb25CdXR0b24sXG4gIElvbkJ1dHRvbnMsXG4gIElvbkNvbnRlbnQsXG4gIElvbkhlYWRlcixcbiAgSW9uSWNvbixcbiAgSW9uU3Bpbm5lcixcbiAgSW9uVGV4dGFyZWEsXG4gIElvblRvb2xiYXIsXG59IGZyb20gJ0Bpb25pYy9hbmd1bGFyL3N0YW5kYWxvbmUnO1xuaW1wb3J0IHsgYWRkSWNvbnMgfSBmcm9tICdpb25pY29ucyc7XG5pbXBvcnQgeyBjbG91ZFVwbG9hZE91dGxpbmUsIGRvY3VtZW50VGV4dE91dGxpbmUgfSBmcm9tICdpb25pY29ucy9pY29ucyc7XG5cbmltcG9ydCB7IERpc3BsYXlDb21wb25lbnQgfSBmcm9tICcuLi8uLi9hdG9tcy9kaXNwbGF5L2Rpc3BsYXkuY29tcG9uZW50JztcbmltcG9ydCB7IFRleHRDb21wb25lbnQgfSBmcm9tICcuLi8uLi9hdG9tcy90ZXh0L3RleHQuY29tcG9uZW50JztcbmltcG9ydCB7IFRpdGxlQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vYXRvbXMvdGl0bGUvdGl0bGUuY29tcG9uZW50JztcbmltcG9ydCB7IENoZWNrSW5wdXRDb21wb25lbnQgfSBmcm9tICcuLi8uLi9tb2xlY3VsZXMvY2hlY2staW5wdXQvY2hlY2staW5wdXQuY29tcG9uZW50JztcbmltcG9ydCB7IFNlYXJjaFNlbGVjdG9yQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vbW9sZWN1bGVzL3NlbGVjdC1pbnB1dC9zZWxlY3QtaW5wdXQuY29tcG9uZW50JztcbmltcG9ydCB7IENvbXBvbmVudFN0YXRlcywgSW5wdXRNZXRhZGF0YSwgSW5wdXRUeXBlIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuXG5pbXBvcnQgeyBJMThuU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2kxOG4nO1xuaW1wb3J0IHsgT3JnU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL29yZy9vcmcuc2VydmljZSc7XG5pbXBvcnQge1xuICBJbXBvcnRNZW1iZXJzUmVzcG9uc2UsXG4gIEltcG9ydE9uQ29uZmxpY3QsXG4gIEltcG9ydFJvd1Jlc3VsdCxcbiAgSW1wb3J0VXNlclJvdyxcbiAgT3JnUm9sZSxcbiAgcmVzb2x2ZVJvbGVMYWJlbCxcbn0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvb3JnL3R5cGVzJztcblxuaW1wb3J0IHsgTUVNQkVSX0lNUE9SVF9NT0RBTF9JMThOIH0gZnJvbSAnLi9tZW1iZXItaW1wb3J0LW1vZGFsLmkxOG4nO1xuXG5jb25zdCBERUZBVUxUX05BTUVTUEFDRSA9ICdTZXR0aW5ncy5JbXBvcnRNb2RhbCc7XG5cbmFkZEljb25zKHsgY2xvdWRVcGxvYWRPdXRsaW5lLCBkb2N1bWVudFRleHRPdXRsaW5lIH0pO1xuXG4vKipcbiAqIGB2YWwtbWVtYmVyLWltcG9ydC1tb2RhbGAg4oCUIHBhbmVsIGRlIGNhcmdhIG1hc2l2YSBkZSBtaWVtYnJvcyAoQURSLTAyMyBmYXNlIDYpLlxuICpcbiAqIEVsIGFkbWluIHBlZ2EgdW4gQ1NWIChgZW1haWwsbm9tYnJlLHJvbGApOyBlbCBtb2RhbCBsbyBwYXJzZWEgYSBmaWxhcyB5IGxsYW1hXG4gKiBgT3JnU2VydmljZS5pbXBvcnRNZW1iZXJzYC4gTXVlc3RyYSBlbCByZXN1bHRhZG8gcG9yLWZpbGEgKHBhcnRpYWwgc3VjY2Vzcyk6XG4gKiBgY3JlYXRlZGAgLyBgYXNzaWduZWRgIC8gYHNraXBwZWRgIC8gYGVycm9yYC4gSGVhZGVyIGNhbsOzbmljbyAoUmVnbGEgIzUpLlxuICpcbiAqIEF1dG8tcmVnaXN0cmEgZGVmYXVsdHMgaTE4biAoZXMvZW4pIGVuIGBTZXR0aW5ncy5JbXBvcnRNb2RhbGAuXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ZhbC1tZW1iZXItaW1wb3J0LW1vZGFsJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIEZvcm1zTW9kdWxlLFxuICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gICAgSW9uSGVhZGVyLFxuICAgIElvblRvb2xiYXIsXG4gICAgSW9uQnV0dG9ucyxcbiAgICBJb25CdXR0b24sXG4gICAgSW9uQ29udGVudCxcbiAgICBJb25UZXh0YXJlYSxcbiAgICBJb25TcGlubmVyLFxuICAgIElvbkljb24sXG4gICAgRGlzcGxheUNvbXBvbmVudCxcbiAgICBUZXh0Q29tcG9uZW50LFxuICAgIFRpdGxlQ29tcG9uZW50LFxuICAgIFNlYXJjaFNlbGVjdG9yQ29tcG9uZW50LFxuICAgIENoZWNrSW5wdXRDb21wb25lbnQsXG4gIF0sXG4gIHRlbXBsYXRlOiBgXG4gICAgPGlvbi1oZWFkZXI+XG4gICAgICA8aW9uLXRvb2xiYXI+XG4gICAgICAgIDxpb24tYnV0dG9ucyBzbG90PVwiZW5kXCI+XG4gICAgICAgICAgPGlvbi1idXR0b24gZmlsbD1cImNsZWFyXCIgY29sb3I9XCJkYXJrXCIgc2hhcGU9XCJyb3VuZFwiIChjbGljayk9XCJkaXNtaXNzKClcIj5cbiAgICAgICAgICAgIDxzdHJvbmc+e3sgdCgnY2xvc2UnKSB9fTwvc3Ryb25nPlxuICAgICAgICAgIDwvaW9uLWJ1dHRvbj5cbiAgICAgICAgPC9pb24tYnV0dG9ucz5cbiAgICAgIDwvaW9uLXRvb2xiYXI+XG4gICAgPC9pb24taGVhZGVyPlxuXG4gICAgPGlvbi1jb250ZW50IGNsYXNzPVwiaW9uLXBhZGRpbmdcIj5cbiAgICAgIDx2YWwtZGlzcGxheSBbcHJvcHNdPVwieyBjb250ZW50OiB0KCd0aXRsZScpLCBzaXplOiAnc21hbGwnLCBjb2xvcjogJ2RhcmsnIH1cIiAvPlxuICAgICAgPHZhbC10aXRsZSBbcHJvcHNdPVwieyBjb250ZW50OiB0KCdzdWJ0aXRsZScpLCBzaXplOiAnbGFyZ2UnLCBjb2xvcjogJycsIGJvbGQ6IGZhbHNlIH1cIiAvPlxuXG4gICAgICBAaWYgKCFyZXN1bHRzKCkpIHtcbiAgICAgICAgQGlmIChyb2xlc0hpbnQoKSkge1xuICAgICAgICAgIDx2YWwtdGV4dFxuICAgICAgICAgICAgY2xhc3M9XCJpbXBvcnQtcm9sZXMtaGludFwiXG4gICAgICAgICAgICBbcHJvcHNdPVwieyBjb250ZW50OiByb2xlc0hpbnQoKSwgc2l6ZTogJ3NtYWxsJywgY29sb3I6ICdtZWRpdW0nLCBib2xkOiBmYWxzZSB9XCJcbiAgICAgICAgICAvPlxuICAgICAgICB9XG5cbiAgICAgICAgPCEtLSBTZWxlY3RvciBkZSBtw6l0b2RvIGRlIGltcG9ydGFjacOzbiAtLT5cbiAgICAgICAgPGRpdiBjbGFzcz1cImltcG9ydC1zZWN0aW9uXCI+XG4gICAgICAgICAgPHZhbC10aXRsZSBbcHJvcHNdPVwieyBjb250ZW50OiB0KCdpbXBvcnRNZXRob2RMYWJlbCcpLCBzaXplOiAnc21hbGwnLCBjb2xvcjogJ2RhcmsnLCBib2xkOiB0cnVlIH1cIiAvPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbXBvcnQtbWV0aG9kLWNhcmRzXCI+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICBjbGFzcz1cImltcG9ydC1tZXRob2QtY2FyZFwiXG4gICAgICAgICAgICAgIFtjbGFzcy5pbXBvcnQtbWV0aG9kLWNhcmQtLWFjdGl2ZV09XCJpbXBvcnRNb2RlKCkgPT09ICdmaWxlJ1wiXG4gICAgICAgICAgICAgIChjbGljayk9XCJpbXBvcnRNb2RlLnNldCgnZmlsZScpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGlvbi1pY29uIG5hbWU9XCJjbG91ZC11cGxvYWQtb3V0bGluZVwiIGNsYXNzPVwiaW1wb3J0LW1ldGhvZC1jYXJkX19pY29uXCIgLz5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpbXBvcnQtbWV0aG9kLWNhcmRfX3RpdGxlXCI+e3sgdCgnaW1wb3J0TWV0aG9kRmlsZScpIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImltcG9ydC1tZXRob2QtY2FyZF9faGludFwiPnt7IHQoJ2ltcG9ydE1ldGhvZEZpbGVIaW50JykgfX08L3NwYW4+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiaW1wb3J0LW1ldGhvZC1jYXJkXCJcbiAgICAgICAgICAgICAgW2NsYXNzLmltcG9ydC1tZXRob2QtY2FyZC0tYWN0aXZlXT1cImltcG9ydE1vZGUoKSA9PT0gJ3Bhc3RlJ1wiXG4gICAgICAgICAgICAgIChjbGljayk9XCJpbXBvcnRNb2RlLnNldCgncGFzdGUnKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxpb24taWNvbiBuYW1lPVwiZG9jdW1lbnQtdGV4dC1vdXRsaW5lXCIgY2xhc3M9XCJpbXBvcnQtbWV0aG9kLWNhcmRfX2ljb25cIiAvPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImltcG9ydC1tZXRob2QtY2FyZF9fdGl0bGVcIj57eyB0KCdpbXBvcnRNZXRob2RQYXN0ZScpIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImltcG9ydC1tZXRob2QtY2FyZF9faGludFwiPnt7IHQoJ2ltcG9ydE1ldGhvZFBhc3RlSGludCcpIH19PC9zcGFuPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDwhLS0gU3ViaWRhIGRlIGFyY2hpdm8gKGxhYmVsIHRyaWNrIOKAlCBnZXN0byBjb25maWFibGUgZW4gaU9TL1BXQSkgLS0+XG4gICAgICAgIEBpZiAoaW1wb3J0TW9kZSgpID09PSAnZmlsZScpIHtcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW1wb3J0LXNlY3Rpb25cIj5cbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImltcG9ydC11cGxvYWRfX2J0blwiPlxuICAgICAgICAgICAgICA8aW9uLWljb24gbmFtZT1cImNsb3VkLXVwbG9hZC1vdXRsaW5lXCIgLz5cbiAgICAgICAgICAgICAgPHNwYW4+e3sgdCgndXBsb2FkRmlsZScpIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImZpbGVcIiBhY2NlcHQ9XCIuY3N2LHRleHQvY3N2LHRleHQvcGxhaW5cIiAoY2hhbmdlKT1cIm9uRmlsZVNlbGVjdGVkKCRldmVudClcIiAvPlxuICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgIEBpZiAoZmlsZU5hbWUoKSkge1xuICAgICAgICAgICAgICA8cCBjbGFzcz1cImltcG9ydC1maWxlLWxvYWRlZFwiPlxuICAgICAgICAgICAgICAgIHt7IHQoJ2ZpbGVMb2FkZWQnKS5yZXBsYWNlKCd7bmFtZX0nLCBmaWxlTmFtZSgpKSB9fVxuICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cblxuICAgICAgICA8IS0tIFBlZ2FyIENTViAtLT5cbiAgICAgICAgQGlmIChpbXBvcnRNb2RlKCkgPT09ICdwYXN0ZScpIHtcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW1wb3J0LXNlY3Rpb25cIj5cbiAgICAgICAgICAgIDxpb24tdGV4dGFyZWFcbiAgICAgICAgICAgICAgY2xhc3M9XCJpbXBvcnQtY3N2XCJcbiAgICAgICAgICAgICAgW2F1dG9Hcm93XT1cInRydWVcIlxuICAgICAgICAgICAgICBbcm93c109XCI2XCJcbiAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cInQoJ2NzdlBsYWNlaG9sZGVyJylcIlxuICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImNzdlwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG5cbiAgICAgICAgPCEtLSBTaSBodWJvIGNhcmdhIGRlIGFyY2hpdm8sIG1vc3RyYXIgdGV4dGFyZWEgZGUgc29sbyBsZWN0dXJhIHBhcmEgcmV2aXNhciAtLT5cbiAgICAgICAgQGlmIChpbXBvcnRNb2RlKCkgPT09ICdmaWxlJyAmJiBjc3YpIHtcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW1wb3J0LXNlY3Rpb25cIj5cbiAgICAgICAgICAgIDxpb24tdGV4dGFyZWEgY2xhc3M9XCJpbXBvcnQtY3N2XCIgW2F1dG9Hcm93XT1cInRydWVcIiBbcm93c109XCI0XCIgW3JlYWRvbmx5XT1cInRydWVcIiBbdmFsdWVdPVwiY3N2XCIgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuXG4gICAgICAgIDwhLS0gQ29uZmxpY3RvOiBzZWxlY3QgLS0+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJpbXBvcnQtc2VjdGlvblwiPlxuICAgICAgICAgIDx2YWwtdGl0bGUgW3Byb3BzXT1cInsgY29udGVudDogdCgnb25Db25mbGljdExhYmVsJyksIHNpemU6ICdzbWFsbCcsIGNvbG9yOiAnZGFyaycsIGJvbGQ6IHRydWUgfVwiIC8+XG4gICAgICAgICAgPHZhbC1zZWxlY3QtaW5wdXQgW3Byb3BzXT1cImNvbmZsaWN0U2VsZWN0UHJvcHMoKVwiIC8+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDwhLS0gQWN0aXZhY2nDs246IHZhbC1jaGVjay1pbnB1dCAtLT5cbiAgICAgICAgPGRpdiBjbGFzcz1cImltcG9ydC1zZWN0aW9uXCI+XG4gICAgICAgICAgPHZhbC1jaGVjay1pbnB1dCBbcHJvcHNdPVwic2VuZEFjdGl2YXRpb25Qcm9wcygpXCIgLz5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgQGlmIChlcnJvck1zZygpKSB7XG4gICAgICAgICAgPHAgY2xhc3M9XCJpbXBvcnQtZXJyb3JcIj57eyBlcnJvck1zZygpIH19PC9wPlxuICAgICAgICB9XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cImltcG9ydC1hY3Rpb25zXCI+XG4gICAgICAgICAgPGlvbi1idXR0b24gZXhwYW5kPVwiYmxvY2tcIiBjb2xvcj1cImRhcmtcIiBzaGFwZT1cInJvdW5kXCIgW2Rpc2FibGVkXT1cInN1Ym1pdHRpbmcoKVwiIChjbGljayk9XCJzdWJtaXQoKVwiPlxuICAgICAgICAgICAgQGlmIChzdWJtaXR0aW5nKCkpIHtcbiAgICAgICAgICAgICAgPGlvbi1zcGlubmVyIG5hbWU9XCJkb3RzXCIgLz5cbiAgICAgICAgICAgICAgJm5ic3A7e3sgdCgnc3VibWl0dGluZycpIH19XG4gICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAge3sgdCgnc3VibWl0JykgfX1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L2lvbi1idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgfSBAZWxzZSB7XG4gICAgICAgIDwhLS0gUmVzdWx0YWRvcyAtLT5cbiAgICAgICAgPHZhbC10aXRsZSBbcHJvcHNdPVwieyBjb250ZW50OiBzdW1tYXJ5TGFiZWwoKSwgc2l6ZTogJ2xhcmdlJywgY29sb3I6ICcnLCBib2xkOiB0cnVlIH1cIiAvPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiaW1wb3J0LXJlc3VsdHNcIj5cbiAgICAgICAgICBAZm9yIChyIG9mIHJlc3VsdHMoKSEucmVzdWx0czsgdHJhY2sgci5lbWFpbCkge1xuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImltcG9ydC1yb3cgaW1wb3J0LXJvdy0te3sgci5zdGF0dXMgfX1cIj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpbXBvcnQtcm93X19lbWFpbFwiPnt7IHIuZW1haWwgfX08L3NwYW4+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaW1wb3J0LXJvd19fc3RhdHVzXCI+e3sgc3RhdHVzTGFiZWwocikgfX08L3NwYW4+XG4gICAgICAgICAgICAgIEBpZiAoci5yZWFzb24pIHtcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImltcG9ydC1yb3dfX3JlYXNvblwiPnt7IHIucmVhc29uIH19PC9zcGFuPlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiaW1wb3J0LWFjdGlvbnNcIj5cbiAgICAgICAgICA8aW9uLWJ1dHRvbiBleHBhbmQ9XCJibG9ja1wiIGZpbGw9XCJvdXRsaW5lXCIgY29sb3I9XCJkYXJrXCIgc2hhcGU9XCJyb3VuZFwiIChjbGljayk9XCJyZXNldCgpXCI+XG4gICAgICAgICAgICB7eyB0KCdhZ2FpbicpIH19XG4gICAgICAgICAgPC9pb24tYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIH1cblxuICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWNsb3NlLWJvdHRvbVwiPlxuICAgICAgICA8aW9uLWJ1dHRvbiBleHBhbmQ9XCJibG9ja1wiIGZpbGw9XCJvdXRsaW5lXCIgY29sb3I9XCJkYXJrXCIgc2hhcGU9XCJyb3VuZFwiIChjbGljayk9XCJkaXNtaXNzKClcIj5cbiAgICAgICAgICB7eyB0KCdjbG9zZScpIH19XG4gICAgICAgIDwvaW9uLWJ1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvaW9uLWNvbnRlbnQ+XG4gIGAsXG4gIHN0eWxlczogW1xuICAgIGBcbiAgICAgIHZhbC1kaXNwbGF5IHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDRweDtcbiAgICAgIH1cbiAgICAgIHZhbC10aXRsZSB7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICBtYXJnaW4tYm90dG9tOiA4cHg7XG4gICAgICB9XG4gICAgICAuaW1wb3J0LXJvbGVzLWhpbnQge1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMjRweDtcbiAgICAgIH1cbiAgICAgIC5pbXBvcnQtc2VjdGlvbiB7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDI4cHg7XG4gICAgICB9XG4gICAgICAuaW1wb3J0LXNlY3Rpb24gdmFsLXRpdGxlIHtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTBweDtcbiAgICAgIH1cbiAgICAgIC5pbXBvcnQtbWV0aG9kLWNhcmRzIHtcbiAgICAgICAgZGlzcGxheTogZ3JpZDtcbiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnIgMWZyO1xuICAgICAgICBnYXA6IDEycHg7XG4gICAgICB9XG4gICAgICAuaW1wb3J0LW1ldGhvZC1jYXJkIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7XG4gICAgICAgIGdhcDogNHB4O1xuICAgICAgICBwYWRkaW5nOiAxNHB4IDE2cHg7XG4gICAgICAgIGJvcmRlcjogMS41cHggc29saWQgdmFyKC0taW9uLWNvbG9yLWxpZ2h0LXNoYWRlLCAjZDdkOGRhKTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogMTJweDtcbiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0taW9uLWNvbG9yLWxpZ2h0KTtcbiAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICAgICAgICB0cmFuc2l0aW9uOlxuICAgICAgICAgIGJvcmRlci1jb2xvciAwLjE1cyBlYXNlLFxuICAgICAgICAgIGJhY2tncm91bmQgMC4xNXMgZWFzZTtcbiAgICAgIH1cbiAgICAgIC5pbXBvcnQtbWV0aG9kLWNhcmQ6aG92ZXIge1xuICAgICAgICBib3JkZXItY29sb3I6IHZhcigtLWlvbi1jb2xvci1tZWRpdW0sICM5Mjk0OWMpO1xuICAgICAgfVxuICAgICAgLmltcG9ydC1tZXRob2QtY2FyZC0tYWN0aXZlIHtcbiAgICAgICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1pb24tY29sb3ItcHJpbWFyeSwgIzcwMjZkZik7XG4gICAgICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1pb24tY29sb3ItcHJpbWFyeSwgIzcwMjZkZikgNiUsIHZhcigtLWlvbi1jb2xvci1saWdodCkpO1xuICAgICAgfVxuICAgICAgLmltcG9ydC1tZXRob2QtY2FyZF9faWNvbiB7XG4gICAgICAgIGZvbnQtc2l6ZTogMS4zNzVyZW07XG4gICAgICAgIGNvbG9yOiB2YXIoLS1pb24tY29sb3ItbWVkaXVtLXNoYWRlLCAjNmI2ZTc2KTtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogNHB4O1xuICAgICAgfVxuICAgICAgLmltcG9ydC1tZXRob2QtY2FyZC0tYWN0aXZlIC5pbXBvcnQtbWV0aG9kLWNhcmRfX2ljb24ge1xuICAgICAgICBjb2xvcjogdmFyKC0taW9uLWNvbG9yLXByaW1hcnksICM3MDI2ZGYpO1xuICAgICAgfVxuICAgICAgLmltcG9ydC1tZXRob2QtY2FyZF9fdGl0bGUge1xuICAgICAgICBmb250LXNpemU6IDAuODc1cmVtO1xuICAgICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgICBjb2xvcjogdmFyKC0taW9uLWNvbG9yLWRhcmspO1xuICAgICAgfVxuICAgICAgLmltcG9ydC1tZXRob2QtY2FyZF9faGludCB7XG4gICAgICAgIGZvbnQtc2l6ZTogMC43NXJlbTtcbiAgICAgICAgY29sb3I6IHZhcigtLWlvbi1jb2xvci1tZWRpdW0sICM5Mjk0OWMpO1xuICAgICAgICBsaW5lLWhlaWdodDogMS4zO1xuICAgICAgfVxuICAgICAgLmltcG9ydC11cGxvYWRfX2J0biB7XG4gICAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICBnYXA6IDhweDtcbiAgICAgICAgcGFkZGluZzogMTBweCAxNnB4O1xuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1pb24tY29sb3ItbWVkaXVtLCAjOTI5NDljKTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogMTBweDtcbiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0taW9uLWNvbG9yLWxpZ2h0KTtcbiAgICAgICAgY29sb3I6IHZhcigtLWlvbi1jb2xvci1kYXJrKTtcbiAgICAgICAgZm9udC1zaXplOiAwLjg3NXJlbTtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgICB0cmFuc2l0aW9uOiBib3JkZXItY29sb3IgMC4xNXMgZWFzZTtcbiAgICAgIH1cbiAgICAgIC5pbXBvcnQtdXBsb2FkX19idG46aG92ZXIge1xuICAgICAgICBib3JkZXItY29sb3I6IHZhcigtLWlvbi1jb2xvci1wcmltYXJ5LCAjNzAyNmRmKTtcbiAgICAgIH1cbiAgICAgIC5pbXBvcnQtdXBsb2FkX19idG4gaW9uLWljb24ge1xuICAgICAgICBmb250LXNpemU6IDEuMjVyZW07XG4gICAgICB9XG4gICAgICAuaW1wb3J0LXVwbG9hZF9fYnRuIGlucHV0W3R5cGU9J2ZpbGUnXSB7XG4gICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICB9XG4gICAgICAuaW1wb3J0LWZpbGUtbG9hZGVkIHtcbiAgICAgICAgbWFyZ2luOiAxMHB4IDAgMCAwO1xuICAgICAgICBmb250LXNpemU6IDAuODEyNXJlbTtcbiAgICAgICAgY29sb3I6IHZhcigtLWlvbi1jb2xvci1tZWRpdW0tc2hhZGUsICM2YjZlNzYpO1xuICAgICAgfVxuICAgICAgLmltcG9ydC1jc3Yge1xuICAgICAgICAtLWJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICAgICAgICBib3JkZXItcmFkaXVzOiAxMHB4O1xuICAgICAgICBmb250LWZhbWlseTogbW9ub3NwYWNlO1xuICAgICAgICBmb250LXNpemU6IDAuODEyNXJlbTtcbiAgICAgIH1cbiAgICAgIC5pbXBvcnQtZXJyb3Ige1xuICAgICAgICBtYXJnaW46IDAgMCAxMnB4IDA7XG4gICAgICAgIGZvbnQtc2l6ZTogMC44NzVyZW07XG4gICAgICAgIGNvbG9yOiB2YXIoLS1pb24tY29sb3ItZGFuZ2VyLCAjYzAzOTJiKTtcbiAgICAgIH1cbiAgICAgIC5pbXBvcnQtYWN0aW9ucyB7XG4gICAgICAgIG1hcmdpbi10b3A6IDhweDtcbiAgICAgIH1cbiAgICAgIC5tb2RhbC1jbG9zZS1ib3R0b20ge1xuICAgICAgICBtYXJnaW4tdG9wOiAxMnB4O1xuICAgICAgfVxuICAgICAgLmltcG9ydC1yZXN1bHRzIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgZ2FwOiA2cHg7XG4gICAgICAgIG1hcmdpbjogMTJweCAwO1xuICAgICAgfVxuICAgICAgLmltcG9ydC1yb3cge1xuICAgICAgICBkaXNwbGF5OiBncmlkO1xuICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmciBhdXRvO1xuICAgICAgICBncmlkLXJvdy1nYXA6IDJweDtcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAgcGFkZGluZzogMTBweCAxMnB4O1xuICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7XG4gICAgICAgIGJvcmRlci1sZWZ0OiAzcHggc29saWQgdmFyKC0taW9uLWNvbG9yLW1lZGl1bSk7XG4gICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWlvbi1jb2xvci1saWdodCk7XG4gICAgICAgIGZvbnQtc2l6ZTogMC44NzVyZW07XG4gICAgICB9XG4gICAgICAuaW1wb3J0LXJvdy0tY3JlYXRlZCB7XG4gICAgICAgIGJvcmRlci1sZWZ0LWNvbG9yOiB2YXIoLS1pb24tY29sb3Itc3VjY2VzcywgIzJkZDM2Zik7XG4gICAgICB9XG4gICAgICAuaW1wb3J0LXJvdy0tYXNzaWduZWQge1xuICAgICAgICBib3JkZXItbGVmdC1jb2xvcjogdmFyKC0taW9uLWNvbG9yLXByaW1hcnksICM3MDI2ZGYpO1xuICAgICAgfVxuICAgICAgLmltcG9ydC1yb3ctLXNraXBwZWQge1xuICAgICAgICBib3JkZXItbGVmdC1jb2xvcjogdmFyKC0taW9uLWNvbG9yLW1lZGl1bSwgIzkyOTQ5Yyk7XG4gICAgICB9XG4gICAgICAuaW1wb3J0LXJvdy0tZXJyb3Ige1xuICAgICAgICBib3JkZXItbGVmdC1jb2xvcjogdmFyKC0taW9uLWNvbG9yLWRhbmdlciwgI2MwMzkyYik7XG4gICAgICB9XG4gICAgICAuaW1wb3J0LXJvd19fZW1haWwge1xuICAgICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgICBjb2xvcjogdmFyKC0taW9uLWNvbG9yLWRhcmspO1xuICAgICAgfVxuICAgICAgLmltcG9ydC1yb3dfX3N0YXR1cyB7XG4gICAgICAgIHRleHQtYWxpZ246IHJpZ2h0O1xuICAgICAgICBjb2xvcjogdmFyKC0taW9uLWNvbG9yLW1lZGl1bS1zaGFkZSwgIzZiNmU3Nik7XG4gICAgICB9XG4gICAgICAuaW1wb3J0LXJvd19fcmVhc29uIHtcbiAgICAgICAgZ3JpZC1jb2x1bW46IDEgLyAtMTtcbiAgICAgICAgZm9udC1zaXplOiAwLjc1cmVtO1xuICAgICAgICBjb2xvcjogdmFyKC0taW9uLWNvbG9yLWRhbmdlciwgI2MwMzkyYik7XG4gICAgICB9XG4gICAgYCxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgTWVtYmVySW1wb3J0TW9kYWxDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBwcml2YXRlIGkxOG4gPSBpbmplY3QoSTE4blNlcnZpY2UpO1xuICBwcml2YXRlIG9yZ1NlcnZpY2UgPSBpbmplY3QoT3JnU2VydmljZSk7XG5cbiAgLyoqIE9yZyBkZXN0aW5vIGRlbCBpbXBvcnQuICovXG4gIEBJbnB1dCgpIG9yZ0lkID0gJyc7XG5cbiAgLyoqIE5vbWJyZXMgZGUgcm9sZXMgZGlzcG9uaWJsZXMgKHBhcmEgZWwgaGludCkuIE9wY2lvbmFsLiAqL1xuICBASW5wdXQoKSBhdmFpbGFibGVSb2xlczogT3JnUm9sZVtdID0gW107XG5cbiAgLyoqIENhbGxiYWNrIHRyYXMgdW5hIGltcG9ydGFjacOzbiBleGl0b3NhICjiiaUxIGZpbGEgcHJvY2VzYWRhKSDigJQgcmVmcmVzY2EgbGEgbGlzdGEuICovXG4gIEBJbnB1dCgpIG9uU3VjY2Vzcz86ICgpID0+IHZvaWQ7XG5cbiAgLyoqIElueWVjdGFkbyBwb3IgYE1vZGFsU2VydmljZS5vcGVuYC4gKi9cbiAgQElucHV0KCkgX21vZGFsUmVmPzogeyBkaXNtaXNzOiAoZGF0YT86IHVua25vd24sIHJvbGU/OiBzdHJpbmcpID0+IHZvaWQgfTtcblxuICAvKiogTmFtZXNwYWNlIGkxOG4uICovXG4gIEBJbnB1dCgpIGkxOG5OYW1lc3BhY2UgPSBERUZBVUxUX05BTUVTUEFDRTtcblxuICBjc3YgPSAnJztcblxuICByZWFkb25seSBpbXBvcnRNb2RlID0gc2lnbmFsPCdmaWxlJyB8ICdwYXN0ZSc+KCdmaWxlJyk7XG5cbiAgcmVhZG9ubHkgb25Db25mbGljdENvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2w8c3RyaW5nPignYXNzaWduUm9sZScpO1xuICByZWFkb25seSBzZW5kQWN0aXZhdGlvbkNvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2w8Ym9vbGVhbj4odHJ1ZSk7XG5cbiAgcmVhZG9ubHkgY29uZmxpY3RTZWxlY3RQcm9wcyA9IGNvbXB1dGVkPFBhcnRpYWw8SW5wdXRNZXRhZGF0YT4+KCgpID0+ICh7XG4gICAgY29udHJvbDogdGhpcy5vbkNvbmZsaWN0Q29udHJvbCBhcyBGb3JtQ29udHJvbCxcbiAgICBsYWJlbDogJycsXG4gICAgcGxhY2Vob2xkZXI6IHRoaXMudCgnb25Db25mbGljdExhYmVsJyksXG4gICAgdHlwZTogSW5wdXRUeXBlLlNFTEVDVCxcbiAgICBzdGF0ZTogQ29tcG9uZW50U3RhdGVzLkVOQUJMRUQsXG4gICAgb3B0aW9uczogW1xuICAgICAgeyBpZDogJ2Fzc2lnblJvbGUnLCBuYW1lOiB0aGlzLnQoJ2NvbmZsaWN0QXNzaWduJyksIG9yZGVyOiAwIH0sXG4gICAgICB7IGlkOiAnc2tpcCcsIG5hbWU6IHRoaXMudCgnY29uZmxpY3RTa2lwJyksIG9yZGVyOiAxIH0sXG4gICAgICB7IGlkOiAnZXJyb3InLCBuYW1lOiB0aGlzLnQoJ2NvbmZsaWN0RXJyb3InKSwgb3JkZXI6IDIgfSxcbiAgICBdLFxuICB9KSk7XG5cbiAgcmVhZG9ubHkgc2VuZEFjdGl2YXRpb25Qcm9wcyA9IGNvbXB1dGVkKFxuICAgICgpID0+XG4gICAgICAoe1xuICAgICAgICBjb250cm9sOiB0aGlzLnNlbmRBY3RpdmF0aW9uQ29udHJvbCBhcyBGb3JtQ29udHJvbCxcbiAgICAgICAgbGFiZWw6IHRoaXMudCgnc2VuZEFjdGl2YXRpb24nKSxcbiAgICAgICAgdHlwZTogSW5wdXRUeXBlLkNIRUNLLFxuICAgICAgICBzdGF0ZTogQ29tcG9uZW50U3RhdGVzLkVOQUJMRUQsXG4gICAgICAgIGxhYmVsUGxhY2VtZW50OiAnZW5kJyxcbiAgICAgIH0pIGFzIElucHV0TWV0YWRhdGFcbiAgKTtcblxuICByZWFkb25seSBzdWJtaXR0aW5nID0gc2lnbmFsKGZhbHNlKTtcbiAgcmVhZG9ubHkgZXJyb3JNc2cgPSBzaWduYWwoJycpO1xuICByZWFkb25seSByZXN1bHRzID0gc2lnbmFsPEltcG9ydE1lbWJlcnNSZXNwb25zZSB8IG51bGw+KG51bGwpO1xuICAvKiogTm9tYnJlIGRlbCBhcmNoaXZvIENTViBjYXJnYWRvICh2YWPDrW8gc2kgc2UgcGVnw7MgbWFudWFsbWVudGUpLiAqL1xuICByZWFkb25seSBmaWxlTmFtZSA9IHNpZ25hbCgnJyk7XG5cbiAgcmVhZG9ubHkgcm9sZXNIaW50ID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGlmICghdGhpcy5hdmFpbGFibGVSb2xlcy5sZW5ndGgpIHJldHVybiAnJztcbiAgICBjb25zdCBsYW5nID0gdGhpcy5pMThuLmxhbmcoKTtcbiAgICBjb25zdCBuYW1lcyA9IHRoaXMuYXZhaWxhYmxlUm9sZXMubWFwKHIgPT4gcmVzb2x2ZVJvbGVMYWJlbChyLCBsYW5nKSkuam9pbignLCAnKTtcbiAgICByZXR1cm4gYCR7dGhpcy50KCdyb2xlc0F2YWlsYWJsZScpfSAke25hbWVzfWA7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IHN1bW1hcnlMYWJlbCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBzID0gdGhpcy5yZXN1bHRzKCk/LnN1bW1hcnk7XG4gICAgaWYgKCFzKSByZXR1cm4gdGhpcy50KCdzdW1tYXJ5Jyk7XG4gICAgcmV0dXJuIGAke3RoaXMudCgnc3VtbWFyeScpfTogJHtzLmNyZWF0ZWR9ICR7dGhpcy50KCdjcmVhdGVkJyl9IMK3ICR7cy5hc3NpZ25lZH0gJHt0aGlzLnQoXG4gICAgICAnYXNzaWduZWQnXG4gICAgKX0gwrcgJHtzLnNraXBwZWR9ICR7dGhpcy50KCdza2lwcGVkJyl9IMK3ICR7cy5mYWlsZWR9ICR7dGhpcy50KCdmYWlsZWQnKX1gO1xuICB9KTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmkxOG4ucmVnaXN0ZXJEZWZhdWx0cyhERUZBVUxUX05BTUVTUEFDRSwgTUVNQkVSX0lNUE9SVF9NT0RBTF9JMThOKTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuaTE4bi5yZWdpc3RlckRlZmF1bHRzKHRoaXMuaTE4bk5hbWVzcGFjZSwgTUVNQkVSX0lNUE9SVF9NT0RBTF9JMThOKTtcbiAgfVxuXG4gIC8qKiBDYXJnYSB1biBhcmNoaXZvIENTViBzZWxlY2Npb25hZG86IGxlZSBzdSB0ZXh0byBhbCB0ZXh0YXJlYSAoYGNzdmApLiAqL1xuICBvbkZpbGVTZWxlY3RlZChldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCBpbnB1dCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50O1xuICAgIGNvbnN0IGZpbGUgPSBpbnB1dC5maWxlcz8uWzBdO1xuICAgIGlmICghZmlsZSkgcmV0dXJuO1xuICAgIHRoaXMuZXJyb3JNc2cuc2V0KCcnKTtcbiAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xuICAgIHJlYWRlci5vbmxvYWQgPSAoKSA9PiB7XG4gICAgICB0aGlzLmNzdiA9IFN0cmluZyhyZWFkZXIucmVzdWx0ID8/ICcnKTtcbiAgICAgIHRoaXMuZmlsZU5hbWUuc2V0KGZpbGUubmFtZSk7XG4gICAgfTtcbiAgICByZWFkZXIub25lcnJvciA9ICgpID0+IHRoaXMuZXJyb3JNc2cuc2V0KHRoaXMudCgnZmlsZVJlYWRFcnJvcicpKTtcbiAgICByZWFkZXIucmVhZEFzVGV4dChmaWxlKTtcbiAgICAvLyBQZXJtaXRlIHJlLXNlbGVjY2lvbmFyIGVsIG1pc21vIGFyY2hpdm8gKGVsIGNoYW5nZSBubyBkaXNwYXJhIHNpIG5vIHNlIGxpbXBpYSkuXG4gICAgaW5wdXQudmFsdWUgPSAnJztcbiAgfVxuXG4gIC8qKiBQYXJzZWEgZWwgQ1NWIHBlZ2FkbyBhIGZpbGFzIHtlbWFpbCxuYW1lLHJvbGVOYW1lfS4gVG9sZXJhIGhlYWRlci4gKi9cbiAgcHJpdmF0ZSBwYXJzZUNzdigpOiBJbXBvcnRVc2VyUm93W10ge1xuICAgIGNvbnN0IHJvd3M6IEltcG9ydFVzZXJSb3dbXSA9IFtdO1xuICAgIGZvciAoY29uc3QgcmF3IG9mIHRoaXMuY3N2LnNwbGl0KC9cXHI/XFxuLykpIHtcbiAgICAgIGNvbnN0IGxpbmUgPSByYXcudHJpbSgpO1xuICAgICAgaWYgKCFsaW5lKSBjb250aW51ZTtcbiAgICAgIGNvbnN0IGNvbHMgPSBsaW5lLnNwbGl0KCcsJykubWFwKGMgPT4gYy50cmltKCkpO1xuICAgICAgY29uc3QgZW1haWwgPSAoY29sc1swXSA/PyAnJykudG9Mb3dlckNhc2UoKTtcbiAgICAgIC8vIFNhbHRhciBoZWFkZXIgKHByaW1lcmEgY29sIFwiZW1haWxcIikgbyBsw61uZWFzIHNpbiBALlxuICAgICAgaWYgKCFlbWFpbCB8fCAhZW1haWwuaW5jbHVkZXMoJ0AnKSkgY29udGludWU7XG4gICAgICByb3dzLnB1c2goeyBlbWFpbCwgbmFtZTogY29sc1sxXSA/PyAnJywgcm9sZU5hbWU6IGNvbHNbMl0gPz8gJycgfSk7XG4gICAgfVxuICAgIHJldHVybiByb3dzO1xuICB9XG5cbiAgc3VibWl0KCk6IHZvaWQge1xuICAgIHRoaXMuZXJyb3JNc2cuc2V0KCcnKTtcbiAgICBjb25zdCB1c2VycyA9IHRoaXMucGFyc2VDc3YoKTtcbiAgICBpZiAodXNlcnMubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aGlzLmVycm9yTXNnLnNldCh0aGlzLnQoJ25vUm93cycpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHVzZXJzLnNvbWUodSA9PiAhdS5yb2xlTmFtZSkpIHtcbiAgICAgIHRoaXMuZXJyb3JNc2cuc2V0KHRoaXMudCgncGFyc2VFcnJvcicpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnN1Ym1pdHRpbmcuc2V0KHRydWUpO1xuICAgIHRoaXMub3JnU2VydmljZVxuICAgICAgLmltcG9ydE1lbWJlcnModGhpcy5vcmdJZCwge1xuICAgICAgICB1c2VycyxcbiAgICAgICAgb25Db25mbGljdDogKHRoaXMub25Db25mbGljdENvbnRyb2wudmFsdWUgPz8gJ2Fzc2lnblJvbGUnKSBhcyBJbXBvcnRPbkNvbmZsaWN0LFxuICAgICAgICBzZW5kQWN0aXZhdGlvbjogdGhpcy5zZW5kQWN0aXZhdGlvbkNvbnRyb2wudmFsdWUgPz8gdHJ1ZSxcbiAgICAgIH0pXG4gICAgICAuc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogcmVzID0+IHtcbiAgICAgICAgICB0aGlzLnN1Ym1pdHRpbmcuc2V0KGZhbHNlKTtcbiAgICAgICAgICB0aGlzLnJlc3VsdHMuc2V0KHJlcyk7XG4gICAgICAgICAgLy8gUmVmcmVzY2FyIGxpc3RhIGRlbCBjb25zdW1lciBzaSBodWJvIGFsdGFzL2FzaWduYWNpb25lcyBlZmVjdGl2YXMuXG4gICAgICAgICAgaWYgKHJlcy5zdW1tYXJ5LmNyZWF0ZWQgKyByZXMuc3VtbWFyeS5hc3NpZ25lZCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMub25TdWNjZXNzPy4oKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiBlcnIgPT4ge1xuICAgICAgICAgIHRoaXMuc3VibWl0dGluZy5zZXQoZmFsc2UpO1xuICAgICAgICAgIHRoaXMuZXJyb3JNc2cuc2V0KGVycj8uZXJyb3I/Lm1lc3NhZ2UgPz8gdGhpcy50KCdnZW5lcmljRXJyb3InKSk7XG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgfVxuXG4gIHN0YXR1c0xhYmVsKHI6IEltcG9ydFJvd1Jlc3VsdCk6IHN0cmluZyB7XG4gICAgY29uc3QgYmFzZSA9IHRoaXMudChyLnN0YXR1cyA9PT0gJ2Vycm9yJyA/ICdmYWlsZWQnIDogci5zdGF0dXMpO1xuICAgIGlmIChyLnN0YXR1cyA9PT0gJ2NyZWF0ZWQnICYmIHIuYWN0aXZhdGlvbikge1xuICAgICAgcmV0dXJuIGAke2Jhc2V9IMK3ICR7dGhpcy50KHIuYWN0aXZhdGlvbiA9PT0gJ3NlbnQnID8gJ2FjdGl2YXRpb25TZW50JyA6ICdhY3RpdmF0aW9uUGVuZGluZycpfWA7XG4gICAgfVxuICAgIHJldHVybiBiYXNlO1xuICB9XG5cbiAgcmVzZXQoKTogdm9pZCB7XG4gICAgdGhpcy5jc3YgPSAnJztcbiAgICB0aGlzLmZpbGVOYW1lLnNldCgnJyk7XG4gICAgdGhpcy5lcnJvck1zZy5zZXQoJycpO1xuICAgIHRoaXMucmVzdWx0cy5zZXQobnVsbCk7XG4gICAgdGhpcy5pbXBvcnRNb2RlLnNldCgnZmlsZScpO1xuICB9XG5cbiAgZGlzbWlzcygpOiB2b2lkIHtcbiAgICB0aGlzLl9tb2RhbFJlZj8uZGlzbWlzcyhudWxsLCAnY2FuY2VsJyk7XG4gIH1cblxuICB0KGtleTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5pMThuLnQoa2V5LCB0aGlzLmkxOG5OYW1lc3BhY2UpO1xuICB9XG59XG4iXX0=
@@ -194,9 +194,7 @@ export class NotificationPreferencesViewComponent {
194
194
  return `${t.slice(0, 22)}…${t.slice(-6)}`;
195
195
  });
196
196
  const ns = this.ns;
197
- if (!this.i18n.hasNamespace(ns)) {
198
- this.i18n.registerContent(ns, NOTIFICATION_PREFERENCES_VIEW_I18N);
199
- }
197
+ this.i18n.registerDefaults(ns, NOTIFICATION_PREFERENCES_VIEW_I18N);
200
198
  this.nav.setBackHeader('pageTitle', ns, { withMenu: true });
201
199
  void this.refreshBrowserState();
202
200
  // Re-aplicar header en cambio de idioma.
@@ -664,4 +662,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
664
662
  }], ctorParameters: () => [], propDecorators: { config: [{
665
663
  type: Input
666
664
  }] } });
667
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90aWZpY2F0aW9uLXByZWZlcmVuY2VzLXZpZXcuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL29yZ2FuaXNtcy9ub3RpZmljYXRpb24tcHJlZmVyZW5jZXMtdmlldy9ub3RpZmljYXRpb24tcHJlZmVyZW5jZXMtdmlldy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN0RyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ3BDLE9BQU8sRUFDTCxrQkFBa0IsRUFDbEIsa0JBQWtCLEVBQ2xCLGdCQUFnQixFQUNoQixrQkFBa0IsRUFDbEIsdUJBQXVCLEVBQ3ZCLG9CQUFvQixFQUNwQixjQUFjLEdBQ2YsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4QixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDdEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDekUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ2hFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNuRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxxREFBcUQsQ0FBQztBQUUzRixPQUFPLEVBQWtCLGVBQWUsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUU5RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFHbEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sOENBQThDLENBQUM7QUFDaEYsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3JELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlEQUFpRCxDQUFDO0FBQ3BGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHFEQUFxRCxDQUFDO0FBQ3pGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG1EQUFtRCxDQUFDO0FBQ3ZGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUcvRCxPQUFPLEVBQUUsa0NBQWtDLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQzs7QUFFMUYsUUFBUSxDQUFDO0lBQ1Asa0JBQWtCO0lBQ2xCLGtCQUFrQjtJQUNsQixnQkFBZ0I7SUFDaEIsa0JBQWtCO0lBQ2xCLHVCQUF1QjtJQUN2QixvQkFBb0I7SUFDcEIsY0FBYztDQUNmLENBQUMsQ0FBQztBQUVILE1BQU0saUJBQWlCLEdBQUcsd0JBQXdCLENBQUM7QUFlbkQ7Ozs7Ozs7Ozs7Ozs7Ozs7R0FnQkc7QUFzUUgsTUFBTSxPQUFPLG9DQUFvQztJQW1DL0Msc0VBQXNFO0lBQ3RFLElBQVksRUFBRTtRQUNaLE9BQU8sSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDLGFBQWEsQ0FBQztJQUM3QyxDQUFDO0lBMEhELDhFQUE4RTtJQUM5RSxZQUFZO0lBQ1osOEVBQThFO0lBRTlFO1FBbktRLFFBQUcsR0FBRyxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUNoQyxTQUFJLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQzNCLFVBQUssR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDN0IsU0FBSSxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUMzQixjQUFTLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDckMsZ0JBQVcsR0FBRyxNQUFNLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUN4QyxVQUFLLEdBQUcsTUFBTSxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDNUMsNEVBQTRFO1FBQzVFLHdFQUF3RTtRQUNoRSxVQUFLLEdBQUcsTUFBTSxDQUFDLGNBQWMsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBVWxELG1CQUFjLEdBQUcsUUFBUSxDQUdoQyxHQUFHLEVBQUU7WUFDTCxNQUFNLFNBQVMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLElBQUksQ0FBQywrQkFBK0IsQ0FBQztnQkFDM0UsRUFBRSxDQUFzQyxDQUFDO1lBQzNDLE1BQU0sTUFBTSxHQUFzQyxFQUFFLEdBQUcsU0FBUyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUM7WUFDM0YsT0FBTztnQkFDTCxXQUFXLEVBQUUsTUFBTSxDQUFDLFdBQVcsSUFBSSxJQUFJO2dCQUN2QyxhQUFhLEVBQUUsTUFBTSxDQUFDLGFBQWEsSUFBSSxpQkFBaUI7Z0JBQ3hELGFBQWEsRUFBRSxNQUFNLENBQUMsYUFBYTtnQkFDbkMsY0FBYyxFQUFFLE1BQU0sQ0FBQyxjQUFjO2FBQ3RDLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztRQU9ILDZFQUE2RTtRQUM1RCxVQUFLLEdBQUcsTUFBTSxDQUFrQyxJQUFJLENBQUMsQ0FBQztRQUN2RSxnRkFBZ0Y7UUFDL0QsZ0JBQVcsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDN0MsZ0ZBQWdGO1FBQ3hFLG9CQUFlLEdBQUcsS0FBSyxDQUFDO1FBQ2hDLDhDQUE4QztRQUNyQyxnQkFBVyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUU1QixlQUFVLEdBQUcsTUFBTSxDQUE4QixTQUFTLENBQUMsQ0FBQztRQUM1RCxnQkFBVyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM1QixpQkFBWSxHQUFHLE1BQU0sQ0FBZ0IsSUFBSSxDQUFDLENBQUM7UUFDM0Msb0JBQWUsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUMsQ0FBQztRQUVoRSxxRUFBcUU7UUFDNUQsa0JBQWEsR0FBRyxJQUFJLFdBQVcsQ0FBVSxLQUFLLEVBQUU7WUFDdkQsV0FBVyxFQUFFLElBQUk7U0FDbEIsQ0FBQyxDQUFDO1FBRUgsK0VBQStFO1FBQzlELGtCQUFhLEdBQUcsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7UUFDckUsNERBQTREO1FBQ3BELHVCQUFrQixHQUF5QyxJQUFJLENBQUM7UUFDeEUsc0VBQXNFO1FBQ3JELHNCQUFpQixHQUFHLEdBQUcsQ0FBQztRQUV6Qyw4RUFBOEU7UUFDOUUsa0JBQWtCO1FBQ2xCLDhFQUE4RTtRQUVyRSxjQUFTLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztRQUNqRCxvQkFBZSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQztRQUV0RTs7Ozs7Ozs7V0FRRztRQUNNLGNBQVMsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxtQkFBbUIsRUFBRSxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUUsS0FBSyxTQUFTLENBQUMsQ0FBQztRQUVoRyxVQUFLLEdBQUcsUUFBUSxDQUFVLEdBQUcsRUFBRTtZQUN0QyxJQUFJLElBQUksQ0FBQyxlQUFlLEVBQUU7Z0JBQUUsT0FBTyxlQUFlLENBQUM7WUFDbkQsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLEtBQUssYUFBYSxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUM7Z0JBQy9ELDBFQUEwRTtnQkFDMUUsZ0VBQWdFO2dCQUNoRSxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUUsS0FBSyxhQUFhO29CQUFFLE9BQU8sYUFBYSxDQUFDO1lBQ2hFLENBQUM7WUFDRCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDMUIsSUFBSSxJQUFJLEtBQUssVUFBVTtnQkFBRSxPQUFPLFVBQVUsQ0FBQztZQUMzQyxJQUFJLElBQUksS0FBSyxXQUFXO2dCQUFFLE9BQU8sV0FBVyxDQUFDO1lBQzdDLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRTtnQkFBRSxPQUFPLFNBQVMsQ0FBQztZQUN2QyxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUUsS0FBSyxRQUFRO2dCQUFFLE9BQU8sU0FBUyxDQUFDO1lBQ3JELElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRTtnQkFBRSxPQUFPLE9BQU8sQ0FBQztZQUN2QyxPQUFPLE1BQU0sQ0FBQztRQUNoQixDQUFDLENBQUMsQ0FBQztRQUVNLGNBQVMsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFO1lBQ2pDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUN2QixJQUFJLENBQUMsS0FBSyxVQUFVO2dCQUFFLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUNqRCxJQUFJLENBQUMsS0FBSyxXQUFXO2dCQUFFLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUNuRCxPQUFPLElBQUksQ0FBQztRQUNkLENBQUMsQ0FBQyxDQUFDO1FBRU0sbUJBQWMsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFO1lBQ3RDLFFBQVEsSUFBSSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUM7Z0JBQ3JCLEtBQUssYUFBYTtvQkFDaEIsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDLHVCQUF1QixDQUFDLENBQUM7Z0JBQzFDLEtBQUssU0FBUztvQkFDWixPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMsc0JBQXNCLENBQUMsQ0FBQztnQkFDekMsS0FBSyxPQUFPO29CQUNWLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQyxjQUFjLENBQUMsQ0FBQztnQkFDakM7b0JBQ0UsT0FBTyxJQUFJLENBQUM7WUFDaEIsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO1FBRU0saUJBQVksR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFO1lBQ3BDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUN2QixJQUFJLENBQUMsS0FBSyxPQUFPLElBQUksQ0FBQyxLQUFLLFNBQVM7Z0JBQUUsT0FBTyxTQUFTLENBQUM7WUFDdkQsSUFBSSxDQUFDLEtBQUssYUFBYTtnQkFBRSxPQUFPLFFBQVEsQ0FBQztZQUN6QyxPQUFPLE1BQU0sQ0FBQztRQUNoQixDQUFDLENBQUMsQ0FBQztRQUVNLGNBQVMsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFO1lBQ2pDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUN2QixJQUFJLENBQUMsS0FBSyxhQUFhO2dCQUFFLE9BQU8sc0JBQXNCLENBQUM7WUFDdkQsT0FBTyxzQkFBc0IsQ0FBQztRQUNoQyxDQUFDLENBQUMsQ0FBQztRQUVNLGdCQUFXLEdBQUcsUUFBUSxDQUFzQixHQUFHLEVBQUUsQ0FBQyxDQUFDO1lBQzFELE9BQU8sRUFBRSxJQUFJLENBQUMsYUFBYTtZQUMzQixLQUFLLEVBQUUsU0FBUztZQUNoQixRQUFRLEVBQ04sSUFBSSxDQUFDLEtBQUssRUFBRSxLQUFLLElBQUk7Z0JBQ3JCLElBQUksQ0FBQyxLQUFLLEVBQUUsS0FBSyxhQUFhO2dCQUM5QixJQUFJLENBQUMsS0FBSyxFQUFFLEtBQUssZUFBZTtnQkFDaEMsSUFBSSxDQUFDLEtBQUssRUFBRSxLQUFLLFNBQVM7U0FDN0IsQ0FBQyxDQUFDLENBQUM7UUFFSyxxQkFBZ0IsR0FBRyxRQUFRLENBQTBCLEdBQUcsRUFBRSxDQUFDLENBQUM7WUFDbkUsSUFBSSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDO1lBQ3pCLEtBQUssRUFBRSxNQUFNO1lBQ2IsSUFBSSxFQUFFLFNBQVM7WUFDZixJQUFJLEVBQUUsU0FBUztZQUNmLEtBQUssRUFBRSxPQUFPO1lBQ2QsSUFBSSxFQUFFLFFBQVE7WUFDZCxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsaUJBQWlCLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRTtZQUNoRCxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLE9BQU87U0FDakYsQ0FBQyxDQUFDLENBQUM7UUFFSyxpQkFBWSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUU7WUFDcEMsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQzlCLElBQUksQ0FBQyxDQUFDO2dCQUFFLE9BQU8sSUFBSSxDQUFDO1lBQ3BCLE9BQU8sR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUM1QyxDQUFDLENBQUMsQ0FBQztRQU9ELE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDbkIsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7WUFDaEMsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsRUFBRSxFQUFFLGtDQUFrQyxDQUFDLENBQUM7UUFDcEUsQ0FBQztRQUNELElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLFdBQVcsRUFBRSxFQUFFLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUU1RCxLQUFLLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1FBRWhDLHlDQUF5QztRQUN6QyxNQUFNLENBQ0osR0FBRyxFQUFFO1lBQ0gsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNqQixJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ25FLENBQUMsRUFDRCxFQUFFLGlCQUFpQixFQUFFLElBQUksRUFBRSxDQUM1QixDQUFDO1FBRUYsMEVBQTBFO1FBQzFFLDZFQUE2RTtRQUM3RSw2QkFBNkI7UUFDN0IsRUFBRTtRQUNGLHlFQUF5RTtRQUN6RSw2RUFBNkU7UUFDN0UsdUVBQXVFO1FBQ3ZFLHdFQUF3RTtRQUN4RSxNQUFNLENBQ0osR0FBRyxFQUFFO1lBQ0gsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQzdCLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRSxLQUFLLElBQUk7Z0JBQUUsT0FBTztZQUNsQyxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxLQUFLLEdBQUcsRUFBRSxDQUFDO2dCQUNyQyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztZQUN6RCxDQUFDO1FBQ0gsQ0FBQyxFQUNELEVBQUUsaUJBQWlCLEVBQUUsSUFBSSxFQUFFLENBQzVCLENBQUM7UUFFRix3RUFBd0U7UUFDeEUsNkJBQTZCO1FBQzdCLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUM1QyxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUUsS0FBSyxJQUFJO2dCQUFFLE9BQU87WUFDbEMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQztnQkFDM0IsS0FBSyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDdkIsQ0FBQztpQkFBTSxJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDO2dCQUNsQyxLQUFLLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUN4QixDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFFSCx1RUFBdUU7UUFDdkUsa0VBQWtFO1FBQ2xFLHdFQUF3RTtRQUN4RSx1RUFBdUU7UUFDdkUsSUFBSSxPQUFPLE1BQU0sS0FBSyxXQUFXLEVBQUUsQ0FBQztZQUNsQyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUN2RCxDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7Ozs7OztPQVFHO0lBQ0gsUUFBUTtRQUNOLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLENBQUM7SUFDOUQsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQzlCLElBQUksT0FBTyxNQUFNLEtBQUssV0FBVyxFQUFFLENBQUM7WUFDbEMsTUFBTSxDQUFDLG1CQUFtQixDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDMUQsQ0FBQztRQUNELElBQUksSUFBSSxDQUFDLGtCQUFrQixLQUFLLElBQUksRUFBRSxDQUFDO1lBQ3JDLFlBQVksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQztZQUN0QyxJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDO1FBQ2pDLENBQUM7SUFDSCxDQUFDO0lBRUQsOEVBQThFO0lBQ3RFLHNCQUFzQjtRQUM1QixJQUFJLElBQUksQ0FBQyxrQkFBa0IsS0FBSyxJQUFJLEVBQUUsQ0FBQztZQUNyQyxZQUFZLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDeEMsQ0FBQztRQUNELElBQUksQ0FBQyxrQkFBa0IsR0FBRyxVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ3hDLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUM7WUFDL0IsS0FBSyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztRQUNsQyxDQUFDLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFDN0IsQ0FBQztJQUVELDhFQUE4RTtJQUM5RSxVQUFVO0lBQ1YsOEVBQThFO0lBRTlFOzs7Ozs7Ozs7T0FTRztJQUNILEtBQUssQ0FBQyxRQUFRO1FBQ1osSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDM0IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFNUIsSUFBSSxDQUFDO1lBQ0gsTUFBTSxNQUFNLEdBQXFCLE1BQU0sSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUM7Z0JBQzNELGNBQWMsRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUM7YUFDakYsQ0FBQyxDQUFDO1lBRUgsSUFBSSxNQUFNLENBQUMsTUFBTSxLQUFLLFNBQVMsRUFBRSxDQUFDO2dCQUNoQyxpREFBaUQ7Z0JBQ2pELElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLG1CQUFtQixFQUFFLEVBQUUsQ0FBQztvQkFDdEMsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNoRCxDQUFDO2dCQUNELElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDO29CQUNkLE9BQU8sRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLGVBQWUsQ0FBQztvQkFDakMsUUFBUSxFQUFFLElBQUk7b0JBQ2QsS0FBSyxFQUFFLE1BQU07b0JBQ2IsUUFBUSxFQUFFLEtBQUs7aUJBQ2hCLENBQUMsQ0FBQztnQkFDSCxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUMsYUFBYSxFQUFFLEVBQUUsQ0FBQztZQUMxQyxDQUFDO2lCQUFNLElBQUksTUFBTSxDQUFDLE1BQU0sS0FBSyxTQUFTLElBQUksTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUMxRCxpRUFBaUU7Z0JBQ2pFLE9BQU87WUFDVCxDQUFDO2lCQUFNLENBQUM7Z0JBQ04seUVBQXlFO2dCQUN6RSxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDM0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7b0JBQ2QsT0FBTyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsY0FBYyxDQUFDO29CQUNoQyxRQUFRLEVBQUUsSUFBSTtvQkFDZCxLQUFLLEVBQUUsTUFBTTtvQkFDYixRQUFRLEVBQUUsS0FBSztpQkFDaEIsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztRQUNILENBQUM7UUFBQyxNQUFNLENBQUM7WUFDUCxtRUFBbUU7WUFDbkUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDM0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7Z0JBQ2QsT0FBTyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsY0FBYyxDQUFDO2dCQUNoQyxRQUFRLEVBQUUsSUFBSTtnQkFDZCxLQUFLLEVBQUUsTUFBTTtnQkFDYixRQUFRLEVBQUUsS0FBSzthQUNoQixDQUFDLENBQUM7UUFDTCxDQUFDO2dCQUFTLENBQUM7WUFDVCw0RUFBNEU7WUFDNUUsTUFBTSxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztZQUNqQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN2QixDQUFDO0lBQ0gsQ0FBQztJQUVELEtBQUssQ0FBQyxTQUFTO1FBQ2IsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDNUIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFNUIsSUFBSSxDQUFDO1lBQ0gsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7WUFDdkMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLG1CQUFtQixFQUFFLEVBQUUsQ0FBQztnQkFDckMsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLHNCQUFzQixDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ2pELENBQUM7WUFDRCxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQztnQkFDZCxPQUFPLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQztnQkFDbEMsUUFBUSxFQUFFLElBQUk7Z0JBQ2QsS0FBSyxFQUFFLE1BQU07Z0JBQ2IsUUFBUSxFQUFFLEtBQUs7YUFDaEIsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDLGNBQWMsRUFBRSxFQUFFLENBQUM7UUFDM0MsQ0FBQztRQUFDLE1BQU0sQ0FBQztZQUNQLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzdCLENBQUM7Z0JBQVMsQ0FBQztZQUNULE1BQU0sSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7WUFDakMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdkIsQ0FBQztJQUNILENBQUM7SUFFRCxxRkFBcUY7SUFDckYsS0FBSyxDQUFDLE9BQU87UUFDWCxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM1QixNQUFNLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUN4QixDQUFDO0lBRUQsYUFBYTtRQUNYLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBRUQsOEVBQThFO0lBQzlFLFdBQVc7SUFDWCw4RUFBOEU7SUFFdEUsS0FBSyxDQUFDLG1CQUFtQjtRQUMvQixJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxNQUFNLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztRQUN6RCxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLDhCQUE4QixFQUFFLENBQUMsQ0FBQztRQUNoRSxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksSUFBSSxJQUFJLENBQUMsQ0FBQztRQUMzRCxLQUFLLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO0lBQ2xDLENBQUM7SUFFRDs7Ozs7Ozs7T0FRRztJQUNLLEtBQUssQ0FBQyxtQkFBbUI7UUFDL0IsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLEtBQUssSUFBSTtZQUFFLE9BQU87UUFDbEMsSUFBSSxJQUFJLENBQUMsZUFBZTtZQUFFLE9BQU87UUFDakMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFBRSxPQUFPO1FBQzlCLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRTtZQUFFLE9BQU87UUFFaEMsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7UUFDNUIsSUFBSSxDQUFDO1lBQ0gsTUFBTSxLQUFLLEdBQUcsTUFBTSxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQzlDLElBQUksS0FBSyxFQUFFLENBQUM7Z0JBQ1YsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQzdCLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDeEMsQ0FBQztRQUNILENBQUM7UUFBQyxNQUFNLENBQUM7WUFDUCxzRUFBc0U7UUFDeEUsQ0FBQztnQkFBUyxDQUFDO1lBQ1QsSUFBSSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUM7UUFDL0IsQ0FBQztJQUNILENBQUM7SUFFRDs7O09BR0c7SUFDSyxxQkFBcUI7UUFDM0IsSUFBSSxPQUFPLE1BQU0sS0FBSyxXQUFXLElBQUksT0FBTyxTQUFTLEtBQUssV0FBVyxFQUFFLENBQUM7WUFDdEUsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO1FBQ0QsTUFBTSxFQUFFLEdBQUcsU0FBUyxDQUFDLFNBQVMsSUFBSSxFQUFFLENBQUM7UUFDckMsTUFBTSxLQUFLLEdBQUcsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzFDLElBQUksQ0FBQyxLQUFLO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFDekIsTUFBTSxZQUFZLEdBQ2hCLE1BQU0sQ0FBQyxVQUFVLEVBQUUsQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDLE9BQU87WUFDeEQsU0FBaUQsQ0FBQyxVQUFVLEtBQUssSUFBSSxDQUFDO1FBQ3pFLE9BQU8sQ0FBQyxZQUFZLENBQUM7SUFDdkIsQ0FBQztJQUVTLEVBQUUsQ0FBQyxHQUFXO1FBQ3RCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNuQyxDQUFDOytHQTdaVSxvQ0FBb0M7bUdBQXBDLG9DQUFvQywySEFqUXJDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWlIVCw0cUVBbEhTLE9BQU8sMkpBQUUsb0JBQW9CLDBGQUFFLGVBQWUsMEdBQUUsZ0JBQWdCLDJFQUFFLGNBQWMseUVBQUUsYUFBYTs7NEZBa1E5RixvQ0FBb0M7a0JBclFoRCxTQUFTOytCQUNFLG1DQUFtQyxjQUNqQyxJQUFJLFdBQ1AsQ0FBQyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsZUFBZSxFQUFFLGdCQUFnQixFQUFFLGNBQWMsRUFBRSxhQUFhLENBQUMsWUFDaEc7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBaUhUO3dEQWtLUSxNQUFNO3NCQUFkLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIGNvbXB1dGVkLCBlZmZlY3QsIGluamVjdCwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1Db250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgSW9uSWNvbiB9IGZyb20gJ0Bpb25pYy9hbmd1bGFyL3N0YW5kYWxvbmUnO1xuaW1wb3J0IHsgYWRkSWNvbnMgfSBmcm9tICdpb25pY29ucyc7XG5pbXBvcnQge1xuICBhbGVydENpcmNsZU91dGxpbmUsXG4gIGNoZXZyb25Eb3duT3V0bGluZSxcbiAgY2hldnJvblVwT3V0bGluZSxcbiAgY2xvc2VDaXJjbGVPdXRsaW5lLFxuICBub3RpZmljYXRpb25zT2ZmT3V0bGluZSxcbiAgbm90aWZpY2F0aW9uc091dGxpbmUsXG4gIHJlZnJlc2hPdXRsaW5lLFxufSBmcm9tICdpb25pY29ucy9pY29ucyc7XG5cbmltcG9ydCB7IEJ1dHRvbkNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2F0b21zL2J1dHRvbi9idXR0b24uY29tcG9uZW50JztcbmltcG9ydCB7IERpc3BsYXlDb21wb25lbnQgfSBmcm9tICcuLi8uLi9hdG9tcy9kaXNwbGF5L2Rpc3BsYXkuY29tcG9uZW50JztcbmltcG9ydCB7IFRleHRDb21wb25lbnQgfSBmcm9tICcuLi8uLi9hdG9tcy90ZXh0L3RleHQuY29tcG9uZW50JztcbmltcG9ydCB7IFRpdGxlQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vYXRvbXMvdGl0bGUvdGl0bGUuY29tcG9uZW50JztcbmltcG9ydCB7IFRvZ2dsZUlucHV0Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vbW9sZWN1bGVzL3RvZ2dsZS1pbnB1dC90b2dnbGUtaW5wdXQuY29tcG9uZW50JztcbmltcG9ydCB7IFRvZ2dsZUlucHV0TWV0YWRhdGEgfSBmcm9tICcuLi8uLi9tb2xlY3VsZXMvdG9nZ2xlLWlucHV0L3R5cGVzJztcbmltcG9ydCB7IEJ1dHRvbk1ldGFkYXRhLCBDb21wb25lbnRTdGF0ZXMgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5cbmltcG9ydCB7IEF1dGhTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvYXV0aC9hdXRoLnNlcnZpY2UnO1xuaW1wb3J0IHsgTm90aWZpY2F0aW9uUGVybWlzc2lvblN0YXRlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvYXV0aC90eXBlcyc7XG5pbXBvcnQgeyBFbmFibGVQdXNoUmVzdWx0IH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvZmlyZWJhc2UvdHlwZXMnO1xuaW1wb3J0IHsgTWVzc2FnaW5nU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2ZpcmViYXNlL21lc3NhZ2luZy5zZXJ2aWNlJztcbmltcG9ydCB7IEkxOG5TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvaTE4bic7XG5pbXBvcnQgeyBOYXZpZ2F0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL25hdmlnYXRpb24vbmF2aWdhdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IFBhZ2VSZWZyZXNoU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3BhZ2UtcmVmcmVzaC9wYWdlLXJlZnJlc2guc2VydmljZSc7XG5pbXBvcnQgeyBQcmVmZXJlbmNlc1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9wcmVmZXJlbmNlcy9wcmVmZXJlbmNlcy5zZXJ2aWNlJztcbmltcG9ydCB7IFRvYXN0U2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3RvYXN0LnNlcnZpY2UnO1xuXG5pbXBvcnQgeyBOb3RpZmljYXRpb25QcmVmZXJlbmNlc1ZpZXdDb25maWcgfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IE5PVElGSUNBVElPTl9QUkVGRVJFTkNFU19WSUVXX0kxOE4gfSBmcm9tICcuL25vdGlmaWNhdGlvbi1wcmVmZXJlbmNlcy12aWV3LmkxOG4nO1xuXG5hZGRJY29ucyh7XG4gIGFsZXJ0Q2lyY2xlT3V0bGluZSxcbiAgY2hldnJvbkRvd25PdXRsaW5lLFxuICBjaGV2cm9uVXBPdXRsaW5lLFxuICBjbG9zZUNpcmNsZU91dGxpbmUsXG4gIG5vdGlmaWNhdGlvbnNPZmZPdXRsaW5lLFxuICBub3RpZmljYXRpb25zT3V0bGluZSxcbiAgcmVmcmVzaE91dGxpbmUsXG59KTtcblxuY29uc3QgREVGQVVMVF9OQU1FU1BBQ0UgPSAnU2V0dGluZ3MuTm90aWZpY2F0aW9ucyc7XG5cbi8qKlxuICogRXN0YWRvcyBkZSBsYSB2aXN0YSBkZSBwcmVmZXJlbmNpYXMgcHVzaDpcbiAqICAtIGBpZGxlYDogICAgICAgICAgdG9nZ2xlIG9mZiwgc2luIG9wZXJhY2nDs24gZW4gY3Vyc28sIHNpbiBlcnJvcmVzXG4gKiAgLSBgZW5hYmxpbmdgOiAgICAgIHNlY3VlbmNpYSBkZSBhY3RpdmFjacOzbiBlbiBjdXJzbyAodG9nZ2xlIHNwaW5uZXIpXG4gKiAgLSBgZW5hYmxlZGA6ICAgICAgIHRvZG8gT0sgKG1hc3Rlcj10cnVlICsgcGVybWlzc2lvbj1ncmFudGVkICsgdG9rZW4gcmVnaXN0cmFkbylcbiAqICAtIGBkaXNhYmxpbmdgOiAgICAgZGVzYWN0aXZhY2nDs24gZW4gY3Vyc29cbiAqICAtIGBlcnJvcmA6ICAgICAgICAgw7psdGltbyBpbnRlbnRvIGZhbGzDsyDihpIgbWVuc2FqZSArIGJvdMOzbiBcIlJlaW50ZW50YXJcIlxuICogIC0gYGJsb2NrZWRgOiAgICAgICBuYXZlZ2Fkb3IgZGVuZWfDsyBwZXJtaXNvcyDihpIgbWVuc2FqZSArIGPDs21vIGFycmVnbGFyXG4gKiAgLSBgdW5zdXBwb3J0ZWRgOiAgIG5hdmVnYWRvciBubyBzb3BvcnRhIEZDTSDihpIgbWVuc2FqZVxuICogIC0gYG5lZWRzLWluc3RhbGxgOiBpT1Mgc2luIHN0YW5kYWxvbmUg4oaSIGluc3RydWNjaW9uZXMgZGUgaW5zdGFsYWNpw7NuIFBXQVxuICovXG50eXBlIFVpU3RhdGUgPSAnaWRsZScgfCAnZW5hYmxpbmcnIHwgJ2VuYWJsZWQnIHwgJ2Rpc2FibGluZycgfCAnZXJyb3InIHwgJ2Jsb2NrZWQnIHwgJ3Vuc3VwcG9ydGVkJyB8ICduZWVkcy1pbnN0YWxsJztcblxuLyoqXG4gKiBgdmFsLW5vdGlmaWNhdGlvbi1wcmVmZXJlbmNlcy12aWV3YCDigJQgKipwcmVmZXJlbmNpYXMgZGUgbm90aWZpY2FjaW9uZXMgcHVzaCoqXG4gKiAoRkNNKSBmdWxsLWZlYXR1cmUgYXV0b2NvbnRlbmlkYSAob3JnYW5pc20pLiBQcm9tb3ZpZGEgZGVzZGUgYHNob3djYXNlYCBiYWpvIGVsXG4gKiBwcm9jZXNvIGRlIEFEUi0wMjEuXG4gKlxuICogU2VwYXJhZGEgZGUgYHZhbC1ub3RpZmljYXRpb25zLXZpZXdgIChlbCBpbmJveCAvIGZlZWQpLiBBcXXDrSBlbCB1c2VyICoqYWN0aXZhIG9cbiAqIGRlc2FjdGl2YSoqIGxhcyBub3RpZmljYWNpb25lcyBwdXNoIGVuIGVzdGUgZGlzcG9zaXRpdm8uXG4gKlxuICogVVggc2ltcGxpZmljYWRvOiBVTiBzb2xvIHRvZ2dsZSBxdWUgZWplY3V0YSB0b2RhIGxhIHNlY3VlbmNpYSAocGVkaXIgcGVybWlzbyDihpJcbiAqIFNXIHJlYWR5IOKGkiBnZXRUb2tlbiDihpIgcmVnaXN0cmFyIGVuIGJhY2tlbmQg4oaSIHNldCBtYXN0ZXIgcHJlZikgdsOtYVxuICogYE1lc3NhZ2luZ1NlcnZpY2UuZW5hYmxlKClgLiBFbCByZWdpc3RybyBkZWwgZGV2aWNlIGVuIGVsIGJhY2tlbmQgdmEgY29tb1xuICogY2FsbGJhY2sgKGxhIGxpYiBubyBkZXBlbmRlIGRlIGBBdXRoU2VydmljZWAgcGFyYSBldml0YXIgY2ljbG9zKS4gTWVuc2FqZXNcbiAqIGNvbnRleHR1YWxlcyB5IGJvdMOzbiBcIlJlaW50ZW50YXJcIiBhcGFyZWNlbiBzb2xvIGN1YW5kbyBhcGxpY2FuLlxuICpcbiAqIE5PIHJlbmRlcml6YSBpb24tY29udGVudCDigJQgdml2ZSBkZW50cm8gZGUgdmFsLXBhZ2Utd3JhcHBlci4gYEFjdGl2YXRlZFJvdXRlYCBzZVxuICogaW55ZWN0YSBgeyBvcHRpb25hbDogdHJ1ZSB9YCDihpIgZnVuY2lvbmEgc2luIHJvdXRlciAoZW1iZWJpZGEgLyBTdG9yeWJvb2spLlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd2YWwtbm90aWZpY2F0aW9uLXByZWZlcmVuY2VzLXZpZXcnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbSW9uSWNvbiwgVG9nZ2xlSW5wdXRDb21wb25lbnQsIEJ1dHRvbkNvbXBvbmVudCwgRGlzcGxheUNvbXBvbmVudCwgVGl0bGVDb21wb25lbnQsIFRleHRDb21wb25lbnRdLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxkaXYgY2xhc3M9XCJwYWdlXCI+XG4gICAgICA8aGVhZGVyIGNsYXNzPVwicGFnZS1oZWFkZXJcIj5cbiAgICAgICAgPHZhbC1kaXNwbGF5IFtwcm9wc109XCJ7IHNpemU6ICdzbWFsbCcsIGNvbG9yOiAnZGFyaycsIGNvbnRlbnQ6IHBhZ2VUaXRsZSgpIH1cIiAvPlxuICAgICAgICA8dmFsLXRpdGxlXG4gICAgICAgICAgW3Byb3BzXT1cIntcbiAgICAgICAgICAgIHNpemU6ICdsYXJnZScsXG4gICAgICAgICAgICBjb2xvcjogJ2RhcmsnLFxuICAgICAgICAgICAgYm9sZDogZmFsc2UsXG4gICAgICAgICAgICBjb250ZW50OiBwYWdlRGVzY3JpcHRpb24oKSxcbiAgICAgICAgICB9XCJcbiAgICAgICAgLz5cbiAgICAgIDwvaGVhZGVyPlxuXG4gICAgICBAaWYgKHN0YXRlKCkgPT09ICduZWVkcy1pbnN0YWxsJykge1xuICAgICAgICA8c2VjdGlvbiBjbGFzcz1cInNldHRpbmdzLXNlY3Rpb25cIj5cbiAgICAgICAgICA8dmFsLXRpdGxlXG4gICAgICAgICAgICBbcHJvcHNdPVwie1xuICAgICAgICAgICAgICBzaXplOiAnbWVkaXVtJyxcbiAgICAgICAgICAgICAgY29sb3I6ICdkYXJrJyxcbiAgICAgICAgICAgICAgYm9sZDogdHJ1ZSxcbiAgICAgICAgICAgICAgY29udGVudDogdHQoJ2lvc0luc3RhbGxUaXRsZScpLFxuICAgICAgICAgICAgfVwiXG4gICAgICAgICAgLz5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VjdGlvbi1ib2R5XCI+XG4gICAgICAgICAgICA8dmFsLXRleHRcbiAgICAgICAgICAgICAgW3Byb3BzXT1cIntcbiAgICAgICAgICAgICAgICBzaXplOiAnc21hbGwnLFxuICAgICAgICAgICAgICAgIGNvbG9yOiAnbWVkaXVtJyxcbiAgICAgICAgICAgICAgICBib2xkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBjb250ZW50OiB0dCgnaW9zSW5zdGFsbEhpbnQnKSxcbiAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPG9sIGNsYXNzPVwiaW5zdGFsbC1zdGVwc1wiPlxuICAgICAgICAgICAgICA8bGk+e3sgdHQoJ2lvc0luc3RhbGxTdGVwMScpIH19PC9saT5cbiAgICAgICAgICAgICAgPGxpPnt7IHR0KCdpb3NJbnN0YWxsU3RlcDInKSB9fTwvbGk+XG4gICAgICAgICAgICAgIDxsaT57eyB0dCgnaW9zSW5zdGFsbFN0ZXAzJykgfX08L2xpPlxuICAgICAgICAgICAgICA8bGk+e3sgdHQoJ2lvc0luc3RhbGxTdGVwNCcpIH19PC9saT5cbiAgICAgICAgICAgIDwvb2w+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvc2VjdGlvbj5cbiAgICAgIH1cblxuICAgICAgPHNlY3Rpb24gY2xhc3M9XCJzZXR0aW5ncy1zZWN0aW9uXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJub3RpZi1yb3dcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibm90aWYtcm93X19pY29uXCI+XG4gICAgICAgICAgICA8aW9uLWljb24gbmFtZT1cIm5vdGlmaWNhdGlvbnMtb3V0bGluZVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm5vdGlmLXJvd19fYm9keVwiPlxuICAgICAgICAgICAgPHZhbC10aXRsZVxuICAgICAgICAgICAgICBbcHJvcHNdPVwie1xuICAgICAgICAgICAgICAgIHNpemU6ICdtZWRpdW0nLFxuICAgICAgICAgICAgICAgIGNvbG9yOiAnZGFyaycsXG4gICAgICAgICAgICAgICAgYm9sZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBjb250ZW50OiB0dCgnc2ltcGxlVGl0bGUnKSxcbiAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPHZhbC10ZXh0XG4gICAgICAgICAgICAgIFtwcm9wc109XCJ7XG4gICAgICAgICAgICAgICAgc2l6ZTogJ3NtYWxsJyxcbiAgICAgICAgICAgICAgICBjb2xvcjogJ21lZGl1bScsXG4gICAgICAgICAgICAgICAgYm9sZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgY29udGVudDogdHQoJ3NpbXBsZURlc2NyaXB0aW9uJyksXG4gICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIEBpZiAoYnVzeUxhYmVsKCk7IGFzIGxhYmVsKSB7XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibm90aWYtcm93X19idXN5XCI+e3sgbGFiZWwgfX08L3NwYW4+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm5vdGlmLXJvd19fY29udHJvbFwiPlxuICAgICAgICAgICAgPHZhbC10b2dnbGUtaW5wdXQgW3Byb3BzXT1cInRvZ2dsZVByb3BzKClcIiAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICBAaWYgKGNvbnRleHRNZXNzYWdlKCk7IGFzIG1zZykge1xuICAgICAgICAgIDxkaXYgY2xhc3M9XCJhbGVydFwiIFtjbGFzc109XCInYWxlcnQtLScgKyBhbGVydFZhcmlhbnQoKVwiPlxuICAgICAgICAgICAgPGlvbi1pY29uIFtuYW1lXT1cImFsZXJ0SWNvbigpXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgLz5cbiAgICAgICAgICAgIDxzcGFuPnt7IG1zZyB9fTwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuXG4gICAgICAgIEBpZiAoc3RhdGUoKSA9PT0gJ2Vycm9yJykge1xuICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3ctYWN0aW9uc1wiPlxuICAgICAgICAgICAgPHZhbC1idXR0b24gW3Byb3BzXT1cInJldHJ5QnV0dG9uUHJvcHMoKVwiIChjbGljayk9XCJvblJldHJ5KClcIiAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICA8L3NlY3Rpb24+XG5cbiAgICAgIEBpZiAocmVzb2x2ZWRDb25maWcoKS5zaG93RGV0YWlscyAmJiBzdGF0ZSgpICE9PSAnbmVlZHMtaW5zdGFsbCcgJiYgc3RhdGUoKSAhPT0gJ3Vuc3VwcG9ydGVkJykge1xuICAgICAgICA8c2VjdGlvbiBjbGFzcz1cInNldHRpbmdzLXNlY3Rpb25cIj5cbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiZGV0YWlscy10b2dnbGVcIiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cInRvZ2dsZURldGFpbHMoKVwiPlxuICAgICAgICAgICAgPHNwYW4+e3sgc2hvd0RldGFpbHMoKSA/IHR0KCdkZXRhaWxzSGlkZScpIDogdHQoJ2RldGFpbHNTaG93JykgfX08L3NwYW4+XG4gICAgICAgICAgICA8aW9uLWljb24gW25hbWVdPVwic2hvd0RldGFpbHMoKSA/ICdjaGV2cm9uLXVwLW91dGxpbmUnIDogJ2NoZXZyb24tZG93bi1vdXRsaW5lJ1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIC8+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgQGlmIChzaG93RGV0YWlscygpKSB7XG4gICAgICAgICAgICA8ZGwgY2xhc3M9XCJkZXRhaWxzXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkZXRhaWxzX19yb3dcIj5cbiAgICAgICAgICAgICAgICA8ZHQ+e3sgdHQoJ2RldGFpbHNUb2tlbicpIH19PC9kdD5cbiAgICAgICAgICAgICAgICA8ZGQ+e3sgdG9rZW5QcmV2aWV3KCkgPz8gdHQoJ2RldGFpbHNOb25lJykgfX08L2RkPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRldGFpbHNfX3Jvd1wiPlxuICAgICAgICAgICAgICAgIDxkdD57eyB0dCgnZGlhZ25vc3RpY3NQZXJtaXNzaW9uJykgfX08L2R0PlxuICAgICAgICAgICAgICAgIDxkZD57eyBwZXJtaXNzaW9uKCkgfX08L2RkPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRldGFpbHNfX3Jvd1wiPlxuICAgICAgICAgICAgICAgIDxkdD57eyB0dCgnZGlhZ25vc3RpY3NTdXBwb3J0ZWQnKSB9fTwvZHQ+XG4gICAgICAgICAgICAgICAgPGRkPnt7IGlzU3VwcG9ydGVkKCkgPyAn4pyTJyA6ICfinJcnIH19PC9kZD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2RsPlxuICAgICAgICAgIH1cbiAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgfVxuICAgIDwvZGl2PlxuICBgLFxuICBzdHlsZXM6IFtcbiAgICBgXG4gICAgICAucGFnZSB7XG4gICAgICAgIHBhZGRpbmc6IDE2cHggMDtcbiAgICAgICAgbWF4LXdpZHRoOiA3MjBweDtcbiAgICAgICAgbWFyZ2luOiAwIGF1dG87XG4gICAgICB9XG4gICAgICAucGFnZS1oZWFkZXIge1xuICAgICAgICBtYXJnaW4tYm90dG9tOiA4cHg7XG4gICAgICB9XG4gICAgICAuc2V0dGluZ3Mtc2VjdGlvbiB7XG4gICAgICAgIHBhZGRpbmc6IDE2cHggMDtcbiAgICAgIH1cbiAgICAgIC5zZXR0aW5ncy1zZWN0aW9uICsgLnNldHRpbmdzLXNlY3Rpb24ge1xuICAgICAgICBib3JkZXItdG9wOiAxcHggc29saWQgdmFyKC0tdmFsLWJvcmRlci1jb2xvciwgcmdiYSgwLCAwLCAwLCAwLjA4KSk7XG4gICAgICB9XG4gICAgICAuc2VjdGlvbi1ib2R5IHtcbiAgICAgICAgbWFyZ2luLXRvcDogMTZweDtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgZ2FwOiAxMHB4O1xuICAgICAgfVxuICAgICAgLnJvdy1hY3Rpb25zIHtcbiAgICAgICAgbWFyZ2luLXRvcDogMTJweDtcbiAgICAgIH1cblxuICAgICAgLm5vdGlmLXJvdyB7XG4gICAgICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogNDRweCAxZnIgYXV0bztcbiAgICAgICAgZ2FwOiAxNnB4O1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgfVxuICAgICAgLm5vdGlmLXJvd19faWNvbiB7XG4gICAgICAgIHdpZHRoOiA0NHB4O1xuICAgICAgICBoZWlnaHQ6IDQ0cHg7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0taW9uLWNvbG9yLWxpZ2h0LCByZ2JhKDAsIDAsIDAsIDAuMDYpKTtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgICB9XG4gICAgICAubm90aWYtcm93X19pY29uIGlvbi1pY29uIHtcbiAgICAgICAgZm9udC1zaXplOiAyMnB4O1xuICAgICAgICBjb2xvcjogdmFyKC0taW9uLWNvbG9yLWRhcmssICMxYTFhMWEpO1xuICAgICAgfVxuICAgICAgLm5vdGlmLXJvd19fYm9keSB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgIGdhcDogNHB4O1xuICAgICAgICBtaW4td2lkdGg6IDA7XG4gICAgICB9XG4gICAgICAubm90aWYtcm93X19idXN5IHtcbiAgICAgICAgZm9udC1zaXplOiAxMnB4O1xuICAgICAgICBjb2xvcjogdmFyKC0taW9uLWNvbG9yLW1lZGl1bSwgIzkyOTQ5Yyk7XG4gICAgICAgIGZvbnQtc3R5bGU6IGl0YWxpYztcbiAgICAgICAgbWFyZ2luLXRvcDogNHB4O1xuICAgICAgfVxuICAgICAgLm5vdGlmLXJvd19fY29udHJvbCB7XG4gICAgICAgIGZsZXgtc2hyaW5rOiAwO1xuICAgICAgfVxuXG4gICAgICAuYWxlcnQge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBnYXA6IDEwcHg7XG4gICAgICAgIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xuICAgICAgICBtYXJnaW4tdG9wOiAxMnB4O1xuICAgICAgICBwYWRkaW5nOiAxMnB4IDE0cHg7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDEwcHg7XG4gICAgICAgIGZvbnQtc2l6ZTogMTNweDtcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNDU7XG4gICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWlvbi1jb2xvci1saWdodCwgcmdiYSgwLCAwLCAwLCAwLjA0KSk7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1pb24tY29sb3ItZGFyaywgIzFhMWExYSk7XG4gICAgICB9XG4gICAgICAuYWxlcnQgaW9uLWljb24ge1xuICAgICAgICBmb250LXNpemU6IDE4cHg7XG4gICAgICAgIGZsZXgtc2hyaW5rOiAwO1xuICAgICAgICBtYXJnaW4tdG9wOiAxcHg7XG4gICAgICB9XG4gICAgICAuYWxlcnQtLXdhcm5pbmcgaW9uLWljb24ge1xuICAgICAgICBjb2xvcjogdmFyKC0taW9uLWNvbG9yLXdhcm5pbmctc2hhZGUsICNjNzllMDgpO1xuICAgICAgfVxuICAgICAgLmFsZXJ0LS1kYW5nZXIgaW9uLWljb24ge1xuICAgICAgICBjb2xvcjogdmFyKC0taW9uLWNvbG9yLWRhbmdlci1zaGFkZSwgI2NmM2M0Zik7XG4gICAgICB9XG4gICAgICAuYWxlcnQtLWluZm8gaW9uLWljb24ge1xuICAgICAgICBjb2xvcjogdmFyKC0taW9uLWNvbG9yLW1lZGl1bSwgIzZiNmI2Yik7XG4gICAgICB9XG5cbiAgICAgIC5pbnN0YWxsLXN0ZXBzIHtcbiAgICAgICAgbWFyZ2luOiAwO1xuICAgICAgICBwYWRkaW5nLWxlZnQ6IDIwcHg7XG4gICAgICAgIGZvbnQtc2l6ZTogMTNweDtcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNjtcbiAgICAgICAgY29sb3I6IHZhcigtLWlvbi1jb2xvci1kYXJrLCAjMWExYTFhKTtcbiAgICAgIH1cbiAgICAgIC5pbnN0YWxsLXN0ZXBzIGxpICsgbGkge1xuICAgICAgICBtYXJnaW4tdG9wOiA0cHg7XG4gICAgICB9XG5cbiAgICAgIC5kZXRhaWxzLXRvZ2dsZSB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgIGdhcDogNnB4O1xuICAgICAgICBiYWNrZ3JvdW5kOiBub25lO1xuICAgICAgICBib3JkZXI6IDA7XG4gICAgICAgIHBhZGRpbmc6IDA7XG4gICAgICAgIGZvbnQtc2l6ZTogMTNweDtcbiAgICAgICAgY29sb3I6IHZhcigtLWlvbi1jb2xvci1tZWRpdW0sICM2YjZiNmIpO1xuICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICB9XG4gICAgICAuZGV0YWlscy10b2dnbGUgaW9uLWljb24ge1xuICAgICAgICBmb250LXNpemU6IDE0cHg7XG4gICAgICB9XG4gICAgICAuZGV0YWlscyB7XG4gICAgICAgIG1hcmdpbjogMTJweCAwIDA7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgIGdhcDogNnB4O1xuICAgICAgfVxuICAgICAgLmRldGFpbHNfX3JvdyB7XG4gICAgICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogMTQwcHggMWZyO1xuICAgICAgICBnYXA6IDEycHg7XG4gICAgICAgIGZvbnQtc2l6ZTogMTJweDtcbiAgICAgICAgYWxpZ24taXRlbXM6IGJhc2VsaW5lO1xuICAgICAgfVxuICAgICAgLmRldGFpbHNfX3JvdyBkdCB7XG4gICAgICAgIG1hcmdpbjogMDtcbiAgICAgICAgY29sb3I6IHZhcigtLWlvbi1jb2xvci1tZWRpdW0sICM2YjZiNmIpO1xuICAgICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgICAgICBsZXR0ZXItc3BhY2luZzogMC40cHg7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgICB9XG4gICAgICAuZGV0YWlsc19fcm93IGRkIHtcbiAgICAgICAgbWFyZ2luOiAwO1xuICAgICAgICBjb2xvcjogdmFyKC0taW9uLWNvbG9yLWRhcmssICMxYTFhMWEpO1xuICAgICAgICBmb250LWZhbWlseTogdWktbW9ub3NwYWNlLCBTRk1vbm8tUmVndWxhciwgbW9ub3NwYWNlO1xuICAgICAgICBmb250LXNpemU6IDExcHg7XG4gICAgICAgIHdvcmQtYnJlYWs6IGJyZWFrLWFsbDtcbiAgICAgIH1cbiAgICBgLFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBOb3RpZmljYXRpb25QcmVmZXJlbmNlc1ZpZXdDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIHByaXZhdGUgbmF2ID0gaW5qZWN0KE5hdmlnYXRpb25TZXJ2aWNlKTtcbiAgcHJpdmF0ZSBpMThuID0gaW5qZWN0KEkxOG5TZXJ2aWNlKTtcbiAgcHJpdmF0ZSB0b2FzdCA9IGluamVjdChUb2FzdFNlcnZpY2UpO1xuICBwcml2YXRlIGF1dGggPSBpbmplY3QoQXV0aFNlcnZpY2UpO1xuICBwcml2YXRlIG1lc3NhZ2luZyA9IGluamVjdChNZXNzYWdpbmdTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBwYWdlUmVmcmVzaCA9IGluamVjdChQYWdlUmVmcmVzaFNlcnZpY2UpO1xuICByZWFkb25seSBwcmVmcyA9IGluamVjdChQcmVmZXJlbmNlc1NlcnZpY2UpO1xuICAvLyBgQWN0aXZhdGVkUm91dGVgIG9wY2lvbmFsIOKGkiBsYSB2aXN0YSBmdW5jaW9uYSBlbWJlYmlkYSAvIGVuIFN0b3J5Ym9vayBzaW5cbiAgLy8gcm91dGVyIChzb2xvIGxvIHVzYSBwYXJhIGxlZXIgZWwgcm91dGUgZGF0YSBkZSBjb25maWcgY29tbyBmYWxsYmFjaykuXG4gIHByaXZhdGUgcm91dGUgPSBpbmplY3QoQWN0aXZhdGVkUm91dGUsIHsgb3B0aW9uYWw6IHRydWUgfSk7XG5cbiAgLyoqXG4gICAqIENvbmZpZyB2w61hIEBJbnB1dCAob2JqZWN0LWZpcnN0KS4gU2kgbm8gc2UgcGFzYSwgc2UgY2FlIGFsIHJvdXRlIGRhdGFcbiAgICogYG5vdGlmaWNhdGlvblByZWZlcmVuY2VzQ29uZmlnYCAocG9ibGFkbyBwb3JcbiAgICogYHByb3ZpZGVWYWx0ZWNoTm90aWZpY2F0aW9uUHJlZmVyZW5jZXNSb3V0ZXNgKS4gYHJlc29sdmVkQ29uZmlnYCBtZXJnZWEgY29uXG4gICAqIGxvcyBkZWZhdWx0cyDigJQgYEBJbnB1dGAgZ2FuYSBzb2JyZSByb3V0ZSBkYXRhLlxuICAgKi9cbiAgQElucHV0KCkgY29uZmlnPzogTm90aWZpY2F0aW9uUHJlZmVyZW5jZXNWaWV3Q29uZmlnO1xuXG4gIHJlYWRvbmx5IHJlc29sdmVkQ29uZmlnID0gY29tcHV0ZWQ8XG4gICAgUmVxdWlyZWQ8T21pdDxOb3RpZmljYXRpb25QcmVmZXJlbmNlc1ZpZXdDb25maWcsICdvblB1c2hFbmFibGVkJyB8ICdvblB1c2hEaXNhYmxlZCc+PiAmXG4gICAgICBQaWNrPE5vdGlmaWNhdGlvblByZWZlcmVuY2VzVmlld0NvbmZpZywgJ29uUHVzaEVuYWJsZWQnIHwgJ29uUHVzaERpc2FibGVkJz5cbiAgPigoKSA9PiB7XG4gICAgY29uc3QgZnJvbVJvdXRlID0gKHRoaXMucm91dGU/LnNuYXBzaG90LmRhdGFbJ25vdGlmaWNhdGlvblByZWZlcmVuY2VzQ29uZmlnJ10gPz9cbiAgICAgIHt9KSBhcyBOb3RpZmljYXRpb25QcmVmZXJlbmNlc1ZpZXdDb25maWc7XG4gICAgY29uc3QgbWVyZ2VkOiBOb3RpZmljYXRpb25QcmVmZXJlbmNlc1ZpZXdDb25maWcgPSB7IC4uLmZyb21Sb3V0ZSwgLi4uKHRoaXMuY29uZmlnID8/IHt9KSB9O1xuICAgIHJldHVybiB7XG4gICAgICBzaG93RGV0YWlsczogbWVyZ2VkLnNob3dEZXRhaWxzID8/IHRydWUsXG4gICAgICBpMThuTmFtZXNwYWNlOiBtZXJnZWQuaTE4bk5hbWVzcGFjZSA/PyBERUZBVUxUX05BTUVTUEFDRSxcbiAgICAgIG9uUHVzaEVuYWJsZWQ6IG1lcmdlZC5vblB1c2hFbmFibGVkLFxuICAgICAgb25QdXNoRGlzYWJsZWQ6IG1lcmdlZC5vblB1c2hEaXNhYmxlZCxcbiAgICB9O1xuICB9KTtcblxuICAvKiogTmFtZXNwYWNlIGkxOG4gcmVzdWVsdG8gKGNhcHR1cmFkbyBwYXJhIGxsYW1hZGFzIG5vLXJlYWN0aXZhcykuICovXG4gIHByaXZhdGUgZ2V0IG5zKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucmVzb2x2ZWRDb25maWcoKS5pMThuTmFtZXNwYWNlO1xuICB9XG5cbiAgLyoqIE9wZXJhY2nDs24gZW4gY3Vyc28gKGdvYmllcm5hIHNwaW5uZXIgZGVsIHRvZ2dsZSArIGxhYmVsIFwiQWN0aXZhbmRv4oCmXCIpLiAqL1xuICBwcml2YXRlIHJlYWRvbmx5IF9idXN5ID0gc2lnbmFsPG51bGwgfCAnZW5hYmxpbmcnIHwgJ2Rpc2FibGluZyc+KG51bGwpO1xuICAvKiogVHJ1ZSBzaSBlbCDDumx0aW1vIGludGVudG8gZmFsbMOzIOKAlCBnb2JpZXJuYSBlc3RhZG8gYGVycm9yYCArIHJldHJ5IGJ1dHRvbi4gKi9cbiAgcHJpdmF0ZSByZWFkb25seSBfbGFzdEZhaWxlZCA9IHNpZ25hbChmYWxzZSk7XG4gIC8qKiBUcnVlIG1pZW50cmFzIHNlIHJlLW9idGllbmUgZWwgdG9rZW4gRkNNIGVuIGJhY2tncm91bmQgKG5vIGFmZWN0YSBsYSBVSSkuICovXG4gIHByaXZhdGUgX3JlcGFpcmluZ1Rva2VuID0gZmFsc2U7XG4gIC8qKiBUb2dnbGUgZGVsIGV4cGFuZCBkZSBkZXRhbGxlcyB0w6ljbmljb3MuICovXG4gIHJlYWRvbmx5IHNob3dEZXRhaWxzID0gc2lnbmFsKGZhbHNlKTtcblxuICByZWFkb25seSBwZXJtaXNzaW9uID0gc2lnbmFsPE5vdGlmaWNhdGlvblBlcm1pc3Npb25TdGF0ZT4oJ2RlZmF1bHQnKTtcbiAgcmVhZG9ubHkgaXNTdXBwb3J0ZWQgPSBzaWduYWwoZmFsc2UpO1xuICByZWFkb25seSBjdXJyZW50VG9rZW4gPSBzaWduYWw8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG4gIHJlYWRvbmx5IG5lZWRzSU9TSW5zdGFsbCA9IHNpZ25hbCh0aGlzLmRldGVjdE5lZWRzSU9TSW5zdGFsbCgpKTtcblxuICAvKiogRm9ybUNvbnRyb2wgZGVsIHRvZ2dsZSAoc3luYy1lYWRvIGNvbiBgaXNFbmFibGVkYCB2aWEgZWZmZWN0KS4gKi9cbiAgcmVhZG9ubHkgdG9nZ2xlQ29udHJvbCA9IG5ldyBGb3JtQ29udHJvbDxib29sZWFuPihmYWxzZSwge1xuICAgIG5vbk51bGxhYmxlOiB0cnVlLFxuICB9KTtcblxuICAvKiogSGFuZGxlciBkZWwgbGlzdGVuZXIgYGZvY3VzYCDigJQgcmVmZXJlbmNpYSBndWFyZGFkYSBwYXJhIHBvZGVyIHJlbW92ZXJsby4gKi9cbiAgcHJpdmF0ZSByZWFkb25seSBvbldpbmRvd0ZvY3VzID0gKCkgPT4gdGhpcy5zY2hlZHVsZUJyb3dzZXJSZWZyZXNoKCk7XG4gIC8qKiBUaW1lciBkZWwgZGVib3VuY2UgZGVsIHJlZnJlc2ggZGlzcGFyYWRvIHBvciBgZm9jdXNgLiAqL1xuICBwcml2YXRlIGZvY3VzRGVib3VuY2VUaW1lcjogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD4gfCBudWxsID0gbnVsbDtcbiAgLyoqIFZlbnRhbmEgZGUgZGVib3VuY2UgKG1zKSBwYXJhIGVsIHJlZnJlc2ggZGlzcGFyYWRvIHBvciBgZm9jdXNgLiAqL1xuICBwcml2YXRlIHJlYWRvbmx5IEZPQ1VTX0RFQk9VTkNFX01TID0gNTAwO1xuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyBFc3RhZG8gZGVyaXZhZG9cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgcmVhZG9ubHkgcGFnZVRpdGxlID0gY29tcHV0ZWQoKCkgPT4gdGhpcy50dCgncGFnZVRpdGxlJykpO1xuICByZWFkb25seSBwYWdlRGVzY3JpcHRpb24gPSBjb21wdXRlZCgoKSA9PiB0aGlzLnR0KCdwYWdlRGVzY3JpcHRpb24nKSk7XG5cbiAgLyoqXG4gICAqIEVzdGFkbyBlZmVjdGl2byBkZWwgdG9nZ2xlOiBcImVsIHVzdWFyaW8gdGllbmUgcHVzaCBhY3Rpdm9cIi5cbiAgICpcbiAgICogU2UgZGVyaXZhIFNPTE8gZGUgbGEgZGVjaXNpw7NuIGRlbCB1c3VhcmlvIChgbWFzdGVyYCkgeSBkZWwgcGVybWlzbyBkZWwgU09cbiAgICogKGBwZXJtaXNzaW9uYCkuIEVsIHRva2VuIEZDTSBOTyBmb3JtYSBwYXJ0ZSBkZWwgZXN0YWRvIGRlIFVJOiB2aXZlIGVuXG4gICAqIG1lbW9yaWEsIHNlIHBpZXJkZSBlbiBjYWRhIHJlY2FyZ2Evc3VzcGVuc2nDs24gZGUgbGEgUFdBIHkgcHJvZHVjaXLDrWEgZmxpY2tlci5cbiAgICogU2kgZmFsdGEgdG9rZW4gY29uIGBtYXN0ZXIgJiYgZ3JhbnRlZGAsIGVzIHVuIGRldGFsbGUgcmVwYXJhYmxlIGVuXG4gICAqIGJhY2tncm91bmQgKHZlciBgcmVwYWlyVG9rZW5JZk5lZWRlZGApLCBubyB1biBjYW1iaW8gZGVsIHRvZ2dsZS5cbiAgICovXG4gIHJlYWRvbmx5IGlzRW5hYmxlZCA9IGNvbXB1dGVkKCgpID0+IHRoaXMucHJlZnMubm90aWZpY2F0aW9uc01hc3RlcigpICYmIHRoaXMucGVybWlzc2lvbigpID09PSAnZ3JhbnRlZCcpO1xuXG4gIHJlYWRvbmx5IHN0YXRlID0gY29tcHV0ZWQ8VWlTdGF0ZT4oKCkgPT4ge1xuICAgIGlmICh0aGlzLm5lZWRzSU9TSW5zdGFsbCgpKSByZXR1cm4gJ25lZWRzLWluc3RhbGwnO1xuICAgIGlmICh0aGlzLnBlcm1pc3Npb24oKSA9PT0gJ3Vuc3VwcG9ydGVkJyB8fCAhdGhpcy5pc1N1cHBvcnRlZCgpKSB7XG4gICAgICAvLyBpT1Mgc3RhbmRhbG9uZSBhw7puIHB1ZWRlIGRhciBpc1N1cHBvcnRlZCBmYWxzZSB0ZW1wcmFubyBhbnRlcyBkZSBpbml0IOKAlFxuICAgICAgLy8gc29sbyBibG9xdWVhbW9zIHNpIGVsIGJyb3dzZXIgZXhwbMOtY2l0YW1lbnRlIG5vIHNvcG9ydGEgQVBJcy5cbiAgICAgIGlmICh0aGlzLnBlcm1pc3Npb24oKSA9PT0gJ3Vuc3VwcG9ydGVkJykgcmV0dXJuICd1bnN1cHBvcnRlZCc7XG4gICAgfVxuICAgIGNvbnN0IGJ1c3kgPSB0aGlzLl9idXN5KCk7XG4gICAgaWYgKGJ1c3kgPT09ICdlbmFibGluZycpIHJldHVybiAnZW5hYmxpbmcnO1xuICAgIGlmIChidXN5ID09PSAnZGlzYWJsaW5nJykgcmV0dXJuICdkaXNhYmxpbmcnO1xuICAgIGlmICh0aGlzLmlzRW5hYmxlZCgpKSByZXR1cm4gJ2VuYWJsZWQnO1xuICAgIGlmICh0aGlzLnBlcm1pc3Npb24oKSA9PT0gJ2RlbmllZCcpIHJldHVybiAnYmxvY2tlZCc7XG4gICAgaWYgKHRoaXMuX2xhc3RGYWlsZWQoKSkgcmV0dXJuICdlcnJvcic7XG4gICAgcmV0dXJuICdpZGxlJztcbiAgfSk7XG5cbiAgcmVhZG9ubHkgYnVzeUxhYmVsID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IHMgPSB0aGlzLnN0YXRlKCk7XG4gICAgaWYgKHMgPT09ICdlbmFibGluZycpIHJldHVybiB0aGlzLnR0KCdlbmFibGluZycpO1xuICAgIGlmIChzID09PSAnZGlzYWJsaW5nJykgcmV0dXJuIHRoaXMudHQoJ2Rpc2FibGluZycpO1xuICAgIHJldHVybiBudWxsO1xuICB9KTtcblxuICByZWFkb25seSBjb250ZXh0TWVzc2FnZSA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBzd2l0Y2ggKHRoaXMuc3RhdGUoKSkge1xuICAgICAgY2FzZSAndW5zdXBwb3J0ZWQnOlxuICAgICAgICByZXR1cm4gdGhpcy50dCgncGVybWlzc2lvblVuc3VwcG9ydGVkJyk7XG4gICAgICBjYXNlICdibG9ja2VkJzpcbiAgICAgICAgcmV0dXJuIHRoaXMudHQoJ3Blcm1pc3Npb25EZW5pZWRJbmZvJyk7XG4gICAgICBjYXNlICdlcnJvcic6XG4gICAgICAgIHJldHVybiB0aGlzLnR0KCdlcnJvckdlbmVyaWMnKTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfSk7XG5cbiAgcmVhZG9ubHkgYWxlcnRWYXJpYW50ID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IHMgPSB0aGlzLnN0YXRlKCk7XG4gICAgaWYgKHMgPT09ICdlcnJvcicgfHwgcyA9PT0gJ2Jsb2NrZWQnKSByZXR1cm4gJ3dhcm5pbmcnO1xuICAgIGlmIChzID09PSAndW5zdXBwb3J0ZWQnKSByZXR1cm4gJ2Rhbmdlcic7XG4gICAgcmV0dXJuICdpbmZvJztcbiAgfSk7XG5cbiAgcmVhZG9ubHkgYWxlcnRJY29uID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IHMgPSB0aGlzLnN0YXRlKCk7XG4gICAgaWYgKHMgPT09ICd1bnN1cHBvcnRlZCcpIHJldHVybiAnY2xvc2UtY2lyY2xlLW91dGxpbmUnO1xuICAgIHJldHVybiAnYWxlcnQtY2lyY2xlLW91dGxpbmUnO1xuICB9KTtcblxuICByZWFkb25seSB0b2dnbGVQcm9wcyA9IGNvbXB1dGVkPFRvZ2dsZUlucHV0TWV0YWRhdGE+KCgpID0+ICh7XG4gICAgY29udHJvbDogdGhpcy50b2dnbGVDb250cm9sLFxuICAgIGNvbG9yOiAncHJpbWFyeScsXG4gICAgZGlzYWJsZWQ6XG4gICAgICB0aGlzLl9idXN5KCkgIT09IG51bGwgfHxcbiAgICAgIHRoaXMuc3RhdGUoKSA9PT0gJ3Vuc3VwcG9ydGVkJyB8fFxuICAgICAgdGhpcy5zdGF0ZSgpID09PSAnbmVlZHMtaW5zdGFsbCcgfHxcbiAgICAgIHRoaXMuc3RhdGUoKSA9PT0gJ2Jsb2NrZWQnLFxuICB9KSk7XG5cbiAgcmVhZG9ubHkgcmV0cnlCdXR0b25Qcm9wcyA9IGNvbXB1dGVkPFBhcnRpYWw8QnV0dG9uTWV0YWRhdGE+PigoKSA9PiAoe1xuICAgIHRleHQ6IHRoaXMudHQoJ3JldHJ5Q3RhJyksXG4gICAgY29sb3I6ICdkYXJrJyxcbiAgICBmaWxsOiAnb3V0bGluZScsXG4gICAgc2l6ZTogJ2RlZmF1bHQnLFxuICAgIHNoYXBlOiAncm91bmQnLFxuICAgIHR5cGU6ICdidXR0b24nLFxuICAgIGljb246IHsgbmFtZTogJ3JlZnJlc2gtb3V0bGluZScsIHNsb3Q6ICdzdGFydCcgfSxcbiAgICBzdGF0ZTogdGhpcy5fYnVzeSgpICE9PSBudWxsID8gQ29tcG9uZW50U3RhdGVzLldPUktJTkcgOiBDb21wb25lbnRTdGF0ZXMuRU5BQkxFRCxcbiAgfSkpO1xuXG4gIHJlYWRvbmx5IHRva2VuUHJldmlldyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCB0ID0gdGhpcy5jdXJyZW50VG9rZW4oKTtcbiAgICBpZiAoIXQpIHJldHVybiBudWxsO1xuICAgIHJldHVybiBgJHt0LnNsaWNlKDAsIDIyKX3igKYke3Quc2xpY2UoLTYpfWA7XG4gIH0pO1xuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyBMaWZlY3ljbGVcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgbnMgPSB0aGlzLm5zO1xuICAgIGlmICghdGhpcy5pMThuLmhhc05hbWVzcGFjZShucykpIHtcbiAgICAgIHRoaXMuaTE4bi5yZWdpc3RlckNvbnRlbnQobnMsIE5PVElGSUNBVElPTl9QUkVGRVJFTkNFU19WSUVXX0kxOE4pO1xuICAgIH1cbiAgICB0aGlzLm5hdi5zZXRCYWNrSGVhZGVyKCdwYWdlVGl0bGUnLCBucywgeyB3aXRoTWVudTogdHJ1ZSB9KTtcblxuICAgIHZvaWQgdGhpcy5yZWZyZXNoQnJvd3NlclN0YXRlKCk7XG5cbiAgICAvLyBSZS1hcGxpY2FyIGhlYWRlciBlbiBjYW1iaW8gZGUgaWRpb21hLlxuICAgIGVmZmVjdChcbiAgICAgICgpID0+IHtcbiAgICAgICAgdGhpcy5pMThuLmxhbmcoKTtcbiAgICAgICAgdGhpcy5uYXYuc2V0QmFja0hlYWRlcigncGFnZVRpdGxlJywgdGhpcy5ucywgeyB3aXRoTWVudTogdHJ1ZSB9KTtcbiAgICAgIH0sXG4gICAgICB7IGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlIH1cbiAgICApO1xuXG4gICAgLy8gU3luYyBGb3JtQ29udHJvbCDihpDihpIgZXN0YWRvIGVmZWN0aXZvLiBDdWFuZG8gZWwgZXN0YWRvIGNhbWJpYSAoY2FtYmlvIGRlXG4gICAgLy8gcGVybWlzc2lvbiBwb3IgZWwgYnJvd3NlciwgbyBzbmFwc2hvdCBGaXJlc3RvcmUgZGUgYG1hc3RlcmApLCBlbCB0b2dnbGUgc2VcbiAgICAvLyByZS1hbGluZWEgY29uIGxhIHJlYWxpZGFkLlxuICAgIC8vXG4gICAgLy8gSU1QT1JUQU5URTogc2UgaWdub3JhbiBsb3MgY2FtYmlvcyBtaWVudHJhcyBoYXkgdW5hIG9wZXJhY2nDs24gZW4gY3Vyc29cbiAgICAvLyAoYF9idXN5KCkgIT09IG51bGxgKS4gRHVyYW50ZSBgb25FbmFibGVgL2BvbkRpc2FibGVgIGxhcyBzZcOxYWxlcyBmdWVudGUgc2VcbiAgICAvLyBhY3R1YWxpemFuIGVuIG1vbWVudG9zIGRpc3RpbnRvcyB5IHByb2R1Y2lyw61hbiBlc3RhZG9zIGludGVybWVkaW9zIOKGklxuICAgIC8vIGZsaWNrZXIgdmlzaWJsZS4gRWwgdG9nZ2xlIHNlIHJlLWFsaW5lYSBVTkEgc29sYSB2ZXogZW4gZWwgYGZpbmFsbHlgLlxuICAgIGVmZmVjdChcbiAgICAgICgpID0+IHtcbiAgICAgICAgY29uc3QgZWZmID0gdGhpcy5pc0VuYWJsZWQoKTtcbiAgICAgICAgaWYgKHRoaXMuX2J1c3koKSAhPT0gbnVsbCkgcmV0dXJuO1xuICAgICAgICBpZiAodGhpcy50b2dnbGVDb250cm9sLnZhbHVlICE9PSBlZmYpIHtcbiAgICAgICAgICB0aGlzLnRvZ2dsZUNvbnRyb2wuc2V0VmFsdWUoZWZmLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB7IGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlIH1cbiAgICApO1xuXG4gICAgLy8gSW50ZXJjZXB0YXIgY2xpY2sgZGVsIHVzZXI6IGVsIHRvZ2dsZSB5YSBjYW1iacOzIHZpc3VhbG1lbnRlLCBlamVjdXRhclxuICAgIC8vIGxhIGFjY2nDs24gY29ycmVzcG9uZGllbnRlLlxuICAgIHRoaXMudG9nZ2xlQ29udHJvbC52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKHYgPT4ge1xuICAgICAgaWYgKHRoaXMuX2J1c3koKSAhPT0gbnVsbCkgcmV0dXJuO1xuICAgICAgaWYgKHYgJiYgIXRoaXMuaXNFbmFibGVkKCkpIHtcbiAgICAgICAgdm9pZCB0aGlzLm9uRW5hYmxlKCk7XG4gICAgICB9IGVsc2UgaWYgKCF2ICYmIHRoaXMuaXNFbmFibGVkKCkpIHtcbiAgICAgICAgdm9pZCB0aGlzLm9uRGlzYWJsZSgpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gRGV0ZWN0YXIgcmVncmVzbyBhIGxhIHBlc3Rhw7FhIOKAlCBlbCB1c2VyIHB1ZG8gaGFiZXIgY2FtYmlhZG8gcGVybWlzb3NcbiAgICAvLyBkZXNkZSBsYSBjb25maWcgZGVsIGJyb3dzZXIuIEVsIHJlZnJlc2ggdmEgY29uIGRlYm91bmNlIHBhcmEgbm9cbiAgICAvLyBkaXNwYXJhcnNlIGVuIHLDoWZhZ2FzIChlbiBQV0EgbW9iaWxlIGBmb2N1c2Agc2FsdGEgY29uIGNhZGEgY2FtYmlvIGRlXG4gICAgLy8gYXBwIC8gYXBhcmljacOzbiBkZWwgdGVjbGFkbykuIEVsIGxpc3RlbmVyIHNlIHJlbXVldmUgZW4gbmdPbkRlc3Ryb3kuXG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignZm9jdXMnLCB0aGlzLm9uV2luZG93Rm9jdXMpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RyYSBlbCBwdWxsLXRvLXJlZnJlc2ggZXN0w6FuZGFyLiBBdW5xdWUgZXN0YSB2aXN0YSBubyBtdWVzdHJhIHVuYVxuICAgKiBsaXN0YSByZW1vdGEsIHPDrSByZWZsZWphIGVzdGFkbyBtdXRhYmxlIGRlbCBicm93c2VyIChwZXJtaXNvLCB0b2tlbixcbiAgICogc29wb3J0ZSBGQ00pIHF1ZSBwdWVkZSBjYW1iaWFyIGZ1ZXJhIGRlIGxhIGFwcCDigJQgZWwgcmVmcmVzaCByZS1ldmFsw7phIHRvZG8uXG4gICAqXG4gICAqIFNlIHVzYSBgbmdPbkluaXRgL2BuZ09uRGVzdHJveWAgKE5PIGBpb25WaWV3V2lsbEVudGVyYCkgcG9ycXVlXG4gICAqIGB2YWwtcGFnZS13cmFwcGVyYCB1c2EgYDxyb3V0ZXItb3V0bGV0PmAgcGxhbm8g4oCUIGxvcyBob29rcyBgaW9uVmlldypgIHNvbG9cbiAgICogZGlzcGFyYW4gZGVudHJvIGRlIGA8aW9uLXJvdXRlci1vdXRsZXQ+YC5cbiAgICovXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMucGFnZVJlZnJlc2gucmVnaXN0ZXIoKCkgPT4gdGhpcy5yZWZyZXNoQnJvd3NlclN0YXRlKCkpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5wYWdlUmVmcmVzaC51bnJlZ2lzdGVyKCk7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignZm9jdXMnLCB0aGlzLm9uV2luZG93Rm9jdXMpO1xuICAgIH1cbiAgICBpZiAodGhpcy5mb2N1c0RlYm91bmNlVGltZXIgIT09IG51bGwpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLmZvY3VzRGVib3VuY2VUaW1lcik7XG4gICAgICB0aGlzLmZvY3VzRGVib3VuY2VUaW1lciA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgLyoqIFJlZnJlc2NhIGVsIGVzdGFkbyBkZWwgYnJvd3NlciBjb24gZGVib3VuY2Ug4oCUIGV2aXRhIHLDoWZhZ2FzIGRlIGBmb2N1c2AuICovXG4gIHByaXZhdGUgc2NoZWR1bGVCcm93c2VyUmVmcmVzaCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5mb2N1c0RlYm91bmNlVGltZXIgIT09IG51bGwpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLmZvY3VzRGVib3VuY2VUaW1lcik7XG4gICAgfVxuICAgIHRoaXMuZm9jdXNEZWJvdW5jZVRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmZvY3VzRGVib3VuY2VUaW1lciA9IG51bGw7XG4gICAgICB2b2lkIHRoaXMucmVmcmVzaEJyb3dzZXJTdGF0ZSgpO1xuICAgIH0sIHRoaXMuRk9DVVNfREVCT1VOQ0VfTVMpO1xuICB9XG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIEFjdGlvbnNcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgLyoqXG4gICAqIFNlY3VlbmNpYSBjb21wbGV0YSBkZSBhY3RpdmFjacOzbi5cbiAgICpcbiAgICogVG9kYSBsYSBtZWPDoW5pY2EgKHBlcm1pc3Npb24g4oaSIFNXIHJlYWR5IOKGkiBnZXRUb2tlbiBjb24gcmV0cnkg4oaSIHdhdGNoZG9nIGRlXG4gICAqIGF1dG8tcmVsb2FkKSB2aXZlIGVuIGBNZXNzYWdpbmdTZXJ2aWNlLmVuYWJsZSgpYCBkZSBsYSBsaWIuIEVsIHBhc28gZGVcbiAgICogcmVnaXN0cm8gZGVsIGRldmljZSBlbiBlbCBiYWNrZW5kIHNlIHBhc2EgY29tbyBjYWxsYmFjayAoYHJlZ2lzdGVyRGV2aWNlYClcbiAgICogcG9ycXVlIGxhIGxpYiBubyBwdWVkZSBkZXBlbmRlciBkZSBgQXV0aFNlcnZpY2VgIHNpbiBjcmVhciB1biBjaWNsby5cbiAgICpcbiAgICogYGVuYWJsZSgpYCBubyBoYWNlIHRocm93OiByZXN1ZWx2ZSBjb24gdW4gYEVuYWJsZVB1c2hSZXN1bHRgIGRlc2NyaXB0aXZvLlxuICAgKi9cbiAgYXN5bmMgb25FbmFibGUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5fYnVzeS5zZXQoJ2VuYWJsaW5nJyk7XG4gICAgdGhpcy5fbGFzdEZhaWxlZC5zZXQoZmFsc2UpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3VsdDogRW5hYmxlUHVzaFJlc3VsdCA9IGF3YWl0IHRoaXMubWVzc2FnaW5nLmVuYWJsZSh7XG4gICAgICAgIHJlZ2lzdGVyRGV2aWNlOiB0b2tlbiA9PiB0aGlzLmF1dGgucmVnaXN0ZXJEZXZpY2UodG9rZW4pLnRoZW4ociA9PiByLnJlZ2lzdGVyZWQpLFxuICAgICAgfSk7XG5cbiAgICAgIGlmIChyZXN1bHQuc3RhdHVzID09PSAnZW5hYmxlZCcpIHtcbiAgICAgICAgLy8gUGVyc2lzdGlyIGZsYWcgbWFzdGVyIHNpIGHDum4gbm8gZXN0YWJhIGFjdGl2by5cbiAgICAgICAgaWYgKCF0aGlzLnByZWZzLm5vdGlmaWNhdGlvbnNNYXN0ZXIoKSkge1xuICAgICAgICAgIGF3YWl0IHRoaXMucHJlZnMuc2V0Tm90aWZpY2F0aW9uc01hc3Rlcih0cnVlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnRvYXN0LnNob3coe1xuICAgICAgICAgIG1lc3NhZ2U6IHRoaXMudHQoJ2VuYWJsZVN1Y2Nlc3MnKSxcbiAgICAgICAgICBkdXJhdGlvbjogMjAwMCxcbiAgICAgICAgICBjb2xvcjogJ2RhcmsnLFxuICAgICAgICAgIHBvc2l0aW9uOiAndG9wJyxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMucmVzb2x2ZWRDb25maWcoKS5vblB1c2hFbmFibGVkPy4oKTtcbiAgICAgIH0gZWxzZSBpZiAocmVzdWx0LnN0YXR1cyA9PT0gJ3RpbWVvdXQnICYmIHJlc3VsdC5yZWxvYWRlZCkge1xuICAgICAgICAvLyBMYSBsaWIgZGlzcGFyw7MgZWwgYXV0by1yZWxvYWQg4oCUIGxhIHDDoWdpbmEgZXN0w6EgcG9yIHJlY2FyZ2Fyc2UuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGRlbmllZCAvIHVuc3VwcG9ydGVkIC8gZXJyb3IgLyB0aW1lb3V0IHNpbiByZWxvYWQg4oaSIGZhbGxvIHJlY3VwZXJhYmxlLlxuICAgICAgICB0aGlzLl9sYXN0RmFpbGVkLnNldCh0cnVlKTtcbiAgICAgICAgdGhpcy50b2FzdC5zaG93KHtcbiAgICAgICAgICBtZXNzYWdlOiB0aGlzLnR0KCdlcnJvckdlbmVyaWMnKSxcbiAgICAgICAgICBkdXJhdGlvbjogMzAwMCxcbiAgICAgICAgICBjb2xvcjogJ2RhcmsnLFxuICAgICAgICAgIHBvc2l0aW9uOiAndG9wJyxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBgZW5hYmxlKClgIG5vIGhhY2UgdGhyb3csIHBlcm8gZWwgY2FsbGJhY2sgZGUgcmVnaXN0cm8gc8OtIHB1ZWRlLlxuICAgICAgdGhpcy5fbGFzdEZhaWxlZC5zZXQodHJ1ZSk7XG4gICAgICB0aGlzLnRvYXN0LnNob3coe1xuICAgICAgICBtZXNzYWdlOiB0aGlzLnR0KCdlcnJvckdlbmVyaWMnKSxcbiAgICAgICAgZHVyYXRpb246IDMwMDAsXG4gICAgICAgIGNvbG9yOiAnZGFyaycsXG4gICAgICAgIHBvc2l0aW9uOiAndG9wJyxcbiAgICAgIH0pO1xuICAgIH0gZmluYWxseSB7XG4gICAgICAvLyDDmm5pY28gcmVmcmVzaCBmaW5hbDogcmUtYWxpbmVhIGVsIHRvZ2dsZSBVTkEgc29sYSB2ZXogY29uIGVsIGVzdGFkbyByZWFsLlxuICAgICAgYXdhaXQgdGhpcy5yZWZyZXNoQnJvd3NlclN0YXRlKCk7XG4gICAgICB0aGlzLl9idXN5LnNldChudWxsKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBvbkRpc2FibGUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5fYnVzeS5zZXQoJ2Rpc2FibGluZycpO1xuICAgIHRoaXMuX2xhc3RGYWlsZWQuc2V0KGZhbHNlKTtcblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLmF1dGguZGlzYWJsZU5vdGlmaWNhdGlvbnMoKTtcbiAgICAgIGlmICh0aGlzLnByZWZzLm5vdGlmaWNhdGlvbnNNYXN0ZXIoKSkge1xuICAgICAgICBhd2FpdCB0aGlzLnByZWZzLnNldE5vdGlmaWNhdGlvbnNNYXN0ZXIoZmFsc2UpO1xuICAgICAgfVxuICAgICAgdGhpcy50b2FzdC5zaG93KHtcbiAgICAgICAgbWVzc2FnZTogdGhpcy50dCgnZGlzYWJsZVN1Y2Nlc3MnKSxcbiAgICAgICAgZHVyYXRpb246IDIwMDAsXG4gICAgICAgIGNvbG9yOiAnZGFyaycsXG4gICAgICAgIHBvc2l0aW9uOiAndG9wJyxcbiAgICAgIH0pO1xuICAgICAgdGhpcy5yZXNvbHZlZENvbmZpZygpLm9uUHVzaERpc2FibGVkPy4oKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHRoaXMuX2xhc3RGYWlsZWQuc2V0KHRydWUpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBhd2FpdCB0aGlzLnJlZnJlc2hCcm93c2VyU3RhdGUoKTtcbiAgICAgIHRoaXMuX2J1c3kuc2V0KG51bGwpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBSZWludGVudGFyIGxhIHNlY3VlbmNpYSBjb21wbGV0YSBkZSBhY3RpdmFjacOzbiwgc2luIGltcG9ydGFyIGVsIGVzdGFkbyBhY3R1YWwuICovXG4gIGFzeW5jIG9uUmV0cnkoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5fbGFzdEZhaWxlZC5zZXQoZmFsc2UpO1xuICAgIGF3YWl0IHRoaXMub25FbmFibGUoKTtcbiAgfVxuXG4gIHRvZ2dsZURldGFpbHMoKTogdm9pZCB7XG4gICAgdGhpcy5zaG93RGV0YWlscy51cGRhdGUodiA9PiAhdik7XG4gIH1cblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gUHJpdmFkb3NcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgcHJpdmF0ZSBhc3luYyByZWZyZXNoQnJvd3NlclN0YXRlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuaXNTdXBwb3J0ZWQuc2V0KGF3YWl0IHRoaXMubWVzc2FnaW5nLmlzU3VwcG9ydGVkKCkpO1xuICAgIHRoaXMucGVybWlzc2lvbi5zZXQodGhpcy5hdXRoLmdldE5vdGlmaWNhdGlvblBlcm1pc3Npb25TdGF0ZSgpKTtcbiAgICB0aGlzLmN1cnJlbnRUb2tlbi5zZXQodGhpcy5tZXNzYWdpbmcuY3VycmVudFRva2VuID8/IG51bGwpO1xuICAgIHZvaWQgdGhpcy5yZXBhaXJUb2tlbklmTmVlZGVkKCk7XG4gIH1cblxuICAvKipcbiAgICogUmVwYXJhIGVsIHRva2VuIEZDTSBlbiBiYWNrZ3JvdW5kLlxuICAgKlxuICAgKiBTaSBlbCB1c3VhcmlvIHRpZW5lIHB1c2ggYWN0aXZvIChgbWFzdGVyICYmIGdyYW50ZWRgKSBwZXJvIG5vIGhheSB0b2tlbiBlblxuICAgKiBtZW1vcmlhIOKAlCBjYXNvIHTDrXBpY28gdHJhcyB1biBjb2xkIHN0YXJ0IGRlIGxhIFBXQSDigJQgcmUtb2J0ZW5lbW9zIGVsIHRva2VuXG4gICAqIHkgcmUtcmVnaXN0cmFtb3MgZWwgZGV2aWNlIHNpbiB0b2NhciBlbCB0b2dnbGUgbmkgbW9zdHJhciB1biBlcnJvclxuICAgKiBhbGFybWlzdGEuIEVsIHRva2VuIGVzIHVuIGRldGFsbGUgZGUgaW1wbGVtZW50YWNpw7NuIHJlcGFyYWJsZSwgbm8gcGFydGUgZGVsXG4gICAqIGVzdGFkbyBkZSBVSSAodmVyIGBpc0VuYWJsZWRgKS5cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgcmVwYWlyVG9rZW5JZk5lZWRlZCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5fYnVzeSgpICE9PSBudWxsKSByZXR1cm47XG4gICAgaWYgKHRoaXMuX3JlcGFpcmluZ1Rva2VuKSByZXR1cm47XG4gICAgaWYgKCF0aGlzLmlzRW5hYmxlZCgpKSByZXR1cm47XG4gICAgaWYgKHRoaXMuY3VycmVudFRva2VuKCkpIHJldHVybjtcblxuICAgIHRoaXMuX3JlcGFpcmluZ1Rva2VuID0gdHJ1ZTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgdG9rZW4gPSBhd2FpdCB0aGlzLm1lc3NhZ2luZy5nZXRUb2tlbigpO1xuICAgICAgaWYgKHRva2VuKSB7XG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLnNldCh0b2tlbik7XG4gICAgICAgIGF3YWl0IHRoaXMuYXV0aC5yZWdpc3RlckRldmljZSh0b2tlbik7XG4gICAgICB9XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBSZXBhcmFjacOzbiBiZXN0LWVmZm9ydDogbm8gZGVncmFkYW1vcyBlbCB0b2dnbGUgbmkgbW9zdHJhbW9zIGVycm9yLlxuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLl9yZXBhaXJpbmdUb2tlbiA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBpT1MgYnJvd3NlciBzaW4gZXN0YXIgaW5zdGFsYWRvIGNvbW8gUFdBIOKAlCBwdXNoIHdlYiBubyBkaXNwb25pYmxlLlxuICAgKiBBcGxpY2EgYSBTYWZhcmkgeSBhIEVkZ2UvQ2hyb21lL0ZpcmVmb3ggZW4gaU9TICh0b2RvcyBXZWJLaXQgcG9yIG1hbmRhdG8gQXBwbGUpLlxuICAgKi9cbiAgcHJpdmF0ZSBkZXRlY3ROZWVkc0lPU0luc3RhbGwoKTogYm9vbGVhbiB7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnIHx8IHR5cGVvZiBuYXZpZ2F0b3IgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IHVhID0gbmF2aWdhdG9yLnVzZXJBZ2VudCB8fCAnJztcbiAgICBjb25zdCBpc0lPUyA9IC9pUGFkfGlQaG9uZXxpUG9kLy50ZXN0KHVhKTtcbiAgICBpZiAoIWlzSU9TKSByZXR1cm4gZmFsc2U7XG4gICAgY29uc3QgaXNTdGFuZGFsb25lID1cbiAgICAgIHdpbmRvdy5tYXRjaE1lZGlhPy4oJyhkaXNwbGF5LW1vZGU6IHN0YW5kYWxvbmUpJykubWF0Y2hlcyB8fFxuICAgICAgKG5hdmlnYXRvciBhcyB1bmtub3duIGFzIHsgc3RhbmRhbG9uZT86IGJvb2xlYW4gfSkuc3RhbmRhbG9uZSA9PT0gdHJ1ZTtcbiAgICByZXR1cm4gIWlzU3RhbmRhbG9uZTtcbiAgfVxuXG4gIHByb3RlY3RlZCB0dChrZXk6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuaTE4bi50KGtleSwgdGhpcy5ucyk7XG4gIH1cbn1cbiJdfQ==
665
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90aWZpY2F0aW9uLXByZWZlcmVuY2VzLXZpZXcuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL29yZ2FuaXNtcy9ub3RpZmljYXRpb24tcHJlZmVyZW5jZXMtdmlldy9ub3RpZmljYXRpb24tcHJlZmVyZW5jZXMtdmlldy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN0RyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ3BDLE9BQU8sRUFDTCxrQkFBa0IsRUFDbEIsa0JBQWtCLEVBQ2xCLGdCQUFnQixFQUNoQixrQkFBa0IsRUFDbEIsdUJBQXVCLEVBQ3ZCLG9CQUFvQixFQUNwQixjQUFjLEdBQ2YsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4QixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDdEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDekUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ2hFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNuRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxxREFBcUQsQ0FBQztBQUUzRixPQUFPLEVBQWtCLGVBQWUsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUU5RCxPQUFPLEVBQUUs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LGtCQUFrQixDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUMxQyxJQUFJLENBQUMsS0FBSztZQUFFLE9BQU8sS0FBSyxDQUFDO1FBQ3pCLE1BQU0sWUFBWSxHQUNoQixNQUFNLENBQUMsVUFBVSxFQUFFLENBQUMsNEJBQTRCLENBQUMsQ0FBQyxPQUFPO1lBQ3hELFNBQWlELENBQUMsVUFBVSxLQUFLLElBQUksQ0FBQztRQUN6RSxPQUFPLENBQUMsWUFBWSxDQUFDO0lBQ3ZCLENBQUM7SUFFUyxFQUFFLENBQUMsR0FBVztRQUN0QixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDbkMsQ0FBQzsrR0EzWlUsb0NBQW9DO21HQUFwQyxvQ0FBb0MsMkhBalFyQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FpSFQsNHFFQWxIUyxPQUFPLDJKQUFFLG9CQUFvQiwwRkFBRSxlQUFlLDBHQUFFLGdCQUFnQiwyRUFBRSxjQUFjLHlFQUFFLGFBQWE7OzRGQWtROUYsb0NBQW9DO2tCQXJRaEQsU0FBUzsrQkFDRSxtQ0FBbUMsY0FDakMsSUFBSSxXQUNQLENBQUMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLGVBQWUsRUFBRSxnQkFBZ0IsRUFBRSxjQUFjLEVBQUUsYUFBYSxDQUFDLFlBQ2hHOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWlIVDt3REFrS1EsTUFBTTtzQkFBZCxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBjb21wdXRlZCwgZWZmZWN0LCBpbmplY3QsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IElvbkljb24gfSBmcm9tICdAaW9uaWMvYW5ndWxhci9zdGFuZGFsb25lJztcbmltcG9ydCB7IGFkZEljb25zIH0gZnJvbSAnaW9uaWNvbnMnO1xuaW1wb3J0IHtcbiAgYWxlcnRDaXJjbGVPdXRsaW5lLFxuICBjaGV2cm9uRG93bk91dGxpbmUsXG4gIGNoZXZyb25VcE91dGxpbmUsXG4gIGNsb3NlQ2lyY2xlT3V0bGluZSxcbiAgbm90aWZpY2F0aW9uc09mZk91dGxpbmUsXG4gIG5vdGlmaWNhdGlvbnNPdXRsaW5lLFxuICByZWZyZXNoT3V0bGluZSxcbn0gZnJvbSAnaW9uaWNvbnMvaWNvbnMnO1xuXG5pbXBvcnQgeyBCdXR0b25Db21wb25lbnQgfSBmcm9tICcuLi8uLi9hdG9tcy9idXR0b24vYnV0dG9uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEaXNwbGF5Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vYXRvbXMvZGlzcGxheS9kaXNwbGF5LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUZXh0Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vYXRvbXMvdGV4dC90ZXh0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUaXRsZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2F0b21zL3RpdGxlL3RpdGxlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUb2dnbGVJbnB1dENvbXBvbmVudCB9IGZyb20gJy4uLy4uL21vbGVjdWxlcy90b2dnbGUtaW5wdXQvdG9nZ2xlLWlucHV0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUb2dnbGVJbnB1dE1ldGFkYXRhIH0gZnJvbSAnLi4vLi4vbW9sZWN1bGVzL3RvZ2dsZS1pbnB1dC90eXBlcyc7XG5pbXBvcnQgeyBCdXR0b25NZXRhZGF0YSwgQ29tcG9uZW50U3RhdGVzIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuXG5pbXBvcnQgeyBBdXRoU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2F1dGgvYXV0aC5zZXJ2aWNlJztcbmltcG9ydCB7IE5vdGlmaWNhdGlvblBlcm1pc3Npb25TdGF0ZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2F1dGgvdHlwZXMnO1xuaW1wb3J0IHsgRW5hYmxlUHVzaFJlc3VsdCB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2ZpcmViYXNlL3R5cGVzJztcbmltcG9ydCB7IE1lc3NhZ2luZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9maXJlYmFzZS9tZXNzYWdpbmcuc2VydmljZSc7XG5pbXBvcnQgeyBJMThuU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2kxOG4nO1xuaW1wb3J0IHsgTmF2aWdhdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9uYXZpZ2F0aW9uL25hdmlnYXRpb24uc2VydmljZSc7XG5pbXBvcnQgeyBQYWdlUmVmcmVzaFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9wYWdlLXJlZnJlc2gvcGFnZS1yZWZyZXNoLnNlcnZpY2UnO1xuaW1wb3J0IHsgUHJlZmVyZW5jZXNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvcHJlZmVyZW5jZXMvcHJlZmVyZW5jZXMuc2VydmljZSc7XG5pbXBvcnQgeyBUb2FzdFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy90b2FzdC5zZXJ2aWNlJztcblxuaW1wb3J0IHsgTm90aWZpY2F0aW9uUHJlZmVyZW5jZXNWaWV3Q29uZmlnIH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyBOT1RJRklDQVRJT05fUFJFRkVSRU5DRVNfVklFV19JMThOIH0gZnJvbSAnLi9ub3RpZmljYXRpb24tcHJlZmVyZW5jZXMtdmlldy5pMThuJztcblxuYWRkSWNvbnMoe1xuICBhbGVydENpcmNsZU91dGxpbmUsXG4gIGNoZXZyb25Eb3duT3V0bGluZSxcbiAgY2hldnJvblVwT3V0bGluZSxcbiAgY2xvc2VDaXJjbGVPdXRsaW5lLFxuICBub3RpZmljYXRpb25zT2ZmT3V0bGluZSxcbiAgbm90aWZpY2F0aW9uc091dGxpbmUsXG4gIHJlZnJlc2hPdXRsaW5lLFxufSk7XG5cbmNvbnN0IERFRkFVTFRfTkFNRVNQQUNFID0gJ1NldHRpbmdzLk5vdGlmaWNhdGlvbnMnO1xuXG4vKipcbiAqIEVzdGFkb3MgZGUgbGEgdmlzdGEgZGUgcHJlZmVyZW5jaWFzIHB1c2g6XG4gKiAgLSBgaWRsZWA6ICAgICAgICAgIHRvZ2dsZSBvZmYsIHNpbiBvcGVyYWNpw7NuIGVuIGN1cnNvLCBzaW4gZXJyb3Jlc1xuICogIC0gYGVuYWJsaW5nYDogICAgICBzZWN1ZW5jaWEgZGUgYWN0aXZhY2nDs24gZW4gY3Vyc28gKHRvZ2dsZSBzcGlubmVyKVxuICogIC0gYGVuYWJsZWRgOiAgICAgICB0b2RvIE9LIChtYXN0ZXI9dHJ1ZSArIHBlcm1pc3Npb249Z3JhbnRlZCArIHRva2VuIHJlZ2lzdHJhZG8pXG4gKiAgLSBgZGlzYWJsaW5nYDogICAgIGRlc2FjdGl2YWNpw7NuIGVuIGN1cnNvXG4gKiAgLSBgZXJyb3JgOiAgICAgICAgIMO6bHRpbW8gaW50ZW50byBmYWxsw7Mg4oaSIG1lbnNhamUgKyBib3TDs24gXCJSZWludGVudGFyXCJcbiAqICAtIGBibG9ja2VkYDogICAgICAgbmF2ZWdhZG9yIGRlbmVnw7MgcGVybWlzb3Mg4oaSIG1lbnNhamUgKyBjw7NtbyBhcnJlZ2xhclxuICogIC0gYHVuc3VwcG9ydGVkYDogICBuYXZlZ2Fkb3Igbm8gc29wb3J0YSBGQ00g4oaSIG1lbnNhamVcbiAqICAtIGBuZWVkcy1pbnN0YWxsYDogaU9TIHNpbiBzdGFuZGFsb25lIOKGkiBpbnN0cnVjY2lvbmVzIGRlIGluc3RhbGFjacOzbiBQV0FcbiAqL1xudHlwZSBVaVN0YXRlID0gJ2lkbGUnIHwgJ2VuYWJsaW5nJyB8ICdlbmFibGVkJyB8ICdkaXNhYmxpbmcnIHwgJ2Vycm9yJyB8ICdibG9ja2VkJyB8ICd1bnN1cHBvcnRlZCcgfCAnbmVlZHMtaW5zdGFsbCc7XG5cbi8qKlxuICogYHZhbC1ub3RpZmljYXRpb24tcHJlZmVyZW5jZXMtdmlld2Ag4oCUICoqcHJlZmVyZW5jaWFzIGRlIG5vdGlmaWNhY2lvbmVzIHB1c2gqKlxuICogKEZDTSkgZnVsbC1mZWF0dXJlIGF1dG9jb250ZW5pZGEgKG9yZ2FuaXNtKS4gUHJvbW92aWRhIGRlc2RlIGBzaG93Y2FzZWAgYmFqbyBlbFxuICogcHJvY2VzbyBkZSBBRFItMDIxLlxuICpcbiAqIFNlcGFyYWRhIGRlIGB2YWwtbm90aWZpY2F0aW9ucy12aWV3YCAoZWwgaW5ib3ggLyBmZWVkKS4gQXF1w60gZWwgdXNlciAqKmFjdGl2YSBvXG4gKiBkZXNhY3RpdmEqKiBsYXMgbm90aWZpY2FjaW9uZXMgcHVzaCBlbiBlc3RlIGRpc3Bvc2l0aXZvLlxuICpcbiAqIFVYIHNpbXBsaWZpY2FkbzogVU4gc29sbyB0b2dnbGUgcXVlIGVqZWN1dGEgdG9kYSBsYSBzZWN1ZW5jaWEgKHBlZGlyIHBlcm1pc28g4oaSXG4gKiBTVyByZWFkeSDihpIgZ2V0VG9rZW4g4oaSIHJlZ2lzdHJhciBlbiBiYWNrZW5kIOKGkiBzZXQgbWFzdGVyIHByZWYpIHbDrWFcbiAqIGBNZXNzYWdpbmdTZXJ2aWNlLmVuYWJsZSgpYC4gRWwgcmVnaXN0cm8gZGVsIGRldmljZSBlbiBlbCBiYWNrZW5kIHZhIGNvbW9cbiAqIGNhbGxiYWNrIChsYSBsaWIgbm8gZGVwZW5kZSBkZSBgQXV0aFNlcnZpY2VgIHBhcmEgZXZpdGFyIGNpY2xvcykuIE1lbnNhamVzXG4gKiBjb250ZXh0dWFsZXMgeSBib3TDs24gXCJSZWludGVudGFyXCIgYXBhcmVjZW4gc29sbyBjdWFuZG8gYXBsaWNhbi5cbiAqXG4gKiBOTyByZW5kZXJpemEgaW9uLWNvbnRlbnQg4oCUIHZpdmUgZGVudHJvIGRlIHZhbC1wYWdlLXdyYXBwZXIuIGBBY3RpdmF0ZWRSb3V0ZWAgc2VcbiAqIGlueWVjdGEgYHsgb3B0aW9uYWw6IHRydWUgfWAg4oaSIGZ1bmNpb25hIHNpbiByb3V0ZXIgKGVtYmViaWRhIC8gU3Rvcnlib29rKS5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndmFsLW5vdGlmaWNhdGlvbi1wcmVmZXJlbmNlcy12aWV3JyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0lvbkljb24sIFRvZ2dsZUlucHV0Q29tcG9uZW50LCBCdXR0b25Db21wb25lbnQsIERpc3BsYXlDb21wb25lbnQsIFRpdGxlQ29tcG9uZW50LCBUZXh0Q29tcG9uZW50XSxcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZGl2IGNsYXNzPVwicGFnZVwiPlxuICAgICAgPGhlYWRlciBjbGFzcz1cInBhZ2UtaGVhZGVyXCI+XG4gICAgICAgIDx2YWwtZGlzcGxheSBbcHJvcHNdPVwieyBzaXplOiAnc21hbGwnLCBjb2xvcjogJ2RhcmsnLCBjb250ZW50OiBwYWdlVGl0bGUoKSB9XCIgLz5cbiAgICAgICAgPHZhbC10aXRsZVxuICAgICAgICAgIFtwcm9wc109XCJ7XG4gICAgICAgICAgICBzaXplOiAnbGFyZ2UnLFxuICAgICAgICAgICAgY29sb3I6ICdkYXJrJyxcbiAgICAgICAgICAgIGJvbGQ6IGZhbHNlLFxuICAgICAgICAgICAgY29udGVudDogcGFnZURlc2NyaXB0aW9uKCksXG4gICAgICAgICAgfVwiXG4gICAgICAgIC8+XG4gICAgICA8L2hlYWRlcj5cblxuICAgICAgQGlmIChzdGF0ZSgpID09PSAnbmVlZHMtaW5zdGFsbCcpIHtcbiAgICAgICAgPHNlY3Rpb24gY2xhc3M9XCJzZXR0aW5ncy1zZWN0aW9uXCI+XG4gICAgICAgICAgPHZhbC10aXRsZVxuICAgICAgICAgICAgW3Byb3BzXT1cIntcbiAgICAgICAgICAgICAgc2l6ZTogJ21lZGl1bScsXG4gICAgICAgICAgICAgIGNvbG9yOiAnZGFyaycsXG4gICAgICAgICAgICAgIGJvbGQ6IHRydWUsXG4gICAgICAgICAgICAgIGNvbnRlbnQ6IHR0KCdpb3NJbnN0YWxsVGl0bGUnKSxcbiAgICAgICAgICAgIH1cIlxuICAgICAgICAgIC8+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInNlY3Rpb24tYm9keVwiPlxuICAgICAgICAgICAgPHZhbC10ZXh0XG4gICAgICAgICAgICAgIFtwcm9wc109XCJ7XG4gICAgICAgICAgICAgICAgc2l6ZTogJ3NtYWxsJyxcbiAgICAgICAgICAgICAgICBjb2xvcjogJ21lZGl1bScsXG4gICAgICAgICAgICAgICAgYm9sZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgY29udGVudDogdHQoJ2lvc0luc3RhbGxIaW50JyksXG4gICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxvbCBjbGFzcz1cImluc3RhbGwtc3RlcHNcIj5cbiAgICAgICAgICAgICAgPGxpPnt7IHR0KCdpb3NJbnN0YWxsU3RlcDEnKSB9fTwvbGk+XG4gICAgICAgICAgICAgIDxsaT57eyB0dCgnaW9zSW5zdGFsbFN0ZXAyJykgfX08L2xpPlxuICAgICAgICAgICAgICA8bGk+e3sgdHQoJ2lvc0luc3RhbGxTdGVwMycpIH19PC9saT5cbiAgICAgICAgICAgICAgPGxpPnt7IHR0KCdpb3NJbnN0YWxsU3RlcDQnKSB9fTwvbGk+XG4gICAgICAgICAgICA8L29sPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L3NlY3Rpb24+XG4gICAgICB9XG5cbiAgICAgIDxzZWN0aW9uIGNsYXNzPVwic2V0dGluZ3Mtc2VjdGlvblwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwibm90aWYtcm93XCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm5vdGlmLXJvd19faWNvblwiPlxuICAgICAgICAgICAgPGlvbi1pY29uIG5hbWU9XCJub3RpZmljYXRpb25zLW91dGxpbmVcIiBhcmlhLWhpZGRlbj1cInRydWVcIiAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJub3RpZi1yb3dfX2JvZHlcIj5cbiAgICAgICAgICAgIDx2YWwtdGl0bGVcbiAgICAgICAgICAgICAgW3Byb3BzXT1cIntcbiAgICAgICAgICAgICAgICBzaXplOiAnbWVkaXVtJyxcbiAgICAgICAgICAgICAgICBjb2xvcjogJ2RhcmsnLFxuICAgICAgICAgICAgICAgIGJvbGQ6IHRydWUsXG4gICAgICAgICAgICAgICAgY29udGVudDogdHQoJ3NpbXBsZVRpdGxlJyksXG4gICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDx2YWwtdGV4dFxuICAgICAgICAgICAgICBbcHJvcHNdPVwie1xuICAgICAgICAgICAgICAgIHNpemU6ICdzbWFsbCcsXG4gICAgICAgICAgICAgICAgY29sb3I6ICdtZWRpdW0nLFxuICAgICAgICAgICAgICAgIGJvbGQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGNvbnRlbnQ6IHR0KCdzaW1wbGVEZXNjcmlwdGlvbicpLFxuICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICBAaWYgKGJ1c3lMYWJlbCgpOyBhcyBsYWJlbCkge1xuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm5vdGlmLXJvd19fYnVzeVwiPnt7IGxhYmVsIH19PC9zcGFuPlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJub3RpZi1yb3dfX2NvbnRyb2xcIj5cbiAgICAgICAgICAgIDx2YWwtdG9nZ2xlLWlucHV0IFtwcm9wc109XCJ0b2dnbGVQcm9wcygpXCIgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgQGlmIChjb250ZXh0TWVzc2FnZSgpOyBhcyBtc2cpIHtcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWxlcnRcIiBbY2xhc3NdPVwiJ2FsZXJ0LS0nICsgYWxlcnRWYXJpYW50KClcIj5cbiAgICAgICAgICAgIDxpb24taWNvbiBbbmFtZV09XCJhbGVydEljb24oKVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIC8+XG4gICAgICAgICAgICA8c3Bhbj57eyBtc2cgfX08L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cblxuICAgICAgICBAaWYgKHN0YXRlKCkgPT09ICdlcnJvcicpIHtcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93LWFjdGlvbnNcIj5cbiAgICAgICAgICAgIDx2YWwtYnV0dG9uIFtwcm9wc109XCJyZXRyeUJ1dHRvblByb3BzKClcIiAoY2xpY2spPVwib25SZXRyeSgpXCIgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgPC9zZWN0aW9uPlxuXG4gICAgICBAaWYgKHJlc29sdmVkQ29uZmlnKCkuc2hvd0RldGFpbHMgJiYgc3RhdGUoKSAhPT0gJ25lZWRzLWluc3RhbGwnICYmIHN0YXRlKCkgIT09ICd1bnN1cHBvcnRlZCcpIHtcbiAgICAgICAgPHNlY3Rpb24gY2xhc3M9XCJzZXR0aW5ncy1zZWN0aW9uXCI+XG4gICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImRldGFpbHMtdG9nZ2xlXCIgdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJ0b2dnbGVEZXRhaWxzKClcIj5cbiAgICAgICAgICAgIDxzcGFuPnt7IHNob3dEZXRhaWxzKCkgPyB0dCgnZGV0YWlsc0hpZGUnKSA6IHR0KCdkZXRhaWxzU2hvdycpIH19PC9zcGFuPlxuICAgICAgICAgICAgPGlvbi1pY29uIFtuYW1lXT1cInNob3dEZXRhaWxzKCkgPyAnY2hldnJvbi11cC1vdXRsaW5lJyA6ICdjaGV2cm9uLWRvd24tb3V0bGluZSdcIiBhcmlhLWhpZGRlbj1cInRydWVcIiAvPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIEBpZiAoc2hvd0RldGFpbHMoKSkge1xuICAgICAgICAgICAgPGRsIGNsYXNzPVwiZGV0YWlsc1wiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGV0YWlsc19fcm93XCI+XG4gICAgICAgICAgICAgICAgPGR0Pnt7IHR0KCdkZXRhaWxzVG9rZW4nKSB9fTwvZHQ+XG4gICAgICAgICAgICAgICAgPGRkPnt7IHRva2VuUHJldmlldygpID8/IHR0KCdkZXRhaWxzTm9uZScpIH19PC9kZD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkZXRhaWxzX19yb3dcIj5cbiAgICAgICAgICAgICAgICA8ZHQ+e3sgdHQoJ2RpYWdub3N0aWNzUGVybWlzc2lvbicpIH19PC9kdD5cbiAgICAgICAgICAgICAgICA8ZGQ+e3sgcGVybWlzc2lvbigpIH19PC9kZD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkZXRhaWxzX19yb3dcIj5cbiAgICAgICAgICAgICAgICA8ZHQ+e3sgdHQoJ2RpYWdub3N0aWNzU3VwcG9ydGVkJykgfX08L2R0PlxuICAgICAgICAgICAgICAgIDxkZD57eyBpc1N1cHBvcnRlZCgpID8gJ+KckycgOiAn4pyXJyB9fTwvZGQ+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kbD5cbiAgICAgICAgICB9XG4gICAgICAgIDwvc2VjdGlvbj5cbiAgICAgIH1cbiAgICA8L2Rpdj5cbiAgYCxcbiAgc3R5bGVzOiBbXG4gICAgYFxuICAgICAgLnBhZ2Uge1xuICAgICAgICBwYWRkaW5nOiAxNnB4IDA7XG4gICAgICAgIG1heC13aWR0aDogNzIwcHg7XG4gICAgICAgIG1hcmdpbjogMCBhdXRvO1xuICAgICAgfVxuICAgICAgLnBhZ2UtaGVhZGVyIHtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogOHB4O1xuICAgICAgfVxuICAgICAgLnNldHRpbmdzLXNlY3Rpb24ge1xuICAgICAgICBwYWRkaW5nOiAxNnB4IDA7XG4gICAgICB9XG4gICAgICAuc2V0dGluZ3Mtc2VjdGlvbiArIC5zZXR0aW5ncy1zZWN0aW9uIHtcbiAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIHZhcigtLXZhbC1ib3JkZXItY29sb3IsIHJnYmEoMCwgMCwgMCwgMC4wOCkpO1xuICAgICAgfVxuICAgICAgLnNlY3Rpb24tYm9keSB7XG4gICAgICAgIG1hcmdpbi10b3A6IDE2cHg7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgIGdhcDogMTBweDtcbiAgICAgIH1cbiAgICAgIC5yb3ctYWN0aW9ucyB7XG4gICAgICAgIG1hcmdpbi10b3A6IDEycHg7XG4gICAgICB9XG5cbiAgICAgIC5ub3RpZi1yb3cge1xuICAgICAgICBkaXNwbGF5OiBncmlkO1xuICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDQ0cHggMWZyIGF1dG87XG4gICAgICAgIGdhcDogMTZweDtcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgIH1cbiAgICAgIC5ub3RpZi1yb3dfX2ljb24ge1xuICAgICAgICB3aWR0aDogNDRweDtcbiAgICAgICAgaGVpZ2h0OiA0NHB4O1xuICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7XG4gICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWlvbi1jb2xvci1saWdodCwgcmdiYSgwLCAwLCAwLCAwLjA2KSk7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgICAgfVxuICAgICAgLm5vdGlmLXJvd19faWNvbiBpb24taWNvbiB7XG4gICAgICAgIGZvbnQtc2l6ZTogMjJweDtcbiAgICAgICAgY29sb3I6IHZhcigtLWlvbi1jb2xvci1kYXJrLCAjMWExYTFhKTtcbiAgICAgIH1cbiAgICAgIC5ub3RpZi1yb3dfX2JvZHkge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICBnYXA6IDRweDtcbiAgICAgICAgbWluLXdpZHRoOiAwO1xuICAgICAgfVxuICAgICAgLm5vdGlmLXJvd19fYnVzeSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMTJweDtcbiAgICAgICAgY29sb3I6IHZhcigtLWlvbi1jb2xvci1tZWRpdW0sICM5Mjk0OWMpO1xuICAgICAgICBmb250LXN0eWxlOiBpdGFsaWM7XG4gICAgICAgIG1hcmdpbi10b3A6IDRweDtcbiAgICAgIH1cbiAgICAgIC5ub3RpZi1yb3dfX2NvbnRyb2wge1xuICAgICAgICBmbGV4LXNocmluazogMDtcbiAgICAgIH1cblxuICAgICAgLmFsZXJ0IHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZ2FwOiAxMHB4O1xuICAgICAgICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcbiAgICAgICAgbWFyZ2luLXRvcDogMTJweDtcbiAgICAgICAgcGFkZGluZzogMTJweCAxNHB4O1xuICAgICAgICBib3JkZXItcmFkaXVzOiAxMHB4O1xuICAgICAgICBmb250LXNpemU6IDEzcHg7XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjQ1O1xuICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1pb24tY29sb3ItbGlnaHQsIHJnYmEoMCwgMCwgMCwgMC4wNCkpO1xuICAgICAgICBjb2xvcjogdmFyKC0taW9uLWNvbG9yLWRhcmssICMxYTFhMWEpO1xuICAgICAgfVxuICAgICAgLmFsZXJ0IGlvbi1pY29uIHtcbiAgICAgICAgZm9udC1zaXplOiAxOHB4O1xuICAgICAgICBmbGV4LXNocmluazogMDtcbiAgICAgICAgbWFyZ2luLXRvcDogMXB4O1xuICAgICAgfVxuICAgICAgLmFsZXJ0LS13YXJuaW5nIGlvbi1pY29uIHtcbiAgICAgICAgY29sb3I6IHZhcigtLWlvbi1jb2xvci13YXJuaW5nLXNoYWRlLCAjYzc5ZTA4KTtcbiAgICAgIH1cbiAgICAgIC5hbGVydC0tZGFuZ2VyIGlvbi1pY29uIHtcbiAgICAgICAgY29sb3I6IHZhcigtLWlvbi1jb2xvci1kYW5nZXItc2hhZGUsICNjZjNjNGYpO1xuICAgICAgfVxuICAgICAgLmFsZXJ0LS1pbmZvIGlvbi1pY29uIHtcbiAgICAgICAgY29sb3I6IHZhcigtLWlvbi1jb2xvci1tZWRpdW0sICM2YjZiNmIpO1xuICAgICAgfVxuXG4gICAgICAuaW5zdGFsbC1zdGVwcyB7XG4gICAgICAgIG1hcmdpbjogMDtcbiAgICAgICAgcGFkZGluZy1sZWZ0OiAyMHB4O1xuICAgICAgICBmb250LXNpemU6IDEzcHg7XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjY7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1pb24tY29sb3ItZGFyaywgIzFhMWExYSk7XG4gICAgICB9XG4gICAgICAuaW5zdGFsbC1zdGVwcyBsaSArIGxpIHtcbiAgICAgICAgbWFyZ2luLXRvcDogNHB4O1xuICAgICAgfVxuXG4gICAgICAuZGV0YWlscy10b2dnbGUge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICBnYXA6IDZweDtcbiAgICAgICAgYmFja2dyb3VuZDogbm9uZTtcbiAgICAgICAgYm9yZGVyOiAwO1xuICAgICAgICBwYWRkaW5nOiAwO1xuICAgICAgICBmb250LXNpemU6IDEzcHg7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1pb24tY29sb3ItbWVkaXVtLCAjNmI2YjZiKTtcbiAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgfVxuICAgICAgLmRldGFpbHMtdG9nZ2xlIGlvbi1pY29uIHtcbiAgICAgICAgZm9udC1zaXplOiAxNHB4O1xuICAgICAgfVxuICAgICAgLmRldGFpbHMge1xuICAgICAgICBtYXJnaW46IDEycHggMCAwO1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICBnYXA6IDZweDtcbiAgICAgIH1cbiAgICAgIC5kZXRhaWxzX19yb3cge1xuICAgICAgICBkaXNwbGF5OiBncmlkO1xuICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDE0MHB4IDFmcjtcbiAgICAgICAgZ2FwOiAxMnB4O1xuICAgICAgICBmb250LXNpemU6IDEycHg7XG4gICAgICAgIGFsaWduLWl0ZW1zOiBiYXNlbGluZTtcbiAgICAgIH1cbiAgICAgIC5kZXRhaWxzX19yb3cgZHQge1xuICAgICAgICBtYXJnaW46IDA7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1pb24tY29sb3ItbWVkaXVtLCAjNmI2YjZiKTtcbiAgICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IDAuNHB4O1xuICAgICAgICBmb250LXdlaWdodDogNTAwO1xuICAgICAgfVxuICAgICAgLmRldGFpbHNfX3JvdyBkZCB7XG4gICAgICAgIG1hcmdpbjogMDtcbiAgICAgICAgY29sb3I6IHZhcigtLWlvbi1jb2xvci1kYXJrLCAjMWExYTFhKTtcbiAgICAgICAgZm9udC1mYW1pbHk6IHVpLW1vbm9zcGFjZSwgU0ZNb25vLVJlZ3VsYXIsIG1vbm9zcGFjZTtcbiAgICAgICAgZm9udC1zaXplOiAxMXB4O1xuICAgICAgICB3b3JkLWJyZWFrOiBicmVhay1hbGw7XG4gICAgICB9XG4gICAgYCxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgTm90aWZpY2F0aW9uUHJlZmVyZW5jZXNWaWV3Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBwcml2YXRlIG5hdiA9IGluamVjdChOYXZpZ2F0aW9uU2VydmljZSk7XG4gIHByaXZhdGUgaTE4biA9IGluamVjdChJMThuU2VydmljZSk7XG4gIHByaXZhdGUgdG9hc3QgPSBpbmplY3QoVG9hc3RTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBhdXRoID0gaW5qZWN0KEF1dGhTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBtZXNzYWdpbmcgPSBpbmplY3QoTWVzc2FnaW5nU2VydmljZSk7XG4gIHByaXZhdGUgcGFnZVJlZnJlc2ggPSBpbmplY3QoUGFnZVJlZnJlc2hTZXJ2aWNlKTtcbiAgcmVhZG9ubHkgcHJlZnMgPSBpbmplY3QoUHJlZmVyZW5jZXNTZXJ2aWNlKTtcbiAgLy8gYEFjdGl2YXRlZFJvdXRlYCBvcGNpb25hbCDihpIgbGEgdmlzdGEgZnVuY2lvbmEgZW1iZWJpZGEgLyBlbiBTdG9yeWJvb2sgc2luXG4gIC8vIHJvdXRlciAoc29sbyBsbyB1c2EgcGFyYSBsZWVyIGVsIHJvdXRlIGRhdGEgZGUgY29uZmlnIGNvbW8gZmFsbGJhY2spLlxuICBwcml2YXRlIHJvdXRlID0gaW5qZWN0KEFjdGl2YXRlZFJvdXRlLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuXG4gIC8qKlxuICAgKiBDb25maWcgdsOtYSBASW5wdXQgKG9iamVjdC1maXJzdCkuIFNpIG5vIHNlIHBhc2EsIHNlIGNhZSBhbCByb3V0ZSBkYXRhXG4gICAqIGBub3RpZmljYXRpb25QcmVmZXJlbmNlc0NvbmZpZ2AgKHBvYmxhZG8gcG9yXG4gICAqIGBwcm92aWRlVmFsdGVjaE5vdGlmaWNhdGlvblByZWZlcmVuY2VzUm91dGVzYCkuIGByZXNvbHZlZENvbmZpZ2AgbWVyZ2VhIGNvblxuICAgKiBsb3MgZGVmYXVsdHMg4oCUIGBASW5wdXRgIGdhbmEgc29icmUgcm91dGUgZGF0YS5cbiAgICovXG4gIEBJbnB1dCgpIGNvbmZpZz86IE5vdGlmaWNhdGlvblByZWZlcmVuY2VzVmlld0NvbmZpZztcblxuICByZWFkb25seSByZXNvbHZlZENvbmZpZyA9IGNvbXB1dGVkPFxuICAgIFJlcXVpcmVkPE9taXQ8Tm90aWZpY2F0aW9uUHJlZmVyZW5jZXNWaWV3Q29uZmlnLCAnb25QdXNoRW5hYmxlZCcgfCAnb25QdXNoRGlzYWJsZWQnPj4gJlxuICAgICAgUGljazxOb3RpZmljYXRpb25QcmVmZXJlbmNlc1ZpZXdDb25maWcsICdvblB1c2hFbmFibGVkJyB8ICdvblB1c2hEaXNhYmxlZCc+XG4gID4oKCkgPT4ge1xuICAgIGNvbnN0IGZyb21Sb3V0ZSA9ICh0aGlzLnJvdXRlPy5zbmFwc2hvdC5kYXRhWydub3RpZmljYXRpb25QcmVmZXJlbmNlc0NvbmZpZyddID8/XG4gICAgICB7fSkgYXMgTm90aWZpY2F0aW9uUHJlZmVyZW5jZXNWaWV3Q29uZmlnO1xuICAgIGNvbnN0IG1lcmdlZDogTm90aWZpY2F0aW9uUHJlZmVyZW5jZXNWaWV3Q29uZmlnID0geyAuLi5mcm9tUm91dGUsIC4uLih0aGlzLmNvbmZpZyA/PyB7fSkgfTtcbiAgICByZXR1cm4ge1xuICAgICAgc2hvd0RldGFpbHM6IG1lcmdlZC5zaG93RGV0YWlscyA/PyB0cnVlLFxuICAgICAgaTE4bk5hbWVzcGFjZTogbWVyZ2VkLmkxOG5OYW1lc3BhY2UgPz8gREVGQVVMVF9OQU1FU1BBQ0UsXG4gICAgICBvblB1c2hFbmFibGVkOiBtZXJnZWQub25QdXNoRW5hYmxlZCxcbiAgICAgIG9uUHVzaERpc2FibGVkOiBtZXJnZWQub25QdXNoRGlzYWJsZWQsXG4gICAgfTtcbiAgfSk7XG5cbiAgLyoqIE5hbWVzcGFjZSBpMThuIHJlc3VlbHRvIChjYXB0dXJhZG8gcGFyYSBsbGFtYWRhcyBuby1yZWFjdGl2YXMpLiAqL1xuICBwcml2YXRlIGdldCBucygpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnJlc29sdmVkQ29uZmlnKCkuaTE4bk5hbWVzcGFjZTtcbiAgfVxuXG4gIC8qKiBPcGVyYWNpw7NuIGVuIGN1cnNvIChnb2JpZXJuYSBzcGlubmVyIGRlbCB0b2dnbGUgKyBsYWJlbCBcIkFjdGl2YW5kb+KAplwiKS4gKi9cbiAgcHJpdmF0ZSByZWFkb25seSBfYnVzeSA9IHNpZ25hbDxudWxsIHwgJ2VuYWJsaW5nJyB8ICdkaXNhYmxpbmcnPihudWxsKTtcbiAgLyoqIFRydWUgc2kgZWwgw7psdGltbyBpbnRlbnRvIGZhbGzDsyDigJQgZ29iaWVybmEgZXN0YWRvIGBlcnJvcmAgKyByZXRyeSBidXR0b24uICovXG4gIHByaXZhdGUgcmVhZG9ubHkgX2xhc3RGYWlsZWQgPSBzaWduYWwoZmFsc2UpO1xuICAvKiogVHJ1ZSBtaWVudHJhcyBzZSByZS1vYnRpZW5lIGVsIHRva2VuIEZDTSBlbiBiYWNrZ3JvdW5kIChubyBhZmVjdGEgbGEgVUkpLiAqL1xuICBwcml2YXRlIF9yZXBhaXJpbmdUb2tlbiA9IGZhbHNlO1xuICAvKiogVG9nZ2xlIGRlbCBleHBhbmQgZGUgZGV0YWxsZXMgdMOpY25pY29zLiAqL1xuICByZWFkb25seSBzaG93RGV0YWlscyA9IHNpZ25hbChmYWxzZSk7XG5cbiAgcmVhZG9ubHkgcGVybWlzc2lvbiA9IHNpZ25hbDxOb3RpZmljYXRpb25QZXJtaXNzaW9uU3RhdGU+KCdkZWZhdWx0Jyk7XG4gIHJlYWRvbmx5IGlzU3VwcG9ydGVkID0gc2lnbmFsKGZhbHNlKTtcbiAgcmVhZG9ubHkgY3VycmVudFRva2VuID0gc2lnbmFsPHN0cmluZyB8IG51bGw+KG51bGwpO1xuICByZWFkb25seSBuZWVkc0lPU0luc3RhbGwgPSBzaWduYWwodGhpcy5kZXRlY3ROZWVkc0lPU0luc3RhbGwoKSk7XG5cbiAgLyoqIEZvcm1Db250cm9sIGRlbCB0b2dnbGUgKHN5bmMtZWFkbyBjb24gYGlzRW5hYmxlZGAgdmlhIGVmZmVjdCkuICovXG4gIHJlYWRvbmx5IHRvZ2dsZUNvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2w8Ym9vbGVhbj4oZmFsc2UsIHtcbiAgICBub25OdWxsYWJsZTogdHJ1ZSxcbiAgfSk7XG5cbiAgLyoqIEhhbmRsZXIgZGVsIGxpc3RlbmVyIGBmb2N1c2Ag4oCUIHJlZmVyZW5jaWEgZ3VhcmRhZGEgcGFyYSBwb2RlciByZW1vdmVybG8uICovXG4gIHByaXZhdGUgcmVhZG9ubHkgb25XaW5kb3dGb2N1cyA9ICgpID0+IHRoaXMuc2NoZWR1bGVCcm93c2VyUmVmcmVzaCgpO1xuICAvKiogVGltZXIgZGVsIGRlYm91bmNlIGRlbCByZWZyZXNoIGRpc3BhcmFkbyBwb3IgYGZvY3VzYC4gKi9cbiAgcHJpdmF0ZSBmb2N1c0RlYm91bmNlVGltZXI6IFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+IHwgbnVsbCA9IG51bGw7XG4gIC8qKiBWZW50YW5hIGRlIGRlYm91bmNlIChtcykgcGFyYSBlbCByZWZyZXNoIGRpc3BhcmFkbyBwb3IgYGZvY3VzYC4gKi9cbiAgcHJpdmF0ZSByZWFkb25seSBGT0NVU19ERUJPVU5DRV9NUyA9IDUwMDtcblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gRXN0YWRvIGRlcml2YWRvXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIHJlYWRvbmx5IHBhZ2VUaXRsZSA9IGNvbXB1dGVkKCgpID0+IHRoaXMudHQoJ3BhZ2VUaXRsZScpKTtcbiAgcmVhZG9ubHkgcGFnZURlc2NyaXB0aW9uID0gY29tcHV0ZWQoKCkgPT4gdGhpcy50dCgncGFnZURlc2NyaXB0aW9uJykpO1xuXG4gIC8qKlxuICAgKiBFc3RhZG8gZWZlY3Rpdm8gZGVsIHRvZ2dsZTogXCJlbCB1c3VhcmlvIHRpZW5lIHB1c2ggYWN0aXZvXCIuXG4gICAqXG4gICAqIFNlIGRlcml2YSBTT0xPIGRlIGxhIGRlY2lzacOzbiBkZWwgdXN1YXJpbyAoYG1hc3RlcmApIHkgZGVsIHBlcm1pc28gZGVsIFNPXG4gICAqIChgcGVybWlzc2lvbmApLiBFbCB0b2tlbiBGQ00gTk8gZm9ybWEgcGFydGUgZGVsIGVzdGFkbyBkZSBVSTogdml2ZSBlblxuICAgKiBtZW1vcmlhLCBzZSBwaWVyZGUgZW4gY2FkYSByZWNhcmdhL3N1c3BlbnNpw7NuIGRlIGxhIFBXQSB5IHByb2R1Y2lyw61hIGZsaWNrZXIuXG4gICAqIFNpIGZhbHRhIHRva2VuIGNvbiBgbWFzdGVyICYmIGdyYW50ZWRgLCBlcyB1biBkZXRhbGxlIHJlcGFyYWJsZSBlblxuICAgKiBiYWNrZ3JvdW5kICh2ZXIgYHJlcGFpclRva2VuSWZOZWVkZWRgKSwgbm8gdW4gY2FtYmlvIGRlbCB0b2dnbGUuXG4gICAqL1xuICByZWFkb25seSBpc0VuYWJsZWQgPSBjb21wdXRlZCgoKSA9PiB0aGlzLnByZWZzLm5vdGlmaWNhdGlvbnNNYXN0ZXIoKSAmJiB0aGlzLnBlcm1pc3Npb24oKSA9PT0gJ2dyYW50ZWQnKTtcblxuICByZWFkb25seSBzdGF0ZSA9IGNvbXB1dGVkPFVpU3RhdGU+KCgpID0+IHtcbiAgICBpZiAodGhpcy5uZWVkc0lPU0luc3RhbGwoKSkgcmV0dXJuICduZWVkcy1pbnN0YWxsJztcbiAgICBpZiAodGhpcy5wZXJtaXNzaW9uKCkgPT09ICd1bnN1cHBvcnRlZCcgfHwgIXRoaXMuaXNTdXBwb3J0ZWQoKSkge1xuICAgICAgLy8gaU9TIHN0YW5kYWxvbmUgYcO6biBwdWVkZSBkYXIgaXNTdXBwb3J0ZWQgZmFsc2UgdGVtcHJhbm8gYW50ZXMgZGUgaW5pdCDigJRcbiAgICAgIC8vIHNvbG8gYmxvcXVlYW1vcyBzaSBlbCBicm93c2VyIGV4cGzDrWNpdGFtZW50ZSBubyBzb3BvcnRhIEFQSXMuXG4gICAgICBpZiAodGhpcy5wZXJtaXNzaW9uKCkgPT09ICd1bnN1cHBvcnRlZCcpIHJldHVybiAndW5zdXBwb3J0ZWQnO1xuICAgIH1cbiAgICBjb25zdCBidXN5ID0gdGhpcy5fYnVzeSgpO1xuICAgIGlmIChidXN5ID09PSAnZW5hYmxpbmcnKSByZXR1cm4gJ2VuYWJsaW5nJztcbiAgICBpZiAoYnVzeSA9PT0gJ2Rpc2FibGluZycpIHJldHVybiAnZGlzYWJsaW5nJztcbiAgICBpZiAodGhpcy5pc0VuYWJsZWQoKSkgcmV0dXJuICdlbmFibGVkJztcbiAgICBpZiAodGhpcy5wZXJtaXNzaW9uKCkgPT09ICdkZW5pZWQnKSByZXR1cm4gJ2Jsb2NrZWQnO1xuICAgIGlmICh0aGlzLl9sYXN0RmFpbGVkKCkpIHJldHVybiAnZXJyb3InO1xuICAgIHJldHVybiAnaWRsZSc7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IGJ1c3lMYWJlbCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBzID0gdGhpcy5zdGF0ZSgpO1xuICAgIGlmIChzID09PSAnZW5hYmxpbmcnKSByZXR1cm4gdGhpcy50dCgnZW5hYmxpbmcnKTtcbiAgICBpZiAocyA9PT0gJ2Rpc2FibGluZycpIHJldHVybiB0aGlzLnR0KCdkaXNhYmxpbmcnKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgY29udGV4dE1lc3NhZ2UgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgc3dpdGNoICh0aGlzLnN0YXRlKCkpIHtcbiAgICAgIGNhc2UgJ3Vuc3VwcG9ydGVkJzpcbiAgICAgICAgcmV0dXJuIHRoaXMudHQoJ3Blcm1pc3Npb25VbnN1cHBvcnRlZCcpO1xuICAgICAgY2FzZSAnYmxvY2tlZCc6XG4gICAgICAgIHJldHVybiB0aGlzLnR0KCdwZXJtaXNzaW9uRGVuaWVkSW5mbycpO1xuICAgICAgY2FzZSAnZXJyb3InOlxuICAgICAgICByZXR1cm4gdGhpcy50dCgnZXJyb3JHZW5lcmljJyk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH0pO1xuXG4gIHJlYWRvbmx5IGFsZXJ0VmFyaWFudCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBzID0gdGhpcy5zdGF0ZSgpO1xuICAgIGlmIChzID09PSAnZXJyb3InIHx8IHMgPT09ICdibG9ja2VkJykgcmV0dXJuICd3YXJuaW5nJztcbiAgICBpZiAocyA9PT0gJ3Vuc3VwcG9ydGVkJykgcmV0dXJuICdkYW5nZXInO1xuICAgIHJldHVybiAnaW5mbyc7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IGFsZXJ0SWNvbiA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBzID0gdGhpcy5zdGF0ZSgpO1xuICAgIGlmIChzID09PSAndW5zdXBwb3J0ZWQnKSByZXR1cm4gJ2Nsb3NlLWNpcmNsZS1vdXRsaW5lJztcbiAgICByZXR1cm4gJ2FsZXJ0LWNpcmNsZS1vdXRsaW5lJztcbiAgfSk7XG5cbiAgcmVhZG9ubHkgdG9nZ2xlUHJvcHMgPSBjb21wdXRlZDxUb2dnbGVJbnB1dE1ldGFkYXRhPigoKSA9PiAoe1xuICAgIGNvbnRyb2w6IHRoaXMudG9nZ2xlQ29udHJvbCxcbiAgICBjb2xvcjogJ3ByaW1hcnknLFxuICAgIGRpc2FibGVkOlxuICAgICAgdGhpcy5fYnVzeSgpICE9PSBudWxsIHx8XG4gICAgICB0aGlzLnN0YXRlKCkgPT09ICd1bnN1cHBvcnRlZCcgfHxcbiAgICAgIHRoaXMuc3RhdGUoKSA9PT0gJ25lZWRzLWluc3RhbGwnIHx8XG4gICAgICB0aGlzLnN0YXRlKCkgPT09ICdibG9ja2VkJyxcbiAgfSkpO1xuXG4gIHJlYWRvbmx5IHJldHJ5QnV0dG9uUHJvcHMgPSBjb21wdXRlZDxQYXJ0aWFsPEJ1dHRvbk1ldGFkYXRhPj4oKCkgPT4gKHtcbiAgICB0ZXh0OiB0aGlzLnR0KCdyZXRyeUN0YScpLFxuICAgIGNvbG9yOiAnZGFyaycsXG4gICAgZmlsbDogJ291dGxpbmUnLFxuICAgIHNpemU6ICdkZWZhdWx0JyxcbiAgICBzaGFwZTogJ3JvdW5kJyxcbiAgICB0eXBlOiAnYnV0dG9uJyxcbiAgICBpY29uOiB7IG5hbWU6ICdyZWZyZXNoLW91dGxpbmUnLCBzbG90OiAnc3RhcnQnIH0sXG4gICAgc3RhdGU6IHRoaXMuX2J1c3koKSAhPT0gbnVsbCA/IENvbXBvbmVudFN0YXRlcy5XT1JLSU5HIDogQ29tcG9uZW50U3RhdGVzLkVOQUJMRUQsXG4gIH0pKTtcblxuICByZWFkb25seSB0b2tlblByZXZpZXcgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgdCA9IHRoaXMuY3VycmVudFRva2VuKCk7XG4gICAgaWYgKCF0KSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gYCR7dC5zbGljZSgwLCAyMil94oCmJHt0LnNsaWNlKC02KX1gO1xuICB9KTtcblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gTGlmZWN5Y2xlXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IG5zID0gdGhpcy5ucztcbiAgICB0aGlzLmkxOG4ucmVnaXN0ZXJEZWZhdWx0cyhucywgTk9USUZJQ0FUSU9OX1BSRUZFUkVOQ0VTX1ZJRVdfSTE4Tik7XG4gICAgdGhpcy5uYXYuc2V0QmFja0hlYWRlcigncGFnZVRpdGxlJywgbnMsIHsgd2l0aE1lbnU6IHRydWUgfSk7XG5cbiAgICB2b2lkIHRoaXMucmVmcmVzaEJyb3dzZXJTdGF0ZSgpO1xuXG4gICAgLy8gUmUtYXBsaWNhciBoZWFkZXIgZW4gY2FtYmlvIGRlIGlkaW9tYS5cbiAgICBlZmZlY3QoXG4gICAgICAoKSA9PiB7XG4gICAgICAgIHRoaXMuaTE4bi5sYW5nKCk7XG4gICAgICAgIHRoaXMubmF2LnNldEJhY2tIZWFkZXIoJ3BhZ2VUaXRsZScsIHRoaXMubnMsIHsgd2l0aE1lbnU6IHRydWUgfSk7XG4gICAgICB9LFxuICAgICAgeyBhbGxvd1NpZ25hbFdyaXRlczogdHJ1ZSB9XG4gICAgKTtcblxuICAgIC8vIFN5bmMgRm9ybUNvbnRyb2wg4oaQ4oaSIGVzdGFkbyBlZmVjdGl2by4gQ3VhbmRvIGVsIGVzdGFkbyBjYW1iaWEgKGNhbWJpbyBkZVxuICAgIC8vIHBlcm1pc3Npb24gcG9yIGVsIGJyb3dzZXIsIG8gc25hcHNob3QgRmlyZXN0b3JlIGRlIGBtYXN0ZXJgKSwgZWwgdG9nZ2xlIHNlXG4gICAgLy8gcmUtYWxpbmVhIGNvbiBsYSByZWFsaWRhZC5cbiAgICAvL1xuICAgIC8vIElNUE9SVEFOVEU6IHNlIGlnbm9yYW4gbG9zIGNhbWJpb3MgbWllbnRyYXMgaGF5IHVuYSBvcGVyYWNpw7NuIGVuIGN1cnNvXG4gICAgLy8gKGBfYnVzeSgpICE9PSBudWxsYCkuIER1cmFudGUgYG9uRW5hYmxlYC9gb25EaXNhYmxlYCBsYXMgc2XDsWFsZXMgZnVlbnRlIHNlXG4gICAgLy8gYWN0dWFsaXphbiBlbiBtb21lbnRvcyBkaXN0aW50b3MgeSBwcm9kdWNpcsOtYW4gZXN0YWRvcyBpbnRlcm1lZGlvcyDihpJcbiAgICAvLyBmbGlja2VyIHZpc2libGUuIEVsIHRvZ2dsZSBzZSByZS1hbGluZWEgVU5BIHNvbGEgdmV6IGVuIGVsIGBmaW5hbGx5YC5cbiAgICBlZmZlY3QoXG4gICAgICAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGVmZiA9IHRoaXMuaXNFbmFibGVkKCk7XG4gICAgICAgIGlmICh0aGlzLl9idXN5KCkgIT09IG51bGwpIHJldHVybjtcbiAgICAgICAgaWYgKHRoaXMudG9nZ2xlQ29udHJvbC52YWx1ZSAhPT0gZWZmKSB7XG4gICAgICAgICAgdGhpcy50b2dnbGVDb250cm9sLnNldFZhbHVlKGVmZiwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgeyBhbGxvd1NpZ25hbFdyaXRlczogdHJ1ZSB9XG4gICAgKTtcblxuICAgIC8vIEludGVyY2VwdGFyIGNsaWNrIGRlbCB1c2VyOiBlbCB0b2dnbGUgeWEgY2FtYmnDsyB2aXN1YWxtZW50ZSwgZWplY3V0YXJcbiAgICAvLyBsYSBhY2Npw7NuIGNvcnJlc3BvbmRpZW50ZS5cbiAgICB0aGlzLnRvZ2dsZUNvbnRyb2wudmFsdWVDaGFuZ2VzLnN1YnNjcmliZSh2ID0+IHtcbiAgICAgIGlmICh0aGlzLl9idXN5KCkgIT09IG51bGwpIHJldHVybjtcbiAgICAgIGlmICh2ICYmICF0aGlzLmlzRW5hYmxlZCgpKSB7XG4gICAgICAgIHZvaWQgdGhpcy5vbkVuYWJsZSgpO1xuICAgICAgfSBlbHNlIGlmICghdiAmJiB0aGlzLmlzRW5hYmxlZCgpKSB7XG4gICAgICAgIHZvaWQgdGhpcy5vbkRpc2FibGUoKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIERldGVjdGFyIHJlZ3Jlc28gYSBsYSBwZXN0YcOxYSDigJQgZWwgdXNlciBwdWRvIGhhYmVyIGNhbWJpYWRvIHBlcm1pc29zXG4gICAgLy8gZGVzZGUgbGEgY29uZmlnIGRlbCBicm93c2VyLiBFbCByZWZyZXNoIHZhIGNvbiBkZWJvdW5jZSBwYXJhIG5vXG4gICAgLy8gZGlzcGFyYXJzZSBlbiByw6FmYWdhcyAoZW4gUFdBIG1vYmlsZSBgZm9jdXNgIHNhbHRhIGNvbiBjYWRhIGNhbWJpbyBkZVxuICAgIC8vIGFwcCAvIGFwYXJpY2nDs24gZGVsIHRlY2xhZG8pLiBFbCBsaXN0ZW5lciBzZSByZW11ZXZlIGVuIG5nT25EZXN0cm95LlxuICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2ZvY3VzJywgdGhpcy5vbldpbmRvd0ZvY3VzKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0cmEgZWwgcHVsbC10by1yZWZyZXNoIGVzdMOhbmRhci4gQXVucXVlIGVzdGEgdmlzdGEgbm8gbXVlc3RyYSB1bmFcbiAgICogbGlzdGEgcmVtb3RhLCBzw60gcmVmbGVqYSBlc3RhZG8gbXV0YWJsZSBkZWwgYnJvd3NlciAocGVybWlzbywgdG9rZW4sXG4gICAqIHNvcG9ydGUgRkNNKSBxdWUgcHVlZGUgY2FtYmlhciBmdWVyYSBkZSBsYSBhcHAg4oCUIGVsIHJlZnJlc2ggcmUtZXZhbMO6YSB0b2RvLlxuICAgKlxuICAgKiBTZSB1c2EgYG5nT25Jbml0YC9gbmdPbkRlc3Ryb3lgIChOTyBgaW9uVmlld1dpbGxFbnRlcmApIHBvcnF1ZVxuICAgKiBgdmFsLXBhZ2Utd3JhcHBlcmAgdXNhIGA8cm91dGVyLW91dGxldD5gIHBsYW5vIOKAlCBsb3MgaG9va3MgYGlvblZpZXcqYCBzb2xvXG4gICAqIGRpc3BhcmFuIGRlbnRybyBkZSBgPGlvbi1yb3V0ZXItb3V0bGV0PmAuXG4gICAqL1xuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnBhZ2VSZWZyZXNoLnJlZ2lzdGVyKCgpID0+IHRoaXMucmVmcmVzaEJyb3dzZXJTdGF0ZSgpKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMucGFnZVJlZnJlc2gudW5yZWdpc3RlcigpO1xuICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2ZvY3VzJywgdGhpcy5vbldpbmRvd0ZvY3VzKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuZm9jdXNEZWJvdW5jZVRpbWVyICE9PSBudWxsKSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5mb2N1c0RlYm91bmNlVGltZXIpO1xuICAgICAgdGhpcy5mb2N1c0RlYm91bmNlVGltZXIgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBSZWZyZXNjYSBlbCBlc3RhZG8gZGVsIGJyb3dzZXIgY29uIGRlYm91bmNlIOKAlCBldml0YSByw6FmYWdhcyBkZSBgZm9jdXNgLiAqL1xuICBwcml2YXRlIHNjaGVkdWxlQnJvd3NlclJlZnJlc2goKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZm9jdXNEZWJvdW5jZVRpbWVyICE9PSBudWxsKSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5mb2N1c0RlYm91bmNlVGltZXIpO1xuICAgIH1cbiAgICB0aGlzLmZvY3VzRGVib3VuY2VUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5mb2N1c0RlYm91bmNlVGltZXIgPSBudWxsO1xuICAgICAgdm9pZCB0aGlzLnJlZnJlc2hCcm93c2VyU3RhdGUoKTtcbiAgICB9LCB0aGlzLkZPQ1VTX0RFQk9VTkNFX01TKTtcbiAgfVxuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyBBY3Rpb25zXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIC8qKlxuICAgKiBTZWN1ZW5jaWEgY29tcGxldGEgZGUgYWN0aXZhY2nDs24uXG4gICAqXG4gICAqIFRvZGEgbGEgbWVjw6FuaWNhIChwZXJtaXNzaW9uIOKGkiBTVyByZWFkeSDihpIgZ2V0VG9rZW4gY29uIHJldHJ5IOKGkiB3YXRjaGRvZyBkZVxuICAgKiBhdXRvLXJlbG9hZCkgdml2ZSBlbiBgTWVzc2FnaW5nU2VydmljZS5lbmFibGUoKWAgZGUgbGEgbGliLiBFbCBwYXNvIGRlXG4gICAqIHJlZ2lzdHJvIGRlbCBkZXZpY2UgZW4gZWwgYmFja2VuZCBzZSBwYXNhIGNvbW8gY2FsbGJhY2sgKGByZWdpc3RlckRldmljZWApXG4gICAqIHBvcnF1ZSBsYSBsaWIgbm8gcHVlZGUgZGVwZW5kZXIgZGUgYEF1dGhTZXJ2aWNlYCBzaW4gY3JlYXIgdW4gY2ljbG8uXG4gICAqXG4gICAqIGBlbmFibGUoKWAgbm8gaGFjZSB0aHJvdzogcmVzdWVsdmUgY29uIHVuIGBFbmFibGVQdXNoUmVzdWx0YCBkZXNjcmlwdGl2by5cbiAgICovXG4gIGFzeW5jIG9uRW5hYmxlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuX2J1c3kuc2V0KCdlbmFibGluZycpO1xuICAgIHRoaXMuX2xhc3RGYWlsZWQuc2V0KGZhbHNlKTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXN1bHQ6IEVuYWJsZVB1c2hSZXN1bHQgPSBhd2FpdCB0aGlzLm1lc3NhZ2luZy5lbmFibGUoe1xuICAgICAgICByZWdpc3RlckRldmljZTogdG9rZW4gPT4gdGhpcy5hdXRoLnJlZ2lzdGVyRGV2aWNlKHRva2VuKS50aGVuKHIgPT4gci5yZWdpc3RlcmVkKSxcbiAgICAgIH0pO1xuXG4gICAgICBpZiAocmVzdWx0LnN0YXR1cyA9PT0gJ2VuYWJsZWQnKSB7XG4gICAgICAgIC8vIFBlcnNpc3RpciBmbGFnIG1hc3RlciBzaSBhw7puIG5vIGVzdGFiYSBhY3Rpdm8uXG4gICAgICAgIGlmICghdGhpcy5wcmVmcy5ub3RpZmljYXRpb25zTWFzdGVyKCkpIHtcbiAgICAgICAgICBhd2FpdCB0aGlzLnByZWZzLnNldE5vdGlmaWNhdGlvbnNNYXN0ZXIodHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy50b2FzdC5zaG93KHtcbiAgICAgICAgICBtZXNzYWdlOiB0aGlzLnR0KCdlbmFibGVTdWNjZXNzJyksXG4gICAgICAgICAgZHVyYXRpb246IDIwMDAsXG4gICAgICAgICAgY29sb3I6ICdkYXJrJyxcbiAgICAgICAgICBwb3NpdGlvbjogJ3RvcCcsXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnJlc29sdmVkQ29uZmlnKCkub25QdXNoRW5hYmxlZD8uKCk7XG4gICAgICB9IGVsc2UgaWYgKHJlc3VsdC5zdGF0dXMgPT09ICd0aW1lb3V0JyAmJiByZXN1bHQucmVsb2FkZWQpIHtcbiAgICAgICAgLy8gTGEgbGliIGRpc3BhcsOzIGVsIGF1dG8tcmVsb2FkIOKAlCBsYSBww6FnaW5hIGVzdMOhIHBvciByZWNhcmdhcnNlLlxuICAgICAgICByZXR1cm47XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBkZW5pZWQgLyB1bnN1cHBvcnRlZCAvIGVycm9yIC8gdGltZW91dCBzaW4gcmVsb2FkIOKGkiBmYWxsbyByZWN1cGVyYWJsZS5cbiAgICAgICAgdGhpcy5fbGFzdEZhaWxlZC5zZXQodHJ1ZSk7XG4gICAgICAgIHRoaXMudG9hc3Quc2hvdyh7XG4gICAgICAgICAgbWVzc2FnZTogdGhpcy50dCgnZXJyb3JHZW5lcmljJyksXG4gICAgICAgICAgZHVyYXRpb246IDMwMDAsXG4gICAgICAgICAgY29sb3I6ICdkYXJrJyxcbiAgICAgICAgICBwb3NpdGlvbjogJ3RvcCcsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gYGVuYWJsZSgpYCBubyBoYWNlIHRocm93LCBwZXJvIGVsIGNhbGxiYWNrIGRlIHJlZ2lzdHJvIHPDrSBwdWVkZS5cbiAgICAgIHRoaXMuX2xhc3RGYWlsZWQuc2V0KHRydWUpO1xuICAgICAgdGhpcy50b2FzdC5zaG93KHtcbiAgICAgICAgbWVzc2FnZTogdGhpcy50dCgnZXJyb3JHZW5lcmljJyksXG4gICAgICAgIGR1cmF0aW9uOiAzMDAwLFxuICAgICAgICBjb2xvcjogJ2RhcmsnLFxuICAgICAgICBwb3NpdGlvbjogJ3RvcCcsXG4gICAgICB9KTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgLy8gw5puaWNvIHJlZnJlc2ggZmluYWw6IHJlLWFsaW5lYSBlbCB0b2dnbGUgVU5BIHNvbGEgdmV6IGNvbiBlbCBlc3RhZG8gcmVhbC5cbiAgICAgIGF3YWl0IHRoaXMucmVmcmVzaEJyb3dzZXJTdGF0ZSgpO1xuICAgICAgdGhpcy5fYnVzeS5zZXQobnVsbCk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgb25EaXNhYmxlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuX2J1c3kuc2V0KCdkaXNhYmxpbmcnKTtcbiAgICB0aGlzLl9sYXN0RmFpbGVkLnNldChmYWxzZSk7XG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5hdXRoLmRpc2FibGVOb3RpZmljYXRpb25zKCk7XG4gICAgICBpZiAodGhpcy5wcmVmcy5ub3RpZmljYXRpb25zTWFzdGVyKCkpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5wcmVmcy5zZXROb3RpZmljYXRpb25zTWFzdGVyKGZhbHNlKTtcbiAgICAgIH1cbiAgICAgIHRoaXMudG9hc3Quc2hvdyh7XG4gICAgICAgIG1lc3NhZ2U6IHRoaXMudHQoJ2Rpc2FibGVTdWNjZXNzJyksXG4gICAgICAgIGR1cmF0aW9uOiAyMDAwLFxuICAgICAgICBjb2xvcjogJ2RhcmsnLFxuICAgICAgICBwb3NpdGlvbjogJ3RvcCcsXG4gICAgICB9KTtcbiAgICAgIHRoaXMucmVzb2x2ZWRDb25maWcoKS5vblB1c2hEaXNhYmxlZD8uKCk7XG4gICAgfSBjYXRjaCB7XG4gICAgICB0aGlzLl9sYXN0RmFpbGVkLnNldCh0cnVlKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgYXdhaXQgdGhpcy5yZWZyZXNoQnJvd3NlclN0YXRlKCk7XG4gICAgICB0aGlzLl9idXN5LnNldChudWxsKTtcbiAgICB9XG4gIH1cblxuICAvKiogUmVpbnRlbnRhciBsYSBzZWN1ZW5jaWEgY29tcGxldGEgZGUgYWN0aXZhY2nDs24sIHNpbiBpbXBvcnRhciBlbCBlc3RhZG8gYWN0dWFsLiAqL1xuICBhc3luYyBvblJldHJ5KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuX2xhc3RGYWlsZWQuc2V0KGZhbHNlKTtcbiAgICBhd2FpdCB0aGlzLm9uRW5hYmxlKCk7XG4gIH1cblxuICB0b2dnbGVEZXRhaWxzKCk6IHZvaWQge1xuICAgIHRoaXMuc2hvd0RldGFpbHMudXBkYXRlKHYgPT4gIXYpO1xuICB9XG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIFByaXZhZG9zXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIHByaXZhdGUgYXN5bmMgcmVmcmVzaEJyb3dzZXJTdGF0ZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLmlzU3VwcG9ydGVkLnNldChhd2FpdCB0aGlzLm1lc3NhZ2luZy5pc1N1cHBvcnRlZCgpKTtcbiAgICB0aGlzLnBlcm1pc3Npb24uc2V0KHRoaXMuYXV0aC5nZXROb3RpZmljYXRpb25QZXJtaXNzaW9uU3RhdGUoKSk7XG4gICAgdGhpcy5jdXJyZW50VG9rZW4uc2V0KHRoaXMubWVzc2FnaW5nLmN1cnJlbnRUb2tlbiA/PyBudWxsKTtcbiAgICB2b2lkIHRoaXMucmVwYWlyVG9rZW5JZk5lZWRlZCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlcGFyYSBlbCB0b2tlbiBGQ00gZW4gYmFja2dyb3VuZC5cbiAgICpcbiAgICogU2kgZWwgdXN1YXJpbyB0aWVuZSBwdXNoIGFjdGl2byAoYG1hc3RlciAmJiBncmFudGVkYCkgcGVybyBubyBoYXkgdG9rZW4gZW5cbiAgICogbWVtb3JpYSDigJQgY2FzbyB0w61waWNvIHRyYXMgdW4gY29sZCBzdGFydCBkZSBsYSBQV0Eg4oCUIHJlLW9idGVuZW1vcyBlbCB0b2tlblxuICAgKiB5IHJlLXJlZ2lzdHJhbW9zIGVsIGRldmljZSBzaW4gdG9jYXIgZWwgdG9nZ2xlIG5pIG1vc3RyYXIgdW4gZXJyb3JcbiAgICogYWxhcm1pc3RhLiBFbCB0b2tlbiBlcyB1biBkZXRhbGxlIGRlIGltcGxlbWVudGFjacOzbiByZXBhcmFibGUsIG5vIHBhcnRlIGRlbFxuICAgKiBlc3RhZG8gZGUgVUkgKHZlciBgaXNFbmFibGVkYCkuXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHJlcGFpclRva2VuSWZOZWVkZWQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuX2J1c3koKSAhPT0gbnVsbCkgcmV0dXJuO1xuICAgIGlmICh0aGlzLl9yZXBhaXJpbmdUb2tlbikgcmV0dXJuO1xuICAgIGlmICghdGhpcy5pc0VuYWJsZWQoKSkgcmV0dXJuO1xuICAgIGlmICh0aGlzLmN1cnJlbnRUb2tlbigpKSByZXR1cm47XG5cbiAgICB0aGlzLl9yZXBhaXJpbmdUb2tlbiA9IHRydWU7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHRva2VuID0gYXdhaXQgdGhpcy5tZXNzYWdpbmcuZ2V0VG9rZW4oKTtcbiAgICAgIGlmICh0b2tlbikge1xuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5zZXQodG9rZW4pO1xuICAgICAgICBhd2FpdCB0aGlzLmF1dGgucmVnaXN0ZXJEZXZpY2UodG9rZW4pO1xuICAgICAgfVxuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gUmVwYXJhY2nDs24gYmVzdC1lZmZvcnQ6IG5vIGRlZ3JhZGFtb3MgZWwgdG9nZ2xlIG5pIG1vc3RyYW1vcyBlcnJvci5cbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5fcmVwYWlyaW5nVG9rZW4gPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogaU9TIGJyb3dzZXIgc2luIGVzdGFyIGluc3RhbGFkbyBjb21vIFBXQSDigJQgcHVzaCB3ZWIgbm8gZGlzcG9uaWJsZS5cbiAgICogQXBsaWNhIGEgU2FmYXJpIHkgYSBFZGdlL0Nocm9tZS9GaXJlZm94IGVuIGlPUyAodG9kb3MgV2ViS2l0IHBvciBtYW5kYXRvIEFwcGxlKS5cbiAgICovXG4gIHByaXZhdGUgZGV0ZWN0TmVlZHNJT1NJbnN0YWxsKCk6IGJvb2xlYW4ge1xuICAgIGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJyB8fCB0eXBlb2YgbmF2aWdhdG9yID09PSAndW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCB1YSA9IG5hdmlnYXRvci51c2VyQWdlbnQgfHwgJyc7XG4gICAgY29uc3QgaXNJT1MgPSAvaVBhZHxpUGhvbmV8aVBvZC8udGVzdCh1YSk7XG4gICAgaWYgKCFpc0lPUykgcmV0dXJuIGZhbHNlO1xuICAgIGNvbnN0IGlzU3RhbmRhbG9uZSA9XG4gICAgICB3aW5kb3cubWF0Y2hNZWRpYT8uKCcoZGlzcGxheS1tb2RlOiBzdGFuZGFsb25lKScpLm1hdGNoZXMgfHxcbiAgICAgIChuYXZpZ2F0b3IgYXMgdW5rbm93biBhcyB7IHN0YW5kYWxvbmU/OiBib29sZWFuIH0pLnN0YW5kYWxvbmUgPT09IHRydWU7XG4gICAgcmV0dXJuICFpc1N0YW5kYWxvbmU7XG4gIH1cblxuICBwcm90ZWN0ZWQgdHQoa2V5OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmkxOG4udChrZXksIHRoaXMubnMpO1xuICB9XG59XG4iXX0=