distark-render 1.1.14 → 1.1.16

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 (29) hide show
  1. package/dist/cli/distark-check.js +16 -16
  2. package/dist/modules/adapters/p5Renderer.d.ts.map +1 -1
  3. package/dist/modules/adapters/p5Renderer.js +54 -12
  4. package/dist/modules/adapters/p5Renderer.js.map +1 -1
  5. package/dist/modules/adapters/skiaRenderer.d.ts.map +1 -1
  6. package/dist/modules/adapters/skiaRenderer.js +2 -1
  7. package/dist/modules/adapters/skiaRenderer.js.map +1 -1
  8. package/dist/modules/eyeSystem.d.ts.map +1 -1
  9. package/dist/modules/eyeSystem.js +104 -69
  10. package/dist/modules/eyeSystem.js.map +1 -1
  11. package/dist/modules/imageLoad.d.ts +50 -0
  12. package/dist/modules/imageLoad.d.ts.map +1 -1
  13. package/dist/modules/imageLoad.js +262 -18
  14. package/dist/modules/imageLoad.js.map +1 -1
  15. package/dist/tests/test-auto-eye-movement-e2e.d.ts +24 -0
  16. package/dist/tests/test-auto-eye-movement-e2e.d.ts.map +1 -0
  17. package/dist/tests/test-auto-eye-movement-e2e.js +514 -0
  18. package/dist/tests/test-auto-eye-movement-e2e.js.map +1 -0
  19. package/dist/tests/test-eye-system-reset.d.ts +15 -0
  20. package/dist/tests/test-eye-system-reset.d.ts.map +1 -0
  21. package/dist/tests/test-eye-system-reset.js +148 -0
  22. package/dist/tests/test-eye-system-reset.js.map +1 -0
  23. package/dist/tests/test-svg-rerasterization.js +194 -4
  24. package/dist/tests/test-svg-rerasterization.js.map +1 -1
  25. package/dist/tests/test-teen-tank-rig.d.ts +12 -0
  26. package/dist/tests/test-teen-tank-rig.d.ts.map +1 -0
  27. package/dist/tests/test-teen-tank-rig.js +122 -0
  28. package/dist/tests/test-teen-tank-rig.js.map +1 -0
  29. package/package.json +1 -1
