angular-three 2.0.0-beta.21 → 2.0.0-beta.223

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 (109) hide show
  1. package/esm2022/index.mjs +4 -11
  2. package/esm2022/lib/canvas.mjs +81 -156
  3. package/esm2022/lib/directives/args.mjs +6 -6
  4. package/esm2022/lib/directives/common.mjs +15 -14
  5. package/esm2022/lib/directives/parent.mjs +6 -6
  6. package/esm2022/lib/dom/events.mjs +2 -2
  7. package/esm2022/lib/events.mjs +28 -25
  8. package/esm2022/lib/instance.mjs +39 -34
  9. package/esm2022/lib/loader.mjs +12 -14
  10. package/esm2022/lib/loop.mjs +9 -10
  11. package/esm2022/lib/portal.mjs +122 -135
  12. package/esm2022/lib/ref.mjs +18 -20
  13. package/esm2022/lib/renderer/catalogue.mjs +2 -2
  14. package/esm2022/lib/renderer/constants.mjs +2 -2
  15. package/esm2022/lib/renderer/index.mjs +58 -62
  16. package/esm2022/lib/renderer/store.mjs +129 -120
  17. package/esm2022/lib/renderer/utils.mjs +35 -42
  18. package/esm2022/lib/roots.mjs +41 -38
  19. package/esm2022/lib/routed-scene.mjs +6 -7
  20. package/esm2022/lib/store.mjs +163 -189
  21. package/esm2022/lib/utils/apply-props.mjs +12 -17
  22. package/esm2022/lib/utils/attach.mjs +6 -6
  23. package/esm2022/lib/utils/before-render.mjs +12 -0
  24. package/esm2022/lib/utils/cd-aware-signal.mjs +24 -0
  25. package/esm2022/lib/utils/create-api-token.mjs +13 -0
  26. package/esm2022/lib/utils/is.mjs +6 -5
  27. package/esm2022/lib/utils/make.mjs +15 -12
  28. package/esm2022/lib/utils/signal-store.mjs +67 -57
  29. package/esm2022/lib/utils/update.mjs +3 -2
  30. package/fesm2022/angular-three.mjs +1621 -1795
  31. package/fesm2022/angular-three.mjs.map +1 -1
  32. package/index.d.ts +6 -10
  33. package/lib/canvas.d.ts +24 -37
  34. package/lib/directives/common.d.ts +12 -1
  35. package/lib/events.d.ts +2 -2
  36. package/lib/instance.d.ts +19 -10
  37. package/lib/loader.d.ts +13 -4
  38. package/lib/loop.d.ts +6 -29
  39. package/lib/portal.d.ts +18 -26
  40. package/lib/ref.d.ts +0 -1
  41. package/lib/renderer/catalogue.d.ts +5 -1
  42. package/lib/renderer/constants.d.ts +1 -1
  43. package/lib/renderer/index.d.ts +55 -4
  44. package/lib/renderer/store.d.ts +18 -21
  45. package/lib/renderer/utils.d.ts +2 -3
  46. package/lib/roots.d.ts +4 -3
  47. package/lib/store.d.ts +9 -11
  48. package/lib/utils/apply-props.d.ts +0 -1
  49. package/lib/{before-render.d.ts → utils/before-render.d.ts} +1 -1
  50. package/lib/utils/cd-aware-signal.d.ts +4 -0
  51. package/lib/utils/create-api-token.d.ts +23 -0
  52. package/lib/utils/is.d.ts +11 -12
  53. package/lib/utils/make.d.ts +3 -2
  54. package/lib/utils/signal-store.d.ts +16 -3
  55. package/metadata.json +1 -1
  56. package/package.json +30 -11
  57. package/plugin/generators.json +0 -32
  58. package/plugin/src/generators/init/compat.d.ts +1 -3
  59. package/plugin/src/generators/init/files/experience/{experience.component.ts.__tmpl__ → experience.component.ts__tmpl__} +1 -0
  60. package/plugin/src/generators/init/generator.d.ts +2 -5
  61. package/plugin/src/generators/init/generator.js +94 -95
  62. package/plugin/src/generators/init/generator.js.map +1 -1
  63. package/plugin/src/generators/init/schema.json +1 -12
  64. package/plugin/src/generators/utils.js.map +1 -1
  65. package/plugin/src/generators/{versions.d.ts → version.d.ts} +5 -3
  66. package/plugin/src/generators/version.js +18 -0
  67. package/plugin/src/generators/version.js.map +1 -0
  68. package/plugin/src/index.d.ts +0 -3
  69. package/plugin/src/index.js +0 -9
  70. package/plugin/src/index.js.map +1 -1
  71. package/web-types.json +1 -1
  72. package/esm2022/lib/before-render.mjs +0 -13
  73. package/esm2022/lib/directives/key.mjs +0 -29
  74. package/esm2022/lib/directives/repeat.mjs +0 -17
  75. package/esm2022/lib/three-types.mjs +0 -2
  76. package/esm2022/lib/utils/assert-injection-context.mjs +0 -14
  77. package/esm2022/lib/utils/create-injection-token.mjs +0 -47
  78. package/esm2022/lib/utils/safe-detect-changes.mjs +0 -17
  79. package/lib/directives/key.d.ts +0 -10
  80. package/lib/directives/repeat.d.ts +0 -7
  81. package/lib/three-types.d.ts +0 -306
  82. package/lib/utils/assert-injection-context.d.ts +0 -2
  83. package/lib/utils/create-injection-token.d.ts +0 -27
  84. package/lib/utils/safe-detect-changes.d.ts +0 -2
  85. package/plugin/package.json +0 -6
  86. package/plugin/src/generators/init-cannon/compat.d.ts +0 -2
  87. package/plugin/src/generators/init-cannon/compat.js +0 -6
  88. package/plugin/src/generators/init-cannon/compat.js.map +0 -1
  89. package/plugin/src/generators/init-cannon/generator.d.ts +0 -2
  90. package/plugin/src/generators/init-cannon/generator.js +0 -22
  91. package/plugin/src/generators/init-cannon/generator.js.map +0 -1
  92. package/plugin/src/generators/init-cannon/schema.json +0 -6
  93. package/plugin/src/generators/init-postprocessing/compat.d.ts +0 -2
  94. package/plugin/src/generators/init-postprocessing/compat.js +0 -6
  95. package/plugin/src/generators/init-postprocessing/compat.js.map +0 -1
  96. package/plugin/src/generators/init-postprocessing/generator.d.ts +0 -2
  97. package/plugin/src/generators/init-postprocessing/generator.js +0 -20
  98. package/plugin/src/generators/init-postprocessing/generator.js.map +0 -1
  99. package/plugin/src/generators/init-postprocessing/schema.json +0 -6
  100. package/plugin/src/generators/init-soba/compat.d.ts +0 -2
  101. package/plugin/src/generators/init-soba/compat.js +0 -6
  102. package/plugin/src/generators/init-soba/compat.js.map +0 -1
  103. package/plugin/src/generators/init-soba/generator.d.ts +0 -2
  104. package/plugin/src/generators/init-soba/generator.js +0 -26
  105. package/plugin/src/generators/init-soba/generator.js.map +0 -1
  106. package/plugin/src/generators/init-soba/schema.json +0 -6
  107. package/plugin/src/generators/versions.js +0 -16
  108. package/plugin/src/generators/versions.js.map +0 -1
  109. /package/plugin/src/generators/init/files/experience/{experience.component.html.__tmpl__ → experience.component.html__tmpl__} +0 -0
@@ -1,7 +1,6 @@
1
- import { ChangeDetectorRef, Injector, effect, inject, runInInjectionContext, signal } from '@angular/core';
2
- import { assertInjectionContext } from './utils/assert-injection-context';
1
+ import { Injector, effect, signal } from '@angular/core';
2
+ import { assertInjector } from 'ngxtension/assert-injector';
3
3
  import { makeObjectGraph } from './utils/make';
4
- import { safeDetectChanges } from './utils/safe-detect-changes';
5
4
  const cached = new Map();
6
5
  function normalizeInputs(input) {
7
6
  if (Array.isArray(input))
@@ -21,8 +20,9 @@ function load(loaderConstructorFactory, inputs, { extensions, onProgress, } = {}
21
20
  if (!cached.has(url)) {
22
21
  cached.set(url, new Promise((resolve, reject) => {
23
22
  loader.load(url, (data) => {
24
- if ('scene' in data)
23
+ if ('scene' in data) {
25
24
  Object.assign(data, makeObjectGraph(data['scene']));
25
+ }
26
26
  resolve(data);
27
27
  }, onProgress, (error) => reject(new Error(`[NGT] Could not load ${url}: ${error}`)));
28
28
  }));
@@ -31,11 +31,9 @@ function load(loaderConstructorFactory, inputs, { extensions, onProgress, } = {}
31
31
  });
32
32
  };
33
33
  }
34
- export function injectNgtLoader(loaderConstructorFactory, inputs, { extensions, onProgress, injector, } = {}) {
35
- injector = assertInjectionContext(injectNgtLoader, injector);
36
- const response = signal(null);
37
- return runInInjectionContext(injector, () => {
38
- const cdr = inject(ChangeDetectorRef);
34
+ function _injectNgtLoader(loaderConstructorFactory, inputs, { extensions, onProgress, injector, } = {}) {
35
+ return assertInjector(_injectNgtLoader, injector, () => {
36
+ const response = signal(null);
39
37
  const effector = load(loaderConstructorFactory, inputs, { extensions, onProgress });
40
38
  effect(() => {
41
39
  const originalUrls = inputs();
@@ -51,16 +49,16 @@ export function injectNgtLoader(loaderConstructorFactory, inputs, { extensions,
51
49
  return result;
52
50
  }, {});
53
51
  });
54
- safeDetectChanges(cdr);
55
52
  });
56
53
  });
57
54
  return response.asReadonly();
58
55
  });
59
56
  }
