@magicx-eng/ai-autocomplete-angular 0.5.7 → 0.5.8
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/esm2020/lib/controller/ai-autocomplete.controller.mjs +16 -11
- package/fesm2015/magicx-eng-ai-autocomplete-angular.mjs +15 -10
- package/fesm2015/magicx-eng-ai-autocomplete-angular.mjs.map +1 -1
- package/fesm2020/magicx-eng-ai-autocomplete-angular.mjs +15 -10
- package/fesm2020/magicx-eng-ai-autocomplete-angular.mjs.map +1 -1
- package/lib/controller/ai-autocomplete.controller.d.ts.map +1 -1
- package/package.json +2 -2
|
@@ -46,16 +46,21 @@ export class AIAutocompleteController {
|
|
|
46
46
|
// handed. The core notifies listeners synchronously, and some actions
|
|
47
47
|
// trigger reentrant `store.set` calls (e.g. typing a non-matching char
|
|
48
48
|
// during re-edit makes the core synchronously exit re-edit and kick off a
|
|
49
|
-
// fetch).
|
|
50
|
-
//
|
|
51
|
-
//
|
|
52
|
-
//
|
|
53
|
-
//
|
|
54
|
-
//
|
|
55
|
-
// back to where re-editing started
|
|
56
|
-
//
|
|
57
|
-
//
|
|
58
|
-
//
|
|
49
|
+
// fetch).
|
|
50
|
+
//
|
|
51
|
+
// The core's store used to deliver such a nested set inline and then
|
|
52
|
+
// resume the outer listener loop, so a listener could be handed an older
|
|
53
|
+
// state (still in re-edit) *after* a newer one (re-edit exited) — which
|
|
54
|
+
// resurrected a stale `editingParam` and retriggered the editor's re-edit
|
|
55
|
+
// caret-park, yanking the caret back to where re-editing started. The
|
|
56
|
+
// store now queues notifications and drains them in order, so that
|
|
57
|
+
// out-of-order delivery can no longer happen at the source.
|
|
58
|
+
//
|
|
59
|
+
// Reading `getState()` at emission time is kept as belt-and-braces: it
|
|
60
|
+
// costs nothing (distinctUntilChanged downstream drops the duplicate
|
|
61
|
+
// emissions) and keeps this bridge correct for any future consumer that
|
|
62
|
+
// emits mid-cascade. React needs neither, since it batches renders and
|
|
63
|
+
// gates its caret effects on dependencies.
|
|
59
64
|
this.unsubscribeCore = this.core.subscribe(() => {
|
|
60
65
|
if (!this.isDestroyed)
|
|
61
66
|
this.rawState$.next(this.core.getState());
|
|
@@ -316,4 +321,4 @@ function computeDropdown(s, optionsPosition) {
|
|
|
316
321
|
optionsPosition,
|
|
317
322
|
};
|
|
318
323
|
}
|
|
319
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWktYXV0b2NvbXBsZXRlLmNvbnRyb2xsZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2NvbnRyb2xsZXIvYWktYXV0b2NvbXBsZXRlLmNvbnRyb2xsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLGNBQWMsSUFBSSxrQkFBa0IsR0FLckMsTUFBTSxxQ0FBcUMsQ0FBQztBQUM3QyxPQUFPLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxHQUFHLEVBQW1CLFdBQVcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQU96RixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTVDOzs7Ozs7Ozs7Ozs7R0FZRztBQUNILE1BQU0sT0FBTyx3QkFBd0I7SUF3RW5DOzs7T0FHRztJQUNILFlBQVksT0FBd0MsRUFBRTtRQXpFdEQsNEVBQTRFO1FBQzVFLDRFQUE0RTtRQUM1RSxtRUFBbUU7UUFDbEQscUJBQWdCLEdBQUcsSUFBSSxlQUFlLENBQW9CLE9BQU8sQ0FBQyxDQUFDO1FBRTVFLGdCQUFXLEdBQUcsS0FBSyxDQUFDO1FBcUUxQixJQUFJLE9BQU8sUUFBUSxLQUFLLFdBQVcsRUFBRTtZQUNuQyxNQUFNLElBQUksS0FBSyxDQUNiLDJEQUEyRDtnQkFDekQsd0VBQXdFLENBQzNFLENBQUM7U0FDSDtRQUVELHdFQUF3RTtRQUN4RSxxRUFBcUU7UUFDckUsTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUUzQyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksa0JBQWtCLENBQUMsSUFBSSxFQUFFO1lBQ3ZDLEdBQUcsSUFBSTtZQUNQLFVBQVUsRUFBRSxVQUFVO1lBQ3RCLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxJQUFJLGNBQWM7WUFDckMsaUVBQWlFO1lBQ2pFLG9FQUFvRTtZQUNwRSwyQ0FBMkM7WUFDM0MsZUFBZSxFQUFFLElBQUks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O1lBQ2pDLElBQUksRUFBRSxZQUFZLENBQUMscUJBQXFCO1lBQ3hDLFFBQVEsRUFBRSxJQUFJO1lBQ2QsT0FBTyxFQUFFLFlBQVksQ0FBQyxPQUFPO1NBQzlCO1FBQ0gsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUNULE1BQU0sa0JBQWtCLEdBQUcsWUFBWSxJQUFJLGdCQUFnQixDQUFDO0lBQzVELE1BQU0sYUFBYSxHQUFHLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLHFCQUFxQixDQUFDO0lBQzlFLE9BQU87UUFDTCxXQUFXLEVBQUUsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLGtCQUFrQixFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUMsZUFBZSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTtRQUM5RixXQUFXLEVBQUUsQ0FBQyxDQUFDLG1CQUFtQjtRQUNsQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLGNBQWM7UUFDeEIsS0FBSyxFQUFFLGFBQWE7UUFDcEIsb0JBQW9CLEVBQUUsQ0FBQyxDQUFDLG9CQUFvQjtRQUM1QyxTQUFTLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDO1FBQzlCLFlBQVksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLE1BQU0sS0FBSyxDQUFDO1FBQ3hDLGVBQWU7S0FDaEIsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICB0eXBlIENvbXBsZXRlZFBhcmFtU3RhdGUsXG4gIEFJQXV0b2NvbXBsZXRlIGFzIENvcmVBSUF1dG9jb21wbGV0ZSxcbiAgdHlwZSBDb3JlU3RhdGUsXG4gIHR5cGUgU2VnbWVudCxcbiAgdHlwZSBTdWdnZXN0aW9uLFxuICB0eXBlIFN1Z2dlc3Rpb25PcHRpb24sXG59IGZyb20gXCJAbWFnaWN4LWVuZy9haS1hdXRvY29tcGxldGUtdmFuaWxsYVwiO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCBtYXAsIHR5cGUgT2JzZXJ2YWJsZSwgc2hhcmVSZXBsYXkgfSBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IHR5cGUge1xuICBBSUF1dG9jb21wbGV0ZUNvbnRyb2xsZXJPcHRpb25zLFxuICBBSUF1dG9jb21wbGV0ZUNvbnRyb2xsZXJTdGF0ZSxcbiAgQUlBdXRvY29tcGxldGVDb250cm9sbGVyVXBkYXRlLFxuICBBSUF1dG9jb21wbGV0ZURyb3Bkb3duU3RhdGUsXG59IGZyb20gXCIuLi9zaGFyZWQvdHlwZXNcIjtcbmltcG9ydCB7IGRlcml2ZUZpZWxkIH0gZnJvbSBcIi4vb2JzZXJ2YWJsZXNcIjtcblxuLyoqXG4gKiBUaWVyIDIgbG9naWMgc3VyZmFjZSBmb3IgYEBtYWdpY3gtZW5nL2FpLWF1dG9jb21wbGV0ZS1hbmd1bGFyYCDigJQgdGhlIEFuZ3VsYXJcbiAqIGVxdWl2YWxlbnQgb2YgUmVhY3QncyBgdXNlQUlBdXRvY29tcGxldGUoKWAgaG9vay4gV3JhcHMgYSBoZWFkbGVzc1xuICogYEBtYWdpY3gtZW5nL2FpLWF1dG9jb21wbGV0ZS12YW5pbGxhYCBjb3JlIGFuZCBleHBvc2VzIGl0cyBzdGF0ZSBhcyBSeEpTXG4gKiBvYnNlcnZhYmxlcyBwbHVzIHRoaW4gYWN0aW9uIG1ldGhvZHMuXG4gKlxuICogUGVyIFREQiDCpzMuMywgdGhlIGNvbnRyb2xsZXIgaXMgY29uc3VtZXItbWFuYWdlZCDigJQgdGhlIGNvbnN1bWVyIGNyZWF0ZXMgaXRcbiAqIHdpdGggYG5ld2AsIGhvbGRzIHRoZSByZWZlcmVuY2UsIGFuZCAqKm11c3QgY2FsbCBgZGVzdHJveSgpYCoqIGluIHRoZWlyXG4gKiBvd24gYG5nT25EZXN0cm95YC4gVGhlIFRpZXIgMSBgPGFpLWF1dG9jb21wbGV0ZT5gIGNvbXBvbmVudCBkb2VzIHRoaXNcbiAqIGF1dG9tYXRpY2FsbHk7IFRpZXIgMiBjb25zdW1lcnMgZG8gbm90IGdldCBhdXRvLWNsZWFudXAuXG4gKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY2xhc3MgQUlBdXRvY29tcGxldGVDb250cm9sbGVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBjb3JlOiBDb3JlQUlBdXRvY29tcGxldGU7XG4gIHByaXZhdGUgcmVhZG9ubHkgcmF3U3RhdGUkOiBCZWhhdmlvclN1YmplY3Q8Q29yZVN0YXRlPjtcbiAgLy8gb3B0aW9uc1Bvc2l0aW9uIGlzbid0IHBhcnQgb2YgQ29yZVN0YXRlIChpdCdzIGEgY29yZSBvcHRpb24pLCBzbyB0cmFjayBpdFxuICAvLyBoZXJlIGFuZCBmb2xkIGl0IGludG8gYGRyb3Bkb3duJGAgc28gdGhlIGRyb3Bkb3duIGNhbiByZWFkIHBsYWNlbWVudCBmcm9tXG4gIC8vIHRoZSBjb250cm9sbGVyIOKAlCBjb25maWd1cmVkIG9uY2UsIGtlcHQgaW4gc3luYyB0aHJvdWdoIHVwZGF0ZSgpLlxuICBwcml2YXRlIHJlYWRvbmx5IG9wdGlvbnNQb3NpdGlvbiQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFwiYWJvdmVcIiB8IFwiYmVsb3dcIj4oXCJiZWxvd1wiKTtcbiAgcHJpdmF0ZSByZWFkb25seSB1bnN1YnNjcmliZUNvcmU6ICgpID0+IHZvaWQ7XG4gIHByaXZhdGUgaXNEZXN0cm95ZWQgPSBmYWxzZTtcblxuICAvLyA9PT0gUGVyLWZpZWxkIG9ic2VydmFibGVzID09PVxuICAvLyBFYWNoIG9uZSBydW5zIHRocm91Z2ggZGVyaXZlRmllbGQsIHdoaWNoIGJha2VzIGluIGRpc3RpbmN0VW50aWxDaGFuZ2VkXG4gIC8vIGFuZCBzaGFyZVJlcGxheSh7IGJ1ZmZlclNpemU6IDEsIHJlZkNvdW50OiB0cnVlIH0pIHBlciDCpzE5LjQuXG5cbiAgLyoqIFBsYWluLXRleHQgY29udGVudCBvZiB0aGUgZWRpdG9yLiAqL1xuICByZWFkb25seSB0ZXh0JDogT2JzZXJ2YWJsZTxzdHJpbmc+O1xuICAvKiogQ29tcGxldGVkIChib2xkKSBwYXJhbXMgY3VycmVudGx5IGluIHRoZSBlZGl0b3IuICovXG4gIHJlYWRvbmx5IGNvbXBsZXRlZFBhcmFtcyQ6IE9ic2VydmFibGU8Q29tcGxldGVkUGFyYW1TdGF0ZVtdPjtcbiAgLyoqIEFjdGlvbmFibGUgc3VnZ2VzdGlvbiBwaWxscyAoZmlyc3Qgb25lIGlzIHRoZSBhY3RpdmUgcGlsbCkuICovXG4gIHJlYWRvbmx5IHN1Z2dlc3Rpb25QaWxscyQ6IE9ic2VydmFibGU8U3VnZ2VzdGlvbltdPjtcbiAgLyoqIFRleHQgKyBjb21wbGV0ZWQtcGFyYW0gc2VnbWVudHMgZm9yIHJlbmRlcmluZyB0aGUgZWRpdG9yIGJvZHkuICovXG4gIHJlYWRvbmx5IHNlZ21lbnRzJDogT2JzZXJ2YWJsZTxTZWdtZW50W10+O1xuICAvKiogSUQgb2YgdGhlIG1vc3QtcmVjZW50bHktcHJvbW90ZWQgcGFyYW0gKGRyaXZlcyBzaGltbWVyIGFuaW1hdGlvbikuICovXG4gIHJlYWRvbmx5IG5ld1BhcmFtSWQkOiBPYnNlcnZhYmxlPHN0cmluZyB8IG51bGw+O1xuICAvKiogQWxsIHN1Z2dlc3Rpb25zIGZyb20gdGhlIHNlcnZlciAoaW5jbHVkaW5nIG5vbi1hY3Rpb25hYmxlIG9uZXMpLiAqL1xuICByZWFkb25seSBzdWdnZXN0aW9ucyQ6IE9ic2VydmFibGU8U3VnZ2VzdGlvbltdPjtcbiAgLyoqIEN1cnJlbnRseSBoaWdobGlnaHRlZCBkcm9wZG93biBvcHRpb24gaW5kZXguIC0xID0gbm9uZS4gKi9cbiAgcmVhZG9ubHkgYWN0aXZlSW5kZXgkOiBPYnNlcnZhYmxlPG51bWJlcj47XG4gIC8qKlxuICAgKiBVSS12aXNpYmxlIGxvYWRpbmcgZmxhZyDigJQgc3VwcHJlc3NlZCBkdXJpbmcgdGhlIHBvc3Qtc2VsZWN0IHN0cmVha1xuICAgKiBhbmltYXRpb24gYW5kIGR1cmluZyByZS1lZGl0IChjYWNoZWQgb3B0aW9ucyBzdGF5IHZpc2libGUgdGhlcmUpLiBVc2VcbiAgICogdGhpcyBpbnN0ZWFkIG9mIHRoZSByYXcgY29yZSBzdGF0ZSBmb3IgYW55IGxvYWRpbmctc2tlbGV0b24gYmluZGluZy5cbiAgICovXG4gIHJlYWRvbmx5IGlzTG9hZGluZyQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gIC8qKiBTZXJ2ZXItcmVwb3J0ZWQgXCJxdWVyeSBpcyBjb21wbGV0ZVwiIGZsYWcuICovXG4gIHJlYWRvbmx5IGlzUmVhZHkkOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuICAvKiogV2hldGhlciB0aGUgZWRpdG9yIGN1cnJlbnRseSBoYXMgZm9jdXMuICovXG4gIHJlYWRvbmx5IGlzRm9jdXNlZCQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gIC8qKiBXaGV0aGVyIHRoZSBkcm9wZG93biBzaG91bGQgY3VycmVudGx5IGJlIHZpc2libGUuICovXG4gIHJlYWRvbmx5IGlzRHJvcGRvd25PcGVuJDogT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIGFjdGl2ZSAobGVhZGluZykgcGlsbCBzaG91bGQgcmVuZGVyIHNlbGVjdGVkIChmdWxsIG9wYWNpdHkpXG4gICAqIHJhdGhlciB0aGFuIHRoZSBkZS1lbXBoYXNpemVkIGBmaXJzdGAgdGllci4gQXV0byB0cmlnZ2VyIOKHkiB0cnVlIG9ubHkgd2hpbGVcbiAgICogYSBkcm9wZG93biBvcHRpb24gaXMgaGlnaGxpZ2h0ZWQ7IG1hbnVhbCDih5IgdHJ1ZSBvbmNlIHRoZSBwaWxsIGlzIHRhcHBlZC5cbiAgICovXG4gIHJlYWRvbmx5IGlzQWN0aXZlUGlsbFNlbGVjdGVkJDogT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgLyoqIFNlcnZlci1zdWdnZXN0ZWQgcGxhY2Vob2xkZXIgdGV4dCBmb3IgdGhlIGVkaXRvci4gKi9cbiAgcmVhZG9ubHkgcGxhY2Vob2xkZXJUZXh0JDogT2JzZXJ2YWJsZTxzdHJpbmc+O1xuICAvKiogTGFzdCBmZXRjaCBlcnJvciwgb3IgbnVsbC4gKi9cbiAgcmVhZG9ubHkgZXJyb3IkOiBPYnNlcnZhYmxlPEVycm9yIHwgbnVsbD47XG4gIC8qKiBQYXJhbSBjdXJyZW50bHkgYmVpbmcgcmUtZWRpdGVkLCBvciBudWxsLiAqL1xuICByZWFkb25seSBlZGl0aW5nUGFyYW0kOiBPYnNlcnZhYmxlPENvbXBsZXRlZFBhcmFtU3RhdGUgfCBudWxsPjtcbiAgLyoqIFBsYWluLXRleHQgb2Zmc2V0IHdoZXJlIHRoZSBlZGl0IHJlZ2lvbiBzdGFydHMsIG9yIG51bGwuICovXG4gIHJlYWRvbmx5IGVkaXRpbmdBbmNob3IkOiBPYnNlcnZhYmxlPG51bWJlciB8IG51bGw+O1xuICAvKiogTGl2ZSBjYXJldCBvZmZzZXQgd2l0aGluIHRoZSBlZGl0b3IuICovXG4gIHJlYWRvbmx5IGNhcmV0T2Zmc2V0JDogT2JzZXJ2YWJsZTxudW1iZXIgfCBudWxsPjtcblxuICAvLyA9PT0gQ29tcG9zaXRlIG9ic2VydmFibGVzID09PVxuXG4gIC8qKlxuICAgKiBTbmFwc2hvdCBvZiBldmVyeSBwdWJsaWMgZmllbGQgaW4gb25lIG9iamVjdC4gQ29udmVuaWVudCBmb3JcbiAgICogYCpuZ0lmPVwiY3RybC5zdGF0ZSQgfCBhc3luYyBhcyBzdGF0ZVwiYCB0ZW1wbGF0aW5nIOKAlCBhbGlhc2VzIGFsbCBmaWVsZHNcbiAgICogdW5kZXIgYSBzaW5nbGUgc3Vic2NyaXB0aW9uIGluc3RlYWQgb2YgbXVsdGlwbGUgYHwgYXN5bmNgIHBpcGVzLlxuICAgKi9cbiAgcmVhZG9ubHkgc3RhdGUkOiBPYnNlcnZhYmxlPEFJQXV0b2NvbXBsZXRlQ29udHJvbGxlclN0YXRlPjtcblxuICAvKipcbiAgICogQ29tcG9zaXRlIHN0YXRlIGZvciB0aGUgZHJvcGRvd24gdmlldy4gVGllciAyIGNvbnN1bWVycyBzcHJlYWQgdGhpcyBpbnRvXG4gICAqIGA8YWktYXV0b2NvbXBsZXRlLWRyb3Bkb3duPmA7IFRpZXIgMSB1c2VzIHRoZSBzYW1lIHNoYXBlIGludGVybmFsbHkuXG4gICAqL1xuICByZWFkb25seSBkcm9wZG93biQ6IE9ic2VydmFibGU8QUlBdXRvY29tcGxldGVEcm9wZG93blN0YXRlPjtcblxuICAvKipcbiAgICogVGhyb3dzIGlmIGludm9rZWQgb3V0c2lkZSBhIGJyb3dzZXIgZW52aXJvbm1lbnQuIEZvciBTU1IgLyBBbmd1bGFyXG4gICAqIFVuaXZlcnNhbCwgZ2F0ZSBjb25zdHJ1Y3Rpb24gd2l0aCBgaXNQbGF0Zm9ybUJyb3dzZXJgIOKAlCBzZWUgVERCIMKnMTYuMy5cbiAgICovXG4gIGNvbnN0cnVjdG9yKG9wdHM6IEFJQXV0b2NvbXBsZXRlQ29udHJvbGxlck9wdGlvbnMgPSB7fSkge1xuICAgIGlmICh0eXBlb2YgZG9jdW1lbnQgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJBSUF1dG9jb21wbGV0ZUNvbnRyb2xsZXIgcmVxdWlyZXMgYSBicm93c2VyIGVudmlyb25tZW50LiBcIiArXG4gICAgICAgICAgXCJGb3IgU1NSIC8gQW5ndWxhciBVbml2ZXJzYWwsIGdhdGUgY29uc3RydWN0aW9uIHdpdGggaXNQbGF0Zm9ybUJyb3dzZXIuXCIsXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIEhlYWRsZXNzIG1vZGUgbmV2ZXIgcmVuZGVycyB0byB0aGUgaG9zdCwgc28gYSB0aHJvd2F3YXkgZGl2IGlzIGZpbmUg4oCUXG4gICAgLy8gaXQncyByZXF1aXJlZCBieSB0aGUgY29yZSdzIHNpZ25hdHVyZSBmb3Igc3ltbWV0cnkgd2l0aCBmdWxsIG1vZGUuXG4gICAgY29uc3QgaG9zdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG5cbiAgICB0aGlzLmNvcmUgPSBuZXcgQ29yZUFJQXV0b2NvbXBsZXRlKGhvc3QsIHtcbiAgICAgIC4uLm9wdHMsXG4gICAgICByZW5kZXJNb2RlOiBcImhlYWRsZXNzXCIsXG4gICAgICBzb3VyY2U6IG9wdHMuc291cmNlID8/IFwiaGVhZGxlc3Mtc2RrXCIsXG4gICAgICAvLyBIZWFkbGVzcyBtb2RlIG5ldmVyIHJlbmRlcnMgdGhlIGRyb3Bkb3duIERPTSwgYnV0IHRoZSBrZXlib2FyZFxuICAgICAgLy8gY29udHJvbGxlciBzdGlsbCByZWFkcyBgb3B0aW9uc1Bvc2l0aW9uYCB0byBkZWNpZGUgd2hpY2ggdmVydGljYWxcbiAgICAgIC8vIGFycm93IG9wZW5zIHRoZSBkcm9wZG93biBmcm9tIHRoZSBpbnB1dC5cbiAgICAgIG9wdGlvbnNQb3NpdGlvbjogb3B0cy5vcHRpb25zUG9zaXRpb24gPz8gXCJiZWxvd1wiLFxuICAgIH0pO1xuXG4gICAgdGhpcy5yYXdTdGF0ZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PENvcmVTdGF0ZT4odGhpcy5jb3JlLmdldFN0YXRlKCkpO1xuICAgIC8vIFB1c2ggdGhlIHN0b3JlJ3MgKmN1cnJlbnQqIHN0YXRlLCBub3QgdGhlIHNuYXBzaG90IHRoZSBsaXN0ZW5lciB3YXNcbiAgICAvLyBoYW5kZWQuIFRoZSBjb3JlIG5vdGlmaWVzIGxpc3RlbmVycyBzeW5jaHJvbm91c2x5LCBhbmQgc29tZSBhY3Rpb25zXG4gICAgLy8gdHJpZ2dlciByZWVudHJhbnQgYHN0b3JlLnNldGAgY2FsbHMgKGUuZy4gdHlwaW5nIGEgbm9uLW1hdGNoaW5nIGNoYXJcbiAgICAvLyBkdXJpbmcgcmUtZWRpdCBtYWtlcyB0aGUgY29yZSBzeW5jaHJvbm91c2x5IGV4aXQgcmUtZWRpdCBhbmQga2ljayBvZmYgYVxuICAgIC8vIGZldGNoKS4gUmVlbnRyYW5jeSBtYWtlcyB0aGUgb3V0ZXIgc2V0J3MgbGlzdGVuZXIgbG9vcCBjb250aW51ZSB3aXRoIGFcbiAgICAvLyBub3ctc3RhbGUgc25hcHNob3QsIHNvIHRoZSBsaXN0ZW5lciBjYW4gZmlyZSAqb3V0IG9mIG9yZGVyKiDigJQgZGVsaXZlcmluZ1xuICAgIC8vIGFuIG9sZGVyIHN0YXRlIChzdGlsbCBpbiByZS1lZGl0KSBhZnRlciBhIG5ld2VyIG9uZSAocmUtZWRpdCBleGl0ZWQpLlxuICAgIC8vIFJlYWRpbmcgYGdldFN0YXRlKClgIGF0IGVtaXNzaW9uIHRpbWUgY29sbGFwc2VzIGV2ZXJ5IG5vdGlmaWNhdGlvbiBvbnRvXG4gICAgLy8gdGhlIHRydWUgbGF0ZXN0IHN0YXRlLCBzbyBhIHN0YWxlIGBlZGl0aW5nUGFyYW1gIGNhbid0IHJlc3VycmVjdCBhbmRcbiAgICAvLyByZXRyaWdnZXIgdGhlIGVkaXRvcidzIHJlLWVkaXQgY2FyZXQtcGFyayAod2hpY2ggd291bGQgeWFuayB0aGUgY2FyZXRcbiAgICAvLyBiYWNrIHRvIHdoZXJlIHJlLWVkaXRpbmcgc3RhcnRlZCkuIGRpc3RpbmN0VW50aWxDaGFuZ2VkIGRvd25zdHJlYW0gZHJvcHNcbiAgICAvLyB0aGUgcmVzdWx0aW5nIGR1cGxpY2F0ZSBlbWlzc2lvbnMuIFJlYWN0IGF2b2lkcyB0aGlzIGJlY2F1c2UgaXQgYmF0Y2hlc1xuICAgIC8vIHJlbmRlcnMgYW5kIGl0cyBjYXJldCBlZmZlY3RzIGFyZSBkZXBlbmRlbmN5LWdhdGVkOyBvdXIgc3Vic2NyaXB0aW9uIGlzXG4gICAgLy8gc3luY2hyb25vdXMsIHNvIHdlIGNvYWxlc2NlIGhlcmUgaW5zdGVhZC5cbiAgICB0aGlzLnVuc3Vic2NyaWJlQ29yZSA9IHRoaXMuY29yZS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgaWYgKCF0aGlzLmlzRGVzdHJveWVkKSB0aGlzLnJhd1N0YXRlJC5uZXh0KHRoaXMuY29yZS5nZXRTdGF0ZSgpKTtcbiAgICB9KTtcblxuICAgIC8vID09PSBQZXItZmllbGQgb2JzZXJ2YWJsZXMgPT09XG4gICAgLy8gQXJyYXktdmFsdWVkIGZpZWxkcyB1c2Ugc2hhbGxvdyBlcXVhbGl0eS4gVGhlIHZhbmlsbGEgc3RvcmUgc3ByZWFkcyBvblxuICAgIC8vIGV2ZXJ5IHdyaXRlIChgc3RvcmUuc2V0KHsgY29tcGxldGVkUGFyYW1zOiBbLi4uXSB9KWApLCBzbyByZWZlcmVuY2VcbiAgICAvLyBlcXVhbGl0eSB3b3VsZCByZS1maXJlIGRvd25zdHJlYW0gc3Vic2NyaWJlcnMgb24gZXZlcnkgc3RhdGUgdGljayBldmVuXG4gICAgLy8gd2hlbiB0aGUgYXJyYXkncyBjb250ZW50cyBhcmUgdW5jaGFuZ2VkLiBUaGUgb3RoZXIgZmllbGRzIGFyZVxuICAgIC8vIHByaW1pdGl2ZXMgb3Igc3RhYmxlIG9iamVjdCByZWZlcmVuY2VzLCBzbyBkZWZhdWx0IGlkZW50aXR5IGVxdWFsaXR5XG4gICAgLy8gd29ya3MgZmluZS5cbiAgICB0aGlzLnRleHQkID0gZGVyaXZlRmllbGQodGhpcy5yYXdTdGF0ZSQsIChzKSA9PiBzLnRleHQpO1xuICAgIHRoaXMuY29tcGxldGVkUGFyYW1zJCA9IGRlcml2ZUZpZWxkKHRoaXMucmF3U3RhdGUkLCAocykgPT4gcy5jb21wbGV0ZWRQYXJhbXMsIGFyckVxKTtcbiAgICB0aGlzLnN1Z2dlc3Rpb25QaWxscyQgPSBkZXJpdmVGaWVsZCh0aGlzLnJhd1N0YXRlJCwgKHMpID0+IHMuYWN0aW9uYWJsZVN1Z2dlc3Rpb25zLCBhcnJFcSk7XG4gICAgdGhpcy5zZWdtZW50cyQgPSBkZXJpdmVGaWVsZCh0aGlzLnJhd1N0YXRlJCwgKHMpID0+IHMuc2VnbWVudHMsIGFyckVxKTtcbiAgICB0aGlzLm5ld1BhcmFtSWQkID0gZGVyaXZlRmllbGQodGhpcy5yYXdTdGF0ZSQsIChzKSA9PiBzLm5ld1BhcmFtSWQpO1xuICAgIHRoaXMuc3VnZ2VzdGlvbnMkID0gZGVyaXZlRmllbGQodGhpcy5yYXdTdGF0ZSQsIChzKSA9PiBzLnN1Z2dlc3Rpb25zLCBhcnJFcSk7XG4gICAgdGhpcy5hY3RpdmVJbmRleCQgPSBkZXJpdmVGaWVsZCh0aGlzLnJhd1N0YXRlJCwgKHMpID0+IHMuYWN0aXZlRHJvcGRvd25JbmRleCk7XG4gICAgdGhpcy5pc0xvYWRpbmckID0gZGVyaXZlRmllbGQodGhpcy5yYXdTdGF0ZSQsIGNvbXB1dGVVaUxvYWRpbmcpO1xuICAgIHRoaXMuaXNSZWFkeSQgPSBkZXJpdmVGaWVsZCh0aGlzLnJhd1N0YXRlJCwgKHMpID0+IHMuaXNSZWFkeSk7XG4gICAgdGhpcy5pc0ZvY3VzZWQkID0gZGVyaXZlRmllbGQodGhpcy5yYXdTdGF0ZSQsIChzKSA9PiBzLmlzRm9jdXNlZCk7XG4gICAgdGhpcy5pc0Ryb3Bkb3duT3BlbiQgPSBkZXJpdmVGaWVsZCh0aGlzLnJhd1N0YXRlJCwgKHMpID0+IHMuaXNEcm9wZG93bk9wZW4pO1xuICAgIHRoaXMuaXNBY3RpdmVQaWxsU2VsZWN0ZWQkID0gZGVyaXZlRmllbGQodGhpcy5yYXdTdGF0ZSQsIChzKSA9PiBzLmlzQWN0aXZlUGlsbFNlbGVjdGVkKTtcbiAgICB0aGlzLnBsYWNlaG9sZGVyVGV4dCQgPSBkZXJpdmVGaWVsZCh0aGlzLnJhd1N0YXRlJCwgKHMpID0+IHMucGxhY2Vob2xkZXJUZXh0KTtcbiAgICB0aGlzLmVycm9yJCA9IGRlcml2ZUZpZWxkKHRoaXMucmF3U3RhdGUkLCAocykgPT4gcy5lcnJvcik7XG4gICAgdGhpcy5lZGl0aW5nUGFyYW0kID0gZGVyaXZlRmllbGQodGhpcy5yYXdTdGF0ZSQsIChzKSA9PiBzLmVkaXRpbmdQYXJhbSk7XG4gICAgdGhpcy5lZGl0aW5nQW5jaG9yJCA9IGRlcml2ZUZpZWxkKHRoaXMucmF3U3RhdGUkLCAocykgPT4gcy5lZGl0aW5nQW5jaG9yKTtcbiAgICB0aGlzLmNhcmV0T2Zmc2V0JCA9IGRlcml2ZUZpZWxkKHRoaXMucmF3U3RhdGUkLCAocykgPT4gcy5jYXJldE9mZnNldCk7XG5cbiAgICAvLyA9PT0gQ29tcG9zaXRlIG9ic2VydmFibGVzID09PVxuICAgIC8vIFByb2plY3QgZGlyZWN0bHkgb2ZmIGByYXdTdGF0ZSRgIHdpdGggYSBzaW5nbGUgbWFwKCkgc28gZWFjaCBzdG9yZVxuICAgIC8vIHRpY2sgcHJvZHVjZXMgZXhhY3RseSBPTkUgY29oZXJlbnQgc3RhdGUkIGVtaXNzaW9uLiBVc2luZ1xuICAgIC8vIGBjb21iaW5lTGF0ZXN0YCBvdmVyIHRoZSBwZXItZmllbGQgb2JzZXJ2YWJsZXMgaGVyZSB3b3VsZCBmaXJlIG9uZVxuICAgIC8vIGVtaXNzaW9uIHBlciBpbm5lci1zb3VyY2UgdGljayAodXAgdG8gTiBwZXIgc3RvcmUgdXBkYXRlKSwgYW5kIHRoZVxuICAgIC8vIGVkaXRvci1ob3N0IGRpcmVjdGl2ZSdzIHBvc3QtcHJvbW90ZSByZWZvY3VzIHdvdWxkIHJ1biBhZ2FpbnN0IGFuXG4gICAgLy8gaW50ZXJtZWRpYXRlIHN0YXRlIHdoZXJlIGBuZXdQYXJhbUlkYCB3YXMgc2V0IGJ1dCBgc2VnbWVudHNgIC9cbiAgICAvLyBgY2FyZXRPZmZzZXRgIHN0aWxsIGhlbGQgdGhlaXIgb2xkIHZhbHVlcyDigJQgbGVhdmluZyB0aGUgY2FyZXQgc3R1Y2tcbiAgICAvLyBhdCB0aGUgcHJlLWNsaWNrIHBvc2l0aW9uLlxuICAgIHRoaXMuc3RhdGUkID0gdGhpcy5yYXdTdGF0ZSQucGlwZShcbiAgICAgIG1hcChjb21wdXRlU3RhdGUpLFxuICAgICAgc2hhcmVSZXBsYXkoeyBidWZmZXJTaXplOiAxLCByZWZDb3VudDogdHJ1ZSB9KSxcbiAgICApO1xuXG4gICAgdGhpcy5vcHRpb25zUG9zaXRpb24kLm5leHQob3B0cy5vcHRpb25zUG9zaXRpb24gPz8gXCJiZWxvd1wiKTtcbiAgICB0aGlzLmRyb3Bkb3duJCA9IGNvbWJpbmVMYXRlc3QoW3RoaXMucmF3U3RhdGUkLCB0aGlzLm9wdGlvbnNQb3NpdGlvbiRdKS5waXBlKFxuICAgICAgbWFwKChbcywgb3B0aW9uc1Bvc2l0aW9uXSkgPT4gY29tcHV0ZURyb3Bkb3duKHMsIG9wdGlvbnNQb3NpdGlvbikpLFxuICAgICAgc2hhcmVSZXBsYXkoeyBidWZmZXJTaXplOiAxLCByZWZDb3VudDogdHJ1ZSB9KSxcbiAgICApO1xuICB9XG5cbiAgLy8gPT09IFJlYWQtb25seSBhY2Nlc3NvcnMgPT09XG5cbiAgLyoqIFN0YWJsZSBBUklBIGxpc3Rib3ggSUQgZm9yIHRoZSBkcm9wZG93bi4gUGFzcyB0byBgPHRleHRhcmVhIGFyaWEtY29udHJvbHM9XCIuLi5cIj5gLiAqL1xuICBnZXQgbGlzdGJveElkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuY29yZS5saXN0Ym94SWQ7XG4gIH1cblxuICAvKiogV2hldGhlciBgZGVzdHJveSgpYCBoYXMgYmVlbiBjYWxsZWQuIEFmdGVyIGRlc3RydWN0aW9uIGFsbCBhY3Rpb24gbWV0aG9kcyBuby1vcC4gKi9cbiAgZ2V0IGRlc3Ryb3llZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc0Rlc3Ryb3llZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTeW5jaHJvbm91cyBzbmFwc2hvdCBvZiB0aGUgY29udHJvbGxlcidzIGN1cnJlbnQgcHVibGljIHN0YXRlLiBNaXJyb3JzXG4gICAqIHRoZSBsYXRlc3QgZW1pc3Npb24gb2YgYHN0YXRlJGAuIFVzZWZ1bCBpbiBjYWxsYmFja3Mgd2hlcmUgeW91IGNhbid0XG4gICAqIGBzdWJzY3JpYmVgIChlLmcuIGluc2lkZSBhbiBldmVudCBoYW5kbGVyKS5cbiAgICovXG4gIGdldFN0YXRlKCk6IEFJQXV0b2NvbXBsZXRlQ29udHJvbGxlclN0YXRlIHtcbiAgICByZXR1cm4gY29tcHV0ZVN0YXRlKHRoaXMucmF3U3RhdGUkLnZhbHVlKTtcbiAgfVxuXG4gIC8vID09PSBBY3Rpb24gbWV0aG9kcyAocGFzcy10aHJvdWdoIHRvIHRoZSBjb3JlKSA9PT1cbiAgLy9cbiAgLy8gRXZlcnkgYWN0aW9uIG1ldGhvZCBiZWdpbnMgd2l0aCBhbiBgaXNEZXN0cm95ZWRgIGd1YXJkIHNvIHRoYXQgY2FsbGVyc1xuICAvLyB3aG8gaG9sZCBhIHN0YWxlIHJlZmVyZW5jZSBhZnRlciBgZGVzdHJveSgpYCBkb24ndCBhY2NpZGVudGFsbHkgdHJpZ2dlclxuICAvLyB3b3JrIG9uIGEgdG9ybi1kb3duIGNvcmUuIFRoZSB2YW5pbGxhIGNvcmUgZG9lcyBub3QgZ2F0ZSBpdHMgb3duIG1ldGhvZHNcbiAgLy8gcG9zdC1kaXNwb3NlIOKAlCBgcmVzZXQoKWAsIGBoYW5kbGVUZXh0Q2hhbmdlKClgLCBhbmQgZnJpZW5kcyB3b3VsZCBzdGlsbFxuICAvLyBzY2hlZHVsZSBmZXRjaGVzIG9yIGZpcmUgSFRUUCByZXF1ZXN0cyBhZ2FpbnN0IGFuIGFib3J0ZWQgY29udHJvbGxlcixcbiAgLy8gYW5kIHRoZSByZXNwb25zZXMgd291bGQgaGF2ZSBub3doZXJlIHRvIHN1cmZhY2UgKHJhd1N0YXRlJCBpcyBhbHJlYWR5XG4gIC8vIGNvbXBsZXRlKS4gVGhlIGd1YXJkIG1ha2VzIHRoZSBKU0RvYy1wcm9taXNlZCBcIm5vLW9wIHNpbGVudGx5XCJcbiAgLy8gc2VtYW50aWNzIGFjdHVhbGx5IHRydWUuXG5cbiAgLyoqIENsZWFyIGFsbCBzdGF0ZSwgcm90YXRlIGBzZXNzaW9uX2lkYCwgYW5kIHJlLWZldGNoLiBDYWxsIGFmdGVyIHN1Ym1pdC4gKi9cbiAgcmVzZXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNEZXN0cm95ZWQpIHJldHVybjtcbiAgICB0aGlzLmNvcmUucmVzZXQoKTtcbiAgfVxuXG4gIC8qKiBQaWNrIGEgZHJvcGRvd24gb3B0aW9uIChvciByZXBsYWNlIHRoZSByZS1lZGl0ZWQgcGFyYW0gaWYgaW4gcmUtZWRpdCBtb2RlKS4gKi9cbiAgc2VsZWN0T3B0aW9uKG9wdGlvbjogU3VnZ2VzdGlvbk9wdGlvbik6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzRGVzdHJveWVkKSByZXR1cm47XG4gICAgdGhpcy5jb3JlLnNlbGVjdE9wdGlvbihvcHRpb24pO1xuICB9XG5cbiAgLyoqIFByb21vdGUgdGhlIHBpbGwgYXQgYGluZGV4YCB0byBhY3RpdmUgKGZyb250IG9mIHRoZSBsaXN0KS4gKi9cbiAgc2V0QWN0aXZlUGlsbChpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNEZXN0cm95ZWQpIHJldHVybjtcbiAgICB0aGlzLmNvcmUuc2V0QWN0aXZlUGlsbChpbmRleCk7XG4gIH1cblxuICAvKiogRHJvcCB0aGUgbGFzdCBjb21wbGV0ZWQgcGFyYW0ncyBcImNvbXBsZXRlZFwiIHN0YXR1cy4gVGV4dCBzdGF5cyBhcyBwbGFpbiB0ZXh0LiAqL1xuICByZW1vdmVMYXN0UGFyYW0oKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNEZXN0cm95ZWQpIHJldHVybjtcbiAgICB0aGlzLmNvcmUucmVtb3ZlTGFzdFBhcmFtKCk7XG4gIH1cblxuICAvKiogQ2xlYXIgdGhlIHNoaW1tZXIgYW5pbWF0aW9uIHN0YXRlIGZvciB0aGUgbW9zdC1yZWNlbnRseS1hZGRlZCBwYXJhbS4gKi9cbiAgY2xlYXJOZXdQYXJhbUlkKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzRGVzdHJveWVkKSByZXR1cm47XG4gICAgdGhpcy5jb3JlLmNsZWFyTmV3UGFyYW1JZCgpO1xuICB9XG5cbiAgLyoqIENvbnRyb2xsZWQtbW9kZSBzZXR0ZXIgZm9yIGVkaXRvciB0ZXh0LiAqL1xuICBzZXRWYWx1ZSh0ZXh0OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc0Rlc3Ryb3llZCkgcmV0dXJuO1xuICAgIHRoaXMuY29yZS5zZXRWYWx1ZSh0ZXh0KTtcbiAgfVxuXG4gIC8qKiBDb250cm9sbGVkLW1vZGUgc2V0dGVyIGZvciBjb21wbGV0ZWQgcGFyYW1zLiAqL1xuICBzZXRDb21wbGV0ZWRQYXJhbXMocGFyYW1zOiBDb21wbGV0ZWRQYXJhbVN0YXRlW10pOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc0Rlc3Ryb3llZCkgcmV0dXJuO1xuICAgIHRoaXMuY29yZS5zZXRDb21wbGV0ZWRQYXJhbXMocGFyYW1zKTtcbiAgfVxuXG4gIC8qKiBGb3J3YXJkIHBsYWluLXRleHQgaW5wdXQgZnJvbSB0aGUgY29uc3VtZXIncyBgPHRleHRhcmVhPmAgdG8gdGhlIGNvcmUuICovXG4gIGhhbmRsZVRleHRDaGFuZ2UodmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzRGVzdHJveWVkKSByZXR1cm47XG4gICAgdGhpcy5jb3JlLmhhbmRsZVRleHRDaGFuZ2UodmFsdWUpO1xuICB9XG5cbiAgLyoqIEZvcndhcmQga2V5Ym9hcmQgZXZlbnRzIGZyb20gdGhlIGNvbnN1bWVyJ3MgYDx0ZXh0YXJlYT5gIHRvIHRoZSBjb3JlLiAqL1xuICBoYW5kbGVLZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNEZXN0cm95ZWQpIHJldHVybjtcbiAgICB0aGlzLmNvcmUuaGFuZGxlS2V5RG93bihldmVudCk7XG4gIH1cblxuICAvKiogTm90aWZ5IHRoZSBjb3JlIG9mIGZvY3VzIHN0YXRlLiAqL1xuICBzZXRGb2N1c2VkKGZvY3VzZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc0Rlc3Ryb3llZCkgcmV0dXJuO1xuICAgIHRoaXMuY29yZS5zZXRGb2N1c2VkKGZvY3VzZWQpO1xuICB9XG5cbiAgLyoqIEVudGVyIHJlLWVkaXQgbW9kZSBmb3IgdGhlIGJvbGQgcGFyYW0gd2l0aCB0aGUgZ2l2ZW4gaWQuICovXG4gIHN0YXJ0RWRpdGluZ1BhcmFtKHBhcmFtSWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzRGVzdHJveWVkKSByZXR1cm47XG4gICAgdGhpcy5jb3JlLnN0YXJ0RWRpdGluZ1BhcmFtKHBhcmFtSWQpO1xuICB9XG5cbiAgLyoqIEV4aXQgcmUtZWRpdCBtb2RlIHdpdGhvdXQgY2hhbmdpbmcgdGhlIGJvbGQgcGFyYW0uICovXG4gIGV4aXRFZGl0TW9kZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc0Rlc3Ryb3llZCkgcmV0dXJuO1xuICAgIHRoaXMuY29yZS5leGl0RWRpdE1vZGUoKTtcbiAgfVxuXG4gIC8qKiBGb3J3YXJkIHBvc3QtaW5wdXQgY2FyZXQgcG9zaXRpb24gKGV4dGVuZHMgdGhlIGVkaXQgdGFpbCkuICovXG4gIGhhbmRsZUNhcmV0QWZ0ZXJJbnB1dChvZmZzZXQ6IG51bWJlciB8IG51bGwpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc0Rlc3Ryb3llZCkgcmV0dXJuO1xuICAgIHRoaXMuY29yZS5oYW5kbGVDYXJldEFmdGVySW5wdXQob2Zmc2V0KTtcbiAgfVxuXG4gIC8qKiBGb3J3YXJkIHNlbGVjdGlvbi1vbmx5IGNhcmV0IG1vdmVzIChtYXkgZXhpdCByZS1lZGl0KS4gKi9cbiAgaGFuZGxlQ2FyZXRNb3ZlKG9mZnNldDogbnVtYmVyIHwgbnVsbCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzRGVzdHJveWVkKSByZXR1cm47XG4gICAgdGhpcy5jb3JlLmhhbmRsZUNhcmV0TW92ZShvZmZzZXQpO1xuICB9XG5cbiAgLyoqIFJlcGxhY2UgdGhlIGJvbGQgcGFyYW0gYmVpbmcgcmUtZWRpdGVkLiBSZXR1cm5zIHRydWUgd2hlbiBhcHBsaWVkLiAqL1xuICByZXBsYWNlRWRpdGluZ1JhbmdlKHJlcGxhY2VtZW50OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5pc0Rlc3Ryb3llZCkgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiB0aGlzLmNvcmUucmVwbGFjZUVkaXRpbmdSYW5nZShyZXBsYWNlbWVudCk7XG4gIH1cblxuICAvKiogU2V0IHRoZSBoaWdobGlnaHRlZCBvcHRpb24gaW5kZXggKHR5cGljYWxseSBkcml2ZW4gYnkgaG92ZXIpLiAqL1xuICBzZXRBY3RpdmVEcm9wZG93bkluZGV4KGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc0Rlc3Ryb3llZCkgcmV0dXJuO1xuICAgIHRoaXMuY29yZS5zZXRBY3RpdmVEcm9wZG93bkluZGV4KGluZGV4KTtcbiAgfVxuXG4gIC8vID09PSBMaWZlY3ljbGUgPT09XG5cbiAgLyoqXG4gICAqIEFwcGx5IHJ1bnRpbWUgY2hhbmdlcyB0byBhIHN1YnNldCBvZiBvcHRpb25zLiBFdmVudCBjYWxsYmFja3NcbiAgICogKGBvblN1Ym1pdGAsIGBvbkVycm9yYCwgZXRjLikgY2Fubm90IGJlIHN3YXBwZWQgdGhpcyB3YXkg4oCUIHRoZXkgYXJlXG4gICAqIHJlZ2lzdGVyZWQgb25jZSBhdCBjb25zdHJ1Y3Rpb24gKG1hdGNoZXMgdGhlIFJlYWN0IGhvb2sncyBkZXNpZ24pLiBGb3JcbiAgICogZHluYW1pYyBldmVudCByZWFjdGl2aXR5LCBzdWJzY3JpYmUgdG8gdGhlIGNvcnJlc3BvbmRpbmcgb2JzZXJ2YWJsZVxuICAgKiAoZS5nLiBgdGV4dCRgIGluc3RlYWQgb2YgYG9uQ2hhbmdlYCkuXG4gICAqL1xuICB1cGRhdGUob3B0czogQUlBdXRvY29tcGxldGVDb250cm9sbGVyVXBkYXRlKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNEZXN0cm95ZWQpIHJldHVybjtcbiAgICB0aGlzLmNvcmUudXBkYXRlKG9wdHMpO1xuICAgIGlmIChvcHRzLm9wdGlvbnNQb3NpdGlvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLm9wdGlvbnNQb3NpdGlvbiQubmV4dChvcHRzLm9wdGlvbnNQb3NpdGlvbik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlbGVhc2UgYWxsIHJlc291cmNlcyDigJQgdW5zdWJzY3JpYmVzIGZyb20gdGhlIGNvcmUsIGRlc3Ryb3lzIHRoZSBjb3JlLFxuICAgKiBhbmQgY29tcGxldGVzIHRoZSBpbnRlcm5hbCBzdGF0ZSBzdWJqZWN0LiBTYWZlIHRvIGNhbGwgbXVsdGlwbGUgdGltZXMuXG4gICAqIEFmdGVyIGRlc3RydWN0aW9uLCBhY3Rpb24gbWV0aG9kcyBuby1vcCBzaWxlbnRseS5cbiAgICovXG4gIGRlc3Ryb3koKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNEZXN0cm95ZWQpIHJldHVybjtcbiAgICB0aGlzLmlzRGVzdHJveWVkID0gdHJ1ZTtcbiAgICB0aGlzLnVuc3Vic2NyaWJlQ29yZSgpO1xuICAgIHRoaXMuY29yZS5kZXN0cm95KCk7XG4gICAgdGhpcy5yYXdTdGF0ZSQuY29tcGxldGUoKTtcbiAgfVxufVxuXG4vLyA9PT09PSBQdXJlIGhlbHBlcnMg4oCUIG5vdCBwYXJ0IG9mIHRoZSBwdWJsaWMgc3VyZmFjZSA9PT09PVxuXG4vKipcbiAqIFNoYWxsb3cgYXJyYXkgZXF1YWxpdHkuIFRoZSB2YW5pbGxhIHN0b3JlIHJlYXNzaWducyBhcnJheSBmaWVsZHMgb24gZXZlcnlcbiAqIHdyaXRlIChgc3RvcmUuc2V0KHsgY29tcGxldGVkUGFyYW1zOiBbLi4ucHJldiwgeF0gfSlgKSwgc28gcmVmZXJlbmNlXG4gKiBlcXVhbGl0eSBhbG9uZSB3b3VsZCByZS1lbWl0IGRvd25zdHJlYW0gZXZlbiB3aGVuIHRoZSBjb250ZW50cyBhcmVcbiAqIGlkZW50aWNhbC4gVXNlZCBmb3IgYGNvbXBsZXRlZFBhcmFtcyRgLCBgc3VnZ2VzdGlvbnMkYCwgYHN1Z2dlc3Rpb25QaWxscyRgLFxuICogYW5kIGBzZWdtZW50cyRgLlxuICovXG5mdW5jdGlvbiBhcnJFcTxUPihhOiByZWFkb25seSBUW10sIGI6IHJlYWRvbmx5IFRbXSk6IGJvb2xlYW4ge1xuICBpZiAoYSA9PT0gYikgcmV0dXJuIHRydWU7XG4gIGlmIChhLmxlbmd0aCAhPT0gYi5sZW5ndGgpIHJldHVybiBmYWxzZTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKGFbaV0gIT09IGJbaV0pIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gY29tcHV0ZVVpTG9hZGluZyhzOiBDb3JlU3RhdGUpOiBib29sZWFuIHtcbiAgcmV0dXJuIHMuaXNMb2FkaW5nICYmICFzLmVkaXRpbmdQYXJhbSAmJiAhcy5pblNlbGVjdGlvbkFuaW1hdGlvbjtcbn1cblxuZnVuY3Rpb24gY29tcHV0ZVN0YXRlKHM6IENvcmVTdGF0ZSk6IEFJQXV0b2NvbXBsZXRlQ29udHJvbGxlclN0YXRlIHtcbiAgcmV0dXJuIHtcbiAgICB0ZXh0OiBzLnRleHQsXG4gICAgY29tcGxldGVkUGFyYW1zOiBzLmNvbXBsZXRlZFBhcmFtcyxcbiAgICBzdWdnZXN0aW9uUGlsbHM6IHMuYWN0aW9uYWJsZVN1Z2dlc3Rpb25zLFxuICAgIHNlZ21lbnRzOiBzLnNlZ21lbnRzLFxuICAgIG5ld1BhcmFtSWQ6IHMubmV3UGFyYW1JZCxcbiAgICBzdWdnZXN0aW9uczogcy5zdWdnZXN0aW9ucyxcbiAgICBhY3RpdmVJbmRleDogcy5hY3RpdmVEcm9wZG93bkluZGV4LFxuICAgIGlzTG9hZGluZzogY29tcHV0ZVVpTG9hZGluZyhzKSxcbiAgICBpc1JlYWR5OiBzLmlzUmVhZHksXG4gICAgaXNGb2N1c2VkOiBzLmlzRm9jdXNlZCxcbiAgICBpc0Ryb3Bkb3duT3Blbjogcy5pc0Ryb3Bkb3duT3BlbixcbiAgICBwbGFjZWhvbGRlclRleHQ6IHMucGxhY2Vob2xkZXJUZXh0LFxuICAgIGVycm9yOiBzLmVycm9yLFxuICAgIGVkaXRpbmdQYXJhbTogcy5lZGl0aW5nUGFyYW0sXG4gICAgZWRpdGluZ0FuY2hvcjogcy5lZGl0aW5nQW5jaG9yLFxuICAgIGNhcmV0T2Zmc2V0OiBzLmNhcmV0T2Zmc2V0LFxuICB9O1xufVxuXG5mdW5jdGlvbiBjb21wdXRlRHJvcGRvd24oXG4gIHM6IENvcmVTdGF0ZSxcbiAgb3B0aW9uc1Bvc2l0aW9uOiBcImFib3ZlXCIgfCBcImJlbG93XCIsXG4pOiBBSUF1dG9jb21wbGV0ZURyb3Bkb3duU3RhdGUge1xuICBjb25zdCBlZGl0aW5nUGFyYW0gPSBzLmVkaXRpbmdQYXJhbTtcbiAgY29uc3QgYWN0aXZlU3VnZ2VzdGlvbiA9IHMuYWN0aW9uYWJsZVN1Z2dlc3Rpb25zWzBdO1xuICBjb25zdCBkcm9wZG93blBpbGw6IFN1Z2dlc3Rpb24gfCBudWxsID0gZWRpdGluZ1BhcmFtXG4gICAgPyB7XG4gICAgICAgIHR5cGU6IGVkaXRpbmdQYXJhbS5zdWdnZXN0aW9uVHlwZSxcbiAgICAgICAgdGV4dDogZWRpdGluZ1BhcmFtLnN1Z2dlc3Rpb25QbGFjZWhvbGRlcixcbiAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIG9wdGlvbnM6IGVkaXRpbmdQYXJhbS5vcHRpb25zLFxuICAgICAgfVxuICAgIDogbnVsbDtcbiAgY29uc3QgZHJvcGRvd25BY3RpdmVQaWxsID0gZHJvcGRvd25QaWxsID8/IGFjdGl2ZVN1Z2dlc3Rpb247XG4gIGNvbnN0IGRyb3Bkb3duUGlsbHMgPSBkcm9wZG93blBpbGwgPyBbZHJvcGRvd25QaWxsXSA6IHMuYWN0aW9uYWJsZVN1Z2dlc3Rpb25zO1xuICByZXR1cm4ge1xuICAgIHN1Z2dlc3Rpb25zOiBkcm9wZG93bkFjdGl2ZVBpbGwgPyBbeyAuLi5kcm9wZG93bkFjdGl2ZVBpbGwsIG9wdGlvbnM6IHMuZmlsdGVyZWRPcHRpb25zIH1dIDogW10sXG4gICAgYWN0aXZlSW5kZXg6IHMuYWN0aXZlRHJvcGRvd25JbmRleCxcbiAgICBpc09wZW46IHMuaXNEcm9wZG93bk9wZW4sXG4gICAgcGlsbHM6IGRyb3Bkb3duUGlsbHMsXG4gICAgaXNBY3RpdmVQaWxsU2VsZWN0ZWQ6IHMuaXNBY3RpdmVQaWxsU2VsZWN0ZWQsXG4gICAgaXNMb2FkaW5nOiBjb21wdXRlVWlMb2FkaW5nKHMpLFxuICAgIGlzSW5wdXRFbXB0eTogcy50ZXh0LnRyaW0oKS5sZW5ndGggPT09IDAsXG4gICAgb3B0aW9uc1Bvc2l0aW9uLFxuICB9O1xufVxuIl19
|
|
324
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWktYXV0b2NvbXBsZXRlLmNvbnRyb2xsZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2NvbnRyb2xsZXIvYWktYXV0b2NvbXBsZXRlLmNvbnRyb2xsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLGNBQWMsSUFBSSxrQkFBa0IsR0FLckMsTUFBTSxxQ0FBcUMsQ0FBQztBQUM3QyxPQUFPLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxHQUFHLEVBQW1CLFdBQVcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQU96RixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTVDOzs7Ozs7Ozs7Ozs7R0FZRztBQUNILE1BQU0sT0FBTyx3QkFBd0I7SUF3RW5DOzs7T0FHRztJQUNILFlBQVksT0FBd0MsRUFBRTtRQXpFdEQsNEVBQTRFO1FBQzVFLDRFQUE0RTtRQUM1RSxtRUFBbUU7UUFDbEQscUJBQWdCLEdBQUcsSUFBSSxlQUFlLENBQW9CLE9BQU8sQ0FBQyxDQUFDO1FBRTVFLGdCQUFXLEdBQUcsS0FBSyxDQUFDO1FBcUUxQixJQUFJLE9BQU8sUUFBUSxLQUFLLFdBQVcsRUFBRTtZQUNuQyxNQUFNLElBQUksS0FBSyxDQUNiLDJEQUEyRDtnQkFDekQsd0VBQXdFLENBQzNFLENBQUM7U0FDSDtRQUVELHdFQUF3RTtRQUN4RSxxRUFBcUU7UUFDckUsTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUUzQyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksa0JBQWtCLENBQUMsSUFBSSxFQUFFO1lBQ3ZDLEdBQUcsSUFBSTtZQUNQLFVBQVUsRUFBRSxVQUFVO1lBQ3RCLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxJQUFJLGNBQWM7WUFDckMsaUVBQWlFO1lBQ2pFLG9FQUFvRTtZQUNwRSwyQ0FBMkM7WUFDM0MsZUFBZSxFQUFFLElBQUks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R0FBc0IsWUFBWTtRQUNsRCxDQUFDLENBQUM7WUFDRSxJQUFJLEVBQUUsWUFBWSxDQUFDLGNBQWM7WUFDakMsSUFBSSxFQUFFLFlBQVksQ0FBQyxxQkFBcUI7WUFDeEMsUUFBUSxFQUFFLElBQUk7WUFDZCxPQUFPLEVBQUUsWUFBWSxDQUFDLE9BQU87U0FDOUI7UUFDSCxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQ1QsTUFBTSxrQkFBa0IsR0FBRyxZQUFZLElBQUksZ0JBQWdCLENBQUM7SUFDNUQsTUFBTSxhQUFhLEdBQUcsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMscUJBQXFCLENBQUM7SUFDOUUsT0FBTztRQUNMLFdBQVcsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsa0JBQWtCLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQyxlQUFlLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO1FBQzlGLFdBQVcsRUFBRSxDQUFDLENBQUMsbUJBQW1CO1FBQ2xDLE1BQU0sRUFBRSxDQUFDLENBQUMsY0FBYztRQUN4QixLQUFLLEVBQUUsYUFBYTtRQUNwQixvQkFBb0IsRUFBRSxDQUFDLENBQUMsb0JBQW9CO1FBQzVDLFNBQVMsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7UUFDOUIsWUFBWSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsTUFBTSxLQUFLLENBQUM7UUFDeEMsZUFBZTtLQUNoQixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIHR5cGUgQ29tcGxldGVkUGFyYW1TdGF0ZSxcbiAgQUlBdXRvY29tcGxldGUgYXMgQ29yZUFJQXV0b2NvbXBsZXRlLFxuICB0eXBlIENvcmVTdGF0ZSxcbiAgdHlwZSBTZWdtZW50LFxuICB0eXBlIFN1Z2dlc3Rpb24sXG4gIHR5cGUgU3VnZ2VzdGlvbk9wdGlvbixcbn0gZnJvbSBcIkBtYWdpY3gtZW5nL2FpLWF1dG9jb21wbGV0ZS12YW5pbGxhXCI7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIG1hcCwgdHlwZSBPYnNlcnZhYmxlLCBzaGFyZVJlcGxheSB9IGZyb20gXCJyeGpzXCI7XG5pbXBvcnQgdHlwZSB7XG4gIEFJQXV0b2NvbXBsZXRlQ29udHJvbGxlck9wdGlvbnMsXG4gIEFJQXV0b2NvbXBsZXRlQ29udHJvbGxlclN0YXRlLFxuICBBSUF1dG9jb21wbGV0ZUNvbnRyb2xsZXJVcGRhdGUsXG4gIEFJQXV0b2NvbXBsZXRlRHJvcGRvd25TdGF0ZSxcbn0gZnJvbSBcIi4uL3NoYXJlZC90eXBlc1wiO1xuaW1wb3J0IHsgZGVyaXZlRmllbGQgfSBmcm9tIFwiLi9vYnNlcnZhYmxlc1wiO1xuXG4vKipcbiAqIFRpZXIgMiBsb2dpYyBzdXJmYWNlIGZvciBgQG1hZ2ljeC1lbmcvYWktYXV0b2NvbXBsZXRlLWFuZ3VsYXJgIOKAlCB0aGUgQW5ndWxhclxuICogZXF1aXZhbGVudCBvZiBSZWFjdCdzIGB1c2VBSUF1dG9jb21wbGV0ZSgpYCBob29rLiBXcmFwcyBhIGhlYWRsZXNzXG4gKiBgQG1hZ2ljeC1lbmcvYWktYXV0b2NvbXBsZXRlLXZhbmlsbGFgIGNvcmUgYW5kIGV4cG9zZXMgaXRzIHN0YXRlIGFzIFJ4SlNcbiAqIG9ic2VydmFibGVzIHBsdXMgdGhpbiBhY3Rpb24gbWV0aG9kcy5cbiAqXG4gKiBQZXIgVERCIMKnMy4zLCB0aGUgY29udHJvbGxlciBpcyBjb25zdW1lci1tYW5hZ2VkIOKAlCB0aGUgY29uc3VtZXIgY3JlYXRlcyBpdFxuICogd2l0aCBgbmV3YCwgaG9sZHMgdGhlIHJlZmVyZW5jZSwgYW5kICoqbXVzdCBjYWxsIGBkZXN0cm95KClgKiogaW4gdGhlaXJcbiAqIG93biBgbmdPbkRlc3Ryb3lgLiBUaGUgVGllciAxIGA8YWktYXV0b2NvbXBsZXRlPmAgY29tcG9uZW50IGRvZXMgdGhpc1xuICogYXV0b21hdGljYWxseTsgVGllciAyIGNvbnN1bWVycyBkbyBub3QgZ2V0IGF1dG8tY2xlYW51cC5cbiAqXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjbGFzcyBBSUF1dG9jb21wbGV0ZUNvbnRyb2xsZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IGNvcmU6IENvcmVBSUF1dG9jb21wbGV0ZTtcbiAgcHJpdmF0ZSByZWFkb25seSByYXdTdGF0ZSQ6IEJlaGF2aW9yU3ViamVjdDxDb3JlU3RhdGU+O1xuICAvLyBvcHRpb25zUG9zaXRpb24gaXNuJ3QgcGFydCBvZiBDb3JlU3RhdGUgKGl0J3MgYSBjb3JlIG9wdGlvbiksIHNvIHRyYWNrIGl0XG4gIC8vIGhlcmUgYW5kIGZvbGQgaXQgaW50byBgZHJvcGRvd24kYCBzbyB0aGUgZHJvcGRvd24gY2FuIHJlYWQgcGxhY2VtZW50IGZyb21cbiAgLy8gdGhlIGNvbnRyb2xsZXIg4oCUIGNvbmZpZ3VyZWQgb25jZSwga2VwdCBpbiBzeW5jIHRocm91Z2ggdXBkYXRlKCkuXG4gIHByaXZhdGUgcmVhZG9ubHkgb3B0aW9uc1Bvc2l0aW9uJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8XCJhYm92ZVwiIHwgXCJiZWxvd1wiPihcImJlbG93XCIpO1xuICBwcml2YXRlIHJlYWRvbmx5IHVuc3Vic2NyaWJlQ29yZTogKCkgPT4gdm9pZDtcbiAgcHJpdmF0ZSBpc0Rlc3Ryb3llZCA9IGZhbHNlO1xuXG4gIC8vID09PSBQZXItZmllbGQgb2JzZXJ2YWJsZXMgPT09XG4gIC8vIEVhY2ggb25lIHJ1bnMgdGhyb3VnaCBkZXJpdmVGaWVsZCwgd2hpY2ggYmFrZXMgaW4gZGlzdGluY3RVbnRpbENoYW5nZWRcbiAgLy8gYW5kIHNoYXJlUmVwbGF5KHsgYnVmZmVyU2l6ZTogMSwgcmVmQ291bnQ6IHRydWUgfSkgcGVyIMKnMTkuNC5cblxuICAvKiogUGxhaW4tdGV4dCBjb250ZW50IG9mIHRoZSBlZGl0b3IuICovXG4gIHJlYWRvbmx5IHRleHQkOiBPYnNlcnZhYmxlPHN0cmluZz47XG4gIC8qKiBDb21wbGV0ZWQgKGJvbGQpIHBhcmFtcyBjdXJyZW50bHkgaW4gdGhlIGVkaXRvci4gKi9cbiAgcmVhZG9ubHkgY29tcGxldGVkUGFyYW1zJDogT2JzZXJ2YWJsZTxDb21wbGV0ZWRQYXJhbVN0YXRlW10+O1xuICAvKiogQWN0aW9uYWJsZSBzdWdnZXN0aW9uIHBpbGxzIChmaXJzdCBvbmUgaXMgdGhlIGFjdGl2ZSBwaWxsKS4gKi9cbiAgcmVhZG9ubHkgc3VnZ2VzdGlvblBpbGxzJDogT2JzZXJ2YWJsZTxTdWdnZXN0aW9uW10+O1xuICAvKiogVGV4dCArIGNvbXBsZXRlZC1wYXJhbSBzZWdtZW50cyBmb3IgcmVuZGVyaW5nIHRoZSBlZGl0b3IgYm9keS4gKi9cbiAgcmVhZG9ubHkgc2VnbWVudHMkOiBPYnNlcnZhYmxlPFNlZ21lbnRbXT47XG4gIC8qKiBJRCBvZiB0aGUgbW9zdC1yZWNlbnRseS1wcm9tb3RlZCBwYXJhbSAoZHJpdmVzIHNoaW1tZXIgYW5pbWF0aW9uKS4gKi9cbiAgcmVhZG9ubHkgbmV3UGFyYW1JZCQ6IE9ic2VydmFibGU8c3RyaW5nIHwgbnVsbD47XG4gIC8qKiBBbGwgc3VnZ2VzdGlvbnMgZnJvbSB0aGUgc2VydmVyIChpbmNsdWRpbmcgbm9uLWFjdGlvbmFibGUgb25lcykuICovXG4gIHJlYWRvbmx5IHN1Z2dlc3Rpb25zJDogT2JzZXJ2YWJsZTxTdWdnZXN0aW9uW10+O1xuICAvKiogQ3VycmVudGx5IGhpZ2hsaWdodGVkIGRyb3Bkb3duIG9wdGlvbiBpbmRleC4gLTEgPSBub25lLiAqL1xuICByZWFkb25seSBhY3RpdmVJbmRleCQ6IE9ic2VydmFibGU8bnVtYmVyPjtcbiAgLyoqXG4gICAqIFVJLXZpc2libGUgbG9hZGluZyBmbGFnIOKAlCBzdXBwcmVzc2VkIGR1cmluZyB0aGUgcG9zdC1zZWxlY3Qgc3RyZWFrXG4gICAqIGFuaW1hdGlvbiBhbmQgZHVyaW5nIHJlLWVkaXQgKGNhY2hlZCBvcHRpb25zIHN0YXkgdmlzaWJsZSB0aGVyZSkuIFVzZVxuICAgKiB0aGlzIGluc3RlYWQgb2YgdGhlIHJhdyBjb3JlIHN0YXRlIGZvciBhbnkgbG9hZGluZy1za2VsZXRvbiBiaW5kaW5nLlxuICAgKi9cbiAgcmVhZG9ubHkgaXNMb2FkaW5nJDogT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgLyoqIFNlcnZlci1yZXBvcnRlZCBcInF1ZXJ5IGlzIGNvbXBsZXRlXCIgZmxhZy4gKi9cbiAgcmVhZG9ubHkgaXNSZWFkeSQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gIC8qKiBXaGV0aGVyIHRoZSBlZGl0b3IgY3VycmVudGx5IGhhcyBmb2N1cy4gKi9cbiAgcmVhZG9ubHkgaXNGb2N1c2VkJDogT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgLyoqIFdoZXRoZXIgdGhlIGRyb3Bkb3duIHNob3VsZCBjdXJyZW50bHkgYmUgdmlzaWJsZS4gKi9cbiAgcmVhZG9ubHkgaXNEcm9wZG93bk9wZW4kOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuICAvKipcbiAgICogV2hldGhlciB0aGUgYWN0aXZlIChsZWFkaW5nKSBwaWxsIHNob3VsZCByZW5kZXIgc2VsZWN0ZWQgKGZ1bGwgb3BhY2l0eSlcbiAgICogcmF0aGVyIHRoYW4gdGhlIGRlLWVtcGhhc2l6ZWQgYGZpcnN0YCB0aWVyLiBBdXRvIHRyaWdnZXIg4oeSIHRydWUgb25seSB3aGlsZVxuICAgKiBhIGRyb3Bkb3duIG9wdGlvbiBpcyBoaWdobGlnaHRlZDsgbWFudWFsIOKHkiB0cnVlIG9uY2UgdGhlIHBpbGwgaXMgdGFwcGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgaXNBY3RpdmVQaWxsU2VsZWN0ZWQkOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuICAvKiogU2VydmVyLXN1Z2dlc3RlZCBwbGFjZWhvbGRlciB0ZXh0IGZvciB0aGUgZWRpdG9yLiAqL1xuICByZWFkb25seSBwbGFjZWhvbGRlclRleHQkOiBPYnNlcnZhYmxlPHN0cmluZz47XG4gIC8qKiBMYXN0IGZldGNoIGVycm9yLCBvciBudWxsLiAqL1xuICByZWFkb25seSBlcnJvciQ6IE9ic2VydmFibGU8RXJyb3IgfCBudWxsPjtcbiAgLyoqIFBhcmFtIGN1cnJlbnRseSBiZWluZyByZS1lZGl0ZWQsIG9yIG51bGwuICovXG4gIHJlYWRvbmx5IGVkaXRpbmdQYXJhbSQ6IE9ic2VydmFibGU8Q29tcGxldGVkUGFyYW1TdGF0ZSB8IG51bGw+O1xuICAvKiogUGxhaW4tdGV4dCBvZmZzZXQgd2hlcmUgdGhlIGVkaXQgcmVnaW9uIHN0YXJ0cywgb3IgbnVsbC4gKi9cbiAgcmVhZG9ubHkgZWRpdGluZ0FuY2hvciQ6IE9ic2VydmFibGU8bnVtYmVyIHwgbnVsbD47XG4gIC8qKiBMaXZlIGNhcmV0IG9mZnNldCB3aXRoaW4gdGhlIGVkaXRvci4gKi9cbiAgcmVhZG9ubHkgY2FyZXRPZmZzZXQkOiBPYnNlcnZhYmxlPG51bWJlciB8IG51bGw+O1xuXG4gIC8vID09PSBDb21wb3NpdGUgb2JzZXJ2YWJsZXMgPT09XG5cbiAgLyoqXG4gICAqIFNuYXBzaG90IG9mIGV2ZXJ5IHB1YmxpYyBmaWVsZCBpbiBvbmUgb2JqZWN0LiBDb252ZW5pZW50IGZvclxuICAgKiBgKm5nSWY9XCJjdHJsLnN0YXRlJCB8IGFzeW5jIGFzIHN0YXRlXCJgIHRlbXBsYXRpbmcg4oCUIGFsaWFzZXMgYWxsIGZpZWxkc1xuICAgKiB1bmRlciBhIHNpbmdsZSBzdWJzY3JpcHRpb24gaW5zdGVhZCBvZiBtdWx0aXBsZSBgfCBhc3luY2AgcGlwZXMuXG4gICAqL1xuICByZWFkb25seSBzdGF0ZSQ6IE9ic2VydmFibGU8QUlBdXRvY29tcGxldGVDb250cm9sbGVyU3RhdGU+O1xuXG4gIC8qKlxuICAgKiBDb21wb3NpdGUgc3RhdGUgZm9yIHRoZSBkcm9wZG93biB2aWV3LiBUaWVyIDIgY29uc3VtZXJzIHNwcmVhZCB0aGlzIGludG9cbiAgICogYDxhaS1hdXRvY29tcGxldGUtZHJvcGRvd24+YDsgVGllciAxIHVzZXMgdGhlIHNhbWUgc2hhcGUgaW50ZXJuYWxseS5cbiAgICovXG4gIHJlYWRvbmx5IGRyb3Bkb3duJDogT2JzZXJ2YWJsZTxBSUF1dG9jb21wbGV0ZURyb3Bkb3duU3RhdGU+O1xuXG4gIC8qKlxuICAgKiBUaHJvd3MgaWYgaW52b2tlZCBvdXRzaWRlIGEgYnJvd3NlciBlbnZpcm9ubWVudC4gRm9yIFNTUiAvIEFuZ3VsYXJcbiAgICogVW5pdmVyc2FsLCBnYXRlIGNvbnN0cnVjdGlvbiB3aXRoIGBpc1BsYXRmb3JtQnJvd3NlcmAg4oCUIHNlZSBUREIgwqcxNi4zLlxuICAgKi9cbiAgY29uc3RydWN0b3Iob3B0czogQUlBdXRvY29tcGxldGVDb250cm9sbGVyT3B0aW9ucyA9IHt9KSB7XG4gICAgaWYgKHR5cGVvZiBkb2N1bWVudCA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcIkFJQXV0b2NvbXBsZXRlQ29udHJvbGxlciByZXF1aXJlcyBhIGJyb3dzZXIgZW52aXJvbm1lbnQuIFwiICtcbiAgICAgICAgICBcIkZvciBTU1IgLyBBbmd1bGFyIFVuaXZlcnNhbCwgZ2F0ZSBjb25zdHJ1Y3Rpb24gd2l0aCBpc1BsYXRmb3JtQnJvd3Nlci5cIixcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gSGVhZGxlc3MgbW9kZSBuZXZlciByZW5kZXJzIHRvIHRoZSBob3N0LCBzbyBhIHRocm93YXdheSBkaXYgaXMgZmluZSDigJRcbiAgICAvLyBpdCdzIHJlcXVpcmVkIGJ5IHRoZSBjb3JlJ3Mgc2lnbmF0dXJlIGZvciBzeW1tZXRyeSB3aXRoIGZ1bGwgbW9kZS5cbiAgICBjb25zdCBob3N0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcblxuICAgIHRoaXMuY29yZSA9IG5ldyBDb3JlQUlBdXRvY29tcGxldGUoaG9zdCwge1xuICAgICAgLi4ub3B0cyxcbiAgICAgIHJlbmRlck1vZGU6IFwiaGVhZGxlc3NcIixcbiAgICAgIHNvdXJjZTogb3B0cy5zb3VyY2UgPz8gXCJoZWFkbGVzcy1zZGtcIixcbiAgICAgIC8vIEhlYWRsZXNzIG1vZGUgbmV2ZXIgcmVuZGVycyB0aGUgZHJvcGRvd24gRE9NLCBidXQgdGhlIGtleWJvYXJkXG4gICAgICAvLyBjb250cm9sbGVyIHN0aWxsIHJlYWRzIGBvcHRpb25zUG9zaXRpb25gIHRvIGRlY2lkZSB3aGljaCB2ZXJ0aWNhbFxuICAgICAgLy8gYXJyb3cgb3BlbnMgdGhlIGRyb3Bkb3duIGZyb20gdGhlIGlucHV0LlxuICAgICAgb3B0aW9uc1Bvc2l0aW9uOiBvcHRzLm9wdGlvbnNQb3NpdGlvbiA/PyBcImJlbG93XCIsXG4gICAgfSk7XG5cbiAgICB0aGlzLnJhd1N0YXRlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Q29yZVN0YXRlPih0aGlzLmNvcmUuZ2V0U3RhdGUoKSk7XG4gICAgLy8gUHVzaCB0aGUgc3RvcmUncyAqY3VycmVudCogc3RhdGUsIG5vdCB0aGUgc25hcHNob3QgdGhlIGxpc3RlbmVyIHdhc1xuICAgIC8vIGhhbmRlZC4gVGhlIGNvcmUgbm90aWZpZXMgbGlzdGVuZXJzIHN5bmNocm9ub3VzbHksIGFuZCBzb21lIGFjdGlvbnNcbiAgICAvLyB0cmlnZ2VyIHJlZW50cmFudCBgc3RvcmUuc2V0YCBjYWxscyAoZS5nLiB0eXBpbmcgYSBub24tbWF0Y2hpbmcgY2hhclxuICAgIC8vIGR1cmluZyByZS1lZGl0IG1ha2VzIHRoZSBjb3JlIHN5bmNocm9ub3VzbHkgZXhpdCByZS1lZGl0IGFuZCBraWNrIG9mZiBhXG4gICAgLy8gZmV0Y2gpLlxuICAgIC8vXG4gICAgLy8gVGhlIGNvcmUncyBzdG9yZSB1c2VkIHRvIGRlbGl2ZXIgc3VjaCBhIG5lc3RlZCBzZXQgaW5saW5lIGFuZCB0aGVuXG4gICAgLy8gcmVzdW1lIHRoZSBvdXRlciBsaXN0ZW5lciBsb29wLCBzbyBhIGxpc3RlbmVyIGNvdWxkIGJlIGhhbmRlZCBhbiBvbGRlclxuICAgIC8vIHN0YXRlIChzdGlsbCBpbiByZS1lZGl0KSAqYWZ0ZXIqIGEgbmV3ZXIgb25lIChyZS1lZGl0IGV4aXRlZCkg4oCUIHdoaWNoXG4gICAgLy8gcmVzdXJyZWN0ZWQgYSBzdGFsZSBgZWRpdGluZ1BhcmFtYCBhbmQgcmV0cmlnZ2VyZWQgdGhlIGVkaXRvcidzIHJlLWVkaXRcbiAgICAvLyBjYXJldC1wYXJrLCB5YW5raW5nIHRoZSBjYXJldCBiYWNrIHRvIHdoZXJlIHJlLWVkaXRpbmcgc3RhcnRlZC4gVGhlXG4gICAgLy8gc3RvcmUgbm93IHF1ZXVlcyBub3RpZmljYXRpb25zIGFuZCBkcmFpbnMgdGhlbSBpbiBvcmRlciwgc28gdGhhdFxuICAgIC8vIG91dC1vZi1vcmRlciBkZWxpdmVyeSBjYW4gbm8gbG9uZ2VyIGhhcHBlbiBhdCB0aGUgc291cmNlLlxuICAgIC8vXG4gICAgLy8gUmVhZGluZyBgZ2V0U3RhdGUoKWAgYXQgZW1pc3Npb24gdGltZSBpcyBrZXB0IGFzIGJlbHQtYW5kLWJyYWNlczogaXRcbiAgICAvLyBjb3N0cyBub3RoaW5nIChkaXN0aW5jdFVudGlsQ2hhbmdlZCBkb3duc3RyZWFtIGRyb3BzIHRoZSBkdXBsaWNhdGVcbiAgICAvLyBlbWlzc2lvbnMpIGFuZCBrZWVwcyB0aGlzIGJyaWRnZSBjb3JyZWN0IGZvciBhbnkgZnV0dXJlIGNvbnN1bWVyIHRoYXRcbiAgICAvLyBlbWl0cyBtaWQtY2FzY2FkZS4gUmVhY3QgbmVlZHMgbmVpdGhlciwgc2luY2UgaXQgYmF0Y2hlcyByZW5kZXJzIGFuZFxuICAgIC8vIGdhdGVzIGl0cyBjYXJldCBlZmZlY3RzIG9uIGRlcGVuZGVuY2llcy5cbiAgICB0aGlzLnVuc3Vic2NyaWJlQ29yZSA9IHRoaXMuY29yZS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgaWYgKCF0aGlzLmlzRGVzdHJveWVkKSB0aGlzLnJhd1N0YXRlJC5uZXh0KHRoaXMuY29yZS5nZXRTdGF0ZSgpKTtcbiAgICB9KTtcblxuICAgIC8vID09PSBQZXItZmllbGQgb2JzZXJ2YWJsZXMgPT09XG4gICAgLy8gQXJyYXktdmFsdWVkIGZpZWxkcyB1c2Ugc2hhbGxvdyBlcXVhbGl0eS4gVGhlIHZhbmlsbGEgc3RvcmUgc3ByZWFkcyBvblxuICAgIC8vIGV2ZXJ5IHdyaXRlIChgc3RvcmUuc2V0KHsgY29tcGxldGVkUGFyYW1zOiBbLi4uXSB9KWApLCBzbyByZWZlcmVuY2VcbiAgICAvLyBlcXVhbGl0eSB3b3VsZCByZS1maXJlIGRvd25zdHJlYW0gc3Vic2NyaWJlcnMgb24gZXZlcnkgc3RhdGUgdGljayBldmVuXG4gICAgLy8gd2hlbiB0aGUgYXJyYXkncyBjb250ZW50cyBhcmUgdW5jaGFuZ2VkLiBUaGUgb3RoZXIgZmllbGRzIGFyZVxuICAgIC8vIHByaW1pdGl2ZXMgb3Igc3RhYmxlIG9iamVjdCByZWZlcmVuY2VzLCBzbyBkZWZhdWx0IGlkZW50aXR5IGVxdWFsaXR5XG4gICAgLy8gd29ya3MgZmluZS5cbiAgICB0aGlzLnRleHQkID0gZGVyaXZlRmllbGQodGhpcy5yYXdTdGF0ZSQsIChzKSA9PiBzLnRleHQpO1xuICAgIHRoaXMuY29tcGxldGVkUGFyYW1zJCA9IGRlcml2ZUZpZWxkKHRoaXMucmF3U3RhdGUkLCAocykgPT4gcy5jb21wbGV0ZWRQYXJhbXMsIGFyckVxKTtcbiAgICB0aGlzLnN1Z2dlc3Rpb25QaWxscyQgPSBkZXJpdmVGaWVsZCh0aGlzLnJhd1N0YXRlJCwgKHMpID0+IHMuYWN0aW9uYWJsZVN1Z2dlc3Rpb25zLCBhcnJFcSk7XG4gICAgdGhpcy5zZWdtZW50cyQgPSBkZXJpdmVGaWVsZCh0aGlzLnJhd1N0YXRlJCwgKHMpID0+IHMuc2VnbWVudHMsIGFyckVxKTtcbiAgICB0aGlzLm5ld1BhcmFtSWQkID0gZGVyaXZlRmllbGQodGhpcy5yYXdTdGF0ZSQsIChzKSA9PiBzLm5ld1BhcmFtSWQpO1xuICAgIHRoaXMuc3VnZ2VzdGlvbnMkID0gZGVyaXZlRmllbGQodGhpcy5yYXdTdGF0ZSQsIChzKSA9PiBzLnN1Z2dlc3Rpb25zLCBhcnJFcSk7XG4gICAgdGhpcy5hY3RpdmVJbmRleCQgPSBkZXJpdmVGaWVsZCh0aGlzLnJhd1N0YXRlJCwgKHMpID0+IHMuYWN0aXZlRHJvcGRvd25JbmRleCk7XG4gICAgdGhpcy5pc0xvYWRpbmckID0gZGVyaXZlRmllbGQodGhpcy5yYXdTdGF0ZSQsIGNvbXB1dGVVaUxvYWRpbmcpO1xuICAgIHRoaXMuaXNSZWFkeSQgPSBkZXJpdmVGaWVsZCh0aGlzLnJhd1N0YXRlJCwgKHMpID0+IHMuaXNSZWFkeSk7XG4gICAgdGhpcy5pc0ZvY3VzZWQkID0gZGVyaXZlRmllbGQodGhpcy5yYXdTdGF0ZSQsIChzKSA9PiBzLmlzRm9jdXNlZCk7XG4gICAgdGhpcy5pc0Ryb3Bkb3duT3BlbiQgPSBkZXJpdmVGaWVsZCh0aGlzLnJhd1N0YXRlJCwgKHMpID0+IHMuaXNEcm9wZG93bk9wZW4pO1xuICAgIHRoaXMuaXNBY3RpdmVQaWxsU2VsZWN0ZWQkID0gZGVyaXZlRmllbGQodGhpcy5yYXdTdGF0ZSQsIChzKSA9PiBzLmlzQWN0aXZlUGlsbFNlbGVjdGVkKTtcbiAgICB0aGlzLnBsYWNlaG9sZGVyVGV4dCQgPSBkZXJpdmVGaWVsZCh0aGlzLnJhd1N0YXRlJCwgKHMpID0+IHMucGxhY2Vob2xkZXJUZXh0KTtcbiAgICB0aGlzLmVycm9yJCA9IGRlcml2ZUZpZWxkKHRoaXMucmF3U3RhdGUkLCAocykgPT4gcy5lcnJvcik7XG4gICAgdGhpcy5lZGl0aW5nUGFyYW0kID0gZGVyaXZlRmllbGQodGhpcy5yYXdTdGF0ZSQsIChzKSA9PiBzLmVkaXRpbmdQYXJhbSk7XG4gICAgdGhpcy5lZGl0aW5nQW5jaG9yJCA9IGRlcml2ZUZpZWxkKHRoaXMucmF3U3RhdGUkLCAocykgPT4gcy5lZGl0aW5nQW5jaG9yKTtcbiAgICB0aGlzLmNhcmV0T2Zmc2V0JCA9IGRlcml2ZUZpZWxkKHRoaXMucmF3U3RhdGUkLCAocykgPT4gcy5jYXJldE9mZnNldCk7XG5cbiAgICAvLyA9PT0gQ29tcG9zaXRlIG9ic2VydmFibGVzID09PVxuICAgIC8vIFByb2plY3QgZGlyZWN0bHkgb2ZmIGByYXdTdGF0ZSRgIHdpdGggYSBzaW5nbGUgbWFwKCkgc28gZWFjaCBzdG9yZVxuICAgIC8vIHRpY2sgcHJvZHVjZXMgZXhhY3RseSBPTkUgY29oZXJlbnQgc3RhdGUkIGVtaXNzaW9uLiBVc2luZ1xuICAgIC8vIGBjb21iaW5lTGF0ZXN0YCBvdmVyIHRoZSBwZXItZmllbGQgb2JzZXJ2YWJsZXMgaGVyZSB3b3VsZCBmaXJlIG9uZVxuICAgIC8vIGVtaXNzaW9uIHBlciBpbm5lci1zb3VyY2UgdGljayAodXAgdG8gTiBwZXIgc3RvcmUgdXBkYXRlKSwgYW5kIHRoZVxuICAgIC8vIGVkaXRvci1ob3N0IGRpcmVjdGl2ZSdzIHBvc3QtcHJvbW90ZSByZWZvY3VzIHdvdWxkIHJ1biBhZ2FpbnN0IGFuXG4gICAgLy8gaW50ZXJtZWRpYXRlIHN0YXRlIHdoZXJlIGBuZXdQYXJhbUlkYCB3YXMgc2V0IGJ1dCBgc2VnbWVudHNgIC9cbiAgICAvLyBgY2FyZXRPZmZzZXRgIHN0aWxsIGhlbGQgdGhlaXIgb2xkIHZhbHVlcyDigJQgbGVhdmluZyB0aGUgY2FyZXQgc3R1Y2tcbiAgICAvLyBhdCB0aGUgcHJlLWNsaWNrIHBvc2l0aW9uLlxuICAgIHRoaXMuc3RhdGUkID0gdGhpcy5yYXdTdGF0ZSQucGlwZShcbiAgICAgIG1hcChjb21wdXRlU3RhdGUpLFxuICAgICAgc2hhcmVSZXBsYXkoeyBidWZmZXJTaXplOiAxLCByZWZDb3VudDogdHJ1ZSB9KSxcbiAgICApO1xuXG4gICAgdGhpcy5vcHRpb25zUG9zaXRpb24kLm5leHQob3B0cy5vcHRpb25zUG9zaXRpb24gPz8gXCJiZWxvd1wiKTtcbiAgICB0aGlzLmRyb3Bkb3duJCA9IGNvbWJpbmVMYXRlc3QoW3RoaXMucmF3U3RhdGUkLCB0aGlzLm9wdGlvbnNQb3NpdGlvbiRdKS5waXBlKFxuICAgICAgbWFwKChbcywgb3B0aW9uc1Bvc2l0aW9uXSkgPT4gY29tcHV0ZURyb3Bkb3duKHMsIG9wdGlvbnNQb3NpdGlvbikpLFxuICAgICAgc2hhcmVSZXBsYXkoeyBidWZmZXJTaXplOiAxLCByZWZDb3VudDogdHJ1ZSB9KSxcbiAgICApO1xuICB9XG5cbiAgLy8gPT09IFJlYWQtb25seSBhY2Nlc3NvcnMgPT09XG5cbiAgLyoqIFN0YWJsZSBBUklBIGxpc3Rib3ggSUQgZm9yIHRoZSBkcm9wZG93bi4gUGFzcyB0byBgPHRleHRhcmVhIGFyaWEtY29udHJvbHM9XCIuLi5cIj5gLiAqL1xuICBnZXQgbGlzdGJveElkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuY29yZS5saXN0Ym94SWQ7XG4gIH1cblxuICAvKiogV2hldGhlciBgZGVzdHJveSgpYCBoYXMgYmVlbiBjYWxsZWQuIEFmdGVyIGRlc3RydWN0aW9uIGFsbCBhY3Rpb24gbWV0aG9kcyBuby1vcC4gKi9cbiAgZ2V0IGRlc3Ryb3llZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc0Rlc3Ryb3llZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTeW5jaHJvbm91cyBzbmFwc2hvdCBvZiB0aGUgY29udHJvbGxlcidzIGN1cnJlbnQgcHVibGljIHN0YXRlLiBNaXJyb3JzXG4gICAqIHRoZSBsYXRlc3QgZW1pc3Npb24gb2YgYHN0YXRlJGAuIFVzZWZ1bCBpbiBjYWxsYmFja3Mgd2hlcmUgeW91IGNhbid0XG4gICAqIGBzdWJzY3JpYmVgIChlLmcuIGluc2lkZSBhbiBldmVudCBoYW5kbGVyKS5cbiAgICovXG4gIGdldFN0YXRlKCk6IEFJQXV0b2NvbXBsZXRlQ29udHJvbGxlclN0YXRlIHtcbiAgICByZXR1cm4gY29tcHV0ZVN0YXRlKHRoaXMucmF3U3RhdGUkLnZhbHVlKTtcbiAgfVxuXG4gIC8vID09PSBBY3Rpb24gbWV0aG9kcyAocGFzcy10aHJvdWdoIHRvIHRoZSBjb3JlKSA9PT1cbiAgLy9cbiAgLy8gRXZlcnkgYWN0aW9uIG1ldGhvZCBiZWdpbnMgd2l0aCBhbiBgaXNEZXN0cm95ZWRgIGd1YXJkIHNvIHRoYXQgY2FsbGVyc1xuICAvLyB3aG8gaG9sZCBhIHN0YWxlIHJlZmVyZW5jZSBhZnRlciBgZGVzdHJveSgpYCBkb24ndCBhY2NpZGVudGFsbHkgdHJpZ2dlclxuICAvLyB3b3JrIG9uIGEgdG9ybi1kb3duIGNvcmUuIFRoZSB2YW5pbGxhIGNvcmUgZG9lcyBub3QgZ2F0ZSBpdHMgb3duIG1ldGhvZHNcbiAgLy8gcG9zdC1kaXNwb3NlIOKAlCBgcmVzZXQoKWAsIGBoYW5kbGVUZXh0Q2hhbmdlKClgLCBhbmQgZnJpZW5kcyB3b3VsZCBzdGlsbFxuICAvLyBzY2hlZHVsZSBmZXRjaGVzIG9yIGZpcmUgSFRUUCByZXF1ZXN0cyBhZ2FpbnN0IGFuIGFib3J0ZWQgY29udHJvbGxlcixcbiAgLy8gYW5kIHRoZSByZXNwb25zZXMgd291bGQgaGF2ZSBub3doZXJlIHRvIHN1cmZhY2UgKHJhd1N0YXRlJCBpcyBhbHJlYWR5XG4gIC8vIGNvbXBsZXRlKS4gVGhlIGd1YXJkIG1ha2VzIHRoZSBKU0RvYy1wcm9taXNlZCBcIm5vLW9wIHNpbGVudGx5XCJcbiAgLy8gc2VtYW50aWNzIGFjdHVhbGx5IHRydWUuXG5cbiAgLyoqIENsZWFyIGFsbCBzdGF0ZSwgcm90YXRlIGBzZXNzaW9uX2lkYCwgYW5kIHJlLWZldGNoLiBDYWxsIGFmdGVyIHN1Ym1pdC4gKi9cbiAgcmVzZXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNEZXN0cm95ZWQpIHJldHVybjtcbiAgICB0aGlzLmNvcmUucmVzZXQoKTtcbiAgfVxuXG4gIC8qKiBQaWNrIGEgZHJvcGRvd24gb3B0aW9uIChvciByZXBsYWNlIHRoZSByZS1lZGl0ZWQgcGFyYW0gaWYgaW4gcmUtZWRpdCBtb2RlKS4gKi9cbiAgc2VsZWN0T3B0aW9uKG9wdGlvbjogU3VnZ2VzdGlvbk9wdGlvbik6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzRGVzdHJveWVkKSByZXR1cm47XG4gICAgdGhpcy5jb3JlLnNlbGVjdE9wdGlvbihvcHRpb24pO1xuICB9XG5cbiAgLyoqIFByb21vdGUgdGhlIHBpbGwgYXQgYGluZGV4YCB0byBhY3RpdmUgKGZyb250IG9mIHRoZSBsaXN0KS4gKi9cbiAgc2V0QWN0aXZlUGlsbChpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNEZXN0cm95ZWQpIHJldHVybjtcbiAgICB0aGlzLmNvcmUuc2V0QWN0aXZlUGlsbChpbmRleCk7XG4gIH1cblxuICAvKiogRHJvcCB0aGUgbGFzdCBjb21wbGV0ZWQgcGFyYW0ncyBcImNvbXBsZXRlZFwiIHN0YXR1cy4gVGV4dCBzdGF5cyBhcyBwbGFpbiB0ZXh0LiAqL1xuICByZW1vdmVMYXN0UGFyYW0oKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNEZXN0cm95ZWQpIHJldHVybjtcbiAgICB0aGlzLmNvcmUucmVtb3ZlTGFzdFBhcmFtKCk7XG4gIH1cblxuICAvKiogQ2xlYXIgdGhlIHNoaW1tZXIgYW5pbWF0aW9uIHN0YXRlIGZvciB0aGUgbW9zdC1yZWNlbnRseS1hZGRlZCBwYXJhbS4gKi9cbiAgY2xlYXJOZXdQYXJhbUlkKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzRGVzdHJveWVkKSByZXR1cm47XG4gICAgdGhpcy5jb3JlLmNsZWFyTmV3UGFyYW1JZCgpO1xuICB9XG5cbiAgLyoqIENvbnRyb2xsZWQtbW9kZSBzZXR0ZXIgZm9yIGVkaXRvciB0ZXh0LiAqL1xuICBzZXRWYWx1ZSh0ZXh0OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc0Rlc3Ryb3llZCkgcmV0dXJuO1xuICAgIHRoaXMuY29yZS5zZXRWYWx1ZSh0ZXh0KTtcbiAgfVxuXG4gIC8qKiBDb250cm9sbGVkLW1vZGUgc2V0dGVyIGZvciBjb21wbGV0ZWQgcGFyYW1zLiAqL1xuICBzZXRDb21wbGV0ZWRQYXJhbXMocGFyYW1zOiBDb21wbGV0ZWRQYXJhbVN0YXRlW10pOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc0Rlc3Ryb3llZCkgcmV0dXJuO1xuICAgIHRoaXMuY29yZS5zZXRDb21wbGV0ZWRQYXJhbXMocGFyYW1zKTtcbiAgfVxuXG4gIC8qKiBGb3J3YXJkIHBsYWluLXRleHQgaW5wdXQgZnJvbSB0aGUgY29uc3VtZXIncyBgPHRleHRhcmVhPmAgdG8gdGhlIGNvcmUuICovXG4gIGhhbmRsZVRleHRDaGFuZ2UodmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzRGVzdHJveWVkKSByZXR1cm47XG4gICAgdGhpcy5jb3JlLmhhbmRsZVRleHRDaGFuZ2UodmFsdWUpO1xuICB9XG5cbiAgLyoqIEZvcndhcmQga2V5Ym9hcmQgZXZlbnRzIGZyb20gdGhlIGNvbnN1bWVyJ3MgYDx0ZXh0YXJlYT5gIHRvIHRoZSBjb3JlLiAqL1xuICBoYW5kbGVLZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNEZXN0cm95ZWQpIHJldHVybjtcbiAgICB0aGlzLmNvcmUuaGFuZGxlS2V5RG93bihldmVudCk7XG4gIH1cblxuICAvKiogTm90aWZ5IHRoZSBjb3JlIG9mIGZvY3VzIHN0YXRlLiAqL1xuICBzZXRGb2N1c2VkKGZvY3VzZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc0Rlc3Ryb3llZCkgcmV0dXJuO1xuICAgIHRoaXMuY29yZS5zZXRGb2N1c2VkKGZvY3VzZWQpO1xuICB9XG5cbiAgLyoqIEVudGVyIHJlLWVkaXQgbW9kZSBmb3IgdGhlIGJvbGQgcGFyYW0gd2l0aCB0aGUgZ2l2ZW4gaWQuICovXG4gIHN0YXJ0RWRpdGluZ1BhcmFtKHBhcmFtSWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzRGVzdHJveWVkKSByZXR1cm47XG4gICAgdGhpcy5jb3JlLnN0YXJ0RWRpdGluZ1BhcmFtKHBhcmFtSWQpO1xuICB9XG5cbiAgLyoqIEV4aXQgcmUtZWRpdCBtb2RlIHdpdGhvdXQgY2hhbmdpbmcgdGhlIGJvbGQgcGFyYW0uICovXG4gIGV4aXRFZGl0TW9kZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc0Rlc3Ryb3llZCkgcmV0dXJuO1xuICAgIHRoaXMuY29yZS5leGl0RWRpdE1vZGUoKTtcbiAgfVxuXG4gIC8qKiBGb3J3YXJkIHBvc3QtaW5wdXQgY2FyZXQgcG9zaXRpb24gKGV4dGVuZHMgdGhlIGVkaXQgdGFpbCkuICovXG4gIGhhbmRsZUNhcmV0QWZ0ZXJJbnB1dChvZmZzZXQ6IG51bWJlciB8IG51bGwpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc0Rlc3Ryb3llZCkgcmV0dXJuO1xuICAgIHRoaXMuY29yZS5oYW5kbGVDYXJldEFmdGVySW5wdXQob2Zmc2V0KTtcbiAgfVxuXG4gIC8qKiBGb3J3YXJkIHNlbGVjdGlvbi1vbmx5IGNhcmV0IG1vdmVzIChtYXkgZXhpdCByZS1lZGl0KS4gKi9cbiAgaGFuZGxlQ2FyZXRNb3ZlKG9mZnNldDogbnVtYmVyIHwgbnVsbCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzRGVzdHJveWVkKSByZXR1cm47XG4gICAgdGhpcy5jb3JlLmhhbmRsZUNhcmV0TW92ZShvZmZzZXQpO1xuICB9XG5cbiAgLyoqIFJlcGxhY2UgdGhlIGJvbGQgcGFyYW0gYmVpbmcgcmUtZWRpdGVkLiBSZXR1cm5zIHRydWUgd2hlbiBhcHBsaWVkLiAqL1xuICByZXBsYWNlRWRpdGluZ1JhbmdlKHJlcGxhY2VtZW50OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5pc0Rlc3Ryb3llZCkgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiB0aGlzLmNvcmUucmVwbGFjZUVkaXRpbmdSYW5nZShyZXBsYWNlbWVudCk7XG4gIH1cblxuICAvKiogU2V0IHRoZSBoaWdobGlnaHRlZCBvcHRpb24gaW5kZXggKHR5cGljYWxseSBkcml2ZW4gYnkgaG92ZXIpLiAqL1xuICBzZXRBY3RpdmVEcm9wZG93bkluZGV4KGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc0Rlc3Ryb3llZCkgcmV0dXJuO1xuICAgIHRoaXMuY29yZS5zZXRBY3RpdmVEcm9wZG93bkluZGV4KGluZGV4KTtcbiAgfVxuXG4gIC8vID09PSBMaWZlY3ljbGUgPT09XG5cbiAgLyoqXG4gICAqIEFwcGx5IHJ1bnRpbWUgY2hhbmdlcyB0byBhIHN1YnNldCBvZiBvcHRpb25zLiBFdmVudCBjYWxsYmFja3NcbiAgICogKGBvblN1Ym1pdGAsIGBvbkVycm9yYCwgZXRjLikgY2Fubm90IGJlIHN3YXBwZWQgdGhpcyB3YXkg4oCUIHRoZXkgYXJlXG4gICAqIHJlZ2lzdGVyZWQgb25jZSBhdCBjb25zdHJ1Y3Rpb24gKG1hdGNoZXMgdGhlIFJlYWN0IGhvb2sncyBkZXNpZ24pLiBGb3JcbiAgICogZHluYW1pYyBldmVudCByZWFjdGl2aXR5LCBzdWJzY3JpYmUgdG8gdGhlIGNvcnJlc3BvbmRpbmcgb2JzZXJ2YWJsZVxuICAgKiAoZS5nLiBgdGV4dCRgIGluc3RlYWQgb2YgYG9uQ2hhbmdlYCkuXG4gICAqL1xuICB1cGRhdGUob3B0czogQUlBdXRvY29tcGxldGVDb250cm9sbGVyVXBkYXRlKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNEZXN0cm95ZWQpIHJldHVybjtcbiAgICB0aGlzLmNvcmUudXBkYXRlKG9wdHMpO1xuICAgIGlmIChvcHRzLm9wdGlvbnNQb3NpdGlvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLm9wdGlvbnNQb3NpdGlvbiQubmV4dChvcHRzLm9wdGlvbnNQb3NpdGlvbik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlbGVhc2UgYWxsIHJlc291cmNlcyDigJQgdW5zdWJzY3JpYmVzIGZyb20gdGhlIGNvcmUsIGRlc3Ryb3lzIHRoZSBjb3JlLFxuICAgKiBhbmQgY29tcGxldGVzIHRoZSBpbnRlcm5hbCBzdGF0ZSBzdWJqZWN0LiBTYWZlIHRvIGNhbGwgbXVsdGlwbGUgdGltZXMuXG4gICAqIEFmdGVyIGRlc3RydWN0aW9uLCBhY3Rpb24gbWV0aG9kcyBuby1vcCBzaWxlbnRseS5cbiAgICovXG4gIGRlc3Ryb3koKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNEZXN0cm95ZWQpIHJldHVybjtcbiAgICB0aGlzLmlzRGVzdHJveWVkID0gdHJ1ZTtcbiAgICB0aGlzLnVuc3Vic2NyaWJlQ29yZSgpO1xuICAgIHRoaXMuY29yZS5kZXN0cm95KCk7XG4gICAgdGhpcy5yYXdTdGF0ZSQuY29tcGxldGUoKTtcbiAgfVxufVxuXG4vLyA9PT09PSBQdXJlIGhlbHBlcnMg4oCUIG5vdCBwYXJ0IG9mIHRoZSBwdWJsaWMgc3VyZmFjZSA9PT09PVxuXG4vKipcbiAqIFNoYWxsb3cgYXJyYXkgZXF1YWxpdHkuIFRoZSB2YW5pbGxhIHN0b3JlIHJlYXNzaWducyBhcnJheSBmaWVsZHMgb24gZXZlcnlcbiAqIHdyaXRlIChgc3RvcmUuc2V0KHsgY29tcGxldGVkUGFyYW1zOiBbLi4ucHJldiwgeF0gfSlgKSwgc28gcmVmZXJlbmNlXG4gKiBlcXVhbGl0eSBhbG9uZSB3b3VsZCByZS1lbWl0IGRvd25zdHJlYW0gZXZlbiB3aGVuIHRoZSBjb250ZW50cyBhcmVcbiAqIGlkZW50aWNhbC4gVXNlZCBmb3IgYGNvbXBsZXRlZFBhcmFtcyRgLCBgc3VnZ2VzdGlvbnMkYCwgYHN1Z2dlc3Rpb25QaWxscyRgLFxuICogYW5kIGBzZWdtZW50cyRgLlxuICovXG5mdW5jdGlvbiBhcnJFcTxUPihhOiByZWFkb25seSBUW10sIGI6IHJlYWRvbmx5IFRbXSk6IGJvb2xlYW4ge1xuICBpZiAoYSA9PT0gYikgcmV0dXJuIHRydWU7XG4gIGlmIChhLmxlbmd0aCAhPT0gYi5sZW5ndGgpIHJldHVybiBmYWxzZTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKGFbaV0gIT09IGJbaV0pIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gY29tcHV0ZVVpTG9hZGluZyhzOiBDb3JlU3RhdGUpOiBib29sZWFuIHtcbiAgcmV0dXJuIHMuaXNMb2FkaW5nICYmICFzLmVkaXRpbmdQYXJhbSAmJiAhcy5pblNlbGVjdGlvbkFuaW1hdGlvbjtcbn1cblxuZnVuY3Rpb24gY29tcHV0ZVN0YXRlKHM6IENvcmVTdGF0ZSk6IEFJQXV0b2NvbXBsZXRlQ29udHJvbGxlclN0YXRlIHtcbiAgcmV0dXJuIHtcbiAgICB0ZXh0OiBzLnRleHQsXG4gICAgY29tcGxldGVkUGFyYW1zOiBzLmNvbXBsZXRlZFBhcmFtcyxcbiAgICBzdWdnZXN0aW9uUGlsbHM6IHMuYWN0aW9uYWJsZVN1Z2dlc3Rpb25zLFxuICAgIHNlZ21lbnRzOiBzLnNlZ21lbnRzLFxuICAgIG5ld1BhcmFtSWQ6IHMubmV3UGFyYW1JZCxcbiAgICBzdWdnZXN0aW9uczogcy5zdWdnZXN0aW9ucyxcbiAgICBhY3RpdmVJbmRleDogcy5hY3RpdmVEcm9wZG93bkluZGV4LFxuICAgIGlzTG9hZGluZzogY29tcHV0ZVVpTG9hZGluZyhzKSxcbiAgICBpc1JlYWR5OiBzLmlzUmVhZHksXG4gICAgaXNGb2N1c2VkOiBzLmlzRm9jdXNlZCxcbiAgICBpc0Ryb3Bkb3duT3Blbjogcy5pc0Ryb3Bkb3duT3BlbixcbiAgICBwbGFjZWhvbGRlclRleHQ6IHMucGxhY2Vob2xkZXJUZXh0LFxuICAgIGVycm9yOiBzLmVycm9yLFxuICAgIGVkaXRpbmdQYXJhbTogcy5lZGl0aW5nUGFyYW0sXG4gICAgZWRpdGluZ0FuY2hvcjogcy5lZGl0aW5nQW5jaG9yLFxuICAgIGNhcmV0T2Zmc2V0OiBzLmNhcmV0T2Zmc2V0LFxuICB9O1xufVxuXG5mdW5jdGlvbiBjb21wdXRlRHJvcGRvd24oXG4gIHM6IENvcmVTdGF0ZSxcbiAgb3B0aW9uc1Bvc2l0aW9uOiBcImFib3ZlXCIgfCBcImJlbG93XCIsXG4pOiBBSUF1dG9jb21wbGV0ZURyb3Bkb3duU3RhdGUge1xuICBjb25zdCBlZGl0aW5nUGFyYW0gPSBzLmVkaXRpbmdQYXJhbTtcbiAgY29uc3QgYWN0aXZlU3VnZ2VzdGlvbiA9IHMuYWN0aW9uYWJsZVN1Z2dlc3Rpb25zWzBdO1xuICBjb25zdCBkcm9wZG93blBpbGw6IFN1Z2dlc3Rpb24gfCBudWxsID0gZWRpdGluZ1BhcmFtXG4gICAgPyB7XG4gICAgICAgIHR5cGU6IGVkaXRpbmdQYXJhbS5zdWdnZXN0aW9uVHlwZSxcbiAgICAgICAgdGV4dDogZWRpdGluZ1BhcmFtLnN1Z2dlc3Rpb25QbGFjZWhvbGRlcixcbiAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIG9wdGlvbnM6IGVkaXRpbmdQYXJhbS5vcHRpb25zLFxuICAgICAgfVxuICAgIDogbnVsbDtcbiAgY29uc3QgZHJvcGRvd25BY3RpdmVQaWxsID0gZHJvcGRvd25QaWxsID8/IGFjdGl2ZVN1Z2dlc3Rpb247XG4gIGNvbnN0IGRyb3Bkb3duUGlsbHMgPSBkcm9wZG93blBpbGwgPyBbZHJvcGRvd25QaWxsXSA6IHMuYWN0aW9uYWJsZVN1Z2dlc3Rpb25zO1xuICByZXR1cm4ge1xuICAgIHN1Z2dlc3Rpb25zOiBkcm9wZG93bkFjdGl2ZVBpbGwgPyBbeyAuLi5kcm9wZG93bkFjdGl2ZVBpbGwsIG9wdGlvbnM6IHMuZmlsdGVyZWRPcHRpb25zIH1dIDogW10sXG4gICAgYWN0aXZlSW5kZXg6IHMuYWN0aXZlRHJvcGRvd25JbmRleCxcbiAgICBpc09wZW46IHMuaXNEcm9wZG93bk9wZW4sXG4gICAgcGlsbHM6IGRyb3Bkb3duUGlsbHMsXG4gICAgaXNBY3RpdmVQaWxsU2VsZWN0ZWQ6IHMuaXNBY3RpdmVQaWxsU2VsZWN0ZWQsXG4gICAgaXNMb2FkaW5nOiBjb21wdXRlVWlMb2FkaW5nKHMpLFxuICAgIGlzSW5wdXRFbXB0eTogcy50ZXh0LnRyaW0oKS5sZW5ndGggPT09IDAsXG4gICAgb3B0aW9uc1Bvc2l0aW9uLFxuICB9O1xufVxuIl19
|
|
@@ -579,16 +579,21 @@ class AIAutocompleteController {
|
|
|
579
579
|
// handed. The core notifies listeners synchronously, and some actions
|
|
580
580
|
// trigger reentrant `store.set` calls (e.g. typing a non-matching char
|
|
581
581
|
// during re-edit makes the core synchronously exit re-edit and kick off a
|
|
582
|
-
// fetch).
|
|
583
|
-
//
|
|
584
|
-
//
|
|
585
|
-
//
|
|
586
|
-
//
|
|
587
|
-
//
|
|
588
|
-
// back to where re-editing started
|
|
589
|
-
//
|
|
590
|
-
//
|
|
591
|
-
//
|
|
582
|
+
// fetch).
|
|
583
|
+
//
|
|
584
|
+
// The core's store used to deliver such a nested set inline and then
|
|
585
|
+
// resume the outer listener loop, so a listener could be handed an older
|
|
586
|
+
// state (still in re-edit) *after* a newer one (re-edit exited) — which
|
|
587
|
+
// resurrected a stale `editingParam` and retriggered the editor's re-edit
|
|
588
|
+
// caret-park, yanking the caret back to where re-editing started. The
|
|
589
|
+
// store now queues notifications and drains them in order, so that
|
|
590
|
+
// out-of-order delivery can no longer happen at the source.
|
|
591
|
+
//
|
|
592
|
+
// Reading `getState()` at emission time is kept as belt-and-braces: it
|
|
593
|
+
// costs nothing (distinctUntilChanged downstream drops the duplicate
|
|
594
|
+
// emissions) and keeps this bridge correct for any future consumer that
|
|
595
|
+
// emits mid-cascade. React needs neither, since it batches renders and
|
|
596
|
+
// gates its caret effects on dependencies.
|
|
592
597
|
this.unsubscribeCore = this.core.subscribe(() => {
|
|
593
598
|
if (!this.isDestroyed)
|
|
594
599
|
this.rawState$.next(this.core.getState());
|