@rvoh/dream 0.40.7 → 0.41.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/dist/cjs/src/helpers/cli/SchemaBuilder.js +29 -25
- package/dist/cjs/src/helpers/comparisonKey.js +10 -0
- package/dist/cjs/src/helpers/intersection.js +14 -0
- package/dist/cjs/src/helpers/uniq.js +4 -9
- package/dist/cjs/src/index.js +4 -2
- package/dist/esm/src/helpers/cli/SchemaBuilder.js +29 -25
- package/dist/esm/src/helpers/comparisonKey.js +7 -0
- package/dist/esm/src/helpers/intersection.js +11 -0
- package/dist/esm/src/helpers/uniq.js +4 -9
- package/dist/esm/src/index.js +1 -0
- package/dist/types/src/helpers/cli/SchemaBuilder.d.ts +0 -1
- package/dist/types/src/helpers/comparisonKey.d.ts +1 -0
- package/dist/types/src/helpers/intersection.d.ts +1 -0
- package/dist/types/src/index.d.ts +1 -0
- package/docs/assets/navigation.js +1 -1
- package/docs/assets/search.js +1 -1
- package/docs/classes/Benchmark.html +2 -2
- package/docs/classes/CalendarDate.html +2 -2
- package/docs/classes/CreateOrFindByFailedToCreateAndFind.html +3 -3
- package/docs/classes/Decorators.html +19 -19
- package/docs/classes/Dream.html +129 -129
- package/docs/classes/DreamApp.html +4 -4
- package/docs/classes/DreamBin.html +2 -2
- package/docs/classes/DreamCLI.html +4 -4
- package/docs/classes/DreamImporter.html +2 -2
- package/docs/classes/DreamLogos.html +2 -2
- package/docs/classes/DreamMigrationHelpers.html +7 -7
- package/docs/classes/DreamSerializer.html +2 -2
- package/docs/classes/DreamTransaction.html +2 -2
- package/docs/classes/Encrypt.html +2 -2
- package/docs/classes/Env.html +2 -2
- package/docs/classes/GlobalNameNotSet.html +3 -3
- package/docs/classes/NonLoadedAssociation.html +3 -3
- package/docs/classes/Query.html +50 -50
- package/docs/classes/Range.html +2 -2
- package/docs/classes/RecordNotFound.html +3 -3
- package/docs/classes/ValidationError.html +3 -3
- package/docs/functions/Attribute.html +1 -1
- package/docs/functions/RendersMany.html +1 -1
- package/docs/functions/RendersOne.html +1 -1
- package/docs/functions/ReplicaSafe.html +1 -1
- package/docs/functions/STI.html +1 -1
- package/docs/functions/SoftDelete.html +1 -1
- package/docs/functions/camelize.html +1 -1
- package/docs/functions/capitalize.html +1 -1
- package/docs/functions/closeAllDbConnections.html +1 -1
- package/docs/functions/compact.html +1 -1
- package/docs/functions/dreamDbConnections.html +1 -1
- package/docs/functions/dreamPath.html +1 -1
- package/docs/functions/generateDream.html +1 -1
- package/docs/functions/globalClassNameFromFullyQualifiedModelName.html +1 -1
- package/docs/functions/hyphenize.html +1 -1
- package/docs/functions/inferSerializerFromDreamClassOrViewModelClass.html +1 -1
- package/docs/functions/inferSerializerFromDreamOrViewModel.html +1 -1
- package/docs/functions/intersection.html +1 -0
- package/docs/functions/isEmpty.html +1 -1
- package/docs/functions/loadRepl.html +1 -1
- package/docs/functions/lookupClassByGlobalName.html +1 -1
- package/docs/functions/pascalize.html +1 -1
- package/docs/functions/pgErrorType.html +1 -1
- package/docs/functions/range-1.html +1 -1
- package/docs/functions/relativeDreamPath.html +1 -1
- package/docs/functions/round.html +1 -1
- package/docs/functions/serializerNameFromFullyQualifiedModelName.html +1 -1
- package/docs/functions/sharedPathPrefix.html +1 -1
- package/docs/functions/snakeify.html +1 -1
- package/docs/functions/sort.html +1 -1
- package/docs/functions/sortBy.html +1 -1
- package/docs/functions/standardizeFullyQualifiedModelName.html +1 -1
- package/docs/functions/uncapitalize.html +1 -1
- package/docs/functions/uniq.html +1 -1
- package/docs/functions/untypedDb.html +1 -1
- package/docs/functions/validateColumn.html +1 -1
- package/docs/functions/validateTable.html +1 -1
- package/docs/interfaces/AttributeStatement.html +2 -2
- package/docs/interfaces/DecoratorContext.html +2 -2
- package/docs/interfaces/DreamAppInitOptions.html +2 -2
- package/docs/interfaces/DreamAppOpts.html +2 -2
- package/docs/interfaces/DreamSerializerAssociationStatement.html +2 -2
- package/docs/interfaces/EncryptOptions.html +2 -2
- package/docs/interfaces/OpenapiSchemaProperties.html +1 -1
- package/docs/interfaces/OpenapiSchemaPropertiesShorthand.html +1 -1
- package/docs/interfaces/OpenapiTypeFieldObject.html +1 -1
- package/docs/modules.html +1 -0
- package/docs/types/Camelized.html +1 -1
- package/docs/types/CommonOpenapiSchemaObjectFields.html +1 -1
- package/docs/types/DateTime.html +1 -1
- package/docs/types/DbConnectionType.html +1 -1
- package/docs/types/DreamAssociationMetadata.html +1 -1
- package/docs/types/DreamAttributes.html +1 -1
- package/docs/types/DreamClassColumn.html +1 -1
- package/docs/types/DreamColumn.html +1 -1
- package/docs/types/DreamColumnNames.html +1 -1
- package/docs/types/DreamLogLevel.html +1 -1
- package/docs/types/DreamLogger.html +1 -1
- package/docs/types/DreamOrViewModelSerializerKey.html +1 -1
- package/docs/types/DreamParamSafeAttributes.html +1 -1
- package/docs/types/DreamParamSafeColumnNames.html +1 -1
- package/docs/types/DreamSerializerKey.html +1 -1
- package/docs/types/DreamSerializers.html +1 -1
- package/docs/types/DreamTableSchema.html +1 -1
- package/docs/types/DreamVirtualColumns.html +1 -1
- package/docs/types/EncryptAlgorithm.html +1 -1
- package/docs/types/Hyphenized.html +1 -1
- package/docs/types/IdType.html +1 -1
- package/docs/types/OpenapiAllTypes.html +1 -1
- package/docs/types/OpenapiFormats.html +1 -1
- package/docs/types/OpenapiNumberFormats.html +1 -1
- package/docs/types/OpenapiPrimitiveTypes.html +1 -1
- package/docs/types/OpenapiSchemaArray.html +1 -1
- package/docs/types/OpenapiSchemaArrayShorthand.html +1 -1
- package/docs/types/OpenapiSchemaBase.html +1 -1
- package/docs/types/OpenapiSchemaBody.html +1 -1
- package/docs/types/OpenapiSchemaBodyShorthand.html +1 -1
- package/docs/types/OpenapiSchemaCommonFields.html +1 -1
- package/docs/types/OpenapiSchemaExpressionAllOf.html +1 -1
- package/docs/types/OpenapiSchemaExpressionAnyOf.html +1 -1
- package/docs/types/OpenapiSchemaExpressionOneOf.html +1 -1
- package/docs/types/OpenapiSchemaExpressionRef.html +1 -1
- package/docs/types/OpenapiSchemaExpressionRefSchemaShorthand.html +1 -1
- package/docs/types/OpenapiSchemaInteger.html +1 -1
- package/docs/types/OpenapiSchemaNull.html +1 -1
- package/docs/types/OpenapiSchemaNumber.html +1 -1
- package/docs/types/OpenapiSchemaObject.html +1 -1
- package/docs/types/OpenapiSchemaObjectAllOf.html +1 -1
- package/docs/types/OpenapiSchemaObjectAllOfShorthand.html +1 -1
- package/docs/types/OpenapiSchemaObjectAnyOf.html +1 -1
- package/docs/types/OpenapiSchemaObjectAnyOfShorthand.html +1 -1
- package/docs/types/OpenapiSchemaObjectBase.html +1 -1
- package/docs/types/OpenapiSchemaObjectBaseShorthand.html +1 -1
- package/docs/types/OpenapiSchemaObjectOneOf.html +1 -1
- package/docs/types/OpenapiSchemaObjectOneOfShorthand.html +1 -1
- package/docs/types/OpenapiSchemaObjectShorthand.html +1 -1
- package/docs/types/OpenapiSchemaPrimitiveGeneric.html +1 -1
- package/docs/types/OpenapiSchemaShorthandExpressionAllOf.html +1 -1
- package/docs/types/OpenapiSchemaShorthandExpressionAnyOf.html +1 -1
- package/docs/types/OpenapiSchemaShorthandExpressionOneOf.html +1 -1
- package/docs/types/OpenapiSchemaShorthandExpressionSerializableRef.html +1 -1
- package/docs/types/OpenapiSchemaShorthandExpressionSerializerRef.html +1 -1
- package/docs/types/OpenapiSchemaShorthandPrimitiveGeneric.html +1 -1
- package/docs/types/OpenapiSchemaString.html +1 -1
- package/docs/types/OpenapiShorthandAllTypes.html +1 -1
- package/docs/types/OpenapiShorthandPrimitiveTypes.html +1 -1
- package/docs/types/OpenapiTypeField.html +1 -1
- package/docs/types/Pascalized.html +1 -1
- package/docs/types/PrimaryKeyType.html +1 -1
- package/docs/types/RoundingPrecision.html +1 -1
- package/docs/types/SerializableClassOrSerializerCallback.html +1 -1
- package/docs/types/SerializableDreamClassOrViewModelClass.html +1 -1
- package/docs/types/SerializableDreamOrViewModel.html +1 -1
- package/docs/types/SerializableTypes.html +1 -1
- package/docs/types/Snakeified.html +1 -1
- package/docs/types/Timestamp.html +1 -1
- package/docs/types/UpdateableAssociationProperties.html +1 -1
- package/docs/types/UpdateableProperties.html +1 -1
- package/docs/types/ValidationType.html +1 -1
- package/docs/types/ViewModelSerializerKey.html +1 -1
- package/docs/types/WhereStatementForDream.html +1 -1
- package/docs/types/WhereStatementForDreamClass.html +1 -1
- package/docs/variables/DateTime-1.html +1 -1
- package/docs/variables/DreamConst.html +1 -1
- package/docs/variables/TRIGRAM_OPERATORS.html +1 -1
- package/docs/variables/openapiPrimitiveTypes-1.html +1 -1
- package/docs/variables/openapiShorthandPrimitiveTypes-1.html +1 -1
- package/docs/variables/ops.html +1 -1
- package/docs/variables/primaryKeyTypes.html +1 -1
- package/package.json +1 -1
|
@@ -11,6 +11,7 @@ const FailedToIdentifyAssociation_js_1 = require("../../errors/schema-builder/Fa
|
|
|
11
11
|
const camelize_js_1 = require("../camelize.js");
|
|
12
12
|
const compact_js_1 = require("../compact.js");
|
|
13
13
|
const EnvInternal_js_1 = require("../EnvInternal.js");
|
|
14
|
+
const intersection_js_1 = require("../intersection.js");
|
|
14
15
|
const pascalize_js_1 = require("../pascalize.js");
|
|
15
16
|
const sortBy_js_1 = require("../sortBy.js");
|
|
16
17
|
const uniq_js_1 = require("../uniq.js");
|
|
@@ -164,37 +165,46 @@ ${tableName}: {
|
|
|
164
165
|
}
|
|
165
166
|
async tableData(tableName) {
|
|
166
167
|
const dreamApp = index_js_2.default.getOrFail();
|
|
167
|
-
const models = Object.values(dreamApp.models);
|
|
168
|
-
const
|
|
169
|
-
if (!
|
|
168
|
+
const models = Object.values(dreamApp.models).filter(model => model.table === tableName);
|
|
169
|
+
const maybeModel = models[0];
|
|
170
|
+
if (!maybeModel)
|
|
170
171
|
throw new Error(`
|
|
171
172
|
Could not find a Dream model with table "${tableName}".
|
|
172
173
|
|
|
173
174
|
If you recently changed the name of a table in a migration, you
|
|
174
175
|
may need to update the table getter in the corresponding Dream.
|
|
175
176
|
`);
|
|
177
|
+
const baseModel = maybeModel['stiBaseClassOrOwnClass'];
|
|
176
178
|
const associationData = this.getAssociationData(tableName);
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
179
|
+
const allStiChildren = models.filter(model => model['isSTIChild']);
|
|
180
|
+
const modelsToCheck = allStiChildren.length ? allStiChildren : [baseModel];
|
|
181
|
+
// If a table is STI, then we look only at the serializers attached to
|
|
182
|
+
// all STI children (not the STI base model because the base model may not have any serializers)
|
|
183
|
+
const eachModelSerializerKeys = modelsToCheck.map(model => {
|
|
184
|
+
let serializers = {};
|
|
185
|
+
try {
|
|
186
|
+
serializers =
|
|
187
|
+
model?.prototype?.['serializers'] || {};
|
|
188
|
+
}
|
|
189
|
+
catch {
|
|
190
|
+
// no-op
|
|
191
|
+
}
|
|
192
|
+
return Object.keys(serializers);
|
|
193
|
+
});
|
|
194
|
+
const serializerKeys = (0, intersection_js_1.default)(...eachModelSerializerKeys);
|
|
185
195
|
return {
|
|
186
|
-
primaryKey:
|
|
187
|
-
createdAtField:
|
|
188
|
-
updatedAtField:
|
|
189
|
-
deletedAtField:
|
|
196
|
+
primaryKey: baseModel.prototype.primaryKey,
|
|
197
|
+
createdAtField: baseModel.prototype.createdAtField,
|
|
198
|
+
updatedAtField: baseModel.prototype.updatedAtField,
|
|
199
|
+
deletedAtField: baseModel.prototype.deletedAtField,
|
|
190
200
|
scopes: {
|
|
191
|
-
default: model['scopes'].default.map(scopeStatement => scopeStatement.method),
|
|
192
|
-
named: model['scopes'].named.map(scopeStatement => scopeStatement.method),
|
|
201
|
+
default: (0, uniq_js_1.default)(models.flatMap(model => model['scopes'].default.map(scopeStatement => scopeStatement.method))),
|
|
202
|
+
named: (0, uniq_js_1.default)(models.flatMap(model => model['scopes'].named.map(scopeStatement => scopeStatement.method))),
|
|
193
203
|
},
|
|
194
204
|
columns: await this.getColumnData(tableName, associationData),
|
|
195
|
-
virtualColumns:
|
|
205
|
+
virtualColumns: (0, uniq_js_1.default)(models.flatMap(model => model['virtualAttributes'].map(prop => prop.property) || [])),
|
|
196
206
|
associations: associationData,
|
|
197
|
-
serializerKeys
|
|
207
|
+
serializerKeys,
|
|
198
208
|
};
|
|
199
209
|
}
|
|
200
210
|
async getColumnData(tableName, associationData) {
|
|
@@ -229,12 +239,6 @@ may need to update the table getter in the corresponding Dream.
|
|
|
229
239
|
const enumName = (0, pascalize_js_1.default)(row.udtName.replace(/\[\]$/, ''));
|
|
230
240
|
return enumName;
|
|
231
241
|
}
|
|
232
|
-
getVirtualColumns(tableName) {
|
|
233
|
-
const dreamApp = index_js_2.default.getOrFail();
|
|
234
|
-
const models = (0, sortBy_js_1.default)(Object.values(dreamApp.models), m => m.table);
|
|
235
|
-
const model = models.find(model => model.table === tableName);
|
|
236
|
-
return model?.['virtualAttributes']?.map(prop => prop.property) || [];
|
|
237
|
-
}
|
|
238
242
|
async getSchemaData() {
|
|
239
243
|
const tables = await this.getTables();
|
|
240
244
|
const schemaData = {};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.default = intersection;
|
|
4
|
+
const comparisonKey_js_1 = require("./comparisonKey.js");
|
|
5
|
+
const uniq_js_1 = require("./uniq.js");
|
|
6
|
+
function intersection(...arrs) {
|
|
7
|
+
if (!arrs.length)
|
|
8
|
+
return [];
|
|
9
|
+
return (0, uniq_js_1.default)(arrs.reduce((workingArray, arr) => _intersection(workingArray, arr), arrs[0]));
|
|
10
|
+
}
|
|
11
|
+
function _intersection(arr, arr2) {
|
|
12
|
+
const mappedArr2 = arr2.map(val => (0, comparisonKey_js_1.default)(val));
|
|
13
|
+
return arr.filter(val => mappedArr2.includes((0, comparisonKey_js_1.default)(val)));
|
|
14
|
+
}
|
|
@@ -1,19 +1,14 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.default = uniq;
|
|
4
|
+
const comparisonKey_js_1 = require("./comparisonKey.js");
|
|
4
5
|
function uniq(arr, toKey = undefined) {
|
|
5
|
-
if (toKey)
|
|
6
|
-
return uniqWith(arr, toKey);
|
|
7
|
-
return uniqWith(arr, a => String(a));
|
|
8
|
-
}
|
|
9
|
-
function uniqWith(arr, toKey) {
|
|
10
6
|
const map = arr.reduce((acc, val) => {
|
|
11
|
-
|
|
7
|
+
const baseKey = (0, comparisonKey_js_1.default)(val, toKey);
|
|
8
|
+
// Prefix with underscore to ensure that the values cannot be _interpreted_ as integers.
|
|
12
9
|
// If they can be interpreted as integers, then the keys are ordered not by the
|
|
13
10
|
// order in which they were added, but in ascending numerical order.
|
|
14
|
-
const key =
|
|
15
|
-
? val.comparisonKey
|
|
16
|
-
: `_${toKey(val)}`;
|
|
11
|
+
const key = typeof baseKey === 'string' ? baseKey : `_${baseKey}`;
|
|
17
12
|
acc[key] ||= val;
|
|
18
13
|
return acc;
|
|
19
14
|
}, {});
|
package/dist/cjs/src/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
4
|
-
exports.DreamSerializer = exports.Attribute = exports.RendersOne = exports.RendersMany = exports.ops = exports.uniq = exports.uncapitalize = exports.standardizeFullyQualifiedModelName = exports.sortBy = exports.sort = exports.snakeify = exports.serializerNameFromFullyQualifiedModelName = void 0;
|
|
3
|
+
exports.range = exports.Range = exports.sharedPathPrefix = exports.relativeDreamPath = exports.dreamPath = exports.pascalize = exports.loadRepl = exports.isEmpty = exports.intersection = exports.inferSerializerFromDreamOrViewModel = exports.inferSerializerFromDreamClassOrViewModelClass = exports.hyphenize = exports.globalClassNameFromFullyQualifiedModelName = exports.Env = exports.DreamLogos = exports.DateTime = exports.compact = exports.generateDream = exports.capitalize = exports.camelize = exports.CalendarDate = exports.Benchmark = exports.ValidationError = exports.RecordNotFound = exports.GlobalNameNotSet = exports.CreateOrFindByFailedToCreateAndFind = exports.NonLoadedAssociation = exports.Encrypt = exports.Query = exports.DreamTransaction = exports.openapiShorthandPrimitiveTypes = exports.openapiPrimitiveTypes = exports.DreamConst = exports.Dream = exports.DreamApp = exports.lookupClassByGlobalName = exports.DreamImporter = exports.Decorators = exports.STI = exports.SoftDelete = exports.ReplicaSafe = exports.validateTable = exports.validateColumn = exports.DreamMigrationHelpers = exports.untypedDb = exports.pgErrorType = exports.dreamDbConnections = exports.closeAllDbConnections = exports.DreamCLI = exports.DreamBin = void 0;
|
|
4
|
+
exports.DreamSerializer = exports.Attribute = exports.RendersOne = exports.RendersMany = exports.ops = exports.uniq = exports.uncapitalize = exports.standardizeFullyQualifiedModelName = exports.sortBy = exports.sort = exports.snakeify = exports.serializerNameFromFullyQualifiedModelName = exports.round = void 0;
|
|
5
5
|
var index_js_1 = require("./bin/index.js");
|
|
6
6
|
Object.defineProperty(exports, "DreamBin", { enumerable: true, get: function () { return index_js_1.default; } });
|
|
7
7
|
var index_js_2 = require("./cli/index.js");
|
|
@@ -80,6 +80,8 @@ Object.defineProperty(exports, "hyphenize", { enumerable: true, get: function ()
|
|
|
80
80
|
var inferSerializerFromDreamOrViewModel_js_1 = require("./helpers/inferSerializerFromDreamOrViewModel.js");
|
|
81
81
|
Object.defineProperty(exports, "inferSerializerFromDreamClassOrViewModelClass", { enumerable: true, get: function () { return inferSerializerFromDreamOrViewModel_js_1.inferSerializerFromDreamClassOrViewModelClass; } });
|
|
82
82
|
Object.defineProperty(exports, "inferSerializerFromDreamOrViewModel", { enumerable: true, get: function () { return inferSerializerFromDreamOrViewModel_js_1.default; } });
|
|
83
|
+
var intersection_js_1 = require("./helpers/intersection.js");
|
|
84
|
+
Object.defineProperty(exports, "intersection", { enumerable: true, get: function () { return intersection_js_1.default; } });
|
|
83
85
|
var isEmpty_js_1 = require("./helpers/isEmpty.js");
|
|
84
86
|
Object.defineProperty(exports, "isEmpty", { enumerable: true, get: function () { return isEmpty_js_1.default; } });
|
|
85
87
|
var loadRepl_js_1 = require("./helpers/loadRepl.js");
|
|
@@ -9,6 +9,7 @@ import FailedToIdentifyAssociation from '../../errors/schema-builder/FailedToIde
|
|
|
9
9
|
import camelize from '../camelize.js';
|
|
10
10
|
import compact from '../compact.js';
|
|
11
11
|
import EnvInternal from '../EnvInternal.js';
|
|
12
|
+
import intersection from '../intersection.js';
|
|
12
13
|
import pascalize from '../pascalize.js';
|
|
13
14
|
import sortBy from '../sortBy.js';
|
|
14
15
|
import uniq from '../uniq.js';
|
|
@@ -162,37 +163,46 @@ ${tableName}: {
|
|
|
162
163
|
}
|
|
163
164
|
async tableData(tableName) {
|
|
164
165
|
const dreamApp = DreamApp.getOrFail();
|
|
165
|
-
const models = Object.values(dreamApp.models);
|
|
166
|
-
const
|
|
167
|
-
if (!
|
|
166
|
+
const models = Object.values(dreamApp.models).filter(model => model.table === tableName);
|
|
167
|
+
const maybeModel = models[0];
|
|
168
|
+
if (!maybeModel)
|
|
168
169
|
throw new Error(`
|
|
169
170
|
Could not find a Dream model with table "${tableName}".
|
|
170
171
|
|
|
171
172
|
If you recently changed the name of a table in a migration, you
|
|
172
173
|
may need to update the table getter in the corresponding Dream.
|
|
173
174
|
`);
|
|
175
|
+
const baseModel = maybeModel['stiBaseClassOrOwnClass'];
|
|
174
176
|
const associationData = this.getAssociationData(tableName);
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
177
|
+
const allStiChildren = models.filter(model => model['isSTIChild']);
|
|
178
|
+
const modelsToCheck = allStiChildren.length ? allStiChildren : [baseModel];
|
|
179
|
+
// If a table is STI, then we look only at the serializers attached to
|
|
180
|
+
// all STI children (not the STI base model because the base model may not have any serializers)
|
|
181
|
+
const eachModelSerializerKeys = modelsToCheck.map(model => {
|
|
182
|
+
let serializers = {};
|
|
183
|
+
try {
|
|
184
|
+
serializers =
|
|
185
|
+
model?.prototype?.['serializers'] || {};
|
|
186
|
+
}
|
|
187
|
+
catch {
|
|
188
|
+
// no-op
|
|
189
|
+
}
|
|
190
|
+
return Object.keys(serializers);
|
|
191
|
+
});
|
|
192
|
+
const serializerKeys = intersection(...eachModelSerializerKeys);
|
|
183
193
|
return {
|
|
184
|
-
primaryKey:
|
|
185
|
-
createdAtField:
|
|
186
|
-
updatedAtField:
|
|
187
|
-
deletedAtField:
|
|
194
|
+
primaryKey: baseModel.prototype.primaryKey,
|
|
195
|
+
createdAtField: baseModel.prototype.createdAtField,
|
|
196
|
+
updatedAtField: baseModel.prototype.updatedAtField,
|
|
197
|
+
deletedAtField: baseModel.prototype.deletedAtField,
|
|
188
198
|
scopes: {
|
|
189
|
-
default: model['scopes'].default.map(scopeStatement => scopeStatement.method),
|
|
190
|
-
named: model['scopes'].named.map(scopeStatement => scopeStatement.method),
|
|
199
|
+
default: uniq(models.flatMap(model => model['scopes'].default.map(scopeStatement => scopeStatement.method))),
|
|
200
|
+
named: uniq(models.flatMap(model => model['scopes'].named.map(scopeStatement => scopeStatement.method))),
|
|
191
201
|
},
|
|
192
202
|
columns: await this.getColumnData(tableName, associationData),
|
|
193
|
-
virtualColumns:
|
|
203
|
+
virtualColumns: uniq(models.flatMap(model => model['virtualAttributes'].map(prop => prop.property) || [])),
|
|
194
204
|
associations: associationData,
|
|
195
|
-
serializerKeys
|
|
205
|
+
serializerKeys,
|
|
196
206
|
};
|
|
197
207
|
}
|
|
198
208
|
async getColumnData(tableName, associationData) {
|
|
@@ -227,12 +237,6 @@ may need to update the table getter in the corresponding Dream.
|
|
|
227
237
|
const enumName = pascalize(row.udtName.replace(/\[\]$/, ''));
|
|
228
238
|
return enumName;
|
|
229
239
|
}
|
|
230
|
-
getVirtualColumns(tableName) {
|
|
231
|
-
const dreamApp = DreamApp.getOrFail();
|
|
232
|
-
const models = sortBy(Object.values(dreamApp.models), m => m.table);
|
|
233
|
-
const model = models.find(model => model.table === tableName);
|
|
234
|
-
return model?.['virtualAttributes']?.map(prop => prop.property) || [];
|
|
235
|
-
}
|
|
236
240
|
async getSchemaData() {
|
|
237
241
|
const tables = await this.getTables();
|
|
238
242
|
const schemaData = {};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import comparisonKey from './comparisonKey.js';
|
|
2
|
+
import uniq from './uniq.js';
|
|
3
|
+
export default function intersection(...arrs) {
|
|
4
|
+
if (!arrs.length)
|
|
5
|
+
return [];
|
|
6
|
+
return uniq(arrs.reduce((workingArray, arr) => _intersection(workingArray, arr), arrs[0]));
|
|
7
|
+
}
|
|
8
|
+
function _intersection(arr, arr2) {
|
|
9
|
+
const mappedArr2 = arr2.map(val => comparisonKey(val));
|
|
10
|
+
return arr.filter(val => mappedArr2.includes(comparisonKey(val)));
|
|
11
|
+
}
|
|
@@ -1,16 +1,11 @@
|
|
|
1
|
+
import comparisonKey from './comparisonKey.js';
|
|
1
2
|
export default function uniq(arr, toKey = undefined) {
|
|
2
|
-
if (toKey)
|
|
3
|
-
return uniqWith(arr, toKey);
|
|
4
|
-
return uniqWith(arr, a => String(a));
|
|
5
|
-
}
|
|
6
|
-
function uniqWith(arr, toKey) {
|
|
7
3
|
const map = arr.reduce((acc, val) => {
|
|
8
|
-
|
|
4
|
+
const baseKey = comparisonKey(val, toKey);
|
|
5
|
+
// Prefix with underscore to ensure that the values cannot be _interpreted_ as integers.
|
|
9
6
|
// If they can be interpreted as integers, then the keys are ordered not by the
|
|
10
7
|
// order in which they were added, but in ascending numerical order.
|
|
11
|
-
const key =
|
|
12
|
-
? val.comparisonKey
|
|
13
|
-
: `_${toKey(val)}`;
|
|
8
|
+
const key = typeof baseKey === 'string' ? baseKey : `_${baseKey}`;
|
|
14
9
|
acc[key] ||= val;
|
|
15
10
|
return acc;
|
|
16
11
|
}, {});
|
package/dist/esm/src/index.js
CHANGED
|
@@ -35,6 +35,7 @@ export { default as Env } from './helpers/Env.js';
|
|
|
35
35
|
export { default as globalClassNameFromFullyQualifiedModelName } from './helpers/globalClassNameFromFullyQualifiedModelName.js';
|
|
36
36
|
export { default as hyphenize } from './helpers/hyphenize.js';
|
|
37
37
|
export { inferSerializerFromDreamClassOrViewModelClass, default as inferSerializerFromDreamOrViewModel, } from './helpers/inferSerializerFromDreamOrViewModel.js';
|
|
38
|
+
export { default as intersection } from './helpers/intersection.js';
|
|
38
39
|
export { default as isEmpty } from './helpers/isEmpty.js';
|
|
39
40
|
export { default as loadRepl } from './helpers/loadRepl.js';
|
|
40
41
|
export { default as pascalize } from './helpers/pascalize.js';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export default function comparisonKey<ElementType>(val: ElementType, toKey?: ((a: ElementType) => string | number | bigint) | undefined): string | number | bigint | ElementType;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export default function intersection<ArrayType extends any[]>(...arrs: ArrayType[]): ArrayType;
|
|
@@ -36,6 +36,7 @@ export { default as Env } from './helpers/Env.js';
|
|
|
36
36
|
export { default as globalClassNameFromFullyQualifiedModelName } from './helpers/globalClassNameFromFullyQualifiedModelName.js';
|
|
37
37
|
export { default as hyphenize } from './helpers/hyphenize.js';
|
|
38
38
|
export { inferSerializerFromDreamClassOrViewModelClass, default as inferSerializerFromDreamOrViewModel, } from './helpers/inferSerializerFromDreamOrViewModel.js';
|
|
39
|
+
export { default as intersection } from './helpers/intersection.js';
|
|
39
40
|
export { default as isEmpty } from './helpers/isEmpty.js';
|
|
40
41
|
export { default as loadRepl } from './helpers/loadRepl.js';
|
|
41
42
|
export { default as pascalize } from './helpers/pascalize.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
window.navigationData = "data:application/octet-stream;base64,H4sIAAAAAAAAE62aUZPaNhSF/wvPadOkTdrmDdglYbK7EKDpQ6fTEfYF1JUlVxbbkE7/e0cGbNm6vpK9fcT3nO/IwpZky7/9MzLwxYzejSYgk0PG9OPoxShn5jB6N0oEKwooXlalbw8mE6MXo0cu09G7V69/+vdF5Z8yATJl+oYZ8BFulaRoYAYWesZlOjnNGBeQbtT56Fim9jACD5uozBtIlGZG6cJH1zWSoIFliNkeDvrGed5hHed50D3hssM94TLont7NO9zTu3nQPc9ypQ3oDsS1HOTcqb3C+r6qBQn3fK+Z4Up+AJED+kdisiB3DZozwb92nmMtCLI2msmCJTa+A+YoKNqtTPQpNz7kUqC9T5jvifK8F2rLxAPL4EGZNSDBbQVFe1DyTrEU0nFRqIQzvD8wFUX9dAR98jHlYcq3YnKPDFflYdJnx4X0QZmZOmJDUrNOkT4zwdPy/G61Vsh11hJQrLExmm+PBtaGGchAOv8Vlwb0jiVQvPRlTejrN2+x4XGqZHkIQ7ZFJPAyts0lN4vcnliBM31dDHaRG5pnBUFQfWM7VyDdrRE+KvZy91I90pRQsEUOkuV8nRwgY0utctCGA07t0A7Arw9KmwNzb4hwTmWKCNyccphxEOli+yck+N+ASyn4lGVg/zKn2eaUl6uWS6Hl/u7nH1+9ee0SVJYp2TjBc2zZgsLj0vJQml1EbXgGbez1eNC/nSopoZxobDd5nFY9yCtvrPpyvwfDUmaYx+3QxfGvg5bXm61yFG1qB9epEsdMojinHscjUH0pdh7FT9KpR/Hu1P4OnkCgsGsxlrR3F0FNzr69/OmgLPRnDn/fqxREPU5+hBPK7RJHJS2ZZtma7SBw2SC6fvzQX4YJoxLCHdS/V2oH3linHsXbsK2A8/iF8px6FO8z1+bIxLmr8CY2JSHqZcIci73S3ByyNrJdD/E+nPIDSGyqqCshxjzFxtzz0ZD3MmWMhbBqr4da5UjaTOmMmS7YpRrJejhmW9A0saGJ5C41z7jhT0Cdd1MUST5fnmOtmXeX+Yr+TGRJ1AXvWgjRKRNWeBeTJ+hHVCndFVbQmxjXEQ1lr4zzmgpfb3UKeyXcfsk1FAVXcizEYkeGtLRDc+QpPsdqB+YsJETnlNqBOSuITVnBMzLOh+IuOMrYqwVzaQBZImGaXtyHo/DWb56gJ9GOvwGmlfSitp/IECr6JBZDDd9vjm4oP+56wQxDEoN3tqMbyu91Rg3DgMTgPFTLBtL7nE5DPyAvPCI6uqH8PifUNAxI7BM2LKdafr0HCZonZFBb3Cupal+fKbnL9Ozk4K3cZXpucvgi7TI9N/n6oGif70KTetj+f7UG9DPaUpqHtaTXhd/p6pdtNJd7OqiUxFKvrQo8Wnq6vvyoB7kOdWRW9ea3g17VQ7wlKxKGvhiuK0GG5hnTp49wwp76m9UQa2X3krjcLzUkvGjsm51xniBEdG/E8pXnQtf3w5QJsWXJYzslytQnuX7j6rzzK39T0d2u3tkOIJjoaPvkoJe7JwgSJXsEvuP+FVlXQgy7Q1AYluVtRFUIEX7JU2bANtp5mY9tMp25AXl8WkxEPLfeV8XuzGY1yIp6rT3sffavB9D1Tu1M6dbXJmc2rhrGRm89Qtp/v+qJaW7/rXrP6ptXTcr33svhqZKFQRFVlUBsVvP3q/H9H4vl7Wq8WazWGMkTEUBFv5isoaiQPF0VOWd6GR2OQFgHsSBMeWPeQgEtCQGrtl5qzO4oy91H51uFJuDtD42PMWQKurhn8oQhnHIYspBoM+oqicgFT5jd7cEZVZmArDdzzLzezCmT2pkbEID3YV0lEMllrxsDXGukPeeGdQOuVQohVAFjIdzt5wKlYUIKrLKcue+mHNS5RJhTO7oEm+SrQsilRXSRbJEA7O0TAzPQmglqSENAgcoPt8pB3O5MzrTKZkchTp+OTJSLiXK6siU0JdpNNOFw3TjDEqoiAeByB84C1LYiZkFZh/
|
|
1
|
+
window.navigationData = "data:application/octet-stream;base64,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"
|
package/docs/assets/search.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
window.searchData = "data:application/octet-stream;base64,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";
|
|
1
|
+
window.searchData = "data:application/octet-stream;base64,H4sIAAAAAAAAE829XZPbRpLv/VWekM6lRtv1BpK+k2V7xmdnLK/lmY14FBMONInuxpoN0CAoqWdiv/sJVAFkVuIPIAG2PHOlDrGQWQVkveUvK+ufL6ry0/HFVx/++eLXvNi9+Erp9asXRfqYvfjqxTdVlj5+nRcvXr04VfsXX73Y7tPjMTv+R/fD64f6cf/iVff/L7568eJ/X3WS9I29iDo+FdtxMS/bIkTWqxeHtMqKmlZlQP7tKd/vfKH324fsMZ3QBYov07u7fVtlaZ1N6CPFlur5pioPk1raQkt1/CW/rySNuZRbqumncr+/Tbe/TqoiBZfpus+KrKmsLzehjpe9TuP7On/7kO93QqWk+HV6w9fJy4l++xKVF2t2Sp8Vb8viWFenbV1WEyrjkmJlvUHp7Z+/x5re/vl7+aB0qMqP+W7A3DtJLy+lRurbVEhigG/3+YQ6UHyZ3uMh/TRgAmdlXRm5hkQra8869uX9fTbw0c9KzoXEWmYZ11mP2LhiZcmlOdt9ecze7Pff3L4tiyLbNp3ieNZ6dyrC//wHLDdqd0TJrqnClIZ+oXHxzpnkrOGXX+qnQyaX+hL8/1kGfo/gCdAu2P7D/bdVVVY/4yqSX6Uv9FQ0Vd19cwvEnX8bFdYbX85D4p+y/SGrjtjyeCn5yJPudt9kd1lVpbf77K9F/tspe+utN82Leoayl1OCRnpBr43Ddf22OD3+Ld2fBobKwarR556hJlu/hvr2c50Vx8HpDVem/+iz1eePefF9scs+z68OefIZarOrysMyI+o9+Uy1WWQ2/MFldZk1gwx8I+l0MlINMkp9TPf5Lq2zt+X+9FiAoSouIB38uqd+bgaAEan+d6nQn7LDPt+m79M7JJL8KhX4vryrv8n2WY3kXX4Ui/v5eyTn54m1n7tMkd9k27JK67J6WxZ19vnSXfKizqq7dNvYBiszPoXc6Ev9/H9JJb5sSw9YGK/ogEr/j1hlW/o6lcc6rfOtXOm5/HVqD1X+kW5SJ/VeHrhOcbrdZsejXO+5/Gy1o8s5od6pFVzv2ba6A41/SGe3vK3B6/DorFp0lf8ir6SpUPvnH8zCmvlGDbyq+0w+nLCahUf/jV7VfVZ3r0otfVVNo4aGkOWv6vjv9qqOl1fllr6q4/CreszqdJfWqbx65IkrB77d7vsir/N0n/+D7Pan3w9/7vceCCP93cdZzfg4cQMGNozdU2CXeP5pdO0gXqzG4mQr1EvtBlbqX2f7srg//lxO6qMll2r7U3r8S1o8Teq6lLtC07sCbD36ikKxpXq+LbbV06HOgJ+XqaIll2p7vy0P043qSi3WUlZ1tKEYVHQpuFTX39odyqQuUvBaXZNd9SUtuVhbXtWndD+t61xueR++K6tsCEX1unFU+Dqd79OPUo1t0ev0/fUgshVW+Dqd32THuiqnxyxeeqnWN3d1Vgk/Zlz2GTS+LR8fc+A+GtZ7fuIq7SJDoiWv1janpVH5qzQLDTgu+wwa57SWPXGVdmnnYYWfQ+ecJvNHZujv0YPvHw9lVQ9xse5XOS3YD/CHSNLL/chUFdVqQEvuf/dFRfpY+as1v8+qdqE9Q3380Lw6zPIRx8rFvmGgNqH4tPz1dHjbPP710x/35W26/4H68S6+zYGS86jWm8NABMmbw0FujXmB+hQV87ItMvJemqoM8vL6XfVdmoN1U6SEllumaV/eT+gIJRZL/++8fvhz9jGbagorKtY3y4LP2sTGyxoXo//jIdvm6f5PZfnrQH89K2RFl2r0QVS7rGj241MqedmlOrOwZRukjWeFUcGl2g5ple732f7n7FhPtZCXXarzVOTbcpf9UFaPzUA6Ejh0Vj3wyOJWV/ljWj39Z/YUxQQMNJsXXq61/J9sW/9UllOjWVxy+betH6a/aSizuE+eZ8O36TEvpkY3UHyp5rFAIDrMTQYCjWrJi7s9j5kZmoFoycXfbH+6zyd1XUqJ9UTu1X2Z7rLdX8pdNjmssaIXffVx94f8+IdDVdbZNniYZrTzUaL7sa91qXVOThjSVd3I9Lu7jZZSQ9PED6MkdFLHJdrpbVnc5VM9Dj6w9H0+pMcWxYt0g+LXzlPfpHV6mx6z47dF4wQciHTtTVngsaVLrHRKZ1tkmfzQs0Xdf7EOisCGesPyxfTkXD5z5qYhFO3PDSF5d4gHZYpm+sXkgRS3T4f0ePTj3fdFnd1Xef309iEjceMCTS/HpIw3nbZt/C28O9SjzW9+l7cbLU7GhM5ao/iqDgdXoLXYhO5ZS7Ix9btbmUpfbrkatI4Y1TdnOcEUixHmmNLJYA76MK3s0GeOFqPjX1e0Jh1724Or0lG9sxeno2YNN1YT7Z6zv2LK9c1mpZyOR4k/x2vk5oO2isMvyyO8saiXEqNpKzXcUUqZltdt0UlVM4MwppUKgi562kNtBxr9Ka0Kof626O/b6EapIJih32hf26GRN7s93Qsr0JX9fZvttQqCkfrtDvUdaHjWHDcQVqEr+/s23GsVBKz1Gx7qOz0sxT7KuDb+t3l+ZrzkHPcwD7mERmSRhccf9PhrGdY0EOZwUeILzJAfR04dj+U29w6yv7TRWF+PeLnasKWRh2bs+Aen4yY2ZGAH3k69XYll2kZNfVCdaInzuq3a4CB2l572A/spoOz15YFppf0+3QvAHtiMIs1d8av1fgzBI2/quspvTzC05VIHVPgZTCr73PgV8vqvxTG9y35Mq/QxnGIYrczoU89h6G1s0nd5tt+NGzwv+SzvpM6KXbb7enQIi0o9R5vrgfOlXQh+/vt16zoXztavm2oNBt3XOQoMwXpen4tPqJvoVI13ysNWsWL6xHW6Pw6fmAJ6P04fkxLofBimeK3zsMfuFptoeyJp2InfDlVRsWfQuz0d6/LxbzLtqPAz1KECB6uA9rjYswyFvfNXcBgkpZZp5cDmOLUgfHkpsmj9lh/f//z91+lxtGG00DO16/3P348kdyBq+zkdrtB7rPOvu4HmXfXuUyEZpMATbD377DUaRi9jtWqeesaapU3o/j+y3WRlWEGhHbIz0k10w+iq/lzkWVp3348WAkqjUgvatZ1exbVF5uzAIsTSLPuaga5d+jUhPWOpYS7OucGnFtSi3Qf8yMSOVWH4kYXfN4qxOrYx4ey0MBxkoqLLd8Jk29kYzGjjedmlX7/KHsuPPpNGeJvvJ/emg08s1k4FTWtmpZeMFfuBcLD21e4nQsCG+2pHlse7Kym1SMtpKLlAp+A0lUNgSPZjOpBEoQ1ASCcyJQzKHWK4rdwpejv4LkZSf7UvQ5D1a1z6u+q7vJjYRPZKLtB28iHf79qQ/nF9oOwV7QvB5rIWkrJLRvn8WOfFdtR8SZkFGu7yYnRF2P6+UPJYWOxFviQodkzLt+n2YUpHW2aBht9OWTX6qX2BpfPJ3WRfubuij1ze7rQOUm6xJklf7JVcoC37nA/Gm3ZuqnySgg4G6WR39f8t8+LHKhuO12mDdXpFl6wop/UcrpGfF0VWNbUcXZV1hZZacvcqJK9reW+pjqODYVdgqWzJgEWLLXlP6XgT2t8XSp5uQFRqiZYcHlEiCvLRA0ljssu7u8Hosjb6qyuxRHq1G4r4bYW3BZb04f1pYgPYFlgqe2qSo4UW7SwapDC+m2hLLJB+nNqqHJfvTo6/jZp7+HmB3Lr8z6djth+dy0iZJRo+jw6W9efF42RdpcUxndxaxcUW+UKOx/qhKk/347Z5Kba0RZ8esmrUgroCS2W/QSkemPg3Y+kdJjX8MHRug2j4YSoackhDkX0aEx5+XrTSqqt0W1/463dV+Rg2NQ1//LEqD1lV5+MukDlCnsEXtU23D9muiT/4buhoWbtJYwWX6Z51pm3mgbYhPPLN12Pi/a8LpAbP6PusrrPqj6e02r1p4GQKM4Vwf+rAU8/jGB/JkN7NH9NJ0adc02N52KlzWpKAfVhXcAzs3tQe3U+7EEjJRfqC60Oir1dykb6dx3ESfb2Si/Q9F2D6d8VLzw6X3l7GHjFn6j/zxRwpv8cW98tvcP8VSGM5kP4mr+rRL3MpslRDU+D74linxXYCfPOiCzV+X/h4jHFdl0ILtfyQffqpybAxoYcWW6jpb9Ot+ds1bZkbwHq9npFEy1yZILXytQGzy7/Mj1l1zI8Ti6S42BLcURwf0l35KUDTdsn89GNV1mUTJ/XGZ2WEKf3IDC+X8QzL8Lu88MdhzpPHxG50oPwz1GQ5nF5qFT6OfXxP1JWQyZ8byxjEh3j64x9UF343sft+HT02EjvybXQGAU1OlzILjD09HvP74rxfnJgFWdElPqSsFilj5RZouhdqun9WTaOWyAsu0LV9SIv7Zikv0YcKL9Yp0LRQ/qHKPubl6ejnnu/KSvTZxh5aYpfpx2z31rfi51JmoUNPLPFa5fu9TyM3pwJjDy35yuJ4rqWEvaqfZHbbL7pE31ByObovnkgpN+7HT/f7p8EUdtSdHxdctCQRtIYWWuJ//O00mDupnem6EsvcMeXjIa3yY1lMrHx5wQVtuauy7B+ZzNhA2WdYCO1OA/nUWss7TdzFNx4Z8+ayIZ32a8WFl/ckoVJY+tr+JdQ98sw1vU6ofaD8slVZJ+C/pnw5oOyStnqXpLShoPDvwrQWupOmQksWx3t0Tqg/C4NX/rxck8/uNNWKpVve6bCYa6Jizukaxhf8l0JfZqN21vD6/NdluzZxdvo1eFi4pZryLPKyV26qxh3y129AjjAXc7ws/lKQ/pqhbXo8u2rgFL1+UHbhdikrwmmsiYG6X3TRNDhDIyos02lY7gHvnDqr+phWeeM8bJX5H73GWL5wdBiUJsqLEmo2QHbRpDal7rV4iguPjh/YrLLfTnlFJotJ9eSJ+brJdysPWZEe8h+rJi4t/5g1vP8IqgHL/UGNfs++mvcPZVU/pMVOqm/gAbniOJsV0sRKSAX//NP3f/zpzV9+effjtz+9+fndT++B6F6ZUeG9xBs/TwUqkQKjkmcFYXCh8ngMWt/BPeWvPiZsdtNeoufm14V5akN++OGzfr1a8Geuq0F1KsLFC2eRA3NRrx74ydm1oSaHdy3+f8fNlg5kX7/5+e2ffnn//f//7fsRUS/jYrjaoT4z145Yx1QykvAUrdRA8777/odvfvn2zds/zVP8mj4nrMLEjPHjn//69j+XVCV68Lnr8svPf/rp3V//uLxORMDiuklHO1InyRDH7TF6BT46o5k/osSRQFNUcIQ4jWrbTc0ORCEoK9OIwxSmRomXrJxQV+Qv25fgoi/6tdoCC2TDE11E9OiJrknJA+cLmPyJ8wWTWsAJIqZh5OSQsA3TOiZPRE1qgkH7TMtozP6ohqlzSkSR9JzSqL6hc0pEz9Q5pVH5w0FctPNNBnGJ3pnkZS3TIDwhTvTNPCG+QPu3n7fZoX5XEOfoghoNSJFxCUGtR8+192onOtc+U+uy9ySQ8AzvaMwvTXugYNM+qgeftCAaxk9aTMtGJy24+LGTFtMa0EkLrmHspMWohiJrgrjeZ03G4jEtrNwCTfi8GlExfl5tfByEp/joIDh6im+83vgUH634+Cm+UenovBcRPXbea1Tu4HkvInzyvNe4BuBKpsJHXMnjq0mY4SJa+49luBiVPZiBgK6/pzIQjGpAOTSI8LEcGuNyxyf5sRwa4+MwPOlJR+DRk57TsqcWjdMnPUd1oGwuRPpYNpcJKxzM5hJvQ6eyuYxqGTj5TzRMnPyfWLOj8+XRgn3sfPm0bMn2afp8+fjIjs6X04F97Hz5pOTpBgjOl4+POAMxRXTAmYgomlj1jUVIRYs7SYTUqK7hCCmiZzpCauJ9wSyJ0evqZUiUtwBjSlr9cUw57eXBB7a4f2f6kNb/1/5HXjxkVT6xtGbnHrtB6d3HrKry3bhvBpX+EtU6b3W/Ob+A8Y3k0ANfonL+owye6OFfryuIkyWKtMdGT66lgtnJaQX6ZZ+lBuhwcaR24FCx7F0TbPFtuKmxp6z9/1F0EU+eAkEvL4Vwh+5qMzgcCXRcCi3ScZ8VWZXWGQrZjPTEBRfparP6TuuKC0p1ST35kSqJLx81K75LoS3xZn9fVnn9cMl5G65T4D+Pmxm5YKp9cOSGrbiEHL2lvaqOC31JH5D1Q1b5gYr8Soxhogq/MnNYppyMBj+UPmAv242FRaJCz8LPBwWLjBLWff7aYLgSA0uFpXVgR2xnVKT/5KLa8Gsvs+MxvZ9Tj8sTy94GMby3UdLGZoGf7X4uw/++KXbfIe4keOZZzFKqR2SlkobO/kTiGk59sXm1ox/wcgv7D2X9HnjoeIFn+TRQqOg79Oo7+6Vj3VNveEQvfZ3hRPcPZf1deQKmH//8LK8SiBS9SFbTyQEXjnVIee+RmfqFnxGpnvqIw20mn/ByXQI+0Mp+f5aPiGSKviKv7LLPCNULv6OwBgOHn6HmiWPQwxpFsVIjKqcCpvij/SPRMtuFVZgy3pEXTaz366zYPjymVd8bff7lWSw2liay1UvVhihOnYJ0g0xTV2ihDsGredmWkWuIVkTpPit2afUNcpHRH+Vb9LuqfGye+DkHfbcn8iUrPrBioNUc0ft/38sa8jIqvFxnkX1qE7AI9fYeuK69379/J2xsKHmdtvf/9WehtlDyOm3vbv8H8Wms8Fx4uc663KV9B0lfXVfuGk2PZVWV/XSHSNm56HJ9Tw3Hr2Sto2WXa0REtK9rDIyKtAA+CrSMYNIBLeI9W0+ZaHM20DRZvqS+zqm0STKTlA0lXblrNMmGka7cNZr+7/t3P4hUtQWX6/JXwr27Eyi7lLzyawlnHFr2Go1/LrfpPntfV/Q28TG17IGrLEau9Vn0zVi+RIWvs1XxB124cInHl6cslQxobbFrND2WRd0PBwEDdVvuGl2ySe7a6c2v6kW9/VJyubas2Il0deWWazrsT/1Nb19RW+yqiVukqCu3XNNDenyPfAh9XZeSy7Xt8jvJh2qLXafnB9H68VLyCvvDCWyAAY7nsRnQlZAohvQxi/IZ3J0KD72P/9H9NLoPjUQd8jodFNb9KBXXYdhwuLovMfpdXMcmIQ/Z4pAKhl9GBdFz3Xy+IieT258mDuP2bqnnEtsL6tv/Hgee/Ijsn8v7cuDMpP9J7lvYlvuyujsNXJdwEfaSFMTGSCo2NEiVRbl9qMqhBMNEW1R0hr5ZR36j1gkP+3KFcUzGR8DoPz6Lv62TI+T8H8e2QT9W5W4g9eZZDSu1QE9R7rKxN/LyUmBRK37OQEwjqX/7+yLZ32Qfs315eMxADDVRERe7VtO7aqpJqLBIa7zUgkv/s5rj+Hp/RHIT9XAPTidcWnAuMFv2bVnus3TEYC8F5r+RrB7YD11eCikyW/6pEGiICy1pw/dTrz8qs6wVkzpYqSXt+HrqU0dllrVjUgcrNVtLL7VJTwNMZTJ2EmxEW+mjg9L+LH7WRkos0UYXbp6En8Fgc23Ld6f9/um/Tuk+v8uz3V/KXRbf6UxWdeKHpUu+h6fDQ1bgVen5N6mwvLjLqvdd2qyqqd4lbPZd9bc8++QrGIcgXRTOev7aShF5M6pCnpJXoM6qIzvHQTVdfhaLPH77eCD3CxBp4RepoOZk8U/ZAb2B7iepqEN63A7tb86/SYV5ev5jStw0F2Hn36TCqmyfNkmAvhkR2isjFX58SKts1zzxY5Xd5Z+BbF5EvFn5qcn32w/daP73eYJfzpJkMS++OgMRCrfZPaAfRENXYIHsDMUCXSRnI9kXxuV+3u5PzSp6XDwtJdNCjS/6hsTgmv+f2ARTMVFAFBEzGQnFd9I/NU/kxf2PVbbNj3RMClvq3u/innAeLedPbOJnxZUp0l+z/A4Nkd1PYlH0FkcipqwmEtPFIr6GdfE/iMXUaeOv2uX/yGa82smHZpnP29bvtWNmc/7/WdL+1C0xuLjLD7Pk/dhNNFze5YdZ8t4HW8l78i4/SD/eqRh1AdKf5SLz36Co/Depp6484Dx6E8srWc7FTsxUssWmEoND9KHKjtEwNSj/dVR4UFU/99Oy5hB1XXJZJ9BLaznQ6FzS2JHJ9DkbmZ8bp4ZT55LW5cOR/yRJxbC+dCRNxXO2Ky2ezg2TtKup10DD9vmvEo1tsS/ftEbRuW0bSeN81YaMUdi8/HdrXx41UPT18rEWPqb1FuVw5Xq7cl++hV7T+YIhUQtD5YZG0QaESUa0ttzvMHY2mqZzctNh09dtqAtmx+PPD6lk3CRFf4eu2Co7W6tohjhXcaK176pvm5fyczmjJvSZ36/9Z63nF7Ga8yIulR54I/f+rE4lNIG49Jd/C0Rf135R82k9pxs+xxoGHvtdX0XPJkRTFaz5wMs55o/5Pq3yWrLwiAp/+RdxUdc13w7n9STtJ9UcaPWnstq9n9Py3gNfvvWxyvMbSCRvgFV36NvXVb6t/3vuuxh47HewB6D4/F6syDJQ1QfeTkHSuQ3XqRhJ6PacbS/K+rzYEa0Fmopds3eKFL7OC9kW4PLUMzfZ1+C8GBINA5fnR3ZcwpV7XJfmoX/1+wh1OL+R9cw38hzbGfaB/h3eSs5ey81cQ3mOTVBcJf/Uv/q9tJU4j5Zz38uzbJ3iKvmn/tXvpa3E+X9Eswh5L8+142J9u33wX/12LvU4d6i5L+hL7NNwJc8S/l3eGqnQ+fWJVm/g9T3z7i6uMHn2X/3uoqqc/3/uW/tym8LB2v7bWB+u07nA3HXCxF6SkJafsmKXVce/UB/2BbiQX6Xopn3kHbmzoCfvXTGB5kiGKB+3cIlXIaln3tdpnUWhmCS9kuCx8WgFanZ3ebbfXaPlZSdhJIJ4oo1DVdundZ0V11XuLOPZq9cLQFtSPxij9kwV3IXYp8vDcQjXkuoOinz2yh/LU0USKi6p7FnEs1eO559fUjvRjXILq0eH6UV1m7xlb1nFDjSOa0nFWgHPXrHs86Gs6ib711XVi8Q8f5c4P/WfOO+evGcwSc9RVTJP0rvu+TR5/k08S56fGJ0U+6WeYQ4cEDox5YEKDyluXwueRAa106eurUJz++Kb5vbFFI8ZQ5Vgz11bjcqvnnD3G6oCeeZ51I+k6hyvw+XBBRXphS+1Pa5ZW8c3WdYhion/Pu8c3aVD4xNil9/lHSjttW/gpB4T/hI/KBqOBusChilpbQYevao+7S1pM1/7S/TY3Hqwk1f353x+sipE5a/U3V7yKlcePzBbe3wupUAXyEC1oezIbX3DOuU3ng8pfd3+Yc6bY2k12ifbf8ZfxJuqAvkNRirWPXDVR7jP6m4B0dwG1BU/fldW78KnFhqlRM7cms46QstrJD5Hu2CsGEwsLxszyONX9t//s0vrVFaLX9qiV2pMJy5tH5xKlozY8fnw9IiOLeKP35W96rv/H3Jb2TfyF91/6lKLsXNuwvcwdtMarJD4ovRp3entsaxuf5xbA/TY7zx3/Atmjm7e6JyqX2LWeAcuah2p0ruRa1u/3ItonK/nvy4+5mEHOH4hkZiRlfp/NxfonVeK35VVnNgjLNdxoVkHGrCI2Js3pmz66GUvc8fQvSJBDf95nuymSsSZ8JesTqPZpdUxUGyBrv5MQlWcf50v2b/Yt+X+9MgPZPGfF8geFnuVxGZFDV8E+Xm+bHLE9tKdqJuKKBoqO1/rj2mVPr5P77LxTwyKXaFr4jWicvO1Tb7EK98cWTmPS19Q958bz8T77UP2CPs0+Xm+7L/lVX1K9+HdwqrHJWZp+H4Hxrrwn/MOtFX5Y1o9/Wf2BOTFP8472EY8P+3xekJi0v3+NiVXMva9RYPPLK6FIFNAvxoL0wPQTRpbGszWMXW4TdjGGS8JZS4YqLY0XQHX2eTUOtbp44EpOP//LGl/9ffZNZUik/CPVXnIqjrvDX0TpRdqFqhbqEM0Wz3DNPW2fHwsi9YzEQa9kGX6uwYh8GZNlJ6luZXyZr9HTmT26xLJ35XVY1oPCG5/XCL3h9PjbVaNSo+KLNHRDMJ5kzpi5N3EZZZoCV8w9rdFKkiBK+W/fyir+iEt+JHnkZLLNX6dHvnY2/v9CunlbvR1Nb9fJ130sqKCy/WFLg17+2C55dq+PR9TfrPfk3yvQCErOh4DNbYvF8qemnJH2zHEepY08nyYuH14fnX6gXLSj1I8ievbFP1SH+Use+lH8e0YPjI+v5HkhPeCj+LFLP0o74pMWl9f9At9lIvshR8ltGMI8y9pZPdRuofnV2fxR/kpE9b2p+xLfZBO8sLP0bRgyN1fzW1d9yV+CU/Orcg1nyH8l2jKHHvuy30kpGj5N+PNHfqER+TfWFTJ17+cZV1Z2ZmfmSe2BG1oiyxfkPxw2vP9bu/3ZzWNs8BZJuCrKYmmFGh8PU/tzI8Wtj7j9WlKLP9k7MokoCGUuFbD5AqVFHsWXaIxDJW/WvvUiogUexZdc1oalb9W+9TO8FLqOTTNaGZU/FrdkytGUuxZdM1oaFz+Wu0zFD+DzrPH5Y/NRQj5dkwpLysOJ2ZSeg5GEvQ5UPRaVf2XOq3zGd7uWcQMJ8HQM886ZY8qmTWNDzZxqf9AUrU5joRBefMWAUjM1Bwz9MwX/5TLnA2DTVzqdZBUbY77YVDe1Z9ycnoZeuZLf8qFLorBJi71VUiqNsdpMSjv6k9J2d6ES2P66S/9eZG6az80fwGD22lS7vmq/foXJvdZGtE3i6gtv/Y44jUt+HXkgNbz1vuRnpO+vuKPY0lBn7vmT7fZlKdhdvUvMr9QG5YOJlm1fCjxz/5eA8lF2XMNI6HpU4PIuH9kToUvA8hIYO886V+sE/Yr/yxdUFbr6zogqvpzdb+B+ss635wd6eBDV2zZ4guUkFJfYpGGrrrjESK9YlfpksRdDBReord58LvocG+k6fzz3B39+UHmK+3v41nJeTFKzYXc6UAIdvwjkvv3Vy/yYpd9fvHVP198zCqfu/yrF/q1ed3k7LwLEQlffQjaXjX3SLZnq3fl9uT//Htb7G9Zc7ipKRxK/8fNi1cfbl4l6vWNWv/9768+dA/7H/x/dDIu/+MfVC9efVDoQdV7UEUP6hevPmj0oO49qKMHzYtXHwx60PQeNNGD9sWrDxY9aHsP2uhB9+LVB4cedL0HXfRg8uLVhwQ9mPQeTKIHVy9efVi9cu71RkXPrXrPraLn1i9efVgjheveg+vowc2LVx826MFN78FN/P0bc1A3r4x9bTY6toC+7ShmPN56sPkA+4kNSDVmoaAJqb4NqdiImiz6HxQ0I9W3IxUbkmrMQ0FTUn1bUrExNbmnPygHPq7qm5OK7Uklwy+7b1Iqtqkm1/MHBc1R9e1KxYalGnNRK/hw37ZUbFxN9vsPav1K29damfjhvn2p2MC0NzBom7pvYDo2sCZp+wcNBzbdNzDNRig/REHr1GCQig2syaD6QeMBrm9gOjawJkfgBw2tU/cNTMcGphub0dA6dd/CdGxhTR60DxoOdrpvYTq2MN3YjIYWpvsWpmMLa9KGfdDQwnTfwnRsYXoz2DF038J0bGFNBs8PGg6bpm9hJrYw4y0MmqfpW5iJLaxJMvvB3ICxwPQNzLBp0M+DCj0LJsLYvpoUix+MRs/2zcvE5mUagzF4Au6bl4nNq0lO+MFA2zR98zKxeZnGYAy0TdM3LxObV5O99oOBtmn65mVi8zKNwRhom6ZvXiY2ryYR6gcDzcv2zcvG5mXV4NBp++ZlY/Oy3rygbdq+fdnYvqwZ1tw3MMuWWn6tBcddC1ZbsYVZN6y5b2E2trAmefkHi7qF7RuYjQ3MroYV9w3MxgZmG5OxcMC3fQOzsYHZxmQs7FS2b2A2NjB3M1ht1zcwFxuYa0zGwh7p+gbmYgNzenDYdX0Dc7GBucZkLF5X9w3MxQbmvIHB7uz6BubYer4xGQu7swNL+tjAnDcw2J1d38JcbGGusRm7Adbp+gbmYgNzjck42Kdc38BcbGCuMRkH1zKub2AuNrCkMRkHTTvpG1gSG1jSmIyDpp30DSyJDSxpTMZB60z6BpbEBpY0JuOggSV9A0tiA0sak3F489Y3sCQ2sMTvGKGBJX0DS9imsTEZBw0sAfvG2MCSxmYcHPKTvoUlsYUljc0k0MKSvoUlsYUljc0k0MKSvoUlsYWtGptJoIWt+ha2ii1s1dhMAi1s1bewVWxhq8ZmEmhhq76FrWILWzU2k0ALW/UtbBVb2KqxmQRa2KpvYavYwlaNzSTQwlZ9C1vFFrbyfgloYau+ha2Ya6KxmQRa2Aq4J2ILW60HJ4xV38JWsYWtGptZQfNc9S1sFVvYurGZFTTPdd/C1rGFrRubWUHzXPctbB1b2LqxmRU0z3Xfwtaxha0bm1lB81z3LWwdW9i6sZkVNM9138LWsYWt3eCnWvctbB1b2LqxmRW07XXfwtaxha299wva9rpvYWvmAWtsZoV9YMAJFlvY2lsYmp7XfQNbxwa2aUxmDa1z0zewTWxgm8Zk1uqV06+ddfHDfQPbxAa2aUxmjXZzm759bWL72jQWszbo2b55bWLz2jQGs7bo2b51bWLr2gx6wTZ949rExrVpzGUNn+3b1ia2rU1jLWtomJu+bW1i29p49yo0zE3ftjbMw9qYyxoa5gY4WbmX1VsXHHXDb/Hj5P/a5xuT2UDrDL/x55mv9aYxmw321N4Ab+sNc7feNKazwc7aG+BwvWEe15vGfDbYX3sDfK43zOl605jQBtlq+Ik/zvyuN40VbeBIGn7jzzPX681qaFcafuKPM+frTWNKG+y6vQHu1xvmf73x7n3svb0BHtgbZn3ebb+BtquQl7/n5vfWh60XOvqZ9anBEU4hVz/39Xv3PR5dFfL2c3d/8PffID+dQg5/7vH3Xnw4YCnk8+dO/+D1x+5z5Pbnfn/vyodjvEKOf+759858OMwr5Prnvn81OKcq5Pxn3n8V3P83eOQBAEAxAqD0sAdNAQagGARQOvg4BjgTAk3M+vSwI00BFKAYC1A6WB8e+wAOUIwHKD3sT1OACCiGBJQO1AnzLkAFFMMCSg/71RQAA4qRAaXDrgEPvwAOKEYHlB4BUIAPKAYIlAlGiAdgwAgUgwTK+/3VDR6BASdQDBQoE6xwjboRYAWKwQLlAYC6gd0Q8ALFgIHyEEApvIAA0EAxaqA8CFADrBeAA8XIgTIjoyBgB4rBA+V5gBrgxYAfKAYQlGcCaogZAytkEEF5LqAGuDHgCIqBBOXZgFK4HwCWoBhMUIEmDDBgwBMUAwrKMwI1wIEBU1AMKijPCSB5UoAqKIYVlCcFA0YAwIJiZEEFtKDwSgbABcXogvLEQGEcrQBhUAwxqMAYMJJWgDIohhmUJwcKY2kFSINiqEF5eqAwmlaANiiGG1TgDRhPK0AcFEMOylMEiD0VYA6KQQflOQIknwpQB8Wwg/IkQWFArgB5UAw9KE8TFIbkCtAHxfCD8kRBYVCuAIFQDEEoTxWURhFCCkAIxSiEcsEI4WwCQIRiJEK5YIO4FwAYoRiNUB4wKIN7AQASihEJ5SGDwkYAmIRiUEJ5zqDwQASwhGJcQnnUoDAGVwBNKMYmVBICkLAVAjyhGJ9QHjkoA3cVgFAohiiUpw7KJPB5YIOMUigPHpSBNgg4hWKgQnn2oAy0QYAqFGMVyuMHZeCKBtAKxXCF8gRCWTgKAWChGLFQHkIovKcHzEIxaKE8h1BWw10p4BaKgQvlWYSyBgsAJsjghfI8QmH2qwC/UAxgqFWIg8MDIWAYikEM5bmEwhhXAY6hGMhQnk0ojHIVYBmKwQzl+YSy0AoBzlCMZ6gANCDRVYBoKIY0lKcUykErBFBDMaqhPKhQDloh4BqKgQ3lWUUTooyMCLANxeCG8rxCOehdAHhDMb6hPLJQDroXAOFQDHEoTy0UprwKUA7FMIcKnMPBcRCADsVIh/LwQjk4DgLWoRjsUJ5fKActEOAOxXiH8ghDuQ3+gig2k5mg5xgqucECgA0y8KE8y1AJtEGAPhRjH8rjDJXAuRjQD8Xwh/JIQyXQBAEBUQyBKI81VAJNEFAQxTCI8mhDJXAmBiREMRSiAgtJoAUCGqIYDlEecagEWiAgIoohEbUJgcHQAgEUUYyKKA86VALHQMBFFAMjyrMOhcGuAmxEMTiiPeyAY7AGbEQzNqI961ArZL8asBHN2Ij2rEOtkP1qwEY0YyPasw61ghO5BnBEMziiPexQmBJrQEc0oyPa4w61cq/s+vWN5jUAQcOMj2jPO9QKmbAGfEQzPqI98FArZMIaABLNAIm+CeHpyIQ1ACSaARJ9E0xwIMocRBAzQqLDMQiMfzVAJJohEh2OQqxxtDlgJJoxEq2GY/E0gCSaQRIdTkRAyKEBJNEMkugASdY44h1QEs0oiQ4HIyCn0ACTaIZJdItJcC8AnEQzTqLDAYk1Dn4HpEQzUqLDIQlMlzVgJZqxEt0elMBB8ICWaH5WItAS6BjQ6LQEPy4RYAl0DGh0YKJ3YsIbIabcGh6aYFYYYAlej2p0cIKfnAi0BC+HNDo8wU9PBFqCl0MaHaDgJygCLoEba43OUPBDFC0twWMROkfBD1IEXIJhv0ZnKfhhioBLMO3X6DwF4yU68BKM+zXgJZrxEh14yQaOBQCXaIZL9Agu0QCXaIZLdMAlGzyWAF6iGS/RgZdA3qIBLtEMl+iAS3DEgQa4RDNcogMuwTEDGvASzXiJDrwEBw1owEs04yU68BLooNIAl2iGS3TAJRv8DYERMlqi7XBYvAawRDNYogMswVELGsASzWCJ9uxD3+B+CGCJZrBEe/qhMfvWAJdohku0xx8as2sNeIlmvER7/KExe9aAl2jGS7THHxqzYw14iWa8RHv8oTH71YCXaMZLtMcfGrNbDXiJZrxEe/yhMbvVgJdoxku0xx/6Bk+KgJdoxku0G3ZWawBMNAMm2gVDxJYMkIlmyER7AqIVXBsCYqIZMdEegGgFd1gAmGgGTLTnH1rhF4DONDIr9PxDKzidAF6iGS/Rnn9oTG41ACaaARPt+YfG5FYDYKIZMNGef2hMbjUAJpoBE+0BiMbkVgNiohkx0Z6AaIxONUAmmiETnYTjtNgKATLRDJnoJBypxeMpQCaaIRPtEYgeONELmIlmzER7BqIHTvUCaKIZNNEBmgxstAE10YyaaE9BYByjBtBEM2iiPQTRAyeLATXRjJpoT0H0wOligE00wybaYxA9cMIYcBPNuIn2GEQPnTIGdsi4iQ7cBK8LADbRDJvoVTBD3JMANtEMm+hVMEPckwA20Qyb6FUwQ9yTADbRDJvogE0GPE4Am2iGTbTHIBoifA2wiWbYRHsMog3uiYCbaMZNtOcg2uCeCMCJZuBEexCiMcDVgJxoRk60ByEaA1wNyIlm5ESvR+wQkBPNyIkO5GRgLAHoRDN0otchywBcoANyohk50Z6EaLzRBeREM3KiPQnRkCBrQE40Iyd6HYwQ9yOATjRDJ3odrBD3I4BONEMn2pMQDRmyBuREM3KiN8PJUzQgJ5qRE+1JiLa4GwF0ohk60R6FaHxqWQN2ohk70Z6FaHxyWQN4ohk80QGeDDh8AD3RjJ7oTUh3gfshwCea4RO9GQ4s1ACfaIZPtMchGlNwDfiJZvxEex6iMQXXAKBoBlD0JpghnpEAQNEMoJibYTs0gKAYRlDMTbDDgRQaIA0GQyjmRg92JAMQimEIxdwEM8RpOABCMQyhGE9END5dbQBCMQyhmIBQIIQygKAYRlBMICgwEMAAgmIYQTGBoEAObwBBMYygmEBQIIc3gKAYRlBMICgwEMEAgGIYQDEBoECMbgA/MYyfmMBPIEY3AJ8Yhk9MwCfYb2wAPzGMn5jAT7Df2ACAYhhAMQGgwOnQAH5iGD8xnodofMbfAIBiGEAxAaDAiCwD+Ilh/MR4HKJxngAD+Ilh/MS0SabgisYAfmIYPzGBn0AMaQA+MQyfmIBPIIY0AJ8Yhk9MwCcQQxqATwzDJyZknMLJEgzAJ4bhExPwCQwFMICeGEZPjB4OZTAAnhgGT4weDmUwgJ0Yxk5MYCcQxRvATgxjJyawE4jiDUAnhqETE9AJ3hgZgE4MQycmoBMYFWgAOTE8FVUgJzAezaBkVDwblRmJKjQoIRXPSGVGogoNykrVS0tlBqNJDMxMxUwwkBMYTWJQdiqeniqQExgXalCCKp6hKoATvBRBOap4kqrATWA8mUFpqnieqoBNYDSVQZmqeKqqgE1gNJVByaoYNjEBm8BoKgOwiWHYxARsAqOpDKAmhlETE6gJ9DUbAE0MgyYmQBPoazaAmRjGTExgJtDXbAAyMQyZmIBMcM4aA5CJYcjEBGSCs8IBYmIYMTGBmDg4hgNgYhgwMQGY4NQ3BgATw4CJCcAEp78xAJgYBkxMACY4BY4BwMQwYGI8ANEOjgEAmBgGTEwAJjgTjgHAxDBgYgIwwZ0YABPDgIkJwGTgeWCEDJiYAExwQh0DiIlhxMQEYoKT6hiATAxDJiYgE5xYxwBkYhgyMW44VYwBxMQwYmICMcHJeQwgJoYRExOICU7QYwAxMYyYmEBMcJIeA4iJYcTEBGKCp1IATAwDJiYAE5yrxwBgYhgwMeGMCf4GgJcYxktM4CV4KAK4xDBcYjz90Dgy1ABcYhguMZ5/6JWCOwoATAwDJiYAE5z6xwBgYhgwMclwZlIDeIlhvMQEXjLQAsBLDOMlJvASnH/IAF5iGC8xq+HAQgN4iWG8xAReMtQCYIWMl5jAS3B4qwG8xDBeYlbDqYwMwCWG4RKzCmYIzRjQEsNoiVmNWSHAJYbhEhNwCc6nZAAuMQyXmNWIFQJaYhgtMYGW4DcAYIlhsMSEYyYwlscAVmIYKzEjrMQAVmIYKzHrMRsErMQwVmICK8FJqQyAJYbBEjOSTssAWGIYLDEBluDEVgbQEsNoiQm0BIc4G0BLDKMlJtASHOJsAC0xjJaYQEtwiLMBuMQwXGI2IVEzHowBLzGMl5jAS9Z4LAS8xDBeYgIvwTHGBvASw3iJCbwExxgbwEsM4yXG4w+NY4wN4CWG8RITeAmOMTaAlxjGS4znHxrH+BoATAwDJiYAExzgagAwMQyYmHDgZMDJAYCJYcDEhBMnA04OAEwMAyZ2BJhYAEwsAyb2Zji+1QJeYhkvsYGX4BBfC4CJZcDEBmCCQ3wtACaWARMbgAkO8bUAmFgGTKwHIBqn9LKAmFhGTKwnIBrH6FqATCxDJtYjEI1jbC1gJpYxE+sZiMYxthZAE8ugifUQROMYWwuoiWXUxHoKonFmLguwiWXYxKqQvh7nCAfcxDJuYlVIYY8tEXATy7iJ9RjE4CBXC7iJZdzEeg5icJCrBeDEMnBiPQcxOMjVAnBiGTixHoQYHORqATmxjJxYD0IMDnK1gJxYRk6sByEGB7laQE4sIyfWkxCDg1wtQCeWoRPrUYjBQa4WsBPL2IkNV3XAGE0L2Ill7MTqYIgD2e5RuntmiDpcqIAtGcATy+CJ9TAEoRcL0Ill6MR6FGJwgiQL2Ill7MR6FmKg49ICdmIZO7GehQw9D2yQsRPrUYjB+ZEsYCeWsRPrWYjBUbYWwBPL4In1MMTgKFsL6Ill9MS2abrgtA7giWXwxIb7PHCUrgXwxDJ4Yts0XbgC6NYFZoLhYg8c5WsBPbGMnthwuweO8rUAn1iGT2y44QNH+VrATyzjJzbc8oGjfC0AKJYBFBtu+sBRvhYQFMsIig23feAoXwsQiuUXfoQbP3CUrUV3fvBLPzwTMTjK1qJ7P/jFH+HmDxxla9HdH/zyjzZPF7ZkdP9H7wKQcMUMtkR4BwizRI9FDI6StegeEH4RiOciBkfJWnQZCL8NxIMRg5MUWXQhCL8RJJAUGGBp0Z0g/FIQz0UMTHJk0bUgjKNYj0UMDpK1gKNYxlFsSNSFg2QtACmWgRQbUnXhIFkLQIplIMV6MGLwpT8WkBTLSIr1ZMTgi38sQCmWoRTrwn1H2JABSrEMpVhPRszABUAApViGUqwLdogNGaAUy1CK9WjEDFzHA1iKZSzFejRicJypBSzFMpZiPRoxA7fjAJZiGUuxHo0YC1eHAKVYhlJsMuzEtgClWIZSrCcjBkeZWoBSLEMp1qMRg6NELWAplrEU69mIwVGiFsAUy2CK9Wxk6BWiu5GYGXo0YnCUqQUsxTKWYpNghrgjAJZiGUuxSTBD3BEATLEMpljPRgyO8rQAplgGU6xnIwbH2FkAUyyDKdbDEYNj5CygKZbRFOvhiMEhYhbQFMtoivVwxOD4BAtoimU0xXo6YnDGJQtwimU4xXo8YnCAgQU8xTKeYj0eMTjAwAKeYhlPsR6PGBxgYAFPsYynWM9HDL5nxwKgYhlQsR6QGBxhYAFRsYyo2PVwWmsLiIplRMV6QmLwfT0WIBXLkIpdD6e1toCoWEZUrAckBsYpWQBULAMqdj2c1doCoGIZULGejxgc4WABULEMqNj1cFZrC3iKZTzFejxiYKCUBTjFMpxi18NJrS2gKZbRFLsJJghXpwCmWAZT7GbEAgFLsYyl2E2wQBQoZwFKsQyl2M2IAQKSYhlJsZtggNBhA0CKZSDFbkYMEHAUyziK3QQDREzUAoxiGUaxmxH7AxTFMopiN8H+UJCUBRDFMohiNyP2BxiKZQzFeSZiVijOzQGG4hhDcTfD9ucAQ3GMoTiPRAyMNXYAoTiGUNzNsP05QFAcIyjOAxGDQ0scICiOERR3M2yADgAUxwCK8zzE4MgQBwCKYwDF3QxboAP8xDF+4jwOMTiwwwF+4hg/cTfDJugAPnEMnzgVTBDfQQnwiWP4xKkRGwT0xDF64gI9gZOgA/DEMXji1IgNAnbiGDtxgZ3AOcgBdOIYOnFqxAQBOXGMnLhATuAc5AA4cQycODVigYCbOMZNXOAmcA5yAJs4hk3cyM3mDlATx6iJC9QEzkEOQBPHoIkbudzEAWjiGDRxAZrAOcgBZuIYM3Ejd5s4gEwcQyZO28E5yAFo4hg0cSNXmzjATBxjJi4wEzwHAWbiGDNxIzebOMBMHGMmLjATPAcBZOIYMnEjF5s4QEwcIyYuEBMcWOYAMXGMmDhPQAyOi3IAmTiGTFxAJjiuyQFk4hgyceEedHjBkAPIxDFk4gIywWFNDiATx5CJay9Eh98QEBPHiIkLxASHRTlATBwjJi4QExwW5QAxcYyYuEBM1nghAIiJY8TEBWIC74hyAJg4Bkxce0U6nocBMHEMmLgATHBUlAPAxDFg4gIwwVFRDgATx4CJC8AER0U5AEwcAyYuABMcFeUAMHEMmLgATHBHALzEMV7iAi/BMUUO8BLHeIkLvATHFDnASxzjJc7zD4NjihwAJo4BExeACY4pcoCYOH6TeiAmOKbIocvU+W3qgZjgmCKHLlTnN6oHYoJjihy6VJ3fqh6ICY4pcuhidX6zeiAmOKbIocvVe7erhxN4cECE96szQwzABMckOXTHOr9kPdyyDlPZOnTPOr9oPRw9wbMqumqd37Xu6YfFIU0OXbfOcInz9MPikCYHcIljuMQlw4EMDuASx3CJ8/jD4pAoB3iJY7zEefxhcUiUA7zEMV7iPP6wOCTKAV7iGC9xHn9YHBLlAC9xjJc4zz8sDolyAJg4BkxcuOEEH2d3AJg4Bkyc5x8Wx1Q5AEwcAyYu2Qx3BMBLHOMlbjWcQtMBXOIYLnGeflgck+UALnEMl7iRXF0O0BLHaInz8MPimC4HaIljtMR5+GFxVJYDtMQxWuJCri54FNEBWOIYLHGefVh8bZ0DsMQxWOI8+7A4LMsBWOIYLHGefVgcluUALHEMljjPPiwOy3IAljgGS5xnHxaHVTkASxyDJc7DD4vDohygJY7REufhh8VhUQ7QEsdoiVsHQ8Q9AeASx3CJ8/jD4rAoB3iJY7zEef5hcViUA8DEMWDiPP+wOCzKAWDiGDBxHoBYHBblADFxjJg4T0AsDotyAJk4hkycRyD4ImAHkIljyMR5BGJxWJUDzMQxZuI8A7E4rMoBaOIYNHGbkQERQBPHoInzEMTisCwHqIlj1MRtgh3ingCwiWPYxG2CHeKeALiJY9zEeQ5icViWA+DEMXDiPAixOPmgA+TEMXLiPAmxOK7KAXTiGDpxHoVYHFflADtxjJ0k4cYTHFeVAHiSMHiSeBhicVxVAuhJwuhJEk6gwOR/CaAnCaMniachFsdlJQCfJAyfJJ6GWByXlQB8kjB8kngcYnFcVgL4ScL4SXITDBFacgL4ScL4SRJuhcdxWQkAKAkDKInnIRbHZSUAoCQMoCQeiFgcl5UAgpIwgpKo4RViAgBKwgBK4oGIhUFJCQAoCQMoiQciFsdlJYCgJIygJCMEJQEEJWEEJfFExFpEMBJAUBJGUBJPRCwO60oAQkkYQklGbodPAEJJGEJJVDBChCASgFAShlASFWwQdyPAUBLGUJIRhpIAhpIwhpJ4JmJxVFgCIErCIErioYjFUWEJoCgJoyiJHp6UE0BREkZRkpaiwE4AKErCKEriqYjFUWkJwCgJwyiJxyIWR6UlgKMkjKMkesQIAUdJGEdJwtkT6EBOAEdJGEdJPBexOCouASAlYSAl8WDE4qi4BJCUhJGUxIMRi6PiEkBSEkZSEhOsEA8EgKQkjKQkHoxYHBWXAJKSMJKSeDJicVRcAlBKwlBKYoId4p4IUErCUEri0YjFUXEJYCkJYymJRyMWR7UlgKUkjKUkHo1YnDgnASwlYSwl8WjE4rCyBLCUhLGUxLMRixPnJACmJAymJJ6NWJz4JgEwJWEwJfFsxOLENwmAKQmDKYlnIxYnvkkATEkYTEnsyKQMWErCWEpi7fCqAqCUhKGUxAY7xD0BsJSEsZTEjoyHAKUkDKUkdjW8qgAkJWEkJbHBCnFPBCQlYSQlsSOTMgApCQMpibsZXlUAjpIwjpJ4LGJx5p8EcJSEcZTEjczJAKMkDKMknorYFR5JAEZJGEZJ2hReKLQiARQlYRQl8VTEwlSWCaAoCaMoiYcidgX7AIAoCYMoSYAoODgrARQlYRQlGaEoCaAoCaMoSaAoODgrARQlYRQlCRQFv0EAURIGUZJEDb9BAFESBlGSAFFwcEUCIErCIEoSIAoOrkgAREkYREkCRMHBFQmAKAmDKElI4AVzEieAoSSMoSSBoeCkMwlgKAljKIlHIhZHZySAoSSMoSSBoeDoigQwlO7//v7qRV58zKo6231f7LLPL7768OHFL7/UT4fsxat/vvglD/+p1q+8ohdf/fOF2rz46p//++qFVe2/pv3Xtf+uwr/uJvyrVNL+oVX3h+n+cN0fq+6PVroy3VPWhj+am8vCHyvd/rHu/ti0hU33P81BgPaPrnrrrn7rVfdH15JNV3jTFd50hTdd4c2ma5bq/jDdH67749z0rrDqCquusOoKq65w90Jd935c935c935c935c934aGhv+WN10f7Rtb7yh/o/GDdH+Ybo/ku6PVk6zS2v/6H7qPmgzXbd/dIVdVzho/99XnZGF/+7My//W2Ft6eyyr20N6PNYPVXm6f6BG1SC/s1U1UE8kcbvNjkcqxhApwUQEQur8Y2zgkYUHU54Ws9s1BfL6oSx/pdKaqybO0nT4HBJpu+wuq6r0dp+divy3U7Yti2NdpXlRR9KpcCOVnRWnx4/p/hQ1WxsiyopFVVVZRW9vs6FylFQQf2/K3JCv4DZSOXmR13m6z/+RRdWypHVWKOyuzqptlaV19J4csY4kmSspGEkkj7yvZCWXt8uOdVU+UVGJvYhaCS2NiOrXLXFEoNC8GoHHNO5SCfmW0s7dyQG1UkTajG95OuzYt0xI91kJx4uLJFAzYmUroenv78sqrx8eo76YrC6CmiSpMkn7uAMRw1JJO0U0yb+Fwsq7qAPRHpR0c1lihSNFERmqoS+qOWYmlMGr5GiVbFclYSc6HvP7Iq3rKr89xWbR3GBKxjBhT4rlHeNhmnxPLe1Jx2O5zdM6L4vHrE53aZ3ePvVWY4oOk0b4NS6S/aO0pqsbannCLxPLO8ZmmFAzbBcxWs+W/Nspq57il0rGgebiwpkCj3VaZ82P8RJiQz5VEykokoqsqAmNvUiyMyUd4+WRo8sjYVPPorqGxrXb0NotFcneXULfnazf3KbHbLtP44WcUnTwsjJjuU3r7cMvx/wfrPNZS1dgsvHvNrsrqwzM/kRWImygFwWma0csLZlTLT69OjoOyuwsCOrPiI58QaGd3Wb3eRGZAX3hVlyhfVncH+sysntq9lI5xfbhMa3iRfiKzqdrYbvKcp+lccs0bZlwcXt7yve7XZWlj8ftQ/aYRhUjlikT9tTsoB7LXbbPizq7r/L6afuQbaPmbugGRsnWNdt0+5Dtmunlji3o13SYVbI2b9N9VuzSiptXk0yXfAjZUnCbPmbNgj76EjdkgLBa9vI6QbtIEu3STeoHmaRDXqe9StHJ2Ar3Y9v0mBf38WhPh1HhyLB9SIv7bDew/rihQ6BwOA0SmRxH5cgWWtt9WcRG4KgR3Ajf+L48Zul+v7vdlkWRbf0MHtkpXWcIa1buy+rutI+/ITUHLdtebMv96ZFVx2i67mnXy81F5TMEZnWdVfenph81boq0jk1Xren4oYQvsnx8LIvykBXpIQ8jUnn7P9m2vsuz/S5edtA2NCFdQvmHdBuvNZSi71Ro0I2cKj+Wxa9ZvO6jX6i5d1wmrTOa6AVaunpOWteWMcIOcpZZfsyqKt8xKycG2dwYIxR5rKvTtmZjMK1m50ttPXJnL2Drj1u1O73Ox6nV2TPaPtlcZhn+6ByHJrHdH9076DyIzdUA7R/dT2fvaSenyQrZ/tE5TZPOASncvG7LU7w+bW4UI/25q7G0Q/YWboouSpRwCxbEkD1DbId0U5cIp1kvcZeG3hZ3Zjq2SkcwLy77XGfFkVcv6iUzpN3nRRARGTNt6gxhZXWXF7vbp/hTOPophMNWJO4uzffZri7bD1Tsmv+OV3xk6DJCn1OnIyyLeaVXtNLCd3A61mXjas13aX/Coh5X5WT203gB4rWCpWsFmVk3ravzR7Z20XSMbgcXq2V2uEtj/84NHfCVsFa38ZBHx7zOuaPFsi6D87Ys7vJogbWhQ8uNbO1IJXInjKY+XOM6dLOS9brdbX+0IpYhbnCzxywa33dkZXTnsxZ+zNtdVR4iKyNfUyiC7SI0dQEboWtgd/uY31d8h0rsXSiFO7k20XQqm6B2t1W539+m8U6L7pZlYrLb031s53ReEo6tu2xbVmldVtuyqLPP8WKL2o7wDXXi4tUfHVmELynbVk+HmFBRH3tz6ZpMzl162sfrATo+KSO05CDnkFbp4zG9y+A6nb5/6QCa7TO2saW7SCOEhkEMXgzQtYWSLXqAi0nTlaN27erMCF3arcDB9c+aLgqEFpLf3cUzxYrOFMKG5nd3RfkplkPRrxZOpnlVPw3tmCnGlI5X+bHOiy1bx1JnzKpl980ttiKJjdsoHi7oMsQIX3ojJT1EQ/qKzIHrGZVJD4cGsZaH3nqGOs7VjfBLtiLLQ+xJphBZCX1OQVYfmkRjGh1FnHAVFwRjx7wyVJ5wVGrk3cY+U9JNZ3yMnt9cU1ew6cJvjNCHdJEZBsq4pXQ6WMkW1BeBfc5EK7o6x+zManweTxDUZGaIAU2la4zVDEsOsnoMzFLflJvVxsYfEEdp0G3dekY7hx1ntN/O+K7546Gs6jjMIiENFW7sgqyGxhVbNqWu6cphxlvbl/f3GXOgUOuQTg+trH32MYvROnXQqjlD+b68L2NkRgeQ5n4QsaiwNM7L4iHbH7J46RaRUeHc1cgsq2NWtdEzvbHFUBDghD6yVuzHPPvkocVFPvPqWWqGbo5hn1d3Q0M0xbDrGW+DLRtBt6YIdS1cOgbJdRT+Zqgf0goD6gJSOr/PGMTSEUy6eI/lIVIe6VjR92pmvNdhG9A39IXOGD8uIuMvRDuCW8+YBesm8q7P6ywNuHPCwJUgsEqLY9rzQGv65XUXhWqkTolG8se8qk/pHuxtLPUwOenuvyoPA8GGZNST+oWqBjSgaEO6vxHa++kQj3G0OsIAwawAG1RFp5lui+Rk1tcKHIjiomuceTWMQY+NomPnyGHmRvuskL62gsCCX9PZ3ggd4FnspzXUF2yFEQdZsSvZLpLOokrWz7PiYzwTk9ZY4XiW/XZKY3xII/eaBNotmxG+nEYcm8lpWK47u2VlQ3o/OpcCXCXseF5KvGSkEQbanMGQsFaft/vTLutZAn3/wh1L9jk/xjtHRbGb6lCVETqMss+Hfb7N61PRzPt+AYB8RnSDoISB5tlnv1zepWxRRbcGwoiS7POhyo4c+Bg6kFnhQsejo13GCU20JxB6i7LPdZVu68sq7K4qHwNKaSbTQzMVVHXOwgNpQIgWxqr03GVNDkiyFumOTAjdcHd54dcOZ/jKKTH1bGihJXEgpSx1aXSQ1tyIq7j7JUu3D/HagVK5jbxe7GM7yqG6UzPmRi6PV0w5uttan7GzbAZsJJZtuDyvKe13wvVhENcAw1gUZQBntH0jm1wvMnkFqTO5O25kbmTj7F1exZt9RXu0OuN7M0McaDl1yKvuuJMxwo+zT+s6i8cd2oWdMAT5rsqyfwzs2DQdXrVwN9QMNohrarprNWthK6vyMT+WsRzq4Bee42nk/M+xHwRHkchGOOZV5WOI04lF0SXYRvruy8fjb/tYDl2qbmRb2btT4cdKtgKidM0JY83usyJrQF/P301G3u70nfBwUiSS+wrpiCdrbCeOByMlEW6b19qzCydyfV/kyYy1k3as8+1DHk+MdLkvFBbZV+SXkL73unMdZDuyL78rqzboLFZAN9TCPUSjAp/boPFwM+o7gICiE3Gyifo+A0PuiggSrsvu9+Vtuj+7zpsue3fa75+aDUJ+l2c7703jXnVDA/as0GUaVHFRTTZjwkW7g6VCgHuRWZT1MbYpTV+HER6TCgL7DhlFh2WthP3Pry2q+oFFd9OzL64LbnNCJk+ElpXfyMWx7IYSN3fTxccJ92APbNsQRT9LJTyyY1g22ntIpbBoXhudl5EKqbJmo5WC2By6OrmRjc0P6fHIewJ10Vsh1mjOoLIQLdoJhDGcD0+Hh6zgoeE0LMMKPbJnSSxgnbpMhEFG+Y4HLVkaIOiEzqB8n/8at4v6uGy3RHXCjhgQUvDgRhiJzFtCSBtEDfiBE9JdhJCWHWmhi2a77tw6Stb18uIuI2TFL1XPZJTAkT5yobTPCqMQhrQRRbEO+gWFp2zy4m4PUCJdRXZ5GJTQHZcXd9F4qehkroQUqwlNiGZeIkPoncqLIqv+p4y/v6IRfmrd7t617sKmxYbQyr58frbmoGfCjPCguj8IxAAQ9fxboYeqkVMd+1Hyhh7htMKJIj/uGmxaHvz/RlWja0qhNyWS1rjRjkwmdX0J98f50cf/xKsJGvUjZBz5sR+lQ8dWJe1Tx0EUruieSguXDK28/rlZ6okywim2FTaEGymfkBtILBE13NI1uBMeuMyP2eMh/rDNbebEhIUj0jEvfOx2/Ckiti7socci+1Q1UZZMVpS+Q9hLjw3tz4/8LBBFvloY+JkfD1W563s8DfX/WqFLJz8e67w5zRv3BOqyE5sG2ssqyh+V+Bv2xgpK7a0wjCE/AkOg28PzCRhhOHF+jLBtvPOir6w7maOFo1rPP0GDaLpTOYnwQ/yac0ZDhclEPB2z/dMg/aadaSN7dfuUe0mpN6dLeGSEk14jDTlJ6QC+OcfNCmuY3dW9FQQNgFcd6NddVicjdEN1ovdlGp93idL3CM+7dMIOVcblKRdFhXXxeUJAs8+aLE9sd00t0XarQydc2HUS8daaru/tpsuGJXQU9rc0dNHdrfWc8HjlPmc5YRTdIamOCBtp5dh32VC77JKNaWHeoEZYxsyGuk+EyXSCmBDOFa3+ickID4s2ohpXQDxXU0MRulT3ZeRFWJFmCQOzQNBgNHWFx4TpI/bl/ae8fuhFDtKoVyG/2pflr6eD3yvcPmFfHfVbCcNV4y9HgxaEDoWeL4lutRLXvq5E6NHtJ2yga1Rh5NJjk/8j7sl049LNDE7oDXpMoyOQiiZyU6szN+v+EFr8Y/p0mxWnOFeTpS7RpIvySIRnKh6z4zG9Z+FVlHolXRz4+RjtqpvRzgcShL0EBtVHvhGZGDY50uRS6nz02HR/bGRG/ZgXp9h/QsNdrPBMLRjYyIAkrUpZlNuHquSHLGl9hAv+x7Jg0aL0aKQVuh56qCCKvxeLiBcJMUeTffoiO3owtOcok4YhGOGyoMiiU0CKDhtaGG9QZJ/afV4f1NIqCZenRdmENrHQMjqjCfdmRVmEiXbo+BVd9BjhwbWiZDG8NE5YuLgr7+4Y0VF0nFVdvlQjPHXO8CcVJQycKIuMZ4ajqZW67KqJEIi1mDLd7xufOcuIQf0RwrGglXdXVo9pzcTRdFI3s6rX69D0zJQTLps6WafH26yCFaSppYR721booWqWwvnHrPcWNXUo6i5GLxEGPUepS9Kqio+eWyo7EXq3+iKPD6VHeXEYLvUiJcLENZFs7h6xdK2bCIPBYonljrWf5hMVxjP1JOLm02iARBgfFone+twzINEM9QMk0l5PJV9CIkHmSroyFU4KQ8L7OShpDxbOxQPCwTBGbVnIUQaEVxkTTQ1PuCIeFh3+C1sNjbRLhIHLkSbANyyNMEyEe+lIaG8J7qiVSKeuWGIziMYy6bJe6LYHmZlimVEGwgXWHGT2u0mcRXDWXNQTPGAJ1JyFZ5eRhl4njDIpCkP3hwQPVJ12F7NgVgkaeuN/lP1Z6GgfkIsrHqVeFi49gYL+2BRlYRY6g4cED1Sd9kjhHgVoGBBOu6Zw6xIJPy9vfPxdvo2l004qDK1l0lG0vKW+xETo4R6QO/BaovyfC7roWezYjEz9TYkwfmlSS29UoA7nRBi/N6UF9APag4XujyktHRRtzk3wiZs6+xJhIJFUX1b1tFFDFubaw9pG+8uKmp0Q88Zq6opn0aSZjxLh/riT+ZAe2OaKBu8JE1+ehbVvAG4oV9F1AvMmgN6rBTut6Jzl2bE4qzP4pLD8yI2lrpZEmCicCwTLG3qYIBFyjfIQe/3onGeF6RbC+UYWyk5jYG1384mTzqLVjvEEOuyp8z01wjyxzWG0/T7b+zzwzXSfFc3wENMh6o8T7k87uQ0njzOHkQ/c8UolzNDDMy41hLWfPUtRb4oSdvtDetz2M+9GAbHCceosiYVXUmggjD4cuNZGUf+avuC6LnXn+YSQ6iij0OKJvn5GQBqQK+yYvYQENJLPCRcajZDYb04+b8fQldALf7j3x0579x1EDl6ZpP2JmV0SXWF1Tskk7IeNOHAWj7q0hCzoIuoXYDyaOjG10NfoRfbO49E1iur4uBFuNw77E0vwTkONlNDFFKTE5kFemfD04mHPAQ9l9cKoYxjuQE2iuxXMCPMIHarsY1bUPp0b99LTExlaCGcbeXl5amKOTk069oHDLtTihAvPZqWQVk8sSEjR5Gmqo25auJG+yOSdlR696w4aqvPtZ8KzeLF4trqhx9CFlPgi7yNPSqFodIWWjgeVT8wdYxWKjYRSymYpVJUxoKEnBTt+rYRexkNVfmQ5qaMcijIpvfBRRR1lqrtbT3f31GnhIUQvt/miPPWbpp5JI0QOVZOqPo5UowHQXfp1K5wOqybT/BPMp0gD1lwXzCO83CUSO5hVkc5wwjVRCC0tyvquPPE8yDRkT5iSq+crpkt94axbZfu02ZIM5DuiC2thZpT+qK2jtNTCC7yq7LH86G8SCMlBj9vywK8souv05Bz7Jn15SH72eZsd6rKgWZVi+k0DNoSu/qCK6ombQUf1cwyIcJLsy55uAj3WLFzmVU32idhpTqMbnOsuuxTGpgV5fSpI8785scF5WezgHT2vKpx1gyB+bo5mGHXCY5CtpH4uHkO3fk54cCRI6x0LNNQb44QkoJXFGmmoE8YJXf7t2cBm+xiv9Wh8SDsXCh1gTdRoXrHYR8q2dXemy4q/6bGs4igI6plTwvV6xQdsQ1f9Vrgd9FLy4v5QZdu8lxeGTqhWGBpcnYpwa+X5UlM2SdNwY2G+gGPa3M35j2xHbrngUQyKxlppYRTQWXBPmqYbH2EmCX67lqZCtDA8shGyCzfo1OXA+p1u74Q9Fh2Apl+iC1NNhE6l3qRho0GpXdIJA1PATBolZRX6zajzO/Y4UuIkPFRFhbXHLUmKS+CTsnRN4YTJOagW2clOSw+zOGFoWU/NwJFOS7PrOWnvJMJ7Oy1Dd0ZOGEd1ftFxb4qyCM5rOFspUO9aIpzU6dfnF2/RXAJdoL4SxkYMJrU0NCzeCWHXRVoxI/sD7bxWuGAaODFND0Iqaf9nuUPoGr87DCyMGjoOZvig+y/htus4mOFD08lGuDk6ZjW8GZC+e2HWm2NWw7O7dAUgzGJyzOo+AjN0LLNS03tIq2zX7NgOVXaXf44tjIZ6C2P7j/ljvk+biwrjlSFdSAtZxbFIf818B4g99vSFCc/3t6LiOtFQJSvcTx7Lu7p/HwQlR10+OiU8wM8XlobuDa10yCyrms+gLkqvO0tMP2ZPRRfuCUMFGnG37J1TkxLeWn4sT1V8UNhQT5kTBoscD+kndg6BNkkoI9vm6b63QqZ7KGGeYJaTS9H1jr7pzpkI09E0Z6mbCzjzf2SSqYNGqlnh7WjHOq1YZh/qupO2upHC07lSm5B+iDqt46gCGgksjPA51nk8gBIJ3YJAOuuEw9DtSrD8VPQvOaYDvepO/Wihgw3L7++AqBPovKIXhmE2U8q2/lRWu6FBnC4LhXG7aJ6i31voMT8+FdHXpjsNkYDe8KioR0Z1o7YWYjJA8AzdmzmhCTYJDI91+hhfwEU/oxO62OsSJkSk2UytMBy6ERU7wtcR45Dt7OqSJ1WkeS2sMP7fS+kd1aEbFCtkknUJkjPSXBZWeCSmEcTc+NRPaIXLm7oMp+XjWYACxC5tmBHmJqnLfdncxdzvc5pCXCtcltflY1lV8c1LmnpszEb65nkCShpgZYXHNuoStYuGbwiHpIH0BIoOb1r6Easmq+PjL02cZe9ONU3jVLQw6Vb9mdWKenxuumHqfIeOMM6cw1pDd7+uy+mdCA3tVAxciU3BuhVeG3QqIHqjHaE7YGyE+6OzyCHsRrMSaWG04KnIt+UuK5pzU43nhAulsWxCT9KpyH+L3x/dVwrjB07FaEQCNR9hdNypGNj2mihBqNRWhja+1FaEAbteGFpS0GFAuGQ7FceHdFd+CkFrbaj006Eq67LpLel2m3kHYhwzQP1Zwjj4k79CdBffeBpZoGwJE7Krx1+XSjmf7hY6JC7Z2kk3GQhFpw4PJ1wATGWDt7T2TjiXtEKH+jUdNYRxr61E7DOiO3stHdC8QHzRIzUfoa8xiBvIkU4D0ZSQVrQ3FMfOAkpMZeNOJ6af00hHMR2zhPUSGtGABmGkZycr+pLRga95deptHWhnEFLOy63QvVs6NHUeGKGNDd4yTcN1hJjpIquXNZTGdCVCmNgPtKJjnRJOG15K7CjQlHpb4fFZwV1kJrJ9YfVCPq/IwugZI6FVBCl47FGRf0q4T/6UVvHykabUU8Kjk58esir+gtRE9c05RkZYp0YcizpQNFRA33Qzl9Ab4iWy7AaKuqP0TRf2KpxbvcTzzWd3ZdXL8mjp5bpO6DTDYvt8kJJTJ0QTn/L9vgHPE9yZvhUhyhtzAVEfh3Dj/ZSl8YBHcxdYYdTtU5NIpOr5JehILOm6f3/14pAfsn1eZC+++vD3//3f/wc4Zc2slmoCAA==";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<!DOCTYPE html><html class="default" lang="en"><head><meta charset="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>Benchmark | @rvoh/dream</title><meta name="description" content="Documentation for @rvoh/dream"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="../assets/style.css"/><link rel="stylesheet" href="../assets/highlight.css"/><script defer src="../assets/main.js"></script><script async src="../assets/icons.js" id="tsd-icons-script"></script><script async src="../assets/search.js" id="tsd-search-script"></script><script async src="../assets/navigation.js" id="tsd-nav-script"></script></head><body><script>document.documentElement.dataset.theme = localStorage.getItem("tsd-theme") || "os";document.body.style.display="none";setTimeout(() => app?app.showPage():document.body.style.removeProperty("display"),500)</script><header class="tsd-page-toolbar"><div class="tsd-toolbar-contents container"><div class="table-cell" id="tsd-search" data-base=".."><div class="field"><label for="tsd-search-field" class="tsd-widget tsd-toolbar-icon search no-caption"><svg width="16" height="16" viewBox="0 0 16 16" fill="none"><use href="../assets/icons.svg#icon-search"></use></svg></label><input type="text" id="tsd-search-field" aria-label="Search"/></div><div class="field"><div id="tsd-toolbar-links"></div></div><ul class="results"><li class="state loading">Preparing search index...</li><li class="state failure">The search index is not available</li></ul><a href="../index.html" class="title">@rvoh/dream</a></div><div class="table-cell" id="tsd-widgets"><a href="#" class="tsd-widget tsd-toolbar-icon menu no-caption" data-toggle="menu" aria-label="Menu"><svg width="16" height="16" viewBox="0 0 16 16" fill="none"><use href="../assets/icons.svg#icon-menu"></use></svg></a></div></div></header><div class="container container-main"><div class="col-content"><div class="tsd-page-title"><ul class="tsd-breadcrumb"><li><a href="../modules.html">@rvoh/dream</a></li><li><a href="Benchmark.html">Benchmark</a></li></ul><h1>Class Benchmark</h1></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/rvohealth/dream/blob/
|
|
1
|
+
<!DOCTYPE html><html class="default" lang="en"><head><meta charset="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>Benchmark | @rvoh/dream</title><meta name="description" content="Documentation for @rvoh/dream"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="../assets/style.css"/><link rel="stylesheet" href="../assets/highlight.css"/><script defer src="../assets/main.js"></script><script async src="../assets/icons.js" id="tsd-icons-script"></script><script async src="../assets/search.js" id="tsd-search-script"></script><script async src="../assets/navigation.js" id="tsd-nav-script"></script></head><body><script>document.documentElement.dataset.theme = localStorage.getItem("tsd-theme") || "os";document.body.style.display="none";setTimeout(() => app?app.showPage():document.body.style.removeProperty("display"),500)</script><header class="tsd-page-toolbar"><div class="tsd-toolbar-contents container"><div class="table-cell" id="tsd-search" data-base=".."><div class="field"><label for="tsd-search-field" class="tsd-widget tsd-toolbar-icon search no-caption"><svg width="16" height="16" viewBox="0 0 16 16" fill="none"><use href="../assets/icons.svg#icon-search"></use></svg></label><input type="text" id="tsd-search-field" aria-label="Search"/></div><div class="field"><div id="tsd-toolbar-links"></div></div><ul class="results"><li class="state loading">Preparing search index...</li><li class="state failure">The search index is not available</li></ul><a href="../index.html" class="title">@rvoh/dream</a></div><div class="table-cell" id="tsd-widgets"><a href="#" class="tsd-widget tsd-toolbar-icon menu no-caption" data-toggle="menu" aria-label="Menu"><svg width="16" height="16" viewBox="0 0 16 16" fill="none"><use href="../assets/icons.svg#icon-menu"></use></svg></a></div></div></header><div class="container container-main"><div class="col-content"><div class="tsd-page-title"><ul class="tsd-breadcrumb"><li><a href="../modules.html">@rvoh/dream</a></li><li><a href="Benchmark.html">Benchmark</a></li></ul><h1>Class Benchmark</h1></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/rvohealth/dream/blob/7f7e4f25c839b7fed13819d01f27f19b01227da6/src/helpers/benchmark.ts#L6">src/helpers/benchmark.ts:6</a></li></ul></aside><section class="tsd-panel-group tsd-index-group"><section class="tsd-panel tsd-index-panel"><details class="tsd-index-content tsd-accordion" open><summary class="tsd-accordion-summary tsd-index-summary"><h5 class="tsd-index-heading uppercase" role="button" aria-expanded="false" tabIndex="0"><svg width="16" height="16" viewBox="0 0 16 16" fill="none"><use href="../assets/icons.svg#icon-chevronSmall"></use></svg> Index</h5></summary><div class="tsd-accordion-details"><section class="tsd-index-section"><h3 class="tsd-index-heading">Constructors</h3><div class="tsd-index-list"><a href="Benchmark.html#constructor" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="../assets/icons.svg#icon-512"></use></svg><span>constructor</span></a>
|
|
2
2
|
</div></section><section class="tsd-index-section"><h3 class="tsd-index-heading">Methods</h3><div class="tsd-index-list"><a href="Benchmark.html#mark" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="../assets/icons.svg#icon-2048"></use></svg><span>mark</span></a>
|
|
3
3
|
<a href="Benchmark.html#start" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="../assets/icons.svg#icon-2048"></use></svg><span>start</span></a>
|
|
4
|
-
</div></section></div></details></section></section><details class="tsd-panel-group tsd-member-group tsd-accordion" open><summary class="tsd-accordion-summary" data-key="section-Constructors"><h2><svg width="20" height="20" viewBox="0 0 24 24" fill="none"><use href="../assets/icons.svg#icon-chevronDown"></use></svg> Constructors</h2></summary><section><section class="tsd-panel tsd-member"><a id="constructor" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>constructor</span><a href="#constructor" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3><ul class="tsd-signatures"><li class="tsd-signature tsd-anchor-link"><a id="constructor.new_Benchmark" class="tsd-anchor"></a><span class="tsd-kind-constructor-signature">new <wbr/>Benchmark</span><span class="tsd-signature-symbol">(</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><a href="Benchmark.html" class="tsd-signature-type tsd-kind-class">Benchmark</a><a href="#constructor.new_Benchmark" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></li><li class="tsd-description"><h4 class="tsd-returns-title">Returns <a href="Benchmark.html" class="tsd-signature-type tsd-kind-class">Benchmark</a></h4></li></ul></section></section></details><details class="tsd-panel-group tsd-member-group tsd-accordion" open><summary class="tsd-accordion-summary" data-key="section-Methods"><h2><svg width="20" height="20" viewBox="0 0 24 24" fill="none"><use href="../assets/icons.svg#icon-chevronDown"></use></svg> Methods</h2></summary><section><section class="tsd-panel tsd-member"><a id="mark" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>mark</span><a href="#mark" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3><ul class="tsd-signatures"><li class="tsd-signature tsd-anchor-link"><a id="mark.mark-1" class="tsd-anchor"></a><span class="tsd-kind-call-signature">mark</span><span class="tsd-signature-symbol">(</span><span class="tsd-kind-parameter">message</span>, <span class="tsd-kind-parameter">level</span><span class="tsd-signature-symbol">?</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">void</span><a href="#mark.mark-1" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></li><li class="tsd-description"><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><span><span class="tsd-kind-parameter">message</span>: <span class="tsd-signature-type">string</span></span></li><li><span><span class="tsd-kind-parameter">level</span>: <span class="tsd-signature-type">BenchmarkLogLevel</span><span class="tsd-signature-symbol"> = 'log'</span></span></li></ul></div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">void</span></h4><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/rvohealth/dream/blob/
|
|
4
|
+
</div></section></div></details></section></section><details class="tsd-panel-group tsd-member-group tsd-accordion" open><summary class="tsd-accordion-summary" data-key="section-Constructors"><h2><svg width="20" height="20" viewBox="0 0 24 24" fill="none"><use href="../assets/icons.svg#icon-chevronDown"></use></svg> Constructors</h2></summary><section><section class="tsd-panel tsd-member"><a id="constructor" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>constructor</span><a href="#constructor" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3><ul class="tsd-signatures"><li class="tsd-signature tsd-anchor-link"><a id="constructor.new_Benchmark" class="tsd-anchor"></a><span class="tsd-kind-constructor-signature">new <wbr/>Benchmark</span><span class="tsd-signature-symbol">(</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><a href="Benchmark.html" class="tsd-signature-type tsd-kind-class">Benchmark</a><a href="#constructor.new_Benchmark" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></li><li class="tsd-description"><h4 class="tsd-returns-title">Returns <a href="Benchmark.html" class="tsd-signature-type tsd-kind-class">Benchmark</a></h4></li></ul></section></section></details><details class="tsd-panel-group tsd-member-group tsd-accordion" open><summary class="tsd-accordion-summary" data-key="section-Methods"><h2><svg width="20" height="20" viewBox="0 0 24 24" fill="none"><use href="../assets/icons.svg#icon-chevronDown"></use></svg> Methods</h2></summary><section><section class="tsd-panel tsd-member"><a id="mark" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>mark</span><a href="#mark" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3><ul class="tsd-signatures"><li class="tsd-signature tsd-anchor-link"><a id="mark.mark-1" class="tsd-anchor"></a><span class="tsd-kind-call-signature">mark</span><span class="tsd-signature-symbol">(</span><span class="tsd-kind-parameter">message</span>, <span class="tsd-kind-parameter">level</span><span class="tsd-signature-symbol">?</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">void</span><a href="#mark.mark-1" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></li><li class="tsd-description"><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><span><span class="tsd-kind-parameter">message</span>: <span class="tsd-signature-type">string</span></span></li><li><span><span class="tsd-kind-parameter">level</span>: <span class="tsd-signature-type">BenchmarkLogLevel</span><span class="tsd-signature-symbol"> = 'log'</span></span></li></ul></div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">void</span></h4><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/rvohealth/dream/blob/7f7e4f25c839b7fed13819d01f27f19b01227da6/src/helpers/benchmark.ts#L12">src/helpers/benchmark.ts:12</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="start" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>start</span><a href="#start" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3><ul class="tsd-signatures"><li class="tsd-signature tsd-anchor-link"><a id="start.start-1" class="tsd-anchor"></a><span class="tsd-kind-call-signature">start</span><span class="tsd-signature-symbol">(</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">void</span><a href="#start.start-1" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></li><li class="tsd-description"><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">void</span></h4><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/rvohealth/dream/blob/7f7e4f25c839b7fed13819d01f27f19b01227da6/src/helpers/benchmark.ts#L8">src/helpers/benchmark.ts:8</a></li></ul></aside></li></ul></section></section></details></div><div class="col-sidebar"><div class="page-menu"><div class="tsd-navigation settings"><details class="tsd-accordion"><summary class="tsd-accordion-summary"><h3><svg width="20" height="20" viewBox="0 0 24 24" fill="none"><use href="../assets/icons.svg#icon-chevronDown"></use></svg>Settings</h3></summary><div class="tsd-accordion-details"><div class="tsd-filter-visibility"><span class="settings-label">Member Visibility</span><ul id="tsd-filter-options"><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-protected" name="protected"/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Protected</span></label></li><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-inherited" name="inherited" checked/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Inherited</span></label></li><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-external" name="external"/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>External</span></label></li></ul></div><div class="tsd-theme-toggle"><label class="settings-label" for="tsd-theme">Theme</label><select id="tsd-theme"><option value="os">OS</option><option value="light">Light</option><option value="dark">Dark</option></select></div></div></details></div><details open class="tsd-accordion tsd-page-navigation"><summary class="tsd-accordion-summary"><h3><svg width="20" height="20" viewBox="0 0 24 24" fill="none"><use href="../assets/icons.svg#icon-chevronDown"></use></svg>On This Page</h3></summary><div class="tsd-accordion-details"><details open class="tsd-accordion tsd-page-navigation-section"><summary class="tsd-accordion-summary" data-key="tsd-otp-Constructors"><svg width="20" height="20" viewBox="0 0 24 24" fill="none"><use href="../assets/icons.svg#icon-chevronDown"></use></svg>Constructors</summary><div><a href="#constructor" class=""><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="../assets/icons.svg#icon-512"></use></svg><span>constructor</span></a></div></details><details open class="tsd-accordion tsd-page-navigation-section"><summary class="tsd-accordion-summary" data-key="tsd-otp-Methods"><svg width="20" height="20" viewBox="0 0 24 24" fill="none"><use href="../assets/icons.svg#icon-chevronDown"></use></svg>Methods</summary><div><a href="#mark" class=""><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="../assets/icons.svg#icon-2048"></use></svg><span>mark</span></a><a href="#start" class=""><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="../assets/icons.svg#icon-2048"></use></svg><span>start</span></a></div></details></div></details></div><div class="site-menu"><nav class="tsd-navigation"><a href="../modules.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="../assets/icons.svg#icon-1"></use></svg><span>@rvoh/dream</span></a><ul class="tsd-small-nested-navigation" id="tsd-nav-container" data-base=".."><li>Loading...</li></ul></nav></div></div></div><footer><p class="tsd-generator">Generated using <a href="https://typedoc.org/" target="_blank">TypeDoc</a></p></footer><div class="overlay"></div></body></html>
|