@angular/core 18.0.0-next.5 → 18.0.0-next.6

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.
Files changed (82) hide show
  1. package/esm2022/primitives/event-dispatch/contract_binary.mjs +10 -0
  2. package/esm2022/primitives/event-dispatch/index.mjs +13 -0
  3. package/esm2022/primitives/event-dispatch/src/a11y_click.mjs +54 -0
  4. package/esm2022/primitives/event-dispatch/src/accessibility.mjs +35 -0
  5. package/esm2022/primitives/event-dispatch/src/attribute.mjs +72 -0
  6. package/esm2022/primitives/event-dispatch/src/base_dispatcher.mjs +196 -0
  7. package/esm2022/primitives/event-dispatch/src/cache.mjs +95 -0
  8. package/esm2022/primitives/event-dispatch/src/char.mjs +35 -0
  9. package/esm2022/primitives/event-dispatch/src/custom_events.mjs +63 -0
  10. package/esm2022/primitives/event-dispatch/src/dispatcher.mjs +254 -0
  11. package/esm2022/primitives/event-dispatch/src/dom.mjs +48 -0
  12. package/esm2022/primitives/event-dispatch/src/earlyeventcontract.mjs +36 -0
  13. package/esm2022/primitives/event-dispatch/src/event.mjs +638 -0
  14. package/esm2022/primitives/event-dispatch/src/event_contract_container.mjs +63 -0
  15. package/esm2022/primitives/event-dispatch/src/event_contract_defines.mjs +48 -0
  16. package/esm2022/primitives/event-dispatch/src/event_contract_multi_container.mjs +192 -0
  17. package/esm2022/primitives/event-dispatch/src/event_handler.mjs +9 -0
  18. package/esm2022/primitives/event-dispatch/src/event_info.mjs +199 -0
  19. package/esm2022/primitives/event-dispatch/src/event_type.mjs +244 -0
  20. package/esm2022/primitives/event-dispatch/src/eventcontract.mjs +675 -0
  21. package/esm2022/primitives/event-dispatch/src/key_code.mjs +21 -0
  22. package/esm2022/primitives/event-dispatch/src/legacy_dispatcher.mjs +9 -0
  23. package/esm2022/primitives/event-dispatch/src/property.mjs +35 -0
  24. package/esm2022/primitives/event-dispatch/src/register_events.mjs +32 -0
  25. package/esm2022/primitives/event-dispatch/src/replay.mjs +389 -0
  26. package/esm2022/primitives/event-dispatch/src/restriction.mjs +15 -0
  27. package/esm2022/primitives/signals/index.mjs +3 -3
  28. package/esm2022/primitives/signals/src/computed.mjs +5 -3
  29. package/esm2022/primitives/signals/src/graph.mjs +14 -9
  30. package/esm2022/primitives/signals/src/signal.mjs +2 -2
  31. package/esm2022/primitives/signals/src/watch.mjs +2 -2
  32. package/esm2022/src/change_detection/scheduling/zoneless_scheduling_impl.mjs +50 -5
  33. package/esm2022/src/core.mjs +2 -1
  34. package/esm2022/src/core_private_export.mjs +2 -1
  35. package/esm2022/src/defer/instructions.mjs +31 -8
  36. package/esm2022/src/di/host_tag_name_token.mjs +65 -0
  37. package/esm2022/src/di/index.mjs +2 -1
  38. package/esm2022/src/errors.mjs +1 -1
  39. package/esm2022/src/hydration/annotate.mjs +15 -1
  40. package/esm2022/src/hydration/event_replay.mjs +181 -0
  41. package/esm2022/src/hydration/tokens.mjs +6 -1
  42. package/esm2022/src/pending_tasks.mjs +54 -11
  43. package/esm2022/src/render3/component_ref.mjs +1 -1
  44. package/esm2022/src/render3/context_discovery.mjs +15 -1
  45. package/esm2022/src/render3/instructions/control_flow.mjs +50 -3
  46. package/esm2022/src/render3/list_reconciliation.mjs +41 -1
  47. package/esm2022/src/util/callback_scheduler.mjs +13 -2
  48. package/esm2022/src/version.mjs +1 -1
  49. package/esm2022/src/zone/ng_zone.mjs +22 -6
  50. package/esm2022/testing/src/async.mjs +2 -10
  51. package/esm2022/testing/src/defer.mjs +1 -2
  52. package/esm2022/testing/src/logger.mjs +3 -3
  53. package/event-dispatch-contract.min.js +1 -1
  54. package/fesm2022/core.mjs +516 -39
  55. package/fesm2022/core.mjs.map +1 -1
  56. package/fesm2022/primitives/event-dispatch.mjs +3044 -0
  57. package/fesm2022/primitives/event-dispatch.mjs.map +1 -0
  58. package/fesm2022/primitives/signals.mjs +17 -10
  59. package/fesm2022/primitives/signals.mjs.map +1 -1
  60. package/fesm2022/rxjs-interop.mjs +1 -1
  61. package/fesm2022/testing.mjs +3 -12
  62. package/fesm2022/testing.mjs.map +1 -1
  63. package/index.d.ts +75 -13
  64. package/package.json +7 -1
  65. package/primitives/event-dispatch/index.d.ts +627 -0
  66. package/primitives/signals/index.d.ts +1 -1
  67. package/rxjs-interop/index.d.ts +1 -1
  68. package/schematics/migrations/{transfer-state → http-providers}/bundle.js +254 -68
  69. package/schematics/migrations/http-providers/bundle.js.map +7 -0
  70. package/schematics/migrations/invalid-two-way-bindings/bundle.js +659 -337
  71. package/schematics/migrations/invalid-two-way-bindings/bundle.js.map +2 -2
  72. package/schematics/migrations.json +6 -16
  73. package/schematics/ng-generate/control-flow-migration/bundle.js +667 -345
  74. package/schematics/ng-generate/control-flow-migration/bundle.js.map +2 -2
  75. package/schematics/ng-generate/standalone-migration/bundle.js +1030 -660
  76. package/schematics/ng-generate/standalone-migration/bundle.js.map +2 -2
  77. package/testing/index.d.ts +2 -9
  78. package/schematics/migrations/block-template-entities/bundle.js +0 -22808
  79. package/schematics/migrations/block-template-entities/bundle.js.map +0 -7
  80. package/schematics/migrations/compiler-options/bundle.js +0 -582
  81. package/schematics/migrations/compiler-options/bundle.js.map +0 -7
  82. package/schematics/migrations/transfer-state/bundle.js.map +0 -7
