@step-wise/exercise-definition 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +202 -0
- package/dist/actionValidation.d.ts +4 -0
- package/dist/actionValidation.d.ts.map +1 -0
- package/dist/actionValidation.js +9 -0
- package/dist/completion.d.ts +5 -0
- package/dist/completion.d.ts.map +1 -0
- package/dist/completion.js +7 -0
- package/dist/exercise/guards.d.ts +5 -0
- package/dist/exercise/guards.d.ts.map +1 -0
- package/dist/exercise/guards.js +10 -0
- package/dist/exercise/index.d.ts +5 -0
- package/dist/exercise/index.d.ts.map +1 -0
- package/dist/exercise/index.js +4 -0
- package/dist/exercise/initialization.d.ts +5 -0
- package/dist/exercise/initialization.d.ts.map +1 -0
- package/dist/exercise/initialization.js +13 -0
- package/dist/exercise/metadata.d.ts +4 -0
- package/dist/exercise/metadata.d.ts.map +1 -0
- package/dist/exercise/metadata.js +35 -0
- package/dist/exercise/types.d.ts +45 -0
- package/dist/exercise/types.d.ts.map +1 -0
- package/dist/exercise/types.js +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +5 -0
- package/dist/modes/group/history.d.ts +12 -0
- package/dist/modes/group/history.d.ts.map +1 -0
- package/dist/modes/group/history.js +43 -0
- package/dist/modes/group/index.d.ts +2 -0
- package/dist/modes/group/index.d.ts.map +1 -0
- package/dist/modes/group/index.js +1 -0
- package/dist/modes/group/types.d.ts +22 -0
- package/dist/modes/group/types.d.ts.map +1 -0
- package/dist/modes/group/types.js +1 -0
- package/dist/modes/history.d.ts +7 -0
- package/dist/modes/history.d.ts.map +1 -0
- package/dist/modes/history.js +32 -0
- package/dist/modes/index.d.ts +6 -0
- package/dist/modes/index.d.ts.map +1 -0
- package/dist/modes/index.js +5 -0
- package/dist/modes/modeRegistry.d.ts +9 -0
- package/dist/modes/modeRegistry.d.ts.map +1 -0
- package/dist/modes/modeRegistry.js +13 -0
- package/dist/modes/solo/history.d.ts +11 -0
- package/dist/modes/solo/history.d.ts.map +1 -0
- package/dist/modes/solo/history.js +11 -0
- package/dist/modes/solo/index.d.ts +2 -0
- package/dist/modes/solo/index.d.ts.map +1 -0
- package/dist/modes/solo/index.js +1 -0
- package/dist/modes/solo/types.d.ts +14 -0
- package/dist/modes/solo/types.d.ts.map +1 -0
- package/dist/modes/solo/types.js +1 -0
- package/dist/modes/types.d.ts +15 -0
- package/dist/modes/types.d.ts.map +1 -0
- package/dist/modes/types.js +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/dist/types.d.ts +10 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +1 -0
- package/package.json +48 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2020 Step-Wise
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
# @step-wise/exercise-definition
|
|
2
|
+
|
|
3
|
+
Define educational exercises as reducers. An exercise receives its current state and an action, then returns its next state together with an optional report describing that transition. The package supplies the shared types and history utilities needed to run this model in solo and group settings.
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
## Installation
|
|
7
|
+
|
|
8
|
+
```bash
|
|
9
|
+
npm install @step-wise/exercise-definition
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
## Quick start
|
|
14
|
+
|
|
15
|
+
A solo exercise is centered on `processSoloAction`:
|
|
16
|
+
|
|
17
|
+
```ts
|
|
18
|
+
import type { Exercise } from '@step-wise/exercise-definition'
|
|
19
|
+
|
|
20
|
+
type Parameters = { target: number }
|
|
21
|
+
type Action = { type: 'answer', value: number }
|
|
22
|
+
type State = { attempts: number, done?: boolean }
|
|
23
|
+
|
|
24
|
+
const exercise: Exercise<{}, Action, State, Parameters> = {
|
|
25
|
+
metadata: {},
|
|
26
|
+
generateParameters: () => ({ target: 6 }),
|
|
27
|
+
getInitialState: () => ({ attempts: 0 }),
|
|
28
|
+
processSoloAction: ({ parameters, state, action }) => ({
|
|
29
|
+
state: {
|
|
30
|
+
attempts: state.attempts + 1,
|
|
31
|
+
done: action.value === parameters.target,
|
|
32
|
+
},
|
|
33
|
+
report: { correct: action.value === parameters.target },
|
|
34
|
+
}),
|
|
35
|
+
}
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
Reducers should return a new state without modifying the old one. They may return their result immediately or through a promise, so consumers should always await reducer calls:
|
|
39
|
+
|
|
40
|
+
```ts
|
|
41
|
+
const result = await exercise.processSoloAction!({
|
|
42
|
+
parameters: { target: 6 },
|
|
43
|
+
state: { attempts: 0 },
|
|
44
|
+
action: { type: 'answer', value: 6 },
|
|
45
|
+
})
|
|
46
|
+
// { state: { attempts: 1, done: true }, report: { correct: true } }
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
## The reducer model
|
|
51
|
+
|
|
52
|
+
At its core, an exercise is a state transition:
|
|
53
|
+
|
|
54
|
+
```text
|
|
55
|
+
current state + action -> { state: new state, report? } or a promise thereof
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
`processSoloAction` receives the fixed exercise parameters, the current state, and one action, and returns the resulting state inside an `ExerciseReducerResult`. Its input may also provide an `updateSkills` callback.
|
|
59
|
+
|
|
60
|
+
The action describes what happened, while the state stores the consequences. For example, an answer is an action; whether the exercise is complete belongs in the state. An exercise is considered completed when the state satisfies `state.done === true`.
|
|
61
|
+
|
|
62
|
+
A report contains plain data that only describes how one transition was produced. It can record grading details, generated outcomes, or other transient facts that should remain available in history without becoming part of the accumulated state. Omitting `report` means that the transition produced no report; this is distinct from deliberately returning an empty report object.
|
|
63
|
+
|
|
64
|
+
`ExerciseReport` is the generic report type. `SoloExerciseReport` and `GroupExerciseReport` provide mode-specific defaults that specialized exercise packages may refine. For example, input exercises can represent a group report as a map containing a separate grading report for each user.
|
|
65
|
+
|
|
66
|
+
The reducer model is not restricted to solo use. An exercise can supply reducers for other execution modes. The built-in group mode uses `processGroupActions`, which processes a collection of user-attributed actions together. The mode registry and mode-specific history types keep this structure extendable if more modes are introduced later. `ensureExerciseMode(value)` validates external mode values, while `throwUnsupportedExerciseMode(mode)` provides the failure branch for exhaustive mode switches.
|
|
67
|
+
|
|
68
|
+
An exercise must support at least one mode at runtime. It may support solo mode, group mode, or both.
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
## Parameters, state, and actions
|
|
72
|
+
|
|
73
|
+
The package distinguishes three kinds of exercise data:
|
|
74
|
+
|
|
75
|
+
- **Parameters** describe the generated problem and remain fixed for an exercise instance.
|
|
76
|
+
- **State** records the accumulated result of processing those actions.
|
|
77
|
+
- **Actions** describe events to process, such as entering an answer or giving up.
|
|
78
|
+
|
|
79
|
+
All three use plain data objects so they can be stored and transferred safely. Every action must have a string `type` property.
|
|
80
|
+
|
|
81
|
+
`generateParameters(example)` creates the parameters for a new exercise. The boolean `example` flag allows a generator to distinguish (possibly simplified) examples from regular exercises. Parameter generators may return their parameters immediately or through a promise, so consumers should always await them.
|
|
82
|
+
|
|
83
|
+
`getInitialState(parameters)` derives the state before the first action. It may return that state immediately or through a promise, so consumers should always await it.
|
|
84
|
+
|
|
85
|
+
When defining a higher-level exercise specification, both factories may be omitted, in which case they default to `() => ({})`.
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
## Solo mode
|
|
89
|
+
|
|
90
|
+
A solo reducer receives one action:
|
|
91
|
+
|
|
92
|
+
```ts
|
|
93
|
+
processSoloAction: ({
|
|
94
|
+
parameters,
|
|
95
|
+
state,
|
|
96
|
+
action,
|
|
97
|
+
updateSkills,
|
|
98
|
+
}) => Awaitable<{ state: newState, report? }>
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
Each solo history event stores the processed action and resulting state:
|
|
102
|
+
|
|
103
|
+
```ts
|
|
104
|
+
{
|
|
105
|
+
action: { type: 'answer', value: 6 },
|
|
106
|
+
state: { attempts: 1, done: true },
|
|
107
|
+
report: { correct: true },
|
|
108
|
+
}
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
|
|
112
|
+
## Group mode
|
|
113
|
+
|
|
114
|
+
A group reducer receives all actions collected for the current event:
|
|
115
|
+
|
|
116
|
+
```ts
|
|
117
|
+
processGroupActions: ({
|
|
118
|
+
parameters,
|
|
119
|
+
state,
|
|
120
|
+
actions,
|
|
121
|
+
updateSkills,
|
|
122
|
+
}) => Awaitable<{ state: newState, report? }>
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
Every item in `actions` is a `UserExerciseAction` containing the user attribution and raw exercise action:
|
|
126
|
+
|
|
127
|
+
```ts
|
|
128
|
+
{
|
|
129
|
+
userId: 'user-1',
|
|
130
|
+
action: { type: 'answer', value: 6 },
|
|
131
|
+
}
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
A pending group history event contains only `actions`. Once the event has been processed, its resulting `state` is added:
|
|
135
|
+
|
|
136
|
+
```ts
|
|
137
|
+
// Pending
|
|
138
|
+
{ actions: [{ userId: 'user-1', action: { type: 'answer', value: 6 } }] }
|
|
139
|
+
|
|
140
|
+
// Resolved
|
|
141
|
+
{
|
|
142
|
+
actions: [{ userId: 'user-1', action: { type: 'answer', value: 6 } }],
|
|
143
|
+
state: { attempts: 1, done: true },
|
|
144
|
+
report: { roll: 4 },
|
|
145
|
+
}
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
|
|
149
|
+
## Exercise instances and history
|
|
150
|
+
|
|
151
|
+
A `BaseExerciseInstance` combines the generated data with its execution context:
|
|
152
|
+
|
|
153
|
+
```ts
|
|
154
|
+
{
|
|
155
|
+
mode: 'solo' | 'group',
|
|
156
|
+
parameters,
|
|
157
|
+
initialState,
|
|
158
|
+
history,
|
|
159
|
+
}
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
The `mode` determines the history shape. `initialState` remains stored separately and is used whenever the history does not yet contain a suitable resolved state. Use `SoloExerciseInstance` or `GroupExerciseInstance` when code is specific to one execution mode; `BaseExerciseInstance` represents their union.
|
|
163
|
+
|
|
164
|
+
The following helpers work with either mode:
|
|
165
|
+
|
|
166
|
+
- `getCurrentState(instance)` returns the latest resolved state or the initial state.
|
|
167
|
+
- `getPreviousState(instance)` returns the state before the current resolved state, falling back to the initial state.
|
|
168
|
+
- `getLastAction(instance, userId?)` returns the latest action, including one in a pending group event.
|
|
169
|
+
- `getLastResolvedAction(instance, userId?)` ignores pending group events.
|
|
170
|
+
- `isExerciseDone(instance)` checks whether the current state has `done: true`.
|
|
171
|
+
- `isStateDone(state)` performs the same check directly on a state.
|
|
172
|
+
|
|
173
|
+
Group action lookups require a `userId` and throw when it is missing. Solo action lookups ignore it.
|
|
174
|
+
|
|
175
|
+
|
|
176
|
+
## Metadata and skill updates
|
|
177
|
+
|
|
178
|
+
`ExerciseMetadata` can describe how an exercise relates to the surrounding learning system:
|
|
179
|
+
|
|
180
|
+
- `skill` identifies one directly practiced skill.
|
|
181
|
+
- `setup` describes a more involved skill setup.
|
|
182
|
+
- `weight` is a non-negative relative selection weight and defaults to `1`.
|
|
183
|
+
- `repeatAfter` is the non-negative number of intervening exercises preferred before repetition and defaults to `1`.
|
|
184
|
+
- `setupInferenceOrder` sets a non-negative integer inference order when a custom resolution is needed.
|
|
185
|
+
|
|
186
|
+
Use `resolveExerciseMetadata(metadata)` to validate these standard properties, preserve any specialized properties, and apply the `weight` and `repeatAfter` defaults. The returned `ResolvedExerciseMetadata` type exposes both defaulted properties as required numbers. `isExerciseMetadata(value)` provides the corresponding non-throwing check.
|
|
187
|
+
|
|
188
|
+
Reducers may call the optional `updateSkills(setup, correct, userId?)` function supplied in their input. A group reducer can provide the relevant user ID for each update.
|
|
189
|
+
|
|
190
|
+
See [@step-wise/skill-setup](https://www.npmjs.com/package/@step-wise/skill-setup) for constructing combined skill requirements.
|
|
191
|
+
|
|
192
|
+
|
|
193
|
+
## Exercise validation
|
|
194
|
+
|
|
195
|
+
`Exercise` represents the complete form used at runtime: its parameter and initial-state factories are present and it supplies at least one reducer. `isExercise(value)` validates this structure and verifies that a reducer exists for at least one registered mode.
|
|
196
|
+
|
|
197
|
+
These guards also validate the standard exercise metadata. Individual exercise types remain responsible for validating their additional metadata, parameters, actions, and state.
|
|
198
|
+
|
|
199
|
+
|
|
200
|
+
## Specialized exercise types
|
|
201
|
+
|
|
202
|
+
This package deliberately defines only the general reducer model. More opinionated packages can build author-friendly exercise types on top of it. For exercises that interpret and grade learner input, see [@step-wise/input-exercises](https://www.npmjs.com/package/@step-wise/input-exercises).
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"actionValidation.d.ts","sourceRoot":"","sources":["../src/actionValidation.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAEhD,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,cAAc,CAExE;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,OAAO,GAAG,cAAc,CAGnE"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { isPlainDataObject } from '@step-wise/js-utils';
|
|
2
|
+
export function isExerciseAction(value) {
|
|
3
|
+
return isPlainDataObject(value) && typeof value.type === 'string';
|
|
4
|
+
}
|
|
5
|
+
export function ensureExerciseAction(value) {
|
|
6
|
+
if (!isExerciseAction(value))
|
|
7
|
+
throw new TypeError('Invalid exercise action: expected a plain data object with a string "type" property.');
|
|
8
|
+
return value;
|
|
9
|
+
}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { type ExerciseAction, type ExerciseState } from './types.ts';
|
|
2
|
+
import { type BaseExerciseInstance } from './modes/index.ts';
|
|
3
|
+
export declare function isStateDone(state: ExerciseState): boolean;
|
|
4
|
+
export declare function isExerciseDone<TAction extends ExerciseAction = ExerciseAction, TState extends ExerciseState = ExerciseState>(instance: BaseExerciseInstance<TAction, TState>): boolean;
|
|
5
|
+
//# sourceMappingURL=completion.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"completion.d.ts","sourceRoot":"","sources":["../src/completion.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAAE,KAAK,aAAa,EAAE,MAAM,YAAY,CAAA;AACpE,OAAO,EAAE,KAAK,oBAAoB,EAAmB,MAAM,kBAAkB,CAAA;AAE7E,wBAAgB,WAAW,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAEzD;AAED,wBAAgB,cAAc,CAAC,OAAO,SAAS,cAAc,GAAG,cAAc,EAAE,MAAM,SAAS,aAAa,GAAG,aAAa,EAAE,QAAQ,EAAE,oBAAoB,CAAC,OAAO,EAAE,MAAM,CAAC,GAAG,OAAO,CAEtL"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { type ExerciseMode } from '../modes/index.ts';
|
|
2
|
+
import type { AnyExercise, Exercise } from './types.ts';
|
|
3
|
+
export declare function isExercise<T>(obj: T): obj is T & AnyExercise;
|
|
4
|
+
export declare function exerciseSupportsMode(exercise: Exercise, mode: ExerciseMode): boolean;
|
|
5
|
+
//# sourceMappingURL=guards.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"guards.d.ts","sourceRoot":"","sources":["../../src/exercise/guards.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,YAAY,EAAgE,MAAM,mBAAmB,CAAA;AAEnH,OAAO,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAGvD,wBAAgB,UAAU,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,WAAW,CAE5D;AAED,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,GAAG,OAAO,CAGpF"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { isPlainObject } from '@step-wise/js-utils';
|
|
2
|
+
import { ensureExerciseMode, exerciseModes, exerciseReducerNameByMode } from '../modes/index.js';
|
|
3
|
+
import { isExerciseMetadata } from './metadata.js';
|
|
4
|
+
export function isExercise(obj) {
|
|
5
|
+
return isPlainObject(obj) && isExerciseMetadata(obj.metadata) && typeof obj.generateParameters === 'function' && typeof obj.getInitialState === 'function' && exerciseModes.some(mode => typeof obj[exerciseReducerNameByMode[mode]] === 'function');
|
|
6
|
+
}
|
|
7
|
+
export function exerciseSupportsMode(exercise, mode) {
|
|
8
|
+
const reducerName = exerciseReducerNameByMode[ensureExerciseMode(mode)];
|
|
9
|
+
return typeof exercise[reducerName] === 'function';
|
|
10
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/exercise/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAA;AAC1B,cAAc,eAAe,CAAA;AAC7B,cAAc,aAAa,CAAA;AAC3B,cAAc,qBAAqB,CAAA"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { type Awaitable } from '@step-wise/js-utils';
|
|
2
|
+
import type { ExerciseParameters, ExerciseState } from '../types.ts';
|
|
3
|
+
export declare function resolveExerciseParameters<TParameters extends Record<string, unknown> = ExerciseParameters>(generateParameters: ((example: boolean) => Awaitable<TParameters>) | undefined, example: boolean): Promise<TParameters>;
|
|
4
|
+
export declare function resolveInitialState<TParameters extends Record<string, unknown> = ExerciseParameters, TState extends ExerciseState = ExerciseState>(getInitialState: ((parameters: TParameters) => Awaitable<TState>) | undefined, parameters: TParameters): Promise<TState>;
|
|
5
|
+
//# sourceMappingURL=initialization.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"initialization.d.ts","sourceRoot":"","sources":["../../src/exercise/initialization.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAiB,MAAM,qBAAqB,CAAA;AAEnE,OAAO,KAAK,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAEpE,wBAAsB,yBAAyB,CAAC,WAAW,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,kBAAkB,EAAE,kBAAkB,EAAE,CAAC,CAAC,OAAO,EAAE,OAAO,KAAK,SAAS,CAAC,WAAW,CAAC,CAAC,GAAG,SAAS,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,WAAW,CAAC,CAIxO;AAED,wBAAsB,mBAAmB,CAAC,WAAW,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,kBAAkB,EAAE,MAAM,SAAS,aAAa,GAAG,aAAa,EAAE,eAAe,EAAE,CAAC,CAAC,UAAU,EAAE,WAAW,KAAK,SAAS,CAAC,MAAM,CAAC,CAAC,GAAG,SAAS,EAAE,UAAU,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CAIjR"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { isPlainObject } from '@step-wise/js-utils';
|
|
2
|
+
export async function resolveExerciseParameters(generateParameters, example) {
|
|
3
|
+
const parameters = generateParameters === undefined ? {} : await generateParameters(example);
|
|
4
|
+
if (!isPlainObject(parameters))
|
|
5
|
+
throw new TypeError(`Invalid exercise parameters: expected generateParameters to return a plain object but received something of type "${typeof parameters}".`);
|
|
6
|
+
return parameters;
|
|
7
|
+
}
|
|
8
|
+
export async function resolveInitialState(getInitialState, parameters) {
|
|
9
|
+
const initialState = getInitialState === undefined ? {} : await getInitialState(parameters);
|
|
10
|
+
if (!isPlainObject(initialState))
|
|
11
|
+
throw new TypeError(`Invalid initial exercise state: expected getInitialState to return a plain object but received something of type "${typeof initialState}".`);
|
|
12
|
+
return initialState;
|
|
13
|
+
}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { ExerciseMetadata, ResolvedExerciseMetadata } from './types.ts';
|
|
2
|
+
export declare function isExerciseMetadata(value: unknown): value is ExerciseMetadata;
|
|
3
|
+
export declare function resolveExerciseMetadata<TMetadata extends ExerciseMetadata>(metadata: TMetadata): ResolvedExerciseMetadata<TMetadata>;
|
|
4
|
+
//# sourceMappingURL=metadata.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metadata.d.ts","sourceRoot":"","sources":["../../src/exercise/metadata.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,gBAAgB,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAA;AAE5E,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,gBAAgB,CAS5E;AAED,wBAAgB,uBAAuB,CAAC,SAAS,SAAS,gBAAgB,EAAE,QAAQ,EAAE,SAAS,GAAG,wBAAwB,CAAC,SAAS,CAAC,CAiBpI"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { SkillSetup } from '@step-wise/skill-setup';
|
|
2
|
+
import { ensureInteger, ensureNumber, isPlainObject } from '@step-wise/js-utils';
|
|
3
|
+
export function isExerciseMetadata(value) {
|
|
4
|
+
if (!isPlainObject(value))
|
|
5
|
+
return false;
|
|
6
|
+
try {
|
|
7
|
+
resolveExerciseMetadata(value);
|
|
8
|
+
return true;
|
|
9
|
+
}
|
|
10
|
+
catch (error) {
|
|
11
|
+
if (error instanceof TypeError || error instanceof RangeError)
|
|
12
|
+
return false;
|
|
13
|
+
throw error;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
export function resolveExerciseMetadata(metadata) {
|
|
17
|
+
if (!isPlainObject(metadata))
|
|
18
|
+
throw new TypeError(`Invalid exercise metadata: expected a plain object but received something of type "${typeof metadata}".`);
|
|
19
|
+
// Validate the skill and setup properties if they are provided.
|
|
20
|
+
if (metadata.skill !== undefined) {
|
|
21
|
+
if (typeof metadata.skill !== 'string')
|
|
22
|
+
throw new TypeError(`Invalid exercise skill: expected a string but received something of type "${typeof metadata.skill}".`);
|
|
23
|
+
if (metadata.skill.length === 0 || metadata.skill.trim() !== metadata.skill)
|
|
24
|
+
throw new RangeError('Invalid exercise skill: expected a non-empty skill ID without leading or trailing whitespace.');
|
|
25
|
+
}
|
|
26
|
+
if (metadata.setup !== undefined && !(metadata.setup instanceof SkillSetup))
|
|
27
|
+
throw new TypeError('Invalid exercise setup: expected a SkillSetup instance.');
|
|
28
|
+
// Validate the weight and repeatAfter properties if they are provided.
|
|
29
|
+
return {
|
|
30
|
+
...metadata,
|
|
31
|
+
weight: ensureNumber(metadata.weight ?? 1, { nonNegative: true }),
|
|
32
|
+
repeatAfter: ensureInteger(metadata.repeatAfter ?? 1, { nonNegative: true, safe: true }),
|
|
33
|
+
...(metadata.setupInferenceOrder === undefined ? {} : { setupInferenceOrder: ensureInteger(metadata.setupInferenceOrder, { nonNegative: true, safe: true }) }),
|
|
34
|
+
};
|
|
35
|
+
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import type { Awaitable } from '@step-wise/js-utils';
|
|
2
|
+
import type { SkillId, SkillSetup, SkillSetupLike } from '@step-wise/skill-setup';
|
|
3
|
+
import type { ExerciseAction, ExerciseState, ExerciseParameters, ExerciseReport, SoloExerciseReport, GroupExerciseReport } from '../types.ts';
|
|
4
|
+
import type { UserExerciseAction } from '../modes/index.ts';
|
|
5
|
+
export type ExerciseMetadata = {
|
|
6
|
+
skill?: SkillId;
|
|
7
|
+
setup?: SkillSetup;
|
|
8
|
+
setupInferenceOrder?: number;
|
|
9
|
+
weight?: number;
|
|
10
|
+
repeatAfter?: number;
|
|
11
|
+
};
|
|
12
|
+
export type ResolvedExerciseMetadata<TMetadata extends ExerciseMetadata = ExerciseMetadata> = TMetadata & {
|
|
13
|
+
weight: number;
|
|
14
|
+
repeatAfter: number;
|
|
15
|
+
};
|
|
16
|
+
export type GenerateExerciseParameters<TParameters extends ExerciseParameters = ExerciseParameters> = (example: boolean) => Awaitable<TParameters>;
|
|
17
|
+
export type GetInitialState<TParameters extends ExerciseParameters = ExerciseParameters, TState extends ExerciseState = ExerciseState> = (parameters: TParameters) => Awaitable<TState>;
|
|
18
|
+
export type UpdateSkills = (setup: SkillSetupLike, correct: boolean, userId?: string) => void;
|
|
19
|
+
type ExerciseReducerRequiredInput<TState extends ExerciseState, TParameters extends ExerciseParameters = ExerciseParameters> = {
|
|
20
|
+
parameters: TParameters;
|
|
21
|
+
state: TState;
|
|
22
|
+
updateSkills?: UpdateSkills;
|
|
23
|
+
};
|
|
24
|
+
export type SoloExerciseReducerInput<TAction extends ExerciseAction, TState extends ExerciseState, TParameters extends ExerciseParameters = ExerciseParameters> = ExerciseReducerRequiredInput<TState, TParameters> & {
|
|
25
|
+
action: TAction;
|
|
26
|
+
};
|
|
27
|
+
export type GroupExerciseReducerInput<TAction extends ExerciseAction, TState extends ExerciseState, TParameters extends ExerciseParameters = ExerciseParameters> = ExerciseReducerRequiredInput<TState, TParameters> & {
|
|
28
|
+
actions: readonly UserExerciseAction<TAction>[];
|
|
29
|
+
};
|
|
30
|
+
export type ExerciseReducerResult<TState extends ExerciseState, TReport extends ExerciseReport = ExerciseReport> = {
|
|
31
|
+
state: TState;
|
|
32
|
+
report?: TReport;
|
|
33
|
+
};
|
|
34
|
+
export type SoloExerciseReducer<TAction extends ExerciseAction, TState extends ExerciseState, TParameters extends ExerciseParameters = ExerciseParameters, TReport extends SoloExerciseReport = SoloExerciseReport> = (input: SoloExerciseReducerInput<TAction, TState, TParameters>) => Awaitable<ExerciseReducerResult<TState, TReport>>;
|
|
35
|
+
export type GroupExerciseReducer<TAction extends ExerciseAction, TState extends ExerciseState, TParameters extends ExerciseParameters = ExerciseParameters, TReport extends GroupExerciseReport = GroupExerciseReport> = (input: GroupExerciseReducerInput<TAction, TState, TParameters>) => Awaitable<ExerciseReducerResult<TState, TReport>>;
|
|
36
|
+
export type Exercise<TMetadata extends ExerciseMetadata = ExerciseMetadata, TAction extends ExerciseAction = ExerciseAction, TState extends ExerciseState = ExerciseState, TParameters extends ExerciseParameters = ExerciseParameters, TSoloReport extends SoloExerciseReport = SoloExerciseReport, TGroupReport extends GroupExerciseReport = GroupExerciseReport> = {
|
|
37
|
+
metadata: TMetadata;
|
|
38
|
+
generateParameters: GenerateExerciseParameters<TParameters>;
|
|
39
|
+
getInitialState: GetInitialState<TParameters, TState>;
|
|
40
|
+
processSoloAction?: SoloExerciseReducer<TAction, TState, TParameters, TSoloReport>;
|
|
41
|
+
processGroupActions?: GroupExerciseReducer<TAction, TState, TParameters, TGroupReport>;
|
|
42
|
+
};
|
|
43
|
+
export type AnyExercise = Exercise<any, any, any, any, any, any>;
|
|
44
|
+
export {};
|
|
45
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/exercise/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAA;AACpD,OAAO,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAEjF,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,kBAAkB,EAAE,cAAc,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAC7I,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AAM3D,MAAM,MAAM,gBAAgB,GAAG;IAC9B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;CACrB,CAAA;AAED,MAAM,MAAM,wBAAwB,CAAC,SAAS,SAAS,gBAAgB,GAAG,gBAAgB,IAAI,SAAS,GAAG;IACzG,MAAM,EAAE,MAAM,CAAA;IACd,WAAW,EAAE,MAAM,CAAA;CACnB,CAAA;AAMD,MAAM,MAAM,0BAA0B,CAAC,WAAW,SAAS,kBAAkB,GAAG,kBAAkB,IAAI,CAAC,OAAO,EAAE,OAAO,KAAK,SAAS,CAAC,WAAW,CAAC,CAAA;AAClJ,MAAM,MAAM,eAAe,CAAC,WAAW,SAAS,kBAAkB,GAAG,kBAAkB,EAAE,MAAM,SAAS,aAAa,GAAG,aAAa,IAAI,CAAC,UAAU,EAAE,WAAW,KAAK,SAAS,CAAC,MAAM,CAAC,CAAA;AAMvL,MAAM,MAAM,YAAY,GAAG,CAAC,KAAK,EAAE,cAAc,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,MAAM,KAAK,IAAI,CAAA;AAE7F,KAAK,4BAA4B,CAAC,MAAM,SAAS,aAAa,EAAE,WAAW,SAAS,kBAAkB,GAAG,kBAAkB,IAAI;IAC9H,UAAU,EAAE,WAAW,CAAA;IACvB,KAAK,EAAE,MAAM,CAAA;IACb,YAAY,CAAC,EAAE,YAAY,CAAA;CAC3B,CAAA;AAED,MAAM,MAAM,wBAAwB,CAAC,OAAO,SAAS,cAAc,EAAE,MAAM,SAAS,aAAa,EAAE,WAAW,SAAS,kBAAkB,GAAG,kBAAkB,IAAI,4BAA4B,CAAC,MAAM,EAAE,WAAW,CAAC,GAAG;IACrN,MAAM,EAAE,OAAO,CAAA;CACf,CAAA;AAED,MAAM,MAAM,yBAAyB,CAAC,OAAO,SAAS,cAAc,EAAE,MAAM,SAAS,aAAa,EAAE,WAAW,SAAS,kBAAkB,GAAG,kBAAkB,IAAI,4BAA4B,CAAC,MAAM,EAAE,WAAW,CAAC,GAAG;IACtN,OAAO,EAAE,SAAS,kBAAkB,CAAC,OAAO,CAAC,EAAE,CAAA;CAC/C,CAAA;AAED,MAAM,MAAM,qBAAqB,CAAC,MAAM,SAAS,aAAa,EAAE,OAAO,SAAS,cAAc,GAAG,cAAc,IAAI;IAClH,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,CAAC,EAAE,OAAO,CAAA;CAChB,CAAA;AAED,MAAM,MAAM,mBAAmB,CAAC,OAAO,SAAS,cAAc,EAAE,MAAM,SAAS,aAAa,EAAE,WAAW,SAAS,kBAAkB,GAAG,kBAAkB,EAAE,OAAO,SAAS,kBAAkB,GAAG,kBAAkB,IAAI,CAAC,KAAK,EAAE,wBAAwB,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,CAAC,KAAK,SAAS,CAAC,qBAAqB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;AAE1U,MAAM,MAAM,oBAAoB,CAAC,OAAO,SAAS,cAAc,EAAE,MAAM,SAAS,aAAa,EAAE,WAAW,SAAS,kBAAkB,GAAG,kBAAkB,EAAE,OAAO,SAAS,mBAAmB,GAAG,mBAAmB,IAAI,CAAC,KAAK,EAAE,yBAAyB,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,CAAC,KAAK,SAAS,CAAC,qBAAqB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;AAM9U,MAAM,MAAM,QAAQ,CAAC,SAAS,SAAS,gBAAgB,GAAG,gBAAgB,EAAE,OAAO,SAAS,cAAc,GAAG,cAAc,EAAE,MAAM,SAAS,aAAa,GAAG,aAAa,EAAE,WAAW,SAAS,kBAAkB,GAAG,kBAAkB,EAAE,WAAW,SAAS,kBAAkB,GAAG,kBAAkB,EAAE,YAAY,SAAS,mBAAmB,GAAG,mBAAmB,IAAI;IACtW,QAAQ,EAAE,SAAS,CAAA;IACnB,kBAAkB,EAAE,0BAA0B,CAAC,WAAW,CAAC,CAAA;IAC3D,eAAe,EAAE,eAAe,CAAC,WAAW,EAAE,MAAM,CAAC,CAAA;IACrD,iBAAiB,CAAC,EAAE,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,WAAW,CAAC,CAAA;IAClF,mBAAmB,CAAC,EAAE,oBAAoB,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,YAAY,CAAC,CAAA;CACtF,CAAA;AAED,MAAM,MAAM,WAAW,GAAG,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAA;AAC1B,cAAc,uBAAuB,CAAA;AACrC,cAAc,kBAAkB,CAAA;AAChC,cAAc,qBAAqB,CAAA;AACnC,cAAc,iBAAiB,CAAA"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { ExerciseAction, ExerciseState } from '../../types.ts';
|
|
2
|
+
import type { GroupExerciseHistory } from './types.ts';
|
|
3
|
+
declare function getLastAction<TAction extends ExerciseAction, TState extends ExerciseState>(history: GroupExerciseHistory<TAction, TState>, userId?: string): TAction | undefined;
|
|
4
|
+
declare function getLastResolvedAction<TAction extends ExerciseAction, TState extends ExerciseState>(history: GroupExerciseHistory<TAction, TState>, userId?: string): TAction | undefined;
|
|
5
|
+
declare function getLastState<TAction extends ExerciseAction, TState extends ExerciseState>(history: GroupExerciseHistory<TAction, TState>, initialState: TState, offset?: number): TState;
|
|
6
|
+
export declare const groupHistorySupport: {
|
|
7
|
+
getLastAction: typeof getLastAction;
|
|
8
|
+
getLastResolvedAction: typeof getLastResolvedAction;
|
|
9
|
+
getLastState: typeof getLastState;
|
|
10
|
+
};
|
|
11
|
+
export {};
|
|
12
|
+
//# sourceMappingURL=history.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"history.d.ts","sourceRoot":"","sources":["../../../src/modes/group/history.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAEnE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAA;AAOtD,iBAAS,aAAa,CAAC,OAAO,SAAS,cAAc,EAAE,MAAM,SAAS,aAAa,EAAE,OAAO,EAAE,oBAAoB,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,CAOzK;AAED,iBAAS,qBAAqB,CAAC,OAAO,SAAS,cAAc,EAAE,MAAM,SAAS,aAAa,EAAE,OAAO,EAAE,oBAAoB,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,CASjL;AAED,iBAAS,YAAY,CAAC,OAAO,SAAS,cAAc,EAAE,MAAM,SAAS,aAAa,EAAE,OAAO,EAAE,oBAAoB,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,SAAI,GAAG,MAAM,CAS5K;AAED,eAAO,MAAM,mBAAmB;;;;CAI/B,CAAA"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
function ensureUserId(userId) {
|
|
2
|
+
if (userId === undefined)
|
|
3
|
+
throw new TypeError(`A userId is required when retrieving an action from a group exercise history.`);
|
|
4
|
+
return userId;
|
|
5
|
+
}
|
|
6
|
+
function getLastAction(history, userId) {
|
|
7
|
+
const ensuredUserId = ensureUserId(userId);
|
|
8
|
+
for (let index = history.length - 1; index >= 0; index--) {
|
|
9
|
+
const action = history[index].actions.find(userAction => userAction.userId === ensuredUserId)?.action;
|
|
10
|
+
if (action)
|
|
11
|
+
return action;
|
|
12
|
+
}
|
|
13
|
+
return undefined;
|
|
14
|
+
}
|
|
15
|
+
function getLastResolvedAction(history, userId) {
|
|
16
|
+
const ensuredUserId = ensureUserId(userId);
|
|
17
|
+
for (let index = history.length - 1; index >= 0; index--) {
|
|
18
|
+
const event = history[index];
|
|
19
|
+
if (!('state' in event))
|
|
20
|
+
continue;
|
|
21
|
+
const action = event.actions.find(userAction => userAction.userId === ensuredUserId)?.action;
|
|
22
|
+
if (action)
|
|
23
|
+
return action;
|
|
24
|
+
}
|
|
25
|
+
return undefined;
|
|
26
|
+
}
|
|
27
|
+
function getLastState(history, initialState, offset = 0) {
|
|
28
|
+
let remaining = offset;
|
|
29
|
+
for (let index = history.length - 1; index >= 0; index--) {
|
|
30
|
+
const event = history[index];
|
|
31
|
+
if (!('state' in event))
|
|
32
|
+
continue;
|
|
33
|
+
if (remaining === 0)
|
|
34
|
+
return event.state;
|
|
35
|
+
remaining--;
|
|
36
|
+
}
|
|
37
|
+
return initialState;
|
|
38
|
+
}
|
|
39
|
+
export const groupHistorySupport = {
|
|
40
|
+
getLastAction,
|
|
41
|
+
getLastResolvedAction,
|
|
42
|
+
getLastState,
|
|
43
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/modes/group/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './types.js';
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { ExerciseParameters, ExerciseAction, ExerciseState, GroupExerciseReport } from '../../types.ts';
|
|
2
|
+
export type UserExerciseAction<TAction extends ExerciseAction = ExerciseAction> = {
|
|
3
|
+
userId: string;
|
|
4
|
+
action: TAction;
|
|
5
|
+
};
|
|
6
|
+
export type ResolvedGroupExerciseHistoryEvent<TAction extends ExerciseAction = ExerciseAction, TState extends ExerciseState = ExerciseState, TReport extends GroupExerciseReport = GroupExerciseReport> = {
|
|
7
|
+
actions: readonly UserExerciseAction<TAction>[];
|
|
8
|
+
state: TState;
|
|
9
|
+
report?: TReport;
|
|
10
|
+
};
|
|
11
|
+
export type PendingGroupExerciseHistoryEvent<TAction extends ExerciseAction = ExerciseAction> = {
|
|
12
|
+
actions: readonly UserExerciseAction<TAction>[];
|
|
13
|
+
};
|
|
14
|
+
export type GroupExerciseHistoryEvent<TAction extends ExerciseAction = ExerciseAction, TState extends ExerciseState = ExerciseState, TReport extends GroupExerciseReport = GroupExerciseReport> = ResolvedGroupExerciseHistoryEvent<TAction, TState, TReport> | PendingGroupExerciseHistoryEvent<TAction>;
|
|
15
|
+
export type GroupExerciseHistory<TAction extends ExerciseAction = ExerciseAction, TState extends ExerciseState = ExerciseState, TReport extends GroupExerciseReport = GroupExerciseReport> = readonly GroupExerciseHistoryEvent<TAction, TState, TReport>[];
|
|
16
|
+
export type GroupExerciseInstance<TAction extends ExerciseAction = ExerciseAction, TState extends ExerciseState = ExerciseState, TParameters extends ExerciseParameters = ExerciseParameters, TReport extends GroupExerciseReport = GroupExerciseReport> = {
|
|
17
|
+
mode: 'group';
|
|
18
|
+
parameters: TParameters;
|
|
19
|
+
initialState: TState;
|
|
20
|
+
history: GroupExerciseHistory<TAction, TState, TReport>;
|
|
21
|
+
};
|
|
22
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/modes/group/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,cAAc,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAA;AAE5G,MAAM,MAAM,kBAAkB,CAAC,OAAO,SAAS,cAAc,GAAG,cAAc,IAAI;IACjF,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,OAAO,CAAA;CACf,CAAA;AAED,MAAM,MAAM,iCAAiC,CAAC,OAAO,SAAS,cAAc,GAAG,cAAc,EAAE,MAAM,SAAS,aAAa,GAAG,aAAa,EAAE,OAAO,SAAS,mBAAmB,GAAG,mBAAmB,IAAI;IACzM,OAAO,EAAE,SAAS,kBAAkB,CAAC,OAAO,CAAC,EAAE,CAAA;IAC/C,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,CAAC,EAAE,OAAO,CAAA;CAChB,CAAA;AAED,MAAM,MAAM,gCAAgC,CAAC,OAAO,SAAS,cAAc,GAAG,cAAc,IAAI;IAC/F,OAAO,EAAE,SAAS,kBAAkB,CAAC,OAAO,CAAC,EAAE,CAAA;CAC/C,CAAA;AAED,MAAM,MAAM,yBAAyB,CAAC,OAAO,SAAS,cAAc,GAAG,cAAc,EAAE,MAAM,SAAS,aAAa,GAAG,aAAa,EAAE,OAAO,SAAS,mBAAmB,GAAG,mBAAmB,IAAI,iCAAiC,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,GAAG,gCAAgC,CAAC,OAAO,CAAC,CAAA;AACzS,MAAM,MAAM,oBAAoB,CAAC,OAAO,SAAS,cAAc,GAAG,cAAc,EAAE,MAAM,SAAS,aAAa,GAAG,aAAa,EAAE,OAAO,SAAS,mBAAmB,GAAG,mBAAmB,IAAI,SAAS,yBAAyB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,CAAA;AAE3P,MAAM,MAAM,qBAAqB,CAAC,OAAO,SAAS,cAAc,GAAG,cAAc,EAAE,MAAM,SAAS,aAAa,GAAG,aAAa,EAAE,WAAW,SAAS,kBAAkB,GAAG,kBAAkB,EAAE,OAAO,SAAS,mBAAmB,GAAG,mBAAmB,IAAI;IAC1P,IAAI,EAAE,OAAO,CAAA;IACb,UAAU,EAAE,WAAW,CAAA;IACvB,YAAY,EAAE,MAAM,CAAA;IACpB,OAAO,EAAE,oBAAoB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,CAAA;CACvD,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { type ExerciseAction, type ExerciseState } from '../types.ts';
|
|
2
|
+
import { type BaseExerciseInstance } from './types.ts';
|
|
3
|
+
export declare function getLastAction<TAction extends ExerciseAction = ExerciseAction, TState extends ExerciseState = ExerciseState>(instance: BaseExerciseInstance<TAction, TState>, userId?: string): TAction | undefined;
|
|
4
|
+
export declare function getLastResolvedAction<TAction extends ExerciseAction = ExerciseAction, TState extends ExerciseState = ExerciseState>(instance: BaseExerciseInstance<TAction, TState>, userId?: string): TAction | undefined;
|
|
5
|
+
export declare function getCurrentState<TAction extends ExerciseAction = ExerciseAction, TState extends ExerciseState = ExerciseState>(instance: BaseExerciseInstance<TAction, TState>): TState;
|
|
6
|
+
export declare function getPreviousState<TAction extends ExerciseAction = ExerciseAction, TState extends ExerciseState = ExerciseState>(instance: BaseExerciseInstance<TAction, TState>): TState;
|
|
7
|
+
//# sourceMappingURL=history.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"history.d.ts","sourceRoot":"","sources":["../../src/modes/history.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAAE,KAAK,aAAa,EAAE,MAAM,aAAa,CAAA;AAIrE,OAAO,EAAE,KAAK,oBAAoB,EAAE,MAAM,YAAY,CAAA;AAMtD,wBAAgB,aAAa,CAAC,OAAO,SAAS,cAAc,GAAG,cAAc,EAAE,MAAM,SAAS,aAAa,GAAG,aAAa,EAAE,QAAQ,EAAE,oBAAoB,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,CAKlN;AAED,wBAAgB,qBAAqB,CAAC,OAAO,SAAS,cAAc,GAAG,cAAc,EAAE,MAAM,SAAS,aAAa,GAAG,aAAa,EAAE,QAAQ,EAAE,oBAAoB,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,CAK1N;AAMD,wBAAgB,eAAe,CAAC,OAAO,SAAS,cAAc,GAAG,cAAc,EAAE,MAAM,SAAS,aAAa,GAAG,aAAa,EAAE,QAAQ,EAAE,oBAAoB,CAAC,OAAO,EAAE,MAAM,CAAC,GAAG,MAAM,CAKtL;AAED,wBAAgB,gBAAgB,CAAC,OAAO,SAAS,cAAc,GAAG,cAAc,EAAE,MAAM,SAAS,aAAa,GAAG,aAAa,EAAE,QAAQ,EAAE,oBAAoB,CAAC,OAAO,EAAE,MAAM,CAAC,GAAG,MAAM,CAKvL"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { soloHistorySupport } from './solo/history.js';
|
|
2
|
+
import { groupHistorySupport } from './group/history.js';
|
|
3
|
+
/*
|
|
4
|
+
* Actions.
|
|
5
|
+
*/
|
|
6
|
+
export function getLastAction(instance, userId) {
|
|
7
|
+
switch (instance.mode) {
|
|
8
|
+
case 'solo': return soloHistorySupport.getLastAction(instance.history);
|
|
9
|
+
case 'group': return groupHistorySupport.getLastAction(instance.history, userId);
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
export function getLastResolvedAction(instance, userId) {
|
|
13
|
+
switch (instance.mode) {
|
|
14
|
+
case 'solo': return soloHistorySupport.getLastResolvedAction(instance.history);
|
|
15
|
+
case 'group': return groupHistorySupport.getLastResolvedAction(instance.history, userId);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
/*
|
|
19
|
+
* States.
|
|
20
|
+
*/
|
|
21
|
+
export function getCurrentState(instance) {
|
|
22
|
+
switch (instance.mode) {
|
|
23
|
+
case 'solo': return soloHistorySupport.getLastState(instance.history, instance.initialState);
|
|
24
|
+
case 'group': return groupHistorySupport.getLastState(instance.history, instance.initialState);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
export function getPreviousState(instance) {
|
|
28
|
+
switch (instance.mode) {
|
|
29
|
+
case 'solo': return soloHistorySupport.getLastState(instance.history, instance.initialState, 1);
|
|
30
|
+
case 'group': return groupHistorySupport.getLastState(instance.history, instance.initialState, 1);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/modes/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAA;AACjC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,kBAAkB,CAAA;AAChC,cAAc,YAAY,CAAA;AAC1B,cAAc,cAAc,CAAA"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export declare const exerciseModes: readonly ['solo', 'group'];
|
|
2
|
+
export type ExerciseMode = typeof exerciseModes[number];
|
|
3
|
+
export declare const exerciseReducerNameByMode: {
|
|
4
|
+
readonly solo: 'processSoloAction';
|
|
5
|
+
readonly group: 'processGroupActions';
|
|
6
|
+
};
|
|
7
|
+
export declare function ensureExerciseMode(value: unknown): ExerciseMode;
|
|
8
|
+
export declare function throwUnsupportedExerciseMode(mode: never): never;
|
|
9
|
+
//# sourceMappingURL=modeRegistry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"modeRegistry.d.ts","sourceRoot":"","sources":["../../src/modes/modeRegistry.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,aAAa,YAAI,MAAM,EAAE,OAAO,CAAU,CAAA;AACvD,MAAM,MAAM,YAAY,GAAG,OAAO,aAAa,CAAC,MAAM,CAAC,CAAA;AAEvD,eAAO,MAAM,yBAAyB;mBAC/B,mBAAmB;oBAClB,qBAAqB;CACoB,CAAA;AAEjD,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,YAAY,CAG/D;AAED,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,KAAK,GAAG,KAAK,CAE/D"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export const exerciseModes = ['solo', 'group'];
|
|
2
|
+
export const exerciseReducerNameByMode = {
|
|
3
|
+
solo: 'processSoloAction',
|
|
4
|
+
group: 'processGroupActions',
|
|
5
|
+
};
|
|
6
|
+
export function ensureExerciseMode(value) {
|
|
7
|
+
if (!exerciseModes.includes(value))
|
|
8
|
+
throw new TypeError(`Invalid exercise mode: expected one of ${exerciseModes.map(mode => `"${mode}"`).join(', ')} but received "${String(value)}".`);
|
|
9
|
+
return value;
|
|
10
|
+
}
|
|
11
|
+
export function throwUnsupportedExerciseMode(mode) {
|
|
12
|
+
throw new Error(`Unsupported exercise mode: "${mode}".`);
|
|
13
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { ExerciseAction, ExerciseState } from '../../types.ts';
|
|
2
|
+
import type { SoloExerciseHistory } from './types.ts';
|
|
3
|
+
declare function getLastAction<TAction extends ExerciseAction, TState extends ExerciseState>(history: SoloExerciseHistory<TAction, TState>): TAction | undefined;
|
|
4
|
+
declare function getLastState<TAction extends ExerciseAction, TState extends ExerciseState>(history: SoloExerciseHistory<TAction, TState>, initialState: TState, offset?: number): TState;
|
|
5
|
+
export declare const soloHistorySupport: {
|
|
6
|
+
getLastAction: typeof getLastAction;
|
|
7
|
+
getLastResolvedAction: typeof getLastAction;
|
|
8
|
+
getLastState: typeof getLastState;
|
|
9
|
+
};
|
|
10
|
+
export {};
|
|
11
|
+
//# sourceMappingURL=history.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"history.d.ts","sourceRoot":"","sources":["../../../src/modes/solo/history.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAEnE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAA;AAErD,iBAAS,aAAa,CAAC,OAAO,SAAS,cAAc,EAAE,MAAM,SAAS,aAAa,EAAE,OAAO,EAAE,mBAAmB,CAAC,OAAO,EAAE,MAAM,CAAC,GAAG,OAAO,GAAG,SAAS,CAEvJ;AAED,iBAAS,YAAY,CAAC,OAAO,SAAS,cAAc,EAAE,MAAM,SAAS,aAAa,EAAE,OAAO,EAAE,mBAAmB,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,SAAI,GAAG,MAAM,CAE3K;AAED,eAAO,MAAM,kBAAkB;;;;CAI9B,CAAA"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
function getLastAction(history) {
|
|
2
|
+
return history.at(-1)?.action;
|
|
3
|
+
}
|
|
4
|
+
function getLastState(history, initialState, offset = 0) {
|
|
5
|
+
return history.at(-(offset + 1))?.state ?? initialState;
|
|
6
|
+
}
|
|
7
|
+
export const soloHistorySupport = {
|
|
8
|
+
getLastAction,
|
|
9
|
+
getLastResolvedAction: getLastAction,
|
|
10
|
+
getLastState,
|
|
11
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/modes/solo/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './types.js';
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { ExerciseParameters, ExerciseAction, ExerciseState, SoloExerciseReport } from '../../types.ts';
|
|
2
|
+
export type SoloExerciseHistoryEvent<TAction extends ExerciseAction = ExerciseAction, TState extends ExerciseState = ExerciseState, TReport extends SoloExerciseReport = SoloExerciseReport> = {
|
|
3
|
+
action: TAction;
|
|
4
|
+
state: TState;
|
|
5
|
+
report?: TReport;
|
|
6
|
+
};
|
|
7
|
+
export type SoloExerciseHistory<TAction extends ExerciseAction = ExerciseAction, TState extends ExerciseState = ExerciseState, TReport extends SoloExerciseReport = SoloExerciseReport> = readonly SoloExerciseHistoryEvent<TAction, TState, TReport>[];
|
|
8
|
+
export type SoloExerciseInstance<TAction extends ExerciseAction = ExerciseAction, TState extends ExerciseState = ExerciseState, TParameters extends ExerciseParameters = ExerciseParameters, TReport extends SoloExerciseReport = SoloExerciseReport> = {
|
|
9
|
+
mode: 'solo';
|
|
10
|
+
parameters: TParameters;
|
|
11
|
+
initialState: TState;
|
|
12
|
+
history: SoloExerciseHistory<TAction, TState, TReport>;
|
|
13
|
+
};
|
|
14
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/modes/solo/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,cAAc,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAA;AAE3G,MAAM,MAAM,wBAAwB,CAAC,OAAO,SAAS,cAAc,GAAG,cAAc,EAAE,MAAM,SAAS,aAAa,GAAG,aAAa,EAAE,OAAO,SAAS,kBAAkB,GAAG,kBAAkB,IAAI;IAC9L,MAAM,EAAE,OAAO,CAAA;IACf,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,CAAC,EAAE,OAAO,CAAA;CAChB,CAAA;AAED,MAAM,MAAM,mBAAmB,CAAC,OAAO,SAAS,cAAc,GAAG,cAAc,EAAE,MAAM,SAAS,aAAa,GAAG,aAAa,EAAE,OAAO,SAAS,kBAAkB,GAAG,kBAAkB,IAAI,SAAS,wBAAwB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,CAAA;AAEvP,MAAM,MAAM,oBAAoB,CAAC,OAAO,SAAS,cAAc,GAAG,cAAc,EAAE,MAAM,SAAS,aAAa,GAAG,aAAa,EAAE,WAAW,SAAS,kBAAkB,GAAG,kBAAkB,EAAE,OAAO,SAAS,kBAAkB,GAAG,kBAAkB,IAAI;IACvP,IAAI,EAAE,MAAM,CAAA;IACZ,UAAU,EAAE,WAAW,CAAA;IACvB,YAAY,EAAE,MAAM,CAAA;IACpB,OAAO,EAAE,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,CAAA;CACtD,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { ExerciseParameters, ExerciseAction, ExerciseState, ExerciseReport } from '../types.ts';
|
|
2
|
+
import type { ExerciseMode } from './modeRegistry.ts';
|
|
3
|
+
import type { SoloExerciseHistory, SoloExerciseInstance } from './solo/index.ts';
|
|
4
|
+
import type { GroupExerciseHistory, GroupExerciseInstance } from './group/index.ts';
|
|
5
|
+
export type ExerciseHistoryByMode<TAction extends ExerciseAction = ExerciseAction, TState extends ExerciseState = ExerciseState, TReport extends ExerciseReport = ExerciseReport> = {
|
|
6
|
+
solo: SoloExerciseHistory<TAction, TState, TReport>;
|
|
7
|
+
group: GroupExerciseHistory<TAction, TState, TReport>;
|
|
8
|
+
};
|
|
9
|
+
export type ExerciseHistory<TAction extends ExerciseAction = ExerciseAction, TState extends ExerciseState = ExerciseState, TReport extends ExerciseReport = ExerciseReport> = ExerciseHistoryByMode<TAction, TState, TReport>[ExerciseMode];
|
|
10
|
+
export type BaseExerciseInstanceByMode<TAction extends ExerciseAction = ExerciseAction, TState extends ExerciseState = ExerciseState, TParameters extends ExerciseParameters = ExerciseParameters, TReport extends ExerciseReport = ExerciseReport> = {
|
|
11
|
+
solo: SoloExerciseInstance<TAction, TState, TParameters, TReport>;
|
|
12
|
+
group: GroupExerciseInstance<TAction, TState, TParameters, TReport>;
|
|
13
|
+
};
|
|
14
|
+
export type BaseExerciseInstance<TAction extends ExerciseAction = ExerciseAction, TState extends ExerciseState = ExerciseState, TParameters extends ExerciseParameters = ExerciseParameters, TReport extends ExerciseReport = ExerciseReport> = BaseExerciseInstanceByMode<TAction, TState, TParameters, TReport>[ExerciseMode];
|
|
15
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/modes/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,cAAc,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAEpG,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AACrD,OAAO,KAAK,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAA;AAChF,OAAO,KAAK,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAA;AAEnF,MAAM,MAAM,qBAAqB,CAAC,OAAO,SAAS,cAAc,GAAG,cAAc,EAAE,MAAM,SAAS,aAAa,GAAG,aAAa,EAAE,OAAO,SAAS,cAAc,GAAG,cAAc,IAAI;IACnL,IAAI,EAAE,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,CAAA;IACnD,KAAK,EAAE,oBAAoB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,CAAA;CACrD,CAAA;AAED,MAAM,MAAM,eAAe,CAAC,OAAO,SAAS,cAAc,GAAG,cAAc,EAAE,MAAM,SAAS,aAAa,GAAG,aAAa,EAAE,OAAO,SAAS,cAAc,GAAG,cAAc,IAAI,qBAAqB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,YAAY,CAAC,CAAA;AAE3O,MAAM,MAAM,0BAA0B,CAAC,OAAO,SAAS,cAAc,GAAG,cAAc,EAAE,MAAM,SAAS,aAAa,GAAG,aAAa,EAAE,WAAW,SAAS,kBAAkB,GAAG,kBAAkB,EAAE,OAAO,SAAS,cAAc,GAAG,cAAc,IAAI;IACrP,IAAI,EAAE,oBAAoB,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,CAAC,CAAA;IACjE,KAAK,EAAE,qBAAqB,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,CAAC,CAAA;CACnE,CAAA;AAED,MAAM,MAAM,oBAAoB,CAAC,OAAO,SAAS,cAAc,GAAG,cAAc,EAAE,MAAM,SAAS,aAAa,GAAG,aAAa,EAAE,WAAW,SAAS,kBAAkB,GAAG,kBAAkB,EAAE,OAAO,SAAS,cAAc,GAAG,cAAc,IAAI,0BAA0B,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC,YAAY,CAAC,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":"7.0.2","root":[[114,126],[149,154]],"packageJsons":["../../../node_modules/@types/node/package.json","../../../node_modules/punycode/package.json","../../../node_modules/undici-types/package.json","../package.json","../../js-utils/package.json","../../polynomials/package.json","../../skill-setup/package.json"],"missingPackageJsons":["../../../node_modules/@types/assert/package.json","../../../node_modules/@types/assert/strict/package.json","../../../node_modules/@types/async_hooks/package.json","../../../node_modules/@types/buffer/package.json","../../../node_modules/@types/child_process/package.json","../../../node_modules/@types/cluster/package.json","../../../node_modules/@types/console/package.json","../../../node_modules/@types/constants/package.json","../../../node_modules/@types/crypto/package.json","../../../node_modules/@types/dgram/package.json","../../../node_modules/@types/diagnostics_channel/package.json","../../../node_modules/@types/dns/package.json","../../../node_modules/@types/dns/promises/package.json","../../../node_modules/@types/domain/package.json","../../../node_modules/@types/events/package.json","../../../node_modules/@types/fs/package.json","../../../node_modules/@types/fs/promises/package.json","../../../node_modules/@types/http/package.json","../../../node_modules/@types/http2/package.json","../../../node_modules/@types/https/package.json","../../../node_modules/@types/inspector/package.json","../../../node_modules/@types/inspector/promises/package.json","../../../node_modules/@types/module/package.json","../../../node_modules/@types/net/package.json","../../../node_modules/@types/node/assert/package.json","../../../node_modules/@types/node/compatibility/package.json","../../../node_modules/@types/node/dns/package.json","../../../node_modules/@types/node/fs/package.json","../../../node_modules/@types/node/readline/package.json","../../../node_modules/@types/node/stream/package.json","../../../node_modules/@types/node/timers/package.json","../../../node_modules/@types/node/web-globals/package.json","../../../node_modules/@types/os/package.json","../../../node_modules/@types/path/package.json","../../../node_modules/@types/path/posix/package.json","../../../node_modules/@types/path/win32/package.json","../../../node_modules/@types/perf_hooks/package.json","../../../node_modules/@types/process/package.json","../../../node_modules/@types/punycode/package.json","../../../node_modules/@types/querystring/package.json","../../../node_modules/@types/readline/package.json","../../../node_modules/@types/readline/promises/package.json","../../../node_modules/@types/repl/package.json","../../../node_modules/@types/stream/consumers/package.json","../../../node_modules/@types/stream/package.json","../../../node_modules/@types/stream/promises/package.json","../../../node_modules/@types/stream/web/package.json","../../../node_modules/@types/string_decoder/package.json","../../../node_modules/@types/timers/package.json","../../../node_modules/@types/timers/promises/package.json","../../../node_modules/@types/tls/package.json","../../../node_modules/@types/trace_events/package.json","../../../node_modules/@types/tty/package.json","../../../node_modules/@types/url/package.json","../../../node_modules/@types/util/package.json","../../../node_modules/@types/util/types/package.json","../../../node_modules/@types/v8/package.json","../../../node_modules/@types/vm/package.json","../../../node_modules/@types/wasi/package.json","../../../node_modules/@types/worker_threads/package.json","../../../node_modules/@types/zlib/package.json","../../../node_modules/assert/package.json","../../../node_modules/assert/strict/package.json","../../../node_modules/async_hooks/package.json","../../../node_modules/buffer/package.json","../../../node_modules/child_process/package.json","../../../node_modules/cluster/package.json","../../../node_modules/console/package.json","../../../node_modules/constants/package.json","../../../node_modules/crypto/package.json","../../../node_modules/dgram/package.json","../../../node_modules/diagnostics_channel/package.json","../../../node_modules/dns/package.json","../../../node_modules/dns/promises/package.json","../../../node_modules/domain/package.json","../../../node_modules/events/package.json","../../../node_modules/fs/package.json","../../../node_modules/fs/promises/package.json","../../../node_modules/http/package.json","../../../node_modules/http2/package.json","../../../node_modules/https/package.json","../../../node_modules/inspector/package.json","../../../node_modules/inspector/promises/package.json","../../../node_modules/module/package.json","../../../node_modules/net/package.json","../../../node_modules/os/package.json","../../../node_modules/path/package.json","../../../node_modules/path/posix/package.json","../../../node_modules/path/win32/package.json","../../../node_modules/perf_hooks/package.json","../../../node_modules/process/package.json","../../../node_modules/querystring/package.json","../../../node_modules/readline/package.json","../../../node_modules/readline/promises/package.json","../../../node_modules/repl/package.json","../../../node_modules/stream/consumers/package.json","../../../node_modules/stream/package.json","../../../node_modules/stream/promises/package.json","../../../node_modules/stream/web/package.json","../../../node_modules/string_decoder/package.json","../../../node_modules/timers/package.json","../../../node_modules/timers/promises/package.json","../../../node_modules/tls/package.json","../../../node_modules/trace_events/package.json","../../../node_modules/tty/package.json","../../../node_modules/url/package.json","../../../node_modules/util/package.json","../../../node_modules/util/types/package.json","../../../node_modules/v8/package.json","../../../node_modules/vm/package.json","../../../node_modules/wasi/package.json","../../../node_modules/worker_threads/package.json","../../../node_modules/zlib/package.json"],"fileNames":["lib.es5.d.ts","lib.es2015.d.ts","lib.es2016.d.ts","lib.es2017.d.ts","lib.es2018.d.ts","lib.es2019.d.ts","lib.es2020.d.ts","lib.es2021.d.ts","lib.es2022.d.ts","lib.es2023.d.ts","lib.dom.d.ts","lib.dom.iterable.d.ts","lib.dom.asynciterable.d.ts","lib.webworker.importscripts.d.ts","lib.scripthost.d.ts","lib.es2015.core.d.ts","lib.es2015.collection.d.ts","lib.es2015.generator.d.ts","lib.es2015.iterable.d.ts","lib.es2015.promise.d.ts","lib.es2015.proxy.d.ts","lib.es2015.reflect.d.ts","lib.es2015.symbol.d.ts","lib.es2015.symbol.wellknown.d.ts","lib.es2016.array.include.d.ts","lib.es2016.intl.d.ts","lib.es2017.arraybuffer.d.ts","lib.es2017.date.d.ts","lib.es2017.object.d.ts","lib.es2017.sharedmemory.d.ts","lib.es2017.string.d.ts","lib.es2017.intl.d.ts","lib.es2017.typedarrays.d.ts","lib.es2018.asyncgenerator.d.ts","lib.es2018.asynciterable.d.ts","lib.es2018.intl.d.ts","lib.es2018.promise.d.ts","lib.es2018.regexp.d.ts","lib.es2019.array.d.ts","lib.es2019.object.d.ts","lib.es2019.string.d.ts","lib.es2019.symbol.d.ts","lib.es2019.intl.d.ts","lib.es2020.bigint.d.ts","lib.es2020.date.d.ts","lib.es2020.promise.d.ts","lib.es2020.sharedmemory.d.ts","lib.es2020.string.d.ts","lib.es2020.symbol.wellknown.d.ts","lib.es2020.intl.d.ts","lib.es2020.number.d.ts","lib.es2021.promise.d.ts","lib.es2021.string.d.ts","lib.es2021.weakref.d.ts","lib.es2021.intl.d.ts","lib.es2022.array.d.ts","lib.es2022.error.d.ts","lib.es2022.intl.d.ts","lib.es2022.object.d.ts","lib.es2022.string.d.ts","lib.es2022.regexp.d.ts","lib.es2023.array.d.ts","lib.es2023.collection.d.ts","lib.es2023.intl.d.ts","lib.es2025.float16.d.ts","lib.esnext.disposable.d.ts","lib.decorators.d.ts","lib.decorators.legacy.d.ts","lib.es2023.full.d.ts","../../js-utils/dist/objects/checks.d.ts","../../js-utils/dist/objects/plainnesschecks.d.ts","../../js-utils/dist/objects/comparisons.d.ts","../../js-utils/dist/objects/nesting.d.ts","../../js-utils/dist/objects/creation.d.ts","../../js-utils/dist/objects/manipulation.d.ts","../../js-utils/dist/objects/index.d.ts","../../js-utils/dist/numbers/checks.d.ts","../../js-utils/dist/numbers/comparisons.d.ts","../../js-utils/dist/numbers/limiting.d.ts","../../js-utils/dist/numbers/rounding.d.ts","../../js-utils/dist/numbers/angles.d.ts","../../js-utils/dist/numbers/random.d.ts","../../js-utils/dist/numbers/index.d.ts","../../js-utils/dist/arrays/checks.d.ts","../../js-utils/dist/arrays/comparisons.d.ts","../../js-utils/dist/arrays/reading.d.ts","../../js-utils/dist/arrays/iteration.d.ts","../../js-utils/dist/arrays/finding.d.ts","../../js-utils/dist/arrays/creation.d.ts","../../js-utils/dist/arrays/manipulation.d.ts","../../js-utils/dist/arrays/shaping.d.ts","../../js-utils/dist/arrays/sorting.d.ts","../../js-utils/dist/arrays/random.d.ts","../../js-utils/dist/arrays/multidimensional.d.ts","../../js-utils/dist/arrays/index.d.ts","../../js-utils/dist/strings/checks.d.ts","../../js-utils/dist/strings/search.d.ts","../../js-utils/dist/strings/manipulation.d.ts","../../js-utils/dist/strings/creation.d.ts","../../js-utils/dist/strings/index.d.ts","../../js-utils/dist/functions/fundamentals.d.ts","../../js-utils/dist/functions/repeating.d.ts","../../js-utils/dist/functions/resolving.d.ts","../../js-utils/dist/functions/index.d.ts","../../js-utils/dist/sets/checks.d.ts","../../js-utils/dist/sets/manipulation.d.ts","../../js-utils/dist/sets/index.d.ts","../../js-utils/dist/errors/interpretationerror.d.ts","../../js-utils/dist/errors/index.d.ts","../../js-utils/dist/dates/checks.d.ts","../../js-utils/dist/dates/formatting.d.ts","../../js-utils/dist/dates/index.d.ts","../../js-utils/dist/index.d.ts","../src/types.ts","../src/actionvalidation.ts","../src/modes/moderegistry.ts","../src/modes/solo/types.ts","../src/modes/solo/index.ts","../src/modes/group/types.ts","../src/modes/group/index.ts","../src/modes/types.ts","../src/modes/solo/history.ts","../src/modes/group/history.ts","../src/modes/history.ts","../src/modes/index.ts","../src/completion.ts","../../polynomials/dist/types.d.ts","../../polynomials/dist/checks.d.ts","../../polynomials/dist/creation.d.ts","../../polynomials/dist/conversion.d.ts","../../polynomials/dist/display.d.ts","../../polynomials/dist/restructuring.d.ts","../../polynomials/dist/comparison.d.ts","../../polynomials/dist/manipulation.d.ts","../../polynomials/dist/index.d.ts","../../skill-setup/dist/abstracts/skillsetup.d.ts","../../skill-setup/dist/abstracts/skilllistsetup.d.ts","../../skill-setup/dist/abstracts/skillitemsetup.d.ts","../../skill-setup/dist/abstracts/index.d.ts","../../skill-setup/dist/setups/skill.d.ts","../../skill-setup/dist/setups/and.d.ts","../../skill-setup/dist/setups/or.d.ts","../../skill-setup/dist/setups/repeat.d.ts","../../skill-setup/dist/setups/pick.d.ts","../../skill-setup/dist/setups/part.d.ts","../../skill-setup/dist/setups/index.d.ts","../../skill-setup/dist/serialization.d.ts","../../skill-setup/dist/index.d.ts","../src/exercise/types.ts","../src/exercise/metadata.ts","../src/exercise/guards.ts","../src/exercise/initialization.ts","../src/exercise/index.ts","../src/index.ts","../../../node_modules/@types/node/compatibility/iterators.d.ts","../../../node_modules/@types/node/globals.typedarray.d.ts","../../../node_modules/@types/node/buffer.buffer.d.ts","../../../node_modules/@types/node/globals.d.ts","../../../node_modules/@types/node/web-globals/abortcontroller.d.ts","../../../node_modules/@types/node/web-globals/crypto.d.ts","../../../node_modules/@types/node/web-globals/domexception.d.ts","../../../node_modules/@types/node/web-globals/events.d.ts","../../../node_modules/undici-types/utility.d.ts","../../../node_modules/undici-types/header.d.ts","../../../node_modules/undici-types/readable.d.ts","../../../node_modules/undici-types/fetch.d.ts","../../../node_modules/undici-types/formdata.d.ts","../../../node_modules/undici-types/connector.d.ts","../../../node_modules/undici-types/client-stats.d.ts","../../../node_modules/undici-types/client.d.ts","../../../node_modules/undici-types/errors.d.ts","../../../node_modules/undici-types/dispatcher.d.ts","../../../node_modules/undici-types/global-dispatcher.d.ts","../../../node_modules/undici-types/global-origin.d.ts","../../../node_modules/undici-types/pool-stats.d.ts","../../../node_modules/undici-types/pool.d.ts","../../../node_modules/undici-types/handlers.d.ts","../../../node_modules/undici-types/balanced-pool.d.ts","../../../node_modules/undici-types/round-robin-pool.d.ts","../../../node_modules/undici-types/h2c-client.d.ts","../../../node_modules/undici-types/agent.d.ts","../../../node_modules/undici-types/mock-interceptor.d.ts","../../../node_modules/undici-types/mock-call-history.d.ts","../../../node_modules/undici-types/mock-agent.d.ts","../../../node_modules/undici-types/mock-client.d.ts","../../../node_modules/undici-types/mock-pool.d.ts","../../../node_modules/undici-types/snapshot-agent.d.ts","../../../node_modules/undici-types/mock-errors.d.ts","../../../node_modules/undici-types/proxy-agent.d.ts","../../../node_modules/undici-types/env-http-proxy-agent.d.ts","../../../node_modules/undici-types/retry-handler.d.ts","../../../node_modules/undici-types/retry-agent.d.ts","../../../node_modules/undici-types/api.d.ts","../../../node_modules/undici-types/cache-interceptor.d.ts","../../../node_modules/undici-types/interceptors.d.ts","../../../node_modules/undici-types/util.d.ts","../../../node_modules/undici-types/cookies.d.ts","../../../node_modules/undici-types/patch.d.ts","../../../node_modules/undici-types/websocket.d.ts","../../../node_modules/undici-types/eventsource.d.ts","../../../node_modules/undici-types/diagnostics-channel.d.ts","../../../node_modules/undici-types/content-type.d.ts","../../../node_modules/undici-types/cache.d.ts","../../../node_modules/undici-types/index.d.ts","../../../node_modules/@types/node/web-globals/fetch.d.ts","../../../node_modules/@types/node/web-globals/navigator.d.ts","../../../node_modules/@types/node/web-globals/storage.d.ts","../../../node_modules/@types/node/web-globals/streams.d.ts","../../../node_modules/@types/node/assert.d.ts","../../../node_modules/@types/node/assert/strict.d.ts","../../../node_modules/@types/node/async_hooks.d.ts","../../../node_modules/@types/node/buffer.d.ts","../../../node_modules/@types/node/child_process.d.ts","../../../node_modules/@types/node/cluster.d.ts","../../../node_modules/@types/node/console.d.ts","../../../node_modules/@types/node/constants.d.ts","../../../node_modules/@types/node/crypto.d.ts","../../../node_modules/@types/node/dgram.d.ts","../../../node_modules/@types/node/diagnostics_channel.d.ts","../../../node_modules/@types/node/dns.d.ts","../../../node_modules/@types/node/dns/promises.d.ts","../../../node_modules/@types/node/domain.d.ts","../../../node_modules/@types/node/events.d.ts","../../../node_modules/@types/node/fs.d.ts","../../../node_modules/@types/node/fs/promises.d.ts","../../../node_modules/@types/node/http.d.ts","../../../node_modules/@types/node/http2.d.ts","../../../node_modules/@types/node/https.d.ts","../../../node_modules/@types/node/inspector.d.ts","../../../node_modules/@types/node/inspector.generated.d.ts","../../../node_modules/@types/node/module.d.ts","../../../node_modules/@types/node/net.d.ts","../../../node_modules/@types/node/os.d.ts","../../../node_modules/@types/node/path.d.ts","../../../node_modules/@types/node/perf_hooks.d.ts","../../../node_modules/@types/node/process.d.ts","../../../node_modules/@types/node/punycode.d.ts","../../../node_modules/@types/node/querystring.d.ts","../../../node_modules/@types/node/readline.d.ts","../../../node_modules/@types/node/readline/promises.d.ts","../../../node_modules/@types/node/repl.d.ts","../../../node_modules/@types/node/sea.d.ts","../../../node_modules/@types/node/sqlite.d.ts","../../../node_modules/@types/node/stream.d.ts","../../../node_modules/@types/node/stream/promises.d.ts","../../../node_modules/@types/node/stream/consumers.d.ts","../../../node_modules/@types/node/stream/web.d.ts","../../../node_modules/@types/node/string_decoder.d.ts","../../../node_modules/@types/node/test.d.ts","../../../node_modules/@types/node/timers.d.ts","../../../node_modules/@types/node/timers/promises.d.ts","../../../node_modules/@types/node/tls.d.ts","../../../node_modules/@types/node/trace_events.d.ts","../../../node_modules/@types/node/tty.d.ts","../../../node_modules/@types/node/url.d.ts","../../../node_modules/@types/node/util.d.ts","../../../node_modules/@types/node/v8.d.ts","../../../node_modules/@types/node/vm.d.ts","../../../node_modules/@types/node/wasi.d.ts","../../../node_modules/@types/node/worker_threads.d.ts","../../../node_modules/@types/node/zlib.d.ts","../../../node_modules/@types/node/index.d.ts"],"fileInfos":[{"version":"16934abaab7026ac114da441aabea1a0","affectsGlobalScope":true,"impliedNodeFormat":1},"d4306fb2e47f74835e8674ffac07d76f","e437c5c1302869326c3bb93da85bbbcf","e4324975a566567b21d350615f1fc6ac","333b1b9a2a9ac3b8497dba5c63b5ba50","6cffacd662b6eb5fa7a36aa2ea366bfa","b4c34f9c23304dbef2d23698637ed638","e5cb86a5fc491796ecd1d2dd348d208f","feb6c6fb19cdb246a5d8acb36a6901c7","9443a7f109277ffaa79d893ed2549995",{"version":"aae8996e8b5684814785a42cbbefcd79","affectsGlobalScope":true,"impliedNodeFormat":1},"abad6dd56cc8caf095c165df8124d237","abad6dd56cc8caf095c165df8124d237",{"version":"2a9941db0809c9ad0e8837ed629b1dcc","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"d051b93324f36bcc68d152a5ca0988cd","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"926204c28cd3d073865348473ae28d2e","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"f25e42c801b2cb3cf2b39792006a9beb","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"6344b55f26a4e81d9608777dbfb877dd","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"3c0ed28e53d3695b363e256ec1c023fd","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"4c2761daba7f17141c25baa0821ac5da","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"b87656acabd63e69379ff6ffcfe52fc7","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"597469522da047a5af5222cc6989f405","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"1708ea4d34dc37fadadc63ca01127e80","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"55d97a8c6fbf34a30450a7b1e5f7a298","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"0ee05eb59426d33e374226d8dcfa708b","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"e347c14030993906efcfbb88915b6a05","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"b0231263857c9b6a03641acdc9280ceb","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"3b15c4a83b598cacb4067676e6f0abed","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"b417d97b7934cef63b1889abec0bbfbf","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"09a6cf4032ebba60ce22a501e663f881","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"2b056277dd138e8f5650fc04e20eaa8d","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"e22cc07e3f3cc242ba52fa3f8ea1fc58","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"2c45da767a1bfbb220848df1bc4029e4","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"b44c3e0fbaf2130cdcf6ac38b120ffa1","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"b612fb5cf8e5d964b92063a75207632a","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"02705151a5e1551b9162a9ed8ab763f7","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"41025e398be9215d32e4337335da8f0b","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"52684c2b1f353a5538e4f275182a54cd","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"6dedb6a4f90d1df3a6fbe5693e44886c","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"ca3f36fe3562c07e0f0d71c2bebd3f6d","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"409974d6129befbb8226ddd1c6558568","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"4d9cfde2a1ae1b4925f1f9bc10848e5d","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"7e1daecc66dd564144e3bb1a0266b5fd","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"a8e1d9bb35fd0637f2f9fd2b2a54f2ec","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"4f168501772a6543182765bfd5f2fbfe","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"a19c80aad1b2162103496f5ba293a732","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"b69afa63cd5d059851c78adb2856ee09","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"ae2fc5d954e9b0f5feee3d481b953c27","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"1cfd3091a071d8b6feec15277643bafe","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"1da2c1f258970fd3cc91184f69e91a9d","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"a0d87491913d843139e0c993650a3235","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"4ef72aa378127e7b7abba915b0110b1e","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"3ec74c6a7d4463f0254db3a74cf75646","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"84c2bdfa470d075526cce6322d81b0b6","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"0b3844c2b8c73e4e1ab91431411cad11","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"4fc71cf4a15b8d99675a31df77f26e07","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"d1b49564ddaeca3df5b6dbae925d2242","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"6a25be566d60ccfc2d6e8b7bfdeefa83","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"8a20e27646985dfd58c57ca6566553dd","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"9969f02ad3cdcbf4f709405cda44167f","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"9c9be4792a7a4f42c15ae7360bf28779","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"8cf777fe00349b71ee9c4b6f3fe7fd19","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"74f96bc192530c9723f572bfff3d3078","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"1df91c56b25955c56387426f378173c5","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"0219894bfe5042c7e1aa2d22e4a91ed0","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"be41035d7b941482a1e1ae6a5c5dcca5","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"f64453cbf9671f28158677fa5c43967a","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"33f317af5428801f944a478d2c1e38e5","affectsGlobalScope":true,"impliedNodeFormat":1},"e1c7e28ac89b8a663c388c275b41bf44",{"version":"0a5f9ea1a2907d0c3acce959f667e7d6","impliedNodeFormat":99},{"version":"62064d4505a357a7b3bd5fc002f01a6c","impliedNodeFormat":99},{"version":"b261d377ba6cab61b65229f8926d6c96","impliedNodeFormat":99},{"version":"5192a8f4e703e7fde6730938025f5623","impliedNodeFormat":99},{"version":"be9bcaaed12642dcb4f4b544382c0358","impliedNodeFormat":99},{"version":"21ccea272ffdebf648e4836834ea03f0","impliedNodeFormat":99},{"version":"d270959207f8e0d77bc290cb9b9fd246","impliedNodeFormat":99},{"version":"0adefc42b494adacd96ce55e2f64f9da","impliedNodeFormat":99},{"version":"17e818460750c7024b6b3d9ef9d489ca","impliedNodeFormat":99},{"version":"4c488904ad7ff9227d0d8f3704a586f6","impliedNodeFormat":99},{"version":"af0629723a39c856ba0958eb355a5cbe","impliedNodeFormat":99},{"version":"81a34d18a0ae9698642df2775695856d","impliedNodeFormat":99},{"version":"de24a9130664ba61652244cd2a232aed","impliedNodeFormat":99},{"version":"22b5d13c1a4f6516b6d7983939a8afc8","impliedNodeFormat":99},{"version":"72eb493e0bdad7f4ce302f0dbcce2641","impliedNodeFormat":99},{"version":"8ea7ff3dda12c32e077979de0e96715a","impliedNodeFormat":99},{"version":"a72446394410a3b03a7944e1780db6d3","impliedNodeFormat":99},{"version":"ded14b0e81fbadee602d95eba42ff17f","impliedNodeFormat":99},{"version":"ecb00340e935f501e79ab8d899bc370e","impliedNodeFormat":99},{"version":"a087d7ff39aa2c3d8cc870d8f05110e3","impliedNodeFormat":99},{"version":"f1d1cd98c334c216129f02b5f2adf9ee","impliedNodeFormat":99},{"version":"ac9a7aeb0ced50c8f83b661dd3d07a81","impliedNodeFormat":99},{"version":"089d4dd21214ba138c00815377853c5a","impliedNodeFormat":99},{"version":"2e346c22cde3aa31556967609b18c3f1","impliedNodeFormat":99},{"version":"0c0bbfc7dc00995d89bd217b45988ebb","impliedNodeFormat":99},{"version":"3ce013a7452ce40a72df47bd8ec12c0d","impliedNodeFormat":99},{"version":"b96e5eb97d6ed420b3367ca1888799df","impliedNodeFormat":99},{"version":"fa30278ec533c6d335d9aa86c30a8e8c","impliedNodeFormat":99},{"version":"89eac0e3c015c350fe1ebac681a1a743","impliedNodeFormat":99},{"version":"34eeab91b34ead376cdf527ad00a7ca5","impliedNodeFormat":99},{"version":"c3dddbbb572f9063bc1dc3fc4a92eaf2","impliedNodeFormat":99},{"version":"78f92c2ed83abd1fad7a4bd2d60b303e","impliedNodeFormat":99},{"version":"ae7cbf0166aad0aa133e9822dc26111d","impliedNodeFormat":99},{"version":"2458cb653e64298b96bc887a530c517a","impliedNodeFormat":99},{"version":"8cdcb64a3be9d482f7122864d95a9397","impliedNodeFormat":99},{"version":"cca1fe32626ac20ce59f0cb719c8e76a","impliedNodeFormat":99},{"version":"a9132f160817b236f8ed6177f83d83f0","impliedNodeFormat":99},{"version":"c5bcd18cf7ef8e12a0b5622e135b7dd5","impliedNodeFormat":99},{"version":"e2cfa86440881bab6e1c64d446adc5e3","impliedNodeFormat":99},{"version":"1073ad741b156bbaa728b8ccc8445788","impliedNodeFormat":99},{"version":"4c8efa49ef555631b0239d6431361d61","impliedNodeFormat":99},{"version":"ab880af2d4e78f1be40ab8b6672342c4","impliedNodeFormat":99},{"version":"dd03d213f167f308786e240f22f88383","impliedNodeFormat":99},{"version":"7ae7b3c7d629106dbc4d3d9995cd61de","impliedNodeFormat":99},{"version":"c0d24e76c29cb73b731923f2246070b4","signature":"f8aa150580806437af62bf7789af64d3","impliedNodeFormat":99},{"version":"7236aa140a580bb10e9470f272f5215f","signature":"bfab241004d96ebdc8f2056ecaa2e263","impliedNodeFormat":99},{"version":"2dfd7dbc498073aca520059c31f877de","signature":"fecd2662281657826aaaa0e98e2d5412","impliedNodeFormat":99},{"version":"dd91906fa3625252558bb7e3a13e8021","signature":"69c50d8af2fdc82664b9355cc49451df","impliedNodeFormat":99},{"version":"fef633796cc62253a31f166fa6463f12","signature":"7d6e428c4ce3a5fa7d2271e504502c6d","impliedNodeFormat":99},{"version":"10aaf497138d79ff3d385209103ff88a","signature":"98327fae8842e93fbc1f30e84073a663","impliedNodeFormat":99},{"version":"fef633796cc62253a31f166fa6463f12","signature":"7d6e428c4ce3a5fa7d2271e504502c6d","impliedNodeFormat":99},{"version":"f0f56c53fc45ff781774a0ada7dfdb01","signature":"d2d1f1a6804f35fb461b86be1f46876e","impliedNodeFormat":99},{"version":"e2e59abcd25b91a4ae3027d5fd36b182","signature":"628a19fb5e90b05332aa7baecf21e29a","impliedNodeFormat":99},{"version":"d77ec0b67423544ba193184864be4e4a","signature":"462ce62f675365646a8632c7c8c0107b","impliedNodeFormat":99},{"version":"04565d0c19918c6ccca03fcad96d3dfc","signature":"5cccceded8e00d0c487d325e1c0a102a","impliedNodeFormat":99},{"version":"c2c919f51d0f1c66bef6024648dfc5c1","signature":"96b12a48b45ef5ca69623476f636e803","impliedNodeFormat":99},{"version":"01594856702f95d2d77af4355ab595b9","signature":"3fd442bcf296c6b61fb8578c4b6a4392","impliedNodeFormat":99},{"version":"31d509daa66ce2489b94bcd8746b4b0e","impliedNodeFormat":99},{"version":"abdf9fec62e086e2ee09f12f262ef089","impliedNodeFormat":99},{"version":"ab9864ab545be6c07f2a198e1255c63c","impliedNodeFormat":99},{"version":"7c2ca67b26ccf6464ef97dabe36b4360","impliedNodeFormat":99},{"version":"9deaf87d471d9faea3d94b2705850e54","impliedNodeFormat":99},{"version":"028b0dfbc78670a97d236aaaa4f33159","impliedNodeFormat":99},{"version":"ccd4e3a245e67caa589d93e789d0a2a6","impliedNodeFormat":99},{"version":"096250c296e3ca12b3dae43d6a6291e4","impliedNodeFormat":99},{"version":"ea50a96a56b8f4d68b7196ccf21064e7","impliedNodeFormat":99},{"version":"cf7959fe846b305e36fa1a72ed84ba1b","impliedNodeFormat":99},{"version":"60ac26e77ee1006b71d81be71ffcb85a","impliedNodeFormat":99},{"version":"05e626a21409465d17f3f320047db56c","impliedNodeFormat":99},{"version":"58ee06af65ddfee826d566951bcdf7f3","impliedNodeFormat":99},{"version":"37f0f18fa417be41b8566398c7c560e3","impliedNodeFormat":99},{"version":"2b95e28478277b571e2200e26d188361","impliedNodeFormat":99},{"version":"3fbec79763a8d1b6f98e7cbfe1a64817","impliedNodeFormat":99},{"version":"059a5721c11c5afb84a60db1f00a03b6","impliedNodeFormat":99},{"version":"711e626f0ef549b524848da235b1cf93","impliedNodeFormat":99},{"version":"8e96dd6cf12cc9cdea0fac62f631c06d","impliedNodeFormat":99},{"version":"88c2de37df8103d5802d68394879d8e9","impliedNodeFormat":99},{"version":"91ccb757d1419d7cf24639500630ff54","impliedNodeFormat":99},{"version":"173c4f2211cf9ed0afe7cb7d29a2d9a8","impliedNodeFormat":99},{"version":"c33f253e58f4b7e629b6bb2d7fba136d","signature":"9e1478760762f41aac9a3b9c974020ba","impliedNodeFormat":99},{"version":"09ac25a208cc3ebea6f5aea7d329c5f8","signature":"b920251caa6773196240992371691f9f","impliedNodeFormat":99},{"version":"a0bb9763182ff6f2b5c8c4ceaa54b7d6","signature":"4451cf0ce341b423157b2c6c1488ae17","impliedNodeFormat":99},{"version":"688cb8900e7899b2e7fe22df11afdad8","signature":"4b33d3525675cdceddb4e0f55ebe81ef","impliedNodeFormat":99},{"version":"e5b425106e845fb781ec9a943cb67452","signature":"548972a014272e98efac5777a2d4f4a8","impliedNodeFormat":99},{"version":"9bdbef15a9ed7846bfb56e4977aab64e","signature":"b54d19ca40cf99c0bff635a351685171","impliedNodeFormat":99},{"version":"2514e9a2749c0fc18d2f478e9e1e641e","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"6ae4c332ecb24e76c1e47c0e21d4663d","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"69ee0752d1e70c56ca160360425752a9","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"bf33440030f0a0fae7d1efd6c293a8d2","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"9af0a7e3ef1c42cd066b9f8d365cc1ba","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"7b772cebc7136c34fc77954aef70519d","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"9eca652586205dc5b07f9ba57b1c8500","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"ec5f75939754ce94652189ec7d0d3058","affectsGlobalScope":true,"impliedNodeFormat":1},"49133c0dfbc32ab95668c3443dea49e5","85c2cf74d24d4069fac4686501a2d7e3","9f970a4ba4bb3ed6326d46b3ddab3f63","f444b82bb192c8ecc7c9a06cba5c1fba","75de66fc4824402123c0d694ccc0a085","db51f206bae5021bd84c7079251e08e9","fcd1a513c1e5802916fa602e8b8e64bc","aedc93367cdc148d7dd56ef6fd5ef308","8e2bc11d0328ba95e490a741c44a215d","d63481078bffe02fbaf6694a35815dc7","705645fe223430c696f47b708d592ca8","28d57c837c94adb42add03d499793cab","8c01a9bbae8449be21b3e018d59a74ac","44d3b7d58481743f4726cf411e667164","679024f8e9f58a112f4badf119c4d612","74d351e4ed233e82c6d74c444c1a6b86","94d8e37d28e92494f484dd9afe8f043c","79db245997e9261ae21e5f3d93e3493b","c3659054228b00c4e2a22d9ebea8b4f0","d7e5f7a0f1f883f28458f684106e7643","c2364011a80b6a9e3cc0e77895bad577","38da5c670190f4a35cbc204ca6c616bf","d95cc0eb29beed58f5ce72db21398f53","ecd53256b1ec7379c73316eaf392a69c","db5a9211b779628398011a5b8f5b8b5d","69c7bb9c3befe9ae37eed0e6a6310fee","1cba93fafccb7b2655f0e75229185e83","094ecadae30f65a82b77343dde77a666","f75df12d75dd783b03a0329b95abdb25","b438b08b2f0ed94a95a75c8990d9021b","f2becd2589591db92ab14e803eb8bdd5","8dec66ce34e6fe771e58a92b7068edc0","30f12c2660896a33bd3c3a126392c80a","0468c0ccd0ec7770b76481b165564d62","188234d616a4f50ed9b14c8f84a39f33","4c116bcf0a47ea8fbf4072f380925fa7","22111ccb71c0e95ff0796144b40eed2b","add85ec26ba695fc99c698dbec065f8c","5bfde23f96fc502b5413d772c35e1abf","b744265d8ad12b7d4d5c5dc35d18d44e","eff32168b8348b822afeed9cbf61afa7","acaa6ef6fcd5ba662929d6036121a616",{"version":"dd1cf1cc3aa21cd78b4869a44d98c6d9","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"292c9398a407b33b1d9c9812b673387a","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"45df94b3c51b898624bacc2bcd6d9eb2","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"7d352f71d1b1bcc12c79dd0e4597537c","affectsGlobalScope":true,"impliedNodeFormat":1},"db11b80743ed5356b81d763a708788e6","39078ea063fcaf72bd3cca7e0d13d017","f81aa09811fa65ac6f354ab0018d3c38",{"version":"282318b178d190157a4deacb14f3040a","affectsGlobalScope":true,"impliedNodeFormat":1},"aafe512c4216100fd65028f9b2afce83","54c5c3dcfdb5f7cf5fbbccfff6ead3fa",{"version":"dc14f078230582a2f8fb2138bfcf4f85","affectsGlobalScope":true,"impliedNodeFormat":1},"b2b472cd0bf0f8d5f022e00ca1c401f4","370d966b810b687a9e58851208cb3d4c","39b3089f3df8d14e0f2ddac0479872d9","cc7a57e86f908c313649aea8d90377e1","5c271f10d8a9b9a1206bc82a4fe5b84d","fbe31979333ec391d8b59e8f42236e8e","6751c8c175fac6bbe7b935582cdfdca7",{"version":"a3f111d2a29b6cdd04fc4b41aa560c86","affectsGlobalScope":true,"impliedNodeFormat":1},"5f4ac576bcdc670a8489c881b23a2b17","a500e7362abeae2d2f1fefea525dc869","02a1ccf1ef65bfbf65865ac4ce346974","d589d01c82f6793f20d2f5c838462e3d","dbe700f7f1fa52fd220c7ee2c6617ebc","579675a2c3b0f8c532a82ad9cbd5d384","b2e8f93606aeb2dee2a4cc9272c56973",{"version":"a8e5d3e42303570b1114b6cd9ef9f38a","affectsGlobalScope":true,"impliedNodeFormat":1},"0003c8459d069181cc4856724fcf2832","c9053dbbe4fa2853f2d3f73b9a2fee81","4e458316a6083cbd2bba2fd29f674dd5",{"version":"3cccee1f2c106192d18ac4e08119f872","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"057189402e597cd50262b082723f21ff","affectsGlobalScope":true,"impliedNodeFormat":1},"6b26581aa2587701d570206a0db8c9ee","88a29e2aac8082c0910733950159e1ca","10282f14d9c2a5cbf3bcf2b1c8cebeaf","0f80958d77cd6301b43c1d7904e3e4bc","3bdc645524ab0d2f6795d3a008833bd7","deb50b47eb75a5566532a763fa1324fa","6e61cd09c2e15845909de3ed59a00b37","3e4ffe5f2733e0589b2612bd86f6cec3","c8206d568b54e5ea06131963eecd576a","15878f4f50c2e562c0768eb735c2aed5",{"version":"cb8f7733bee3d973c152a75fad9f6da6","affectsGlobalScope":true,"impliedNodeFormat":1},"dd404118e8bd70aff746f7d31e46270b","a0fa4618173795c74b488178ea77f951",{"version":"6b8649a280031d9e86955db721cfad87","affectsGlobalScope":true,"impliedNodeFormat":1},"4bc8f13c472858fb74f77388c0c5d885","75ab229142dad0ca2ff14d02d52f11f9","c72d2516d1e8910caca33c4dff75fcd4","f0231f36cb7117fbe9271ff19ef0f5f4",{"version":"8a642eed2a45ac7028479b6089a04842","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"1e6ddb6b86dc5d86e75ba797d5324346","affectsGlobalScope":true,"impliedNodeFormat":1},"701aef085585b152042aa216b06bb4b8","e9bc5b1de50e48fa9857b64091673883","9268959cff1006c82e6abbd73824db97",{"version":"8f1c048bd5761910f5ea340fe4d792cd","affectsGlobalScope":true,"impliedNodeFormat":1},"6b1f3649b0eabeaca20c778fcc5f270c","eb567c7b5824aab578f75bbccf9f4b05"],"fileIdsList":[[157,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261],[157,209,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261],[157,209,210,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261],[209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261],[157,209,210,211,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261],[157,209,210,211,212,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261],[157,209,210,211,212,213,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261],[157,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261],[157,209,210,211,212,213,214,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261],[157,209,210,211,212,213,214,215,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261],[157,209,210,211,212,213,214,215,216,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261],[157,209,210,211,212,213,214,215,216,217,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261],[157,209,210,211,212,213,214,215,216,217,218,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261],[157,209,210,211,212,213,214,215,216,217,218,219,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261],[157,209,210,211,212,213,214,215,216,217,218,219,220,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261],[157,209,210,211,212,213,214,215,216,217,218,219,220,221,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261],[157,209,210,211,212,213,214,215,216,217,218,219,220,221,222,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261],[157,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261],[157,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261],[157,204,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261],[157,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261],[157,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261],[155,156,157,158,159,160,161,162,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261],[157,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261],[157,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261],[157,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261],[157,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261],[157,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261],[157,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261],[157,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261],[157,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261],[157,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261],[157,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261],[157,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261],[157,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261],[157,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261],[157,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261],[157,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261],[157,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261],[157,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261],[157,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261],[157,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,248,249,250,251,252,253,254,255,256,257,258,259,260,261],[157,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,249,250,251,252,253,254,255,256,257,258,259,260,261],[157,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,250,251,252,253,254,255,256,257,258,259,260,261],[157,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,251,252,253,254,255,256,257,258,259,260,261],[157,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,252,253,254,255,256,257,258,259,260,261],[157,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,253,254,255,256,257,258,259,260,261],[157,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,254,255,256,257,258,259,260,261],[157,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,255,256,257,258,259,260,261],[157,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,256,257,258,259,260,261],[157,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,257,258,259,260,261],[157,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,258,259,260,261],[157,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,259,260,261],[157,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,260,261],[157,204,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261],[157,204,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,261],[157,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260],[157,169,172,175,176,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261],[157,172,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261],[157,172,176,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261],[157,166,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261],[157,170,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261],[157,168,169,172,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261],[157,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262],[157,166,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262],[157,168,172,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261],[157,163,164,165,167,171,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261],[157,172,181,189,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261],[157,164,170,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261],[157,172,198,199,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261],[157,164,167,172,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262],[157,163,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261],[157,166,167,168,170,171,172,173,174,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,199,200,201,202,203,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261],[157,172,191,194,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261],[157,172,181,182,183,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261],[157,170,172,182,184,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261],[157,171,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261],[157,164,166,172,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261],[157,172,176,182,184,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261],[157,176,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261],[157,170,172,175,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261],[157,164,168,172,181,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261],[157,172,191,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261],[157,184,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261],[157,166,172,198,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262],[113,114,157,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261],[114,125,157,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261],[113,125,149,150,157,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261],[149,150,151,152,157,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261],[113,148,149,157,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261],[113,114,125,148,157,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261],[114,115,125,126,153,157,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261],[114,119,157,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261],[119,157,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261],[114,157,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261],[114,121,122,123,157,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261],[116,118,120,121,124,157,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261],[114,117,157,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261],[117,157,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261],[114,116,118,120,157,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261],[113,157,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261],[83,157,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261],[84,85,86,87,88,89,90,91,92,93,94,157,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261],[76,86,88,157,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261],[88,157,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261],[110,111,157,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261],[108,157,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261],[101,102,103,157,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261],[95,157,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261],[76,83,95,100,104,107,109,112,157,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261],[77,78,79,80,81,82,157,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261],[70,71,72,73,74,75,157,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261],[105,106,157,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261],[96,97,98,99,157,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261],[127,157,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261],[127,128,129,130,131,132,133,134,157,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261],[136,137,138,157,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261],[136,157,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261],[135,157,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261],[139,146,147,157,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261],[139,146,157,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261],[135,139,140,157,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261],[140,141,142,143,144,145,157,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261],[135,139,157,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261]],"options":{"composite":true,"declaration":true,"declarationMap":true,"module":199,"outDir":"./","rewriteRelativeImportExtensions":true,"rootDir":"../src","skipLibCheck":true,"strict":true,"target":10,"tsBuildInfoFile":"./tsconfig.tsbuildinfo","esModuleInterop":true},"referencedMap":[[209,1],[210,2],[211,3],[157,4],[212,5],[213,6],[214,7],[155,8],[215,9],[216,10],[217,11],[218,12],[219,13],[220,14],[221,15],[222,16],[223,17],[224,18],[225,19],[158,8],[156,8],[226,20],[227,21],[228,22],[262,23],[229,24],[230,25],[231,26],[232,27],[233,28],[234,29],[235,30],[236,31],[237,32],[238,33],[239,34],[240,35],[241,36],[242,37],[243,38],[244,39],[246,40],[245,41],[247,42],[248,43],[249,44],[250,45],[251,46],[252,47],[253,48],[254,49],[255,50],[256,51],[257,52],[258,53],[259,54],[159,8],[160,8],[161,8],[162,8],[205,55],[206,8],[207,8],[208,8],[260,56],[261,57],[67,8],[68,8],[13,8],[11,8],[12,8],[17,8],[16,8],[2,8],[18,8],[19,8],[20,8],[21,8],[22,8],[23,8],[24,8],[25,8],[3,8],[26,8],[27,8],[4,8],[28,8],[32,8],[29,8],[30,8],[31,8],[33,8],[34,8],[35,8],[5,8],[36,8],[37,8],[38,8],[39,8],[6,8],[43,8],[40,8],[41,8],[42,8],[44,8],[7,8],[45,8],[50,8],[51,8],[46,8],[47,8],[48,8],[49,8],[8,8],[55,8],[52,8],[53,8],[54,8],[56,8],[9,8],[57,8],[58,8],[59,8],[61,8],[60,8],[62,8],[63,8],[10,8],[69,8],[64,8],[65,8],[1,8],[66,8],[15,8],[14,8],[181,58],[193,59],[178,60],[194,8],[203,61],[169,62],[170,63],[168,8],[202,64],[197,65],[201,66],[172,67],[190,68],[171,69],[200,70],[166,71],[167,65],[173,59],[174,8],[180,66],[177,59],[164,72],[204,73],[195,74],[184,75],[183,59],[185,76],[188,77],[182,78],[186,79],[198,64],[175,80],[176,81],[189,82],[165,8],[192,83],[191,59],[179,81],[187,84],[196,8],[163,8],[199,85],[115,86],[126,87],[151,88],[153,89],[152,86],[150,90],[149,91],[154,92],[123,93],[120,94],[119,95],[124,96],[125,97],[116,8],[122,98],[118,99],[117,95],[121,100],[114,101],[84,102],[85,8],[89,8],[88,8],[95,103],[87,8],[90,8],[94,104],[93,8],[86,8],[91,105],[92,8],[110,8],[111,8],[112,106],[109,107],[108,8],[101,8],[104,108],[102,109],[103,8],[113,110],[81,8],[77,8],[78,8],[83,111],[79,8],[82,8],[80,8],[70,8],[72,8],[74,8],[76,112],[75,8],[73,8],[71,8],[105,8],[107,113],[106,8],[96,8],[99,8],[100,114],[98,8],[97,8],[128,115],[133,115],[130,115],[129,115],[131,115],[135,116],[134,115],[132,115],[127,8],[139,117],[138,118],[137,118],[136,119],[148,120],[147,121],[141,122],[146,123],[142,122],[145,122],[144,122],[143,122],[140,124]],"latestChangedDtsFile":"./index.d.ts"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { PlainDataObject } from '@step-wise/js-utils';
|
|
2
|
+
export type ExerciseParameters = PlainDataObject;
|
|
3
|
+
export type ExerciseAction = PlainDataObject & {
|
|
4
|
+
type: string;
|
|
5
|
+
};
|
|
6
|
+
export type ExerciseState = PlainDataObject;
|
|
7
|
+
export type ExerciseReport = PlainDataObject;
|
|
8
|
+
export type SoloExerciseReport = ExerciseReport;
|
|
9
|
+
export type GroupExerciseReport = ExerciseReport;
|
|
10
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AAE1D,MAAM,MAAM,kBAAkB,GAAG,eAAe,CAAA;AAChD,MAAM,MAAM,cAAc,GAAG,eAAe,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAA;AAC/D,MAAM,MAAM,aAAa,GAAG,eAAe,CAAA;AAC3C,MAAM,MAAM,cAAc,GAAG,eAAe,CAAA;AAC5C,MAAM,MAAM,kBAAkB,GAAG,cAAc,CAAA;AAC/C,MAAM,MAAM,mBAAmB,GAAG,cAAc,CAAA"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
package/package.json
ADDED
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@step-wise/exercise-definition",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Define educational exercises through reducer-based state and action models.",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"repository": {
|
|
7
|
+
"type": "git",
|
|
8
|
+
"url": "git+https://github.com/HildoBijl/stepwise.git",
|
|
9
|
+
"directory": "packages/exercise-definition"
|
|
10
|
+
},
|
|
11
|
+
"bugs": {
|
|
12
|
+
"url": "https://github.com/HildoBijl/stepwise/issues"
|
|
13
|
+
},
|
|
14
|
+
"homepage": "https://github.com/HildoBijl/stepwise/tree/main/packages/exercise-definition#readme",
|
|
15
|
+
"publishConfig": {
|
|
16
|
+
"access": "public"
|
|
17
|
+
},
|
|
18
|
+
"engines": {
|
|
19
|
+
"node": ">=24.12.0"
|
|
20
|
+
},
|
|
21
|
+
"type": "module",
|
|
22
|
+
"main": "./dist/index.js",
|
|
23
|
+
"types": "./dist/index.d.ts",
|
|
24
|
+
"exports": {
|
|
25
|
+
".": {
|
|
26
|
+
"types": "./dist/index.d.ts",
|
|
27
|
+
"import": "./dist/index.js"
|
|
28
|
+
}
|
|
29
|
+
},
|
|
30
|
+
"files": [
|
|
31
|
+
"dist",
|
|
32
|
+
"README.md",
|
|
33
|
+
"LICENSE"
|
|
34
|
+
],
|
|
35
|
+
"scripts": {
|
|
36
|
+
"build": "tsc -b tsconfig.build.json",
|
|
37
|
+
"watch": "tsc -b tsconfig.build.json --watch",
|
|
38
|
+
"test": "vitest run",
|
|
39
|
+
"test:watch": "vitest"
|
|
40
|
+
},
|
|
41
|
+
"dependencies": {
|
|
42
|
+
"@step-wise/skill-setup": "^0.1.0",
|
|
43
|
+
"@step-wise/js-utils": "^0.1.0"
|
|
44
|
+
},
|
|
45
|
+
"devDependencies": {
|
|
46
|
+
"vitest": "^5.0.0"
|
|
47
|
+
}
|
|
48
|
+
}
|