60
- injectNgtLoader['preload'] = (loaderConstructorFactory, inputs, extensions) => {
61
- Promise.all(load(loaderConstructorFactory, inputs, { extensions })());
57
+ _injectNgtLoader.preload = (loaderConstructorFactory, inputs, extensions) => {
58
+ void Promise.all(load(loaderConstructorFactory, inputs, { extensions })());
62
59
  };
63
- injectNgtLoader['destroy'] = () => {
60
+ _injectNgtLoader.destroy = () => {
64
61
  cached.clear();
65
62
  };
66
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvbG9hZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLEVBQWUsTUFBTSxlQUFlLENBQUM7QUFHeEgsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDMUUsT0FBTyxFQUFFLGVBQWUsRUFBcUIsTUFBTSxjQUFjLENBQUM7QUFDbEUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUEwQmhFLE1BQU0sTUFBTSxHQUFHLElBQUksR0FBRyxFQUFFLENBQUM7QUFFekIsU0FBUyxlQUFlLENBQUMsS0FBaUQ7SUFDekUsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztRQUFFLE9BQU8sS0FBSyxDQUFDO0lBQ3ZDLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUTtRQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM5QyxPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDN0IsQ0FBQztBQUVELFNBQVMsSUFBSSxDQUtaLHdCQUFrRSxFQUNsRSxNQUFrQixFQUNsQixFQUNDLFVBQVUsRUFDVixVQUFVLE1BSVAsRUFBRTtJQUVOLE9BQU8sR0FBd0IsRUFBRTtRQUNoQyxNQUFNLElBQUksR0FBRyxlQUFlLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztRQUN2QyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsd0JBQXdCLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ3RELElBQUksVUFBVTtZQUFFLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNuQyx3QkFBd0I7UUFDeEIsT0FBTyxJQUFJLENBQUMsR0FB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LElBQUksQ0FBQyx3QkFBd0IsRUFBRSxNQUFNLEVBQUUsRUFBRSxVQUFVLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN2RSxDQUFDLENBQUM7QUFFRixlQUFlLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxFQUFFO0lBQ2pDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNoQixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3RvclJlZiwgSW5qZWN0b3IsIGVmZmVjdCwgaW5qZWN0LCBydW5JbkluamVjdGlvbkNvbnRleHQsIHNpZ25hbCwgdHlwZSBTaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB0eXBlIHsgR0xURiB9IGZyb20gJ3RocmVlL2V4YW1wbGVzL2pzbS9sb2FkZXJzL0dMVEZMb2FkZXInO1xuaW1wb3J0IHR5cGUgeyBOZ3RBbnlSZWNvcmQgfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IGFzc2VydEluamVjdGlvbkNvbnRleHQgfSBmcm9tICcuL3V0aWxzL2Fzc2VydC1pbmplY3Rpb24tY29udGV4dCc7XG5pbXBvcnQgeyBtYWtlT2JqZWN0R3JhcGgsIHR5cGUgTmd0T2JqZWN0TWFwIH0gZnJvbSAnLi91dGlscy9tYWtlJztcbmltcG9ydCB7IHNhZmVEZXRlY3RDaGFuZ2VzIH0gZnJvbSAnLi91dGlscy9zYWZlLWRldGVjdC1jaGFuZ2VzJztcblxuZXhwb3J0IGludGVyZmFjZSBOZ3RMb2FkZXI8VD4gZXh0ZW5kcyBUSFJFRS5Mb2FkZXIge1xuXHRsb2FkKFxuXHRcdHVybDogc3RyaW5nLFxuXHRcdG9uTG9hZD86IChyZXN1bHQ6IFQpID0+IHZvaWQsXG5cdFx0b25Qcm9ncmVzcz86IChldmVudDogUHJvZ3Jlc3NFdmVudCkgPT4gdm9pZCxcblx0XHRvbkVycm9yPzogKGV2ZW50OiBFcnJvckV2ZW50KSA9PiB2b2lkLFxuXHQpOiB1bmtub3duO1xuXHRsb2FkQXN5bmModXJsOiBzdHJpbmcsIG9uUHJvZ3Jlc3M/OiAoZXZlbnQ6IFByb2dyZXNzRXZlbnQpID0+IHZvaWQpOiBQcm9taXNlPFQ+O1xufVxuXG5leHBvcnQgdHlwZSBOZ3RMb2FkZXJQcm90bzxUPiA9IG5ldyAoLi4uYXJnczogYW55KSA9PiBOZ3RMb2FkZXI8VCBleHRlbmRzIHVua25vd24gPyBhbnkgOiBUPjtcbmV4cG9ydCB0eXBlIE5ndExvYWRlclJldHVyblR5cGU8VCwgTCBleHRlbmRzIE5ndExvYWRlclByb3RvPFQ+PiA9IFQgZXh0ZW5kcyB1bmtub3duXG5cdD8gQXdhaXRlZDxSZXR1cm5UeXBlPEluc3RhbmNlVHlwZTxMPlsnbG9hZEFzeW5jJ10+PlxuXHQ6IFQ7XG5cbmV4cG9ydCB0eXBlIE5ndExvYWRlckV4dGVuc2lvbnM8VCBleHRlbmRzIHsgcHJvdG90eXBlOiBOZ3RMb2FkZXJQcm90bzxhbnk+IH0+ID0gKGxvYWRlcjogVFsncHJvdG90eXBlJ10pID0+IHZvaWQ7XG5leHBvcnQgdHlwZSBOZ3RDb25kaXRpb25hbFR5cGU8Q2hpbGQsIFBhcmVudCwgVHJ1dGh5LCBGYWxzeT4gPSBDaGlsZCBleHRlbmRzIFBhcmVudCA/IFRydXRoeSA6IEZhbHN5O1xuZXhwb3J0IHR5cGUgTmd0QnJhbmNoaW5nUmV0dXJuPFQsIFBhcmVudCwgQ29lcmNlZD4gPSBOZ3RDb25kaXRpb25hbFR5cGU8VCwgUGFyZW50LCBDb2VyY2VkLCBUPjtcblxuZXhwb3J0IHR5cGUgTmd0TG9hZGVyUmVzdWx0czxcblx0VElucHV0IGV4dGVuZHMgc3RyaW5nIHwgc3RyaW5nW10gfCBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LFxuXHRUUmV0dXJuLFxuPiA9IFRJbnB1dCBleHRlbmRzIHN0cmluZ1tdID8gVFJldHVybltdIDogVElucHV0IGV4dGVuZHMgb2JqZWN0ID8geyBba2V5IGluIGtleW9mIFRJbnB1dF06IFRSZXR1cm4gfSA6IFRSZXR1cm47XG5cbmNvbnN0IGNhY2hlZCA9IG5ldyBNYXAoKTtcblxuZnVuY3Rpb24gbm9ybWFsaXplSW5wdXRzKGlucHV0OiBzdHJpbmcgfCBzdHJpbmdbXSB8IFJlY29yZDxzdHJpbmcsIHN0cmluZz4pIHtcblx0aWYgKEFycmF5LmlzQXJyYXkoaW5wdXQpKSByZXR1cm4gaW5wdXQ7XG5cdGlmICh0eXBlb2YgaW5wdXQgPT09ICdzdHJpbmcnKSByZXR1cm4gW2lucHV0XTtcblx0cmV0dXJuIE9iamVjdC52YWx1ZXMoaW5wdXQpO1xufVxuXG5mdW5jdGlvbiBsb2FkPFxuXHRURGF0YSxcblx0VFVybCBleHRlbmRzIHN0cmluZyB8IHN0cmluZ1tdIHwgUmVjb3JkPHN0cmluZywgc3RyaW5nPixcblx0VExvYWRlckNvbnN0cnVjdG9yIGV4dGVuZHMgTmd0TG9hZGVyUHJvdG88VERhdGE+LFxuPihcblx0bG9hZGVyQ29uc3RydWN0b3JGYWN0b3J5OiAoaW5wdXRzOiBzdHJpbmdbXSkgPT4gVExvYWRlckNvbnN0cnVjdG9yLFxuXHRpbnB1dHM6ICgpID0+IFRVcmwsXG5cdHtcblx0XHRleHRlbnNpb25zLFxuXHRcdG9uUHJvZ3Jlc3MsXG5cdH06IHtcblx0XHRleHRlbnNpb25zPzogTmd0TG9hZGVyRXh0ZW5zaW9uczxUTG9hZGVyQ29uc3RydWN0b3I+O1xuXHRcdG9uUHJvZ3Jlc3M/OiAoZXZlbnQ6IFByb2dyZXNzRXZlbnQpID0+IHZvaWQ7XG5cdH0gPSB7fSxcbikge1xuXHRyZXR1cm4gKCk6IEFycmF5PFByb21pc2U8YW55Pj4gPT4ge1xuXHRcdGNvbnN0IHVybHMgPSBub3JtYWxpemVJbnB1dHMoaW5wdXRzKCkpO1xuXHRcdGNvbnN0IGxvYWRlciA9IG5ldyAobG9hZGVyQ29uc3RydWN0b3JGYWN0b3J5KHVybHMpKSgpO1xuXHRcdGlmIChleHRlbnNpb25zKSBleHRlbnNpb25zKGxvYWRlcik7XG5cdFx0Ly8gVE9ETzogcmVldmFsdWF0ZSB0aGlzXG5cdFx0cmV0dXJuIHVybHMubWFwKCh1cmwpID0+IHtcblx0XHRcdGlmICghY2FjaGVkLmhhcyh1cmwpKSB7XG5cdFx0XHRcdGNhY2hlZC5zZXQoXG5cdFx0XHRcdFx0dXJsLFxuXHRcdFx0XHRcdG5ldyBQcm9taXNlPFREYXRhPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHRcdFx0XHRsb2FkZXIubG9hZChcblx0XHRcdFx0XHRcdFx0dXJsLFxuXHRcdFx0XHRcdFx0XHQoZGF0YSkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdGlmICgnc2NlbmUnIGluIChkYXRhIGFzIE5ndEFueVJlY29yZCkpXG5cdFx0XHRcdFx0XHRcdFx0XHRPYmplY3QuYXNzaWduKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRkYXRhIGFzIE5ndEFueVJlY29yZCxcblx0XHRcdFx0XHRcdFx0XHRcdFx0bWFrZU9iamVjdEdyYXBoKChkYXRhIGFzIE5ndEFueVJlY29yZClbJ3NjZW5lJ10pLFxuXHRcdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0XHRyZXNvbHZlKGRhdGEpO1xuXHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHRvblByb2dyZXNzLFxuXHRcdFx0XHRcdFx0XHQoZXJyb3IpID0+IHJlamVjdChuZXcgRXJyb3IoYFtOR1RdIENvdWxkIG5vdCBsb2FkICR7dXJsfTogJHtlcnJvcn1gKSksXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH0pLFxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGNhY2hlZC5nZXQodXJsKSE7XG5cdFx0fSk7XG5cdH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbmplY3ROZ3RMb2FkZXI8XG5cdFREYXRhLFxuXHRUVXJsIGV4dGVuZHMgc3RyaW5nIHwgc3RyaW5nW10gfCBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LFxuXHRUTG9hZGVyQ29uc3RydWN0b3IgZXh0ZW5kcyBOZ3RMb2FkZXJQcm90bzxURGF0YT4sXG5cdFRSZXR1cm4gPSBOZ3RMb2FkZXJSZXR1cm5UeXBlPFREYXRhLCBUTG9hZGVyQ29uc3RydWN0b3I+LFxuPihcblx0bG9hZGVyQ29uc3RydWN0b3JGYWN0b3J5OiAoaW5wdXRzOiBzdHJpbmdbXSkgPT4gVExvYWRlckNvbnN0cnVjdG9yLFxuXHRpbnB1dHM6ICgpID0+IFRVcmwsXG5cdHtcblx0XHRleHRlbnNpb25zLFxuXHRcdG9uUHJvZ3Jlc3MsXG5cdFx0aW5qZWN0b3IsXG5cdH06IHtcblx0XHRleHRlbnNpb25zPzogTmd0TG9hZGVyRXh0ZW5zaW9uczxUTG9hZGVyQ29uc3RydWN0b3I+O1xuXHRcdG9uUHJvZ3Jlc3M/OiAoZXZlbnQ6IFByb2dyZXNzRXZlbnQpID0+IHZvaWQ7XG5cdFx0aW5qZWN0b3I/OiBJbmplY3Rvcjtcblx0fSA9IHt9LFxuKTogU2lnbmFsPE5ndExvYWRlclJlc3VsdHM8VFVybCwgTmd0QnJhbmNoaW5nUmV0dXJuPFRSZXR1cm4sIEdMVEYsIEdMVEYgJiBOZ3RPYmplY3RNYXA+PiB8IG51bGw+IHtcblx0aW5qZWN0b3IgPSBhc3NlcnRJbmplY3Rpb25Db250ZXh0KGluamVjdE5ndExvYWRlciwgaW5qZWN0b3IpO1xuXHRjb25zdCByZXNwb25zZSA9IHNpZ25hbDxOZ3RMb2FkZXJSZXN1bHRzPFRVcmwsIE5ndEJyYW5jaGluZ1JldHVybjxUUmV0dXJuLCBHTFRGLCBHTFRGICYgTmd0T2JqZWN0TWFwPj4gfCBudWxsPihcblx0XHRudWxsLFxuXHQpO1xuXHRyZXR1cm4gcnVuSW5JbmplY3Rpb25Db250ZXh0KGluamVjdG9yLCAoKSA9PiB7XG5cdFx0Y29uc3QgY2RyID0gaW5qZWN0KENoYW5nZURldGVjdG9yUmVmKTtcblx0XHRjb25zdCBlZmZlY3RvciA9IGxvYWQobG9hZGVyQ29uc3RydWN0b3JGYWN0b3J5LCBpbnB1dHMsIHsgZXh0ZW5zaW9ucywgb25Qcm9ncmVzcyB9KTtcblxuXHRcdGVmZmVjdCgoKSA9PiB7XG5cdFx0XHRjb25zdCBvcmlnaW5hbFVybHMgPSBpbnB1dHMoKTtcblx0XHRcdFByb21pc2UuYWxsKGVmZmVjdG9yKCkpLnRoZW4oKHJlc3VsdHMpID0+IHtcblx0XHRcdFx0cmVzcG9uc2UudXBkYXRlKCgpID0+IHtcblx0XHRcdFx0XHRpZiAoQXJyYXkuaXNBcnJheShvcmlnaW5hbFVybHMpKSByZXR1cm4gcmVzdWx0cztcblx0XHRcdFx0XHRpZiAodHlwZW9mIG9yaWdpbmFsVXJscyA9PT0gJ3N0cmluZycpIHJldHVybiByZXN1bHRzWzBdO1xuXHRcdFx0XHRcdGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhvcmlnaW5hbFVybHMpO1xuXHRcdFx0XHRcdHJldHVybiBrZXlzLnJlZHVjZShcblx0XHRcdFx0XHRcdChyZXN1bHQsIGtleSkgPT4ge1xuXHRcdFx0XHRcdFx0XHQocmVzdWx0IGFzIE5ndEFueVJlY29yZClba2V5XSA9IHJlc3VsdHNba2V5cy5pbmRleE9mKGtleSldO1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdHt9IGFzIHsgW2tleSBpbiBrZXlvZiBUVXJsXTogTmd0QnJhbmNoaW5nUmV0dXJuPFRSZXR1cm4sIEdMVEYsIEdMVEYgJiBOZ3RPYmplY3RNYXA+IH0sXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fSk7XG5cdFx0XHRcdHNhZmVEZXRlY3RDaGFuZ2VzKGNkcik7XG5cdFx0XHR9KTtcblx0XHR9KTtcblxuXHRcdHJldHVybiByZXNwb25zZS5hc1JlYWRvbmx5KCk7XG5cdH0pO1xufVxuXG5pbmplY3ROZ3RMb2FkZXJbJ3ByZWxvYWQnXSA9IDxcblx0VERhdGEsXG5cdFRVcmwgZXh0ZW5kcyBzdHJpbmcgfCBzdHJpbmdbXSB8IFJlY29yZDxzdHJpbmcsIHN0cmluZz4sXG5cdFRMb2FkZXJDb25zdHJ1Y3RvciBleHRlbmRzIE5ndExvYWRlclByb3RvPFREYXRhPixcbj4oXG5cdGxvYWRlckNvbnN0cnVjdG9yRmFjdG9yeTogKGlucHV0czogc3RyaW5nW10pID0+IFRMb2FkZXJDb25zdHJ1Y3Rvcixcblx0aW5wdXRzOiAoKSA9PiBUVXJsLFxuXHRleHRlbnNpb25zPzogTmd0TG9hZGVyRXh0ZW5zaW9uczxUTG9hZGVyQ29uc3RydWN0b3I+LFxuKSA9PiB7XG5cdFByb21pc2UuYWxsKGxvYWQobG9hZGVyQ29uc3RydWN0b3JGYWN0b3J5LCBpbnB1dHMsIHsgZXh0ZW5zaW9ucyB9KSgpKTtcbn07XG5cbmluamVjdE5ndExvYWRlclsnZGVzdHJveSddID0gKCkgPT4ge1xuXHRjYWNoZWQuY2xlYXIoKTtcbn07XG4iXX0=
63
+ export const injectNgtLoader = _injectNgtLoader;
64
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvbG9hZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBZSxNQUFNLGVBQWUsQ0FBQztBQUN0RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFNUQsT0FBTyxFQUFFLGVBQWUsRUFBcUIsTUFBTSxjQUFjLENBQUM7QUE0QmxFLE1BQU0sTUFBTSxHQUFHLElBQUksR0FBRyxFQUFFLENBQUM7QUFFekIsU0FBUyxlQUFlLENBQUMsS0FBaUQ7SUFDekUsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztRQUFFLE9BQU8sS0FBSyxDQUFDO0lBQ3ZDLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUTtRQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM5QyxPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDN0IsQ0FBQztBQUVELFNBQVMsSUFBSSxDQUtaLHdCQUFrRSxFQUNsRSxNQUFrQixFQUNsQixFQUNDLFVBQVUsRUFDVixVQUFVLE1BQ2dHLEVBQUU7SUFFN0csT0FBTyxHQUF3QixFQUFFO1FBQ2hDLE1BQU0sSUFBSSxHQUFHLGVBQWUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDdEQsSUFBSSxVQUFVO1lBQUUsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ25DLHdCQUF3QjtRQUN4QixPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtZQUN2QixJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxD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QU0sQ0FBQyxNQUFNLGVBQWUsR0FBc0IsZ0JBQWdCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RvciwgZWZmZWN0LCBzaWduYWwsIHR5cGUgU2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBhc3NlcnRJbmplY3RvciB9IGZyb20gJ25neHRlbnNpb24vYXNzZXJ0LWluamVjdG9yJztcbmltcG9ydCB0eXBlIHsgTmd0QW55UmVjb3JkIH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyBtYWtlT2JqZWN0R3JhcGgsIHR5cGUgTmd0T2JqZWN0TWFwIH0gZnJvbSAnLi91dGlscy9tYWtlJztcblxuZXhwb3J0IHR5cGUgTmd0R0xURkxpa2UgPSB7IHNjZW5lOiBUSFJFRS5PYmplY3QzRCB9O1xuXG5leHBvcnQgaW50ZXJmYWNlIE5ndExvYWRlcjxUPiBleHRlbmRzIFRIUkVFLkxvYWRlciB7XG5cdGxvYWQoXG5cdFx0dXJsOiBzdHJpbmcsXG5cdFx0b25Mb2FkPzogKHJlc3VsdDogVCkgPT4gdm9pZCxcblx0XHRvblByb2dyZXNzPzogKGV2ZW50OiBQcm9ncmVzc0V2ZW50KSA9PiB2b2lkLFxuXHRcdG9uRXJyb3I/OiAoZXZlbnQ6IHVua25vd24pID0+IHZvaWQsXG5cdCk6IHVua25vd247XG5cdGxvYWRBc3luYyh1cmw6IHN0cmluZywgb25Qcm9ncmVzcz86IChldmVudDogUHJvZ3Jlc3NFdmVudCkgPT4gdm9pZCk6IFByb21pc2U8VD47XG59XG5cbmV4cG9ydCB0eXBlIE5ndExvYWRlclByb3RvPFQ+ID0gbmV3ICguLi5hcmdzOiBhbnkpID0+IE5ndExvYWRlcjxUIGV4dGVuZHMgdW5rbm93biA/IGFueSA6IFQ+O1xuZXhwb3J0IHR5cGUgTmd0TG9hZGVyUmV0dXJuVHlwZTxULCBMIGV4dGVuZHMgTmd0TG9hZGVyUHJvdG88VD4+ID0gVCBleHRlbmRzIHVua25vd25cblx0PyBBd2FpdGVkPFJldHVyblR5cGU8SW5zdGFuY2VUeXBlPEw+Wydsb2FkQXN5bmMnXT4+XG5cdDogVDtcblxuZXhwb3J0IHR5cGUgTmd0TG9hZGVyRXh0ZW5zaW9uczxUIGV4dGVuZHMgeyBwcm90b3R5cGU6IE5ndExvYWRlclByb3RvPGFueT4gfT4gPSAobG9hZGVyOiBUWydwcm90b3R5cGUnXSkgPT4gdm9pZDtcbmV4cG9ydCB0eXBlIE5ndENvbmRpdGlvbmFsVHlwZTxDaGlsZCwgUGFyZW50LCBUcnV0aHksIEZhbHN5PiA9IENoaWxkIGV4dGVuZHMgUGFyZW50ID8gVHJ1dGh5IDogRmFsc3k7XG5leHBvcnQgdHlwZSBOZ3RCcmFuY2hpbmdSZXR1cm48VCwgUGFyZW50LCBDb2VyY2VkPiA9IE5ndENvbmRpdGlvbmFsVHlwZTxULCBQYXJlbnQsIENvZXJjZWQsIFQ+O1xuXG5leHBvcnQgdHlwZSBOZ3RMb2FkZXJSZXN1bHRzPFxuXHRUSW5wdXQgZXh0ZW5kcyBzdHJpbmcgfCBzdHJpbmdbXSB8IFJlY29yZDxzdHJpbmcsIHN0cmluZz4sXG5cdFRSZXR1cm4sXG4+ID0gVElucHV0IGV4dGVuZHMgc3RyaW5nW10gPyBUUmV0dXJuW10gOiBUSW5wdXQgZXh0ZW5kcyBvYmplY3QgPyB7IFtrZXkgaW4ga2V5b2YgVElucHV0XTogVFJldHVybiB9IDogVFJldHVybjtcblxuY29uc3QgY2FjaGVkID0gbmV3IE1hcCgpO1xuXG5mdW5jdGlvbiBub3JtYWxpemVJbnB1dHMoaW5wdXQ6IHN0cmluZyB8IHN0cmluZ1tdIHwgUmVjb3JkPHN0cmluZywgc3RyaW5nPikge1xuXHRpZiAoQXJyYXkuaXNBcnJheShpbnB1dCkpIHJldHVybiBpbnB1dDtcblx0aWYgKHR5cGVvZiBpbnB1dCA9PT0gJ3N0cmluZycpIHJldHVybiBbaW5wdXRdO1xuXHRyZXR1cm4gT2JqZWN0LnZhbHVlcyhpbnB1dCk7XG59XG5cbmZ1bmN0aW9uIGxvYWQ8XG5cdFREYXRhLFxuXHRUVXJsIGV4dGVuZHMgc3RyaW5nIHwgc3RyaW5nW10gfCBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LFxuXHRUTG9hZGVyQ29uc3RydWN0b3IgZXh0ZW5kcyBOZ3RMb2FkZXJQcm90bzxURGF0YT4sXG4+KFxuXHRsb2FkZXJDb25zdHJ1Y3RvckZhY3Rvcnk6IChpbnB1dHM6IHN0cmluZ1tdKSA9PiBUTG9hZGVyQ29uc3RydWN0b3IsXG5cdGlucHV0czogKCkgPT4gVFVybCxcblx0e1xuXHRcdGV4dGVuc2lvbnMsXG5cdFx0b25Qcm9ncmVzcyxcblx0fTogeyBleHRlbnNpb25zPzogTmd0TG9hZGVyRXh0ZW5zaW9uczxUTG9hZGVyQ29uc3RydWN0b3I+OyBvblByb2dyZXNzPzogKGV2ZW50OiBQcm9ncmVzc0V2ZW50KSA9PiB2b2lkIH0gPSB7fSxcbikge1xuXHRyZXR1cm4gKCk6IEFycmF5PFByb21pc2U8YW55Pj4gPT4ge1xuXHRcdGNvbnN0IHVybHMgPSBub3JtYWxpemVJbnB1dHMoaW5wdXRzKCkpO1xuXHRcdGNvbnN0IGxvYWRlciA9IG5ldyAobG9hZGVyQ29uc3RydWN0b3JGYWN0b3J5KHVybHMpKSgpO1xuXHRcdGlmIChleHRlbnNpb25zKSBleHRlbnNpb25zKGxvYWRlcik7XG5cdFx0Ly8gVE9ETzogcmVldmFsdWF0ZSB0aGlzXG5cdFx0cmV0dXJuIHVybHMubWFwKCh1cmwpID0+IHtcblx0XHRcdGlmICghY2FjaGVkLmhhcyh1cmwpKSB7XG5cdFx0XHRcdGNhY2hlZC5zZXQoXG5cdFx0XHRcdFx0dXJsLFxuXHRcdFx0XHRcdG5ldyBQcm9taXNlPFREYXRhPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHRcdFx0XHRsb2FkZXIubG9hZChcblx0XHRcdFx0XHRcdFx0dXJsLFxuXHRcdFx0XHRcdFx0XHQoZGF0YSkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdGlmICgnc2NlbmUnIGluIChkYXRhIGFzIE5ndEFueVJlY29yZCkpIHtcblx0XHRcdFx0XHRcdFx0XHRcdE9iamVjdC5hc3NpZ24oZGF0YSBhcyBOZ3RBbnlSZWNvcmQsIG1ha2VPYmplY3RHcmFwaCgoZGF0YSBhcyBOZ3RBbnlSZWNvcmQpWydzY2VuZSddKSk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdHJlc29sdmUoZGF0YSk7XG5cdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdG9uUHJvZ3Jlc3MsXG5cdFx0XHRcdFx0XHRcdChlcnJvcikgPT4gcmVqZWN0KG5ldyBFcnJvcihgW05HVF0gQ291bGQgbm90IGxvYWQgJHt1cmx9OiAke2Vycm9yfWApKSxcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fSksXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gY2FjaGVkLmdldCh1cmwpITtcblx0XHR9KTtcblx0fTtcbn1cblxuZnVuY3Rpb24gX2luamVjdE5ndExvYWRlcjxcblx0VERhdGEsXG5cdFRVcmwgZXh0ZW5kcyBzdHJpbmcgfCBzdHJpbmdbXSB8IFJlY29yZDxzdHJpbmcsIHN0cmluZz4sXG5cdFRMb2FkZXJDb25zdHJ1Y3RvciBleHRlbmRzIE5ndExvYWRlclByb3RvPFREYXRhPixcblx0VFJldHVybiA9IE5ndExvYWRlclJldHVyblR5cGU8VERhdGEsIFRMb2FkZXJDb25zdHJ1Y3Rvcj4sXG4+KFxuXHRsb2FkZXJDb25zdHJ1Y3RvckZhY3Rvcnk6IChpbnB1dHM6IHN0cmluZ1tdKSA9PiBUTG9hZGVyQ29uc3RydWN0b3IsXG5cdGlucHV0czogKCkgPT4gVFVybCxcblx0e1xuXHRcdGV4dGVuc2lvbnMsXG5cdFx0b25Qcm9ncmVzcyxcblx0XHRpbmplY3Rvcixcblx0fToge1xuXHRcdGV4dGVuc2lvbnM/OiBOZ3RMb2FkZXJFeHRlbnNpb25zPFRMb2FkZXJDb25zdHJ1Y3Rvcj47XG5cdFx0b25Qcm9ncmVzcz86IChldmVudDogUHJvZ3Jlc3NFdmVudCkgPT4gdm9pZDtcblx0XHRpbmplY3Rvcj86IEluamVjdG9yO1xuXHR9ID0ge30sXG4pOiBTaWduYWw8Tmd0TG9hZGVyUmVzdWx0czxUVXJsLCBOZ3RCcmFuY2hpbmdSZXR1cm48VFJldHVybiwgTmd0R0xURkxpa2UsIE5ndEdMVEZMaWtlICYgTmd0T2JqZWN0TWFwPj4gfCBudWxsPiB7XG5cdHJldHVybiBhc3NlcnRJbmplY3RvcihfaW5qZWN0Tmd0TG9hZGVyLCBpbmplY3RvciwgKCkgPT4ge1xuXHRcdGNvbnN0IHJlc3BvbnNlID0gc2lnbmFsPE5ndExvYWRlclJlc3VsdHM8XG5cdFx0XHRUVXJsLFxuXHRcdFx0Tmd0QnJhbmNoaW5nUmV0dXJuPFRSZXR1cm4sIE5ndEdMVEZMaWtlLCBOZ3RHTFRGTGlrZSAmIE5ndE9iamVjdE1hcD5cblx0XHQ+IHwgbnVsbD4obnVsbCk7XG5cdFx0Y29uc3QgZWZmZWN0b3IgPSBsb2FkKGxvYWRlckNvbnN0cnVjdG9yRmFjdG9yeSwgaW5wdXRzLCB7IGV4dGVuc2lvbnMsIG9uUHJvZ3Jlc3MgfSk7XG5cblx0XHRlZmZlY3QoKCkgPT4ge1xuXHRcdFx0Y29uc3Qgb3JpZ2luYWxVcmxzID0gaW5wdXRzKCk7XG5cdFx0XHRQcm9taXNlLmFsbChlZmZlY3RvcigpKS50aGVuKChyZXN1bHRzKSA9PiB7XG5cdFx0XHRcdHJlc3BvbnNlLnVwZGF0ZSgoKSA9PiB7XG5cdFx0XHRcdFx0aWYgKEFycmF5LmlzQXJyYXkob3JpZ2luYWxVcmxzKSkgcmV0dXJuIHJlc3VsdHM7XG5cdFx0XHRcdFx0aWYgKHR5cGVvZiBvcmlnaW5hbFVybHMgPT09ICdzdHJpbmcnKSByZXR1cm4gcmVzdWx0c1swXTtcblx0XHRcdFx0XHRjb25zdCBrZXlzID0gT2JqZWN0LmtleXMob3JpZ2luYWxVcmxzKTtcblx0XHRcdFx0XHRyZXR1cm4ga2V5cy5yZWR1Y2UoXG5cdFx0XHRcdFx0XHQocmVzdWx0LCBrZXkpID0+IHtcblx0XHRcdFx0XHRcdFx0KHJlc3VsdCBhcyBOZ3RBbnlSZWNvcmQpW2tleV0gPSByZXN1bHRzW2tleXMuaW5kZXhPZihrZXkpXTtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHR7fSBhcyB7IFtrZXkgaW4ga2V5b2YgVFVybF06IE5ndEJyYW5jaGluZ1JldHVybjxUUmV0dXJuLCBOZ3RHTFRGTGlrZSwgTmd0R0xURkxpa2UgJiBOZ3RPYmplY3RNYXA+IH0sXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblx0XHR9KTtcblxuXHRcdHJldHVybiByZXNwb25zZS5hc1JlYWRvbmx5KCk7XG5cdH0pO1xufVxuXG5faW5qZWN0Tmd0TG9hZGVyLnByZWxvYWQgPSA8XG5cdFREYXRhLFxuXHRUVXJsIGV4dGVuZHMgc3RyaW5nIHwgc3RyaW5nW10gfCBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LFxuXHRUTG9hZGVyQ29uc3RydWN0b3IgZXh0ZW5kcyBOZ3RMb2FkZXJQcm90bzxURGF0YT4sXG4+KFxuXHRsb2FkZXJDb25zdHJ1Y3RvckZhY3Rvcnk6IChpbnB1dHM6IHN0cmluZ1tdKSA9PiBUTG9hZGVyQ29uc3RydWN0b3IsXG5cdGlucHV0czogKCkgPT4gVFVybCxcblx0ZXh0ZW5zaW9ucz86IE5ndExvYWRlckV4dGVuc2lvbnM8VExvYWRlckNvbnN0cnVjdG9yPixcbikgPT4ge1xuXHR2b2lkIFByb21pc2UuYWxsKGxvYWQobG9hZGVyQ29uc3RydWN0b3JGYWN0b3J5LCBpbnB1dHMsIHsgZXh0ZW5zaW9ucyB9KSgpKTtcbn07XG5cbl9pbmplY3ROZ3RMb2FkZXIuZGVzdHJveSA9ICgpID0+IHtcblx0Y2FjaGVkLmNsZWFyKCk7XG59O1xuXG5leHBvcnQgdHlwZSBOZ3RJbmplY3RlZExvYWRlciA9IHR5cGVvZiBfaW5qZWN0Tmd0TG9hZGVyO1xuZXhwb3J0IGNvbnN0IGluamVjdE5ndExvYWRlcjogTmd0SW5qZWN0ZWRMb2FkZXIgPSBfaW5qZWN0Tmd0TG9hZGVyO1xuIl19
@@ -1,5 +1,5 @@
1
+ import { createInjectionToken } from 'ngxtension/create-injection-token';
1
2
  import { roots } from './roots';
2
- import { createInjectionToken } from './utils/create-injection-token';
3
3
  function createSubs(callback, subs) {
4
4
  const sub = { callback };
5
5
  subs.add(sub);
@@ -41,7 +41,7 @@ export function flushGlobalEffects(type, timestamp) {
41
41
  }
42
42
  }
43
43
  function render(timestamp, store, frame) {
44
- const state = store.get();
44
+ const state = store.snapshot;
45
45
  // Run local effects
46
46
  let delta = state.clock.getDelta();
47
47
  // In frameloop='never' mode, clock times are updated using the provided timestamp
@@ -50,11 +50,11 @@ function render(timestamp, store, frame) {
50
50
  state.clock.oldTime = state.clock.elapsedTime;
51
51
  state.clock.elapsedTime = timestamp;
52
52
  }
53
- // Call subscribers (useFrame)
53
+ // Call subscribers (beforeRender)
54
54
  const subscribers = state.internal.subscribers;
55
55
  for (let i = 0; i < subscribers.length; i++) {
56
56
  const subscription = subscribers[i];
57
- subscription.callback({ ...subscription.store.get(), delta, frame });
57
+ subscription.callback({ ...subscription.store.snapshot, delta, frame });
58
58
  }
59
59
  // Render content
60
60
  if (!state.internal.priority && state.gl.render)
@@ -75,7 +75,7 @@ function createLoop(roots) {
75
75
  flushGlobalEffects('before', timestamp);
76
76
  // Render all roots
77
77
  for (const root of roots.values()) {
78
- const state = root.get();
78
+ const state = root.snapshot;
79
79
  // If the frameloop is invalidated, do not run another frame
80
80
  if (state.internal.active &&
81
81
  (state.frameloop === 'always' || state.internal.frames > 0) &&
@@ -95,7 +95,7 @@ function createLoop(roots) {
95
95
  }
96
96
  }
97
97
  function invalidate(store, frames = 1) {
98
- const state = store?.get();
98
+ const state = store?.snapshot;
99
99
  if (!state)
100
100
  return roots.forEach((root) => invalidate(root, frames));
101
101
  if (state.gl.xr?.isPresenting || !state.internal.active || state.frameloop === 'never')
@@ -111,8 +111,7 @@ function createLoop(roots) {
111
111
  function advance(timestamp, runGlobalEffects = true, store, frame) {
112
112
  if (runGlobalEffects)
113
113
  flushGlobalEffects('before', timestamp);
114
- const state = store?.get();
115
- if (!state)
114
+ if (!store)
116
115
  for (const root of roots.values())
117
116
  render(timestamp, root);
118
117
  else
@@ -134,5 +133,5 @@ function createLoop(roots) {
134
133
  advance,
135
134
  };
136
135
  }
137
- export const [injectNgtLoop, , NGT_LOOP] = createInjectionToken(() => createLoop(roots));
138
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9vcC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9zcmMvbGliL2xvb3AudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUVoQyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQU10RSxTQUFTLFVBQVUsQ0FBQyxRQUFpQyxFQUFFLElBQWtCO0lBQ3hFLE1BQU0sR0FBRyxHQUFHLEVBQUUsUUFBUSxFQUFFLENBQUM7SUFDekIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNkLE9BQU8sR0FBRyxFQUFFLENBQUMsS0FBSyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3BDLENBQUM7QUFFRCxNQUFNLGFBQWEsR0FBaUIsSUFBSSxHQUFHLEVBQUUsQ0FBQztBQUM5QyxNQUFNLGtCQUFrQixHQUFpQixJQUFJLEdBQUcsRUFBRSxDQUFDO0FBQ25ELE1BQU0saUJBQWlCLEdBQWlCLElBQUksR0FBRyxFQUFFLENBQUM7QUFFbEQ7OztHQUdHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHLENBQUMsUUFBaUMsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxhQUFhLENBQUMsQ0FBQztBQUVwRzs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUcsQ0FBQyxRQUFpQyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLGtCQUFrQixDQUFDLENBQUM7QUFFOUc7OztHQUdHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sT0FBTyxHQUFHLENBQUMsUUFBaUMsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO0FBRXRHLFNBQVMsR0FBRyxDQUFDLE9BQXFCLEVBQUUsU0FBaUI7SUFDcEQsSUFBSSxD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ICcuL3Jvb3RzJztcbmltcG9ydCB0eXBlIHsgTmd0U3RhdGUgfSBmcm9tICcuL3N0b3JlJztcbmltcG9ydCB7IGNyZWF0ZUluamVjdGlvblRva2VuIH0gZnJvbSAnLi91dGlscy9jcmVhdGUtaW5qZWN0aW9uLXRva2VuJztcbmltcG9ydCB0eXBlIHsgTmd0U2lnbmFsU3RvcmUgfSBmcm9tICcuL3V0aWxzL3NpZ25hbC1zdG9yZSc7XG5cbmV4cG9ydCB0eXBlIE5ndEdsb2JhbFJlbmRlckNhbGxiYWNrID0gKHRpbWVTdGFtcDogbnVtYmVyKSA9PiB2b2lkO1xudHlwZSBTdWJJdGVtID0geyBjYWxsYmFjazogTmd0R2xvYmFsUmVuZGVyQ2FsbGJhY2sgfTtcblxuZnVuY3Rpb24gY3JlYXRlU3VicyhjYWxsYmFjazogTmd0R2xvYmFsUmVuZGVyQ2FsbGJhY2ssIHN1YnM6IFNldDxTdWJJdGVtPik6ICgpID0+IHZvaWQge1xuXHRjb25zdCBzdWIgPSB7IGNhbGxiYWNrIH07XG5cdHN1YnMuYWRkKHN1Yik7XG5cdHJldHVybiAoKSA9PiB2b2lkIHN1YnMuZGVsZXRlKHN1Yik7XG59XG5cbmNvbnN0IGdsb2JhbEVmZmVjdHM6IFNldDxTdWJJdGVtPiA9IG5ldyBTZXQoKTtcbmNvbnN0IGdsb2JhbEFmdGVyRWZmZWN0czogU2V0PFN1Ykl0ZW0+ID0gbmV3IFNldCgpO1xuY29uc3QgZ2xvYmFsVGFpbEVmZmVjdHM6IFNldDxTdWJJdGVtPiA9IG5ldyBTZXQoKTtcblxuLyoqXG4gKiBBZGRzIGEgZ2xvYmFsIHJlbmRlciBjYWxsYmFjayB3aGljaCBpcyBjYWxsZWQgZWFjaCBmcmFtZS5cbiAqIEBzZWUgaHR0cHM6Ly9kb2NzLnBtbmQucnMvcmVhY3QtdGhyZWUtZmliZXIvYXBpL2FkZGl0aW9uYWwtZXhwb3J0cyNhZGRFZmZlY3RcbiAqL1xuZXhwb3J0IGNvbnN0IGFkZEVmZmVjdCA9IChjYWxsYmFjazogTmd0R2xvYmFsUmVuZGVyQ2FsbGJhY2spID0+IGNyZWF0ZVN1YnMoY2FsbGJhY2ssIGdsb2JhbEVmZmVjdHMpO1xuXG4vKipcbiAqIEFkZHMgYSBnbG9iYWwgYWZ0ZXItcmVuZGVyIGNhbGxiYWNrIHdoaWNoIGlzIGNhbGxlZCBlYWNoIGZyYW1lLlxuICogQHNlZSBodHRwczovL2RvY3MucG1uZC5ycy9yZWFjdC10aHJlZS1maWJlci9hcGkvYWRkaXRpb25hbC1leHBvcnRzI2FkZEFmdGVyRWZmZWN0XG4gKi9cbmV4cG9ydCBjb25zdCBhZGRBZnRlckVmZmVjdCA9IChjYWxsYmFjazogTmd0R2xvYmFsUmVuZGVyQ2FsbGJhY2spID0+IGNyZWF0ZVN1YnMoY2FsbGJhY2ssIGdsb2JhbEFmdGVyRWZmZWN0cyk7XG5cbi8qKlxuICogQWRkcyBhIGdsb2JhbCBjYWxsYmFjayB3aGljaCBpcyBjYWxsZWQgd2hlbiByZW5kZXJpbmcgc3RvcHMuXG4gKiBAc2VlIGh0dHBzOi8vZG9jcy5wbW5kLnJzL3JlYWN0LXRocmVlLWZpYmVyL2FwaS9hZGRpdGlvbmFsLWV4cG9ydHMjYWRkVGFpbFxuICovXG5leHBvcnQgY29uc3QgYWRkVGFpbCA9IChjYWxsYmFjazogTmd0R2xvYmFsUmVuZGVyQ2FsbGJhY2spID0+IGNyZWF0ZVN1YnMoY2FsbGJhY2ssIGdsb2JhbFRhaWxFZmZlY3RzKTtcblxuZnVuY3Rpb24gcnVuKGVmZmVjdHM6IFNldDxTdWJJdGVtPiwgdGltZXN0YW1wOiBudW1iZXIpIHtcblx0aWYgKCFlZmZlY3RzLnNpemUpIHJldHVybjtcblx0Zm9yIChjb25zdCB7IGNhbGxiYWNrIH0gb2YgZWZmZWN0cy52YWx1ZXMoKSkge1xuXHRcdGNhbGxiYWNrKHRpbWVzdGFtcCk7XG5cdH1cbn1cblxuZXhwb3J0IHR5cGUgTmd0R2xvYmFsRWZmZWN0VHlwZSA9ICdiZWZvcmUnIHwgJ2FmdGVyJyB8ICd0YWlsJztcblxuZXhwb3J0IGZ1bmN0aW9uIGZsdXNoR2xvYmFsRWZmZWN0cyh0eXBlOiBOZ3RHbG9iYWxFZmZlY3RUeXBlLCB0aW1lc3RhbXA6IG51bWJlcik6IHZvaWQge1xuXHRzd2l0Y2ggKHR5cGUpIHtcblx0XHRjYXNlICdiZWZvcmUnOlxuXHRcdFx0cmV0dXJuIHJ1bihnbG9iYWxFZmZlY3RzLCB0aW1lc3RhbXApO1xuXHRcdGNhc2UgJ2FmdGVyJzpcblx0XHRcdHJldHVybiBydW4oZ2xvYmFsQWZ0ZXJFZmZlY3RzLCB0aW1lc3RhbXApO1xuXHRcdGNhc2UgJ3RhaWwnOlxuXHRcdFx0cmV0dXJuIHJ1bihnbG9iYWxUYWlsRWZmZWN0cywgdGltZXN0YW1wKTtcblx0fVxufVxuXG5mdW5jdGlvbiByZW5kZXIodGltZXN0YW1wOiBudW1iZXIsIHN0b3JlOiBOZ3RTaWduYWxTdG9yZTxOZ3RTdGF0ZT4sIGZyYW1lPzogWFJGcmFtZSkge1xuXHRjb25zdCBzdGF0ZSA9IHN0b3JlLmdldCgpO1xuXHQvLyBSdW4gbG9jYWwgZWZmZWN0c1xuXHRsZXQgZGVsdGEgPSBzdGF0ZS5jbG9jay5nZXREZWx0YSgpO1xuXHQvLyBJbiBmcmFtZWxvb3A9J25ldmVyJyBtb2RlLCBjbG9jayB0aW1lcyBhcmUgdXBkYXRlZCB1c2luZyB0aGUgcHJvdmlkZWQgdGltZXN0YW1wXG5cdGlmIChzdGF0ZS5mcmFtZWxvb3AgPT09ICduZXZlcicgJiYgdHlwZW9mIHRpbWVzdGFtcCA9PT0gJ251bWJlcicpIHtcblx0XHRkZWx0YSA9IHRpbWVzdGFtcCAtIHN0YXRlLmNsb2NrLmVsYXBzZWRUaW1lO1xuXHRcdHN0YXRlLmNsb2NrLm9sZFRpbWUgPSBzdGF0ZS5jbG9jay5lbGFwc2VkVGltZTtcblx0XHRzdGF0ZS5jbG9jay5lbGFwc2VkVGltZSA9IHRpbWVzdGFtcDtcblx0fVxuXHQvLyBDYWxsIHN1YnNjcmliZXJzICh1c2VGcmFtZSlcblx0Y29uc3Qgc3Vic2NyaWJlcnMgPSBzdGF0ZS5pbnRlcm5hbC5zdWJzY3JpYmVycztcblx0Zm9yIChsZXQgaSA9IDA7IGkgPCBzdWJzY3JpYmVycy5sZW5ndGg7IGkrKykge1xuXHRcdGNvbnN0IHN1YnNjcmlwdGlvbiA9IHN1YnNjcmliZXJzW2ldO1xuXHRcdHN1YnNjcmlwdGlvbi5jYWxsYmFjayh7IC4uLnN1YnNjcmlwdGlvbi5zdG9yZS5nZXQoKSwgZGVsdGEsIGZyYW1lIH0pO1xuXHR9XG5cdC8vIFJlbmRlciBjb250ZW50XG5cdGlmICghc3RhdGUuaW50ZXJuYWwucHJpb3JpdHkgJiYgc3RhdGUuZ2wucmVuZGVyKSBzdGF0ZS5nbC5yZW5kZXIoc3RhdGUuc2NlbmUsIHN0YXRlLmNhbWVyYSk7XG5cdC8vIERlY3JlYXNlIGZyYW1lIGNvdW50XG5cdHN0YXRlLmludGVybmFsLmZyYW1lcyA9IE1hdGgubWF4KDAsIHN0YXRlLmludGVybmFsLmZyYW1lcyAtIDEpO1xuXHRyZXR1cm4gc3RhdGUuZnJhbWVsb29wID09PSAnYWx3YXlzJyA/IDEgOiBzdGF0ZS5pbnRlcm5hbC5mcmFtZXM7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUxvb3A8VENhbnZhcz4ocm9vdHM6IE1hcDxUQ2FudmFzLCBOZ3RTaWduYWxTdG9yZTxOZ3RTdGF0ZT4+KSB7XG5cdGxldCBydW5uaW5nID0gZmFsc2U7XG5cdGxldCByZXBlYXQ6IG51bWJlcjtcblx0bGV0IGZyYW1lOiBudW1iZXI7XG5cblx0ZnVuY3Rpb24gbG9vcCh0aW1lc3RhbXA6IG51bWJlcik6IHZvaWQge1xuXHRcdGZyYW1lID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGxvb3ApO1xuXHRcdHJ1bm5pbmcgPSB0cnVlO1xuXHRcdHJlcGVhdCA9IDA7XG5cblx0XHQvLyBSdW4gZWZmZWN0c1xuXHRcdGZsdXNoR2xvYmFsRWZmZWN0cygnYmVmb3JlJywgdGltZXN0YW1wKTtcblxuXHRcdC8vIFJlbmRlciBhbGwgcm9vdHNcblx0XHRmb3IgKGNvbnN0IHJvb3Qgb2Ygcm9vdHMudmFsdWVzKCkpIHtcblx0XHRcdGNvbnN0IHN0YXRlID0gcm9vdC5nZXQoKTtcblx0XHRcdC8vIElmIHRoZSBmcmFtZWxvb3AgaXMgaW52YWxpZGF0ZWQsIGRvIG5vdCBydW4gYW5vdGhlciBmcmFtZVxuXHRcdFx0aWYgKFxuXHRcdFx0XHRzdGF0ZS5pbnRlcm5hbC5hY3RpdmUgJiZcblx0XHRcdFx0KHN0YXRlLmZyYW1lbG9vcCA9PT0gJ2Fsd2F5cycgfHwgc3RhdGUuaW50ZXJuYWwuZnJhbWVzID4gMCkgJiZcblx0XHRcdFx0IXN0YXRlLmdsLnhyPy5pc1ByZXNlbnRpbmdcblx0XHRcdCkge1xuXHRcdFx0XHRyZXBlYXQgKz0gcmVuZGVyKHRpbWVzdGFtcCwgcm9vdCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gUnVuIGFmdGVyLWVmZmVjdHNcblx0XHRmbHVzaEdsb2JhbEVmZmVjdHMoJ2FmdGVyJywgdGltZXN0YW1wKTtcblxuXHRcdC8vIFN0b3AgdGhlIGxvb3AgaWYgbm90aGluZyBpbnZhbGlkYXRlcyBpdFxuXHRcdGlmIChyZXBlYXQgPT09IDApIHtcblx0XHRcdC8vIFRhaWwgY2FsbCBlZmZlY3RzLCB0aGV5IGFyZSBjYWxsZWQgd2hlbiByZW5kZXJpbmcgc3RvcHNcblx0XHRcdGZsdXNoR2xvYmFsRWZmZWN0cygndGFpbCcsIHRpbWVzdGFtcCk7XG5cblx0XHRcdC8vIEZsYWcgZW5kIG9mIG9wZXJhdGlvblxuXHRcdFx0cnVubmluZyA9IGZhbHNlO1xuXHRcdFx0cmV0dXJuIGNhbmNlbEFuaW1hdGlvbkZyYW1lKGZyYW1lKTtcblx0XHR9XG5cdH1cblxuXHRmdW5jdGlvbiBpbnZhbGlkYXRlKHN0b3JlPzogTmd0U2lnbmFsU3RvcmU8Tmd0U3RhdGU+LCBmcmFtZXMgPSAxKTogdm9pZCB7XG5cdFx0Y29uc3Qgc3RhdGUgPSBzdG9yZT8uZ2V0KCk7XG5cdFx0aWYgKCFzdGF0ZSkgcmV0dXJuIHJvb3RzLmZvckVhY2goKHJvb3QpID0+IGludmFsaWRhdGUocm9vdCwgZnJhbWVzKSk7XG5cdFx0aWYgKHN0YXRlLmdsLnhyPy5pc1ByZXNlbnRpbmcgfHwgIXN0YXRlLmludGVybmFsLmFjdGl2ZSB8fCBzdGF0ZS5mcmFtZWxvb3AgPT09ICduZXZlcicpIHJldHVybjtcblx0XHQvLyBJbmNyZWFzZSBmcmFtZXMsIGRvIG5vdCBnbyBoaWdoZXIgdGhhbiA2MFxuXHRcdHN0YXRlLmludGVybmFsLmZyYW1lcyA9IE1hdGgubWluKDYwLCBzdGF0ZS5pbnRlcm5hbC5mcmFtZXMgKyBmcmFtZXMpO1xuXHRcdC8vIElmIHRoZSByZW5kZXItbG9vcCBpc24ndCBhY3RpdmUsIHN0YXJ0IGl0XG5cdFx0aWYgKCFydW5uaW5nKSB7XG5cdFx0XHRydW5uaW5nID0gdHJ1ZTtcblx0XHRcdHJlcXVlc3RBbmltYXRpb25GcmFtZShsb29wKTtcblx0XHR9XG5cdH1cblxuXHRmdW5jdGlvbiBhZHZhbmNlKFxuXHRcdHRpbWVzdGFtcDogbnVtYmVyLFxuXHRcdHJ1bkdsb2JhbEVmZmVjdHM6IGJvb2xlYW4gPSB0cnVlLFxuXHRcdHN0b3JlPzogTmd0U2lnbmFsU3RvcmU8Tmd0U3RhdGU+LFxuXHRcdGZyYW1lPzogWFJGcmFtZSxcblx0KTogdm9pZCB7XG5cdFx0aWYgKHJ1bkdsb2JhbEVmZmVjdHMpIGZsdXNoR2xvYmFsRWZmZWN0cygnYmVmb3JlJywgdGltZXN0YW1wKTtcblx0XHRjb25zdCBzdGF0ZSA9IHN0b3JlPy5nZXQoKTtcblx0XHRpZiAoIXN0YXRlKSBmb3IgKGNvbnN0IHJvb3Qgb2Ygcm9vdHMudmFsdWVzKCkpIHJlbmRlcih0aW1lc3RhbXAsIHJvb3QpO1xuXHRcdGVsc2UgcmVuZGVyKHRpbWVzdGFtcCwgc3RvcmUhLCBmcmFtZSk7XG5cdFx0aWYgKHJ1bkdsb2JhbEVmZmVjdHMpIGZsdXNoR2xvYmFsRWZmZWN0cygnYWZ0ZXInLCB0aW1lc3RhbXApO1xuXHR9XG5cblx0cmV0dXJuIHtcblx0XHRsb29wLFxuXHRcdC8qKlxuXHRcdCAqIEludmFsaWRhdGVzIHRoZSB2aWV3LCByZXF1ZXN0aW5nIGEgZnJhbWUgdG8gYmUgcmVuZGVyZWQuIFdpbGwgZ2xvYmFsbHkgaW52YWxpZGF0ZSB1bmxlc3MgcGFzc2VkIGEgcm9vdCdzIHN0YXRlLlxuXHRcdCAqIEBzZWUgaHR0cHM6Ly9kb2NzLnBtbmQucnMvcmVhY3QtdGhyZWUtZmliZXIvYXBpL2FkZGl0aW9uYWwtZXhwb3J0cyNpbnZhbGlkYXRlXG5cdFx0ICovXG5cdFx0aW52YWxpZGF0ZSxcblx0XHQvKipcblx0XHQgKiBBZHZhbmNlcyB0aGUgZnJhbWVsb29wIGFuZCBydW5zIHJlbmRlciBlZmZlY3RzLCB1c2VmdWwgZm9yIHdoZW4gbWFudWFsbHkgcmVuZGVyaW5nIHZpYSBgZnJhbWVsb29wPVwibmV2ZXJcImAuXG5cdFx0ICogQHNlZSBodHRwczovL2RvY3MucG1uZC5ycy9yZWFjdC10aHJlZS1maWJlci9hcGkvYWRkaXRpb25hbC1leHBvcnRzI2FkdmFuY2Vcblx0XHQgKi9cblx0XHRhZHZhbmNlLFxuXHR9O1xufVxuXG5leHBvcnQgY29uc3QgW2luamVjdE5ndExvb3AsICwgTkdUX0xPT1BdID0gY3JlYXRlSW5qZWN0aW9uVG9rZW4oKCkgPT4gY3JlYXRlTG9vcChyb290cykpO1xuXG5leHBvcnQgdHlwZSBOZ3RMb29wID0gUmV0dXJuVHlwZTx0eXBlb2YgY3JlYXRlTG9vcD47XG4iXX0=
136
+ export const [injectNgtLoop] = createInjectionToken(() => createLoop(roots));
137
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9vcC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9zcmMvbGliL2xvb3AudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDekUsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLFNBQVMsQ0FBQztBQU9oQyxTQUFTLFVBQVUsQ0FBQyxRQUFpQyxFQUFFLElBQWtCO0lBQ3hFLE1BQU0sR0FBRyxHQUFHLEVBQUUsUUFBUSxFQUFFLENBQUM7SUFDekIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNkLE9BQU8sR0FBRyxFQUFFLENBQUMsS0FBSyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3BDLENBQUM7QUFFRCxNQUFNLGFBQWEsR0FBaUIsSUFBSSxHQUFHLEVBQUUsQ0FBQztBQUM5QyxNQUFNLGtCQUFrQixHQUFpQixJQUFJLEdBQUcsRUFBRSxDQUFDO0FBQ25ELE1BQU0saUJBQWlCLEdBQWlCLElBQUksR0FBRyxFQUFFLENBQUM7QUFFbEQ7OztHQUdHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHLENBQUMsUUFBaUMsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxhQUFhLENBQUMsQ0FBQztBQUVwRzs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUcsQ0FBQyxRQUFpQyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLGtCQUFrQixDQUFDLENBQUM7QUFFOUc7OztHQUdHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sT0FBTyxHQUFHLENBQUMsUUFBaUMsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO0FBRXRHLFNBQVMsR0FBRyxDQUFDLE9BQXFCLEVBQUUsU0FBaUI7SUFDcEQsSUFBSSxD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ZW4gfSBmcm9tICduZ3h0ZW5zaW9uL2NyZWF0ZS1pbmplY3Rpb24tdG9rZW4nO1xuaW1wb3J0IHsgcm9vdHMgfSBmcm9tICcuL3Jvb3RzJztcbmltcG9ydCB0eXBlIHsgTmd0U3RhdGUgfSBmcm9tICcuL3N0b3JlJztcbmltcG9ydCB0eXBlIHsgTmd0U2lnbmFsU3RvcmUgfSBmcm9tICcuL3V0aWxzL3NpZ25hbC1zdG9yZSc7XG5cbmV4cG9ydCB0eXBlIE5ndEdsb2JhbFJlbmRlckNhbGxiYWNrID0gKHRpbWVTdGFtcDogbnVtYmVyKSA9PiB2b2lkO1xudHlwZSBTdWJJdGVtID0geyBjYWxsYmFjazogTmd0R2xvYmFsUmVuZGVyQ2FsbGJhY2sgfTtcblxuZnVuY3Rpb24gY3JlYXRlU3VicyhjYWxsYmFjazogTmd0R2xvYmFsUmVuZGVyQ2FsbGJhY2ssIHN1YnM6IFNldDxTdWJJdGVtPik6ICgpID0+IHZvaWQge1xuXHRjb25zdCBzdWIgPSB7IGNhbGxiYWNrIH07XG5cdHN1YnMuYWRkKHN1Yik7XG5cdHJldHVybiAoKSA9PiB2b2lkIHN1YnMuZGVsZXRlKHN1Yik7XG59XG5cbmNvbnN0IGdsb2JhbEVmZmVjdHM6IFNldDxTdWJJdGVtPiA9IG5ldyBTZXQoKTtcbmNvbnN0IGdsb2JhbEFmdGVyRWZmZWN0czogU2V0PFN1Ykl0ZW0+ID0gbmV3IFNldCgpO1xuY29uc3QgZ2xvYmFsVGFpbEVmZmVjdHM6IFNldDxTdWJJdGVtPiA9IG5ldyBTZXQoKTtcblxuLyoqXG4gKiBBZGRzIGEgZ2xvYmFsIHJlbmRlciBjYWxsYmFjayB3aGljaCBpcyBjYWxsZWQgZWFjaCBmcmFtZS5cbiAqIEBzZWUgaHR0cHM6Ly9kb2NzLnBtbmQucnMvcmVhY3QtdGhyZWUtZmliZXIvYXBpL2FkZGl0aW9uYWwtZXhwb3J0cyNhZGRFZmZlY3RcbiAqL1xuZXhwb3J0IGNvbnN0IGFkZEVmZmVjdCA9IChjYWxsYmFjazogTmd0R2xvYmFsUmVuZGVyQ2FsbGJhY2spID0+IGNyZWF0ZVN1YnMoY2FsbGJhY2ssIGdsb2JhbEVmZmVjdHMpO1xuXG4vKipcbiAqIEFkZHMgYSBnbG9iYWwgYWZ0ZXItcmVuZGVyIGNhbGxiYWNrIHdoaWNoIGlzIGNhbGxlZCBlYWNoIGZyYW1lLlxuICogQHNlZSBodHRwczovL2RvY3MucG1uZC5ycy9yZWFjdC10aHJlZS1maWJlci9hcGkvYWRkaXRpb25hbC1leHBvcnRzI2FkZEFmdGVyRWZmZWN0XG4gKi9cbmV4cG9ydCBjb25zdCBhZGRBZnRlckVmZmVjdCA9IChjYWxsYmFjazogTmd0R2xvYmFsUmVuZGVyQ2FsbGJhY2spID0+IGNyZWF0ZVN1YnMoY2FsbGJhY2ssIGdsb2JhbEFmdGVyRWZmZWN0cyk7XG5cbi8qKlxuICogQWRkcyBhIGdsb2JhbCBjYWxsYmFjayB3aGljaCBpcyBjYWxsZWQgd2hlbiByZW5kZXJpbmcgc3RvcHMuXG4gKiBAc2VlIGh0dHBzOi8vZG9jcy5wbW5kLnJzL3JlYWN0LXRocmVlLWZpYmVyL2FwaS9hZGRpdGlvbmFsLWV4cG9ydHMjYWRkVGFpbFxuICovXG5leHBvcnQgY29uc3QgYWRkVGFpbCA9IChjYWxsYmFjazogTmd0R2xvYmFsUmVuZGVyQ2FsbGJhY2spID0+IGNyZWF0ZVN1YnMoY2FsbGJhY2ssIGdsb2JhbFRhaWxFZmZlY3RzKTtcblxuZnVuY3Rpb24gcnVuKGVmZmVjdHM6IFNldDxTdWJJdGVtPiwgdGltZXN0YW1wOiBudW1iZXIpIHtcblx0aWYgKCFlZmZlY3RzLnNpemUpIHJldHVybjtcblx0Zm9yIChjb25zdCB7IGNhbGxiYWNrIH0gb2YgZWZmZWN0cy52YWx1ZXMoKSkge1xuXHRcdGNhbGxiYWNrKHRpbWVzdGFtcCk7XG5cdH1cbn1cblxuZXhwb3J0IHR5cGUgTmd0R2xvYmFsRWZmZWN0VHlwZSA9ICdiZWZvcmUnIHwgJ2FmdGVyJyB8ICd0YWlsJztcblxuZXhwb3J0IGZ1bmN0aW9uIGZsdXNoR2xvYmFsRWZmZWN0cyh0eXBlOiBOZ3RHbG9iYWxFZmZlY3RUeXBlLCB0aW1lc3RhbXA6IG51bWJlcik6IHZvaWQge1xuXHRzd2l0Y2ggKHR5cGUpIHtcblx0XHRjYXNlICdiZWZvcmUnOlxuXHRcdFx0cmV0dXJuIHJ1bihnbG9iYWxFZmZlY3RzLCB0aW1lc3RhbXApO1xuXHRcdGNhc2UgJ2FmdGVyJzpcblx0XHRcdHJldHVybiBydW4oZ2xvYmFsQWZ0ZXJFZmZlY3RzLCB0aW1lc3RhbXApO1xuXHRcdGNhc2UgJ3RhaWwnOlxuXHRcdFx0cmV0dXJuIHJ1bihnbG9iYWxUYWlsRWZmZWN0cywgdGltZXN0YW1wKTtcblx0fVxufVxuXG5mdW5jdGlvbiByZW5kZXIodGltZXN0YW1wOiBudW1iZXIsIHN0b3JlOiBOZ3RTaWduYWxTdG9yZTxOZ3RTdGF0ZT4sIGZyYW1lPzogWFJGcmFtZSkge1xuXHRjb25zdCBzdGF0ZSA9IHN0b3JlLnNuYXBzaG90O1xuXHQvLyBSdW4gbG9jYWwgZWZmZWN0c1xuXHRsZXQgZGVsdGEgPSBzdGF0ZS5jbG9jay5nZXREZWx0YSgpO1xuXHQvLyBJbiBmcmFtZWxvb3A9J25ldmVyJyBtb2RlLCBjbG9jayB0aW1lcyBhcmUgdXBkYXRlZCB1c2luZyB0aGUgcHJvdmlkZWQgdGltZXN0YW1wXG5cdGlmIChzdGF0ZS5mcmFtZWxvb3AgPT09ICduZXZlcicgJiYgdHlwZW9mIHRpbWVzdGFtcCA9PT0gJ251bWJlcicpIHtcblx0XHRkZWx0YSA9IHRpbWVzdGFtcCAtIHN0YXRlLmNsb2NrLmVsYXBzZWRUaW1lO1xuXHRcdHN0YXRlLmNsb2NrLm9sZFRpbWUgPSBzdGF0ZS5jbG9jay5lbGFwc2VkVGltZTtcblx0XHRzdGF0ZS5jbG9jay5lbGFwc2VkVGltZSA9IHRpbWVzdGFtcDtcblx0fVxuXHQvLyBDYWxsIHN1YnNjcmliZXJzIChiZWZvcmVSZW5kZXIpXG5cdGNvbnN0IHN1YnNjcmliZXJzID0gc3RhdGUuaW50ZXJuYWwuc3Vic2NyaWJlcnM7XG5cdGZvciAobGV0IGkgPSAwOyBpIDwgc3Vic2NyaWJlcnMubGVuZ3RoOyBpKyspIHtcblx0XHRjb25zdCBzdWJzY3JpcHRpb24gPSBzdWJzY3JpYmVyc1tpXTtcblx0XHRzdWJzY3JpcHRpb24uY2FsbGJhY2soeyAuLi5zdWJzY3JpcHRpb24uc3RvcmUuc25hcHNob3QsIGRlbHRhLCBmcmFtZSB9KTtcblx0fVxuXHQvLyBSZW5kZXIgY29udGVudFxuXHRpZiAoIXN0YXRlLmludGVybmFsLnByaW9yaXR5ICYmIHN0YXRlLmdsLnJlbmRlcikgc3RhdGUuZ2wucmVuZGVyKHN0YXRlLnNjZW5lLCBzdGF0ZS5jYW1lcmEpO1xuXHQvLyBEZWNyZWFzZSBmcmFtZSBjb3VudFxuXHRzdGF0ZS5pbnRlcm5hbC5mcmFtZXMgPSBNYXRoLm1heCgwLCBzdGF0ZS5pbnRlcm5hbC5mcmFtZXMgLSAxKTtcblx0cmV0dXJuIHN0YXRlLmZyYW1lbG9vcCA9PT0gJ2Fsd2F5cycgPyAxIDogc3RhdGUuaW50ZXJuYWwuZnJhbWVzO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVMb29wPFRDYW52YXM+KHJvb3RzOiBNYXA8VENhbnZhcywgTmd0U2lnbmFsU3RvcmU8Tmd0U3RhdGU+Pikge1xuXHRsZXQgcnVubmluZyA9IGZhbHNlO1xuXHRsZXQgcmVwZWF0OiBudW1iZXI7XG5cdGxldCBmcmFtZTogbnVtYmVyO1xuXG5cdGZ1bmN0aW9uIGxvb3AodGltZXN0YW1wOiBudW1iZXIpOiB2b2lkIHtcblx0XHRmcmFtZSA9IHJlcXVlc3RBbmltYXRpb25GcmFtZShsb29wKTtcblx0XHRydW5uaW5nID0gdHJ1ZTtcblx0XHRyZXBlYXQgPSAwO1xuXG5cdFx0Ly8gUnVuIGVmZmVjdHNcblx0XHRmbHVzaEdsb2JhbEVmZmVjdHMoJ2JlZm9yZScsIHRpbWVzdGFtcCk7XG5cblx0XHQvLyBSZW5kZXIgYWxsIHJvb3RzXG5cdFx0Zm9yIChjb25zdCByb290IG9mIHJvb3RzLnZhbHVlcygpKSB7XG5cdFx0XHRjb25zdCBzdGF0ZSA9IHJvb3Quc25hcHNob3Q7XG5cdFx0XHQvLyBJZiB0aGUgZnJhbWVsb29wIGlzIGludmFsaWRhdGVkLCBkbyBub3QgcnVuIGFub3RoZXIgZnJhbWVcblx0XHRcdGlmIChcblx0XHRcdFx0c3RhdGUuaW50ZXJuYWwuYWN0aXZlICYmXG5cdFx0XHRcdChzdGF0ZS5mcmFtZWxvb3AgPT09ICdhbHdheXMnIHx8IHN0YXRlLmludGVybmFsLmZyYW1lcyA+IDApICYmXG5cdFx0XHRcdCFzdGF0ZS5nbC54cj8uaXNQcmVzZW50aW5nXG5cdFx0XHQpIHtcblx0XHRcdFx0cmVwZWF0ICs9IHJlbmRlcih0aW1lc3RhbXAsIHJvb3QpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIFJ1biBhZnRlci1lZmZlY3RzXG5cdFx0Zmx1c2hHbG9iYWxFZmZlY3RzKCdhZnRlcicsIHRpbWVzdGFtcCk7XG5cblx0XHQvLyBTdG9wIHRoZSBsb29wIGlmIG5vdGhpbmcgaW52YWxpZGF0ZXMgaXRcblx0XHRpZiAocmVwZWF0ID09PSAwKSB7XG5cdFx0XHQvLyBUYWlsIGNhbGwgZWZmZWN0cywgdGhleSBhcmUgY2FsbGVkIHdoZW4gcmVuZGVyaW5nIHN0b3BzXG5cdFx0XHRmbHVzaEdsb2JhbEVmZmVjdHMoJ3RhaWwnLCB0aW1lc3RhbXApO1xuXG5cdFx0XHQvLyBGbGFnIGVuZCBvZiBvcGVyYXRpb25cblx0XHRcdHJ1bm5pbmcgPSBmYWxzZTtcblx0XHRcdHJldHVybiBjYW5jZWxBbmltYXRpb25GcmFtZShmcmFtZSk7XG5cdFx0fVxuXHR9XG5cblx0ZnVuY3Rpb24gaW52YWxpZGF0ZShzdG9yZT86IE5ndFNpZ25hbFN0b3JlPE5ndFN0YXRlPiwgZnJhbWVzID0gMSk6IHZvaWQge1xuXHRcdGNvbnN0IHN0YXRlID0gc3RvcmU/LnNuYXBzaG90O1xuXHRcdGlmICghc3RhdGUpIHJldHVybiByb290cy5mb3JFYWNoKChyb290KSA9PiBpbnZhbGlkYXRlKHJvb3QsIGZyYW1lcykpO1xuXHRcdGlmIChzdGF0ZS5nbC54cj8uaXNQcmVzZW50aW5nIHx8ICFzdGF0ZS5pbnRlcm5hbC5hY3RpdmUgfHwgc3RhdGUuZnJhbWVsb29wID09PSAnbmV2ZXInKSByZXR1cm47XG5cdFx0Ly8gSW5jcmVhc2UgZnJhbWVzLCBkbyBub3QgZ28gaGlnaGVyIHRoYW4gNjBcblx0XHRzdGF0ZS5pbnRlcm5hbC5mcmFtZXMgPSBNYXRoLm1pbig2MCwgc3RhdGUuaW50ZXJuYWwuZnJhbWVzICsgZnJhbWVzKTtcblx0XHQvLyBJZiB0aGUgcmVuZGVyLWxvb3AgaXNuJ3QgYWN0aXZlLCBzdGFydCBpdFxuXHRcdGlmICghcnVubmluZykge1xuXHRcdFx0cnVubmluZyA9IHRydWU7XG5cdFx0XHRyZXF1ZXN0QW5pbWF0aW9uRnJhbWUobG9vcCk7XG5cdFx0fVxuXHR9XG5cblx0ZnVuY3Rpb24gYWR2YW5jZShcblx0XHR0aW1lc3RhbXA6IG51bWJlcixcblx0XHRydW5HbG9iYWxFZmZlY3RzOiBib29sZWFuID0gdHJ1ZSxcblx0XHRzdG9yZT86IE5ndFNpZ25hbFN0b3JlPE5ndFN0YXRlPixcblx0XHRmcmFtZT86IFhSRnJhbWUsXG5cdCk6IHZvaWQge1xuXHRcdGlmIChydW5HbG9iYWxFZmZlY3RzKSBmbHVzaEdsb2JhbEVmZmVjdHMoJ2JlZm9yZScsIHRpbWVzdGFtcCk7XG5cdFx0aWYgKCFzdG9yZSkgZm9yIChjb25zdCByb290IG9mIHJvb3RzLnZhbHVlcygpKSByZW5kZXIodGltZXN0YW1wLCByb290KTtcblx0XHRlbHNlIHJlbmRlcih0aW1lc3RhbXAsIHN0b3JlLCBmcmFtZSk7XG5cdFx0aWYgKHJ1bkdsb2JhbEVmZmVjdHMpIGZsdXNoR2xvYmFsRWZmZWN0cygnYWZ0ZXInLCB0aW1lc3RhbXApO1xuXHR9XG5cblx0cmV0dXJuIHtcblx0XHRsb29wLFxuXHRcdC8qKlxuXHRcdCAqIEludmFsaWRhdGVzIHRoZSB2aWV3LCByZXF1ZXN0aW5nIGEgZnJhbWUgdG8gYmUgcmVuZGVyZWQuIFdpbGwgZ2xvYmFsbHkgaW52YWxpZGF0ZSB1bmxlc3MgcGFzc2VkIGEgcm9vdCdzIHN0YXRlLlxuXHRcdCAqIEBzZWUgaHR0cHM6Ly9kb2NzLnBtbmQucnMvcmVhY3QtdGhyZWUtZmliZXIvYXBpL2FkZGl0aW9uYWwtZXhwb3J0cyNpbnZhbGlkYXRlXG5cdFx0ICovXG5cdFx0aW52YWxpZGF0ZSxcblx0XHQvKipcblx0XHQgKiBBZHZhbmNlcyB0aGUgZnJhbWVsb29wIGFuZCBydW5zIHJlbmRlciBlZmZlY3RzLCB1c2VmdWwgZm9yIHdoZW4gbWFudWFsbHkgcmVuZGVyaW5nIHZpYSBgZnJhbWVsb29wPVwibmV2ZXJcImAuXG5cdFx0ICogQHNlZSBodHRwczovL2RvY3MucG1uZC5ycy9yZWFjdC10aHJlZS1maWJlci9hcGkvYWRkaXRpb25hbC1leHBvcnRzI2FkdmFuY2Vcblx0XHQgKi9cblx0XHRhZHZhbmNlLFxuXHR9O1xufVxuXG5leHBvcnQgY29uc3QgW2luamVjdE5ndExvb3BdID0gY3JlYXRlSW5qZWN0aW9uVG9rZW4oKCkgPT4gY3JlYXRlTG9vcChyb290cykpO1xuIl19