@@ -0,0 +1,21 @@
1
+ /**
2
+ * @license
3
+ * Copyright Google LLC All Rights Reserved.
4
+ *
5
+ * Use of this source code is governed by an MIT-style license that can be
6
+ * found in the LICENSE file at https://angular.io/license
7
+ */
8
+ /** Special keycodes used by jsaction for the generic click action. */
9
+ export var KeyCode;
10
+ (function (KeyCode) {
11
+ /**
12
+ * If on a Macintosh with an extended keyboard, the Enter key located in the
13
+ * numeric pad has a different ASCII code.
14
+ */
15
+ KeyCode[KeyCode["MAC_ENTER"] = 3] = "MAC_ENTER";
16
+ /** The Enter key. */
17
+ KeyCode[KeyCode["ENTER"] = 13] = "ENTER";
18
+ /** The Space key. */
19
+ KeyCode[KeyCode["SPACE"] = 32] = "SPACE";
20
+ })(KeyCode || (KeyCode = {}));
21
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5X2NvZGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb3JlL3ByaW1pdGl2ZXMvZXZlbnQtZGlzcGF0Y2gvc3JjL2tleV9jb2RlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUVILHNFQUFzRTtBQUN0RSxNQUFNLENBQU4sSUFBWSxPQVlYO0FBWkQsV0FBWSxPQUFPO0lBQ2pCOzs7T0FHRztJQUNILCtDQUFhLENBQUE7SUFFYixxQkFBcUI7SUFDckIsd0NBQVUsQ0FBQTtJQUVWLHFCQUFxQjtJQUNyQix3Q0FBVSxDQUFBO0FBQ1osQ0FBQyxFQVpXLE9BQU8sS0FBUCxPQUFPLFFBWWxCIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbi8qKiBTcGVjaWFsIGtleWNvZGVzIHVzZWQgYnkganNhY3Rpb24gZm9yIHRoZSBnZW5lcmljIGNsaWNrIGFjdGlvbi4gKi9cbmV4cG9ydCBlbnVtIEtleUNvZGUge1xuICAvKipcbiAgICogSWYgb24gYSBNYWNpbnRvc2ggd2l0aCBhbiBleHRlbmRlZCBrZXlib2FyZCwgdGhlIEVudGVyIGtleSBsb2NhdGVkIGluIHRoZVxuICAgKiBudW1lcmljIHBhZCBoYXMgYSBkaWZmZXJlbnQgQVNDSUkgY29kZS5cbiAgICovXG4gIE1BQ19FTlRFUiA9IDMsXG5cbiAgLyoqIFRoZSBFbnRlciBrZXkuICovXG4gIEVOVEVSID0gMTMsXG5cbiAgLyoqIFRoZSBTcGFjZSBrZXkuICovXG4gIFNQQUNFID0gMzIsXG59XG4iXX0=
@@ -0,0 +1,9 @@
1
+ /**
2
+ * @license
3
+ * Copyright Google LLC All Rights Reserved.
4
+ *
5
+ * Use of this source code is governed by an MIT-style license that can be
6
+ * found in the LICENSE file at https://angular.io/license
7
+ */
8
+ export { Dispatcher as LegacyDispatcher, registerDispatcher } from './dispatcher';
9
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGVnYWN5X2Rpc3BhdGNoZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb3JlL3ByaW1pdGl2ZXMvZXZlbnQtZGlzcGF0Y2gvc3JjL2xlZ2FjeV9kaXNwYXRjaGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUVILE9BQU8sRUFBQyxVQUFVLElBQUksZ0JBQWdCLEVBQUUsa0JBQWtCLEVBQUMsTUFBTSxjQUFjLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuZXhwb3J0IHtEaXNwYXRjaGVyIGFzIExlZ2FjeURpc3BhdGNoZXIsIHJlZ2lzdGVyRGlzcGF0Y2hlcn0gZnJvbSAnLi9kaXNwYXRjaGVyJztcbiJdfQ==
@@ -0,0 +1,35 @@
1
+ /**
2
+ * @license
3
+ * Copyright Google LLC All Rights Reserved.
4
+ *
5
+ * Use of this source code is governed by an MIT-style license that can be
6
+ * found in the LICENSE file at https://angular.io/license
7
+ */
8
+ /** All properties that are used by jsaction. */
9
+ export var Property;
10
+ (function (Property) {
11
+ /**
12
+ * The parsed value of the jsaction attribute is stored in this
13
+ * property on the DOM node. The parsed value is an Object. The
14
+ * property names of the object are the events; the values are the
15
+ * names of the actions. This property is attached even on nodes
16
+ * that don't have a jsaction attribute as an optimization, because
17
+ * property lookup is faster than attribute access.
18
+ */
19
+ Property["JSACTION"] = "__jsaction";
20
+ /**
21
+ * The parsed value of the jsnamespace attribute is stored in this
22
+ * property on the DOM node.
23
+ */
24
+ Property["JSNAMESPACE"] = "__jsnamespace";
25
+ /** The value of the oi attribute as a property, for faster access. */
26
+ Property["OI"] = "__oi";
27
+ /**
28
+ * The owner property references an a logical owner for a DOM node. JSAction
29
+ * will follow this reference instead of parentNode when traversing the DOM
30
+ * to find jsaction attributes. This allows overlaying a logical structure
31
+ * over a document where the DOM structure can't reflect that structure.
32
+ */
33
+ Property["OWNER"] = "__owner";
34
+ })(Property || (Property = {}));
35
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvcGVydHkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb3JlL3ByaW1pdGl2ZXMvZXZlbnQtZGlzcGF0Y2gvc3JjL3Byb3BlcnR5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUVILGdEQUFnRDtBQUNoRCxNQUFNLENBQU4sSUFBWSxRQTJCWDtBQTNCRCxXQUFZLFFBQVE7SUFDbEI7Ozs7Ozs7T0FPRztJQUNILG1DQUF1QixDQUFBO0lBRXZCOzs7T0FHRztJQUNILHlDQUE2QixDQUFBO0lBRTdCLHNFQUFzRTtJQUN0RSx1QkFBVyxDQUFBO0lBRVg7Ozs7O09BS0c7SUFDSCw2QkFBaUIsQ0FBQTtBQUNuQixDQUFDLEVBM0JXLFFBQVEsS0FBUixRQUFRLFFBMkJuQiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG4vKiogQWxsIHByb3BlcnRpZXMgdGhhdCBhcmUgdXNlZCBieSBqc2FjdGlvbi4gKi9cbmV4cG9ydCBlbnVtIFByb3BlcnR5IHtcbiAgLyoqXG4gICAqIFRoZSBwYXJzZWQgdmFsdWUgb2YgdGhlIGpzYWN0aW9uIGF0dHJpYnV0ZSBpcyBzdG9yZWQgaW4gdGhpc1xuICAgKiBwcm9wZXJ0eSBvbiB0aGUgRE9NIG5vZGUuIFRoZSBwYXJzZWQgdmFsdWUgaXMgYW4gT2JqZWN0LiBUaGVcbiAgICogcHJvcGVydHkgbmFtZXMgb2YgdGhlIG9iamVjdCBhcmUgdGhlIGV2ZW50czsgdGhlIHZhbHVlcyBhcmUgdGhlXG4gICAqIG5hbWVzIG9mIHRoZSBhY3Rpb25zLiBUaGlzIHByb3BlcnR5IGlzIGF0dGFjaGVkIGV2ZW4gb24gbm9kZXNcbiAgICogdGhhdCBkb24ndCBoYXZlIGEganNhY3Rpb24gYXR0cmlidXRlIGFzIGFuIG9wdGltaXphdGlvbiwgYmVjYXVzZVxuICAgKiBwcm9wZXJ0eSBsb29rdXAgaXMgZmFzdGVyIHRoYW4gYXR0cmlidXRlIGFjY2Vzcy5cbiAgICovXG4gIEpTQUNUSU9OID0gJ19fanNhY3Rpb24nLFxuXG4gIC8qKlxuICAgKiBUaGUgcGFyc2VkIHZhbHVlIG9mIHRoZSBqc25hbWVzcGFjZSBhdHRyaWJ1dGUgaXMgc3RvcmVkIGluIHRoaXNcbiAgICogcHJvcGVydHkgb24gdGhlIERPTSBub2RlLlxuICAgKi9cbiAgSlNOQU1FU1BBQ0UgPSAnX19qc25hbWVzcGFjZScsXG5cbiAgLyoqIFRoZSB2YWx1ZSBvZiB0aGUgb2kgYXR0cmlidXRlIGFzIGEgcHJvcGVydHksIGZvciBmYXN0ZXIgYWNjZXNzLiAqL1xuICBPSSA9ICdfX29pJyxcblxuICAvKipcbiAgICogVGhlIG93bmVyIHByb3BlcnR5IHJlZmVyZW5jZXMgYW4gYSBsb2dpY2FsIG93bmVyIGZvciBhIERPTSBub2RlLiBKU0FjdGlvblxuICAgKiB3aWxsIGZvbGxvdyB0aGlzIHJlZmVyZW5jZSBpbnN0ZWFkIG9mIHBhcmVudE5vZGUgd2hlbiB0cmF2ZXJzaW5nIHRoZSBET01cbiAgICogdG8gZmluZCBqc2FjdGlvbiBhdHRyaWJ1dGVzLiBUaGlzIGFsbG93cyBvdmVybGF5aW5nIGEgbG9naWNhbCBzdHJ1Y3R1cmVcbiAgICogb3ZlciBhIGRvY3VtZW50IHdoZXJlIHRoZSBET00gc3RydWN0dXJlIGNhbid0IHJlZmxlY3QgdGhhdCBzdHJ1Y3R1cmUuXG4gICAqL1xuICBPV05FUiA9ICdfX293bmVyJyxcbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgTm9kZSB7XG4gICAgW1Byb3BlcnR5LkpTQUNUSU9OXT86IHN0cmluZztcbiAgICBbUHJvcGVydHkuSlNOQU1FU1BBQ0VdPzogc3RyaW5nO1xuICAgIFtQcm9wZXJ0eS5PSV0/OiBzdHJpbmc7XG4gICAgW1Byb3BlcnR5Lk9XTkVSXT86IFBhcmVudE5vZGU7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,32 @@
1
+ /**
2
+ * @license
3
+ * Copyright Google LLC All Rights Reserved.
4
+ *
5
+ * Use of this source code is governed by an MIT-style license that can be
6
+ * found in the LICENSE file at https://angular.io/license
7
+ */
8
+ import { EventContractContainer } from './event_contract_container';
9
+ import { EventContract } from './eventcontract';
10
+ /**
11
+ * Provides a factory function for bootstrapping an event contract on a
12
+ * window object.
13
+ * @param field The property on the window that the event contract will be placed on.
14
+ * @param container The container that listens to events
15
+ * @param appId A given identifier for an application. If there are multiple apps on the page
16
+ * then this is how contracts can be initialized for each one.
17
+ * @param events An array of event names that should be listened to.
18
+ * @param anyWindow The global window object that should receive the event contract.
19
+ * @returns The `event` contract. This is both assigned to `anyWindow` and returned for testing.
20
+ */
21
+ export function bootstrapEventContract(field, container, appId, events, anyWindow = window) {
22
+ if (!anyWindow[field]) {
23
+ anyWindow[field] = {};
24
+ }
25
+ const eventContract = new EventContract(new EventContractContainer(container));
26
+ anyWindow[field][appId] = eventContract;
27
+ for (const ev of events) {
28
+ eventContract.addEvent(ev);
29
+ }
30
+ return eventContract;
31
+ }
32
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVnaXN0ZXJfZXZlbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29yZS9wcmltaXRpdmVzL2V2ZW50LWRpc3BhdGNoL3NyYy9yZWdpc3Rlcl9ldmVudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBRUgsT0FBTyxFQUFDLHNCQUFzQixFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFDbEUsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBRTlDOzs7Ozs7Ozs7O0dBVUc7QUFDSCxNQUFNLFVBQVUsc0JBQXNCLENBQ3BDLEtBQWEsRUFDYixTQUFrQixFQUNsQixLQUFhLEVBQ2IsTUFBZ0IsRUFDaEIsWUFBaUIsTUFBTTtJQUV2QixJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDdEIsU0FBUyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUN4QixDQUFDO0lBQ0QsTUFBTSxhQUFhLEdBQUcsSUFBSSxhQUFhLENBQUMsSUFBSSxzQkFBc0IsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO0lBQy9FLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxhQUFhLENBQUM7SUFDeEMsS0FBSyxNQUFNLEVBQUUsSUFBSSxNQUFNLEVBQUUsQ0FBQztRQUN4QixhQUFhLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFDRCxPQUFPLGFBQWEsQ0FBQztBQUN2QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmltcG9ydCB7RXZlbnRDb250cmFjdENvbnRhaW5lcn0gZnJvbSAnLi9ldmVudF9jb250cmFjdF9jb250YWluZXInO1xuaW1wb3J0IHtFdmVudENvbnRyYWN0fSBmcm9tICcuL2V2ZW50Y29udHJhY3QnO1xuXG4vKipcbiAqIFByb3ZpZGVzIGEgZmFjdG9yeSBmdW5jdGlvbiBmb3IgYm9vdHN0cmFwcGluZyBhbiBldmVudCBjb250cmFjdCBvbiBhXG4gKiB3aW5kb3cgb2JqZWN0LlxuICogQHBhcmFtIGZpZWxkIFRoZSBwcm9wZXJ0eSBvbiB0aGUgd2luZG93IHRoYXQgdGhlIGV2ZW50IGNvbnRyYWN0IHdpbGwgYmUgcGxhY2VkIG9uLlxuICogQHBhcmFtIGNvbnRhaW5lciBUaGUgY29udGFpbmVyIHRoYXQgbGlzdGVucyB0byBldmVudHNcbiAqIEBwYXJhbSBhcHBJZCBBIGdpdmVuIGlkZW50aWZpZXIgZm9yIGFuIGFwcGxpY2F0aW9uLiBJZiB0aGVyZSBhcmUgbXVsdGlwbGUgYXBwcyBvbiB0aGUgcGFnZVxuICogICAgICAgICAgICAgIHRoZW4gdGhpcyBpcyBob3cgY29udHJhY3RzIGNhbiBiZSBpbml0aWFsaXplZCBmb3IgZWFjaCBvbmUuXG4gKiBAcGFyYW0gZXZlbnRzIEFuIGFycmF5IG9mIGV2ZW50IG5hbWVzIHRoYXQgc2hvdWxkIGJlIGxpc3RlbmVkIHRvLlxuICogQHBhcmFtIGFueVdpbmRvdyBUaGUgZ2xvYmFsIHdpbmRvdyBvYmplY3QgdGhhdCBzaG91bGQgcmVjZWl2ZSB0aGUgZXZlbnQgY29udHJhY3QuXG4gKiBAcmV0dXJucyBUaGUgYGV2ZW50YCBjb250cmFjdC4gVGhpcyBpcyBib3RoIGFzc2lnbmVkIHRvIGBhbnlXaW5kb3dgIGFuZCByZXR1cm5lZCBmb3IgdGVzdGluZy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJvb3RzdHJhcEV2ZW50Q29udHJhY3QoXG4gIGZpZWxkOiBzdHJpbmcsXG4gIGNvbnRhaW5lcjogRWxlbWVudCxcbiAgYXBwSWQ6IHN0cmluZyxcbiAgZXZlbnRzOiBzdHJpbmdbXSxcbiAgYW55V2luZG93OiBhbnkgPSB3aW5kb3csXG4pIHtcbiAgaWYgKCFhbnlXaW5kb3dbZmllbGRdKSB7XG4gICAgYW55V2luZG93W2ZpZWxkXSA9IHt9O1xuICB9XG4gIGNvbnN0IGV2ZW50Q29udHJhY3QgPSBuZXcgRXZlbnRDb250cmFjdChuZXcgRXZlbnRDb250cmFjdENvbnRhaW5lcihjb250YWluZXIpKTtcbiAgYW55V2luZG93W2ZpZWxkXVthcHBJZF0gPSBldmVudENvbnRyYWN0O1xuICBmb3IgKGNvbnN0IGV2IG9mIGV2ZW50cykge1xuICAgIGV2ZW50Q29udHJhY3QuYWRkRXZlbnQoZXYpO1xuICB9XG4gIHJldHVybiBldmVudENvbnRyYWN0O1xufVxuIl19
@@ -0,0 +1,389 @@
1
+ /**
2
+ * @license
3
+ * Copyright Google LLC All Rights Reserved.
4
+ *
5
+ * Use of this source code is governed by an MIT-style license that can be
6
+ * found in the LICENSE file at https://angular.io/license
7
+ */
8
+ /**
9
+ * @fileoverview Functions for replaying events by the jsaction
10
+ * Dispatcher.
11
+ * All ts-ignores in this file are due to APIs that are no longer in the browser.
12
+ */
13
+ import { createCustomEvent } from './/custom_events';
14
+ import * as jsactionEvent from './/event';
15
+ import { EventType } from './/event_type';
16
+ /**
17
+ * Replays an event.
18
+ */
19
+ export function replayEvent(event, targetElement, eventType) {
20
+ triggerEvent(targetElement, createEvent(event, eventType));
21
+ }
22
+ /**
23
+ * Checks if a given event was triggered by the keyboard.
24
+ * @param eventType The event type.
25
+ * @return Whether it's a keyboard event.
26
+ */
27
+ function isKeyboardEvent(eventType) {
28
+ return (eventType === EventType.KEYPRESS ||
29
+ eventType === EventType.KEYDOWN ||
30
+ eventType === EventType.KEYUP);
31
+ }
32
+ /**
33
+ * Checks if a given event was triggered by the mouse.
34
+ * @param eventType The event type.
35
+ * @return Whether it's a mouse event.
36
+ */
37
+ function isMouseEvent(eventType) {
38
+ // TODO: Verify if Drag events should be bound here.
39
+ return (eventType === EventType.CLICK ||
40
+ eventType === EventType.DBLCLICK ||
41
+ eventType === EventType.MOUSEDOWN ||
42
+ eventType === EventType.MOUSEOVER ||
43
+ eventType === EventType.MOUSEOUT ||
44
+ eventType === EventType.MOUSEMOVE);
45
+ }
46
+ /**
47
+ * Checks if a given event is a general UI event.
48
+ * @param eventType The event type.
49
+ * @return Whether it's a focus event.
50
+ */
51
+ function isUiEvent(eventType) {
52
+ // Almost nobody supports the W3C method of creating FocusEvents.
53
+ // For now, we're going to use the UIEvent as a super-interface.
54
+ return (eventType === EventType.FOCUS ||
55
+ eventType === EventType.BLUR ||
56
+ eventType === EventType.FOCUSIN ||
57
+ eventType === EventType.FOCUSOUT ||
58
+ eventType === EventType.SCROLL);
59
+ }
60
+ /**
61
+ * Create a whitespace-delineated list of modifier keys that should be
62
+ * considered to be active on the event's key. See details at
63
+ * https://developer.mozilla.org/en/DOM/KeyboardEvent.
64
+ * @param alt Alt pressed.
65
+ * @param ctrl Control pressed.
66
+ * @param meta Command pressed (OSX only).
67
+ * @param shift Shift pressed.
68
+ * @return The constructed modifier keys string.
69
+ */
70
+ function createKeyboardModifiersList(alt, ctrl, meta, shift) {
71
+ const keys = [];
72
+ if (alt) {
73
+ keys.push('Alt');
74
+ }
75
+ if (ctrl) {
76
+ keys.push('Control');
77
+ }
78
+ if (meta) {
79
+ keys.push('Meta');
80
+ }
81
+ if (shift) {
82
+ keys.push('Shift');
83
+ }
84
+ return keys.join(' ');
85
+ }
86
+ /**
87
+ * Creates a UI event object for replaying through the DOM.
88
+ * @param original The event to create a new event from.
89
+ * @param opt_eventType The type this event is being handled as by jsaction.
90
+ * e.g. blur events are handled as focusout
91
+ * @return The event object.
92
+ */
93
+ export function createUiEvent(original, opt_eventType) {
94
+ let event;
95
+ if (document.createEvent) {
96
+ const originalUiEvent = original;
97
+ // Event creation as per W3C event model specification. This codepath
98
+ // is used by most non-IE browsers and also by IE 9 and later.
99
+ event = document.createEvent('UIEvent');
100
+ // On IE and Opera < 12, we must provide non-undefined values to
101
+ // initEvent, otherwise it will fail.
102
+ event.initUIEvent(opt_eventType || originalUiEvent.type, originalUiEvent.bubbles !== undefined ? originalUiEvent.bubbles : true, originalUiEvent.cancelable || false, originalUiEvent.view || window, original.detail || 0);
103
+ // detail
104
+ }
105
+ else {
106
+ // Older versions of IE (up to version 8) do not support the
107
+ // W3C event model. Use the IE specific function instead.
108
+ // Suppressing errors for ts-migration.
109
+ // TS2339: Property 'createEventObject' does not exist on type 'Document'.
110
+ // @ts-ignore
111
+ event = document.createEventObject();
112
+ event.type = opt_eventType || original.type;
113
+ event.bubbles = original.bubbles !== undefined ? original.bubbles : true;
114
+ event.cancelable = original.cancelable || false;
115
+ event.view = original.view || window;
116
+ event.detail = original.detail || 0;
117
+ }
118
+ // Some focus events also have a nullable relatedTarget value which isn't
119
+ // directly supported in the initUIEvent() method.
120
+ event.relatedTarget = original.relatedTarget || null;
121
+ event.originalTimestamp = original.timeStamp;
122
+ return event;
123
+ }
124
+ /**
125
+ * Creates a keyboard event object for replaying through the DOM.
126
+ * @param original The event to create a new event from.
127
+ * @param opt_eventType The type this event is being handled as by jsaction.
128
+ * E.g. a keypress is handled as click in some cases.
129
+ * @return The event object.
130
+ * @suppress {strictMissingProperties} Two definitions of initKeyboardEvent.
131
+ */
132
+ export function createKeyboardEvent(original, opt_eventType) {
133
+ let event;
134
+ const keyboardEvent = original;
135
+ if (document.createEvent) {
136
+ // Event creation as per W3C event model specification. This codepath
137
+ // is used by most non-IE browsers and also by IE 9 and later.
138
+ event = document.createEvent('KeyboardEvent');
139
+ if (event.initKeyboardEvent) {
140
+ if (jsactionEvent.isIe) {
141
+ // IE9+
142
+ // https://docs.microsoft.com/en-us/previous-versions/windows/internet-explorer/ie-developer/platform-apis/ff975945(v=vs.85)
143
+ const modifiers = createKeyboardModifiersList(keyboardEvent.altKey, keyboardEvent.ctrlKey, keyboardEvent.metaKey, keyboardEvent.shiftKey);
144
+ event.initKeyboardEvent(opt_eventType || keyboardEvent.type, true, true, window, keyboardEvent.key, keyboardEvent.location,
145
+ // Suppressing errors for ts-migration.
146
+ // TS2345: Argument of type 'string' is not assignable to
147
+ // parameter of type 'boolean | undefined'.
148
+ // @ts-ignore
149
+ modifiers, keyboardEvent.repeat,
150
+ // @ts-ignore This doesn't exist
151
+ keyboardEvent.locale);
152
+ }
153
+ else {
154
+ // W3C DOM Level 3 Events model.
155
+ // https://www.w3.org/TR/uievents/#idl-interface-KeyboardEvent-initializers
156
+ event.initKeyboardEvent(opt_eventType || original.type, true, true, window, keyboardEvent.key, keyboardEvent.location, keyboardEvent.ctrlKey, keyboardEvent.altKey, keyboardEvent.shiftKey, keyboardEvent.metaKey);
157
+ Object.defineProperty(event, 'repeat', {
158
+ get: () => original.repeat,
159
+ enumerable: true,
160
+ });
161
+ // Add missing 'locale' which is not part of the spec.
162
+ // https://bugs.chromium.org/p/chromium/issues/detail?id=168971
163
+ Object.defineProperty(event, 'locale', {
164
+ // Suppressing errors for ts-migration.
165
+ // TS2339: Property 'locale' does not exist on type 'Event'.
166
+ // @ts-ignore
167
+ get: () => original.locale,
168
+ enumerable: true,
169
+ });
170
+ // Apple WebKit has a non-standard altGraphKey that is not implemented
171
+ // here.
172
+ // https://developer.apple.com/documentation/webkitjs/keyboardevent/1633753-initkeyboardevent
173
+ }
174
+ // Blink and Webkit had a bug that causes the `charCode`, `keyCode`, and
175
+ // `which` properties to always be unset when synthesizing a keyboard
176
+ // event. Details at: https://bugs.webkit.org/show_bug.cgi?id=16735. With
177
+ // these properties being deprecated, the bug has evolved into affecting
178
+ // the `key` property. We work around it by redefining the `key` and
179
+ // deprecated properties; a simple assignment here would fail because the
180
+ // native properties are readonly.
181
+ if (jsactionEvent.isWebKit) {
182
+ if (keyboardEvent.key && event.key === '') {
183
+ Object.defineProperty(event, 'key', {
184
+ get: () => keyboardEvent.key,
185
+ enumerable: true,
186
+ });
187
+ }
188
+ }
189
+ // Re-implement the deprecated `charCode`, `keyCode` and `which` which
190
+ // are also an issue on IE9+.
191
+ if (jsactionEvent.isWebKit || jsactionEvent.isIe || jsactionEvent.isGecko) {
192
+ Object.defineProperty(event, 'charCode', {
193
+ get: () => original.charCode,
194
+ enumerable: true,
195
+ });
196
+ const keyCodeGetter = () => original.keyCode;
197
+ Object.defineProperty(event, 'keyCode', {
198
+ get: keyCodeGetter,
199
+ enumerable: true,
200
+ });
201
+ Object.defineProperty(event, 'which', {
202
+ get: keyCodeGetter,
203
+ enumerable: true,
204
+ });
205
+ }
206
+ }
207
+ else {
208
+ // Gecko only supports an older/deprecated version from DOM Level 2. See
209
+ // https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/initKeyEvent
210
+ // for details.
211
+ // @ts-ignore ditto
212
+ event.initKeyEvent(opt_eventType || original.type, true, true, window,
213
+ // Suppressing errors for ts-migration.
214
+ // TS2339: Property 'ctrlKey' does not exist on type 'Event'.
215
+ // @ts-ignore
216
+ original.ctrlKey,
217
+ // Suppressing errors for ts-migration.
218
+ // TS2339: Property 'altKey' does not exist on type 'Event'.
219
+ // @ts-ignore
220
+ original.altKey,
221
+ // Suppressing errors for ts-migration.
222
+ // TS2339: Property 'shiftKey' does not exist on type 'Event'.
223
+ // @ts-ignore
224
+ original.shiftKey,
225
+ // Suppressing errors for ts-migration.
226
+ // TS2339: Property 'metaKey' does not exist on type 'Event'.
227
+ // @ts-ignore
228
+ original.metaKey,
229
+ // Suppressing errors for ts-migration.
230
+ // TS2339: Property 'keyCode' does not exist on type 'Event'.
231
+ // @ts-ignore
232
+ original.keyCode,
233
+ // Suppressing errors for ts-migration.
234
+ // TS2339: Property 'charCode' does not exist on type 'Event'.
235
+ // @ts-ignore
236
+ original.charCode);
237
+ }
238
+ }
239
+ else {
240
+ // Older versions of IE (up to version 8) do not support the
241
+ // W3C event model. Use the IE specific function instead.
242
+ // Suppressing errors for ts-migration.
243
+ // @ts-ignore
244
+ event = document.createEventObject();
245
+ event.type = opt_eventType || original.type;
246
+ const originalKeyboardEvent = original;
247
+ event.repeat = originalKeyboardEvent.repeat;
248
+ event.ctrlKey = originalKeyboardEvent.ctrlKey;
249
+ event.altKey = originalKeyboardEvent.altKey;
250
+ event.shiftKey = originalKeyboardEvent.shiftKey;
251
+ event.metaKey = originalKeyboardEvent.metaKey;
252
+ event.key = originalKeyboardEvent.key;
253
+ event.keyCode = originalKeyboardEvent.keyCode;
254
+ event.charCode = originalKeyboardEvent.charCode;
255
+ }
256
+ event.originalTimestamp = original.timeStamp;
257
+ return event;
258
+ }
259
+ /**
260
+ * Creates a mouse event object for replaying through the DOM.
261
+ * @param original The event to create a new event from.
262
+ * @param opt_eventType The type this event is being handled as by jsaction.
263
+ * E.g. a keypress is handled as click in some cases.
264
+ * @return The event object.
265
+ */
266
+ export function createMouseEvent(original, opt_eventType) {
267
+ let event;
268
+ const originalMouseEvent = original;
269
+ if (document.createEvent) {
270
+ // Event creation as per W3C event model specification. This codepath
271
+ // is used by most non-IE browsers and also by IE 9 and later.
272
+ event = document.createEvent('MouseEvent');
273
+ // On IE and Opera < 12, we must provide non-undefined values to
274
+ // initMouseEvent, otherwise it will fail.
275
+ event.initMouseEvent(opt_eventType || original.type, true, // canBubble
276
+ true, // cancelable
277
+ window, original.detail || 1, originalMouseEvent.screenX || 0, originalMouseEvent.screenY || 0, originalMouseEvent.clientX || 0, originalMouseEvent.clientY || 0, originalMouseEvent.ctrlKey || false, originalMouseEvent.altKey || false, originalMouseEvent.shiftKey || false, originalMouseEvent.metaKey || false, originalMouseEvent.button || 0, originalMouseEvent.relatedTarget || null);
278
+ }
279
+ else {
280
+ // Older versions of IE (up to version 8) do not support the
281
+ // W3C event model. Use the IE specific function instead.
282
+ // @ts-ignore
283
+ event = document.createEventObject();
284
+ event.type = opt_eventType || original.type;
285
+ event.clientX = originalMouseEvent.clientX;
286
+ event.clientY = originalMouseEvent.clientY;
287
+ event.button = originalMouseEvent.button;
288
+ event.detail = original.detail;
289
+ event.ctrlKey = originalMouseEvent.ctrlKey;
290
+ event.altKey = originalMouseEvent.altKey;
291
+ event.shiftKey = originalMouseEvent.shiftKey;
292
+ event.metaKey = originalMouseEvent.metaKey;
293
+ }
294
+ event.originalTimestamp = original.timeStamp;
295
+ return event;
296
+ }
297
+ /**
298
+ * Creates a generic event object for replaying through the DOM.
299
+ * @param original The event to create a new event from.
300
+ * @param opt_eventType The type this event is being handled as by jsaction.
301
+ * E.g. a keypress is handled as click in some cases.
302
+ * @return The event object.
303
+ */
304
+ function createGenericEvent(original, opt_eventType) {
305
+ let event;
306
+ if (document.createEvent) {
307
+ // Event creation as per W3C event model specification. This codepath
308
+ // is used by most non-IE browsers and also by IE 9 and later.
309
+ event = document.createEvent('Event');
310
+ event.initEvent(opt_eventType || original.type, true, true);
311
+ }
312
+ else {
313
+ // Older versions of IE (up to version 8) do not support the
314
+ // W3C event model. Use the IE specific function instead.
315
+ // Suppressing errors for ts-migration.
316
+ // TS2339: Property 'createEventObject' does not exist on type 'Document'.
317
+ // @ts-ignore
318
+ event = document.createEventObject();
319
+ event.type = opt_eventType || original.type;
320
+ }
321
+ event.originalTimestamp = original.timeStamp;
322
+ return event;
323
+ }
324
+ /**
325
+ * Creates an event object for replaying through the DOM.
326
+ * NOTE: This function is visible just for testing. Please don't use
327
+ * it outside JsAction internal testing.
328
+ * TODO: Add support for FocusEvent and WheelEvent.
329
+ * @param base The event to create a new event from.
330
+ * @param opt_eventType The type this event is being handled as by jsaction.
331
+ * E.g. a keypress is handled as click in some cases.
332
+ * @return The event object.
333
+ */
334
+ export function createEvent(base, opt_eventType) {
335
+ const original = base;
336
+ let event;
337
+ let eventType;
338
+ if (original.type === EventType.CUSTOM) {
339
+ eventType = EventType.CUSTOM;
340
+ }
341
+ else {
342
+ eventType = opt_eventType || original.type;
343
+ }
344
+ if (isKeyboardEvent(eventType)) {
345
+ event = createKeyboardEvent(original, opt_eventType);
346
+ }
347
+ else if (isMouseEvent(eventType)) {
348
+ event = createMouseEvent(original, opt_eventType);
349
+ }
350
+ else if (isUiEvent(eventType)) {
351
+ event = createUiEvent(original, opt_eventType);
352
+ }
353
+ else if (eventType === EventType.CUSTOM) {
354
+ event = createCustomEvent(opt_eventType, original['detail']['data'], original['detail']['triggeringEvent']);
355
+ event.originalTimestamp = original.timeStamp;
356
+ }
357
+ else {
358
+ // This ensures we don't send an undefined event object to the replayer.
359
+ event = createGenericEvent(original, opt_eventType);
360
+ }
361
+ return event;
362
+ }
363
+ /**
364
+ * Sends an event for replay to the DOM.
365
+ * @param target The target for the event.
366
+ * @param event The event object.
367
+ * @return The return value of the event replay, i.e., whether preventDefault()
368
+ * was called on it.
369
+ */
370
+ export function triggerEvent(target, event) {
371
+ if (target.dispatchEvent) {
372
+ return target.dispatchEvent(event);
373
+ }
374
+ else {
375
+ // Suppressing errors for ts-migration.
376
+ // TS2339: Property 'fireEvent' does not exist on type 'Element'.
377
+ // @ts-ignore
378
+ return target.fireEvent('on' + event.type, event);
379
+ }
380
+ }
381
+ /** Do not use outiside of testing. */
382
+ export const testing = {
383
+ createKeyboardModifiersList,
384
+ createGenericEvent,
385
+ isKeyboardEvent,
386
+ isMouseEvent,
387
+ isUiEvent,
388
+ };
389
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwbGF5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29yZS9wcmltaXRpdmVzL2V2ZW50LWRpc3BhdGNoL3NyYy9yZXBsYXkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBRUg7Ozs7R0FJRztBQUVILE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLGtCQUFrQixDQUFDO0FBQ25ELE9BQU8sS0FBSyxhQUFhLE1BQU0sVUFBVSxDQUFDO0FBQzFDLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFNeEM7O0dBRUc7QUFDSCxNQUFNLFVBQVUsV0FBVyxDQUFDLEtBQVksRUFBRSxhQUFzQixFQUFFLFNBQWtCO0lBQ2xGLFlBQVksQ0FBQyxhQUFhLEVBQUUsV0FBVyxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDO0FBQzdELENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBUyxlQUFlLENBQUMsU0FBaUI7SUFDeEMsT0FBTyxDQUNMLFNBQVMsS0FBSyxTQUFTLENBQUMsUUFBUTtRQUNoQyxTQUFTLEtBQUssU0FBUyxDQUFDLE9BQU87UUFDL0IsU0FBUyxLQUFLLFNBQVMsQ0FBQyxLQUFLLENBQzlCLENBQUM7QUFDSixDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILFNBQVMsWUFBWSxDQUFDLFNBQWlCO0lBQ3JDLG9EQUFvRDtJQUNwRCxPQUFPLENBQ0wsU0FBUyxLQUFLLFNBQVMsQ0FBQyxLQUFLO1FBQzdCLFNBQVMsS0FBSyxTQUFTLENBQUMsUUFBUTtRQUNoQyxTQUFTLEtBQUssU0FBUyxDQUFDLFNBQVM7UUFDakMsU0FBUyxLQUFLLFNBQVMsQ0FBQyxTQUFTO1FBQ2pDLFNBQVMsS0FBSyxTQUFTLENBQUMsUUFBUTtRQUNoQyxTQUFTLEtBQUssU0FBUyxDQUFDLFNBQVMsQ0FDbEMsQ0FBQztBQUNKLENBQUM7QUFFRDs7OztHQUlHO0FB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QUNILE1BQU0sVUFBVSxZQUFZLENBQUMsTUFBbUIsRUFBRSxLQUFZO0lBQzVELElBQUksTUFBTSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3pCLE9BQU8sTUFBTSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNyQyxDQUFDO1NBQU0sQ0FBQztRQUNOLHVDQUF1QztRQUN2QyxtRUFBbUU7UUFDbkUsYUFBYTtRQUNiLE9BQVEsTUFBa0IsQ0FBQyxTQUFTLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDakUsQ0FBQztBQUNILENBQUM7QUFFRCxzQ0FBc0M7QUFDdEMsTUFBTSxDQUFDLE1BQU0sT0FBTyxHQUFHO0lBQ3JCLDJCQUEyQjtJQUMzQixrQkFBa0I7SUFDbEIsZUFBZTtJQUNmLFlBQVk7SUFDWixTQUFTO0NBQ1YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG4vKipcbiAqIEBmaWxlb3ZlcnZpZXcgRnVuY3Rpb25zIGZvciByZXBsYXlpbmcgZXZlbnRzIGJ5IHRoZSBqc2FjdGlvblxuICogRGlzcGF0Y2hlci5cbiAqIEFsbCB0cy1pZ25vcmVzIGluIHRoaXMgZmlsZSBhcmUgZHVlIHRvIEFQSXMgdGhhdCBhcmUgbm8gbG9uZ2VyIGluIHRoZSBicm93c2VyLlxuICovXG5cbmltcG9ydCB7Y3JlYXRlQ3VzdG9tRXZlbnR9IGZyb20gJy4vL2N1c3RvbV9ldmVudHMnO1xuaW1wb3J0ICogYXMganNhY3Rpb25FdmVudCBmcm9tICcuLy9ldmVudCc7XG5pbXBvcnQge0V2ZW50VHlwZX0gZnJvbSAnLi8vZXZlbnRfdHlwZSc7XG5cbnR5cGUgV3JpdGVhYmxlPFQ+ID0ge1xuICAtcmVhZG9ubHkgW1AgaW4ga2V5b2YgVF06IFRbUF07XG59O1xuXG4vKipcbiAqIFJlcGxheXMgYW4gZXZlbnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXBsYXlFdmVudChldmVudDogRXZlbnQsIHRhcmdldEVsZW1lbnQ6IEVsZW1lbnQsIGV2ZW50VHlwZT86IHN0cmluZykge1xuICB0cmlnZ2VyRXZlbnQodGFyZ2V0RWxlbWVudCwgY3JlYXRlRXZlbnQoZXZlbnQsIGV2ZW50VHlwZSkpO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBhIGdpdmVuIGV2ZW50IHdhcyB0cmlnZ2VyZWQgYnkgdGhlIGtleWJvYXJkLlxuICogQHBhcmFtIGV2ZW50VHlwZSBUaGUgZXZlbnQgdHlwZS5cbiAqIEByZXR1cm4gV2hldGhlciBpdCdzIGEga2V5Ym9hcmQgZXZlbnQuXG4gKi9cbmZ1bmN0aW9uIGlzS2V5Ym9hcmRFdmVudChldmVudFR5cGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gKFxuICAgIGV2ZW50VHlwZSA9PT0gRXZlbnRUeXBlLktFWVBSRVNTIHx8XG4gICAgZXZlbnRUeXBlID09PSBFdmVudFR5cGUuS0VZRE9XTiB8fFxuICAgIGV2ZW50VHlwZSA9PT0gRXZlbnRUeXBlLktFWVVQXG4gICk7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgZ2l2ZW4gZXZlbnQgd2FzIHRyaWdnZXJlZCBieSB0aGUgbW91c2UuXG4gKiBAcGFyYW0gZXZlbnRUeXBlIFRoZSBldmVudCB0eXBlLlxuICogQHJldHVybiBXaGV0aGVyIGl0J3MgYSBtb3VzZSBldmVudC5cbiAqL1xuZnVuY3Rpb24gaXNNb3VzZUV2ZW50KGV2ZW50VHlwZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gIC8vIFRPRE86IFZlcmlmeSBpZiBEcmFnIGV2ZW50cyBzaG91bGQgYmUgYm91bmQgaGVyZS5cbiAgcmV0dXJuIChcbiAgICBldmVudFR5cGUgPT09IEV2ZW50VHlwZS5DTElDSyB8fFxuICAgIGV2ZW50VHlwZSA9PT0gRXZlbnRUeXBlLkRCTENMSUNLIHx8XG4gICAgZXZlbnRUeXBlID09PSBFdmVudFR5cGUuTU9VU0VET1dOIHx8XG4gICAgZXZlbnRUeXBlID09PSBFdmVudFR5cGUuTU9VU0VPVkVSIHx8XG4gICAgZXZlbnRUeXBlID09PSBFdmVudFR5cGUuTU9VU0VPVVQgfHxcbiAgICBldmVudFR5cGUgPT09IEV2ZW50VHlwZS5NT1VTRU1PVkVcbiAgKTtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgYSBnaXZlbiBldmVudCBpcyBhIGdlbmVyYWwgVUkgZXZlbnQuXG4gKiBAcGFyYW0gZXZlbnRUeXBlIFRoZSBldmVudCB0eXBlLlxuICogQHJldHVybiBXaGV0aGVyIGl0J3MgYSBmb2N1cyBldmVudC5cbiAqL1xuZnVuY3Rpb24gaXNVaUV2ZW50KGV2ZW50VHlwZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gIC8vIEFsbW9zdCBub2JvZHkgc3VwcG9ydHMgdGhlIFczQyBtZXRob2Qgb2YgY3JlYXRpbmcgRm9jdXNFdmVudHMuXG4gIC8vIEZvciBub3csIHdlJ3JlIGdvaW5nIHRvIHVzZSB0aGUgVUlFdmVudCBhcyBhIHN1cGVyLWludGVyZmFjZS5cbiAgcmV0dXJuIChcbiAgICBldmVudFR5cGUgPT09IEV2ZW50VHlwZS5GT0NVUyB8fFxuICAgIGV2ZW50VHlwZSA9PT0gRXZlbnRUeXBlLkJMVVIgfHxcbiAgICBldmVudFR5cGUgPT09IEV2ZW50VHlwZS5GT0NVU0lOIHx8XG4gICAgZXZlbnRUeXBlID09PSBFdmVudFR5cGUuRk9DVVNPVVQgfHxcbiAgICBldmVudFR5cGUgPT09IEV2ZW50VHlwZS5TQ1JPTExcbiAgKTtcbn1cblxuLyoqXG4gKiBDcmVhdGUgYSB3aGl0ZXNwYWNlLWRlbGluZWF0ZWQgbGlzdCBvZiBtb2RpZmllciBrZXlzIHRoYXQgc2hvdWxkIGJlXG4gKiBjb25zaWRlcmVkIHRvIGJlIGFjdGl2ZSBvbiB0aGUgZXZlbnQncyBrZXkuIFNlZSBkZXRhaWxzIGF0XG4gKiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi9ET00vS2V5Ym9hcmRFdmVudC5cbiAqIEBwYXJhbSBhbHQgQWx0IHByZXNzZWQuXG4gKiBAcGFyYW0gY3RybCBDb250cm9sIHByZXNzZWQuXG4gKiBAcGFyYW0gbWV0YSBDb21tYW5kIHByZXNzZWQgKE9TWCBvbmx5KS5cbiAqIEBwYXJhbSBzaGlmdCBTaGlmdCBwcmVzc2VkLlxuICogQHJldHVybiBUaGUgY29uc3RydWN0ZWQgbW9kaWZpZXIga2V5cyBzdHJpbmcuXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUtleWJvYXJkTW9kaWZpZXJzTGlzdChcbiAgYWx0OiBib29sZWFuLFxuICBjdHJsOiBib29sZWFuLFxuICBtZXRhOiBib29sZWFuLFxuICBzaGlmdDogYm9vbGVhbixcbik6IHN0cmluZyB7XG4gIGNvbnN0IGtleXMgPSBbXTtcbiAgaWYgKGFsdCkge1xuICAgIGtleXMucHVzaCgnQWx0Jyk7XG4gIH1cbiAgaWYgKGN0cmwpIHtcbiAgICBrZXlzLnB1c2goJ0NvbnRyb2wnKTtcbiAgfVxuICBpZiAobWV0YSkge1xuICAgIGtleXMucHVzaCgnTWV0YScpO1xuICB9XG4gIGlmIChzaGlmdCkge1xuICAgIGtleXMucHVzaCgnU2hpZnQnKTtcbiAgfVxuICByZXR1cm4ga2V5cy5qb2luKCcgJyk7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIFVJIGV2ZW50IG9iamVjdCBmb3IgcmVwbGF5aW5nIHRocm91Z2ggdGhlIERPTS5cbiAqIEBwYXJhbSBvcmlnaW5hbCBUaGUgZXZlbnQgdG8gY3JlYXRlIGEgbmV3IGV2ZW50IGZyb20uXG4gKiBAcGFyYW0gb3B0X2V2ZW50VHlwZSBUaGUgdHlwZSB0aGlzIGV2ZW50IGlzIGJlaW5nIGhhbmRsZWQgYXMgYnkganNhY3Rpb24uXG4gKiAgICAgZS5nLiBibHVyIGV2ZW50cyBhcmUgaGFuZGxlZCBhcyBmb2N1c291dFxuICogQHJldHVybiBUaGUgZXZlbnQgb2JqZWN0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlVWlFdmVudChvcmlnaW5hbDogRXZlbnQsIG9wdF9ldmVudFR5cGU/OiBzdHJpbmcpOiBFdmVudCB7XG4gIGxldCBldmVudDogV3JpdGVhYmxlPFVJRXZlbnQ+ICYge29yaWdpbmFsVGltZXN0YW1wPzogRE9NSGlnaFJlc1RpbWVTdGFtcH07XG4gIGlmIChkb2N1bWVudC5jcmVhdGVFdmVudCkge1xuICAgIGNvbnN0IG9yaWdpbmFsVWlFdmVudCA9IG9yaWdpbmFsIGFzIFVJRXZlbnQ7XG4gICAgLy8gRXZlbnQgY3JlYXRpb24gYXMgcGVyIFczQyBldmVudCBtb2RlbCBzcGVjaWZpY2F0aW9uLiAgVGhpcyBjb2RlcGF0aFxuICAgIC8vIGlzIHVzZWQgYnkgbW9zdCBub24tSUUgYnJvd3NlcnMgYW5kIGFsc28gYnkgSUUgOSBhbmQgbGF0ZXIuXG4gICAgZXZlbnQgPSBkb2N1bWVudC5jcmVhdGVFdmVudCgnVUlFdmVudCcpO1xuICAgIC8vIE9uIElFIGFuZCBPcGVyYSA8IDEyLCB3ZSBtdXN0IHByb3ZpZGUgbm9uLXVuZGVmaW5lZCB2YWx1ZXMgdG9cbiAgICAvLyBpbml0RXZlbnQsIG90aGVyd2lzZSBpdCB3aWxsIGZhaWwuXG4gICAgZXZlbnQuaW5pdFVJRXZlbnQoXG4gICAgICBvcHRfZXZlbnRUeXBlIHx8IG9yaWdpbmFsVWlFdmVudC50eXBlLFxuICAgICAgb3JpZ2luYWxVaUV2ZW50LmJ1YmJsZXMgIT09IHVuZGVmaW5lZCA/IG9yaWdpbmFsVWlFdmVudC5idWJibGVzIDogdHJ1ZSxcbiAgICAgIG9yaWdpbmFsVWlFdmVudC5jYW5jZWxhYmxlIHx8IGZhbHNlLFxuICAgICAgb3JpZ2luYWxVaUV2ZW50LnZpZXcgfHwgd2luZG93LFxuICAgICAgKG9yaWdpbmFsIGFzIEN1c3RvbUV2ZW50KS5kZXRhaWwgfHwgMCxcbiAgICApO1xuICAgIC8vIGRldGFpbFxuICB9IGVsc2Uge1xuICAgIC8vIE9sZGVyIHZlcnNpb25zIG9mIElFICh1cCB0byB2ZXJzaW9uIDgpIGRvIG5vdCBzdXBwb3J0IHRoZVxuICAgIC8vIFczQyBldmVudCBtb2RlbC4gVXNlIHRoZSBJRSBzcGVjaWZpYyBmdW5jdGlvbiBpbnN0ZWFkLlxuICAgIC8vIFN1cHByZXNzaW5nIGVycm9ycyBmb3IgdHMtbWlncmF0aW9uLlxuICAgIC8vICAgVFMyMzM5OiBQcm9wZXJ0eSAnY3JlYXRlRXZlbnRPYmplY3QnIGRvZXMgbm90IGV4aXN0IG9uIHR5cGUgJ0RvY3VtZW50Jy5cbiAgICAvLyBAdHMtaWdub3JlXG4gICAgZXZlbnQgPSBkb2N1bWVudC5jcmVhdGVFdmVudE9iamVjdCgpO1xuICAgIGV2ZW50LnR5cGUgPSBvcHRfZXZlbnRUeXBlIHx8IG9yaWdpbmFsLnR5cGU7XG4gICAgZXZlbnQuYnViYmxlcyA9IG9yaWdpbmFsLmJ1YmJsZXMgIT09IHVuZGVmaW5lZCA/IG9yaWdpbmFsLmJ1YmJsZXMgOiB0cnVlO1xuICAgIGV2ZW50LmNhbmNlbGFibGUgPSBvcmlnaW5hbC5jYW5jZWxhYmxlIHx8IGZhbHNlO1xuICAgIGV2ZW50LnZpZXcgPSAob3JpZ2luYWwgYXMgV3JpdGVhYmxlPFVJRXZlbnQ+KS52aWV3IHx8IHdpbmRvdztcbiAgICBldmVudC5kZXRhaWwgPSAob3JpZ2luYWwgYXMgQ3VzdG9tRXZlbnQpLmRldGFpbCB8fCAwO1xuICB9XG4gIC8vIFNvbWUgZm9jdXMgZXZlbnRzIGFsc28gaGF2ZSBhIG51bGxhYmxlIHJlbGF0ZWRUYXJnZXQgdmFsdWUgd2hpY2ggaXNuJ3RcbiAgLy8gZGlyZWN0bHkgc3VwcG9ydGVkIGluIHRoZSBpbml0VUlFdmVudCgpIG1ldGhvZC5cbiAgKGV2ZW50IGFzIFdyaXRlYWJsZTxGb2N1c0V2ZW50PikucmVsYXRlZFRhcmdldCA9IChvcmlnaW5hbCBhcyBGb2N1c0V2ZW50KS5yZWxhdGVkVGFyZ2V0IHx8IG51bGw7XG4gIGV2ZW50Lm9yaWdpbmFsVGltZXN0YW1wID0gb3JpZ2luYWwudGltZVN0YW1wO1xuICByZXR1cm4gZXZlbnQ7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIGtleWJvYXJkIGV2ZW50IG9iamVjdCBmb3IgcmVwbGF5aW5nIHRocm91Z2ggdGhlIERPTS5cbiAqIEBwYXJhbSBvcmlnaW5hbCBUaGUgZXZlbnQgdG8gY3JlYXRlIGEgbmV3IGV2ZW50IGZyb20uXG4gKiBAcGFyYW0gb3B0X2V2ZW50VHlwZSBUaGUgdHlwZSB0aGlzIGV2ZW50IGlzIGJlaW5nIGhhbmRsZWQgYXMgYnkganNhY3Rpb24uXG4gKiAgICAgRS5nLiBhIGtleXByZXNzIGlzIGhhbmRsZWQgYXMgY2xpY2sgaW4gc29tZSBjYXNlcy5cbiAqIEByZXR1cm4gVGhlIGV2ZW50IG9iamVjdC5cbiAqIEBzdXBwcmVzcyB7c3RyaWN0TWlzc2luZ1Byb3BlcnRpZXN9IFR3byBkZWZpbml0aW9ucyBvZiBpbml0S2V5Ym9hcmRFdmVudC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUtleWJvYXJkRXZlbnQob3JpZ2luYWw6IEV2ZW50LCBvcHRfZXZlbnRUeXBlPzogc3RyaW5nKTogRXZlbnQge1xuICBsZXQgZXZlbnQ7XG4gIGNvbnN0IGtleWJvYXJkRXZlbnQgPSBvcmlnaW5hbCBhcyBLZXlib2FyZEV2ZW50O1xuICBpZiAoZG9jdW1lbnQuY3JlYXRlRXZlbnQpIHtcbiAgICAvLyBFdmVudCBjcmVhdGlvbiBhcyBwZXIgVzNDIGV2ZW50IG1vZGVsIHNwZWNpZmljYXRpb24uICBUaGlzIGNvZGVwYXRoXG4gICAgLy8gaXMgdXNlZCBieSBtb3N0IG5vbi1JRSBicm93c2VycyBhbmQgYWxzbyBieSBJRSA5IGFuZCBsYXRlci5cbiAgICBldmVudCA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KCdLZXlib2FyZEV2ZW50Jyk7XG4gICAgaWYgKGV2ZW50LmluaXRLZXlib2FyZEV2ZW50KSB7XG4gICAgICBpZiAoanNhY3Rpb25FdmVudC5pc0llKSB7XG4gICAgICAgIC8vIElFOStcbiAgICAgICAgLy8gaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvcHJldmlvdXMtdmVyc2lvbnMvd2luZG93cy9pbnRlcm5ldC1leHBsb3Jlci9pZS1kZXZlbG9wZXIvcGxhdGZvcm0tYXBpcy9mZjk3NTk0NSh2PXZzLjg1KVxuICAgICAgICBjb25zdCBtb2RpZmllcnMgPSBjcmVhdGVLZXlib2FyZE1vZGlmaWVyc0xpc3QoXG4gICAgICAgICAga2V5Ym9hcmRFdmVudC5hbHRLZXksXG4gICAgICAgICAga2V5Ym9hcmRFdmVudC5jdHJsS2V5LFxuICAgICAgICAgIGtleWJvYXJkRXZlbnQubWV0YUtleSxcbiAgICAgICAgICBrZXlib2FyZEV2ZW50LnNoaWZ0S2V5LFxuICAgICAgICApO1xuICAgICAgICBldmVudC5pbml0S2V5Ym9hcmRFdmVudChcbiAgICAgICAgICBvcHRfZXZlbnRUeXBlIHx8IGtleWJvYXJkRXZlbnQudHlwZSxcbiAgICAgICAgICB0cnVlLFxuICAgICAgICAgIHRydWUsXG4gICAgICAgICAgd2luZG93LFxuICAgICAgICAgIGtleWJvYXJkRXZlbnQua2V5LFxuICAgICAgICAgIGtleWJvYXJkRXZlbnQubG9jYXRpb24sXG4gICAgICAgICAgLy8gU3VwcHJlc3NpbmcgZXJyb3JzIGZvciB0cy1taWdyYXRpb24uXG4gICAgICAgICAgLy8gICBUUzIzNDU6IEFyZ3VtZW50IG9mIHR5cGUgJ3N0cmluZycgaXMgbm90IGFzc2lnbmFibGUgdG9cbiAgICAgICAgICAvLyAgIHBhcmFtZXRlciBvZiB0eXBlICdib29sZWFuIHwgdW5kZWZpbmVkJy5cbiAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgbW9kaWZpZXJzLFxuICAgICAgICAgIGtleWJvYXJkRXZlbnQucmVwZWF0LFxuICAgICAgICAgIC8vIEB0cy1pZ25vcmUgVGhpcyBkb2Vzbid0IGV4aXN0XG4gICAgICAgICAga2V5Ym9hcmRFdmVudC5sb2NhbGUsXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBXM0MgRE9NIExldmVsIDMgRXZlbnRzIG1vZGVsLlxuICAgICAgICAvLyBodHRwczovL3d3dy53My5vcmcvVFIvdWlldmVudHMvI2lkbC1pbnRlcmZhY2UtS2V5Ym9hcmRFdmVudC1pbml0aWFsaXplcnNcbiAgICAgICAgZXZlbnQuaW5pdEtleWJvYXJkRXZlbnQoXG4gICAgICAgICAgb3B0X2V2ZW50VHlwZSB8fCBvcmlnaW5hbC50eXBlLFxuICAgICAgICAgIHRydWUsXG4gICAgICAgICAgdHJ1ZSxcbiAgICAgICAgICB3aW5kb3csXG4gICAgICAgICAga2V5Ym9hcmRFdmVudC5rZXksXG4gICAgICAgICAga2V5Ym9hcmRFdmVudC5sb2NhdGlvbixcbiAgICAgICAgICBrZXlib2FyZEV2ZW50LmN0cmxLZXksXG4gICAgICAgICAga2V5Ym9hcmRFdmVudC5hbHRLZXksXG4gICAgICAgICAga2V5Ym9hcmRFdmVudC5zaGlmdEtleSxcbiAgICAgICAgICBrZXlib2FyZEV2ZW50Lm1ldGFLZXksXG4gICAgICAgICk7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShldmVudCwgJ3JlcGVhdCcsIHtcbiAgICAgICAgICBnZXQ6ICgpID0+IChvcmlnaW5hbCBhcyBLZXlib2FyZEV2ZW50KS5yZXBlYXQsXG4gICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIEFkZCBtaXNzaW5nICdsb2NhbGUnIHdoaWNoIGlzIG5vdCBwYXJ0IG9mIHRoZSBzcGVjLlxuICAgICAgICAvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD0xNjg5NzFcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV2ZW50LCAnbG9jYWxlJywge1xuICAgICAgICAgIC8vIFN1cHByZXNzaW5nIGVycm9ycyBmb3IgdHMtbWlncmF0aW9uLlxuICAgICAgICAgIC8vICAgVFMyMzM5OiBQcm9wZXJ0eSAnbG9jYWxlJyBkb2VzIG5vdCBleGlzdCBvbiB0eXBlICdFdmVudCcuXG4gICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgIGdldDogKCkgPT4gb3JpZ2luYWwubG9jYWxlLFxuICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIH0pO1xuICAgICAgICAvLyBBcHBsZSBXZWJLaXQgaGFzIGEgbm9uLXN0YW5kYXJkIGFsdEdyYXBoS2V5IHRoYXQgaXMgbm90IGltcGxlbWVudGVkXG4gICAgICAgIC8vIGhlcmUuXG4gICAgICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9kb2N1bWVudGF0aW9uL3dlYmtpdGpzL2tleWJvYXJkZXZlbnQvMTYzMzc1My1pbml0a2V5Ym9hcmRldmVudFxuICAgICAgfVxuICAgICAgLy8gQmxpbmsgYW5kIFdlYmtpdCBoYWQgYSBidWcgdGhhdCBjYXVzZXMgdGhlIGBjaGFyQ29kZWAsIGBrZXlDb2RlYCwgYW5kXG4gICAgICAvLyBgd2hpY2hgIHByb3BlcnRpZXMgdG8gYWx3YXlzIGJlIHVuc2V0IHdoZW4gc3ludGhlc2l6aW5nIGEga2V5Ym9hcmRcbiAgICAgIC8vIGV2ZW50LiBEZXRhaWxzIGF0OiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY3MzUuIFdpdGhcbiAgICAgIC8vIHRoZXNlIHByb3BlcnRpZXMgYmVpbmcgZGVwcmVjYXRlZCwgdGhlIGJ1ZyBoYXMgZXZvbHZlZCBpbnRvIGFmZmVjdGluZ1xuICAgICAgLy8gdGhlIGBrZXlgIHByb3BlcnR5LiBXZSB3b3JrIGFyb3VuZCBpdCBieSByZWRlZmluaW5nIHRoZSBga2V5YCBhbmRcbiAgICAgIC8vIGRlcHJlY2F0ZWQgcHJvcGVydGllczsgYSBzaW1wbGUgYXNzaWdubWVudCBoZXJlIHdvdWxkIGZhaWwgYmVjYXVzZSB0aGVcbiAgICAgIC8vIG5hdGl2ZSBwcm9wZXJ0aWVzIGFyZSByZWFkb25seS5cbiAgICAgIGlmIChqc2FjdGlvbkV2ZW50LmlzV2ViS2l0KSB7XG4gICAgICAgIGlmIChrZXlib2FyZEV2ZW50LmtleSAmJiBldmVudC5rZXkgPT09ICcnKSB7XG4gICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV2ZW50LCAna2V5Jywge1xuICAgICAgICAgICAgZ2V0OiAoKSA9PiBrZXlib2FyZEV2ZW50LmtleSxcbiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIFJlLWltcGxlbWVudCB0aGUgZGVwcmVjYXRlZCBgY2hhckNvZGVgLCBga2V5Q29kZWAgYW5kIGB3aGljaGAgd2hpY2hcbiAgICAgIC8vIGFyZSBhbHNvIGFuIGlzc3VlIG9uIElFOSsuXG4gICAgICBpZiAoanNhY3Rpb25FdmVudC5pc1dlYktpdCB8fCBqc2FjdGlvbkV2ZW50LmlzSWUgfHwganNhY3Rpb25FdmVudC5pc0dlY2tvKSB7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShldmVudCwgJ2NoYXJDb2RlJywge1xuICAgICAgICAgIGdldDogKCkgPT4gKG9yaWdpbmFsIGFzIEtleWJvYXJkRXZlbnQpLmNoYXJDb2RlLFxuICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBrZXlDb2RlR2V0dGVyID0gKCkgPT4gKG9yaWdpbmFsIGFzIEtleWJvYXJkRXZlbnQpLmtleUNvZGU7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShldmVudCwgJ2tleUNvZGUnLCB7XG4gICAgICAgICAgZ2V0OiBrZXlDb2RlR2V0dGVyLFxuICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIH0pO1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXZlbnQsICd3aGljaCcsIHtcbiAgICAgICAgICBnZXQ6IGtleUNvZGVHZXR0ZXIsXG4gICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEdlY2tvIG9ubHkgc3VwcG9ydHMgYW4gb2xkZXIvZGVwcmVjYXRlZCB2ZXJzaW9uIGZyb20gRE9NIExldmVsIDIuIFNlZVxuICAgICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0tleWJvYXJkRXZlbnQvaW5pdEtleUV2ZW50XG4gICAgICAvLyBmb3IgZGV0YWlscy5cbiAgICAgIC8vIEB0cy1pZ25vcmUgZGl0dG9cbiAgICAgIGV2ZW50LmluaXRLZXlFdmVudChcbiAgICAgICAgb3B0X2V2ZW50VHlwZSB8fCBvcmlnaW5hbC50eXBlLFxuICAgICAgICB0cnVlLFxuICAgICAgICB0cnVlLFxuICAgICAgICB3aW5kb3csXG4gICAgICAgIC8vIFN1cHByZXNzaW5nIGVycm9ycyBmb3IgdHMtbWlncmF0aW9uLlxuICAgICAgICAvLyAgIFRTMjMzOTogUHJvcGVydHkgJ2N0cmxLZXknIGRvZXMgbm90IGV4aXN0IG9uIHR5cGUgJ0V2ZW50Jy5cbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICBvcmlnaW5hbC5jdHJsS2V5LFxuICAgICAgICAvLyBTdXBwcmVzc2luZyBlcnJvcnMgZm9yIHRzLW1pZ3JhdGlvbi5cbiAgICAgICAgLy8gICBUUzIzMzk6IFByb3BlcnR5ICdhbHRLZXknIGRvZXMgbm90IGV4aXN0IG9uIHR5cGUgJ0V2ZW50Jy5cbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICBvcmlnaW5hbC5hbHRLZXksXG4gICAgICAgIC8vIFN1cHByZXNzaW5nIGVycm9ycyBmb3IgdHMtbWlncmF0aW9uLlxuICAgICAgICAvLyAgIFRTMjMzOTogUHJvcGVydHkgJ3NoaWZ0S2V5JyBkb2VzIG5vdCBleGlzdCBvbiB0eXBlICdFdmVudCcuXG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgb3JpZ2luYWwuc2hpZnRLZXksXG4gICAgICAgIC8vIFN1cHByZXNzaW5nIGVycm9ycyBmb3IgdHMtbWlncmF0aW9uLlxuICAgICAgICAvLyAgIFRTMjMzOTogUHJvcGVydHkgJ21ldGFLZXknIGRvZXMgbm90IGV4aXN0IG9uIHR5cGUgJ0V2ZW50Jy5cbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICBvcmlnaW5hbC5tZXRhS2V5LFxuICAgICAgICAvLyBTdXBwcmVzc2luZyBlcnJvcnMgZm9yIHRzLW1pZ3JhdGlvbi5cbiAgICAgICAgLy8gICBUUzIzMzk6IFByb3BlcnR5ICdrZXlDb2RlJyBkb2VzIG5vdCBleGlzdCBvbiB0eXBlICdFdmVudCcuXG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgb3JpZ2luYWwua2V5Q29kZSxcbiAgICAgICAgLy8gU3VwcHJlc3NpbmcgZXJyb3JzIGZvciB0cy1taWdyYXRpb24uXG4gICAgICAgIC8vICAgVFMyMzM5OiBQcm9wZXJ0eSAnY2hhckNvZGUnIGRvZXMgbm90IGV4aXN0IG9uIHR5cGUgJ0V2ZW50Jy5cbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICBvcmlnaW5hbC5jaGFyQ29kZSxcbiAgICAgICk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIE9sZGVyIHZlcnNpb25zIG9mIElFICh1cCB0byB2ZXJzaW9uIDgpIGRvIG5vdCBzdXBwb3J0IHRoZVxuICAgIC8vIFczQyBldmVudCBtb2RlbC4gVXNlIHRoZSBJRSBzcGVjaWZpYyBmdW5jdGlvbiBpbnN0ZWFkLlxuICAgIC8vIFN1cHByZXNzaW5nIGVycm9ycyBmb3IgdHMtbWlncmF0aW9uLlxuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBldmVudCA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50T2JqZWN0KCk7XG4gICAgZXZlbnQudHlwZSA9IG9wdF9ldmVudFR5cGUgfHwgb3JpZ2luYWwudHlwZTtcbiAgICBjb25zdCBvcmlnaW5hbEtleWJvYXJkRXZlbnQgPSBvcmlnaW5hbCBhcyBLZXlib2FyZEV2ZW50O1xuICAgIGV2ZW50LnJlcGVhdCA9IG9yaWdpbmFsS2V5Ym9hcmRFdmVudC5yZXBlYXQ7XG4gICAgZXZlbnQuY3RybEtleSA9IG9yaWdpbmFsS2V5Ym9hcmRFdmVudC5jdHJsS2V5O1xuICAgIGV2ZW50LmFsdEtleSA9IG9yaWdpbmFsS2V5Ym9hcmRFdmVudC5hbHRLZXk7XG4gICAgZXZlbnQuc2hpZnRLZXkgPSBvcmlnaW5hbEtleWJvYXJkRXZlbnQuc2hpZnRLZXk7XG4gICAgZXZlbnQubWV0YUtleSA9IG9yaWdpbmFsS2V5Ym9hcmRFdmVudC5tZXRhS2V5O1xuICAgIGV2ZW50LmtleSA9IG9yaWdpbmFsS2V5Ym9hcmRFdmVudC5rZXk7XG4gICAgZXZlbnQua2V5Q29kZSA9IG9yaWdpbmFsS2V5Ym9hcmRFdmVudC5rZXlDb2RlO1xuICAgIGV2ZW50LmNoYXJDb2RlID0gb3JpZ2luYWxLZXlib2FyZEV2ZW50LmNoYXJDb2RlO1xuICB9XG4gIGV2ZW50Lm9yaWdpbmFsVGltZXN0YW1wID0gb3JpZ2luYWwudGltZVN0YW1wO1xuICByZXR1cm4gZXZlbnQ7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIG1vdXNlIGV2ZW50IG9iamVjdCBmb3IgcmVwbGF5aW5nIHRocm91Z2ggdGhlIERPTS5cbiAqIEBwYXJhbSBvcmlnaW5hbCBUaGUgZXZlbnQgdG8gY3JlYXRlIGEgbmV3IGV2ZW50IGZyb20uXG4gKiBAcGFyYW0gb3B0X2V2ZW50VHlwZSBUaGUgdHlwZSB0aGlzIGV2ZW50IGlzIGJlaW5nIGhhbmRsZWQgYXMgYnkganNhY3Rpb24uXG4gKiAgICAgRS5nLiBhIGtleXByZXNzIGlzIGhhbmRsZWQgYXMgY2xpY2sgaW4gc29tZSBjYXNlcy5cbiAqIEByZXR1cm4gVGhlIGV2ZW50IG9iamVjdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU1vdXNlRXZlbnQob3JpZ2luYWw6IEV2ZW50LCBvcHRfZXZlbnRUeXBlPzogc3RyaW5nKTogTW91c2VFdmVudCB7XG4gIGxldCBldmVudDtcbiAgY29uc3Qgb3JpZ2luYWxNb3VzZUV2ZW50ID0gb3JpZ2luYWwgYXMgTW91c2VFdmVudDtcbiAgaWYgKGRvY3VtZW50LmNyZWF0ZUV2ZW50KSB7XG4gICAgLy8gRXZlbnQgY3JlYXRpb24gYXMgcGVyIFczQyBldmVudCBtb2RlbCBzcGVjaWZpY2F0aW9uLiAgVGhpcyBjb2RlcGF0aFxuICAgIC8vIGlzIHVzZWQgYnkgbW9zdCBub24tSUUgYnJvd3NlcnMgYW5kIGFsc28gYnkgSUUgOSBhbmQgbGF0ZXIuXG4gICAgZXZlbnQgPSBkb2N1bWVudC5jcmVhdGVFdmVudCgnTW91c2VFdmVudCcpO1xuICAgIC8vIE9uIElFIGFuZCBPcGVyYSA8IDEyLCB3ZSBtdXN0IHByb3ZpZGUgbm9uLXVuZGVmaW5lZCB2YWx1ZXMgdG9cbiAgICAvLyBpbml0TW91c2VFdmVudCwgb3RoZXJ3aXNlIGl0IHdpbGwgZmFpbC5cbiAgICBldmVudC5pbml0TW91c2VFdmVudChcbiAgICAgIG9wdF9ldmVudFR5cGUgfHwgb3JpZ2luYWwudHlwZSxcbiAgICAgIHRydWUsIC8vIGNhbkJ1YmJsZVxuICAgICAgdHJ1ZSwgLy8gY2FuY2VsYWJsZVxuICAgICAgd2luZG93LFxuICAgICAgKG9yaWdpbmFsIGFzIEN1c3RvbUV2ZW50KS5kZXRhaWwgfHwgMSxcbiAgICAgIG9yaWdpbmFsTW91c2VFdmVudC5zY3JlZW5YIHx8IDAsXG4gICAgICBvcmlnaW5hbE1vdXNlRXZlbnQuc2NyZWVuWSB8fCAwLFxuICAgICAgb3JpZ2luYWxNb3VzZUV2ZW50LmNsaWVudFggfHwgMCxcbiAgICAgIG9yaWdpbmFsTW91c2VFdmVudC5jbGllbnRZIHx8IDAsXG4gICAgICBvcmlnaW5hbE1vdXNlRXZlbnQuY3RybEtleSB8fCBmYWxzZSxcbiAgICAgIG9yaWdpbmFsTW91c2VFdmVudC5hbHRLZXkgfHwgZmFsc2UsXG4gICAgICBvcmlnaW5hbE1vdXNlRXZlbnQuc2hpZnRLZXkgfHwgZmFsc2UsXG4gICAgICBvcmlnaW5hbE1vdXNlRXZlbnQubWV0YUtleSB8fCBmYWxzZSxcbiAgICAgIG9yaWdpbmFsTW91c2VFdmVudC5idXR0b24gfHwgMCxcbiAgICAgIG9yaWdpbmFsTW91c2VFdmVudC5yZWxhdGVkVGFyZ2V0IHx8IG51bGwsXG4gICAgKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBPbGRlciB2ZXJzaW9ucyBvZiBJRSAodXAgdG8gdmVyc2lvbiA4KSBkbyBub3Qgc3VwcG9ydCB0aGVcbiAgICAvLyBXM0MgZXZlbnQgbW9kZWwuIFVzZSB0aGUgSUUgc3BlY2lmaWMgZnVuY3Rpb24gaW5zdGVhZC5cbiAgICAvLyBAdHMtaWdub3JlXG4gICAgZXZlbnQgPSBkb2N1bWVudC5jcmVhdGVFdmVudE9iamVjdCgpO1xuICAgIGV2ZW50LnR5cGUgPSBvcHRfZXZlbnRUeXBlIHx8IG9yaWdpbmFsLnR5cGU7XG4gICAgZXZlbnQuY2xpZW50WCA9IG9yaWdpbmFsTW91c2VFdmVudC5jbGllbnRYO1xuICAgIGV2ZW50LmNsaWVudFkgPSBvcmlnaW5hbE1vdXNlRXZlbnQuY2xpZW50WTtcbiAgICBldmVudC5idXR0b24gPSBvcmlnaW5hbE1vdXNlRXZlbnQuYnV0dG9uO1xuICAgIGV2ZW50LmRldGFpbCA9IChvcmlnaW5hbCBhcyBDdXN0b21FdmVudCkuZGV0YWlsO1xuICAgIGV2ZW50LmN0cmxLZXkgPSBvcmlnaW5hbE1vdXNlRXZlbnQuY3RybEtleTtcbiAgICBldmVudC5hbHRLZXkgPSBvcmlnaW5hbE1vdXNlRXZlbnQuYWx0S2V5O1xuICAgIGV2ZW50LnNoaWZ0S2V5ID0gb3JpZ2luYWxNb3VzZUV2ZW50LnNoaWZ0S2V5O1xuICAgIGV2ZW50Lm1ldGFLZXkgPSBvcmlnaW5hbE1vdXNlRXZlbnQubWV0YUtleTtcbiAgfVxuICBldmVudC5vcmlnaW5hbFRpbWVzdGFtcCA9IG9yaWdpbmFsLnRpbWVTdGFtcDtcbiAgcmV0dXJuIGV2ZW50O1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBnZW5lcmljIGV2ZW50IG9iamVjdCBmb3IgcmVwbGF5aW5nIHRocm91Z2ggdGhlIERPTS5cbiAqIEBwYXJhbSBvcmlnaW5hbCBUaGUgZXZlbnQgdG8gY3JlYXRlIGEgbmV3IGV2ZW50IGZyb20uXG4gKiBAcGFyYW0gb3B0X2V2ZW50VHlwZSBUaGUgdHlwZSB0aGlzIGV2ZW50IGlzIGJlaW5nIGhhbmRsZWQgYXMgYnkganNhY3Rpb24uXG4gKiAgICAgRS5nLiBhIGtleXByZXNzIGlzIGhhbmRsZWQgYXMgY2xpY2sgaW4gc29tZSBjYXNlcy5cbiAqIEByZXR1cm4gVGhlIGV2ZW50IG9iamVjdC5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlR2VuZXJpY0V2ZW50KG9yaWdpbmFsOiBFdmVudCwgb3B0X2V2ZW50VHlwZT86IHN0cmluZyk6IEV2ZW50IHtcbiAgbGV0IGV2ZW50O1xuICBpZiAoZG9jdW1lbnQuY3JlYXRlRXZlbnQpIHtcbiAgICAvLyBFdmVudCBjcmVhdGlvbiBhcyBwZXIgVzNDIGV2ZW50IG1vZGVsIHNwZWNpZmljYXRpb24uICBUaGlzIGNvZGVwYXRoXG4gICAgLy8gaXMgdXNlZCBieSBtb3N0IG5vbi1JRSBicm93c2VycyBhbmQgYWxzbyBieSBJRSA5IGFuZCBsYXRlci5cbiAgICBldmVudCA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KCdFdmVudCcpO1xuICAgIGV2ZW50LmluaXRFdmVudChvcHRfZXZlbnRUeXBlIHx8IG9yaWdpbmFsLnR5cGUsIHRydWUsIHRydWUpO1xuICB9IGVsc2Uge1xuICAgIC8vIE9sZGVyIHZlcnNpb25zIG9mIElFICh1cCB0byB2ZXJzaW9uIDgpIGRvIG5vdCBzdXBwb3J0IHRoZVxuICAgIC8vIFczQyBldmVudCBtb2RlbC4gVXNlIHRoZSBJRSBzcGVjaWZpYyBmdW5jdGlvbiBpbnN0ZWFkLlxuICAgIC8vIFN1cHByZXNzaW5nIGVycm9ycyBmb3IgdHMtbWlncmF0aW9uLlxuICAgIC8vICAgVFMyMzM5OiBQcm9wZXJ0eSAnY3JlYXRlRXZlbnRPYmplY3QnIGRvZXMgbm90IGV4aXN0IG9uIHR5cGUgJ0RvY3VtZW50Jy5cbiAgICAvLyBAdHMtaWdub3JlXG4gICAgZXZlbnQgPSBkb2N1bWVudC5jcmVhdGVFdmVudE9iamVjdCgpO1xuICAgIGV2ZW50LnR5cGUgPSBvcHRfZXZlbnRUeXBlIHx8IG9yaWdpbmFsLnR5cGU7XG4gIH1cbiAgZXZlbnQub3JpZ2luYWxUaW1lc3RhbXAgPSBvcmlnaW5hbC50aW1lU3RhbXA7XG4gIHJldHVybiBldmVudDtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGFuIGV2ZW50IG9iamVjdCBmb3IgcmVwbGF5aW5nIHRocm91Z2ggdGhlIERPTS5cbiAqIE5PVEU6IFRoaXMgZnVuY3Rpb24gaXMgdmlzaWJsZSBqdXN0IGZvciB0ZXN0aW5nLiAgUGxlYXNlIGRvbid0IHVzZVxuICogaXQgb3V0c2lkZSBKc0FjdGlvbiBpbnRlcm5hbCB0ZXN0aW5nLlxuICogVE9ETzogQWRkIHN1cHBvcnQgZm9yIEZvY3VzRXZlbnQgYW5kIFdoZWVsRXZlbnQuXG4gKiBAcGFyYW0gYmFzZSBUaGUgZXZlbnQgdG8gY3JlYXRlIGEgbmV3IGV2ZW50IGZyb20uXG4gKiBAcGFyYW0gb3B0X2V2ZW50VHlwZSBUaGUgdHlwZSB0aGlzIGV2ZW50IGlzIGJlaW5nIGhhbmRsZWQgYXMgYnkganNhY3Rpb24uXG4gKiAgICAgRS5nLiBhIGtleXByZXNzIGlzIGhhbmRsZWQgYXMgY2xpY2sgaW4gc29tZSBjYXNlcy5cbiAqIEByZXR1cm4gVGhlIGV2ZW50IG9iamVjdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUV2ZW50KGJhc2U6IHVua25vd24sIG9wdF9ldmVudFR5cGU/OiBzdHJpbmcpOiBFdmVudCB7XG4gIGNvbnN0IG9yaWdpbmFsID0gYmFzZSBhcyBFdmVudDtcbiAgbGV0IGV2ZW50O1xuICBsZXQgZXZlbnRUeXBlO1xuICBpZiAob3JpZ2luYWwudHlwZSA9PT0gRXZlbnRUeXBlLkNVU1RPTSkge1xuICAgIGV2ZW50VHlwZSA9IEV2ZW50VHlwZS5DVVNUT007XG4gIH0gZWxzZSB7XG4gICAgZXZlbnRUeXBlID0gb3B0X2V2ZW50VHlwZSB8fCBvcmlnaW5hbC50eXBlO1xuICB9XG5cbiAgaWYgKGlzS2V5Ym9hcmRFdmVudChldmVudFR5cGUpKSB7XG4gICAgZXZlbnQgPSBjcmVhdGVLZXlib2FyZEV2ZW50KG9yaWdpbmFsLCBvcHRfZXZlbnRUeXBlKTtcbiAgfSBlbHNlIGlmIChpc01vdXNlRXZlbnQoZXZlbnRUeXBlKSkge1xuICAgIGV2ZW50ID0gY3JlYXRlTW91c2VFdmVudChvcmlnaW5hbCwgb3B0X2V2ZW50VHlwZSk7XG4gIH0gZWxzZSBpZiAoaXNVaUV2ZW50KGV2ZW50VHlwZSkpIHtcbiAgICBldmVudCA9IGNyZWF0ZVVpRXZlbnQob3JpZ2luYWwsIG9wdF9ldmVudFR5cGUpO1xuICB9IGVsc2UgaWYgKGV2ZW50VHlwZSA9PT0gRXZlbnRUeXBlLkNVU1RPTSkge1xuICAgIGV2ZW50ID0gY3JlYXRlQ3VzdG9tRXZlbnQoXG4gICAgICBvcHRfZXZlbnRUeXBlISxcbiAgICAgIChvcmlnaW5hbCBhcyBDdXN0b21FdmVudClbJ2RldGFpbCddWydkYXRhJ10sXG4gICAgICAob3JpZ2luYWwgYXMgQ3VzdG9tRXZlbnQpWydkZXRhaWwnXVsndHJpZ2dlcmluZ0V2ZW50J10sXG4gICAgKTtcbiAgICAoZXZlbnQgYXMge29yaWdpbmFsVGltZXN0YW1wPzogbnVtYmVyIHwgbnVsbH0gfCBudWxsKSEub3JpZ2luYWxUaW1lc3RhbXAgPSBvcmlnaW5hbC50aW1lU3RhbXA7XG4gIH0gZWxzZSB7XG4gICAgLy8gVGhpcyBlbnN1cmVzIHdlIGRvbid0IHNlbmQgYW4gdW5kZWZpbmVkIGV2ZW50IG9iamVjdCB0byB0aGUgcmVwbGF5ZXIuXG4gICAgZXZlbnQgPSBjcmVhdGVHZW5lcmljRXZlbnQob3JpZ2luYWwsIG9wdF9ldmVudFR5cGUpO1xuICB9XG4gIHJldHVybiBldmVudDtcbn1cblxuLyoqXG4gKiBTZW5kcyBhbiBldmVudCBmb3IgcmVwbGF5IHRvIHRoZSBET00uXG4gKiBAcGFyYW0gdGFyZ2V0IFRoZSB0YXJnZXQgZm9yIHRoZSBldmVudC5cbiAqIEBwYXJhbSBldmVudCBUaGUgZXZlbnQgb2JqZWN0LlxuICogQHJldHVybiBUaGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBldmVudCByZXBsYXksIGkuZS4sIHdoZXRoZXIgcHJldmVudERlZmF1bHQoKVxuICogICAgIHdhcyBjYWxsZWQgb24gaXQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0cmlnZ2VyRXZlbnQodGFyZ2V0OiBFdmVudFRhcmdldCwgZXZlbnQ6IEV2ZW50KTogYm9vbGVhbiB7XG4gIGlmICh0YXJnZXQuZGlzcGF0Y2hFdmVudCkge1xuICAgIHJldHVybiB0YXJnZXQuZGlzcGF0Y2hFdmVudChldmVudCk7XG4gIH0gZWxzZSB7XG4gICAgLy8gU3VwcHJlc3NpbmcgZXJyb3JzIGZvciB0cy1taWdyYXRpb24uXG4gICAgLy8gICBUUzIzMzk6IFByb3BlcnR5ICdmaXJlRXZlbnQnIGRvZXMgbm90IGV4aXN0IG9uIHR5cGUgJ0VsZW1lbnQnLlxuICAgIC8vIEB0cy1pZ25vcmVcbiAgICByZXR1cm4gKHRhcmdldCBhcyBFbGVtZW50KS5maXJlRXZlbnQoJ29uJyArIGV2ZW50LnR5cGUsIGV2ZW50KTtcbiAgfVxufVxuXG4vKiogRG8gbm90IHVzZSBvdXRpc2lkZSBvZiB0ZXN0aW5nLiAqL1xuZXhwb3J0IGNvbnN0IHRlc3RpbmcgPSB7XG4gIGNyZWF0ZUtleWJvYXJkTW9kaWZpZXJzTGlzdCxcbiAgY3JlYXRlR2VuZXJpY0V2ZW50LFxuICBpc0tleWJvYXJkRXZlbnQsXG4gIGlzTW91c2VFdmVudCxcbiAgaXNVaUV2ZW50LFxufTtcbiJdfQ==
@@ -0,0 +1,15 @@
1
+ /**
2
+ * @license
3
+ * Copyright Google LLC All Rights Reserved.
4
+ *
5
+ * Use of this source code is governed by an MIT-style license that can be
6
+ * found in the LICENSE file at https://angular.io/license
7
+ */
8
+ /**
9
+ * @fileoverview An enum to control who can call certain jsaction APIs.
10
+ */
11
+ export var Restriction;
12
+ (function (Restriction) {
13
+ Restriction[Restriction["I_AM_THE_JSACTION_FRAMEWORK"] = 1] = "I_AM_THE_JSACTION_FRAMEWORK";
14
+ })(Restriction || (Restriction = {}));
15
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzdHJpY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb3JlL3ByaW1pdGl2ZXMvZXZlbnQtZGlzcGF0Y2gvc3JjL3Jlc3RyaWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUVIOztHQUVHO0FBRUgsTUFBTSxDQUFOLElBQVksV0FFWDtBQUZELFdBQVksV0FBVztJQUNyQiwyRkFBK0IsQ0FBQTtBQUNqQyxDQUFDLEVBRlcsV0FBVyxLQUFYLFdBQVcsUUFFdEIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuLyoqXG4gKiBAZmlsZW92ZXJ2aWV3IEFuIGVudW0gdG8gY29udHJvbCB3aG8gY2FuIGNhbGwgY2VydGFpbiBqc2FjdGlvbiBBUElzLlxuICovXG5cbmV4cG9ydCBlbnVtIFJlc3RyaWN0aW9uIHtcbiAgSV9BTV9USEVfSlNBQ1RJT05fRlJBTUVXT1JLID0gMSxcbn1cbiJdfQ==
@@ -8,8 +8,8 @@
8
8
  export { createComputed } from './src/computed';
