@gorilla-engine-sdk/ge-session-presets-lib 0.5.13
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.md +64 -0
- package/README.md +316 -0
- package/dist/PresetManager.d.ts +80 -0
- package/dist/PresetManager.js +590 -0
- package/dist/SessionAndPresetErrors.d.ts +3 -0
- package/dist/SessionAndPresetErrors.js +94 -0
- package/dist/SessionAndPresetsWrapper.d.ts +23 -0
- package/dist/SessionAndPresetsWrapper.js +182 -0
- package/dist/defaultSessionAndPresetsConfig.d.ts +2 -0
- package/dist/defaultSessionAndPresetsConfig.js +18 -0
- package/dist/defaultSessionAndPresetsState.d.ts +2 -0
- package/dist/defaultSessionAndPresetsState.js +11 -0
- package/dist/errors/SessionAndPresetsError.d.ts +73 -0
- package/dist/errors/SessionAndPresetsError.js +88 -0
- package/dist/hooks/useSessionAndPresets.d.ts +125 -0
- package/dist/hooks/useSessionAndPresets.js +339 -0
- package/dist/index.d.ts +14 -0
- package/dist/index.js +30 -0
- package/dist/state/SessionAndPresetsState.d.ts +118 -0
- package/dist/state/SessionAndPresetsState.js +105 -0
- package/dist/state/SessionAndPresetsStateProvider.d.ts +57 -0
- package/dist/state/SessionAndPresetsStateProvider.js +131 -0
- package/dist/types/IPresetManager.d.ts +266 -0
- package/dist/types/IPresetManager.js +3 -0
- package/dist/types/Preset.d.ts +39 -0
- package/dist/types/Preset.js +3 -0
- package/dist/types/SessionAndPresetsConfig.d.ts +96 -0
- package/dist/types/SessionAndPresetsConfig.js +3 -0
- package/dist/utils/utils.d.ts +1 -0
- package/dist/utils/utils.js +9 -0
- package/package.json +48 -0
|
@@ -0,0 +1,339 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.useSessionAndPresets = useSessionAndPresets;
|
|
4
|
+
const fs = require("fs-extra");
|
|
5
|
+
const react_1 = require("react");
|
|
6
|
+
const SessionAndPresetsState_1 = require("../state/SessionAndPresetsState");
|
|
7
|
+
const __1 = require("..");
|
|
8
|
+
/**
|
|
9
|
+
* Primary hook for interacting with the session and preset system.
|
|
10
|
+
*
|
|
11
|
+
* Must be called from within a component tree that is wrapped by
|
|
12
|
+
* {@link SessionAndPresetsStateProvider} and {@link SessionAndPresetsWrapper}.
|
|
13
|
+
*
|
|
14
|
+
* @returns An object with functions for session I/O and preset management.
|
|
15
|
+
* See {@link UseSessionAndPresetsReturnValue} for the full list.
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* ```tsx
|
|
19
|
+
* function PresetToolbar() {
|
|
20
|
+
* const { prevPreset, nextPreset, getLoadedPreset } = useSessionAndPresets();
|
|
21
|
+
*
|
|
22
|
+
* return (
|
|
23
|
+
* <geLabel width={200} height={30}>
|
|
24
|
+
* <geButton x={0} width={30} height={30} text="<" onClick={prevPreset} />
|
|
25
|
+
* <geLabel x={35} width={130} height={30} text={getLoadedPreset()?.name ?? ''} />
|
|
26
|
+
* <geButton x={170} width={30} height={30} text=">" onClick={nextPreset} />
|
|
27
|
+
* </geLabel>
|
|
28
|
+
* );
|
|
29
|
+
* }
|
|
30
|
+
* ```
|
|
31
|
+
*/
|
|
32
|
+
function useSessionAndPresets() {
|
|
33
|
+
const presetManager = (0, SessionAndPresetsState_1.useSessionAndPresetsManager)();
|
|
34
|
+
const configState = (0, SessionAndPresetsState_1.useSessionAndPresetsConfig)();
|
|
35
|
+
const dispatch = (0, SessionAndPresetsState_1.useSessionAndPresetsStateDispatch)();
|
|
36
|
+
const state = (0, SessionAndPresetsState_1.useSessionAndPresetsState)();
|
|
37
|
+
const stateRef = (0, react_1.useRef)(state);
|
|
38
|
+
stateRef.current = state;
|
|
39
|
+
const saveSession = (additionalStateString) => {
|
|
40
|
+
try {
|
|
41
|
+
const preset = getLoadedPreset();
|
|
42
|
+
if (configState.debug)
|
|
43
|
+
console.debug(`${__1.GE_SESSION_PRESETS_LIB} useSessionAndPresets: saveSession preset: ${preset?.filePath}`);
|
|
44
|
+
/**
|
|
45
|
+
* Experimental feature: Check preset-changed/dirty during session save
|
|
46
|
+
*/
|
|
47
|
+
if (configState.flagPresetChanged && preset?.json && stateRef.current.instrument) {
|
|
48
|
+
const instProps = stateRef.current.instrument;
|
|
49
|
+
const presetInstProps = preset.json.dsp_settings;
|
|
50
|
+
let presetChanged = false;
|
|
51
|
+
const propsChangedLog = [];
|
|
52
|
+
for (const prop of presetInstProps) {
|
|
53
|
+
const key = prop.key;
|
|
54
|
+
if (instProps[key]) {
|
|
55
|
+
if (instProps[key].normValue != prop.value) {
|
|
56
|
+
propsChangedLog.push({
|
|
57
|
+
type: 'instrumentProp',
|
|
58
|
+
key: key,
|
|
59
|
+
presetProp: prop.value,
|
|
60
|
+
instrumentProp: instProps[key].normValue,
|
|
61
|
+
});
|
|
62
|
+
presetChanged = true;
|
|
63
|
+
}
|
|
64
|
+
else {
|
|
65
|
+
if (stateRef.current.presetChangeLog && stateRef.current.presetChangeLog.length > 0)
|
|
66
|
+
stateRef.current.presetChangeLog.find((entry) => entry.type === 'instrumentProp' && entry.key === key);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
dispatchPresetChanged(presetChanged, propsChangedLog);
|
|
71
|
+
}
|
|
72
|
+
// create the save session-string
|
|
73
|
+
const saveString = presetManager.saveSession(additionalStateString, stateRef.current.presets.find((p) => p.uuid === stateRef.current.loadPresetUUID));
|
|
74
|
+
return saveString;
|
|
75
|
+
}
|
|
76
|
+
catch (err) {
|
|
77
|
+
dispatchError(err);
|
|
78
|
+
}
|
|
79
|
+
};
|
|
80
|
+
const isValidSession = (sessionJson) => {
|
|
81
|
+
let valid = true;
|
|
82
|
+
if (!sessionJson['dsp_settings'])
|
|
83
|
+
valid = false;
|
|
84
|
+
if (sessionJson['dsp_settings'].length === 0)
|
|
85
|
+
valid = false;
|
|
86
|
+
//if(!sessionJson['preset']) valid = false
|
|
87
|
+
if (configState.blockAAXInitialSession &&
|
|
88
|
+
configState.pluginType === 'AAX' &&
|
|
89
|
+
presetManager.sessionCount === 0)
|
|
90
|
+
valid = false;
|
|
91
|
+
if (configState.debug)
|
|
92
|
+
console.log(`${__1.GE_SESSION_PRESETS_LIB} useSessionAndPresets: : isValidSession sessionCount: ${presetManager.sessionCount} pluginType: ${configState.pluginType} valid: ${valid} `);
|
|
93
|
+
presetManager.incrementSessionCount();
|
|
94
|
+
return valid;
|
|
95
|
+
};
|
|
96
|
+
const loadSession = async (stateJSON) => {
|
|
97
|
+
if (!isValidSession(stateJSON)) {
|
|
98
|
+
if (configState.debug)
|
|
99
|
+
console.debug(`${__1.GE_SESSION_PRESETS_LIB} useSessionAndPresets: loadSession - NO VALID SESSION!`);
|
|
100
|
+
return stateJSON;
|
|
101
|
+
}
|
|
102
|
+
let sessionJSON = await presetManager.loadSession(stateJSON);
|
|
103
|
+
const filePath = sessionJSON['preset'];
|
|
104
|
+
if (configState.debug)
|
|
105
|
+
console.debug(`${__1.GE_SESSION_PRESETS_LIB} useSessionAndPresets: loadSession sessionJSON['preset']: ${filePath} exists: ${fs.existsSync(filePath)} isDirtySessionLoad: ${presetManager.isDirtySessionLoad}`);
|
|
106
|
+
if (!presetManager.isDirtySessionLoad && filePath) {
|
|
107
|
+
if (await fs.exists(filePath)) {
|
|
108
|
+
if (configState.debug)
|
|
109
|
+
console.debug(`${__1.GE_SESSION_PRESETS_LIB} useSessionAndPresets: loadSession - DISPATCH PRESET`);
|
|
110
|
+
dispatchSetPreset(stateRef.current.presets.find((item) => item.filePath === filePath), filePath);
|
|
111
|
+
dispatchPresetChanged(sessionJSON.workingState.presetChanged, sessionJSON.workingState.presetChangeLog);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
if (presetManager.isDirtySessionLoad) {
|
|
115
|
+
// if we end up in a state that is considered "dirty" load again
|
|
116
|
+
if (configState.debug)
|
|
117
|
+
console.debug(`${__1.GE_SESSION_PRESETS_LIB} useSessionAndPresets: loadSession presetManager.isDirtySessionLoad: ${presetManager.isDirtySessionLoad} - LOAD AGAIN`);
|
|
118
|
+
sessionJSON = await loadSession(stateJSON);
|
|
119
|
+
}
|
|
120
|
+
/// dispatch sessionId
|
|
121
|
+
if (sessionJSON?.sessionId) {
|
|
122
|
+
if (configState.debug)
|
|
123
|
+
console.debug(`${__1.GE_SESSION_PRESETS_LIB} useSessionAndPresets: loadSession - DISPATCH SESSION_ID ${sessionJSON.sessionId}`);
|
|
124
|
+
dispatchSetSessionId(sessionJSON.sessionId);
|
|
125
|
+
}
|
|
126
|
+
if (configState.debug)
|
|
127
|
+
console.debug(`${__1.GE_SESSION_PRESETS_LIB} useSessionAndPresets: loadSession sessionJSON['preset']: ${sessionJSON['preset']} - FINISHED`);
|
|
128
|
+
return sessionJSON;
|
|
129
|
+
};
|
|
130
|
+
const loadPresets = async (dirs) => {
|
|
131
|
+
try {
|
|
132
|
+
if (configState.debug)
|
|
133
|
+
console.debug(`${__1.GE_SESSION_PRESETS_LIB} useSessionAndPresets: loadPresets ${stateRef.current.presetIndex} sessionInvolved; ${presetManager.sessionInvolved} filePath: ${stateRef.current.presetFilePath}`);
|
|
134
|
+
const presets = await presetManager.loadPresets(dirs);
|
|
135
|
+
dispatch({
|
|
136
|
+
type: SessionAndPresetsState_1.SessionAndPresetsDispatchTypes.setPresets,
|
|
137
|
+
payload: {
|
|
138
|
+
presets: presets,
|
|
139
|
+
},
|
|
140
|
+
});
|
|
141
|
+
if (presetManager.sessionInvolved) {
|
|
142
|
+
dispatchSetPreset(presets.find((item) => item.filePath === stateRef.current.presetFilePath), stateRef.current.presetFilePath);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
catch (e) {
|
|
146
|
+
if (configState.debug)
|
|
147
|
+
console.error(e);
|
|
148
|
+
dispatchError(e);
|
|
149
|
+
}
|
|
150
|
+
};
|
|
151
|
+
const getPreset = (uuid) => {
|
|
152
|
+
return stateRef.current.presets.find((p) => p.uuid === uuid);
|
|
153
|
+
};
|
|
154
|
+
const getLoadedPreset = () => {
|
|
155
|
+
return stateRef.current.presets.find((p) => p.uuid === stateRef.current.loadPresetUUID);
|
|
156
|
+
};
|
|
157
|
+
const loadPreset = async (presetObj, sessionRestore = false) => {
|
|
158
|
+
try {
|
|
159
|
+
if (configState.debug)
|
|
160
|
+
console.debug(`${__1.GE_SESSION_PRESETS_LIB} useSessionAndPresets: loadPreset - sessionRestore: ${sessionRestore}`);
|
|
161
|
+
setPresetLoadingIndicator(true);
|
|
162
|
+
await presetManager.loadPreset(presetObj, undefined, sessionRestore);
|
|
163
|
+
setPresetLoadingIndicator(false);
|
|
164
|
+
}
|
|
165
|
+
catch (e) {
|
|
166
|
+
if (configState.debug)
|
|
167
|
+
console.error(e);
|
|
168
|
+
setPresetLoadingIndicator(false);
|
|
169
|
+
dispatchError(e);
|
|
170
|
+
}
|
|
171
|
+
};
|
|
172
|
+
const loadPresetFromSource = async (filePath, isInitialPreset = false, instStateToRetain) => {
|
|
173
|
+
try {
|
|
174
|
+
if (configState.debug)
|
|
175
|
+
console.debug(`${__1.GE_SESSION_PRESETS_LIB} useSessionAndPresets: loadPresetFromSource ${filePath} isInitialPreset: ${isInitialPreset}`);
|
|
176
|
+
// if it is the initial preset & it is loading a session or it has already loaded a session -> abort
|
|
177
|
+
if (isInitialPreset && presetManager.sessionInvolved)
|
|
178
|
+
return;
|
|
179
|
+
setPresetLoadingIndicator(true);
|
|
180
|
+
if (await presetManager.loadPresetFromSource(filePath, isInitialPreset, instStateToRetain))
|
|
181
|
+
dispatchSetPreset(stateRef.current.presets.find((item) => item.filePath === filePath), filePath);
|
|
182
|
+
setPresetLoadingIndicator(false);
|
|
183
|
+
}
|
|
184
|
+
catch (e) {
|
|
185
|
+
if (configState.debug)
|
|
186
|
+
console.error(e.name);
|
|
187
|
+
setPresetLoadingIndicator(false);
|
|
188
|
+
dispatchError(e);
|
|
189
|
+
}
|
|
190
|
+
};
|
|
191
|
+
const savePreset = async (filePath) => {
|
|
192
|
+
try {
|
|
193
|
+
if (configState.debug)
|
|
194
|
+
console.debug(`${__1.GE_SESSION_PRESETS_LIB} useSessionAndPresets: savePreset ${filePath}`);
|
|
195
|
+
await presetManager.savePreset(filePath);
|
|
196
|
+
}
|
|
197
|
+
catch (e) {
|
|
198
|
+
if (configState.debug)
|
|
199
|
+
console.error(e);
|
|
200
|
+
dispatchError(e);
|
|
201
|
+
}
|
|
202
|
+
};
|
|
203
|
+
const saveAsPreset = async () => {
|
|
204
|
+
try {
|
|
205
|
+
if (configState.debug)
|
|
206
|
+
console.debug(`${__1.GE_SESSION_PRESETS_LIB} useSessionAndPresets: saveAsPreset`);
|
|
207
|
+
let fileName = undefined;
|
|
208
|
+
const selectedPath = await GorillaEngine.openFileChooser({
|
|
209
|
+
hint: 'Save Preset',
|
|
210
|
+
saveDialog: true,
|
|
211
|
+
warnOnOverwrite: true,
|
|
212
|
+
allowedExtensions: 'json',
|
|
213
|
+
defaultLocation: configState.userPresetPath,
|
|
214
|
+
});
|
|
215
|
+
fileName = selectedPath[0];
|
|
216
|
+
const filePath = `${fileName}`;
|
|
217
|
+
if (configState.debug)
|
|
218
|
+
console.debug(`${__1.GE_SESSION_PRESETS_LIB} useSessionAndPresets: saveAsPreset ${filePath}`);
|
|
219
|
+
savePreset(filePath);
|
|
220
|
+
}
|
|
221
|
+
catch (e) {
|
|
222
|
+
if (configState.debug)
|
|
223
|
+
console.error(e);
|
|
224
|
+
dispatchError(e);
|
|
225
|
+
}
|
|
226
|
+
};
|
|
227
|
+
const deletePreset = async (filePath) => {
|
|
228
|
+
try {
|
|
229
|
+
if (configState.debug)
|
|
230
|
+
console.debug(`${__1.GE_SESSION_PRESETS_LIB} useSessionAndPresets: deletePreset filePath: ${filePath}`);
|
|
231
|
+
await presetManager.deletePreset(filePath);
|
|
232
|
+
await loadPresetFromSource(stateRef.current.presets[0].filePath);
|
|
233
|
+
}
|
|
234
|
+
catch (err) {
|
|
235
|
+
if (configState.debug)
|
|
236
|
+
console.error(err);
|
|
237
|
+
dispatchError(err);
|
|
238
|
+
}
|
|
239
|
+
};
|
|
240
|
+
const resetInstrumentProperty = (propertyName) => {
|
|
241
|
+
const preset = getLoadedPreset();
|
|
242
|
+
if (preset) {
|
|
243
|
+
stateRef.current.instrument[propertyName].normValue = preset.json.instrument[propertyName];
|
|
244
|
+
}
|
|
245
|
+
};
|
|
246
|
+
const prevPreset = () => {
|
|
247
|
+
if (stateRef.current.loadingPreset)
|
|
248
|
+
return;
|
|
249
|
+
const presetIndex = stateRef.current.presetIndex - 1 >= 0
|
|
250
|
+
? stateRef.current.presetIndex - 1
|
|
251
|
+
: stateRef.current.presets.length - 1;
|
|
252
|
+
loadPresetFromSource(stateRef.current.presets[presetIndex].filePath);
|
|
253
|
+
};
|
|
254
|
+
const nextPreset = () => {
|
|
255
|
+
if (stateRef.current.loadingPreset)
|
|
256
|
+
return;
|
|
257
|
+
const presetIndex = stateRef.current.presetIndex + 1 <= stateRef.current.presets.length - 1
|
|
258
|
+
? stateRef.current.presetIndex + 1
|
|
259
|
+
: 0;
|
|
260
|
+
loadPresetFromSource(stateRef.current.presets[presetIndex].filePath);
|
|
261
|
+
};
|
|
262
|
+
const randomize = () => {
|
|
263
|
+
if (stateRef.current.loadingPreset)
|
|
264
|
+
return;
|
|
265
|
+
};
|
|
266
|
+
const randomizeInCategory = () => {
|
|
267
|
+
if (stateRef.current.loadingPreset)
|
|
268
|
+
return;
|
|
269
|
+
};
|
|
270
|
+
const createPreset = async () => {
|
|
271
|
+
try {
|
|
272
|
+
return await presetManager.createPreset();
|
|
273
|
+
}
|
|
274
|
+
catch (err) {
|
|
275
|
+
if (configState.debug)
|
|
276
|
+
console.error(err);
|
|
277
|
+
dispatchError(err);
|
|
278
|
+
}
|
|
279
|
+
};
|
|
280
|
+
const setPresetLoadingIndicator = (active) => {
|
|
281
|
+
dispatch({
|
|
282
|
+
type: SessionAndPresetsState_1.SessionAndPresetsDispatchTypes.loadingPreset,
|
|
283
|
+
payload: {
|
|
284
|
+
loadingPreset: active,
|
|
285
|
+
},
|
|
286
|
+
});
|
|
287
|
+
};
|
|
288
|
+
const dispatchSetPreset = (preset, filePath) => {
|
|
289
|
+
dispatch({
|
|
290
|
+
type: SessionAndPresetsState_1.SessionAndPresetsDispatchTypes.setPreset,
|
|
291
|
+
payload: {
|
|
292
|
+
preset: preset,
|
|
293
|
+
filePath: filePath,
|
|
294
|
+
},
|
|
295
|
+
});
|
|
296
|
+
};
|
|
297
|
+
const dispatchPresetChanged = (presetChanged, presetChangeLog) => {
|
|
298
|
+
dispatch({
|
|
299
|
+
type: SessionAndPresetsState_1.SessionAndPresetsDispatchTypes.setPresetChanged,
|
|
300
|
+
payload: {
|
|
301
|
+
presetChanged: presetChanged,
|
|
302
|
+
presetChangeLog: presetChangeLog,
|
|
303
|
+
},
|
|
304
|
+
});
|
|
305
|
+
};
|
|
306
|
+
const dispatchSetSessionId = (sessionId) => {
|
|
307
|
+
dispatch({
|
|
308
|
+
type: SessionAndPresetsState_1.SessionAndPresetsDispatchTypes.setSessionId,
|
|
309
|
+
payload: {
|
|
310
|
+
sessionId,
|
|
311
|
+
},
|
|
312
|
+
});
|
|
313
|
+
};
|
|
314
|
+
const dispatchError = (e) => {
|
|
315
|
+
dispatch({
|
|
316
|
+
type: SessionAndPresetsState_1.SessionAndPresetsDispatchTypes.setError,
|
|
317
|
+
payload: { error: e },
|
|
318
|
+
});
|
|
319
|
+
};
|
|
320
|
+
return {
|
|
321
|
+
saveSession,
|
|
322
|
+
loadSession,
|
|
323
|
+
loadPresets,
|
|
324
|
+
getPreset,
|
|
325
|
+
getLoadedPreset,
|
|
326
|
+
loadPreset,
|
|
327
|
+
loadPresetFromSource,
|
|
328
|
+
createPreset,
|
|
329
|
+
savePreset,
|
|
330
|
+
saveAsPreset,
|
|
331
|
+
deletePreset,
|
|
332
|
+
resetInstrumentProperty,
|
|
333
|
+
prevPreset,
|
|
334
|
+
nextPreset,
|
|
335
|
+
randomize,
|
|
336
|
+
randomizeInCategory,
|
|
337
|
+
};
|
|
338
|
+
}
|
|
339
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlU2Vzc2lvbkFuZFByZXNldHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaG9va3MvdXNlU2Vzc2lvbkFuZFByZXNldHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUErSkEsb0RBa1hDO0FBamhCRCwrQkFBZ0M7QUFHaEMsaUNBQW9EO0FBRXBELDRFQU95QztBQUt6QywwQkFBNEM7QUFzSDVDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXVCRztBQUNILFNBQWdCLG9CQUFvQjtJQUNsQyxNQUFNLGFBQWEsR0FBbUIsSUFBQSxvREFBMkIsR0FBRSxDQUFDO0lBQ3BFLE1BQU0sV0FBVyxHQUE0QixJQUFBLG1EQUEwQixHQUFFLENBQUM7SUFFMUUsTUFBTSxRQUFRLEdBQUcsSUFBQSwwREFBaUMsR0FBRSxDQUFDO0lBQ3JELE1BQU0sS0FBSyxHQUEyQixJQUFBLGtEQUF5QixHQUFFLENBQUM7SUFDbEUsTUFBTSxRQUFRLEdBQUcsSUFBQSxjQUFNLEVBQUMsS0FBSyxDQUFDLENBQUM7SUFDL0IsUUFBUSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7SUFFekIsTUFBTSxXQUFXLEdBQUcsQ0FBQyxxQkFBNkIsRUFBVSxFQUFFO1FBQzVELElBQUksQ0FBQztZQUNILE1BQU0sTUFBTSxHQUFHLGVBQWUsRUFBRSxDQUFDO1lBQ2pDLElBQUksV0FBVyxDQUFDLEtBQUs7Z0JBQ25CLE9BQU8sQ0FBQyxLQUFLLENBQ1gsR0FBRywwQkFBc0IsOENBQThDLE1BQU0sRUFBRSxRQUFRLEVBQUUsQ0FDMUYsQ0FBQztZQUVKOztlQUVHO1lBQ0gsSUFBSSxXQUFXLENBQUMsaUJBQWlCLElBQUksTUFBTSxFQUFFLElBQUksSUFBSSxRQUFRLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxDQUFDO2dCQUNqRixNQUFNLFNBQVMsR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQztnQkFDOUMsTUFBTSxlQUFlLEdBQUcsTUFBTSxDQUFD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
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/// <reference types="gorilla-engine" preserve="true" />
|
|
2
|
+
import { useSessionAndPresets } from './hooks/useSessionAndPresets';
|
|
3
|
+
import { SessionAndPresetsState, useSessionAndPresetsConfig, useSessionAndPresetsState, SessionAndPresetsDispatchTypes, useSessionAndPresetsManager, useSessionAndPresetsStateDispatch } from './state/SessionAndPresetsState';
|
|
4
|
+
import { SessionAndPresetsConfig } from './types/SessionAndPresetsConfig';
|
|
5
|
+
import SessionAndPresetsWrapper from './SessionAndPresetsWrapper';
|
|
6
|
+
import { SessionAndPresetsStateProvider } from './state/SessionAndPresetsStateProvider';
|
|
7
|
+
import { SessionAndPresetsError, SessionAndPresetsErrorTypes } from './errors/SessionAndPresetsError';
|
|
8
|
+
import { IPresetManager, AdditionalSaveSessionSignature, AdditionalPreLoadSessionSignature, AdditionalLoadSessionSignature, AdditionalPreLoadPresetSignature, AdditionalLoadPresetSignature, AdditionalPreLoadPresetFromSourceSignature, AdditionalLoadPresetFromSourceSignature, AdditionalCreatePresetSignature, AdditionalSavePresetSignature, AdditionalDeletePresetSignature } from './types/IPresetManager';
|
|
9
|
+
import { PresetManager } from './PresetManager';
|
|
10
|
+
import { Preset } from './types/Preset';
|
|
11
|
+
import { defaultSessionAndPresetsConfig } from './defaultSessionAndPresetsConfig';
|
|
12
|
+
import { defaultSessionAndPresetsState } from './defaultSessionAndPresetsState';
|
|
13
|
+
export declare const GE_SESSION_PRESETS_LIB = "[ge-session-presets-lib]";
|
|
14
|
+
export { useSessionAndPresets, useSessionAndPresetsConfig, useSessionAndPresetsState, SessionAndPresetsWrapper, SessionAndPresetsStateProvider, SessionAndPresetsState, SessionAndPresetsConfig, IPresetManager, PresetManager, Preset, SessionAndPresetsDispatchTypes, useSessionAndPresetsManager, useSessionAndPresetsStateDispatch, SessionAndPresetsError, SessionAndPresetsErrorTypes, AdditionalSaveSessionSignature, AdditionalPreLoadSessionSignature, AdditionalLoadSessionSignature, AdditionalPreLoadPresetSignature, AdditionalLoadPresetSignature, AdditionalPreLoadPresetFromSourceSignature, AdditionalLoadPresetFromSourceSignature, AdditionalCreatePresetSignature, AdditionalSavePresetSignature, AdditionalDeletePresetSignature, defaultSessionAndPresetsConfig, defaultSessionAndPresetsState, };
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/// <reference types="gorilla-engine" preserve="true" />
|
|
3
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
4
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
5
|
+
};
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.defaultSessionAndPresetsState = exports.defaultSessionAndPresetsConfig = exports.SessionAndPresetsErrorTypes = exports.SessionAndPresetsError = exports.useSessionAndPresetsStateDispatch = exports.useSessionAndPresetsManager = exports.SessionAndPresetsDispatchTypes = exports.PresetManager = exports.SessionAndPresetsStateProvider = exports.SessionAndPresetsWrapper = exports.useSessionAndPresetsState = exports.useSessionAndPresetsConfig = exports.useSessionAndPresets = exports.GE_SESSION_PRESETS_LIB = void 0;
|
|
8
|
+
const useSessionAndPresets_1 = require("./hooks/useSessionAndPresets");
|
|
9
|
+
Object.defineProperty(exports, "useSessionAndPresets", { enumerable: true, get: function () { return useSessionAndPresets_1.useSessionAndPresets; } });
|
|
10
|
+
const SessionAndPresetsState_1 = require("./state/SessionAndPresetsState");
|
|
11
|
+
Object.defineProperty(exports, "useSessionAndPresetsConfig", { enumerable: true, get: function () { return SessionAndPresetsState_1.useSessionAndPresetsConfig; } });
|
|
12
|
+
Object.defineProperty(exports, "useSessionAndPresetsState", { enumerable: true, get: function () { return SessionAndPresetsState_1.useSessionAndPresetsState; } });
|
|
13
|
+
Object.defineProperty(exports, "SessionAndPresetsDispatchTypes", { enumerable: true, get: function () { return SessionAndPresetsState_1.SessionAndPresetsDispatchTypes; } });
|
|
14
|
+
Object.defineProperty(exports, "useSessionAndPresetsManager", { enumerable: true, get: function () { return SessionAndPresetsState_1.useSessionAndPresetsManager; } });
|
|
15
|
+
Object.defineProperty(exports, "useSessionAndPresetsStateDispatch", { enumerable: true, get: function () { return SessionAndPresetsState_1.useSessionAndPresetsStateDispatch; } });
|
|
16
|
+
const SessionAndPresetsWrapper_1 = __importDefault(require("./SessionAndPresetsWrapper"));
|
|
17
|
+
exports.SessionAndPresetsWrapper = SessionAndPresetsWrapper_1.default;
|
|
18
|
+
const SessionAndPresetsStateProvider_1 = require("./state/SessionAndPresetsStateProvider");
|
|
19
|
+
Object.defineProperty(exports, "SessionAndPresetsStateProvider", { enumerable: true, get: function () { return SessionAndPresetsStateProvider_1.SessionAndPresetsStateProvider; } });
|
|
20
|
+
const SessionAndPresetsError_1 = require("./errors/SessionAndPresetsError");
|
|
21
|
+
Object.defineProperty(exports, "SessionAndPresetsError", { enumerable: true, get: function () { return SessionAndPresetsError_1.SessionAndPresetsError; } });
|
|
22
|
+
Object.defineProperty(exports, "SessionAndPresetsErrorTypes", { enumerable: true, get: function () { return SessionAndPresetsError_1.SessionAndPresetsErrorTypes; } });
|
|
23
|
+
const PresetManager_1 = require("./PresetManager");
|
|
24
|
+
Object.defineProperty(exports, "PresetManager", { enumerable: true, get: function () { return PresetManager_1.PresetManager; } });
|
|
25
|
+
const defaultSessionAndPresetsConfig_1 = require("./defaultSessionAndPresetsConfig");
|
|
26
|
+
Object.defineProperty(exports, "defaultSessionAndPresetsConfig", { enumerable: true, get: function () { return defaultSessionAndPresetsConfig_1.defaultSessionAndPresetsConfig; } });
|
|
27
|
+
const defaultSessionAndPresetsState_1 = require("./defaultSessionAndPresetsState");
|
|
28
|
+
Object.defineProperty(exports, "defaultSessionAndPresetsState", { enumerable: true, get: function () { return defaultSessionAndPresetsState_1.defaultSessionAndPresetsState; } });
|
|
29
|
+
exports.GE_SESSION_PRESETS_LIB = '[ge-session-presets-lib]';
|
|
30
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLHdEQUF3RDs7Ozs7O0FBa0N4RCx1RUFBb0U7QUF3Q2xFLHFHQXhDTywyQ0FBb0IsT0F3Q1A7QUF2Q3RCLDJFQU93QztBQWlDdEMsMkdBdENBLG1EQUEwQixPQXNDQTtBQUMxQiwwR0F0Q0Esa0RBQXlCLE9Bc0NBO0FBUXpCLCtHQTdDQSx1REFBOEIsT0E2Q0E7QUFDOUIsNEdBN0NBLG9EQUEyQixPQTZDQTtBQUMzQixrSEE3Q0EsMERBQWlDLE9BNkNBO0FBekNuQywwRkFBa0U7QUFnQ2hFLG1DQWhDSyxrQ0FBd0IsQ0FnQ0w7QUEvQjFCLDJGQUF3RjtBQWdDdEYsK0dBaENPLCtEQUE4QixPQWdDUDtBQS9CaEMsNEVBR3lDO0FBcUN2Qyx1R0F2Q0EsK0NBQXNCLE9BdUNBO0FBQ3RCLDRHQXZDQSxvREFBMkIsT0F1Q0E7QUF2QjdCLG1EQUFnRDtBQWlCOUMsOEZBakJPLDZCQUFhLE9BaUJQO0FBZGYscUZBQWtGO0FBK0JoRiwrR0EvQk8sK0RBQThCLE9BK0JQO0FBOUJoQyxtRkFBZ0Y7QUErQjlFLDhHQS9CTyw2REFBNkIsT0ErQlA7QUE3QmxCLFFBQUEsc0JBQXNCLEdBQUcsMEJBQTBCLENBQUMifQ==
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import { Preset } from '../types/Preset';
|
|
2
|
+
import { SessionAndPresetsConfig } from '../types/SessionAndPresetsConfig';
|
|
3
|
+
import { IPresetManager } from '../types/IPresetManager';
|
|
4
|
+
import { SessionAndPresetsError } from '../errors/SessionAndPresetsError';
|
|
5
|
+
export type SessionAndPresetsState = {
|
|
6
|
+
/**
|
|
7
|
+
* A reference to the instrument used
|
|
8
|
+
*/
|
|
9
|
+
instrument?: GorillaEngine.Instrument;
|
|
10
|
+
/**
|
|
11
|
+
* An array of presets, populated by PresetManager-parsing of factory & user-presets
|
|
12
|
+
*/
|
|
13
|
+
presets: Preset[];
|
|
14
|
+
/**
|
|
15
|
+
* The index of the currently loaded preset
|
|
16
|
+
*/
|
|
17
|
+
presetIndex: number;
|
|
18
|
+
/**
|
|
19
|
+
* The file-path of the currently loaded preset
|
|
20
|
+
*/
|
|
21
|
+
presetFilePath?: string;
|
|
22
|
+
/**
|
|
23
|
+
* A hash based on file-name of preset, used to identify current loaded preset
|
|
24
|
+
*/
|
|
25
|
+
loadPresetUUID?: String;
|
|
26
|
+
/**
|
|
27
|
+
* The display name of the currently laoded preset
|
|
28
|
+
*/
|
|
29
|
+
/**
|
|
30
|
+
* A boolean flag indicating if we are in a loading-state
|
|
31
|
+
*/
|
|
32
|
+
loadingPreset?: boolean;
|
|
33
|
+
/**
|
|
34
|
+
* A boolean flag indicating if changes has happened on the currently loaded preset
|
|
35
|
+
*/
|
|
36
|
+
presetChanged: boolean;
|
|
37
|
+
/**
|
|
38
|
+
* A log tracking preset/instrument changes
|
|
39
|
+
*/
|
|
40
|
+
presetChangeLog?: any[];
|
|
41
|
+
/**
|
|
42
|
+
* Used to store the session information
|
|
43
|
+
*/
|
|
44
|
+
session?: JSON;
|
|
45
|
+
/**
|
|
46
|
+
* A uuid which gets persisted within session save - used for logging and offline tracking paths
|
|
47
|
+
*/
|
|
48
|
+
sessionId?: string;
|
|
49
|
+
/**
|
|
50
|
+
* The path to initial preset that should be loaded
|
|
51
|
+
*/
|
|
52
|
+
initialPresetPath?: string;
|
|
53
|
+
/**
|
|
54
|
+
* Capturing the last error that got thrown
|
|
55
|
+
*/
|
|
56
|
+
error?: Error | SessionAndPresetsError;
|
|
57
|
+
};
|
|
58
|
+
export declare enum SessionAndPresetsDispatchTypes {
|
|
59
|
+
setInstrument = "SET_INSTRUMENT",
|
|
60
|
+
setPresets = "SET_PRESETS",
|
|
61
|
+
setPreset = "SET_PRESET",
|
|
62
|
+
setPresetChanged = "SET_PRESET_CHANGED",
|
|
63
|
+
savePreset = "SAVE_PRESET",
|
|
64
|
+
deletePreset = "DELETE_PRESET",
|
|
65
|
+
setSession = "SET_SESSION",
|
|
66
|
+
setSessionId = "SET_SESSION_ID",
|
|
67
|
+
loadingPreset = "LOADING_PRESET",
|
|
68
|
+
setError = "ERROR"
|
|
69
|
+
}
|
|
70
|
+
type SessionAndPresetsStatePayload = {
|
|
71
|
+
[SessionAndPresetsDispatchTypes.setInstrument]: {
|
|
72
|
+
instrument: GorillaEngine.Instrument;
|
|
73
|
+
};
|
|
74
|
+
[SessionAndPresetsDispatchTypes.setPresets]: {
|
|
75
|
+
presets: Preset[];
|
|
76
|
+
};
|
|
77
|
+
[SessionAndPresetsDispatchTypes.setPreset]: {
|
|
78
|
+
preset: Preset;
|
|
79
|
+
filePath: string;
|
|
80
|
+
};
|
|
81
|
+
[SessionAndPresetsDispatchTypes.setPresetChanged]: {
|
|
82
|
+
presetChanged: boolean;
|
|
83
|
+
presetChangeLog: any[];
|
|
84
|
+
};
|
|
85
|
+
[SessionAndPresetsDispatchTypes.setSession]: {
|
|
86
|
+
session: JSON;
|
|
87
|
+
};
|
|
88
|
+
[SessionAndPresetsDispatchTypes.setSessionId]: {
|
|
89
|
+
sessionId: string;
|
|
90
|
+
};
|
|
91
|
+
[SessionAndPresetsDispatchTypes.loadingPreset]: {
|
|
92
|
+
loadingPreset: boolean;
|
|
93
|
+
};
|
|
94
|
+
[SessionAndPresetsDispatchTypes.setError]: {
|
|
95
|
+
error: SessionAndPresetsError;
|
|
96
|
+
};
|
|
97
|
+
};
|
|
98
|
+
export type SessionAndPresetsStateActions = ActionMap<SessionAndPresetsStatePayload>[keyof ActionMap<SessionAndPresetsStatePayload>];
|
|
99
|
+
export declare const SessionAndPresetsReducer: (state: SessionAndPresetsState, action: SessionAndPresetsStateActions) => SessionAndPresetsState;
|
|
100
|
+
export declare const SessionAndPresetsStateContext: React.Context<any>;
|
|
101
|
+
export declare const SessionAndPresetsStateDispatchContext: React.Context<any>;
|
|
102
|
+
export declare const SessionAndPresetsConfigContext: React.Context<any>;
|
|
103
|
+
export declare function useSessionAndPresetsConfig(): SessionAndPresetsConfig;
|
|
104
|
+
export declare function useSessionAndPresetsState(): SessionAndPresetsState;
|
|
105
|
+
export declare function useSessionAndPresetsStateDispatch(): any;
|
|
106
|
+
export declare const SessionAndPresetsManagerContext: React.Context<any>;
|
|
107
|
+
export declare function useSessionAndPresetsManager(): IPresetManager;
|
|
108
|
+
type ActionMap<M extends {
|
|
109
|
+
[index: string]: any;
|
|
110
|
+
}> = {
|
|
111
|
+
[Key in keyof M]: M[Key] extends undefined ? {
|
|
112
|
+
type: Key;
|
|
113
|
+
} : {
|
|
114
|
+
type: Key;
|
|
115
|
+
payload: M[Key];
|
|
116
|
+
};
|
|
117
|
+
};
|
|
118
|
+
export {};
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SessionAndPresetsManagerContext = exports.SessionAndPresetsConfigContext = exports.SessionAndPresetsStateDispatchContext = exports.SessionAndPresetsStateContext = exports.SessionAndPresetsReducer = exports.SessionAndPresetsDispatchTypes = void 0;
|
|
4
|
+
exports.useSessionAndPresetsConfig = useSessionAndPresetsConfig;
|
|
5
|
+
exports.useSessionAndPresetsState = useSessionAndPresetsState;
|
|
6
|
+
exports.useSessionAndPresetsStateDispatch = useSessionAndPresetsStateDispatch;
|
|
7
|
+
exports.useSessionAndPresetsManager = useSessionAndPresetsManager;
|
|
8
|
+
const react_1 = require("react");
|
|
9
|
+
var SessionAndPresetsDispatchTypes;
|
|
10
|
+
(function (SessionAndPresetsDispatchTypes) {
|
|
11
|
+
SessionAndPresetsDispatchTypes["setInstrument"] = "SET_INSTRUMENT";
|
|
12
|
+
SessionAndPresetsDispatchTypes["setPresets"] = "SET_PRESETS";
|
|
13
|
+
SessionAndPresetsDispatchTypes["setPreset"] = "SET_PRESET";
|
|
14
|
+
SessionAndPresetsDispatchTypes["setPresetChanged"] = "SET_PRESET_CHANGED";
|
|
15
|
+
SessionAndPresetsDispatchTypes["savePreset"] = "SAVE_PRESET";
|
|
16
|
+
SessionAndPresetsDispatchTypes["deletePreset"] = "DELETE_PRESET";
|
|
17
|
+
SessionAndPresetsDispatchTypes["setSession"] = "SET_SESSION";
|
|
18
|
+
SessionAndPresetsDispatchTypes["setSessionId"] = "SET_SESSION_ID";
|
|
19
|
+
SessionAndPresetsDispatchTypes["loadingPreset"] = "LOADING_PRESET";
|
|
20
|
+
SessionAndPresetsDispatchTypes["setError"] = "ERROR";
|
|
21
|
+
})(SessionAndPresetsDispatchTypes || (exports.SessionAndPresetsDispatchTypes = SessionAndPresetsDispatchTypes = {}));
|
|
22
|
+
const SessionAndPresetsReducer = (state, action) => {
|
|
23
|
+
switch (action.type) {
|
|
24
|
+
case SessionAndPresetsDispatchTypes.setSession:
|
|
25
|
+
return {
|
|
26
|
+
...state,
|
|
27
|
+
session: action.payload.session,
|
|
28
|
+
};
|
|
29
|
+
case SessionAndPresetsDispatchTypes.setSessionId:
|
|
30
|
+
return {
|
|
31
|
+
...state,
|
|
32
|
+
sessionId: action.payload.sessionId,
|
|
33
|
+
};
|
|
34
|
+
case SessionAndPresetsDispatchTypes.setInstrument:
|
|
35
|
+
return {
|
|
36
|
+
...state,
|
|
37
|
+
instrument: action.payload.instrument,
|
|
38
|
+
};
|
|
39
|
+
case SessionAndPresetsDispatchTypes.setPresets:
|
|
40
|
+
const newState = {
|
|
41
|
+
...state,
|
|
42
|
+
presets: action.payload.presets,
|
|
43
|
+
};
|
|
44
|
+
if (state.presetIndex > -1 && state.loadPresetUUID) {
|
|
45
|
+
const presetIndex = newState.presets.findIndex((item) => item.uuid === state.loadPresetUUID);
|
|
46
|
+
newState.presetIndex = presetIndex;
|
|
47
|
+
}
|
|
48
|
+
return newState;
|
|
49
|
+
case SessionAndPresetsDispatchTypes.setPreset:
|
|
50
|
+
const presetIndex = state.presets.findIndex((item) => item.filePath === action.payload.filePath);
|
|
51
|
+
const preset = state.presets.find((item) => item.filePath === action.payload.filePath);
|
|
52
|
+
return {
|
|
53
|
+
...state,
|
|
54
|
+
presetIndex: presetIndex,
|
|
55
|
+
presetFilePath: action.payload.filePath,
|
|
56
|
+
//presetName: action.payload.preset.name,
|
|
57
|
+
//preset: action.payload.preset,
|
|
58
|
+
loadPresetUUID: preset?.uuid,
|
|
59
|
+
presetChanged: false,
|
|
60
|
+
presetChangeLog: undefined,
|
|
61
|
+
};
|
|
62
|
+
case SessionAndPresetsDispatchTypes.setPresetChanged:
|
|
63
|
+
const presetChangeLog = Array.isArray(state.presetChangeLog)
|
|
64
|
+
? state.presetChangeLog.concat(action.payload.presetChangeLog)
|
|
65
|
+
: [];
|
|
66
|
+
return {
|
|
67
|
+
...state,
|
|
68
|
+
presetChanged: action.payload.presetChanged,
|
|
69
|
+
presetChangeLog: presetChangeLog,
|
|
70
|
+
};
|
|
71
|
+
case SessionAndPresetsDispatchTypes.loadingPreset:
|
|
72
|
+
return {
|
|
73
|
+
...state,
|
|
74
|
+
loadingPreset: action.payload.loadingPreset,
|
|
75
|
+
};
|
|
76
|
+
case SessionAndPresetsDispatchTypes.setError:
|
|
77
|
+
return {
|
|
78
|
+
...state,
|
|
79
|
+
error: action.payload.error,
|
|
80
|
+
// TODO: double-check...
|
|
81
|
+
// Reason: if flag was set to true, but an error aborted further excecution, flag might not get reset
|
|
82
|
+
loadingPreset: false,
|
|
83
|
+
};
|
|
84
|
+
default:
|
|
85
|
+
return state;
|
|
86
|
+
}
|
|
87
|
+
};
|
|
88
|
+
exports.SessionAndPresetsReducer = SessionAndPresetsReducer;
|
|
89
|
+
exports.SessionAndPresetsStateContext = (0, react_1.createContext)(null);
|
|
90
|
+
exports.SessionAndPresetsStateDispatchContext = (0, react_1.createContext)(null);
|
|
91
|
+
exports.SessionAndPresetsConfigContext = (0, react_1.createContext)(null);
|
|
92
|
+
function useSessionAndPresetsConfig() {
|
|
93
|
+
return (0, react_1.useContext)(exports.SessionAndPresetsConfigContext);
|
|
94
|
+
}
|
|
95
|
+
function useSessionAndPresetsState() {
|
|
96
|
+
return (0, react_1.useContext)(exports.SessionAndPresetsStateContext);
|
|
97
|
+
}
|
|
98
|
+
function useSessionAndPresetsStateDispatch() {
|
|
99
|
+
return (0, react_1.useContext)(exports.SessionAndPresetsStateDispatchContext);
|
|
100
|
+
}
|
|
101
|
+
exports.SessionAndPresetsManagerContext = (0, react_1.createContext)(null);
|
|
102
|
+
function useSessionAndPresetsManager() {
|
|
103
|
+
return (0, react_1.useContext)(exports.SessionAndPresetsManagerContext);
|
|
104
|
+
}
|
|
105
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2Vzc2lvbkFuZFByZXNldHNTdGF0ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zdGF0ZS9TZXNzaW9uQW5kUHJlc2V0c1N0YXRlLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUEwTUEsZ0VBRUM7QUFFRCw4REFFQztBQUVELDhFQUVDO0FBR0Qsa0VBRUM7QUF6TkQsaUNBQWtEO0FBeUVsRCxJQUFZLDhCQWNYO0FBZEQsV0FBWSw4QkFBOEI7SUFDeEMsa0VBQWdDLENBQUE7SUFFaEMsNERBQTBCLENBQUE7SUFDMUIsMERBQXdCLENBQUE7SUFDeEIseUVBQXVDLENBQUE7SUFDdkMsNERBQTBCLENBQUE7SUFDMUIsZ0VBQThCLENBQUE7SUFFOUIsNERBQTBCLENBQUE7SUFDMUIsaUVBQStCLENBQUE7SUFDL0Isa0VBQWdDLENBQUE7SUFFaEMsb0RBQWtCLENBQUE7QUFDcEIsQ0FBQyxFQWRXLDhCQUE4Qiw4Q0FBOUIsOEJBQThCLFFBY3pDO0FBbUNNLE1BQU0sd0JBQXdCLEdBQUcsQ0FDdEMsS0FBNkIsRUFDN0IsTUFBcUMsRUFDckMsRUFBRTtJQUNGLFFBQVEsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3BCLEtBQUssOEJBQThCLENBQUMsVUFBVTtZQUM1QyxPQUFPO2dCQUNMLEdBQUcsS0FBSztnQkFDUixPQUFPLEVBQUUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxPQUFPO2FBQ2hDLENBQUM7UUFDSixLQUFLLDhCQUE4QixDQUFDLFlBQVk7WUFDOUMsT0FBTztnQkFDTCxHQUFHLEtBQUs7Z0JBQ1IsU0FBUyxFQUFFLE1BQU0sQ0FBQyxPQUFPLENBQUMsU0FBUzthQUNwQyxDQUFDO1FBQ0osS0FBSyw4QkFBOEIsQ0FBQyxhQUFhO1lBQy9DLE9BQU87Z0JBQ0wsR0FBRyxLQUFLO2dCQUNSLFVBQVUsRUFBRSxNQUFNLENBQUMsT0FBTyxDQUFDLFVBQVU7YUFDdEMsQ0FBQztRQUNKLEtBQUssOEJBQThCLENBQUMsVUFB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
|