@dereekb/dbx-firebase 12.6.1 → 12.6.4
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.
- package/esm2022/lib/modules/storagefile/container/storagefile.download.button.component.mjs +35 -11
- package/fesm2022/dereekb-dbx-firebase.mjs +33 -10
- package/fesm2022/dereekb-dbx-firebase.mjs.map +1 -1
- package/lib/modules/storagefile/container/storagefile.download.button.component.d.ts +15 -7
- package/package.json +1 -1
|
@@ -6,6 +6,7 @@ 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
12
|
export class DbxFirebaseStorageFileDownloadButtonComponent {
|
|
@@ -35,9 +36,9 @@ export class DbxFirebaseStorageFileDownloadButtonComponent {
|
|
|
35
36
|
*/
|
|
36
37
|
preload = input(undefined);
|
|
37
38
|
/**
|
|
38
|
-
* Output event emitted when the download
|
|
39
|
+
* Output event emitted when the download details change.
|
|
39
40
|
*/
|
|
40
|
-
|
|
41
|
+
downloadDetailsChange = output();
|
|
41
42
|
config = input();
|
|
42
43
|
source = input();
|
|
43
44
|
source$ = toObservable(this.source);
|
|
@@ -139,7 +140,11 @@ export class DbxFirebaseStorageFileDownloadButtonComponent {
|
|
|
139
140
|
const inputEmbedMimeType = this.embedMimeType();
|
|
140
141
|
const downloadMimeType = this.downloadMimeTypeSignal();
|
|
141
142
|
const embedMimeType = inputEmbedMimeType ?? downloadMimeType;
|
|
142
|
-
return openPreview?.(srcUrl, embedMimeType) ??
|
|
143
|
+
return (openPreview?.(srcUrl, embedMimeType) ??
|
|
144
|
+
this.dbxWebFilePreviewService.openPreviewDialog({
|
|
145
|
+
srcUrl,
|
|
146
|
+
embedMimeType
|
|
147
|
+
}));
|
|
143
148
|
};
|
|
144
149
|
// Cached Url Effect
|
|
145
150
|
// When the key changes, check the cache to see if it is already available, and populate the download url if it is.
|
|
@@ -156,8 +161,9 @@ export class DbxFirebaseStorageFileDownloadButtonComponent {
|
|
|
156
161
|
allowSignalWrites: true
|
|
157
162
|
});
|
|
158
163
|
// Expiration Effect
|
|
159
|
-
|
|
160
|
-
|
|
164
|
+
downloadUrlExpiresAtDate$ = toObservable(this.downloadUrlExpiresAtSignal).pipe(map(dateFromDateOrTimeSecondsNumber), distinctUntilChanged(isSameDate), shareReplay(1));
|
|
165
|
+
downloadUrlExpiresAtDateSignal = toSignal(this.downloadUrlExpiresAtDate$);
|
|
166
|
+
downloadUrlHasExpired$ = this.downloadUrlExpiresAtDate$.pipe(switchMap((x) => {
|
|
161
167
|
let obs;
|
|
162
168
|
if (x) {
|
|
163
169
|
obs = interval(MS_IN_SECOND).pipe(map(() => isPast(x)), distinctUntilChanged(), shareReplay(1));
|
|
@@ -179,13 +185,31 @@ export class DbxFirebaseStorageFileDownloadButtonComponent {
|
|
|
179
185
|
allowSignalWrites: true
|
|
180
186
|
});
|
|
181
187
|
// Output Effect
|
|
182
|
-
|
|
188
|
+
downloadDetailsSignal = computed(() => {
|
|
183
189
|
const downloadUrl = this.downloadUrlSignal();
|
|
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();
|
|
184
207
|
const source = this.source();
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
source.downloadUrlChanged(downloadUrl);
|
|
208
|
+
if (source?.downloadDetailsChangeCallback) {
|
|
209
|
+
source.downloadDetailsChangeCallback(details);
|
|
188
210
|
}
|
|
211
|
+
}, {
|
|
212
|
+
allowSignalWrites: true
|
|
189
213
|
});
|
|
190
214
|
// Handlers
|
|
191
215
|
handleGetDownloadUrl = (value, context) => {
|
|
@@ -219,7 +243,7 @@ export class DbxFirebaseStorageFileDownloadButtonComponent {
|
|
|
219
243
|
}
|
|
220
244
|
};
|
|
221
245
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DbxFirebaseStorageFileDownloadButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
222
|
-
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: {
|
|
246
|
+
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: `
|
|
223
247
|
<dbx-anchor dbxActionAnchor [anchor]="anchorSignal()" dbxAction [dbxActionAutoTrigger]="preloadSignal()" dbxActionSnackbarError [dbxActionDisabled]="!storageFileKeySignal()" [dbxActionValue]="storageFileKeySignal()" [dbxActionHandler]="handleGetDownloadUrl" [dbxActionSuccessHandler]="handleGetDownloadUrlSuccess" [dbxActionErrorHandler]="handleGetDownloadUrlError">
|
|
224
248
|
<dbx-button dbxActionButton [buttonStyle]="buttonStyleSignal()" [icon]="iconSignal()" [text]="textSignal()"></dbx-button>
|
|
225
249
|
</dbx-anchor>
|
|
@@ -251,4 +275,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
251
275
|
standalone: true
|
|
252
276
|
}]
|
|
253
277
|
}] });
|
|
254
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmFnZWZpbGUuZG93bmxvYWQuYnV0dG9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2RieC1maXJlYmFzZS9zcmMvbGliL21vZHVsZXMvc3RvcmFnZWZpbGUvY29udGFpbmVyL3N0b3JhZ2VmaWxlLmRvd25sb2FkLmJ1dHRvbi5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNwSCxPQUFPLEVBQUUsd0JBQXdCLEVBQTJCLGVBQWUsRUFBRSwrQkFBK0IsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBa0Isd0JBQXdCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUV6TixPQUFPLEVBQXVCLCtCQUErQixFQUFtQyxNQUFNLEVBQVMsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25KLE9BQU8sRUFBRSxxQ0FBcUMsRUFBcUQsTUFBTSx5Q0FBeUMsQ0FBQztBQUVuSixPQUFPLEVBQTBCLCtCQUErQixFQUFrQyxNQUFNLGVBQWUsQ0FBQztBQUN4SCxPQUFPLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxhQUFhLEVBQUUsb0JBQW9CLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBYyxFQUFFLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUVsSCxPQUFPLEVBQUUsU0FBUyxFQUFnQixNQUFNLDBCQUEwQixDQUFDOzs7QUFnR25FLE1BQU0sT0FBTyw2Q0FBNkM7SUFDL0MsU0FBUyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUU5Qix3QkFBd0IsR0FBRyxN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ckMsQ0FBQztJQUNILENBQUMsQ0FBQztJQUVPLHlCQUF5QixHQUFHLENBQUMsS0FBYyxFQUFFLEVBQUU7UUFDdEQsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQzdCLE1BQU0sRUFBRSx5QkFBeUIsRUFBRSxHQUFHLE1BQU0sSUFBSSxFQUFFLENBQUM7UUFFbkQsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN0QyxJQUFJLENBQUMsc0JBQXNCLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzNDLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7UUFFL0MsSUFBSSx5QkFBeUIsRUFBRSxDQUFDO1lBQzlCLHlCQUF5QixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ25DLENBQUM7SUFDSCxDQUFDLENBQUM7d0dBelNTLDZDQUE2Qzs0RkFBN0MsNkNBQTZDLG1vQ0FmOUM7Ozs7Ozs7Ozs7R0FVVCw0REFDUyxrQkFBa0Isc1BBQUUsZUFBZSxpMkNBQUUsK0JBQStCLHlHQUFFLHdCQUF3QixpTEFBRSxrQkFBa0I7OzRGQUlqSCw2Q0FBNkM7a0JBakJ6RCxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSwwQ0FBMEM7b0JBQ3BELFFBQVEsRUFBRTs7Ozs7Ozs7OztHQVVUO29CQUNELE9BQU8sRUFBRSxDQUFDLGtCQUFrQixFQUFFLGVBQWUsRUFBRSwrQkFBK0IsRUFBRSx3QkFBd0IsRUFBRSxrQkFBa0IsQ0FBQztvQkFDN0gsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07b0JBQy9DLFVBQVUsRUFBRSxJQUFJO2lCQUNqQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIGNvbXB1dGVkLCBlZmZlY3QsIGluamVjdCwgaW5wdXQsIG91dHB1dCwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEYnhBY3Rpb25EaWFsb2dEaXJlY3RpdmUsIERieEFjdGlvbkRpYWxvZ0Z1bmN0aW9uLCBEYnhBY3Rpb25Nb2R1bGUsIERieEFjdGlvblNuYWNrYmFyRXJyb3JEaXJlY3RpdmUsIERieEFuY2hvckNvbXBvbmVudCwgRGJ4QnV0dG9uQ29tcG9uZW50LCBEYnhCdXR0b25TdHlsZSwgRGJ4V2ViRmlsZVByZXZpZXdTZXJ2aWNlIH0gZnJvbSAnQGRlcmVla2IvZGJ4LXdlYic7XG5pbXBvcnQgeyBTdG9yYWdlRmlsZURvd25sb2FkVXJsLCBTdG9yYWdlRmlsZUtleSB9IGZyb20gJ0BkZXJlZWtiL2ZpcmViYXNlJztcbmltcG9ydCB7IENvbnRlbnRUeXBlTWltZVR5cGUsIGRhdGVGcm9tRGF0ZU9yVGltZVNlY29uZHNOdW1iZXIsIERhdGVPclVuaXhEYXRlVGltZVNlY29uZHNOdW1iZXIsIGlzUGFzdCwgTWF5YmUsIE1TX0lOX1NFQ09ORCB9IGZyb20gJ0BkZXJlZWtiL3V0aWwnO1xuaW1wb3J0IHsgRGJ4RmlyZWJhc2VTdG9yYWdlRmlsZURvd25sb2FkU2VydmljZSwgRGJ4RmlyZWJhc2VTdG9yYWdlRmlsZURvd25sb2FkU2VydmljZUN1c3RvbVNvdXJjZSB9IGZyb20gJy4uL3NlcnZpY2Uvc3RvcmFnZWZpbGUuZG93bmxvYWQuc2VydmljZSc7XG5pbXBvcnQgeyBDbGlja2FibGVBbmNob3IgfSBmcm9tICdAZGVyZWVrYi9kYngtY29yZSc7XG5pbXBvcnQgeyBNYXliZU9ic2VydmFibGVPclZhbHVlLCBtYXliZVZhbHVlRnJvbU9ic2VydmFibGVPclZhbHVlLCBXb3JrSW5zdGFuY2UsIFdvcmtVc2luZ0NvbnRleHQgfSBmcm9tICdAZGVyZWVrYi9yeGpzJztcbmltcG9ydCB7IHRvT2JzZXJ2YWJsZSwgdG9TaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBjb21iaW5lTGF0ZXN0LCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgaW50ZXJ2YWwsIG1hcCwgT2JzZXJ2YWJsZSwgb2YsIHNoYXJlUmVwbGF5LCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IERieEZpcmViYXNlU3RvcmFnZUZpbGVEb3dubG9hZFVybFBhaXIgfSBmcm9tICcuLi9zZXJ2aWNlL3N0b3JhZ2VmaWxlLmRvd25sb2FkLnN0b3JhZ2Uuc2VydmljZSc7XG5pbXBvcnQgeyBNYXREaWFsb2csIE1hdERpYWxvZ1JlZiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5cbi8qKlxuICogU291cmNlIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBEYnhGaXJlYmFzZVN0b3JhZ2VGaWxlRG93bmxvYWRCdXR0b25Db21wb25lbnQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGJ4RmlyZWJhc2VTdG9yYWdlRmlsZURvd25sb2FkQnV0dG9uU291cmNlIHtcbiAgLyoqXG4gICAqIEEgc3RhdGljIFN0b3JhZ2VGaWxlS2V5IHRvIHVzZS5cbiAgICovXG4gIHJlYWRvbmx5IHN0b3JhZ2VGaWxlS2V5PzogTWF5YmVPYnNlcnZhYmxlT3JWYWx1ZTxTdG9yYWdlRmlsZUtleT47XG4gIC8qKlxuICAgKiBXaGV0aGVyIG9yIG5vdCB0byBwcmUtbG9hZCB0aGUgZG93bmxvYWQgdXJsIGZyb20gdGhlIHNvdXJjZS5cbiAgICpcbiAgICogRGVmYXVsdHMgdG8gZmFsc2UuXG4gICAqL1xuICByZWFkb25seSBwcmVsb2FkPzogTWF5YmU8Ym9vbGVhbj47XG4gIC8qKlxuICAgKiBUaGUgZXhwZWN0ZWQgbWltZSB0eXBlIG9mIHRoZSBTdG9yYWdlRmlsZSB0byB1c2Ugd2hlbiBwcmV2aWV3aW5nLlxuICAgKi9cbiAgcmVhZG9ubHkgc3RvcmFnZUZpbGVFbWJlZE1pbWVUeXBlPzogTWF5YmVPYnNlcnZhYmxlT3JWYWx1ZTxDb250ZW50VHlwZU1pbWVUeXBlIHwgc3RyaW5nPjtcbiAgLyoqXG4gICAqIEN1c3RvbSBzb3VyY2UgdG8gdXNlIHdpdGggdGhlIERieEZpcmViYXNlU3RvcmFnZUZpbGVEb3dubG9hZFNlcnZpY2UuIEEgbW9yZSBzaW1wbGUgYWx0ZXJuYXRpdmUgdG8gdXNpbmcgaGFuZGxlR2V0RG93bmxvYWRVcmwoKS5cbiAgICovXG4gIHJlYWRvbmx5IGN1c3RvbVNvdXJjZT86IE1heWJlPERieEZpcmViYXNlU3RvcmFnZUZpbGVEb3dubG9hZFNlcnZpY2VDdXN0b21Tb3VyY2U+O1xuICAvKipcbiAgICogT3B0aW9uYWwgY3VzdG9tIHdvcmsgdG8gdXNlIHRvIGdldCB0aGUgZG93bmxvYWQgVVJMLlxuICAgKlxuICAgKiBJZiBwcm92aWRlZCwgY3VzdG9tU291cmNlIGlzIGlnbm9yZWQuXG4gICAqL1xuICByZWFkb25seSBoYW5kbGVHZXREb3dubG9hZFVybD86IE1heWJlPFdvcmtVc2luZ0NvbnRleHQ8U3RvcmFnZUZpbGVLZXksIERieEZpcmViYXNlU3RvcmFnZUZpbGVEb3dubG9hZFVybFBhaXI+PjtcbiAgLyoqXG4gICAqIE9wdGlvbmFsIGN1c3RvbSBzdWNjZXNzIGhhbmRsZXIgZm9yIHRoZSBkb3dubG9hZCBVUkwuXG4gICAqL1xuICByZWFkb25seSBoYW5kbGVHZXREb3dubG9hZFVybFN1Y2Nlc3M/OiAodmFsdWU6IERieEZpcmViYXNlU3RvcmFnZUZpbGVEb3dubG9hZFVybFBhaXIpID0+IHZvaWQ7XG4gIC8qKlxuICAgKiBPcHRpb25hbCBjdXN0b20gZXJyb3IgaGFuZGxlciBmb3IgdGhlIGRvd25sb2FkIFVSTC5cbiAgICovXG4gIHJlYWRvbmx5IGhhbmRsZUdldERvd25sb2FkVXJsRXJyb3I/OiAoZXJyb3I6IHVua25vd24pID0+IHZvaWQ7XG4gIC8qKlxuICAgKiBDYWxsZWQgd2hlbiB0aGUgZG93bmxvYWQgVVJMIGNoYW5nZXMuXG4gICAqL1xuICByZWFkb25seSBkb3dubG9hZFVybENoYW5nZWQ/OiBNYXliZTwoZG93bmxvYWRVcmw6IE1heWJlPFN0b3JhZ2VGaWxlRG93bmxvYWRVcmw+KSA9PiB2b2lkPjtcbn1cblxuLyoqXG4gKiBDb25maWd1cmF0aW9uIGZvciB0aGUgRGJ4RmlyZWJhc2VTdG9yYWdlRmlsZURvd25sb2FkQnV0dG9uQ29tcG9uZW50LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERieEZpcmViYXNlU3RvcmFnZUZpbGVEb3dubG9hZEJ1dHRvbkNvbmZpZyB7XG4gIHJlYWRvbmx5IGJ1dHRvblN0eWxlPzogTWF5YmU8RGJ4QnV0dG9uU3R5bGU+O1xuICByZWFkb25seSBwcmV2aWV3QnV0dG9uU3R5bGU/OiBNYXliZTxEYnhCdXR0b25TdHlsZT47XG4gIC8qKlxuICAgKiBXaGV0aGVyIG9yIG5vdCB0byBzaG93IGEgcHJldmlldyBidXR0b24uXG4gICAqXG4gICAqIERlZmF1bHRzIHRvIHRydWUuXG4gICAqL1xuICByZWFkb25seSBzaG93UHJldmlld0J1dHRvbj86IE1heWJlPGJvb2xlYW4+O1xuICByZWFkb25seSBpY29uPzogTWF5YmU8c3RyaW5nPjtcbiAgcmVhZG9ubHkgdGV4dD86IE1heWJlPHN0cmluZz47XG4gIHJlYWRvbmx5IGRvd25sb2FkUmVhZHlJY29uPzogTWF5YmU8c3RyaW5nPjtcbiAgcmVhZG9ubHkgZG93bmxvYWRSZWFkeVRleHQ/OiBNYXliZTxzdHJpbmc+O1xuICByZWFkb25seSBwcmV2aWV3SWNvbj86IE1heWJlPHN0cmluZz47XG4gIHJlYWRvbmx5IHByZXZpZXdUZXh0PzogTWF5YmU8c3RyaW5nPjtcbiAgLyoqXG4gICAqIE9wdGlvbmFsIGN1c3RvbSBmdW5jdGlvbiB0byBvcGVuIGEgcHJldmlldyBkaWFsb2cuIElmIG5vdCBwcm92aWRlZCwgdGhlIGRlZmF1bHQgcHJldmlldyBkaWFsb2cgcHJvdmlkZWQgYnkgdGhlIERieFdlYkZpbGVQcmV2aWV3U2VydmljZSB3aWxsIGJlIHVzZWQuXG4gICAqXG4gICAqIFRoZSBmdW5jdGlvbiBjYW4gcmV0dXJuIHVuZGVmaW5lZCwgaW4gd2hpY2ggY2FzZSB0aGUgZGVmYXVsdCBwcmV2aWV3IGRpYWxvZyB3aWxsIGJlIHVzZWQuXG4gICAqL1xuICByZWFkb25seSBvcGVuQ3VzdG9tUHJldmlldz86IE1heWJlPChkb3dubG9hZFVybDogU3RvcmFnZUZpbGVEb3dubG9hZFVybCwgZW1iZWRNaW1lVHlwZT86IE1heWJlPHN0cmluZz4pID0+IE1heWJlPE1hdERpYWxvZ1JlZjxhbnk+Pj47XG4gIC8vIENPTVBBVFxuICAvKipcbiAgICogV2hldGhlciBvciBub3QgdG8gcHJlLWxvYWQgdGhlIGRvd25sb2FkIHVybCBmcm9tIHRoZSBzb3VyY2UuXG4gICAqXG4gICAqIERlZmF1bHRzIHRvIGZhbHNlLlxuICAgKlxuICAgKiBAZGVwcmVjYXRlZCB1c2UgdGhlIHByZWxvYWQgcHJvcGVydHkgb24gdGhlIHNvdXJjZS9EYnhGaXJlYmFzZVN0b3JhZ2VGaWxlRG93bmxvYWRCdXR0b25Tb3VyY2UgaW5zdGVhZC5cbiAgICovXG4gIHJlYWRvbmx5IHByZWxvYWQ/OiBNYXliZTxib29sZWFuPjtcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZGJ4LWZpcmViYXNlLXN0b3JhZ2VmaWxlLWRvd25sb2FkLWJ1dHRvbicsXG4gIHRlbXBsYXRlOiBgXG4gICAgPGRieC1hbmNob3IgZGJ4QWN0aW9uQW5jaG9yIFthbmNob3JdPVwiYW5jaG9yU2lnbmFsKClcIiBkYnhBY3Rpb24gW2RieEFjdGlvbkF1dG9UcmlnZ2VyXT1cInByZWxvYWRTaWduYWwoKVwiIGRieEFjdGlvblNuYWNrYmFyRXJyb3IgW2RieEFjdGlvbkRpc2FibGVkXT1cIiFzdG9yYWdlRmlsZUtleVNpZ25hbCgpXCIgW2RieEFjdGlvblZhbHVlXT1cInN0b3JhZ2VGaWxlS2V5U2lnbmFsKClcIiBbZGJ4QWN0aW9uSGFuZGxlcl09XCJoYW5kbGVHZXREb3dubG9hZFVybFwiIFtkYnhBY3Rpb25TdWNjZXNzSGFuZGxlcl09XCJoYW5kbGVHZXREb3dubG9hZFVybFN1Y2Nlc3NcIiBbZGJ4QWN0aW9uRXJyb3JIYW5kbGVyXT1cImhhbmRsZUdldERvd25sb2FkVXJsRXJyb3JcIj5cbiAgICAgIDxkYngtYnV0dG9uIGRieEFjdGlvbkJ1dHRvbiBbYnV0dG9uU3R5bGVdPVwiYnV0dG9uU3R5bGVTaWduYWwoKVwiIFtpY29uXT1cImljb25TaWduYWwoKVwiIFt0ZXh0XT1cInRleHRTaWduYWwoKVwiPjwvZGJ4LWJ1dHRvbj5cbiAgICA8L2RieC1hbmNob3I+XG4gICAgQGlmIChzaG93UHJldmlld0J1dHRvblNpZ25hbCgpKSB7XG4gICAgICA8bmctY29udGFpbmVyIGRieEFjdGlvbiBbZGJ4QWN0aW9uRGlhbG9nXT1cImhhbmRsZU9wZW5QcmV2aWV3RGlhbG9nXCIgZGJ4QWN0aW9uSGFuZGxlclZhbHVlPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImRieC1idXR0b24tc3BhY2VyXCI+PC9zcGFuPlxuICAgICAgICA8ZGJ4LWJ1dHRvbiBkYnhBY3Rpb25CdXR0b24gW2J1dHRvblN0eWxlXT1cInByZXZpZXdCdXR0b25TdHlsZVNpZ25hbCgpXCIgW2ljb25dPVwicHJldmlld0ljb25TaWduYWwoKVwiIFt0ZXh0XT1cInByZXZpZXdUZXh0U2lnbmFsKClcIj48L2RieC1idXR0b24+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICB9XG4gIGAsXG4gIGltcG9ydHM6IFtEYnhCdXR0b25Db21wb25lbnQsIERieEFjdGlvbk1vZHVsZSwgRGJ4QWN0aW9uU25hY2tiYXJFcnJvckRpcmVjdGl2ZSwgRGJ4QWN0aW9uRGlhbG9nRGlyZWN0aXZlLCBEYnhBbmNob3JDb21wb25lbnRdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgc3RhbmRhbG9uZTogdHJ1ZVxufSlcbmV4cG9ydCBjbGFzcyBEYnhGaXJlYmFzZVN0b3JhZ2VGaWxlRG93bmxvYWRCdXR0b25Db21wb25lbnQge1xuICByZWFkb25seSBtYXREaWFsb2cgPSBpbmplY3QoTWF0RGlhbG9nKTtcblxuICByZWFkb25seSBkYnhXZWJGaWxlUHJldmlld1NlcnZpY2UgPSBpbmplY3QoRGJ4V2ViRmlsZVByZXZpZXdTZXJ2aWNlKTtcbiAgcmVhZG9ubHkgZGJ4RmlyZWJhc2VTdG9yYWdlRmlsZURvd25sb2FkU2VydmljZSA9IGluamVjdChEYnhGaXJlYmFzZVN0b3JhZ2VGaWxlRG93bmxvYWRTZXJ2aWNlKTtcblxuICAvKipcbiAgICogVGhlIFN0b3JhZ2VGaWxlS2V5IHRvIHNldCB1cCB0aGUgZG93bmxvYWQgYnV0dG9uIGZvci5cbiAgICovXG4gIHJlYWRvbmx5IHN0b3JhZ2VGaWxlS2V5ID0gaW5wdXQ8TWF5YmU8U3RvcmFnZUZpbGVLZXk+PigpO1xuXG4gIC8qKlxuICAgKiBUaGUgZG93bmxvYWQgVVJMIHRvIHVzZSBmb3IgdGhlIGRvd25sb2FkIGJ1dHRvbi5cbiAgICovXG4gIHJlYWRvbmx5IHN0b3JhZ2VGaWxlRG93bmxvYWRVcmwgPSBpbnB1dDxNYXliZTxTdG9yYWdlRmlsZURvd25sb2FkVXJsPj4oKTtcblxuICAvKipcbiAgICogVGhlIE1JTUUgdHlwZSB0byB1c2UgdGhlIGVtYmVkIGNvbXBvbmVudC5cbiAgICovXG4gIHJlYWRvbmx5IGVtYmVkTWltZVR5cGUgPSBpbnB1dDxNYXliZTxDb250ZW50VHlwZU1pbWVUeXBlIHwgc3RyaW5nPj4oKTtcblxuICAvKipcbiAgICogV2hldGhlciBvciBub3QgdG8gc2hvdyBhIHByZXZpZXcgYnV0dG9uLlxuICAgKlxuICAgKiBEZWZhdWx0cyB0byB0cnVlLlxuICAgKi9cbiAgcmVhZG9ubHkgc2hvd1ByZXZpZXdCdXR0b24gPSBpbnB1dDxNYXliZTxib29sZWFuPj4odHJ1ZSk7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgb3Igbm90IHRvIHByZS1sb2FkIHRoZSBkb3dubG9hZCBVUkwgZnJvbSB0aGUgc291cmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgcHJlbG9hZCA9IGlucHV0PE1heWJlPGJvb2xlYW4+Pih1bmRlZmluZWQpO1xuXG4gIC8qKlxuICAgKiBPdXRwdXQgZXZlbnQgZW1pdHRlZCB3aGVuIHRoZSBkb3dubG9hZCBVUkwgY2hhbmdlcy5cbiAgICovXG4gIHJlYWRvbmx5IGRvd25sb2FkVXJsQ2hhbmdlID0gb3V0cHV0PE1heWJlPFN0b3JhZ2VGaWxlRG93bmxvYWRVcmw+PigpO1xuXG4gIHJlYWRvbmx5IGNvbmZpZyA9IGlucHV0PE1heWJlPERieEZpcmViYXNlU3RvcmFnZUZpbGVEb3dubG9hZEJ1dHRvbkNvbmZpZz4+KCk7XG4gIHJlYWRvbmx5IHNvdXJjZSA9IGlucHV0PE1heWJlPERieEZpcmViYXNlU3RvcmFnZUZpbGVEb3dubG9hZEJ1dHRvblNvdXJjZT4+KCk7XG5cbiAgcmVhZG9ubHkgc291cmNlJCA9IHRvT2JzZXJ2YWJsZSh0aGlzLnNvdXJjZSk7XG5cbiAgcmVhZG9ubHkgY29uZmlnU2lnbmFsID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMuY29uZmlnKCk7XG5cbiAgICBjb25zdCByZXN1bHQ6IERieEZpcmViYXNlU3RvcmFnZUZpbGVEb3dubG9hZEJ1dHRvbkNvbmZpZyA9IHtcbiAgICAgIGJ1dHRvblN0eWxlOiBjb25maWc/LmJ1dHRvblN0eWxlLFxuICAgICAgcHJldmlld0J1dHRvblN0eWxlOiBjb25maWc/LnByZXZpZXdCdXR0b25TdHlsZSxcbiAgICAgIGljb246IGNvbmZpZz8uaWNvbiA/PyAnY2xvdWRfZG93bmxvYWQnLFxuICAgICAgdGV4dDogY29uZmlnPy50ZXh0ID8/ICdTdGFydCBEb3dubG9hZCcsXG4gICAgICBkb3dubG9hZFJlYWR5SWNvbjogY29uZmlnPy5kb3dubG9hZFJlYWR5SWNvbiA/PyAnZG93bmxvYWQnLFxuICAgICAgZG93bmxvYWRSZWFkeVRleHQ6IGNvbmZpZz8uZG93bmxvYWRSZWFkeVRleHQgPz8gJ1NhdmUgRmlsZScsXG4gICAgICBwcmV2aWV3SWNvbjogY29uZmlnPy5wcmV2aWV3SWNvbiA/PyAncHJldmlldycsXG4gICAgICBwcmV2aWV3VGV4dDogY29uZmlnPy5wcmV2aWV3VGV4dCA/PyAnVmlldyBGaWxlJ1xuICAgIH07XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9KTtcblxuICByZWFkb25seSBwcmVsb2FkU2lnbmFsID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IHByZWxvYWQgPSB0aGlzLnByZWxvYWQoKTtcbiAgICBjb25zdCBzb3VyY2UgPSB0aGlzLnNvdXJjZSgpO1xuICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMuY29uZmlnU2lnbmFsKCk7XG4gICAgcmV0dXJuIHByZWxvYWQgPz8gc291cmNlPy5wcmVsb2FkID8/IGNvbmZpZy5wcmVsb2FkID8/IGZhbHNlO1xuICB9KTtcblxuICByZWFkb25seSBkb3dubG9hZFVybFNpZ25hbCA9IHNpZ25hbDxNYXliZTxTdG9yYWdlRmlsZURvd25sb2FkVXJsPj4odW5kZWZpbmVkKTtcbiAgcmVhZG9ubHkgZG93bmxvYWRNaW1lVHlwZVNpZ25hbCA9IHNpZ25hbDxNYXliZTxDb250ZW50VHlwZU1pbWVUeXBlPj4odW5kZWZpbmVkKTtcbiAgcmVhZG9ubHkgZG93bmxvYWRVcmxFeHBpcmVzQXRTaWduYWwgPSBzaWduYWw8TWF5YmU8RGF0ZU9yVW5peERhdGVUaW1lU2Vjb25kc051bWJlcj4+KHVuZGVmaW5lZCk7XG5cbiAgcmVhZG9ubHkgc3RvcmFnZUZpbGVLZXlGcm9tSW5wdXQkID0gdG9PYnNlcnZhYmxlKHRoaXMuc3RvcmFnZUZpbGVLZXkpLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoKSwgc2hhcmVSZXBsYXkoMSkpO1xuXG4gIHJlYWRvbmx5IHN0b3JhZ2VGaWxlS2V5RnJvbVNvdXJjZSQ6IE9ic2VydmFibGU8TWF5YmU8U3RvcmFnZUZpbGVLZXk+PiA9IHRoaXMuc291cmNlJC5waXBlKFxuICAgIG1hcCgoc291cmNlKSA9PiBzb3VyY2U/LnN0b3JhZ2VGaWxlS2V5KSxcbiAgICBtYXliZVZhbHVlRnJvbU9ic2VydmFibGVPclZhbHVlKCksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IHN0b3JhZ2VGaWxlS2V5JDogT2JzZXJ2YWJsZTxNYXliZTxTdG9yYWdlRmlsZUtleT4+ID0gY29tYmluZUxhdGVzdChbdGhpcy5zdG9yYWdlRmlsZUtleUZyb21JbnB1dCQsIHRoaXMuc3RvcmFnZUZpbGVLZXlGcm9tU291cmNlJF0pLnBpcGUoXG4gICAgbWFwKChbc3RvcmFnZUZpbGVLZXlGcm9tSW5wdXQsIHN0b3JhZ2VGaWxlS2V5RnJvbVNvdXJjZV0pID0+IHtcbiAgICAgIHJldHVybiBzdG9yYWdlRmlsZUtleUZyb21JbnB1dCA/PyBzdG9yYWdlRmlsZUtleUZyb21Tb3VyY2U7XG4gICAgfSksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IHN0b3JhZ2VGaWxlS2V5U2lnbmFsID0gdG9TaWduYWwodGhpcy5zdG9yYWdlRmlsZUtleSQpO1xuXG4gIHJlYWRvbmx5IGhhc0Rvd25sb2FkVXJsU2lnbmFsID0gY29tcHV0ZWQoKCkgPT4gQm9vbGVhbih0aGlzLmRvd25sb2FkVXJsU2lnbmFsKCkpKTtcblxuICByZWFkb25seSBidXR0b25TdHlsZVNpZ25hbCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBjb25maWcgPSB0aGlzLmNvbmZpZ1NpZ25hbCgpO1xuXG4gICAgY29uc3QgcmVzdWx0OiBEYnhCdXR0b25TdHlsZSA9IHtcbiAgICAgIHR5cGU6ICdyYWlzZWQnLFxuICAgICAgLi4uY29uZmlnLmJ1dHRvblN0eWxlXG4gICAgfTtcblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IHByZXZpZXdCdXR0b25TdHlsZVNpZ25hbCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBjb25maWcgPSB0aGlzLmNvbmZpZ1NpZ25hbCgpO1xuXG4gICAgY29uc3QgcmVzdWx0OiBEYnhCdXR0b25TdHlsZSA9IHtcbiAgICAgIHR5cGU6ICdyYWlzZWQnLFxuICAgICAgLi4uY29uZmlnLnByZXZpZXdCdXR0b25TdHlsZVxuICAgIH07XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9KTtcblxuICByZWFkb25seSBpY29uU2lnbmFsID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMuY29uZmlnU2lnbmFsKCk7XG4gICAgY29uc3QgaGFzRG93bmxvYWRVcmwgPSB0aGlzLmhhc0Rvd25sb2FkVXJsU2lnbmFsKCk7XG4gICAgcmV0dXJuIGhhc0Rvd25sb2FkVXJsID8gKGNvbmZpZy5kb3dubG9hZFJlYWR5SWNvbiA/PyBjb25maWcuaWNvbikgOiBjb25maWcuaWNvbjtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgdGV4dFNpZ25hbCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBjb25maWcgPSB0aGlzLmNvbmZpZ1NpZ25hbCgpO1xuICAgIGNvbnN0IGhhc0Rvd25sb2FkVXJsID0gdGhpcy5oYXNEb3dubG9hZFVybFNpZ25hbCgpO1xuICAgIHJldHVybiBoYXNEb3dubG9hZFVybCA/IChjb25maWcuZG93bmxvYWRSZWFkeVRleHQgPz8gY29uZmlnLnRleHQpIDogY29uZmlnLnRleHQ7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IHByZXZpZXdJY29uU2lnbmFsID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMuY29uZmlnU2lnbmFsKCk7XG4gICAgcmV0dXJuIGNvbmZpZy5wcmV2aWV3SWNvbjtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgcHJldmlld1RleHRTaWduYWwgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgY29uZmlnID0gdGhpcy5jb25maWdTaWduYWwoKTtcbiAgICByZXR1cm4gY29uZmlnLnByZXZpZXdUZXh0O1xuICB9KTtcblxuICByZWFkb25seSBhbmNob3JTaWduYWwgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgZG93bmxvYWRVcmwgPSB0aGlzLmRvd25sb2FkVXJsU2lnbmFsKCk7XG5cbiAgICBsZXQgcmVzdWx0OiBNYXliZTxDbGlja2FibGVBbmNob3I+O1xuXG4gICAgaWYgKGRvd25sb2FkVXJsKSB7XG4gICAgICByZXN1bHQgPSB7XG4gICAgICAgIHVybDogZG93bmxvYWRVcmxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgc3RvcmFnZUZpbGVEb3dubG9hZFVybEVmZmVjdCA9IGVmZmVjdChcbiAgICAoKSA9PiB7XG4gICAgICBjb25zdCBkb3dubG9hZFVybCA9IHRoaXMuc3RvcmFnZUZpbGVEb3dubG9hZFVybCgpO1xuXG4gICAgICBpZiAoZG93bmxvYWRVcmwgfHwgZG93bmxvYWRVcmwgPT09IG51bGwpIHtcbiAgICAgICAgdGhpcy5kb3dubG9hZFVybFNpZ25hbC5zZXQoZG93bmxvYWRVcmwpO1xuICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgYWxsb3dTaWduYWxXcml0ZXM6IHRydWVcbiAgICB9XG4gICk7XG5cbiAgLy8gUHJldmlld1xuICByZWFkb25seSBzaG93UHJldmlld0J1dHRvblNpZ25hbCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBjb25maWcgPSB0aGlzLmNvbmZpZ1NpZ25hbCgpO1xuICAgIGNvbnN0IGhhc0Rvd25sb2FkVXJsID0gdGhpcy5oYXNEb3dubG9hZFVybFNpZ25hbCgpO1xuICAgIHJldHVybiBoYXNEb3dubG9hZFVybCAmJiAoY29uZmlnLnNob3dQcmV2aWV3QnV0dG9uID8/IHRydWUpO1xuICB9KTtcblxuICByZWFkb25seSBvcGVuQ3VzdG9tUHJldmlld1NpZ25hbCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBjb25maWcgPSB0aGlzLmNvbmZpZ1NpZ25hbCgpO1xuICAgIHJldHVybiBjb25maWcub3BlbkN1c3RvbVByZXZpZXc7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IGhhbmRsZU9wZW5QcmV2aWV3RGlhbG9nOiBEYnhBY3Rpb25EaWFsb2dGdW5jdGlvbiA9ICgpID0+IHtcbiAgICBjb25zdCBvcGVuUHJldmlldyA9IHRoaXMub3BlbkN1c3RvbVByZXZpZXdTaWduYWwoKTtcblxuICAgIGNvbnN0IHNyY1VybCA9IHRoaXMuZG93bmxvYWRVcmxTaWduYWwoKSBhcyBzdHJpbmc7XG4gICAgY29uc3QgaW5wdXRFbWJlZE1pbWVUeXBlID0gdGhpcy5lbWJlZE1pbWVUeXBlKCk7XG4gICAgY29uc3QgZG93bmxvYWRNaW1lVHlwZSA9IHRoaXMuZG93bmxvYWRNaW1lVHlwZVNpZ25hbCgpO1xuICAgIGNvbnN0IGVtYmVkTWltZVR5cGUgPSBpbnB1dEVtYmVkTWltZVR5cGUgPz8gZG93bmxvYWRNaW1lVHlwZTtcblxuICAgIHJldHVybiBvcGVuUHJldmlldz8uKHNyY1VybCwgZW1iZWRNaW1lVHlwZSkgPz8gdGhpcy5kYnhXZWJGaWxlUHJldmlld1NlcnZpY2Uub3BlblByZXZpZXdEaWFsb2coc3JjVXJsLCBlbWJlZE1pbWVUeXBlKTtcbiAgfTtcblxuICAvLyBDYWNoZWQgVXJsIEVmZmVjdFxuICAvLyBXaGVuIHRoZSBrZXkgY2hhbmdlcywgY2hlY2sgdGhlIGNhY2hlIHRvIHNlZSBpZiBpdCBpcyBhbHJlYWR5IGF2YWlsYWJsZSwgYW5kIHBvcHVsYXRlIHRoZSBkb3dubG9hZCB1cmwgaWYgaXQgaXMuXG4gIHJlYWRvbmx5IGNhY2hlZFVybEZvclN0b3JhZ2VGaWxlS2V5JCA9IHRoaXMuc3RvcmFnZUZpbGVLZXkkLnBpcGUoXG4gICAgc3dpdGNoTWFwKChrZXkpID0+IChrZXkgPyB0aGlzLmRieEZpcmViYXNlU3RvcmFnZUZpbGVEb3dubG9hZFNlcnZpY2UuZ2V0Q2FjaGVkRG93bmxvYWRQYWlyRm9yU3RvcmFnZUZpbGUoa2V5KSA6IG9mKG51bGwpKSksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBjYWNoZWRVcmxGb3JTdG9yYWdlRmlsZUtleVNpZ25hbCA9IHRvU2lnbmFsKHRoaXMuY2FjaGVkVXJsRm9yU3RvcmFnZUZpbGVLZXkkKTtcblxuICByZWFkb25seSBjYWNoZWRVcmxFZmZlY3QgPSBlZmZlY3QoXG4gICAgKCkgPT4ge1xuICAgICAgY29uc3QgY2FjaGVkUGFpciA9IHRoaXMuY2FjaGVkVXJsRm9yU3RvcmFnZUZpbGVLZXlTaWduYWwoKTtcblxuICAgICAgaWYgKGNhY2hlZFBhaXIpIHtcbiAgICAgICAgdGhpcy5kb3dubG9hZFVybFNpZ25hbC5zZXQoY2FjaGVkUGFpci5kb3dubG9hZFVybCk7XG4gICAgICAgIHRoaXMuZG93bmxvYWRNaW1lVHlwZVNpZ25hbC5zZXQoY2FjaGVkUGFpci5taW1lVHlwZSk7XG4gICAgICAgIHRoaXMuZG93bmxvYWRVcmxFeHBpcmVzQXRTaWduYWwuc2V0KGNhY2hlZFBhaXIuZXhwaXJlc0F0KTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlXG4gICAgfVxuICApO1xuXG4gIC8vIEV4cGlyYXRpb24gRWZmZWN0XG4gIHJlYWRvbmx5IGRvd25sb2FkVXJsRXhwaXJlc0F0JCA9IHRvT2JzZXJ2YWJsZSh0aGlzLmRvd25sb2FkVXJsRXhwaXJlc0F0U2lnbmFsKS5waXBlKG1hcChkYXRlRnJvbURhdGVPclRpbWVTZWNvbmRzTnVtYmVyKSwgZGlzdGluY3RVbnRpbENoYW5nZWQoKSwgc2hhcmVSZXBsYXkoMSkpO1xuXG4gIHJlYWRvbmx5IGRvd25sb2FkVXJsSGFzRXhwaXJlZCQgPSB0aGlzLmRvd25sb2FkVXJsRXhwaXJlc0F0JC5waXBlKFxuICAgIHN3aXRjaE1hcCgoeCkgPT4ge1xuICAgICAgbGV0IG9iczogT2JzZXJ2YWJsZTxib29sZWFuPjtcblxuICAgICAgaWYgKHgpIHtcbiAgICAgICAgb2JzID0gaW50ZXJ2YWwoTVNfSU5fU0VDT05EKS5waXBlKFxuICAgICAgICAgIG1hcCgoKSA9PiBpc1Bhc3QoeCkpLFxuICAgICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICAgICAgc2hhcmVSZXBsYXkoMSlcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9icyA9IG9mKGZhbHNlKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG9icztcbiAgICB9KSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgZG93bmxvYWRVcmxIYXNFeHBpcmVkU2lnbmFsID0gdG9TaWduYWwodGhpcy5kb3dubG9hZFVybEhhc0V4cGlyZWQkKTtcbiAgcmVhZG9ubHkgZG93bmxvYWRVcmxIYXNFeHBpcmVkRWZmZWN0ID0gZWZmZWN0KFxuICAgICgpID0+IHtcbiAgICAgIGNvbnN0IGV4cGlyZWQgPSB0aGlzLmRvd25sb2FkVXJsSGFzRXhwaXJlZFNpZ25hbCgpO1xuXG4gICAgICBpZiAoZXhwaXJlZCkge1xuICAgICAgICB0aGlzLmRvd25sb2FkVXJsU2lnbmFsLnNldCh1bmRlZmluZWQpO1xuICAgICAgICB0aGlzLmRvd25sb2FkTWltZVR5cGVTaWduYWwuc2V0KHVuZGVmaW5lZCk7XG4gICAgICAgIHRoaXMuZG93bmxvYWRVcmxFeHBpcmVzQXRTaWduYWwuc2V0KHVuZGVmaW5lZCk7XG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICBhbGxvd1NpZ25hbFdyaXRlczogdHJ1ZVxuICAgIH1cbiAgKTtcblxuICAvLyBPdXRwdXQgRWZmZWN0XG4gIHJlYWRvbmx5IGRvd25sb2FkVXJsQ2hhbmdlRWZmZWN0ID0gZWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBkb3dubG9hZFVybCA9IHRoaXMuZG93bmxvYWRVcmxTaWduYWwoKTtcbiAgICBjb25zdCBzb3VyY2UgPSB0aGlzLnNvdXJjZSgpO1xuXG4gICAgdGhpcy5kb3dubG9hZFVybENoYW5nZS5lbWl0KGRvd25sb2FkVXJsKTtcblxuICAgIGlmIChzb3VyY2U/LmRvd25sb2FkVXJsQ2hhbmdlZCkge1xuICAgICAgc291cmNlLmRvd25sb2FkVXJsQ2hhbmdlZChkb3dubG9hZFVybCk7XG4gICAgfVxuICB9KTtcblxuICAvLyBIYW5kbGVyc1xuICByZWFkb25seSBoYW5kbGVHZXREb3dubG9hZFVybDogV29ya1VzaW5nQ29udGV4dDxTdG9yYWdlRmlsZUtleSwgRGJ4RmlyZWJhc2VTdG9yYWdlRmlsZURvd25sb2FkVXJsUGFpcj4gPSAodmFsdWU6IFN0b3JhZ2VGaWxlS2V5LCBjb250ZXh0OiBXb3JrSW5zdGFuY2U8U3RvcmFnZUZpbGVLZXksIERieEZpcmViYXNlU3RvcmFnZUZpbGVEb3dubG9hZFVybFBhaXI+KSA9PiB7XG4gICAgY29uc3Qgc291cmNlID0gdGhpcy5zb3VyY2UoKTtcbiAgICBjb25zdCB7IGN1c3RvbVNvdXJjZSwgaGFuZGxlR2V0RG93bmxvYWRVcmwgfSA9IHNvdXJjZSA/PyB7fTtcblxuICAgIGlmIChoYW5kbGVHZXREb3dubG9hZFVybCkge1xuICAgICAgaGFuZGxlR2V0RG93bmxvYWRVcmwodmFsdWUsIGNvbnRleHQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb250ZXh0LnN0YXJ0V29ya2luZ1dpdGhPYnNlcnZhYmxlKHRoaXMuZGJ4RmlyZWJhc2VTdG9yYWdlRmlsZURvd25sb2FkU2VydmljZS5kb3dubG9hZFBhaXJGb3JTdG9yYWdlRmlsZVVzaW5nU291cmNlKHZhbHVlLCBjdXN0b21Tb3VyY2UpKTtcbiAgICB9XG4gIH07XG5cbiAgcmVhZG9ubHkgaGFuZGxlR2V0RG93bmxvYWRVcmxTdWNjZXNzID0gKHZhbHVlOiBEYnhGaXJlYmFzZVN0b3JhZ2VGaWxlRG93bmxvYWRVcmxQYWlyKSA9PiB7XG4gICAgY29uc3Qgc291cmNlID0gdGhpcy5zb3VyY2UoKTtcbiAgICBjb25zdCB7IGhhbmRsZUdldERvd25sb2FkVXJsU3VjY2VzcyB9ID0gc291cmNlID8/IHt9O1xuXG4gICAgdGhpcy5kb3dubG9hZFVybFNpZ25hbC5zZXQodmFsdWUuZG93bmxvYWRVcmwpO1xuICAgIHRoaXMuZG93bmxvYWRNaW1lVHlwZVNpZ25hbC5zZXQodmFsdWUubWltZVR5cGUpO1xuICAgIHRoaXMuZG93bmxvYWRVcmxFeHBpcmVzQXRTaWduYWwuc2V0KHZhbHVlLmV4cGlyZXNBdCk7XG5cbiAgICBpZiAoaGFuZGxlR2V0RG93bmxvYWRVcmxTdWNjZXNzKSB7XG4gICAgICBoYW5kbGVHZXREb3dubG9hZFVybFN1Y2Nlc3ModmFsdWUpO1xuICAgIH1cbiAgfTtcblxuICByZWFkb25seSBoYW5kbGVHZXREb3dubG9hZFVybEVycm9yID0gKGVycm9yOiB1bmtub3duKSA9PiB7XG4gICAgY29uc3Qgc291cmNlID0gdGhpcy5zb3VyY2UoKTtcbiAgICBjb25zdCB7IGhhbmRsZUdldERvd25sb2FkVXJsRXJyb3IgfSA9IHNvdXJjZSA/PyB7fTtcblxuICAgIHRoaXMuZG93bmxvYWRVcmxTaWduYWwuc2V0KHVuZGVmaW5lZCk7XG4gICAgdGhpcy5kb3dubG9hZE1pbWVUeXBlU2lnbmFsLnNldCh1bmRlZmluZWQpO1xuICAgIHRoaXMuZG93bmxvYWRVcmxFeHBpcmVzQXRTaWduYWwuc2V0KHVuZGVmaW5lZCk7XG5cbiAgICBpZiAoaGFuZGxlR2V0RG93bmxvYWRVcmxFcnJvcikge1xuICAgICAgaGFuZGxlR2V0RG93bmxvYWRVcmxFcnJvcihlcnJvcik7XG4gICAgfVxuICB9O1xufVxuIl19
|
|
278
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmFnZWZpbGUuZG93bmxvYWQuYnV0dG9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2RieC1maXJlYmFzZS9zcmMvbGliL21vZHVsZXMvc3RvcmFnZWZpbGUvY29udGFpbmVyL3N0b3JhZ2VmaWxlLmRvd25sb2FkLmJ1dHRvbi5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNwSCxPQUFPLEVBQUUsd0JBQXdCLEVBQTJCLGVBQWUsRUFBRSwrQkFBK0IsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBa0Isd0JBQXdCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUV6TixPQUFPLEVBQXVCLCtCQUErQixFQUFtQyxNQUFNLEVBQVMsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25KLE9BQU8sRUFBRSxxQ0FBcUMsRUFBcUQsTUFBTSx5Q0FBeUMsQ0FBQztBQUVuSixPQUFPLEVBQTBCLCtCQUErQixFQUFrQyxNQUFNLGVBQWUsQ0FBQztBQUN4SCxPQUFPLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxhQUFhLEVBQUUsb0JBQW9CLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBYyxFQUFFLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUVsSCxPQUFPLEVBQUUsU0FBUyxFQUFnQixNQUFNLDBCQUEwQixDQUFDO0FBQ25FLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7OztBQXNHM0MsTUFBTSxPQUFPLDZDQUE2QztJQUMvQyxTQUFTLEdBQUcsTUFB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LEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUUvQyxJQUFJLHlCQUF5QixFQUFFLENBQUM7WUFDOUIseUJBQXlCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbkMsQ0FBQztJQUNILENBQUMsQ0FBQzt3R0F6VVMsNkNBQTZDOzRGQUE3Qyw2Q0FBNkMsMm9DQWY5Qzs7Ozs7Ozs7OztHQVVULDREQUNTLGtCQUFrQixzUEFBRSxlQUFlLGkyQ0FBRSwrQkFBK0IseUdBQUUsd0JBQXdCLGlMQUFFLGtCQUFrQjs7NEZBSWpILDZDQUE2QztrQkFqQnpELFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLDBDQUEwQztvQkFDcEQsUUFBUSxFQUFFOzs7Ozs7Ozs7O0dBVVQ7b0JBQ0QsT0FBTyxFQUFFLENBQUMsa0JBQWtCLEVBQUUsZUFBZSxFQUFFLCtCQUErQixFQUFFLHdCQUF3QixFQUFFLGtCQUFrQixDQUFDO29CQUM3SCxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtvQkFDL0MsVUFBVSxFQUFFLElBQUk7aUJBQ2pCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgY29tcHV0ZWQsIGVmZmVjdCwgaW5qZWN0LCBpbnB1dCwgb3V0cHV0LCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERieEFjdGlvbkRpYWxvZ0RpcmVjdGl2ZSwgRGJ4QWN0aW9uRGlhbG9nRnVuY3Rpb24sIERieEFjdGlvbk1vZHVsZSwgRGJ4QWN0aW9uU25hY2tiYXJFcnJvckRpcmVjdGl2ZSwgRGJ4QW5jaG9yQ29tcG9uZW50LCBEYnhCdXR0b25Db21wb25lbnQsIERieEJ1dHRvblN0eWxlLCBEYnhXZWJGaWxlUHJldmlld1NlcnZpY2UgfSBmcm9tICdAZGVyZWVrYi9kYngtd2ViJztcbmltcG9ydCB7IFN0b3JhZ2VGaWxlRG93bmxvYWRVcmwsIFN0b3JhZ2VGaWxlS2V5IH0gZnJvbSAnQGRlcmVla2IvZmlyZWJhc2UnO1xuaW1wb3J0IHsgQ29udGVudFR5cGVNaW1lVHlwZSwgZGF0ZUZyb21EYXRlT3JUaW1lU2Vjb25kc051bWJlciwgRGF0ZU9yVW5peERhdGVUaW1lU2Vjb25kc051bWJlciwgaXNQYXN0LCBNYXliZSwgTVNfSU5fU0VDT05EIH0gZnJvbSAnQGRlcmVla2IvdXRpbCc7XG5pbXBvcnQgeyBEYnhGaXJlYmFzZVN0b3JhZ2VGaWxlRG93bmxvYWRTZXJ2aWNlLCBEYnhGaXJlYmFzZVN0b3JhZ2VGaWxlRG93bmxvYWRTZXJ2aWNlQ3VzdG9tU291cmNlIH0gZnJvbSAnLi4vc2VydmljZS9zdG9yYWdlZmlsZS5kb3dubG9hZC5zZXJ2aWNlJztcbmltcG9ydCB7IENsaWNrYWJsZUFuY2hvciB9IGZyb20gJ0BkZXJlZWtiL2RieC1jb3JlJztcbmltcG9ydCB7IE1heWJlT2JzZXJ2YWJsZU9yVmFsdWUsIG1heWJlVmFsdWVGcm9tT2JzZXJ2YWJsZU9yVmFsdWUsIFdvcmtJbnN0YW5jZSwgV29ya1VzaW5nQ29udGV4dCB9IGZyb20gJ0BkZXJlZWtiL3J4anMnO1xuaW1wb3J0IHsgdG9PYnNlcnZhYmxlLCB0b1NpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IGNvbWJpbmVMYXRlc3QsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBpbnRlcnZhbCwgbWFwLCBPYnNlcnZhYmxlLCBvZiwgc2hhcmVSZXBsYXksIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgRGJ4RmlyZWJhc2VTdG9yYWdlRmlsZURvd25sb2FkVXJsUGFpciB9IGZyb20gJy4uL3NlcnZpY2Uvc3RvcmFnZWZpbGUuZG93bmxvYWQuc3RvcmFnZS5zZXJ2aWNlJztcbmltcG9ydCB7IE1hdERpYWxvZywgTWF0RGlhbG9nUmVmIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcbmltcG9ydCB7IGlzU2FtZURhdGUgfSBmcm9tICdAZGVyZWVrYi9kYXRlJztcblxuZXhwb3J0IGludGVyZmFjZSBEYnhGaXJlYmFzZVN0b3JhZ2VGaWxlRG93bmxvYWREZXRhaWxzIHtcbiAgcmVhZG9ubHkgZG93bmxvYWRVcmw6IFN0b3JhZ2VGaWxlRG93bmxvYWRVcmw7XG4gIHJlYWRvbmx5IG1pbWVUeXBlPzogTWF5YmU8Q29udGVudFR5cGVNaW1lVHlwZT47XG4gIHJlYWRvbmx5IGV4cGlyZXNBdD86IE1heWJlPERhdGU+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+IHtcbiAgICBjb25zdCBkb3dubG9hZFVybCA9IHRoaXMuZG93bmxvYWRVcmxTaWduYWwoKTtcbiAgICBjb25zdCBtaW1lVHlwZSA9IHRoaXMuZG93bmxvYWRNaW1lVHlwZVNpZ25hbCgpO1xuICAgIGNvbnN0IGV4cGlyZXNBdCA9IHRoaXMuZG93bmxvYWRVcmxFeHBpcmVzQXREYXRlU2lnbmFsKCk7XG5cbiAgICBjb25zdCBkZXRhaWxzOiBNYXliZTxEYnhGaXJlYmFzZVN0b3JhZ2VGaWxlRG93bmxvYWREZXRhaWxzPiA9XG4gICAgICBkb3dubG9hZFVybCAhPSBudWxsXG4gICAgICAgID8ge1xuICAgICAgICAgICAgZG93bmxvYWRVcmwsXG4gICAgICAgICAgICBtaW1lVHlwZSxcbiAgICAgICAgICAgIGV4cGlyZXNBdFxuICAgICAgICAgIH1cbiAgICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICByZXR1cm4gZGV0YWlscztcbiAgfSk7XG5cbiAgcmVhZG9ubHkgZG93bmxvYWREZXRhaWxzQ2hhbmdlZEVmZmVjdCA9IGVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgZGV0YWlsczogTWF5YmU8RGJ4RmlyZWJhc2VTdG9yYWdlRmlsZURvd25sb2FkRGV0YWlscz4gPSB0aGlzLmRvd25sb2FkRGV0YWlsc1NpZ25hbCgpO1xuICAgIHRoaXMuZG93bmxvYWREZXRhaWxzQ2hhbmdlLmVtaXQoZGV0YWlscyk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IHNvdXJjZURvd25sb2FkRGV0YWlsc0NoYW5nZUNhbGxiYWNrRWZmZWN0ID0gZWZmZWN0KFxuICAgICgpID0+IHtcbiAgICAgIGNvbnN0IGRldGFpbHM6IE1heWJlPERieEZpcmViYXNlU3RvcmFnZUZpbGVEb3dubG9hZERldGFpbHM+ID0gdGhpcy5kb3dubG9hZERldGFpbHNTaWduYWwoKTtcbiAgICAgIGNvbnN0IHNvdXJjZSA9IHRoaXMuc291cmNlKCk7XG5cbiAgICAgIGlmIChzb3VyY2U/LmRvd25sb2FkRGV0YWlsc0NoYW5nZUNhbGxiYWNrKSB7XG4gICAgICAgIHNvdXJjZS5kb3dubG9hZERldGFpbHNDaGFuZ2VDYWxsYmFjayhkZXRhaWxzKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlXG4gICAgfVxuICApO1xuXG4gIC8vIEhhbmRsZXJzXG4gIHJlYWRvbmx5IGhhbmRsZUdldERvd25sb2FkVXJsOiBXb3JrVXNpbmdDb250ZXh0PFN0b3JhZ2VGaWxlS2V5LCBEYnhGaXJlYmFzZVN0b3JhZ2VGaWxlRG93bmxvYWRVcmxQYWlyPiA9ICh2YWx1ZTogU3RvcmFnZUZpbGVLZXksIGNvbnRleHQ6IFdvcmtJbnN0YW5jZTxTdG9yYWdlRmlsZUtleSwgRGJ4RmlyZWJhc2VTdG9yYWdlRmlsZURvd25sb2FkVXJsUGFpcj4pID0+IHtcbiAgICBjb25zdCBzb3VyY2UgPSB0aGlzLnNvdXJjZSgpO1xuICAgIGNvbnN0IHsgY3VzdG9tU291cmNlLCBoYW5kbGVHZXREb3dubG9hZFVybCB9ID0gc291cmNlID8/IHt9O1xuXG4gICAgaWYgKGhhbmRsZUdldERvd25sb2FkVXJsKSB7XG4gICAgICBoYW5kbGVHZXREb3dubG9hZFVybCh2YWx1ZSwgY29udGV4dCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnRleHQuc3RhcnRXb3JraW5nV2l0aE9ic2VydmFibGUodGhpcy5kYnhGaXJlYmFzZVN0b3JhZ2VGaWxlRG93bmxvYWRTZXJ2aWNlLmRvd25sb2FkUGFpckZvclN0b3JhZ2VGaWxlVXNpbmdTb3VyY2UodmFsdWUsIGN1c3RvbVNvdXJjZSkpO1xuICAgIH1cbiAgfTtcblxuICByZWFkb25seSBoYW5kbGVHZXREb3dubG9hZFVybFN1Y2Nlc3MgPSAodmFsdWU6IERieEZpcmViYXNlU3RvcmFnZUZpbGVEb3dubG9hZFVybFBhaXIpID0+IHtcbiAgICBjb25zdCBzb3VyY2UgPSB0aGlzLnNvdXJjZSgpO1xuICAgIGNvbnN0IHsgaGFuZGxlR2V0RG93bmxvYWRVcmxTdWNjZXNzIH0gPSBzb3VyY2UgPz8ge307XG5cbiAgICB0aGlzLmRvd25sb2FkVXJsU2lnbmFsLnNldCh2YWx1ZS5kb3dubG9hZFVybCk7XG4gICAgdGhpcy5kb3dubG9hZE1pbWVUeXBlU2lnbmFsLnNldCh2YWx1ZS5taW1lVHlwZSk7XG4gICAgdGhpcy5kb3dubG9hZFVybEV4cGlyZXNBdFNpZ25hbC5zZXQodmFsdWUuZXhwaXJlc0F0KTtcblxuICAgIGlmIChoYW5kbGVHZXREb3dubG9hZFVybFN1Y2Nlc3MpIHtcbiAgICAgIGhhbmRsZUdldERvd25sb2FkVXJsU3VjY2Vzcyh2YWx1ZSk7XG4gICAgfVxuICB9O1xuXG4gIHJlYWRvbmx5IGhhbmRsZUdldERvd25sb2FkVXJsRXJyb3IgPSAoZXJyb3I6IHVua25vd24pID0+IHtcbiAgICBjb25zdCBzb3VyY2UgPSB0aGlzLnNvdXJjZSgpO1xuICAgIGNvbnN0IHsgaGFuZGxlR2V0RG93bmxvYWRVcmxFcnJvciB9ID0gc291cmNlID8/IHt9O1xuXG4gICAgdGhpcy5kb3dubG9hZFVybFNpZ25hbC5zZXQodW5kZWZpbmVkKTtcbiAgICB0aGlzLmRvd25sb2FkTWltZVR5cGVTaWduYWwuc2V0KHVuZGVmaW5lZCk7XG4gICAgdGhpcy5kb3dubG9hZFVybEV4cGlyZXNBdFNpZ25hbC5zZXQodW5kZWZpbmVkKTtcblxuICAgIGlmIChoYW5kbGVHZXREb3dubG9hZFVybEVycm9yKSB7XG4gICAgICBoYW5kbGVHZXREb3dubG9hZFVybEVycm9yKGVycm9yKTtcbiAgICB9XG4gIH07XG59XG4iXX0=
|
|
@@ -5567,9 +5567,9 @@ class DbxFirebaseStorageFileDownloadButtonComponent {
|
|
|
5567
5567
|
*/
|
|
5568
5568
|
preload = input(undefined);
|
|
5569
5569
|
/**
|
|
5570
|
-
* Output event emitted when the download
|
|
5570
|
+
* Output event emitted when the download details change.
|
|
5571
5571
|
*/
|
|
5572
|
-
|
|
5572
|
+
downloadDetailsChange = output();
|
|
5573
5573
|
config = input();
|
|
5574
5574
|
source = input();
|
|
5575
5575
|
source$ = toObservable(this.source);
|
|
@@ -5671,7 +5671,11 @@ class DbxFirebaseStorageFileDownloadButtonComponent {
|
|
|
5671
5671
|
const inputEmbedMimeType = this.embedMimeType();
|
|
5672
5672
|
const downloadMimeType = this.downloadMimeTypeSignal();
|
|
5673
5673
|
const embedMimeType = inputEmbedMimeType ?? downloadMimeType;
|
|
5674
|
-
return openPreview?.(srcUrl, embedMimeType) ??
|
|
5674
|
+
return (openPreview?.(srcUrl, embedMimeType) ??
|
|
5675
|
+
this.dbxWebFilePreviewService.openPreviewDialog({
|
|
5676
|
+
srcUrl,
|
|
5677
|
+
embedMimeType
|
|
5678
|
+
}));
|
|
5675
5679
|
};
|
|
5676
5680
|
// Cached Url Effect
|
|
5677
5681
|
// When the key changes, check the cache to see if it is already available, and populate the download url if it is.
|
|
@@ -5688,8 +5692,9 @@ class DbxFirebaseStorageFileDownloadButtonComponent {
|
|
|
5688
5692
|
allowSignalWrites: true
|
|
5689
5693
|
});
|
|
5690
5694
|
// Expiration Effect
|
|
5691
|
-
|
|
5692
|
-
|
|
5695
|
+
downloadUrlExpiresAtDate$ = toObservable(this.downloadUrlExpiresAtSignal).pipe(map(dateFromDateOrTimeSecondsNumber), distinctUntilChanged(isSameDate), shareReplay(1));
|
|
5696
|
+
downloadUrlExpiresAtDateSignal = toSignal(this.downloadUrlExpiresAtDate$);
|
|
5697
|
+
downloadUrlHasExpired$ = this.downloadUrlExpiresAtDate$.pipe(switchMap((x) => {
|
|
5693
5698
|
let obs;
|
|
5694
5699
|
if (x) {
|
|
5695
5700
|
obs = interval(MS_IN_SECOND).pipe(map(() => isPast(x)), distinctUntilChanged(), shareReplay(1));
|
|
@@ -5711,13 +5716,31 @@ class DbxFirebaseStorageFileDownloadButtonComponent {
|
|
|
5711
5716
|
allowSignalWrites: true
|
|
5712
5717
|
});
|
|
5713
5718
|
// Output Effect
|
|
5714
|
-
|
|
5719
|
+
downloadDetailsSignal = computed(() => {
|
|
5715
5720
|
const downloadUrl = this.downloadUrlSignal();
|
|
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();
|
|
5716
5738
|
const source = this.source();
|
|
5717
|
-
|
|
5718
|
-
|
|
5719
|
-
source.downloadUrlChanged(downloadUrl);
|
|
5739
|
+
if (source?.downloadDetailsChangeCallback) {
|
|
5740
|
+
source.downloadDetailsChangeCallback(details);
|
|
5720
5741
|
}
|
|
5742
|
+
}, {
|
|
5743
|
+
allowSignalWrites: true
|
|
5721
5744
|
});
|
|
5722
5745
|
// Handlers
|
|
5723
5746
|
handleGetDownloadUrl = (value, context) => {
|
|
@@ -5751,7 +5774,7 @@ class DbxFirebaseStorageFileDownloadButtonComponent {
|
|
|
5751
5774
|
}
|
|
5752
5775
|
};
|
|
5753
5776
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DbxFirebaseStorageFileDownloadButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
5754
|
-
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: {
|
|
5777
|
+
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: `
|
|
5755
5778
|
<dbx-anchor dbxActionAnchor [anchor]="anchorSignal()" dbxAction [dbxActionAutoTrigger]="preloadSignal()" dbxActionSnackbarError [dbxActionDisabled]="!storageFileKeySignal()" [dbxActionValue]="storageFileKeySignal()" [dbxActionHandler]="handleGetDownloadUrl" [dbxActionSuccessHandler]="handleGetDownloadUrlSuccess" [dbxActionErrorHandler]="handleGetDownloadUrlError">
|
|
5756
5779
|
<dbx-button dbxActionButton [buttonStyle]="buttonStyleSignal()" [icon]="iconSignal()" [text]="textSignal()"></dbx-button>
|
|
5757
5780
|
</dbx-anchor>
|