9
9
  export { defaultEquals } from './src/equality';
10
10
  export { setThrowInvalidWriteToSignalError } from './src/errors';
11
- export { REACTIVE_NODE, SIGNAL, consumerAfterComputation, consumerBeforeComputation, consumerDestroy, consumerMarkDirty, consumerPollProducersForChange, getActiveConsumer, isInNotificationPhase, isReactive, producerAccessed, producerNotifyConsumers, producerUpdateValueVersion, producerUpdatesAllowed, setActiveConsumer } from './src/graph';
12
- export { SIGNAL_NODE, createSignal, setPostSignalSetFn, signalSetFn, signalUpdateFn } from './src/signal';
11
+ export { REACTIVE_NODE, SIGNAL, consumerAfterComputation, consumerBeforeComputation, consumerDestroy, consumerMarkDirty, consumerPollProducersForChange, getActiveConsumer, isInNotificationPhase, isReactive, producerAccessed, producerNotifyConsumers, producerUpdateValueVersion, producerUpdatesAllowed, setActiveConsumer, } from './src/graph';
12
+ export { SIGNAL_NODE, createSignal, setPostSignalSetFn, signalSetFn, signalUpdateFn, } from './src/signal';
13
13
  export { createWatch } from './src/watch';
14
14
  export { setAlternateWeakRefImpl } from './src/weak_ref';
