angular-three-postprocessing 2.0.0-beta.23 → 2.0.0-beta.235

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 (45) hide show
  1. package/esm2022/lib/effect-composer.mjs +127 -173
  2. package/esm2022/lib/effect.mjs +45 -70
  3. package/esm2022/lib/effects/bloom.mjs +39 -0
  4. package/esm2022/lib/effects/index.mjs +2 -18
  5. package/fesm2022/angular-three-postprocessing.mjs +183 -888
  6. package/fesm2022/angular-three-postprocessing.mjs.map +1 -1
  7. package/lib/effect-composer.d.ts +37 -81
  8. package/lib/effect.d.ts +55 -24
  9. package/lib/effects/bloom.d.ts +10 -0
  10. package/lib/effects/index.d.ts +1 -17
  11. package/package.json +48 -46
  12. package/esm2022/lib/effects/bloom/bloom.mjs +0 -33
  13. package/esm2022/lib/effects/brightness-contrast/brightness-contrast.mjs +0 -29
  14. package/esm2022/lib/effects/color-depth/color-depth.mjs +0 -29
  15. package/esm2022/lib/effects/depth/depth.mjs +0 -29
  16. package/esm2022/lib/effects/dot-screen/dot-screen.mjs +0 -29
  17. package/esm2022/lib/effects/hue-saturation/hue-saturation.mjs +0 -29
  18. package/esm2022/lib/effects/lut/lut.mjs +0 -74
  19. package/esm2022/lib/effects/noise/noise.mjs +0 -33
  20. package/esm2022/lib/effects/pixelation/pixelation.mjs +0 -37
  21. package/esm2022/lib/effects/scanline/scanline.mjs +0 -33
  22. package/esm2022/lib/effects/sepia/sepia.mjs +0 -29
  23. package/esm2022/lib/effects/shock-wave/shock-wave.mjs +0 -29
  24. package/esm2022/lib/effects/smaa/smaa.mjs +0 -29
  25. package/esm2022/lib/effects/ssao/ssao.mjs +0 -217
  26. package/esm2022/lib/effects/tilt-shift/tilt-shift.mjs +0 -33
  27. package/esm2022/lib/effects/tone-mapping/tone-mapping.mjs +0 -29
  28. package/esm2022/lib/effects/vignette/vignette.mjs +0 -29
  29. package/lib/effects/bloom/bloom.d.ts +0 -13
  30. package/lib/effects/brightness-contrast/brightness-contrast.d.ts +0 -15
  31. package/lib/effects/color-depth/color-depth.d.ts +0 -14
  32. package/lib/effects/depth/depth.d.ts +0 -14
  33. package/lib/effects/dot-screen/dot-screen.d.ts +0 -15
  34. package/lib/effects/hue-saturation/hue-saturation.d.ts +0 -15
  35. package/lib/effects/lut/lut.d.ts +0 -29
  36. package/lib/effects/noise/noise.d.ts +0 -15
  37. package/lib/effects/pixelation/pixelation.d.ts +0 -20
  38. package/lib/effects/scanline/scanline.d.ts +0 -15
  39. package/lib/effects/sepia/sepia.d.ts +0 -14
  40. package/lib/effects/shock-wave/shock-wave.d.ts +0 -17
  41. package/lib/effects/smaa/smaa.d.ts +0 -16
  42. package/lib/effects/ssao/ssao.d.ts +0 -42
  43. package/lib/effects/tilt-shift/tilt-shift.d.ts +0 -23
  44. package/lib/effects/tone-mapping/tone-mapping.d.ts +0 -22
  45. package/lib/effects/vignette/vignette.d.ts +0 -17
@@ -1,148 +1,162 @@
1
- import { CUSTOM_ELEMENTS_SCHEMA, Component, Injector, Input, computed, effect, forwardRef, inject, } from '@angular/core';
2
- import { createInjectionToken, extend, injectBeforeRender, injectNgtRef, injectNgtStore, signalStore, } from 'angular-three';
3
- import { DepthDownsamplingPass, Effect, EffectComposer, EffectPass, NormalPass, Pass, RenderPass, } from 'postprocessing';
4
- import * as THREE from 'three';
5
- import { Group } from 'three';
1
+ import { CUSTOM_ELEMENTS_SCHEMA, ChangeDetectionStrategy, Component, Directive, Injector, TemplateRef, ViewContainerRef, afterNextRender, computed, contentChild, inject, input, viewChild, } from '@angular/core';
2
+ import { extend, getLocalState, injectBeforeRender, injectNgtStore } from 'angular-three';
3
+ import { injectAutoEffect } from 'ngxtension/auto-effect';
4
+ import { mergeInputs } from 'ngxtension/inject-inputs';
5
+ import { DepthDownsamplingPass, Effect, EffectAttribute, EffectComposer, EffectPass, NormalPass, Pass, RenderPass, } from 'postprocessing';
6
+ import { Group, HalfFloatType, NoToneMapping } from 'three';
6
7
  import { isWebGL2Available } from 'three-stdlib';
7
8
  import * as i0 from "@angular/core";
8
9
  extend({ Group });
