@magicx-eng/ai-autocomplete-angular 0.11.1 → 0.12.0
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/README.md +99 -2
- package/esm2020/lib/ai-autocomplete-dropdown/ai-autocomplete-dropdown.component.mjs +25 -6
- package/esm2020/lib/controller/ai-autocomplete.controller.mjs +36 -4
- package/esm2020/lib/internal/date-grid/date-grid.component.mjs +95 -0
- package/esm2020/lib/internal/editor-host/editor-host.directive.mjs +12 -3
- package/esm2020/lib/shared/types.mjs +1 -1
- package/esm2020/public-api.mjs +23 -2
- package/fesm2015/magicx-eng-ai-autocomplete-angular.mjs +189 -20
- package/fesm2015/magicx-eng-ai-autocomplete-angular.mjs.map +1 -1
- package/fesm2020/magicx-eng-ai-autocomplete-angular.mjs +183 -14
- package/fesm2020/magicx-eng-ai-autocomplete-angular.mjs.map +1 -1
- package/lib/ai-autocomplete-dropdown/ai-autocomplete-dropdown.component.d.ts +9 -1
- package/lib/ai-autocomplete-dropdown/ai-autocomplete-dropdown.component.d.ts.map +1 -1
- package/lib/controller/ai-autocomplete.controller.d.ts +4 -0
- package/lib/controller/ai-autocomplete.controller.d.ts.map +1 -1
- package/lib/internal/date-grid/date-grid.component.d.ts +46 -0
- package/lib/internal/date-grid/date-grid.component.d.ts.map +1 -0
- package/lib/internal/editor-host/editor-host.directive.d.ts +6 -0
- package/lib/internal/editor-host/editor-host.directive.d.ts.map +1 -1
- package/lib/shared/types.d.ts +24 -1
- package/lib/shared/types.d.ts.map +1 -1
- package/package.json +2 -2
- package/public-api.d.ts +21 -2
- package/public-api.d.ts.map +1 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { AIAutocomplete as CoreAIAutocomplete, } from "@magicx-eng/ai-autocomplete-vanilla";
|
|
1
|
+
import { AIAutocomplete as CoreAIAutocomplete, selectedIsoFromText, } from "@magicx-eng/ai-autocomplete-vanilla";
|
|
2
2
|
import { BehaviorSubject, combineLatest, map, shareReplay } from "rxjs";
|
|
3
3
|
import { deriveField } from "./observables";
|
|
4
4
|
/**
|
|
@@ -251,6 +251,18 @@ export class AIAutocompleteController {
|
|
|
251
251
|
return;
|
|
252
252
|
this.core.setActiveDropdownIndex(index);
|
|
253
253
|
}
|
|
254
|
+
/** Page the datepicker back one month. No-op unless a date pill is active. */
|
|
255
|
+
showPreviousMonth() {
|
|
256
|
+
if (this.isDestroyed)
|
|
257
|
+
return;
|
|
258
|
+
this.core.showPreviousMonth();
|
|
259
|
+
}
|
|
260
|
+
/** Page the datepicker forward one month. No-op unless a date pill is active. */
|
|
261
|
+
showNextMonth() {
|
|
262
|
+
if (this.isDestroyed)
|
|
263
|
+
return;
|
|
264
|
+
this.core.showNextMonth();
|
|
265
|
+
}
|
|
254
266
|
// === Lifecycle ===
|
|
255
267
|
/**
|
|
256
268
|
* Apply runtime changes to a subset of options. Event callbacks
|
|
@@ -321,12 +333,14 @@ function computeState(s) {
|
|
|
321
333
|
placeholderText: s.placeholderText,
|
|
322
334
|
error: s.error,
|
|
323
335
|
editingParam: s.editingParam,
|
|
336
|
+
editingIdentified: s.editingIdentified,
|
|
324
337
|
editingAnchor: s.editingAnchor,
|
|
325
338
|
caretOffset: s.caretOffset,
|
|
326
339
|
};
|
|
327
340
|
}
|
|
328
341
|
function computeDropdown(s, optionsPosition) {
|
|
329
342
|
const editingParam = s.editingParam;
|
|
343
|
+
const editingIdentified = s.editingIdentified;
|
|
330
344
|
const activeSuggestion = s.actionableSuggestions[0];
|
|
331
345
|
const dropdownPill = editingParam
|
|
332
346
|
? {
|
|
@@ -335,7 +349,16 @@ function computeDropdown(s, optionsPosition) {
|
|
|
335
349
|
required: true,
|
|
336
350
|
options: editingParam.options,
|
|
337
351
|
}
|
|
338
|
-
:
|
|
352
|
+
: editingIdentified
|
|
353
|
+
? // Answering a span the user wrote themselves: the pill names the
|
|
354
|
+
// parameter the server matched it to, so the calendar isn't unlabelled.
|
|
355
|
+
{
|
|
356
|
+
type: editingIdentified.type,
|
|
357
|
+
text: editingIdentified.type,
|
|
358
|
+
required: true,
|
|
359
|
+
options: [],
|
|
360
|
+
}
|
|
361
|
+
: null;
|
|
339
362
|
const dropdownActivePill = dropdownPill ?? activeSuggestion;
|
|
340
363
|
const dropdownPills = dropdownPill ? [dropdownPill] : s.actionableSuggestions;
|
|
341
364
|
return {
|
|
@@ -347,9 +370,18 @@ function computeDropdown(s, optionsPosition) {
|
|
|
347
370
|
isLoading: computeUiLoading(s),
|
|
348
371
|
isInputEmpty: s.text.trim().length === 0,
|
|
349
372
|
products: s.products,
|
|
350
|
-
isEditing: Boolean(editingParam),
|
|
373
|
+
isEditing: Boolean(editingParam) || Boolean(editingIdentified),
|
|
351
374
|
inSelectionAnimation: s.inSelectionAnimation,
|
|
375
|
+
// Datepicker. `s.filteredOptions` above already carries the visible
|
|
376
|
+
// month's cells rather than the suggestion's own options when this is
|
|
377
|
+
// "date" — the core swapped them in its derive layer, so the dropdown only
|
|
378
|
+
// has to know which body to draw.
|
|
379
|
+
formatType: s.activeFormatType,
|
|
380
|
+
dateView: s.dateView,
|
|
381
|
+
selectedDateIso: editingIdentified
|
|
382
|
+
? editingIdentified.iso
|
|
383
|
+
: selectedIsoFromText(editingParam?.text),
|
|
352
384
|
optionsPosition,
|
|
353
385
|
};
|
|
354
386
|
}
|
|
355
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWktYXV0b2NvbXBsZXRlLmNvbnRyb2xsZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2NvbnRyb2xsZXIvYWktYXV0b2NvbXBsZXRlLmNvbnRyb2xsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLGNBQWMsSUFBSSxrQkFBa0IsR0FPckMsTUFBTSxxQ0FBcUMsQ0FBQztBQUM3QyxPQUFPLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxHQUFHLEVBQW1CLFdBQVcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQU96RixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTVDOzs7Ozs7Ozs7Ozs7R0FZRztBQUNILE1BQU0sT0FBTyx3QkFBd0I7SUFxRm5DOzs7T0FHRztJQUNILFlBQVksT0FBd0MsRUFBRTtRQXRGdEQsNEVBQTRFO1FBQzVFLDRFQUE0RTtRQUM1RSxtRUFBbUU7UUFDbEQscUJBQWdCLEdBQUcsSUFBSSxlQUFlLENBQW9CLE9BQU8sQ0FBQyxDQUFDO1FBRTVFLGdCQUFXLEdBQUcsS0FBSyxDQUFDO1FBa0YxQixJQUFJLE9BQU8sUUFBUSxLQUFLLFdBQVcsRUFBRTtZQUNuQyxNQUFNLElBQUksS0FBSyxDQUNiLDJEQUEyRDtnQkFDekQsd0VBQXdFLENBQzNFLENBQUM7U0FDSDtRQUVELHdFQUF3RTtRQUN4RSxxRUFBcUU7UUFDckUsTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUUzQyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksa0JBQWtCLENBQUMsSUFBSSxFQUFFO1lBQ3ZDLEdBQUcsSUFBSTtZQUNQLFVBQVUsRUFBRSxVQUFVO1lBQ3RCLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxJQUFJLGNBQWM7WUFDckMsaUVBQWlFO1lBQ2pFLG9FQUFvRTtZQUNwRSwyQ0FBMkM7WUFDM0MsZUFBZSxFQUFFLElBQUksQ0FBQyxlQUFlLElBQUksT0FBTztTQUNqRCxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksZUFBZSxDQUFZLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUN0RSxzRUFBc0U7UUFDdEUsc0VBQXNFO1FBQ3RFLHVFQUF1RTtRQUN2RSwwRUFBMEU7UUFDMUUsVUFBVTtRQUNWLEVBQUU7UUFDRixxRUFBcUU7UUFDckUseUVBQXlFO1FBQ3pFLHdFQUF3RTtRQUN4RSwwRUFBMEU7UUFDMUUsc0VBQXNFO1FBQ3RFLG1FQUFtRTtRQUNuRSw0REFBNEQ7UUFDNUQsRUFBRTtRQUNGLHVFQUF1RTtRQUN2RSxxRUFBcUU7UUFDckUsd0VBQXdFO1FBQ3hFLHVFQUF1RTtRQUN2RSwyQ0FBMkM7UUFDM0MsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDOUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXO2dCQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUNuRSxDQUFDLENBQUMsQ0FBQztRQUVILGdDQUFnQztRQUNoQyx5RUFBeUU7UUFDekUsc0VBQXNFO1FBQ3RFLHlFQUF5RTtRQUN6RSxnRUFBZ0U7UUFDaEUsdUVBQXVFO1FBQ3ZFLGNBQWM7UUFDZCxJQUFJLENBQUMsS0FBSyxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDeEQsSUFBSSxDQUFDLGdCQUFnQixHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsZUFBZSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3JGLElBQUksQ0FBQyxjQUFjLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxhQUFhLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDakYsSUFBSSxDQUFDLGdCQUFnQixHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMscUJBQXFCLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDM0YsSUFBSSxDQUFDLFNBQVMsR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUN2RSxJQUFJLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDcEUsSUFBSSxDQUFDLFlBQVksR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM3RSxJQUFJLENBQUMsU0FBUyxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3ZFLElBQUksQ0FBQyxZQUFZLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1FBQzlFLElBQUksQ0FBQyxVQUFVLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztRQUNoRSxJQUFJLENBQUMsUUFBUSxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDOUQsSUFBSSxDQUFDLFVBQVUsR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ2xFLElBQUksQ0FBQyxlQUFlLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUM1RSxJQUFJLENBQUMscUJBQXFCLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1FBQ3hGLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQzlFLElBQUksQ0FBQyxNQUFNLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMxRCxJQUFJLENBQUMsYUFBYSxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDeEUsSUFBSSxDQUFDLGNBQWMsR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQzFFLElBQUksQ0FBQyxZQUFZLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUV0RSxnQ0FBZ0M7UUFDaEMscUVBQXFFO1FBQ3JFLDREQUE0RDtRQUM1RCxxRUFBcUU7UUFDckUscUVBQXFFO1FBQ3JFLG9FQUFvRTtRQUNwRSxpRUFBaUU7UUFDakUsc0VBQXNFO1FBQ3RFLDZCQUE2QjtRQUM3QixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUMvQixHQUFHLENBQUMsWUFBWSxDQUFDLEVBQ2pCLFdBQVcsQ0FBQyxFQUFFLFVBQVUsRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQy9DLENBQUM7UUFFRixJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLElBQUksT0FBTyxDQUFDLENBQUM7UUFDNUQsSUFBSSxDQUFDLFNBQVMsR0FBRyxhQUFhLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUMxRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxlQUFlLENBQUMsRUFBRSxFQUFFLENBQUMsZUFBZSxDQUFDLENBQUMsRUFBRSxlQUFlLENBQUMsQ0FBQyxFQUNsRSxXQUFXLENBQUMsRUFBRSxVQUFVLEVBQUUsQ0FBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUMvQyxDQUFDO0lBQ0osQ0FBQztJQUVELDhCQUE4QjtJQUU5Qix5RkFBeUY7SUFDekYsSUFBSSxTQUFTO1FBQ1gsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUM3QixDQUFDO0lBRUQsdUZBQXVGO0lBQ3ZGLElBQUksU0FBUztRQUNYLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQztJQUMxQixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILFFBQVE7UUFDTixPQUFPLFlBQVksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUFFRCxvREFBb0Q7SUFDcEQsRUFBRTtJQUNGLHlFQUF5RTtJQUN6RSwwRUFBMEU7SUFDMUUsMkVBQTJFO0lBQzNFLDBFQUEwRTtJQUMxRSx3RUFBd0U7SUFDeEUsd0VBQXdFO0lBQ3hFLGlFQUFpRTtJQUNqRSwyQkFBMkI7SUFFM0IsNkVBQTZFO0lBQzdFLEtBQUs7UUFDSCxJQUFJLElBQUksQ0FBQyxXQUFXO1lBQUUsT0FBTztRQUM3QixJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ3BCLENBQUM7SUFFRCxrRkFBa0Y7SUFDbEYsWUFBWSxDQUFDLE1BQXdCO1FBQ25DLElBQUksSUFBSSxDQUFDLFdBQVc7WUFBRSxPQUFPO1FBQzdCLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFFRDs7Ozs7Ozs7T0FRRztJQUNILGFBQWEsQ0FBQyxPQUFnQjtRQUM1QixJQUFJLElBQUksQ0FBQyxXQUFXO1lBQUUsT0FBTztRQUM3QixJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBRUQsaUVBQWlFO0lBQ2pFLGFBQWEsQ0FBQyxLQUFhO1FBQ3pCLElBQUksSUFBSSxDQUFDLFdBQVc7WUFBRSxPQUFPO1FBQzdCLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsY0FBYztRQUNaLElBQUksSUFBSSxDQUFDLFdBQVc7WUFBRSxPQUFPO1FBQzdCLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUVELG9GQUFvRjtJQUNwRixlQUFlO1FBQ2IsSUFBSSxJQUFJLENBQUMsV0FBVztZQUFFLE9BQU87UUFDN0IsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztJQUM5QixDQUFDO0lBRUQsMkVBQTJFO0lBQzNFLGVBQWU7UUFDYixJQUFJLElBQUksQ0FBQyxXQUFXO1lBQUUsT0FBTztRQUM3QixJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO0lBQzlCLENBQUM7SUFFRCw4Q0FBOEM7SUFDOUMsUUFBUSxDQUFDLElBQVk7UUFDbkIsSUFBSSxJQUFJLENBQUMsV0FBVztZQUFFLE9BQU87UUFDN0IsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDM0IsQ0FBQztJQUVELG1EQUFtRDtJQUNuRCxrQkFBa0IsQ0FBQyxNQUE2QjtRQUM5QyxJQUFJLElBQUksQ0FBQyxXQUFXO1lBQUUsT0FBTztRQUM3QixJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFFRCw2RUFBNkU7SUFDN0UsZ0JBQWdCLENBQUMsS0FBYTtRQUM1QixJQUFJLElBQUksQ0FBQyxXQUFXO1lBQUUsT0FBTztRQUM3QixJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFRCw0RUFBNEU7SUFDNUUsYUFBYSxDQUFDLEtBQW9CO1FBQ2hDLElBQUksSUFBSSxDQUFDLFdBQVc7WUFBRSxPQUFPO1FBQzdCLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFFRCxzQ0FBc0M7SUFDdEMsVUFBVSxDQUFDLE9BQWdCO1FBQ3pCLElBQUksSUFBSSxDQUFDLFdBQVc7WUFBRSxPQUFPO1FBQzdCLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFRCwrREFBK0Q7SUFDL0QsaUJBQWlCLENBQUMsT0FBZTtRQUMvQixJQUFJLElBQUksQ0FBQyxXQUFXO1lBQUUsT0FBTztRQUM3QixJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFFRCx5REFBeUQ7SUFDekQsWUFBWTtRQUNWLElBQUksSUFBSSxDQUFDLFdBQVc7WUFBRSxPQUFPO1FBQzdCLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVELGlFQUFpRTtJQUNqRSxxQkFBcUIsQ0FBQyxNQUFxQjtRQUN6QyxJQUFJLElBQUksQ0FBQyxXQUFXO1lBQUUsT0FBTztRQUM3QixJQUFJLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFFRCw2REFBNkQ7SUFDN0QsZUFBZSxDQUFDLE1BQXFCO1FBQ25DLElBQUksSUFBSSxDQUFDLFdBQVc7WUFBRSxPQUFPO1FBQzdCLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFRCx5RUFBeUU7SUFDekUsbUJBQW1CLENBQUMsV0FBbUI7UUFDckMsSUFBSSxJQUFJLENBQUMsV0FBVztZQUFFLE9BQU8sS0FBSyxDQUFDO1FBQ25DLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBRUQsb0VBQW9FO0lBQ3BFLHNCQUFzQixDQUFDLEtBQWE7UUFDbEMsSUFBSSxJQUFJLENBQUMsV0FBVztZQUFFLE9BQU87UUFDN0IsSUFBSSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRUQsb0JBQW9CO0lBRXBCOzs7Ozs7T0FNRztJQUNILE1BQU0sQ0FBQyxJQUFvQztRQUN6QyxJQUFJLElBQUksQ0FBQyxXQUFXO1lBQUUsT0FBTztRQUM3QixJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN2QixJQUFJLElBQUksQ0FBQyxlQUFlLEtBQUssU0FBUyxFQUFFO1lBQ3RDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1NBQ2xEO0lBQ0gsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxPQUFPO1FBQ0wsSUFBSSxJQUFJLENBQUMsV0FBVztZQUFFLE9BQU87UUFDN0IsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7UUFDeEIsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDcEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUM1QixDQUFDO0NBQ0Y7QUFFRCw0REFBNEQ7QUFFNUQ7Ozs7OztHQU1HO0FBQ0gsU0FBUyxLQUFLLENBQUksQ0FBZSxFQUFFLENBQWU7SUFDaEQsSUFBSSxDQUFDLEtBQUssQ0FBQztRQUFFLE9BQU8sSUFBSSxDQUFDO0lBQ3pCLElBQUksQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUMsTUFBTTtRQUFFLE9BQU8sS0FBSyxDQUFDO0lBQ3hDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQ2pDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFBRSxPQUFPLEtBQUssQ0FBQztLQUNqQztJQUNELE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQztBQUVELFNBQVMsZ0JBQWdCLENBQUMsQ0FBWTtJQUNwQyxPQUFPLENBQUMsQ0FBQyxTQUFTLElBQUksQ0FBQyxDQUFDLENBQUMsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLG9CQUFvQixDQUFDO0FBQ25FLENBQUM7QUFFRCxTQUFTLFlBQVksQ0FBQyxDQUFZO0lBQ2hDLE9BQU87UUFDTCxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUk7UUFDWixlQUFlLEVBQUUsQ0FBQyxDQUFDLGVBQWU7UUFDbEMsYUFBYSxFQUFFLENBQUMsQ0FBQyxhQUFhO1FBQzlCLGVBQWUsRUFBRSxDQUFDLENBQUMscUJBQXFCO1FBQ3hDLFFBQVEsRUFBRSxDQUFDLENBQUMsUUFBUTtRQUNwQixVQUFVLEVBQUUsQ0FBQyxDQUFDLFVBQVU7UUFDeEIsV0FBVyxFQUFFLENBQUMsQ0FBQyxXQUFXO1FBQzFCLFFBQVEsRUFBRSxDQUFDLENBQUMsUUFBUTtRQUNwQixXQUFXLEVBQUUsQ0FBQyxDQUFDLG1CQUFtQjtRQUNsQyxTQUFTLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDO1FBQzlCLE9BQU8sRUFBRSxDQUFDLENBQUMsT0FBTztRQUNsQixTQUFTLEVBQUUsQ0FBQyxDQUFDLFNBQVM7UUFDdEIsY0FBYyxFQUFFLENBQUMsQ0FBQyxjQUFjO1FBQ2hDLGVBQWUsRUFBRSxDQUFDLENBQUMsZUFBZTtRQUNsQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUs7UUFDZCxZQUFZLEVBQUUsQ0FBQyxDQUFDLFlBQVk7UUFDNUIsYUFBYSxFQUFFLENBQUMsQ0FBQyxhQUFhO1FBQzlCLFdBQVcsRUFBRSxDQUFDLENBQUMsV0FBVztLQUMzQixDQUFDO0FBQ0osQ0FBQztBQUVELFNBQVMsZUFBZSxDQUN0QixDQUFZLEVBQ1osZUFBa0M7SUFFbEMsTUFBTSxZQUFZLEdBQUcsQ0FBQyxDQUFDLFlBQVksQ0FBQztJQUNwQyxNQUFNLGdCQUFnQixHQUFHLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNwRCxNQUFNLFlBQVksR0FBc0IsWUFBWTtRQUNsRCxDQUFDLENBQUM7WUFDRSxJQUFJLEVBQUUsWUFBWSxDQUFDLGNBQWM7WUFDakMsSUFBSSxFQUFFLFlBQVksQ0FBQyxxQkFBcUI7WUFDeEMsUUFBUSxFQUFFLElBQUk7WUFDZCxPQUFPLEVBQUUsWUFBWSxDQUFDLE9BQU87U0FDOUI7UUFDSCxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQ1QsTUFBTSxrQkFBa0IsR0FBRyxZQUFZLElBQUksZ0JBQWdCLENBQUM7SUFDNUQsTUFBTSxhQUFhLEdBQUcsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMscUJBQXFCLENBQUM7SUFDOUUsT0FBTztRQUNMLFdBQVcsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsa0JBQWtCLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQyxlQUFlLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO1FBQzlGLFdBQVcsRUFBRSxDQUFDLENBQUMsbUJBQW1CO1FBQ2xDLE1BQU0sRUFBRSxDQUFDLENBQUMsY0FBYztRQUN4QixLQUFLLEVBQUUsYUFBYTtRQUNwQixvQkFBb0IsRUFBRSxDQUFDLENBQUMsb0JBQW9CO1FBQzVDLFNBQVMsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7UUFDOUIsWUFBWSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsTUFBTSxLQUFLLENBQUM7UUFDeEMsUUFBUSxFQUFFLENBQUMsQ0FBQyxRQUFRO1FBQ3BCLFNBQVMsRUFBRSxPQUFPLENBQUMsWUFBWSxDQUFDO1FBQ2hDLG9CQUFvQixFQUFFLENBQUMsQ0FBQyxvQkFBb0I7UUFDNUMsZUFBZTtLQUNoQixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIHR5cGUgQ29tcGxldGVkUGFyYW1TdGF0ZSxcbiAgQUlBdXRvY29tcGxldGUgYXMgQ29yZUFJQXV0b2NvbXBsZXRlLFxuICB0eXBlIENvcmVTdGF0ZSxcbiAgdHlwZSBQcm9kdWN0LFxuICB0eXBlIFNlZ21lbnQsXG4gIHR5cGUgU2tpcHBlZFBhcmFtU3RhdGUsXG4gIHR5cGUgU3VnZ2VzdGlvbixcbiAgdHlwZSBTdWdnZXN0aW9uT3B0aW9uLFxufSBmcm9tIFwiQG1hZ2ljeC1lbmcvYWktYXV0b2NvbXBsZXRlLXZhbmlsbGFcIjtcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgY29tYmluZUxhdGVzdCwgbWFwLCB0eXBlIE9ic2VydmFibGUsIHNoYXJlUmVwbGF5IH0gZnJvbSBcInJ4anNcIjtcbmltcG9ydCB0eXBlIHtcbiAgQUlBdXRvY29tcGxldGVDb250cm9sbGVyT3B0aW9ucyxcbiAgQUlBdXRvY29tcGxldGVDb250cm9sbGVyU3RhdGUsXG4gIEFJQXV0b2NvbXBsZXRlQ29udHJvbGxlclVwZGF0ZSxcbiAgQUlBdXRvY29tcGxldGVEcm9wZG93blN0YXRlLFxufSBmcm9tIFwiLi4vc2hhcmVkL3R5cGVzXCI7XG5pbXBvcnQgeyBkZXJpdmVGaWVsZCB9IGZyb20gXCIuL29ic2VydmFibGVzXCI7XG5cbi8qKlxuICogVGllciAyIGxvZ2ljIHN1cmZhY2UgZm9yIGBAbWFnaWN4LWVuZy9haS1hdXRvY29tcGxldGUtYW5ndWxhcmAg4oCUIHRoZSBBbmd1bGFyXG4gKiBlcXVpdmFsZW50IG9mIFJlYWN0J3MgYHVzZUFJQXV0b2NvbXBsZXRlKClgIGhvb2suIFdyYXBzIGEgaGVhZGxlc3NcbiAqIGBAbWFnaWN4LWVuZy9haS1hdXRvY29tcGxldGUtdmFuaWxsYWAgY29yZSBhbmQgZXhwb3NlcyBpdHMgc3RhdGUgYXMgUnhKU1xuICogb2JzZXJ2YWJsZXMgcGx1cyB0aGluIGFjdGlvbiBtZXRob2RzLlxuICpcbiAqIFRoZSBjb250cm9sbGVyIGlzIGNvbnN1bWVyLW1hbmFnZWQg4oCUIHRoZSBjb25zdW1lciBjcmVhdGVzIGl0XG4gKiB3aXRoIGBuZXdgLCBob2xkcyB0aGUgcmVmZXJlbmNlLCBhbmQgKiptdXN0IGNhbGwgYGRlc3Ryb3koKWAqKiBpbiB0aGVpclxuICogb3duIGBuZ09uRGVzdHJveWAuIFRoZSBUaWVyIDEgYDxhaS1hdXRvY29tcGxldGU+YCBjb21wb25lbnQgZG9lcyB0aGlzXG4gKiBhdXRvbWF0aWNhbGx5OyBUaWVyIDIgY29uc3VtZXJzIGRvIG5vdCBnZXQgYXV0by1jbGVhbnVwLlxuICpcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNsYXNzIEFJQXV0b2NvbXBsZXRlQ29udHJvbGxlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgY29yZTogQ29yZUFJQXV0b2NvbXBsZXRlO1xuICBwcml2YXRlIHJlYWRvbmx5IHJhd1N0YXRlJDogQmVoYXZpb3JTdWJqZWN0PENvcmVTdGF0ZT47XG4gIC8vIG9wdGlvbnNQb3NpdGlvbiBpc24ndCBwYXJ0IG9mIENvcmVTdGF0ZSAoaXQncyBhIGNvcmUgb3B0aW9uKSwgc28gdHJhY2sgaXRcbiAgLy8gaGVyZSBhbmQgZm9sZCBpdCBpbnRvIGBkcm9wZG93biRgIHNvIHRoZSBkcm9wZG93biBjYW4gcmVhZCBwbGFjZW1lbnQgZnJvbVxuICAvLyB0aGUgY29udHJvbGxlciDigJQgY29uZmlndXJlZCBvbmNlLCBrZXB0IGluIHN5bmMgdGhyb3VnaCB1cGRhdGUoKS5cbiAgcHJpdmF0ZSByZWFkb25seSBvcHRpb25zUG9zaXRpb24kID0gbmV3IEJlaGF2aW9yU3ViamVjdDxcImFib3ZlXCIgfCBcImJlbG93XCI+KFwiYmVsb3dcIik7XG4gIHByaXZhdGUgcmVhZG9ubHkgdW5zdWJzY3JpYmVDb3JlOiAoKSA9PiB2b2lkO1xuICBwcml2YXRlIGlzRGVzdHJveWVkID0gZmFsc2U7XG5cbiAgLy8gPT09IFBlci1maWVsZCBvYnNlcnZhYmxlcyA9PT1cbiAgLy8gRWFjaCBvbmUgcnVucyB0aHJvdWdoIGRlcml2ZUZpZWxkLCB3aGljaCBiYWtlcyBpbiBkaXN0aW5jdFVudGlsQ2hhbmdlZFxuICAvLyBhbmQgc2hhcmVSZXBsYXkoeyBidWZmZXJTaXplOiAxLCByZWZDb3VudDogdHJ1ZSB9KSBwZXIgwqcxOS40LlxuXG4gIC8qKiBQbGFpbi10ZXh0IGNvbnRlbnQgb2YgdGhlIGVkaXRvci4gKi9cbiAgcmVhZG9ubHkgdGV4dCQ6IE9ic2VydmFibGU8c3RyaW5nPjtcbiAgLyoqIENvbXBsZXRlZCAoYm9sZCkgcGFyYW1zIGN1cnJlbnRseSBpbiB0aGUgZWRpdG9yLiAqL1xuICByZWFkb25seSBjb21wbGV0ZWRQYXJhbXMkOiBPYnNlcnZhYmxlPENvbXBsZXRlZFBhcmFtU3RhdGVbXT47XG4gIC8qKlxuICAgKiBTdWdnZXN0aW9ucyB0aGUgdXNlciBkaXNtaXNzZWQgd2l0aCB0aGUgc2tpcCBrZXkgKOKGkikuIE5vdGhpbmcgcmVuZGVyc1xuICAgKiB0aGVtOyB0aGV5IGV4aXN0IHNvIGEgaGFuZC1yb2xsZWQgc3VibWl0IGNhbiBwYXNzIHRoZW0gdG9cbiAgICogYGJ1aWxkU3VibWl0UmVzdWx0YCBhbmQgY2FycnkgdGhlIHNhbWUgYHRleHQ6IFwic2tpcHBlZFwiYCBlbnRyaWVzIHRoZVxuICAgKiBTREsncyBvd24gcmVxdWVzdHMgZG8uXG4gICAqL1xuICByZWFkb25seSBza2lwcGVkUGFyYW1zJDogT2JzZXJ2YWJsZTxTa2lwcGVkUGFyYW1TdGF0ZVtdPjtcbiAgLyoqIEFjdGlvbmFibGUgc3VnZ2VzdGlvbiBwaWxscyAoZmlyc3Qgb25lIGlzIHRoZSBhY3RpdmUgcGlsbCkuICovXG4gIHJlYWRvbmx5IHN1Z2dlc3Rpb25QaWxscyQ6IE9ic2VydmFibGU8U3VnZ2VzdGlvbltdPjtcbiAgLyoqIFRleHQgKyBjb21wbGV0ZWQtcGFyYW0gc2VnbWVudHMgZm9yIHJlbmRlcmluZyB0aGUgZWRpdG9yIGJvZHkuICovXG4gIHJlYWRvbmx5IHNlZ21lbnRzJDogT2JzZXJ2YWJsZTxTZWdtZW50W10+O1xuICAvKiogSUQgb2YgdGhlIG1vc3QtcmVjZW50bHktcHJvbW90ZWQgcGFyYW0gKGRyaXZlcyBzaGltbWVyIGFuaW1hdGlvbikuICovXG4gIHJlYWRvbmx5IG5ld1BhcmFtSWQkOiBPYnNlcnZhYmxlPHN0cmluZyB8IG51bGw+O1xuICAvKiogQWxsIHN1Z2dlc3Rpb25zIGZyb20gdGhlIHNlcnZlciAoaW5jbHVkaW5nIG5vbi1hY3Rpb25hYmxlIG9uZXMpLiAqL1xuICByZWFkb25seSBzdWdnZXN0aW9ucyQ6IE9ic2VydmFibGU8U3VnZ2VzdGlvbltdPjtcbiAgLyoqXG4gICAqIFJlc3VsdHMgb2YgdGhlIGxhdGVzdCBwcm9kdWN0IHNlYXJjaC4gQWx3YXlzIGVtcHR5IHVubGVzcyBgcHJvZHVjdHNgIGlzXG4gICAqIGNvbmZpZ3VyZWQgb24gdGhlIGNvbnRyb2xsZXIg4oCUIHRoZSBzdHJpcCBpcyBvcHQtaW4gYW5kIGNvc3RzIG5vdGhpbmcgd2hlblxuICAgKiBpdCBpc24ndCB3aXJlZCB1cC5cbiAgICovXG4gIHJlYWRvbmx5IHByb2R1Y3RzJDogT2JzZXJ2YWJsZTxQcm9kdWN0W10+O1xuICAvKiogQ3VycmVudGx5IGhpZ2hsaWdodGVkIGRyb3Bkb3duIG9wdGlvbiBpbmRleC4gLTEgPSBub25lLiAqL1xuICByZWFkb25seSBhY3RpdmVJbmRleCQ6IE9ic2VydmFibGU8bnVtYmVyPjtcbiAgLyoqXG4gICAqIFVJLXZpc2libGUgbG9hZGluZyBmbGFnIOKAlCBzdXBwcmVzc2VkIGR1cmluZyB0aGUgcG9zdC1zZWxlY3Qgc3RyZWFrXG4gICAqIGFuaW1hdGlvbiBhbmQgZHVyaW5nIHJlLWVkaXQgKGNhY2hlZCBvcHRpb25zIHN0YXkgdmlzaWJsZSB0aGVyZSkuIFVzZVxuICAgKiB0aGlzIGluc3RlYWQgb2YgdGhlIHJhdyBjb3JlIHN0YXRlIGZvciBhbnkgbG9hZGluZy1za2VsZXRvbiBiaW5kaW5nLlxuICAgKi9cbiAgcmVhZG9ubHkgaXNMb2FkaW5nJDogT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgLyoqIFNlcnZlci1yZXBvcnRlZCBcInF1ZXJ5IGlzIGNvbXBsZXRlXCIgZmxhZy4gKi9cbiAgcmVhZG9ubHkgaXNSZWFkeSQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gIC8qKiBXaGV0aGVyIHRoZSBlZGl0b3IgY3VycmVudGx5IGhhcyBmb2N1cy4gKi9cbiAgcmVhZG9ubHkgaXNGb2N1c2VkJDogT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgLyoqIFdoZXRoZXIgdGhlIGRyb3Bkb3duIHNob3VsZCBjdXJyZW50bHkgYmUgdmlzaWJsZS4gKi9cbiAgcmVhZG9ubHkgaXNEcm9wZG93bk9wZW4kOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuICAvKipcbiAgICogV2hldGhlciB0aGUgYWN0aXZlIChsZWFkaW5nKSBwaWxsIHNob3VsZCByZW5kZXIgc2VsZWN0ZWQgKGZ1bGwgb3BhY2l0eSlcbiAgICogcmF0aGVyIHRoYW4gdGhlIGRlLWVtcGhhc2l6ZWQgYGZpcnN0YCB0aWVyLiBBdXRvIHRyaWdnZXIg4oeSIHRydWUgb25seSB3aGlsZVxuICAgKiBhIGRyb3Bkb3duIG9wdGlvbiBpcyBoaWdobGlnaHRlZDsgbWFudWFsIOKHkiB0cnVlIG9uY2UgdGhlIHBpbGwgaXMgdGFwcGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgaXNBY3RpdmVQaWxsU2VsZWN0ZWQkOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuICAvKiogU2VydmVyLXN1Z2dlc3RlZCBwbGFjZWhvbGRlciB0ZXh0IGZvciB0aGUgZWRpdG9yLiAqL1xuICByZWFkb25seSBwbGFjZWhvbGRlclRleHQkOiBPYnNlcnZhYmxlPHN0cmluZz47XG4gIC8qKiBMYXN0IGZldGNoIGVycm9yLCBvciBudWxsLiAqL1xuICByZWFkb25seSBlcnJvciQ6IE9ic2VydmFibGU8RXJyb3IgfCBudWxsPjtcbiAgLyoqIFBhcmFtIGN1cnJlbnRseSBiZWluZyByZS1lZGl0ZWQsIG9yIG51bGwuICovXG4gIHJlYWRvbmx5IGVkaXRpbmdQYXJhbSQ6IE9ic2VydmFibGU8Q29tcGxldGVkUGFyYW1TdGF0ZSB8IG51bGw+O1xuICAvKiogUGxhaW4tdGV4dCBvZmZzZXQgd2hlcmUgdGhlIGVkaXQgcmVnaW9uIHN0YXJ0cywgb3IgbnVsbC4gKi9cbiAgcmVhZG9ubHkgZWRpdGluZ0FuY2hvciQ6IE9ic2VydmFibGU8bnVtYmVyIHwgbnVsbD47XG4gIC8qKiBMaXZlIGNhcmV0IG9mZnNldCB3aXRoaW4gdGhlIGVkaXRvci4gKi9cbiAgcmVhZG9ubHkgY2FyZXRPZmZzZXQkOiBPYnNlcnZhYmxlPG51bWJlciB8IG51bGw+O1xuXG4gIC8vID09PSBDb21wb3NpdGUgb2JzZXJ2YWJsZXMgPT09XG5cbiAgLyoqXG4gICAqIFNuYXBzaG90IG9mIGV2ZXJ5IHB1YmxpYyBmaWVsZCBpbiBvbmUgb2JqZWN0LiBDb252ZW5pZW50IGZvclxuICAgKiBgKm5nSWY9XCJjdHJsLnN0YXRlJCB8IGFzeW5jIGFzIHN0YXRlXCJgIHRlbXBsYXRpbmcg4oCUIGFsaWFzZXMgYWxsIGZpZWxkc1xuICAgKiB1bmRlciBhIHNpbmdsZSBzdWJzY3JpcHRpb24gaW5zdGVhZCBvZiBtdWx0aXBsZSBgfCBhc3luY2AgcGlwZXMuXG4gICAqL1xuICByZWFkb25seSBzdGF0ZSQ6IE9ic2VydmFibGU8QUlBdXRvY29tcGxldGVDb250cm9sbGVyU3RhdGU+O1xuXG4gIC8qKlxuICAgKiBDb21wb3NpdGUgc3RhdGUgZm9yIHRoZSBkcm9wZG93biB2aWV3LiBUaWVyIDIgY29uc3VtZXJzIHNwcmVhZCB0aGlzIGludG9cbiAgICogYDxhaS1hdXRvY29tcGxldGUtZHJvcGRvd24+YDsgVGllciAxIHVzZXMgdGhlIHNhbWUgc2hhcGUgaW50ZXJuYWxseS5cbiAgICovXG4gIHJlYWRvbmx5IGRyb3Bkb3duJDogT2JzZXJ2YWJsZTxBSUF1dG9jb21wbGV0ZURyb3Bkb3duU3RhdGU+O1xuXG4gIC8qKlxuICAgKiBUaHJvd3MgaWYgaW52b2tlZCBvdXRzaWRlIGEgYnJvd3NlciBlbnZpcm9ubWVudC4gRm9yIFNTUiAvIEFuZ3VsYXJcbiAgICogVW5pdmVyc2FsLCBnYXRlIGNvbnN0cnVjdGlvbiB3aXRoIGBpc1BsYXRmb3JtQnJvd3NlcmAuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihvcHRzOiBBSUF1dG9jb21wbGV0ZUNvbnRyb2xsZXJPcHRpb25zID0ge30pIHtcbiAgICBpZiAodHlwZW9mIGRvY3VtZW50ID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiQUlBdXRvY29tcGxldGVDb250cm9sbGVyIHJlcXVpcmVzIGEgYnJvd3NlciBlbnZpcm9ubWVudC4gXCIgK1xuICAgICAgICAgIFwiRm9yIFNTUiAvIEFuZ3VsYXIgVW5pdmVyc2FsLCBnYXRlIGNvbnN0cnVjdGlvbiB3aXRoIGlzUGxhdGZvcm1Ccm93c2VyLlwiLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBIZWFkbGVzcyBtb2RlIG5ldmVyIHJlbmRlcnMgdG8gdGhlIGhvc3QsIHNvIGEgdGhyb3dhd2F5IGRpdiBpcyBmaW5lIOKAlFxuICAgIC8vIGl0J3MgcmVxdWlyZWQgYnkgdGhlIGNvcmUncyBzaWduYXR1cmUgZm9yIHN5bW1ldHJ5IHdpdGggZnVsbCBtb2RlLlxuICAgIGNvbnN0IGhvc3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuXG4gICAgdGhpcy5jb3JlID0gbmV3IENvcmVBSUF1dG9jb21wbGV0ZShob3N0LCB7XG4gICAgICAuLi5vcHRzLFxuICAgICAgcmVuZGVyTW9kZTogXCJoZWFkbGVzc1wiLFxuICAgICAgc291cmNlOiBvcHRzLnNvdXJjZSA/PyBcImhlYWRsZXNzLXNka1wiLFxuICAgICAgLy8gSGVhZGxlc3MgbW9kZSBuZXZlciByZW5kZXJzIHRoZSBkcm9wZG93biBET00sIGJ1dCB0aGUga2V5Ym9hcmRcbiAgICAgIC8vIGNvbnRyb2xsZXIgc3RpbGwgcmVhZHMgYG9wdGlvbnNQb3NpdGlvbmAgdG8gZGVjaWRlIHdoaWNoIHZlcnRpY2FsXG4gICAgICAvLyBhcnJvdyBvcGVucyB0aGUgZHJvcGRvd24gZnJvbSB0aGUgaW5wdXQuXG4gICAgICBvcHRpb25zUG9zaXRpb246IG9wdHMub3B0aW9uc1Bvc2l0aW9uID8/IFwiYmVsb3dcIixcbiAgICB9KTtcblxuICAgIHRoaXMucmF3U3RhdGUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxDb3JlU3RhdGU+KHRoaXMuY29yZS5nZXRTdGF0ZSgpKTtcbiAgICAvLyBQdXNoIHRoZSBzdG9yZSdzICpjdXJyZW50KiBzdGF0ZSwgbm90IHRoZSBzbmFwc2hvdCB0aGUgbGlzdGVuZXIgd2FzXG4gICAgLy8gaGFuZGVkLiBUaGUgY29yZSBub3RpZmllcyBsaXN0ZW5lcnMgc3luY2hyb25vdXNseSwgYW5kIHNvbWUgYWN0aW9uc1xuICAgIC8vIHRyaWdnZXIgcmVlbnRyYW50IGBzdG9yZS5zZXRgIGNhbGxzIChlLmcuIHR5cGluZyBhIG5vbi1tYXRjaGluZyBjaGFyXG4gICAgLy8gZHVyaW5nIHJlLWVkaXQgbWFrZXMgdGhlIGNvcmUgc3luY2hyb25vdXNseSBleGl0IHJlLWVkaXQgYW5kIGtpY2sgb2ZmIGFcbiAgICAvLyBmZXRjaCkuXG4gICAgLy9cbiAgICAvLyBUaGUgY29yZSdzIHN0b3JlIHVzZWQgdG8gZGVsaXZlciBzdWNoIGEgbmVzdGVkIHNldCBpbmxpbmUgYW5kIHRoZW5cbiAgICAvLyByZXN1bWUgdGhlIG91dGVyIGxpc3RlbmVyIGxvb3AsIHNvIGEgbGlzdGVuZXIgY291bGQgYmUgaGFuZGVkIGFuIG9sZGVyXG4gICAgLy8gc3RhdGUgKHN0aWxsIGluIHJlLWVkaXQpICphZnRlciogYSBuZXdlciBvbmUgKHJlLWVkaXQgZXhpdGVkKSDigJQgd2hpY2hcbiAgICAvLyByZXN1cnJlY3RlZCBhIHN0YWxlIGBlZGl0aW5nUGFyYW1gIGFuZCByZXRyaWdnZXJlZCB0aGUgZWRpdG9yJ3MgcmUtZWRpdFxuICAgIC8vIGNhcmV0LXBhcmssIHlhbmtpbmcgdGhlIGNhcmV0IGJhY2sgdG8gd2hlcmUgcmUtZWRpdGluZyBzdGFydGVkLiBUaGVcbiAgICAvLyBzdG9yZSBub3cgcXVldWVzIG5vdGlmaWNhdGlvbnMgYW5kIGRyYWlucyB0aGVtIGluIG9yZGVyLCBzbyB0aGF0XG4gICAgLy8gb3V0LW9mLW9yZGVyIGRlbGl2ZXJ5IGNhbiBubyBsb25nZXIgaGFwcGVuIGF0IHRoZSBzb3VyY2UuXG4gICAgLy9cbiAgICAvLyBSZWFkaW5nIGBnZXRTdGF0ZSgpYCBhdCBlbWlzc2lvbiB0aW1lIGlzIGtlcHQgYXMgYmVsdC1hbmQtYnJhY2VzOiBpdFxuICAgIC8vIGNvc3RzIG5vdGhpbmcgKGRpc3RpbmN0VW50aWxDaGFuZ2VkIGRvd25zdHJlYW0gZHJvcHMgdGhlIGR1cGxpY2F0ZVxuICAgIC8vIGVtaXNzaW9ucykgYW5kIGtlZXBzIHRoaXMgYnJpZGdlIGNvcnJlY3QgZm9yIGFueSBmdXR1cmUgY29uc3VtZXIgdGhhdFxuICAgIC8vIGVtaXRzIG1pZC1jYXNjYWRlLiBSZWFjdCBuZWVkcyBuZWl0aGVyLCBzaW5jZSBpdCBiYXRjaGVzIHJlbmRlcnMgYW5kXG4gICAgLy8gZ2F0ZXMgaXRzIGNhcmV0IGVmZmVjdHMgb24gZGVwZW5kZW5jaWVzLlxuICAgIHRoaXMudW5zdWJzY3JpYmVDb3JlID0gdGhpcy5jb3JlLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuaXNEZXN0cm95ZWQpIHRoaXMucmF3U3RhdGUkLm5leHQodGhpcy5jb3JlLmdldFN0YXRlKCkpO1xuICAgIH0pO1xuXG4gICAgLy8gPT09IFBlci1maWVsZCBvYnNlcnZhYmxlcyA9PT1cbiAgICAvLyBBcnJheS12YWx1ZWQgZmllbGRzIHVzZSBzaGFsbG93IGVxdWFsaXR5LiBUaGUgdmFuaWxsYSBzdG9yZSBzcHJlYWRzIG9uXG4gICAgLy8gZXZlcnkgd3JpdGUgKGBzdG9yZS5zZXQoeyBjb21wbGV0ZWRQYXJhbXM6IFsuLi5dIH0pYCksIHNvIHJlZmVyZW5jZVxuICAgIC8vIGVxdWFsaXR5IHdvdWxkIHJlLWZpcmUgZG93bnN0cmVhbSBzdWJzY3JpYmVycyBvbiBldmVyeSBzdGF0ZSB0aWNrIGV2ZW5cbiAgICAvLyB3aGVuIHRoZSBhcnJheSdzIGNvbnRlbnRzIGFyZSB1bmNoYW5nZWQuIFRoZSBvdGhlciBmaWVsZHMgYXJlXG4gICAgLy8gcHJpbWl0aXZlcyBvciBzdGFibGUgb2JqZWN0IHJlZmVyZW5jZXMsIHNvIGRlZmF1bHQgaWRlbnRpdHkgZXF1YWxpdHlcbiAgICAvLyB3b3JrcyBmaW5lLlxuICAgIHRoaXMudGV4dCQgPSBkZXJpdmVGaWVsZCh0aGlzLnJhd1N0YXRlJCwgKHMpID0+IHMudGV4dCk7XG4gICAgdGhpcy5jb21wbGV0ZWRQYXJhbXMkID0gZGVyaXZlRmllbGQodGhpcy5yYXdTdGF0ZSQsIChzKSA9PiBzLmNvbXBsZXRlZFBhcmFtcywgYXJyRXEpO1xuICAgIHRoaXMuc2tpcHBlZFBhcmFtcyQgPSBkZXJpdmVGaWVsZCh0aGlzLnJhd1N0YXRlJCwgKHMpID0+IHMuc2tpcHBlZFBhcmFtcywgYXJyRXEpO1xuICAgIHRoaXMuc3VnZ2VzdGlvblBpbGxzJCA9IGRlcml2ZUZpZWxkKHRoaXMucmF3U3RhdGUkLCAocykgPT4gcy5hY3Rpb25hYmxlU3VnZ2VzdGlvbnMsIGFyckVxKTtcbiAgICB0aGlzLnNlZ21lbnRzJCA9IGRlcml2ZUZpZWxkKHRoaXMucmF3U3RhdGUkLCAocykgPT4gcy5zZWdtZW50cywgYXJyRXEpO1xuICAgIHRoaXMubmV3UGFyYW1JZCQgPSBkZXJpdmVGaWVsZCh0aGlzLnJhd1N0YXRlJCwgKHMpID0+IHMubmV3UGFyYW1JZCk7XG4gICAgdGhpcy5zdWdnZXN0aW9ucyQgPSBkZXJpdmVGaWVsZCh0aGlzLnJhd1N0YXRlJCwgKHMpID0+IHMuc3VnZ2VzdGlvbnMsIGFyckVxKTtcbiAgICB0aGlzLnByb2R1Y3RzJCA9IGRlcml2ZUZpZWxkKHRoaXMucmF3U3RhdGUkLCAocykgPT4gcy5wcm9kdWN0cywgYXJyRXEpO1xuICAgIHRoaXMuYWN0aXZlSW5kZXgkID0gZGVyaXZlRmllbGQodGhpcy5yYXdTdGF0ZSQsIChzKSA9PiBzLmFjdGl2ZURyb3Bkb3duSW5kZXgpO1xuICAgIHRoaXMuaXNMb2FkaW5nJCA9IGRlcml2ZUZpZWxkKHRoaXMucmF3U3RhdGUkLCBjb21wdXRlVWlMb2FkaW5nKTtcbiAgICB0aGlzLmlzUmVhZHkkID0gZGVyaXZlRmllbGQodGhpcy5yYXdTdGF0ZSQsIChzKSA9PiBzLmlzUmVhZHkpO1xuICAgIHRoaXMuaXNGb2N1c2VkJCA9IGRlcml2ZUZpZWxkKHRoaXMucmF3U3RhdGUkLCAocykgPT4gcy5pc0ZvY3VzZWQpO1xuICAgIHRoaXMuaXNEcm9wZG93bk9wZW4kID0gZGVyaXZlRmllbGQodGhpcy5yYXdTdGF0ZSQsIChzKSA9PiBzLmlzRHJvcGRvd25PcGVuKTtcbiAgICB0aGlzLmlzQWN0aXZlUGlsbFNlbGVjdGVkJCA9IGRlcml2ZUZpZWxkKHRoaXMucmF3U3RhdGUkLCAocykgPT4gcy5pc0FjdGl2ZVBpbGxTZWxlY3RlZCk7XG4gICAgdGhpcy5wbGFjZWhvbGRlclRleHQkID0gZGVyaXZlRmllbGQodGhpcy5yYXdTdGF0ZSQsIChzKSA9PiBzLnBsYWNlaG9sZGVyVGV4dCk7XG4gICAgdGhpcy5lcnJvciQgPSBkZXJpdmVGaWVsZCh0aGlzLnJhd1N0YXRlJCwgKHMpID0+IHMuZXJyb3IpO1xuICAgIHRoaXMuZWRpdGluZ1BhcmFtJCA9IGRlcml2ZUZpZWxkKHRoaXMucmF3U3RhdGUkLCAocykgPT4gcy5lZGl0aW5nUGFyYW0pO1xuICAgIHRoaXMuZWRpdGluZ0FuY2hvciQgPSBkZXJpdmVGaWVsZCh0aGlzLnJhd1N0YXRlJCwgKHMpID0+IHMuZWRpdGluZ0FuY2hvcik7XG4gICAgdGhpcy5jYXJldE9mZnNldCQgPSBkZXJpdmVGaWVsZCh0aGlzLnJhd1N0YXRlJCwgKHMpID0+IHMuY2FyZXRPZmZzZXQpO1xuXG4gICAgLy8gPT09IENvbXBvc2l0ZSBvYnNlcnZhYmxlcyA9PT1cbiAgICAvLyBQcm9qZWN0IGRpcmVjdGx5IG9mZiBgcmF3U3RhdGUkYCB3aXRoIGEgc2luZ2xlIG1hcCgpIHNvIGVhY2ggc3RvcmVcbiAgICAvLyB0aWNrIHByb2R1Y2VzIGV4YWN0bHkgT05FIGNvaGVyZW50IHN0YXRlJCBlbWlzc2lvbi4gVXNpbmdcbiAgICAvLyBgY29tYmluZUxhdGVzdGAgb3ZlciB0aGUgcGVyLWZpZWxkIG9ic2VydmFibGVzIGhlcmUgd291bGQgZmlyZSBvbmVcbiAgICAvLyBlbWlzc2lvbiBwZXIgaW5uZXItc291cmNlIHRpY2sgKHVwIHRvIE4gcGVyIHN0b3JlIHVwZGF0ZSksIGFuZCB0aGVcbiAgICAvLyBlZGl0b3ItaG9zdCBkaXJlY3RpdmUncyBwb3N0LXByb21vdGUgcmVmb2N1cyB3b3VsZCBydW4gYWdhaW5zdCBhblxuICAgIC8vIGludGVybWVkaWF0ZSBzdGF0ZSB3aGVyZSBgbmV3UGFyYW1JZGAgd2FzIHNldCBidXQgYHNlZ21lbnRzYCAvXG4gICAgLy8gYGNhcmV0T2Zmc2V0YCBzdGlsbCBoZWxkIHRoZWlyIG9sZCB2YWx1ZXMg4oCUIGxlYXZpbmcgdGhlIGNhcmV0IHN0dWNrXG4gICAgLy8gYXQgdGhlIHByZS1jbGljayBwb3NpdGlvbi5cbiAgICB0aGlzLnN0YXRlJCA9IHRoaXMucmF3U3RhdGUkLnBpcGUoXG4gICAgICBtYXAoY29tcHV0ZVN0YXRlKSxcbiAgICAgIHNoYXJlUmVwbGF5KHsgYnVmZmVyU2l6ZTogMSwgcmVmQ291bnQ6IHRydWUgfSksXG4gICAgKTtcblxuICAgIHRoaXMub3B0aW9uc1Bvc2l0aW9uJC5uZXh0KG9wdHMub3B0aW9uc1Bvc2l0aW9uID8/IFwiYmVsb3dcIik7XG4gICAgdGhpcy5kcm9wZG93biQgPSBjb21iaW5lTGF0ZXN0KFt0aGlzLnJhd1N0YXRlJCwgdGhpcy5vcHRpb25zUG9zaXRpb24kXSkucGlwZShcbiAgICAgIG1hcCgoW3MsIG9wdGlvbnNQb3NpdGlvbl0pID0+IGNvbXB1dGVEcm9wZG93bihzLCBvcHRpb25zUG9zaXRpb24pKSxcbiAgICAgIHNoYXJlUmVwbGF5KHsgYnVmZmVyU2l6ZTogMSwgcmVmQ291bnQ6IHRydWUgfSksXG4gICAgKTtcbiAgfVxuXG4gIC8vID09PSBSZWFkLW9ubHkgYWNjZXNzb3JzID09PVxuXG4gIC8qKiBTdGFibGUgQVJJQSBsaXN0Ym94IElEIGZvciB0aGUgZHJvcGRvd24uIFBhc3MgdG8gYDx0ZXh0YXJlYSBhcmlhLWNvbnRyb2xzPVwiLi4uXCI+YC4gKi9cbiAgZ2V0IGxpc3Rib3hJZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmNvcmUubGlzdGJveElkO1xuICB9XG5cbiAgLyoqIFdoZXRoZXIgYGRlc3Ryb3koKWAgaGFzIGJlZW4gY2FsbGVkLiBBZnRlciBkZXN0cnVjdGlvbiBhbGwgYWN0aW9uIG1ldGhvZHMgbm8tb3AuICovXG4gIGdldCBkZXN0cm95ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNEZXN0cm95ZWQ7XG4gIH1cblxuICAvKipcbiAgICogU3luY2hyb25vdXMgc25hcHNob3Qgb2YgdGhlIGNvbnRyb2xsZXIncyBjdXJyZW50IHB1YmxpYyBzdGF0ZS4gTWlycm9yc1xuICAgKiB0aGUgbGF0ZXN0IGVtaXNzaW9uIG9mIGBzdGF0ZSRgLiBVc2VmdWwgaW4gY2FsbGJhY2tzIHdoZXJlIHlvdSBjYW4ndFxuICAgKiBgc3Vic2NyaWJlYCAoZS5nLiBpbnNpZGUgYW4gZXZlbnQgaGFuZGxlcikuXG4gICAqL1xuICBnZXRTdGF0ZSgpOiBBSUF1dG9jb21wbGV0ZUNvbnRyb2xsZXJTdGF0ZSB7XG4gICAgcmV0dXJuIGNvbXB1dGVTdGF0ZSh0aGlzLnJhd1N0YXRlJC52YWx1ZSk7XG4gIH1cblxuICAvLyA9PT0gQWN0aW9uIG1ldGhvZHMgKHBhc3MtdGhyb3VnaCB0byB0aGUgY29yZSkgPT09XG4gIC8vXG4gIC8vIEV2ZXJ5IGFjdGlvbiBtZXRob2QgYmVnaW5zIHdpdGggYW4gYGlzRGVzdHJveWVkYCBndWFyZCBzbyB0aGF0IGNhbGxlcnNcbiAgLy8gd2hvIGhvbGQgYSBzdGFsZSByZWZlcmVuY2UgYWZ0ZXIgYGRlc3Ryb3koKWAgZG9uJ3QgYWNjaWRlbnRhbGx5IHRyaWdnZXJcbiAgLy8gd29yayBvbiBhIHRvcm4tZG93biBjb3JlLiBUaGUgdmFuaWxsYSBjb3JlIGRvZXMgbm90IGdhdGUgaXRzIG93biBtZXRob2RzXG4gIC8vIHBvc3QtZGlzcG9zZSDigJQgYHJlc2V0KClgLCBgaGFuZGxlVGV4dENoYW5nZSgpYCwgYW5kIGZyaWVuZHMgd291bGQgc3RpbGxcbiAgLy8gc2NoZWR1bGUgZmV0Y2hlcyBvciBmaXJlIEhUVFAgcmVxdWVzdHMgYWdhaW5zdCBhbiBhYm9ydGVkIGNvbnRyb2xsZXIsXG4gIC8vIGFuZCB0aGUgcmVzcG9uc2VzIHdvdWxkIGhhdmUgbm93aGVyZSB0byBzdXJmYWNlIChyYXdTdGF0ZSQgaXMgYWxyZWFkeVxuICAvLyBjb21wbGV0ZSkuIFRoZSBndWFyZCBtYWtlcyB0aGUgSlNEb2MtcHJvbWlzZWQgXCJuby1vcCBzaWxlbnRseVwiXG4gIC8vIHNlbWFudGljcyBhY3R1YWxseSB0cnVlLlxuXG4gIC8qKiBDbGVhciBhbGwgc3RhdGUsIHJvdGF0ZSBgc2Vzc2lvbl9pZGAsIGFuZCByZS1mZXRjaC4gQ2FsbCBhZnRlciBzdWJtaXQuICovXG4gIHJlc2V0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzRGVzdHJveWVkKSByZXR1cm47XG4gICAgdGhpcy5jb3JlLnJlc2V0KCk7XG4gIH1cblxuICAvKiogUGljayBhIGRyb3Bkb3duIG9wdGlvbiAob3IgcmVwbGFjZSB0aGUgcmUtZWRpdGVkIHBhcmFtIGlmIGluIHJlLWVkaXQgbW9kZSkuICovXG4gIHNlbGVjdE9wdGlvbihvcHRpb246IFN1Z2dlc3Rpb25PcHRpb24pOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc0Rlc3Ryb3llZCkgcmV0dXJuO1xuICAgIHRoaXMuY29yZS5zZWxlY3RPcHRpb24ob3B0aW9uKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBbm5vdW5jZSBhIHByb2R1Y3Qgc2VsZWN0aW9uIOKAlCBmaXJlcyB0aGUgYG9uUHJvZHVjdFNlbGVjdGAgY2FsbGJhY2sgdGhlXG4gICAqIGNvbnRyb2xsZXIgd2FzIGNvbnN0cnVjdGVkIHdpdGguIGA8YWktYXV0b2NvbXBsZXRlLWRyb3Bkb3duPmAgY2FsbHMgdGhpc1xuICAgKiBmb3IgeW91OyBjb25zdW1lcnMgcmVuZGVyaW5nIHRoZWlyIG93biBzdHJpcCBjYWxsIGl0IHRoZW1zZWx2ZXMuXG4gICAqXG4gICAqIEVtaXR0aW5nIGlzIHRoZSB3aG9sZSBiZWhhdmlvdXI6IHRoZSBTREsgZGVsaWJlcmF0ZWx5IGRvZXMgbm90IG5hdmlnYXRlIHRvXG4gICAqIGBwcm9kdWN0LnVybGAsIGJlY2F1c2Ugb25seSB0aGUgaW50ZWdyYXRpb24ga25vd3Mgd2hldGhlciBhIHNlbGVjdGlvblxuICAgKiBtZWFucyBcIm9wZW4gdGhlIFBEUFwiLCBcImFkZCB0byBjYXJ0XCIsIG9yIFwiZmlsbCB0aGUgaW5wdXRcIi5cbiAgICovXG4gIHNlbGVjdFByb2R1Y3QocHJvZHVjdDogUHJvZHVjdCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzRGVzdHJveWVkKSByZXR1cm47XG4gICAgdGhpcy5jb3JlLnNlbGVjdFByb2R1Y3QocHJvZHVjdCk7XG4gIH1cblxuICAvKiogUHJvbW90ZSB0aGUgcGlsbCBhdCBgaW5kZXhgIHRvIGFjdGl2ZSAoZnJvbnQgb2YgdGhlIGxpc3QpLiAqL1xuICBzZXRBY3RpdmVQaWxsKGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc0Rlc3Ryb3llZCkgcmV0dXJuO1xuICAgIHRoaXMuY29yZS5zZXRBY3RpdmVQaWxsKGluZGV4KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTa2lwIHRoZSBhY3RpdmUgcGlsbCDigJQgc2FtZSBhY3Rpb24gYXMgcHJlc3Npbmcg4oaSIGF0IHRoZSBlbmQgb2YgdGhlIGlucHV0LlxuICAgKiBUaGUgZHJvcGRvd24ncyBza2lwIGJ1dHRvbiBjYWxscyB0aGlzOyBjb25zdW1lcnMgcmVuZGVyaW5nIHRoZWlyIG93biBza2lwXG4gICAqIGFmZm9yZGFuY2UgY2FsbCBpdCBkaXJlY3RseS4gVGhlIHNraXBwZWQgc3VnZ2VzdGlvbiBqb2lucyBgc2tpcHBlZFBhcmFtcyRgLlxuICAgKi9cbiAgc2tpcEFjdGl2ZVBpbGwoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNEZXN0cm95ZWQpIHJldHVybjtcbiAgICB0aGlzLmNvcmUuc2tpcEFjdGl2ZVBpbGwoKTtcbiAgfVxuXG4gIC8qKiBEcm9wIHRoZSBsYXN0IGNvbXBsZXRlZCBwYXJhbSdzIFwiY29tcGxldGVkXCIgc3RhdHVzLiBUZXh0IHN0YXlzIGFzIHBsYWluIHRleHQuICovXG4gIHJlbW92ZUxhc3RQYXJhbSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc0Rlc3Ryb3llZCkgcmV0dXJuO1xuICAgIHRoaXMuY29yZS5yZW1vdmVMYXN0UGFyYW0oKTtcbiAgfVxuXG4gIC8qKiBDbGVhciB0aGUgc2hpbW1lciBhbmltYXRpb24gc3RhdGUgZm9yIHRoZSBtb3N0LXJlY2VudGx5LWFkZGVkIHBhcmFtLiAqL1xuICBjbGVhck5ld1BhcmFtSWQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNEZXN0cm95ZWQpIHJldHVybjtcbiAgICB0aGlzLmNvcmUuY2xlYXJOZXdQYXJhbUlkKCk7XG4gIH1cblxuICAvKiogQ29udHJvbGxlZC1tb2RlIHNldHRlciBmb3IgZWRpdG9yIHRleHQuICovXG4gIHNldFZhbHVlKHRleHQ6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzRGVzdHJveWVkKSByZXR1cm47XG4gICAgdGhpcy5jb3JlLnNldFZhbHVlKHRleHQpO1xuICB9XG5cbiAgLyoqIENvbnRyb2xsZWQtbW9kZSBzZXR0ZXIgZm9yIGNvbXBsZXRlZCBwYXJhbXMuICovXG4gIHNldENvbXBsZXRlZFBhcmFtcyhwYXJhbXM6IENvbXBsZXRlZFBhcmFtU3RhdGVbXSk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzRGVzdHJveWVkKSByZXR1cm47XG4gICAgdGhpcy5jb3JlLnNldENvbXBsZXRlZFBhcmFtcyhwYXJhbXMpO1xuICB9XG5cbiAgLyoqIEZvcndhcmQgcGxhaW4tdGV4dCBpbnB1dCBmcm9tIHRoZSBjb25zdW1lcidzIGA8dGV4dGFyZWE+YCB0byB0aGUgY29yZS4gKi9cbiAgaGFuZGxlVGV4dENoYW5nZSh2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNEZXN0cm95ZWQpIHJldHVybjtcbiAgICB0aGlzLmNvcmUuaGFuZGxlVGV4dENoYW5nZSh2YWx1ZSk7XG4gIH1cblxuICAvKiogRm9yd2FyZCBrZXlib2FyZCBldmVudHMgZnJvbSB0aGUgY29uc3VtZXIncyBgPHRleHRhcmVhPmAgdG8gdGhlIGNvcmUuICovXG4gIGhhbmRsZUtleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc0Rlc3Ryb3llZCkgcmV0dXJuO1xuICAgIHRoaXMuY29yZS5oYW5kbGVLZXlEb3duKGV2ZW50KTtcbiAgfVxuXG4gIC8qKiBOb3RpZnkgdGhlIGNvcmUgb2YgZm9jdXMgc3RhdGUuICovXG4gIHNldEZvY3VzZWQoZm9jdXNlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzRGVzdHJveWVkKSByZXR1cm47XG4gICAgdGhpcy5jb3JlLnNldEZvY3VzZWQoZm9jdXNlZCk7XG4gIH1cblxuICAvKiogRW50ZXIgcmUtZWRpdCBtb2RlIGZvciB0aGUgYm9sZCBwYXJhbSB3aXRoIHRoZSBnaXZlbiBpZC4gKi9cbiAgc3RhcnRFZGl0aW5nUGFyYW0ocGFyYW1JZDogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNEZXN0cm95ZWQpIHJldHVybjtcbiAgICB0aGlzLmNvcmUuc3RhcnRFZGl0aW5nUGFyYW0ocGFyYW1JZCk7XG4gIH1cblxuICAvKiogRXhpdCByZS1lZGl0IG1vZGUgd2l0aG91dCBjaGFuZ2luZyB0aGUgYm9sZCBwYXJhbS4gKi9cbiAgZXhpdEVkaXRNb2RlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzRGVzdHJveWVkKSByZXR1cm47XG4gICAgdGhpcy5jb3JlLmV4aXRFZGl0TW9kZSgpO1xuICB9XG5cbiAgLyoqIEZvcndhcmQgcG9zdC1pbnB1dCBjYXJldCBwb3NpdGlvbiAoZXh0ZW5kcyB0aGUgZWRpdCB0YWlsKS4gKi9cbiAgaGFuZGxlQ2FyZXRBZnRlcklucHV0KG9mZnNldDogbnVtYmVyIHwgbnVsbCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzRGVzdHJveWVkKSByZXR1cm47XG4gICAgdGhpcy5jb3JlLmhhbmRsZUNhcmV0QWZ0ZXJJbnB1dChvZmZzZXQpO1xuICB9XG5cbiAgLyoqIEZvcndhcmQgc2VsZWN0aW9uLW9ubHkgY2FyZXQgbW92ZXMgKG1heSBleGl0IHJlLWVkaXQpLiAqL1xuICBoYW5kbGVDYXJldE1vdmUob2Zmc2V0OiBudW1iZXIgfCBudWxsKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNEZXN0cm95ZWQpIHJldHVybjtcbiAgICB0aGlzLmNvcmUuaGFuZGxlQ2FyZXRNb3ZlKG9mZnNldCk7XG4gIH1cblxuICAvKiogUmVwbGFjZSB0aGUgYm9sZCBwYXJhbSBiZWluZyByZS1lZGl0ZWQuIFJldHVybnMgdHJ1ZSB3aGVuIGFwcGxpZWQuICovXG4gIHJlcGxhY2VFZGl0aW5nUmFuZ2UocmVwbGFjZW1lbnQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLmlzRGVzdHJveWVkKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIHRoaXMuY29yZS5yZXBsYWNlRWRpdGluZ1JhbmdlKHJlcGxhY2VtZW50KTtcbiAgfVxuXG4gIC8qKiBTZXQgdGhlIGhpZ2hsaWdodGVkIG9wdGlvbiBpbmRleCAodHlwaWNhbGx5IGRyaXZlbiBieSBob3ZlcikuICovXG4gIHNldEFjdGl2ZURyb3Bkb3duSW5kZXgoaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzRGVzdHJveWVkKSByZXR1cm47XG4gICAgdGhpcy5jb3JlLnNldEFjdGl2ZURyb3Bkb3duSW5kZXgoaW5kZXgpO1xuICB9XG5cbiAgLy8gPT09IExpZmVjeWNsZSA9PT1cblxuICAvKipcbiAgICogQXBwbHkgcnVudGltZSBjaGFuZ2VzIHRvIGEgc3Vic2V0IG9mIG9wdGlvbnMuIEV2ZW50IGNhbGxiYWNrc1xuICAgKiAoYG9uU3VibWl0YCwgYG9uRXJyb3JgLCBldGMuKSBjYW5ub3QgYmUgc3dhcHBlZCB0aGlzIHdheSDigJQgdGhleSBhcmVcbiAgICogcmVnaXN0ZXJlZCBvbmNlIGF0IGNvbnN0cnVjdGlvbiAobWF0Y2hlcyB0aGUgUmVhY3QgaG9vaydzIGRlc2lnbikuIEZvclxuICAgKiBkeW5hbWljIGV2ZW50IHJlYWN0aXZpdHksIHN1YnNjcmliZSB0byB0aGUgY29ycmVzcG9uZGluZyBvYnNlcnZhYmxlXG4gICAqIChlLmcuIGB0ZXh0JGAgaW5zdGVhZCBvZiBgb25DaGFuZ2VgKS5cbiAgICovXG4gIHVwZGF0ZShvcHRzOiBBSUF1dG9jb21wbGV0ZUNvbnRyb2xsZXJVcGRhdGUpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc0Rlc3Ryb3llZCkgcmV0dXJuO1xuICAgIHRoaXMuY29yZS51cGRhdGUob3B0cyk7XG4gICAgaWYgKG9wdHMub3B0aW9uc1Bvc2l0aW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMub3B0aW9uc1Bvc2l0aW9uJC5uZXh0KG9wdHMub3B0aW9uc1Bvc2l0aW9uKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVsZWFzZSBhbGwgcmVzb3VyY2VzIOKAlCB1bnN1YnNjcmliZXMgZnJvbSB0aGUgY29yZSwgZGVzdHJveXMgdGhlIGNvcmUsXG4gICAqIGFuZCBjb21wbGV0ZXMgdGhlIGludGVybmFsIHN0YXRlIHN1YmplY3QuIFNhZmUgdG8gY2FsbCBtdWx0aXBsZSB0aW1lcy5cbiAgICogQWZ0ZXIgZGVzdHJ1Y3Rpb24sIGFjdGlvbiBtZXRob2RzIG5vLW9wIHNpbGVudGx5LlxuICAgKi9cbiAgZGVzdHJveSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc0Rlc3Ryb3llZCkgcmV0dXJuO1xuICAgIHRoaXMuaXNEZXN0cm95ZWQgPSB0cnVlO1xuICAgIHRoaXMudW5zdWJzY3JpYmVDb3JlKCk7XG4gICAgdGhpcy5jb3JlLmRlc3Ryb3koKTtcbiAgICB0aGlzLnJhd1N0YXRlJC5jb21wbGV0ZSgpO1xuICB9XG59XG5cbi8vID09PT09IFB1cmUgaGVscGVycyDigJQgbm90IHBhcnQgb2YgdGhlIHB1YmxpYyBzdXJmYWNlID09PT09XG5cbi8qKlxuICogU2hhbGxvdyBhcnJheSBlcXVhbGl0eS4gVGhlIHZhbmlsbGEgc3RvcmUgcmVhc3NpZ25zIGFycmF5IGZpZWxkcyBvbiBldmVyeVxuICogd3JpdGUgKGBzdG9yZS5zZXQoeyBjb21wbGV0ZWRQYXJhbXM6IFsuLi5wcmV2LCB4XSB9KWApLCBzbyByZWZlcmVuY2VcbiAqIGVxdWFsaXR5IGFsb25lIHdvdWxkIHJlLWVtaXQgZG93bnN0cmVhbSBldmVuIHdoZW4gdGhlIGNvbnRlbnRzIGFyZVxuICogaWRlbnRpY2FsLiBVc2VkIGZvciBgY29tcGxldGVkUGFyYW1zJGAsIGBzdWdnZXN0aW9ucyRgLCBgc3VnZ2VzdGlvblBpbGxzJGAsXG4gKiBhbmQgYHNlZ21lbnRzJGAuXG4gKi9cbmZ1bmN0aW9uIGFyckVxPFQ+KGE6IHJlYWRvbmx5IFRbXSwgYjogcmVhZG9ubHkgVFtdKTogYm9vbGVhbiB7XG4gIGlmIChhID09PSBiKSByZXR1cm4gdHJ1ZTtcbiAgaWYgKGEubGVuZ3RoICE9PSBiLmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGEubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoYVtpXSAhPT0gYltpXSkgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBjb21wdXRlVWlMb2FkaW5nKHM6IENvcmVTdGF0ZSk6IGJvb2xlYW4ge1xuICByZXR1cm4gcy5pc0xvYWRpbmcgJiYgIXMuZWRpdGluZ1BhcmFtICYmICFzLmluU2VsZWN0aW9uQW5pbWF0aW9uO1xufVxuXG5mdW5jdGlvbiBjb21wdXRlU3RhdGUoczogQ29yZVN0YXRlKTogQUlBdXRvY29tcGxldGVDb250cm9sbGVyU3RhdGUge1xuICByZXR1cm4ge1xuICAgIHRleHQ6IHMudGV4dCxcbiAgICBjb21wbGV0ZWRQYXJhbXM6IHMuY29tcGxldGVkUGFyYW1zLFxuICAgIHNraXBwZWRQYXJhbXM6IHMuc2tpcHBlZFBhcmFtcyxcbiAgICBzdWdnZXN0aW9uUGlsbHM6IHMuYWN0aW9uYWJsZVN1Z2dlc3Rpb25zLFxuICAgIHNlZ21lbnRzOiBzLnNlZ21lbnRzLFxuICAgIG5ld1BhcmFtSWQ6IHMubmV3UGFyYW1JZCxcbiAgICBzdWdnZXN0aW9uczogcy5zdWdnZXN0aW9ucyxcbiAgICBwcm9kdWN0czogcy5wcm9kdWN0cyxcbiAgICBhY3RpdmVJbmRleDogcy5hY3RpdmVEcm9wZG93bkluZGV4LFxuICAgIGlzTG9hZGluZzogY29tcHV0ZVVpTG9hZGluZyhzKSxcbiAgICBpc1JlYWR5OiBzLmlzUmVhZHksXG4gICAgaXNGb2N1c2VkOiBzLmlzRm9jdXNlZCxcbiAgICBpc0Ryb3Bkb3duT3Blbjogcy5pc0Ryb3Bkb3duT3BlbixcbiAgICBwbGFjZWhvbGRlclRleHQ6IHMucGxhY2Vob2xkZXJUZXh0LFxuICAgIGVycm9yOiBzLmVycm9yLFxuICAgIGVkaXRpbmdQYXJhbTogcy5lZGl0aW5nUGFyYW0sXG4gICAgZWRpdGluZ0FuY2hvcjogcy5lZGl0aW5nQW5jaG9yLFxuICAgIGNhcmV0T2Zmc2V0OiBzLmNhcmV0T2Zmc2V0LFxuICB9O1xufVxuXG5mdW5jdGlvbiBjb21wdXRlRHJvcGRvd24oXG4gIHM6IENvcmVTdGF0ZSxcbiAgb3B0aW9uc1Bvc2l0aW9uOiBcImFib3ZlXCIgfCBcImJlbG93XCIsXG4pOiBBSUF1dG9jb21wbGV0ZURyb3Bkb3duU3RhdGUge1xuICBjb25zdCBlZGl0aW5nUGFyYW0gPSBzLmVkaXRpbmdQYXJhbTtcbiAgY29uc3QgYWN0aXZlU3VnZ2VzdGlvbiA9IHMuYWN0aW9uYWJsZVN1Z2dlc3Rpb25zWzBdO1xuICBjb25zdCBkcm9wZG93blBpbGw6IFN1Z2dlc3Rpb24gfCBudWxsID0gZWRpdGluZ1BhcmFtXG4gICAgPyB7XG4gICAgICAgIHR5cGU6IGVkaXRpbmdQYXJhbS5zdWdnZXN0aW9uVHlwZSxcbiAgICAgICAgdGV4dDogZWRpdGluZ1BhcmFtLnN1Z2dlc3Rpb25QbGFjZWhvbGRlcixcbiAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIG9wdGlvbnM6IGVkaXRpbmdQYXJhbS5vcHRpb25zLFxuICAgICAgfVxuICAgIDogbnVsbDtcbiAgY29uc3QgZHJvcGRvd25BY3RpdmVQaWxsID0gZHJvcGRvd25QaWxsID8/IGFjdGl2ZVN1Z2dlc3Rpb247XG4gIGNvbnN0IGRyb3Bkb3duUGlsbHMgPSBkcm9wZG93blBpbGwgPyBbZHJvcGRvd25QaWxsXSA6IHMuYWN0aW9uYWJsZVN1Z2dlc3Rpb25zO1xuICByZXR1cm4ge1xuICAgIHN1Z2dlc3Rpb25zOiBkcm9wZG93bkFjdGl2ZVBpbGwgPyBbeyAuLi5kcm9wZG93bkFjdGl2ZVBpbGwsIG9wdGlvbnM6IHMuZmlsdGVyZWRPcHRpb25zIH1dIDogW10sXG4gICAgYWN0aXZlSW5kZXg6IHMuYWN0aXZlRHJvcGRvd25JbmRleCxcbiAgICBpc09wZW46IHMuaXNEcm9wZG93bk9wZW4sXG4gICAgcGlsbHM6IGRyb3Bkb3duUGlsbHMsXG4gICAgaXNBY3RpdmVQaWxsU2VsZWN0ZWQ6IHMuaXNBY3RpdmVQaWxsU2VsZWN0ZWQsXG4gICAgaXNMb2FkaW5nOiBjb21wdXRlVWlMb2FkaW5nKHMpLFxuICAgIGlzSW5wdXRFbXB0eTogcy50ZXh0LnRyaW0oKS5sZW5ndGggPT09IDAsXG4gICAgcHJvZHVjdHM6IHMucHJvZHVjdHMsXG4gICAgaXNFZGl0aW5nOiBCb29sZWFuKGVkaXRpbmdQYXJhbSksXG4gICAgaW5TZWxlY3Rpb25BbmltYXRpb246IHMuaW5TZWxlY3Rpb25BbmltYXRpb24sXG4gICAgb3B0aW9uc1Bvc2l0aW9uLFxuICB9O1xufVxuIl19
|
|
387
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWktYXV0b2NvbXBsZXRlLmNvbnRyb2xsZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2NvbnRyb2xsZXIvYWktYXV0b2NvbXBsZXRlLmNvbnRyb2xsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLGNBQWMsSUFBSSxrQkFBa0IsRUFPcEMsbUJBQW1CLEdBQ3BCLE1BQU0scUNBQXFDLENBQUM7QUFDN0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsR0FBRyxFQUFtQixXQUFXLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFPekYsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUU1Qzs7Ozs7Ozs7Ozs7O0dBWUc7QUFDSCxNQUFNLE9BQU8sd0JBQXdCO0lBcUZuQzs7O09BR0c7SUFDSCxZQUFZLE9BQXdDLEVBQUU7UUF0RnRELDRFQUE0RTtRQUM1RSw0RUFBNEU7UUFDNUUsbUVBQW1FO1FBQ2xELHFCQUFnQixHQUFHLElBQUksZUFBZSxDQUFvQixPQUFPLENBQUMsQ0FBQztRQUU1RSxnQkFBVyxHQUFHLEtBQUssQ0FBQztRQWtGMUIsSUFBSSxPQUFPLFFBQVEsS0FBSyxXQUFXLEVBQUU7WUFDbkMsTUFBTSxJQUFJLEtBQUssQ0FDYiwyREFBMkQ7Z0JBQ3pELHdFQUF3RSxDQUMzRSxDQUFDO1NBQ0g7UUFFRCx3RUFBd0U7UUFDeEUscUVBQXFFO1FBQ3JFLE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFM0MsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLGtCQUFrQixDQUFDLElBQUksRUFBRTtZQUN2QyxHQUFHLElBQUk7WUFDUCxVQUFVLEVBQUUsVUFBVTtZQUN0QixNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sSUFBSSxjQUFjO1lBQ3JDLGlFQUFpRTtZQUNqRSxvRUFBb0U7WUFDcEUsMkNBQTJDO1lBQzNDLGVBQWUsRUFBRSxJQUFJLENBQUMsZUFBZSxJQUFJLE9BQU87U0FDakQsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLGVBQWUsQ0FBWSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDdEUsc0VBQXNFO1FBQ3RFLHNFQUFzRTtRQUN0RSx1RUFBdUU7UUFDdkUsMEVBQTBFO1FBQzFFLFVBQVU7UUFDVixFQUFFO1FBQ0YscUVBQXFFO1FBQ3JFLHlFQUF5RTtRQUN6RSx3RUFBd0U7UUFDeEUsMEVBQTBFO1FBQzFFLHNFQUFzRTtRQUN0RSxtRUFBbUU7UUFDbkUsNERBQTREO1FBQzVELEVBQUU7UUFDRix1RUFBdUU7UUFDdkUscUVBQXFFO1FBQ3JFLHdFQUF3RTtRQUN4RSx1RUFBdUU7UUFDdkUsMkNBQTJDO1FBQzNDLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQzlDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVztnQkFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDbkUsQ0FBQyxDQUFDLENBQUM7UUFFSCxnQ0FBZ0M7UUFDaEMseUVBQXlFO1FBQ3pFLHNFQUFzRTtRQUN0RSx5RUFBeUU7UUFDekUsZ0VBQWdFO1FBQ2hFLHVFQUF1RTtRQUN2RSxjQUFjO1FBQ2QsSUFBSSxDQUFDLEtBQUssR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3hELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLGVBQWUsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNyRixJQUFJLENBQUMsY0FBYyxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsYUFBYSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ2pGLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLHFCQUFxQixFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzNGLElBQUksQ0FBQyxTQUFTLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDdkUsSUFBSSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3BFLElBQUksQ0FBQyxZQUFZLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDN0UsSUFBSSxDQUFDLFNBQVMsR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUN2RSxJQUFJLENBQUMsWUFBWSxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUM5RSxJQUFJLENBQUMsVUFBVSxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLGdCQUFnQixDQUFDLENBQUM7UUFDaEUsSUFBSSxDQUFDLFFBQVEsR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzlELElBQUksQ0FBQyxVQUFVLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNsRSxJQUFJLENBQUMsZUFBZSxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDNUUsSUFBSSxDQUFDLHFCQUFxQixHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsb0JBQW9CLENBQUMsQ0FBQztRQUN4RixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUM5RSxJQUFJLENBQUMsTUFBTSxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDMUQsSUFBSSxDQUFDLGFBQWEsR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ3hFLElBQUksQ0FBQyxjQUFjLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUMxRSxJQUFJLENBQUMsWUFBWSxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUM7UUFFdEUsZ0NBQWdDO1FBQ2hDLHFFQUFxRTtRQUNyRSw0REFBNEQ7UUFDNUQscUVBQXFFO1FBQ3JFLHFFQUFxRTtRQUNyRSxvRUFBb0U7UUFDcEUsaUVBQWlFO1FBQ2pFLHNFQUFzRTtRQUN0RSw2QkFBNkI7UUFDN0IsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FDL0IsR0FBRyxDQUFDLFlBQVksQ0FBQyxFQUNqQixXQUFXLENBQUMsRUFBRSxVQUFVLEVBQUUsQ0FBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUMvQyxDQUFDO1FBRUYsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxJQUFJLE9BQU8sQ0FBQyxDQUFDO1FBQzVELElBQUksQ0FBQyxTQUFTLEdBQUcsYUFBYSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FDMUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsZUFBZSxDQUFDLEVBQUUsRUFBRSxDQUFDLGVBQWUsQ0FBQyxDQUFDLEVBQUUsZUFBZSxDQUFDLENBQUMsRUFDbEUsV0FBVyxDQUFDLEVBQUUsVUFBVSxFQUFFLENBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FDL0MsQ0FBQztJQUNKLENBQUM7SUFFRCw4QkFBOEI7SUFFOUIseUZBQXlGO0lBQ3pGLElBQUksU0FBUztRQUNYLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDN0IsQ0FBQztJQUVELHVGQUF1RjtJQUN2RixJQUFJLFNBQVM7UUFDWCxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUM7SUFDMUIsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxRQUFRO1FBQ04sT0FBTyxZQUFZLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBRUQsb0RBQW9EO0lBQ3BELEVBQUU7SUFDRix5RUFBeUU7SUFDekUsMEVBQTBFO0lBQzFFLDJFQUEyRTtJQUMzRSwwRUFBMEU7SUFDMUUsd0VBQXdFO0lBQ3hFLHdFQUF3RTtJQUN4RSxpRUFBaUU7SUFDakUsMkJBQTJCO0lBRTNCLDZFQUE2RTtJQUM3RSxLQUFLO1FBQ0gsSUFBSSxJQUFJLENBQUMsV0FBVztZQUFFLE9BQU87UUFDN0IsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUNwQixDQUFDO0lBRUQsa0ZBQWtGO0lBQ2xGLFlBQVksQ0FBQyxNQUF3QjtRQUNuQyxJQUFJLElBQUksQ0FBQyxXQUFXO1lBQUUsT0FBTztRQUM3QixJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRUQ7Ozs7Ozs7O09BUUc7SUFDSCxhQUFhLENBQUMsT0FBZ0I7UUFDNUIsSUFBSSxJQUFJLENBQUMsV0FBVztZQUFFLE9BQU87UUFDN0IsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVELGlFQUFpRTtJQUNqRSxhQUFhLENBQUMsS0FBYTtRQUN6QixJQUFJLElBQUksQ0FBQyxXQUFXO1lBQUUsT0FBTztRQUM3QixJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILGNBQWM7UUFDWixJQUFJLElBQUksQ0FBQyxXQUFXO1lBQUUsT0FBTztRQUM3QixJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQzdCLENBQUM7SUFFRCxvRkFBb0Y7SUFDcEYsZUFBZTtRQUNiLElBQUksSUFBSSxDQUFDLFdBQVc7WUFBRSxPQUFPO1FBQzdCLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7SUFDOUIsQ0FBQztJQUVELDJFQUEyRTtJQUMzRSxlQUFlO1FBQ2IsSUFBSSxJQUFJLENBQUMsV0FBVztZQUFFLE9BQU87UUFDN0IsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztJQUM5QixDQUFDO0lBRUQsOENBQThDO0lBQzlDLFFBQVEsQ0FBQyxJQUFZO1FBQ25CLElBQUksSUFBSSxDQUFDLFdBQVc7WUFBRSxPQUFPO1FBQzdCLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzNCLENBQUM7SUFFRCxtREFBbUQ7SUFDbkQsa0JBQWtCLENBQUMsTUFBNkI7UUFDOUMsSUFBSSxJQUFJLENBQUMsV0FBVztZQUFFLE9BQU87UUFDN0IsSUFBSSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRUQsNkVBQTZFO0lBQzdFLGdCQUFnQixDQUFDLEtBQWE7UUFDNUIsSUFBSSxJQUFJLENBQUMsV0FBVztZQUFFLE9BQU87UUFDN0IsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRUQsNEVBQTRFO0lBQzVFLGFBQWEsQ0FBQyxLQUFvQjtRQUNoQyxJQUFJLElBQUksQ0FBQyxXQUFXO1lBQUUsT0FBTztRQUM3QixJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRUQsc0NBQXNDO0lBQ3RDLFVBQVUsQ0FBQyxPQUFnQjtRQUN6QixJQUFJLElBQUksQ0FBQyxXQUFXO1lBQUUsT0FBTztRQUM3QixJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRUQsK0RBQStEO0lBQy9ELGlCQUFpQixDQUFDLE9BQWU7UUFDL0IsSUFBSSxJQUFJLENBQUMsV0FBVztZQUFFLE9BQU87UUFDN0IsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRUQseURBQXlEO0lBQ3pELFlBQVk7UUFDVixJQUFJLElBQUksQ0FBQyxXQUFXO1lBQUUsT0FBTztRQUM3QixJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFRCxpRUFBaUU7SUFDakUscUJBQXFCLENBQUMsTUFBcUI7UUFDekMsSUFBSSxJQUFJLENBQUMsV0FBVztZQUFFLE9BQU87UUFDN0IsSUFBSSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRUQsNkRBQTZEO0lBQzdELGVBQWUsQ0FBQyxNQUFxQjtRQUNuQyxJQUFJLElBQUksQ0FBQyxXQUFXO1lBQUUsT0FBTztRQUM3QixJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRUQseUVBQXlFO0lBQ3pFLG1CQUFtQixDQUFDLFdBQW1CO1FBQ3JDLElBQUksSUFBSSxDQUFDLFdBQVc7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUNuQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUVELG9FQUFvRTtJQUNwRSxzQkFBc0IsQ0FBQyxLQUFhO1FBQ2xDLElBQUksSUFBSSxDQUFDLFdBQVc7WUFBRSxPQUFPO1FBQzdCLElBQUksQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUVELDhFQUE4RTtJQUM5RSxpQkFBaUI7UUFDZixJQUFJLElBQUksQ0FBQyxXQUFXO1lBQUUsT0FBTztRQUM3QixJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7SUFDaEMsQ0FBQztJQUVELGlGQUFpRjtJQUNqRixhQUFhO1FBQ1gsSUFBSSxJQUFJLENBQUMsV0FBVztZQUFFLE9BQU87UUFDN0IsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUM1QixDQUFDO0lBRUQsb0JBQW9CO0lBRXBCOzs7Ozs7T0FNRztJQUNILE1BQU0sQ0FBQyxJQUFvQztRQUN6QyxJQUFJLElBQUksQ0FBQyxXQUFXO1lBQUUsT0FBTztRQUM3QixJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN2QixJQUFJLElBQUksQ0FBQyxlQUFlLEtBQUssU0FBUyxFQUFFO1lBQ3RDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1NBQ2xEO0lBQ0gsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxPQUFPO1FBQ0wsSUFBSSxJQUFJLENBQUMsV0FBVztZQUFFLE9BQU87UUFDN0IsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7UUFDeEIsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDcEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUM1QixDQUFDO0NBQ0Y7QUFFRCw0REFBNEQ7QUFFNUQ7Ozs7OztHQU1HO0FBQ0gsU0FBUyxLQUFLLENBQUksQ0FBZSxFQUFFLENBQWU7SUFDaEQsSUFBSSxDQUFDLEtBQUssQ0FBQztRQUFFLE9BQU8sSUFBSSxDQUFDO0lBQ3pCLElBQUksQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUMsTUFBTTtRQUFFLE9BQU8sS0FBSyxDQUFDO0lBQ3hDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQ2pDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFBRSxPQUFPLEtBQUssQ0FBQztLQUNqQztJQUNELE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQztBQUVELFNBQVMsZ0JBQWdCLENBQUMsQ0FBWTtJQUNwQyxPQUFPLENBQUMsQ0FBQyxTQUFTLElBQUksQ0FBQyxDQUFDLENBQUMsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLG9CQUFvQixDQUFDO0FBQ25FLENBQUM7QUFFRCxTQUFTLFlBQVksQ0FBQyxDQUFZO0lBQ2hDLE9BQU87UUFDTCxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUk7UUFDWixlQUFlLEVBQUUsQ0FBQyxDQUFDLGVBQWU7UUFDbEMsYUFBYSxFQUFFLENBQUMsQ0FBQyxhQUFhO1FBQzlCLGVBQWUsRUFBRSxDQUFDLENBQUMscUJBQXFCO1FBQ3hDLFFBQVEsRUFBRSxDQUFDLENBQUMsUUFBUTtRQUNwQixVQUFVLEVBQUUsQ0FBQyxDQUFDLFVBQVU7UUFDeEIsV0FBVyxFQUFFLENBQUMsQ0FBQyxXQUFXO1FBQzFCLFFBQVEsRUFBRSxDQUFDLENBQUMsUUFBUTtRQUNwQixXQUFXLEVBQUUsQ0FBQyxDQUFDLG1CQUFtQjtRQUNsQyxTQUFTLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDO1FBQzlCLE9BQU8sRUFBRSxDQUFDLENBQUMsT0FBTztRQUNsQixTQUFTLEVBQUUsQ0FBQyxDQUFDLFNBQVM7UUFDdEIsY0FBYyxFQUFFLENBQUMsQ0FBQyxjQUFjO1FBQ2hDLGVBQWUsRUFBRSxDQUFDLENBQUMsZUFBZTtRQUNsQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUs7UUFDZCxZQUFZLEVBQUUsQ0FBQyxDQUFDLFlBQVk7UUFDNUIsaUJBQWlCLEVBQUUsQ0FBQyxDQUFDLGlCQUFpQjtRQUN0QyxhQUFhLEVBQUUsQ0FBQyxDQUFDLGFBQWE7UUFDOUIsV0FBVyxFQUFFLENBQUMsQ0FBQyxXQUFXO0tBQzNCLENBQUM7QUFDSixDQUFDO0FBRUQsU0FBUyxlQUFlLENBQ3RCLENBQVksRUFDWixlQUFrQztJQUVsQyxNQUFNLFlBQVksR0FBRyxDQUFDLENBQUMsWUFBWSxDQUFDO0lBQ3BDLE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxDQUFDLGlCQUFpQixDQUFDO0lBQzlDLE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3BELE1BQU0sWUFBWSxHQUFzQixZQUFZO1FBQ2xELENBQUMsQ0FBQztZQUNFLElBQUksRUFBRSxZQUFZLENBQUMsY0FBYztZQUNqQyxJQUFJLEVBQUUsWUFBWSxDQUFDLHFCQUFxQjtZQUN4QyxRQUFRLEVBQUUsSUFBSTtZQUNkLE9BQU8sRUFBRSxZQUFZLENBQUMsT0FBTztTQUM5QjtRQUNILENBQUMsQ0FBQyxpQkFBaUI7WUFDakIsQ0FBQyxDQUFDLGlFQUFpRTtnQkFDakUsd0VBQXdFO2dCQUN4RTtvQkFDRSxJQUFJLEVBQUUsaUJBQWlCLENBQUMsSUFBSTtvQkFDNUIsSUFBSSxFQUFFLGlCQUFpQixDQUFDLElBQUk7b0JBQzVCLFFBQVEsRUFBRSxJQUFJO29CQUNkLE9BQU8sRUFBRSxFQUFFO2lCQUNaO1lBQ0gsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUNYLE1BQU0sa0JBQWtCLEdBQUcsWUFBWSxJQUFJLGdCQUFnQixDQUFDO0lBQzVELE1BQU0sYUFBYSxHQUFHLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLHFCQUFxQixDQUFDO0lBQzlFLE9BQU87UUFDTCxXQUFXLEVBQUUsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLGtCQUFrQixFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUMsZUFBZSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTtRQUM5RixXQUFXLEVBQUUsQ0FBQyxDQUFDLG1CQUFtQjtRQUNsQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLGNBQWM7UUFDeEIsS0FBSyxFQUFFLGFBQWE7UUFDcEIsb0JBQW9CLEVBQUUsQ0FBQyxDQUFDLG9CQUFvQjtRQUM1QyxTQUFTLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDO1FBQzlCLFlBQVksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLE1BQU0sS0FBSyxDQUFDO1FBQ3hDLFFBQVEsRUFBRSxDQUFDLENBQUMsUUFBUTtRQUNwQixTQUFTLEVBQUUsT0FBTyxDQUFDLFlBQVksQ0FBQyxJQUFJLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQztRQUM5RCxvQkFBb0IsRUFBRSxDQUFDLENBQUMsb0JBQW9CO1FBQzVDLG9FQUFvRTtRQUNwRSxzRUFBc0U7UUFDdEUsMkVBQTJFO1FBQzNFLGtDQUFrQztRQUNsQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLGdCQUFnQjtRQUM5QixRQUFRLEVBQUUsQ0FBQyxDQUFDLFFBQVE7UUFDcEIsZUFBZSxFQUFFLGlCQUFpQjtZQUNoQyxDQUFDLENBQUMsaUJBQWlCLENBQUMsR0FBRztZQUN2QixDQUFDLENBQUMsbUJBQW1CLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQztRQUMzQyxlQUFlO0tBQ2hCLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgdHlwZSBDb21wbGV0ZWRQYXJhbVN0YXRlLFxuICBBSUF1dG9jb21wbGV0ZSBhcyBDb3JlQUlBdXRvY29tcGxldGUsXG4gIHR5cGUgQ29yZVN0YXRlLFxuICB0eXBlIFByb2R1Y3QsXG4gIHR5cGUgU2VnbWVudCxcbiAgdHlwZSBTa2lwcGVkUGFyYW1TdGF0ZSxcbiAgdHlwZSBTdWdnZXN0aW9uLFxuICB0eXBlIFN1Z2dlc3Rpb25PcHRpb24sXG4gIHNlbGVjdGVkSXNvRnJvbVRleHQsXG59IGZyb20gXCJAbWFnaWN4LWVuZy9haS1hdXRvY29tcGxldGUtdmFuaWxsYVwiO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCBtYXAsIHR5cGUgT2JzZXJ2YWJsZSwgc2hhcmVSZXBsYXkgfSBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IHR5cGUge1xuICBBSUF1dG9jb21wbGV0ZUNvbnRyb2xsZXJPcHRpb25zLFxuICBBSUF1dG9jb21wbGV0ZUNvbnRyb2xsZXJTdGF0ZSxcbiAgQUlBdXRvY29tcGxldGVDb250cm9sbGVyVXBkYXRlLFxuICBBSUF1dG9jb21wbGV0ZURyb3Bkb3duU3RhdGUsXG59IGZyb20gXCIuLi9zaGFyZWQvdHlwZXNcIjtcbmltcG9ydCB7IGRlcml2ZUZpZWxkIH0gZnJvbSBcIi4vb2JzZXJ2YWJsZXNcIjtcblxuLyoqXG4gKiBUaWVyIDIgbG9naWMgc3VyZmFjZSBmb3IgYEBtYWdpY3gtZW5nL2FpLWF1dG9jb21wbGV0ZS1hbmd1bGFyYCDigJQgdGhlIEFuZ3VsYXJcbiAqIGVxdWl2YWxlbnQgb2YgUmVhY3QncyBgdXNlQUlBdXRvY29tcGxldGUoKWAgaG9vay4gV3JhcHMgYSBoZWFkbGVzc1xuICogYEBtYWdpY3gtZW5nL2FpLWF1dG9jb21wbGV0ZS12YW5pbGxhYCBjb3JlIGFuZCBleHBvc2VzIGl0cyBzdGF0ZSBhcyBSeEpTXG4gKiBvYnNlcnZhYmxlcyBwbHVzIHRoaW4gYWN0aW9uIG1ldGhvZHMuXG4gKlxuICogVGhlIGNvbnRyb2xsZXIgaXMgY29uc3VtZXItbWFuYWdlZCDigJQgdGhlIGNvbnN1bWVyIGNyZWF0ZXMgaXRcbiAqIHdpdGggYG5ld2AsIGhvbGRzIHRoZSByZWZlcmVuY2UsIGFuZCAqKm11c3QgY2FsbCBgZGVzdHJveSgpYCoqIGluIHRoZWlyXG4gKiBvd24gYG5nT25EZXN0cm95YC4gVGhlIFRpZXIgMSBgPGFpLWF1dG9jb21wbGV0ZT5gIGNvbXBvbmVudCBkb2VzIHRoaXNcbiAqIGF1dG9tYXRpY2FsbHk7IFRpZXIgMiBjb25zdW1lcnMgZG8gbm90IGdldCBhdXRvLWNsZWFudXAuXG4gKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY2xhc3MgQUlBdXRvY29tcGxldGVDb250cm9sbGVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBjb3JlOiBDb3JlQUlBdXRvY29tcGxldGU7XG4gIHByaXZhdGUgcmVhZG9ubHkgcmF3U3RhdGUkOiBCZWhhdmlvclN1YmplY3Q8Q29yZVN0YXRlPjtcbiAgLy8gb3B0aW9uc1Bvc2l0aW9uIGlzbid0IHBhcnQgb2YgQ29yZVN0YXRlIChpdCdzIGEgY29yZSBvcHRpb24pLCBzbyB0cmFjayBpdFxuICAvLyBoZXJlIGFuZCBmb2xkIGl0IGludG8gYGRyb3Bkb3duJGAgc28gdGhlIGRyb3Bkb3duIGNhbiByZWFkIHBsYWNlbWVudCBmcm9tXG4gIC8vIHRoZSBjb250cm9sbGVyIOKAlCBjb25maWd1cmVkIG9uY2UsIGtlcHQgaW4gc3luYyB0aHJvdWdoIHVwZGF0ZSgpLlxuICBwcml2YXRlIHJlYWRvbmx5IG9wdGlvbnNQb3NpdGlvbiQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFwiYWJvdmVcIiB8IFwiYmVsb3dcIj4oXCJiZWxvd1wiKTtcbiAgcHJpdmF0ZSByZWFkb25seSB1bnN1YnNjcmliZUNvcmU6ICgpID0+IHZvaWQ7XG4gIHByaXZhdGUgaXNEZXN0cm95ZWQgPSBmYWxzZTtcblxuICAvLyA9PT0gUGVyLWZpZWxkIG9ic2VydmFibGVzID09PVxuICAvLyBFYWNoIG9uZSBydW5zIHRocm91Z2ggZGVyaXZlRmllbGQsIHdoaWNoIGJha2VzIGluIGRpc3RpbmN0VW50aWxDaGFuZ2VkXG4gIC8vIGFuZCBzaGFyZVJlcGxheSh7IGJ1ZmZlclNpemU6IDEsIHJlZkNvdW50OiB0cnVlIH0pIHBlciDCpzE5LjQuXG5cbiAgLyoqIFBsYWluLXRleHQgY29udGVudCBvZiB0aGUgZWRpdG9yLiAqL1xuICByZWFkb25seSB0ZXh0JDogT2JzZXJ2YWJsZTxzdHJpbmc+O1xuICAvKiogQ29tcGxldGVkIChib2xkKSBwYXJhbXMgY3VycmVudGx5IGluIHRoZSBlZGl0b3IuICovXG4gIHJlYWRvbmx5IGNvbXBsZXRlZFBhcmFtcyQ6IE9ic2VydmFibGU8Q29tcGxldGVkUGFyYW1TdGF0ZVtdPjtcbiAgLyoqXG4gICAqIFN1Z2dlc3Rpb25zIHRoZSB1c2VyIGRpc21pc3NlZCB3aXRoIHRoZSBza2lwIGtleSAo4oaSKS4gTm90aGluZyByZW5kZXJzXG4gICAqIHRoZW07IHRoZXkgZXhpc3Qgc28gYSBoYW5kLXJvbGxlZCBzdWJtaXQgY2FuIHBhc3MgdGhlbSB0b1xuICAgKiBgYnVpbGRTdWJtaXRSZXN1bHRgIGFuZCBjYXJyeSB0aGUgc2FtZSBgdGV4dDogXCJza2lwcGVkXCJgIGVudHJpZXMgdGhlXG4gICAqIFNESydzIG93biByZXF1ZXN0cyBkby5cbiAgICovXG4gIHJlYWRvbmx5IHNraXBwZWRQYXJhbXMkOiBPYnNlcnZhYmxlPFNraXBwZWRQYXJhbVN0YXRlW10+O1xuICAvKiogQWN0aW9uYWJsZSBzdWdnZXN0aW9uIHBpbGxzIChmaXJzdCBvbmUgaXMgdGhlIGFjdGl2ZSBwaWxsKS4gKi9cbiAgcmVhZG9ubHkgc3VnZ2VzdGlvblBpbGxzJDogT2JzZXJ2YWJsZTxTdWdnZXN0aW9uW10+O1xuICAvKiogVGV4dCArIGNvbXBsZXRlZC1wYXJhbSBzZWdtZW50cyBmb3IgcmVuZGVyaW5nIHRoZSBlZGl0b3IgYm9keS4gKi9cbiAgcmVhZG9ubHkgc2VnbWVudHMkOiBPYnNlcnZhYmxlPFNlZ21lbnRbXT47XG4gIC8qKiBJRCBvZiB0aGUgbW9zdC1yZWNlbnRseS1wcm9tb3RlZCBwYXJhbSAoZHJpdmVzIHNoaW1tZXIgYW5pbWF0aW9uKS4gKi9cbiAgcmVhZG9ubHkgbmV3UGFyYW1JZCQ6IE9ic2VydmFibGU8c3RyaW5nIHwgbnVsbD47XG4gIC8qKiBBbGwgc3VnZ2VzdGlvbnMgZnJvbSB0aGUgc2VydmVyIChpbmNsdWRpbmcgbm9uLWFjdGlvbmFibGUgb25lcykuICovXG4gIHJlYWRvbmx5IHN1Z2dlc3Rpb25zJDogT2JzZXJ2YWJsZTxTdWdnZXN0aW9uW10+O1xuICAvKipcbiAgICogUmVzdWx0cyBvZiB0aGUgbGF0ZXN0IHByb2R1Y3Qgc2VhcmNoLiBBbHdheXMgZW1wdHkgdW5sZXNzIGBwcm9kdWN0c2AgaXNcbiAgICogY29uZmlndXJlZCBvbiB0aGUgY29udHJvbGxlciDigJQgdGhlIHN0cmlwIGlzIG9wdC1pbiBhbmQgY29zdHMgbm90aGluZyB3aGVuXG4gICAqIGl0IGlzbid0IHdpcmVkIHVwLlxuICAgKi9cbiAgcmVhZG9ubHkgcHJvZHVjdHMkOiBPYnNlcnZhYmxlPFByb2R1Y3RbXT47XG4gIC8qKiBDdXJyZW50bHkgaGlnaGxpZ2h0ZWQgZHJvcGRvd24gb3B0aW9uIGluZGV4LiAtMSA9IG5vbmUuICovXG4gIHJlYWRvbmx5IGFjdGl2ZUluZGV4JDogT2JzZXJ2YWJsZTxudW1iZXI+O1xuICAvKipcbiAgICogVUktdmlzaWJsZSBsb2FkaW5nIGZsYWcg4oCUIHN1cHByZXNzZWQgZHVyaW5nIHRoZSBwb3N0LXNlbGVjdCBzdHJlYWtcbiAgICogYW5pbWF0aW9uIGFuZCBkdXJpbmcgcmUtZWRpdCAoY2FjaGVkIG9wdGlvbnMgc3RheSB2aXNpYmxlIHRoZXJlKS4gVXNlXG4gICAqIHRoaXMgaW5zdGVhZCBvZiB0aGUgcmF3IGNvcmUgc3RhdGUgZm9yIGFueSBsb2FkaW5nLXNrZWxldG9uIGJpbmRpbmcuXG4gICAqL1xuICByZWFkb25seSBpc0xvYWRpbmckOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuICAvKiogU2VydmVyLXJlcG9ydGVkIFwicXVlcnkgaXMgY29tcGxldGVcIiBmbGFnLiAqL1xuICByZWFkb25seSBpc1JlYWR5JDogT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgLyoqIFdoZXRoZXIgdGhlIGVkaXRvciBjdXJyZW50bHkgaGFzIGZvY3VzLiAqL1xuICByZWFkb25seSBpc0ZvY3VzZWQkOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuICAvKiogV2hldGhlciB0aGUgZHJvcGRvd24gc2hvdWxkIGN1cnJlbnRseSBiZSB2aXNpYmxlLiAqL1xuICByZWFkb25seSBpc0Ryb3Bkb3duT3BlbiQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBhY3RpdmUgKGxlYWRpbmcpIHBpbGwgc2hvdWxkIHJlbmRlciBzZWxlY3RlZCAoZnVsbCBvcGFjaXR5KVxuICAgKiByYXRoZXIgdGhhbiB0aGUgZGUtZW1waGFzaXplZCBgZmlyc3RgIHRpZXIuIEF1dG8gdHJpZ2dlciDih5IgdHJ1ZSBvbmx5IHdoaWxlXG4gICAqIGEgZHJvcGRvd24gb3B0aW9uIGlzIGhpZ2hsaWdodGVkOyBtYW51YWwg4oeSIHRydWUgb25jZSB0aGUgcGlsbCBpcyB0YXBwZWQuXG4gICAqL1xuICByZWFkb25seSBpc0FjdGl2ZVBpbGxTZWxlY3RlZCQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gIC8qKiBTZXJ2ZXItc3VnZ2VzdGVkIHBsYWNlaG9sZGVyIHRleHQgZm9yIHRoZSBlZGl0b3IuICovXG4gIHJlYWRvbmx5IHBsYWNlaG9sZGVyVGV4dCQ6IE9ic2VydmFibGU8c3RyaW5nPjtcbiAgLyoqIExhc3QgZmV0Y2ggZXJyb3IsIG9yIG51bGwuICovXG4gIHJlYWRvbmx5IGVycm9yJDogT2JzZXJ2YWJsZTxFcnJvciB8IG51bGw+O1xuICAvKiogUGFyYW0gY3VycmVudGx5IGJlaW5nIHJlLWVkaXRlZCwgb3IgbnVsbC4gKi9cbiAgcmVhZG9ubHkgZWRpdGluZ1BhcmFtJDogT2JzZXJ2YWJsZTxDb21wbGV0ZWRQYXJhbVN0YXRlIHwgbnVsbD47XG4gIC8qKiBQbGFpbi10ZXh0IG9mZnNldCB3aGVyZSB0aGUgZWRpdCByZWdpb24gc3RhcnRzLCBvciBudWxsLiAqL1xuICByZWFkb25seSBlZGl0aW5nQW5jaG9yJDogT2JzZXJ2YWJsZTxudW1iZXIgfCBudWxsPjtcbiAgLyoqIExpdmUgY2FyZXQgb2Zmc2V0IHdpdGhpbiB0aGUgZWRpdG9yLiAqL1xuICByZWFkb25seSBjYXJldE9mZnNldCQ6IE9ic2VydmFibGU8bnVtYmVyIHwgbnVsbD47XG5cbiAgLy8gPT09IENvbXBvc2l0ZSBvYnNlcnZhYmxlcyA9PT1cblxuICAvKipcbiAgICogU25hcHNob3Qgb2YgZXZlcnkgcHVibGljIGZpZWxkIGluIG9uZSBvYmplY3QuIENvbnZlbmllbnQgZm9yXG4gICAqIGAqbmdJZj1cImN0cmwuc3RhdGUkIHwgYXN5bmMgYXMgc3RhdGVcImAgdGVtcGxhdGluZyDigJQgYWxpYXNlcyBhbGwgZmllbGRzXG4gICAqIHVuZGVyIGEgc2luZ2xlIHN1YnNjcmlwdGlvbiBpbnN0ZWFkIG9mIG11bHRpcGxlIGB8IGFzeW5jYCBwaXBlcy5cbiAgICovXG4gIHJlYWRvbmx5IHN0YXRlJDogT2JzZXJ2YWJsZTxBSUF1dG9jb21wbGV0ZUNvbnRyb2xsZXJTdGF0ZT47XG5cbiAgLyoqXG4gICAqIENvbXBvc2l0ZSBzdGF0ZSBmb3IgdGhlIGRyb3Bkb3duIHZpZXcuIFRpZXIgMiBjb25zdW1lcnMgc3ByZWFkIHRoaXMgaW50b1xuICAgKiBgPGFpLWF1dG9jb21wbGV0ZS1kcm9wZG93bj5gOyBUaWVyIDEgdXNlcyB0aGUgc2FtZSBzaGFwZSBpbnRlcm5hbGx5LlxuICAgKi9cbiAgcmVhZG9ubHkgZHJvcGRvd24kOiBPYnNlcnZhYmxlPEFJQXV0b2NvbXBsZXRlRHJvcGRvd25TdGF0ZT47XG5cbiAgLyoqXG4gICAqIFRocm93cyBpZiBpbnZva2VkIG91dHNpZGUgYSBicm93c2VyIGVudmlyb25tZW50LiBGb3IgU1NSIC8gQW5ndWxhclxuICAgKiBVbml2ZXJzYWwsIGdhdGUgY29uc3RydWN0aW9uIHdpdGggYGlzUGxhdGZvcm1Ccm93c2VyYC5cbiAgICovXG4gIGNvbnN0cnVjdG9yKG9wdHM6IEFJQXV0b2NvbXBsZXRlQ29udHJvbGxlck9wdGlvbnMgPSB7fSkge1xuICAgIGlmICh0eXBlb2YgZG9jdW1lbnQgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJBSUF1dG9jb21wbGV0ZUNvbnRyb2xsZXIgcmVxdWlyZXMgYSBicm93c2VyIGVudmlyb25tZW50LiBcIiArXG4gICAgICAgICAgXCJGb3IgU1NSIC8gQW5ndWxhciBVbml2ZXJzYWwsIGdhdGUgY29uc3RydWN0aW9uIHdpdGggaXNQbGF0Zm9ybUJyb3dzZXIuXCIsXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIEhlYWRsZXNzIG1vZGUgbmV2ZXIgcmVuZGVycyB0byB0aGUgaG9zdCwgc28gYSB0aHJvd2F3YXkgZGl2IGlzIGZpbmUg4oCUXG4gICAgLy8gaXQncyByZXF1aXJlZCBieSB0aGUgY29yZSdzIHNpZ25hdHVyZSBmb3Igc3ltbWV0cnkgd2l0aCBmdWxsIG1vZGUuXG4gICAgY29uc3QgaG9zdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG5cbiAgICB0aGlzLmNvcmUgPSBuZXcgQ29yZUFJQXV0b2NvbXBsZXRlKGhvc3QsIHtcbiAgICAgIC4uLm9wdHMsXG4gICAgICByZW5kZXJNb2RlOiBcImhlYWRsZXNzXCIsXG4gICAgICBzb3VyY2U6IG9wdHMuc291cmNlID8/IFwiaGVhZGxlc3Mtc2RrXCIsXG4gICAgICAvLyBIZWFkbGVzcyBtb2RlIG5ldmVyIHJlbmRlcnMgdGhlIGRyb3Bkb3duIERPTSwgYnV0IHRoZSBrZXlib2FyZFxuICAgICAgLy8gY29udHJvbGxlciBzdGlsbCByZWFkcyBgb3B0aW9uc1Bvc2l0aW9uYCB0byBkZWNpZGUgd2hpY2ggdmVydGljYWxcbiAgICAgIC8vIGFycm93IG9wZW5zIHRoZSBkcm9wZG93biBmcm9tIHRoZSBpbnB1dC5cbiAgICAgIG9wdGlvbnNQb3NpdGlvbjogb3B0cy5vcHRpb25zUG9zaXRpb24gPz8gXCJiZWxvd1wiLFxuICAgIH0pO1xuXG4gICAgdGhpcy5yYXdTdGF0ZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PENvcmVTdGF0ZT4odGhpcy5jb3JlLmdldFN0YXRlKCkpO1xuICAgIC8vIFB1c2ggdGhlIHN0b3JlJ3MgKmN1cnJlbnQqIHN0YXRlLCBub3QgdGhlIHNuYXBzaG90IHRoZSBsaXN0ZW5lciB3YXNcbiAgICAvLyBoYW5kZWQuIFRoZSBjb3JlIG5vdGlmaWVzIGxpc3RlbmVycyBzeW5jaHJvbm91c2x5LCBhbmQgc29tZSBhY3Rpb25zXG4gICAgLy8gdHJpZ2dlciByZWVudHJhbnQgYHN0b3JlLnNldGAgY2FsbHMgKGUuZy4gdHlwaW5nIGEgbm9uLW1hdGNoaW5nIGNoYXJcbiAgICAvLyBkdXJpbmcgcmUtZWRpdCBtYWtlcyB0aGUgY29yZSBzeW5jaHJvbm91c2x5IGV4aXQgcmUtZWRpdCBhbmQga2ljayBvZmYgYVxuICAgIC8vIGZldGNoKS5cbiAgICAvL1xuICAgIC8vIFRoZSBjb3JlJ3Mgc3RvcmUgdXNlZCB0byBkZWxpdmVyIHN1Y2ggYSBuZXN0ZWQgc2V0IGlubGluZSBhbmQgdGhlblxuICAgIC8vIHJlc3VtZSB0aGUgb3V0ZXIgbGlzdGVuZXIgbG9vcCwgc28gYSBsaXN0ZW5lciBjb3VsZCBiZSBoYW5kZWQgYW4gb2xkZXJcbiAgICAvLyBzdGF0ZSAoc3RpbGwgaW4gcmUtZWRpdCkgKmFmdGVyKiBhIG5ld2VyIG9uZSAocmUtZWRpdCBleGl0ZWQpIOKAlCB3aGljaFxuICAgIC8vIHJlc3VycmVjdGVkIGEgc3RhbGUgYGVkaXRpbmdQYXJhbWAgYW5kIHJldHJpZ2dlcmVkIHRoZSBlZGl0b3IncyByZS1lZGl0XG4gICAgLy8gY2FyZXQtcGFyaywgeWFua2luZyB0aGUgY2FyZXQgYmFjayB0byB3aGVyZSByZS1lZGl0aW5nIHN0YXJ0ZWQuIFRoZVxuICAgIC8vIHN0b3JlIG5vdyBxdWV1ZXMgbm90aWZpY2F0aW9ucyBhbmQgZHJhaW5zIHRoZW0gaW4gb3JkZXIsIHNvIHRoYXRcbiAgICAvLyBvdXQtb2Ytb3JkZXIgZGVsaXZlcnkgY2FuIG5vIGxvbmdlciBoYXBwZW4gYXQgdGhlIHNvdXJjZS5cbiAgICAvL1xuICAgIC8vIFJlYWRpbmcgYGdldFN0YXRlKClgIGF0IGVtaXNzaW9uIHRpbWUgaXMga2VwdCBhcyBiZWx0LWFuZC1icmFjZXM6IGl0XG4gICAgLy8gY29zdHMgbm90aGluZyAoZGlzdGluY3RVbnRpbENoYW5nZWQgZG93bnN0cmVhbSBkcm9wcyB0aGUgZHVwbGljYXRlXG4gICAgLy8gZW1pc3Npb25zKSBhbmQga2VlcHMgdGhpcyBicmlkZ2UgY29ycmVjdCBmb3IgYW55IGZ1dHVyZSBjb25zdW1lciB0aGF0XG4gICAgLy8gZW1pdHMgbWlkLWNhc2NhZGUuIFJlYWN0IG5lZWRzIG5laXRoZXIsIHNpbmNlIGl0IGJhdGNoZXMgcmVuZGVycyBhbmRcbiAgICAvLyBnYXRlcyBpdHMgY2FyZXQgZWZmZWN0cyBvbiBkZXBlbmRlbmNpZXMuXG4gICAgdGhpcy51bnN1YnNjcmliZUNvcmUgPSB0aGlzLmNvcmUuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIGlmICghdGhpcy5pc0Rlc3Ryb3llZCkgdGhpcy5yYXdTdGF0ZSQubmV4dCh0aGlzLmNvcmUuZ2V0U3RhdGUoKSk7XG4gICAgfSk7XG5cbiAgICAvLyA9PT0gUGVyLWZpZWxkIG9ic2VydmFibGVzID09PVxuICAgIC8vIEFycmF5LXZhbHVlZCBmaWVsZHMgdXNlIHNoYWxsb3cgZXF1YWxpdHkuIFRoZSB2YW5pbGxhIHN0b3JlIHNwcmVhZHMgb25cbiAgICAvLyBldmVyeSB3cml0ZSAoYHN0b3JlLnNldCh7IGNvbXBsZXRlZFBhcmFtczogWy4uLl0gfSlgKSwgc28gcmVmZXJlbmNlXG4gICAgLy8gZXF1YWxpdHkgd291bGQgcmUtZmlyZSBkb3duc3RyZWFtIHN1YnNjcmliZXJzIG9uIGV2ZXJ5IHN0YXRlIHRpY2sgZXZlblxuICAgIC8vIHdoZW4gdGhlIGFycmF5J3MgY29udGVudHMgYXJlIHVuY2hhbmdlZC4gVGhlIG90aGVyIGZpZWxkcyBhcmVcbiAgICAvLyBwcmltaXRpdmVzIG9yIHN0YWJsZSBvYmplY3QgcmVmZXJlbmNlcywgc28gZGVmYXVsdCBpZGVudGl0eSBlcXVhbGl0eVxuICAgIC8vIHdvcmtzIGZpbmUuXG4gICAgdGhpcy50ZXh0JCA9IGRlcml2ZUZpZWxkKHRoaXMucmF3U3RhdGUkLCAocykgPT4gcy50ZXh0KTtcbiAgICB0aGlzLmNvbXBsZXRlZFBhcmFtcyQgPSBkZXJpdmVGaWVsZCh0aGlzLnJhd1N0YXRlJCwgKHMpID0+IHMuY29tcGxldGVkUGFyYW1zLCBhcnJFcSk7XG4gICAgdGhpcy5za2lwcGVkUGFyYW1zJCA9IGRlcml2ZUZpZWxkKHRoaXMucmF3U3RhdGUkLCAocykgPT4gcy5za2lwcGVkUGFyYW1zLCBhcnJFcSk7XG4gICAgdGhpcy5zdWdnZXN0aW9uUGlsbHMkID0gZGVyaXZlRmllbGQodGhpcy5yYXdTdGF0ZSQsIChzKSA9PiBzLmFjdGlvbmFibGVTdWdnZXN0aW9ucywgYXJyRXEpO1xuICAgIHRoaXMuc2VnbWVudHMkID0gZGVyaXZlRmllbGQodGhpcy5yYXdTdGF0ZSQsIChzKSA9PiBzLnNlZ21lbnRzLCBhcnJFcSk7XG4gICAgdGhpcy5uZXdQYXJhbUlkJCA9IGRlcml2ZUZpZWxkKHRoaXMucmF3U3RhdGUkLCAocykgPT4gcy5uZXdQYXJhbUlkKTtcbiAgICB0aGlzLnN1Z2dlc3Rpb25zJCA9IGRlcml2ZUZpZWxkKHRoaXMucmF3U3RhdGUkLCAocykgPT4gcy5zdWdnZXN0aW9ucywgYXJyRXEpO1xuICAgIHRoaXMucHJvZHVjdHMkID0gZGVyaXZlRmllbGQodGhpcy5yYXdTdGF0ZSQsIChzKSA9PiBzLnByb2R1Y3RzLCBhcnJFcSk7XG4gICAgdGhpcy5hY3RpdmVJbmRleCQgPSBkZXJpdmVGaWVsZCh0aGlzLnJhd1N0YXRlJCwgKHMpID0+IHMuYWN0aXZlRHJvcGRvd25JbmRleCk7XG4gICAgdGhpcy5pc0xvYWRpbmckID0gZGVyaXZlRmllbGQodGhpcy5yYXdTdGF0ZSQsIGNvbXB1dGVVaUxvYWRpbmcpO1xuICAgIHRoaXMuaXNSZWFkeSQgPSBkZXJpdmVGaWVsZCh0aGlzLnJhd1N0YXRlJCwgKHMpID0+IHMuaXNSZWFkeSk7XG4gICAgdGhpcy5pc0ZvY3VzZWQkID0gZGVyaXZlRmllbGQodGhpcy5yYXdTdGF0ZSQsIChzKSA9PiBzLmlzRm9jdXNlZCk7XG4gICAgdGhpcy5pc0Ryb3Bkb3duT3BlbiQgPSBkZXJpdmVGaWVsZCh0aGlzLnJhd1N0YXRlJCwgKHMpID0+IHMuaXNEcm9wZG93bk9wZW4pO1xuICAgIHRoaXMuaXNBY3RpdmVQaWxsU2VsZWN0ZWQkID0gZGVyaXZlRmllbGQodGhpcy5yYXdTdGF0ZSQsIChzKSA9PiBzLmlzQWN0aXZlUGlsbFNlbGVjdGVkKTtcbiAgICB0aGlzLnBsYWNlaG9sZGVyVGV4dCQgPSBkZXJpdmVGaWVsZCh0aGlzLnJhd1N0YXRlJCwgKHMpID0+IHMucGxhY2Vob2xkZXJUZXh0KTtcbiAgICB0aGlzLmVycm9yJCA9IGRlcml2ZUZpZWxkKHRoaXMucmF3U3RhdGUkLCAocykgPT4gcy5lcnJvcik7XG4gICAgdGhpcy5lZGl0aW5nUGFyYW0kID0gZGVyaXZlRmllbGQodGhpcy5yYXdTdGF0ZSQsIChzKSA9PiBzLmVkaXRpbmdQYXJhbSk7XG4gICAgdGhpcy5lZGl0aW5nQW5jaG9yJCA9IGRlcml2ZUZpZWxkKHRoaXMucmF3U3RhdGUkLCAocykgPT4gcy5lZGl0aW5nQW5jaG9yKTtcbiAgICB0aGlzLmNhcmV0T2Zmc2V0JCA9IGRlcml2ZUZpZWxkKHRoaXMucmF3U3RhdGUkLCAocykgPT4gcy5jYXJldE9mZnNldCk7XG5cbiAgICAvLyA9PT0gQ29tcG9zaXRlIG9ic2VydmFibGVzID09PVxuICAgIC8vIFByb2plY3QgZGlyZWN0bHkgb2ZmIGByYXdTdGF0ZSRgIHdpdGggYSBzaW5nbGUgbWFwKCkgc28gZWFjaCBzdG9yZVxuICAgIC8vIHRpY2sgcHJvZHVjZXMgZXhhY3RseSBPTkUgY29oZXJlbnQgc3RhdGUkIGVtaXNzaW9uLiBVc2luZ1xuICAgIC8vIGBjb21iaW5lTGF0ZXN0YCBvdmVyIHRoZSBwZXItZmllbGQgb2JzZXJ2YWJsZXMgaGVyZSB3b3VsZCBmaXJlIG9uZVxuICAgIC8vIGVtaXNzaW9uIHBlciBpbm5lci1zb3VyY2UgdGljayAodXAgdG8gTiBwZXIgc3RvcmUgdXBkYXRlKSwgYW5kIHRoZVxuICAgIC8vIGVkaXRvci1ob3N0IGRpcmVjdGl2ZSdzIHBvc3QtcHJvbW90ZSByZWZvY3VzIHdvdWxkIHJ1biBhZ2FpbnN0IGFuXG4gICAgLy8gaW50ZXJtZWRpYXRlIHN0YXRlIHdoZXJlIGBuZXdQYXJhbUlkYCB3YXMgc2V0IGJ1dCBgc2VnbWVudHNgIC9cbiAgICAvLyBgY2FyZXRPZmZzZXRgIHN0aWxsIGhlbGQgdGhlaXIgb2xkIHZhbHVlcyDigJQgbGVhdmluZyB0aGUgY2FyZXQgc3R1Y2tcbiAgICAvLyBhdCB0aGUgcHJlLWNsaWNrIHBvc2l0aW9uLlxuICAgIHRoaXMuc3RhdGUkID0gdGhpcy5yYXdTdGF0ZSQucGlwZShcbiAgICAgIG1hcChjb21wdXRlU3RhdGUpLFxuICAgICAgc2hhcmVSZXBsYXkoeyBidWZmZXJTaXplOiAxLCByZWZDb3VudDogdHJ1ZSB9KSxcbiAgICApO1xuXG4gICAgdGhpcy5vcHRpb25zUG9zaXRpb24kLm5leHQob3B0cy5vcHRpb25zUG9zaXRpb24gPz8gXCJiZWxvd1wiKTtcbiAgICB0aGlzLmRyb3Bkb3duJCA9IGNvbWJpbmVMYXRlc3QoW3RoaXMucmF3U3RhdGUkLCB0aGlzLm9wdGlvbnNQb3NpdGlvbiRdKS5waXBlKFxuICAgICAgbWFwKChbcywgb3B0aW9uc1Bvc2l0aW9uXSkgPT4gY29tcHV0ZURyb3Bkb3duKHMsIG9wdGlvbnNQb3NpdGlvbikpLFxuICAgICAgc2hhcmVSZXBsYXkoeyBidWZmZXJTaXplOiAxLCByZWZDb3VudDogdHJ1ZSB9KSxcbiAgICApO1xuICB9XG5cbiAgLy8gPT09IFJlYWQtb25seSBhY2Nlc3NvcnMgPT09XG5cbiAgLyoqIFN0YWJsZSBBUklBIGxpc3Rib3ggSUQgZm9yIHRoZSBkcm9wZG93bi4gUGFzcyB0byBgPHRleHRhcmVhIGFyaWEtY29udHJvbHM9XCIuLi5cIj5gLiAqL1xuICBnZXQgbGlzdGJveElkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuY29yZS5saXN0Ym94SWQ7XG4gIH1cblxuICAvKiogV2hldGhlciBgZGVzdHJveSgpYCBoYXMgYmVlbiBjYWxsZWQuIEFmdGVyIGRlc3RydWN0aW9uIGFsbCBhY3Rpb24gbWV0aG9kcyBuby1vcC4gKi9cbiAgZ2V0IGRlc3Ryb3llZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc0Rlc3Ryb3llZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTeW5jaHJvbm91cyBzbmFwc2hvdCBvZiB0aGUgY29udHJvbGxlcidzIGN1cnJlbnQgcHVibGljIHN0YXRlLiBNaXJyb3JzXG4gICAqIHRoZSBsYXRlc3QgZW1pc3Npb24gb2YgYHN0YXRlJGAuIFVzZWZ1bCBpbiBjYWxsYmFja3Mgd2hlcmUgeW91IGNhbid0XG4gICAqIGBzdWJzY3JpYmVgIChlLmcuIGluc2lkZSBhbiBldmVudCBoYW5kbGVyKS5cbiAgICovXG4gIGdldFN0YXRlKCk6IEFJQXV0b2NvbXBsZXRlQ29udHJvbGxlclN0YXRlIHtcbiAgICByZXR1cm4gY29tcHV0ZVN0YXRlKHRoaXMucmF3U3RhdGUkLnZhbHVlKTtcbiAgfVxuXG4gIC8vID09PSBBY3Rpb24gbWV0aG9kcyAocGFzcy10aHJvdWdoIHRvIHRoZSBjb3JlKSA9PT1cbiAgLy9cbiAgLy8gRXZlcnkgYWN0aW9uIG1ldGhvZCBiZWdpbnMgd2l0aCBhbiBgaXNEZXN0cm95ZWRgIGd1YXJkIHNvIHRoYXQgY2FsbGVyc1xuICAvLyB3aG8gaG9sZCBhIHN0YWxlIHJlZmVyZW5jZSBhZnRlciBgZGVzdHJveSgpYCBkb24ndCBhY2NpZGVudGFsbHkgdHJpZ2dlclxuICAvLyB3b3JrIG9uIGEgdG9ybi1kb3duIGNvcmUuIFRoZSB2YW5pbGxhIGNvcmUgZG9lcyBub3QgZ2F0ZSBpdHMgb3duIG1ldGhvZHNcbiAgLy8gcG9zdC1kaXNwb3NlIOKAlCBgcmVzZXQoKWAsIGBoYW5kbGVUZXh0Q2hhbmdlKClgLCBhbmQgZnJpZW5kcyB3b3VsZCBzdGlsbFxuICAvLyBzY2hlZHVsZSBmZXRjaGVzIG9yIGZpcmUgSFRUUCByZXF1ZXN0cyBhZ2FpbnN0IGFuIGFib3J0ZWQgY29udHJvbGxlcixcbiAgLy8gYW5kIHRoZSByZXNwb25zZXMgd291bGQgaGF2ZSBub3doZXJlIHRvIHN1cmZhY2UgKHJhd1N0YXRlJCBpcyBhbHJlYWR5XG4gIC8vIGNvbXBsZXRlKS4gVGhlIGd1YXJkIG1ha2VzIHRoZSBKU0RvYy1wcm9taXNlZCBcIm5vLW9wIHNpbGVudGx5XCJcbiAgLy8gc2VtYW50aWNzIGFjdHVhbGx5IHRydWUuXG5cbiAgLyoqIENsZWFyIGFsbCBzdGF0ZSwgcm90YXRlIGBzZXNzaW9uX2lkYCwgYW5kIHJlLWZldGNoLiBDYWxsIGFmdGVyIHN1Ym1pdC4gKi9cbiAgcmVzZXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNEZXN0cm95ZWQpIHJldHVybjtcbiAgICB0aGlzLmNvcmUucmVzZXQoKTtcbiAgfVxuXG4gIC8qKiBQaWNrIGEgZHJvcGRvd24gb3B0aW9uIChvciByZXBsYWNlIHRoZSByZS1lZGl0ZWQgcGFyYW0gaWYgaW4gcmUtZWRpdCBtb2RlKS4gKi9cbiAgc2VsZWN0T3B0aW9uKG9wdGlvbjogU3VnZ2VzdGlvbk9wdGlvbik6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzRGVzdHJveWVkKSByZXR1cm47XG4gICAgdGhpcy5jb3JlLnNlbGVjdE9wdGlvbihvcHRpb24pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFubm91bmNlIGEgcHJvZHVjdCBzZWxlY3Rpb24g4oCUIGZpcmVzIHRoZSBgb25Qcm9kdWN0U2VsZWN0YCBjYWxsYmFjayB0aGVcbiAgICogY29udHJvbGxlciB3YXMgY29uc3RydWN0ZWQgd2l0aC4gYDxhaS1hdXRvY29tcGxldGUtZHJvcGRvd24+YCBjYWxscyB0aGlzXG4gICAqIGZvciB5b3U7IGNvbnN1bWVycyByZW5kZXJpbmcgdGhlaXIgb3duIHN0cmlwIGNhbGwgaXQgdGhlbXNlbHZlcy5cbiAgICpcbiAgICogRW1pdHRpbmcgaXMgdGhlIHdob2xlIGJlaGF2aW91cjogdGhlIFNESyBkZWxpYmVyYXRlbHkgZG9lcyBub3QgbmF2aWdhdGUgdG9cbiAgICogYHByb2R1Y3QudXJsYCwgYmVjYXVzZSBvbmx5IHRoZSBpbnRlZ3JhdGlvbiBrbm93cyB3aGV0aGVyIGEgc2VsZWN0aW9uXG4gICAqIG1lYW5zIFwib3BlbiB0aGUgUERQXCIsIFwiYWRkIHRvIGNhcnRcIiwgb3IgXCJmaWxsIHRoZSBpbnB1dFwiLlxuICAgKi9cbiAgc2VsZWN0UHJvZHVjdChwcm9kdWN0OiBQcm9kdWN0KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNEZXN0cm95ZWQpIHJldHVybjtcbiAgICB0aGlzLmNvcmUuc2VsZWN0UHJvZHVjdChwcm9kdWN0KTtcbiAgfVxuXG4gIC8qKiBQcm9tb3RlIHRoZSBwaWxsIGF0IGBpbmRleGAgdG8gYWN0aXZlIChmcm9udCBvZiB0aGUgbGlzdCkuICovXG4gIHNldEFjdGl2ZVBpbGwoaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzRGVzdHJveWVkKSByZXR1cm47XG4gICAgdGhpcy5jb3JlLnNldEFjdGl2ZVBpbGwoaW5kZXgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNraXAgdGhlIGFjdGl2ZSBwaWxsIOKAlCBzYW1lIGFjdGlvbiBhcyBwcmVzc2luZyDihpIgYXQgdGhlIGVuZCBvZiB0aGUgaW5wdXQuXG4gICAqIFRoZSBkcm9wZG93bidzIHNraXAgYnV0dG9uIGNhbGxzIHRoaXM7IGNvbnN1bWVycyByZW5kZXJpbmcgdGhlaXIgb3duIHNraXBcbiAgICogYWZmb3JkYW5jZSBjYWxsIGl0IGRpcmVjdGx5LiBUaGUgc2tpcHBlZCBzdWdnZXN0aW9uIGpvaW5zIGBza2lwcGVkUGFyYW1zJGAuXG4gICAqL1xuICBza2lwQWN0aXZlUGlsbCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc0Rlc3Ryb3llZCkgcmV0dXJuO1xuICAgIHRoaXMuY29yZS5za2lwQWN0aXZlUGlsbCgpO1xuICB9XG5cbiAgLyoqIERyb3AgdGhlIGxhc3QgY29tcGxldGVkIHBhcmFtJ3MgXCJjb21wbGV0ZWRcIiBzdGF0dXMuIFRleHQgc3RheXMgYXMgcGxhaW4gdGV4dC4gKi9cbiAgcmVtb3ZlTGFzdFBhcmFtKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzRGVzdHJveWVkKSByZXR1cm47XG4gICAgdGhpcy5jb3JlLnJlbW92ZUxhc3RQYXJhbSgpO1xuICB9XG5cbiAgLyoqIENsZWFyIHRoZSBzaGltbWVyIGFuaW1hdGlvbiBzdGF0ZSBmb3IgdGhlIG1vc3QtcmVjZW50bHktYWRkZWQgcGFyYW0uICovXG4gIGNsZWFyTmV3UGFyYW1JZCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc0Rlc3Ryb3llZCkgcmV0dXJuO1xuICAgIHRoaXMuY29yZS5jbGVhck5ld1BhcmFtSWQoKTtcbiAgfVxuXG4gIC8qKiBDb250cm9sbGVkLW1vZGUgc2V0dGVyIGZvciBlZGl0b3IgdGV4dC4gKi9cbiAgc2V0VmFsdWUodGV4dDogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNEZXN0cm95ZWQpIHJldHVybjtcbiAgICB0aGlzLmNvcmUuc2V0VmFsdWUodGV4dCk7XG4gIH1cblxuICAvKiogQ29udHJvbGxlZC1tb2RlIHNldHRlciBmb3IgY29tcGxldGVkIHBhcmFtcy4gKi9cbiAgc2V0Q29tcGxldGVkUGFyYW1zKHBhcmFtczogQ29tcGxldGVkUGFyYW1TdGF0ZVtdKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNEZXN0cm95ZWQpIHJldHVybjtcbiAgICB0aGlzLmNvcmUuc2V0Q29tcGxldGVkUGFyYW1zKHBhcmFtcyk7XG4gIH1cblxuICAvKiogRm9yd2FyZCBwbGFpbi10ZXh0IGlucHV0IGZyb20gdGhlIGNvbnN1bWVyJ3MgYDx0ZXh0YXJlYT5gIHRvIHRoZSBjb3JlLiAqL1xuICBoYW5kbGVUZXh0Q2hhbmdlKHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc0Rlc3Ryb3llZCkgcmV0dXJuO1xuICAgIHRoaXMuY29yZS5oYW5kbGVUZXh0Q2hhbmdlKHZhbHVlKTtcbiAgfVxuXG4gIC8qKiBGb3J3YXJkIGtleWJvYXJkIGV2ZW50cyBmcm9tIHRoZSBjb25zdW1lcidzIGA8dGV4dGFyZWE+YCB0byB0aGUgY29yZS4gKi9cbiAgaGFuZGxlS2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzRGVzdHJveWVkKSByZXR1cm47XG4gICAgdGhpcy5jb3JlLmhhbmRsZUtleURvd24oZXZlbnQpO1xuICB9XG5cbiAgLyoqIE5vdGlmeSB0aGUgY29yZSBvZiBmb2N1cyBzdGF0ZS4gKi9cbiAgc2V0Rm9jdXNlZChmb2N1c2VkOiBib29sZWFuKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNEZXN0cm95ZWQpIHJldHVybjtcbiAgICB0aGlzLmNvcmUuc2V0Rm9jdXNlZChmb2N1c2VkKTtcbiAgfVxuXG4gIC8qKiBFbnRlciByZS1lZGl0IG1vZGUgZm9yIHRoZSBib2xkIHBhcmFtIHdpdGggdGhlIGdpdmVuIGlkLiAqL1xuICBzdGFydEVkaXRpbmdQYXJhbShwYXJhbUlkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc0Rlc3Ryb3llZCkgcmV0dXJuO1xuICAgIHRoaXMuY29yZS5zdGFydEVkaXRpbmdQYXJhbShwYXJhbUlkKTtcbiAgfVxuXG4gIC8qKiBFeGl0IHJlLWVkaXQgbW9kZSB3aXRob3V0IGNoYW5naW5nIHRoZSBib2xkIHBhcmFtLiAqL1xuICBleGl0RWRpdE1vZGUoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNEZXN0cm95ZWQpIHJldHVybjtcbiAgICB0aGlzLmNvcmUuZXhpdEVkaXRNb2RlKCk7XG4gIH1cblxuICAvKiogRm9yd2FyZCBwb3N0LWlucHV0IGNhcmV0IHBvc2l0aW9uIChleHRlbmRzIHRoZSBlZGl0IHRhaWwpLiAqL1xuICBoYW5kbGVDYXJldEFmdGVySW5wdXQob2Zmc2V0OiBudW1iZXIgfCBudWxsKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNEZXN0cm95ZWQpIHJldHVybjtcbiAgICB0aGlzLmNvcmUuaGFuZGxlQ2FyZXRBZnRlcklucHV0KG9mZnNldCk7XG4gIH1cblxuICAvKiogRm9yd2FyZCBzZWxlY3Rpb24tb25seSBjYXJldCBtb3ZlcyAobWF5IGV4aXQgcmUtZWRpdCkuICovXG4gIGhhbmRsZUNhcmV0TW92ZShvZmZzZXQ6IG51bWJlciB8IG51bGwpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc0Rlc3Ryb3llZCkgcmV0dXJuO1xuICAgIHRoaXMuY29yZS5oYW5kbGVDYXJldE1vdmUob2Zmc2V0KTtcbiAgfVxuXG4gIC8qKiBSZXBsYWNlIHRoZSBib2xkIHBhcmFtIGJlaW5nIHJlLWVkaXRlZC4gUmV0dXJucyB0cnVlIHdoZW4gYXBwbGllZC4gKi9cbiAgcmVwbGFjZUVkaXRpbmdSYW5nZShyZXBsYWNlbWVudDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuaXNEZXN0cm95ZWQpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gdGhpcy5jb3JlLnJlcGxhY2VFZGl0aW5nUmFuZ2UocmVwbGFjZW1lbnQpO1xuICB9XG5cbiAgLyoqIFNldCB0aGUgaGlnaGxpZ2h0ZWQgb3B0aW9uIGluZGV4ICh0eXBpY2FsbHkgZHJpdmVuIGJ5IGhvdmVyKS4gKi9cbiAgc2V0QWN0aXZlRHJvcGRvd25JbmRleChpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNEZXN0cm95ZWQpIHJldHVybjtcbiAgICB0aGlzLmNvcmUuc2V0QWN0aXZlRHJvcGRvd25JbmRleChpbmRleCk7XG4gIH1cblxuICAvKiogUGFnZSB0aGUgZGF0ZXBpY2tlciBiYWNrIG9uZSBtb250aC4gTm8tb3AgdW5sZXNzIGEgZGF0ZSBwaWxsIGlzIGFjdGl2ZS4gKi9cbiAgc2hvd1ByZXZpb3VzTW9udGgoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNEZXN0cm95ZWQpIHJldHVybjtcbiAgICB0aGlzLmNvcmUuc2hvd1ByZXZpb3VzTW9udGgoKTtcbiAgfVxuXG4gIC8qKiBQYWdlIHRoZSBkYXRlcGlja2VyIGZvcndhcmQgb25lIG1vbnRoLiBOby1vcCB1bmxlc3MgYSBkYXRlIHBpbGwgaXMgYWN0aXZlLiAqL1xuICBzaG93TmV4dE1vbnRoKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzRGVzdHJveWVkKSByZXR1cm47XG4gICAgdGhpcy5jb3JlLnNob3dOZXh0TW9udGgoKTtcbiAgfVxuXG4gIC8vID09PSBMaWZlY3ljbGUgPT09XG5cbiAgLyoqXG4gICAqIEFwcGx5IHJ1bnRpbWUgY2hhbmdlcyB0byBhIHN1YnNldCBvZiBvcHRpb25zLiBFdmVudCBjYWxsYmFja3NcbiAgICogKGBvblN1Ym1pdGAsIGBvbkVycm9yYCwgZXRjLikgY2Fubm90IGJlIHN3YXBwZWQgdGhpcyB3YXkg4oCUIHRoZXkgYXJlXG4gICAqIHJlZ2lzdGVyZWQgb25jZSBhdCBjb25zdHJ1Y3Rpb24gKG1hdGNoZXMgdGhlIFJlYWN0IGhvb2sncyBkZXNpZ24pLiBGb3JcbiAgICogZHluYW1pYyBldmVudCByZWFjdGl2aXR5LCBzdWJzY3JpYmUgdG8gdGhlIGNvcnJlc3BvbmRpbmcgb2JzZXJ2YWJsZVxuICAgKiAoZS5nLiBgdGV4dCRgIGluc3RlYWQgb2YgYG9uQ2hhbmdlYCkuXG4gICAqL1xuICB1cGRhdGUob3B0czogQUlBdXRvY29tcGxldGVDb250cm9sbGVyVXBkYXRlKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNEZXN0cm95ZWQpIHJldHVybjtcbiAgICB0aGlzLmNvcmUudXBkYXRlKG9wdHMpO1xuICAgIGlmIChvcHRzLm9wdGlvbnNQb3NpdGlvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLm9wdGlvbnNQb3NpdGlvbiQubmV4dChvcHRzLm9wdGlvbnNQb3NpdGlvbik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlbGVhc2UgYWxsIHJlc291cmNlcyDigJQgdW5zdWJzY3JpYmVzIGZyb20gdGhlIGNvcmUsIGRlc3Ryb3lzIHRoZSBjb3JlLFxuICAgKiBhbmQgY29tcGxldGVzIHRoZSBpbnRlcm5hbCBzdGF0ZSBzdWJqZWN0LiBTYWZlIHRvIGNhbGwgbXVsdGlwbGUgdGltZXMuXG4gICAqIEFmdGVyIGRlc3RydWN0aW9uLCBhY3Rpb24gbWV0aG9kcyBuby1vcCBzaWxlbnRseS5cbiAgICovXG4gIGRlc3Ryb3koKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNEZXN0cm95ZWQpIHJldHVybjtcbiAgICB0aGlzLmlzRGVzdHJveWVkID0gdHJ1ZTtcbiAgICB0aGlzLnVuc3Vic2NyaWJlQ29yZSgpO1xuICAgIHRoaXMuY29yZS5kZXN0cm95KCk7XG4gICAgdGhpcy5yYXdTdGF0ZSQuY29tcGxldGUoKTtcbiAgfVxufVxuXG4vLyA9PT09PSBQdXJlIGhlbHBlcnMg4oCUIG5vdCBwYXJ0IG9mIHRoZSBwdWJsaWMgc3VyZmFjZSA9PT09PVxuXG4vKipcbiAqIFNoYWxsb3cgYXJyYXkgZXF1YWxpdHkuIFRoZSB2YW5pbGxhIHN0b3JlIHJlYXNzaWducyBhcnJheSBmaWVsZHMgb24gZXZlcnlcbiAqIHdyaXRlIChgc3RvcmUuc2V0KHsgY29tcGxldGVkUGFyYW1zOiBbLi4ucHJldiwgeF0gfSlgKSwgc28gcmVmZXJlbmNlXG4gKiBlcXVhbGl0eSBhbG9uZSB3b3VsZCByZS1lbWl0IGRvd25zdHJlYW0gZXZlbiB3aGVuIHRoZSBjb250ZW50cyBhcmVcbiAqIGlkZW50aWNhbC4gVXNlZCBmb3IgYGNvbXBsZXRlZFBhcmFtcyRgLCBgc3VnZ2VzdGlvbnMkYCwgYHN1Z2dlc3Rpb25QaWxscyRgLFxuICogYW5kIGBzZWdtZW50cyRgLlxuICovXG5mdW5jdGlvbiBhcnJFcTxUPihhOiByZWFkb25seSBUW10sIGI6IHJlYWRvbmx5IFRbXSk6IGJvb2xlYW4ge1xuICBpZiAoYSA9PT0gYikgcmV0dXJuIHRydWU7XG4gIGlmIChhLmxlbmd0aCAhPT0gYi5sZW5ndGgpIHJldHVybiBmYWxzZTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKGFbaV0gIT09IGJbaV0pIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gY29tcHV0ZVVpTG9hZGluZyhzOiBDb3JlU3RhdGUpOiBib29sZWFuIHtcbiAgcmV0dXJuIHMuaXNMb2FkaW5nICYmICFzLmVkaXRpbmdQYXJhbSAmJiAhcy5pblNlbGVjdGlvbkFuaW1hdGlvbjtcbn1cblxuZnVuY3Rpb24gY29tcHV0ZVN0YXRlKHM6IENvcmVTdGF0ZSk6IEFJQXV0b2NvbXBsZXRlQ29udHJvbGxlclN0YXRlIHtcbiAgcmV0dXJuIHtcbiAgICB0ZXh0OiBzLnRleHQsXG4gICAgY29tcGxldGVkUGFyYW1zOiBzLmNvbXBsZXRlZFBhcmFtcyxcbiAgICBza2lwcGVkUGFyYW1zOiBzLnNraXBwZWRQYXJhbXMsXG4gICAgc3VnZ2VzdGlvblBpbGxzOiBzLmFjdGlvbmFibGVTdWdnZXN0aW9ucyxcbiAgICBzZWdtZW50czogcy5zZWdtZW50cyxcbiAgICBuZXdQYXJhbUlkOiBzLm5ld1BhcmFtSWQsXG4gICAgc3VnZ2VzdGlvbnM6IHMuc3VnZ2VzdGlvbnMsXG4gICAgcHJvZHVjdHM6IHMucHJvZHVjdHMsXG4gICAgYWN0aXZlSW5kZXg6IHMuYWN0aXZlRHJvcGRvd25JbmRleCxcbiAgICBpc0xvYWRpbmc6IGNvbXB1dGVVaUxvYWRpbmcocyksXG4gICAgaXNSZWFkeTogcy5pc1JlYWR5LFxuICAgIGlzRm9jdXNlZDogcy5pc0ZvY3VzZWQsXG4gICAgaXNEcm9wZG93bk9wZW46IHMuaXNEcm9wZG93bk9wZW4sXG4gICAgcGxhY2Vob2xkZXJUZXh0OiBzLnBsYWNlaG9sZGVyVGV4dCxcbiAgICBlcnJvcjogcy5lcnJvcixcbiAgICBlZGl0aW5nUGFyYW06IHMuZWRpdGluZ1BhcmFtLFxuICAgIGVkaXRpbmdJZGVudGlmaWVkOiBzLmVkaXRpbmdJZGVudGlmaWVkLFxuICAgIGVkaXRpbmdBbmNob3I6IHMuZWRpdGluZ0FuY2hvcixcbiAgICBjYXJldE9mZnNldDogcy5jYXJldE9mZnNldCxcbiAgfTtcbn1cblxuZnVuY3Rpb24gY29tcHV0ZURyb3Bkb3duKFxuICBzOiBDb3JlU3RhdGUsXG4gIG9wdGlvbnNQb3NpdGlvbjogXCJhYm92ZVwiIHwgXCJiZWxvd1wiLFxuKTogQUlBdXRvY29tcGxldGVEcm9wZG93blN0YXRlIHtcbiAgY29uc3QgZWRpdGluZ1BhcmFtID0gcy5lZGl0aW5nUGFyYW07XG4gIGNvbnN0IGVkaXRpbmdJZGVudGlmaWVkID0gcy5lZGl0aW5nSWRlbnRpZmllZDtcbiAgY29uc3QgYWN0aXZlU3VnZ2VzdGlvbiA9IHMuYWN0aW9uYWJsZVN1Z2dlc3Rpb25zWzBdO1xuICBjb25zdCBkcm9wZG93blBpbGw6IFN1Z2dlc3Rpb24gfCBudWxsID0gZWRpdGluZ1BhcmFtXG4gICAgPyB7XG4gICAgICAgIHR5cGU6IGVkaXRpbmdQYXJhbS5zdWdnZXN0aW9uVHlwZSxcbiAgICAgICAgdGV4dDogZWRpdGluZ1BhcmFtLnN1Z2dlc3Rpb25QbGFjZWhvbGRlcixcbiAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIG9wdGlvbnM6IGVkaXRpbmdQYXJhbS5vcHRpb25zLFxuICAgICAgfVxuICAgIDogZWRpdGluZ0lkZW50aWZpZWRcbiAgICAgID8gLy8gQW5zd2VyaW5nIGEgc3BhbiB0aGUgdXNlciB3cm90ZSB0aGVtc2VsdmVzOiB0aGUgcGlsbCBuYW1lcyB0aGVcbiAgICAgICAgLy8gcGFyYW1ldGVyIHRoZSBzZXJ2ZXIgbWF0Y2hlZCBpdCB0bywgc28gdGhlIGNhbGVuZGFyIGlzbid0IHVubGFiZWxsZWQuXG4gICAgICAgIHtcbiAgICAgICAgICB0eXBlOiBlZGl0aW5nSWRlbnRpZmllZC50eXBlLFxuICAgICAgICAgIHRleHQ6IGVkaXRpbmdJZGVudGlmaWVkLnR5cGUsXG4gICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgb3B0aW9uczogW10sXG4gICAgICAgIH1cbiAgICAgIDogbnVsbDtcbiAgY29uc3QgZHJvcGRvd25BY3RpdmVQaWxsID0gZHJvcGRvd25QaWxsID8/IGFjdGl2ZVN1Z2dlc3Rpb247XG4gIGNvbnN0IGRyb3Bkb3duUGlsbHMgPSBkcm9wZG93blBpbGwgPyBbZHJvcGRvd25QaWxsXSA6IHMuYWN0aW9uYWJsZVN1Z2dlc3Rpb25zO1xuICByZXR1cm4ge1xuICAgIHN1Z2dlc3Rpb25zOiBkcm9wZG93bkFjdGl2ZVBpbGwgPyBbeyAuLi5kcm9wZG93bkFjdGl2ZVBpbGwsIG9wdGlvbnM6IHMuZmlsdGVyZWRPcHRpb25zIH1dIDogW10sXG4gICAgYWN0aXZlSW5kZXg6IHMuYWN0aXZlRHJvcGRvd25JbmRleCxcbiAgICBpc09wZW46IHMuaXNEcm9wZG93bk9wZW4sXG4gICAgcGlsbHM6IGRyb3Bkb3duUGlsbHMsXG4gICAgaXNBY3RpdmVQaWxsU2VsZWN0ZWQ6IHMuaXNBY3RpdmVQaWxsU2VsZWN0ZWQsXG4gICAgaXNMb2FkaW5nOiBjb21wdXRlVWlMb2FkaW5nKHMpLFxuICAgIGlzSW5wdXRFbXB0eTogcy50ZXh0LnRyaW0oKS5sZW5ndGggPT09IDAsXG4gICAgcHJvZHVjdHM6IHMucHJvZHVjdHMsXG4gICAgaXNFZGl0aW5nOiBCb29sZWFuKGVkaXRpbmdQYXJhbSkgfHwgQm9vbGVhbihlZGl0aW5nSWRlbnRpZmllZCksXG4gICAgaW5TZWxlY3Rpb25BbmltYXRpb246IHMuaW5TZWxlY3Rpb25BbmltYXRpb24sXG4gICAgLy8gRGF0ZXBpY2tlci4gYHMuZmlsdGVyZWRPcHRpb25zYCBhYm92ZSBhbHJlYWR5IGNhcnJpZXMgdGhlIHZpc2libGVcbiAgICAvLyBtb250aCdzIGNlbGxzIHJhdGhlciB0aGFuIHRoZSBzdWdnZXN0aW9uJ3Mgb3duIG9wdGlvbnMgd2hlbiB0aGlzIGlzXG4gICAgLy8gXCJkYXRlXCIg4oCUIHRoZSBjb3JlIHN3YXBwZWQgdGhlbSBpbiBpdHMgZGVyaXZlIGxheWVyLCBzbyB0aGUgZHJvcGRvd24gb25seVxuICAgIC8vIGhhcyB0byBrbm93IHdoaWNoIGJvZHkgdG8gZHJhdy5cbiAgICBmb3JtYXRUeXBlOiBzLmFjdGl2ZUZvcm1hdFR5cGUsXG4gICAgZGF0ZVZpZXc6IHMuZGF0ZVZpZXcsXG4gICAgc2VsZWN0ZWREYXRlSXNvOiBlZGl0aW5nSWRlbnRpZmllZFxuICAgICAgPyBlZGl0aW5nSWRlbnRpZmllZC5pc29cbiAgICAgIDogc2VsZWN0ZWRJc29Gcm9tVGV4dChlZGl0aW5nUGFyYW0/LnRleHQpLFxuICAgIG9wdGlvbnNQb3NpdGlvbixcbiAgfTtcbn1cbiJdfQ==
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import { CommonModule } from "@angular/common";
|
|
2
|
+
import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output, ViewEncapsulation, } from "@angular/core";
|
|
3
|
+
import { cellDay, cellIso, isoDate, monthLabel, WEEKDAY_LABELS, } from "@magicx-eng/ai-autocomplete-vanilla";
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
import * as i1 from "@angular/common";
|
|
6
|
+
/**
|
|
7
|
+
* The dropdown's calendar body, rendered in place of the options grid when the
|
|
8
|
+
* active parameter is a date. Angular analogue of vanilla's `renderDateGrid`
|
|
9
|
+
* and React's `<DateGrid>`.
|
|
10
|
+
*
|
|
11
|
+
* The cells carry the same `${listboxId}-option-${i}` ids, `role="option"` and
|
|
12
|
+
* `aria-selected` the options grid emits, and that is load-bearing rather than
|
|
13
|
+
* cosmetic: the keyboard controller lives in the vanilla core for all three
|
|
14
|
+
* packages, navigates by index into `filteredOptions`, and commits by clicking
|
|
15
|
+
* `#${listboxId}-option-${i}`. `getEffectiveColumns` also measures the live
|
|
16
|
+
* `grid-template-columns` of option-0's parent, which is why the 7 columns sit
|
|
17
|
+
* on the cell container itself and not on an ancestor.
|
|
18
|
+
*
|
|
19
|
+
* @internal
|
|
20
|
+
*/
|
|
21
|
+
export class DateGridComponent {
|
|
22
|
+
constructor() {
|
|
23
|
+
/** The visible month's cells. These ARE `filteredOptions` — see `buildDateOptions`. */
|
|
24
|
+
this.options = [];
|
|
25
|
+
this.activeIndex = -1;
|
|
26
|
+
this.listboxId = "";
|
|
27
|
+
this.view = null;
|
|
28
|
+
/** `YYYY-MM-DD` the param being re-edited already holds, or null. */
|
|
29
|
+
this.selectedIso = null;
|
|
30
|
+
this.select = new EventEmitter();
|
|
31
|
+
this.highlight = new EventEmitter();
|
|
32
|
+
this.previousMonth = new EventEmitter();
|
|
33
|
+
this.nextMonth = new EventEmitter();
|
|
34
|
+
this.weekdays = WEEKDAY_LABELS;
|
|
35
|
+
/** Index of the cell showing a 500ms press animation, or -1. */
|
|
36
|
+
this.pressedIndex = -1;
|
|
37
|
+
// Padding cells have no date of their own, so they key off position.
|
|
38
|
+
this.trackByCell = (index, option) => cellIso(option) ?? `pad-${index}`;
|
|
39
|
+
}
|
|
40
|
+
get monthLabel() {
|
|
41
|
+
return this.view ? monthLabel(this.view) : "";
|
|
42
|
+
}
|
|
43
|
+
dayOf(option) {
|
|
44
|
+
return cellDay(option);
|
|
45
|
+
}
|
|
46
|
+
isToday(option) {
|
|
47
|
+
return cellIso(option) === isoDate(new Date());
|
|
48
|
+
}
|
|
49
|
+
isSelected(option) {
|
|
50
|
+
const iso = cellIso(option);
|
|
51
|
+
return iso != null && this.selectedIso != null && iso === this.selectedIso;
|
|
52
|
+
}
|
|
53
|
+
onSelect(option, index) {
|
|
54
|
+
this.pressedIndex = index;
|
|
55
|
+
this.select.emit(option);
|
|
56
|
+
setTimeout(() => {
|
|
57
|
+
this.pressedIndex = -1;
|
|
58
|
+
}, 500);
|
|
59
|
+
}
|
|
60
|
+
onKeyDown(event, option, index) {
|
|
61
|
+
if (event.key === "Enter" || event.key === " ") {
|
|
62
|
+
event.preventDefault();
|
|
63
|
+
this.onSelect(option, index);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
/** Keeps the input focused, which the dropdown's visibility gate depends on. */
|
|
67
|
+
preventBlur(event) {
|
|
68
|
+
event.preventDefault();
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
DateGridComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: DateGridComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
72
|
+
DateGridComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: DateGridComponent, isStandalone: true, selector: "aia-date-grid", inputs: { options: "options", activeIndex: "activeIndex", listboxId: "listboxId", view: "view", selectedIso: "selectedIso" }, outputs: { select: "select", highlight: "highlight", previousMonth: "previousMonth", nextMonth: "nextMonth" }, ngImport: i0, template: "<div class=\"magicx-aia-datepicker\" data-aia-datepicker=\"\">\n <div class=\"magicx-aia-datepicker-header\">\n <!-- tabIndex -1 for the same reason the skip button is: Tab is already\n bound to walking the dropdown's options. -->\n <button\n type=\"button\"\n tabindex=\"-1\"\n class=\"magicx-aia-datepicker-nav\"\n data-aia-date-prev=\"\"\n aria-label=\"Previous month\"\n (mousedown)=\"preventBlur($event)\"\n (click)=\"previousMonth.emit()\"\n >\n ‹\n </button>\n <span class=\"magicx-aia-datepicker-month\" data-aia-date-month=\"\" aria-live=\"polite\">\n {{ monthLabel }}\n </span>\n <button\n type=\"button\"\n tabindex=\"-1\"\n class=\"magicx-aia-datepicker-nav\"\n data-aia-date-next=\"\"\n aria-label=\"Next month\"\n (mousedown)=\"preventBlur($event)\"\n (click)=\"nextMonth.emit()\"\n >\n ›\n </button>\n </div>\n\n <!-- Decorative: each cell announces its own full date, so repeating the\n column letters to AT adds noise \u2014 and the duplicate T/S would be\n meaningless read aloud anyway. -->\n <div class=\"magicx-aia-datepicker-weekdays\" aria-hidden=\"true\">\n <span class=\"magicx-aia-datepicker-weekday\" *ngFor=\"let label of weekdays\">{{ label }}</span>\n </div>\n\n <div class=\"magicx-aia-datepicker-grid\" data-aia-date-grid=\"\">\n <ng-container *ngFor=\"let option of options; trackBy: trackByCell; let i = index\">\n <!-- Padding for the days before the 1st / after the last. Non-tappable,\n so arrow navigation skips it; hidden from AT so the month reads as\n its own days and nothing else. -->\n <div\n *ngIf=\"dayOf(option) === null; else dayCell\"\n [id]=\"listboxId + '-option-' + i\"\n role=\"option\"\n data-aia-option=\"\"\n data-aia-date-cell=\"\"\n aria-hidden=\"true\"\n [attr.aria-selected]=\"false\"\n tabindex=\"-1\"\n class=\"magicx-aia-date-cell magicx-aia-date-cell--blank\"\n ></div>\n\n <ng-template #dayCell>\n <div\n [id]=\"listboxId + '-option-' + i\"\n role=\"option\"\n data-aia-option=\"\"\n data-aia-date-cell=\"\"\n [attr.aria-selected]=\"i === activeIndex\"\n [attr.aria-label]=\"option.text\"\n tabindex=\"0\"\n class=\"magicx-aia-date-cell magicx-aia-date-cell--day\"\n [class.magicx-aia-date-cell--highlighted]=\"i === activeIndex\"\n [class.magicx-aia-date-cell--today]=\"isToday(option)\"\n [class.magicx-aia-date-cell--selected]=\"isSelected(option)\"\n [class.magicx-aia-date-cell--pressed]=\"i === pressedIndex\"\n (click)=\"onSelect(option, i)\"\n (keydown)=\"onKeyDown($event, option, i)\"\n (mouseenter)=\"highlight.emit(i)\"\n >\n <!-- The cell paints the day number; `option.text` is the full\n committed value (\"March 23 2026\") and is what AT announces,\n since that is what selecting it puts in the input. -->\n <span class=\"magicx-aia-date-cell-number\">{{ dayOf(option) }}</span>\n </div>\n </ng-template>\n </ng-container>\n </div>\n</div>\n", styles: [".magicx-aia-datepicker{display:flex;flex-direction:column;gap:4px;padding:4px 2px 8px}.magicx-aia-datepicker-header{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:2px 6px 6px}.magicx-aia-datepicker-month{font-family:inherit;font-size:var(--aia-date-month-font-size, 14px);font-weight:500;line-height:20px;color:var(--aia-option-color-selected, var(--aia-color-text-default, #fff))}.magicx-aia-datepicker-nav{display:inline-flex;align-items:center;justify-content:center;width:24px;height:24px;padding:0;border:none;border-radius:6px;background:transparent;font-family:inherit;font-size:16px;line-height:1;color:var(--aia-option-color, var(--aia-color-text-muted, #c1c4cb));cursor:pointer;transition:color .15s ease-out,background-color .15s ease-out}.magicx-aia-datepicker-nav:hover{color:var(--aia-option-color-selected, var(--aia-color-text-default, #fff));background:var(--aia-option-bg, transparent)}.magicx-aia-datepicker-weekdays,.magicx-aia-datepicker-grid{display:grid;grid-template-columns:repeat(7,minmax(0,1fr))}.magicx-aia-datepicker-weekday{padding:2px 0;text-align:center;font-family:inherit;font-size:var(--aia-date-weekday-font-size, 11px);font-weight:500;line-height:16px;color:var(--aia-option-color, var(--aia-color-text-muted, #c1c4cb));opacity:.7}.magicx-aia-date-cell{display:flex;align-items:center;justify-content:center;min-width:0;height:var(--aia-date-row-height, 40px);font-family:inherit;font-size:var(--aia-date-cell-font-size, 14px);font-weight:450;line-height:20px;color:var(--aia-option-color, var(--aia-color-text-muted, #c1c4cb))}.magicx-aia-date-cell-number{display:flex;align-items:center;justify-content:center;width:var(--aia-date-cell-size, 36px);height:var(--aia-date-cell-size, 36px);border-radius:8px}.magicx-aia-date-cell--day{cursor:pointer}.magicx-aia-date-cell--blank{cursor:default}.magicx-aia-date-cell--day:hover .magicx-aia-date-cell-number,.magicx-aia-date-cell--highlighted .magicx-aia-date-cell-number{color:var(--aia-option-color-selected, var(--aia-color-text-default, #fff));background:var(--aia-option-bg, transparent);font-weight:500}.magicx-aia-date-cell--today .magicx-aia-date-cell-number{box-shadow:inset 0 0 0 1px var(--aia-date-today-ring, var(--aia-option-color, var(--aia-color-text-muted, #c1c4cb)))}.magicx-aia-date-cell--selected .magicx-aia-date-cell-number{color:var(--aia-option-color-selected, var(--aia-color-text-default, #fff));background:var(--aia-date-selected-bg, rgba(var(--aia-streak-rgb, 255, 255, 255), .12));font-weight:500}.magicx-aia-date-cell--pressed .magicx-aia-date-cell-number{opacity:.8;background:rgba(var(--aia-streak-rgb, 255, 255, 255),.06)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
73
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: DateGridComponent, decorators: [{
|
|
74
|
+
type: Component,
|
|
75
|
+
args: [{ selector: "aia-date-grid", standalone: true, imports: [CommonModule], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: "<div class=\"magicx-aia-datepicker\" data-aia-datepicker=\"\">\n <div class=\"magicx-aia-datepicker-header\">\n <!-- tabIndex -1 for the same reason the skip button is: Tab is already\n bound to walking the dropdown's options. -->\n <button\n type=\"button\"\n tabindex=\"-1\"\n class=\"magicx-aia-datepicker-nav\"\n data-aia-date-prev=\"\"\n aria-label=\"Previous month\"\n (mousedown)=\"preventBlur($event)\"\n (click)=\"previousMonth.emit()\"\n >\n ‹\n </button>\n <span class=\"magicx-aia-datepicker-month\" data-aia-date-month=\"\" aria-live=\"polite\">\n {{ monthLabel }}\n </span>\n <button\n type=\"button\"\n tabindex=\"-1\"\n class=\"magicx-aia-datepicker-nav\"\n data-aia-date-next=\"\"\n aria-label=\"Next month\"\n (mousedown)=\"preventBlur($event)\"\n (click)=\"nextMonth.emit()\"\n >\n ›\n </button>\n </div>\n\n <!-- Decorative: each cell announces its own full date, so repeating the\n column letters to AT adds noise \u2014 and the duplicate T/S would be\n meaningless read aloud anyway. -->\n <div class=\"magicx-aia-datepicker-weekdays\" aria-hidden=\"true\">\n <span class=\"magicx-aia-datepicker-weekday\" *ngFor=\"let label of weekdays\">{{ label }}</span>\n </div>\n\n <div class=\"magicx-aia-datepicker-grid\" data-aia-date-grid=\"\">\n <ng-container *ngFor=\"let option of options; trackBy: trackByCell; let i = index\">\n <!-- Padding for the days before the 1st / after the last. Non-tappable,\n so arrow navigation skips it; hidden from AT so the month reads as\n its own days and nothing else. -->\n <div\n *ngIf=\"dayOf(option) === null; else dayCell\"\n [id]=\"listboxId + '-option-' + i\"\n role=\"option\"\n data-aia-option=\"\"\n data-aia-date-cell=\"\"\n aria-hidden=\"true\"\n [attr.aria-selected]=\"false\"\n tabindex=\"-1\"\n class=\"magicx-aia-date-cell magicx-aia-date-cell--blank\"\n ></div>\n\n <ng-template #dayCell>\n <div\n [id]=\"listboxId + '-option-' + i\"\n role=\"option\"\n data-aia-option=\"\"\n data-aia-date-cell=\"\"\n [attr.aria-selected]=\"i === activeIndex\"\n [attr.aria-label]=\"option.text\"\n tabindex=\"0\"\n class=\"magicx-aia-date-cell magicx-aia-date-cell--day\"\n [class.magicx-aia-date-cell--highlighted]=\"i === activeIndex\"\n [class.magicx-aia-date-cell--today]=\"isToday(option)\"\n [class.magicx-aia-date-cell--selected]=\"isSelected(option)\"\n [class.magicx-aia-date-cell--pressed]=\"i === pressedIndex\"\n (click)=\"onSelect(option, i)\"\n (keydown)=\"onKeyDown($event, option, i)\"\n (mouseenter)=\"highlight.emit(i)\"\n >\n <!-- The cell paints the day number; `option.text` is the full\n committed value (\"March 23 2026\") and is what AT announces,\n since that is what selecting it puts in the input. -->\n <span class=\"magicx-aia-date-cell-number\">{{ dayOf(option) }}</span>\n </div>\n </ng-template>\n </ng-container>\n </div>\n</div>\n", styles: [".magicx-aia-datepicker{display:flex;flex-direction:column;gap:4px;padding:4px 2px 8px}.magicx-aia-datepicker-header{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:2px 6px 6px}.magicx-aia-datepicker-month{font-family:inherit;font-size:var(--aia-date-month-font-size, 14px);font-weight:500;line-height:20px;color:var(--aia-option-color-selected, var(--aia-color-text-default, #fff))}.magicx-aia-datepicker-nav{display:inline-flex;align-items:center;justify-content:center;width:24px;height:24px;padding:0;border:none;border-radius:6px;background:transparent;font-family:inherit;font-size:16px;line-height:1;color:var(--aia-option-color, var(--aia-color-text-muted, #c1c4cb));cursor:pointer;transition:color .15s ease-out,background-color .15s ease-out}.magicx-aia-datepicker-nav:hover{color:var(--aia-option-color-selected, var(--aia-color-text-default, #fff));background:var(--aia-option-bg, transparent)}.magicx-aia-datepicker-weekdays,.magicx-aia-datepicker-grid{display:grid;grid-template-columns:repeat(7,minmax(0,1fr))}.magicx-aia-datepicker-weekday{padding:2px 0;text-align:center;font-family:inherit;font-size:var(--aia-date-weekday-font-size, 11px);font-weight:500;line-height:16px;color:var(--aia-option-color, var(--aia-color-text-muted, #c1c4cb));opacity:.7}.magicx-aia-date-cell{display:flex;align-items:center;justify-content:center;min-width:0;height:var(--aia-date-row-height, 40px);font-family:inherit;font-size:var(--aia-date-cell-font-size, 14px);font-weight:450;line-height:20px;color:var(--aia-option-color, var(--aia-color-text-muted, #c1c4cb))}.magicx-aia-date-cell-number{display:flex;align-items:center;justify-content:center;width:var(--aia-date-cell-size, 36px);height:var(--aia-date-cell-size, 36px);border-radius:8px}.magicx-aia-date-cell--day{cursor:pointer}.magicx-aia-date-cell--blank{cursor:default}.magicx-aia-date-cell--day:hover .magicx-aia-date-cell-number,.magicx-aia-date-cell--highlighted .magicx-aia-date-cell-number{color:var(--aia-option-color-selected, var(--aia-color-text-default, #fff));background:var(--aia-option-bg, transparent);font-weight:500}.magicx-aia-date-cell--today .magicx-aia-date-cell-number{box-shadow:inset 0 0 0 1px var(--aia-date-today-ring, var(--aia-option-color, var(--aia-color-text-muted, #c1c4cb)))}.magicx-aia-date-cell--selected .magicx-aia-date-cell-number{color:var(--aia-option-color-selected, var(--aia-color-text-default, #fff));background:var(--aia-date-selected-bg, rgba(var(--aia-streak-rgb, 255, 255, 255), .12));font-weight:500}.magicx-aia-date-cell--pressed .magicx-aia-date-cell-number{opacity:.8;background:rgba(var(--aia-streak-rgb, 255, 255, 255),.06)}\n"] }]
|
|
76
|
+
}], propDecorators: { options: [{
|
|
77
|
+
type: Input
|
|
78
|
+
}], activeIndex: [{
|
|
79
|
+
type: Input
|
|
80
|
+
}], listboxId: [{
|
|
81
|
+
type: Input
|
|
82
|
+
}], view: [{
|
|
83
|
+
type: Input
|
|
84
|
+
}], selectedIso: [{
|
|
85
|
+
type: Input
|
|
86
|
+
}], select: [{
|
|
87
|
+
type: Output
|
|
88
|
+
}], highlight: [{
|
|
89
|
+
type: Output
|
|
90
|
+
}], previousMonth: [{
|
|
91
|
+
type: Output
|
|
92
|
+
}], nextMonth: [{
|
|
93
|
+
type: Output
|
|
94
|
+
}] } });
|
|
95
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1ncmlkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvaW50ZXJuYWwvZGF0ZS1ncmlkL2RhdGUtZ3JpZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2ludGVybmFsL2RhdGUtZ3JpZC9kYXRlLWdyaWQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBQ0wsTUFBTSxFQUNOLGlCQUFpQixHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQ0wsT0FBTyxFQUNQLE9BQU8sRUFFUCxPQUFPLEVBQ1AsVUFBVSxFQUVWLGNBQWMsR0FDZixNQUFNLHFDQUFxQyxDQUFDOzs7QUFFN0M7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFVSCxNQUFNLE9BQU8saUJBQWlCO0lBVDlCO1FBVUUsdUZBQXVGO1FBQzlFLFlBQU8sR0FBdUIsRUFBRSxDQUFDO1FBQ2pDLGdCQUFXLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDakIsY0FBUyxHQUFHLEVBQUUsQ0FBQztRQUNmLFNBQUksR0FBeUIsSUFBSSxDQUFDO1FBQzNDLHFFQUFxRTtRQUM1RCxnQkFBVyxHQUFrQixJQUFJLENBQUM7UUFFeEIsV0FBTSxHQUFHLElBQUksWUFBWSxFQUFvQixDQUFDO1FBQzlDLGNBQVMsR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO1FBQ3ZDLGtCQUFhLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUN6QyxjQUFTLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUUvQyxhQUFRLEdBQUcsY0FBYyxDQUFDO1FBRW5DLGdFQUFnRTtRQUNoRSxpQkFBWSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBdUNsQixxRUFBcUU7UUFDckUsZ0JBQVcsR0FBRyxDQUFDLEtBQWEsRUFBRSxNQUF3QixFQUFVLEVBQUUsQ0FDaEUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLE9BQU8sS0FBSyxFQUFFLENBQUM7S0FDckM7SUF4Q0MsSUFBSSxVQUFVO1FBQ1osT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDaEQsQ0FBQztJQUVELEtBQUssQ0FBQyxNQUF3QjtRQUM1QixPQUFPLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN6QixDQUFDO0lBRUQsT0FBTyxDQUFDLE1BQXdCO1FBQzlCLE9BQU8sT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLE9BQU8sQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLENBQUM7SUFDakQsQ0FBQztJQUVELFVBQVUsQ0FBQyxNQUF3QjtRQUNqQyxNQUFNLEdBQUcsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDNUIsT0FBTyxHQUFHLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxXQUFXLElBQUksSUFBSSxJQUFJLEdBQUcsS0FBSyxJQUFJLENBQUMsV0FBVyxDQUFDO0lBQzdFLENBQUM7SUFFRCxRQUFRLENBQUMsTUFBd0IsRUFBRSxLQUFhO1FBQzlDLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO1FBQzFCLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3pCLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDZCxJQUFJLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ3pCLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNWLENBQUM7SUFFRCxTQUFTLENBQUMsS0FBb0IsRUFBRSxNQUF3QixFQUFFLEtBQWE7UUFDckUsSUFBSSxLQUFLLENBQUMsR0FBRyxLQUFLLE9BQU8sSUFBSSxLQUFLLENBQUMsR0FBRyxLQUFLLEdBQUcsRUFBRTtZQUM5QyxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDdkIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7U0FDOUI7SUFDSCxDQUFDO0lBRUQsZ0ZBQWdGO0lBQ2hGLFdBQVcsQ0FBQyxLQUFpQjtRQUMzQixLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7SUFDekIsQ0FBQzs7K0dBdERVLGlCQUFpQjttR0FBakIsaUJBQWlCLHNUQzNDOUIsZ3VHQWtGQSx3cUZEN0NZLFlBQVk7NEZBTVgsaUJBQWlCO2tCQVQ3QixTQUFTOytCQUNFLGVBQWUsY0FDYixJQUFJLFdBQ1AsQ0FBQyxZQUFZLENBQUMsbUJBQ04sdUJBQXVCLENBQUMsTUFBTSxpQkFDaEMsaUJBQWlCLENBQUMsSUFBSTs4QkFNNUIsT0FBTztzQkFBZixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBRUcsV0FBVztzQkFBbkIsS0FBSztnQkFFYSxNQUFNO3NCQUF4QixNQUFNO2dCQUNZLFNBQVM7c0JBQTNCLE1BQU07Z0JBQ1ksYUFBYTtzQkFBL0IsTUFBTTtnQkFDWSxTQUFTO3NCQUEzQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vblwiO1xuaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7XG4gIGNlbGxEYXksXG4gIGNlbGxJc28sXG4gIHR5cGUgRGF0ZU1vbnRoVmlldyxcbiAgaXNvRGF0ZSxcbiAgbW9udGhMYWJlbCxcbiAgdHlwZSBTdWdnZXN0aW9uT3B0aW9uLFxuICBXRUVLREFZX0xBQkVMUyxcbn0gZnJvbSBcIkBtYWdpY3gtZW5nL2FpLWF1dG9jb21wbGV0ZS12YW5pbGxhXCI7XG5cbi8qKlxuICogVGhlIGRyb3Bkb3duJ3MgY2FsZW5kYXIgYm9keSwgcmVuZGVyZWQgaW4gcGxhY2Ugb2YgdGhlIG9wdGlvbnMgZ3JpZCB3aGVuIHRoZVxuICogYWN0aXZlIHBhcmFtZXRlciBpcyBhIGRhdGUuIEFuZ3VsYXIgYW5hbG9ndWUgb2YgdmFuaWxsYSdzIGByZW5kZXJEYXRlR3JpZGBcbiAqIGFuZCBSZWFjdCdzIGA8RGF0ZUdyaWQ+YC5cbiAqXG4gKiBUaGUgY2VsbHMgY2FycnkgdGhlIHNhbWUgYCR7bGlzdGJveElkfS1vcHRpb24tJHtpfWAgaWRzLCBgcm9sZT1cIm9wdGlvblwiYCBhbmRcbiAqIGBhcmlhLXNlbGVjdGVkYCB0aGUgb3B0aW9ucyBncmlkIGVtaXRzLCBhbmQgdGhhdCBpcyBsb2FkLWJlYXJpbmcgcmF0aGVyIHRoYW5cbiAqIGNvc21ldGljOiB0aGUga2V5Ym9hcmQgY29udHJvbGxlciBsaXZlcyBpbiB0aGUgdmFuaWxsYSBjb3JlIGZvciBhbGwgdGhyZWVcbiAqIHBhY2thZ2VzLCBuYXZpZ2F0ZXMgYnkgaW5kZXggaW50byBgZmlsdGVyZWRPcHRpb25zYCwgYW5kIGNvbW1pdHMgYnkgY2xpY2tpbmdcbiAqIGAjJHtsaXN0Ym94SWR9LW9wdGlvbi0ke2l9YC4gYGdldEVmZmVjdGl2ZUNvbHVtbnNgIGFsc28gbWVhc3VyZXMgdGhlIGxpdmVcbiAqIGBncmlkLXRlbXBsYXRlLWNvbHVtbnNgIG9mIG9wdGlvbi0wJ3MgcGFyZW50LCB3aGljaCBpcyB3aHkgdGhlIDcgY29sdW1ucyBzaXRcbiAqIG9uIHRoZSBjZWxsIGNvbnRhaW5lciBpdHNlbGYgYW5kIG5vdCBvbiBhbiBhbmNlc3Rvci5cbiAqXG4gKiBAaW50ZXJuYWxcbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiBcImFpYS1kYXRlLWdyaWRcIixcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZV0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICB0ZW1wbGF0ZVVybDogXCIuL2RhdGUtZ3JpZC5jb21wb25lbnQuaHRtbFwiLFxuICBzdHlsZVVybHM6IFtcIi4vZGF0ZS1ncmlkLmNvbXBvbmVudC5jc3NcIl0sXG59KVxuZXhwb3J0IGNsYXNzIERhdGVHcmlkQ29tcG9uZW50IHtcbiAgLyoqIFRoZSB2aXNpYmxlIG1vbnRoJ3MgY2VsbHMuIFRoZXNlIEFSRSBgZmlsdGVyZWRPcHRpb25zYCDigJQgc2VlIGBidWlsZERhdGVPcHRpb25zYC4gKi9cbiAgQElucHV0KCkgb3B0aW9uczogU3VnZ2VzdGlvbk9wdGlvbltdID0gW107XG4gIEBJbnB1dCgpIGFjdGl2ZUluZGV4ID0gLTE7XG4gIEBJbnB1dCgpIGxpc3Rib3hJZCA9IFwiXCI7XG4gIEBJbnB1dCgpIHZpZXc6IERhdGVNb250aFZpZXcgfCBudWxsID0gbnVsbDtcbiAgLyoqIGBZWVlZLU1NLUREYCB0aGUgcGFyYW0gYmVpbmcgcmUtZWRpdGVkIGFscmVhZHkgaG9sZHMsIG9yIG51bGwuICovXG4gIEBJbnB1dCgpIHNlbGVjdGVkSXNvOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuICBAT3V0cHV0KCkgcmVhZG9ubHkgc2VsZWN0ID0gbmV3IEV2ZW50RW1pdHRlcjxTdWdnZXN0aW9uT3B0aW9uPigpO1xuICBAT3V0cHV0KCkgcmVhZG9ubHkgaGlnaGxpZ2h0ID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XG4gIEBPdXRwdXQoKSByZWFkb25seSBwcmV2aW91c01vbnRoID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBAT3V0cHV0KCkgcmVhZG9ubHkgbmV4dE1vbnRoID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gIHJlYWRvbmx5IHdlZWtkYXlzID0gV0VFS0RBWV9MQUJFTFM7XG5cbiAgLyoqIEluZGV4IG9mIHRoZSBjZWxsIHNob3dpbmcgYSA1MDBtcyBwcmVzcyBhbmltYXRpb24sIG9yIC0xLiAqL1xuICBwcmVzc2VkSW5kZXggPSAtMTtcblxuICBnZXQgbW9udGhMYWJlbCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnZpZXcgPyBtb250aExhYmVsKHRoaXMudmlldykgOiBcIlwiO1xuICB9XG5cbiAgZGF5T2Yob3B0aW9uOiBTdWdnZXN0aW9uT3B0aW9uKTogbnVtYmVyIHwgbnVsbCB7XG4gICAgcmV0dXJuIGNlbGxEYXkob3B0aW9uKTtcbiAgfVxuXG4gIGlzVG9kYXkob3B0aW9uOiBTdWdnZXN0aW9uT3B0aW9uKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGNlbGxJc28ob3B0aW9uKSA9PT0gaXNvRGF0ZShuZXcgRGF0ZSgpKTtcbiAgfVxuXG4gIGlzU2VsZWN0ZWQob3B0aW9uOiBTdWdnZXN0aW9uT3B0aW9uKTogYm9vbGVhbiB7XG4gICAgY29uc3QgaXNvID0gY2VsbElzbyhvcHRpb24pO1xuICAgIHJldHVybiBpc28gIT0gbnVsbCAmJiB0aGlzLnNlbGVjdGVkSXNvICE9IG51bGwgJiYgaXNvID09PSB0aGlzLnNlbGVjdGVkSXNvO1xuICB9XG5cbiAgb25TZWxlY3Qob3B0aW9uOiBTdWdnZXN0aW9uT3B0aW9uLCBpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5wcmVzc2VkSW5kZXggPSBpbmRleDtcbiAgICB0aGlzLnNlbGVjdC5lbWl0KG9wdGlvbik7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLnByZXNzZWRJbmRleCA9IC0xO1xuICAgIH0sIDUwMCk7XG4gIH1cblxuICBvbktleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQsIG9wdGlvbjogU3VnZ2VzdGlvbk9wdGlvbiwgaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIGlmIChldmVudC5rZXkgPT09IFwiRW50ZXJcIiB8fCBldmVudC5rZXkgPT09IFwiIFwiKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgdGhpcy5vblNlbGVjdChvcHRpb24sIGluZGV4KTtcbiAgICB9XG4gIH1cblxuICAvKiogS2VlcHMgdGhlIGlucHV0IGZvY3VzZWQsIHdoaWNoIHRoZSBkcm9wZG93bidzIHZpc2liaWxpdHkgZ2F0ZSBkZXBlbmRzIG9uLiAqL1xuICBwcmV2ZW50Qmx1cihldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIH1cblxuICAvLyBQYWRkaW5nIGNlbGxzIGhhdmUgbm8gZGF0ZSBvZiB0aGVpciBvd24sIHNvIHRoZXkga2V5IG9mZiBwb3NpdGlvbi5cbiAgdHJhY2tCeUNlbGwgPSAoaW5kZXg6IG51bWJlciwgb3B0aW9uOiBTdWdnZXN0aW9uT3B0aW9uKTogc3RyaW5nID0+XG4gICAgY2VsbElzbyhvcHRpb24pID8/IGBwYWQtJHtpbmRleH1gO1xufVxuIiwiPGRpdiBjbGFzcz1cIm1hZ2ljeC1haWEtZGF0ZXBpY2tlclwiIGRhdGEtYWlhLWRhdGVwaWNrZXI9XCJcIj5cbiAgPGRpdiBjbGFzcz1cIm1hZ2ljeC1haWEtZGF0ZXBpY2tlci1oZWFkZXJcIj5cbiAgICA8IS0tIHRhYkluZGV4IC0xIGZvciB0aGUgc2FtZSByZWFzb24gdGhlIHNraXAgYnV0dG9uIGlzOiBUYWIgaXMgYWxyZWFkeVxuICAgICAgICAgYm91bmQgdG8gd2Fsa2luZyB0aGUgZHJvcGRvd24ncyBvcHRpb25zLiAtLT5cbiAgICA8YnV0dG9uXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIHRhYmluZGV4PVwiLTFcIlxuICAgICAgY2xhc3M9XCJtYWdpY3gtYWlhLWRhdGVwaWNrZXItbmF2XCJcbiAgICAgIGRhdGEtYWlhLWRhdGUtcHJldj1cIlwiXG4gICAgICBhcmlhLWxhYmVsPVwiUHJldmlvdXMgbW9udGhcIlxuICAgICAgKG1vdXNlZG93bik9XCJwcmV2ZW50Qmx1cigkZXZlbnQpXCJcbiAgICAgIChjbGljayk9XCJwcmV2aW91c01vbnRoLmVtaXQoKVwiXG4gICAgPlxuICAgICAgJmxzYXF1bztcbiAgICA8L2J1dHRvbj5cbiAgICA8c3BhbiBjbGFzcz1cIm1hZ2ljeC1haWEtZGF0ZXBpY2tlci1tb250aFwiIGRhdGEtYWlhLWRhdGUtbW9udGg9XCJcIiBhcmlhLWxpdmU9XCJwb2xpdGVcIj5cbiAgICAgIHt7IG1vbnRoTGFiZWwgfX1cbiAgICA8L3NwYW4+XG4gICAgPGJ1dHRvblxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICB0YWJpbmRleD1cIi0xXCJcbiAgICAgIGNsYXNzPVwibWFnaWN4LWFpYS1kYXRlcGlja2VyLW5hdlwiXG4gICAgICBkYXRhLWFpYS1kYXRlLW5leHQ9XCJcIlxuICAgICAgYXJpYS1sYWJlbD1cIk5leHQgbW9udGhcIlxuICAgICAgKG1vdXNlZG93bik9XCJwcmV2ZW50Qmx1cigkZXZlbnQpXCJcbiAgICAgIChjbGljayk9XCJuZXh0TW9udGguZW1pdCgpXCJcbiAgICA+XG4gICAgICAmcnNhcXVvO1xuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cblxuICA8IS0tIERlY29yYXRpdmU6IGVhY2ggY2VsbCBhbm5vdW5jZXMgaXRzIG93biBmdWxsIGRhdGUsIHNvIHJlcGVhdGluZyB0aGVcbiAgICAgICBjb2x1bW4gbGV0dGVycyB0byBBVCBhZGRzIG5vaXNlIOKAlCBhbmQgdGhlIGR1cGxpY2F0ZSBUL1Mgd291bGQgYmVcbiAgICAgICBtZWFuaW5nbGVzcyByZWFkIGFsb3VkIGFueXdheS4gLS0+XG4gIDxkaXYgY2xhc3M9XCJtYWdpY3gtYWlhLWRhdGVwaWNrZXItd2Vla2RheXNcIiBhcmlhLWhpZGRlbj1cInRydWVcIj5cbiAgICA8c3BhbiBjbGFzcz1cIm1hZ2ljeC1haWEtZGF0ZXBpY2tlci13ZWVrZGF5XCIgKm5nRm9yPVwibGV0IGxhYmVsIG9mIHdlZWtkYXlzXCI+e3sgbGFiZWwgfX08L3NwYW4+XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9XCJtYWdpY3gtYWlhLWRhdGVwaWNrZXItZ3JpZFwiIGRhdGEtYWlhLWRhdGUtZ3JpZD1cIlwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBvcHRpb25zOyB0cmFja0J5OiB0cmFja0J5Q2VsbDsgbGV0IGkgPSBpbmRleFwiPlxuICAgICAgPCEtLSBQYWRkaW5nIGZvciB0aGUgZGF5cyBiZWZvcmUgdGhlIDFzdCAvIGFmdGVyIHRoZSBsYXN0LiBOb24tdGFwcGFibGUsXG4gICAgICAgICAgIHNvIGFycm93IG5hdmlnYXRpb24gc2tpcHMgaXQ7IGhpZGRlbiBmcm9tIEFUIHNvIHRoZSBtb250aCByZWFkcyBhc1xuICAgICAgICAgICBpdHMgb3duIGRheXMgYW5kIG5vdGhpbmcgZWxzZS4gLS0+XG4gICAgICA8ZGl2XG4gICAgICAgICpuZ0lmPVwiZGF5T2Yob3B0aW9uKSA9PT0gbnVsbDsgZWxzZSBkYXlDZWxsXCJcbiAgICAgICAgW2lkXT1cImxpc3Rib3hJZCArICctb3B0aW9uLScgKyBpXCJcbiAgICAgICAgcm9sZT1cIm9wdGlvblwiXG4gICAgICAgIGRhdGEtYWlhLW9wdGlvbj1cIlwiXG4gICAgICAgIGRhdGEtYWlhLWRhdGUtY2VsbD1cIlwiXG4gICAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXG4gICAgICAgIFthdHRyLmFyaWEtc2VsZWN0ZWRdPVwiZmFsc2VcIlxuICAgICAgICB0YWJpbmRleD1cIi0xXCJcbiAgICAgICAgY2xhc3M9XCJtYWdpY3gtYWlhLWRhdGUtY2VsbCBtYWdpY3gtYWlhLWRhdGUtY2VsbC0tYmxhbmtcIlxuICAgICAgPjwvZGl2PlxuXG4gICAgICA8bmctdGVtcGxhdGUgI2RheUNlbGw+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBbaWRdPVwibGlzdGJveElkICsgJy1vcHRpb24tJyArIGlcIlxuICAgICAgICAgIHJvbGU9XCJvcHRpb25cIlxuICAgICAgICAgIGRhdGEtYWlhLW9wdGlvbj1cIlwiXG4gICAgICAgICAgZGF0YS1haWEtZGF0ZS1jZWxsPVwiXCJcbiAgICAgICAgICBbYXR0ci5hcmlhLXNlbGVjdGVkXT1cImkgPT09IGFjdGl2ZUluZGV4XCJcbiAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIm9wdGlvbi50ZXh0XCJcbiAgICAgICAgICB0YWJpbmRleD1cIjBcIlxuICAgICAgICAgIGNsYXNzPVwibWFnaWN4LWFpYS1kYXRlLWNlbGwgbWFnaWN4LWFpYS1kYXRlLWNlbGwtLWRheVwiXG4gICAgICAgICAgW2NsYXNzLm1hZ2ljeC1haWEtZGF0ZS1jZWxsLS1oaWdobGlnaHRlZF09XCJpID09PSBhY3RpdmVJbmRleFwiXG4gICAgICAgICAgW2NsYXNzLm1hZ2ljeC1haWEtZGF0ZS1jZWxsLS10b2RheV09XCJpc1RvZGF5KG9wdGlvbilcIlxuICAgICAgICAgIFtjbGFzcy5tYWdpY3gtYWlhLWRhdGUtY2VsbC0tc2VsZWN0ZWRdPVwiaXNTZWxlY3RlZChvcHRpb24pXCJcbiAgICAgICAgICBbY2xhc3MubWFnaWN4LWFpYS1kYXRlLWNlbGwtLXByZXNzZWRdPVwiaSA9PT0gcHJlc3NlZEluZGV4XCJcbiAgICAgICAgICAoY2xpY2spPVwib25TZWxlY3Qob3B0aW9uLCBpKVwiXG4gICAgICAgICAgKGtleWRvd24pPVwib25LZXlEb3duKCRldmVudCwgb3B0aW9uLCBpKVwiXG4gICAgICAgICAgKG1vdXNlZW50ZXIpPVwiaGlnaGxpZ2h0LmVtaXQoaSlcIlxuICAgICAgICA+XG4gICAgICAgICAgPCEtLSBUaGUgY2VsbCBwYWludHMgdGhlIGRheSBudW1iZXI7IGBvcHRpb24udGV4dGAgaXMgdGhlIGZ1bGxcbiAgICAgICAgICAgICAgIGNvbW1pdHRlZCB2YWx1ZSAoXCJNYXJjaCAyMyAyMDI2XCIpIGFuZCBpcyB3aGF0IEFUIGFubm91bmNlcyxcbiAgICAgICAgICAgICAgIHNpbmNlIHRoYXQgaXMgd2hhdCBzZWxlY3RpbmcgaXQgcHV0cyBpbiB0aGUgaW5wdXQuIC0tPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWFnaWN4LWFpYS1kYXRlLWNlbGwtbnVtYmVyXCI+e3sgZGF5T2Yob3B0aW9uKSB9fTwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
|
|
@@ -40,6 +40,12 @@ export class AIAutocompleteEditorHostDirective {
|
|
|
40
40
|
this.lastInputAt = 0;
|
|
41
41
|
this.lastSeenParamId = "";
|
|
42
42
|
this.lastEditingId = "";
|
|
43
|
+
/**
|
|
44
|
+
* Id of whichever chip the dropdown is currently open on — a completed param
|
|
45
|
+
* being re-edited, or a span the server identified as a date. Either kind
|
|
46
|
+
* counts, otherwise every caret tick inside an open date span would re-enter
|
|
47
|
+
* the pick it is already in.
|
|
48
|
+
*/
|
|
43
49
|
this.editingParamId = null;
|
|
44
50
|
}
|
|
45
51
|
ngOnInit() {
|
|
@@ -156,7 +162,10 @@ export class AIAutocompleteEditorHostDirective {
|
|
|
156
162
|
// with a chip — starting re-edit there parks the caret on that chip
|
|
157
163
|
// and destroys the user's selection.
|
|
158
164
|
const strong = sel.isCollapsed
|
|
159
|
-
?
|
|
165
|
+
? // Both chip kinds report here. The core decides what a tap means — a
|
|
166
|
+
// completed param re-opens its options, an identified date opens the
|
|
167
|
+
// calendar, anything else is inert.
|
|
168
|
+
startEl?.closest("strong[data-param-id]")
|
|
160
169
|
: null;
|
|
161
170
|
// `DOMStringMap` is an index signature; bracket notation is required
|
|
162
171
|
// by `noPropertyAccessFromIndexSignature`.
|
|
@@ -197,7 +206,7 @@ export class AIAutocompleteEditorHostDirective {
|
|
|
197
206
|
bindStateSubscription() {
|
|
198
207
|
const el = this.el.nativeElement;
|
|
199
208
|
this.controller.state$.pipe(takeUntil(this.destroy$)).subscribe((state) => {
|
|
200
|
-
this.editingParamId = state.editingParam?.id ?? null;
|
|
209
|
+
this.editingParamId = state.editingParam?.id ?? state.editingIdentified?.id ?? null;
|
|
201
210
|
renderEditableContent({
|
|
202
211
|
input: el,
|
|
203
212
|
segments: state.segments,
|
|
@@ -259,4 +268,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
|
|
|
259
268
|
}], autoFocus: [{
|
|
260
269
|
type: Input
|
|
261
270
|
}] } });
|
|
262
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdG9yLWhvc3QuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9pbnRlcm5hbC9lZGl0b3ItaG9zdC9lZGl0b3ItaG9zdC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxVQUFVLEVBQ1YsS0FBSyxFQUNMLE1BQU0sRUFDTixNQUFNLEVBR04sU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFDTCxnQkFBZ0IsRUFDaEIsZUFBZSxFQUNmLGVBQWUsRUFDZixxQkFBcUIsRUFDckIsZUFBZSxHQUNoQixNQUFNLHFDQUFxQyxDQUFDO0FBQzdDLE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDOztBQUcxQzs7O0dBR0c7QUFDSCxJQUFJLGtCQUF1QyxDQUFDO0FBQzVDLFNBQVMscUJBQXFCO0lBQzVCLElBQUksa0JBQWtCLEtBQUssU0FBUztRQUFFLE9BQU8sa0JBQWtCLENBQUM7SUFDaEUsSUFBSSxPQUFPLFFBQVEsS0FBSyxXQUFXO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFDbEQsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM1QyxLQUFLLENBQUMsWUFBWSxDQUFDLGlCQUFpQixFQUFFLGdCQUFnQixDQUFDLENBQUM7SUFDeEQsa0JBQWtCLEdBQUcsS0FBSyxDQUFDLGVBQWUsS0FBSyxnQkFBZ0IsQ0FBQztJQUNoRSxPQUFPLGtCQUFrQixDQUFDO0FBQzVCLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7R0FXRztBQW9CSCxNQUFNLE9BQU8saUNBQWlDO0lBbkI5QztRQXFCVyxjQUFTLEdBQUcsSUFBSSxDQUFDO1FBRVQsT0FBRSxHQUFHLE1BQU0sQ0FBNkIsVUFBVSxDQUFDLENBQUM7UUFDcEQsYUFBUSxHQUFHLE1BQU0sQ0FBQyxTQUFTLENB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ZW50IjpbImltcG9ydCB7XG4gIERpcmVjdGl2ZSxcbiAgRWxlbWVudFJlZixcbiAgSW5wdXQsXG4gIGluamVjdCxcbiAgTmdab25lLFxuICB0eXBlIE9uRGVzdHJveSxcbiAgdHlwZSBPbkluaXQsXG4gIFJlbmRlcmVyMixcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7XG4gIGV4dHJhY3RQbGFpblRleHQsXG4gIGdldEN1cnNvck9mZnNldCxcbiAgcGxhaW5UZXh0TGVuZ3RoLFxuICByZW5kZXJFZGl0YWJsZUNvbnRlbnQsXG4gIHNldEN1cnNvck9mZnNldCxcbn0gZnJvbSBcIkBtYWdpY3gtZW5nL2FpLWF1dG9jb21wbGV0ZS12YW5pbGxhXCI7XG5pbXBvcnQgeyBTdWJqZWN0LCB0YWtlVW50aWwgfSBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IHR5cGUgeyBBSUF1dG9jb21wbGV0ZUNvbnRyb2xsZXIgfSBmcm9tIFwiLi4vLi4vY29udHJvbGxlci9haS1hdXRvY29tcGxldGUuY29udHJvbGxlclwiO1xuXG4vKipcbiAqIE1vZHVsZS1sZXZlbCBjYWNoZSBmb3IgdGhlIG9uZS10aW1lIHBsYWludGV4dC1vbmx5IGZlYXR1cmUgZGV0ZWN0aW9uLlxuICogTWlycm9ycyBgc3VwcG9ydHNQbGFpbnRleHRPbmx5YCBpbiB1c2VDb250ZW50RWRpdGFibGVFZGl0b3IudHMuXG4gKi9cbmxldCBwbGFpbnRleHRPbmx5Q2FjaGU6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG5mdW5jdGlvbiBzdXBwb3J0c1BsYWludGV4dE9ubHkoKTogYm9vbGVhbiB7XG4gIGlmIChwbGFpbnRleHRPbmx5Q2FjaGUgIT09IHVuZGVmaW5lZCkgcmV0dXJuIHBsYWludGV4dE9ubHlDYWNoZTtcbiAgaWYgKHR5cGVvZiBkb2N1bWVudCA9PT0gXCJ1bmRlZmluZWRcIikgcmV0dXJuIGZhbHNlO1xuICBjb25zdCBwcm9iZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gIHByb2JlLnNldEF0dHJpYnV0ZShcImNvbnRlbnRlZGl0YWJsZVwiLCBcInBsYWludGV4dC1vbmx5XCIpO1xuICBwbGFpbnRleHRPbmx5Q2FjaGUgPSBwcm9iZS5jb250ZW50RWRpdGFibGUgPT09IFwicGxhaW50ZXh0LW9ubHlcIjtcbiAgcmV0dXJuIHBsYWludGV4dE9ubHlDYWNoZTtcbn1cblxuLyoqXG4gKiBJbnRlcm5hbCBkaXJlY3RpdmUgdGhhdCBvd25zIGV2ZXJ5IGNvbmNlcm4gc3BlY2lmaWMgdG8gcnVubmluZyB0aGVcbiAqIGF1dG9jb21wbGV0ZSBvbiB0b3Agb2YgYSBjb250ZW50RWRpdGFibGUgaG9zdDogY29tcG9zaXRpb24gc3RhdGUsIGNhcmV0XG4gKiB0cmFja2luZywgc2VsZWN0aW9uY2hhbmdlIGhhbmRsaW5nLCBgYmVmb3JlaW5wdXRgIGludGVyY2VwdGlvbiwgcGFzdGVcbiAqIHNhbml0aXphdGlvbiwgcGxhaW50ZXh0LW9ubHkgZmVhdHVyZSBkZXRlY3Rpb24sIHNlZ21lbnQgcmVuZGVyaW5nLFxuICogcG9zdC1wcm9tb3RlIHJlZm9jdXMsIGFuZCByZS1lZGl0IGNhcmV0IHBhcmsuXG4gKlxuICogTWlycm9ycyBgcGFja2FnZXMvcmVhY3Qvc3JjL2hvb2tzL3VzZUNvbnRlbnRFZGl0YWJsZUVkaXRvci50c2Agb25lLWZvci1vbmUuXG4gKiBVc2VkIG9ubHkgYnkgdGhlIFRpZXIgMSBgPGFpLWF1dG9jb21wbGV0ZT5gIGNvbXBvbmVudCDigJQgbmV2ZXIgZXhwb3J0ZWQuXG4gKlxuICogQGludGVybmFsXG4gKi9cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogXCJbYWlhRWRpdG9ySG9zdF1cIixcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaG9zdDoge1xuICAgIHJvbGU6IFwiY29tYm9ib3hcIixcbiAgICBcImFyaWEtYXV0b2NvbXBsZXRlXCI6IFwibGlzdFwiLFxuICAgIFwiYXJpYS1oYXNwb3B1cFwiOiBcImxpc3Rib3hcIixcbiAgICBzcGVsbGNoZWNrOiBcInRydWVcIixcbiAgICBlbnRlcmtleWhpbnQ6IFwic2VuZFwiLFxuICAgIHRhYmluZGV4OiBcIjBcIixcbiAgICBcIihpbnB1dClcIjogXCJvbklucHV0KClcIixcbiAgICBcIihrZXlkb3duKVwiOiBcIm9uS2V5RG93bigkZXZlbnQpXCIsXG4gICAgXCIoY29tcG9zaXRpb25zdGFydClcIjogXCJvbkNvbXBvc2l0aW9uU3RhcnQoKVwiLFxuICAgIFwiKGNvbXBvc2l0aW9uZW5kKVwiOiBcIm9uQ29tcG9zaXRpb25FbmQoKVwiLFxuICAgIFwiKHBhc3RlKVwiOiBcIm9uUGFzdGUoJGV2ZW50KVwiLFxuICAgIFwiKGZvY3VzKVwiOiBcIm9uRm9jdXMoKVwiLFxuICAgIFwiKGJsdXIpXCI6IFwib25CbHVyKClcIixcbiAgfSxcbn0pXG5leHBvcnQgY2xhc3MgQUlBdXRvY29tcGxldGVFZGl0b3JIb3N0RGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBASW5wdXQoXCJhaWFFZGl0b3JIb3N0XCIpIGNvbnRyb2xsZXIhOiBBSUF1dG9jb21wbGV0ZUNvbnRyb2xsZXI7XG4gIEBJbnB1dCgpIGF1dG9Gb2N1cyA9IHRydWU7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBlbCA9IGluamVjdDxFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50Pj4oRWxlbWVudFJlZik7XG4gIHByaXZhdGUgcmVhZG9ubHkgcmVuZGVyZXIgPSBpbmplY3QoUmVuZGVyZXIyKTtcbiAgcHJpdmF0ZSByZWFkb25seSB6b25lID0gaW5qZWN0KE5nWm9uZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIHByaXZhdGUgY29tcG9zaW5nID0gZmFsc2U7XG4gIHByaXZhdGUgbGFzdElucHV0QXQgPSAwO1xuICBwcml2YXRlIGxhc3RTZWVuUGFyYW1JZCA9IFwiXCI7XG4gIHByaXZhdGUgbGFzdEVkaXRpbmdJZCA9IFwiXCI7XG4gIHByaXZhdGUgZWRpdGluZ1BhcmFtSWQ6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG4gIHByaXZhdGUgZG9jdW1lbnRTZWxlY3Rpb25MaXN0ZW5lcj86ICgpID0+IHZvaWQ7XG4gIHByaXZhdGUgYmVmb3JlSW5wdXRMaXN0ZW5lcj86IChldmVudDogRXZlbnQpID0+IHZvaWQ7XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmNvbnRyb2xsZXIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlthaWFFZGl0b3JIb3N0XSByZXF1aXJlcyBhIGNvbnRyb2xsZXJcIik7XG4gICAgfVxuXG4gICAgY29uc3QgZWwgPSB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQ7XG4gICAgY29uc3QgY2VNb2RlID0gc3VwcG9ydHNQbGFpbnRleHRPbmx5KCkgPyBcInBsYWludGV4dC1vbmx5XCIgOiBcInRydWVcIjtcbiAgICB0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZShlbCwgXCJjb250ZW50ZWRpdGFibGVcIiwgY2VNb2RlKTtcbiAgICB0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZShlbCwgXCJhcmlhLWNvbnRyb2xzXCIsIHRoaXMuY29udHJvbGxlci5saXN0Ym94SWQpO1xuICAgIHRoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKGVsLCBcInN1cHByZXNzLWNvbnRlbnQtZWRpdGFibGUtd2FybmluZ1wiLCBcInRydWVcIik7XG5cbiAgICAvLyBBdXRvLWZvY3VzIG9uIG1vdW50LiBJZiB0aGUgZWRpdG9yIGFscmVhZHkgaGFzIGZvY3VzIChlLmcuIGZyb20gYVxuICAgIC8vIGNsaWNrIHRoYXQgZmlyZWQgYmVmb3JlIG91ciBsaWZlY3ljbGUgcmFuKSwgbm90aWZ5IHRoZSBjb250cm9sbGVyXG4gICAgLy8gaW5zdGVhZCBvZiBzdGVhbGluZyBmb2N1cy5cbiAgICBpZiAodGhpcy5hdXRvRm9jdXMpIHtcbiAgICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHtcbiAgICAgICAgaWYgKHR5cGVvZiBkb2N1bWVudCA9PT0gXCJ1bmRlZmluZWRcIikgcmV0dXJuO1xuICAgICAgICBpZiAoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PT0gZWwpIHtcbiAgICAgICAgICB0aGlzLmNvbnRyb2xsZXIuc2V0Rm9jdXNlZCh0cnVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBlbC5mb2N1cygpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB0aGlzLmJpbmREb2N1bWVudFNlbGVjdGlvbkxpc3RlbmVyKCk7XG4gICAgdGhpcy5iaW5kQmVmb3JlSW5wdXRMaXN0ZW5lcigpO1xuICAgIHRoaXMuYmluZFN0YXRlU3Vic2NyaXB0aW9uKCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcbiAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gICAgaWYgKHRoaXMuZG9jdW1lbnRTZWxlY3Rpb25MaXN0ZW5lciAmJiB0eXBlb2YgZG9jdW1lbnQgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJzZWxlY3Rpb25jaGFuZ2VcIiwgdGhpcy5kb2N1bWVudFNlbGVjdGlvbkxpc3RlbmVyKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuYmVmb3JlSW5wdXRMaXN0ZW5lcikge1xuICAgICAgdGhpcy5lbC5uYXRpdmVFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJiZWZvcmVpbnB1dFwiLCB0aGlzLmJlZm9yZUlucHV0TGlzdGVuZXIpO1xuICAgIH1cbiAgfVxuXG4gIC8vID09PSBIb3N0IGV2ZW50IGhhbmRsZXJzID09PVxuXG4gIG9uQ29tcG9zaXRpb25TdGFydCgpOiB2b2lkIHtcbiAgICB0aGlzLmNvbXBvc2luZyA9IHRydWU7XG4gIH1cblxuICBvbkNvbXBvc2l0aW9uRW5kKCk6IHZvaWQge1xuICAgIHRoaXMuY29tcG9zaW5nID0gZmFsc2U7XG4gICAgdGhpcy5maXJlSW5wdXQoKTtcbiAgfVxuXG4gIG9uSW5wdXQoKTogdm9pZCB7XG4gICAgdGhpcy5sYXN0SW5wdXRBdCA9IHBlcmZvcm1hbmNlLm5vdygpO1xuICAgIHRoaXMuZmlyZUlucHV0KCk7XG4gICAgdGhpcy5jb250cm9sbGVyLmhhbmRsZUNhcmV0QWZ0ZXJJbnB1dChnZXRDdXJzb3JPZmZzZXQodGhpcy5lbC5uYXRpdmVFbGVtZW50KSk7XG4gIH1cblxuICBvbktleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLmNvbnRyb2xsZXIuaGFuZGxlS2V5RG93bihldmVudCk7XG4gIH1cblxuICBvblBhc3RlKGV2ZW50OiBDbGlwYm9hcmRFdmVudCk6IHZvaWQge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgY29uc3QgZWwgPSB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQ7XG4gICAgY29uc3QgdGV4dCA9IChldmVudC5jbGlwYm9hcmREYXRhPy5nZXREYXRhKFwidGV4dC9wbGFpblwiKSA/PyBcIlwiKS5yZXBsYWNlKC9cXHI/XFxuL2csIFwiIFwiKTtcbiAgICBpZiAoIXRleHQpIHJldHVybjtcbiAgICBjb25zdCBkb2MgPSBlbC5vd25lckRvY3VtZW50ID8/IGRvY3VtZW50O1xuICAgIGNvbnN0IHNlbCA9IGRvYy5nZXRTZWxlY3Rpb24oKTtcbiAgICBpZiAoIXNlbCB8fCBzZWwucmFuZ2VDb3VudCA9PT0gMCkgcmV0dXJuO1xuICAgIGNvbnN0IHJhbmdlID0gc2VsLmdldFJhbmdlQXQoMCk7XG4gICAgaWYgKCFlbC5jb250YWlucyhyYW5nZS5zdGFydENvbnRhaW5lcikpIHJldHVybjtcbiAgICByYW5nZS5kZWxldGVDb250ZW50cygpO1xuICAgIGNvbnN0IG5vZGUgPSBkb2MuY3JlYXRlVGV4dE5vZGUodGV4dCk7XG4gICAgcmFuZ2UuaW5zZXJ0Tm9kZShub2RlKTtcbiAgICByYW5nZS5zZXRTdGFydEFmdGVyKG5vZGUpO1xuICAgIHJhbmdlLmNvbGxhcHNlKHRydWUpO1xuICAgIHNlbC5yZW1vdmVBbGxSYW5nZXMoKTtcbiAgICBzZWwuYWRkUmFuZ2UocmFuZ2UpO1xuICAgIHRoaXMuZmlyZUlucHV0KCk7XG4gIH1cblxuICBvbkZvY3VzKCk6IHZvaWQge1xuICAgIHRoaXMuY29udHJvbGxlci5zZXRGb2N1c2VkKHRydWUpO1xuICB9XG5cbiAgb25CbHVyKCk6IHZvaWQge1xuICAgIHRoaXMuY29udHJvbGxlci5zZXRGb2N1c2VkKGZhbHNlKTtcbiAgfVxuXG4gIC8vID09PSBJbnRlcm5hbCBoZWxwZXJzID09PVxuXG4gIHByaXZhdGUgZmlyZUlucHV0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmNvbXBvc2luZykgcmV0dXJuO1xuICAgIGNvbnN0IGVsID0gdGhpcy5lbC5uYXRpdmVFbGVtZW50O1xuICAgIGNvbnN0IHJhdyA9IGV4dHJhY3RQbGFpblRleHQoZWwpO1xuICAgIGNvbnN0IHNob3VsZENhcGl0YWxpemUgPSByYXcubGVuZ3RoID4gMCAmJiByYXdbMF0gIT09IHJhd1swXS50b1VwcGVyQ2FzZSgpO1xuICAgIGNvbnN0IG5leHQgPSBzaG91bGRDYXBpdGFsaXplID8gcmF3WzBdLnRvVXBwZXJDYXNlKCkgKyByYXcuc2xpY2UoMSkgOiByYXc7XG4gICAgdGhpcy5jb250cm9sbGVyLmhhbmRsZVRleHRDaGFuZ2UobmV4dCk7XG4gIH1cblxuICBwcml2YXRlIGJpbmREb2N1bWVudFNlbGVjdGlvbkxpc3RlbmVyKCk6IHZvaWQge1xuICAgIGlmICh0eXBlb2YgZG9jdW1lbnQgPT09IFwidW5kZWZpbmVkXCIpIHJldHVybjtcbiAgICBjb25zdCBlbCA9IHRoaXMuZWwubmF0aXZlRWxlbWVudDtcbiAgICAvLyBzZWxlY3Rpb25jaGFuZ2UgZmlyZXMgb24gZXZlcnkga2V5c3Ryb2tlIGFuZCBjYXJldCBtb3ZlIOKAlCBydW4gb3V0c2lkZVxuICAgIC8vIEFuZ3VsYXIncyB6b25lICjCpzE2LjEpIGFuZCByZS1lbnRlciBvbmx5IHdoZW4gd2UgYWN0dWFsbHkgbmVlZCB0b1xuICAgIC8vIG5vdGlmeSB0aGUgY29udHJvbGxlciBvZiBhIG1lYW5pbmdmdWwgY2hhbmdlLlxuICAgIHRoaXMuem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICBjb25zdCBoYW5kbGVyID0gKCk6IHZvaWQgPT4ge1xuICAgICAgICBjb25zdCBzZWwgPSBkb2N1bWVudC5nZXRTZWxlY3Rpb24oKTtcbiAgICAgICAgaWYgKCFzZWwgfHwgc2VsLnJhbmdlQ291bnQgPT09IDApIHJldHVybjtcbiAgICAgICAgaWYgKCFzZWwuYW5jaG9yTm9kZSB8fCAhZWwuY29udGFpbnMoc2VsLmFuY2hvck5vZGUpKSByZXR1cm47XG4gICAgICAgIGNvbnN0IGFuY2hvciA9IHNlbC5hbmNob3JOb2RlO1xuICAgICAgICBjb25zdCBzdGFydEVsID1cbiAgICAgICAgICBhbmNob3Iubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFID8gKGFuY2hvciBhcyBFbGVtZW50KSA6IGFuY2hvci5wYXJlbnRFbGVtZW50O1xuICAgICAgICAvLyBPbmx5IGEgQ09MTEFQU0VEIHNlbGVjdGlvbiBtZWFucyBcInRoZSBjYXJldCBsYW5kZWQgaW4gYSBjaGlwXCIuIEFcbiAgICAgICAgLy8gcmFuZ2Ugc2VsZWN0aW9uIChDbWQrQSwgc2hpZnQtYXJyb3csIGRyYWcpIGFuY2hvcnMgYXQgaXRzIHN0YXJ0LFxuICAgICAgICAvLyB3aGljaCBsYW5kcyBpbnNpZGUgdGhlIGZpcnN0IGA8c3Ryb25nPmAgd2hlbmV2ZXIgdGhlIGlucHV0IGJlZ2luc1xuICAgICAgICAvLyB3aXRoIGEgY2hpcCDigJQgc3RhcnRpbmcgcmUtZWRpdCB0aGVyZSBwYXJrcyB0aGUgY2FyZXQgb24gdGhhdCBjaGlwXG4gICAgICAgIC8vIGFuZCBkZXN0cm95cyB0aGUgdXNlcidzIHNlbGVjdGlvbi5cbiAgICAgICAgY29uc3Qgc3Ryb25nID0gc2VsLmlzQ29sbGFwc2VkXG4gICAgICAgICAgPyBzdGFydEVsPy5jbG9zZXN0PEhUTUxFbGVtZW50Pignc3Ryb25nW2RhdGEtc2VnPVwiY29tcGxldGVkXCJdW2RhdGEtcGFyYW0taWRdJylcbiAgICAgICAgICA6IG51bGw7XG4gICAgICAgIC8vIGBET01TdHJpbmdNYXBgIGlzIGFuIGluZGV4IHNpZ25hdHVyZTsgYnJhY2tldCBub3RhdGlvbiBpcyByZXF1aXJlZFxuICAgICAgICAvLyBieSBgbm9Qcm9wZXJ0eUFjY2Vzc0Zyb21JbmRleFNpZ25hdHVyZWAuXG4gICAgICAgIGNvbnN0IGVuY2xvc2luZyA9IHN0cm9uZz8uZGF0YXNldFtcInBhcmFtSWRcIl0gPz8gbnVsbDtcbiAgICAgICAgaWYgKGVuY2xvc2luZyAmJiBlbmNsb3NpbmcgIT09IHRoaXMuZWRpdGluZ1BhcmFtSWQpIHtcbiAgICAgICAgICB0aGlzLnpvbmUucnVuKCgpID0+IHRoaXMuY29udHJvbGxlci5zdGFydEVkaXRpbmdQYXJhbShlbmNsb3NpbmcpKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBlcmZvcm1hbmNlLm5vdygpIC0gdGhpcy5sYXN0SW5wdXRBdCA8IDUwKSByZXR1cm47XG4gICAgICAgIHRoaXMuem9uZS5ydW4oKCkgPT4gdGhpcy5jb250cm9sbGVyLmhhbmRsZUNhcmV0TW92ZShnZXRDdXJzb3JPZmZzZXQoZWwpKSk7XG4gICAgICB9O1xuICAgICAgdGhpcy5kb2N1bWVudFNlbGVjdGlvbkxpc3RlbmVyID0gaGFuZGxlcjtcbiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJzZWxlY3Rpb25jaGFuZ2VcIiwgaGFuZGxlcik7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGJpbmRCZWZvcmVJbnB1dExpc3RlbmVyKCk6IHZvaWQge1xuICAgIGNvbnN0IGVsID0gdGhpcy5lbC5uYXRpdmVFbGVtZW50O1xuICAgIC8vIE5hdGl2ZSBiZWZvcmVpbnB1dCDigJQgUmVhY3QncyBzeW50aGV0aWMgb25CZWZvcmVJbnB1dCBpcyB3aXJlZCB0byB0aGVcbiAgICAvLyBsZWdhY3kgdGV4dElucHV0IGV2ZW50IGFuZCBkb2Vzbid0IGZpcmUgcmVsaWFibHkgZm9yIGRlbGV0ZSogdHlwZXMuXG4gICAgY29uc3QgaGFuZGxlciA9IChldmVudDogRXZlbnQpOiB2b2lkID0+IHtcbiAgICAgIGNvbnN0IGlucHV0RXZlbnQgPSBldmVudCBhcyBJbnB1dEV2ZW50O1xuICAgICAgY29uc3QgdCA9IGlucHV0RXZlbnQuaW5wdXRUeXBlO1xuICAgICAgaWYgKHQgPT09IFwiaW5zZXJ0UGFyYWdyYXBoXCIgfHwgdCA9PT0gXCJpbnNlcnRMaW5lQnJlYWtcIiB8fCB0ID09PSBcImluc2VydEZyb21Ecm9wXCIpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKHQuc3RhcnRzV2l0aChcImluc2VydFwiKSB8fCB0LnN0YXJ0c1dpdGgoXCJkZWxldGVcIikpIHtcbiAgICAgICAgY29uc3QgcmVwbGFjZW1lbnQgPSB0LnN0YXJ0c1dpdGgoXCJkZWxldGVcIikgPyBcIlwiIDogKGlucHV0RXZlbnQuZGF0YSA/PyBcIlwiKTtcbiAgICAgICAgaWYgKHRoaXMuY29udHJvbGxlci5yZXBsYWNlRWRpdGluZ1JhbmdlKHJlcGxhY2VtZW50KSkge1xuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICAgIHRoaXMuYmVmb3JlSW5wdXRMaXN0ZW5lciA9IGhhbmRsZXI7XG4gICAgZWwuYWRkRXZlbnRMaXN0ZW5lcihcImJlZm9yZWlucHV0XCIsIGhhbmRsZXIpO1xuICB9XG5cbiAgcHJpdmF0ZSBiaW5kU3RhdGVTdWJzY3JpcHRpb24oKTogdm9pZCB7XG4gICAgY29uc3QgZWwgPSB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQ7XG4gICAgdGhpcy5jb250cm9sbGVyLnN0YXRlJC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChzdGF0ZSkgPT4ge1xuICAgICAgdGhpcy5lZGl0aW5nUGFyYW1JZCA9IHN0YXRlLmVkaXRpbmdQYXJhbT8uaWQgPz8gbnVsbDtcblxuICAgICAgcmVuZGVyRWRpdGFibGVDb250ZW50KHtcbiAgICAgICAgaW5wdXQ6IGVsLFxuICAgICAgICBzZWdtZW50czogc3RhdGUuc2VnbWVudHMsXG4gICAgICAgIG5ld1BhcmFtSWQ6IHN0YXRlLm5ld1BhcmFtSWQsXG4gICAgICAgIGVkaXRpbmdQYXJhbUlkOiBzdGF0ZS5lZGl0aW5nUGFyYW0/LmlkID8/IG51bGwsXG4gICAgICAgIHBsYWNlaG9sZGVyVGV4dDogc3RhdGUucGxhY2Vob2xkZXJUZXh0LFxuICAgICAgICBpc0ZvY3VzZWQ6IHN0YXRlLmlzRm9jdXNlZCxcbiAgICAgIH0pO1xuXG4gICAgICAvLyBQb3N0LXByb21vdGUgcmVmb2N1cyArIGNhcmV0LWFmdGVyLWJvbGQgcGxhY2VtZW50IChtaXJyb3JzIFJlYWN0J3NcbiAgICAgIC8vIHVzZUxheW91dEVmZmVjdCBvbiBuZXdQYXJhbUlkKS5cbiAgICAgIGNvbnN0IGN1cnJlbnRQYXJhbUlkID0gc3RhdGUubmV3UGFyYW1JZCA/PyBcIlwiO1xuICAgICAgaWYgKGN1cnJlbnRQYXJhbUlkICYmIGN1cnJlbnRQYXJhbUlkICE9PSB0aGlzLmxhc3RTZWVuUGFyYW1JZCkge1xuICAgICAgICB0aGlzLmxhc3RTZWVuUGFyYW1JZCA9IGN1cnJlbnRQYXJhbUlkO1xuICAgICAgICBlbC5mb2N1cygpO1xuICAgICAgICBjb25zdCBkZXNpcmVkID0gc3RhdGUuY2FyZXRPZmZzZXQgPz8gcGxhaW5UZXh0TGVuZ3RoKGVsKTtcbiAgICAgICAgc2V0Q3Vyc29yT2Zmc2V0KGVsLCBkZXNpcmVkKTtcbiAgICAgIH0gZWxzZSBpZiAoIWN1cnJlbnRQYXJhbUlkKSB7XG4gICAgICAgIHRoaXMubGFzdFNlZW5QYXJhbUlkID0gXCJcIjtcbiAgICAgIH1cblxuICAgICAgLy8gUmUtZWRpdCBjYXJldCBwYXJrIChtaXJyb3JzIFJlYWN0J3MgdXNlTGF5b3V0RWZmZWN0IG9uIGVkaXRpbmdQYXJhbSkuXG4gICAgICBjb25zdCBlZGl0aW5nSWQgPSBzdGF0ZS5lZGl0aW5nUGFyYW0/LmlkID8/IFwiXCI7XG4gICAgICBpZiAoZWRpdGluZ0lkICYmIGVkaXRpbmdJZCAhPT0gdGhpcy5sYXN0RWRpdGluZ0lkICYmIHN0YXRlLmVkaXRpbmdBbmNob3IgIT0gbnVsbCkge1xuICAgICAgICB0aGlzLmxhc3RFZGl0aW5nSWQgPSBlZGl0aW5nSWQ7XG4gICAgICAgIHNldEN1cnNvck9mZnNldChlbCwgc3RhdGUuZWRpdGluZ0FuY2hvcik7XG4gICAgICB9IGVsc2UgaWYgKCFlZGl0aW5nSWQpIHtcbiAgICAgICAgdGhpcy5sYXN0RWRpdGluZ0lkID0gXCJcIjtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuIl19
|
|
271
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdG9yLWhvc3QuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9pbnRlcm5hbC9lZGl0b3ItaG9zdC9lZGl0b3ItaG9zdC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxVQUFVLEVBQ1YsS0FBSyxFQUNMLE1BQU0sRUFDTixNQUFNLEVBR04sU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFDTCxnQkFBZ0IsRUFDaEIsZUFBZSxFQUNmLGVBQWUsRUFDZixxQkFBcUIsRUFDckIsZUFBZSxHQUNoQixNQUFNLHFDQUFxQyxDQUFDO0FBQzdDLE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDOztBQUcxQzs7O0dBR0c7QUFDSCxJQUFJLGtCQUF1QyxDQUFDO0FBQzVDLFNBQVMscUJBQXFCO0lBQzVCLElBQUksa0JBQWtCLEtBQUssU0FBUztRQUFFLE9BQU8sa0JBQWtCLENBQUM7SUFDaEUsSUFBSSxPQUFPLFFBQVEsS0FBSyxXQUFXO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFDbEQsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM1QyxLQUFLLENBQUMsWUFBWSxDQUFDLGlCQUFpQixFQUFFLGdCQUFnQixDQUFDLENBQUM7SUFDeEQsa0JBQWtCLEdBQUcsS0FBSyxDQUFDLGVBQWUsS0FBSyxnQkFBZ0IsQ0FBQztJQUNoRSxPQUFPLGtCQUFrQixDQUFDO0FBQzVCLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7R0FXRztBQW9CSCxNQUFNLE9BQU8saUNBQWlDO0lBbkI5QztRQXFCVyxjQUFTLEdBQUcsSUFBSSxDQUFDO1FBRVQsT0FBRSxHQUFHLE1BQU0sQ0FBNkIsVUFBVSxDQUFDLENBQUM7UUFDcEQsYUFBUSxHQUFHLE1BQU0sQ0FBQyxTQUFTLENB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QUFVO3FCQUNyQjtpQkFDRjs4QkFFeUIsVUFBVTtzQkFBakMsS0FBSzt1QkFBQyxlQUFlO2dCQUNiLFNBQVM7c0JBQWpCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBEaXJlY3RpdmUsXG4gIEVsZW1lbnRSZWYsXG4gIElucHV0LFxuICBpbmplY3QsXG4gIE5nWm9uZSxcbiAgdHlwZSBPbkRlc3Ryb3ksXG4gIHR5cGUgT25Jbml0LFxuICBSZW5kZXJlcjIsXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQge1xuICBleHRyYWN0UGxhaW5UZXh0LFxuICBnZXRDdXJzb3JPZmZzZXQsXG4gIHBsYWluVGV4dExlbmd0aCxcbiAgcmVuZGVyRWRpdGFibGVDb250ZW50LFxuICBzZXRDdXJzb3JPZmZzZXQsXG59IGZyb20gXCJAbWFnaWN4LWVuZy9haS1hdXRvY29tcGxldGUtdmFuaWxsYVwiO1xuaW1wb3J0IHsgU3ViamVjdCwgdGFrZVVudGlsIH0gZnJvbSBcInJ4anNcIjtcbmltcG9ydCB0eXBlIHsgQUlBdXRvY29tcGxldGVDb250cm9sbGVyIH0gZnJvbSBcIi4uLy4uL2NvbnRyb2xsZXIvYWktYXV0b2NvbXBsZXRlLmNvbnRyb2xsZXJcIjtcblxuLyoqXG4gKiBNb2R1bGUtbGV2ZWwgY2FjaGUgZm9yIHRoZSBvbmUtdGltZSBwbGFpbnRleHQtb25seSBmZWF0dXJlIGRldGVjdGlvbi5cbiAqIE1pcnJvcnMgYHN1cHBvcnRzUGxhaW50ZXh0T25seWAgaW4gdXNlQ29udGVudEVkaXRhYmxlRWRpdG9yLnRzLlxuICovXG5sZXQgcGxhaW50ZXh0T25seUNhY2hlOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuZnVuY3Rpb24gc3VwcG9ydHNQbGFpbnRleHRPbmx5KCk6IGJvb2xlYW4ge1xuICBpZiAocGxhaW50ZXh0T25seUNhY2hlICE9PSB1bmRlZmluZWQpIHJldHVybiBwbGFpbnRleHRPbmx5Q2FjaGU7XG4gIGlmICh0eXBlb2YgZG9jdW1lbnQgPT09IFwidW5kZWZpbmVkXCIpIHJldHVybiBmYWxzZTtcbiAgY29uc3QgcHJvYmUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICBwcm9iZS5zZXRBdHRyaWJ1dGUoXCJjb250ZW50ZWRpdGFibGVcIiwgXCJwbGFpbnRleHQtb25seVwiKTtcbiAgcGxhaW50ZXh0T25seUNhY2hlID0gcHJvYmUuY29udGVudEVkaXRhYmxlID09PSBcInBsYWludGV4dC1vbmx5XCI7XG4gIHJldHVybiBwbGFpbnRleHRPbmx5Q2FjaGU7XG59XG5cbi8qKlxuICogSW50ZXJuYWwgZGlyZWN0aXZlIHRoYXQgb3ducyBldmVyeSBjb25jZXJuIHNwZWNpZmljIHRvIHJ1bm5pbmcgdGhlXG4gKiBhdXRvY29tcGxldGUgb24gdG9wIG9mIGEgY29udGVudEVkaXRhYmxlIGhvc3Q6IGNvbXBvc2l0aW9uIHN0YXRlLCBjYXJldFxuICogdHJhY2tpbmcsIHNlbGVjdGlvbmNoYW5nZSBoYW5kbGluZywgYGJlZm9yZWlucHV0YCBpbnRlcmNlcHRpb24sIHBhc3RlXG4gKiBzYW5pdGl6YXRpb24sIHBsYWludGV4dC1vbmx5IGZlYXR1cmUgZGV0ZWN0aW9uLCBzZWdtZW50IHJlbmRlcmluZyxcbiAqIHBvc3QtcHJvbW90ZSByZWZvY3VzLCBhbmQgcmUtZWRpdCBjYXJldCBwYXJrLlxuICpcbiAqIE1pcnJvcnMgYHBhY2thZ2VzL3JlYWN0L3NyYy9ob29rcy91c2VDb250ZW50RWRpdGFibGVFZGl0b3IudHNgIG9uZS1mb3Itb25lLlxuICogVXNlZCBvbmx5IGJ5IHRoZSBUaWVyIDEgYDxhaS1hdXRvY29tcGxldGU+YCBjb21wb25lbnQg4oCUIG5ldmVyIGV4cG9ydGVkLlxuICpcbiAqIEBpbnRlcm5hbFxuICovXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6IFwiW2FpYUVkaXRvckhvc3RdXCIsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGhvc3Q6IHtcbiAgICByb2xlOiBcImNvbWJvYm94XCIsXG4gICAgXCJhcmlhLWF1dG9jb21wbGV0ZVwiOiBcImxpc3RcIixcbiAgICBcImFyaWEtaGFzcG9wdXBcIjogXCJsaXN0Ym94XCIsXG4gICAgc3BlbGxjaGVjazogXCJ0cnVlXCIsXG4gICAgZW50ZXJrZXloaW50OiBcInNlbmRcIixcbiAgICB0YWJpbmRleDogXCIwXCIsXG4gICAgXCIoaW5wdXQpXCI6IFwib25JbnB1dCgpXCIsXG4gICAgXCIoa2V5ZG93bilcIjogXCJvbktleURvd24oJGV2ZW50KVwiLFxuICAgIFwiKGNvbXBvc2l0aW9uc3RhcnQpXCI6IFwib25Db21wb3NpdGlvblN0YXJ0KClcIixcbiAgICBcIihjb21wb3NpdGlvbmVuZClcIjogXCJvbkNvbXBvc2l0aW9uRW5kKClcIixcbiAgICBcIihwYXN0ZSlcIjogXCJvblBhc3RlKCRldmVudClcIixcbiAgICBcIihmb2N1cylcIjogXCJvbkZvY3VzKClcIixcbiAgICBcIihibHVyKVwiOiBcIm9uQmx1cigpXCIsXG4gIH0sXG59KVxuZXhwb3J0IGNsYXNzIEFJQXV0b2NvbXBsZXRlRWRpdG9ySG9zdERpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgQElucHV0KFwiYWlhRWRpdG9ySG9zdFwiKSBjb250cm9sbGVyITogQUlBdXRvY29tcGxldGVDb250cm9sbGVyO1xuICBASW5wdXQoKSBhdXRvRm9jdXMgPSB0cnVlO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgZWwgPSBpbmplY3Q8RWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD4+KEVsZW1lbnRSZWYpO1xuICBwcml2YXRlIHJlYWRvbmx5IHJlbmRlcmVyID0gaW5qZWN0KFJlbmRlcmVyMik7XG4gIHByaXZhdGUgcmVhZG9ubHkgem9uZSA9IGluamVjdChOZ1pvbmUpO1xuICBwcml2YXRlIHJlYWRvbmx5IGRlc3Ryb3kkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICBwcml2YXRlIGNvbXBvc2luZyA9IGZhbHNlO1xuICBwcml2YXRlIGxhc3RJbnB1dEF0ID0gMDtcbiAgcHJpdmF0ZSBsYXN0U2VlblBhcmFtSWQgPSBcIlwiO1xuICBwcml2YXRlIGxhc3RFZGl0aW5nSWQgPSBcIlwiO1xuICAvKipcbiAgICogSWQgb2Ygd2hpY2hldmVyIGNoaXAgdGhlIGRyb3Bkb3duIGlzIGN1cnJlbnRseSBvcGVuIG9uIOKAlCBhIGNvbXBsZXRlZCBwYXJhbVxuICAgKiBiZWluZyByZS1lZGl0ZWQsIG9yIGEgc3BhbiB0aGUgc2VydmVyIGlkZW50aWZpZWQgYXMgYSBkYXRlLiBFaXRoZXIga2luZFxuICAgKiBjb3VudHMsIG90aGVyd2lzZSBldmVyeSBjYXJldCB0aWNrIGluc2lkZSBhbiBvcGVuIGRhdGUgc3BhbiB3b3VsZCByZS1lbnRlclxuICAgKiB0aGUgcGljayBpdCBpcyBhbHJlYWR5IGluLlxuICAgKi9cbiAgcHJpdmF0ZSBlZGl0aW5nUGFyYW1JZDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cbiAgcHJpdmF0ZSBkb2N1bWVudFNlbGVjdGlvbkxpc3RlbmVyPzogKCkgPT4gdm9pZDtcbiAgcHJpdmF0ZSBiZWZvcmVJbnB1dExpc3RlbmVyPzogKGV2ZW50OiBFdmVudCkgPT4gdm9pZDtcblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuY29udHJvbGxlcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiW2FpYUVkaXRvckhvc3RdIHJlcXVpcmVzIGEgY29udHJvbGxlclwiKTtcbiAgICB9XG5cbiAgICBjb25zdCBlbCA9IHRoaXMuZWwubmF0aXZlRWxlbWVudDtcbiAgICBjb25zdCBjZU1vZGUgPSBzdXBwb3J0c1BsYWludGV4dE9ubHkoKSA/IFwicGxhaW50ZXh0LW9ubHlcIiA6IFwidHJ1ZVwiO1xuICAgIHRoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKGVsLCBcImNvbnRlbnRlZGl0YWJsZVwiLCBjZU1vZGUpO1xuICAgIHRoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKGVsLCBcImFyaWEtY29udHJvbHNcIiwgdGhpcy5jb250cm9sbGVyLmxpc3Rib3hJZCk7XG4gICAgdGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUoZWwsIFwic3VwcHJlc3MtY29udGVudC1lZGl0YWJsZS13YXJuaW5nXCIsIFwidHJ1ZVwiKTtcblxuICAgIC8vIEF1dG8tZm9jdXMgb24gbW91bnQuIElmIHRoZSBlZGl0b3IgYWxyZWFkeSBoYXMgZm9jdXMgKGUuZy4gZnJvbSBhXG4gICAgLy8gY2xpY2sgdGhhdCBmaXJlZCBiZWZvcmUgb3VyIGxpZmVjeWNsZSByYW4pLCBub3RpZnkgdGhlIGNvbnRyb2xsZXJcbiAgICAvLyBpbnN0ZWFkIG9mIHN0ZWFsaW5nIGZvY3VzLlxuICAgIGlmICh0aGlzLmF1dG9Gb2N1cykge1xuICAgICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgICBpZiAodHlwZW9mIGRvY3VtZW50ID09PSBcInVuZGVmaW5lZFwiKSByZXR1cm47XG4gICAgICAgIGlmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSBlbCkge1xuICAgICAgICAgIHRoaXMuY29udHJvbGxlci5zZXRGb2N1c2VkKHRydWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGVsLmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHRoaXMuYmluZERvY3VtZW50U2VsZWN0aW9uTGlzdGVuZXIoKTtcbiAgICB0aGlzLmJpbmRCZWZvcmVJbnB1dExpc3RlbmVyKCk7XG4gICAgdGhpcy5iaW5kU3RhdGVTdWJzY3JpcHRpb24oKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuZGVzdHJveSQubmV4dCgpO1xuICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcbiAgICBpZiAodGhpcy5kb2N1bWVudFNlbGVjdGlvbkxpc3RlbmVyICYmIHR5cGVvZiBkb2N1bWVudCAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInNlbGVjdGlvbmNoYW5nZVwiLCB0aGlzLmRvY3VtZW50U2VsZWN0aW9uTGlzdGVuZXIpO1xuICAgIH1cbiAgICBpZiAodGhpcy5iZWZvcmVJbnB1dExpc3RlbmVyKSB7XG4gICAgICB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImJlZm9yZWlucHV0XCIsIHRoaXMuYmVmb3JlSW5wdXRMaXN0ZW5lcik7XG4gICAgfVxuICB9XG5cbiAgLy8gPT09IEhvc3QgZXZlbnQgaGFuZGxlcnMgPT09XG5cbiAgb25Db21wb3NpdGlvblN0YXJ0KCk6IHZvaWQge1xuICAgIHRoaXMuY29tcG9zaW5nID0gdHJ1ZTtcbiAgfVxuXG4gIG9uQ29tcG9zaXRpb25FbmQoKTogdm9pZCB7XG4gICAgdGhpcy5jb21wb3NpbmcgPSBmYWxzZTtcbiAgICB0aGlzLmZpcmVJbnB1dCgpO1xuICB9XG5cbiAgb25JbnB1dCgpOiB2b2lkIHtcbiAgICB0aGlzLmxhc3RJbnB1dEF0ID0gcGVyZm9ybWFuY2Uubm93KCk7XG4gICAgdGhpcy5maXJlSW5wdXQoKTtcbiAgICB0aGlzLmNvbnRyb2xsZXIuaGFuZGxlQ2FyZXRBZnRlcklucHV0KGdldEN1cnNvck9mZnNldCh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQpKTtcbiAgfVxuXG4gIG9uS2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIHRoaXMuY29udHJvbGxlci5oYW5kbGVLZXlEb3duKGV2ZW50KTtcbiAgfVxuXG4gIG9uUGFzdGUoZXZlbnQ6IENsaXBib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBjb25zdCBlbCA9IHRoaXMuZWwubmF0aXZlRWxlbWVudDtcbiAgICBjb25zdCB0ZXh0ID0gKGV2ZW50LmNsaXBib2FyZERhdGE/LmdldERhdGEoXCJ0ZXh0L3BsYWluXCIpID8/IFwiXCIpLnJlcGxhY2UoL1xccj9cXG4vZywgXCIgXCIpO1xuICAgIGlmICghdGV4dCkgcmV0dXJuO1xuICAgIGNvbnN0IGRvYyA9IGVsLm93bmVyRG9jdW1lbnQgPz8gZG9jdW1lbnQ7XG4gICAgY29uc3Qgc2VsID0gZG9jLmdldFNlbGVjdGlvbigpO1xuICAgIGlmICghc2VsIHx8IHNlbC5yYW5nZUNvdW50ID09PSAwKSByZXR1cm47XG4gICAgY29uc3QgcmFuZ2UgPSBzZWwuZ2V0UmFuZ2VBdCgwKTtcbiAgICBpZiAoIWVsLmNvbnRhaW5zKHJhbmdlLnN0YXJ0Q29udGFpbmVyKSkgcmV0dXJuO1xuICAgIHJhbmdlLmRlbGV0ZUNvbnRlbnRzKCk7XG4gICAgY29uc3Qgbm9kZSA9IGRvYy5jcmVhdGVUZXh0Tm9kZSh0ZXh0KTtcbiAgICByYW5nZS5pbnNlcnROb2RlKG5vZGUpO1xuICAgIHJhbmdlLnNldFN0YXJ0QWZ0ZXIobm9kZSk7XG4gICAgcmFuZ2UuY29sbGFwc2UodHJ1ZSk7XG4gICAgc2VsLnJlbW92ZUFsbFJhbmdlcygpO1xuICAgIHNlbC5hZGRSYW5nZShyYW5nZSk7XG4gICAgdGhpcy5maXJlSW5wdXQoKTtcbiAgfVxuXG4gIG9uRm9jdXMoKTogdm9pZCB7XG4gICAgdGhpcy5jb250cm9sbGVyLnNldEZvY3VzZWQodHJ1ZSk7XG4gIH1cblxuICBvbkJsdXIoKTogdm9pZCB7XG4gICAgdGhpcy5jb250cm9sbGVyLnNldEZvY3VzZWQoZmFsc2UpO1xuICB9XG5cbiAgLy8gPT09IEludGVybmFsIGhlbHBlcnMgPT09XG5cbiAgcHJpdmF0ZSBmaXJlSW5wdXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuY29tcG9zaW5nKSByZXR1cm47XG4gICAgY29uc3QgZWwgPSB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQ7XG4gICAgY29uc3QgcmF3ID0gZXh0cmFjdFBsYWluVGV4dChlbCk7XG4gICAgY29uc3Qgc2hvdWxkQ2FwaXRhbGl6ZSA9IHJhdy5sZW5ndGggPiAwICYmIHJhd1swXSAhPT0gcmF3WzBdLnRvVXBwZXJDYXNlKCk7XG4gICAgY29uc3QgbmV4dCA9IHNob3VsZENhcGl0YWxpemUgPyByYXdbMF0udG9VcHBlckNhc2UoKSArIHJhdy5zbGljZSgxKSA6IHJhdztcbiAgICB0aGlzLmNvbnRyb2xsZXIuaGFuZGxlVGV4dENoYW5nZShuZXh0KTtcbiAgfVxuXG4gIHByaXZhdGUgYmluZERvY3VtZW50U2VsZWN0aW9uTGlzdGVuZXIoKTogdm9pZCB7XG4gICAgaWYgKHR5cGVvZiBkb2N1bWVudCA9PT0gXCJ1bmRlZmluZWRcIikgcmV0dXJuO1xuICAgIGNvbnN0IGVsID0gdGhpcy5lbC5uYXRpdmVFbGVtZW50O1xuICAgIC8vIHNlbGVjdGlvbmNoYW5nZSBmaXJlcyBvbiBldmVyeSBrZXlzdHJva2UgYW5kIGNhcmV0IG1vdmUg4oCUIHJ1biBvdXRzaWRlXG4gICAgLy8gQW5ndWxhcidzIHpvbmUgKMKnMTYuMSkgYW5kIHJlLWVudGVyIG9ubHkgd2hlbiB3ZSBhY3R1YWxseSBuZWVkIHRvXG4gICAgLy8gbm90aWZ5IHRoZSBjb250cm9sbGVyIG9mIGEgbWVhbmluZ2Z1bCBjaGFuZ2UuXG4gICAgdGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgIGNvbnN0IGhhbmRsZXIgPSAoKTogdm9pZCA9PiB7XG4gICAgICAgIGNvbnN0IHNlbCA9IGRvY3VtZW50LmdldFNlbGVjdGlvbigpO1xuICAgICAgICBpZiAoIXNlbCB8fCBzZWwucmFuZ2VDb3VudCA9PT0gMCkgcmV0dXJuO1xuICAgICAgICBpZiAoIXNlbC5hbmNob3JOb2RlIHx8ICFlbC5jb250YWlucyhzZWwuYW5jaG9yTm9kZSkpIHJldHVybjtcbiAgICAgICAgY29uc3QgYW5jaG9yID0gc2VsLmFuY2hvck5vZGU7XG4gICAgICAgIGNvbnN0IHN0YXJ0RWwgPVxuICAgICAgICAgIGFuY2hvci5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUgPyAoYW5jaG9yIGFzIEVsZW1lbnQpIDogYW5jaG9yLnBhcmVudEVsZW1lbnQ7XG4gICAgICAgIC8vIE9ubHkgYSBDT0xMQVBTRUQgc2VsZWN0aW9uIG1lYW5zIFwidGhlIGNhcmV0IGxhbmRlZCBpbiBhIGNoaXBcIi4gQVxuICAgICAgICAvLyByYW5nZSBzZWxlY3Rpb24gKENtZCtBLCBzaGlmdC1hcnJvdywgZHJhZykgYW5jaG9ycyBhdCBpdHMgc3RhcnQsXG4gICAgICAgIC8vIHdoaWNoIGxhbmRzIGluc2lkZSB0aGUgZmlyc3QgYDxzdHJvbmc+YCB3aGVuZXZlciB0aGUgaW5wdXQgYmVnaW5zXG4gICAgICAgIC8vIHdpdGggYSBjaGlwIOKAlCBzdGFydGluZyByZS1lZGl0IHRoZXJlIHBhcmtzIHRoZSBjYXJldCBvbiB0aGF0IGNoaXBcbiAgICAgICAgLy8gYW5kIGRlc3Ryb3lzIHRoZSB1c2VyJ3Mgc2VsZWN0aW9uLlxuICAgICAgICBjb25zdCBzdHJvbmcgPSBzZWwuaXNDb2xsYXBzZWRcbiAgICAgICAgICA/IC8vIEJvdGggY2hpcCBraW5kcyByZXBvcnQgaGVyZS4gVGhlIGNvcmUgZGVjaWRlcyB3aGF0IGEgdGFwIG1lYW5zIOKAlCBhXG4gICAgICAgICAgICAvLyBjb21wbGV0ZWQgcGFyYW0gcmUtb3BlbnMgaXRzIG9wdGlvbnMsIGFuIGlkZW50aWZpZWQgZGF0ZSBvcGVucyB0aGVcbiAgICAgICAgICAgIC8vIGNhbGVuZGFyLCBhbnl0aGluZyBlbHNlIGlzIGluZXJ0LlxuICAgICAgICAgICAgc3RhcnRFbD8uY2xvc2VzdDxIVE1MRWxlbWVudD4oXCJzdHJvbmdbZGF0YS1wYXJhbS1pZF1cIilcbiAgICAgICAgICA6IG51bGw7XG4gICAgICAgIC8vIGBET01TdHJpbmdNYXBgIGlzIGFuIGluZGV4IHNpZ25hdHVyZTsgYnJhY2tldCBub3RhdGlvbiBpcyByZXF1aXJlZFxuICAgICAgICAvLyBieSBgbm9Qcm9wZXJ0eUFjY2Vzc0Zyb21JbmRleFNpZ25hdHVyZWAuXG4gICAgICAgIGNvbnN0IGVuY2xvc2luZyA9IHN0cm9uZz8uZGF0YXNldFtcInBhcmFtSWRcIl0gPz8gbnVsbDtcbiAgICAgICAgaWYgKGVuY2xvc2luZyAmJiBlbmNsb3NpbmcgIT09IHRoaXMuZWRpdGluZ1BhcmFtSWQpIHtcbiAgICAgICAgICB0aGlzLnpvbmUucnVuKCgpID0+IHRoaXMuY29udHJvbGxlci5zdGFydEVkaXRpbmdQYXJhbShlbmNsb3NpbmcpKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBlcmZvcm1hbmNlLm5vdygpIC0gdGhpcy5sYXN0SW5wdXRBdCA8IDUwKSByZXR1cm47XG4gICAgICAgIHRoaXMuem9uZS5ydW4oKCkgPT4gdGhpcy5jb250cm9sbGVyLmhhbmRsZUNhcmV0TW92ZShnZXRDdXJzb3JPZmZzZXQoZWwpKSk7XG4gICAgICB9O1xuICAgICAgdGhpcy5kb2N1bWVudFNlbGVjdGlvbkxpc3RlbmVyID0gaGFuZGxlcjtcbiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJzZWxlY3Rpb25jaGFuZ2VcIiwgaGFuZGxlcik7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGJpbmRCZWZvcmVJbnB1dExpc3RlbmVyKCk6IHZvaWQge1xuICAgIGNvbnN0IGVsID0gdGhpcy5lbC5uYXRpdmVFbGVtZW50O1xuICAgIC8vIE5hdGl2ZSBiZWZvcmVpbnB1dCDigJQgUmVhY3QncyBzeW50aGV0aWMgb25CZWZvcmVJbnB1dCBpcyB3aXJlZCB0byB0aGVcbiAgICAvLyBsZWdhY3kgdGV4dElucHV0IGV2ZW50IGFuZCBkb2Vzbid0IGZpcmUgcmVsaWFibHkgZm9yIGRlbGV0ZSogdHlwZXMuXG4gICAgY29uc3QgaGFuZGxlciA9IChldmVudDogRXZlbnQpOiB2b2lkID0+IHtcbiAgICAgIGNvbnN0IGlucHV0RXZlbnQgPSBldmVudCBhcyBJbnB1dEV2ZW50O1xuICAgICAgY29uc3QgdCA9IGlucHV0RXZlbnQuaW5wdXRUeXBlO1xuICAgICAgaWYgKHQgPT09IFwiaW5zZXJ0UGFyYWdyYXBoXCIgfHwgdCA9PT0gXCJpbnNlcnRMaW5lQnJlYWtcIiB8fCB0ID09PSBcImluc2VydEZyb21Ecm9wXCIpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKHQuc3RhcnRzV2l0aChcImluc2VydFwiKSB8fCB0LnN0YXJ0c1dpdGgoXCJkZWxldGVcIikpIHtcbiAgICAgICAgY29uc3QgcmVwbGFjZW1lbnQgPSB0LnN0YXJ0c1dpdGgoXCJkZWxldGVcIikgPyBcIlwiIDogKGlucHV0RXZlbnQuZGF0YSA/PyBcIlwiKTtcbiAgICAgICAgaWYgKHRoaXMuY29udHJvbGxlci5yZXBsYWNlRWRpdGluZ1JhbmdlKHJlcGxhY2VtZW50KSkge1xuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICAgIHRoaXMuYmVmb3JlSW5wdXRMaXN0ZW5lciA9IGhhbmRsZXI7XG4gICAgZWwuYWRkRXZlbnRMaXN0ZW5lcihcImJlZm9yZWlucHV0XCIsIGhhbmRsZXIpO1xuICB9XG5cbiAgcHJpdmF0ZSBiaW5kU3RhdGVTdWJzY3JpcHRpb24oKTogdm9pZCB7XG4gICAgY29uc3QgZWwgPSB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQ7XG4gICAgdGhpcy5jb250cm9sbGVyLnN0YXRlJC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChzdGF0ZSkgPT4ge1xuICAgICAgdGhpcy5lZGl0aW5nUGFyYW1JZCA9IHN0YXRlLmVkaXRpbmdQYXJhbT8uaWQgPz8gc3RhdGUuZWRpdGluZ0lkZW50aWZpZWQ/LmlkID8/IG51bGw7XG5cbiAgICAgIHJlbmRlckVkaXRhYmxlQ29udGVudCh7XG4gICAgICAgIGlucHV0OiBlbCxcbiAgICAgICAgc2VnbWVudHM6IHN0YXRlLnNlZ21lbnRzLFxuICAgICAgICBuZXdQYXJhbUlkOiBzdGF0ZS5uZXdQYXJhbUlkLFxuICAgICAgICBlZGl0aW5nUGFyYW1JZDogc3RhdGUuZWRpdGluZ1BhcmFtPy5pZCA/PyBudWxsLFxuICAgICAgICBwbGFjZWhvbGRlclRleHQ6IHN0YXRlLnBsYWNlaG9sZGVyVGV4dCxcbiAgICAgICAgaXNGb2N1c2VkOiBzdGF0ZS5pc0ZvY3VzZWQsXG4gICAgICB9KTtcblxuICAgICAgLy8gUG9zdC1wcm9tb3RlIHJlZm9jdXMgKyBjYXJldC1hZnRlci1ib2xkIHBsYWNlbWVudCAobWlycm9ycyBSZWFjdCdzXG4gICAgICAvLyB1c2VMYXlvdXRFZmZlY3Qgb24gbmV3UGFyYW1JZCkuXG4gICAgICBjb25zdCBjdXJyZW50UGFyYW1JZCA9IHN0YXRlLm5ld1BhcmFtSWQgPz8gXCJcIjtcbiAgICAgIGlmIChjdXJyZW50UGFyYW1JZCAmJiBjdXJyZW50UGFyYW1JZCAhPT0gdGhpcy5sYXN0U2VlblBhcmFtSWQpIHtcbiAgICAgICAgdGhpcy5sYXN0U2VlblBhcmFtSWQgPSBjdXJyZW50UGFyYW1JZDtcbiAgICAgICAgZWwuZm9jdXMoKTtcbiAgICAgICAgY29uc3QgZGVzaXJlZCA9IHN0YXRlLmNhcmV0T2Zmc2V0ID8/IHBsYWluVGV4dExlbmd0aChlbCk7XG4gICAgICAgIHNldEN1cnNvck9mZnNldChlbCwgZGVzaXJlZCk7XG4gICAgICB9IGVsc2UgaWYgKCFjdXJyZW50UGFyYW1JZCkge1xuICAgICAgICB0aGlzLmxhc3RTZWVuUGFyYW1JZCA9IFwiXCI7XG4gICAgICB9XG5cbiAgICAgIC8vIFJlLWVkaXQgY2FyZXQgcGFyayAobWlycm9ycyBSZWFjdCdzIHVzZUxheW91dEVmZmVjdCBvbiBlZGl0aW5nUGFyYW0pLlxuICAgICAgY29uc3QgZWRpdGluZ0lkID0gc3RhdGUuZWRpdGluZ1BhcmFtPy5pZCA/PyBcIlwiO1xuICAgICAgaWYgKGVkaXRpbmdJZCAmJiBlZGl0aW5nSWQgIT09IHRoaXMubGFzdEVkaXRpbmdJZCAmJiBzdGF0ZS5lZGl0aW5nQW5jaG9yICE9IG51bGwpIHtcbiAgICAgICAgdGhpcy5sYXN0RWRpdGluZ0lkID0gZWRpdGluZ0lkO1xuICAgICAgICBzZXRDdXJzb3JPZmZzZXQoZWwsIHN0YXRlLmVkaXRpbmdBbmNob3IpO1xuICAgICAgfSBlbHNlIGlmICghZWRpdGluZ0lkKSB7XG4gICAgICAgIHRoaXMubGFzdEVkaXRpbmdJZCA9IFwiXCI7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
|