15
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb3JlL3ByaW1pdGl2ZXMvc2lnbmFscy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFFSCxPQUFPLEVBQWUsY0FBYyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDNUQsT0FBTyxFQUFrQixhQUFhLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5RCxPQUFPLEVBQUMsaUNBQWlDLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFDL0QsT0FBTyxFQUFDLGFBQWEsRUFBMEIsTUFBTSxFQUFFLHdCQUF3QixFQUFFLHlCQUF5QixFQUFFLGVBQWUsRUFBRSxpQkFBaUIsRUFBRSw4QkFBOEIsRUFBRSxpQkFBaUIsRUFBRSxxQkFBcUIsRUFBRSxVQUFVLEVBQUUsZ0JBQWdCLEVBQUUsdUJBQXVCLEVBQUUsMEJBQTBCLEVBQUUsc0JBQXNCLEVBQUUsaUJBQWlCLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFDM1csT0FBTyxFQUFDLFdBQVcsRUFBNEIsWUFBWSxFQUFFLGtCQUFrQixFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFDbEksT0FBTyxFQUFnRCxXQUFXLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFDdkYsT0FBTyxFQUFDLHVCQUF1QixFQUFDLE1BQU0sZ0JBQWdCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuZXhwb3J0IHtDb21wdXRlZE5vZGUsIGNyZWF0ZUNvbXB1dGVkfSBmcm9tICcuL3NyYy9jb21wdXRlZCc7XG5leHBvcnQge1ZhbHVlRXF1YWxpdHlGbiwgZGVmYXVsdEVxdWFsc30gZnJvbSAnLi9zcmMvZXF1YWxpdHknO1xuZXhwb3J0IHtzZXRUaHJvd0ludmFsaWRXcml0ZVRvU2lnbmFsRXJyb3J9IGZyb20gJy4vc3JjL2Vycm9ycyc7XG5leHBvcnQge1JFQUNUSVZFX05PREUsIFJlYWN0aXZlLCBSZWFjdGl2ZU5vZGUsIFNJR05BTCwgY29uc3VtZXJBZnRlckNvbXB1dGF0aW9uLCBjb25zdW1lckJlZm9yZUNvbXB1dGF0aW9uLCBjb25zdW1lckRlc3Ryb3ksIGNvbnN1bWVyTWFya0RpcnR5LCBjb25zdW1lclBvbGxQcm9kdWNlcnNGb3JDaGFuZ2UsIGdldEFjdGl2ZUNvbnN1bWVyLCBpc0luTm90aWZpY2F0aW9uUGhhc2UsIGlzUmVhY3RpdmUsIHByb2R1Y2VyQWNjZXNzZWQsIHByb2R1Y2VyTm90aWZ5Q29uc3VtZXJzLCBwcm9kdWNlclVwZGF0ZVZhbHVlVmVyc2lvbiwgcHJvZHVjZXJVcGRhdGVzQWxsb3dlZCwgc2V0QWN0aXZlQ29uc3VtZXJ9IGZyb20gJy4vc3JjL2dyYXBoJztcbmV4cG9ydCB7U0lHTkFMX05PREUsIFNpZ25hbEdldHRlciwgU2lnbmFsTm9kZSwgY3JlYXRlU2lnbmFsLCBzZXRQb3N0U2lnbmFsU2V0Rm4sIHNpZ25hbFNldEZuLCBzaWduYWxVcGRhdGVGbn0gZnJvbSAnLi9zcmMvc2lnbmFsJztcbmV4cG9ydCB7V2F0Y2gsIFdhdGNoQ2xlYW51cEZuLCBXYXRjaENsZWFudXBSZWdpc3RlckZuLCBjcmVhdGVXYXRjaH0gZnJvbSAnLi9zcmMvd2F0Y2gnO1xuZXhwb3J0IHtzZXRBbHRlcm5hdGVXZWFrUmVmSW1wbH0gZnJvbSAnLi9zcmMvd2Vha19yZWYnO1xuXG4iXX0=
15
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb3JlL3ByaW1pdGl2ZXMvc2lnbmFscy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFFSCxPQUFPLEVBQWUsY0FBYyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDNUQsT0FBTyxFQUFrQixhQUFhLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5RCxPQUFPLEVBQUMsaUNBQWlDLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFDL0QsT0FBTyxFQUNMLGFBQWEsRUFHYixNQUFNLEVBQ04sd0JBQXdCLEVBQ3hCLHlCQUF5QixFQUN6QixlQUFlLEVBQ2YsaUJBQWlCLEVBQ2pCLDhCQUE4QixFQUM5QixpQkFBaUIsRUFDakIscUJBQXFCLEVBQ3JCLFVBQVUsRUFDVixnQkFBZ0IsRUFDaEIsdUJBQXVCLEVBQ3ZCLDBCQUEwQixFQUMxQixzQkFBc0IsRUFDdEIsaUJBQWlCLEdBQ2xCLE1BQU0sYUFBYSxDQUFDO0FBQ3JCLE9BQU8sRUFDTCxXQUFXLEVBR1gsWUFBWSxFQUNaLGtCQUFrQixFQUNsQixXQUFXLEVBQ1gsY0FBYyxHQUNmLE1BQU0sY0FBYyxDQUFDO0FBQ3RCLE9BQU8sRUFBZ0QsV0FBVyxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBQ3ZGLE9BQU8sRUFBQyx1QkFBdUIsRUFBQyxNQUFNLGdCQUFnQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmV4cG9ydCB7Q29tcHV0ZWROb2RlLCBjcmVhdGVDb21wdXRlZH0gZnJvbSAnLi9zcmMvY29tcHV0ZWQnO1xuZXhwb3J0IHtWYWx1ZUVxdWFsaXR5Rm4sIGRlZmF1bHRFcXVhbHN9IGZyb20gJy4vc3JjL2VxdWFsaXR5JztcbmV4cG9ydCB7c2V0VGhyb3dJbnZhbGlkV3JpdGVUb1NpZ25hbEVycm9yfSBmcm9tICcuL3NyYy9lcnJvcnMnO1xuZXhwb3J0IHtcbiAgUkVBQ1RJVkVfTk9ERSxcbiAgUmVhY3RpdmUsXG4gIFJlYWN0aXZlTm9kZSxcbiAgU0lHTkFMLFxuICBjb25zdW1lckFmdGVyQ29tcHV0YXRpb24sXG4gIGNvbnN1bWVyQmVmb3JlQ29tcHV0YXRpb24sXG4gIGNvbnN1bWVyRGVzdHJveSxcbiAgY29uc3VtZXJNYXJrRGlydHksXG4gIGNvbnN1bWVyUG9sbFByb2R1Y2Vyc0ZvckNoYW5nZSxcbiAgZ2V0QWN0aXZlQ29uc3VtZXIsXG4gIGlzSW5Ob3RpZmljYXRpb25QaGFzZSxcbiAgaXNSZWFjdGl2ZSxcbiAgcHJvZHVjZXJBY2Nlc3NlZCxcbiAgcHJvZHVjZXJOb3RpZnlDb25zdW1lcnMsXG4gIHByb2R1Y2VyVXBkYXRlVmFsdWVWZXJzaW9uLFxuICBwcm9kdWNlclVwZGF0ZXNBbGxvd2VkLFxuICBzZXRBY3RpdmVDb25zdW1lcixcbn0gZnJvbSAnLi9zcmMvZ3JhcGgnO1xuZXhwb3J0IHtcbiAgU0lHTkFMX05PREUsXG4gIFNpZ25hbEdldHRlcixcbiAgU2lnbmFsTm9kZSxcbiAgY3JlYXRlU2lnbmFsLFxuICBzZXRQb3N0U2lnbmFsU2V0Rm4sXG4gIHNpZ25hbFNldEZuLFxuICBzaWduYWxVcGRhdGVGbixcbn0gZnJvbSAnLi9zcmMvc2lnbmFsJztcbmV4cG9ydCB7V2F0Y2gsIFdhdGNoQ2xlYW51cEZuLCBXYXRjaENsZWFudXBSZWdpc3RlckZuLCBjcmVhdGVXYXRjaH0gZnJvbSAnLi9zcmMvd2F0Y2gnO1xuZXhwb3J0IHtzZXRBbHRlcm5hdGVXZWFrUmVmSW1wbH0gZnJvbSAnLi9zcmMvd2Vha19yZWYnO1xuIl19