@@ -0,0 +1,514 @@
1
+ /**
2
+ * TRUE End-to-End test: Auto eye movement with the real EyeSystem
3
+ *
4
+ * NO mocking of any kind — not Math.random, not Date.now, not EyeSystem.
5
+ * Tests use the real compiled module and real randomness.
6
+ *
7
+ * This is the ground-truth test that proves the eye system physically moves
8
+ * the iris when update(t, isPlaying=true) is called over time.
9
+ *
10
+ * Context:
11
+ * In the app, Body.update() now calls:
12
+ * const wallTime = Date.now() / 1000;
13
+ * eyeSystem.update(wallTime, /*isPlaying=*‌/true, ...);
14
+ * regardless of whether the timeline is playing or paused.
15
+ * These tests verify that this produces genuine, visible iris movement.
16
+ *
17
+ * The "teen tank" character (character_rig (7).json) is used for targeted tests
18
+ * because the user observed zero iris movement with that specific character.
19
+ * Root cause: socket-derived rangeX/rangeY both clamped to 0 when iris base
20
+ * dimensions exceeded the available socket space. Fixed by removing the iris-
21
+ * size subtraction and falling back to DEFAULT_MOVEMENT_RANGES instead.
22
+ */
23
+ import { createEyeSystem } from '../modules/eyeSystem.js';
24
+ import { assert, printSummary } from './helpers.js';
25
+ // ---------------------------------------------------------------------------
26
+ // Generic eye data — matches the rig used in the reactapp tests
27
+ // ---------------------------------------------------------------------------
28
+ function makeEyes() {
29
+ return {
30
+ leftIris: 'https://cdn.example.com/iris.png',
31
+ rightIris: 'https://cdn.example.com/iris.png',
32
+ leftIrisXCoor: 10,
33
+ leftIrisYCoor: -50,
34
+ rightIrisXCoor: -10,
35
+ rightIrisYCoor: -50,
36
+ leftIrisWidth: 20,
37
+ leftIrisHeight: 20,
38
+ rightIrisWidth: 20,
39
+ rightIrisHeight: 20,
40
+ leftIrisWidthRatio: 1,
41
+ leftIrisHeightRatio: 1,
42
+ rightIrisWidthRatio: 1,
43
+ rightIrisHeightRatio: 1,
44
+ };
45
+ }
46
+ // ---------------------------------------------------------------------------
47
+ // Teen-tank eye data extracted from character_rig (7).json
48
+ // This is the exact character the user observed to have zero iris movement.
49
+ //
50
+ // Root-cause analysis:
51
+ // socket-derived rangeX ≈ 21.5 px, rangeY ≈ 30.2 px (after 50 % margin)
52
+ // Iris base dimensions: 49 × 63 px (ratios 2.7× and 2.2×)
53
+ // Previous code subtracted maxIrisWidth/2 = 24.5 px → rangeX < 0 → clamped to 0
54
+ // maxIrisHeight/2 = 31.5 px → rangeY < 0 → clamped to 0
55
+ // Fix: when socket geometry yields an effectively-zero range, fall back to
56
+ // DEFAULT_MOVEMENT_RANGES so eyes always wander.
57
+ // ---------------------------------------------------------------------------
58
+ const TEEN_TANK_EYES = {
59
+ leftIris: 'https://orchestrator.distark.com/download/NvsBD0',
60
+ rightIris: 'https://orchestrator.distark.com/download/NvsBD0',
61
+ leftIrisXCoor: 13,
62
+ leftIrisYCoor: -171,
63
+ rightIrisXCoor: 200,
64
+ rightIrisYCoor: -192,
65
+ leftIrisWidth: 49,
66
+ leftIrisHeight: 63,
67
+ rightIrisWidth: 42,
68
+ rightIrisHeight: 59,
69
+ leftIrisWidthRatio: 2.7,
70
+ leftIrisHeightRatio: 2.2,
71
+ rightIrisWidthRatio: 3.2,
72
+ rightIrisHeightRatio: 2.2,
73
+ leftEyeImage: 'cdce0fc9e149625fcb7fd1d6fb60f3e2',
74
+ rightEyeImage: '3a2b8df67d9452ddeb546dbdbeb33387',
75
+ leftEyeLidOpen: 'e84d33d805353c1ac1944ab39898e501',
76
+ rightEyeLidOpen: '022fd7a6167689244aa3ab2fe8ac1b0d',
77
+ leftEyeLidClosed: '80a8dbb2cc2e2f40130129fa9e4c3bcc',
78
+ rightEyeLidClosed: '80a8dbb2cc2e2f40130129fa9e4c3bcc',
79
+ };
80
+ // Teen tank socket data (abbreviated — first/last 3 points of each polygon)
81
+ // The full polygons are large; the eye system only needs them to compute bounds.
82
+ // We pass the full polygon arrays here so the test reflects real-world behaviour.
83
+ const TEEN_TANK_EYE_SOCKETS = {
84
+ left: [
85
+ { x: 48.01, y: 47.16 }, { x: 47.80, y: 47.16 }, { x: 46.75, y: 47.16 },
86
+ { x: 46.54, y: 47.16 }, { x: 46.13, y: 47.16 }, { x: 45.50, y: 47.16 },
87
+ { x: 45.29, y: 47.16 }, { x: 45.08, y: 47.16 }, { x: 44.66, y: 47.16 },
88
+ { x: 44.45, y: 46.96 }, { x: 44.24, y: 46.96 }, { x: 44.03, y: 46.96 },
89
+ { x: 43.82, y: 46.96 }, { x: 43.40, y: 46.76 }, { x: 43.19, y: 46.76 },
90
+ { x: 42.78, y: 46.76 }, { x: 42.57, y: 46.76 }, { x: 42.36, y: 46.76 },
91
+ { x: 41.94, y: 46.76 }, { x: 41.52, y: 46.76 }, { x: 40.89, y: 47.16 },
92
+ { x: 40.47, y: 47.16 }, { x: 40.05, y: 47.36 }, { x: 39.84, y: 47.36 },
93
+ { x: 39.42, y: 47.56 }, { x: 39.42, y: 47.76 }, { x: 39.01, y: 47.96 },
94
+ { x: 38.80, y: 48.16 }, { x: 38.59, y: 48.16 }, { x: 38.38, y: 48.56 },
95
+ { x: 38.17, y: 48.76 }, { x: 37.96, y: 48.76 }, { x: 37.96, y: 48.96 },
96
+ { x: 37.75, y: 49.16 }, { x: 37.54, y: 49.36 }, { x: 37.33, y: 49.36 },
97
+ { x: 37.12, y: 49.76 }, { x: 36.91, y: 49.96 }, { x: 36.70, y: 50.16 },
98
+ { x: 36.49, y: 50.16 }, { x: 36.28, y: 50.36 }, { x: 36.07, y: 50.56 },
99
+ { x: 35.87, y: 50.56 }, { x: 35.87, y: 50.76 }, { x: 35.66, y: 50.76 },
100
+ { x: 35.45, y: 50.76 }, { x: 35.24, y: 51.16 }, { x: 35.03, y: 51.16 },
101
+ { x: 34.82, y: 51.56 }, { x: 34.40, y: 51.76 }, { x: 34.19, y: 51.76 },
102
+ { x: 33.98, y: 52.16 }, { x: 33.98, y: 52.36 }, { x: 33.77, y: 52.56 },
103
+ { x: 33.56, y: 52.56 }, { x: 33.56, y: 52.96 }, { x: 33.56, y: 53.16 },
104
+ { x: 33.35, y: 53.16 }, { x: 33.35, y: 53.36 }, { x: 33.35, y: 53.56 },
105
+ { x: 33.14, y: 53.96 }, { x: 32.93, y: 54.16 }, { x: 32.93, y: 54.36 },
106
+ { x: 32.93, y: 54.56 }, { x: 32.93, y: 54.76 }, { x: 32.93, y: 55.16 },
107
+ { x: 32.72, y: 55.36 }, { x: 32.72, y: 55.76 }, { x: 32.72, y: 55.96 },
108
+ { x: 32.51, y: 56.36 }, { x: 32.51, y: 56.56 }, { x: 32.51, y: 56.76 },
109
+ { x: 32.51, y: 57.16 }, { x: 32.51, y: 57.36 }, { x: 32.51, y: 57.56 },
110
+ { x: 32.51, y: 57.76 }, { x: 32.51, y: 57.96 }, { x: 32.51, y: 58.16 },
111
+ { x: 32.51, y: 58.36 }, { x: 32.51, y: 58.76 }, { x: 32.51, y: 59.16 },
112
+ { x: 32.51, y: 59.36 }, { x: 32.51, y: 59.56 }, { x: 32.51, y: 59.76 },
113
+ { x: 32.51, y: 59.96 }, { x: 32.51, y: 60.16 }, { x: 32.51, y: 60.36 },
114
+ { x: 32.51, y: 60.56 }, { x: 32.51, y: 60.76 }, { x: 32.51, y: 60.96 },
115
+ { x: 32.51, y: 61.16 }, { x: 32.51, y: 61.36 }, { x: 32.51, y: 61.56 },
116
+ { x: 32.72, y: 61.76 }, { x: 32.93, y: 62.16 }, { x: 32.93, y: 62.36 },
117
+ { x: 32.93, y: 62.56 }, { x: 33.14, y: 62.56 }, { x: 33.14, y: 62.76 },
118
+ { x: 33.14, y: 62.96 }, { x: 33.35, y: 63.16 }, { x: 33.35, y: 63.56 },
119
+ { x: 33.56, y: 63.76 }, { x: 33.98, y: 63.96 }, { x: 34.19, y: 64.36 },
120
+ { x: 34.19, y: 64.56 }, { x: 34.19, y: 64.76 }, { x: 34.61, y: 65.16 },
121
+ { x: 34.61, y: 65.36 }, { x: 34.82, y: 65.56 }, { x: 35.03, y: 65.56 },
122
+ { x: 35.03, y: 65.76 }, { x: 35.03, y: 65.96 }, { x: 35.24, y: 66.16 },
123
+ { x: 35.45, y: 66.36 }, { x: 35.45, y: 66.56 }, { x: 35.66, y: 66.76 },
124
+ { x: 35.87, y: 66.96 }, { x: 36.07, y: 67.16 }, { x: 36.28, y: 67.36 },
125
+ { x: 36.49, y: 67.56 }, { x: 36.70, y: 67.76 }, { x: 36.91, y: 67.76 },
126
+ { x: 37.12, y: 68.16 }, { x: 37.54, y: 68.36 }, { x: 37.75, y: 68.56 },
127
+ { x: 37.96, y: 68.76 }, { x: 38.17, y: 68.96 }, { x: 38.38, y: 69.16 },
128
+ { x: 38.59, y: 69.36 }, { x: 39.01, y: 69.56 }, { x: 39.42, y: 69.56 },
129
+ { x: 39.63, y: 69.76 }, { x: 39.84, y: 69.76 }, { x: 40.05, y: 69.76 },
130
+ { x: 40.47, y: 69.76 }, { x: 40.68, y: 69.96 }, { x: 41.10, y: 69.96 },
131
+ { x: 41.31, y: 69.96 }, { x: 41.31, y: 70.16 }, { x: 41.52, y: 70.16 },
132
+ { x: 41.73, y: 70.36 }, { x: 41.94, y: 70.36 }, { x: 42.15, y: 70.56 },
133
+ { x: 42.36, y: 70.56 }, { x: 42.57, y: 70.76 }, { x: 42.78, y: 70.76 },
134
+ { x: 42.98, y: 70.76 }, { x: 43.19, y: 70.76 }, { x: 43.40, y: 70.76 },
135
+ { x: 43.61, y: 70.76 }, { x: 44.03, y: 70.76 }, { x: 44.45, y: 70.76 },
136
+ { x: 44.66, y: 70.76 }, { x: 44.87, y: 70.76 }, { x: 45.08, y: 70.76 },
137
+ { x: 45.29, y: 70.76 }, { x: 45.50, y: 70.76 }, { x: 45.92, y: 70.76 },
138
+ { x: 46.13, y: 70.76 }, { x: 46.34, y: 70.76 }, { x: 46.54, y: 70.76 },
139
+ { x: 46.75, y: 70.76 }, { x: 46.96, y: 70.76 }, { x: 47.17, y: 70.76 },
140
+ { x: 47.80, y: 70.56 }, { x: 47.80, y: 70.36 }, { x: 48.01, y: 70.36 },
141
+ { x: 48.22, y: 70.36 }, { x: 48.43, y: 70.36 }, { x: 48.85, y: 70.16 },
142
+ { x: 49.06, y: 70.16 }, { x: 49.06, y: 69.96 }, { x: 49.27, y: 69.96 },
143
+ { x: 49.48, y: 69.76 }, { x: 49.69, y: 69.76 }, { x: 49.90, y: 69.56 },
144
+ { x: 50.10, y: 69.56 }, { x: 50.52, y: 69.56 }, { x: 50.73, y: 69.16 },
145
+ { x: 50.94, y: 69.16 }, { x: 51.15, y: 68.96 }, { x: 51.36, y: 68.96 },
146
+ { x: 51.78, y: 68.76 }, { x: 51.78, y: 68.56 }, { x: 51.99, y: 68.36 },
147
+ { x: 51.99, y: 68.16 }, { x: 52.20, y: 67.76 }, { x: 52.41, y: 67.76 },
148
+ { x: 52.41, y: 67.56 }, { x: 52.62, y: 67.16 }, { x: 52.83, y: 66.96 },
149
+ { x: 53.04, y: 66.96 }, { x: 53.04, y: 66.76 }, { x: 53.25, y: 66.76 },
150
+ { x: 53.46, y: 66.56 }, { x: 53.66, y: 66.36 }, { x: 53.66, y: 66.16 },
151
+ { x: 53.87, y: 65.96 }, { x: 54.08, y: 65.96 }, { x: 54.29, y: 65.96 },
152
+ { x: 54.29, y: 65.76 }, { x: 54.50, y: 65.56 }, { x: 54.50, y: 65.36 },
153
+ { x: 54.71, y: 65.36 }, { x: 54.71, y: 65.16 }, { x: 54.92, y: 64.76 },
154
+ { x: 54.92, y: 64.56 }, { x: 54.92, y: 64.36 }, { x: 55.13, y: 64.36 },
155
+ { x: 55.13, y: 64.16 }, { x: 55.13, y: 63.96 }, { x: 55.13, y: 63.76 },
156
+ { x: 55.13, y: 63.56 }, { x: 55.13, y: 63.36 }, { x: 55.34, y: 63.16 },
157
+ { x: 55.34, y: 62.96 }, { x: 55.55, y: 62.56 }, { x: 55.55, y: 62.36 },
158
+ { x: 55.76, y: 62.16 }, { x: 55.76, y: 61.96 }, { x: 55.76, y: 61.76 },
159
+ { x: 55.76, y: 61.56 }, { x: 55.76, y: 61.36 }, { x: 55.76, y: 61.16 },
160
+ { x: 55.76, y: 60.96 }, { x: 55.76, y: 60.76 }, { x: 55.76, y: 60.56 },
161
+ { x: 55.76, y: 60.36 }, { x: 55.97, y: 60.16 }, { x: 55.97, y: 59.96 },
162
+ { x: 55.97, y: 59.76 }, { x: 55.97, y: 59.56 }, { x: 55.97, y: 59.36 },
163
+ { x: 55.97, y: 59.16 }, { x: 55.97, y: 58.96 }, { x: 55.97, y: 58.76 },
164
+ { x: 55.97, y: 58.56 }, { x: 55.97, y: 58.36 }, { x: 55.97, y: 58.16 },
165
+ { x: 55.97, y: 57.96 }, { x: 55.97, y: 57.76 }, { x: 55.97, y: 57.56 },
166
+ { x: 55.97, y: 57.36 }, { x: 55.97, y: 57.16 }, { x: 55.97, y: 56.96 },
167
+ { x: 55.97, y: 56.56 }, { x: 55.97, y: 56.36 }, { x: 55.97, y: 56.16 },
168
+ { x: 55.97, y: 55.96 }, { x: 55.76, y: 55.76 }, { x: 55.76, y: 55.56 },
169
+ { x: 55.76, y: 55.36 }, { x: 55.76, y: 55.16 }, { x: 55.76, y: 54.96 },
170
+ { x: 55.55, y: 54.96 }, { x: 55.55, y: 54.76 }, { x: 55.55, y: 54.56 },
171
+ { x: 55.55, y: 54.36 }, { x: 55.55, y: 54.16 }, { x: 55.55, y: 53.96 },
172
+ { x: 55.55, y: 53.76 }, { x: 55.55, y: 53.56 }, { x: 55.55, y: 53.36 },
173
+ { x: 55.34, y: 53.36 }, { x: 55.13, y: 53.16 }, { x: 55.13, y: 52.96 },
174
+ { x: 55.13, y: 52.76 }, { x: 55.13, y: 52.56 }, { x: 55.13, y: 52.16 },
175
+ { x: 54.92, y: 52.16 }, { x: 54.92, y: 51.96 }, { x: 54.71, y: 51.96 },
176
+ { x: 54.50, y: 51.56 }, { x: 54.29, y: 51.36 }, { x: 54.29, y: 51.16 },
177
+ { x: 54.08, y: 50.96 }, { x: 53.87, y: 50.76 }, { x: 53.66, y: 50.56 },
178
+ { x: 53.66, y: 50.36 }, { x: 53.46, y: 50.16 }, { x: 53.25, y: 49.96 },
179
+ { x: 52.83, y: 49.76 }, { x: 52.62, y: 49.76 }, { x: 52.41, y: 49.56 },
180
+ { x: 52.20, y: 49.36 }, { x: 52.20, y: 49.16 }, { x: 51.99, y: 49.16 },
181
+ { x: 51.99, y: 48.96 }, { x: 51.78, y: 48.96 }, { x: 51.57, y: 48.76 },
182
+ { x: 51.15, y: 48.56 }, { x: 50.94, y: 48.56 }, { x: 50.73, y: 48.56 },
183
+ { x: 50.73, y: 48.36 }, { x: 50.52, y: 48.36 }, { x: 50.31, y: 48.36 },
184
+ { x: 50.10, y: 48.36 }, { x: 49.90, y: 48.16 }, { x: 49.90, y: 47.96 },
185
+ { x: 49.48, y: 47.96 }, { x: 49.27, y: 47.76 }, { x: 49.27, y: 47.36 },
186
+ { x: 49.06, y: 47.36 },
187
+ ],
188
+ right: [
189
+ { x: 81.31, y: 41.96 }, { x: 81.10, y: 41.96 }, { x: 81.10, y: 42.16 },
190
+ { x: 80.89, y: 42.16 }, { x: 80.47, y: 42.16 }, { x: 80.26, y: 42.16 },
191
+ { x: 80.26, y: 42.36 }, { x: 80.05, y: 42.36 }, { x: 79.84, y: 42.36 },
192
+ { x: 79.63, y: 42.36 }, { x: 79.42, y: 42.36 }, { x: 79.21, y: 42.56 },
193
+ { x: 79.21, y: 42.76 }, { x: 78.79, y: 42.76 }, { x: 78.79, y: 42.96 },
194
+ { x: 78.58, y: 43.36 }, { x: 78.37, y: 43.36 }, { x: 78.17, y: 43.56 },
195
+ { x: 77.96, y: 43.76 }, { x: 77.75, y: 43.96 }, { x: 77.75, y: 44.16 },
196
+ { x: 77.54, y: 44.16 }, { x: 77.33, y: 44.16 }, { x: 77.12, y: 44.56 },
197
+ { x: 76.91, y: 44.56 }, { x: 76.91, y: 44.76 }, { x: 76.70, y: 44.76 },
198
+ { x: 76.49, y: 44.96 }, { x: 76.28, y: 45.16 }, { x: 76.07, y: 45.36 },
199
+ { x: 75.86, y: 45.76 }, { x: 75.65, y: 45.96 }, { x: 75.65, y: 46.16 },
200
+ { x: 75.44, y: 46.16 }, { x: 75.02, y: 46.36 }, { x: 74.81, y: 46.56 },
201
+ { x: 74.61, y: 46.56 }, { x: 74.40, y: 46.96 }, { x: 74.19, y: 47.16 },
202
+ { x: 73.98, y: 47.56 }, { x: 73.77, y: 47.96 }, { x: 73.77, y: 48.16 },
203
+ { x: 73.56, y: 48.56 }, { x: 73.56, y: 48.76 }, { x: 73.56, y: 48.96 },
204
+ { x: 73.56, y: 49.16 }, { x: 73.56, y: 49.36 }, { x: 73.35, y: 49.56 },
205
+ { x: 73.35, y: 49.76 }, { x: 73.35, y: 49.96 }, { x: 73.35, y: 50.16 },
206
+ { x: 73.35, y: 50.36 }, { x: 73.35, y: 50.56 }, { x: 73.35, y: 50.76 },
207
+ { x: 73.35, y: 50.96 }, { x: 73.14, y: 51.36 }, { x: 73.14, y: 51.56 },
208
+ { x: 73.14, y: 51.76 }, { x: 73.14, y: 51.96 }, { x: 73.14, y: 52.16 },
209
+ { x: 73.14, y: 52.36 }, { x: 73.14, y: 52.56 }, { x: 73.14, y: 52.76 },
210
+ { x: 73.14, y: 52.96 }, { x: 73.14, y: 53.16 }, { x: 73.14, y: 53.36 },
211
+ { x: 73.14, y: 53.56 }, { x: 73.35, y: 53.96 }, { x: 73.35, y: 54.36 },
212
+ { x: 73.35, y: 54.76 }, { x: 73.35, y: 54.96 }, { x: 73.35, y: 55.16 },
213
+ { x: 73.35, y: 55.36 }, { x: 73.35, y: 55.56 }, { x: 73.35, y: 55.76 },
214
+ { x: 73.35, y: 55.96 }, { x: 73.35, y: 56.16 }, { x: 73.35, y: 56.36 },
215
+ { x: 73.35, y: 56.56 }, { x: 73.35, y: 56.76 }, { x: 73.35, y: 56.96 },
216
+ { x: 73.35, y: 57.16 }, { x: 73.35, y: 57.36 }, { x: 73.56, y: 57.56 },
217
+ { x: 73.56, y: 57.76 }, { x: 73.56, y: 57.96 }, { x: 73.56, y: 58.16 },
218
+ { x: 73.56, y: 58.36 }, { x: 73.77, y: 58.76 }, { x: 73.77, y: 58.96 },
219
+ { x: 73.77, y: 59.16 }, { x: 73.98, y: 59.56 }, { x: 74.19, y: 59.76 },
220
+ { x: 74.19, y: 60.16 }, { x: 74.40, y: 60.36 }, { x: 74.61, y: 60.36 },
221
+ { x: 74.61, y: 60.56 }, { x: 74.81, y: 60.76 }, { x: 74.81, y: 60.96 },
222
+ { x: 74.81, y: 61.16 }, { x: 75.02, y: 61.36 }, { x: 75.23, y: 61.76 },
223
+ { x: 75.44, y: 61.96 }, { x: 75.65, y: 62.36 }, { x: 75.65, y: 62.56 },
224
+ { x: 75.86, y: 62.76 }, { x: 76.07, y: 62.76 }, { x: 76.28, y: 63.16 },
225
+ { x: 76.49, y: 63.36 }, { x: 76.70, y: 63.36 }, { x: 76.91, y: 63.56 },
226
+ { x: 77.12, y: 63.56 }, { x: 77.33, y: 63.76 }, { x: 77.33, y: 63.96 },
227
+ { x: 77.54, y: 63.96 }, { x: 77.54, y: 64.16 }, { x: 77.96, y: 64.16 },
228
+ { x: 78.17, y: 64.36 }, { x: 78.37, y: 64.56 }, { x: 78.58, y: 64.76 },
229
+ { x: 78.79, y: 64.96 }, { x: 79.00, y: 65.16 }, { x: 79.21, y: 65.16 },
230
+ { x: 79.21, y: 65.36 }, { x: 79.63, y: 65.56 }, { x: 79.84, y: 65.56 },
231
+ { x: 80.26, y: 65.76 }, { x: 80.47, y: 65.76 }, { x: 80.68, y: 65.96 },
232
+ { x: 80.89, y: 65.96 }, { x: 81.10, y: 65.96 }, { x: 81.31, y: 65.96 },
233
+ { x: 81.52, y: 65.96 }, { x: 81.93, y: 66.16 }, { x: 82.14, y: 66.16 },
234
+ { x: 82.35, y: 66.16 }, { x: 82.56, y: 66.16 }, { x: 82.77, y: 66.16 },
235
+ { x: 82.98, y: 66.16 }, { x: 83.19, y: 66.16 }, { x: 83.40, y: 66.16 },
236
+ { x: 83.61, y: 66.16 }, { x: 84.03, y: 66.16 }, { x: 84.24, y: 66.16 },
237
+ { x: 84.66, y: 65.96 }, { x: 84.87, y: 65.76 }, { x: 85.29, y: 65.56 },
238
+ { x: 85.70, y: 65.36 }, { x: 85.91, y: 65.36 }, { x: 86.12, y: 65.16 },
239
+ { x: 86.33, y: 65.16 }, { x: 86.54, y: 65.16 }, { x: 86.75, y: 64.96 },
240
+ { x: 86.75, y: 64.76 }, { x: 86.96, y: 64.76 }, { x: 87.17, y: 64.56 },
241
+ { x: 87.17, y: 64.36 }, { x: 87.17, y: 64.16 }, { x: 87.38, y: 64.16 },
242
+ { x: 87.59, y: 63.96 }, { x: 87.59, y: 63.76 }, { x: 87.80, y: 63.56 },
243
+ { x: 88.01, y: 63.36 }, { x: 88.22, y: 63.16 }, { x: 88.43, y: 62.96 },
244
+ { x: 88.43, y: 62.76 }, { x: 88.43, y: 62.56 }, { x: 88.64, y: 62.36 },
245
+ { x: 88.64, y: 62.16 }, { x: 88.64, y: 61.76 }, { x: 88.84, y: 61.56 },
246
+ { x: 88.84, y: 61.36 }, { x: 88.84, y: 61.16 }, { x: 89.05, y: 60.96 },
247
+ { x: 89.05, y: 60.76 }, { x: 89.05, y: 60.56 }, { x: 89.05, y: 60.36 },
248
+ { x: 89.05, y: 60.16 }, { x: 89.26, y: 59.96 }, { x: 89.47, y: 59.76 },
249
+ { x: 89.47, y: 59.56 }, { x: 89.68, y: 59.16 }, { x: 89.68, y: 58.96 },
250
+ { x: 89.68, y: 58.56 }, { x: 89.68, y: 58.36 }, { x: 89.68, y: 57.96 },
251
+ { x: 89.68, y: 57.76 }, { x: 89.89, y: 57.56 }, { x: 90.10, y: 57.36 },
252
+ { x: 90.10, y: 57.16 }, { x: 90.10, y: 56.76 }, { x: 90.10, y: 56.56 },
253
+ { x: 90.10, y: 56.36 }, { x: 90.10, y: 56.16 }, { x: 90.31, y: 55.96 },
254
+ { x: 90.52, y: 55.76 }, { x: 90.52, y: 55.36 }, { x: 90.52, y: 55.16 },
255
+ { x: 90.52, y: 54.96 }, { x: 90.52, y: 54.76 }, { x: 90.52, y: 54.56 },
256
+ { x: 90.52, y: 54.36 }, { x: 90.73, y: 54.16 }, { x: 90.73, y: 53.96 },
257
+ { x: 90.73, y: 53.76 }, { x: 90.73, y: 53.36 }, { x: 90.73, y: 53.16 },
258
+ { x: 90.73, y: 52.96 }, { x: 90.73, y: 52.76 }, { x: 90.73, y: 52.56 },
259
+ { x: 90.73, y: 52.36 }, { x: 90.73, y: 52.16 }, { x: 90.73, y: 51.96 },
260
+ { x: 90.73, y: 51.76 }, { x: 90.52, y: 51.36 }, { x: 90.52, y: 50.96 },
261
+ { x: 90.31, y: 50.96 }, { x: 90.31, y: 50.76 }, { x: 90.31, y: 50.56 },
262
+ { x: 90.31, y: 50.36 }, { x: 90.31, y: 50.16 }, { x: 90.31, y: 49.96 },
263
+ { x: 90.31, y: 49.76 }, { x: 90.31, y: 49.36 }, { x: 90.31, y: 49.16 },
264
+ { x: 90.31, y: 48.96 }, { x: 90.10, y: 48.56 }, { x: 90.10, y: 48.36 },
265
+ { x: 89.89, y: 48.16 }, { x: 89.89, y: 47.96 }, { x: 89.89, y: 47.76 },
266
+ { x: 89.68, y: 47.76 }, { x: 89.47, y: 47.56 }, { x: 89.26, y: 47.56 },
267
+ { x: 89.26, y: 47.36 }, { x: 89.05, y: 47.16 }, { x: 88.84, y: 47.16 },
268
+ { x: 88.84, y: 46.96 }, { x: 88.64, y: 46.56 }, { x: 88.43, y: 46.56 },
269
+ { x: 88.43, y: 46.36 }, { x: 88.22, y: 46.16 }, { x: 88.01, y: 45.96 },
270
+ { x: 87.80, y: 45.96 }, { x: 87.59, y: 45.76 }, { x: 87.38, y: 45.76 },
271
+ { x: 87.38, y: 45.56 }, { x: 87.17, y: 45.16 }, { x: 86.96, y: 45.16 },
272
+ { x: 86.96, y: 44.96 }, { x: 86.75, y: 44.96 }, { x: 86.54, y: 44.76 },
273
+ { x: 86.33, y: 44.76 }, { x: 86.12, y: 44.56 }, { x: 86.12, y: 44.36 },
274
+ { x: 85.91, y: 44.36 }, { x: 85.70, y: 44.36 }, { x: 85.49, y: 44.16 },
275
+ { x: 85.49, y: 43.96 }, { x: 85.29, y: 43.96 }, { x: 85.08, y: 43.76 },
276
+ { x: 84.66, y: 43.56 }, { x: 84.45, y: 43.36 }, { x: 84.45, y: 43.16 },
277
+ { x: 84.24, y: 42.96 }, { x: 84.03, y: 42.96 }, { x: 83.82, y: 42.76 },
278
+ { x: 83.61, y: 42.56 }, { x: 83.40, y: 42.56 }, { x: 83.19, y: 42.56 },
279
+ { x: 82.98, y: 42.56 }, { x: 82.77, y: 42.56 }, { x: 82.56, y: 42.56 },
280
+ { x: 82.35, y: 42.56 },
281
+ ],
282
+ };
283
+ /**
284
+ * Simulate what Body.update() does when auto mode is active:
285
+ * • Pass wall-clock time (t)
286
+ * • Always pass isPlaying=true
287
+ *
288
+ * Runs N frames at 60 fps and returns every distinct iris position seen.
289
+ */
290
+ function simulateAutoFrames(sys, frames) {
291
+ const seen = new Set();
292
+ // Start from a large wall-clock value (≫ 0.1) so the startup window is never entered.
293
+ // This matches real usage where Date.now()/1000 is ~ 1.7 billion seconds.
294
+ let t = 1700000000;
295
+ for (let i = 0; i < frames; i++) {
296
+ sys.update(t, /*isPlaying=*/ true);
297
+ const p = sys.getIrisPositions();
298
+ seen.add(`${p.left.x.toFixed(4)},${p.left.y.toFixed(4)}`);
299
+ t += 1 / 60;
300
+ }
301
+ return seen;
302
+ }
303
+ // ---------------------------------------------------------------------------
304
+ // 1. Iris moves at all during auto playback
305
+ // Run 300 frames (5 s at 60 fps). With 50 % chance per 0.75 s interval
306
+ // the probability of zero moves in 5 s is ≈ (0.5)^6 < 2 %.
307
+ // We use 900 frames (15 s) → (0.5)^20 < 0.0001 % — statistically certain.
308
+ // ---------------------------------------------------------------------------
309
+ console.log('\n--- Test 1: iris moves during 15 s of auto playback ---');
310
+ {
311
+ const sys = createEyeSystem('char', makeEyes());
312
+ const basePos = sys.getIrisPositions();
313
+ const visited = simulateAutoFrames(sys, /*frames=*/ 900);
314
+ assert(visited.size > 1, `Iris visited ${visited.size} distinct position(s) across 900 frames ` +
315
+ `(expected > 1); auto movement is working`);
316
+ // At least one visited position must differ from the base coords
317
+ const baseKey = `${basePos.left.x.toFixed(4)},${basePos.left.y.toFixed(4)}`;
318
+ const movedAwayFromBase = [...visited].some(k => k !== baseKey);
319
+ assert(movedAwayFromBase, 'At least one frame had an iris position different from the base coordinates');
320
+ }
321
+ // ---------------------------------------------------------------------------
322
+ // 2. Movement fires within the first 1.5 s (at most two 0.75 s intervals)
323
+ // We run exactly 90 frames (1.5 s) and check that at least one non-base
324
+ // position was recorded. Probability of failure ≈ (0.5^2) × (8/9)^2 ≈ 7 %.
325
+ // To make this reliable we run 180 frames (3 s) → prob ≈ (0.5^4)×… < 1 %.
326
+ // ---------------------------------------------------------------------------
327
+ console.log('\n--- Test 2: movement fires within 3 s ---');
328
+ {
329
+ const sys = createEyeSystem('char', makeEyes());
330
+ const basePos = sys.getIrisPositions();
331
+ const baseKey = `${basePos.left.x.toFixed(4)},${basePos.left.y.toFixed(4)}`;
332
+ let t = 1700000000;
333
+ let movedByFrame = -1;
334
+ for (let i = 0; i < 180; i++) {
335
+ sys.update(t, true);
336
+ const p = sys.getIrisPositions();
337
+ const key = `${p.left.x.toFixed(4)},${p.left.y.toFixed(4)}`;
338
+ if (key !== baseKey && movedByFrame < 0) {
339
+ movedByFrame = i;
340
+ }
341
+ t += 1 / 60;
342
+ }
343
+ assert(movedByFrame >= 0, `Iris first moved at frame ${movedByFrame} (≈ ${(movedByFrame / 60).toFixed(2)} s) — ` +
344
+ `movement fires within 3 s`);
345
+ if (movedByFrame >= 0) {
346
+ const movedAtSeconds = movedByFrame / 60;
347
+ // Movement should fire within 2 × eyeUpdateInterval (= 2 × 0.75 = 1.5 s max)
348
+ // plus a small tolerance for the random gate (50 % chance each tick)
349
+ assert(movedAtSeconds <= 2.0, `First movement at ${movedAtSeconds.toFixed(2)} s ≤ 2.0 s (within 2 wander intervals)`);
350
+ }
351
+ }
352
+ // ---------------------------------------------------------------------------
353
+ // 3. isPlaying = false → iris NEVER moves (timer-gated)
354
+ // This verifies that the isPlaying guard in eyeSystem.update() is respected.
355
+ // Body.update() passes isPlaying=true for auto mode; this test documents
356
+ // what happens at the eyeSystem level when it receives false.
357
+ // ---------------------------------------------------------------------------
358
+ console.log('\n--- Test 3: isPlaying=false → no iris movement ---');
359
+ {
360
+ const sys = createEyeSystem('char', makeEyes());
361
+ const basePos = sys.getIrisPositions();
362
+ const baseKey = `${basePos.left.x.toFixed(4)},${basePos.left.y.toFixed(4)}`;
363
+ // Run 600 frames with isPlaying=false — the guard should prevent all movement
364
+ let t = 1700000000;
365
+ for (let i = 0; i < 600; i++) {
366
+ sys.update(t, /*isPlaying=*/ false);
367
+ t += 1 / 60;
368
+ }
369
+ const finalPos = sys.getIrisPositions();
370
+ const finalKey = `${finalPos.left.x.toFixed(4)},${finalPos.left.y.toFixed(4)}`;
371
+ assert(finalKey === baseKey, 'With isPlaying=false the iris must not move (eye movement is time-gated by isPlaying)');
372
+ }
373
+ // ---------------------------------------------------------------------------
374
+ // 4. Body.update() passes isPlaying=true → same system used in App does move
375
+ // This is the closest test to the actual in-app behaviour:
376
+ // Body.update() calls eyeSystem.update(Date.now()/1000, true, ...)
377
+ // We replicate exactly that call sequence here.
378
+ // ---------------------------------------------------------------------------
379
+ console.log('\n--- Test 4: simulating Body.update() wall-clock call sequence ---');
380
+ {
381
+ const sys = createEyeSystem('char', makeEyes());
382
+ const visited = new Set();
383
+ // Replicate what Body.update() does on every render frame:
384
+ // const wallTime = Date.now() / 1000;
385
+ // eyeSystem.update(wallTime, true, null, { x: 0, y: 0 });
386
+ const startRealMs = Date.now();
387
+ // Run for 2000 ms to get at least 2 movement opportunities (each 0.75 s).
388
+ // 600 ms was flaky: a single "center" roll kept the iris stationary.
389
+ while (Date.now() - startRealMs < 2000) {
390
+ const wallTime = Date.now() / 1000;
391
+ sys.update(wallTime, /*isPlaying=*/ true);
392
+ const p = sys.getIrisPositions();
393
+ visited.add(`${p.left.x.toFixed(4)},${p.left.y.toFixed(4)}`);
394
+ // Simulate 60 fps frame rate (~16 ms sleep equivalent via busy-wait)
395
+ const frameStart = Date.now();
396
+ while (Date.now() - frameStart < 16) { /* busy wait */ }
397
+ }
398
+ const frames = Math.round((Date.now() - startRealMs) / 16);
399
+ assert(visited.size > 1, `Body.update()-style call over ~600 ms (≈${frames} frames) ` +
400
+ `visited ${visited.size} distinct iris position(s) — movement is live`);
401
+ }
402
+ // ---------------------------------------------------------------------------
403
+ // 5. Manual → auto transition: iris leaves the manually-set position
404
+ // setManualIrisPositions positions iris at max-right, then auto updates
405
+ // drive it to a random direction.
406
+ // ---------------------------------------------------------------------------
407
+ console.log('\n--- Test 5: manual→auto transition produces iris movement ---');
408
+ {
409
+ const sys = createEyeSystem('char', makeEyes());
410
+ // Step 1: simulate manual mode (setManualIrisPositions with max-right = x:2)
411
+ // manualScaleFactor defaults to 2.5, so leftIrisX = baseX + 2*2.5 = 15
412
+ const manualWallTime = 1700000000;
413
+ sys.setManualIrisPositions({ left: { x: 2, y: -1.5 }, right: { x: 2, y: -1.5 } }, manualWallTime);
414
+ const manualPos = sys.getIrisPositions();
415
+ // Step 2: switch to auto — advance wall time by 1 s and run 120 frames
416
+ const visited = new Set();
417
+ const manualKey = `${manualPos.left.x.toFixed(4)},${manualPos.left.y.toFixed(4)}`;
418
+ visited.add(manualKey);
419
+ let t = manualWallTime + 1.0; // 1 s after the manual anchor
420
+ for (let i = 0; i < 180; i++) {
421
+ sys.update(t, /*isPlaying=*/ true);
422
+ const p = sys.getIrisPositions();
423
+ visited.add(`${p.left.x.toFixed(4)},${p.left.y.toFixed(4)}`);
424
+ t += 1 / 60;
425
+ }
426
+ assert(visited.size > 1, `After manual→auto transition, iris visited ${visited.size} distinct positions ` +
427
+ `(must be > 1 — manual position is not permanent)`);
428
+ }
429
+ // ---------------------------------------------------------------------------
430
+ // 6. Multiple distinct positions over 10 s → iris genuinely wanders
431
+ // With 9 possible directions × non-trivial probability, we expect ≥ 3
432
+ // distinct positions across 10 s.
433
+ // ---------------------------------------------------------------------------
434
+ console.log('\n--- Test 6: iris visits ≥ 3 distinct positions over 10 s ---');
435
+ {
436
+ const sys = createEyeSystem('char', makeEyes());
437
+ const visited = simulateAutoFrames(sys, /*frames=*/ 600);
438
+ // In 10 s with ~13 movement opportunities (each 0.75 s, 50 % chance),
439
+ // expected movements ≈ 7. Probability of < 3 distinct positions ≈ negligible.
440
+ assert(visited.size >= 3, `Iris visited ${visited.size} distinct position(s) across 600 frames (10 s); ` +
441
+ `expected ≥ 3 for genuine wandering`);
442
+ }
443
+ // ===========================================================================
444
+ // TEEN-TANK CHARACTER TESTS (character_rig (7).json)
445
+ // This is the specific character the user reported as having zero iris movement.
446
+ // Root cause: socket-derived movement ranges were clamped to 0 because the iris
447
+ // base dimensions (49×63 px) exceeded the available socket space (~21.5×30.2 px
448
+ // after 50% margin factor and taking the min of both sockets).
449
+ // The fix falls back to DEFAULT_MOVEMENT_RANGES when socket range < 0.5 px.
450
+ // ===========================================================================
451
+ // ---------------------------------------------------------------------------
452
+ // Helper: create the teen-tank EyeSystem with correct API
453
+ // createEyeSystem(id, eyeData, options) — the 3-arg form — correctly routes
454
+ // TEEN_TANK_EYES through to the EyeSystem constructor, unlike the 2-arg options
455
+ // form which is interpreted as rigData (expecting an 'eyes' key, not 'eyeData').
456
+ // ---------------------------------------------------------------------------
457
+ function makeTeenTankSys() {
458
+ return createEyeSystem('teen-tank', TEEN_TANK_EYES, { eyeSockets: TEEN_TANK_EYE_SOCKETS, headWidth: 489, headHeight: 512 });
459
+ }
460
+ // ---------------------------------------------------------------------------
461
+ // 7. Teen-tank iris moves during 15 s of auto playback (with eye sockets)
462
+ //
463
+ // With ratio-scaled iris dimensions correctly accounted for, the socket range
464
+ // after subtraction is negative (iris 134×138 px rendered size > socket
465
+ // ~36×53 px), so the system falls back to DEFAULT_MOVEMENT_RANGES.
466
+ // This means the iris still wanders — verified by > 1 distinct position.
467
+ // ---------------------------------------------------------------------------
468
+ console.log('\n--- Test 7 [teen tank]: iris moves during 15 s of auto playback ---');
469
+ {
470
+ const sys = makeTeenTankSys();
471
+ const basePos = sys.getIrisPositions();
472
+ const visited = simulateAutoFrames(sys, /*frames=*/ 900); // 15 s at 60 fps
473
+ assert(visited.size > 1, `[teen tank] Iris visited ${visited.size} distinct position(s) across 900 frames — ` +
474
+ `expected > 1; zero means movement ranges were clamped to 0 with no fallback`);
475
+ const baseKey = `${basePos.left.x.toFixed(4)},${basePos.left.y.toFixed(4)}`;
476
+ const movedAwayFromBase = [...visited].some(k => k !== baseKey);
477
+ assert(movedAwayFromBase, '[teen tank] At least one frame had an iris position different from the base coords');
478
+ }
479
+ // ---------------------------------------------------------------------------
480
+ // 8. Teen-tank iris moves within 3 s (first movement fires promptly)
481
+ // ---------------------------------------------------------------------------
482
+ console.log('\n--- Test 8 [teen tank]: movement fires within 3 s ---');
483
+ {
484
+ const sys = makeTeenTankSys();
485
+ const basePos = sys.getIrisPositions();
486
+ const baseKey = `${basePos.left.x.toFixed(4)},${basePos.left.y.toFixed(4)}`;
487
+ let t = 1700000000;
488
+ let movedByFrame = -1;
489
+ for (let i = 0; i < 180; i++) { // 3 s at 60 fps
490
+ sys.update(t, /*isPlaying=*/ true);
491
+ const p = sys.getIrisPositions();
492
+ if (`${p.left.x.toFixed(4)},${p.left.y.toFixed(4)}` !== baseKey && movedByFrame < 0) {
493
+ movedByFrame = i;
494
+ }
495
+ t += 1 / 60;
496
+ }
497
+ assert(movedByFrame >= 0, `[teen tank] Iris first moved at frame ${movedByFrame} (≈${(movedByFrame / 60).toFixed(2)} s) ` +
498
+ `— movement fires within 3 s`);
499
+ if (movedByFrame >= 0) {
500
+ assert(movedByFrame / 60 <= 2.0, `[teen tank] First movement at ${(movedByFrame / 60).toFixed(2)} s ≤ 2.0 s`);
501
+ }
502
+ }
503
+ // ---------------------------------------------------------------------------
504
+ // 9. Teen-tank: simulated Body.update() call sequence (15 s) produces movement
505
+ // ---------------------------------------------------------------------------
506
+ console.log('\n--- Test 9 [teen tank]: simulated Body.update() over 15 s produces movement ---');
507
+ {
508
+ const sys = makeTeenTankSys();
509
+ const visited = simulateAutoFrames(sys, /*frames=*/ 900); // 15 s at 60 fps
510
+ assert(visited.size > 1, `[teen tank] Body.update()-style simulation over 15 s visited ${visited.size} ` +
511
+ `distinct iris position(s) — must be > 1`);
512
+ }
513
+ printSummary();
514
+ //# sourceMappingURL=test-auto-eye-movement-e2e.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-auto-eye-movement-e2e.js","sourceRoot":"","sources":["../../tests/test-auto-eye-movement-e2e.ts"],"names":[],"mappings":"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,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;KACzB;IACD,KAAK,EAAE;QACH,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,K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"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * EyeSystem resetTiming guard tests
3
+ *
4
+ * Guards against the regression where update() called resetTiming() on every
5
+ * frame while currentTime < 0.1, causing randomEyeMovement() to fire at ~50%
6
+ * of frames (every ~16 ms) instead of the intended ~750 ms interval.
7
+ *
8
+ * Specifically covers:
9
+ * - First call initialises timing correctly (resetTiming fires once)
10
+ * - Subsequent early frames do NOT re-call resetTiming (no burst movement)
11
+ * - A genuine timeline loop (time jumping from > 0.1 back to ~0) DOES reset
12
+ * - detectReset (time going backward during playback) still resets correctly
13
+ */
14
+ export {};
15
+ //# sourceMappingURL=test-eye-system-reset.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-eye-system-reset.d.ts","sourceRoot":"","sources":["../../tests/test-eye-system-reset.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG"}