@dereekb/dbx-firebase 12.6.0 → 12.6.2

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.
@@ -6,9 +6,10 @@ import { maybeValueFromObservableOrValue } from '@dereekb/rxjs';
6
6
  import { toObservable, toSignal } from '@angular/core/rxjs-interop';
7
7
  import { combineLatest, distinctUntilChanged, interval, map, of, shareReplay, switchMap } from 'rxjs';
8
8
  import { MatDialog } from '@angular/material/dialog';
9
+ import { isSameDate } from '@dereekb/date';
9
10
  import * as i0 from "@angular/core";
10
11
  import * as i1 from "@dereekb/dbx-core";
11
- export class DbxFirebaseStorageFileDownloadButton {
12
+ export class DbxFirebaseStorageFileDownloadButtonComponent {
12
13
  matDialog = inject(MatDialog);
13
14
  dbxWebFilePreviewService = inject(DbxWebFilePreviewService);
14
15
  dbxFirebaseStorageFileDownloadService = inject(DbxFirebaseStorageFileDownloadService);
@@ -31,9 +32,13 @@ export class DbxFirebaseStorageFileDownloadButton {
31
32
  */
32
33
  showPreviewButton = input(true);
33
34
  /**
34
- * Output event emitted when the download URL changes.
35
+ * Whether or not to pre-load the download URL from the source.
35
36
  */
36
- downloadUrlChange = output();
37
+ preload = input(undefined);
38
+ /**
39
+ * Output event emitted when the download details change.
40
+ */
41
+ downloadDetailsChange = output();
37
42
  config = input();
38
43
  source = input();
39
44
  source$ = toObservable(this.source);
@@ -52,8 +57,10 @@ export class DbxFirebaseStorageFileDownloadButton {
52
57
  return result;
53
58
  });
54
59
  preloadSignal = computed(() => {
60
+ const preload = this.preload();
61
+ const source = this.source();
55
62
  const config = this.configSignal();
56
- return config.preload ?? false;
63
+ return preload ?? source?.preload ?? config.preload ?? false;
57
64
  });
58
65
  downloadUrlSignal = signal(undefined);
59
66
  downloadMimeTypeSignal = signal(undefined);
@@ -133,7 +140,11 @@ export class DbxFirebaseStorageFileDownloadButton {
133
140
  const inputEmbedMimeType = this.embedMimeType();
134
141
  const downloadMimeType = this.downloadMimeTypeSignal();
135
142
  const embedMimeType = inputEmbedMimeType ?? downloadMimeType;
136
- return openPreview?.(srcUrl, embedMimeType) ?? this.dbxWebFilePreviewService.openPreviewDialog(srcUrl, embedMimeType);
143
+ return (openPreview?.(srcUrl, embedMimeType) ??
144
+ this.dbxWebFilePreviewService.openPreviewDialog({
145
+ srcUrl,
146
+ embedMimeType
147
+ }));
137
148
  };
138
149
  // Cached Url Effect
139
150
  // When the key changes, check the cache to see if it is already available, and populate the download url if it is.
@@ -150,8 +161,9 @@ export class DbxFirebaseStorageFileDownloadButton {
150
161
  allowSignalWrites: true
151
162
  });
152
163
  // Expiration Effect
153
- downloadUrlExpiresAt$ = toObservable(this.downloadUrlExpiresAtSignal).pipe(map(dateFromDateOrTimeSecondsNumber), distinctUntilChanged(), shareReplay(1));
154
- downloadUrlHasExpired$ = this.downloadUrlExpiresAt$.pipe(switchMap((x) => {
164
+ downloadUrlExpiresAtDate$ = toObservable(this.downloadUrlExpiresAtSignal).pipe(map(dateFromDateOrTimeSecondsNumber), distinctUntilChanged(isSameDate), shareReplay(1));
165
+ downloadUrlExpiresAtDateSignal = toSignal(this.downloadUrlExpiresAtDate$);
166
+ downloadUrlHasExpired$ = this.downloadUrlExpiresAtDate$.pipe(switchMap((x) => {
155
167
  let obs;
156
168
  if (x) {
157
169
  obs = interval(MS_IN_SECOND).pipe(map(() => isPast(x)), distinctUntilChanged(), shareReplay(1));
@@ -173,9 +185,29 @@ export class DbxFirebaseStorageFileDownloadButton {
173
185
  allowSignalWrites: true
174
186
  });
175
187
  // Output Effect
176
- downloadUrlChangeEffect = effect(() => {
188
+ downloadDetailsSignal = computed(() => {
177
189
  const downloadUrl = this.downloadUrlSignal();
178
- this.downloadUrlChange.emit(downloadUrl);
190
+ const mimeType = this.downloadMimeTypeSignal();
191
+ const expiresAt = this.downloadUrlExpiresAtDateSignal();
192
+ const details = downloadUrl != null
193
+ ? {
194
+ downloadUrl,
195
+ mimeType,
196
+ expiresAt
197
+ }
198
+ : undefined;
199
+ return details;
200
+ });
201
+ downloadDetailsChangedEffect = effect(() => {
202
+ const details = this.downloadDetailsSignal();
203
+ this.downloadDetailsChange.emit(details);
204
+ });
205
+ sourceDownloadDetailsChangeCallbackEffect = effect(() => {
206
+ const details = this.downloadDetailsSignal();
207
+ const source = this.source();
208
+ if (source?.downloadDetailsChangeCallback) {
209
+ source.downloadDetailsChangeCallback(details);
210
+ }
179
211
  });
180
212
  // Handlers
181
213
  handleGetDownloadUrl = (value, context) => {
@@ -208,8 +240,8 @@ export class DbxFirebaseStorageFileDownloadButton {
208
240
  handleGetDownloadUrlError(error);
209
241
  }
210
242
  };
211
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DbxFirebaseStorageFileDownloadButton, deps: [], target: i0.ɵɵFactoryTarget.Component });
212
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: DbxFirebaseStorageFileDownloadButton, isStandalone: true, selector: "dbx-firebase-storagefile-download-button", inputs: { storageFileKey: { classPropertyName: "storageFileKey", publicName: "storageFileKey", isSignal: true, isRequired: false, transformFunction: null }, storageFileDownloadUrl: { classPropertyName: "storageFileDownloadUrl", publicName: "storageFileDownloadUrl", isSignal: true, isRequired: false, transformFunction: null }, embedMimeType: { classPropertyName: "embedMimeType", publicName: "embedMimeType", isSignal: true, isRequired: false, transformFunction: null }, showPreviewButton: { classPropertyName: "showPreviewButton", publicName: "showPreviewButton", isSignal: true, isRequired: false, transformFunction: null }, config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: false, transformFunction: null }, source: { classPropertyName: "source", publicName: "source", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { downloadUrlChange: "downloadUrlChange" }, ngImport: i0, template: `
243
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DbxFirebaseStorageFileDownloadButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
244
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: DbxFirebaseStorageFileDownloadButtonComponent, isStandalone: true, selector: "dbx-firebase-storagefile-download-button", inputs: { storageFileKey: { classPropertyName: "storageFileKey", publicName: "storageFileKey", isSignal: true, isRequired: false, transformFunction: null }, storageFileDownloadUrl: { classPropertyName: "storageFileDownloadUrl", publicName: "storageFileDownloadUrl", isSignal: true, isRequired: false, transformFunction: null }, embedMimeType: { classPropertyName: "embedMimeType", publicName: "embedMimeType", isSignal: true, isRequired: false, transformFunction: null }, showPreviewButton: { classPropertyName: "showPreviewButton", publicName: "showPreviewButton", isSignal: true, isRequired: false, transformFunction: null }, preload: { classPropertyName: "preload", publicName: "preload", isSignal: true, isRequired: false, transformFunction: null }, config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: false, transformFunction: null }, source: { classPropertyName: "source", publicName: "source", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { downloadDetailsChange: "downloadDetailsChange" }, ngImport: i0, template: `
213
245
  <dbx-anchor dbxActionAnchor [anchor]="anchorSignal()" dbxAction [dbxActionAutoTrigger]="preloadSignal()" dbxActionSnackbarError [dbxActionDisabled]="!storageFileKeySignal()" [dbxActionValue]="storageFileKeySignal()" [dbxActionHandler]="handleGetDownloadUrl" [dbxActionSuccessHandler]="handleGetDownloadUrlSuccess" [dbxActionErrorHandler]="handleGetDownloadUrlError">
214
246
  <dbx-button dbxActionButton [buttonStyle]="buttonStyleSignal()" [icon]="iconSignal()" [text]="textSignal()"></dbx-button>
215
247
  </dbx-anchor>
@@ -221,7 +253,7 @@ export class DbxFirebaseStorageFileDownloadButton {
221
253
  }
222
254
  `, isInline: true, dependencies: [{ kind: "component", type: DbxButtonComponent, selector: "dbx-button", inputs: ["bar", "type", "buttonStyle", "color", "spinnerColor", "customButtonColor", "customTextColor", "customSpinnerColor", "basic", "raised", "stroked", "flat", "iconOnly", "fab", "mode"] }, { kind: "ngmodule", type: DbxActionModule }, { kind: "directive", type: i1.DbxActionDirective, selector: "dbx-action,[dbxAction],dbx-action-context,[dbxActionContext]", exportAs: ["action", "dbxAction"] }, { kind: "directive", type: i1.DbxActionHandlerDirective, selector: "[dbxActionHandler]", inputs: ["dbxActionHandler"] }, { kind: "directive", type: i1.DbxActionHandlerValueDirective, selector: "[dbxActionHandlerValue]", inputs: ["dbxActionHandlerValue"] }, { kind: "directive", type: i1.DbxActionDisabledDirective, selector: "[dbxActionDisabled]", inputs: ["dbxActionDisabled"] }, { kind: "directive", type: i1.DbxActionAutoTriggerDirective, selector: "dbxActionAutoTrigger,[dbxActionAutoTrigger]", inputs: ["triggerDebounce", "triggerThrottle", "triggerErrorThrottle", "maxErrorsForThrottle", "triggerLimit", "dbxActionAutoTrigger", "useFastTriggerPreset", "useInstantTriggerPreset"] }, { kind: "directive", type: i1.DbxActionValueDirective, selector: "dbxActionValue,[dbxActionValue]", inputs: ["dbxActionValue"] }, { kind: "directive", type: i1.DbxActionSuccessHandlerDirective, selector: "[dbxActionSuccessHandler]", inputs: ["dbxActionSuccessHandler"] }, { kind: "directive", type: i1.DbxActionErrorHandlerDirective, selector: "[dbxActionErrorHandler]", inputs: ["dbxActionErrorHandler"] }, { kind: "directive", type: i1.DbxActionButtonDirective, selector: "[dbxActionButton]" }, { kind: "directive", type: DbxActionSnackbarErrorDirective, selector: "[dbxActionSnackbarError]", inputs: ["dbxActionSnackbarError"] }, { kind: "directive", type: DbxActionDialogDirective, selector: "[dbxActionDialog]", inputs: ["dbxActionDialog", "dbxActionDialogIsModified", "dbxActionDialogIsEqual"], exportAs: ["dbxActionDialog"] }, { kind: "component", type: DbxAnchorComponent, selector: "dbx-anchor, [dbx-anchor]", inputs: ["block"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
223
255
  }
224
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DbxFirebaseStorageFileDownloadButton, decorators: [{
256
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DbxFirebaseStorageFileDownloadButtonComponent, decorators: [{
225
257
  type: Component,
226
258
  args: [{
227
259
  selector: 'dbx-firebase-storagefile-download-button',
@@ -241,4 +273,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
241
273
  standalone: true
242
274
  }]
243
275
  }] });
244
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmFnZWZpbGUuZG93bmxvYWQuYnV0dG9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2RieC1maXJlYmFzZS9zcmMvbGliL21vZHVsZXMvc3RvcmFnZWZpbGUvY29udGFpbmVyL3N0b3JhZ2VmaWxlLmRvd25sb2FkLmJ1dHRvbi5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNwSCxPQUFPLEVBQUUsd0JBQXdCLEVBQTJCLGVBQWUsRUFBRSwrQkFBK0IsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBa0Isd0JBQXdCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUV6TixPQUFPLEVBQXVCLCtCQUErQixFQUFtQyxNQUFNLEVBQVMsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25KLE9BQU8sRUFBRSxxQ0FBcUMsRUFBcUQsTUFBTSx5Q0FBeUMsQ0FBQztBQUVuSixPQUFPLEVBQTBCLCtCQUErQixFQUFrQyxNQUFNLGVBQWUsQ0FBQztBQUN4SCxPQUFPLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxhQUFhLEVBQUUsb0JBQW9CLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBYyxFQUFFLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUVsSCxPQUFPLEVBQUUsU0FBUyxFQUFnQixNQUFNLDBCQUEwQixDQUFDOzs7QUFnRm5FLE1BQU0sT0FBTyxvQ0FBb0M7SUFDdEMsU0FBUyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUU5Qix3QkFBd0IsR0FBRyxN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LENBQUM7UUFFL0MsSUFBSSx5QkFBeUIsRUFBRSxDQUFDO1lBQzlCLHlCQUF5QixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ25DLENBQUM7SUFDSCxDQUFDLENBQUM7d0dBNVJTLG9DQUFvQzs0RkFBcEMsb0NBQW9DLHFnQ0FmckM7Ozs7Ozs7Ozs7R0FVVCw0REFDUyxrQkFBa0Isc1BBQUUsZUFBZSxpMkNBQUUsK0JBQStCLHlHQUFFLHdCQUF3QixpTEFBRSxrQkFBa0I7OzRGQUlqSCxvQ0FBb0M7a0JBakJoRCxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSwwQ0FBMEM7b0JBQ3BELFFBQVEsRUFBRTs7Ozs7Ozs7OztHQVVUO29CQUNELE9BQU8sRUFBRSxDQUFDLGtCQUFrQixFQUFFLGVBQWUsRUFBRSwrQkFBK0IsRUFBRSx3QkFBd0IsRUFBRSxrQkFBa0IsQ0FBQztvQkFDN0gsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07b0JBQy9DLFVBQVUsRUFBRSxJQUFJO2lCQUNqQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIGNvbXB1dGVkLCBlZmZlY3QsIGluamVjdCwgaW5wdXQsIG91dHB1dCwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEYnhBY3Rpb25EaWFsb2dEaXJlY3RpdmUsIERieEFjdGlvbkRpYWxvZ0Z1bmN0aW9uLCBEYnhBY3Rpb25Nb2R1bGUsIERieEFjdGlvblNuYWNrYmFyRXJyb3JEaXJlY3RpdmUsIERieEFuY2hvckNvbXBvbmVudCwgRGJ4QnV0dG9uQ29tcG9uZW50LCBEYnhCdXR0b25TdHlsZSwgRGJ4V2ViRmlsZVByZXZpZXdTZXJ2aWNlIH0gZnJvbSAnQGRlcmVla2IvZGJ4LXdlYic7XG5pbXBvcnQgeyBTdG9yYWdlRmlsZURvd25sb2FkVXJsLCBTdG9yYWdlRmlsZUtleSB9IGZyb20gJ0BkZXJlZWtiL2ZpcmViYXNlJztcbmltcG9ydCB7IENvbnRlbnRUeXBlTWltZVR5cGUsIGRhdGVGcm9tRGF0ZU9yVGltZVNlY29uZHNOdW1iZXIsIERhdGVPclVuaXhEYXRlVGltZVNlY29uZHNOdW1iZXIsIGlzUGFzdCwgTWF5YmUsIE1TX0lOX1NFQ09ORCB9IGZyb20gJ0BkZXJlZWtiL3V0aWwnO1xuaW1wb3J0IHsgRGJ4RmlyZWJhc2VTdG9yYWdlRmlsZURvd25sb2FkU2VydmljZSwgRGJ4RmlyZWJhc2VTdG9yYWdlRmlsZURvd25sb2FkU2VydmljZUN1c3RvbVNvdXJjZSB9IGZyb20gJy4uL3NlcnZpY2Uvc3RvcmFnZWZpbGUuZG93bmxvYWQuc2VydmljZSc7XG5pbXBvcnQgeyBDbGlja2FibGVBbmNob3IgfSBmcm9tICdAZGVyZWVrYi9kYngtY29yZSc7XG5pbXBvcnQgeyBNYXliZU9ic2VydmFibGVPclZhbHVlLCBtYXliZVZhbHVlRnJvbU9ic2VydmFibGVPclZhbHVlLCBXb3JrSW5zdGFuY2UsIFdvcmtVc2luZ0NvbnRleHQgfSBmcm9tICdAZGVyZWVrYi9yeGpzJztcbmltcG9ydCB7IHRvT2JzZXJ2YWJsZSwgdG9TaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBjb21iaW5lTGF0ZXN0LCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgaW50ZXJ2YWwsIG1hcCwgT2JzZXJ2YWJsZSwgb2YsIHNoYXJlUmVwbGF5LCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IERieEZpcmViYXNlU3RvcmFnZUZpbGVEb3dubG9hZFVybFBhaXIgfSBmcm9tICcuLi9zZXJ2aWNlL3N0b3JhZ2VmaWxlLmRvd25sb2FkLnN0b3JhZ2Uuc2VydmljZSc7XG5pbXBvcnQgeyBNYXREaWFsb2csIE1hdERpYWxvZ1JlZiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGJ4RmlyZWJhc2VTdG9yYWdlRmlsZURvd25sb2FkQnV0dG9uU291cmNlIHtcbiAgLyoqXG4gICAqIEEgc3RhdGljIFN0b3JhZ2VGaWxlS2V5IHRvIHVzZS5cbiAgICovXG4gIHJlYWRvbmx5IHN0b3JhZ2VGaWxlS2V5PzogTWF5YmVPYnNlcnZhYmxlT3JWYWx1ZTxTdG9yYWdlRmlsZUtleT47XG4gIC8qKlxuICAgKiBUaGUgZXhwZWN0ZWQgbWltZSB0eXBlIG9mIHRoZSBTdG9yYWdlRmlsZSB0byB1c2Ugd2hlbiBwcmV2aWV3aW5nLlxuICAgKi9cbiAgcmVhZG9ubHkgc3RvcmFnZUZpbGVFbWJlZE1pbWVUeXBlPzogTWF5YmVPYnNlcnZhYmxlT3JWYWx1ZTxDb250ZW50VHlwZU1pbWVUeXBlIHwgc3RyaW5nPjtcbiAgLyoqXG4gICAqIEN1c3RvbSBzb3VyY2UgdG8gdXNlIHdpdGggdGhlIERieEZpcmViYXNlU3RvcmFnZUZpbGVEb3dubG9hZFNlcnZpY2UuIEEgbW9yZSBzaW1wbGUgYWx0ZXJuYXRpdmUgdG8gdXNpbmcgaGFuZGxlR2V0RG93bmxvYWRVcmwoKS5cbiAgICovXG4gIHJlYWRvbmx5IGN1c3RvbVNvdXJjZT86IE1heWJlPERieEZpcmViYXNlU3RvcmFnZUZpbGVEb3dubG9hZFNlcnZpY2VDdXN0b21Tb3VyY2U+O1xuICAvKipcbiAgICogT3B0aW9uYWwgY3VzdG9tIHdvcmsgdG8gdXNlIHRvIGdldCB0aGUgZG93bmxvYWQgVVJMLlxuICAgKlxuICAgKiBJZiBwcm92aWRlZCwgY3VzdG9tU291cmNlIGlzIGlnbm9yZWQuXG4gICAqL1xuICByZWFkb25seSBoYW5kbGVHZXREb3dubG9hZFVybD86IE1heWJlPFdvcmtVc2luZ0NvbnRleHQ8U3RvcmFnZUZpbGVLZXksIERieEZpcmViYXNlU3RvcmFnZUZpbGVEb3dubG9hZFVybFBhaXI+PjtcbiAgLyoqXG4gICAqIE9wdGlvbmFsIGN1c3RvbSBzdWNjZXNzIGhhbmRsZXIgZm9yIHRoZSBkb3dubG9hZCBVUkwuXG4gICAqL1xuICByZWFkb25seSBoYW5kbGVHZXREb3dubG9hZFVybFN1Y2Nlc3M/OiAodmFsdWU6IERieEZpcmViYXNlU3RvcmFnZUZpbGVEb3dubG9hZFVybFBhaXIpID0+IHZvaWQ7XG4gIC8qKlxuICAgKiBPcHRpb25hbCBjdXN0b20gZXJyb3IgaGFuZGxlciBmb3IgdGhlIGRvd25sb2FkIFVSTC5cbiAgICovXG4gIHJlYWRvbmx5IGhhbmRsZUdldERvd25sb2FkVXJsRXJyb3I/OiAoZXJyb3I6IHVua25vd24pID0+IHZvaWQ7XG59XG5cbi8qKlxuICogQ29uZmlndXJhdGlvbiBmb3IgdGhlIERieEZpcmViYXNlU3RvcmFnZUZpbGVEb3dubG9hZEJ1dHRvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEYnhGaXJlYmFzZVN0b3JhZ2VGaWxlRG93bmxvYWRCdXR0b25Db25maWcge1xuICByZWFkb25seSBidXR0b25TdHlsZT86IE1heWJlPERieEJ1dHRvblN0eWxlPjtcbiAgcmVhZG9ubHkgcHJldmlld0J1dHRvblN0eWxlPzogTWF5YmU8RGJ4QnV0dG9uU3R5bGU+O1xuICAvKipcbiAgICogV2hldGhlciBvciBub3QgdG8gcHJlLWxvYWQgdGhlIGRvd25sb2FkIHVybCBmcm9tIHRoZSBzb3VyY2UuXG4gICAqXG4gICAqIERlZmF1bHRzIHRvIGZhbHNlLlxuICAgKi9cbiAgcmVhZG9ubHkgcHJlbG9hZD86IE1heWJlPGJvb2xlYW4+O1xuICAvKipcbiAgICogV2hldGhlciBvciBub3QgdG8gc2hvdyBhIHByZXZpZXcgYnV0dG9uLlxuICAgKlxuICAgKiBEZWZhdWx0cyB0byB0cnVlLlxuICAgKi9cbiAgcmVhZG9ubHkgc2hvd1ByZXZpZXdCdXR0b24/OiBNYXliZTxib29sZWFuPjtcbiAgcmVhZG9ubHkgaWNvbj86IE1heWJlPHN0cmluZz47XG4gIHJlYWRvbmx5IHRleHQ/OiBNYXliZTxzdHJpbmc+O1xuICByZWFkb25seSBkb3dubG9hZFJlYWR5SWNvbj86IE1heWJlPHN0cmluZz47XG4gIHJlYWRvbmx5IGRvd25sb2FkUmVhZHlUZXh0PzogTWF5YmU8c3RyaW5nPjtcbiAgcmVhZG9ubHkgcHJldmlld0ljb24/OiBNYXliZTxzdHJpbmc+O1xuICByZWFkb25seSBwcmV2aWV3VGV4dD86IE1heWJlPHN0cmluZz47XG4gIC8qKlxuICAgKiBPcHRpb25hbCBjdXN0b20gZnVuY3Rpb24gdG8gb3BlbiBhIHByZXZpZXcgZGlhbG9nLiBJZiBub3QgcHJvdmlkZWQsIHRoZSBkZWZhdWx0IHByZXZpZXcgZGlhbG9nIHByb3ZpZGVkIGJ5IHRoZSBEYnhXZWJGaWxlUHJldmlld1NlcnZpY2Ugd2lsbCBiZSB1c2VkLlxuICAgKlxuICAgKiBUaGUgZnVuY3Rpb24gY2FuIHJldHVybiB1bmRlZmluZWQsIGluIHdoaWNoIGNhc2UgdGhlIGRlZmF1bHQgcHJldmlldyBkaWFsb2cgd2lsbCBiZSB1c2VkLlxuICAgKi9cbiAgcmVhZG9ubHkgb3BlbkN1c3RvbVByZXZpZXc/OiBNYXliZTwoZG93bmxvYWRVcmw6IFN0b3JhZ2VGaWxlRG93bmxvYWRVcmwsIGVtYmVkTWltZVR5cGU/OiBNYXliZTxzdHJpbmc+KSA9PiBNYXliZTxNYXREaWFsb2dSZWY8YW55Pj4+O1xufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdkYngtZmlyZWJhc2Utc3RvcmFnZWZpbGUtZG93bmxvYWQtYnV0dG9uJyxcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZGJ4LWFuY2hvciBkYnhBY3Rpb25BbmNob3IgW2FuY2hvcl09XCJhbmNob3JTaWduYWwoKVwiIGRieEFjdGlvbiBbZGJ4QWN0aW9uQXV0b1RyaWdnZXJdPVwicHJlbG9hZFNpZ25hbCgpXCIgZGJ4QWN0aW9uU25hY2tiYXJFcnJvciBbZGJ4QWN0aW9uRGlzYWJsZWRdPVwiIXN0b3JhZ2VGaWxlS2V5U2lnbmFsKClcIiBbZGJ4QWN0aW9uVmFsdWVdPVwic3RvcmFnZUZpbGVLZXlTaWduYWwoKVwiIFtkYnhBY3Rpb25IYW5kbGVyXT1cImhhbmRsZUdldERvd25sb2FkVXJsXCIgW2RieEFjdGlvblN1Y2Nlc3NIYW5kbGVyXT1cImhhbmRsZUdldERvd25sb2FkVXJsU3VjY2Vzc1wiIFtkYnhBY3Rpb25FcnJvckhhbmRsZXJdPVwiaGFuZGxlR2V0RG93bmxvYWRVcmxFcnJvclwiPlxuICAgICAgPGRieC1idXR0b24gZGJ4QWN0aW9uQnV0dG9uIFtidXR0b25TdHlsZV09XCJidXR0b25TdHlsZVNpZ25hbCgpXCIgW2ljb25dPVwiaWNvblNpZ25hbCgpXCIgW3RleHRdPVwidGV4dFNpZ25hbCgpXCI+PC9kYngtYnV0dG9uPlxuICAgIDwvZGJ4LWFuY2hvcj5cbiAgICBAaWYgKHNob3dQcmV2aWV3QnV0dG9uU2lnbmFsKCkpIHtcbiAgICAgIDxuZy1jb250YWluZXIgZGJ4QWN0aW9uIFtkYnhBY3Rpb25EaWFsb2ddPVwiaGFuZGxlT3BlblByZXZpZXdEaWFsb2dcIiBkYnhBY3Rpb25IYW5kbGVyVmFsdWU+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiZGJ4LWJ1dHRvbi1zcGFjZXJcIj48L3NwYW4+XG4gICAgICAgIDxkYngtYnV0dG9uIGRieEFjdGlvbkJ1dHRvbiBbYnV0dG9uU3R5bGVdPVwicHJldmlld0J1dHRvblN0eWxlU2lnbmFsKClcIiBbaWNvbl09XCJwcmV2aWV3SWNvblNpZ25hbCgpXCIgW3RleHRdPVwicHJldmlld1RleHRTaWduYWwoKVwiPjwvZGJ4LWJ1dHRvbj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIH1cbiAgYCxcbiAgaW1wb3J0czogW0RieEJ1dHRvbkNvbXBvbmVudCwgRGJ4QWN0aW9uTW9kdWxlLCBEYnhBY3Rpb25TbmFja2JhckVycm9yRGlyZWN0aXZlLCBEYnhBY3Rpb25EaWFsb2dEaXJlY3RpdmUsIERieEFuY2hvckNvbXBvbmVudF0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBzdGFuZGFsb25lOiB0cnVlXG59KVxuZXhwb3J0IGNsYXNzIERieEZpcmViYXNlU3RvcmFnZUZpbGVEb3dubG9hZEJ1dHRvbiB7XG4gIHJlYWRvbmx5IG1hdERpYWxvZyA9IGluamVjdChNYXREaWFsb2cpO1xuXG4gIHJlYWRvbmx5IGRieFdlYkZpbGVQcmV2aWV3U2VydmljZSA9IGluamVjdChEYnhXZWJGaWxlUHJldmlld1NlcnZpY2UpO1xuICByZWFkb25seSBkYnhGaXJlYmFzZVN0b3JhZ2VGaWxlRG93bmxvYWRTZXJ2aWNlID0gaW5qZWN0KERieEZpcmViYXNlU3RvcmFnZUZpbGVEb3dubG9hZFNlcnZpY2UpO1xuXG4gIC8qKlxuICAgKiBUaGUgU3RvcmFnZUZpbGVLZXkgdG8gc2V0IHVwIHRoZSBkb3dubG9hZCBidXR0b24gZm9yLlxuICAgKi9cbiAgcmVhZG9ubHkgc3RvcmFnZUZpbGVLZXkgPSBpbnB1dDxNYXliZTxTdG9yYWdlRmlsZUtleT4+KCk7XG5cbiAgLyoqXG4gICAqIFRoZSBkb3dubG9hZCBVUkwgdG8gdXNlIGZvciB0aGUgZG93bmxvYWQgYnV0dG9uLlxuICAgKi9cbiAgcmVhZG9ubHkgc3RvcmFnZUZpbGVEb3dubG9hZFVybCA9IGlucHV0PE1heWJlPFN0b3JhZ2VGaWxlRG93bmxvYWRVcmw+PigpO1xuXG4gIC8qKlxuICAgKiBUaGUgTUlNRSB0eXBlIHRvIHVzZSB0aGUgZW1iZWQgY29tcG9uZW50LlxuICAgKi9cbiAgcmVhZG9ubHkgZW1iZWRNaW1lVHlwZSA9IGlucHV0PE1heWJlPENvbnRlbnRUeXBlTWltZVR5cGUgfCBzdHJpbmc+PigpO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIG9yIG5vdCB0byBzaG93IGEgcHJldmlldyBidXR0b24uXG4gICAqXG4gICAqIERlZmF1bHRzIHRvIHRydWUuXG4gICAqL1xuICByZWFkb25seSBzaG93UHJldmlld0J1dHRvbiA9IGlucHV0PE1heWJlPGJvb2xlYW4+Pih0cnVlKTtcblxuICAvKipcbiAgICogT3V0cHV0IGV2ZW50IGVtaXR0ZWQgd2hlbiB0aGUgZG93bmxvYWQgVVJMIGNoYW5nZXMuXG4gICAqL1xuICByZWFkb25seSBkb3dubG9hZFVybENoYW5nZSA9IG91dHB1dDxNYXliZTxTdG9yYWdlRmlsZURvd25sb2FkVXJsPj4oKTtcblxuICByZWFkb25seSBjb25maWcgPSBpbnB1dDxNYXliZTxEYnhGaXJlYmFzZVN0b3JhZ2VGaWxlRG93bmxvYWRCdXR0b25Db25maWc+PigpO1xuICByZWFkb25seSBzb3VyY2UgPSBpbnB1dDxNYXliZTxEYnhGaXJlYmFzZVN0b3JhZ2VGaWxlRG93bmxvYWRCdXR0b25Tb3VyY2U+PigpO1xuXG4gIHJlYWRvbmx5IHNvdXJjZSQgPSB0b09ic2VydmFibGUodGhpcy5zb3VyY2UpO1xuXG4gIHJlYWRvbmx5IGNvbmZpZ1NpZ25hbCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBjb25maWcgPSB0aGlzLmNvbmZpZygpO1xuXG4gICAgY29uc3QgcmVzdWx0OiBEYnhGaXJlYmFzZVN0b3JhZ2VGaWxlRG93bmxvYWRCdXR0b25Db25maWcgPSB7XG4gICAgICBidXR0b25TdHlsZTogY29uZmlnPy5idXR0b25TdHlsZSxcbiAgICAgIHByZXZpZXdCdXR0b25TdHlsZTogY29uZmlnPy5wcmV2aWV3QnV0dG9uU3R5bGUsXG4gICAgICBpY29uOiBjb25maWc/Lmljb24gPz8gJ2Nsb3VkX2Rvd25sb2FkJyxcbiAgICAgIHRleHQ6IGNvbmZpZz8udGV4dCA/PyAnU3RhcnQgRG93bmxvYWQnLFxuICAgICAgZG93bmxvYWRSZWFkeUljb246IGNvbmZpZz8uZG93bmxvYWRSZWFkeUljb24gPz8gJ2Rvd25sb2FkJyxcbiAgICAgIGRvd25sb2FkUmVhZHlUZXh0OiBjb25maWc/LmRvd25sb2FkUmVhZHlUZXh0ID8/ICdTYXZlIEZpbGUnLFxuICAgICAgcHJldmlld0ljb246IGNvbmZpZz8ucHJldmlld0ljb24gPz8gJ3ByZXZpZXcnLFxuICAgICAgcHJldmlld1RleHQ6IGNvbmZpZz8ucHJldmlld1RleHQgPz8gJ1ZpZXcgRmlsZSdcbiAgICB9O1xuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgcHJlbG9hZFNpZ25hbCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBjb25maWcgPSB0aGlzLmNvbmZpZ1NpZ25hbCgpO1xuICAgIHJldHVybiBjb25maWcucHJlbG9hZCA/PyBmYWxzZTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgZG93bmxvYWRVcmxTaWduYWwgPSBzaWduYWw8TWF5YmU8U3RvcmFnZUZpbGVEb3dubG9hZFVybD4+KHVuZGVmaW5lZCk7XG4gIHJlYWRvbmx5IGRvd25sb2FkTWltZVR5cGVTaWduYWwgPSBzaWduYWw8TWF5YmU8Q29udGVudFR5cGVNaW1lVHlwZT4+KHVuZGVmaW5lZCk7XG4gIHJlYWRvbmx5IGRvd25sb2FkVXJsRXhwaXJlc0F0U2lnbmFsID0gc2lnbmFsPE1heWJlPERhdGVPclVuaXhEYXRlVGltZVNlY29uZHNOdW1iZXI+Pih1bmRlZmluZWQpO1xuXG4gIHJlYWRvbmx5IHN0b3JhZ2VGaWxlS2V5RnJvbUlucHV0JCA9IHRvT2JzZXJ2YWJsZSh0aGlzLnN0b3JhZ2VGaWxlS2V5KS5waXBlKGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksIHNoYXJlUmVwbGF5KDEpKTtcblxuICByZWFkb25seSBzdG9yYWdlRmlsZUtleUZyb21Tb3VyY2UkOiBPYnNlcnZhYmxlPE1heWJlPFN0b3JhZ2VGaWxlS2V5Pj4gPSB0aGlzLnNvdXJjZSQucGlwZShcbiAgICBtYXAoKHNvdXJjZSkgPT4gc291cmNlPy5zdG9yYWdlRmlsZUtleSksXG4gICAgbWF5YmVWYWx1ZUZyb21PYnNlcnZhYmxlT3JWYWx1ZSgpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBzdG9yYWdlRmlsZUtleSQ6IE9ic2VydmFibGU8TWF5YmU8U3RvcmFnZUZpbGVLZXk+PiA9IGNvbWJpbmVMYXRlc3QoW3RoaXMuc3RvcmFnZUZpbGVLZXlGcm9tSW5wdXQkLCB0aGlzLnN0b3JhZ2VGaWxlS2V5RnJvbVNvdXJjZSRdKS5waXBlKFxuICAgIG1hcCgoW3N0b3JhZ2VGaWxlS2V5RnJvbUlucHV0LCBzdG9yYWdlRmlsZUtleUZyb21Tb3VyY2VdKSA9PiB7XG4gICAgICByZXR1cm4gc3RvcmFnZUZpbGVLZXlGcm9tSW5wdXQgPz8gc3RvcmFnZUZpbGVLZXlGcm9tU291cmNlO1xuICAgIH0pLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBzdG9yYWdlRmlsZUtleVNpZ25hbCA9IHRvU2lnbmFsKHRoaXMuc3RvcmFnZUZpbGVLZXkkKTtcblxuICByZWFkb25seSBoYXNEb3dubG9hZFVybFNpZ25hbCA9IGNvbXB1dGVkKCgpID0+IEJvb2xlYW4odGhpcy5kb3dubG9hZFVybFNpZ25hbCgpKSk7XG5cbiAgcmVhZG9ubHkgYnV0dG9uU3R5bGVTaWduYWwgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgY29uZmlnID0gdGhpcy5jb25maWdTaWduYWwoKTtcblxuICAgIGNvbnN0IHJlc3VsdDogRGJ4QnV0dG9uU3R5bGUgPSB7XG4gICAgICB0eXBlOiAncmFpc2VkJyxcbiAgICAgIC4uLmNvbmZpZy5idXR0b25TdHlsZVxuICAgIH07XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9KTtcblxuICByZWFkb25seSBwcmV2aWV3QnV0dG9uU3R5bGVTaWduYWwgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgY29uZmlnID0gdGhpcy5jb25maWdTaWduYWwoKTtcblxuICAgIGNvbnN0IHJlc3VsdDogRGJ4QnV0dG9uU3R5bGUgPSB7XG4gICAgICB0eXBlOiAncmFpc2VkJyxcbiAgICAgIC4uLmNvbmZpZy5wcmV2aWV3QnV0dG9uU3R5bGVcbiAgICB9O1xuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgaWNvblNpZ25hbCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBjb25maWcgPSB0aGlzLmNvbmZpZ1NpZ25hbCgpO1xuICAgIGNvbnN0IGhhc0Rvd25sb2FkVXJsID0gdGhpcy5oYXNEb3dubG9hZFVybFNpZ25hbCgpO1xuICAgIHJldHVybiBoYXNEb3dubG9hZFVybCA/IChjb25maWcuZG93bmxvYWRSZWFkeUljb24gPz8gY29uZmlnLmljb24pIDogY29uZmlnLmljb247XG4gIH0pO1xuXG4gIHJlYWRvbmx5IHRleHRTaWduYWwgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgY29uZmlnID0gdGhpcy5jb25maWdTaWduYWwoKTtcbiAgICBjb25zdCBoYXNEb3dubG9hZFVybCA9IHRoaXMuaGFzRG93bmxvYWRVcmxTaWduYWwoKTtcbiAgICByZXR1cm4gaGFzRG93bmxvYWRVcmwgPyAoY29uZmlnLmRvd25sb2FkUmVhZHlUZXh0ID8/IGNvbmZpZy50ZXh0KSA6IGNvbmZpZy50ZXh0O1xuICB9KTtcblxuICByZWFkb25seSBwcmV2aWV3SWNvblNpZ25hbCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBjb25maWcgPSB0aGlzLmNvbmZpZ1NpZ25hbCgpO1xuICAgIHJldHVybiBjb25maWcucHJldmlld0ljb247XG4gIH0pO1xuXG4gIHJlYWRvbmx5IHByZXZpZXdUZXh0U2lnbmFsID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMuY29uZmlnU2lnbmFsKCk7XG4gICAgcmV0dXJuIGNvbmZpZy5wcmV2aWV3VGV4dDtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgYW5jaG9yU2lnbmFsID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGRvd25sb2FkVXJsID0gdGhpcy5kb3dubG9hZFVybFNpZ25hbCgpO1xuXG4gICAgbGV0IHJlc3VsdDogTWF5YmU8Q2xpY2thYmxlQW5jaG9yPjtcblxuICAgIGlmIChkb3dubG9hZFVybCkge1xuICAgICAgcmVzdWx0ID0ge1xuICAgICAgICB1cmw6IGRvd25sb2FkVXJsXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IHN0b3JhZ2VGaWxlRG93bmxvYWRVcmxFZmZlY3QgPSBlZmZlY3QoXG4gICAgKCkgPT4ge1xuICAgICAgY29uc3QgZG93bmxvYWRVcmwgPSB0aGlzLnN0b3JhZ2VGaWxlRG93bmxvYWRVcmwoKTtcblxuICAgICAgaWYgKGRvd25sb2FkVXJsIHx8IGRvd25sb2FkVXJsID09PSBudWxsKSB7XG4gICAgICAgIHRoaXMuZG93bmxvYWRVcmxTaWduYWwuc2V0KGRvd25sb2FkVXJsKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlXG4gICAgfVxuICApO1xuXG4gIC8vIFByZXZpZXdcbiAgcmVhZG9ubHkgc2hvd1ByZXZpZXdCdXR0b25TaWduYWwgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgY29uZmlnID0gdGhpcy5jb25maWdTaWduYWwoKTtcbiAgICBjb25zdCBoYXNEb3dubG9hZFVybCA9IHRoaXMuaGFzRG93bmxvYWRVcmxTaWduYWwoKTtcbiAgICByZXR1cm4gaGFzRG93bmxvYWRVcmwgJiYgKGNvbmZpZy5zaG93UHJldmlld0J1dHRvbiA/PyB0cnVlKTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgb3BlbkN1c3RvbVByZXZpZXdTaWduYWwgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgY29uZmlnID0gdGhpcy5jb25maWdTaWduYWwoKTtcbiAgICByZXR1cm4gY29uZmlnLm9wZW5DdXN0b21QcmV2aWV3O1xuICB9KTtcblxuICByZWFkb25seSBoYW5kbGVPcGVuUHJldmlld0RpYWxvZzogRGJ4QWN0aW9uRGlhbG9nRnVuY3Rpb24gPSAoKSA9PiB7XG4gICAgY29uc3Qgb3BlblByZXZpZXcgPSB0aGlzLm9wZW5DdXN0b21QcmV2aWV3U2lnbmFsKCk7XG5cbiAgICBjb25zdCBzcmNVcmwgPSB0aGlzLmRvd25sb2FkVXJsU2lnbmFsKCkgYXMgc3RyaW5nO1xuICAgIGNvbnN0IGlucHV0RW1iZWRNaW1lVHlwZSA9IHRoaXMuZW1iZWRNaW1lVHlwZSgpO1xuICAgIGNvbnN0IGRvd25sb2FkTWltZVR5cGUgPSB0aGlzLmRvd25sb2FkTWltZVR5cGVTaWduYWwoKTtcbiAgICBjb25zdCBlbWJlZE1pbWVUeXBlID0gaW5wdXRFbWJlZE1pbWVUeXBlID8/IGRvd25sb2FkTWltZVR5cGU7XG5cbiAgICByZXR1cm4gb3BlblByZXZpZXc/LihzcmNVcmwsIGVtYmVkTWltZVR5cGUpID8/IHRoaXMuZGJ4V2ViRmlsZVByZXZpZXdTZXJ2aWNlLm9wZW5QcmV2aWV3RGlhbG9nKHNyY1VybCwgZW1iZWRNaW1lVHlwZSk7XG4gIH07XG5cbiAgLy8gQ2FjaGVkIFVybCBFZmZlY3RcbiAgLy8gV2hlbiB0aGUga2V5IGNoYW5nZXMsIGNoZWNrIHRoZSBjYWNoZSB0byBzZWUgaWYgaXQgaXMgYWxyZWFkeSBhdmFpbGFibGUsIGFuZCBwb3B1bGF0ZSB0aGUgZG93bmxvYWQgdXJsIGlmIGl0IGlzLlxuICByZWFkb25seSBjYWNoZWRVcmxGb3JTdG9yYWdlRmlsZUtleSQgPSB0aGlzLnN0b3JhZ2VGaWxlS2V5JC5waXBlKFxuICAgIHN3aXRjaE1hcCgoa2V5KSA9PiAoa2V5ID8gdGhpcy5kYnhGaXJlYmFzZVN0b3JhZ2VGaWxlRG93bmxvYWRTZXJ2aWNlLmdldENhY2hlZERvd25sb2FkUGFpckZvclN0b3JhZ2VGaWxlKGtleSkgOiBvZihudWxsKSkpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgY2FjaGVkVXJsRm9yU3RvcmFnZUZpbGVLZXlTaWduYWwgPSB0b1NpZ25hbCh0aGlzLmNhY2hlZFVybEZvclN0b3JhZ2VGaWxlS2V5JCk7XG5cbiAgcmVhZG9ubHkgY2FjaGVkVXJsRWZmZWN0ID0gZWZmZWN0KFxuICAgICgpID0+IHtcbiAgICAgIGNvbnN0IGNhY2hlZFBhaXIgPSB0aGlzLmNhY2hlZFVybEZvclN0b3JhZ2VGaWxlS2V5U2lnbmFsKCk7XG5cbiAgICAgIGlmIChjYWNoZWRQYWlyKSB7XG4gICAgICAgIHRoaXMuZG93bmxvYWRVcmxTaWduYWwuc2V0KGNhY2hlZFBhaXIuZG93bmxvYWRVcmwpO1xuICAgICAgICB0aGlzLmRvd25sb2FkTWltZVR5cGVTaWduYWwuc2V0KGNhY2hlZFBhaXIubWltZVR5cGUpO1xuICAgICAgICB0aGlzLmRvd25sb2FkVXJsRXhwaXJlc0F0U2lnbmFsLnNldChjYWNoZWRQYWlyLmV4cGlyZXNBdCk7XG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICBhbGxvd1NpZ25hbFdyaXRlczogdHJ1ZVxuICAgIH1cbiAgKTtcblxuICAvLyBFeHBpcmF0aW9uIEVmZmVjdFxuICByZWFkb25seSBkb3dubG9hZFVybEV4cGlyZXNBdCQgPSB0b09ic2VydmFibGUodGhpcy5kb3dubG9hZFVybEV4cGlyZXNBdFNpZ25hbCkucGlwZShtYXAoZGF0ZUZyb21EYXRlT3JUaW1lU2Vjb25kc051bWJlciksIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksIHNoYXJlUmVwbGF5KDEpKTtcblxuICByZWFkb25seSBkb3dubG9hZFVybEhhc0V4cGlyZWQkID0gdGhpcy5kb3dubG9hZFVybEV4cGlyZXNBdCQucGlwZShcbiAgICBzd2l0Y2hNYXAoKHgpID0+IHtcbiAgICAgIGxldCBvYnM6IE9ic2VydmFibGU8Ym9vbGVhbj47XG5cbiAgICAgIGlmICh4KSB7XG4gICAgICAgIG9icyA9IGludGVydmFsKE1TX0lOX1NFQ09ORCkucGlwZShcbiAgICAgICAgICBtYXAoKCkgPT4gaXNQYXN0KHgpKSxcbiAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgICAgIHNoYXJlUmVwbGF5KDEpXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvYnMgPSBvZihmYWxzZSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBvYnM7XG4gICAgfSksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IGRvd25sb2FkVXJsSGFzRXhwaXJlZFNpZ25hbCA9IHRvU2lnbmFsKHRoaXMuZG93bmxvYWRVcmxIYXNFeHBpcmVkJCk7XG4gIHJlYWRvbmx5IGRvd25sb2FkVXJsSGFzRXhwaXJlZEVmZmVjdCA9IGVmZmVjdChcbiAgICAoKSA9PiB7XG4gICAgICBjb25zdCBleHBpcmVkID0gdGhpcy5kb3dubG9hZFVybEhhc0V4cGlyZWRTaWduYWwoKTtcblxuICAgICAgaWYgKGV4cGlyZWQpIHtcbiAgICAgICAgdGhpcy5kb3dubG9hZFVybFNpZ25hbC5zZXQodW5kZWZpbmVkKTtcbiAgICAgICAgdGhpcy5kb3dubG9hZE1pbWVUeXBlU2lnbmFsLnNldCh1bmRlZmluZWQpO1xuICAgICAgICB0aGlzLmRvd25sb2FkVXJsRXhwaXJlc0F0U2lnbmFsLnNldCh1bmRlZmluZWQpO1xuICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgYWxsb3dTaWduYWxXcml0ZXM6IHRydWVcbiAgICB9XG4gICk7XG5cbiAgLy8gT3V0cHV0IEVmZmVjdFxuICByZWFkb25seSBkb3dubG9hZFVybENoYW5nZUVmZmVjdCA9IGVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgZG93bmxvYWRVcmwgPSB0aGlzLmRvd25sb2FkVXJsU2lnbmFsKCk7XG4gICAgdGhpcy5kb3dubG9hZFVybENoYW5nZS5lbWl0KGRvd25sb2FkVXJsKTtcbiAgfSk7XG5cbiAgLy8gSGFuZGxlcnNcbiAgcmVhZG9ubHkgaGFuZGxlR2V0RG93bmxvYWRVcmw6IFdvcmtVc2luZ0NvbnRleHQ8U3RvcmFnZUZpbGVLZXksIERieEZpcmViYXNlU3RvcmFnZUZpbGVEb3dubG9hZFVybFBhaXI+ID0gKHZhbHVlOiBTdG9yYWdlRmlsZUtleSwgY29udGV4dDogV29ya0luc3RhbmNlPFN0b3JhZ2VGaWxlS2V5LCBEYnhGaXJlYmFzZVN0b3JhZ2VGaWxlRG93bmxvYWRVcmxQYWlyPikgPT4ge1xuICAgIGNvbnN0IHNvdXJjZSA9IHRoaXMuc291cmNlKCk7XG4gICAgY29uc3QgeyBjdXN0b21Tb3VyY2UsIGhhbmRsZUdldERvd25sb2FkVXJsIH0gPSBzb3VyY2UgPz8ge307XG5cbiAgICBpZiAoaGFuZGxlR2V0RG93bmxvYWRVcmwpIHtcbiAgICAgIGhhbmRsZUdldERvd25sb2FkVXJsKHZhbHVlLCBjb250ZXh0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29udGV4dC5zdGFydFdvcmtpbmdXaXRoT2JzZXJ2YWJsZSh0aGlzLmRieEZpcmViYXNlU3RvcmFnZUZpbGVEb3dubG9hZFNlcnZpY2UuZG93bmxvYWRQYWlyRm9yU3RvcmFnZUZpbGVVc2luZ1NvdXJjZSh2YWx1ZSwgY3VzdG9tU291cmNlKSk7XG4gICAgfVxuICB9O1xuXG4gIHJlYWRvbmx5IGhhbmRsZUdldERvd25sb2FkVXJsU3VjY2VzcyA9ICh2YWx1ZTogRGJ4RmlyZWJhc2VTdG9yYWdlRmlsZURvd25sb2FkVXJsUGFpcikgPT4ge1xuICAgIGNvbnN0IHNvdXJjZSA9IHRoaXMuc291cmNlKCk7XG4gICAgY29uc3QgeyBoYW5kbGVHZXREb3dubG9hZFVybFN1Y2Nlc3MgfSA9IHNvdXJjZSA/PyB7fTtcblxuICAgIHRoaXMuZG93bmxvYWRVcmxTaWduYWwuc2V0KHZhbHVlLmRvd25sb2FkVXJsKTtcbiAgICB0aGlzLmRvd25sb2FkTWltZVR5cGVTaWduYWwuc2V0KHZhbHVlLm1pbWVUeXBlKTtcbiAgICB0aGlzLmRvd25sb2FkVXJsRXhwaXJlc0F0U2lnbmFsLnNldCh2YWx1ZS5leHBpcmVzQXQpO1xuXG4gICAgaWYgKGhhbmRsZUdldERvd25sb2FkVXJsU3VjY2Vzcykge1xuICAgICAgaGFuZGxlR2V0RG93bmxvYWRVcmxTdWNjZXNzKHZhbHVlKTtcbiAgICB9XG4gIH07XG5cbiAgcmVhZG9ubHkgaGFuZGxlR2V0RG93bmxvYWRVcmxFcnJvciA9IChlcnJvcjogdW5rbm93bikgPT4ge1xuICAgIGNvbnN0IHNvdXJjZSA9IHRoaXMuc291cmNlKCk7XG4gICAgY29uc3QgeyBoYW5kbGVHZXREb3dubG9hZFVybEVycm9yIH0gPSBzb3VyY2UgPz8ge307XG5cbiAgICB0aGlzLmRvd25sb2FkVXJsU2lnbmFsLnNldCh1bmRlZmluZWQpO1xuICAgIHRoaXMuZG93bmxvYWRNaW1lVHlwZVNpZ25hbC5zZXQodW5kZWZpbmVkKTtcbiAgICB0aGlzLmRvd25sb2FkVXJsRXhwaXJlc0F0U2lnbmFsLnNldCh1bmRlZmluZWQpO1xuXG4gICAgaWYgKGhhbmRsZUdldERvd25sb2FkVXJsRXJyb3IpIHtcbiAgICAgIGhhbmRsZUdldERvd25sb2FkVXJsRXJyb3IoZXJyb3IpO1xuICAgIH1cbiAgfTtcbn1cbiJdfQ==
276
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmFnZWZpbGUuZG93bmxvYWQuYnV0dG9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2RieC1maXJlYmFzZS9zcmMvbGliL21vZHVsZXMvc3RvcmFnZWZpbGUvY29udGFpbmVyL3N0b3JhZ2VmaWxlLmRvd25sb2FkLmJ1dHRvbi5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNwSCxPQUFPLEVBQUUsd0JBQXdCLEVBQTJCLGVBQWUsRUFBRSwrQkFBK0IsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBa0Isd0JBQXdCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUV6TixPQUFPLEVBQXVCLCtCQUErQixFQUFtQyxNQUFNLEVBQVMsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25KLE9BQU8sRUFBRSxxQ0FBcUMsRUFBcUQsTUFBTSx5Q0FBeUMsQ0FBQztBQUVuSixPQUFPLEVBQTBCLCtCQUErQixFQUFrQyxNQUFNLGVBQWUsQ0FBQztBQUN4SCxPQUFPLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxhQUFhLEVBQUUsb0JBQW9CLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBYyxFQUFFLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUVsSCxPQUFPLEVBQUUsU0FBUyxFQUFnQixNQUFNLDBCQUEwQixDQUFDO0FBQ25FLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7OztBQXNHM0MsTUFBTSxPQUFPLDZDQUE2QztJQUMvQyxTQUFTLEdBQUcsTUFB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QUFJLHlCQUF5QixFQUFFLENBQUM7WUFDOUIseUJBQXlCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbkMsQ0FBQztJQUNILENBQUMsQ0FBQzt3R0FwVVMsNkNBQTZDOzRGQUE3Qyw2Q0FBNkMsMm9DQWY5Qzs7Ozs7Ozs7OztHQVVULDREQUNTLGtCQUFrQixzUEFBRSxlQUFlLGkyQ0FBRSwrQkFBK0IseUdBQUUsd0JBQXdCLGlMQUFFLGtCQUFrQjs7NEZBSWpILDZDQUE2QztrQkFqQnpELFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLDBDQUEwQztvQkFDcEQsUUFBUSxFQUFFOzs7Ozs7Ozs7O0dBVVQ7b0JBQ0QsT0FBTyxFQUFFLENBQUMsa0JBQWtCLEVBQUUsZUFBZSxFQUFFLCtCQUErQixFQUFFLHdCQUF3QixFQUFFLGtCQUFrQixDQUFDO29CQUM3SCxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtvQkFDL0MsVUFBVSxFQUFFLElBQUk7aUJBQ2pCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgY29tcHV0ZWQsIGVmZmVjdCwgaW5qZWN0LCBpbnB1dCwgb3V0cHV0LCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERieEFjdGlvbkRpYWxvZ0RpcmVjdGl2ZSwgRGJ4QWN0aW9uRGlhbG9nRnVuY3Rpb24sIERieEFjdGlvbk1vZHVsZSwgRGJ4QWN0aW9uU25hY2tiYXJFcnJvckRpcmVjdGl2ZSwgRGJ4QW5jaG9yQ29tcG9uZW50LCBEYnhCdXR0b25Db21wb25lbnQsIERieEJ1dHRvblN0eWxlLCBEYnhXZWJGaWxlUHJldmlld1NlcnZpY2UgfSBmcm9tICdAZGVyZWVrYi9kYngtd2ViJztcbmltcG9ydCB7IFN0b3JhZ2VGaWxlRG93bmxvYWRVcmwsIFN0b3JhZ2VGaWxlS2V5IH0gZnJvbSAnQGRlcmVla2IvZmlyZWJhc2UnO1xuaW1wb3J0IHsgQ29udGVudFR5cGVNaW1lVHlwZSwgZGF0ZUZyb21EYXRlT3JUaW1lU2Vjb25kc051bWJlciwgRGF0ZU9yVW5peERhdGVUaW1lU2Vjb25kc051bWJlciwgaXNQYXN0LCBNYXliZSwgTVNfSU5fU0VDT05EIH0gZnJvbSAnQGRlcmVla2IvdXRpbCc7XG5pbXBvcnQgeyBEYnhGaXJlYmFzZVN0b3JhZ2VGaWxlRG93bmxvYWRTZXJ2aWNlLCBEYnhGaXJlYmFzZVN0b3JhZ2VGaWxlRG93bmxvYWRTZXJ2aWNlQ3VzdG9tU291cmNlIH0gZnJvbSAnLi4vc2VydmljZS9zdG9yYWdlZmlsZS5kb3dubG9hZC5zZXJ2aWNlJztcbmltcG9ydCB7IENsaWNrYWJsZUFuY2hvciB9IGZyb20gJ0BkZXJlZWtiL2RieC1jb3JlJztcbmltcG9ydCB7IE1heWJlT2JzZXJ2YWJsZU9yVmFsdWUsIG1heWJlVmFsdWVGcm9tT2JzZXJ2YWJsZU9yVmFsdWUsIFdvcmtJbnN0YW5jZSwgV29ya1VzaW5nQ29udGV4dCB9IGZyb20gJ0BkZXJlZWtiL3J4anMnO1xuaW1wb3J0IHsgdG9PYnNlcnZhYmxlLCB0b1NpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IGNvbWJpbmVMYXRlc3QsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBpbnRlcnZhbCwgbWFwLCBPYnNlcnZhYmxlLCBvZiwgc2hhcmVSZXBsYXksIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgRGJ4RmlyZWJhc2VTdG9yYWdlRmlsZURvd25sb2FkVXJsUGFpciB9IGZyb20gJy4uL3NlcnZpY2Uvc3RvcmFnZWZpbGUuZG93bmxvYWQuc3RvcmFnZS5zZXJ2aWNlJztcbmltcG9ydCB7IE1hdERpYWxvZywgTWF0RGlhbG9nUmVmIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcbmltcG9ydCB7IGlzU2FtZURhdGUgfSBmcm9tICdAZGVyZWVrYi9kYXRlJztcblxuZXhwb3J0IGludGVyZmFjZSBEYnhGaXJlYmFzZVN0b3JhZ2VGaWxlRG93bmxvYWREZXRhaWxzIHtcbiAgcmVhZG9ubHkgZG93bmxvYWRVcmw6IFN0b3JhZ2VGaWxlRG93bmxvYWRVcmw7XG4gIHJlYWRvbmx5IG1pbWVUeXBlPzogTWF5YmU8Q29udGVudFR5cGVNaW1lVHlwZT47XG4gIHJlYWRvbmx5IGV4cGlyZXNBdD86IE1heWJlPERhdGU+O1xufVxuXG4vKipcbiAqIFNvdXJjZSBjb25maWd1cmF0aW9uIGZvciB0aGUgRGJ4RmlyZWJhc2VTdG9yYWdlRmlsZURvd25sb2FkQnV0dG9uQ29tcG9uZW50LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERieEZpcmViYXNlU3RvcmFnZUZpbGVEb3dubG9hZEJ1dHRvblNvdXJjZSB7XG4gIC8qKlxuICAgKiBBIHN0YXRpYyBTdG9yYWdlRmlsZUtleSB0byB1c2UuXG4gICAqL1xuICByZWFkb25seSBzdG9yYWdlRmlsZUtleT86IE1heWJlT2JzZXJ2YWJsZU9yVmFsdWU8U3RvcmFnZUZpbGVLZXk+O1xuICAvKipcbiAgICogV2hldGhlciBvciBub3QgdG8gcHJlLWxvYWQgdGhlIGRvd25sb2FkIHVybCBmcm9tIHRoZSBzb3VyY2UuXG4gICAqXG4gICAqIERlZmF1bHRzIHRvIGZhbHNlLlxuICAgKi9cbiAgcmVhZG9ubHkgcHJlbG9hZD86IE1heWJlPGJvb2xlYW4+O1xuICAvKipcbiAgICogVGhlIGV4cGVjdGVkIG1pbWUgdHlwZSBvZiB0aGUgU3RvcmFnZUZpbGUgdG8gdXNlIHdoZW4gcHJldmlld2luZy5cbiAgICovXG4gIHJlYWRvbmx5IHN0b3JhZ2VGaWxlRW1iZWRNaW1lVHlwZT86IE1heWJlT2JzZXJ2YWJsZU9yVmFsdWU8Q29udGVudFR5cGVNaW1lVHlwZSB8IHN0cmluZz47XG4gIC8qKlxuICAgKiBDdXN0b20gc291cmNlIHRvIHVzZSB3aXRoIHRoZSBEYnhGaXJlYmFzZVN0b3JhZ2VGaWxlRG93bmxvYWRTZXJ2aWNlLiBBIG1vcmUgc2ltcGxlIGFsdGVybmF0aXZlIHRvIHVzaW5nIGhhbmRsZUdldERvd25sb2FkVXJsKCkuXG4gICAqL1xuICByZWFkb25seSBjdXN0b21Tb3VyY2U/OiBNYXliZTxEYnhGaXJlYmFzZVN0b3JhZ2VGaWxlRG93bmxvYWRTZXJ2aWNlQ3VzdG9tU291cmNlPjtcbiAgLyoqXG4gICAqIE9wdGlvbmFsIGN1c3RvbSB3b3JrIHRvIHVzZSB0byBnZXQgdGhlIGRvd25sb2FkIFVSTC5cbiAgICpcbiAgICogSWYgcHJvdmlkZWQsIGN1c3RvbVNvdXJjZSBpcyBpZ25vcmVkLlxuICAgKi9cbiAgcmVhZG9ubHkgaGFuZGxlR2V0RG93bmxvYWRVcmw/OiBNYXliZTxXb3JrVXNpbmdDb250ZXh0PFN0b3JhZ2VGaWxlS2V5LCBEYnhGaXJlYmFzZVN0b3JhZ2VGaWxlRG93bmxvYWRVcmxQYWlyPj47XG4gIC8qKlxuICAgKiBPcHRpb25hbCBjdXN0b20gc3VjY2VzcyBoYW5kbGVyIGZvciB0aGUgZG93bmxvYWQgVVJMLlxuICAgKi9cbiAgcmVhZG9ubHkgaGFuZGxlR2V0RG93bmxvYWRVcmxTdWNjZXNzPzogKHZhbHVlOiBEYnhGaXJlYmFzZVN0b3JhZ2VGaWxlRG93bmxvYWRVcmxQYWlyKSA9PiB2b2lkO1xuICAvKipcbiAgICogT3B0aW9uYWwgY3VzdG9tIGVycm9yIGhhbmRsZXIgZm9yIHRoZSBkb3dubG9hZCBVUkwuXG4gICAqL1xuICByZWFkb25seSBoYW5kbGVHZXREb3dubG9hZFVybEVycm9yPzogKGVycm9yOiB1bmtub3duKSA9PiB2b2lkO1xuICAvKipcbiAgICogQ2FsbGVkIHdoZW4gdGhlIGRvd25sb2FkIGRldGFpbHMgY2hhbmdlLlxuICAgKi9cbiAgcmVhZG9ubHkgZG93bmxvYWREZXRhaWxzQ2hhbmdlQ2FsbGJhY2s/OiBNYXliZTwoZG93bmxvYWREZXRhaWxzOiBNYXliZTxEYnhGaXJlYmFzZVN0b3JhZ2VGaWxlRG93bmxvYWREZXRhaWxzPikgPT4gdm9pZD47XG59XG5cbi8qKlxuICogQ29uZmlndXJhdGlvbiBmb3IgdGhlIERieEZpcmViYXNlU3RvcmFnZUZpbGVEb3dubG9hZEJ1dHRvbkNvbXBvbmVudC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEYnhGaXJlYmFzZVN0b3JhZ2VGaWxlRG93bmxvYWRCdXR0b25Db25maWcge1xuICByZWFkb25seSBidXR0b25TdHlsZT86IE1heWJlPERieEJ1dHRvblN0eWxlPjtcbiAgcmVhZG9ubHkgcHJldmlld0J1dHRvblN0eWxlPzogTWF5YmU8RGJ4QnV0dG9uU3R5bGU+O1xuICAvKipcbiAgICogV2hldGhlciBvciBub3QgdG8gc2hvdyBhIHByZXZpZXcgYnV0dG9uLlxuICAgKlxuICAgKiBEZWZhdWx0cyB0byB0cnVlLlxuICAgKi9cbiAgcmVhZG9ubHkgc2hvd1ByZXZpZXdCdXR0b24/OiBNYXliZTxib29sZWFuPjtcbiAgcmVhZG9ubHkgaWNvbj86IE1heWJlPHN0cmluZz47XG4gIHJlYWRvbmx5IHRleHQ/OiBNYXliZTxzdHJpbmc+O1xuICByZWFkb25seSBkb3dubG9hZFJlYWR5SWNvbj86IE1heWJlPHN0cmluZz47XG4gIHJlYWRvbmx5IGRvd25sb2FkUmVhZHlUZXh0PzogTWF5YmU8c3RyaW5nPjtcbiAgcmVhZG9ubHkgcHJldmlld0ljb24/OiBNYXliZTxzdHJpbmc+O1xuICByZWFkb25seSBwcmV2aWV3VGV4dD86IE1heWJlPHN0cmluZz47XG4gIC8qKlxuICAgKiBPcHRpb25hbCBjdXN0b20gZnVuY3Rpb24gdG8gb3BlbiBhIHByZXZpZXcgZGlhbG9nLiBJZiBub3QgcHJvdmlkZWQsIHRoZSBkZWZhdWx0IHByZXZpZXcgZGlhbG9nIHByb3ZpZGVkIGJ5IHRoZSBEYnhXZWJGaWxlUHJldmlld1NlcnZpY2Ugd2lsbCBiZSB1c2VkLlxuICAgKlxuICAgKiBUaGUgZnVuY3Rpb24gY2FuIHJldHVybiB1bmRlZmluZWQsIGluIHdoaWNoIGNhc2UgdGhlIGRlZmF1bHQgcHJldmlldyBkaWFsb2cgd2lsbCBiZSB1c2VkLlxuICAgKi9cbiAgcmVhZG9ubHkgb3BlbkN1c3RvbVByZXZpZXc/OiBNYXliZTwoZG93bmxvYWRVcmw6IFN0b3JhZ2VGaWxlRG93bmxvYWRVcmwsIGVtYmVkTWltZVR5cGU/OiBNYXliZTxzdHJpbmc+KSA9PiBNYXliZTxNYXREaWFsb2dSZWY8YW55Pj4+O1xuICAvLyBDT01QQVRcbiAgLyoqXG4gICAqIFdoZXRoZXIgb3Igbm90IHRvIHByZS1sb2FkIHRoZSBkb3dubG9hZCB1cmwgZnJvbSB0aGUgc291cmNlLlxuICAgKlxuICAgKiBEZWZhdWx0cyB0byBmYWxzZS5cbiAgICpcbiAgICogQGRlcHJlY2F0ZWQgdXNlIHRoZSBwcmVsb2FkIHByb3BlcnR5IG9uIHRoZSBzb3VyY2UvRGJ4RmlyZWJhc2VTdG9yYWdlRmlsZURvd25sb2FkQnV0dG9uU291cmNlIGluc3RlYWQuXG4gICAqL1xuICByZWFkb25seSBwcmVsb2FkPzogTWF5YmU8Ym9vbGVhbj47XG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2RieC1maXJlYmFzZS1zdG9yYWdlZmlsZS1kb3dubG9hZC1idXR0b24nLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxkYngtYW5jaG9yIGRieEFjdGlvbkFuY2hvciBbYW5jaG9yXT1cImFuY2hvclNpZ25hbCgpXCIgZGJ4QWN0aW9uIFtkYnhBY3Rpb25BdXRvVHJpZ2dlcl09XCJwcmVsb2FkU2lnbmFsKClcIiBkYnhBY3Rpb25TbmFja2JhckVycm9yIFtkYnhBY3Rpb25EaXNhYmxlZF09XCIhc3RvcmFnZUZpbGVLZXlTaWduYWwoKVwiIFtkYnhBY3Rpb25WYWx1ZV09XCJzdG9yYWdlRmlsZUtleVNpZ25hbCgpXCIgW2RieEFjdGlvbkhhbmRsZXJdPVwiaGFuZGxlR2V0RG93bmxvYWRVcmxcIiBbZGJ4QWN0aW9uU3VjY2Vzc0hhbmRsZXJdPVwiaGFuZGxlR2V0RG93bmxvYWRVcmxTdWNjZXNzXCIgW2RieEFjdGlvbkVycm9ySGFuZGxlcl09XCJoYW5kbGVHZXREb3dubG9hZFVybEVycm9yXCI+XG4gICAgICA8ZGJ4LWJ1dHRvbiBkYnhBY3Rpb25CdXR0b24gW2J1dHRvblN0eWxlXT1cImJ1dHRvblN0eWxlU2lnbmFsKClcIiBbaWNvbl09XCJpY29uU2lnbmFsKClcIiBbdGV4dF09XCJ0ZXh0U2lnbmFsKClcIj48L2RieC1idXR0b24+XG4gICAgPC9kYngtYW5jaG9yPlxuICAgIEBpZiAoc2hvd1ByZXZpZXdCdXR0b25TaWduYWwoKSkge1xuICAgICAgPG5nLWNvbnRhaW5lciBkYnhBY3Rpb24gW2RieEFjdGlvbkRpYWxvZ109XCJoYW5kbGVPcGVuUHJldmlld0RpYWxvZ1wiIGRieEFjdGlvbkhhbmRsZXJWYWx1ZT5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJkYngtYnV0dG9uLXNwYWNlclwiPjwvc3Bhbj5cbiAgICAgICAgPGRieC1idXR0b24gZGJ4QWN0aW9uQnV0dG9uIFtidXR0b25TdHlsZV09XCJwcmV2aWV3QnV0dG9uU3R5bGVTaWduYWwoKVwiIFtpY29uXT1cInByZXZpZXdJY29uU2lnbmFsKClcIiBbdGV4dF09XCJwcmV2aWV3VGV4dFNpZ25hbCgpXCI+PC9kYngtYnV0dG9uPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgfVxuICBgLFxuICBpbXBvcnRzOiBbRGJ4QnV0dG9uQ29tcG9uZW50LCBEYnhBY3Rpb25Nb2R1bGUsIERieEFjdGlvblNuYWNrYmFyRXJyb3JEaXJlY3RpdmUsIERieEFjdGlvbkRpYWxvZ0RpcmVjdGl2ZSwgRGJ4QW5jaG9yQ29tcG9uZW50XSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHN0YW5kYWxvbmU6IHRydWVcbn0pXG5leHBvcnQgY2xhc3MgRGJ4RmlyZWJhc2VTdG9yYWdlRmlsZURvd25sb2FkQnV0dG9uQ29tcG9uZW50IHtcbiAgcmVhZG9ubHkgbWF0RGlhbG9nID0gaW5qZWN0KE1hdERpYWxvZyk7XG5cbiAgcmVhZG9ubHkgZGJ4V2ViRmlsZVByZXZpZXdTZXJ2aWNlID0gaW5qZWN0KERieFdlYkZpbGVQcmV2aWV3U2VydmljZSk7XG4gIHJlYWRvbmx5IGRieEZpcmViYXNlU3RvcmFnZUZpbGVEb3dubG9hZFNlcnZpY2UgPSBpbmplY3QoRGJ4RmlyZWJhc2VTdG9yYWdlRmlsZURvd25sb2FkU2VydmljZSk7XG5cbiAgLyoqXG4gICAqIFRoZSBTdG9yYWdlRmlsZUtleSB0byBzZXQgdXAgdGhlIGRvd25sb2FkIGJ1dHRvbiBmb3IuXG4gICAqL1xuICByZWFkb25seSBzdG9yYWdlRmlsZUtleSA9IGlucHV0PE1heWJlPFN0b3JhZ2VGaWxlS2V5Pj4oKTtcblxuICAvKipcbiAgICogVGhlIGRvd25sb2FkIFVSTCB0byB1c2UgZm9yIHRoZSBkb3dubG9hZCBidXR0b24uXG4gICAqL1xuICByZWFkb25seSBzdG9yYWdlRmlsZURvd25sb2FkVXJsID0gaW5wdXQ8TWF5YmU8U3RvcmFnZUZpbGVEb3dubG9hZFVybD4+KCk7XG5cbiAgLyoqXG4gICAqIFRoZSBNSU1FIHR5cGUgdG8gdXNlIHRoZSBlbWJlZCBjb21wb25lbnQuXG4gICAqL1xuICByZWFkb25seSBlbWJlZE1pbWVUeXBlID0gaW5wdXQ8TWF5YmU8Q29udGVudFR5cGVNaW1lVHlwZSB8IHN0cmluZz4+KCk7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgb3Igbm90IHRvIHNob3cgYSBwcmV2aWV3IGJ1dHRvbi5cbiAgICpcbiAgICogRGVmYXVsdHMgdG8gdHJ1ZS5cbiAgICovXG4gIHJlYWRvbmx5IHNob3dQcmV2aWV3QnV0dG9uID0gaW5wdXQ8TWF5YmU8Ym9vbGVhbj4+KHRydWUpO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIG9yIG5vdCB0byBwcmUtbG9hZCB0aGUgZG93bmxvYWQgVVJMIGZyb20gdGhlIHNvdXJjZS5cbiAgICovXG4gIHJlYWRvbmx5IHByZWxvYWQgPSBpbnB1dDxNYXliZTxib29sZWFuPj4odW5kZWZpbmVkKTtcblxuICAvKipcbiAgICogT3V0cHV0IGV2ZW50IGVtaXR0ZWQgd2hlbiB0aGUgZG93bmxvYWQgZGV0YWlscyBjaGFuZ2UuXG4gICAqL1xuICByZWFkb25seSBkb3dubG9hZERldGFpbHNDaGFuZ2UgPSBvdXRwdXQ8TWF5YmU8RGJ4RmlyZWJhc2VTdG9yYWdlRmlsZURvd25sb2FkRGV0YWlscz4+KCk7XG5cbiAgcmVhZG9ubHkgY29uZmlnID0gaW5wdXQ8TWF5YmU8RGJ4RmlyZWJhc2VTdG9yYWdlRmlsZURvd25sb2FkQnV0dG9uQ29uZmlnPj4oKTtcbiAgcmVhZG9ubHkgc291cmNlID0gaW5wdXQ8TWF5YmU8RGJ4RmlyZWJhc2VTdG9yYWdlRmlsZURvd25sb2FkQnV0dG9uU291cmNlPj4oKTtcblxuICByZWFkb25seSBzb3VyY2UkID0gdG9PYnNlcnZhYmxlKHRoaXMuc291cmNlKTtcblxuICByZWFkb25seSBjb25maWdTaWduYWwgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgY29uZmlnID0gdGhpcy5jb25maWcoKTtcblxuICAgIGNvbnN0IHJlc3VsdDogRGJ4RmlyZWJhc2VTdG9yYWdlRmlsZURvd25sb2FkQnV0dG9uQ29uZmlnID0ge1xuICAgICAgYnV0dG9uU3R5bGU6IGNvbmZpZz8uYnV0dG9uU3R5bGUsXG4gICAgICBwcmV2aWV3QnV0dG9uU3R5bGU6IGNvbmZpZz8ucHJldmlld0J1dHRvblN0eWxlLFxuICAgICAgaWNvbjogY29uZmlnPy5pY29uID8/ICdjbG91ZF9kb3dubG9hZCcsXG4gICAgICB0ZXh0OiBjb25maWc/LnRleHQgPz8gJ1N0YXJ0IERvd25sb2FkJyxcbiAgICAgIGRvd25sb2FkUmVhZHlJY29uOiBjb25maWc/LmRvd25sb2FkUmVhZHlJY29uID8/ICdkb3dubG9hZCcsXG4gICAgICBkb3dubG9hZFJlYWR5VGV4dDogY29uZmlnPy5kb3dubG9hZFJlYWR5VGV4dCA/PyAnU2F2ZSBGaWxlJyxcbiAgICAgIHByZXZpZXdJY29uOiBjb25maWc/LnByZXZpZXdJY29uID8/ICdwcmV2aWV3JyxcbiAgICAgIHByZXZpZXdUZXh0OiBjb25maWc/LnByZXZpZXdUZXh0ID8/ICdWaWV3IEZpbGUnXG4gICAgfTtcblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IHByZWxvYWRTaWduYWwgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgcHJlbG9hZCA9IHRoaXMucHJlbG9hZCgpO1xuICAgIGNvbnN0IHNvdXJjZSA9IHRoaXMuc291cmNlKCk7XG4gICAgY29uc3QgY29uZmlnID0gdGhpcy5jb25maWdTaWduYWwoKTtcbiAgICByZXR1cm4gcHJlbG9hZCA/PyBzb3VyY2U/LnByZWxvYWQgPz8gY29uZmlnLnByZWxvYWQgPz8gZmFsc2U7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IGRvd25sb2FkVXJsU2lnbmFsID0gc2lnbmFsPE1heWJlPFN0b3JhZ2VGaWxlRG93bmxvYWRVcmw+Pih1bmRlZmluZWQpO1xuICByZWFkb25seSBkb3dubG9hZE1pbWVUeXBlU2lnbmFsID0gc2lnbmFsPE1heWJlPENvbnRlbnRUeXBlTWltZVR5cGU+Pih1bmRlZmluZWQpO1xuICByZWFkb25seSBkb3dubG9hZFVybEV4cGlyZXNBdFNpZ25hbCA9IHNpZ25hbDxNYXliZTxEYXRlT3JVbml4RGF0ZVRpbWVTZWNvbmRzTnVtYmVyPj4odW5kZWZpbmVkKTtcblxuICByZWFkb25seSBzdG9yYWdlRmlsZUtleUZyb21JbnB1dCQgPSB0b09ic2VydmFibGUodGhpcy5zdG9yYWdlRmlsZUtleSkucGlwZShkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLCBzaGFyZVJlcGxheSgxKSk7XG5cbiAgcmVhZG9ubHkgc3RvcmFnZUZpbGVLZXlGcm9tU291cmNlJDogT2JzZXJ2YWJsZTxNYXliZTxTdG9yYWdlRmlsZUtleT4+ID0gdGhpcy5zb3VyY2UkLnBpcGUoXG4gICAgbWFwKChzb3VyY2UpID0+IHNvdXJjZT8uc3RvcmFnZUZpbGVLZXkpLFxuICAgIG1heWJlVmFsdWVGcm9tT2JzZXJ2YWJsZU9yVmFsdWUoKSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgc3RvcmFnZUZpbGVLZXkkOiBPYnNlcnZhYmxlPE1heWJlPFN0b3JhZ2VGaWxlS2V5Pj4gPSBjb21iaW5lTGF0ZXN0KFt0aGlzLnN0b3JhZ2VGaWxlS2V5RnJvbUlucHV0JCwgdGhpcy5zdG9yYWdlRmlsZUtleUZyb21Tb3VyY2UkXSkucGlwZShcbiAgICBtYXAoKFtzdG9yYWdlRmlsZUtleUZyb21JbnB1dCwgc3RvcmFnZUZpbGVLZXlGcm9tU291cmNlXSkgPT4ge1xuICAgICAgcmV0dXJuIHN0b3JhZ2VGaWxlS2V5RnJvbUlucHV0ID8/IHN0b3JhZ2VGaWxlS2V5RnJvbVNvdXJjZTtcbiAgICB9KSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgc3RvcmFnZUZpbGVLZXlTaWduYWwgPSB0b1NpZ25hbCh0aGlzLnN0b3JhZ2VGaWxlS2V5JCk7XG5cbiAgcmVhZG9ubHkgaGFzRG93bmxvYWRVcmxTaWduYWwgPSBjb21wdXRlZCgoKSA9PiBCb29sZWFuKHRoaXMuZG93bmxvYWRVcmxTaWduYWwoKSkpO1xuXG4gIHJlYWRvbmx5IGJ1dHRvblN0eWxlU2lnbmFsID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMuY29uZmlnU2lnbmFsKCk7XG5cbiAgICBjb25zdCByZXN1bHQ6IERieEJ1dHRvblN0eWxlID0ge1xuICAgICAgdHlwZTogJ3JhaXNlZCcsXG4gICAgICAuLi5jb25maWcuYnV0dG9uU3R5bGVcbiAgICB9O1xuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgcHJldmlld0J1dHRvblN0eWxlU2lnbmFsID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMuY29uZmlnU2lnbmFsKCk7XG5cbiAgICBjb25zdCByZXN1bHQ6IERieEJ1dHRvblN0eWxlID0ge1xuICAgICAgdHlwZTogJ3JhaXNlZCcsXG4gICAgICAuLi5jb25maWcucHJldmlld0J1dHRvblN0eWxlXG4gICAgfTtcblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IGljb25TaWduYWwgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgY29uZmlnID0gdGhpcy5jb25maWdTaWduYWwoKTtcbiAgICBjb25zdCBoYXNEb3dubG9hZFVybCA9IHRoaXMuaGFzRG93bmxvYWRVcmxTaWduYWwoKTtcbiAgICByZXR1cm4gaGFzRG93bmxvYWRVcmwgPyAoY29uZmlnLmRvd25sb2FkUmVhZHlJY29uID8/IGNvbmZpZy5pY29uKSA6IGNvbmZpZy5pY29uO1xuICB9KTtcblxuICByZWFkb25seSB0ZXh0U2lnbmFsID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMuY29uZmlnU2lnbmFsKCk7XG4gICAgY29uc3QgaGFzRG93bmxvYWRVcmwgPSB0aGlzLmhhc0Rvd25sb2FkVXJsU2lnbmFsKCk7XG4gICAgcmV0dXJuIGhhc0Rvd25sb2FkVXJsID8gKGNvbmZpZy5kb3dubG9hZFJlYWR5VGV4dCA/PyBjb25maWcudGV4dCkgOiBjb25maWcudGV4dDtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgcHJldmlld0ljb25TaWduYWwgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgY29uZmlnID0gdGhpcy5jb25maWdTaWduYWwoKTtcbiAgICByZXR1cm4gY29uZmlnLnByZXZpZXdJY29uO1xuICB9KTtcblxuICByZWFkb25seSBwcmV2aWV3VGV4dFNpZ25hbCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBjb25maWcgPSB0aGlzLmNvbmZpZ1NpZ25hbCgpO1xuICAgIHJldHVybiBjb25maWcucHJldmlld1RleHQ7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IGFuY2hvclNpZ25hbCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBkb3dubG9hZFVybCA9IHRoaXMuZG93bmxvYWRVcmxTaWduYWwoKTtcblxuICAgIGxldCByZXN1bHQ6IE1heWJlPENsaWNrYWJsZUFuY2hvcj47XG5cbiAgICBpZiAoZG93bmxvYWRVcmwpIHtcbiAgICAgIHJlc3VsdCA9IHtcbiAgICAgICAgdXJsOiBkb3dubG9hZFVybFxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9KTtcblxuICByZWFkb25seSBzdG9yYWdlRmlsZURvd25sb2FkVXJsRWZmZWN0ID0gZWZmZWN0KFxuICAgICgpID0+IHtcbiAgICAgIGNvbnN0IGRvd25sb2FkVXJsID0gdGhpcy5zdG9yYWdlRmlsZURvd25sb2FkVXJsKCk7XG5cbiAgICAgIGlmIChkb3dubG9hZFVybCB8fCBkb3dubG9hZFVybCA9PT0gbnVsbCkge1xuICAgICAgICB0aGlzLmRvd25sb2FkVXJsU2lnbmFsLnNldChkb3dubG9hZFVybCk7XG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICBhbGxvd1NpZ25hbFdyaXRlczogdHJ1ZVxuICAgIH1cbiAgKTtcblxuICAvLyBQcmV2aWV3XG4gIHJlYWRvbmx5IHNob3dQcmV2aWV3QnV0dG9uU2lnbmFsID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMuY29uZmlnU2lnbmFsKCk7XG4gICAgY29uc3QgaGFzRG93bmxvYWRVcmwgPSB0aGlzLmhhc0Rvd25sb2FkVXJsU2lnbmFsKCk7XG4gICAgcmV0dXJuIGhhc0Rvd25sb2FkVXJsICYmIChjb25maWcuc2hvd1ByZXZpZXdCdXR0b24gPz8gdHJ1ZSk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IG9wZW5DdXN0b21QcmV2aWV3U2lnbmFsID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMuY29uZmlnU2lnbmFsKCk7XG4gICAgcmV0dXJuIGNvbmZpZy5vcGVuQ3VzdG9tUHJldmlldztcbiAgfSk7XG5cbiAgcmVhZG9ubHkgaGFuZGxlT3BlblByZXZpZXdEaWFsb2c6IERieEFjdGlvbkRpYWxvZ0Z1bmN0aW9uID0gKCkgPT4ge1xuICAgIGNvbnN0IG9wZW5QcmV2aWV3ID0gdGhpcy5vcGVuQ3VzdG9tUHJldmlld1NpZ25hbCgpO1xuXG4gICAgY29uc3Qgc3JjVXJsID0gdGhpcy5kb3dubG9hZFVybFNpZ25hbCgpIGFzIHN0cmluZztcbiAgICBjb25zdCBpbnB1dEVtYmVkTWltZVR5cGUgPSB0aGlzLmVtYmVkTWltZVR5cGUoKTtcbiAgICBjb25zdCBkb3dubG9hZE1pbWVUeXBlID0gdGhpcy5kb3dubG9hZE1pbWVUeXBlU2lnbmFsKCk7XG4gICAgY29uc3QgZW1iZWRNaW1lVHlwZSA9IGlucHV0RW1iZWRNaW1lVHlwZSA/PyBkb3dubG9hZE1pbWVUeXBlO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIG9wZW5QcmV2aWV3Py4oc3JjVXJsLCBlbWJlZE1pbWVUeXBlKSA/P1xuICAgICAgdGhpcy5kYnhXZWJGaWxlUHJldmlld1NlcnZpY2Uub3BlblByZXZpZXdEaWFsb2coe1xuICAgICAgICBzcmNVcmwsXG4gICAgICAgIGVtYmVkTWltZVR5cGVcbiAgICAgIH0pXG4gICAgKTtcbiAgfTtcblxuICAvLyBDYWNoZWQgVXJsIEVmZmVjdFxuICAvLyBXaGVuIHRoZSBrZXkgY2hhbmdlcywgY2hlY2sgdGhlIGNhY2hlIHRvIHNlZSBpZiBpdCBpcyBhbHJlYWR5IGF2YWlsYWJsZSwgYW5kIHBvcHVsYXRlIHRoZSBkb3dubG9hZCB1cmwgaWYgaXQgaXMuXG4gIHJlYWRvbmx5IGNhY2hlZFVybEZvclN0b3JhZ2VGaWxlS2V5JCA9IHRoaXMuc3RvcmFnZUZpbGVLZXkkLnBpcGUoXG4gICAgc3dpdGNoTWFwKChrZXkpID0+IChrZXkgPyB0aGlzLmRieEZpcmViYXNlU3RvcmFnZUZpbGVEb3dubG9hZFNlcnZpY2UuZ2V0Q2FjaGVkRG93bmxvYWRQYWlyRm9yU3RvcmFnZUZpbGUoa2V5KSA6IG9mKG51bGwpKSksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBjYWNoZWRVcmxGb3JTdG9yYWdlRmlsZUtleVNpZ25hbCA9IHRvU2lnbmFsKHRoaXMuY2FjaGVkVXJsRm9yU3RvcmFnZUZpbGVLZXkkKTtcblxuICByZWFkb25seSBjYWNoZWRVcmxFZmZlY3QgPSBlZmZlY3QoXG4gICAgKCkgPT4ge1xuICAgICAgY29uc3QgY2FjaGVkUGFpciA9IHRoaXMuY2FjaGVkVXJsRm9yU3RvcmFnZUZpbGVLZXlTaWduYWwoKTtcblxuICAgICAgaWYgKGNhY2hlZFBhaXIpIHtcbiAgICAgICAgdGhpcy5kb3dubG9hZFVybFNpZ25hbC5zZXQoY2FjaGVkUGFpci5kb3dubG9hZFVybCk7XG4gICAgICAgIHRoaXMuZG93bmxvYWRNaW1lVHlwZVNpZ25hbC5zZXQoY2FjaGVkUGFpci5taW1lVHlwZSk7XG4gICAgICAgIHRoaXMuZG93bmxvYWRVcmxFeHBpcmVzQXRTaWduYWwuc2V0KGNhY2hlZFBhaXIuZXhwaXJlc0F0KTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlXG4gICAgfVxuICApO1xuXG4gIC8vIEV4cGlyYXRpb24gRWZmZWN0XG4gIHJlYWRvbmx5IGRvd25sb2FkVXJsRXhwaXJlc0F0RGF0ZSQgPSB0b09ic2VydmFibGUodGhpcy5kb3dubG9hZFVybEV4cGlyZXNBdFNpZ25hbCkucGlwZShtYXAoZGF0ZUZyb21EYXRlT3JUaW1lU2Vjb25kc051bWJlciksIGRpc3RpbmN0VW50aWxDaGFuZ2VkKGlzU2FtZURhdGUpLCBzaGFyZVJlcGxheSgxKSk7XG4gIHJlYWRvbmx5IGRvd25sb2FkVXJsRXhwaXJlc0F0RGF0ZVNpZ25hbCA9IHRvU2lnbmFsKHRoaXMuZG93bmxvYWRVcmxFeHBpcmVzQXREYXRlJCk7XG5cbiAgcmVhZG9ubHkgZG93bmxvYWRVcmxIYXNFeHBpcmVkJCA9IHRoaXMuZG93bmxvYWRVcmxFeHBpcmVzQXREYXRlJC5waXBlKFxuICAgIHN3aXRjaE1hcCgoeCkgPT4ge1xuICAgICAgbGV0IG9iczogT2JzZXJ2YWJsZTxib29sZWFuPjtcblxuICAgICAgaWYgKHgpIHtcbiAgICAgICAgb2JzID0gaW50ZXJ2YWwoTVNfSU5fU0VDT05EKS5waXBlKFxuICAgICAgICAgIG1hcCgoKSA9PiBpc1Bhc3QoeCkpLFxuICAgICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICAgICAgc2hhcmVSZXBsYXkoMSlcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9icyA9IG9mKGZhbHNlKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG9icztcbiAgICB9KSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgZG93bmxvYWRVcmxIYXNFeHBpcmVkU2lnbmFsID0gdG9TaWduYWwodGhpcy5kb3dubG9hZFVybEhhc0V4cGlyZWQkKTtcbiAgcmVhZG9ubHkgZG93bmxvYWRVcmxIYXNFeHBpcmVkRWZmZWN0ID0gZWZmZWN0KFxuICAgICgpID0+IHtcbiAgICAgIGNvbnN0IGV4cGlyZWQgPSB0aGlzLmRvd25sb2FkVXJsSGFzRXhwaXJlZFNpZ25hbCgpO1xuXG4gICAgICBpZiAoZXhwaXJlZCkge1xuICAgICAgICB0aGlzLmRvd25sb2FkVXJsU2lnbmFsLnNldCh1bmRlZmluZWQpO1xuICAgICAgICB0aGlzLmRvd25sb2FkTWltZVR5cGVTaWduYWwuc2V0KHVuZGVmaW5lZCk7XG4gICAgICAgIHRoaXMuZG93bmxvYWRVcmxFeHBpcmVzQXRTaWduYWwuc2V0KHVuZGVmaW5lZCk7XG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICBhbGxvd1NpZ25hbFdyaXRlczogdHJ1ZVxuICAgIH1cbiAgKTtcblxuICAvLyBPdXRwdXQgRWZmZWN0XG4gIHJlYWRvbmx5IGRvd25sb2FkRGV0YWlsc1NpZ25hbCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBkb3dubG9hZFVybCA9IHRoaXMuZG93bmxvYWRVcmxTaWduYWwoKTtcbiAgICBjb25zdCBtaW1lVHlwZSA9IHRoaXMuZG93bmxvYWRNaW1lVHlwZVNpZ25hbCgpO1xuICAgIGNvbnN0IGV4cGlyZXNBdCA9IHRoaXMuZG93bmxvYWRVcmxFeHBpcmVzQXREYXRlU2lnbmFsKCk7XG5cbiAgICBjb25zdCBkZXRhaWxzOiBNYXliZTxEYnhGaXJlYmFzZVN0b3JhZ2VGaWxlRG93bmxvYWREZXRhaWxzPiA9XG4gICAgICBkb3dubG9hZFVybCAhPSBudWxsXG4gICAgICAgID8ge1xuICAgICAgICAgICAgZG93bmxvYWRVcmwsXG4gICAgICAgICAgICBtaW1lVHlwZSxcbiAgICAgICAgICAgIGV4cGlyZXNBdFxuICAgICAgICAgIH1cbiAgICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICByZXR1cm4gZGV0YWlscztcbiAgfSk7XG5cbiAgcmVhZG9ubHkgZG93bmxvYWREZXRhaWxzQ2hhbmdlZEVmZmVjdCA9IGVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgZGV0YWlsczogTWF5YmU8RGJ4RmlyZWJhc2VTdG9yYWdlRmlsZURvd25sb2FkRGV0YWlscz4gPSB0aGlzLmRvd25sb2FkRGV0YWlsc1NpZ25hbCgpO1xuICAgIHRoaXMuZG93bmxvYWREZXRhaWxzQ2hhbmdlLmVtaXQoZGV0YWlscyk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IHNvdXJjZURvd25sb2FkRGV0YWlsc0NoYW5nZUNhbGxiYWNrRWZmZWN0ID0gZWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBkZXRhaWxzOiBNYXliZTxEYnhGaXJlYmFzZVN0b3JhZ2VGaWxlRG93bmxvYWREZXRhaWxzPiA9IHRoaXMuZG93bmxvYWREZXRhaWxzU2lnbmFsKCk7XG4gICAgY29uc3Qgc291cmNlID0gdGhpcy5zb3VyY2UoKTtcblxuICAgIGlmIChzb3VyY2U/LmRvd25sb2FkRGV0YWlsc0NoYW5nZUNhbGxiYWNrKSB7XG4gICAgICBzb3VyY2UuZG93bmxvYWREZXRhaWxzQ2hhbmdlQ2FsbGJhY2soZGV0YWlscyk7XG4gICAgfVxuICB9KTtcblxuICAvLyBIYW5kbGVyc1xuICByZWFkb25seSBoYW5kbGVHZXREb3dubG9hZFVybDogV29ya1VzaW5nQ29udGV4dDxTdG9yYWdlRmlsZUtleSwgRGJ4RmlyZWJhc2VTdG9yYWdlRmlsZURvd25sb2FkVXJsUGFpcj4gPSAodmFsdWU6IFN0b3JhZ2VGaWxlS2V5LCBjb250ZXh0OiBXb3JrSW5zdGFuY2U8U3RvcmFnZUZpbGVLZXksIERieEZpcmViYXNlU3RvcmFnZUZpbGVEb3dubG9hZFVybFBhaXI+KSA9PiB7XG4gICAgY29uc3Qgc291cmNlID0gdGhpcy5zb3VyY2UoKTtcbiAgICBjb25zdCB7IGN1c3RvbVNvdXJjZSwgaGFuZGxlR2V0RG93bmxvYWRVcmwgfSA9IHNvdXJjZSA/PyB7fTtcblxuICAgIGlmIChoYW5kbGVHZXREb3dubG9hZFVybCkge1xuICAgICAgaGFuZGxlR2V0RG93bmxvYWRVcmwodmFsdWUsIGNvbnRleHQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb250ZXh0LnN0YXJ0V29ya2luZ1dpdGhPYnNlcnZhYmxlKHRoaXMuZGJ4RmlyZWJhc2VTdG9yYWdlRmlsZURvd25sb2FkU2VydmljZS5kb3dubG9hZFBhaXJGb3JTdG9yYWdlRmlsZVVzaW5nU291cmNlKHZhbHVlLCBjdXN0b21Tb3VyY2UpKTtcbiAgICB9XG4gIH07XG5cbiAgcmVhZG9ubHkgaGFuZGxlR2V0RG93bmxvYWRVcmxTdWNjZXNzID0gKHZhbHVlOiBEYnhGaXJlYmFzZVN0b3JhZ2VGaWxlRG93bmxvYWRVcmxQYWlyKSA9PiB7XG4gICAgY29uc3Qgc291cmNlID0gdGhpcy5zb3VyY2UoKTtcbiAgICBjb25zdCB7IGhhbmRsZUdldERvd25sb2FkVXJsU3VjY2VzcyB9ID0gc291cmNlID8/IHt9O1xuXG4gICAgdGhpcy5kb3dubG9hZFVybFNpZ25hbC5zZXQodmFsdWUuZG93bmxvYWRVcmwpO1xuICAgIHRoaXMuZG93bmxvYWRNaW1lVHlwZVNpZ25hbC5zZXQodmFsdWUubWltZVR5cGUpO1xuICAgIHRoaXMuZG93bmxvYWRVcmxFeHBpcmVzQXRTaWduYWwuc2V0KHZhbHVlLmV4cGlyZXNBdCk7XG5cbiAgICBpZiAoaGFuZGxlR2V0RG93bmxvYWRVcmxTdWNjZXNzKSB7XG4gICAgICBoYW5kbGVHZXREb3dubG9hZFVybFN1Y2Nlc3ModmFsdWUpO1xuICAgIH1cbiAgfTtcblxuICByZWFkb25seSBoYW5kbGVHZXREb3dubG9hZFVybEVycm9yID0gKGVycm9yOiB1bmtub3duKSA9PiB7XG4gICAgY29uc3Qgc291cmNlID0gdGhpcy5zb3VyY2UoKTtcbiAgICBjb25zdCB7IGhhbmRsZUdldERvd25sb2FkVXJsRXJyb3IgfSA9IHNvdXJjZSA/PyB7fTtcblxuICAgIHRoaXMuZG93bmxvYWRVcmxTaWduYWwuc2V0KHVuZGVmaW5lZCk7XG4gICAgdGhpcy5kb3dubG9hZE1pbWVUeXBlU2lnbmFsLnNldCh1bmRlZmluZWQpO1xuICAgIHRoaXMuZG93bmxvYWRVcmxFeHBpcmVzQXRTaWduYWwuc2V0KHVuZGVmaW5lZCk7XG5cbiAgICBpZiAoaGFuZGxlR2V0RG93bmxvYWRVcmxFcnJvcikge1xuICAgICAgaGFuZGxlR2V0RG93bmxvYWRVcmxFcnJvcihlcnJvcik7XG4gICAgfVxuICB9O1xufVxuIl19
@@ -5540,7 +5540,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
5540
5540
  type: Injectable
5541
5541
  }] });
5542
5542
 
5543
- class DbxFirebaseStorageFileDownloadButton {
5543
+ class DbxFirebaseStorageFileDownloadButtonComponent {
5544
5544
  matDialog = inject(MatDialog);
5545
5545
  dbxWebFilePreviewService = inject(DbxWebFilePreviewService);
5546
5546
  dbxFirebaseStorageFileDownloadService = inject(DbxFirebaseStorageFileDownloadService);
@@ -5563,9 +5563,13 @@ class DbxFirebaseStorageFileDownloadButton {
5563
5563
  */
5564
5564
  showPreviewButton = input(true);
5565
5565
  /**
5566
- * Output event emitted when the download URL changes.
5566
+ * Whether or not to pre-load the download URL from the source.
5567
5567
  */
5568
- downloadUrlChange = output();
5568
+ preload = input(undefined);
5569
+ /**
5570
+ * Output event emitted when the download details change.
5571
+ */
5572
+ downloadDetailsChange = output();
5569
5573
  config = input();
5570
5574
  source = input();
5571
5575
  source$ = toObservable(this.source);
@@ -5584,8 +5588,10 @@ class DbxFirebaseStorageFileDownloadButton {
5584
5588
  return result;
5585
5589
  });
5586
5590
  preloadSignal = computed(() => {
5591
+ const preload = this.preload();
5592
+ const source = this.source();
5587
5593
  const config = this.configSignal();
5588
- return config.preload ?? false;
5594
+ return preload ?? source?.preload ?? config.preload ?? false;
5589
5595
  });
5590
5596
  downloadUrlSignal = signal(undefined);
5591
5597
  downloadMimeTypeSignal = signal(undefined);
@@ -5665,7 +5671,11 @@ class DbxFirebaseStorageFileDownloadButton {
5665
5671
  const inputEmbedMimeType = this.embedMimeType();
5666
5672
  const downloadMimeType = this.downloadMimeTypeSignal();
5667
5673
  const embedMimeType = inputEmbedMimeType ?? downloadMimeType;
5668
- return openPreview?.(srcUrl, embedMimeType) ?? this.dbxWebFilePreviewService.openPreviewDialog(srcUrl, embedMimeType);
5674
+ return (openPreview?.(srcUrl, embedMimeType) ??
5675
+ this.dbxWebFilePreviewService.openPreviewDialog({
5676
+ srcUrl,
5677
+ embedMimeType
5678
+ }));
5669
5679
  };
5670
5680
  // Cached Url Effect
5671
5681
  // When the key changes, check the cache to see if it is already available, and populate the download url if it is.
@@ -5682,8 +5692,9 @@ class DbxFirebaseStorageFileDownloadButton {
5682
5692
  allowSignalWrites: true
5683
5693
  });
5684
5694
  // Expiration Effect
5685
- downloadUrlExpiresAt$ = toObservable(this.downloadUrlExpiresAtSignal).pipe(map(dateFromDateOrTimeSecondsNumber), distinctUntilChanged(), shareReplay(1));
5686
- downloadUrlHasExpired$ = this.downloadUrlExpiresAt$.pipe(switchMap((x) => {
5695
+ downloadUrlExpiresAtDate$ = toObservable(this.downloadUrlExpiresAtSignal).pipe(map(dateFromDateOrTimeSecondsNumber), distinctUntilChanged(isSameDate), shareReplay(1));
5696
+ downloadUrlExpiresAtDateSignal = toSignal(this.downloadUrlExpiresAtDate$);
5697
+ downloadUrlHasExpired$ = this.downloadUrlExpiresAtDate$.pipe(switchMap((x) => {
5687
5698
  let obs;
5688
5699
  if (x) {
5689
5700
  obs = interval(MS_IN_SECOND).pipe(map(() => isPast(x)), distinctUntilChanged(), shareReplay(1));
@@ -5705,9 +5716,29 @@ class DbxFirebaseStorageFileDownloadButton {
5705
5716
  allowSignalWrites: true
5706
5717
  });
5707
5718
  // Output Effect
5708
- downloadUrlChangeEffect = effect(() => {
5719
+ downloadDetailsSignal = computed(() => {
5709
5720
  const downloadUrl = this.downloadUrlSignal();
5710
- this.downloadUrlChange.emit(downloadUrl);
5721
+ const mimeType = this.downloadMimeTypeSignal();
5722
+ const expiresAt = this.downloadUrlExpiresAtDateSignal();
5723
+ const details = downloadUrl != null
5724
+ ? {
5725
+ downloadUrl,
5726
+ mimeType,
5727
+ expiresAt
5728
+ }
5729
+ : undefined;
5730
+ return details;
5731
+ });
5732
+ downloadDetailsChangedEffect = effect(() => {
5733
+ const details = this.downloadDetailsSignal();
5734
+ this.downloadDetailsChange.emit(details);
5735
+ });
5736
+ sourceDownloadDetailsChangeCallbackEffect = effect(() => {
5737
+ const details = this.downloadDetailsSignal();
5738
+ const source = this.source();
5739
+ if (source?.downloadDetailsChangeCallback) {
5740
+ source.downloadDetailsChangeCallback(details);
5741
+ }
5711
5742
  });
5712
5743
  // Handlers
5713
5744
  handleGetDownloadUrl = (value, context) => {
@@ -5740,8 +5771,8 @@ class DbxFirebaseStorageFileDownloadButton {
5740
5771
  handleGetDownloadUrlError(error);
5741
5772
  }
5742
5773
  };
5743
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DbxFirebaseStorageFileDownloadButton, deps: [], target: i0.ɵɵFactoryTarget.Component });
5744
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: DbxFirebaseStorageFileDownloadButton, isStandalone: true, selector: "dbx-firebase-storagefile-download-button", inputs: { storageFileKey: { classPropertyName: "storageFileKey", publicName: "storageFileKey", isSignal: true, isRequired: false, transformFunction: null }, storageFileDownloadUrl: { classPropertyName: "storageFileDownloadUrl", publicName: "storageFileDownloadUrl", isSignal: true, isRequired: false, transformFunction: null }, embedMimeType: { classPropertyName: "embedMimeType", publicName: "embedMimeType", isSignal: true, isRequired: false, transformFunction: null }, showPreviewButton: { classPropertyName: "showPreviewButton", publicName: "showPreviewButton", isSignal: true, isRequired: false, transformFunction: null }, config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: false, transformFunction: null }, source: { classPropertyName: "source", publicName: "source", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { downloadUrlChange: "downloadUrlChange" }, ngImport: i0, template: `
5774
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DbxFirebaseStorageFileDownloadButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
5775
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: DbxFirebaseStorageFileDownloadButtonComponent, isStandalone: true, selector: "dbx-firebase-storagefile-download-button", inputs: { storageFileKey: { classPropertyName: "storageFileKey", publicName: "storageFileKey", isSignal: true, isRequired: false, transformFunction: null }, storageFileDownloadUrl: { classPropertyName: "storageFileDownloadUrl", publicName: "storageFileDownloadUrl", isSignal: true, isRequired: false, transformFunction: null }, embedMimeType: { classPropertyName: "embedMimeType", publicName: "embedMimeType", isSignal: true, isRequired: false, transformFunction: null }, showPreviewButton: { classPropertyName: "showPreviewButton", publicName: "showPreviewButton", isSignal: true, isRequired: false, transformFunction: null }, preload: { classPropertyName: "preload", publicName: "preload", isSignal: true, isRequired: false, transformFunction: null }, config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: false, transformFunction: null }, source: { classPropertyName: "source", publicName: "source", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { downloadDetailsChange: "downloadDetailsChange" }, ngImport: i0, template: `
5745
5776
  <dbx-anchor dbxActionAnchor [anchor]="anchorSignal()" dbxAction [dbxActionAutoTrigger]="preloadSignal()" dbxActionSnackbarError [dbxActionDisabled]="!storageFileKeySignal()" [dbxActionValue]="storageFileKeySignal()" [dbxActionHandler]="handleGetDownloadUrl" [dbxActionSuccessHandler]="handleGetDownloadUrlSuccess" [dbxActionErrorHandler]="handleGetDownloadUrlError">
5746
5777
  <dbx-button dbxActionButton [buttonStyle]="buttonStyleSignal()" [icon]="iconSignal()" [text]="textSignal()"></dbx-button>
5747
5778
  </dbx-anchor>
@@ -5753,7 +5784,7 @@ class DbxFirebaseStorageFileDownloadButton {
5753
5784
  }
5754
5785
  `, isInline: true, dependencies: [{ kind: "component", type: DbxButtonComponent, selector: "dbx-button", inputs: ["bar", "type", "buttonStyle", "color", "spinnerColor", "customButtonColor", "customTextColor", "customSpinnerColor", "basic", "raised", "stroked", "flat", "iconOnly", "fab", "mode"] }, { kind: "ngmodule", type: DbxActionModule }, { kind: "directive", type: i2.DbxActionDirective, selector: "dbx-action,[dbxAction],dbx-action-context,[dbxActionContext]", exportAs: ["action", "dbxAction"] }, { kind: "directive", type: i2.DbxActionHandlerDirective, selector: "[dbxActionHandler]", inputs: ["dbxActionHandler"] }, { kind: "directive", type: i2.DbxActionHandlerValueDirective, selector: "[dbxActionHandlerValue]", inputs: ["dbxActionHandlerValue"] }, { kind: "directive", type: i2.DbxActionDisabledDirective, selector: "[dbxActionDisabled]", inputs: ["dbxActionDisabled"] }, { kind: "directive", type: i2.DbxActionAutoTriggerDirective, selector: "dbxActionAutoTrigger,[dbxActionAutoTrigger]", inputs: ["triggerDebounce", "triggerThrottle", "triggerErrorThrottle", "maxErrorsForThrottle", "triggerLimit", "dbxActionAutoTrigger", "useFastTriggerPreset", "useInstantTriggerPreset"] }, { kind: "directive", type: i2.DbxActionValueDirective, selector: "dbxActionValue,[dbxActionValue]", inputs: ["dbxActionValue"] }, { kind: "directive", type: i2.DbxActionSuccessHandlerDirective, selector: "[dbxActionSuccessHandler]", inputs: ["dbxActionSuccessHandler"] }, { kind: "directive", type: i2.DbxActionErrorHandlerDirective, selector: "[dbxActionErrorHandler]", inputs: ["dbxActionErrorHandler"] }, { kind: "directive", type: i2.DbxActionButtonDirective, selector: "[dbxActionButton]" }, { kind: "directive", type: DbxActionSnackbarErrorDirective, selector: "[dbxActionSnackbarError]", inputs: ["dbxActionSnackbarError"] }, { kind: "directive", type: DbxActionDialogDirective, selector: "[dbxActionDialog]", inputs: ["dbxActionDialog", "dbxActionDialogIsModified", "dbxActionDialogIsEqual"], exportAs: ["dbxActionDialog"] }, { kind: "component", type: DbxAnchorComponent, selector: "dbx-anchor, [dbx-anchor]", inputs: ["block"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
5755
5786
  }
5756
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DbxFirebaseStorageFileDownloadButton, decorators: [{
5787
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DbxFirebaseStorageFileDownloadButtonComponent, decorators: [{
5757
5788
  type: Component,
5758
5789
  args: [{
5759
5790
  selector: 'dbx-firebase-storagefile-download-button',
@@ -6746,5 +6777,5 @@ function provideDbxFirebase(config) {
6746
6777
  * Generated bundle index. Do not edit.
6747
6778
  */
6748
6779
 
6749
- export { AbstractConfiguredDbxFirebaseLoginButtonDirective, AbstractDbxFirebaseCollectionStore, AbstractDbxFirebaseCollectionWithParentStore, AbstractDbxFirebaseDocumentStore, AbstractDbxFirebaseDocumentWithParentStore, AbstractDbxFirebaseNotificationItemWidgetComponent, AbstractRootSingleItemDbxFirebaseDocument, AbstractSingleItemDbxFirebaseDocument, AbstractSystemStateDocumentStoreAccessor, DBX_CONFIGURED_DBX_FIREBASE_LOGIN_BUTTON_COMPONENT_CONFIGURATION, DBX_FIREBASE_APP_OPTIONS_TOKEN, DBX_FIREBASE_ID_ROUTER_PARAM_DEFAULT_ID_PARAM_KEY, DBX_FIREBASE_ID_ROUTER_PARAM_DEFAULT_KEY_PARAM_KEY, DBX_FIREBASE_ID_ROUTER_PARAM_DEFAULT_USE_PARAM_VALUE, DBX_FIREBASE_LOGIN_COMPONENTS, DBX_FIREBASE_MODEL_DOES_NOT_EXIST_ERROR, DBX_FIREBASE_STORAGEFILE_DOWNLOAD_STORAGE_ACCESSOR_TOKEN, DBX_FIREBASE_STORAGE_CONTEXT_CONFIG_TOKEN, DBX_FIREBASE_STORAGE_CONTEXT_TOKEN, DBX_FIRESTORE_CONTEXT_TOKEN, DEFAULT_CONFIGURED_DBX_FIREBASE_LOGIN_BUTTON_TEMPLATE, DEFAULT_DBX_FIREBASE_ANALYTICS_USER_PROPERTIES_FACTORY, DEFAULT_DBX_FIREBASE_AUTH_SERVICE_DELEGATE, DEFAULT_DBX_FIREBASE_MODEL_HISTORY_COMPONENT_POPOVER_KEY, DEFAULT_DBX_FIREBASE_NOTIFICATION_ITEM_STORE_POPOVER_KEY, DEFAULT_FIREBASE_AUTH_LOGIN_PASSWORD_CONFIG, DEFAULT_FIREBASE_AUTH_LOGIN_PASSWORD_CONFIG_TOKEN, DEFAULT_FIREBASE_AUTH_LOGIN_PROVIDERS_TOKEN, DEFAULT_FIREBASE_AUTH_LOGIN_TERMS_COMPONENT_CLASS_TOKEN, DEFAULT_FIREBASE_COLLECTION_CHANGE_TRIGGER_FUNCTION, DEFAULT_FIREBASE_DEVELOPMENT_ENABLED_TOKEN, DEFAULT_FIREBASE_DEVELOPMENT_POPUP_KEY, DEFAULT_FIREBASE_DEVELOPMENT_SCHEDULER_ENABLED_TOKEN, DEFAULT_FIREBASE_DEVELOPMENT_WIDGET_PROVIDERS_TOKEN, DEFAULT_FIREBASE_LOGIN_METHOD_CATEGORY, DEFAULT_FIREBASE_NOTIFICATION_ITEM_WIDGET_TYPE, DEVELOPMENT_FIREBASE_SERVER_SCHEDULER_WIDGET_KEY, DbxFirebaseAnalyticsUserEventsListenerService, DbxFirebaseAnalyticsUserSource, DbxFirebaseAppCheckHttpInterceptor, DbxFirebaseAuthLoginService, DbxFirebaseAuthModule, DbxFirebaseAuthService, DbxFirebaseAuthServiceDelegate, DbxFirebaseCollectionChangeDirective, DbxFirebaseCollectionChangeTriggerInstance, DbxFirebaseCollectionHasChangeDirective, DbxFirebaseCollectionListDirective, DbxFirebaseCollectionLoaderInstance, DbxFirebaseCollectionStoreDirective, DbxFirebaseCollectionWithParentStoreDirective, DbxFirebaseDefaultFirebaseProvidersModule, DbxFirebaseDevelopmentDirective, DbxFirebaseDevelopmentModule, DbxFirebaseDevelopmentPopupComponent, DbxFirebaseDevelopmentPopupContentComponent, DbxFirebaseDevelopmentPopupContentFormComponent, DbxFirebaseDevelopmentSchedulerListComponent, DbxFirebaseDevelopmentSchedulerListViewComponent, DbxFirebaseDevelopmentSchedulerListViewItemComponent, DbxFirebaseDevelopmentSchedulerService, DbxFirebaseDevelopmentSchedulerWidgetComponent, DbxFirebaseDevelopmentService, DbxFirebaseDevelopmentWidgetService, DbxFirebaseDocumentLoaderInstance, DbxFirebaseDocumentStoreDirective, DbxFirebaseDocumentStoreIdFromTwoWayModelKeyDirective, DbxFirebaseDocumentStoreTwoWayKeyProvider, DbxFirebaseDocumentStoreTwoWayModelKeySourceDirective, DbxFirebaseEmailFormComponent, DbxFirebaseEmailRecoveryFormComponent, DbxFirebaseEmulatorModule, DbxFirebaseEmulatorService, DbxFirebaseFirestoreCollectionModule, DbxFirebaseFunctionsModule, DbxFirebaseLoginAnonymousComponent, DbxFirebaseLoginAppleComponent, DbxFirebaseLoginButtonComponent, DbxFirebaseLoginButtonContainerComponent, DbxFirebaseLoginComponent, DbxFirebaseLoginContext, DbxFirebaseLoginContextBackButtonComponent, DbxFirebaseLoginContextDirective, DbxFirebaseLoginEmailComponent, DbxFirebaseLoginEmailContentComponent, DbxFirebaseLoginFacebookComponent, DbxFirebaseLoginGitHubComponent, DbxFirebaseLoginGoogleComponent, DbxFirebaseLoginListComponent, DbxFirebaseLoginMicrosoftComponent, DbxFirebaseLoginModule, DbxFirebaseLoginTermsComponent, DbxFirebaseLoginTermsSimpleComponent, DbxFirebaseLoginTwitterComponent, DbxFirebaseModelContextService, DbxFirebaseModelHistoryComponent, DbxFirebaseModelHistoryModule, DbxFirebaseModelHistoryPopoverButtonComponent, DbxFirebaseModelHistoryPopoverComponent, DbxFirebaseModelModule, DbxFirebaseModelStoreModule, DbxFirebaseModelTrackerService, DbxFirebaseModelTypeInstanceListComponent, DbxFirebaseModelTypeInstanceListViewComponent, DbxFirebaseModelTypeInstanceListViewItemComponent, DbxFirebaseModelTypesModule, DbxFirebaseModelTypesService, DbxFirebaseModelTypesServiceConfig, DbxFirebaseModelViewedEventDirective, DbxFirebaseModule, DbxFirebaseNotificationBoxCollectionStoreDirective, DbxFirebaseNotificationBoxDocumentStoreDirective, DbxFirebaseNotificationCollectionStoreDirective, DbxFirebaseNotificationDocumentStoreDirective, DbxFirebaseNotificationItemContentComponent, DbxFirebaseNotificationItemDefaultViewComponent, DbxFirebaseNotificationItemListComponent, DbxFirebaseNotificationItemListViewComponent, DbxFirebaseNotificationItemListViewItemComponent, DbxFirebaseNotificationItemStore, DbxFirebaseNotificationItemStorePopoverButtonComponent, DbxFirebaseNotificationItemStorePopoverComponent, DbxFirebaseNotificationItemViewComponent, DbxFirebaseNotificationItemWidgetService, DbxFirebaseNotificationModule, DbxFirebaseNotificationSummaryCollectionStoreDirective, DbxFirebaseNotificationSummaryDocumentStoreDirective, DbxFirebaseNotificationTemplateService, DbxFirebaseNotificationUserCollectionStoreDirective, DbxFirebaseNotificationUserDocumentStoreDirective, DbxFirebaseParsedEmulatorsConfig, DbxFirebasePipeModule, DbxFirebaseRegisterComponent, DbxFirebaseRegisterEmailComponent, DbxFirebaseStorageFileCollectionStoreDirective, DbxFirebaseStorageFileDocumentStoreDirective, DbxFirebaseStorageFileDownloadButton, DbxFirebaseStorageFileDownloadService, DbxFirebaseStorageFileDownloadStorage, DbxFirebaseStorageFileUploadActionHandlerDirective, DbxFirebaseStorageFileUploadInitializeDocumentDirective, DbxFirebaseStorageFileUploadModule, DbxFirebaseStorageFileUploadStore, DbxFirebaseStorageFileUploadStoreDirective, DbxFirebaseStorageFileUploadSyncDirective, DbxFirebaseStorageModule, DbxFirebaseStorageService, DbxFirebaseSystemStateCollectionStoreDirective, DbxFirebaseSystemStateDocumentStoreDirective, DbxFirestoreContextService, DbxLimitedFirebaseDocumentLoaderInstance, FIREBASE_NOTIFICATION_ITEM_WIDGET_TYPE_PREFIX, FlatFirestoreModelKeyPipe, NotificationBoxCollectionStore, NotificationBoxDocumentStore, NotificationCollectionStore, NotificationDocumentStore, NotificationSummaryCollectionStore, NotificationSummaryDocumentStore, NotificationUserCollectionStore, NotificationUserDocumentStore, OAUTH_FIREBASE_LOGIN_METHOD_CATEGORY, StorageFileCollectionStore, StorageFileDocumentStore, StorageFileUploadFilesError, SystemStateCollectionStore, SystemStateDocumentStore, TwoWayFlatFirestoreModelKeyPipe, authRolesObsWithClaimsService, authUserInfoFromAuthUser, authUserStateFromFirebaseAuthServiceFunction, dbxFirebaseAuthContextInfo, dbxFirebaseCollectionChangeTrigger, dbxFirebaseCollectionChangeTriggerForStore, dbxFirebaseCollectionChangeTriggerForWatcher, dbxFirebaseCollectionChangeWatcher, dbxFirebaseCollectionLoaderInstance, dbxFirebaseCollectionLoaderInstanceWithCollection, dbxFirebaseDocumentLoaderInstance, dbxFirebaseDocumentLoaderInstanceWithAccessor, dbxFirebaseIdRouteParamRedirect, dbxFirebaseInContextFirebaseModelServiceInstance, dbxFirebaseInContextFirebaseModelServiceInstanceFactory, dbxFirebaseKeyRouteParamRedirect, dbxFirebaseModelContextServiceInfoInstanceFactory, dbxFirebaseModelTypesServiceInstance, dbxFirebaseModelTypesServiceInstancePairForKeysFactory, dbxFirebaseSourceSelectLoadSource, dbxFirebaseStorageFileDownloadServiceCustomSourceFromObs, dbxFirebaseStorageProvidersContextConfigFactory, dbxLimitedFirebaseDocumentLoaderInstance, dbxLimitedFirebaseDocumentLoaderInstanceWithAccessor, dbxWidgetTypeForNotificationTemplateType, defaultDbxFirebaseAuthServiceDelegateWithClaimsService, defaultDbxFirebaseStorageFileDownloadStorageAccessorFactory, developmentFirebaseServerSchedulerWidgetEntry, enableAppCheckDebugTokenGeneration, firebaseAuthTokenFromUser, firebaseCollectionStoreCreateFunction, firebaseCollectionStoreCrudFunction, firebaseContextServiceEntityMap, firebaseDocumentStoreCreateFunction, firebaseDocumentStoreCrudFunction, firebaseDocumentStoreDeleteFunction, firebaseDocumentStoreReadFunction, firebaseDocumentStoreUpdateFunction, importsAndExports$1 as importsAndExports, modelDoesNotExistError, provideDbxFirebase, provideDbxFirebaseAnalyticsUserEventsListenerService, provideDbxFirebaseApp, provideDbxFirebaseAuth, provideDbxFirebaseCollectionStoreDirective, provideDbxFirebaseCollectionWithParentStoreDirective, provideDbxFirebaseDevelopment, provideDbxFirebaseDocumentStoreDirective, provideDbxFirebaseDocumentStoreTwoWayKeyProvider, provideDbxFirebaseEmulator, provideDbxFirebaseFunctions, provideDbxFirebaseLogin, provideDbxFirebaseModelContextService, provideDbxFirebaseNotifications, provideDbxFirebaseStorageFileService, provideDbxFirestoreCollection, provideNotificationFirestoreCollections, provideStorageFileFirestoreCollections, provideSystemStateFirestoreCollections, providedDbxFirebaseStorage, readDbxAnalyticsUserPropertiesFromAuthUserInfo, readValueFromIdToken, setParentStoreEffect, stateFromTokenForLoggedInUserFunction, storageFileUploadFiles, storageFileUploadHandler };
6780
+ export { AbstractConfiguredDbxFirebaseLoginButtonDirective, AbstractDbxFirebaseCollectionStore, AbstractDbxFirebaseCollectionWithParentStore, AbstractDbxFirebaseDocumentStore, AbstractDbxFirebaseDocumentWithParentStore, AbstractDbxFirebaseNotificationItemWidgetComponent, AbstractRootSingleItemDbxFirebaseDocument, AbstractSingleItemDbxFirebaseDocument, AbstractSystemStateDocumentStoreAccessor, DBX_CONFIGURED_DBX_FIREBASE_LOGIN_BUTTON_COMPONENT_CONFIGURATION, DBX_FIREBASE_APP_OPTIONS_TOKEN, DBX_FIREBASE_ID_ROUTER_PARAM_DEFAULT_ID_PARAM_KEY, DBX_FIREBASE_ID_ROUTER_PARAM_DEFAULT_KEY_PARAM_KEY, DBX_FIREBASE_ID_ROUTER_PARAM_DEFAULT_USE_PARAM_VALUE, DBX_FIREBASE_LOGIN_COMPONENTS, DBX_FIREBASE_MODEL_DOES_NOT_EXIST_ERROR, DBX_FIREBASE_STORAGEFILE_DOWNLOAD_STORAGE_ACCESSOR_TOKEN, DBX_FIREBASE_STORAGE_CONTEXT_CONFIG_TOKEN, DBX_FIREBASE_STORAGE_CONTEXT_TOKEN, DBX_FIRESTORE_CONTEXT_TOKEN, DEFAULT_CONFIGURED_DBX_FIREBASE_LOGIN_BUTTON_TEMPLATE, DEFAULT_DBX_FIREBASE_ANALYTICS_USER_PROPERTIES_FACTORY, DEFAULT_DBX_FIREBASE_AUTH_SERVICE_DELEGATE, DEFAULT_DBX_FIREBASE_MODEL_HISTORY_COMPONENT_POPOVER_KEY, DEFAULT_DBX_FIREBASE_NOTIFICATION_ITEM_STORE_POPOVER_KEY, DEFAULT_FIREBASE_AUTH_LOGIN_PASSWORD_CONFIG, DEFAULT_FIREBASE_AUTH_LOGIN_PASSWORD_CONFIG_TOKEN, DEFAULT_FIREBASE_AUTH_LOGIN_PROVIDERS_TOKEN, DEFAULT_FIREBASE_AUTH_LOGIN_TERMS_COMPONENT_CLASS_TOKEN, DEFAULT_FIREBASE_COLLECTION_CHANGE_TRIGGER_FUNCTION, DEFAULT_FIREBASE_DEVELOPMENT_ENABLED_TOKEN, DEFAULT_FIREBASE_DEVELOPMENT_POPUP_KEY, DEFAULT_FIREBASE_DEVELOPMENT_SCHEDULER_ENABLED_TOKEN, DEFAULT_FIREBASE_DEVELOPMENT_WIDGET_PROVIDERS_TOKEN, DEFAULT_FIREBASE_LOGIN_METHOD_CATEGORY, DEFAULT_FIREBASE_NOTIFICATION_ITEM_WIDGET_TYPE, DEVELOPMENT_FIREBASE_SERVER_SCHEDULER_WIDGET_KEY, DbxFirebaseAnalyticsUserEventsListenerService, DbxFirebaseAnalyticsUserSource, DbxFirebaseAppCheckHttpInterceptor, DbxFirebaseAuthLoginService, DbxFirebaseAuthModule, DbxFirebaseAuthService, DbxFirebaseAuthServiceDelegate, DbxFirebaseCollectionChangeDirective, DbxFirebaseCollectionChangeTriggerInstance, DbxFirebaseCollectionHasChangeDirective, DbxFirebaseCollectionListDirective, DbxFirebaseCollectionLoaderInstance, DbxFirebaseCollectionStoreDirective, DbxFirebaseCollectionWithParentStoreDirective, DbxFirebaseDefaultFirebaseProvidersModule, DbxFirebaseDevelopmentDirective, DbxFirebaseDevelopmentModule, DbxFirebaseDevelopmentPopupComponent, DbxFirebaseDevelopmentPopupContentComponent, DbxFirebaseDevelopmentPopupContentFormComponent, DbxFirebaseDevelopmentSchedulerListComponent, DbxFirebaseDevelopmentSchedulerListViewComponent, DbxFirebaseDevelopmentSchedulerListViewItemComponent, DbxFirebaseDevelopmentSchedulerService, DbxFirebaseDevelopmentSchedulerWidgetComponent, DbxFirebaseDevelopmentService, DbxFirebaseDevelopmentWidgetService, DbxFirebaseDocumentLoaderInstance, DbxFirebaseDocumentStoreDirective, DbxFirebaseDocumentStoreIdFromTwoWayModelKeyDirective, DbxFirebaseDocumentStoreTwoWayKeyProvider, DbxFirebaseDocumentStoreTwoWayModelKeySourceDirective, DbxFirebaseEmailFormComponent, DbxFirebaseEmailRecoveryFormComponent, DbxFirebaseEmulatorModule, DbxFirebaseEmulatorService, DbxFirebaseFirestoreCollectionModule, DbxFirebaseFunctionsModule, DbxFirebaseLoginAnonymousComponent, DbxFirebaseLoginAppleComponent, DbxFirebaseLoginButtonComponent, DbxFirebaseLoginButtonContainerComponent, DbxFirebaseLoginComponent, DbxFirebaseLoginContext, DbxFirebaseLoginContextBackButtonComponent, DbxFirebaseLoginContextDirective, DbxFirebaseLoginEmailComponent, DbxFirebaseLoginEmailContentComponent, DbxFirebaseLoginFacebookComponent, DbxFirebaseLoginGitHubComponent, DbxFirebaseLoginGoogleComponent, DbxFirebaseLoginListComponent, DbxFirebaseLoginMicrosoftComponent, DbxFirebaseLoginModule, DbxFirebaseLoginTermsComponent, DbxFirebaseLoginTermsSimpleComponent, DbxFirebaseLoginTwitterComponent, DbxFirebaseModelContextService, DbxFirebaseModelHistoryComponent, DbxFirebaseModelHistoryModule, DbxFirebaseModelHistoryPopoverButtonComponent, DbxFirebaseModelHistoryPopoverComponent, DbxFirebaseModelModule, DbxFirebaseModelStoreModule, DbxFirebaseModelTrackerService, DbxFirebaseModelTypeInstanceListComponent, DbxFirebaseModelTypeInstanceListViewComponent, DbxFirebaseModelTypeInstanceListViewItemComponent, DbxFirebaseModelTypesModule, DbxFirebaseModelTypesService, DbxFirebaseModelTypesServiceConfig, DbxFirebaseModelViewedEventDirective, DbxFirebaseModule, DbxFirebaseNotificationBoxCollectionStoreDirective, DbxFirebaseNotificationBoxDocumentStoreDirective, DbxFirebaseNotificationCollectionStoreDirective, DbxFirebaseNotificationDocumentStoreDirective, DbxFirebaseNotificationItemContentComponent, DbxFirebaseNotificationItemDefaultViewComponent, DbxFirebaseNotificationItemListComponent, DbxFirebaseNotificationItemListViewComponent, DbxFirebaseNotificationItemListViewItemComponent, DbxFirebaseNotificationItemStore, DbxFirebaseNotificationItemStorePopoverButtonComponent, DbxFirebaseNotificationItemStorePopoverComponent, DbxFirebaseNotificationItemViewComponent, DbxFirebaseNotificationItemWidgetService, DbxFirebaseNotificationModule, DbxFirebaseNotificationSummaryCollectionStoreDirective, DbxFirebaseNotificationSummaryDocumentStoreDirective, DbxFirebaseNotificationTemplateService, DbxFirebaseNotificationUserCollectionStoreDirective, DbxFirebaseNotificationUserDocumentStoreDirective, DbxFirebaseParsedEmulatorsConfig, DbxFirebasePipeModule, DbxFirebaseRegisterComponent, DbxFirebaseRegisterEmailComponent, DbxFirebaseStorageFileCollectionStoreDirective, DbxFirebaseStorageFileDocumentStoreDirective, DbxFirebaseStorageFileDownloadButtonComponent, DbxFirebaseStorageFileDownloadService, DbxFirebaseStorageFileDownloadStorage, DbxFirebaseStorageFileUploadActionHandlerDirective, DbxFirebaseStorageFileUploadInitializeDocumentDirective, DbxFirebaseStorageFileUploadModule, DbxFirebaseStorageFileUploadStore, DbxFirebaseStorageFileUploadStoreDirective, DbxFirebaseStorageFileUploadSyncDirective, DbxFirebaseStorageModule, DbxFirebaseStorageService, DbxFirebaseSystemStateCollectionStoreDirective, DbxFirebaseSystemStateDocumentStoreDirective, DbxFirestoreContextService, DbxLimitedFirebaseDocumentLoaderInstance, FIREBASE_NOTIFICATION_ITEM_WIDGET_TYPE_PREFIX, FlatFirestoreModelKeyPipe, NotificationBoxCollectionStore, NotificationBoxDocumentStore, NotificationCollectionStore, NotificationDocumentStore, NotificationSummaryCollectionStore, NotificationSummaryDocumentStore, NotificationUserCollectionStore, NotificationUserDocumentStore, OAUTH_FIREBASE_LOGIN_METHOD_CATEGORY, StorageFileCollectionStore, StorageFileDocumentStore, StorageFileUploadFilesError, SystemStateCollectionStore, SystemStateDocumentStore, TwoWayFlatFirestoreModelKeyPipe, authRolesObsWithClaimsService, authUserInfoFromAuthUser, authUserStateFromFirebaseAuthServiceFunction, dbxFirebaseAuthContextInfo, dbxFirebaseCollectionChangeTrigger, dbxFirebaseCollectionChangeTriggerForStore, dbxFirebaseCollectionChangeTriggerForWatcher, dbxFirebaseCollectionChangeWatcher, dbxFirebaseCollectionLoaderInstance, dbxFirebaseCollectionLoaderInstanceWithCollection, dbxFirebaseDocumentLoaderInstance, dbxFirebaseDocumentLoaderInstanceWithAccessor, dbxFirebaseIdRouteParamRedirect, dbxFirebaseInContextFirebaseModelServiceInstance, dbxFirebaseInContextFirebaseModelServiceInstanceFactory, dbxFirebaseKeyRouteParamRedirect, dbxFirebaseModelContextServiceInfoInstanceFactory, dbxFirebaseModelTypesServiceInstance, dbxFirebaseModelTypesServiceInstancePairForKeysFactory, dbxFirebaseSourceSelectLoadSource, dbxFirebaseStorageFileDownloadServiceCustomSourceFromObs, dbxFirebaseStorageProvidersContextConfigFactory, dbxLimitedFirebaseDocumentLoaderInstance, dbxLimitedFirebaseDocumentLoaderInstanceWithAccessor, dbxWidgetTypeForNotificationTemplateType, defaultDbxFirebaseAuthServiceDelegateWithClaimsService, defaultDbxFirebaseStorageFileDownloadStorageAccessorFactory, developmentFirebaseServerSchedulerWidgetEntry, enableAppCheckDebugTokenGeneration, firebaseAuthTokenFromUser, firebaseCollectionStoreCreateFunction, firebaseCollectionStoreCrudFunction, firebaseContextServiceEntityMap, firebaseDocumentStoreCreateFunction, firebaseDocumentStoreCrudFunction, firebaseDocumentStoreDeleteFunction, firebaseDocumentStoreReadFunction, firebaseDocumentStoreUpdateFunction, importsAndExports$1 as importsAndExports, modelDoesNotExistError, provideDbxFirebase, provideDbxFirebaseAnalyticsUserEventsListenerService, provideDbxFirebaseApp, provideDbxFirebaseAuth, provideDbxFirebaseCollectionStoreDirective, provideDbxFirebaseCollectionWithParentStoreDirective, provideDbxFirebaseDevelopment, provideDbxFirebaseDocumentStoreDirective, provideDbxFirebaseDocumentStoreTwoWayKeyProvider, provideDbxFirebaseEmulator, provideDbxFirebaseFunctions, provideDbxFirebaseLogin, provideDbxFirebaseModelContextService, provideDbxFirebaseNotifications, provideDbxFirebaseStorageFileService, provideDbxFirestoreCollection, provideNotificationFirestoreCollections, provideStorageFileFirestoreCollections, provideSystemStateFirestoreCollections, providedDbxFirebaseStorage, readDbxAnalyticsUserPropertiesFromAuthUserInfo, readValueFromIdToken, setParentStoreEffect, stateFromTokenForLoggedInUserFunction, storageFileUploadFiles, storageFileUploadHandler };
6750
6781
  //# sourceMappingURL=dereekb-dbx-firebase.mjs.map