9
- export const [injectNgtpEffectComposerApi, provideNgtpEffectComposerApi] = createInjectionToken((composer) => composer.api, { isRoot: false, deps: [forwardRef(() => NgtpEffectComposer)] });
10
+ const defaultOptions = {
11
+ enabled: true,
12
+ renderPriority: 1,
13
+ autoClear: true,
14
+ multisampling: 8,
15
+ frameBufferType: HalfFloatType,
16
+ };
17
+ function isConvolution(effect) {
18
+ return (effect.getAttributes() & EffectAttribute.CONVOLUTION) === EffectAttribute.CONVOLUTION;
19
+ }
20
+ export class NgtpEffects {
21
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: NgtpEffects, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
22
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.0.3", type: NgtpEffects, isStandalone: true, selector: "ng-template[effects]", ngImport: i0 }); }
23
+ }
24
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: NgtpEffects, decorators: [{
25
+ type: Directive,
26
+ args: [{ selector: 'ng-template[effects]', standalone: true }]
27
+ }] });
10
28
  export class NgtpEffectComposer {
11
- set _enabled(enabled) {
12
- this.inputs.set({ enabled });
13
- }
14
- set _depthBuffer(depthBuffer) {
15
- this.inputs.set({ depthBuffer });
16
- }
17
- set _disableNormalPass(disableNormalPass) {
18
- this.inputs.set({ disableNormalPass });
19
- }
20
- set _stencilBuffer(stencilBuffer) {
21
- this.inputs.set({ stencilBuffer });
22
- }
23
- set _autoClear(autoClear) {
24
- this.inputs.set({ autoClear });
25
- }
26
- set _resolutionScale(resolutionScale) {
27
- this.inputs.set({ resolutionScale });
28
- }
29
- set _multisampling(multisampling) {
30
- this.inputs.set({ multisampling });
31
- }
32
- set _frameBufferType(frameBufferType) {
33
- this.inputs.set({ frameBufferType });
34
- }
35
- set _renderPriority(renderPriority) {
36
- this.inputs.set({ renderPriority });
37
- }
38
- set _camera(camera) {
39
- this.inputs.set({ camera });
40
- }
41
- set _scene(scene) {
42
- this.inputs.set({ scene });
43
- }
44
29
  constructor() {
45
- this.inputs = signalStore({
46
- enabled: true,
47
- renderPriority: 1,
48
- autoClear: true,
49
- multisampling: 8,
50
- frameBufferType: THREE.HalfFloatType,
51
- });
52
- this.composerRef = injectNgtRef();
30
+ this.options = input(defaultOptions, { transform: mergeInputs(defaultOptions) });
53
31
  this.injector = inject(Injector);
32
+ this.autoEffect = injectAutoEffect();
54
33
  this.store = injectNgtStore();
34
+ this.size = this.store.select('size');
55
35
  this.gl = this.store.select('gl');
56
36
  this.defaultScene = this.store.select('scene');
57
37
  this.defaultCamera = this.store.select('camera');
58
- this.size = this.store.select('size');
59
- this.depthBuffer = this.inputs.select('depthBuffer');
60
- this.stencilBuffer = this.inputs.select('stencilBuffer');
61
- this.multisampling = this.inputs.select('multisampling');
62
- this.frameBufferType = this.inputs.select('frameBufferType');
63
- this.scene = this.inputs.select('scene');
64
- this.camera = this.inputs.select('camera');
65
- this.disableNormalPass = this.inputs.select('disableNormalPass');
66
- this.resolutionScale = this.inputs.select('resolutionScale');
67
- this.autoClear = this.inputs.select('autoClear');
68
- this.activeScene = computed(() => this.scene() || this.defaultScene());
69
- this.activeCamera = computed(() => this.camera() || this.defaultCamera());
70
- this.composerEntities = computed(() => {
38
+ this.depthBuffer = computed(() => this.options().depthBuffer);
39
+ this.stencilBuffer = computed(() => this.options().stencilBuffer);
40
+ this.multisampling = computed(() => this.options().multisampling);
41
+ this.frameBufferType = computed(() => this.options().frameBufferType);
42
+ this.scene = computed(() => this.options().scene ?? this.defaultScene());
43
+ this.camera = computed(() => this.options().camera ?? this.defaultCamera());
44
+ this.enableNormalPass = computed(() => this.options().enableNormalPass);
45
+ this.resolutionScale = computed(() => this.options().resolutionScale);
46
+ this.group = viewChild.required('group');
47
+ this.groupAnchor = viewChild.required('group', { read: ViewContainerRef });
48
+ this.content = contentChild.required(NgtpEffects, { read: TemplateRef });
49
+ this.composerData = computed(() => {
71
50
  const webGL2Available = isWebGL2Available();
72
- const [gl, depthBuffer, stencilBuffer, multisampling, frameBufferType, scene, camera, disableNormalPass, resolutionScale,] = [
51
+ const [gl, scene, camera, depthBuffer, stencilBuffer, multisampling, frameBufferType, enableNormalPass, resolutionScale,] = [
73
52
  this.gl(),
53
+ this.scene(),
54
+ this.camera(),
74
55
  this.depthBuffer(),
75
56
  this.stencilBuffer(),
76
57
  this.multisampling(),
77
58
  this.frameBufferType(),
78
- this.activeScene(),
79
- this.activeCamera(),
80
- this.disableNormalPass(),
59
+ this.enableNormalPass(),
81
60
  this.resolutionScale(),
82
61
  ];
83
- // Initialize composer
84
- const effectComposer = new EffectComposer(gl, {
62
+ // initialize composer
63
+ const composer = new EffectComposer(gl, {
85
64
  depthBuffer,
86
65
  stencilBuffer,
87
66
  multisampling: multisampling > 0 && webGL2Available ? multisampling : 0,
88
67
  frameBufferType,
89
68
  });
90
- // Add render pass
91
- effectComposer.addPass(new RenderPass(scene, camera));
92
- // Create normal pass
69
+ // add render pass
70
+ composer.addPass(new RenderPass(scene, camera));
71
+ // create normal pass
93
72
  let downSamplingPass = null;
94
73
  let normalPass = null;
95
- if (!disableNormalPass) {
74
+ if (enableNormalPass) {
96
75
  normalPass = new NormalPass(scene, camera);
97
76
  normalPass.enabled = false;
98
- effectComposer.addPass(normalPass);
77
+ composer.addPass(normalPass);
99
78
  if (resolutionScale !== undefined && webGL2Available) {
100
79
  downSamplingPass = new DepthDownsamplingPass({ normalBuffer: normalPass.texture, resolutionScale });
101
80
  downSamplingPass.enabled = false;
102
- effectComposer.addPass(downSamplingPass);
81
+ composer.addPass(downSamplingPass);
103
82
  }
104
83
  }
105
- return { effectComposer, normalPass, downSamplingPass };
84
+ return { composer, normalPass, downSamplingPass };
106
85
  });
107
- this.composer = computed(() => this.composerEntities().effectComposer);
108
- this.api = computed(() => {
109
- const [{ effectComposer: composer, normalPass, downSamplingPass }, resolutionScale, camera, scene] = [
110
- this.composerEntities(),
111
- this.resolutionScale(),
112
- this.activeCamera(),
113
- this.activeScene(),
114
- ];
115
- return { composer, normalPass, downSamplingPass, resolutionScale, camera, scene };
86
+ afterNextRender(() => {
87
+ this.disableToneMapping();
88
+ this.setComposerSize();
89
+ this.render();
90
+ this.updatePasses();
91
+ injectBeforeRender(({ delta }) => {
92
+ const [{ composer }, { enabled, autoClear, stencilBuffer }, gl] = [
93
+ this.composerData(),
94
+ this.options(),
95
+ this.gl(),
96
+ ];
97
+ if (enabled) {
98
+ const currentAutoClear = gl.autoClear;
99
+ gl.autoClear = autoClear;
100
+ if (stencilBuffer && !autoClear)
101
+ gl.clearStencil();
102
+ composer.render(delta);
103
+ gl.autoClear = currentAutoClear;
104
+ }
105
+ }, { injector: this.injector, priority: this.options().enabled ? this.options().renderPriority : 0 });
116
106
  });
117
- this.setComposerSize();
118
- this.updatePasses();
119
107
  }
120
- ngOnInit() {
121
- this.beforeRender();
108
+ // NOTE: Disable tone mapping because threejs disallows tonemapping on render targets
109
+ disableToneMapping() {
110
+ this.autoEffect(() => {
111
+ const gl = this.gl();
112
+ const currentTonemapping = gl.toneMapping;
113
+ gl.toneMapping = NoToneMapping;
114
+ return () => {
115
+ gl.toneMapping = currentTonemapping;
116
+ };
117
+ });
122
118
  }
123
119
  setComposerSize() {
124
- effect(() => {
125
- const [composer, size] = [this.composer(), this.size()];
126
- composer.setSize(size.width, size.height);
120
+ this.autoEffect(() => {
121
+ const [{ composer }, { width, height }] = [this.composerData(), this.size()];
122
+ if (composer) {
123
+ composer.setSize(width, height);
124
+ }
127
125
  });
128
126
  }
127
+ render() {
128
+ this.autoEffect((injector) => {
129
+ const ref = this.groupAnchor().createEmbeddedView(this.content(), {}, { injector });
130
+ ref.detectChanges();
131
+ return () => ref.destroy();
132
+ }, { allowSignalWrites: true });
133
+ }
129
134
  updatePasses() {
130
- effect((onCleanup) => {
131
- const [{ effectComposer: composer, normalPass, downSamplingPass }, instance, children, camera] = [
132
- this.composerEntities(),
133
- this.composerRef.nativeElement,
134
- this.composerRef.children('nonObjects')(),
135
- this.activeCamera(),
135
+ this.autoEffect(() => {
136
+ const [group, { composer, normalPass, downSamplingPass }, camera] = [
137
+ this.group(),
138
+ this.composerData(),
139
+ this.camera(),
136
140
  ];
137
141
  const passes = [];
138
- if (instance && composer && children.length) {
142
+ if (group.nativeElement && composer) {
143
+ const localState = getLocalState(group.nativeElement);
144
+ if (!localState)
145
+ return;
146
+ const children = localState.nonObjects();
139
147
  for (let i = 0; i < children.length; i++) {
140
148
  const child = children[i];
141
149
  if (child instanceof Effect) {
142
- const effects = [];
143
- while (children[i] instanceof Effect)
144
- effects.push(children[i++]);
145
- i--;
150
+ const effects = [child];
151
+ if (!isConvolution(child)) {
152
+ let next = null;
153
+ while ((next = children[i + 1]) instanceof Effect) {
154
+ if (isConvolution(next))
155
+ break;
156
+ effects.push(next);
157
+ i++;
158
+ }
159
+ }
146
160
  const pass = new EffectPass(camera, ...effects);
147
161
  passes.push(pass);
148
162
  }
@@ -150,99 +164,39 @@ export class NgtpEffectComposer {
150
164
  passes.push(child);
151
165
  }
152
166
  }
153
- for (const pass of passes)
167
+ for (const pass of passes) {
154
168
  composer.addPass(pass);
169
+ }
155
170
  if (normalPass)
156
171
  normalPass.enabled = true;
157
172
  if (downSamplingPass)
158
173
  downSamplingPass.enabled = true;
159
174
  }
160
- onCleanup(() => {
175
+ return () => {
161
176
  for (const pass of passes)
162
177
  composer?.removePass(pass);
163
178
  if (normalPass)
164
179
  normalPass.enabled = false;
165
180
  if (downSamplingPass)
166
181
  downSamplingPass.enabled = false;
167
- });
168
- });
169
- }
170
- beforeRender() {
171
- injectBeforeRender(({ delta }) => {
172
- const [enabled, gl, autoClear, stencilBuffer, composer] = [
173
- this.inputs.get('enabled'),
174
- this.gl(),
175
- this.autoClear(),
176
- this.stencilBuffer(),
177
- this.composer(),
178
- ];
179
- if (enabled) {
180
- const currentAutoClear = gl.autoClear;
181
- gl.autoClear = autoClear;
182
- if (stencilBuffer && !autoClear)
183
- gl.clearStencil();
184
- composer.render(delta);
185
- gl.autoClear = currentAutoClear;
186
- }
187
- }, {
188
- injector: this.injector,
189
- priority: this.inputs.get('enabled') ? this.inputs.get('renderPriority') : 0,
182
+ };
190
183
  });
191
184
  }
192
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.2", ngImport: i0, type: NgtpEffectComposer, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
193
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.2", type: NgtpEffectComposer, isStandalone: true, selector: "ngtp-effect-composer", inputs: { composerRef: "composerRef", _enabled: ["enabled", "_enabled"], _depthBuffer: ["depthBuffer", "_depthBuffer"], _disableNormalPass: ["disableNormalPass", "_disableNormalPass"], _stencilBuffer: ["stencilBuffer", "_stencilBuffer"], _autoClear: ["autoClear", "_autoClear"], _resolutionScale: ["resolutionScale", "_resolutionScale"], _multisampling: ["multisampling", "_multisampling"], _frameBufferType: ["frameBufferType", "_frameBufferType"], _renderPriority: ["renderPriority", "_renderPriority"], _camera: ["camera", "_camera"], _scene: ["scene", "_scene"] }, providers: [provideNgtpEffectComposerApi()], ngImport: i0, template: `
194
- <ngt-group [ref]="composerRef">
195
- <ng-content />
196
- </ngt-group>
197
- `, isInline: true }); }
185
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: NgtpEffectComposer, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
186
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "18.0.3", type: NgtpEffectComposer, isStandalone: true, selector: "ngtp-effect-composer", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, queries: [{ propertyName: "content", first: true, predicate: NgtpEffects, descendants: true, read: TemplateRef, isSignal: true }], viewQueries: [{ propertyName: "group", first: true, predicate: ["group"], descendants: true, isSignal: true }, { propertyName: "groupAnchor", first: true, predicate: ["group"], descendants: true, read: ViewContainerRef, isSignal: true }], ngImport: i0, template: `
187
+ <ngt-group #group ngtCompound></ngt-group>
188
+ `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
198
189
  }
199
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.2", ngImport: i0, type: NgtpEffectComposer, decorators: [{
190
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: NgtpEffectComposer, decorators: [{
200
191
  type: Component,
201
192
  args: [{
202
193
  selector: 'ngtp-effect-composer',
203
194
  standalone: true,
204
195
  template: `
205
- <ngt-group [ref]="composerRef">
206
- <ng-content />
207
- </ngt-group>
196
+ <ngt-group #group ngtCompound></ngt-group>
208
197
  `,
209
- providers: [provideNgtpEffectComposerApi()],
210
198
  schemas: [CUSTOM_ELEMENTS_SCHEMA],
199
+ changeDetection: ChangeDetectionStrategy.OnPush,
211
200
  }]
212
- }], ctorParameters: function () { return []; }, propDecorators: { composerRef: [{
213
- type: Input
214
- }], _enabled: [{
215
- type: Input,
216
- args: [{ alias: 'enabled' }]
217
- }], _depthBuffer: [{
218
- type: Input,
219
- args: [{ alias: 'depthBuffer' }]
220
- }], _disableNormalPass: [{
221
- type: Input,
222
- args: [{ alias: 'disableNormalPass' }]
223
- }], _stencilBuffer: [{
224
- type: Input,
225
- args: [{ alias: 'stencilBuffer' }]
226
- }], _autoClear: [{
227
- type: Input,
228
- args: [{ alias: 'autoClear' }]
229
- }], _resolutionScale: [{
230
- type: Input,
231
- args: [{ alias: 'resolutionScale' }]
232
- }], _multisampling: [{
233
- type: Input,
234
- args: [{ alias: 'multisampling' }]
235
- }], _frameBufferType: [{
236
- type: Input,
237
- args: [{ alias: 'frameBufferType' }]
238
- }], _renderPriority: [{
239
- type: Input,
240
- args: [{ alias: 'renderPriority' }]
241
- }], _camera: [{
242
- type: Input,
243
- args: [{ alias: 'camera' }]
244
- }], _scene: [{
245
- type: Input,
246
- args: [{ alias: 'scene' }]
247
- }] } });
248
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWZmZWN0LWNvbXBvc2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9wb3N0cHJvY2Vzc2luZy9zcmMvbGliL2VmZmVjdC1jb21wb3Nlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ04sc0JBQXNCLEVBQ3RCLFNBQVMsRUFDVCxRQUFRLEVBQ1IsS0FBSyxFQUNMLFFBQVEsRUFDUixNQUFNLEVBQ04sVUFBVSxFQUNWLE1BQU0sR0FDTixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQ04sb0JBQW9CLEVBQ3BCLE1BQU0sRUFDTixrQkFBa0IsRUFDbEIsWUFBWSxFQUNaLGNBQWMsRUFDZCxXQUFXLEdBQ1gsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUNOLHFCQUFxQixFQUNyQixNQUFNLEVBQ04sY0FBYyxFQUNkLFVBQVUsRUFDVixVQUFVLEVBQ1YsSUFBSSxFQUNKLFVBQVUsR0FDVixNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sS0FBSyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQy9CLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFDOUIsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sY0FBYyxDQUFDOztBQUVqRCxNQUFNLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0FBZ0JsQixNQUFNLENBQUMsTUFBTSxDQUFDLDJCQUEyQixFQUFFLDRCQUE0QixDQUFDLEdBQUcsb0JBQW9CLENBQzlGLENBQUMsUUFBNEIsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFDOUMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLEVBQUUsQ0FDL0QsQ0FBQztBQWFGLE1BQU0sT0FBTyxrQkFBa0I7SUFXOUIsSUFBaUMsUUFBUSxDQUFDLE9BQWdCO1FB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QUFFLGlCQUFpQixFQUFFO2dCQUlLLGVBQWU7c0JBQXRELEtBQUs7dUJBQUMsRUFBRSxLQUFLLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBSUYsT0FBTztzQkFBdEMsS0FBSzt1QkFBQyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUU7Z0JBSUssTUFBTTtzQkFBcEMsS0FBSzt1QkFBQyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuXHRDVVNUT01fRUxFTUVOVFNfU0NIRU1BLFxuXHRDb21wb25lbnQsXG5cdEluamVjdG9yLFxuXHRJbnB1dCxcblx0Y29tcHV0ZWQsXG5cdGVmZmVjdCxcblx0Zm9yd2FyZFJlZixcblx0aW5qZWN0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG5cdGNyZWF0ZUluamVjdGlvblRva2VuLFxuXHRleHRlbmQsXG5cdGluamVjdEJlZm9yZVJlbmRlcixcblx0aW5qZWN0Tmd0UmVmLFxuXHRpbmplY3ROZ3RTdG9yZSxcblx0c2lnbmFsU3RvcmUsXG59IGZyb20gJ2FuZ3VsYXItdGhyZWUnO1xuaW1wb3J0IHtcblx0RGVwdGhEb3duc2FtcGxpbmdQYXNzLFxuXHRFZmZlY3QsXG5cdEVmZmVjdENvbXBvc2VyLFxuXHRFZmZlY3RQYXNzLFxuXHROb3JtYWxQYXNzLFxuXHRQYXNzLFxuXHRSZW5kZXJQYXNzLFxufSBmcm9tICdwb3N0cHJvY2Vzc2luZyc7XG5pbXBvcnQgKiBhcyBUSFJFRSBmcm9tICd0aHJlZSc7XG5pbXBvcnQgeyBHcm91cCB9IGZyb20gJ3RocmVlJztcbmltcG9ydCB7IGlzV2ViR0wyQXZhaWxhYmxlIH0gZnJvbSAndGhyZWUtc3RkbGliJztcblxuZXh0ZW5kKHsgR3JvdXAgfSk7XG5cbmV4cG9ydCB0eXBlIE5ndHBFZmZlY3RDb21wb3NlclN0YXRlID0ge1xuXHRlbmFibGVkOiBib29sZWFuO1xuXHRkZXB0aEJ1ZmZlcj86IGJvb2xlYW47XG5cdGRpc2FibGVOb3JtYWxQYXNzPzogYm9vbGVhbjtcblx0c3RlbmNpbEJ1ZmZlcj86IGJvb2xlYW47XG5cdGF1dG9DbGVhcjogYm9vbGVhbjtcblx0cmVzb2x1dGlvblNjYWxlPzogbnVtYmVyO1xuXHRtdWx0aXNhbXBsaW5nOiBudW1iZXI7XG5cdGZyYW1lQnVmZmVyVHlwZTogVEhSRUUuVGV4dHVyZURhdGFUeXBlO1xuXHRyZW5kZXJQcmlvcml0eTogbnVtYmVyO1xuXHRjYW1lcmE/OiBUSFJFRS5DYW1lcmE7XG5cdHNjZW5lPzogVEhSRUUuU2NlbmU7XG59O1xuXG5leHBvcnQgY29uc3QgW2luamVjdE5ndHBFZmZlY3RDb21wb3NlckFwaSwgcHJvdmlkZU5ndHBFZmZlY3RDb21wb3NlckFwaV0gPSBjcmVhdGVJbmplY3Rpb25Ub2tlbihcblx0KGNvbXBvc2VyOiBOZ3RwRWZmZWN0Q29tcG9zZXIpID0+IGNvbXBvc2VyLmFwaSxcblx0eyBpc1Jvb3Q6IGZhbHNlLCBkZXBzOiBbZm9yd2FyZFJlZigoKSA9PiBOZ3RwRWZmZWN0Q29tcG9zZXIpXSB9LFxuKTtcblxuQENvbXBvbmVudCh7XG5cdHNlbGVjdG9yOiAnbmd0cC1lZmZlY3QtY29tcG9zZXInLFxuXHRzdGFuZGFsb25lOiB0cnVlLFxuXHR0ZW1wbGF0ZTogYFxuXHRcdDxuZ3QtZ3JvdXAgW3JlZl09XCJjb21wb3NlclJlZlwiPlxuXHRcdFx0PG5nLWNvbnRlbnQgLz5cblx0XHQ8L25ndC1ncm91cD5cblx0YCxcblx0cHJvdmlkZXJzOiBbcHJvdmlkZU5ndHBFZmZlY3RDb21wb3NlckFwaSgpXSxcblx0c2NoZW1hczogW0NVU1RPTV9FTEVNRU5UU19TQ0hFTUFdLFxufSlcbmV4cG9ydCBjbGFzcyBOZ3RwRWZmZWN0Q29tcG9zZXIge1xuXHRwcml2YXRlIGlucHV0cyA9IHNpZ25hbFN0b3JlPE5ndHBFZmZlY3RDb21wb3NlclN0YXRlPih7XG5cdFx0ZW5hYmxlZDogdHJ1ZSxcblx0XHRyZW5kZXJQcmlvcml0eTogMSxcblx0XHRhdXRvQ2xlYXI6IHRydWUsXG5cdFx0bXVsdGlzYW1wbGluZzogOCxcblx0XHRmcmFtZUJ1ZmZlclR5cGU6IFRIUkVFLkhhbGZGbG9hdFR5cGUsXG5cdH0pO1xuXG5cdEBJbnB1dCgpIGNvbXBvc2VyUmVmID0gaW5qZWN0Tmd0UmVmPEdyb3VwPigpO1xuXG5cdEBJbnB1dCh7IGFsaWFzOiAnZW5hYmxlZCcgfSkgc2V0IF9lbmFibGVkKGVuYWJsZWQ6IGJvb2xlYW4pIHtcblx0XHR0aGlzLmlucHV0cy5zZXQoeyBlbmFibGVkIH0pO1xuXHR9XG5cblx0QElucHV0KHsgYWxpYXM6ICdkZXB0aEJ1ZmZlcicgfSkgc2V0IF9kZXB0aEJ1ZmZlcihkZXB0aEJ1ZmZlcjogYm9vbGVhbikge1xuXHRcdHRoaXMuaW5wdXRzLnNldCh7IGRlcHRoQnVmZmVyIH0pO1xuXHR9XG5cblx0QElucHV0KHsgYWxpYXM6ICdkaXNhYmxlTm9ybWFsUGFzcycgfSkgc2V0IF9kaXNhYmxlTm9ybWFsUGFzcyhkaXNhYmxlTm9ybWFsUGFzczogYm9vbGVhbikge1xuXHRcdHRoaXMuaW5wdXRzLnNldCh7IGRpc2FibGVOb3JtYWxQYXNzIH0pO1xuXHR9XG5cblx0QElucHV0KHsgYWxpYXM6ICdzdGVuY2lsQnVmZmVyJyB9KSBzZXQgX3N0ZW5jaWxCdWZmZXIoc3RlbmNpbEJ1ZmZlcjogYm9vbGVhbikge1xuXHRcdHRoaXMuaW5wdXRzLnNldCh7IHN0ZW5jaWxCdWZmZXIgfSk7XG5cdH1cblxuXHRASW5wdXQoeyBhbGlhczogJ2F1dG9DbGVhcicgfSkgc2V0IF9hdXRvQ2xlYXIoYXV0b0NsZWFyOiBib29sZWFuKSB7XG5cdFx0dGhpcy5pbnB1dHMuc2V0KHsgYXV0b0NsZWFyIH0pO1xuXHR9XG5cblx0QElucHV0KHsgYWxpYXM6ICdyZXNvbHV0aW9uU2NhbGUnIH0pIHNldCBfcmVzb2x1dGlvblNjYWxlKHJlc29sdXRpb25TY2FsZTogbnVtYmVyKSB7XG5cdFx0dGhpcy5pbnB1dHMuc2V0KHsgcmVzb2x1dGlvblNjYWxlIH0pO1xuXHR9XG5cblx0QElucHV0KHsgYWxpYXM6ICdtdWx0aXNhbXBsaW5nJyB9KSBzZXQgX211bHRpc2FtcGxpbmcobXVsdGlzYW1wbGluZzogbnVtYmVyKSB7XG5cdFx0dGhpcy5pbnB1dHMuc2V0KHsgbXVsdGlzYW1wbGluZyB9KTtcblx0fVxuXG5cdEBJbnB1dCh7IGFsaWFzOiAnZnJhbWVCdWZmZXJUeXBlJyB9KSBzZXQgX2ZyYW1lQnVmZmVyVHlwZShmcmFtZUJ1ZmZlclR5cGU6IFRIUkVFLlRleHR1cmVEYXRhVHlwZSkge1xuXHRcdHRoaXMuaW5wdXRzLnNldCh7IGZyYW1lQnVmZmVyVHlwZSB9KTtcblx0fVxuXG5cdEBJbnB1dCh7IGFsaWFzOiAncmVuZGVyUHJpb3JpdHknIH0pIHNldCBfcmVuZGVyUHJpb3JpdHkocmVuZGVyUHJpb3JpdHk6IG51bWJlcikge1xuXHRcdHRoaXMuaW5wdXRzLnNldCh7IHJlbmRlclByaW9yaXR5IH0pO1xuXHR9XG5cblx0QElucHV0KHsgYWxpYXM6ICdjYW1lcmEnIH0pIHNldCBfY2FtZXJhKGNhbWVyYTogVEhSRUUuQ2FtZXJhKSB7XG5cdFx0dGhpcy5pbnB1dHMuc2V0KHsgY2FtZXJhIH0pO1xuXHR9XG5cblx0QElucHV0KHsgYWxpYXM6ICdzY2VuZScgfSkgc2V0IF9zY2VuZShzY2VuZTogVEhSRUUuU2NlbmUpIHtcblx0XHR0aGlzLmlucHV0cy5zZXQoeyBzY2VuZSB9KTtcblx0fVxuXG5cdHByaXZhdGUgaW5qZWN0b3IgPSBpbmplY3QoSW5qZWN0b3IpO1xuXG5cdHByaXZhdGUgc3RvcmUgPSBpbmplY3ROZ3RTdG9yZSgpO1xuXHRwcml2YXRlIGdsID0gdGhpcy5zdG9yZS5zZWxlY3QoJ2dsJyk7XG5cdHByaXZhdGUgZGVmYXVsdFNjZW5lID0gdGhpcy5zdG9yZS5zZWxlY3QoJ3NjZW5lJyk7XG5cdHByaXZhdGUgZGVmYXVsdENhbWVyYSA9IHRoaXMuc3RvcmUuc2VsZWN0KCdjYW1lcmEnKTtcblx0cHJpdmF0ZSBzaXplID0gdGhpcy5zdG9yZS5zZWxlY3QoJ3NpemUnKTtcblxuXHRwcml2YXRlIGRlcHRoQnVmZmVyID0gdGhpcy5pbnB1dHMuc2VsZWN0KCdkZXB0aEJ1ZmZlcicpO1xuXHRwcml2YXRlIHN0ZW5jaWxCdWZmZXIgPSB0aGlzLmlucHV0cy5zZWxlY3QoJ3N0ZW5jaWxCdWZmZXInKTtcblx0cHJpdmF0ZSBtdWx0aXNhbXBsaW5nID0gdGhpcy5pbnB1dHMuc2VsZWN0KCdtdWx0aXNhbXBsaW5nJyk7XG5cdHByaXZhdGUgZnJhbWVCdWZmZXJUeXBlID0gdGhpcy5pbnB1dHMuc2VsZWN0KCdmcmFtZUJ1ZmZlclR5cGUnKTtcblx0cHJpdmF0ZSBzY2VuZSA9IHRoaXMuaW5wdXRzLnNlbGVjdCgnc2NlbmUnKTtcblx0cHJpdmF0ZSBjYW1lcmEgPSB0aGlzLmlucHV0cy5zZWxlY3QoJ2NhbWVyYScpO1xuXHRwcml2YXRlIGRpc2FibGVOb3JtYWxQYXNzID0gdGhpcy5pbnB1dHMuc2VsZWN0KCdkaXNhYmxlTm9ybWFsUGFzcycpO1xuXHRwcml2YXRlIHJlc29sdXRpb25TY2FsZSA9IHRoaXMuaW5wdXRzLnNlbGVjdCgncmVzb2x1dGlvblNjYWxlJyk7XG5cdHByaXZhdGUgYXV0b0NsZWFyID0gdGhpcy5pbnB1dHMuc2VsZWN0KCdhdXRvQ2xlYXInKTtcblxuXHRwcml2YXRlIGFjdGl2ZVNjZW5lID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5zY2VuZSgpIHx8IHRoaXMuZGVmYXVsdFNjZW5lKCkpO1xuXHRwcml2YXRlIGFjdGl2ZUNhbWVyYSA9IGNvbXB1dGVkKCgpID0+IHRoaXMuY2FtZXJhKCkgfHwgdGhpcy5kZWZhdWx0Q2FtZXJhKCkpO1xuXG5cdHByaXZhdGUgY29tcG9zZXJFbnRpdGllcyA9IGNvbXB1dGVkKCgpID0+IHtcblx0XHRjb25zdCB3ZWJHTDJBdmFpbGFibGUgPSBpc1dlYkdMMkF2YWlsYWJsZSgpO1xuXHRcdGNvbnN0IFtcblx0XHRcdGdsLFxuXHRcdFx0ZGVwdGhCdWZmZXIsXG5cdFx0XHRzdGVuY2lsQnVmZmVyLFxuXHRcdFx0bXVsdGlzYW1wbGluZyxcblx0XHRcdGZyYW1lQnVmZmVyVHlwZSxcblx0XHRcdHNjZW5lLFxuXHRcdFx0Y2FtZXJhLFxuXHRcdFx0ZGlzYWJsZU5vcm1hbFBhc3MsXG5cdFx0XHRyZXNvbHV0aW9uU2NhbGUsXG5cdFx0XSA9IFtcblx0XHRcdHRoaXMuZ2woKSxcblx0XHRcdHRoaXMuZGVwdGhCdWZmZXIoKSxcblx0XHRcdHRoaXMuc3RlbmNpbEJ1ZmZlcigpLFxuXHRcdFx0dGhpcy5tdWx0aXNhbXBsaW5nKCksXG5cdFx0XHR0aGlzLmZyYW1lQnVmZmVyVHlwZSgpLFxuXHRcdFx0dGhpcy5hY3RpdmVTY2VuZSgpLFxuXHRcdFx0dGhpcy5hY3RpdmVDYW1lcmEoKSxcblx0XHRcdHRoaXMuZGlzYWJsZU5vcm1hbFBhc3MoKSxcblx0XHRcdHRoaXMucmVzb2x1dGlvblNjYWxlKCksXG5cdFx0XTtcblxuXHRcdC8vIEluaXRpYWxpemUgY29tcG9zZXJcblx0XHRjb25zdCBlZmZlY3RDb21wb3NlciA9IG5ldyBFZmZlY3RDb21wb3NlcihnbCwge1xuXHRcdFx0ZGVwdGhCdWZmZXIsXG5cdFx0XHRzdGVuY2lsQnVmZmVyLFxuXHRcdFx0bXVsdGlzYW1wbGluZzogbXVsdGlzYW1wbGluZyA+IDAgJiYgd2ViR0wyQXZhaWxhYmxlID8gbXVsdGlzYW1wbGluZyA6IDAsXG5cdFx0XHRmcmFtZUJ1ZmZlclR5cGUsXG5cdFx0fSk7XG5cblx0XHQvLyBBZGQgcmVuZGVyIHBhc3Ncblx0XHRlZmZlY3RDb21wb3Nlci5hZGRQYXNzKG5ldyBSZW5kZXJQYXNzKHNjZW5lLCBjYW1lcmEpKTtcblxuXHRcdC8vIENyZWF0ZSBub3JtYWwgcGFzc1xuXHRcdGxldCBkb3duU2FtcGxpbmdQYXNzID0gbnVsbDtcblx0XHRsZXQgbm9ybWFsUGFzcyA9IG51bGw7XG5cdFx0aWYgKCFkaXNhYmxlTm9ybWFsUGFzcykge1xuXHRcdFx0bm9ybWFsUGFzcyA9IG5ldyBOb3JtYWxQYXNzKHNjZW5lLCBjYW1lcmEpO1xuXHRcdFx0bm9ybWFsUGFzcy5lbmFibGVkID0gZmFsc2U7XG5cdFx0XHRlZmZlY3RDb21wb3Nlci5hZGRQYXNzKG5vcm1hbFBhc3MpO1xuXHRcdFx0aWYgKHJlc29sdXRpb25TY2FsZSAhPT0gdW5kZWZpbmVkICYmIHdlYkdMMkF2YWlsYWJsZSkge1xuXHRcdFx0XHRkb3duU2FtcGxpbmdQYXNzID0gbmV3IERlcHRoRG93bnNhbXBsaW5nUGFzcyh7IG5vcm1hbEJ1ZmZlcjogbm9ybWFsUGFzcy50ZXh0dXJlLCByZXNvbHV0aW9uU2NhbGUgfSk7XG5cdFx0XHRcdGRvd25TYW1wbGluZ1Bhc3MuZW5hYmxlZCA9IGZhbHNlO1xuXHRcdFx0XHRlZmZlY3RDb21wb3Nlci5hZGRQYXNzKGRvd25TYW1wbGluZ1Bhc3MpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiB7IGVmZmVjdENvbXBvc2VyLCBub3JtYWxQYXNzLCBkb3duU2FtcGxpbmdQYXNzIH07XG5cdH0pO1xuXG5cdHByaXZhdGUgY29tcG9zZXIgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmNvbXBvc2VyRW50aXRpZXMoKS5lZmZlY3RDb21wb3Nlcik7XG5cblx0YXBpID0gY29tcHV0ZWQoKCkgPT4ge1xuXHRcdGNvbnN0IFt7IGVmZmVjdENvbXBvc2VyOiBjb21wb3Nlciwgbm9ybWFsUGFzcywgZG93blNhbXBsaW5nUGFzcyB9LCByZXNvbHV0aW9uU2NhbGUsIGNhbWVyYSwgc2NlbmVdID0gW1xuXHRcdFx0dGhpcy5jb21wb3NlckVudGl0aWVzKCksXG5cdFx0XHR0aGlzLnJlc29sdXRpb25TY2FsZSgpLFxuXHRcdFx0dGhpcy5hY3RpdmVDYW1lcmEoKSxcblx0XHRcdHRoaXMuYWN0aXZlU2NlbmUoKSxcblx0XHRdO1xuXHRcdHJldHVybiB7IGNvbXBvc2VyLCBub3JtYWxQYXNzLCBkb3duU2FtcGxpbmdQYXNzLCByZXNvbHV0aW9uU2NhbGUsIGNhbWVyYSwgc2NlbmUgfTtcblx0fSk7XG5cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0dGhpcy5zZXRDb21wb3NlclNpemUoKTtcblx0XHR0aGlzLnVwZGF0ZVBhc3NlcygpO1xuXHR9XG5cblx0bmdPbkluaXQoKSB7XG5cdFx0dGhpcy5iZWZvcmVSZW5kZXIoKTtcblx0fVxuXG5cdHByaXZhdGUgc2V0Q29tcG9zZXJTaXplKCkge1xuXHRcdGVmZmVjdCgoKSA9PiB7XG5cdFx0XHRjb25zdCBbY29tcG9zZXIsIHNpemVdID0gW3RoaXMuY29tcG9zZXIoKSwgdGhpcy5zaXplKCldO1xuXHRcdFx0Y29tcG9zZXIuc2V0U2l6ZShzaXplLndpZHRoLCBzaXplLmhlaWdodCk7XG5cdFx0fSk7XG5cdH1cblxuXHRwcml2YXRlIHVwZGF0ZVBhc3NlcygpIHtcblx0XHRlZmZlY3QoKG9uQ2xlYW51cCkgPT4ge1xuXHRcdFx0Y29uc3QgW3sgZWZmZWN0Q29tcG9zZXI6IGNvbXBvc2VyLCBub3JtYWxQYXNzLCBkb3duU2FtcGxpbmdQYXNzIH0sIGluc3RhbmNlLCBjaGlsZHJlbiwgY2FtZXJhXSA9IFtcblx0XHRcdFx0dGhpcy5jb21wb3NlckVudGl0aWVzKCksXG5cdFx0XHRcdHRoaXMuY29tcG9zZXJSZWYubmF0aXZlRWxlbWVudCxcblx0XHRcdFx0dGhpcy5jb21wb3NlclJlZi5jaGlsZHJlbignbm9uT2JqZWN0cycpKCksXG5cdFx0XHRcdHRoaXMuYWN0aXZlQ2FtZXJhKCksXG5cdFx0XHRdO1xuXG5cdFx0XHRjb25zdCBwYXNzZXM6IFBhc3NbXSA9IFtdO1xuXG5cdFx0XHRpZiAoaW5zdGFuY2UgJiYgY29tcG9zZXIgJiYgY2hpbGRyZW4ubGVuZ3RoKSB7XG5cdFx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0XHRjb25zdCBjaGlsZCA9IGNoaWxkcmVuW2ldO1xuXHRcdFx0XHRcdGlmIChjaGlsZCBpbnN0YW5jZW9mIEVmZmVjdCkge1xuXHRcdFx0XHRcdFx0Y29uc3QgZWZmZWN0czogRWZmZWN0W10gPSBbXTtcblxuXHRcdFx0XHRcdFx0d2hpbGUgKGNoaWxkcmVuW2ldIGluc3RhbmNlb2YgRWZmZWN0KSBlZmZlY3RzLnB1c2goY2hpbGRyZW5baSsrXSBhcyBFZmZlY3QpO1xuXHRcdFx0XHRcdFx0aS0tO1xuXG5cdFx0XHRcdFx0XHRjb25zdCBwYXNzID0gbmV3IEVmZmVjdFBhc3MoY2FtZXJhLCAuLi5lZmZlY3RzKTtcblx0XHRcdFx0XHRcdHBhc3Nlcy5wdXNoKHBhc3MpO1xuXHRcdFx0XHRcdH0gZWxzZSBpZiAoY2hpbGQgaW5zdGFuY2VvZiBQYXNzKSB7XG5cdFx0XHRcdFx0XHRwYXNzZXMucHVzaChjaGlsZCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Zm9yIChjb25zdCBwYXNzIG9mIHBhc3NlcykgY29tcG9zZXIuYWRkUGFzcyhwYXNzKTtcblx0XHRcdFx0aWYgKG5vcm1hbFBhc3MpIG5vcm1hbFBhc3MuZW5hYmxlZCA9IHRydWU7XG5cdFx0XHRcdGlmIChkb3duU2FtcGxpbmdQYXNzKSBkb3duU2FtcGxpbmdQYXNzLmVuYWJsZWQgPSB0cnVlO1xuXHRcdFx0fVxuXG5cdFx0XHRvbkNsZWFudXAoKCkgPT4ge1xuXHRcdFx0XHRmb3IgKGNvbnN0IHBhc3Mgb2YgcGFzc2VzKSBjb21wb3Nlcj8ucmVtb3ZlUGFzcyhwYXNzKTtcblx0XHRcdFx0aWYgKG5vcm1hbFBhc3MpIG5vcm1hbFBhc3MuZW5hYmxlZCA9IGZhbHNlO1xuXHRcdFx0XHRpZiAoZG93blNhbXBsaW5nUGFzcykgZG93blNhbXBsaW5nUGFzcy5lbmFibGVkID0gZmFsc2U7XG5cdFx0XHR9KTtcblx0XHR9KTtcblx0fVxuXG5cdHByaXZhdGUgYmVmb3JlUmVuZGVyKCkge1xuXHRcdGluamVjdEJlZm9yZVJlbmRlcihcblx0XHRcdCh7IGRlbHRhIH0pID0+IHtcblx0XHRcdFx0Y29uc3QgW2VuYWJsZWQsIGdsLCBhdXRvQ2xlYXIsIHN0ZW5jaWxCdWZmZXIsIGNvbXBvc2VyXSA9IFtcblx0XHRcdFx0XHR0aGlzLmlucHV0cy5nZXQoJ2VuYWJsZWQnKSxcblx0XHRcdFx0XHR0aGlzLmdsKCksXG5cdFx0XHRcdFx0dGhpcy5hdXRvQ2xlYXIoKSxcblx0XHRcdFx0XHR0aGlzLnN0ZW5jaWxCdWZmZXIoKSxcblx0XHRcdFx0XHR0aGlzLmNvbXBvc2VyKCksXG5cdFx0XHRcdF07XG5cdFx0XHRcdGlmIChlbmFibGVkKSB7XG5cdFx0XHRcdFx0Y29uc3QgY3VycmVudEF1dG9DbGVhciA9IGdsLmF1dG9DbGVhcjtcblx0XHRcdFx0XHRnbC5hdXRvQ2xlYXIgPSBhdXRvQ2xlYXI7XG5cdFx0XHRcdFx0aWYgKHN0ZW5jaWxCdWZmZXIgJiYgIWF1dG9DbGVhcikgZ2wuY2xlYXJTdGVuY2lsKCk7XG5cdFx0XHRcdFx0Y29tcG9zZXIucmVuZGVyKGRlbHRhKTtcblx0XHRcdFx0XHRnbC5hdXRvQ2xlYXIgPSBjdXJyZW50QXV0b0NsZWFyO1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRpbmplY3RvcjogdGhpcy5pbmplY3Rvcixcblx0XHRcdFx0cHJpb3JpdHk6IHRoaXMuaW5wdXRzLmdldCgnZW5hYmxlZCcpID8gdGhpcy5pbnB1dHMuZ2V0KCdyZW5kZXJQcmlvcml0eScpIDogMCxcblx0XHRcdH0sXG5cdFx0KTtcblx0fVxufVxuIl19
201
+ }], ctorParameters: () => [] });
202
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWZmZWN0LWNvbXBvc2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9wb3N0cHJvY2Vzc2luZy9zcmMvbGliL2VmZmVjdC1jb21wb3Nlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ04sc0JBQXNCLEVBQ3RCLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsU0FBUyxFQUVULFFBQVEsRUFDUixXQUFXLEVBQ1gsZ0JBQWdCLEVBQ2hCLGVBQWUsRUFDZixRQUFRLEVBQ1IsWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBQ0wsU0FBUyxHQUNULE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxNQUFNLEVBQUUsYUFBYSxFQUFFLGtCQUFrQixFQUFFLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxRixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUMxRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDdkQsT0FBTyxFQUNOLHFCQUFxQixFQUNyQixNQUFNLEVBQ04sZUFBZSxFQUNmLGNBQWMsRUFDZCxVQUFVLEVBQ1YsVUFBVSxFQUNWLElBQUksRUFDSixVQUFVLEdBQ1YsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQVUsS0FBSyxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQTBCLE1BQU0sT0FBTyxDQUFDO0FBQzVGLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGNBQWMsQ0FBQzs7QUFFakQsTUFBTSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztBQWlCbEIsTUFBTSxjQUFjLEdBQThCO0lBQ2pELE9BQU8sRUFBRSxJQUFJO0lBQ2IsY0FBYyxFQUFFLENBQUM7SUFDakIsU0FBUyxFQUFFLElBQUk7SUFDZixhQUFhLEVBQUUsQ0FBQztJQUNoQixlQUFlLEVBQUUsYUFBYTtDQUM5QixDQUFDO0FBRUYsU0FBUyxhQUFh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VSxXQUFXLCtOQURkLGdCQUFnQiw2Q0EzQnhEOztFQUVUOzsyRkFJVyxrQkFBa0I7a0JBVDlCLFNBQVM7bUJBQUM7b0JBQ1YsUUFBUSxFQUFFLHNCQUFzQjtvQkFDaEMsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLFFBQVEsRUFBRTs7RUFFVDtvQkFDRCxPQUFPLEVBQUUsQ0FBQyxzQkFBc0IsQ0FBQztvQkFDakMsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07aUJBQy9DIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcblx0Q1VTVE9NX0VMRU1FTlRTX1NDSEVNQSxcblx0Q2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG5cdENvbXBvbmVudCxcblx0RGlyZWN0aXZlLFxuXHRFbGVtZW50UmVmLFxuXHRJbmplY3Rvcixcblx0VGVtcGxhdGVSZWYsXG5cdFZpZXdDb250YWluZXJSZWYsXG5cdGFmdGVyTmV4dFJlbmRlcixcblx0Y29tcHV0ZWQsXG5cdGNvbnRlbnRDaGlsZCxcblx0aW5qZWN0LFxuXHRpbnB1dCxcblx0dmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGV4dGVuZCwgZ2V0TG9jYWxTdGF0ZSwgaW5qZWN0QmVmb3JlUmVuZGVyLCBpbmplY3ROZ3RTdG9yZSB9IGZyb20gJ2FuZ3VsYXItdGhyZWUnO1xuaW1wb3J0IHsgaW5qZWN0QXV0b0VmZmVjdCB9IGZyb20gJ25neHRlbnNpb24vYXV0by1lZmZlY3QnO1xuaW1wb3J0IHsgbWVyZ2VJbnB1dHMgfSBmcm9tICduZ3h0ZW5zaW9uL2luamVjdC1pbnB1dHMnO1xuaW1wb3J0IHtcblx0RGVwdGhEb3duc2FtcGxpbmdQYXNzLFxuXHRFZmZlY3QsXG5cdEVmZmVjdEF0dHJpYnV0ZSxcblx0RWZmZWN0Q29tcG9zZXIsXG5cdEVmZmVjdFBhc3MsXG5cdE5vcm1hbFBhc3MsXG5cdFBhc3MsXG5cdFJlbmRlclBhc3MsXG59IGZyb20gJ3Bvc3Rwcm9jZXNzaW5nJztcbmltcG9ydCB7IENhbWVyYSwgR3JvdXAsIEhhbGZGbG9hdFR5cGUsIE5vVG9uZU1hcHBpbmcsIFNjZW5lLCBUZXh0dXJlRGF0YVR5cGUgfSBmcm9tICd0aHJlZSc7XG5pbXBvcnQgeyBpc1dlYkdMMkF2YWlsYWJsZSB9IGZyb20gJ3RocmVlLXN0ZGxpYic7XG5cbmV4dGVuZCh7IEdyb3VwIH0pO1xuXG5pbnRlcmZhY2UgTmd0cEVmZmVjdENvbXBvc2VyT3B0aW9ucyB7XG5cdGVuYWJsZWQ6IGJvb2xlYW47XG5cdGRlcHRoQnVmZmVyPzogYm9vbGVhbjtcblx0LyoqIE9ubHkgdXNlZCBmb3IgU1NHSSBjdXJyZW50bHksIGxlYXZlIGl0IGRpc2FibGVkIGZvciBldmVyeXRoaW5nIGVsc2UgdW5sZXNzIGl0J3MgbmVlZGVkICovXG5cdGVuYWJsZU5vcm1hbFBhc3M/OiBib29sZWFuO1xuXHRzdGVuY2lsQnVmZmVyPzogYm9vbGVhbjtcblx0YXV0b0NsZWFyOiBib29sZWFuO1xuXHRyZXNvbHV0aW9uU2NhbGU/OiBudW1iZXI7XG5cdG11bHRpc2FtcGxpbmc6IG51bWJlcjtcblx0ZnJhbWVCdWZmZXJUeXBlOiBUZXh0dXJlRGF0YVR5cGU7XG5cdHJlbmRlclByaW9yaXR5OiBudW1iZXI7XG5cdGNhbWVyYT86IENhbWVyYTtcblx0c2NlbmU/OiBTY2VuZTtcbn1cblxuY29uc3QgZGVmYXVsdE9wdGlvbnM6IE5ndHBFZmZlY3RDb21wb3Nlck9wdGlvbnMgPSB7XG5cdGVuYWJsZWQ6IHRydWUsXG5cdHJlbmRlclByaW9yaXR5OiAxLFxuXHRhdXRvQ2xlYXI6IHRydWUsXG5cdG11bHRpc2FtcGxpbmc6IDgsXG5cdGZyYW1lQnVmZmVyVHlwZTogSGFsZkZsb2F0VHlwZSxcbn07XG5cbmZ1bmN0aW9uIGlzQ29udm9sdXRpb24oZWZmZWN0OiBFZmZlY3QpIHtcblx0cmV0dXJuIChlZmZlY3QuZ2V0QXR0cmlidXRlcygpICYgRWZmZWN0QXR0cmlidXRlLkNPTlZPTFVUSU9OKSA9PT0gRWZmZWN0QXR0cmlidXRlLkNPTlZPTFVUSU9OO1xufVxuXG5ARGlyZWN0aXZlKHsgc2VsZWN0b3I6ICduZy10ZW1wbGF0ZVtlZmZlY3RzXScsIHN0YW5kYWxvbmU6IHRydWUgfSlcbmV4cG9ydCBjbGFzcyBOZ3RwRWZmZWN0cyB7fVxuXG5AQ29tcG9uZW50KHtcblx0c2VsZWN0b3I6ICduZ3RwLWVmZmVjdC1jb21wb3NlcicsXG5cdHN0YW5kYWxvbmU6IHRydWUsXG5cdHRlbXBsYXRlOiBgXG5cdFx0PG5ndC1ncm91cCAjZ3JvdXAgbmd0Q29tcG91bmQ+PC9uZ3QtZ3JvdXA+XG5cdGAsXG5cdHNjaGVtYXM6IFtDVVNUT01fRUxFTUVOVFNfU0NIRU1BXSxcblx0Y2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIE5ndHBFZmZlY3RDb21wb3NlciB7XG5cdG9wdGlvbnMgPSBpbnB1dChkZWZhdWx0T3B0aW9ucywgeyB0cmFuc2Zvcm06IG1lcmdlSW5wdXRzKGRlZmF1bHRPcHRpb25zKSB9KTtcblxuXHRpbmplY3RvciA9IGluamVjdChJbmplY3Rvcik7XG5cdGF1dG9FZmZlY3QgPSBpbmplY3RBdXRvRWZmZWN0KCk7XG5cdHN0b3JlID0gaW5qZWN0Tmd0U3RvcmUoKTtcblx0c2l6ZSA9IHRoaXMuc3RvcmUuc2VsZWN0KCdzaXplJyk7XG5cdGdsID0gdGhpcy5zdG9yZS5zZWxlY3QoJ2dsJyk7XG5cdGRlZmF1bHRTY2VuZSA9IHRoaXMuc3RvcmUuc2VsZWN0KCdzY2VuZScpO1xuXHRkZWZhdWx0Q2FtZXJhID0gdGhpcy5zdG9yZS5zZWxlY3QoJ2NhbWVyYScpO1xuXG5cdGRlcHRoQnVmZmVyID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5vcHRpb25zKCkuZGVwdGhCdWZmZXIpO1xuXHRzdGVuY2lsQnVmZmVyID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5vcHRpb25zKCkuc3RlbmNpbEJ1ZmZlcik7XG5cdG11bHRpc2FtcGxpbmcgPSBjb21wdXRlZCgoKSA9PiB0aGlzLm9wdGlvbnMoKS5tdWx0aXNhbXBsaW5nKTtcblx0ZnJhbWVCdWZmZXJUeXBlID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5vcHRpb25zKCkuZnJhbWVCdWZmZXJUeXBlKTtcblx0c2NlbmUgPSBjb21wdXRlZCgoKSA9PiB0aGlzLm9wdGlvbnMoKS5zY2VuZSA/PyB0aGlzLmRlZmF1bHRTY2VuZSgpKTtcblx0Y2FtZXJhID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5vcHRpb25zKCkuY2FtZXJhID8/IHRoaXMuZGVmYXVsdENhbWVyYSgpKTtcblx0ZW5hYmxlTm9ybWFsUGFzcyA9IGNvbXB1dGVkKCgpID0+IHRoaXMub3B0aW9ucygpLmVuYWJsZU5vcm1hbFBhc3MpO1xuXHRyZXNvbHV0aW9uU2NhbGUgPSBjb21wdXRlZCgoKSA9PiB0aGlzLm9wdGlvbnMoKS5yZXNvbHV0aW9uU2NhbGUpO1xuXG5cdGdyb3VwID0gdmlld0NoaWxkLnJlcXVpcmVkPEVsZW1lbnRSZWY8R3JvdXA+PignZ3JvdXAnKTtcblx0Z3JvdXBBbmNob3IgPSB2aWV3Q2hpbGQucmVxdWlyZWQoJ2dyb3VwJywgeyByZWFkOiBWaWV3Q29udGFpbmVyUmVmIH0pO1xuXHRjb250ZW50ID0gY29udGVudENoaWxkLnJlcXVpcmVkKE5ndHBFZmZlY3RzLCB7IHJlYWQ6IFRlbXBsYXRlUmVmIH0pO1xuXG5cdGNvbXBvc2VyRGF0YSA9IGNvbXB1dGVkKCgpID0+IHtcblx0XHRjb25zdCB3ZWJHTDJBdmFpbGFibGUgPSBpc1dlYkdMMkF2YWlsYWJsZSgpO1xuXHRcdGNvbnN0IFtcblx0XHRcdGdsLFxuXHRcdFx0c2NlbmUsXG5cdFx0XHRjYW1lcmEsXG5cdFx0XHRkZXB0aEJ1ZmZlcixcblx0XHRcdHN0ZW5jaWxCdWZmZXIsXG5cdFx0XHRtdWx0aXNhbXBsaW5nLFxuXHRcdFx0ZnJhbWVCdWZmZXJUeXBlLFxuXHRcdFx0ZW5hYmxlTm9ybWFsUGFzcyxcblx0XHRcdHJlc29sdXRpb25TY2FsZSxcblx0XHRdID0gW1xuXHRcdFx0dGhpcy5nbCgpLFxuXHRcdFx0dGhpcy5zY2VuZSgpLFxuXHRcdFx0dGhpcy5jYW1lcmEoKSxcblx0XHRcdHRoaXMuZGVwdGhCdWZmZXIoKSxcblx0XHRcdHRoaXMuc3RlbmNpbEJ1ZmZlcigpLFxuXHRcdFx0dGhpcy5tdWx0aXNhbXBsaW5nKCksXG5cdFx0XHR0aGlzLmZyYW1lQnVmZmVyVHlwZSgpLFxuXHRcdFx0dGhpcy5lbmFibGVOb3JtYWxQYXNzKCksXG5cdFx0XHR0aGlzLnJlc29sdXRpb25TY2FsZSgpLFxuXHRcdF07XG5cblx0XHQvLyBpbml0aWFsaXplIGNvbXBvc2VyXG5cdFx0Y29uc3QgY29tcG9zZXIgPSBuZXcgRWZmZWN0Q29tcG9zZXIoZ2wsIHtcblx0XHRcdGRlcHRoQnVmZmVyLFxuXHRcdFx0c3RlbmNpbEJ1ZmZlcixcblx0XHRcdG11bHRpc2FtcGxpbmc6IG11bHRpc2FtcGxpbmcgPiAwICYmIHdlYkdMMkF2YWlsYWJsZSA/IG11bHRpc2FtcGxpbmcgOiAwLFxuXHRcdFx0ZnJhbWVCdWZmZXJUeXBlLFxuXHRcdH0pO1xuXG5cdFx0Ly8gYWRkIHJlbmRlciBwYXNzXG5cdFx0Y29tcG9zZXIuYWRkUGFzcyhuZXcgUmVuZGVyUGFzcyhzY2VuZSwgY2FtZXJhKSk7XG5cblx0XHQvLyBjcmVhdGUgbm9ybWFsIHBhc3Ncblx0XHRsZXQgZG93blNhbXBsaW5nUGFzcyA9IG51bGw7XG5cdFx0bGV0IG5vcm1hbFBhc3MgPSBudWxsO1xuXHRcdGlmIChlbmFibGVOb3JtYWxQYXNzKSB7XG5cdFx0XHRub3JtYWxQYXNzID0gbmV3IE5vcm1hbFBhc3Moc2NlbmUsIGNhbWVyYSk7XG5cdFx0XHRub3JtYWxQYXNzLmVuYWJsZWQgPSBmYWxzZTtcblx0XHRcdGNvbXBvc2VyLmFkZFBhc3Mobm9ybWFsUGFzcyk7XG5cdFx0XHRpZiAocmVzb2x1dGlvblNjYWxlICE9PSB1bmRlZmluZWQgJiYgd2ViR0wyQXZhaWxhYmxlKSB7XG5cdFx0XHRcdGRvd25TYW1wbGluZ1Bhc3MgPSBuZXcgRGVwdGhEb3duc2FtcGxpbmdQYXNzKHsgbm9ybWFsQnVmZmVyOiBub3JtYWxQYXNzLnRleHR1cmUsIHJlc29sdXRpb25TY2FsZSB9KTtcblx0XHRcdFx0ZG93blNhbXBsaW5nUGFzcy5lbmFibGVkID0gZmFsc2U7XG5cdFx0XHRcdGNvbXBvc2VyLmFkZFBhc3MoZG93blNhbXBsaW5nUGFzcyk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHsgY29tcG9zZXIsIG5vcm1hbFBhc3MsIGRvd25TYW1wbGluZ1Bhc3MgfTtcblx0fSk7XG5cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0YWZ0ZXJOZXh0UmVuZGVyKCgpID0+IHtcblx0XHRcdHRoaXMuZGlzYWJsZVRvbmVNYXBwaW5nKCk7XG5cdFx0XHR0aGlzLnNldENvbXBvc2VyU2l6ZSgpO1xuXHRcdFx0dGhpcy5yZW5kZXIoKTtcblx0XHRcdHRoaXMudXBkYXRlUGFzc2VzKCk7XG5cblx0XHRcdGluamVjdEJlZm9yZVJlbmRlcihcblx0XHRcdFx0KHsgZGVsdGEgfSkgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IFt7IGNvbXBvc2VyIH0sIHsgZW5hYmxlZCwgYXV0b0NsZWFyLCBzdGVuY2lsQnVmZmVyIH0sIGdsXSA9IFtcblx0XHRcdFx0XHRcdHRoaXMuY29tcG9zZXJEYXRhKCksXG5cdFx0XHRcdFx0XHR0aGlzLm9wdGlvbnMoKSxcblx0XHRcdFx0XHRcdHRoaXMuZ2woKSxcblx0XHRcdFx0XHRdO1xuXG5cdFx0XHRcdFx0aWYgKGVuYWJsZWQpIHtcblx0XHRcdFx0XHRcdGNvbnN0IGN1cnJlbnRBdXRvQ2xlYXIgPSBnbC5hdXRvQ2xlYXI7XG5cdFx0XHRcdFx0XHRnbC5hdXRvQ2xlYXIgPSBhdXRvQ2xlYXI7XG5cdFx0XHRcdFx0XHRpZiAoc3RlbmNpbEJ1ZmZlciAmJiAhYXV0b0NsZWFyKSBnbC5jbGVhclN0ZW5jaWwoKTtcblx0XHRcdFx0XHRcdGNvbXBvc2VyLnJlbmRlcihkZWx0YSk7XG5cdFx0XHRcdFx0XHRnbC5hdXRvQ2xlYXIgPSBjdXJyZW50QXV0b0NsZWFyO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblx0XHRcdFx0eyBpbmplY3RvcjogdGhpcy5pbmplY3RvciwgcHJpb3JpdHk6IHRoaXMub3B0aW9ucygpLmVuYWJsZWQgPyB0aGlzLm9wdGlvbnMoKS5yZW5kZXJQcmlvcml0eSA6IDAgfSxcblx0XHRcdCk7XG5cdFx0fSk7XG5cdH1cblxuXHQvLyBOT1RFOiBEaXNhYmxlIHRvbmUgbWFwcGluZyBiZWNhdXNlIHRocmVlanMgZGlzYWxsb3dzIHRvbmVtYXBwaW5nIG9uIHJlbmRlciB0YXJnZXRzXG5cdHByaXZhdGUgZGlzYWJsZVRvbmVNYXBwaW5nKCkge1xuXHRcdHRoaXMuYXV0b0VmZmVjdCgoKSA9PiB7XG5cdFx0XHRjb25zdCBnbCA9IHRoaXMuZ2woKTtcblx0XHRcdGNvbnN0IGN1cnJlbnRUb25lbWFwcGluZyA9IGdsLnRvbmVNYXBwaW5nO1xuXHRcdFx0Z2wudG9uZU1hcHBpbmcgPSBOb1RvbmVNYXBwaW5nO1xuXHRcdFx0cmV0dXJuICgpID0+IHtcblx0XHRcdFx0Z2wudG9uZU1hcHBpbmcgPSBjdXJyZW50VG9uZW1hcHBpbmc7XG5cdFx0XHR9O1xuXHRcdH0pO1xuXHR9XG5cblx0cHJpdmF0ZSBzZXRDb21wb3NlclNpemUoKSB7XG5cdFx0dGhpcy5hdXRvRWZmZWN0KCgpID0+IHtcblx0XHRcdGNvbnN0IFt7IGNvbXBvc2VyIH0sIHsgd2lkdGgsIGhlaWdodCB9XSA9IFt0aGlzLmNvbXBvc2VyRGF0YSgpLCB0aGlzLnNpemUoKV07XG5cdFx0XHRpZiAoY29tcG9zZXIpIHtcblx0XHRcdFx0Y29tcG9zZXIuc2V0U2l6ZSh3aWR0aCwgaGVpZ2h0KTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdHByaXZhdGUgcmVuZGVyKCkge1xuXHRcdHRoaXMuYXV0b0VmZmVjdChcblx0XHRcdChpbmplY3RvcikgPT4ge1xuXHRcdFx0XHRjb25zdCByZWYgPSB0aGlzLmdyb3VwQW5jaG9yKCkuY3JlYXRlRW1iZWRkZWRWaWV3KHRoaXMuY29udGVudCgpLCB7fSwgeyBpbmplY3RvciB9KTtcblx0XHRcdFx0cmVmLmRldGVjdENoYW5nZXMoKTtcblxuXHRcdFx0XHRyZXR1cm4gKCkgPT4gcmVmLmRlc3Ryb3koKTtcblx0XHRcdH0sXG5cdFx0XHR7IGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlIH0sXG5cdFx0KTtcblx0fVxuXG5cdHByaXZhdGUgdXBkYXRlUGFzc2VzKCkge1xuXHRcdHRoaXMuYXV0b0VmZmVjdCgoKSA9PiB7XG5cdFx0XHRjb25zdCBbZ3JvdXAsIHsgY29tcG9zZXIsIG5vcm1hbFBhc3MsIGRvd25TYW1wbGluZ1Bhc3MgfSwgY2FtZXJhXSA9IFtcblx0XHRcdFx0dGhpcy5ncm91cCgpLFxuXHRcdFx0XHR0aGlzLmNvbXBvc2VyRGF0YSgpLFxuXHRcdFx0XHR0aGlzLmNhbWVyYSgpLFxuXHRcdFx0XTtcblxuXHRcdFx0Y29uc3QgcGFzc2VzOiBQYXNzW10gPSBbXTtcblxuXHRcdFx0aWYgKGdyb3VwLm5hdGl2ZUVsZW1lbnQgJiYgY29tcG9zZXIpIHtcblx0XHRcdFx0Y29uc3QgbG9jYWxTdGF0ZSA9IGdldExvY2FsU3RhdGUoZ3JvdXAubmF0aXZlRWxlbWVudCk7XG5cdFx0XHRcdGlmICghbG9jYWxTdGF0ZSkgcmV0dXJuO1xuXG5cdFx0XHRcdGNvbnN0IGNoaWxkcmVuID0gbG9jYWxTdGF0ZS5ub25PYmplY3RzKCk7XG5cdFx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0XHRjb25zdCBjaGlsZCA9IGNoaWxkcmVuW2ldO1xuXHRcdFx0XHRcdGlmIChjaGlsZCBpbnN0YW5jZW9mIEVmZmVjdCkge1xuXHRcdFx0XHRcdFx0Y29uc3QgZWZmZWN0czogRWZmZWN0W10gPSBbY2hpbGRdO1xuXG5cdFx0XHRcdFx0XHRpZiAoIWlzQ29udm9sdXRpb24oY2hpbGQpKSB7XG5cdFx0XHRcdFx0XHRcdGxldCBuZXh0OiB1bmtub3duID0gbnVsbDtcblx0XHRcdFx0XHRcdFx0d2hpbGUgKChuZXh0ID0gY2hpbGRyZW5baSArIDFdKSBpbnN0YW5jZW9mIEVmZmVjdCkge1xuXHRcdFx0XHRcdFx0XHRcdGlmIChpc0NvbnZvbHV0aW9uKG5leHQpKSBicmVhaztcblx0XHRcdFx0XHRcdFx0XHRlZmZlY3RzLnB1c2gobmV4dCBhcyBFZmZlY3QpO1xuXHRcdFx0XHRcdFx0XHRcdGkrKztcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRjb25zdCBwYXNzID0gbmV3IEVmZmVjdFBhc3MoY2FtZXJhLCAuLi5lZmZlY3RzKTtcblx0XHRcdFx0XHRcdHBhc3Nlcy5wdXNoKHBhc3MpO1xuXHRcdFx0XHRcdH0gZWxzZSBpZiAoY2hpbGQgaW5zdGFuY2VvZiBQYXNzKSB7XG5cdFx0XHRcdFx0XHRwYXNzZXMucHVzaChjaGlsZCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Zm9yIChjb25zdCBwYXNzIG9mIHBhc3Nlcykge1xuXHRcdFx0XHRcdGNvbXBvc2VyLmFkZFBhc3MocGFzcyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAobm9ybWFsUGFzcykgbm9ybWFsUGFzcy5lbmFibGVkID0gdHJ1ZTtcblx0XHRcdFx0aWYgKGRvd25TYW1wbGluZ1Bhc3MpIGRvd25TYW1wbGluZ1Bhc3MuZW5hYmxlZCA9IHRydWU7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiAoKSA9PiB7XG5cdFx0XHRcdGZvciAoY29uc3QgcGFzcyBvZiBwYXNzZXMpIGNvbXBvc2VyPy5yZW1vdmVQYXNzKHBhc3MpO1xuXHRcdFx0XHRpZiAobm9ybWFsUGFzcykgbm9ybWFsUGFzcy5lbmFibGVkID0gZmFsc2U7XG5cdFx0XHRcdGlmIChkb3duU2FtcGxpbmdQYXNzKSBkb3duU2FtcGxpbmdQYXNzLmVuYWJsZWQgPSBmYWxzZTtcblx0XHRcdH07XG5cdFx0fSk7XG5cdH1cbn1cbiJdfQ==
@@ -1,78 +1,53 @@
1
- import { Directive, Input, computed, effect } from '@angular/core';
2
- import { getLocalState, injectNgtRef, injectNgtStore, is, signalStore } from 'angular-three';
3
- import { BlendFunction, Effect } from 'postprocessing';
1
+ import { CUSTOM_ELEMENTS_SCHEMA, ChangeDetectionStrategy, Component, Directive, inject, input } from '@angular/core';
2
+ import { injectNgtRef, injectNgtStore } from 'angular-three';
3
+ import { injectAutoEffect } from 'ngxtension/auto-effect';
4
+ import { createNoopInjectionToken } from 'ngxtension/create-injection-token';
4
5
  import * as i0 from "@angular/core";
5
- export class NgtpEffect {
6
- set _blendFunction(blendFunction) {
7
- this.inputs.set({ blendFunction });
8
- }
9
- set _opacity(opacity) {
10
- this.inputs.set({ opacity });
6
+ export const [injectDefaultEffectOptions, provideDefaultEffectOptions] = createNoopInjectionToken('Default Effect options');
7
+ export class NgtpEffectBlendMode {
8
+ constructor() {
9
+ this.effect = inject(NgtpEffect, { optional: true });
11
10
  }
11
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: NgtpEffectBlendMode, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
12
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.3", type: NgtpEffectBlendMode, isStandalone: true, selector: "ngtp-effect-blend-mode", ngImport: i0, template: `
13
+ @if (effect) {
14
+ <ngt-value [rawValue]="effect.blendFunction()" attach="blendMode.blendFunction" />
15
+ <ngt-value [rawValue]="effect.opacity()" attach="blendMode.opacity.value" />
16
+ }
17
+ `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
18
+ }
19
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: NgtpEffectBlendMode, decorators: [{
20
+ type: Component,
21
+ args: [{
22
+ selector: 'ngtp-effect-blend-mode',
23
+ standalone: true,
24
+ template: `
25
+ @if (effect) {
26
+ <ngt-value [rawValue]="effect.blendFunction()" attach="blendMode.blendFunction" />
27
+ <ngt-value [rawValue]="effect.opacity()" attach="blendMode.opacity.value" />
28
+ }
29
+ `,
30
+ schemas: [CUSTOM_ELEMENTS_SCHEMA],
31
+ changeDetection: ChangeDetectionStrategy.OnPush,
32
+ }]
33
+ }] });
34
+ export class NgtpEffect {
12
35
  constructor() {
13
- this.inputs = signalStore();
14
- this.effectRef = injectNgtRef();
15
- this.defaultBlendFunction = BlendFunction.NORMAL;
16
- this.nativeArgs = () => [];
17
- this.blendFunction = this.inputs.select('blendFunction');
18
- this.opacity = this.inputs.select('opacity');
36
+ this.defaultEffectOptions = injectDefaultEffectOptions({ optional: true });
37
+ this.effectRef = input(injectNgtRef());
38
+ this.blendFunction = input(this.defaultEffectOptions?.blendFunction);
39
+ this.opacity = input(this.defaultEffectOptions?.opacity);
40
+ this.autoEffect = injectAutoEffect();
19
41
  this.store = injectNgtStore();
20
42
  this.camera = this.store.select('camera');
21
43
  this.invalidate = this.store.select('invalidate');
22
- this.nativeInputs = computed(() => {
23
- const effect = this.effectRef.nativeElement;
24
- if (!effect)
25
- return this.previousInputs || null;
26
- const localState = getLocalState(effect);
27
- if (!localState)
28
- return this.previousInputs || null;
29
- const nativeProps = localState.nativeProps.state();
30
- delete nativeProps['__ngt_dummy_state__'];
31
- if ('camera' in nativeProps) {
32
- delete nativeProps['camera'];
33
- }
34
- if (!Object.keys(nativeProps).length)
35
- return this.previousInputs || null;
36
- return (this.previousInputs = nativeProps);
37
- }, { equal: (a, b) => is.equ(a, b, { objects: 'shallow' }) });
38
- this.args = computed(() => {
39
- const [nativeInputs, nativeArgs] = [this.nativeInputs(), this.nativeArgs()];
40
- if (nativeInputs) {
41
- nativeArgs.push(nativeInputs);
42
- }
43
- return nativeArgs;
44
- });
45
- this.setBlendMode();
46
- }
47
- setBlendMode() {
48
- effect(() => {
49
- const [blendFunction, opacity, effect, invalidate] = [
50
- this.blendFunction(),
51
- this.opacity(),
52
- this.effectRef.nativeElement,
53
- this.invalidate(),
54
- ];
55
- if (!effect)
56
- return;
57
- effect.blendMode.blendFunction =
58
- !blendFunction && blendFunction !== 0 ? this.defaultBlendFunction : blendFunction;
59
- if (opacity !== undefined)
60
- effect.blendMode.opacity.value = opacity;
61
- invalidate();
62
- });
63
44
  }
64
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.2", ngImport: i0, type: NgtpEffect, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
65
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.2", type: NgtpEffect, inputs: { effectRef: "effectRef", _blendFunction: ["blendFunction", "_blendFunction"], _opacity: ["opacity", "_opacity"] }, ngImport: i0 }); }
45
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: NgtpEffect, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
46
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.0.3", type: NgtpEffect, isStandalone: true, inputs: { effectRef: { classPropertyName: "effectRef", publicName: "effectRef", isSignal: true, isRequired: false, transformFunction: null }, blendFunction: { classPropertyName: "blendFunction", publicName: "blendFunction", isSignal: true, isRequired: false, transformFunction: null }, opacity: { classPropertyName: "opacity", publicName: "opacity", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0 }); }
66
47
  }
67
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.2", ngImport: i0, type: NgtpEffect, decorators: [{
68
- type: Directive
69
- }], ctorParameters: function () { return []; }, propDecorators: { effectRef: [{
70
- type: Input
71
- }], _blendFunction: [{
72
- type: Input,
73
- args: [{ alias: 'blendFunction' }]
74
- }], _opacity: [{
75
- type: Input,
76
- args: [{ alias: 'opacity' }]
77
- }] } });
78
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWZmZWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9wb3N0cHJvY2Vzc2luZy9zcmMvbGliL2VmZmVjdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25FLE9BQU8sRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLGNBQWMsRUFBRSxFQUFFLEVBQUUsV0FBVyxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUNoSCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDOztBQVF2RCxNQUFNLE9BQWdCLFVBQVU7SUFLL0IsSUFBdUMsY0FBYyxDQUFDLGFBQTRCO1FBQ2pGLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsYUFBYSxFQUFFLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRUQsSUFBaUMsUUFBUSxDQUFDLE9BQWU7UUFDeEQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUF3Q0Q7UUFsREEsV0FBTSxHQUFHLFdBQVcsRUFBbUIsQ0FBQztRQUUvQixjQUFTLEdBQUcsWUFBWSxFQUFXLENBQUM7UUFVbkMseUJBQW9CLEdBQUcsYUFBYSxDQUFDLE1BQU0sQ0FBQztRQUM1QyxlQUFVLEdBQXlCLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQztRQUV0RCxrQkFBYSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQ3BELFlBQU8sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUU5QixVQUFLLEdBQUcsY0FBYyxFQUFFLENBQUM7UUFDekIsV0FBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENB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bnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBJbnB1dCwgY29tcHV0ZWQsIGVmZmVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgZ2V0TG9jYWxTdGF0ZSwgaW5qZWN0Tmd0UmVmLCBpbmplY3ROZ3RTdG9yZSwgaXMsIHNpZ25hbFN0b3JlLCB0eXBlIE5ndEFueVJlY29yZCB9IGZyb20gJ2FuZ3VsYXItdGhyZWUnO1xuaW1wb3J0IHsgQmxlbmRGdW5jdGlvbiwgRWZmZWN0IH0gZnJvbSAncG9zdHByb2Nlc3NpbmcnO1xuXG5leHBvcnQgdHlwZSBOZ3RwRWZmZWN0U3RhdGUgPSB7XG5cdGJsZW5kRnVuY3Rpb24/OiBCbGVuZEZ1bmN0aW9uO1xuXHRvcGFjaXR5PzogbnVtYmVyO1xufTtcblxuQERpcmVjdGl2ZSgpXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgTmd0cEVmZmVjdDxURWZmZWN0IGV4dGVuZHMgRWZmZWN0PiB7XG5cdGlucHV0cyA9IHNpZ25hbFN0b3JlPE5ndHBFZmZlY3RTdGF0ZT4oKTtcblxuXHRASW5wdXQoKSBlZmZlY3RSZWYgPSBpbmplY3ROZ3RSZWY8VEVmZmVjdD4oKTtcblxuXHRASW5wdXQoeyBhbGlhczogJ2JsZW5kRnVuY3Rpb24nIH0pIHNldCBfYmxlbmRGdW5jdGlvbihibGVuZEZ1bmN0aW9uOiBCbGVuZEZ1bmN0aW9uKSB7XG5cdFx0dGhpcy5pbnB1dHMuc2V0KHsgYmxlbmRGdW5jdGlvbiB9KTtcblx0fVxuXG5cdEBJbnB1dCh7IGFsaWFzOiAnb3BhY2l0eScgfSkgc2V0IF9vcGFjaXR5KG9wYWNpdHk6IG51bWJlcikge1xuXHRcdHRoaXMuaW5wdXRzLnNldCh7IG9wYWNpdHkgfSk7XG5cdH1cblxuXHRwcm90ZWN0ZWQgZGVmYXVsdEJsZW5kRnVuY3Rpb24gPSBCbGVuZEZ1bmN0aW9uLk5PUk1BTDtcblx0cHJvdGVjdGVkIG5hdGl2ZUFyZ3M6ICgpID0+IE5ndEFueVJlY29yZFtdID0gKCkgPT4gW107XG5cblx0YmxlbmRGdW5jdGlvbiA9IHRoaXMuaW5wdXRzLnNlbGVjdCgnYmxlbmRGdW5jdGlvbicpO1xuXHRvcGFjaXR5ID0gdGhpcy5pbnB1dHMuc2VsZWN0KCdvcGFjaXR5Jyk7XG5cblx0cHJvdGVjdGVkIHN0b3JlID0gaW5qZWN0Tmd0U3RvcmUoKTtcblx0cHJvdGVjdGVkIGNhbWVyYSA9IHRoaXMuc3RvcmUuc2VsZWN0KCdjYW1lcmEnKTtcblx0cHJpdmF0ZSBpbnZhbGlkYXRlID0gdGhpcy5zdG9yZS5zZWxlY3QoJ2ludmFsaWRhdGUnKTtcblxuXHRwcml2YXRlIHByZXZpb3VzSW5wdXRzPzogTmd0QW55UmVjb3JkO1xuXG5cdHByaXZhdGUgbmF0aXZlSW5wdXRzID0gY29tcHV0ZWQoXG5cdFx0KCkgPT4ge1xuXHRcdFx0Y29uc3QgZWZmZWN0ID0gdGhpcy5lZmZlY3RSZWYubmF0aXZlRWxlbWVudDtcblx0XHRcdGlmICghZWZmZWN0KSByZXR1cm4gdGhpcy5wcmV2aW91c0lucHV0cyB8fCBudWxsO1xuXHRcdFx0Y29uc3QgbG9jYWxTdGF0ZSA9IGdldExvY2FsU3RhdGUoZWZmZWN0KTtcblx0XHRcdGlmICghbG9jYWxTdGF0ZSkgcmV0dXJuIHRoaXMucHJldmlvdXNJbnB1dHMgfHwgbnVsbDtcblx0XHRcdGNvbnN0IG5hdGl2ZVByb3BzID0gbG9jYWxTdGF0ZS5uYXRpdmVQcm9wcy5zdGF0ZSgpO1xuXHRcdFx0ZGVsZXRlIG5hdGl2ZVByb3BzWydfX25ndF9kdW1teV9zdGF0ZV9fJ107XG5cdFx0XHRpZiAoJ2NhbWVyYScgaW4gbmF0aXZlUHJvcHMpIHtcblx0XHRcdFx0ZGVsZXRlIG5hdGl2ZVByb3BzWydjYW1lcmEnXTtcblx0XHRcdH1cblx0XHRcdGlmICghT2JqZWN0LmtleXMobmF0aXZlUHJvcHMpLmxlbmd0aCkgcmV0dXJuIHRoaXMucHJldmlvdXNJbnB1dHMgfHwgbnVsbDtcblx0XHRcdHJldHVybiAodGhpcy5wcmV2aW91c0lucHV0cyA9IG5hdGl2ZVByb3BzKTtcblx0XHR9LFxuXHRcdHsgZXF1YWw6IChhLCBiKSA9PiBpcy5lcXUoYSwgYiwgeyBvYmplY3RzOiAnc2hhbGxvdycgfSkgfSxcblx0KTtcblxuXHRhcmdzID0gY29tcHV0ZWQoKCkgPT4ge1xuXHRcdGNvbnN0IFtuYXRpdmVJbnB1dHMsIG5hdGl2ZUFyZ3NdID0gW3RoaXMubmF0aXZlSW5wdXRzKCksIHRoaXMubmF0aXZlQXJncygpXTtcblx0XHRpZiAobmF0aXZlSW5wdXRzKSB7XG5cdFx0XHRuYXRpdmVBcmdzLnB1c2gobmF0aXZlSW5wdXRzKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gbmF0aXZlQXJncztcblx0fSk7XG5cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0dGhpcy5zZXRCbGVuZE1vZGUoKTtcblx0fVxuXG5cdHByaXZhdGUgc2V0QmxlbmRNb2RlKCkge1xuXHRcdGVmZmVjdCgoKSA9PiB7XG5cdFx0XHRjb25zdCBbYmxlbmRGdW5jdGlvbiwgb3BhY2l0eSwgZWZmZWN0LCBpbnZhbGlkYXRlXSA9IFtcblx0XHRcdFx0dGhpcy5ibGVuZEZ1bmN0aW9uKCksXG5cdFx0XHRcdHRoaXMub3BhY2l0eSgpLFxuXHRcdFx0XHR0aGlzLmVmZmVjdFJlZi5uYXRpdmVFbGVtZW50LFxuXHRcdFx0XHR0aGlzLmludmFsaWRhdGUoKSxcblx0XHRcdF07XG5cblx0XHRcdGlmICghZWZmZWN0KSByZXR1cm47XG5cdFx0XHRlZmZlY3QuYmxlbmRNb2RlLmJsZW5kRnVuY3Rpb24gPVxuXHRcdFx0XHQhYmxlbmRGdW5jdGlvbiAmJiBibGVuZEZ1bmN0aW9uICE9PSAwID8gdGhpcy5kZWZhdWx0QmxlbmRGdW5jdGlvbiA6IGJsZW5kRnVuY3Rpb247XG5cdFx0XHRpZiAob3BhY2l0eSAhPT0gdW5kZWZpbmVkKSBlZmZlY3QuYmxlbmRNb2RlLm9wYWNpdHkudmFsdWUgPSBvcGFjaXR5O1xuXHRcdFx0aW52YWxpZGF0ZSgpO1xuXHRcdH0pO1xuXHR9XG59XG4iXX0=
48
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: NgtpEffect, decorators: [{
49
+ type: Directive,
50
+ args: [{ standalone: true }]
51
+ }] });
52
+ export const NgtpEffectHostDirective = { directive: NgtpEffect, inputs: ['blendFunction', 'opacity', 'effectRef'] };
53
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWZmZWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9wb3N0cHJvY2Vzc2luZy9zcmMvbGliL2VmZmVjdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3JILE9BQU8sRUFBRSxZQUFZLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzFELE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLG1DQUFtQyxDQUFDOztBQUc3RSxNQUFNLENBQUMsTUFBTSxDQUFDLDBCQUEwQixFQUFFLDJCQUEyQixDQUFDLEdBQUcsd0JBQXdCLENBRzlGLHdCQUF3QixDQUFDLENBQUM7QUFjN0IsTUFBTSxPQUFPLG1CQUFtQjtJQVpoQztRQWFDLFdBQU0sR0FBRyxNQUFNLENBQUMsVUFBVSxFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7S0FDaEQ7OEdBRlksbUJBQW1CO2tHQUFuQixtQkFBbUIsa0ZBVHJCOzs7OztFQUtUOzsyRkFJVyxtQkFBbUI7a0JBWi9CLFNBQVM7bUJBQUM7b0JBQ1YsUUFBUSxFQUFFLHdCQUF3QjtvQkFDbEMsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLFFBQVEsRUFBRTs7Ozs7RUFLVDtvQkFDRCxPQUFPLEVBQUUsQ0FBQyxzQkFBc0IsQ0FBQztvQkFDakMsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07aUJBQy9DOztBQU1ELE1BQU0sT0FBTyxVQUFVO0lBRHZCO1FBRUMseUJBQW9CLEdBQUcsMEJBQTBCLENBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUV0RSxjQUFTLEdBQUcsS0FBSyxDQUFDLFlBQVksRUFBVSxDQUFDLENBQUM7UUFDMUMsa0JBQWEsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLG9CQUFvQixFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBQ2hFLFlBQU8sR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLG9CQUFvQixFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBRXBELGVBQVUsR0FBRyxnQkFBZ0IsRUFBRSxDQUFDO1FBQ2hDLFVBQUssR0FBRyxjQUFjLEVBQUUsQ0FBQztRQUN6QixXQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDckMsZUFBVSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDO0tBNkI3Qzs4R0F2Q1ksVUFBVTtrR0FBVixVQUFVOzsyRkFBVixVQUFVO2tCQUR0QixTQUFTO21CQUFDLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRTs7QUEwQy9CLE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUFHLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsQ0FBQyxlQUFlLEVBQUUsU0FBUyxFQUFFLFdBQVcsQ0FBQyxFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDVVNUT01fRUxFTUVOVFNfU0NIRU1BLCBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBEaXJlY3RpdmUsIGluamVjdCwgaW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGluamVjdE5ndFJlZiwgaW5qZWN0Tmd0U3RvcmUgfSBmcm9tICdhbmd1bGFyLXRocmVlJztcbmltcG9ydCB7IGluamVjdEF1dG9FZmZlY3QgfSBmcm9tICduZ3h0ZW5zaW9uL2F1dG8tZWZmZWN0JztcbmltcG9ydCB7IGNyZWF0ZU5vb3BJbmplY3Rpb25Ub2tlbiB9IGZyb20gJ25neHRlbnNpb24vY3JlYXRlLWluamVjdGlvbi10b2tlbic7XG5pbXBvcnQgeyBCbGVuZEZ1bmN0aW9uLCBFZmZlY3QgfSBmcm9tICdwb3N0cHJvY2Vzc2luZyc7XG5cbmV4cG9ydCBjb25zdCBbaW5qZWN0RGVmYXVsdEVmZmVjdE9wdGlvbnMsIHByb3ZpZGVEZWZhdWx0RWZmZWN0T3B0aW9uc10gPSBjcmVhdGVOb29wSW5qZWN0aW9uVG9rZW48e1xuXHRibGVuZEZ1bmN0aW9uPzogQmxlbmRGdW5jdGlvbjtcblx0b3BhY2l0eT86IG51bWJlcjtcbn0+KCdEZWZhdWx0IEVmZmVjdCBvcHRpb25zJyk7XG5cbkBDb21wb25lbnQoe1xuXHRzZWxlY3RvcjogJ25ndHAtZWZmZWN0LWJsZW5kLW1vZGUnLFxuXHRzdGFuZGFsb25lOiB0cnVlLFxuXHR0ZW1wbGF0ZTogYFxuXHRcdEBpZiAoZWZmZWN0KSB7XG5cdFx0XHQ8bmd0LXZhbHVlIFtyYXdWYWx1ZV09XCJlZmZlY3QuYmxlbmRGdW5jdGlvbigpXCIgYXR0YWNoPVwiYmxlbmRNb2RlLmJsZW5kRnVuY3Rpb25cIiAvPlxuXHRcdFx0PG5ndC12YWx1ZSBbcmF3VmFsdWVdPVwiZWZmZWN0Lm9wYWNpdHkoKVwiIGF0dGFjaD1cImJsZW5kTW9kZS5vcGFjaXR5LnZhbHVlXCIgLz5cblx0XHR9XG5cdGAsXG5cdHNjaGVtYXM6IFtDVVNUT01fRUxFTUVOVFNfU0NIRU1BXSxcblx0Y2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIE5ndHBFZmZlY3RCbGVuZE1vZGUge1xuXHRlZmZlY3QgPSBpbmplY3QoTmd0cEVmZmVjdCwgeyBvcHRpb25hbDogdHJ1ZSB9KTtcbn1cblxuQERpcmVjdGl2ZSh7IHN0YW5kYWxvbmU6IHRydWUgfSlcbmV4cG9ydCBjbGFzcyBOZ3RwRWZmZWN0IHtcblx0ZGVmYXVsdEVmZmVjdE9wdGlvbnMgPSBpbmplY3REZWZhdWx0RWZmZWN0T3B0aW9ucyh7IG9wdGlvbmFsOiB0cnVlIH0pO1xuXG5cdGVmZmVjdFJlZiA9IGlucHV0KGluamVjdE5ndFJlZjxFZmZlY3Q+KCkpO1xuXHRibGVuZEZ1bmN0aW9uID0gaW5wdXQodGhpcy5kZWZhdWx0RWZmZWN0T3B0aW9ucz8uYmxlbmRGdW5jdGlvbik7XG5cdG9wYWNpdHkgPSBpbnB1dCh0aGlzLmRlZmF1bHRFZmZlY3RPcHRpb25zPy5vcGFjaXR5KTtcblxuXHRhdXRvRWZmZWN0ID0gaW5qZWN0QXV0b0VmZmVjdCgpO1xuXHRzdG9yZSA9IGluamVjdE5ndFN0b3JlKCk7XG5cdGNhbWVyYSA9IHRoaXMuc3RvcmUuc2VsZWN0KCdjYW1lcmEnKTtcblx0aW52YWxpZGF0ZSA9IHRoaXMuc3RvcmUuc2VsZWN0KCdpbnZhbGlkYXRlJyk7XG5cblx0Ly8gY29uc3RydWN0b3IoKSB7XG5cdC8vIFx0YWZ0ZXJOZXh0UmVuZGVyKCgpID0+IHtcblx0Ly8gXHRcdHRoaXMuc2V0QmxlbmRNb2RlKCk7XG5cdC8vIFx0fSk7XG5cdC8vIH1cblx0Ly9cblx0Ly8gcHJpdmF0ZSBzZXRCbGVuZE1vZGUoKSB7XG5cdC8vIFx0dGhpcy5hdXRvRWZmZWN0KCgpID0+IHtcblx0Ly8gXHRcdGNvbnN0IFtlZmZlY3QsIGJsZW5kRnVuY3Rpb24sIG9wYWNpdHksIGludmFsaWRhdGVdID0gW1xuXHQvLyBcdFx0XHR0aGlzLmVmZmVjdFJlZigpLm5hdGl2ZUVsZW1lbnQsXG5cdC8vIFx0XHRcdHRoaXMuYmxlbmRGdW5jdGlvbigpLFxuXHQvLyBcdFx0XHR0aGlzLm9wYWNpdHkoKSxcblx0Ly8gXHRcdFx0dGhpcy5pbnZhbGlkYXRlKCksXG5cdC8vIFx0XHRdO1xuXHQvLyBcdFx0aWYgKCFlZmZlY3QpIHJldHVybjtcblx0Ly9cblx0Ly8gXHRcdGlmIChibGVuZEZ1bmN0aW9uICE9PSB1bmRlZmluZWQpIHtcblx0Ly8gXHRcdFx0ZWZmZWN0LmJsZW5kTW9kZS5ibGVuZEZ1bmN0aW9uID0gYmxlbmRGdW5jdGlvbjtcblx0Ly8gXHRcdH1cblx0Ly9cblx0Ly8gXHRcdGlmIChvcGFjaXR5ICE9PSB1bmRlZmluZWQpIHtcblx0Ly8gXHRcdFx0ZWZmZWN0LmJsZW5kTW9kZS5vcGFjaXR5LnZhbHVlID0gb3BhY2l0eTtcblx0Ly8gXHRcdH1cblx0Ly9cblx0Ly8gXHRcdGludmFsaWRhdGUoKTtcblx0Ly8gXHR9KTtcblx0Ly8gfVxufVxuXG5leHBvcnQgY29uc3QgTmd0cEVmZmVjdEhvc3REaXJlY3RpdmUgPSB7IGRpcmVjdGl2ZTogTmd0cEVmZmVjdCwgaW5wdXRzOiBbJ2JsZW5kRnVuY3Rpb24nLCAnb3BhY2l0eScsICdlZmZlY3RSZWYnXSB9O1xuIl19