@magicx-eng/ai-autocomplete-angular 0.12.0 → 0.13.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 +34 -15
- package/esm2020/lib/ai-autocomplete/ai-autocomplete.component.mjs +3 -3
- package/esm2020/lib/ai-autocomplete-dropdown/ai-autocomplete-dropdown.component.mjs +44 -5
- package/esm2020/lib/controller/ai-autocomplete.controller.mjs +3 -3
- package/esm2020/lib/internal/date-grid/date-grid.component.mjs +9 -3
- package/esm2020/lib/internal/layout/grid.component.mjs +10 -4
- package/esm2020/lib/internal/suggestion-grid/suggestion-grid.component.mjs +79 -18
- package/esm2020/lib/internal/suggestion-item/suggestion-item.component.mjs +25 -4
- package/esm2020/lib/shared/types.mjs +1 -1
- package/fesm2015/magicx-eng-ai-autocomplete-angular.mjs +165 -29
- package/fesm2015/magicx-eng-ai-autocomplete-angular.mjs.map +1 -1
- package/fesm2020/magicx-eng-ai-autocomplete-angular.mjs +162 -29
- package/fesm2020/magicx-eng-ai-autocomplete-angular.mjs.map +1 -1
- package/lib/ai-autocomplete-dropdown/ai-autocomplete-dropdown.component.d.ts +17 -2
- package/lib/ai-autocomplete-dropdown/ai-autocomplete-dropdown.component.d.ts.map +1 -1
- package/lib/controller/ai-autocomplete.controller.d.ts +1 -1
- package/lib/controller/ai-autocomplete.controller.d.ts.map +1 -1
- package/lib/internal/date-grid/date-grid.component.d.ts +2 -0
- package/lib/internal/date-grid/date-grid.component.d.ts.map +1 -1
- package/lib/internal/layout/grid.component.d.ts +10 -2
- package/lib/internal/layout/grid.component.d.ts.map +1 -1
- package/lib/internal/suggestion-grid/suggestion-grid.component.d.ts +30 -9
- package/lib/internal/suggestion-grid/suggestion-grid.component.d.ts.map +1 -1
- package/lib/internal/suggestion-item/suggestion-item.component.d.ts +16 -2
- package/lib/internal/suggestion-item/suggestion-item.component.d.ts.map +1 -1
- package/lib/shared/types.d.ts +1 -1
- package/package.json +2 -2
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { AIAutocomplete as CoreAIAutocomplete, selectedIsoFromText, } from "@magicx-eng/ai-autocomplete-vanilla";
|
|
1
|
+
import { AIAutocomplete as CoreAIAutocomplete, identifiedParamLabel, selectedIsoFromText, } from "@magicx-eng/ai-autocomplete-vanilla";
|
|
2
2
|
import { BehaviorSubject, combineLatest, map, shareReplay } from "rxjs";
|
|
3
3
|
import { deriveField } from "./observables";
|
|
4
4
|
/**
|
|
@@ -354,7 +354,7 @@ function computeDropdown(s, optionsPosition) {
|
|
|
354
354
|
// parameter the server matched it to, so the calendar isn't unlabelled.
|
|
355
355
|
{
|
|
356
356
|
type: editingIdentified.type,
|
|
357
|
-
text: editingIdentified.type,
|
|
357
|
+
text: identifiedParamLabel(editingIdentified.type),
|
|
358
358
|
required: true,
|
|
359
359
|
options: [],
|
|
360
360
|
}
|
|
@@ -384,4 +384,4 @@ function computeDropdown(s, optionsPosition) {
|
|
|
384
384
|
optionsPosition,
|
|
385
385
|
};
|
|
386
386
|
}
|
|
387
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWktYXV0b2NvbXBsZXRlLmNvbnRyb2xsZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2NvbnRyb2xsZXIvYWktYXV0b2NvbXBsZXRlLmNvbnRyb2xsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLGNBQWMsSUFBSSxrQkFBa0IsRUFPcEMsbUJBQW1CLEdBQ3BCLE1BQU0scUNBQXFDLENBQUM7QUFDN0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsR0FBRyxFQUFtQixXQUFXLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFPekYsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUU1Qzs7Ozs7Ozs7Ozs7O0dBWUc7QUFDSCxNQUFNLE9BQU8sd0JBQXdCO0lBcUZuQzs7O09BR0c7SUFDSCxZQUFZLE9BQXdDLEVBQUU7UUF0RnRELDRFQUE0RTtRQUM1RSw0RUFBNEU7UUFDNUUsbUVBQW1FO1FBQ2xELHFCQUFnQixHQUFHLElBQUksZUFBZSxDQUFvQixPQUFPLENBQUMsQ0FBQztRQUU1RSxnQkFBVyxHQUFHLEtBQUssQ0FBQztRQWtGMUIsSUFBSSxPQUFPLFFBQVEsS0FBSyxXQUFXLEVBQUU7WUFDbkMsTUFBTSxJQUFJLEtBQUssQ0FDYiwyREFBMkQ7Z0JBQ3pELHdFQUF3RSxDQUMzRSxDQUFDO1NBQ0g7UUFFRCx3RUFBd0U7UUFDeEUscUVBQXFFO1FBQ3JFLE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFM0MsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLGtCQUFrQixDQUFDLElBQUksRUFBRTtZQUN2QyxHQUFHLElBQUk7WUFDUCxVQUFVLEVBQUUsVUFBVTtZQUN0QixNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sSUFBSSxjQUFjO1lBQ3JDLGlFQUFpRTtZQUNqRSxvRUFBb0U7WUFDcEUsMkNBQTJDO1lBQzNDLGVB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RCxvQkFBb0IsRUFBRSxDQUFDLENBQUMsb0JBQW9CO1FBQzVDLG9FQUFvRTtRQUNwRSxzRUFBc0U7UUFDdEUsMkVBQTJFO1FBQzNFLGtDQUFrQztRQUNsQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLGdCQUFnQjtRQUM5QixRQUFRLEVBQUUsQ0FBQyxDQUFDLFFBQVE7UUFDcEIsZUFBZSxFQUFFLGlCQUFpQjtZQUNoQyxDQUFDLENBQUMsaUJBQWlCLENBQUMsR0FBRztZQUN2QixDQUFDLENBQUMsbUJBQW1CLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQztRQUMzQyxlQUFlO0tBQ2hCLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgdHlwZSBDb21wbGV0ZWRQYXJhbVN0YXRlLFxuICBBSUF1dG9jb21wbGV0ZSBhcyBDb3JlQUlBdXRvY29tcGxldGUsXG4gIHR5cGUgQ29yZVN0YXRlLFxuICB0eXBlIFByb2R1Y3QsXG4gIHR5cGUgU2VnbWVudCxcbiAgdHlwZSBTa2lwcGVkUGFyYW1TdGF0ZSxcbiAgdHlwZSBTdWdnZXN0aW9uLFxuICB0eXBlIFN1Z2dlc3Rpb25PcHRpb24sXG4gIHNlbGVjdGVkSXNvRnJvbVRleHQsXG59IGZyb20gXCJAbWFnaWN4LWVuZy9haS1hdXRvY29tcGxldGUtdmFuaWxsYVwiO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCBtYXAsIHR5cGUgT2JzZXJ2YWJsZSwgc2hhcmVSZXBsYXkgfSBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IHR5cGUge1xuICBBSUF1dG9jb21wbGV0ZUNvbnRyb2xsZXJPcHRpb25zLFxuICBBSUF1dG9jb21wbGV0ZUNvbnRyb2xsZXJTdGF0ZSxcbiAgQUlBdXRvY29tcGxldGVDb250cm9sbGVyVXBkYXRlLFxuICBBSUF1dG9jb21wbGV0ZURyb3Bkb3duU3RhdGUsXG59IGZyb20gXCIuLi9zaGFyZWQvdHlwZXNcIjtcbmltcG9ydCB7IGRlcml2ZUZpZWxkIH0gZnJvbSBcIi4vb2JzZXJ2YWJsZXNcIjtcblxuLyoqXG4gKiBUaWVyIDIgbG9naWMgc3VyZmFjZSBmb3IgYEBtYWdpY3gtZW5nL2FpLWF1dG9jb21wbGV0ZS1hbmd1bGFyYCDigJQgdGhlIEFuZ3VsYXJcbiAqIGVxdWl2YWxlbnQgb2YgUmVhY3QncyBgdXNlQUlBdXRvY29tcGxldGUoKWAgaG9vay4gV3JhcHMgYSBoZWFkbGVzc1xuICogYEBtYWdpY3gtZW5nL2FpLWF1dG9jb21wbGV0ZS12YW5pbGxhYCBjb3JlIGFuZCBleHBvc2VzIGl0cyBzdGF0ZSBhcyBSeEpTXG4gKiBvYnNlcnZhYmxlcyBwbHVzIHRoaW4gYWN0aW9uIG1ldGhvZHMuXG4gKlxuICogVGhlIGNvbnRyb2xsZXIgaXMgY29uc3VtZXItbWFuYWdlZCDigJQgdGhlIGNvbnN1bWVyIGNyZWF0ZXMgaXRcbiAqIHdpdGggYG5ld2AsIGhvbGRzIHRoZSByZWZlcmVuY2UsIGFuZCAqKm11c3QgY2FsbCBgZGVzdHJveSgpYCoqIGluIHRoZWlyXG4gKiBvd24gYG5nT25EZXN0cm95YC4gVGhlIFRpZXIgMSBgPGFpLWF1dG9jb21wbGV0ZT5gIGNvbXBvbmVudCBkb2VzIHRoaXNcbiAqIGF1dG9tYXRpY2FsbHk7IFRpZXIgMiBjb25zdW1lcnMgZG8gbm90IGdldCBhdXRvLWNsZWFudXAuXG4gKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY2xhc3MgQUlBdXRvY29tcGxldGVDb250cm9sbGVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBjb3JlOiBDb3JlQUlBdXRvY29tcGxldGU7XG4gIHByaXZhdGUgcmVhZG9ubHkgcmF3U3RhdGUkOiBCZWhhdmlvclN1YmplY3Q8Q29yZVN0YXRlPjtcbiAgLy8gb3B0aW9uc1Bvc2l0aW9uIGlzbid0IHBhcnQgb2YgQ29yZVN0YXRlIChpdCdzIGEgY29yZSBvcHRpb24pLCBzbyB0cmFjayBpdFxuICAvLyBoZXJlIGFuZCBmb2xkIGl0IGludG8gYGRyb3Bkb3duJGAgc28gdGhlIGRyb3Bkb3duIGNhbiByZWFkIHBsYWNlbWVudCBmcm9tXG4gIC8vIHRoZSBjb250cm9sbGVyIOKAlCBjb25maWd1cmVkIG9uY2UsIGtlcHQgaW4gc3luYyB0aHJvdWdoIHVwZGF0ZSgpLlxuICBwcml2YXRlIHJlYWRvbmx5IG9wdGlvbnNQb3NpdGlvbiQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFwiYWJvdmVcIiB8IFwiYmVsb3dcIj4oXCJiZWxvd1wiKTtcbiAgcHJpdmF0ZSByZWFkb25seSB1bnN1YnNjcmliZUNvcmU6ICgpID0+IHZvaWQ7XG4gIHByaXZhdGUgaXNEZXN0cm95ZWQgPSBmYWxzZTtcblxuICAvLyA9PT0gUGVyLWZpZWxkIG9ic2VydmFibGVzID09PVxuICAvLyBFYWNoIG9uZSBydW5zIHRocm91Z2ggZGVyaXZlRmllbGQsIHdoaWNoIGJha2VzIGluIGRpc3RpbmN0VW50aWxDaGFuZ2VkXG4gIC8vIGFuZCBzaGFyZVJlcGxheSh7IGJ1ZmZlclNpemU6IDEsIHJlZkNvdW50OiB0cnVlIH0pIHBlciDCpzE5LjQuXG5cbiAgLyoqIFBsYWluLXRleHQgY29udGVudCBvZiB0aGUgZWRpdG9yLiAqL1xuICByZWFkb25seSB0ZXh0JDogT2JzZXJ2YWJsZTxzdHJpbmc+O1xuICAvKiogQ29tcGxldGVkIChib2xkKSBwYXJhbXMgY3VycmVudGx5IGluIHRoZSBlZGl0b3IuICovXG4gIHJlYWRvbmx5IGNvbXBsZXRlZFBhcmFtcyQ6IE9ic2VydmFibGU8Q29tcGxldGVkUGFyYW1TdGF0ZVtdPjtcbiAgLyoqXG4gICAqIFN1Z2dlc3Rpb25zIHRoZSB1c2VyIGRpc21pc3NlZCB3aXRoIHRoZSBza2lwIGtleSAo4oaSKS4gTm90aGluZyByZW5kZXJzXG4gICAqIHRoZW07IHRoZXkgZXhpc3Qgc28gYSBoYW5kLXJvbGxlZCBzdWJtaXQgY2FuIHBhc3MgdGhlbSB0b1xuICAgKiBgYnVpbGRTdWJtaXRSZXN1bHRgIGFuZCBjYXJyeSB0aGUgc2FtZSBgdGV4dDogXCJza2lwcGVkXCJgIGVudHJpZXMgdGhlXG4gICAqIFNESydzIG93biByZXF1ZXN0cyBkby5cbiAgICovXG4gIHJlYWRvbmx5IHNraXBwZWRQYXJhbXMkOiBPYnNlcnZhYmxlPFNraXBwZWRQYXJhbVN0YXRlW10+O1xuICAvKiogQWN0aW9uYWJsZSBzdWdnZXN0aW9uIHBpbGxzIChmaXJzdCBvbmUgaXMgdGhlIGFjdGl2ZSBwaWxsKS4gKi9cbiAgcmVhZG9ubHkgc3VnZ2VzdGlvblBpbGxzJDogT2JzZXJ2YWJsZTxTdWdnZXN0aW9uW10+O1xuICAvKiogVGV4dCArIGNvbXBsZXRlZC1wYXJhbSBzZWdtZW50cyBmb3IgcmVuZGVyaW5nIHRoZSBlZGl0b3IgYm9keS4gKi9cbiAgcmVhZG9ubHkgc2VnbWVudHMkOiBPYnNlcnZhYmxlPFNlZ21lbnRbXT47XG4gIC8qKiBJRCBvZiB0aGUgbW9zdC1yZWNlbnRseS1wcm9tb3RlZCBwYXJhbSAoZHJpdmVzIHNoaW1tZXIgYW5pbWF0aW9uKS4gKi9cbiAgcmVhZG9ubHkgbmV3UGFyYW1JZCQ6IE9ic2VydmFibGU8c3RyaW5nIHwgbnVsbD47XG4gIC8qKiBBbGwgc3VnZ2VzdGlvbnMgZnJvbSB0aGUgc2VydmVyIChpbmNsdWRpbmcgbm9uLWFjdGlvbmFibGUgb25lcykuICovXG4gIHJlYWRvbmx5IHN1Z2dlc3Rpb25zJDogT2JzZXJ2YWJsZTxTdWdnZXN0aW9uW10+O1xuICAvKipcbiAgICogUmVzdWx0cyBvZiB0aGUgbGF0ZXN0IHByb2R1Y3Qgc2VhcmNoLiBBbHdheXMgZW1wdHkgdW5sZXNzIGBwcm9kdWN0c2AgaXNcbiAgICogY29uZmlndXJlZCBvbiB0aGUgY29udHJvbGxlciDigJQgdGhlIHN0cmlwIGlzIG9wdC1pbiBhbmQgY29zdHMgbm90aGluZyB3aGVuXG4gICAqIGl0IGlzbid0IHdpcmVkIHVwLlxuICAgKi9cbiAgcmVhZG9ubHkgcHJvZHVjdHMkOiBPYnNlcnZhYmxlPFByb2R1Y3RbXT47XG4gIC8qKiBDdXJyZW50bHkgaGlnaGxpZ2h0ZWQgZHJvcGRvd24gb3B0aW9uIGluZGV4LiAtMSA9IG5vbmUuICovXG4gIHJlYWRvbmx5IGFjdGl2ZUluZGV4JDogT2JzZXJ2YWJsZTxudW1iZXI+O1xuICAvKipcbiAgICogVUktdmlzaWJsZSBsb2FkaW5nIGZsYWcg4oCUIHN1cHByZXNzZWQgZHVyaW5nIHRoZSBwb3N0LXNlbGVjdCBzdHJlYWtcbiAgICogYW5pbWF0aW9uIGFuZCBkdXJpbmcgcmUtZWRpdCAoY2FjaGVkIG9wdGlvbnMgc3RheSB2aXNpYmxlIHRoZXJlKS4gVXNlXG4gICAqIHRoaXMgaW5zdGVhZCBvZiB0aGUgcmF3IGNvcmUgc3RhdGUgZm9yIGFueSBsb2FkaW5nLXNrZWxldG9uIGJpbmRpbmcuXG4gICAqL1xuICByZWFkb25seSBpc0xvYWRpbmckOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuICAvKiogU2VydmVyLXJlcG9ydGVkIFwicXVlcnkgaXMgY29tcGxldGVcIiBmbGFnLiAqL1xuICByZWFkb25seSBpc1JlYWR5JDogT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgLyoqIFdoZXRoZXIgdGhlIGVkaXRvciBjdXJyZW50bHkgaGFzIGZvY3VzLiAqL1xuICByZWFkb25seSBpc0ZvY3VzZWQkOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuICAvKiogV2hldGhlciB0aGUgZHJvcGRvd24gc2hvdWxkIGN1cnJlbnRseSBiZSB2aXNpYmxlLiAqL1xuICByZWFkb25seSBpc0Ryb3Bkb3duT3BlbiQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBhY3RpdmUgKGxlYWRpbmcpIHBpbGwgc2hvdWxkIHJlbmRlciBzZWxlY3RlZCAoZnVsbCBvcGFjaXR5KVxuICAgKiByYXRoZXIgdGhhbiB0aGUgZGUtZW1waGFzaXplZCBgZmlyc3RgIHRpZXIuIEF1dG8gdHJpZ2dlciDih5IgdHJ1ZSBvbmx5IHdoaWxlXG4gICAqIGEgZHJvcGRvd24gb3B0aW9uIGlzIGhpZ2hsaWdodGVkOyBtYW51YWwg4oeSIHRydWUgb25jZSB0aGUgcGlsbCBpcyB0YXBwZWQuXG4gICAqL1xuICByZWFkb25seSBpc0FjdGl2ZVBpbGxTZWxlY3RlZCQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gIC8qKiBTZXJ2ZXItc3VnZ2VzdGVkIHBsYWNlaG9sZGVyIHRleHQgZm9yIHRoZSBlZGl0b3IuICovXG4gIHJlYWRvbmx5IHBsYWNlaG9sZGVyVGV4dCQ6IE9ic2VydmFibGU8c3RyaW5nPjtcbiAgLyoqIExhc3QgZmV0Y2ggZXJyb3IsIG9yIG51bGwuICovXG4gIHJlYWRvbmx5IGVycm9yJDogT2JzZXJ2YWJsZTxFcnJvciB8IG51bGw+O1xuICAvKiogUGFyYW0gY3VycmVudGx5IGJlaW5nIHJlLWVkaXRlZCwgb3IgbnVsbC4gKi9cbiAgcmVhZG9ubHkgZWRpdGluZ1BhcmFtJDogT2JzZXJ2YWJsZTxDb21wbGV0ZWRQYXJhbVN0YXRlIHwgbnVsbD47XG4gIC8qKiBQbGFpbi10ZXh0IG9mZnNldCB3aGVyZSB0aGUgZWRpdCByZWdpb24gc3RhcnRzLCBvciBudWxsLiAqL1xuICByZWFkb25seSBlZGl0aW5nQW5jaG9yJDogT2JzZXJ2YWJsZTxudW1iZXIgfCBudWxsPjtcbiAgLyoqIExpdmUgY2FyZXQgb2Zmc2V0IHdpdGhpbiB0aGUgZWRpdG9yLiAqL1xuICByZWFkb25seSBjYXJldE9mZnNldCQ6IE9ic2VydmFibGU8bnVtYmVyIHwgbnVsbD47XG5cbiAgLy8gPT09IENvbXBvc2l0ZSBvYnNlcnZhYmxlcyA9PT1cblxuICAvKipcbiAgICogU25hcHNob3Qgb2YgZXZlcnkgcHVibGljIGZpZWxkIGluIG9uZSBvYmplY3QuIENvbnZlbmllbnQgZm9yXG4gICAqIGAqbmdJZj1cImN0cmwuc3RhdGUkIHwgYXN5bmMgYXMgc3RhdGVcImAgdGVtcGxhdGluZyDigJQgYWxpYXNlcyBhbGwgZmllbGRzXG4gICAqIHVuZGVyIGEgc2luZ2xlIHN1YnNjcmlwdGlvbiBpbnN0ZWFkIG9mIG11bHRpcGxlIGB8IGFzeW5jYCBwaXBlcy5cbiAgICovXG4gIHJlYWRvbmx5IHN0YXRlJDogT2JzZXJ2YWJsZTxBSUF1dG9jb21wbGV0ZUNvbnRyb2xsZXJTdGF0ZT47XG5cbiAgLyoqXG4gICAqIENvbXBvc2l0ZSBzdGF0ZSBmb3IgdGhlIGRyb3Bkb3duIHZpZXcuIFRpZXIgMiBjb25zdW1lcnMgc3ByZWFkIHRoaXMgaW50b1xuICAgKiBgPGFpLWF1dG9jb21wbGV0ZS1kcm9wZG93bj5gOyBUaWVyIDEgdXNlcyB0aGUgc2FtZSBzaGFwZSBpbnRlcm5hbGx5LlxuICAgKi9cbiAgcmVhZG9ubHkgZHJvcGRvd24kOiBPYnNlcnZhYmxlPEFJQXV0b2NvbXBsZXRlRHJvcGRvd25TdGF0ZT47XG5cbiAgLyoqXG4gICAqIFRocm93cyBpZiBpbnZva2VkIG91dHNpZGUgYSBicm93c2VyIGVudmlyb25tZW50LiBGb3IgU1NSIC8gQW5ndWxhclxuICAgKiBVbml2ZXJzYWwsIGdhdGUgY29uc3RydWN0aW9uIHdpdGggYGlzUGxhdGZvcm1Ccm93c2VyYC5cbiAgICovXG4gIGNvbnN0cnVjdG9yKG9wdHM6IEFJQXV0b2NvbXBsZXRlQ29udHJvbGxlck9wdGlvbnMgPSB7fSkge1xuICAgIGlmICh0eXBlb2YgZG9jdW1lbnQgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJBSUF1dG9jb21wbGV0ZUNvbnRyb2xsZXIgcmVxdWlyZXMgYSBicm93c2VyIGVudmlyb25tZW50LiBcIiArXG4gICAgICAgICAgXCJGb3IgU1NSIC8gQW5ndWxhciBVbml2ZXJzYWwsIGdhdGUgY29uc3RydWN0aW9uIHdpdGggaXNQbGF0Zm9ybUJyb3dzZXIuXCIsXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIEhlYWRsZXNzIG1vZGUgbmV2ZXIgcmVuZGVycyB0byB0aGUgaG9zdCwgc28gYSB0aHJvd2F3YXkgZGl2IGlzIGZpbmUg4oCUXG4gICAgLy8gaXQncyByZXF1aXJlZCBieSB0aGUgY29yZSdzIHNpZ25hdHVyZSBmb3Igc3ltbWV0cnkgd2l0aCBmdWxsIG1vZGUuXG4gICAgY29uc3QgaG9zdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG5cbiAgICB0aGlzLmNvcmUgPSBuZXcgQ29yZUFJQXV0b2NvbXBsZXRlKGhvc3QsIHtcbiAgICAgIC4uLm9wdHMsXG4gICAgICByZW5kZXJNb2RlOiBcImhlYWRsZXNzXCIsXG4gICAgICBzb3VyY2U6IG9wdHMuc291cmNlID8/IFwiaGVhZGxlc3Mtc2RrXCIsXG4gICAgICAvLyBIZWFkbGVzcyBtb2RlIG5ldmVyIHJlbmRlcnMgdGhlIGRyb3Bkb3duIERPTSwgYnV0IHRoZSBrZXlib2FyZFxuICAgICAgLy8gY29udHJvbGxlciBzdGlsbCByZWFkcyBgb3B0aW9uc1Bvc2l0aW9uYCB0byBkZWNpZGUgd2hpY2ggdmVydGljYWxcbiAgICAgIC8vIGFycm93IG9wZW5zIHRoZSBkcm9wZG93biBmcm9tIHRoZSBpbnB1dC5cbiAgICAgIG9wdGlvbnNQb3NpdGlvbjogb3B0cy5vcHRpb25zUG9zaXRpb24gPz8gXCJiZWxvd1wiLFxuICAgIH0pO1xuXG4gICAgdGhpcy5yYXdTdGF0ZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PENvcmVTdGF0ZT4odGhpcy5jb3JlLmdldFN0YXRlKCkpO1xuICAgIC8vIFB1c2ggdGhlIHN0b3JlJ3MgKmN1cnJlbnQqIHN0YXRlLCBub3QgdGhlIHNuYXBzaG90IHRoZSBsaXN0ZW5lciB3YXNcbiAgICAvLyBoYW5kZWQuIFRoZSBjb3JlIG5vdGlmaWVzIGxpc3RlbmVycyBzeW5jaHJvbm91c2x5LCBhbmQgc29tZSBhY3Rpb25zXG4gICAgLy8gdHJpZ2dlciByZWVudHJhbnQgYHN0b3JlLnNldGAgY2FsbHMgKGUuZy4gdHlwaW5nIGEgbm9uLW1hdGNoaW5nIGNoYXJcbiAgICAvLyBkdXJpbmcgcmUtZWRpdCBtYWtlcyB0aGUgY29yZSBzeW5jaHJvbm91c2x5IGV4aXQgcmUtZWRpdCBhbmQga2ljayBvZmYgYVxuICAgIC8vIGZldGNoKS5cbiAgICAvL1xuICAgIC8vIFRoZSBjb3JlJ3Mgc3RvcmUgdXNlZCB0byBkZWxpdmVyIHN1Y2ggYSBuZXN0ZWQgc2V0IGlubGluZSBhbmQgdGhlblxuICAgIC8vIHJlc3VtZSB0aGUgb3V0ZXIgbGlzdGVuZXIgbG9vcCwgc28gYSBsaXN0ZW5lciBjb3VsZCBiZSBoYW5kZWQgYW4gb2xkZXJcbiAgICAvLyBzdGF0ZSAoc3RpbGwgaW4gcmUtZWRpdCkgKmFmdGVyKiBhIG5ld2VyIG9uZSAocmUtZWRpdCBleGl0ZWQpIOKAlCB3aGljaFxuICAgIC8vIHJlc3VycmVjdGVkIGEgc3RhbGUgYGVkaXRpbmdQYXJhbWAgYW5kIHJldHJpZ2dlcmVkIHRoZSBlZGl0b3IncyByZS1lZGl0XG4gICAgLy8gY2FyZXQtcGFyaywgeWFua2luZyB0aGUgY2FyZXQgYmFjayB0byB3aGVyZSByZS1lZGl0aW5nIHN0YXJ0ZWQuIFRoZVxuICAgIC8vIHN0b3JlIG5vdyBxdWV1ZXMgbm90aWZpY2F0aW9ucyBhbmQgZHJhaW5zIHRoZW0gaW4gb3JkZXIsIHNvIHRoYXRcbiAgICAvLyBvdXQtb2Ytb3JkZXIgZGVsaXZlcnkgY2FuIG5vIGxvbmdlciBoYXBwZW4gYXQgdGhlIHNvdXJjZS5cbiAgICAvL1xuICAgIC8vIFJlYWRpbmcgYGdldFN0YXRlKClgIGF0IGVtaXNzaW9uIHRpbWUgaXMga2VwdCBhcyBiZWx0LWFuZC1icmFjZXM6IGl0XG4gICAgLy8gY29zdHMgbm90aGluZyAoZGlzdGluY3RVbnRpbENoYW5nZWQgZG93bnN0cmVhbSBkcm9wcyB0aGUgZHVwbGljYXRlXG4gICAgLy8gZW1pc3Npb25zKSBhbmQga2VlcHMgdGhpcyBicmlkZ2UgY29ycmVjdCBmb3IgYW55IGZ1dHVyZSBjb25zdW1lciB0aGF0XG4gICAgLy8gZW1pdHMgbWlkLWNhc2NhZGUuIFJlYWN0IG5lZWRzIG5laXRoZXIsIHNpbmNlIGl0IGJhdGNoZXMgcmVuZGVycyBhbmRcbiAgICAvLyBnYXRlcyBpdHMgY2FyZXQgZWZmZWN0cyBvbiBkZXBlbmRlbmNpZXMuXG4gICAgdGhpcy51bnN1YnNjcmliZUNvcmUgPSB0aGlzLmNvcmUuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIGlmICghdGhpcy5pc0Rlc3Ryb3llZCkgdGhpcy5yYXdTdGF0ZSQubmV4dCh0aGlzLmNvcmUuZ2V0U3RhdGUoKSk7XG4gICAgfSk7XG5cbiAgICAvLyA9PT0gUGVyLWZpZWxkIG9ic2VydmFibGVzID09PVxuICAgIC8vIEFycmF5LXZhbHVlZCBmaWVsZHMgdXNlIHNoYWxsb3cgZXF1YWxpdHkuIFRoZSB2YW5pbGxhIHN0b3JlIHNwcmVhZHMgb25cbiAgICAvLyBldmVyeSB3cml0ZSAoYHN0b3JlLnNldCh7IGNvbXBsZXRlZFBhcmFtczogWy4uLl0gfSlgKSwgc28gcmVmZXJlbmNlXG4gICAgLy8gZXF1YWxpdHkgd291bGQgcmUtZmlyZSBkb3duc3RyZWFtIHN1YnNjcmliZXJzIG9uIGV2ZXJ5IHN0YXRlIHRpY2sgZXZlblxuICAgIC8vIHdoZW4gdGhlIGFycmF5J3MgY29udGVudHMgYXJlIHVuY2hhbmdlZC4gVGhlIG90aGVyIGZpZWxkcyBhcmVcbiAgICAvLyBwcmltaXRpdmVzIG9yIHN0YWJsZSBvYmplY3QgcmVmZXJlbmNlcywgc28gZGVmYXVsdCBpZGVudGl0eSBlcXVhbGl0eVxuICAgIC8vIHdvcmtzIGZpbmUuXG4gICAgdGhpcy50ZXh0JCA9IGRlcml2ZUZpZWxkKHRoaXMucmF3U3RhdGUkLCAocykgPT4gcy50ZXh0KTtcbiAgICB0aGlzLmNvbXBsZXRlZFBhcmFtcyQgPSBkZXJpdmVGaWVsZCh0aGlzLnJhd1N0YXRlJCwgKHMpID0+IHMuY29tcGxldGVkUGFyYW1zLCBhcnJFcSk7XG4gICAgdGhpcy5za2lwcGVkUGFyYW1zJCA9IGRlcml2ZUZpZWxkKHRoaXMucmF3U3RhdGUkLCAocykgPT4gcy5za2lwcGVkUGFyYW1zLCBhcnJFcSk7XG4gICAgdGhpcy5zdWdnZXN0aW9uUGlsbHMkID0gZGVyaXZlRmllbGQodGhpcy5yYXdTdGF0ZSQsIChzKSA9PiBzLmFjdGlvbmFibGVTdWdnZXN0aW9ucywgYXJyRXEpO1xuICAgIHRoaXMuc2VnbWVudHMkID0gZGVyaXZlRmllbGQodGhpcy5yYXdTdGF0ZSQsIChzKSA9PiBzLnNlZ21lbnRzLCBhcnJFcSk7XG4gICAgdGhpcy5uZXdQYXJhbUlkJCA9IGRlcml2ZUZpZWxkKHRoaXMucmF3U3RhdGUkLCAocykgPT4gcy5uZXdQYXJhbUlkKTtcbiAgICB0aGlzLnN1Z2dlc3Rpb25zJCA9IGRlcml2ZUZpZWxkKHRoaXMucmF3U3RhdGUkLCAocykgPT4gcy5zdWdnZXN0aW9ucywgYXJyRXEpO1xuICAgIHRoaXMucHJvZHVjdHMkID0gZGVyaXZlRmllbGQodGhpcy5yYXdTdGF0ZSQsIChzKSA9PiBzLnByb2R1Y3RzLCBhcnJFcSk7XG4gICAgdGhpcy5hY3RpdmVJbmRleCQgPSBkZXJpdmVGaWVsZCh0aGlzLnJhd1N0YXRlJCwgKHMpID0+IHMuYWN0aXZlRHJvcGRvd25JbmRleCk7XG4gICAgdGhpcy5pc0xvYWRpbmckID0gZGVyaXZlRmllbGQodGhpcy5yYXdTdGF0ZSQsIGNvbXB1dGVVaUxvYWRpbmcpO1xuICAgIHRoaXMuaXNSZWFkeSQgPSBkZXJpdmVGaWVsZCh0aGlzLnJhd1N0YXRlJCwgKHMpID0+IHMuaXNSZWFkeSk7XG4gICAgdGhpcy5pc0ZvY3VzZWQkID0gZGVyaXZlRmllbGQodGhpcy5yYXdTdGF0ZSQsIChzKSA9PiBzLmlzRm9jdXNlZCk7XG4gICAgdGhpcy5pc0Ryb3Bkb3duT3BlbiQgPSBkZXJpdmVGaWVsZCh0aGlzLnJhd1N0YXRlJCwgKHMpID0+IHMuaXNEcm9wZG93bk9wZW4pO1xuICAgIHRoaXMuaXNBY3RpdmVQaWxsU2VsZWN0ZWQkID0gZGVyaXZlRmllbGQodGhpcy5yYXdTdGF0ZSQsIChzKSA9PiBzLmlzQWN0aXZlUGlsbFNlbGVjdGVkKTtcbiAgICB0aGlzLnBsYWNlaG9sZGVyVGV4dCQgPSBkZXJpdmVGaWVsZCh0aGlzLnJhd1N0YXRlJCwgKHMpID0+IHMucGxhY2Vob2xkZXJUZXh0KTtcbiAgICB0aGlzLmVycm9yJCA9IGRlcml2ZUZpZWxkKHRoaXMucmF3U3RhdGUkLCAocykgPT4gcy5lcnJvcik7XG4gICAgdGhpcy5lZGl0aW5nUGFyYW0kID0gZGVyaXZlRmllbGQodGhpcy5yYXdTdGF0ZSQsIChzKSA9PiBzLmVkaXRpbmdQYXJhbSk7XG4gICAgdGhpcy5lZGl0aW5nQW5jaG9yJCA9IGRlcml2ZUZpZWxkKHRoaXMucmF3U3RhdGUkLCAocykgPT4gcy5lZGl0aW5nQW5jaG9yKTtcbiAgICB0aGlzLmNhcmV0T2Zmc2V0JCA9IGRlcml2ZUZpZWxkKHRoaXMucmF3U3RhdGUkLCAocykgPT4gcy5jYXJldE9mZnNldCk7XG5cbiAgICAvLyA9PT0gQ29tcG9zaXRlIG9ic2VydmFibGVzID09PVxuICAgIC8vIFByb2plY3QgZGlyZWN0bHkgb2ZmIGByYXdTdGF0ZSRgIHdpdGggYSBzaW5nbGUgbWFwKCkgc28gZWFjaCBzdG9yZVxuICAgIC8vIHRpY2sgcHJvZHVjZXMgZXhhY3RseSBPTkUgY29oZXJlbnQgc3RhdGUkIGVtaXNzaW9uLiBVc2luZ1xuICAgIC8vIGBjb21iaW5lTGF0ZXN0YCBvdmVyIHRoZSBwZXItZmllbGQgb2JzZXJ2YWJsZXMgaGVyZSB3b3VsZCBmaXJlIG9uZVxuICAgIC8vIGVtaXNzaW9uIHBlciBpbm5lci1zb3VyY2UgdGljayAodXAgdG8gTiBwZXIgc3RvcmUgdXBkYXRlKSwgYW5kIHRoZVxuICAgIC8vIGVkaXRvci1ob3N0IGRpcmVjdGl2ZSdzIHBvc3QtcHJvbW90ZSByZWZvY3VzIHdvdWxkIHJ1biBhZ2FpbnN0IGFuXG4gICAgLy8gaW50ZXJtZWRpYXRlIHN0YXRlIHdoZXJlIGBuZXdQYXJhbUlkYCB3YXMgc2V0IGJ1dCBgc2VnbWVudHNgIC9cbiAgICAvLyBgY2FyZXRPZmZzZXRgIHN0aWxsIGhlbGQgdGhlaXIgb2xkIHZhbHVlcyDigJQgbGVhdmluZyB0aGUgY2FyZXQgc3R1Y2tcbiAgICAvLyBhdCB0aGUgcHJlLWNsaWNrIHBvc2l0aW9uLlxuICAgIHRoaXMuc3RhdGUkID0gdGhpcy5yYXdTdGF0ZSQucGlwZShcbiAgICAgIG1hcChjb21wdXRlU3RhdGUpLFxuICAgICAgc2hhcmVSZXBsYXkoeyBidWZmZXJTaXplOiAxLCByZWZDb3VudDogdHJ1ZSB9KSxcbiAgICApO1xuXG4gICAgdGhpcy5vcHRpb25zUG9zaXRpb24kLm5leHQob3B0cy5vcHRpb25zUG9zaXRpb24gPz8gXCJiZWxvd1wiKTtcbiAgICB0aGlzLmRyb3Bkb3duJCA9IGNvbWJpbmVMYXRlc3QoW3RoaXMucmF3U3RhdGUkLCB0aGlzLm9wdGlvbnNQb3NpdGlvbiRdKS5waXBlKFxuICAgICAgbWFwKChbcywgb3B0aW9uc1Bvc2l0aW9uXSkgPT4gY29tcHV0ZURyb3Bkb3duKHMsIG9wdGlvbnNQb3NpdGlvbikpLFxuICAgICAgc2hhcmVSZXBsYXkoeyBidWZmZXJTaXplOiAxLCByZWZDb3VudDogdHJ1ZSB9KSxcbiAgICApO1xuICB9XG5cbiAgLy8gPT09IFJlYWQtb25seSBhY2Nlc3NvcnMgPT09XG5cbiAgLyoqIFN0YWJsZSBBUklBIGxpc3Rib3ggSUQgZm9yIHRoZSBkcm9wZG93bi4gUGFzcyB0byBgPHRleHRhcmVhIGFyaWEtY29udHJvbHM9XCIuLi5cIj5gLiAqL1xuICBnZXQgbGlzdGJveElkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuY29yZS5saXN0Ym94SWQ7XG4gIH1cblxuICAvKiogV2hldGhlciBgZGVzdHJveSgpYCBoYXMgYmVlbiBjYWxsZWQuIEFmdGVyIGRlc3RydWN0aW9uIGFsbCBhY3Rpb24gbWV0aG9kcyBuby1vcC4gKi9cbiAgZ2V0IGRlc3Ryb3llZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc0Rlc3Ryb3llZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTeW5jaHJvbm91cyBzbmFwc2hvdCBvZiB0aGUgY29udHJvbGxlcidzIGN1cnJlbnQgcHVibGljIHN0YXRlLiBNaXJyb3JzXG4gICAqIHRoZSBsYXRlc3QgZW1pc3Npb24gb2YgYHN0YXRlJGAuIFVzZWZ1bCBpbiBjYWxsYmFja3Mgd2hlcmUgeW91IGNhbid0XG4gICAqIGBzdWJzY3JpYmVgIChlLmcuIGluc2lkZSBhbiBldmVudCBoYW5kbGVyKS5cbiAgICovXG4gIGdldFN0YXRlKCk6IEFJQXV0b2NvbXBsZXRlQ29udHJvbGxlclN0YXRlIHtcbiAgICByZXR1cm4gY29tcHV0ZVN0YXRlKHRoaXMucmF3U3RhdGUkLnZhbHVlKTtcbiAgfVxuXG4gIC8vID09PSBBY3Rpb24gbWV0aG9kcyAocGFzcy10aHJvdWdoIHRvIHRoZSBjb3JlKSA9PT1cbiAgLy9cbiAgLy8gRXZlcnkgYWN0aW9uIG1ldGhvZCBiZWdpbnMgd2l0aCBhbiBgaXNEZXN0cm95ZWRgIGd1YXJkIHNvIHRoYXQgY2FsbGVyc1xuICAvLyB3aG8gaG9sZCBhIHN0YWxlIHJlZmVyZW5jZSBhZnRlciBgZGVzdHJveSgpYCBkb24ndCBhY2NpZGVudGFsbHkgdHJpZ2dlclxuICAvLyB3b3JrIG9uIGEgdG9ybi1kb3duIGNvcmUuIFRoZSB2YW5pbGxhIGNvcmUgZG9lcyBub3QgZ2F0ZSBpdHMgb3duIG1ldGhvZHNcbiAgLy8gcG9zdC1kaXNwb3NlIOKAlCBgcmVzZXQoKWAsIGBoYW5kbGVUZXh0Q2hhbmdlKClgLCBhbmQgZnJpZW5kcyB3b3VsZCBzdGlsbFxuICAvLyBzY2hlZHVsZSBmZXRjaGVzIG9yIGZpcmUgSFRUUCByZXF1ZXN0cyBhZ2FpbnN0IGFuIGFib3J0ZWQgY29udHJvbGxlcixcbiAgLy8gYW5kIHRoZSByZXNwb25zZXMgd291bGQgaGF2ZSBub3doZXJlIHRvIHN1cmZhY2UgKHJhd1N0YXRlJCBpcyBhbHJlYWR5XG4gIC8vIGNvbXBsZXRlKS4gVGhlIGd1YXJkIG1ha2VzIHRoZSBKU0RvYy1wcm9taXNlZCBcIm5vLW9wIHNpbGVudGx5XCJcbiAgLy8gc2VtYW50aWNzIGFjdHVhbGx5IHRydWUuXG5cbiAgLyoqIENsZWFyIGFsbCBzdGF0ZSwgcm90YXRlIGBzZXNzaW9uX2lkYCwgYW5kIHJlLWZldGNoLiBDYWxsIGFmdGVyIHN1Ym1pdC4gKi9cbiAgcmVzZXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNEZXN0cm95ZWQpIHJldHVybjtcbiAgICB0aGlzLmNvcmUucmVzZXQoKTtcbiAgfVxuXG4gIC8qKiBQaWNrIGEgZHJvcGRvd24gb3B0aW9uIChvciByZXBsYWNlIHRoZSByZS1lZGl0ZWQgcGFyYW0gaWYgaW4gcmUtZWRpdCBtb2RlKS4gKi9cbiAgc2VsZWN0T3B0aW9uKG9wdGlvbjogU3VnZ2VzdGlvbk9wdGlvbik6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzRGVzdHJveWVkKSByZXR1cm47XG4gICAgdGhpcy5jb3JlLnNlbGVjdE9wdGlvbihvcHRpb24pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFubm91bmNlIGEgcHJvZHVjdCBzZWxlY3Rpb24g4oCUIGZpcmVzIHRoZSBgb25Qcm9kdWN0U2VsZWN0YCBjYWxsYmFjayB0aGVcbiAgICogY29udHJvbGxlciB3YXMgY29uc3RydWN0ZWQgd2l0aC4gYDxhaS1hdXRvY29tcGxldGUtZHJvcGRvd24+YCBjYWxscyB0aGlzXG4gICAqIGZvciB5b3U7IGNvbnN1bWVycyByZW5kZXJpbmcgdGhlaXIgb3duIHN0cmlwIGNhbGwgaXQgdGhlbXNlbHZlcy5cbiAgICpcbiAgICogRW1pdHRpbmcgaXMgdGhlIHdob2xlIGJlaGF2aW91cjogdGhlIFNESyBkZWxpYmVyYXRlbHkgZG9lcyBub3QgbmF2aWdhdGUgdG9cbiAgICogYHByb2R1Y3QudXJsYCwgYmVjYXVzZSBvbmx5IHRoZSBpbnRlZ3JhdGlvbiBrbm93cyB3aGV0aGVyIGEgc2VsZWN0aW9uXG4gICAqIG1lYW5zIFwib3BlbiB0aGUgUERQXCIsIFwiYWRkIHRvIGNhcnRcIiwgb3IgXCJmaWxsIHRoZSBpbnB1dFwiLlxuICAgKi9cbiAgc2VsZWN0UHJvZHVjdChwcm9kdWN0OiBQcm9kdWN0KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNEZXN0cm95ZWQpIHJldHVybjtcbiAgICB0aGlzLmNvcmUuc2VsZWN0UHJvZHVjdChwcm9kdWN0KTtcbiAgfVxuXG4gIC8qKiBQcm9tb3RlIHRoZSBwaWxsIGF0IGBpbmRleGAgdG8gYWN0aXZlIChmcm9udCBvZiB0aGUgbGlzdCkuICovXG4gIHNldEFjdGl2ZVBpbGwoaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzRGVzdHJveWVkKSByZXR1cm47XG4gICAgdGhpcy5jb3JlLnNldEFjdGl2ZVBpbGwoaW5kZXgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNraXAgdGhlIGFjdGl2ZSBwaWxsIOKAlCBzYW1lIGFjdGlvbiBhcyBwcmVzc2luZyDihpIgYXQgdGhlIGVuZCBvZiB0aGUgaW5wdXQuXG4gICAqIFRoZSBkcm9wZG93bidzIHNraXAgYnV0dG9uIGNhbGxzIHRoaXM7IGNvbnN1bWVycyByZW5kZXJpbmcgdGhlaXIgb3duIHNraXBcbiAgICogYWZmb3JkYW5jZSBjYWxsIGl0IGRpcmVjdGx5LiBUaGUgc2tpcHBlZCBzdWdnZXN0aW9uIGpvaW5zIGBza2lwcGVkUGFyYW1zJGAuXG4gICAqL1xuICBza2lwQWN0aXZlUGlsbCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc0Rlc3Ryb3llZCkgcmV0dXJuO1xuICAgIHRoaXMuY29yZS5za2lwQWN0aXZlUGlsbCgpO1xuICB9XG5cbiAgLyoqIERyb3AgdGhlIGxhc3QgY29tcGxldGVkIHBhcmFtJ3MgXCJjb21wbGV0ZWRcIiBzdGF0dXMuIFRleHQgc3RheXMgYXMgcGxhaW4gdGV4dC4gKi9cbiAgcmVtb3ZlTGFzdFBhcmFtKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzRGVzdHJveWVkKSByZXR1cm47XG4gICAgdGhpcy5jb3JlLnJlbW92ZUxhc3RQYXJhbSgpO1xuICB9XG5cbiAgLyoqIENsZWFyIHRoZSBzaGltbWVyIGFuaW1hdGlvbiBzdGF0ZSBmb3IgdGhlIG1vc3QtcmVjZW50bHktYWRkZWQgcGFyYW0uICovXG4gIGNsZWFyTmV3UGFyYW1JZCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc0Rlc3Ryb3llZCkgcmV0dXJuO1xuICAgIHRoaXMuY29yZS5jbGVhck5ld1BhcmFtSWQoKTtcbiAgfVxuXG4gIC8qKiBDb250cm9sbGVkLW1vZGUgc2V0dGVyIGZvciBlZGl0b3IgdGV4dC4gKi9cbiAgc2V0VmFsdWUodGV4dDogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNEZXN0cm95ZWQpIHJldHVybjtcbiAgICB0aGlzLmNvcmUuc2V0VmFsdWUodGV4dCk7XG4gIH1cblxuICAvKiogQ29udHJvbGxlZC1tb2RlIHNldHRlciBmb3IgY29tcGxldGVkIHBhcmFtcy4gKi9cbiAgc2V0Q29tcGxldGVkUGFyYW1zKHBhcmFtczogQ29tcGxldGVkUGFyYW1TdGF0ZVtdKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNEZXN0cm95ZWQpIHJldHVybjtcbiAgICB0aGlzLmNvcmUuc2V0Q29tcGxldGVkUGFyYW1zKHBhcmFtcyk7XG4gIH1cblxuICAvKiogRm9yd2FyZCBwbGFpbi10ZXh0IGlucHV0IGZyb20gdGhlIGNvbnN1bWVyJ3MgYDx0ZXh0YXJlYT5gIHRvIHRoZSBjb3JlLiAqL1xuICBoYW5kbGVUZXh0Q2hhbmdlKHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc0Rlc3Ryb3llZCkgcmV0dXJuO1xuICAgIHRoaXMuY29yZS5oYW5kbGVUZXh0Q2hhbmdlKHZhbHVlKTtcbiAgfVxuXG4gIC8qKiBGb3J3YXJkIGtleWJvYXJkIGV2ZW50cyBmcm9tIHRoZSBjb25zdW1lcidzIGA8dGV4dGFyZWE+YCB0byB0aGUgY29yZS4gKi9cbiAgaGFuZGxlS2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzRGVzdHJveWVkKSByZXR1cm47XG4gICAgdGhpcy5jb3JlLmhhbmRsZUtleURvd24oZXZlbnQpO1xuICB9XG5cbiAgLyoqIE5vdGlmeSB0aGUgY29yZSBvZiBmb2N1cyBzdGF0ZS4gKi9cbiAgc2V0Rm9jdXNlZChmb2N1c2VkOiBib29sZWFuKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNEZXN0cm95ZWQpIHJldHVybjtcbiAgICB0aGlzLmNvcmUuc2V0Rm9jdXNlZChmb2N1c2VkKTtcbiAgfVxuXG4gIC8qKiBFbnRlciByZS1lZGl0IG1vZGUgZm9yIHRoZSBib2xkIHBhcmFtIHdpdGggdGhlIGdpdmVuIGlkLiAqL1xuICBzdGFydEVkaXRpbmdQYXJhbShwYXJhbUlkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc0Rlc3Ryb3llZCkgcmV0dXJuO1xuICAgIHRoaXMuY29yZS5zdGFydEVkaXRpbmdQYXJhbShwYXJhbUlkKTtcbiAgfVxuXG4gIC8qKiBFeGl0IHJlLWVkaXQgbW9kZSB3aXRob3V0IGNoYW5naW5nIHRoZSBib2xkIHBhcmFtLiAqL1xuICBleGl0RWRpdE1vZGUoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNEZXN0cm95ZWQpIHJldHVybjtcbiAgICB0aGlzLmNvcmUuZXhpdEVkaXRNb2RlKCk7XG4gIH1cblxuICAvKiogRm9yd2FyZCBwb3N0LWlucHV0IGNhcmV0IHBvc2l0aW9uIChleHRlbmRzIHRoZSBlZGl0IHRhaWwpLiAqL1xuICBoYW5kbGVDYXJldEFmdGVySW5wdXQob2Zmc2V0OiBudW1iZXIgfCBudWxsKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNEZXN0cm95ZWQpIHJldHVybjtcbiAgICB0aGlzLmNvcmUuaGFuZGxlQ2FyZXRBZnRlcklucHV0KG9mZnNldCk7XG4gIH1cblxuICAvKiogRm9yd2FyZCBzZWxlY3Rpb24tb25seSBjYXJldCBtb3ZlcyAobWF5IGV4aXQgcmUtZWRpdCkuICovXG4gIGhhbmRsZUNhcmV0TW92ZShvZmZzZXQ6IG51bWJlciB8IG51bGwpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc0Rlc3Ryb3llZCkgcmV0dXJuO1xuICAgIHRoaXMuY29yZS5oYW5kbGVDYXJldE1vdmUob2Zmc2V0KTtcbiAgfVxuXG4gIC8qKiBSZXBsYWNlIHRoZSBib2xkIHBhcmFtIGJlaW5nIHJlLWVkaXRlZC4gUmV0dXJucyB0cnVlIHdoZW4gYXBwbGllZC4gKi9cbiAgcmVwbGFjZUVkaXRpbmdSYW5nZShyZXBsYWNlbWVudDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuaXNEZXN0cm95ZWQpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gdGhpcy5jb3JlLnJlcGxhY2VFZGl0aW5nUmFuZ2UocmVwbGFjZW1lbnQpO1xuICB9XG5cbiAgLyoqIFNldCB0aGUgaGlnaGxpZ2h0ZWQgb3B0aW9uIGluZGV4ICh0eXBpY2FsbHkgZHJpdmVuIGJ5IGhvdmVyKS4gKi9cbiAgc2V0QWN0aXZlRHJvcGRvd25JbmRleChpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNEZXN0cm95ZWQpIHJldHVybjtcbiAgICB0aGlzLmNvcmUuc2V0QWN0aXZlRHJvcGRvd25JbmRleChpbmRleCk7XG4gIH1cblxuICAvKiogUGFnZSB0aGUgZGF0ZXBpY2tlciBiYWNrIG9uZSBtb250aC4gTm8tb3AgdW5sZXNzIGEgZGF0ZSBwaWxsIGlzIGFjdGl2ZS4gKi9cbiAgc2hvd1ByZXZpb3VzTW9udGgoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNEZXN0cm95ZWQpIHJldHVybjtcbiAgICB0aGlzLmNvcmUuc2hvd1ByZXZpb3VzTW9udGgoKTtcbiAgfVxuXG4gIC8qKiBQYWdlIHRoZSBkYXRlcGlja2VyIGZvcndhcmQgb25lIG1vbnRoLiBOby1vcCB1bmxlc3MgYSBkYXRlIHBpbGwgaXMgYWN0aXZlLiAqL1xuICBzaG93TmV4dE1vbnRoKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzRGVzdHJveWVkKSByZXR1cm47XG4gICAgdGhpcy5jb3JlLnNob3dOZXh0TW9udGgoKTtcbiAgfVxuXG4gIC8vID09PSBMaWZlY3ljbGUgPT09XG5cbiAgLyoqXG4gICAqIEFwcGx5IHJ1bnRpbWUgY2hhbmdlcyB0byBhIHN1YnNldCBvZiBvcHRpb25zLiBFdmVudCBjYWxsYmFja3NcbiAgICogKGBvblN1Ym1pdGAsIGBvbkVycm9yYCwgZXRjLikgY2Fubm90IGJlIHN3YXBwZWQgdGhpcyB3YXkg4oCUIHRoZXkgYXJlXG4gICAqIHJlZ2lzdGVyZWQgb25jZSBhdCBjb25zdHJ1Y3Rpb24gKG1hdGNoZXMgdGhlIFJlYWN0IGhvb2sncyBkZXNpZ24pLiBGb3JcbiAgICogZHluYW1pYyBldmVudCByZWFjdGl2aXR5LCBzdWJzY3JpYmUgdG8gdGhlIGNvcnJlc3BvbmRpbmcgb2JzZXJ2YWJsZVxuICAgKiAoZS5nLiBgdGV4dCRgIGluc3RlYWQgb2YgYG9uQ2hhbmdlYCkuXG4gICAqL1xuICB1cGRhdGUob3B0czogQUlBdXRvY29tcGxldGVDb250cm9sbGVyVXBkYXRlKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNEZXN0cm95ZWQpIHJldHVybjtcbiAgICB0aGlzLmNvcmUudXBkYXRlKG9wdHMpO1xuICAgIGlmIChvcHRzLm9wdGlvbnNQb3NpdGlvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLm9wdGlvbnNQb3NpdGlvbiQubmV4dChvcHRzLm9wdGlvbnNQb3NpdGlvbik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlbGVhc2UgYWxsIHJlc291cmNlcyDigJQgdW5zdWJzY3JpYmVzIGZyb20gdGhlIGNvcmUsIGRlc3Ryb3lzIHRoZSBjb3JlLFxuICAgKiBhbmQgY29tcGxldGVzIHRoZSBpbnRlcm5hbCBzdGF0ZSBzdWJqZWN0LiBTYWZlIHRvIGNhbGwgbXVsdGlwbGUgdGltZXMuXG4gICAqIEFmdGVyIGRlc3RydWN0aW9uLCBhY3Rpb24gbWV0aG9kcyBuby1vcCBzaWxlbnRseS5cbiAgICovXG4gIGRlc3Ryb3koKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNEZXN0cm95ZWQpIHJldHVybjtcbiAgICB0aGlzLmlzRGVzdHJveWVkID0gdHJ1ZTtcbiAgICB0aGlzLnVuc3Vic2NyaWJlQ29yZSgpO1xuICAgIHRoaXMuY29yZS5kZXN0cm95KCk7XG4gICAgdGhpcy5yYXdTdGF0ZSQuY29tcGxldGUoKTtcbiAgfVxufVxuXG4vLyA9PT09PSBQdXJlIGhlbHBlcnMg4oCUIG5vdCBwYXJ0IG9mIHRoZSBwdWJsaWMgc3VyZmFjZSA9PT09PVxuXG4vKipcbiAqIFNoYWxsb3cgYXJyYXkgZXF1YWxpdHkuIFRoZSB2YW5pbGxhIHN0b3JlIHJlYXNzaWducyBhcnJheSBmaWVsZHMgb24gZXZlcnlcbiAqIHdyaXRlIChgc3RvcmUuc2V0KHsgY29tcGxldGVkUGFyYW1zOiBbLi4ucHJldiwgeF0gfSlgKSwgc28gcmVmZXJlbmNlXG4gKiBlcXVhbGl0eSBhbG9uZSB3b3VsZCByZS1lbWl0IGRvd25zdHJlYW0gZXZlbiB3aGVuIHRoZSBjb250ZW50cyBhcmVcbiAqIGlkZW50aWNhbC4gVXNlZCBmb3IgYGNvbXBsZXRlZFBhcmFtcyRgLCBgc3VnZ2VzdGlvbnMkYCwgYHN1Z2dlc3Rpb25QaWxscyRgLFxuICogYW5kIGBzZWdtZW50cyRgLlxuICovXG5mdW5jdGlvbiBhcnJFcTxUPihhOiByZWFkb25seSBUW10sIGI6IHJlYWRvbmx5IFRbXSk6IGJvb2xlYW4ge1xuICBpZiAoYSA9PT0gYikgcmV0dXJuIHRydWU7XG4gIGlmIChhLmxlbmd0aCAhPT0gYi5sZW5ndGgpIHJldHVybiBmYWxzZTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKGFbaV0gIT09IGJbaV0pIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gY29tcHV0ZVVpTG9hZGluZyhzOiBDb3JlU3RhdGUpOiBib29sZWFuIHtcbiAgcmV0dXJuIHMuaXNMb2FkaW5nICYmICFzLmVkaXRpbmdQYXJhbSAmJiAhcy5pblNlbGVjdGlvbkFuaW1hdGlvbjtcbn1cblxuZnVuY3Rpb24gY29tcHV0ZVN0YXRlKHM6IENvcmVTdGF0ZSk6IEFJQXV0b2NvbXBsZXRlQ29udHJvbGxlclN0YXRlIHtcbiAgcmV0dXJuIHtcbiAgICB0ZXh0OiBzLnRleHQsXG4gICAgY29tcGxldGVkUGFyYW1zOiBzLmNvbXBsZXRlZFBhcmFtcyxcbiAgICBza2lwcGVkUGFyYW1zOiBzLnNraXBwZWRQYXJhbXMsXG4gICAgc3VnZ2VzdGlvblBpbGxzOiBzLmFjdGlvbmFibGVTdWdnZXN0aW9ucyxcbiAgICBzZWdtZW50czogcy5zZWdtZW50cyxcbiAgICBuZXdQYXJhbUlkOiBzLm5ld1BhcmFtSWQsXG4gICAgc3VnZ2VzdGlvbnM6IHMuc3VnZ2VzdGlvbnMsXG4gICAgcHJvZHVjdHM6IHMucHJvZHVjdHMsXG4gICAgYWN0aXZlSW5kZXg6IHMuYWN0aXZlRHJvcGRvd25JbmRleCxcbiAgICBpc0xvYWRpbmc6IGNvbXB1dGVVaUxvYWRpbmcocyksXG4gICAgaXNSZWFkeTogcy5pc1JlYWR5LFxuICAgIGlzRm9jdXNlZDogcy5pc0ZvY3VzZWQsXG4gICAgaXNEcm9wZG93bk9wZW46IHMuaXNEcm9wZG93bk9wZW4sXG4gICAgcGxhY2Vob2xkZXJUZXh0OiBzLnBsYWNlaG9sZGVyVGV4dCxcbiAgICBlcnJvcjogcy5lcnJvcixcbiAgICBlZGl0aW5nUGFyYW06IHMuZWRpdGluZ1BhcmFtLFxuICAgIGVkaXRpbmdJZGVudGlmaWVkOiBzLmVkaXRpbmdJZGVudGlmaWVkLFxuICAgIGVkaXRpbmdBbmNob3I6IHMuZWRpdGluZ0FuY2hvcixcbiAgICBjYXJldE9mZnNldDogcy5jYXJldE9mZnNldCxcbiAgfTtcbn1cblxuZnVuY3Rpb24gY29tcHV0ZURyb3Bkb3duKFxuICBzOiBDb3JlU3RhdGUsXG4gIG9wdGlvbnNQb3NpdGlvbjogXCJhYm92ZVwiIHwgXCJiZWxvd1wiLFxuKTogQUlBdXRvY29tcGxldGVEcm9wZG93blN0YXRlIHtcbiAgY29uc3QgZWRpdGluZ1BhcmFtID0gcy5lZGl0aW5nUGFyYW07XG4gIGNvbnN0IGVkaXRpbmdJZGVudGlmaWVkID0gcy5lZGl0aW5nSWRlbnRpZmllZDtcbiAgY29uc3QgYWN0aXZlU3VnZ2VzdGlvbiA9IHMuYWN0aW9uYWJsZVN1Z2dlc3Rpb25zWzBdO1xuICBjb25zdCBkcm9wZG93blBpbGw6IFN1Z2dlc3Rpb24gfCBudWxsID0gZWRpdGluZ1BhcmFtXG4gICAgPyB7XG4gICAgICAgIHR5cGU6IGVkaXRpbmdQYXJhbS5zdWdnZXN0aW9uVHlwZSxcbiAgICAgICAgdGV4dDogZWRpdGluZ1BhcmFtLnN1Z2dlc3Rpb25QbGFjZWhvbGRlcixcbiAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIG9wdGlvbnM6IGVkaXRpbmdQYXJhbS5vcHRpb25zLFxuICAgICAgfVxuICAgIDogZWRpdGluZ0lkZW50aWZpZWRcbiAgICAgID8gLy8gQW5zd2VyaW5nIGEgc3BhbiB0aGUgdXNlciB3cm90ZSB0aGVtc2VsdmVzOiB0aGUgcGlsbCBuYW1lcyB0aGVcbiAgICAgICAgLy8gcGFyYW1ldGVyIHRoZSBzZXJ2ZXIgbWF0Y2hlZCBpdCB0bywgc28gdGhlIGNhbGVuZGFyIGlzbid0IHVubGFiZWxsZWQuXG4gICAgICAgIHtcbiAgICAgICAgICB0eXBlOiBlZGl0aW5nSWRlbnRpZmllZC50eXBlLFxuICAgICAgICAgIHRleHQ6IGVkaXRpbmdJZGVudGlmaWVkLnR5cGUsXG4gICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgb3B0aW9uczogW10sXG4gICAgICAgIH1cbiAgICAgIDogbnVsbDtcbiAgY29uc3QgZHJvcGRvd25BY3RpdmVQaWxsID0gZHJvcGRvd25QaWxsID8/IGFjdGl2ZVN1Z2dlc3Rpb247XG4gIGNvbnN0IGRyb3Bkb3duUGlsbHMgPSBkcm9wZG93blBpbGwgPyBbZHJvcGRvd25QaWxsXSA6IHMuYWN0aW9uYWJsZVN1Z2dlc3Rpb25zO1xuICByZXR1cm4ge1xuICAgIHN1Z2dlc3Rpb25zOiBkcm9wZG93bkFjdGl2ZVBpbGwgPyBbeyAuLi5kcm9wZG93bkFjdGl2ZVBpbGwsIG9wdGlvbnM6IHMuZmlsdGVyZWRPcHRpb25zIH1dIDogW10sXG4gICAgYWN0aXZlSW5kZXg6IHMuYWN0aXZlRHJvcGRvd25JbmRleCxcbiAgICBpc09wZW46IHMuaXNEcm9wZG93bk9wZW4sXG4gICAgcGlsbHM6IGRyb3Bkb3duUGlsbHMsXG4gICAgaXNBY3RpdmVQaWxsU2VsZWN0ZWQ6IHMuaXNBY3RpdmVQaWxsU2VsZWN0ZWQsXG4gICAgaXNMb2FkaW5nOiBjb21wdXRlVWlMb2FkaW5nKHMpLFxuICAgIGlzSW5wdXRFbXB0eTogcy50ZXh0LnRyaW0oKS5sZW5ndGggPT09IDAsXG4gICAgcHJvZHVjdHM6IHMucHJvZHVjdHMsXG4gICAgaXNFZGl0aW5nOiBCb29sZWFuKGVkaXRpbmdQYXJhbSkgfHwgQm9vbGVhbihlZGl0aW5nSWRlbnRpZmllZCksXG4gICAgaW5TZWxlY3Rpb25BbmltYXRpb246IHMuaW5TZWxlY3Rpb25BbmltYXRpb24sXG4gICAgLy8gRGF0ZXBpY2tlci4gYHMuZmlsdGVyZWRPcHRpb25zYCBhYm92ZSBhbHJlYWR5IGNhcnJpZXMgdGhlIHZpc2libGVcbiAgICAvLyBtb250aCdzIGNlbGxzIHJhdGhlciB0aGFuIHRoZSBzdWdnZXN0aW9uJ3Mgb3duIG9wdGlvbnMgd2hlbiB0aGlzIGlzXG4gICAgLy8gXCJkYXRlXCIg4oCUIHRoZSBjb3JlIHN3YXBwZWQgdGhlbSBpbiBpdHMgZGVyaXZlIGxheWVyLCBzbyB0aGUgZHJvcGRvd24gb25seVxuICAgIC8vIGhhcyB0byBrbm93IHdoaWNoIGJvZHkgdG8gZHJhdy5cbiAgICBmb3JtYXRUeXBlOiBzLmFjdGl2ZUZvcm1hdFR5cGUsXG4gICAgZGF0ZVZpZXc6IHMuZGF0ZVZpZXcsXG4gICAgc2VsZWN0ZWREYXRlSXNvOiBlZGl0aW5nSWRlbnRpZmllZFxuICAgICAgPyBlZGl0aW5nSWRlbnRpZmllZC5pc29cbiAgICAgIDogc2VsZWN0ZWRJc29Gcm9tVGV4dChlZGl0aW5nUGFyYW0/LnRleHQpLFxuICAgIG9wdGlvbnNQb3NpdGlvbixcbiAgfTtcbn1cbiJdfQ==
|
|
387
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWktYXV0b2NvbXBsZXRlLmNvbnRyb2xsZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2NvbnRyb2xsZXIvYWktYXV0b2NvbXBsZXRlLmNvbnRyb2xsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLGNBQWMsSUFBSSxrQkFBa0IsRUFFcEMsb0JBQW9CLEVBTXBCLG1CQUFtQixHQUNwQixNQUFNLHFDQUFxQyxDQUFDO0FBQzdDLE9BQU8sRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFFLEdBQUcsRUFBbUIsV0FBVyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBT3pGLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFNUM7Ozs7Ozs7Ozs7OztHQVlHO0FBQ0gsTUFBTSxPQUFPLHdCQUF3QjtJQXFGbkM7OztPQUdHO0lBQ0gsWUFBWSxPQUF3QyxFQUFFO1FBdEZ0RCw0RUFBNEU7UUFDNUUsNEVBQTRFO1FBQzVFLG1FQUFtRTtRQUNsRCxxQkFBZ0IsR0FBRyxJQUFJLGVBQWUsQ0FBb0IsT0FBTyxDQUFDLENBQUM7UUFFNUUsZ0JBQVcsR0FBRyxLQUFLLENBQUM7UUFrRjFCLElBQUksT0FBTyxRQUFRLEtBQUssV0FBVyxFQUFFO1lBQ25DLE1BQU0sSUFBSSxLQUFLLENBQ2IsMkRBQTJEO2dCQUN6RCx3RUFBd0UsQ0FDM0UsQ0FBQztTQUNIO1FBRUQsd0VBQXdFO1FBQ3hFLHFFQUFxRTtRQUNyRSxNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRTNDLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxrQkFBa0IsQ0FBQyxJQUFJLEVBQUU7WUFDdkMsR0FBRyxJQUFJO1lBQ1AsVUFBVSxFQUFFLFVBQVU7WUFDdEIsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLElBQUksY0FBYztZQUNyQyxpRUFBaUU7WUFDakUsb0VBQW9FO1lBQ3BFLDJD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QUFJLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQztRQUM5RCxvQkFBb0IsRUFBRSxDQUFDLENBQUMsb0JBQW9CO1FBQzVDLG9FQUFvRTtRQUNwRSxzRUFBc0U7UUFDdEUsMkVBQTJFO1FBQzNFLGtDQUFrQztRQUNsQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLGdCQUFnQjtRQUM5QixRQUFRLEVBQUUsQ0FBQyxDQUFDLFFBQVE7UUFDcEIsZUFBZSxFQUFFLGlCQUFpQjtZQUNoQyxDQUFDLENBQUMsaUJBQWlCLENBQUMsR0FBRztZQUN2QixDQUFDLENBQUMsbUJBQW1CLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQztRQUMzQyxlQUFlO0tBQ2hCLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgdHlwZSBDb21wbGV0ZWRQYXJhbVN0YXRlLFxuICBBSUF1dG9jb21wbGV0ZSBhcyBDb3JlQUlBdXRvY29tcGxldGUsXG4gIHR5cGUgQ29yZVN0YXRlLFxuICBpZGVudGlmaWVkUGFyYW1MYWJlbCxcbiAgdHlwZSBQcm9kdWN0LFxuICB0eXBlIFNlZ21lbnQsXG4gIHR5cGUgU2tpcHBlZFBhcmFtU3RhdGUsXG4gIHR5cGUgU3VnZ2VzdGlvbixcbiAgdHlwZSBTdWdnZXN0aW9uT3B0aW9uLFxuICBzZWxlY3RlZElzb0Zyb21UZXh0LFxufSBmcm9tIFwiQG1hZ2ljeC1lbmcvYWktYXV0b2NvbXBsZXRlLXZhbmlsbGFcIjtcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgY29tYmluZUxhdGVzdCwgbWFwLCB0eXBlIE9ic2VydmFibGUsIHNoYXJlUmVwbGF5IH0gZnJvbSBcInJ4anNcIjtcbmltcG9ydCB0eXBlIHtcbiAgQUlBdXRvY29tcGxldGVDb250cm9sbGVyT3B0aW9ucyxcbiAgQUlBdXRvY29tcGxldGVDb250cm9sbGVyU3RhdGUsXG4gIEFJQXV0b2NvbXBsZXRlQ29udHJvbGxlclVwZGF0ZSxcbiAgQUlBdXRvY29tcGxldGVEcm9wZG93blN0YXRlLFxufSBmcm9tIFwiLi4vc2hhcmVkL3R5cGVzXCI7XG5pbXBvcnQgeyBkZXJpdmVGaWVsZCB9IGZyb20gXCIuL29ic2VydmFibGVzXCI7XG5cbi8qKlxuICogVGllciAyIGxvZ2ljIHN1cmZhY2UgZm9yIGBAbWFnaWN4LWVuZy9haS1hdXRvY29tcGxldGUtYW5ndWxhcmAg4oCUIHRoZSBBbmd1bGFyXG4gKiBlcXVpdmFsZW50IG9mIFJlYWN0J3MgYHVzZUFJQXV0b2NvbXBsZXRlKClgIGhvb2suIFdyYXBzIGEgaGVhZGxlc3NcbiAqIGBAbWFnaWN4LWVuZy9haS1hdXRvY29tcGxldGUtdmFuaWxsYWAgY29yZSBhbmQgZXhwb3NlcyBpdHMgc3RhdGUgYXMgUnhKU1xuICogb2JzZXJ2YWJsZXMgcGx1cyB0aGluIGFjdGlvbiBtZXRob2RzLlxuICpcbiAqIFRoZSBjb250cm9sbGVyIGlzIGNvbnN1bWVyLW1hbmFnZWQg4oCUIHRoZSBjb25zdW1lciBjcmVhdGVzIGl0XG4gKiB3aXRoIGBuZXdgLCBob2xkcyB0aGUgcmVmZXJlbmNlLCBhbmQgKiptdXN0IGNhbGwgYGRlc3Ryb3koKWAqKiBpbiB0aGVpclxuICogb3duIGBuZ09uRGVzdHJveWAuIFRoZSBUaWVyIDEgYDxhaS1hdXRvY29tcGxldGU+YCBjb21wb25lbnQgZG9lcyB0aGlzXG4gKiBhdXRvbWF0aWNhbGx5OyBUaWVyIDIgY29uc3VtZXJzIGRvIG5vdCBnZXQgYXV0by1jbGVhbnVwLlxuICpcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNsYXNzIEFJQXV0b2NvbXBsZXRlQ29udHJvbGxlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgY29yZTogQ29yZUFJQXV0b2NvbXBsZXRlO1xuICBwcml2YXRlIHJlYWRvbmx5IHJhd1N0YXRlJDogQmVoYXZpb3JTdWJqZWN0PENvcmVTdGF0ZT47XG4gIC8vIG9wdGlvbnNQb3NpdGlvbiBpc24ndCBwYXJ0IG9mIENvcmVTdGF0ZSAoaXQncyBhIGNvcmUgb3B0aW9uKSwgc28gdHJhY2sgaXRcbiAgLy8gaGVyZSBhbmQgZm9sZCBpdCBpbnRvIGBkcm9wZG93biRgIHNvIHRoZSBkcm9wZG93biBjYW4gcmVhZCBwbGFjZW1lbnQgZnJvbVxuICAvLyB0aGUgY29udHJvbGxlciDigJQgY29uZmlndXJlZCBvbmNlLCBrZXB0IGluIHN5bmMgdGhyb3VnaCB1cGRhdGUoKS5cbiAgcHJpdmF0ZSByZWFkb25seSBvcHRpb25zUG9zaXRpb24kID0gbmV3IEJlaGF2aW9yU3ViamVjdDxcImFib3ZlXCIgfCBcImJlbG93XCI+KFwiYmVsb3dcIik7XG4gIHByaXZhdGUgcmVhZG9ubHkgdW5zdWJzY3JpYmVDb3JlOiAoKSA9PiB2b2lkO1xuICBwcml2YXRlIGlzRGVzdHJveWVkID0gZmFsc2U7XG5cbiAgLy8gPT09IFBlci1maWVsZCBvYnNlcnZhYmxlcyA9PT1cbiAgLy8gRWFjaCBvbmUgcnVucyB0aHJvdWdoIGRlcml2ZUZpZWxkLCB3aGljaCBiYWtlcyBpbiBkaXN0aW5jdFVudGlsQ2hhbmdlZFxuICAvLyBhbmQgc2hhcmVSZXBsYXkoeyBidWZmZXJTaXplOiAxLCByZWZDb3VudDogdHJ1ZSB9KSBwZXIgwqcxOS40LlxuXG4gIC8qKiBQbGFpbi10ZXh0IGNvbnRlbnQgb2YgdGhlIGVkaXRvci4gKi9cbiAgcmVhZG9ubHkgdGV4dCQ6IE9ic2VydmFibGU8c3RyaW5nPjtcbiAgLyoqIENvbXBsZXRlZCAoYm9sZCkgcGFyYW1zIGN1cnJlbnRseSBpbiB0aGUgZWRpdG9yLiAqL1xuICByZWFkb25seSBjb21wbGV0ZWRQYXJhbXMkOiBPYnNlcnZhYmxlPENvbXBsZXRlZFBhcmFtU3RhdGVbXT47XG4gIC8qKlxuICAgKiBTdWdnZXN0aW9ucyB0aGUgdXNlciBkaXNtaXNzZWQgd2l0aCB0aGUgc2tpcCBrZXkgKOKGkikuIE5vdGhpbmcgcmVuZGVyc1xuICAgKiB0aGVtOyB0aGV5IGV4aXN0IHNvIGEgaGFuZC1yb2xsZWQgc3VibWl0IGNhbiBwYXNzIHRoZW0gdG9cbiAgICogYGJ1aWxkU3VibWl0UmVzdWx0YCBhbmQgY2FycnkgdGhlIHNhbWUgYHRleHQ6IFwic2tpcHBlZFwiYCBlbnRyaWVzIHRoZVxuICAgKiBTREsncyBvd24gcmVxdWVzdHMgZG8uXG4gICAqL1xuICByZWFkb25seSBza2lwcGVkUGFyYW1zJDogT2JzZXJ2YWJsZTxTa2lwcGVkUGFyYW1TdGF0ZVtdPjtcbiAgLyoqIEFjdGlvbmFibGUgc3VnZ2VzdGlvbiBwaWxscyAoZmlyc3Qgb25lIGlzIHRoZSBhY3RpdmUgcGlsbCkuICovXG4gIHJlYWRvbmx5IHN1Z2dlc3Rpb25QaWxscyQ6IE9ic2VydmFibGU8U3VnZ2VzdGlvbltdPjtcbiAgLyoqIFRleHQgKyBjb21wbGV0ZWQtcGFyYW0gc2VnbWVudHMgZm9yIHJlbmRlcmluZyB0aGUgZWRpdG9yIGJvZHkuICovXG4gIHJlYWRvbmx5IHNlZ21lbnRzJDogT2JzZXJ2YWJsZTxTZWdtZW50W10+O1xuICAvKiogSUQgb2YgdGhlIG1vc3QtcmVjZW50bHktcHJvbW90ZWQgcGFyYW0gKGRyaXZlcyBzaGltbWVyIGFuaW1hdGlvbikuICovXG4gIHJlYWRvbmx5IG5ld1BhcmFtSWQkOiBPYnNlcnZhYmxlPHN0cmluZyB8IG51bGw+O1xuICAvKiogQWxsIHN1Z2dlc3Rpb25zIGZyb20gdGhlIHNlcnZlciAoaW5jbHVkaW5nIG5vbi1hY3Rpb25hYmxlIG9uZXMpLiAqL1xuICByZWFkb25seSBzdWdnZXN0aW9ucyQ6IE9ic2VydmFibGU8U3VnZ2VzdGlvbltdPjtcbiAgLyoqXG4gICAqIFJlc3VsdHMgb2YgdGhlIGxhdGVzdCBwcm9kdWN0IHNlYXJjaC4gQWx3YXlzIGVtcHR5IHVubGVzcyBgcHJvZHVjdHNgIGlzXG4gICAqIGNvbmZpZ3VyZWQgb24gdGhlIGNvbnRyb2xsZXIg4oCUIHRoZSBzdHJpcCBpcyBvcHQtaW4gYW5kIGNvc3RzIG5vdGhpbmcgd2hlblxuICAgKiBpdCBpc24ndCB3aXJlZCB1cC5cbiAgICovXG4gIHJlYWRvbmx5IHByb2R1Y3RzJDogT2JzZXJ2YWJsZTxQcm9kdWN0W10+O1xuICAvKiogQ3VycmVudGx5IGhpZ2hsaWdodGVkIGRyb3Bkb3duIG9wdGlvbiBpbmRleC4gLTEgPSBub25lLiAqL1xuICByZWFkb25seSBhY3RpdmVJbmRleCQ6IE9ic2VydmFibGU8bnVtYmVyPjtcbiAgLyoqXG4gICAqIFVJLXZpc2libGUgbG9hZGluZyBmbGFnIOKAlCBzdXBwcmVzc2VkIGR1cmluZyB0aGUgcG9zdC1zZWxlY3QgcHJlc3NcbiAgICogYW5pbWF0aW9uIGFuZCBkdXJpbmcgcmUtZWRpdCAoY2FjaGVkIG9wdGlvbnMgc3RheSB2aXNpYmxlIHRoZXJlKS4gVXNlXG4gICAqIHRoaXMgaW5zdGVhZCBvZiB0aGUgcmF3IGNvcmUgc3RhdGUgZm9yIGFueSBsb2FkaW5nLXNrZWxldG9uIGJpbmRpbmcuXG4gICAqL1xuICByZWFkb25seSBpc0xvYWRpbmckOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuICAvKiogU2VydmVyLXJlcG9ydGVkIFwicXVlcnkgaXMgY29tcGxldGVcIiBmbGFnLiAqL1xuICByZWFkb25seSBpc1JlYWR5JDogT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgLyoqIFdoZXRoZXIgdGhlIGVkaXRvciBjdXJyZW50bHkgaGFzIGZvY3VzLiAqL1xuICByZWFkb25seSBpc0ZvY3VzZWQkOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuICAvKiogV2hldGhlciB0aGUgZHJvcGRvd24gc2hvdWxkIGN1cnJlbnRseSBiZSB2aXNpYmxlLiAqL1xuICByZWFkb25seSBpc0Ryb3Bkb3duT3BlbiQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBhY3RpdmUgKGxlYWRpbmcpIHBpbGwgc2hvdWxkIHJlbmRlciBzZWxlY3RlZCAoZnVsbCBvcGFjaXR5KVxuICAgKiByYXRoZXIgdGhhbiB0aGUgZGUtZW1waGFzaXplZCBgZmlyc3RgIHRpZXIuIEF1dG8gdHJpZ2dlciDih5IgdHJ1ZSBvbmx5IHdoaWxlXG4gICAqIGEgZHJvcGRvd24gb3B0aW9uIGlzIGhpZ2hsaWdodGVkOyBtYW51YWwg4oeSIHRydWUgb25jZSB0aGUgcGlsbCBpcyB0YXBwZWQuXG4gICAqL1xuICByZWFkb25seSBpc0FjdGl2ZVBpbGxTZWxlY3RlZCQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gIC8qKiBTZXJ2ZXItc3VnZ2VzdGVkIHBsYWNlaG9sZGVyIHRleHQgZm9yIHRoZSBlZGl0b3IuICovXG4gIHJlYWRvbmx5IHBsYWNlaG9sZGVyVGV4dCQ6IE9ic2VydmFibGU8c3RyaW5nPjtcbiAgLyoqIExhc3QgZmV0Y2ggZXJyb3IsIG9yIG51bGwuICovXG4gIHJlYWRvbmx5IGVycm9yJDogT2JzZXJ2YWJsZTxFcnJvciB8IG51bGw+O1xuICAvKiogUGFyYW0gY3VycmVudGx5IGJlaW5nIHJlLWVkaXRlZCwgb3IgbnVsbC4gKi9cbiAgcmVhZG9ubHkgZWRpdGluZ1BhcmFtJDogT2JzZXJ2YWJsZTxDb21wbGV0ZWRQYXJhbVN0YXRlIHwgbnVsbD47XG4gIC8qKiBQbGFpbi10ZXh0IG9mZnNldCB3aGVyZSB0aGUgZWRpdCByZWdpb24gc3RhcnRzLCBvciBudWxsLiAqL1xuICByZWFkb25seSBlZGl0aW5nQW5jaG9yJDogT2JzZXJ2YWJsZTxudW1iZXIgfCBudWxsPjtcbiAgLyoqIExpdmUgY2FyZXQgb2Zmc2V0IHdpdGhpbiB0aGUgZWRpdG9yLiAqL1xuICByZWFkb25seSBjYXJldE9mZnNldCQ6IE9ic2VydmFibGU8bnVtYmVyIHwgbnVsbD47XG5cbiAgLy8gPT09IENvbXBvc2l0ZSBvYnNlcnZhYmxlcyA9PT1cblxuICAvKipcbiAgICogU25hcHNob3Qgb2YgZXZlcnkgcHVibGljIGZpZWxkIGluIG9uZSBvYmplY3QuIENvbnZlbmllbnQgZm9yXG4gICAqIGAqbmdJZj1cImN0cmwuc3RhdGUkIHwgYXN5bmMgYXMgc3RhdGVcImAgdGVtcGxhdGluZyDigJQgYWxpYXNlcyBhbGwgZmllbGRzXG4gICAqIHVuZGVyIGEgc2luZ2xlIHN1YnNjcmlwdGlvbiBpbnN0ZWFkIG9mIG11bHRpcGxlIGB8IGFzeW5jYCBwaXBlcy5cbiAgICovXG4gIHJlYWRvbmx5IHN0YXRlJDogT2JzZXJ2YWJsZTxBSUF1dG9jb21wbGV0ZUNvbnRyb2xsZXJTdGF0ZT47XG5cbiAgLyoqXG4gICAqIENvbXBvc2l0ZSBzdGF0ZSBmb3IgdGhlIGRyb3Bkb3duIHZpZXcuIFRpZXIgMiBjb25zdW1lcnMgc3ByZWFkIHRoaXMgaW50b1xuICAgKiBgPGFpLWF1dG9jb21wbGV0ZS1kcm9wZG93bj5gOyBUaWVyIDEgdXNlcyB0aGUgc2FtZSBzaGFwZSBpbnRlcm5hbGx5LlxuICAgKi9cbiAgcmVhZG9ubHkgZHJvcGRvd24kOiBPYnNlcnZhYmxlPEFJQXV0b2NvbXBsZXRlRHJvcGRvd25TdGF0ZT47XG5cbiAgLyoqXG4gICAqIFRocm93cyBpZiBpbnZva2VkIG91dHNpZGUgYSBicm93c2VyIGVudmlyb25tZW50LiBGb3IgU1NSIC8gQW5ndWxhclxuICAgKiBVbml2ZXJzYWwsIGdhdGUgY29uc3RydWN0aW9uIHdpdGggYGlzUGxhdGZvcm1Ccm93c2VyYC5cbiAgICovXG4gIGNvbnN0cnVjdG9yKG9wdHM6IEFJQXV0b2NvbXBsZXRlQ29udHJvbGxlck9wdGlvbnMgPSB7fSkge1xuICAgIGlmICh0eXBlb2YgZG9jdW1lbnQgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJBSUF1dG9jb21wbGV0ZUNvbnRyb2xsZXIgcmVxdWlyZXMgYSBicm93c2VyIGVudmlyb25tZW50LiBcIiArXG4gICAgICAgICAgXCJGb3IgU1NSIC8gQW5ndWxhciBVbml2ZXJzYWwsIGdhdGUgY29uc3RydWN0aW9uIHdpdGggaXNQbGF0Zm9ybUJyb3dzZXIuXCIsXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIEhlYWRsZXNzIG1vZGUgbmV2ZXIgcmVuZGVycyB0byB0aGUgaG9zdCwgc28gYSB0aHJvd2F3YXkgZGl2IGlzIGZpbmUg4oCUXG4gICAgLy8gaXQncyByZXF1aXJlZCBieSB0aGUgY29yZSdzIHNpZ25hdHVyZSBmb3Igc3ltbWV0cnkgd2l0aCBmdWxsIG1vZGUuXG4gICAgY29uc3QgaG9zdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG5cbiAgICB0aGlzLmNvcmUgPSBuZXcgQ29yZUFJQXV0b2NvbXBsZXRlKGhvc3QsIHtcbiAgICAgIC4uLm9wdHMsXG4gICAgICByZW5kZXJNb2RlOiBcImhlYWRsZXNzXCIsXG4gICAgICBzb3VyY2U6IG9wdHMuc291cmNlID8/IFwiaGVhZGxlc3Mtc2RrXCIsXG4gICAgICAvLyBIZWFkbGVzcyBtb2RlIG5ldmVyIHJlbmRlcnMgdGhlIGRyb3Bkb3duIERPTSwgYnV0IHRoZSBrZXlib2FyZFxuICAgICAgLy8gY29udHJvbGxlciBzdGlsbCByZWFkcyBgb3B0aW9uc1Bvc2l0aW9uYCB0byBkZWNpZGUgd2hpY2ggdmVydGljYWxcbiAgICAgIC8vIGFycm93IG9wZW5zIHRoZSBkcm9wZG93biBmcm9tIHRoZSBpbnB1dC5cbiAgICAgIG9wdGlvbnNQb3NpdGlvbjogb3B0cy5vcHRpb25zUG9zaXRpb24gPz8gXCJiZWxvd1wiLFxuICAgIH0pO1xuXG4gICAgdGhpcy5yYXdTdGF0ZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PENvcmVTdGF0ZT4odGhpcy5jb3JlLmdldFN0YXRlKCkpO1xuICAgIC8vIFB1c2ggdGhlIHN0b3JlJ3MgKmN1cnJlbnQqIHN0YXRlLCBub3QgdGhlIHNuYXBzaG90IHRoZSBsaXN0ZW5lciB3YXNcbiAgICAvLyBoYW5kZWQuIFRoZSBjb3JlIG5vdGlmaWVzIGxpc3RlbmVycyBzeW5jaHJvbm91c2x5LCBhbmQgc29tZSBhY3Rpb25zXG4gICAgLy8gdHJpZ2dlciByZWVudHJhbnQgYHN0b3JlLnNldGAgY2FsbHMgKGUuZy4gdHlwaW5nIGEgbm9uLW1hdGNoaW5nIGNoYXJcbiAgICAvLyBkdXJpbmcgcmUtZWRpdCBtYWtlcyB0aGUgY29yZSBzeW5jaHJvbm91c2x5IGV4aXQgcmUtZWRpdCBhbmQga2ljayBvZmYgYVxuICAgIC8vIGZldGNoKS5cbiAgICAvL1xuICAgIC8vIFRoZSBjb3JlJ3Mgc3RvcmUgdXNlZCB0byBkZWxpdmVyIHN1Y2ggYSBuZXN0ZWQgc2V0IGlubGluZSBhbmQgdGhlblxuICAgIC8vIHJlc3VtZSB0aGUgb3V0ZXIgbGlzdGVuZXIgbG9vcCwgc28gYSBsaXN0ZW5lciBjb3VsZCBiZSBoYW5kZWQgYW4gb2xkZXJcbiAgICAvLyBzdGF0ZSAoc3RpbGwgaW4gcmUtZWRpdCkgKmFmdGVyKiBhIG5ld2VyIG9uZSAocmUtZWRpdCBleGl0ZWQpIOKAlCB3aGljaFxuICAgIC8vIHJlc3VycmVjdGVkIGEgc3RhbGUgYGVkaXRpbmdQYXJhbWAgYW5kIHJldHJpZ2dlcmVkIHRoZSBlZGl0b3IncyByZS1lZGl0XG4gICAgLy8gY2FyZXQtcGFyaywgeWFua2luZyB0aGUgY2FyZXQgYmFjayB0byB3aGVyZSByZS1lZGl0aW5nIHN0YXJ0ZWQuIFRoZVxuICAgIC8vIHN0b3JlIG5vdyBxdWV1ZXMgbm90aWZpY2F0aW9ucyBhbmQgZHJhaW5zIHRoZW0gaW4gb3JkZXIsIHNvIHRoYXRcbiAgICAvLyBvdXQtb2Ytb3JkZXIgZGVsaXZlcnkgY2FuIG5vIGxvbmdlciBoYXBwZW4gYXQgdGhlIHNvdXJjZS5cbiAgICAvL1xuICAgIC8vIFJlYWRpbmcgYGdldFN0YXRlKClgIGF0IGVtaXNzaW9uIHRpbWUgaXMga2VwdCBhcyBiZWx0LWFuZC1icmFjZXM6IGl0XG4gICAgLy8gY29zdHMgbm90aGluZyAoZGlzdGluY3RVbnRpbENoYW5nZWQgZG93bnN0cmVhbSBkcm9wcyB0aGUgZHVwbGljYXRlXG4gICAgLy8gZW1pc3Npb25zKSBhbmQga2VlcHMgdGhpcyBicmlkZ2UgY29ycmVjdCBmb3IgYW55IGZ1dHVyZSBjb25zdW1lciB0aGF0XG4gICAgLy8gZW1pdHMgbWlkLWNhc2NhZGUuIFJlYWN0IG5lZWRzIG5laXRoZXIsIHNpbmNlIGl0IGJhdGNoZXMgcmVuZGVycyBhbmRcbiAgICAvLyBnYXRlcyBpdHMgY2FyZXQgZWZmZWN0cyBvbiBkZXBlbmRlbmNpZXMuXG4gICAgdGhpcy51bnN1YnNjcmliZUNvcmUgPSB0aGlzLmNvcmUuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIGlmICghdGhpcy5pc0Rlc3Ryb3llZCkgdGhpcy5yYXdTdGF0ZSQubmV4dCh0aGlzLmNvcmUuZ2V0U3RhdGUoKSk7XG4gICAgfSk7XG5cbiAgICAvLyA9PT0gUGVyLWZpZWxkIG9ic2VydmFibGVzID09PVxuICAgIC8vIEFycmF5LXZhbHVlZCBmaWVsZHMgdXNlIHNoYWxsb3cgZXF1YWxpdHkuIFRoZSB2YW5pbGxhIHN0b3JlIHNwcmVhZHMgb25cbiAgICAvLyBldmVyeSB3cml0ZSAoYHN0b3JlLnNldCh7IGNvbXBsZXRlZFBhcmFtczogWy4uLl0gfSlgKSwgc28gcmVmZXJlbmNlXG4gICAgLy8gZXF1YWxpdHkgd291bGQgcmUtZmlyZSBkb3duc3RyZWFtIHN1YnNjcmliZXJzIG9uIGV2ZXJ5IHN0YXRlIHRpY2sgZXZlblxuICAgIC8vIHdoZW4gdGhlIGFycmF5J3MgY29udGVudHMgYXJlIHVuY2hhbmdlZC4gVGhlIG90aGVyIGZpZWxkcyBhcmVcbiAgICAvLyBwcmltaXRpdmVzIG9yIHN0YWJsZSBvYmplY3QgcmVmZXJlbmNlcywgc28gZGVmYXVsdCBpZGVudGl0eSBlcXVhbGl0eVxuICAgIC8vIHdvcmtzIGZpbmUuXG4gICAgdGhpcy50ZXh0JCA9IGRlcml2ZUZpZWxkKHRoaXMucmF3U3RhdGUkLCAocykgPT4gcy50ZXh0KTtcbiAgICB0aGlzLmNvbXBsZXRlZFBhcmFtcyQgPSBkZXJpdmVGaWVsZCh0aGlzLnJhd1N0YXRlJCwgKHMpID0+IHMuY29tcGxldGVkUGFyYW1zLCBhcnJFcSk7XG4gICAgdGhpcy5za2lwcGVkUGFyYW1zJCA9IGRlcml2ZUZpZWxkKHRoaXMucmF3U3RhdGUkLCAocykgPT4gcy5za2lwcGVkUGFyYW1zLCBhcnJFcSk7XG4gICAgdGhpcy5zdWdnZXN0aW9uUGlsbHMkID0gZGVyaXZlRmllbGQodGhpcy5yYXdTdGF0ZSQsIChzKSA9PiBzLmFjdGlvbmFibGVTdWdnZXN0aW9ucywgYXJyRXEpO1xuICAgIHRoaXMuc2VnbWVudHMkID0gZGVyaXZlRmllbGQodGhpcy5yYXdTdGF0ZSQsIChzKSA9PiBzLnNlZ21lbnRzLCBhcnJFcSk7XG4gICAgdGhpcy5uZXdQYXJhbUlkJCA9IGRlcml2ZUZpZWxkKHRoaXMucmF3U3RhdGUkLCAocykgPT4gcy5uZXdQYXJhbUlkKTtcbiAgICB0aGlzLnN1Z2dlc3Rpb25zJCA9IGRlcml2ZUZpZWxkKHRoaXMucmF3U3RhdGUkLCAocykgPT4gcy5zdWdnZXN0aW9ucywgYXJyRXEpO1xuICAgIHRoaXMucHJvZHVjdHMkID0gZGVyaXZlRmllbGQodGhpcy5yYXdTdGF0ZSQsIChzKSA9PiBzLnByb2R1Y3RzLCBhcnJFcSk7XG4gICAgdGhpcy5hY3RpdmVJbmRleCQgPSBkZXJpdmVGaWVsZCh0aGlzLnJhd1N0YXRlJCwgKHMpID0+IHMuYWN0aXZlRHJvcGRvd25JbmRleCk7XG4gICAgdGhpcy5pc0xvYWRpbmckID0gZGVyaXZlRmllbGQodGhpcy5yYXdTdGF0ZSQsIGNvbXB1dGVVaUxvYWRpbmcpO1xuICAgIHRoaXMuaXNSZWFkeSQgPSBkZXJpdmVGaWVsZCh0aGlzLnJhd1N0YXRlJCwgKHMpID0+IHMuaXNSZWFkeSk7XG4gICAgdGhpcy5pc0ZvY3VzZWQkID0gZGVyaXZlRmllbGQodGhpcy5yYXdTdGF0ZSQsIChzKSA9PiBzLmlzRm9jdXNlZCk7XG4gICAgdGhpcy5pc0Ryb3Bkb3duT3BlbiQgPSBkZXJpdmVGaWVsZCh0aGlzLnJhd1N0YXRlJCwgKHMpID0+IHMuaXNEcm9wZG93bk9wZW4pO1xuICAgIHRoaXMuaXNBY3RpdmVQaWxsU2VsZWN0ZWQkID0gZGVyaXZlRmllbGQodGhpcy5yYXdTdGF0ZSQsIChzKSA9PiBzLmlzQWN0aXZlUGlsbFNlbGVjdGVkKTtcbiAgICB0aGlzLnBsYWNlaG9sZGVyVGV4dCQgPSBkZXJpdmVGaWVsZCh0aGlzLnJhd1N0YXRlJCwgKHMpID0+IHMucGxhY2Vob2xkZXJUZXh0KTtcbiAgICB0aGlzLmVycm9yJCA9IGRlcml2ZUZpZWxkKHRoaXMucmF3U3RhdGUkLCAocykgPT4gcy5lcnJvcik7XG4gICAgdGhpcy5lZGl0aW5nUGFyYW0kID0gZGVyaXZlRmllbGQodGhpcy5yYXdTdGF0ZSQsIChzKSA9PiBzLmVkaXRpbmdQYXJhbSk7XG4gICAgdGhpcy5lZGl0aW5nQW5jaG9yJCA9IGRlcml2ZUZpZWxkKHRoaXMucmF3U3RhdGUkLCAocykgPT4gcy5lZGl0aW5nQW5jaG9yKTtcbiAgICB0aGlzLmNhcmV0T2Zmc2V0JCA9IGRlcml2ZUZpZWxkKHRoaXMucmF3U3RhdGUkLCAocykgPT4gcy5jYXJldE9mZnNldCk7XG5cbiAgICAvLyA9PT0gQ29tcG9zaXRlIG9ic2VydmFibGVzID09PVxuICAgIC8vIFByb2plY3QgZGlyZWN0bHkgb2ZmIGByYXdTdGF0ZSRgIHdpdGggYSBzaW5nbGUgbWFwKCkgc28gZWFjaCBzdG9yZVxuICAgIC8vIHRpY2sgcHJvZHVjZXMgZXhhY3RseSBPTkUgY29oZXJlbnQgc3RhdGUkIGVtaXNzaW9uLiBVc2luZ1xuICAgIC8vIGBjb21iaW5lTGF0ZXN0YCBvdmVyIHRoZSBwZXItZmllbGQgb2JzZXJ2YWJsZXMgaGVyZSB3b3VsZCBmaXJlIG9uZVxuICAgIC8vIGVtaXNzaW9uIHBlciBpbm5lci1zb3VyY2UgdGljayAodXAgdG8gTiBwZXIgc3RvcmUgdXBkYXRlKSwgYW5kIHRoZVxuICAgIC8vIGVkaXRvci1ob3N0IGRpcmVjdGl2ZSdzIHBvc3QtcHJvbW90ZSByZWZvY3VzIHdvdWxkIHJ1biBhZ2FpbnN0IGFuXG4gICAgLy8gaW50ZXJtZWRpYXRlIHN0YXRlIHdoZXJlIGBuZXdQYXJhbUlkYCB3YXMgc2V0IGJ1dCBgc2VnbWVudHNgIC9cbiAgICAvLyBgY2FyZXRPZmZzZXRgIHN0aWxsIGhlbGQgdGhlaXIgb2xkIHZhbHVlcyDigJQgbGVhdmluZyB0aGUgY2FyZXQgc3R1Y2tcbiAgICAvLyBhdCB0aGUgcHJlLWNsaWNrIHBvc2l0aW9uLlxuICAgIHRoaXMuc3RhdGUkID0gdGhpcy5yYXdTdGF0ZSQucGlwZShcbiAgICAgIG1hcChjb21wdXRlU3RhdGUpLFxuICAgICAgc2hhcmVSZXBsYXkoeyBidWZmZXJTaXplOiAxLCByZWZDb3VudDogdHJ1ZSB9KSxcbiAgICApO1xuXG4gICAgdGhpcy5vcHRpb25zUG9zaXRpb24kLm5leHQob3B0cy5vcHRpb25zUG9zaXRpb24gPz8gXCJiZWxvd1wiKTtcbiAgICB0aGlzLmRyb3Bkb3duJCA9IGNvbWJpbmVMYXRlc3QoW3RoaXMucmF3U3RhdGUkLCB0aGlzLm9wdGlvbnNQb3NpdGlvbiRdKS5waXBlKFxuICAgICAgbWFwKChbcywgb3B0aW9uc1Bvc2l0aW9uXSkgPT4gY29tcHV0ZURyb3Bkb3duKHMsIG9wdGlvbnNQb3NpdGlvbikpLFxuICAgICAgc2hhcmVSZXBsYXkoeyBidWZmZXJTaXplOiAxLCByZWZDb3VudDogdHJ1ZSB9KSxcbiAgICApO1xuICB9XG5cbiAgLy8gPT09IFJlYWQtb25seSBhY2Nlc3NvcnMgPT09XG5cbiAgLyoqIFN0YWJsZSBBUklBIGxpc3Rib3ggSUQgZm9yIHRoZSBkcm9wZG93bi4gUGFzcyB0byBgPHRleHRhcmVhIGFyaWEtY29udHJvbHM9XCIuLi5cIj5gLiAqL1xuICBnZXQgbGlzdGJveElkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuY29yZS5saXN0Ym94SWQ7XG4gIH1cblxuICAvKiogV2hldGhlciBgZGVzdHJveSgpYCBoYXMgYmVlbiBjYWxsZWQuIEFmdGVyIGRlc3RydWN0aW9uIGFsbCBhY3Rpb24gbWV0aG9kcyBuby1vcC4gKi9cbiAgZ2V0IGRlc3Ryb3llZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc0Rlc3Ryb3llZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTeW5jaHJvbm91cyBzbmFwc2hvdCBvZiB0aGUgY29udHJvbGxlcidzIGN1cnJlbnQgcHVibGljIHN0YXRlLiBNaXJyb3JzXG4gICAqIHRoZSBsYXRlc3QgZW1pc3Npb24gb2YgYHN0YXRlJGAuIFVzZWZ1bCBpbiBjYWxsYmFja3Mgd2hlcmUgeW91IGNhbid0XG4gICAqIGBzdWJzY3JpYmVgIChlLmcuIGluc2lkZSBhbiBldmVudCBoYW5kbGVyKS5cbiAgICovXG4gIGdldFN0YXRlKCk6IEFJQXV0b2NvbXBsZXRlQ29udHJvbGxlclN0YXRlIHtcbiAgICByZXR1cm4gY29tcHV0ZVN0YXRlKHRoaXMucmF3U3RhdGUkLnZhbHVlKTtcbiAgfVxuXG4gIC8vID09PSBBY3Rpb24gbWV0aG9kcyAocGFzcy10aHJvdWdoIHRvIHRoZSBjb3JlKSA9PT1cbiAgLy9cbiAgLy8gRXZlcnkgYWN0aW9uIG1ldGhvZCBiZWdpbnMgd2l0aCBhbiBgaXNEZXN0cm95ZWRgIGd1YXJkIHNvIHRoYXQgY2FsbGVyc1xuICAvLyB3aG8gaG9sZCBhIHN0YWxlIHJlZmVyZW5jZSBhZnRlciBgZGVzdHJveSgpYCBkb24ndCBhY2NpZGVudGFsbHkgdHJpZ2dlclxuICAvLyB3b3JrIG9uIGEgdG9ybi1kb3duIGNvcmUuIFRoZSB2YW5pbGxhIGNvcmUgZG9lcyBub3QgZ2F0ZSBpdHMgb3duIG1ldGhvZHNcbiAgLy8gcG9zdC1kaXNwb3NlIOKAlCBgcmVzZXQoKWAsIGBoYW5kbGVUZXh0Q2hhbmdlKClgLCBhbmQgZnJpZW5kcyB3b3VsZCBzdGlsbFxuICAvLyBzY2hlZHVsZSBmZXRjaGVzIG9yIGZpcmUgSFRUUCByZXF1ZXN0cyBhZ2FpbnN0IGFuIGFib3J0ZWQgY29udHJvbGxlcixcbiAgLy8gYW5kIHRoZSByZXNwb25zZXMgd291bGQgaGF2ZSBub3doZXJlIHRvIHN1cmZhY2UgKHJhd1N0YXRlJCBpcyBhbHJlYWR5XG4gIC8vIGNvbXBsZXRlKS4gVGhlIGd1YXJkIG1ha2VzIHRoZSBKU0RvYy1wcm9taXNlZCBcIm5vLW9wIHNpbGVudGx5XCJcbiAgLy8gc2VtYW50aWNzIGFjdHVhbGx5IHRydWUuXG5cbiAgLyoqIENsZWFyIGFsbCBzdGF0ZSwgcm90YXRlIGBzZXNzaW9uX2lkYCwgYW5kIHJlLWZldGNoLiBDYWxsIGFmdGVyIHN1Ym1pdC4gKi9cbiAgcmVzZXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNEZXN0cm95ZWQpIHJldHVybjtcbiAgICB0aGlzLmNvcmUucmVzZXQoKTtcbiAgfVxuXG4gIC8qKiBQaWNrIGEgZHJvcGRvd24gb3B0aW9uIChvciByZXBsYWNlIHRoZSByZS1lZGl0ZWQgcGFyYW0gaWYgaW4gcmUtZWRpdCBtb2RlKS4gKi9cbiAgc2VsZWN0T3B0aW9uKG9wdGlvbjogU3VnZ2VzdGlvbk9wdGlvbik6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzRGVzdHJveWVkKSByZXR1cm47XG4gICAgdGhpcy5jb3JlLnNlbGVjdE9wdGlvbihvcHRpb24pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFubm91bmNlIGEgcHJvZHVjdCBzZWxlY3Rpb24g4oCUIGZpcmVzIHRoZSBgb25Qcm9kdWN0U2VsZWN0YCBjYWxsYmFjayB0aGVcbiAgICogY29udHJvbGxlciB3YXMgY29uc3RydWN0ZWQgd2l0aC4gYDxhaS1hdXRvY29tcGxldGUtZHJvcGRvd24+YCBjYWxscyB0aGlzXG4gICAqIGZvciB5b3U7IGNvbnN1bWVycyByZW5kZXJpbmcgdGhlaXIgb3duIHN0cmlwIGNhbGwgaXQgdGhlbXNlbHZlcy5cbiAgICpcbiAgICogRW1pdHRpbmcgaXMgdGhlIHdob2xlIGJlaGF2aW91cjogdGhlIFNESyBkZWxpYmVyYXRlbHkgZG9lcyBub3QgbmF2aWdhdGUgdG9cbiAgICogYHByb2R1Y3QudXJsYCwgYmVjYXVzZSBvbmx5IHRoZSBpbnRlZ3JhdGlvbiBrbm93cyB3aGV0aGVyIGEgc2VsZWN0aW9uXG4gICAqIG1lYW5zIFwib3BlbiB0aGUgUERQXCIsIFwiYWRkIHRvIGNhcnRcIiwgb3IgXCJmaWxsIHRoZSBpbnB1dFwiLlxuICAgKi9cbiAgc2VsZWN0UHJvZHVjdChwcm9kdWN0OiBQcm9kdWN0KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNEZXN0cm95ZWQpIHJldHVybjtcbiAgICB0aGlzLmNvcmUuc2VsZWN0UHJvZHVjdChwcm9kdWN0KTtcbiAgfVxuXG4gIC8qKiBQcm9tb3RlIHRoZSBwaWxsIGF0IGBpbmRleGAgdG8gYWN0aXZlIChmcm9udCBvZiB0aGUgbGlzdCkuICovXG4gIHNldEFjdGl2ZVBpbGwoaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzRGVzdHJveWVkKSByZXR1cm47XG4gICAgdGhpcy5jb3JlLnNldEFjdGl2ZVBpbGwoaW5kZXgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNraXAgdGhlIGFjdGl2ZSBwaWxsIOKAlCBzYW1lIGFjdGlvbiBhcyBwcmVzc2luZyDihpIgYXQgdGhlIGVuZCBvZiB0aGUgaW5wdXQuXG4gICAqIFRoZSBkcm9wZG93bidzIHNraXAgYnV0dG9uIGNhbGxzIHRoaXM7IGNvbnN1bWVycyByZW5kZXJpbmcgdGhlaXIgb3duIHNraXBcbiAgICogYWZmb3JkYW5jZSBjYWxsIGl0IGRpcmVjdGx5LiBUaGUgc2tpcHBlZCBzdWdnZXN0aW9uIGpvaW5zIGBza2lwcGVkUGFyYW1zJGAuXG4gICAqL1xuICBza2lwQWN0aXZlUGlsbCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc0Rlc3Ryb3llZCkgcmV0dXJuO1xuICAgIHRoaXMuY29yZS5za2lwQWN0aXZlUGlsbCgpO1xuICB9XG5cbiAgLyoqIERyb3AgdGhlIGxhc3QgY29tcGxldGVkIHBhcmFtJ3MgXCJjb21wbGV0ZWRcIiBzdGF0dXMuIFRleHQgc3RheXMgYXMgcGxhaW4gdGV4dC4gKi9cbiAgcmVtb3ZlTGFzdFBhcmFtKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzRGVzdHJveWVkKSByZXR1cm47XG4gICAgdGhpcy5jb3JlLnJlbW92ZUxhc3RQYXJhbSgpO1xuICB9XG5cbiAgLyoqIENsZWFyIHRoZSBzaGltbWVyIGFuaW1hdGlvbiBzdGF0ZSBmb3IgdGhlIG1vc3QtcmVjZW50bHktYWRkZWQgcGFyYW0uICovXG4gIGNsZWFyTmV3UGFyYW1JZCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc0Rlc3Ryb3llZCkgcmV0dXJuO1xuICAgIHRoaXMuY29yZS5jbGVhck5ld1BhcmFtSWQoKTtcbiAgfVxuXG4gIC8qKiBDb250cm9sbGVkLW1vZGUgc2V0dGVyIGZvciBlZGl0b3IgdGV4dC4gKi9cbiAgc2V0VmFsdWUodGV4dDogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNEZXN0cm95ZWQpIHJldHVybjtcbiAgICB0aGlzLmNvcmUuc2V0VmFsdWUodGV4dCk7XG4gIH1cblxuICAvKiogQ29udHJvbGxlZC1tb2RlIHNldHRlciBmb3IgY29tcGxldGVkIHBhcmFtcy4gKi9cbiAgc2V0Q29tcGxldGVkUGFyYW1zKHBhcmFtczogQ29tcGxldGVkUGFyYW1TdGF0ZVtdKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNEZXN0cm95ZWQpIHJldHVybjtcbiAgICB0aGlzLmNvcmUuc2V0Q29tcGxldGVkUGFyYW1zKHBhcmFtcyk7XG4gIH1cblxuICAvKiogRm9yd2FyZCBwbGFpbi10ZXh0IGlucHV0IGZyb20gdGhlIGNvbnN1bWVyJ3MgYDx0ZXh0YXJlYT5gIHRvIHRoZSBjb3JlLiAqL1xuICBoYW5kbGVUZXh0Q2hhbmdlKHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc0Rlc3Ryb3llZCkgcmV0dXJuO1xuICAgIHRoaXMuY29yZS5oYW5kbGVUZXh0Q2hhbmdlKHZhbHVlKTtcbiAgfVxuXG4gIC8qKiBGb3J3YXJkIGtleWJvYXJkIGV2ZW50cyBmcm9tIHRoZSBjb25zdW1lcidzIGA8dGV4dGFyZWE+YCB0byB0aGUgY29yZS4gKi9cbiAgaGFuZGxlS2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzRGVzdHJveWVkKSByZXR1cm47XG4gICAgdGhpcy5jb3JlLmhhbmRsZUtleURvd24oZXZlbnQpO1xuICB9XG5cbiAgLyoqIE5vdGlmeSB0aGUgY29yZSBvZiBmb2N1cyBzdGF0ZS4gKi9cbiAgc2V0Rm9jdXNlZChmb2N1c2VkOiBib29sZWFuKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNEZXN0cm95ZWQpIHJldHVybjtcbiAgICB0aGlzLmNvcmUuc2V0Rm9jdXNlZChmb2N1c2VkKTtcbiAgfVxuXG4gIC8qKiBFbnRlciByZS1lZGl0IG1vZGUgZm9yIHRoZSBib2xkIHBhcmFtIHdpdGggdGhlIGdpdmVuIGlkLiAqL1xuICBzdGFydEVkaXRpbmdQYXJhbShwYXJhbUlkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc0Rlc3Ryb3llZCkgcmV0dXJuO1xuICAgIHRoaXMuY29yZS5zdGFydEVkaXRpbmdQYXJhbShwYXJhbUlkKTtcbiAgfVxuXG4gIC8qKiBFeGl0IHJlLWVkaXQgbW9kZSB3aXRob3V0IGNoYW5naW5nIHRoZSBib2xkIHBhcmFtLiAqL1xuICBleGl0RWRpdE1vZGUoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNEZXN0cm95ZWQpIHJldHVybjtcbiAgICB0aGlzLmNvcmUuZXhpdEVkaXRNb2RlKCk7XG4gIH1cblxuICAvKiogRm9yd2FyZCBwb3N0LWlucHV0IGNhcmV0IHBvc2l0aW9uIChleHRlbmRzIHRoZSBlZGl0IHRhaWwpLiAqL1xuICBoYW5kbGVDYXJldEFmdGVySW5wdXQob2Zmc2V0OiBudW1iZXIgfCBudWxsKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNEZXN0cm95ZWQpIHJldHVybjtcbiAgICB0aGlzLmNvcmUuaGFuZGxlQ2FyZXRBZnRlcklucHV0KG9mZnNldCk7XG4gIH1cblxuICAvKiogRm9yd2FyZCBzZWxlY3Rpb24tb25seSBjYXJldCBtb3ZlcyAobWF5IGV4aXQgcmUtZWRpdCkuICovXG4gIGhhbmRsZUNhcmV0TW92ZShvZmZzZXQ6IG51bWJlciB8IG51bGwpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc0Rlc3Ryb3llZCkgcmV0dXJuO1xuICAgIHRoaXMuY29yZS5oYW5kbGVDYXJldE1vdmUob2Zmc2V0KTtcbiAgfVxuXG4gIC8qKiBSZXBsYWNlIHRoZSBib2xkIHBhcmFtIGJlaW5nIHJlLWVkaXRlZC4gUmV0dXJucyB0cnVlIHdoZW4gYXBwbGllZC4gKi9cbiAgcmVwbGFjZUVkaXRpbmdSYW5nZShyZXBsYWNlbWVudDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuaXNEZXN0cm95ZWQpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gdGhpcy5jb3JlLnJlcGxhY2VFZGl0aW5nUmFuZ2UocmVwbGFjZW1lbnQpO1xuICB9XG5cbiAgLyoqIFNldCB0aGUgaGlnaGxpZ2h0ZWQgb3B0aW9uIGluZGV4ICh0eXBpY2FsbHkgZHJpdmVuIGJ5IGhvdmVyKS4gKi9cbiAgc2V0QWN0aXZlRHJvcGRvd25JbmRleChpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNEZXN0cm95ZWQpIHJldHVybjtcbiAgICB0aGlzLmNvcmUuc2V0QWN0aXZlRHJvcGRvd25JbmRleChpbmRleCk7XG4gIH1cblxuICAvKiogUGFnZSB0aGUgZGF0ZXBpY2tlciBiYWNrIG9uZSBtb250aC4gTm8tb3AgdW5sZXNzIGEgZGF0ZSBwaWxsIGlzIGFjdGl2ZS4gKi9cbiAgc2hvd1ByZXZpb3VzTW9udGgoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNEZXN0cm95ZWQpIHJldHVybjtcbiAgICB0aGlzLmNvcmUuc2hvd1ByZXZpb3VzTW9udGgoKTtcbiAgfVxuXG4gIC8qKiBQYWdlIHRoZSBkYXRlcGlja2VyIGZvcndhcmQgb25lIG1vbnRoLiBOby1vcCB1bmxlc3MgYSBkYXRlIHBpbGwgaXMgYWN0aXZlLiAqL1xuICBzaG93TmV4dE1vbnRoKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzRGVzdHJveWVkKSByZXR1cm47XG4gICAgdGhpcy5jb3JlLnNob3dOZXh0TW9udGgoKTtcbiAgfVxuXG4gIC8vID09PSBMaWZlY3ljbGUgPT09XG5cbiAgLyoqXG4gICAqIEFwcGx5IHJ1bnRpbWUgY2hhbmdlcyB0byBhIHN1YnNldCBvZiBvcHRpb25zLiBFdmVudCBjYWxsYmFja3NcbiAgICogKGBvblN1Ym1pdGAsIGBvbkVycm9yYCwgZXRjLikgY2Fubm90IGJlIHN3YXBwZWQgdGhpcyB3YXkg4oCUIHRoZXkgYXJlXG4gICAqIHJlZ2lzdGVyZWQgb25jZSBhdCBjb25zdHJ1Y3Rpb24gKG1hdGNoZXMgdGhlIFJlYWN0IGhvb2sncyBkZXNpZ24pLiBGb3JcbiAgICogZHluYW1pYyBldmVudCByZWFjdGl2aXR5LCBzdWJzY3JpYmUgdG8gdGhlIGNvcnJlc3BvbmRpbmcgb2JzZXJ2YWJsZVxuICAgKiAoZS5nLiBgdGV4dCRgIGluc3RlYWQgb2YgYG9uQ2hhbmdlYCkuXG4gICAqL1xuICB1cGRhdGUob3B0czogQUlBdXRvY29tcGxldGVDb250cm9sbGVyVXBkYXRlKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNEZXN0cm95ZWQpIHJldHVybjtcbiAgICB0aGlzLmNvcmUudXBkYXRlKG9wdHMpO1xuICAgIGlmIChvcHRzLm9wdGlvbnNQb3NpdGlvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLm9wdGlvbnNQb3NpdGlvbiQubmV4dChvcHRzLm9wdGlvbnNQb3NpdGlvbik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlbGVhc2UgYWxsIHJlc291cmNlcyDigJQgdW5zdWJzY3JpYmVzIGZyb20gdGhlIGNvcmUsIGRlc3Ryb3lzIHRoZSBjb3JlLFxuICAgKiBhbmQgY29tcGxldGVzIHRoZSBpbnRlcm5hbCBzdGF0ZSBzdWJqZWN0LiBTYWZlIHRvIGNhbGwgbXVsdGlwbGUgdGltZXMuXG4gICAqIEFmdGVyIGRlc3RydWN0aW9uLCBhY3Rpb24gbWV0aG9kcyBuby1vcCBzaWxlbnRseS5cbiAgICovXG4gIGRlc3Ryb3koKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNEZXN0cm95ZWQpIHJldHVybjtcbiAgICB0aGlzLmlzRGVzdHJveWVkID0gdHJ1ZTtcbiAgICB0aGlzLnVuc3Vic2NyaWJlQ29yZSgpO1xuICAgIHRoaXMuY29yZS5kZXN0cm95KCk7XG4gICAgdGhpcy5yYXdTdGF0ZSQuY29tcGxldGUoKTtcbiAgfVxufVxuXG4vLyA9PT09PSBQdXJlIGhlbHBlcnMg4oCUIG5vdCBwYXJ0IG9mIHRoZSBwdWJsaWMgc3VyZmFjZSA9PT09PVxuXG4vKipcbiAqIFNoYWxsb3cgYXJyYXkgZXF1YWxpdHkuIFRoZSB2YW5pbGxhIHN0b3JlIHJlYXNzaWducyBhcnJheSBmaWVsZHMgb24gZXZlcnlcbiAqIHdyaXRlIChgc3RvcmUuc2V0KHsgY29tcGxldGVkUGFyYW1zOiBbLi4ucHJldiwgeF0gfSlgKSwgc28gcmVmZXJlbmNlXG4gKiBlcXVhbGl0eSBhbG9uZSB3b3VsZCByZS1lbWl0IGRvd25zdHJlYW0gZXZlbiB3aGVuIHRoZSBjb250ZW50cyBhcmVcbiAqIGlkZW50aWNhbC4gVXNlZCBmb3IgYGNvbXBsZXRlZFBhcmFtcyRgLCBgc3VnZ2VzdGlvbnMkYCwgYHN1Z2dlc3Rpb25QaWxscyRgLFxuICogYW5kIGBzZWdtZW50cyRgLlxuICovXG5mdW5jdGlvbiBhcnJFcTxUPihhOiByZWFkb25seSBUW10sIGI6IHJlYWRvbmx5IFRbXSk6IGJvb2xlYW4ge1xuICBpZiAoYSA9PT0gYikgcmV0dXJuIHRydWU7XG4gIGlmIChhLmxlbmd0aCAhPT0gYi5sZW5ndGgpIHJldHVybiBmYWxzZTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKGFbaV0gIT09IGJbaV0pIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gY29tcHV0ZVVpTG9hZGluZyhzOiBDb3JlU3RhdGUpOiBib29sZWFuIHtcbiAgcmV0dXJuIHMuaXNMb2FkaW5nICYmICFzLmVkaXRpbmdQYXJhbSAmJiAhcy5pblNlbGVjdGlvbkFuaW1hdGlvbjtcbn1cblxuZnVuY3Rpb24gY29tcHV0ZVN0YXRlKHM6IENvcmVTdGF0ZSk6IEFJQXV0b2NvbXBsZXRlQ29udHJvbGxlclN0YXRlIHtcbiAgcmV0dXJuIHtcbiAgICB0ZXh0OiBzLnRleHQsXG4gICAgY29tcGxldGVkUGFyYW1zOiBzLmNvbXBsZXRlZFBhcmFtcyxcbiAgICBza2lwcGVkUGFyYW1zOiBzLnNraXBwZWRQYXJhbXMsXG4gICAgc3VnZ2VzdGlvblBpbGxzOiBzLmFjdGlvbmFibGVTdWdnZXN0aW9ucyxcbiAgICBzZWdtZW50czogcy5zZWdtZW50cyxcbiAgICBuZXdQYXJhbUlkOiBzLm5ld1BhcmFtSWQsXG4gICAgc3VnZ2VzdGlvbnM6IHMuc3VnZ2VzdGlvbnMsXG4gICAgcHJvZHVjdHM6IHMucHJvZHVjdHMsXG4gICAgYWN0aXZlSW5kZXg6IHMuYWN0aXZlRHJvcGRvd25JbmRleCxcbiAgICBpc0xvYWRpbmc6IGNvbXB1dGVVaUxvYWRpbmcocyksXG4gICAgaXNSZWFkeTogcy5pc1JlYWR5LFxuICAgIGlzRm9jdXNlZDogcy5pc0ZvY3VzZWQsXG4gICAgaXNEcm9wZG93bk9wZW46IHMuaXNEcm9wZG93bk9wZW4sXG4gICAgcGxhY2Vob2xkZXJUZXh0OiBzLnBsYWNlaG9sZGVyVGV4dCxcbiAgICBlcnJvcjogcy5lcnJvcixcbiAgICBlZGl0aW5nUGFyYW06IHMuZWRpdGluZ1BhcmFtLFxuICAgIGVkaXRpbmdJZGVudGlmaWVkOiBzLmVkaXRpbmdJZGVudGlmaWVkLFxuICAgIGVkaXRpbmdBbmNob3I6IHMuZWRpdGluZ0FuY2hvcixcbiAgICBjYXJldE9mZnNldDogcy5jYXJldE9mZnNldCxcbiAgfTtcbn1cblxuZnVuY3Rpb24gY29tcHV0ZURyb3Bkb3duKFxuICBzOiBDb3JlU3RhdGUsXG4gIG9wdGlvbnNQb3NpdGlvbjogXCJhYm92ZVwiIHwgXCJiZWxvd1wiLFxuKTogQUlBdXRvY29tcGxldGVEcm9wZG93blN0YXRlIHtcbiAgY29uc3QgZWRpdGluZ1BhcmFtID0gcy5lZGl0aW5nUGFyYW07XG4gIGNvbnN0IGVkaXRpbmdJZGVudGlmaWVkID0gcy5lZGl0aW5nSWRlbnRpZmllZDtcbiAgY29uc3QgYWN0aXZlU3VnZ2VzdGlvbiA9IHMuYWN0aW9uYWJsZVN1Z2dlc3Rpb25zWzBdO1xuICBjb25zdCBkcm9wZG93blBpbGw6IFN1Z2dlc3Rpb24gfCBudWxsID0gZWRpdGluZ1BhcmFtXG4gICAgPyB7XG4gICAgICAgIHR5cGU6IGVkaXRpbmdQYXJhbS5zdWdnZXN0aW9uVHlwZSxcbiAgICAgICAgdGV4dDogZWRpdGluZ1BhcmFtLnN1Z2dlc3Rpb25QbGFjZWhvbGRlcixcbiAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIG9wdGlvbnM6IGVkaXRpbmdQYXJhbS5vcHRpb25zLFxuICAgICAgfVxuICAgIDogZWRpdGluZ0lkZW50aWZpZWRcbiAgICAgID8gLy8gQW5zd2VyaW5nIGEgc3BhbiB0aGUgdXNlciB3cm90ZSB0aGVtc2VsdmVzOiB0aGUgcGlsbCBuYW1lcyB0aGVcbiAgICAgICAgLy8gcGFyYW1ldGVyIHRoZSBzZXJ2ZXIgbWF0Y2hlZCBpdCB0bywgc28gdGhlIGNhbGVuZGFyIGlzbid0IHVubGFiZWxsZWQuXG4gICAgICAgIHtcbiAgICAgICAgICB0eXBlOiBlZGl0aW5nSWRlbnRpZmllZC50eXBlLFxuICAgICAgICAgIHRleHQ6IGlkZW50aWZpZWRQYXJhbUxhYmVsKGVkaXRpbmdJZGVudGlmaWVkLnR5cGUpLFxuICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgIG9wdGlvbnM6IFtdLFxuICAgICAgICB9XG4gICAgICA6IG51bGw7XG4gIGNvbnN0IGRyb3Bkb3duQWN0aXZlUGlsbCA9IGRyb3Bkb3duUGlsbCA/PyBhY3RpdmVTdWdnZXN0aW9uO1xuICBjb25zdCBkcm9wZG93blBpbGxzID0gZHJvcGRvd25QaWxsID8gW2Ryb3Bkb3duUGlsbF0gOiBzLmFjdGlvbmFibGVTdWdnZXN0aW9ucztcbiAgcmV0dXJuIHtcbiAgICBzdWdnZXN0aW9uczogZHJvcGRvd25BY3RpdmVQaWxsID8gW3sgLi4uZHJvcGRvd25BY3RpdmVQaWxsLCBvcHRpb25zOiBzLmZpbHRlcmVkT3B0aW9ucyB9XSA6IFtdLFxuICAgIGFjdGl2ZUluZGV4OiBzLmFjdGl2ZURyb3Bkb3duSW5kZXgsXG4gICAgaXNPcGVuOiBzLmlzRHJvcGRvd25PcGVuLFxuICAgIHBpbGxzOiBkcm9wZG93blBpbGxzLFxuICAgIGlzQWN0aXZlUGlsbFNlbGVjdGVkOiBzLmlzQWN0aXZlUGlsbFNlbGVjdGVkLFxuICAgIGlzTG9hZGluZzogY29tcHV0ZVVpTG9hZGluZyhzKSxcbiAgICBpc0lucHV0RW1wdHk6IHMudGV4dC50cmltKCkubGVuZ3RoID09PSAwLFxuICAgIHByb2R1Y3RzOiBzLnByb2R1Y3RzLFxuICAgIGlzRWRpdGluZzogQm9vbGVhbihlZGl0aW5nUGFyYW0pIHx8IEJvb2xlYW4oZWRpdGluZ0lkZW50aWZpZWQpLFxuICAgIGluU2VsZWN0aW9uQW5pbWF0aW9uOiBzLmluU2VsZWN0aW9uQW5pbWF0aW9uLFxuICAgIC8vIERhdGVwaWNrZXIuIGBzLmZpbHRlcmVkT3B0aW9uc2AgYWJvdmUgYWxyZWFkeSBjYXJyaWVzIHRoZSB2aXNpYmxlXG4gICAgLy8gbW9udGgncyBjZWxscyByYXRoZXIgdGhhbiB0aGUgc3VnZ2VzdGlvbidzIG93biBvcHRpb25zIHdoZW4gdGhpcyBpc1xuICAgIC8vIFwiZGF0ZVwiIOKAlCB0aGUgY29yZSBzd2FwcGVkIHRoZW0gaW4gaXRzIGRlcml2ZSBsYXllciwgc28gdGhlIGRyb3Bkb3duIG9ubHlcbiAgICAvLyBoYXMgdG8ga25vdyB3aGljaCBib2R5IHRvIGRyYXcuXG4gICAgZm9ybWF0VHlwZTogcy5hY3RpdmVGb3JtYXRUeXBlLFxuICAgIGRhdGVWaWV3OiBzLmRhdGVWaWV3LFxuICAgIHNlbGVjdGVkRGF0ZUlzbzogZWRpdGluZ0lkZW50aWZpZWRcbiAgICAgID8gZWRpdGluZ0lkZW50aWZpZWQuaXNvXG4gICAgICA6IHNlbGVjdGVkSXNvRnJvbVRleHQoZWRpdGluZ1BhcmFtPy50ZXh0KSxcbiAgICBvcHRpb25zUG9zaXRpb24sXG4gIH07XG59XG4iXX0=
|
|
@@ -46,6 +46,12 @@ export class DateGridComponent {
|
|
|
46
46
|
isToday(option) {
|
|
47
47
|
return cellIso(option) === isoDate(new Date());
|
|
48
48
|
}
|
|
49
|
+
/** Before today: rendered dimmed, but every bit as pickable as the rest. */
|
|
50
|
+
isPast(option) {
|
|
51
|
+
const iso = cellIso(option);
|
|
52
|
+
// ISO strings order the same way the dates they name do.
|
|
53
|
+
return iso != null && iso < isoDate(new Date());
|
|
54
|
+
}
|
|
49
55
|
isSelected(option) {
|
|
50
56
|
const iso = cellIso(option);
|
|
51
57
|
return iso != null && this.selectedIso != null && iso === this.selectedIso;
|
|
@@ -69,10 +75,10 @@ export class DateGridComponent {
|
|
|
69
75
|
}
|
|
70
76
|
}
|
|
71
77
|
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
|
|
78
|
+
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 <!-- A day already gone by is de-emphasized, not disabled: it renders\n dimmed but stays every bit as pickable as the rest of the month. -->\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--past]=\"isPast(option)\"\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}.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, 28px);font-family:inherit;font-size:var(--aia-date-cell-font-size, 13px);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, 26px);height:var(--aia-date-cell-size, 26px);border-radius:6px}.magicx-aia-date-cell--day{cursor:pointer}.magicx-aia-date-cell--blank{cursor:default}.magicx-aia-date-cell--past{opacity:.35}.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
79
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: DateGridComponent, decorators: [{
|
|
74
80
|
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
|
|
81
|
+
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 <!-- A day already gone by is de-emphasized, not disabled: it renders\n dimmed but stays every bit as pickable as the rest of the month. -->\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--past]=\"isPast(option)\"\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}.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, 28px);font-family:inherit;font-size:var(--aia-date-cell-font-size, 13px);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, 26px);height:var(--aia-date-cell-size, 26px);border-radius:6px}.magicx-aia-date-cell--day{cursor:pointer}.magicx-aia-date-cell--blank{cursor:default}.magicx-aia-date-cell--past{opacity:.35}.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
82
|
}], propDecorators: { options: [{
|
|
77
83
|
type: Input
|
|
78
84
|
}], activeIndex: [{
|
|
@@ -92,4 +98,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
|
|
|
92
98
|
}], nextMonth: [{
|
|
93
99
|
type: Output
|
|
94
100
|
}] } });
|
|
95
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1ncmlkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvaW50ZXJuYWwvZGF0ZS1ncmlkL2RhdGUtZ3JpZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2ludGVybmFsL2RhdGUtZ3JpZC9kYXRlLWdyaWQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBQ0wsTUFBTSxFQUNOLGlCQUFpQixHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQ0wsT0FBTyxFQUNQLE9BQU8sRUFFUCxPQUFPLEVBQ1AsVUFBVSxFQUVWLGNBQWMsR0FDZixNQUFNLHFDQUFxQyxDQUFDOzs7QUFFN0M7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFVSCxNQUFNLE9BQU8saUJBQWlCO0lBVDlCO1FBVUUsdUZBQXVGO1FBQzlFLFlBQU8sR0FBdUIsRUFBRSxDQUFDO1FBQ2pDLGdCQUFXLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDakIsY0FBUyxHQUFHLEVBQUUsQ0FBQztRQUNmLFNBQUksR0FBeUIsSUFBSSxDQUFDO1FBQzNDLHFFQUFxRTtRQUM1RCxnQkFBVyxHQUFrQixJQUFJLENBQUM7UUFFeEIsV0FBTSxHQUFHLElBQUksWUFBWSxFQUFvQixDQUFDO1FBQzlDLGNBQVMsR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO1FBQ3ZDLGtCQUFhLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUN6QyxjQUFTLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUUvQyxhQUFRLEdBQUcsY0FBYyxDQUFDO1FBRW5DLGdFQUFnRTtRQUNoRSxpQkFBWSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBdUNsQixxRUFBcUU7UUFDckUsZ0JBQVcsR0FBRyxDQUFDLEtBQWEsRUFBRSxNQUF3QixFQUFVLEVBQUUsQ0FDaEUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLE9BQU8sS0FBSyxFQUFFLENBQUM7S0FDckM7SUF4Q0MsSUFBSSxVQUFVO1FBQ1osT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDaEQsQ0FBQztJQUVELEtBQUssQ0FBQyxNQUF3QjtRQUM1QixPQUFPLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN6QixDQUFDO0lBRUQsT0FBTyxDQUFDLE1BQXdCO1FBQzlCLE9BQU8sT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLE9BQU8sQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLENBQUM7SUFDakQsQ0FBQztJQUVELFVBQVUsQ0FBQyxNQUF3QjtRQUNqQyxNQUFNLEdBQUcsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDNUIsT0FBTyxHQUFHLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxXQUFXLElBQUksSUFBSSxJQUFJLEdBQUcsS0FBSyxJQUFJLENBQUMsV0FBVyxDQUFDO0lBQzdFLENBQUM7SUFFRCxRQUFRLENBQUMsTUFBd0IsRUFBRSxLQUFhO1FBQzlDLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO1FBQzFCLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3pCLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDZCxJQUFJLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ3pCLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNWLENBQUM7SUFFRCxTQUFTLENBQUMsS0FBb0IsRUFBRSxNQUF3QixFQUFFLEtBQWE7UUFDckUsSUFBSSxLQUFLLENBQUMsR0FBRyxLQUFLLE9BQU8sSUFBSSxLQUFLLENBQUMsR0FBRyxLQUFLLEdBQUcsRUFBRTtZQUM5QyxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDdkIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7U0FDOUI7SUFDSCxDQUFDO0lBRUQsZ0ZBQWdGO0lBQ2hGLFdBQVcsQ0FBQyxLQUFpQjtRQUMzQixLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7SUFDekIsQ0FBQzs7K0dBdERVLGlCQUFpQjttR0FBakIsaUJBQWlCLHNUQzNDOUIsZ3VHQWtGQSx3cUZEN0NZLFlBQVk7NEZBTVgsaUJBQWlCO2tCQVQ3QixTQUFTOytCQUNFLGVBQWUsY0FDYixJQUFJLFdBQ1AsQ0FBQyxZQUFZLENBQUMsbUJBQ04sdUJBQXVCLENBQUMsTUFBTSxpQkFDaEMsaUJBQWlCLENBQUMsSUFBSTs4QkFNNUIsT0FBTztzQkFBZixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBRUcsV0FBVztzQkFBbkIsS0FBSztnQkFFYSxNQUFNO3NCQUF4QixNQUFNO2dCQUNZLFNBQVM7c0JBQTNCLE1BQU07Z0JBQ1ksYUFBYTtzQkFBL0IsTUFBTTtnQkFDWSxTQUFTO3NCQUEzQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vblwiO1xuaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7XG4gIGNlbGxEYXksXG4gIGNlbGxJc28sXG4gIHR5cGUgRGF0ZU1vbnRoVmlldyxcbiAgaXNvRGF0ZSxcbiAgbW9udGhMYWJlbCxcbiAgdHlwZSBTdWdnZXN0aW9uT3B0aW9uLFxuICBXRUVLREFZX0xBQkVMUyxcbn0gZnJvbSBcIkBtYWdpY3gtZW5nL2FpLWF1dG9jb21wbGV0ZS12YW5pbGxhXCI7XG5cbi8qKlxuICogVGhlIGRyb3Bkb3duJ3MgY2FsZW5kYXIgYm9keSwgcmVuZGVyZWQgaW4gcGxhY2Ugb2YgdGhlIG9wdGlvbnMgZ3JpZCB3aGVuIHRoZVxuICogYWN0aXZlIHBhcmFtZXRlciBpcyBhIGRhdGUuIEFuZ3VsYXIgYW5hbG9ndWUgb2YgdmFuaWxsYSdzIGByZW5kZXJEYXRlR3JpZGBcbiAqIGFuZCBSZWFjdCdzIGA8RGF0ZUdyaWQ+YC5cbiAqXG4gKiBUaGUgY2VsbHMgY2FycnkgdGhlIHNhbWUgYCR7bGlzdGJveElkfS1vcHRpb24tJHtpfWAgaWRzLCBgcm9sZT1cIm9wdGlvblwiYCBhbmRcbiAqIGBhcmlhLXNlbGVjdGVkYCB0aGUgb3B0aW9ucyBncmlkIGVtaXRzLCBhbmQgdGhhdCBpcyBsb2FkLWJlYXJpbmcgcmF0aGVyIHRoYW5cbiAqIGNvc21ldGljOiB0aGUga2V5Ym9hcmQgY29udHJvbGxlciBsaXZlcyBpbiB0aGUgdmFuaWxsYSBjb3JlIGZvciBhbGwgdGhyZWVcbiAqIHBhY2thZ2VzLCBuYXZpZ2F0ZXMgYnkgaW5kZXggaW50byBgZmlsdGVyZWRPcHRpb25zYCwgYW5kIGNvbW1pdHMgYnkgY2xpY2tpbmdcbiAqIGAjJHtsaXN0Ym94SWR9LW9wdGlvbi0ke2l9YC4gYGdldEVmZmVjdGl2ZUNvbHVtbnNgIGFsc28gbWVhc3VyZXMgdGhlIGxpdmVcbiAqIGBncmlkLXRlbXBsYXRlLWNvbHVtbnNgIG9mIG9wdGlvbi0wJ3MgcGFyZW50LCB3aGljaCBpcyB3aHkgdGhlIDcgY29sdW1ucyBzaXRcbiAqIG9uIHRoZSBjZWxsIGNvbnRhaW5lciBpdHNlbGYgYW5kIG5vdCBvbiBhbiBhbmNlc3Rvci5cbiAqXG4gKiBAaW50ZXJuYWxcbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiBcImFpYS1kYXRlLWdyaWRcIixcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZV0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICB0ZW1wbGF0ZVVybDogXCIuL2RhdGUtZ3JpZC5jb21wb25lbnQuaHRtbFwiLFxuICBzdHlsZVVybHM6IFtcIi4vZGF0ZS1ncmlkLmNvbXBvbmVudC5jc3NcIl0sXG59KVxuZXhwb3J0IGNsYXNzIERhdGVHcmlkQ29tcG9uZW50IHtcbiAgLyoqIFRoZSB2aXNpYmxlIG1vbnRoJ3MgY2VsbHMuIFRoZXNlIEFSRSBgZmlsdGVyZWRPcHRpb25zYCDigJQgc2VlIGBidWlsZERhdGVPcHRpb25zYC4gKi9cbiAgQElucHV0KCkgb3B0aW9uczogU3VnZ2VzdGlvbk9wdGlvbltdID0gW107XG4gIEBJbnB1dCgpIGFjdGl2ZUluZGV4ID0gLTE7XG4gIEBJbnB1dCgpIGxpc3Rib3hJZCA9IFwiXCI7XG4gIEBJbnB1dCgpIHZpZXc6IERhdGVNb250aFZpZXcgfCBudWxsID0gbnVsbDtcbiAgLyoqIGBZWVlZLU1NLUREYCB0aGUgcGFyYW0gYmVpbmcgcmUtZWRpdGVkIGFscmVhZHkgaG9sZHMsIG9yIG51bGwuICovXG4gIEBJbnB1dCgpIHNlbGVjdGVkSXNvOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuICBAT3V0cHV0KCkgcmVhZG9ubHkgc2VsZWN0ID0gbmV3IEV2ZW50RW1pdHRlcjxTdWdnZXN0aW9uT3B0aW9uPigpO1xuICBAT3V0cHV0KCkgcmVhZG9ubHkgaGlnaGxpZ2h0ID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XG4gIEBPdXRwdXQoKSByZWFkb25seSBwcmV2aW91c01vbnRoID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBAT3V0cHV0KCkgcmVhZG9ubHkgbmV4dE1vbnRoID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gIHJlYWRvbmx5IHdlZWtkYXlzID0gV0VFS0RBWV9MQUJFTFM7XG5cbiAgLyoqIEluZGV4IG9mIHRoZSBjZWxsIHNob3dpbmcgYSA1MDBtcyBwcmVzcyBhbmltYXRpb24sIG9yIC0xLiAqL1xuICBwcmVzc2VkSW5kZXggPSAtMTtcblxuICBnZXQgbW9udGhMYWJlbCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnZpZXcgPyBtb250aExhYmVsKHRoaXMudmlldykgOiBcIlwiO1xuICB9XG5cbiAgZGF5T2Yob3B0aW9uOiBTdWdnZXN0aW9uT3B0aW9uKTogbnVtYmVyIHwgbnVsbCB7XG4gICAgcmV0dXJuIGNlbGxEYXkob3B0aW9uKTtcbiAgfVxuXG4gIGlzVG9kYXkob3B0aW9uOiBTdWdnZXN0aW9uT3B0aW9uKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGNlbGxJc28ob3B0aW9uKSA9PT0gaXNvRGF0ZShuZXcgRGF0ZSgpKTtcbiAgfVxuXG4gIGlzU2VsZWN0ZWQob3B0aW9uOiBTdWdnZXN0aW9uT3B0aW9uKTogYm9vbGVhbiB7XG4gICAgY29uc3QgaXNvID0gY2VsbElzbyhvcHRpb24pO1xuICAgIHJldHVybiBpc28gIT0gbnVsbCAmJiB0aGlzLnNlbGVjdGVkSXNvICE9IG51bGwgJiYgaXNvID09PSB0aGlzLnNlbGVjdGVkSXNvO1xuICB9XG5cbiAgb25TZWxlY3Qob3B0aW9uOiBTdWdnZXN0aW9uT3B0aW9uLCBpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5wcmVzc2VkSW5kZXggPSBpbmRleDtcbiAgICB0aGlzLnNlbGVjdC5lbWl0KG9wdGlvbik7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLnByZXNzZWRJbmRleCA9IC0xO1xuICAgIH0sIDUwMCk7XG4gIH1cblxuICBvbktleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQsIG9wdGlvbjogU3VnZ2VzdGlvbk9wdGlvbiwgaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIGlmIChldmVudC5rZXkgPT09IFwiRW50ZXJcIiB8fCBldmVudC5rZXkgPT09IFwiIFwiKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgdGhpcy5vblNlbGVjdChvcHRpb24sIGluZGV4KTtcbiAgICB9XG4gIH1cblxuICAvKiogS2VlcHMgdGhlIGlucHV0IGZvY3VzZWQsIHdoaWNoIHRoZSBkcm9wZG93bidzIHZpc2liaWxpdHkgZ2F0ZSBkZXBlbmRzIG9uLiAqL1xuICBwcmV2ZW50Qmx1cihldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIH1cblxuICAvLyBQYWRkaW5nIGNlbGxzIGhhdmUgbm8gZGF0ZSBvZiB0aGVpciBvd24sIHNvIHRoZXkga2V5IG9mZiBwb3NpdGlvbi5cbiAgdHJhY2tCeUNlbGwgPSAoaW5kZXg6IG51bWJlciwgb3B0aW9uOiBTdWdnZXN0aW9uT3B0aW9uKTogc3RyaW5nID0+XG4gICAgY2VsbElzbyhvcHRpb24pID8/IGBwYWQtJHtpbmRleH1gO1xufVxuIiwiPGRpdiBjbGFzcz1cIm1hZ2ljeC1haWEtZGF0ZXBpY2tlclwiIGRhdGEtYWlhLWRhdGVwaWNrZXI9XCJcIj5cbiAgPGRpdiBjbGFzcz1cIm1hZ2ljeC1haWEtZGF0ZXBpY2tlci1oZWFkZXJcIj5cbiAgICA8IS0tIHRhYkluZGV4IC0xIGZvciB0aGUgc2FtZSByZWFzb24gdGhlIHNraXAgYnV0dG9uIGlzOiBUYWIgaXMgYWxyZWFkeVxuICAgICAgICAgYm91bmQgdG8gd2Fsa2luZyB0aGUgZHJvcGRvd24ncyBvcHRpb25zLiAtLT5cbiAgICA8YnV0dG9uXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIHRhYmluZGV4PVwiLTFcIlxuICAgICAgY2xhc3M9XCJtYWdpY3gtYWlhLWRhdGVwaWNrZXItbmF2XCJcbiAgICAgIGRhdGEtYWlhLWRhdGUtcHJldj1cIlwiXG4gICAgICBhcmlhLWxhYmVsPVwiUHJldmlvdXMgbW9udGhcIlxuICAgICAgKG1vdXNlZG93bik9XCJwcmV2ZW50Qmx1cigkZXZlbnQpXCJcbiAgICAgIChjbGljayk9XCJwcmV2aW91c01vbnRoLmVtaXQoKVwiXG4gICAgPlxuICAgICAgJmxzYXF1bztcbiAgICA8L2J1dHRvbj5cbiAgICA8c3BhbiBjbGFzcz1cIm1hZ2ljeC1haWEtZGF0ZXBpY2tlci1tb250aFwiIGRhdGEtYWlhLWRhdGUtbW9udGg9XCJcIiBhcmlhLWxpdmU9XCJwb2xpdGVcIj5cbiAgICAgIHt7IG1vbnRoTGFiZWwgfX1cbiAgICA8L3NwYW4+XG4gICAgPGJ1dHRvblxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICB0YWJpbmRleD1cIi0xXCJcbiAgICAgIGNsYXNzPVwibWFnaWN4LWFpYS1kYXRlcGlja2VyLW5hdlwiXG4gICAgICBkYXRhLWFpYS1kYXRlLW5leHQ9XCJcIlxuICAgICAgYXJpYS1sYWJlbD1cIk5leHQgbW9udGhcIlxuICAgICAgKG1vdXNlZG93bik9XCJwcmV2ZW50Qmx1cigkZXZlbnQpXCJcbiAgICAgIChjbGljayk9XCJuZXh0TW9udGguZW1pdCgpXCJcbiAgICA+XG4gICAgICAmcnNhcXVvO1xuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cblxuICA8IS0tIERlY29yYXRpdmU6IGVhY2ggY2VsbCBhbm5vdW5jZXMgaXRzIG93biBmdWxsIGRhdGUsIHNvIHJlcGVhdGluZyB0aGVcbiAgICAgICBjb2x1bW4gbGV0dGVycyB0byBBVCBhZGRzIG5vaXNlIOKAlCBhbmQgdGhlIGR1cGxpY2F0ZSBUL1Mgd291bGQgYmVcbiAgICAgICBtZWFuaW5nbGVzcyByZWFkIGFsb3VkIGFueXdheS4gLS0+XG4gIDxkaXYgY2xhc3M9XCJtYWdpY3gtYWlhLWRhdGVwaWNrZXItd2Vla2RheXNcIiBhcmlhLWhpZGRlbj1cInRydWVcIj5cbiAgICA8c3BhbiBjbGFzcz1cIm1hZ2ljeC1haWEtZGF0ZXBpY2tlci13ZWVrZGF5XCIgKm5nRm9yPVwibGV0IGxhYmVsIG9mIHdlZWtkYXlzXCI+e3sgbGFiZWwgfX08L3NwYW4+XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9XCJtYWdpY3gtYWlhLWRhdGVwaWNrZXItZ3JpZFwiIGRhdGEtYWlhLWRhdGUtZ3JpZD1cIlwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBvcHRpb25zOyB0cmFja0J5OiB0cmFja0J5Q2VsbDsgbGV0IGkgPSBpbmRleFwiPlxuICAgICAgPCEtLSBQYWRkaW5nIGZvciB0aGUgZGF5cyBiZWZvcmUgdGhlIDFzdCAvIGFmdGVyIHRoZSBsYXN0LiBOb24tdGFwcGFibGUsXG4gICAgICAgICAgIHNvIGFycm93IG5hdmlnYXRpb24gc2tpcHMgaXQ7IGhpZGRlbiBmcm9tIEFUIHNvIHRoZSBtb250aCByZWFkcyBhc1xuICAgICAgICAgICBpdHMgb3duIGRheXMgYW5kIG5vdGhpbmcgZWxzZS4gLS0+XG4gICAgICA8ZGl2XG4gICAgICAgICpuZ0lmPVwiZGF5T2Yob3B0aW9uKSA9PT0gbnVsbDsgZWxzZSBkYXlDZWxsXCJcbiAgICAgICAgW2lkXT1cImxpc3Rib3hJZCArICctb3B0aW9uLScgKyBpXCJcbiAgICAgICAgcm9sZT1cIm9wdGlvblwiXG4gICAgICAgIGRhdGEtYWlhLW9wdGlvbj1cIlwiXG4gICAgICAgIGRhdGEtYWlhLWRhdGUtY2VsbD1cIlwiXG4gICAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXG4gICAgICAgIFthdHRyLmFyaWEtc2VsZWN0ZWRdPVwiZmFsc2VcIlxuICAgICAgICB0YWJpbmRleD1cIi0xXCJcbiAgICAgICAgY2xhc3M9XCJtYWdpY3gtYWlhLWRhdGUtY2VsbCBtYWdpY3gtYWlhLWRhdGUtY2VsbC0tYmxhbmtcIlxuICAgICAgPjwvZGl2PlxuXG4gICAgICA8bmctdGVtcGxhdGUgI2RheUNlbGw+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBbaWRdPVwibGlzdGJveElkICsgJy1vcHRpb24tJyArIGlcIlxuICAgICAgICAgIHJvbGU9XCJvcHRpb25cIlxuICAgICAgICAgIGRhdGEtYWlhLW9wdGlvbj1cIlwiXG4gICAgICAgICAgZGF0YS1haWEtZGF0ZS1jZWxsPVwiXCJcbiAgICAgICAgICBbYXR0ci5hcmlhLXNlbGVjdGVkXT1cImkgPT09IGFjdGl2ZUluZGV4XCJcbiAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIm9wdGlvbi50ZXh0XCJcbiAgICAgICAgICB0YWJpbmRleD1cIjBcIlxuICAgICAgICAgIGNsYXNzPVwibWFnaWN4LWFpYS1kYXRlLWNlbGwgbWFnaWN4LWFpYS1kYXRlLWNlbGwtLWRheVwiXG4gICAgICAgICAgW2NsYXNzLm1hZ2ljeC1haWEtZGF0ZS1jZWxsLS1oaWdobGlnaHRlZF09XCJpID09PSBhY3RpdmVJbmRleFwiXG4gICAgICAgICAgW2NsYXNzLm1hZ2ljeC1haWEtZGF0ZS1jZWxsLS10b2RheV09XCJpc1RvZGF5KG9wdGlvbilcIlxuICAgICAgICAgIFtjbGFzcy5tYWdpY3gtYWlhLWRhdGUtY2VsbC0tc2VsZWN0ZWRdPVwiaXNTZWxlY3RlZChvcHRpb24pXCJcbiAgICAgICAgICBbY2xhc3MubWFnaWN4LWFpYS1kYXRlLWNlbGwtLXByZXNzZWRdPVwiaSA9PT0gcHJlc3NlZEluZGV4XCJcbiAgICAgICAgICAoY2xpY2spPVwib25TZWxlY3Qob3B0aW9uLCBpKVwiXG4gICAgICAgICAgKGtleWRvd24pPVwib25LZXlEb3duKCRldmVudCwgb3B0aW9uLCBpKVwiXG4gICAgICAgICAgKG1vdXNlZW50ZXIpPVwiaGlnaGxpZ2h0LmVtaXQoaSlcIlxuICAgICAgICA+XG4gICAgICAgICAgPCEtLSBUaGUgY2VsbCBwYWludHMgdGhlIGRheSBudW1iZXI7IGBvcHRpb24udGV4dGAgaXMgdGhlIGZ1bGxcbiAgICAgICAgICAgICAgIGNvbW1pdHRlZCB2YWx1ZSAoXCJNYXJjaCAyMyAyMDI2XCIpIGFuZCBpcyB3aGF0IEFUIGFubm91bmNlcyxcbiAgICAgICAgICAgICAgIHNpbmNlIHRoYXQgaXMgd2hhdCBzZWxlY3RpbmcgaXQgcHV0cyBpbiB0aGUgaW5wdXQuIC0tPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWFnaWN4LWFpYS1kYXRlLWNlbGwtbnVtYmVyXCI+e3sgZGF5T2Yob3B0aW9uKSB9fTwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
|
|
101
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1ncmlkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvaW50ZXJuYWwvZGF0ZS1ncmlkL2RhdGUtZ3JpZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2ludGVybmFsL2RhdGUtZ3JpZC9kYXRlLWdyaWQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBQ0wsTUFBTSxFQUNOLGlCQUFpQixHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQ0wsT0FBTyxFQUNQLE9BQU8sRUFFUCxPQUFPLEVBQ1AsVUFBVSxFQUVWLGNBQWMsR0FDZixNQUFNLHFDQUFxQyxDQUFDOzs7QUFFN0M7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFVSCxNQUFNLE9BQU8saUJBQWlCO0lBVDlCO1FBVUUsdUZBQXVGO1FBQzlFLFlBQU8sR0FBdUIsRUFBRSxDQUFDO1FBQ2pDLGdCQUFXLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDakIsY0FBUyxHQUFHLEVBQUUsQ0FBQztRQUNmLFNBQUksR0FBeUIsSUFBSSxDQUFDO1FBQzNDLHFFQUFxRTtRQUM1RCxnQkFBVyxHQUFrQixJQUFJLENBQUM7UUFFeEIsV0FBTSxHQUFHLElBQUksWUFBWSxFQUFvQixDQUFDO1FBQzlDLGNBQVMsR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO1FBQ3ZDLGtCQUFhLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUN6QyxjQUFTLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUUvQyxhQUFRLEdBQUcsY0FBYyxDQUFDO1FBRW5DLGdFQUFnRTtRQUNoRSxpQkFBWSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBOENsQixxRUFBcUU7UUFDckUsZ0JBQVcsR0FBRyxDQUFDLEtBQWEsRUFBRSxNQUF3QixFQUFVLEVBQUUsQ0FDaEUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLE9BQU8sS0FBSyxFQUFFLENBQUM7S0FDckM7SUEvQ0MsSUFBSSxVQUFVO1FBQ1osT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDaEQsQ0FBQztJQUVELEtBQUssQ0FBQyxNQUF3QjtRQUM1QixPQUFPLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN6QixDQUFDO0lBRUQsT0FBTyxDQUFDLE1BQXdCO1FBQzlCLE9BQU8sT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLE9BQU8sQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLENBQUM7SUFDakQsQ0FBQztJQUVELDRFQUE0RTtJQUM1RSxNQUFNLENBQUMsTUFBd0I7UUFDN0IsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzVCLHlEQUF5RDtRQUN6RCxPQUFPLEdBQUcsSUFBSSxJQUFJLElBQUksR0FBRyxHQUFHLE9BQU8sQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUVELFVBQVUsQ0FBQyxNQUF3QjtRQUNqQyxNQUFNLEdBQUcsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDNUIsT0FBTyxHQUFHLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxXQUFXLElBQUksSUFBSSxJQUFJLEdBQUcsS0FBSyxJQUFJLENBQUMsV0FBVyxDQUFDO0lBQzdFLENBQUM7SUFFRCxRQUFRLENBQUMsTUFBd0IsRUFBRSxLQUFhO1FBQzlDLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO1FBQzFCLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3pCLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDZCxJQUFJLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ3pCLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNWLENBQUM7SUFFRCxTQUFTLENBQUMsS0FBb0IsRUFBRSxNQUF3QixFQUFFLEtBQWE7UUFDckUsSUFBSSxLQUFLLENBQUMsR0FBRyxLQUFLLE9BQU8sSUFBSSxLQUFLLENBQUMsR0FBRyxLQUFLLEdBQUcsRUFBRTtZQUM5QyxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDdkIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7U0FDOUI7SUFDSCxDQUFDO0lBRUQsZ0ZBQWdGO0lBQ2hGLFdBQVcsQ0FBQyxLQUFpQjtRQUMzQixLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7SUFDekIsQ0FBQzs7K0dBN0RVLGlCQUFpQjttR0FBakIsaUJBQWlCLHNUQzNDOUIsbThHQXFGQSw0c0ZEaERZLFlBQVk7NEZBTVgsaUJBQWlCO2tCQVQ3QixTQUFTOytCQUNFLGVBQWUsY0FDYixJQUFJLFdBQ1AsQ0FBQyxZQUFZLENBQUMsbUJBQ04sdUJBQXVCLENBQUMsTUFBTSxpQkFDaEMsaUJBQWlCLENBQUMsSUFBSTs4QkFNNUIsT0FBTztzQkFBZixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBRUcsV0FBVztzQkFBbkIsS0FBSztnQkFFYSxNQUFNO3NCQUF4QixNQUFNO2dCQUNZLFNBQVM7c0JBQTNCLE1BQU07Z0JBQ1ksYUFBYTtzQkFBL0IsTUFBTTtnQkFDWSxTQUFTO3NCQUEzQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vblwiO1xuaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7XG4gIGNlbGxEYXksXG4gIGNlbGxJc28sXG4gIHR5cGUgRGF0ZU1vbnRoVmlldyxcbiAgaXNvRGF0ZSxcbiAgbW9udGhMYWJlbCxcbiAgdHlwZSBTdWdnZXN0aW9uT3B0aW9uLFxuICBXRUVLREFZX0xBQkVMUyxcbn0gZnJvbSBcIkBtYWdpY3gtZW5nL2FpLWF1dG9jb21wbGV0ZS12YW5pbGxhXCI7XG5cbi8qKlxuICogVGhlIGRyb3Bkb3duJ3MgY2FsZW5kYXIgYm9keSwgcmVuZGVyZWQgaW4gcGxhY2Ugb2YgdGhlIG9wdGlvbnMgZ3JpZCB3aGVuIHRoZVxuICogYWN0aXZlIHBhcmFtZXRlciBpcyBhIGRhdGUuIEFuZ3VsYXIgYW5hbG9ndWUgb2YgdmFuaWxsYSdzIGByZW5kZXJEYXRlR3JpZGBcbiAqIGFuZCBSZWFjdCdzIGA8RGF0ZUdyaWQ+YC5cbiAqXG4gKiBUaGUgY2VsbHMgY2FycnkgdGhlIHNhbWUgYCR7bGlzdGJveElkfS1vcHRpb24tJHtpfWAgaWRzLCBgcm9sZT1cIm9wdGlvblwiYCBhbmRcbiAqIGBhcmlhLXNlbGVjdGVkYCB0aGUgb3B0aW9ucyBncmlkIGVtaXRzLCBhbmQgdGhhdCBpcyBsb2FkLWJlYXJpbmcgcmF0aGVyIHRoYW5cbiAqIGNvc21ldGljOiB0aGUga2V5Ym9hcmQgY29udHJvbGxlciBsaXZlcyBpbiB0aGUgdmFuaWxsYSBjb3JlIGZvciBhbGwgdGhyZWVcbiAqIHBhY2thZ2VzLCBuYXZpZ2F0ZXMgYnkgaW5kZXggaW50byBgZmlsdGVyZWRPcHRpb25zYCwgYW5kIGNvbW1pdHMgYnkgY2xpY2tpbmdcbiAqIGAjJHtsaXN0Ym94SWR9LW9wdGlvbi0ke2l9YC4gYGdldEVmZmVjdGl2ZUNvbHVtbnNgIGFsc28gbWVhc3VyZXMgdGhlIGxpdmVcbiAqIGBncmlkLXRlbXBsYXRlLWNvbHVtbnNgIG9mIG9wdGlvbi0wJ3MgcGFyZW50LCB3aGljaCBpcyB3aHkgdGhlIDcgY29sdW1ucyBzaXRcbiAqIG9uIHRoZSBjZWxsIGNvbnRhaW5lciBpdHNlbGYgYW5kIG5vdCBvbiBhbiBhbmNlc3Rvci5cbiAqXG4gKiBAaW50ZXJuYWxcbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiBcImFpYS1kYXRlLWdyaWRcIixcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZV0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICB0ZW1wbGF0ZVVybDogXCIuL2RhdGUtZ3JpZC5jb21wb25lbnQuaHRtbFwiLFxuICBzdHlsZVVybHM6IFtcIi4vZGF0ZS1ncmlkLmNvbXBvbmVudC5jc3NcIl0sXG59KVxuZXhwb3J0IGNsYXNzIERhdGVHcmlkQ29tcG9uZW50IHtcbiAgLyoqIFRoZSB2aXNpYmxlIG1vbnRoJ3MgY2VsbHMuIFRoZXNlIEFSRSBgZmlsdGVyZWRPcHRpb25zYCDigJQgc2VlIGBidWlsZERhdGVPcHRpb25zYC4gKi9cbiAgQElucHV0KCkgb3B0aW9uczogU3VnZ2VzdGlvbk9wdGlvbltdID0gW107XG4gIEBJbnB1dCgpIGFjdGl2ZUluZGV4ID0gLTE7XG4gIEBJbnB1dCgpIGxpc3Rib3hJZCA9IFwiXCI7XG4gIEBJbnB1dCgpIHZpZXc6IERhdGVNb250aFZpZXcgfCBudWxsID0gbnVsbDtcbiAgLyoqIGBZWVlZLU1NLUREYCB0aGUgcGFyYW0gYmVpbmcgcmUtZWRpdGVkIGFscmVhZHkgaG9sZHMsIG9yIG51bGwuICovXG4gIEBJbnB1dCgpIHNlbGVjdGVkSXNvOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuICBAT3V0cHV0KCkgcmVhZG9ubHkgc2VsZWN0ID0gbmV3IEV2ZW50RW1pdHRlcjxTdWdnZXN0aW9uT3B0aW9uPigpO1xuICBAT3V0cHV0KCkgcmVhZG9ubHkgaGlnaGxpZ2h0ID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XG4gIEBPdXRwdXQoKSByZWFkb25seSBwcmV2aW91c01vbnRoID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBAT3V0cHV0KCkgcmVhZG9ubHkgbmV4dE1vbnRoID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gIHJlYWRvbmx5IHdlZWtkYXlzID0gV0VFS0RBWV9MQUJFTFM7XG5cbiAgLyoqIEluZGV4IG9mIHRoZSBjZWxsIHNob3dpbmcgYSA1MDBtcyBwcmVzcyBhbmltYXRpb24sIG9yIC0xLiAqL1xuICBwcmVzc2VkSW5kZXggPSAtMTtcblxuICBnZXQgbW9udGhMYWJlbCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnZpZXcgPyBtb250aExhYmVsKHRoaXMudmlldykgOiBcIlwiO1xuICB9XG5cbiAgZGF5T2Yob3B0aW9uOiBTdWdnZXN0aW9uT3B0aW9uKTogbnVtYmVyIHwgbnVsbCB7XG4gICAgcmV0dXJuIGNlbGxEYXkob3B0aW9uKTtcbiAgfVxuXG4gIGlzVG9kYXkob3B0aW9uOiBTdWdnZXN0aW9uT3B0aW9uKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGNlbGxJc28ob3B0aW9uKSA9PT0gaXNvRGF0ZShuZXcgRGF0ZSgpKTtcbiAgfVxuXG4gIC8qKiBCZWZvcmUgdG9kYXk6IHJlbmRlcmVkIGRpbW1lZCwgYnV0IGV2ZXJ5IGJpdCBhcyBwaWNrYWJsZSBhcyB0aGUgcmVzdC4gKi9cbiAgaXNQYXN0KG9wdGlvbjogU3VnZ2VzdGlvbk9wdGlvbik6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGlzbyA9IGNlbGxJc28ob3B0aW9uKTtcbiAgICAvLyBJU08gc3RyaW5ncyBvcmRlciB0aGUgc2FtZSB3YXkgdGhlIGRhdGVzIHRoZXkgbmFtZSBkby5cbiAgICByZXR1cm4gaXNvICE9IG51bGwgJiYgaXNvIDwgaXNvRGF0ZShuZXcgRGF0ZSgpKTtcbiAgfVxuXG4gIGlzU2VsZWN0ZWQob3B0aW9uOiBTdWdnZXN0aW9uT3B0aW9uKTogYm9vbGVhbiB7XG4gICAgY29uc3QgaXNvID0gY2VsbElzbyhvcHRpb24pO1xuICAgIHJldHVybiBpc28gIT0gbnVsbCAmJiB0aGlzLnNlbGVjdGVkSXNvICE9IG51bGwgJiYgaXNvID09PSB0aGlzLnNlbGVjdGVkSXNvO1xuICB9XG5cbiAgb25TZWxlY3Qob3B0aW9uOiBTdWdnZXN0aW9uT3B0aW9uLCBpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5wcmVzc2VkSW5kZXggPSBpbmRleDtcbiAgICB0aGlzLnNlbGVjdC5lbWl0KG9wdGlvbik7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLnByZXNzZWRJbmRleCA9IC0xO1xuICAgIH0sIDUwMCk7XG4gIH1cblxuICBvbktleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQsIG9wdGlvbjogU3VnZ2VzdGlvbk9wdGlvbiwgaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIGlmIChldmVudC5rZXkgPT09IFwiRW50ZXJcIiB8fCBldmVudC5rZXkgPT09IFwiIFwiKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgdGhpcy5vblNlbGVjdChvcHRpb24sIGluZGV4KTtcbiAgICB9XG4gIH1cblxuICAvKiogS2VlcHMgdGhlIGlucHV0IGZvY3VzZWQsIHdoaWNoIHRoZSBkcm9wZG93bidzIHZpc2liaWxpdHkgZ2F0ZSBkZXBlbmRzIG9uLiAqL1xuICBwcmV2ZW50Qmx1cihldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIH1cblxuICAvLyBQYWRkaW5nIGNlbGxzIGhhdmUgbm8gZGF0ZSBvZiB0aGVpciBvd24sIHNvIHRoZXkga2V5IG9mZiBwb3NpdGlvbi5cbiAgdHJhY2tCeUNlbGwgPSAoaW5kZXg6IG51bWJlciwgb3B0aW9uOiBTdWdnZXN0aW9uT3B0aW9uKTogc3RyaW5nID0+XG4gICAgY2VsbElzbyhvcHRpb24pID8/IGBwYWQtJHtpbmRleH1gO1xufVxuIiwiPGRpdiBjbGFzcz1cIm1hZ2ljeC1haWEtZGF0ZXBpY2tlclwiIGRhdGEtYWlhLWRhdGVwaWNrZXI9XCJcIj5cbiAgPGRpdiBjbGFzcz1cIm1hZ2ljeC1haWEtZGF0ZXBpY2tlci1oZWFkZXJcIj5cbiAgICA8IS0tIHRhYkluZGV4IC0xIGZvciB0aGUgc2FtZSByZWFzb24gdGhlIHNraXAgYnV0dG9uIGlzOiBUYWIgaXMgYWxyZWFkeVxuICAgICAgICAgYm91bmQgdG8gd2Fsa2luZyB0aGUgZHJvcGRvd24ncyBvcHRpb25zLiAtLT5cbiAgICA8YnV0dG9uXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIHRhYmluZGV4PVwiLTFcIlxuICAgICAgY2xhc3M9XCJtYWdpY3gtYWlhLWRhdGVwaWNrZXItbmF2XCJcbiAgICAgIGRhdGEtYWlhLWRhdGUtcHJldj1cIlwiXG4gICAgICBhcmlhLWxhYmVsPVwiUHJldmlvdXMgbW9udGhcIlxuICAgICAgKG1vdXNlZG93bik9XCJwcmV2ZW50Qmx1cigkZXZlbnQpXCJcbiAgICAgIChjbGljayk9XCJwcmV2aW91c01vbnRoLmVtaXQoKVwiXG4gICAgPlxuICAgICAgJmxzYXF1bztcbiAgICA8L2J1dHRvbj5cbiAgICA8c3BhbiBjbGFzcz1cIm1hZ2ljeC1haWEtZGF0ZXBpY2tlci1tb250aFwiIGRhdGEtYWlhLWRhdGUtbW9udGg9XCJcIiBhcmlhLWxpdmU9XCJwb2xpdGVcIj5cbiAgICAgIHt7IG1vbnRoTGFiZWwgfX1cbiAgICA8L3NwYW4+XG4gICAgPGJ1dHRvblxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICB0YWJpbmRleD1cIi0xXCJcbiAgICAgIGNsYXNzPVwibWFnaWN4LWFpYS1kYXRlcGlja2VyLW5hdlwiXG4gICAgICBkYXRhLWFpYS1kYXRlLW5leHQ9XCJcIlxuICAgICAgYXJpYS1sYWJlbD1cIk5leHQgbW9udGhcIlxuICAgICAgKG1vdXNlZG93bik9XCJwcmV2ZW50Qmx1cigkZXZlbnQpXCJcbiAgICAgIChjbGljayk9XCJuZXh0TW9udGguZW1pdCgpXCJcbiAgICA+XG4gICAgICAmcnNhcXVvO1xuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cblxuICA8IS0tIERlY29yYXRpdmU6IGVhY2ggY2VsbCBhbm5vdW5jZXMgaXRzIG93biBmdWxsIGRhdGUsIHNvIHJlcGVhdGluZyB0aGVcbiAgICAgICBjb2x1bW4gbGV0dGVycyB0byBBVCBhZGRzIG5vaXNlIOKAlCBhbmQgdGhlIGR1cGxpY2F0ZSBUL1Mgd291bGQgYmVcbiAgICAgICBtZWFuaW5nbGVzcyByZWFkIGFsb3VkIGFueXdheS4gLS0+XG4gIDxkaXYgY2xhc3M9XCJtYWdpY3gtYWlhLWRhdGVwaWNrZXItd2Vla2RheXNcIiBhcmlhLWhpZGRlbj1cInRydWVcIj5cbiAgICA8c3BhbiBjbGFzcz1cIm1hZ2ljeC1haWEtZGF0ZXBpY2tlci13ZWVrZGF5XCIgKm5nRm9yPVwibGV0IGxhYmVsIG9mIHdlZWtkYXlzXCI+e3sgbGFiZWwgfX08L3NwYW4+XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9XCJtYWdpY3gtYWlhLWRhdGVwaWNrZXItZ3JpZFwiIGRhdGEtYWlhLWRhdGUtZ3JpZD1cIlwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBvcHRpb25zOyB0cmFja0J5OiB0cmFja0J5Q2VsbDsgbGV0IGkgPSBpbmRleFwiPlxuICAgICAgPCEtLSBQYWRkaW5nIGZvciB0aGUgZGF5cyBiZWZvcmUgdGhlIDFzdCAvIGFmdGVyIHRoZSBsYXN0LiBOb24tdGFwcGFibGUsXG4gICAgICAgICAgIHNvIGFycm93IG5hdmlnYXRpb24gc2tpcHMgaXQ7IGhpZGRlbiBmcm9tIEFUIHNvIHRoZSBtb250aCByZWFkcyBhc1xuICAgICAgICAgICBpdHMgb3duIGRheXMgYW5kIG5vdGhpbmcgZWxzZS4gLS0+XG4gICAgICA8ZGl2XG4gICAgICAgICpuZ0lmPVwiZGF5T2Yob3B0aW9uKSA9PT0gbnVsbDsgZWxzZSBkYXlDZWxsXCJcbiAgICAgICAgW2lkXT1cImxpc3Rib3hJZCArICctb3B0aW9uLScgKyBpXCJcbiAgICAgICAgcm9sZT1cIm9wdGlvblwiXG4gICAgICAgIGRhdGEtYWlhLW9wdGlvbj1cIlwiXG4gICAgICAgIGRhdGEtYWlhLWRhdGUtY2VsbD1cIlwiXG4gICAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXG4gICAgICAgIFthdHRyLmFyaWEtc2VsZWN0ZWRdPVwiZmFsc2VcIlxuICAgICAgICB0YWJpbmRleD1cIi0xXCJcbiAgICAgICAgY2xhc3M9XCJtYWdpY3gtYWlhLWRhdGUtY2VsbCBtYWdpY3gtYWlhLWRhdGUtY2VsbC0tYmxhbmtcIlxuICAgICAgPjwvZGl2PlxuXG4gICAgICA8bmctdGVtcGxhdGUgI2RheUNlbGw+XG4gICAgICAgIDwhLS0gQSBkYXkgYWxyZWFkeSBnb25lIGJ5IGlzIGRlLWVtcGhhc2l6ZWQsIG5vdCBkaXNhYmxlZDogaXQgcmVuZGVyc1xuICAgICAgICAgICAgIGRpbW1lZCBidXQgc3RheXMgZXZlcnkgYml0IGFzIHBpY2thYmxlIGFzIHRoZSByZXN0IG9mIHRoZSBtb250aC4gLS0+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBbaWRdPVwibGlzdGJveElkICsgJy1vcHRpb24tJyArIGlcIlxuICAgICAgICAgIHJvbGU9XCJvcHRpb25cIlxuICAgICAgICAgIGRhdGEtYWlhLW9wdGlvbj1cIlwiXG4gICAgICAgICAgZGF0YS1haWEtZGF0ZS1jZWxsPVwiXCJcbiAgICAgICAgICBbYXR0ci5hcmlhLXNlbGVjdGVkXT1cImkgPT09IGFjdGl2ZUluZGV4XCJcbiAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIm9wdGlvbi50ZXh0XCJcbiAgICAgICAgICB0YWJpbmRleD1cIjBcIlxuICAgICAgICAgIGNsYXNzPVwibWFnaWN4LWFpYS1kYXRlLWNlbGwgbWFnaWN4LWFpYS1kYXRlLWNlbGwtLWRheVwiXG4gICAgICAgICAgW2NsYXNzLm1hZ2ljeC1haWEtZGF0ZS1jZWxsLS1wYXN0XT1cImlzUGFzdChvcHRpb24pXCJcbiAgICAgICAgICBbY2xhc3MubWFnaWN4LWFpYS1kYXRlLWNlbGwtLWhpZ2hsaWdodGVkXT1cImkgPT09IGFjdGl2ZUluZGV4XCJcbiAgICAgICAgICBbY2xhc3MubWFnaWN4LWFpYS1kYXRlLWNlbGwtLXRvZGF5XT1cImlzVG9kYXkob3B0aW9uKVwiXG4gICAgICAgICAgW2NsYXNzLm1hZ2ljeC1haWEtZGF0ZS1jZWxsLS1zZWxlY3RlZF09XCJpc1NlbGVjdGVkKG9wdGlvbilcIlxuICAgICAgICAgIFtjbGFzcy5tYWdpY3gtYWlhLWRhdGUtY2VsbC0tcHJlc3NlZF09XCJpID09PSBwcmVzc2VkSW5kZXhcIlxuICAgICAgICAgIChjbGljayk9XCJvblNlbGVjdChvcHRpb24sIGkpXCJcbiAgICAgICAgICAoa2V5ZG93bik9XCJvbktleURvd24oJGV2ZW50LCBvcHRpb24sIGkpXCJcbiAgICAgICAgICAobW91c2VlbnRlcik9XCJoaWdobGlnaHQuZW1pdChpKVwiXG4gICAgICAgID5cbiAgICAgICAgICA8IS0tIFRoZSBjZWxsIHBhaW50cyB0aGUgZGF5IG51bWJlcjsgYG9wdGlvbi50ZXh0YCBpcyB0aGUgZnVsbFxuICAgICAgICAgICAgICAgY29tbWl0dGVkIHZhbHVlIChcIk1hcmNoIDIzIDIwMjZcIikgYW5kIGlzIHdoYXQgQVQgYW5ub3VuY2VzLFxuICAgICAgICAgICAgICAgc2luY2UgdGhhdCBpcyB3aGF0IHNlbGVjdGluZyBpdCBwdXRzIGluIHRoZSBpbnB1dC4gLS0+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYWdpY3gtYWlhLWRhdGUtY2VsbC1udW1iZXJcIj57eyBkYXlPZihvcHRpb24pIH19PC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
|
|
@@ -20,9 +20,11 @@ export class GridComponent {
|
|
|
20
20
|
/**
|
|
21
21
|
* Explicit column template overrides the intrinsic auto-fit (inline wins).
|
|
22
22
|
* The track string is built by the core so all three packages emit the same
|
|
23
|
-
* one.
|
|
23
|
+
* one; a measured template (the two-column split) wins over the count.
|
|
24
24
|
*/
|
|
25
25
|
get templateColumns() {
|
|
26
|
+
if (this.template)
|
|
27
|
+
return this.template;
|
|
26
28
|
return this.cols ? optionsGridTemplateColumns(this.cols) : null;
|
|
27
29
|
}
|
|
28
30
|
/**
|
|
@@ -40,10 +42,10 @@ export class GridComponent {
|
|
|
40
42
|
}
|
|
41
43
|
}
|
|
42
44
|
GridComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: GridComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
43
|
-
GridComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: GridComponent, isStandalone: true, selector: "aia-grid", inputs: { min: "min", max: "max", gap: "gap", scroll: "scroll", maxHeight: "maxHeight", scrollResetKey: "scrollResetKey", cols: "cols" }, viewQueries: [{ propertyName: "gridRef", first: true, predicate: ["grid"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div\n #grid\n class=\"aia-grid\"\n [attr.data-scroll]=\"scroll ? '' : null\"\n [style.--aia-grid-min]=\"min\"\n [style.--aia-grid-max]=\"max\"\n [style.--aia-grid-gap]=\"gap\"\n [style.--aia-grid-max-height]=\"maxHeight\"\n [style.grid-template-columns]=\"templateColumns\"\n>\n <ng-content></ng-content>\n</div>\n", styles: ["aia-grid{display:contents}@layer layout{.aia-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(var(--aia-grid-min),100%),var(--aia-grid-max, 1fr)));gap:var(--aia-grid-gap, 0)}.aia-grid[data-scroll]{grid-auto-rows:min-content;align-content:start;justify-content:start;max-height:var(--aia-grid-max-height, 120px);overflow-y:auto;scrollbar-width:thin;scrollbar-color:var(--aia-scrollbar-thumb, rgba(0, 0, 0, .3)) transparent}.aia-grid[data-scroll]::-webkit-scrollbar{width:6px}.aia-grid[data-scroll]::-webkit-scrollbar-track{background:transparent}.aia-grid[data-scroll]::-webkit-scrollbar-thumb{background:var(--aia-scrollbar-thumb, rgba(0, 0, 0, .3));border-radius:3px}}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
45
|
+
GridComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: GridComponent, isStandalone: true, selector: "aia-grid", inputs: { min: "min", max: "max", gap: "gap", scroll: "scroll", maxHeight: "maxHeight", scrollResetKey: "scrollResetKey", cols: "cols", template: "template", group: "group" }, viewQueries: [{ propertyName: "gridRef", first: true, predicate: ["grid"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div\n #grid\n class=\"aia-grid\"\n [attr.data-scroll]=\"scroll ? '' : null\"\n [attr.data-aia-group]=\"group ?? null\"\n [style.--aia-grid-min]=\"min\"\n [style.--aia-grid-max]=\"max\"\n [style.--aia-grid-gap]=\"gap\"\n [style.--aia-grid-max-height]=\"maxHeight\"\n [style.grid-template-columns]=\"templateColumns\"\n>\n <ng-content></ng-content>\n</div>\n", styles: ["aia-grid{display:contents}@layer layout{.aia-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(var(--aia-grid-min),100%),var(--aia-grid-max, 1fr)));gap:var(--aia-grid-gap, 0)}.aia-grid[data-scroll]{grid-auto-rows:min-content;align-content:start;justify-content:start;max-height:var(--aia-grid-max-height, 120px);overflow-y:auto;scrollbar-width:thin;scrollbar-color:var(--aia-scrollbar-thumb, rgba(0, 0, 0, .3)) transparent}.aia-grid[data-scroll]::-webkit-scrollbar{width:6px}.aia-grid[data-scroll]::-webkit-scrollbar-track{background:transparent}.aia-grid[data-scroll]::-webkit-scrollbar-thumb{background:var(--aia-scrollbar-thumb, rgba(0, 0, 0, .3));border-radius:3px}}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
44
46
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: GridComponent, decorators: [{
|
|
45
47
|
type: Component,
|
|
46
|
-
args: [{ selector: "aia-grid", standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: "<div\n #grid\n class=\"aia-grid\"\n [attr.data-scroll]=\"scroll ? '' : null\"\n [style.--aia-grid-min]=\"min\"\n [style.--aia-grid-max]=\"max\"\n [style.--aia-grid-gap]=\"gap\"\n [style.--aia-grid-max-height]=\"maxHeight\"\n [style.grid-template-columns]=\"templateColumns\"\n>\n <ng-content></ng-content>\n</div>\n", styles: ["aia-grid{display:contents}@layer layout{.aia-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(var(--aia-grid-min),100%),var(--aia-grid-max, 1fr)));gap:var(--aia-grid-gap, 0)}.aia-grid[data-scroll]{grid-auto-rows:min-content;align-content:start;justify-content:start;max-height:var(--aia-grid-max-height, 120px);overflow-y:auto;scrollbar-width:thin;scrollbar-color:var(--aia-scrollbar-thumb, rgba(0, 0, 0, .3)) transparent}.aia-grid[data-scroll]::-webkit-scrollbar{width:6px}.aia-grid[data-scroll]::-webkit-scrollbar-track{background:transparent}.aia-grid[data-scroll]::-webkit-scrollbar-thumb{background:var(--aia-scrollbar-thumb, rgba(0, 0, 0, .3));border-radius:3px}}\n"] }]
|
|
48
|
+
args: [{ selector: "aia-grid", standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: "<div\n #grid\n class=\"aia-grid\"\n [attr.data-scroll]=\"scroll ? '' : null\"\n [attr.data-aia-group]=\"group ?? null\"\n [style.--aia-grid-min]=\"min\"\n [style.--aia-grid-max]=\"max\"\n [style.--aia-grid-gap]=\"gap\"\n [style.--aia-grid-max-height]=\"maxHeight\"\n [style.grid-template-columns]=\"templateColumns\"\n>\n <ng-content></ng-content>\n</div>\n", styles: ["aia-grid{display:contents}@layer layout{.aia-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(var(--aia-grid-min),100%),var(--aia-grid-max, 1fr)));gap:var(--aia-grid-gap, 0)}.aia-grid[data-scroll]{grid-auto-rows:min-content;align-content:start;justify-content:start;max-height:var(--aia-grid-max-height, 120px);overflow-y:auto;scrollbar-width:thin;scrollbar-color:var(--aia-scrollbar-thumb, rgba(0, 0, 0, .3)) transparent}.aia-grid[data-scroll]::-webkit-scrollbar{width:6px}.aia-grid[data-scroll]::-webkit-scrollbar-track{background:transparent}.aia-grid[data-scroll]::-webkit-scrollbar-thumb{background:var(--aia-scrollbar-thumb, rgba(0, 0, 0, .3));border-radius:3px}}\n"] }]
|
|
47
49
|
}], propDecorators: { min: [{
|
|
48
50
|
type: Input
|
|
49
51
|
}], max: [{
|
|
@@ -58,8 +60,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
|
|
|
58
60
|
type: Input
|
|
59
61
|
}], cols: [{
|
|
60
62
|
type: Input
|
|
63
|
+
}], template: [{
|
|
64
|
+
type: Input
|
|
65
|
+
}], group: [{
|
|
66
|
+
type: Input
|
|
61
67
|
}], gridRef: [{
|
|
62
68
|
type: ViewChild,
|
|
63
69
|
args: ["grid", { static: false }]
|
|
64
70
|
}] } });
|
|
65
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
71
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2ludGVybmFsL2xheW91dC9ncmlkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvaW50ZXJuYWwvbGF5b3V0L2dyaWQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBRVQsS0FBSyxFQUdMLFNBQVMsRUFDVCxpQkFBaUIsR0FDbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0scUNBQXFDLENBQUM7O0FBRWpGOzs7Ozs7OztHQVFHO0FBU0gsTUFBTSxPQUFPLGFBQWE7SUFSMUI7UUFTRSxpRkFBaUY7UUFDeEUsUUFBRyxHQUFHLE9BQU8sQ0FBQztRQUt2QixtRUFBbUU7UUFDMUQsV0FBTSxHQUFHLEtBQUssQ0FBQztLQXVDekI7SUF2QkM7Ozs7T0FJRztJQUNILElBQUksZUFBZTtRQUNqQixJQUFJLElBQUksQ0FBQyxRQUFRO1lBQUUsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQ3hDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsMEJBQTBCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDbEUsQ0FBQztJQUlEOzs7O09BSUc7SUFDSCxXQUFXLENBQUMsT0FBc0I7UUFDaEMsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDekMsSUFBSSxDQUFDLE1BQU0sSUFBSSxNQUFNLENBQUMsYUFBYSxFQUFFO1lBQUUsT0FBTztRQUM5QyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLGFBQWEsQ0FBQztRQUN6QyxJQUFJLElBQUk7WUFBRSxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQztJQUMvQixDQUFDOzsyR0E5Q1UsYUFBYTsrRkFBYixhQUFhLDBXQzdCMUIsaVhBYUE7NEZEZ0JhLGFBQWE7a0JBUnpCLFNBQVM7K0JBQ0UsVUFBVSxjQUNSLElBQUksbUJBQ0MsdUJBQXVCLENBQUMsTUFBTSxpQkFDaEMsaUJBQWlCLENBQUMsSUFBSTs4QkFNNUIsR0FBRztzQkFBWCxLQUFLO2dCQUVHLEdBQUc7c0JBQVgsS0FBSztnQkFFRyxHQUFHO3NCQUFYLEtBQUs7Z0JBRUcsTUFBTTtzQkFBZCxLQUFLO2dCQUVHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBRUcsY0FBYztzQkFBdEIsS0FBSztnQkFFRyxJQUFJO3NCQUFaLEtBQUs7Z0JBRUcsUUFBUTtzQkFBaEIsS0FBSztnQkFNRyxLQUFLO3NCQUFiLEtBQUs7Z0JBWWdDLE9BQU87c0JBQTVDLFNBQVM7dUJBQUMsTUFBTSxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIHR5cGUgRWxlbWVudFJlZixcbiAgSW5wdXQsXG4gIHR5cGUgT25DaGFuZ2VzLFxuICB0eXBlIFNpbXBsZUNoYW5nZXMsXG4gIFZpZXdDaGlsZCxcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBvcHRpb25zR3JpZFRlbXBsYXRlQ29sdW1ucyB9IGZyb20gXCJAbWFnaWN4LWVuZy9haS1hdXRvY29tcGxldGUtdmFuaWxsYVwiO1xuXG4vKipcbiAqIEludHJpbnNpYyBncmlkIGxheW91dCBwcmltaXRpdmUg4oCUIGF1dG8tZml0cyBhcyBtYW55IGNvbHVtbnMgYXMgZml0IGJldHdlZW5cbiAqIGBtaW5gIGFuZCBgbWF4YCB3aWRlLCB3cmFwcGluZyB0byBuZXcgcm93cyB3aGVuIHRoZXJlJ3Mgbm8gbW9yZSBob3Jpem9udGFsXG4gKiByb29tLiBNaXJyb3JzIHRoZSBSZWFjdCBgPEdyaWQ+YCBjb21wb25lbnQgLyB2YW5pbGxhIGAuYWlhLWdyaWRgIHByaW1pdGl2ZS5cbiAqXG4gKiBPcHRpb25hbGx5IHNjcm9sbHMgKGBzY3JvbGxgLCBjYXBwZWQgaGVpZ2h0KS5cbiAqXG4gKiBAaW50ZXJuYWxcbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiBcImFpYS1ncmlkXCIsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICB0ZW1wbGF0ZVVybDogXCIuL2dyaWQuY29tcG9uZW50Lmh0bWxcIixcbiAgc3R5bGVVcmxzOiBbXCIuL2dyaWQuY29tcG9uZW50LmNzc1wiXSxcbn0pXG5leHBvcnQgY2xhc3MgR3JpZENvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcyB7XG4gIC8qKiBNaW5pbXVtIGNlbGwgd2lkdGguIENTUyBsZW5ndGgsIGUuZy4gXCIxNnJlbVwiLiBDb2x1bW5zIGF1dG8tZml0IGF0IHJ1bnRpbWUuICovXG4gIEBJbnB1dCgpIG1pbiA9IFwiMTZyZW1cIjtcbiAgLyoqIE1heGltdW0gY2VsbCB3aWR0aC4gQ1NTIGxlbmd0aC4gRGVmYXVsdHMgKHZpYSBDU1MpIHRvIGAxZnJgIChzdHJldGNoKS4gKi9cbiAgQElucHV0KCkgbWF4Pzogc3RyaW5nO1xuICAvKiogR2FwIGJldHdlZW4gY2VsbHMuICovXG4gIEBJbnB1dCgpIGdhcD86IHN0cmluZztcbiAgLyoqIENhcCB0aGUgaGVpZ2h0IGFuZCBzY3JvbGwgdmVydGljYWxseSB3aGVuIGNvbnRlbnQgb3ZlcmZsb3dzLiAqL1xuICBASW5wdXQoKSBzY3JvbGwgPSBmYWxzZTtcbiAgLyoqIE1heCBoZWlnaHQgd2hlbiBgc2Nyb2xsYC4gQ1NTIGxlbmd0aC4gRGVmYXVsdHMgKHZpYSBDU1MpIHRvIDEyMHB4LiAqL1xuICBASW5wdXQoKSBtYXhIZWlnaHQ/OiBzdHJpbmc7XG4gIC8qKiBTY3JvbGwgYmFjayB0byB0aGUgdG9wIHdoZW5ldmVyIHRoaXMga2V5IGNoYW5nZXMgKGBzY3JvbGxgIG9ubHkpLiAqL1xuICBASW5wdXQoKSBzY3JvbGxSZXNldEtleT86IHN0cmluZztcbiAgLyoqIEZpeGVkIGNvbHVtbiBjb3VudC4gT3ZlcnJpZGVzIHRoZSBpbnRyaW5zaWMgYXV0by1maXQgd2hlbiBzZXQ7IHJvd3MgZmlsbCBsZWZ0LXRvLXJpZ2h0LiAqL1xuICBASW5wdXQoKSBjb2xzPzogbnVtYmVyO1xuICAvKiogRXhwbGljaXQgYGdyaWQtdGVtcGxhdGUtY29sdW1uc2AgdmFsdWUuIE92ZXJyaWRlcyBgY29sc2Agd2hlbiBzZXQuICovXG4gIEBJbnB1dCgpIHRlbXBsYXRlPzogc3RyaW5nO1xuICAvKipcbiAgICogSWRlbnRpdHkgb2YgdGhlIGNvbnRlbnQgZ3JvdXAgb24gc2NyZWVuLCBtaXJyb3JlZCBvbnRvIGBkYXRhLWFpYS1ncm91cGAuXG4gICAqIFRoZSBjb3JlJ3Mgc2Nyb2xsLWFycm93IGNvbnRyb2xsZXIgcmVhZHMgaXQgdG8gdGVsbCBhIG5ldyBzZXQgb2Ygb3B0aW9uc1xuICAgKiAocmlzaW5nIGluKSBmcm9tIHRoZSBzYW1lIHNldCByZS1yZW5kZXJlZC5cbiAgICovXG4gIEBJbnB1dCgpIGdyb3VwPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBFeHBsaWNpdCBjb2x1bW4gdGVtcGxhdGUgb3ZlcnJpZGVzIHRoZSBpbnRyaW5zaWMgYXV0by1maXQgKGlubGluZSB3aW5zKS5cbiAgICogVGhlIHRyYWNrIHN0cmluZyBpcyBidWlsdCBieSB0aGUgY29yZSBzbyBhbGwgdGhyZWUgcGFja2FnZXMgZW1pdCB0aGUgc2FtZVxuICAgKiBvbmU7IGEgbWVhc3VyZWQgdGVtcGxhdGUgKHRoZSB0d28tY29sdW1uIHNwbGl0KSB3aW5zIG92ZXIgdGhlIGNvdW50LlxuICAgKi9cbiAgZ2V0IHRlbXBsYXRlQ29sdW1ucygpOiBzdHJpbmcgfCBudWxsIHtcbiAgICBpZiAodGhpcy50ZW1wbGF0ZSkgcmV0dXJuIHRoaXMudGVtcGxhdGU7XG4gICAgcmV0dXJuIHRoaXMuY29scyA/IG9wdGlvbnNHcmlkVGVtcGxhdGVDb2x1bW5zKHRoaXMuY29scykgOiBudWxsO1xuICB9XG5cbiAgQFZpZXdDaGlsZChcImdyaWRcIiwgeyBzdGF0aWM6IGZhbHNlIH0pIGdyaWRSZWY/OiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PjtcblxuICAvKipcbiAgICogQSBuZXcgYHNjcm9sbFJlc2V0S2V5YCBtZWFucyBhIGRpZmZlcmVudCBjb250ZW50IGdyb3VwIGlzIGJlaW5nIHNob3duIChlLmcuXG4gICAqIHRoZSBuZXh0IHN1Z2dlc3Rpb24ncyBvcHRpb25zIGFmdGVyIGEgc2VsZWN0aW9uKSDigJQgc3RhcnQgaXQgZnJvbSB0aGUgdG9wXG4gICAqIGluc3RlYWQgb2YgaW5oZXJpdGluZyB0aGUgcHJldmlvdXMgZ3JvdXAncyBzY3JvbGwgb2Zmc2V0LlxuICAgKi9cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGNvbnN0IGNoYW5nZSA9IGNoYW5nZXNbXCJzY3JvbGxSZXNldEtleVwiXTtcbiAgICBpZiAoIWNoYW5nZSB8fCBjaGFuZ2UuaXNGaXJzdENoYW5nZSgpKSByZXR1cm47XG4gICAgY29uc3QgZ3JpZCA9IHRoaXMuZ3JpZFJlZj8ubmF0aXZlRWxlbWVudDtcbiAgICBpZiAoZ3JpZCkgZ3JpZC5zY3JvbGxUb3AgPSAwO1xuICB9XG59XG4iLCI8ZGl2XG4gICNncmlkXG4gIGNsYXNzPVwiYWlhLWdyaWRcIlxuICBbYXR0ci5kYXRhLXNjcm9sbF09XCJzY3JvbGwgPyAnJyA6IG51bGxcIlxuICBbYXR0ci5kYXRhLWFpYS1ncm91cF09XCJncm91cCA/PyBudWxsXCJcbiAgW3N0eWxlLi0tYWlhLWdyaWQtbWluXT1cIm1pblwiXG4gIFtzdHlsZS4tLWFpYS1ncmlkLW1heF09XCJtYXhcIlxuICBbc3R5bGUuLS1haWEtZ3JpZC1nYXBdPVwiZ2FwXCJcbiAgW3N0eWxlLi0tYWlhLWdyaWQtbWF4LWhlaWdodF09XCJtYXhIZWlnaHRcIlxuICBbc3R5bGUuZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zXT1cInRlbXBsYXRlQ29sdW1uc1wiXG4+XG4gIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbjwvZGl2PlxuIl19
|